oxe-cc 1.0.0 → 1.3.0

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 (322) hide show
  1. package/.cursor/commands/oxe-ask.md +3 -3
  2. package/.cursor/commands/oxe-capabilities.md +3 -3
  3. package/.cursor/commands/oxe-checkpoint.md +3 -3
  4. package/.cursor/commands/oxe-compact.md +3 -3
  5. package/.cursor/commands/oxe-dashboard.md +3 -3
  6. package/.cursor/commands/oxe-debug.md +3 -3
  7. package/.cursor/commands/oxe-discuss.md +3 -3
  8. package/.cursor/commands/oxe-execute.md +7 -4
  9. package/.cursor/commands/oxe-forensics.md +3 -3
  10. package/.cursor/commands/oxe-help.md +3 -3
  11. package/.cursor/commands/oxe-loop.md +3 -3
  12. package/.cursor/commands/oxe-milestone.md +3 -3
  13. package/.cursor/commands/oxe-next.md +3 -3
  14. package/.cursor/commands/oxe-obs.md +3 -3
  15. package/.cursor/commands/oxe-plan-agent.md +3 -3
  16. package/.cursor/commands/oxe-plan.md +3 -3
  17. package/.cursor/commands/oxe-project.md +3 -3
  18. package/.cursor/commands/oxe-quick.md +3 -3
  19. package/.cursor/commands/oxe-research.md +3 -3
  20. package/.cursor/commands/oxe-retro.md +3 -3
  21. package/.cursor/commands/oxe-review-pr.md +3 -3
  22. package/.cursor/commands/oxe-route.md +3 -3
  23. package/.cursor/commands/oxe-scan.md +3 -3
  24. package/.cursor/commands/oxe-security.md +3 -3
  25. package/.cursor/commands/oxe-session.md +4 -4
  26. package/.cursor/commands/oxe-ship.md +45 -0
  27. package/.cursor/commands/oxe-skill.md +3 -3
  28. package/.cursor/commands/oxe-spec.md +3 -3
  29. package/.cursor/commands/oxe-ui-review.md +3 -3
  30. package/.cursor/commands/oxe-ui-spec.md +3 -3
  31. package/.cursor/commands/oxe-update.md +3 -3
  32. package/.cursor/commands/oxe-validate-gaps.md +3 -3
  33. package/.cursor/commands/oxe-verify.md +6 -3
  34. package/.cursor/commands/oxe-workstream.md +3 -3
  35. package/.cursor/commands/oxe.md +6 -6
  36. package/.github/copilot-instructions.md +94 -4
  37. package/.github/prompts/oxe-ask.prompt.md +3 -3
  38. package/.github/prompts/oxe-capabilities.prompt.md +3 -3
  39. package/.github/prompts/oxe-checkpoint.prompt.md +3 -3
  40. package/.github/prompts/oxe-compact.prompt.md +3 -3
  41. package/.github/prompts/oxe-dashboard.prompt.md +3 -3
  42. package/.github/prompts/oxe-debug.prompt.md +3 -3
  43. package/.github/prompts/oxe-discuss.prompt.md +3 -3
  44. package/.github/prompts/oxe-execute.prompt.md +7 -4
  45. package/.github/prompts/oxe-forensics.prompt.md +3 -3
  46. package/.github/prompts/oxe-help.prompt.md +3 -3
  47. package/.github/prompts/oxe-loop.prompt.md +3 -3
  48. package/.github/prompts/oxe-milestone.prompt.md +3 -3
  49. package/.github/prompts/oxe-next.prompt.md +3 -3
  50. package/.github/prompts/oxe-obs.prompt.md +3 -3
  51. package/.github/prompts/oxe-plan-agent.prompt.md +3 -3
  52. package/.github/prompts/oxe-plan.prompt.md +3 -3
  53. package/.github/prompts/oxe-project.prompt.md +3 -3
  54. package/.github/prompts/oxe-quick.prompt.md +3 -3
  55. package/.github/prompts/oxe-research.prompt.md +3 -3
  56. package/.github/prompts/oxe-retro.prompt.md +3 -3
  57. package/.github/prompts/oxe-review-pr.prompt.md +3 -3
  58. package/.github/prompts/oxe-route.prompt.md +3 -3
  59. package/.github/prompts/oxe-scan.prompt.md +3 -3
  60. package/.github/prompts/oxe-security.prompt.md +3 -3
  61. package/.github/prompts/oxe-session.prompt.md +4 -4
  62. package/.github/prompts/oxe-ship.prompt.md +45 -0
  63. package/.github/prompts/oxe-skill.prompt.md +3 -3
  64. package/.github/prompts/oxe-spec.prompt.md +3 -3
  65. package/.github/prompts/oxe-ui-review.prompt.md +3 -3
  66. package/.github/prompts/oxe-ui-spec.prompt.md +3 -3
  67. package/.github/prompts/oxe-update.prompt.md +3 -3
  68. package/.github/prompts/oxe-validate-gaps.prompt.md +3 -3
  69. package/.github/prompts/oxe-verify.prompt.md +6 -3
  70. package/.github/prompts/oxe-workstream.prompt.md +3 -3
  71. package/.github/prompts/oxe.prompt.md +5 -5
  72. package/AGENTS.md +43 -28
  73. package/CHANGELOG.md +193 -0
  74. package/README.md +610 -529
  75. package/bin/banner.txt +1 -1
  76. package/bin/lib/oxe-agent-install.cjs +69 -69
  77. package/bin/lib/oxe-azure.cjs +1445 -1445
  78. package/bin/lib/oxe-context-engine.cjs +867 -867
  79. package/bin/lib/oxe-dashboard.cjs +76 -28
  80. package/bin/lib/oxe-operational.cjs +2144 -1340
  81. package/bin/lib/oxe-project-health.cjs +483 -1
  82. package/bin/lib/oxe-runtime-semantics.cjs +12 -0
  83. package/bin/oxe-cc.js +554 -152
  84. package/commands/oxe/ask.md +7 -3
  85. package/commands/oxe/capabilities.md +2 -2
  86. package/commands/oxe/checkpoint.md +3 -3
  87. package/commands/oxe/compact.md +3 -3
  88. package/commands/oxe/dashboard.md +2 -2
  89. package/commands/oxe/debug.md +3 -3
  90. package/commands/oxe/discuss.md +2 -2
  91. package/commands/oxe/execute.md +7 -4
  92. package/commands/oxe/forensics.md +3 -3
  93. package/commands/oxe/help.md +2 -2
  94. package/commands/oxe/loop.md +3 -3
  95. package/commands/oxe/milestone.md +3 -3
  96. package/commands/oxe/next.md +3 -3
  97. package/commands/oxe/obs.md +3 -3
  98. package/commands/oxe/oxe.md +5 -5
  99. package/commands/oxe/plan-agent.md +2 -2
  100. package/commands/oxe/plan.md +2 -2
  101. package/commands/oxe/project.md +3 -3
  102. package/commands/oxe/quick.md +2 -2
  103. package/commands/oxe/research.md +3 -3
  104. package/commands/oxe/retro.md +3 -3
  105. package/commands/oxe/review-pr.md +3 -3
  106. package/commands/oxe/route.md +3 -3
  107. package/commands/oxe/scan.md +3 -3
  108. package/commands/oxe/security.md +3 -3
  109. package/commands/oxe/session.md +4 -4
  110. package/commands/oxe/ship.md +49 -0
  111. package/commands/oxe/skill.md +2 -2
  112. package/commands/oxe/spec.md +4 -4
  113. package/commands/oxe/ui-review.md +3 -3
  114. package/commands/oxe/ui-spec.md +3 -3
  115. package/commands/oxe/update.md +2 -2
  116. package/commands/oxe/validate-gaps.md +3 -3
  117. package/commands/oxe/verify.md +7 -4
  118. package/commands/oxe/workstream.md +3 -3
  119. package/lib/runtime/audit/audit-trail.d.ts +71 -0
  120. package/lib/runtime/audit/audit-trail.js +154 -0
  121. package/lib/runtime/audit/index.d.ts +2 -0
  122. package/lib/runtime/audit/index.js +18 -0
  123. package/lib/runtime/audit/policy-pack.d.ts +15 -0
  124. package/lib/runtime/audit/policy-pack.js +57 -0
  125. package/lib/runtime/context/context-pack-builder.d.ts +15 -0
  126. package/lib/runtime/context/context-pack-builder.js +42 -0
  127. package/lib/runtime/context/context-pack-store.d.ts +38 -0
  128. package/lib/runtime/context/context-pack-store.js +142 -0
  129. package/lib/runtime/context/context-profiles.d.ts +11 -0
  130. package/lib/runtime/context/context-profiles.js +51 -0
  131. package/lib/runtime/context/index.d.ts +2 -0
  132. package/lib/runtime/context/index.js +2 -0
  133. package/lib/runtime/decision/decision-engine.d.ts +43 -0
  134. package/lib/runtime/decision/decision-engine.js +127 -0
  135. package/lib/runtime/decision/decision-memo.d.ts +53 -0
  136. package/lib/runtime/decision/decision-memo.js +173 -0
  137. package/lib/runtime/decision/index.d.ts +2 -0
  138. package/lib/runtime/decision/index.js +18 -0
  139. package/lib/runtime/delivery/branch-manager.d.ts +1 -0
  140. package/lib/runtime/delivery/branch-manager.js +7 -0
  141. package/lib/runtime/delivery/ci-checks.js +34 -1
  142. package/lib/runtime/delivery/delivery-records.d.ts +34 -0
  143. package/lib/runtime/delivery/delivery-records.js +48 -0
  144. package/lib/runtime/delivery/index.d.ts +2 -0
  145. package/lib/runtime/delivery/index.js +2 -0
  146. package/lib/runtime/delivery/promotion-pipeline.d.ts +63 -0
  147. package/lib/runtime/delivery/promotion-pipeline.js +224 -0
  148. package/lib/runtime/gate/gate-manager.d.ts +41 -0
  149. package/lib/runtime/gate/gate-manager.js +108 -1
  150. package/lib/runtime/index.d.ts +5 -2
  151. package/lib/runtime/index.js +7 -1
  152. package/lib/runtime/models/gate-decision.d.ts +4 -1
  153. package/lib/runtime/models/workspace.d.ts +3 -0
  154. package/lib/runtime/plugins/capability-adapter.d.ts +12 -0
  155. package/lib/runtime/plugins/capability-adapter.js +204 -0
  156. package/lib/runtime/plugins/capability-matrix.d.ts +25 -0
  157. package/lib/runtime/plugins/capability-matrix.js +90 -0
  158. package/lib/runtime/plugins/index.d.ts +3 -0
  159. package/lib/runtime/plugins/index.js +3 -0
  160. package/lib/runtime/plugins/plugin-abi.d.ts +2 -0
  161. package/lib/runtime/plugins/plugin-manifest.d.ts +22 -0
  162. package/lib/runtime/plugins/plugin-manifest.js +95 -0
  163. package/lib/runtime/plugins/plugin-registry.d.ts +46 -0
  164. package/lib/runtime/plugins/plugin-registry.js +84 -2
  165. package/lib/runtime/policy/policy-engine.d.ts +47 -1
  166. package/lib/runtime/policy/policy-engine.js +172 -9
  167. package/lib/runtime/projection/projection-engine.d.ts +9 -1
  168. package/lib/runtime/projection/projection-engine.js +73 -3
  169. package/lib/runtime/reducers/run-state-reducer.d.ts +26 -0
  170. package/lib/runtime/reducers/run-state-reducer.js +117 -1
  171. package/lib/runtime/scheduler/agent-registry.d.ts +44 -0
  172. package/lib/runtime/scheduler/agent-registry.js +96 -0
  173. package/lib/runtime/scheduler/agent-roles.d.ts +54 -0
  174. package/lib/runtime/scheduler/agent-roles.js +62 -0
  175. package/lib/runtime/scheduler/index.d.ts +3 -0
  176. package/lib/runtime/scheduler/index.js +3 -0
  177. package/lib/runtime/scheduler/multi-agent-coordinator.d.ts +45 -1
  178. package/lib/runtime/scheduler/multi-agent-coordinator.js +234 -35
  179. package/lib/runtime/scheduler/run-journal.d.ts +18 -0
  180. package/lib/runtime/scheduler/run-journal.js +54 -0
  181. package/lib/runtime/scheduler/scheduler.d.ts +29 -1
  182. package/lib/runtime/scheduler/scheduler.js +387 -14
  183. package/lib/runtime/verification/index.d.ts +1 -0
  184. package/lib/runtime/verification/index.js +1 -0
  185. package/lib/runtime/verification/verification-compiler.d.ts +43 -0
  186. package/lib/runtime/verification/verification-compiler.js +137 -0
  187. package/lib/runtime/verification/verification-manifest.d.ts +67 -0
  188. package/lib/runtime/verification/verification-manifest.js +179 -0
  189. package/lib/runtime/workspace/strategies/ephemeral-container.d.ts +1 -0
  190. package/lib/runtime/workspace/strategies/ephemeral-container.js +4 -0
  191. package/lib/runtime/workspace/strategies/git-worktree.d.ts +1 -0
  192. package/lib/runtime/workspace/strategies/git-worktree.js +2 -0
  193. package/lib/runtime/workspace/strategies/inplace.d.ts +1 -0
  194. package/lib/runtime/workspace/strategies/inplace.js +2 -0
  195. package/lib/runtime/workspace/workspace-manager.d.ts +2 -1
  196. package/lib/sdk/README.md +9 -9
  197. package/lib/sdk/index.cjs +33 -24
  198. package/lib/sdk/index.d.ts +149 -14
  199. package/oxe/templates/ACTIVE-RUN.template.json +32 -32
  200. package/oxe/templates/CAPABILITIES.template.md +7 -7
  201. package/oxe/templates/CAPABILITY.template.md +45 -45
  202. package/oxe/templates/CHECKPOINTS.template.md +7 -7
  203. package/oxe/templates/EXECUTION-RUNTIME.template.md +68 -68
  204. package/oxe/templates/HYPOTHESES.template.md +33 -33
  205. package/oxe/templates/LESSONS-METRICS.template.json +13 -13
  206. package/oxe/templates/NOTES.template.md +16 -16
  207. package/oxe/templates/PLAN-REVIEW.template.md +31 -31
  208. package/oxe/templates/SESSION.template.md +34 -34
  209. package/oxe/templates/SKILL.template.md +26 -26
  210. package/oxe/templates/STATE.md +55 -55
  211. package/oxe/templates/WORKFLOW_AUTHORING.md +18 -18
  212. package/oxe/workflows/ask.md +96 -92
  213. package/oxe/workflows/capabilities.md +25 -25
  214. package/oxe/workflows/checkpoint.md +14 -10
  215. package/oxe/workflows/dashboard.md +33 -33
  216. package/oxe/workflows/debug.md +19 -15
  217. package/oxe/workflows/discuss.md +12 -12
  218. package/oxe/workflows/execute.md +44 -2
  219. package/oxe/workflows/forensics.md +13 -9
  220. package/oxe/workflows/help.md +352 -304
  221. package/oxe/workflows/loop.md +17 -13
  222. package/oxe/workflows/next.md +22 -22
  223. package/oxe/workflows/obs.md +4 -0
  224. package/oxe/workflows/oxe.md +64 -31
  225. package/oxe/workflows/plan-agent.md +9 -9
  226. package/oxe/workflows/project.md +6 -1
  227. package/oxe/workflows/quick.md +10 -10
  228. package/oxe/workflows/references/reasoning-discovery.md +28 -28
  229. package/oxe/workflows/references/reasoning-execution.md +29 -29
  230. package/oxe/workflows/references/reasoning-planning.md +32 -32
  231. package/oxe/workflows/references/reasoning-review.md +29 -29
  232. package/oxe/workflows/references/reasoning-status.md +24 -24
  233. package/oxe/workflows/references/robustness-elevation.md +295 -295
  234. package/oxe/workflows/references/workflow-runtime-contracts.json +952 -907
  235. package/oxe/workflows/research.md +32 -28
  236. package/oxe/workflows/retro.md +4 -0
  237. package/oxe/workflows/review-pr.md +15 -11
  238. package/oxe/workflows/route.md +16 -16
  239. package/oxe/workflows/scan.md +4 -0
  240. package/oxe/workflows/security.md +14 -10
  241. package/oxe/workflows/session.md +213 -197
  242. package/oxe/workflows/ship.md +142 -0
  243. package/oxe/workflows/skill.md +44 -44
  244. package/oxe/workflows/spec.md +15 -0
  245. package/oxe/workflows/ui-review.md +20 -16
  246. package/oxe/workflows/ui-spec.md +7 -3
  247. package/oxe/workflows/validate-gaps.md +13 -9
  248. package/oxe/workflows/verify-audit.md +73 -73
  249. package/oxe/workflows/verify.md +52 -3
  250. package/package.json +92 -92
  251. package/packages/runtime/package.json +17 -17
  252. package/packages/runtime/src/audit/audit-trail.ts +243 -0
  253. package/packages/runtime/src/audit/index.ts +2 -0
  254. package/packages/runtime/src/audit/policy-pack.ts +62 -0
  255. package/packages/runtime/src/compiler/graph-compiler.ts +245 -245
  256. package/packages/runtime/src/compiler/index.ts +1 -1
  257. package/packages/runtime/src/context/context-pack-builder.ts +259 -193
  258. package/packages/runtime/src/context/context-pack-store.ts +197 -0
  259. package/packages/runtime/src/context/context-profiles.ts +60 -0
  260. package/packages/runtime/src/context/index.ts +3 -1
  261. package/packages/runtime/src/decision/decision-engine.ts +174 -0
  262. package/packages/runtime/src/decision/decision-memo.ts +211 -0
  263. package/packages/runtime/src/decision/index.ts +2 -0
  264. package/packages/runtime/src/delivery/branch-manager.ts +91 -84
  265. package/packages/runtime/src/delivery/ci-checks.ts +285 -252
  266. package/packages/runtime/src/delivery/delivery-records.ts +75 -0
  267. package/packages/runtime/src/delivery/index.ts +5 -3
  268. package/packages/runtime/src/delivery/pr-manager.ts +112 -112
  269. package/packages/runtime/src/delivery/promotion-pipeline.ts +334 -0
  270. package/packages/runtime/src/events/bus.ts +92 -92
  271. package/packages/runtime/src/events/catalog.ts +29 -29
  272. package/packages/runtime/src/events/envelope.ts +14 -14
  273. package/packages/runtime/src/events/index.ts +3 -3
  274. package/packages/runtime/src/evidence/evidence-store.ts +130 -130
  275. package/packages/runtime/src/evidence/index.ts +1 -1
  276. package/packages/runtime/src/gate/gate-manager.ts +289 -137
  277. package/packages/runtime/src/gate/index.ts +1 -1
  278. package/packages/runtime/src/index.ts +41 -32
  279. package/packages/runtime/src/models/attempt.ts +19 -19
  280. package/packages/runtime/src/models/evidence.ts +21 -21
  281. package/packages/runtime/src/models/gate-decision.ts +25 -21
  282. package/packages/runtime/src/models/index.ts +8 -8
  283. package/packages/runtime/src/models/run.ts +24 -24
  284. package/packages/runtime/src/models/session.ts +11 -11
  285. package/packages/runtime/src/models/verification-result.ts +10 -10
  286. package/packages/runtime/src/models/work-item.ts +25 -25
  287. package/packages/runtime/src/models/workspace.ts +31 -28
  288. package/packages/runtime/src/plugins/capability-adapter.ts +206 -0
  289. package/packages/runtime/src/plugins/capability-matrix.ts +126 -0
  290. package/packages/runtime/src/plugins/index.ts +5 -2
  291. package/packages/runtime/src/plugins/plugin-abi.ts +97 -95
  292. package/packages/runtime/src/plugins/plugin-manifest.ts +118 -0
  293. package/packages/runtime/src/plugins/plugin-registry.ts +232 -119
  294. package/packages/runtime/src/policy/index.ts +1 -1
  295. package/packages/runtime/src/policy/policy-engine.ts +330 -113
  296. package/packages/runtime/src/projection/index.ts +1 -1
  297. package/packages/runtime/src/projection/projection-engine.ts +328 -249
  298. package/packages/runtime/src/reducers/debug-reducer.ts +36 -36
  299. package/packages/runtime/src/reducers/index.ts +2 -2
  300. package/packages/runtime/src/reducers/run-state-reducer.ts +269 -127
  301. package/packages/runtime/src/scheduler/agent-registry.ts +132 -0
  302. package/packages/runtime/src/scheduler/agent-roles.ts +109 -0
  303. package/packages/runtime/src/scheduler/index.ts +4 -1
  304. package/packages/runtime/src/scheduler/multi-agent-coordinator.ts +521 -231
  305. package/packages/runtime/src/scheduler/run-journal.ts +62 -0
  306. package/packages/runtime/src/scheduler/scheduler.ts +722 -281
  307. package/packages/runtime/src/verification/index.ts +2 -1
  308. package/packages/runtime/src/verification/verification-compiler.ts +436 -225
  309. package/packages/runtime/src/verification/verification-manifest.ts +252 -0
  310. package/packages/runtime/src/workspace/index.ts +5 -5
  311. package/packages/runtime/src/workspace/strategies/ephemeral-container.ts +126 -121
  312. package/packages/runtime/src/workspace/strategies/git-worktree.ts +79 -77
  313. package/packages/runtime/src/workspace/strategies/inplace.ts +38 -35
  314. package/packages/runtime/src/workspace/workspace-manager.ts +16 -15
  315. package/packages/runtime/tsconfig.json +17 -17
  316. package/vscode-extension/.vscodeignore +7 -7
  317. package/vscode-extension/oxe-agents-1.0.0.vsix +0 -0
  318. package/vscode-extension/package.json +185 -185
  319. package/vscode-extension/src/extension.js +310 -310
  320. package/vscode-extension/src/shared/contextLoader.js +137 -137
  321. package/vscode-extension/src/shared/contractBuilder.js +159 -159
  322. package/vscode-extension/src/shared/stateReader.js +101 -101
@@ -6,9 +6,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.compile = compile;
7
7
  exports.runCheck = runCheck;
8
8
  exports.runSuite = runSuite;
9
+ exports.executeSuite = executeSuite;
9
10
  exports.summarizeSuite = summarizeSuite;
11
+ exports.verifyRun = verifyRun;
10
12
  const crypto_1 = __importDefault(require("crypto"));
11
13
  const child_process_1 = require("child_process");
14
+ const verification_manifest_1 = require("./verification-manifest");
12
15
  function inferCheckType(howToVerify) {
13
16
  const v = howToVerify.toLowerCase();
14
17
  if (v.includes('npm test') || v.includes('jest') || v.includes('vitest') || v.includes('node --test'))
@@ -132,12 +135,125 @@ async function runSuite(suite, cwd, timeoutMs = 60000) {
132
135
  }
133
136
  return results;
134
137
  }
138
+ async function executeSuite(suite, cwd, options) {
139
+ const results = [];
140
+ const verificationResults = [];
141
+ const evidenceRefs = new Map();
142
+ const timeoutMs = options.timeoutMs ?? 60000;
143
+ const attemptNumber = options.attemptNumber ?? 1;
144
+ for (const check of suite.checks) {
145
+ const provider = options.pluginRegistry?.verifierProviderFor(check.type);
146
+ let result;
147
+ let verificationResult;
148
+ if (provider) {
149
+ const providerResult = await provider.execute({
150
+ check_id: check.id,
151
+ check_type: check.type,
152
+ command: check.command,
153
+ work_item_id: options.workItemId,
154
+ workspace_root: cwd,
155
+ evidence_dir: '',
156
+ });
157
+ result = {
158
+ check_id: check.id,
159
+ acceptance_ref: check.acceptance_ref,
160
+ status: providerResult.status,
161
+ stdout: providerResult.summary ?? '',
162
+ stderr: '',
163
+ exit_code: providerResult.status === 'pass' ? 0 : 1,
164
+ duration_ms: 0,
165
+ error: providerResult.status === 'error' ? providerResult.summary ?? 'provider error' : null,
166
+ evidence_refs: providerResult.evidence_refs,
167
+ };
168
+ verificationResult = providerResult;
169
+ }
170
+ else {
171
+ result = await runCheck(check, cwd, timeoutMs);
172
+ const collectedEvidence = options.evidenceStore
173
+ ? await collectCheckEvidence(options.evidenceStore, check, result, {
174
+ run_id: options.runId,
175
+ work_item_id: options.workItemId,
176
+ attempt_number: attemptNumber,
177
+ })
178
+ : [];
179
+ result.evidence_refs = collectedEvidence;
180
+ verificationResult = {
181
+ verification_id: `vr-${crypto_1.default.randomBytes(4).toString('hex')}`,
182
+ work_item_id: options.workItemId,
183
+ check_id: check.id,
184
+ status: result.status,
185
+ evidence_refs: collectedEvidence,
186
+ summary: result.error || result.stderr || result.stdout || null,
187
+ };
188
+ }
189
+ if (result.evidence_refs && result.evidence_refs.length > 0) {
190
+ evidenceRefs.set(check.id, result.evidence_refs);
191
+ }
192
+ results.push(result);
193
+ verificationResults.push(verificationResult);
194
+ }
195
+ const manifest = (0, verification_manifest_1.buildManifest)(options.runId, results, {
196
+ workItemId: options.workItemId,
197
+ granularity: 'work_item',
198
+ evidenceRefs,
199
+ });
200
+ const riskLedger = (0, verification_manifest_1.buildRiskLedger)(options.runId, manifest);
201
+ const evidenceCoverage = (0, verification_manifest_1.summarizeEvidenceCoverage)(manifest);
202
+ return {
203
+ results,
204
+ verification_results: verificationResults,
205
+ evidence_refs: evidenceRefs,
206
+ manifest,
207
+ risk_ledger: riskLedger,
208
+ evidence_coverage: evidenceCoverage,
209
+ };
210
+ }
135
211
  function summarizeSuite(results) {
136
212
  const counts = { total: results.length, pass: 0, fail: 0, skip: 0, error: 0 };
137
213
  for (const r of results)
138
214
  counts[r.status]++;
139
215
  return { ...counts, allPassed: counts.fail === 0 && counts.error === 0 };
140
216
  }
217
+ async function verifyRun(input) {
218
+ const gaps = [];
219
+ if (!input.suite || !Array.isArray(input.suite.checks) || input.suite.checks.length === 0) {
220
+ gaps.push('Nenhum check executável foi compilado a partir de SPEC/PLAN.');
221
+ return {
222
+ status: 'partial',
223
+ suite: input.suite,
224
+ executed: null,
225
+ gaps,
226
+ verification_results: [],
227
+ check_results: [],
228
+ manifest: null,
229
+ risk_ledger: null,
230
+ evidence_coverage: null,
231
+ };
232
+ }
233
+ const executed = await executeSuite(input.suite, input.cwd, {
234
+ timeoutMs: input.timeoutMs,
235
+ runId: input.runId,
236
+ workItemId: input.workItemId,
237
+ attemptNumber: input.attemptNumber,
238
+ evidenceStore: input.evidenceStore,
239
+ pluginRegistry: input.pluginRegistry,
240
+ });
241
+ (0, verification_manifest_1.saveManifest)(input.projectRoot, input.runId, executed.manifest);
242
+ (0, verification_manifest_1.saveRiskLedger)(input.projectRoot, input.runId, executed.risk_ledger);
243
+ (0, verification_manifest_1.saveEvidenceCoverage)(input.projectRoot, input.runId, executed.evidence_coverage);
244
+ const summary = summarizeSuite(executed.results);
245
+ return {
246
+ status: summary.total === 0 ? 'partial' : summary.allPassed ? 'passed' : 'failed',
247
+ suite: input.suite,
248
+ executed,
249
+ gaps,
250
+ verification_results: executed.verification_results,
251
+ check_results: executed.results,
252
+ manifest: executed.manifest,
253
+ risk_ledger: executed.risk_ledger,
254
+ evidence_coverage: executed.evidence_coverage,
255
+ };
256
+ }
141
257
  function hashObject(obj) {
142
258
  return crypto_1.default
143
259
  .createHash('sha256')
@@ -145,3 +261,24 @@ function hashObject(obj) {
145
261
  .digest('hex')
146
262
  .slice(0, 12);
147
263
  }
264
+ async function collectCheckEvidence(store, check, result, options) {
265
+ const refs = [];
266
+ if (result.stdout) {
267
+ const evidence = await store.collect('stdout', result.stdout, options);
268
+ refs.push(evidence.evidence_id);
269
+ }
270
+ if (result.stderr) {
271
+ const evidence = await store.collect('stderr', result.stderr, options);
272
+ refs.push(evidence.evidence_id);
273
+ }
274
+ const summaryEvidence = await store.collect(check.evidence_type_expected, JSON.stringify({
275
+ check_id: check.id,
276
+ type: check.type,
277
+ command: check.command,
278
+ status: result.status,
279
+ exit_code: result.exit_code,
280
+ duration_ms: result.duration_ms,
281
+ }, null, 2), options);
282
+ refs.push(summaryEvidence.evidence_id);
283
+ return refs;
284
+ }
@@ -0,0 +1,67 @@
1
+ import type { VerificationStatus } from '../models/verification-result';
2
+ import type { CheckResult } from './verification-compiler';
3
+ export type VerificationProfile = 'quick' | 'standard' | 'critical';
4
+ export type FailureClass = 'deterministic' | 'flaky' | 'timeout' | 'env_setup' | 'policy_failure' | 'evidence_missing';
5
+ export type VerificationGranularity = 'work_item' | 'wave' | 'run';
6
+ export interface ManifestCheck {
7
+ check_id: string;
8
+ acceptance_ref: string | null;
9
+ status: VerificationStatus;
10
+ failure_class: FailureClass | null;
11
+ evidence_refs: string[];
12
+ duration_ms: number;
13
+ }
14
+ export interface VerificationManifest {
15
+ manifest_id: string;
16
+ run_id: string;
17
+ work_item_id: string | null;
18
+ wave: number | null;
19
+ granularity: VerificationGranularity;
20
+ profile: VerificationProfile;
21
+ compiled_at: string;
22
+ checks: ManifestCheck[];
23
+ summary: {
24
+ total: number;
25
+ pass: number;
26
+ fail: number;
27
+ skip: number;
28
+ error: number;
29
+ all_passed: boolean;
30
+ };
31
+ }
32
+ export interface ResidualRisk {
33
+ risk_id: string;
34
+ work_item_id: string | null;
35
+ check_id: string | null;
36
+ failure_class: FailureClass;
37
+ description: string;
38
+ severity: 'low' | 'medium' | 'high' | 'critical';
39
+ mitigation: string | null;
40
+ }
41
+ export interface ResidualRiskLedger {
42
+ run_id: string;
43
+ generated_at: string;
44
+ risks: ResidualRisk[];
45
+ }
46
+ export interface EvidenceCoverageSummary {
47
+ total_checks: number;
48
+ checks_with_evidence: number;
49
+ total_evidence_refs: number;
50
+ coverage_percent: number;
51
+ }
52
+ export declare function classifyFailure(result: CheckResult): FailureClass | null;
53
+ export declare function buildManifest(runId: string, results: CheckResult[], options?: {
54
+ workItemId?: string;
55
+ wave?: number;
56
+ granularity?: VerificationGranularity;
57
+ profile?: VerificationProfile;
58
+ evidenceRefs?: Map<string, string[]>;
59
+ }): VerificationManifest;
60
+ export declare function buildRiskLedger(runId: string, manifest: VerificationManifest): ResidualRiskLedger;
61
+ export declare function summarizeEvidenceCoverage(manifest: VerificationManifest): EvidenceCoverageSummary;
62
+ export declare function saveManifest(projectRoot: string, runId: string, manifest: VerificationManifest): void;
63
+ export declare function loadManifest(projectRoot: string, runId: string): VerificationManifest | null;
64
+ export declare function saveRiskLedger(projectRoot: string, runId: string, ledger: ResidualRiskLedger): void;
65
+ export declare function loadRiskLedger(projectRoot: string, runId: string): ResidualRiskLedger | null;
66
+ export declare function saveEvidenceCoverage(projectRoot: string, runId: string, coverage: EvidenceCoverageSummary): void;
67
+ export declare function loadEvidenceCoverage(projectRoot: string, runId: string): EvidenceCoverageSummary | null;
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.classifyFailure = classifyFailure;
7
+ exports.buildManifest = buildManifest;
8
+ exports.buildRiskLedger = buildRiskLedger;
9
+ exports.summarizeEvidenceCoverage = summarizeEvidenceCoverage;
10
+ exports.saveManifest = saveManifest;
11
+ exports.loadManifest = loadManifest;
12
+ exports.saveRiskLedger = saveRiskLedger;
13
+ exports.loadRiskLedger = loadRiskLedger;
14
+ exports.saveEvidenceCoverage = saveEvidenceCoverage;
15
+ exports.loadEvidenceCoverage = loadEvidenceCoverage;
16
+ const crypto_1 = __importDefault(require("crypto"));
17
+ const path_1 = __importDefault(require("path"));
18
+ const fs_1 = __importDefault(require("fs"));
19
+ function runDir(projectRoot, runId) {
20
+ return path_1.default.join(projectRoot, '.oxe', 'runs', runId);
21
+ }
22
+ function manifestPath(projectRoot, runId) {
23
+ return path_1.default.join(runDir(projectRoot, runId), 'verification-manifest.json');
24
+ }
25
+ function riskLedgerPath(projectRoot, runId) {
26
+ return path_1.default.join(runDir(projectRoot, runId), 'residual-risk-ledger.json');
27
+ }
28
+ function legacyRiskLedgerPath(projectRoot, runId) {
29
+ return path_1.default.join(runDir(projectRoot, runId), 'residual-risks.json');
30
+ }
31
+ function evidenceCoveragePath(projectRoot, runId) {
32
+ return path_1.default.join(runDir(projectRoot, runId), 'evidence-coverage.json');
33
+ }
34
+ const PROFILE_REQUIRED_CHECKS = {
35
+ quick: ['deterministic'],
36
+ standard: ['deterministic', 'policy_failure'],
37
+ critical: ['deterministic', 'policy_failure', 'evidence_missing', 'flaky'],
38
+ };
39
+ function classifyFailure(result) {
40
+ if (result.status === 'pass' || result.status === 'skip')
41
+ return null;
42
+ if (result.error && (result.error.toLowerCase().includes('timeout') || result.error.toLowerCase().includes('timed out')))
43
+ return 'timeout';
44
+ if (result.exit_code === null && result.error)
45
+ return 'env_setup';
46
+ if (result.stderr.toLowerCase().includes('policy') || result.stderr.toLowerCase().includes('denied')) {
47
+ return 'policy_failure';
48
+ }
49
+ if (result.exit_code !== 0 && result.stderr === '' && result.stdout === '')
50
+ return 'evidence_missing';
51
+ // Default: non-deterministic signals (no reliable exit code pattern)
52
+ return 'deterministic';
53
+ }
54
+ function buildManifest(runId, results, options = {}) {
55
+ const profile = options.profile ?? 'standard';
56
+ const granularity = options.granularity ?? 'run';
57
+ const evidenceRefs = options.evidenceRefs ?? new Map();
58
+ const checks = results.map((r) => ({
59
+ check_id: r.check_id,
60
+ acceptance_ref: r.acceptance_ref,
61
+ status: r.status,
62
+ failure_class: classifyFailure(r),
63
+ evidence_refs: evidenceRefs.get(r.check_id) ?? [],
64
+ duration_ms: r.duration_ms,
65
+ }));
66
+ const summary = {
67
+ total: checks.length,
68
+ pass: checks.filter((c) => c.status === 'pass').length,
69
+ fail: checks.filter((c) => c.status === 'fail').length,
70
+ skip: checks.filter((c) => c.status === 'skip').length,
71
+ error: checks.filter((c) => c.status === 'error').length,
72
+ all_passed: checks.every((c) => c.status === 'pass' || c.status === 'skip'),
73
+ };
74
+ return {
75
+ manifest_id: `vm-${crypto_1.default.randomBytes(4).toString('hex')}`,
76
+ run_id: runId,
77
+ work_item_id: options.workItemId ?? null,
78
+ wave: options.wave ?? null,
79
+ granularity,
80
+ profile,
81
+ compiled_at: new Date().toISOString(),
82
+ checks,
83
+ summary,
84
+ };
85
+ }
86
+ function buildRiskLedger(runId, manifest) {
87
+ const risks = [];
88
+ for (const check of manifest.checks) {
89
+ if (check.status === 'pass' || check.status === 'skip')
90
+ continue;
91
+ if (!check.failure_class)
92
+ continue;
93
+ const required = PROFILE_REQUIRED_CHECKS[manifest.profile];
94
+ if (!required.includes(check.failure_class))
95
+ continue;
96
+ risks.push({
97
+ risk_id: `risk-${crypto_1.default.randomBytes(3).toString('hex')}`,
98
+ work_item_id: manifest.work_item_id,
99
+ check_id: check.check_id,
100
+ failure_class: check.failure_class,
101
+ description: `Check ${check.check_id} ${check.status}: ${check.failure_class}`,
102
+ severity: check.failure_class === 'policy_failure' || check.failure_class === 'deterministic'
103
+ ? 'high'
104
+ : check.failure_class === 'evidence_missing'
105
+ ? 'medium'
106
+ : 'low',
107
+ mitigation: null,
108
+ });
109
+ }
110
+ return {
111
+ run_id: runId,
112
+ generated_at: new Date().toISOString(),
113
+ risks,
114
+ };
115
+ }
116
+ function summarizeEvidenceCoverage(manifest) {
117
+ const totalChecks = manifest.checks.length;
118
+ const checksWithEvidence = manifest.checks.filter((check) => check.evidence_refs.length > 0).length;
119
+ const totalEvidenceRefs = manifest.checks.reduce((sum, check) => sum + check.evidence_refs.length, 0);
120
+ const coveragePercent = totalChecks === 0 ? 100 : Math.round((checksWithEvidence / totalChecks) * 100);
121
+ return {
122
+ total_checks: totalChecks,
123
+ checks_with_evidence: checksWithEvidence,
124
+ total_evidence_refs: totalEvidenceRefs,
125
+ coverage_percent: coveragePercent,
126
+ };
127
+ }
128
+ function saveManifest(projectRoot, runId, manifest) {
129
+ const p = manifestPath(projectRoot, runId);
130
+ fs_1.default.mkdirSync(path_1.default.dirname(p), { recursive: true });
131
+ fs_1.default.writeFileSync(p, JSON.stringify(manifest, null, 2), 'utf8');
132
+ }
133
+ function loadManifest(projectRoot, runId) {
134
+ const p = manifestPath(projectRoot, runId);
135
+ if (!fs_1.default.existsSync(p))
136
+ return null;
137
+ try {
138
+ return JSON.parse(fs_1.default.readFileSync(p, 'utf8'));
139
+ }
140
+ catch {
141
+ return null;
142
+ }
143
+ }
144
+ function saveRiskLedger(projectRoot, runId, ledger) {
145
+ const canonical = riskLedgerPath(projectRoot, runId);
146
+ const legacy = legacyRiskLedgerPath(projectRoot, runId);
147
+ fs_1.default.mkdirSync(path_1.default.dirname(canonical), { recursive: true });
148
+ fs_1.default.writeFileSync(canonical, JSON.stringify(ledger, null, 2), 'utf8');
149
+ fs_1.default.writeFileSync(legacy, JSON.stringify(ledger, null, 2), 'utf8');
150
+ }
151
+ function loadRiskLedger(projectRoot, runId) {
152
+ const canonical = riskLedgerPath(projectRoot, runId);
153
+ const legacy = legacyRiskLedgerPath(projectRoot, runId);
154
+ const p = fs_1.default.existsSync(canonical) ? canonical : legacy;
155
+ if (!fs_1.default.existsSync(p))
156
+ return null;
157
+ try {
158
+ return JSON.parse(fs_1.default.readFileSync(p, 'utf8'));
159
+ }
160
+ catch {
161
+ return null;
162
+ }
163
+ }
164
+ function saveEvidenceCoverage(projectRoot, runId, coverage) {
165
+ const p = evidenceCoveragePath(projectRoot, runId);
166
+ fs_1.default.mkdirSync(path_1.default.dirname(p), { recursive: true });
167
+ fs_1.default.writeFileSync(p, JSON.stringify(coverage, null, 2), 'utf8');
168
+ }
169
+ function loadEvidenceCoverage(projectRoot, runId) {
170
+ const p = evidenceCoveragePath(projectRoot, runId);
171
+ if (!fs_1.default.existsSync(p))
172
+ return null;
173
+ try {
174
+ return JSON.parse(fs_1.default.readFileSync(p, 'utf8'));
175
+ }
176
+ catch {
177
+ return null;
178
+ }
179
+ }
@@ -14,6 +14,7 @@ export declare class EphemeralContainerManager implements WorkspaceManager {
14
14
  private containerIds;
15
15
  private useFallback;
16
16
  constructor(projectRoot: string, opts?: ContainerOptions);
17
+ get isolation_level(): 'shared' | 'isolated';
17
18
  get usingFallback(): boolean;
18
19
  allocate(req: WorkspaceRequest): Promise<WorkspaceLease>;
19
20
  snapshot(id: string): Promise<SnapshotRef>;
@@ -30,6 +30,9 @@ class EphemeralContainerManager {
30
30
  }
31
31
  }
32
32
  }
33
+ get isolation_level() {
34
+ return this.useFallback ? this.fallbackManager.isolation_level : 'isolated';
35
+ }
33
36
  get usingFallback() { return this.useFallback; }
34
37
  async allocate(req) {
35
38
  if (this.useFallback)
@@ -56,6 +59,7 @@ class EphemeralContainerManager {
56
59
  return {
57
60
  workspace_id: wsId,
58
61
  strategy: 'ephemeral_container',
62
+ isolation_level: this.isolation_level,
59
63
  branch: null,
60
64
  base_commit: null,
61
65
  root_path: `docker:${containerId}:${this.opts.mountPath}`,
@@ -2,6 +2,7 @@ import type { WorkspaceManager, WorkspaceRequest } from '../workspace-manager';
2
2
  import type { WorkspaceLease, SnapshotRef } from '../../models/workspace';
3
3
  export declare class GitWorktreeManager implements WorkspaceManager {
4
4
  private readonly projectRoot;
5
+ readonly isolation_level: "isolated";
5
6
  private leases;
6
7
  constructor(projectRoot: string);
7
8
  allocate(req: WorkspaceRequest): Promise<WorkspaceLease>;
@@ -11,6 +11,7 @@ const crypto_1 = __importDefault(require("crypto"));
11
11
  class GitWorktreeManager {
12
12
  constructor(projectRoot) {
13
13
  this.projectRoot = projectRoot;
14
+ this.isolation_level = 'isolated';
14
15
  this.leases = new Map();
15
16
  }
16
17
  async allocate(req) {
@@ -24,6 +25,7 @@ class GitWorktreeManager {
24
25
  const lease = {
25
26
  workspace_id: wsId,
26
27
  strategy: 'git_worktree',
28
+ isolation_level: this.isolation_level,
27
29
  branch,
28
30
  base_commit: baseCommit,
29
31
  root_path: worktreePath,
@@ -2,6 +2,7 @@ import type { WorkspaceManager, WorkspaceRequest } from '../workspace-manager';
2
2
  import type { WorkspaceLease, SnapshotRef } from '../../models/workspace';
3
3
  export declare class InplaceWorkspaceManager implements WorkspaceManager {
4
4
  private readonly projectRoot;
5
+ readonly isolation_level: "shared";
5
6
  constructor(projectRoot: string);
6
7
  allocate(req: WorkspaceRequest): Promise<WorkspaceLease>;
7
8
  snapshot(id: string): Promise<SnapshotRef>;
@@ -8,11 +8,13 @@ const crypto_1 = __importDefault(require("crypto"));
8
8
  class InplaceWorkspaceManager {
9
9
  constructor(projectRoot) {
10
10
  this.projectRoot = projectRoot;
11
+ this.isolation_level = 'shared';
11
12
  }
12
13
  async allocate(req) {
13
14
  return {
14
15
  workspace_id: `ws-inplace-${req.work_item_id}-a${req.attempt_number}`,
15
16
  strategy: 'inplace',
17
+ isolation_level: this.isolation_level,
16
18
  branch: null,
17
19
  base_commit: null,
18
20
  root_path: this.projectRoot,
@@ -1,4 +1,4 @@
1
- import type { WorkspaceLease, SnapshotRef, WorkspaceStrategy } from '../models/workspace';
1
+ import type { WorkspaceLease, SnapshotRef, WorkspaceStrategy, WorkspaceIsolationLevel } from '../models/workspace';
2
2
  export interface WorkspaceRequest {
3
3
  work_item_id: string;
4
4
  attempt_number: number;
@@ -6,6 +6,7 @@ export interface WorkspaceRequest {
6
6
  mutation_scope: string[];
7
7
  }
8
8
  export interface WorkspaceManager {
9
+ readonly isolation_level: WorkspaceIsolationLevel;
9
10
  allocate(req: WorkspaceRequest): Promise<WorkspaceLease>;
10
11
  snapshot(id: string): Promise<SnapshotRef>;
11
12
  reset(id: string, snapRef: SnapshotRef): Promise<void>;
package/lib/sdk/README.md CHANGED
@@ -47,21 +47,21 @@ const { options, warnings: w } = oxe.install.resolveOptionsFromConfig(dir, {
47
47
  | **health** | `loadOxeConfigMerged`, `validateConfigShape`, `buildHealthReport`, `suggestNextStep`, `oxePaths`, constantes de config |
48
48
  | **workflows** | `resolveWorkflowsDir`, `listWorkflowMdFiles`, `diffWorkflows`, `validateWorkflowShapes` (avisos `WORKFLOW_SHAPE`) |
49
49
  | **install** | `resolveOptionsFromConfig` |
50
- | **manifest** | `loadFileManifest`, `writeFileManifest`, `sha256File`, `collectFilesRecursive` |
51
- | **agents** | `adjustWorkflowPathsForNestedLayout`, `parseCursorCommandFrontmatter` |
52
- | **azure** | `azurePaths`, `detectAzureCli`, `loadAzureProfile`, `syncAzureInventory`, `planAzureOperation`, `applyAzureOperation`, `azureDoctor` |
53
- | **doctor** | `runDoctorChecks` — resultado estruturado (erros + avisos + diff de workflows + `workflowShape` com lint leve dos `.md`) |
50
+ | **manifest** | `loadFileManifest`, `writeFileManifest`, `sha256File`, `collectFilesRecursive` |
51
+ | **agents** | `adjustWorkflowPathsForNestedLayout`, `parseCursorCommandFrontmatter` |
52
+ | **azure** | `azurePaths`, `detectAzureCli`, `loadAzureProfile`, `syncAzureInventory`, `planAzureOperation`, `applyAzureOperation`, `azureDoctor` |
53
+ | **doctor** | `runDoctorChecks` — resultado estruturado (erros + avisos + diff de workflows + `workflowShape` com lint leve dos `.md`) |
54
54
 
55
55
  TypeScript: ver `index.d.ts` junto deste ficheiro.
56
56
 
57
57
  ## `health.buildHealthReport` e `parseLastCompactDate`
58
58
 
59
59
  - **`parseLastCompactDate(stateText)`** — lê a data em **`.oxe/STATE.md`** na secção **Último compact** (mesma convenção que **Último scan**). Devolve `Date | null` se a linha for placeholder ou ilegível.
60
- - **`buildHealthReport(projectRoot)`** — agrega fase, datas, avisos de SPEC/PLAN/VERIFY e o próximo passo sugerido. Campos usados em CI e em `oxe-cc status --json`:
61
- - **`scanDate`**, **`stale`** — último scan e idade face a `scan_max_age_days` (`stale: { stale, days }`).
62
- - **`compactDate`**, **`staleCompact`** — último compact e idade face a `compact_max_age_days`.
63
- - **`azureActive`**, **`azure`** — contexto Azure resolvido, inventário materializado, warnings e pendências do provider.
64
- - **`next`** — `{ step, cursorCmd, reason, artifacts }` (espelha a lógica de `suggestNextStep`).
60
+ - **`buildHealthReport(projectRoot)`** — agrega fase, datas, avisos de SPEC/PLAN/VERIFY e o próximo passo sugerido. Campos usados em CI e em `oxe-cc status --json`:
61
+ - **`scanDate`**, **`stale`** — último scan e idade face a `scan_max_age_days` (`stale: { stale, days }`).
62
+ - **`compactDate`**, **`staleCompact`** — último compact e idade face a `compact_max_age_days`.
63
+ - **`azureActive`**, **`azure`** — contexto Azure resolvido, inventário materializado, warnings e pendências do provider.
64
+ - **`next`** — `{ step, cursorCmd, reason, artifacts }` (espelha a lógica de `suggestNextStep`).
65
65
 
66
66
  ## `runDoctorChecks` e relatório de saúde
67
67
 
package/lib/sdk/index.cjs CHANGED
@@ -648,22 +648,31 @@ module.exports = {
648
648
  operationalPaths: operational.operationalPaths,
649
649
  appendEvent: operational.appendEvent,
650
650
  readEvents: operational.readEvents,
651
- summarizeEvents: operational.summarizeEvents,
652
- writeRunState: operational.writeRunState,
653
- readRunState: operational.readRunState,
654
- buildOperationalGraph: operational.buildOperationalGraph,
655
- serializeCanonicalState: operational.serializeCanonicalState,
656
- hydrateCanonicalState: operational.hydrateCanonicalState,
657
- reduceCanonicalRunState: operational.reduceCanonicalRunState,
658
- compileExecutionGraphFromArtifacts: operational.compileExecutionGraphFromArtifacts,
659
- compileVerificationSuiteFromArtifacts: operational.compileVerificationSuiteFromArtifacts,
660
- projectRuntimeArtifacts: operational.projectRuntimeArtifacts,
661
- runRuntimeCiChecks: operational.runRuntimeCiChecks,
662
- applyRuntimeAction: operational.applyRuntimeAction,
663
- parseCapabilityManifest: operational.parseCapabilityManifest,
664
- readCapabilityCatalog: operational.readCapabilityCatalog,
651
+ summarizeEvents: operational.summarizeEvents,
652
+ writeRunState: operational.writeRunState,
653
+ readRunState: operational.readRunState,
654
+ buildOperationalGraph: operational.buildOperationalGraph,
655
+ serializeCanonicalState: operational.serializeCanonicalState,
656
+ hydrateCanonicalState: operational.hydrateCanonicalState,
657
+ reduceCanonicalRunState: operational.reduceCanonicalRunState,
658
+ compileExecutionGraphFromArtifacts: operational.compileExecutionGraphFromArtifacts,
659
+ compileVerificationSuiteFromArtifacts: operational.compileVerificationSuiteFromArtifacts,
660
+ projectRuntimeArtifacts: operational.projectRuntimeArtifacts,
661
+ runRuntimeCiChecks: operational.runRuntimeCiChecks,
662
+ buildRuntimePluginRegistry: operational.buildRuntimePluginRegistry,
663
+ readRuntimeGates: operational.readRuntimeGates,
664
+ resolveRuntimeGate: operational.resolveRuntimeGate,
665
+ runRuntimeVerify: operational.runRuntimeVerify,
666
+ runRuntimePromotion: operational.runRuntimePromotion,
667
+ recoverRuntimeState: operational.recoverRuntimeState,
668
+ applyRuntimeAction: operational.applyRuntimeAction,
669
+ parseCapabilityManifest: operational.parseCapabilityManifest,
670
+ readCapabilityCatalog: operational.readCapabilityCatalog,
665
671
  buildMemoryLayers: operational.buildMemoryLayers,
666
672
  replayEvents: operational.replayEvents,
673
+ replayRuntimeState: operational.replayRuntimeState,
674
+ readRuntimeMultiAgentStatus: operational.readRuntimeMultiAgentStatus,
675
+ multiAgentStatus: operational.readRuntimeMultiAgentStatus,
667
676
  },
668
677
 
669
678
  /** Context Engine V2: seleção, compressão e inspeção determinística de artefatos. */
@@ -742,13 +751,13 @@ module.exports = {
742
751
  /** Um único objeto com verificações tipo `doctor` + relatório de saúde. */
743
752
  runDoctorChecks,
744
753
  };
745
-
746
-
747
- // Re-exports from @oxe/runtime (R1 — Runtime Foundation)
748
- // The compiled runtime lives at lib/runtime/ alongside this file.
749
- try {
750
- const runtime = require('../runtime/index.js');
751
- Object.assign(module.exports, runtime);
752
- } catch {
753
- // Runtime not built yet — safe to skip during development
754
- }
754
+
755
+
756
+ // Re-exports from @oxe/runtime (R1 — Runtime Foundation)
757
+ // The compiled runtime lives at lib/runtime/ alongside this file.
758
+ try {
759
+ const runtime = require('../runtime/index.js');
760
+ Object.assign(module.exports, runtime);
761
+ } catch {
762
+ // Runtime not built yet — safe to skip during development
763
+ }