@fenglimg/fabric-shared 2.0.0-rc.36 → 2.0.0-rc.38
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/LICENSE +21 -0
- package/README.md +13 -0
- package/dist/{chunk-P4RNLXTM.js → chunk-7CX32MYL.js} +133 -28
- package/dist/{chunk-VP2B2HB2.js → chunk-LTDB2UDN.js} +23 -20
- package/dist/{chunk-Z26SD627.js → chunk-WVPDH4BF.js} +229 -64
- package/dist/i18n/index.js +1 -1
- package/dist/{index-BjssYQb3.d.ts → index-UBqD9F0b.d.ts} +3 -9
- package/dist/index.d.ts +93 -13
- package/dist/index.js +39 -4
- package/dist/schemas/api-contracts.d.ts +731 -480
- package/dist/schemas/api-contracts.js +13 -1
- package/dist/templates/bootstrap-canonical.d.ts +1 -1
- package/dist/templates/bootstrap-canonical.js +1 -1
- package/dist/types/index.d.ts +1 -1
- package/package.json +26 -2
|
@@ -37,42 +37,22 @@ var _ruleDescriptionSchema = z2.object({
|
|
|
37
37
|
maturity: _maturityEnum.optional(),
|
|
38
38
|
knowledge_layer: _layerEnum.optional(),
|
|
39
39
|
layer_reason: z2.string().optional(),
|
|
40
|
-
created_at: z2.string().optional()
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
selectable: z2.boolean(),
|
|
47
|
-
description: _ruleDescriptionSchema,
|
|
48
|
-
// v2.0: top-level knowledge surface for client-side filtering. Mirrors
|
|
49
|
-
// description.* — exposed here so MCP clients can filter without reaching
|
|
50
|
-
// into the nested payload.
|
|
51
|
-
type: _knowledgeTypeEnum.optional(),
|
|
52
|
-
maturity: _maturityEnum.optional(),
|
|
53
|
-
layer: _layerEnum.optional(),
|
|
54
|
-
layer_reason: z2.string().optional(),
|
|
55
|
-
// v2/rc.2: tag list shipped via frontmatter (commit a85121a). Exposed at
|
|
56
|
-
// the API surface so MCP clients can filter without re-parsing the
|
|
57
|
-
// description payload. Absent on legacy entries; consumers should treat
|
|
58
|
-
// missing as [].
|
|
40
|
+
created_at: z2.string().optional(),
|
|
41
|
+
// v2.0.0-rc.38 UX-3 (D-MCP fold ③): these three were previously carried ONLY
|
|
42
|
+
// as top-level mirrors on the index item. With the mirrors removed,
|
|
43
|
+
// `description` becomes their canonical (and only) home, so the schema must
|
|
44
|
+
// validate them here. Optional + default-safe (tags/[]/broad) so legacy
|
|
45
|
+
// entries without frontmatter still parse.
|
|
59
46
|
tags: z2.array(z2.string()).optional(),
|
|
60
|
-
// v2.0-rc.5 (C1): relevance scope/paths drive plan-context-hint narrowing.
|
|
61
|
-
// Exposed at the API surface so MCP clients (and the `fabric
|
|
62
|
-
// plan-context-hint` CLI from D1) can filter without re-parsing the
|
|
63
|
-
// description payload. Defaults applied at the parse layer
|
|
64
|
-
// (knowledge-meta-builder + agentsMetaNodeBaseSchema):
|
|
65
|
-
// relevance_scope → 'broad' (always-surface, safe default)
|
|
66
|
-
// relevance_paths → [] (no path anchors)
|
|
67
|
-
// Consumers should treat missing fields as broad/[]. Optional on the wire
|
|
68
|
-
// so older servers without rc.5 schemas remain wire-compatible.
|
|
69
47
|
relevance_scope: z2.enum(["narrow", "broad"]).optional(),
|
|
70
48
|
relevance_paths: z2.array(z2.string()).optional()
|
|
71
49
|
});
|
|
50
|
+
var _descriptionIndexItemSchema = z2.object({
|
|
51
|
+
stable_id: z2.string(),
|
|
52
|
+
description: _ruleDescriptionSchema
|
|
53
|
+
});
|
|
72
54
|
var _requirementProfileSchema = z2.object({
|
|
73
55
|
target_path: z2.string(),
|
|
74
|
-
path_segments: z2.array(z2.string()),
|
|
75
|
-
extension: z2.string(),
|
|
76
56
|
known_tech: z2.array(z2.string()),
|
|
77
57
|
user_intent: z2.string(),
|
|
78
58
|
detected_entities: z2.array(z2.string())
|
|
@@ -104,6 +84,18 @@ var planContextInputSchema = z2.object({
|
|
|
104
84
|
"Path context for narrow-scope relevance filtering. Defaults to `paths`; empty = no filter."
|
|
105
85
|
)
|
|
106
86
|
});
|
|
87
|
+
var _preflightDiagnosticSchema = z2.object({
|
|
88
|
+
// v2.0.0-rc.38 UX-2: `empty_shell_suppressed` surfaces draft entries whose
|
|
89
|
+
// description carries no selection signal (summary === stable_id + empty
|
|
90
|
+
// intent_clues/tech_stack/impact). They are filtered out of `candidates` to
|
|
91
|
+
// cut noise; this diagnostic names them so `fabric doctor` /
|
|
92
|
+
// --enrich-descriptions can prompt enrichment.
|
|
93
|
+
code: z2.enum(["missing_description", "empty_shell_suppressed"]),
|
|
94
|
+
severity: z2.literal("warn"),
|
|
95
|
+
message: z2.string(),
|
|
96
|
+
stable_ids: z2.array(z2.string()).optional(),
|
|
97
|
+
path: z2.string().optional()
|
|
98
|
+
});
|
|
107
99
|
var planContextOutputSchema = z2.object({
|
|
108
100
|
revision_hash: z2.string(),
|
|
109
101
|
stale: z2.boolean(),
|
|
@@ -111,22 +103,11 @@ var planContextOutputSchema = z2.object({
|
|
|
111
103
|
entries: z2.array(
|
|
112
104
|
z2.object({
|
|
113
105
|
path: z2.string(),
|
|
114
|
-
requirement_profile: _requirementProfileSchema
|
|
115
|
-
description_index: z2.array(_descriptionIndexItemSchema)
|
|
106
|
+
requirement_profile: _requirementProfileSchema
|
|
116
107
|
})
|
|
117
108
|
),
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
preflight_diagnostics: z2.array(
|
|
121
|
-
z2.object({
|
|
122
|
-
code: z2.literal("missing_description"),
|
|
123
|
-
severity: z2.literal("warn"),
|
|
124
|
-
message: z2.string(),
|
|
125
|
-
stable_ids: z2.array(z2.string()).optional(),
|
|
126
|
-
path: z2.string().optional()
|
|
127
|
-
})
|
|
128
|
-
)
|
|
129
|
-
}),
|
|
109
|
+
candidates: z2.array(_descriptionIndexItemSchema),
|
|
110
|
+
preflight_diagnostics: z2.array(_preflightDiagnosticSchema),
|
|
130
111
|
warnings: z2.array(structuredWarningSchema).optional(),
|
|
131
112
|
// v2.0.0-rc.22 Scope D T-D2: optional auto-heal banner fields. Surfaced
|
|
132
113
|
// ONLY when the loadActiveMetaOrStale call detected drift and rebuilt the
|
|
@@ -134,7 +115,15 @@ var planContextOutputSchema = z2.object({
|
|
|
134
115
|
// "knowledge meta auto-healed (was <prev>, now <curr>)" notice without
|
|
135
116
|
// having to query the event ledger.
|
|
136
117
|
auto_healed: z2.boolean().optional(),
|
|
137
|
-
previous_revision_hash: z2.string().optional()
|
|
118
|
+
previous_revision_hash: z2.string().optional(),
|
|
119
|
+
// v2.0.0-rc.37 NEW-24: stale-id redirect map. Populated when one or more
|
|
120
|
+
// recent fab_review modify-layer flips reassigned a canonical stable_id
|
|
121
|
+
// and the NEW id is in this response's description_index. Callers that
|
|
122
|
+
// cached the OLD id from a prior session look it up here and substitute
|
|
123
|
+
// the new id before issuing fab_get_knowledge_sections / fab_recall. Empty
|
|
124
|
+
// (field omitted) when no actionable redirects exist for the surfaced
|
|
125
|
+
// candidate set. See packages/server/src/services/id-redirect.ts.
|
|
126
|
+
redirects: z2.record(z2.string()).optional()
|
|
138
127
|
});
|
|
139
128
|
var planContextAnnotations = {
|
|
140
129
|
readOnlyHint: true,
|
|
@@ -159,7 +148,7 @@ var planContextHintOutputSchema = z2.object({
|
|
|
159
148
|
var knowledgeSectionsInputSchema = z2.object({
|
|
160
149
|
selection_token: z2.string().min(1).describe("Selection token returned by fab_plan_context"),
|
|
161
150
|
ai_selected_stable_ids: z2.array(z2.string()).describe(
|
|
162
|
-
"Stable ids picked from fab_plan_context
|
|
151
|
+
"Stable ids picked from fab_plan_context candidates[].stable_id; choose 1..N to fetch bodies for"
|
|
163
152
|
),
|
|
164
153
|
ai_selection_reasons: z2.record(z2.string().min(1)).describe("Reason for each AI-selected L1 stable_id"),
|
|
165
154
|
correlation_id: z2.string().optional().describe("Optional caller-provided correlation id for Event Ledger records"),
|
|
@@ -171,16 +160,10 @@ var knowledgeSectionsInputSchema = z2.object({
|
|
|
171
160
|
});
|
|
172
161
|
var knowledgeSectionsOutputSchema = z2.object({
|
|
173
162
|
revision_hash: z2.string(),
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
* `rules[].level` directly. Kept as optional for one rc to avoid breaking
|
|
179
|
-
* pre-rc.23 clients that destructure this field.
|
|
180
|
-
*/
|
|
181
|
-
precedence: z2.tuple([z2.literal("L2"), z2.literal("L1"), z2.literal("L0")]).optional().describe(
|
|
182
|
-
"DEPRECATED (removed in rc.24): hardcoded L2/L1/L0 precedence tuple from the retired rc.5 selection ceremony. Use rules[].level instead."
|
|
183
|
-
),
|
|
163
|
+
// v2.0.0-rc.38 UX-13 (D-MCP step-2 audit): the deprecated `precedence`
|
|
164
|
+
// L2/L1/L0 tuple (flagged "removed in rc.24" but still emitted) is gone — it
|
|
165
|
+
// was a constant 3-string field on every response read by no production
|
|
166
|
+
// consumer. Use rules[].level for ordering.
|
|
184
167
|
selected_stable_ids: z2.array(z2.string()),
|
|
185
168
|
rules: z2.array(
|
|
186
169
|
z2.object({
|
|
@@ -208,11 +191,18 @@ var knowledgeSectionsOutputSchema = z2.object({
|
|
|
208
191
|
message: z2.string()
|
|
209
192
|
})
|
|
210
193
|
),
|
|
211
|
-
// v2/rc.3 (Q6): present iff
|
|
212
|
-
//
|
|
213
|
-
//
|
|
214
|
-
|
|
215
|
-
|
|
194
|
+
// v2/rc.3 (Q6) + v2.0.0-rc.37 NEW-24: present iff at least one stable_id in
|
|
195
|
+
// the caller-supplied ai_selected_stable_ids was rewritten by the layer-flip
|
|
196
|
+
// redirect resolver. Pre-rc.37: this was a single { stable_id } object set
|
|
197
|
+
// only on the rare token-mint-vs-flip race. rc.37+: also accepts a map of
|
|
198
|
+
// (old_id → new_id) when multiple rewrites fire in one fetch. Both shapes
|
|
199
|
+
// are accepted for forward-compat; readers should branch on shape and
|
|
200
|
+
// refresh their cached ids accordingly.
|
|
201
|
+
redirect_to: z2.union([
|
|
202
|
+
z2.object({ stable_id: z2.string() }),
|
|
203
|
+
z2.record(z2.string())
|
|
204
|
+
]).optional().describe(
|
|
205
|
+
"Post-layer-flip redirect. Pre-rc.37: { stable_id } shape from rc.3 fab_review/modify. rc.37+: also accepts a (old_id \u2192 new_id) map for fab_get_knowledge_sections / fab_recall transparent rewrite."
|
|
216
206
|
),
|
|
217
207
|
warnings: z2.array(structuredWarningSchema).optional()
|
|
218
208
|
});
|
|
@@ -223,6 +213,116 @@ var knowledgeSectionsAnnotations = {
|
|
|
223
213
|
openWorldHint: false,
|
|
224
214
|
title: "Filter rule sections"
|
|
225
215
|
};
|
|
216
|
+
var recallInputSchema = z2.object({
|
|
217
|
+
paths: z2.array(z2.string()).min(1).describe(
|
|
218
|
+
"Candidate file paths to recall Fabric rules for. Same semantics as fab_plan_context.paths."
|
|
219
|
+
),
|
|
220
|
+
intent: z2.string().optional().describe("User-stated requirement or implementation intent; used to build a neutral requirement profile."),
|
|
221
|
+
known_tech: z2.array(z2.string()).optional().describe("Known technologies involved."),
|
|
222
|
+
detected_entities: z2.record(z2.array(z2.string())).optional().describe("Optional path-keyed detected entities."),
|
|
223
|
+
client_hash: z2.string().optional().describe("Revision hash from a prior call; enables stale detection."),
|
|
224
|
+
correlation_id: z2.string().optional().describe("Optional caller-provided correlation id for Event Ledger records."),
|
|
225
|
+
session_id: z2.string().optional().describe(
|
|
226
|
+
"Current client session id (Claude Code: $session_id; Codex: corresponding identifier). Enables cross-session debt tracking. Falls back gracefully if omitted."
|
|
227
|
+
),
|
|
228
|
+
layer_filter: z2.enum(["team", "personal", "both"]).optional().describe(
|
|
229
|
+
"Restrict recall to the named layer. Default: fabric-config.default_layer_filter."
|
|
230
|
+
),
|
|
231
|
+
target_paths: z2.array(z2.string()).optional().describe(
|
|
232
|
+
"Path context for narrow-scope relevance filtering. Defaults to `paths`; empty = no filter."
|
|
233
|
+
),
|
|
234
|
+
ids: z2.array(z2.string()).optional().describe(
|
|
235
|
+
"Optional explicit stable_ids to fetch. When omitted, fab_recall returns ALL entries plan-context surfaces (the common case after rc.37 selectable-filter removal). When provided, filters fetched bodies to this set."
|
|
236
|
+
)
|
|
237
|
+
});
|
|
238
|
+
var recallOutputSchema = z2.object({
|
|
239
|
+
revision_hash: z2.string(),
|
|
240
|
+
stale: z2.boolean(),
|
|
241
|
+
// Selection token surfaced for callers who want to continue the conversation
|
|
242
|
+
// with fab_get_knowledge_sections (e.g. fetch additional ids later) — every
|
|
243
|
+
// recall response is still token-backed internally.
|
|
244
|
+
selection_token: z2.string(),
|
|
245
|
+
// v2.0.0-rc.38 UX-1/UX-4: mirrors planContextOutputSchema fold ① — per-path
|
|
246
|
+
// description_index collapsed into a single top-level `candidates`, and
|
|
247
|
+
// `preflight_diagnostics` lifted out of the removed `shared` wrapper.
|
|
248
|
+
entries: z2.array(
|
|
249
|
+
z2.object({
|
|
250
|
+
path: z2.string(),
|
|
251
|
+
requirement_profile: _requirementProfileSchema
|
|
252
|
+
})
|
|
253
|
+
),
|
|
254
|
+
candidates: z2.array(_descriptionIndexItemSchema),
|
|
255
|
+
preflight_diagnostics: z2.array(_preflightDiagnosticSchema),
|
|
256
|
+
// Same shape as knowledgeSectionsOutputSchema.rules — full body keyed by stable_id.
|
|
257
|
+
rules: z2.array(
|
|
258
|
+
z2.object({
|
|
259
|
+
stable_id: z2.string(),
|
|
260
|
+
level: z2.enum(["L0", "L1", "L2"]),
|
|
261
|
+
path: z2.string(),
|
|
262
|
+
body: z2.string()
|
|
263
|
+
})
|
|
264
|
+
),
|
|
265
|
+
selected_stable_ids: z2.array(z2.string()),
|
|
266
|
+
diagnostics: z2.array(
|
|
267
|
+
z2.object({
|
|
268
|
+
code: z2.literal("missing_knowledge_metadata"),
|
|
269
|
+
severity: z2.literal("warn"),
|
|
270
|
+
stable_id: z2.string(),
|
|
271
|
+
message: z2.string()
|
|
272
|
+
})
|
|
273
|
+
),
|
|
274
|
+
warnings: z2.array(structuredWarningSchema).optional(),
|
|
275
|
+
auto_healed: z2.boolean().optional(),
|
|
276
|
+
previous_revision_hash: z2.string().optional(),
|
|
277
|
+
// v2.0.0-rc.37 NEW-24: parallel to planContextOutputSchema.redirects — see
|
|
278
|
+
// that field for semantics. fab_recall transparently rewrites any old ids
|
|
279
|
+
// passed via `ids` before fetching bodies; the surfaced map still exposes
|
|
280
|
+
// the substitution to callers that want to refresh their cached state.
|
|
281
|
+
redirects: z2.record(z2.string()).optional()
|
|
282
|
+
});
|
|
283
|
+
var recallAnnotations = {
|
|
284
|
+
readOnlyHint: true,
|
|
285
|
+
idempotentHint: true,
|
|
286
|
+
destructiveHint: false,
|
|
287
|
+
openWorldHint: false,
|
|
288
|
+
title: "Recall Fabric knowledge (one-call)"
|
|
289
|
+
};
|
|
290
|
+
var archiveScanInputSchema = z2.object({
|
|
291
|
+
range: z2.union([z2.array(z2.string()).min(1), z2.literal("all")]).optional().describe(
|
|
292
|
+
"Phase 0 scope: explicit session_id[] to constrain the scan, or the 'all' sentinel. Omitted = scan everything since the last knowledge_proposed anchor."
|
|
293
|
+
),
|
|
294
|
+
now_ms: z2.number().int().nonnegative().optional().describe("Override for the anti-loop cooldown clock (testing). Defaults to Date.now()."),
|
|
295
|
+
correlation_id: z2.string().optional().describe("Optional caller-provided correlation id for Event Ledger records."),
|
|
296
|
+
session_id: z2.string().optional().describe("Current client session id; recorded for cross-session debt tracking.")
|
|
297
|
+
});
|
|
298
|
+
var archiveScanOutputSchema = z2.object({
|
|
299
|
+
// ts of the most recent knowledge_proposed event (the lower bound), or null
|
|
300
|
+
// when the workspace has never archived (scan everything).
|
|
301
|
+
anchor_ts: z2.number().nullable(),
|
|
302
|
+
// Distinct session_ids since the anchor that survived the outcome filter,
|
|
303
|
+
// in first-seen order — ready for the Skill to load digests + stitch.
|
|
304
|
+
session_ids: z2.array(z2.string()),
|
|
305
|
+
// Sessions dropped by the filter, with the rule that fired (audit/debug).
|
|
306
|
+
dropped: z2.array(
|
|
307
|
+
z2.object({
|
|
308
|
+
session_id: z2.string(),
|
|
309
|
+
reason: z2.enum(["user_dismissed", "cooldown", "no_new_signal"])
|
|
310
|
+
})
|
|
311
|
+
),
|
|
312
|
+
// max ts examined across the scan — becomes the next covered_through_ts.
|
|
313
|
+
covered_through_ts: z2.number().nullable(),
|
|
314
|
+
// Idempotency keys already proposed by prior archive runs but not yet
|
|
315
|
+
// reviewed (Phase 4.5 cross-session pending dedupe). Drop matching candidates.
|
|
316
|
+
already_proposed_keys: z2.array(z2.string()),
|
|
317
|
+
warnings: z2.array(structuredWarningSchema).optional()
|
|
318
|
+
});
|
|
319
|
+
var archiveScanAnnotations = {
|
|
320
|
+
readOnlyHint: true,
|
|
321
|
+
idempotentHint: true,
|
|
322
|
+
destructiveHint: false,
|
|
323
|
+
openWorldHint: false,
|
|
324
|
+
title: "Scan event ledger for archive candidates (deterministic)"
|
|
325
|
+
};
|
|
226
326
|
var ProposedReasonSchema = z2.enum([
|
|
227
327
|
"explicit-user-mark",
|
|
228
328
|
"diagnostic-then-fix",
|
|
@@ -311,6 +411,17 @@ var _FabExtractKnowledgeInputBaseSchema = z2.object({
|
|
|
311
411
|
must_read_if: z2.string().optional().describe(
|
|
312
412
|
"One-line strong trigger; when this condition holds the entry is considered required reading. Single line \u2264160 chars (e.g. 'touching anything under packages/cli/src/commands/hooks.ts'). Optional \u2014 omit when no single strong trigger fits."
|
|
313
413
|
),
|
|
414
|
+
// v2.0.0-rc.37 NEW-37 (werewolf dogfood remediation): optional tags array.
|
|
415
|
+
// Werewolf实测发现 100% canonical entries 的 `tags: []` 为空,主题聚类与
|
|
416
|
+
// 跨条目检索退化。Skills (fabric-archive / fabric-import) 应每个 entry 产
|
|
417
|
+
// 2-4 个 kebab-case 主题词。Server 写入时直接落 frontmatter `tags: [...]`;
|
|
418
|
+
// empty array 仍然合法(skill 无法 confident 推断时显式空)。
|
|
419
|
+
// IDEMPOTENCY: tags MUST NOT 参与 idempotency_key hash(同 relevance_*
|
|
420
|
+
// / intent_clues 等可变字段一致),re-extract 时 tags 调整不应产生重复
|
|
421
|
+
// pending file。
|
|
422
|
+
tags: z2.array(z2.string()).optional().describe(
|
|
423
|
+
"Optional topic tags (2-4 kebab-case strings recommended). Drives cross-entry retrieval + topic clustering. Skill-inferred from session content; omit when not confidently inferable. Empty array allowed but discouraged (degrades narrow hint topic signal)."
|
|
424
|
+
),
|
|
314
425
|
// v2.0.0-rc.23 TASK-014 (F8c): optional onboard-slot tag. The S5 slot
|
|
315
426
|
// mechanism reintroduces a Skill-orchestrated "project tone" capture
|
|
316
427
|
// surface after F8a deleted the auto-`fabric scan` baseline pipeline.
|
|
@@ -331,6 +442,20 @@ var _FabExtractKnowledgeInputBaseSchema = z2.object({
|
|
|
331
442
|
// duplicate entries.
|
|
332
443
|
onboard_slot: onboardSlotSchema.optional().describe(
|
|
333
444
|
"Optional slot tag from the S5 onboarding set (tech-stack-decision / architecture-pattern / code-style-tone / build-system-idiom / domain-vocabulary); lets fabric-archive's first-run phase claim a project-tone slot. Skill propose-time only; never required."
|
|
445
|
+
),
|
|
446
|
+
// v2.0.0-rc.37 NEW-7: read-only evidence paths lifted from the legacy
|
|
447
|
+
// body `## Evidence` markdown block into structured frontmatter. These are
|
|
448
|
+
// paths the agent CONSULTED while building this knowledge but never
|
|
449
|
+
// modified — they document context without participating in the
|
|
450
|
+
// activation gate (relevance_paths does that). Splitting evidence into a
|
|
451
|
+
// first-class frontmatter array lets future plan-context retrieval read
|
|
452
|
+
// it as data (intersect with current paths to surface high-recall hits)
|
|
453
|
+
// instead of re-parsing markdown. Optional; omit when no read-only
|
|
454
|
+
// signal was captured. Like relevance_paths it MUST NOT participate in
|
|
455
|
+
// the idempotency_key hash (an idempotent re-extract may surface a
|
|
456
|
+
// slightly different read set without spawning a duplicate pending).
|
|
457
|
+
evidence_paths: z2.array(z2.string()).optional().describe(
|
|
458
|
+
"Workspace-relative paths the agent CONSULTED (read but never modified) while building this knowledge. Documents context without affecting activation. Lifted from the legacy body ## Evidence markdown block into structured frontmatter so plan-context retrieval can read it as data."
|
|
334
459
|
)
|
|
335
460
|
});
|
|
336
461
|
var FabExtractKnowledgeInputSchema = _FabExtractKnowledgeInputBaseSchema.superRefine(
|
|
@@ -421,6 +546,24 @@ var FabReviewInputSchema = z2.discriminatedUnion("action", [
|
|
|
421
546
|
pending_path: z2.string().min(1),
|
|
422
547
|
changes: _fabReviewModifyChangesSchema
|
|
423
548
|
}),
|
|
549
|
+
// v2.0.0-rc.37 NEW-12: explicit modify split. `modify-content` edits scalar
|
|
550
|
+
// frontmatter/body fields (title/summary/maturity/tags/relevance_*) and MUST
|
|
551
|
+
// NOT carry a layer change. `modify-layer` is the dedicated layer-flip path
|
|
552
|
+
// (changes.layer REQUIRED) which may reallocate the stable_id + emit an
|
|
553
|
+
// id-redirect (rc.37 NEW-24). Legacy `modify` stays for back-compat and
|
|
554
|
+
// routes by whether changes.layer is present.
|
|
555
|
+
z2.object({
|
|
556
|
+
action: z2.literal("modify-content"),
|
|
557
|
+
pending_path: z2.string().min(1),
|
|
558
|
+
changes: _fabReviewModifyChangesSchema
|
|
559
|
+
}),
|
|
560
|
+
z2.object({
|
|
561
|
+
action: z2.literal("modify-layer"),
|
|
562
|
+
pending_path: z2.string().min(1),
|
|
563
|
+
changes: _fabReviewModifyChangesSchema.extend({
|
|
564
|
+
layer: z2.enum(["team", "personal"])
|
|
565
|
+
})
|
|
566
|
+
}),
|
|
424
567
|
z2.object({
|
|
425
568
|
action: z2.literal("search"),
|
|
426
569
|
query: z2.string().min(1),
|
|
@@ -434,8 +577,8 @@ var FabReviewInputSchema = z2.discriminatedUnion("action", [
|
|
|
434
577
|
})
|
|
435
578
|
]);
|
|
436
579
|
var FabReviewInputShape = {
|
|
437
|
-
action: z2.enum(["list", "approve", "reject", "modify", "search", "defer"]).describe(
|
|
438
|
-
"Action selector. Discriminates the per-action fields below; required."
|
|
580
|
+
action: z2.enum(["list", "approve", "reject", "modify", "modify-content", "modify-layer", "search", "defer"]).describe(
|
|
581
|
+
"Action selector. Discriminates the per-action fields below; required. modify-content edits scalars (no layer); modify-layer is the layer-flip path (changes.layer required); modify is the legacy combined alias."
|
|
439
582
|
),
|
|
440
583
|
filters: _fabReviewFiltersSchema.describe(
|
|
441
584
|
"Optional filters (type/layer/maturity/tags/created_after). Used by action=list and action=search."
|
|
@@ -616,7 +759,23 @@ var citeCoverageReportSchema = z2.object({
|
|
|
616
759
|
qualifying_cites: z2.number().int().nonnegative(),
|
|
617
760
|
recalled_unverified: z2.number().int().nonnegative(),
|
|
618
761
|
expected_but_missed: z2.number().int().nonnegative(),
|
|
619
|
-
total_turns: z2.number().int().nonnegative()
|
|
762
|
+
total_turns: z2.number().int().nonnegative(),
|
|
763
|
+
// v2.0.0-rc.38 UX-8 (C, user-authorized): cite-policy COMPLIANCE rate —
|
|
764
|
+
// the corrected G-CITE semantic. The legacy qualifying_cites/edits ratio
|
|
765
|
+
// measured "how often an applicable KB id existed" (a function of corpus
|
|
766
|
+
// density / soak), NOT "did the AI follow the cite policy". Compliance
|
|
767
|
+
// credits every valid cite line — `KB: <id> [applied|dismissed]` AND
|
|
768
|
+
// `KB: none [reason]` (the policy explicitly allows the none sentinel) —
|
|
769
|
+
// over the turns where a cite was expected. null when no cite-expected
|
|
770
|
+
// turns observed (avoids a misleading 0/0 → 0). Range [0,1].
|
|
771
|
+
cite_compliance_rate: z2.number().min(0).max(1).nullable().optional(),
|
|
772
|
+
compliant_cites: z2.number().int().nonnegative().optional(),
|
|
773
|
+
noncompliant_cites: z2.number().int().nonnegative().optional(),
|
|
774
|
+
// Edit signals lacking session_id → uncorrelatable, silently excluded from
|
|
775
|
+
// expected_but_missed. >0 typically means a stale pre-session_id hook is
|
|
776
|
+
// installed (run `fabric install`). Surfaced so the denominator gap is
|
|
777
|
+
// visible rather than a silent 100% confound.
|
|
778
|
+
uncorrelatable_edits: z2.number().int().nonnegative().optional()
|
|
620
779
|
}),
|
|
621
780
|
per_client: z2.record(
|
|
622
781
|
z2.string(),
|
|
@@ -756,6 +915,12 @@ export {
|
|
|
756
915
|
knowledgeSectionsInputSchema,
|
|
757
916
|
knowledgeSectionsOutputSchema,
|
|
758
917
|
knowledgeSectionsAnnotations,
|
|
918
|
+
recallInputSchema,
|
|
919
|
+
recallOutputSchema,
|
|
920
|
+
recallAnnotations,
|
|
921
|
+
archiveScanInputSchema,
|
|
922
|
+
archiveScanOutputSchema,
|
|
923
|
+
archiveScanAnnotations,
|
|
759
924
|
ProposedReasonSchema,
|
|
760
925
|
PROPOSED_REASON_DESCRIPTIONS,
|
|
761
926
|
FabExtractKnowledgeInputSchema,
|
package/dist/i18n/index.js
CHANGED
|
@@ -23,16 +23,7 @@ interface RuleDescription {
|
|
|
23
23
|
}
|
|
24
24
|
interface RuleDescriptionIndexItem {
|
|
25
25
|
stable_id: string;
|
|
26
|
-
level: AgentsLayer;
|
|
27
|
-
required: boolean;
|
|
28
|
-
selectable: boolean;
|
|
29
26
|
description: RuleDescription;
|
|
30
|
-
type?: "models" | "decisions" | "guidelines" | "pitfalls" | "processes";
|
|
31
|
-
maturity?: "draft" | "verified" | "proven";
|
|
32
|
-
layer?: "personal" | "team";
|
|
33
|
-
layer_reason?: string;
|
|
34
|
-
relevance_scope?: "narrow" | "broad";
|
|
35
|
-
relevance_paths?: string[];
|
|
36
27
|
}
|
|
37
28
|
interface AgentsMetaNodeActivation {
|
|
38
29
|
tier: AgentsActivationTier;
|
|
@@ -182,6 +173,7 @@ declare const fabricConfigSchema: z.ZodObject<{
|
|
|
182
173
|
fabric_event_retention_days: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<7>, z.ZodLiteral<30>, z.ZodLiteral<90>]>>;
|
|
183
174
|
onboard_slots_opted_out: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
|
|
184
175
|
hint_broad_top_k: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
176
|
+
hint_dismiss_signals: z.ZodOptional<z.ZodArray<z.ZodEnum<["archive", "review", "import", "maintenance"]>, "many">>;
|
|
185
177
|
hint_narrow_top_k: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
186
178
|
hint_narrow_dedup_window_turns: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
187
179
|
hint_broad_cooldown_hours: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
@@ -237,6 +229,7 @@ declare const fabricConfigSchema: z.ZodObject<{
|
|
|
237
229
|
hardBytes?: number | undefined;
|
|
238
230
|
} | undefined;
|
|
239
231
|
fabric_event_retention_days?: 7 | 30 | 90 | undefined;
|
|
232
|
+
hint_dismiss_signals?: ("archive" | "review" | "import" | "maintenance")[] | undefined;
|
|
240
233
|
orphan_demote_stable_days?: number | undefined;
|
|
241
234
|
orphan_demote_endorsed_days?: number | undefined;
|
|
242
235
|
orphan_demote_draft_days?: number | undefined;
|
|
@@ -280,6 +273,7 @@ declare const fabricConfigSchema: z.ZodObject<{
|
|
|
280
273
|
fabric_event_retention_days?: 7 | 30 | 90 | undefined;
|
|
281
274
|
onboard_slots_opted_out?: string[] | undefined;
|
|
282
275
|
hint_broad_top_k?: number | undefined;
|
|
276
|
+
hint_dismiss_signals?: ("archive" | "review" | "import" | "maintenance")[] | undefined;
|
|
283
277
|
hint_narrow_top_k?: number | undefined;
|
|
284
278
|
hint_narrow_dedup_window_turns?: number | undefined;
|
|
285
279
|
hint_broad_cooldown_hours?: number | undefined;
|