@fenglimg/fabric-shared 2.3.0-rc.2 → 2.3.0-rc.4
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-ANUDBQBK.js → chunk-ASS2KBB7.js} +13 -1
- package/dist/{chunk-OAYQHN6J.js → chunk-KFFBQRL5.js} +1 -1
- package/dist/{chunk-ZYBWITH7.js → chunk-LDFQYCY7.js} +547 -99
- package/dist/i18n/index.js +2 -2
- package/dist/{index-BO7itJ8e.d.ts → index-C0cijMSw.d.ts} +6 -6
- package/dist/index.d.ts +30 -30
- package/dist/index.js +20 -13
- package/dist/templates/bootstrap-canonical.js +2 -2
- package/dist/theme.d.ts +2 -1
- package/dist/theme.js +7 -0
- package/dist/types/index.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resolveGlobalLocale
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-ASS2KBB7.js";
|
|
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",
|
|
@@ -18,27 +18,80 @@ var enMessages = {
|
|
|
18
18
|
"cli.shared.none": "none",
|
|
19
19
|
"cli.shared.loading": "loading",
|
|
20
20
|
"cli.shared.refresh": "Refresh",
|
|
21
|
+
// flat-design-system Wave4 (TASK-004): gutter-free ✓/x receipt printed after a
|
|
22
|
+
// clack control (select/multiselect/confirm/text) resolves. The clack control
|
|
23
|
+
// stays native (C-006); the receipt is a separate flat line.
|
|
24
|
+
"cli.prompt.receipt.selected": "Selected",
|
|
25
|
+
"cli.prompt.receipt.set": "Set",
|
|
26
|
+
"cli.prompt.receipt.cancelled": "Cancelled",
|
|
21
27
|
"cli.shared.target-invalid": "Target must be an existing directory: {target}",
|
|
22
28
|
"cli.shared.target-invalid.action-hint": "Choose an existing project directory, or create it before running the command again.",
|
|
23
29
|
"cli.shared.template-not-found": "Template not found: {path}",
|
|
24
30
|
"cli.shared.invalid-host-empty": "Invalid host: <empty>",
|
|
25
31
|
"cli.shared.invalid-port": "Invalid port: {value}",
|
|
26
32
|
"cli.shared.error": "Error",
|
|
27
|
-
//
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"cli.
|
|
32
|
-
"cli.
|
|
33
|
-
"cli.
|
|
34
|
-
"cli.
|
|
35
|
-
|
|
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)",
|
|
36
89
|
// v2.1 hidden-command i18n keys cleanup: approve/bootstrap/hooks/human-lint/
|
|
37
90
|
// ledger-append/pre-commit/scan/sync-meta/update commands removed from CLI
|
|
38
91
|
// surface in v2.0.0-rc.18. Keys intentionally retained for backward compat
|
|
39
92
|
// with external tooling that may still reference them. Remove in v2.2
|
|
40
93
|
// if no external consumers surface.
|
|
41
|
-
"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.)",
|
|
42
95
|
"cli.config.args.target.description": "Target project directory (defaults to cwd).",
|
|
43
96
|
"cli.config.clients.claude": "Claude Code CLI",
|
|
44
97
|
"cli.config.install.description": "Install Fabric MCP server entries into detected client configs.",
|
|
@@ -54,6 +107,9 @@ var enMessages = {
|
|
|
54
107
|
// Keys consumed by packages/cli/src/commands/config.ts (menu loop +
|
|
55
108
|
// per-field prompts) and by getPanelFields() (label_i18n_key references).
|
|
56
109
|
"cli.config.intro": "Fabric Configuration",
|
|
110
|
+
// flat-design-system Wave5 (TASK-005): B-横线 title above the flat key/value
|
|
111
|
+
// panel printed before the clack edit menu.
|
|
112
|
+
"cli.config.panel.title": "Current configuration",
|
|
57
113
|
"cli.config.outro": "Configuration saved.",
|
|
58
114
|
"cli.config.outro-no-changes": "No changes made.",
|
|
59
115
|
"cli.config.cancel": "Cancelled.",
|
|
@@ -64,8 +120,17 @@ var enMessages = {
|
|
|
64
120
|
"cli.config.value.default-marker": "(default)",
|
|
65
121
|
"cli.config.prompt.select": "Choose a new value for {key} (current: {current}):",
|
|
66
122
|
"cli.config.prompt.text": "Enter a new value for {key} (current: {current}):",
|
|
67
|
-
"cli.config.write.success": "
|
|
123
|
+
"cli.config.write.success": "{key} = {value}",
|
|
124
|
+
"cli.config.panel.edited": "Edited this session ({count}): {keys}",
|
|
68
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}",
|
|
69
134
|
"cli.config.errors.uninit-workspace.message": "Workspace not initialized. Run `fabric install` first.",
|
|
70
135
|
"cli.config.errors.invalid-int": "Must be a positive integer.",
|
|
71
136
|
"cli.config.errors.unknown-field": "Unknown field selection \u2014 skipping.",
|
|
@@ -96,12 +161,55 @@ var enMessages = {
|
|
|
96
161
|
"cli.config.fields.nudge_mode.label": "Nudge level",
|
|
97
162
|
"cli.config.fields.nudge_mode.description": "Preset for human-visible nudges (silent / minimal / normal / verbose). Governs only the human channel \u2014 never the knowledge injected to the AI.",
|
|
98
163
|
"cli.config.fields.embed_enabled.label": "Vector semantic search",
|
|
99
|
-
"cli.config.fields.embed_enabled.description": "Enable vector semantic recall (true / false). Note:
|
|
100
|
-
"cli.
|
|
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`.",
|
|
165
|
+
"cli.config.fields.fusion.label": "Recall fusion strategy",
|
|
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).",
|
|
167
|
+
"cli.doctor.description": "Run Fabric target-state diagnostics (meta sync, knowledge index, bootstrap, events ledger, human-lock drift)",
|
|
101
168
|
"doctor.section.fixable": "Fixable errors:",
|
|
102
169
|
"doctor.section.manual": "Manual errors:",
|
|
103
170
|
"doctor.section.warnings": "Warnings:",
|
|
104
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`.",
|
|
208
|
+
// flat-design-system Wave5 (TASK-005): C-圆点 group headers for the reskinned
|
|
209
|
+
// doctor surface (`● Store Health` / `● Checks`), replacing the old hardcoded
|
|
210
|
+
// sectionBar literals so the wording is localized in both locales.
|
|
211
|
+
"doctor.group.store-health": "Store Health",
|
|
212
|
+
"doctor.group.checks": "Checks",
|
|
105
213
|
// v2.0.0-rc.29 REVIEW (codex LOW-2): F2's payload-limit defaults reach the JSON
|
|
106
214
|
// envelope but never surfaced in the human renderer, so operators tuning
|
|
107
215
|
// `mcpPayloadLimits` had no fast `fabric doctor` confirmation that their config
|
|
@@ -550,13 +658,15 @@ var enMessages = {
|
|
|
550
658
|
"cli.doctor.errors.invalid-history-mode": "Invalid --history mode '{input}'. Use archive | fix | all.",
|
|
551
659
|
"doctor.history.header": "Doctor history (mode={mode}, last {sinceLabel}, {days} day(s))",
|
|
552
660
|
"doctor.history.empty": "No doctor or archive activity within the --since={sinceLabel} window (mode={mode}).",
|
|
553
|
-
"cli.install.description": "Install Fabric in the target project (scaffold .fabric/, bootstrap templates, MCP client wiring, git hooks)
|
|
661
|
+
"cli.install.description": "Install Fabric in the target project (scaffold .fabric/, bootstrap templates, MCP client wiring, git hooks)",
|
|
554
662
|
"cli.install.args.target.description": "Target project path. Defaults to --target, then EXTERNAL_FIXTURE_PATH, then cwd.",
|
|
555
663
|
"cli.install.args.debug.description": "Print target resolution details to stderr.",
|
|
556
664
|
"cli.install.args.yes.description": "Accept the current install plan and run without the TTY wizard",
|
|
557
665
|
"cli.install.args.dry-run.description": "Print the install plan without writing files or running follow-up stages",
|
|
558
666
|
"cli.install.args.enable-embed.description": "Opt in to vector semantic search (sets embed_enabled + embed_model; prints fastembed install steps)",
|
|
559
667
|
"cli.install.args.embed-model.description": "With --enable-embed: override the pinned embed model (default fast-bge-small-zh-v1.5)",
|
|
668
|
+
"cli.install.args.global.description": "Set up global Fabric (~/.fabric: uid + personal store + config)",
|
|
669
|
+
"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.",
|
|
560
670
|
// TASK-004: --verbose expands the per-phase detail a collapsed re-install would
|
|
561
671
|
// fold, and prints the full per-client capability table.
|
|
562
672
|
"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",
|
|
@@ -607,6 +717,11 @@ var enMessages = {
|
|
|
607
717
|
"cli.install.mcp.none": "no MCP clients to configure",
|
|
608
718
|
"cli.install.scan.finding.framework": "Detected: {framework} project",
|
|
609
719
|
"cli.install.scan.finding.scale": "Scale: {files} files \xB7 {entries} entry points",
|
|
720
|
+
// flat-design: scan result folded into ONE human line (framework + scale); the
|
|
721
|
+
// version is suppressed when it resolved to "unknown"; falls back to plain when
|
|
722
|
+
// no framework was detected.
|
|
723
|
+
"cli.install.scan.summary.framework": "Detected {framework} project \xB7 {files} files \xB7 {entries} entry points",
|
|
724
|
+
"cli.install.scan.summary.plain": "Scan complete \xB7 {files} files \xB7 {entries} entry points",
|
|
610
725
|
"cli.install.rollback.feedback": "Rolled back {count} change(s); project left unchanged.",
|
|
611
726
|
"cli.install.stages.skipped": "skipped",
|
|
612
727
|
"cli.install.stages.completed": "completed",
|
|
@@ -617,12 +732,29 @@ var enMessages = {
|
|
|
617
732
|
"cli.install.pipeline.title": "Fabric Install",
|
|
618
733
|
"cli.install.pipeline.complete": "Fabric Install Complete",
|
|
619
734
|
"cli.install.pipeline.running": "Running {count} stages...",
|
|
735
|
+
// TASK-002 (G1): summary-card completion + count words. Formerly hardcoded
|
|
736
|
+
// English in ConsoleOutputRenderer (Done! / succeeded / skipped / failed /
|
|
737
|
+
// "All steps completed successfully"); routed through t() + dual-locale tables
|
|
738
|
+
// so locale-parity.test.ts guards both en + zh-CN carry every key.
|
|
739
|
+
"cli.summary.done": "Done!",
|
|
740
|
+
"cli.summary.all-ok": "All steps completed successfully",
|
|
741
|
+
"cli.summary.n-failed": "{count} step(s) failed",
|
|
742
|
+
"cli.summary.all-resolved": "all resolved \xB7 {done} done / {skipped} skipped",
|
|
743
|
+
"cli.summary.count.succeeded": "succeeded",
|
|
744
|
+
"cli.summary.count.skipped": "skipped",
|
|
745
|
+
"cli.summary.count.failed": "failed",
|
|
620
746
|
// TASK-004: a first-ever install gets an onboarding-tone intro; a re-install
|
|
621
747
|
// keeps the terse "Running N stages" line. {count} = total stages.
|
|
622
748
|
"cli.install.pipeline.intro.firstRun": "Welcome to Fabric \u2014 this is your first install. I'll walk you through a one-time setup ({count} stages); later runs skip anything already in place.",
|
|
623
749
|
// TASK-004: the single collapsed health-check card title for a fully-idempotent
|
|
624
750
|
// re-install. {count} = total stages. Detail is behind --verbose.
|
|
625
751
|
"cli.install.healthcheck.title": "\u2713 Fabric is up to date \xB7 {count} stages ready \xB7 no changes",
|
|
752
|
+
// TASK-003 (G2 root a): the per-stage summary-detail status word now branches on
|
|
753
|
+
// r.changed (not installed.length) — a no-change re-ensure says "up to date"
|
|
754
|
+
// instead of misreporting "N installed". installed-count is used only when the
|
|
755
|
+
// stage actually changed something.
|
|
756
|
+
"cli.install.stage.uptodate": "up to date",
|
|
757
|
+
"cli.install.stage.installed-count": "{count} installed",
|
|
626
758
|
"cli.install.pipeline.label.preflight": "Preflight check",
|
|
627
759
|
"cli.install.pipeline.label.env": "Environment setup",
|
|
628
760
|
"cli.install.pipeline.label.store": "Store configuration",
|
|
@@ -632,6 +764,14 @@ var enMessages = {
|
|
|
632
764
|
"cli.install.pipeline.label.guidance": "Next steps",
|
|
633
765
|
"cli.install.pipeline.desc.store": "Bind the current project's read/write store; refresh the resolved-bindings snapshot.",
|
|
634
766
|
"cli.install.next-step": "{label} {message}",
|
|
767
|
+
// TASK-002 (G6): a single golden-action anchor that closes the summary card.
|
|
768
|
+
// The verbose capability table is gated behind --verbose; this one line is the
|
|
769
|
+
// honest "what to do next" footer. {action} = the concrete next command.
|
|
770
|
+
"cli.install.next-step.anchor": "Next \u2192 {action}",
|
|
771
|
+
// flat-design (G6): the real next action after install is restarting the client
|
|
772
|
+
// so its MCP server loads — that is the default anchor; the --reapply maintenance
|
|
773
|
+
// hint moves to --verbose.
|
|
774
|
+
"cli.install.next-step.restart": "restart any open Claude Code / Codex session to load Fabric (new sessions pick it up automatically).",
|
|
635
775
|
"cli.install.reason-message": "{label} {message}",
|
|
636
776
|
"cli.install.language.prompt": "Choose the Fabric language (used for both UI and knowledge; change later via `fabric config`):",
|
|
637
777
|
"cli.install.language.option.zh-CN": "\u7B80\u4F53\u4E2D\u6587 (zh-CN)",
|
|
@@ -659,6 +799,10 @@ var enMessages = {
|
|
|
659
799
|
"cli.install.wizard.stage.bootstrap": "Install bootstrap templates? [{defaultValue}]",
|
|
660
800
|
"cli.install.wizard.stage.mcp": "Configure MCP clients? [{defaultValue}]",
|
|
661
801
|
"cli.install.wizard.stage.hooks": "Install git hooks? [{defaultValue}]",
|
|
802
|
+
// flat-design-system Wave4 (TASK-004): short stage labels for the post-group ✓ receipt.
|
|
803
|
+
"cli.install.wizard.stage.bootstrap.short": "bootstrap templates",
|
|
804
|
+
"cli.install.wizard.stage.mcp.short": "MCP clients",
|
|
805
|
+
"cli.install.wizard.stage.hooks.short": "git hooks",
|
|
662
806
|
"cli.install.wizard.mcp-install": "MCP server install scope (global/local) [{defaultValue}]",
|
|
663
807
|
"cli.install.wizard.execute.confirm": "Execute this install plan now? [Y/n]",
|
|
664
808
|
"cli.install.wizard.outro": "Install plan accepted. Running Fabric install...",
|
|
@@ -705,11 +849,15 @@ var enMessages = {
|
|
|
705
849
|
"cli.install.store.slot.personal.multi-new-hint": "a fresh empty personal store, set as active",
|
|
706
850
|
"cli.install.store.slot.personal.new-alias": "alias for the new personal store:",
|
|
707
851
|
"cli.install.store.slot.personal.switched": "active personal store switched to '{alias}'",
|
|
708
|
-
"cli.install.store.slot.team.status": "Team store (team-class): '{alias}' \u2713",
|
|
852
|
+
"cli.install.store.slot.team.status": "Team store (team-class): '{alias}'{source} \u2713",
|
|
709
853
|
"cli.install.store.slot.team.empty": "Team store (team-class): none bound yet",
|
|
710
|
-
"cli.install.store.slot.team.prompt": "
|
|
854
|
+
"cli.install.store.slot.team.prompt": "Choose the team knowledge store (team-class) for this project:",
|
|
711
855
|
"cli.install.store.slot.team.bound-label": "keep current: {alias}",
|
|
712
856
|
"cli.install.store.slot.team.switch-label": "switch to mounted: {alias}",
|
|
857
|
+
// flat-design store menu: "keep current" and "skip" are merged — when a team is
|
|
858
|
+
// bound the SKIP row renders as keep-label (no change), otherwise as plain skip.
|
|
859
|
+
"cli.install.store.slot.team.keep-label": "keep current: {alias} \xB7 no change",
|
|
860
|
+
"cli.install.store.slot.team.keep-hint": "{source}stay on this team store; leave the binding unchanged",
|
|
713
861
|
"cli.install.store.skip-label": "skip",
|
|
714
862
|
"cli.install.store.bind-mounted.skip-hint": "leave mounted stores unbound for now",
|
|
715
863
|
"cli.install.store.project-coordinate": "Project coordinate in store '{store}':",
|
|
@@ -782,7 +930,7 @@ var enMessages = {
|
|
|
782
930
|
"cli.install.diff.state.present-canonical": "canonical",
|
|
783
931
|
"cli.install.diff.state.drifted": "drifted",
|
|
784
932
|
"cli.install.diff.state.user-modified": "user-modified",
|
|
785
|
-
"cli.uninstall.description": "Uninstall Fabric from the target project
|
|
933
|
+
"cli.uninstall.description": "Uninstall Fabric from the target project (global stores under ~/.fabric/stores/ are never deleted)",
|
|
786
934
|
"cli.uninstall.args.target.description": "Target project path. Defaults to --target, then EXTERNAL_FIXTURE_PATH, then cwd.",
|
|
787
935
|
"cli.uninstall.args.debug.description": "Print target resolution details to stderr.",
|
|
788
936
|
"cli.uninstall.args.yes.description": "Accept the current uninstall plan and run without the TTY wizard.",
|
|
@@ -793,7 +941,14 @@ var enMessages = {
|
|
|
793
941
|
// C3: mirror install's phase banner ("Fabric install 将按 N 个阶段执行").
|
|
794
942
|
"cli.uninstall.plan.phase-banner": "Fabric uninstall runs in {total} phases",
|
|
795
943
|
"cli.uninstall.plan.target": "Target: {target}",
|
|
796
|
-
|
|
944
|
+
// flat-design-system Wave5 (TASK-004 G3): the plan preview speaks human action
|
|
945
|
+
// sentences, one per ENABLED stage, instead of the `key=yes/no` jargon line.
|
|
946
|
+
"cli.uninstall.plan.will-remove": "Will remove:",
|
|
947
|
+
"cli.uninstall.plan.will-keep": "Will keep:",
|
|
948
|
+
"cli.uninstall.plan.action.bootstrap": "client skills & hook scripts",
|
|
949
|
+
"cli.uninstall.plan.action.mcp": "MCP server registration",
|
|
950
|
+
"cli.uninstall.plan.action.scaffold": "project scaffold files",
|
|
951
|
+
"cli.uninstall.plan.action.store": "team store binding (this project)",
|
|
797
952
|
"cli.uninstall.plan.detected": "Detected clients: {clients}",
|
|
798
953
|
"cli.uninstall.plan.preserves": "Preserves:",
|
|
799
954
|
"cli.uninstall.plan.preserves.stores": "global knowledge stores, never deleted by project uninstall",
|
|
@@ -814,6 +969,9 @@ var enMessages = {
|
|
|
814
969
|
"cli.uninstall.stages.uptodate": "nothing to remove ({count} already absent)",
|
|
815
970
|
"cli.uninstall.stages.summary": "removed={removed} skipped={skipped} errors={errors}",
|
|
816
971
|
"cli.uninstall.stages.removed-count": "{count} removed",
|
|
972
|
+
// flat-design-system Wave5 (TASK-006 G3): human result words for the summary
|
|
973
|
+
// card detail rows, symmetric with install's `{count} installed` / `up to date`.
|
|
974
|
+
"cli.uninstall.stage.cleaned-count": "{count} cleaned",
|
|
817
975
|
"cli.uninstall.summary.title": "Uninstall summary",
|
|
818
976
|
"cli.uninstall.summary.body": "removed={removed} skipped={skipped} errors={errors}",
|
|
819
977
|
"cli.uninstall.healthcheck.title": "\u2713 Fabric already absent \xB7 nothing to remove",
|
|
@@ -1049,6 +1207,59 @@ var enMessages = {
|
|
|
1049
1207
|
"cli.whoami.stores-none": "stores: (none mounted)",
|
|
1050
1208
|
"cli.whoami.stores-label": "stores:",
|
|
1051
1209
|
"cli.shared.local-only": "(local-only)",
|
|
1210
|
+
// `fabric info` (flat-design) — identity / status / recall titles + field labels.
|
|
1211
|
+
"cli.info.field.uid": "uid",
|
|
1212
|
+
"cli.info.identity.title": "Fabric Identity",
|
|
1213
|
+
"cli.info.status.title": "Project Status",
|
|
1214
|
+
"cli.info.status.group.machine": "This machine",
|
|
1215
|
+
"cli.info.status.group.project": "Current project",
|
|
1216
|
+
"cli.info.status.field.project": "project",
|
|
1217
|
+
"cli.info.status.field.mounted": "mounted stores",
|
|
1218
|
+
"cli.info.status.field.bound": "bound stores",
|
|
1219
|
+
"cli.info.status.value.unset": "(unset)",
|
|
1220
|
+
"cli.info.status.value.not-project": "(not a Fabric project)",
|
|
1221
|
+
"cli.info.status.value.no-global": "(no global config)",
|
|
1222
|
+
"cli.info.recall.title": "Recall Engine",
|
|
1223
|
+
"cli.info.recall.summary.on": "semantic search on \u2014 details: fabric info --recall",
|
|
1224
|
+
"cli.info.recall.summary.off": "keyword mode \xB7 semantic search off \u2014 details: fabric info --recall",
|
|
1225
|
+
"cli.info.recall.mode.additive": "additive (keyword mode)",
|
|
1226
|
+
"cli.info.recall.mode.rrf": "rrf (keyword + semantic)",
|
|
1227
|
+
"cli.info.recall.reason.forced-additive": "fixed to keyword mode (additive) by config",
|
|
1228
|
+
"cli.info.recall.reason.auto-additive": "vector channel not ready \u2014 auto-falls back to keyword mode",
|
|
1229
|
+
"cli.info.recall.reason.auto-rrf": "vector channel ready \u2014 blending keyword + semantic (rrf)",
|
|
1230
|
+
"cli.info.recall.reason.rrf-ready": "fixed to rrf by config; vector channel ready",
|
|
1231
|
+
"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",
|
|
1232
|
+
"cli.info.recall.install-hint": "install it to enable semantic search: npm i -g fastembed",
|
|
1233
|
+
"cli.info.recall.field.fusion-config": "fusion (config)",
|
|
1234
|
+
"cli.info.recall.field.fusion-effective": "fusion (in use)",
|
|
1235
|
+
"cli.info.recall.field.embed-enabled": "embed enabled",
|
|
1236
|
+
"cli.info.recall.field.embed-model": "embed model",
|
|
1237
|
+
"cli.info.recall.field.fastembed": "fastembed pkg",
|
|
1238
|
+
"cli.info.recall.field.cache-dir": "model cache",
|
|
1239
|
+
"cli.info.recall.field.model-cached": "model cached",
|
|
1240
|
+
"cli.info.recall.field.vector": "vector channel",
|
|
1241
|
+
"cli.info.recall.fastembed.yes": "resolvable",
|
|
1242
|
+
"cli.info.recall.fastembed.no": "not installed (optional dep)",
|
|
1243
|
+
"cli.info.recall.cached.no": "not cached \u2014 downloads on first recall (or `fabric info --recall --warm`)",
|
|
1244
|
+
"cli.info.recall.vector.ready": "READY",
|
|
1245
|
+
"cli.info.recall.vector.not-ready": "not ready \u2014 recall falls back to keyword mode (BM25 / additive)",
|
|
1246
|
+
"cli.info.recall.warm.ok": "embedder warm: model '{model}' loaded (vector dim {dim}), cached at {dir}",
|
|
1247
|
+
"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.",
|
|
1248
|
+
"cli.store.list.description": "List mounted knowledge stores",
|
|
1249
|
+
// Footer note appended to `fabric store --help` — explains where the advanced
|
|
1250
|
+
// (meta.hidden) operations went so the list-only listing isn't a dead end.
|
|
1251
|
+
"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.",
|
|
1252
|
+
"cli.store.list.title": "Mounted stores",
|
|
1253
|
+
"cli.store.project.list.title": "Projects in store '{store}'",
|
|
1254
|
+
"cli.store.project.list.empty": "(no registered projects)",
|
|
1255
|
+
"cli.store.project.created": "registered project '{id}' in store '{store}'",
|
|
1256
|
+
"cli.store.migrate.title": "Knowledge scope migration",
|
|
1257
|
+
"cli.store.backfill.noop": "scope backfill: nothing to do ({count} already consistent)",
|
|
1258
|
+
"cli.store.backfill.summary": "scope backfill: {changed} updated, {unchanged} unchanged",
|
|
1259
|
+
"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>`.",
|
|
1260
|
+
"cli.store.rescope.noop": "re-scope: nothing to do ({count} already at '{scope}')",
|
|
1261
|
+
"cli.store.rescope.summary": "re-scope \u2192 {scope}: {changed} updated, {unchanged} unchanged",
|
|
1262
|
+
"cli.store.rescope.refused": "{count} entries refused",
|
|
1052
1263
|
"cli.store.none-mounted": "(no stores mounted)",
|
|
1053
1264
|
"cli.store.mounted": "mounted '{alias}' ({count} store(s) total)",
|
|
1054
1265
|
"cli.store.created": "created store '{alias}' ({uuid}) at {dir}",
|
|
@@ -1061,12 +1272,30 @@ var enMessages = {
|
|
|
1061
1272
|
"cli.store.routed": "write route: scope '{scope}' \u2192 store '{alias}'",
|
|
1062
1273
|
"cli.sync.deferred": "{count} store(s) offline \u2014 push deferred; re-run `fabric sync` when online",
|
|
1063
1274
|
"cli.sync.paused": "sync paused on a conflict \u2014 resolve it, then run `fabric sync --continue` (or `--abort`)",
|
|
1275
|
+
// flat-design (spec §0.4): `fabric sync` command-level title + per-store rows +
|
|
1276
|
+
// aggregate summary. State labels are shared between the per-store rows and the
|
|
1277
|
+
// summary count cells.
|
|
1278
|
+
"cli.sync.args.continue.description": "Resume after resolving a rebase conflict",
|
|
1279
|
+
"cli.sync.args.abort.description": "Abort the conflicted store's rebase",
|
|
1280
|
+
"cli.sync.title": "Sync stores",
|
|
1281
|
+
"cli.sync.summary.title": "Sync summary",
|
|
1282
|
+
"cli.sync.none": "no remote-backed stores to sync",
|
|
1283
|
+
"cli.sync.all-synced": "all stores synced",
|
|
1284
|
+
"cli.sync.state.synced": "synced",
|
|
1285
|
+
"cli.sync.state.offline": "offline",
|
|
1286
|
+
"cli.sync.state.conflict": "conflict",
|
|
1287
|
+
"cli.sync.state.aborted": "aborted",
|
|
1288
|
+
"cli.sync.state.pending": "pending",
|
|
1064
1289
|
"cli.metrics.invalid-since": '--since: invalid duration "{raw}" (expected e.g. 24h, 7d, 30m)',
|
|
1065
1290
|
"cli.metrics.window": "Fabric metrics \u2014 window: {window}",
|
|
1066
1291
|
"cli.metrics.window-all-time": "all-time",
|
|
1067
1292
|
"cli.metrics.rows-range": " rows: {count} ({start} \u2192 {end})",
|
|
1068
1293
|
"cli.metrics.rows": " rows: {count}",
|
|
1069
1294
|
"cli.metrics.no-activity": " (no counter activity in window \u2014 server may be idle or just started)",
|
|
1295
|
+
"cli.metrics.col.counter": "counter",
|
|
1296
|
+
"cli.metrics.col.total": "total",
|
|
1297
|
+
"cli.metrics.col.entry": "entry",
|
|
1298
|
+
"cli.metrics.section.perEntry": "Top per-entry consumed (knowledge_consumed:<id>)",
|
|
1070
1299
|
// W3-09 (ISS-035): forensic project scan progress (stderr, TTY-only).
|
|
1071
1300
|
"cli.install.scanning": "scanning project for client/framework signals\u2026",
|
|
1072
1301
|
"cli.install.scan-complete": " project scan complete",
|
|
@@ -1086,7 +1315,7 @@ var enMessages = {
|
|
|
1086
1315
|
|
|
1087
1316
|
// src/i18n/locales/zh-CN.ts
|
|
1088
1317
|
var zhCNMessages = {
|
|
1089
|
-
"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\
|
|
1318
|
+
"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",
|
|
1090
1319
|
"cli.shared.created": "\u5DF2\u521B\u5EFA",
|
|
1091
1320
|
"cli.shared.skipped": "\u5DF2\u8DF3\u8FC7",
|
|
1092
1321
|
"cli.shared.next": "\u4E0B\u4E00\u6B65",
|
|
@@ -1100,22 +1329,73 @@ var zhCNMessages = {
|
|
|
1100
1329
|
"cli.shared.none": "\u65E0",
|
|
1101
1330
|
"cli.shared.loading": "\u52A0\u8F7D\u4E2D",
|
|
1102
1331
|
"cli.shared.refresh": "\u5237\u65B0",
|
|
1332
|
+
// flat-design-system Wave4 (TASK-004): clack 控件(select/multiselect/confirm/text)
|
|
1333
|
+
// 落定后打印的平铺无沟槽 ✓/x 回执行。控件保持原生(C-006),回执是独立的一行。
|
|
1334
|
+
"cli.prompt.receipt.selected": "\u5DF2\u9009",
|
|
1335
|
+
"cli.prompt.receipt.set": "\u5DF2\u8BBE\u7F6E",
|
|
1336
|
+
"cli.prompt.receipt.cancelled": "\u5DF2\u53D6\u6D88",
|
|
1103
1337
|
"cli.shared.target-invalid": "\u76EE\u6807\u5FC5\u987B\u662F\u5DF2\u5B58\u5728\u7684\u76EE\u5F55\uFF1A{target}",
|
|
1104
1338
|
"cli.shared.target-invalid.action-hint": "\u8BF7\u9009\u62E9\u4E00\u4E2A\u5DF2\u5B58\u5728\u7684\u9879\u76EE\u76EE\u5F55\uFF0C\u6216\u5148\u521B\u5EFA\u8BE5\u76EE\u5F55\u540E\u518D\u91CD\u65B0\u8FD0\u884C\u547D\u4EE4\u3002",
|
|
1105
1339
|
"cli.shared.template-not-found": "\u672A\u627E\u5230\u6A21\u677F\uFF1A{path}",
|
|
1106
1340
|
"cli.shared.invalid-host-empty": "\u65E0\u6548 host\uFF1A<empty>",
|
|
1107
1341
|
"cli.shared.invalid-port": "\u65E0\u6548\u7AEF\u53E3\uFF1A{value}",
|
|
1108
1342
|
"cli.shared.error": "\u9519\u8BEF",
|
|
1109
|
-
//
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
"cli.
|
|
1113
|
-
"cli.
|
|
1114
|
-
"cli.
|
|
1115
|
-
"cli.
|
|
1116
|
-
|
|
1117
|
-
"cli.
|
|
1118
|
-
"cli.
|
|
1343
|
+
// 顶层命令摘要(每条一句精简单行 —— citty 在根 `fabric --help` 的 COMMANDS
|
|
1344
|
+
// 表与各命令自身 `--help` 头部都用它,必须保持单行;退掉自建分组帮助、改走
|
|
1345
|
+
// citty 渲染器后,原先的多行示例块已移除)
|
|
1346
|
+
"cli.store.description": "\u7BA1\u7406\u5DF2\u6302\u8F7D\u7684\u77E5\u8BC6 store(\u5EFA\u5E93\u8D70 fabric install)",
|
|
1347
|
+
"cli.sync.description": "\u540C\u6B65\u5DF2\u6302\u8F7D\u7684\u77E5\u8BC6 store(pull --rebase + push)",
|
|
1348
|
+
"cli.info.description": "\u663E\u793A Fabric \u8EAB\u4EFD\u3001\u9879\u76EE\u72B6\u6001\u4E0E\u53EC\u56DE\u5065\u5EB7",
|
|
1349
|
+
"cli.inspect.description": "\u663E\u793A Fabric \u5728 SessionStart \u6CE8\u5165\u4E86\u4EC0\u4E48",
|
|
1350
|
+
// `fabric inspect` 参数说明 + --explain 溯源覆盖层 + 错误。
|
|
1351
|
+
"cli.inspect.arg.render": "\u663E\u793A\u54EA\u4E2A sink:'human'(systemMessage)\u6216 'ai'(additionalContext)\u3002\u9ED8\u8BA4\u4E24\u4E2A\u90FD\u663E\u793A\u3002",
|
|
1352
|
+
"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",
|
|
1353
|
+
"cli.inspect.arg.target": "\u8986\u76D6\u9879\u76EE\u6839\u76EE\u5F55(\u9ED8\u8BA4\u53D6 cwd / dev \u6A21\u5F0F\u89E3\u6790)\u3002",
|
|
1354
|
+
"cli.inspect.explain.title": "explain \xB7 \u6765\u6E90\u6EAF\u6E90(\u975E\u6CE8\u5165\u5185\u5BB9)",
|
|
1355
|
+
"cli.inspect.explain.always": "\u5E38\u9A7B\u751F\u6548 \xB7 \u6B63\u6587\u5DF2\u6CE8\u5165",
|
|
1356
|
+
"cli.inspect.explain.reference": "\u53C2\u8003\u5019\u9009 \xB7 \u6309\u9700\u9605\u8BFB",
|
|
1357
|
+
"cli.inspect.explain.census": "\u5168\u96C6\u666E\u67E5",
|
|
1358
|
+
"cli.inspect.explain.census-total": "\u603B\u8BA1 {total}",
|
|
1359
|
+
"cli.inspect.error": "inspect \u5931\u8D25:{message}",
|
|
1360
|
+
"cli.audit.description": "\u77E5\u8BC6\u4E0E\u9065\u6D4B\u5BA1\u8BA1 (cite/conflicts/history/metrics)",
|
|
1361
|
+
// `fabric audit cite` — recall 覆盖率为 0 的自诊断提示。
|
|
1362
|
+
"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",
|
|
1363
|
+
"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",
|
|
1364
|
+
// `fabric audit --help` — 过滤式帮助(i18n 子命令清单)。
|
|
1365
|
+
"cli.audit.help.tagline": "\u77E5\u8BC6\u4E0E\u9065\u6D4B\u5BA1\u8BA1\u9762(\u53EA\u8BFB)",
|
|
1366
|
+
"cli.audit.help.sub.cite": "Cite \u653F\u7B56\u9075\u5FAA\u5EA6\u62A5\u544A",
|
|
1367
|
+
"cli.audit.help.sub.conflicts": "\u77E5\u8BC6\u51B2\u7A81\u4F53\u68C0",
|
|
1368
|
+
"cli.audit.help.sub.history": "\u7EF4\u62A4\u5386\u53F2\u6C47\u603B(archive | fix | all)",
|
|
1369
|
+
"cli.audit.help.sub.descriptions": "\u56DE\u586B\u63CF\u8FF0\u7EA7 frontmatter \u5B57\u6BB5",
|
|
1370
|
+
"cli.audit.help.sub.retired": "\u626B\u63CF agent \u9762\u4E2D\u7684\u5E9F\u5F03\u5DE5\u5177/\u5B57\u6BB5\u5F15\u7528",
|
|
1371
|
+
"cli.audit.help.sub.why": "\u8BCA\u65AD\u67D0\u6761\u77E5\u8BC6\u4E3A\u4F55\u6CA1\u6D6E\u73B0",
|
|
1372
|
+
"cli.audit.help.example.cite": "\u8FD1 7 \u5929\u7684 cite \u8986\u76D6\u7387",
|
|
1373
|
+
"cli.audit.help.example.conflicts": "\u626B\u63CF\u77DB\u76FE / \u91CD\u590D\u6761\u76EE",
|
|
1374
|
+
"cli.audit.help.footer": "\u8FD0\u884C `fabric audit <subcommand> --help` \u67E5\u770B\u5404\u5B50\u547D\u4EE4\u53C2\u6570\u3002",
|
|
1375
|
+
// `fabric audit retired` — 平铺渲染文案。
|
|
1376
|
+
"cli.audit.retired.skipped": "\u5DF2\u8DF3\u8FC7 retired \u5F15\u7528\u626B\u63CF \u2014\u2014 \u672A\u53D1\u73B0 agent \u6D88\u8D39\u9762\u3002",
|
|
1377
|
+
"cli.audit.retired.clean": "\u65E0 retired \u5F15\u7528 \u2014\u2014 \u5DF2\u626B\u63CF {count} \u4E2A agent \u9762\u3002",
|
|
1378
|
+
"cli.audit.retired.found": "\u5728 {files} \u4E2A\u6587\u4EF6\u4E2D\u53D1\u73B0 {hits} \u5904 retired \u5F15\u7528",
|
|
1379
|
+
"cli.audit.retired.removed": "\uFF08\u5DF2\u79FB\u9664\uFF09",
|
|
1380
|
+
// `fabric audit why-not-surfaced <id>` — 三轴诊断(store / scope / timing)。
|
|
1381
|
+
"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",
|
|
1382
|
+
"cli.audit.why.store-unbound": "'{id}' \u4F4D\u4E8E store '{store}',\u4F46\u8BE5 store \u672A\u7ED1\u5B9A\u5230\u672C\u9879\u76EE\u3002",
|
|
1383
|
+
"cli.audit.why.store-unbound.hint": "\u7ED1\u5B9A\u5B83:fabric store bind {store}",
|
|
1384
|
+
"cli.audit.why.project-mismatch": "'{id}' \u7684 scope \u662F '{scope}',\u4F46\u672C\u4ED3\u5E93\u7ED1\u5B9A\u7684\u662F 'project:{project}'\u3002",
|
|
1385
|
+
"cli.audit.why.project-mismatch.hint": "\u5B83\u53EA\u5728\u7ED1\u5B9A\u4E86 '{scope}' \u7684\u4ED3\u5E93\u4E2D\u6D6E\u73B0(semantic_scope \u8F74)\u3002",
|
|
1386
|
+
"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",
|
|
1387
|
+
"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",
|
|
1388
|
+
"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",
|
|
1389
|
+
"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",
|
|
1390
|
+
// `fabric info --help` —— flag 与 scope 子命令描述。
|
|
1391
|
+
"cli.info.args.global.description": "\u663E\u793A\u5168\u5C40\u8EAB\u4EFD(whoami)\u800C\u975E\u9879\u76EE\u72B6\u6001",
|
|
1392
|
+
"cli.info.args.recall.description": "\u663E\u793A\u53EC\u56DE\u5F15\u64CE\u8BE6\u60C5(\u878D\u5408\u7B56\u7565 + \u5411\u91CF\u5D4C\u5165\u72B6\u6001)",
|
|
1393
|
+
"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)",
|
|
1394
|
+
"cli.info.args.json.description": "\u8F93\u51FA\u673A\u5668\u53EF\u8BFB\u7684 JSON \u800C\u975E\u6587\u672C",
|
|
1395
|
+
"cli.info.scope.description": "(\u8FDB\u9636/skill)\u628A\u4E00\u4E2A scope \u5750\u6807\u89E3\u6790\u6210 read-set + \u5199\u5165\u76EE\u6807\u7684 JSON",
|
|
1396
|
+
"cli.info.scope.args.coord.description": "Scope \u5750\u6807(\u5982 team\u3001project:x\u3001personal)",
|
|
1397
|
+
"cli.info.scope.args.json.description": "\u8F93\u51FA\u673A\u5668\u53EF\u8BFB\u7684 JSON(scope \u59CB\u7EC8\u8F93\u51FA JSON)",
|
|
1398
|
+
"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",
|
|
1119
1399
|
"cli.config.args.target.description": "\u76EE\u6807\u9879\u76EE\u76EE\u5F55\uFF08\u9ED8\u8BA4\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55\uFF09\u3002",
|
|
1120
1400
|
"cli.config.clients.claude": "Claude Code CLI",
|
|
1121
1401
|
"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",
|
|
@@ -1131,6 +1411,9 @@ var zhCNMessages = {
|
|
|
1131
1411
|
// 由 packages/cli/src/commands/config.ts(菜单循环 + 字段编辑)以及
|
|
1132
1412
|
// getPanelFields() 的 label_i18n_key 引用消费。
|
|
1133
1413
|
"cli.config.intro": "Fabric \u914D\u7F6E",
|
|
1414
|
+
// flat-design-system Wave5 (TASK-005): clack 编辑菜单前那块平铺键值面板的
|
|
1415
|
+
// B-横线标题。
|
|
1416
|
+
"cli.config.panel.title": "\u5F53\u524D\u914D\u7F6E",
|
|
1134
1417
|
"cli.config.outro": "\u914D\u7F6E\u5DF2\u4FDD\u5B58\u3002",
|
|
1135
1418
|
"cli.config.outro-no-changes": "\u672A\u505A\u4EFB\u4F55\u4FEE\u6539\u3002",
|
|
1136
1419
|
"cli.config.cancel": "\u5DF2\u53D6\u6D88\u3002",
|
|
@@ -1141,8 +1424,17 @@ var zhCNMessages = {
|
|
|
1141
1424
|
"cli.config.value.default-marker": "\uFF08\u9ED8\u8BA4\uFF09",
|
|
1142
1425
|
"cli.config.prompt.select": "\u4E3A {key} \u9009\u62E9\u65B0\u503C\uFF08\u5F53\u524D\uFF1A{current}\uFF09\uFF1A",
|
|
1143
1426
|
"cli.config.prompt.text": "\u4E3A {key} \u8F93\u5165\u65B0\u503C\uFF08\u5F53\u524D\uFF1A{current}\uFF09\uFF1A",
|
|
1144
|
-
"cli.config.write.success": "
|
|
1427
|
+
"cli.config.write.success": "{key} = {value}",
|
|
1428
|
+
"cli.config.panel.edited": "\u672C\u6B21\u5DF2\u6539\uFF08{count} \u9879\uFF09\uFF1A{keys}",
|
|
1145
1429
|
"cli.config.write.failure": "\u5199\u5165 fabric-config.json \u5931\u8D25\uFF1A{message}",
|
|
1430
|
+
"cli.config.slot.errors.missing": "\u7F3A\u5C11\u5FC5\u586B\u7684 <slot> \u53C2\u6570\u3002\u53EF\u7528\u69FD\u4F4D\uFF1A{slots}\u3002",
|
|
1431
|
+
"cli.config.slot.errors.unknown": '\u672A\u77E5\u69FD\u4F4D "{slot}"\u3002\u53EF\u7528\u69FD\u4F4D\uFF1A{slots}\u3002',
|
|
1432
|
+
"cli.config.slot.dismiss.already": '\u69FD\u4F4D "{slot}" \u5DF2\u5FFD\u7565\uFF0C\u65E0\u9700\u64CD\u4F5C\u3002',
|
|
1433
|
+
"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',
|
|
1434
|
+
"cli.config.slot.dismiss.failed": "dismiss-slot \u5931\u8D25\uFF1A{message}",
|
|
1435
|
+
"cli.config.slot.reset.not-opted": '\u69FD\u4F4D "{slot}" \u672A\u88AB\u5FFD\u7565\uFF0C\u65E0\u9700\u64CD\u4F5C\u3002',
|
|
1436
|
+
"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',
|
|
1437
|
+
"cli.config.slot.reset.failed": "onboard-reset \u5931\u8D25\uFF1A{message}",
|
|
1146
1438
|
"cli.config.errors.uninit-workspace.message": "\u5DE5\u4F5C\u533A\u5C1A\u672A\u521D\u59CB\u5316\u3002\u8BF7\u5148\u8FD0\u884C `fabric install`\u3002",
|
|
1147
1439
|
"cli.config.errors.invalid-int": "\u5FC5\u987B\u662F\u6B63\u6574\u6570\u3002",
|
|
1148
1440
|
"cli.config.errors.unknown-field": "\u672A\u77E5\u5B57\u6BB5\u9009\u62E9 \u2014 \u5DF2\u8DF3\u8FC7\u3002",
|
|
@@ -1173,12 +1465,52 @@ var zhCNMessages = {
|
|
|
1173
1465
|
"cli.config.fields.nudge_mode.label": "\u63D0\u793A\u6863\u4F4D",
|
|
1174
1466
|
"cli.config.fields.nudge_mode.description": "\u4EBA\u7C7B\u53EF\u89C1 nudge \u7684\u603B\u6863\u4F4D\uFF08silent \u9759\u9ED8 / minimal \u7CBE\u7B80 / normal \u6B63\u5E38 / verbose \u8BE6\u5C3D\uFF09\uFF1B\u4EC5\u63A7\u4EBA\u7C7B\u63D0\u793A\u901A\u9053\uFF0C\u4E0D\u5F71\u54CD\u6CE8\u5165\u7ED9 AI \u7684\u77E5\u8BC6\u3002",
|
|
1175
1467
|
"cli.config.fields.embed_enabled.label": "\u5411\u91CF\u8BED\u4E49\u68C0\u7D22",
|
|
1176
|
-
"cli.config.fields.embed_enabled.description": "\u662F\u5426\u542F\u7528\u5411\u91CF\u8BED\u4E49\u68C0\u7D22\uFF08true / false\uFF09\u3002\u6CE8\u610F\
|
|
1177
|
-
"cli.
|
|
1468
|
+
"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",
|
|
1469
|
+
"cli.config.fields.fusion.label": "\u53EC\u56DE\u878D\u5408\u7B56\u7565",
|
|
1470
|
+
"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",
|
|
1471
|
+
"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",
|
|
1178
1472
|
"doctor.section.fixable": "\u53EF\u4FEE\u590D\u9519\u8BEF\uFF1A",
|
|
1179
1473
|
"doctor.section.manual": "\u9700\u624B\u52A8\u4FEE\u590D\uFF1A",
|
|
1180
1474
|
"doctor.section.warnings": "\u8B66\u544A\uFF1A",
|
|
1181
1475
|
"doctor.section.fix-knowledge-mutations": "Fix-knowledge \u53D8\u66F4\uFF1A",
|
|
1476
|
+
// flat-design follow-up: doctor 剩余的 UI-shell 文案(TL;DR 头、--fix 变更计划、
|
|
1477
|
+
// 过滤版 --help)从硬编码英文搬进 i18n,让整个 `fabric doctor` 输出跟随机器语言。
|
|
1478
|
+
// USAGE/OPTIONS/EXAMPLES 标签保持英文,与其它命令 --help 的 citty renderUsage 对齐。
|
|
1479
|
+
"doctor.digest.todo": "\u5F85\u5904\u7406 ({count})",
|
|
1480
|
+
"doctor.digest.clean": "\u5168\u90E8 {count} \u9879\u68C0\u67E5\u901A\u8FC7 \u2014\u2014 \u65E0\u9700\u5904\u7406",
|
|
1481
|
+
"doctor.digest.summary": "{todo} \u9879\u5F85\u5904\u7406 \xB7 {ok} \u9879\u901A\u8FC7 \xB7 \u8D21\u732E\u8005\u8BCA\u65AD\u89C1 --verbose",
|
|
1482
|
+
"doctor.digest.more-verbose": "\u53E6\u6709 {count} \u9879\u8D21\u732E\u8005\u8BCA\u65AD \u2014\u2014 \u89C1 --verbose",
|
|
1483
|
+
// store 诊断(多 store 健康,即 `● 存储健康` 分组)—— 与 doctor.check.* 对齐 i18n;
|
|
1484
|
+
// 文案通过插值带上 store alias / 计数。
|
|
1485
|
+
"doctor.store.no-global-config": "\u65E0\u5168\u5C40 Fabric \u914D\u7F6E \u2014\u2014 \u8FD0\u884C `fabric install --global <url>`",
|
|
1486
|
+
"doctor.store.missing-required": "\u5FC5\u9700 store '{id}' \u672A\u6302\u8F7D;\u8FD0\u884C `fabric store mount`",
|
|
1487
|
+
"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)",
|
|
1488
|
+
"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/",
|
|
1489
|
+
"doctor.store.local-only": "store '{alias}' \u4EC5\u672C\u5730;\u52A0\u4E00\u4E2A git remote \u4EE5\u5907\u4EFD",
|
|
1490
|
+
"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)",
|
|
1491
|
+
"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`",
|
|
1492
|
+
"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)",
|
|
1493
|
+
"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",
|
|
1494
|
+
"doctor.store.related-hub": "related \u56FE\u8C31\u67A2\u7EBD(\u524D {shown} / \u5171 {total} \u4E2A\u88AB\u5F15\u7528):{top}",
|
|
1495
|
+
"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`",
|
|
1496
|
+
"doctor.store.consumption-heatmap": "\u6D88\u8D39\u70ED\u533A(\u8FD1 {days}d,{consumed}/{total} \u6761\u88AB\u8BFB,\u8DE8 {windows} \u4E2A\u7A97\u53E3):{top}",
|
|
1497
|
+
"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)",
|
|
1498
|
+
"doctor.store.overflow-more": ", \u2026(+{count} \u6761)",
|
|
1499
|
+
"doctor.fix-plan.header": "fix-knowledge \u53D8\u66F4\u8BA1\u5212(\u5171 {count} \u9879)",
|
|
1500
|
+
"doctor.fix-plan.preview": "\u9884\u89C8:",
|
|
1501
|
+
"doctor.fix-plan.more": "... \u8FD8\u6709 {count} \u9879",
|
|
1502
|
+
"doctor.help.tagline": "\u8BCA\u65AD\u5E76\u4FEE\u590D Fabric \u5DE5\u4F5C\u533A\u95EE\u9898",
|
|
1503
|
+
"doctor.help.flag.target": "\u8986\u76D6\u9879\u76EE\u6839\u76EE\u5F55(\u9ED8\u8BA4\u5F53\u524D\u76EE\u5F55)",
|
|
1504
|
+
"doctor.help.flag.fix": "\u81EA\u52A8\u4FEE\u590D(\u6D3E\u751F\u72B6\u6001 + \u77E5\u8BC6 frontmatter/git mv)",
|
|
1505
|
+
"doctor.help.flag.json": "\u4EE5 JSON \u8F93\u51FA\u4F9B\u7A0B\u5E8F\u6D88\u8D39",
|
|
1506
|
+
"doctor.help.flag.verbose": "\u663E\u793A\u9762\u5411\u7EF4\u62A4\u8005\u7684\u64CD\u4F5C\u63D0\u793A",
|
|
1507
|
+
"doctor.help.example.run": "\u8FD0\u884C\u8BCA\u65AD",
|
|
1508
|
+
"doctor.help.example.fix": "\u4FEE\u590D\u6D3E\u751F\u72B6\u6001 + \u77E5\u8BC6\u95EE\u9898",
|
|
1509
|
+
"doctor.help.footer": "\u8FD0\u884C `fabric doctor` \u67E5\u770B\u5B8C\u6574\u8BCA\u65AD\u62A5\u544A\u3002\u5BA1\u8BA1 \u2192 `fabric audit`\u3002",
|
|
1510
|
+
// flat-design-system Wave5 (TASK-005): 重排后的 doctor C-圆点分组标题
|
|
1511
|
+
// (`● 存储健康` / `● 检查项`),取代原硬编码 sectionBar 字面量。
|
|
1512
|
+
"doctor.group.store-health": "\u5B58\u50A8\u5065\u5EB7",
|
|
1513
|
+
"doctor.group.checks": "\u68C0\u67E5\u9879",
|
|
1182
1514
|
// v2.0.0-rc.29 REVIEW (codex LOW-2): F2 的 payload 阈值之前只出现在 JSON envelope,
|
|
1183
1515
|
// 人类输出看不到,导致改了 mcpPayloadLimits 之后没法用 `fabric doctor` 快速确认是否生效。
|
|
1184
1516
|
"doctor.section.payload-limits": "MCP payload \u9608\u503C\uFF1A",
|
|
@@ -1187,25 +1519,25 @@ var zhCNMessages = {
|
|
|
1187
1519
|
"doctor.section.cite-coverage": "Cite \u8986\u76D6\u7387:",
|
|
1188
1520
|
"doctor.cite.header": "\u8D77\u59CB {since} (\u653F\u7B56\u6FC0\u6D3B\u65F6\u95F4 {marker})",
|
|
1189
1521
|
"doctor.cite.warning.justActivated": "\u672C\u6B21\u9996\u6B21\u6FC0\u6D3B Cite policy,\u6682\u65E0\u5386\u53F2\u6570\u636E\u3002",
|
|
1190
|
-
"doctor.cite.metric.editsTouched": "
|
|
1191
|
-
"doctor.cite.metric.qualifyingCites": "\u5408\u683C cite",
|
|
1192
|
-
"doctor.cite.metric.recalledUnverified": "applied \u4F46\u672A\u9A8C\u8BC1",
|
|
1522
|
+
"doctor.cite.metric.editsTouched": "\u7F16\u8F91\u89E6\u8FBE\u6570",
|
|
1523
|
+
"doctor.cite.metric.qualifyingCites": "\u5408\u683C cite \u6570",
|
|
1524
|
+
"doctor.cite.metric.recalledUnverified": "\u5DF2\u6807\u6CE8 applied \u4F46\u672A\u9A8C\u8BC1",
|
|
1193
1525
|
"doctor.cite.metric.expectedButMissed": "\u5E94\u67E5\u6CA1\u67E5",
|
|
1194
1526
|
"doctor.cite.metric.totalTurns": "\u603B\u56DE\u5408\u6570",
|
|
1195
|
-
"doctor.cite.metric.complianceRate": "cite \u5408\u89C4\u7387
|
|
1196
|
-
"doctor.cite.metric.complianceNA": "N/A
|
|
1197
|
-
"doctor.cite.metric.uncorrelatableEdits": "\u65E0\u6CD5\u5173\u8054\u7684
|
|
1198
|
-
"doctor.cite.metric.recallCoverage": "recall \u8986\u76D6\u7387
|
|
1199
|
-
"doctor.cite.metric.recallCoverageNA": "N/A
|
|
1527
|
+
"doctor.cite.metric.complianceRate": "cite \u5408\u89C4\u7387\uFF08\u542B KB:none[reason]\uFF09",
|
|
1528
|
+
"doctor.cite.metric.complianceNA": "N/A\uFF08\u65E0\u5E94 cite \u56DE\u5408\uFF09",
|
|
1529
|
+
"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",
|
|
1530
|
+
"doctor.cite.metric.recallCoverage": "recall \u8986\u76D6\u7387\uFF08\u6539\u524D\u6709\u76F8\u5173 fab_recall \u7684\u7F16\u8F91\u5360\u6BD4\uFF09",
|
|
1531
|
+
"doctor.cite.metric.recallCoverageNA": "N/A\uFF08\u65E0\u53EF\u5173\u8054\u7F16\u8F91\uFF09",
|
|
1200
1532
|
// v2.2.0-rc.1 W1-T3 (cite 诚实拆分): 弱辅助信号, 与真遵循率分列展示。括注必须
|
|
1201
1533
|
// 明确「不计入真遵循度」(诚实铁律)。
|
|
1202
|
-
"doctor.cite.metric.exposedAndMutated": "\u66DD\u5149\u4E14\u8DEF\u5F84\u53D8\u66F4
|
|
1534
|
+
"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",
|
|
1203
1535
|
// lifecycle-refactor W2-T4 (§5 row7/row2): PostToolUse mutation funnel +
|
|
1204
1536
|
// SessionEnd 边界。均为可观测性 marker, 不计入真遵循度。
|
|
1205
|
-
"doctor.cite.metric.mutationsObserved": "mutation \u89C2\u6D4B\u6570
|
|
1206
|
-
"doctor.cite.metric.mutationPool": "mutation \u5F52\u56E0\u6C60
|
|
1207
|
-
"doctor.cite.metric.sessionsClosed": "\u5DF2\u95ED\u5408
|
|
1208
|
-
"doctor.cite.metric.byStore": "\u6309 store \u62C6\u5206\u7684\u5408\u89C4 cite \u6570
|
|
1537
|
+
"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",
|
|
1538
|
+
"doctor.cite.metric.mutationPool": "mutation \u5F52\u56E0\u6C60\uFF08\u7ECF source_event_id \u7684\u4F4E\u7F6E\u4FE1\u5F52\u56E0\uFF09",
|
|
1539
|
+
"doctor.cite.metric.sessionsClosed": "\u5DF2\u95ED\u5408\u4F1A\u8BDD\u6570\uFF08SessionEnd marker \u2014\u2014 funnel \u8FB9\u754C\uFF09",
|
|
1540
|
+
"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",
|
|
1209
1541
|
"doctor.cite.section.perClient": "\u6309\u5BA2\u6237\u7AEF\u62C6\u5206",
|
|
1210
1542
|
"doctor.cite.section.dismissedReasons": "\u9A73\u56DE\u539F\u56E0\u5206\u5E03",
|
|
1211
1543
|
"doctor.cite.dismissed.scope-mismatch": "\u8303\u56F4\u4E0D\u7B26",
|
|
@@ -1291,30 +1623,30 @@ var zhCNMessages = {
|
|
|
1291
1623
|
"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",
|
|
1292
1624
|
"doctor.enrich.allComplete": "\u6240\u6709\u6B63\u5F0F\u77E5\u8BC6\u6761\u76EE\u5747\u5DF2\u5305\u542B intent_clues / tech_stack / impact / must_read_if\u3002",
|
|
1293
1625
|
// rc.26 TASK-02a: doctor foundation-batch check messages.
|
|
1294
|
-
"doctor.check.bootstrap_snapshot_drift.name": "Bootstrap
|
|
1626
|
+
"doctor.check.bootstrap_snapshot_drift.name": "Bootstrap \u5FEB\u7167\u6F02\u79FB",
|
|
1295
1627
|
"doctor.check.bootstrap_snapshot_drift.message.drift": ".fabric/AGENTS.md \u5185\u5BB9\u4E0E BOOTSTRAP_CANONICAL \u9010\u5B57\u8282\u4E0D\u4E00\u81F4\u3002",
|
|
1296
1628
|
"doctor.check.bootstrap_snapshot_drift.remediation.drift": "\u8FD0\u884C `fabric doctor --fix` \u6062\u590D canonical bootstrap snapshot",
|
|
1297
1629
|
"doctor.check.bootstrap_snapshot_drift.ok.ok": ".fabric/AGENTS.md \u4E0E BOOTSTRAP_CANONICAL \u9010\u5B57\u8282\u4E00\u81F4\u3002",
|
|
1298
1630
|
"doctor.check.bootstrap_snapshot_drift.ok.missing_delegated": ".fabric/AGENTS.md \u4E0D\u5B58\u5728\uFF0C\u5DF2\u4EA4\u7531 bootstrap_anchor_missing \u62A5\u544A\u3002",
|
|
1299
|
-
"doctor.check.managed_block_drift.name": "Managed block
|
|
1631
|
+
"doctor.check.managed_block_drift.name": "Managed block \u6F02\u79FB",
|
|
1300
1632
|
"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",
|
|
1301
1633
|
"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",
|
|
1302
1634
|
"doctor.check.managed_block_drift.remediation": "\u8FD0\u884C `fabric doctor --fix` \u4ECE canonical \u6062\u590D three-end managed blocks",
|
|
1303
1635
|
"doctor.check.managed_block_drift.ok.ok": "Three-end managed blocks \u4E0E expectedBody \u9010\u5B57\u8282\u4E00\u81F4\u3002",
|
|
1304
1636
|
"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",
|
|
1305
|
-
"doctor.check.bootstrap_anchor.name": "Bootstrap
|
|
1637
|
+
"doctor.check.bootstrap_anchor.name": "Bootstrap \u951A\u70B9",
|
|
1306
1638
|
"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",
|
|
1307
1639
|
"doctor.check.bootstrap_anchor.remediation.missing": "\u8FD0\u884C `fabric install` \u5728 repo root \u751F\u6210 AGENTS.md / CLAUDE.md bootstrap anchor\u3002",
|
|
1308
1640
|
"doctor.check.bootstrap_anchor.ok": "repo root \u4E0B\u5DF2\u5B58\u5728 Bootstrap anchor\uFF1A{present}\u3002",
|
|
1309
1641
|
// v2.0.0-rc.33 W3-2 (T6 #5): 文案显式引用 message 内已列出的 detail (file 名), 让用户直接 rm 而非自己去 grep 找。baseline pipeline 已 rc.23 移除, 没有 auto-fix。
|
|
1310
|
-
"doctor.check.forensic.name": "
|
|
1642
|
+
"doctor.check.forensic.name": "\u626B\u63CF\u8BC1\u636E",
|
|
1311
1643
|
"doctor.check.forensic.message.missing.singular": "{error} \u5B9E\u65F6\u626B\u63CF\u68C0\u6D4B\u5230 {frameworkKind}\uFF0C\u5171\u6709 {count} \u4E2A\u5165\u53E3\u70B9\u3002",
|
|
1312
1644
|
"doctor.check.forensic.message.missing.plural": "{error} \u5B9E\u65F6\u626B\u63CF\u68C0\u6D4B\u5230 {frameworkKind}\uFF0C\u5171\u6709 {count} \u4E2A\u5165\u53E3\u70B9\u3002",
|
|
1313
1645
|
"doctor.check.forensic.message.missing-default": ".fabric/forensic.json \u7F3A\u5931\u3002",
|
|
1314
1646
|
"doctor.check.forensic.message.invalid-default": ".fabric/forensic.json \u65E0\u6548\u3002",
|
|
1315
1647
|
"doctor.check.forensic.remediation": "\u8FD0\u884C `fabric install` \u91CD\u65B0\u751F\u6210 .fabric/forensic.json\u3002",
|
|
1316
1648
|
"doctor.check.forensic.ok": ".fabric/forensic.json \u5BF9 {frameworkKind} \u6709\u6548\u3002",
|
|
1317
|
-
"doctor.check.agents_meta.name": "Agents
|
|
1649
|
+
"doctor.check.agents_meta.name": "Agents \u5143\u6570\u636E",
|
|
1318
1650
|
"doctor.check.agents_meta.message.missing": ".fabric/agents.meta.json \u7F3A\u5931\u3002",
|
|
1319
1651
|
"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",
|
|
1320
1652
|
"doctor.check.agents_meta.message.invalid-default": ".fabric/agents.meta.json \u65E0\u6548\u3002",
|
|
@@ -1326,7 +1658,7 @@ var zhCNMessages = {
|
|
|
1326
1658
|
"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",
|
|
1327
1659
|
"doctor.check.agents_meta.remediation.stale": "\u4E0D\u518D\u6267\u884C\u9879\u76EE\u672C\u5730 reconcile\uFF1Bmounted stores \u4F1A\u88AB\u76F4\u63A5\u8BFB\u53D6\u3002",
|
|
1328
1660
|
"doctor.check.agents_meta.ok": "\u68C0\u6D4B\u5230 legacy agents.meta revision {revision}\uFF1Bstore-backed knowledge \u4E0D\u4F9D\u8D56\u5B83\u3002",
|
|
1329
|
-
"doctor.check.rule_content_refs.name": "Rule
|
|
1661
|
+
"doctor.check.rule_content_refs.name": "Rule \u5185\u5BB9\u5F15\u7528",
|
|
1330
1662
|
"doctor.check.rule_content_refs.message.unavailable": "agents.meta.json \u6709\u6548\u524D\uFF0C\u65E0\u6CD5\u68C0\u67E5 content_ref entries\u3002",
|
|
1331
1663
|
"doctor.check.rule_content_refs.remediation.unavailable": "\u5148\u4FEE\u590D agents.meta.json\uFF1A\u8FD0\u884C `fabric doctor --fix`\u3002",
|
|
1332
1664
|
"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",
|
|
@@ -1337,7 +1669,7 @@ var zhCNMessages = {
|
|
|
1337
1669
|
"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",
|
|
1338
1670
|
"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",
|
|
1339
1671
|
"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",
|
|
1340
|
-
"doctor.check.knowledge_test_index.name": "
|
|
1672
|
+
"doctor.check.knowledge_test_index.name": "\u77E5\u8BC6\u6D4B\u8BD5\u7D22\u5F15",
|
|
1341
1673
|
"doctor.check.knowledge_test_index.remediation.missing": "\u8FD0\u884C `fabric doctor --fix` \u91CD\u5EFA .fabric/.cache/knowledge-test.index.json\u3002",
|
|
1342
1674
|
"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",
|
|
1343
1675
|
"doctor.check.knowledge_test_index.message.stale": ".fabric/.cache/knowledge-test.index.json \u5DF2\u8FC7\u671F\u3002",
|
|
@@ -1346,7 +1678,7 @@ var zhCNMessages = {
|
|
|
1346
1678
|
"doctor.check.knowledge_test_index.ok.link_singular.orphan_plural": "\u5DF2\u7D22\u5F15 {linkCount} \u4E2A link \u548C {orphanCount} \u4E2A orphan annotation\u3002",
|
|
1347
1679
|
"doctor.check.knowledge_test_index.ok.link_plural.orphan_singular": "\u5DF2\u7D22\u5F15 {linkCount} \u4E2A link \u548C {orphanCount} \u4E2A orphan annotation\u3002",
|
|
1348
1680
|
"doctor.check.knowledge_test_index.ok.link_plural.orphan_plural": "\u5DF2\u7D22\u5F15 {linkCount} \u4E2A link \u548C {orphanCount} \u4E2A orphan annotation\u3002",
|
|
1349
|
-
"doctor.check.event_ledger.name": "
|
|
1681
|
+
"doctor.check.event_ledger.name": "\u4E8B\u4EF6\u8D26\u672C",
|
|
1350
1682
|
"doctor.check.event_ledger.message.missing": ".fabric/events.jsonl \u7F3A\u5931\u3002",
|
|
1351
1683
|
"doctor.check.event_ledger.remediation.missing": "\u8FD0\u884C `fabric doctor --fix` \u521B\u5EFA .fabric/events.jsonl\u3002",
|
|
1352
1684
|
"doctor.check.event_ledger.message.not_writable-default": ".fabric/events.jsonl \u4E0D\u53EF\u5199\u3002",
|
|
@@ -1357,20 +1689,20 @@ var zhCNMessages = {
|
|
|
1357
1689
|
"doctor.check.event_ledger.ok": ".fabric/events.jsonl \u5DF2\u5B58\u5728\uFF0C\u53EF\u5199\uFF0C\u4E14\u53EF\u89E3\u6790\u3002",
|
|
1358
1690
|
// v2.0.0-rc.37 Wave B (B5): 复合 hard-gate 检查 events.jsonl/metrics.jsonl 健康
|
|
1359
1691
|
// (G7 size / G8 metric_leak / G9 metrics_stale / G10 rotation_overdue)。
|
|
1360
|
-
"doctor.check.events_jsonl_health.name": "
|
|
1692
|
+
"doctor.check.events_jsonl_health.name": "\u4E8B\u4EF6\u8D26\u672C\u5065\u5EB7",
|
|
1361
1693
|
"doctor.check.events_jsonl_health.ok": ".fabric/events.jsonl \u5927\u5C0F\u3001\u65B0\u9C9C\u5EA6\u3001metric \u9694\u79BB\u5168\u90E8\u6B63\u5E38\u3002",
|
|
1362
1694
|
"doctor.check.events_jsonl_health.message.size": ".fabric/events.jsonl \u5DF2 {sizeMb} MB\uFF0C\u8D85\u8FC7 10 MB \u9608\u503C\u3002",
|
|
1363
1695
|
"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",
|
|
1364
1696
|
"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",
|
|
1365
1697
|
"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",
|
|
1366
1698
|
"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",
|
|
1367
|
-
"doctor.check.event_ledger_partial_write.name": "
|
|
1699
|
+
"doctor.check.event_ledger_partial_write.name": "\u4E8B\u4EF6\u8D26\u672C\u534A\u622A\u5199\u5165",
|
|
1368
1700
|
"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",
|
|
1369
1701
|
"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",
|
|
1370
1702
|
"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",
|
|
1371
1703
|
"doctor.check.event_ledger_partial_write.ok.clean": "events.jsonl \u6CA1\u6709 partial trailing write\u3002",
|
|
1372
1704
|
// v2.0.0-rc.27 TASK-010 (audit §2.24): schema-compat 向前兼容警告类别。
|
|
1373
|
-
"doctor.check.event_ledger_schema_compat.name": "
|
|
1705
|
+
"doctor.check.event_ledger_schema_compat.name": "\u4E8B\u4EF6\u8D26\u672C schema \u517C\u5BB9\u6027",
|
|
1374
1706
|
"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",
|
|
1375
1707
|
"doctor.check.event_ledger_schema_compat.ok.clean": "events.jsonl \u6240\u6709\u884C\u90FD\u80FD\u89E3\u6790\u4E3A\u5F53\u524D schema\u3002",
|
|
1376
1708
|
"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",
|
|
@@ -1388,13 +1720,13 @@ var zhCNMessages = {
|
|
|
1388
1720
|
"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}",
|
|
1389
1721
|
"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",
|
|
1390
1722
|
// 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 浪费 + 加载延迟)。
|
|
1391
|
-
"doctor.check.skill_token_budget.name": "Skill token
|
|
1723
|
+
"doctor.check.skill_token_budget.name": "Skill token \u9884\u7B97",
|
|
1392
1724
|
"doctor.check.skill_token_budget.ok": "\u6240\u6709 .claude/skills/<slug>/SKILL.md \u5728 token budget \u5185 (warn 5K / error 10K)\u3002",
|
|
1393
1725
|
"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",
|
|
1394
1726
|
"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",
|
|
1395
1727
|
"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",
|
|
1396
1728
|
// 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。
|
|
1397
|
-
"doctor.check.skill_description.name": "Skill description
|
|
1729
|
+
"doctor.check.skill_description.name": "Skill description \u8D28\u91CF",
|
|
1398
1730
|
"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",
|
|
1399
1731
|
"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",
|
|
1400
1732
|
"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",
|
|
@@ -1406,22 +1738,22 @@ var zhCNMessages = {
|
|
|
1406
1738
|
"doctor.check.cite_goodhart.message.plural": "\u68C0\u6D4B\u5230 {count} \u4E2A cite-policy Goodhart \u6A21\u5F0F: {list}\u3002",
|
|
1407
1739
|
"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",
|
|
1408
1740
|
// 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 才计算比率, 避免小语料噪音)。
|
|
1409
|
-
"doctor.check.draft_backlog.name": "
|
|
1741
|
+
"doctor.check.draft_backlog.name": "\u77E5\u8BC6 draft \u79EF\u538B",
|
|
1410
1742
|
"doctor.check.draft_backlog.ok": "canonical knowledge entries \u4E2D draft \u5360\u6BD4\u6B63\u5E38 (< 50%, \u6216 workspace \u592A\u5C0F\u4E0D\u8BC4)\u3002",
|
|
1411
1743
|
"doctor.check.draft_backlog.message": "{draftCount}/{totalCount} ({pct}%) canonical knowledge entries \u5361\u5728 draft maturity \u2014 promote \u65AD\u6D41 (rc.32 baseline 92%)\u3002",
|
|
1412
1744
|
"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",
|
|
1413
1745
|
// rc.37 NEW-38: knowledge auto-promote (info surface; --fix 执行).
|
|
1414
1746
|
// rc.36 TASK-05 (P0-8): empty-tags ratio warn.
|
|
1415
|
-
"doctor.check.knowledge_tags_empty.name": "
|
|
1747
|
+
"doctor.check.knowledge_tags_empty.name": "\u77E5\u8BC6 tags \u8986\u76D6\u7387",
|
|
1416
1748
|
"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",
|
|
1417
1749
|
"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",
|
|
1418
1750
|
"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",
|
|
1419
1751
|
// rc.36 TASK-09 (P1-NEW1): drift_detected 未消化告警。
|
|
1420
|
-
"doctor.check.drift_unconsumed.name": "
|
|
1752
|
+
"doctor.check.drift_unconsumed.name": "\u77E5\u8BC6\u6F02\u79FB\u672A\u6D88\u5316",
|
|
1421
1753
|
"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",
|
|
1422
1754
|
"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",
|
|
1423
1755
|
"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)",
|
|
1424
|
-
"doctor.check.meta_manually_diverged.name": "Meta
|
|
1756
|
+
"doctor.check.meta_manually_diverged.name": "Meta \u624B\u52A8\u504F\u79BB",
|
|
1425
1757
|
"doctor.check.meta_manually_diverged.ok.unreadable": "agents.meta.json \u4E0D\u53EF\u8BFB\uFF0C\u8DF3\u8FC7 divergence \u68C0\u67E5\u3002",
|
|
1426
1758
|
"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",
|
|
1427
1759
|
"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",
|
|
@@ -1430,53 +1762,53 @@ var zhCNMessages = {
|
|
|
1430
1762
|
"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",
|
|
1431
1763
|
"doctor.check.meta_manually_diverged.remediation.hash": "\u9879\u76EE\u672C\u5730 agents.meta reconcile \u5DF2\u9000\u4F11\uFF1Bmounted stores \u662F source of truth\u3002",
|
|
1432
1764
|
"doctor.check.meta_manually_diverged.ok.consistent": "agents.meta.json \u4E0E\u78C1\u76D8\u4E0A\u7684 rule files \u4E00\u81F4\u3002",
|
|
1433
|
-
"doctor.check.knowledge_dir_unindexed.name": "
|
|
1765
|
+
"doctor.check.knowledge_dir_unindexed.name": "\u77E5\u8BC6\u76EE\u5F55\u672A\u7D22\u5F15",
|
|
1434
1766
|
"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",
|
|
1435
1767
|
"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",
|
|
1436
1768
|
"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",
|
|
1437
1769
|
"doctor.check.knowledge_dir_unindexed.ok": "\u65E0\u9700\u6267\u884C legacy local knowledge \u7D22\u5F15\u52A8\u4F5C\u3002",
|
|
1438
1770
|
// v2.0.0-rc.33 W3-2 (T6 #27): 走 fabric-review modify 流程让 canonical id allocator 重新分配, 而非让用户自己选 id (易撞 counter, 难手算)。
|
|
1439
|
-
"doctor.check.counter_desync.name": "
|
|
1771
|
+
"doctor.check.counter_desync.name": "\u77E5\u8BC6\u8BA1\u6570\u5668\u5931\u540C\u6B65",
|
|
1440
1772
|
"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",
|
|
1441
1773
|
"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",
|
|
1442
1774
|
"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",
|
|
1443
1775
|
"doctor.check.counter_desync.ok": "agents.meta.json counters envelope \u4E0E\u89C2\u6D4B\u5230\u7684 stable_ids \u4E00\u81F4\u3002",
|
|
1444
|
-
"doctor.check.store_counter_drift.name": "Store
|
|
1776
|
+
"doctor.check.store_counter_drift.name": "Store \u8BA1\u6570\u5668\u6F02\u79FB",
|
|
1445
1777
|
"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",
|
|
1446
1778
|
"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",
|
|
1447
1779
|
"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",
|
|
1448
1780
|
"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",
|
|
1449
|
-
"doctor.check.store_orphan.name": "Store
|
|
1781
|
+
"doctor.check.store_orphan.name": "Store \u5B64\u513F",
|
|
1450
1782
|
"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",
|
|
1451
1783
|
"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",
|
|
1452
1784
|
"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",
|
|
1453
1785
|
"doctor.check.store_orphan.ok": "~/.fabric/stores \u4E0B\u6CA1\u6709\u672A\u767B\u8BB0\u7684\u5B64\u513F store\u3002",
|
|
1454
|
-
"doctor.check.preexisting_root_files.name": "
|
|
1786
|
+
"doctor.check.preexisting_root_files.name": "\u9884\u5B58\u6839\u76EE\u5F55 markdown",
|
|
1455
1787
|
"doctor.check.preexisting_root_files.ok": "project root \u672A\u68C0\u6D4B\u5230 CLAUDE.md \u6216 AGENTS.md\u3002",
|
|
1456
1788
|
"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",
|
|
1457
1789
|
"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",
|
|
1458
1790
|
// v2.0.0-rc.33 W3-2 (T6 #34): 同 stable_id_collision — 走 fabric-review modify 让 allocator 分配新 id, 不让用户手算。
|
|
1459
1791
|
// v2.0.0-rc.33 W3-2 (T6 #35): 加 skill 入口 (`/fabric-review modify <id>`) 让用户知道怎么 invoke。
|
|
1460
|
-
"doctor.check.index_drift.name": "
|
|
1792
|
+
"doctor.check.index_drift.name": "\u77E5\u8BC6\u7D22\u5F15\u6F02\u79FB",
|
|
1461
1793
|
"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",
|
|
1462
1794
|
"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",
|
|
1463
1795
|
"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",
|
|
1464
1796
|
"doctor.check.index_drift.remediation": "\u8FD0\u884C `fabric doctor --fix-knowledge`\u5C06 agents.meta.json counters \u63D0\u5347\u5230 max_observed + 1\u3002",
|
|
1465
|
-
"doctor.check.underseeded.name": "
|
|
1797
|
+
"doctor.check.underseeded.name": "\u77E5\u8BC6\u79CD\u5B50\u4E0D\u8DB3",
|
|
1466
1798
|
"doctor.check.underseeded.ok": "\u77E5\u8BC6\u5E93\u5DF2\u6709 {count} \u4E2A canonical entries\uFF08>= {threshold}\uFF09\u3002",
|
|
1467
1799
|
"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",
|
|
1468
1800
|
"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",
|
|
1469
1801
|
"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",
|
|
1470
|
-
"doctor.check.session_hints_stale.name": "
|
|
1802
|
+
"doctor.check.session_hints_stale.name": "\u77E5\u8BC6 session-hints \u9648\u65E7",
|
|
1471
1803
|
"doctor.check.session_hints_stale.ok": ".fabric/.cache/ \u4E0B\u6CA1\u6709\u8D85\u8FC7 {days} \u5929\u7684 session-hints cache files\u3002",
|
|
1472
1804
|
"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",
|
|
1473
1805
|
"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",
|
|
1474
1806
|
"doctor.check.session_hints_stale.remediation": "\u8FD0\u884C `fabric doctor --fix-knowledge` \u5220\u9664\u8FC7\u671F\u7684 session-hints cache files\u3002",
|
|
1475
|
-
"doctor.check.hook_cache_writable.name": "Hook
|
|
1807
|
+
"doctor.check.hook_cache_writable.name": "Hook \u7F13\u5B58\u53EF\u5199",
|
|
1476
1808
|
"doctor.check.hook_cache_writable.ok": "Hook sidecar cache \u8DEF\u5F84 {path} \u53EF\u5199\u5165\u63A2\u9488\u6587\u4EF6\u3002",
|
|
1477
1809
|
"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",
|
|
1478
1810
|
"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",
|
|
1479
|
-
"doctor.check.stale_serve_lock.name": "Serve
|
|
1811
|
+
"doctor.check.stale_serve_lock.name": "Serve \u9501",
|
|
1480
1812
|
"doctor.check.stale_serve_lock.ok.no_lock": "\u672A\u53D1\u73B0 .fabric/.serve.lock\u3002",
|
|
1481
1813
|
"doctor.check.stale_serve_lock.ok.live_pid": ".fabric/.serve.lock \u7531 live PID {pid} \u6301\u6709\u3002",
|
|
1482
1814
|
"doctor.check.stale_serve_lock.age.day.singular": "{count} \u5929\u524D",
|
|
@@ -1486,7 +1818,7 @@ var zhCNMessages = {
|
|
|
1486
1818
|
"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",
|
|
1487
1819
|
"doctor.check.stale_serve_lock.remediation.dead_pid": "\u8FD0\u884C `fabric doctor --fix` \u79FB\u9664\u8FC7\u671F\u7684 .fabric/.serve.lock\u3002",
|
|
1488
1820
|
// rc.31 BUG-M3/NEW-4: hooks_wired observability.
|
|
1489
|
-
"doctor.check.hooks_wired.name": "Claude Code hooks
|
|
1821
|
+
"doctor.check.hooks_wired.name": "Claude Code hooks \u6CE8\u5165",
|
|
1490
1822
|
"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",
|
|
1491
1823
|
"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",
|
|
1492
1824
|
"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",
|
|
@@ -1507,7 +1839,7 @@ var zhCNMessages = {
|
|
|
1507
1839
|
"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",
|
|
1508
1840
|
"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",
|
|
1509
1841
|
// rc.31 BUG-G2/G5: promote-ledger invariant check.
|
|
1510
|
-
"doctor.check.promote_ledger_invariant.name": "
|
|
1842
|
+
"doctor.check.promote_ledger_invariant.name": "\u664B\u5347\u8D26\u672C\u4E0D\u53D8\u91CF",
|
|
1511
1843
|
"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",
|
|
1512
1844
|
"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",
|
|
1513
1845
|
"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",
|
|
@@ -1526,70 +1858,70 @@ var zhCNMessages = {
|
|
|
1526
1858
|
"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",
|
|
1527
1859
|
"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",
|
|
1528
1860
|
// v2.2 W4 (G-GUARD / A6): store scope lint。
|
|
1529
|
-
"doctor.check.store_scope_lint.name": "Store scope
|
|
1861
|
+
"doctor.check.store_scope_lint.name": "Store scope \u68C0\u67E5",
|
|
1530
1862
|
"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",
|
|
1531
1863
|
"doctor.check.store_scope_lint.message": "{total} \u4E2A store scope \u95EE\u9898: {breakdown}\u3002\u4F8B\u5982 {sample}\u3002",
|
|
1532
1864
|
"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",
|
|
1533
1865
|
// v2.2 Goal B (G-INTEGRITY): store stable_id collision + layer mismatch lints。
|
|
1534
|
-
"doctor.check.stable_id_collision.name": "Stable ID
|
|
1866
|
+
"doctor.check.stable_id_collision.name": "Stable ID \u51B2\u7A81",
|
|
1535
1867
|
"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',
|
|
1536
1868
|
"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',
|
|
1537
1869
|
"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",
|
|
1538
1870
|
"doctor.check.stable_id_collision.ok": "mounted store knowledge \u4E2D\u672A\u53D1\u73B0\u5DF2\u58F0\u660E\u7684 stable_id collisions\u3002",
|
|
1539
|
-
"doctor.check.layer_mismatch.name": "
|
|
1871
|
+
"doctor.check.layer_mismatch.name": "\u77E5\u8BC6 layer \u4E0D\u5339\u914D",
|
|
1540
1872
|
"doctor.check.layer_mismatch.ok": "\u6240\u6709 canonical knowledge files \u90FD\u4F4D\u4E8E stable_id prefix \u58F0\u660E\u7684 layer \u4E0B\u3002",
|
|
1541
1873
|
"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",
|
|
1542
1874
|
"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",
|
|
1543
1875
|
"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",
|
|
1544
1876
|
// v2.2 Goal B (G-RELEVANCE): store relevance_paths hygiene (dangling + drift)。
|
|
1545
|
-
"doctor.check.relevance_paths_dangling.name": "
|
|
1877
|
+
"doctor.check.relevance_paths_dangling.name": "\u77E5\u8BC6 relevance_paths \u60AC\u7A7A",
|
|
1546
1878
|
"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",
|
|
1547
1879
|
"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",
|
|
1548
1880
|
"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",
|
|
1549
1881
|
"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",
|
|
1550
|
-
"doctor.check.relevance_paths_drift.name": "
|
|
1882
|
+
"doctor.check.relevance_paths_drift.name": "\u77E5\u8BC6 relevance_paths \u6F02\u79FB",
|
|
1551
1883
|
"doctor.check.relevance_paths_drift.ok.skipped": "\u5DF2\u8DF3\u8FC7(git history unavailable;\u65E0\u6CD5\u8BC4\u4F30 {windowDays}d drift window)\u3002",
|
|
1552
1884
|
"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",
|
|
1553
1885
|
"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",
|
|
1554
1886
|
"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",
|
|
1555
1887
|
"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",
|
|
1556
1888
|
// W4-3 (KT-MOD-0001): narrow scope 但 relevance_paths 为空。
|
|
1557
|
-
"doctor.check.narrow_no_paths.name": "
|
|
1889
|
+
"doctor.check.narrow_no_paths.name": "\u77E5\u8BC6 narrow scope \u7F3A\u8DEF\u5F84",
|
|
1558
1890
|
"doctor.check.narrow_no_paths.ok": "\u6BCF\u6761 narrow scope canonical entry \u90FD\u81F3\u5C11\u5E26\u4E00\u4E2A relevance_path\u3002",
|
|
1559
1891
|
"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",
|
|
1560
1892
|
"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",
|
|
1561
1893
|
"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",
|
|
1562
1894
|
// W4-2 (KT-DEC-0028): 单 store broad 索引接近 backstop。
|
|
1563
|
-
"doctor.check.broad_index_drift.name": "
|
|
1895
|
+
"doctor.check.broad_index_drift.name": "\u77E5\u8BC6 broad \u7D22\u5F15\u6F02\u79FB",
|
|
1564
1896
|
"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",
|
|
1565
1897
|
"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",
|
|
1566
1898
|
"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",
|
|
1567
1899
|
"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",
|
|
1568
1900
|
// v2.2 Goal B (G-AGE): knowledge decay lints (orphan_demote + stale_archive)。
|
|
1569
|
-
"doctor.check.orphan_demote.name": "
|
|
1901
|
+
"doctor.check.orphan_demote.name": "\u77E5\u8BC6\u5B64\u513F\u964D\u7EA7",
|
|
1570
1902
|
"doctor.check.orphan_demote.ok": "\u6CA1\u6709 canonical knowledge entries \u8D85\u8FC7\u6309 maturity \u8BBE\u5B9A\u7684 inactivity threshold\u3002",
|
|
1571
1903
|
"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",
|
|
1572
1904
|
"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",
|
|
1573
1905
|
"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)",
|
|
1574
|
-
"doctor.check.stale_archive.name": "
|
|
1906
|
+
"doctor.check.stale_archive.name": "\u77E5\u8BC6\u9648\u65E7\u5F52\u6863",
|
|
1575
1907
|
"doctor.check.stale_archive.ok": "\u6CA1\u6709 draft knowledge entries \u8D85\u8FC7\u989D\u5916\u7684 stale-archive quiet window\u3002",
|
|
1576
1908
|
"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",
|
|
1577
1909
|
"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",
|
|
1578
1910
|
"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)",
|
|
1579
1911
|
// v2.2 C1: knowledge promotion lint (promotion_candidate, info kind)。
|
|
1580
|
-
"doctor.check.promotion_candidate.name": "
|
|
1912
|
+
"doctor.check.promotion_candidate.name": "\u77E5\u8BC6\u664B\u5347\u5019\u9009",
|
|
1581
1913
|
"doctor.check.promotion_candidate.ok": "\u6CA1\u6709 verified knowledge entries \u8FBE\u5230 proven \u664B\u5347\u7684 related \u5165\u5EA6\u95E8\u69DB\u3002",
|
|
1582
1914
|
"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",
|
|
1583
1915
|
"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",
|
|
1584
1916
|
"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)",
|
|
1585
1917
|
// v2.2 C1: broad review-recheck lint (broad_review_recheck, info kind)。
|
|
1586
|
-
"doctor.check.broad_review_recheck.name": "
|
|
1918
|
+
"doctor.check.broad_review_recheck.name": "\u77E5\u8BC6 broad review \u590D\u67E5",
|
|
1587
1919
|
"doctor.check.broad_review_recheck.ok": "\u6CA1\u6709 broad-scope knowledge entries \u8D85\u671F\u672A\u505A review \u518D\u786E\u8BA4\u3002",
|
|
1588
1920
|
"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",
|
|
1589
1921
|
"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",
|
|
1590
1922
|
"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",
|
|
1591
1923
|
// project-scope binding 回填 lint (unbound_project)。
|
|
1592
|
-
"doctor.check.unbound_project.name": "Project-scope
|
|
1924
|
+
"doctor.check.unbound_project.name": "Project-scope \u7ED1\u5B9A",
|
|
1593
1925
|
"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",
|
|
1594
1926
|
"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",
|
|
1595
1927
|
"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",
|
|
@@ -1598,7 +1930,7 @@ var zhCNMessages = {
|
|
|
1598
1930
|
"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",
|
|
1599
1931
|
"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",
|
|
1600
1932
|
"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',
|
|
1601
|
-
"doctor.check.onboard_coverage.name": "Onboard
|
|
1933
|
+
"doctor.check.onboard_coverage.name": "Onboard \u8986\u76D6\u7387",
|
|
1602
1934
|
"doctor.check.onboard_coverage.ok.complete": "Onboard coverage\uFF1A{filledCount}/{total} \u2713\uFF08opted-out\uFF1A{optedOutCount}\uFF09\u3002",
|
|
1603
1935
|
"doctor.check.onboard_coverage.message.incomplete": "\u5C1A\u672A\u8986\u76D6\u7684 onboard slots\uFF1A[{missingSlots}]\u3002{filledCount}/{total} filled\uFF1B{optedOutCount} opted-out\u3002",
|
|
1604
1936
|
"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",
|
|
@@ -1618,13 +1950,15 @@ var zhCNMessages = {
|
|
|
1618
1950
|
"cli.doctor.errors.invalid-history-mode": "\u65E0\u6548\u7684 --history mode '{input}'\u3002\u53EF\u9009: archive | fix | all\u3002",
|
|
1619
1951
|
"doctor.history.header": "Doctor \u5386\u53F2 (mode={mode}, \u8FD1 {sinceLabel}, \u5171 {days} \u5929)",
|
|
1620
1952
|
"doctor.history.empty": "--since={sinceLabel} \u7A97\u53E3\u5185\u65E0 doctor \u6216 archive \u6D3B\u52A8 (mode={mode})\u3002",
|
|
1621
|
-
"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
|
|
1953
|
+
"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",
|
|
1622
1954
|
"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",
|
|
1623
1955
|
"cli.install.args.debug.description": "\u5C06\u76EE\u6807\u89E3\u6790\u7EC6\u8282\u8F93\u51FA\u5230 stderr\u3002",
|
|
1624
1956
|
"cli.install.args.yes.description": "\u63A5\u53D7\u5F53\u524D\u5B89\u88C5\u8BA1\u5212\u5E76\u8DF3\u8FC7 TTY \u5411\u5BFC\u76F4\u63A5\u6267\u884C",
|
|
1625
1957
|
"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",
|
|
1626
1958
|
"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)",
|
|
1627
1959
|
"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)",
|
|
1960
|
+
"cli.install.args.global.description": "\u914D\u7F6E\u5168\u5C40 Fabric (~/.fabric:uid + personal store + \u914D\u7F6E)",
|
|
1961
|
+
"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",
|
|
1628
1962
|
// TASK-004: --verbose 展开重装折叠的逐 phase 明细 + 完整客户端能力表。
|
|
1629
1963
|
"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",
|
|
1630
1964
|
// rc.35 TASK-08 (P0-5/6): --force-skills-only。
|
|
@@ -1674,6 +2008,10 @@ var zhCNMessages = {
|
|
|
1674
2008
|
"cli.install.mcp.none": "\u65E0\u9700\u914D\u7F6E MCP \u5BA2\u6237\u7AEF",
|
|
1675
2009
|
"cli.install.scan.finding.framework": "\u68C0\u6D4B\u5230: {framework} \u9879\u76EE",
|
|
1676
2010
|
"cli.install.scan.finding.scale": "\u89C4\u6A21: {files} \u6587\u4EF6 \xB7 {entries} \u4E2A\u5165\u53E3",
|
|
2011
|
+
// flat-design: 扫描结果合成一行人话(框架 + 规模);版本为 unknown 时隐去,
|
|
2012
|
+
// 没识别出框架时退到 plain。
|
|
2013
|
+
"cli.install.scan.summary.framework": "\u68C0\u6D4B\u5230 {framework} \u9879\u76EE \xB7 {files} \u6587\u4EF6 \xB7 {entries} \u5165\u53E3",
|
|
2014
|
+
"cli.install.scan.summary.plain": "\u626B\u63CF\u5B8C\u6210 \xB7 {files} \u6587\u4EF6 \xB7 {entries} \u5165\u53E3",
|
|
1677
2015
|
"cli.install.rollback.feedback": "\u5DF2\u56DE\u6EDA {count} \u9879\u6539\u52A8,\u9879\u76EE\u4FDD\u6301\u539F\u72B6\u3002",
|
|
1678
2016
|
"cli.install.stages.skipped": "\u5DF2\u8DF3\u8FC7",
|
|
1679
2017
|
"cli.install.stages.completed": "\u5DF2\u5B8C\u6210",
|
|
@@ -1684,21 +2022,43 @@ var zhCNMessages = {
|
|
|
1684
2022
|
"cli.install.pipeline.title": "Fabric \u5B89\u88C5",
|
|
1685
2023
|
"cli.install.pipeline.complete": "Fabric \u5B89\u88C5\u5B8C\u6210",
|
|
1686
2024
|
"cli.install.pipeline.running": "\u5C06\u6309 {count} \u4E2A\u9636\u6BB5\u6267\u884C",
|
|
2025
|
+
// TASK-002 (G1):总结卡收尾 + 计数词。原先在 ConsoleOutputRenderer 中硬编码英文
|
|
2026
|
+
// (Done! / succeeded / skipped / failed / "All steps completed successfully"),
|
|
2027
|
+
// 全部收进 t() + 双语表,locale-parity.test.ts 守护 en + zh-CN 每个 key 齐备。
|
|
2028
|
+
"cli.summary.done": "\u5B8C\u6210!",
|
|
2029
|
+
"cli.summary.all-ok": "\u5168\u90E8\u6B65\u9AA4\u5DF2\u5B8C\u6210",
|
|
2030
|
+
"cli.summary.n-failed": "{count} \u4E2A\u6B65\u9AA4\u5931\u8D25",
|
|
2031
|
+
"cli.summary.all-resolved": "\u5168\u90E8\u5DF2\u5904\u7406 \xB7 {done} \u6267\u884C / {skipped} \u8DF3\u8FC7",
|
|
2032
|
+
"cli.summary.count.succeeded": "\u6210\u529F",
|
|
2033
|
+
"cli.summary.count.skipped": "\u8DF3\u8FC7",
|
|
2034
|
+
"cli.summary.count.failed": "\u5931\u8D25",
|
|
1687
2035
|
// TASK-004: 首装走 onboarding 定调(欢迎语 + 一次性设置说明);重装保持简洁的
|
|
1688
2036
|
// "将按 N 阶段执行"。{count} = 阶段总数。
|
|
1689
2037
|
"cli.install.pipeline.intro.firstRun": "\u6B22\u8FCE\u4F7F\u7528 Fabric \u2014\u2014 \u8FD9\u662F\u9996\u6B21\u5B89\u88C5,\u6211\u4F1A\u5F15\u5BFC\u4F60\u5B8C\u6210\u4E00\u6B21\u6027\u8BBE\u7F6E(\u5171 {count} \u4E2A\u9636\u6BB5);\u4E4B\u540E\u518D\u8DD1\u4F1A\u81EA\u52A8\u8DF3\u8FC7\u5DF2\u5C31\u7EEA\u9879\u3002",
|
|
1690
2038
|
// TASK-004: 重装且全程幂等(无任何 install)时折叠成的单张体检卡片标题。
|
|
1691
2039
|
// {count} = 阶段总数。明细走 --verbose。
|
|
1692
2040
|
"cli.install.healthcheck.title": "\u2713 Fabric \u5DF2\u662F\u6700\u65B0 \xB7 {count} \u9636\u6BB5\u5C31\u7EEA \xB7 \u65E0\u6539\u52A8",
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
"cli.install.
|
|
1697
|
-
"cli.install.
|
|
2041
|
+
// TASK-003 (G2 root a):每阶段总结明细的状态词改按 r.changed 判定(不再用
|
|
2042
|
+
// installed.length)—— 无改动的重装走"已最新",不再误报"N 项已安装"。
|
|
2043
|
+
// installed-count 仅在该阶段确有改动时使用。
|
|
2044
|
+
"cli.install.stage.uptodate": "\u5DF2\u6700\u65B0",
|
|
2045
|
+
"cli.install.stage.installed-count": "{count} \u9879\u5DF2\u5B89\u88C5",
|
|
2046
|
+
// flat-design: 阶段标签收短,让 `● 名称 ✓` 列对齐、读着清爽(原全称偏长)。
|
|
2047
|
+
"cli.install.pipeline.label.preflight": "\u73AF\u5883\u9884\u68C0",
|
|
2048
|
+
"cli.install.pipeline.label.env": "\u73AF\u5883\u521D\u59CB\u5316",
|
|
2049
|
+
"cli.install.pipeline.label.store": "\u77E5\u8BC6\u5E93",
|
|
2050
|
+
"cli.install.pipeline.label.hooks": "Hook \u4E0E skill",
|
|
2051
|
+
"cli.install.pipeline.label.mcp": "MCP \u670D\u52A1",
|
|
1698
2052
|
"cli.install.pipeline.label.validate": "\u5B89\u88C5\u6821\u9A8C",
|
|
1699
2053
|
"cli.install.pipeline.label.guidance": "\u540E\u7EED\u6307\u5F15",
|
|
1700
2054
|
"cli.install.pipeline.desc.store": "\u7ED1\u5B9A\u5F53\u524D\u9879\u76EE\u7684 read/write store\uFF0C\u5237\u65B0 resolved-bindings snapshot\u3002",
|
|
1701
2055
|
"cli.install.next-step": "{label} {message}",
|
|
2056
|
+
// TASK-002 (G6): 收口总结卡的单一黄金动作锚点。能力明细表收进 --verbose,
|
|
2057
|
+
// 这一行才是诚实的「下一步做什么」。{action} = 具体下一条命令。
|
|
2058
|
+
"cli.install.next-step.anchor": "\u4E0B\u4E00\u6B65 \u2192 {action}",
|
|
2059
|
+
// flat-design (G6): 装完最该做的事是重启客户端让 MCP 生效 —— 这才是默认锚点动作;
|
|
2060
|
+
// --reapply 维护提示退到 --verbose。
|
|
2061
|
+
"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",
|
|
1702
2062
|
"cli.install.reason-message": "{label} {message}",
|
|
1703
2063
|
"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",
|
|
1704
2064
|
"cli.install.language.option.zh-CN": "\u7B80\u4F53\u4E2D\u6587 (zh-CN)",
|
|
@@ -1726,6 +2086,10 @@ var zhCNMessages = {
|
|
|
1726
2086
|
"cli.install.wizard.stage.bootstrap": "\u662F\u5426\u5B89\u88C5 bootstrap \u6A21\u677F\uFF1F[{defaultValue}]",
|
|
1727
2087
|
"cli.install.wizard.stage.mcp": "\u662F\u5426\u914D\u7F6E MCP \u5BA2\u6237\u7AEF\uFF1F[{defaultValue}]",
|
|
1728
2088
|
"cli.install.wizard.stage.hooks": "\u662F\u5426\u5B89\u88C5 git hooks\uFF1F[{defaultValue}]",
|
|
2089
|
+
// flat-design-system Wave4 (TASK-004): post-group ✓ 回执用的短阶段标签。
|
|
2090
|
+
"cli.install.wizard.stage.bootstrap.short": "bootstrap \u6A21\u677F",
|
|
2091
|
+
"cli.install.wizard.stage.mcp.short": "MCP \u5BA2\u6237\u7AEF",
|
|
2092
|
+
"cli.install.wizard.stage.hooks.short": "git hooks",
|
|
1729
2093
|
"cli.install.wizard.mcp-install": "MCP \u670D\u52A1\u7AEF\u5B89\u88C5\u8303\u56F4\uFF08global/local\uFF09[{defaultValue}]",
|
|
1730
2094
|
"cli.install.wizard.execute.confirm": "\u73B0\u5728\u6267\u884C\u8BE5\u5B89\u88C5\u8BA1\u5212\uFF1F[Y/n]",
|
|
1731
2095
|
"cli.install.wizard.outro": "\u5B89\u88C5\u8BA1\u5212\u5DF2\u786E\u8BA4\uFF0C\u5F00\u59CB\u6267\u884C Fabric install...",
|
|
@@ -1770,11 +2134,15 @@ var zhCNMessages = {
|
|
|
1770
2134
|
"cli.install.store.slot.personal.multi-new-hint": "\u5168\u65B0\u7A7A personal store,\u5E76\u8BBE\u4E3A active",
|
|
1771
2135
|
"cli.install.store.slot.personal.new-alias": "\u65B0 personal store \u7684\u522B\u540D:",
|
|
1772
2136
|
"cli.install.store.slot.personal.switched": "\u5DF2\u5C06\u672C\u673A\u6D3B\u52A8 personal store \u5207\u5230 '{alias}'",
|
|
1773
|
-
"cli.install.store.slot.team.status": "\u56E2\u961F\u5E93(team \u7C7B): '{alias}' \u2713",
|
|
2137
|
+
"cli.install.store.slot.team.status": "\u56E2\u961F\u5E93(team \u7C7B): '{alias}'{source} \u2713",
|
|
1774
2138
|
"cli.install.store.slot.team.empty": "\u56E2\u961F\u5E93(team \u7C7B): \u5C1A\u672A\u7ED1\u5B9A",
|
|
1775
|
-
"cli.install.store.slot.team.prompt": "\u4E3A\u672C\u9879\u76EE\
|
|
2139
|
+
"cli.install.store.slot.team.prompt": "\u4E3A\u672C\u9879\u76EE\u9009\u62E9\u56E2\u961F\u77E5\u8BC6\u5E93(team \u7C7B):",
|
|
1776
2140
|
"cli.install.store.slot.team.bound-label": "\u4FDD\u6301\u5F53\u524D: {alias}",
|
|
1777
2141
|
"cli.install.store.slot.team.switch-label": "\u5207\u5230\u5DF2\u6302\u8F7D: {alias}",
|
|
2142
|
+
// flat-design store menu:「保持当前」与「跳过」语义合并 —— 已绑定时 SKIP 行显示
|
|
2143
|
+
// 为 keep-label(保持当前 · 不改动),未绑定时为「跳过 · 仅用 personal store」。
|
|
2144
|
+
"cli.install.store.slot.team.keep-label": "\u4FDD\u6301\u5F53\u524D: {alias} \xB7 \u4E0D\u6539\u52A8",
|
|
2145
|
+
"cli.install.store.slot.team.keep-hint": "{source}\u7EE7\u7EED\u7528\u8FD9\u4E2A\u56E2\u961F\u5E93,\u672C\u6B21\u4E0D\u6539\u52A8\u7ED1\u5B9A",
|
|
1778
2146
|
"cli.install.store.skip-label": "\u8DF3\u8FC7",
|
|
1779
2147
|
"cli.install.store.bind-mounted.skip-hint": "\u6682\u4E0D\u7ED1\u5B9A\u5DF2\u6302\u8F7D\u7684 store",
|
|
1780
2148
|
"cli.install.store.project-coordinate": "\u5728 store '{store}' \u4E2D\u7684\u9879\u76EE\u5750\u6807 (project coordinate):",
|
|
@@ -1847,7 +2215,7 @@ var zhCNMessages = {
|
|
|
1847
2215
|
"cli.install.diff.state.present-canonical": "\u89C4\u8303",
|
|
1848
2216
|
"cli.install.diff.state.drifted": "\u6F02\u79FB",
|
|
1849
2217
|
"cli.install.diff.state.user-modified": "\u7528\u6237\u4FEE\u6539",
|
|
1850
|
-
"cli.uninstall.description": "\u4ECE\u76EE\u6807\u9879\u76EE\u4E2D\u5378\u8F7D Fabric\
|
|
2218
|
+
"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",
|
|
1851
2219
|
"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",
|
|
1852
2220
|
"cli.uninstall.args.debug.description": "\u5C06\u76EE\u6807\u89E3\u6790\u7EC6\u8282\u8F93\u51FA\u5230 stderr\u3002",
|
|
1853
2221
|
"cli.uninstall.args.yes.description": "\u63A5\u53D7\u5F53\u524D\u5378\u8F7D\u8BA1\u5212\u5E76\u8DF3\u8FC7 TTY \u5411\u5BFC\u76F4\u63A5\u6267\u884C\u3002",
|
|
@@ -1858,7 +2226,14 @@ var zhCNMessages = {
|
|
|
1858
2226
|
// C3: 镜像 install 的阶段提示 (install 用 "Fabric install 将按 N 个阶段执行")。
|
|
1859
2227
|
"cli.uninstall.plan.phase-banner": "Fabric uninstall \u5C06\u6309 {total} \u4E2A\u9636\u6BB5\u6267\u884C",
|
|
1860
2228
|
"cli.uninstall.plan.target": "\u76EE\u6807\uFF1A{target}",
|
|
1861
|
-
|
|
2229
|
+
// flat-design-system Wave5 (TASK-004 G3): 计划预览用人话动作句,按启用的阶段逐条列,
|
|
2230
|
+
// 不再输出 `key=是/否` 黑话行。
|
|
2231
|
+
"cli.uninstall.plan.will-remove": "\u5C06\u79FB\u9664\uFF1A",
|
|
2232
|
+
"cli.uninstall.plan.will-keep": "\u5C06\u4FDD\u7559\uFF1A",
|
|
2233
|
+
"cli.uninstall.plan.action.bootstrap": "\u5BA2\u6237\u7AEF\u6280\u80FD\u4E0E hook \u811A\u672C",
|
|
2234
|
+
"cli.uninstall.plan.action.mcp": "MCP \u670D\u52A1\u6CE8\u518C",
|
|
2235
|
+
"cli.uninstall.plan.action.scaffold": "\u9879\u76EE\u811A\u624B\u67B6\u6587\u4EF6",
|
|
2236
|
+
"cli.uninstall.plan.action.store": "\u56E2\u961F store \u7ED1\u5B9A\uFF08\u672C\u9879\u76EE\uFF09",
|
|
1862
2237
|
"cli.uninstall.plan.detected": "\u68C0\u6D4B\u5230\u7684\u5BA2\u6237\u7AEF\uFF1A{clients}",
|
|
1863
2238
|
"cli.uninstall.plan.preserves": "\u4FDD\u7559\u9879\uFF1A",
|
|
1864
2239
|
"cli.uninstall.plan.preserves.stores": "\u5168\u5C40\u77E5\u8BC6 stores\uFF0C\u9879\u76EE\u5378\u8F7D\u6C38\u4E0D\u5220\u9664",
|
|
@@ -1879,6 +2254,9 @@ var zhCNMessages = {
|
|
|
1879
2254
|
"cli.uninstall.stages.uptodate": "\u65E0\u53EF\u79FB\u9664\uFF08{count} \u9879\u5DF2\u4E0D\u5B58\u5728\uFF09",
|
|
1880
2255
|
"cli.uninstall.stages.summary": "removed={removed} skipped={skipped} errors={errors}",
|
|
1881
2256
|
"cli.uninstall.stages.removed-count": "\u5DF2\u79FB\u9664 {count} \u9879",
|
|
2257
|
+
// flat-design-system Wave5 (TASK-006 G3): 总结卡明细行的人话结果词,与 install 的
|
|
2258
|
+
// `已安装 {count} 项` / `已最新` 对称。
|
|
2259
|
+
"cli.uninstall.stage.cleaned-count": "\u5DF2\u6E05\u7406 {count} \u9879",
|
|
1882
2260
|
"cli.uninstall.summary.title": "\u5378\u8F7D\u6458\u8981",
|
|
1883
2261
|
"cli.uninstall.summary.body": "removed={removed} skipped={skipped} errors={errors}",
|
|
1884
2262
|
"cli.uninstall.healthcheck.title": "\u2713 Fabric \u5DF2\u4E0D\u5B58\u5728 \xB7 \u65E0\u53EF\u79FB\u9664",
|
|
@@ -2113,6 +2491,59 @@ var zhCNMessages = {
|
|
|
2113
2491
|
"cli.whoami.stores-none": "stores: (\u672A\u6302\u8F7D\u4EFB\u4F55 store)",
|
|
2114
2492
|
"cli.whoami.stores-label": "stores:",
|
|
2115
2493
|
"cli.shared.local-only": "(\u4EC5\u672C\u5730)",
|
|
2494
|
+
// `fabric info`(平铺风)—— 身份 / 项目状态 / 召回引擎 标题与字段标签。
|
|
2495
|
+
"cli.info.field.uid": "uid",
|
|
2496
|
+
"cli.info.identity.title": "Fabric \u8EAB\u4EFD",
|
|
2497
|
+
"cli.info.status.title": "\u9879\u76EE\u72B6\u6001",
|
|
2498
|
+
"cli.info.status.group.machine": "\u672C\u673A",
|
|
2499
|
+
"cli.info.status.group.project": "\u5F53\u524D\u9879\u76EE",
|
|
2500
|
+
"cli.info.status.field.project": "\u9879\u76EE",
|
|
2501
|
+
"cli.info.status.field.mounted": "\u5DF2\u6302\u8F7D\u5E93",
|
|
2502
|
+
"cli.info.status.field.bound": "\u7ED1\u5B9A\u5E93",
|
|
2503
|
+
"cli.info.status.value.unset": "(\u672A\u8BBE\u7F6E)",
|
|
2504
|
+
"cli.info.status.value.not-project": "(\u975E Fabric \u9879\u76EE)",
|
|
2505
|
+
"cli.info.status.value.no-global": "(\u65E0\u5168\u5C40\u914D\u7F6E)",
|
|
2506
|
+
"cli.info.recall.title": "\u53EC\u56DE\u5F15\u64CE",
|
|
2507
|
+
"cli.info.recall.summary.on": "\u8BED\u4E49\u641C\u7D22\u5DF2\u5F00 \u2014\u2014 \u8BE6\u60C5 fabric info --recall",
|
|
2508
|
+
"cli.info.recall.summary.off": "\u5173\u952E\u8BCD\u6A21\u5F0F \xB7 \u8BED\u4E49\u641C\u7D22\u672A\u5F00 \u2014\u2014 \u8BE6\u60C5 fabric info --recall",
|
|
2509
|
+
"cli.info.recall.mode.additive": "additive(\u5173\u952E\u8BCD\u6A21\u5F0F)",
|
|
2510
|
+
"cli.info.recall.mode.rrf": "rrf(\u5173\u952E\u8BCD+\u8BED\u4E49)",
|
|
2511
|
+
"cli.info.recall.reason.forced-additive": "\u914D\u7F6E\u56FA\u5B9A\u4E3A\u5173\u952E\u8BCD\u6A21\u5F0F(additive)",
|
|
2512
|
+
"cli.info.recall.reason.auto-additive": "\u5411\u91CF\u901A\u9053\u672A\u5C31\u7EEA,\u81EA\u52A8\u56DE\u9000\u5230\u5173\u952E\u8BCD\u6A21\u5F0F",
|
|
2513
|
+
"cli.info.recall.reason.auto-rrf": "\u5411\u91CF\u901A\u9053\u5C31\u7EEA,\u4F7F\u7528\u5173\u952E\u8BCD+\u8BED\u4E49\u878D\u5408(rrf)",
|
|
2514
|
+
"cli.info.recall.reason.rrf-ready": "\u914D\u7F6E\u56FA\u5B9A\u4E3A rrf,\u5411\u91CF\u901A\u9053\u5C31\u7EEA",
|
|
2515
|
+
"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",
|
|
2516
|
+
"cli.info.recall.install-hint": "\u88C5\u5B83\u5F00\u542F\u8BED\u4E49\u641C\u7D22:npm i -g fastembed",
|
|
2517
|
+
"cli.info.recall.field.fusion-config": "\u878D\u5408\u7B56\u7565(\u914D\u7F6E)",
|
|
2518
|
+
"cli.info.recall.field.fusion-effective": "\u878D\u5408\u7B56\u7565(\u5B9E\u9645)",
|
|
2519
|
+
"cli.info.recall.field.embed-enabled": "embed \u5F00\u542F",
|
|
2520
|
+
"cli.info.recall.field.embed-model": "embed \u6A21\u578B",
|
|
2521
|
+
"cli.info.recall.field.fastembed": "fastembed \u5305",
|
|
2522
|
+
"cli.info.recall.field.cache-dir": "\u6A21\u578B\u7F13\u5B58",
|
|
2523
|
+
"cli.info.recall.field.model-cached": "\u6A21\u578B\u5DF2\u7F13\u5B58",
|
|
2524
|
+
"cli.info.recall.field.vector": "\u5411\u91CF\u901A\u9053",
|
|
2525
|
+
"cli.info.recall.fastembed.yes": "\u53EF\u89E3\u6790",
|
|
2526
|
+
"cli.info.recall.fastembed.no": "\u672A\u5B89\u88C5(\u53EF\u9009\u4F9D\u8D56)",
|
|
2527
|
+
"cli.info.recall.cached.no": "\u672A\u7F13\u5B58 \u2014\u2014 \u9996\u6B21\u53EC\u56DE\u65F6\u4E0B\u8F7D(\u6216\u8FD0\u884C `fabric info --recall --warm`)",
|
|
2528
|
+
"cli.info.recall.vector.ready": "\u5C31\u7EEA",
|
|
2529
|
+
"cli.info.recall.vector.not-ready": "\u672A\u5C31\u7EEA \u2014\u2014 \u53EC\u56DE\u56DE\u9000\u5230\u5173\u952E\u8BCD\u6A21\u5F0F(BM25 / additive)",
|
|
2530
|
+
"cli.info.recall.warm.ok": "embedder \u5DF2\u9884\u70ED:\u6A21\u578B '{model}' \u5DF2\u52A0\u8F7D(\u5411\u91CF\u7EF4\u5EA6 {dim}),\u7F13\u5B58\u4E8E {dir}",
|
|
2531
|
+
"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",
|
|
2532
|
+
"cli.store.list.description": "\u5217\u51FA\u6302\u8F7D\u7684 store",
|
|
2533
|
+
// 追加在 `fabric store --help` 末尾的说明 —— 交代进阶(meta.hidden)操作去哪了,
|
|
2534
|
+
// 否则只剩 list 一行会让用户以为 store 没别的能力。
|
|
2535
|
+
"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",
|
|
2536
|
+
"cli.store.list.title": "\u5DF2\u6302\u8F7D\u77E5\u8BC6\u5E93",
|
|
2537
|
+
"cli.store.project.list.title": "store '{store}' \u4E2D\u7684\u9879\u76EE",
|
|
2538
|
+
"cli.store.project.list.empty": "(\u65E0\u5DF2\u6CE8\u518C\u9879\u76EE)",
|
|
2539
|
+
"cli.store.project.created": "\u5DF2\u5728 store '{store}' \u6CE8\u518C\u9879\u76EE '{id}'",
|
|
2540
|
+
"cli.store.migrate.title": "\u77E5\u8BC6\u5750\u6807\u8FC1\u79FB",
|
|
2541
|
+
"cli.store.backfill.noop": "scope \u56DE\u586B:\u65E0\u9700\u6539\u52A8({count} \u6761\u5DF2\u4E00\u81F4)",
|
|
2542
|
+
"cli.store.backfill.summary": "scope \u56DE\u586B:{changed} \u6761\u5DF2\u66F4\u65B0,{unchanged} \u6761\u672A\u53D8",
|
|
2543
|
+
"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",
|
|
2544
|
+
"cli.store.rescope.noop": "\u91CD\u5B9A scope:\u65E0\u9700\u6539\u52A8({count} \u6761\u5DF2\u662F '{scope}')",
|
|
2545
|
+
"cli.store.rescope.summary": "\u91CD\u5B9A scope \u2192 {scope}:{changed} \u6761\u5DF2\u66F4\u65B0,{unchanged} \u6761\u672A\u53D8",
|
|
2546
|
+
"cli.store.rescope.refused": "{count} \u6761\u88AB\u62D2\u7EDD",
|
|
2116
2547
|
"cli.store.none-mounted": "(\u672A\u6302\u8F7D\u4EFB\u4F55 store)",
|
|
2117
2548
|
"cli.store.mounted": "\u5DF2\u6302\u8F7D '{alias}' (\u5171 {count} \u4E2A store)",
|
|
2118
2549
|
"cli.store.created": "\u5DF2\u521B\u5EFA store '{alias}' ({uuid}) \u4E8E {dir}",
|
|
@@ -2125,12 +2556,29 @@ var zhCNMessages = {
|
|
|
2125
2556
|
"cli.store.routed": "\u5199\u5165\u8DEF\u7531:scope '{scope}' \u2192 store '{alias}'",
|
|
2126
2557
|
"cli.sync.deferred": "{count} \u4E2A store \u79BB\u7EBF \u2014\u2014 push \u5DF2\u5EF6\u540E; \u8054\u7F51\u540E\u91CD\u65B0\u8FD0\u884C `fabric sync`",
|
|
2127
2558
|
"cli.sync.paused": "sync \u56E0\u51B2\u7A81\u6682\u505C \u2014\u2014 \u89E3\u51B3\u540E\u8FD0\u884C `fabric sync --continue` (\u6216 `--abort`)",
|
|
2559
|
+
// flat-design (spec §0.4):`fabric sync` 命令级标题 + 每个 store 单行 + 聚合摘要。
|
|
2560
|
+
// state 文案在 store 行与摘要计数格之间共用。
|
|
2561
|
+
"cli.sync.args.continue.description": "\u89E3\u51B3 rebase \u51B2\u7A81\u540E\u7EE7\u7EED\u540C\u6B65",
|
|
2562
|
+
"cli.sync.args.abort.description": "\u4E2D\u6B62\u53D1\u751F\u51B2\u7A81\u7684 store \u7684 rebase",
|
|
2563
|
+
"cli.sync.title": "\u540C\u6B65\u77E5\u8BC6\u5E93",
|
|
2564
|
+
"cli.sync.summary.title": "\u540C\u6B65\u6458\u8981",
|
|
2565
|
+
"cli.sync.none": "\u6CA1\u6709\u53EF\u540C\u6B65\u7684\u8FDC\u7A0B store",
|
|
2566
|
+
"cli.sync.all-synced": "\u5168\u90E8 store \u5DF2\u540C\u6B65",
|
|
2567
|
+
"cli.sync.state.synced": "\u5DF2\u540C\u6B65",
|
|
2568
|
+
"cli.sync.state.offline": "\u79BB\u7EBF",
|
|
2569
|
+
"cli.sync.state.conflict": "\u51B2\u7A81",
|
|
2570
|
+
"cli.sync.state.aborted": "\u5DF2\u4E2D\u6B62",
|
|
2571
|
+
"cli.sync.state.pending": "\u5F85\u5904\u7406",
|
|
2128
2572
|
"cli.metrics.invalid-since": '--since: \u65E0\u6548\u7684\u65F6\u957F "{raw}" (\u793A\u4F8B: 24h\u30017d\u300130m)',
|
|
2129
2573
|
"cli.metrics.window": "Fabric \u6307\u6807 \u2014\u2014 \u65F6\u95F4\u7A97: {window}",
|
|
2130
2574
|
"cli.metrics.window-all-time": "\u5168\u90E8\u65F6\u95F4",
|
|
2131
2575
|
"cli.metrics.rows-range": " \u884C\u6570: {count} ({start} \u2192 {end})",
|
|
2132
2576
|
"cli.metrics.rows": " \u884C\u6570: {count}",
|
|
2133
2577
|
"cli.metrics.no-activity": " (\u65F6\u95F4\u7A97\u5185\u65E0\u8BA1\u6570\u6D3B\u52A8 \u2014\u2014 server \u53EF\u80FD\u7A7A\u95F2\u6216\u521A\u542F\u52A8)",
|
|
2578
|
+
"cli.metrics.col.counter": "\u8BA1\u6570\u5668",
|
|
2579
|
+
"cli.metrics.col.total": "\u603B\u8BA1",
|
|
2580
|
+
"cli.metrics.col.entry": "\u6761\u76EE",
|
|
2581
|
+
"cli.metrics.section.perEntry": "\u6309\u6761\u76EE\u6D88\u8D39\u6392\u884C (knowledge_consumed:<id>)",
|
|
2134
2582
|
// W3-09 (ISS-035): forensic 项目扫描进度 (stderr, 仅 TTY)。
|
|
2135
2583
|
"cli.install.scanning": "\u6B63\u5728\u626B\u63CF\u9879\u76EE\u7684\u5BA2\u6237\u7AEF/\u6846\u67B6\u7279\u5F81\u2026",
|
|
2136
2584
|
"cli.install.scan-complete": " \u9879\u76EE\u626B\u63CF\u5B8C\u6210",
|