oxe-cc 0.9.3 → 1.2.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 (319) hide show
  1. package/.cursor/commands/oxe-ask.md +1 -1
  2. package/.cursor/commands/oxe-capabilities.md +1 -1
  3. package/.cursor/commands/oxe-checkpoint.md +1 -1
  4. package/.cursor/commands/oxe-compact.md +1 -1
  5. package/.cursor/commands/oxe-dashboard.md +1 -1
  6. package/.cursor/commands/oxe-debug.md +1 -1
  7. package/.cursor/commands/oxe-discuss.md +1 -1
  8. package/.cursor/commands/oxe-execute.md +2 -2
  9. package/.cursor/commands/oxe-forensics.md +1 -1
  10. package/.cursor/commands/oxe-help.md +1 -1
  11. package/.cursor/commands/oxe-loop.md +1 -1
  12. package/.cursor/commands/oxe-milestone.md +1 -1
  13. package/.cursor/commands/oxe-next.md +1 -1
  14. package/.cursor/commands/oxe-obs.md +1 -1
  15. package/.cursor/commands/oxe-plan-agent.md +1 -1
  16. package/.cursor/commands/oxe-plan.md +1 -1
  17. package/.cursor/commands/oxe-project.md +1 -1
  18. package/.cursor/commands/oxe-quick.md +1 -1
  19. package/.cursor/commands/oxe-research.md +1 -1
  20. package/.cursor/commands/oxe-retro.md +1 -1
  21. package/.cursor/commands/oxe-review-pr.md +1 -1
  22. package/.cursor/commands/oxe-route.md +1 -1
  23. package/.cursor/commands/oxe-scan.md +1 -1
  24. package/.cursor/commands/oxe-security.md +1 -1
  25. package/.cursor/commands/oxe-session.md +2 -2
  26. package/.cursor/commands/oxe-ship.md +45 -0
  27. package/.cursor/commands/oxe-skill.md +1 -1
  28. package/.cursor/commands/oxe-spec.md +1 -1
  29. package/.cursor/commands/oxe-ui-review.md +1 -1
  30. package/.cursor/commands/oxe-ui-spec.md +1 -1
  31. package/.cursor/commands/oxe-update.md +1 -1
  32. package/.cursor/commands/oxe-validate-gaps.md +1 -1
  33. package/.cursor/commands/oxe-verify.md +1 -1
  34. package/.cursor/commands/oxe-workstream.md +1 -1
  35. package/.cursor/commands/oxe.md +4 -4
  36. package/.github/copilot-instructions.md +91 -1
  37. package/.github/prompts/oxe-ask.prompt.md +1 -1
  38. package/.github/prompts/oxe-capabilities.prompt.md +1 -1
  39. package/.github/prompts/oxe-checkpoint.prompt.md +1 -1
  40. package/.github/prompts/oxe-compact.prompt.md +1 -1
  41. package/.github/prompts/oxe-dashboard.prompt.md +1 -1
  42. package/.github/prompts/oxe-debug.prompt.md +1 -1
  43. package/.github/prompts/oxe-discuss.prompt.md +1 -1
  44. package/.github/prompts/oxe-execute.prompt.md +2 -2
  45. package/.github/prompts/oxe-forensics.prompt.md +1 -1
  46. package/.github/prompts/oxe-help.prompt.md +1 -1
  47. package/.github/prompts/oxe-loop.prompt.md +1 -1
  48. package/.github/prompts/oxe-milestone.prompt.md +1 -1
  49. package/.github/prompts/oxe-next.prompt.md +1 -1
  50. package/.github/prompts/oxe-obs.prompt.md +1 -1
  51. package/.github/prompts/oxe-plan-agent.prompt.md +1 -1
  52. package/.github/prompts/oxe-plan.prompt.md +1 -1
  53. package/.github/prompts/oxe-project.prompt.md +1 -1
  54. package/.github/prompts/oxe-quick.prompt.md +1 -1
  55. package/.github/prompts/oxe-research.prompt.md +1 -1
  56. package/.github/prompts/oxe-retro.prompt.md +1 -1
  57. package/.github/prompts/oxe-review-pr.prompt.md +1 -1
  58. package/.github/prompts/oxe-route.prompt.md +1 -1
  59. package/.github/prompts/oxe-scan.prompt.md +1 -1
  60. package/.github/prompts/oxe-security.prompt.md +1 -1
  61. package/.github/prompts/oxe-session.prompt.md +2 -2
  62. package/.github/prompts/oxe-ship.prompt.md +45 -0
  63. package/.github/prompts/oxe-skill.prompt.md +1 -1
  64. package/.github/prompts/oxe-spec.prompt.md +1 -1
  65. package/.github/prompts/oxe-ui-review.prompt.md +1 -1
  66. package/.github/prompts/oxe-ui-spec.prompt.md +1 -1
  67. package/.github/prompts/oxe-update.prompt.md +1 -1
  68. package/.github/prompts/oxe-validate-gaps.prompt.md +1 -1
  69. package/.github/prompts/oxe-verify.prompt.md +1 -1
  70. package/.github/prompts/oxe-workstream.prompt.md +1 -1
  71. package/.github/prompts/oxe.prompt.md +3 -3
  72. package/AGENTS.md +43 -28
  73. package/CHANGELOG.md +158 -0
  74. package/README.md +72 -50
  75. package/bin/banner.txt +1 -1
  76. package/bin/lib/oxe-dashboard.cjs +9 -7
  77. package/bin/lib/oxe-operational.cjs +569 -4
  78. package/bin/lib/oxe-project-health.cjs +1 -1
  79. package/bin/oxe-cc.js +141 -57
  80. package/commands/oxe/ask.md +5 -1
  81. package/commands/oxe/checkpoint.md +1 -1
  82. package/commands/oxe/compact.md +1 -1
  83. package/commands/oxe/debug.md +1 -1
  84. package/commands/oxe/execute.md +2 -2
  85. package/commands/oxe/forensics.md +1 -1
  86. package/commands/oxe/loop.md +1 -1
  87. package/commands/oxe/milestone.md +1 -1
  88. package/commands/oxe/next.md +1 -1
  89. package/commands/oxe/obs.md +1 -1
  90. package/commands/oxe/oxe.md +3 -3
  91. package/commands/oxe/project.md +1 -1
  92. package/commands/oxe/research.md +1 -1
  93. package/commands/oxe/retro.md +1 -1
  94. package/commands/oxe/review-pr.md +1 -1
  95. package/commands/oxe/route.md +1 -1
  96. package/commands/oxe/scan.md +1 -1
  97. package/commands/oxe/security.md +1 -1
  98. package/commands/oxe/session.md +2 -2
  99. package/commands/oxe/ship.md +49 -0
  100. package/commands/oxe/spec.md +2 -2
  101. package/commands/oxe/ui-review.md +1 -1
  102. package/commands/oxe/ui-spec.md +1 -1
  103. package/commands/oxe/validate-gaps.md +1 -1
  104. package/commands/oxe/verify.md +2 -2
  105. package/commands/oxe/workstream.md +1 -1
  106. package/lib/runtime/audit/audit-trail.d.ts +71 -0
  107. package/lib/runtime/audit/audit-trail.js +154 -0
  108. package/lib/runtime/audit/index.d.ts +2 -0
  109. package/lib/runtime/audit/index.js +18 -0
  110. package/lib/runtime/audit/policy-pack.d.ts +15 -0
  111. package/lib/runtime/audit/policy-pack.js +57 -0
  112. package/lib/runtime/compiler/graph-compiler.d.ts +83 -0
  113. package/lib/runtime/compiler/graph-compiler.js +135 -0
  114. package/lib/runtime/compiler/index.d.ts +1 -0
  115. package/lib/runtime/compiler/index.js +17 -0
  116. package/lib/runtime/context/context-pack-builder.d.ts +51 -0
  117. package/lib/runtime/context/context-pack-builder.js +178 -0
  118. package/lib/runtime/context/context-pack-store.d.ts +38 -0
  119. package/lib/runtime/context/context-pack-store.js +142 -0
  120. package/lib/runtime/context/context-profiles.d.ts +11 -0
  121. package/lib/runtime/context/context-profiles.js +51 -0
  122. package/lib/runtime/context/index.d.ts +3 -0
  123. package/lib/runtime/context/index.js +19 -0
  124. package/lib/runtime/decision/decision-engine.d.ts +43 -0
  125. package/lib/runtime/decision/decision-engine.js +127 -0
  126. package/lib/runtime/decision/decision-memo.d.ts +53 -0
  127. package/lib/runtime/decision/decision-memo.js +173 -0
  128. package/lib/runtime/decision/index.d.ts +2 -0
  129. package/lib/runtime/decision/index.js +18 -0
  130. package/lib/runtime/delivery/branch-manager.d.ts +19 -0
  131. package/lib/runtime/delivery/branch-manager.js +78 -0
  132. package/lib/runtime/delivery/ci-checks.d.ts +34 -0
  133. package/lib/runtime/delivery/ci-checks.js +209 -0
  134. package/lib/runtime/delivery/index.d.ts +4 -0
  135. package/lib/runtime/delivery/index.js +20 -0
  136. package/lib/runtime/delivery/pr-manager.d.ts +30 -0
  137. package/lib/runtime/delivery/pr-manager.js +82 -0
  138. package/lib/runtime/delivery/promotion-pipeline.d.ts +39 -0
  139. package/lib/runtime/delivery/promotion-pipeline.js +127 -0
  140. package/lib/runtime/events/bus.d.ts +9 -0
  141. package/lib/runtime/events/bus.js +63 -0
  142. package/lib/runtime/events/catalog.d.ts +3 -0
  143. package/lib/runtime/events/catalog.js +30 -0
  144. package/lib/runtime/events/envelope.d.ts +13 -0
  145. package/lib/runtime/events/envelope.js +2 -0
  146. package/lib/runtime/events/index.d.ts +3 -0
  147. package/lib/runtime/events/index.js +19 -0
  148. package/lib/runtime/evidence/evidence-store.d.ts +22 -0
  149. package/lib/runtime/evidence/evidence-store.js +106 -0
  150. package/lib/runtime/evidence/index.d.ts +1 -0
  151. package/lib/runtime/evidence/index.js +17 -0
  152. package/lib/runtime/gate/gate-manager.d.ts +39 -0
  153. package/lib/runtime/gate/gate-manager.js +104 -0
  154. package/lib/runtime/gate/index.d.ts +1 -0
  155. package/lib/runtime/gate/index.js +17 -0
  156. package/lib/runtime/index.d.ts +19 -0
  157. package/lib/runtime/index.js +44 -0
  158. package/lib/runtime/models/attempt.d.ts +12 -0
  159. package/lib/runtime/models/attempt.js +2 -0
  160. package/lib/runtime/models/evidence.d.ts +9 -0
  161. package/lib/runtime/models/evidence.js +2 -0
  162. package/lib/runtime/models/gate-decision.d.ts +10 -0
  163. package/lib/runtime/models/gate-decision.js +2 -0
  164. package/lib/runtime/models/index.d.ts +8 -0
  165. package/lib/runtime/models/index.js +24 -0
  166. package/lib/runtime/models/run.d.ts +13 -0
  167. package/lib/runtime/models/run.js +2 -0
  168. package/lib/runtime/models/session.d.ts +10 -0
  169. package/lib/runtime/models/session.js +2 -0
  170. package/lib/runtime/models/verification-result.d.ts +9 -0
  171. package/lib/runtime/models/verification-result.js +2 -0
  172. package/lib/runtime/models/work-item.d.ts +15 -0
  173. package/lib/runtime/models/work-item.js +2 -0
  174. package/lib/runtime/models/workspace.d.ts +25 -0
  175. package/lib/runtime/models/workspace.js +2 -0
  176. package/lib/runtime/plugins/capability-matrix.d.ts +20 -0
  177. package/lib/runtime/plugins/capability-matrix.js +59 -0
  178. package/lib/runtime/plugins/index.d.ts +4 -0
  179. package/lib/runtime/plugins/index.js +20 -0
  180. package/lib/runtime/plugins/plugin-abi.d.ts +76 -0
  181. package/lib/runtime/plugins/plugin-abi.js +2 -0
  182. package/lib/runtime/plugins/plugin-manifest.d.ts +22 -0
  183. package/lib/runtime/plugins/plugin-manifest.js +91 -0
  184. package/lib/runtime/plugins/plugin-registry.d.ts +21 -0
  185. package/lib/runtime/plugins/plugin-registry.js +119 -0
  186. package/lib/runtime/policy/index.d.ts +1 -0
  187. package/lib/runtime/policy/index.js +17 -0
  188. package/lib/runtime/policy/policy-engine.d.ts +67 -0
  189. package/lib/runtime/policy/policy-engine.js +171 -0
  190. package/lib/runtime/projection/index.d.ts +1 -0
  191. package/lib/runtime/projection/index.js +17 -0
  192. package/lib/runtime/projection/projection-engine.d.ts +11 -0
  193. package/lib/runtime/projection/projection-engine.js +218 -0
  194. package/lib/runtime/reducers/debug-reducer.d.ts +10 -0
  195. package/lib/runtime/reducers/debug-reducer.js +30 -0
  196. package/lib/runtime/reducers/index.d.ts +2 -0
  197. package/lib/runtime/reducers/index.js +18 -0
  198. package/lib/runtime/reducers/run-state-reducer.d.ts +46 -0
  199. package/lib/runtime/reducers/run-state-reducer.js +226 -0
  200. package/lib/runtime/scheduler/agent-registry.d.ts +44 -0
  201. package/lib/runtime/scheduler/agent-registry.js +96 -0
  202. package/lib/runtime/scheduler/agent-roles.d.ts +54 -0
  203. package/lib/runtime/scheduler/agent-roles.js +62 -0
  204. package/lib/runtime/scheduler/index.d.ts +4 -0
  205. package/lib/runtime/scheduler/index.js +20 -0
  206. package/lib/runtime/scheduler/multi-agent-coordinator.d.ts +36 -0
  207. package/lib/runtime/scheduler/multi-agent-coordinator.js +253 -0
  208. package/lib/runtime/scheduler/run-journal.d.ts +18 -0
  209. package/lib/runtime/scheduler/run-journal.js +54 -0
  210. package/lib/runtime/scheduler/scheduler.d.ts +49 -0
  211. package/lib/runtime/scheduler/scheduler.js +324 -0
  212. package/lib/runtime/verification/index.d.ts +2 -0
  213. package/lib/runtime/verification/index.js +18 -0
  214. package/lib/runtime/verification/verification-compiler.d.ts +56 -0
  215. package/lib/runtime/verification/verification-compiler.js +147 -0
  216. package/lib/runtime/verification/verification-manifest.d.ts +58 -0
  217. package/lib/runtime/verification/verification-manifest.js +129 -0
  218. package/lib/runtime/workspace/index.d.ts +5 -0
  219. package/lib/runtime/workspace/index.js +24 -0
  220. package/lib/runtime/workspace/strategies/ephemeral-container.d.ts +22 -0
  221. package/lib/runtime/workspace/strategies/ephemeral-container.js +109 -0
  222. package/lib/runtime/workspace/strategies/git-worktree.d.ts +12 -0
  223. package/lib/runtime/workspace/strategies/git-worktree.js +79 -0
  224. package/lib/runtime/workspace/strategies/inplace.d.ts +10 -0
  225. package/lib/runtime/workspace/strategies/inplace.js +37 -0
  226. package/lib/runtime/workspace/workspace-manager.d.ts +13 -0
  227. package/lib/runtime/workspace/workspace-manager.js +2 -0
  228. package/lib/sdk/index.cjs +24 -7
  229. package/lib/sdk/index.d.ts +17 -7
  230. package/oxe/workflows/ask.md +4 -0
  231. package/oxe/workflows/checkpoint.md +14 -10
  232. package/oxe/workflows/debug.md +19 -15
  233. package/oxe/workflows/execute.md +30 -2
  234. package/oxe/workflows/forensics.md +13 -9
  235. package/oxe/workflows/help.md +97 -49
  236. package/oxe/workflows/loop.md +17 -13
  237. package/oxe/workflows/obs.md +4 -0
  238. package/oxe/workflows/oxe.md +64 -31
  239. package/oxe/workflows/project.md +6 -1
  240. package/oxe/workflows/references/workflow-runtime-contracts.json +23 -0
  241. package/oxe/workflows/research.md +32 -28
  242. package/oxe/workflows/retro.md +4 -0
  243. package/oxe/workflows/review-pr.md +15 -11
  244. package/oxe/workflows/scan.md +4 -0
  245. package/oxe/workflows/security.md +14 -10
  246. package/oxe/workflows/session.md +17 -1
  247. package/oxe/workflows/ship.md +142 -0
  248. package/oxe/workflows/spec.md +15 -0
  249. package/oxe/workflows/ui-review.md +20 -16
  250. package/oxe/workflows/ui-spec.md +7 -3
  251. package/oxe/workflows/validate-gaps.md +13 -9
  252. package/oxe/workflows/verify.md +42 -3
  253. package/package.json +9 -3
  254. package/packages/runtime/package.json +17 -0
  255. package/packages/runtime/src/audit/audit-trail.ts +243 -0
  256. package/packages/runtime/src/audit/index.ts +2 -0
  257. package/packages/runtime/src/audit/policy-pack.ts +62 -0
  258. package/packages/runtime/src/compiler/graph-compiler.ts +245 -0
  259. package/packages/runtime/src/compiler/index.ts +1 -0
  260. package/packages/runtime/src/context/context-pack-builder.ts +259 -0
  261. package/packages/runtime/src/context/context-pack-store.ts +197 -0
  262. package/packages/runtime/src/context/context-profiles.ts +60 -0
  263. package/packages/runtime/src/context/index.ts +3 -0
  264. package/packages/runtime/src/decision/decision-engine.ts +174 -0
  265. package/packages/runtime/src/decision/decision-memo.ts +211 -0
  266. package/packages/runtime/src/decision/index.ts +2 -0
  267. package/packages/runtime/src/delivery/branch-manager.ts +84 -0
  268. package/packages/runtime/src/delivery/ci-checks.ts +252 -0
  269. package/packages/runtime/src/delivery/index.ts +4 -0
  270. package/packages/runtime/src/delivery/pr-manager.ts +112 -0
  271. package/packages/runtime/src/delivery/promotion-pipeline.ts +180 -0
  272. package/packages/runtime/src/events/bus.ts +92 -0
  273. package/packages/runtime/src/events/catalog.ts +29 -0
  274. package/packages/runtime/src/events/envelope.ts +14 -0
  275. package/packages/runtime/src/events/index.ts +3 -0
  276. package/packages/runtime/src/evidence/evidence-store.ts +130 -0
  277. package/packages/runtime/src/evidence/index.ts +1 -0
  278. package/packages/runtime/src/gate/gate-manager.ts +137 -0
  279. package/packages/runtime/src/gate/index.ts +1 -0
  280. package/packages/runtime/src/index.ts +37 -0
  281. package/packages/runtime/src/models/attempt.ts +19 -0
  282. package/packages/runtime/src/models/evidence.ts +21 -0
  283. package/packages/runtime/src/models/gate-decision.ts +21 -0
  284. package/packages/runtime/src/models/index.ts +8 -0
  285. package/packages/runtime/src/models/run.ts +24 -0
  286. package/packages/runtime/src/models/session.ts +11 -0
  287. package/packages/runtime/src/models/verification-result.ts +10 -0
  288. package/packages/runtime/src/models/work-item.ts +25 -0
  289. package/packages/runtime/src/models/workspace.ts +28 -0
  290. package/packages/runtime/src/plugins/capability-matrix.ts +83 -0
  291. package/packages/runtime/src/plugins/index.ts +4 -0
  292. package/packages/runtime/src/plugins/plugin-abi.ts +95 -0
  293. package/packages/runtime/src/plugins/plugin-manifest.ts +113 -0
  294. package/packages/runtime/src/plugins/plugin-registry.ts +124 -0
  295. package/packages/runtime/src/policy/index.ts +1 -0
  296. package/packages/runtime/src/policy/policy-engine.ts +244 -0
  297. package/packages/runtime/src/projection/index.ts +1 -0
  298. package/packages/runtime/src/projection/projection-engine.ts +249 -0
  299. package/packages/runtime/src/reducers/debug-reducer.ts +36 -0
  300. package/packages/runtime/src/reducers/index.ts +2 -0
  301. package/packages/runtime/src/reducers/run-state-reducer.ts +269 -0
  302. package/packages/runtime/src/scheduler/agent-registry.ts +132 -0
  303. package/packages/runtime/src/scheduler/agent-roles.ts +109 -0
  304. package/packages/runtime/src/scheduler/index.ts +4 -0
  305. package/packages/runtime/src/scheduler/multi-agent-coordinator.ts +333 -0
  306. package/packages/runtime/src/scheduler/run-journal.ts +62 -0
  307. package/packages/runtime/src/scheduler/scheduler.ts +441 -0
  308. package/packages/runtime/src/verification/index.ts +2 -0
  309. package/packages/runtime/src/verification/verification-compiler.ts +225 -0
  310. package/packages/runtime/src/verification/verification-manifest.ts +192 -0
  311. package/packages/runtime/src/workspace/index.ts +5 -0
  312. package/packages/runtime/src/workspace/strategies/ephemeral-container.ts +121 -0
  313. package/packages/runtime/src/workspace/strategies/git-worktree.ts +77 -0
  314. package/packages/runtime/src/workspace/strategies/inplace.ts +35 -0
  315. package/packages/runtime/src/workspace/workspace-manager.ts +15 -0
  316. package/packages/runtime/tsconfig.json +17 -0
  317. package/vscode-extension/oxe-agents-0.9.2.vsix +0 -0
  318. package/vscode-extension/oxe-agents-1.0.0.vsix +0 -0
  319. package/vscode-extension/package.json +1 -1
@@ -0,0 +1,129 @@
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.saveManifest = saveManifest;
10
+ exports.loadManifest = loadManifest;
11
+ exports.saveRiskLedger = saveRiskLedger;
12
+ exports.loadRiskLedger = loadRiskLedger;
13
+ const crypto_1 = __importDefault(require("crypto"));
14
+ const path_1 = __importDefault(require("path"));
15
+ const fs_1 = __importDefault(require("fs"));
16
+ const PROFILE_REQUIRED_CHECKS = {
17
+ quick: ['deterministic'],
18
+ standard: ['deterministic', 'policy_failure'],
19
+ critical: ['deterministic', 'policy_failure', 'evidence_missing', 'flaky'],
20
+ };
21
+ function classifyFailure(result) {
22
+ if (result.status === 'pass' || result.status === 'skip')
23
+ return null;
24
+ if (result.error && (result.error.toLowerCase().includes('timeout') || result.error.toLowerCase().includes('timed out')))
25
+ return 'timeout';
26
+ if (result.exit_code === null && result.error)
27
+ return 'env_setup';
28
+ if (result.stderr.toLowerCase().includes('policy') || result.stderr.toLowerCase().includes('denied')) {
29
+ return 'policy_failure';
30
+ }
31
+ if (result.exit_code !== 0 && result.stderr === '' && result.stdout === '')
32
+ return 'evidence_missing';
33
+ // Default: non-deterministic signals (no reliable exit code pattern)
34
+ return 'deterministic';
35
+ }
36
+ function buildManifest(runId, results, options = {}) {
37
+ const profile = options.profile ?? 'standard';
38
+ const granularity = options.granularity ?? 'run';
39
+ const evidenceRefs = options.evidenceRefs ?? new Map();
40
+ const checks = results.map((r) => ({
41
+ check_id: r.check_id,
42
+ acceptance_ref: r.acceptance_ref,
43
+ status: r.status,
44
+ failure_class: classifyFailure(r),
45
+ evidence_refs: evidenceRefs.get(r.check_id) ?? [],
46
+ duration_ms: r.duration_ms,
47
+ }));
48
+ const summary = {
49
+ total: checks.length,
50
+ pass: checks.filter((c) => c.status === 'pass').length,
51
+ fail: checks.filter((c) => c.status === 'fail').length,
52
+ skip: checks.filter((c) => c.status === 'skip').length,
53
+ error: checks.filter((c) => c.status === 'error').length,
54
+ all_passed: checks.every((c) => c.status === 'pass' || c.status === 'skip'),
55
+ };
56
+ return {
57
+ manifest_id: `vm-${crypto_1.default.randomBytes(4).toString('hex')}`,
58
+ run_id: runId,
59
+ work_item_id: options.workItemId ?? null,
60
+ wave: options.wave ?? null,
61
+ granularity,
62
+ profile,
63
+ compiled_at: new Date().toISOString(),
64
+ checks,
65
+ summary,
66
+ };
67
+ }
68
+ function buildRiskLedger(runId, manifest) {
69
+ const risks = [];
70
+ for (const check of manifest.checks) {
71
+ if (check.status === 'pass' || check.status === 'skip')
72
+ continue;
73
+ if (!check.failure_class)
74
+ continue;
75
+ const required = PROFILE_REQUIRED_CHECKS[manifest.profile];
76
+ if (!required.includes(check.failure_class))
77
+ continue;
78
+ risks.push({
79
+ risk_id: `risk-${crypto_1.default.randomBytes(3).toString('hex')}`,
80
+ work_item_id: manifest.work_item_id,
81
+ check_id: check.check_id,
82
+ failure_class: check.failure_class,
83
+ description: `Check ${check.check_id} ${check.status}: ${check.failure_class}`,
84
+ severity: check.failure_class === 'policy_failure' || check.failure_class === 'deterministic'
85
+ ? 'high'
86
+ : check.failure_class === 'evidence_missing'
87
+ ? 'medium'
88
+ : 'low',
89
+ mitigation: null,
90
+ });
91
+ }
92
+ return {
93
+ run_id: runId,
94
+ generated_at: new Date().toISOString(),
95
+ risks,
96
+ };
97
+ }
98
+ function saveManifest(projectRoot, runId, manifest) {
99
+ const p = path_1.default.join(projectRoot, '.oxe', 'runs', runId, 'verification-manifest.json');
100
+ fs_1.default.mkdirSync(path_1.default.dirname(p), { recursive: true });
101
+ fs_1.default.writeFileSync(p, JSON.stringify(manifest, null, 2), 'utf8');
102
+ }
103
+ function loadManifest(projectRoot, runId) {
104
+ const p = path_1.default.join(projectRoot, '.oxe', 'runs', runId, 'verification-manifest.json');
105
+ if (!fs_1.default.existsSync(p))
106
+ return null;
107
+ try {
108
+ return JSON.parse(fs_1.default.readFileSync(p, 'utf8'));
109
+ }
110
+ catch {
111
+ return null;
112
+ }
113
+ }
114
+ function saveRiskLedger(projectRoot, runId, ledger) {
115
+ const p = path_1.default.join(projectRoot, '.oxe', 'runs', runId, 'residual-risks.json');
116
+ fs_1.default.mkdirSync(path_1.default.dirname(p), { recursive: true });
117
+ fs_1.default.writeFileSync(p, JSON.stringify(ledger, null, 2), 'utf8');
118
+ }
119
+ function loadRiskLedger(projectRoot, runId) {
120
+ const p = path_1.default.join(projectRoot, '.oxe', 'runs', runId, 'residual-risks.json');
121
+ if (!fs_1.default.existsSync(p))
122
+ return null;
123
+ try {
124
+ return JSON.parse(fs_1.default.readFileSync(p, 'utf8'));
125
+ }
126
+ catch {
127
+ return null;
128
+ }
129
+ }
@@ -0,0 +1,5 @@
1
+ export * from './workspace-manager';
2
+ export { InplaceWorkspaceManager } from './strategies/inplace';
3
+ export { GitWorktreeManager } from './strategies/git-worktree';
4
+ export { EphemeralContainerManager } from './strategies/ephemeral-container';
5
+ export type { ContainerOptions } from './strategies/ephemeral-container';
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.EphemeralContainerManager = exports.GitWorktreeManager = exports.InplaceWorkspaceManager = void 0;
18
+ __exportStar(require("./workspace-manager"), exports);
19
+ var inplace_1 = require("./strategies/inplace");
20
+ Object.defineProperty(exports, "InplaceWorkspaceManager", { enumerable: true, get: function () { return inplace_1.InplaceWorkspaceManager; } });
21
+ var git_worktree_1 = require("./strategies/git-worktree");
22
+ Object.defineProperty(exports, "GitWorktreeManager", { enumerable: true, get: function () { return git_worktree_1.GitWorktreeManager; } });
23
+ var ephemeral_container_1 = require("./strategies/ephemeral-container");
24
+ Object.defineProperty(exports, "EphemeralContainerManager", { enumerable: true, get: function () { return ephemeral_container_1.EphemeralContainerManager; } });
@@ -0,0 +1,22 @@
1
+ import type { WorkspaceManager, WorkspaceRequest } from '../workspace-manager';
2
+ import type { WorkspaceLease, SnapshotRef } from '../../models/workspace';
3
+ export interface ContainerOptions {
4
+ image: string;
5
+ mountPath: string;
6
+ extraEnv?: Record<string, string>;
7
+ /** Gracefully fall back to git_worktree if Docker is unavailable */
8
+ fallback?: boolean;
9
+ }
10
+ export declare class EphemeralContainerManager implements WorkspaceManager {
11
+ private readonly projectRoot;
12
+ private readonly opts;
13
+ private readonly fallbackManager;
14
+ private containerIds;
15
+ private useFallback;
16
+ constructor(projectRoot: string, opts?: ContainerOptions);
17
+ get usingFallback(): boolean;
18
+ allocate(req: WorkspaceRequest): Promise<WorkspaceLease>;
19
+ snapshot(id: string): Promise<SnapshotRef>;
20
+ reset(id: string, snapRef: SnapshotRef): Promise<void>;
21
+ dispose(id: string): Promise<void>;
22
+ }
@@ -0,0 +1,109 @@
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.EphemeralContainerManager = void 0;
7
+ const child_process_1 = require("child_process");
8
+ const crypto_1 = __importDefault(require("crypto"));
9
+ const git_worktree_1 = require("./git-worktree");
10
+ function isDockerAvailable() {
11
+ const result = (0, child_process_1.spawnSync)('docker', ['version', '--format', '{{.Server.Version}}'], {
12
+ encoding: 'utf8',
13
+ timeout: 5000,
14
+ });
15
+ return result.status === 0;
16
+ }
17
+ class EphemeralContainerManager {
18
+ constructor(projectRoot, opts = { image: 'node:20-alpine', mountPath: '/workspace', fallback: true }) {
19
+ this.projectRoot = projectRoot;
20
+ this.opts = opts;
21
+ this.containerIds = new Map();
22
+ this.useFallback = false;
23
+ this.fallbackManager = new git_worktree_1.GitWorktreeManager(projectRoot);
24
+ if (!isDockerAvailable()) {
25
+ if (opts.fallback !== false) {
26
+ this.useFallback = true;
27
+ }
28
+ else {
29
+ throw new Error('Docker is not available and fallback is disabled');
30
+ }
31
+ }
32
+ }
33
+ get usingFallback() { return this.useFallback; }
34
+ async allocate(req) {
35
+ if (this.useFallback)
36
+ return this.fallbackManager.allocate(req);
37
+ const wsId = `ws-container-${req.work_item_id}-a${req.attempt_number}`;
38
+ const envArgs = Object.entries(this.opts.extraEnv ?? {}).flatMap(([k, v]) => ['-e', `${k}=${v}`]);
39
+ const result = (0, child_process_1.spawnSync)('docker', [
40
+ 'run', '-d',
41
+ '-v', `${this.projectRoot}:${this.opts.mountPath}`,
42
+ '-w', this.opts.mountPath,
43
+ ...envArgs,
44
+ this.opts.image,
45
+ 'sleep', '3600',
46
+ ], { encoding: 'utf8' });
47
+ if (result.status !== 0) {
48
+ if (this.opts.fallback !== false) {
49
+ this.useFallback = true;
50
+ return this.fallbackManager.allocate(req);
51
+ }
52
+ throw new Error(`docker run failed: ${result.stderr}`);
53
+ }
54
+ const containerId = result.stdout.trim().slice(0, 12);
55
+ this.containerIds.set(wsId, containerId);
56
+ return {
57
+ workspace_id: wsId,
58
+ strategy: 'ephemeral_container',
59
+ branch: null,
60
+ base_commit: null,
61
+ root_path: `docker:${containerId}:${this.opts.mountPath}`,
62
+ ttl_minutes: 60,
63
+ };
64
+ }
65
+ async snapshot(id) {
66
+ if (this.useFallback)
67
+ return this.fallbackManager.snapshot(id);
68
+ const containerId = this.containerIds.get(id);
69
+ if (!containerId)
70
+ throw new Error(`Container for workspace ${id} not found`);
71
+ const tag = `oxe-snap-${crypto_1.default.randomBytes(4).toString('hex')}`;
72
+ (0, child_process_1.execFileSync)('docker', ['commit', containerId, tag]);
73
+ return {
74
+ snapshot_id: tag,
75
+ workspace_id: id,
76
+ commit: tag,
77
+ created_at: new Date().toISOString(),
78
+ };
79
+ }
80
+ async reset(id, snapRef) {
81
+ if (this.useFallback)
82
+ return this.fallbackManager.reset(id, snapRef);
83
+ const containerId = this.containerIds.get(id);
84
+ if (!containerId)
85
+ return;
86
+ // Stop current container and start from snapshot
87
+ (0, child_process_1.spawnSync)('docker', ['stop', containerId]);
88
+ (0, child_process_1.spawnSync)('docker', ['rm', containerId]);
89
+ const result = (0, child_process_1.spawnSync)('docker', [
90
+ 'run', '-d',
91
+ '-v', `${this.projectRoot}:${this.opts.mountPath}`,
92
+ snapRef.commit,
93
+ 'sleep', '3600',
94
+ ], { encoding: 'utf8' });
95
+ const newId = result.stdout.trim().slice(0, 12);
96
+ this.containerIds.set(id, newId);
97
+ }
98
+ async dispose(id) {
99
+ if (this.useFallback)
100
+ return this.fallbackManager.dispose(id);
101
+ const containerId = this.containerIds.get(id);
102
+ if (!containerId)
103
+ return;
104
+ (0, child_process_1.spawnSync)('docker', ['stop', containerId], { encoding: 'utf8' });
105
+ (0, child_process_1.spawnSync)('docker', ['rm', containerId], { encoding: 'utf8' });
106
+ this.containerIds.delete(id);
107
+ }
108
+ }
109
+ exports.EphemeralContainerManager = EphemeralContainerManager;
@@ -0,0 +1,12 @@
1
+ import type { WorkspaceManager, WorkspaceRequest } from '../workspace-manager';
2
+ import type { WorkspaceLease, SnapshotRef } from '../../models/workspace';
3
+ export declare class GitWorktreeManager implements WorkspaceManager {
4
+ private readonly projectRoot;
5
+ private leases;
6
+ constructor(projectRoot: string);
7
+ allocate(req: WorkspaceRequest): Promise<WorkspaceLease>;
8
+ snapshot(id: string): Promise<SnapshotRef>;
9
+ reset(id: string, snapRef: SnapshotRef): Promise<void>;
10
+ dispose(id: string): Promise<void>;
11
+ private git;
12
+ }
@@ -0,0 +1,79 @@
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.GitWorktreeManager = void 0;
7
+ const child_process_1 = require("child_process");
8
+ const path_1 = __importDefault(require("path"));
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const crypto_1 = __importDefault(require("crypto"));
11
+ class GitWorktreeManager {
12
+ constructor(projectRoot) {
13
+ this.projectRoot = projectRoot;
14
+ this.leases = new Map();
15
+ }
16
+ async allocate(req) {
17
+ const wsId = `ws-${req.work_item_id}-a${req.attempt_number}`;
18
+ const branch = `oxe/${req.work_item_id}-attempt${req.attempt_number}`;
19
+ const worktreePath = path_1.default.join(this.projectRoot, '.oxe', 'workspaces', wsId);
20
+ const baseCommit = this.git(['rev-parse', 'HEAD']).trim();
21
+ fs_1.default.mkdirSync(path_1.default.dirname(worktreePath), { recursive: true });
22
+ // Create worktree on a new branch starting from HEAD
23
+ this.git(['worktree', 'add', worktreePath, '-b', branch]);
24
+ const lease = {
25
+ workspace_id: wsId,
26
+ strategy: 'git_worktree',
27
+ branch,
28
+ base_commit: baseCommit,
29
+ root_path: worktreePath,
30
+ ttl_minutes: 45,
31
+ };
32
+ this.leases.set(wsId, lease);
33
+ return lease;
34
+ }
35
+ async snapshot(id) {
36
+ const lease = this.leases.get(id);
37
+ if (!lease || !lease.root_path)
38
+ throw new Error(`Workspace ${id} not found`);
39
+ const commit = this.git(['rev-parse', 'HEAD'], lease.root_path).trim();
40
+ return {
41
+ snapshot_id: `snap-${crypto_1.default.randomBytes(4).toString('hex')}`,
42
+ workspace_id: id,
43
+ commit,
44
+ created_at: new Date().toISOString(),
45
+ };
46
+ }
47
+ async reset(id, snapRef) {
48
+ const lease = this.leases.get(id);
49
+ if (!lease)
50
+ return;
51
+ this.git(['reset', '--hard', snapRef.commit], lease.root_path);
52
+ }
53
+ async dispose(id) {
54
+ const lease = this.leases.get(id);
55
+ if (!lease)
56
+ return;
57
+ try {
58
+ this.git(['worktree', 'remove', lease.root_path, '--force']);
59
+ }
60
+ catch {
61
+ // worktree may already be gone
62
+ }
63
+ try {
64
+ if (lease.branch)
65
+ this.git(['branch', '-D', lease.branch]);
66
+ }
67
+ catch {
68
+ // branch may already be deleted
69
+ }
70
+ this.leases.delete(id);
71
+ }
72
+ git(args, cwd) {
73
+ return (0, child_process_1.execFileSync)('git', args, {
74
+ cwd: cwd ?? this.projectRoot,
75
+ encoding: 'utf8',
76
+ });
77
+ }
78
+ }
79
+ exports.GitWorktreeManager = GitWorktreeManager;
@@ -0,0 +1,10 @@
1
+ import type { WorkspaceManager, WorkspaceRequest } from '../workspace-manager';
2
+ import type { WorkspaceLease, SnapshotRef } from '../../models/workspace';
3
+ export declare class InplaceWorkspaceManager implements WorkspaceManager {
4
+ private readonly projectRoot;
5
+ constructor(projectRoot: string);
6
+ allocate(req: WorkspaceRequest): Promise<WorkspaceLease>;
7
+ snapshot(id: string): Promise<SnapshotRef>;
8
+ reset(_id: string, _snapRef: SnapshotRef): Promise<void>;
9
+ dispose(_id: string): Promise<void>;
10
+ }
@@ -0,0 +1,37 @@
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.InplaceWorkspaceManager = void 0;
7
+ const crypto_1 = __importDefault(require("crypto"));
8
+ class InplaceWorkspaceManager {
9
+ constructor(projectRoot) {
10
+ this.projectRoot = projectRoot;
11
+ }
12
+ async allocate(req) {
13
+ return {
14
+ workspace_id: `ws-inplace-${req.work_item_id}-a${req.attempt_number}`,
15
+ strategy: 'inplace',
16
+ branch: null,
17
+ base_commit: null,
18
+ root_path: this.projectRoot,
19
+ ttl_minutes: 60,
20
+ };
21
+ }
22
+ async snapshot(id) {
23
+ return {
24
+ snapshot_id: `snap-${crypto_1.default.randomBytes(4).toString('hex')}`,
25
+ workspace_id: id,
26
+ commit: 'HEAD',
27
+ created_at: new Date().toISOString(),
28
+ };
29
+ }
30
+ async reset(_id, _snapRef) {
31
+ // inplace: no filesystem isolation — reset is a no-op
32
+ }
33
+ async dispose(_id) {
34
+ // inplace: nothing to tear down
35
+ }
36
+ }
37
+ exports.InplaceWorkspaceManager = InplaceWorkspaceManager;
@@ -0,0 +1,13 @@
1
+ import type { WorkspaceLease, SnapshotRef, WorkspaceStrategy } from '../models/workspace';
2
+ export interface WorkspaceRequest {
3
+ work_item_id: string;
4
+ attempt_number: number;
5
+ strategy: WorkspaceStrategy;
6
+ mutation_scope: string[];
7
+ }
8
+ export interface WorkspaceManager {
9
+ allocate(req: WorkspaceRequest): Promise<WorkspaceLease>;
10
+ snapshot(id: string): Promise<SnapshotRef>;
11
+ reset(id: string, snapRef: SnapshotRef): Promise<void>;
12
+ dispose(id: string): Promise<void>;
13
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/lib/sdk/index.cjs CHANGED
@@ -648,13 +648,20 @@ 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
- applyRuntimeAction: operational.applyRuntimeAction,
656
- parseCapabilityManifest: operational.parseCapabilityManifest,
657
- 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
+ applyRuntimeAction: operational.applyRuntimeAction,
663
+ parseCapabilityManifest: operational.parseCapabilityManifest,
664
+ readCapabilityCatalog: operational.readCapabilityCatalog,
658
665
  buildMemoryLayers: operational.buildMemoryLayers,
659
666
  replayEvents: operational.replayEvents,
660
667
  },
@@ -735,3 +742,13 @@ module.exports = {
735
742
  /** Um único objeto com verificações tipo `doctor` + relatório de saúde. */
736
743
  runDoctorChecks,
737
744
  };
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
+ }
@@ -573,13 +573,20 @@ export interface OxeSdk {
573
573
  operationalPaths: (projectRoot: string, activeSession: string | null) => Record<string, string | null>;
574
574
  appendEvent: (projectRoot: string, activeSession: string | null, event?: Record<string, unknown>) => Record<string, unknown>;
575
575
  readEvents: (projectRoot: string, activeSession: string | null) => Array<Record<string, unknown>>;
576
- summarizeEvents: (events: Array<Record<string, unknown>>) => Record<string, unknown>;
577
- writeRunState: (projectRoot: string, activeSession: string | null, runState?: Record<string, unknown>) => Record<string, unknown>;
578
- readRunState: (projectRoot: string, activeSession: string | null) => Record<string, unknown> | null;
579
- buildOperationalGraph: (runState?: Record<string, unknown>) => { nodes: Array<Record<string, unknown>>; edges: Array<Record<string, unknown>> };
580
- applyRuntimeAction: (projectRoot: string, activeSession: string | null, input?: Record<string, unknown>) => Record<string, unknown>;
581
- parseCapabilityManifest: (text: string) => Record<string, unknown>;
582
- readCapabilityCatalog: (projectRoot: string) => Array<Record<string, unknown>>;
576
+ summarizeEvents: (events: Array<Record<string, unknown>>) => Record<string, unknown>;
577
+ writeRunState: (projectRoot: string, activeSession: string | null, runState?: Record<string, unknown>) => Record<string, unknown>;
578
+ readRunState: (projectRoot: string, activeSession: string | null) => Record<string, unknown> | null;
579
+ buildOperationalGraph: (runState?: Record<string, unknown>) => { nodes: Array<Record<string, unknown>>; edges: Array<Record<string, unknown>> };
580
+ serializeCanonicalState: (state: unknown) => Record<string, unknown> | null;
581
+ hydrateCanonicalState: (serialized: unknown) => Record<string, unknown>;
582
+ reduceCanonicalRunState: (projectRoot: string, activeSession: string | null, options?: Record<string, unknown>) => Record<string, unknown> | null;
583
+ compileExecutionGraphFromArtifacts: (projectRoot: string, activeSession: string | null, options?: Record<string, unknown>) => Record<string, unknown>;
584
+ compileVerificationSuiteFromArtifacts: (projectRoot: string, activeSession: string | null, options?: Record<string, unknown>) => Record<string, unknown>;
585
+ projectRuntimeArtifacts: (projectRoot: string, activeSession: string | null, options?: Record<string, unknown>) => Record<string, unknown>;
586
+ runRuntimeCiChecks: (projectRoot: string, activeSession: string | null, options?: Record<string, unknown>) => Promise<Record<string, unknown>>;
587
+ applyRuntimeAction: (projectRoot: string, activeSession: string | null, input?: Record<string, unknown>) => Record<string, unknown>;
588
+ parseCapabilityManifest: (text: string) => Record<string, unknown>;
589
+ readCapabilityCatalog: (projectRoot: string) => Array<Record<string, unknown>>;
583
590
  buildMemoryLayers: (projectRoot: string, activeSession: string | null) => Record<string, unknown>;
584
591
  replayEvents: (projectRoot: string, activeSession: string | null, options?: {
585
592
  fromEventId?: string;
@@ -631,3 +638,6 @@ export interface OxeSdk {
631
638
 
632
639
  declare const sdk: OxeSdk;
633
640
  export = sdk;
641
+
642
+ // Re-exports from @oxe/runtime (R1 — Runtime Foundation)
643
+ export * from '../runtime/index';
@@ -1,5 +1,9 @@
1
1
  # OXE — Workflow: ask
2
2
 
3
+ > **[DEPRECATED v1.1.0]** Este comando foi incorporado por `/oxe`.
4
+ > Use: `/oxe "sua pergunta"` ou simplesmente `/oxe` para o próximo passo.
5
+ > Este alias continuará funcionando nesta versão por compatibilidade.
6
+
3
7
  <objective>
4
8
  Responder perguntas sobre a situação atual do trabalho OXE com máxima robustez, usando o contexto real do repositório, a sessão ativa quando existir, e os artefatos mais recentes da trilha.
5
9
  </objective>
@@ -1,7 +1,11 @@
1
1
  # OXE — Workflow: checkpoint
2
2
 
3
+ > **[DEPRECATED v1.1.0]** Este comando foi incorporado por `/oxe-execute`.
4
+ > Use: `/oxe-execute --checkpoint "<nome>"` para criar snapshot nomeado da sessão.
5
+ > Este alias continuará funcionando nesta versão por compatibilidade.
6
+
3
7
  <objective>
4
- Criar um **marco nomeado em disco** em `checkpoints/YYYY-MM-DD-HHmm-<slug>.md` do escopo resolvido e atualizar `CHECKPOINTS.md` correspondente (índice): **snapshot da sessão / trilha corrente** para pausar e retomar sem apagar SPEC/PLAN.
8
+ Criar um **marco nomeado em disco** em `checkpoints/YYYY-MM-DD-HHmm-<slug>.md` do escopo resolvido e atualizar `CHECKPOINTS.md` correspondente (índice): **snapshot da sessão / trilha corrente** para pausar e retomar sem apagar SPEC/PLAN.
5
9
 
6
10
  **Não** duplica o papel de `git commit` nem de `verify`; é **registo explícito** para humanos e agentes. Para **atualizar o mapa do projeto inteiro** e alinhar `.oxe/codebase/` ao código, usar **`compact.md`** (`/oxe-compact`), não este passo.
7
11
  </objective>
@@ -9,25 +13,25 @@ Criar um **marco nomeado em disco** em `checkpoints/YYYY-MM-DD-HHmm-<slug>.md` d
9
13
  <context>
10
14
  - **Checkpoint vs compact** e **momentos chave** da rotina: tabelas canónicas em **`help.md`** (secções *Checkpoint vs compact* e *Momentos chave*) — evitar divergência; este ficheiro descreve só a execução do checkpoint.
11
15
 
12
- - Entrada: texto do utilizador = **slug** e/ou **nota** (ex.: `antes-refactor-auth` + “estado estável, falta T4”).
13
- - Nome do ficheiro: **`YYYY-MM-DD-HHmm-<slug-kebab>.md`** (hora 24h local ou UTC — documentar na nota se misturar fusos).
14
- - Frontmatter YAML no checkpoint (ver `oxe/templates/CHECKPOINT.template.md`): `created`, `slug`, `linked` (lista de paths relativos à raiz do repo, tipicamente `.oxe/STATE.md`, `.oxe/SPEC.md`, …).
15
- - Resolver `active_session` conforme `oxe/workflows/references/session-path-resolution.md`. Com sessão ativa, checkpoints vivem em `.oxe/<active_session>/checkpoints/`; sem sessão ativa, usar `.oxe/checkpoints/`.
16
- - **Índice** `CHECKPOINTS.md` do mesmo escopo: tabela **mais recente primeiro** com colunas **Data** | **Ficheiro** | **Slug** | **Nota (1 linha)**.
16
+ - Entrada: texto do utilizador = **slug** e/ou **nota** (ex.: `antes-refactor-auth` + “estado estável, falta T4”).
17
+ - Nome do ficheiro: **`YYYY-MM-DD-HHmm-<slug-kebab>.md`** (hora 24h local ou UTC — documentar na nota se misturar fusos).
18
+ - Frontmatter YAML no checkpoint (ver `oxe/templates/CHECKPOINT.template.md`): `created`, `slug`, `linked` (lista de paths relativos à raiz do repo, tipicamente `.oxe/STATE.md`, `.oxe/SPEC.md`, …).
19
+ - Resolver `active_session` conforme `oxe/workflows/references/session-path-resolution.md`. Com sessão ativa, checkpoints vivem em `.oxe/<active_session>/checkpoints/`; sem sessão ativa, usar `.oxe/checkpoints/`.
20
+ - **Índice** `CHECKPOINTS.md` do mesmo escopo: tabela **mais recente primeiro** com colunas **Data** | **Ficheiro** | **Slug** | **Nota (1 linha)**.
17
21
  - Não mover nem apagar artefactos canónicos; o checkpoint é **documento adicional**.
18
22
  </context>
19
23
 
20
24
  <process>
21
- 1. Garantir pasta `checkpoints/` do escopo resolvido.
25
+ 1. Garantir pasta `checkpoints/` do escopo resolvido.
22
26
  2. Normalizar slug a partir dos argumentos do utilizador (kebab-case, ASCII; se vazio, usar `checkpoint`).
23
27
  3. Escolher nome único; se colisão, acrescentar sufixo `-b`, `-c`, …
24
28
  4. Escrever o ficheiro de checkpoint a partir do template: preencher frontmatter `linked` com os `.oxe/*.md` relevantes que **existem**; corpo com nota do utilizador e **snapshot** (trecho de STATE, uma linha de objetivo SPEC, resumo PLAN).
25
- 5. Se `CHECKPOINTS.md` do escopo resolvido não existir, criar com título `# OXE — Índice de checkpoints` e tabela com cabeçalho; senão, **inserir linha no topo** da tabela.
29
+ 5. Se `CHECKPOINTS.md` do escopo resolvido não existir, criar com título `# OXE — Índice de checkpoints` e tabela com cabeçalho; senão, **inserir linha no topo** da tabela.
26
30
  6. Responder no chat: caminho do ficheiro novo + como usar na retomada (ler checkpoint + `linked` + próximo `oxe:*`).
27
31
  </process>
28
32
 
29
33
  <success_criteria>
30
- - [ ] Novo ficheiro em `checkpoints/` do escopo correto com frontmatter e corpo úteis.
31
- - [ ] `CHECKPOINTS.md` do mesmo escopo atualizado com entrada correspondente.
34
+ - [ ] Novo ficheiro em `checkpoints/` do escopo correto com frontmatter e corpo úteis.
35
+ - [ ] `CHECKPOINTS.md` do mesmo escopo atualizado com entrada correspondente.
32
36
  - [ ] SPEC/PLAN/VERIFY intocados salvo o utilizador pedir outra coisa explicitamente.
33
37
  </success_criteria>
@@ -1,37 +1,41 @@
1
1
  # OXE — Workflow: debug
2
2
 
3
+ > **[DEPRECATED v1.1.0]** Este comando foi incorporado por `/oxe-execute`.
4
+ > Use: `/oxe-execute --debug` para ativar diagnóstico técnico explícito.
5
+ > Este alias continuará funcionando nesta versão por compatibilidade.
6
+
3
7
  <objective>
4
8
  Orientar **investigação técnica** de um sintoma (teste a falhar, erro em runtime, flake, regressão) **durante** a execução de tarefas do `PLAN.md` ou passos do `QUICK.md`: ciclo **hipótese → experiência mínima → evidência → próximo passo**.
5
9
 
6
10
  Diferente de **`verify`**, que audita **aceite** contra SPEC/PLAN. Depois de estabilizar com debug, a trilha continua com **`execute`** e, no fecho, **`verify`**.
7
11
  </objective>
8
12
 
9
- <context>
10
- - Aplicar `oxe/workflows/references/reasoning-execution.md`. O debug deve partir de evidência real, testar hipóteses pequenas e fechar com próximo passo único.
11
- - Pré-requisito: sintoma reproduzível ou descrição clara (mensagem de erro, Tn em falha).
12
- - Preferir ancorar ao identificador de tarefa **`Tn`** do `PLAN.md` do escopo resolvido quando existir.
13
- - Resolver `active_session` conforme `oxe/workflows/references/session-path-resolution.md`. Com sessão ativa, usar `.oxe/<active_session>/execution/DEBUG.md`; sem sessão ativa, usar `.oxe/DEBUG.md`.
14
- - Artefato: **`DEBUG.md`** no escopo correto — ficheiro único com **sessões** datadas (append); não dispersar em vários ficheiros sem convenção.
13
+ <context>
14
+ - Aplicar `oxe/workflows/references/reasoning-execution.md`. O debug deve partir de evidência real, testar hipóteses pequenas e fechar com próximo passo único.
15
+ - Pré-requisito: sintoma reproduzível ou descrição clara (mensagem de erro, Tn em falha).
16
+ - Preferir ancorar ao identificador de tarefa **`Tn`** do `PLAN.md` do escopo resolvido quando existir.
17
+ - Resolver `active_session` conforme `oxe/workflows/references/session-path-resolution.md`. Com sessão ativa, usar `.oxe/<active_session>/execution/DEBUG.md`; sem sessão ativa, usar `.oxe/DEBUG.md`.
18
+ - Artefato: **`DEBUG.md`** no escopo correto — ficheiro único com **sessões** datadas (append); não dispersar em vários ficheiros sem convenção.
15
19
  </context>
16
20
 
17
21
  <process>
18
- 1. Ler `PLAN.md` do escopo resolvido e `.oxe/STATE.md`; se o foco for uma tarefa, localizar **Tn** e o bloco **Verificar**.
19
- 2. Registar em **`DEBUG.md`** do escopo resolvido uma nova sessão:
22
+ 1. Ler `PLAN.md` do escopo resolvido e `.oxe/STATE.md`; se o foco for uma tarefa, localizar **Tn** e o bloco **Verificar**.
23
+ 2. Registar em **`DEBUG.md`** do escopo resolvido uma nova sessão:
20
24
  - **Data** / **Sintoma** (com stack ou comando que falhou).
21
25
  - **Hipóteses** (ordenadas por plausibilidade).
22
26
  - **Experiências** — o que foi tentado e resultado (uma linha cada).
23
27
  - **Evidência atual** — ficheiros, linhas, conclusão parcial.
24
28
  - **Próximo passo:** `execute` (continuar correção) | `discuss` (decisão técnica em grupo) | `spec` ou `plan` (requisito ambíguo ou impossível como escrito).
25
29
  3. Se a causa for **requisito errado**, documentar em DEBUG e recomendar **`/oxe-spec`** ou **`/oxe-plan`** (e opcionalmente **`/oxe-discuss`**).
26
- 4. Resumo no chat em ≤8 linhas, nesta ordem:
27
- - **Contexto lido**
28
- - **Hipótese principal**
29
- - **Evidência atual**
30
- - **Próximo passo**
31
- </process>
30
+ 4. Resumo no chat em ≤8 linhas, nesta ordem:
31
+ - **Contexto lido**
32
+ - **Hipótese principal**
33
+ - **Evidência atual**
34
+ - **Próximo passo**
35
+ </process>
32
36
 
33
37
  <success_criteria>
34
- - [ ] `DEBUG.md` no escopo correto contém sessão datada com sintoma e **Próximo passo** explícito.
38
+ - [ ] `DEBUG.md` no escopo correto contém sessão datada com sintoma e **Próximo passo** explícito.
35
39
  - [ ] Quando aplicável, a sessão referencia **Tn** do PLAN.
36
40
  - [ ] Não se confunde com verify: não se declara “entrega aprovada” só com debug.
37
41
  </success_criteria>