Skip to content

CLI WeKnora (outil en ligne de commande weknora) ​

WeKnora CLI (commande weknora) gère bases de connaissances et documents, exécute la recherche et la Q&R en flux. En interactif, sortie lisible optionnelle ; pour scripts et agents IA : JSON, erreurs typées, prévisualisation --dry-run et contrat weknora schema ; weknora mcp serve expose un serveur MCP.

Sources : cli/, module Go indépendant (github.com/Tencent/WeKnora/cli), build source Go 1.26+. Entrée : cli/cmd/root.go.

Depuis v0.8.2, « Paramètres → Intégrations de publication → CLI » propose un guide avec commandes copiables pour le déploiement courant :

  1. Installation : build depuis les sources (Git + Go 1.26+, exemples macOS / Linux) ;
  2. Connexion : weknora profile add weknora --host '<adresse du service>' --use && weknora auth login — profile nommé weknora, connexion email/mot de passe. Conserver le préfixe de chemin du reverse proxy ; pas de /api/v1 en suffixe ; renommer le profile s’il existe déjà ;
  3. Vérification : weknora doctor et weknora kb list.

Le panneau droit liste aussi des commandes courantes (upload, recherche, Q&R, agents) et un exemple MCP ("args": ["--profile", "weknora", "mcp", "serve"]).

Paramètres → Intégrations de publication → CLI : installation, connexion et vérification
Paramètres → Intégrations de publication → CLI : installation, connexion et vérification

Architecture globale ​


Installation ​

Build depuis les sources (mode supporté actuellement) ​

Pas de binaire précompilé ni go install officiel pour l’instant.

bash
git clone https://github.com/Tencent/WeKnora.git
cd WeKnora/cli
go build -o weknora .
sudo mv weknora /usr/local/bin/   # ou tout répertoire du $PATH

cli/Makefile ​

targetRôle
make buildCompile ./bin/weknora, ldflags Version/Commit/Date
make testgo test ./...
make test-coverageCouverture
make lintgo vet ./...
make tidygo mod tidy
make cleanSupprime ./bin et coverage.out

Pas de cible install — déplacer le binaire manuellement dans $PATH.


Configuration et profiles ​

Fichier et chemins ​

cli/internal/config/config.go : $XDG_CONFIG_HOME/weknora/config.yaml (sinon ~/.config/weknora/config.yaml ; cli/internal/xdg/xdg.go, XDG aussi sur macOS). Écriture atomique, mode 0600.

Schéma disque (config.Config / config.Profile) :

yaml
current_profile: prod
profiles:
  prod:
    host: https://kb.example.com
    tenant_id: 42
    user: user@example.com
    api_key_ref: keychain://...
    token_ref: keychain://...
    refresh_token_ref: keychain://...
    default_kb_id: "..."
defaults:
  format: json
  no_version_check: true

Secrets ​

Les credentials ne sont pas dans config.yaml, seulement des refs. cli/internal/secrets/ :

  • KeyringStore : keyring OS, espace weknora:<profile>:<key> (access / refresh / api_key) ;
  • FileStore : repli $XDG_CONFIG_HOME/weknora/secrets/<profile>/<key> (0600) ; avertissement stderr unique à auth login.

Priorité de résolution du profile ​

Factory.ActiveProfile (cli/internal/cmdutil/factory.go) :

  1. --profile <name> (session, non persisté) ;
  2. WEKNORA_PROFILE ;
  3. current_profile dans config.yaml (weknora profile use).

Credentials par variables d’environnement (CI / agent) ​

buildClientFromEnv :

VariableRôle
WEKNORA_TOKENJWT Bearer (prioritaire sur API key)
WEKNORA_API_KEYClé API
WEKNORA_HOSTHôte (sinon profile actif)
WEKNORA_PROFILEOverride profile
WEKNORA_KB_IDID base explicite
WEKNORA_FORMATtext / json / ndjson
WEKNORA_LOG_LEVELerror / warn / info / debug
WEKNORA_AGENT_HELP=1--help → JSON AgentHelp

Chaîne de résolution --kb ​

Factory.ResolveKB (4 niveaux) :

  1. --kb (UUID ou nom → ListKnowledgeBases, cli/internal/cmdutil/kb.go) ;
  2. WEKNORA_KB_ID ;
  3. .weknora/project.yaml (weknora link, remontée max 64 niveaux) ;
  4. sinon local.kb_id_required.

Profile JWT : AuthRetryTransport sur 401 → /api/v1/auth/refresh ; pas de refresh pour clé API / env seuls.


Flags globaux, sortie et scripts ​

Flags globaux (addGlobalFlags) ​

FlagAliasDescription
--formattext | json | ndjson. Défaut json (agent-first). Priorité : --format > WEKNORA_FORMAT > json
--jq-qFiltre jq (json/ndjson uniquement)
--profileOverride profile (non persisté)
--log-levelLogs SDK
--yes-ySans confirmation destructive
--version= weknora version

--dry-run sur la plupart des mutations : meta.dry_run=true + meta.plan.

Envelope JSON (cli/internal/output/envelope.go) ​

Succès stdout :

json
{"ok": true, "data": ..., "meta": {"count": 2, "total_count": 2, "has_more": false}, "profile": "prod"}

Erreur stderr :

json
{"ok": false, "error": {"type": "auth.unauthenticated", "message": "...", "exit_code": 3,
  "hint": "...", "retry_argv": ["weknora","auth","login"], "retryable": false}}

Types : auth.*, resource.*, input.*, server.*, network.error, operation.*, local.*, internal.error.

ndjson pour chat / session ask / session resume : ligne init CLI puis événements SSE.

Codes de sortie (weknora exit-codes) ​

CodeSignificationTypesAction agent
0Succès—Continuer
1Erreur locale / opérationlocal.*, operation.*, etc.Lire stderr
2Erreur parsing flagsinput.invalid_argument--help
3Authauth.*auth login
4Introuvableresource.not_foundVérifier id
5Entrée invalideinput.*Corriger params
6Rate limitserver.rate_limitedBackoff
7Serveur / réseauserver.*, network.*Retry
10Confirmation requiseinput.confirmation_requiredHumain + -y
124Timeoutoperation.timeout--timeout
130Signal—Arrêter

Protocole exit-10 : suppressions, kb config set, api -X DELETE/PUT/PATCH, message delete, session tool-approval resolve sans -y en non-TTY → 10, aucune mutation.

Introspection machine ​

  • weknora schema : index ou contrat d’une commande ;
  • WEKNORA_AGENT_HELP=1 weknora <cmd> --help ;
  • Sous-commande inconnue → input.unknown_subcommand + suggestions.

Groupes de commandes ​

profile (cli/cmd/profile/) ​

Sous-commandeUseDescription
listlistLister profiles
addadd <name>Nouveau profile (host seulement)
useuse <name>Profile par défaut persisté
removeremove <name>Supprimer profile + refs secrets

add : --host (requis), --user, --use.

bash
weknora profile add prod --host=https://kb.example.com --use
weknora profile list --format json

auth (cli/cmd/auth/) ​

Sous-commandeUseDescription
loginloginProfile actif : interactif ou --with-token (stdin API key, vérif /auth/me)
logoutlogoutEffacer credentials ; --all
listlistProfiles authentifiés
statusstatusProfile, principal, état token
refreshrefreshNouvel access JWT
tokentokenCredential brut sur stdout
bash
weknora auth login
echo "$WEKNORA_API_KEY" | weknora auth login --with-token
weknora auth status --format json

auth login n’accepte pas --host — profile add ... --use d’abord.

config (cli/cmd/config/) ​

Sous-commandeUseDescription
viewviewConfig résolue + source de chaque valeur, sans requête réseau
bash
weknora config view --format json --jq '.data.kb_source'
CommandeUseDescription
linklink [kb].weknora/project.yaml ; --kb ou arg ; interactif si TTY ; --dry-run
unlinkunlinkSupprime le lien
bash
weknora link engineering
weknora link --kb a32a63ff-fb36-4874-bcaa-30f48570a694

kb (cli/cmd/kb/) ​

Sous-commandeUseDescription
listlistBases visibles ; --pinned, --limit/-L (30)
viewview <kb-id>Détail
createcreate <name>--description, --embedding-model, --chat-model, --storage-provider
updateupdate <kb-id>--name, --description
deletedelete <kb-id>exit-10, -y
pin / unpinpin / unpinIdempotent
statusstatus <kb-id>Healthcheck léger
checkcheck <kb-id>E2E + docs en échec
configconfig <kb-id>Modèles en lecture seule, retrieval_ready, pas de clés API
config setset <kb-id>--chat-model + --embedding-model requis ; exit-10
bash
weknora kb create docs --embedding-model text-embedding-3 --chat-model gpt-4o
weknora kb config set <kb-id> --chat-model <id> --embedding-model <id> -y

doc (cli/cmd/doc/) ​

Sous-commandeUseDescription
uploadupload <file>--name, --recursive + --glob, --metadata, --enable-multimodel, --channel
fetchfetch <url>--name, --title, --file-type, --tag-id, --channel
createcreateMarkdown inline : --text, --title, etc.
listlistFiltres status, keyword, dates RFC3339, pagination
view / update / deleteDétail, MAJ, suppression batch / --all --kb=
downloaddownload <doc-id>-O, --clobber
reparsereparseRe-analyse
waitwaitPoll index ; --timeout (déf. 10m, code 124), --interval
bash
weknora doc upload ./design.pdf --kb docs
weknora doc wait <doc-id> --timeout 5m && weknora search chunks "RRF" --kb docs

chunk (cli/cmd/chunk/) ​

Sous-commandeUseDescription
listlistDebug : --doc requis
viewview <chunk-id>Contenu
deletedelete ... --doc <doc-id>exit-10
Sous-commandeUseDescription
chunkschunks "<query>"Hybride ; --kb, --limit (8), seuils, --no-vector / --no-keyword
docsdocs "<query>"Docs par mot-clé
kbkb "<query>"Bases (match client)
sessionssessions "<query>"Sessions (match client)
bash
weknora search chunks "rate limiting design" --kb docs --limit 5 --format json --jq '.data[].content'

chat (cli/cmd/chat/chat.go) ​

chat "<text>" — json (défaut, envelope bufferisé), text (flux lisible), ndjson (SSE + init).

Flags : --kb, --session, --reference, --verbose.

bash
weknora chat "What is RRF?" --kb a32a63ff-fb36-4874-bcaa-30f48570a694
weknora chat "Continue" --session sess_abc --format ndjson

session (cli/cmd/session/) ​

Sous-commandeUseDescription
listlist--since (7d, 24h, …)
viewview <session-id>--full
askask "<text>"Agent serveur : -a/--agent requis
resumeresume <session-id>-m/--message
stopstop-m/--message
deletedeleteBatch, exit-10
tool-approval resolveresolve <pending-id>--reject, --reason, --modified-args
bash
weknora session ask "Résumer cette base" --agent agt_123 --format ndjson
weknora session tool-approval resolve <pending-id> --reject --reason "Écriture non autorisée" -y

message (cli/cmd/message/) ​

Sous-commandeUseDescription
listlist --session <id>Pagination --before
searchsearch "<query>"Historique ; `--mode keyword
deletedelete <message-id> --session <id>exit-10

agent (cli/cmd/agent/) ​

CRUD + status / check ; create avec --model, prompts, --attach-kb, --config-file, --generate-skeleton, etc.

bash
weknora agent create researcher --model gpt-4o --attach-kb <kb-id> --system-prompt-file ./prompt.md
weknora agent update agt_123 --add-kb <kb-id2> --temperature 0.3

model (cli/cmd/model/) ​

list / view / create / update / delete ; types Embedding, Rerank, KnowledgeQA, etc. ; --api-key-stdin.

bash
weknora model create bge-m3 --type Embedding --source local --base-url http://localhost:11434 --dimension 1024
echo "$OPENAI_KEY" | weknora model create gpt-4o --type chat --source remote --provider openai --api-key-stdin

api (cli/cmd/api/api.go) ​

api <path> avec auth du profile.

FlagAliasDescription
--method-XGET par défaut ; body → POST auto
--data-dJSON inline
--inputFichier body
--field-FObjet JSON key=value
--paginateFusion pages

DELETE exit-10 ; PUT/PATCH confirmation ; --dry-run (non-GET).

bash
weknora api /api/v1/knowledge-bases
weknora api /api/v1/knowledge-bases -d '{"name":"foo"}'
weknora api /api/v1/knowledge-bases/<id> -X DELETE -y

mcp (cli/cmd/mcp/) ​

Sous-commandeUseDescription
serveserveMCP JSON-RPC stdio ; logs stderr ; échec immédiat sans profile

10 outils (cli/internal/mcp/tools.go) : lecture + chat / session_ask (créent session/message).

json
{
  "mcpServers": {
    "weknora": { "command": "weknora", "args": ["mcp", "serve"] }
  }
}

skills (cli/cmd/skills/skills.go) ​

Sous-commandeUseDescription
listlistSkills embarqués (cli/skills/embed.go)
installinstall--dir (déf. ~/.claude/skills), --force, --dry-run

doctor (cli/cmd/doctor/doctor.go) ​

4 checks : URL, auth, version, stockage secrets. --no-cache, --offline.

bash
weknora doctor --format json --jq '.data.summary.all_passed'

Commandes racine ​

CommandeUseDescription
versionversionMétadonnées build
schemaschema [command...]Contrat machine
exit-codesexit-codesMatrice codes

Tests d’acceptation (cli/acceptance/) ​

Surface de contrat — « change with care ».

contract/ ​

  • wire_test.go : golden JSON dans testdata/wire/ (version, auth, doctor, kb_list, search, …).
  • errorcodes_test.go : ast scan → registre cmdutil.AllCodes().

e2e/ ​

Tag acceptance_e2e :

bash
cd cli
WEKNORA_E2E_HOST=https://kb.example.com WEKNORA_E2E_TOKEN=eyJ... \
  go test -tags=acceptance_e2e -v ./acceptance/e2e/...

TestRAGFullLoop : kb create → upload → wait → search → chat via env credentials.

Tests transverses dans cli/cmd/ : positional, dry-run, agenthelp, unknown subcommand.


Démarrage rapide ​

bash
# 1. Profile serveur
weknora profile add prod --host https://kb.example.com --use

# 2. Auth
weknora auth login

# 3. Doctor
weknora doctor

# 4. Base, modèles, document, index
weknora kb create docs --embedding-model <emb> --chat-model <llm>
weknora doc upload ./design.pdf --kb docs
weknora doc wait <doc-id>

# 5. Recherche et Q&R
weknora search chunks "rate limiting" --kb docs
weknora chat "Résumer ce document de conception" --kb docs

Documentation issue de WeKnora v0.9.0 · MIT License