@fenglimg/fabric-shared 2.0.0-rc.11 → 2.0.0-rc.15

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.
@@ -39,6 +39,8 @@ var enMessages = {
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
41
  "cli.config.description": "Manage Fabric MCP client configuration.",
42
+ "cli.config.placeholder": "Config panel coming in rc.16 \u2014 edit fabric-config.json directly for now.",
43
+ "cli.config.args.target.description": "Target project directory (defaults to cwd).",
42
44
  "cli.config.clients.claude": "Claude Code CLI",
43
45
  "cli.config.install.description": "Install Fabric MCP server entries into detected client configs.",
44
46
  "cli.config.install.args.clients.description": "Optional comma-separated client filter, for example cursor,codex.",
@@ -53,15 +55,15 @@ var enMessages = {
53
55
  "doctor.section.fixable": "Fixable errors:",
54
56
  "doctor.section.manual": "Manual errors:",
55
57
  "doctor.section.warnings": "Warnings:",
56
- "doctor.section.apply-lint-mutations": "Apply-lint mutations:",
58
+ "doctor.section.fix-knowledge-mutations": "Fix-knowledge mutations:",
57
59
  "cli.doctor.args.target.description": "Target project path. Defaults to CLI arg, EXTERNAL_FIXTURE_PATH, fabric.config.json, then cwd.",
58
60
  "cli.doctor.args.fix.description": "Repair deterministic derived Fabric state, including meta, knowledge-test index, bootstrap, and events ledger.",
59
61
  "cli.doctor.args.json.description": "Print the doctor report as JSON.",
60
62
  "cli.doctor.args.strict.description": "Treat warnings as failures.",
61
- "cli.doctor.args.force.description": "Run even if a serve process appears to hold the lock.",
62
- "cli.doctor.args.apply-lint.description": "Apply lint mutations: demote orphaned canonical entries, archive stale drafts, and bump drifted index counters. Emits knowledge_demoted / knowledge_archived events. Default doctor invocation remains report-only.",
63
- "cli.doctor.args.yes.description": "Skip the --apply-lint safety confirm. Required for non-tty invocations unless FABRIC_NONINTERACTIVE=1 is set in the environment.",
64
- "cli.doctor.errors.apply-lint-fix-mutually-exclusive": "--apply-lint and --fix cannot be combined. --apply-lint mutates user knowledge state (demote/archive); --fix repairs derived state (meta/index). Run them separately.",
63
+ "cli.doctor.args.fix-knowledge.description": "Apply lint mutations: demote orphaned canonical entries, archive stale drafts, and bump drifted index counters. Emits knowledge_demoted / knowledge_archived events. Default doctor invocation remains report-only.",
64
+ "cli.doctor.args.rescan.description": "Re-run the init scan to rebuild .fabric/agents.meta.json forensic state before doctor checks.",
65
+ "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
+ "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.",
65
67
  "cli.hooks.description": "Manage Fabric Git hook templates.",
66
68
  "cli.hooks.install.description": "Install the Fabric Husky pre-commit hook template.",
67
69
  "cli.hooks.install.args.target.description": "Target project path, default is the current working directory.",
@@ -77,134 +79,116 @@ var enMessages = {
77
79
  "cli.human-lint.table.location": "Location",
78
80
  "cli.human-lint.table.expected": "Expected",
79
81
  "cli.human-lint.table.got": "Got",
80
- "cli.init.description": "Initialize Fabric in the target project.",
81
- "cli.init.args.target.description": "Target project path. Defaults to CLI arg, EXTERNAL_FIXTURE_PATH, fabric.config.json, then cwd.",
82
- "cli.init.args.debug.description": "Print target resolution details to stderr.",
83
- "cli.init.args.force.description": "Overwrite existing files (bypass non-destructive guard)",
84
- "cli.init.args.yes.description": "Accept the current init plan and run without the TTY wizard",
85
- "cli.init.args.plan.description": "Print the init plan without writing files or running follow-up stages",
86
- "cli.init.args.reapply.description": "Reapply Fabric-managed files and stage installers over an existing setup",
87
- "cli.init.args.no-bootstrap.description": "Compatibility flag: remove bootstrap from the init plan",
88
- "cli.init.args.no-mcp.description": "Compatibility flag: remove MCP configuration from the init plan",
89
- "cli.init.args.no-hooks.description": "Compatibility flag: remove git hooks from the init plan",
90
- "cli.init.args.interactive.description": "Compatibility flag: disable the TTY wizard and use direct execution",
91
- "cli.init.mcp.install.global": "Using globally-installed @fenglimg/fabric-server",
92
- "cli.init.mcp.install.local": "Installing @fenglimg/fabric-server to project devDependencies",
93
- "cli.init.mcp.install.prompt": "MCP server install scope (global|local)",
94
- "cli.init.mcp.install.invalid": 'Invalid --mcp-install value "{value}" \u2014 falling back to global',
95
- "cli.init.mcp.local.installing": "Running {manager} add -D @fenglimg/fabric-server...",
96
- "cli.init.mcp.local.installed": "Installed to devDependencies",
97
- "cli.init.mcp.scope.description": "Claude MCP config scope: project (writes .mcp.json) or user (writes ~/.claude.json)",
98
- "cli.init.mcp.scope.invalid": 'Invalid --scope value "{value}" \u2014 falling back to project',
99
- "cli.init.mcp.scope.project": "Writes .mcp.json in project root (per Claude Code spec)",
100
- "cli.init.mcp.scope.user": "Writes ~/.claude.json (user-scoped, applies to all projects)",
101
- "cli.init.wizard.mcp-scope": "Claude MCP config scope (project/.mcp.json or user/~/.claude.json) [{defaultValue}]",
102
- "cli.init.created-path": "{label} {path}",
103
- "cli.init.skipped-existing-path": "{label} {path}: already exists.",
104
- "cli.init.force.overwritten": "Overwritten",
105
- "cli.init.force.warning": "--force will overwrite existing Fabric artifacts in {path}",
106
- "cli.init.stages.bootstrap": "Installing bootstrap templates...",
107
- "cli.init.stages.mcp": "Configuring MCP clients...",
108
- "cli.init.stages.hooks": "Installing git hooks...",
109
- "cli.init.stages.skipped": "skipped",
110
- "cli.init.stages.completed": "completed",
111
- "cli.init.stages.failed": "failed",
112
- "cli.init.stages.summary.ran": "ran",
113
- "cli.init.stages.summary.skipped": "skipped",
114
- "cli.init.stages.summary.failed": "failed",
115
- "cli.init.next-step": "{label} {message}",
116
- "cli.init.reason-message": "{label} {message}",
117
- "cli.init.plan.title": "Fabric init plan",
118
- "cli.init.plan.mode-banner.default": "[mode: apply] Standard init execution",
119
- "cli.init.plan.mode-banner.plan": "[mode: plan] Dry run only, no files will be written",
120
- "cli.init.plan.mode-banner.reapply": "[mode: reapply] Force reapplying Fabric-managed assets",
121
- "cli.init.plan.mode-banner.plan-reapply": "[mode: plan+reapply] Previewing a forced reapply without writing files",
122
- "cli.init.plan.target": "Target: {target}",
123
- "cli.init.plan.actions": "Plan: bootstrap={bootstrap} mcp={mcp} hooks={hooks} mcp-install={mcpInstall}",
124
- "cli.init.plan.detected": "Detected clients: {clients}",
125
- "cli.init.plan.writes": "Core writes:",
126
- "cli.init.plan.preview-title": "Fabric init dry run",
127
- "cli.init.plan.preview-result": "Mode={mode} bootstrap={bootstrap} mcp={mcp} hooks={hooks}",
128
- "cli.init.mode.default": "default",
129
- "cli.init.mode.reapply": "reapply",
130
- "cli.init.mode.badge.default": "APPLY",
131
- "cli.init.mode.badge.plan": "PLAN",
132
- "cli.init.mode.badge.reapply": "REAPPLY",
133
- "cli.init.mode.badge.plan-reapply": "PLAN + REAPPLY",
134
- "cli.init.compat.plan": "Using standard --plan mode: no files will be written.",
135
- "cli.init.compat.interactive": "Compatibility: --interactive=false disables the TTY wizard.",
136
- "cli.init.compat.legacy-stage-flags": "Compatibility: legacy --no-* flags are being mapped into the init plan.",
137
- "cli.init.wizard.title": "Fabric init wizard",
138
- "cli.init.wizard.intro": "Fabric init",
139
- "cli.init.wizard.overview.title": "Install overview",
140
- "cli.init.wizard.overview.body": "Target: {target}\nMode: {mode}\nThis wizard only reshapes the init plan; execution still runs through the existing Fabric init stages.",
141
- "cli.init.wizard.step.target": "Confirm target",
142
- "cli.init.wizard.step.plan": "Shape init plan",
143
- "cli.init.wizard.step.review": "Review final plan",
144
- "cli.init.wizard.target.confirm": "Continue initializing Fabric in {target}? [Y/n]",
145
- "cli.init.wizard.stage.bootstrap": "Install bootstrap templates? [{defaultValue}]",
146
- "cli.init.wizard.stage.mcp": "Configure MCP clients? [{defaultValue}]",
147
- "cli.init.wizard.stage.hooks": "Install git hooks? [{defaultValue}]",
148
- "cli.init.wizard.mcp-install": "MCP server install scope (global/local) [{defaultValue}]",
149
- "cli.init.wizard.execute.confirm": "Execute this init plan now? [Y/n]",
150
- "cli.init.wizard.outro": "Init plan accepted. Running Fabric init...",
151
- "cli.init.wizard.invalid-yes-no": "Please answer yes or no.",
152
- "cli.init.wizard.invalid-select": "Invalid value. Use one of: {options}.",
153
- "cli.init.wizard.cancelled": "Fabric init cancelled before execution.",
154
- "cli.init.capabilities.title": "Client capability summary",
155
- "cli.init.capabilities.none": "No supported client was detected for bootstrap or MCP follow-up.",
156
- "cli.init.capabilities.header.client": "Client",
157
- "cli.init.capabilities.header.bootstrap": "Bootstrap",
158
- "cli.init.capabilities.header.mcp": "MCP",
159
- "cli.init.capabilities.header.hook": "Hook",
160
- "cli.init.capabilities.header.skill": "Skill",
161
- "cli.init.capabilities.header.follow-up": "Follow-up",
162
- "cli.init.capabilities.status.ready": "ready",
163
- "cli.init.capabilities.status.installed": "installed",
164
- "cli.init.capabilities.status.supported": "supported",
165
- "cli.init.capabilities.status.manual": "manual",
166
- "cli.init.capabilities.status.skipped": "skipped",
167
- "cli.init.capabilities.status.failed": "failed",
168
- "cli.init.capabilities.status.na": "n/a",
169
- "cli.init.capabilities.follow-up.ready": "continue in client",
170
- "cli.init.capabilities.follow-up.install": "install client assets",
171
- "cli.init.capabilities.follow-up.manual": "manual step required",
172
- "cli.init.next-step.message": "run fab hooks install to add the Day 4 pre-commit pipeline.",
173
- "cli.init.reason-message.installable-body": ".fabric/forensic.json is ready; some detected clients support Fabric follow-up but still need client assets installed.",
174
- "cli.init.reason-message.manual-body": ".fabric/forensic.json is ready; some detected clients still need manual follow-up because no Fabric skill is installed for them yet.",
175
- "cli.init.codex-hooks.created": "{label} {path} with Codex hooks config (requires features.codex_hooks = true).",
176
- "cli.init.codex-hooks.updated": "{label} {path} with Codex hooks config (requires features.codex_hooks = true).",
177
- "cli.init.codex-hooks.skipped": "{label} {path}: Codex hooks config already present.",
178
- "cli.init.claude-settings.created": "{label} {path} with Claude Stop hook.",
179
- "cli.init.claude-settings.updated": "{label} {path} with Claude Stop hook.",
180
- "cli.init.claude-settings.skipped": "{label} {path}: Claude Stop hook already present.",
181
- "cli.init.claude-settings.skipped-invalid": "{label} {path}: unable to merge Claude Stop hook.",
182
- "cli.init.claude-settings.invalid-object": "{label} {path}: expected a JSON object.",
183
- "cli.init.claude-settings.invalid-json": "{label} {path}: invalid JSON ({reason}).",
184
- "cli.init.claude-settings.invalid-hooks": '{label} {path}: "hooks" must be a JSON object.',
185
- "cli.init.claude-settings.invalid-stop-array": '{label} {path}: "hooks.Stop" must be an array.',
186
- "cli.init.errors.abort-existing": "ABORT: {path} already exists. fab init is non-destructive.",
82
+ "cli.install.description": "Install Fabric in the target project.",
83
+ "cli.install.args.target.description": "Target project path. Defaults to CLI arg, EXTERNAL_FIXTURE_PATH, fabric.config.json, then cwd.",
84
+ "cli.install.args.debug.description": "Print target resolution details to stderr.",
85
+ "cli.install.args.yes.description": "Accept the current install plan and run without the TTY wizard",
86
+ "cli.install.args.dry-run.description": "Print the install plan without writing files or running follow-up stages",
87
+ "cli.install.mcp.install.global": "Using globally-installed @fenglimg/fabric-server",
88
+ "cli.install.mcp.install.local": "Installing @fenglimg/fabric-server to project devDependencies",
89
+ "cli.install.mcp.local.installing": "Running {manager} add -D @fenglimg/fabric-server...",
90
+ "cli.install.mcp.local.installed": "Installed to devDependencies",
91
+ "cli.install.mcp.scope.project": "Writes .mcp.json in project root (per Claude Code spec)",
92
+ "cli.install.mcp.scope.user": "Writes ~/.claude.json (user-scoped, applies to all projects)",
93
+ "cli.install.wizard.mcp-scope": "Claude MCP config scope (project/.mcp.json or user/~/.claude.json) [{defaultValue}]",
94
+ "cli.install.created-path": "{label} {path}",
95
+ "cli.install.skipped-existing-path": "{label} {path}: already exists.",
96
+ "cli.install.label.overwritten": "Overwritten",
97
+ "cli.install.stages.bootstrap": "Installing bootstrap templates...",
98
+ "cli.install.stages.mcp": "Configuring MCP clients...",
99
+ "cli.install.stages.hooks": "Installing git hooks...",
100
+ "cli.install.stages.skipped": "skipped",
101
+ "cli.install.stages.completed": "completed",
102
+ "cli.install.stages.failed": "failed",
103
+ "cli.install.stages.summary.ran": "ran",
104
+ "cli.install.stages.summary.skipped": "skipped",
105
+ "cli.install.stages.summary.failed": "failed",
106
+ "cli.install.next-step": "{label} {message}",
107
+ "cli.install.reason-message": "{label} {message}",
108
+ "cli.install.language_preference_hint": "Fabric language preference: {value}. To change, edit `fabric_language` in `.fabric/fabric-config.json` (values: match-existing | zh-CN | en | zh-CN-hybrid).",
109
+ "cli.install.plan.title": "Fabric install plan",
110
+ "cli.install.plan.mode-banner.default": "[mode: apply] Standard install execution",
111
+ "cli.install.plan.mode-banner.plan": "[mode: plan] Dry run only, no files will be written",
112
+ "cli.install.plan.target": "Target: {target}",
113
+ "cli.install.plan.actions": "Plan: bootstrap={bootstrap} mcp={mcp} hooks={hooks} mcp-install={mcpInstall}",
114
+ "cli.install.plan.detected": "Detected clients: {clients}",
115
+ "cli.install.plan.writes": "Core writes:",
116
+ "cli.install.plan.preview-title": "Fabric install dry run",
117
+ "cli.install.plan.preview-result": "Mode={mode} bootstrap={bootstrap} mcp={mcp} hooks={hooks}",
118
+ "cli.install.mode.default": "default",
119
+ "cli.install.mode.badge.default": "APPLY",
120
+ "cli.install.mode.badge.plan": "PLAN",
121
+ "cli.install.wizard.title": "Fabric install wizard",
122
+ "cli.install.wizard.intro": "Fabric install",
123
+ "cli.install.wizard.overview.title": "Install overview",
124
+ "cli.install.wizard.overview.body": "Target: {target}\nMode: {mode}\nThis wizard only reshapes the install plan; execution still runs through the existing Fabric install stages.",
125
+ "cli.install.wizard.step.target": "Confirm target",
126
+ "cli.install.wizard.step.plan": "Shape install plan",
127
+ "cli.install.wizard.step.review": "Review final plan",
128
+ "cli.install.wizard.target.confirm": "Continue installing Fabric in {target}? [Y/n]",
129
+ "cli.install.wizard.stage.bootstrap": "Install bootstrap templates? [{defaultValue}]",
130
+ "cli.install.wizard.stage.mcp": "Configure MCP clients? [{defaultValue}]",
131
+ "cli.install.wizard.stage.hooks": "Install git hooks? [{defaultValue}]",
132
+ "cli.install.wizard.mcp-install": "MCP server install scope (global/local) [{defaultValue}]",
133
+ "cli.install.wizard.execute.confirm": "Execute this install plan now? [Y/n]",
134
+ "cli.install.wizard.outro": "Install plan accepted. Running Fabric install...",
135
+ "cli.install.wizard.invalid-yes-no": "Please answer yes or no.",
136
+ "cli.install.wizard.invalid-select": "Invalid value. Use one of: {options}.",
137
+ "cli.install.wizard.cancelled": "Fabric install cancelled before execution.",
138
+ "cli.install.capabilities.title": "Client capability summary",
139
+ "cli.install.capabilities.none": "No supported client was detected for bootstrap or MCP follow-up.",
140
+ "cli.install.capabilities.header.client": "Client",
141
+ "cli.install.capabilities.header.bootstrap": "Bootstrap",
142
+ "cli.install.capabilities.header.mcp": "MCP",
143
+ "cli.install.capabilities.header.hook": "Hook",
144
+ "cli.install.capabilities.header.skill": "Skill",
145
+ "cli.install.capabilities.header.follow-up": "Follow-up",
146
+ "cli.install.capabilities.status.ready": "ready",
147
+ "cli.install.capabilities.status.installed": "installed",
148
+ "cli.install.capabilities.status.supported": "supported",
149
+ "cli.install.capabilities.status.manual": "manual",
150
+ "cli.install.capabilities.status.skipped": "skipped",
151
+ "cli.install.capabilities.status.failed": "failed",
152
+ "cli.install.capabilities.status.na": "n/a",
153
+ "cli.install.capabilities.follow-up.ready": "continue in client",
154
+ "cli.install.capabilities.follow-up.install": "install client assets",
155
+ "cli.install.capabilities.follow-up.manual": "manual step required",
156
+ "cli.install.next-step.message": "run fab hooks install to add the Day 4 pre-commit pipeline.",
157
+ "cli.install.reason-message.installable-body": ".fabric/forensic.json is ready; some detected clients support Fabric follow-up but still need client assets installed.",
158
+ "cli.install.reason-message.manual-body": ".fabric/forensic.json is ready; some detected clients still need manual follow-up because no Fabric skill is installed for them yet.",
159
+ "cli.install.codex-hooks.created": "{label} {path} with Codex hooks config (requires features.codex_hooks = true).",
160
+ "cli.install.codex-hooks.updated": "{label} {path} with Codex hooks config (requires features.codex_hooks = true).",
161
+ "cli.install.codex-hooks.skipped": "{label} {path}: Codex hooks config already present.",
162
+ "cli.install.claude-settings.created": "{label} {path} with Claude Stop hook.",
163
+ "cli.install.claude-settings.updated": "{label} {path} with Claude Stop hook.",
164
+ "cli.install.claude-settings.skipped": "{label} {path}: Claude Stop hook already present.",
165
+ "cli.install.claude-settings.skipped-invalid": "{label} {path}: unable to merge Claude Stop hook.",
166
+ "cli.install.claude-settings.invalid-object": "{label} {path}: expected a JSON object.",
167
+ "cli.install.claude-settings.invalid-json": "{label} {path}: invalid JSON ({reason}).",
168
+ "cli.install.claude-settings.invalid-hooks": '{label} {path}: "hooks" must be a JSON object.',
169
+ "cli.install.claude-settings.invalid-stop-array": '{label} {path}: "hooks.Stop" must be an array.',
170
+ "cli.install.errors.abort-existing": "ABORT: {path} already exists. fab install is non-destructive.",
171
+ "cli.install.diff.canonical": "Workspace already canonical ({count} files verified).",
172
+ "cli.install.diff.applying-missing": "Applying {count} missing pieces: {files}",
173
+ "cli.install.diff.drift-abort": "Drift detected in {path}. Run `fab doctor` to inspect, or `fab uninstall && fab install` to reset.",
174
+ "cli.install.diff.state.missing": "missing",
175
+ "cli.install.diff.state.present-canonical": "canonical",
176
+ "cli.install.diff.state.drifted": "drifted",
177
+ "cli.install.diff.state.user-modified": "user-modified",
187
178
  "cli.uninstall.description": "Uninstall Fabric from the target project.",
188
179
  "cli.uninstall.args.target.description": "Target project path. Defaults to CLI arg, EXTERNAL_FIXTURE_PATH, fabric.config.json, then cwd.",
189
180
  "cli.uninstall.args.debug.description": "Print target resolution details to stderr.",
190
- "cli.uninstall.args.force.description": "Run even if a serve process appears to hold the lock.",
191
181
  "cli.uninstall.args.yes.description": "Accept the current uninstall plan and run without the TTY wizard.",
192
- "cli.uninstall.args.plan.description": "Print the uninstall plan without removing files or running follow-up stages.",
193
- "cli.uninstall.flags.no-bootstrap": "Skip the bootstrap stage (Skills, hook scripts, hook-config un-merge).",
194
- "cli.uninstall.flags.no-mcp": "Skip the MCP stage (per-client writer.remove for fabric).",
195
- "cli.uninstall.flags.no-scaffold": "Skip the scaffold stage (.fabric/ state files and .gitkeep markers).",
196
- "cli.uninstall.flags.interactive": "Run the interactive TTY wizard when available.",
197
- "cli.uninstall.flags.purge": "Also remove .fabric/knowledge/ subdir contents and state files. Personal-root ~/.fabric/knowledge/ is never touched.",
198
- "cli.uninstall.flags.clean-empties": "Cascade-remove empty arrays/objects when un-merging hook configs.",
182
+ "cli.uninstall.args.dry-run.description": "Print the uninstall plan without removing files or running follow-up stages.",
199
183
  "cli.uninstall.plan.title": "Fabric uninstall plan",
200
184
  "cli.uninstall.plan.target": "Target: {target}",
201
- "cli.uninstall.plan.actions": "Plan: scaffold={scaffold} bootstrap={bootstrap} mcp={mcp} purge={purge} clean-empties={cleanEmpties}",
185
+ "cli.uninstall.plan.actions": "Plan: scaffold={scaffold} bootstrap={bootstrap} mcp={mcp}",
202
186
  "cli.uninstall.plan.detected": "Detected clients: {clients}",
203
187
  "cli.uninstall.plan.preserves": "Preserves:",
204
- "cli.uninstall.plan.preserves.knowledge": "team knowledge tree (unless --purge)",
188
+ "cli.uninstall.plan.preserves.knowledge": "team knowledge tree (always preserved)",
205
189
  "cli.uninstall.plan.preserves.personal": "personal root, never touched",
206
190
  "cli.uninstall.plan.preview-title": "Fabric uninstall dry run",
207
- "cli.uninstall.plan.preview-result": "scaffold={scaffold} bootstrap={bootstrap} mcp={mcp} purge={purge} clean-empties={cleanEmpties}",
191
+ "cli.uninstall.plan.preview-result": "scaffold={scaffold} bootstrap={bootstrap} mcp={mcp}",
208
192
  "cli.uninstall.plan.scaffold-entries.title": "Scaffold entries:",
209
193
  "cli.uninstall.stages.scaffold": "Removing scaffold artifacts...",
210
194
  "cli.uninstall.stages.bootstrap": "Removing bootstrap (Skills + hooks)...",
@@ -216,7 +200,7 @@ var enMessages = {
216
200
  "cli.uninstall.summary.body": "removed={removed} skipped={skipped} errors={errors}",
217
201
  "cli.uninstall.wizard.intro": "Fabric uninstall",
218
202
  "cli.uninstall.wizard.overview.title": "Uninstall overview",
219
- "cli.uninstall.wizard.overview.body": "Target: {target}\nThis wizard only reshapes the uninstall plan; execution still runs through the existing Fabric uninstall stages.\n.fabric/knowledge/ is preserved unless --purge. ~/.fabric/knowledge/ is never touched.",
203
+ "cli.uninstall.wizard.overview.body": "Target: {target}\nThis wizard only reshapes the uninstall plan; execution still runs through the existing Fabric uninstall stages.\n.fabric/knowledge/ is always preserved. ~/.fabric/knowledge/ is never touched.",
220
204
  "cli.uninstall.wizard.step.target": "Confirm target",
221
205
  "cli.uninstall.wizard.step.plan": "Shape uninstall plan",
222
206
  "cli.uninstall.wizard.step.review": "Review final plan",
@@ -224,8 +208,6 @@ var enMessages = {
224
208
  "cli.uninstall.wizard.stage.scaffold": "Remove scaffold artifacts? [{defaultValue}]",
225
209
  "cli.uninstall.wizard.stage.bootstrap": "Remove bootstrap (Skills + hooks)? [{defaultValue}]",
226
210
  "cli.uninstall.wizard.stage.mcp": "Un-register MCP clients? [{defaultValue}]",
227
- "cli.uninstall.wizard.purge": "Purge .fabric/knowledge/ subdir contents too? ~/.fabric/knowledge/ stays untouched. [{defaultValue}]",
228
- "cli.uninstall.wizard.clean-empties": "Cascade-remove empty arrays/objects in hook configs? [{defaultValue}]",
229
211
  "cli.uninstall.wizard.execute.confirm": "Execute this uninstall plan now? [Y/n]",
230
212
  "cli.uninstall.wizard.outro": "Uninstall plan accepted. Running Fabric uninstall...",
231
213
  "cli.uninstall.wizard.cancelled": "Fabric uninstall cancelled before execution.",
@@ -244,7 +226,7 @@ var enMessages = {
244
226
  "cli.scan.args.target.description": "Target absolute path. Defaults to CLI arg, EXTERNAL_FIXTURE_PATH, fabric.config.json, then cwd.",
245
227
  "cli.scan.args.debug.description": "Print detection evidence in formatted output.",
246
228
  "cli.scan.args.json.description": "Print the diagnostic report as JSON.",
247
- "cli.scan.error.missing-forensic": "forensic.json not found at {path}; run `fabric init` first to produce the deterministic project snapshot.",
229
+ "cli.scan.error.missing-forensic": "forensic.json not found at {path}; run `fabric install` first to produce the deterministic project snapshot.",
248
230
  "cli.scan.summary.created": "Wrote {count} knowledge entries to .fabric/knowledge/.",
249
231
  "cli.scan.summary.skipped": "No changes detected; {count} entries already up-to-date.",
250
232
  "cli.scan.report.title": "Fabric scan report",
@@ -259,7 +241,7 @@ var enMessages = {
259
241
  "cli.scan.report.recommendations": "Recommendations:",
260
242
  "cli.scan.readme-quality.ok": "ok",
261
243
  "cli.scan.readme-quality.stub": "stub",
262
- "cli.scan.recommendation.init": "L0: Run fab init to scaffold .fabric/bootstrap/README.md with TODO markers.",
244
+ "cli.scan.recommendation.init": "L0: Run fab install to scaffold .fabric/bootstrap/README.md with TODO markers.",
263
245
  "cli.scan.recommendation.readme": "L0: Expand README.md before promoting project facts into Fabric references.",
264
246
  "cli.scan.recommendation.contributing": "L0: Add CONTRIBUTING.md or leave a bootstrap TODO reference for contribution flow.",
265
247
  "cli.scan.recommendation.unknown-framework": "L1: Add tech-stack TODOs manually because no framework marker was detected.",
@@ -269,8 +251,8 @@ var enMessages = {
269
251
  "cli.serve.args.host.description": "Listen host, default 127.0.0.1. Set FABRIC_AUTH_TOKEN to enable Bearer auth for non-localhost binding.",
270
252
  "cli.serve.args.target.description": "Target project path. Defaults to CLI arg, EXTERNAL_FIXTURE_PATH, fabric.config.json, then cwd.",
271
253
  "cli.serve.args.debug.description": "Print target resolution details to stderr.",
272
- "cli.serve.args.force.description": "Force-acquire the serve lock even if another serve process appears to be running.",
273
254
  "cli.serve.ready.title": "Fabric Dashboard",
255
+ "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.",
274
256
  "cli.serve.warning.host-fallback": "--host {host} requires FABRIC_AUTH_TOKEN; falling back to 127.0.0.1 for safety",
275
257
  "cli.serve.error.port-in-use": "Port {port} in use - try --port {nextPort}",
276
258
  "cli.update.description": "Refresh MCP host configuration and git hooks without re-creating Fabric files.",
@@ -526,6 +508,8 @@ var zhCNMessages = {
526
508
  "cli.bootstrap.install.prepended": "\u5DF2\u524D\u7F6E\u5199\u5165 {path}",
527
509
  "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",
528
510
  "cli.config.description": "\u7BA1\u7406 Fabric MCP \u5BA2\u6237\u7AEF\u914D\u7F6E\u3002",
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",
512
+ "cli.config.args.target.description": "\u76EE\u6807\u9879\u76EE\u76EE\u5F55\uFF08\u9ED8\u8BA4\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55\uFF09\u3002",
529
513
  "cli.config.clients.claude": "Claude Code CLI",
530
514
  "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",
531
515
  "cli.config.install.args.clients.description": "\u53EF\u9009\u7684\u9017\u53F7\u5206\u9694\u5BA2\u6237\u7AEF\u8FC7\u6EE4\u5668\uFF0C\u4F8B\u5982 cursor,codex\u3002",
@@ -540,15 +524,15 @@ var zhCNMessages = {
540
524
  "doctor.section.fixable": "\u53EF\u4FEE\u590D\u9519\u8BEF\uFF1A",
541
525
  "doctor.section.manual": "\u9700\u624B\u52A8\u4FEE\u590D\uFF1A",
542
526
  "doctor.section.warnings": "\u8B66\u544A\uFF1A",
543
- "doctor.section.apply-lint-mutations": "Apply-lint \u53D8\u66F4\uFF1A",
527
+ "doctor.section.fix-knowledge-mutations": "Fix-knowledge \u53D8\u66F4\uFF1A",
544
528
  "cli.doctor.args.target.description": "\u76EE\u6807\u9879\u76EE\u8DEF\u5F84\u3002\u9ED8\u8BA4\u4F9D\u6B21\u4F7F\u7528 CLI \u53C2\u6570\u3001EXTERNAL_FIXTURE_PATH\u3001fabric.config.json\u3001\u5F53\u524D\u76EE\u5F55\u3002",
545
529
  "cli.doctor.args.fix.description": "\u4FEE\u590D\u786E\u5B9A\u6027\u6D3E\u751F\u7684 Fabric \u72B6\u6001\uFF0C\u5305\u62EC meta\u3001knowledge-test \u7D22\u5F15\u3001bootstrap \u548C events ledger\u3002",
546
530
  "cli.doctor.args.json.description": "\u4EE5 JSON \u8F93\u51FA doctor \u62A5\u544A\u3002",
547
531
  "cli.doctor.args.strict.description": "\u5C06 warning \u4E5F\u89C6\u4E3A\u5931\u8D25\u3002",
548
- "cli.doctor.args.force.description": "\u5373\u4F7F serve \u8FDB\u7A0B\u6301\u6709\u9501\uFF0C\u4E5F\u5F3A\u5236\u8FD0\u884C\u3002",
549
- "cli.doctor.args.apply-lint.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\uFF1B\u5199\u5165 knowledge_demoted / knowledge_archived \u4E8B\u4EF6\u3002\u9ED8\u8BA4\u8FD0\u884C\u4ECD\u7136\u53EA\u8BFB\u3002",
550
- "cli.doctor.args.yes.description": "\u8DF3\u8FC7 --apply-lint \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",
551
- "cli.doctor.errors.apply-lint-fix-mutually-exclusive": "--apply-lint \u4E0E --fix \u4E0D\u53EF\u540C\u65F6\u4F7F\u7528\u3002--apply-lint \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",
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\uFF1B\u5199\u5165 knowledge_demoted / knowledge_archived \u4E8B\u4EF6\u3002\u9ED8\u8BA4\u8FD0\u884C\u4ECD\u7136\u53EA\u8BFB\u3002",
533
+ "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
+ "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
+ "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",
552
536
  "cli.hooks.description": "\u7BA1\u7406 Fabric Git \u94A9\u5B50\u6A21\u677F\u3002",
553
537
  "cli.hooks.install.description": "\u5B89\u88C5 Fabric Husky pre-commit \u94A9\u5B50\u6A21\u677F\u3002",
554
538
  "cli.hooks.install.args.target.description": "\u76EE\u6807\u9879\u76EE\u8DEF\u5F84\uFF0C\u9ED8\u8BA4\u4E3A\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55\u3002",
@@ -564,134 +548,116 @@ var zhCNMessages = {
564
548
  "cli.human-lint.table.location": "\u4F4D\u7F6E",
565
549
  "cli.human-lint.table.expected": "\u9884\u671F",
566
550
  "cli.human-lint.table.got": "\u5B9E\u9645",
567
- "cli.init.description": "\u5728\u76EE\u6807\u9879\u76EE\u4E2D\u521D\u59CB\u5316 Fabric\u3002",
568
- "cli.init.args.target.description": "\u76EE\u6807\u9879\u76EE\u8DEF\u5F84\u3002\u9ED8\u8BA4\u4F9D\u6B21\u4F7F\u7528 CLI \u53C2\u6570\u3001EXTERNAL_FIXTURE_PATH\u3001fabric.config.json\u3001\u5F53\u524D\u76EE\u5F55\u3002",
569
- "cli.init.args.debug.description": "\u5C06\u76EE\u6807\u89E3\u6790\u7EC6\u8282\u8F93\u51FA\u5230 stderr\u3002",
570
- "cli.init.args.force.description": "\u8986\u76D6\u73B0\u6709\u6587\u4EF6\uFF08\u7ED5\u8FC7\u975E\u7834\u574F\u6027\u4FDD\u62A4\uFF09",
571
- "cli.init.args.yes.description": "\u63A5\u53D7\u5F53\u524D\u521D\u59CB\u5316\u8BA1\u5212\u5E76\u8DF3\u8FC7 TTY \u5411\u5BFC\u76F4\u63A5\u6267\u884C",
572
- "cli.init.args.plan.description": "\u4EC5\u8F93\u51FA\u521D\u59CB\u5316\u8BA1\u5212\uFF0C\u4E0D\u5199\u6587\u4EF6\u4E5F\u4E0D\u6267\u884C\u540E\u7EED\u9636\u6BB5",
573
- "cli.init.args.reapply.description": "\u5728\u5DF2\u6709 setup \u4E0A\u91CD\u65B0\u5E94\u7528 Fabric \u7BA1\u7406\u7684\u6587\u4EF6\u548C\u9636\u6BB5\u5B89\u88C5\u5668",
574
- "cli.init.args.no-bootstrap.description": "\u517C\u5BB9\u6807\u5FD7\uFF1A\u4ECE\u521D\u59CB\u5316\u8BA1\u5212\u4E2D\u79FB\u9664 bootstrap",
575
- "cli.init.args.no-mcp.description": "\u517C\u5BB9\u6807\u5FD7\uFF1A\u4ECE\u521D\u59CB\u5316\u8BA1\u5212\u4E2D\u79FB\u9664 MCP \u914D\u7F6E",
576
- "cli.init.args.no-hooks.description": "\u517C\u5BB9\u6807\u5FD7\uFF1A\u4ECE\u521D\u59CB\u5316\u8BA1\u5212\u4E2D\u79FB\u9664 git hooks",
577
- "cli.init.args.interactive.description": "\u517C\u5BB9\u6807\u5FD7\uFF1A\u7981\u7528 TTY \u5411\u5BFC\u5E76\u76F4\u63A5\u6267\u884C",
578
- "cli.init.mcp.install.global": "\u4F7F\u7528\u5168\u5C40\u5B89\u88C5\u7684 @fenglimg/fabric-server",
579
- "cli.init.mcp.install.local": "\u5C06 @fenglimg/fabric-server \u5B89\u88C5\u5230\u9879\u76EE devDependencies",
580
- "cli.init.mcp.install.prompt": "MCP \u670D\u52A1\u7AEF\u5B89\u88C5\u8303\u56F4\uFF08global|local\uFF09",
581
- "cli.init.mcp.install.invalid": "\u65E0\u6548\u7684 --mcp-install \u503C\u201C{value}\u201D\uFF0C\u5C06\u56DE\u9000\u5230 global",
582
- "cli.init.mcp.local.installing": "\u6B63\u5728\u8FD0\u884C {manager} add -D @fenglimg/fabric-server...",
583
- "cli.init.mcp.local.installed": "\u5DF2\u5B89\u88C5\u5230 devDependencies",
584
- "cli.init.mcp.scope.description": "Claude MCP \u914D\u7F6E\u8303\u56F4\uFF1Aproject\uFF08\u5199\u5165 .mcp.json\uFF09\u6216 user\uFF08\u5199\u5165 ~/.claude.json\uFF09",
585
- "cli.init.mcp.scope.invalid": "\u65E0\u6548\u7684 --scope \u503C\u201C{value}\u201D\uFF0C\u5C06\u56DE\u9000\u5230 project",
586
- "cli.init.mcp.scope.project": "\u5199\u5165\u9879\u76EE\u6839\u76EE\u5F55\u7684 .mcp.json\uFF08\u7B26\u5408 Claude Code \u89C4\u8303\uFF09",
587
- "cli.init.mcp.scope.user": "\u5199\u5165 ~/.claude.json\uFF08\u7528\u6237\u8303\u56F4\uFF0C\u9002\u7528\u4E8E\u6240\u6709\u9879\u76EE\uFF09",
588
- "cli.init.wizard.mcp-scope": "Claude MCP \u914D\u7F6E\u8303\u56F4\uFF08project/.mcp.json \u6216 user/~/.claude.json\uFF09[{defaultValue}]",
589
- "cli.init.created-path": "{label} {path}",
590
- "cli.init.skipped-existing-path": "{label} {path}\uFF1A\u5DF2\u5B58\u5728\u3002",
591
- "cli.init.force.overwritten": "\u5DF2\u8986\u76D6",
592
- "cli.init.force.warning": "--force \u5C06\u8986\u76D6 {path} \u4E2D\u73B0\u6709\u7684 Fabric \u4EA7\u7269",
593
- "cli.init.stages.bootstrap": "\u6B63\u5728\u5B89\u88C5 bootstrap \u6A21\u677F...",
594
- "cli.init.stages.mcp": "\u6B63\u5728\u914D\u7F6E MCP \u5BA2\u6237\u7AEF...",
595
- "cli.init.stages.hooks": "\u6B63\u5728\u5B89\u88C5 git hooks...",
596
- "cli.init.stages.skipped": "\u5DF2\u8DF3\u8FC7",
597
- "cli.init.stages.completed": "\u5DF2\u5B8C\u6210",
598
- "cli.init.stages.failed": "\u5931\u8D25",
599
- "cli.init.stages.summary.ran": "\u5DF2\u6267\u884C",
600
- "cli.init.stages.summary.skipped": "\u5DF2\u8DF3\u8FC7",
601
- "cli.init.stages.summary.failed": "\u5931\u8D25",
602
- "cli.init.next-step": "{label} {message}",
603
- "cli.init.reason-message": "{label} {message}",
604
- "cli.init.plan.title": "Fabric \u521D\u59CB\u5316\u8BA1\u5212",
605
- "cli.init.plan.mode-banner.default": "[mode: apply] \u6807\u51C6\u521D\u59CB\u5316\u6267\u884C",
606
- "cli.init.plan.mode-banner.plan": "[mode: plan] \u4EC5\u9884\u89C8\uFF0C\u4E0D\u4F1A\u5199\u5165\u6587\u4EF6",
607
- "cli.init.plan.mode-banner.reapply": "[mode: reapply] \u5C06\u5F3A\u5236\u91CD\u65B0\u5E94\u7528 Fabric \u7BA1\u7406\u8D44\u4EA7",
608
- "cli.init.plan.mode-banner.plan-reapply": "[mode: plan+reapply] \u6B63\u5728\u9884\u89C8\u4E00\u6B21\u5F3A\u5236 reapply\uFF0C\u4E0D\u4F1A\u5199\u5165\u6587\u4EF6",
609
- "cli.init.plan.target": "\u76EE\u6807\uFF1A{target}",
610
- "cli.init.plan.actions": "\u8BA1\u5212\uFF1Abootstrap={bootstrap} mcp={mcp} hooks={hooks} mcp-install={mcpInstall}",
611
- "cli.init.plan.detected": "\u68C0\u6D4B\u5230\u7684\u5BA2\u6237\u7AEF\uFF1A{clients}",
612
- "cli.init.plan.writes": "\u6838\u5FC3\u5199\u5165\uFF1A",
613
- "cli.init.plan.preview-title": "Fabric \u521D\u59CB\u5316 dry run",
614
- "cli.init.plan.preview-result": "\u6A21\u5F0F={mode} bootstrap={bootstrap} mcp={mcp} hooks={hooks}",
615
- "cli.init.mode.default": "default",
616
- "cli.init.mode.reapply": "reapply",
617
- "cli.init.mode.badge.default": "APPLY",
618
- "cli.init.mode.badge.plan": "PLAN",
619
- "cli.init.mode.badge.reapply": "REAPPLY",
620
- "cli.init.mode.badge.plan-reapply": "PLAN + REAPPLY",
621
- "cli.init.compat.plan": "\u5DF2\u542F\u7528\u6807\u51C6 --plan \u6A21\u5F0F\uFF1A\u4E0D\u4F1A\u5199\u5165\u4EFB\u4F55\u6587\u4EF6\u3002",
622
- "cli.init.compat.interactive": "\u517C\u5BB9\u63D0\u793A\uFF1A--interactive=false \u4F1A\u7981\u7528 TTY \u5411\u5BFC\u3002",
623
- "cli.init.compat.legacy-stage-flags": "\u517C\u5BB9\u63D0\u793A\uFF1A\u65E7\u7684 --no-* \u6807\u5FD7\u6B63\u5728\u6620\u5C04\u5230\u521D\u59CB\u5316\u8BA1\u5212\u4E2D\u3002",
624
- "cli.init.wizard.title": "Fabric \u521D\u59CB\u5316\u5411\u5BFC",
625
- "cli.init.wizard.intro": "Fabric init",
626
- "cli.init.wizard.overview.title": "\u5B89\u88C5\u6982\u89C8",
627
- "cli.init.wizard.overview.body": "\u76EE\u6807\uFF1A{target}\n\u6A21\u5F0F\uFF1A{mode}\n\u8FD9\u4E2A\u5411\u5BFC\u53EA\u8D1F\u8D23\u8C03\u6574\u521D\u59CB\u5316\u8BA1\u5212\uFF1B\u771F\u6B63\u6267\u884C\u4ECD\u7136\u8D70\u73B0\u6709\u7684 Fabric init \u9636\u6BB5\u3002",
628
- "cli.init.wizard.step.target": "\u786E\u8BA4\u76EE\u6807",
629
- "cli.init.wizard.step.plan": "\u914D\u7F6E\u521D\u59CB\u5316\u8BA1\u5212",
630
- "cli.init.wizard.step.review": "\u590D\u6838\u6700\u7EC8\u8BA1\u5212",
631
- "cli.init.wizard.target.confirm": "\u786E\u8BA4\u5728 {target} \u4E2D\u7EE7\u7EED\u521D\u59CB\u5316 Fabric\uFF1F[Y/n]",
632
- "cli.init.wizard.stage.bootstrap": "\u662F\u5426\u5B89\u88C5 bootstrap \u6A21\u677F\uFF1F[{defaultValue}]",
633
- "cli.init.wizard.stage.mcp": "\u662F\u5426\u914D\u7F6E MCP \u5BA2\u6237\u7AEF\uFF1F[{defaultValue}]",
634
- "cli.init.wizard.stage.hooks": "\u662F\u5426\u5B89\u88C5 git hooks\uFF1F[{defaultValue}]",
635
- "cli.init.wizard.mcp-install": "MCP \u670D\u52A1\u7AEF\u5B89\u88C5\u8303\u56F4\uFF08global/local\uFF09[{defaultValue}]",
636
- "cli.init.wizard.execute.confirm": "\u73B0\u5728\u6267\u884C\u8BE5\u521D\u59CB\u5316\u8BA1\u5212\uFF1F[Y/n]",
637
- "cli.init.wizard.outro": "\u521D\u59CB\u5316\u8BA1\u5212\u5DF2\u786E\u8BA4\uFF0C\u5F00\u59CB\u6267\u884C Fabric init...",
638
- "cli.init.wizard.invalid-yes-no": "\u8BF7\u8F93\u5165 yes \u6216 no\u3002",
639
- "cli.init.wizard.invalid-select": "\u65E0\u6548\u8F93\u5165\u3002\u53EF\u9009\u503C\uFF1A{options}\u3002",
640
- "cli.init.wizard.cancelled": "Fabric \u521D\u59CB\u5316\u5DF2\u5728\u6267\u884C\u524D\u53D6\u6D88\u3002",
641
- "cli.init.capabilities.title": "\u5BA2\u6237\u7AEF\u80FD\u529B\u6458\u8981",
642
- "cli.init.capabilities.none": "\u6CA1\u6709\u68C0\u6D4B\u5230\u53EF\u7528\u4E8E bootstrap \u6216 MCP \u540E\u7EED\u63A5\u529B\u7684\u53D7\u652F\u6301\u5BA2\u6237\u7AEF\u3002",
643
- "cli.init.capabilities.header.client": "\u5BA2\u6237\u7AEF",
644
- "cli.init.capabilities.header.bootstrap": "Bootstrap",
645
- "cli.init.capabilities.header.mcp": "MCP",
646
- "cli.init.capabilities.header.hook": "Hook",
647
- "cli.init.capabilities.header.skill": "Skill",
648
- "cli.init.capabilities.header.follow-up": "\u540E\u7EED\u52A8\u4F5C",
649
- "cli.init.capabilities.status.ready": "\u5DF2\u5C31\u7EEA",
650
- "cli.init.capabilities.status.installed": "\u5DF2\u5B89\u88C5",
651
- "cli.init.capabilities.status.supported": "\u5DF2\u652F\u6301",
652
- "cli.init.capabilities.status.manual": "\u624B\u52A8\u5904\u7406",
653
- "cli.init.capabilities.status.skipped": "\u5DF2\u8DF3\u8FC7",
654
- "cli.init.capabilities.status.failed": "\u5931\u8D25",
655
- "cli.init.capabilities.status.na": "\u4E0D\u9002\u7528",
656
- "cli.init.capabilities.follow-up.ready": "\u53EF\u5728\u5BA2\u6237\u7AEF\u7EE7\u7EED",
657
- "cli.init.capabilities.follow-up.install": "\u5B89\u88C5\u5BA2\u6237\u7AEF\u8D44\u4EA7",
658
- "cli.init.capabilities.follow-up.manual": "\u9700\u8981\u624B\u52A8\u540E\u7EED\u5904\u7406",
659
- "cli.init.next-step.message": "\u8FD0\u884C fab hooks install \u4EE5\u6DFB\u52A0\u7B2C 4 \u5929\u7684 pre-commit \u6D41\u6C34\u7EBF\u3002",
660
- "cli.init.reason-message.installable-body": ".fabric/forensic.json \u5DF2\u5C31\u7EEA\uFF1B\u90E8\u5206\u5DF2\u68C0\u6D4B\u5230\u7684\u5BA2\u6237\u7AEF\u5DF2\u652F\u6301 Fabric \u540E\u7EED\u63A5\u529B\uFF0C\u4F46\u4ECD\u9700\u5B89\u88C5\u5BA2\u6237\u7AEF\u8D44\u4EA7\u3002",
661
- "cli.init.reason-message.manual-body": ".fabric/forensic.json \u5DF2\u5C31\u7EEA\uFF1B\u90E8\u5206\u5DF2\u68C0\u6D4B\u5230\u7684\u5BA2\u6237\u7AEF\u5C1A\u672A\u5B89\u88C5 Fabric skill\uFF0C\u9700\u8981\u624B\u52A8\u5B8C\u6210\u540E\u7EED\u521D\u59CB\u5316\u3002",
662
- "cli.init.codex-hooks.created": "{label} {path}\uFF0C\u5E76\u5199\u5165 Codex hooks \u914D\u7F6E\uFF08\u9700\u542F\u7528 features.codex_hooks = true\uFF09\u3002",
663
- "cli.init.codex-hooks.updated": "{label} {path}\uFF0C\u5E76\u5199\u5165 Codex hooks \u914D\u7F6E\uFF08\u9700\u542F\u7528 features.codex_hooks = true\uFF09\u3002",
664
- "cli.init.codex-hooks.skipped": "{label} {path}\uFF1ACodex hooks \u914D\u7F6E\u5DF2\u5B58\u5728\u3002",
665
- "cli.init.claude-settings.created": "{label} {path}\uFF0C\u5E76\u5199\u5165 Claude Stop hook\u3002",
666
- "cli.init.claude-settings.updated": "{label} {path}\uFF0C\u5E76\u5199\u5165 Claude Stop hook\u3002",
667
- "cli.init.claude-settings.skipped": "{label} {path}\uFF1AClaude Stop hook \u5DF2\u5B58\u5728\u3002",
668
- "cli.init.claude-settings.skipped-invalid": "{label} {path}\uFF1A\u65E0\u6CD5\u5408\u5E76 Claude Stop hook\u3002",
669
- "cli.init.claude-settings.invalid-object": "{label} {path}\uFF1A\u9884\u671F\u4E3A JSON \u5BF9\u8C61\u3002",
670
- "cli.init.claude-settings.invalid-json": "{label} {path}\uFF1AJSON \u65E0\u6548\uFF08{reason}\uFF09\u3002",
671
- "cli.init.claude-settings.invalid-hooks": '{label} {path}\uFF1A"hooks" \u5FC5\u987B\u662F JSON \u5BF9\u8C61\u3002',
672
- "cli.init.claude-settings.invalid-stop-array": '{label} {path}\uFF1A"hooks.Stop" \u5FC5\u987B\u662F\u6570\u7EC4\u3002',
673
- "cli.init.errors.abort-existing": "\u4E2D\u6B62\uFF1A{path} \u5DF2\u5B58\u5728\u3002fab init \u662F\u975E\u7834\u574F\u6027\u7684\u3002",
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 CLI \u53C2\u6570\u3001EXTERNAL_FIXTURE_PATH\u3001fabric.config.json\u3001\u5F53\u524D\u76EE\u5F55\u3002",
553
+ "cli.install.args.debug.description": "\u5C06\u76EE\u6807\u89E3\u6790\u7EC6\u8282\u8F93\u51FA\u5230 stderr\u3002",
554
+ "cli.install.args.yes.description": "\u63A5\u53D7\u5F53\u524D\u5B89\u88C5\u8BA1\u5212\u5E76\u8DF3\u8FC7 TTY \u5411\u5BFC\u76F4\u63A5\u6267\u884C",
555
+ "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",
556
+ "cli.install.mcp.install.global": "\u4F7F\u7528\u5168\u5C40\u5B89\u88C5\u7684 @fenglimg/fabric-server",
557
+ "cli.install.mcp.install.local": "\u5C06 @fenglimg/fabric-server \u5B89\u88C5\u5230\u9879\u76EE devDependencies",
558
+ "cli.install.mcp.local.installing": "\u6B63\u5728\u8FD0\u884C {manager} add -D @fenglimg/fabric-server...",
559
+ "cli.install.mcp.local.installed": "\u5DF2\u5B89\u88C5\u5230 devDependencies",
560
+ "cli.install.mcp.scope.project": "\u5199\u5165\u9879\u76EE\u6839\u76EE\u5F55\u7684 .mcp.json\uFF08\u7B26\u5408 Claude Code \u89C4\u8303\uFF09",
561
+ "cli.install.mcp.scope.user": "\u5199\u5165 ~/.claude.json\uFF08\u7528\u6237\u8303\u56F4\uFF0C\u9002\u7528\u4E8E\u6240\u6709\u9879\u76EE\uFF09",
562
+ "cli.install.wizard.mcp-scope": "Claude MCP \u914D\u7F6E\u8303\u56F4\uFF08project/.mcp.json \u6216 user/~/.claude.json\uFF09[{defaultValue}]",
563
+ "cli.install.created-path": "{label} {path}",
564
+ "cli.install.skipped-existing-path": "{label} {path}\uFF1A\u5DF2\u5B58\u5728\u3002",
565
+ "cli.install.label.overwritten": "\u5DF2\u8986\u76D6",
566
+ "cli.install.stages.bootstrap": "\u6B63\u5728\u5B89\u88C5 bootstrap \u6A21\u677F...",
567
+ "cli.install.stages.mcp": "\u6B63\u5728\u914D\u7F6E MCP \u5BA2\u6237\u7AEF...",
568
+ "cli.install.stages.hooks": "\u6B63\u5728\u5B89\u88C5 git hooks...",
569
+ "cli.install.stages.skipped": "\u5DF2\u8DF3\u8FC7",
570
+ "cli.install.stages.completed": "\u5DF2\u5B8C\u6210",
571
+ "cli.install.stages.failed": "\u5931\u8D25",
572
+ "cli.install.stages.summary.ran": "\u5DF2\u6267\u884C",
573
+ "cli.install.stages.summary.skipped": "\u5DF2\u8DF3\u8FC7",
574
+ "cli.install.stages.summary.failed": "\u5931\u8D25",
575
+ "cli.install.next-step": "{label} {message}",
576
+ "cli.install.reason-message": "{label} {message}",
577
+ "cli.install.language_preference_hint": "Fabric \u8BED\u8A00\u504F\u597D\uFF1A{value}\u3002\u5982\u9700\u8C03\u6574\uFF0C\u8BF7\u7F16\u8F91 .fabric/fabric-config.json \u4E2D\u7684 fabric_language \u5B57\u6BB5\uFF08\u53EF\u9009\u503C\uFF1Amatch-existing | zh-CN | en | zh-CN-hybrid\uFF09\u3002",
578
+ "cli.install.plan.title": "Fabric \u5B89\u88C5\u8BA1\u5212",
579
+ "cli.install.plan.mode-banner.default": "[mode: apply] \u6807\u51C6\u5B89\u88C5\u6267\u884C",
580
+ "cli.install.plan.mode-banner.plan": "[mode: plan] \u4EC5\u9884\u89C8\uFF0C\u4E0D\u4F1A\u5199\u5165\u6587\u4EF6",
581
+ "cli.install.plan.target": "\u76EE\u6807\uFF1A{target}",
582
+ "cli.install.plan.actions": "\u8BA1\u5212\uFF1Abootstrap={bootstrap} mcp={mcp} hooks={hooks} mcp-install={mcpInstall}",
583
+ "cli.install.plan.detected": "\u68C0\u6D4B\u5230\u7684\u5BA2\u6237\u7AEF\uFF1A{clients}",
584
+ "cli.install.plan.writes": "\u6838\u5FC3\u5199\u5165\uFF1A",
585
+ "cli.install.plan.preview-title": "Fabric \u5B89\u88C5 dry run",
586
+ "cli.install.plan.preview-result": "\u6A21\u5F0F={mode} bootstrap={bootstrap} mcp={mcp} hooks={hooks}",
587
+ "cli.install.mode.default": "default",
588
+ "cli.install.mode.badge.default": "APPLY",
589
+ "cli.install.mode.badge.plan": "PLAN",
590
+ "cli.install.wizard.title": "Fabric \u5B89\u88C5\u5411\u5BFC",
591
+ "cli.install.wizard.intro": "Fabric install",
592
+ "cli.install.wizard.overview.title": "\u5B89\u88C5\u6982\u89C8",
593
+ "cli.install.wizard.overview.body": "\u76EE\u6807\uFF1A{target}\n\u6A21\u5F0F\uFF1A{mode}\n\u8FD9\u4E2A\u5411\u5BFC\u53EA\u8D1F\u8D23\u8C03\u6574\u5B89\u88C5\u8BA1\u5212\uFF1B\u771F\u6B63\u6267\u884C\u4ECD\u7136\u8D70\u73B0\u6709\u7684 Fabric install \u9636\u6BB5\u3002",
594
+ "cli.install.wizard.step.target": "\u786E\u8BA4\u76EE\u6807",
595
+ "cli.install.wizard.step.plan": "\u914D\u7F6E\u5B89\u88C5\u8BA1\u5212",
596
+ "cli.install.wizard.step.review": "\u590D\u6838\u6700\u7EC8\u8BA1\u5212",
597
+ "cli.install.wizard.target.confirm": "\u786E\u8BA4\u5728 {target} \u4E2D\u7EE7\u7EED\u5B89\u88C5 Fabric\uFF1F[Y/n]",
598
+ "cli.install.wizard.stage.bootstrap": "\u662F\u5426\u5B89\u88C5 bootstrap \u6A21\u677F\uFF1F[{defaultValue}]",
599
+ "cli.install.wizard.stage.mcp": "\u662F\u5426\u914D\u7F6E MCP \u5BA2\u6237\u7AEF\uFF1F[{defaultValue}]",
600
+ "cli.install.wizard.stage.hooks": "\u662F\u5426\u5B89\u88C5 git hooks\uFF1F[{defaultValue}]",
601
+ "cli.install.wizard.mcp-install": "MCP \u670D\u52A1\u7AEF\u5B89\u88C5\u8303\u56F4\uFF08global/local\uFF09[{defaultValue}]",
602
+ "cli.install.wizard.execute.confirm": "\u73B0\u5728\u6267\u884C\u8BE5\u5B89\u88C5\u8BA1\u5212\uFF1F[Y/n]",
603
+ "cli.install.wizard.outro": "\u5B89\u88C5\u8BA1\u5212\u5DF2\u786E\u8BA4\uFF0C\u5F00\u59CB\u6267\u884C Fabric install...",
604
+ "cli.install.wizard.invalid-yes-no": "\u8BF7\u8F93\u5165 yes \u6216 no\u3002",
605
+ "cli.install.wizard.invalid-select": "\u65E0\u6548\u8F93\u5165\u3002\u53EF\u9009\u503C\uFF1A{options}\u3002",
606
+ "cli.install.wizard.cancelled": "Fabric \u5B89\u88C5\u5DF2\u5728\u6267\u884C\u524D\u53D6\u6D88\u3002",
607
+ "cli.install.capabilities.title": "\u5BA2\u6237\u7AEF\u80FD\u529B\u6458\u8981",
608
+ "cli.install.capabilities.none": "\u6CA1\u6709\u68C0\u6D4B\u5230\u53EF\u7528\u4E8E bootstrap \u6216 MCP \u540E\u7EED\u63A5\u529B\u7684\u53D7\u652F\u6301\u5BA2\u6237\u7AEF\u3002",
609
+ "cli.install.capabilities.header.client": "\u5BA2\u6237\u7AEF",
610
+ "cli.install.capabilities.header.bootstrap": "Bootstrap",
611
+ "cli.install.capabilities.header.mcp": "MCP",
612
+ "cli.install.capabilities.header.hook": "Hook",
613
+ "cli.install.capabilities.header.skill": "Skill",
614
+ "cli.install.capabilities.header.follow-up": "\u540E\u7EED\u52A8\u4F5C",
615
+ "cli.install.capabilities.status.ready": "\u5DF2\u5C31\u7EEA",
616
+ "cli.install.capabilities.status.installed": "\u5DF2\u5B89\u88C5",
617
+ "cli.install.capabilities.status.supported": "\u5DF2\u652F\u6301",
618
+ "cli.install.capabilities.status.manual": "\u624B\u52A8\u5904\u7406",
619
+ "cli.install.capabilities.status.skipped": "\u5DF2\u8DF3\u8FC7",
620
+ "cli.install.capabilities.status.failed": "\u5931\u8D25",
621
+ "cli.install.capabilities.status.na": "\u4E0D\u9002\u7528",
622
+ "cli.install.capabilities.follow-up.ready": "\u53EF\u5728\u5BA2\u6237\u7AEF\u7EE7\u7EED",
623
+ "cli.install.capabilities.follow-up.install": "\u5B89\u88C5\u5BA2\u6237\u7AEF\u8D44\u4EA7",
624
+ "cli.install.capabilities.follow-up.manual": "\u9700\u8981\u624B\u52A8\u540E\u7EED\u5904\u7406",
625
+ "cli.install.next-step.message": "\u8FD0\u884C fab hooks install \u4EE5\u6DFB\u52A0\u7B2C 4 \u5929\u7684 pre-commit \u6D41\u6C34\u7EBF\u3002",
626
+ "cli.install.reason-message.installable-body": ".fabric/forensic.json \u5DF2\u5C31\u7EEA\uFF1B\u90E8\u5206\u5DF2\u68C0\u6D4B\u5230\u7684\u5BA2\u6237\u7AEF\u5DF2\u652F\u6301 Fabric \u540E\u7EED\u63A5\u529B\uFF0C\u4F46\u4ECD\u9700\u5B89\u88C5\u5BA2\u6237\u7AEF\u8D44\u4EA7\u3002",
627
+ "cli.install.reason-message.manual-body": ".fabric/forensic.json \u5DF2\u5C31\u7EEA\uFF1B\u90E8\u5206\u5DF2\u68C0\u6D4B\u5230\u7684\u5BA2\u6237\u7AEF\u5C1A\u672A\u5B89\u88C5 Fabric skill\uFF0C\u9700\u8981\u624B\u52A8\u5B8C\u6210\u540E\u7EED\u5B89\u88C5\u3002",
628
+ "cli.install.codex-hooks.created": "{label} {path}\uFF0C\u5E76\u5199\u5165 Codex hooks \u914D\u7F6E\uFF08\u9700\u542F\u7528 features.codex_hooks = true\uFF09\u3002",
629
+ "cli.install.codex-hooks.updated": "{label} {path}\uFF0C\u5E76\u5199\u5165 Codex hooks \u914D\u7F6E\uFF08\u9700\u542F\u7528 features.codex_hooks = true\uFF09\u3002",
630
+ "cli.install.codex-hooks.skipped": "{label} {path}\uFF1ACodex hooks \u914D\u7F6E\u5DF2\u5B58\u5728\u3002",
631
+ "cli.install.claude-settings.created": "{label} {path}\uFF0C\u5E76\u5199\u5165 Claude Stop hook\u3002",
632
+ "cli.install.claude-settings.updated": "{label} {path}\uFF0C\u5E76\u5199\u5165 Claude Stop hook\u3002",
633
+ "cli.install.claude-settings.skipped": "{label} {path}\uFF1AClaude Stop hook \u5DF2\u5B58\u5728\u3002",
634
+ "cli.install.claude-settings.skipped-invalid": "{label} {path}\uFF1A\u65E0\u6CD5\u5408\u5E76 Claude Stop hook\u3002",
635
+ "cli.install.claude-settings.invalid-object": "{label} {path}\uFF1A\u9884\u671F\u4E3A JSON \u5BF9\u8C61\u3002",
636
+ "cli.install.claude-settings.invalid-json": "{label} {path}\uFF1AJSON \u65E0\u6548\uFF08{reason}\uFF09\u3002",
637
+ "cli.install.claude-settings.invalid-hooks": '{label} {path}\uFF1A"hooks" \u5FC5\u987B\u662F JSON \u5BF9\u8C61\u3002',
638
+ "cli.install.claude-settings.invalid-stop-array": '{label} {path}\uFF1A"hooks.Stop" \u5FC5\u987B\u662F\u6570\u7EC4\u3002',
639
+ "cli.install.errors.abort-existing": "\u4E2D\u6B62\uFF1A{path} \u5DF2\u5B58\u5728\u3002fab install \u662F\u975E\u7834\u574F\u6027\u7684\u3002",
640
+ "cli.install.diff.canonical": "\u5DE5\u4F5C\u533A\u5DF2\u662F\u89C4\u8303\u72B6\u6001\uFF08\u5DF2\u6821\u9A8C {count} \u4E2A\u6587\u4EF6\uFF09\u3002",
641
+ "cli.install.diff.applying-missing": "\u6B63\u5728\u8865\u9F50 {count} \u4E2A\u7F3A\u5931\u9879\uFF1A{files}",
642
+ "cli.install.diff.drift-abort": "\u68C0\u6D4B\u5230 {path} \u5DF2\u88AB\u4FEE\u6539\u3002\u8FD0\u884C `fab doctor` \u8FDB\u884C\u68C0\u67E5\uFF0C\u6216 `fab uninstall && fab install` \u8FDB\u884C\u91CD\u7F6E\u3002",
643
+ "cli.install.diff.state.missing": "\u7F3A\u5931",
644
+ "cli.install.diff.state.present-canonical": "\u89C4\u8303",
645
+ "cli.install.diff.state.drifted": "\u6F02\u79FB",
646
+ "cli.install.diff.state.user-modified": "\u7528\u6237\u4FEE\u6539",
674
647
  "cli.uninstall.description": "\u4ECE\u76EE\u6807\u9879\u76EE\u4E2D\u5378\u8F7D Fabric\u3002",
675
648
  "cli.uninstall.args.target.description": "\u76EE\u6807\u9879\u76EE\u8DEF\u5F84\u3002\u9ED8\u8BA4\u4F9D\u6B21\u4F7F\u7528 CLI \u53C2\u6570\u3001EXTERNAL_FIXTURE_PATH\u3001fabric.config.json\u3001\u5F53\u524D\u76EE\u5F55\u3002",
676
649
  "cli.uninstall.args.debug.description": "\u5C06\u76EE\u6807\u89E3\u6790\u7EC6\u8282\u8F93\u51FA\u5230 stderr\u3002",
677
- "cli.uninstall.args.force.description": "\u5373\u4F7F serve \u8FDB\u7A0B\u6301\u6709\u9501\uFF0C\u4E5F\u5F3A\u5236\u8FD0\u884C\u3002",
678
650
  "cli.uninstall.args.yes.description": "\u63A5\u53D7\u5F53\u524D\u5378\u8F7D\u8BA1\u5212\u5E76\u8DF3\u8FC7 TTY \u5411\u5BFC\u76F4\u63A5\u6267\u884C\u3002",
679
- "cli.uninstall.args.plan.description": "\u4EC5\u8F93\u51FA\u5378\u8F7D\u8BA1\u5212\uFF0C\u4E0D\u5220\u9664\u6587\u4EF6\u4E5F\u4E0D\u6267\u884C\u540E\u7EED\u9636\u6BB5\u3002",
680
- "cli.uninstall.flags.no-bootstrap": "\u8DF3\u8FC7 bootstrap \u9636\u6BB5\uFF08Skills\u3001hook \u811A\u672C\u3001hook \u914D\u7F6E\u53CD\u5408\u5E76\uFF09\u3002",
681
- "cli.uninstall.flags.no-mcp": "\u8DF3\u8FC7 MCP \u9636\u6BB5\uFF08\u6309\u5BA2\u6237\u7AEF\u6267\u884C writer.remove('fabric')\uFF09\u3002",
682
- "cli.uninstall.flags.no-scaffold": "\u8DF3\u8FC7 scaffold \u9636\u6BB5\uFF08.fabric/ \u72B6\u6001\u6587\u4EF6\u4E0E .gitkeep \u6807\u8BB0\uFF09\u3002",
683
- "cli.uninstall.flags.interactive": "\u5728 TTY \u53EF\u7528\u65F6\u8FD0\u884C\u4EA4\u4E92\u5F0F\u5411\u5BFC\u3002",
684
- "cli.uninstall.flags.purge": "\u540C\u65F6\u5220\u9664 .fabric/knowledge/ \u5B50\u76EE\u5F55\u5185\u5BB9\u53CA\u72B6\u6001\u6587\u4EF6\uFF1B~/.fabric/knowledge/ \u4E2A\u4EBA\u6839\u6C38\u4E0D\u53D7\u5F71\u54CD\u3002",
685
- "cli.uninstall.flags.clean-empties": "\u53CD\u5408\u5E76\u94A9\u5B50\u914D\u7F6E\u65F6\u7EA7\u8054\u6E05\u7406\u7A7A\u6570\u7EC4/\u5BF9\u8C61\u3002",
651
+ "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",
686
652
  "cli.uninstall.plan.title": "Fabric \u5378\u8F7D\u8BA1\u5212",
687
653
  "cli.uninstall.plan.target": "\u76EE\u6807\uFF1A{target}",
688
- "cli.uninstall.plan.actions": "\u8BA1\u5212\uFF1Ascaffold={scaffold} bootstrap={bootstrap} mcp={mcp} purge={purge} clean-empties={cleanEmpties}",
654
+ "cli.uninstall.plan.actions": "\u8BA1\u5212\uFF1Ascaffold={scaffold} bootstrap={bootstrap} mcp={mcp}",
689
655
  "cli.uninstall.plan.detected": "\u68C0\u6D4B\u5230\u7684\u5BA2\u6237\u7AEF\uFF1A{clients}",
690
656
  "cli.uninstall.plan.preserves": "\u4FDD\u7559\u9879\uFF1A",
691
- "cli.uninstall.plan.preserves.knowledge": "\u56E2\u961F\u77E5\u8BC6\u6811\uFF08\u9664\u975E\u4F20\u5165 --purge\uFF09",
657
+ "cli.uninstall.plan.preserves.knowledge": "\u56E2\u961F\u77E5\u8BC6\u6811\uFF08\u59CB\u7EC8\u4FDD\u7559\uFF09",
692
658
  "cli.uninstall.plan.preserves.personal": "\u4E2A\u4EBA\u6839\u76EE\u5F55\uFF0C\u6C38\u4E0D\u89E6\u78B0",
693
659
  "cli.uninstall.plan.preview-title": "Fabric \u5378\u8F7D dry run",
694
- "cli.uninstall.plan.preview-result": "scaffold={scaffold} bootstrap={bootstrap} mcp={mcp} purge={purge} clean-empties={cleanEmpties}",
660
+ "cli.uninstall.plan.preview-result": "scaffold={scaffold} bootstrap={bootstrap} mcp={mcp}",
695
661
  "cli.uninstall.plan.scaffold-entries.title": "Scaffold \u5F85\u6E05\u7406\u9879\uFF1A",
696
662
  "cli.uninstall.stages.scaffold": "\u6B63\u5728\u6E05\u7406 scaffold \u4EA7\u7269...",
697
663
  "cli.uninstall.stages.bootstrap": "\u6B63\u5728\u79FB\u9664 bootstrap\uFF08Skills + hooks\uFF09...",
@@ -703,7 +669,7 @@ var zhCNMessages = {
703
669
  "cli.uninstall.summary.body": "removed={removed} skipped={skipped} errors={errors}",
704
670
  "cli.uninstall.wizard.intro": "\u5378\u8F7D Fabric",
705
671
  "cli.uninstall.wizard.overview.title": "\u5378\u8F7D\u6982\u89C8",
706
- "cli.uninstall.wizard.overview.body": "\u76EE\u6807\uFF1A{target}\n\u8FD9\u4E2A\u5411\u5BFC\u53EA\u8D1F\u8D23\u8C03\u6574\u5378\u8F7D\u8BA1\u5212\uFF1B\u771F\u6B63\u6267\u884C\u4ECD\u7136\u8D70\u73B0\u6709\u7684 Fabric uninstall \u9636\u6BB5\u3002\n\u9664\u975E\u4F20\u5165 --purge\uFF0C\u5426\u5219 .fabric/knowledge/ \u4F1A\u88AB\u4FDD\u7559\uFF1B~/.fabric/knowledge/ \u6C38\u4E0D\u53D7\u5F71\u54CD\u3002",
672
+ "cli.uninstall.wizard.overview.body": "\u76EE\u6807\uFF1A{target}\n\u8FD9\u4E2A\u5411\u5BFC\u53EA\u8D1F\u8D23\u8C03\u6574\u5378\u8F7D\u8BA1\u5212\uFF1B\u771F\u6B63\u6267\u884C\u4ECD\u7136\u8D70\u73B0\u6709\u7684 Fabric uninstall \u9636\u6BB5\u3002\n.fabric/knowledge/ \u59CB\u7EC8\u4FDD\u7559\uFF1B~/.fabric/knowledge/ \u6C38\u4E0D\u53D7\u5F71\u54CD\u3002",
707
673
  "cli.uninstall.wizard.step.target": "\u786E\u8BA4\u76EE\u6807",
708
674
  "cli.uninstall.wizard.step.plan": "\u914D\u7F6E\u5378\u8F7D\u8BA1\u5212",
709
675
  "cli.uninstall.wizard.step.review": "\u590D\u6838\u6700\u7EC8\u8BA1\u5212",
@@ -711,8 +677,6 @@ var zhCNMessages = {
711
677
  "cli.uninstall.wizard.stage.scaffold": "\u662F\u5426\u6E05\u7406 scaffold \u4EA7\u7269\uFF1F[{defaultValue}]",
712
678
  "cli.uninstall.wizard.stage.bootstrap": "\u662F\u5426\u79FB\u9664 bootstrap\uFF08Skills + hooks\uFF09\uFF1F[{defaultValue}]",
713
679
  "cli.uninstall.wizard.stage.mcp": "\u662F\u5426\u53CD\u6CE8\u518C MCP \u5BA2\u6237\u7AEF\uFF1F[{defaultValue}]",
714
- "cli.uninstall.wizard.purge": "\u662F\u5426\u4E00\u5E76\u6E05\u7406 .fabric/knowledge/ \u5B50\u76EE\u5F55\u5185\u5BB9\uFF1F~/.fabric/knowledge/ \u4E0D\u53D7\u5F71\u54CD\u3002[{defaultValue}]",
715
- "cli.uninstall.wizard.clean-empties": "\u53CD\u5408\u5E76\u94A9\u5B50\u914D\u7F6E\u65F6\u7EA7\u8054\u6E05\u7406\u7A7A\u6570\u7EC4/\u5BF9\u8C61\uFF1F[{defaultValue}]",
716
680
  "cli.uninstall.wizard.execute.confirm": "\u73B0\u5728\u6267\u884C\u8BE5\u5378\u8F7D\u8BA1\u5212\uFF1F[Y/n]",
717
681
  "cli.uninstall.wizard.outro": "\u5378\u8F7D\u8BA1\u5212\u5DF2\u786E\u8BA4\uFF0C\u5F00\u59CB\u6267\u884C Fabric uninstall...",
718
682
  "cli.uninstall.wizard.cancelled": "Fabric \u5378\u8F7D\u5DF2\u5728\u6267\u884C\u524D\u53D6\u6D88\u3002",
@@ -731,7 +695,7 @@ var zhCNMessages = {
731
695
  "cli.scan.args.target.description": "\u76EE\u6807\u7EDD\u5BF9\u8DEF\u5F84\u3002\u9ED8\u8BA4\u4F9D\u6B21\u4F7F\u7528 CLI \u53C2\u6570\u3001EXTERNAL_FIXTURE_PATH\u3001fabric.config.json\u3001\u5F53\u524D\u76EE\u5F55\u3002",
732
696
  "cli.scan.args.debug.description": "\u4EE5\u683C\u5F0F\u5316\u8F93\u51FA\u6253\u5370\u68C0\u6D4B\u8BC1\u636E\u3002",
733
697
  "cli.scan.args.json.description": "\u4EE5 JSON \u683C\u5F0F\u8F93\u51FA\u8BCA\u65AD\u62A5\u544A\u3002",
734
- "cli.scan.error.missing-forensic": "\u672A\u627E\u5230 forensic.json\uFF08\u8DEF\u5F84 {path}\uFF09\uFF1B\u8BF7\u5148\u8FD0\u884C `fabric init` \u751F\u6210\u9879\u76EE\u5FEB\u7167\u3002",
698
+ "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",
735
699
  "cli.scan.summary.created": "\u5DF2\u5199\u5165 {count} \u6761\u77E5\u8BC6\u6761\u76EE\u81F3 .fabric/knowledge/\u3002",
736
700
  "cli.scan.summary.skipped": "\u65E0\u5DEE\u5F02\uFF1B{count} \u6761\u5DF2\u5B58\u5728\u7684\u6761\u76EE\u4FDD\u6301\u4E0D\u53D8\u3002",
737
701
  "cli.scan.report.title": "Fabric \u626B\u63CF\u62A5\u544A",
@@ -746,7 +710,7 @@ var zhCNMessages = {
746
710
  "cli.scan.report.recommendations": "\u5EFA\u8BAE\uFF1A",
747
711
  "cli.scan.readme-quality.ok": "\u826F\u597D",
748
712
  "cli.scan.readme-quality.stub": "\u8349\u7A3F",
749
- "cli.scan.recommendation.init": "L0\uFF1A\u8FD0\u884C fab init\uFF0C\u5728 .fabric/bootstrap/README.md \u751F\u6210\u5E26 TODO \u6807\u8BB0\u7684\u521D\u59CB\u8BF4\u660E\u3002",
713
+ "cli.scan.recommendation.init": "L0\uFF1A\u8FD0\u884C fab install\uFF0C\u5728 .fabric/bootstrap/README.md \u751F\u6210\u5E26 TODO \u6807\u8BB0\u7684\u521D\u59CB\u8BF4\u660E\u3002",
750
714
  "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",
751
715
  "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",
752
716
  "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",
@@ -756,8 +720,8 @@ var zhCNMessages = {
756
720
  "cli.serve.args.host.description": "\u76D1\u542C\u4E3B\u673A\uFF0C\u9ED8\u8BA4 127.0.0.1\u3002\u82E5\u9700\u7ED1\u5B9A\u5230\u975E localhost\uFF0C\u8BF7\u8BBE\u7F6E FABRIC_AUTH_TOKEN \u4EE5\u542F\u7528 Bearer \u9274\u6743\u3002",
757
721
  "cli.serve.args.target.description": "\u76EE\u6807\u9879\u76EE\u8DEF\u5F84\u3002\u9ED8\u8BA4\u4F9D\u6B21\u4F7F\u7528 CLI \u53C2\u6570\u3001EXTERNAL_FIXTURE_PATH\u3001fabric.config.json\u3001\u5F53\u524D\u76EE\u5F55\u3002",
758
722
  "cli.serve.args.debug.description": "\u5C06\u76EE\u6807\u89E3\u6790\u7EC6\u8282\u8F93\u51FA\u5230 stderr\u3002",
759
- "cli.serve.args.force.description": "\u5373\u4F7F\u53E6\u4E00\u4E2A serve \u8FDB\u7A0B\u6B63\u5728\u8FD0\u884C\uFF0C\u4E5F\u5F3A\u5236\u83B7\u53D6 serve \u9501\u3002",
760
723
  "cli.serve.ready.title": "Fabric \u4EEA\u8868\u76D8",
724
+ "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",
761
725
  "cli.serve.warning.host-fallback": "--host {host} \u9700\u8981 FABRIC_AUTH_TOKEN\uFF1B\u4E3A\u5B89\u5168\u8D77\u89C1\u5DF2\u56DE\u9000\u5230 127.0.0.1",
762
726
  "cli.serve.error.port-in-use": "\u7AEF\u53E3 {port} \u5DF2\u88AB\u5360\u7528\uFF0C\u53EF\u5C1D\u8BD5 --port {nextPort}",
763
727
  "cli.update.description": "\u5237\u65B0 MCP \u4E3B\u673A\u914D\u7F6E\u548C git hooks\uFF0C\u4E0D\u91CD\u65B0\u521B\u5EFA Fabric \u6587\u4EF6\u3002",
@@ -6,7 +6,7 @@ import {
6
6
  enMessages,
7
7
  normalizeLocale,
8
8
  zhCNMessages
9
- } from "../chunk-W4TKEXRG.js";
9
+ } from "../chunk-BKTCBFXZ.js";
10
10
  export {
11
11
  PROTECTED_TOKENS,
12
12
  createTranslator,
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { AgentsMetaNode, AgentsIdentitySource, AgentsLayer, AgentsTopologyType, HumanLockEntry, AgentsMeta, LedgerEntry } from './types/index.js';
2
- export { AgentsActivationTier, AgentsMetaCountersEnvelope, AgentsMetaKnowledgeTypeCounters, AgentsMetaNodeActivation, AiLedgerEntry, AuditMode, ClientPaths, DefaultLayerFilter, FabricConfig, HumanLedgerEntry, KnowledgeLanguage, McpPayloadLimits, RuleDescription, RuleDescriptionIndexItem } from './types/index.js';
2
+ export { AgentsActivationTier, AgentsMetaCountersEnvelope, AgentsMetaKnowledgeTypeCounters, AgentsMetaNodeActivation, AiLedgerEntry, AuditMode, ClientPaths, DefaultLayerFilter, FabricConfig, FabricLanguage, HumanLedgerEntry, McpPayloadLimits, RuleDescription, RuleDescriptionIndexItem } from './types/index.js';
3
3
  export { Locale, Messages, PROTECTED_TOKENS, ProtectedToken, TranslationKey, Translator, createTranslator, defaultMessages, detectNodeLocale, enMessages, normalizeLocale, zhCNMessages } from './i18n/index.js';
4
4
  import { z } from 'zod';
5
5
  import { Layer, KnowledgeType, StableId } from './schemas/api-contracts.js';
@@ -1335,7 +1335,7 @@ declare const mcpPayloadLimitsSchema: z.ZodOptional<z.ZodObject<{
1335
1335
  warnBytes?: number | undefined;
1336
1336
  hardBytes?: number | undefined;
1337
1337
  }>>;
1338
- declare const knowledgeLanguageSchema: z.ZodEnum<["match-existing", "zh-CN", "en"]>;
1338
+ declare const fabricLanguageSchema: z.ZodEnum<["match-existing", "zh-CN", "en", "zh-CN-hybrid"]>;
1339
1339
  declare const defaultLayerFilterSchema: z.ZodEnum<["team", "personal", "both"]>;
1340
1340
  declare const fabricConfigSchema: z.ZodObject<{
1341
1341
  clientPaths: z.ZodOptional<z.ZodObject<{
@@ -1356,7 +1356,6 @@ declare const fabricConfigSchema: z.ZodObject<{
1356
1356
  }>>;
1357
1357
  externalFixturePath: z.ZodOptional<z.ZodString>;
1358
1358
  scanIgnores: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1359
- auditMode: z.ZodOptional<z.ZodEnum<["strict", "warn", "off"]>>;
1360
1359
  audit_mode: z.ZodOptional<z.ZodEnum<["strict", "warn", "off"]>>;
1361
1360
  mcpPayloadLimits: z.ZodOptional<z.ZodObject<{
1362
1361
  warnBytes: z.ZodOptional<z.ZodNumber>;
@@ -1368,7 +1367,7 @@ declare const fabricConfigSchema: z.ZodObject<{
1368
1367
  warnBytes?: number | undefined;
1369
1368
  hardBytes?: number | undefined;
1370
1369
  }>>;
1371
- knowledge_language: z.ZodDefault<z.ZodOptional<z.ZodEnum<["match-existing", "zh-CN", "en"]>>>;
1370
+ fabric_language: z.ZodDefault<z.ZodOptional<z.ZodEnum<["match-existing", "zh-CN", "en", "zh-CN-hybrid"]>>>;
1372
1371
  default_layer_filter: z.ZodDefault<z.ZodOptional<z.ZodEnum<["team", "personal", "both"]>>>;
1373
1372
  archive_hint_cooldown_hours: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
1374
1373
  underseed_node_threshold: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
@@ -1389,7 +1388,7 @@ declare const fabricConfigSchema: z.ZodObject<{
1389
1388
  review_topic_result_cap: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
1390
1389
  review_stale_pending_days: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
1391
1390
  }, "strip", z.ZodTypeAny, {
1392
- knowledge_language: "match-existing" | "zh-CN" | "en";
1391
+ fabric_language: "match-existing" | "zh-CN" | "en" | "zh-CN-hybrid";
1393
1392
  default_layer_filter: "personal" | "team" | "both";
1394
1393
  archive_hint_cooldown_hours: number;
1395
1394
  underseed_node_threshold: number;
@@ -1417,7 +1416,6 @@ declare const fabricConfigSchema: z.ZodObject<{
1417
1416
  } | undefined;
1418
1417
  externalFixturePath?: string | undefined;
1419
1418
  scanIgnores?: string[] | undefined;
1420
- auditMode?: "strict" | "warn" | "off" | undefined;
1421
1419
  audit_mode?: "strict" | "warn" | "off" | undefined;
1422
1420
  mcpPayloadLimits?: {
1423
1421
  warnBytes?: number | undefined;
@@ -1432,13 +1430,12 @@ declare const fabricConfigSchema: z.ZodObject<{
1432
1430
  } | undefined;
1433
1431
  externalFixturePath?: string | undefined;
1434
1432
  scanIgnores?: string[] | undefined;
1435
- auditMode?: "strict" | "warn" | "off" | undefined;
1436
1433
  audit_mode?: "strict" | "warn" | "off" | undefined;
1437
1434
  mcpPayloadLimits?: {
1438
1435
  warnBytes?: number | undefined;
1439
1436
  hardBytes?: number | undefined;
1440
1437
  } | undefined;
1441
- knowledge_language?: "match-existing" | "zh-CN" | "en" | undefined;
1438
+ fabric_language?: "match-existing" | "zh-CN" | "en" | "zh-CN-hybrid" | undefined;
1442
1439
  default_layer_filter?: "personal" | "team" | "both" | undefined;
1443
1440
  archive_hint_cooldown_hours?: number | undefined;
1444
1441
  underseed_node_threshold?: number | undefined;
@@ -2994,26 +2991,26 @@ declare const lockDriftEventSchema: z.ZodObject<{
2994
2991
  end_line: number;
2995
2992
  }>, "many">;
2996
2993
  }, "strip", z.ZodTypeAny, {
2997
- locked: {
2994
+ drifted: {
2998
2995
  file: string;
2999
2996
  hash: string;
3000
2997
  start_line: number;
3001
2998
  end_line: number;
3002
2999
  }[];
3003
- drifted: {
3000
+ locked: {
3004
3001
  file: string;
3005
3002
  hash: string;
3006
3003
  start_line: number;
3007
3004
  end_line: number;
3008
3005
  }[];
3009
3006
  }, {
3010
- locked: {
3007
+ drifted: {
3011
3008
  file: string;
3012
3009
  hash: string;
3013
3010
  start_line: number;
3014
3011
  end_line: number;
3015
3012
  }[];
3016
- drifted: {
3013
+ locked: {
3017
3014
  file: string;
3018
3015
  hash: string;
3019
3016
  start_line: number;
@@ -3023,13 +3020,13 @@ declare const lockDriftEventSchema: z.ZodObject<{
3023
3020
  }, "strip", z.ZodTypeAny, {
3024
3021
  type: "lock:drift";
3025
3022
  payload: {
3026
- locked: {
3023
+ drifted: {
3027
3024
  file: string;
3028
3025
  hash: string;
3029
3026
  start_line: number;
3030
3027
  end_line: number;
3031
3028
  }[];
3032
- drifted: {
3029
+ locked: {
3033
3030
  file: string;
3034
3031
  hash: string;
3035
3032
  start_line: number;
@@ -3039,13 +3036,13 @@ declare const lockDriftEventSchema: z.ZodObject<{
3039
3036
  }, {
3040
3037
  type: "lock:drift";
3041
3038
  payload: {
3042
- locked: {
3039
+ drifted: {
3043
3040
  file: string;
3044
3041
  hash: string;
3045
3042
  start_line: number;
3046
3043
  end_line: number;
3047
3044
  }[];
3048
- drifted: {
3045
+ locked: {
3049
3046
  file: string;
3050
3047
  hash: string;
3051
3048
  start_line: number;
@@ -4271,26 +4268,26 @@ declare const fabricEventSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
4271
4268
  end_line: number;
4272
4269
  }>, "many">;
4273
4270
  }, "strip", z.ZodTypeAny, {
4274
- locked: {
4271
+ drifted: {
4275
4272
  file: string;
4276
4273
  hash: string;
4277
4274
  start_line: number;
4278
4275
  end_line: number;
4279
4276
  }[];
4280
- drifted: {
4277
+ locked: {
4281
4278
  file: string;
4282
4279
  hash: string;
4283
4280
  start_line: number;
4284
4281
  end_line: number;
4285
4282
  }[];
4286
4283
  }, {
4287
- locked: {
4284
+ drifted: {
4288
4285
  file: string;
4289
4286
  hash: string;
4290
4287
  start_line: number;
4291
4288
  end_line: number;
4292
4289
  }[];
4293
- drifted: {
4290
+ locked: {
4294
4291
  file: string;
4295
4292
  hash: string;
4296
4293
  start_line: number;
@@ -4300,13 +4297,13 @@ declare const fabricEventSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
4300
4297
  }, "strip", z.ZodTypeAny, {
4301
4298
  type: "lock:drift";
4302
4299
  payload: {
4303
- locked: {
4300
+ drifted: {
4304
4301
  file: string;
4305
4302
  hash: string;
4306
4303
  start_line: number;
4307
4304
  end_line: number;
4308
4305
  }[];
4309
- drifted: {
4306
+ locked: {
4310
4307
  file: string;
4311
4308
  hash: string;
4312
4309
  start_line: number;
@@ -4316,13 +4313,13 @@ declare const fabricEventSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
4316
4313
  }, {
4317
4314
  type: "lock:drift";
4318
4315
  payload: {
4319
- locked: {
4316
+ drifted: {
4320
4317
  file: string;
4321
4318
  hash: string;
4322
4319
  start_line: number;
4323
4320
  end_line: number;
4324
4321
  }[];
4325
- drifted: {
4322
+ locked: {
4326
4323
  file: string;
4327
4324
  hash: string;
4328
4325
  start_line: number;
@@ -5524,7 +5521,7 @@ declare const initScanCompletedEventSchema: z.ZodObject<{
5524
5521
  event_type: z.ZodLiteral<"init_scan_completed">;
5525
5522
  written_stable_ids: z.ZodArray<z.ZodString, "many">;
5526
5523
  duration_ms: z.ZodNumber;
5527
- source: z.ZodOptional<z.ZodEnum<["init", "scan", "doctor_fix"]>>;
5524
+ source: z.ZodOptional<z.ZodEnum<["init", "scan", "doctor_fix", "doctor-rescan"]>>;
5528
5525
  kind: z.ZodLiteral<"fabric-event">;
5529
5526
  id: z.ZodString;
5530
5527
  ts: z.ZodNumber;
@@ -5541,7 +5538,7 @@ declare const initScanCompletedEventSchema: z.ZodObject<{
5541
5538
  written_stable_ids: string[];
5542
5539
  correlation_id?: string | undefined;
5543
5540
  session_id?: string | undefined;
5544
- source?: "doctor_fix" | "init" | "scan" | undefined;
5541
+ source?: "doctor_fix" | "init" | "scan" | "doctor-rescan" | undefined;
5545
5542
  }, {
5546
5543
  id: string;
5547
5544
  ts: number;
@@ -5552,7 +5549,7 @@ declare const initScanCompletedEventSchema: z.ZodObject<{
5552
5549
  written_stable_ids: string[];
5553
5550
  correlation_id?: string | undefined;
5554
5551
  session_id?: string | undefined;
5555
- source?: "doctor_fix" | "init" | "scan" | undefined;
5552
+ source?: "doctor_fix" | "init" | "scan" | "doctor-rescan" | undefined;
5556
5553
  }>;
5557
5554
  declare const knowledgeProposedEventSchema: z.ZodObject<{
5558
5555
  event_type: z.ZodLiteral<"knowledge_proposed">;
@@ -6019,7 +6016,7 @@ declare const knowledgeScopeDegradedEventSchema: z.ZodObject<{
6019
6016
  }>;
6020
6017
  declare const doctorRunEventSchema: z.ZodObject<{
6021
6018
  event_type: z.ZodLiteral<"doctor_run">;
6022
- mode: z.ZodEnum<["lint", "apply-lint"]>;
6019
+ mode: z.ZodEnum<["lint", "fix-knowledge"]>;
6023
6020
  issues: z.ZodNumber;
6024
6021
  mutations: z.ZodOptional<z.ZodNumber>;
6025
6022
  timestamp: z.ZodString;
@@ -6037,7 +6034,7 @@ declare const doctorRunEventSchema: z.ZodObject<{
6037
6034
  kind: "fabric-event";
6038
6035
  event_type: "doctor_run";
6039
6036
  timestamp: string;
6040
- mode: "lint" | "apply-lint";
6037
+ mode: "lint" | "fix-knowledge";
6041
6038
  correlation_id?: string | undefined;
6042
6039
  session_id?: string | undefined;
6043
6040
  mutations?: number | undefined;
@@ -6049,7 +6046,7 @@ declare const doctorRunEventSchema: z.ZodObject<{
6049
6046
  kind: "fabric-event";
6050
6047
  event_type: "doctor_run";
6051
6048
  timestamp: string;
6052
- mode: "lint" | "apply-lint";
6049
+ mode: "lint" | "fix-knowledge";
6053
6050
  correlation_id?: string | undefined;
6054
6051
  session_id?: string | undefined;
6055
6052
  mutations?: number | undefined;
@@ -6713,7 +6710,7 @@ declare const eventLedgerEventSchema: z.ZodDiscriminatedUnion<"event_type", [z.Z
6713
6710
  event_type: z.ZodLiteral<"init_scan_completed">;
6714
6711
  written_stable_ids: z.ZodArray<z.ZodString, "many">;
6715
6712
  duration_ms: z.ZodNumber;
6716
- source: z.ZodOptional<z.ZodEnum<["init", "scan", "doctor_fix"]>>;
6713
+ source: z.ZodOptional<z.ZodEnum<["init", "scan", "doctor_fix", "doctor-rescan"]>>;
6717
6714
  kind: z.ZodLiteral<"fabric-event">;
6718
6715
  id: z.ZodString;
6719
6716
  ts: z.ZodNumber;
@@ -6730,7 +6727,7 @@ declare const eventLedgerEventSchema: z.ZodDiscriminatedUnion<"event_type", [z.Z
6730
6727
  written_stable_ids: string[];
6731
6728
  correlation_id?: string | undefined;
6732
6729
  session_id?: string | undefined;
6733
- source?: "doctor_fix" | "init" | "scan" | undefined;
6730
+ source?: "doctor_fix" | "init" | "scan" | "doctor-rescan" | undefined;
6734
6731
  }, {
6735
6732
  id: string;
6736
6733
  ts: number;
@@ -6741,7 +6738,7 @@ declare const eventLedgerEventSchema: z.ZodDiscriminatedUnion<"event_type", [z.Z
6741
6738
  written_stable_ids: string[];
6742
6739
  correlation_id?: string | undefined;
6743
6740
  session_id?: string | undefined;
6744
- source?: "doctor_fix" | "init" | "scan" | undefined;
6741
+ source?: "doctor_fix" | "init" | "scan" | "doctor-rescan" | undefined;
6745
6742
  }>, z.ZodObject<{
6746
6743
  event_type: z.ZodLiteral<"knowledge_proposed">;
6747
6744
  stable_id: z.ZodOptional<z.ZodString>;
@@ -7257,7 +7254,7 @@ declare const eventLedgerEventSchema: z.ZodDiscriminatedUnion<"event_type", [z.Z
7257
7254
  session_id?: string | undefined;
7258
7255
  }>, z.ZodObject<{
7259
7256
  event_type: z.ZodLiteral<"doctor_run">;
7260
- mode: z.ZodEnum<["lint", "apply-lint"]>;
7257
+ mode: z.ZodEnum<["lint", "fix-knowledge"]>;
7261
7258
  issues: z.ZodNumber;
7262
7259
  mutations: z.ZodOptional<z.ZodNumber>;
7263
7260
  timestamp: z.ZodString;
@@ -7275,7 +7272,7 @@ declare const eventLedgerEventSchema: z.ZodDiscriminatedUnion<"event_type", [z.Z
7275
7272
  kind: "fabric-event";
7276
7273
  event_type: "doctor_run";
7277
7274
  timestamp: string;
7278
- mode: "lint" | "apply-lint";
7275
+ mode: "lint" | "fix-knowledge";
7279
7276
  correlation_id?: string | undefined;
7280
7277
  session_id?: string | undefined;
7281
7278
  mutations?: number | undefined;
@@ -7287,7 +7284,7 @@ declare const eventLedgerEventSchema: z.ZodDiscriminatedUnion<"event_type", [z.Z
7287
7284
  kind: "fabric-event";
7288
7285
  event_type: "doctor_run";
7289
7286
  timestamp: string;
7290
- mode: "lint" | "apply-lint";
7287
+ mode: "lint" | "fix-knowledge";
7291
7288
  correlation_id?: string | undefined;
7292
7289
  session_id?: string | undefined;
7293
7290
  mutations?: number | undefined;
@@ -7362,4 +7359,4 @@ type EventLedgerEventType = EventLedgerEvent["event_type"];
7362
7359
  type EventLedgerEventInputFor<T extends EventLedgerEvent> = T extends EventLedgerEvent ? Omit<T, "kind" | "id" | "ts" | "schema_version" | "correlation_id" | "session_id"> & Partial<Pick<T, "id" | "ts" | "correlation_id" | "session_id">> : never;
7363
7360
  type EventLedgerEventInput = EventLedgerEventInputFor<EventLedgerEvent>;
7364
7361
 
7365
- export { AGENTS_META_IDENTITY_SOURCES, AGENTS_META_LAYERS, AGENTS_META_TOPOLOGY_TYPES, AgentsIdentitySource, AgentsLayer, AgentsMeta, type AgentsMetaCounters, AgentsMetaCountersSchema, AgentsMetaNode, AgentsTopologyType, type CandidateFileEntry, type CandidateFileFamily, type ClaudeHookPathMigratedEvent, type ClaudeSkillPathMigratedEvent, type CodexSkillPathMigratedEvent, type DoctorRunEvent, type DriftDetectedEvent, type EditIntentCheckedEvent, type EventLedgerEvent, type EventLedgerEventInput, type EventLedgerEventType, type EventLedgerTruncatedEvent, type FabricEvent, type ForensicAssertion, type ForensicAssertionConfidence, type ForensicAssertionCoverage, type ForensicAssertionType, type ForensicCodeSample, type ForensicEntryPoint, type ForensicEvidenceAnchor, type ForensicFramework, type ForensicReadme, type ForensicReport, type ForensicSamplingBudget, type ForensicTopology, HumanLockEntry, type HumanLockFile, type InitContext, type InitContextDomainGroup, type InitContextFramework, type InitContextInterviewTrailEntry, type InitContextInvariant, type InitContextInvariantConfidenceSnapshot, type InitContextSourceEvidence, type InitScanCompletedEvent, KNOWLEDGE_TEST_INDEX_SCHEMA_VERSION, type KnowledgeArchiveAttemptedEvent, type KnowledgeArchivedEvent, type KnowledgeConsumedEvent, type KnowledgeContextPlannedEvent, type KnowledgeDeferredEvent, type KnowledgeDemotedEvent, type KnowledgeDriftDetectedEvent, type KnowledgeLayerChangedEvent, type KnowledgePathDangledEvent, type KnowledgePromoteFailedEvent, type KnowledgePromoteStartedEvent, type KnowledgePromotedEvent, type KnowledgeProposedEvent, type KnowledgeRejectedEvent, type KnowledgeScopeDegradedEvent, type KnowledgeSectionsFetchedEvent, type KnowledgeSelectionEvent, type KnowledgeSlugRenamedEvent, type KnowledgeTestIndex, type KnowledgeTestLink, type KnowledgeTestOrphanAnnotation, KnowledgeType, Layer, type LedgerAppendedEvent, LedgerEntry, type LockApprovedEvent, type LockDriftEvent, type McpConfigMigratedEvent, type McpEventLedgerEvent, type MetaReconciledEvent, type MetaReconciledOnStartupEvent, type MetaUpdatedEvent, type PendingAutoArchivedEvent, type ReapplyCompletedEvent, type RelevanceMigrationRunEvent, StableId, agentsIdentitySourceSchema, agentsLayerSchema, agentsMetaNodeSchema, agentsMetaSchema, agentsTopologyTypeSchema, aiLedgerEntrySchema, allocateKnowledgeId, auditModeSchema, candidateFileEntrySchema, claudeHookPathMigratedEventSchema, claudeSkillPathMigratedEventSchema, clientPathsSchema, codexSkillPathMigratedEventSchema, defaultAgentsMetaCounters, defaultLayerFilterSchema, deriveAgentsMetaIdentitySource, deriveAgentsMetaLayer, deriveAgentsMetaStableId, deriveAgentsMetaTopologyType, doctorRunEventSchema, driftDetectedEventSchema, editIntentCheckedEventSchema, eventLedgerEventSchema, eventLedgerTruncatedEventSchema, fabricConfigSchema, fabricEventSchema, forensicAssertionCoverageSchema, forensicAssertionSchema, forensicCodeSampleSchema, forensicEntryPointSchema, forensicEvidenceAnchorSchema, forensicFrameworkSchema, forensicReadmeSchema, forensicReportSchema, forensicSamplingBudgetSchema, forensicTopologySchema, humanLedgerEntrySchema, humanLockEntrySchema, humanLockFileSchema, initContextDomainGroupSchema, initContextFrameworkSchema, initContextInterviewTrailEntrySchema, initContextInvariantConfidenceSnapshotSchema, initContextInvariantSchema, initContextSchema, initContextSourceEvidenceSchema, initScanCompletedEventSchema, isKnowledgeStableId, knowledgeArchiveAttemptedEventSchema, knowledgeArchivedEventSchema, knowledgeConsumedEventSchema, knowledgeContextPlannedEventSchema, knowledgeDeferredEventSchema, knowledgeDemotedEventSchema, knowledgeDriftDetectedEventSchema, knowledgeLanguageSchema, knowledgeLayerChangedEventSchema, knowledgePathDangledEventSchema, knowledgePromoteFailedEventSchema, knowledgePromoteStartedEventSchema, knowledgePromotedEventSchema, knowledgeProposedEventSchema, knowledgeRejectedEventSchema, knowledgeScopeDegradedEventSchema, knowledgeSectionsFetchedEventSchema, knowledgeSelectionEventSchema, knowledgeSlugRenamedEventSchema, knowledgeTestIndexSchema, knowledgeTestLinkSchema, knowledgeTestOrphanAnnotationSchema, ledgerAppendedEventSchema, ledgerEntrySchema, lockApprovedEventSchema, lockDriftEventSchema, mcpConfigMigratedEventSchema, mcpEventLedgerEventSchema, mcpPayloadLimitsSchema, metaReconciledEventSchema, metaReconciledOnStartupEventSchema, metaUpdatedEventSchema, pendingAutoArchivedEventSchema, reapplyCompletedEventSchema, relevanceMigrationRunEventSchema, ruleDescriptionIndexItemSchema, ruleDescriptionSchema, withDerivedAgentsMetaNodeDefaults };
7362
+ export { AGENTS_META_IDENTITY_SOURCES, AGENTS_META_LAYERS, AGENTS_META_TOPOLOGY_TYPES, AgentsIdentitySource, AgentsLayer, AgentsMeta, type AgentsMetaCounters, AgentsMetaCountersSchema, AgentsMetaNode, AgentsTopologyType, type CandidateFileEntry, type CandidateFileFamily, type ClaudeHookPathMigratedEvent, type ClaudeSkillPathMigratedEvent, type CodexSkillPathMigratedEvent, type DoctorRunEvent, type DriftDetectedEvent, type EditIntentCheckedEvent, type EventLedgerEvent, type EventLedgerEventInput, type EventLedgerEventType, type EventLedgerTruncatedEvent, type FabricEvent, type ForensicAssertion, type ForensicAssertionConfidence, type ForensicAssertionCoverage, type ForensicAssertionType, type ForensicCodeSample, type ForensicEntryPoint, type ForensicEvidenceAnchor, type ForensicFramework, type ForensicReadme, type ForensicReport, type ForensicSamplingBudget, type ForensicTopology, HumanLockEntry, type HumanLockFile, type InitContext, type InitContextDomainGroup, type InitContextFramework, type InitContextInterviewTrailEntry, type InitContextInvariant, type InitContextInvariantConfidenceSnapshot, type InitContextSourceEvidence, type InitScanCompletedEvent, KNOWLEDGE_TEST_INDEX_SCHEMA_VERSION, type KnowledgeArchiveAttemptedEvent, type KnowledgeArchivedEvent, type KnowledgeConsumedEvent, type KnowledgeContextPlannedEvent, type KnowledgeDeferredEvent, type KnowledgeDemotedEvent, type KnowledgeDriftDetectedEvent, type KnowledgeLayerChangedEvent, type KnowledgePathDangledEvent, type KnowledgePromoteFailedEvent, type KnowledgePromoteStartedEvent, type KnowledgePromotedEvent, type KnowledgeProposedEvent, type KnowledgeRejectedEvent, type KnowledgeScopeDegradedEvent, type KnowledgeSectionsFetchedEvent, type KnowledgeSelectionEvent, type KnowledgeSlugRenamedEvent, type KnowledgeTestIndex, type KnowledgeTestLink, type KnowledgeTestOrphanAnnotation, KnowledgeType, Layer, type LedgerAppendedEvent, LedgerEntry, type LockApprovedEvent, type LockDriftEvent, type McpConfigMigratedEvent, type McpEventLedgerEvent, type MetaReconciledEvent, type MetaReconciledOnStartupEvent, type MetaUpdatedEvent, type PendingAutoArchivedEvent, type ReapplyCompletedEvent, type RelevanceMigrationRunEvent, StableId, agentsIdentitySourceSchema, agentsLayerSchema, agentsMetaNodeSchema, agentsMetaSchema, agentsTopologyTypeSchema, aiLedgerEntrySchema, allocateKnowledgeId, auditModeSchema, candidateFileEntrySchema, claudeHookPathMigratedEventSchema, claudeSkillPathMigratedEventSchema, clientPathsSchema, codexSkillPathMigratedEventSchema, defaultAgentsMetaCounters, defaultLayerFilterSchema, deriveAgentsMetaIdentitySource, deriveAgentsMetaLayer, deriveAgentsMetaStableId, deriveAgentsMetaTopologyType, doctorRunEventSchema, driftDetectedEventSchema, editIntentCheckedEventSchema, eventLedgerEventSchema, eventLedgerTruncatedEventSchema, fabricConfigSchema, fabricEventSchema, fabricLanguageSchema, forensicAssertionCoverageSchema, forensicAssertionSchema, forensicCodeSampleSchema, forensicEntryPointSchema, forensicEvidenceAnchorSchema, forensicFrameworkSchema, forensicReadmeSchema, forensicReportSchema, forensicSamplingBudgetSchema, forensicTopologySchema, humanLedgerEntrySchema, humanLockEntrySchema, humanLockFileSchema, initContextDomainGroupSchema, initContextFrameworkSchema, initContextInterviewTrailEntrySchema, initContextInvariantConfidenceSnapshotSchema, initContextInvariantSchema, initContextSchema, initContextSourceEvidenceSchema, initScanCompletedEventSchema, isKnowledgeStableId, knowledgeArchiveAttemptedEventSchema, knowledgeArchivedEventSchema, knowledgeConsumedEventSchema, knowledgeContextPlannedEventSchema, knowledgeDeferredEventSchema, knowledgeDemotedEventSchema, knowledgeDriftDetectedEventSchema, knowledgeLayerChangedEventSchema, knowledgePathDangledEventSchema, knowledgePromoteFailedEventSchema, knowledgePromoteStartedEventSchema, knowledgePromotedEventSchema, knowledgeProposedEventSchema, knowledgeRejectedEventSchema, knowledgeScopeDegradedEventSchema, knowledgeSectionsFetchedEventSchema, knowledgeSelectionEventSchema, knowledgeSlugRenamedEventSchema, knowledgeTestIndexSchema, knowledgeTestLinkSchema, knowledgeTestOrphanAnnotationSchema, ledgerAppendedEventSchema, ledgerEntrySchema, lockApprovedEventSchema, lockDriftEventSchema, mcpConfigMigratedEventSchema, mcpEventLedgerEventSchema, mcpPayloadLimitsSchema, metaReconciledEventSchema, metaReconciledOnStartupEventSchema, metaUpdatedEventSchema, pendingAutoArchivedEventSchema, reapplyCompletedEventSchema, relevanceMigrationRunEventSchema, ruleDescriptionIndexItemSchema, ruleDescriptionSchema, withDerivedAgentsMetaNodeDefaults };
package/dist/index.js CHANGED
@@ -6,7 +6,7 @@ import {
6
6
  enMessages,
7
7
  normalizeLocale,
8
8
  zhCNMessages
9
- } from "./chunk-W4TKEXRG.js";
9
+ } from "./chunk-BKTCBFXZ.js";
10
10
  import {
11
11
  FabExtractKnowledgeInputSchema,
12
12
  FabExtractKnowledgeInputShape,
@@ -306,19 +306,23 @@ var mcpPayloadLimitsSchema = z5.object({
306
306
  warnBytes: z5.number().int().positive().optional(),
307
307
  hardBytes: z5.number().int().positive().optional()
308
308
  }).optional();
309
- var knowledgeLanguageSchema = z5.enum(["match-existing", "zh-CN", "en"]);
309
+ var fabricLanguageSchema = z5.enum([
310
+ "match-existing",
311
+ "zh-CN",
312
+ "en",
313
+ "zh-CN-hybrid"
314
+ ]);
310
315
  var defaultLayerFilterSchema = z5.enum(["team", "personal", "both"]);
311
316
  var fabricConfigSchema = z5.object({
312
317
  clientPaths: clientPathsSchema.optional(),
313
318
  externalFixturePath: z5.string().optional(),
314
319
  scanIgnores: z5.array(z5.string()).optional(),
315
- auditMode: auditModeSchema.optional(),
316
320
  audit_mode: auditModeSchema.optional(),
317
321
  mcpPayloadLimits: mcpPayloadLimitsSchema,
318
322
  // Backward-compat: both fields are optional with defaults so existing
319
323
  // fabric-config.json files (pre-grill-followup) parse unchanged. The default
320
324
  // values themselves are load-bearing — see docs/data-schema.md.
321
- knowledge_language: knowledgeLanguageSchema.optional().default("match-existing"),
325
+ fabric_language: fabricLanguageSchema.optional().default("match-existing"),
322
326
  default_layer_filter: defaultLayerFilterSchema.optional().default("both"),
323
327
  // Cooldown for the fabric-hint Stop hook (formerly archive-hint, renamed in
324
328
  // rc.5 TASK-010). After ANY of the three signals (archive / review / import)
@@ -735,7 +739,7 @@ var initScanCompletedEventSchema = z9.object({
735
739
  event_type: z9.literal("init_scan_completed"),
736
740
  written_stable_ids: z9.array(z9.string()),
737
741
  duration_ms: z9.number().int().nonnegative(),
738
- source: z9.enum(["init", "scan", "doctor_fix"]).optional()
742
+ source: z9.enum(["init", "scan", "doctor_fix", "doctor-rescan"]).optional()
739
743
  });
740
744
  var knowledgeProposedEventSchema = z9.object({
741
745
  ...eventLedgerEnvelopeSchema,
@@ -838,7 +842,7 @@ var knowledgeScopeDegradedEventSchema = z9.object({
838
842
  var doctorRunEventSchema = z9.object({
839
843
  ...eventLedgerEnvelopeSchema,
840
844
  event_type: z9.literal("doctor_run"),
841
- mode: z9.enum(["lint", "apply-lint"]),
845
+ mode: z9.enum(["lint", "fix-knowledge"]),
842
846
  issues: z9.number().int().nonnegative(),
843
847
  mutations: z9.number().int().nonnegative().optional(),
844
848
  timestamp: z9.string().datetime()
@@ -962,6 +966,7 @@ export {
962
966
  fabReviewAnnotations,
963
967
  fabricConfigSchema,
964
968
  fabricEventSchema,
969
+ fabricLanguageSchema,
965
970
  forensicAssertionCoverageSchema,
966
971
  forensicAssertionSchema,
967
972
  forensicCodeSampleSchema,
@@ -998,7 +1003,6 @@ export {
998
1003
  knowledgeDeferredEventSchema,
999
1004
  knowledgeDemotedEventSchema,
1000
1005
  knowledgeDriftDetectedEventSchema,
1001
- knowledgeLanguageSchema,
1002
1006
  knowledgeLayerChangedEventSchema,
1003
1007
  knowledgePathDangledEventSchema,
1004
1008
  knowledgePromoteFailedEventSchema,
@@ -107,17 +107,16 @@ interface McpPayloadLimits {
107
107
  warnBytes?: number;
108
108
  hardBytes?: number;
109
109
  }
110
- type KnowledgeLanguage = "match-existing" | "zh-CN" | "en";
110
+ type FabricLanguage = "match-existing" | "zh-CN" | "en" | "zh-CN-hybrid";
111
111
  type DefaultLayerFilter = "team" | "personal" | "both";
112
112
  interface FabricConfig {
113
113
  clientPaths?: ClientPaths;
114
114
  externalFixturePath?: string;
115
115
  scanIgnores?: string[];
116
- auditMode?: AuditMode;
117
116
  audit_mode?: AuditMode;
118
117
  mcpPayloadLimits?: McpPayloadLimits;
119
- knowledge_language?: KnowledgeLanguage;
118
+ fabric_language?: FabricLanguage;
120
119
  default_layer_filter?: DefaultLayerFilter;
121
120
  }
122
121
 
123
- export type { AgentsActivationTier, AgentsIdentitySource, AgentsLayer, AgentsMeta, AgentsMetaCountersEnvelope, AgentsMetaKnowledgeTypeCounters, AgentsMetaNode, AgentsMetaNodeActivation, AgentsTopologyType, AiLedgerEntry, AuditMode, ClientPaths, DefaultLayerFilter, FabricConfig, HumanLedgerEntry, HumanLockEntry, KnowledgeLanguage, LedgerEntry, McpPayloadLimits, RuleDescription, RuleDescriptionIndexItem };
122
+ export type { AgentsActivationTier, AgentsIdentitySource, AgentsLayer, AgentsMeta, AgentsMetaCountersEnvelope, AgentsMetaKnowledgeTypeCounters, AgentsMetaNode, AgentsMetaNodeActivation, AgentsTopologyType, AiLedgerEntry, AuditMode, ClientPaths, DefaultLayerFilter, FabricConfig, FabricLanguage, HumanLedgerEntry, HumanLockEntry, LedgerEntry, McpPayloadLimits, RuleDescription, RuleDescriptionIndexItem };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fenglimg/fabric-shared",
3
- "version": "2.0.0-rc.11",
3
+ "version": "2.0.0-rc.15",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",