@ornexus/neocortex 4.60.16

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 (235) hide show
  1. package/LICENSE +56 -0
  2. package/LICENSE-COMMERCIAL.md +70 -0
  3. package/README.md +58 -0
  4. package/dist/sbom.cdx.json +11159 -0
  5. package/docs/install/coderabbit-manual-setup.md +86 -0
  6. package/docs/install/installer-diagnostics.md +107 -0
  7. package/docs/install/linux-global-install.md +97 -0
  8. package/install.js +572 -0
  9. package/install.ps1 +2214 -0
  10. package/install.sh +2013 -0
  11. package/package.json +132 -0
  12. package/packages/client/dist/adapters/adapter-registry.d.ts +61 -0
  13. package/packages/client/dist/adapters/adapter-registry.js +1 -0
  14. package/packages/client/dist/adapters/antigravity-adapter.d.ts +18 -0
  15. package/packages/client/dist/adapters/antigravity-adapter.js +2 -0
  16. package/packages/client/dist/adapters/claude-code-adapter.d.ts +19 -0
  17. package/packages/client/dist/adapters/claude-code-adapter.js +3 -0
  18. package/packages/client/dist/adapters/codex-adapter.d.ts +19 -0
  19. package/packages/client/dist/adapters/codex-adapter.js +2 -0
  20. package/packages/client/dist/adapters/cursor-adapter.d.ts +19 -0
  21. package/packages/client/dist/adapters/cursor-adapter.js +4 -0
  22. package/packages/client/dist/adapters/gemini-adapter.d.ts +18 -0
  23. package/packages/client/dist/adapters/gemini-adapter.js +2 -0
  24. package/packages/client/dist/adapters/index.d.ts +19 -0
  25. package/packages/client/dist/adapters/index.js +1 -0
  26. package/packages/client/dist/adapters/platform-detector.d.ts +48 -0
  27. package/packages/client/dist/adapters/platform-detector.js +1 -0
  28. package/packages/client/dist/adapters/target-adapter.d.ts +70 -0
  29. package/packages/client/dist/adapters/target-adapter.js +0 -0
  30. package/packages/client/dist/adapters/vscode-adapter.d.ts +19 -0
  31. package/packages/client/dist/adapters/vscode-adapter.js +2 -0
  32. package/packages/client/dist/agent/refresh-stubs.d.ts +90 -0
  33. package/packages/client/dist/agent/refresh-stubs.js +2 -0
  34. package/packages/client/dist/agent/update-agent-yaml.d.ts +26 -0
  35. package/packages/client/dist/agent/update-agent-yaml.js +1 -0
  36. package/packages/client/dist/agent/update-description.d.ts +45 -0
  37. package/packages/client/dist/agent/update-description.js +1 -0
  38. package/packages/client/dist/cache/crypto-utils.d.ts +30 -0
  39. package/packages/client/dist/cache/crypto-utils.js +1 -0
  40. package/packages/client/dist/cache/encrypted-cache.d.ts +30 -0
  41. package/packages/client/dist/cache/encrypted-cache.js +1 -0
  42. package/packages/client/dist/cache/in-memory-asset-cache.d.ts +62 -0
  43. package/packages/client/dist/cache/in-memory-asset-cache.js +1 -0
  44. package/packages/client/dist/cache/index.d.ts +13 -0
  45. package/packages/client/dist/cache/index.js +1 -0
  46. package/packages/client/dist/cache/protected-pi-boundary.d.ts +19 -0
  47. package/packages/client/dist/cache/protected-pi-boundary.js +1 -0
  48. package/packages/client/dist/checkpoint/checkpoint-client-reader.d.ts +45 -0
  49. package/packages/client/dist/checkpoint/checkpoint-client-reader.js +2 -0
  50. package/packages/client/dist/checkpoint/index.d.ts +12 -0
  51. package/packages/client/dist/checkpoint/index.js +1 -0
  52. package/packages/client/dist/checkpoint/shared-checkpoint-types.d.ts +85 -0
  53. package/packages/client/dist/checkpoint/shared-checkpoint-types.js +1 -0
  54. package/packages/client/dist/cli.d.ts +14 -0
  55. package/packages/client/dist/cli.js +81 -0
  56. package/packages/client/dist/commands/activate.d.ts +55 -0
  57. package/packages/client/dist/commands/activate.js +8 -0
  58. package/packages/client/dist/commands/cache-status.d.ts +39 -0
  59. package/packages/client/dist/commands/cache-status.js +2 -0
  60. package/packages/client/dist/commands/invoke.d.ts +546 -0
  61. package/packages/client/dist/commands/invoke.js +140 -0
  62. package/packages/client/dist/commands/refresh-memory.d.ts +11 -0
  63. package/packages/client/dist/commands/refresh-memory.js +1 -0
  64. package/packages/client/dist/config/resolver-selection.d.ts +40 -0
  65. package/packages/client/dist/config/resolver-selection.js +1 -0
  66. package/packages/client/dist/config/secure-config.d.ts +78 -0
  67. package/packages/client/dist/config/secure-config.js +12 -0
  68. package/packages/client/dist/constants.d.ts +25 -0
  69. package/packages/client/dist/constants.js +1 -0
  70. package/packages/client/dist/context/context-collector.d.ts +28 -0
  71. package/packages/client/dist/context/context-collector.js +2 -0
  72. package/packages/client/dist/context/context-sanitizer.d.ts +28 -0
  73. package/packages/client/dist/context/context-sanitizer.js +1 -0
  74. package/packages/client/dist/continuity/autonomous-governance.d.ts +84 -0
  75. package/packages/client/dist/continuity/autonomous-governance.js +1 -0
  76. package/packages/client/dist/continuity/continuity-client-state-store.d.ts +302 -0
  77. package/packages/client/dist/continuity/continuity-client-state-store.js +1 -0
  78. package/packages/client/dist/continuity/invoke-hooks.d.ts +19 -0
  79. package/packages/client/dist/continuity/invoke-hooks.js +1 -0
  80. package/packages/client/dist/continuity/migrations/001-initial-schema.d.ts +11 -0
  81. package/packages/client/dist/continuity/migrations/001-initial-schema.js +263 -0
  82. package/packages/client/dist/continuity/migrations/002-processing-output-summary-indexes.d.ts +11 -0
  83. package/packages/client/dist/continuity/migrations/002-processing-output-summary-indexes.js +7 -0
  84. package/packages/client/dist/continuity/migrations/003-headless-execution-attempts.d.ts +11 -0
  85. package/packages/client/dist/continuity/migrations/003-headless-execution-attempts.js +62 -0
  86. package/packages/client/dist/continuity/migrations/004-outbox-delivery-state.d.ts +11 -0
  87. package/packages/client/dist/continuity/migrations/004-outbox-delivery-state.js +19 -0
  88. package/packages/client/dist/continuity/migrations/005-bounded-headless-queue.d.ts +11 -0
  89. package/packages/client/dist/continuity/migrations/005-bounded-headless-queue.js +35 -0
  90. package/packages/client/dist/continuity/outbox.d.ts +83 -0
  91. package/packages/client/dist/continuity/outbox.js +1 -0
  92. package/packages/client/dist/continuity/runner-bootstrap-policy.d.ts +50 -0
  93. package/packages/client/dist/continuity/runner-bootstrap-policy.js +1 -0
  94. package/packages/client/dist/continuity/sqlite-store.d.ts +926 -0
  95. package/packages/client/dist/continuity/sqlite-store.js +619 -0
  96. package/packages/client/dist/errors/error-messages.d.ts +40 -0
  97. package/packages/client/dist/errors/error-messages.js +2 -0
  98. package/packages/client/dist/graph-retrieval/pre-command-hook.d.ts +34 -0
  99. package/packages/client/dist/graph-retrieval/pre-command-hook.js +1 -0
  100. package/packages/client/dist/graph-retrieval/shared-graph-retrieval-contract.d.ts +99 -0
  101. package/packages/client/dist/graph-retrieval/shared-graph-retrieval-contract.js +1 -0
  102. package/packages/client/dist/i18n/first-run.d.ts +23 -0
  103. package/packages/client/dist/i18n/first-run.js +2 -0
  104. package/packages/client/dist/index.d.ts +56 -0
  105. package/packages/client/dist/index.js +1 -0
  106. package/packages/client/dist/license/index.d.ts +5 -0
  107. package/packages/client/dist/license/index.js +1 -0
  108. package/packages/client/dist/license/license-client.d.ts +79 -0
  109. package/packages/client/dist/license/license-client.js +1 -0
  110. package/packages/client/dist/machine/fingerprint.d.ts +34 -0
  111. package/packages/client/dist/machine/fingerprint.js +2 -0
  112. package/packages/client/dist/machine/index.d.ts +5 -0
  113. package/packages/client/dist/machine/index.js +1 -0
  114. package/packages/client/dist/memory/project-memory-writer.d.ts +74 -0
  115. package/packages/client/dist/memory/project-memory-writer.js +36 -0
  116. package/packages/client/dist/memory/shared-project-memory-types.d.ts +370 -0
  117. package/packages/client/dist/memory/shared-project-memory-types.js +2 -0
  118. package/packages/client/dist/policy/architecture-policy.d.ts +40 -0
  119. package/packages/client/dist/policy/architecture-policy.js +2 -0
  120. package/packages/client/dist/policy/index.d.ts +8 -0
  121. package/packages/client/dist/policy/index.js +1 -0
  122. package/packages/client/dist/policy/shared-policy-types.d.ts +89 -0
  123. package/packages/client/dist/policy/shared-policy-types.js +0 -0
  124. package/packages/client/dist/resilience/circuit-breaker.d.ts +70 -0
  125. package/packages/client/dist/resilience/circuit-breaker.js +1 -0
  126. package/packages/client/dist/resilience/degradation-manager.d.ts +67 -0
  127. package/packages/client/dist/resilience/degradation-manager.js +1 -0
  128. package/packages/client/dist/resilience/freshness-indicator.d.ts +59 -0
  129. package/packages/client/dist/resilience/freshness-indicator.js +1 -0
  130. package/packages/client/dist/resilience/index.d.ts +8 -0
  131. package/packages/client/dist/resilience/index.js +1 -0
  132. package/packages/client/dist/resilience/recovery-detector.d.ts +59 -0
  133. package/packages/client/dist/resilience/recovery-detector.js +1 -0
  134. package/packages/client/dist/resolvers/asset-resolver.d.ts +79 -0
  135. package/packages/client/dist/resolvers/asset-resolver.js +0 -0
  136. package/packages/client/dist/resolvers/local-resolver.d.ts +26 -0
  137. package/packages/client/dist/resolvers/local-resolver.js +8 -0
  138. package/packages/client/dist/resolvers/remote-resolver.d.ts +91 -0
  139. package/packages/client/dist/resolvers/remote-resolver.js +1 -0
  140. package/packages/client/dist/runner/binary.d.ts +115 -0
  141. package/packages/client/dist/runner/binary.js +1 -0
  142. package/packages/client/dist/runner/cli.d.ts +168 -0
  143. package/packages/client/dist/runner/cli.js +70 -0
  144. package/packages/client/dist/runner/headless/adapters.d.ts +20 -0
  145. package/packages/client/dist/runner/headless/adapters.js +1 -0
  146. package/packages/client/dist/runner/headless/claude-code-adapter.d.ts +8 -0
  147. package/packages/client/dist/runner/headless/claude-code-adapter.js +1 -0
  148. package/packages/client/dist/runner/headless/fake-adapter.d.ts +8 -0
  149. package/packages/client/dist/runner/headless/fake-adapter.js +1 -0
  150. package/packages/client/dist/runner/headless/opencode-adapter.d.ts +15 -0
  151. package/packages/client/dist/runner/headless/opencode-adapter.js +2 -0
  152. package/packages/client/dist/runner/headless/resolver.d.ts +68 -0
  153. package/packages/client/dist/runner/headless/resolver.js +1 -0
  154. package/packages/client/dist/runner/headless/run-yolo.d.ts +59 -0
  155. package/packages/client/dist/runner/headless/run-yolo.js +1 -0
  156. package/packages/client/dist/runner/headless/run-yoloop.d.ts +113 -0
  157. package/packages/client/dist/runner/headless/run-yoloop.js +1 -0
  158. package/packages/client/dist/runner/headless/types.d.ts +194 -0
  159. package/packages/client/dist/runner/headless/types.js +2 -0
  160. package/packages/client/dist/runner/local-console.d.ts +83 -0
  161. package/packages/client/dist/runner/local-console.js +13 -0
  162. package/packages/client/dist/runner/portal-sync-worker.d.ts +184 -0
  163. package/packages/client/dist/runner/portal-sync-worker.js +1 -0
  164. package/packages/client/dist/runner/project-identity.d.ts +19 -0
  165. package/packages/client/dist/runner/project-identity.js +1 -0
  166. package/packages/client/dist/runner/scheduler.d.ts +186 -0
  167. package/packages/client/dist/runner/scheduler.js +7 -0
  168. package/packages/client/dist/runner-cli.d.ts +9 -0
  169. package/packages/client/dist/runner-cli.js +3 -0
  170. package/packages/client/dist/state/project-state-snapshot.d.ts +24 -0
  171. package/packages/client/dist/state/project-state-snapshot.js +1 -0
  172. package/packages/client/dist/state/state-json-repair.d.ts +74 -0
  173. package/packages/client/dist/state/state-json-repair.js +3 -0
  174. package/packages/client/dist/telemetry/index.d.ts +5 -0
  175. package/packages/client/dist/telemetry/index.js +1 -0
  176. package/packages/client/dist/telemetry/offline-queue.d.ts +57 -0
  177. package/packages/client/dist/telemetry/offline-queue.js +1 -0
  178. package/packages/client/dist/tier/index.d.ts +5 -0
  179. package/packages/client/dist/tier/index.js +1 -0
  180. package/packages/client/dist/tier/tier-aware-client.d.ts +105 -0
  181. package/packages/client/dist/tier/tier-aware-client.js +1 -0
  182. package/packages/client/dist/types/index.d.ts +140 -0
  183. package/packages/client/dist/types/index.js +1 -0
  184. package/packages/client/dist/yoloop/discovery-hook.d.ts +85 -0
  185. package/packages/client/dist/yoloop/discovery-hook.js +2 -0
  186. package/packages/client/dist/yoloop/index.d.ts +10 -0
  187. package/packages/client/dist/yoloop/index.js +1 -0
  188. package/packages/client/dist/yoloop/invoke-hooks.d.ts +127 -0
  189. package/packages/client/dist/yoloop/invoke-hooks.js +5 -0
  190. package/packages/client/dist/yoloop/shared-discover-epics.d.ts +289 -0
  191. package/packages/client/dist/yoloop/shared-discover-epics.js +1 -0
  192. package/packages/client/dist/yoloop/shared-yoloop-types.d.ts +172 -0
  193. package/packages/client/dist/yoloop/shared-yoloop-types.js +1 -0
  194. package/packages/client/dist/yoloop/yoloop-client-state-store.d.ts +124 -0
  195. package/packages/client/dist/yoloop/yoloop-client-state-store.js +1 -0
  196. package/postinstall.js +754 -0
  197. package/targets-stubs/antigravity/README.md +36 -0
  198. package/targets-stubs/antigravity/gemini.md +29 -0
  199. package/targets-stubs/antigravity/install-antigravity.sh +153 -0
  200. package/targets-stubs/antigravity/mcp-config.json +30 -0
  201. package/targets-stubs/antigravity/skill/SKILL.md +166 -0
  202. package/targets-stubs/claude-code/.mcp.json +32 -0
  203. package/targets-stubs/claude-code/README.md +20 -0
  204. package/targets-stubs/claude-code/neocortex-root.agent.yaml +42 -0
  205. package/targets-stubs/claude-code/neocortex-root.md +317 -0
  206. package/targets-stubs/claude-code/neocortex.agent.yaml +42 -0
  207. package/targets-stubs/claude-code/neocortex.md +385 -0
  208. package/targets-stubs/codex/AGENTS.md +250 -0
  209. package/targets-stubs/codex/README.md +47 -0
  210. package/targets-stubs/codex/config-mcp.toml +22 -0
  211. package/targets-stubs/codex/install-codex.sh +63 -0
  212. package/targets-stubs/codex/neocortex.toml +33 -0
  213. package/targets-stubs/cursor/README.md +33 -0
  214. package/targets-stubs/cursor/agent.md +211 -0
  215. package/targets-stubs/cursor/install-cursor.sh +50 -0
  216. package/targets-stubs/cursor/mcp.json +30 -0
  217. package/targets-stubs/gemini-cli/README.md +34 -0
  218. package/targets-stubs/gemini-cli/agent.md +241 -0
  219. package/targets-stubs/gemini-cli/agents/neocortex.md +60 -0
  220. package/targets-stubs/gemini-cli/gemini.md +46 -0
  221. package/targets-stubs/gemini-cli/install-gemini.sh +70 -0
  222. package/targets-stubs/gemini-cli/settings-mcp.json +30 -0
  223. package/targets-stubs/kimi/mcp.json +33 -0
  224. package/targets-stubs/kimi/neocortex.md +60 -0
  225. package/targets-stubs/lib/mcp-merge.js +189 -0
  226. package/targets-stubs/openclaw/README.md +12 -0
  227. package/targets-stubs/openclaw/SKILL.md +92 -0
  228. package/targets-stubs/opencode/neocortex-root.md +267 -0
  229. package/targets-stubs/opencode/neocortex.md +65 -0
  230. package/targets-stubs/opencode/opencode-mcp.json +35 -0
  231. package/targets-stubs/vscode/README.md +34 -0
  232. package/targets-stubs/vscode/copilot-instructions.md +47 -0
  233. package/targets-stubs/vscode/install-vscode.sh +72 -0
  234. package/targets-stubs/vscode/mcp.json +36 -0
  235. package/targets-stubs/vscode/neocortex.agent.md +252 -0
@@ -0,0 +1 @@
1
+ import{createHash as y}from"node:crypto";const c=1,R="autonomous_governance_audit",s="[P199-EV-GOVERNANCE]",p=Object.freeze({OK:"continuity-ok",BYPASS_BLOCKED:"headless-directive-rejected"}),S=/^\*yolo @(?<target>docs\/stories\/(?<storyId>[A-Za-z0-9._-]+)\.story\.md)$/,T=/^\*yoloop @(?<target>docs\/epics\/epic-(?<epicId>[A-Za-z0-9._-]+)\.md)$/,O=/^\*yoloop @(?<target>docs\/epics\/?|docs\/epics)$/,K=/^docs\/stories\/[A-Za-z0-9._-]+\.story\.md$/,v=/^docs\/epics\/epic-[A-Za-z0-9._-]+\.md$/,$=/^docs\/epics\/?$/,C=/^[A-Za-z0-9][A-Za-z0-9._:-]{0,159}$/,N=/^sha256:[a-f0-9]{64}$/,P=/(https?:\/\/\S+|(?:^|\s)(?:\/(?:home|Users|media|mnt|tmp|var|etc|private)\/\S+|[A-Za-z]:\\\S+)|ghp_[A-Za-z0-9_]+|sk-[A-Za-z0-9_-]+|-----BEGIN [A-Z ]*PRIVATE KEY-----|authorization\s*:|password\s*=|token\s*=|api[_-]?key\s*=|license[_-]?key\s*=|raw[_-]?(?:logs?)\s*[:=]|transcript|stack\s*trace|stderr:|stdout:|system prompt|workflow body|step body|PROTECTED_|PRIVATE_INTERNALS|CUSTOMER_PII|\bPII\b|VENDOR_CORPUS)/i;function G(e){const o=e.trim(),r=o.match(S);if(r?.groups?.target&&r.groups.storyId)return{autonomousKind:"yolo",source:"direct-yolo",targetKind:"story",targetRef:r.groups.target,storyId:r.groups.storyId,commandHash:u(o)};const t=o.match(T);return t?.groups?.target&&t.groups.epicId?{autonomousKind:"yoloop",source:"direct-yoloop",targetKind:"epic",targetRef:t.groups.target,epicId:t.groups.epicId,commandHash:u(o)}:o.match(O)?.groups?.target?{autonomousKind:"yoloop",source:"direct-yoloop",targetKind:"epic_directory",targetRef:"docs/epics/",commandHash:u(o)}:null}function D(e){return G(e)!==null}function U(e){const o=e.storyId??e.epicId??e.targetRef,r=g(o),t=e.operationSeed??`${e.autonomousKind}:${e.source}:${e.targetRef}:${e.jobId??""}`,a=k(t),_=e.jobId??`job-${g(e.autonomousKind)}-${r}`.slice(0,96),h=`exec-gov-${r}-${a}`.slice(0,120),b=`audit-gov-${r}-${a}`.slice(0,120),E=`receipt-gov-${r}-${a}`.slice(0,120),A=e.commandHash??u(`${e.autonomousKind}:${e.targetRef}`);return{schemaVersion:1,contractVersion:"continuity-v1",governanceVersion:c,envelopeId:`gov-${r}-${a}`.slice(0,120),jobId:_,executionId:h,auditId:b,receiptId:E,autonomousKind:e.autonomousKind,source:e.source,targetKind:e.targetKind,targetRef:e.targetRef,...e.storyId?{storyId:e.storyId}:{},...e.epicId?{epicId:e.epicId}:{},status:e.status??"accepted",reasonCode:e.reasonCode??p.OK,publicSummary:`${s} Autonomous execution accepted under public continuity governance.`,counts:{targets:1},hashes:{command:A},relativePaths:[e.targetRef],publicSafe:!0}}function l(e,o){const r=[];if(!d(e))return i("autonomousGovernance",r);const t=e;t.schemaVersion!==1&&r.push(n("schemaVersion","unsafe_key","value-denied")),t.contractVersion!=="continuity-v1"&&r.push(n("contractVersion","unsafe_key","value-denied")),t.governanceVersion!==c&&r.push(n("governanceVersion","unsafe_key","value-denied")),t.publicSafe!==!0&&r.push(n("publicSafe","unsafe_key","value-denied")),t.status!=="accepted"&&r.push(n("status","unsafe_key","value-denied"));for(const a of["envelopeId","jobId","executionId","auditId","receiptId","reasonCode"])f(t[a])||r.push(n(a,"unsafe_key","value-denied"));return j(t.autonomousKind)||r.push(n("autonomousKind","unsafe_key","value-denied")),V(t.source)||r.push(n("source","unsafe_key","value-denied")),t.targetKind!=="story"&&t.targetKind!=="epic"&&t.targetKind!=="epic_directory"&&r.push(n("targetKind","unsafe_key","value-denied")),(typeof t.targetRef!="string"||!x(t.targetKind,t.targetRef))&&r.push(n("targetRef","prompt_body","value-denied")),t.storyId!==void 0&&(!f(t.storyId)||t.targetKind!=="story")&&r.push(n("storyId","prompt_body","value-denied")),t.epicId!==void 0&&(!f(t.epicId)||t.targetKind!=="epic")&&r.push(n("epicId","prompt_body","value-denied")),(typeof t.publicSummary!="string"||t.publicSummary.length>240||m(t.publicSummary))&&r.push(n("publicSummary","unbounded_text","value-denied")),(!d(t.counts)||typeof t.counts.targets!="number")&&r.push(n("counts","unsafe_key","value-denied")),(!d(t.hashes)||typeof t.hashes.command!="string"||!N.test(t.hashes.command))&&r.push(n("hashes.command","prompt_body","value-denied")),(!Array.isArray(t.relativePaths)||t.relativePaths.length!==1||t.relativePaths[0]!==t.targetRef)&&r.push(n("relativePaths","local_absolute_path","value-denied")),o?.autonomousKind&&t.autonomousKind!==o.autonomousKind&&r.push(n("autonomousKind","unsafe_key","operation-denied")),o?.jobId&&t.jobId!==o.jobId&&r.push(n("jobId","unsafe_key","operation-denied")),o?.targetKind&&t.targetKind!==o.targetKind&&r.push(n("targetKind","prompt_body","operation-denied")),o?.targetRef&&t.targetRef!==o.targetRef&&r.push(n("targetRef","prompt_body","operation-denied")),r.length>0?i("autonomousGovernance",r):{ok:!0,envelope:t}}function Y(e,o){if(!e)return i("autonomousGovernance",[]);try{const r=JSON.parse(e);return d(r)?l(r.autonomousGovernance,o):i("autonomousGovernance",[])}catch{return i("autonomousGovernance",[])}}function Z(e,o,r,t={}){const a=l(o);return a.ok?t.requireExistingJob&&!e.jobExists(o.jobId)?I(o,`${s} Governance bypass blocked before autonomous execution.`):(e.runInTransaction(()=>{t.requireExistingJob||e.recordJob({jobId:o.jobId,kind:"runner",status:"active",createdAt:r,updatedAt:r,summary:`${s} Governed autonomous execution job.`,reasonCode:o.reasonCode,operationId:`${o.executionId}:job`,idempotencyKey:`${o.envelopeId}:job`,metadata:{autonomousGovernance:o,publicSafe:!0}}),e.appendEvent({eventId:o.auditId,jobId:o.jobId,operationId:`${o.executionId}:audit`,idempotencyKey:`${o.envelopeId}:audit`,type:R,summary:o.publicSummary,reasonCode:o.reasonCode,createdAt:r,metadata:{autonomousGovernance:o,publicSafe:!0}}),e.appendReceipt({receiptId:o.receiptId,jobId:o.jobId,operationId:`${o.executionId}:receipt`,idempotencyKey:`${o.envelopeId}:receipt`,status:"accepted",reasonCode:o.reasonCode,appliedOperationIds:[o.executionId],createdAt:r,metadata:{autonomousGovernance:o,publicSafe:!0}})}),{ok:!0,envelope:o,reasonCode:o.reasonCode,publicSummary:o.publicSummary,publicSafe:!0}):I(o,a.publicSummary)}function B(e,o){return{...o??{},autonomousGovernance:e,governanceVersion:c,governanceEvidence:s,publicSafe:!0}}function i(e,o){return{ok:!1,reasonCode:p.BYPASS_BLOCKED,publicSummary:`${s} Governance envelope missing or invalid before autonomous execution.`,redactionSummary:o.length>0?o:[n(e,"unsafe_key","operation-denied")]}}function I(e,o){return{ok:!1,envelope:e,reasonCode:p.BYPASS_BLOCKED,publicSummary:o,publicSafe:!0}}function u(e){return`sha256:${y("sha256").update(e).digest("hex")}`}function k(e){return y("sha256").update(e).digest("hex").slice(0,12)}function g(e){return(e.replace(/^docs\/stories\//,"").replace(/^docs\/epics\/epic-/,"").replace(/\.story\.md$/,"").replace(/\.md$/,"").replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"autonomous").slice(0,60)}function f(e){return typeof e=="string"&&C.test(e)&&!m(e)}function j(e){return e==="yolo"||e==="yoloop"||e==="run_yolo"||e==="run_yoloop"}function V(e){return e==="direct-yolo"||e==="direct-yoloop"||e==="headless-run-yolo"||e==="headless-run-yoloop"||e==="delegated-subagent"}function x(e,o){return m(o)?!1:e==="story"?K.test(o):e==="epic"?v.test(o):e==="epic_directory"?$.test(o):!1}function m(e){return P.test(e)||/[;&|`$<>\n\r\0]/.test(e)}function d(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function n(e,o,r){return{field:e,reason:o,evidence:r,publicSafe:!0}}export{R as AUTONOMOUS_GOVERNANCE_EVENT_TYPE,s as AUTONOMOUS_GOVERNANCE_EVIDENCE_TAG,p as AUTONOMOUS_GOVERNANCE_REASON_CODES,c as AUTONOMOUS_GOVERNANCE_VERSION,B as autonomousGovernanceMetadata,U as buildAutonomousGovernanceEnvelope,D as isAutonomousInvoke,G as parseAutonomousInvokeIntent,Y as readAutonomousGovernanceEnvelopeFromMetadata,Z as recordAutonomousGovernance,l as validateAutonomousGovernanceEnvelope};
@@ -0,0 +1,302 @@
1
+ /**
2
+ * @license FSL-1.1
3
+ * Copyright (c) 2026 OrNexus AI
4
+ *
5
+ * P180.05 -- Thin-client continuity state snapshots and operation-log apply.
6
+ */
7
+ import { type ProjectIdentity } from '../runner/project-identity.js';
8
+ import { type AutonomousGovernanceEnvelope, type AutonomousGovernanceRecordResult } from './autonomous-governance.js';
9
+ import { type ContinuityProcessingOutputSummaryCursorTarget, type ContinuityPublicStageName, type ContinuityStageHistoryEntry, type ContinuitySqliteAdapter, type ContinuitySqliteAdapterLoadResult, type ContinuitySqliteStore } from './sqlite-store.js';
10
+ export declare const CONTINUITY_CLIENT_SCHEMA_VERSION: 1;
11
+ export declare const CONTINUITY_CLIENT_CONTRACT_VERSION: "continuity-v1";
12
+ export declare const CONTINUITY_PROCESSING_SUMMARY_WATCH_DEFAULT_LIMIT: 10;
13
+ export declare const CONTINUITY_PROCESSING_SUMMARY_WATCH_DEFAULT_POLL_INTERVAL_MS: 2000;
14
+ export declare const CONTINUITY_INVOKE_WATCH_DEFAULT_LIMIT: 10;
15
+ export declare const CONTINUITY_INVOKE_WATCH_DEFAULT_POLL_INTERVAL_MS: 2000;
16
+ export declare const CONTINUITY_INVOKE_WATCH_DEFAULT_MAX_IDLE_POLLS: 3;
17
+ export declare const CONTINUITY_INVOKE_WATCH_DEFAULT_MAX_POLLS: 1800;
18
+ export declare const CONTINUITY_CLIENT_PORTAL_SYNC_ENVELOPE_VERSION: 1;
19
+ export declare const CONTINUITY_CLIENT_REASON_CODES: Readonly<{
20
+ readonly OK: "continuity-ok";
21
+ readonly INVALID_SCHEMA_VERSION: "invalid-schema-version";
22
+ readonly INVALID_CONTRACT_VERSION: "invalid-contract-version";
23
+ readonly UNKNOWN_OPERATION_REQUIRED: "unknown-operation-required";
24
+ readonly UNKNOWN_OPERATION_IGNORED: "unknown-operation-ignored";
25
+ readonly DUPLICATE_OPERATION_ID: "duplicate-operation-id";
26
+ readonly IDEMPOTENCY_REPLAY: "idempotency-replay";
27
+ readonly UNSAFE_FIELD_REJECTED: "unsafe-field-rejected";
28
+ readonly SQLITE_ADAPTER_UNAVAILABLE: "sqlite-adapter-unavailable";
29
+ readonly SQLITE_INTEGRITY_FAILED: "sqlite-integrity-failed";
30
+ readonly SQLITE_MUTATION_FAILED: "sqlite-mutation-failed";
31
+ }>;
32
+ export type ContinuityClientReasonCode = (typeof CONTINUITY_CLIENT_REASON_CODES)[keyof typeof CONTINUITY_CLIENT_REASON_CODES] | 'sqlite-migration-failed' | 'sqlite-migration-conflict' | 'sqlite-foreign-key-failed' | 'sqlite-public-safety-rejected' | 'sqlite-mutation-blocked';
33
+ export interface ContinuityRedactionEvidence {
34
+ readonly field: string;
35
+ readonly reason: 'unsafe_key' | 'raw_log' | 'prompt_body' | 'private_url' | 'local_absolute_path' | 'secret' | 'protected_field' | 'unbounded_text' | 'unknown_required_operation';
36
+ readonly evidence: 'key-denied' | 'value-denied' | 'operation-denied';
37
+ readonly publicSafe: true;
38
+ }
39
+ export interface ContinuityApplyResult {
40
+ readonly ok: true;
41
+ readonly appliedOperationIds: readonly string[];
42
+ readonly ignoredOperationIds: readonly string[];
43
+ readonly reasonCodes: readonly ContinuityClientReasonCode[];
44
+ readonly redactions: readonly ContinuityRedactionEvidence[];
45
+ readonly publicSafe: true;
46
+ }
47
+ export interface ContinuitySnapshotJobSummary {
48
+ readonly jobId: string;
49
+ readonly kind: string;
50
+ readonly status: string;
51
+ readonly publicSummary: string;
52
+ readonly createdAt?: string;
53
+ readonly updatedAt: string;
54
+ readonly nextRunAt?: string;
55
+ readonly reasonCode?: string;
56
+ readonly counts?: Readonly<Record<string, number>>;
57
+ readonly runtimeId?: string;
58
+ readonly modelId?: string;
59
+ readonly runtimeSource?: string;
60
+ readonly headlessRuntime?: string;
61
+ readonly headlessModel?: string;
62
+ readonly headlessRuntimeReasonCode?: string;
63
+ readonly originRuntime?: string;
64
+ readonly originModel?: string;
65
+ readonly workspaceId?: string;
66
+ readonly workspaceLabel?: string;
67
+ readonly projectId?: string;
68
+ readonly projectLabel?: string;
69
+ readonly currentStage?: ContinuityPublicStageName;
70
+ readonly stageHistory?: readonly ContinuityStageHistoryEntry[];
71
+ readonly iteration?: number;
72
+ readonly publicSafe: true;
73
+ }
74
+ export interface ContinuitySnapshotStaleLeaseSummary {
75
+ readonly leaseId: string;
76
+ readonly jobId: string;
77
+ readonly runnerId: string;
78
+ readonly expiresAt: string;
79
+ readonly publicSafe: true;
80
+ }
81
+ export interface ContinuitySnapshotReceiptRef {
82
+ readonly receiptId: string;
83
+ readonly jobId: string;
84
+ readonly operationId?: string;
85
+ readonly status: string;
86
+ readonly reasonCode?: string;
87
+ readonly createdAt: string;
88
+ readonly publicSafe: true;
89
+ }
90
+ export interface ContinuitySnapshotEventRef {
91
+ readonly eventId: string;
92
+ readonly jobId: string;
93
+ readonly operationId?: string;
94
+ readonly type: string;
95
+ readonly publicSummary: string;
96
+ readonly reasonCode?: string;
97
+ readonly createdAt: string;
98
+ readonly metadata?: Readonly<Record<string, unknown>>;
99
+ readonly publicSafe: true;
100
+ }
101
+ export interface ContinuitySnapshotProcessingSummaryRef {
102
+ readonly eventId: string;
103
+ readonly jobId: string;
104
+ readonly goalId?: string;
105
+ readonly loopId?: string;
106
+ readonly executionId: string;
107
+ readonly publicSummary: string;
108
+ readonly reasonCode?: string;
109
+ readonly createdAt: string;
110
+ readonly cursor: string;
111
+ readonly metadata?: Readonly<Record<string, unknown>>;
112
+ readonly publicSafe: true;
113
+ }
114
+ export interface ContinuitySnapshotHeadlessExecutionAttemptRef {
115
+ readonly attemptId: string;
116
+ readonly executionId: string;
117
+ readonly jobId: string;
118
+ readonly status: string;
119
+ readonly reasonCode?: string;
120
+ readonly runtimeId?: string;
121
+ readonly modelId?: string;
122
+ readonly retryCount: number;
123
+ readonly attemptCount: number;
124
+ readonly maxAttempts: number;
125
+ readonly queuePriority: number;
126
+ readonly queueScope: 'project' | 'workspace';
127
+ readonly durationMs?: number;
128
+ readonly counts?: Readonly<Record<string, unknown>>;
129
+ readonly hashes?: Readonly<Record<string, unknown>>;
130
+ readonly redactionSummary?: readonly unknown[];
131
+ readonly leaseId?: string;
132
+ readonly runnerId?: string;
133
+ readonly leaseExpiresAt?: string;
134
+ readonly heartbeatAt?: string;
135
+ readonly publicSummary: string;
136
+ readonly enqueuedAt: string;
137
+ readonly notBeforeAt?: string;
138
+ readonly nextRetryAt?: string;
139
+ readonly deadLetteredAt?: string;
140
+ readonly deadLetterReasonCode?: string;
141
+ readonly publicSafe: true;
142
+ }
143
+ export interface ContinuitySnapshotQueueSummary {
144
+ readonly depth: number;
145
+ readonly queued: number;
146
+ readonly running: number;
147
+ readonly retrying: number;
148
+ readonly deadLetter: number;
149
+ readonly capacity: number;
150
+ readonly available: number;
151
+ readonly backpressure: boolean;
152
+ readonly generatedAt: string;
153
+ readonly nextRetryAt?: string;
154
+ readonly reasonCode?: string;
155
+ readonly publicSafe: true;
156
+ }
157
+ export interface ContinuitySnapshotCompactContextRef {
158
+ readonly snapshotId: string;
159
+ readonly jobId?: string;
160
+ readonly operationId?: string;
161
+ readonly capturedAt: string;
162
+ readonly publicSummary: string;
163
+ readonly summaryHash?: string;
164
+ readonly relativePath?: string;
165
+ readonly retainedRefs: readonly string[];
166
+ readonly artifactRefs: readonly unknown[];
167
+ readonly evidenceRefs: readonly unknown[];
168
+ readonly checkpoint?: Readonly<Record<string, unknown>>;
169
+ readonly reasonCode?: string;
170
+ readonly publicSafe: true;
171
+ }
172
+ export interface ContinuitySnapshotCompactContext {
173
+ readonly preferredSource: 'compact_summary' | 'recent_events';
174
+ readonly summaries: readonly ContinuitySnapshotCompactContextRef[];
175
+ readonly publicSafe: true;
176
+ }
177
+ export interface ContinuityClientSnapshotPortalSyncSummary {
178
+ readonly syncVersion: typeof CONTINUITY_CLIENT_PORTAL_SYNC_ENVELOPE_VERSION;
179
+ readonly transportKind: 'client_snapshot';
180
+ readonly snapshotId: string;
181
+ readonly generatedAt: string;
182
+ readonly publicSummary: string;
183
+ readonly counts: Readonly<Record<string, number>>;
184
+ readonly hashes: Readonly<Record<string, string>>;
185
+ readonly redactionEvidence: readonly ContinuityRedactionEvidence[];
186
+ readonly publicSafe: true;
187
+ }
188
+ export interface ContinuityClientSnapshot {
189
+ readonly schemaVersion: typeof CONTINUITY_CLIENT_SCHEMA_VERSION;
190
+ readonly contractVersion: typeof CONTINUITY_CLIENT_CONTRACT_VERSION;
191
+ readonly generatedAt: string;
192
+ readonly store: {
193
+ readonly schemaVersion: number;
194
+ readonly readable: true;
195
+ };
196
+ readonly jobs: readonly ContinuitySnapshotJobSummary[];
197
+ readonly counts: Readonly<Record<string, number>>;
198
+ readonly dueJobCount: number;
199
+ readonly dueJobs: readonly ContinuitySnapshotJobSummary[];
200
+ readonly staleLeases: readonly ContinuitySnapshotStaleLeaseSummary[];
201
+ readonly outbox: Readonly<Record<string, number>>;
202
+ readonly queue: ContinuitySnapshotQueueSummary;
203
+ readonly lastReceipts: readonly ContinuitySnapshotReceiptRef[];
204
+ readonly lastEvents: readonly ContinuitySnapshotEventRef[];
205
+ readonly processingSummaries?: readonly ContinuitySnapshotProcessingSummaryRef[];
206
+ readonly headlessExecutionAttempts?: readonly ContinuitySnapshotHeadlessExecutionAttemptRef[];
207
+ readonly compactContext: ContinuitySnapshotCompactContext;
208
+ readonly portalSync: ContinuityClientSnapshotPortalSyncSummary;
209
+ readonly autonomousGovernance?: AutonomousGovernanceEnvelope;
210
+ readonly redactions: readonly ContinuityRedactionEvidence[];
211
+ readonly publicSafe: true;
212
+ }
213
+ export interface ContinuityHardStopSnapshot {
214
+ readonly schemaVersion: typeof CONTINUITY_CLIENT_SCHEMA_VERSION;
215
+ readonly contractVersion: typeof CONTINUITY_CLIENT_CONTRACT_VERSION;
216
+ readonly generatedAt: string;
217
+ readonly hardStop: true;
218
+ readonly reasonCodes: readonly ContinuityClientReasonCode[];
219
+ readonly publicSafe: true;
220
+ }
221
+ export type ContinuitySnapshotForInvoke = ContinuityClientSnapshot | ContinuityHardStopSnapshot;
222
+ export interface OpenContinuityClientStateStoreOptions {
223
+ readonly projectRoot: string;
224
+ readonly adapter?: ContinuitySqliteAdapter;
225
+ readonly adapterLoader?: () => Promise<ContinuitySqliteAdapterLoadResult>;
226
+ readonly now?: () => string;
227
+ }
228
+ export interface ContinuitySnapshotOptions {
229
+ readonly nowIso?: string;
230
+ readonly jobLimit?: number;
231
+ readonly dueJobLimit?: number;
232
+ readonly staleLeaseLimit?: number;
233
+ readonly receiptLimit?: number;
234
+ readonly eventLimit?: number;
235
+ readonly processingSummaryLimit?: number;
236
+ readonly snapshotLimit?: number;
237
+ }
238
+ export interface ContinuityProcessingSummaryCursorOptions {
239
+ readonly cursor?: string;
240
+ readonly limit?: number;
241
+ readonly jobId?: string;
242
+ readonly target?: ContinuityProcessingOutputSummaryCursorTarget;
243
+ }
244
+ export type ContinuityProcessingSummaryCursorTarget = ContinuityProcessingOutputSummaryCursorTarget;
245
+ export interface ContinuityProcessingSummaryCursorSnapshot {
246
+ readonly summaries: readonly ContinuitySnapshotProcessingSummaryRef[];
247
+ readonly nextCursor?: string;
248
+ readonly hasMore: boolean;
249
+ readonly publicSafe: true;
250
+ }
251
+ interface ContinuityOperationLogLike {
252
+ readonly schemaVersion?: unknown;
253
+ readonly contractVersion?: unknown;
254
+ readonly jobId?: unknown;
255
+ readonly operations?: unknown;
256
+ readonly metadata?: unknown;
257
+ readonly publicSafe?: unknown;
258
+ }
259
+ export declare class ContinuityClientStateStoreError extends Error {
260
+ readonly reasonCodes: readonly ContinuityClientReasonCode[];
261
+ readonly redactions: readonly ContinuityRedactionEvidence[];
262
+ readonly mutationBlocked: boolean;
263
+ constructor(message: string, reasonCodes: readonly ContinuityClientReasonCode[], options?: {
264
+ readonly redactions?: readonly ContinuityRedactionEvidence[];
265
+ readonly mutationBlocked?: boolean;
266
+ readonly cause?: unknown;
267
+ });
268
+ }
269
+ export declare function continuitySqliteExists(projectRoot: string): boolean;
270
+ export declare function createContinuityHardStopSnapshot(reasonCodes: readonly ContinuityClientReasonCode[], nowIso?: string): ContinuityHardStopSnapshot;
271
+ export declare function openContinuityClientStateStore(options: OpenContinuityClientStateStoreOptions): Promise<ContinuityClientStateStore>;
272
+ export declare class ContinuityClientStateStore {
273
+ private readonly store;
274
+ private readonly now;
275
+ private readonly projectIdentity?;
276
+ constructor(store: ContinuitySqliteStore, now?: () => string, projectIdentity?: ProjectIdentity | undefined);
277
+ close(): void;
278
+ recordAutonomousGovernance(envelope: AutonomousGovernanceEnvelope, nowIso: string): AutonomousGovernanceRecordResult;
279
+ collectSnapshot(options?: ContinuitySnapshotOptions): ContinuityClientSnapshot;
280
+ collectProcessingOutputSummaryCursor(options?: ContinuityProcessingSummaryCursorOptions): ContinuityProcessingSummaryCursorSnapshot;
281
+ applyStateUpdate(update: unknown): ContinuityApplyResult;
282
+ applyOperationLog(log: ContinuityOperationLogLike): ContinuityApplyResult;
283
+ private applyKnownOperation;
284
+ private applyCompactContext;
285
+ private applyCreateJob;
286
+ private applyUpdateJobStatus;
287
+ private applyAppendEvent;
288
+ private applyProcessingOutputSummaryEvent;
289
+ private applyAppendReceipt;
290
+ private applyUpsertGoalCampaign;
291
+ private applyUpsertGoalLedgerItem;
292
+ private applyUpsertVerifier;
293
+ private applyUpsertReviewGate;
294
+ private applyOutbox;
295
+ private applyEnqueueExecutionAttempt;
296
+ private applyCompleteExecutionAttempt;
297
+ private applyAppendExecutionReceipt;
298
+ private applyAppendExecutionSummary;
299
+ private recordAppliedAudit;
300
+ private recordIgnoredAuditIfPossible;
301
+ }
302
+ export {};
@@ -0,0 +1 @@
1
+ import{existsSync as se}from"node:fs";import{createHash as ie}from"node:crypto";import{deriveProjectIdentity as de}from"../runner/project-identity.js";import{recordAutonomousGovernance as ce}from"./autonomous-governance.js";import{CONTINUITY_PROCESSING_OUTPUT_SUMMARY_EVENT_TYPE as ue,ContinuitySqliteStoreError as pe,continuitySqliteStorePath as me,isContinuityPublicStage as le,normalizeContinuityStageIteration as Y,openContinuitySqliteStore as Ie,sanitizeContinuityStageHistory as _e}from"./sqlite-store.js";const S=1,g="continuity-v1",z=10,ye=2e3,Ze=z,et=ye,tt=3,nt=1800,fe=1,I=Object.freeze({OK:"continuity-ok",INVALID_SCHEMA_VERSION:"invalid-schema-version",INVALID_CONTRACT_VERSION:"invalid-contract-version",UNKNOWN_OPERATION_REQUIRED:"unknown-operation-required",UNKNOWN_OPERATION_IGNORED:"unknown-operation-ignored",DUPLICATE_OPERATION_ID:"duplicate-operation-id",IDEMPOTENCY_REPLAY:"idempotency-replay",UNSAFE_FIELD_REJECTED:"unsafe-field-rejected",SQLITE_ADAPTER_UNAVAILABLE:"sqlite-adapter-unavailable",SQLITE_INTEGRITY_FAILED:"sqlite-integrity-failed",SQLITE_MUTATION_FAILED:"sqlite-mutation-failed"}),he=new Set(["create_job","update_job_status","append_event","append_receipt","upsert_goal_campaign","upsert_goal_ledger_item","upsert_verifier","upsert_review_gate","schedule_next_tick","acquire_lease","release_lease","compact_context","enqueue_outbox","append_outbox","enqueue_execution_attempt","claim_execution_attempt","heartbeat_execution_attempt","release_execution_attempt","complete_execution_attempt","append_execution_receipt","append_execution_summary"]),Ae=new Set(["schemaVersion","contractVersion","eventType","executionId","jobId","operationId","idempotencyKey","goalId","loopId","campaignId","itemId","ledgerItemIds","verifierId","verifierIds","gateId","reviewGateIds","runnerId","leaseId","status","reasonCode","reasonCodes","runtimeId","modelId","runtimeSource","headlessRuntime","headlessModel","headlessRuntimeReasonCode","originRuntime","originModel","targetRef","attemptId","attemptStatus","directiveHash","timeoutMs","leaseExpiresAt","heartbeatAt","notBeforeAt","maxAttempts","counts","hashes","relativePaths","artifactRefs","evidenceRefs","validationRefs","registryRefs","storyIds","epicIds","debtIds","iteration","currentStage","stageHistory","durationMs","retryCount","nextTickAt","processingOutputSource","publicSummary","redactionEvidence","selectorKind","targetId","targetJobId","relatedJobIds","serverAccessToLocalhost","serverHeldStream","initialCursor","targetResolutionState","targetKind","relatedJobCount","snapshotStatus","snapshotGeneratedAt","renderedSummaryCount","cursorState","currentCursor","nextCursor","cursorAdvanced","eventId","latestEventId","watchStatus","stopReason","syncVersion","transportKind","envelopeId","workspaceId","workspaceLabel","projectId","projectLabel","snapshotId","syncCursor","previousSyncCursor","nextSyncCursor","commandId","receiptId","acknowledgedAt","observedAt","generatedAt","syncStatus","commandStatus","receiptStatus","actorType","actorId","tenantId","commandKind","auditStatus","redactionCount"]),K=/(raw[_-]?(?:logs?|payloads?)|std(?:out|err)|stack(?:[_-]?trace)?|transcript|prompt(?:[_-]?(?:body|text))?|private[_-]?(?:urls?|prompts?)|secret|token|password|protected(?:[_-]?(?:field|body|bodies|internals))?|workflow(?:[_-]?body)?|step(?:[_-]?body)?|customer(?:[_-]?(?:pii|data))?|\bpii\b|authorization|api[_-]?key|license[_-]?key|argv|args|executable(?:[_-]?path)?|binary(?:[_-]?path)?|shell|cwd|command[_-]?path|vendor(?:[_-]?(?:payload|corpus|response|output)))/i,G=/\bhttps?:\/\/\S+/i,be=/(?:^|\s)(?:\/(?:home|Users|media|mnt|tmp|var|etc|private)\/\S+|[A-Za-z]:\\\S+)/i,J=/(ghp_[A-Za-z0-9_]+|sk-[A-Za-z0-9_-]+|-----BEGIN [A-Z ]*PRIVATE KEY-----|authorization\s*:|password\s*=|token\s*=|api[_-]?key\s*=|license[_-]?key\s*=)/i,W=/(raw[_-]?(?:logs?)\s*[:=]|transcript|stack trace|stderr:|stdout:)/i,Q=/(prompt[_-]?body|system prompt|workflow body|step body)/i,X=/(PROTECTED_|_PROTECTED_|PRIVATE_INTERNALS|CUSTOMER_PII|\bPII\b|VENDOR_CORPUS|P180[_-]?SYNTHETIC[_-]?CONTINUITY|P185[_-]?SYNTHETIC[_-]?CONTINUITY|P187[_-]?SYNTHETIC[_-]?(?:CONTINUITY|RUNNER|WATCH)|P190[_-]?SYNTHETIC[_-]?(?:HEADLESS|CONTINUITY)|P192[_-]?SYNTHETIC[_-]?(?:PORTAL|RUNNER|SYNC))/i,k=240,Z=2400,Ce=40,Se=20,ge=40,Ee=20,D=80;class _ extends Error{reasonCodes;redactions;mutationBlocked;constructor(e,n,a={}){super(e),this.name="ContinuityClientStateStoreError",this.reasonCodes=E(n),this.redactions=a.redactions??[],this.mutationBlocked=a.mutationBlocked??!1,this.cause=a.cause}}function at(t){return se(me(t))}function ot(t,e=new Date().toISOString()){return{schemaVersion:S,contractVersion:g,generatedAt:e,hardStop:!0,reasonCodes:E(t),publicSafe:!0}}async function rt(t){const e=await Ie({projectRoot:t.projectRoot,adapter:t.adapter,adapterLoader:t.adapterLoader,now:t.now});return new Re(e,t.now??(()=>new Date().toISOString()),de(t.projectRoot))}class Re{store;now;projectIdentity;constructor(e,n=()=>new Date().toISOString(),a){this.store=e,this.now=n,this.projectIdentity=a}close(){this.store.close()}recordAutonomousGovernance(e,n){try{return ce(this.store,e,n)}catch(a){throw q(a,"Failed to record autonomous governance envelope.")}}collectSnapshot(e={}){try{const n=e.nowIso??this.now(),a=this.store.collectSnapshotRows({nowIso:n,jobLimit:e.jobLimit??20,staleLeaseLimit:e.staleLeaseLimit??10,receiptLimit:e.receiptLimit??10,eventLimit:e.eventLimit??10,snapshotLimit:e.snapshotLimit??5}),i=this.store.listDueJobs({nowIso:n,limit:e.dueJobLimit??10}),d=this.store.listProcessingOutputSummaries({limit:e.processingSummaryLimit??z}),u=Ke(a.receipts).slice(0,20),m=xe({generatedAt:n,counts:a.counts,jobCount:a.jobs.length,dueJobCount:i.length,outboxPending:a.outboxCounts.pending??0,redactions:u});return{schemaVersion:S,contractVersion:g,generatedAt:n,store:{schemaVersion:a.schemaVersion,readable:!0},jobs:a.jobs.map(ee),counts:a.counts,dueJobCount:a.counts.dueJobs??0,dueJobs:i.map(ee),staleLeases:a.staleLeases.map(c=>({leaseId:s(c.lease_id,100),jobId:s(c.job_id,100),runnerId:s(c.runner_id,100),expiresAt:s(c.expires_at,80),publicSafe:!0})),outbox:{total:a.counts.outbox??0,pending:a.outboxCounts.pending??0,failed:a.outboxCounts.failed??0,deadLetter:a.outboxCounts.dead_letter??0,sent:a.outboxCounts.sent??0,acked:a.outboxCounts.acked??0},queue:{depth:a.queue.depth,queued:a.queue.queued,running:a.queue.running,retrying:a.queue.retrying,deadLetter:a.queue.deadLetter,capacity:a.queue.capacity,available:a.queue.available,backpressure:a.queue.backpressure,generatedAt:s(a.queue.generatedAt,80),...a.queue.nextRetryAt?{nextRetryAt:s(a.queue.nextRetryAt,80)}:{},...a.queue.reasonCode?{reasonCode:s(a.queue.reasonCode,80)}:{},publicSafe:!0},lastReceipts:a.receipts.map(c=>({receiptId:s(c.receipt_id,100),jobId:s(c.job_id,100),...c.operation_id?{operationId:s(c.operation_id,100)}:{},status:s(c.status,40),...c.reason_code?{reasonCode:s(c.reason_code,80)}:{},createdAt:s(c.created_at,80),publicSafe:!0})),lastEvents:a.events.map(c=>{const l=P(v(c.metadata_json));return{eventId:s(c.event_id,100),jobId:s(c.job_id,100),operationId:s(c.operation_id,100),type:s(c.type,80),publicSummary:s(c.summary,k),...c.reason_code?{reasonCode:s(c.reason_code,80)}:{},createdAt:s(c.created_at,80),...Object.keys(l).length>0?{metadata:l}:{},publicSafe:!0}}),processingSummaries:d.map(te),headlessExecutionAttempts:a.headlessExecutionAttempts.map(Ne),compactContext:ke(a.stateSnapshots),portalSync:m,redactions:u,publicSafe:!0}}catch(n){throw q(n,"Failed to collect continuity snapshot.")}}collectProcessingOutputSummaryCursor(e={}){try{const n=this.store.pollProcessingOutputSummaries(e);return{summaries:n.summaries.map(te),...n.nextCursor?{nextCursor:n.nextCursor}:{},hasMore:n.hasMore,publicSafe:!0}}catch(n){throw q(n,"Failed to collect processing summary cursor.")}}applyStateUpdate(e){const n=Me(e),a=[],i=[],d=[],u=[];for(const m of n){const c=this.applyOperationLog(m);a.push(...c.appliedOperationIds),i.push(...c.ignoredOperationIds),d.push(...c.reasonCodes),u.push(...c.redactions)}return{ok:!0,appliedOperationIds:E(a),ignoredOperationIds:E(i),reasonCodes:E(d.length>0?d:[I.OK]),redactions:u,publicSafe:!0}}applyOperationLog(e){const n=Ue(e),a=[],i=[...n.ignoredOperationIds],d=[...n.reasonCodes],u=[...n.redactions];try{this.store.runInTransaction(()=>{for(const m of n.operations){if(this.store.hasOperationRef(m.operationId,m.idempotencyKey)){i.push(m.operationId),d.push(I.IDEMPOTENCY_REPLAY);continue}this.applyKnownOperation(m,n.logMetadata),a.push(m.operationId),m.type!=="append_receipt"&&this.recordAppliedAudit(m)}for(const m of n.skippedOperations)this.recordIgnoredAuditIfPossible(m,I.UNKNOWN_OPERATION_IGNORED)})}catch(m){throw q(m,"Failed to apply continuity operation log atomically.")}return{ok:!0,appliedOperationIds:E(a),ignoredOperationIds:E(i),reasonCodes:E(d.length>0?d:[I.OK]),redactions:u,publicSafe:!0}}applyKnownOperation(e,n){switch(e.type){case"create_job":this.applyCreateJob(e,n);return;case"update_job_status":this.applyUpdateJobStatus(e);return;case"append_event":this.applyAppendEvent(e);return;case"append_receipt":this.applyAppendReceipt(e);return;case"upsert_goal_campaign":this.applyUpsertGoalCampaign(e);return;case"schedule_next_tick":this.store.scheduleNextTick({jobId:e.jobId,scheduledAt:r(e,"scheduledAt"),updatedAt:e.createdAt,reasonCode:o(e,"reasonCode")});return;case"acquire_lease":this.store.acquireLease({leaseId:r(e,"leaseId"),jobId:e.jobId,runnerId:r(e,"runnerId"),acquiredAt:r(e,"acquiredAt"),expiresAt:r(e,"expiresAt"),operationId:e.operationId,idempotencyKey:e.idempotencyKey,metadata:f(e.metadata,"operation.metadata")});return;case"release_lease":this.store.releaseLease({leaseId:r(e,"leaseId"),releasedAt:r(e,"releasedAt"),reasonCode:o(e,"reasonCode")});return;case"compact_context":this.applyCompactContext(e);return;case"upsert_goal_ledger_item":this.applyUpsertGoalLedgerItem(e);return;case"upsert_verifier":this.applyUpsertVerifier(e);return;case"upsert_review_gate":this.applyUpsertReviewGate(e);return;case"enqueue_outbox":case"append_outbox":this.applyOutbox(e);return;case"enqueue_execution_attempt":this.applyEnqueueExecutionAttempt(e);return;case"claim_execution_attempt":this.store.claimHeadlessExecutionAttempt({attemptId:r(e,"attemptId"),leaseId:r(e,"leaseId"),runnerId:r(e,"runnerId"),claimedAt:o(e,"claimedAt")??e.createdAt,leaseExpiresAt:r(e,"leaseExpiresAt"),reasonCode:o(e,"reasonCode")});return;case"heartbeat_execution_attempt":this.store.heartbeatHeadlessExecutionAttempt({attemptId:r(e,"attemptId"),leaseId:r(e,"leaseId"),runnerId:r(e,"runnerId"),heartbeatAt:o(e,"heartbeatAt")??e.createdAt,leaseExpiresAt:o(e,"leaseExpiresAt")});return;case"release_execution_attempt":this.store.releaseHeadlessExecutionAttempt({attemptId:r(e,"attemptId"),leaseId:r(e,"leaseId"),releasedAt:o(e,"releasedAt")??e.createdAt,status:o(e,"status"),reasonCode:o(e,"reasonCode"),notBeforeAt:o(e,"notBeforeAt"),retryCount:h(e,"retryCount")});return;case"complete_execution_attempt":this.applyCompleteExecutionAttempt(e);return;case"append_execution_receipt":this.applyAppendExecutionReceipt(e);return;case"append_execution_summary":this.applyAppendExecutionSummary(e);return;default:throw new _(`Unknown continuity operation ${e.type}.`,[I.UNKNOWN_OPERATION_REQUIRED],{mutationBlocked:!0})}}applyCompactContext(e){const n=w(r(e,"summaryHash"),"compact_context.summaryHash"),a=oe(e.retainedRefs,"compact_context.retainedRefs",Ce),i=we(o(e,"publicSummary")??`Context compacted with ${a.length} retained public refs.`),d=Fe(e),u=Be(e),m=oe(e.decisionLogRefs,"compact_context.decisionLogRefs",Ee),c=Ye(e,a,d,u),l=E([...a,...m,...d.map(A=>A.relativePath),...u.map(A=>A.relativePath)]).slice(0,D),U=B(i),N=o(e,"reasonCode")??"context-compacted",j={schemaVersion:S,contractVersion:g,jobId:e.jobId,operationId:e.operationId,reasonCode:N,publicSummary:i,counts:{retainedRefs:a.length,artifactRefs:d.length,evidenceRefs:u.length,decisionLogRefs:m.length,...h(e,"inputTokens")!==void 0?{inputContextUnits:h(e,"inputTokens")}:{},...h(e,"outputTokens")!==void 0?{outputContextUnits:h(e,"outputTokens")}:{},summaryChars:i.length},hashes:{summary:n,persistedSummary:U},relativePaths:l,artifactRefs:d,evidenceRefs:u,validationRefs:m,redactionEvidence:e.redactions??[],checkpoint:c};for(const[A,x]of d.entries())this.store.recordArtifact({artifactId:`artifact-${R(e.operationId)}-${A+1}`,jobId:e.jobId,kind:x.kind,relativePath:x.relativePath,sha256:x.sha256,summary:x.publicSummary,createdAt:e.createdAt,operationId:`${e.operationId}:artifact:${A+1}`,idempotencyKey:e.idempotencyKey?`${e.idempotencyKey}:artifact:${A+1}`:void 0,metadata:{schemaVersion:S,contractVersion:g,jobId:e.jobId,operationId:e.operationId,reasonCode:N,hashes:x.sha256?{artifact:x.sha256}:{},relativePaths:[x.relativePath],publicSummary:x.publicSummary}});this.store.recordStateSnapshot({snapshotId:`snapshot-${R(e.operationId)}`,jobId:e.jobId,kind:"context_compaction",relativePath:d.find(A=>A.kind==="context_summary")?.relativePath,sha256:n,summary:i,capturedAt:e.createdAt,operationId:e.operationId,idempotencyKey:e.idempotencyKey,metadata:j}),this.store.appendEvent({eventId:`event-${R(e.operationId)}-context-compacted`,jobId:e.jobId,operationId:`${e.operationId}:event`,idempotencyKey:e.idempotencyKey?`${e.idempotencyKey}:event`:void 0,sequence:e.sequence,type:"context_compacted",summary:`Context compaction checkpoint ${c.checkpointId} persisted with ${l.length} public refs.`,reasonCode:N,createdAt:e.createdAt,metadata:{schemaVersion:S,contractVersion:g,jobId:e.jobId,operationId:e.operationId,reasonCode:N,counts:j.counts,hashes:j.hashes,relativePaths:l,artifactRefs:d.map(A=>A.relativePath),evidenceRefs:u,publicSummary:i}})}applyCreateJob(e,n){const a=T(e,"job");this.store.recordJob({jobId:r(a,"jobId"),kind:r(a,"kind"),status:r(a,"status"),createdAt:r(a,"createdAt"),updatedAt:r(a,"updatedAt"),summary:o(a,"summary"),reasonCode:o(a,"reasonCode"),nextRunAt:o(a,"nextRunAt"),goalId:o(a,"goalId"),loopId:o(a,"loopId"),campaignId:o(a,"campaignId"),operationId:e.operationId,idempotencyKey:e.idempotencyKey,metadata:f({...p(a,"metadata")??p(e,"metadata")??{...n},...Te(this.projectIdentity)},"job.metadata")})}applyUpdateJobStatus(e){this.store.updateJobStatus({jobId:e.jobId,status:r(e,"status"),updatedAt:e.createdAt,reasonCode:o(e,"reasonCode")})}applyAppendEvent(e){const n=T(e,"event"),a=r(n,"type");if(a===ue){this.applyProcessingOutputSummaryEvent(e,n);return}this.store.appendEvent({eventId:r(n,"eventId"),jobId:r(n,"jobId"),operationId:e.operationId,idempotencyKey:e.idempotencyKey,sequence:e.sequence,type:a,summary:r(n,"summary"),reasonCode:o(n,"reasonCode"),createdAt:r(n,"createdAt"),metadata:f(p(n,"metadata"),"event.metadata")})}applyProcessingOutputSummaryEvent(e,n){const a=p(n,"processingOutputSummary")??n,i=o(a,"executionId")??e.operationId,d=o(a,"jobId")??o(n,"jobId")??e.jobId,u=o(a,"publicSummary")??r(n,"summary"),m=o(a,"createdAt")??o(n,"createdAt")??e.createdAt,c=p(a,"metadata"),l=p(n,"metadata");this.store.recordProcessingOutputSummary({eventId:o(n,"eventId"),executionId:i,jobId:d,idempotencyKey:e.idempotencyKey,goalId:o(a,"goalId")??o(n,"goalId"),loopId:o(a,"loopId")??o(n,"loopId"),publicSummary:u,reasonCode:o(a,"reasonCode")??o(n,"reasonCode"),createdAt:m,source:o(a,"source")??o(n,"source"),metadata:{...l??{},...c??{}}})}applyAppendReceipt(e){const n=T(e,"receipt"),a=o(n,"operationId")??e.operationId;this.store.appendReceipt({receiptId:r(n,"receiptId"),jobId:r(n,"jobId"),operationId:a,idempotencyKey:e.idempotencyKey,status:r(n,"status"),reasonCode:o(n,"reasonCode"),appliedOperationIds:L(n.appliedOperationIds),ignoredOperationIds:L(n.ignoredOperationIds),createdAt:r(n,"createdAt"),metadata:f(p(n,"metadata"),"receipt.metadata")})}applyUpsertGoalCampaign(e){const n=T(e,"campaign");this.store.upsertGoalCampaign({campaignId:r(n,"campaignId"),jobId:r(n,"jobId"),status:r(n,"status"),title:o(n,"title"),publicSummary:o(n,"publicSummary"),reasonCode:o(n,"reasonCode"),createdAt:r(n,"createdAt"),updatedAt:r(n,"updatedAt"),operationId:e.operationId,idempotencyKey:e.idempotencyKey,metadata:f(p(n,"metadata"),"campaign.metadata")})}applyUpsertGoalLedgerItem(e){const n=T(e,"item");this.store.upsertGoalLedgerItem({itemId:r(n,"itemId"),campaignId:r(n,"campaignId"),jobId:r(n,"jobId"),itemType:r(n,"type"),status:r(n,"status"),summary:r(n,"publicSummary"),reasonCode:o(n,"reasonCode"),createdAt:e.createdAt,updatedAt:r(n,"updatedAt"),operationId:e.operationId,idempotencyKey:e.idempotencyKey,metadata:f(p(n,"metadata"),"item.metadata")})}applyUpsertVerifier(e){const n=T(e,"verifier");this.store.upsertGoalVerifier({verifierId:r(n,"verifierId"),campaignId:r(n,"campaignId"),jobId:r(n,"jobId"),kind:r(n,"kind"),status:r(n,"status"),summary:o(n,"publicSummary"),reasonCode:o(n,"reasonCode"),lastCheckedAt:o(n,"lastCheckedAt"),operationId:e.operationId,idempotencyKey:e.idempotencyKey,metadata:f(p(n,"metadata"),"verifier.metadata")})}applyUpsertReviewGate(e){const n=T(e,"reviewGate");this.store.upsertGoalReviewGate({gateId:r(n,"gateId"),campaignId:r(n,"campaignId"),jobId:r(n,"jobId"),status:r(n,"status"),summary:o(n,"publicSummary"),required:He(n,"required")??!0,reasonCode:o(n,"reasonCode"),operationId:e.operationId,idempotencyKey:e.idempotencyKey,metadata:f(p(n,"metadata"),"reviewGate.metadata")})}applyOutbox(e){const n=p(e,"outbox")??e;this.store.enqueueOutbox({outboxId:o(n,"outboxId")??`outbox-${R(e.operationId)}`,jobId:o(n,"jobId")??e.jobId,operationId:e.operationId,idempotencyKey:e.idempotencyKey,type:o(n,"type")===e.type?"continuity_event":r(n,"type"),status:o(n,"status"),payload:f(p(n,"payload")??p(e,"metadata")??{},"outbox.payload"),retryCount:h(n,"retryCount"),nextAttemptAt:o(n,"nextAttemptAt"),lastErrorCode:o(n,"lastErrorCode"),createdAt:o(n,"createdAt")??e.createdAt,updatedAt:o(n,"updatedAt")??e.createdAt})}applyEnqueueExecutionAttempt(e){const n=p(e,"attempt")??e,a=f(p(n,"metadata")??p(e,"metadata"),"executionAttempt.metadata");this.store.enqueueHeadlessExecutionAttempt({attemptId:r(n,"attemptId"),executionId:r(n,"executionId"),jobId:o(n,"jobId")??e.jobId,directiveHash:r(n,"directiveHash"),directiveKind:r(n,"directiveKind"),commandClass:r(n,"commandClass"),targetKind:r(n,"targetKind"),targetRef:r(n,"targetRef"),storyId:o(n,"storyId"),epicId:o(n,"epicId"),runtimeId:o(n,"runtimeId"),modelId:o(n,"modelId"),runtimeSource:o(n,"runtimeSource"),status:o(n,"status"),reasonCode:o(n,"reasonCode"),publicSummary:o(n,"publicSummary"),enqueuedAt:o(n,"enqueuedAt")??e.createdAt,notBeforeAt:o(n,"notBeforeAt"),retryCount:h(n,"retryCount"),maxAttempts:h(n,"maxAttempts"),operationId:e.operationId,idempotencyKey:e.idempotencyKey,counts:p(n,"counts"),hashes:p(n,"hashes"),redactionSummary:Array.isArray(n.redactionSummary)?n.redactionSummary:void 0,relativePaths:L(n.relativePaths),metadata:a})}applyCompleteExecutionAttempt(e){const n=p(e,"completion")??e;this.store.completeHeadlessExecutionAttempt({attemptId:r(n,"attemptId"),executionId:o(n,"executionId"),jobId:o(n,"jobId")??e.jobId,leaseId:o(n,"leaseId"),runnerId:o(n,"runnerId"),status:r(n,"status"),completedAt:o(n,"completedAt")??e.createdAt,durationMs:h(n,"durationMs"),reasonCode:o(n,"reasonCode"),publicSummary:o(n,"publicSummary"),notBeforeAt:o(n,"notBeforeAt"),retryCount:h(n,"retryCount"),counts:p(n,"counts"),hashes:p(n,"hashes"),redactionSummary:Array.isArray(n.redactionSummary)?n.redactionSummary:void 0,relativePaths:L(n.relativePaths),metadata:f(p(n,"metadata"),"executionCompletion.metadata")})}applyAppendExecutionReceipt(e){const n=T(e,"receipt");this.store.recordHeadlessExecutionReceipt({receiptId:r(n,"receiptId"),attemptId:r(n,"attemptId"),executionId:r(n,"executionId"),jobId:o(n,"jobId")??e.jobId,status:r(n,"status"),reasonCode:o(n,"reasonCode"),createdAt:o(n,"createdAt")??e.createdAt,operationId:e.operationId,idempotencyKey:e.idempotencyKey,counts:p(n,"counts"),hashes:p(n,"hashes"),redactionSummary:Array.isArray(n.redactionSummary)?n.redactionSummary:void 0,relativePaths:L(n.relativePaths),metadata:f(p(n,"metadata"),"executionReceipt.metadata")})}applyAppendExecutionSummary(e){const n=p(e,"summary")??e;this.store.recordHeadlessExecutionSummary({eventId:o(n,"eventId"),attemptId:r(n,"attemptId"),executionId:r(n,"executionId"),jobId:o(n,"jobId")??e.jobId,publicSummary:r(n,"publicSummary"),reasonCode:o(n,"reasonCode"),createdAt:o(n,"createdAt")??e.createdAt,runtimeId:o(n,"runtimeId"),modelId:o(n,"modelId"),durationMs:h(n,"durationMs"),counts:p(n,"counts"),hashes:p(n,"hashes"),redactionSummary:Array.isArray(n.redactionSummary)?n.redactionSummary:void 0,relativePaths:L(n.relativePaths),metadata:f(p(n,"metadata"),"executionSummary.metadata")})}recordAppliedAudit(e){this.store.recordOperationAudit({receiptId:`receipt-${R(e.operationId)}`,jobId:e.jobId,operationId:e.operationId,idempotencyKey:`audit-${e.idempotencyKey??e.operationId}`,status:"applied",reasonCode:I.OK,appliedOperationIds:[e.operationId],createdAt:e.createdAt,metadata:{schemaVersion:S,contractVersion:g,jobId:e.jobId,operationId:e.operationId,status:"applied",reasonCode:I.OK}})}recordIgnoredAuditIfPossible(e,n){this.store.jobExists(e.jobId)&&this.store.recordOperationAudit({receiptId:`receipt-${R(e.operationId)}-ignored`,jobId:e.jobId,operationId:e.operationId,idempotencyKey:`audit-${e.idempotencyKey??e.operationId}-ignored`,status:"ignored",reasonCode:n,ignoredOperationIds:[e.operationId],createdAt:e.createdAt,metadata:{schemaVersion:S,contractVersion:g,jobId:e.jobId,operationId:e.operationId,status:"ignored",reasonCode:n}})}}function ee(t){const e=Le(t.metadata_json,t.iteration),n=v(t.metadata_json),a=P(n),i=le(n.currentStage)?n.currentStage:void 0,d=_e(n.stageHistory),u=Y(n.iteration)??Y(t.iteration);return O(e,"goalLedgerItems","goal_ledger_item_count"in t?t.goal_ledger_item_count:void 0),O(e,"blockedGoalLedgerItems","blocked_goal_ledger_item_count"in t?t.blocked_goal_ledger_item_count:void 0),O(e,"securityIssuesBlocked","security_issue_blocked_count"in t?t.security_issue_blocked_count:void 0),O(e,"goalVerifiers","goal_verifier_count"in t?t.goal_verifier_count:void 0),O(e,"failedVerifiers","failed_verifier_count"in t?t.failed_verifier_count:void 0),O(e,"unavailableVerifiers","unavailable_verifier_count"in t?t.unavailable_verifier_count:void 0),O(e,"goalReviewGates","goal_review_gate_count"in t?t.goal_review_gate_count:void 0),O(e,"failedRequiredReviewGates","failed_required_review_gate_count"in t?t.failed_required_review_gate_count:void 0),{jobId:s(t.job_id,80),kind:s(t.kind,40),status:s(t.status,40),publicSummary:s(t.summary??"No public summary recorded.",k),createdAt:s(t.created_at,80),updatedAt:s(t.updated_at,80),...t.next_run_at?{nextRunAt:s(t.next_run_at,80)}:{},...t.reason_code?{reasonCode:s(t.reason_code,80)}:{},...Object.keys(e).length>0?{counts:e}:{},...i?{currentStage:i}:{},...d.length>0?{stageHistory:d}:{},...u!==void 0?{iteration:u}:{},...Oe(a),publicSafe:!0}}function xe(t){const e={jobs:t.counts.jobs??t.jobCount,dueJobs:t.counts.dueJobs??t.dueJobCount,outboxPending:t.outboxPending,redactions:t.redactions.length},n=V({generatedAt:t.generatedAt,counts:e});return{syncVersion:fe,transportKind:"client_snapshot",snapshotId:`snapshot-${R(B(n).replace(/^sha256:/,"").slice(0,16))}`,generatedAt:s(t.generatedAt,80),publicSummary:`Client snapshot contains ${e.jobs} public jobs and ${e.outboxPending} pending outbox records.`,counts:e,hashes:{snapshot:B(n)},redactionEvidence:t.redactions.slice(0,20),publicSafe:!0}}function Oe(t){const e=t.runtimeSource==="explicit"||t.runtimeSource==="origin"||t.runtimeSource==="default"||t.runtimeSource==="fallback"||t.runtimeSource==="unspecified"?t.runtimeSource:void 0;return{...b(t,"runtimeId",80),...b(t,"modelId",120),...e?{runtimeSource:e}:{},...b(t,"headlessRuntime",80),...b(t,"headlessModel",120),...b(t,"headlessRuntimeReasonCode",100),...b(t,"originRuntime",80),...b(t,"originModel",120),...b(t,"workspaceId",120),...b(t,"workspaceLabel",80),...b(t,"projectId",120),...b(t,"projectLabel",80)}}function Te(t){return t?{workspaceId:t.workspaceId,workspaceLabel:t.workspaceLabel,projectId:t.projectId,projectLabel:t.projectLabel}:{}}function b(t,e,n){const a=t[e];return typeof a=="string"?{[e]:s(a,n)}:{}}function te(t){const e=P(v(t.metadata_json)),n=typeof e.goalId=="string"?s(e.goalId,100):void 0,a=typeof e.loopId=="string"?s(e.loopId,100):void 0;return{eventId:s(t.event_id,120),jobId:s(t.job_id,100),...n?{goalId:n}:{},...a?{loopId:a}:{},executionId:s(t.execution_id,120),publicSummary:s(t.public_summary,k),...t.reason_code?{reasonCode:s(t.reason_code,80)}:{},createdAt:s(t.created_at,80),cursor:s(t.cursor,260),...Object.keys(e).length>0?{metadata:e}:{},publicSafe:!0}}function Ne(t){return{attemptId:s(t.attempt_id,120),executionId:s(t.execution_id,120),jobId:s(t.job_id,100),status:s(t.status,40),...t.reason_code?{reasonCode:s(t.reason_code,80)}:{},...t.runtime_id?{runtimeId:s(t.runtime_id,80)}:{},...t.model_id?{modelId:s(t.model_id,120)}:{},retryCount:Math.max(0,Math.floor(t.retry_count)),attemptCount:Math.max(0,Math.floor(t.attempt_count)),maxAttempts:Math.max(1,Math.floor(t.max_attempts)),queuePriority:Math.max(-100,Math.min(100,Math.floor(t.queue_priority))),queueScope:t.queue_scope==="workspace"?"workspace":"project",...typeof t.duration_ms=="number"&&Number.isFinite(t.duration_ms)?{durationMs:Math.max(0,Math.floor(t.duration_ms))}:{},...ne("counts",v(t.counts_json)),...ne("hashes",v(t.hashes_json)),...Pe("redactionSummary",t.redaction_summary_json),...t.lease_id?{leaseId:s(t.lease_id,120)}:{},...t.runner_id?{runnerId:s(t.runner_id,120)}:{},...t.lease_expires_at?{leaseExpiresAt:s(t.lease_expires_at,80)}:{},...t.heartbeat_at?{heartbeatAt:s(t.heartbeat_at,80)}:{},publicSummary:s(t.public_summary??"No public headless execution summary recorded.",k),enqueuedAt:s(t.enqueued_at,80),...t.not_before_at?{notBeforeAt:s(t.not_before_at,80)}:{},...t.next_retry_at?{nextRetryAt:s(t.next_retry_at,80)}:{},...t.dead_lettered_at?{deadLetteredAt:s(t.dead_lettered_at,80)}:{},...t.dead_letter_reason_code?{deadLetterReasonCode:s(t.dead_letter_reason_code,80)}:{},publicSafe:!0}}function O(t,e,n){typeof n=="number"&&Number.isFinite(n)&&n>0&&(t[e]=Math.floor(n))}function Le(t,e){const n={};if(t)try{const a=JSON.parse(t),i=y(a)&&y(a.counts)?a.counts:void 0;if(i)for(const[d,u]of Object.entries(i))typeof u=="number"&&Number.isFinite(u)&&(n[d]=Math.max(0,Math.floor(u)))}catch{}return typeof e=="number"&&Number.isFinite(e)&&(n.iteration=Math.max(0,Math.floor(e))),n}function ke(t){const e=t.map(ve).filter(n=>!!n);return{preferredSource:e.length>0?"compact_summary":"recent_events",summaries:e,publicSafe:!0}}function ve(t){const e=v(t.metadata_json),n=y(e.hashes)?e.hashes:{},a=typeof n.summary=="string"?n.summary:t.sha256??void 0,i=typeof e.reasonCode=="string"?s(e.reasonCode,80):void 0;return{snapshotId:s(t.snapshot_id,120),...t.job_id?{jobId:s(t.job_id,100)}:{},...t.operation_id?{operationId:s(t.operation_id,120)}:{},capturedAt:s(t.captured_at,80),publicSummary:s(t.summary??"Context compacted with public-safe refs.",Z),...a?{summaryHash:s(a,120)}:{},...t.relative_path?{relativePath:s(t.relative_path,240)}:{},retainedRefs:je(e.relativePaths),artifactRefs:$(e.artifactRefs),evidenceRefs:$(e.evidenceRefs),...y(e.checkpoint)?{checkpoint:P(e.checkpoint)}:{},...i?{reasonCode:i}:{},publicSafe:!0}}function v(t){if(!t)return{};try{const e=JSON.parse(t);return y(e)?e:{}}catch{return{}}}function ne(t,e){const n=P(e);return Object.keys(n).length>0?{[t]:n}:{}}function Pe(t,e){if(!e)return{};try{const n=JSON.parse(e),a=$(n);return a.length>0?{[t]:a}:{}}catch{return{}}}function je(t){return Array.isArray(t)?t.filter(e=>typeof e=="string"&&e.length>0).map(e=>s(e,240)).slice(0,D):[]}function $(t){return Array.isArray(t)?t.map(H).filter(e=>e!==void 0).slice(0,D):[]}function P(t){const e={};for(const[n,a]of Object.entries(t).slice(0,20)){if(K.test(n))continue;const i=H(a);i!==void 0&&(e[s(n,80)]=i)}return e}function H(t){if(!M(t)){if(typeof t=="string")return s(t,240);if(typeof t=="number"&&Number.isFinite(t))return Math.floor(t);if(typeof t=="boolean"||t===null)return t;if(Array.isArray(t))return t.map(H).filter(n=>n!==void 0).slice(0,20);if(y(t))return P(t)}}function Me(t){return y(t)?Array.isArray(t.operationLogs)?t.operationLogs.filter(y):y(t.operationLog)?[t.operationLog]:Array.isArray(t.operations)?[t]:[]:[]}function Ue(t){const e=[],n=[],a=[],i=[],d=[],u=new Map;if(t.schemaVersion!==S)throw new _("Invalid continuity operation log schema version.",[I.INVALID_SCHEMA_VERSION],{mutationBlocked:!0});if(t.contractVersion!==g)throw new _("Invalid continuity operation log contract version.",[I.INVALID_CONTRACT_VERSION],{mutationBlocked:!0});if(t.publicSafe!==!0)throw new _("Continuity operation log is not marked public-safe.",[I.UNSAFE_FIELD_REJECTED],{mutationBlocked:!0});const m=f(p(t,"metadata"),"log.metadata");if(!Array.isArray(t.operations))return{operations:[],skippedOperations:a,ignoredOperationIds:i,reasonCodes:e,redactions:n,logMetadata:m};for(const c of[...t.operations].filter(y).sort(De)){const l=Ve(c),U=V(l),N=u.get(l.operationId);if(N!==void 0){if(N===U){i.push(l.operationId),e.push(I.IDEMPOTENCY_REPLAY);continue}throw n.push({field:"operationId",reason:"unknown_required_operation",evidence:"operation-denied",publicSafe:!0}),new _("Duplicate continuity operation ID with conflicting payload.",[I.DUPLICATE_OPERATION_ID],{redactions:n,mutationBlocked:!0})}if(u.set(l.operationId,U),f(l.metadata,"operation.metadata"),!he.has(l.type)){const j=c.required===!0;if(c.forwardCompatible===!0&&!j){a.push(l),i.push(l.operationId),e.push(I.UNKNOWN_OPERATION_IGNORED);continue}throw n.push({field:l.type,reason:"unknown_required_operation",evidence:"operation-denied",publicSafe:!0}),new _(`Unknown required continuity operation ${l.type}.`,[I.UNKNOWN_OPERATION_REQUIRED],{redactions:n,mutationBlocked:!0})}d.push(l)}return{operations:d,skippedOperations:a,ignoredOperationIds:i,reasonCodes:e,redactions:n,logMetadata:m}}function Ve(t){if(t.schemaVersion!==S)throw new _("Invalid continuity operation schema version.",[I.INVALID_SCHEMA_VERSION],{mutationBlocked:!0});if(t.contractVersion!==g)throw new _("Invalid continuity operation contract version.",[I.INVALID_CONTRACT_VERSION],{mutationBlocked:!0});if(t.publicSafe!==!0)throw new _("Continuity operation is not marked public-safe.",[I.UNSAFE_FIELD_REJECTED],{mutationBlocked:!0});const e=r(t,"type"),n=r(t,"operationId"),a=r(t,"jobId"),i=$e(t,"sequence"),d=r(t,"createdAt");return{...t,type:e,operationId:n,jobId:a,schemaVersion:S,contractVersion:g,sequence:i,createdAt:d,idempotencyKey:o(t,"idempotencyKey"),metadata:p(t,"metadata"),publicSafe:!0}}function f(t,e){if(!t)return{};const n={},a=[];for(const[i,d]of Object.entries(t)){const u=qe(i),m=M(d),c=u??m;if(c){a.push({field:`${e}.${i}`,reason:c,evidence:u?"key-denied":"value-denied",publicSafe:!0});continue}n[i]=d}if(a.length>0)throw new _(`Continuity metadata rejected unsafe public fields at ${e}.`,[I.UNSAFE_FIELD_REJECTED],{redactions:a,mutationBlocked:!0});return n}function qe(t){return!Ae.has(t)||K.test(t)?"unsafe_key":null}function M(t){if(typeof t=="string")return G.test(t)?"private_url":be.test(t)?"local_absolute_path":J.test(t)?"secret":Q.test(t)?"prompt_body":W.test(t)?"raw_log":X.test(t)?"protected_field":null;if(t===null||typeof t=="number"||typeof t=="boolean")return null;if(Array.isArray(t)){for(const e of t){const n=M(e);if(n)return n}return null}if(y(t)){for(const[e,n]of Object.entries(t)){if(K.test(e))return"unsafe_key";const a=M(n);if(a)return a}return null}return"unsafe_key"}function Ke(t){const e=[];for(const n of t)if(n.metadata_json)try{const i=JSON.parse(n.metadata_json).redactionEvidence;if(!Array.isArray(i))continue;for(const d of i)y(d)&&(typeof d.field!="string"||typeof d.reason!="string"||typeof d.evidence!="string"||e.push({field:s(d.field,120),reason:d.reason,evidence:d.evidence,publicSafe:!0}))}catch{}return e}function De(t,e){const n=typeof t.sequence=="number"?t.sequence:0,a=typeof e.sequence=="number"?e.sequence:0;if(n!==a)return n-a;const i=String(t.createdAt??"").localeCompare(String(e.createdAt??""));return i!==0?i:String(t.operationId??"").localeCompare(String(e.operationId??""))}function y(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function T(t,e){const n=t[e];if(!y(n))throw new _(`Continuity operation missing object field ${e}.`,[I.INVALID_SCHEMA_VERSION],{mutationBlocked:!0});return n}function p(t,e){const n=t[e];return y(n)?n:void 0}function r(t,e){const n=t[e];if(typeof n!="string"||n.length===0)throw new _(`Continuity operation missing string field ${e}.`,[I.INVALID_SCHEMA_VERSION],{mutationBlocked:!0});return n}function o(t,e){const n=t[e];return typeof n=="string"&&n.length>0?n:void 0}function $e(t,e){const n=t[e];if(typeof n!="number"||!Number.isFinite(n))throw new _(`Continuity operation missing numeric field ${e}.`,[I.INVALID_SCHEMA_VERSION],{mutationBlocked:!0});return n}function h(t,e){const n=t[e];return typeof n=="number"&&Number.isFinite(n)?n:void 0}function He(t,e){const n=t[e];return typeof n=="boolean"?n:void 0}function L(t){return Array.isArray(t)?t.filter(e=>typeof e=="string"&&e.length>0):[]}function ae(t){return Array.isArray(t)?t.filter(y):[]}function we(t){return C(t,Z,"compact_context.publicSummary")}function C(t,e,n){const a=t.trim();if(!a)throw new _(`Continuity compaction missing public text at ${n}.`,[I.INVALID_SCHEMA_VERSION],{mutationBlocked:!0});const i=M(a);if(i)throw new _(`Continuity compaction rejected unsafe public text at ${n}.`,[I.UNSAFE_FIELD_REJECTED],{redactions:[{field:n,reason:i,evidence:"value-denied",publicSafe:!0}],mutationBlocked:!0});return a.length<=e?a:`${a.slice(0,e)}\u2026[TRUNCATED:${a.length-e}]`}function w(t,e){return C(t,120,e)}function oe(t,e,n){return E(L(t).map((a,i)=>F(a,`${e}[${i}]`))).slice(0,n)}function F(t,e){const n=C(t,240,e).replace(/\\/g,"/"),a=n.split("/").filter(Boolean),i=/^[A-Za-z]:\//.test(n);if(n.startsWith("/")||n.startsWith("~")||n.includes("://")||i||a.includes(".."))throw new _(`Continuity compaction rejected non-relative ref at ${e}.`,[I.UNSAFE_FIELD_REJECTED],{redactions:[{field:e,reason:"private_url",evidence:"value-denied",publicSafe:!0}],mutationBlocked:!0});return n}function Fe(t){const e=[],n=p(t,"summaryRef");n&&e.push(re(n,"compact_context.summaryRef","context_summary"));for(const[i,d]of ae(t.artifactRefs).entries())e.push(re(d,`compact_context.artifactRefs[${i}]`));const a=new Set;return e.filter(i=>{const d=`${i.kind}:${i.relativePath}`;return a.has(d)?!1:(a.add(d),!0)}).slice(0,Se)}function re(t,e,n="context_summary"){const a=C(o(t,"kind")??n,60,`${e}.kind`),i=F(r(t,"relativePath"),`${e}.relativePath`),d=o(t,"sha256"),u=o(t,"publicSummary");return{kind:a,relativePath:i,...d?{sha256:w(d,`${e}.sha256`)}:{},...u?{publicSummary:C(u,k,`${e}.publicSummary`)}:{},publicSafe:!0}}function Be(t){return ae(t.evidenceIndex).map((e,n)=>{const a=`compact_context.evidenceIndex[${n}]`,i=F(r(e,"relativePath"),`${a}.relativePath`),d=o(e,"refId")??`evidence-${R(i)}`,u=o(e,"reasonCode")??o(t,"reasonCode")??"context-compacted",m=o(e,"sha256"),c=o(e,"publicSummary");return{refId:C(d,120,`${a}.refId`),relativePath:i,reasonCode:C(u,80,`${a}.reasonCode`),...m?{sha256:w(m,`${a}.sha256`)}:{},...c?{publicSummary:C(c,k,`${a}.publicSummary`)}:{},publicSafe:!0}}).slice(0,ge)}function Ye(t,e,n,a){const i=p(t,"checkpoint")??{},d=o(i,"checkpointId")??`checkpoint-${R(t.operationId)}`,u=o(i,"capturedAt")??t.createdAt,m={checkpointId:C(d,120,"compact_context.checkpoint.checkpointId"),capturedAt:C(u,80,"compact_context.checkpoint.capturedAt"),retainedRefCount:e.length,artifactRefCount:n.length,evidenceRefCount:a.length,publicSafe:!0};for(const c of["eventCursor","receiptCursor"]){const l=o(i,c);l&&(m[c]=C(l,120,`compact_context.checkpoint.${c}`))}for(const c of["recentEventCount","recentReceiptCount"]){const l=h(i,c);l!==void 0&&(m[c]=Math.max(0,Math.floor(l)))}return m}function B(t){return`sha256:${ie("sha256").update(t).digest("hex")}`}function E(t){return Array.from(new Set(t))}function R(t){return t.replace(/[^a-z0-9_.:-]+/gi,"-").slice(0,120)}function s(t,e){const n=ze(t);return n.length<=e?n:`${n.slice(0,e)}\u2026[TRUNCATED:${n.length-e}]`}function ze(t){return G.test(t)||J.test(t)||W.test(t)||Q.test(t)||X.test(t)?"[REDACTED]":t}function V(t){return Array.isArray(t)?`[${t.map(V).join(",")}]`:y(t)?`{${Object.keys(t).sort().map(e=>`${JSON.stringify(e)}:${V(t[e])}`).join(",")}}`:JSON.stringify(t)}function q(t,e){if(t instanceof _)return t;if(t instanceof pe)return new _(t.message,[t.reasonCode],{mutationBlocked:t.mutationBlocked,cause:t});const n=t instanceof Error?t.message:String(t);return new _(`${e} ${n}`,[I.SQLITE_MUTATION_FAILED],{cause:t})}export{g as CONTINUITY_CLIENT_CONTRACT_VERSION,fe as CONTINUITY_CLIENT_PORTAL_SYNC_ENVELOPE_VERSION,I as CONTINUITY_CLIENT_REASON_CODES,S as CONTINUITY_CLIENT_SCHEMA_VERSION,Ze as CONTINUITY_INVOKE_WATCH_DEFAULT_LIMIT,tt as CONTINUITY_INVOKE_WATCH_DEFAULT_MAX_IDLE_POLLS,nt as CONTINUITY_INVOKE_WATCH_DEFAULT_MAX_POLLS,et as CONTINUITY_INVOKE_WATCH_DEFAULT_POLL_INTERVAL_MS,z as CONTINUITY_PROCESSING_SUMMARY_WATCH_DEFAULT_LIMIT,ye as CONTINUITY_PROCESSING_SUMMARY_WATCH_DEFAULT_POLL_INTERVAL_MS,Re as ContinuityClientStateStore,_ as ContinuityClientStateStoreError,at as continuitySqliteExists,ot as createContinuityHardStopSnapshot,rt as openContinuityClientStateStore};
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @license FSL-1.1
3
+ * Copyright (c) 2026 OrNexus AI
4
+ *
5
+ * P180.05 -- invoke.ts hooks for client-owned continuity SQLite state.
6
+ */
7
+ import { type ContinuityClientReasonCode, type ContinuitySnapshotForInvoke } from './continuity-client-state-store.js';
8
+ export { RUNNER_BOOTSTRAP_POLICY_REASON_CODES, classifyRunnerBootstrapPolicy, classifyRunnerBootstrapPolicyFromArgs, parseRunnerBootstrapCommandIntent, type RunnerBootstrapCommandIntent, type RunnerBootstrapPolicyContext, type RunnerBootstrapPolicyDecision, type RunnerBootstrapPolicyReasonCode, } from './runner-bootstrap-policy.js';
9
+ export interface ContinuityPersistResult {
10
+ readonly ok: boolean;
11
+ readonly appliedOperationIds: readonly string[];
12
+ readonly ignoredOperationIds: readonly string[];
13
+ readonly reasonCodes: readonly ContinuityClientReasonCode[];
14
+ readonly publicSafe: true;
15
+ readonly error?: string;
16
+ }
17
+ export declare function isContinuityTrigger(args: string): boolean;
18
+ export declare function readContinuityForRequest(args: string, projectRoot: string, nowIso?: string): Promise<ContinuitySnapshotForInvoke | undefined>;
19
+ export declare function persistContinuityFromResponse(metadata: Record<string, unknown> | undefined, projectRoot: string): Promise<ContinuityPersistResult>;
@@ -0,0 +1 @@
1
+ import{CONTINUITY_CLIENT_REASON_CODES as s,ContinuityClientStateStoreError as f,continuitySqliteExists as p,createContinuityHardStopSnapshot as I,openContinuityClientStateStore as d}from"./continuity-client-state-store.js";import{buildAutonomousGovernanceEnvelope as m,parseAutonomousInvokeIntent as c}from"./autonomous-governance.js";import{RUNNER_BOOTSTRAP_POLICY_REASON_CODES as _,classifyRunnerBootstrapPolicy as N,classifyRunnerBootstrapPolicyFromArgs as L,parseRunnerBootstrapCommandIntent as D}from"./runner-bootstrap-policy.js";import{parseRunnerBootstrapCommandIntent as C}from"./runner-bootstrap-policy.js";function l(t){return C(t).kind!=="unknown"||c(t)!==null}async function A(t,n,r){const a=c(t);if(a!==null||l(t)||p(n))try{const o=await d({projectRoot:n,now:()=>r??new Date().toISOString()});try{if(a){const i=r??new Date().toISOString(),u=m(a);return o.recordAutonomousGovernance(u,i),{...o.collectSnapshot({nowIso:i}),autonomousGovernance:u}}return o.collectSnapshot({nowIso:r})}finally{o.close()}}catch(o){const i=S(o);return l(t)||p(n)?I(i,r??new Date().toISOString()):void 0}}async function g(t,n){const r=t?.continuityStateUpdate;if(!r)return{ok:!0,appliedOperationIds:[],ignoredOperationIds:[],reasonCodes:[s.OK],publicSafe:!0};let a;try{a=await d({projectRoot:n});const e=a.applyStateUpdate(r);return{ok:!0,appliedOperationIds:e.appliedOperationIds,ignoredOperationIds:e.ignoredOperationIds,reasonCodes:e.reasonCodes,publicSafe:!0}}catch(e){const o=S(e),i=e instanceof Error?e.message:String(e);return{ok:!1,appliedOperationIds:[],ignoredOperationIds:[],reasonCodes:o,error:i,publicSafe:!0}}finally{a?.close()}}function S(t){if(t instanceof f)return t.reasonCodes;const n=t instanceof Error?t.message:String(t);return/sqlite-adapter-unavailable/i.test(n)?[s.SQLITE_ADAPTER_UNAVAILABLE]:/integrity|corrupt|malformed|not a database/i.test(n)?[s.SQLITE_INTEGRITY_FAILED]:[s.SQLITE_MUTATION_FAILED]}export{_ as RUNNER_BOOTSTRAP_POLICY_REASON_CODES,N as classifyRunnerBootstrapPolicy,L as classifyRunnerBootstrapPolicyFromArgs,l as isContinuityTrigger,D as parseRunnerBootstrapCommandIntent,g as persistContinuityFromResponse,A as readContinuityForRequest};
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @license FSL-1.1
3
+ * Copyright (c) 2026 OrNexus AI
4
+ *
5
+ * P180.04 -- Initial public-safe Enterprise Continuity Plane SQLite schema.
6
+ */
7
+ export declare const INITIAL_CONTINUITY_SQLITE_MIGRATION: Readonly<{
8
+ readonly version: 1;
9
+ readonly name: "initial-continuity-schema";
10
+ readonly sql: "\nCREATE TABLE IF NOT EXISTS jobs (\n job_id TEXT PRIMARY KEY,\n kind TEXT NOT NULL CHECK (kind IN ('goal', 'loop', 'runner', 'jobs')),\n status TEXT NOT NULL CHECK (status IN (\n 'draft', 'planned', 'active', 'running', 'waiting_external', 'waiting_human',\n 'backoff', 'paused', 'blocked', 'completed', 'aborted', 'cancelled'\n )),\n summary TEXT,\n reason_code TEXT,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n next_run_at TEXT,\n goal_id TEXT,\n loop_id TEXT,\n campaign_id TEXT,\n operation_id TEXT,\n idempotency_key TEXT,\n metadata_json TEXT CHECK (metadata_json IS NULL OR json_valid(metadata_json)),\n public_safe INTEGER NOT NULL DEFAULT 1 CHECK (public_safe = 1),\n UNIQUE (operation_id),\n UNIQUE (idempotency_key)\n);\n\nCREATE INDEX IF NOT EXISTS idx_jobs_status ON jobs(status);\nCREATE INDEX IF NOT EXISTS idx_jobs_next_run_at ON jobs(next_run_at);\nCREATE INDEX IF NOT EXISTS idx_jobs_goal_id ON jobs(goal_id);\nCREATE INDEX IF NOT EXISTS idx_jobs_loop_id ON jobs(loop_id);\n\nCREATE TABLE IF NOT EXISTS job_leases (\n lease_id TEXT PRIMARY KEY,\n job_id TEXT NOT NULL,\n runner_id TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'acquired' CHECK (status IN ('acquired', 'released', 'expired')),\n acquired_at TEXT NOT NULL,\n expires_at TEXT NOT NULL,\n released_at TEXT,\n operation_id TEXT,\n idempotency_key TEXT,\n metadata_json TEXT CHECK (metadata_json IS NULL OR json_valid(metadata_json)),\n public_safe INTEGER NOT NULL DEFAULT 1 CHECK (public_safe = 1),\n FOREIGN KEY (job_id) REFERENCES jobs(job_id) ON DELETE CASCADE,\n UNIQUE (operation_id),\n UNIQUE (idempotency_key)\n);\n\nCREATE INDEX IF NOT EXISTS idx_job_leases_job_id ON job_leases(job_id);\nCREATE INDEX IF NOT EXISTS idx_job_leases_expires_at ON job_leases(expires_at);\nCREATE UNIQUE INDEX IF NOT EXISTS idx_job_leases_active_job\n ON job_leases(job_id)\n WHERE released_at IS NULL;\n\nCREATE TABLE IF NOT EXISTS job_events (\n event_id TEXT PRIMARY KEY,\n job_id TEXT NOT NULL,\n operation_id TEXT NOT NULL,\n idempotency_key TEXT,\n event_sequence INTEGER,\n type TEXT NOT NULL,\n summary TEXT NOT NULL,\n reason_code TEXT,\n created_at TEXT NOT NULL,\n metadata_json TEXT CHECK (metadata_json IS NULL OR json_valid(metadata_json)),\n public_safe INTEGER NOT NULL DEFAULT 1 CHECK (public_safe = 1),\n FOREIGN KEY (job_id) REFERENCES jobs(job_id) ON DELETE CASCADE,\n UNIQUE (operation_id),\n UNIQUE (idempotency_key)\n);\n\nCREATE INDEX IF NOT EXISTS idx_job_events_job_id ON job_events(job_id);\nCREATE INDEX IF NOT EXISTS idx_job_events_created_at ON job_events(created_at);\n\nCREATE TABLE IF NOT EXISTS job_receipts (\n receipt_id TEXT PRIMARY KEY,\n job_id TEXT NOT NULL,\n operation_id TEXT,\n idempotency_key TEXT,\n status TEXT NOT NULL CHECK (status IN ('accepted', 'applied', 'ignored', 'failed', 'deferred')),\n reason_code TEXT,\n applied_operation_ids_json TEXT CHECK (applied_operation_ids_json IS NULL OR json_valid(applied_operation_ids_json)),\n ignored_operation_ids_json TEXT CHECK (ignored_operation_ids_json IS NULL OR json_valid(ignored_operation_ids_json)),\n created_at TEXT NOT NULL,\n metadata_json TEXT CHECK (metadata_json IS NULL OR json_valid(metadata_json)),\n public_safe INTEGER NOT NULL DEFAULT 1 CHECK (public_safe = 1),\n FOREIGN KEY (job_id) REFERENCES jobs(job_id) ON DELETE CASCADE,\n UNIQUE (operation_id),\n UNIQUE (idempotency_key)\n);\n\nCREATE INDEX IF NOT EXISTS idx_job_receipts_job_id ON job_receipts(job_id);\nCREATE INDEX IF NOT EXISTS idx_job_receipts_created_at ON job_receipts(created_at);\n\nCREATE TABLE IF NOT EXISTS goal_campaigns (\n campaign_id TEXT PRIMARY KEY,\n job_id TEXT NOT NULL UNIQUE,\n status TEXT NOT NULL,\n title TEXT,\n public_summary TEXT,\n reason_code TEXT,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n operation_id TEXT,\n idempotency_key TEXT,\n metadata_json TEXT CHECK (metadata_json IS NULL OR json_valid(metadata_json)),\n public_safe INTEGER NOT NULL DEFAULT 1 CHECK (public_safe = 1),\n FOREIGN KEY (job_id) REFERENCES jobs(job_id) ON DELETE CASCADE,\n UNIQUE (operation_id),\n UNIQUE (idempotency_key)\n);\n\nCREATE INDEX IF NOT EXISTS idx_goal_campaigns_status ON goal_campaigns(status);\n\nCREATE TABLE IF NOT EXISTS goal_ledger_items (\n item_id TEXT PRIMARY KEY,\n campaign_id TEXT NOT NULL,\n operation_id TEXT NOT NULL,\n idempotency_key TEXT,\n item_type TEXT NOT NULL,\n status TEXT NOT NULL,\n summary TEXT NOT NULL,\n reason_code TEXT,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n metadata_json TEXT CHECK (metadata_json IS NULL OR json_valid(metadata_json)),\n public_safe INTEGER NOT NULL DEFAULT 1 CHECK (public_safe = 1),\n FOREIGN KEY (campaign_id) REFERENCES goal_campaigns(campaign_id) ON DELETE CASCADE,\n UNIQUE (operation_id),\n UNIQUE (idempotency_key)\n);\n\nCREATE INDEX IF NOT EXISTS idx_goal_ledger_items_campaign_id ON goal_ledger_items(campaign_id);\n\nCREATE TABLE IF NOT EXISTS goal_verifiers (\n verifier_id TEXT PRIMARY KEY,\n campaign_id TEXT NOT NULL,\n kind TEXT NOT NULL,\n status TEXT NOT NULL,\n summary TEXT,\n reason_code TEXT,\n last_checked_at TEXT,\n operation_id TEXT,\n idempotency_key TEXT,\n metadata_json TEXT CHECK (metadata_json IS NULL OR json_valid(metadata_json)),\n public_safe INTEGER NOT NULL DEFAULT 1 CHECK (public_safe = 1),\n FOREIGN KEY (campaign_id) REFERENCES goal_campaigns(campaign_id) ON DELETE CASCADE,\n UNIQUE (operation_id),\n UNIQUE (idempotency_key)\n);\n\nCREATE INDEX IF NOT EXISTS idx_goal_verifiers_campaign_id ON goal_verifiers(campaign_id);\n\nCREATE TABLE IF NOT EXISTS goal_review_gates (\n gate_id TEXT PRIMARY KEY,\n campaign_id TEXT NOT NULL,\n status TEXT NOT NULL,\n summary TEXT,\n required INTEGER NOT NULL DEFAULT 1 CHECK (required IN (0, 1)),\n reason_code TEXT,\n operation_id TEXT,\n idempotency_key TEXT,\n metadata_json TEXT CHECK (metadata_json IS NULL OR json_valid(metadata_json)),\n public_safe INTEGER NOT NULL DEFAULT 1 CHECK (public_safe = 1),\n FOREIGN KEY (campaign_id) REFERENCES goal_campaigns(campaign_id) ON DELETE CASCADE,\n UNIQUE (operation_id),\n UNIQUE (idempotency_key)\n);\n\nCREATE INDEX IF NOT EXISTS idx_goal_review_gates_campaign_id ON goal_review_gates(campaign_id);\n\nCREATE TABLE IF NOT EXISTS loop_jobs (\n loop_id TEXT PRIMARY KEY,\n job_id TEXT NOT NULL UNIQUE,\n interval_seconds INTEGER NOT NULL CHECK (interval_seconds > 0),\n max_iterations INTEGER,\n max_duration_ms INTEGER,\n backoff_policy_json TEXT CHECK (backoff_policy_json IS NULL OR json_valid(backoff_policy_json)),\n overlap_policy TEXT NOT NULL,\n next_tick_at TEXT,\n iteration INTEGER NOT NULL DEFAULT 0 CHECK (iteration >= 0),\n operation_id TEXT,\n idempotency_key TEXT,\n metadata_json TEXT CHECK (metadata_json IS NULL OR json_valid(metadata_json)),\n public_safe INTEGER NOT NULL DEFAULT 1 CHECK (public_safe = 1),\n FOREIGN KEY (job_id) REFERENCES jobs(job_id) ON DELETE CASCADE,\n UNIQUE (operation_id),\n UNIQUE (idempotency_key)\n);\n\nCREATE INDEX IF NOT EXISTS idx_loop_jobs_next_tick_at ON loop_jobs(next_tick_at);\n\nCREATE TABLE IF NOT EXISTS artifacts (\n artifact_id TEXT PRIMARY KEY,\n job_id TEXT,\n kind TEXT NOT NULL,\n relative_path TEXT NOT NULL,\n sha256 TEXT,\n summary TEXT,\n operation_id TEXT,\n idempotency_key TEXT,\n created_at TEXT NOT NULL,\n metadata_json TEXT CHECK (metadata_json IS NULL OR json_valid(metadata_json)),\n public_safe INTEGER NOT NULL DEFAULT 1 CHECK (public_safe = 1),\n FOREIGN KEY (job_id) REFERENCES jobs(job_id) ON DELETE SET NULL,\n UNIQUE (operation_id),\n UNIQUE (idempotency_key)\n);\n\nCREATE INDEX IF NOT EXISTS idx_artifacts_job_id ON artifacts(job_id);\nCREATE INDEX IF NOT EXISTS idx_artifacts_relative_path ON artifacts(relative_path);\n\nCREATE TABLE IF NOT EXISTS state_snapshots (\n snapshot_id TEXT PRIMARY KEY,\n job_id TEXT,\n kind TEXT NOT NULL,\n relative_path TEXT,\n sha256 TEXT,\n summary TEXT,\n captured_at TEXT NOT NULL,\n operation_id TEXT,\n idempotency_key TEXT,\n metadata_json TEXT CHECK (metadata_json IS NULL OR json_valid(metadata_json)),\n public_safe INTEGER NOT NULL DEFAULT 1 CHECK (public_safe = 1),\n FOREIGN KEY (job_id) REFERENCES jobs(job_id) ON DELETE SET NULL,\n UNIQUE (operation_id),\n UNIQUE (idempotency_key)\n);\n\nCREATE INDEX IF NOT EXISTS idx_state_snapshots_job_id ON state_snapshots(job_id);\nCREATE INDEX IF NOT EXISTS idx_state_snapshots_captured_at ON state_snapshots(captured_at);\n\nCREATE TABLE IF NOT EXISTS runner_config (\n key TEXT PRIMARY KEY,\n value_json TEXT NOT NULL CHECK (json_valid(value_json)),\n updated_at TEXT NOT NULL,\n operation_id TEXT,\n idempotency_key TEXT,\n public_safe INTEGER NOT NULL DEFAULT 1 CHECK (public_safe = 1),\n UNIQUE (operation_id),\n UNIQUE (idempotency_key)\n);\n\nCREATE TABLE IF NOT EXISTS outbox (\n outbox_id TEXT PRIMARY KEY,\n job_id TEXT,\n operation_id TEXT NOT NULL,\n idempotency_key TEXT,\n type TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'pending' CHECK (status IN ('pending', 'sent', 'acked', 'failed', 'dead_letter')),\n payload_json TEXT NOT NULL CHECK (json_valid(payload_json)),\n retry_count INTEGER NOT NULL DEFAULT 0 CHECK (retry_count >= 0),\n next_attempt_at TEXT,\n last_error_code TEXT,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n public_safe INTEGER NOT NULL DEFAULT 1 CHECK (public_safe = 1),\n FOREIGN KEY (job_id) REFERENCES jobs(job_id) ON DELETE SET NULL,\n UNIQUE (operation_id),\n UNIQUE (idempotency_key)\n);\n\nCREATE INDEX IF NOT EXISTS idx_outbox_status_next_attempt ON outbox(status, next_attempt_at);\nCREATE INDEX IF NOT EXISTS idx_outbox_job_id ON outbox(job_id);\n";
11
+ }>;