@fenglimg/fabric-shared 1.4.0 → 1.5.1

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.
@@ -18,6 +18,17 @@ var enMessages = {
18
18
  "cli.shared.template-not-found": "Template not found: {path}",
19
19
  "cli.shared.invalid-host-empty": "Invalid host: <empty>",
20
20
  "cli.shared.invalid-port": "Invalid port: {value}",
21
+ "cli.approve.description": "Approve drifted human-lock entries from the command line.",
22
+ "cli.approve.args.all.description": "Approve all drifted human-lock entries without prompting.",
23
+ "cli.approve.args.interactive.description": "Prompt before approving each drifted human-lock entry.",
24
+ "cli.approve.args.target.description": "Target project path, default is the current working directory.",
25
+ "cli.approve.no-drift": "No drift entries found.",
26
+ "cli.approve.prompt": "Approve this entry? [y/N] ",
27
+ "cli.approve.approved-one": "Approved {location}",
28
+ "cli.approve.skipped-one": "Skipped {location}",
29
+ "cli.approve.summary": "Approved {approved}/{total} drift entries. Skipped {skipped}.",
30
+ "cli.approve.table.expected": "Expected",
31
+ "cli.approve.table.current": "Current",
21
32
  "cli.bootstrap.description": "Install Fabric bootstrap prompts for supported AI clients.",
22
33
  "cli.bootstrap.install.description": "Copy Fabric bootstrap templates into native client locations.",
23
34
  "cli.bootstrap.install.args.clients.description": "Optional comma-separated client filter, for example claude,cursor,codex.",
@@ -114,7 +125,7 @@ var enMessages = {
114
125
  "cli.init.mode.badge.plan": "PLAN",
115
126
  "cli.init.mode.badge.reapply": "REAPPLY",
116
127
  "cli.init.mode.badge.plan-reapply": "PLAN + REAPPLY",
117
- "cli.init.compat.plan": "Using canonical --plan mode: no files will be written.",
128
+ "cli.init.compat.plan": "Using standard --plan mode: no files will be written.",
118
129
  "cli.init.compat.interactive": "Compatibility: --interactive=false disables the TTY wizard.",
119
130
  "cli.init.compat.legacy-stage-flags": "Compatibility: legacy --no-* flags are being mapped into the init plan.",
120
131
  "cli.init.wizard.title": "Fabric init wizard",
@@ -218,38 +229,90 @@ var enMessages = {
218
229
  "cli.sync-meta.drift-detected": "Fabric metadata drift detected. Run fab sync-meta to update.",
219
230
  "cli.sync-meta.updated": "{label} {path}",
220
231
  "dashboard.app.nav.aria-label": "Dashboard views",
232
+ "dashboard.app.nav.module-a.label": "Rule Topology",
233
+ "dashboard.app.nav.module-a.label-bilingual": "\u89C4\u5219\u547D\u4E2D Rule Topology",
234
+ "dashboard.app.nav.module-a.subtitle": "coverage + hit reasons",
235
+ "dashboard.app.nav.module-b.label": "Cognitive Forensic",
236
+ "dashboard.app.nav.module-b.label-bilingual": "\u8BA4\u77E5\u626B\u63CF Cognitive Forensic",
237
+ "dashboard.app.nav.module-b.subtitle": "placeholder",
238
+ "dashboard.app.nav.module-c.label": "Semantic Timeline",
239
+ "dashboard.app.nav.module-c.label-bilingual": "\u8BED\u4E49\u65F6\u95F4\u7EBF Semantic Timeline",
240
+ "dashboard.app.nav.module-c.subtitle": "placeholder",
241
+ "dashboard.app.nav.module-d.label": "Historical Ledger",
242
+ "dashboard.app.nav.module-d.label-bilingual": "\u5386\u53F2\u8BB0\u5F55 Historical Ledger",
243
+ "dashboard.app.nav.module-d.subtitle": "placeholder",
221
244
  "dashboard.app.nav.rules.label": "Rules Tree",
222
245
  "dashboard.app.nav.rules.label-bilingual": "\u89C4\u5219\u6811 Rules Tree",
223
- "dashboard.app.nav.rules.subtitle": "meta graph",
246
+ "dashboard.app.nav.rules.subtitle": "rule structure",
224
247
  "dashboard.app.nav.locks.label": "Human Lock",
225
- "dashboard.app.nav.locks.label-bilingual": "\u4EBA\u5DE5\u9501 Human Lock",
248
+ "dashboard.app.nav.locks.label-bilingual": "\u4EBA\u5DE5\u4FDD\u62A4 Human Lock",
226
249
  "dashboard.app.nav.locks.subtitle": "protected regions",
227
250
  "dashboard.app.nav.timeline.label": "Intent Timeline",
228
251
  "dashboard.app.nav.timeline.label-bilingual": "\u610F\u56FE\u65F6\u95F4\u7EBF Intent Timeline",
229
- "dashboard.app.nav.timeline.subtitle": "ledger stream",
252
+ "dashboard.app.nav.timeline.subtitle": "change log",
230
253
  "dashboard.app.nav.history.label": "History Replay",
231
254
  "dashboard.app.nav.history.label-bilingual": "\u5386\u53F2\u56DE\u653E History Replay",
232
255
  "dashboard.app.nav.history.subtitle": "time travel",
233
256
  "dashboard.app.nav.doctor.label": "Doctor",
234
257
  "dashboard.app.nav.doctor.label-bilingual": "\u8BCA\u65AD\u53F0 Doctor",
235
- "dashboard.app.nav.doctor.subtitle": "fab diagnostics",
258
+ "dashboard.app.nav.doctor.subtitle": "health checks",
259
+ "dashboard.app.nav.section.modules-status": "Module Status",
236
260
  "dashboard.app.nav.section.diagnostics": "Diagnostics",
237
261
  "dashboard.app.nav.drift-check": "Drift Check",
262
+ "dashboard.app.nav.modules.read-only": "read-only dashboard",
238
263
  "dashboard.app.header.connected": "CONNECTED",
239
264
  "dashboard.app.header.connecting": "CONNECTING",
240
265
  "dashboard.app.live-region.received": "Received {type}",
266
+ "dashboard.app.breadcrumb.topology": "rule-topology",
267
+ "dashboard.app.breadcrumb.forensic": "cognitive-forensic",
268
+ "dashboard.app.breadcrumb.semantic": "semantic-timeline",
269
+ "dashboard.app.breadcrumb.ledger": "historical-ledger",
241
270
  "dashboard.app.breadcrumb.rules": "rules-tree",
242
271
  "dashboard.app.breadcrumb.locks": "human-lock",
243
272
  "dashboard.app.breadcrumb.timeline": "intent-timeline",
244
273
  "dashboard.app.breadcrumb.history": "history-replay",
245
274
  "dashboard.app.breadcrumb.doctor": "doctor",
246
- "dashboard.rules-tree.title": "Rules Tree Browser",
247
- "dashboard.rules-tree.subtitle": ".fabric/agents.meta.json \xB7 L0/L1/L2 hierarchy \xB7 hash drift aware",
275
+ "dashboard.rule-topology.title": "Rule Topology",
276
+ "dashboard.rule-topology.subtitle": "See which rules match the current path and why",
277
+ "dashboard.rule-topology.path.placeholder": "Sample path for rules context",
278
+ "dashboard.rule-topology.path.aria-label": "Rules context sample path",
279
+ "dashboard.rule-topology.status.sample": "current path {path}",
280
+ "dashboard.rule-topology.status.hits": "{count} hits",
281
+ "dashboard.rule-topology.status.revision": "version {revision}",
282
+ "dashboard.rule-topology.heatmap.title": "Coverage Heatmap",
283
+ "dashboard.rule-topology.heatmap.subtitle": "Heuristic directory coverage derived from scope_glob patterns",
284
+ "dashboard.rule-topology.heatmap.aria-label": "Directory coverage heatmap",
285
+ "dashboard.rule-topology.heatmap.count": "{count} directories",
286
+ "dashboard.rule-topology.heatmap.rules": "{count} rules",
287
+ "dashboard.rule-topology.heatmap.uncovered": "no matching scope",
288
+ "dashboard.rule-topology.heatmap.empty": "No rule directories available.",
289
+ "dashboard.rule-topology.heatmap.density.full": "covered",
290
+ "dashboard.rule-topology.heatmap.density.partial": "partial",
291
+ "dashboard.rule-topology.heatmap.density.none": "uncovered",
292
+ "dashboard.rule-topology.hit-reason.title": "Hit Reasons",
293
+ "dashboard.rule-topology.hit-reason.subtitle": "Why each rule was loaded for the current sample path",
294
+ "dashboard.rule-topology.hit-reason.aria-label": "Rule hit reasons",
295
+ "dashboard.rule-topology.hit-reason.count": "{count} reasons",
296
+ "dashboard.rule-topology.hit-reason.empty": "No rules loaded for this sample path.",
297
+ "dashboard.rule-topology.hit-reason.global": "Global",
298
+ "dashboard.rule-topology.hit-reason.tier.always": "Always-on",
299
+ "dashboard.rule-topology.hit-reason.tier.path": "Glob",
300
+ "dashboard.rule-topology.hit-reason.tier.description": "Description",
301
+ "dashboard.module-placeholder.coming-soon": "Reserved",
302
+ "dashboard.module-placeholder.read-only": "Reserved for future read-only dashboard capabilities.",
303
+ "dashboard.module-placeholder.forensic.title": "Cognitive Forensic",
304
+ "dashboard.module-placeholder.forensic.subtitle": "Coming later",
305
+ "dashboard.module-placeholder.semantic.title": "Semantic Timeline",
306
+ "dashboard.module-placeholder.semantic.subtitle": "Coming later",
307
+ "dashboard.module-placeholder.ledger.title": "Historical Ledger",
308
+ "dashboard.module-placeholder.ledger.subtitle": "Coming later",
309
+ "dashboard.rules-tree.title": "Rules Tree",
310
+ "dashboard.rules-tree.subtitle": "Browse the rule structure, hierarchy, and sync state from .fabric/agents.meta.json",
248
311
  "dashboard.rules-tree.filter.placeholder": "Filter by file, glob, priority, hash...",
249
312
  "dashboard.rules-tree.filter.aria-label": "Filter rules tree",
250
313
  "dashboard.rules-tree.status.loading": "loading rules",
251
- "dashboard.rules-tree.status.nodes": "{count} nodes \xB7 rev {revision}",
252
- "dashboard.rules-tree.status.locks": "{count} human locks",
314
+ "dashboard.rules-tree.status.nodes": "{count} nodes \xB7 version {revision}",
315
+ "dashboard.rules-tree.status.locks": "{count} protected regions",
253
316
  "dashboard.rules-tree.empty": "No matching rules found.",
254
317
  "dashboard.rules-tree.tree.aria-label": "Fabric rules tree",
255
318
  "dashboard.rules-tree.detail.title": "Node Detail",
@@ -259,8 +322,8 @@ var enMessages = {
259
322
  "dashboard.rules-tree.detail.priority": "priority",
260
323
  "dashboard.rules-tree.detail.hash": "hash",
261
324
  "dashboard.rules-tree.detail.no-deps": "no deps",
262
- "dashboard.human-lock.title": "Human Lock Vault",
263
- "dashboard.human-lock.subtitle": "Protected regions awaiting approval \xB7 ritual writes only",
325
+ "dashboard.human-lock.title": "Human Protection",
326
+ "dashboard.human-lock.subtitle": "Review protected regions that require human confirmation",
264
327
  "dashboard.human-lock.filters.aria-label": "Human lock filters",
265
328
  "dashboard.human-lock.filters.all": "all",
266
329
  "dashboard.human-lock.filters.drift": "drift",
@@ -268,7 +331,7 @@ var enMessages = {
268
331
  "dashboard.human-lock.summary": "{drift} drift \xB7 {approved} confirmed",
269
332
  "dashboard.human-lock.empty": "No human lock entries for this filter.",
270
333
  "dashboard.intent-timeline.title": "Intent Timeline",
271
- "dashboard.intent-timeline.subtitle": ".intent-ledger.jsonl \xB7 dual-column AI | Human \xB7 sorted by timestamp desc",
334
+ "dashboard.intent-timeline.subtitle": "Review AI and human change records in reverse chronological order",
272
335
  "dashboard.intent-timeline.filter.label": "Source",
273
336
  "dashboard.intent-timeline.filter.all": "All",
274
337
  "dashboard.intent-timeline.summary": "AI {aiCount} \xB7 Human {humanCount}",
@@ -279,7 +342,7 @@ var enMessages = {
279
342
  "dashboard.intent-timeline.empty": "No ledger entries found.",
280
343
  "dashboard.intent-timeline.annotate.missing-id": "Cannot annotate a ledger entry without an id.",
281
344
  "dashboard.history-replay.title": "History Replay",
282
- "dashboard.history-replay.subtitle": "Time-travel through ledger commits and rehydrate the rules tree at any recorded point",
345
+ "dashboard.history-replay.subtitle": "Review the rules tree state at any recorded point in history",
283
346
  "dashboard.history-replay.toolbar.scrub": "Scrub",
284
347
  "dashboard.history-replay.toolbar.latest": "Latest",
285
348
  "dashboard.history-replay.selected.none": "No historical entry selected",
@@ -287,10 +350,10 @@ var enMessages = {
287
350
  "dashboard.history-replay.status.entries-applied": "{count} entries applied",
288
351
  "dashboard.history-replay.empty.entries": "No ledger entries found for replay.",
289
352
  "dashboard.history-replay.state.title": "Viewing state as of {label}",
290
- "dashboard.history-replay.state.meta": "ledger {ledgerId} \xB7 commit {commit} \xB7 {mode}",
353
+ "dashboard.history-replay.state.meta": "record {ledgerId} \xB7 commit {commit} \xB7 {mode}",
291
354
  "dashboard.history-replay.status.loading": "loading snapshot",
292
355
  "dashboard.history-replay.status.nodes": "{count} nodes",
293
- "dashboard.history-replay.status.unknown-revision": "unknown revision",
356
+ "dashboard.history-replay.status.unknown-revision": "unknown version",
294
357
  "dashboard.history-replay.tree.aria-label": "Historical Fabric rules tree",
295
358
  "dashboard.history-replay.empty.loading": "Loading historical snapshot...",
296
359
  "dashboard.history-replay.empty.select": "Select a timeline entry to replay its state.",
@@ -298,7 +361,7 @@ var enMessages = {
298
361
  "dashboard.history-replay.meta.pending": "pending",
299
362
  "dashboard.history-replay.meta.na": "n/a",
300
363
  "dashboard.doctor.title": "Doctor Console",
301
- "dashboard.doctor.subtitle": "fab doctor surface \xB7 framework, entry points, revision drift, protected paths",
364
+ "dashboard.doctor.subtitle": "Check framework, entry points, version drift, and protected paths",
302
365
  "dashboard.doctor.toolbar.overall": "Overall",
303
366
  "dashboard.doctor.toolbar.no-summary": "No summary yet",
304
367
  "dashboard.doctor.toolbar.entry-points-summary": "{framework} \xB7 {count} entry points",
@@ -307,7 +370,7 @@ var enMessages = {
307
370
  "dashboard.doctor.summary.framework": "Framework",
308
371
  "dashboard.doctor.summary.protected-paths": "Protected paths",
309
372
  "dashboard.doctor.summary.intent-ledger": "Intent ledger",
310
- "dashboard.doctor.summary.no-meta-revision": "No meta revision yet",
373
+ "dashboard.doctor.summary.no-meta-revision": "No metadata version yet",
311
374
  "dashboard.doctor.summary.tracked-paths.none": "No tracked paths",
312
375
  "dashboard.doctor.summary.tracked-paths.some": "{count} tracked",
313
376
  "dashboard.doctor.summary.hashes-intact": "All approved hashes intact",
@@ -386,6 +449,17 @@ var zhCNMessages = {
386
449
  "cli.shared.template-not-found": "\u672A\u627E\u5230\u6A21\u677F\uFF1A{path}",
387
450
  "cli.shared.invalid-host-empty": "\u65E0\u6548 host\uFF1A<empty>",
388
451
  "cli.shared.invalid-port": "\u65E0\u6548\u7AEF\u53E3\uFF1A{value}",
452
+ "cli.approve.description": "\u4ECE\u547D\u4EE4\u884C\u6279\u51C6\u5DF2\u6F02\u79FB\u7684 human-lock \u8BB0\u5F55\u3002",
453
+ "cli.approve.args.all.description": "\u4E0D\u63D0\u793A\uFF0C\u6279\u51C6\u6240\u6709\u5DF2\u6F02\u79FB\u7684 human-lock \u8BB0\u5F55\u3002",
454
+ "cli.approve.args.interactive.description": "\u9010\u6761\u63D0\u793A\u540E\u6279\u51C6\u5DF2\u6F02\u79FB\u7684 human-lock \u8BB0\u5F55\u3002",
455
+ "cli.approve.args.target.description": "\u76EE\u6807\u9879\u76EE\u8DEF\u5F84\uFF0C\u9ED8\u8BA4\u4E3A\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55\u3002",
456
+ "cli.approve.no-drift": "\u672A\u53D1\u73B0\u6F02\u79FB\u8BB0\u5F55\u3002",
457
+ "cli.approve.prompt": "\u6279\u51C6\u6B64\u8BB0\u5F55\uFF1F[y/N] ",
458
+ "cli.approve.approved-one": "\u5DF2\u6279\u51C6 {location}",
459
+ "cli.approve.skipped-one": "\u5DF2\u8DF3\u8FC7 {location}",
460
+ "cli.approve.summary": "\u5DF2\u6279\u51C6 {approved}/{total} \u6761\u6F02\u79FB\u8BB0\u5F55\u3002\u5DF2\u8DF3\u8FC7 {skipped} \u6761\u3002",
461
+ "cli.approve.table.expected": "\u9884\u671F",
462
+ "cli.approve.table.current": "\u5F53\u524D",
389
463
  "cli.bootstrap.description": "\u4E3A\u652F\u6301\u7684 AI \u5BA2\u6237\u7AEF\u5B89\u88C5 Fabric \u5F15\u5BFC\u63D0\u793A\u6A21\u677F\u3002",
390
464
  "cli.bootstrap.install.description": "\u5C06 Fabric \u5F15\u5BFC\u6A21\u677F\u590D\u5236\u5230\u5404\u5BA2\u6237\u7AEF\u7684\u539F\u751F\u4F4D\u7F6E\u3002",
391
465
  "cli.bootstrap.install.args.clients.description": "\u53EF\u9009\u7684\u9017\u53F7\u5206\u9694\u5BA2\u6237\u7AEF\u8FC7\u6EE4\u5668\uFF0C\u4F8B\u5982 claude,cursor,codex\u3002",
@@ -482,13 +556,13 @@ var zhCNMessages = {
482
556
  "cli.init.mode.badge.plan": "PLAN",
483
557
  "cli.init.mode.badge.reapply": "REAPPLY",
484
558
  "cli.init.mode.badge.plan-reapply": "PLAN + REAPPLY",
485
- "cli.init.compat.plan": "\u5DF2\u542F\u7528 canonical --plan \u6A21\u5F0F\uFF1A\u4E0D\u4F1A\u5199\u5165\u4EFB\u4F55\u6587\u4EF6\u3002",
559
+ "cli.init.compat.plan": "\u5DF2\u542F\u7528\u6807\u51C6 --plan \u6A21\u5F0F\uFF1A\u4E0D\u4F1A\u5199\u5165\u4EFB\u4F55\u6587\u4EF6\u3002",
486
560
  "cli.init.compat.interactive": "\u517C\u5BB9\u63D0\u793A\uFF1A--interactive=false \u4F1A\u7981\u7528 TTY \u5411\u5BFC\u3002",
487
561
  "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",
488
562
  "cli.init.wizard.title": "Fabric \u521D\u59CB\u5316\u5411\u5BFC",
489
563
  "cli.init.wizard.intro": "Fabric init",
490
564
  "cli.init.wizard.overview.title": "\u5B89\u88C5\u6982\u89C8",
491
- "cli.init.wizard.overview.body": "\u76EE\u6807\uFF1A{target}\n\u6A21\u5F0F\uFF1A{mode}\n\u8FD9\u4E2A\u5411\u5BFC\u53EA\u8D1F\u8D23\u91CD\u5851\u521D\u59CB\u5316\u8BA1\u5212\uFF1B\u771F\u6B63\u6267\u884C\u4ECD\u7136\u8D70\u73B0\u6709\u7684 Fabric init \u9636\u6BB5\u3002",
565
+ "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",
492
566
  "cli.init.wizard.step.target": "\u786E\u8BA4\u76EE\u6807",
493
567
  "cli.init.wizard.step.plan": "\u914D\u7F6E\u521D\u59CB\u5316\u8BA1\u5212",
494
568
  "cli.init.wizard.step.review": "\u590D\u6838\u6700\u7EC8\u8BA1\u5212",
@@ -563,11 +637,11 @@ var zhCNMessages = {
563
637
  "cli.scan.report.recommendations": "\u5EFA\u8BAE\uFF1A",
564
638
  "cli.scan.readme-quality.ok": "\u826F\u597D",
565
639
  "cli.scan.readme-quality.stub": "\u8349\u7A3F",
566
- "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\u9AA8\u67B6\u3002",
567
- "cli.scan.recommendation.readme": "L0\uFF1A\u5148\u8865\u5145 README.md\uFF0C\u518D\u628A\u9879\u76EE\u4E8B\u5B9E\u6C89\u6DC0\u5230 Fabric \u5F15\u7528\u4E2D\u3002",
568
- "cli.scan.recommendation.contributing": "L0\uFF1A\u6DFB\u52A0 CONTRIBUTING.md\uFF0C\u6216\u5728 bootstrap \u4E2D\u7559\u4E0B\u8D21\u732E\u6D41\u7A0B\u7684 TODO \u5F15\u7528\u3002",
569
- "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 TODO\u3002",
570
- "cli.scan.recommendation.framework-dirs": "L1\uFF1A\u68C0\u67E5 {framework} \u76EE\u5F55\uFF0C\u540E\u7EED\u4E3A\u5176\u8865\u5145\u4F5C\u7528\u57DF\u5316 Fabric \u89C4\u5219\u6587\u4EF6\u3002",
640
+ "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",
641
+ "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",
642
+ "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",
643
+ "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",
644
+ "cli.scan.recommendation.framework-dirs": "L1\uFF1A\u68C0\u67E5 {framework} \u76EE\u5F55\uFF0C\u540E\u7EED\u4E3A\u5176\u8865\u5145\u5BF9\u5E94\u4F5C\u7528\u57DF\u7684 Fabric \u89C4\u5219\u6587\u4EF6\u3002",
571
645
  "cli.serve.description": "\u542F\u52A8\u672C\u5730 Fabric MCP HTTP \u670D\u52A1\u3002\u82E5\u9700\u7ED1\u5B9A\u5230\u975E localhost\uFF0C\u8BF7\u8BBE\u7F6E FABRIC_AUTH_TOKEN \u4EE5\u542F\u7528 Bearer \u9274\u6743\u3002",
572
646
  "cli.serve.args.port.description": "\u76D1\u542C\u7AEF\u53E3\uFF0C\u9ED8\u8BA4 7373\u3002",
573
647
  "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",
@@ -586,38 +660,90 @@ var zhCNMessages = {
586
660
  "cli.sync-meta.drift-detected": "\u68C0\u6D4B\u5230 Fabric \u5143\u6570\u636E\u6F02\u79FB\u3002\u8BF7\u8FD0\u884C fab sync-meta \u8FDB\u884C\u66F4\u65B0\u3002",
587
661
  "cli.sync-meta.updated": "{label} {path}",
588
662
  "dashboard.app.nav.aria-label": "\u4EEA\u8868\u76D8\u89C6\u56FE\u5BFC\u822A",
663
+ "dashboard.app.nav.module-a.label": "\u89C4\u5219\u62D3\u6251",
664
+ "dashboard.app.nav.module-a.label-bilingual": "\u89C4\u5219\u547D\u4E2D Rule Topology",
665
+ "dashboard.app.nav.module-a.subtitle": "\u8986\u76D6\u70ED\u529B\u56FE + \u547D\u4E2D\u539F\u56E0",
666
+ "dashboard.app.nav.module-b.label": "\u8BA4\u77E5\u626B\u63CF",
667
+ "dashboard.app.nav.module-b.label-bilingual": "\u8BA4\u77E5\u626B\u63CF Cognitive Forensic",
668
+ "dashboard.app.nav.module-b.subtitle": "\u5360\u4F4D",
669
+ "dashboard.app.nav.module-c.label": "\u8BED\u4E49\u65F6\u95F4\u7EBF",
670
+ "dashboard.app.nav.module-c.label-bilingual": "\u8BED\u4E49\u65F6\u95F4\u7EBF Semantic Timeline",
671
+ "dashboard.app.nav.module-c.subtitle": "\u5360\u4F4D",
672
+ "dashboard.app.nav.module-d.label": "\u5386\u53F2\u8BB0\u5F55",
673
+ "dashboard.app.nav.module-d.label-bilingual": "\u5386\u53F2\u8BB0\u5F55 Historical Ledger",
674
+ "dashboard.app.nav.module-d.subtitle": "\u5360\u4F4D",
589
675
  "dashboard.app.nav.rules.label": "\u89C4\u5219\u6811",
590
676
  "dashboard.app.nav.rules.label-bilingual": "\u89C4\u5219\u6811 Rules Tree",
591
- "dashboard.app.nav.rules.subtitle": "\u5143\u56FE",
592
- "dashboard.app.nav.locks.label": "\u4EBA\u5DE5\u9501",
593
- "dashboard.app.nav.locks.label-bilingual": "\u4EBA\u5DE5\u9501 Human Lock",
677
+ "dashboard.app.nav.rules.subtitle": "\u89C4\u5219\u7ED3\u6784",
678
+ "dashboard.app.nav.locks.label": "\u4EBA\u5DE5\u4FDD\u62A4",
679
+ "dashboard.app.nav.locks.label-bilingual": "\u4EBA\u5DE5\u4FDD\u62A4 Human Lock",
594
680
  "dashboard.app.nav.locks.subtitle": "\u53D7\u4FDD\u62A4\u533A\u57DF",
595
681
  "dashboard.app.nav.timeline.label": "\u610F\u56FE\u65F6\u95F4\u7EBF",
596
682
  "dashboard.app.nav.timeline.label-bilingual": "\u610F\u56FE\u65F6\u95F4\u7EBF Intent Timeline",
597
- "dashboard.app.nav.timeline.subtitle": "\u65E5\u5FD7\u6D41",
683
+ "dashboard.app.nav.timeline.subtitle": "\u53D8\u66F4\u8BB0\u5F55",
598
684
  "dashboard.app.nav.history.label": "\u5386\u53F2\u56DE\u653E",
599
685
  "dashboard.app.nav.history.label-bilingual": "\u5386\u53F2\u56DE\u653E History Replay",
600
686
  "dashboard.app.nav.history.subtitle": "\u65F6\u95F4\u56DE\u6EAF",
601
687
  "dashboard.app.nav.doctor.label": "\u8BCA\u65AD\u53F0",
602
688
  "dashboard.app.nav.doctor.label-bilingual": "\u8BCA\u65AD\u53F0 Doctor",
603
- "dashboard.app.nav.doctor.subtitle": "fab \u8BCA\u65AD",
689
+ "dashboard.app.nav.doctor.subtitle": "\u72B6\u6001\u68C0\u67E5",
690
+ "dashboard.app.nav.section.modules-status": "\u6A21\u5757\u72B6\u6001",
604
691
  "dashboard.app.nav.section.diagnostics": "\u8BCA\u65AD",
605
692
  "dashboard.app.nav.drift-check": "\u6F02\u79FB\u68C0\u67E5",
693
+ "dashboard.app.nav.modules.read-only": "\u53EA\u8BFB\u4EEA\u8868\u76D8",
606
694
  "dashboard.app.header.connected": "\u5DF2\u8FDE\u63A5",
607
695
  "dashboard.app.header.connecting": "\u8FDE\u63A5\u4E2D",
608
696
  "dashboard.app.live-region.received": "\u5DF2\u6536\u5230 {type}",
697
+ "dashboard.app.breadcrumb.topology": "rule-topology",
698
+ "dashboard.app.breadcrumb.forensic": "cognitive-forensic",
699
+ "dashboard.app.breadcrumb.semantic": "semantic-timeline",
700
+ "dashboard.app.breadcrumb.ledger": "historical-ledger",
609
701
  "dashboard.app.breadcrumb.rules": "rules-tree",
610
702
  "dashboard.app.breadcrumb.locks": "human-lock",
611
703
  "dashboard.app.breadcrumb.timeline": "intent-timeline",
612
704
  "dashboard.app.breadcrumb.history": "history-replay",
613
705
  "dashboard.app.breadcrumb.doctor": "doctor",
614
- "dashboard.rules-tree.title": "\u89C4\u5219\u6811\u6D4F\u89C8\u5668",
615
- "dashboard.rules-tree.subtitle": ".fabric/agents.meta.json \xB7 L0/L1/L2 \u5C42\u7EA7 \xB7 \u611F\u77E5\u54C8\u5E0C\u6F02\u79FB",
616
- "dashboard.rules-tree.filter.placeholder": "\u6309\u6587\u4EF6\u3001glob\u3001\u4F18\u5148\u7EA7\u3001\u54C8\u5E0C\u8FC7\u6EE4...",
706
+ "dashboard.rule-topology.title": "\u89C4\u5219\u547D\u4E2D",
707
+ "dashboard.rule-topology.subtitle": "\u67E5\u770B\u5F53\u524D\u8DEF\u5F84\u4F1A\u547D\u4E2D\u54EA\u4E9B\u89C4\u5219\uFF0C\u4EE5\u53CA\u4E3A\u4EC0\u4E48\u4F1A\u547D\u4E2D",
708
+ "dashboard.rule-topology.path.placeholder": "\u7528\u4E8E\u89C4\u5219\u4E0A\u4E0B\u6587\u7684\u6837\u672C\u8DEF\u5F84",
709
+ "dashboard.rule-topology.path.aria-label": "\u89C4\u5219\u4E0A\u4E0B\u6587\u6837\u672C\u8DEF\u5F84",
710
+ "dashboard.rule-topology.status.sample": "\u5F53\u524D\u8DEF\u5F84 {path}",
711
+ "dashboard.rule-topology.status.hits": "{count} \u6761\u547D\u4E2D",
712
+ "dashboard.rule-topology.status.revision": "\u7248\u672C {revision}",
713
+ "dashboard.rule-topology.heatmap.title": "\u8986\u76D6\u70ED\u529B\u56FE",
714
+ "dashboard.rule-topology.heatmap.subtitle": "\u57FA\u4E8E scope_glob \u6A21\u5F0F\u63A8\u5BFC\u7684\u76EE\u5F55\u8986\u76D6\u60C5\u51B5",
715
+ "dashboard.rule-topology.heatmap.aria-label": "\u76EE\u5F55\u8986\u76D6\u70ED\u529B\u56FE",
716
+ "dashboard.rule-topology.heatmap.count": "{count} \u4E2A\u76EE\u5F55",
717
+ "dashboard.rule-topology.heatmap.rules": "{count} \u6761\u89C4\u5219",
718
+ "dashboard.rule-topology.heatmap.uncovered": "\u6CA1\u6709\u5339\u914D\u4F5C\u7528\u57DF",
719
+ "dashboard.rule-topology.heatmap.empty": "\u5F53\u524D\u6CA1\u6709\u53EF\u663E\u793A\u7684\u89C4\u5219\u76EE\u5F55\u3002",
720
+ "dashboard.rule-topology.heatmap.density.full": "\u5DF2\u8986\u76D6",
721
+ "dashboard.rule-topology.heatmap.density.partial": "\u90E8\u5206\u8986\u76D6",
722
+ "dashboard.rule-topology.heatmap.density.none": "\u672A\u8986\u76D6",
723
+ "dashboard.rule-topology.hit-reason.title": "\u547D\u4E2D\u539F\u56E0",
724
+ "dashboard.rule-topology.hit-reason.subtitle": "\u663E\u793A\u5F53\u524D\u6837\u672C\u8DEF\u5F84\u4E3A\u4F55\u547D\u4E2D\u8FD9\u4E9B\u89C4\u5219",
725
+ "dashboard.rule-topology.hit-reason.aria-label": "\u89C4\u5219\u547D\u4E2D\u539F\u56E0",
726
+ "dashboard.rule-topology.hit-reason.count": "{count} \u6761\u539F\u56E0",
727
+ "dashboard.rule-topology.hit-reason.empty": "\u5F53\u524D\u6837\u672C\u8DEF\u5F84\u6CA1\u6709\u52A0\u8F7D\u5230\u89C4\u5219\u3002",
728
+ "dashboard.rule-topology.hit-reason.global": "\u5168\u5C40",
729
+ "dashboard.rule-topology.hit-reason.tier.always": "\u5E38\u9A7B",
730
+ "dashboard.rule-topology.hit-reason.tier.path": "Glob",
731
+ "dashboard.rule-topology.hit-reason.tier.description": "\u63CF\u8FF0",
732
+ "dashboard.module-placeholder.coming-soon": "\u529F\u80FD\u9884\u7559",
733
+ "dashboard.module-placeholder.read-only": "\u4E3A\u540E\u7EED\u53EA\u8BFB\u4EEA\u8868\u76D8\u80FD\u529B\u9884\u7559\u3002",
734
+ "dashboard.module-placeholder.forensic.title": "\u8BA4\u77E5\u626B\u63CF",
735
+ "dashboard.module-placeholder.forensic.subtitle": "\u540E\u7EED\u8865\u5145",
736
+ "dashboard.module-placeholder.semantic.title": "\u8BED\u4E49\u65F6\u95F4\u7EBF",
737
+ "dashboard.module-placeholder.semantic.subtitle": "\u540E\u7EED\u8865\u5145",
738
+ "dashboard.module-placeholder.ledger.title": "\u5386\u53F2\u8BB0\u5F55",
739
+ "dashboard.module-placeholder.ledger.subtitle": "\u540E\u7EED\u8865\u5145",
740
+ "dashboard.rules-tree.title": "\u89C4\u5219\u6811",
741
+ "dashboard.rules-tree.subtitle": "\u67E5\u770B .fabric/agents.meta.json \u4E2D\u7684\u89C4\u5219\u7ED3\u6784\u3001\u5C42\u7EA7\u548C\u540C\u6B65\u72B6\u6001",
742
+ "dashboard.rules-tree.filter.placeholder": "\u6309\u6587\u4EF6\u3001\u4F5C\u7528\u57DF\u3001\u4F18\u5148\u7EA7\u3001\u54C8\u5E0C\u8FC7\u6EE4...",
617
743
  "dashboard.rules-tree.filter.aria-label": "\u8FC7\u6EE4\u89C4\u5219\u6811",
618
744
  "dashboard.rules-tree.status.loading": "\u89C4\u5219\u52A0\u8F7D\u4E2D",
619
- "dashboard.rules-tree.status.nodes": "{count} \u4E2A\u8282\u70B9 \xB7 rev {revision}",
620
- "dashboard.rules-tree.status.locks": "{count} \u4E2A\u4EBA\u5DE5\u9501",
745
+ "dashboard.rules-tree.status.nodes": "{count} \u4E2A\u8282\u70B9 \xB7 \u7248\u672C {revision}",
746
+ "dashboard.rules-tree.status.locks": "{count} \u4E2A\u53D7\u4FDD\u62A4\u533A\u57DF",
621
747
  "dashboard.rules-tree.empty": "\u6CA1\u6709\u5339\u914D\u7684\u89C4\u5219\u3002",
622
748
  "dashboard.rules-tree.tree.aria-label": "Fabric \u89C4\u5219\u6811",
623
749
  "dashboard.rules-tree.detail.title": "\u8282\u70B9\u8BE6\u60C5",
@@ -627,16 +753,16 @@ var zhCNMessages = {
627
753
  "dashboard.rules-tree.detail.priority": "\u4F18\u5148\u7EA7",
628
754
  "dashboard.rules-tree.detail.hash": "\u54C8\u5E0C",
629
755
  "dashboard.rules-tree.detail.no-deps": "\u65E0\u4F9D\u8D56",
630
- "dashboard.human-lock.title": "\u4EBA\u5DE5\u9501\u4ED3\u5E93",
631
- "dashboard.human-lock.subtitle": "\u7B49\u5F85\u6279\u51C6\u7684\u53D7\u4FDD\u62A4\u533A\u57DF \xB7 \u4EC5\u5141\u8BB8\u4EEA\u5F0F\u5316\u5199\u5165",
632
- "dashboard.human-lock.filters.aria-label": "\u4EBA\u5DE5\u9501\u8FC7\u6EE4\u5668",
756
+ "dashboard.human-lock.title": "\u4EBA\u5DE5\u4FDD\u62A4",
757
+ "dashboard.human-lock.subtitle": "\u67E5\u770B\u9700\u8981\u4EBA\u5DE5\u786E\u8BA4\u7684\u53D7\u4FDD\u62A4\u533A\u57DF",
758
+ "dashboard.human-lock.filters.aria-label": "\u4EBA\u5DE5\u4FDD\u62A4\u8FC7\u6EE4\u5668",
633
759
  "dashboard.human-lock.filters.all": "\u5168\u90E8",
634
760
  "dashboard.human-lock.filters.drift": "\u6F02\u79FB",
635
761
  "dashboard.human-lock.filters.approved": "\u5DF2\u6279\u51C6",
636
762
  "dashboard.human-lock.summary": "{drift} \u5904\u6F02\u79FB \xB7 {approved} \u9879\u5DF2\u786E\u8BA4",
637
- "dashboard.human-lock.empty": "\u5F53\u524D\u8FC7\u6EE4\u6761\u4EF6\u4E0B\u6CA1\u6709\u4EBA\u5DE5\u9501\u8BB0\u5F55\u3002",
763
+ "dashboard.human-lock.empty": "\u5F53\u524D\u8FC7\u6EE4\u6761\u4EF6\u4E0B\u6CA1\u6709\u53D7\u4FDD\u62A4\u8BB0\u5F55\u3002",
638
764
  "dashboard.intent-timeline.title": "\u610F\u56FE\u65F6\u95F4\u7EBF",
639
- "dashboard.intent-timeline.subtitle": ".intent-ledger.jsonl \xB7 AI | Human \u53CC\u5217 \xB7 \u6309\u65F6\u95F4\u5012\u5E8F",
765
+ "dashboard.intent-timeline.subtitle": "\u67E5\u770B AI \u4E0E\u4EBA\u5DE5\u7559\u4E0B\u7684\u53D8\u66F4\u8BB0\u5F55\uFF0C\u6309\u65F6\u95F4\u5012\u5E8F\u6392\u5217",
640
766
  "dashboard.intent-timeline.filter.label": "\u6765\u6E90",
641
767
  "dashboard.intent-timeline.filter.all": "\u5168\u90E8",
642
768
  "dashboard.intent-timeline.summary": "AI {aiCount} \xB7 Human {humanCount}",
@@ -647,7 +773,7 @@ var zhCNMessages = {
647
773
  "dashboard.intent-timeline.empty": "\u6CA1\u6709\u627E\u5230\u65E5\u5FD7\u8BB0\u5F55\u3002",
648
774
  "dashboard.intent-timeline.annotate.missing-id": "\u7F3A\u5C11 id\uFF0C\u65E0\u6CD5\u4E3A\u8FD9\u6761\u65E5\u5FD7\u6DFB\u52A0\u6CE8\u91CA\u3002",
649
775
  "dashboard.history-replay.title": "\u5386\u53F2\u56DE\u653E",
650
- "dashboard.history-replay.subtitle": "\u7A7F\u8D8A\u65E5\u5FD7\u63D0\u4EA4\uFF0C\u5728\u4EFB\u610F\u8BB0\u5F55\u70B9\u91CD\u65B0\u8FD8\u539F\u89C4\u5219\u6811\u72B6\u6001",
776
+ "dashboard.history-replay.subtitle": "\u6309\u5386\u53F2\u8BB0\u5F55\u56DE\u770B\u5F53\u65F6\u7684\u89C4\u5219\u6811\u72B6\u6001",
651
777
  "dashboard.history-replay.toolbar.scrub": "\u62D6\u52A8",
652
778
  "dashboard.history-replay.toolbar.latest": "\u6700\u65B0",
653
779
  "dashboard.history-replay.selected.none": "\u5C1A\u672A\u9009\u62E9\u5386\u53F2\u8BB0\u5F55",
@@ -655,10 +781,10 @@ var zhCNMessages = {
655
781
  "dashboard.history-replay.status.entries-applied": "\u5DF2\u5E94\u7528 {count} \u6761\u8BB0\u5F55",
656
782
  "dashboard.history-replay.empty.entries": "\u6CA1\u6709\u53EF\u7528\u4E8E\u56DE\u653E\u7684\u65E5\u5FD7\u8BB0\u5F55\u3002",
657
783
  "dashboard.history-replay.state.title": "\u67E5\u770B {label} \u65F6\u523B\u7684\u72B6\u6001",
658
- "dashboard.history-replay.state.meta": "ledger {ledgerId} \xB7 commit {commit} \xB7 {mode}",
784
+ "dashboard.history-replay.state.meta": "\u8BB0\u5F55 {ledgerId} \xB7 \u63D0\u4EA4 {commit} \xB7 {mode}",
659
785
  "dashboard.history-replay.status.loading": "\u5FEB\u7167\u52A0\u8F7D\u4E2D",
660
786
  "dashboard.history-replay.status.nodes": "{count} \u4E2A\u8282\u70B9",
661
- "dashboard.history-replay.status.unknown-revision": "\u672A\u77E5 revision",
787
+ "dashboard.history-replay.status.unknown-revision": "\u672A\u77E5\u7248\u672C",
662
788
  "dashboard.history-replay.tree.aria-label": "\u5386\u53F2 Fabric \u89C4\u5219\u6811",
663
789
  "dashboard.history-replay.empty.loading": "\u6B63\u5728\u52A0\u8F7D\u5386\u53F2\u5FEB\u7167...",
664
790
  "dashboard.history-replay.empty.select": "\u8BF7\u9009\u62E9\u4E00\u6761\u65F6\u95F4\u7EBF\u8BB0\u5F55\u4EE5\u56DE\u653E\u5176\u72B6\u6001\u3002",
@@ -666,7 +792,7 @@ var zhCNMessages = {
666
792
  "dashboard.history-replay.meta.pending": "\u7B49\u5F85\u4E2D",
667
793
  "dashboard.history-replay.meta.na": "\u65E0",
668
794
  "dashboard.doctor.title": "\u8BCA\u65AD\u63A7\u5236\u53F0",
669
- "dashboard.doctor.subtitle": "fab doctor \u9762\u677F \xB7 \u6846\u67B6\u3001\u5165\u53E3\u70B9\u3001revision \u6F02\u79FB\u3001\u53D7\u4FDD\u62A4\u8DEF\u5F84",
795
+ "dashboard.doctor.subtitle": "\u67E5\u770B\u6846\u67B6\u3001\u5165\u53E3\u70B9\u3001\u7248\u672C\u6F02\u79FB\u548C\u53D7\u4FDD\u62A4\u8DEF\u5F84\u7684\u72B6\u6001",
670
796
  "dashboard.doctor.toolbar.overall": "\u6574\u4F53\u72B6\u6001",
671
797
  "dashboard.doctor.toolbar.no-summary": "\u6682\u65E0\u6458\u8981",
672
798
  "dashboard.doctor.toolbar.entry-points-summary": "{framework} \xB7 {count} \u4E2A\u5165\u53E3\u70B9",
@@ -675,7 +801,7 @@ var zhCNMessages = {
675
801
  "dashboard.doctor.summary.framework": "\u6846\u67B6",
676
802
  "dashboard.doctor.summary.protected-paths": "\u53D7\u4FDD\u62A4\u8DEF\u5F84",
677
803
  "dashboard.doctor.summary.intent-ledger": "\u610F\u56FE\u65E5\u5FD7",
678
- "dashboard.doctor.summary.no-meta-revision": "\u6682\u65E0 meta revision",
804
+ "dashboard.doctor.summary.no-meta-revision": "\u6682\u65E0\u5143\u6570\u636E\u7248\u672C",
679
805
  "dashboard.doctor.summary.tracked-paths.none": "\u6CA1\u6709\u8DDF\u8E2A\u8DEF\u5F84",
680
806
  "dashboard.doctor.summary.tracked-paths.some": "\u5DF2\u8DDF\u8E2A {count} \u9879",
681
807
  "dashboard.doctor.summary.hashes-intact": "\u6240\u6709\u5DF2\u6279\u51C6\u54C8\u5E0C\u5747\u5B8C\u597D",
@@ -6,7 +6,7 @@ import {
6
6
  enMessages,
7
7
  normalizeLocale,
8
8
  zhCNMessages
9
- } from "../chunk-HE4L3Z7P.js";
9
+ } from "../chunk-XEVK2HU2.js";
10
10
  export {
11
11
  PROTECTED_TOKENS,
12
12
  createTranslator,
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { AgentsLayer, AgentsTopologyType, AgentsMetaNode, HumanLockEntry, AgentsMeta, LedgerEntry } from './types/index.js';
2
- export { AiLedgerEntry, AuditMode, ClientPaths, FabricConfig, HumanLedgerEntry } from './types/index.js';
2
+ export { AgentsActivationTier, AgentsMetaNodeActivation, AiLedgerEntry, AuditMode, ClientPaths, FabricConfig, HumanLedgerEntry } 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
 
@@ -16,6 +16,16 @@ declare const agentsMetaNodeSchema: z.ZodEffects<z.ZodObject<{
16
16
  layer: z.ZodEnum<["L0", "L1", "L2"]>;
17
17
  topology_type: z.ZodEnum<["mirror", "cross-cutting"]>;
18
18
  hash: z.ZodString;
19
+ activation: z.ZodOptional<z.ZodObject<{
20
+ tier: z.ZodEnum<["always", "path", "description"]>;
21
+ description: z.ZodOptional<z.ZodString>;
22
+ }, "strip", z.ZodTypeAny, {
23
+ tier: "always" | "path" | "description";
24
+ description?: string | undefined;
25
+ }, {
26
+ tier: "always" | "path" | "description";
27
+ description?: string | undefined;
28
+ }>>;
19
29
  }, "strip", z.ZodTypeAny, {
20
30
  file: string;
21
31
  priority: "high" | "medium" | "low";
@@ -24,6 +34,10 @@ declare const agentsMetaNodeSchema: z.ZodEffects<z.ZodObject<{
24
34
  topology_type: "mirror" | "cross-cutting";
25
35
  scope_glob: string;
26
36
  deps: string[];
37
+ activation?: {
38
+ tier: "always" | "path" | "description";
39
+ description?: string | undefined;
40
+ } | undefined;
27
41
  }, {
28
42
  file: string;
29
43
  priority: "high" | "medium" | "low";
@@ -32,6 +46,10 @@ declare const agentsMetaNodeSchema: z.ZodEffects<z.ZodObject<{
32
46
  topology_type: "mirror" | "cross-cutting";
33
47
  scope_glob: string;
34
48
  deps: string[];
49
+ activation?: {
50
+ tier: "always" | "path" | "description";
51
+ description?: string | undefined;
52
+ } | undefined;
35
53
  }>, {
36
54
  file: string;
37
55
  priority: "high" | "medium" | "low";
@@ -40,6 +58,10 @@ declare const agentsMetaNodeSchema: z.ZodEffects<z.ZodObject<{
40
58
  topology_type: "mirror" | "cross-cutting";
41
59
  scope_glob: string;
42
60
  deps: string[];
61
+ activation?: {
62
+ tier: "always" | "path" | "description";
63
+ description?: string | undefined;
64
+ } | undefined;
43
65
  }, unknown>;
44
66
  declare const agentsMetaSchema: z.ZodObject<{
45
67
  revision: z.ZodString;
@@ -51,6 +73,16 @@ declare const agentsMetaSchema: z.ZodObject<{
51
73
  layer: z.ZodEnum<["L0", "L1", "L2"]>;
52
74
  topology_type: z.ZodEnum<["mirror", "cross-cutting"]>;
53
75
  hash: z.ZodString;
76
+ activation: z.ZodOptional<z.ZodObject<{
77
+ tier: z.ZodEnum<["always", "path", "description"]>;
78
+ description: z.ZodOptional<z.ZodString>;
79
+ }, "strip", z.ZodTypeAny, {
80
+ tier: "always" | "path" | "description";
81
+ description?: string | undefined;
82
+ }, {
83
+ tier: "always" | "path" | "description";
84
+ description?: string | undefined;
85
+ }>>;
54
86
  }, "strip", z.ZodTypeAny, {
55
87
  file: string;
56
88
  priority: "high" | "medium" | "low";
@@ -59,6 +91,10 @@ declare const agentsMetaSchema: z.ZodObject<{
59
91
  topology_type: "mirror" | "cross-cutting";
60
92
  scope_glob: string;
61
93
  deps: string[];
94
+ activation?: {
95
+ tier: "always" | "path" | "description";
96
+ description?: string | undefined;
97
+ } | undefined;
62
98
  }, {
63
99
  file: string;
64
100
  priority: "high" | "medium" | "low";
@@ -67,6 +103,10 @@ declare const agentsMetaSchema: z.ZodObject<{
67
103
  topology_type: "mirror" | "cross-cutting";
68
104
  scope_glob: string;
69
105
  deps: string[];
106
+ activation?: {
107
+ tier: "always" | "path" | "description";
108
+ description?: string | undefined;
109
+ } | undefined;
70
110
  }>, {
71
111
  file: string;
72
112
  priority: "high" | "medium" | "low";
@@ -75,6 +115,10 @@ declare const agentsMetaSchema: z.ZodObject<{
75
115
  topology_type: "mirror" | "cross-cutting";
76
116
  scope_glob: string;
77
117
  deps: string[];
118
+ activation?: {
119
+ tier: "always" | "path" | "description";
120
+ description?: string | undefined;
121
+ } | undefined;
78
122
  }, unknown>>;
79
123
  }, "strip", z.ZodTypeAny, {
80
124
  revision: string;
@@ -86,6 +130,10 @@ declare const agentsMetaSchema: z.ZodObject<{
86
130
  topology_type: "mirror" | "cross-cutting";
87
131
  scope_glob: string;
88
132
  deps: string[];
133
+ activation?: {
134
+ tier: "always" | "path" | "description";
135
+ description?: string | undefined;
136
+ } | undefined;
89
137
  }>;
90
138
  }, {
91
139
  revision: string;
@@ -1366,6 +1414,16 @@ declare const metaUpdatedEventSchema: z.ZodObject<{
1366
1414
  layer: z.ZodEnum<["L0", "L1", "L2"]>;
1367
1415
  topology_type: z.ZodEnum<["mirror", "cross-cutting"]>;
1368
1416
  hash: z.ZodString;
1417
+ activation: z.ZodOptional<z.ZodObject<{
1418
+ tier: z.ZodEnum<["always", "path", "description"]>;
1419
+ description: z.ZodOptional<z.ZodString>;
1420
+ }, "strip", z.ZodTypeAny, {
1421
+ tier: "always" | "path" | "description";
1422
+ description?: string | undefined;
1423
+ }, {
1424
+ tier: "always" | "path" | "description";
1425
+ description?: string | undefined;
1426
+ }>>;
1369
1427
  }, "strip", z.ZodTypeAny, {
1370
1428
  file: string;
1371
1429
  priority: "high" | "medium" | "low";
@@ -1374,6 +1432,10 @@ declare const metaUpdatedEventSchema: z.ZodObject<{
1374
1432
  topology_type: "mirror" | "cross-cutting";
1375
1433
  scope_glob: string;
1376
1434
  deps: string[];
1435
+ activation?: {
1436
+ tier: "always" | "path" | "description";
1437
+ description?: string | undefined;
1438
+ } | undefined;
1377
1439
  }, {
1378
1440
  file: string;
1379
1441
  priority: "high" | "medium" | "low";
@@ -1382,6 +1444,10 @@ declare const metaUpdatedEventSchema: z.ZodObject<{
1382
1444
  topology_type: "mirror" | "cross-cutting";
1383
1445
  scope_glob: string;
1384
1446
  deps: string[];
1447
+ activation?: {
1448
+ tier: "always" | "path" | "description";
1449
+ description?: string | undefined;
1450
+ } | undefined;
1385
1451
  }>, {
1386
1452
  file: string;
1387
1453
  priority: "high" | "medium" | "low";
@@ -1390,6 +1456,10 @@ declare const metaUpdatedEventSchema: z.ZodObject<{
1390
1456
  topology_type: "mirror" | "cross-cutting";
1391
1457
  scope_glob: string;
1392
1458
  deps: string[];
1459
+ activation?: {
1460
+ tier: "always" | "path" | "description";
1461
+ description?: string | undefined;
1462
+ } | undefined;
1393
1463
  }, unknown>>;
1394
1464
  }, "strip", z.ZodTypeAny, {
1395
1465
  revision: string;
@@ -1401,6 +1471,10 @@ declare const metaUpdatedEventSchema: z.ZodObject<{
1401
1471
  topology_type: "mirror" | "cross-cutting";
1402
1472
  scope_glob: string;
1403
1473
  deps: string[];
1474
+ activation?: {
1475
+ tier: "always" | "path" | "description";
1476
+ description?: string | undefined;
1477
+ } | undefined;
1404
1478
  }>;
1405
1479
  }, {
1406
1480
  revision: string;
@@ -1418,6 +1492,10 @@ declare const metaUpdatedEventSchema: z.ZodObject<{
1418
1492
  topology_type: "mirror" | "cross-cutting";
1419
1493
  scope_glob: string;
1420
1494
  deps: string[];
1495
+ activation?: {
1496
+ tier: "always" | "path" | "description";
1497
+ description?: string | undefined;
1498
+ } | undefined;
1421
1499
  }>;
1422
1500
  };
1423
1501
  }, {
@@ -2156,6 +2234,16 @@ declare const fabricEventSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
2156
2234
  layer: z.ZodEnum<["L0", "L1", "L2"]>;
2157
2235
  topology_type: z.ZodEnum<["mirror", "cross-cutting"]>;
2158
2236
  hash: z.ZodString;
2237
+ activation: z.ZodOptional<z.ZodObject<{
2238
+ tier: z.ZodEnum<["always", "path", "description"]>;
2239
+ description: z.ZodOptional<z.ZodString>;
2240
+ }, "strip", z.ZodTypeAny, {
2241
+ tier: "always" | "path" | "description";
2242
+ description?: string | undefined;
2243
+ }, {
2244
+ tier: "always" | "path" | "description";
2245
+ description?: string | undefined;
2246
+ }>>;
2159
2247
  }, "strip", z.ZodTypeAny, {
2160
2248
  file: string;
2161
2249
  priority: "high" | "medium" | "low";
@@ -2164,6 +2252,10 @@ declare const fabricEventSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
2164
2252
  topology_type: "mirror" | "cross-cutting";
2165
2253
  scope_glob: string;
2166
2254
  deps: string[];
2255
+ activation?: {
2256
+ tier: "always" | "path" | "description";
2257
+ description?: string | undefined;
2258
+ } | undefined;
2167
2259
  }, {
2168
2260
  file: string;
2169
2261
  priority: "high" | "medium" | "low";
@@ -2172,6 +2264,10 @@ declare const fabricEventSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
2172
2264
  topology_type: "mirror" | "cross-cutting";
2173
2265
  scope_glob: string;
2174
2266
  deps: string[];
2267
+ activation?: {
2268
+ tier: "always" | "path" | "description";
2269
+ description?: string | undefined;
2270
+ } | undefined;
2175
2271
  }>, {
2176
2272
  file: string;
2177
2273
  priority: "high" | "medium" | "low";
@@ -2180,6 +2276,10 @@ declare const fabricEventSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
2180
2276
  topology_type: "mirror" | "cross-cutting";
2181
2277
  scope_glob: string;
2182
2278
  deps: string[];
2279
+ activation?: {
2280
+ tier: "always" | "path" | "description";
2281
+ description?: string | undefined;
2282
+ } | undefined;
2183
2283
  }, unknown>>;
2184
2284
  }, "strip", z.ZodTypeAny, {
2185
2285
  revision: string;
@@ -2191,6 +2291,10 @@ declare const fabricEventSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
2191
2291
  topology_type: "mirror" | "cross-cutting";
2192
2292
  scope_glob: string;
2193
2293
  deps: string[];
2294
+ activation?: {
2295
+ tier: "always" | "path" | "description";
2296
+ description?: string | undefined;
2297
+ } | undefined;
2194
2298
  }>;
2195
2299
  }, {
2196
2300
  revision: string;
@@ -2208,6 +2312,10 @@ declare const fabricEventSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
2208
2312
  topology_type: "mirror" | "cross-cutting";
2209
2313
  scope_glob: string;
2210
2314
  deps: string[];
2315
+ activation?: {
2316
+ tier: "always" | "path" | "description";
2317
+ description?: string | undefined;
2318
+ } | undefined;
2211
2319
  }>;
2212
2320
  };
2213
2321
  }, {
package/dist/index.js CHANGED
@@ -6,7 +6,7 @@ import {
6
6
  enMessages,
7
7
  normalizeLocale,
8
8
  zhCNMessages
9
- } from "./chunk-HE4L3Z7P.js";
9
+ } from "./chunk-XEVK2HU2.js";
10
10
  import "./chunk-LXNCAKJZ.js";
11
11
 
12
12
  // src/schemas/agents-meta.ts
@@ -23,7 +23,11 @@ var agentsMetaNodeBaseSchema = z.object({
23
23
  priority: z.enum(["high", "medium", "low"]),
24
24
  layer: agentsLayerSchema,
25
25
  topology_type: agentsTopologyTypeSchema,
26
- hash: z.string()
26
+ hash: z.string(),
27
+ activation: z.object({
28
+ tier: z.enum(["always", "path", "description"]),
29
+ description: z.string().optional()
30
+ }).optional()
27
31
  });
28
32
  var agentsMetaNodeSchema = z.preprocess((value) => {
29
33
  if (!isRecord(value) || typeof value.file !== "string") {
package/dist/node.d.ts CHANGED
@@ -3,7 +3,12 @@ type FrameworkInfo = {
3
3
  version: string;
4
4
  subkind: string;
5
5
  evidence: string[];
6
+ framework: string;
7
+ confidence: "HIGH" | "MEDIUM" | "LOW";
8
+ ast_evidence: string[];
9
+ co_packages: string[];
6
10
  };
11
+ type TechProfile = FrameworkInfo;
7
12
  declare function detectFramework(root: string): FrameworkInfo;
8
13
 
9
- export { type FrameworkInfo, detectFramework };
14
+ export { type FrameworkInfo, type TechProfile, detectFramework };
package/dist/node.js CHANGED
@@ -10,7 +10,11 @@ function detectFramework(root) {
10
10
  kind: "cocos-creator",
11
11
  version,
12
12
  subkind: inferCocosSubkind(root, version),
13
- evidence: version === "unknown" ? ["project.config.json"] : [`project.config.json: creator.version=${version}`]
13
+ evidence: version === "unknown" ? ["project.config.json"] : [`project.config.json: creator.version=${version}`],
14
+ framework: "cocos-creator",
15
+ confidence: "HIGH",
16
+ ast_evidence: [],
17
+ co_packages: collectProjectFileEvidence(root, ["package.json", "tsconfig.json"])
14
18
  };
15
19
  }
16
20
  const packageJsonPath = join(root, "package.json");
@@ -18,11 +22,16 @@ function detectFramework(root) {
18
22
  const packageJson = readPackageJson(packageJsonPath);
19
23
  const creatorVersion = packageJson.creator?.version;
20
24
  if (typeof creatorVersion === "string" && creatorVersion.trim().length > 0) {
25
+ const deps2 = collectDependencyVersions(packageJson);
21
26
  return {
22
27
  kind: "cocos-creator",
23
28
  version: creatorVersion,
24
29
  subkind: inferCocosSubkind(root, creatorVersion),
25
- evidence: [`package.json: creator.version=${creatorVersion}`]
30
+ evidence: [`package.json: creator.version=${creatorVersion}`],
31
+ framework: "cocos-creator",
32
+ confidence: "HIGH",
33
+ ast_evidence: [],
34
+ co_packages: collectCoPackages(deps2, "cocos-creator", root)
26
35
  };
27
36
  }
28
37
  const deps = collectDependencyVersions(packageJson);
@@ -39,7 +48,11 @@ function detectFramework(root) {
39
48
  kind,
40
49
  version,
41
50
  subkind: inferPackageSubkind(kind),
42
- evidence
51
+ evidence,
52
+ framework: kind,
53
+ confidence: determinePackageConfidence(kind, deps, root),
54
+ ast_evidence: [],
55
+ co_packages: collectCoPackages(deps, kind, root)
43
56
  };
44
57
  }
45
58
  }
@@ -50,7 +63,11 @@ function detectFramework(root) {
50
63
  kind: "rust",
51
64
  version: "unknown",
52
65
  subkind: "cargo-project",
53
- evidence: ["Cargo.toml"]
66
+ evidence: ["Cargo.toml"],
67
+ framework: "rust",
68
+ confidence: "HIGH",
69
+ ast_evidence: [],
70
+ co_packages: collectProjectFileEvidence(root, ["Cargo.lock"])
54
71
  };
55
72
  }
56
73
  if (existsSync(join(root, "pyproject.toml"))) {
@@ -58,14 +75,22 @@ function detectFramework(root) {
58
75
  kind: "python",
59
76
  version: "unknown",
60
77
  subkind: "pyproject",
61
- evidence: ["pyproject.toml"]
78
+ evidence: ["pyproject.toml"],
79
+ framework: "python",
80
+ confidence: "HIGH",
81
+ ast_evidence: [],
82
+ co_packages: collectProjectFileEvidence(root, ["uv.lock", "poetry.lock", "requirements.txt"])
62
83
  };
63
84
  }
64
85
  return {
65
86
  kind: "unknown",
66
87
  version: "unknown",
67
88
  subkind: "unknown",
68
- evidence
89
+ evidence,
90
+ framework: "unknown",
91
+ confidence: "LOW",
92
+ ast_evidence: [],
93
+ co_packages: []
69
94
  };
70
95
  }
71
96
  function readPackageJson(packageJsonPath) {
@@ -115,6 +140,36 @@ function inferPackageSubkind(kind) {
115
140
  return "unknown";
116
141
  }
117
142
  }
143
+ function determinePackageConfidence(kind, deps, root) {
144
+ const coPackages = collectCoPackages(deps, kind, root);
145
+ return coPackages.length > 0 ? "HIGH" : "MEDIUM";
146
+ }
147
+ function collectCoPackages(deps, kind, root) {
148
+ const expectedPackagesByFramework = {
149
+ next: ["react", "react-dom", "typescript"],
150
+ vite: ["@vitejs/plugin-react", "@vitejs/plugin-vue", "typescript", "react", "vue"],
151
+ react: ["react-dom", "@types/react", "@types/react-dom"],
152
+ vue: ["@vitejs/plugin-vue", "typescript"],
153
+ "cocos-creator": ["typescript"]
154
+ };
155
+ const expectedProjectFilesByFramework = {
156
+ next: ["next.config.js", "next.config.mjs", "next.config.ts", "tsconfig.json"],
157
+ vite: ["vite.config.js", "vite.config.mjs", "vite.config.ts", "tsconfig.json"],
158
+ react: ["tsconfig.json"],
159
+ vue: ["vue.config.js", "vite.config.ts", "tsconfig.json"],
160
+ "cocos-creator": ["project.config.json", "tsconfig.json"]
161
+ };
162
+ return [
163
+ ...compactStrings((expectedPackagesByFramework[kind] ?? []).map((packageName) => deps.has(packageName) ? packageName : null)),
164
+ ...collectProjectFileEvidence(root, expectedProjectFilesByFramework[kind] ?? [])
165
+ ];
166
+ }
167
+ function collectProjectFileEvidence(root, relativePaths) {
168
+ return relativePaths.filter((relativePath) => existsSync(join(root, relativePath)));
169
+ }
170
+ function compactStrings(values) {
171
+ return [...new Set(values.filter((value) => value !== null && value !== void 0 && value.length > 0))];
172
+ }
118
173
  export {
119
174
  detectFramework
120
175
  };
@@ -1,5 +1,10 @@
1
1
  type AgentsLayer = "L0" | "L1" | "L2";
2
2
  type AgentsTopologyType = "mirror" | "cross-cutting";
3
+ type AgentsActivationTier = "always" | "path" | "description";
4
+ interface AgentsMetaNodeActivation {
5
+ tier: AgentsActivationTier;
6
+ description?: string;
7
+ }
3
8
  interface AgentsMetaNode {
4
9
  file: string;
5
10
  scope_glob: string;
@@ -8,6 +13,7 @@ interface AgentsMetaNode {
8
13
  layer: AgentsLayer;
9
14
  topology_type: AgentsTopologyType;
10
15
  hash: string;
16
+ activation?: AgentsMetaNodeActivation;
11
17
  }
12
18
  interface AgentsMeta {
13
19
  revision: string;
@@ -59,4 +65,4 @@ interface FabricConfig {
59
65
  audit_mode?: AuditMode;
60
66
  }
61
67
 
62
- export type { AgentsLayer, AgentsMeta, AgentsMetaNode, AgentsTopologyType, AiLedgerEntry, AuditMode, ClientPaths, FabricConfig, HumanLedgerEntry, HumanLockEntry, LedgerEntry };
68
+ export type { AgentsActivationTier, AgentsLayer, AgentsMeta, AgentsMetaNode, AgentsMetaNodeActivation, AgentsTopologyType, AiLedgerEntry, AuditMode, ClientPaths, FabricConfig, HumanLedgerEntry, HumanLockEntry, LedgerEntry };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fenglimg/fabric-shared",
3
- "version": "1.4.0",
3
+ "version": "1.5.1",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",