@ornexus/neocortex 4.60.72 → 4.60.73

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 (243) hide show
  1. package/dist/release-source.json +1 -1
  2. package/dist/sbom.cdx.json +24 -24
  3. package/install.ps1 +1 -1
  4. package/install.sh +1 -1
  5. package/package.json +2 -2
  6. package/packages/client/dist/adapters/adapter-registry.js +108 -1
  7. package/packages/client/dist/adapters/antigravity-adapter.js +77 -2
  8. package/packages/client/dist/adapters/claude-code-adapter.js +79 -3
  9. package/packages/client/dist/adapters/codex-adapter.js +80 -2
  10. package/packages/client/dist/adapters/cursor-adapter.js +115 -4
  11. package/packages/client/dist/adapters/gemini-adapter.js +71 -2
  12. package/packages/client/dist/adapters/grok-adapter.js +42 -2
  13. package/packages/client/dist/adapters/index.js +22 -1
  14. package/packages/client/dist/adapters/platform-detector.js +212 -1
  15. package/packages/client/dist/adapters/target-adapter.js +12 -0
  16. package/packages/client/dist/adapters/vscode-adapter.js +72 -2
  17. package/packages/client/dist/agent/refresh-stubs.js +417 -2
  18. package/packages/client/dist/agent/update-agent-yaml.js +102 -1
  19. package/packages/client/dist/agent/update-description.js +251 -1
  20. package/packages/client/dist/cache/crypto-utils.js +78 -1
  21. package/packages/client/dist/cache/encrypted-cache.js +108 -1
  22. package/packages/client/dist/cache/in-memory-asset-cache.js +73 -1
  23. package/packages/client/dist/cache/index.js +13 -1
  24. package/packages/client/dist/cache/protected-pi-boundary.js +44 -1
  25. package/packages/client/dist/checkpoint/checkpoint-client-reader.js +127 -2
  26. package/packages/client/dist/checkpoint/index.js +11 -1
  27. package/packages/client/dist/checkpoint/shared-checkpoint-types.js +32 -1
  28. package/packages/client/dist/cli.js +358 -5
  29. package/packages/client/dist/commands/activate.js +394 -8
  30. package/packages/client/dist/commands/architecture-answers.js +274 -7
  31. package/packages/client/dist/commands/architecture-memory-terminal.js +253 -4
  32. package/packages/client/dist/commands/architecture-non-ui-continuation.js +100 -1
  33. package/packages/client/dist/commands/architecture-root-binding.js +51 -1
  34. package/packages/client/dist/commands/cache-status.js +112 -2
  35. package/packages/client/dist/commands/config.js +88 -1
  36. package/packages/client/dist/commands/doctor.js +635 -2
  37. package/packages/client/dist/commands/invoke.js +7200 -143
  38. package/packages/client/dist/commands/legacy-epic-terminal.js +71 -1
  39. package/packages/client/dist/commands/legacy-story-branch.js +96 -1
  40. package/packages/client/dist/commands/legacy-story-pr.js +276 -1
  41. package/packages/client/dist/commands/mutation-qa-checkpoint.js +285 -5
  42. package/packages/client/dist/commands/mutation-qa-gate.js +54 -1
  43. package/packages/client/dist/commands/mutation-qa-git.js +41 -1
  44. package/packages/client/dist/commands/mutation-qa-policy.js +102 -1
  45. package/packages/client/dist/commands/mutation-qa-run.js +219 -3
  46. package/packages/client/dist/commands/mutation-qa-verdict.js +149 -1
  47. package/packages/client/dist/commands/mutation-qa.js +220 -1
  48. package/packages/client/dist/commands/native-agent.js +136 -2
  49. package/packages/client/dist/commands/planning-diagnosis.js +43 -1
  50. package/packages/client/dist/commands/planning-generation.js +53 -1
  51. package/packages/client/dist/commands/planning-memory.js +40 -1
  52. package/packages/client/dist/commands/planning-research.js +42 -1
  53. package/packages/client/dist/commands/private-session.js +75 -1
  54. package/packages/client/dist/commands/property-qa.js +139 -1
  55. package/packages/client/dist/commands/qa-control.js +16 -1
  56. package/packages/client/dist/commands/qa-scan-browser-launch.js +55 -1
  57. package/packages/client/dist/commands/qa-scan-browser-route.js +28 -1
  58. package/packages/client/dist/commands/qa-scan-capture.js +663 -5
  59. package/packages/client/dist/commands/qa-scan-discovery.js +376 -3
  60. package/packages/client/dist/commands/qa-scan-review.js +826 -5
  61. package/packages/client/dist/commands/qa-synthetic-backend-capture.js +266 -1
  62. package/packages/client/dist/commands/qa-synthetic-backend-review.js +297 -1
  63. package/packages/client/dist/commands/qa-synthetic-backend.js +340 -2
  64. package/packages/client/dist/commands/qa-synthetic-broker-port.js +85 -1
  65. package/packages/client/dist/commands/qa-synthetic-browser.js +39 -1
  66. package/packages/client/dist/commands/refactor-characterization.js +671 -21
  67. package/packages/client/dist/commands/refactor-commit.js +399 -13
  68. package/packages/client/dist/commands/refactor-control.js +142 -3
  69. package/packages/client/dist/commands/refactor-cpp-assertions.js +93 -3
  70. package/packages/client/dist/commands/refactor-review.js +283 -5
  71. package/packages/client/dist/commands/refactor-root.js +588 -7
  72. package/packages/client/dist/commands/refresh-memory.js +156 -3
  73. package/packages/client/dist/commands/shared-architecture-non-ui.js +24 -1
  74. package/packages/client/dist/commands/story-checkpoint.js +171 -1
  75. package/packages/client/dist/config/profile-directory.js +13 -1
  76. package/packages/client/dist/config/resolver-selection.js +278 -1
  77. package/packages/client/dist/config/secure-config.js +281 -12
  78. package/packages/client/dist/config.js +223 -2
  79. package/packages/client/dist/constants.js +25 -1
  80. package/packages/client/dist/context/context-collector.js +222 -2
  81. package/packages/client/dist/context/context-sanitizer.js +145 -1
  82. package/packages/client/dist/continuity/autonomous-governance.js +285 -1
  83. package/packages/client/dist/continuity/continuity-client-state-store.js +1587 -1
  84. package/packages/client/dist/continuity/invoke-hooks.js +129 -1
  85. package/packages/client/dist/continuity/migrations/001-initial-schema.js +12 -2
  86. package/packages/client/dist/continuity/migrations/002-processing-output-summary-indexes.js +12 -2
  87. package/packages/client/dist/continuity/migrations/003-headless-execution-attempts.js +12 -2
  88. package/packages/client/dist/continuity/migrations/004-outbox-delivery-state.js +12 -2
  89. package/packages/client/dist/continuity/migrations/005-bounded-headless-queue.js +12 -2
  90. package/packages/client/dist/continuity/migrations/006-native-agent-dispatches.js +10 -2
  91. package/packages/client/dist/continuity/native-agent-store.js +69 -1
  92. package/packages/client/dist/continuity/native-agent-types.js +90 -1
  93. package/packages/client/dist/continuity/outbox.js +117 -1
  94. package/packages/client/dist/continuity/runner-bootstrap-policy.js +172 -1
  95. package/packages/client/dist/continuity/sqlite-store.d.ts +22 -1
  96. package/packages/client/dist/continuity/sqlite-store.js +2612 -81
  97. package/packages/client/dist/effects/invoke-effect-gateways.js +62 -1
  98. package/packages/client/dist/errors/error-messages.js +228 -2
  99. package/packages/client/dist/errors/frontmatter-diagnostics.js +125 -1
  100. package/packages/client/dist/evidence/collector.js +347 -1
  101. package/packages/client/dist/evidence/index.js +1 -1
  102. package/packages/client/dist/evidence/types.js +2 -0
  103. package/packages/client/dist/fs/atomic-state-replace.js +152 -1
  104. package/packages/client/dist/generated/command-registry.generated.js +4076 -1
  105. package/packages/client/dist/generated/public-projections.generated.js +149 -1
  106. package/packages/client/dist/git/direct-yolo-c01-retry.js +138 -4
  107. package/packages/client/dist/git/direct-yolo-checkpoint.js +1234 -4
  108. package/packages/client/dist/git/epic-operational-state.d.ts +198 -0
  109. package/packages/client/dist/git/epic-operational-state.js +672 -0
  110. package/packages/client/dist/git/git-lifecycle-step-ids.js +14 -1
  111. package/packages/client/dist/git/git-lifecycle-store.d.ts +9 -1
  112. package/packages/client/dist/git/git-lifecycle-store.js +1981 -9
  113. package/packages/client/dist/git/legacy-story-branch-checkpoint.js +259 -9
  114. package/packages/client/dist/git/legacy-story-branch-setup.js +348 -4
  115. package/packages/client/dist/git/legacy-story-pr.js +3538 -70
  116. package/packages/client/dist/git/secure-filesystem-boundary.js +182 -5
  117. package/packages/client/dist/graph-retrieval/pre-command-hook.js +284 -1
  118. package/packages/client/dist/graph-retrieval/shared-graph-retrieval-contract.js +237 -1
  119. package/packages/client/dist/i18n/first-run.js +60 -2
  120. package/packages/client/dist/index.js +47 -1
  121. package/packages/client/dist/invocation/invoke-input.js +24 -1
  122. package/packages/client/dist/license/index.js +5 -1
  123. package/packages/client/dist/license/license-client.js +304 -1
  124. package/packages/client/dist/machine/fingerprint.js +163 -2
  125. package/packages/client/dist/machine/index.js +5 -1
  126. package/packages/client/dist/memory/project-memory-path-scope.js +62 -1
  127. package/packages/client/dist/memory/project-memory-writer.js +1007 -40
  128. package/packages/client/dist/memory/shared-project-memory-types.js +253 -2
  129. package/packages/client/dist/migrations/epic-lifecycle-backfill.d.ts +97 -0
  130. package/packages/client/dist/migrations/epic-lifecycle-backfill.js +1060 -0
  131. package/packages/client/dist/migrations/project-identity-capability.js +50 -1
  132. package/packages/client/dist/migrations/project-identity.js +493 -7
  133. package/packages/client/dist/migrations/state-json.d.ts +22 -0
  134. package/packages/client/dist/migrations/state-json.js +393 -4
  135. package/packages/client/dist/policy/architecture-policy.js +184 -2
  136. package/packages/client/dist/policy/index.js +7 -1
  137. package/packages/client/dist/policy/shared-policy-types.js +38 -0
  138. package/packages/client/dist/policy/subagent-approval-policy.js +55 -1
  139. package/packages/client/dist/private-execution/clean-baseline.js +279 -2
  140. package/packages/client/dist/private-execution/codex-executor.js +574 -4
  141. package/packages/client/dist/private-execution/codex-host-runtime.js +137 -1
  142. package/packages/client/dist/private-execution/codex-lifecycle-guard.js +97 -1
  143. package/packages/client/dist/private-execution/codex-scoped-permissions.js +128 -1
  144. package/packages/client/dist/private-execution/delivery.js +410 -13
  145. package/packages/client/dist/private-execution/diagnosis-root-review.js +294 -2
  146. package/packages/client/dist/private-execution/frozen-handoff.js +19 -6
  147. package/packages/client/dist/private-execution/implementation-validation.js +106 -2
  148. package/packages/client/dist/private-execution/isolated-admission.js +1432 -23
  149. package/packages/client/dist/private-execution/isolated-session.js +725 -5
  150. package/packages/client/dist/private-execution/isolated-workspace.js +122 -1
  151. package/packages/client/dist/private-execution/pact-consumer-runtime.js +409 -3
  152. package/packages/client/dist/private-execution/pact-test-source.js +258 -1
  153. package/packages/client/dist/private-execution/pact-toolchain.js +290 -3
  154. package/packages/client/dist/private-execution/pact-write-set.js +172 -1
  155. package/packages/client/dist/private-execution/planning-diagnosis-checkpoint.js +406 -5
  156. package/packages/client/dist/private-execution/planning-generation-checkpoint.js +462 -5
  157. package/packages/client/dist/private-execution/planning-memory-checkpoint.js +139 -3
  158. package/packages/client/dist/private-execution/planning-research-checkpoint.js +325 -4
  159. package/packages/client/dist/private-execution/private-report-store.js +42 -1
  160. package/packages/client/dist/private-execution/property-test-candidate.js +103 -1
  161. package/packages/client/dist/private-execution/property-test-choices.js +147 -3
  162. package/packages/client/dist/private-execution/property-test-plan.js +271 -7
  163. package/packages/client/dist/private-execution/property-test-review.js +258 -4
  164. package/packages/client/dist/private-execution/property-test-runtime.js +372 -9
  165. package/packages/client/dist/private-execution/property-test-source.js +139 -1
  166. package/packages/client/dist/private-execution/root-checkpoint.js +80 -1
  167. package/packages/client/dist/private-execution/root-memory-git-evidence.js +135 -3
  168. package/packages/client/dist/private-execution/root-memory-recovery.js +93 -1
  169. package/packages/client/dist/private-execution/root-memory-request.js +29 -1
  170. package/packages/client/dist/private-execution/root-memory-scope.js +178 -1
  171. package/packages/client/dist/private-execution/root-memory-writer.js +102 -1
  172. package/packages/client/dist/private-execution/session-lease.js +63 -1
  173. package/packages/client/dist/private-execution/shared-private-admission-types.js +50 -1
  174. package/packages/client/dist/private-execution/shared-project-validation.js +66 -1
  175. package/packages/client/dist/private-execution/shared-root-memory-types.js +61 -1
  176. package/packages/client/dist/private-execution/ux-source-validation.js +372 -1
  177. package/packages/client/dist/private-execution/ux-write-set.js +191 -2
  178. package/packages/client/dist/registry/registry-reconciliation.js +234 -1
  179. package/packages/client/dist/resilience/circuit-breaker.js +170 -1
  180. package/packages/client/dist/resilience/degradation-manager.js +164 -1
  181. package/packages/client/dist/resilience/freshness-indicator.js +100 -1
  182. package/packages/client/dist/resilience/index.js +8 -1
  183. package/packages/client/dist/resilience/recovery-detector.js +74 -1
  184. package/packages/client/dist/resolvers/asset-resolver.js +13 -0
  185. package/packages/client/dist/resolvers/local-resolver.js +255 -8
  186. package/packages/client/dist/resolvers/remote-resolver.js +233 -1
  187. package/packages/client/dist/runner/binary.js +404 -1
  188. package/packages/client/dist/runner/cli.js +1571 -17
  189. package/packages/client/dist/runner/headless/adapters.js +49 -1
  190. package/packages/client/dist/runner/headless/claude-code-adapter.js +79 -1
  191. package/packages/client/dist/runner/headless/continuous-story-workspace.js +1628 -11
  192. package/packages/client/dist/runner/headless/epic-git-reconciliation-inventory.js +69 -1
  193. package/packages/client/dist/runner/headless/epic-merge-candidate-qa.js +110 -2
  194. package/packages/client/dist/runner/headless/epic-terminal-git-cli-adapter.js +1236 -8
  195. package/packages/client/dist/runner/headless/epic-terminal-git-runner.js +318 -2
  196. package/packages/client/dist/runner/headless/fake-adapter.js +62 -1
  197. package/packages/client/dist/runner/headless/managed-profile.js +132 -1
  198. package/packages/client/dist/runner/headless/opencode-adapter.js +145 -2
  199. package/packages/client/dist/runner/headless/prepared-story-bundle.js +43 -1
  200. package/packages/client/dist/runner/headless/resolver.js +231 -1
  201. package/packages/client/dist/runner/headless/run-yolo.js +885 -1
  202. package/packages/client/dist/runner/headless/run-yoloop.js +2574 -2
  203. package/packages/client/dist/runner/headless/types.js +574 -2
  204. package/packages/client/dist/runner/local-console.js +396 -13
  205. package/packages/client/dist/runner/portal-sync-worker.js +1487 -1
  206. package/packages/client/dist/runner/project-identity.js +106 -1
  207. package/packages/client/dist/runner/scheduler.js +995 -7
  208. package/packages/client/dist/runner-cli.js +18 -2
  209. package/packages/client/dist/state/invocation-shape.js +13 -1
  210. package/packages/client/dist/state/project-state-snapshot.d.ts +8 -0
  211. package/packages/client/dist/state/project-state-snapshot.js +1731 -1
  212. package/packages/client/dist/state/state-json-repair.js +785 -3
  213. package/packages/client/dist/state/structural-dag-projection.js +118 -1
  214. package/packages/client/dist/telemetry/index.js +5 -1
  215. package/packages/client/dist/telemetry/offline-queue.js +131 -1
  216. package/packages/client/dist/tier/index.js +5 -1
  217. package/packages/client/dist/tier/tier-aware-client.js +405 -1
  218. package/packages/client/dist/types/index.js +38 -1
  219. package/packages/client/dist/version.js +27 -1
  220. package/packages/client/dist/yolo/change-evidence-collector.js +126 -1
  221. package/packages/client/dist/yolo/invoke-envelope-capability.js +62 -1
  222. package/packages/client/dist/yolo/spec-envelope-collector.js +184 -5
  223. package/packages/client/dist/yoloop/discovery-hook.js +300 -2
  224. package/packages/client/dist/yoloop/index.js +8 -1
  225. package/packages/client/dist/yoloop/invoke-hooks.js +669 -12
  226. package/packages/client/dist/yoloop/shared-discover-epics.js +1007 -1
  227. package/packages/client/dist/yoloop/shared-yoloop-types.d.ts +65 -1
  228. package/packages/client/dist/yoloop/shared-yoloop-types.js +33 -1
  229. package/packages/client/dist/yoloop/target-normalization.js +180 -1
  230. package/packages/client/dist/yoloop/yoloop-client-state-store.d.ts +8 -0
  231. package/packages/client/dist/yoloop/yoloop-client-state-store.js +1920 -1
  232. package/packages/shared/dist/yolo/spec-envelope.js +3 -6
  233. package/targets-stubs/antigravity/gemini.md +1 -1
  234. package/targets-stubs/antigravity/skill/SKILL.md +1 -1
  235. package/targets-stubs/claude-code/neocortex-root.agent.yaml +1 -1
  236. package/targets-stubs/claude-code/neocortex-root.md +2 -2
  237. package/targets-stubs/claude-code/neocortex.agent.yaml +1 -1
  238. package/targets-stubs/claude-code/neocortex.md +2 -2
  239. package/targets-stubs/codex/AGENTS.md +1 -1
  240. package/targets-stubs/cursor/agent.md +2 -2
  241. package/targets-stubs/gemini-cli/agent.md +2 -2
  242. package/targets-stubs/opencode/neocortex-root.md +1 -1
  243. package/targets-stubs/vscode/neocortex.agent.md +2 -2
@@ -1 +1,172 @@
1
- const e={REQUIRED_DURABLE_COMMAND:"runner-bootstrap-required-durable-command",REQUIRED_UNKNOWN_GOAL_LOOP_OPERATION:"runner-bootstrap-required-unknown-goal-loop-operation",OPTIONAL_OPERATOR_COMMAND:"runner-bootstrap-optional-operator-command",SKIPPED_BOOTSTRAP_IN_PROGRESS:"runner-bootstrap-skipped-bootstrap-in-progress",SKIPPED_RUNNER_PLATFORM:"runner-bootstrap-skipped-runner-platform",SKIPPED_GOAL_LOOP_TICK:"runner-bootstrap-skipped-goal-loop-tick",SKIPPED_JOBS_COMMAND:"runner-bootstrap-skipped-jobs-command",SKIPPED_RUNNER_COMMAND:"runner-bootstrap-skipped-runner-command",SKIPPED_NON_CONTINUITY_COMMAND:"runner-bootstrap-skipped-non-continuity-command"},P=new Set(["goal","goals","durable-goal","continuity-goal","59"]),N=new Set(["loop","loops","durable-loop","continuity-loop","60"]),f=new Set(["jobs","job","continuity-jobs","61"]),R=new Set(["runner","neocortex-runner","continuity-runner","62"]),E=new Map([["goal-tick","goal"],["loop-tick","loop"]]),s=new Set(["create","start","resume","activate","run","run-once","restart","continue","unpause"]),p=new Set(["status","doctor","cancel","pause","report","reports","log","logs"]),S=new Set([...s,...p,"tick"]),A=/^@?(?:goal|loop|job)-[a-z0-9][a-z0-9._-]*$/i;function b(r){const o=T(r),n=l(o[0]);if(!n)return u("unknown","none",!1);const a=E.get(n);if(a)return u(a,"tick",!0);const i=d(n);return i==="unknown"?u("unknown","none",!1):u(i,O(_(o)),!0)}function k(r,o={}){if(C(o))return t(r,e.SKIPPED_BOOTSTRAP_IN_PROGRESS,"runner bootstrap skipped because a bootstrap guard is active.");if(D(o.platformTarget)==="runner")return t(r,e.SKIPPED_RUNNER_PLATFORM,"runner bootstrap skipped for runner platform invocation.");if((r.kind==="goal"||r.kind==="loop")&&r.operation==="tick")return t(r,e.SKIPPED_GOAL_LOOP_TICK,`runner bootstrap skipped for ${r.kind} tick operation.`);if(r.kind==="jobs")return t(r,e.SKIPPED_JOBS_COMMAND,"runner bootstrap skipped for jobs command.");if(r.kind==="runner")return t(r,e.SKIPPED_RUNNER_COMMAND,"runner bootstrap skipped for runner command.");if(r.kind!=="goal"&&r.kind!=="loop")return t(r,e.SKIPPED_NON_CONTINUITY_COMMAND,"runner bootstrap skipped for non-continuity command.");if(p.has(r.operation))return{action:"optional",failurePolicy:"fail-open",command:r.kind,operation:r.operation,reasonCodes:[e.OPTIONAL_OPERATOR_COMMAND],publicSummary:`runner bootstrap optional for ${r.kind} operator command.`,publicSafe:!0};const n=s.has(r.operation)||r.operation==="none"?e.REQUIRED_DURABLE_COMMAND:e.REQUIRED_UNKNOWN_GOAL_LOOP_OPERATION;return{action:"required",failurePolicy:"fail-closed",command:r.kind,operation:r.operation==="none"?"create":r.operation,reasonCodes:[n],publicSummary:`runner bootstrap required for durable ${r.kind} command.`,publicSafe:!0}}function M(r,o={}){return k(b(r),o)}function t(r,o,n){return{action:"skipped",failurePolicy:"not-applicable",command:r.kind,operation:r.operation,reasonCodes:[o],publicSummary:n,publicSafe:!0}}function u(r,o,n){return{kind:r,operation:o,recognizedAlias:n,publicSafe:!0}}function d(r){return P.has(r)?"goal":N.has(r)?"loop":f.has(r)?"jobs":R.has(r)?"runner":"unknown"}function O(r){const o=l(r);return o?S.has(o)?o:"unknown":"none"}function _(r){const o=r[1];if(o)return A.test(o)?r[2]:o}function T(r){return r.trim().split(/\s+/).filter(Boolean).slice(0,3)}function l(r){return(r??"").trim().toLowerCase().replace(/^\*/,"")}function D(r){return(r??"").trim().toLowerCase()}function C(r){return r.bootstrapInProgress?!0:c(r.environment?.NEOCORTEX_RUNNER_BOOTSTRAP_IN_PROGRESS)||c(r.environment?.NEOCORTEX_BOOTSTRAP_IN_PROGRESS)}function c(r){return/^(1|true|yes|on)$/i.test(r??"")}export{e as RUNNER_BOOTSTRAP_POLICY_REASON_CODES,k as classifyRunnerBootstrapPolicy,M as classifyRunnerBootstrapPolicyFromArgs,b as parseRunnerBootstrapCommandIntent};
1
+ /**
2
+ * @license FSL-1.1
3
+ * Copyright (c) 2026 OrNexus AI
4
+ *
5
+ * P181.03 -- public-safe runner bootstrap classifier for durable goal/loop
6
+ * operations.
7
+ */
8
+ export const RUNNER_BOOTSTRAP_POLICY_REASON_CODES = {
9
+ REQUIRED_DURABLE_COMMAND: 'runner-bootstrap-required-durable-command',
10
+ REQUIRED_UNKNOWN_GOAL_LOOP_OPERATION: 'runner-bootstrap-required-unknown-goal-loop-operation',
11
+ OPTIONAL_OPERATOR_COMMAND: 'runner-bootstrap-optional-operator-command',
12
+ SKIPPED_BOOTSTRAP_IN_PROGRESS: 'runner-bootstrap-skipped-bootstrap-in-progress',
13
+ SKIPPED_RUNNER_PLATFORM: 'runner-bootstrap-skipped-runner-platform',
14
+ SKIPPED_GOAL_LOOP_TICK: 'runner-bootstrap-skipped-goal-loop-tick',
15
+ SKIPPED_JOBS_COMMAND: 'runner-bootstrap-skipped-jobs-command',
16
+ SKIPPED_RUNNER_COMMAND: 'runner-bootstrap-skipped-runner-command',
17
+ SKIPPED_NON_CONTINUITY_COMMAND: 'runner-bootstrap-skipped-non-continuity-command',
18
+ };
19
+ const GOAL_COMMAND_ALIASES = new Set(['goal', 'goals', 'durable-goal', 'continuity-goal', '59']);
20
+ const LOOP_COMMAND_ALIASES = new Set(['loop', 'loops', 'durable-loop', 'continuity-loop', '60']);
21
+ const JOBS_COMMAND_ALIASES = new Set(['jobs', 'job', 'continuity-jobs', '61']);
22
+ const RUNNER_COMMAND_ALIASES = new Set(['runner', 'neocortex-runner', 'continuity-runner', '62']);
23
+ const GOAL_LOOP_TICK_ALIASES = new Map([
24
+ ['goal-tick', 'goal'],
25
+ ['loop-tick', 'loop'],
26
+ ]);
27
+ const REQUIRED_OPERATIONS = new Set([
28
+ 'create',
29
+ 'start',
30
+ 'resume',
31
+ 'activate',
32
+ 'run',
33
+ 'run-once',
34
+ 'restart',
35
+ 'continue',
36
+ 'unpause',
37
+ ]);
38
+ const OPTIONAL_OPERATIONS = new Set([
39
+ 'status',
40
+ 'doctor',
41
+ 'cancel',
42
+ 'pause',
43
+ 'report',
44
+ 'reports',
45
+ 'log',
46
+ 'logs',
47
+ ]);
48
+ const KNOWN_OPERATIONS = new Set([
49
+ ...REQUIRED_OPERATIONS,
50
+ ...OPTIONAL_OPERATIONS,
51
+ 'tick',
52
+ ]);
53
+ const PUBLIC_TARGET_TOKEN_RE = /^@?(?:goal|loop|job)-[a-z0-9][a-z0-9._-]*$/i;
54
+ export function parseRunnerBootstrapCommandIntent(args) {
55
+ const tokens = publicCommandTokens(args);
56
+ const first = normalizeToken(tokens[0]);
57
+ if (!first)
58
+ return intent('unknown', 'none', false);
59
+ const tickAliasKind = GOAL_LOOP_TICK_ALIASES.get(first);
60
+ if (tickAliasKind)
61
+ return intent(tickAliasKind, 'tick', true);
62
+ const kind = commandKindForToken(first);
63
+ if (kind === 'unknown')
64
+ return intent('unknown', 'none', false);
65
+ if (kind === 'jobs' || kind === 'runner') {
66
+ return intent(kind, operationForToken(publicOperationToken(tokens)), true);
67
+ }
68
+ return intent(kind, operationForToken(publicOperationToken(tokens)), true);
69
+ }
70
+ export function classifyRunnerBootstrapPolicy(commandIntent, context = {}) {
71
+ if (isBootstrapInProgress(context)) {
72
+ return skipped(commandIntent, RUNNER_BOOTSTRAP_POLICY_REASON_CODES.SKIPPED_BOOTSTRAP_IN_PROGRESS, 'runner bootstrap skipped because a bootstrap guard is active.');
73
+ }
74
+ if (normalizePlatformTarget(context.platformTarget) === 'runner') {
75
+ return skipped(commandIntent, RUNNER_BOOTSTRAP_POLICY_REASON_CODES.SKIPPED_RUNNER_PLATFORM, 'runner bootstrap skipped for runner platform invocation.');
76
+ }
77
+ if ((commandIntent.kind === 'goal' || commandIntent.kind === 'loop') && commandIntent.operation === 'tick') {
78
+ return skipped(commandIntent, RUNNER_BOOTSTRAP_POLICY_REASON_CODES.SKIPPED_GOAL_LOOP_TICK, `runner bootstrap skipped for ${commandIntent.kind} tick operation.`);
79
+ }
80
+ if (commandIntent.kind === 'jobs') {
81
+ return skipped(commandIntent, RUNNER_BOOTSTRAP_POLICY_REASON_CODES.SKIPPED_JOBS_COMMAND, 'runner bootstrap skipped for jobs command.');
82
+ }
83
+ if (commandIntent.kind === 'runner') {
84
+ return skipped(commandIntent, RUNNER_BOOTSTRAP_POLICY_REASON_CODES.SKIPPED_RUNNER_COMMAND, 'runner bootstrap skipped for runner command.');
85
+ }
86
+ if (commandIntent.kind !== 'goal' && commandIntent.kind !== 'loop') {
87
+ return skipped(commandIntent, RUNNER_BOOTSTRAP_POLICY_REASON_CODES.SKIPPED_NON_CONTINUITY_COMMAND, 'runner bootstrap skipped for non-continuity command.');
88
+ }
89
+ if (OPTIONAL_OPERATIONS.has(commandIntent.operation)) {
90
+ return {
91
+ action: 'optional',
92
+ failurePolicy: 'fail-open',
93
+ command: commandIntent.kind,
94
+ operation: commandIntent.operation,
95
+ reasonCodes: [RUNNER_BOOTSTRAP_POLICY_REASON_CODES.OPTIONAL_OPERATOR_COMMAND],
96
+ publicSummary: `runner bootstrap optional for ${commandIntent.kind} operator command.`,
97
+ publicSafe: true,
98
+ };
99
+ }
100
+ const reasonCode = REQUIRED_OPERATIONS.has(commandIntent.operation) || commandIntent.operation === 'none'
101
+ ? RUNNER_BOOTSTRAP_POLICY_REASON_CODES.REQUIRED_DURABLE_COMMAND
102
+ : RUNNER_BOOTSTRAP_POLICY_REASON_CODES.REQUIRED_UNKNOWN_GOAL_LOOP_OPERATION;
103
+ return {
104
+ action: 'required',
105
+ failurePolicy: 'fail-closed',
106
+ command: commandIntent.kind,
107
+ operation: commandIntent.operation === 'none' ? 'create' : commandIntent.operation,
108
+ reasonCodes: [reasonCode],
109
+ publicSummary: `runner bootstrap required for durable ${commandIntent.kind} command.`,
110
+ publicSafe: true,
111
+ };
112
+ }
113
+ export function classifyRunnerBootstrapPolicyFromArgs(args, context = {}) {
114
+ return classifyRunnerBootstrapPolicy(parseRunnerBootstrapCommandIntent(args), context);
115
+ }
116
+ function skipped(commandIntent, reasonCode, publicSummary) {
117
+ return {
118
+ action: 'skipped',
119
+ failurePolicy: 'not-applicable',
120
+ command: commandIntent.kind,
121
+ operation: commandIntent.operation,
122
+ reasonCodes: [reasonCode],
123
+ publicSummary,
124
+ publicSafe: true,
125
+ };
126
+ }
127
+ function intent(kind, operation, recognizedAlias) {
128
+ return { kind, operation, recognizedAlias, publicSafe: true };
129
+ }
130
+ function commandKindForToken(token) {
131
+ if (GOAL_COMMAND_ALIASES.has(token))
132
+ return 'goal';
133
+ if (LOOP_COMMAND_ALIASES.has(token))
134
+ return 'loop';
135
+ if (JOBS_COMMAND_ALIASES.has(token))
136
+ return 'jobs';
137
+ if (RUNNER_COMMAND_ALIASES.has(token))
138
+ return 'runner';
139
+ return 'unknown';
140
+ }
141
+ function operationForToken(token) {
142
+ const normalized = normalizeToken(token);
143
+ if (!normalized)
144
+ return 'none';
145
+ return KNOWN_OPERATIONS.has(normalized) ? normalized : 'unknown';
146
+ }
147
+ function publicOperationToken(tokens) {
148
+ const second = tokens[1];
149
+ if (!second)
150
+ return undefined;
151
+ if (PUBLIC_TARGET_TOKEN_RE.test(second))
152
+ return tokens[2];
153
+ return second;
154
+ }
155
+ function publicCommandTokens(args) {
156
+ return args.trim().split(/\s+/).filter(Boolean).slice(0, 3);
157
+ }
158
+ function normalizeToken(token) {
159
+ return (token ?? '').trim().toLowerCase().replace(/^\*/, '');
160
+ }
161
+ function normalizePlatformTarget(platformTarget) {
162
+ return (platformTarget ?? '').trim().toLowerCase();
163
+ }
164
+ function isBootstrapInProgress(context) {
165
+ if (context.bootstrapInProgress)
166
+ return true;
167
+ return truthyGuard(context.environment?.NEOCORTEX_RUNNER_BOOTSTRAP_IN_PROGRESS)
168
+ || truthyGuard(context.environment?.NEOCORTEX_BOOTSTRAP_IN_PROGRESS);
169
+ }
170
+ function truthyGuard(value) {
171
+ return /^(1|true|yes|on)$/i.test(value ?? '');
172
+ }
@@ -46,7 +46,7 @@ export declare function sanitizeContinuityStageTimestamp(value: unknown): string
46
46
  */
47
47
  export declare function sanitizeContinuityStageHistory(value: unknown): ContinuityStageHistoryEntry[];
48
48
  export declare function normalizeContinuityStageIteration(value: unknown): number | undefined;
49
- export type ContinuitySqliteStoreErrorCode = 'sqlite-adapter-unavailable' | 'sqlite-integrity-failed' | 'sqlite-migration-failed' | 'sqlite-migration-conflict' | 'sqlite-mutation-failed' | 'sqlite-foreign-key-failed' | 'sqlite-public-safety-rejected' | 'sqlite-mutation-blocked';
49
+ export type ContinuitySqliteStoreErrorCode = 'sqlite-adapter-unavailable' | 'sqlite-projection-missing' | 'sqlite-projection-wal-unsafe' | 'sqlite-projection-adapter-incompatible' | 'sqlite-projection-schema-unsupported' | 'sqlite-integrity-failed' | 'sqlite-migration-failed' | 'sqlite-migration-conflict' | 'sqlite-mutation-failed' | 'sqlite-foreign-key-failed' | 'sqlite-public-safety-rejected' | 'sqlite-mutation-blocked';
50
50
  export declare class ContinuitySqliteStoreError extends Error {
51
51
  readonly code: ContinuitySqliteStoreErrorCode;
52
52
  readonly reasonCode: ContinuitySqliteStoreErrorCode;
@@ -119,6 +119,15 @@ export interface ContinuitySqliteReadOnlyInspector {
119
119
  get(source: string, ...params: readonly unknown[]): unknown;
120
120
  close(): void;
121
121
  }
122
+ export interface EpicOperationalSqliteBindingInspectionV1 {
123
+ readonly schemaVersion: 'EpicOperationalSqliteBindingInspection/1.0';
124
+ readonly status: 'bound' | 'unbound' | 'unavailable';
125
+ readonly authorityRevision: number;
126
+ readonly sourceDigest: string | null;
127
+ readonly adapterName: string | null;
128
+ readonly reasonCodes: readonly string[];
129
+ readonly publicSafe: true;
130
+ }
122
131
  export interface ContinuityJobWriteInput {
123
132
  readonly jobId: string;
124
133
  readonly kind: 'goal' | 'loop' | 'runner' | 'jobs';
@@ -883,6 +892,18 @@ export declare function openContinuitySqliteStore(options: OpenContinuitySqliteS
883
892
  * chmod, initialization, migrations or mutative pragma is attempted.
884
893
  */
885
894
  export declare function openContinuitySqliteReadOnly(options: OpenContinuitySqliteReadOnlyOptions): Promise<ContinuitySqliteReadOnlyInspector>;
895
+ /**
896
+ * P224.01 strict projection binding. The existing state_snapshots table is
897
+ * inspected without schema initialization, WAL, chmod, mkdir or repair. A
898
+ * missing/optional adapter is explicit and never promoted to equality.
899
+ */
900
+ export declare function inspectEpicOperationalSqliteBinding(options: {
901
+ readonly projectRoot: string;
902
+ readonly authorityRevision: number;
903
+ readonly sourceDigest: string;
904
+ readonly adapter?: ContinuitySqliteAdapter;
905
+ readonly adapterLoader?: () => Promise<ContinuitySqliteAdapterLoadResult>;
906
+ }): Promise<EpicOperationalSqliteBindingInspectionV1>;
886
907
  export declare class ContinuitySqliteStore {
887
908
  readonly filePath: string;
888
909
  readonly adapterName: string;