@fenglimg/fabric-shared 2.0.0-rc.15 → 2.0.0-rc.21
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-QZNUUIL3.js +39 -0
- package/dist/{chunk-BKTCBFXZ.js → chunk-VKCXD6CI.js} +178 -36
- package/dist/i18n/index.js +1 -1
- package/dist/index.d.ts +277 -5
- package/dist/index.js +538 -338
- package/dist/templates/bootstrap-canonical.d.ts +56 -0
- package/dist/templates/bootstrap-canonical.js +18 -0
- package/dist/types/index.d.ts +0 -1
- package/package.json +7 -3
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// src/templates/bootstrap-canonical.ts
|
|
2
|
+
var BOOTSTRAP_MARKER_BEGIN = "<!-- fabric:bootstrap:begin -->";
|
|
3
|
+
var BOOTSTRAP_MARKER_END = "<!-- fabric:bootstrap:end -->";
|
|
4
|
+
var LEGACY_KB_MARKER_BEGIN = "<!-- fabric:knowledge-base:begin -->";
|
|
5
|
+
var LEGACY_KB_MARKER_END = "<!-- fabric:knowledge-base:end -->";
|
|
6
|
+
var BOOTSTRAP_REGEX = /(?:\r?\n){0,2}<!-- fabric:bootstrap:begin -->[\s\S]*?<!-- fabric:bootstrap:end -->/;
|
|
7
|
+
var LEGACY_KB_REGEX = /(?:\r?\n){0,2}<!-- fabric:knowledge-base:begin -->[\s\S]*?<!-- fabric:knowledge-base:end -->/;
|
|
8
|
+
var BOOTSTRAP_CANONICAL = `# Fabric Bootstrap
|
|
9
|
+
|
|
10
|
+
\u672C\u9879\u76EE\u4F7F\u7528 Fabric \u7BA1\u7406\u8DE8\u5BA2\u6237\u7AEF AI \u77E5\u8BC6\u4E0E\u884C\u4E3A\u89C4\u5219\u3002\u672C\u6587\u4EF6\u7531 \`fab install\` \u540C\u6B65\u5230\u4E09\u7AEF managed block,**\u4E0D\u8981\u624B\u52A8\u7F16\u8F91\u4E09\u7AEF\u7684 block**,\u53EA\u6539\u8FD9\u91CC + \u91CD\u8DD1 \`fab install\`\u3002
|
|
11
|
+
|
|
12
|
+
## \u884C\u4E3A\u89C4\u5219
|
|
13
|
+
- **\u4FEE\u6539\u4EFB\u4F55\u6587\u4EF6\u524D**:\u5FC5\u987B\u5148\u8C03 \`fab_plan_context(paths=[<\u88AB\u6539\u6587\u4EF6>])\`,\u518D\u8C03 \`fab_get_knowledge_sections\` \u53D6\u76F8\u5173\u89C4\u5219\u6BB5\u843D\u3002
|
|
14
|
+
- **\`.fabric/agents.meta.json\` \u4E25\u7981\u624B\u52A8\u7F16\u8F91**:baseline \u53D8\u66F4\u53EA\u80FD\u901A\u8FC7 \`fabric doctor --fix\` \u63A5\u53D7\u3002
|
|
15
|
+
|
|
16
|
+
## \u77E5\u8BC6\u5E93(KB)
|
|
17
|
+
- **Discovery**:SessionStart hook \u5217 broad-scoped \u6761\u76EE;edit \u6587\u4EF6\u65F6 PreToolUse hook \u53EF\u80FD\u89E6\u53D1 narrow hint\u3002
|
|
18
|
+
- **Usage**:\u7528 \`fab_get_knowledge_sections(id=...)\` \u6309 id \u53D6\u6761\u76EE\u5168\u6587\u3002
|
|
19
|
+
- **Write flows**:\`fabric-archive\` / \`fabric-review\` / \`fabric-import\` \u4E09\u4E2A Skills\u3002
|
|
20
|
+
- **Language**:\u6E32\u67D3\u6309 \`.fabric/fabric-config.json\` \u7684 \`fabric_language\` \u5B57\u6BB5\u3002
|
|
21
|
+
|
|
22
|
+
## Cite policy
|
|
23
|
+
|
|
24
|
+
- **\u89E6\u53D1**: \u505A edit / decide / propose plan \u4E4B\u524D,**\u56DE\u590D\u9996\u884C**\u5FC5\u987B\u5199 \`KB: <id> (<\u22648\u5B57 \u7528\u6CD5>) [planned|recalled|chained-from <id>|dismissed:<reason>]\` \u6216 \`KB: none\`\u3002
|
|
25
|
+
- **\`[recalled]\` \u9A8C\u8BC1**: \u5FC5\u987B\u7D27\u8DDF\u4E00\u6B21 \`fab_get_knowledge_sections(id=...)\`,\u9632\u6B62\u7F16\u9020 id\u3002
|
|
26
|
+
- **\u7528\u6237\u53E3\u5934\u63D0\u89C4\u5219\u6CA1\u7ED9 id**: \u5148\u8C03 \`fab_extract_knowledge\` \u6216 \`search_context\` \u53CD\u67E5\u3002
|
|
27
|
+
- **dismissed reason**: \u679A\u4E3E \`scope-mismatch | outdated | not-applicable | other:<text>\`\u3002
|
|
28
|
+
- **\u7A3D\u6838**: \`fab doctor --cite-coverage [--since=7d] [--client=cc|codex|all]\` \u8F93\u51FA cite \u8986\u76D6\u7387\u3002\u672C\u89C4\u5219\u4E0D\u963B\u65AD\u4F60\u5DE5\u4F5C,\u53EA\u8BB0\u5F55\u3002
|
|
29
|
+
`;
|
|
30
|
+
|
|
31
|
+
export {
|
|
32
|
+
BOOTSTRAP_MARKER_BEGIN,
|
|
33
|
+
BOOTSTRAP_MARKER_END,
|
|
34
|
+
LEGACY_KB_MARKER_BEGIN,
|
|
35
|
+
LEGACY_KB_MARKER_END,
|
|
36
|
+
BOOTSTRAP_REGEX,
|
|
37
|
+
LEGACY_KB_REGEX,
|
|
38
|
+
BOOTSTRAP_CANONICAL
|
|
39
|
+
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// src/i18n/locales/en.ts
|
|
2
2
|
var enMessages = {
|
|
3
|
-
"cli.main.description": "Fabric CLI - AI agent collaboration framework",
|
|
3
|
+
"cli.main.description": "Fabric CLI - AI agent collaboration framework.\n\nThree-step mental model:\n Install (\u88C5) - fab install one-shot project setup\n Configure (\u914D) - fab config interactive configuration panel\n Run (\u8DD1) - fab serve launch the local MCP HTTP service\n fab doctor run target-state diagnostics\n\nExamples:\n fab install install Fabric in the current project\n fab config open the interactive configuration panel\n fab serve --port 7373 start the MCP HTTP service\n fab doctor --fix repair derived Fabric state\n fab uninstall --dry-run preview uninstall without removing files",
|
|
4
4
|
"cli.shared.created": "Created",
|
|
5
5
|
"cli.shared.skipped": "Skipped",
|
|
6
6
|
"cli.shared.next": "Next",
|
|
@@ -38,8 +38,7 @@ var enMessages = {
|
|
|
38
38
|
"cli.bootstrap.install.skipped-header": "Skipped {path}: Fabric Bootstrap header already present.",
|
|
39
39
|
"cli.bootstrap.install.prepended": "Prepended {path}",
|
|
40
40
|
"cli.bootstrap.errors.unknown-client": 'Unknown client "{client}". Use a comma-separated list such as claude,cursor,codex.',
|
|
41
|
-
"cli.config.description": "
|
|
42
|
-
"cli.config.placeholder": "Config panel coming in rc.16 \u2014 edit fabric-config.json directly for now.",
|
|
41
|
+
"cli.config.description": "Open the interactive Fabric configuration panel (language, knowledge layer, audit mode, hint windows, MCP client wiring, etc.).\n\nExamples:\n fab config open the interactive panel\n fab config --target /path edit configuration for a specific project",
|
|
43
42
|
"cli.config.args.target.description": "Target project directory (defaults to cwd).",
|
|
44
43
|
"cli.config.clients.claude": "Claude Code CLI",
|
|
45
44
|
"cli.config.install.description": "Install Fabric MCP server entries into detected client configs.",
|
|
@@ -51,19 +50,86 @@ var enMessages = {
|
|
|
51
50
|
"cli.config.install.no-config-path": "Skipping {client}: no config path detected.",
|
|
52
51
|
"cli.config.install.dry-run": "[dry-run] {client}: would write {path}",
|
|
53
52
|
"cli.config.install.wrote": "{client}: wrote {path}",
|
|
54
|
-
|
|
53
|
+
// rc.16 TASK-006 (F1-panel): clack-driven `fab config` interactive panel.
|
|
54
|
+
// Keys consumed by packages/cli/src/commands/config.ts (menu loop +
|
|
55
|
+
// per-field prompts) and by getPanelFields() (label_i18n_key references).
|
|
56
|
+
"cli.config.intro": "Fabric Configuration",
|
|
57
|
+
"cli.config.outro": "Configuration saved.",
|
|
58
|
+
"cli.config.outro-no-changes": "No changes made.",
|
|
59
|
+
"cli.config.cancel": "Cancelled.",
|
|
60
|
+
"cli.config.non-tty-notice": "fab config requires an interactive terminal. Run it from a TTY to edit configuration fields.",
|
|
61
|
+
"cli.config.menu.field-select": "Select a field to edit:",
|
|
62
|
+
"cli.config.menu.exit": "Exit",
|
|
63
|
+
"cli.config.value.current": "current: {value}",
|
|
64
|
+
"cli.config.value.default-marker": "(default)",
|
|
65
|
+
"cli.config.prompt.select": "Choose a new value for {key} (current: {current}):",
|
|
66
|
+
"cli.config.prompt.text": "Enter a new value for {key} (current: {current}):",
|
|
67
|
+
"cli.config.write.success": "Saved {key} = {value}",
|
|
68
|
+
"cli.config.write.failure": "Failed to write fabric-config.json: {message}",
|
|
69
|
+
"cli.config.errors.uninit-workspace.message": "Workspace not initialized. Run `fab install` first.",
|
|
70
|
+
"cli.config.errors.invalid-int": "Must be a positive integer.",
|
|
71
|
+
"cli.config.errors.unknown-field": "Unknown field selection \u2014 skipping.",
|
|
72
|
+
"cli.config.errors.no-enum-options": "No enum options available for this field \u2014 skipping.",
|
|
73
|
+
// Per-field labels (11 total: 2 Group A + 8 Group B + 1 Group C).
|
|
74
|
+
"cli.config.fields.fabric_language.label": "Language",
|
|
75
|
+
"cli.config.fields.fabric_language.description": "Language used by Fabric hooks and Skills output.",
|
|
76
|
+
"cli.config.fields.default_layer_filter.label": "Default knowledge layer",
|
|
77
|
+
"cli.config.fields.default_layer_filter.description": "Default layer scope for knowledge listings (team / personal / both).",
|
|
78
|
+
"cli.config.fields.archive_hint_hours.label": "Archive hint window (hours)",
|
|
79
|
+
"cli.config.fields.archive_hint_hours.description": "Window (in hours) used by Signal A to detect frequent edits worth archiving.",
|
|
80
|
+
"cli.config.fields.archive_hint_cooldown_hours.label": "Archive hint cooldown (hours)",
|
|
81
|
+
"cli.config.fields.archive_hint_cooldown_hours.description": "Cooldown (in hours) before the same archive hint can fire again.",
|
|
82
|
+
"cli.config.fields.archive_edit_threshold.label": "Archive edit threshold",
|
|
83
|
+
"cli.config.fields.archive_edit_threshold.description": "Edit-count cutoff that triggers the Signal A archive hint.",
|
|
84
|
+
"cli.config.fields.underseed_node_threshold.label": "Underseed node threshold",
|
|
85
|
+
"cli.config.fields.underseed_node_threshold.description": "Minimum knowledge-node count below which Fabric flags the workspace as underseeded.",
|
|
86
|
+
"cli.config.fields.review_hint_pending_count.label": "Review pending count",
|
|
87
|
+
"cli.config.fields.review_hint_pending_count.description": "Pending-review count above which the review hint fires.",
|
|
88
|
+
"cli.config.fields.review_hint_pending_age_days.label": "Review pending age (days)",
|
|
89
|
+
"cli.config.fields.review_hint_pending_age_days.description": "Pending-review age (in days) above which the review hint fires.",
|
|
90
|
+
"cli.config.fields.maintenance_hint_days.label": "Maintenance hint window (days)",
|
|
91
|
+
"cli.config.fields.maintenance_hint_days.description": "Day window for Fabric to surface a knowledge-maintenance hint.",
|
|
92
|
+
"cli.config.fields.maintenance_hint_cooldown_days.label": "Maintenance hint cooldown (days)",
|
|
93
|
+
"cli.config.fields.maintenance_hint_cooldown_days.description": "Cooldown (in days) before the maintenance hint can fire again.",
|
|
94
|
+
"cli.config.fields.audit_mode.label": "Audit mode",
|
|
95
|
+
"cli.config.fields.audit_mode.description": "Audit verbosity for human-lock + drift detection (strict / warn / off).",
|
|
96
|
+
"cli.doctor.description": "Run Fabric target-state diagnostics (meta sync, knowledge index, bootstrap, events ledger, human-lock drift).\n\nExamples:\n fab doctor read-only diagnostics report\n fab doctor --fix repair derived state (meta + indexes)\n fab doctor --fix-knowledge apply lint mutations (demote / archive)\n fab doctor --json --strict machine-readable output, warnings as errors",
|
|
55
97
|
"doctor.section.fixable": "Fixable errors:",
|
|
56
98
|
"doctor.section.manual": "Manual errors:",
|
|
57
99
|
"doctor.section.warnings": "Warnings:",
|
|
58
100
|
"doctor.section.fix-knowledge-mutations": "Fix-knowledge mutations:",
|
|
59
|
-
|
|
60
|
-
"
|
|
101
|
+
// rc.20 TASK-07: cite-coverage human-readable formatter keys.
|
|
102
|
+
"doctor.section.cite-coverage": "Cite coverage:",
|
|
103
|
+
"doctor.cite.header": "Since {since} via marker {marker}",
|
|
104
|
+
"doctor.cite.warning.justActivated": "Cite policy activated on this run; no historical data yet.",
|
|
105
|
+
"doctor.cite.metric.editsTouched": "Edits touched",
|
|
106
|
+
"doctor.cite.metric.qualifyingCites": "Qualifying cites",
|
|
107
|
+
"doctor.cite.metric.recalledUnverified": "Recalled but not verified",
|
|
108
|
+
"doctor.cite.metric.expectedButMissed": "Expected cite missing",
|
|
109
|
+
"doctor.cite.metric.totalTurns": "Total turns",
|
|
110
|
+
"doctor.cite.section.perClient": "Per-client",
|
|
111
|
+
"doctor.cite.section.dismissedReasons": "Dismissed reasons",
|
|
112
|
+
"doctor.cite.dismissed.scope-mismatch": "Scope mismatch",
|
|
113
|
+
"doctor.cite.dismissed.outdated": "Outdated",
|
|
114
|
+
"doctor.cite.dismissed.not-applicable": "Not applicable",
|
|
115
|
+
"doctor.cite.dismissed.other": "Other",
|
|
116
|
+
"doctor.cite.dismissed.unspecified": "Unspecified",
|
|
117
|
+
"doctor.cite.status.skipped": "Cite policy not yet activated for this workspace.",
|
|
118
|
+
"cli.doctor.args.target.description": "Target project path. Defaults to --target, then EXTERNAL_FIXTURE_PATH, then cwd.",
|
|
119
|
+
"cli.doctor.args.fix.description": "Repair derived Fabric state (meta + indexes).",
|
|
61
120
|
"cli.doctor.args.json.description": "Print the doctor report as JSON.",
|
|
62
121
|
"cli.doctor.args.strict.description": "Treat warnings as failures.",
|
|
63
|
-
"cli.doctor.args.fix-knowledge.description": "Apply lint mutations: demote orphaned canonical entries, archive stale drafts, and bump drifted index counters.
|
|
122
|
+
"cli.doctor.args.fix-knowledge.description": "Apply knowledge lint mutations: demote orphaned canonical entries, archive stale drafts, and bump drifted index counters. Default doctor run remains report-only.",
|
|
64
123
|
"cli.doctor.args.rescan.description": "Re-run the init scan to rebuild .fabric/agents.meta.json forensic state before doctor checks.",
|
|
65
124
|
"cli.doctor.args.yes.description": "Skip the --fix-knowledge safety confirm. Required for non-tty invocations unless FABRIC_NONINTERACTIVE=1 is set in the environment.",
|
|
66
125
|
"cli.doctor.errors.fix-knowledge-fix-mutually-exclusive": "--fix-knowledge and --fix cannot be combined. --fix-knowledge mutates user knowledge state (demote/archive); --fix repairs derived state (meta/index). Run them separately.",
|
|
126
|
+
// rc.20 TASK-05: --cite-coverage report flags. Read-only; mutually exclusive with --fix/--fix-knowledge.
|
|
127
|
+
"cli.doctor.args.cite-coverage.description": "Generate cite policy adherence report (read-only; skips standard inspections)",
|
|
128
|
+
"cli.doctor.args.since.description": "Time window for cite coverage (e.g. 7d, 24h, 30m)",
|
|
129
|
+
"cli.doctor.args.client.description": "Filter cite coverage by client (cc|codex|cursor|all)",
|
|
130
|
+
"cli.doctor.errors.cite-coverage-mutex": "--cite-coverage cannot be combined with --fix or --fix-knowledge",
|
|
131
|
+
"cli.doctor.errors.invalid-since": "Invalid --since value: {input}. Expected duration like 7d, 24h, 30m or epoch ms.",
|
|
132
|
+
"cli.doctor.errors.invalid-client": "Invalid --client value: {input}. Expected cc, codex, cursor, or all.",
|
|
67
133
|
"cli.hooks.description": "Manage Fabric Git hook templates.",
|
|
68
134
|
"cli.hooks.install.description": "Install the Fabric Husky pre-commit hook template.",
|
|
69
135
|
"cli.hooks.install.args.target.description": "Target project path, default is the current working directory.",
|
|
@@ -79,8 +145,8 @@ var enMessages = {
|
|
|
79
145
|
"cli.human-lint.table.location": "Location",
|
|
80
146
|
"cli.human-lint.table.expected": "Expected",
|
|
81
147
|
"cli.human-lint.table.got": "Got",
|
|
82
|
-
"cli.install.description": "Install Fabric in the target project.",
|
|
83
|
-
"cli.install.args.target.description": "Target project path. Defaults to
|
|
148
|
+
"cli.install.description": "Install Fabric in the target project (scaffold .fabric/, bootstrap templates, MCP client wiring, git hooks).\n\nExamples:\n fab install interactive install in the current project\n fab install --yes accept defaults, skip the TTY wizard\n fab install --dry-run preview the install plan without writing files",
|
|
149
|
+
"cli.install.args.target.description": "Target project path. Defaults to --target, then EXTERNAL_FIXTURE_PATH, then cwd.",
|
|
84
150
|
"cli.install.args.debug.description": "Print target resolution details to stderr.",
|
|
85
151
|
"cli.install.args.yes.description": "Accept the current install plan and run without the TTY wizard",
|
|
86
152
|
"cli.install.args.dry-run.description": "Print the install plan without writing files or running follow-up stages",
|
|
@@ -95,6 +161,11 @@ var enMessages = {
|
|
|
95
161
|
"cli.install.skipped-existing-path": "{label} {path}: already exists.",
|
|
96
162
|
"cli.install.label.overwritten": "Overwritten",
|
|
97
163
|
"cli.install.stages.bootstrap": "Installing bootstrap templates...",
|
|
164
|
+
"cli.install.stages.bootstrap.snapshot.written": "Wrote .fabric/AGENTS.md snapshot",
|
|
165
|
+
"cli.install.stages.bootstrap.snapshot.skipped": "Skipped .fabric/AGENTS.md \u2014 already current",
|
|
166
|
+
"cli.install.steps.bootstrap-claude": "Updated CLAUDE.md with @-import directives",
|
|
167
|
+
"cli.install.steps.bootstrap-codex": "Updated AGENTS.md with fabric:bootstrap managed block",
|
|
168
|
+
"cli.install.steps.bootstrap-cursor": "Updated .cursor/rules/fabric-bootstrap.mdc",
|
|
98
169
|
"cli.install.stages.mcp": "Configuring MCP clients...",
|
|
99
170
|
"cli.install.stages.hooks": "Installing git hooks...",
|
|
100
171
|
"cli.install.stages.skipped": "skipped",
|
|
@@ -175,8 +246,8 @@ var enMessages = {
|
|
|
175
246
|
"cli.install.diff.state.present-canonical": "canonical",
|
|
176
247
|
"cli.install.diff.state.drifted": "drifted",
|
|
177
248
|
"cli.install.diff.state.user-modified": "user-modified",
|
|
178
|
-
"cli.uninstall.description": "Uninstall Fabric from the target project.",
|
|
179
|
-
"cli.uninstall.args.target.description": "Target project path. Defaults to
|
|
249
|
+
"cli.uninstall.description": "Uninstall Fabric from the target project. .fabric/knowledge/ is always preserved; ~/.fabric/knowledge/ is never touched.\n\nExamples:\n fab uninstall interactive uninstall in the current project\n fab uninstall --yes accept defaults, skip the TTY wizard\n fab uninstall --dry-run preview the uninstall plan without removing files",
|
|
250
|
+
"cli.uninstall.args.target.description": "Target project path. Defaults to --target, then EXTERNAL_FIXTURE_PATH, then cwd.",
|
|
180
251
|
"cli.uninstall.args.debug.description": "Print target resolution details to stderr.",
|
|
181
252
|
"cli.uninstall.args.yes.description": "Accept the current uninstall plan and run without the TTY wizard.",
|
|
182
253
|
"cli.uninstall.args.dry-run.description": "Print the uninstall plan without removing files or running follow-up stages.",
|
|
@@ -223,7 +294,7 @@ var enMessages = {
|
|
|
223
294
|
"cli.pre-commit.args.target.description": "Project root directory, defaults to cwd or EXTERNAL_FIXTURE_PATH.",
|
|
224
295
|
"cli.pre-commit.run-failed": "fabric pre-commit: {name} failed - {message}",
|
|
225
296
|
"cli.scan.description": "Scan the project to detect Fabric bootstrap candidates.",
|
|
226
|
-
"cli.scan.args.target.description": "Target absolute path. Defaults to
|
|
297
|
+
"cli.scan.args.target.description": "Target absolute path. Defaults to --target, then EXTERNAL_FIXTURE_PATH, then cwd.",
|
|
227
298
|
"cli.scan.args.debug.description": "Print detection evidence in formatted output.",
|
|
228
299
|
"cli.scan.args.json.description": "Print the diagnostic report as JSON.",
|
|
229
300
|
"cli.scan.error.missing-forensic": "forensic.json not found at {path}; run `fabric install` first to produce the deterministic project snapshot.",
|
|
@@ -241,22 +312,22 @@ var enMessages = {
|
|
|
241
312
|
"cli.scan.report.recommendations": "Recommendations:",
|
|
242
313
|
"cli.scan.readme-quality.ok": "ok",
|
|
243
314
|
"cli.scan.readme-quality.stub": "stub",
|
|
244
|
-
"cli.scan.recommendation.init": "L0: Run fab install to scaffold
|
|
315
|
+
"cli.scan.recommendation.init": "L0: Run fab install to scaffold `.fabric/AGENTS.md` with the canonical Fabric bootstrap content.",
|
|
245
316
|
"cli.scan.recommendation.readme": "L0: Expand README.md before promoting project facts into Fabric references.",
|
|
246
317
|
"cli.scan.recommendation.contributing": "L0: Add CONTRIBUTING.md or leave a bootstrap TODO reference for contribution flow.",
|
|
247
318
|
"cli.scan.recommendation.unknown-framework": "L1: Add tech-stack TODOs manually because no framework marker was detected.",
|
|
248
319
|
"cli.scan.recommendation.framework-dirs": "L1: Review {framework} directories for future scoped Fabric rule files.",
|
|
249
|
-
"cli.serve.description": "Start the local Fabric MCP HTTP service.
|
|
320
|
+
"cli.serve.description": "Start the local Fabric MCP HTTP service.\n\nExamples:\n fab serve bind 127.0.0.1:7373 (default)\n fab serve --port 8787 use a custom port\n FABRIC_AUTH_TOKEN=<token> fab serve --host 0.0.0.0 bind non-loopback with Bearer auth",
|
|
250
321
|
"cli.serve.args.port.description": "Listen port, default 7373.",
|
|
251
|
-
"cli.serve.args.host.description": "Listen host, default 127.0.0.1.
|
|
252
|
-
"cli.serve.args.target.description": "Target project path. Defaults to
|
|
322
|
+
"cli.serve.args.host.description": "Listen host, default 127.0.0.1. Non-loopback hosts (e.g. 0.0.0.0) require FABRIC_AUTH_TOKEN to enable Bearer auth, otherwise serve falls back to 127.0.0.1.",
|
|
323
|
+
"cli.serve.args.target.description": "Target project path. Defaults to --target, then EXTERNAL_FIXTURE_PATH, then cwd.",
|
|
253
324
|
"cli.serve.args.debug.description": "Print target resolution details to stderr.",
|
|
254
325
|
"cli.serve.ready.title": "Fabric Dashboard",
|
|
255
326
|
"cli.serve.lock-held.action-hint": "A `fab serve` instance (PID {pid}) is holding the workspace lock. Stop it (Ctrl-C in that terminal or `kill {pid}`) before running this command.",
|
|
256
|
-
"cli.serve.warning.host-fallback": "--host {host} requires FABRIC_AUTH_TOKEN; falling back to 127.0.0.1
|
|
327
|
+
"cli.serve.warning.host-fallback": "--host {host} requires FABRIC_AUTH_TOKEN for non-loopback exposure; falling back to 127.0.0.1. To bind {host}, run: FABRIC_AUTH_TOKEN=<token> fab serve --host {host}",
|
|
257
328
|
"cli.serve.error.port-in-use": "Port {port} in use - try --port {nextPort}",
|
|
258
329
|
"cli.update.description": "Refresh MCP host configuration and git hooks without re-creating Fabric files.",
|
|
259
|
-
"cli.update.args.target.description": "Target project path. Defaults to
|
|
330
|
+
"cli.update.args.target.description": "Target project path. Defaults to --target, then EXTERNAL_FIXTURE_PATH, then cwd.",
|
|
260
331
|
"cli.update.args.no-mcp.description": "Skip re-configuring MCP clients",
|
|
261
332
|
"cli.update.args.no-hooks.description": "Skip re-installing git hooks",
|
|
262
333
|
"cli.sync-meta.description": "Sync Fabric metadata from internal rule files.",
|
|
@@ -469,7 +540,7 @@ var enMessages = {
|
|
|
469
540
|
|
|
470
541
|
// src/i18n/locales/zh-CN.ts
|
|
471
542
|
var zhCNMessages = {
|
|
472
|
-
"cli.main.description": "Fabric CLI - AI \u667A\u80FD\u4F53\u534F\u4F5C\u6846\u67B6",
|
|
543
|
+
"cli.main.description": "Fabric CLI - AI \u667A\u80FD\u4F53\u534F\u4F5C\u6846\u67B6\u3002\n\n\u4E09\u6B65\u5FC3\u667A\u6A21\u578B\uFF1A\n \u88C5 (install) - fab install \u4E00\u952E\u5B8C\u6210\u9879\u76EE\u521D\u59CB\u5316\n \u914D (config) - fab config \u6253\u5F00\u4EA4\u4E92\u5F0F\u914D\u7F6E\u9762\u677F\n \u8DD1 (run) - fab serve \u542F\u52A8\u672C\u5730 MCP HTTP \u670D\u52A1\n fab doctor \u8FD0\u884C\u76EE\u6807\u6001\u8BCA\u65AD\n\n\u793A\u4F8B\uFF1A\n fab install \u5728\u5F53\u524D\u9879\u76EE\u4E2D\u5B89\u88C5 Fabric\n fab config \u6253\u5F00\u4EA4\u4E92\u5F0F\u914D\u7F6E\u9762\u677F\n fab serve --port 7373 \u542F\u52A8 MCP HTTP \u670D\u52A1\n fab doctor --fix \u4FEE\u590D Fabric \u6D3E\u751F\u72B6\u6001\n fab uninstall --dry-run \u9884\u89C8\u5378\u8F7D\uFF0C\u4E0D\u5220\u9664\u6587\u4EF6",
|
|
473
544
|
"cli.shared.created": "\u5DF2\u521B\u5EFA",
|
|
474
545
|
"cli.shared.skipped": "\u5DF2\u8DF3\u8FC7",
|
|
475
546
|
"cli.shared.next": "\u4E0B\u4E00\u6B65",
|
|
@@ -507,8 +578,7 @@ var zhCNMessages = {
|
|
|
507
578
|
"cli.bootstrap.install.skipped-header": "\u5DF2\u8DF3\u8FC7 {path}\uFF1AFabric Bootstrap \u5934\u90E8\u5DF2\u5B58\u5728\u3002",
|
|
508
579
|
"cli.bootstrap.install.prepended": "\u5DF2\u524D\u7F6E\u5199\u5165 {path}",
|
|
509
580
|
"cli.bootstrap.errors.unknown-client": "\u672A\u77E5\u5BA2\u6237\u7AEF\u201C{client}\u201D\u3002\u8BF7\u4F7F\u7528\u9017\u53F7\u5206\u9694\u5217\u8868\uFF0C\u4F8B\u5982 claude,cursor,codex\u3002",
|
|
510
|
-
"cli.config.description": "\
|
|
511
|
-
"cli.config.placeholder": "\u914D\u7F6E\u9762\u677F\u5C06\u5728 rc.16 \u4E0A\u7EBF \u2014 \u6682\u8BF7\u76F4\u63A5\u7F16\u8F91 fabric-config.json\u3002",
|
|
581
|
+
"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\u3001\u63D0\u793A\u7A97\u53E3\u3001MCP \u5BA2\u6237\u7AEF\u914D\u7F6E\u7B49\uFF09\u3002\n\n\u793A\u4F8B\uFF1A\n fab config \u6253\u5F00\u4EA4\u4E92\u5F0F\u9762\u677F\n fab config --target /path \u7F16\u8F91\u6307\u5B9A\u9879\u76EE\u7684\u914D\u7F6E",
|
|
512
582
|
"cli.config.args.target.description": "\u76EE\u6807\u9879\u76EE\u76EE\u5F55\uFF08\u9ED8\u8BA4\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55\uFF09\u3002",
|
|
513
583
|
"cli.config.clients.claude": "Claude Code CLI",
|
|
514
584
|
"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",
|
|
@@ -520,19 +590,86 @@ var zhCNMessages = {
|
|
|
520
590
|
"cli.config.install.no-config-path": "\u8DF3\u8FC7 {client}\uFF1A\u672A\u68C0\u6D4B\u5230\u914D\u7F6E\u8DEF\u5F84\u3002",
|
|
521
591
|
"cli.config.install.dry-run": "[dry-run] {client}\uFF1A\u5C06\u5199\u5165 {path}",
|
|
522
592
|
"cli.config.install.wrote": "{client}\uFF1A\u5DF2\u5199\u5165 {path}",
|
|
523
|
-
|
|
593
|
+
// rc.16 TASK-006 (F1-panel): clack 驱动的 `fab config` 交互式面板。
|
|
594
|
+
// 由 packages/cli/src/commands/config.ts(菜单循环 + 字段编辑)以及
|
|
595
|
+
// getPanelFields() 的 label_i18n_key 引用消费。
|
|
596
|
+
"cli.config.intro": "Fabric \u914D\u7F6E",
|
|
597
|
+
"cli.config.outro": "\u914D\u7F6E\u5DF2\u4FDD\u5B58\u3002",
|
|
598
|
+
"cli.config.outro-no-changes": "\u672A\u505A\u4EFB\u4F55\u4FEE\u6539\u3002",
|
|
599
|
+
"cli.config.cancel": "\u5DF2\u53D6\u6D88\u3002",
|
|
600
|
+
"cli.config.non-tty-notice": "fab config \u9700\u8981\u5728\u4EA4\u4E92\u5F0F\u7EC8\u7AEF\u4E2D\u8FD0\u884C\u3002\u8BF7\u5728 TTY \u4E2D\u6267\u884C\u4EE5\u7F16\u8F91\u914D\u7F6E\u5B57\u6BB5\u3002",
|
|
601
|
+
"cli.config.menu.field-select": "\u9009\u62E9\u8981\u7F16\u8F91\u7684\u5B57\u6BB5\uFF1A",
|
|
602
|
+
"cli.config.menu.exit": "\u9000\u51FA",
|
|
603
|
+
"cli.config.value.current": "\u5F53\u524D\uFF1A{value}",
|
|
604
|
+
"cli.config.value.default-marker": "\uFF08\u9ED8\u8BA4\uFF09",
|
|
605
|
+
"cli.config.prompt.select": "\u4E3A {key} \u9009\u62E9\u65B0\u503C\uFF08\u5F53\u524D\uFF1A{current}\uFF09\uFF1A",
|
|
606
|
+
"cli.config.prompt.text": "\u4E3A {key} \u8F93\u5165\u65B0\u503C\uFF08\u5F53\u524D\uFF1A{current}\uFF09\uFF1A",
|
|
607
|
+
"cli.config.write.success": "\u5DF2\u4FDD\u5B58 {key} = {value}",
|
|
608
|
+
"cli.config.write.failure": "\u5199\u5165 fabric-config.json \u5931\u8D25\uFF1A{message}",
|
|
609
|
+
"cli.config.errors.uninit-workspace.message": "\u5DE5\u4F5C\u533A\u5C1A\u672A\u521D\u59CB\u5316\u3002\u8BF7\u5148\u8FD0\u884C `fab install`\u3002",
|
|
610
|
+
"cli.config.errors.invalid-int": "\u5FC5\u987B\u662F\u6B63\u6574\u6570\u3002",
|
|
611
|
+
"cli.config.errors.unknown-field": "\u672A\u77E5\u5B57\u6BB5\u9009\u62E9 \u2014 \u5DF2\u8DF3\u8FC7\u3002",
|
|
612
|
+
"cli.config.errors.no-enum-options": "\u8BE5\u5B57\u6BB5\u6CA1\u6709\u53EF\u9009\u679A\u4E3E\u503C \u2014 \u5DF2\u8DF3\u8FC7\u3002",
|
|
613
|
+
// 11 个面板字段标签(A 组 2 个 + B 组 8 个 + C 组 1 个)。
|
|
614
|
+
"cli.config.fields.fabric_language.label": "\u8BED\u8A00",
|
|
615
|
+
"cli.config.fields.fabric_language.description": "Fabric \u94A9\u5B50\u4E0E Skill \u8F93\u51FA\u4F7F\u7528\u7684\u8BED\u8A00\u3002",
|
|
616
|
+
"cli.config.fields.default_layer_filter.label": "\u9ED8\u8BA4\u77E5\u8BC6\u5C42",
|
|
617
|
+
"cli.config.fields.default_layer_filter.description": "\u77E5\u8BC6\u5217\u8868\u7684\u9ED8\u8BA4\u5C42\u7EA7\u8303\u56F4\uFF08team / personal / both\uFF09\u3002",
|
|
618
|
+
"cli.config.fields.archive_hint_hours.label": "\u5F52\u6863\u63D0\u793A\u7A97\u53E3\uFF08\u5C0F\u65F6\uFF09",
|
|
619
|
+
"cli.config.fields.archive_hint_hours.description": "Signal A \u7528\u4E8E\u68C0\u6D4B\u9891\u7E41\u7F16\u8F91\u7684\u65F6\u95F4\u7A97\u53E3\uFF08\u5C0F\u65F6\uFF09\u3002",
|
|
620
|
+
"cli.config.fields.archive_hint_cooldown_hours.label": "\u5F52\u6863\u63D0\u793A\u51B7\u5374\uFF08\u5C0F\u65F6\uFF09",
|
|
621
|
+
"cli.config.fields.archive_hint_cooldown_hours.description": "\u540C\u4E00\u5F52\u6863\u63D0\u793A\u518D\u6B21\u89E6\u53D1\u524D\u7684\u51B7\u5374\u65F6\u95F4\uFF08\u5C0F\u65F6\uFF09\u3002",
|
|
622
|
+
"cli.config.fields.archive_edit_threshold.label": "\u5F52\u6863\u7F16\u8F91\u9608\u503C",
|
|
623
|
+
"cli.config.fields.archive_edit_threshold.description": "\u89E6\u53D1 Signal A \u5F52\u6863\u63D0\u793A\u6240\u9700\u7684\u7F16\u8F91\u6B21\u6570\u9608\u503C\u3002",
|
|
624
|
+
"cli.config.fields.underseed_node_threshold.label": "\u77E5\u8BC6\u8282\u70B9\u4E0D\u8DB3\u9608\u503C",
|
|
625
|
+
"cli.config.fields.underseed_node_threshold.description": "\u77E5\u8BC6\u8282\u70B9\u6570\u4F4E\u4E8E\u8BE5\u9608\u503C\u65F6\uFF0CFabric \u89C6\u4E3A\u77E5\u8BC6\u5E93\u5C1A\u672A\u5145\u5B9E\u3002",
|
|
626
|
+
"cli.config.fields.review_hint_pending_count.label": "\u5F85\u5BA1\u6761\u76EE\u6570\u9608\u503C",
|
|
627
|
+
"cli.config.fields.review_hint_pending_count.description": "\u5F85\u5BA1\u6761\u76EE\u6570\u8D85\u8FC7\u8BE5\u9608\u503C\u65F6\u89E6\u53D1\u5BA1\u6838\u63D0\u793A\u3002",
|
|
628
|
+
"cli.config.fields.review_hint_pending_age_days.label": "\u5F85\u5BA1\u6761\u76EE\u5E74\u9F84\uFF08\u5929\uFF09",
|
|
629
|
+
"cli.config.fields.review_hint_pending_age_days.description": "\u5F85\u5BA1\u6761\u76EE\u5B58\u7559\u5929\u6570\u8D85\u8FC7\u8BE5\u9608\u503C\u65F6\u89E6\u53D1\u5BA1\u6838\u63D0\u793A\u3002",
|
|
630
|
+
"cli.config.fields.maintenance_hint_days.label": "\u7EF4\u62A4\u63D0\u793A\u7A97\u53E3\uFF08\u5929\uFF09",
|
|
631
|
+
"cli.config.fields.maintenance_hint_days.description": "Fabric \u89E6\u53D1\u77E5\u8BC6\u7EF4\u62A4\u63D0\u793A\u7684\u65F6\u95F4\u7A97\u53E3\uFF08\u5929\uFF09\u3002",
|
|
632
|
+
"cli.config.fields.maintenance_hint_cooldown_days.label": "\u7EF4\u62A4\u63D0\u793A\u51B7\u5374\uFF08\u5929\uFF09",
|
|
633
|
+
"cli.config.fields.maintenance_hint_cooldown_days.description": "\u7EF4\u62A4\u63D0\u793A\u518D\u6B21\u89E6\u53D1\u524D\u7684\u51B7\u5374\u65F6\u95F4\uFF08\u5929\uFF09\u3002",
|
|
634
|
+
"cli.config.fields.audit_mode.label": "\u5BA1\u8BA1\u6A21\u5F0F",
|
|
635
|
+
"cli.config.fields.audit_mode.description": "human-lock \u4E0E\u6F02\u79FB\u68C0\u6D4B\u7684\u5BA1\u8BA1\u7C92\u5EA6\uFF08strict / warn / off\uFF09\u3002",
|
|
636
|
+
"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\u3002\n\n\u793A\u4F8B\uFF1A\n fab doctor \u53EA\u8BFB\u8BCA\u65AD\u62A5\u544A\n fab doctor --fix \u4FEE\u590D\u6D3E\u751F\u72B6\u6001\uFF08meta + \u7D22\u5F15\uFF09\n fab doctor --fix-knowledge \u5E94\u7528\u77E5\u8BC6\u5E93 lint \u53D8\u66F4\uFF08\u964D\u7EA7 / \u5F52\u6863\uFF09\n fab doctor --json --strict \u673A\u5668\u53EF\u8BFB\u8F93\u51FA\uFF0Cwarning \u89C6\u4E3A\u5931\u8D25",
|
|
524
637
|
"doctor.section.fixable": "\u53EF\u4FEE\u590D\u9519\u8BEF\uFF1A",
|
|
525
638
|
"doctor.section.manual": "\u9700\u624B\u52A8\u4FEE\u590D\uFF1A",
|
|
526
639
|
"doctor.section.warnings": "\u8B66\u544A\uFF1A",
|
|
527
640
|
"doctor.section.fix-knowledge-mutations": "Fix-knowledge \u53D8\u66F4\uFF1A",
|
|
528
|
-
|
|
529
|
-
"
|
|
641
|
+
// rc.20 TASK-07: cite-coverage 人类可读格式化键。
|
|
642
|
+
"doctor.section.cite-coverage": "Cite \u8986\u76D6\u7387:",
|
|
643
|
+
"doctor.cite.header": "\u8D77\u59CB {since} (\u653F\u7B56\u6FC0\u6D3B\u65F6\u95F4 {marker})",
|
|
644
|
+
"doctor.cite.warning.justActivated": "\u672C\u6B21\u9996\u6B21\u6FC0\u6D3B Cite policy,\u6682\u65E0\u5386\u53F2\u6570\u636E\u3002",
|
|
645
|
+
"doctor.cite.metric.editsTouched": "Edit \u89E6\u8FBE\u6570",
|
|
646
|
+
"doctor.cite.metric.qualifyingCites": "\u5408\u683C cite",
|
|
647
|
+
"doctor.cite.metric.recalledUnverified": "recalled \u4F46\u672A\u9A8C\u8BC1",
|
|
648
|
+
"doctor.cite.metric.expectedButMissed": "\u5E94\u67E5\u6CA1\u67E5",
|
|
649
|
+
"doctor.cite.metric.totalTurns": "\u603B\u56DE\u5408\u6570",
|
|
650
|
+
"doctor.cite.section.perClient": "\u6309\u5BA2\u6237\u7AEF\u62C6\u5206",
|
|
651
|
+
"doctor.cite.section.dismissedReasons": "\u9A73\u56DE\u539F\u56E0\u5206\u5E03",
|
|
652
|
+
"doctor.cite.dismissed.scope-mismatch": "\u8303\u56F4\u4E0D\u7B26",
|
|
653
|
+
"doctor.cite.dismissed.outdated": "\u5DF2\u8FC7\u671F",
|
|
654
|
+
"doctor.cite.dismissed.not-applicable": "\u4E0D\u9002\u7528",
|
|
655
|
+
"doctor.cite.dismissed.other": "\u5176\u4ED6",
|
|
656
|
+
"doctor.cite.dismissed.unspecified": "\u672A\u6CE8\u660E",
|
|
657
|
+
"doctor.cite.status.skipped": "\u672C\u5DE5\u4F5C\u533A Cite policy \u5C1A\u672A\u6FC0\u6D3B\u3002",
|
|
658
|
+
"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",
|
|
659
|
+
"cli.doctor.args.fix.description": "\u4FEE\u590D Fabric \u6D3E\u751F\u72B6\u6001\uFF08meta + \u7D22\u5F15\uFF09\u3002",
|
|
530
660
|
"cli.doctor.args.json.description": "\u4EE5 JSON \u8F93\u51FA doctor \u62A5\u544A\u3002",
|
|
531
661
|
"cli.doctor.args.strict.description": "\u5C06 warning \u4E5F\u89C6\u4E3A\u5931\u8D25\u3002",
|
|
532
|
-
"cli.doctor.args.fix-knowledge.description": "\u5E94\u7528 lint \u53D8\u66F4\uFF1A\u964D\u7EA7\u5B64\u7ACB\u7684\u89C4\u8303\u6761\u76EE\u3001\u5F52\u6863\u9648\u65E7 draft\u3001\u4FEE\u6B63\u6F02\u79FB\u7684\u7D22\u5F15\u8BA1\u6570\u5668\
|
|
662
|
+
"cli.doctor.args.fix-knowledge.description": "\u5E94\u7528\u77E5\u8BC6\u5E93 lint \u53D8\u66F4\uFF1A\u964D\u7EA7\u5B64\u7ACB\u7684\u89C4\u8303\u6761\u76EE\u3001\u5F52\u6863\u9648\u65E7 draft\u3001\u4FEE\u6B63\u6F02\u79FB\u7684\u7D22\u5F15\u8BA1\u6570\u5668\u3002\u9ED8\u8BA4 doctor \u8FD0\u884C\u4ECD\u7136\u53EA\u8BFB\u3002",
|
|
533
663
|
"cli.doctor.args.rescan.description": "\u5728 doctor \u68C0\u67E5\u4E4B\u524D\u91CD\u65B0\u8FD0\u884C init scan\uFF0C\u4EE5\u91CD\u5EFA .fabric/agents.meta.json \u7684\u53D6\u8BC1\u72B6\u6001\u3002",
|
|
534
664
|
"cli.doctor.args.yes.description": "\u8DF3\u8FC7 --fix-knowledge \u7684\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",
|
|
535
665
|
"cli.doctor.errors.fix-knowledge-fix-mutually-exclusive": "--fix-knowledge \u4E0E --fix \u4E0D\u53EF\u540C\u65F6\u4F7F\u7528\u3002--fix-knowledge \u4FEE\u6539\u7528\u6237\u77E5\u8BC6\u72B6\u6001\uFF08\u964D\u7EA7/\u5F52\u6863\uFF09\uFF1B--fix \u4FEE\u590D\u6D3E\u751F\u72B6\u6001\uFF08meta/\u7D22\u5F15\uFF09\u3002\u8BF7\u5206\u522B\u8FD0\u884C\u3002",
|
|
666
|
+
// rc.20 TASK-05: --cite-coverage 报告参数;只读,与 --fix/--fix-knowledge 互斥。
|
|
667
|
+
"cli.doctor.args.cite-coverage.description": "Cite \u653F\u7B56\u5408\u89C4\u62A5\u544A(\u53EA\u8BFB;\u8DF3\u8FC7\u6807\u51C6\u68C0\u67E5)",
|
|
668
|
+
"cli.doctor.args.since.description": "Cite \u8986\u76D6\u7387\u7EDF\u8BA1\u7A97\u53E3(\u5982 7d, 24h, 30m)",
|
|
669
|
+
"cli.doctor.args.client.description": "\u6309\u5BA2\u6237\u7AEF\u8FC7\u6EE4(cc|codex|cursor|all)",
|
|
670
|
+
"cli.doctor.errors.cite-coverage-mutex": "--cite-coverage \u4E0D\u80FD\u4E0E --fix \u6216 --fix-knowledge \u540C\u65F6\u4F7F\u7528",
|
|
671
|
+
"cli.doctor.errors.invalid-since": "--since \u53D6\u503C\u65E0\u6548: {input}\u3002\u9884\u671F\u683C\u5F0F 7d / 24h / 30m \u6216 epoch ms\u3002",
|
|
672
|
+
"cli.doctor.errors.invalid-client": "--client \u53D6\u503C\u65E0\u6548: {input}\u3002\u9884\u671F cc / codex / cursor / all\u3002",
|
|
536
673
|
"cli.hooks.description": "\u7BA1\u7406 Fabric Git \u94A9\u5B50\u6A21\u677F\u3002",
|
|
537
674
|
"cli.hooks.install.description": "\u5B89\u88C5 Fabric Husky pre-commit \u94A9\u5B50\u6A21\u677F\u3002",
|
|
538
675
|
"cli.hooks.install.args.target.description": "\u76EE\u6807\u9879\u76EE\u8DEF\u5F84\uFF0C\u9ED8\u8BA4\u4E3A\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55\u3002",
|
|
@@ -548,8 +685,8 @@ var zhCNMessages = {
|
|
|
548
685
|
"cli.human-lint.table.location": "\u4F4D\u7F6E",
|
|
549
686
|
"cli.human-lint.table.expected": "\u9884\u671F",
|
|
550
687
|
"cli.human-lint.table.got": "\u5B9E\u9645",
|
|
551
|
-
"cli.install.description": "\u5728\u76EE\u6807\u9879\u76EE\u4E2D\u5B89\u88C5 Fabric\u3002",
|
|
552
|
-
"cli.install.args.target.description": "\u76EE\u6807\u9879\u76EE\u8DEF\u5F84\u3002\u9ED8\u8BA4\u4F9D\u6B21\u4F7F\u7528
|
|
688
|
+
"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\u3002\n\n\u793A\u4F8B\uFF1A\n fab install \u5728\u5F53\u524D\u9879\u76EE\u4E2D\u4EE5\u4EA4\u4E92\u6A21\u5F0F\u5B89\u88C5\n fab install --yes \u63A5\u53D7\u9ED8\u8BA4\u503C\uFF0C\u8DF3\u8FC7 TTY \u5411\u5BFC\n fab install --dry-run \u4EC5\u9884\u89C8\u5B89\u88C5\u8BA1\u5212\uFF0C\u4E0D\u5199\u5165\u6587\u4EF6",
|
|
689
|
+
"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",
|
|
553
690
|
"cli.install.args.debug.description": "\u5C06\u76EE\u6807\u89E3\u6790\u7EC6\u8282\u8F93\u51FA\u5230 stderr\u3002",
|
|
554
691
|
"cli.install.args.yes.description": "\u63A5\u53D7\u5F53\u524D\u5B89\u88C5\u8BA1\u5212\u5E76\u8DF3\u8FC7 TTY \u5411\u5BFC\u76F4\u63A5\u6267\u884C",
|
|
555
692
|
"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",
|
|
@@ -564,6 +701,11 @@ var zhCNMessages = {
|
|
|
564
701
|
"cli.install.skipped-existing-path": "{label} {path}\uFF1A\u5DF2\u5B58\u5728\u3002",
|
|
565
702
|
"cli.install.label.overwritten": "\u5DF2\u8986\u76D6",
|
|
566
703
|
"cli.install.stages.bootstrap": "\u6B63\u5728\u5B89\u88C5 bootstrap \u6A21\u677F...",
|
|
704
|
+
"cli.install.stages.bootstrap.snapshot.written": "\u5DF2\u5199\u5165 .fabric/AGENTS.md \u5FEB\u7167",
|
|
705
|
+
"cli.install.stages.bootstrap.snapshot.skipped": "\u5DF2\u8DF3\u8FC7 .fabric/AGENTS.md \u2014 \u5DF2\u662F\u6700\u65B0",
|
|
706
|
+
"cli.install.steps.bootstrap-claude": "\u5DF2\u66F4\u65B0 CLAUDE.md \u7684 @-import \u5F15\u7528",
|
|
707
|
+
"cli.install.steps.bootstrap-codex": "\u5DF2\u66F4\u65B0 AGENTS.md \u7684 fabric:bootstrap managed block",
|
|
708
|
+
"cli.install.steps.bootstrap-cursor": "\u5DF2\u66F4\u65B0 .cursor/rules/fabric-bootstrap.mdc",
|
|
567
709
|
"cli.install.stages.mcp": "\u6B63\u5728\u914D\u7F6E MCP \u5BA2\u6237\u7AEF...",
|
|
568
710
|
"cli.install.stages.hooks": "\u6B63\u5728\u5B89\u88C5 git hooks...",
|
|
569
711
|
"cli.install.stages.skipped": "\u5DF2\u8DF3\u8FC7",
|
|
@@ -644,8 +786,8 @@ var zhCNMessages = {
|
|
|
644
786
|
"cli.install.diff.state.present-canonical": "\u89C4\u8303",
|
|
645
787
|
"cli.install.diff.state.drifted": "\u6F02\u79FB",
|
|
646
788
|
"cli.install.diff.state.user-modified": "\u7528\u6237\u4FEE\u6539",
|
|
647
|
-
"cli.uninstall.description": "\u4ECE\u76EE\u6807\u9879\u76EE\u4E2D\u5378\u8F7D Fabric\u3002",
|
|
648
|
-
"cli.uninstall.args.target.description": "\u76EE\u6807\u9879\u76EE\u8DEF\u5F84\u3002\u9ED8\u8BA4\u4F9D\u6B21\u4F7F\u7528
|
|
789
|
+
"cli.uninstall.description": "\u4ECE\u76EE\u6807\u9879\u76EE\u4E2D\u5378\u8F7D Fabric\u3002.fabric/knowledge/ \u59CB\u7EC8\u4FDD\u7559\uFF1B~/.fabric/knowledge/ \u6C38\u4E0D\u53D7\u5F71\u54CD\u3002\n\n\u793A\u4F8B\uFF1A\n fab uninstall \u5728\u5F53\u524D\u9879\u76EE\u4E2D\u4EE5\u4EA4\u4E92\u6A21\u5F0F\u5378\u8F7D\n fab uninstall --yes \u63A5\u53D7\u9ED8\u8BA4\u503C\uFF0C\u8DF3\u8FC7 TTY \u5411\u5BFC\n fab uninstall --dry-run \u4EC5\u9884\u89C8\u5378\u8F7D\u8BA1\u5212\uFF0C\u4E0D\u5220\u9664\u6587\u4EF6",
|
|
790
|
+
"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",
|
|
649
791
|
"cli.uninstall.args.debug.description": "\u5C06\u76EE\u6807\u89E3\u6790\u7EC6\u8282\u8F93\u51FA\u5230 stderr\u3002",
|
|
650
792
|
"cli.uninstall.args.yes.description": "\u63A5\u53D7\u5F53\u524D\u5378\u8F7D\u8BA1\u5212\u5E76\u8DF3\u8FC7 TTY \u5411\u5BFC\u76F4\u63A5\u6267\u884C\u3002",
|
|
651
793
|
"cli.uninstall.args.dry-run.description": "\u4EC5\u8F93\u51FA\u5378\u8F7D\u8BA1\u5212\uFF0C\u4E0D\u5220\u9664\u6587\u4EF6\u4E5F\u4E0D\u6267\u884C\u540E\u7EED\u9636\u6BB5\u3002",
|
|
@@ -692,7 +834,7 @@ var zhCNMessages = {
|
|
|
692
834
|
"cli.pre-commit.args.target.description": "\u9879\u76EE\u6839\u76EE\u5F55\uFF0C\u9ED8\u8BA4\u53D6\u5F53\u524D\u76EE\u5F55\u6216 EXTERNAL_FIXTURE_PATH\u3002",
|
|
693
835
|
"cli.pre-commit.run-failed": "fabric pre-commit\uFF1A{name} \u5931\u8D25 - {message}",
|
|
694
836
|
"cli.scan.description": "\u626B\u63CF\u9879\u76EE\u4EE5\u68C0\u6D4B Fabric \u5F15\u5BFC\u5019\u9009\u6A21\u5757\u3002",
|
|
695
|
-
"cli.scan.args.target.description": "\u76EE\u6807\u7EDD\u5BF9\u8DEF\u5F84\u3002\u9ED8\u8BA4\u4F9D\u6B21\u4F7F\u7528
|
|
837
|
+
"cli.scan.args.target.description": "\u76EE\u6807\u7EDD\u5BF9\u8DEF\u5F84\u3002\u9ED8\u8BA4\u4F9D\u6B21\u4F7F\u7528 --target\u3001EXTERNAL_FIXTURE_PATH\u3001\u5F53\u524D\u76EE\u5F55\u3002",
|
|
696
838
|
"cli.scan.args.debug.description": "\u4EE5\u683C\u5F0F\u5316\u8F93\u51FA\u6253\u5370\u68C0\u6D4B\u8BC1\u636E\u3002",
|
|
697
839
|
"cli.scan.args.json.description": "\u4EE5 JSON \u683C\u5F0F\u8F93\u51FA\u8BCA\u65AD\u62A5\u544A\u3002",
|
|
698
840
|
"cli.scan.error.missing-forensic": "\u672A\u627E\u5230 forensic.json\uFF08\u8DEF\u5F84 {path}\uFF09\uFF1B\u8BF7\u5148\u8FD0\u884C `fabric install` \u751F\u6210\u9879\u76EE\u5FEB\u7167\u3002",
|
|
@@ -710,22 +852,22 @@ var zhCNMessages = {
|
|
|
710
852
|
"cli.scan.report.recommendations": "\u5EFA\u8BAE\uFF1A",
|
|
711
853
|
"cli.scan.readme-quality.ok": "\u826F\u597D",
|
|
712
854
|
"cli.scan.readme-quality.stub": "\u8349\u7A3F",
|
|
713
|
-
"cli.scan.recommendation.init": "L0\uFF1A\u8FD0\u884C fab install\uFF0C\u5728 .fabric/
|
|
855
|
+
"cli.scan.recommendation.init": "L0\uFF1A\u8FD0\u884C fab install\uFF0C\u5728 .fabric/AGENTS.md \u751F\u6210 Fabric \u5F15\u5BFC\u89C4\u8303\u5185\u5BB9\u3002",
|
|
714
856
|
"cli.scan.recommendation.readme": "L0\uFF1A\u5148\u8865\u5145 README.md\uFF0C\u518D\u628A\u9879\u76EE\u4E8B\u5B9E\u6574\u7406\u5230 Fabric \u53C2\u8003\u6587\u4EF6\u4E2D\u3002",
|
|
715
857
|
"cli.scan.recommendation.contributing": "L0\uFF1A\u6DFB\u52A0 CONTRIBUTING.md\uFF0C\u6216\u5728 bootstrap \u4E2D\u7559\u4E0B\u8D21\u732E\u6D41\u7A0B\u7684 TODO \u8BF4\u660E\u3002",
|
|
716
858
|
"cli.scan.recommendation.unknown-framework": "L1\uFF1A\u5F53\u524D\u672A\u68C0\u6D4B\u5230\u6846\u67B6\u6807\u8BB0\uFF0C\u9700\u8981\u624B\u52A8\u8865\u5145\u6280\u672F\u6808\u8BF4\u660E\u3002",
|
|
717
859
|
"cli.scan.recommendation.framework-dirs": "L1\uFF1A\u68C0\u67E5 {framework} \u76EE\u5F55\uFF0C\u540E\u7EED\u4E3A\u5176\u8865\u5145\u5BF9\u5E94\u4F5C\u7528\u57DF\u7684 Fabric \u89C4\u5219\u6587\u4EF6\u3002",
|
|
718
|
-
"cli.serve.description": "\u542F\u52A8\u672C\u5730 Fabric MCP HTTP \u670D\u52A1\u3002\
|
|
860
|
+
"cli.serve.description": "\u542F\u52A8\u672C\u5730 Fabric MCP HTTP \u670D\u52A1\u3002\n\n\u793A\u4F8B\uFF1A\n fab serve \u7ED1\u5B9A 127.0.0.1:7373\uFF08\u9ED8\u8BA4\uFF09\n fab serve --port 8787 \u4F7F\u7528\u81EA\u5B9A\u4E49\u7AEF\u53E3\n FABRIC_AUTH_TOKEN=<token> fab serve --host 0.0.0.0 \u7ED1\u5B9A\u975E loopback \u5E76\u542F\u7528 Bearer \u9274\u6743",
|
|
719
861
|
"cli.serve.args.port.description": "\u76D1\u542C\u7AEF\u53E3\uFF0C\u9ED8\u8BA4 7373\u3002",
|
|
720
|
-
"cli.serve.args.host.description": "\u76D1\u542C\u4E3B\u673A\uFF0C\u9ED8\u8BA4 127.0.0.1\u3002\
|
|
721
|
-
"cli.serve.args.target.description": "\u76EE\u6807\u9879\u76EE\u8DEF\u5F84\u3002\u9ED8\u8BA4\u4F9D\u6B21\u4F7F\u7528
|
|
862
|
+
"cli.serve.args.host.description": "\u76D1\u542C\u4E3B\u673A\uFF0C\u9ED8\u8BA4 127.0.0.1\u3002\u7ED1\u5B9A\u975E loopback \u4E3B\u673A\uFF08\u5982 0.0.0.0\uFF09\u5FC5\u987B\u8BBE\u7F6E FABRIC_AUTH_TOKEN \u542F\u7528 Bearer \u9274\u6743\uFF0C\u5426\u5219\u5C06\u81EA\u52A8\u56DE\u9000\u5230 127.0.0.1\u3002",
|
|
863
|
+
"cli.serve.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",
|
|
722
864
|
"cli.serve.args.debug.description": "\u5C06\u76EE\u6807\u89E3\u6790\u7EC6\u8282\u8F93\u51FA\u5230 stderr\u3002",
|
|
723
865
|
"cli.serve.ready.title": "Fabric \u4EEA\u8868\u76D8",
|
|
724
866
|
"cli.serve.lock-held.action-hint": "\u53E6\u4E00\u4E2A `fab serve` \u8FDB\u7A0B (PID {pid}) \u6B63\u5360\u7528\u5DE5\u4F5C\u533A\u9501\u3002\u8BF7\u5148\u505C\u6B62\u5B83 (\u5728\u8BE5\u7EC8\u7AEF\u6309 Ctrl-C \u6216\u8FD0\u884C `kill {pid}`) \u518D\u6267\u884C\u6B64\u547D\u4EE4\u3002",
|
|
725
|
-
"cli.serve.warning.host-fallback": "--host {host} \u9700\u8981 FABRIC_AUTH_TOKEN\
|
|
867
|
+
"cli.serve.warning.host-fallback": "--host {host} \u9700\u8981\u8BBE\u7F6E FABRIC_AUTH_TOKEN \u624D\u80FD\u5BF9\u5916\u66B4\u9732\uFF1B\u5DF2\u56DE\u9000\u5230 127.0.0.1\u3002\u5982\u9700\u7ED1\u5B9A {host}\uFF0C\u8BF7\u8FD0\u884C\uFF1AFABRIC_AUTH_TOKEN=<token> fab serve --host {host}",
|
|
726
868
|
"cli.serve.error.port-in-use": "\u7AEF\u53E3 {port} \u5DF2\u88AB\u5360\u7528\uFF0C\u53EF\u5C1D\u8BD5 --port {nextPort}",
|
|
727
869
|
"cli.update.description": "\u5237\u65B0 MCP \u4E3B\u673A\u914D\u7F6E\u548C git hooks\uFF0C\u4E0D\u91CD\u65B0\u521B\u5EFA Fabric \u6587\u4EF6\u3002",
|
|
728
|
-
"cli.update.args.target.description": "\u76EE\u6807\u9879\u76EE\u8DEF\u5F84\u3002\u9ED8\u8BA4\u4F9D\u6B21\u4F7F\u7528
|
|
870
|
+
"cli.update.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",
|
|
729
871
|
"cli.update.args.no-mcp.description": "\u8DF3\u8FC7\u91CD\u65B0\u914D\u7F6E MCP \u5BA2\u6237\u7AEF",
|
|
730
872
|
"cli.update.args.no-hooks.description": "\u8DF3\u8FC7\u91CD\u65B0\u5B89\u88C5 git hooks",
|
|
731
873
|
"cli.sync-meta.description": "\u4ECE\u5185\u90E8\u89C4\u5219\u6587\u4EF6\u540C\u6B65 Fabric \u5143\u6570\u636E\u3002",
|