@fenglimg/fabric-shared 2.0.0-rc.23 → 2.0.0-rc.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-GDYPVGWT.js → chunk-3RSYWMQU.js} +57 -1
- package/dist/{chunk-IP6VWOVE.js → chunk-4OQXR6JW.js} +31 -1
- package/dist/{chunk-GYIALPMW.js → chunk-E5LHOWTN.js} +534 -0
- package/dist/i18n/index.d.ts +21 -1
- package/dist/i18n/index.js +3 -1
- package/dist/index.d.ts +242 -16
- package/dist/index.js +141 -13
- package/dist/schemas/api-contracts.d.ts +203 -1
- package/dist/schemas/api-contracts.js +7 -1
- package/dist/templates/bootstrap-canonical.d.ts +2 -2
- package/dist/templates/bootstrap-canonical.js +1 -1
- package/package.json +1 -1
|
@@ -84,7 +84,9 @@ var planContextInputSchema = z2.object({
|
|
|
84
84
|
detected_entities: z2.record(z2.array(z2.string())).optional().describe("Optional path-keyed detected entities for the requirement profile"),
|
|
85
85
|
client_hash: z2.string().optional().describe("Revision hash from a prior fab_plan_context response; enables stale detection"),
|
|
86
86
|
correlation_id: z2.string().optional().describe("Optional caller-provided correlation id for Event Ledger records"),
|
|
87
|
-
session_id: z2.string().optional().describe(
|
|
87
|
+
session_id: z2.string().optional().describe(
|
|
88
|
+
"Recommended: pass the current client session id (Claude Code: $session_id; Codex: corresponding identifier) \u2014 enables cross-session debt tracking in fab doctor and accurate archive-hint cross-session count. Falls back gracefully if omitted."
|
|
89
|
+
),
|
|
88
90
|
// v2.0-rc.5 A3 (TASK-007): `include_deprecated` removed — it was a no-op
|
|
89
91
|
// placeholder (MaturitySchema has no `deprecated` value). When the maturity
|
|
90
92
|
// enum widens we re-introduce the flag as part of that protocol bump.
|
|
@@ -526,6 +528,57 @@ var fabReviewAnnotations = {
|
|
|
526
528
|
openWorldHint: false,
|
|
527
529
|
title: "Review pending knowledge entries"
|
|
528
530
|
};
|
|
531
|
+
var citeContractMetricsSchema = z2.object({
|
|
532
|
+
decisions_cited: z2.number().int().nonnegative(),
|
|
533
|
+
pitfalls_cited: z2.number().int().nonnegative(),
|
|
534
|
+
contract_with: z2.number().int().nonnegative(),
|
|
535
|
+
contract_missing: z2.number().int().nonnegative(),
|
|
536
|
+
hard_violated: z2.number().int().nonnegative(),
|
|
537
|
+
cite_id_unresolved: z2.number().int().nonnegative(),
|
|
538
|
+
skip_count: z2.record(z2.string(), z2.number().int().nonnegative())
|
|
539
|
+
});
|
|
540
|
+
var citeLayerTypeBreakdownSchema = z2.object({
|
|
541
|
+
team: z2.record(z2.string(), z2.number().int().nonnegative()),
|
|
542
|
+
personal: z2.record(z2.string(), z2.number().int().nonnegative())
|
|
543
|
+
});
|
|
544
|
+
var citeCoverageReportSchema = z2.object({
|
|
545
|
+
status: z2.enum(["ok", "skipped"]),
|
|
546
|
+
marker_ts: z2.number().int().nonnegative(),
|
|
547
|
+
marker_emitted_now: z2.boolean(),
|
|
548
|
+
since_ts: z2.number().int().nonnegative(),
|
|
549
|
+
client_filter: z2.enum(["cc", "codex", "cursor", "all"]),
|
|
550
|
+
// v2.0.0-rc.24 TASK-08: layer filter discriminator. Optional so pre-TASK-10
|
|
551
|
+
// CLI callers (which never set the flag) still parse. Defaults to "all" at
|
|
552
|
+
// the service layer.
|
|
553
|
+
layer_filter: z2.enum(["team", "personal", "all"]).optional(),
|
|
554
|
+
metrics: z2.object({
|
|
555
|
+
edits_touched: z2.number().int().nonnegative(),
|
|
556
|
+
qualifying_cites: z2.number().int().nonnegative(),
|
|
557
|
+
recalled_unverified: z2.number().int().nonnegative(),
|
|
558
|
+
expected_but_missed: z2.number().int().nonnegative(),
|
|
559
|
+
total_turns: z2.number().int().nonnegative()
|
|
560
|
+
}),
|
|
561
|
+
per_client: z2.record(
|
|
562
|
+
z2.string(),
|
|
563
|
+
z2.object({
|
|
564
|
+
edits_touched: z2.number().int().nonnegative().optional(),
|
|
565
|
+
qualifying_cites: z2.number().int().nonnegative().optional(),
|
|
566
|
+
recalled_unverified: z2.number().int().nonnegative().optional(),
|
|
567
|
+
expected_but_missed: z2.number().int().nonnegative().optional(),
|
|
568
|
+
total_turns: z2.number().int().nonnegative().optional()
|
|
569
|
+
})
|
|
570
|
+
).optional(),
|
|
571
|
+
dismissed_reason_histogram: z2.record(z2.string(), z2.number().int().nonnegative()).optional(),
|
|
572
|
+
none_reason_histogram: z2.record(z2.string(), z2.number().int().nonnegative()).optional(),
|
|
573
|
+
// v2.0.0-rc.24 TASK-08: contract-policy audit metrics. Status discriminates
|
|
574
|
+
// populated vs degraded modes. contract_metrics + per_layer_type are emitted
|
|
575
|
+
// (zeroed) in degraded modes so the renderer iterates one stable shape.
|
|
576
|
+
contract_metrics_status: z2.enum(["ok", "skipped:bootstrap_drift", "awaiting_marker"]).optional(),
|
|
577
|
+
contract_metrics: citeContractMetricsSchema.optional(),
|
|
578
|
+
per_layer_type: citeLayerTypeBreakdownSchema.optional(),
|
|
579
|
+
contract_marker_ts: z2.number().int().nonnegative().optional(),
|
|
580
|
+
generated_at: z2.string()
|
|
581
|
+
});
|
|
529
582
|
var ledgerSourceSchema = z2.enum(["ai", "human"]);
|
|
530
583
|
var timestampFilterSchema = z2.preprocess((value) => {
|
|
531
584
|
if (value === void 0 || value === null || value === "") {
|
|
@@ -654,6 +707,9 @@ export {
|
|
|
654
707
|
FabReviewOutputSchema,
|
|
655
708
|
FabReviewOutputShape,
|
|
656
709
|
fabReviewAnnotations,
|
|
710
|
+
citeContractMetricsSchema,
|
|
711
|
+
citeLayerTypeBreakdownSchema,
|
|
712
|
+
citeCoverageReportSchema,
|
|
657
713
|
ledgerSourceSchema,
|
|
658
714
|
ledgerQuerySchema,
|
|
659
715
|
historyStateQuerySchema,
|
|
@@ -14,15 +14,45 @@ var BOOTSTRAP_CANONICAL = `# Fabric Bootstrap
|
|
|
14
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
15
|
|
|
16
16
|
## \u77E5\u8BC6\u5E93(KB)
|
|
17
|
-
- **Discovery**:SessionStart hook \u5217 broad-scoped \u6761\u76EE;edit \u6587\u4EF6\u65F6 PreToolUse hook \u53EF\u80FD\u89E6\u53D1 narrow hint\u3002
|
|
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
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
|
|
19
20
|
- **Write flows**:\`fabric-archive\` / \`fabric-review\` / \`fabric-import\` \u4E09\u4E2A Skills\u3002
|
|
20
21
|
- **Language**:\u6E32\u67D3\u6309 \`.fabric/fabric-config.json\` \u7684 \`fabric_language\` \u5B57\u6BB5\u3002
|
|
21
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
|
+
|
|
22
49
|
## Cite policy
|
|
23
50
|
|
|
24
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
|
|
25
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
|
|
26
56
|
- **\u7528\u6237\u53E3\u5934\u63D0\u89C4\u5219\u6CA1\u7ED9 id**: \u5148\u8C03 \`fab_extract_knowledge\` \u6216 \`search_context\` \u53CD\u67E5\u3002
|
|
27
57
|
- **dismissed reason**: \u679A\u4E3E \`scope-mismatch | outdated | not-applicable | other:<text>\`\u3002
|
|
28
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
|