@fenglimg/fabric-shared 2.3.0-rc.12 → 2.3.0-rc.16
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-TEITGZY3.js → chunk-5M3HB554.js} +25 -1
- package/dist/{chunk-ASS2KBB7.js → chunk-OX6DWUK4.js} +31 -2
- package/dist/{chunk-KFFBQRL5.js → chunk-V7IUN5U2.js} +9 -7
- package/dist/{chunk-YLIWE46B.js → chunk-WXVFJBL5.js} +155 -33
- package/dist/i18n/index.js +3 -2
- package/dist/{index-B2e0wKJi.d.ts → index-KvxqMZV1.d.ts} +6 -0
- package/dist/index.d.ts +460 -21
- package/dist/index.js +266 -43
- package/dist/schemas/api-contracts.d.ts +144 -0
- package/dist/schemas/api-contracts.js +1 -1
- package/dist/templates/bootstrap-canonical.d.ts +2 -2
- package/dist/templates/bootstrap-canonical.js +3 -2
- package/dist/theme.d.ts +6 -3
- package/dist/theme.js +27 -5
- package/dist/types/index.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resolveGlobalLocale
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-OX6DWUK4.js";
|
|
4
4
|
|
|
5
5
|
// src/i18n/locales/en.ts
|
|
6
6
|
var enMessages = {
|
|
7
|
+
"cli.signpost.retired": "Command `{retired}` was removed. Use `{successor}` instead.",
|
|
8
|
+
"cli.doctor.args.probe.description": "Emit a machine-readable JSON readiness snapshot (first-hit + store/hooks) without running --fix Prefer --probe in CI for a cheap readiness snapshot; full cite-coverage scans remain on-demand.",
|
|
7
9
|
"cli.main.description": "Fabric CLI \u2014 feeds your project's decisions, pitfalls & conventions to your AI assistant automatically. First time? Run: fabric install",
|
|
8
10
|
"cli.shared.created": "Created",
|
|
9
11
|
"cli.shared.skipped": "Skipped",
|
|
@@ -48,10 +50,23 @@ var enMessages = {
|
|
|
48
50
|
"cli.inspect.explain.census": "census",
|
|
49
51
|
"cli.inspect.explain.census-total": "total {total}",
|
|
50
52
|
"cli.inspect.error": "inspect failed: {message}",
|
|
53
|
+
// `fabric preview` — local read-only knowledge preview web server (loopback-only).
|
|
54
|
+
"cli.preview.description": "Start a local read-only knowledge preview (browse in your browser, grouped by scope)",
|
|
55
|
+
"cli.preview.arg.port": "Port to listen on (default 7777).",
|
|
56
|
+
"cli.preview.arg.host": "Host to bind (default 127.0.0.1, loopback only).",
|
|
57
|
+
"cli.preview.arg.open": "Open the browser on start (default on; use --no-open to disable).",
|
|
58
|
+
"cli.preview.arg.target": "Override the project root (defaults to cwd).",
|
|
59
|
+
"cli.preview.arg.variant": "Default style variant to open (default: lumen; all styles at /gallery).",
|
|
60
|
+
"cli.preview.gallery-hint": "All styles gallery: {url}",
|
|
61
|
+
"cli.preview.started": "Knowledge preview started: {url}",
|
|
62
|
+
"cli.preview.opening": "Opening browser\u2026",
|
|
63
|
+
"cli.preview.stop-hint": "Press Ctrl-C to stop.",
|
|
64
|
+
"cli.preview.stopped": "Preview stopped.",
|
|
65
|
+
"cli.preview.error": "preview failed: {message}",
|
|
51
66
|
"cli.audit.description": "Knowledge & telemetry audit (cite/conflicts/history/metrics)",
|
|
52
67
|
// `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.
|
|
54
|
-
"cli.audit.cite.recall-none-hint": "recall coverage is 0 \u2014 no in-session fab_recall preceded these edits. Recall before editing
|
|
68
|
+
"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. Likely causes: (1) fab_recall omitted/wrong session_id (must be real client session_id; empty planned events never join edits); (2) recall paths do not path-overlap the edited file (auto-cite only counts overlapping planned.target_paths). Fix: pass session_id, reinstall hooks for active-session sidecar, or fab_recall paths that cover the edit. See AGENTS.md + docs/UPGRADE.md.",
|
|
69
|
+
"cli.audit.cite.recall-none-hint": "recall coverage is 0 \u2014 no in-session fab_recall preceded these edits (or planned events had empty session_id so they could not join). Recall before editing with the real client session_id; after install, SessionStart stamps .fabric/.cache/active-session.json as server fallback. Path-overlap still required: recall the files you will edit, not only unrelated .fabric paths. See AGENTS.md + docs/UPGRADE.md.",
|
|
55
70
|
// `fabric audit --help` — filtered help (i18n'd subcommand listing).
|
|
56
71
|
"cli.audit.help.tagline": "Knowledge & telemetry audit surfaces (read-only)",
|
|
57
72
|
"cli.audit.help.sub.cite": "Cite-policy adherence report",
|
|
@@ -99,7 +114,7 @@ var enMessages = {
|
|
|
99
114
|
"cli.config.install.args.dry-run.description": "Preview detected write operations without modifying files.",
|
|
100
115
|
"cli.config.errors.unknown-client": 'Unknown client "{client}". Use a comma-separated list such as cc,codex.',
|
|
101
116
|
"cli.config.errors.expected-object": "Expected object in {path}",
|
|
102
|
-
"cli.config.install.no-configs": "No Fabric MCP client config detected. Create the client directory or set clientPaths in fabric
|
|
117
|
+
"cli.config.install.no-configs": "No Fabric MCP client config detected. Create the client directory or set clientPaths in .fabric/fabric-config.json.",
|
|
103
118
|
"cli.config.install.no-config-path": "Skipping {client}: no config path detected.",
|
|
104
119
|
"cli.config.install.dry-run": "[dry-run] {client}: would write {path}",
|
|
105
120
|
"cli.config.install.wrote": "{client}: wrote {path}",
|
|
@@ -168,7 +183,7 @@ var enMessages = {
|
|
|
168
183
|
"doctor.section.fixable": "Fixable errors:",
|
|
169
184
|
"doctor.section.manual": "Manual errors:",
|
|
170
185
|
"doctor.section.warnings": "Warnings:",
|
|
171
|
-
"doctor.section.fix-knowledge-mutations": "
|
|
186
|
+
"doctor.section.fix-knowledge-mutations": "Knowledge mutations (via --fix):",
|
|
172
187
|
// flat-design follow-up: the remaining doctor UI-shell strings (TL;DR header,
|
|
173
188
|
// --fix mutation plan, filtered --help) move off hardcoded English into i18n so
|
|
174
189
|
// the whole `fabric doctor` surface honours the machine locale. USAGE/OPTIONS/
|
|
@@ -182,7 +197,15 @@ var enMessages = {
|
|
|
182
197
|
// with doctor.check.*; messages carry store alias / counts via interpolation.
|
|
183
198
|
"doctor.store.no-global-config": "no global Fabric config \u2014 run `fabric install --global <url>`",
|
|
184
199
|
"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
|
|
200
|
+
"doctor.store.unbound": "store '{alias}' is mounted but not bound to this project \u2014 paste: `fabric store bind {alias}` then `fabric store switch-write {alias}`",
|
|
201
|
+
"doctor.store.empty": "bound store(s) have 0 knowledge entries ({stores}) \u2014 first-hit cannot succeed until you seed or clone knowledge; run `fabric first-hit --seed` (empty local store) or bind a remote team store with content",
|
|
202
|
+
"doctor.store.no-write-target": "no active write store for this project \u2014 paste: `fabric store bind <alias>` then `fabric store switch-write <alias>` (or `fabric install`)",
|
|
203
|
+
"doctor.store.no-match": "knowledge exists but no entry matches the probe paths \u2014 try broader paths or add relevance_paths for your modules",
|
|
204
|
+
"doctor.store.write-target-mismatch": "active write store '{alias}' is not a valid team write target for this project \u2014 run `fabric store switch-write <mounted-team-alias>`",
|
|
205
|
+
"doctor.store.first-hit-missing-required": "required store(s) not mounted: {ids} \u2014 bind/clone them then re-run `fabric first-hit`",
|
|
206
|
+
"doctor.store.first-hit-unreachable": "bound store dir missing on disk: {aliases} \u2014 remount or re-clone, then `fabric doctor`",
|
|
207
|
+
"doctor.store.hooks-missing": "knowledge present but SessionStart/PreToolUse hooks missing \u2014 re-run `fabric install`",
|
|
208
|
+
"doctor.store.first-hit-ok": "first-hit ready: {count} knowledge entries across {stores}",
|
|
186
209
|
"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
210
|
"doctor.store.local-only": "store '{alias}' is local-only; add a git remote to back it up",
|
|
188
211
|
"doctor.store.executable": "store '{alias}' contains executable/script files ({files}) \u2014 stores are data-only; Fabric never runs them (S65)",
|
|
@@ -191,15 +214,22 @@ var enMessages = {
|
|
|
191
214
|
"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
215
|
"doctor.store.related-hub": "related graph hubs (top {shown} of {total} referenced): {top}",
|
|
193
216
|
"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`",
|
|
217
|
+
"doctor.store.unreachable-bound": "bound store dir missing on disk: {stores} \u2014 re-clone or remount, then fabric doctor",
|
|
194
218
|
"doctor.store.consumption-heatmap": "top consumed (last {days}d, {consumed}/{total} entries read across {windows} window(s)): {top}",
|
|
195
219
|
"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
220
|
"doctor.store.overflow-more": ", \u2026(+{count} more)",
|
|
197
|
-
"doctor.
|
|
221
|
+
"doctor.check.knowledge_body_altitude_dump.name": "Knowledge body altitude",
|
|
222
|
+
"doctor.check.knowledge_body_altitude_dump.ok": "No dump-shaped knowledge bodies detected.",
|
|
223
|
+
"doctor.check.knowledge_body_altitude_dump.message.singular": "1 dump-shaped knowledge body: {detail}",
|
|
224
|
+
"doctor.check.knowledge_body_altitude_dump.message.plural": "{count} dump-shaped knowledge bodies (e.g. {detail})",
|
|
225
|
+
"doctor.check.knowledge_body_altitude_dump.remediation": "Rewrite as reusable decision/pitfall/guideline altitude (## structure), not a session transcript; re-archive via fabric-archive / fab_propose",
|
|
226
|
+
"doctor.check.knowledge_body_altitude_dump.scan_error": "Body-altitude scan failed ({detail}); doctor cannot confirm corpus is clean.",
|
|
227
|
+
"doctor.fix-plan.header": "knowledge mutation plan ({count} total)",
|
|
198
228
|
"doctor.fix-plan.preview": "preview:",
|
|
199
229
|
"doctor.fix-plan.more": "... and {count} more",
|
|
200
230
|
"doctor.help.tagline": "Diagnose and fix Fabric workspace issues",
|
|
201
231
|
"doctor.help.flag.target": "Override project root (defaults to cwd)",
|
|
202
|
-
"doctor.help.flag.fix": "Auto-fix
|
|
232
|
+
"doctor.help.flag.fix": "Auto-fix derived state + auto-safe knowledge lint mutations",
|
|
203
233
|
"doctor.help.flag.json": "Output as JSON for programmatic consumption",
|
|
204
234
|
"doctor.help.flag.verbose": "Show maintainer-audience action hints",
|
|
205
235
|
"doctor.help.example.run": "Run diagnostics",
|
|
@@ -288,11 +318,11 @@ var enMessages = {
|
|
|
288
318
|
"cite-coverage.skip.architectural": "architectural layer",
|
|
289
319
|
"cite-coverage.skip.other": "other",
|
|
290
320
|
"cli.doctor.args.target.description": "Target project path. Defaults to --target, then EXTERNAL_FIXTURE_PATH, then cwd.",
|
|
291
|
-
"cli.doctor.args.fix.description": "Repair derived Fabric state (meta + indexes).",
|
|
321
|
+
"cli.doctor.args.fix.description": "Repair derived Fabric state (meta + indexes) and apply auto-safe knowledge lint mutations (store counter floor, stale session-hints cleanup). Decay/frontmatter lints stay report-only \u2014 remediate those via fabric-review.",
|
|
292
322
|
"cli.doctor.args.json.description": "Print the doctor report as JSON.",
|
|
293
323
|
"cli.doctor.args.strict.description": "Treat warnings as failures.",
|
|
294
|
-
"cli.doctor.args.fix-knowledge.description": "
|
|
295
|
-
"cli.doctor.args.yes.description": "Skip the
|
|
324
|
+
"cli.doctor.args.fix-knowledge.description": "Legacy alias wording: knowledge lint mutations now run under `fabric doctor --fix` (store counter floor + stale session-hints cleanup). Decay lints (orphan demote / stale archive) remain report-only \u2014 remediate via fabric-review. Default doctor run remains report-only.",
|
|
325
|
+
"cli.doctor.args.yes.description": "Skip the knowledge-mutation safety confirm inside `fabric doctor --fix`. Required for non-tty invocations unless FABRIC_NONINTERACTIVE=1 is set in the environment.",
|
|
296
326
|
// rc.35 TASK-12 (P0-11): --verbose unfolds maintainer-audience hints.
|
|
297
327
|
"cli.doctor.args.verbose.description": "Show all action hints including maintainer-audience ones (Fabric contributors editing the source tree). By default these are folded for npm end users.",
|
|
298
328
|
"doctor.maintainer-hint-folded": "(maintainer-only remediation \u2014 re-run with `fabric doctor --verbose` to see)",
|
|
@@ -401,7 +431,7 @@ var enMessages = {
|
|
|
401
431
|
"doctor.check.events_jsonl_health.message.metric_leak": ".fabric/events.jsonl contains {count} rows with metric-counter event_types ({samples}). Those events should be aggregated in metrics.jsonl, not in the audit ledger.",
|
|
402
432
|
"doctor.check.events_jsonl_health.message.metrics_stale": ".fabric/metrics.jsonl hasn't been updated for {minutes} minutes; the server-side 60s flush may be stalled.",
|
|
403
433
|
"doctor.check.events_jsonl_health.message.rotation_overdue": ".fabric/events.jsonl hasn't rotated for {days} days; the 6h rotation tick may not be running.",
|
|
404
|
-
"doctor.check.events_jsonl_health.remediation": "Run `fabric doctor --fix` \u2014 it triggers
|
|
434
|
+
"doctor.check.events_jsonl_health.remediation": "Run `fabric doctor --fix` \u2014 it triggers events.jsonl rotation (honors fabric_event_retention_days: 7|30|90 in .fabric/fabric-config.json) AND flushes metrics.jsonl. If the warning persists, restart the MCP server so startMetricsFlush + startRotationTick reschedule. If metric_leak fires, audit recent code changes for direct appendEventLedgerEvent calls bypassing bumpCounter for one of the 4 metric-managed event_types.",
|
|
405
435
|
"doctor.check.event_ledger_partial_write.name": "Event ledger partial write",
|
|
406
436
|
"doctor.check.event_ledger_partial_write.ok.skipped": "No partial-write check needed (ledger missing or not writable).",
|
|
407
437
|
"doctor.check.event_ledger_partial_write.message": "events.jsonl has a partial write at byte offset {byteOffset} ({byteLength} corrupted bytes). Run --fix to truncate and preserve corrupted bytes.",
|
|
@@ -425,9 +455,9 @@ var enMessages = {
|
|
|
425
455
|
"doctor.check.retired_reference.ok": "No retired tool/field names linger in the bootstrap, SKILL.md, or installed hooks.",
|
|
426
456
|
"doctor.check.retired_reference.message": "{count} stale pointer(s) to retired tool/field names in agent-facing text: {sample}",
|
|
427
457
|
"doctor.check.retired_reference.remediation": "Update the flagged text to the replacement token (or remove it), then re-run `fabric install` to resync the dogfood mirrors.",
|
|
428
|
-
// v2.0.0-rc.33 W3-6 (P1-13): SKILL.md token budget lint. warn >
|
|
458
|
+
// v2.0.0-rc.33 W3-6 (P1-13): SKILL.md token budget lint. warn > 8K / error > 10K tokens (chars/3 estimate). Anthropic recommends SKILL.md hot path stay ~3K, but the two watched skills (fabric-archive/review) are the richest core skills and legitimately run larger; warn sits at 8K (a 2K reaction buffer below the 10K install-abort hard cap) rather than 5K. Over 10K is blocking (wasted model context + load latency).
|
|
429
459
|
"doctor.check.skill_token_budget.name": "Skill token budget",
|
|
430
|
-
"doctor.check.skill_token_budget.ok": "All .claude/skills/<slug>/SKILL.md files are within token budget (warn
|
|
460
|
+
"doctor.check.skill_token_budget.ok": "All .claude/skills/<slug>/SKILL.md files are within token budget (warn 8K / error 10K).",
|
|
431
461
|
"doctor.check.skill_token_budget.message.singular": "{count} SKILL.md exceeds the token budget: {list}. Sink detail into ref/ for progressive disclosure.",
|
|
432
462
|
"doctor.check.skill_token_budget.message.plural": "{count} SKILL.md files exceed the token budget: {list}. Sink detail into ref/ for progressive disclosure.",
|
|
433
463
|
"doctor.check.skill_token_budget.remediation": "Move detailed phase / worked-examples / decision tables out of the SKILL.md hot path into `templates/skills/<slug>/ref/*.md`. Keep SKILL.md focused on trigger-gate + key-phase summaries; see W1 progressive disclosure split. Re-run `fabric install` to sync both client subtrees.",
|
|
@@ -511,7 +541,7 @@ var enMessages = {
|
|
|
511
541
|
"doctor.check.index_drift.ok": "agents.meta.json counters envelope is at or above the highest existing canonical counter for every (layer, type) pair.",
|
|
512
542
|
"doctor.check.index_drift.message.singular": "{count} (layer, type) counter slot have drifted below the observed canonical maximum (next allocate would collide). First: {detail}.",
|
|
513
543
|
"doctor.check.index_drift.message.plural": "{count} (layer, type) counter slots have drifted below the observed canonical maximum (next allocate would collide). First: {detail}.",
|
|
514
|
-
"doctor.check.index_drift.remediation": "Run `fabric doctor --fix
|
|
544
|
+
"doctor.check.index_drift.remediation": "Run `fabric doctor --fix` to bump agents.meta.json counters to max_observed + 1.",
|
|
515
545
|
"doctor.check.underseeded.name": "Knowledge underseeded",
|
|
516
546
|
"doctor.check.underseeded.ok": "Knowledge corpus has {count} canonical entries (>= {threshold}).",
|
|
517
547
|
"doctor.check.underseeded.message.singular": "Knowledge corpus has only {count} canonical entry (< {threshold} threshold). The plan_context retrieval surface is below its useful floor.",
|
|
@@ -521,7 +551,7 @@ var enMessages = {
|
|
|
521
551
|
"doctor.check.session_hints_stale.ok": "No session-hints cache files older than {days} days under .fabric/.cache/.",
|
|
522
552
|
"doctor.check.session_hints_stale.message.singular": "{count} session-hints cache file under .fabric/.cache/ is older than {days} days. First: {detail}.",
|
|
523
553
|
"doctor.check.session_hints_stale.message.plural": "{count} session-hints cache files under .fabric/.cache/ are older than {days} days. First: {detail}.",
|
|
524
|
-
"doctor.check.session_hints_stale.remediation": "Run `fabric doctor --fix
|
|
554
|
+
"doctor.check.session_hints_stale.remediation": "Run `fabric doctor --fix` to delete stale session-hints cache files.",
|
|
525
555
|
"doctor.check.hook_cache_writable.name": "Hook cache writable",
|
|
526
556
|
"doctor.check.hook_cache_writable.ok": "Hook sidecar cache path {path} accepts write probes.",
|
|
527
557
|
"doctor.check.hook_cache_writable.message": "Hook sidecar cache path {path} is not writable; hook state updates will silently fail. Error: {error}.",
|
|
@@ -604,6 +634,7 @@ var enMessages = {
|
|
|
604
634
|
"doctor.check.relevance_paths_drift.message.plural": "{count} narrow-scope canonical entries have relevance_paths whose globs match no file touched in the last {windowDays}d of git history. First: {detail}.",
|
|
605
635
|
"doctor.check.relevance_paths_drift.remediation": "Review whether the entry is still relevant \u2014 use `fab_review.modify` to refresh the anchors or `fab_review.reject` to archive.",
|
|
606
636
|
// W4-3 (KT-MOD-0001): narrow-scope entry with an empty relevance_paths set.
|
|
637
|
+
"doctor.check.relevance_paths_drift.remediation_with_sample": "Review whether the entry is still relevant \u2014 sample {sample}; refresh anchors via `fab_review.modify`, or archive via `fab_review.reject`.",
|
|
607
638
|
"doctor.check.narrow_no_paths.name": "Knowledge narrow scope without paths",
|
|
608
639
|
"doctor.check.narrow_no_paths.ok": "Every narrow-scope canonical entry carries at least one relevance_path.",
|
|
609
640
|
"doctor.check.narrow_no_paths.message.singular": "{count} narrow-scope entry has an empty relevance_paths set \u2014 it can never path-match, so it will never surface (permanently dead). First: {detail}.",
|
|
@@ -655,6 +686,14 @@ var enMessages = {
|
|
|
655
686
|
"doctor.check.stray_fabric_dir_detected.ok": "No stray .fabric directories under the project root \u2014 the only authoritative anchor is <projectRoot>/.fabric.",
|
|
656
687
|
"doctor.check.stray_fabric_dir_detected.message": "Found {count} stray .fabric director(ies) ({dirs}) left by subprocesses that mistook a subdirectory for the project root (pre-rc.10 hooks / pre-rc.11 server-side). These scatter events.jsonl / metrics.jsonl / .cache across the source tree.",
|
|
657
688
|
"doctor.check.stray_fabric_dir_detected.remediation": "Run `fabric doctor --fix` to rename each stray dir to `.fabric.stale-<timestamp>` (rescue-before-delete \u2014 never a hard delete). Review the renamed dirs before merging events. Also upgrade global fabric-cli to rc.11+ so the server-side git-anchor resolver is active.",
|
|
689
|
+
// legacy_fabric_cache_dir_detected — the recall engine's BM25 / vector
|
|
690
|
+
// caches used to live at `.fabric/cache/{bm25,vectors}`; unify-fabric-cache-dir
|
|
691
|
+
// moved them into `.fabric/.cache/` next to the hook sidecar cache so one
|
|
692
|
+
// .gitignore rule covers both. Old data is intact; the fix is a rename.
|
|
693
|
+
"doctor.check.legacy_fabric_cache_dir_detected.name": "Legacy .fabric/cache/ directories",
|
|
694
|
+
"doctor.check.legacy_fabric_cache_dir_detected.ok": "Recall caches live under .fabric/.cache/ \u2014 no legacy .fabric/cache/{bm25,vectors} remains.",
|
|
695
|
+
"doctor.check.legacy_fabric_cache_dir_detected.message": "Found {count} legacy recall-cache dir(s) ({dirs}). These pre-date the unify-fabric-cache-dir move to .fabric/.cache/; the on-disk data (BM25 snapshots / vector embeddings) is intact \u2014 a rename preserves it.",
|
|
696
|
+
"doctor.check.legacy_fabric_cache_dir_detected.remediation": "Run `fabric doctor --fix` to rename each legacy dir into its `.fabric/.cache/` counterpart (idempotent; skipped if the new path already holds newer data). No re-embed cost is paid; the snapshot files are moved as-is.",
|
|
658
697
|
"doctor.check.skill_md_yaml_invalid.name": "Skill markdown YAML",
|
|
659
698
|
"doctor.check.skill_md_yaml_invalid.ok": "All .claude/.codex SKILL.md frontmatter values parse as strict YAML.",
|
|
660
699
|
"doctor.check.skill_md_yaml_invalid.message.singular": "{count} SKILL.md frontmatter value contains an unquoted ': ' that strict YAML parsers reject (Claude Code tolerates it; Codex CLI drops the skill at load). First: {detail}.",
|
|
@@ -796,6 +835,7 @@ var enMessages = {
|
|
|
796
835
|
// so its MCP server loads — that is the default anchor; the --reapply maintenance
|
|
797
836
|
// hint moves to --verbose.
|
|
798
837
|
"cli.install.next-step.restart": "restart any open Claude Code / Codex session to load Fabric (new sessions pick it up automatically).",
|
|
838
|
+
"cli.install.next-step.nudge-mode": 'Human breadcrumbs default to minimal (one status line/session). Mute with nudge_mode: "silent" in .fabric/fabric-config.json or FABRIC_NUDGE_MODE=silent; raise with normal/verbose.',
|
|
799
839
|
"cli.install.reason-message": "{label} {message}",
|
|
800
840
|
"cli.install.language.prompt": "Choose the Fabric language (used for both UI and knowledge; change later via `fabric config`):",
|
|
801
841
|
"cli.install.language.option.zh-CN": "\u7B80\u4F53\u4E2D\u6587 (zh-CN)",
|
|
@@ -852,7 +892,7 @@ var enMessages = {
|
|
|
852
892
|
"cli.install.semantic.installing": "Running `npm i -g fastembed` \u2026",
|
|
853
893
|
"cli.install.semantic.installed": "fastembed installed. The embedding model downloads automatically on the first recall (~tens\u2013hundreds of MB; no KB data is uploaded).",
|
|
854
894
|
"cli.install.semantic.install-failed": "Auto-install failed ({reason}). Run the steps manually:",
|
|
855
|
-
"cli.install.semantic.manual-steps": " 1. Install the optional embedder where the MCP server resolves modules (a global install is global):\n npm i -g fastembed\n 2. Warm the model cache (the first run downloads the weights, ~tens\u2013hundreds of MB; no KB data is uploaded):\n export FABRIC_EMBED_CACHE_DIR=~/.cache/fabric-embed # strict-offline: pre-place the weights here\n Note: after switching embed_model the existing vector dim/semantics change; the next recall re-embeds with the new model (doc vectors are cached by text and auto-recompute on mismatch).\n Disable: set embed_enabled=false in fabric
|
|
895
|
+
"cli.install.semantic.manual-steps": " 1. Install the optional embedder where the MCP server resolves modules (a global install is global):\n npm i -g fastembed\n 2. Warm the model cache (the first run downloads the weights, ~tens\u2013hundreds of MB; no KB data is uploaded):\n export FABRIC_EMBED_CACHE_DIR=~/.cache/fabric-embed # strict-offline: pre-place the weights here\n Note: after switching embed_model the existing vector dim/semantics change; the next recall re-embeds with the new model (doc vectors are cached by text and auto-recompute on mismatch).\n Disable: set embed_enabled=false in .fabric/fabric-config.json.",
|
|
856
896
|
// C5: store onboarding interactive copy routed through t().
|
|
857
897
|
"cli.install.store.local-store": "local store",
|
|
858
898
|
"cli.install.store.bind-mounted.prompt": "Bind an already-mounted knowledge store to this project?",
|
|
@@ -1019,6 +1059,23 @@ var enMessages = {
|
|
|
1019
1059
|
// per [[fabric-serve-quarantine-not-delete]]. Restore from git history when
|
|
1020
1060
|
// the web UI surface is re-enabled.
|
|
1021
1061
|
// v2.0.0-rc.29 TASK-008 (BUG-L2): onboard-coverage i18n keys.
|
|
1062
|
+
"cli.first-hit.description": "Prove install\u2192first-hit readiness (bind + non-empty knowledge surface)",
|
|
1063
|
+
"cli.first-hit.args.json.description": "Machine-readable JSON report",
|
|
1064
|
+
"cli.first-hit.args.target.description": "Project root (default: cwd)",
|
|
1065
|
+
"cli.first-hit.args.seed.description": "If empty store, write minimal starter knowledge entries",
|
|
1066
|
+
"cli.first-hit.args.paths.description": "Comma-separated probe paths for surface check",
|
|
1067
|
+
"cli.first-hit.msg.ok": "first-hit ready: {total} knowledge entr{plural} across {stores} store(s); hooks present.",
|
|
1068
|
+
"cli.first-hit.msg.unbound": "unbound: no store is bound to this project's read-set \u2014 knowledge cannot surface.",
|
|
1069
|
+
"cli.first-hit.msg.no_write_target": "no_write_target: project has required stores but no active_write_store.",
|
|
1070
|
+
"cli.first-hit.msg.empty_store": "empty_store: store(s) bound but 0 canonical knowledge files \u2014 empty store is not a happy path.",
|
|
1071
|
+
"cli.first-hit.msg.missing_required": "missing_required: one or more required_stores are not mounted \u2014 multi-store bind incomplete.",
|
|
1072
|
+
"cli.first-hit.msg.write_target_mismatch": "write_target_mismatch: active_write_store is not a mounted writable store on the read-set.",
|
|
1073
|
+
"cli.first-hit.msg.store_unreachable": "store_unreachable: a bound store is registered but its directory is missing on disk.",
|
|
1074
|
+
"cli.first-hit.msg.project_unsealed": "project_unsealed: write store is bound but project_id/active_project is missing \u2014 team knowledge will land flat (semantic_scope: team), not project-partitioned.",
|
|
1075
|
+
"cli.first-hit.msg.no_match": "no_match: knowledge exists but the probe surface is empty (path/scope filter).",
|
|
1076
|
+
"cli.first-hit.msg.hooks_missing": "hooks_missing: knowledge is present but SessionStart/PreToolUse hooks are not installed.",
|
|
1077
|
+
"cli.first-hit.msg.no_project": "no_project: this directory is not a Fabric project (missing .fabric/fabric-config.json).",
|
|
1078
|
+
"cli.first-hit.msg.no_global": "no_global: fabric global config missing \u2014 run fabric install --global first.",
|
|
1022
1079
|
"cli.onboard-coverage.description": "Report S5 onboard-slot coverage for the workspace. Used by the fabric-archive Skill's first-run phase to detect unclaimed project-tone slots.",
|
|
1023
1080
|
"cli.onboard-coverage.args.json.description": "Emit machine-readable JSON to stdout instead of the human table.",
|
|
1024
1081
|
"cli.onboard-coverage.args.target.description": "Override the project root (defaults to cwd).",
|
|
@@ -1269,6 +1326,10 @@ var enMessages = {
|
|
|
1269
1326
|
"cli.info.recall.vector.not-ready": "not ready \u2014 recall falls back to keyword mode (BM25 / additive)",
|
|
1270
1327
|
"cli.info.recall.warm.ok": "embedder warm: model '{model}' loaded (vector dim {dim}), cached at {dir}",
|
|
1271
1328
|
"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.",
|
|
1329
|
+
"cli.store.mount.description": "Mount a knowledge store into the global registry",
|
|
1330
|
+
"cli.store.create.description": "Create a brand-new local knowledge store and mount it",
|
|
1331
|
+
"cli.store.remove.description": "Detach a store from the registry (does NOT delete it)",
|
|
1332
|
+
"cli.store.explain.description": "Explain how a store alias resolves",
|
|
1272
1333
|
"cli.store.list.description": "List mounted knowledge stores",
|
|
1273
1334
|
// Footer note appended to `fabric store --help` — explains where the advanced
|
|
1274
1335
|
// (meta.hidden) operations went so the list-only listing isn't a dead end.
|
|
@@ -1342,6 +1403,8 @@ var enMessages = {
|
|
|
1342
1403
|
|
|
1343
1404
|
// src/i18n/locales/zh-CN.ts
|
|
1344
1405
|
var zhCNMessages = {
|
|
1406
|
+
"cli.signpost.retired": "\u547D\u4EE4 `{retired}` \u5DF2\u79FB\u9664\u3002\u8BF7\u6539\u7528 `{successor}`\u3002",
|
|
1407
|
+
"cli.doctor.args.probe.description": "\u8F93\u51FA\u673A\u5668\u53EF\u8BFB JSON \u5C31\u7EEA\u5FEB\u7167(first-hit + store/hooks),\u4E0D\u8DD1 --fix CI \u4F18\u5148\u7528 --probe \u505A\u8F7B\u91CF\u5C31\u7EEA\u5FEB\u7167\uFF1B\u5B8C\u6574 cite-coverage \u626B\u63CF\u6309\u9700\u8FD0\u884C\u3002",
|
|
1345
1408
|
"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",
|
|
1346
1409
|
"cli.shared.created": "\u5DF2\u521B\u5EFA",
|
|
1347
1410
|
"cli.shared.skipped": "\u5DF2\u8DF3\u8FC7",
|
|
@@ -1384,10 +1447,23 @@ var zhCNMessages = {
|
|
|
1384
1447
|
"cli.inspect.explain.census": "\u5168\u96C6\u666E\u67E5",
|
|
1385
1448
|
"cli.inspect.explain.census-total": "\u603B\u8BA1 {total}",
|
|
1386
1449
|
"cli.inspect.error": "inspect \u5931\u8D25:{message}",
|
|
1450
|
+
// `fabric preview` — 本地只读知识预览 web 服务(loopback-only)。
|
|
1451
|
+
"cli.preview.description": "\u542F\u52A8\u672C\u5730\u53EA\u8BFB\u77E5\u8BC6\u9884\u89C8\u9875(\u6D4F\u89C8\u5668\u91CC\u6309\u53D7\u4F17\u5206\u7EC4\u6D4F\u89C8)",
|
|
1452
|
+
"cli.preview.arg.port": "\u76D1\u542C\u7AEF\u53E3(\u9ED8\u8BA4 7777)\u3002",
|
|
1453
|
+
"cli.preview.arg.host": "\u76D1\u542C\u5730\u5740(\u9ED8\u8BA4 127.0.0.1,\u4EC5\u672C\u673A\u53EF\u8BBF\u95EE)\u3002",
|
|
1454
|
+
"cli.preview.arg.open": "\u542F\u52A8\u540E\u81EA\u52A8\u6253\u5F00\u6D4F\u89C8\u5668(\u9ED8\u8BA4\u5F00;\u4F20 --no-open \u5173\u95ED)\u3002",
|
|
1455
|
+
"cli.preview.arg.target": "\u8986\u76D6\u9879\u76EE\u6839\u76EE\u5F55(\u9ED8\u8BA4\u53D6 cwd)\u3002",
|
|
1456
|
+
"cli.preview.arg.variant": "\u9ED8\u8BA4\u6253\u5F00\u7684\u6837\u5F0F\u53D8\u4F53(\u9ED8\u8BA4 lumen;\u5168\u90E8\u98CE\u683C\u89C1 /gallery)\u3002",
|
|
1457
|
+
"cli.preview.gallery-hint": "\u6240\u6709\u6837\u5F0F\u753B\u5ECA:{url}",
|
|
1458
|
+
"cli.preview.started": "\u77E5\u8BC6\u9884\u89C8\u5DF2\u542F\u52A8:{url}",
|
|
1459
|
+
"cli.preview.opening": "\u6B63\u5728\u6253\u5F00\u6D4F\u89C8\u5668\u2026",
|
|
1460
|
+
"cli.preview.stop-hint": "\u6309 Ctrl-C \u505C\u6B62\u3002",
|
|
1461
|
+
"cli.preview.stopped": "\u9884\u89C8\u5DF2\u505C\u6B62\u3002",
|
|
1462
|
+
"cli.preview.error": "preview \u5931\u8D25:{message}",
|
|
1387
1463
|
"cli.audit.description": "\u77E5\u8BC6\u4E0E\u9065\u6D4B\u5BA1\u8BA1 (cite/conflicts/history/metrics)",
|
|
1388
1464
|
// `fabric audit cite` — recall 覆盖率为 0 的自诊断提示。
|
|
1389
|
-
"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\
|
|
1390
|
-
"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
|
|
1465
|
+
"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\u5E38\u89C1\u539F\u56E0:(1) fab_recall \u6F0F\u4F20/\u4F20\u9519 session_id(\u5FC5\u987B\u662F\u771F\u5B9E\u5BA2\u6237\u7AEF session_id;planned \u65E0 session \u6C38\u4E0D\u4E0E edit \u5173\u8054);(2) recall \u7684 paths \u4E0E\u7F16\u8F91\u6587\u4EF6\u65E0 path-overlap(\u81EA\u52A8 cite \u53EA\u8BA1\u91CD\u53E0\u7684 planned.target_paths)\u3002\u4FEE:\u4F20 session_id\u3001\u91CD\u88C5 hooks \u542F\u7528 active-session sidecar\u3001\u6216 fab_recall \u8986\u76D6\u5C06\u7F16\u8F91\u7684\u8DEF\u5F84\u3002\u89C1 AGENTS.md \u4E0E docs/UPGRADE.md\u3002",
|
|
1466
|
+
"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(\u6216 planned \u4E8B\u4EF6 session_id \u4E3A\u7A7A\u5BFC\u81F4\u65E0\u6CD5\u5173\u8054)\u3002\u6539\u524D\u5148 recall \u5E76\u4F20\u5165\u771F\u5B9E\u5BA2\u6237\u7AEF session_id;install \u540E SessionStart \u4F1A\u5199 .fabric/.cache/active-session.json \u4F9B\u670D\u52A1\u7AEF\u56DE\u586B\u3002\u4ECD\u8981\u6C42 path-overlap:recall \u8981\u8986\u76D6\u5C06\u7F16\u8F91\u7684\u6587\u4EF6,\u4E0D\u8981\u53EA recall \u65E0\u5173\u7684 .fabric \u8DEF\u5F84\u3002\u89C1 AGENTS.md \u4E0E docs/UPGRADE.md\u3002",
|
|
1391
1467
|
// `fabric audit --help` — 过滤式帮助(i18n 子命令清单)。
|
|
1392
1468
|
"cli.audit.help.tagline": "\u77E5\u8BC6\u4E0E\u9065\u6D4B\u5BA1\u8BA1\u9762(\u53EA\u8BFB)",
|
|
1393
1469
|
"cli.audit.help.sub.cite": "Cite \u653F\u7B56\u9075\u5FAA\u5EA6\u62A5\u544A",
|
|
@@ -1430,7 +1506,7 @@ var zhCNMessages = {
|
|
|
1430
1506
|
"cli.config.install.args.dry-run.description": "\u4EC5\u9884\u89C8\u5C06\u8981\u53D1\u751F\u7684\u5199\u5165\u64CD\u4F5C\uFF0C\u4E0D\u4FEE\u6539\u6587\u4EF6\u3002",
|
|
1431
1507
|
"cli.config.errors.unknown-client": "\u672A\u77E5\u5BA2\u6237\u7AEF\u201C{client}\u201D\u3002\u8BF7\u4F7F\u7528\u9017\u53F7\u5206\u9694\u5217\u8868\uFF0C\u4F8B\u5982 cc,codex\u3002",
|
|
1432
1508
|
"cli.config.errors.expected-object": "{path} \u4E2D\u5E94\u4E3A\u5BF9\u8C61\u3002",
|
|
1433
|
-
"cli.config.install.no-configs": "\u672A\u68C0\u6D4B\u5230 Fabric MCP \u5BA2\u6237\u7AEF\u914D\u7F6E\u3002\u8BF7\u521B\u5EFA\u5BA2\u6237\u7AEF\u76EE\u5F55\uFF0C\u6216\u5728 fabric
|
|
1509
|
+
"cli.config.install.no-configs": "\u672A\u68C0\u6D4B\u5230 Fabric MCP \u5BA2\u6237\u7AEF\u914D\u7F6E\u3002\u8BF7\u521B\u5EFA\u5BA2\u6237\u7AEF\u76EE\u5F55\uFF0C\u6216\u5728 .fabric/fabric-config.json \u4E2D\u8BBE\u7F6E clientPaths\u3002",
|
|
1434
1510
|
"cli.config.install.no-config-path": "\u8DF3\u8FC7 {client}\uFF1A\u672A\u68C0\u6D4B\u5230\u914D\u7F6E\u8DEF\u5F84\u3002",
|
|
1435
1511
|
"cli.config.install.dry-run": "[dry-run] {client}\uFF1A\u5C06\u5199\u5165 {path}",
|
|
1436
1512
|
"cli.config.install.wrote": "{client}\uFF1A\u5DF2\u5199\u5165 {path}",
|
|
@@ -1499,7 +1575,7 @@ var zhCNMessages = {
|
|
|
1499
1575
|
"doctor.section.fixable": "\u53EF\u4FEE\u590D\u9519\u8BEF\uFF1A",
|
|
1500
1576
|
"doctor.section.manual": "\u9700\u624B\u52A8\u4FEE\u590D\uFF1A",
|
|
1501
1577
|
"doctor.section.warnings": "\u8B66\u544A\uFF1A",
|
|
1502
|
-
"doctor.section.fix-knowledge-mutations": "
|
|
1578
|
+
"doctor.section.fix-knowledge-mutations": "\u77E5\u8BC6\u4FA7\u53D8\u66F4\uFF1A",
|
|
1503
1579
|
// flat-design follow-up: doctor 剩余的 UI-shell 文案(TL;DR 头、--fix 变更计划、
|
|
1504
1580
|
// 过滤版 --help)从硬编码英文搬进 i18n,让整个 `fabric doctor` 输出跟随机器语言。
|
|
1505
1581
|
// USAGE/OPTIONS/EXAMPLES 标签保持英文,与其它命令 --help 的 citty renderUsage 对齐。
|
|
@@ -1511,7 +1587,15 @@ var zhCNMessages = {
|
|
|
1511
1587
|
// 文案通过插值带上 store alias / 计数。
|
|
1512
1588
|
"doctor.store.no-global-config": "\u65E0\u5168\u5C40 Fabric \u914D\u7F6E \u2014\u2014 \u8FD0\u884C `fabric install --global <url>`",
|
|
1513
1589
|
"doctor.store.missing-required": "\u5FC5\u9700 store '{id}' \u672A\u6302\u8F7D;\u8FD0\u884C `fabric store mount`",
|
|
1514
|
-
"doctor.store.unbound": "store '{alias}' \u5DF2\u6302\u8F7D\u4F46\u672A\u7ED1\u5B9A\u5230\u672C\u9879\u76EE
|
|
1590
|
+
"doctor.store.unbound": "store '{alias}' \u5DF2\u6302\u8F7D\u4F46\u672A\u7ED1\u5B9A\u5230\u672C\u9879\u76EE \u2014 \u7C98\u8D34\u6267\u884C: `fabric store bind {alias}` \u7136\u540E `fabric store switch-write {alias}`",
|
|
1591
|
+
"doctor.store.empty": "\u5DF2\u7ED1\u5B9A store \u77E5\u8BC6\u6761\u6570\u4E3A 0\uFF08{stores}\uFF09\u2014\u2014\u5728 seed \u6216 clone \u6709\u5185\u5BB9\u524D\u65E0\u6CD5 first-hit\uFF1B\u8FD0\u884C `fabric first-hit --seed`\uFF08\u7A7A\u672C\u5730\u5E93\uFF09\u6216\u7ED1\u5B9A\u5E26\u5185\u5BB9\u7684\u8FDC\u7A0B team store",
|
|
1592
|
+
"doctor.store.no-write-target": "\u672C\u9879\u76EE\u65E0 active write store \u2014 \u7C98\u8D34\u6267\u884C: `fabric store bind <alias>` \u7136\u540E `fabric store switch-write <alias>`\uFF08\u6216 `fabric install`\uFF09",
|
|
1593
|
+
"doctor.store.no-match": "\u77E5\u8BC6\u5B58\u5728\u4F46\u4E0E\u63A2\u6D4B\u8DEF\u5F84\u65E0\u5339\u914D \u2014\u2014 \u653E\u5BBD paths \u6216\u4E3A\u6A21\u5757\u8865 relevance_paths",
|
|
1594
|
+
"doctor.store.write-target-mismatch": "\u6D3B\u52A8\u5199\u5E93 '{alias}' \u4E0D\u662F\u672C\u9879\u76EE\u7684\u6709\u6548 team \u5199\u76EE\u6807 \u2014\u2014 \u8FD0\u884C `fabric store switch-write <\u5DF2\u6302\u8F7D team \u522B\u540D>`",
|
|
1595
|
+
"doctor.store.first-hit-missing-required": "\u5FC5\u9700 store \u672A\u6302\u8F7D: {ids} \u2014\u2014 \u5148 bind/clone \u518D\u8DD1 `fabric first-hit`",
|
|
1596
|
+
"doctor.store.first-hit-unreachable": "\u5DF2\u7ED1\u5B9A store \u76EE\u5F55\u78C1\u76D8\u7F3A\u5931: {aliases} \u2014\u2014 remount/re-clone \u540E\u8DD1 `fabric doctor`",
|
|
1597
|
+
"doctor.store.hooks-missing": "\u77E5\u8BC6\u5DF2\u6709\u4F46 SessionStart/PreToolUse hooks \u7F3A\u5931 \u2014\u2014 \u91CD\u8DD1 `fabric install`",
|
|
1598
|
+
"doctor.store.first-hit-ok": "first-hit \u5C31\u7EEA\uFF1A{count} \u6761\u77E5\u8BC6\uFF0Cstore\uFF1A{stores}",
|
|
1515
1599
|
"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/",
|
|
1516
1600
|
"doctor.store.local-only": "store '{alias}' \u4EC5\u672C\u5730;\u52A0\u4E00\u4E2A git remote \u4EE5\u5907\u4EFD",
|
|
1517
1601
|
"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)",
|
|
@@ -1520,15 +1604,22 @@ var zhCNMessages = {
|
|
|
1520
1604
|
"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",
|
|
1521
1605
|
"doctor.store.related-hub": "related \u56FE\u8C31\u67A2\u7EBD(\u524D {shown} / \u5171 {total} \u4E2A\u88AB\u5F15\u7528):{top}",
|
|
1522
1606
|
"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`",
|
|
1607
|
+
"doctor.store.unreachable-bound": "\u5DF2\u7ED1\u5B9A store \u7684\u78C1\u76D8\u76EE\u5F55\u7F3A\u5931\uFF1A{stores} \u2014 \u8BF7 re-clone \u6216 remount\uFF0C\u518D\u8DD1 fabric doctor",
|
|
1523
1608
|
"doctor.store.consumption-heatmap": "\u6D88\u8D39\u70ED\u533A(\u8FD1 {days}d,{consumed}/{total} \u6761\u88AB\u8BFB,\u8DE8 {windows} \u4E2A\u7A97\u53E3):{top}",
|
|
1524
1609
|
"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)",
|
|
1525
1610
|
"doctor.store.overflow-more": ", \u2026(+{count} \u6761)",
|
|
1526
|
-
"doctor.
|
|
1611
|
+
"doctor.check.knowledge_body_altitude_dump.name": "\u77E5\u8BC6\u6B63\u6587 altitude",
|
|
1612
|
+
"doctor.check.knowledge_body_altitude_dump.ok": "\u672A\u53D1\u73B0 dump \u5F62\u6001\u7684\u77E5\u8BC6\u6B63\u6587\u3002",
|
|
1613
|
+
"doctor.check.knowledge_body_altitude_dump.message.singular": "1 \u6761 dump \u5F62\u6001\u77E5\u8BC6\u6B63\u6587: {detail}",
|
|
1614
|
+
"doctor.check.knowledge_body_altitude_dump.message.plural": "{count} \u6761 dump \u5F62\u6001\u77E5\u8BC6\u6B63\u6587(\u4F8B\u5982 {detail})",
|
|
1615
|
+
"doctor.check.knowledge_body_altitude_dump.remediation": "\u6539\u5199\u6210\u53EF\u590D\u7528\u7684 decision/pitfall/guideline altitude(\u5E26 ## \u7ED3\u6784),\u4E0D\u8981\u8D34 session \u6D41\u6C34;\u7ECF fabric-archive / fab_propose \u91CD\u5F52\u6863",
|
|
1616
|
+
"doctor.check.knowledge_body_altitude_dump.scan_error": "\u6B63\u6587 altitude \u626B\u63CF\u5931\u8D25({detail});doctor \u65E0\u6CD5\u786E\u8BA4\u8BED\u6599\u5E72\u51C0\u3002",
|
|
1617
|
+
"doctor.fix-plan.header": "\u77E5\u8BC6\u4FA7\u53D8\u66F4\u8BA1\u5212(\u5171 {count} \u9879)",
|
|
1527
1618
|
"doctor.fix-plan.preview": "\u9884\u89C8:",
|
|
1528
1619
|
"doctor.fix-plan.more": "... \u8FD8\u6709 {count} \u9879",
|
|
1529
1620
|
"doctor.help.tagline": "\u8BCA\u65AD\u5E76\u4FEE\u590D Fabric \u5DE5\u4F5C\u533A\u95EE\u9898",
|
|
1530
1621
|
"doctor.help.flag.target": "\u8986\u76D6\u9879\u76EE\u6839\u76EE\u5F55(\u9ED8\u8BA4\u5F53\u524D\u76EE\u5F55)",
|
|
1531
|
-
"doctor.help.flag.fix": "\u81EA\u52A8\u4FEE\u590D(\u6D3E\u751F\u72B6\u6001 + \u77E5\u8BC6
|
|
1622
|
+
"doctor.help.flag.fix": "\u81EA\u52A8\u4FEE\u590D(\u6D3E\u751F\u72B6\u6001 + \u77E5\u8BC6\u4FA7 cache/counter \u53D8\u66F4)",
|
|
1532
1623
|
"doctor.help.flag.json": "\u4EE5 JSON \u8F93\u51FA\u4F9B\u7A0B\u5E8F\u6D88\u8D39",
|
|
1533
1624
|
"doctor.help.flag.verbose": "\u663E\u793A\u9762\u5411\u7EF4\u62A4\u8005\u7684\u64CD\u4F5C\u63D0\u793A",
|
|
1534
1625
|
"doctor.help.example.run": "\u8FD0\u884C\u8BCA\u65AD",
|
|
@@ -1611,11 +1702,11 @@ var zhCNMessages = {
|
|
|
1611
1702
|
"cite-coverage.skip.architectural": "\u67B6\u6784\u5C42",
|
|
1612
1703
|
"cite-coverage.skip.other": "\u5176\u4ED6",
|
|
1613
1704
|
"cli.doctor.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",
|
|
1614
|
-
"cli.doctor.args.fix.description": "\u4FEE\u590D
|
|
1705
|
+
"cli.doctor.args.fix.description": "\u81EA\u52A8\u4FEE\u590D\u6D3E\u751F\u72B6\u6001\uFF08meta/\u7D22\u5F15/\u9501\uFF09\u4E0E\u77E5\u8BC6\u4FA7\u53D8\u66F4\uFF08store \u8BA1\u6570\u5668 floor\u3001\u9648\u65E7 session-hints \u7F13\u5B58\u6E05\u7406\uFF09\u3002\u8870\u51CF\u7C7B lint(orphan demote / stale archive)\u4ECD\u53EA\u8BFB\u4E0A\u62A5 \u2014 \u8BF7\u8D70 fab_review\u3002",
|
|
1615
1706
|
"cli.doctor.args.json.description": "\u4EE5 JSON \u8F93\u51FA doctor \u62A5\u544A\u3002",
|
|
1616
1707
|
"cli.doctor.args.strict.description": "\u5C06 warning \u4E5F\u89C6\u4E3A\u5931\u8D25\u3002",
|
|
1617
|
-
"cli.doctor.args.fix-knowledge.description": "\
|
|
1618
|
-
"cli.doctor.args.yes.description": "\u8DF3\u8FC7 --fix
|
|
1708
|
+
"cli.doctor.args.fix-knowledge.description": "\uFF08\u5185\u90E8/legacy \u540D\u79F0\uFF09\u77E5\u8BC6\u4FA7 mutation \u81C2\uFF0C\u73B0\u5DF2\u7531 `fabric doctor --fix` \u4E00\u5E76\u8C03\u7528\u3002\u52FF\u518D\u5355\u72EC\u4F9D\u8D56 --fix-knowledge\u3002",
|
|
1709
|
+
"cli.doctor.args.yes.description": "\u8DF3\u8FC7 --fix \u77E5\u8BC6\u4FA7\u5B89\u5168\u786E\u8BA4\uFF1B\u975E tty \u8C03\u7528\u5FC5\u987B\u663E\u5F0F\u8BBE\u7F6E\u8BE5\u6807\u8BB0\uFF0C\u6216\u5728\u73AF\u5883\u53D8\u91CF\u4E2D\u8BBE\u7F6E FABRIC_NONINTERACTIVE=1\u3002",
|
|
1619
1710
|
// rc.35 TASK-12 (P0-11): --verbose 展开 maintainer 受众的 remediation。
|
|
1620
1711
|
"cli.doctor.args.verbose.description": "\u5C55\u5F00\u5168\u90E8 action hint,\u5305\u62EC maintainer \u53D7\u4F17\u7684(Fabric \u8D21\u732E\u8005\u4FEE\u6E90\u7801\u7528)\u3002\u9ED8\u8BA4 npm \u7EC8\u7AEF\u7528\u6237\u89C6\u56FE\u4F1A\u628A\u8FD9\u4E9B\u6298\u53E0\u3002",
|
|
1621
1712
|
"doctor.maintainer-hint-folded": "(maintainer-only remediation \u2014 \u52A0 `fabric doctor --verbose` \u67E5\u770B)",
|
|
@@ -1722,7 +1813,7 @@ var zhCNMessages = {
|
|
|
1722
1813
|
"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",
|
|
1723
1814
|
"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",
|
|
1724
1815
|
"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",
|
|
1725
|
-
"doctor.check.events_jsonl_health.remediation": "\u8FD0\u884C `fabric doctor --fix` \u2014\u2014 \
|
|
1816
|
+
"doctor.check.events_jsonl_health.remediation": "\u8FD0\u884C `fabric doctor --fix` \u2014\u2014 \u4F1A\u6309 .fabric/fabric-config.json \u7684 fabric_event_retention_days(7|30|90) \u8F6E\u8F6C events.jsonl\uFF0C\u5E76 flush metrics.jsonl\u3002\u82E5\u544A\u8B66\u4ECD\u6301\u7EED\uFF0C\u518D\u91CD\u542F MCP server \u8BA9 startMetricsFlush + startRotationTick \u91CD\u65B0\u8C03\u5EA6\u3002\u82E5 metric_leak \u547D\u4E2D\uFF0C\u68C0\u67E5\u6700\u8FD1\u4EE3\u7801\u662F\u5426\u7ED5\u8FC7 bumpCounter \u76F4\u63A5\u5199\u4E86 metric-managed event_type\u3002",
|
|
1726
1817
|
"doctor.check.event_ledger_partial_write.name": "\u4E8B\u4EF6\u8D26\u672C\u534A\u622A\u5199\u5165",
|
|
1727
1818
|
"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",
|
|
1728
1819
|
"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",
|
|
@@ -1746,9 +1837,9 @@ var zhCNMessages = {
|
|
|
1746
1837
|
"doctor.check.retired_reference.ok": "bootstrap\u3001SKILL.md\u3001\u5DF2\u5B89\u88C5 hooks \u4E2D\u65E0\u6B8B\u7559\u7684\u9000\u5F79\u5DE5\u5177/\u5B57\u6BB5\u540D\u3002",
|
|
1747
1838
|
"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}",
|
|
1748
1839
|
"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",
|
|
1749
|
-
// v2.0.0-rc.33 W3-6 (P1-13): SKILL.md token budget lint。warn >
|
|
1840
|
+
// v2.0.0-rc.33 W3-6 (P1-13): SKILL.md token budget lint。warn > 8K / error > 10K token (chars/3 估算)。Anthropic 推荐 SKILL.md 热路径 ~3K, 但被监控的两个 skill (fabric-archive/review) 是最丰富的核心 skill, 合理偏大;warn 定在 8K (距 10K 装机硬闸留 2K 反应缓冲) 而非 5K。超过 10K 是阻断级 (model context 浪费 + 加载延迟)。
|
|
1750
1841
|
"doctor.check.skill_token_budget.name": "Skill token \u9884\u7B97",
|
|
1751
|
-
"doctor.check.skill_token_budget.ok": "\u6240\u6709 .claude/skills/<slug>/SKILL.md \u5728 token budget \u5185 (warn
|
|
1842
|
+
"doctor.check.skill_token_budget.ok": "\u6240\u6709 .claude/skills/<slug>/SKILL.md \u5728 token budget \u5185 (warn 8K / error 10K)\u3002",
|
|
1752
1843
|
"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",
|
|
1753
1844
|
"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",
|
|
1754
1845
|
"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",
|
|
@@ -1832,7 +1923,7 @@ var zhCNMessages = {
|
|
|
1832
1923
|
"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",
|
|
1833
1924
|
"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",
|
|
1834
1925
|
"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",
|
|
1835
|
-
"doctor.check.index_drift.remediation": "\u8FD0\u884C `fabric doctor --fix
|
|
1926
|
+
"doctor.check.index_drift.remediation": "\u8FD0\u884C `fabric doctor --fix` \u5C06 agents.meta.json counters \u63D0\u5347\u5230 max_observed + 1\u3002",
|
|
1836
1927
|
"doctor.check.underseeded.name": "\u77E5\u8BC6\u79CD\u5B50\u4E0D\u8DB3",
|
|
1837
1928
|
"doctor.check.underseeded.ok": "\u77E5\u8BC6\u5E93\u5DF2\u6709 {count} \u4E2A canonical entries\uFF08>= {threshold}\uFF09\u3002",
|
|
1838
1929
|
"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",
|
|
@@ -1842,7 +1933,7 @@ var zhCNMessages = {
|
|
|
1842
1933
|
"doctor.check.session_hints_stale.ok": ".fabric/.cache/ \u4E0B\u6CA1\u6709\u8D85\u8FC7 {days} \u5929\u7684 session-hints cache files\u3002",
|
|
1843
1934
|
"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",
|
|
1844
1935
|
"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",
|
|
1845
|
-
"doctor.check.session_hints_stale.remediation": "\u8FD0\u884C `fabric doctor --fix
|
|
1936
|
+
"doctor.check.session_hints_stale.remediation": "\u8FD0\u884C `fabric doctor --fix` \u5220\u9664\u8FC7\u671F\u7684 session-hints cache files\u3002",
|
|
1846
1937
|
"doctor.check.hook_cache_writable.name": "Hook \u7F13\u5B58\u53EF\u5199",
|
|
1847
1938
|
"doctor.check.hook_cache_writable.ok": "Hook sidecar cache \u8DEF\u5F84 {path} \u53EF\u5199\u5165\u63A2\u9488\u6587\u4EF6\u3002",
|
|
1848
1939
|
"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",
|
|
@@ -1924,6 +2015,7 @@ var zhCNMessages = {
|
|
|
1924
2015
|
"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",
|
|
1925
2016
|
"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",
|
|
1926
2017
|
"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",
|
|
2018
|
+
"doctor.check.relevance_paths_drift.remediation_with_sample": "\u5BA1\u9605\u8BE5 entry \u662F\u5426\u4ECD\u7136\u76F8\u5173 \u2014 \u6837\u672C {sample};\u4F7F\u7528 `fab_review.modify` \u5237\u65B0 anchors,\u6216\u4F7F\u7528 `fab_review.reject` \u5F52\u6863\u3002",
|
|
1927
2019
|
// W4-3 (KT-MOD-0001): narrow scope 但 relevance_paths 为空。
|
|
1928
2020
|
"doctor.check.narrow_no_paths.name": "\u77E5\u8BC6 narrow scope \u7F3A\u8DEF\u5F84",
|
|
1929
2021
|
"doctor.check.narrow_no_paths.ok": "\u6BCF\u6761 narrow scope canonical entry \u90FD\u81F3\u5C11\u5E26\u4E00\u4E2A relevance_path\u3002",
|
|
@@ -1975,6 +2067,14 @@ var zhCNMessages = {
|
|
|
1975
2067
|
"doctor.check.stray_fabric_dir_detected.ok": "\u9879\u76EE\u4E0B\u672A\u53D1\u73B0\u6E38\u79BB .fabric \u76EE\u5F55,\u552F\u4E00\u6743\u5A01\u6839 .fabric \u5C31\u662F <projectRoot>/.fabric\u3002",
|
|
1976
2068
|
"doctor.check.stray_fabric_dir_detected.message": "\u53D1\u73B0 {count} \u4E2A\u6E38\u79BB .fabric \u76EE\u5F55({dirs}),\u5B83\u4EEC\u662F\u5B50\u8FDB\u7A0B\u5728\u5B50\u76EE\u5F55\u88AB\u8BEF\u8BA4\u4F5C project root \u7684\u5386\u53F2\u9057\u7559(rc.10 \u4E4B\u524D\u7684 hook / rc.11 \u4E4B\u524D\u7684 server \u4FA7),\u4F1A\u5BFC\u81F4 events.jsonl / metrics.jsonl / .cache \u6563\u843D\u3002",
|
|
1977
2069
|
"doctor.check.stray_fabric_dir_detected.remediation": "\u8DD1 `fabric doctor --fix` \u4F1A\u628A\u6BCF\u4E2A\u6E38\u79BB dir \u6539\u540D\u4E3A `.fabric.stale-<timestamp>`(rescue-before-delete,\u4E0D\u786C\u5220)\u3002\u6539\u540D\u540E\u53EF\u4EBA\u5DE5\u6838\u5BF9\u662F\u5426\u9700\u8981\u5408\u5E76 events \u518D\u5220\u3002\u540C\u65F6\u5347\u7EA7\u672C\u673A fabric-cli \u81F3 rc.11+ \u8BA9 server \u4FA7 git-anchor \u751F\u6548\u3002",
|
|
2070
|
+
// legacy_fabric_cache_dir_detected — 老版 recall engine 把 BM25/vector 缓存
|
|
2071
|
+
// 放 `.fabric/cache/{bm25,vectors}`;unify-fabric-cache-dir 后统一到
|
|
2072
|
+
// `.fabric/.cache/` 与 hook sidecar 同处,一条 .gitignore 覆盖两者。老数据
|
|
2073
|
+
// 完好,--fix 仅 rename 迁移。
|
|
2074
|
+
"doctor.check.legacy_fabric_cache_dir_detected.name": "\u8001\u7248 .fabric/cache/ \u76EE\u5F55",
|
|
2075
|
+
"doctor.check.legacy_fabric_cache_dir_detected.ok": "Recall \u7F13\u5B58\u5DF2\u5728 .fabric/.cache/ \u4E0B,\u65E0\u6B8B\u7559 .fabric/cache/{bm25,vectors}\u3002",
|
|
2076
|
+
"doctor.check.legacy_fabric_cache_dir_detected.message": "\u53D1\u73B0 {count} \u4E2A\u8001\u7248 recall \u7F13\u5B58\u76EE\u5F55({dirs})\u3002\u8FD9\u4E9B\u662F unify-fabric-cache-dir \u4E4B\u524D\u7684\u4F4D\u7F6E;\u78C1\u76D8\u4E0A\u7684 BM25 \u5FEB\u7167 / \u5411\u91CF embedding \u6570\u636E\u5B8C\u597D,rename \u5373\u53EF\u4FDD\u7559\u3002",
|
|
2077
|
+
"doctor.check.legacy_fabric_cache_dir_detected.remediation": "\u8DD1 `fabric doctor --fix` \u628A\u6BCF\u4E2A\u8001\u76EE\u5F55 rename \u5230 `.fabric/.cache/` \u5BF9\u5E94\u4F4D\u7F6E(\u5E42\u7B49;\u82E5\u65B0\u8DEF\u5F84\u5DF2\u6709\u66F4\u65B0\u6570\u636E\u5219\u8DF3\u8FC7)\u3002\u4E0D\u6D89\u53CA\u91CD\u65B0 embed,\u5FEB\u7167\u6587\u4EF6\u539F\u6837\u8FC1\u79FB\u3002",
|
|
1978
2078
|
"doctor.check.skill_md_yaml_invalid.name": "Skill markdown YAML",
|
|
1979
2079
|
"doctor.check.skill_md_yaml_invalid.ok": "\u6240\u6709 .claude/.codex SKILL.md frontmatter values \u90FD\u80FD\u6309 strict YAML \u89E3\u6790\u3002",
|
|
1980
2080
|
"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",
|
|
@@ -2109,6 +2209,7 @@ var zhCNMessages = {
|
|
|
2109
2209
|
// flat-design (G6): 装完最该做的事是重启客户端让 MCP 生效 —— 这才是默认锚点动作;
|
|
2110
2210
|
// --reapply 维护提示退到 --verbose。
|
|
2111
2211
|
"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",
|
|
2212
|
+
"cli.install.next-step.nudge-mode": '\u4EBA\u53EF\u89C1\u63D0\u793A\u9ED8\u8BA4 minimal\uFF08\u6BCF\u4F1A\u8BDD\u4E00\u6761\u72B6\u6001\uFF09\u3002\u53EF\u5728 .fabric/fabric-config.json \u8BBE nudge_mode: "silent" \u9759\u97F3\uFF0C\u6216 FABRIC_NUDGE_MODE=silent\uFF1B\u8981\u66F4\u5435\u7528 normal/verbose\u3002',
|
|
2112
2213
|
"cli.install.reason-message": "{label} {message}",
|
|
2113
2214
|
"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",
|
|
2114
2215
|
"cli.install.language.option.zh-CN": "\u7B80\u4F53\u4E2D\u6587 (zh-CN)",
|
|
@@ -2164,7 +2265,7 @@ var zhCNMessages = {
|
|
|
2164
2265
|
"cli.install.semantic.installing": "\u6B63\u5728\u8FD0\u884C `npm i -g fastembed` \u2026",
|
|
2165
2266
|
"cli.install.semantic.installed": "fastembed \u5B89\u88C5\u5B8C\u6210\u3002\u5D4C\u5165\u6A21\u578B\u4F1A\u5728\u9996\u6B21\u53EC\u56DE (recall) \u65F6\u81EA\u52A8\u4E0B\u8F7D\uFF08\u7EA6\u6570\u5341\u2013\u6570\u767E MB\uFF1B\u4E0D\u4E0A\u4F20\u4EFB\u4F55 KB \u6570\u636E\uFF09\u3002",
|
|
2166
2267
|
"cli.install.semantic.install-failed": "\u81EA\u52A8\u5B89\u88C5\u5931\u8D25\uFF08{reason}\uFF09\u3002\u8BF7\u624B\u52A8\u6267\u884C\u4E0B\u9762\u7684\u6B65\u9AA4\uFF1A",
|
|
2167
|
-
"cli.install.semantic.manual-steps": " 1. \u5B89\u88C5\u53EF\u9009 embedder (\u5411\u91CF\u7F16\u7801\u5668\uFF0C\u88C5\u5230 MCP server \u89E3\u6790\u6A21\u5757\u7684\u4F4D\u7F6E \u2014 \u5168\u5C40\u5B89\u88C5\u5373\u5168\u5C40):\n npm i -g fastembed\n 2. \u9884\u70ED\u6A21\u578B\u7F13\u5B58 (\u9996\u8DD1\u4F1A\u8054\u7F51\u4E0B\u8F7D\u6A21\u578B\u6743\u91CD ~\u6570\u5341-\u6570\u767E MB, \u4E0D\u4E0A\u4F20\u4EFB\u4F55 KB \u6570\u636E):\n export FABRIC_EMBED_CACHE_DIR=~/.cache/fabric-embed # \u4E25\u683C\u79BB\u7EBF\u8005\u9884\u5148\u653E\u597D\u6743\u91CD\n \u6CE8: \u5207\u6362 embed_model \u540E\u5DF2\u6709\u5411\u91CF\u7EF4\u5EA6/\u8BED\u4E49\u53D8\u5316, \u4E0B\u6B21 recall \u4F1A\u6309\u65B0\u6A21\u578B\u91CD\u65B0\u5D4C\u5165 (doc \u5411\u91CF\u6309\u6587\u672C\u7F13\u5B58, \u81EA\u52A8\u5931\u914D\u91CD\u7B97)\u3002\n \u5173\u95ED: \u7F16\u8F91 fabric
|
|
2268
|
+
"cli.install.semantic.manual-steps": " 1. \u5B89\u88C5\u53EF\u9009 embedder (\u5411\u91CF\u7F16\u7801\u5668\uFF0C\u88C5\u5230 MCP server \u89E3\u6790\u6A21\u5757\u7684\u4F4D\u7F6E \u2014 \u5168\u5C40\u5B89\u88C5\u5373\u5168\u5C40):\n npm i -g fastembed\n 2. \u9884\u70ED\u6A21\u578B\u7F13\u5B58 (\u9996\u8DD1\u4F1A\u8054\u7F51\u4E0B\u8F7D\u6A21\u578B\u6743\u91CD ~\u6570\u5341-\u6570\u767E MB, \u4E0D\u4E0A\u4F20\u4EFB\u4F55 KB \u6570\u636E):\n export FABRIC_EMBED_CACHE_DIR=~/.cache/fabric-embed # \u4E25\u683C\u79BB\u7EBF\u8005\u9884\u5148\u653E\u597D\u6743\u91CD\n \u6CE8: \u5207\u6362 embed_model \u540E\u5DF2\u6709\u5411\u91CF\u7EF4\u5EA6/\u8BED\u4E49\u53D8\u5316, \u4E0B\u6B21 recall \u4F1A\u6309\u65B0\u6A21\u578B\u91CD\u65B0\u5D4C\u5165 (doc \u5411\u91CF\u6309\u6587\u672C\u7F13\u5B58, \u81EA\u52A8\u5931\u914D\u91CD\u7B97)\u3002\n \u5173\u95ED: \u7F16\u8F91 .fabric/fabric-config.json \u8BBE embed_enabled=false\u3002",
|
|
2168
2269
|
// C5: store onboarding 交互文案统一走 t()。
|
|
2169
2270
|
"cli.install.store.local-store": "\u672C\u5730 store",
|
|
2170
2271
|
"cli.install.store.bind-mounted.prompt": "\u628A\u4E00\u4E2A\u5DF2\u6302\u8F7D\u7684\u77E5\u8BC6 store \u7ED1\u5B9A\u5230\u672C\u9879\u76EE\uFF1F",
|
|
@@ -2330,6 +2431,23 @@ var zhCNMessages = {
|
|
|
2330
2431
|
// per [[fabric-serve-quarantine-not-delete]]. Restore from git history when
|
|
2331
2432
|
// the web UI surface is re-enabled.
|
|
2332
2433
|
// v2.0.0-rc.29 TASK-008 (BUG-L2): onboard-coverage 国际化键。
|
|
2434
|
+
"cli.first-hit.description": "\u9A8C\u6536 install\u2192first-hit \u5C31\u7EEA\uFF08bind + \u975E\u7A7A\u77E5\u8BC6\u9762\uFF09",
|
|
2435
|
+
"cli.first-hit.args.json.description": "\u673A\u5668\u53EF\u8BFB JSON \u62A5\u544A",
|
|
2436
|
+
"cli.first-hit.args.target.description": "\u9879\u76EE\u6839\uFF08\u9ED8\u8BA4 cwd\uFF09",
|
|
2437
|
+
"cli.first-hit.args.seed.description": "\u82E5 store \u4E3A\u7A7A\u5219\u5199\u5165\u6700\u5C0F starter \u77E5\u8BC6\u6761\u76EE",
|
|
2438
|
+
"cli.first-hit.args.paths.description": "\u9017\u53F7\u5206\u9694\u7684\u63A2\u6D4B\u8DEF\u5F84",
|
|
2439
|
+
"cli.first-hit.msg.ok": "first-hit \u5C31\u7EEA\uFF1A{stores} \u4E2A store \u5171 {total} \u6761\u77E5\u8BC6\uFF1Bhooks \u5DF2\u5B89\u88C5\u3002",
|
|
2440
|
+
"cli.first-hit.msg.unbound": "unbound\uFF1A\u672C\u9879\u76EE read-set \u672A\u7ED1\u5B9A\u4EFB\u4F55 store\uFF0C\u77E5\u8BC6\u65E0\u6CD5\u6D6E\u73B0\u3002",
|
|
2441
|
+
"cli.first-hit.msg.no_write_target": "no_write_target\uFF1A\u5DF2\u6709 required stores \u4F46\u672A\u8BBE\u7F6E active_write_store\u3002",
|
|
2442
|
+
"cli.first-hit.msg.empty_store": "empty_store\uFF1Astore \u5DF2\u7ED1\u5B9A\u4F46\u89C4\u8303\u77E5\u8BC6\u6587\u4EF6\u4E3A 0 \u2014 \u7A7A store \u4E0D\u662F\u6210\u529F\u8DEF\u5F84\u3002",
|
|
2443
|
+
"cli.first-hit.msg.missing_required": "missing_required\uFF1Arequired_stores \u4E2D\u6709\u672A\u6302\u8F7D\u7684 store\u3002",
|
|
2444
|
+
"cli.first-hit.msg.write_target_mismatch": "write_target_mismatch\uFF1Aactive_write_store \u4E0D\u5728\u5DF2\u6302\u8F7D\u53EF\u5199 read-set \u4E0A\u3002",
|
|
2445
|
+
"cli.first-hit.msg.store_unreachable": "store_unreachable\uFF1A\u5DF2\u7ED1\u5B9A store \u5728\u6CE8\u518C\u8868\u4E2D\u4F46\u78C1\u76D8\u76EE\u5F55\u7F3A\u5931\u3002",
|
|
2446
|
+
"cli.first-hit.msg.project_unsealed": "project_unsealed\uFF1A\u5DF2\u7ED1\u5B9A\u5199\u5E93\u4F46\u7F3A\u5C11 project_id/active_project \u2014 \u56E2\u961F\u77E5\u8BC6\u4F1A\u843D\u6210 flat\uFF08semantic_scope: team\uFF09\u800C\u975E\u9879\u76EE\u5206\u533A\u3002",
|
|
2447
|
+
"cli.first-hit.msg.no_match": "no_match\uFF1A\u77E5\u8BC6\u5B58\u5728\u4F46\u63A2\u6D4B\u9762\u4E3A\u7A7A\uFF08\u8DEF\u5F84/scope \u8FC7\u6EE4\uFF09\u3002",
|
|
2448
|
+
"cli.first-hit.msg.hooks_missing": "hooks_missing\uFF1A\u77E5\u8BC6\u5DF2\u5728\u4F46 SessionStart/PreToolUse hooks \u672A\u5B89\u88C5\u3002",
|
|
2449
|
+
"cli.first-hit.msg.no_project": "no_project\uFF1A\u5F53\u524D\u76EE\u5F55\u4E0D\u662F Fabric \u9879\u76EE\uFF08\u7F3A\u5C11 .fabric/fabric-config.json\uFF09\u3002",
|
|
2450
|
+
"cli.first-hit.msg.no_global": "no_global\uFF1A\u7F3A\u5C11\u5168\u5C40 fabric \u914D\u7F6E \u2014 \u8BF7\u5148\u8FD0\u884C fabric install --global\u3002",
|
|
2333
2451
|
"cli.onboard-coverage.description": "\u6C47\u603B\u5F53\u524D\u5DE5\u4F5C\u533A\u7684 S5 onboard-slot \u8986\u76D6\u5EA6\u3002fabric-archive Skill \u9996\u8DD1\u9636\u6BB5\u7528\u5B83\u5224\u65AD\u54EA\u4E9B\u9879\u76EE\u8BED\u8C03\u69FD\u4F4D\u5C1A\u672A\u88AB\u8BA4\u9886\u3002",
|
|
2334
2452
|
"cli.onboard-coverage.args.json.description": "\u8F93\u51FA\u673A\u5668\u53EF\u8BFB\u7684 JSON \u5230 stdout\uFF08\u66FF\u4EE3\u4EBA\u7C7B\u53EF\u8BFB\u7684\u8868\u683C\uFF09\u3002",
|
|
2335
2453
|
"cli.onboard-coverage.args.target.description": "\u8986\u76D6\u9879\u76EE\u6839\u76EE\u5F55\uFF08\u9ED8\u8BA4\u4E3A\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55\uFF09\u3002",
|
|
@@ -2579,6 +2697,10 @@ var zhCNMessages = {
|
|
|
2579
2697
|
"cli.info.recall.vector.not-ready": "\u672A\u5C31\u7EEA \u2014\u2014 \u53EC\u56DE\u56DE\u9000\u5230\u5173\u952E\u8BCD\u6A21\u5F0F(BM25 / additive)",
|
|
2580
2698
|
"cli.info.recall.warm.ok": "embedder \u5DF2\u9884\u70ED:\u6A21\u578B '{model}' \u5DF2\u52A0\u8F7D(\u5411\u91CF\u7EF4\u5EA6 {dim}),\u7F13\u5B58\u4E8E {dir}",
|
|
2581
2699
|
"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",
|
|
2700
|
+
"cli.store.mount.description": "\u5C06\u77E5\u8BC6 store \u6302\u8F7D\u5230\u5168\u5C40\u6CE8\u518C\u8868",
|
|
2701
|
+
"cli.store.create.description": "\u521B\u5EFA\u5E76\u6302\u8F7D\u672C\u5730\u77E5\u8BC6 store",
|
|
2702
|
+
"cli.store.remove.description": "\u4ECE\u6CE8\u518C\u8868\u5378\u4E0B store\uFF08\u4E0D\u5220\u9664\u78C1\u76D8\uFF09",
|
|
2703
|
+
"cli.store.explain.description": "\u89E3\u91CA store \u522B\u540D\u5982\u4F55\u89E3\u6790",
|
|
2582
2704
|
"cli.store.list.description": "\u5217\u51FA\u6302\u8F7D\u7684 store",
|
|
2583
2705
|
// 追加在 `fabric store --help` 末尾的说明 —— 交代进阶(meta.hidden)操作去哪了,
|
|
2584
2706
|
// 否则只剩 list 一行会让用户以为 store 没别的能力。
|
package/dist/i18n/index.js
CHANGED
|
@@ -5,12 +5,13 @@ import {
|
|
|
5
5
|
enMessages,
|
|
6
6
|
resolveFabricLocale,
|
|
7
7
|
zhCNMessages
|
|
8
|
-
} from "../chunk-
|
|
8
|
+
} from "../chunk-WXVFJBL5.js";
|
|
9
9
|
import {
|
|
10
10
|
detectNodeLocale,
|
|
11
11
|
normalizeLocale,
|
|
12
12
|
resolveGlobalLocale
|
|
13
|
-
} from "../chunk-
|
|
13
|
+
} from "../chunk-OX6DWUK4.js";
|
|
14
|
+
import "../chunk-C7WZPYZE.js";
|
|
14
15
|
export {
|
|
15
16
|
PROTECTED_TOKENS,
|
|
16
17
|
createTranslator,
|
|
@@ -480,6 +480,7 @@ declare const fabricConfigSchema: z.ZodObject<{
|
|
|
480
480
|
hint_dismiss_signals: z.ZodOptional<z.ZodArray<z.ZodEnum<["archive", "review", "import", "maintenance", "narrow", "cite-evict"]>, "many">>;
|
|
481
481
|
cite_policy_enabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
482
482
|
self_archive_policy_enabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
483
|
+
altitude_propose_gate: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
483
484
|
hint_narrow_top_k: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
484
485
|
hint_narrow_dedup_window_turns: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
485
486
|
hint_broad_cooldown_hours: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
@@ -524,6 +525,7 @@ declare const fabricConfigSchema: z.ZodObject<{
|
|
|
524
525
|
broad_index_backstop: number;
|
|
525
526
|
cite_policy_enabled: boolean;
|
|
526
527
|
self_archive_policy_enabled: boolean;
|
|
528
|
+
altitude_propose_gate: boolean;
|
|
527
529
|
hint_narrow_top_k: number;
|
|
528
530
|
hint_narrow_dedup_window_turns: number;
|
|
529
531
|
hint_broad_cooldown_hours: number;
|
|
@@ -632,6 +634,7 @@ declare const fabricConfigSchema: z.ZodObject<{
|
|
|
632
634
|
hint_dismiss_signals?: ("narrow" | "archive" | "review" | "import" | "maintenance" | "cite-evict")[] | undefined;
|
|
633
635
|
cite_policy_enabled?: boolean | undefined;
|
|
634
636
|
self_archive_policy_enabled?: boolean | undefined;
|
|
637
|
+
altitude_propose_gate?: boolean | undefined;
|
|
635
638
|
hint_narrow_top_k?: number | undefined;
|
|
636
639
|
hint_narrow_dedup_window_turns?: number | undefined;
|
|
637
640
|
hint_broad_cooldown_hours?: number | undefined;
|
|
@@ -733,6 +736,7 @@ declare const fabricConfigLoadSchema: z.ZodObject<{
|
|
|
733
736
|
hint_dismiss_signals: z.ZodOptional<z.ZodArray<z.ZodEnum<["archive", "review", "import", "maintenance", "narrow", "cite-evict"]>, "many">>;
|
|
734
737
|
cite_policy_enabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
735
738
|
self_archive_policy_enabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
739
|
+
altitude_propose_gate: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
736
740
|
hint_narrow_top_k: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
737
741
|
hint_narrow_dedup_window_turns: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
738
742
|
hint_broad_cooldown_hours: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
@@ -788,6 +792,7 @@ declare const fabricConfigLoadSchema: z.ZodObject<{
|
|
|
788
792
|
broad_index_backstop: number;
|
|
789
793
|
cite_policy_enabled: boolean;
|
|
790
794
|
self_archive_policy_enabled: boolean;
|
|
795
|
+
altitude_propose_gate: boolean;
|
|
791
796
|
hint_narrow_top_k: number;
|
|
792
797
|
hint_narrow_dedup_window_turns: number;
|
|
793
798
|
hint_broad_cooldown_hours: number;
|
|
@@ -896,6 +901,7 @@ declare const fabricConfigLoadSchema: z.ZodObject<{
|
|
|
896
901
|
hint_dismiss_signals?: ("narrow" | "archive" | "review" | "import" | "maintenance" | "cite-evict")[] | undefined;
|
|
897
902
|
cite_policy_enabled?: boolean | undefined;
|
|
898
903
|
self_archive_policy_enabled?: boolean | undefined;
|
|
904
|
+
altitude_propose_gate?: boolean | undefined;
|
|
899
905
|
hint_narrow_top_k?: number | undefined;
|
|
900
906
|
hint_narrow_dedup_window_turns?: number | undefined;
|
|
901
907
|
hint_broad_cooldown_hours?: number | undefined;
|