scene-capability-engine 3.6.64 → 3.6.67

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.
Files changed (125) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +17 -6
  3. package/README.zh.md +18 -6
  4. package/bin/scene-capability-engine.js +4 -0
  5. package/docs/README.md +2 -2
  6. package/docs/command-reference.md +385 -8
  7. package/docs/document-governance.md +3 -2
  8. package/docs/integration-modes.md +62 -478
  9. package/docs/integration-philosophy.md +56 -263
  10. package/docs/magicball-cli-invocation-examples.md +1 -0
  11. package/docs/magicball-project-portfolio-contract.md +125 -4
  12. package/docs/project-management/README.md +14 -0
  13. package/docs/project-management/assurance/backup.md +3 -0
  14. package/docs/project-management/assurance/config.md +3 -0
  15. package/docs/project-management/assurance/evidence/README.md +3 -0
  16. package/docs/project-management/assurance/incidents/README.md +3 -0
  17. package/docs/project-management/assurance/logs.md +3 -0
  18. package/docs/project-management/assurance/overview.md +3 -0
  19. package/docs/project-management/assurance/recovery/README.md +3 -0
  20. package/docs/project-management/assurance/resource.md +3 -0
  21. package/docs/project-management/assurance/runbooks/README.md +3 -0
  22. package/docs/project-management/delivery/acceptance/README.md +3 -0
  23. package/docs/project-management/delivery/acceptance/evidence/README.md +3 -0
  24. package/docs/project-management/delivery/acceptance/exceptions/README.md +3 -0
  25. package/docs/project-management/delivery/acceptance/reports/README.md +3 -0
  26. package/docs/project-management/delivery/documents/changes.md +3 -0
  27. package/docs/project-management/delivery/documents/issues.md +3 -0
  28. package/docs/project-management/delivery/documents/overview.md +3 -0
  29. package/docs/project-management/delivery/documents/planning.md +3 -0
  30. package/docs/project-management/delivery/documents/requirements.md +3 -0
  31. package/docs/project-management/delivery/documents/tracking.md +3 -0
  32. package/docs/project-management/delivery/handoffs/README.md +3 -0
  33. package/docs/project-management/delivery/handoffs/evidence/README.md +3 -0
  34. package/docs/project-management/delivery/handoffs/records/README.md +3 -0
  35. package/docs/project-management/delivery/overview.md +10 -0
  36. package/docs/project-management/delivery/releases/README.md +3 -0
  37. package/docs/project-management/delivery/releases/baselines/README.md +3 -0
  38. package/docs/project-management/delivery/releases/evidence/README.md +3 -0
  39. package/docs/project-management/delivery/tables/changes.md +3 -0
  40. package/docs/project-management/delivery/tables/issues.md +3 -0
  41. package/docs/project-management/delivery/tables/planning.md +3 -0
  42. package/docs/project-management/delivery/tables/requirements.md +3 -0
  43. package/docs/project-management/delivery/tables/tracking.md +3 -0
  44. package/docs/project-management/environment/agent-discovery.md +3 -0
  45. package/docs/project-management/environment/development.md +3 -0
  46. package/docs/project-management/environment/overview.md +10 -0
  47. package/docs/project-management/environment/testing.md +3 -0
  48. package/docs/project-management/environment/version-alignment.md +3 -0
  49. package/docs/quick-start-with-ai-tools.md +68 -308
  50. package/docs/releases/README.md +3 -0
  51. package/docs/releases/v3.6.65.md +25 -0
  52. package/docs/releases/v3.6.66.md +23 -0
  53. package/docs/releases/v3.6.67.md +23 -0
  54. package/docs/steering-governance.md +64 -2
  55. package/docs/zh/README.md +2 -2
  56. package/docs/zh/releases/README.md +3 -0
  57. package/docs/zh/releases/v3.6.65.md +25 -0
  58. package/docs/zh/releases/v3.6.66.md +23 -0
  59. package/docs/zh/releases/v3.6.67.md +23 -0
  60. package/lib/commands/adopt.js +24 -0
  61. package/lib/commands/native.js +158 -0
  62. package/lib/commands/project.js +96 -0
  63. package/lib/commands/semantic.js +1459 -0
  64. package/lib/commands/session.js +74 -3
  65. package/lib/commands/spec-bootstrap.js +10 -1
  66. package/lib/commands/spec-gate.js +10 -1
  67. package/lib/commands/spec-pipeline.js +10 -1
  68. package/lib/commands/studio.js +405 -30
  69. package/lib/commands/task.js +141 -7
  70. package/lib/governance/supreme-principles.js +530 -0
  71. package/lib/problem/problem-evaluator.js +4 -0
  72. package/lib/project/candidate-inspection-service.js +24 -1
  73. package/lib/project/portfolio-projection-service.js +315 -5
  74. package/lib/project/project-channel-output.js +94 -0
  75. package/lib/project/project-channel-projection.js +181 -0
  76. package/lib/project/root-onboarding-service.js +107 -7
  77. package/lib/project/semantic-shared-source-projection.js +150 -0
  78. package/lib/project/supervision-action-model.js +277 -0
  79. package/lib/project/supervision-projection-service.js +305 -5
  80. package/lib/project/target-resolution-service.js +70 -5
  81. package/lib/project/visibility-policy.js +93 -0
  82. package/lib/runtime/multi-spec-scene-session.js +8 -1
  83. package/lib/runtime/project-channel-context-store.js +387 -0
  84. package/lib/runtime/project-channel-context.js +406 -0
  85. package/lib/runtime/scene-session-binding.js +46 -0
  86. package/lib/runtime/session-store.js +186 -0
  87. package/lib/runtime/steering-contract.js +7 -1
  88. package/lib/semantic/archive-report.js +283 -0
  89. package/lib/semantic/archive-routing.js +67 -0
  90. package/lib/semantic/backflow-report.js +245 -0
  91. package/lib/semantic/capability-contract.js +30 -0
  92. package/lib/semantic/delta-export.js +145 -0
  93. package/lib/semantic/interaction-observer.js +254 -0
  94. package/lib/semantic/kernel-loader.js +881 -0
  95. package/lib/semantic/native-runtime.js +359 -0
  96. package/lib/semantic/progress-ledger.js +433 -0
  97. package/lib/semantic/replay-evaluator.js +382 -0
  98. package/lib/semantic/shared-publication.js +592 -0
  99. package/lib/semantic/shared-source-config.js +183 -0
  100. package/lib/semantic/shared-source-connect.js +139 -0
  101. package/lib/semantic/shared-source-discovery.js +98 -0
  102. package/lib/semantic/shared-sync-export.js +413 -0
  103. package/lib/semantic/shared-sync-intake.js +592 -0
  104. package/lib/semantic/shared-sync-merge.js +547 -0
  105. package/lib/semantic/shared-sync-release.js +463 -0
  106. package/lib/semantic/supreme-intent-report.js +300 -0
  107. package/lib/state/sce-state-store.js +1360 -0
  108. package/lib/steering/context-sync-manager.js +276 -25
  109. package/lib/studio/spec-intake-governor.js +39 -3
  110. package/lib/studio/task-envelope.js +35 -2
  111. package/lib/workspace/takeover-baseline.js +342 -83
  112. package/package.json +7 -2
  113. package/scripts/agent-governance-baseline-audit.js +395 -0
  114. package/scripts/clarification-first-audit.js +9 -9
  115. package/scripts/deprecated-entry-audit.js +240 -0
  116. package/scripts/release-doc-version-audit.js +24 -0
  117. package/scripts/release-posture-report.js +262 -0
  118. package/template/.sce/README.md +62 -228
  119. package/template/.sce/config/semantic-shared-sources.json +5 -0
  120. package/template/.sce/config/supreme-principles-policy.json +105 -0
  121. package/template/.sce/config/takeover-baseline.json +7 -0
  122. package/template/.sce/steering/CORE_PRINCIPLES.md +23 -63
  123. package/template/.sce/steering/CURRENT_CONTEXT.md +4 -0
  124. package/template/.sce/steering/RULES_GUIDE.md +17 -9
  125. package/template/README.md +32 -96
@@ -0,0 +1,23 @@
1
+ # v3.6.67 Release Notes
2
+
3
+ Release date: 2026-03-29
4
+
5
+ ## Highlights
6
+
7
+ - Fixed the clean-room publish regression in `audit:agent-governance`: the gitignored local file `.sce/steering/CURRENT_CONTEXT.md` is now treated as optional when absent in CI or fresh release checkouts.
8
+ - Added unit coverage so the audit still enforces the multi-channel governance baseline through `template/.sce/steering/CURRENT_CONTEXT.md` without forcing personal local context files into Git-tracked release state.
9
+ - This patch is the follow-up release for the failed `v3.6.66` publish attempt; no product-facing runtime behavior changed outside the release gate path.
10
+
11
+ ## Validation
12
+
13
+ - `npx jest tests/unit/scripts/agent-governance-baseline-audit.test.js --runInBand`
14
+ - `npm run audit:agent-governance`
15
+ - `npm run audit:release-docs`
16
+ - `npm run gate:npm-runtime-assets`
17
+ - `npm run gate:release-posture`
18
+ - `npm pack --dry-run`
19
+
20
+ ## Release Notes
21
+
22
+ - Use `v3.6.67` if you need the `v3.6.66` stable-core release posture plus a clean-room-safe `agent-governance` audit during CI publish.
23
+ - This fix keeps the collaboration rule intact: `.sce/steering/CURRENT_CONTEXT.md` remains a local/personal context file and should not be force-committed just to satisfy release automation.
@@ -12,13 +12,68 @@
12
12
 
13
13
  | 位置 | 应放什么 | 不应放什么 |
14
14
  |------|---------|-----------|
15
- | `.sce/steering/CORE_PRINCIPLES.md` | 长期原则、跨 Spec 仍成立的默认行为 | 任务项、历史版本、阶段流水、短期战术 |
15
+ | `.sce/steering/CORE_PRINCIPLES.md` | 最高原则,只保留“小九条” | 执行细则、门禁清单、策略阈值、场景化约束 |
16
16
  | `.sce/steering/ENVIRONMENT.md` | 项目环境、目录约定、发布触发方式、长期运行约束 | Spec 进度、问题清单、临时 workaround |
17
17
  | `.sce/steering/CURRENT_CONTEXT.md` | 当前阶段最小必要上下文、近期优先级 | 长历史、完整日志、旧阶段总结 |
18
- | `.sce/steering/RULES_GUIDE.md` | 职责边界、迁移规则、审计入口 | 详细制度、示例、长篇解释 |
18
+ | `.sce/steering/RULES_GUIDE.md` | 治理基线、职责边界、迁移规则、审计入口 | 详细制度、案例原文、长篇解释 |
19
19
  | `.sce/specs/<spec>/` | 任务、证据、诊断、阶段记录、报告 | 不应再回写到 steering 的长历史 |
20
20
  | `docs/` | 详细制度、示例、方法论、治理说明 | 当前 session 的即时状态 |
21
21
 
22
+ 默认落点补充:
23
+
24
+ - 所有由 Agent 生成的脚本、报告、诊断、调试日志、测试脚本、临时分析和验证产物,默认进入当前 `.sce/specs/<spec>/` 的对应子目录。
25
+ - 临时文档也必须先进入当前 Spec 子目录,用完即删;不允许向根目录、`docs/` 或其他非 Spec 路径扩散。
26
+ - 没有明确 Spec 时,先使用通用 Spec 承接,再允许生成过程资产。
27
+ - 可复用执行经验、案例、阈值和方法论,优先进入 `docs/steering-governance.md` 或 `.sce/knowledge/lessons/`,不要继续回灌到最高原则层。
28
+
29
+ `CORE_PRINCIPLES.md` 现在应只保留最高原则层:
30
+
31
+ - 第一约束:最高原则只保留“四句教 + 小九条”,不再混入执行细则、门禁清单和阈值策略。
32
+ - 若某条内容更像“怎么做”“放哪里”“触发什么门禁”,它应进入 `RULES_GUIDE.md`、项目文档或经验库,而不是继续留在 `CORE_PRINCIPLES.md`。
33
+ - 只有那些能够直接提升道德判断、目标理解、调查质量、判断质量和闭环效率的原则,才有资格留在最高原则层。
34
+
35
+ 推荐保留的“四句教”表述如下:
36
+
37
+ - 世界观:无善无恶心之始。先回到事情本身,识别真实意图、对象、边界和上下文,不把用户表层措辞、情绪或旧标签直接当成结论。
38
+ - 人生观:有善有恶意之动。一旦形成可执行意图,就要判断它导向的是成事、利人、守正,还是伤害、逃责、取巧与失范。
39
+ - 价值观:知善知恶是良知。不是机械服从请求,而是主动承担辨别责任,判断目的、手段、后果和长期影响是否正当。
40
+ - 方法论:为善去恶是格物。落实到具体动作层,不只是拒绝坏事,还要把含混、偏斜或失范的请求收敛、改写成可正当执行的目标。
41
+ - 四句教用于判断用户让 SCE 做的事是否符合最高道德规范;只有通过这道门槛的事项,才允许调用“小九条”进入执行。
42
+
43
+ 推荐保留的“小九条”表述如下:
44
+
45
+ - 勤奋推进,不偷懒,不跳步。在无需用户额外干预时,按第一性原理先做计划并自主持续推进;始终沿关键路径连续推进分析、实现、验证、修复和交付,不靠省略环节伪装完成。
46
+ - 先准确领会真实意图,不拿旧判断、旧上下文或上一轮结论硬套现状;先校正目标,再展开动作。
47
+ - 主动调查研究,先看代码、数据、日志、配置和现场事实,再下结论;没有证据时先补证据。
48
+ - 保持项目活地图,知道当前结构、边界、依赖和风险点。持续知道关键约束和主要风险点;每次落刀前都要知道改动会影响哪里。
49
+ - 对问题想够想透,优先处理根因、连带影响和系统收敛路径,不做表面修补,也不把复杂问题压扁成局部补丁。
50
+ - 在证据足够时敢于下判断并推进下一步;结论可以修正,但不能在没有新证据时反复摇摆空转。
51
+ - 推进时必须统筹已有 Spec、`errorbook`(错题本)、测试、现状代码和用户关注点,保证目标、实现、验证和经验沉淀同向收敛。
52
+ - 遇到问题先主动拆解、定位和缩小范围;只有真正外部阻塞、权限缺口或目标冲突时才升级,不得轻易把阻塞甩回来。
53
+ - 保持连续作战能力,按断点记录和恢复,持续收敛直到形成可验证闭环;除非触发高风险、权限边界或目标冲突,否则不中途停在“等你指示”,任何中断都不能让上下文重新归零。
54
+
55
+ 两者配合关系应保持明确:
56
+
57
+ - 四句教先回答“这件事该不该做、是否正当”。
58
+ - 小九条再回答“这件事如何高质量地做成”。
59
+ - 目标不正当时,不得借“小九条”的执行力把错误的事做得更快。
60
+
61
+ 以下内容仍然重要,但默认属于“治理基线”而不是“最高原则”,应转入 `RULES_GUIDE.md`:
62
+
63
+ - Spec 承载与 Agent 产物归档位置
64
+ - 连续失败后切到 `errorbook` + 二分调试
65
+ - 业务场景未知先澄清、问题修改前先建问题契约
66
+ - 代码 / 测试 / 文档同步闭环
67
+ - steering 变更先评估、不得平行造轮子
68
+
69
+ `CURRENT_CONTEXT.md` 补充要求:
70
+
71
+ - 若项目当前实践已进入“单项目多协作通道默认成立”,`CURRENT_CONTEXT.md` 必须显式写明,不能继续默认“项目只有一个当前 session”。
72
+ - `channel/session` 是对人可见的协作单元;`agent`、backend profile、runtime session 只作为其挂载元数据,不得反向覆盖通道模型。
73
+ - 项目层最多只允许一个 `focusedChannelId` 作为当前 UI 焦点;它不能覆盖其他通道各自的现场状态。
74
+ - 需要写清每个 `project + channel/session` 独立维护 `scene/spec/doc/session/tabs/tree/draft/runState`,以及后续实现必须补“同项目双通道并行不串现场”验收。
75
+ - 所有 runtime / routing / projection 输出中的 `project_channel` 结构,必须同时保留 `active_scene` 与 `active_spec_id`;不得只投影 `spec/doc` 而丢失 scene 语义。
76
+
22
77
  ## 审查周期
23
78
 
24
79
  - 每周一次
@@ -86,6 +141,12 @@ steering 不是待办清单。
86
141
  - 仅对当前阶段成立?放 `CURRENT_CONTEXT.md`
87
142
  - 需要示例和长解释?放 `docs/`
88
143
 
144
+ ### 5. 重复失败必须切到 errorbook + 二分调试
145
+
146
+ - 连续两轮以上仍未成功定位或验证问题时,停止继续盲改。
147
+ - 先在 `errorbook` 中记录或更新当前 incident,再进入调试与证据模式。
148
+ - 调试必须按二分法切分调用链、模块、数据面或改动面,并补 debug 日志/埋点,让每一轮都显著缩小范围。
149
+
89
150
  ## 审计入口
90
151
 
91
152
  本项目提供自动审计:
@@ -102,6 +163,7 @@ npm run audit:steering
102
163
  - steering 中是否混入 checklist / 任务态
103
164
  - `CURRENT_CONTEXT.md` 是否与当前包版本脱节
104
165
  - 是否出现“错题 / 错题本”这类非规范机制别名
166
+ - 关键 baseline 是否仍保留 “Agent 产物默认归档到 Spec” 与 “重复失败转 errorbook + 二分调试” 约束
105
167
 
106
168
  ## 通过标准
107
169
 
package/docs/zh/README.md CHANGED
@@ -72,7 +72,7 @@
72
72
 
73
73
  ---
74
74
 
75
- **版本**:3.6.34
76
- **最后更新**:2026-03-08
75
+ **版本**:3.6.67
76
+ **最后更新**:2026-03-29
77
77
 
78
78
 
@@ -9,6 +9,9 @@
9
9
  ## 历史版本归档
10
10
 
11
11
  - [发布检查清单](../release-checklist.md)
12
+ - [v3.6.67 发布说明](./v3.6.67.md)
13
+ - [v3.6.66 发布说明](./v3.6.66.md)
14
+ - [v3.6.65 发布说明](./v3.6.65.md)
12
15
  - [v3.6.64 发布说明](./v3.6.64.md)
13
16
  - [v3.6.63 发布说明](./v3.6.63.md)
14
17
  - [v3.6.62 发布说明](./v3.6.62.md)
@@ -0,0 +1,25 @@
1
+ # v3.6.65 发布说明
2
+
3
+ 发布日期:2026-03-22
4
+
5
+ ## 重点变化
6
+
7
+ - 正式收敛 onboarding 到 portfolio 的发布语义:`sce project onboarding import --root <path> --json` 现在会返回显式 `publish` step 和 `publication` 字段,IDE 不必再维护一套“导入成功但是否已入项目列表” 的影子状态。
8
+ - 用单测和集成测试把这条契约锁住,确保 onboarding 返回的身份与后续 `sce project portfolio show --json` 里的 canonical 身份一致。
9
+ - 将下一阶段 external agent runtime 规划正式纳入主库:`137-00` 到 `140-03` 这组 spec 保持 vendor-neutral,并按 rollout 子合同拆分,而不是盲目堆成一个超大实现 spec。
10
+ - 补强发布元数据治理:`audit:release-docs` 现在会额外检查 `docs/command-reference.md`、`docs/README.md`、`docs/zh/README.md`,减少活跃文档版本脚注长期漂移。
11
+
12
+ ## 验证
13
+
14
+ - `npx jest tests/unit/commands/project.test.js --runInBand`
15
+ - `npx jest tests/integration/project-cli.integration.test.js --runInBand`
16
+ - `node scripts/magicball-project-contract-audit.js --json`
17
+ - `npm run report:clarification-first-audit`
18
+ - `npm run audit:release-docs`
19
+ - `npm run prepublishOnly`
20
+ - `npm pack --dry-run`
21
+
22
+ ## 发布说明
23
+
24
+ - 如果你需要 IDE 项目导入后的 canonical 发布语义,以及已经入主库的 vendor-neutral external runtime rollout specs,请使用 `v3.6.65`。
25
+ - 这个补丁同时增强了发布流程本身:关键文档一旦版本号或日期脚注落后于 `package.json` 和 `CHANGELOG`,release doc audit 就会直接报错,而不是继续静默漂移。
@@ -0,0 +1,23 @@
1
+ # v3.6.66 发布说明
2
+
3
+ 发布日期:2026-03-28
4
+
5
+ ## 重点变化
6
+
7
+ - 将正式发布路径重建为 stable-core 门禁,不再把 Moqui、matrix、weekly-ops 等扩展 evidence 和正式发版门禁混在同一个超大 workflow 里。
8
+ - 增加 deprecated-entry 治理,防止顶层集成文档和模板入口悄悄回退到旧的“嵌入式/手工导出优先”模型。
9
+ - 在 stable-core、deprecated-entry audit、errorbook gates、release posture 自检接线完成后,仓库发布姿态正式提升为 `stable`。
10
+
11
+ ## 验证
12
+
13
+ - `npm run gate:release-posture`
14
+ - `npm run audit:deprecated-entry`
15
+ - `npm run audit:release-docs`
16
+ - `node scripts/agent-governance-baseline-audit.js --fail-on-violation --json`
17
+ - `npx jest tests/unit/scripts/deprecated-entry-audit.test.js tests/unit/scripts/release-posture-report.test.js --runInBand`
18
+ - `npx jest tests/integration/project-cli.integration.test.js tests/integration/adopt-upgrade-clarification-first.integration.test.js --runInBand`
19
+
20
+ ## 发布说明
21
+
22
+ - 如果你需要一个“stable 发布只看正式主门禁、扩展 evidence 另行生成”的清晰发版路径,请使用 `v3.6.66`。
23
+ - 这个版本同时把顶层入口文档和模板入口文档统一到了当前 `project -> channel/session -> scene/spec` 主线,`context export` 等兼容路径仍保留,但不再作为首选指导。
@@ -0,0 +1,23 @@
1
+ # v3.6.67 发布说明
2
+
3
+ 发布日期:2026-03-29
4
+
5
+ ## 重点变化
6
+
7
+ - 修复 `audit:agent-governance` 的 clean-room 发布回归:当 CI 或全新 release checkout 中缺少被 `.gitignore` 排除的本地文件 `.sce/steering/CURRENT_CONTEXT.md` 时,不再直接阻断发版。
8
+ - 增加单测覆盖,继续通过 `template/.sce/steering/CURRENT_CONTEXT.md` 约束多通道治理基线,同时不再要求把个人态上下文文件强行纳入 Git 跟踪发布面。
9
+ - 这是对 `v3.6.66` 发版失败后的跟进补丁;除发布门禁链路外,没有额外变更产品运行时行为。
10
+
11
+ ## 验证
12
+
13
+ - `npx jest tests/unit/scripts/agent-governance-baseline-audit.test.js --runInBand`
14
+ - `npm run audit:agent-governance`
15
+ - `npm run audit:release-docs`
16
+ - `npm run gate:npm-runtime-assets`
17
+ - `npm run gate:release-posture`
18
+ - `npm pack --dry-run`
19
+
20
+ ## 发布说明
21
+
22
+ - 如果你需要 `v3.6.66` 的 stable-core 发布姿态,同时避免 CI 发版时被 clean-room `agent-governance` 审计误阻断,请使用 `v3.6.67`。
23
+ - 这个修复保持协作规则不变:`.sce/steering/CURRENT_CONTEXT.md` 仍然属于本地个人态文件,不应为了通过发布自动化而被强制提交。
@@ -153,6 +153,18 @@ async function adoptSmart(projectPath, options) {
153
153
  }
154
154
  console.log();
155
155
  }
156
+
157
+ const discoveredSources = takeoverReport.semantic_shared_source_discovery;
158
+ if (discoveredSources && discoveredSources.approved_descriptors > 0) {
159
+ console.log(chalk.blue('🔗 Approved semantic shared source descriptors detected'));
160
+ discoveredSources.items
161
+ .filter((item) => item.approved)
162
+ .forEach((item) => {
163
+ console.log(chalk.gray(` ${item.descriptor_file}`));
164
+ console.log(chalk.cyan(` ${item.suggested_connect_command}`));
165
+ });
166
+ console.log();
167
+ }
156
168
 
157
169
  // Summary is already displayed by orchestrator
158
170
 
@@ -539,6 +551,18 @@ async function adoptInteractive(projectPath, options) {
539
551
  }
540
552
  console.log();
541
553
  }
554
+
555
+ const discoveredSources = takeoverReport.semantic_shared_source_discovery;
556
+ if (discoveredSources && discoveredSources.approved_descriptors > 0) {
557
+ console.log(chalk.blue('🔗 Approved semantic shared source descriptors detected'));
558
+ discoveredSources.items
559
+ .filter((item) => item.approved)
560
+ .forEach((item) => {
561
+ console.log(chalk.gray(` ${item.descriptor_file}`));
562
+ console.log(chalk.cyan(` ${item.suggested_connect_command}`));
563
+ });
564
+ console.log();
565
+ }
542
566
 
543
567
  // Show conflict resolution summary if conflicts were handled
544
568
  if (detection.conflicts.length > 0) {
@@ -0,0 +1,158 @@
1
+ const chalk = require('chalk');
2
+ const {
3
+ startNativeConsoleSession,
4
+ runNativeSemanticTurn
5
+ } = require('../semantic/native-runtime');
6
+
7
+ function printNativePayload(payload, options = {}) {
8
+ if (options.json) {
9
+ console.log(JSON.stringify(payload, null, 2));
10
+ return;
11
+ }
12
+
13
+ if (payload.mode === 'native-start') {
14
+ console.log(chalk.blue(`Native session: ${payload.session.session_id}`));
15
+ console.log(` Created: ${payload.created}`);
16
+ console.log(` Tool: ${payload.session.tool}`);
17
+ console.log(` Promoted behaviors: ${payload.promoted_behaviors.length}`);
18
+ if (payload.project_channel) {
19
+ console.log(` Channel: ${payload.project_channel.project_id} / ${payload.project_channel.channel_id}`);
20
+ }
21
+ return;
22
+ }
23
+
24
+ if (payload.mode === 'native-ask') {
25
+ console.log(chalk.blue(`Native reply (${payload.session.session_id})`));
26
+ console.log(payload.reply.text);
27
+ if (payload.activations.length > 0) {
28
+ console.log(`Activated: ${payload.activations.map((item) => item.lesson_id).join(', ')}`);
29
+ }
30
+ }
31
+ }
32
+
33
+ async function runNativeStartCommand(options = {}, dependencies = {}) {
34
+ const result = await startNativeConsoleSession({
35
+ objective: options.objective,
36
+ id: options.id,
37
+ agent_version: options.agentVersion,
38
+ project_id: options.projectId,
39
+ channel_id: options.channelId || options.channel,
40
+ scene_id: options.scene,
41
+ spec_id: options.spec,
42
+ doc_id: options.doc,
43
+ auth_lease: options.authLease,
44
+ limit: options.limit
45
+ }, {
46
+ ...dependencies,
47
+ projectPath: dependencies.projectPath || process.cwd()
48
+ });
49
+
50
+ const payload = {
51
+ mode: 'native-start',
52
+ success: true,
53
+ session: result.session,
54
+ created: result.created,
55
+ project_channel: result.project_channel,
56
+ lease: result.lease,
57
+ promoted_behaviors: Array.isArray(result.promoted_behaviors) ? result.promoted_behaviors : []
58
+ };
59
+ printNativePayload(payload, options);
60
+ return payload;
61
+ }
62
+
63
+ async function runNativeAskCommand(options = {}, dependencies = {}) {
64
+ const result = await runNativeSemanticTurn({
65
+ prompt: options.prompt,
66
+ message: options.message,
67
+ objective: options.objective,
68
+ id: options.id,
69
+ session_id: options.sessionId,
70
+ project_id: options.projectId,
71
+ channel_id: options.channelId || options.channel,
72
+ scene_id: options.scene,
73
+ spec_id: options.spec,
74
+ doc_id: options.doc,
75
+ auth_lease: options.authLease,
76
+ limit: options.limit
77
+ }, {
78
+ ...dependencies,
79
+ projectPath: dependencies.projectPath || process.cwd()
80
+ });
81
+
82
+ const payload = {
83
+ mode: 'native-ask',
84
+ success: true,
85
+ session: result.session,
86
+ project_channel: result.project_channel,
87
+ lease: result.lease,
88
+ reply: result.reply,
89
+ activations: Array.isArray(result.activations) ? result.activations : [],
90
+ supreme_principles: result.supreme_principles || null,
91
+ supreme_intent_record: result.supreme_intent_record || null
92
+ };
93
+ printNativePayload(payload, options);
94
+ return payload;
95
+ }
96
+
97
+ function registerNativeCommands(program) {
98
+ const native = program
99
+ .command('native')
100
+ .description('Use SCE as a native semantic runtime instead of an embedded host');
101
+
102
+ native
103
+ .command('start')
104
+ .description('Start or resume an SCE-native semantic session')
105
+ .option('--objective <objective>', 'Session objective')
106
+ .option('--id <id>', 'Custom session id')
107
+ .option('--agent-version <version>', 'Native runtime version label')
108
+ .option('--project-id <project-id>', 'Project identifier')
109
+ .option('--channel-id <channel-id>', 'Collaboration channel identifier')
110
+ .option('--channel <channel-id>', 'Alias of --channel-id')
111
+ .option('--scene <scene-id>', 'Scene identifier')
112
+ .option('--spec <spec-id>', 'Spec identifier')
113
+ .option('--doc <doc-id>', 'Doc identifier')
114
+ .option('--auth-lease <lease-id>', 'Optional auth lease id')
115
+ .option('--limit <n>', 'Limit promoted behavior preload count', parseInt)
116
+ .option('--json', 'Print machine-readable JSON output')
117
+ .action(async (options) => {
118
+ try {
119
+ await runNativeStartCommand(options);
120
+ } catch (error) {
121
+ console.error(chalk.red(`Native start failed: ${error.message}`));
122
+ process.exitCode = 1;
123
+ }
124
+ });
125
+
126
+ native
127
+ .command('ask <prompt>')
128
+ .description('Run one native semantic turn using promoted SCE behaviors')
129
+ .option('--objective <objective>', 'Session objective if a new session is created')
130
+ .option('--id <id>', 'Custom new session id')
131
+ .option('--session-id <session-id>', 'Reuse a specific existing native session')
132
+ .option('--project-id <project-id>', 'Project identifier')
133
+ .option('--channel-id <channel-id>', 'Collaboration channel identifier')
134
+ .option('--channel <channel-id>', 'Alias of --channel-id')
135
+ .option('--scene <scene-id>', 'Scene identifier')
136
+ .option('--spec <spec-id>', 'Spec identifier')
137
+ .option('--doc <doc-id>', 'Doc identifier')
138
+ .option('--auth-lease <lease-id>', 'Optional auth lease id')
139
+ .option('--limit <n>', 'Limit promoted behavior activation count', parseInt)
140
+ .option('--json', 'Print machine-readable JSON output')
141
+ .action(async (prompt, options) => {
142
+ try {
143
+ await runNativeAskCommand({
144
+ ...options,
145
+ prompt
146
+ });
147
+ } catch (error) {
148
+ console.error(chalk.red(`Native ask failed: ${error.message}`));
149
+ process.exitCode = 1;
150
+ }
151
+ });
152
+ }
153
+
154
+ module.exports = {
155
+ runNativeStartCommand,
156
+ runNativeAskCommand,
157
+ registerNativeCommands
158
+ };
@@ -5,6 +5,18 @@ const { runProjectRootOnboardingImport } = require('../project/root-onboarding-s
5
5
  const { buildProjectSupervisionProjection } = require('../project/supervision-projection-service');
6
6
  const { resolveProjectTarget } = require('../project/target-resolution-service');
7
7
 
8
+ const SEVERITY_ORDER = {
9
+ none: 0,
10
+ low: 1,
11
+ medium: 2,
12
+ high: 3,
13
+ critical: 4
14
+ };
15
+
16
+ function compareSeverity(left, right) {
17
+ return (SEVERITY_ORDER[right] || 0) - (SEVERITY_ORDER[left] || 0);
18
+ }
19
+
8
20
  async function runProjectPortfolioShowCommand(options = {}, dependencies = {}) {
9
21
  const payload = await buildProjectPortfolioProjection(options, dependencies);
10
22
  if (options.json) {
@@ -13,6 +25,36 @@ async function runProjectPortfolioShowCommand(options = {}, dependencies = {}) {
13
25
  console.log(chalk.blue('Project Portfolio'));
14
26
  console.log(` Active Project: ${payload.activeProjectId || 'none'}`);
15
27
  console.log(` Visible Projects: ${payload.projects.length}`);
28
+ const pendingConnectProjects = payload.projects.filter((item) => (
29
+ item.semanticSharedSources
30
+ && item.semanticSharedSources.pendingApprovedDescriptors > 0
31
+ )).length;
32
+ console.log(` Projects With Pending Shared Source Connect: ${pendingConnectProjects}`);
33
+ const multiChannelProjects = payload.projects.filter((item) => (
34
+ item.projectChannelContext
35
+ && item.projectChannelContext.channelCount > 1
36
+ )).length;
37
+ console.log(` Projects With Multiple Channels: ${multiChannelProjects}`);
38
+ const highestSeverity = payload.projects
39
+ .map((item) => item.supervisionSignals && item.supervisionSignals.highestSeverity)
40
+ .filter(Boolean)
41
+ .sort(compareSeverity)[0] || 'none';
42
+ console.log(` Highest Supervision Severity: ${highestSeverity}`);
43
+ for (const item of payload.projects
44
+ .filter((entry) => entry.supervisionSignals && entry.supervisionSignals.actionableCount > 0)
45
+ .sort((left, right) => compareSeverity(
46
+ left.supervisionSignals.highestSeverity,
47
+ right.supervisionSignals.highestSeverity
48
+ ))
49
+ .slice(0, 3)) {
50
+ console.log(
51
+ ` Supervision: ${item.projectId} | severity=${item.supervisionSignals.highestSeverity} ` +
52
+ `| actionable=${item.supervisionSignals.actionableCount}`
53
+ );
54
+ if (item.supervisionSignals.primaryRecommendedCommand) {
55
+ console.log(` Next: ${item.supervisionSignals.primaryRecommendedCommand}`);
56
+ }
57
+ }
16
58
  }
17
59
  return payload;
18
60
  }
@@ -25,6 +67,10 @@ async function runProjectTargetResolveCommand(options = {}, dependencies = {}) {
25
67
  console.log(chalk.blue('Project Target Resolve'));
26
68
  console.log(` Status: ${payload.status}`);
27
69
  console.log(` Resolved Project: ${payload.resolvedProjectId || 'none'}`);
70
+ if (payload.callerProjectChannel && payload.callerProjectChannel.channel_id) {
71
+ console.log(` Caller Channel: ${payload.callerProjectChannel.project_id} / ${payload.callerProjectChannel.channel_id}`);
72
+ console.log(` Caller Focus: ${payload.callerProjectChannel.active_scene || 'n/a'} / ${payload.callerProjectChannel.active_spec_id || 'n/a'}`);
73
+ }
28
74
  }
29
75
  return payload;
30
76
  }
@@ -36,9 +82,44 @@ async function runProjectSupervisionShowCommand(options = {}, dependencies = {})
36
82
  } else {
37
83
  console.log(chalk.blue('Project Supervision'));
38
84
  console.log(` Project: ${payload.projectId}`);
85
+ console.log(` Highest Severity: ${payload.summary.highestSeverity || 'none'}`);
86
+ console.log(` Actionable: ${payload.summary.actionableCount || 0}`);
39
87
  console.log(` Blocked: ${payload.summary.blockedCount}`);
40
88
  console.log(` Handoff: ${payload.summary.handoffCount}`);
41
89
  console.log(` Risk: ${payload.summary.riskCount}`);
90
+ console.log(` Governance: ${payload.summary.supremeIntentGovernedCount || 0} governed | rewrite=${payload.summary.supremeIntentRewriteCount || 0} | refuse=${payload.summary.supremeIntentRefuseCount || 0}`);
91
+ console.log(` Archive: libraries=${payload.summary.archiveLibraryCount || 0} | experience=${payload.summary.archiveExperienceLessonCount || 0} | ontology=${payload.summary.archiveOntologyCapabilityLessonCount || 0} | application=${payload.summary.archiveApplicationLessonCount || 0} | missing=${payload.summary.archiveMissingCount || 0}`);
92
+ console.log(` Backflow: local=${payload.summary.backflowLocalBlockedCount || 0} | merge=${payload.summary.backflowCentralMergeBlockedCount || 0} | release=${payload.summary.backflowCentralReleaseBlockedCount || 0} | specs=${payload.summary.backflowBlockedSpecCount || 0}`);
93
+ console.log(` Pending Shared Source Connect: ${payload.summary.semanticSharedSourcePendingConnectCount || 0}`);
94
+ console.log(` Channels: ${payload.summary.projectChannelCount || 0}`);
95
+ if (payload.projectChannel && payload.projectChannel.channel_id) {
96
+ console.log(` Project Channel: ${payload.projectChannel.project_id} / ${payload.projectChannel.channel_id}`);
97
+ console.log(` Focus: ${payload.projectChannel.active_scene || 'n/a'} / ${payload.projectChannel.active_spec_id || 'n/a'}`);
98
+ }
99
+ for (const item of (payload.actionQueue || []).slice(0, 5)) {
100
+ console.log(` Action ${item.rank}: ${item.severity} | ${item.kind} | ${item.summary}`);
101
+ console.log(` Next: ${item.recommended_command}`);
102
+ }
103
+ for (const item of payload.items.filter((entry) => entry.kind === 'info' && entry.reasonCode === 'project.semantic_shared_source_connect_recommended')) {
104
+ console.log(` Connect: ${item.suggestedConnectCommand}`);
105
+ }
106
+ for (const item of payload.items.filter((entry) => entry.kind === 'governance')) {
107
+ console.log(` Governance Hotspot: ${item.channelId || 'project'} | ${item.specId || item.sceneId || 'unbound'} | governed=${item.governedCount}`);
108
+ }
109
+ for (const item of payload.items.filter((entry) => entry.kind === 'archive')) {
110
+ if (item.state === 'archive-routing-missing') {
111
+ console.log(` Archive Missing: count=${item.missingArchiveCount || 0}`);
112
+ continue;
113
+ }
114
+ console.log(` Archive Library: ${item.targetLibrary || 'unknown'} | lessons=${item.lessonCount || 0} | shared=${item.publishedSharedCount || 0} | blocked=${item.publishBlockedCount || 0}`);
115
+ }
116
+ for (const item of payload.items.filter((entry) => entry.kind === 'backflow')) {
117
+ if (item.state === 'local-publish-blocked') {
118
+ console.log(` Backflow Local: ${item.channelId || 'project'} | ${item.specId || item.sceneId || 'unbound'} | reason=${item.blockedReason}`);
119
+ continue;
120
+ }
121
+ console.log(` Backflow ${item.state}: ${item.specId || 'unknown'} | blocked=${item.blockedCount || 0}`);
122
+ }
42
123
  }
43
124
  return payload;
44
125
  }
@@ -64,7 +145,20 @@ async function runProjectOnboardingImportCommand(options = {}, dependencies = {}
64
145
  console.log(chalk.blue('Project Onboarding Import'));
65
146
  console.log(` Root: ${payload.preview ? payload.preview.rootDir : options.root}`);
66
147
  console.log(` Success: ${payload.success ? 'yes' : 'no'}`);
148
+ console.log(` Portfolio Visibility: ${payload.publication ? payload.publication.status : 'unknown'}`);
67
149
  console.log(` Workspace: ${payload.result && payload.result.workspaceId ? payload.result.workspaceId : 'none'}`);
150
+ if (payload.projectChannelContext && payload.projectChannelContext.channelCount > 0) {
151
+ console.log(` Project Channels: ${payload.projectChannelContext.channelCount}`);
152
+ if (payload.projectChannel && payload.projectChannel.channel_id) {
153
+ console.log(` Focused Channel: ${payload.projectChannel.channel_id}`);
154
+ }
155
+ }
156
+ if (payload.semanticSharedSourceDiscovery && payload.semanticSharedSourceDiscovery.approvedDescriptors > 0) {
157
+ console.log(` Approved Shared Descriptors: ${payload.semanticSharedSourceDiscovery.approvedDescriptors}`);
158
+ for (const item of payload.semanticSharedSourceDiscovery.items.filter((entry) => entry.approved)) {
159
+ console.log(` Connect: ${item.suggested_connect_command}`);
160
+ }
161
+ }
68
162
  }
69
163
  return payload;
70
164
  }
@@ -106,6 +200,7 @@ function registerProjectCommands(program) {
106
200
  .description('Resolve one project target without mutating active workspace selection')
107
201
  .option('--request <text>', 'Routing request text')
108
202
  .option('--current-project <id>', 'Caller asserted current project id')
203
+ .option('--channel <channel-id>', 'Caller asserted current project channel id')
109
204
  .option('--workspace <name>', 'Resolve caller context against one registered workspace')
110
205
  .option('--device <id>', 'Opaque caller device id')
111
206
  .option('--tool-instance-id <id>', 'Opaque caller tool instance id')
@@ -142,6 +237,7 @@ function registerProjectCommands(program) {
142
237
  .command('show')
143
238
  .description('Show project-scoped supervision summary and drillback items')
144
239
  .requiredOption('--project <id>', 'Visible project id')
240
+ .option('--channel <channel-id>', 'Resolve one project channel focus without overriding sibling channels')
145
241
  .option('--cursor <cursor>', 'Best-effort incremental checkpoint; full snapshot remains supported')
146
242
  .option('--json', 'Print machine-readable JSON output')
147
243
  .action((options) => safeRun(runProjectSupervisionShowCommand, options, 'project supervision show'));