@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
@@ -0,0 +1,221 @@
1
+ // atlas-orchestrator-postwire — post-turn enrichment writeback for the
2
+ // atlas-as-orchestrator pre/intra/post wire.
3
+ //
4
+ // Called from aria-stop-gate.mjs (and any other Stop-class surface) BEFORE
5
+ // the emergency-gateoff check so adherence/QA data is persisted on every
6
+ // non-empty turn regardless of gates-on/off state. The hive WAL append is
7
+ // substrate enrichment, not gate enforcement — gates-off should not silence
8
+ // the learning loop.
9
+ //
10
+ // Operates on:
11
+ // 1. event.transcript_path → walk for Skill tool_use invocations.
12
+ // 2. ~/.claude/.aria-current-turn-context.json → sidecar carries the
13
+ // atlas selections persisted by the pre-emit autoload.
14
+ // 3. runEndOfPhaseQaAutofire → full Qiyas-15 + Tadabbur-12 court receipt
15
+ // anchored to the adherence observation.
16
+ //
17
+ // Schemas emitted (next turn's pre-emit reads these as substrate):
18
+ // aria.atlas_orchestrator_turn_outcome.v1
19
+ // aria.end_of_phase_qa_court.v1 (when court ran)
20
+ // aria.atlas_orchestrator_hardening_directive.v1 (conditional on gap or
21
+ // non-verified court verdict; pre-emit autoload consumes this to
22
+ // force-add the missed skills to invocationRequired)
23
+ //
24
+ // LOUD-stderr on every error path per
25
+ // feedback_no_silent_fail_open_in_hooks.md. Returns a summary object the
26
+ // caller can include in its own telemetry; the WAL is the durable receipt.
27
+
28
+ import { readFileSync, existsSync, appendFileSync, mkdirSync } from 'node:fs';
29
+ import { dirname } from 'node:path';
30
+ import { homedir } from 'node:os';
31
+ import { runEndOfPhaseQaAutofire } from './end-phase-qa-autofire.mjs';
32
+
33
+ const HOME = homedir();
34
+ const HIVE_WAL_PATH = `${HOME}/.aria/runtime/state/hive-ledger-wal.jsonl`;
35
+ const SIDECAR_TURN_CONTEXT_PATH = `${HOME}/.claude/.aria-current-turn-context.json`;
36
+ const LOG = '[atlas-orchestrator-postwire]';
37
+
38
+ function loudErr(reason, detail) {
39
+ try {
40
+ process.stderr.write(`${LOG}:${reason} ${detail}\n`);
41
+ } catch { /* stderr may be closed */ }
42
+ }
43
+
44
+ export function runAtlasOrchestratorPostWire({ event }) {
45
+ const summary = {
46
+ selected: 0,
47
+ honored: 0,
48
+ gap: 0,
49
+ adherenceRatio: 1,
50
+ invoked: 0,
51
+ qaVerdict: null,
52
+ walAppended: false,
53
+ hardeningEmitted: false,
54
+ };
55
+ try {
56
+ const transcriptPath = event?.transcript_path ?? event?.transcriptPath ?? null;
57
+ const sessionId = String(event?.session_id || 'unknown');
58
+
59
+ // 1. Walk transcript for invoked Skill names.
60
+ const invokedSkillsSet = new Set();
61
+ if (transcriptPath && existsSync(transcriptPath)) {
62
+ try {
63
+ const lines = readFileSync(transcriptPath, 'utf-8').split('\n').filter(Boolean);
64
+ for (const line of lines) {
65
+ try {
66
+ const m = JSON.parse(line);
67
+ const role = m.message?.role ?? m.role;
68
+ if (role !== 'assistant') continue;
69
+ const content = m.message?.content ?? m.content ?? [];
70
+ if (!Array.isArray(content)) continue;
71
+ for (const block of content) {
72
+ if (block && block.type === 'tool_use' && block.name === 'Skill') {
73
+ const skillName = block.input?.skill || block.input?.name || null;
74
+ if (typeof skillName === 'string' && skillName.trim()) {
75
+ invokedSkillsSet.add(skillName.trim());
76
+ }
77
+ }
78
+ }
79
+ } catch { /* line-parse fail acceptable on partial jsonl */ }
80
+ }
81
+ } catch (transcriptErr) {
82
+ loudErr('transcript_read', transcriptErr instanceof Error ? transcriptErr.message : String(transcriptErr));
83
+ }
84
+ }
85
+ const invokedSkills = [...invokedSkillsSet];
86
+
87
+ // 2. Read sidecar atlas selections persisted by pre-emit.
88
+ let sidecarOrchestrator = null;
89
+ let sidecarSelection = null;
90
+ let sidecarInvocationRequired = [];
91
+ if (existsSync(SIDECAR_TURN_CONTEXT_PATH)) {
92
+ try {
93
+ const sidecarRaw = readFileSync(SIDECAR_TURN_CONTEXT_PATH, 'utf8');
94
+ const sidecarParsed = JSON.parse(sidecarRaw);
95
+ sidecarOrchestrator = sidecarParsed?.atlasOrchestrator || null;
96
+ sidecarSelection = sidecarParsed?.atlasSelection || null;
97
+ sidecarInvocationRequired = Array.isArray(sidecarParsed?.invocationRequired)
98
+ ? sidecarParsed.invocationRequired
99
+ : [];
100
+ } catch (sidecarErr) {
101
+ loudErr('sidecar_parse', sidecarErr instanceof Error ? sidecarErr.message : String(sidecarErr));
102
+ }
103
+ }
104
+ const selectedByDossier = Array.isArray(sidecarOrchestrator?.governingSkills)
105
+ ? sidecarOrchestrator.governingSkills.filter((s) => typeof s === 'string')
106
+ : [];
107
+ const selectedByKernel = Array.isArray(sidecarSelection?.selectedSkillIds)
108
+ ? sidecarSelection.selectedSkillIds.filter((s) => typeof s === 'string')
109
+ : [];
110
+ const selectedSet = new Set([...selectedByDossier, ...selectedByKernel]);
111
+ const selected = [...selectedSet];
112
+ const gap = selected.filter((s) => !invokedSkillsSet.has(s));
113
+ const honored = selected.filter((s) => invokedSkillsSet.has(s));
114
+ const adherenceRatio = selected.length > 0 ? Number((honored.length / selected.length).toFixed(3)) : 1;
115
+
116
+ summary.selected = selected.length;
117
+ summary.honored = honored.length;
118
+ summary.gap = gap.length;
119
+ summary.adherenceRatio = adherenceRatio;
120
+ summary.invoked = invokedSkills.length;
121
+
122
+ // 3. Run end-of-phase QA court on the adherence observation. The court
123
+ // generates full Qiyas-15 + Tadabbur-12 evidence anchored to a kernel
124
+ // verdict. Gate-off does NOT skip the court — substrate enrichment runs.
125
+ // runEndOfPhaseQaAutofire returns {ok, receipt, latestPath, eventPath};
126
+ // the actual court receipt is nested under .receipt.
127
+ const adherenceSummary = `Atlas orchestrator adherence: ${honored.length}/${selected.length} skills honored, ${gap.length} gap. Invoked: [${invokedSkills.join(', ')}]. Selected-by-atlas: [${selected.join(', ')}].`;
128
+ let qaResult = null;
129
+ let qaCourtReceipt = null;
130
+ try {
131
+ qaResult = runEndOfPhaseQaAutofire({
132
+ sessionId,
133
+ phase: 'atlas_orchestrator_adherence',
134
+ trigger: 'stop_gate_atlas_postwire',
135
+ text: adherenceSummary,
136
+ source: 'aria-stop-gate-atlas-postwire',
137
+ autoRecoverPartial: false,
138
+ });
139
+ qaCourtReceipt = qaResult?.receipt || null;
140
+ } catch (qaErr) {
141
+ loudErr('qa_court_error', qaErr instanceof Error ? qaErr.message : String(qaErr));
142
+ }
143
+ // claim-gate verdict lives at receipt.claim_gate.verdict (top-level on
144
+ // the receipt — autofire is a sibling key, not the parent).
145
+ const qaVerdict = qaCourtReceipt?.claim_gate?.verdict
146
+ || qaCourtReceipt?.autofire?.claim_gate?.verdict
147
+ || qaCourtReceipt?.verdict
148
+ || null;
149
+ const qaHardBlock = qaCourtReceipt?.hardBlock === true;
150
+ summary.qaVerdict = qaVerdict;
151
+
152
+ // 4. Build outcome event + append to hive WAL.
153
+ const at = new Date().toISOString();
154
+ const walEvent = {
155
+ schema: 'aria.atlas_orchestrator_turn_outcome.v1',
156
+ at,
157
+ session_id: sessionId,
158
+ surface: 'claude-code',
159
+ selectedByAtlas: {
160
+ dossier: selectedByDossier,
161
+ kernelClass: selectedByKernel,
162
+ total: selected.length,
163
+ },
164
+ invokedSkills,
165
+ honored,
166
+ gap,
167
+ adherenceRatio,
168
+ invocationRequiredCount: sidecarInvocationRequired.length,
169
+ kernelObservationKind: sidecarSelection?.observationKind || null,
170
+ kernelCompilationHash: sidecarSelection?.compilation_hash || null,
171
+ dossierTargetsHarvested: sidecarOrchestrator?.targetsHarvested ?? 0,
172
+ dossierTargetsResolved: sidecarOrchestrator?.targetsResolved ?? 0,
173
+ qaCourt: qaCourtReceipt
174
+ ? {
175
+ verdict: qaVerdict,
176
+ hardBlock: qaHardBlock,
177
+ qiyasPerspectives: Array.isArray(qaCourtReceipt?.qiyas_15_pass) ? qaCourtReceipt.qiyas_15_pass.length : 15,
178
+ tadabburStages: Array.isArray(qaCourtReceipt?.tadabbur_12_pass) ? qaCourtReceipt.tadabbur_12_pass.length : 12,
179
+ receiptHash: qaCourtReceipt?.receipt_hash || null,
180
+ }
181
+ : { error: 'qa-court-did-not-run' },
182
+ };
183
+
184
+ try {
185
+ mkdirSync(dirname(HIVE_WAL_PATH), { recursive: true });
186
+ appendFileSync(HIVE_WAL_PATH, JSON.stringify(walEvent) + '\n', 'utf8');
187
+ if (qaCourtReceipt) {
188
+ appendFileSync(HIVE_WAL_PATH, JSON.stringify(qaCourtReceipt) + '\n', 'utf8');
189
+ }
190
+ summary.walAppended = true;
191
+
192
+ // 5. First-class hardening loop: gap or non-verified QA verdict
193
+ // triggers a directive the next pre-emit autoload reads and
194
+ // force-adds to invocationRequired.
195
+ if (gap.length > 0 || (qaVerdict && qaVerdict !== 'verified' && qaVerdict !== 'verified_narrowly')) {
196
+ const hardeningEvent = {
197
+ schema: 'aria.atlas_orchestrator_hardening_directive.v1',
198
+ at,
199
+ session_id: sessionId,
200
+ surface: 'claude-code',
201
+ reason: gap.length > 0
202
+ ? `adherence_gap: ${gap.length}/${selected.length} skills selected-by-atlas not invoked`
203
+ : `qa_verdict_below_threshold: ${qaVerdict}`,
204
+ forceInvokeNextTurn: gap,
205
+ qaVerdict,
206
+ adherenceRatio,
207
+ sourceTurnOutcomeAt: at,
208
+ };
209
+ appendFileSync(HIVE_WAL_PATH, JSON.stringify(hardeningEvent) + '\n', 'utf8');
210
+ summary.hardeningEmitted = true;
211
+ process.stderr.write(`${LOG}:hardening reason="${hardeningEvent.reason}" forceInvokeNextTurn=[${gap.join(',')}] qaVerdict=${qaVerdict}\n`);
212
+ }
213
+ process.stderr.write(`${LOG}:emit selected=${selected.length} honored=${honored.length} gap=${gap.length} adherence=${adherenceRatio} invoked=${invokedSkills.length} qaVerdict=${qaVerdict || 'none'} session=${sessionId}\n`);
214
+ } catch (walErr) {
215
+ loudErr('wal_write', `${walErr instanceof Error ? walErr.message : String(walErr)} path=${HIVE_WAL_PATH}`);
216
+ }
217
+ } catch (outer) {
218
+ loudErr('outer_error', outer instanceof Error ? outer.message : String(outer));
219
+ }
220
+ return summary;
221
+ }
@@ -38,28 +38,105 @@ export function extractLensTexts(cognitionInner, lensNames = ALL_LENS_NAMES) {
38
38
  return out;
39
39
  }
40
40
 
41
+ // M9.DRIFT.10u — credential-shape redaction for diagnostic content_preview
42
+ // fields. Local copy so this lib has no dependency on coach-kernel
43
+ // (avoids circular imports across hook libs).
44
+ function redactPotentialSecretsInPreview(text) {
45
+ return String(text || '')
46
+ .replace(/Bearer\s+[A-Za-z0-9._~+\/-]{12,}/gi, 'Bearer [redacted]')
47
+ .replace(/\bsk-[A-Za-z0-9_-]{12,}\b/g, '[redacted-secret]')
48
+ .replace(/\bgh[pousr]_[A-Za-z0-9_]{12,}\b/g, '[redacted-secret]')
49
+ .replace(/\bxox[baprs]-[A-Za-z0-9-]{12,}\b/g, '[redacted-secret]')
50
+ .replace(/\bAKIA[0-9A-Z]{16}\b/g, '[redacted-secret]');
51
+ }
52
+
53
+ // M9.DRIFT.10u — find "<word>:" patterns inside the cognition block
54
+ // that look like lens declarations but are NOT in any canonical set.
55
+ // Surfaces operator-emitted non-canonical lens names for self-correction
56
+ // (the agent emitting sirat/adl/rahma/sabr finds out exactly which
57
+ // names fell outside the canonical sets, instead of getting 0/8 with
58
+ // no breakdown).
59
+ function findUnrecognizedTokens(searchSpace, knownLensNames) {
60
+ const knownLower = new Set(knownLensNames.map((n) => n.toLowerCase()));
61
+ const out = new Set();
62
+ const rx = /(?:^|\n)\s*([A-Za-z][A-Za-z_-]{1,40})\s*:/g;
63
+ let m;
64
+ while ((m = rx.exec(searchSpace)) !== null) {
65
+ const token = m[1].toLowerCase();
66
+ if (!knownLower.has(token)) out.add(token);
67
+ }
68
+ return [...out];
69
+ }
70
+
71
+ /**
72
+ * Detect cognition lenses in the given text.
73
+ *
74
+ * BACKWARDS-COMPATIBLE: existing top-level fields {count, names,
75
+ * matchedSet} preserved at root for callers destructuring those.
76
+ *
77
+ * M9.DRIFT.10u additive fields:
78
+ * blockFound: boolean — whether a <cognition>...</cognition> block was found
79
+ * perLens: [{lens, present, charCount, content_preview}] — one entry per
80
+ * iterated canonical lens; content_preview is 50-char redacted slice
81
+ * unrecognizedTokens: string[] — "<word>:" patterns inside the cognition
82
+ * block that look like lens declarations but are NOT in any canonical set
83
+ * canonicalSets: { older: string[], newer: string[] } — the canonical
84
+ * sets the parser attempted, surfaced for operator visibility
85
+ */
41
86
  export function detectCognitionLenses(text, {
42
87
  minChars = 0,
43
88
  placeholderRx = null,
44
89
  cognitionBlockRx = /<cognition>([\s\S]*?)<\/cognition>/i,
45
90
  lensNames = ALL_LENS_NAMES,
46
91
  } = {}) {
47
- if (!text) return { count: 0, names: [], matchedSet: null };
92
+ if (!text) {
93
+ return {
94
+ count: 0,
95
+ names: [],
96
+ matchedSet: null,
97
+ blockFound: false,
98
+ perLens: [],
99
+ unrecognizedTokens: [],
100
+ canonicalSets: { older: [...LENS_NAMES_OLDER], newer: [...LENS_NAMES_NEWER] },
101
+ };
102
+ }
48
103
  const block = text.match(cognitionBlockRx);
104
+ const blockFound = Boolean(block);
49
105
  const searchSpace = block ? block[1] : text;
50
106
  const lensTexts = extractLensTexts(searchSpace, lensNames);
51
107
  const names = [];
108
+ const perLens = [];
52
109
  for (const lens of lensNames) {
53
110
  const content = (lensTexts[lens] || '').trim();
54
- if (!content) continue;
55
- if (minChars > 0 && content.length < minChars) continue;
56
- if (placeholderRx && placeholderRx.test(content)) continue;
57
- names.push(lens);
111
+ const passesMin = !content || (minChars > 0 ? content.length >= minChars : true);
112
+ const passesPlaceholder = !content || !placeholderRx || !placeholderRx.test(content);
113
+ const present = Boolean(content) && passesMin && passesPlaceholder;
114
+ if (present) names.push(lens);
115
+ perLens.push({
116
+ lens,
117
+ present,
118
+ charCount: content.length,
119
+ content_preview: content
120
+ ? redactPotentialSecretsInPreview(content).slice(0, 50)
121
+ : '',
122
+ });
58
123
  }
59
124
 
60
125
  const matchedSet =
61
126
  [LENS_NAMES_OLDER, LENS_NAMES_NEWER]
62
127
  .find((candidateSet) => candidateSet.every((name) => names.includes(name))) || null;
63
128
 
64
- return { count: names.length, names, matchedSet };
129
+ const unrecognizedTokens = blockFound
130
+ ? findUnrecognizedTokens(searchSpace, lensNames)
131
+ : [];
132
+
133
+ return {
134
+ count: names.length,
135
+ names,
136
+ matchedSet,
137
+ blockFound,
138
+ perLens,
139
+ unrecognizedTokens,
140
+ canonicalSets: { older: [...LENS_NAMES_OLDER], newer: [...LENS_NAMES_NEWER] },
141
+ };
65
142
  }
@@ -0,0 +1,248 @@
1
+ // coach-intent-classifier.mjs
2
+ //
3
+ // Hybrid intent classifier for the runtime coach's
4
+ // `unverified_deploy_or_infra_mutation` block reason.
5
+ //
6
+ // Per Hamza directive 2026-05-09: deterministic-first-pass with LLM
7
+ // fallback for ambiguous cases — not deterministic alone. The remote
8
+ // runtime coach pattern-matches prose vocabulary regardless of whether
9
+ // the prose actually CLAIMS that a mutation occurred. This wrapper
10
+ // adds intent discrimination so legitimate proposals/reports/descriptions
11
+ // don't trigger the block.
12
+ //
13
+ // Intent taxonomy:
14
+ // CLAIM — asserts that a mutation HAS occurred ("I deployed X", "X was rolled out")
15
+ // PROPOSE — recommends a future action ("we should deploy", "the next step would be")
16
+ // REPORT — describes work without claiming done ("source corrections recorded", "fix prepared")
17
+ // DESCRIBE — meta-discussion of mutation as a topic ("the deploy step", "rollout patterns")
18
+ //
19
+ // Only CLAIM intent without backing evidence triggers a real block.
20
+ // PROPOSE/REPORT/DESCRIBE are valid prose that the dumb regex
21
+ // false-positives. The hybrid downgrades those to warn-only.
22
+
23
+ import { readFileSync } from 'node:fs';
24
+
25
+ const FLASH_MODEL_DEFAULTS = {
26
+ endpoint: process.env.ARIA_FLASH_ENDPOINT || 'http://localhost:30080/api/aria/speak',
27
+ model: process.env.ARIA_FLASH_MODEL || 'deepseek-v4-flash',
28
+ timeoutMs: Math.max(2000, Math.min(15000, Number(process.env.ARIA_FLASH_TIMEOUT_MS || '8000'))),
29
+ };
30
+
31
+ // Vocabulary the upstream coach pattern-matches as deploy/infra mutation.
32
+ // Used by deterministic pass to identify which prose substrings would
33
+ // have triggered the upstream regex.
34
+ const MUTATION_VOCAB_RX = /\b(?:deploy|deployed|deploys|rollout|rolling|rolled|rebuild|rebuilt|build|built|kubectl|docker|push|pushed|image|imaged|pod|pods|set image|apply|applied|mutate|mutation|infrastructure|infra|provision|provisioned|migrate|migrated|patch|patched|restart|restarted)\b/i;
35
+
36
+ // Past-tense completion verbs that, paired with mutation vocab, signal CLAIM intent.
37
+ const COMPLETION_PAST_TENSE_RX = /\b(?:was|were|has been|have been|got|is now|are now|just|already|successfully)\s+(?:deployed|rolled out|rebuilt|pushed|set|applied|restarted|patched|live|active|running)\b/i;
38
+
39
+ // First-person past-tense action claims.
40
+ const FIRST_PERSON_CLAIM_RX = /\bI\s+(?:deployed|rolled out|rebuilt|pushed|set the image|applied|restarted|patched|published|shipped|landed)\b/i;
41
+
42
+ // Modal/proposal markers — future or conditional, not claim.
43
+ const PROPOSE_MARKER_RX = /\b(?:will|would|could|might|may|recommend|recommended|suggest|suggested|propose|proposed|next step|next steps|going to|plan to|intend|consider|let'?s|let us|should|need to)\b/i;
44
+
45
+ // Authorization-pending markers — explicitly waiting on external action.
46
+ const PENDING_AUTH_RX = /\b(?:awaiting|pending|held|holding|queued|staged|prepared|ready to|authoriz|authorisation|owner authoriz|owner word|your nod|your direction|after your|once you|with your)\b/i;
47
+
48
+ // Past-tense reporting markers — describing work done WITHOUT mutation claim.
49
+ const REPORT_MARKER_RX = /\b(?:source corrections recorded|source edits applied|source fix(?:es)? (?:landed|in source|in place|recorded)|fix prepared|edited the source|edited the file|wrote (?:the|to) source|wrote the file|recorded in (?:source|the ledger)|justification (?:written|prepared|accepted)|sweep (?:returned|confirms|cleaned))\b/i;
50
+
51
+ // Evidence anchors — when a claim has these nearby, it's a verified claim, not unverified.
52
+ const EVIDENCE_ANCHOR_RX = /\b(?:exit\s*code|HTTP\s+\d{3}|status\s*=\s*\d|sha256:[a-f0-9]+|line\s+\d+|log shows|log shows that|returned|returns|received\s+\d|response\s+(?:body|payload|code)|verified by|probe (?:returned|showed)|grep (?:found|returned)|test (?:passed|failed))\b/i;
53
+
54
+ // Meta-discussion markers — topic-level discussion, not action.
55
+ const META_DISCUSSION_RX = /\b(?:the (?:deploy|rollout|build|rebuild) (?:step|action|phase|process|pattern|mechanism|approach)|deploy[- ]?(?:class|gating|authorization|justification|pattern)|how (?:we|to) deploy|what (?:happens|happened) (?:on|during) (?:deploy|rollout))\b/i;
56
+
57
+ /**
58
+ * Deterministic intent classification.
59
+ *
60
+ * Returns:
61
+ * { intent: 'CLAIM' | 'PROPOSE' | 'REPORT' | 'DESCRIBE' | 'AMBIGUOUS',
62
+ * confidence: 0.0-1.0,
63
+ * features: [list of matched feature names],
64
+ * evidenceAnchored: bool,
65
+ * mutationVocabPresent: bool }
66
+ */
67
+ export function classifyIntentDeterministic(prose) {
68
+ const text = String(prose || '');
69
+ const features = [];
70
+ if (!text.trim()) {
71
+ return { intent: 'DESCRIBE', confidence: 1.0, features: ['empty'], evidenceAnchored: false, mutationVocabPresent: false };
72
+ }
73
+ const mutationVocabPresent = MUTATION_VOCAB_RX.test(text);
74
+ if (!mutationVocabPresent) {
75
+ return { intent: 'DESCRIBE', confidence: 0.95, features: ['no-mutation-vocab'], evidenceAnchored: false, mutationVocabPresent: false };
76
+ }
77
+ if (FIRST_PERSON_CLAIM_RX.test(text)) features.push('first-person-claim');
78
+ if (COMPLETION_PAST_TENSE_RX.test(text)) features.push('completion-past-tense');
79
+ if (PROPOSE_MARKER_RX.test(text)) features.push('propose-marker');
80
+ if (PENDING_AUTH_RX.test(text)) features.push('pending-auth');
81
+ if (REPORT_MARKER_RX.test(text)) features.push('report-marker');
82
+ if (EVIDENCE_ANCHOR_RX.test(text)) features.push('evidence-anchor');
83
+ if (META_DISCUSSION_RX.test(text)) features.push('meta-discussion');
84
+ const evidenceAnchored = features.includes('evidence-anchor');
85
+
86
+ // Strong CLAIM signals: first-person past-tense action without evidence anchor and without pending-auth.
87
+ const claimStrong = features.includes('first-person-claim') && !evidenceAnchored && !features.includes('pending-auth');
88
+ if (claimStrong) {
89
+ return { intent: 'CLAIM', confidence: 0.85, features, evidenceAnchored, mutationVocabPresent };
90
+ }
91
+
92
+ // Strong PROPOSE: propose marker AND no first-person-claim AND no completion-past-tense.
93
+ const proposeStrong = features.includes('propose-marker') && !features.includes('first-person-claim') && !features.includes('completion-past-tense');
94
+ if (proposeStrong) {
95
+ return { intent: 'PROPOSE', confidence: 0.85, features, evidenceAnchored, mutationVocabPresent };
96
+ }
97
+
98
+ // Strong REPORT: report-marker present, NOT first-person-claim with mutation completion verb.
99
+ const reportStrong = features.includes('report-marker') && !features.includes('first-person-claim');
100
+ if (reportStrong) {
101
+ return { intent: 'REPORT', confidence: 0.85, features, evidenceAnchored, mutationVocabPresent };
102
+ }
103
+
104
+ // Strong DESCRIBE: meta-discussion or pending-auth without first-person-claim.
105
+ const describeStrong = (features.includes('meta-discussion') || features.includes('pending-auth')) && !features.includes('first-person-claim');
106
+ if (describeStrong) {
107
+ return { intent: 'DESCRIBE', confidence: 0.80, features, evidenceAnchored, mutationVocabPresent };
108
+ }
109
+
110
+ // Weak CLAIM (completion-past-tense without first-person but no pending-auth or evidence)
111
+ if (features.includes('completion-past-tense') && !evidenceAnchored && !features.includes('pending-auth')) {
112
+ return { intent: 'CLAIM', confidence: 0.65, features, evidenceAnchored, mutationVocabPresent };
113
+ }
114
+
115
+ // Verified CLAIM (completion + evidence)
116
+ if (features.includes('completion-past-tense') && evidenceAnchored) {
117
+ return { intent: 'CLAIM', confidence: 0.85, features: [...features, 'verified-claim'], evidenceAnchored, mutationVocabPresent };
118
+ }
119
+
120
+ // AI-11803-QA-GAP2 (2026-05-12): first-person CLAIM with evidence anchor
121
+ // even without the aux-verb completion pattern ("was deployed", "has been
122
+ // rolled out"). The first-person form ("I deployed X — exit 0") doesn't
123
+ // match COMPLETION_PAST_TENSE_RX because that regex requires an auxiliary
124
+ // verb. Without this branch, verified first-person claims fall to AMBIGUOUS
125
+ // and the posture downgrade preserves the hard_block — over-conservative.
126
+ // Route to CLAIM(evidenceAnchored=true) so decisionFromIntent → WARN (allow).
127
+ if (features.includes('first-person-claim') && evidenceAnchored) {
128
+ return { intent: 'CLAIM', confidence: 0.85, features: [...features, 'verified-claim-first-person'], evidenceAnchored, mutationVocabPresent };
129
+ }
130
+
131
+ return { intent: 'AMBIGUOUS', confidence: 0.5, features, evidenceAnchored, mutationVocabPresent };
132
+ }
133
+
134
+ /**
135
+ * LLM-backed intent classification via deepseek-v4-flash (or configured model).
136
+ * Used as fallback when deterministic returns AMBIGUOUS.
137
+ *
138
+ * Returns same shape as classifyIntentDeterministic, but with `source: 'llm'`
139
+ * and adds a `rationale` field from the model.
140
+ *
141
+ * Falls back to AMBIGUOUS with source: 'llm-error' if the call fails.
142
+ */
143
+ export async function classifyIntentLLM(prose, { endpoint = FLASH_MODEL_DEFAULTS.endpoint, model = FLASH_MODEL_DEFAULTS.model, timeoutMs = FLASH_MODEL_DEFAULTS.timeoutMs, apiKey = null } = {}) {
144
+ const text = String(prose || '').slice(0, 6000);
145
+ if (!text.trim()) {
146
+ return { intent: 'DESCRIBE', confidence: 0.9, features: ['empty'], evidenceAnchored: false, mutationVocabPresent: false, source: 'llm-skipped-empty' };
147
+ }
148
+ const systemPrompt = `You are an intent classifier for assistant prose. Output STRICT JSON only, no prose, no markdown.
149
+
150
+ Classify the prose intent regarding infrastructure mutation language (deploy, rollout, rebuild, push, kubectl, etc).
151
+
152
+ Categories:
153
+ - CLAIM: asserts a mutation HAS occurred (past tense + first-person OR third-person completion). Triggers a real block ONLY when no evidence anchor is present in the prose.
154
+ - PROPOSE: recommends a future or conditional action. Modal verbs (will, would, should, could, recommend, suggest, next step). Not a real block.
155
+ - REPORT: describes work done at the SOURCE level WITHOUT claiming runtime mutation (source corrections recorded, fix prepared, edits applied to file). Not a real block.
156
+ - DESCRIBE: meta-discussion of mutation as a topic, OR pending authorization framing. Not a real block.
157
+
158
+ Output schema (strict JSON):
159
+ {
160
+ "intent": "CLAIM" | "PROPOSE" | "REPORT" | "DESCRIBE",
161
+ "confidence": 0.0..1.0,
162
+ "evidenceAnchored": boolean,
163
+ "rationale": "one sentence why"
164
+ }
165
+
166
+ Do NOT include the prose in your output. Do NOT include any other fields.`;
167
+ const body = {
168
+ message: `Classify this prose:\n\n---PROSE_START---\n${text}\n---PROSE_END---`,
169
+ systemPrompt,
170
+ model,
171
+ metadata: {
172
+ platform: 'aria-coach-intent-classifier',
173
+ use_case: 'block_decision_second_look',
174
+ },
175
+ };
176
+ const headers = { 'Content-Type': 'application/json' };
177
+ if (apiKey) headers['Authorization'] = `Bearer ${apiKey}`;
178
+ try {
179
+ const ctrl = new AbortController();
180
+ const timer = setTimeout(() => ctrl.abort(), timeoutMs);
181
+ const resp = await fetch(endpoint, {
182
+ method: 'POST',
183
+ headers,
184
+ body: JSON.stringify(body),
185
+ signal: ctrl.signal,
186
+ });
187
+ clearTimeout(timer);
188
+ if (!resp.ok) {
189
+ return { intent: 'AMBIGUOUS', confidence: 0.4, features: ['llm-http-' + resp.status], evidenceAnchored: false, mutationVocabPresent: true, source: 'llm-error', rationale: `HTTP ${resp.status}` };
190
+ }
191
+ const json = await resp.json();
192
+ const raw = String(json?.response || json?.message || json?.text || '').trim();
193
+ // Extract JSON from possibly noisy response.
194
+ const match = raw.match(/\{[\s\S]*\}/);
195
+ if (!match) {
196
+ return { intent: 'AMBIGUOUS', confidence: 0.4, features: ['llm-no-json'], evidenceAnchored: false, mutationVocabPresent: true, source: 'llm-error', rationale: 'no JSON in LLM response' };
197
+ }
198
+ const parsed = JSON.parse(match[0]);
199
+ const intent = ['CLAIM', 'PROPOSE', 'REPORT', 'DESCRIBE'].includes(parsed.intent) ? parsed.intent : 'AMBIGUOUS';
200
+ return {
201
+ intent,
202
+ confidence: typeof parsed.confidence === 'number' ? Math.max(0, Math.min(1, parsed.confidence)) : 0.6,
203
+ features: ['llm-classified'],
204
+ evidenceAnchored: parsed.evidenceAnchored === true,
205
+ mutationVocabPresent: true,
206
+ source: 'llm',
207
+ rationale: typeof parsed.rationale === 'string' ? parsed.rationale.slice(0, 280) : '',
208
+ };
209
+ } catch (err) {
210
+ return { intent: 'AMBIGUOUS', confidence: 0.4, features: ['llm-exception'], evidenceAnchored: false, mutationVocabPresent: true, source: 'llm-error', rationale: err instanceof Error ? err.message : String(err) };
211
+ }
212
+ }
213
+
214
+ /**
215
+ * Hybrid classifier: deterministic first, LLM fallback only for AMBIGUOUS.
216
+ *
217
+ * Returns:
218
+ * { ...classification, decision: 'BLOCK' | 'OVERRIDE' | 'WARN', source: 'deterministic' | 'llm-fallback' }
219
+ *
220
+ * Decision rules:
221
+ * - CLAIM (high confidence) without evidence → BLOCK
222
+ * - CLAIM with evidence → WARN (verified)
223
+ * - PROPOSE / REPORT / DESCRIBE → OVERRIDE (downgrade upstream block)
224
+ * - AMBIGUOUS at deterministic layer → call LLM, then re-evaluate
225
+ */
226
+ export async function hybridClassify(prose, opts = {}) {
227
+ const det = classifyIntentDeterministic(prose);
228
+ if (det.intent !== 'AMBIGUOUS') {
229
+ return decisionFromIntent(det, 'deterministic');
230
+ }
231
+ // LLM fallback path
232
+ const llm = await classifyIntentLLM(prose, opts);
233
+ return decisionFromIntent(llm, llm.source === 'llm' ? 'llm-fallback' : 'llm-error-fallback');
234
+ }
235
+
236
+ function decisionFromIntent(classification, source) {
237
+ let decision;
238
+ if (classification.intent === 'CLAIM' && !classification.evidenceAnchored) {
239
+ decision = 'BLOCK'; // real unverified claim
240
+ } else if (classification.intent === 'CLAIM' && classification.evidenceAnchored) {
241
+ decision = 'WARN'; // verified claim, log but allow
242
+ } else if (classification.intent === 'AMBIGUOUS') {
243
+ decision = 'WARN'; // can't tell — be conservative, log but allow with warning
244
+ } else {
245
+ decision = 'OVERRIDE'; // PROPOSE / REPORT / DESCRIBE — false-positive of upstream regex
246
+ }
247
+ return { ...classification, decision, source };
248
+ }