@fenglimg/fabric-shared 2.3.0-rc.3 → 2.3.0-rc.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-UPYKUYHN.js → chunk-P6INRP3A.js} +467 -98
- package/dist/{chunk-7PS7LB5T.js → chunk-PPV5IQGX.js} +10 -10
- package/dist/i18n/index.js +1 -1
- package/dist/{index-C0cijMSw.d.ts → index-Ba3sXdL4.d.ts} +6 -9
- package/dist/index.d.ts +40 -252
- package/dist/index.js +50 -9
- package/dist/schemas/api-contracts.d.ts +8 -45
- package/dist/schemas/api-contracts.js +1 -1
- package/dist/theme.js +1 -1
- package/dist/types/index.d.ts +1 -1
- package/package.json +1 -1
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
|
|
5
5
|
// src/i18n/locales/en.ts
|
|
6
6
|
var enMessages = {
|
|
7
|
-
"cli.main.description": "Fabric CLI \u2014 feeds your project's decisions, pitfalls & conventions to your AI assistant automatically
|
|
7
|
+
"cli.main.description": "Fabric CLI \u2014 feeds your project's decisions, pitfalls & conventions to your AI assistant automatically. First time? Run: fabric install",
|
|
8
8
|
"cli.shared.created": "Created",
|
|
9
9
|
"cli.shared.skipped": "Skipped",
|
|
10
10
|
"cli.shared.next": "Next",
|
|
@@ -30,21 +30,68 @@ var enMessages = {
|
|
|
30
30
|
"cli.shared.invalid-host-empty": "Invalid host: <empty>",
|
|
31
31
|
"cli.shared.invalid-port": "Invalid port: {value}",
|
|
32
32
|
"cli.shared.error": "Error",
|
|
33
|
-
//
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
"cli.
|
|
38
|
-
"cli.
|
|
39
|
-
"cli.
|
|
40
|
-
"cli.
|
|
41
|
-
|
|
33
|
+
// Top-level command summaries (one concise line each — citty renders these in
|
|
34
|
+
// the root `fabric --help` COMMANDS table AND as the header of each command's
|
|
35
|
+
// own `--help`, so they MUST stay single-line; verbose example blocks were
|
|
36
|
+
// removed when the bespoke grouped help retired in favour of citty's renderer).
|
|
37
|
+
"cli.store.description": "Manage mounted knowledge stores (setup via fabric install)",
|
|
38
|
+
"cli.sync.description": "Sync mounted knowledge stores (pull --rebase + push)",
|
|
39
|
+
"cli.info.description": "Show Fabric identity, project status & recall health",
|
|
40
|
+
"cli.inspect.description": "Show what Fabric injects at SessionStart",
|
|
41
|
+
// `fabric inspect` arg descriptions + --explain provenance overlay + error.
|
|
42
|
+
"cli.inspect.arg.render": "Which sink to show: 'human' (systemMessage) or 'ai' (additionalContext). Default: both.",
|
|
43
|
+
"cli.inspect.arg.explain": "Append a per-entry provenance section (id \xB7 type \xB7 maturity \xB7 scope \xB7 why-surfaced).",
|
|
44
|
+
"cli.inspect.arg.target": "Override the project root (defaults to cwd / dev-mode resolution).",
|
|
45
|
+
"cli.inspect.explain.title": "explain \xB7 provenance (not injected)",
|
|
46
|
+
"cli.inspect.explain.always": "always-active \xB7 body injected",
|
|
47
|
+
"cli.inspect.explain.reference": "reference \xB7 read on demand",
|
|
48
|
+
"cli.inspect.explain.census": "census",
|
|
49
|
+
"cli.inspect.explain.census-total": "total {total}",
|
|
50
|
+
"cli.inspect.error": "inspect failed: {message}",
|
|
51
|
+
"cli.audit.description": "Knowledge & telemetry audit (cite/conflicts/history/metrics)",
|
|
52
|
+
// `fabric audit cite` — 0%-recall-coverage self-diagnosis hints.
|
|
53
|
+
"cli.audit.cite.recall-mismatch-hint": "recall coverage is 0 despite {recalls} recall(s) across {sessions} session(s) \u2014 none shared a session with an edit. The recall caller is likely passing a non-client session_id (correlation is session-scoped). See AGENTS.md: pass the real client session_id to fab_recall.",
|
|
54
|
+
"cli.audit.cite.recall-none-hint": "recall coverage is 0 \u2014 no in-session fab_recall preceded these edits. Recall before editing, and pass the real client session_id (correlation is session-scoped). See AGENTS.md.",
|
|
55
|
+
// `fabric audit --help` — filtered help (i18n'd subcommand listing).
|
|
56
|
+
"cli.audit.help.tagline": "Knowledge & telemetry audit surfaces (read-only)",
|
|
57
|
+
"cli.audit.help.sub.cite": "Cite-policy adherence report",
|
|
58
|
+
"cli.audit.help.sub.conflicts": "Knowledge-conflict lint",
|
|
59
|
+
"cli.audit.help.sub.history": "Maintenance history rollup (archive | fix | all)",
|
|
60
|
+
"cli.audit.help.sub.descriptions": "Back-fill description-grade frontmatter fields",
|
|
61
|
+
"cli.audit.help.sub.retired": "Scan agent surfaces for retired tool/field references",
|
|
62
|
+
"cli.audit.help.sub.why": "Diagnose why a knowledge entry isn't surfacing",
|
|
63
|
+
"cli.audit.help.example.cite": "cite-coverage over the last 7 days",
|
|
64
|
+
"cli.audit.help.example.conflicts": "scan for conflicting / duplicate entries",
|
|
65
|
+
"cli.audit.help.footer": "Run `fabric audit <subcommand> --help` for per-command flags.",
|
|
66
|
+
// `fabric audit retired` — flat renderer copy.
|
|
67
|
+
"cli.audit.retired.skipped": "Retired-reference scan skipped \u2014 no agent-consumed surfaces found.",
|
|
68
|
+
"cli.audit.retired.clean": "No retired references \u2014 scanned {count} agent surface(s).",
|
|
69
|
+
"cli.audit.retired.found": "{hits} retired reference(s) across {files} scanned file(s)",
|
|
70
|
+
"cli.audit.retired.removed": "(removed)",
|
|
71
|
+
// `fabric audit why-not-surfaced <id>` — three-axis diagnosis (store / scope / timing).
|
|
72
|
+
"cli.audit.why.not-found": "'{id}' not found in any mounted store. Check the id (try `fabric store list`).",
|
|
73
|
+
"cli.audit.why.store-unbound": "'{id}' lives in store '{store}', which is NOT bound to this project.",
|
|
74
|
+
"cli.audit.why.store-unbound.hint": "bind it: fabric store bind {store}",
|
|
75
|
+
"cli.audit.why.project-mismatch": "'{id}' is scoped to '{scope}', but this repo is bound to 'project:{project}'.",
|
|
76
|
+
"cli.audit.why.project-mismatch.hint": "it surfaces only in repos bound to '{scope}' (semantic_scope axis).",
|
|
77
|
+
"cli.audit.why.narrow-timing": "'{id}' is relevance_scope=narrow \u2014 it surfaces via the PreToolUse hint when you EDIT a matching file, not at SessionStart.",
|
|
78
|
+
"cli.audit.why.narrow-timing.hint": "broad entries are the always-on spine; narrow ones are edit-time only (timing axis).",
|
|
79
|
+
"cli.audit.why.should-surface": "'{id}' should be surfacing \u2014 store '{store}' bound, scope matches, relevance_scope=broad.",
|
|
80
|
+
"cli.audit.why.should-surface.hint": "if it isn't, the SessionStart snapshot may be stale: start a fresh session or re-run `fabric install`.",
|
|
81
|
+
// `fabric info --help` — flag + scope-subcommand descriptions.
|
|
82
|
+
"cli.info.args.global.description": "Show global identity (whoami) instead of project status",
|
|
83
|
+
"cli.info.args.recall.description": "Show recall-engine detail (fusion strategy + embedding state)",
|
|
84
|
+
"cli.info.args.warm.description": "With --recall: load the embedder now (downloads the model to ~/.fabric/cache/embed on first run)",
|
|
85
|
+
"cli.info.args.json.description": "Emit machine-readable JSON instead of text",
|
|
86
|
+
"cli.info.scope.description": "(advanced/skill) Resolve a scope coordinate's read-set + write target as JSON",
|
|
87
|
+
"cli.info.scope.args.coord.description": "Scope coordinate (e.g. team, project:x, personal)",
|
|
88
|
+
"cli.info.scope.args.json.description": "Emit machine-readable JSON (scope always emits JSON)",
|
|
42
89
|
// v2.1 hidden-command i18n keys cleanup: approve/bootstrap/hooks/human-lint/
|
|
43
90
|
// ledger-append/pre-commit/scan/sync-meta/update commands removed from CLI
|
|
44
91
|
// surface in v2.0.0-rc.18. Keys intentionally retained for backward compat
|
|
45
92
|
// with external tooling that may still reference them. Remove in v2.2
|
|
46
93
|
// if no external consumers surface.
|
|
47
|
-
"cli.config.description": "Open the interactive Fabric configuration panel (language, knowledge layer, audit mode,
|
|
94
|
+
"cli.config.description": "Open the interactive Fabric configuration panel (language, knowledge layer, audit mode, MCP client wiring, etc.)",
|
|
48
95
|
"cli.config.args.target.description": "Target project directory (defaults to cwd).",
|
|
49
96
|
"cli.config.clients.claude": "Claude Code CLI",
|
|
50
97
|
"cli.config.install.description": "Install Fabric MCP server entries into detected client configs.",
|
|
@@ -73,8 +120,17 @@ var enMessages = {
|
|
|
73
120
|
"cli.config.value.default-marker": "(default)",
|
|
74
121
|
"cli.config.prompt.select": "Choose a new value for {key} (current: {current}):",
|
|
75
122
|
"cli.config.prompt.text": "Enter a new value for {key} (current: {current}):",
|
|
76
|
-
"cli.config.write.success": "
|
|
123
|
+
"cli.config.write.success": "{key} = {value}",
|
|
124
|
+
"cli.config.panel.edited": "Edited this session ({count}): {keys}",
|
|
77
125
|
"cli.config.write.failure": "Failed to write fabric-config.json: {message}",
|
|
126
|
+
"cli.config.slot.errors.missing": "Missing required <slot> argument. Valid slots: {slots}.",
|
|
127
|
+
"cli.config.slot.errors.unknown": 'Unknown slot "{slot}". Valid slots: {slots}.',
|
|
128
|
+
"cli.config.slot.dismiss.already": 'Slot "{slot}" already opted out; no-op.',
|
|
129
|
+
"cli.config.slot.dismiss.done": 'Dismissed onboard slot "{slot}". Run `fabric config onboard-reset {slot}` to re-open.',
|
|
130
|
+
"cli.config.slot.dismiss.failed": "dismiss-slot failed: {message}",
|
|
131
|
+
"cli.config.slot.reset.not-opted": 'Slot "{slot}" not opted out; no-op.',
|
|
132
|
+
"cli.config.slot.reset.done": 'Reset onboard slot "{slot}"; it will appear in `fabric onboard-coverage` as missing again.',
|
|
133
|
+
"cli.config.slot.reset.failed": "onboard-reset failed: {message}",
|
|
78
134
|
"cli.config.errors.uninit-workspace.message": "Workspace not initialized. Run `fabric install` first.",
|
|
79
135
|
"cli.config.errors.invalid-int": "Must be a positive integer.",
|
|
80
136
|
"cli.config.errors.unknown-field": "Unknown field selection \u2014 skipping.",
|
|
@@ -108,11 +164,47 @@ var enMessages = {
|
|
|
108
164
|
"cli.config.fields.embed_enabled.description": "Enable vector semantic recall (true / false). Note: true is just intent \u2014 it only takes effect when the running server can resolve the fastembed package AND the model is downloaded (auto-fetched to ~/.fabric/cache/embed on first recall). Check actual state with `fabric info recall`.",
|
|
109
165
|
"cli.config.fields.fusion.label": "Recall fusion strategy",
|
|
110
166
|
"cli.config.fields.fusion.description": "How the signals combine into one score: additive = weighted sum (BM25-led, small vector weight) / rrf = Reciprocal Rank Fusion (BM25 and vector on equal footing, so semantics actually count) / auto = adaptive (default: rrf when the vector channel is scoring, else additive \u2014 avoids degenerate single-channel rrf being worse).",
|
|
111
|
-
"cli.doctor.description": "Run Fabric target-state diagnostics (meta sync, knowledge index, bootstrap, events ledger, human-lock drift)
|
|
167
|
+
"cli.doctor.description": "Run Fabric target-state diagnostics (meta sync, knowledge index, bootstrap, events ledger, human-lock drift)",
|
|
112
168
|
"doctor.section.fixable": "Fixable errors:",
|
|
113
169
|
"doctor.section.manual": "Manual errors:",
|
|
114
170
|
"doctor.section.warnings": "Warnings:",
|
|
115
171
|
"doctor.section.fix-knowledge-mutations": "Fix-knowledge mutations:",
|
|
172
|
+
// flat-design follow-up: the remaining doctor UI-shell strings (TL;DR header,
|
|
173
|
+
// --fix mutation plan, filtered --help) move off hardcoded English into i18n so
|
|
174
|
+
// the whole `fabric doctor` surface honours the machine locale. USAGE/OPTIONS/
|
|
175
|
+
// EXAMPLES labels stay English to match citty's own renderUsage in the other
|
|
176
|
+
// commands' --help.
|
|
177
|
+
"doctor.digest.todo": "To fix ({count})",
|
|
178
|
+
"doctor.digest.clean": "all {count} checks passed \u2014 nothing to fix",
|
|
179
|
+
"doctor.digest.summary": "{todo} to fix \xB7 {ok} passed \xB7 contributor diagnostics \u2192 --verbose",
|
|
180
|
+
"doctor.digest.more-verbose": "{count} contributor finding(s) hidden \u2014 see --verbose",
|
|
181
|
+
// store diagnostics (multi-store health, the `● 存储健康` group) — i18n parity
|
|
182
|
+
// with doctor.check.*; messages carry store alias / counts via interpolation.
|
|
183
|
+
"doctor.store.no-global-config": "no global Fabric config \u2014 run `fabric install --global <url>`",
|
|
184
|
+
"doctor.store.missing-required": "required store '{id}' is not mounted; run `fabric store mount`",
|
|
185
|
+
"doctor.store.unbound": "store '{alias}' is mounted but not bound to this project; run `fabric store bind {alias}` to read its knowledge here (then `fabric store switch-write {alias}` to write team knowledge into it)",
|
|
186
|
+
"doctor.store.alias-drift": "by-alias readability link(s) out of sync for {refs}; run `fabric doctor --fix` to repair ~/.fabric/stores/by-alias/",
|
|
187
|
+
"doctor.store.local-only": "store '{alias}' is local-only; add a git remote to back it up",
|
|
188
|
+
"doctor.store.executable": "store '{alias}' contains executable/script files ({files}) \u2014 stores are data-only; Fabric never runs them (S65)",
|
|
189
|
+
"doctor.store.active-personal-invalid": "active personal store '{store}' is not a mounted personal store; run `fabric store switch-personal <alias>` or `fabric doctor --fix`",
|
|
190
|
+
"doctor.store.active-personal-unset": "{count} personal stores are mounted but none is active; run `fabric store switch-personal <alias>` to pick one (or `fabric doctor --fix` to default to the first)",
|
|
191
|
+
"doctor.store.related-broken": "{count} broken `related` link(s) point at ids absent from the corpus: {samples}{overflow} \u2014 fix the related edges via `fab_review` (modify) or edit the entry frontmatter",
|
|
192
|
+
"doctor.store.related-hub": "related graph hubs (top {shown} of {total} referenced): {top}",
|
|
193
|
+
"doctor.store.unreachable": "store '{alias}' is in the read-set but unreachable on disk ({reason}); run `fabric store mount` / re-clone it, then `fabric doctor`",
|
|
194
|
+
"doctor.store.consumption-heatmap": "top consumed (last {days}d, {consumed}/{total} entries read across {windows} window(s)): {top}",
|
|
195
|
+
"doctor.store.consumption-zero": "{count} entries never consumed in the last {days}d: {sample}{overflow} \u2014 review for retirement via `fab_review` (consumption is one signal, not proof of rot)",
|
|
196
|
+
"doctor.store.overflow-more": ", \u2026(+{count} more)",
|
|
197
|
+
"doctor.fix-plan.header": "fix-knowledge mutation plan ({count} total)",
|
|
198
|
+
"doctor.fix-plan.preview": "preview:",
|
|
199
|
+
"doctor.fix-plan.more": "... and {count} more",
|
|
200
|
+
"doctor.help.tagline": "Diagnose and fix Fabric workspace issues",
|
|
201
|
+
"doctor.help.flag.target": "Override project root (defaults to cwd)",
|
|
202
|
+
"doctor.help.flag.fix": "Auto-fix issues (derived-state + knowledge frontmatter/git mv)",
|
|
203
|
+
"doctor.help.flag.json": "Output as JSON for programmatic consumption",
|
|
204
|
+
"doctor.help.flag.verbose": "Show maintainer-audience action hints",
|
|
205
|
+
"doctor.help.example.run": "Run diagnostics",
|
|
206
|
+
"doctor.help.example.fix": "Fix derived-state + knowledge issues",
|
|
207
|
+
"doctor.help.footer": "Run `fabric doctor` to see a full diagnostic report. Audits \u2192 `fabric audit`.",
|
|
116
208
|
// flat-design-system Wave5 (TASK-005): C-圆点 group headers for the reskinned
|
|
117
209
|
// doctor surface (`● Store Health` / `● Checks`), replacing the old hardcoded
|
|
118
210
|
// sectionBar literals so the wording is localized in both locales.
|
|
@@ -397,6 +489,13 @@ var enMessages = {
|
|
|
397
489
|
"doctor.check.store_orphan.message.plural": "{count} stores exist on disk but are not registered in the global registry (first: {detail}); recall / bind cannot see them. Run `fabric doctor --fix` to adopt them (re-register \u2014 never deletes the on-disk tree).",
|
|
398
490
|
"doctor.check.store_orphan.remediation": "Run `fabric doctor --fix` to adopt the orphan store(s) into the registry (re-register by store_uuid, alias auto-disambiguated on clash; rescue-before-delete \u2014 registers, never deletes on disk).",
|
|
399
491
|
"doctor.check.store_orphan.ok": "No unregistered orphan stores under ~/.fabric/stores.",
|
|
492
|
+
// W2 (F-003): project-registry drift — projects.json ↔ projects/ folder tree.
|
|
493
|
+
"doctor.check.project_registry_drift.name": "Project registry drift",
|
|
494
|
+
"doctor.check.project_registry_drift.ok": "Every knowledge/projects/<id>/ folder is registered in projects.json and no registered folder is empty.",
|
|
495
|
+
"doctor.check.project_registry_drift.message.unregistered": "{total} project registry drift issue(s): {breakdown}. e.g. projects/{projectId}/ in store '{storeAlias}' holds knowledge but is not registered in projects.json (unrouted). Run `fabric doctor --fix` to register it (rescue-before-delete \u2014 never deletes the folder).",
|
|
496
|
+
"doctor.check.project_registry_drift.message.orphan": "{total} project registry drift issue(s): {breakdown}. e.g. projects/{projectId}/ in store '{storeAlias}' exists on disk but is not registered in projects.json. Run `fabric doctor --fix` to register it (rescue \u2014 never deletes the folder).",
|
|
497
|
+
"doctor.check.project_registry_drift.message.empty": "{total} project registry drift issue(s): {breakdown}. e.g. registered project '{projectId}' in store '{storeAlias}' has an empty projects/{projectId}/ folder (zero entries). Run `fabric doctor --fix` to prune the empty folder.",
|
|
498
|
+
"doctor.check.project_registry_drift.remediation": "Run `fabric doctor --fix` to reconcile: orphan / unregistered-write folders are rescue-registered into projects.json (never deleted, even when non-empty); only genuinely-empty registered folders are pruned. A ghost registration (registered id with no folder) is legal (lazy creation) and needs no action.",
|
|
400
499
|
"doctor.check.preexisting_root_files.name": "Preexisting root markdown",
|
|
401
500
|
"doctor.check.preexisting_root_files.ok": "No CLAUDE.md or AGENTS.md detected at project root.",
|
|
402
501
|
"doctor.check.preexisting_root_files.message": "{files} detected at project root. These root files are not auto-loaded by Fabric MCP.",
|
|
@@ -566,13 +665,15 @@ var enMessages = {
|
|
|
566
665
|
"cli.doctor.errors.invalid-history-mode": "Invalid --history mode '{input}'. Use archive | fix | all.",
|
|
567
666
|
"doctor.history.header": "Doctor history (mode={mode}, last {sinceLabel}, {days} day(s))",
|
|
568
667
|
"doctor.history.empty": "No doctor or archive activity within the --since={sinceLabel} window (mode={mode}).",
|
|
569
|
-
"cli.install.description": "Install Fabric in the target project (scaffold .fabric/, bootstrap templates, MCP client wiring, git hooks)
|
|
668
|
+
"cli.install.description": "Install Fabric in the target project (scaffold .fabric/, bootstrap templates, MCP client wiring, git hooks)",
|
|
570
669
|
"cli.install.args.target.description": "Target project path. Defaults to --target, then EXTERNAL_FIXTURE_PATH, then cwd.",
|
|
571
670
|
"cli.install.args.debug.description": "Print target resolution details to stderr.",
|
|
572
671
|
"cli.install.args.yes.description": "Accept the current install plan and run without the TTY wizard",
|
|
573
672
|
"cli.install.args.dry-run.description": "Print the install plan without writing files or running follow-up stages",
|
|
574
673
|
"cli.install.args.enable-embed.description": "Opt in to vector semantic search (sets embed_enabled + embed_model; prints fastembed install steps)",
|
|
575
674
|
"cli.install.args.embed-model.description": "With --enable-embed: override the pinned embed model (default fast-bge-small-zh-v1.5)",
|
|
675
|
+
"cli.install.args.global.description": "Set up global Fabric (~/.fabric: uid + personal store + config)",
|
|
676
|
+
"cli.install.args.url.description": "Clone + mount a shared store remote. In a project install: also binds it to this project and sets it as the write target. With --global: mounts it machine-wide only.",
|
|
576
677
|
// TASK-004: --verbose expands the per-phase detail a collapsed re-install would
|
|
577
678
|
// fold, and prints the full per-client capability table.
|
|
578
679
|
"cli.install.args.verbose.description": "Show full detail: don't collapse an idempotent re-install into a health-check card, and print the per-client capability table",
|
|
@@ -623,6 +724,11 @@ var enMessages = {
|
|
|
623
724
|
"cli.install.mcp.none": "no MCP clients to configure",
|
|
624
725
|
"cli.install.scan.finding.framework": "Detected: {framework} project",
|
|
625
726
|
"cli.install.scan.finding.scale": "Scale: {files} files \xB7 {entries} entry points",
|
|
727
|
+
// flat-design: scan result folded into ONE human line (framework + scale); the
|
|
728
|
+
// version is suppressed when it resolved to "unknown"; falls back to plain when
|
|
729
|
+
// no framework was detected.
|
|
730
|
+
"cli.install.scan.summary.framework": "Detected {framework} project \xB7 {files} files \xB7 {entries} entry points",
|
|
731
|
+
"cli.install.scan.summary.plain": "Scan complete \xB7 {files} files \xB7 {entries} entry points",
|
|
626
732
|
"cli.install.rollback.feedback": "Rolled back {count} change(s); project left unchanged.",
|
|
627
733
|
"cli.install.stages.skipped": "skipped",
|
|
628
734
|
"cli.install.stages.completed": "completed",
|
|
@@ -640,7 +746,7 @@ var enMessages = {
|
|
|
640
746
|
"cli.summary.done": "Done!",
|
|
641
747
|
"cli.summary.all-ok": "All steps completed successfully",
|
|
642
748
|
"cli.summary.n-failed": "{count} step(s) failed",
|
|
643
|
-
"cli.summary.
|
|
749
|
+
"cli.summary.all-resolved": "all resolved \xB7 {done} done / {skipped} skipped",
|
|
644
750
|
"cli.summary.count.succeeded": "succeeded",
|
|
645
751
|
"cli.summary.count.skipped": "skipped",
|
|
646
752
|
"cli.summary.count.failed": "failed",
|
|
@@ -669,6 +775,10 @@ var enMessages = {
|
|
|
669
775
|
// The verbose capability table is gated behind --verbose; this one line is the
|
|
670
776
|
// honest "what to do next" footer. {action} = the concrete next command.
|
|
671
777
|
"cli.install.next-step.anchor": "Next \u2192 {action}",
|
|
778
|
+
// flat-design (G6): the real next action after install is restarting the client
|
|
779
|
+
// so its MCP server loads — that is the default anchor; the --reapply maintenance
|
|
780
|
+
// hint moves to --verbose.
|
|
781
|
+
"cli.install.next-step.restart": "restart any open Claude Code / Codex session to load Fabric (new sessions pick it up automatically).",
|
|
672
782
|
"cli.install.reason-message": "{label} {message}",
|
|
673
783
|
"cli.install.language.prompt": "Choose the Fabric language (used for both UI and knowledge; change later via `fabric config`):",
|
|
674
784
|
"cli.install.language.option.zh-CN": "\u7B80\u4F53\u4E2D\u6587 (zh-CN)",
|
|
@@ -746,11 +856,15 @@ var enMessages = {
|
|
|
746
856
|
"cli.install.store.slot.personal.multi-new-hint": "a fresh empty personal store, set as active",
|
|
747
857
|
"cli.install.store.slot.personal.new-alias": "alias for the new personal store:",
|
|
748
858
|
"cli.install.store.slot.personal.switched": "active personal store switched to '{alias}'",
|
|
749
|
-
"cli.install.store.slot.team.status": "Team store (team-class): '{alias}' \u2713",
|
|
859
|
+
"cli.install.store.slot.team.status": "Team store (team-class): '{alias}'{source} \u2713",
|
|
750
860
|
"cli.install.store.slot.team.empty": "Team store (team-class): none bound yet",
|
|
751
|
-
"cli.install.store.slot.team.prompt": "
|
|
861
|
+
"cli.install.store.slot.team.prompt": "Choose the team knowledge store (team-class) for this project:",
|
|
752
862
|
"cli.install.store.slot.team.bound-label": "keep current: {alias}",
|
|
753
863
|
"cli.install.store.slot.team.switch-label": "switch to mounted: {alias}",
|
|
864
|
+
// flat-design store menu: "keep current" and "skip" are merged — when a team is
|
|
865
|
+
// bound the SKIP row renders as keep-label (no change), otherwise as plain skip.
|
|
866
|
+
"cli.install.store.slot.team.keep-label": "keep current: {alias} \xB7 no change",
|
|
867
|
+
"cli.install.store.slot.team.keep-hint": "{source}stay on this team store; leave the binding unchanged",
|
|
754
868
|
"cli.install.store.skip-label": "skip",
|
|
755
869
|
"cli.install.store.bind-mounted.skip-hint": "leave mounted stores unbound for now",
|
|
756
870
|
"cli.install.store.project-coordinate": "Project coordinate in store '{store}':",
|
|
@@ -823,7 +937,7 @@ var enMessages = {
|
|
|
823
937
|
"cli.install.diff.state.present-canonical": "canonical",
|
|
824
938
|
"cli.install.diff.state.drifted": "drifted",
|
|
825
939
|
"cli.install.diff.state.user-modified": "user-modified",
|
|
826
|
-
"cli.uninstall.description": "Uninstall Fabric from the target project
|
|
940
|
+
"cli.uninstall.description": "Uninstall Fabric from the target project (global stores under ~/.fabric/stores/ are never deleted)",
|
|
827
941
|
"cli.uninstall.args.target.description": "Target project path. Defaults to --target, then EXTERNAL_FIXTURE_PATH, then cwd.",
|
|
828
942
|
"cli.uninstall.args.debug.description": "Print target resolution details to stderr.",
|
|
829
943
|
"cli.uninstall.args.yes.description": "Accept the current uninstall plan and run without the TTY wizard.",
|
|
@@ -865,7 +979,6 @@ var enMessages = {
|
|
|
865
979
|
// flat-design-system Wave5 (TASK-006 G3): human result words for the summary
|
|
866
980
|
// card detail rows, symmetric with install's `{count} installed` / `up to date`.
|
|
867
981
|
"cli.uninstall.stage.cleaned-count": "{count} cleaned",
|
|
868
|
-
"cli.uninstall.stage.already-clean": "already clean",
|
|
869
982
|
"cli.uninstall.summary.title": "Uninstall summary",
|
|
870
983
|
"cli.uninstall.summary.body": "removed={removed} skipped={skipped} errors={errors}",
|
|
871
984
|
"cli.uninstall.healthcheck.title": "\u2713 Fabric already absent \xB7 nothing to remove",
|
|
@@ -1101,6 +1214,62 @@ var enMessages = {
|
|
|
1101
1214
|
"cli.whoami.stores-none": "stores: (none mounted)",
|
|
1102
1215
|
"cli.whoami.stores-label": "stores:",
|
|
1103
1216
|
"cli.shared.local-only": "(local-only)",
|
|
1217
|
+
// `fabric info` (flat-design) — identity / status / recall titles + field labels.
|
|
1218
|
+
"cli.info.field.uid": "uid",
|
|
1219
|
+
"cli.info.identity.title": "Fabric Identity",
|
|
1220
|
+
"cli.info.status.title": "Project Status",
|
|
1221
|
+
"cli.info.status.group.machine": "This machine",
|
|
1222
|
+
"cli.info.status.group.project": "Current project",
|
|
1223
|
+
"cli.info.status.field.project": "project",
|
|
1224
|
+
"cli.info.status.field.mounted": "mounted stores",
|
|
1225
|
+
"cli.info.status.field.bound": "bound stores",
|
|
1226
|
+
"cli.info.status.value.unset": "(unset)",
|
|
1227
|
+
"cli.info.status.value.not-project": "(not a Fabric project)",
|
|
1228
|
+
"cli.info.status.value.no-global": "(no global config)",
|
|
1229
|
+
"cli.info.recall.title": "Recall Engine",
|
|
1230
|
+
"cli.info.recall.summary.on": "semantic search on \u2014 details: fabric info --recall",
|
|
1231
|
+
"cli.info.recall.summary.off": "keyword mode \xB7 semantic search off \u2014 details: fabric info --recall",
|
|
1232
|
+
"cli.info.recall.mode.additive": "additive (keyword mode)",
|
|
1233
|
+
"cli.info.recall.mode.rrf": "rrf (keyword + semantic)",
|
|
1234
|
+
"cli.info.recall.reason.forced-additive": "fixed to keyword mode (additive) by config",
|
|
1235
|
+
"cli.info.recall.reason.auto-additive": "vector channel not ready \u2014 auto-falls back to keyword mode",
|
|
1236
|
+
"cli.info.recall.reason.auto-rrf": "vector channel ready \u2014 blending keyword + semantic (rrf)",
|
|
1237
|
+
"cli.info.recall.reason.rrf-ready": "fixed to rrf by config; vector channel ready",
|
|
1238
|
+
"cli.info.recall.reason.rrf-warn": "fixed to rrf by config, but the vector channel is not ready \u2014 single-channel rrf is worse than keyword mode",
|
|
1239
|
+
"cli.info.recall.install-hint": "install it to enable semantic search: npm i -g fastembed",
|
|
1240
|
+
"cli.info.recall.field.fusion-config": "fusion (config)",
|
|
1241
|
+
"cli.info.recall.field.fusion-effective": "fusion (in use)",
|
|
1242
|
+
"cli.info.recall.field.embed-enabled": "embed enabled",
|
|
1243
|
+
"cli.info.recall.field.embed-model": "embed model",
|
|
1244
|
+
"cli.info.recall.field.fastembed": "fastembed pkg",
|
|
1245
|
+
"cli.info.recall.field.cache-dir": "model cache",
|
|
1246
|
+
"cli.info.recall.field.model-cached": "model cached",
|
|
1247
|
+
"cli.info.recall.field.vector": "vector channel",
|
|
1248
|
+
"cli.info.recall.fastembed.yes": "resolvable",
|
|
1249
|
+
"cli.info.recall.fastembed.no": "not installed (optional dep)",
|
|
1250
|
+
"cli.info.recall.cached.no": "not cached \u2014 downloads on first recall (or `fabric info --recall --warm`)",
|
|
1251
|
+
"cli.info.recall.vector.ready": "READY",
|
|
1252
|
+
"cli.info.recall.vector.not-ready": "not ready \u2014 recall falls back to keyword mode (BM25 / additive)",
|
|
1253
|
+
"cli.info.recall.warm.ok": "embedder warm: model '{model}' loaded (vector dim {dim}), cached at {dir}",
|
|
1254
|
+
"cli.info.recall.warm.fail": "embedder unavailable \u2014 the optional 'fastembed' package is not resolvable or the model failed to load.\n Recall falls back to keyword mode (BM25 / additive). Install fastembed where the server resolves modules, then retry.",
|
|
1255
|
+
"cli.store.list.description": "List mounted knowledge stores",
|
|
1256
|
+
// Footer note appended to `fabric store --help` — explains where the advanced
|
|
1257
|
+
// (meta.hidden) operations went so the list-only listing isn't a dead end.
|
|
1258
|
+
"cli.store.help.folded-note": "Advanced operations (create / bind / switch-write / migrate, etc.) are folded \u2014 they're driven by fabric install and the fabric-store skill. Run `fabric store <command> --help` directly when you need one.",
|
|
1259
|
+
"cli.store.list.title": "Mounted stores",
|
|
1260
|
+
"cli.store.project.list.title": "Projects in store '{store}'",
|
|
1261
|
+
"cli.store.project.list.empty": "(no registered projects)",
|
|
1262
|
+
"cli.store.project.created": "registered project '{id}' in store '{store}'",
|
|
1263
|
+
"cli.store.migrate.title": "Knowledge scope migration",
|
|
1264
|
+
"cli.store.backfill.noop": "scope backfill: nothing to do ({count} already consistent)",
|
|
1265
|
+
"cli.store.backfill.summary": "scope backfill: {changed} updated, {unchanged} unchanged",
|
|
1266
|
+
"cli.store.backfill.scope-note": "{count} entries defaulted to semantic_scope: team. Demote project-specific ones with `fabric store migrate scope <store> --to project:<id> --id <id>`.",
|
|
1267
|
+
"cli.store.rescope.noop": "re-scope: nothing to do ({count} already at '{scope}')",
|
|
1268
|
+
"cli.store.rescope.summary": "re-scope \u2192 {scope}: {changed} updated, {unchanged} unchanged",
|
|
1269
|
+
"cli.store.rescope.refused": "{count} entries refused",
|
|
1270
|
+
"cli.store.reroot.noop": "reroot: nothing to relocate ({skipped} entries stay flat)",
|
|
1271
|
+
"cli.store.reroot.summary": "reroot: {moved} project entries relocated into knowledge/projects/<id>/",
|
|
1272
|
+
"cli.store.reroot.provenance-gap": "{count} moved via fs rename (untracked / non-git) \u2014 git blame history was NOT preserved for these",
|
|
1104
1273
|
"cli.store.none-mounted": "(no stores mounted)",
|
|
1105
1274
|
"cli.store.mounted": "mounted '{alias}' ({count} store(s) total)",
|
|
1106
1275
|
"cli.store.created": "created store '{alias}' ({uuid}) at {dir}",
|
|
@@ -1113,12 +1282,30 @@ var enMessages = {
|
|
|
1113
1282
|
"cli.store.routed": "write route: scope '{scope}' \u2192 store '{alias}'",
|
|
1114
1283
|
"cli.sync.deferred": "{count} store(s) offline \u2014 push deferred; re-run `fabric sync` when online",
|
|
1115
1284
|
"cli.sync.paused": "sync paused on a conflict \u2014 resolve it, then run `fabric sync --continue` (or `--abort`)",
|
|
1285
|
+
// flat-design (spec §0.4): `fabric sync` command-level title + per-store rows +
|
|
1286
|
+
// aggregate summary. State labels are shared between the per-store rows and the
|
|
1287
|
+
// summary count cells.
|
|
1288
|
+
"cli.sync.args.continue.description": "Resume after resolving a rebase conflict",
|
|
1289
|
+
"cli.sync.args.abort.description": "Abort the conflicted store's rebase",
|
|
1290
|
+
"cli.sync.title": "Sync stores",
|
|
1291
|
+
"cli.sync.summary.title": "Sync summary",
|
|
1292
|
+
"cli.sync.none": "no remote-backed stores to sync",
|
|
1293
|
+
"cli.sync.all-synced": "all stores synced",
|
|
1294
|
+
"cli.sync.state.synced": "synced",
|
|
1295
|
+
"cli.sync.state.offline": "offline",
|
|
1296
|
+
"cli.sync.state.conflict": "conflict",
|
|
1297
|
+
"cli.sync.state.aborted": "aborted",
|
|
1298
|
+
"cli.sync.state.pending": "pending",
|
|
1116
1299
|
"cli.metrics.invalid-since": '--since: invalid duration "{raw}" (expected e.g. 24h, 7d, 30m)',
|
|
1117
1300
|
"cli.metrics.window": "Fabric metrics \u2014 window: {window}",
|
|
1118
1301
|
"cli.metrics.window-all-time": "all-time",
|
|
1119
1302
|
"cli.metrics.rows-range": " rows: {count} ({start} \u2192 {end})",
|
|
1120
1303
|
"cli.metrics.rows": " rows: {count}",
|
|
1121
1304
|
"cli.metrics.no-activity": " (no counter activity in window \u2014 server may be idle or just started)",
|
|
1305
|
+
"cli.metrics.col.counter": "counter",
|
|
1306
|
+
"cli.metrics.col.total": "total",
|
|
1307
|
+
"cli.metrics.col.entry": "entry",
|
|
1308
|
+
"cli.metrics.section.perEntry": "Top per-entry consumed (knowledge_consumed:<id>)",
|
|
1122
1309
|
// W3-09 (ISS-035): forensic project scan progress (stderr, TTY-only).
|
|
1123
1310
|
"cli.install.scanning": "scanning project for client/framework signals\u2026",
|
|
1124
1311
|
"cli.install.scan-complete": " project scan complete",
|
|
@@ -1138,7 +1325,7 @@ var enMessages = {
|
|
|
1138
1325
|
|
|
1139
1326
|
// src/i18n/locales/zh-CN.ts
|
|
1140
1327
|
var zhCNMessages = {
|
|
1141
|
-
"cli.main.description": "Fabric CLI \u2014 \u81EA\u52A8\u628A\u672C\u9879\u76EE\u7684\u51B3\u7B56 / \u8E29\u5751 / \u89C4\u8303\u5582\u7ED9\u4F60\u7684 AI \u52A9\u624B\uFF0C\u8BA9\u5B83\u4E0D\u5FC5\u6BCF\u6B21\u4F1A\u8BDD\u91CD\u65B0\u5B66\u3002\
|
|
1328
|
+
"cli.main.description": "Fabric CLI \u2014 \u81EA\u52A8\u628A\u672C\u9879\u76EE\u7684\u51B3\u7B56 / \u8E29\u5751 / \u89C4\u8303\u5582\u7ED9\u4F60\u7684 AI \u52A9\u624B\uFF0C\u8BA9\u5B83\u4E0D\u5FC5\u6BCF\u6B21\u4F1A\u8BDD\u91CD\u65B0\u5B66\u3002\u9996\u6B21\u4F7F\u7528?\u8FD0\u884C: fabric install",
|
|
1142
1329
|
"cli.shared.created": "\u5DF2\u521B\u5EFA",
|
|
1143
1330
|
"cli.shared.skipped": "\u5DF2\u8DF3\u8FC7",
|
|
1144
1331
|
"cli.shared.next": "\u4E0B\u4E00\u6B65",
|
|
@@ -1163,16 +1350,62 @@ var zhCNMessages = {
|
|
|
1163
1350
|
"cli.shared.invalid-host-empty": "\u65E0\u6548 host\uFF1A<empty>",
|
|
1164
1351
|
"cli.shared.invalid-port": "\u65E0\u6548\u7AEF\u53E3\uFF1A{value}",
|
|
1165
1352
|
"cli.shared.error": "\u9519\u8BEF",
|
|
1166
|
-
//
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
"cli.
|
|
1170
|
-
"cli.
|
|
1171
|
-
"cli.
|
|
1172
|
-
"cli.
|
|
1173
|
-
|
|
1174
|
-
"cli.
|
|
1175
|
-
"cli.
|
|
1353
|
+
// 顶层命令摘要(每条一句精简单行 —— citty 在根 `fabric --help` 的 COMMANDS
|
|
1354
|
+
// 表与各命令自身 `--help` 头部都用它,必须保持单行;退掉自建分组帮助、改走
|
|
1355
|
+
// citty 渲染器后,原先的多行示例块已移除)
|
|
1356
|
+
"cli.store.description": "\u7BA1\u7406\u5DF2\u6302\u8F7D\u7684\u77E5\u8BC6 store(\u5EFA\u5E93\u8D70 fabric install)",
|
|
1357
|
+
"cli.sync.description": "\u540C\u6B65\u5DF2\u6302\u8F7D\u7684\u77E5\u8BC6 store(pull --rebase + push)",
|
|
1358
|
+
"cli.info.description": "\u663E\u793A Fabric \u8EAB\u4EFD\u3001\u9879\u76EE\u72B6\u6001\u4E0E\u53EC\u56DE\u5065\u5EB7",
|
|
1359
|
+
"cli.inspect.description": "\u663E\u793A Fabric \u5728 SessionStart \u6CE8\u5165\u4E86\u4EC0\u4E48",
|
|
1360
|
+
// `fabric inspect` 参数说明 + --explain 溯源覆盖层 + 错误。
|
|
1361
|
+
"cli.inspect.arg.render": "\u663E\u793A\u54EA\u4E2A sink:'human'(systemMessage)\u6216 'ai'(additionalContext)\u3002\u9ED8\u8BA4\u4E24\u4E2A\u90FD\u663E\u793A\u3002",
|
|
1362
|
+
"cli.inspect.arg.explain": "\u8FFD\u52A0\u9010\u6761\u6765\u6E90\u6EAF\u6E90\u6BB5(id \xB7 type \xB7 maturity \xB7 scope \xB7 \u6D6E\u73B0\u539F\u56E0)\u3002",
|
|
1363
|
+
"cli.inspect.arg.target": "\u8986\u76D6\u9879\u76EE\u6839\u76EE\u5F55(\u9ED8\u8BA4\u53D6 cwd / dev \u6A21\u5F0F\u89E3\u6790)\u3002",
|
|
1364
|
+
"cli.inspect.explain.title": "explain \xB7 \u6765\u6E90\u6EAF\u6E90(\u975E\u6CE8\u5165\u5185\u5BB9)",
|
|
1365
|
+
"cli.inspect.explain.always": "\u5E38\u9A7B\u751F\u6548 \xB7 \u6B63\u6587\u5DF2\u6CE8\u5165",
|
|
1366
|
+
"cli.inspect.explain.reference": "\u53C2\u8003\u5019\u9009 \xB7 \u6309\u9700\u9605\u8BFB",
|
|
1367
|
+
"cli.inspect.explain.census": "\u5168\u96C6\u666E\u67E5",
|
|
1368
|
+
"cli.inspect.explain.census-total": "\u603B\u8BA1 {total}",
|
|
1369
|
+
"cli.inspect.error": "inspect \u5931\u8D25:{message}",
|
|
1370
|
+
"cli.audit.description": "\u77E5\u8BC6\u4E0E\u9065\u6D4B\u5BA1\u8BA1 (cite/conflicts/history/metrics)",
|
|
1371
|
+
// `fabric audit cite` — recall 覆盖率为 0 的自诊断提示。
|
|
1372
|
+
"cli.audit.cite.recall-mismatch-hint": "recall \u8986\u76D6\u7387\u4E3A 0,\u4F46\u672C\u7A97\u53E3\u6709 {recalls} \u6B21 recall(\u5206\u5E03\u5728 {sessions} \u4E2A\u4F1A\u8BDD)\u2014\u2014 \u6CA1\u6709\u4E00\u4E2A\u4E0E\u7F16\u8F91\u5171\u4EAB\u4F1A\u8BDD\u3002\u591A\u534A\u662F fab_recall \u8C03\u7528\u65B9\u4F20\u4E86\u975E\u5BA2\u6237\u7AEF session_id(\u5173\u8054\u6309\u4F1A\u8BDD\u9694\u79BB)\u3002\u89C1 AGENTS.md:fab_recall \u5FC5\u987B\u4F20\u5165\u771F\u5B9E\u5BA2\u6237\u7AEF session_id\u3002",
|
|
1373
|
+
"cli.audit.cite.recall-none-hint": "recall \u8986\u76D6\u7387\u4E3A 0 \u2014\u2014 \u8FD9\u4E9B\u7F16\u8F91\u524D\u6CA1\u6709\u540C\u4F1A\u8BDD\u7684 fab_recall\u3002\u6539\u524D\u5148 recall,\u4E14\u4F20\u5165\u771F\u5B9E\u5BA2\u6237\u7AEF session_id(\u5173\u8054\u6309\u4F1A\u8BDD\u9694\u79BB)\u3002\u89C1 AGENTS.md\u3002",
|
|
1374
|
+
// `fabric audit --help` — 过滤式帮助(i18n 子命令清单)。
|
|
1375
|
+
"cli.audit.help.tagline": "\u77E5\u8BC6\u4E0E\u9065\u6D4B\u5BA1\u8BA1\u9762(\u53EA\u8BFB)",
|
|
1376
|
+
"cli.audit.help.sub.cite": "Cite \u653F\u7B56\u9075\u5FAA\u5EA6\u62A5\u544A",
|
|
1377
|
+
"cli.audit.help.sub.conflicts": "\u77E5\u8BC6\u51B2\u7A81\u4F53\u68C0",
|
|
1378
|
+
"cli.audit.help.sub.history": "\u7EF4\u62A4\u5386\u53F2\u6C47\u603B(archive | fix | all)",
|
|
1379
|
+
"cli.audit.help.sub.descriptions": "\u56DE\u586B\u63CF\u8FF0\u7EA7 frontmatter \u5B57\u6BB5",
|
|
1380
|
+
"cli.audit.help.sub.retired": "\u626B\u63CF agent \u9762\u4E2D\u7684\u5E9F\u5F03\u5DE5\u5177/\u5B57\u6BB5\u5F15\u7528",
|
|
1381
|
+
"cli.audit.help.sub.why": "\u8BCA\u65AD\u67D0\u6761\u77E5\u8BC6\u4E3A\u4F55\u6CA1\u6D6E\u73B0",
|
|
1382
|
+
"cli.audit.help.example.cite": "\u8FD1 7 \u5929\u7684 cite \u8986\u76D6\u7387",
|
|
1383
|
+
"cli.audit.help.example.conflicts": "\u626B\u63CF\u77DB\u76FE / \u91CD\u590D\u6761\u76EE",
|
|
1384
|
+
"cli.audit.help.footer": "\u8FD0\u884C `fabric audit <subcommand> --help` \u67E5\u770B\u5404\u5B50\u547D\u4EE4\u53C2\u6570\u3002",
|
|
1385
|
+
// `fabric audit retired` — 平铺渲染文案。
|
|
1386
|
+
"cli.audit.retired.skipped": "\u5DF2\u8DF3\u8FC7 retired \u5F15\u7528\u626B\u63CF \u2014\u2014 \u672A\u53D1\u73B0 agent \u6D88\u8D39\u9762\u3002",
|
|
1387
|
+
"cli.audit.retired.clean": "\u65E0 retired \u5F15\u7528 \u2014\u2014 \u5DF2\u626B\u63CF {count} \u4E2A agent \u9762\u3002",
|
|
1388
|
+
"cli.audit.retired.found": "\u5728 {files} \u4E2A\u6587\u4EF6\u4E2D\u53D1\u73B0 {hits} \u5904 retired \u5F15\u7528",
|
|
1389
|
+
"cli.audit.retired.removed": "\uFF08\u5DF2\u79FB\u9664\uFF09",
|
|
1390
|
+
// `fabric audit why-not-surfaced <id>` — 三轴诊断(store / scope / timing)。
|
|
1391
|
+
"cli.audit.why.not-found": "\u672A\u5728\u4EFB\u4F55\u5DF2\u6302\u8F7D store \u4E2D\u627E\u5230 '{id}'\u3002\u8BF7\u6838\u5BF9 id(\u53EF\u8BD5 `fabric store list`)\u3002",
|
|
1392
|
+
"cli.audit.why.store-unbound": "'{id}' \u4F4D\u4E8E store '{store}',\u4F46\u8BE5 store \u672A\u7ED1\u5B9A\u5230\u672C\u9879\u76EE\u3002",
|
|
1393
|
+
"cli.audit.why.store-unbound.hint": "\u7ED1\u5B9A\u5B83:fabric store bind {store}",
|
|
1394
|
+
"cli.audit.why.project-mismatch": "'{id}' \u7684 scope \u662F '{scope}',\u4F46\u672C\u4ED3\u5E93\u7ED1\u5B9A\u7684\u662F 'project:{project}'\u3002",
|
|
1395
|
+
"cli.audit.why.project-mismatch.hint": "\u5B83\u53EA\u5728\u7ED1\u5B9A\u4E86 '{scope}' \u7684\u4ED3\u5E93\u4E2D\u6D6E\u73B0(semantic_scope \u8F74)\u3002",
|
|
1396
|
+
"cli.audit.why.narrow-timing": "'{id}' \u662F relevance_scope=narrow \u2014\u2014 \u4EC5\u5728\u4F60\u7F16\u8F91\u5339\u914D\u6587\u4EF6\u65F6\u7531 PreToolUse \u63D0\u793A\u6D6E\u73B0,\u4E0D\u5728 SessionStart\u3002",
|
|
1397
|
+
"cli.audit.why.narrow-timing.hint": "broad \u6761\u76EE\u662F\u5E38\u9A7B\u810A\u67F1;narrow \u4EC5\u5728\u7F16\u8F91\u65F6\u6D6E\u73B0(timing \u8F74)\u3002",
|
|
1398
|
+
"cli.audit.why.should-surface": "'{id}' \u5E94\u5F53\u6B63\u5728\u6D6E\u73B0 \u2014\u2014 store '{store}' \u5DF2\u7ED1\u5B9A\u3001scope \u5339\u914D\u3001relevance_scope=broad\u3002",
|
|
1399
|
+
"cli.audit.why.should-surface.hint": "\u82E5\u4ECD\u6CA1\u6D6E\u73B0,\u53EF\u80FD\u662F SessionStart \u5FEB\u7167\u8FC7\u671F:\u5F00\u4E2A\u65B0\u4F1A\u8BDD\u6216\u91CD\u8DD1 `fabric install`\u3002",
|
|
1400
|
+
// `fabric info --help` —— flag 与 scope 子命令描述。
|
|
1401
|
+
"cli.info.args.global.description": "\u663E\u793A\u5168\u5C40\u8EAB\u4EFD(whoami)\u800C\u975E\u9879\u76EE\u72B6\u6001",
|
|
1402
|
+
"cli.info.args.recall.description": "\u663E\u793A\u53EC\u56DE\u5F15\u64CE\u8BE6\u60C5(\u878D\u5408\u7B56\u7565 + \u5411\u91CF\u5D4C\u5165\u72B6\u6001)",
|
|
1403
|
+
"cli.info.args.warm.description": "\u914D\u5408 --recall:\u7ACB\u5373\u52A0\u8F7D embedder(\u9996\u6B21\u4F1A\u628A\u6A21\u578B\u4E0B\u8F7D\u5230 ~/.fabric/cache/embed)",
|
|
1404
|
+
"cli.info.args.json.description": "\u8F93\u51FA\u673A\u5668\u53EF\u8BFB\u7684 JSON \u800C\u975E\u6587\u672C",
|
|
1405
|
+
"cli.info.scope.description": "(\u8FDB\u9636/skill)\u628A\u4E00\u4E2A scope \u5750\u6807\u89E3\u6790\u6210 read-set + \u5199\u5165\u76EE\u6807\u7684 JSON",
|
|
1406
|
+
"cli.info.scope.args.coord.description": "Scope \u5750\u6807(\u5982 team\u3001project:x\u3001personal)",
|
|
1407
|
+
"cli.info.scope.args.json.description": "\u8F93\u51FA\u673A\u5668\u53EF\u8BFB\u7684 JSON(scope \u59CB\u7EC8\u8F93\u51FA JSON)",
|
|
1408
|
+
"cli.config.description": "\u6253\u5F00 Fabric \u4EA4\u4E92\u5F0F\u914D\u7F6E\u9762\u677F\uFF08\u8BED\u8A00\u3001\u77E5\u8BC6\u5C42\u3001\u5BA1\u8BA1\u6A21\u5F0F\u3001MCP \u5BA2\u6237\u7AEF\u914D\u7F6E\u7B49\uFF09",
|
|
1176
1409
|
"cli.config.args.target.description": "\u76EE\u6807\u9879\u76EE\u76EE\u5F55\uFF08\u9ED8\u8BA4\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55\uFF09\u3002",
|
|
1177
1410
|
"cli.config.clients.claude": "Claude Code CLI",
|
|
1178
1411
|
"cli.config.install.description": "\u5C06 Fabric MCP \u670D\u52A1\u7AEF\u6761\u76EE\u5B89\u88C5\u5230\u68C0\u6D4B\u5230\u7684\u5BA2\u6237\u7AEF\u914D\u7F6E\u4E2D\u3002",
|
|
@@ -1201,8 +1434,17 @@ var zhCNMessages = {
|
|
|
1201
1434
|
"cli.config.value.default-marker": "\uFF08\u9ED8\u8BA4\uFF09",
|
|
1202
1435
|
"cli.config.prompt.select": "\u4E3A {key} \u9009\u62E9\u65B0\u503C\uFF08\u5F53\u524D\uFF1A{current}\uFF09\uFF1A",
|
|
1203
1436
|
"cli.config.prompt.text": "\u4E3A {key} \u8F93\u5165\u65B0\u503C\uFF08\u5F53\u524D\uFF1A{current}\uFF09\uFF1A",
|
|
1204
|
-
"cli.config.write.success": "
|
|
1437
|
+
"cli.config.write.success": "{key} = {value}",
|
|
1438
|
+
"cli.config.panel.edited": "\u672C\u6B21\u5DF2\u6539\uFF08{count} \u9879\uFF09\uFF1A{keys}",
|
|
1205
1439
|
"cli.config.write.failure": "\u5199\u5165 fabric-config.json \u5931\u8D25\uFF1A{message}",
|
|
1440
|
+
"cli.config.slot.errors.missing": "\u7F3A\u5C11\u5FC5\u586B\u7684 <slot> \u53C2\u6570\u3002\u53EF\u7528\u69FD\u4F4D\uFF1A{slots}\u3002",
|
|
1441
|
+
"cli.config.slot.errors.unknown": '\u672A\u77E5\u69FD\u4F4D "{slot}"\u3002\u53EF\u7528\u69FD\u4F4D\uFF1A{slots}\u3002',
|
|
1442
|
+
"cli.config.slot.dismiss.already": '\u69FD\u4F4D "{slot}" \u5DF2\u5FFD\u7565\uFF0C\u65E0\u9700\u64CD\u4F5C\u3002',
|
|
1443
|
+
"cli.config.slot.dismiss.done": '\u5DF2\u5FFD\u7565 onboard \u69FD\u4F4D "{slot}"\u3002\u8FD0\u884C `fabric config onboard-reset {slot}` \u53EF\u91CD\u65B0\u5F00\u542F\u3002',
|
|
1444
|
+
"cli.config.slot.dismiss.failed": "dismiss-slot \u5931\u8D25\uFF1A{message}",
|
|
1445
|
+
"cli.config.slot.reset.not-opted": '\u69FD\u4F4D "{slot}" \u672A\u88AB\u5FFD\u7565\uFF0C\u65E0\u9700\u64CD\u4F5C\u3002',
|
|
1446
|
+
"cli.config.slot.reset.done": '\u5DF2\u91CD\u7F6E onboard \u69FD\u4F4D "{slot}"\uFF1B\u5B83\u5C06\u5728 `fabric onboard-coverage` \u4E2D\u91CD\u65B0\u663E\u793A\u4E3A\u7F3A\u5931\u3002',
|
|
1447
|
+
"cli.config.slot.reset.failed": "onboard-reset \u5931\u8D25\uFF1A{message}",
|
|
1206
1448
|
"cli.config.errors.uninit-workspace.message": "\u5DE5\u4F5C\u533A\u5C1A\u672A\u521D\u59CB\u5316\u3002\u8BF7\u5148\u8FD0\u884C `fabric install`\u3002",
|
|
1207
1449
|
"cli.config.errors.invalid-int": "\u5FC5\u987B\u662F\u6B63\u6574\u6570\u3002",
|
|
1208
1450
|
"cli.config.errors.unknown-field": "\u672A\u77E5\u5B57\u6BB5\u9009\u62E9 \u2014 \u5DF2\u8DF3\u8FC7\u3002",
|
|
@@ -1236,11 +1478,45 @@ var zhCNMessages = {
|
|
|
1236
1478
|
"cli.config.fields.embed_enabled.description": "\u662F\u5426\u542F\u7528\u5411\u91CF\u8BED\u4E49\u68C0\u7D22\uFF08true / false\uFF09\u3002\u6CE8\u610F\uFF1Atrue \u53EA\u662F\u610F\u56FE\u5F00\u5173\u2014\u2014\u771F\u6B63\u751F\u6548\u8FD8\u9700\u8FD0\u884C\u4E2D\u7684 server \u80FD\u89E3\u6790\u5230 fastembed \u5305\u3001\u4E14\u6A21\u578B\u5DF2\u4E0B\u8F7D\uFF08\u9996\u6B21\u53EC\u56DE\u65F6\u81EA\u52A8\u4E0B\u5230 ~/.fabric/cache/embed\uFF09\u3002\u7528 `fabric info recall` \u67E5\u5B9E\u9645\u72B6\u6001\u3002",
|
|
1237
1479
|
"cli.config.fields.fusion.label": "\u53EC\u56DE\u878D\u5408\u7B56\u7565",
|
|
1238
1480
|
"cli.config.fields.fusion.description": "\u591A\u4FE1\u53F7\u5408\u6210\u603B\u5206\u7684\u7B97\u6CD5\uFF1Aadditive \u52A0\u6743\u6C42\u548C\uFF08BM25 \u4E3B\u5BFC\uFF0C\u5411\u91CF\u6743\u91CD\u5C0F\uFF09/ rrf \u5012\u6570\u6392\u540D\u878D\u5408\uFF08BM25 \u4E0E\u5411\u91CF\u5E73\u8D77\u5E73\u5750\uFF0C\u8BED\u4E49\u624D\u771F\u6B63\u751F\u6548\uFF09/ auto \u81EA\u9002\u5E94\uFF08\u9ED8\u8BA4\uFF1A\u5411\u91CF\u5728\u51FA\u5206\u65F6\u7528 rrf\uFF0C\u5426\u5219\u56DE\u843D additive\u2014\u2014\u907F\u514D\u65E0\u5411\u91CF\u65F6 rrf \u9000\u5316\u53CD\u800C\u66F4\u5DEE\uFF09\u3002",
|
|
1239
|
-
"cli.doctor.description": "\u8FD0\u884C Fabric \u76EE\u6807\u6001\u8BCA\u65AD\uFF08meta \u540C\u6B65\u3001\u77E5\u8BC6\u7D22\u5F15\u3001bootstrap\u3001events ledger\u3001human-lock \u6F02\u79FB\uFF09
|
|
1481
|
+
"cli.doctor.description": "\u8FD0\u884C Fabric \u76EE\u6807\u6001\u8BCA\u65AD\uFF08meta \u540C\u6B65\u3001\u77E5\u8BC6\u7D22\u5F15\u3001bootstrap\u3001events ledger\u3001human-lock \u6F02\u79FB\uFF09",
|
|
1240
1482
|
"doctor.section.fixable": "\u53EF\u4FEE\u590D\u9519\u8BEF\uFF1A",
|
|
1241
1483
|
"doctor.section.manual": "\u9700\u624B\u52A8\u4FEE\u590D\uFF1A",
|
|
1242
1484
|
"doctor.section.warnings": "\u8B66\u544A\uFF1A",
|
|
1243
1485
|
"doctor.section.fix-knowledge-mutations": "Fix-knowledge \u53D8\u66F4\uFF1A",
|
|
1486
|
+
// flat-design follow-up: doctor 剩余的 UI-shell 文案(TL;DR 头、--fix 变更计划、
|
|
1487
|
+
// 过滤版 --help)从硬编码英文搬进 i18n,让整个 `fabric doctor` 输出跟随机器语言。
|
|
1488
|
+
// USAGE/OPTIONS/EXAMPLES 标签保持英文,与其它命令 --help 的 citty renderUsage 对齐。
|
|
1489
|
+
"doctor.digest.todo": "\u5F85\u5904\u7406 ({count})",
|
|
1490
|
+
"doctor.digest.clean": "\u5168\u90E8 {count} \u9879\u68C0\u67E5\u901A\u8FC7 \u2014\u2014 \u65E0\u9700\u5904\u7406",
|
|
1491
|
+
"doctor.digest.summary": "{todo} \u9879\u5F85\u5904\u7406 \xB7 {ok} \u9879\u901A\u8FC7 \xB7 \u8D21\u732E\u8005\u8BCA\u65AD\u89C1 --verbose",
|
|
1492
|
+
"doctor.digest.more-verbose": "\u53E6\u6709 {count} \u9879\u8D21\u732E\u8005\u8BCA\u65AD \u2014\u2014 \u89C1 --verbose",
|
|
1493
|
+
// store 诊断(多 store 健康,即 `● 存储健康` 分组)—— 与 doctor.check.* 对齐 i18n;
|
|
1494
|
+
// 文案通过插值带上 store alias / 计数。
|
|
1495
|
+
"doctor.store.no-global-config": "\u65E0\u5168\u5C40 Fabric \u914D\u7F6E \u2014\u2014 \u8FD0\u884C `fabric install --global <url>`",
|
|
1496
|
+
"doctor.store.missing-required": "\u5FC5\u9700 store '{id}' \u672A\u6302\u8F7D;\u8FD0\u884C `fabric store mount`",
|
|
1497
|
+
"doctor.store.unbound": "store '{alias}' \u5DF2\u6302\u8F7D\u4F46\u672A\u7ED1\u5B9A\u5230\u672C\u9879\u76EE;\u8FD0\u884C `fabric store bind {alias}` \u5373\u53EF\u5728\u6B64\u8BFB\u53D6\u5B83\u7684\u77E5\u8BC6(\u518D\u7528 `fabric store switch-write {alias}` \u628A\u56E2\u961F\u77E5\u8BC6\u5199\u5165\u5B83)",
|
|
1498
|
+
"doctor.store.alias-drift": "by-alias \u53EF\u8BFB\u6027\u8F6F\u94FE\u4E0E\u6CE8\u518C\u8868\u4E0D\u540C\u6B65:{refs};\u8FD0\u884C `fabric doctor --fix` \u4FEE\u590D ~/.fabric/stores/by-alias/",
|
|
1499
|
+
"doctor.store.local-only": "store '{alias}' \u4EC5\u672C\u5730;\u52A0\u4E00\u4E2A git remote \u4EE5\u5907\u4EFD",
|
|
1500
|
+
"doctor.store.executable": "store '{alias}' \u542B\u53EF\u6267\u884C/\u811A\u672C\u6587\u4EF6({files})\u2014\u2014 store \u4EC5\u5B58\u6570\u636E;Fabric \u4ECE\u4E0D\u8FD0\u884C\u5B83\u4EEC (S65)",
|
|
1501
|
+
"doctor.store.active-personal-invalid": "\u6D3B\u52A8 personal store '{store}' \u4E0D\u662F\u5DF2\u6302\u8F7D\u7684 personal store;\u8FD0\u884C `fabric store switch-personal <alias>` \u6216 `fabric doctor --fix`",
|
|
1502
|
+
"doctor.store.active-personal-unset": "\u5DF2\u6302\u8F7D {count} \u4E2A personal store \u4F46\u65E0\u6D3B\u52A8\u6307\u9488;\u8FD0\u884C `fabric store switch-personal <alias>` \u9009\u4E00\u4E2A(\u6216 `fabric doctor --fix` \u9ED8\u8BA4\u53D6\u7B2C\u4E00\u4E2A)",
|
|
1503
|
+
"doctor.store.related-broken": "{count} \u6761 `related` \u94FE\u63A5\u6307\u5411\u8BED\u6599\u4E2D\u4E0D\u5B58\u5728\u7684 id:{samples}{overflow} \u2014\u2014 \u901A\u8FC7 `fab_review` (modify) \u4FEE\u590D related \u8FB9,\u6216\u7F16\u8F91\u6761\u76EE frontmatter",
|
|
1504
|
+
"doctor.store.related-hub": "related \u56FE\u8C31\u67A2\u7EBD(\u524D {shown} / \u5171 {total} \u4E2A\u88AB\u5F15\u7528):{top}",
|
|
1505
|
+
"doctor.store.unreachable": "store '{alias}' \u5728 read-set \u4E2D\u4F46\u78C1\u76D8\u4E0A\u4E0D\u53EF\u8FBE({reason});\u8FD0\u884C `fabric store mount` / \u91CD\u65B0 clone,\u518D\u8DD1 `fabric doctor`",
|
|
1506
|
+
"doctor.store.consumption-heatmap": "\u6D88\u8D39\u70ED\u533A(\u8FD1 {days}d,{consumed}/{total} \u6761\u88AB\u8BFB,\u8DE8 {windows} \u4E2A\u7A97\u53E3):{top}",
|
|
1507
|
+
"doctor.store.consumption-zero": "{count} \u6761\u5728\u8FD1 {days}d \u5185\u4ECE\u672A\u88AB\u6D88\u8D39:{sample}{overflow} \u2014\u2014 \u901A\u8FC7 `fab_review` \u8003\u8651\u6DD8\u6C70(\u6D88\u8D39\u91CF\u53EA\u662F\u4FE1\u53F7\u4E4B\u4E00,\u975E\u9648\u65E7\u7684\u8BC1\u636E)",
|
|
1508
|
+
"doctor.store.overflow-more": ", \u2026(+{count} \u6761)",
|
|
1509
|
+
"doctor.fix-plan.header": "fix-knowledge \u53D8\u66F4\u8BA1\u5212(\u5171 {count} \u9879)",
|
|
1510
|
+
"doctor.fix-plan.preview": "\u9884\u89C8:",
|
|
1511
|
+
"doctor.fix-plan.more": "... \u8FD8\u6709 {count} \u9879",
|
|
1512
|
+
"doctor.help.tagline": "\u8BCA\u65AD\u5E76\u4FEE\u590D Fabric \u5DE5\u4F5C\u533A\u95EE\u9898",
|
|
1513
|
+
"doctor.help.flag.target": "\u8986\u76D6\u9879\u76EE\u6839\u76EE\u5F55(\u9ED8\u8BA4\u5F53\u524D\u76EE\u5F55)",
|
|
1514
|
+
"doctor.help.flag.fix": "\u81EA\u52A8\u4FEE\u590D(\u6D3E\u751F\u72B6\u6001 + \u77E5\u8BC6 frontmatter/git mv)",
|
|
1515
|
+
"doctor.help.flag.json": "\u4EE5 JSON \u8F93\u51FA\u4F9B\u7A0B\u5E8F\u6D88\u8D39",
|
|
1516
|
+
"doctor.help.flag.verbose": "\u663E\u793A\u9762\u5411\u7EF4\u62A4\u8005\u7684\u64CD\u4F5C\u63D0\u793A",
|
|
1517
|
+
"doctor.help.example.run": "\u8FD0\u884C\u8BCA\u65AD",
|
|
1518
|
+
"doctor.help.example.fix": "\u4FEE\u590D\u6D3E\u751F\u72B6\u6001 + \u77E5\u8BC6\u95EE\u9898",
|
|
1519
|
+
"doctor.help.footer": "\u8FD0\u884C `fabric doctor` \u67E5\u770B\u5B8C\u6574\u8BCA\u65AD\u62A5\u544A\u3002\u5BA1\u8BA1 \u2192 `fabric audit`\u3002",
|
|
1244
1520
|
// flat-design-system Wave5 (TASK-005): 重排后的 doctor C-圆点分组标题
|
|
1245
1521
|
// (`● 存储健康` / `● 检查项`),取代原硬编码 sectionBar 字面量。
|
|
1246
1522
|
"doctor.group.store-health": "\u5B58\u50A8\u5065\u5EB7",
|
|
@@ -1253,25 +1529,25 @@ var zhCNMessages = {
|
|
|
1253
1529
|
"doctor.section.cite-coverage": "Cite \u8986\u76D6\u7387:",
|
|
1254
1530
|
"doctor.cite.header": "\u8D77\u59CB {since} (\u653F\u7B56\u6FC0\u6D3B\u65F6\u95F4 {marker})",
|
|
1255
1531
|
"doctor.cite.warning.justActivated": "\u672C\u6B21\u9996\u6B21\u6FC0\u6D3B Cite policy,\u6682\u65E0\u5386\u53F2\u6570\u636E\u3002",
|
|
1256
|
-
"doctor.cite.metric.editsTouched": "
|
|
1257
|
-
"doctor.cite.metric.qualifyingCites": "\u5408\u683C cite",
|
|
1258
|
-
"doctor.cite.metric.recalledUnverified": "applied \u4F46\u672A\u9A8C\u8BC1",
|
|
1532
|
+
"doctor.cite.metric.editsTouched": "\u7F16\u8F91\u89E6\u8FBE\u6570",
|
|
1533
|
+
"doctor.cite.metric.qualifyingCites": "\u5408\u683C cite \u6570",
|
|
1534
|
+
"doctor.cite.metric.recalledUnverified": "\u5DF2\u6807\u6CE8 applied \u4F46\u672A\u9A8C\u8BC1",
|
|
1259
1535
|
"doctor.cite.metric.expectedButMissed": "\u5E94\u67E5\u6CA1\u67E5",
|
|
1260
1536
|
"doctor.cite.metric.totalTurns": "\u603B\u56DE\u5408\u6570",
|
|
1261
|
-
"doctor.cite.metric.complianceRate": "cite \u5408\u89C4\u7387
|
|
1262
|
-
"doctor.cite.metric.complianceNA": "N/A
|
|
1263
|
-
"doctor.cite.metric.uncorrelatableEdits": "\u65E0\u6CD5\u5173\u8054\u7684
|
|
1264
|
-
"doctor.cite.metric.recallCoverage": "recall \u8986\u76D6\u7387
|
|
1265
|
-
"doctor.cite.metric.recallCoverageNA": "N/A
|
|
1537
|
+
"doctor.cite.metric.complianceRate": "cite \u5408\u89C4\u7387\uFF08\u542B KB:none[reason]\uFF09",
|
|
1538
|
+
"doctor.cite.metric.complianceNA": "N/A\uFF08\u65E0\u5E94 cite \u56DE\u5408\uFF09",
|
|
1539
|
+
"doctor.cite.metric.uncorrelatableEdits": "\u65E0\u6CD5\u5173\u8054\u7684\u7F16\u8F91\uFF08\u7F3A session_id \u2014\u2014 hook \u8FC7\u671F?\u8BF7\u8DD1 `fabric install`\uFF09",
|
|
1540
|
+
"doctor.cite.metric.recallCoverage": "recall \u8986\u76D6\u7387\uFF08\u6539\u524D\u6709\u76F8\u5173 fab_recall \u7684\u7F16\u8F91\u5360\u6BD4\uFF09",
|
|
1541
|
+
"doctor.cite.metric.recallCoverageNA": "N/A\uFF08\u65E0\u53EF\u5173\u8054\u7F16\u8F91\uFF09",
|
|
1266
1542
|
// v2.2.0-rc.1 W1-T3 (cite 诚实拆分): 弱辅助信号, 与真遵循率分列展示。括注必须
|
|
1267
1543
|
// 明确「不计入真遵循度」(诚实铁律)。
|
|
1268
|
-
"doctor.cite.metric.exposedAndMutated": "\u66DD\u5149\u4E14\u8DEF\u5F84\u53D8\u66F4
|
|
1544
|
+
"doctor.cite.metric.exposedAndMutated": "\u66DD\u5149\u4E14\u8DEF\u5F84\u53D8\u66F4\uFF08\u5F31\u8F85\u52A9\u4FE1\u53F7 \u2014\u2014 \u4E0D\u8BA1\u5165\u771F\u9075\u5FAA\u5EA6\uFF09",
|
|
1269
1545
|
// lifecycle-refactor W2-T4 (§5 row7/row2): PostToolUse mutation funnel +
|
|
1270
1546
|
// SessionEnd 边界。均为可观测性 marker, 不计入真遵循度。
|
|
1271
|
-
"doctor.cite.metric.mutationsObserved": "mutation \u89C2\u6D4B\u6570
|
|
1272
|
-
"doctor.cite.metric.mutationPool": "mutation \u5F52\u56E0\u6C60
|
|
1273
|
-
"doctor.cite.metric.sessionsClosed": "\u5DF2\u95ED\u5408
|
|
1274
|
-
"doctor.cite.metric.byStore": "\u6309 store \u62C6\u5206\u7684\u5408\u89C4 cite \u6570
|
|
1547
|
+
"doctor.cite.metric.mutationsObserved": "mutation \u89C2\u6D4B\u6570\uFF08PostToolUse file_mutated \u2014\u2014 \u6743\u5A01\u4FE1\u53F7,\u4E0D\u8BA1\u5165\u771F\u9075\u5FAA\u5EA6\uFF09",
|
|
1548
|
+
"doctor.cite.metric.mutationPool": "mutation \u5F52\u56E0\u6C60\uFF08\u7ECF source_event_id \u7684\u4F4E\u7F6E\u4FE1\u5F52\u56E0\uFF09",
|
|
1549
|
+
"doctor.cite.metric.sessionsClosed": "\u5DF2\u95ED\u5408\u4F1A\u8BDD\u6570\uFF08SessionEnd marker \u2014\u2014 funnel \u8FB9\u754C\uFF09",
|
|
1550
|
+
"doctor.cite.metric.byStore": "\u6309 store \u62C6\u5206\u7684\u5408\u89C4 cite \u6570\uFF08\u8BCA\u65AD\u62C6\u5206 \u2014\u2014 \u4E0D\u8BA1\u5165\u771F\u9075\u5FAA\u5EA6;'local' = \u672C\u9879\u76EE\uFF09",
|
|
1275
1551
|
"doctor.cite.section.perClient": "\u6309\u5BA2\u6237\u7AEF\u62C6\u5206",
|
|
1276
1552
|
"doctor.cite.section.dismissedReasons": "\u9A73\u56DE\u539F\u56E0\u5206\u5E03",
|
|
1277
1553
|
"doctor.cite.dismissed.scope-mismatch": "\u8303\u56F4\u4E0D\u7B26",
|
|
@@ -1357,30 +1633,30 @@ var zhCNMessages = {
|
|
|
1357
1633
|
"cli.doctor.errors.enrich-descriptions-mutex": "--enrich-descriptions \u4E0D\u80FD\u4E0E --fix / --fix-knowledge / --cite-coverage \u540C\u65F6\u4F7F\u7528,\u8BF7\u5206\u522B\u8FD0\u884C\u3002",
|
|
1358
1634
|
"doctor.enrich.allComplete": "\u6240\u6709\u6B63\u5F0F\u77E5\u8BC6\u6761\u76EE\u5747\u5DF2\u5305\u542B intent_clues / tech_stack / impact / must_read_if\u3002",
|
|
1359
1635
|
// rc.26 TASK-02a: doctor foundation-batch check messages.
|
|
1360
|
-
"doctor.check.bootstrap_snapshot_drift.name": "Bootstrap
|
|
1636
|
+
"doctor.check.bootstrap_snapshot_drift.name": "Bootstrap \u5FEB\u7167\u6F02\u79FB",
|
|
1361
1637
|
"doctor.check.bootstrap_snapshot_drift.message.drift": ".fabric/AGENTS.md \u5185\u5BB9\u4E0E BOOTSTRAP_CANONICAL \u9010\u5B57\u8282\u4E0D\u4E00\u81F4\u3002",
|
|
1362
1638
|
"doctor.check.bootstrap_snapshot_drift.remediation.drift": "\u8FD0\u884C `fabric doctor --fix` \u6062\u590D canonical bootstrap snapshot",
|
|
1363
1639
|
"doctor.check.bootstrap_snapshot_drift.ok.ok": ".fabric/AGENTS.md \u4E0E BOOTSTRAP_CANONICAL \u9010\u5B57\u8282\u4E00\u81F4\u3002",
|
|
1364
1640
|
"doctor.check.bootstrap_snapshot_drift.ok.missing_delegated": ".fabric/AGENTS.md \u4E0D\u5B58\u5728\uFF0C\u5DF2\u4EA4\u7531 bootstrap_anchor_missing \u62A5\u544A\u3002",
|
|
1365
|
-
"doctor.check.managed_block_drift.name": "Managed block
|
|
1641
|
+
"doctor.check.managed_block_drift.name": "Managed block \u6F02\u79FB",
|
|
1366
1642
|
"doctor.check.managed_block_drift.message.singular": "{count} \u4E2A three-end managed block \u4E0E\u671F\u671B\u5185\u5BB9\uFF08snapshot + \u53EF\u9009 project-rules concat\uFF09\u4E0D\u4E00\u81F4\uFF1A{list}\u3002",
|
|
1367
1643
|
"doctor.check.managed_block_drift.message.plural": "{count} \u4E2A three-end managed block \u4E0E\u671F\u671B\u5185\u5BB9\uFF08snapshot + \u53EF\u9009 project-rules concat\uFF09\u4E0D\u4E00\u81F4\uFF1A{list}\u3002",
|
|
1368
1644
|
"doctor.check.managed_block_drift.remediation": "\u8FD0\u884C `fabric doctor --fix` \u4ECE canonical \u6062\u590D three-end managed blocks",
|
|
1369
1645
|
"doctor.check.managed_block_drift.ok.ok": "Three-end managed blocks \u4E0E expectedBody \u9010\u5B57\u8282\u4E00\u81F4\u3002",
|
|
1370
1646
|
"doctor.check.managed_block_drift.ok.no_managed_block": "\u672A\u68C0\u6D4B\u5230 three-end managed blocks\uFF1B\u53EF\u80FD\u5C1A\u672A\u4F20\u64AD\uFF0C\u6216\u4ECD\u5904\u4E8E legacy-marker \u72B6\u6001\u3002",
|
|
1371
|
-
"doctor.check.bootstrap_anchor.name": "Bootstrap
|
|
1647
|
+
"doctor.check.bootstrap_anchor.name": "Bootstrap \u951A\u70B9",
|
|
1372
1648
|
"doctor.check.bootstrap_anchor.message.missing": "repo root \u4E0B AGENTS.md \u4E0E CLAUDE.md \u90FD\u4E0D\u5B58\u5728\u3002Fabric \u9700\u8981\u5728\u9879\u76EE\u6839\u76EE\u5F55\u5B58\u5728 bootstrap anchor \u6587\u4EF6\u3002",
|
|
1373
1649
|
"doctor.check.bootstrap_anchor.remediation.missing": "\u8FD0\u884C `fabric install` \u5728 repo root \u751F\u6210 AGENTS.md / CLAUDE.md bootstrap anchor\u3002",
|
|
1374
1650
|
"doctor.check.bootstrap_anchor.ok": "repo root \u4E0B\u5DF2\u5B58\u5728 Bootstrap anchor\uFF1A{present}\u3002",
|
|
1375
1651
|
// v2.0.0-rc.33 W3-2 (T6 #5): 文案显式引用 message 内已列出的 detail (file 名), 让用户直接 rm 而非自己去 grep 找。baseline pipeline 已 rc.23 移除, 没有 auto-fix。
|
|
1376
|
-
"doctor.check.forensic.name": "
|
|
1652
|
+
"doctor.check.forensic.name": "\u626B\u63CF\u8BC1\u636E",
|
|
1377
1653
|
"doctor.check.forensic.message.missing.singular": "{error} \u5B9E\u65F6\u626B\u63CF\u68C0\u6D4B\u5230 {frameworkKind}\uFF0C\u5171\u6709 {count} \u4E2A\u5165\u53E3\u70B9\u3002",
|
|
1378
1654
|
"doctor.check.forensic.message.missing.plural": "{error} \u5B9E\u65F6\u626B\u63CF\u68C0\u6D4B\u5230 {frameworkKind}\uFF0C\u5171\u6709 {count} \u4E2A\u5165\u53E3\u70B9\u3002",
|
|
1379
1655
|
"doctor.check.forensic.message.missing-default": ".fabric/forensic.json \u7F3A\u5931\u3002",
|
|
1380
1656
|
"doctor.check.forensic.message.invalid-default": ".fabric/forensic.json \u65E0\u6548\u3002",
|
|
1381
1657
|
"doctor.check.forensic.remediation": "\u8FD0\u884C `fabric install` \u91CD\u65B0\u751F\u6210 .fabric/forensic.json\u3002",
|
|
1382
1658
|
"doctor.check.forensic.ok": ".fabric/forensic.json \u5BF9 {frameworkKind} \u6709\u6548\u3002",
|
|
1383
|
-
"doctor.check.agents_meta.name": "Agents
|
|
1659
|
+
"doctor.check.agents_meta.name": "Agents \u5143\u6570\u636E",
|
|
1384
1660
|
"doctor.check.agents_meta.message.missing": ".fabric/agents.meta.json \u7F3A\u5931\u3002",
|
|
1385
1661
|
"doctor.check.agents_meta.remediation.missing": "store-backed knowledge \u4E0B\u65E0\u9700\u5904\u7406\uFF1B\u9879\u76EE\u672C\u5730 agents.meta \u91CD\u5EFA\u8DEF\u5F84\u5DF2\u9000\u4F11\u3002",
|
|
1386
1662
|
"doctor.check.agents_meta.message.invalid-default": ".fabric/agents.meta.json \u65E0\u6548\u3002",
|
|
@@ -1392,7 +1668,7 @@ var zhCNMessages = {
|
|
|
1392
1668
|
"doctor.check.agents_meta.message.stale_hash_equal": ".fabric/agents.meta.json \u5DF2\u4E0E\u5DF2\u9000\u4F11\u7684\u672C\u5730\u6D3E\u751F revision {revision} \u5BF9\u9F50\uFF1B\u8BE5\u68C0\u67E5\u4EC5\u4F5C\u5386\u53F2\u517C\u5BB9\u3002",
|
|
1393
1669
|
"doctor.check.agents_meta.remediation.stale": "\u4E0D\u518D\u6267\u884C\u9879\u76EE\u672C\u5730 reconcile\uFF1Bmounted stores \u4F1A\u88AB\u76F4\u63A5\u8BFB\u53D6\u3002",
|
|
1394
1670
|
"doctor.check.agents_meta.ok": "\u68C0\u6D4B\u5230 legacy agents.meta revision {revision}\uFF1Bstore-backed knowledge \u4E0D\u4F9D\u8D56\u5B83\u3002",
|
|
1395
|
-
"doctor.check.rule_content_refs.name": "Rule
|
|
1671
|
+
"doctor.check.rule_content_refs.name": "Rule \u5185\u5BB9\u5F15\u7528",
|
|
1396
1672
|
"doctor.check.rule_content_refs.message.unavailable": "agents.meta.json \u6709\u6548\u524D\uFF0C\u65E0\u6CD5\u68C0\u67E5 content_ref entries\u3002",
|
|
1397
1673
|
"doctor.check.rule_content_refs.remediation.unavailable": "\u5148\u4FEE\u590D agents.meta.json\uFF1A\u8FD0\u884C `fabric doctor --fix`\u3002",
|
|
1398
1674
|
"doctor.check.rule_content_refs.message.outside.singular": "{count} \u4E2A legacy content_ref entry \u4F4D\u4E8E\u5DF2\u9000\u4F11\u7684\u672C\u5730 knowledge root \u5916\u90E8\u3002",
|
|
@@ -1403,7 +1679,7 @@ var zhCNMessages = {
|
|
|
1403
1679
|
"doctor.check.rule_content_refs.message.missing.plural": "{count} \u4E2A content_ref targets \u7F3A\u5931\u3002\u8FD0\u884C `fabric doctor --fix` \u6267\u884C reconcile\u3002",
|
|
1404
1680
|
"doctor.check.rule_content_refs.remediation.missing": "\u9879\u76EE\u672C\u5730 content_ref reconcile \u5DF2\u9000\u4F11\uFF1B\u8BF7\u7ED1\u5B9A\u5E76\u8BFB\u53D6 mounted stores\u3002",
|
|
1405
1681
|
"doctor.check.rule_content_refs.ok": "\u6240\u6709 legacy content_ref entries \u90FD\u80FD\u89E3\u6790\uFF1Bstore-backed knowledge \u4ECE mounted stores \u8BFB\u53D6\u3002",
|
|
1406
|
-
"doctor.check.knowledge_test_index.name": "
|
|
1682
|
+
"doctor.check.knowledge_test_index.name": "\u77E5\u8BC6\u6D4B\u8BD5\u7D22\u5F15",
|
|
1407
1683
|
"doctor.check.knowledge_test_index.remediation.missing": "\u8FD0\u884C `fabric doctor --fix` \u91CD\u5EFA .fabric/.cache/knowledge-test.index.json\u3002",
|
|
1408
1684
|
"doctor.check.knowledge_test_index.remediation.invalid": "\u5220\u9664 .fabric/.cache/knowledge-test.index.json \u5E76\u8FD0\u884C `fabric doctor --fix` \u91CD\u65B0\u751F\u6210\u3002",
|
|
1409
1685
|
"doctor.check.knowledge_test_index.message.stale": ".fabric/.cache/knowledge-test.index.json \u5DF2\u8FC7\u671F\u3002",
|
|
@@ -1412,7 +1688,7 @@ var zhCNMessages = {
|
|
|
1412
1688
|
"doctor.check.knowledge_test_index.ok.link_singular.orphan_plural": "\u5DF2\u7D22\u5F15 {linkCount} \u4E2A link \u548C {orphanCount} \u4E2A orphan annotation\u3002",
|
|
1413
1689
|
"doctor.check.knowledge_test_index.ok.link_plural.orphan_singular": "\u5DF2\u7D22\u5F15 {linkCount} \u4E2A link \u548C {orphanCount} \u4E2A orphan annotation\u3002",
|
|
1414
1690
|
"doctor.check.knowledge_test_index.ok.link_plural.orphan_plural": "\u5DF2\u7D22\u5F15 {linkCount} \u4E2A link \u548C {orphanCount} \u4E2A orphan annotation\u3002",
|
|
1415
|
-
"doctor.check.event_ledger.name": "
|
|
1691
|
+
"doctor.check.event_ledger.name": "\u4E8B\u4EF6\u8D26\u672C",
|
|
1416
1692
|
"doctor.check.event_ledger.message.missing": ".fabric/events.jsonl \u7F3A\u5931\u3002",
|
|
1417
1693
|
"doctor.check.event_ledger.remediation.missing": "\u8FD0\u884C `fabric doctor --fix` \u521B\u5EFA .fabric/events.jsonl\u3002",
|
|
1418
1694
|
"doctor.check.event_ledger.message.not_writable-default": ".fabric/events.jsonl \u4E0D\u53EF\u5199\u3002",
|
|
@@ -1423,20 +1699,20 @@ var zhCNMessages = {
|
|
|
1423
1699
|
"doctor.check.event_ledger.ok": ".fabric/events.jsonl \u5DF2\u5B58\u5728\uFF0C\u53EF\u5199\uFF0C\u4E14\u53EF\u89E3\u6790\u3002",
|
|
1424
1700
|
// v2.0.0-rc.37 Wave B (B5): 复合 hard-gate 检查 events.jsonl/metrics.jsonl 健康
|
|
1425
1701
|
// (G7 size / G8 metric_leak / G9 metrics_stale / G10 rotation_overdue)。
|
|
1426
|
-
"doctor.check.events_jsonl_health.name": "
|
|
1702
|
+
"doctor.check.events_jsonl_health.name": "\u4E8B\u4EF6\u8D26\u672C\u5065\u5EB7",
|
|
1427
1703
|
"doctor.check.events_jsonl_health.ok": ".fabric/events.jsonl \u5927\u5C0F\u3001\u65B0\u9C9C\u5EA6\u3001metric \u9694\u79BB\u5168\u90E8\u6B63\u5E38\u3002",
|
|
1428
1704
|
"doctor.check.events_jsonl_health.message.size": ".fabric/events.jsonl \u5DF2 {sizeMb} MB\uFF0C\u8D85\u8FC7 10 MB \u9608\u503C\u3002",
|
|
1429
1705
|
"doctor.check.events_jsonl_health.message.metric_leak": ".fabric/events.jsonl \u542B {count} \u884C metric-counter \u7C7B event_type ({samples})\u3002\u8FD9\u4E9B event \u5E94\u7531 metrics.jsonl \u8BA1\u6570, \u4E0D\u518D\u8FDB\u5165 audit ledger\u3002",
|
|
1430
1706
|
"doctor.check.events_jsonl_health.message.metrics_stale": ".fabric/metrics.jsonl \u5DF2 {minutes} \u5206\u949F\u672A\u66F4\u65B0\uFF1Bserver-side 60s flush \u53EF\u80FD stalled\u3002",
|
|
1431
1707
|
"doctor.check.events_jsonl_health.message.rotation_overdue": ".fabric/events.jsonl \u5DF2 {days} \u5929\u672A rotate\uFF1B6h rotation tick \u53EF\u80FD\u672A\u8FD0\u884C\u3002",
|
|
1432
1708
|
"doctor.check.events_jsonl_health.remediation": "\u8FD0\u884C `fabric doctor --fix` \u2014\u2014 \u5B83\u4F1A\u89E6\u53D1 rotation \u5E76 flush metrics.jsonl(rc.2 F16: \u65E0\u9700\u91CD\u542F server \u5373\u53EF\u6E05\u51FA idle \u671F\u672A\u5237\u7684 metric counter)\u3002\u82E5\u544A\u8B66\u4ECD\u6301\u7EED, \u518D\u91CD\u542F MCP server \u8BA9 startMetricsFlush + startRotationTick \u91CD\u65B0\u8C03\u5EA6\u3002\u82E5 metric_leak \u547D\u4E2D, \u68C0\u67E5\u6700\u8FD1\u4EE3\u7801\u6539\u52A8\u662F\u5426\u7ED5\u8FC7 bumpCounter API \u76F4\u63A5 appendEventLedgerEvent \u5199\u4E86 4 \u4E2A metric-managed event_type \u4E4B\u4E00\u3002",
|
|
1433
|
-
"doctor.check.event_ledger_partial_write.name": "
|
|
1709
|
+
"doctor.check.event_ledger_partial_write.name": "\u4E8B\u4EF6\u8D26\u672C\u534A\u622A\u5199\u5165",
|
|
1434
1710
|
"doctor.check.event_ledger_partial_write.ok.skipped": "\u65E0\u9700\u6267\u884C partial-write \u68C0\u67E5\uFF08ledger \u7F3A\u5931\u6216\u4E0D\u53EF\u5199\uFF09\u3002",
|
|
1435
1711
|
"doctor.check.event_ledger_partial_write.message": "events.jsonl \u5728 byte offset {byteOffset} \u5904\u5B58\u5728 partial write\uFF08{byteLength} \u4E2A corrupted bytes\uFF09\u3002\u8FD0\u884C --fix \u622A\u65AD\u5E76\u4FDD\u7559 corrupted bytes\u3002",
|
|
1436
1712
|
"doctor.check.event_ledger_partial_write.remediation": "\u8FD0\u884C `fabric doctor --fix` \u622A\u65AD partial write \u5E76\u5C06 events.jsonl \u6062\u590D\u5230\u6709\u6548\u72B6\u6001\u3002",
|
|
1437
1713
|
"doctor.check.event_ledger_partial_write.ok.clean": "events.jsonl \u6CA1\u6709 partial trailing write\u3002",
|
|
1438
1714
|
// v2.0.0-rc.27 TASK-010 (audit §2.24): schema-compat 向前兼容警告类别。
|
|
1439
|
-
"doctor.check.event_ledger_schema_compat.name": "
|
|
1715
|
+
"doctor.check.event_ledger_schema_compat.name": "\u4E8B\u4EF6\u8D26\u672C schema \u517C\u5BB9\u6027",
|
|
1440
1716
|
"doctor.check.event_ledger_schema_compat.ok.skipped": "\u65E0\u9700\u505A schema \u517C\u5BB9\u6027\u68C0\u67E5\uFF08events.jsonl \u4E0D\u5B58\u5728\u6216\u4E0D\u53EF\u5199\uFF09\u3002",
|
|
1441
1717
|
"doctor.check.event_ledger_schema_compat.ok.clean": "events.jsonl \u6240\u6709\u884C\u90FD\u80FD\u89E3\u6790\u4E3A\u5F53\u524D schema\u3002",
|
|
1442
1718
|
"doctor.check.event_ledger_schema_compat.message.schema_version": "events.jsonl \u542B {count} \u884C `schema_version` \u4E0D\u88AB\u5F53\u524D CLI \u8BC6\u522B\uFF08\u6837\u672C: {samples}\uFF09\u3002",
|
|
@@ -1454,13 +1730,13 @@ var zhCNMessages = {
|
|
|
1454
1730
|
"doctor.check.retired_reference.message": "agent \u53EF\u89C1\u6587\u672C\u4E2D\u6709 {count} \u5904\u6307\u5411\u9000\u5F79\u5DE5\u5177/\u5B57\u6BB5\u540D\u7684 stale pointer: {sample}",
|
|
1455
1731
|
"doctor.check.retired_reference.remediation": "\u628A\u547D\u4E2D\u6587\u672C\u6539\u4E3A\u66FF\u4EE3 token (\u6216\u5220\u9664), \u518D\u8DD1 `fabric install` \u91CD\u540C\u6B65 dogfood \u955C\u50CF\u3002",
|
|
1456
1732
|
// v2.0.0-rc.33 W3-6 (P1-13): SKILL.md token budget lint。warn > 5K / error > 10K token (chars/3 估算)。基于 Anthropic 推荐 SKILL.md 热路径 ~3K, 超过 5K 已影响 progressive disclosure;超过 10K 是阻断级 (model context 浪费 + 加载延迟)。
|
|
1457
|
-
"doctor.check.skill_token_budget.name": "Skill token
|
|
1733
|
+
"doctor.check.skill_token_budget.name": "Skill token \u9884\u7B97",
|
|
1458
1734
|
"doctor.check.skill_token_budget.ok": "\u6240\u6709 .claude/skills/<slug>/SKILL.md \u5728 token budget \u5185 (warn 5K / error 10K)\u3002",
|
|
1459
1735
|
"doctor.check.skill_token_budget.message.singular": "{count} \u4E2A SKILL.md \u8D85\u51FA token budget: {list}\u3002\u5EFA\u8BAE\u628A\u8BE6\u7EC6\u5185\u5BB9\u4E0B\u6C89\u5230 ref/ progressive disclosure\u3002",
|
|
1460
1736
|
"doctor.check.skill_token_budget.message.plural": "{count} \u4E2A SKILL.md \u8D85\u51FA token budget: {list}\u3002\u5EFA\u8BAE\u628A\u8BE6\u7EC6\u5185\u5BB9\u4E0B\u6C89\u5230 ref/ progressive disclosure\u3002",
|
|
1461
1737
|
"doctor.check.skill_token_budget.remediation": "\u5C06\u8D85\u6807 SKILL.md \u4E2D\u7684\u8BE6\u7EC6 phase / worked-examples / decision \u8868\u79FB\u5230 `templates/skills/<slug>/ref/*.md`,SKILL.md \u70ED\u8DEF\u5F84\u53EA\u7559 trigger gate + \u5173\u952E phase \u6982\u8981;\u53C2\u8003 W1 progressive disclosure \u62C6\u5206\u6A21\u5F0F\u3002\u91CD\u65B0\u8DD1 `fabric install` \u540C\u6B65\u4E24\u7AEF\u3002",
|
|
1462
1738
|
// v2.0.0-rc.33 W3-7 (P1-14): SKILL.md description 结构 lint。代理 trigger-recall (真 LLM 测要 live model, W1 已用 gemini 跑过);本 lint 抓回归: description 缺失 / 超 60 token / 缺中文 trigger / 缺英文 trigger。
|
|
1463
|
-
"doctor.check.skill_description.name": "Skill description
|
|
1739
|
+
"doctor.check.skill_description.name": "Skill description \u8D28\u91CF",
|
|
1464
1740
|
"doctor.check.skill_description.ok": "\u6240\u6709 SKILL.md description \u5B57\u6BB5\u7ED3\u6784\u826F\u597D (\u975E\u7A7A / <60 token / \u4E2D\u82F1\u53CC\u8BED trigger)\u3002",
|
|
1465
1741
|
"doctor.check.skill_description.message.singular": "{count} \u4E2A SKILL.md description \u7ED3\u6784\u95EE\u9898: {list}\u3002description \u662F host \u7AEF auto-invoke \u7684\u4E3B\u8981\u5339\u914D\u4FE1\u53F7\u3002",
|
|
1466
1742
|
"doctor.check.skill_description.message.plural": "{count} \u4E2A SKILL.md description \u7ED3\u6784\u95EE\u9898: {list}\u3002description \u662F host \u7AEF auto-invoke \u7684\u4E3B\u8981\u5339\u914D\u4FE1\u53F7\u3002",
|
|
@@ -1472,22 +1748,22 @@ var zhCNMessages = {
|
|
|
1472
1748
|
"doctor.check.cite_goodhart.message.plural": "\u68C0\u6D4B\u5230 {count} \u4E2A cite-policy Goodhart \u6A21\u5F0F: {list}\u3002",
|
|
1473
1749
|
"doctor.check.cite_goodhart.remediation": "\u5BA1\u9605\u89E6\u53D1\u7684 pattern: G1 \u4EEA\u5F0F\u5316 \u2192 \u540C\u4E00 [applied] cite \u91CD\u590D\u7528,\u8BE5\u628A KB \u771F\u6B63\u843D\u5230 contract; G2 \u6284\u5E95\u5F15\u7528 \u2192 > 60% applied \u7528 skip: \u662F\u7ED5\u8FC7 contract, review skip reason \u771F\u5B9E\u6027; G5 placeholder cite \u2192 'KB: none' / [unspecified] \u592A\u591A, \u8BE5\u7528\u5177\u4F53 sentinel \u5982 [no-relevant] / [not-applicable]\u3002\u8BE6\u7EC6\u6570\u636E\u8DD1 `fabric doctor --cite-coverage --since=7d`\u3002",
|
|
1474
1750
|
// v2.0.0-rc.33 W4-A4 (T5 P2): draft-backlog lint。rc.32 baseline 92% entry 卡在 draft, 揭示 promote 断流。> 50% draft 触发 warning (workspace 必须 >= 10 entries 才计算比率, 避免小语料噪音)。
|
|
1475
|
-
"doctor.check.draft_backlog.name": "
|
|
1751
|
+
"doctor.check.draft_backlog.name": "\u77E5\u8BC6 draft \u79EF\u538B",
|
|
1476
1752
|
"doctor.check.draft_backlog.ok": "canonical knowledge entries \u4E2D draft \u5360\u6BD4\u6B63\u5E38 (< 50%, \u6216 workspace \u592A\u5C0F\u4E0D\u8BC4)\u3002",
|
|
1477
1753
|
"doctor.check.draft_backlog.message": "{draftCount}/{totalCount} ({pct}%) canonical knowledge entries \u5361\u5728 draft maturity \u2014 promote \u65AD\u6D41 (rc.32 baseline 92%)\u3002",
|
|
1478
1754
|
"doctor.check.draft_backlog.remediation": "\u8C03 `/fabric-review` \u6279\u91CF\u5BA1 draft entries: approve \u5347 verified/proven, reject \u4E22, modify \u4FEE\u3002draft \u957F\u671F\u5806\u79EF\u901A\u5E38\u610F\u5473\u7740 archive skill \u4EA7 draft \u592A\u5FEB\u6216 review skill \u6CA1\u8DDF\u4E0A\u3002",
|
|
1479
1755
|
// rc.37 NEW-38: knowledge auto-promote (info surface; --fix 执行).
|
|
1480
1756
|
// rc.36 TASK-05 (P0-8): empty-tags ratio warn.
|
|
1481
|
-
"doctor.check.knowledge_tags_empty.name": "
|
|
1757
|
+
"doctor.check.knowledge_tags_empty.name": "\u77E5\u8BC6 tags \u8986\u76D6\u7387",
|
|
1482
1758
|
"doctor.check.knowledge_tags_empty.ok": "canonical knowledge entries \u4E2D empty tags \u5360\u6BD4\u6B63\u5E38 (\u2264 50%, \u6216 workspace \u592A\u5C0F\u4E0D\u8BC4)\u3002",
|
|
1483
1759
|
"doctor.check.knowledge_tags_empty.message": "{emptyCount}/{totalCount} ({pct}%) canonical knowledge entries \u7684 `tags:` \u4E3A\u7A7A \u2014 \u4E3B\u9898\u805A\u7C7B\u4E0E\u8DE8\u6761\u76EE\u68C0\u7D22\u9000\u5316\u3002fabric-archive skill \u5E94\u6BCF\u4E2A entry \u4EA7 2-4 \u4E2A tag\u3002",
|
|
1484
1760
|
"doctor.check.knowledge_tags_empty.remediation": "\u4E0B\u4E00\u8F6E archive/import \u65F6,\u5728 frontmatter `tags:` \u5199 2-4 \u4E2A kebab-case \u4E3B\u9898\u8BCD;\u6279\u91CF\u8865\u65E7 entry tag \u7528 `/fabric-review` modify \u6D41\u3002",
|
|
1485
1761
|
// rc.36 TASK-09 (P1-NEW1): drift_detected 未消化告警。
|
|
1486
|
-
"doctor.check.drift_unconsumed.name": "
|
|
1762
|
+
"doctor.check.drift_unconsumed.name": "\u77E5\u8BC6\u6F02\u79FB\u672A\u6D88\u5316",
|
|
1487
1763
|
"doctor.check.drift_unconsumed.ok": "\u8FD1 30 \u5929\u5185 knowledge_drift_detected \u4E8B\u4EF6\u5DF2\u88AB\u5BF9\u5E94 knowledge_demoted \u6D88\u5316,\u6216\u4E8B\u4EF6\u6570\u592A\u5C11\u4E0D\u8BC4\u3002",
|
|
1488
1764
|
"doctor.check.drift_unconsumed.message": "\u8FD1 30 \u5929\u5185 knowledge_drift_detected \u4E8B\u4EF6 {driftCount} \u6B21,knowledge_demoted \u4E8B\u4EF6 {demoteCount} \u6B21\u3002drift > demote \u81F3\u5C11 5 \u2192 \u90E8\u5206 drift \u6CA1\u88AB\u6D88\u5316,KB \u4F1A\u7F13\u6162\u5931\u6D3B\u3002",
|
|
1489
1765
|
"doctor.check.drift_unconsumed.remediation": "\u8C03 `/fabric-review` \u5BA1 drift \u6807\u8BB0\u7684\u6761\u76EE \u2014 \u901A\u8FC7 store \u5199\u4FA7 review \u6D41\u7A0B\u964D\u7EA7\u6216\u5F52\u6863\u5B83\u4EEC\u3002(doctor \u7684 orphan_demote / stale_archive lint \u53EA\u4E0A\u62A5\u8870\u51CF,\u4E0D\u81EA\u6108 store \u77E5\u8BC6\u3002)",
|
|
1490
|
-
"doctor.check.meta_manually_diverged.name": "Meta
|
|
1766
|
+
"doctor.check.meta_manually_diverged.name": "Meta \u624B\u52A8\u504F\u79BB",
|
|
1491
1767
|
"doctor.check.meta_manually_diverged.ok.unreadable": "agents.meta.json \u4E0D\u53EF\u8BFB\uFF0C\u8DF3\u8FC7 divergence \u68C0\u67E5\u3002",
|
|
1492
1768
|
"doctor.check.meta_manually_diverged.message.extra.singular": "agents.meta.json \u4E2D\u6709 {count} \u4E2A entry \u5728\u78C1\u76D8\u4E0A\u6CA1\u6709\u5BF9\u5E94\u6587\u4EF6\u3002\u8FD0\u884C --fix \u6267\u884C reconcile\u3002",
|
|
1493
1769
|
"doctor.check.meta_manually_diverged.message.extra.plural": "agents.meta.json \u4E2D\u6709 {count} \u4E2A entries \u5728\u78C1\u76D8\u4E0A\u6CA1\u6709\u5BF9\u5E94\u6587\u4EF6\u3002\u8FD0\u884C --fix \u6267\u884C reconcile\u3002",
|
|
@@ -1496,53 +1772,60 @@ var zhCNMessages = {
|
|
|
1496
1772
|
"doctor.check.meta_manually_diverged.message.hash.plural": "agents.meta.json \u4E2D\u6709 {count} \u4E2A entries \u7684 hash \u4E0E\u78C1\u76D8\u6587\u4EF6\u4E0D\u5339\u914D\u3002\u8FD0\u884C --fix \u6267\u884C reconcile\u3002",
|
|
1497
1773
|
"doctor.check.meta_manually_diverged.remediation.hash": "\u9879\u76EE\u672C\u5730 agents.meta reconcile \u5DF2\u9000\u4F11\uFF1Bmounted stores \u662F source of truth\u3002",
|
|
1498
1774
|
"doctor.check.meta_manually_diverged.ok.consistent": "agents.meta.json \u4E0E\u78C1\u76D8\u4E0A\u7684 rule files \u4E00\u81F4\u3002",
|
|
1499
|
-
"doctor.check.knowledge_dir_unindexed.name": "
|
|
1775
|
+
"doctor.check.knowledge_dir_unindexed.name": "\u77E5\u8BC6\u76EE\u5F55\u672A\u7D22\u5F15",
|
|
1500
1776
|
"doctor.check.knowledge_dir_unindexed.message.singular": "\u68C0\u6D4B\u5230 {count} \u4E2A legacy local knowledge .md file \u672A\u7D22\u5F15\u3002\u8BF7\u79FB\u5165 mounted store\uFF1B\u975E store knowledge root \u5DF2\u9000\u4F11\u3002",
|
|
1501
1777
|
"doctor.check.knowledge_dir_unindexed.message.plural": "\u68C0\u6D4B\u5230 {count} \u4E2A legacy local knowledge .md files \u672A\u7D22\u5F15\u3002\u8BF7\u79FB\u5165 mounted store\uFF1B\u975E store knowledge root \u5DF2\u9000\u4F11\u3002",
|
|
1502
1778
|
"doctor.check.knowledge_dir_unindexed.remediation": "\u4F7F\u7528 `fabric store bind` / `fabric store switch-write`\uFF0C\u7136\u540E\u628A knowledge \u8FC1\u5165 store \u7684 knowledge/ tree\u3002",
|
|
1503
1779
|
"doctor.check.knowledge_dir_unindexed.ok": "\u65E0\u9700\u6267\u884C legacy local knowledge \u7D22\u5F15\u52A8\u4F5C\u3002",
|
|
1504
1780
|
// v2.0.0-rc.33 W3-2 (T6 #27): 走 fabric-review modify 流程让 canonical id allocator 重新分配, 而非让用户自己选 id (易撞 counter, 难手算)。
|
|
1505
|
-
"doctor.check.counter_desync.name": "
|
|
1781
|
+
"doctor.check.counter_desync.name": "\u77E5\u8BC6\u8BA1\u6570\u5668\u5931\u540C\u6B65",
|
|
1506
1782
|
"doctor.check.counter_desync.message.singular": "{count} \u4E2A knowledge counter \u4E0E\u89C2\u6D4B\u5230\u7684 stable_ids \u4E0D\u540C\u6B65\u3002{counterPath} = {current}\uFF0C\u4F46\u68C0\u6D4B\u5230 {observedId}\u3002\u8FD0\u884C `fabric doctor --fix` bump counters\u3002",
|
|
1507
1783
|
"doctor.check.counter_desync.message.plural": "{count} \u4E2A knowledge counters \u4E0E\u89C2\u6D4B\u5230\u7684 stable_ids \u4E0D\u540C\u6B65\u3002{counterPath} = {current}\uFF0C\u4F46\u68C0\u6D4B\u5230 {observedId}\u3002\u8FD0\u884C `fabric doctor --fix` bump counters\u3002",
|
|
1508
1784
|
"doctor.check.counter_desync.remediation": "\u8FD0\u884C `fabric doctor --fix` \u5C06 agents.meta.json counters \u63D0\u5347\u5230\u89C2\u6D4B\u5230\u7684\u6700\u5927 counter \u503C\u3002",
|
|
1509
1785
|
"doctor.check.counter_desync.ok": "agents.meta.json counters envelope \u4E0E\u89C2\u6D4B\u5230\u7684 stable_ids \u4E00\u81F4\u3002",
|
|
1510
|
-
"doctor.check.store_counter_drift.name": "Store
|
|
1786
|
+
"doctor.check.store_counter_drift.name": "Store \u8BA1\u6570\u5668\u6F02\u79FB",
|
|
1511
1787
|
"doctor.check.store_counter_drift.message.singular": "{count} \u4E2A store counter \u4F4E\u4E8E\u78C1\u76D8\u4E0A\u7684\u6700\u5927 stable_id\uFF08{detail}\uFF09\u3002\u8BE5 store \u4E0B\u4E00\u6B21\u94F8\u53F7\u4F1A\u590D\u7528\u5DF2\u5B58\u5728\u7684 id\u3002\u8FD0\u884C `fabric doctor --fix` \u5C06 store counters.json \u63D0\u5347\u5230\u78C1\u76D8\u6700\u5927\u503C\u3002",
|
|
1512
1788
|
"doctor.check.store_counter_drift.message.plural": "{count} \u4E2A store counter \u4F4E\u4E8E\u78C1\u76D8\u4E0A\u7684\u6700\u5927 stable_id\uFF08{detail}\uFF09\u3002\u8FD9\u4E9B store \u4E0B\u4E00\u6B21\u94F8\u53F7\u4F1A\u590D\u7528\u5DF2\u5B58\u5728\u7684 id\u3002\u8FD0\u884C `fabric doctor --fix` \u5C06 store counters.json \u63D0\u5347\u5230\u78C1\u76D8\u6700\u5927\u503C\u3002",
|
|
1513
1789
|
"doctor.check.store_counter_drift.remediation": "\u8FD0\u884C `fabric doctor --fix` \u5C06\u6BCF\u4E2A store \u7684 counters.json \u63D0\u5347\uFF08floor\uFF09\u5230\u78C1\u76D8\u4E0A\u89C2\u6D4B\u5230\u7684\u6700\u5927 stable_id\uFF08floor \u53EA\u5347\u4E0D\u964D\u2014\u2014KT-DEC-0004 \u5355\u8C03\u4E0D\u53D8\u91CF\uFF09\u3002",
|
|
1514
1790
|
"doctor.check.store_counter_drift.ok": "read-set \u5185\u6BCF\u4E2A store \u7684 counters.json \u90FD\u5DF2 floor \u5230\u78C1\u76D8\u6700\u5927 stable_id\u3002",
|
|
1515
|
-
"doctor.check.store_orphan.name": "Store
|
|
1791
|
+
"doctor.check.store_orphan.name": "Store \u5B64\u513F",
|
|
1516
1792
|
"doctor.check.store_orphan.message.singular": "{count} \u4E2A store \u5728\u78C1\u76D8\u4E0A\u5B58\u5728\u4F46\u672A\u767B\u8BB0\u5230\u5168\u5C40 registry\uFF08{detail}\uFF09\uFF0Crecall / bind \u90FD\u770B\u4E0D\u5230\u5B83\u3002\u8FD0\u884C `fabric doctor --fix` \u628A\u5B83\u6536\u7F16\uFF08\u91CD\u65B0\u767B\u8BB0\uFF0C\u7EDD\u4E0D\u5220\u9664\u78C1\u76D8\u6587\u4EF6\uFF09\u3002",
|
|
1517
1793
|
"doctor.check.store_orphan.message.plural": "{count} \u4E2A store \u5728\u78C1\u76D8\u4E0A\u5B58\u5728\u4F46\u672A\u767B\u8BB0\u5230\u5168\u5C40 registry\uFF08\u9996\u4E2A\uFF1A{detail}\uFF09\uFF0Crecall / bind \u90FD\u770B\u4E0D\u5230\u5B83\u4EEC\u3002\u8FD0\u884C `fabric doctor --fix` \u628A\u5B83\u4EEC\u6536\u7F16\uFF08\u91CD\u65B0\u767B\u8BB0,\u7EDD\u4E0D\u5220\u9664\u78C1\u76D8\u6587\u4EF6\uFF09\u3002",
|
|
1518
1794
|
"doctor.check.store_orphan.remediation": "\u8FD0\u884C `fabric doctor --fix` \u628A\u8FD9\u4E9B\u5B64\u513F store \u6536\u7F16\u8FDB registry(\u6309 store_uuid \u91CD\u65B0\u767B\u8BB0\u3001alias \u649E\u5E93\u81EA\u52A8\u6D88\u6B67;rescue-before-delete\u2014\u2014\u53EA\u767B\u8BB0\u4E0D\u5220\u76D8)\u3002",
|
|
1519
1795
|
"doctor.check.store_orphan.ok": "~/.fabric/stores \u4E0B\u6CA1\u6709\u672A\u767B\u8BB0\u7684\u5B64\u513F store\u3002",
|
|
1520
|
-
|
|
1796
|
+
// W2 (F-003): 项目注册表漂移 —— projects.json ↔ projects/ 文件夹树。
|
|
1797
|
+
"doctor.check.project_registry_drift.name": "\u9879\u76EE\u6CE8\u518C\u8868\u6F02\u79FB",
|
|
1798
|
+
"doctor.check.project_registry_drift.ok": "\u6BCF\u4E2A knowledge/projects/<id>/ \u6587\u4EF6\u5939\u90FD\u5DF2\u5728 projects.json \u6CE8\u518C,\u4E14\u6CA1\u6709\u5DF2\u6CE8\u518C\u6587\u4EF6\u5939\u4E3A\u7A7A\u3002",
|
|
1799
|
+
"doctor.check.project_registry_drift.message.unregistered": "{total} \u5904\u9879\u76EE\u6CE8\u518C\u8868\u6F02\u79FB:{breakdown}\u3002\u4F8B\u5982 store '{storeAlias}' \u7684 projects/{projectId}/ \u6709\u77E5\u8BC6\u6761\u76EE\u4F46\u672A\u5728 projects.json \u6CE8\u518C(\u5199\u5165\u672A\u8DEF\u7531)\u3002\u8FD0\u884C `fabric doctor --fix` \u8865\u767B\u8BB0(rescue-before-delete\u2014\u2014\u4ECE\u4E0D\u5220\u6587\u4EF6\u5939)\u3002",
|
|
1800
|
+
"doctor.check.project_registry_drift.message.orphan": "{total} \u5904\u9879\u76EE\u6CE8\u518C\u8868\u6F02\u79FB:{breakdown}\u3002\u4F8B\u5982 store '{storeAlias}' \u7684 projects/{projectId}/ \u78C1\u76D8\u5B58\u5728\u4F46\u672A\u5728 projects.json \u6CE8\u518C\u3002\u8FD0\u884C `fabric doctor --fix` \u8865\u767B\u8BB0(rescue\u2014\u2014\u4ECE\u4E0D\u5220\u6587\u4EF6\u5939)\u3002",
|
|
1801
|
+
"doctor.check.project_registry_drift.message.empty": "{total} \u5904\u9879\u76EE\u6CE8\u518C\u8868\u6F02\u79FB:{breakdown}\u3002\u4F8B\u5982 store '{storeAlias}' \u5DF2\u6CE8\u518C\u9879\u76EE '{projectId}' \u7684 projects/{projectId}/ \u6587\u4EF6\u5939\u4E3A\u7A7A(\u96F6\u6761\u76EE)\u3002\u8FD0\u884C `fabric doctor --fix` \u6E05\u7406\u7A7A\u6587\u4EF6\u5939\u3002",
|
|
1802
|
+
"doctor.check.project_registry_drift.remediation": "\u8FD0\u884C `fabric doctor --fix` \u5BF9\u8D26:orphan / \u672A\u6CE8\u518C\u5199\u5165\u7684\u6587\u4EF6\u5939\u4F1A\u88AB rescue-register \u8FDB projects.json(\u5373\u4F7F\u975E\u7A7A\u4E5F\u4ECE\u4E0D\u5220\u9664);\u4EC5\u771F\u6B63\u4E3A\u7A7A\u7684\u5DF2\u6CE8\u518C\u6587\u4EF6\u5939\u624D\u88AB\u6E05\u7406\u3002ghost \u6CE8\u518C(\u5DF2\u6CE8\u518C id \u4F46\u65E0\u6587\u4EF6\u5939)\u662F\u5408\u6CD5\u7684(lazy \u521B\u5EFA),\u65E0\u9700\u5904\u7406\u3002",
|
|
1803
|
+
"doctor.check.preexisting_root_files.name": "\u9884\u5B58\u6839\u76EE\u5F55 markdown",
|
|
1521
1804
|
"doctor.check.preexisting_root_files.ok": "project root \u672A\u68C0\u6D4B\u5230 CLAUDE.md \u6216 AGENTS.md\u3002",
|
|
1522
1805
|
"doctor.check.preexisting_root_files.message": "project root \u68C0\u6D4B\u5230 {files}\u3002\u8FD9\u4E9B root files \u4E0D\u4F1A\u88AB Fabric MCP \u81EA\u52A8\u52A0\u8F7D\u3002",
|
|
1523
1806
|
"doctor.check.preexisting_root_files.remediation": "\u5982\u679C\u5E0C\u671B\u8FD9\u4E9B knowledge \u5185\u5BB9\u5728 MCP \u54CD\u5E94\u4E2D\u53EF\u7528\uFF0C\u8BF7\u5C06\u5176\u79FB\u52A8\u5230 mounted store \u7684 `knowledge/{type}/` tree\u3002",
|
|
1524
1807
|
// v2.0.0-rc.33 W3-2 (T6 #34): 同 stable_id_collision — 走 fabric-review modify 让 allocator 分配新 id, 不让用户手算。
|
|
1525
1808
|
// v2.0.0-rc.33 W3-2 (T6 #35): 加 skill 入口 (`/fabric-review modify <id>`) 让用户知道怎么 invoke。
|
|
1526
|
-
"doctor.check.index_drift.name": "
|
|
1809
|
+
"doctor.check.index_drift.name": "\u77E5\u8BC6\u7D22\u5F15\u6F02\u79FB",
|
|
1527
1810
|
"doctor.check.index_drift.ok": "agents.meta.json counters envelope \u5BF9\u6BCF\u4E2A (layer, type) pair \u90FD\u5927\u4E8E\u6216\u7B49\u4E8E\u73B0\u6709 canonical counter \u6700\u5927\u503C\u3002",
|
|
1528
1811
|
"doctor.check.index_drift.message.singular": "{count} \u4E2A (layer, type) counter slot \u5DF2\u4F4E\u4E8E\u89C2\u6D4B\u5230\u7684 canonical maximum\uFF08next allocate would collide\uFF09\u3002\u9996\u4E2A\uFF1A{detail}\u3002",
|
|
1529
1812
|
"doctor.check.index_drift.message.plural": "{count} \u4E2A (layer, type) counter slots \u5DF2\u4F4E\u4E8E\u89C2\u6D4B\u5230\u7684 canonical maximum\uFF08next allocate would collide\uFF09\u3002\u9996\u4E2A\uFF1A{detail}\u3002",
|
|
1530
1813
|
"doctor.check.index_drift.remediation": "\u8FD0\u884C `fabric doctor --fix-knowledge`\u5C06 agents.meta.json counters \u63D0\u5347\u5230 max_observed + 1\u3002",
|
|
1531
|
-
"doctor.check.underseeded.name": "
|
|
1814
|
+
"doctor.check.underseeded.name": "\u77E5\u8BC6\u79CD\u5B50\u4E0D\u8DB3",
|
|
1532
1815
|
"doctor.check.underseeded.ok": "\u77E5\u8BC6\u5E93\u5DF2\u6709 {count} \u4E2A canonical entries\uFF08>= {threshold}\uFF09\u3002",
|
|
1533
1816
|
"doctor.check.underseeded.message.singular": "\u77E5\u8BC6\u5E93\u4EC5\u6709 {count} \u4E2A canonical entry\uFF08< {threshold} threshold\uFF09\u3002plan_context \u68C0\u7D22\u9762\u4F4E\u4E8E\u53EF\u7528\u4E0B\u9650\u3002",
|
|
1534
1817
|
"doctor.check.underseeded.message.plural": "\u77E5\u8BC6\u5E93\u4EC5\u6709 {count} \u4E2A canonical entries\uFF08< {threshold} threshold\uFF09\u3002plan_context \u68C0\u7D22\u9762\u4F4E\u4E8E\u53EF\u7528\u4E0B\u9650\u3002",
|
|
1535
1818
|
"doctor.check.underseeded.remediation": "\u8FD0\u884C fabric-archive skill \u7684 source mode\uFF08`/fabric-archive`\uFF09\u4ECE git history \u4E0E\u73B0\u6709\u6587\u6863\u56DE\u586B knowledge\u3002",
|
|
1536
|
-
"doctor.check.session_hints_stale.name": "
|
|
1819
|
+
"doctor.check.session_hints_stale.name": "\u77E5\u8BC6 session-hints \u9648\u65E7",
|
|
1537
1820
|
"doctor.check.session_hints_stale.ok": ".fabric/.cache/ \u4E0B\u6CA1\u6709\u8D85\u8FC7 {days} \u5929\u7684 session-hints cache files\u3002",
|
|
1538
1821
|
"doctor.check.session_hints_stale.message.singular": ".fabric/.cache/ \u4E0B\u6709 {count} \u4E2A session-hints cache file \u8D85\u8FC7 {days} \u5929\u3002\u9996\u4E2A\uFF1A{detail}\u3002",
|
|
1539
1822
|
"doctor.check.session_hints_stale.message.plural": ".fabric/.cache/ \u4E0B\u6709 {count} \u4E2A session-hints cache files \u8D85\u8FC7 {days} \u5929\u3002\u9996\u4E2A\uFF1A{detail}\u3002",
|
|
1540
1823
|
"doctor.check.session_hints_stale.remediation": "\u8FD0\u884C `fabric doctor --fix-knowledge` \u5220\u9664\u8FC7\u671F\u7684 session-hints cache files\u3002",
|
|
1541
|
-
"doctor.check.hook_cache_writable.name": "Hook
|
|
1824
|
+
"doctor.check.hook_cache_writable.name": "Hook \u7F13\u5B58\u53EF\u5199",
|
|
1542
1825
|
"doctor.check.hook_cache_writable.ok": "Hook sidecar cache \u8DEF\u5F84 {path} \u53EF\u5199\u5165\u63A2\u9488\u6587\u4EF6\u3002",
|
|
1543
1826
|
"doctor.check.hook_cache_writable.message": "Hook sidecar cache \u8DEF\u5F84 {path} \u4E0D\u53EF\u5199\uFF1Bhook state updates \u4F1A\u9759\u9ED8\u5931\u8D25\u3002\u9519\u8BEF\uFF1A{error}\u3002",
|
|
1544
1827
|
"doctor.check.hook_cache_writable.remediation": "\u6062\u590D {path} \u5199\u6743\u9650\uFF0C\u79FB\u9664\u5360\u7528\u8BE5\u8DEF\u5F84\u7684\u963B\u585E\u6587\u4EF6\uFF0C\u6216\u4FEE\u590D\u6587\u4EF6\u7CFB\u7EDF\u72B6\u6001\u540E\u91CD\u65B0\u8FD0\u884C `fabric install`\u3002",
|
|
1545
|
-
"doctor.check.stale_serve_lock.name": "Serve
|
|
1828
|
+
"doctor.check.stale_serve_lock.name": "Serve \u9501",
|
|
1546
1829
|
"doctor.check.stale_serve_lock.ok.no_lock": "\u672A\u53D1\u73B0 .fabric/.serve.lock\u3002",
|
|
1547
1830
|
"doctor.check.stale_serve_lock.ok.live_pid": ".fabric/.serve.lock \u7531 live PID {pid} \u6301\u6709\u3002",
|
|
1548
1831
|
"doctor.check.stale_serve_lock.age.day.singular": "{count} \u5929\u524D",
|
|
@@ -1552,7 +1835,7 @@ var zhCNMessages = {
|
|
|
1552
1835
|
"doctor.check.stale_serve_lock.message.dead_pid": "[advisory] .fabric/.serve.lock \u6301\u6709 dead PID {pid}\uFF08acquired {acquiredAgo}\uFF09\u3002\u8FD0\u884C `fabric doctor --fix` \u79FB\u9664\u3002",
|
|
1553
1836
|
"doctor.check.stale_serve_lock.remediation.dead_pid": "\u8FD0\u884C `fabric doctor --fix` \u79FB\u9664\u8FC7\u671F\u7684 .fabric/.serve.lock\u3002",
|
|
1554
1837
|
// rc.31 BUG-M3/NEW-4: hooks_wired observability.
|
|
1555
|
-
"doctor.check.hooks_wired.name": "Claude Code hooks
|
|
1838
|
+
"doctor.check.hooks_wired.name": "Claude Code hooks \u6CE8\u5165",
|
|
1556
1839
|
"doctor.check.hooks_wired.ok.skipped": "\u9879\u76EE\u672A\u542F\u7528 Claude Code\uFF08\u65E0 .claude/ \u76EE\u5F55\uFF09\uFF1B\u8DF3\u8FC7 hooks_wired \u68C0\u67E5\u3002",
|
|
1557
1840
|
"doctor.check.hooks_wired.ok.wired": ".claude/settings.json \u5DF2\u6CE8\u5165 Stop:fabric-hint / SessionStart:knowledge-hint-broad / PreToolUse:knowledge-hint-narrow \u4E09\u4E2A fabric hook\u3002",
|
|
1558
1841
|
"doctor.check.hooks_wired.message.missing_settings": ".claude/ \u76EE\u5F55\u5B58\u5728\u4F46 .claude/settings.json \u7F3A\u5931\u6216\u65E0\u6CD5\u89E3\u6790\uFF1Bfabric install \u53EF\u80FD\u4ECE\u672A\u8DD1\u6210\u529F\uFF0C\u6216\u6587\u4EF6\u88AB\u5916\u90E8\u6E05\u7A7A\u3002",
|
|
@@ -1573,7 +1856,7 @@ var zhCNMessages = {
|
|
|
1573
1856
|
"doctor.check.hooks_content_drift.message": "{count} \u4E2A hook basename \u5728 client \u4E4B\u95F4\u5185\u5BB9 drift\uFF1B\u9996\u4F8B\uFF1A{first_basename}\uFF08\u6D89\u53CA {first_clients}\uFF09\u3002`fabric install` \u590D\u5236\u540C\u4E00\u6A21\u677F\u5230\u4E09 client\uFF0Cdrift \u901A\u5E38\u6765\u81EA\u624B\u52A8\u7F16\u8F91\u3002",
|
|
1574
1857
|
"doctor.check.hooks_content_drift.remediation": "\u8FD0\u884C `fabric install` \u628A\u6240\u6709 client \u7684 hook \u526F\u672C\u6062\u590D\u5230 canonical \u6A21\u677F\u3002\u82E5\u4F60\u786E\u5B9E\u9700\u8981 client-specific hook \u884C\u4E3A\uFF0C\u5EFA\u8BAE\u6539 lib/ \u5171\u4EAB\u811A\u672C\u6216 templates/hooks/configs/ \u914D\u7F6E\u800C\u975E\u76F4\u63A5\u7F16\u8F91\u5B89\u88C5\u540E\u7684 .cjs\u3002",
|
|
1575
1858
|
// rc.31 BUG-G2/G5: promote-ledger invariant check.
|
|
1576
|
-
"doctor.check.promote_ledger_invariant.name": "
|
|
1859
|
+
"doctor.check.promote_ledger_invariant.name": "\u664B\u5347\u8D26\u672C\u4E0D\u53D8\u91CF",
|
|
1577
1860
|
"doctor.check.promote_ledger_invariant.ok": "knowledge_proposed={proposed} \u2265 knowledge_promote_started={started} \u2265 knowledge_promoted={promoted}\uFF0Cledger \u4E0D\u53D8\u91CF\u6301\u6709\u3002",
|
|
1578
1861
|
"doctor.check.promote_ledger_invariant.message.proposed-lt-started": "knowledge_proposed={proposed} \u5C0F\u4E8E knowledge_promote_started={started}\uFF08ledger \u4E0D\u53D8\u91CF\u88AB\u7834\u574F\uFF1B\u90E8\u5206 pending \u5728 approve \u65F6\u672A\u7ECF\u8FC7 fab_propose \u2192 \u7F3A\u5C11 propose \u4E8B\u4EF6\uFF09\u3002",
|
|
1579
1862
|
"doctor.check.promote_ledger_invariant.message.started-lt-promoted": "knowledge_promote_started={started} \u5C0F\u4E8E knowledge_promoted={promoted}\uFF08ledger \u4E0D\u53D8\u91CF\u88AB\u7834\u574F\uFF1B\u5B58\u5728\u672A\u914D\u5BF9\u7684 promoted \u4E8B\u4EF6\uFF0C\u53EF\u80FD\u6765\u81EA doctor filesystem-edit fallback \u6216\u5916\u90E8\u5199\u5165\uFF09\u3002",
|
|
@@ -1592,70 +1875,70 @@ var zhCNMessages = {
|
|
|
1592
1875
|
"doctor.check.knowledge_summary_opaque.message.warn": "{opaque}/{total} \u4E2A entry ({pct}%) \u7684 description.summary \u7B49\u4E8E stable_id\uFF0C\u8D85\u8FC7 {threshold}% \u9608\u503C\u3002narrow hint \u8F93\u51FA\u4F1A\u53D8\u6210 `<id> \xB7 <id>` \u800C\u975E\u771F\u5B9E\u6982\u8981\uFF0CAI \u770B\u4E0D\u5230\u4FE1\u606F\u4F1A\u4E3B\u52A8\u8DF3\u8FC7 fetch\u3002\u9996\u6279\u4E0D\u900F\u660E: {sample}\u3002",
|
|
1593
1876
|
"doctor.check.knowledge_summary_opaque.remediation": "\u8C03 fabric-review skill \u91CD\u5199\u4E0D\u900F\u660E summary \u4E3A\u4E00\u53E5\u4EBA\u7C7B\u53EF\u8BFB\u7684\u6982\u8981\u3002rc.35 hint renderer fallback (TASK-06) \u4E5F\u4F1A\u4ECE entry \u7684 `## Summary` \u6BB5\u81EA\u52A8\u5408\u6210\u4E34\u65F6 summary\u3002",
|
|
1594
1877
|
// v2.2 W4 (G-GUARD / A6): store scope lint。
|
|
1595
|
-
"doctor.check.store_scope_lint.name": "Store scope
|
|
1878
|
+
"doctor.check.store_scope_lint.name": "Store scope \u68C0\u67E5",
|
|
1596
1879
|
"doctor.check.store_scope_lint.ok": "read-set \u5185\u6240\u6709 store \u6761\u76EE scope \u5143\u6570\u636E\u9F50\u5907(semantic_scope + visibility_store,\u65E0 personal \u6CC4\u6F0F,\u65E0 dangling project)\u3002",
|
|
1597
1880
|
"doctor.check.store_scope_lint.message": "{total} \u4E2A store scope \u95EE\u9898: {breakdown}\u3002\u4F8B\u5982 {sample}\u3002",
|
|
1598
1881
|
"doctor.check.store_scope_lint.remediation": "\u8C03 `fabric store migrate backfill` \u8865\u7F3A\u5931\u7684 semantic_scope/visibility_store;`fabric store migrate scope` \u4FEE dangling \u7684 project: \u5750\u6807;\u628A personal-scope \u6761\u76EE\u79FB\u51FA shared store(personal \u77E5\u8BC6\u53EA\u5B58\u4E2A\u4EBA store,R5#3)\u3002",
|
|
1599
1882
|
// v2.2 Goal B (G-INTEGRITY): store stable_id collision + layer mismatch lints。
|
|
1600
|
-
"doctor.check.stable_id_collision.name": "Stable ID
|
|
1883
|
+
"doctor.check.stable_id_collision.name": "Stable ID \u51B2\u7A81",
|
|
1601
1884
|
"doctor.check.stable_id_collision.message.singular": 'stable_id "{stableId}" \u88AB\u58F0\u660E\u5728 {fileCount} \u4E2A\u6587\u4EF6\u4E2D:{files}\u3002\u8BF7\u7F16\u8F91\u5176\u4E2D\u4E00\u4E2A knowledge file,\u6539\u7528\u552F\u4E00 stable_id\u3002',
|
|
1602
1885
|
"doctor.check.stable_id_collision.message.plural": '\u68C0\u6D4B\u5230 {count} \u4E2A stable_id collisions\u3002\u9996\u4E2A:"{stableId}" \u4F4D\u4E8E {files}\u3002\u8BF7\u7F16\u8F91\u5176\u4E2D\u4E00\u4E2A knowledge file,\u6539\u7528\u552F\u4E00 stable_id\u3002',
|
|
1603
1886
|
"doctor.check.stable_id_collision.remediation": "\u8C03 `/fabric-review modify <message \u4E2D\u5217\u51FA\u7684 colliding id \u4E4B\u4E00>`, \u8BA9 canonical id allocator \u81EA\u52A8\u91CD\u5206\u914D id (\u4F1A\u540C\u6B65\u66F4\u65B0 frontmatter + counters + \u5386\u53F2 cross-ref)\u3002\u4E25\u7981\u624B\u5DE5\u7F16\u8F91 id frontmatter \u2014 \u4F1A\u649E counter\u3002",
|
|
1604
1887
|
"doctor.check.stable_id_collision.ok": "mounted store knowledge \u4E2D\u672A\u53D1\u73B0\u5DF2\u58F0\u660E\u7684 stable_id collisions\u3002",
|
|
1605
|
-
"doctor.check.layer_mismatch.name": "
|
|
1888
|
+
"doctor.check.layer_mismatch.name": "\u77E5\u8BC6 layer \u4E0D\u5339\u914D",
|
|
1606
1889
|
"doctor.check.layer_mismatch.ok": "\u6240\u6709 canonical knowledge files \u90FD\u4F4D\u4E8E stable_id prefix \u58F0\u660E\u7684 layer \u4E0B\u3002",
|
|
1607
1890
|
"doctor.check.layer_mismatch.message.singular": "{count} \u4E2A canonical knowledge file \u4E0E\u5176 stable_id layer prefix \u7684\u7269\u7406\u4F4D\u7F6E\u4E0D\u4E00\u81F4(KT-* must live under team/, KP-* under personal/)\u3002\u9996\u4E2A:{detail}\u3002",
|
|
1608
1891
|
"doctor.check.layer_mismatch.message.plural": "{count} \u4E2A canonical knowledge files \u4E0E\u5176 stable_id layer prefix \u7684\u7269\u7406\u4F4D\u7F6E\u4E0D\u4E00\u81F4(KT-* must live under team/, KP-* under personal/)\u3002\u9996\u4E2A:{detail}\u3002",
|
|
1609
1892
|
"doctor.check.layer_mismatch.remediation": "\u5C06\u6587\u4EF6\u79FB\u52A8\u5230\u6B63\u786E\u7684 write-target store,\u6216\u8C03 `/fabric-review modify <message \u4E2D\u5217\u51FA\u7684 id>` \u5207\u6362\u5176 layer (\u4F1A\u76F8\u5E94\u91CD\u547D\u540D stable_id prefix)\u3002",
|
|
1610
1893
|
// v2.2 Goal B (G-RELEVANCE): store relevance_paths hygiene (dangling + drift)。
|
|
1611
|
-
"doctor.check.relevance_paths_dangling.name": "
|
|
1894
|
+
"doctor.check.relevance_paths_dangling.name": "\u77E5\u8BC6 relevance_paths \u60AC\u7A7A",
|
|
1612
1895
|
"doctor.check.relevance_paths_dangling.ok": "\u6240\u6709 relevance_paths globs \u90FD\u80FD\u5728 workspace root \u4E0B\u89E3\u6790\u5230\u81F3\u5C11 1 \u4E2A\u6587\u4EF6\u3002",
|
|
1613
1896
|
"doctor.check.relevance_paths_dangling.message.singular": "{count} \u4E2A relevance_paths glob \u5728\u5F53\u524D workspace \u4E2D\u89E3\u6790\u5230 0 \u4E2A\u6587\u4EF6\u3002\u9996\u4E2A:{detail}\u3002",
|
|
1614
1897
|
"doctor.check.relevance_paths_dangling.message.plural": "{count} \u4E2A relevance_paths globs \u5728\u5F53\u524D workspace \u4E2D\u89E3\u6790\u5230 0 \u4E2A\u6587\u4EF6\u3002\u9996\u4E2A:{detail}\u3002",
|
|
1615
1898
|
"doctor.check.relevance_paths_dangling.remediation": "\u66F4\u65B0 entry \u7684 relevance_paths,\u79FB\u9664\u4E0D\u518D\u5339\u914D\u4EFB\u4F55\u6587\u4EF6\u7684 globs,\u6216\u4F7F\u7528 `fab_review.modify` \u91CD\u5199 anchor set\u3002",
|
|
1616
|
-
"doctor.check.relevance_paths_drift.name": "
|
|
1899
|
+
"doctor.check.relevance_paths_drift.name": "\u77E5\u8BC6 relevance_paths \u6F02\u79FB",
|
|
1617
1900
|
"doctor.check.relevance_paths_drift.ok.skipped": "\u5DF2\u8DF3\u8FC7(git history unavailable;\u65E0\u6CD5\u8BC4\u4F30 {windowDays}d drift window)\u3002",
|
|
1618
1901
|
"doctor.check.relevance_paths_drift.ok.fresh": "\u6240\u6709 narrow-scope canonical entries \u90FD\u81F3\u5C11\u6709 1 \u4E2A relevance_path \u5728\u6700\u8FD1 {windowDays}d \u5185\u88AB\u89E6\u78B0\u3002",
|
|
1619
1902
|
"doctor.check.relevance_paths_drift.message.singular": "{count} \u4E2A narrow-scope canonical entry \u7684 relevance_paths globs \u6CA1\u6709\u5339\u914D\u5230\u6700\u8FD1 {windowDays}d git history \u4E2D\u89E6\u78B0\u8FC7\u7684\u6587\u4EF6\u3002\u9996\u4E2A:{detail}\u3002",
|
|
1620
1903
|
"doctor.check.relevance_paths_drift.message.plural": "{count} \u4E2A narrow-scope canonical entries \u7684 relevance_paths globs \u6CA1\u6709\u5339\u914D\u5230\u6700\u8FD1 {windowDays}d git history \u4E2D\u89E6\u78B0\u8FC7\u7684\u6587\u4EF6\u3002\u9996\u4E2A:{detail}\u3002",
|
|
1621
1904
|
"doctor.check.relevance_paths_drift.remediation": "\u5BA1\u9605\u8BE5 entry \u662F\u5426\u4ECD\u7136\u76F8\u5173 \u2014 \u4F7F\u7528 `fab_review.modify` \u5237\u65B0 anchors,\u6216\u4F7F\u7528 `fab_review.reject` \u5F52\u6863\u3002",
|
|
1622
1905
|
// W4-3 (KT-MOD-0001): narrow scope 但 relevance_paths 为空。
|
|
1623
|
-
"doctor.check.narrow_no_paths.name": "
|
|
1906
|
+
"doctor.check.narrow_no_paths.name": "\u77E5\u8BC6 narrow scope \u7F3A\u8DEF\u5F84",
|
|
1624
1907
|
"doctor.check.narrow_no_paths.ok": "\u6BCF\u6761 narrow scope canonical entry \u90FD\u81F3\u5C11\u5E26\u4E00\u4E2A relevance_path\u3002",
|
|
1625
1908
|
"doctor.check.narrow_no_paths.message.singular": "{count} \u6761 narrow scope entry \u7684 relevance_paths \u4E3A\u7A7A \u2014 \u6C38\u8FDC\u65E0\u6CD5\u8DEF\u5F84\u5339\u914D,\u56E0\u6B64\u6C38\u4E0D\u6D6E\u51FA(\u6B7B\u6761\u76EE)\u3002\u9996\u6761: {detail}\u3002",
|
|
1626
1909
|
"doctor.check.narrow_no_paths.message.plural": "{count} \u6761 narrow scope entry \u7684 relevance_paths \u4E3A\u7A7A \u2014 \u6C38\u8FDC\u65E0\u6CD5\u8DEF\u5F84\u5339\u914D,\u56E0\u6B64\u6C38\u4E0D\u6D6E\u51FA(\u6B7B\u6761\u76EE)\u3002\u9996\u6761: {detail}\u3002",
|
|
1627
1910
|
"doctor.check.narrow_no_paths.remediation": "\u7528 `fab_review.modify` \u8865 relevance_paths glob \u951A\u5B9A\u8BE5 entry,\u6216\u82E5\u672C\u610F\u662F\u5E38\u9A7B\u5219\u628A relevance_scope \u6539\u4E3A `broad`\u3002",
|
|
1628
1911
|
// W4-2 (KT-DEC-0028): 单 store broad 索引接近 backstop。
|
|
1629
|
-
"doctor.check.broad_index_drift.name": "
|
|
1912
|
+
"doctor.check.broad_index_drift.name": "\u77E5\u8BC6 broad \u7D22\u5F15\u6F02\u79FB",
|
|
1630
1913
|
"doctor.check.broad_index_drift.ok": "\u6CA1\u6709 store \u7684 broad scope \u6761\u76EE\u6570\u8FBE\u5230\u6F02\u79FB\u9608\u503C({threshold},backstop {backstop} \u7684 80%)\u3002",
|
|
1631
1914
|
"doctor.check.broad_index_drift.message.singular": "{count} \u4E2A store \u7684 broad \u7D22\u5F15\u5DF2\u8FBE {threshold}(backstop {backstop} \u7684 80%) \u2014 SessionStart banner \u63A5\u8FD1\u622A\u65AD broad \u6761\u76EE\u3002\u9996\u6761: {detail}\u3002",
|
|
1632
1915
|
"doctor.check.broad_index_drift.message.plural": "{count} \u4E2A store \u7684 broad \u7D22\u5F15\u5DF2\u8FBE {threshold}(backstop {backstop} \u7684 80%) \u2014 SessionStart banner \u63A5\u8FD1\u622A\u65AD broad \u6761\u76EE\u3002\u9996\u6761: {detail}\u3002",
|
|
1633
1916
|
"doctor.check.broad_index_drift.remediation": "\u8DD1 `fabric-review` skill \u7684 retire \u5B50\u6D41\u7A0B\u5728\u544A\u8B66 store \u5185 prune/\u964D\u7EA7\u9648\u65E7 broad \u6761\u76EE,\u6216\u82E5\u8BED\u6599\u786E\u5B9E\u5927\u5219\u5728 .fabric/fabric-config.json \u8C03\u9AD8 `broad_index_backstop`\u3002",
|
|
1634
1917
|
// v2.2 Goal B (G-AGE): knowledge decay lints (orphan_demote + stale_archive)。
|
|
1635
|
-
"doctor.check.orphan_demote.name": "
|
|
1918
|
+
"doctor.check.orphan_demote.name": "\u77E5\u8BC6\u5B64\u513F\u964D\u7EA7",
|
|
1636
1919
|
"doctor.check.orphan_demote.ok": "\u6CA1\u6709 canonical knowledge entries \u8D85\u8FC7\u6309 maturity \u8BBE\u5B9A\u7684 inactivity threshold\u3002",
|
|
1637
1920
|
"doctor.check.orphan_demote.message.singular": "{count} \u4E2A canonical knowledge entry \u8D85\u8FC7\u6309 maturity \u8BBE\u5B9A\u7684 inactivity threshold(proven={provenDays}d / verified={verifiedDays}d / draft={draftDays}d)\u3002\u9996\u4E2A:{detail}\u3002",
|
|
1638
1921
|
"doctor.check.orphan_demote.message.plural": "{count} \u4E2A canonical knowledge entries \u8D85\u8FC7\u6309 maturity \u8BBE\u5B9A\u7684 inactivity threshold(proven={provenDays}d / verified={verifiedDays}d / draft={draftDays}d)\u3002\u9996\u4E2A:{detail}\u3002",
|
|
1639
1922
|
"doctor.check.orphan_demote.remediation": "\u901A\u8FC7 `/fabric-review modify <id>` \u5C06\u8BE5 entry \u964D\u7EA7\u4E00\u4E2A maturity tier,\u6216\u91CD\u65B0\u4F7F\u7528\u5B83\u4EE5\u8BB0\u5F55\u65B0\u6D3B\u52A8\u3002(\u6539\u5199 store \u77E5\u8BC6\u662F store \u5199\u4FA7\u6D41\u7A0B\u7684\u804C\u8D23 \u2014 \u8FD9\u4E2A\u8BFB\u4FA7 lint \u53EA\u8D1F\u8D23\u66B4\u9732\u8870\u51CF\u3002)",
|
|
1640
|
-
"doctor.check.stale_archive.name": "
|
|
1923
|
+
"doctor.check.stale_archive.name": "\u77E5\u8BC6\u9648\u65E7\u5F52\u6863",
|
|
1641
1924
|
"doctor.check.stale_archive.ok": "\u6CA1\u6709 draft knowledge entries \u8D85\u8FC7\u989D\u5916\u7684 stale-archive quiet window\u3002",
|
|
1642
1925
|
"doctor.check.stale_archive.message.singular": "{count} \u4E2A draft knowledge entry \u5DF2\u8D85\u8FC7 demote+{additionalDays}d \u989D\u5916 quiet window\u3002\u9996\u4E2A:{detail}\u3002",
|
|
1643
1926
|
"doctor.check.stale_archive.message.plural": "{count} \u4E2A draft knowledge entries \u5DF2\u8D85\u8FC7 demote+{additionalDays}d \u989D\u5916 quiet window\u3002\u9996\u4E2A:{detail}\u3002",
|
|
1644
1927
|
"doctor.check.stale_archive.remediation": "\u901A\u8FC7 `/fabric-review reject <id>` \u5F52\u6863\u8BE5 stale draft,\u6216\u82E5\u4ECD\u76F8\u5173\u5219\u590D\u6D3B\u5B83\u3002(\u79FB\u52A8 store \u6587\u4EF6\u662F store \u5199\u4FA7\u6D41\u7A0B\u7684\u804C\u8D23 \u2014 \u8FD9\u4E2A\u8BFB\u4FA7 lint \u53EA\u8D1F\u8D23\u66B4\u9732\u9648\u65E7\u3002)",
|
|
1645
1928
|
// v2.2 C1: knowledge promotion lint (promotion_candidate, info kind)。
|
|
1646
|
-
"doctor.check.promotion_candidate.name": "
|
|
1929
|
+
"doctor.check.promotion_candidate.name": "\u77E5\u8BC6\u664B\u5347\u5019\u9009",
|
|
1647
1930
|
"doctor.check.promotion_candidate.ok": "\u6CA1\u6709 verified knowledge entries \u8FBE\u5230 proven \u664B\u5347\u7684 related \u5165\u5EA6\u95E8\u69DB\u3002",
|
|
1648
1931
|
"doctor.check.promotion_candidate.message.singular": "{count} \u4E2A verified knowledge entry \u7684 related \u5165\u5EA6 \u2265{threshold},\u7ED3\u6784\u4E0A\u591F\u4E2D\u5FC3,\u503C\u5F97 review \u664B\u5347\u5230 proven\u3002\u9996\u4E2A:{detail}\u3002",
|
|
1649
1932
|
"doctor.check.promotion_candidate.message.plural": "{count} \u4E2A verified knowledge entries \u7684 related \u5165\u5EA6 \u2265{threshold},\u7ED3\u6784\u4E0A\u591F\u4E2D\u5FC3,\u503C\u5F97 review \u664B\u5347\u5230 proven\u3002\u9996\u4E2A:{detail}\u3002",
|
|
1650
1933
|
"doctor.check.promotion_candidate.remediation": "\u901A\u8FC7 `/fabric-review` \u590D\u6838\u8FD9\u4E9B entry,\u786E\u8BA4 0 dismiss\u3001cold-eval \u81EA\u8DB3\u3001\u5C5E\u5730\u57FA\u7EA7\u540E `modify <id>` \u5347\u5230 proven\u3002(\u664B\u5347\u5224\u5B9A\u662F store \u5199\u4FA7 review \u7684\u804C\u8D23 \u2014 \u8FD9\u4E2A\u8BFB\u4FA7 lint \u53EA surface \u7ED3\u6784\u4E2D\u5FC3\u7684\u5019\u9009\u3002)",
|
|
1651
1934
|
// v2.2 C1: broad review-recheck lint (broad_review_recheck, info kind)。
|
|
1652
|
-
"doctor.check.broad_review_recheck.name": "
|
|
1935
|
+
"doctor.check.broad_review_recheck.name": "\u77E5\u8BC6 broad review \u590D\u67E5",
|
|
1653
1936
|
"doctor.check.broad_review_recheck.ok": "\u6CA1\u6709 broad-scope knowledge entries \u8D85\u671F\u672A\u505A review \u518D\u786E\u8BA4\u3002",
|
|
1654
1937
|
"doctor.check.broad_review_recheck.message.singular": "{count} \u4E2A broad-scope knowledge entry \u5DF2 {thresholdDays}d+ \u6CA1\u7ECF\u8FC7 fab-review \u518D\u786E\u8BA4,\u503C\u5F97\u590D\u67E5(broad \u8C41\u514D usage-age \u964D\u7EA7,\u8FD9\u662F\u5B83\u7684 review \u65F6\u949F)\u3002\u9996\u4E2A:{detail}\u3002",
|
|
1655
1938
|
"doctor.check.broad_review_recheck.message.plural": "{count} \u4E2A broad-scope knowledge entries \u5DF2 {thresholdDays}d+ \u6CA1\u7ECF\u8FC7 fab-review \u518D\u786E\u8BA4,\u503C\u5F97\u590D\u67E5(broad \u8C41\u514D usage-age \u964D\u7EA7,\u8FD9\u662F\u5B83\u7684 review \u65F6\u949F)\u3002\u9996\u4E2A:{detail}\u3002",
|
|
1656
1939
|
"doctor.check.broad_review_recheck.remediation": "\u901A\u8FC7 `/fabric-review` \u518D\u786E\u8BA4\u6BCF\u6761(approve/modify \u4F1A\u76D6\u4E00\u4E2A\u65B0\u7684 review \u65F6\u95F4\u6233),\u6216\u82E5\u4E0D\u518D\u6210\u7ACB\u5219\u964D\u7EA7/\u9A73\u56DE\u3002\u8FD9\u662F\u975E\u963B\u585E\u63D0\u793A,\u7EDD\u4E0D\u81EA\u52A8\u964D\u7EA7 \u2014 broad \u77E5\u8BC6\u5728 reviewer \u52A8\u624B\u524D\u6301\u7EED surface\u3002",
|
|
1657
1940
|
// project-scope binding 回填 lint (unbound_project)。
|
|
1658
|
-
"doctor.check.unbound_project.name": "Project-scope
|
|
1941
|
+
"doctor.check.unbound_project.name": "Project-scope \u7ED1\u5B9A",
|
|
1659
1942
|
"doctor.check.unbound_project.ok": "\u5DF2\u7ED1\u5199\u5165 store \u5E26\u6709 project \u5750\u6807(project_id + active_project),project-scope \u7684 recall/\u5199\u5165\u8DEF\u7531\u6B63\u5E38\u3002",
|
|
1660
1943
|
"doctor.check.unbound_project.message": "store '{alias}' \u5DF2\u7ED1\u4E3A\u5199\u5165\u76EE\u6807\u4F46 project \u5750\u6807\u4E0D\u5B8C\u6574(\u7F3A {missing});project-scope \u7684 recall/\u5199\u5165\u4F1A fallback \u5230 team scope\u3002",
|
|
1661
1944
|
"doctor.check.unbound_project.remediation": "\u8C03 `fabric doctor --fix` \u56DE\u586B project \u7ED1\u5B9A(\u94F8 project_id\u3001\u628A project \u6CE8\u518C\u8FDB store\u3001\u8BBE active_project)\u3002\u5E42\u7B49 \u2014\u2014 \u4E8C\u6B21\u8DD1\u4E3A no-op\u3002",
|
|
@@ -1664,7 +1947,7 @@ var zhCNMessages = {
|
|
|
1664
1947
|
"doctor.check.skill_md_yaml_invalid.message.singular": "{count} \u4E2A SKILL.md frontmatter value \u5305\u542B\u672A\u52A0\u5F15\u53F7\u7684 ': '\uFF0Cstrict YAML parsers \u4F1A\u62D2\u7EDD\uFF08Claude Code tolerates it\uFF1BCodex CLI drops the skill at load\uFF09\u3002\u9996\u4E2A\uFF1A{detail}\u3002",
|
|
1665
1948
|
"doctor.check.skill_md_yaml_invalid.message.plural": "{count} \u4E2A SKILL.md frontmatter values \u5305\u542B\u672A\u52A0\u5F15\u53F7\u7684 ': '\uFF0Cstrict YAML parsers \u4F1A\u62D2\u7EDD\uFF08Claude Code tolerates it\uFF1BCodex CLI drops the skill at load\uFF09\u3002\u9996\u4E2A\uFF1A{detail}\u3002",
|
|
1666
1949
|
"doctor.check.skill_md_yaml_invalid.remediation": '\u4F7F\u7528\u53CC\u5F15\u53F7\u5305\u88F9\u8BE5 value\uFF08`description: "\u2026"`\uFF09\uFF0C\u6216\u5C06\u5185\u90E8\u7684 `key: value` token \u6539\u5199\u4E3A `key=value`\u3002',
|
|
1667
|
-
"doctor.check.onboard_coverage.name": "Onboard
|
|
1950
|
+
"doctor.check.onboard_coverage.name": "Onboard \u8986\u76D6\u7387",
|
|
1668
1951
|
"doctor.check.onboard_coverage.ok.complete": "Onboard coverage\uFF1A{filledCount}/{total} \u2713\uFF08opted-out\uFF1A{optedOutCount}\uFF09\u3002",
|
|
1669
1952
|
"doctor.check.onboard_coverage.message.incomplete": "\u5C1A\u672A\u8986\u76D6\u7684 onboard slots\uFF1A[{missingSlots}]\u3002{filledCount}/{total} filled\uFF1B{optedOutCount} opted-out\u3002",
|
|
1670
1953
|
"doctor.check.onboard_coverage.remediation.incomplete": "\u8FD0\u884C /fabric-archive \u6267\u884C onboard \u2014 Skill's first-run phase \u4F1A\u904D\u5386\u9879\u76EE\uFF0C\u5E76\u4E3A\u6BCF\u4E2A unclaimed slot \u63D0\u8BAE pending entries\u3002",
|
|
@@ -1684,13 +1967,15 @@ var zhCNMessages = {
|
|
|
1684
1967
|
"cli.doctor.errors.invalid-history-mode": "\u65E0\u6548\u7684 --history mode '{input}'\u3002\u53EF\u9009: archive | fix | all\u3002",
|
|
1685
1968
|
"doctor.history.header": "Doctor \u5386\u53F2 (mode={mode}, \u8FD1 {sinceLabel}, \u5171 {days} \u5929)",
|
|
1686
1969
|
"doctor.history.empty": "--since={sinceLabel} \u7A97\u53E3\u5185\u65E0 doctor \u6216 archive \u6D3B\u52A8 (mode={mode})\u3002",
|
|
1687
|
-
"cli.install.description": "\u5728\u76EE\u6807\u9879\u76EE\u4E2D\u5B89\u88C5 Fabric\uFF08\u811A\u624B\u67B6 .fabric/\u3001bootstrap \u6A21\u677F\u3001MCP \u5BA2\u6237\u7AEF\u914D\u7F6E\u3001git hooks\uFF09
|
|
1970
|
+
"cli.install.description": "\u5728\u76EE\u6807\u9879\u76EE\u4E2D\u5B89\u88C5 Fabric\uFF08\u811A\u624B\u67B6 .fabric/\u3001bootstrap \u6A21\u677F\u3001MCP \u5BA2\u6237\u7AEF\u914D\u7F6E\u3001git hooks\uFF09",
|
|
1688
1971
|
"cli.install.args.target.description": "\u76EE\u6807\u9879\u76EE\u8DEF\u5F84\u3002\u9ED8\u8BA4\u4F9D\u6B21\u4F7F\u7528 --target\u3001EXTERNAL_FIXTURE_PATH\u3001\u5F53\u524D\u76EE\u5F55\u3002",
|
|
1689
1972
|
"cli.install.args.debug.description": "\u5C06\u76EE\u6807\u89E3\u6790\u7EC6\u8282\u8F93\u51FA\u5230 stderr\u3002",
|
|
1690
1973
|
"cli.install.args.yes.description": "\u63A5\u53D7\u5F53\u524D\u5B89\u88C5\u8BA1\u5212\u5E76\u8DF3\u8FC7 TTY \u5411\u5BFC\u76F4\u63A5\u6267\u884C",
|
|
1691
1974
|
"cli.install.args.dry-run.description": "\u4EC5\u8F93\u51FA\u5B89\u88C5\u8BA1\u5212\uFF0C\u4E0D\u5199\u6587\u4EF6\u4E5F\u4E0D\u6267\u884C\u540E\u7EED\u9636\u6BB5",
|
|
1692
1975
|
"cli.install.args.enable-embed.description": "\u542F\u7528\u5411\u91CF\u8BED\u4E49\u641C\u7D22 (\u8BBE embed_enabled + embed_model;\u6253\u5370 fastembed \u5B89\u88C5\u6B65\u9AA4)",
|
|
1693
1976
|
"cli.install.args.embed-model.description": "\u914D\u5408 --enable-embed:\u8986\u76D6\u56FA\u5B9A\u7684 embed \u6A21\u578B (\u9ED8\u8BA4 fast-bge-small-zh-v1.5)",
|
|
1977
|
+
"cli.install.args.global.description": "\u914D\u7F6E\u5168\u5C40 Fabric (~/.fabric:uid + personal store + \u914D\u7F6E)",
|
|
1978
|
+
"cli.install.args.url.description": "\u514B\u9686\u5E76\u6302\u8F7D\u4E00\u4E2A\u5171\u4EAB store \u8FDC\u7A0B\u5E93\u3002\u9879\u76EE\u5B89\u88C5\u65F6:\u540C\u65F6\u7ED1\u5B9A\u5230\u672C\u9879\u76EE\u5E76\u8BBE\u4E3A\u5199\u5165\u76EE\u6807\u3002\u914D\u5408 --global:\u4EC5\u6302\u8F7D\u5230\u672C\u673A\u3002",
|
|
1694
1979
|
// TASK-004: --verbose 展开重装折叠的逐 phase 明细 + 完整客户端能力表。
|
|
1695
1980
|
"cli.install.args.verbose.description": "\u5C55\u5F00\u5B8C\u6574\u660E\u7EC6:\u91CD\u88C5\u5E42\u7B49\u65F6\u4E0D\u6298\u53E0\u4E3A\u4F53\u68C0\u5361\u7247,\u5E76\u6253\u5370\u9010\u5BA2\u6237\u7AEF\u80FD\u529B\u8868",
|
|
1696
1981
|
// rc.35 TASK-08 (P0-5/6): --force-skills-only。
|
|
@@ -1740,6 +2025,10 @@ var zhCNMessages = {
|
|
|
1740
2025
|
"cli.install.mcp.none": "\u65E0\u9700\u914D\u7F6E MCP \u5BA2\u6237\u7AEF",
|
|
1741
2026
|
"cli.install.scan.finding.framework": "\u68C0\u6D4B\u5230: {framework} \u9879\u76EE",
|
|
1742
2027
|
"cli.install.scan.finding.scale": "\u89C4\u6A21: {files} \u6587\u4EF6 \xB7 {entries} \u4E2A\u5165\u53E3",
|
|
2028
|
+
// flat-design: 扫描结果合成一行人话(框架 + 规模);版本为 unknown 时隐去,
|
|
2029
|
+
// 没识别出框架时退到 plain。
|
|
2030
|
+
"cli.install.scan.summary.framework": "\u68C0\u6D4B\u5230 {framework} \u9879\u76EE \xB7 {files} \u6587\u4EF6 \xB7 {entries} \u5165\u53E3",
|
|
2031
|
+
"cli.install.scan.summary.plain": "\u626B\u63CF\u5B8C\u6210 \xB7 {files} \u6587\u4EF6 \xB7 {entries} \u5165\u53E3",
|
|
1743
2032
|
"cli.install.rollback.feedback": "\u5DF2\u56DE\u6EDA {count} \u9879\u6539\u52A8,\u9879\u76EE\u4FDD\u6301\u539F\u72B6\u3002",
|
|
1744
2033
|
"cli.install.stages.skipped": "\u5DF2\u8DF3\u8FC7",
|
|
1745
2034
|
"cli.install.stages.completed": "\u5DF2\u5B8C\u6210",
|
|
@@ -1756,7 +2045,7 @@ var zhCNMessages = {
|
|
|
1756
2045
|
"cli.summary.done": "\u5B8C\u6210!",
|
|
1757
2046
|
"cli.summary.all-ok": "\u5168\u90E8\u6B65\u9AA4\u5DF2\u5B8C\u6210",
|
|
1758
2047
|
"cli.summary.n-failed": "{count} \u4E2A\u6B65\u9AA4\u5931\u8D25",
|
|
1759
|
-
"cli.summary.
|
|
2048
|
+
"cli.summary.all-resolved": "\u5168\u90E8\u5DF2\u5904\u7406 \xB7 {done} \u6267\u884C / {skipped} \u8DF3\u8FC7",
|
|
1760
2049
|
"cli.summary.count.succeeded": "\u6210\u529F",
|
|
1761
2050
|
"cli.summary.count.skipped": "\u8DF3\u8FC7",
|
|
1762
2051
|
"cli.summary.count.failed": "\u5931\u8D25",
|
|
@@ -1771,11 +2060,12 @@ var zhCNMessages = {
|
|
|
1771
2060
|
// installed-count 仅在该阶段确有改动时使用。
|
|
1772
2061
|
"cli.install.stage.uptodate": "\u5DF2\u6700\u65B0",
|
|
1773
2062
|
"cli.install.stage.installed-count": "{count} \u9879\u5DF2\u5B89\u88C5",
|
|
1774
|
-
|
|
1775
|
-
"cli.install.pipeline.label.
|
|
1776
|
-
"cli.install.pipeline.label.
|
|
1777
|
-
"cli.install.pipeline.label.
|
|
1778
|
-
"cli.install.pipeline.label.
|
|
2063
|
+
// flat-design: 阶段标签收短,让 `● 名称 ✓` 列对齐、读着清爽(原全称偏长)。
|
|
2064
|
+
"cli.install.pipeline.label.preflight": "\u73AF\u5883\u9884\u68C0",
|
|
2065
|
+
"cli.install.pipeline.label.env": "\u73AF\u5883\u521D\u59CB\u5316",
|
|
2066
|
+
"cli.install.pipeline.label.store": "\u77E5\u8BC6\u5E93",
|
|
2067
|
+
"cli.install.pipeline.label.hooks": "Hook \u4E0E skill",
|
|
2068
|
+
"cli.install.pipeline.label.mcp": "MCP \u670D\u52A1",
|
|
1779
2069
|
"cli.install.pipeline.label.validate": "\u5B89\u88C5\u6821\u9A8C",
|
|
1780
2070
|
"cli.install.pipeline.label.guidance": "\u540E\u7EED\u6307\u5F15",
|
|
1781
2071
|
"cli.install.pipeline.desc.store": "\u7ED1\u5B9A\u5F53\u524D\u9879\u76EE\u7684 read/write store\uFF0C\u5237\u65B0 resolved-bindings snapshot\u3002",
|
|
@@ -1783,6 +2073,9 @@ var zhCNMessages = {
|
|
|
1783
2073
|
// TASK-002 (G6): 收口总结卡的单一黄金动作锚点。能力明细表收进 --verbose,
|
|
1784
2074
|
// 这一行才是诚实的「下一步做什么」。{action} = 具体下一条命令。
|
|
1785
2075
|
"cli.install.next-step.anchor": "\u4E0B\u4E00\u6B65 \u2192 {action}",
|
|
2076
|
+
// flat-design (G6): 装完最该做的事是重启客户端让 MCP 生效 —— 这才是默认锚点动作;
|
|
2077
|
+
// --reapply 维护提示退到 --verbose。
|
|
2078
|
+
"cli.install.next-step.restart": "\u91CD\u542F\u5DF2\u5F00\u7684 Claude Code / Codex \u4F1A\u8BDD\u4EE5\u52A0\u8F7D Fabric(\u65B0\u4F1A\u8BDD\u81EA\u52A8\u751F\u6548)\u3002",
|
|
1786
2079
|
"cli.install.reason-message": "{label} {message}",
|
|
1787
2080
|
"cli.install.language.prompt": "\u9009\u62E9 Fabric \u8BED\u8A00\uFF08\u754C\u9762\u4E0E\u77E5\u8BC6\u7EDF\u4E00\u4F7F\u7528\uFF0C\u4E4B\u540E\u53EF\u7528 fabric config \u4FEE\u6539\uFF09\uFF1A",
|
|
1788
2081
|
"cli.install.language.option.zh-CN": "\u7B80\u4F53\u4E2D\u6587 (zh-CN)",
|
|
@@ -1858,11 +2151,15 @@ var zhCNMessages = {
|
|
|
1858
2151
|
"cli.install.store.slot.personal.multi-new-hint": "\u5168\u65B0\u7A7A personal store,\u5E76\u8BBE\u4E3A active",
|
|
1859
2152
|
"cli.install.store.slot.personal.new-alias": "\u65B0 personal store \u7684\u522B\u540D:",
|
|
1860
2153
|
"cli.install.store.slot.personal.switched": "\u5DF2\u5C06\u672C\u673A\u6D3B\u52A8 personal store \u5207\u5230 '{alias}'",
|
|
1861
|
-
"cli.install.store.slot.team.status": "\u56E2\u961F\u5E93(team \u7C7B): '{alias}' \u2713",
|
|
2154
|
+
"cli.install.store.slot.team.status": "\u56E2\u961F\u5E93(team \u7C7B): '{alias}'{source} \u2713",
|
|
1862
2155
|
"cli.install.store.slot.team.empty": "\u56E2\u961F\u5E93(team \u7C7B): \u5C1A\u672A\u7ED1\u5B9A",
|
|
1863
|
-
"cli.install.store.slot.team.prompt": "\u4E3A\u672C\u9879\u76EE\
|
|
2156
|
+
"cli.install.store.slot.team.prompt": "\u4E3A\u672C\u9879\u76EE\u9009\u62E9\u56E2\u961F\u77E5\u8BC6\u5E93(team \u7C7B):",
|
|
1864
2157
|
"cli.install.store.slot.team.bound-label": "\u4FDD\u6301\u5F53\u524D: {alias}",
|
|
1865
2158
|
"cli.install.store.slot.team.switch-label": "\u5207\u5230\u5DF2\u6302\u8F7D: {alias}",
|
|
2159
|
+
// flat-design store menu:「保持当前」与「跳过」语义合并 —— 已绑定时 SKIP 行显示
|
|
2160
|
+
// 为 keep-label(保持当前 · 不改动),未绑定时为「跳过 · 仅用 personal store」。
|
|
2161
|
+
"cli.install.store.slot.team.keep-label": "\u4FDD\u6301\u5F53\u524D: {alias} \xB7 \u4E0D\u6539\u52A8",
|
|
2162
|
+
"cli.install.store.slot.team.keep-hint": "{source}\u7EE7\u7EED\u7528\u8FD9\u4E2A\u56E2\u961F\u5E93,\u672C\u6B21\u4E0D\u6539\u52A8\u7ED1\u5B9A",
|
|
1866
2163
|
"cli.install.store.skip-label": "\u8DF3\u8FC7",
|
|
1867
2164
|
"cli.install.store.bind-mounted.skip-hint": "\u6682\u4E0D\u7ED1\u5B9A\u5DF2\u6302\u8F7D\u7684 store",
|
|
1868
2165
|
"cli.install.store.project-coordinate": "\u5728 store '{store}' \u4E2D\u7684\u9879\u76EE\u5750\u6807 (project coordinate):",
|
|
@@ -1935,7 +2232,7 @@ var zhCNMessages = {
|
|
|
1935
2232
|
"cli.install.diff.state.present-canonical": "\u89C4\u8303",
|
|
1936
2233
|
"cli.install.diff.state.drifted": "\u6F02\u79FB",
|
|
1937
2234
|
"cli.install.diff.state.user-modified": "\u7528\u6237\u4FEE\u6539",
|
|
1938
|
-
"cli.uninstall.description": "\u4ECE\u76EE\u6807\u9879\u76EE\u4E2D\u5378\u8F7D Fabric\
|
|
2235
|
+
"cli.uninstall.description": "\u4ECE\u76EE\u6807\u9879\u76EE\u4E2D\u5378\u8F7D Fabric\uFF08~/.fabric/stores/ \u4E0B\u7684\u5168\u5C40 store \u6C38\u4E0D\u5220\u9664\uFF09",
|
|
1939
2236
|
"cli.uninstall.args.target.description": "\u76EE\u6807\u9879\u76EE\u8DEF\u5F84\u3002\u9ED8\u8BA4\u4F9D\u6B21\u4F7F\u7528 --target\u3001EXTERNAL_FIXTURE_PATH\u3001\u5F53\u524D\u76EE\u5F55\u3002",
|
|
1940
2237
|
"cli.uninstall.args.debug.description": "\u5C06\u76EE\u6807\u89E3\u6790\u7EC6\u8282\u8F93\u51FA\u5230 stderr\u3002",
|
|
1941
2238
|
"cli.uninstall.args.yes.description": "\u63A5\u53D7\u5F53\u524D\u5378\u8F7D\u8BA1\u5212\u5E76\u8DF3\u8FC7 TTY \u5411\u5BFC\u76F4\u63A5\u6267\u884C\u3002",
|
|
@@ -1977,7 +2274,6 @@ var zhCNMessages = {
|
|
|
1977
2274
|
// flat-design-system Wave5 (TASK-006 G3): 总结卡明细行的人话结果词,与 install 的
|
|
1978
2275
|
// `已安装 {count} 项` / `已最新` 对称。
|
|
1979
2276
|
"cli.uninstall.stage.cleaned-count": "\u5DF2\u6E05\u7406 {count} \u9879",
|
|
1980
|
-
"cli.uninstall.stage.already-clean": "\u5DF2\u662F\u5E72\u51C0",
|
|
1981
2277
|
"cli.uninstall.summary.title": "\u5378\u8F7D\u6458\u8981",
|
|
1982
2278
|
"cli.uninstall.summary.body": "removed={removed} skipped={skipped} errors={errors}",
|
|
1983
2279
|
"cli.uninstall.healthcheck.title": "\u2713 Fabric \u5DF2\u4E0D\u5B58\u5728 \xB7 \u65E0\u53EF\u79FB\u9664",
|
|
@@ -2212,6 +2508,62 @@ var zhCNMessages = {
|
|
|
2212
2508
|
"cli.whoami.stores-none": "stores: (\u672A\u6302\u8F7D\u4EFB\u4F55 store)",
|
|
2213
2509
|
"cli.whoami.stores-label": "stores:",
|
|
2214
2510
|
"cli.shared.local-only": "(\u4EC5\u672C\u5730)",
|
|
2511
|
+
// `fabric info`(平铺风)—— 身份 / 项目状态 / 召回引擎 标题与字段标签。
|
|
2512
|
+
"cli.info.field.uid": "uid",
|
|
2513
|
+
"cli.info.identity.title": "Fabric \u8EAB\u4EFD",
|
|
2514
|
+
"cli.info.status.title": "\u9879\u76EE\u72B6\u6001",
|
|
2515
|
+
"cli.info.status.group.machine": "\u672C\u673A",
|
|
2516
|
+
"cli.info.status.group.project": "\u5F53\u524D\u9879\u76EE",
|
|
2517
|
+
"cli.info.status.field.project": "\u9879\u76EE",
|
|
2518
|
+
"cli.info.status.field.mounted": "\u5DF2\u6302\u8F7D\u5E93",
|
|
2519
|
+
"cli.info.status.field.bound": "\u7ED1\u5B9A\u5E93",
|
|
2520
|
+
"cli.info.status.value.unset": "(\u672A\u8BBE\u7F6E)",
|
|
2521
|
+
"cli.info.status.value.not-project": "(\u975E Fabric \u9879\u76EE)",
|
|
2522
|
+
"cli.info.status.value.no-global": "(\u65E0\u5168\u5C40\u914D\u7F6E)",
|
|
2523
|
+
"cli.info.recall.title": "\u53EC\u56DE\u5F15\u64CE",
|
|
2524
|
+
"cli.info.recall.summary.on": "\u8BED\u4E49\u641C\u7D22\u5DF2\u5F00 \u2014\u2014 \u8BE6\u60C5 fabric info --recall",
|
|
2525
|
+
"cli.info.recall.summary.off": "\u5173\u952E\u8BCD\u6A21\u5F0F \xB7 \u8BED\u4E49\u641C\u7D22\u672A\u5F00 \u2014\u2014 \u8BE6\u60C5 fabric info --recall",
|
|
2526
|
+
"cli.info.recall.mode.additive": "additive(\u5173\u952E\u8BCD\u6A21\u5F0F)",
|
|
2527
|
+
"cli.info.recall.mode.rrf": "rrf(\u5173\u952E\u8BCD+\u8BED\u4E49)",
|
|
2528
|
+
"cli.info.recall.reason.forced-additive": "\u914D\u7F6E\u56FA\u5B9A\u4E3A\u5173\u952E\u8BCD\u6A21\u5F0F(additive)",
|
|
2529
|
+
"cli.info.recall.reason.auto-additive": "\u5411\u91CF\u901A\u9053\u672A\u5C31\u7EEA,\u81EA\u52A8\u56DE\u9000\u5230\u5173\u952E\u8BCD\u6A21\u5F0F",
|
|
2530
|
+
"cli.info.recall.reason.auto-rrf": "\u5411\u91CF\u901A\u9053\u5C31\u7EEA,\u4F7F\u7528\u5173\u952E\u8BCD+\u8BED\u4E49\u878D\u5408(rrf)",
|
|
2531
|
+
"cli.info.recall.reason.rrf-ready": "\u914D\u7F6E\u56FA\u5B9A\u4E3A rrf,\u5411\u91CF\u901A\u9053\u5C31\u7EEA",
|
|
2532
|
+
"cli.info.recall.reason.rrf-warn": "\u914D\u7F6E\u56FA\u5B9A\u4E3A rrf,\u4F46\u5411\u91CF\u901A\u9053\u672A\u5C31\u7EEA \u2014\u2014 \u5355\u901A\u9053 rrf \u53CD\u800C\u6BD4\u5173\u952E\u8BCD\u6A21\u5F0F\u5DEE",
|
|
2533
|
+
"cli.info.recall.install-hint": "\u88C5\u5B83\u5F00\u542F\u8BED\u4E49\u641C\u7D22:npm i -g fastembed",
|
|
2534
|
+
"cli.info.recall.field.fusion-config": "\u878D\u5408\u7B56\u7565(\u914D\u7F6E)",
|
|
2535
|
+
"cli.info.recall.field.fusion-effective": "\u878D\u5408\u7B56\u7565(\u5B9E\u9645)",
|
|
2536
|
+
"cli.info.recall.field.embed-enabled": "embed \u5F00\u542F",
|
|
2537
|
+
"cli.info.recall.field.embed-model": "embed \u6A21\u578B",
|
|
2538
|
+
"cli.info.recall.field.fastembed": "fastembed \u5305",
|
|
2539
|
+
"cli.info.recall.field.cache-dir": "\u6A21\u578B\u7F13\u5B58",
|
|
2540
|
+
"cli.info.recall.field.model-cached": "\u6A21\u578B\u5DF2\u7F13\u5B58",
|
|
2541
|
+
"cli.info.recall.field.vector": "\u5411\u91CF\u901A\u9053",
|
|
2542
|
+
"cli.info.recall.fastembed.yes": "\u53EF\u89E3\u6790",
|
|
2543
|
+
"cli.info.recall.fastembed.no": "\u672A\u5B89\u88C5(\u53EF\u9009\u4F9D\u8D56)",
|
|
2544
|
+
"cli.info.recall.cached.no": "\u672A\u7F13\u5B58 \u2014\u2014 \u9996\u6B21\u53EC\u56DE\u65F6\u4E0B\u8F7D(\u6216\u8FD0\u884C `fabric info --recall --warm`)",
|
|
2545
|
+
"cli.info.recall.vector.ready": "\u5C31\u7EEA",
|
|
2546
|
+
"cli.info.recall.vector.not-ready": "\u672A\u5C31\u7EEA \u2014\u2014 \u53EC\u56DE\u56DE\u9000\u5230\u5173\u952E\u8BCD\u6A21\u5F0F(BM25 / additive)",
|
|
2547
|
+
"cli.info.recall.warm.ok": "embedder \u5DF2\u9884\u70ED:\u6A21\u578B '{model}' \u5DF2\u52A0\u8F7D(\u5411\u91CF\u7EF4\u5EA6 {dim}),\u7F13\u5B58\u4E8E {dir}",
|
|
2548
|
+
"cli.info.recall.warm.fail": "embedder \u4E0D\u53EF\u7528 \u2014\u2014 \u53EF\u9009\u7684 'fastembed' \u5305\u65E0\u6CD5\u89E3\u6790,\u6216\u6A21\u578B\u52A0\u8F7D\u5931\u8D25\u3002\n \u53EC\u56DE\u56DE\u9000\u5230\u5173\u952E\u8BCD\u6A21\u5F0F(BM25 / additive)\u3002\u8BF7\u5728 server \u80FD\u89E3\u6790\u6A21\u5757\u7684\u4F4D\u7F6E\u5B89\u88C5 fastembed \u540E\u91CD\u8BD5\u3002",
|
|
2549
|
+
"cli.store.list.description": "\u5217\u51FA\u6302\u8F7D\u7684 store",
|
|
2550
|
+
// 追加在 `fabric store --help` 末尾的说明 —— 交代进阶(meta.hidden)操作去哪了,
|
|
2551
|
+
// 否则只剩 list 一行会让用户以为 store 没别的能力。
|
|
2552
|
+
"cli.store.help.folded-note": "\u8FDB\u9636\u64CD\u4F5C(create / bind / switch-write / migrate \u7B49)\u5DF2\u6298\u53E0 \u2014\u2014 \u7531 fabric install \u4E0E fabric-store skill \u9A71\u52A8;\u9700\u8981\u65F6\u76F4\u63A5 `fabric store <\u547D\u4EE4> --help` \u67E5\u770B\u3002",
|
|
2553
|
+
"cli.store.list.title": "\u5DF2\u6302\u8F7D\u77E5\u8BC6\u5E93",
|
|
2554
|
+
"cli.store.project.list.title": "store '{store}' \u4E2D\u7684\u9879\u76EE",
|
|
2555
|
+
"cli.store.project.list.empty": "(\u65E0\u5DF2\u6CE8\u518C\u9879\u76EE)",
|
|
2556
|
+
"cli.store.project.created": "\u5DF2\u5728 store '{store}' \u6CE8\u518C\u9879\u76EE '{id}'",
|
|
2557
|
+
"cli.store.migrate.title": "\u77E5\u8BC6\u5750\u6807\u8FC1\u79FB",
|
|
2558
|
+
"cli.store.backfill.noop": "scope \u56DE\u586B:\u65E0\u9700\u6539\u52A8({count} \u6761\u5DF2\u4E00\u81F4)",
|
|
2559
|
+
"cli.store.backfill.summary": "scope \u56DE\u586B:{changed} \u6761\u5DF2\u66F4\u65B0,{unchanged} \u6761\u672A\u53D8",
|
|
2560
|
+
"cli.store.backfill.scope-note": "{count} \u6761\u9ED8\u8BA4\u8BBE\u4E3A semantic_scope: team\u3002\u7528 `fabric store migrate scope <store> --to project:<id> --id <id>` \u628A\u9879\u76EE\u4E13\u5C5E\u7684\u964D\u7EA7\u3002",
|
|
2561
|
+
"cli.store.rescope.noop": "\u91CD\u5B9A scope:\u65E0\u9700\u6539\u52A8({count} \u6761\u5DF2\u662F '{scope}')",
|
|
2562
|
+
"cli.store.rescope.summary": "\u91CD\u5B9A scope \u2192 {scope}:{changed} \u6761\u5DF2\u66F4\u65B0,{unchanged} \u6761\u672A\u53D8",
|
|
2563
|
+
"cli.store.rescope.refused": "{count} \u6761\u88AB\u62D2\u7EDD",
|
|
2564
|
+
"cli.store.reroot.noop": "reroot:\u65E0\u9700\u8FC1\u79FB({skipped} \u6761\u4FDD\u6301\u5E73\u94FA)",
|
|
2565
|
+
"cli.store.reroot.summary": "reroot:{moved} \u6761\u9879\u76EE\u6761\u76EE\u5DF2\u8FC1\u5165 knowledge/projects/<id>/",
|
|
2566
|
+
"cli.store.reroot.provenance-gap": "{count} \u6761\u7ECF fs rename \u8FC1\u79FB(\u672A\u8DDF\u8E2A / \u975E git)\u2014\u2014 \u8FD9\u4E9B\u6761\u76EE\u7684 git blame \u5386\u53F2\u672A\u4FDD\u7559",
|
|
2215
2567
|
"cli.store.none-mounted": "(\u672A\u6302\u8F7D\u4EFB\u4F55 store)",
|
|
2216
2568
|
"cli.store.mounted": "\u5DF2\u6302\u8F7D '{alias}' (\u5171 {count} \u4E2A store)",
|
|
2217
2569
|
"cli.store.created": "\u5DF2\u521B\u5EFA store '{alias}' ({uuid}) \u4E8E {dir}",
|
|
@@ -2224,12 +2576,29 @@ var zhCNMessages = {
|
|
|
2224
2576
|
"cli.store.routed": "\u5199\u5165\u8DEF\u7531:scope '{scope}' \u2192 store '{alias}'",
|
|
2225
2577
|
"cli.sync.deferred": "{count} \u4E2A store \u79BB\u7EBF \u2014\u2014 push \u5DF2\u5EF6\u540E; \u8054\u7F51\u540E\u91CD\u65B0\u8FD0\u884C `fabric sync`",
|
|
2226
2578
|
"cli.sync.paused": "sync \u56E0\u51B2\u7A81\u6682\u505C \u2014\u2014 \u89E3\u51B3\u540E\u8FD0\u884C `fabric sync --continue` (\u6216 `--abort`)",
|
|
2579
|
+
// flat-design (spec §0.4):`fabric sync` 命令级标题 + 每个 store 单行 + 聚合摘要。
|
|
2580
|
+
// state 文案在 store 行与摘要计数格之间共用。
|
|
2581
|
+
"cli.sync.args.continue.description": "\u89E3\u51B3 rebase \u51B2\u7A81\u540E\u7EE7\u7EED\u540C\u6B65",
|
|
2582
|
+
"cli.sync.args.abort.description": "\u4E2D\u6B62\u53D1\u751F\u51B2\u7A81\u7684 store \u7684 rebase",
|
|
2583
|
+
"cli.sync.title": "\u540C\u6B65\u77E5\u8BC6\u5E93",
|
|
2584
|
+
"cli.sync.summary.title": "\u540C\u6B65\u6458\u8981",
|
|
2585
|
+
"cli.sync.none": "\u6CA1\u6709\u53EF\u540C\u6B65\u7684\u8FDC\u7A0B store",
|
|
2586
|
+
"cli.sync.all-synced": "\u5168\u90E8 store \u5DF2\u540C\u6B65",
|
|
2587
|
+
"cli.sync.state.synced": "\u5DF2\u540C\u6B65",
|
|
2588
|
+
"cli.sync.state.offline": "\u79BB\u7EBF",
|
|
2589
|
+
"cli.sync.state.conflict": "\u51B2\u7A81",
|
|
2590
|
+
"cli.sync.state.aborted": "\u5DF2\u4E2D\u6B62",
|
|
2591
|
+
"cli.sync.state.pending": "\u5F85\u5904\u7406",
|
|
2227
2592
|
"cli.metrics.invalid-since": '--since: \u65E0\u6548\u7684\u65F6\u957F "{raw}" (\u793A\u4F8B: 24h\u30017d\u300130m)',
|
|
2228
2593
|
"cli.metrics.window": "Fabric \u6307\u6807 \u2014\u2014 \u65F6\u95F4\u7A97: {window}",
|
|
2229
2594
|
"cli.metrics.window-all-time": "\u5168\u90E8\u65F6\u95F4",
|
|
2230
2595
|
"cli.metrics.rows-range": " \u884C\u6570: {count} ({start} \u2192 {end})",
|
|
2231
2596
|
"cli.metrics.rows": " \u884C\u6570: {count}",
|
|
2232
2597
|
"cli.metrics.no-activity": " (\u65F6\u95F4\u7A97\u5185\u65E0\u8BA1\u6570\u6D3B\u52A8 \u2014\u2014 server \u53EF\u80FD\u7A7A\u95F2\u6216\u521A\u542F\u52A8)",
|
|
2598
|
+
"cli.metrics.col.counter": "\u8BA1\u6570\u5668",
|
|
2599
|
+
"cli.metrics.col.total": "\u603B\u8BA1",
|
|
2600
|
+
"cli.metrics.col.entry": "\u6761\u76EE",
|
|
2601
|
+
"cli.metrics.section.perEntry": "\u6309\u6761\u76EE\u6D88\u8D39\u6392\u884C (knowledge_consumed:<id>)",
|
|
2233
2602
|
// W3-09 (ISS-035): forensic 项目扫描进度 (stderr, 仅 TTY)。
|
|
2234
2603
|
"cli.install.scanning": "\u6B63\u5728\u626B\u63CF\u9879\u76EE\u7684\u5BA2\u6237\u7AEF/\u6846\u67B6\u7279\u5F81\u2026",
|
|
2235
2604
|
"cli.install.scan-complete": " \u9879\u76EE\u626B\u63CF\u5B8C\u6210",
|