sdd-agent-platform 0.4.0 → 0.4.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.
Files changed (417) hide show
  1. package/README.md +18 -23
  2. package/node_modules/@sdd-agent-platform/core/dist/ai-tools.js +31 -28
  3. package/node_modules/@sdd-agent-platform/core/dist/ai-tools.js.map +1 -1
  4. package/node_modules/@sdd-agent-platform/core/dist/config/init-project.js +3 -2
  5. package/node_modules/@sdd-agent-platform/core/dist/config/init-project.js.map +1 -1
  6. package/node_modules/@sdd-agent-platform/core/dist/config/starter-documents.d.ts +1 -1
  7. package/node_modules/@sdd-agent-platform/core/dist/config/starter-documents.js +14 -5
  8. package/node_modules/@sdd-agent-platform/core/dist/config/starter-documents.js.map +1 -1
  9. package/node_modules/@sdd-agent-platform/core/dist/contracts.d.ts +2 -0
  10. package/node_modules/@sdd-agent-platform/core/dist/contracts.js +2 -0
  11. package/node_modules/@sdd-agent-platform/core/dist/contracts.js.map +1 -1
  12. package/node_modules/@sdd-agent-platform/core/dist/doctor/checks/run-evidence.js +3 -3
  13. package/node_modules/@sdd-agent-platform/core/dist/doctor/checks/run-evidence.js.map +1 -1
  14. package/node_modules/@sdd-agent-platform/core/dist/doctor/doctor.js +155 -1
  15. package/node_modules/@sdd-agent-platform/core/dist/doctor/doctor.js.map +1 -1
  16. package/node_modules/@sdd-agent-platform/core/dist/evidence/lookup.d.ts +23 -0
  17. package/node_modules/@sdd-agent-platform/core/dist/evidence/lookup.js +54 -0
  18. package/node_modules/@sdd-agent-platform/core/dist/evidence/lookup.js.map +1 -0
  19. package/node_modules/@sdd-agent-platform/core/dist/evidence-runtime/contracts.d.ts +11 -0
  20. package/node_modules/@sdd-agent-platform/core/dist/execution/agent-execution-records.js +15 -8
  21. package/node_modules/@sdd-agent-platform/core/dist/execution/agent-execution-records.js.map +1 -1
  22. package/node_modules/@sdd-agent-platform/core/dist/execution/resident-worker.js +14 -6
  23. package/node_modules/@sdd-agent-platform/core/dist/execution/resident-worker.js.map +1 -1
  24. package/node_modules/@sdd-agent-platform/core/dist/execution/stage-team-runtime.d.ts +112 -0
  25. package/node_modules/@sdd-agent-platform/core/dist/execution/stage-team-runtime.js +145 -0
  26. package/node_modules/@sdd-agent-platform/core/dist/execution/stage-team-runtime.js.map +1 -0
  27. package/node_modules/@sdd-agent-platform/core/dist/instructions.js +36 -36
  28. package/node_modules/@sdd-agent-platform/core/dist/instructions.js.map +1 -1
  29. package/node_modules/@sdd-agent-platform/core/dist/lifecycle/ship.d.ts +2 -0
  30. package/node_modules/@sdd-agent-platform/core/dist/lifecycle/ship.js +37 -17
  31. package/node_modules/@sdd-agent-platform/core/dist/lifecycle/ship.js.map +1 -1
  32. package/node_modules/@sdd-agent-platform/core/dist/registries/agent-capability-catalog.d.ts +16 -1
  33. package/node_modules/@sdd-agent-platform/core/dist/registries/agent-capability-catalog.js +174 -16
  34. package/node_modules/@sdd-agent-platform/core/dist/registries/agent-capability-catalog.js.map +1 -1
  35. package/node_modules/@sdd-agent-platform/core/dist/registries/agent-registry.js +2 -2
  36. package/node_modules/@sdd-agent-platform/core/dist/registries/agent-registry.js.map +1 -1
  37. package/node_modules/@sdd-agent-platform/core/dist/registries/agent-runtime-static.d.ts +10 -0
  38. package/node_modules/@sdd-agent-platform/core/dist/registries/agent-runtime-static.js +31 -1
  39. package/node_modules/@sdd-agent-platform/core/dist/registries/agent-runtime-static.js.map +1 -1
  40. package/node_modules/@sdd-agent-platform/core/dist/registries/capability-sources.d.ts +2 -17
  41. package/node_modules/@sdd-agent-platform/core/dist/registries/capability-sources.js +222 -10
  42. package/node_modules/@sdd-agent-platform/core/dist/registries/capability-sources.js.map +1 -1
  43. package/node_modules/@sdd-agent-platform/core/dist/registries/workflow-gates.js +5 -5
  44. package/node_modules/@sdd-agent-platform/core/dist/registries/workflow-gates.js.map +1 -1
  45. package/node_modules/@sdd-agent-platform/core/dist/router/agent-runtime-config.js +27 -12
  46. package/node_modules/@sdd-agent-platform/core/dist/router/agent-runtime-config.js.map +1 -1
  47. package/node_modules/@sdd-agent-platform/core/dist/router/agent-runtime.d.ts +59 -1
  48. package/node_modules/@sdd-agent-platform/core/dist/router/route-projection.d.ts +3 -1
  49. package/node_modules/@sdd-agent-platform/core/dist/router/route-projection.js +191 -0
  50. package/node_modules/@sdd-agent-platform/core/dist/router/route-projection.js.map +1 -1
  51. package/node_modules/@sdd-agent-platform/core/dist/router/routing.js +32 -6
  52. package/node_modules/@sdd-agent-platform/core/dist/router/routing.js.map +1 -1
  53. package/node_modules/@sdd-agent-platform/core/dist/router/runtime-inspection.js +11 -4
  54. package/node_modules/@sdd-agent-platform/core/dist/router/runtime-inspection.js.map +1 -1
  55. package/node_modules/@sdd-agent-platform/core/dist/router/runtime-validation.js +31 -3
  56. package/node_modules/@sdd-agent-platform/core/dist/router/runtime-validation.js.map +1 -1
  57. package/node_modules/@sdd-agent-platform/core/dist/run-state/artifacts.js +48 -15
  58. package/node_modules/@sdd-agent-platform/core/dist/run-state/artifacts.js.map +1 -1
  59. package/node_modules/@sdd-agent-platform/core/dist/run-state/events.js +2 -2
  60. package/node_modules/@sdd-agent-platform/core/dist/run-state/events.js.map +1 -1
  61. package/node_modules/@sdd-agent-platform/core/dist/run-state/inspect-run.d.ts +3 -1
  62. package/node_modules/@sdd-agent-platform/core/dist/run-state/inspect-run.js +15 -49
  63. package/node_modules/@sdd-agent-platform/core/dist/run-state/inspect-run.js.map +1 -1
  64. package/node_modules/@sdd-agent-platform/core/dist/run-state/invocation-ledger.js +2 -2
  65. package/node_modules/@sdd-agent-platform/core/dist/run-state/invocation-ledger.js.map +1 -1
  66. package/node_modules/@sdd-agent-platform/core/dist/run-state/model.d.ts +25 -1
  67. package/node_modules/@sdd-agent-platform/core/dist/run-state/run-state.js +21 -14
  68. package/node_modules/@sdd-agent-platform/core/dist/run-state/run-state.js.map +1 -1
  69. package/node_modules/@sdd-agent-platform/core/dist/run-state/task-evidence.d.ts +62 -0
  70. package/node_modules/@sdd-agent-platform/core/dist/run-state/task-evidence.js +130 -0
  71. package/node_modules/@sdd-agent-platform/core/dist/run-state/task-evidence.js.map +1 -0
  72. package/node_modules/@sdd-agent-platform/core/dist/run-state.d.ts +1 -0
  73. package/node_modules/@sdd-agent-platform/core/dist/run-state.js +1 -0
  74. package/node_modules/@sdd-agent-platform/core/dist/run-state.js.map +1 -1
  75. package/node_modules/@sdd-agent-platform/core/dist/runtime-paths.d.ts +10 -0
  76. package/node_modules/@sdd-agent-platform/core/dist/runtime-paths.js +44 -14
  77. package/node_modules/@sdd-agent-platform/core/dist/runtime-paths.js.map +1 -1
  78. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/context.js +1 -1
  79. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/context.js.map +1 -1
  80. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/document-hashes.d.ts +4 -0
  81. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/document-hashes.js +189 -0
  82. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/document-hashes.js.map +1 -0
  83. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/run-binding.js +12 -3
  84. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/run-binding.js.map +1 -1
  85. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/task-parser.d.ts +20 -0
  86. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/task-parser.js +101 -21
  87. package/node_modules/@sdd-agent-platform/core/dist/sdd-docs/task-parser.js.map +1 -1
  88. package/node_modules/@sdd-agent-platform/core/dist/status/project-status.d.ts +62 -1
  89. package/node_modules/@sdd-agent-platform/core/dist/status/project-status.js +192 -4
  90. package/node_modules/@sdd-agent-platform/core/dist/status/project-status.js.map +1 -1
  91. package/node_modules/@sdd-agent-platform/core/dist/storage/runtime-store.d.ts +195 -2
  92. package/node_modules/@sdd-agent-platform/core/dist/storage/runtime-store.js +499 -2
  93. package/node_modules/@sdd-agent-platform/core/dist/storage/runtime-store.js.map +1 -1
  94. package/node_modules/@sdd-agent-platform/core/dist/sync-back/apply.js +23 -1
  95. package/node_modules/@sdd-agent-platform/core/dist/sync-back/apply.js.map +1 -1
  96. package/node_modules/@sdd-agent-platform/core/dist/sync-back/inspect.d.ts +19 -0
  97. package/node_modules/@sdd-agent-platform/core/dist/sync-back/inspect.js +114 -12
  98. package/node_modules/@sdd-agent-platform/core/dist/sync-back/inspect.js.map +1 -1
  99. package/node_modules/@sdd-agent-platform/core/dist/test-support/fixtures.js +21 -0
  100. package/node_modules/@sdd-agent-platform/core/dist/test-support/fixtures.js.map +1 -1
  101. package/node_modules/@sdd-agent-platform/core/dist/test-support/run-state.js +16 -2
  102. package/node_modules/@sdd-agent-platform/core/dist/test-support/run-state.js.map +1 -1
  103. package/node_modules/@sdd-agent-platform/core/dist/tsconfig.tsbuildinfo +1 -1
  104. package/node_modules/@sdd-agent-platform/core/dist/verification/goal-verify.js +34 -2
  105. package/node_modules/@sdd-agent-platform/core/dist/verification/goal-verify.js.map +1 -1
  106. package/node_modules/@sdd-agent-platform/core/dist/verification/rendering.js +15 -5
  107. package/node_modules/@sdd-agent-platform/core/dist/verification/rendering.js.map +1 -1
  108. package/node_modules/@sdd-agent-platform/core/dist/verification/review-gate.d.ts +22 -0
  109. package/node_modules/@sdd-agent-platform/core/dist/verification/review-gate.js +53 -0
  110. package/node_modules/@sdd-agent-platform/core/dist/verification/review-gate.js.map +1 -0
  111. package/node_modules/@sdd-agent-platform/core/dist/verification/single-task-loop.js +102 -9
  112. package/node_modules/@sdd-agent-platform/core/dist/verification/single-task-loop.js.map +1 -1
  113. package/node_modules/@sdd-agent-platform/core/dist/verification/test-runtime.d.ts +16 -1
  114. package/node_modules/@sdd-agent-platform/core/dist/verification/test-runtime.js +355 -69
  115. package/node_modules/@sdd-agent-platform/core/dist/verification/test-runtime.js.map +1 -1
  116. package/node_modules/@sdd-agent-platform/core/dist/verification/validation-wave.d.ts +58 -0
  117. package/node_modules/@sdd-agent-platform/core/dist/verification/validation-wave.js +428 -0
  118. package/node_modules/@sdd-agent-platform/core/dist/verification/validation-wave.js.map +1 -0
  119. package/node_modules/@sdd-agent-platform/core/dist/verification/verify-contract.d.ts +2 -0
  120. package/node_modules/@sdd-agent-platform/core/dist/verification/verify-contract.js +116 -18
  121. package/node_modules/@sdd-agent-platform/core/dist/verification/verify-contract.js.map +1 -1
  122. package/node_modules/@sdd-agent-platform/core/dist/verification.d.ts +2 -0
  123. package/node_modules/@sdd-agent-platform/core/dist/verification.js +2 -0
  124. package/node_modules/@sdd-agent-platform/core/dist/verification.js.map +1 -1
  125. package/node_modules/@sdd-agent-platform/core/dist/workflow-gate/evidence-packet.d.ts +24 -0
  126. package/node_modules/@sdd-agent-platform/core/dist/workflow-gate/evidence-packet.js +182 -0
  127. package/node_modules/@sdd-agent-platform/core/dist/workflow-gate/evidence-packet.js.map +1 -0
  128. package/node_modules/@sdd-agent-platform/core/dist/workflow-gate/hard-checks.d.ts +4 -0
  129. package/node_modules/@sdd-agent-platform/core/dist/workflow-gate/hard-checks.js +130 -0
  130. package/node_modules/@sdd-agent-platform/core/dist/workflow-gate/hard-checks.js.map +1 -0
  131. package/node_modules/@sdd-agent-platform/core/dist/workflow-gate/policy.d.ts +4 -0
  132. package/node_modules/@sdd-agent-platform/core/dist/workflow-gate/policy.js +146 -0
  133. package/node_modules/@sdd-agent-platform/core/dist/workflow-gate/policy.js.map +1 -0
  134. package/node_modules/@sdd-agent-platform/core/dist/workflow-gate/types.d.ts +89 -0
  135. package/node_modules/@sdd-agent-platform/core/dist/workflow-gate/types.js +2 -0
  136. package/node_modules/@sdd-agent-platform/core/dist/workflow-gate/types.js.map +1 -0
  137. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/affected-file-conflicts.d.ts +1 -0
  138. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/affected-file-conflicts.js +16 -1
  139. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/affected-file-conflicts.js.map +1 -1
  140. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/dependencies.d.ts +8 -4
  141. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/dependencies.js +25 -11
  142. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/dependencies.js.map +1 -1
  143. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/latest-eligible-run.d.ts +38 -0
  144. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/latest-eligible-run.js +122 -0
  145. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/latest-eligible-run.js.map +1 -0
  146. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/resolve.d.ts +27 -0
  147. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/resolve.js +166 -37
  148. package/node_modules/@sdd-agent-platform/core/dist/workflow-state/resolve.js.map +1 -1
  149. package/node_modules/@sdd-agent-platform/core/dist/workflow-state.d.ts +1 -0
  150. package/node_modules/@sdd-agent-platform/core/dist/workflow-state.js +1 -0
  151. package/node_modules/@sdd-agent-platform/core/dist/workflow-state.js.map +1 -1
  152. package/node_modules/@sdd-agent-platform/core/package.json +1 -1
  153. package/node_modules/@sdd-agent-platform/core/src/ai-tools.ts +31 -28
  154. package/node_modules/@sdd-agent-platform/core/src/artifacts/sdd-result.test.ts +50 -4
  155. package/node_modules/@sdd-agent-platform/core/src/config/init-project.test.ts +13 -10
  156. package/node_modules/@sdd-agent-platform/core/src/config/init-project.ts +3 -2
  157. package/node_modules/@sdd-agent-platform/core/src/config/starter-documents.ts +15 -5
  158. package/node_modules/@sdd-agent-platform/core/src/contracts.ts +2 -0
  159. package/node_modules/@sdd-agent-platform/core/src/doctor/checks/run-evidence.ts +3 -3
  160. package/node_modules/@sdd-agent-platform/core/src/doctor/doctor.test.ts +117 -5
  161. package/node_modules/@sdd-agent-platform/core/src/doctor/doctor.ts +164 -1
  162. package/node_modules/@sdd-agent-platform/core/src/evidence/lookup.ts +80 -0
  163. package/node_modules/@sdd-agent-platform/core/src/evidence-runtime/contracts.ts +12 -0
  164. package/node_modules/@sdd-agent-platform/core/src/execution/agent-execution-records.ts +16 -11
  165. package/node_modules/@sdd-agent-platform/core/src/execution/background-executor.test.ts +7 -0
  166. package/node_modules/@sdd-agent-platform/core/src/execution/resident-worker.test.ts +5 -0
  167. package/node_modules/@sdd-agent-platform/core/src/execution/resident-worker.ts +14 -6
  168. package/node_modules/@sdd-agent-platform/core/src/execution/stage-team-runtime.test.ts +102 -0
  169. package/node_modules/@sdd-agent-platform/core/src/execution/stage-team-runtime.ts +271 -0
  170. package/node_modules/@sdd-agent-platform/core/src/execution/wave-executor.test.ts +4 -0
  171. package/node_modules/@sdd-agent-platform/core/src/governance/policy.test.ts +2 -0
  172. package/node_modules/@sdd-agent-platform/core/src/instructions.test.ts +11 -5
  173. package/node_modules/@sdd-agent-platform/core/src/instructions.ts +36 -36
  174. package/node_modules/@sdd-agent-platform/core/src/lifecycle/ship.ts +39 -17
  175. package/node_modules/@sdd-agent-platform/core/src/phase8-contracts.test.ts +3 -2
  176. package/node_modules/@sdd-agent-platform/core/src/phase8-risk-kernel.test.ts +5 -0
  177. package/node_modules/@sdd-agent-platform/core/src/planning/task-graph.test.ts +2 -0
  178. package/node_modules/@sdd-agent-platform/core/src/planning/wave-plan.test.ts +3 -0
  179. package/node_modules/@sdd-agent-platform/core/src/registries/agent-capability-catalog.ts +269 -17
  180. package/node_modules/@sdd-agent-platform/core/src/registries/agent-registry.ts +2 -2
  181. package/node_modules/@sdd-agent-platform/core/src/registries/agent-runtime-static.ts +41 -1
  182. package/node_modules/@sdd-agent-platform/core/src/registries/capability-sources.ts +238 -15
  183. package/node_modules/@sdd-agent-platform/core/src/registries/registries.test.ts +27 -2
  184. package/node_modules/@sdd-agent-platform/core/src/registries/workflow-gates.ts +5 -5
  185. package/node_modules/@sdd-agent-platform/core/src/router/agent-runtime-config.ts +31 -12
  186. package/node_modules/@sdd-agent-platform/core/src/router/agent-runtime.ts +66 -1
  187. package/node_modules/@sdd-agent-platform/core/src/router/route-projection.ts +211 -0
  188. package/node_modules/@sdd-agent-platform/core/src/router/route-sdd-task.test.ts +151 -3
  189. package/node_modules/@sdd-agent-platform/core/src/router/routing.ts +35 -6
  190. package/node_modules/@sdd-agent-platform/core/src/router/runtime-inspection.ts +11 -4
  191. package/node_modules/@sdd-agent-platform/core/src/router/runtime-validation.ts +32 -3
  192. package/node_modules/@sdd-agent-platform/core/src/run-state/artifacts.ts +48 -15
  193. package/node_modules/@sdd-agent-platform/core/src/run-state/events.ts +2 -2
  194. package/node_modules/@sdd-agent-platform/core/src/run-state/inspect-run.ts +17 -52
  195. package/node_modules/@sdd-agent-platform/core/src/run-state/invocation-ledger.ts +2 -2
  196. package/node_modules/@sdd-agent-platform/core/src/run-state/model.ts +28 -1
  197. package/node_modules/@sdd-agent-platform/core/src/run-state/run-state.test.ts +3 -0
  198. package/node_modules/@sdd-agent-platform/core/src/run-state/run-state.ts +22 -18
  199. package/node_modules/@sdd-agent-platform/core/src/run-state/task-evidence.ts +206 -0
  200. package/node_modules/@sdd-agent-platform/core/src/run-state.ts +1 -0
  201. package/node_modules/@sdd-agent-platform/core/src/runtime-paths.ts +54 -14
  202. package/node_modules/@sdd-agent-platform/core/src/sdd-docs/context.ts +1 -1
  203. package/node_modules/@sdd-agent-platform/core/src/sdd-docs/document-hashes.ts +207 -0
  204. package/node_modules/@sdd-agent-platform/core/src/sdd-docs/run-binding.ts +12 -3
  205. package/node_modules/@sdd-agent-platform/core/src/sdd-docs/task-parser.test.ts +139 -0
  206. package/node_modules/@sdd-agent-platform/core/src/sdd-docs/task-parser.ts +137 -24
  207. package/node_modules/@sdd-agent-platform/core/src/status/project-status.ts +268 -5
  208. package/node_modules/@sdd-agent-platform/core/src/storage/runtime-store.test.ts +368 -4
  209. package/node_modules/@sdd-agent-platform/core/src/storage/runtime-store.ts +697 -2
  210. package/node_modules/@sdd-agent-platform/core/src/sync-back/apply.ts +23 -1
  211. package/node_modules/@sdd-agent-platform/core/src/sync-back/inspect.ts +145 -12
  212. package/node_modules/@sdd-agent-platform/core/src/sync-back/sync-back.test.ts +132 -9
  213. package/node_modules/@sdd-agent-platform/core/src/test-support/fixtures.ts +21 -0
  214. package/node_modules/@sdd-agent-platform/core/src/test-support/run-state.ts +16 -2
  215. package/node_modules/@sdd-agent-platform/core/src/verification/goal-verify.test.ts +1 -1
  216. package/node_modules/@sdd-agent-platform/core/src/verification/goal-verify.ts +38 -5
  217. package/node_modules/@sdd-agent-platform/core/src/verification/rendering.ts +15 -5
  218. package/node_modules/@sdd-agent-platform/core/src/verification/review-gate.test.ts +77 -0
  219. package/node_modules/@sdd-agent-platform/core/src/verification/review-gate.ts +77 -0
  220. package/node_modules/@sdd-agent-platform/core/src/verification/single-task-loop.test.ts +64 -4
  221. package/node_modules/@sdd-agent-platform/core/src/verification/single-task-loop.ts +110 -12
  222. package/node_modules/@sdd-agent-platform/core/src/verification/test-runtime.test.ts +72 -25
  223. package/node_modules/@sdd-agent-platform/core/src/verification/test-runtime.ts +402 -77
  224. package/node_modules/@sdd-agent-platform/core/src/verification/validation-wave.test.ts +341 -0
  225. package/node_modules/@sdd-agent-platform/core/src/verification/validation-wave.ts +513 -0
  226. package/node_modules/@sdd-agent-platform/core/src/verification/verify-contract.test.ts +144 -5
  227. package/node_modules/@sdd-agent-platform/core/src/verification/verify-contract.ts +129 -18
  228. package/node_modules/@sdd-agent-platform/core/src/verification.ts +2 -0
  229. package/node_modules/@sdd-agent-platform/core/src/workflow-gate/evidence-packet.ts +196 -0
  230. package/node_modules/@sdd-agent-platform/core/src/workflow-gate/hard-checks.test.ts +171 -0
  231. package/node_modules/@sdd-agent-platform/core/src/workflow-gate/hard-checks.ts +143 -0
  232. package/node_modules/@sdd-agent-platform/core/src/workflow-gate/policy.test.ts +137 -0
  233. package/node_modules/@sdd-agent-platform/core/src/workflow-gate/policy.ts +155 -0
  234. package/node_modules/@sdd-agent-platform/core/src/workflow-gate/types.ts +114 -0
  235. package/node_modules/@sdd-agent-platform/core/src/workflow-state/affected-file-conflicts.ts +18 -1
  236. package/node_modules/@sdd-agent-platform/core/src/workflow-state/dependencies.test.ts +1 -1
  237. package/node_modules/@sdd-agent-platform/core/src/workflow-state/dependencies.ts +33 -11
  238. package/node_modules/@sdd-agent-platform/core/src/workflow-state/latest-eligible-run.ts +156 -0
  239. package/node_modules/@sdd-agent-platform/core/src/workflow-state/resolve.test.ts +351 -2
  240. package/node_modules/@sdd-agent-platform/core/src/workflow-state/resolve.ts +227 -39
  241. package/node_modules/@sdd-agent-platform/core/src/workflow-state.ts +1 -0
  242. package/package.json +1 -1
  243. package/packages/cli/dist/commands/status.js +2 -2
  244. package/packages/cli/dist/commands/status.js.map +1 -1
  245. package/packages/cli/dist/commands/sync-back.js +1 -1
  246. package/packages/cli/dist/commands/sync-back.js.map +1 -1
  247. package/packages/cli/dist/commands/tasks.js +4 -4
  248. package/packages/cli/dist/commands/tasks.js.map +1 -1
  249. package/packages/cli/dist/commands/test.js +94 -5
  250. package/packages/cli/dist/commands/test.js.map +1 -1
  251. package/packages/cli/dist/commands/verifies.js +5 -3
  252. package/packages/cli/dist/commands/verifies.js.map +1 -1
  253. package/packages/cli/dist/commands/verify.js +48 -7
  254. package/packages/cli/dist/commands/verify.js.map +1 -1
  255. package/packages/cli/dist/help.js +32 -18
  256. package/packages/cli/dist/help.js.map +1 -1
  257. package/packages/cli/dist/renderers/artifacts.js +1 -1
  258. package/packages/cli/dist/renderers/artifacts.js.map +1 -1
  259. package/packages/cli/dist/renderers/registry-runtime.js +7 -2
  260. package/packages/cli/dist/renderers/registry-runtime.js.map +1 -1
  261. package/packages/cli/dist/renderers/router.js +4 -2
  262. package/packages/cli/dist/renderers/router.js.map +1 -1
  263. package/packages/cli/dist/renderers/workflow.js +33 -12
  264. package/packages/cli/dist/renderers/workflow.js.map +1 -1
  265. package/packages/cli/dist/tsconfig.tsbuildinfo +1 -1
  266. package/packages/cli/package.json +2 -2
  267. package/packages/core/dist/ai-tools.js +31 -28
  268. package/packages/core/dist/ai-tools.js.map +1 -1
  269. package/packages/core/dist/config/init-project.js +3 -2
  270. package/packages/core/dist/config/init-project.js.map +1 -1
  271. package/packages/core/dist/config/starter-documents.d.ts +1 -1
  272. package/packages/core/dist/config/starter-documents.js +14 -5
  273. package/packages/core/dist/config/starter-documents.js.map +1 -1
  274. package/packages/core/dist/contracts.d.ts +2 -0
  275. package/packages/core/dist/contracts.js +2 -0
  276. package/packages/core/dist/contracts.js.map +1 -1
  277. package/packages/core/dist/doctor/checks/run-evidence.js +3 -3
  278. package/packages/core/dist/doctor/checks/run-evidence.js.map +1 -1
  279. package/packages/core/dist/doctor/doctor.js +155 -1
  280. package/packages/core/dist/doctor/doctor.js.map +1 -1
  281. package/packages/core/dist/evidence/lookup.d.ts +23 -0
  282. package/packages/core/dist/evidence/lookup.js +54 -0
  283. package/packages/core/dist/evidence/lookup.js.map +1 -0
  284. package/packages/core/dist/evidence-runtime/contracts.d.ts +11 -0
  285. package/packages/core/dist/execution/agent-execution-records.js +15 -8
  286. package/packages/core/dist/execution/agent-execution-records.js.map +1 -1
  287. package/packages/core/dist/execution/resident-worker.js +14 -6
  288. package/packages/core/dist/execution/resident-worker.js.map +1 -1
  289. package/packages/core/dist/execution/stage-team-runtime.d.ts +112 -0
  290. package/packages/core/dist/execution/stage-team-runtime.js +145 -0
  291. package/packages/core/dist/execution/stage-team-runtime.js.map +1 -0
  292. package/packages/core/dist/instructions.js +36 -36
  293. package/packages/core/dist/instructions.js.map +1 -1
  294. package/packages/core/dist/lifecycle/ship.d.ts +2 -0
  295. package/packages/core/dist/lifecycle/ship.js +37 -17
  296. package/packages/core/dist/lifecycle/ship.js.map +1 -1
  297. package/packages/core/dist/registries/agent-capability-catalog.d.ts +16 -1
  298. package/packages/core/dist/registries/agent-capability-catalog.js +174 -16
  299. package/packages/core/dist/registries/agent-capability-catalog.js.map +1 -1
  300. package/packages/core/dist/registries/agent-registry.js +2 -2
  301. package/packages/core/dist/registries/agent-registry.js.map +1 -1
  302. package/packages/core/dist/registries/agent-runtime-static.d.ts +10 -0
  303. package/packages/core/dist/registries/agent-runtime-static.js +31 -1
  304. package/packages/core/dist/registries/agent-runtime-static.js.map +1 -1
  305. package/packages/core/dist/registries/capability-sources.d.ts +2 -17
  306. package/packages/core/dist/registries/capability-sources.js +222 -10
  307. package/packages/core/dist/registries/capability-sources.js.map +1 -1
  308. package/packages/core/dist/registries/workflow-gates.js +5 -5
  309. package/packages/core/dist/registries/workflow-gates.js.map +1 -1
  310. package/packages/core/dist/router/agent-runtime-config.js +27 -12
  311. package/packages/core/dist/router/agent-runtime-config.js.map +1 -1
  312. package/packages/core/dist/router/agent-runtime.d.ts +59 -1
  313. package/packages/core/dist/router/route-projection.d.ts +3 -1
  314. package/packages/core/dist/router/route-projection.js +191 -0
  315. package/packages/core/dist/router/route-projection.js.map +1 -1
  316. package/packages/core/dist/router/routing.js +32 -6
  317. package/packages/core/dist/router/routing.js.map +1 -1
  318. package/packages/core/dist/router/runtime-inspection.js +11 -4
  319. package/packages/core/dist/router/runtime-inspection.js.map +1 -1
  320. package/packages/core/dist/router/runtime-validation.js +31 -3
  321. package/packages/core/dist/router/runtime-validation.js.map +1 -1
  322. package/packages/core/dist/run-state/artifacts.js +48 -15
  323. package/packages/core/dist/run-state/artifacts.js.map +1 -1
  324. package/packages/core/dist/run-state/events.js +2 -2
  325. package/packages/core/dist/run-state/events.js.map +1 -1
  326. package/packages/core/dist/run-state/inspect-run.d.ts +3 -1
  327. package/packages/core/dist/run-state/inspect-run.js +15 -49
  328. package/packages/core/dist/run-state/inspect-run.js.map +1 -1
  329. package/packages/core/dist/run-state/invocation-ledger.js +2 -2
  330. package/packages/core/dist/run-state/invocation-ledger.js.map +1 -1
  331. package/packages/core/dist/run-state/model.d.ts +25 -1
  332. package/packages/core/dist/run-state/run-state.js +21 -14
  333. package/packages/core/dist/run-state/run-state.js.map +1 -1
  334. package/packages/core/dist/run-state/task-evidence.d.ts +62 -0
  335. package/packages/core/dist/run-state/task-evidence.js +130 -0
  336. package/packages/core/dist/run-state/task-evidence.js.map +1 -0
  337. package/packages/core/dist/run-state.d.ts +1 -0
  338. package/packages/core/dist/run-state.js +1 -0
  339. package/packages/core/dist/run-state.js.map +1 -1
  340. package/packages/core/dist/runtime-paths.d.ts +10 -0
  341. package/packages/core/dist/runtime-paths.js +44 -14
  342. package/packages/core/dist/runtime-paths.js.map +1 -1
  343. package/packages/core/dist/sdd-docs/context.js +1 -1
  344. package/packages/core/dist/sdd-docs/context.js.map +1 -1
  345. package/packages/core/dist/sdd-docs/document-hashes.d.ts +4 -0
  346. package/packages/core/dist/sdd-docs/document-hashes.js +189 -0
  347. package/packages/core/dist/sdd-docs/document-hashes.js.map +1 -0
  348. package/packages/core/dist/sdd-docs/run-binding.js +12 -3
  349. package/packages/core/dist/sdd-docs/run-binding.js.map +1 -1
  350. package/packages/core/dist/sdd-docs/task-parser.d.ts +20 -0
  351. package/packages/core/dist/sdd-docs/task-parser.js +101 -21
  352. package/packages/core/dist/sdd-docs/task-parser.js.map +1 -1
  353. package/packages/core/dist/status/project-status.d.ts +62 -1
  354. package/packages/core/dist/status/project-status.js +192 -4
  355. package/packages/core/dist/status/project-status.js.map +1 -1
  356. package/packages/core/dist/storage/runtime-store.d.ts +195 -2
  357. package/packages/core/dist/storage/runtime-store.js +499 -2
  358. package/packages/core/dist/storage/runtime-store.js.map +1 -1
  359. package/packages/core/dist/sync-back/apply.js +23 -1
  360. package/packages/core/dist/sync-back/apply.js.map +1 -1
  361. package/packages/core/dist/sync-back/inspect.d.ts +19 -0
  362. package/packages/core/dist/sync-back/inspect.js +114 -12
  363. package/packages/core/dist/sync-back/inspect.js.map +1 -1
  364. package/packages/core/dist/test-support/fixtures.js +21 -0
  365. package/packages/core/dist/test-support/fixtures.js.map +1 -1
  366. package/packages/core/dist/test-support/run-state.js +16 -2
  367. package/packages/core/dist/test-support/run-state.js.map +1 -1
  368. package/packages/core/dist/tsconfig.tsbuildinfo +1 -1
  369. package/packages/core/dist/verification/goal-verify.js +34 -2
  370. package/packages/core/dist/verification/goal-verify.js.map +1 -1
  371. package/packages/core/dist/verification/rendering.js +15 -5
  372. package/packages/core/dist/verification/rendering.js.map +1 -1
  373. package/packages/core/dist/verification/review-gate.d.ts +22 -0
  374. package/packages/core/dist/verification/review-gate.js +53 -0
  375. package/packages/core/dist/verification/review-gate.js.map +1 -0
  376. package/packages/core/dist/verification/single-task-loop.js +102 -9
  377. package/packages/core/dist/verification/single-task-loop.js.map +1 -1
  378. package/packages/core/dist/verification/test-runtime.d.ts +16 -1
  379. package/packages/core/dist/verification/test-runtime.js +355 -69
  380. package/packages/core/dist/verification/test-runtime.js.map +1 -1
  381. package/packages/core/dist/verification/validation-wave.d.ts +58 -0
  382. package/packages/core/dist/verification/validation-wave.js +428 -0
  383. package/packages/core/dist/verification/validation-wave.js.map +1 -0
  384. package/packages/core/dist/verification/verify-contract.d.ts +2 -0
  385. package/packages/core/dist/verification/verify-contract.js +116 -18
  386. package/packages/core/dist/verification/verify-contract.js.map +1 -1
  387. package/packages/core/dist/verification.d.ts +2 -0
  388. package/packages/core/dist/verification.js +2 -0
  389. package/packages/core/dist/verification.js.map +1 -1
  390. package/packages/core/dist/workflow-gate/evidence-packet.d.ts +24 -0
  391. package/packages/core/dist/workflow-gate/evidence-packet.js +182 -0
  392. package/packages/core/dist/workflow-gate/evidence-packet.js.map +1 -0
  393. package/packages/core/dist/workflow-gate/hard-checks.d.ts +4 -0
  394. package/packages/core/dist/workflow-gate/hard-checks.js +130 -0
  395. package/packages/core/dist/workflow-gate/hard-checks.js.map +1 -0
  396. package/packages/core/dist/workflow-gate/policy.d.ts +4 -0
  397. package/packages/core/dist/workflow-gate/policy.js +146 -0
  398. package/packages/core/dist/workflow-gate/policy.js.map +1 -0
  399. package/packages/core/dist/workflow-gate/types.d.ts +89 -0
  400. package/packages/core/dist/workflow-gate/types.js +2 -0
  401. package/packages/core/dist/workflow-gate/types.js.map +1 -0
  402. package/packages/core/dist/workflow-state/affected-file-conflicts.d.ts +1 -0
  403. package/packages/core/dist/workflow-state/affected-file-conflicts.js +16 -1
  404. package/packages/core/dist/workflow-state/affected-file-conflicts.js.map +1 -1
  405. package/packages/core/dist/workflow-state/dependencies.d.ts +8 -4
  406. package/packages/core/dist/workflow-state/dependencies.js +25 -11
  407. package/packages/core/dist/workflow-state/dependencies.js.map +1 -1
  408. package/packages/core/dist/workflow-state/latest-eligible-run.d.ts +38 -0
  409. package/packages/core/dist/workflow-state/latest-eligible-run.js +122 -0
  410. package/packages/core/dist/workflow-state/latest-eligible-run.js.map +1 -0
  411. package/packages/core/dist/workflow-state/resolve.d.ts +27 -0
  412. package/packages/core/dist/workflow-state/resolve.js +166 -37
  413. package/packages/core/dist/workflow-state/resolve.js.map +1 -1
  414. package/packages/core/dist/workflow-state.d.ts +1 -0
  415. package/packages/core/dist/workflow-state.js +1 -0
  416. package/packages/core/dist/workflow-state.js.map +1 -1
  417. package/packages/core/package.json +1 -1
@@ -40,6 +40,16 @@ interface BuiltInHostAdapterContract {
40
40
  responsibilities: string[];
41
41
  forbiddenAuthority: string[];
42
42
  projections: string[];
43
+ workflowProjectionPolicy: string;
44
+ workflowProjections: Array<{
45
+ host: 'claude_code' | 'codex' | 'opencode';
46
+ support: 'active' | 'future' | 'unsupported';
47
+ commandSurface: string[];
48
+ skillSurface: string[];
49
+ permissionSurface: string[];
50
+ evidenceReturn: string[];
51
+ unsupportedReason: string | null;
52
+ }>;
43
53
  }
44
54
 
45
55
  interface BuiltInEvidenceIngestionContract {
@@ -83,7 +93,37 @@ export const BUILT_IN_HOST_ADAPTER_CONTRACT: BuiltInHostAdapterContract = {
83
93
  host: 'Claude Code / future host adapter',
84
94
  responsibilities: ['project SDD router decisions to host subagents, skills, MCPs and shell tools', 'return host session/task id, status, output, artifacts and tool summary', 'record host output as provenance'],
85
95
  forbiddenAuthority: ['task lifecycle truth', 'completion state', 'risk gate authority', 'sync-back authority', 'required artifact policy'],
86
- projections: ['short profile prompt projection', 'tool permission summary', 'model policy category', 'required evidence targets']
96
+ projections: ['short profile prompt projection', 'tool permission summary', 'model policy category', 'required evidence targets', 'host-neutral workflow intent projection'],
97
+ workflowProjectionPolicy: 'Core emits host-neutral canonical CLI commands and workflow intent; host adapters may expose slash commands, skills, commands, settings, or permissions as projection metadata only.',
98
+ workflowProjections: [
99
+ {
100
+ host: 'claude_code',
101
+ support: 'active',
102
+ commandSurface: ['slash commands', 'skills', 'settings/hooks/statusline'],
103
+ skillSurface: ['Agent Skills SKILL.md', 'allowed-tools', 'context and hook metadata'],
104
+ permissionSurface: ['permission modes', 'tool permission prompts', 'settings scopes'],
105
+ evidenceReturn: ['host session id', 'tool summary', 'artifact references', 'command output'],
106
+ unsupportedReason: null
107
+ },
108
+ {
109
+ host: 'codex',
110
+ support: 'future',
111
+ commandSurface: ['config.toml profiles', 'AGENTS.md', 'built-in slash surfaces'],
112
+ skillSurface: ['AGENTS.md instruction surface only until custom command/skill semantics are verified'],
113
+ permissionSurface: ['approval_policy', 'sandbox_mode'],
114
+ evidenceReturn: ['telemetry/tool-decision events where available', 'CLI output'],
115
+ unsupportedReason: 'Custom workflow command/skill projection is not marked active without stronger Codex documentation evidence.'
116
+ },
117
+ {
118
+ host: 'opencode',
119
+ support: 'active',
120
+ commandSurface: ['opencode.json/jsonc', '.opencode/commands', 'slash commands'],
121
+ skillSurface: ['.opencode/agents', '.opencode/skills', 'global/project skill directories'],
122
+ permissionSurface: ['allow/ask/deny permissions'],
123
+ evidenceReturn: ['json output', 'session export', 'tool output', 'artifact references'],
124
+ unsupportedReason: null
125
+ }
126
+ ]
87
127
  };
88
128
 
89
129
  export const BUILT_IN_EVIDENCE_INGESTION_CONTRACT: BuiltInEvidenceIngestionContract = {
@@ -1,30 +1,253 @@
1
1
  import { CAPABILITY_SOURCE_CATALOG_VERSION } from '../contracts.js';
2
+ import type {
3
+ CapabilitySourceAllowedEvidenceType,
4
+ CapabilitySourceCatalogEntry,
5
+ CapabilitySourceKind,
6
+ CapabilitySourceQuarantineStatus,
7
+ CapabilityReuseDecision
8
+ } from '../router/agent-runtime.js';
2
9
 
3
- type CapabilityReuseDecision = 'reuse_direct' | 'adapt_via_host_adapter' | 'borrow_mechanism' | 'avoid';
4
- type CapabilitySourceKind = 'native_host' | 'mcp_tool' | 'open_source_material' | 'mechanism_reference' | 'future_adapter' | 'project_material';
10
+ const FORBIDDEN_RUNTIME_AUTHORITY = [
11
+ 'lifecycle gate authority',
12
+ 'stage completion decision',
13
+ 'sync-back apply decision',
14
+ 'ship readiness pass',
15
+ 'permission escalation'
16
+ ];
5
17
 
6
- interface BuiltInCapabilitySourceCatalogEntry {
7
- version: typeof CAPABILITY_SOURCE_CATALOG_VERSION;
18
+ interface CapabilitySourceInput {
8
19
  id: string;
9
20
  name: string;
10
21
  kind: CapabilitySourceKind;
11
22
  sourceRef: string;
12
23
  reuseDecision: CapabilityReuseDecision;
13
24
  quarantineRequired: boolean;
25
+ quarantineStatus: CapabilitySourceQuarantineStatus;
26
+ permissionModel: string[];
27
+ provenanceRequirements: string[];
28
+ hostCompatibility: string[];
29
+ allowedEvidenceTypes: CapabilitySourceAllowedEvidenceType[];
30
+ forbiddenAuthority?: string[];
14
31
  allowedUse: string;
15
32
  attribution: string;
16
33
  rationale: string;
17
34
  }
18
35
 
19
- export const BUILT_IN_CAPABILITY_SOURCES: BuiltInCapabilitySourceCatalogEntry[] = [
20
- { version: CAPABILITY_SOURCE_CATALOG_VERSION, id: 'claude_code_native', name: 'Claude Code native capabilities', kind: 'native_host', sourceRef: 'Claude Code subagents/skills/MCP/hooks/settings/background tasks', reuseDecision: 'reuse_direct', quarantineRequired: false, allowedUse: 'host-native execution and provenance capture', attribution: 'Claude Code host runtime', rationale: 'Reuse execution mechanics instead of rebuilding agent/skill/MCP runtime.' },
21
- { version: CAPABILITY_SOURCE_CATALOG_VERSION, id: 'context7_mcp', name: 'Context7 MCP', kind: 'mcp_tool', sourceRef: 'Context7 documentation MCP', reuseDecision: 'reuse_direct', quarantineRequired: false, allowedUse: 'current library/API documentation lookup with source evidence', attribution: 'Context7 MCP', rationale: 'Mature docs lookup should be declared as capability, not rebuilt.' },
22
- { version: CAPABILITY_SOURCE_CATALOG_VERSION, id: 'playwright_mcp', name: 'Playwright browser capability', kind: 'mcp_tool', sourceRef: 'Playwright MCP/CLI', reuseDecision: 'reuse_direct', quarantineRequired: false, allowedUse: 'browser/UI validation evidence', attribution: 'Playwright', rationale: 'Browser verification should be ingested as evidence rather than replaced by prompts.' },
23
- { version: CAPABILITY_SOURCE_CATALOG_VERSION, id: 'opencode_patterns', name: 'OpenCode mechanism patterns', kind: 'mechanism_reference', sourceRef: 'OpenCode / Oh My OpenCode', reuseDecision: 'borrow_mechanism', quarantineRequired: false, allowedUse: 'adapter, model policy, permission and session discipline references', attribution: 'OpenCode ecosystem', rationale: 'Borrow host-neutral mechanisms without coupling SDD core to OpenCode APIs.' },
24
- { version: CAPABILITY_SOURCE_CATALOG_VERSION, id: 'ohmy_team_mode', name: 'Oh My team-mode pattern', kind: 'mechanism_reference', sourceRef: 'Oh My OpenCode team-mode', reuseDecision: 'borrow_mechanism', quarantineRequired: false, allowedUse: 'adaptive chief/member/team-message/delegation-wave contract shape', attribution: 'Oh My OpenCode', rationale: 'Team runtime remains host capability; SDD records policy and evidence.' },
25
- { version: CAPABILITY_SOURCE_CATALOG_VERSION, id: 'roo_cline_permissions', name: 'Roo/Cline tool permission envelope', kind: 'mechanism_reference', sourceRef: 'Roo Code / Cline modes and approvals', reuseDecision: 'borrow_mechanism', quarantineRequired: false, allowedUse: 'tool group, approval and runtime validation policy reference', attribution: 'Roo Code / Cline', rationale: 'Permission semantics should be structured, not natural-language prompt rules.' },
26
- { version: CAPABILITY_SOURCE_CATALOG_VERSION, id: 'cc_sdd_completion_gate', name: 'cc-sdd dispatch and completion gates', kind: 'mechanism_reference', sourceRef: 'cc-sdd', reuseDecision: 'borrow_mechanism', quarantineRequired: false, allowedUse: 'bounded delegation and completion gate reference', attribution: 'cc-sdd', rationale: 'Useful dispatch pattern, but SDD task graph and evidence remain authoritative.' },
27
- { version: CAPABILITY_SOURCE_CATALOG_VERSION, id: 'agency_agents_material', name: 'Agency agents material library', kind: 'open_source_material', sourceRef: 'msitarzewski/agency-agents', reuseDecision: 'adapt_via_host_adapter', quarantineRequired: true, allowedUse: 'domain taxonomy, guardrail and deliverable metadata after quarantine', attribution: 'agency-agents', rationale: 'Large prompt packs are material sources only and must be mapped before routing use.' },
28
- { version: CAPABILITY_SOURCE_CATALOG_VERSION, id: 'wshobson_manifest', name: 'wshobson/BuildWithClaude manifest patterns', kind: 'mechanism_reference', sourceRef: 'wshobson agents / BuildWithClaude', reuseDecision: 'borrow_mechanism', quarantineRequired: true, allowedUse: 'marketplace manifest and file ownership reference after inspection', attribution: 'wshobson / BuildWithClaude', rationale: 'Borrow manifest/file ownership mechanics without copying agents.' },
29
- { version: CAPABILITY_SOURCE_CATALOG_VERSION, id: 'crewai_autogen_langgraph', name: 'CrewAI/AutoGen/LangGraph workflow frameworks', kind: 'future_adapter', sourceRef: 'CrewAI / AutoGen / LangGraph', reuseDecision: 'avoid', quarantineRequired: false, allowedUse: 'future optional adapter only after Phase 6 contracts stabilize', attribution: 'CrewAI / AutoGen / LangGraph', rationale: 'Avoid adding a workflow OS or scheduler to Phase 6 core.' }
36
+ function source(input: CapabilitySourceInput): CapabilitySourceCatalogEntry {
37
+ return {
38
+ version: CAPABILITY_SOURCE_CATALOG_VERSION,
39
+ forbiddenAuthority: input.forbiddenAuthority ?? FORBIDDEN_RUNTIME_AUTHORITY,
40
+ ...input
41
+ };
42
+ }
43
+
44
+ export const BUILT_IN_CAPABILITY_SOURCES: CapabilitySourceCatalogEntry[] = [
45
+ source({
46
+ id: 'claude_code_native',
47
+ name: 'Claude Code native capabilities',
48
+ kind: 'native_host',
49
+ sourceRef: 'Claude Code subagents/skills/MCP/hooks/settings/background tasks',
50
+ reuseDecision: 'reuse_direct',
51
+ quarantineRequired: false,
52
+ quarantineStatus: 'not_required',
53
+ permissionModel: ['host allow/ask/deny permissions', 'skill allowed-tools preapproval', 'subagent tool isolation', 'MCP server trust boundary'],
54
+ provenanceRequirements: ['managed entry path or host surface', 'host session/task id when delegated', 'tool summary or artifact reference'],
55
+ hostCompatibility: ['claude-code:supported'],
56
+ allowedEvidenceTypes: ['execution_record', 'command_output', 'external_reference'],
57
+ allowedUse: 'host-native execution, permission projection, and provenance capture',
58
+ attribution: 'Claude Code host runtime',
59
+ rationale: 'Reuse execution mechanics while SDD retains lifecycle, evidence, and completion authority.'
60
+ }),
61
+ source({
62
+ id: 'context7_mcp',
63
+ name: 'Context7 MCP',
64
+ kind: 'mcp_tool',
65
+ sourceRef: 'Context7 documentation MCP',
66
+ reuseDecision: 'reuse_direct',
67
+ quarantineRequired: false,
68
+ quarantineStatus: 'not_required',
69
+ permissionModel: ['MCP tool call with host approval policy', 'read-only external documentation lookup'],
70
+ provenanceRequirements: ['MCP server id', 'library id or source URL', 'retrieval timestamp or command evidence'],
71
+ hostCompatibility: ['mcp:supported', 'claude-code:supported'],
72
+ allowedEvidenceTypes: ['external_reference'],
73
+ allowedUse: 'current library/API documentation lookup with source evidence',
74
+ attribution: 'Context7 MCP',
75
+ rationale: 'Mature docs lookup should be declared as capability, not rebuilt.'
76
+ }),
77
+ source({
78
+ id: 'playwright_mcp',
79
+ name: 'Playwright browser capability',
80
+ kind: 'mcp_tool',
81
+ sourceRef: 'Playwright MCP/CLI',
82
+ reuseDecision: 'reuse_direct',
83
+ quarantineRequired: false,
84
+ quarantineStatus: 'not_required',
85
+ permissionModel: ['browser automation with host approval policy', 'project-scoped local/browser access'],
86
+ provenanceRequirements: ['browser snapshot or trace path', 'command output', 'target URL or local route'],
87
+ hostCompatibility: ['mcp:supported', 'cli:supported', 'claude-code:supported'],
88
+ allowedEvidenceTypes: ['browser_snapshot', 'command_output'],
89
+ allowedUse: 'browser/UI validation evidence mapped into SDD artifacts',
90
+ attribution: 'Playwright',
91
+ rationale: 'Browser verification should be ingested as evidence rather than replaced by prompts.'
92
+ }),
93
+ source({
94
+ id: 'codex_host_future',
95
+ name: 'Codex host adapter placeholder',
96
+ kind: 'future_adapter',
97
+ sourceRef: 'Codex CLI/agent host behavior requires project validation before routing',
98
+ reuseDecision: 'avoid',
99
+ quarantineRequired: true,
100
+ quarantineStatus: 'denied',
101
+ permissionModel: ['unsupported until Codex sandbox, approval, and MCP behavior are verified'],
102
+ provenanceRequirements: ['future host session id', 'future approval/sandbox record', 'future artifact mapping'],
103
+ hostCompatibility: ['codex:unsupported'],
104
+ allowedEvidenceTypes: ['none'],
105
+ allowedUse: 'unsupported future host adapter research only',
106
+ attribution: 'Codex public docs and issue review',
107
+ rationale: 'Current evidence is insufficient for stable active adapter fields; keep Codex out of routing until verified.'
108
+ }),
109
+ source({
110
+ id: 'opencode_patterns',
111
+ name: 'OpenCode mechanism patterns',
112
+ kind: 'mechanism_reference',
113
+ sourceRef: 'OpenCode / Oh My OpenCode',
114
+ reuseDecision: 'borrow_mechanism',
115
+ quarantineRequired: false,
116
+ quarantineStatus: 'not_required',
117
+ permissionModel: ['permission-shape reference only', 'allow/ask/deny normalized by SDD before use'],
118
+ provenanceRequirements: ['referenced OpenCode docs or source path', 'SDD adapter mapping decision'],
119
+ hostCompatibility: ['opencode:future_adapter'],
120
+ allowedEvidenceTypes: ['none'],
121
+ allowedUse: 'adapter, model policy, permission and session discipline references',
122
+ attribution: 'OpenCode ecosystem',
123
+ rationale: 'Borrow host-neutral mechanisms without coupling SDD core to OpenCode APIs.'
124
+ }),
125
+ source({
126
+ id: 'ohmy_team_mode',
127
+ name: 'Oh My team-mode pattern',
128
+ kind: 'mechanism_reference',
129
+ sourceRef: 'Oh My OpenCode team-mode',
130
+ reuseDecision: 'borrow_mechanism',
131
+ quarantineRequired: false,
132
+ quarantineStatus: 'not_required',
133
+ permissionModel: ['mechanism reference only', 'SDD-owned delegation waves and artifact requirements'],
134
+ provenanceRequirements: ['referenced source material', 'SDD team-mode policy id'],
135
+ hostCompatibility: ['opencode:future_adapter', 'host-neutral:supported'],
136
+ allowedEvidenceTypes: ['none'],
137
+ allowedUse: 'adaptive chief/member/team-message/delegation-wave contract shape',
138
+ attribution: 'Oh My OpenCode',
139
+ rationale: 'Team runtime remains host capability; SDD records policy and evidence.'
140
+ }),
141
+ source({
142
+ id: 'figma_design_future',
143
+ name: 'Figma design tooling placeholder',
144
+ kind: 'future_adapter',
145
+ sourceRef: 'Figma Dev Mode/MCP design context tooling',
146
+ reuseDecision: 'adapt_via_host_adapter',
147
+ quarantineRequired: true,
148
+ quarantineStatus: 'required',
149
+ permissionModel: ['read-only design context by default', 'write/generation actions unsupported', 'account/seat/tool limits must be checked'],
150
+ provenanceRequirements: ['Figma file or node reference', 'tool/server id', 'timestamped design context artifact'],
151
+ hostCompatibility: ['figma:future_adapter', 'mcp:future_adapter'],
152
+ allowedEvidenceTypes: ['design_context', 'external_reference'],
153
+ allowedUse: 'design context, tokens, variables, screenshots, and Code Connect mapping as candidate evidence',
154
+ attribution: 'Figma Dev Mode/MCP documentation',
155
+ rationale: 'Design tooling may inform UI/UX work, but write actions and readiness authority stay unsupported until adapter validation.'
156
+ }),
157
+ source({
158
+ id: 'ui_ux_pro_max_external',
159
+ name: 'ui-ux-pro-max external skill material',
160
+ kind: 'open_source_material',
161
+ sourceRef: 'ui-ux-pro-max external skill or user-global material',
162
+ reuseDecision: 'adapt_via_host_adapter',
163
+ quarantineRequired: true,
164
+ quarantineStatus: 'quarantined',
165
+ permissionModel: ['external skill material requires source review', 'no direct prompt import', 'no design-tool write authority'],
166
+ provenanceRequirements: ['material source path or registry id', 'license/source attribution', 'quarantine scan result'],
167
+ hostCompatibility: ['claude-code:future_adapter', 'host-neutral:future_adapter'],
168
+ allowedEvidenceTypes: ['candidate_evidence', 'design_context'],
169
+ allowedUse: 'UI/UX critique, heuristic review, and design deliverable metadata after quarantine',
170
+ attribution: 'ui-ux-pro-max external material',
171
+ rationale: 'Named external UI/UX skills are useful sources, but must be routed as mapped material rather than copied into baseline packs.'
172
+ }),
173
+ source({
174
+ id: 'roo_cline_permissions',
175
+ name: 'Roo/Cline tool permission envelope',
176
+ kind: 'mechanism_reference',
177
+ sourceRef: 'Roo Code / Cline modes and approvals',
178
+ reuseDecision: 'borrow_mechanism',
179
+ quarantineRequired: false,
180
+ quarantineStatus: 'not_required',
181
+ permissionModel: ['tool group and approval-policy reference only', 'SDD normalizes permissions before host projection'],
182
+ provenanceRequirements: ['referenced permission docs or source path', 'SDD permission policy id'],
183
+ hostCompatibility: ['host-neutral:supported'],
184
+ allowedEvidenceTypes: ['none'],
185
+ allowedUse: 'tool group, approval and runtime validation policy reference',
186
+ attribution: 'Roo Code / Cline',
187
+ rationale: 'Permission semantics should be structured, not natural-language prompt rules.'
188
+ }),
189
+ source({
190
+ id: 'cc_sdd_completion_gate',
191
+ name: 'cc-sdd dispatch and completion gates',
192
+ kind: 'mechanism_reference',
193
+ sourceRef: 'cc-sdd',
194
+ reuseDecision: 'borrow_mechanism',
195
+ quarantineRequired: false,
196
+ quarantineStatus: 'not_required',
197
+ permissionModel: ['mechanism reference only', 'SDD task graph remains authoritative'],
198
+ provenanceRequirements: ['referenced dispatch/completion source', 'SDD evidence mapping decision'],
199
+ hostCompatibility: ['host-neutral:supported'],
200
+ allowedEvidenceTypes: ['none'],
201
+ allowedUse: 'bounded delegation and completion gate reference',
202
+ attribution: 'cc-sdd',
203
+ rationale: 'Useful dispatch pattern, but SDD task graph and evidence remain authoritative.'
204
+ }),
205
+ source({
206
+ id: 'agency_agents_material',
207
+ name: 'Agency agents material library',
208
+ kind: 'open_source_material',
209
+ sourceRef: 'msitarzewski/agency-agents',
210
+ reuseDecision: 'adapt_via_host_adapter',
211
+ quarantineRequired: true,
212
+ quarantineStatus: 'quarantined',
213
+ permissionModel: ['external prompt pack quarantine', 'metadata extraction only before approval', 'no direct execution'],
214
+ provenanceRequirements: ['source repository/ref', 'license/source attribution', 'secret/dangerous-command scan result'],
215
+ hostCompatibility: ['host-neutral:future_adapter'],
216
+ allowedEvidenceTypes: ['candidate_evidence', 'external_reference'],
217
+ allowedUse: 'domain taxonomy, guardrail and deliverable metadata after quarantine',
218
+ attribution: 'agency-agents',
219
+ rationale: 'Large prompt packs are material sources only and must be mapped before routing use.'
220
+ }),
221
+ source({
222
+ id: 'wshobson_manifest',
223
+ name: 'wshobson/BuildWithClaude manifest patterns',
224
+ kind: 'mechanism_reference',
225
+ sourceRef: 'wshobson agents / BuildWithClaude',
226
+ reuseDecision: 'borrow_mechanism',
227
+ quarantineRequired: true,
228
+ quarantineStatus: 'required',
229
+ permissionModel: ['manifest mechanism reference after inspection', 'no copied agent body before quarantine'],
230
+ provenanceRequirements: ['source repository/ref', 'manifest ownership mapping', 'license/source attribution'],
231
+ hostCompatibility: ['claude-code:future_adapter', 'host-neutral:future_adapter'],
232
+ allowedEvidenceTypes: ['none'],
233
+ allowedUse: 'marketplace manifest and file ownership reference after inspection',
234
+ attribution: 'wshobson / BuildWithClaude',
235
+ rationale: 'Borrow manifest/file ownership mechanics without copying agents.'
236
+ }),
237
+ source({
238
+ id: 'crewai_autogen_langgraph',
239
+ name: 'CrewAI/AutoGen/LangGraph workflow frameworks',
240
+ kind: 'future_adapter',
241
+ sourceRef: 'CrewAI / AutoGen / LangGraph',
242
+ reuseDecision: 'avoid',
243
+ quarantineRequired: false,
244
+ quarantineStatus: 'not_required',
245
+ permissionModel: ['unsupported workflow-framework adapter'],
246
+ provenanceRequirements: ['future adapter analysis before any runtime use'],
247
+ hostCompatibility: ['workflow-framework:unsupported'],
248
+ allowedEvidenceTypes: ['none'],
249
+ allowedUse: 'future optional adapter only after Phase 6 contracts stabilize',
250
+ attribution: 'CrewAI / AutoGen / LangGraph',
251
+ rationale: 'Avoid adding a workflow OS or scheduler to Phase 6 core.'
252
+ })
30
253
  ];
@@ -7,7 +7,7 @@ import path from 'node:path';
7
7
  import { initProject } from '../config/init-project.js';
8
8
  import { doctor } from '../doctor/doctor.js';
9
9
  import { inspectAgentRegistryEntry, listAgentRegistry } from './agent-registry.js';
10
- import { inspectAgentCapabilityCatalog, validateAgentCapabilityCatalog } from './agent-capability-catalog.js';
10
+ import { inspectAgentCapabilityCatalog, REQUIRED_PROFESSIONAL_CAPABILITY_DOMAINS, validateAgentCapabilityCatalog } from './agent-capability-catalog.js';
11
11
  import { decideCommandTeamRuntime, inspectCommandTeamRuntime, validateCommandTeamRuntime } from './command-team-runtime.js';
12
12
  import { buildContextBuildPackage } from '../context/build-package.js';
13
13
  import {
@@ -174,12 +174,37 @@ test('Phase 7.6 agent capability catalog routes domains and material packs witho
174
174
 
175
175
  assert.equal(catalog.version, 'phase-7.6-agent-capability-catalog-v1');
176
176
  assert.equal(validation.valid, true);
177
- assert.equal(catalog.capabilities.length, 8);
177
+ assert.equal(catalog.capabilities.length, 19);
178
+ assert.equal(catalog.materialPacks.length, 16);
179
+ assert.equal(catalog.capabilities.filter((capability) => capability.domainGroup === 'professional').length, REQUIRED_PROFESSIONAL_CAPABILITY_DOMAINS.length);
178
180
  assert.equal(catalog.materialPacks.every((pack) => pack.contextBudget !== 'medium'), true);
181
+ assert.equal(catalog.materialPacks.every((pack) => pack.expectedOutputs.length > 0 && pack.forbiddenUses.length > 0), true);
179
182
  assert.equal(specMapping?.requiredDomains.includes('norm_discovery'), true);
180
183
  assert.equal(specMapping?.requiredDomains.includes('uncertainty_resolution'), true);
181
184
  assert.equal(verifiesMapping?.requiredDomains.includes('verification_design'), true);
182
185
  assert.equal(contextCapability?.routing.materialPackIds.includes('performance-risk'), true);
186
+ const backendCapability = catalog.capabilities.find((capability) => capability.domain === 'backend-engineering');
187
+ const frontendCapability = catalog.capabilities.find((capability) => capability.domain === 'frontend-engineering');
188
+ const databaseCapability = catalog.capabilities.find((capability) => capability.domain === 'db-data-engineering');
189
+ const evidenceCapability = catalog.capabilities.find((capability) => capability.id === 'cap.evidence-collection');
190
+
191
+ for (const domain of REQUIRED_PROFESSIONAL_CAPABILITY_DOMAINS) {
192
+ const capability = catalog.capabilities.find((entry) => entry.domain === domain);
193
+ const pack = catalog.materialPacks.find((entry) => entry.sourceKind === 'sdd_native_baseline' && entry.domains.includes(domain));
194
+ assert.equal(capability?.domainGroup, 'professional');
195
+ assert.equal(capability?.authority, 'advisory_only');
196
+ assert.equal(capability?.routing.materialPackIds.includes(pack?.id ?? ''), true);
197
+ assert.equal(pack?.sourceId, 'sdd_professional_baseline');
198
+ assert.equal(pack?.loadPolicy, 'route_when_triggered');
199
+ assert.equal(pack?.forbiddenUses.includes('host-specific skill projection'), true);
200
+ }
201
+ assert.equal(catalog.capabilities.every((capability) => capability.materialPolicy.length > 0 && capability.evidenceExpectation.length > 0), true);
202
+ assert.equal(catalog.capabilities.every((capability) => capability.routing.projectStackTags.length > 0), true);
203
+ assert.equal(backendCapability?.routing.projectStackTags.includes('api'), true);
204
+ assert.equal(frontendCapability?.routing.projectStackTags.includes('tsx'), true);
205
+ assert.equal(databaseCapability?.routing.projectStackTags.includes('sql'), true);
206
+ assert.equal(evidenceCapability?.materialPolicy, 'runtime_evidence_required');
207
+ assert.equal(evidenceCapability?.evidenceExpectation, 'accepted_runtime_evidence');
183
208
  assert.equal(catalog.commandMappings.some((mapping) => mapping.materialPolicy === 'never_inline'), false);
184
209
  } finally {
185
210
  await rm(root, { recursive: true, force: true });
@@ -70,13 +70,13 @@ const BUILT_IN_WORKFLOW_GATES: WorkflowGateContract[] = [
70
70
  {
71
71
  version: WORKFLOW_GATE_CONTRACT_VERSION,
72
72
  id: 'test',
73
- command: 'sdd test task <task_id> [--branch <branch>] [--run <run_id>]',
74
- requiredInputs: ['task id', 'validation command ledger', 'validation evidence'],
73
+ command: 'sdd test task <task_id> | sdd test batch <batch_id> | sdd test wave',
74
+ requiredInputs: ['task, batch, or wave boundary', 'validation command ledger', 'validation evidence'],
75
75
  allowedAgents: ['validator', 'reviewer'],
76
- requiredArtifacts: ['artifacts/validation-<task>.md', 'sync-back proposal when PASS'],
77
- gateConditions: ['acceptance mapped to evidence', 'validation gaps explicit', 'sync-back policy known'],
76
+ requiredArtifacts: ['artifacts/validation-<task>.md', 'workflow gate decision when PASS'],
77
+ gateConditions: ['acceptance mapped to evidence', 'validation gaps explicit', 'workflow gate policy known'],
78
78
  gapClosureBehavior: 'Return PASS, FAIL, or BLOCKED when command execution or acceptance evidence is incomplete.',
79
- nextAction: 'Inspect sync-back proposal after PASS and follow apply_policy.'
79
+ nextAction: 'Proceed to decision card if policy requires one, otherwise ship dry-run after PASS.'
80
80
  },
81
81
  {
82
82
  version: WORKFLOW_GATE_CONTRACT_VERSION,
@@ -9,8 +9,10 @@ import type {
9
9
  AgentRuntimeAdapterMapping,
10
10
  AgentRuntimeRoutingRule,
11
11
  CapabilityReuseDecision,
12
+ CapabilitySourceAllowedEvidenceType,
12
13
  CapabilitySourceCatalogEntry,
13
14
  CapabilitySourceKind,
15
+ CapabilitySourceQuarantineStatus,
14
16
  ProjectAgentRuntimeConfig,
15
17
  SkillCapabilityContract,
16
18
  SkillCapabilityEvidenceType,
@@ -80,18 +82,27 @@ function parseAgentRuntimeSkillCapabilities(lines: string[]): SkillCapabilityCon
80
82
  }
81
83
 
82
84
  function parseAgentRuntimeCapabilitySources(lines: string[]): CapabilitySourceCatalogEntry[] {
83
- return parseYamlObjectList(lines).map((object) => ({
84
- version: CAPABILITY_SOURCE_CATALOG_VERSION,
85
- id: object.scalars.id ?? '',
86
- name: object.scalars.name ?? object.scalars.id ?? '',
87
- kind: capabilitySourceKindField(object.scalars.kind),
88
- sourceRef: object.scalars.source_ref ?? '',
89
- reuseDecision: reuseDecisionField(object.scalars.reuse_decision),
90
- quarantineRequired: booleanValue(object.scalars.quarantine_required, true),
91
- allowedUse: object.scalars.allowed_use ?? '',
92
- attribution: object.scalars.attribution ?? '',
93
- rationale: object.scalars.rationale ?? ''
94
- }));
85
+ return parseYamlObjectList(lines).map((object) => {
86
+ const quarantineRequired = booleanValue(object.scalars.quarantine_required, true);
87
+ return {
88
+ version: CAPABILITY_SOURCE_CATALOG_VERSION,
89
+ id: object.scalars.id ?? '',
90
+ name: object.scalars.name ?? object.scalars.id ?? '',
91
+ kind: capabilitySourceKindField(object.scalars.kind),
92
+ sourceRef: object.scalars.source_ref ?? '',
93
+ reuseDecision: reuseDecisionField(object.scalars.reuse_decision),
94
+ quarantineRequired,
95
+ quarantineStatus: capabilitySourceQuarantineStatusField(object.scalars.quarantine_status, quarantineRequired ? 'required' : 'not_required'),
96
+ permissionModel: listField(object, 'permission_model', []),
97
+ provenanceRequirements: listField(object, 'provenance_requirements', []),
98
+ hostCompatibility: listField(object, 'host_compatibility', []),
99
+ allowedEvidenceTypes: listField(object, 'allowed_evidence_types', []).map(capabilitySourceAllowedEvidenceTypeField),
100
+ forbiddenAuthority: listField(object, 'forbidden_authority', []),
101
+ allowedUse: object.scalars.allowed_use ?? '',
102
+ attribution: object.scalars.attribution ?? '',
103
+ rationale: object.scalars.rationale ?? ''
104
+ };
105
+ });
95
106
  }
96
107
 
97
108
  function parseAgentRuntimeAliases(lines: string[]): Record<string, string> {
@@ -268,6 +279,14 @@ function capabilitySourceKindField(value: string | undefined): CapabilitySourceK
268
279
  return value === 'native_host' || value === 'mcp_tool' || value === 'open_source_material' || value === 'mechanism_reference' || value === 'future_adapter' || value === 'project_material' ? value : 'project_material';
269
280
  }
270
281
 
282
+ function capabilitySourceQuarantineStatusField(value: string | undefined, fallback: CapabilitySourceQuarantineStatus): CapabilitySourceQuarantineStatus {
283
+ return value === 'not_required' || value === 'required' || value === 'quarantined' || value === 'denied' ? value : fallback;
284
+ }
285
+
286
+ function capabilitySourceAllowedEvidenceTypeField(value: string): CapabilitySourceAllowedEvidenceType {
287
+ return value === 'none' || value === 'candidate_evidence' || value === 'command_output' || value === 'browser_snapshot' || value === 'design_context' || value === 'execution_record' || value === 'external_reference' ? value : 'candidate_evidence';
288
+ }
289
+
271
290
  function agentRouterCategoryField(value: string | undefined): AgentRouterCategory | null {
272
291
  return value === 'planning' || value === 'implementation' || value === 'implementation_review' || value === 'validation' || value === 'security_research' || value === 'external_research' || value === 'blocked' ? value : null;
273
292
  }
@@ -15,6 +15,7 @@ import type { ArtifactResultIngestionStatus } from '../artifacts/ingestion.js';
15
15
  import type { SddResultStatus } from '../artifacts/sdd-result.js';
16
16
  import type { RouteCacheMetadata, RuntimeProfileSpan, TeamModeActivation } from './route-cache.js';
17
17
  import type { ApprovalPolicy, LifecycleRiskProfile, LifecycleWorkflowGate } from '../risk.js';
18
+ import type { AgentCapabilityAuthority, AgentCapabilityDomain, AgentCapabilityMaterialPack, MaterialPackLoadPolicy } from '../registries/agent-capability-catalog.js';
18
19
 
19
20
  export type BuiltInAgentProfileId = 'planner' | 'architect' | 'implementer' | 'reviewer' | 'validator' | 'researcher' | 'orchestrator' | 'security' | 'domain_expert';
20
21
  export type AgentProfileId = BuiltInAgentProfileId | string;
@@ -22,7 +23,9 @@ export type CapabilityReuseDecision = 'reuse_direct' | 'adapt_via_host_adapter'
22
23
  export type SkillCapabilityKind = 'skill' | 'mcp' | 'cli_tool' | 'host_tool' | 'project_agent' | 'external_pattern';
23
24
  export type SkillCapabilitySource = 'project' | 'user_global' | 'claude_code' | 'mcp' | 'open_source' | 'host';
24
25
  export type SkillCapabilityEvidenceType = 'none' | 'command_output' | 'test_result' | 'browser_snapshot' | 'artifact' | 'external_source' | 'execution_record';
25
- export type CapabilitySourceKind = 'native_host' | 'mcp_tool' | 'open_source_material' | 'mechanism_reference' | 'future_adapter' | 'project_material';
26
+ export type CapabilitySourceKind = 'native_host' | 'mcp_tool' | 'cli_tool' | 'user_global_material' | 'open_source_material' | 'mechanism_reference' | 'future_adapter' | 'project_material';
27
+ export type CapabilitySourceQuarantineStatus = 'not_required' | 'required' | 'quarantined' | 'denied';
28
+ export type CapabilitySourceAllowedEvidenceType = 'none' | 'candidate_evidence' | 'command_output' | 'browser_snapshot' | 'design_context' | 'execution_record' | 'external_reference';
26
29
  export type ExternalPackImportStatus = 'approved' | 'quarantined' | 'denied';
27
30
  export type ExternalPackCheckStatus = 'pass' | 'warn' | 'fail' | 'not_run';
28
31
  export type ToolPermissionPolicy = 'allow' | 'ask' | 'deny';
@@ -33,6 +36,8 @@ export type TeamModeCostClass = 'none' | 'low' | 'medium' | 'high';
33
36
  export type TeamModeCostRoute = 'not_applicable' | 'downgraded' | 'no_downgrade' | 'blocked';
34
37
  export type AgentExecutionRecordStatus = 'claimed' | 'completed' | 'failed' | 'blocked' | 'skipped';
35
38
  export type TeamSessionRecordStatus = 'created' | 'completed' | 'blocked' | 'disabled';
39
+ export type WorkflowHostAdapterId = 'claude_code' | 'codex' | 'opencode';
40
+ export type WorkflowHostAdapterSupport = 'active' | 'future' | 'unsupported';
36
41
 
37
42
  export interface AgentProfileContract {
38
43
  version: typeof AGENT_SKILL_TEAM_RUNTIME_CONTRACT_VERSION;
@@ -70,6 +75,12 @@ export interface CapabilitySourceCatalogEntry {
70
75
  sourceRef: string;
71
76
  reuseDecision: CapabilityReuseDecision;
72
77
  quarantineRequired: boolean;
78
+ quarantineStatus: CapabilitySourceQuarantineStatus;
79
+ permissionModel: string[];
80
+ provenanceRequirements: string[];
81
+ hostCompatibility: string[];
82
+ allowedEvidenceTypes: CapabilitySourceAllowedEvidenceType[];
83
+ forbiddenAuthority: string[];
73
84
  allowedUse: string;
74
85
  attribution: string;
75
86
  rationale: string;
@@ -157,6 +168,16 @@ export interface ToolPermissionSpec {
157
168
  hostPermissionProjection: string;
158
169
  }
159
170
 
171
+ export interface HostWorkflowProjectionContract {
172
+ host: WorkflowHostAdapterId;
173
+ support: WorkflowHostAdapterSupport;
174
+ commandSurface: string[];
175
+ skillSurface: string[];
176
+ permissionSurface: string[];
177
+ evidenceReturn: string[];
178
+ unsupportedReason: string | null;
179
+ }
180
+
160
181
  export interface HostAdapterContract {
161
182
  version: typeof HOST_ADAPTER_CONTRACT_VERSION;
162
183
  id: string;
@@ -164,6 +185,8 @@ export interface HostAdapterContract {
164
185
  responsibilities: string[];
165
186
  forbiddenAuthority: string[];
166
187
  projections: string[];
188
+ workflowProjectionPolicy: string;
189
+ workflowProjections: HostWorkflowProjectionContract[];
167
190
  }
168
191
 
169
192
  export interface DelegationWavePolicy {
@@ -263,6 +286,47 @@ export interface AgentRouterRejectedProfile {
263
286
  reason: string;
264
287
  }
265
288
 
289
+ export interface AgentCapabilitySelectedDomain {
290
+ domain: AgentCapabilityDomain;
291
+ capabilityId: string;
292
+ authority: AgentCapabilityAuthority;
293
+ reason: string;
294
+ }
295
+
296
+ export interface AgentCapabilitySelectedMaterialPack {
297
+ id: string;
298
+ domains: AgentCapabilityDomain[];
299
+ loadPolicy: MaterialPackLoadPolicy;
300
+ contextBudget: AgentCapabilityMaterialPack['contextBudget'];
301
+ sourceKind: AgentCapabilityMaterialPack['sourceKind'];
302
+ expectedOutputs: string[];
303
+ reason: string;
304
+ }
305
+
306
+ export interface AgentCapabilityRejectedSource {
307
+ sourceId: string;
308
+ quarantineStatus: CapabilitySourceQuarantineStatus;
309
+ reuseDecision: CapabilityReuseDecision;
310
+ allowedEvidenceTypes: CapabilitySourceAllowedEvidenceType[];
311
+ reason: string;
312
+ }
313
+
314
+ export interface AgentCapabilityConsideredSource extends AgentCapabilityRejectedSource {
315
+ kind: CapabilitySourceKind;
316
+ consideredUse: string;
317
+ }
318
+
319
+
320
+ export interface AgentCapabilityRouteDecision {
321
+ authority: 'advisory_only';
322
+ selectedDomains: AgentCapabilitySelectedDomain[];
323
+ selectedPacks: AgentCapabilitySelectedMaterialPack[];
324
+ rejectedExternalSources: AgentCapabilityRejectedSource[];
325
+ consideredExternalSources: AgentCapabilityConsideredSource[];
326
+ evidenceRequirements: string[];
327
+ permissionCeiling: LifecycleAutonomyCeiling;
328
+ }
329
+
266
330
  export interface AgentRouterDecision {
267
331
  version: typeof AGENT_ROUTER_CONTRACT_VERSION;
268
332
  taskId: string;
@@ -286,6 +350,7 @@ export interface AgentRouterDecision {
286
350
  requiredArtifacts: string[];
287
351
  blockedReason: string | null;
288
352
  nextAction: string;
353
+ capabilityDecision: AgentCapabilityRouteDecision;
289
354
  registrySources?: RuntimeRegistryEntrySource[];
290
355
  resolvedAliases?: AgentRuntimeAliasResolution[];
291
356
  routingRuleHits?: string[];