@aria_asi/cli 0.2.39 → 0.2.41

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 (802) hide show
  1. package/bin/aria.js +236 -34
  2. package/dist/aria-connector/src/action-ledger-core.d.ts +387 -0
  3. package/dist/aria-connector/src/action-ledger-core.d.ts.map +1 -0
  4. package/dist/aria-connector/src/action-ledger-core.js +638 -0
  5. package/dist/aria-connector/src/action-ledger-core.js.map +1 -0
  6. package/dist/aria-connector/src/chat.d.ts.map +1 -1
  7. package/dist/aria-connector/src/chat.js +5 -6
  8. package/dist/aria-connector/src/chat.js.map +1 -1
  9. package/dist/aria-connector/src/codebase-scanner.d.ts +1 -1
  10. package/dist/aria-connector/src/codebase-scanner.d.ts.map +1 -1
  11. package/dist/aria-connector/src/connectors/claude-code.d.ts +1 -0
  12. package/dist/aria-connector/src/connectors/claude-code.d.ts.map +1 -1
  13. package/dist/aria-connector/src/connectors/claude-code.js +152 -14
  14. package/dist/aria-connector/src/connectors/claude-code.js.map +1 -1
  15. package/dist/aria-connector/src/connectors/codebase-awareness.d.ts +10 -0
  16. package/dist/aria-connector/src/connectors/codebase-awareness.d.ts.map +1 -1
  17. package/dist/aria-connector/src/connectors/codebase-awareness.js +276 -27
  18. package/dist/aria-connector/src/connectors/codebase-awareness.js.map +1 -1
  19. package/dist/aria-connector/src/connectors/codex.d.ts +3 -1
  20. package/dist/aria-connector/src/connectors/codex.d.ts.map +1 -1
  21. package/dist/aria-connector/src/connectors/codex.js +1271 -40
  22. package/dist/aria-connector/src/connectors/codex.js.map +1 -1
  23. package/dist/aria-connector/src/connectors/cursor.d.ts.map +1 -1
  24. package/dist/aria-connector/src/connectors/cursor.js +7 -0
  25. package/dist/aria-connector/src/connectors/cursor.js.map +1 -1
  26. package/dist/aria-connector/src/connectors/governed-adapter.d.ts +30 -0
  27. package/dist/aria-connector/src/connectors/governed-adapter.d.ts.map +1 -0
  28. package/dist/aria-connector/src/connectors/governed-adapter.js +132 -0
  29. package/dist/aria-connector/src/connectors/governed-adapter.js.map +1 -0
  30. package/dist/aria-connector/src/connectors/opencode.d.ts +3 -1
  31. package/dist/aria-connector/src/connectors/opencode.d.ts.map +1 -1
  32. package/dist/aria-connector/src/connectors/opencode.js +18 -2
  33. package/dist/aria-connector/src/connectors/opencode.js.map +1 -1
  34. package/dist/aria-connector/src/connectors/repo-guard.d.ts.map +1 -1
  35. package/dist/aria-connector/src/connectors/repo-guard.js +25 -14
  36. package/dist/aria-connector/src/connectors/repo-guard.js.map +1 -1
  37. package/dist/aria-connector/src/connectors/runtime.d.ts.map +1 -1
  38. package/dist/aria-connector/src/connectors/runtime.js +92 -2
  39. package/dist/aria-connector/src/connectors/runtime.js.map +1 -1
  40. package/dist/aria-connector/src/connectors/shell.d.ts.map +1 -1
  41. package/dist/aria-connector/src/connectors/shell.js +123 -7
  42. package/dist/aria-connector/src/connectors/shell.js.map +1 -1
  43. package/dist/aria-connector/src/cross-cli-hive-binding.d.ts +63 -0
  44. package/dist/aria-connector/src/cross-cli-hive-binding.d.ts.map +1 -0
  45. package/dist/aria-connector/src/cross-cli-hive-binding.js +205 -0
  46. package/dist/aria-connector/src/cross-cli-hive-binding.js.map +1 -0
  47. package/dist/aria-connector/src/garden-control-plane.d.ts +6 -1
  48. package/dist/aria-connector/src/garden-control-plane.d.ts.map +1 -1
  49. package/dist/aria-connector/src/garden-control-plane.js +8 -2
  50. package/dist/aria-connector/src/garden-control-plane.js.map +1 -1
  51. package/dist/aria-connector/src/governed-surface-runner.d.ts +189 -0
  52. package/dist/aria-connector/src/governed-surface-runner.d.ts.map +1 -0
  53. package/dist/aria-connector/src/governed-surface-runner.js +1022 -0
  54. package/dist/aria-connector/src/governed-surface-runner.js.map +1 -0
  55. package/dist/aria-connector/src/index.d.ts +10 -1
  56. package/dist/aria-connector/src/index.d.ts.map +1 -1
  57. package/dist/aria-connector/src/index.js +5 -0
  58. package/dist/aria-connector/src/index.js.map +1 -1
  59. package/dist/aria-connector/src/task-runner.d.ts +3 -0
  60. package/dist/aria-connector/src/task-runner.d.ts.map +1 -0
  61. package/dist/aria-connector/src/task-runner.js +3526 -0
  62. package/dist/aria-connector/src/task-runner.js.map +1 -0
  63. package/dist/aria-web/src/lib/codebase-scanner.d.ts +21 -2
  64. package/dist/aria-web/src/lib/codebase-scanner.d.ts.map +1 -1
  65. package/dist/aria-web/src/lib/codebase-scanner.js +59 -14
  66. package/dist/aria-web/src/lib/codebase-scanner.js.map +1 -1
  67. package/dist/assets/hooks/README.md +58 -0
  68. package/dist/assets/hooks/aria-agent-handoff.mjs +147 -2
  69. package/dist/assets/hooks/aria-agent-ledger-merge.mjs +31 -7
  70. package/dist/assets/hooks/aria-architect-fallback.mjs +10 -2
  71. package/dist/assets/hooks/aria-claim-evidence-stop-gate.mjs +240 -0
  72. package/dist/assets/hooks/aria-cognition-substrate-binding.mjs +84 -10
  73. package/dist/assets/hooks/aria-first-class-coach.mjs +305 -10
  74. package/dist/assets/hooks/aria-harness-via-sdk.mjs +93 -16
  75. package/dist/assets/hooks/aria-import-resolution-gate.mjs +106 -20
  76. package/dist/assets/hooks/aria-outcome-record.mjs +56 -20
  77. package/dist/assets/hooks/aria-pre-emit-autoload.mjs +1809 -0
  78. package/dist/assets/hooks/aria-pre-emit-autoload.mjs.before-orchestration-redesign +1400 -0
  79. package/dist/assets/hooks/aria-pre-emit-dryrun.mjs +22 -3
  80. package/dist/assets/hooks/aria-pre-text-gate.mjs +11 -2
  81. package/dist/assets/hooks/aria-pre-tool-gate.mjs +516 -92
  82. package/dist/assets/hooks/aria-pre-tool-use.mjs +70 -6
  83. package/dist/assets/hooks/aria-preprompt-consult.mjs +23 -4
  84. package/dist/assets/hooks/aria-repo-doctrine-gate.mjs +29 -3
  85. package/dist/assets/hooks/aria-stop-gate.mjs +585 -76
  86. package/dist/assets/hooks/aria-trigger-autolearn.mjs +17 -3
  87. package/dist/assets/hooks/aria-universal-turn-packet.mjs +1165 -0
  88. package/dist/assets/hooks/aria-userprompt-abandon-detect.mjs +9 -1
  89. package/dist/assets/hooks/canonical-settings-block.json +172 -0
  90. package/dist/assets/hooks/codex-native/aria-harness-ticker-sidecar.mjs +92 -0
  91. package/dist/assets/hooks/codex-native/aria-hive-wal-consumer.mjs +86 -0
  92. package/dist/assets/hooks/codex-native/aria-live-ticker.mjs +38 -0
  93. package/dist/assets/hooks/codex-native/aria-post-tool-use.mjs +236 -0
  94. package/dist/assets/hooks/codex-native/aria-pre-tool-use.mjs +362 -0
  95. package/dist/assets/hooks/codex-native/aria-stop.mjs +691 -0
  96. package/dist/assets/hooks/codex-native/aria-userprompt-submit.mjs +623 -0
  97. package/dist/assets/hooks/codex-native/atlas-session-context.mjs +121 -0
  98. package/dist/assets/hooks/codex-native/lib/evaluate-with-kernel.mjs +257 -0
  99. package/dist/assets/hooks/codex-native/lib/hive-wal-consumer.mjs +452 -0
  100. package/dist/assets/hooks/codex-native/lib/kernel/deterministic-cognitive-kernel.mjs +914 -0
  101. package/dist/assets/hooks/codex-native/lib/project-boundary-cognition.mjs +143 -0
  102. package/dist/assets/hooks/codex-native/lib/runtime-client.mjs +3567 -0
  103. package/dist/assets/hooks/codex-native/lib/task-project-ledger.mjs +294 -0
  104. package/dist/assets/hooks/doctrine_trigger_map.json +236 -25
  105. package/dist/assets/hooks/doctrine_trigger_map.schema.json +46 -0
  106. package/dist/assets/hooks/install.sh +84 -0
  107. package/dist/assets/hooks/lib/action-ledger-core.mjs +269 -0
  108. package/dist/assets/hooks/lib/aria-gate-ledger.mjs +143 -0
  109. package/dist/assets/hooks/lib/ast-stub-shape-detector.mjs +107 -0
  110. package/dist/assets/hooks/lib/atlas-dossier-client.mjs +151 -0
  111. package/dist/assets/hooks/lib/atlas-orchestrator-postwire.mjs +221 -0
  112. package/dist/assets/hooks/lib/canonical-lenses.mjs +83 -6
  113. package/dist/assets/hooks/lib/coach-intent-classifier.mjs +248 -0
  114. package/dist/assets/hooks/lib/cognitive-block-parser.mjs +111 -0
  115. package/dist/assets/hooks/lib/doctrine-trigger-map-loader.mjs +137 -0
  116. package/dist/assets/hooks/lib/domain-output-quality.mjs +132 -3
  117. package/dist/assets/hooks/lib/empty-catch-scanner.mjs +91 -0
  118. package/dist/assets/hooks/lib/end-phase-qa-autofire.mjs +426 -0
  119. package/dist/assets/hooks/lib/evaluate-with-kernel.mjs +133 -0
  120. package/dist/assets/hooks/lib/first-class-coach.mjs +454 -19
  121. package/dist/assets/hooks/lib/gate-audit.mjs +12 -2
  122. package/dist/assets/hooks/lib/gate-loop-state.mjs +11 -2
  123. package/dist/assets/hooks/lib/goal-contract-quality.mjs +302 -0
  124. package/dist/assets/hooks/lib/hook-message-window.mjs +101 -9
  125. package/dist/assets/hooks/lib/invocation-required-verifier.mjs +184 -0
  126. package/dist/assets/hooks/lib/kernel/deterministic-cognitive-kernel.mjs +906 -0
  127. package/dist/assets/hooks/lib/obligation-ledger.mjs +147 -0
  128. package/dist/assets/hooks/lib/orchestration-manifest-extract.mjs +217 -0
  129. package/dist/assets/hooks/lib/owner-authorizations.mjs +269 -0
  130. package/dist/assets/hooks/lib/probe-discipline-scanner.mjs +142 -0
  131. package/dist/assets/hooks/lib/project-boundary-cognition.mjs +143 -0
  132. package/dist/assets/hooks/lib/recovery-context.mjs +151 -0
  133. package/dist/assets/hooks/lib/recovery-template-loader.mjs +154 -0
  134. package/dist/assets/hooks/lib/self-doctrine-check.mjs +321 -0
  135. package/dist/assets/hooks/lib/sensitive-shape-detector.mjs +64 -0
  136. package/dist/assets/hooks/lib/skill-autoload-gate-impl.mjs +226 -1
  137. package/dist/assets/hooks/lib/stop-hook-protocol.mjs +166 -0
  138. package/dist/assets/hooks/lib/surface-caught.mjs +94 -0
  139. package/dist/assets/hooks/recovery-templates/force-reauthor.md +67 -0
  140. package/dist/assets/hooks/recovery-templates/handoff-recovery.md +25 -0
  141. package/dist/assets/hooks/scripts/check-hard-risk-prefix.mjs +99 -0
  142. package/dist/assets/hooks/skills/aria-conversational-doctrine-discipline/SKILL.md +101 -0
  143. package/dist/assets/hooks/test-aria-preturn-memory-gate.mjs +2 -2
  144. package/dist/assets/hooks/test-tier-lens-labeling.mjs +14 -3
  145. package/dist/assets/opencode-plugins/harness-context/index.js +39 -6
  146. package/dist/assets/opencode-plugins/harness-context/task-project-ledger.mjs +5 -1
  147. package/dist/assets/opencode-plugins/harness-gate/index.js +36 -0
  148. package/dist/assets/opencode-plugins/harness-gate/lib/atlas-dossier-client.js +1 -0
  149. package/dist/assets/opencode-plugins/harness-gate/lib/recovery-grants.js +79 -0
  150. package/dist/assets/opencode-plugins/harness-outcome/index.js +12 -0
  151. package/dist/assets/opencode-plugins/harness-stop/index.js +97 -2
  152. package/dist/assets/opencode-plugins/harness-stop/lib/atlas-dossier-client.js +1 -0
  153. package/dist/assets/opencode-plugins/harness-stop/lib/domain-output-quality.js +15 -2
  154. package/dist/assets/opencode-plugins/lib/coach.js +148 -0
  155. package/dist/runtime/coach-kernel.mjs +144 -7
  156. package/dist/runtime/codex-bridge.mjs +254 -8
  157. package/dist/runtime/discipline/doctrine_trigger_map.json +236 -25
  158. package/dist/runtime/discipline/skills/aria-cognition/34-frameworks-unified/SKILL.md +42 -0
  159. package/dist/runtime/discipline/skills/aria-cognition/aria-aristotle-cognitives/SKILL.md +128 -0
  160. package/dist/runtime/discipline/skills/aria-cognition/aria-aristotle-intra-phase/SKILL.md +99 -0
  161. package/dist/runtime/discipline/skills/aria-cognition/aria-aristotle-post-phase/SKILL.md +118 -0
  162. package/dist/runtime/discipline/skills/aria-cognition/aria-aristotle-pre-phase/SKILL.md +117 -0
  163. package/dist/runtime/discipline/skills/aria-cognition/aria-axioms-first-principles/SKILL.md +202 -0
  164. package/dist/runtime/discipline/skills/aria-cognition/aria-axioms-first-principles/agents/openai.yaml +4 -0
  165. package/dist/runtime/discipline/skills/aria-cognition/aria-axioms-first-principles/references/source-map.md +130 -0
  166. package/dist/runtime/discipline/skills/aria-cognition/aria-backend-architect/SKILL.md +124 -0
  167. package/dist/runtime/discipline/skills/aria-cognition/aria-backend-architect/references/backend-cookbook.md +417 -0
  168. package/dist/runtime/discipline/skills/aria-cognition/aria-business-audit/SKILL.md +133 -0
  169. package/dist/runtime/discipline/skills/aria-cognition/aria-business-audit/references/audit-cookbook.md +247 -0
  170. package/dist/runtime/discipline/skills/aria-cognition/aria-business-frame/SKILL.md +138 -0
  171. package/dist/runtime/discipline/skills/aria-cognition/aria-business-frame/references/business-cookbook.md +154 -0
  172. package/dist/runtime/discipline/skills/aria-cognition/aria-chat/SKILL.md +84 -0
  173. package/dist/runtime/discipline/skills/aria-cognition/aria-chat/scripts/aria-chat.sh +57 -0
  174. package/dist/runtime/discipline/skills/aria-cognition/aria-cognition-autofire/SKILL.md +137 -0
  175. package/dist/runtime/discipline/skills/aria-cognition/aria-cognition-batch/SKILL.md +264 -0
  176. package/dist/runtime/discipline/skills/aria-cognition/aria-decision-mizan/SKILL.md +136 -0
  177. package/dist/runtime/discipline/skills/aria-cognition/aria-decision-mizan/references/decision-frameworks.md +287 -0
  178. package/dist/runtime/discipline/skills/aria-cognition/aria-first-class-operating-contract/SKILL.md +104 -0
  179. package/dist/runtime/discipline/skills/aria-cognition/aria-frontend-architect/SKILL.md +123 -0
  180. package/dist/runtime/discipline/skills/aria-cognition/aria-frontend-architect/references/frontend-cookbook.md +358 -0
  181. package/dist/runtime/discipline/skills/aria-cognition/aria-fullstack-orchestrator/SKILL.md +127 -0
  182. package/dist/runtime/discipline/skills/aria-cognition/aria-fullstack-orchestrator/references/fullstack-cookbook.md +383 -0
  183. package/dist/runtime/discipline/skills/aria-cognition/aria-gtm-architect/SKILL.md +126 -0
  184. package/dist/runtime/discipline/skills/aria-cognition/aria-gtm-architect/references/gtm-cookbook.md +235 -0
  185. package/dist/runtime/discipline/skills/aria-cognition/aria-harness-deploy/SKILL.md +145 -0
  186. package/dist/runtime/discipline/skills/aria-cognition/aria-harness-no-stripping/SKILL.md +135 -0
  187. package/dist/runtime/discipline/skills/aria-cognition/aria-harness-onboarding/SKILL.md +130 -0
  188. package/dist/runtime/discipline/skills/aria-cognition/aria-harness-output-discipline/SKILL.md +120 -0
  189. package/dist/runtime/discipline/skills/aria-cognition/aria-harness-substrate-binding/SKILL.md +139 -0
  190. package/dist/runtime/discipline/skills/aria-cognition/aria-http-harness-client/SKILL.md +85 -0
  191. package/dist/runtime/discipline/skills/aria-cognition/aria-http-harness-client/scripts/smoke.mjs +47 -0
  192. package/dist/runtime/discipline/skills/aria-cognition/aria-k8s-deploy/SKILL.md +174 -0
  193. package/dist/runtime/discipline/skills/aria-cognition/aria-k8s-deploy/agents/openai.yaml +3 -0
  194. package/dist/runtime/discipline/skills/aria-cognition/aria-ladduniframe/SKILL.md +60 -0
  195. package/dist/runtime/discipline/skills/aria-cognition/aria-ledger-fleet-execution/SKILL.md +126 -0
  196. package/dist/runtime/discipline/skills/aria-cognition/aria-live-ops/SKILL.md +54 -0
  197. package/dist/runtime/discipline/skills/aria-cognition/aria-mac-ssh-ops/SKILL.md +100 -0
  198. package/dist/runtime/discipline/skills/aria-cognition/aria-memory-index/SKILL.md +42 -0
  199. package/dist/runtime/discipline/skills/aria-cognition/aria-noor-cognitives/SKILL.md +120 -0
  200. package/dist/runtime/discipline/skills/aria-cognition/aria-ops/SKILL.md +60 -0
  201. package/dist/runtime/discipline/skills/aria-cognition/aria-ops/references/live-endpoints.md +59 -0
  202. package/dist/runtime/discipline/skills/aria-cognition/aria-quality-audit/SKILL.md +133 -0
  203. package/dist/runtime/discipline/skills/aria-cognition/aria-readable-output/SKILL.md +239 -0
  204. package/dist/runtime/discipline/skills/aria-cognition/aria-readable-output/references/layout-cookbook.md +366 -0
  205. package/dist/runtime/discipline/skills/aria-cognition/aria-reasoning/SKILL.md +67 -0
  206. package/dist/runtime/discipline/skills/aria-cognition/aria-reasoning/references/core-principles.md +42 -0
  207. package/dist/runtime/discipline/skills/aria-cognition/aria-repo-audit/SKILL.md +135 -0
  208. package/dist/runtime/discipline/skills/aria-cognition/aria-repo-audit/references/repo-audit-cookbook.md +375 -0
  209. package/dist/runtime/discipline/skills/aria-cognition/aria-research-orchestrator/SKILL.md +138 -0
  210. package/dist/runtime/discipline/skills/aria-cognition/aria-research-orchestrator/references/research-patterns.md +270 -0
  211. package/dist/runtime/discipline/skills/aria-cognition/aria-retention-engine/SKILL.md +120 -0
  212. package/dist/runtime/discipline/skills/aria-cognition/aria-retention-engine/references/retention-cookbook.md +271 -0
  213. package/dist/runtime/discipline/skills/aria-cognition/aria-revenue-engine/SKILL.md +128 -0
  214. package/dist/runtime/discipline/skills/aria-cognition/aria-revenue-engine/references/revenue-cookbook.md +227 -0
  215. package/dist/runtime/discipline/skills/aria-cognition/aria-senior-code-audit/SKILL.md +233 -0
  216. package/dist/runtime/discipline/skills/aria-cognition/aria-senior-code-audit/references/audit-checklist.md +369 -0
  217. package/dist/runtime/discipline/skills/aria-cognition/aria-senior-code-cookbook/SKILL.md +288 -0
  218. package/dist/runtime/discipline/skills/aria-cognition/aria-senior-code-cookbook/references/engineering-cookbook.md +489 -0
  219. package/dist/runtime/discipline/skills/aria-cognition/aria-soul-principles/SKILL.md +42 -0
  220. package/dist/runtime/discipline/skills/aria-cognition/aria-task-codex-executor/SKILL.md +86 -0
  221. package/dist/runtime/discipline/skills/aria-cognition/aristotle-engine/SKILL.md +42 -0
  222. package/dist/runtime/discipline/skills/aria-cognition/cross-domain-24/SKILL.md +42 -0
  223. package/dist/runtime/discipline/skills/aria-cognition/deepsoul-emotional/SKILL.md +42 -0
  224. package/dist/runtime/discipline/skills/aria-cognition/fitrah-guard/SKILL.md +78 -0
  225. package/dist/runtime/discipline/skills/aria-cognition/ghazali-8lens/SKILL.md +227 -29
  226. package/dist/runtime/discipline/skills/aria-cognition/ghazali-8lens/references/ghazali-8lens-cookbook.md +797 -0
  227. package/dist/runtime/discipline/skills/aria-cognition/ijtihad-novel/SKILL.md +42 -0
  228. package/dist/runtime/discipline/skills/aria-cognition/ilham-intuition/SKILL.md +42 -0
  229. package/dist/runtime/discipline/skills/aria-cognition/never-guess/SKILL.md +77 -0
  230. package/dist/runtime/discipline/skills/aria-cognition/noor-recognition/SKILL.md +45 -0
  231. package/dist/runtime/discipline/skills/aria-cognition/qiyas-analogy/SKILL.md +174 -14
  232. package/dist/runtime/discipline/skills/aria-cognition/ruh-basis/SKILL.md +42 -0
  233. package/dist/runtime/discipline/skills/aria-cognition/tadabbur/SKILL.md +506 -0
  234. package/dist/runtime/discipline/skills/aria-cognition/tadabbur/references/tadabbur-cookbook.md +921 -0
  235. package/dist/runtime/discipline/skills/aria-cognition/tadabbur-ops/SKILL.md +42 -0
  236. package/dist/runtime/discipline/skills/aria-cognition/tafakkur/SKILL.md +104 -0
  237. package/dist/runtime/doctrine_trigger_map.json +236 -25
  238. package/dist/runtime/embedded-public-key.mjs +27 -0
  239. package/dist/runtime/gated-ledger.mjs +41 -14
  240. package/dist/runtime/harness-daemon.mjs +85 -10
  241. package/dist/runtime/hive-wal-publisher.mjs +292 -0
  242. package/dist/runtime/hooks/README.md +58 -0
  243. package/dist/runtime/hooks/aria-agent-handoff.mjs +147 -2
  244. package/dist/runtime/hooks/aria-agent-ledger-merge.mjs +31 -7
  245. package/dist/runtime/hooks/aria-architect-fallback.mjs +10 -2
  246. package/dist/runtime/hooks/aria-claim-evidence-stop-gate.mjs +240 -0
  247. package/dist/runtime/hooks/aria-cognition-substrate-binding.mjs +84 -10
  248. package/dist/runtime/hooks/aria-first-class-coach.mjs +305 -10
  249. package/dist/runtime/hooks/aria-harness-via-sdk.mjs +93 -16
  250. package/dist/runtime/hooks/aria-import-resolution-gate.mjs +106 -20
  251. package/dist/runtime/hooks/aria-outcome-record.mjs +56 -20
  252. package/dist/runtime/hooks/aria-pre-emit-autoload.mjs +1809 -0
  253. package/dist/runtime/hooks/aria-pre-emit-autoload.mjs.before-orchestration-redesign +1400 -0
  254. package/dist/runtime/hooks/aria-pre-emit-dryrun.mjs +22 -3
  255. package/dist/runtime/hooks/aria-pre-text-gate.mjs +11 -2
  256. package/dist/runtime/hooks/aria-pre-tool-gate.mjs +516 -92
  257. package/dist/runtime/hooks/aria-pre-tool-use.mjs +70 -6
  258. package/dist/runtime/hooks/aria-preprompt-consult.mjs +23 -4
  259. package/dist/runtime/hooks/aria-repo-doctrine-gate.mjs +29 -3
  260. package/dist/runtime/hooks/aria-stop-gate.mjs +585 -76
  261. package/dist/runtime/hooks/aria-trigger-autolearn.mjs +17 -3
  262. package/dist/runtime/hooks/aria-universal-turn-packet.mjs +1165 -0
  263. package/dist/runtime/hooks/aria-userprompt-abandon-detect.mjs +9 -1
  264. package/dist/runtime/hooks/canonical-settings-block.json +172 -0
  265. package/dist/runtime/hooks/codex-native/aria-harness-ticker-sidecar.mjs +92 -0
  266. package/dist/runtime/hooks/codex-native/aria-hive-wal-consumer.mjs +86 -0
  267. package/dist/runtime/hooks/codex-native/aria-live-ticker.mjs +38 -0
  268. package/dist/runtime/hooks/codex-native/aria-post-tool-use.mjs +236 -0
  269. package/dist/runtime/hooks/codex-native/aria-pre-tool-use.mjs +362 -0
  270. package/dist/runtime/hooks/codex-native/aria-stop.mjs +691 -0
  271. package/dist/runtime/hooks/codex-native/aria-userprompt-submit.mjs +623 -0
  272. package/dist/runtime/hooks/codex-native/atlas-session-context.mjs +121 -0
  273. package/dist/runtime/hooks/codex-native/lib/evaluate-with-kernel.mjs +257 -0
  274. package/dist/runtime/hooks/codex-native/lib/hive-wal-consumer.mjs +452 -0
  275. package/dist/runtime/hooks/codex-native/lib/kernel/deterministic-cognitive-kernel.mjs +914 -0
  276. package/dist/runtime/hooks/codex-native/lib/project-boundary-cognition.mjs +143 -0
  277. package/dist/runtime/hooks/codex-native/lib/runtime-client.mjs +3567 -0
  278. package/dist/runtime/hooks/codex-native/lib/task-project-ledger.mjs +294 -0
  279. package/dist/runtime/hooks/doctrine_trigger_map.json +236 -25
  280. package/dist/runtime/hooks/doctrine_trigger_map.schema.json +46 -0
  281. package/dist/runtime/hooks/install.sh +84 -0
  282. package/dist/runtime/hooks/lib/action-ledger-core.mjs +269 -0
  283. package/dist/runtime/hooks/lib/aria-gate-ledger.mjs +143 -0
  284. package/dist/runtime/hooks/lib/ast-stub-shape-detector.mjs +107 -0
  285. package/dist/runtime/hooks/lib/atlas-dossier-client.mjs +151 -0
  286. package/dist/runtime/hooks/lib/atlas-orchestrator-postwire.mjs +221 -0
  287. package/dist/runtime/hooks/lib/canonical-lenses.mjs +83 -6
  288. package/dist/runtime/hooks/lib/coach-intent-classifier.mjs +248 -0
  289. package/dist/runtime/hooks/lib/cognitive-block-parser.mjs +111 -0
  290. package/dist/runtime/hooks/lib/doctrine-trigger-map-loader.mjs +137 -0
  291. package/dist/runtime/hooks/lib/domain-output-quality.mjs +132 -3
  292. package/dist/runtime/hooks/lib/empty-catch-scanner.mjs +91 -0
  293. package/dist/runtime/hooks/lib/end-phase-qa-autofire.mjs +426 -0
  294. package/dist/runtime/hooks/lib/evaluate-with-kernel.mjs +133 -0
  295. package/dist/runtime/hooks/lib/first-class-coach.mjs +454 -19
  296. package/dist/runtime/hooks/lib/gate-audit.mjs +12 -2
  297. package/dist/runtime/hooks/lib/gate-loop-state.mjs +11 -2
  298. package/dist/runtime/hooks/lib/goal-contract-quality.mjs +302 -0
  299. package/dist/runtime/hooks/lib/hook-message-window.mjs +101 -9
  300. package/dist/runtime/hooks/lib/invocation-required-verifier.mjs +184 -0
  301. package/dist/runtime/hooks/lib/kernel/deterministic-cognitive-kernel.mjs +906 -0
  302. package/dist/runtime/hooks/lib/obligation-ledger.mjs +147 -0
  303. package/dist/runtime/hooks/lib/orchestration-manifest-extract.mjs +217 -0
  304. package/dist/runtime/hooks/lib/owner-authorizations.mjs +269 -0
  305. package/dist/runtime/hooks/lib/probe-discipline-scanner.mjs +142 -0
  306. package/dist/runtime/hooks/lib/project-boundary-cognition.mjs +143 -0
  307. package/dist/runtime/hooks/lib/recovery-context.mjs +151 -0
  308. package/dist/runtime/hooks/lib/recovery-template-loader.mjs +154 -0
  309. package/dist/runtime/hooks/lib/self-doctrine-check.mjs +321 -0
  310. package/dist/runtime/hooks/lib/sensitive-shape-detector.mjs +64 -0
  311. package/dist/runtime/hooks/lib/skill-autoload-gate-impl.mjs +226 -1
  312. package/dist/runtime/hooks/lib/stop-hook-protocol.mjs +166 -0
  313. package/dist/runtime/hooks/lib/surface-caught.mjs +94 -0
  314. package/dist/runtime/hooks/recovery-templates/force-reauthor.md +67 -0
  315. package/dist/runtime/hooks/recovery-templates/handoff-recovery.md +25 -0
  316. package/dist/runtime/hooks/scripts/check-hard-risk-prefix.mjs +99 -0
  317. package/dist/runtime/hooks/skills/aria-conversational-doctrine-discipline/SKILL.md +101 -0
  318. package/dist/runtime/hooks/test-aria-preturn-memory-gate.mjs +2 -2
  319. package/dist/runtime/hooks/test-tier-lens-labeling.mjs +14 -3
  320. package/dist/runtime/lib/evaluate-with-kernel.mjs +133 -0
  321. package/dist/runtime/lib/kernel/deterministic-cognitive-kernel.mjs +906 -0
  322. package/dist/runtime/local-phase.mjs +10 -5
  323. package/dist/runtime/manifest.json +8 -8
  324. package/dist/runtime/packet-verifier.mjs +166 -0
  325. package/dist/runtime/provider-proxy.mjs +13 -0
  326. package/dist/runtime/quality-enforcer.mjs +40 -23
  327. package/dist/runtime/runtime-rails/registry.mjs +252 -0
  328. package/dist/runtime/sdk/BUNDLED.json +2 -2
  329. package/dist/runtime/sdk/index.d.ts +119 -4
  330. package/dist/runtime/sdk/index.js +138 -12
  331. package/dist/runtime/sdk/index.js.map +1 -1
  332. package/dist/runtime/service.mjs +8036 -764
  333. package/dist/runtime/sub-agent-enforcer.mjs +201 -0
  334. package/dist/runtime/task-project-ledger.mjs +5 -1
  335. package/dist/sdk/BUNDLED.json +2 -2
  336. package/dist/sdk/index.d.ts +119 -4
  337. package/dist/sdk/index.js +138 -12
  338. package/dist/sdk/index.js.map +1 -1
  339. package/hooks/README.md +58 -0
  340. package/hooks/aria-agent-handoff.mjs +147 -2
  341. package/hooks/aria-agent-ledger-merge.mjs +31 -7
  342. package/hooks/aria-architect-fallback.mjs +10 -2
  343. package/hooks/aria-claim-evidence-stop-gate.mjs +240 -0
  344. package/hooks/aria-cognition-substrate-binding.mjs +84 -10
  345. package/hooks/aria-first-class-coach.mjs +305 -10
  346. package/hooks/aria-harness-via-sdk.mjs +93 -16
  347. package/hooks/aria-import-resolution-gate.mjs +106 -20
  348. package/hooks/aria-outcome-record.mjs +56 -20
  349. package/hooks/aria-pre-emit-autoload.mjs +1809 -0
  350. package/hooks/aria-pre-emit-autoload.mjs.before-orchestration-redesign +1400 -0
  351. package/hooks/aria-pre-emit-dryrun.mjs +22 -3
  352. package/hooks/aria-pre-text-gate.mjs +11 -2
  353. package/hooks/aria-pre-tool-gate.mjs +516 -92
  354. package/hooks/aria-pre-tool-use.mjs +70 -6
  355. package/hooks/aria-preprompt-consult.mjs +23 -4
  356. package/hooks/aria-repo-doctrine-gate.mjs +29 -3
  357. package/hooks/aria-stop-gate.mjs +585 -76
  358. package/hooks/aria-trigger-autolearn.mjs +17 -3
  359. package/hooks/aria-universal-turn-packet.mjs +1165 -0
  360. package/hooks/aria-userprompt-abandon-detect.mjs +9 -1
  361. package/hooks/canonical-settings-block.json +172 -0
  362. package/hooks/codex-native/aria-harness-ticker-sidecar.mjs +92 -0
  363. package/hooks/codex-native/aria-hive-wal-consumer.mjs +86 -0
  364. package/hooks/codex-native/aria-live-ticker.mjs +38 -0
  365. package/hooks/codex-native/aria-post-tool-use.mjs +236 -0
  366. package/hooks/codex-native/aria-pre-tool-use.mjs +362 -0
  367. package/hooks/codex-native/aria-stop.mjs +691 -0
  368. package/hooks/codex-native/aria-userprompt-submit.mjs +623 -0
  369. package/hooks/codex-native/atlas-session-context.mjs +121 -0
  370. package/hooks/codex-native/lib/evaluate-with-kernel.mjs +257 -0
  371. package/hooks/codex-native/lib/hive-wal-consumer.mjs +452 -0
  372. package/hooks/codex-native/lib/kernel/deterministic-cognitive-kernel.mjs +914 -0
  373. package/hooks/codex-native/lib/project-boundary-cognition.mjs +143 -0
  374. package/hooks/codex-native/lib/runtime-client.mjs +3567 -0
  375. package/hooks/codex-native/lib/task-project-ledger.mjs +294 -0
  376. package/hooks/doctrine_trigger_map.json +236 -25
  377. package/hooks/doctrine_trigger_map.schema.json +46 -0
  378. package/hooks/install.sh +84 -0
  379. package/hooks/lib/action-ledger-core.mjs +269 -0
  380. package/hooks/lib/aria-gate-ledger.mjs +143 -0
  381. package/hooks/lib/ast-stub-shape-detector.mjs +107 -0
  382. package/hooks/lib/atlas-dossier-client.mjs +151 -0
  383. package/hooks/lib/atlas-orchestrator-postwire.mjs +221 -0
  384. package/hooks/lib/canonical-lenses.mjs +83 -6
  385. package/hooks/lib/coach-intent-classifier.mjs +248 -0
  386. package/hooks/lib/cognitive-block-parser.mjs +111 -0
  387. package/hooks/lib/doctrine-trigger-map-loader.mjs +137 -0
  388. package/hooks/lib/domain-output-quality.mjs +132 -3
  389. package/hooks/lib/empty-catch-scanner.mjs +91 -0
  390. package/hooks/lib/end-phase-qa-autofire.mjs +426 -0
  391. package/hooks/lib/evaluate-with-kernel.mjs +133 -0
  392. package/hooks/lib/first-class-coach.mjs +454 -19
  393. package/hooks/lib/gate-audit.mjs +12 -2
  394. package/hooks/lib/gate-loop-state.mjs +11 -2
  395. package/hooks/lib/goal-contract-quality.mjs +302 -0
  396. package/hooks/lib/hook-message-window.mjs +101 -9
  397. package/hooks/lib/invocation-required-verifier.mjs +184 -0
  398. package/hooks/lib/kernel/deterministic-cognitive-kernel.mjs +906 -0
  399. package/hooks/lib/obligation-ledger.mjs +147 -0
  400. package/hooks/lib/orchestration-manifest-extract.mjs +217 -0
  401. package/hooks/lib/owner-authorizations.mjs +269 -0
  402. package/hooks/lib/probe-discipline-scanner.mjs +142 -0
  403. package/hooks/lib/project-boundary-cognition.mjs +143 -0
  404. package/hooks/lib/recovery-context.mjs +151 -0
  405. package/hooks/lib/recovery-template-loader.mjs +154 -0
  406. package/hooks/lib/self-doctrine-check.mjs +321 -0
  407. package/hooks/lib/sensitive-shape-detector.mjs +64 -0
  408. package/hooks/lib/skill-autoload-gate-impl.mjs +226 -1
  409. package/hooks/lib/stop-hook-protocol.mjs +166 -0
  410. package/hooks/lib/surface-caught.mjs +94 -0
  411. package/hooks/recovery-templates/force-reauthor.md +67 -0
  412. package/hooks/recovery-templates/handoff-recovery.md +25 -0
  413. package/hooks/scripts/check-hard-risk-prefix.mjs +99 -0
  414. package/hooks/skills/aria-conversational-doctrine-discipline/SKILL.md +101 -0
  415. package/hooks/test-aria-preturn-memory-gate.mjs +2 -2
  416. package/hooks/test-tier-lens-labeling.mjs +14 -3
  417. package/opencode-plugins/harness-context/index.js +39 -6
  418. package/opencode-plugins/harness-context/task-project-ledger.mjs +5 -1
  419. package/opencode-plugins/harness-gate/index.js +36 -0
  420. package/opencode-plugins/harness-gate/lib/atlas-dossier-client.js +1 -0
  421. package/opencode-plugins/harness-gate/lib/recovery-grants.js +79 -0
  422. package/opencode-plugins/harness-outcome/index.js +12 -0
  423. package/opencode-plugins/harness-stop/index.js +97 -2
  424. package/opencode-plugins/harness-stop/lib/atlas-dossier-client.js +1 -0
  425. package/opencode-plugins/harness-stop/lib/domain-output-quality.js +15 -2
  426. package/opencode-plugins/lib/coach.js +148 -0
  427. package/package.json +71 -5
  428. package/runtime-src/coach-kernel.mjs +144 -7
  429. package/runtime-src/codex-bridge.mjs +254 -8
  430. package/runtime-src/embedded-public-key.mjs +27 -0
  431. package/runtime-src/gated-ledger.mjs +41 -14
  432. package/runtime-src/harness-daemon.mjs +85 -10
  433. package/runtime-src/hive-wal-publisher.mjs +292 -0
  434. package/runtime-src/lib/evaluate-with-kernel.mjs +133 -0
  435. package/runtime-src/lib/kernel/deterministic-cognitive-kernel.mjs +906 -0
  436. package/runtime-src/local-phase.mjs +10 -5
  437. package/runtime-src/packet-verifier.mjs +166 -0
  438. package/runtime-src/provider-proxy.mjs +13 -0
  439. package/runtime-src/quality-enforcer.mjs +40 -23
  440. package/runtime-src/runtime-rails/registry.mjs +252 -0
  441. package/runtime-src/service.mjs +8036 -764
  442. package/runtime-src/sub-agent-enforcer.mjs +201 -0
  443. package/scripts/aria-ledger-append.mjs +337 -0
  444. package/scripts/aria-task-cheap-worker-dispatch.mjs +234 -0
  445. package/scripts/audit-of-audit-prior-tasks.mjs +194 -0
  446. package/scripts/audit-of-audit-this-turn.mjs +116 -0
  447. package/scripts/bundle-sdk.mjs +31 -5
  448. package/scripts/check-cli-wrapper-provider-contract.mjs +160 -0
  449. package/scripts/check-client-compatibility.mjs +15 -5
  450. package/scripts/check-client-smoke.mjs +297 -0
  451. package/scripts/check-codex-orchestrator-adoption.mjs +150 -0
  452. package/scripts/check-glm-env-wired.mjs +131 -0
  453. package/scripts/check-hive-local-storage-contract.mjs +91 -0
  454. package/scripts/check-hook-mirror.mjs +150 -0
  455. package/scripts/check-install-sh-drift.mjs +152 -0
  456. package/scripts/check-kernel-sync.mjs +101 -0
  457. package/scripts/check-package-artifact.mjs +152 -0
  458. package/scripts/check-registry-mirror.mjs +71 -0
  459. package/scripts/drain-owner-airtable-sync-queue.mjs +287 -0
  460. package/scripts/export-owner-status-sheets.mjs +589 -0
  461. package/scripts/live-sidecar-receipt-canary.mjs +347 -0
  462. package/scripts/qiyas-tadabbur-model-matrix.mjs +970 -0
  463. package/scripts/quality-ab-live-provider.mjs +913 -0
  464. package/scripts/self-test-action-ledger-core.mjs +190 -0
  465. package/scripts/self-test-approval-receipt-binding.mjs +122 -0
  466. package/scripts/self-test-autofire-quality-output.mjs +110 -0
  467. package/scripts/self-test-claude-code-action-ledger.mjs +132 -0
  468. package/scripts/self-test-claude-code-mechanical-autofire-hive.mjs +138 -0
  469. package/scripts/self-test-claude-code-mechanical-autofire.mjs +234 -0
  470. package/scripts/self-test-codebase-awareness-atlas-delta.mjs +159 -0
  471. package/scripts/self-test-codebase-awareness-delta-ingest.mjs +179 -0
  472. package/scripts/self-test-codex-live-hook-parity.mjs +84 -0
  473. package/scripts/self-test-codex-native-action-ledger.mjs +167 -0
  474. package/scripts/self-test-codex-native-hook-json-contract.mjs +74 -0
  475. package/scripts/self-test-codex-orchestrator-continuity.mjs +113 -0
  476. package/scripts/self-test-codex-readable-recovery.mjs +94 -0
  477. package/scripts/self-test-codex-self-harness.mjs +538 -0
  478. package/scripts/self-test-compiled-workunit.mjs +214 -0
  479. package/scripts/self-test-continuation-output-smoke.mjs +101 -0
  480. package/scripts/self-test-cross-cli-fleet-ticker.mjs +85 -0
  481. package/scripts/self-test-cross-cli-hive-adoption.mjs +125 -0
  482. package/scripts/self-test-cross-cli-hive-learning.mjs +146 -0
  483. package/scripts/self-test-cross-phase-tool-failure.mjs +110 -0
  484. package/scripts/self-test-cross-surface-action-ledger.mjs +149 -0
  485. package/scripts/self-test-end-of-phase-qa-court.mjs +616 -0
  486. package/scripts/self-test-evaluate-with-kernel.mjs +111 -0
  487. package/scripts/self-test-first-class-output-delta-proof.mjs +307 -0
  488. package/scripts/self-test-goal-contract-output-qa.mjs +73 -0
  489. package/scripts/self-test-goal-contract.mjs +35 -0
  490. package/scripts/self-test-governed-adapters.mjs +105 -0
  491. package/scripts/self-test-governed-surface-runner.mjs +198 -0
  492. package/scripts/self-test-harness-gates.mjs +15 -12
  493. package/scripts/self-test-harness-ticker-sidecar.mjs +153 -0
  494. package/scripts/self-test-hive-org-kernel.mjs +233 -0
  495. package/scripts/self-test-hive-session-coordination.mjs +156 -0
  496. package/scripts/self-test-hive-wal-consumer.mjs +111 -0
  497. package/scripts/self-test-kernel-a3-a4-selection.mjs +179 -0
  498. package/scripts/self-test-ledger-append.mjs +175 -0
  499. package/scripts/self-test-live-codex-posttool-packet-smoke.mjs +111 -0
  500. package/scripts/self-test-live-codex-pretool-packet-smoke.mjs +101 -0
  501. package/scripts/self-test-live-codex-stop-qa-kernel-smoke.mjs +43 -0
  502. package/scripts/self-test-live-wrapper-substrate-inventory.mjs +149 -0
  503. package/scripts/self-test-local-main-sync-script.mjs +47 -0
  504. package/scripts/self-test-mechanical-autofire-resolver.mjs +296 -0
  505. package/scripts/self-test-no-consult-cognitive-skills-output.mjs +135 -0
  506. package/scripts/self-test-owner-airtable-sync-queue.mjs +196 -0
  507. package/scripts/self-test-owner-airtable-sync.mjs +181 -0
  508. package/scripts/self-test-owner-sheets-action-ledger.mjs +100 -0
  509. package/scripts/self-test-production-preflight.mjs +78 -0
  510. package/scripts/self-test-project-boundary-cognition.mjs +79 -0
  511. package/scripts/self-test-qa-exec-kernel.mjs +34 -0
  512. package/scripts/self-test-qa-recovery-learning-loop.mjs +113 -0
  513. package/scripts/self-test-qiyas-label-alignment.mjs +94 -0
  514. package/scripts/self-test-recovery-context.mjs +110 -0
  515. package/scripts/self-test-repo-guard.mjs +10 -0
  516. package/scripts/self-test-runtime-health-self-heal.mjs +161 -0
  517. package/scripts/self-test-runtime-postcondition.mjs +70 -0
  518. package/scripts/self-test-soul-precommit-hook.mjs +39 -0
  519. package/scripts/self-test-stop-gate-kernel-guards.mjs +185 -0
  520. package/scripts/self-test-stop-gate.mjs +128 -0
  521. package/scripts/self-test-substrate-kernel-execution-receipt.mjs +130 -0
  522. package/scripts/self-test-substrate-open-skill-floor.mjs +87 -0
  523. package/scripts/self-test-substrate-output-quality-eval.mjs +171 -0
  524. package/scripts/self-test-task-closeout-drift.mjs +97 -0
  525. package/scripts/self-test-task-project-ledger-readiness.mjs +43 -0
  526. package/scripts/self-test-task-runner-phase-consumer.mjs +134 -0
  527. package/scripts/self-test-task-worker-lane.mjs +256 -0
  528. package/scripts/self-test-turn-substrate-qa-kernel.mjs +188 -0
  529. package/scripts/self-test-universal-action-capture.mjs +153 -0
  530. package/scripts/self-test-universal-turn-packet-entrypoints.mjs +252 -0
  531. package/scripts/self-test-universal-turn-packet.mjs +320 -0
  532. package/scripts/session-quality-backfill.mjs +253 -0
  533. package/scripts/smoke-autofire-100-prompts.mjs +481 -0
  534. package/scripts/sync-local-main-on-task-complete.mjs +278 -0
  535. package/scripts/sync-owner-status-airtable.mjs +1158 -0
  536. package/scripts/validate-skill-prompts.mjs +12 -1
  537. package/scripts/verify-codex-native-mirror.mjs +262 -0
  538. package/skills/34-frameworks-unified/SKILL.md +42 -0
  539. package/skills/api-design/SKILL.md +123 -0
  540. package/skills/architecture-decision/SKILL.md +105 -0
  541. package/skills/aria-aristotle-cognitives/SKILL.md +128 -0
  542. package/skills/aria-aristotle-intra-phase/SKILL.md +99 -0
  543. package/skills/aria-aristotle-post-phase/SKILL.md +116 -0
  544. package/skills/aria-aristotle-pre-phase/SKILL.md +117 -0
  545. package/skills/aria-axioms-first-principles/SKILL.md +202 -0
  546. package/skills/aria-axioms-first-principles/agents/openai.yaml +4 -0
  547. package/skills/aria-axioms-first-principles/references/source-map.md +130 -0
  548. package/skills/aria-chat/SKILL.md +84 -0
  549. package/skills/aria-chat/scripts/aria-chat.sh +57 -0
  550. package/skills/aria-cognition/34-frameworks-unified/SKILL.md +42 -0
  551. package/skills/aria-cognition/aria-aristotle-cognitives/SKILL.md +128 -0
  552. package/skills/aria-cognition/aria-aristotle-intra-phase/SKILL.md +99 -0
  553. package/skills/aria-cognition/aria-aristotle-post-phase/SKILL.md +118 -0
  554. package/skills/aria-cognition/aria-aristotle-pre-phase/SKILL.md +117 -0
  555. package/skills/aria-cognition/aria-axioms-first-principles/SKILL.md +202 -0
  556. package/skills/aria-cognition/aria-axioms-first-principles/agents/openai.yaml +4 -0
  557. package/skills/aria-cognition/aria-axioms-first-principles/references/source-map.md +130 -0
  558. package/skills/aria-cognition/aria-backend-architect/SKILL.md +124 -0
  559. package/skills/aria-cognition/aria-backend-architect/references/backend-cookbook.md +417 -0
  560. package/skills/aria-cognition/aria-business-audit/SKILL.md +133 -0
  561. package/skills/aria-cognition/aria-business-audit/references/audit-cookbook.md +247 -0
  562. package/skills/aria-cognition/aria-business-frame/SKILL.md +138 -0
  563. package/skills/aria-cognition/aria-business-frame/references/business-cookbook.md +154 -0
  564. package/skills/aria-cognition/aria-chat/SKILL.md +84 -0
  565. package/skills/aria-cognition/aria-chat/scripts/aria-chat.sh +57 -0
  566. package/skills/aria-cognition/aria-cognition-autofire/SKILL.md +137 -0
  567. package/skills/aria-cognition/aria-cognition-batch/SKILL.md +264 -0
  568. package/skills/aria-cognition/aria-decision-mizan/SKILL.md +136 -0
  569. package/skills/aria-cognition/aria-decision-mizan/references/decision-frameworks.md +287 -0
  570. package/skills/aria-cognition/aria-first-class-operating-contract/SKILL.md +104 -0
  571. package/skills/aria-cognition/aria-frontend-architect/SKILL.md +123 -0
  572. package/skills/aria-cognition/aria-frontend-architect/references/frontend-cookbook.md +358 -0
  573. package/skills/aria-cognition/aria-fullstack-orchestrator/SKILL.md +127 -0
  574. package/skills/aria-cognition/aria-fullstack-orchestrator/references/fullstack-cookbook.md +383 -0
  575. package/skills/aria-cognition/aria-gtm-architect/SKILL.md +126 -0
  576. package/skills/aria-cognition/aria-gtm-architect/references/gtm-cookbook.md +235 -0
  577. package/skills/aria-cognition/aria-harness-deploy/SKILL.md +145 -0
  578. package/skills/aria-cognition/aria-harness-no-stripping/SKILL.md +135 -0
  579. package/skills/aria-cognition/aria-harness-onboarding/SKILL.md +130 -0
  580. package/skills/aria-cognition/aria-harness-output-discipline/SKILL.md +120 -0
  581. package/skills/aria-cognition/aria-harness-substrate-binding/SKILL.md +139 -0
  582. package/skills/aria-cognition/aria-http-harness-client/SKILL.md +85 -0
  583. package/skills/aria-cognition/aria-http-harness-client/scripts/smoke.mjs +47 -0
  584. package/skills/aria-cognition/aria-k8s-deploy/SKILL.md +174 -0
  585. package/skills/aria-cognition/aria-k8s-deploy/agents/openai.yaml +3 -0
  586. package/skills/aria-cognition/aria-ladduniframe/SKILL.md +60 -0
  587. package/skills/aria-cognition/aria-ledger-fleet-execution/SKILL.md +126 -0
  588. package/skills/aria-cognition/aria-live-ops/SKILL.md +54 -0
  589. package/skills/aria-cognition/aria-mac-ssh-ops/SKILL.md +100 -0
  590. package/skills/aria-cognition/aria-memory-index/SKILL.md +42 -0
  591. package/skills/aria-cognition/aria-noor-cognitives/SKILL.md +120 -0
  592. package/skills/aria-cognition/aria-ops/SKILL.md +60 -0
  593. package/skills/aria-cognition/aria-ops/references/live-endpoints.md +59 -0
  594. package/skills/aria-cognition/aria-quality-audit/SKILL.md +133 -0
  595. package/skills/aria-cognition/aria-readable-output/SKILL.md +239 -0
  596. package/skills/aria-cognition/aria-readable-output/references/layout-cookbook.md +366 -0
  597. package/skills/aria-cognition/aria-reasoning/SKILL.md +67 -0
  598. package/skills/aria-cognition/aria-reasoning/references/core-principles.md +42 -0
  599. package/skills/aria-cognition/aria-repo-audit/SKILL.md +135 -0
  600. package/skills/aria-cognition/aria-repo-audit/references/repo-audit-cookbook.md +375 -0
  601. package/skills/aria-cognition/aria-research-orchestrator/SKILL.md +138 -0
  602. package/skills/aria-cognition/aria-research-orchestrator/references/research-patterns.md +270 -0
  603. package/skills/aria-cognition/aria-retention-engine/SKILL.md +120 -0
  604. package/skills/aria-cognition/aria-retention-engine/references/retention-cookbook.md +271 -0
  605. package/skills/aria-cognition/aria-revenue-engine/SKILL.md +128 -0
  606. package/skills/aria-cognition/aria-revenue-engine/references/revenue-cookbook.md +227 -0
  607. package/skills/aria-cognition/aria-senior-code-audit/SKILL.md +233 -0
  608. package/skills/aria-cognition/aria-senior-code-audit/references/audit-checklist.md +369 -0
  609. package/skills/aria-cognition/aria-senior-code-cookbook/SKILL.md +288 -0
  610. package/skills/aria-cognition/aria-senior-code-cookbook/references/engineering-cookbook.md +489 -0
  611. package/skills/aria-cognition/aria-soul-principles/SKILL.md +42 -0
  612. package/skills/aria-cognition/aria-task-codex-executor/SKILL.md +86 -0
  613. package/skills/aria-cognition/aristotle-engine/SKILL.md +42 -0
  614. package/skills/aria-cognition/cross-domain-24/SKILL.md +42 -0
  615. package/skills/aria-cognition/deepsoul-emotional/SKILL.md +42 -0
  616. package/skills/aria-cognition/fitrah-guard/SKILL.md +78 -0
  617. package/skills/aria-cognition/ghazali-8lens/SKILL.md +227 -29
  618. package/skills/aria-cognition/ghazali-8lens/references/ghazali-8lens-cookbook.md +797 -0
  619. package/skills/aria-cognition/ijtihad-novel/SKILL.md +42 -0
  620. package/skills/aria-cognition/ilham-intuition/SKILL.md +42 -0
  621. package/skills/aria-cognition/never-guess/SKILL.md +77 -0
  622. package/skills/aria-cognition/noor-recognition/SKILL.md +45 -0
  623. package/skills/aria-cognition/qiyas-analogy/SKILL.md +174 -14
  624. package/skills/aria-cognition/ruh-basis/SKILL.md +42 -0
  625. package/skills/aria-cognition/tadabbur/SKILL.md +506 -0
  626. package/skills/aria-cognition/tadabbur/references/tadabbur-cookbook.md +921 -0
  627. package/skills/aria-cognition/tadabbur-ops/SKILL.md +42 -0
  628. package/skills/aria-cognition/tafakkur/SKILL.md +104 -0
  629. package/skills/aria-cognition-autofire/SKILL.md +109 -0
  630. package/skills/aria-cognition-batch/SKILL.md +264 -0
  631. package/skills/aria-conversational-doctrine-discipline/SKILL.md +125 -0
  632. package/skills/aria-essence/SKILL.md +81 -0
  633. package/skills/aria-essence/references/domain-matrix.md +80 -0
  634. package/skills/aria-essence/references/evolution-loop.md +30 -0
  635. package/skills/aria-essence/references/readable-cognition.md +27 -0
  636. package/skills/aria-first-class-operating-contract/SKILL.md +104 -0
  637. package/skills/aria-forge-guardrails/SKILL.md +53 -0
  638. package/skills/aria-forge-guardrails/references/checklist.md +31 -0
  639. package/skills/aria-harness-deploy/SKILL.md +145 -0
  640. package/skills/aria-harness-no-stripping/SKILL.md +135 -0
  641. package/skills/aria-harness-onboarding/SKILL.md +130 -0
  642. package/skills/aria-harness-output-discipline/SKILL.md +120 -0
  643. package/skills/aria-harness-substrate-binding/SKILL.md +139 -0
  644. package/skills/aria-http-harness-client/SKILL.md +85 -0
  645. package/skills/aria-http-harness-client/scripts/smoke.mjs +47 -0
  646. package/skills/aria-k8s-deploy/SKILL.md +174 -0
  647. package/skills/aria-k8s-deploy/agents/openai.yaml +3 -0
  648. package/skills/aria-ladduniframe/SKILL.md +60 -0
  649. package/skills/aria-ledger-fleet-execution/SKILL.md +126 -0
  650. package/skills/aria-live-ops/SKILL.md +54 -0
  651. package/skills/aria-mac-ssh-ops/SKILL.md +100 -0
  652. package/skills/aria-memory-index/SKILL.md +42 -0
  653. package/skills/aria-noor-cognitives/SKILL.md +120 -0
  654. package/skills/aria-ops/SKILL.md +60 -0
  655. package/skills/aria-ops/references/live-endpoints.md +59 -0
  656. package/skills/aria-quality-audit/SKILL.md +133 -0
  657. package/skills/aria-reasoning/SKILL.md +67 -0
  658. package/skills/aria-reasoning/references/core-principles.md +42 -0
  659. package/skills/aria-repo-doctrine/SKILL.md +57 -0
  660. package/skills/aria-soul-principles/SKILL.md +42 -0
  661. package/skills/aria-task-codex-executor/SKILL.md +86 -0
  662. package/skills/aristotle-engine/SKILL.md +42 -0
  663. package/skills/ci-cd-pipeline/SKILL.md +116 -0
  664. package/skills/code-review/SKILL.md +131 -0
  665. package/skills/cross-domain-24/SKILL.md +42 -0
  666. package/skills/database-design/SKILL.md +124 -0
  667. package/skills/deepsoul-emotional/SKILL.md +42 -0
  668. package/skills/deno-kv-raft-pubsub/SKILL.md +561 -0
  669. package/skills/deno-kv-raft-pubsub/reference/maelstrom-integration.md +393 -0
  670. package/skills/deno-kv-raft-pubsub/reference/pubsub-api.md +376 -0
  671. package/skills/deno-kv-raft-pubsub/reference/raft-spec.md +402 -0
  672. package/skills/deno-kv-raft-pubsub/reference/state-machine.md +182 -0
  673. package/skills/error-handling/SKILL.md +159 -0
  674. package/skills/firecrawl/SKILL.md +165 -0
  675. package/skills/firecrawl/rules/install.md +82 -0
  676. package/skills/firecrawl/rules/security.md +26 -0
  677. package/skills/firecrawl-agent/SKILL.md +86 -0
  678. package/skills/firecrawl-build-interact/SKILL.md +96 -0
  679. package/skills/firecrawl-build-onboarding/SKILL.md +131 -0
  680. package/skills/firecrawl-build-onboarding/references/auth-flow.md +39 -0
  681. package/skills/firecrawl-build-onboarding/references/project-setup.md +20 -0
  682. package/skills/firecrawl-build-onboarding/references/sdk-installation.md +17 -0
  683. package/skills/firecrawl-build-scrape/SKILL.md +97 -0
  684. package/skills/firecrawl-build-search/SKILL.md +97 -0
  685. package/skills/firecrawl-clone/SKILL.md +419 -0
  686. package/skills/firecrawl-crawl/SKILL.md +87 -0
  687. package/skills/firecrawl-download/SKILL.md +98 -0
  688. package/skills/firecrawl-interact/SKILL.md +112 -0
  689. package/skills/firecrawl-map/SKILL.md +79 -0
  690. package/skills/firecrawl-scrape/SKILL.md +97 -0
  691. package/skills/firecrawl-search/SKILL.md +88 -0
  692. package/skills/fitrah-guard/SKILL.md +78 -0
  693. package/skills/forge-quality-rules/SKILL.md +61 -0
  694. package/skills/ghazali-8lens/SKILL.md +56 -0
  695. package/skills/ijtihad-novel/SKILL.md +42 -0
  696. package/skills/ilham-intuition/SKILL.md +42 -0
  697. package/skills/imagegen/LICENSE.txt +201 -0
  698. package/skills/imagegen/SKILL.md +374 -0
  699. package/skills/imagegen/agents/openai.yaml +6 -0
  700. package/skills/imagegen/assets/imagegen-small.svg +5 -0
  701. package/skills/imagegen/assets/imagegen.png +0 -0
  702. package/skills/imagegen/references/cli.md +242 -0
  703. package/skills/imagegen/references/codex-network.md +33 -0
  704. package/skills/imagegen/references/image-api.md +90 -0
  705. package/skills/imagegen/references/prompting.md +118 -0
  706. package/skills/imagegen/references/sample-prompts.md +433 -0
  707. package/skills/imagegen/scripts/image_gen.py +995 -0
  708. package/skills/imagegen/scripts/remove_chroma_key.py +440 -0
  709. package/skills/istiqra-induction/SKILL.md +44 -0
  710. package/skills/ladunni-22/SKILL.md +53 -0
  711. package/skills/mizan/SKILL.md +90 -0
  712. package/skills/nadia/SKILL.md +56 -0
  713. package/skills/nadia-psi/SKILL.md +56 -0
  714. package/skills/never-guess/SKILL.md +75 -0
  715. package/skills/noor-recognition/SKILL.md +45 -0
  716. package/skills/observability/SKILL.md +133 -0
  717. package/skills/openai-docs/LICENSE.txt +201 -0
  718. package/skills/openai-docs/SKILL.md +100 -0
  719. package/skills/openai-docs/agents/openai.yaml +14 -0
  720. package/skills/openai-docs/assets/openai-small.svg +3 -0
  721. package/skills/openai-docs/assets/openai.png +0 -0
  722. package/skills/openai-docs/references/latest-model.md +37 -0
  723. package/skills/openai-docs/references/prompting-guide.md +244 -0
  724. package/skills/openai-docs/references/upgrade-guide.md +181 -0
  725. package/skills/openai-docs/scripts/resolve-latest-model-info.js +147 -0
  726. package/skills/pdf/LICENSE.txt +201 -0
  727. package/skills/pdf/SKILL.md +85 -0
  728. package/skills/pdf/agents/openai.yaml +5 -0
  729. package/skills/pdf/assets/pdf.png +0 -0
  730. package/skills/playwright/LICENSE.txt +201 -0
  731. package/skills/playwright/NOTICE.txt +14 -0
  732. package/skills/playwright/SKILL.md +165 -0
  733. package/skills/playwright/agents/openai.yaml +6 -0
  734. package/skills/playwright/assets/playwright-small.svg +3 -0
  735. package/skills/playwright/assets/playwright.png +0 -0
  736. package/skills/playwright/references/cli.md +116 -0
  737. package/skills/playwright/references/workflows.md +95 -0
  738. package/skills/playwright/scripts/playwright_cli.sh +25 -0
  739. package/skills/plugin-creator/SKILL.md +178 -0
  740. package/skills/plugin-creator/agents/openai.yaml +6 -0
  741. package/skills/plugin-creator/assets/plugin-creator-small.svg +3 -0
  742. package/skills/plugin-creator/assets/plugin-creator.png +0 -0
  743. package/skills/plugin-creator/references/plugin-json-spec.md +170 -0
  744. package/skills/plugin-creator/scripts/create_basic_plugin.py +301 -0
  745. package/skills/predictor/SKILL.md +43 -0
  746. package/skills/qiyas-analogy/SKILL.md +204 -0
  747. package/skills/refactoring/SKILL.md +137 -0
  748. package/skills/ruh-basis/SKILL.md +42 -0
  749. package/skills/security-review/SKILL.md +129 -0
  750. package/skills/skill-creator/SKILL.md +434 -0
  751. package/skills/skill-creator/agents/openai.yaml +5 -0
  752. package/skills/skill-creator/assets/skill-creator-small.svg +3 -0
  753. package/skills/skill-creator/assets/skill-creator.png +0 -0
  754. package/skills/skill-creator/license.txt +202 -0
  755. package/skills/skill-creator/references/openai_yaml.md +49 -0
  756. package/skills/skill-creator/scripts/generate_openai_yaml.py +226 -0
  757. package/skills/skill-creator/scripts/init_skill.py +400 -0
  758. package/skills/skill-creator/scripts/quick_validate.py +101 -0
  759. package/skills/skill-installer/LICENSE.txt +202 -0
  760. package/skills/skill-installer/SKILL.md +76 -0
  761. package/skills/skill-installer/agents/openai.yaml +5 -0
  762. package/skills/skill-installer/assets/skill-installer-small.svg +3 -0
  763. package/skills/skill-installer/assets/skill-installer.png +0 -0
  764. package/skills/skill-installer/scripts/github_utils.py +21 -0
  765. package/skills/skill-installer/scripts/install-skill-from-github.py +308 -0
  766. package/skills/skill-installer/scripts/list-skills.py +107 -0
  767. package/skills/skills-and-hooks-reference/SKILL.md +196 -0
  768. package/skills/soul-domains/SKILL.md +43 -0
  769. package/skills/tadabbur/SKILL.md +232 -0
  770. package/skills/tadabbur-ops/SKILL.md +42 -0
  771. package/skills/tafakkur/SKILL.md +104 -0
  772. package/skills/testing-strategy/SKILL.md +122 -0
  773. package/src/action-ledger-core.ts +1054 -0
  774. package/src/chat.ts +5 -6
  775. package/src/codebase-scanner.ts +2 -0
  776. package/src/connectors/claude-code.ts +149 -12
  777. package/src/connectors/codebase-awareness.ts +325 -25
  778. package/src/connectors/codex.ts +1273 -40
  779. package/src/connectors/cursor.ts +8 -0
  780. package/src/connectors/governed-adapter.ts +174 -0
  781. package/src/connectors/opencode.ts +18 -2
  782. package/src/connectors/repo-guard.ts +24 -12
  783. package/src/connectors/runtime.ts +99 -2
  784. package/src/connectors/shell.ts +125 -7
  785. package/src/cross-cli-hive-binding.ts +290 -0
  786. package/src/garden-control-plane.ts +24 -1
  787. package/src/governed-surface-runner.ts +1227 -0
  788. package/src/index.ts +104 -1
  789. package/src/task-runner.ts +3794 -0
  790. package/dist/aria-connector/src/install-hooks.d.ts +0 -18
  791. package/dist/aria-connector/src/install-hooks.d.ts.map +0 -1
  792. package/dist/aria-connector/src/install-hooks.js +0 -224
  793. package/dist/aria-connector/src/install-hooks.js.map +0 -1
  794. package/dist/aria-connector/src/onboarding-wizard.d.ts +0 -5
  795. package/dist/aria-connector/src/onboarding-wizard.d.ts.map +0 -1
  796. package/dist/aria-connector/src/onboarding-wizard.js +0 -188
  797. package/dist/aria-connector/src/onboarding-wizard.js.map +0 -1
  798. package/dist/cli-0.2.38.tgz +0 -0
  799. package/dist/install.sh +0 -13
  800. package/src/__tests__/anthropic-oauth.test.ts +0 -186
  801. package/src/__tests__/auth-commands.test.ts +0 -132
  802. package/src/__tests__/owner-login.test.ts +0 -311
@@ -7,6 +7,7 @@ import { connectShell } from './shell.js';
7
7
  import { installAriaCognitionSkills } from './cognitive-skills.js';
8
8
  import { syncDoctrineTriggerMap } from './doctrine-trigger-map.js';
9
9
  import { buildMustReadGuide, mustReadIntro } from './must-read.js';
10
+ import { requireGovernedConnectorMutation } from './governed-adapter.js';
10
11
  function packageSdkDir() {
11
12
  const here = path.dirname(fileURLToPath(import.meta.url));
12
13
  return path.resolve(here, '..', '..', '..', 'sdk');
@@ -14,11 +15,21 @@ function packageSdkDir() {
14
15
  function packageTaskProjectLedgerHelperPath() {
15
16
  const here = path.dirname(fileURLToPath(import.meta.url));
16
17
  const candidates = [
18
+ path.resolve(here, '..', '..', 'opencode-plugins', 'harness-context', 'task-project-ledger.mjs'),
17
19
  path.resolve(here, '..', '..', '..', '..', 'opencode-plugins', 'harness-context', 'task-project-ledger.mjs'),
18
20
  path.resolve(here, '..', '..', '..', 'assets', 'opencode-plugins', 'harness-context', 'task-project-ledger.mjs'),
19
21
  ];
20
22
  return candidates.find((candidate) => existsSync(candidate)) || candidates[0];
21
23
  }
24
+ function packageProjectBoundaryCognitionPath() {
25
+ const here = path.dirname(fileURLToPath(import.meta.url));
26
+ const candidates = [
27
+ path.resolve(here, '..', '..', 'hooks', 'lib', 'project-boundary-cognition.mjs'),
28
+ path.resolve(here, '..', '..', '..', '..', 'hooks', 'lib', 'project-boundary-cognition.mjs'),
29
+ path.resolve(here, '..', '..', '..', 'assets', 'hooks', 'lib', 'project-boundary-cognition.mjs'),
30
+ ];
31
+ return candidates.find((candidate) => existsSync(candidate)) || candidates[0];
32
+ }
22
33
  function installSdk(codexDir, logs) {
23
34
  const sdkSrc = packageSdkDir();
24
35
  if (!existsSync(sdkSrc)) {
@@ -74,7 +85,23 @@ function installNodePackage(codexDir, logs) {
74
85
  function tomlString(value) {
75
86
  return JSON.stringify(value);
76
87
  }
88
+ function canonicalCodexHookPath(relativePath) {
89
+ const here = path.dirname(fileURLToPath(import.meta.url));
90
+ const candidates = [
91
+ path.resolve(here, '..', '..', 'hooks', 'codex-native', relativePath),
92
+ path.resolve(here, '..', '..', '..', '..', 'hooks', 'codex-native', relativePath),
93
+ ];
94
+ return candidates.find((candidate) => existsSync(candidate)) || candidates[0];
95
+ }
96
+ function readCanonicalCodexHook(relativePath) {
97
+ const hookPath = canonicalCodexHookPath(relativePath);
98
+ if (!existsSync(hookPath)) {
99
+ throw new Error(`Canonical Codex hook asset missing: ${hookPath}`);
100
+ }
101
+ return readFileSync(hookPath, 'utf8');
102
+ }
77
103
  function buildCodexHookRuntimeClient() {
104
+ return readCanonicalCodexHook('lib/runtime-client.mjs');
78
105
  return `import { readFileSync, existsSync, mkdirSync, writeFileSync, unlinkSync } from 'node:fs';
79
106
  import { spawnSync } from 'node:child_process';
80
107
  import { createHash, randomUUID } from 'node:crypto';
@@ -146,6 +173,15 @@ export function inferSessionId(event) {
146
173
  return \`codex:\${threadId}:\${turnId}\`;
147
174
  }
148
175
 
176
+ export function inferHiveThreadId(event = {}, sessionId = '') {
177
+ const threadId =
178
+ extractFirst(event, ['thread_id', 'threadId', 'conversation_id', 'conversationId']) ||
179
+ extractFirst(event?.metadata, ['thread_id', 'threadId', 'conversation_id', 'conversationId']);
180
+ if (threadId) return \`codex:\${threadId}\`;
181
+ const raw = sessionId || 'codex';
182
+ return \`codex:\${createHash('sha256').update(raw).digest('hex').slice(0, 16)}\`;
183
+ }
184
+
149
185
  export function ensureTraceId(state = {}) {
150
186
  return typeof state.traceId === 'string' && state.traceId ? state.traceId : \`trace_\${randomUUID()}\`;
151
187
  }
@@ -253,7 +289,41 @@ export async function runtimePost(route, body = {}) {
253
289
  return response.json();
254
290
  }
255
291
 
292
+ export async function runtimeGet(route) {
293
+ const token = readToken();
294
+ const headers = {};
295
+ if (token) headers.Authorization = \`Bearer \${token}\`;
296
+ const response = await fetch(\`\${DEFAULT_RUNTIME_URL}\${route}\`, {
297
+ method: 'GET',
298
+ headers,
299
+ });
300
+ if (!response.ok) {
301
+ const detail = await response.text().catch(() => response.statusText);
302
+ throw new Error(\`runtime \${route} failed (\${response.status}): \${detail}\`);
303
+ }
304
+ return response.json();
305
+ }
306
+
307
+ export function remoteCoachEnabled(env = process.env) {
308
+ return /^(?:1|true|yes|on)$/i.test(String(
309
+ env.ARIA_REMOTE_COACH_ENABLED ||
310
+ env.ARIA_RUNTIME_COACH_ENABLED ||
311
+ env.ARIA_COACH_REMOTE_ENABLED ||
312
+ ''
313
+ ));
314
+ }
315
+
256
316
  export async function recordCoachPhase(phase, body = {}) {
317
+ if (!remoteCoachEnabled()) {
318
+ return {
319
+ ok: true,
320
+ skipped: true,
321
+ permitted: true,
322
+ decision: 'allow',
323
+ phase,
324
+ reasons: ['remote_coach_disabled'],
325
+ };
326
+ }
257
327
  try {
258
328
  return await runtimePost('/coach/phase', {
259
329
  phase,
@@ -271,17 +341,82 @@ export async function recordCoachPhase(phase, body = {}) {
271
341
  }
272
342
  }
273
343
 
344
+ export async function ensurePreTurnMizanReceipt({ sessionId, traceId, state = {}, event = {}, action = '', target = '' } = {}) {
345
+ if (state?.preReceiptId) {
346
+ return { ok: true, state, healed: false };
347
+ }
348
+ const message = String(state?.userText || target || 'codex tool request').slice(0, 4000);
349
+ const packet = await getHarnessClient().getHarnessPacket({
350
+ sessionId,
351
+ platform: 'codex',
352
+ message,
353
+ });
354
+ const packetRef = makeEvidenceRef('harness_packet', packet, { sessionId, platform: 'codex', source: 'pre_tool_receipt_heal' });
355
+ const result = await runtimePost('/mizan/pre', {
356
+ sessionId,
357
+ packet,
358
+ packetRequest: {
359
+ sessionId,
360
+ platform: 'codex',
361
+ message,
362
+ stage: 'codex-pre-tool-receipt-heal',
363
+ actor: 'codex-hook',
364
+ system: 'codex-hook',
365
+ },
366
+ context: {
367
+ sessionId,
368
+ traceId,
369
+ surface: 'codex-hooks',
370
+ platform: 'codex',
371
+ userText: state?.userText || '',
372
+ action,
373
+ target,
374
+ event,
375
+ evidenceRefs: [packetRef],
376
+ },
377
+ });
378
+ const nextState = saveTurnState(sessionId, {
379
+ ...state,
380
+ traceId,
381
+ preReceiptId: result?.receipt?.receiptId || null,
382
+ packetTimestamp: packet?.timestamp || null,
383
+ packetRef,
384
+ preReceiptHealed: true,
385
+ preReceiptHealedAt: new Date().toISOString(),
386
+ lastEvent: 'PreToolUse',
387
+ });
388
+ return {
389
+ ok: Boolean(result?.receipt?.receiptId),
390
+ state: nextState,
391
+ healed: true,
392
+ receipt: result?.receipt || null,
393
+ };
394
+ }
395
+
274
396
  export function classifyAction(event) {
275
397
  const toolName = String(event?.tool_name || event?.toolName || '').trim();
276
- const toolCommand = String(
277
- event?.tool_input?.command ??
278
- event?.toolInput?.command ??
279
- ''
280
- ).trim();
281
- const haystack = \`\${toolName}\\n\${toolCommand}\\n\${JSON.stringify(event)}\`;
282
- if (/deploy|kubectl|docker\\s+push/i.test(haystack)) return 'deploy';
283
- if (/\\brm\\b|delete|unlink|drop\\s+table/i.test(haystack)) return 'delete';
284
- if (/build|test|tsc|jest|vitest|npm run|pnpm|yarn/i.test(haystack)) return 'build';
398
+ const toolInput = event?.tool_input || event?.toolInput || {};
399
+ const toolCommand = String(toolInput?.command ?? '').trim();
400
+ const lowerTool = toolName.toLowerCase();
401
+
402
+ if (/^(?:read|grep|glob|list_mcp_resources|list_mcp_resource_templates)$/i.test(toolName)) return 'read';
403
+ if (lowerTool.includes('apply_patch')) {
404
+ return /^\\*\\*\\* Begin Patch[\\s\\S]*^\\*\\*\\* Delete File:/m.test(toolCommand) ? 'delete' : 'write';
405
+ }
406
+ if (/^(?:edit|write|notebookedit)$/i.test(toolName) || toolInput?.file_path || toolInput?.notebook_path) {
407
+ return 'write';
408
+ }
409
+ if (/delete|destroy|drop|wipe|purge/i.test(toolName)) return 'delete';
410
+ if (/deploy|rollout|release/i.test(toolName)) return 'deploy';
411
+ if (/build|compile|test/i.test(toolName)) return 'build';
412
+ if (!toolCommand) return 'write';
413
+
414
+ if (/^(?:ls|cat|head|tail|grep|rg|sed\\s+-n|wc|find|tree|stat|file|ps|pgrep|du|df|env|printenv|date|pwd|which|type|whoami|id)\\b/.test(toolCommand)) return 'read';
415
+ if (/^git\\s+(?:status|log|diff|show|branch|remote|rev-parse|ls-tree|ls-files|stash\\s+list)\\b/.test(toolCommand)) return 'read';
416
+ if (/^(?:kubectl\\s+(?:get|describe|logs|top|version|api-resources)\\b|docker\\s+ps\\b)/.test(toolCommand)) return 'read';
417
+ if (/\\b(?:scripts\\/deploy-|kubectl\\s+(?:apply|set\\s+image|delete|patch|rollout|scale|drain|cordon)\\b|docker\\s+push\\b|helm\\s+(?:upgrade|install|rollback)\\b)/i.test(toolCommand)) return 'deploy';
418
+ if (/^(?:rm|rmdir|unlink|truncate)\\b|drop\\s+table|git\\s+(?:reset|clean)\\b/i.test(toolCommand)) return 'delete';
419
+ if (/\\b(?:npm|pnpm|yarn)\\s+(?:run\\s+)?(?:build|test|check|lint|typecheck)\\b|\\b(?:tsc|jest|vitest|eslint)\\b/i.test(toolCommand)) return 'build';
285
420
  return 'write';
286
421
  }
287
422
 
@@ -292,6 +427,104 @@ export function summarizeTarget(event) {
292
427
  }).slice(0, 4000);
293
428
  }
294
429
 
430
+ function normalizeTouchedPath(value) {
431
+ const raw = String(value || '').trim();
432
+ if (!raw) return '';
433
+ return raw.replace(/\\\\/g, '/').replace(/\\/+/, '/');
434
+ }
435
+
436
+ function pushTouchedFile(files, value, intent = 'touch') {
437
+ const pathValue = normalizeTouchedPath(value);
438
+ if (!pathValue) return;
439
+ if (!files.some((file) => file.path === pathValue && file.intent === intent)) {
440
+ files.push({ path: pathValue, intent });
441
+ }
442
+ }
443
+
444
+ export function extractToolTouchedFiles(event, action = '') {
445
+ const files = [];
446
+ const toolName = String(event?.tool_name || event?.toolName || '').trim();
447
+ const toolInput = event?.tool_input || event?.toolInput || {};
448
+ const intent = action || classifyAction(event);
449
+ pushTouchedFile(files, toolInput?.file_path, intent);
450
+ pushTouchedFile(files, toolInput?.filePath, intent);
451
+ pushTouchedFile(files, toolInput?.path, intent);
452
+ pushTouchedFile(files, toolInput?.notebook_path, intent);
453
+ pushTouchedFile(files, toolInput?.notebookPath, intent);
454
+ if (Array.isArray(toolInput?.files)) toolInput.files.forEach((file) => pushTouchedFile(files, file, intent));
455
+ if (Array.isArray(toolInput?.targetFiles)) toolInput.targetFiles.forEach((file) => pushTouchedFile(files, file, intent));
456
+ const command = String(toolInput?.command || '');
457
+ if (/apply_patch/i.test(toolName) || /^\\*\\*\\* Begin Patch/m.test(command)) {
458
+ for (const match of command.matchAll(/^\\*\\*\\* (?:Update|Add|Delete) File: (.+)$/gm)) {
459
+ pushTouchedFile(files, match[1], intent);
460
+ }
461
+ }
462
+ return files.slice(0, 200);
463
+ }
464
+
465
+ export async function recordHiveFileTouch({ sessionId, threadId = null, event = 'tool_request', files = [], source = 'codex-hook', body = {} } = {}) {
466
+ if (!sessionId || !Array.isArray(files) || files.length === 0) {
467
+ return { ok: true, skipped: true, reason: 'no files to record' };
468
+ }
469
+ try {
470
+ return await runtimePost('/api/hive/file-touch', {
471
+ session_id: sessionId,
472
+ thread_id: threadId,
473
+ event,
474
+ files,
475
+ source,
476
+ body: {
477
+ cwd: process.cwd(),
478
+ ...body,
479
+ },
480
+ });
481
+ } catch (error) {
482
+ return {
483
+ ok: false,
484
+ skipped: false,
485
+ error: error instanceof Error ? error.message : String(error),
486
+ };
487
+ }
488
+ }
489
+
490
+ export async function recordHiveSessionLifecycle({
491
+ sessionId,
492
+ threadId = null,
493
+ event = 'heartbeat',
494
+ status = null,
495
+ intentSummary = null,
496
+ sourceArtifact = null,
497
+ fileClaims = [],
498
+ doNotTouch = [],
499
+ source = 'codex-hook',
500
+ body = {},
501
+ } = {}) {
502
+ if (!sessionId) return { ok: true, skipped: true, reason: 'no session_id to record' };
503
+ try {
504
+ return await runtimePost('/api/hive/session-lifecycle', {
505
+ session_id: sessionId,
506
+ thread_id: threadId,
507
+ event,
508
+ status: status || event,
509
+ intent_summary: intentSummary || \`\${source} \${event}\`,
510
+ source_artifact: sourceArtifact,
511
+ file_claims: Array.isArray(fileClaims) ? fileClaims : [],
512
+ do_not_touch: Array.isArray(doNotTouch) ? doNotTouch : [],
513
+ body: {
514
+ cwd: process.cwd(),
515
+ source,
516
+ ...body,
517
+ },
518
+ });
519
+ } catch (error) {
520
+ return {
521
+ ok: false,
522
+ skipped: false,
523
+ error: error instanceof Error ? error.message : String(error),
524
+ };
525
+ }
526
+ }
527
+
295
528
  export function extractUserText(event) {
296
529
  return extractText(
297
530
  event?.input ??
@@ -314,11 +547,495 @@ export function extractAssistantText(event) {
314
547
  );
315
548
  }
316
549
 
550
+ export const ARIA_ALWAYS_ON_SKILLS = Object.freeze([
551
+ 'aria-axioms-first-principles',
552
+ 'aria-cognition-autofire',
553
+ 'aria-first-class-operating-contract',
554
+ 'aria-cognition-batch',
555
+ 'aria-forge-guardrails',
556
+ 'aria-harness-no-stripping',
557
+ 'aria-harness-output-discipline',
558
+ 'aria-quality-audit',
559
+ 'aria-readable-output',
560
+ 'aria-senior-code-audit',
561
+ 'ghazali-8lens',
562
+ 'mizan',
563
+ 'never-guess',
564
+ 'predictor',
565
+ 'qiyas-analogy',
566
+ 'tadabbur',
567
+ 'aria-repo-doctrine',
568
+ 'aria-senior-code-cookbook',
569
+ 'aria-http-harness-client',
570
+ 'aria-task-codex-executor',
571
+ 'aria-decision-mizan',
572
+ 'tadabbur-ops',
573
+ 'aria-repo-audit',
574
+ 'aria-backend-architect',
575
+ 'aria-live-ops',
576
+ 'aria-memory-index',
577
+ 'aria-ops',
578
+ ]);
579
+
580
+ export const ARIA_QIYAS_15_PERSPECTIVES = Object.freeze([
581
+ 'Owner-Hamza-tomorrow',
582
+ 'operator-client',
583
+ 'investor',
584
+ 'LLM-consumer',
585
+ 'human-end-user',
586
+ 'skeptic',
587
+ 'compliance',
588
+ 'engineering-quality',
589
+ 'cognitive-load',
590
+ 'scale',
591
+ 'Islamic-scholar',
592
+ 'clinical-scholar',
593
+ 'red-team-attacker',
594
+ '1-week-future-self',
595
+ '1-year-future-self',
596
+ ]);
597
+
598
+ export const ARIA_TADABBUR_12_STAGES = Object.freeze([
599
+ 'EMBED',
600
+ 'EXCAVATE',
601
+ 'ROOT TRACE',
602
+ 'MULTI-LENS',
603
+ 'PATTERN',
604
+ 'CONSEQUENCE',
605
+ 'DWELLING',
606
+ 'COLLAPSE',
607
+ 'PRINCIPLE',
608
+ 'INVERSION',
609
+ 'PERSONAL',
610
+ 'VOICE',
611
+ ]);
612
+
613
+ export const ARIA_QA_AUTOFIRE_CYCLE = Object.freeze([
614
+ 'qiyas_15_pass',
615
+ 'tadabbur_full_canonical_12_stage',
616
+ 'correct',
617
+ 'enhance',
618
+ 'harden',
619
+ 'verify',
620
+ ]);
621
+
622
+ export const ARIA_QA_METHOD_CONTRACT = Object.freeze({
623
+ qiyas: 'Qiyas means full Qiyas-15 only. Mini Qiyas is not acceptable for architecture, runtime, code, QA, hook, SDK, worker, or harness work.',
624
+ tadabbur: 'Tadabbur means the full canonical 12-stage Tadabbur path for architecture, runtime, code, QA, hook, SDK, worker, or harness work.',
625
+ });
626
+
627
+ export const UNIVERSAL_CONNECTOR_ACTUAL_GOAL =
628
+ 'Wire extracted books, doctrines, skills, runtimes, primitives, mappings, CLIs, connectors, hooks, sidecars, and agent surfaces into the operating system so agent output improves automatically.';
629
+
630
+ export const UNIVERSAL_CONNECTOR_HIGH_IMPACT_SKILLS = Object.freeze([
631
+ 'ghazali-tauba-kca-repair-contract',
632
+ 'ghazali-rights-before-balance-settlement',
633
+ 'ghazali-delay-is-risk-auditor',
634
+ 'ghazali-knowledge-condition-action-patience-bridge',
635
+ 'ghazali-cause-means-tawakkal-mizan',
636
+ 'ghazali-ultimate-cause-chain-tracer',
637
+ 'ghazali-necessity-vs-attachment-mizan',
638
+ 'ghazali-attachment-not-possession-auditor',
639
+ 'ghazali-acquaintance-before-love-diagnoser',
640
+ 'ghazali-love-cup-attachment-displacement-auditor',
641
+ 'ghazali-knowledge-will-strength-action-chain',
642
+ 'ghazali-means-do-not-cleanse-end-gate',
643
+ 'ghazali-six-register-truthfulness-audit',
644
+ 'ghazali-breath-capital-day-contract',
645
+ 'ghazali-two-premise-action-transduction',
646
+ 'ghazali-four-object-thought-ledger',
647
+ 'ghazali-one-vice-one-replacement-register',
648
+ 'ghazali-bounded-sign-observation',
649
+ 'ghazali-three-question-intention-gate',
650
+ 'ghazali-principal-profit-loss-muhasabah',
651
+ 'ghazali-self-rebuke-false-narrative-interrogator',
652
+ 'ghazali-death-remembrance-deception-breaker',
653
+ 'ghazali-condition-specific-hope-fear-medicine',
654
+ 'ghazali-fear-action-not-paralysis-gate',
655
+ 'ghazali-hope-requires-cultivation-auditor',
656
+ ]);
657
+
658
+ export const UNIVERSAL_CONNECTOR_REQUIRED_RUNTIMES = Object.freeze([
659
+ 'tafakkur-transduction-runtime',
660
+ 'six-stage-self-accounting-runtime',
661
+ 'mortality-accounting-runtime',
662
+ 'fear-hope-condition-regulation-runtime',
663
+ 'intention-to-action-integrity-runtime',
664
+ 'love-fruit-contentment-runtime',
665
+ 'patience-gratitude-purpose-mizan-runtime',
666
+ 'tauba-rights-repair-runtime',
667
+ 'tawakkal-cause-mizan-runtime',
668
+ 'zuhd-necessity-attachment-runtime',
669
+ ]);
670
+
671
+ function includesAny(text = '', terms = []) {
672
+ const source = String(text || '').toLowerCase();
673
+ return terms.some((term) => source.includes(String(term).toLowerCase()));
674
+ }
675
+
676
+ function countIncluded(text = '', terms = []) {
677
+ const source = String(text || '').toLowerCase();
678
+ return terms.reduce((count, term) => count + (source.includes(String(term).toLowerCase()) ? 1 : 0), 0);
679
+ }
680
+
681
+ function continuationRequested(text = '') {
682
+ return includesAny(text, [
683
+ 'continue',
684
+ 'next phase',
685
+ 'next step',
686
+ 'next best',
687
+ 'fire',
688
+ 'skills',
689
+ 'production',
690
+ 'ready',
691
+ 'what is left',
692
+ "what's left",
693
+ 'how far',
694
+ 'qa',
695
+ 'ledger',
696
+ 'autofire',
697
+ 'wire',
698
+ ]);
699
+ }
700
+
701
+ function actualGoalHits(text = '') {
702
+ return countIncluded(text, [
703
+ 'wire extracted',
704
+ 'books',
705
+ 'doctrines',
706
+ 'skills',
707
+ 'runtimes',
708
+ 'primitives',
709
+ 'mappings',
710
+ 'connectors',
711
+ 'hooks',
712
+ 'sidecars',
713
+ 'agent surfaces',
714
+ 'output improves automatically',
715
+ 'corpus',
716
+ 'forced-selection',
717
+ 'actual goal',
718
+ ]);
719
+ }
720
+
721
+ function supportMechanismHits(text = '') {
722
+ return countIncluded(text, ['receipt', 'gate', 'ledger', 'canary', 'drift check', 'phase ']);
723
+ }
724
+
725
+ export function buildUniversalConnectorGoalContract({ userText = '', phase = 'turn' } = {}) {
726
+ return {
727
+ id: 'universal-connector-corpus-runtime-goal-contract',
728
+ phase,
729
+ actualGoal: UNIVERSAL_CONNECTOR_ACTUAL_GOAL,
730
+ supportRule: 'Receipts, gates, ledgers, and canaries are support evidence only; they pass when they prove corpus-backed behavior changed action, QA, correction, verification, or learning.',
731
+ hardStopOnlyFor: ['secrets', 'destructive actions', 'deploy/publication boundary', 'owner-contradicted action', 'proven false completion risk'],
732
+ qaPacket: {
733
+ qiyas: 'Qiyas-15 over owner trust, operator value, engineering quality, cognitive load, scale, compliance, red-team, one-week future, and one-year future.',
734
+ tadabbur: 'Full consequence trace from current action to production behavior; reject motion that only improves receipts.',
735
+ mizan: 'Balance evidence, owner impact, throughput, and false-completion risk; repair low-risk misses before hard-blocking.',
736
+ ghazali8: 'Nur observed substrate, Mizan proportion, Hikma doctrine, Tafakkur structure, Tadabbur consequence, Ilham sensed drift, Wahi owner/corpus anchor, Firasah owner need.',
737
+ fitrah: 'Truth over deception, no harm, sacred trust, power obligates service, reflection before action.',
738
+ },
739
+ selectedSkills: [...UNIVERSAL_CONNECTOR_HIGH_IMPACT_SKILLS],
740
+ selectedRuntimes: [...UNIVERSAL_CONNECTOR_REQUIRED_RUNTIMES],
741
+ nextHighestImpactAction: 'Promote the sandbox corpus registry consumer into the real connector/hook forced-selection path, then run behavioral QA on actual Claude/Codex/OpenCode continuation prompts.',
742
+ continuation: continuationRequested(userText),
743
+ };
744
+ }
745
+
746
+ export function evaluateGoalContractOutput(text = '', { userText = '', goalContract = null } = {}) {
747
+ const source = String(text || '');
748
+ const contract = goalContract || buildUniversalConnectorGoalContract({ userText, phase: 'stop' });
749
+ const continuation = contract.continuation || continuationRequested(userText) || actualGoalHits(userText) > 0;
750
+ const blockers = [];
751
+ const warnings = [];
752
+ const repairs = [];
753
+ if (!continuation) return { pass: true, hardBlock: false, score: 1, blockers, warnings, repairs, contract };
754
+ const goalHits = actualGoalHits(source);
755
+ const supportHits = supportMechanismHits(source);
756
+ const hasEvidence = includesAny(source, ['verified', 'observed', 'evidence', 'smoke', 'test', 'audit', 'not production-ready', 'integration-ready', 'blocked', 'pending', 'unverified']);
757
+ const hasNextAction = includesAny(source, ['next highest', 'next best', 'next action', 'next step', 'continue by', 'promote the sandbox corpus', 'wire the registry', 'forced-selection']);
758
+ const hasQa = includesAny(source, ['qa', 'qiyas', 'tadabbur', 'mizan', 'ghazali', 'correct', 'enhance', 'harden', 'repair']);
759
+ if (goalHits === 0) {
760
+ warnings.push('goal-contract: output does not bind the turn to corpus-to-runtime wiring or automatic output improvement');
761
+ repairs.push('Name the actual goal or make the current action directly advance corpus registry, runtime, hook, connector, surface, or forced-selection wiring.');
762
+ }
763
+ if (!hasNextAction) {
764
+ warnings.push('goal-contract: continuation output does not name the next highest-impact action');
765
+ repairs.push('Add a concrete next action that advances real wiring or behavioral QA.');
766
+ }
767
+ if (!hasQa) {
768
+ warnings.push('goal-contract: QA/correction loop is missing from the visible state');
769
+ repairs.push('Add expected-vs-observed QA with correction, enhancement, hardening, or an explicit pass boundary.');
770
+ }
771
+ if (!hasEvidence) {
772
+ warnings.push('goal-contract: evidence boundary is missing');
773
+ repairs.push('State verified, blocked, pending, unverified, or the exact evidence class used before making status claims.');
774
+ }
775
+ if (supportHits >= 3 && supportHits > goalHits + 1) {
776
+ warnings.push('goal-contract: support mechanisms dominate the answer over the actual product goal');
777
+ repairs.push('Reframe receipts, gates, ledgers, and canaries as evidence only, then return to corpus-to-runtime wiring and output improvement.');
778
+ }
779
+ if (/\\bwhat would you like me to do next\\b|\\bhow would you like me to proceed\\b/i.test(source)) {
780
+ blockers.push('goal-contract: output asks the owner to choose the obvious continuation instead of naming the next highest-impact step');
781
+ }
782
+ if (/\\b(?:production ready|ready for production|release ready|promotion pass|complete|completed|done|verified|fixed)\\b/i.test(source) && !/\\b(?:not production-ready|not production ready|integration-ready|pending|blocked|unverified|bounded|evidence)\\b/i.test(source)) {
783
+ blockers.push('goal-contract: false completion or readiness claim without bounded evidence');
784
+ }
785
+ if (/\\b(?:\\/consult|consult api|consult response)\\b/i.test(source) && /\\b(?:quality source|core quality|dependency|required)\\b/i.test(source)) {
786
+ blockers.push('goal-contract: consult API is being treated as the core quality engine');
787
+ }
788
+ const score = [goalHits > 0, hasNextAction, hasQa, hasEvidence, !(supportHits >= 3 && supportHits > goalHits + 1), blockers.length === 0].filter(Boolean).length / 6;
789
+ return {
790
+ pass: blockers.length === 0 && score >= 0.67,
791
+ hardBlock: blockers.length > 0,
792
+ score,
793
+ blockers: [...new Set(blockers)],
794
+ warnings: [...new Set(warnings)],
795
+ repairs: [...new Set(repairs)],
796
+ nextHighestImpactAction: contract.nextHighestImpactAction,
797
+ selectedSkills: contract.selectedSkills,
798
+ selectedRuntimes: contract.selectedRuntimes,
799
+ contract,
800
+ };
801
+ }
802
+
803
+ export function inferRequiredAriaSkills(text = '') {
804
+ const raw = String(text || '');
805
+ const lower = raw.toLowerCase();
806
+ const required = new Set(ARIA_ALWAYS_ON_SKILLS);
807
+ const add = (skill) => required.add(skill);
808
+ const mentions = (skill) => new RegExp('(?:^|[^a-z0-9_-])\\\\$?' + skill.replace(/[.*+?^\${}()|[\\]\\\\]/g, '\\\\$&') + '(?:$|[^a-z0-9_-])', 'i').test(raw);
809
+
810
+ for (const skill of [
811
+ 'aria-axioms-first-principles',
812
+ 'aria-cognition-autofire',
813
+ 'aria-first-class-operating-contract',
814
+ 'aria-cognition-batch',
815
+ 'aria-readable-output',
816
+ 'tadabbur',
817
+ 'qiyas-analogy',
818
+ ]) {
819
+ if (mentions(skill)) add(skill);
820
+ }
821
+
822
+ if (/\\b(?:aria|harness|garden|claude code|codex|opencode|skill|skills|hook|hooks|runtime|connector|sdk|gate|quality|qa|audit|completion claim)\\b/i.test(raw)) {
823
+ add('aria-cognition-autofire');
824
+ add('aria-readable-output');
825
+ }
826
+ if (/\\b(?:first class|first-class|world class|world-class|revolutionary upgrade|full upgrade|substrate os|not just a watcher|serious upgrade)\\b/i.test(raw)) {
827
+ add('aria-first-class-operating-contract');
828
+ }
829
+ if (/\\b(?:axiom|axioms|first principles?|fitrah|source trust|evidence threshold)\\b/i.test(raw)) {
830
+ add('aria-axioms-first-principles');
831
+ }
832
+ if (/\\b(?:full cognition|batch cognition|28\\+15|mizan plus tadabbur|rich cognitives|cognitive batch)\\b/i.test(raw)) {
833
+ add('aria-cognition-batch');
834
+ }
835
+ if (/\\b(?:tadabbur|taddabur|12-stage|heart filter|consequence reasoning|cookbook|deep reflection)\\b/i.test(lower)) {
836
+ add('tadabbur');
837
+ }
838
+ if (/\\b(?:qiyas|analogy|analogical|qiyas-15|structural analogy|asl|hukm|illah|furuq)\\b/i.test(lower)) {
839
+ add('qiyas-analogy');
840
+ }
841
+ if (/\\b(?:fire named skills|fire skills|use aria skills|named skills)\\b/i.test(lower)) {
842
+ add('aria-axioms-first-principles');
843
+ add('aria-cognition-autofire');
844
+ add('aria-cognition-batch');
845
+ add('aria-readable-output');
846
+ add('tadabbur');
847
+ add('qiyas-analogy');
848
+ }
849
+ if (/\\b(?:readable output|readability|owner surface|owner-facing|scannable|stop gate|closeout|final answer)\\b/i.test(lower)) {
850
+ add('aria-readable-output');
851
+ }
852
+ if (/\\b(?:backend|api|server|database|auth|queue|worker|service)\\b/i.test(lower)) {
853
+ add('aria-backend-architect');
854
+ }
855
+ if (/\\b(?:frontend|ui|ux|component|page|screen|css|layout)\\b/i.test(lower)) {
856
+ add('aria-frontend-architect');
857
+ }
858
+ if (/\\b(?:fullstack|end-to-end|e2e|web app|application)\\b/i.test(lower)) {
859
+ add('aria-fullstack-orchestrator');
860
+ }
861
+ if (/\\b(?:deploy|k8s|kubernetes|kubectl|cluster|infra|infrastructure|rollout)\\b/i.test(lower)) {
862
+ add('aria-live-ops');
863
+ add('aria-k8s-deploy');
864
+ }
865
+ if (/\\b(?:repo audit|repository audit|codebase audit|refactor|review)\\b/i.test(lower)) {
866
+ add('aria-repo-audit');
867
+ }
868
+ if (/\\b(?:research|diligence|sources|market|competitor|public sources)\\b/i.test(lower)) {
869
+ add('aria-research-orchestrator');
870
+ }
871
+ if (/\\b(?:business|pricing|gtm|go-to-market|revenue|retention|launch)\\b/i.test(lower)) {
872
+ add('aria-business-frame');
873
+ add('aria-gtm-architect');
874
+ }
875
+ if (required.size > 0 && /\\b(?:aria|harness|codex|claude|hook|gate|runtime|skill|cognition|coach)\\b/i.test(raw)) {
876
+ add('aria-readable-output');
877
+ }
878
+
879
+ return [...required].sort();
880
+ }
881
+
882
+ export function summarizeForcedSkillLoad(promptBuild = null) {
883
+ if (!promptBuild || typeof promptBuild !== 'object') return null;
884
+ const loadedCookbooks = Array.isArray(promptBuild.loadedCookbooks) ? promptBuild.loadedCookbooks : [];
885
+ const missingCookbooks = Array.isArray(promptBuild.missingCookbooks) ? promptBuild.missingCookbooks : [];
886
+ const receipt = promptBuild.skillExecutionReceipt && typeof promptBuild.skillExecutionReceipt === 'object'
887
+ ? promptBuild.skillExecutionReceipt
888
+ : null;
889
+ const substrateKernelExecution = receipt?.substrateKernelExecution && typeof receipt.substrateKernelExecution === 'object'
890
+ ? receipt.substrateKernelExecution
891
+ : null;
892
+ const executedSkillIds = Array.isArray(receipt?.executedSkillIds)
893
+ ? receipt.executedSkillIds
894
+ : Array.isArray(substrateKernelExecution?.executedSkillIds)
895
+ ? substrateKernelExecution.executedSkillIds
896
+ : [];
897
+ const executedOperatorIds = Array.isArray(receipt?.executedOperatorIds)
898
+ ? receipt.executedOperatorIds
899
+ : Array.isArray(substrateKernelExecution?.executedOperatorIds)
900
+ ? substrateKernelExecution.executedOperatorIds
901
+ : [];
902
+ return {
903
+ ok: promptBuild.ok === true,
904
+ requiredSkillIds: Array.isArray(promptBuild.requiredSkillIds) ? promptBuild.requiredSkillIds : [],
905
+ loadedSkillIds: Array.isArray(promptBuild.loadedSkillIds) ? promptBuild.loadedSkillIds : [],
906
+ missingSkillIds: Array.isArray(promptBuild.missingSkillIds) ? promptBuild.missingSkillIds : [],
907
+ loadedSkillHashes: Array.isArray(promptBuild.loadedSkillHashes) ? promptBuild.loadedSkillHashes : [],
908
+ loadedCookbooks: loadedCookbooks.map((entry) => ({
909
+ skillId: entry.skillId || null,
910
+ requestedBy: entry.requestedBy || null,
911
+ cookbookName: entry.cookbookName || null,
912
+ path: entry.path || null,
913
+ hash: entry.hash || null,
914
+ chars: entry.chars || null,
915
+ })),
916
+ missingCookbooks: missingCookbooks.map((entry) => ({
917
+ skillId: entry.skillId || null,
918
+ requestedBy: entry.requestedBy || null,
919
+ cookbookName: entry.cookbookName || null,
920
+ path: entry.path || null,
921
+ })),
922
+ skillExecutionMode: typeof promptBuild.skillExecutionMode === 'string' ? promptBuild.skillExecutionMode : null,
923
+ skillExecutionReceipt: receipt
924
+ ? {
925
+ ok: receipt.ok === true,
926
+ mode: receipt.mode || null,
927
+ firedSkillIds: executedSkillIds.length
928
+ ? executedSkillIds
929
+ : Array.isArray(receipt.firedSkillIds) ? receipt.firedSkillIds : [],
930
+ executedSkillIds,
931
+ executedOperatorCount: executedOperatorIds.length,
932
+ substrateKernelExecution: substrateKernelExecution
933
+ ? {
934
+ ok: substrateKernelExecution.ok === true,
935
+ mode: substrateKernelExecution.mode || null,
936
+ executedOperatorIdsHash: substrateKernelExecution.executedOperatorIdsHash || null,
937
+ executionHash: substrateKernelExecution.executionHash || null,
938
+ }
939
+ : null,
940
+ receiptHash: receipt.receiptHash || null,
941
+ }
942
+ : null,
943
+ promptSha256: promptBuild.prompt ? createHash('sha256').update(String(promptBuild.prompt)).digest('hex') : null,
944
+ promptChars: promptBuild.prompt ? String(promptBuild.prompt).length : 0,
945
+ };
946
+ }
947
+
948
+ export function forcedSkillLoadGaps(state = {}) {
949
+ const summary = state?.forcedSkillLoad || null;
950
+ const required = Array.isArray(state?.requiredSkills) ? state.requiredSkills : [];
951
+ if (required.length === 0) return [];
952
+ if (!summary) return ['forced runtime skill/cookbook context was not built'];
953
+ const gaps = [];
954
+ if (Array.isArray(summary.missingSkillIds) && summary.missingSkillIds.length > 0) {
955
+ gaps.push('missing skill ids: ' + summary.missingSkillIds.join(', '));
956
+ }
957
+ if (Array.isArray(summary.missingCookbooks) && summary.missingCookbooks.length > 0) {
958
+ gaps.push('missing cookbooks: ' + summary.missingCookbooks.map((entry) => entry.path || entry.cookbookName).join(', '));
959
+ }
960
+ if (summary.skillExecutionMode === 'mechanical-receipt') {
961
+ const receipt = summary.skillExecutionReceipt || {};
962
+ const fired = Array.isArray(receipt.executedSkillIds) && receipt.executedSkillIds.length
963
+ ? receipt.executedSkillIds
964
+ : Array.isArray(receipt.firedSkillIds) ? receipt.firedSkillIds : [];
965
+ const missingFired = required.filter((skill) => !fired.includes(skill));
966
+ if (receipt.ok !== true) gaps.push('mechanical skill execution receipt did not pass');
967
+ if (receipt.substrateKernelExecution?.ok !== true) gaps.push('substrate kernel execution receipt did not pass');
968
+ if (missingFired.length > 0) gaps.push('mechanical receipt missing fired skill ids: ' + missingFired.join(', '));
969
+ if (summary.promptChars > 75000) gaps.push('mechanical receipt prompt exceeds compact prompt budget');
970
+ }
971
+ if (required.includes('tadabbur')) {
972
+ const cookbookNames = new Set((summary.loadedCookbooks || []).map((entry) => entry.cookbookName).filter(Boolean));
973
+ if (!cookbookNames.has('tadabbur-cookbook.md')) gaps.push('tadabbur required but tadabbur-cookbook.md was not loaded');
974
+ }
975
+ return gaps;
976
+ }
977
+
978
+ export function requiresFullAriaCognition(userText = '', requiredSkills = []) {
979
+ const text = String(userText || '');
980
+ if (/\b(?:social|casual|small talk|quick reply)\b/i.test(text)) return false;
981
+ if (/\b(?:qiyas|tadabbur|taddabur|full cognition|architecture|runtime|code|coding|repo|hook|hooks|sdk|worker|workers|queue|ledger|qa|quality|audit|harness|connector|gate|skills?|cookbooks?|daemon|telemetry)\b/i.test(text)) {
982
+ return true;
983
+ }
984
+ return requiredSkills.includes('qiyas-analogy') || requiredSkills.includes('tadabbur');
985
+ }
986
+
987
+ function ownerVisibleText(text = '') {
988
+ return String(text || '')
989
+ .replace(new RegExp('<!--[\\\\s\\\\S]*?-->', 'g'), '')
990
+ .replace(new RegExp('<details\\\\b[\\\\s\\\\S]*?</details>', 'gi'), '')
991
+ .replace(new RegExp('<gate\\\\b[\\\\s\\\\S]*?</gate>', 'gi'), '')
992
+ .replace(new RegExp('<cognition\\\\b[\\\\s\\\\S]*?</cognition>', 'gi'), '')
993
+ .replace(new RegExp('<applied_cognition\\\\b[\\\\s\\\\S]*?</applied_cognition>', 'gi'), '');
994
+ }
995
+
996
+ export function fullCognitionMethodGaps({ state = {}, text = '' } = {}) {
997
+ const required = Array.isArray(state?.requiredSkills) ? state.requiredSkills : [];
998
+ const userText = state?.userText || '';
999
+ if (!requiresFullAriaCognition(userText, required)) return [];
1000
+ const visible = ownerVisibleText(text);
1001
+ const gaps = [];
1002
+ const qiyasLabel = new RegExp('(^|\\\\n)\\\\s*qiyas_15_pass\\\\s*:', 'i');
1003
+ const tadabburLabel = new RegExp('(^|\\\\n)\\\\s*tadabbur_full_canonical_12_stage\\\\s*:', 'i');
1004
+ const tadabburStages = new RegExp('\\\\b(?:EMBED|EXCAVATE|ROOT TRACE|INTENT TRACE|CONTRACT TRACE|CONSEQUENCE|COLLAPSE|SEPARATE|VERIFY|RECORD|DECIDE|ACT)\\\\b', 'g');
1005
+ if (qiyasLabel.test(visible) || (visible.match(/Owner-Hamza-(?:now|tomorrow|future)|Repo integrity|Deploy integrity|Scope discipline/g) || []).length >= 4) {
1006
+ gaps.push('raw Qiyas method dump is on the owner surface; collapse it into the decision and keep method evidence off the visible answer');
1007
+ }
1008
+ if (tadabburLabel.test(visible) || (visible.match(tadabburStages) || []).length >= 4) {
1009
+ gaps.push('raw Tadabbur stage dump is on the owner surface; collapse it into consequence-aware guidance and keep method evidence off the visible answer');
1010
+ }
1011
+ // Method coverage is proven by runtime skill-load state, not by forcing
1012
+ // every Qiyas/Tadabbur label into the owner-visible answer.
1013
+ if (new RegExp('<applied_cognition\\\\b', 'i').test(visible) || new RegExp('</applied_cognition>', 'i').test(visible)) {
1014
+ gaps.push('raw applied_cognition XML is on the owner surface; summarize the decision delta in prose unless a gate explicitly asks for machine-readable XML');
1015
+ }
1016
+ return gaps;
1017
+ }
1018
+
317
1019
  function normalizeValidationIssue(issue) {
318
1020
  const raw = String(issue || '').replace(/\\s+/g, ' ').trim();
319
1021
  if (!raw) return '';
320
1022
  if (/No <cognition>/i.test(raw)) return 'missing readable cognition block';
321
1023
  if (/missing\\s+<applied_cognition>/i.test(raw)) return 'missing applied cognition contract';
1024
+ if (/owner_facing_cognition_first|owner[- ]readable|Leading with <cognition>|gate surface/i.test(raw)) {
1025
+ return 'owner-readable answer must come before gate XML; move <cognition>/<applied_cognition> after the headline, evidence, and next action';
1026
+ }
1027
+ if (/feedback_full_harness_binding_must_be_structural|just-context-I-read|SDK has primitives|just context|advisory|read[.-]?only/i.test(raw)) {
1028
+ return 'structural harness binding requires executed SDK primitive evidence: name the validateOutput/checkAction/inject/gardenTurn/verifyClaim receipt, or state that no SDK primitive has run and make the next action the exact primitive call; avoid ambiguous "read-only" wording when you mean "no production writes were performed"';
1029
+ }
1030
+ if (/feedback_pretoolgate_covers_all_action_tools/i.test(raw)) {
1031
+ return 'doctrine wording issue: requirements must not be framed as preferences, optional paths, or fallback layers';
1032
+ }
1033
+ if (/feedback_qa_binds_to_fix_not_question|QA finding has been emitted|Recovery Contract is BINDING/i.test(raw)) {
1034
+ return 'QA finding requires A/B/C/D closure with evidence: fixed in turn, tracked task, scoped Mizan choice, or invalidated';
1035
+ }
1036
+ if (/feedback_no_premature_task_closeout|premature_task_closeout/i.test(raw)) {
1037
+ return 'completion/readiness claim needs matching verification or bounded status';
1038
+ }
322
1039
  if (/qualitative_drift/i.test(raw)) return 'qualitative drift language needs a measurable predicate';
323
1040
  if (/premature_task_closeout|feedback_no_premature_task_closeout|done\\|complete\\|completed\\|ready\\|verified\\|fixed/i.test(raw)) {
324
1041
  return 'completion/readiness claim conflicts with unresolved blocker state';
@@ -346,26 +1063,36 @@ export function formatValidationFailure(result) {
346
1063
  }
347
1064
 
348
1065
  export function isAriaControlBlock(text) {
349
- return /^(?:ARIA CODEX RECOVERY CONTRACT|Aria runtime blocked final output for this Codex turn\\.|Aria stop gate blocked output:|Aria task\\/project ledger blocked output claim\\.|Aria stop hook failed closed:)/i.test(String(text || '').trim());
1066
+ return /^(?:ARIA CODEX RECOVERY CONTRACT|Aria held this Codex output for re-authoring\\.|Aria runtime blocked final output for this Codex turn\\.|Aria stop gate blocked output:|Aria task\\/project ledger blocked output claim\\.|Aria stop hook failed closed:)/i.test(String(text || '').trim());
350
1067
  }
351
1068
 
352
1069
  export function formatCodexRecoveryBlock({ surface = 'codex', reason = '', issues = [], next = '' } = {}) {
353
1070
  const blockers = uniqueStrings([reason, ...issues]);
1071
+ const hasStructuralHarnessBindingBlocker = blockers.some((item) => /structural harness binding/i.test(item));
1072
+ const recoveryLines = hasStructuralHarnessBindingBlocker
1073
+ ? [
1074
+ '4. Structural harness binding blocker: do not repeat "SDK primitives" as prose.',
1075
+ '5. In the owner answer, include one concrete line: SDK evidence: <primitive> <receipt/path/status> or SDK evidence: not run yet.',
1076
+ '6. If not run yet, the next action must be the exact primitive call, for example validateOutput, checkAction, inject, gardenTurn, or verifyClaim.',
1077
+ '7. Avoid ambiguous read-only wording; say no production writes were performed when that is the actual evidence.',
1078
+ ]
1079
+ : [
1080
+ next || '4. Re-submit the corrected answer; if this blocker repeats twice, escalate with this block report.',
1081
+ ];
354
1082
  return [
355
- 'ARIA CODEX RECOVERY CONTRACT',
356
- 'surface: ' + surface,
357
- 'status: output held for re-authoring',
1083
+ 'Aria held this Codex output for re-authoring.',
1084
+ '',
1085
+ 'Surface: ' + surface,
1086
+ 'Status: blocked before user release',
358
1087
  '',
359
1088
  'Observed blockers:',
360
1089
  ...(blockers.length ? blockers.map((item) => '- ' + item) : ['- Aria validation failed.']),
361
1090
  '',
362
- 'Recovery contract:',
363
- '1. Do not retry the same blocked text.',
364
- '2. Re-author the answer from the user request, not from this block report.',
365
- '3. Include <cognition> and <applied_cognition> when the answer is non-trivial.',
366
- '4. Use bounded status language when evidence is missing; do not use completion/readiness claims without proof.',
367
- '5. Name a measurable verification predicate, or explicitly state that verification has not run.',
368
- next || '6. Re-submit the corrected answer; if the same blocker repeats twice, escalate with this full recovery contract.',
1091
+ 'Rewrite shape:',
1092
+ '1. Start with the owner-readable answer: status, evidence, next action.',
1093
+ '2. Keep claims bounded unless verification evidence is present.',
1094
+ '3. Put raw gate XML after the answer only when the gate explicitly requires it.',
1095
+ ...recoveryLines,
369
1096
  ].join('\\n');
370
1097
  }
371
1098
 
@@ -392,10 +1119,12 @@ export function runGovernanceGate(payload = {}) {
392
1119
  `;
393
1120
  }
394
1121
  function buildCodexUserPromptHook() {
1122
+ return readCanonicalCodexHook('aria-userprompt-submit.mjs');
395
1123
  return `#!/usr/bin/env node
396
1124
  import {
397
1125
  getHarnessClient,
398
1126
  inferSessionId,
1127
+ inferHiveThreadId,
399
1128
  inferUserId,
400
1129
  ensureTraceId,
401
1130
  extractUserText,
@@ -405,19 +1134,41 @@ import {
405
1134
  recordCoachPhase,
406
1135
  loadTurnState,
407
1136
  saveTurnState,
1137
+ inferRequiredAriaSkills,
1138
+ summarizeForcedSkillLoad,
1139
+ forcedSkillLoadGaps,
1140
+ buildUniversalConnectorGoalContract,
408
1141
  runGovernanceGate,
1142
+ recordHiveSessionLifecycle,
409
1143
  updateTaskProjectLedger,
410
1144
  formatCodexRecoveryBlock,
411
1145
  emitJson,
412
1146
  } from './lib/runtime-client.mjs';
413
1147
 
1148
+ const ARIA_QA_AUTOFIRE_CYCLE = Object.freeze([
1149
+ 'qiyas_15_pass',
1150
+ 'tadabbur_full_canonical_12_stage',
1151
+ 'correct',
1152
+ 'enhance',
1153
+ 'harden',
1154
+ 'verify',
1155
+ ]);
1156
+
1157
+ const ARIA_QA_METHOD_CONTRACT = Object.freeze({
1158
+ qiyas: 'Qiyas means full Qiyas-15 only. Mini Qiyas is not acceptable for architecture, runtime, code, QA, hook, SDK, worker, or harness work.',
1159
+ tadabbur: 'Tadabbur means the full canonical 12-stage Tadabbur path for architecture, runtime, code, QA, hook, SDK, worker, or harness work.',
1160
+ });
1161
+
414
1162
  const event = readEventFromStdin();
415
1163
  const client = getHarnessClient();
416
1164
  const userText = extractUserText(event);
417
1165
  const sessionId = inferSessionId(event);
1166
+ const hiveThreadId = inferHiveThreadId(event, sessionId);
418
1167
  const userId = inferUserId(event);
419
1168
  const priorState = loadTurnState(sessionId);
420
1169
  const traceId = ensureTraceId(priorState);
1170
+ const requiredSkills = inferRequiredAriaSkills(userText);
1171
+ const goalContract = buildUniversalConnectorGoalContract({ userText, phase: 'pre_prompt' });
421
1172
  const ledgerResult = updateTaskProjectLedger({
422
1173
  platform: 'codex',
423
1174
  phase: 'pre_prompt_injection',
@@ -426,6 +1177,15 @@ const ledgerResult = updateTaskProjectLedger({
426
1177
  });
427
1178
 
428
1179
  try {
1180
+ const lifecycleStart = await recordHiveSessionLifecycle({
1181
+ sessionId,
1182
+ threadId: hiveThreadId,
1183
+ event: 'turn_start',
1184
+ status: 'active',
1185
+ intentSummary: userText.slice(0, 240) || 'Codex session turn started',
1186
+ source: 'codex-userprompt-hook',
1187
+ body: { traceId, userId, goalContract },
1188
+ });
429
1189
  await recordCoachPhase('pre_turn', {
430
1190
  requestId: traceId,
431
1191
  sessionId,
@@ -464,20 +1224,81 @@ try {
464
1224
  platform: 'codex',
465
1225
  userText,
466
1226
  userId,
1227
+ goalContract,
467
1228
  evidenceRefs: [packetRef],
468
1229
  },
469
1230
  });
1231
+ let forcedSkillLoad = null;
1232
+ if (requiredSkills.length > 0) {
1233
+ try {
1234
+ const promptBuild = await runtimePost('/build-system-prompt', {
1235
+ sessionId,
1236
+ message: userText || 'codex forced skill load',
1237
+ requiredSkills,
1238
+ metadata: {
1239
+ source: 'codex-userprompt-submit',
1240
+ cookbookMode: 'required-when-referenced',
1241
+ skillExecutionMode: 'mechanical-receipt',
1242
+ goalContract,
1243
+ },
1244
+ skillExecutionMode: 'mechanical-receipt',
1245
+ });
1246
+ forcedSkillLoad = summarizeForcedSkillLoad(promptBuild);
1247
+ forcedSkillLoad.gaps = forcedSkillLoadGaps({ requiredSkills, forcedSkillLoad });
1248
+ } catch (error) {
1249
+ forcedSkillLoad = {
1250
+ ok: false,
1251
+ requiredSkillIds: requiredSkills,
1252
+ loadedSkillIds: [],
1253
+ missingSkillIds: [],
1254
+ loadedSkillHashes: [],
1255
+ loadedCookbooks: [],
1256
+ missingCookbooks: [],
1257
+ promptSha256: null,
1258
+ promptChars: 0,
1259
+ gaps: ['forced skill autofire runtime call failed: ' + (error instanceof Error ? error.message : String(error))],
1260
+ };
1261
+ }
1262
+ }
470
1263
  await recordCoachPhase('post_cognition', {
471
1264
  requestId: traceId,
472
1265
  sessionId,
473
1266
  text: userText,
474
- evidenceRefs: [packetRef, makeEvidenceRef('mizan_pre_receipt', result?.receipt || null, { sessionId, traceId })],
475
- metadata: { source: 'codex-userprompt-hook', pre_receipt_id: result?.receipt?.receiptId || null },
1267
+ evidenceRefs: [
1268
+ packetRef,
1269
+ makeEvidenceRef('mizan_pre_receipt', result?.receipt || null, { sessionId, traceId }),
1270
+ ...(forcedSkillLoad ? [makeEvidenceRef('forced_skill_load', forcedSkillLoad, { sessionId, traceId })] : []),
1271
+ ],
1272
+ metadata: {
1273
+ source: 'codex-userprompt-hook',
1274
+ pre_receipt_id: result?.receipt?.receiptId || null,
1275
+ requiredSkills,
1276
+ forcedSkillLoad,
1277
+ goalContract,
1278
+ hiveThreadId,
1279
+ lifecycleStart,
1280
+ qaAutofire: {
1281
+ mode: 'always-on-15',
1282
+ phase: 'pre_turn',
1283
+ correctionCycle: ARIA_QA_AUTOFIRE_CYCLE,
1284
+ },
1285
+ },
476
1286
  });
477
1287
  saveTurnState(sessionId, {
478
1288
  traceId,
479
1289
  userId,
480
1290
  userText,
1291
+ requiredSkills,
1292
+ forcedSkillLoad,
1293
+ goalContract,
1294
+ forcedSkillLoadEnforced: false,
1295
+ forcedSkillAutofire: requiredSkills.length > 0,
1296
+ hiveThreadId,
1297
+ lifecycleStart,
1298
+ qaAutofire: {
1299
+ mode: 'always-on-15',
1300
+ correctionCycle: ARIA_QA_AUTOFIRE_CYCLE,
1301
+ },
481
1302
  preReceiptId: result?.receipt?.receiptId || null,
482
1303
  taskProjectLedgerId: ledgerResult.ledger.ledgerId,
483
1304
  packetTimestamp: packet?.timestamp || null,
@@ -497,7 +1318,14 @@ try {
497
1318
  }
498
1319
  `;
499
1320
  }
1321
+ function buildCodexLiveTickerHook() {
1322
+ return readCanonicalCodexHook('aria-live-ticker.mjs');
1323
+ }
1324
+ function buildCodexHarnessTickerSidecar() {
1325
+ return readCanonicalCodexHook('aria-harness-ticker-sidecar.mjs');
1326
+ }
500
1327
  function buildCodexPreToolHook() {
1328
+ return readCanonicalCodexHook('aria-pre-tool-use.mjs');
501
1329
  return `#!/usr/bin/env node
502
1330
  import {
503
1331
  inferSessionId,
@@ -507,29 +1335,86 @@ import {
507
1335
  loadTurnState,
508
1336
  makeEvidenceRef,
509
1337
  recordCoachPhase,
1338
+ ensurePreTurnMizanReceipt,
1339
+ runGovernanceGate,
510
1340
  saveTurnState,
1341
+ forcedSkillLoadGaps,
1342
+ extractToolTouchedFiles,
1343
+ recordHiveFileTouch,
1344
+ recordHiveSessionLifecycle,
511
1345
  formatCodexRecoveryBlock,
512
1346
  emitJson,
513
1347
  } from './lib/runtime-client.mjs';
514
1348
 
1349
+ const ARIA_QA_AUTOFIRE_CYCLE = Object.freeze([
1350
+ 'qiyas_15_pass',
1351
+ 'tadabbur_full_canonical_12_stage',
1352
+ 'correct',
1353
+ 'enhance',
1354
+ 'harden',
1355
+ 'verify',
1356
+ ]);
1357
+
1358
+ const ARIA_QA_METHOD_CONTRACT = Object.freeze({
1359
+ qiyas: 'Qiyas means full Qiyas-15 only. Mini Qiyas is not acceptable for architecture, runtime, code, QA, hook, SDK, worker, or harness work.',
1360
+ tadabbur: 'Tadabbur means the full canonical 12-stage Tadabbur path for architecture, runtime, code, QA, hook, SDK, worker, or harness work.',
1361
+ });
1362
+
515
1363
  const event = readEventFromStdin();
516
1364
  const sessionId = inferSessionId(event);
517
1365
  const action = classifyAction(event);
518
1366
  const target = summarizeTarget(event);
519
- const state = loadTurnState(sessionId);
1367
+ let state = loadTurnState(sessionId);
520
1368
 
521
1369
  try {
522
- if (!state?.preReceiptId && !state?.userText) {
523
- emitJson({
524
- decision: 'block',
525
- reason: formatCodexRecoveryBlock({
526
- surface: 'codex-pre-tool',
527
- reason: 'this turn has no pre-turn Mizan receipt',
528
- next: '6. Re-submit the prompt so cognition is established before tool use, then request the tool again.',
529
- }),
530
- });
1370
+ if (!state?.preReceiptId) {
1371
+ try {
1372
+ const healed = await ensurePreTurnMizanReceipt({
1373
+ sessionId,
1374
+ traceId: state?.traceId || sessionId,
1375
+ state,
1376
+ event,
1377
+ action,
1378
+ target,
1379
+ });
1380
+ state = healed.state || state;
1381
+ if (!healed.ok) {
1382
+ emitJson({
1383
+ decision: 'block',
1384
+ reason: 'Codex pre-tool gate could not mint a real Mizan pre-turn receipt from the mounted runtime. Runtime returned no receipt id; tool use is blocked until the runtime receipt path is healthy.',
1385
+ });
1386
+ }
1387
+ } catch (error) {
1388
+ emitJson({
1389
+ decision: 'block',
1390
+ reason: 'Codex pre-tool gate could not mint a real Mizan pre-turn receipt from the mounted runtime: ' + (error instanceof Error ? error.message : String(error)),
1391
+ });
1392
+ }
531
1393
  }
1394
+ const forcedSkillGaps = forcedSkillLoadGaps(state);
532
1395
  const toolName = String(event?.tool_name || event?.toolName || '').trim() || null;
1396
+ const touchedFiles = extractToolTouchedFiles(event, action);
1397
+ const hiveThreadId = state?.hiveThreadId || null;
1398
+ const hiveTouch = await recordHiveFileTouch({
1399
+ sessionId,
1400
+ threadId: hiveThreadId,
1401
+ event: 'pre_tool',
1402
+ files: touchedFiles,
1403
+ source: 'codex-pre-tool-hook',
1404
+ body: { action, toolName, target },
1405
+ });
1406
+ const hiveLifecycle = touchedFiles.length > 0
1407
+ ? await recordHiveSessionLifecycle({
1408
+ sessionId,
1409
+ threadId: hiveThreadId,
1410
+ event: 'tool_claim',
1411
+ status: 'active',
1412
+ intentSummary: \`Codex tool requested \${action}\${toolName ? ' via ' + toolName : ''}\`,
1413
+ fileClaims: touchedFiles,
1414
+ source: 'codex-pre-tool-hook',
1415
+ body: { action, toolName, target },
1416
+ })
1417
+ : { ok: true, skipped: true, reason: 'no touched files' };
533
1418
  const requestRef = makeEvidenceRef('codex_tool_request', { action, toolName, target }, { sessionId });
534
1419
  const coach = await recordCoachPhase('pre_tool', {
535
1420
  requestId: state?.traceId || sessionId,
@@ -538,7 +1423,22 @@ try {
538
1423
  action,
539
1424
  target,
540
1425
  evidenceRefs: [requestRef],
541
- metadata: { source: 'codex-pre-tool-hook', toolName, requireVerify: action === 'deploy' || action === 'delete' },
1426
+ metadata: {
1427
+ source: 'codex-pre-tool-hook',
1428
+ toolName,
1429
+ requireVerify: action === 'deploy' || action === 'delete',
1430
+ requiredSkills: Array.isArray(state?.requiredSkills) ? state.requiredSkills : [],
1431
+ forcedSkillLoad: state?.forcedSkillLoad || null,
1432
+ forcedSkillGaps,
1433
+ touchedFiles,
1434
+ hiveTouch,
1435
+ hiveLifecycle,
1436
+ qaAutofire: {
1437
+ mode: 'always-on-15',
1438
+ phase: 'pre_tool',
1439
+ correctionCycle: ARIA_QA_AUTOFIRE_CYCLE,
1440
+ },
1441
+ },
542
1442
  });
543
1443
  if (coach?.permitted === false) {
544
1444
  emitJson({
@@ -550,12 +1450,63 @@ try {
550
1450
  }),
551
1451
  });
552
1452
  }
1453
+ let gateEvidence = null;
1454
+ try {
1455
+ gateEvidence = runGovernanceGate({
1456
+ sessionId,
1457
+ sourceRuntime: 'codex',
1458
+ surface: 'codex-pre-tool-use',
1459
+ text: JSON.stringify(event).slice(0, 8000),
1460
+ action,
1461
+ toolName,
1462
+ isDeploy: action === 'deploy',
1463
+ isMutation: action === 'write' || action === 'delete',
1464
+ evidence: requestRef,
1465
+ });
1466
+ } catch {}
1467
+ if (gateEvidence) {
1468
+ const gateRef = makeEvidenceRef('governance_gate', gateEvidence, { sessionId, action, toolName });
1469
+ const gateCoach = await recordCoachPhase('pre_tool', {
1470
+ requestId: state?.traceId || sessionId,
1471
+ sessionId,
1472
+ text: target,
1473
+ action,
1474
+ target,
1475
+ evidenceRefs: [requestRef, gateRef],
1476
+ metadata: {
1477
+ source: 'codex-pre-tool-hook',
1478
+ toolName,
1479
+ governanceGate: gateEvidence,
1480
+ requiredSkills: Array.isArray(state?.requiredSkills) ? state.requiredSkills : [],
1481
+ forcedSkillLoad: state?.forcedSkillLoad || null,
1482
+ forcedSkillGaps,
1483
+ qaAutofire: {
1484
+ mode: 'always-on-15',
1485
+ phase: 'pre_tool_gate_signal',
1486
+ correctionCycle: ARIA_QA_AUTOFIRE_CYCLE,
1487
+ },
1488
+ },
1489
+ });
1490
+ if (gateCoach?.permitted === false) {
1491
+ emitJson({
1492
+ decision: 'block',
1493
+ reason: formatCodexRecoveryBlock({
1494
+ surface: 'codex-pre-tool-gate-coach',
1495
+ reason: gateCoach.clientMessage || 'Coach Kernel denied after governance gate signal.',
1496
+ next: '6. Repair the condition flagged by the governance gate, then request the tool again.',
1497
+ }),
1498
+ });
1499
+ }
1500
+ }
553
1501
  const tools = Array.isArray(state?.tools) ? state.tools.slice(-24) : [];
554
1502
  tools.push({
555
1503
  at: new Date().toISOString(),
556
1504
  action,
557
1505
  toolName,
558
1506
  target,
1507
+ touchedFiles,
1508
+ hiveTouch,
1509
+ hiveLifecycle,
559
1510
  evidenceRef: makeEvidenceRef('tool_request', { action, toolName, target }, { sessionId }),
560
1511
  });
561
1512
  saveTurnState(sessionId, {
@@ -575,6 +1526,7 @@ try {
575
1526
  `;
576
1527
  }
577
1528
  function buildCodexPostToolHook() {
1529
+ return readCanonicalCodexHook('aria-post-tool-use.mjs');
578
1530
  return `#!/usr/bin/env node
579
1531
  import {
580
1532
  inferSessionId,
@@ -583,15 +1535,63 @@ import {
583
1535
  makeEvidenceRef,
584
1536
  recordCoachPhase,
585
1537
  saveTurnState,
1538
+ forcedSkillLoadGaps,
1539
+ classifyAction,
1540
+ extractToolTouchedFiles,
1541
+ recordHiveFileTouch,
1542
+ recordHiveSessionLifecycle,
586
1543
  updateTaskProjectLedger,
587
1544
  } from './lib/runtime-client.mjs';
588
1545
 
1546
+ const ARIA_QA_AUTOFIRE_CYCLE = Object.freeze([
1547
+ 'qiyas_15_pass',
1548
+ 'tadabbur_full_canonical_12_stage',
1549
+ 'correct',
1550
+ 'enhance',
1551
+ 'harden',
1552
+ 'verify',
1553
+ ]);
1554
+
1555
+ const ARIA_QA_METHOD_CONTRACT = Object.freeze({
1556
+ qiyas: 'Qiyas means full Qiyas-15 only. Mini Qiyas is not acceptable for architecture, runtime, code, QA, hook, SDK, worker, or harness work.',
1557
+ tadabbur: 'Tadabbur means the full canonical 12-stage Tadabbur path for architecture, runtime, code, QA, hook, SDK, worker, or harness work.',
1558
+ });
1559
+
589
1560
  const event = readEventFromStdin();
590
1561
  const sessionId = inferSessionId(event);
591
1562
  const state = loadTurnState(sessionId);
592
1563
 
593
1564
  try {
594
1565
  const toolResponse = JSON.stringify(event?.tool_response ?? event?.toolResponse ?? null).slice(0, 4000);
1566
+ const action = classifyAction(event);
1567
+ const touchedFiles = extractToolTouchedFiles(event, action);
1568
+ const hiveThreadId = state?.hiveThreadId || null;
1569
+ const hiveTouch = await recordHiveFileTouch({
1570
+ sessionId,
1571
+ threadId: hiveThreadId,
1572
+ event: 'post_tool',
1573
+ files: touchedFiles,
1574
+ source: 'codex-post-tool-hook',
1575
+ body: {
1576
+ action,
1577
+ toolName: event?.tool_name || event?.toolName || null,
1578
+ success: !event?.error,
1579
+ },
1580
+ });
1581
+ const hiveLifecycle = await recordHiveSessionLifecycle({
1582
+ sessionId,
1583
+ threadId: hiveThreadId,
1584
+ event: event?.error ? 'tool_error' : 'tool_complete',
1585
+ status: event?.error ? 'needs_review' : 'active',
1586
+ intentSummary: event?.error ? 'Codex tool returned an error' : 'Codex tool completed',
1587
+ fileClaims: touchedFiles,
1588
+ source: 'codex-post-tool-hook',
1589
+ body: {
1590
+ action,
1591
+ toolName: event?.tool_name || event?.toolName || null,
1592
+ success: !event?.error,
1593
+ },
1594
+ });
595
1595
  const evidenceRef = makeEvidenceRef('tool_response', event?.tool_response ?? event?.toolResponse ?? null, {
596
1596
  sessionId,
597
1597
  toolName: event?.tool_name || event?.toolName || null,
@@ -599,6 +1599,7 @@ try {
599
1599
  const toolOutputs = Array.isArray(state?.toolOutputs) ? state.toolOutputs.slice(-24) : [];
600
1600
  const verificationText = JSON.stringify(event).slice(0, 8000);
601
1601
  const verification = !event?.error && /\\b(?:npm\\s+run\\s+(?:check|test|build|lint|typecheck)|(?:npx\\s+)?(?:jest|vitest|tsc|eslint)|check:|test:|build:|passed|exit\\s*0|0\\s*failures?)\\b/i.test(verificationText);
1602
+ const forcedSkillGaps = forcedSkillLoadGaps(state);
602
1603
  await recordCoachPhase('post_tool', {
603
1604
  requestId: state?.traceId || sessionId,
604
1605
  sessionId,
@@ -609,12 +1610,27 @@ try {
609
1610
  toolName: event?.tool_name || event?.toolName || null,
610
1611
  verification,
611
1612
  error: event?.error || null,
1613
+ requiredSkills: Array.isArray(state?.requiredSkills) ? state.requiredSkills : [],
1614
+ forcedSkillLoad: state?.forcedSkillLoad || null,
1615
+ forcedSkillGaps,
1616
+ touchedFiles,
1617
+ hiveTouch,
1618
+ hiveLifecycle,
1619
+ qaAutofire: {
1620
+ mode: 'always-on-15',
1621
+ phase: 'post_tool',
1622
+ correctionCycle: ARIA_QA_AUTOFIRE_CYCLE,
1623
+ },
612
1624
  },
613
1625
  });
614
1626
  toolOutputs.push({
615
1627
  at: new Date().toISOString(),
616
1628
  toolName: event?.tool_name || event?.toolName || null,
617
1629
  toolResponse,
1630
+ action,
1631
+ touchedFiles,
1632
+ hiveTouch,
1633
+ hiveLifecycle,
618
1634
  evidenceRef,
619
1635
  });
620
1636
  saveTurnState(sessionId, {
@@ -630,6 +1646,14 @@ try {
630
1646
  outcome_ref: evidenceRef,
631
1647
  verification,
632
1648
  commandResult: verification ? 'success' : '',
1649
+ requiredSkills: Array.isArray(state?.requiredSkills) ? state.requiredSkills : [],
1650
+ forcedSkillLoad: state?.forcedSkillLoad || null,
1651
+ forcedSkillGaps,
1652
+ qaAutofire: {
1653
+ mode: 'always-on-15',
1654
+ phase: 'post_tool',
1655
+ correctionCycle: ARIA_QA_AUTOFIRE_CYCLE,
1656
+ },
633
1657
  },
634
1658
  });
635
1659
  process.exit(0);
@@ -639,31 +1663,55 @@ try {
639
1663
  `;
640
1664
  }
641
1665
  function buildCodexStopHook() {
1666
+ return readCanonicalCodexHook('aria-stop.mjs');
642
1667
  return `#!/usr/bin/env node
643
1668
  import {
644
1669
  inferSessionId,
645
1670
  extractAssistantText,
646
1671
  readEventFromStdin,
647
1672
  runtimePost,
1673
+ recordHiveSessionLifecycle,
648
1674
  recordCoachPhase,
649
1675
  loadTurnState,
650
1676
  makeEvidenceRef,
651
1677
  clearTurnState,
1678
+ inferRequiredAriaSkills,
1679
+ forcedSkillLoadGaps,
1680
+ fullCognitionMethodGaps,
1681
+ buildUniversalConnectorGoalContract,
1682
+ evaluateGoalContractOutput,
652
1683
  formatValidationFailure,
653
1684
  formatCodexRecoveryBlock,
654
1685
  isAriaControlBlock,
1686
+ runGovernanceGate,
655
1687
  updateTaskProjectLedger,
656
1688
  evaluateTaskProjectClaim,
657
1689
  recordBlockedTaskProjectClaim,
658
1690
  emitJson,
659
1691
  } from './lib/runtime-client.mjs';
660
1692
 
1693
+ const ARIA_QA_AUTOFIRE_CYCLE = Object.freeze([
1694
+ 'qiyas_15_pass',
1695
+ 'tadabbur_full_canonical_12_stage',
1696
+ 'correct',
1697
+ 'enhance',
1698
+ 'harden',
1699
+ 'verify',
1700
+ ]);
1701
+
1702
+ const ARIA_QA_METHOD_CONTRACT = Object.freeze({
1703
+ qiyas: 'Qiyas means full Qiyas-15 only. Mini Qiyas is not acceptable for architecture, runtime, code, QA, hook, SDK, worker, or harness work.',
1704
+ tadabbur: 'Tadabbur means the full canonical 12-stage Tadabbur path for architecture, runtime, code, QA, hook, SDK, worker, or harness work.',
1705
+ });
1706
+
661
1707
  const event = readEventFromStdin();
662
1708
  const sessionId = inferSessionId(event);
663
1709
  const state = loadTurnState(sessionId);
664
1710
  const text = extractAssistantText(event);
1711
+
665
1712
  const outputRef = makeEvidenceRef('assistant_output', text, { sessionId, traceId: state?.traceId || null });
666
1713
  const toolRefs = Array.isArray(state?.toolOutputs) ? state.toolOutputs.map((entry) => entry.evidenceRef).filter(Boolean) : [];
1714
+ const inferredRequiredSkills = inferRequiredAriaSkills(state?.userText || '');
667
1715
  const ledgerResult = updateTaskProjectLedger({
668
1716
  platform: 'codex',
669
1717
  phase: 'stop',
@@ -679,12 +1727,60 @@ try {
679
1727
  clearTurnState(sessionId);
680
1728
  emitJson({ continue: true });
681
1729
  }
1730
+ const forcedSkillGaps = forcedSkillLoadGaps(state);
1731
+ const cognitionMethodGaps = fullCognitionMethodGaps({ state, text });
1732
+ if (cognitionMethodGaps.length > 0) {
1733
+ emitJson({
1734
+ decision: 'block',
1735
+ reason: formatCodexRecoveryBlock({
1736
+ surface: 'codex-stop-full-cognition-method',
1737
+ reason: 'owner-facing output contains raw cognition method dump',
1738
+ issues: cognitionMethodGaps,
1739
+ next: '4. Re-author as a professional owner-readable closeout: one status line, 2-4 evidence bullets, concrete next action. Do not paste qiyas_15_pass, Tadabbur stages, or raw applied_cognition into the visible answer.',
1740
+ }),
1741
+ });
1742
+ }
1743
+ const qaAutofire = {
1744
+ mode: 'always-on-15',
1745
+ phase: 'stop',
1746
+ correctionCycle: ARIA_QA_AUTOFIRE_CYCLE,
1747
+ methodContract: ARIA_QA_METHOD_CONTRACT,
1748
+ };
1749
+ const goalContract = state?.goalContract || buildUniversalConnectorGoalContract({
1750
+ userText: state?.userText || '',
1751
+ phase: 'stop',
1752
+ });
1753
+ const goalQa = evaluateGoalContractOutput(text, {
1754
+ userText: state?.userText || '',
1755
+ goalContract,
1756
+ });
1757
+ if (goalQa.hardBlock) {
1758
+ emitJson({
1759
+ decision: 'block',
1760
+ reason: formatCodexRecoveryBlock({
1761
+ surface: 'codex-stop-goal-contract',
1762
+ reason: 'active goal contract rejected drift or false completion risk',
1763
+ issues: [...goalQa.blockers, ...goalQa.repairs],
1764
+ next: '4. Re-author around the actual corpus-to-runtime wiring goal, name the next highest-impact action, include QA/correction/evidence, and keep receipts/gates as support only.',
1765
+ }),
1766
+ });
1767
+ }
682
1768
  const postGenerationCoach = await recordCoachPhase('post_generation', {
683
1769
  requestId: state?.traceId || sessionId,
684
1770
  sessionId,
685
1771
  text,
686
1772
  evidenceRefs: [outputRef],
687
- metadata: { source: 'codex-stop-hook', requireCognitionBlock: false, requireAppliedCognition: false },
1773
+ metadata: {
1774
+ source: 'codex-stop-hook',
1775
+ requireCognitionBlock: false,
1776
+ requireAppliedCognition: false,
1777
+ requiredSkills: Array.isArray(state?.requiredSkills) ? state.requiredSkills : inferredRequiredSkills,
1778
+ forcedSkillLoad: state?.forcedSkillLoad || null,
1779
+ forcedSkillGaps,
1780
+ goalContract,
1781
+ goalQa,
1782
+ qaAutofire: { ...qaAutofire, phase: 'post_generation' },
1783
+ },
688
1784
  });
689
1785
  if (postGenerationCoach?.permitted === false) {
690
1786
  emitJson({
@@ -695,6 +1791,17 @@ try {
695
1791
  }),
696
1792
  });
697
1793
  }
1794
+ let gateEvidence = null;
1795
+ try {
1796
+ gateEvidence = runGovernanceGate({
1797
+ sessionId,
1798
+ sourceRuntime: 'codex',
1799
+ surface: 'codex-stop',
1800
+ text: text.slice(0, 8000),
1801
+ isOutputCloseout: true,
1802
+ evidence: outputRef,
1803
+ });
1804
+ } catch {}
698
1805
  const ledgerClaim = evaluateTaskProjectClaim({ text, ledger: ledgerResult.ledger });
699
1806
  if (!ledgerClaim.ok) {
700
1807
  recordBlockedTaskProjectClaim({
@@ -736,8 +1843,19 @@ try {
736
1843
  text,
737
1844
  validation: validation?.validation || null,
738
1845
  layer3: validation?.layer3 || null,
739
- evidenceRefs: [outputRef, makeEvidenceRef('runtime_validation', validation, { sessionId, traceId: state?.traceId || null })],
740
- metadata: { source: 'codex-stop-hook', requireCognitionBlock: false, requireAppliedCognition: false },
1846
+ evidenceRefs: [outputRef, makeEvidenceRef('runtime_validation', validation, { sessionId, traceId: state?.traceId || null }), ...(gateEvidence ? [makeEvidenceRef('governance_gate', gateEvidence, { sessionId })] : [])],
1847
+ metadata: {
1848
+ source: 'codex-stop-hook',
1849
+ requireCognitionBlock: false,
1850
+ requireAppliedCognition: false,
1851
+ governanceGate: gateEvidence || null,
1852
+ requiredSkills: Array.isArray(state?.requiredSkills) ? state.requiredSkills : inferredRequiredSkills,
1853
+ forcedSkillLoad: state?.forcedSkillLoad || null,
1854
+ forcedSkillGaps,
1855
+ goalContract,
1856
+ goalQa,
1857
+ qaAutofire: { ...qaAutofire, phase: 'pre_output' },
1858
+ },
741
1859
  });
742
1860
  if (preOutputCoach?.permitted === false) {
743
1861
  emitJson({
@@ -769,6 +1887,12 @@ try {
769
1887
  trace_id: state?.traceId || null,
770
1888
  output_ref: outputRef,
771
1889
  tool_refs: toolRefs,
1890
+ required_skills: Array.isArray(state?.requiredSkills) ? state.requiredSkills : inferredRequiredSkills,
1891
+ forced_skill_load: state?.forcedSkillLoad || null,
1892
+ forced_skill_gaps: forcedSkillGaps,
1893
+ goal_contract: goalContract,
1894
+ goal_qa: goalQa,
1895
+ qa_autofire: { ...qaAutofire, phase: 'mizan_post' },
772
1896
  },
773
1897
  context: {
774
1898
  sessionId,
@@ -789,7 +1913,17 @@ try {
789
1913
  outputRef,
790
1914
  makeEvidenceRef('mizan_post_receipt', post?.receipt || null, { sessionId, traceId: state?.traceId || null }),
791
1915
  ],
792
- metadata: { source: 'codex-stop-hook', requireCognitionBlock: false, requireAppliedCognition: false },
1916
+ metadata: {
1917
+ source: 'codex-stop-hook',
1918
+ requireCognitionBlock: false,
1919
+ requireAppliedCognition: false,
1920
+ requiredSkills: Array.isArray(state?.requiredSkills) ? state.requiredSkills : inferredRequiredSkills,
1921
+ forcedSkillLoad: state?.forcedSkillLoad || null,
1922
+ forcedSkillGaps,
1923
+ goalContract,
1924
+ goalQa,
1925
+ qaAutofire: { ...qaAutofire, phase: 'post_output' },
1926
+ },
793
1927
  });
794
1928
  await runtimePost('/decision/log', {
795
1929
  session_id: sessionId,
@@ -810,6 +1944,12 @@ try {
810
1944
  tool_count: Array.isArray(state?.tools) ? state.tools.length : 0,
811
1945
  validation_severity: validation?.validation?.severity || 'pass',
812
1946
  layer3_pass: validation?.layer3?.pass !== false,
1947
+ required_skills: Array.isArray(state?.requiredSkills) ? state.requiredSkills : inferredRequiredSkills,
1948
+ forced_skill_load: state?.forcedSkillLoad || null,
1949
+ forced_skill_gaps: forcedSkillGaps,
1950
+ goal_contract: goalContract,
1951
+ goal_qa: goalQa,
1952
+ qa_autofire: { ...qaAutofire, phase: 'decision_log' },
813
1953
  },
814
1954
  });
815
1955
  if (typeof state?.userText === 'string' && state.userText.trim()) {
@@ -824,6 +1964,12 @@ try {
824
1964
  decision_category: 'codex-hooks',
825
1965
  trace_id: state?.traceId || null,
826
1966
  output_ref: outputRef,
1967
+ required_skills: Array.isArray(state?.requiredSkills) ? state.requiredSkills : inferredRequiredSkills,
1968
+ forced_skill_load: state?.forcedSkillLoad || null,
1969
+ forced_skill_gaps: forcedSkillGaps,
1970
+ goal_contract: goalContract,
1971
+ goal_qa: goalQa,
1972
+ qa_autofire: { ...qaAutofire, phase: 'garden_turn' },
827
1973
  },
828
1974
  });
829
1975
  }
@@ -836,6 +1982,12 @@ try {
836
1982
  post_turn: true,
837
1983
  output_ref: outputRef,
838
1984
  verification: false,
1985
+ requiredSkills: Array.isArray(state?.requiredSkills) ? state.requiredSkills : inferredRequiredSkills,
1986
+ forcedSkillLoad: state?.forcedSkillLoad || null,
1987
+ forcedSkillGaps,
1988
+ goalContract,
1989
+ goalQa,
1990
+ qaAutofire: { ...qaAutofire, phase: 'post_turn_ledger' },
839
1991
  },
840
1992
  });
841
1993
  const releaseCoach = await recordCoachPhase('claim_or_release', {
@@ -851,6 +2003,12 @@ try {
851
2003
  requireCognitionBlock: false,
852
2004
  requireAppliedCognition: false,
853
2005
  post_receipt_id: post?.receipt?.receiptId || null,
2006
+ requiredSkills: Array.isArray(state?.requiredSkills) ? state.requiredSkills : inferredRequiredSkills,
2007
+ forcedSkillLoad: state?.forcedSkillLoad || null,
2008
+ forcedSkillGaps,
2009
+ goalContract,
2010
+ goalQa,
2011
+ qaAutofire: { ...qaAutofire, phase: 'claim_or_release' },
854
2012
  },
855
2013
  });
856
2014
  if (releaseCoach?.permitted === false) {
@@ -862,6 +2020,28 @@ try {
862
2020
  }),
863
2021
  });
864
2022
  }
2023
+ const touchedFileMap = new Map();
2024
+ for (const entry of [...(Array.isArray(state?.tools) ? state.tools : []), ...(Array.isArray(state?.toolOutputs) ? state.toolOutputs : [])]) {
2025
+ for (const file of Array.isArray(entry?.touchedFiles) ? entry.touchedFiles : []) {
2026
+ if (file?.path && !touchedFileMap.has(file.path)) touchedFileMap.set(file.path, file);
2027
+ }
2028
+ }
2029
+ await recordHiveSessionLifecycle({
2030
+ sessionId,
2031
+ threadId: state?.hiveThreadId || null,
2032
+ event: 'turn_complete',
2033
+ status: 'completed',
2034
+ intentSummary: (state?.userText || text || 'Codex turn completed').slice(0, 240),
2035
+ fileClaims: [...touchedFileMap.values()],
2036
+ source: 'codex-stop-hook',
2037
+ body: {
2038
+ traceId: state?.traceId || null,
2039
+ outputRef,
2040
+ validationSeverity: validation?.validation?.severity || 'pass',
2041
+ layer3Pass: validation?.layer3?.pass !== false,
2042
+ goalQa,
2043
+ },
2044
+ });
865
2045
  clearTurnState(sessionId);
866
2046
  emitJson({ continue: true });
867
2047
  } catch (error) {
@@ -878,7 +2058,11 @@ try {
878
2058
  }
879
2059
  function buildCodexHooksToml(codexDir) {
880
2060
  const hooksDir = path.join(codexDir, 'hooks');
2061
+ const configPath = path.join(codexDir, 'config.toml');
881
2062
  const command = (name) => tomlString(`node ${path.join(hooksDir, name)}`);
2063
+ const stateKey = (event, index) => tomlString(`${configPath}:${event}:${index}:0`);
2064
+ const enabledState = (event, index) => `[hooks.state.${stateKey(event, index)}]
2065
+ enabled = true`;
882
2066
  return `# BEGIN ARIA MANAGED HOOKS
883
2067
  [hooks]
884
2068
  managed_dir = ${tomlString(hooksDir)}
@@ -886,6 +2070,9 @@ managed_dir = ${tomlString(hooksDir)}
886
2070
  [[hooks.UserPromptSubmit]]
887
2071
  hooks = [{ type = "command", command = ${command('aria-userprompt-submit.mjs')} }]
888
2072
 
2073
+ [[hooks.UserPromptSubmit]]
2074
+ hooks = [{ type = "command", command = ${command('aria-live-ticker.mjs')} }]
2075
+
889
2076
  [[hooks.PreToolUse]]
890
2077
  matcher = ".*"
891
2078
  hooks = [{ type = "command", command = ${command('aria-pre-tool-use.mjs')} }]
@@ -896,6 +2083,18 @@ hooks = [{ type = "command", command = ${command('aria-post-tool-use.mjs')} }]
896
2083
 
897
2084
  [[hooks.Stop]]
898
2085
  hooks = [{ type = "command", command = ${command('aria-stop.mjs')} }]
2086
+
2087
+ [hooks.state]
2088
+
2089
+ ${enabledState('user_prompt_submit', 0)}
2090
+
2091
+ ${enabledState('user_prompt_submit', 1)}
2092
+
2093
+ ${enabledState('pre_tool_use', 0)}
2094
+
2095
+ ${enabledState('post_tool_use', 0)}
2096
+
2097
+ ${enabledState('stop', 0)}
899
2098
  # END ARIA MANAGED HOOKS
900
2099
  `;
901
2100
  }
@@ -918,13 +2117,20 @@ function installCodexHooksConfig(codexDir, logs) {
918
2117
  function installCodexHooks(codexDir, logs) {
919
2118
  const hooksDir = path.join(codexDir, 'hooks');
920
2119
  mkdirSync(path.join(hooksDir, 'lib'), { recursive: true, mode: 0o755 });
2120
+ mkdirSync(path.join(codexDir, 'lib'), { recursive: true, mode: 0o755 });
921
2121
  const ledgerHelperSrc = packageTaskProjectLedgerHelperPath();
922
2122
  if (!existsSync(ledgerHelperSrc)) {
923
2123
  throw new Error(`Task/project ledger helper missing: ${ledgerHelperSrc}`);
924
2124
  }
2125
+ const projectBoundarySrc = packageProjectBoundaryCognitionPath();
2126
+ if (!existsSync(projectBoundarySrc)) {
2127
+ throw new Error(`Project boundary cognition helper missing: ${projectBoundarySrc}`);
2128
+ }
925
2129
  const files = [
926
2130
  [path.join(hooksDir, 'lib', 'runtime-client.mjs'), buildCodexHookRuntimeClient()],
927
2131
  [path.join(hooksDir, 'aria-userprompt-submit.mjs'), buildCodexUserPromptHook()],
2132
+ [path.join(hooksDir, 'aria-live-ticker.mjs'), buildCodexLiveTickerHook()],
2133
+ [path.join(hooksDir, 'aria-harness-ticker-sidecar.mjs'), buildCodexHarnessTickerSidecar()],
928
2134
  [path.join(hooksDir, 'aria-pre-tool-use.mjs'), buildCodexPreToolHook()],
929
2135
  [path.join(hooksDir, 'aria-post-tool-use.mjs'), buildCodexPostToolHook()],
930
2136
  [path.join(hooksDir, 'aria-stop.mjs'), buildCodexStopHook()],
@@ -941,6 +2147,11 @@ function installCodexHooks(codexDir, logs) {
941
2147
  chmodSync(path.join(hooksDir, 'lib', 'task-project-ledger.mjs'), 0o755);
942
2148
  }
943
2149
  catch { }
2150
+ copyFileSync(projectBoundarySrc, path.join(codexDir, 'lib', 'project-boundary-cognition.mjs'));
2151
+ try {
2152
+ chmodSync(path.join(codexDir, 'lib', 'project-boundary-cognition.mjs'), 0o755);
2153
+ }
2154
+ catch { }
944
2155
  logs.push(`Installed Codex native hooks → ${hooksDir}`);
945
2156
  installCodexHooksConfig(codexDir, logs);
946
2157
  }
@@ -1057,10 +2268,19 @@ Lens roles for decisions:
1057
2268
  ## Structural Cognition Contract
1058
2269
  - Cognition is not accepted as proof by itself. It must change the next action, tool call, or output claim.
1059
2270
  - Each lens must affect work selection or artifact shape; do not write lenses after the decision is already made.
1060
- - For every non-trivial output, include an \`<applied_cognition>\` block with \`decision_delta\`, \`dominant_domain\`, \`binds_to\`, \`expected_predicate\`, and \`artifact_change\`.
2271
+ - For every non-trivial output, applied cognition must change the answer, tool call, or claim boundary.
2272
+ - Owner-readable output comes first. Raw \`<applied_cognition>\` is required only when a gate or owner explicitly asks for machine-readable XML; otherwise fold the fields into concise prose.
1061
2273
  - Tool-bound cognition must name the exact tool/action it constrains and the measurable predicate that proves the action succeeded.
1062
2274
  - Deploy or destructive actions still require \`<verify>\` and \`<expected>\` blocks before execution.
1063
2275
  - If cognition did not change anything, stop and re-think; \`decision_delta: none\` is treated as performative.
2276
+
2277
+ ## Autofire Quality Continuation Contract
2278
+ - Actual goal: wire extracted books, doctrines, skills, runtimes, primitives, mappings, CLIs, connectors, and agent surfaces into the operating system so output improves automatically.
2279
+ - Receipts, gates, ledgers, and canaries are evidence, not the product. They pass only when they prove corpus-backed behavior changed the next action, QA, correction, verification, or learning loop.
2280
+ - For continuation work, name the next highest-quality, highest-impact step by default; do not make the owner ask for the obvious next action.
2281
+ - Forced QA is the ordinary gate: compare expected vs observed, name findings or explicit pass criteria, correct low-risk misses, verify with real evidence, and record Dalio-style lesson plus Reflexion-style next action.
2282
+ - Hard stops are reserved for secrets, destructive actions, deploy/publication boundaries, owner-contradicted actions, and proven false completion risk.
2283
+ - Final owner-facing output must be readable: status, evidence, QA/correction result, and next action. Do not dump lifecycle receipts or raw JSON unless the owner explicitly asks for raw receipt/debug evidence.
1064
2284
  `;
1065
2285
  }
1066
2286
  function buildSmokeScript() {
@@ -1134,9 +2354,15 @@ function installAgentsMd(codexDir, config, logs) {
1134
2354
  writeFileSync(mustReadPath, buildMustReadGuide('codex'), { mode: 0o644 });
1135
2355
  logs.push(`Installed Codex must-read guide → ${mustReadPath}`);
1136
2356
  }
1137
- export async function connectCodex(config) {
2357
+ export async function connectCodex(config, opts = {}) {
1138
2358
  const logs = [];
1139
2359
  const codexDir = path.join(homedir(), '.codex');
2360
+ await requireGovernedConnectorMutation({
2361
+ surfaceId: 'codex',
2362
+ action: 'install',
2363
+ targetPath: codexDir,
2364
+ reason: 'install Codex harness surface',
2365
+ });
1140
2366
  if (!existsSync(codexDir)) {
1141
2367
  mkdirSync(codexDir, { recursive: true, mode: 0o700 });
1142
2368
  logs.push(`Created ${codexDir}`);
@@ -1148,7 +2374,12 @@ export async function connectCodex(config) {
1148
2374
  installCodexHooks(codexDir, logs);
1149
2375
  installAriaCognitionSkills(codexDir, logs);
1150
2376
  syncDoctrineTriggerMap(logs);
1151
- logs.push(...await connectShell('codex', config));
2377
+ if (opts.installWrapper === true) {
2378
+ logs.push(...await connectShell('codex', config));
2379
+ }
2380
+ else {
2381
+ logs.push('Skipped Codex shell wrapper install; Codex direct login/default provider path remains untouched. Use aria connect --with-wrappers only when explicitly desired.');
2382
+ }
1152
2383
  return logs;
1153
2384
  }
1154
2385
  //# sourceMappingURL=codex.js.map