@fenglimg/fabric-shared 2.0.0-rc.22 → 2.0.0-rc.25

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.
@@ -0,0 +1,70 @@
1
+ // src/templates/bootstrap-canonical.ts
2
+ var BOOTSTRAP_MARKER_BEGIN = "<!-- fabric:bootstrap:begin -->";
3
+ var BOOTSTRAP_MARKER_END = "<!-- fabric:bootstrap:end -->";
4
+ var LEGACY_KB_MARKER_BEGIN = "<!-- fabric:knowledge-base:begin -->";
5
+ var LEGACY_KB_MARKER_END = "<!-- fabric:knowledge-base:end -->";
6
+ var BOOTSTRAP_REGEX = /(?:\r?\n){0,2}<!-- fabric:bootstrap:begin -->[\s\S]*?<!-- fabric:bootstrap:end -->/;
7
+ var LEGACY_KB_REGEX = /(?:\r?\n){0,2}<!-- fabric:knowledge-base:begin -->[\s\S]*?<!-- fabric:knowledge-base:end -->/;
8
+ var BOOTSTRAP_CANONICAL = `# Fabric Bootstrap
9
+
10
+ \u672C\u9879\u76EE\u4F7F\u7528 Fabric \u7BA1\u7406\u8DE8\u5BA2\u6237\u7AEF AI \u77E5\u8BC6\u4E0E\u884C\u4E3A\u89C4\u5219\u3002\u672C\u6587\u4EF6\u7531 \`fab install\` \u540C\u6B65\u5230\u4E09\u7AEF managed block,**\u4E0D\u8981\u624B\u52A8\u7F16\u8F91\u4E09\u7AEF\u7684 block**,\u53EA\u6539\u8FD9\u91CC + \u91CD\u8DD1 \`fab install\`\u3002
11
+
12
+ ## \u884C\u4E3A\u89C4\u5219
13
+ - **\u4FEE\u6539\u4EFB\u4F55\u6587\u4EF6\u524D**:\u4E24\u6B65\u8C03\u7528\u2014\u2014\u5148 \`fab_plan_context(paths=[<\u88AB\u6539\u6587\u4EF6>])\` \u62FF\u5230 \`selection_token\` \u4E0E\u5019\u9009 \`entries\`(\u6311 \`selectable===true\` \u7684 \`stable_id\`),\u518D \`fab_get_knowledge_sections({ selection_token, ai_selected_stable_ids: [<id>...] })\` \u53D6\u89C4\u5219\u6B63\u6587\u3002
14
+ - **\`.fabric/agents.meta.json\` \u4E25\u7981\u624B\u52A8\u7F16\u8F91**;engine \u4F1A\u81EA\u52A8\u540C\u6B65\u6D3E\u751F\u72B6\u6001,\u663E\u5F0F reconcile \u8DD1 \`fab doctor --fix\`\u3002
15
+
16
+ ## \u77E5\u8BC6\u5E93(KB)
17
+ - **Discovery**:SessionStart hook \u5217 broad-scoped \u6761\u76EE(\u542B personal layer \`KP-*\` \u6761\u76EE,\u5F15\u7528\u65B9\u5F0F\u76F8\u540C);edit \u6587\u4EF6\u65F6 PreToolUse hook \u53EF\u80FD\u89E6\u53D1 narrow hint\u3002
18
+ - **Usage**:\u4E24\u6B65\u5F0F\u2014\u2014\`fab_plan_context(paths=[...])\` \u8FD4\u56DE \`selection_token\` + \u5019\u9009 entries,\u518D \`fab_get_knowledge_sections({ selection_token, ai_selected_stable_ids: [<id>...] })\` \u62C9\u5168\u6587;\`selection_token\` \u5FC5\u987B\u6765\u81EA\u6700\u8FD1\u4E00\u6B21 \`fab_plan_context\`,\u4E0D\u53EF\u51ED\u7A7A\u7F16\u9020\u3002
19
+ - **session_id**: \u8C03\u7528 \`fab_plan_context\` \u65F6, \u52A1\u5FC5\u628A\u5F53\u524D client session id \u4F5C\u4E3A \`session_id\` \u53C2\u6570\u4F20\u5165(Claude Code \u7684 session id \u5728 stdin payload \u4E2D, Codex \u7684\u5BF9\u5E94 identifier \u540C\u7406)\u3002\u8FD9\u80FD\u8BA9 \`fab doctor --archive-history\` \u4E0E archive-hint hook \u51C6\u786E\u8BC6\u522B\u8DE8\u4F1A\u8BDD debt \u72B6\u6001\u3002
20
+ - **Write flows**:\`fabric-archive\` / \`fabric-review\` / \`fabric-import\` \u4E09\u4E2A Skills\u3002
21
+ - **Language**:\u6E32\u67D3\u6309 \`.fabric/fabric-config.json\` \u7684 \`fabric_language\` \u5B57\u6BB5\u3002
22
+
23
+ ## Self-archive policy
24
+
25
+ - **\u89E6\u53D1**: \u672C\u4F1A\u8BDD\u51FA\u73B0\u4EE5\u4E0B\u4EFB\u4E00\u4FE1\u53F7, \u5728\u8BE5 turn \u56DE\u590D\u672B\u5C3E\u81EA\u4E3B\u8C03\u7528 \`fabric-archive\` skill (E3-strong mode):
26
+ 1. **Normative \u8BED\u8A00** \u2014 \u7528\u6237\u6D88\u606F\u51FA\u73B0 \`\u4EE5\u540E\` / \`always\` / \`never\` / \`from now on\` / \`\u4E0B\u6B21\u6CE8\u610F\` / \`\u8BB0\u4E00\u4E0B\` / \`\u6C38\u8FDC\u4E0D\u8981\`
27
+ 2. **Wrong-turn-and-revert** \u2014 AI \u5C1D\u8BD5 path X, \u53CD\u601D\u540E\u6539\u8D70 path Y (\u5C24\u5176\u5F53 path X \u662F\u975E\u663E\u7136\u8E29\u5751)
28
+ 3. **Decision confirmation** \u2014 \u7528\u6237\u5728 \u22652 \u5019\u9009\u4E2D\u6743\u8861\u540E\u7ED9\u51FA rationale \u9501\u5B9A\u65B9\u5411
29
+ 4. **Explicit dismissal with reason** \u2014 \u7528\u6237\u62D2\u4E86\u67D0\u5EFA\u8BAE**\u5E76**\u8BF4\u4E86\u539F\u56E0
30
+
31
+ - **Anti-trigger** (\u660E\u786E\u4E0D\u89E6\u53D1):
32
+ - \u7528\u6237\u7EAF\u8BE2\u95EE (\u65E0 normative \u8868\u8FBE)
33
+ - \u7B80\u5355 refactor / typo fix
34
+ - AI \u81EA\u5DF1\u4EA7\u751F\u7684'\u6D1E\u5BDF' (\u5FC5\u987B\u7531\u7528\u6237\u6D88\u606F\u4E2D\u4FE1\u53F7\u89E6\u53D1)
35
+
36
+ - **Anti-loop \u4E09\u6761\u9632\u62A4**:
37
+ - \u540C turn \u6700\u591A\u81EA\u8C03 1 \u6B21
38
+ - \u540C session \u540C outcome \u4E0D\u91CD\u590D (\u82E5 user_dismissed, \u672C\u4F1A\u8BDD\u4E0D\u518D\u81EA\u8C03\u76F8\u540C\u4E3B\u9898)
39
+ - Phase 0.5 viability gate \u515C\u5E95 (skill \u5185\u90E8\u4ECD\u8DD1 gate, AI \u5224\u9519\u4E0D\u4F1A\u4E71\u5199 pending)
40
+
41
+ - **\u5448\u73B0\u6A21\u677F** (turn \u672B\u5C3E\u63D2\u5165, \u4E24\u884C: \u5148 marker \u884C\u4F9B Phase 0.4 \u68C0\u6D4B, \u518D user-facing \u63D0\u793A):
42
+ \`\`\`
43
+ self-archive policy triggered by signal: <Normative|Wrong-turn-and-revert|Decision confirmation|Explicit dismissal>
44
+ \u987A\u624B\u5F52\u6863: \u6CE8\u610F\u5230\u4F60\u8BF4 \`<\u89E6\u53D1\u77ED\u8BED>\`, \u5DF2\u8C03\u7528 fabric-archive \u6293 N \u6761\u5019\u9009 \u2192 .fabric/knowledge/pending/...
45
+ \u82E5\u4E0D\u8BE5\u8BB0, \u7B54 '\u64A4\u9500' \u6211\u4F1A\u8C03 fab_review reject\u3002
46
+ \`\`\`
47
+ \u7B2C\u4E00\u884C\u662F Phase 0.4 Trigger Gate \u7528\u6765\u8BC6\u522B E3 \u5165\u53E3\u7684 structured marker (verbatim \u5B57\u7B26\u4E32 \`self-archive policy triggered by signal\`, \u540E\u63A5\u5192\u53F7 + \u89E6\u53D1\u4FE1\u53F7\u540D)\u3002\u7B2C\u4E8C\u884C\u8D77\u662F\u7ED9\u7528\u6237\u770B\u7684\u4E2D\u6587\u63D0\u793A\u3002\u4E24\u884C\u90FD\u5FC5\u987B\u51FA\u73B0; \u7F3A marker \u884C Phase 0.4 \u65E0\u6CD5\u8DEF\u7531\u5230 E3_ai_self_trigger\u3002
48
+
49
+ ## Cite policy
50
+
51
+ - **\u89E6\u53D1**: \u505A edit / decide / propose plan \u4E4B\u524D,**\u56DE\u590D\u9996\u884C**\u5FC5\u987B\u5199 \`KB: <id> (<\u22648\u5B57 \u7528\u6CD5>) [planned|recalled|chained-from <id>|dismissed:<reason>]\` \u6216 \`KB: none [<reason>]\`\u3002
52
+ - **\`[recalled]\` \u9A8C\u8BC1**: \u5FC5\u987B\u7D27\u8DDF\u4E24\u6B65\u8C03\u7528\u2014\u2014\u5148 \`fab_plan_context(paths=[...])\` \u62FF \`selection_token\`,\u518D \`fab_get_knowledge_sections({ selection_token, ai_selected_stable_ids: [<id>] })\`,\u9632\u6B62\u7F16\u9020 id\u3002
53
+ - **contract \u8BED\u6CD5**: decisions/pitfalls \u7C7B\u5F15\u7528\u5FC5\u987B\u5728\u5C3E\u6BB5\u52A0 contract: \`\u2192 <operator> [<operator> ...]\`,operator \u2208 {\`edit:<glob>\` \`!edit:<glob>\` \`require:<symbol>\` \`forbid:<symbol>\` \`skip:<reason>\`}\u3002\u4F8B:\`KB: K-001 (auth) [planned] \u2192 edit:src/auth/**/*.ts !edit:src/legacy/**\`\u3002
54
+ - **skip reason \u8BCD\u5178**: \`sequencing | conditional | semantic | aesthetic | architectural | other:<text>\`\u3002
55
+ - **type \u8DEF\u7531**: models \u7C7B\u5F15\u7528\u4E3A reference cite,\u4E0D\u9700\u8981 contract;guidelines/processes \u7C7B\u6682\u4E0D\u5F3A\u5236,\u63A8\u540E LLM-judge\u3002
56
+ - **\u7528\u6237\u53E3\u5934\u63D0\u89C4\u5219\u6CA1\u7ED9 id**: \u5148\u8C03 \`fab_extract_knowledge\` \u6216 \`search_context\` \u53CD\u67E5\u3002
57
+ - **dismissed reason**: \u679A\u4E3E \`scope-mismatch | outdated | not-applicable | other:<text>\`\u3002
58
+ - **\`KB: none\` sentinel**: \u679A\u4E3E\u4E24\u79CD\u5408\u89C4\u7406\u7531\u2014\u2014\`[no-relevant]\` \u5DF2\u8C03 \`fab_plan_context\`(\u6216 hook \u8F93\u51FA\u53EF\u89C1)\u4F46\u65E0\u53EF\u7528\u6761\u76EE;\`[not-applicable]\` \u5F53\u524D\u52A8\u4F5C\u4E0D\u5728 cite \u8303\u56F4(\u7EAF\u63A2\u7D22 / Bash \u53EA\u8BFB / \u7528\u6237\u95EE\u7B54)\u3002\u88F8 \`KB: none\`(\u65E0\u540E\u7F00)\u4ECD\u7136 valid,\u5F52\u7C7B\u4E3A \`[unspecified]\`(legacy \u517C\u5BB9,\u9F13\u52B1\u540E\u7EED\u8865\u6CE8)\u3002
59
+ - **\u7A3D\u6838**: \`fab doctor --cite-coverage [--since=7d] [--client=cc|codex|all]\` \u8F93\u51FA cite \u8986\u76D6\u7387,\u542B \`KB: none\` sentinel \u62C6\u5206\u3002\u672C\u89C4\u5219\u4E0D\u963B\u65AD\u4F60\u5DE5\u4F5C,\u53EA\u8BB0\u5F55\u3002
60
+ `;
61
+
62
+ export {
63
+ BOOTSTRAP_MARKER_BEGIN,
64
+ BOOTSTRAP_MARKER_END,
65
+ LEGACY_KB_MARKER_BEGIN,
66
+ LEGACY_KB_MARKER_END,
67
+ BOOTSTRAP_REGEX,
68
+ LEGACY_KB_REGEX,
69
+ BOOTSTRAP_CANONICAL
70
+ };
@@ -114,22 +114,82 @@ var enMessages = {
114
114
  "doctor.cite.dismissed.not-applicable": "Not applicable",
115
115
  "doctor.cite.dismissed.other": "Other",
116
116
  "doctor.cite.dismissed.unspecified": "Unspecified",
117
+ "doctor.cite.section.noneReasons": "KB: none reasons",
118
+ "doctor.cite.none.no-relevant": "No relevant entry",
119
+ "doctor.cite.none.not-applicable": "Not applicable",
120
+ "doctor.cite.none.unspecified": "Unspecified",
117
121
  "doctor.cite.status.skipped": "Cite policy not yet activated for this workspace.",
122
+ // v2.0.0-rc.24 TASK-09: cite-coverage contract-policy renderer keys.
123
+ // Companion schema: packages/shared/src/schemas/api-contracts.ts
124
+ // citeCoverageReportSchema. Consumer: TASK-10 CLI doctor --cite-coverage.
125
+ "cite-coverage.contract.header": "Contract check",
126
+ "cite-coverage.contract.decisions_cited": "Decisions cited",
127
+ "cite-coverage.contract.pitfalls_cited": "Pitfalls cited",
128
+ "cite-coverage.contract.with": "With contract",
129
+ "cite-coverage.contract.missing": "Missing contract",
130
+ "cite-coverage.contract.hard_violated": "Hard violations (operator did not match session edits)",
131
+ "cite-coverage.contract.cite_id_unresolved": "Unresolved cite IDs",
132
+ "cite-coverage.contract.skip_count": "Skip bucket",
133
+ "cite-coverage.contract.status.ok": "ok",
134
+ "cite-coverage.contract.status.skipped_bootstrap_drift": "skipped (bootstrap drift \u2014 run `fab install`)",
135
+ "cite-coverage.contract.status.awaiting_marker": "awaiting first marker emit",
136
+ // Singular knowledge-type labels (verbatim alignment with KnowledgeTypeSchema)
137
+ // plus the sixth "unresolved" bucket.
138
+ "cite-coverage.contract.type.decision": "decision",
139
+ "cite-coverage.contract.type.pitfall": "pitfall",
140
+ "cite-coverage.contract.type.model": "model",
141
+ "cite-coverage.contract.type.guideline": "guideline",
142
+ "cite-coverage.contract.type.process": "process",
143
+ "cite-coverage.contract.type.unresolved": "unresolved",
144
+ // Layer labels (per_layer_type headers + layer_filter banner).
145
+ "cite-coverage.layer.team": "team",
146
+ "cite-coverage.layer.personal": "personal",
147
+ "cite-coverage.layer.team_review": "[team \u2014 review]",
148
+ "cite-coverage.layer.personal_fyi": "[personal \u2014 fyi]",
149
+ // skip_reason vocabulary (bootstrap-docs canonical; renderer falls back to
150
+ // the raw key for unknown buckets — operators data-drive extensions).
151
+ "cite-coverage.skip.sequencing": "sequencing constraint",
152
+ "cite-coverage.skip.conditional": "conditional branch",
153
+ "cite-coverage.skip.semantic": "semantic rule",
154
+ "cite-coverage.skip.aesthetic": "style / aesthetic",
155
+ "cite-coverage.skip.architectural": "architectural layer",
156
+ "cite-coverage.skip.other": "other",
118
157
  "cli.doctor.args.target.description": "Target project path. Defaults to --target, then EXTERNAL_FIXTURE_PATH, then cwd.",
119
158
  "cli.doctor.args.fix.description": "Repair derived Fabric state (meta + indexes).",
120
159
  "cli.doctor.args.json.description": "Print the doctor report as JSON.",
121
160
  "cli.doctor.args.strict.description": "Treat warnings as failures.",
122
161
  "cli.doctor.args.fix-knowledge.description": "Apply knowledge lint mutations: demote orphaned canonical entries, archive stale drafts, and bump drifted index counters. Default doctor run remains report-only.",
123
- "cli.doctor.args.rescan.description": "Re-run the init scan to rebuild .fabric/agents.meta.json forensic state before doctor checks.",
124
162
  "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.",
125
163
  "cli.doctor.errors.fix-knowledge-fix-mutually-exclusive": "--fix-knowledge and --fix cannot be combined. --fix-knowledge mutates user knowledge state (demote/archive); --fix repairs derived state (meta/index). Run them separately.",
126
164
  // rc.20 TASK-05: --cite-coverage report flags. Read-only; mutually exclusive with --fix/--fix-knowledge.
127
165
  "cli.doctor.args.cite-coverage.description": "Generate cite policy adherence report (read-only; skips standard inspections)",
128
166
  "cli.doctor.args.since.description": "Time window for cite coverage (e.g. 7d, 24h, 30m)",
129
167
  "cli.doctor.args.client.description": "Filter cite coverage by client (cc|codex|cursor|all)",
168
+ // v2.0.0-rc.24 TASK-10: --layer filters cite contract audit by KB layer (team|personal|all).
169
+ "cli.doctor.args.layer.description": "Filter cite contract audit by KB layer (team|personal|all)",
130
170
  "cli.doctor.errors.cite-coverage-mutex": "--cite-coverage cannot be combined with --fix or --fix-knowledge",
131
171
  "cli.doctor.errors.invalid-since": "Invalid --since value: {input}. Expected duration like 7d, 24h, 30m or epoch ms.",
132
172
  "cli.doctor.errors.invalid-client": "Invalid --client value: {input}. Expected cc, codex, cursor, or all.",
173
+ "cli.doctor.errors.invalid-layer": "Invalid --layer value: {input}. Expected team, personal, or all.",
174
+ // rc.23 TASK-007 (a-C2): --enrich-descriptions flag set. Back-fills the
175
+ // four description-grade frontmatter fields on canonical knowledge entries.
176
+ "cli.doctor.args.enrich-descriptions.description": "Back-fill missing intent_clues / tech_stack / impact / must_read_if on canonical knowledge entries (read-only by default; pair with --auto to write stubs).",
177
+ "cli.doctor.args.auto.description": "With --enrich-descriptions: write deterministic stub values for missing fields. Without --auto, the run is read-only.",
178
+ "cli.doctor.args.dry-run.description": "With --enrich-descriptions --auto: preview the would-be changes without writing to disk.",
179
+ "cli.doctor.errors.enrich-descriptions-mutex": "--enrich-descriptions cannot be combined with --fix, --fix-knowledge, or --cite-coverage. Run them separately.",
180
+ "doctor.enrich.allComplete": "All canonical knowledge entries already declare intent_clues / tech_stack / impact / must_read_if.",
181
+ // v2.0.0-rc.25 TASK-10: --archive-history flag set. Read-only audit of
182
+ // session_archive_attempted events; mutually exclusive with the other
183
+ // mutation/report surfaces.
184
+ "cli.doctor.args.archive-history.description": "Render per-session archive attempt history (read-only; reads session_archive_attempted events).",
185
+ "cli.doctor.errors.archive-history-mutex": "--archive-history cannot be combined with --fix, --fix-knowledge, --cite-coverage, or --enrich-descriptions. Run them separately.",
186
+ "doctor.archive-history.header": "Archive history (last {sinceLabel}, {count} session{plural})",
187
+ "doctor.archive-history.empty": "No archive history yet within the --since={sinceLabel} window.",
188
+ "doctor.archive-history.table.session": "Session",
189
+ "doctor.archive-history.table.lastAttempt": "Last attempt",
190
+ "doctor.archive-history.table.outcome": "Outcome",
191
+ "doctor.archive-history.table.candidates": "Candidates",
192
+ "doctor.archive-history.table.coveredGap": "Covered gap",
133
193
  "cli.hooks.description": "Manage Fabric Git hook templates.",
134
194
  "cli.hooks.install.description": "Install the Fabric Husky pre-commit hook template.",
135
195
  "cli.hooks.install.args.target.description": "Target project path, default is the current working directory.",
@@ -654,22 +714,77 @@ var zhCNMessages = {
654
714
  "doctor.cite.dismissed.not-applicable": "\u4E0D\u9002\u7528",
655
715
  "doctor.cite.dismissed.other": "\u5176\u4ED6",
656
716
  "doctor.cite.dismissed.unspecified": "\u672A\u6CE8\u660E",
717
+ "doctor.cite.section.noneReasons": "KB: none \u539F\u56E0\u5206\u5E03",
718
+ "doctor.cite.none.no-relevant": "\u5DF2\u67E5\u65E0\u53EF\u7528",
719
+ "doctor.cite.none.not-applicable": "\u4E0D\u5728\u8303\u56F4",
720
+ "doctor.cite.none.unspecified": "\u672A\u6CE8\u660E",
657
721
  "doctor.cite.status.skipped": "\u672C\u5DE5\u4F5C\u533A Cite policy \u5C1A\u672A\u6FC0\u6D3B\u3002",
722
+ // v2.0.0-rc.24 TASK-09: cite-coverage 合约审计渲染键(contract-policy 审计窗口)。
723
+ // 配套 schema:packages/shared/src/schemas/api-contracts.ts citeCoverageReportSchema。
724
+ // 渲染器消费方:TASK-10 CLI doctor --cite-coverage(layer / type / skip / status / contract)。
725
+ "cite-coverage.contract.header": "\u5E94\u7528\u5951\u7EA6\u6821\u9A8C",
726
+ "cite-coverage.contract.decisions_cited": "decisions \u5F15\u7528",
727
+ "cite-coverage.contract.pitfalls_cited": "pitfalls \u5F15\u7528",
728
+ "cite-coverage.contract.with": "\u5DF2\u9644\u5951\u7EA6",
729
+ "cite-coverage.contract.missing": "\u7F3A\u5951\u7EA6",
730
+ "cite-coverage.contract.hard_violated": "\u786C\u6027\u8FDD\u89C4\uFF08\u64CD\u4F5C\u7B26\u672A\u5339\u914D session \u7F16\u8F91\uFF09",
731
+ "cite-coverage.contract.cite_id_unresolved": "\u5F15\u7528 ID \u4E0D\u5B58\u5728",
732
+ "cite-coverage.contract.skip_count": "skip \u6876",
733
+ "cite-coverage.contract.status.ok": "\u6B63\u5E38",
734
+ "cite-coverage.contract.status.skipped_bootstrap_drift": "\u5DF2\u8DF3\u8FC7\uFF08bootstrap drift \u2014 \u8BF7\u8FD0\u884C fab install\uFF09",
735
+ "cite-coverage.contract.status.awaiting_marker": "\u7B49\u5F85\u9996\u6B21 marker emit",
736
+ // 单数知识类型(与 KnowledgeTypeSchema 枚举字面量逐字对齐)+ 第六桶 unresolved。
737
+ "cite-coverage.contract.type.decision": "decision",
738
+ "cite-coverage.contract.type.pitfall": "pitfall",
739
+ "cite-coverage.contract.type.model": "model",
740
+ "cite-coverage.contract.type.guideline": "guideline",
741
+ "cite-coverage.contract.type.process": "process",
742
+ "cite-coverage.contract.type.unresolved": "unresolved",
743
+ // 知识层标签(per_layer_type 表头 + layer_filter 标识)。
744
+ "cite-coverage.layer.team": "team",
745
+ "cite-coverage.layer.personal": "personal",
746
+ "cite-coverage.layer.team_review": "[team \u2014 \u9700\u590D\u6838]",
747
+ "cite-coverage.layer.personal_fyi": "[personal \u2014 fyi]",
748
+ // skip_reason 标准词表(bootstrap 文档定义;运营方可继续扩展词条,渲染器对未知键回退到原始 key)。
749
+ "cite-coverage.skip.sequencing": "\u987A\u5E8F\u7EA6\u675F",
750
+ "cite-coverage.skip.conditional": "\u6761\u4EF6\u5206\u652F",
751
+ "cite-coverage.skip.semantic": "\u8BED\u4E49\u7EA6\u675F",
752
+ "cite-coverage.skip.aesthetic": "\u7F8E\u5B66/\u98CE\u683C",
753
+ "cite-coverage.skip.architectural": "\u67B6\u6784\u5C42",
754
+ "cite-coverage.skip.other": "\u5176\u4ED6",
658
755
  "cli.doctor.args.target.description": "\u76EE\u6807\u9879\u76EE\u8DEF\u5F84\u3002\u9ED8\u8BA4\u4F9D\u6B21\u4F7F\u7528 --target\u3001EXTERNAL_FIXTURE_PATH\u3001\u5F53\u524D\u76EE\u5F55\u3002",
659
756
  "cli.doctor.args.fix.description": "\u4FEE\u590D Fabric \u6D3E\u751F\u72B6\u6001\uFF08meta + \u7D22\u5F15\uFF09\u3002",
660
757
  "cli.doctor.args.json.description": "\u4EE5 JSON \u8F93\u51FA doctor \u62A5\u544A\u3002",
661
758
  "cli.doctor.args.strict.description": "\u5C06 warning \u4E5F\u89C6\u4E3A\u5931\u8D25\u3002",
662
759
  "cli.doctor.args.fix-knowledge.description": "\u5E94\u7528\u77E5\u8BC6\u5E93 lint \u53D8\u66F4\uFF1A\u964D\u7EA7\u5B64\u7ACB\u7684\u89C4\u8303\u6761\u76EE\u3001\u5F52\u6863\u9648\u65E7 draft\u3001\u4FEE\u6B63\u6F02\u79FB\u7684\u7D22\u5F15\u8BA1\u6570\u5668\u3002\u9ED8\u8BA4 doctor \u8FD0\u884C\u4ECD\u7136\u53EA\u8BFB\u3002",
663
- "cli.doctor.args.rescan.description": "\u5728 doctor \u68C0\u67E5\u4E4B\u524D\u91CD\u65B0\u8FD0\u884C init scan\uFF0C\u4EE5\u91CD\u5EFA .fabric/agents.meta.json \u7684\u53D6\u8BC1\u72B6\u6001\u3002",
664
760
  "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",
665
761
  "cli.doctor.errors.fix-knowledge-fix-mutually-exclusive": "--fix-knowledge \u4E0E --fix \u4E0D\u53EF\u540C\u65F6\u4F7F\u7528\u3002--fix-knowledge \u4FEE\u6539\u7528\u6237\u77E5\u8BC6\u72B6\u6001\uFF08\u964D\u7EA7/\u5F52\u6863\uFF09\uFF1B--fix \u4FEE\u590D\u6D3E\u751F\u72B6\u6001\uFF08meta/\u7D22\u5F15\uFF09\u3002\u8BF7\u5206\u522B\u8FD0\u884C\u3002",
666
762
  // rc.20 TASK-05: --cite-coverage 报告参数;只读,与 --fix/--fix-knowledge 互斥。
667
763
  "cli.doctor.args.cite-coverage.description": "Cite \u653F\u7B56\u5408\u89C4\u62A5\u544A(\u53EA\u8BFB;\u8DF3\u8FC7\u6807\u51C6\u68C0\u67E5)",
668
764
  "cli.doctor.args.since.description": "Cite \u8986\u76D6\u7387\u7EDF\u8BA1\u7A97\u53E3(\u5982 7d, 24h, 30m)",
669
765
  "cli.doctor.args.client.description": "\u6309\u5BA2\u6237\u7AEF\u8FC7\u6EE4(cc|codex|cursor|all)",
766
+ // v2.0.0-rc.24 TASK-10: --layer 过滤 cite 合约审计的知识层 (team|personal|all)。
767
+ "cli.doctor.args.layer.description": "\u6309\u77E5\u8BC6\u5C42\u8FC7\u6EE4 cite \u5408\u7EA6\u5BA1\u8BA1 (team|personal|all)",
670
768
  "cli.doctor.errors.cite-coverage-mutex": "--cite-coverage \u4E0D\u80FD\u4E0E --fix \u6216 --fix-knowledge \u540C\u65F6\u4F7F\u7528",
671
769
  "cli.doctor.errors.invalid-since": "--since \u53D6\u503C\u65E0\u6548: {input}\u3002\u9884\u671F\u683C\u5F0F 7d / 24h / 30m \u6216 epoch ms\u3002",
672
770
  "cli.doctor.errors.invalid-client": "--client \u53D6\u503C\u65E0\u6548: {input}\u3002\u9884\u671F cc / codex / cursor / all\u3002",
771
+ "cli.doctor.errors.invalid-layer": "--layer \u53D6\u503C\u65E0\u6548: {input}\u3002\u9884\u671F team / personal / all\u3002",
772
+ // rc.23 TASK-007 (a-C2): --enrich-descriptions 回填四个 description 字段。
773
+ "cli.doctor.args.enrich-descriptions.description": "\u56DE\u586B\u6B63\u5F0F\u77E5\u8BC6\u6761\u76EE\u7F3A\u5931\u7684 intent_clues / tech_stack / impact / must_read_if \u5B57\u6BB5\uFF08\u9ED8\u8BA4\u53EA\u8BFB;\u642D\u914D --auto \u5199\u5165 stub\uFF09\u3002",
774
+ "cli.doctor.args.auto.description": "\u4E0E --enrich-descriptions \u642D\u914D\uFF1A\u4E3A\u7F3A\u5931\u5B57\u6BB5\u5199\u5165\u786E\u5B9A\u6027 stub \u503C\u3002\u4E0D\u52A0 --auto \u4EC5\u505A\u53EA\u8BFB\u626B\u63CF\u3002",
775
+ "cli.doctor.args.dry-run.description": "\u4E0E --enrich-descriptions --auto \u642D\u914D\uFF1A\u4EC5\u9884\u89C8\u6539\u52A8\u8BA1\u5212,\u4E0D\u5199\u5165\u78C1\u76D8\u3002",
776
+ "cli.doctor.errors.enrich-descriptions-mutex": "--enrich-descriptions \u4E0D\u80FD\u4E0E --fix / --fix-knowledge / --cite-coverage \u540C\u65F6\u4F7F\u7528,\u8BF7\u5206\u522B\u8FD0\u884C\u3002",
777
+ "doctor.enrich.allComplete": "\u6240\u6709\u6B63\u5F0F\u77E5\u8BC6\u6761\u76EE\u5747\u5DF2\u5305\u542B intent_clues / tech_stack / impact / must_read_if\u3002",
778
+ // v2.0.0-rc.25 TASK-10: --archive-history 子命令——按 session 维度审计归档尝试记录。
779
+ "cli.doctor.args.archive-history.description": "\u6309 session \u7EF4\u5EA6\u6E32\u67D3\u5F52\u6863\u5C1D\u8BD5\u5386\u53F2(\u53EA\u8BFB;\u8BFB\u53D6 session_archive_attempted \u4E8B\u4EF6)\u3002",
780
+ "cli.doctor.errors.archive-history-mutex": "--archive-history \u4E0D\u80FD\u4E0E --fix / --fix-knowledge / --cite-coverage / --enrich-descriptions \u540C\u65F6\u4F7F\u7528,\u8BF7\u5206\u522B\u8FD0\u884C\u3002",
781
+ "doctor.archive-history.header": "\u5F52\u6863\u5386\u53F2(\u6700\u8FD1 {sinceLabel},{count} \u4E2A\u4F1A\u8BDD)",
782
+ "doctor.archive-history.empty": "\u6682\u65E0\u5F52\u6863\u5386\u53F2\u8BB0\u5F55 (--since={sinceLabel} \u7A97\u53E3\u5185)\u3002",
783
+ "doctor.archive-history.table.session": "\u4F1A\u8BDD",
784
+ "doctor.archive-history.table.lastAttempt": "\u6700\u8FD1\u5C1D\u8BD5",
785
+ "doctor.archive-history.table.outcome": "\u7ED3\u679C",
786
+ "doctor.archive-history.table.candidates": "\u5019\u9009\u6570",
787
+ "doctor.archive-history.table.coveredGap": "\u8986\u76D6\u8DDD\u4ECA",
673
788
  "cli.hooks.description": "\u7BA1\u7406 Fabric Git \u94A9\u5B50\u6A21\u677F\u3002",
674
789
  "cli.hooks.install.description": "\u5B89\u88C5 Fabric Husky pre-commit \u94A9\u5B50\u6A21\u677F\u3002",
675
790
  "cli.hooks.install.args.target.description": "\u76EE\u6807\u9879\u76EE\u8DEF\u5F84\uFF0C\u9ED8\u8BA4\u4E3A\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55\u3002",
@@ -6,7 +6,7 @@ import {
6
6
  enMessages,
7
7
  normalizeLocale,
8
8
  zhCNMessages
9
- } from "../chunk-VKCXD6CI.js";
9
+ } from "../chunk-AFUQKKGR.js";
10
10
  export {
11
11
  PROTECTED_TOKENS,
12
12
  createTranslator,