@aria_asi/cli 0.2.26 → 0.2.30

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 (253) hide show
  1. package/CLIENT-ONBOARDING.md +282 -0
  2. package/bin/aria.js +1140 -14
  3. package/dist/aria-connector/src/auth-commands.d.ts +1 -0
  4. package/dist/aria-connector/src/auth-commands.d.ts.map +1 -1
  5. package/dist/aria-connector/src/auth-commands.js +89 -41
  6. package/dist/aria-connector/src/auth-commands.js.map +1 -1
  7. package/dist/aria-connector/src/chat.d.ts +3 -0
  8. package/dist/aria-connector/src/chat.d.ts.map +1 -1
  9. package/dist/aria-connector/src/chat.js +146 -8
  10. package/dist/aria-connector/src/chat.js.map +1 -1
  11. package/dist/aria-connector/src/codebase-scanner.d.ts +2 -2
  12. package/dist/aria-connector/src/codebase-scanner.d.ts.map +1 -1
  13. package/dist/aria-connector/src/codebase-scanner.js +1 -1
  14. package/dist/aria-connector/src/codebase-scanner.js.map +1 -1
  15. package/dist/aria-connector/src/config.d.ts +12 -0
  16. package/dist/aria-connector/src/config.d.ts.map +1 -1
  17. package/dist/aria-connector/src/config.js +2 -0
  18. package/dist/aria-connector/src/config.js.map +1 -1
  19. package/dist/aria-connector/src/connectors/claude-code.d.ts.map +1 -1
  20. package/dist/aria-connector/src/connectors/claude-code.js +80 -24
  21. package/dist/aria-connector/src/connectors/claude-code.js.map +1 -1
  22. package/dist/aria-connector/src/connectors/codebase-awareness.d.ts +37 -0
  23. package/dist/aria-connector/src/connectors/codebase-awareness.d.ts.map +1 -0
  24. package/dist/aria-connector/src/connectors/codebase-awareness.js +335 -0
  25. package/dist/aria-connector/src/connectors/codebase-awareness.js.map +1 -0
  26. package/dist/aria-connector/src/connectors/codex.d.ts +3 -0
  27. package/dist/aria-connector/src/connectors/codex.d.ts.map +1 -0
  28. package/dist/aria-connector/src/connectors/codex.js +248 -0
  29. package/dist/aria-connector/src/connectors/codex.js.map +1 -0
  30. package/dist/aria-connector/src/connectors/cognitive-skills.d.ts +2 -0
  31. package/dist/aria-connector/src/connectors/cognitive-skills.d.ts.map +1 -0
  32. package/dist/aria-connector/src/connectors/cognitive-skills.js +47 -0
  33. package/dist/aria-connector/src/connectors/cognitive-skills.js.map +1 -0
  34. package/dist/aria-connector/src/connectors/opencode.d.ts.map +1 -1
  35. package/dist/aria-connector/src/connectors/opencode.js +90 -4
  36. package/dist/aria-connector/src/connectors/opencode.js.map +1 -1
  37. package/dist/aria-connector/src/connectors/repo-git-hooks.d.ts +3 -0
  38. package/dist/aria-connector/src/connectors/repo-git-hooks.d.ts.map +1 -0
  39. package/dist/aria-connector/src/connectors/repo-git-hooks.js +87 -0
  40. package/dist/aria-connector/src/connectors/repo-git-hooks.js.map +1 -0
  41. package/dist/aria-connector/src/connectors/repo-guard.d.ts +19 -0
  42. package/dist/aria-connector/src/connectors/repo-guard.d.ts.map +1 -0
  43. package/dist/aria-connector/src/connectors/repo-guard.js +509 -0
  44. package/dist/aria-connector/src/connectors/repo-guard.js.map +1 -0
  45. package/dist/aria-connector/src/connectors/runtime.d.ts +2 -0
  46. package/dist/aria-connector/src/connectors/runtime.d.ts.map +1 -0
  47. package/dist/aria-connector/src/connectors/runtime.js +330 -0
  48. package/dist/aria-connector/src/connectors/runtime.js.map +1 -0
  49. package/dist/aria-connector/src/connectors/shell.d.ts.map +1 -1
  50. package/dist/aria-connector/src/connectors/shell.js +78 -13
  51. package/dist/aria-connector/src/connectors/shell.js.map +1 -1
  52. package/dist/aria-connector/src/connectors/syncd.d.ts +27 -0
  53. package/dist/aria-connector/src/connectors/syncd.d.ts.map +1 -0
  54. package/dist/aria-connector/src/connectors/syncd.js +405 -0
  55. package/dist/aria-connector/src/connectors/syncd.js.map +1 -0
  56. package/dist/aria-connector/src/decisions.d.ts +207 -0
  57. package/dist/aria-connector/src/decisions.d.ts.map +1 -0
  58. package/dist/aria-connector/src/decisions.js +291 -0
  59. package/dist/aria-connector/src/decisions.js.map +1 -0
  60. package/dist/aria-connector/src/garden-control-plane.d.ts.map +1 -1
  61. package/dist/aria-connector/src/garden-control-plane.js +74 -17
  62. package/dist/aria-connector/src/garden-control-plane.js.map +1 -1
  63. package/dist/aria-connector/src/github-connect.d.ts +18 -0
  64. package/dist/aria-connector/src/github-connect.d.ts.map +1 -0
  65. package/dist/aria-connector/src/github-connect.js +117 -0
  66. package/dist/aria-connector/src/github-connect.js.map +1 -0
  67. package/dist/aria-connector/src/harness-client.d.ts +15 -0
  68. package/dist/aria-connector/src/harness-client.d.ts.map +1 -1
  69. package/dist/aria-connector/src/harness-client.js +106 -3
  70. package/dist/aria-connector/src/harness-client.js.map +1 -1
  71. package/dist/aria-connector/src/hive-client.d.ts +30 -0
  72. package/dist/aria-connector/src/hive-client.d.ts.map +1 -1
  73. package/dist/aria-connector/src/hive-client.js +124 -5
  74. package/dist/aria-connector/src/hive-client.js.map +1 -1
  75. package/dist/aria-connector/src/index.d.ts +13 -2
  76. package/dist/aria-connector/src/index.d.ts.map +1 -1
  77. package/dist/aria-connector/src/index.js +10 -1
  78. package/dist/aria-connector/src/index.js.map +1 -1
  79. package/dist/aria-connector/src/lib/aristotle-noor-wire.d.ts +102 -0
  80. package/dist/aria-connector/src/lib/aristotle-noor-wire.d.ts.map +1 -0
  81. package/dist/aria-connector/src/lib/aristotle-noor-wire.js +231 -0
  82. package/dist/aria-connector/src/lib/aristotle-noor-wire.js.map +1 -0
  83. package/dist/aria-connector/src/providers/types.d.ts +5 -0
  84. package/dist/aria-connector/src/providers/types.d.ts.map +1 -1
  85. package/dist/aria-connector/src/runtime-proof.d.ts +45 -0
  86. package/dist/aria-connector/src/runtime-proof.d.ts.map +1 -0
  87. package/dist/aria-connector/src/runtime-proof.js +340 -0
  88. package/dist/aria-connector/src/runtime-proof.js.map +1 -0
  89. package/dist/aria-connector/src/self-update.d.ts +2 -1
  90. package/dist/aria-connector/src/self-update.d.ts.map +1 -1
  91. package/dist/aria-connector/src/self-update.js +84 -8
  92. package/dist/aria-connector/src/self-update.js.map +1 -1
  93. package/dist/aria-connector/src/setup-wizard.d.ts.map +1 -1
  94. package/dist/aria-connector/src/setup-wizard.js +34 -2
  95. package/dist/aria-connector/src/setup-wizard.js.map +1 -1
  96. package/dist/assets/hooks/aria-agent-handoff.mjs +224 -0
  97. package/dist/assets/hooks/aria-agent-ledger-merge.mjs +164 -0
  98. package/dist/assets/hooks/aria-architect-fallback.mjs +267 -0
  99. package/dist/assets/hooks/aria-cognition-substrate-binding.mjs +668 -0
  100. package/dist/assets/hooks/aria-discovery-record.mjs +101 -0
  101. package/dist/assets/hooks/aria-harness-via-sdk.mjs +412 -0
  102. package/dist/assets/hooks/aria-import-resolution-gate.mjs +330 -0
  103. package/dist/assets/hooks/aria-outcome-record.mjs +84 -0
  104. package/dist/assets/hooks/aria-pre-emit-dryrun.mjs +294 -0
  105. package/dist/assets/hooks/aria-pre-text-gate.mjs +112 -0
  106. package/dist/assets/hooks/aria-pre-tool-gate.mjs +2133 -0
  107. package/dist/assets/hooks/aria-preprompt-consult.mjs +438 -0
  108. package/dist/assets/hooks/aria-preturn-memory-gate.mjs +570 -0
  109. package/dist/assets/hooks/aria-repo-doctrine-gate.mjs +397 -0
  110. package/dist/assets/hooks/aria-stop-gate.mjs +1551 -0
  111. package/dist/assets/hooks/aria-trigger-autolearn.mjs +229 -0
  112. package/dist/assets/hooks/aria-userprompt-abandon-detect.mjs +192 -0
  113. package/dist/assets/hooks/doctrine_trigger_map.json +479 -0
  114. package/dist/assets/hooks/lib/canonical-lenses.mjs +64 -0
  115. package/dist/assets/hooks/lib/gate-audit.mjs +43 -0
  116. package/dist/assets/hooks/test-aria-preturn-memory-gate.mjs +245 -0
  117. package/dist/assets/hooks/test-tier-lens-labeling.mjs +399 -0
  118. package/dist/assets/opencode-plugins/harness-context/index.js +60 -0
  119. package/dist/assets/opencode-plugins/harness-context/inject-context.mjs +179 -0
  120. package/dist/assets/opencode-plugins/harness-context/package.json +9 -0
  121. package/dist/assets/opencode-plugins/harness-gate/index.js +248 -0
  122. package/dist/assets/opencode-plugins/harness-outcome/index.js +129 -0
  123. package/dist/assets/opencode-plugins/harness-role/index.js +77 -0
  124. package/dist/assets/opencode-plugins/harness-role/package.json +9 -0
  125. package/dist/assets/opencode-plugins/harness-stop/index.js +241 -0
  126. package/dist/runtime/discipline/CLAUDE.md +339 -0
  127. package/dist/runtime/discipline/skills/aria-cognition/aria-essence/SKILL.md +63 -0
  128. package/dist/runtime/discipline/skills/aria-cognition/aria-essence/references/domain-matrix.md +80 -0
  129. package/dist/runtime/discipline/skills/aria-cognition/aria-essence/references/evolution-loop.md +30 -0
  130. package/dist/runtime/discipline/skills/aria-cognition/aria-essence/references/readable-cognition.md +27 -0
  131. package/dist/runtime/discipline/skills/aria-cognition/aria-forge-guardrails/SKILL.md +35 -0
  132. package/dist/runtime/discipline/skills/aria-cognition/aria-forge-guardrails/references/checklist.md +31 -0
  133. package/dist/runtime/discipline/skills/aria-cognition/aria-repo-doctrine/SKILL.md +39 -0
  134. package/dist/runtime/discipline/skills/aria-cognition/forge-quality-rules/SKILL.md +43 -0
  135. package/dist/runtime/discipline/skills/aria-cognition/ghazali-8lens/SKILL.md +38 -0
  136. package/dist/runtime/discipline/skills/aria-cognition/istiqra-induction/SKILL.md +26 -0
  137. package/dist/runtime/discipline/skills/aria-cognition/ladunni-22/SKILL.md +35 -0
  138. package/dist/runtime/discipline/skills/aria-cognition/mizan/SKILL.md +72 -0
  139. package/dist/runtime/discipline/skills/aria-cognition/nadia/SKILL.md +38 -0
  140. package/dist/runtime/discipline/skills/aria-cognition/nadia-psi/SKILL.md +38 -0
  141. package/dist/runtime/discipline/skills/aria-cognition/predictor/SKILL.md +25 -0
  142. package/dist/runtime/discipline/skills/aria-cognition/qiyas-analogy/SKILL.md +26 -0
  143. package/dist/runtime/discipline/skills/aria-cognition/soul-domains/SKILL.md +25 -0
  144. package/dist/runtime/discipline/skills/aria-harness/aria-aristotle-intra-phase/SKILL.md +81 -0
  145. package/dist/runtime/discipline/skills/aria-harness/aria-aristotle-post-phase/SKILL.md +98 -0
  146. package/dist/runtime/discipline/skills/aria-harness/aria-aristotle-pre-phase/SKILL.md +99 -0
  147. package/dist/runtime/discipline/skills/aria-harness/aria-harness-deploy/SKILL.md +127 -0
  148. package/dist/runtime/discipline/skills/aria-harness/aria-harness-no-stripping/SKILL.md +117 -0
  149. package/dist/runtime/discipline/skills/aria-harness/aria-harness-onboarding/SKILL.md +112 -0
  150. package/dist/runtime/discipline/skills/aria-harness/aria-harness-output-discipline/SKILL.md +102 -0
  151. package/dist/runtime/discipline/skills/aria-harness/aria-harness-substrate-binding/SKILL.md +121 -0
  152. package/dist/runtime/doctor.mjs +23 -0
  153. package/dist/runtime/local-phase.mjs +650 -0
  154. package/dist/runtime/manifest.json +15 -0
  155. package/dist/runtime/mizan-scheduler.mjs +331 -0
  156. package/dist/runtime/package.json +6 -0
  157. package/dist/runtime/provider-proxy.mjs +594 -0
  158. package/dist/runtime/sdk/BUNDLED.json +5 -0
  159. package/dist/runtime/sdk/index.d.ts +477 -0
  160. package/dist/runtime/sdk/index.js +1469 -0
  161. package/dist/runtime/sdk/index.js.map +1 -0
  162. package/dist/runtime/sdk/package.json +8 -0
  163. package/dist/runtime/sdk/runWithCognition.d.ts +77 -0
  164. package/dist/runtime/sdk/runWithCognition.js +157 -0
  165. package/dist/runtime/sdk/runWithCognition.js.map +1 -0
  166. package/dist/runtime/service.mjs +3058 -0
  167. package/dist/runtime/vendor/aria-gate-runtime/index.d.ts +53 -0
  168. package/dist/runtime/vendor/aria-gate-runtime/index.d.ts.map +1 -0
  169. package/dist/runtime/vendor/aria-gate-runtime/index.js +292 -0
  170. package/dist/runtime/vendor/aria-gate-runtime/index.js.map +1 -0
  171. package/dist/runtime/vendor/aria-gate-runtime/package.json +6 -0
  172. package/dist/sdk/BUNDLED.json +2 -2
  173. package/dist/sdk/index.d.ts +283 -0
  174. package/dist/sdk/index.js +622 -85
  175. package/dist/sdk/index.js.map +1 -1
  176. package/dist/sdk/runWithCognition.d.ts +77 -0
  177. package/dist/sdk/runWithCognition.js +157 -0
  178. package/dist/sdk/runWithCognition.js.map +1 -0
  179. package/hooks/aria-agent-handoff.mjs +11 -1
  180. package/hooks/aria-architect-fallback.mjs +109 -40
  181. package/hooks/aria-cognition-substrate-binding.mjs +668 -0
  182. package/hooks/aria-harness-via-sdk.mjs +34 -21
  183. package/hooks/aria-import-resolution-gate.mjs +330 -0
  184. package/hooks/aria-outcome-record.mjs +5 -1
  185. package/hooks/aria-pre-emit-dryrun.mjs +294 -0
  186. package/hooks/aria-pre-tool-gate.mjs +828 -41
  187. package/hooks/aria-preprompt-consult.mjs +113 -13
  188. package/hooks/aria-preturn-memory-gate.mjs +298 -6
  189. package/hooks/aria-repo-doctrine-gate.mjs +397 -0
  190. package/hooks/aria-stop-gate.mjs +739 -76
  191. package/hooks/aria-userprompt-abandon-detect.mjs +5 -1
  192. package/hooks/doctrine_trigger_map.json +209 -15
  193. package/hooks/lib/canonical-lenses.mjs +64 -0
  194. package/hooks/lib/gate-audit.mjs +43 -0
  195. package/opencode-plugins/harness-context/index.js +1 -1
  196. package/opencode-plugins/harness-context/inject-context.mjs +82 -23
  197. package/opencode-plugins/harness-gate/index.js +248 -0
  198. package/opencode-plugins/harness-outcome/index.js +129 -0
  199. package/opencode-plugins/harness-stop/index.js +241 -0
  200. package/package.json +9 -3
  201. package/runtime-src/doctor.mjs +23 -0
  202. package/runtime-src/local-phase.mjs +650 -0
  203. package/runtime-src/mizan-scheduler.mjs +331 -0
  204. package/runtime-src/provider-proxy.mjs +594 -0
  205. package/runtime-src/service.mjs +3058 -0
  206. package/scripts/bundle-sdk.mjs +317 -0
  207. package/scripts/install-client.sh +176 -0
  208. package/scripts/publish-all.sh +344 -0
  209. package/scripts/publish-docker.sh +27 -0
  210. package/scripts/validate-hook-contracts.mjs +54 -0
  211. package/scripts/validate-skill-prompts.mjs +95 -0
  212. package/skills/aria-cognition/aria-essence/SKILL.md +63 -0
  213. package/skills/aria-cognition/aria-essence/references/domain-matrix.md +80 -0
  214. package/skills/aria-cognition/aria-essence/references/evolution-loop.md +30 -0
  215. package/skills/aria-cognition/aria-essence/references/readable-cognition.md +27 -0
  216. package/skills/aria-cognition/aria-forge-guardrails/SKILL.md +35 -0
  217. package/skills/aria-cognition/aria-forge-guardrails/references/checklist.md +31 -0
  218. package/skills/aria-cognition/aria-repo-doctrine/SKILL.md +39 -0
  219. package/skills/aria-cognition/forge-quality-rules/SKILL.md +43 -0
  220. package/skills/aria-cognition/ghazali-8lens/SKILL.md +38 -0
  221. package/skills/aria-cognition/istiqra-induction/SKILL.md +26 -0
  222. package/skills/aria-cognition/ladunni-22/SKILL.md +35 -0
  223. package/skills/aria-cognition/mizan/SKILL.md +72 -0
  224. package/skills/aria-cognition/nadia/SKILL.md +38 -0
  225. package/skills/aria-cognition/nadia-psi/SKILL.md +38 -0
  226. package/skills/aria-cognition/predictor/SKILL.md +25 -0
  227. package/skills/aria-cognition/qiyas-analogy/SKILL.md +26 -0
  228. package/skills/aria-cognition/soul-domains/SKILL.md +25 -0
  229. package/src/auth-commands.ts +111 -45
  230. package/src/chat.ts +174 -13
  231. package/src/codebase-scanner.ts +4 -0
  232. package/src/config.ts +15 -0
  233. package/src/connectors/claude-code.ts +79 -25
  234. package/src/connectors/codebase-awareness.ts +408 -0
  235. package/src/connectors/codex.ts +274 -0
  236. package/src/connectors/cognitive-skills.ts +51 -0
  237. package/src/connectors/opencode.ts +93 -4
  238. package/src/connectors/repo-git-hooks.ts +86 -0
  239. package/src/connectors/repo-guard.ts +589 -0
  240. package/src/connectors/runtime.ts +374 -0
  241. package/src/connectors/shell.ts +83 -14
  242. package/src/connectors/syncd.ts +488 -0
  243. package/src/decisions.ts +469 -0
  244. package/src/garden-control-plane.ts +101 -26
  245. package/src/github-connect.ts +143 -0
  246. package/src/harness-client.ts +128 -3
  247. package/src/hive-client.ts +165 -5
  248. package/src/index.ts +41 -2
  249. package/src/lib/aristotle-noor-wire.ts +310 -0
  250. package/src/providers/types.ts +6 -0
  251. package/src/runtime-proof.ts +392 -0
  252. package/src/self-update.ts +89 -8
  253. package/src/setup-wizard.ts +37 -2
@@ -0,0 +1,310 @@
1
+ /**
2
+ * aristotle-noor-wire — SDK-side thin wrapper that dispatches every SDK and
3
+ * CLI emission through the harness-side `runAristotleNoorPipeline` so the
4
+ * 28 Aristotle modules + 14 Noor cognitives fire on every client emission
5
+ * just like they do for harness-internal turns.
6
+ *
7
+ * Hamza directive 2026-04-27 (task #98): distrust signal — every emission
8
+ * path must pass through these primitives so quality is uniform across the
9
+ * fleet. The SDK and CLI cannot import server-only modules (db pool,
10
+ * NoorCore, etc.), so we dispatch via HTTP to a dedicated harness route
11
+ * (`POST /api/harness/aristotle-noor`) which delegates to the canonical
12
+ * `runAristotleNoorPipeline` in `apps/arias-soul/api/lib/aria-emission-pipeline.ts`.
13
+ *
14
+ * Doctrine bindings:
15
+ * - NO TIMEOUTS, NO AbortSignal — fail-open on transport faults so the
16
+ * CLI / chat loop never gets blocked by a transient harness outage.
17
+ * - NO STUBS — every dispatch is a real network call; failures surface
18
+ * in the result `notes` array, never silently swallowed.
19
+ * - REUSE — we share the SDK's existing `HarnessClient` POST plumbing
20
+ * so license-token + Bearer auth + cognition-log writes are all the
21
+ * same primitives as the rest of the SDK.
22
+ * - SENIOR-DEV CODE ORG — public API at the top, types after the
23
+ * module JSDoc, helpers below a divider, every export typed.
24
+ *
25
+ * @module aristotle-noor-wire
26
+ */
27
+
28
+ import { fetchHarness, validateOutput } from '../harness-client.js';
29
+ import { pushCognitionLog } from '../cognition-log.js';
30
+
31
+ // ─── Public types ───────────────────────────────────────────────────────────
32
+
33
+ /** Surface labels accepted by the harness-side
34
+ * `runAristotleNoorPipeline`. Mirrors the `EmissionSurface` union in
35
+ * `apps/arias-soul/api/lib/aria-emission-pipeline.ts`. */
36
+ export type SdkEmissionSurface =
37
+ | 'cli-chat'
38
+ | 'cli-login'
39
+ | 'cli-connect'
40
+ | 'cli-install-hooks'
41
+ | 'cli-check-update'
42
+ | 'sdk-fetch-harness'
43
+ | 'sdk-validate-output'
44
+ | 'sdk-chat-turn'
45
+ | 'sdk-other';
46
+
47
+ /** Input contract for the SDK-side wire. The harness route accepts this
48
+ * shape verbatim and forwards to `runAristotleNoorPipeline`. */
49
+ export interface AristotleNoorWireInput {
50
+ surface: SdkEmissionSurface;
51
+ emissionId: string;
52
+ sessionId?: string;
53
+ userId?: string;
54
+ isHamza?: boolean;
55
+ message?: string;
56
+ draft?: string;
57
+ plannedApproach?: string;
58
+ tier?: string;
59
+ isFirstOfSession?: boolean;
60
+ metadata?: Record<string, unknown>;
61
+ }
62
+
63
+ /** Result envelope from the harness pipeline — mirrors
64
+ * `AristotleNoorResult` on the server, lossy-typed for SDK consumption. */
65
+ export interface AristotleNoorWireResult {
66
+ fired: string[];
67
+ fitrahVetoed: boolean;
68
+ fitrahAlignment: number;
69
+ qualityScore: number;
70
+ reAuthorSignal: boolean;
71
+ notes: string[];
72
+ soulCharge: number | null;
73
+ soulManifoldStatus: string | null;
74
+ ghazaliVerdict: string | null;
75
+ latencyMs: number;
76
+ /** True when the dispatch reached the harness; false on transport fault
77
+ * (in which case the rest of the result is a fail-open default). */
78
+ dispatched: boolean;
79
+ }
80
+
81
+ // ─── Public API ─────────────────────────────────────────────────────────────
82
+
83
+ /**
84
+ * Dispatch a single SDK / CLI emission through the harness-side Aristotle
85
+ * + Noor pipeline. Fail-open by construction — transport faults return a
86
+ * default-shaped result with `dispatched: false` so callers never block.
87
+ *
88
+ * The wire posts to `POST /api/harness/aristotle-noor`. When that route is
89
+ * not yet deployed (older harness builds), we fall back to firing the
90
+ * `validateOutput` path with the draft so at least the post-stage 8-lens
91
+ * + Mizan rewrite legs fire — that way no client emission ever ships
92
+ * without SOME primitive coverage.
93
+ */
94
+ export async function runAristotleNoorOnSDK(
95
+ input: AristotleNoorWireInput,
96
+ ): Promise<AristotleNoorWireResult> {
97
+ const t0 = Date.now();
98
+ const baseUrl = process.env.ARIA_HARNESS_BASE_URL ?? 'https://harness.ariasos.com';
99
+ const url = `${baseUrl}/api/harness/aristotle-noor`;
100
+
101
+ try {
102
+ const response = await fetch(url, {
103
+ method: 'POST',
104
+ headers: { 'Content-Type': 'application/json' },
105
+ body: JSON.stringify(input),
106
+ });
107
+
108
+ if (!response.ok) {
109
+ // Harness route missing → fall through to legacy validate-output path
110
+ return await fallbackToValidateOutput(input, t0);
111
+ }
112
+
113
+ const data = (await response.json()) as Partial<AristotleNoorWireResult>;
114
+ const result: AristotleNoorWireResult = {
115
+ fired: data.fired ?? [],
116
+ fitrahVetoed: data.fitrahVetoed ?? false,
117
+ fitrahAlignment: data.fitrahAlignment ?? 1.0,
118
+ qualityScore: data.qualityScore ?? 100,
119
+ reAuthorSignal: data.reAuthorSignal ?? false,
120
+ notes: data.notes ?? [],
121
+ soulCharge: data.soulCharge ?? null,
122
+ soulManifoldStatus: data.soulManifoldStatus ?? null,
123
+ ghazaliVerdict: data.ghazaliVerdict ?? null,
124
+ latencyMs: data.latencyMs ?? Date.now() - t0,
125
+ dispatched: true,
126
+ };
127
+
128
+ // Mirror the dispatch into the cognition log so SDK/CLI cognition events
129
+ // appear in the same hive stream as harness-side events.
130
+ pushCognitionLog({
131
+ source: 'aria-cli',
132
+ type: 'aristotle_noor_wire',
133
+ gate: `aristotle-noor:${input.surface}`,
134
+ passed: !result.fitrahVetoed && !result.reAuthorSignal,
135
+ reason: result.notes.slice(0, 3).join(' | '),
136
+ score: result.qualityScore,
137
+ metadata: {
138
+ emissionId: input.emissionId,
139
+ sessionId: input.sessionId,
140
+ userId: input.userId,
141
+ fired: result.fired,
142
+ fitrahAlignment: result.fitrahAlignment,
143
+ soulCharge: result.soulCharge,
144
+ ghazaliVerdict: result.ghazaliVerdict,
145
+ },
146
+ }).catch(() => undefined);
147
+
148
+ return result;
149
+ } catch {
150
+ return await fallbackToValidateOutput(input, t0);
151
+ }
152
+ }
153
+
154
+ /**
155
+ * Wrap a single chat-turn lifecycle (used by `chat.ts:AriaChat`). Fires
156
+ * pre + post Aristotle/Noor coverage around the model call without
157
+ * altering the existing chat shape. Returns the wire result so the caller
158
+ * can surface re-author signal / Fitrah veto / quality score upstream.
159
+ *
160
+ * Usage:
161
+ * const wire = await wrapAriaChatTurn({
162
+ * emissionId, sessionId, userId, message, plannedApproach,
163
+ * }, async (pre) => { ... call provider, return draft text ... });
164
+ * if (wire.fitrahVetoed) emitRefusal(); else emit(wire.draft);
165
+ */
166
+ export async function wrapAriaChatTurn(
167
+ ctx: Omit<AristotleNoorWireInput, 'surface' | 'draft'>,
168
+ produceDraft: (pre: AristotleNoorWireResult) => Promise<string>,
169
+ ): Promise<AristotleNoorWireResult & { draft: string }> {
170
+ const pre = await runAristotleNoorOnSDK({
171
+ ...ctx,
172
+ surface: 'sdk-chat-turn',
173
+ });
174
+
175
+ if (pre.fitrahVetoed) {
176
+ return { ...pre, draft: '' };
177
+ }
178
+
179
+ const draft = await produceDraft(pre);
180
+
181
+ const post = await runAristotleNoorOnSDK({
182
+ ...ctx,
183
+ surface: 'sdk-chat-turn',
184
+ draft,
185
+ });
186
+
187
+ // Merge post-fire signals into the pre snapshot so callers get one
188
+ // unified view of every primitive that fired.
189
+ return {
190
+ fired: dedupe([...pre.fired, ...post.fired]),
191
+ fitrahVetoed: post.fitrahVetoed,
192
+ fitrahAlignment: post.fitrahAlignment,
193
+ qualityScore: post.qualityScore,
194
+ reAuthorSignal: post.reAuthorSignal,
195
+ notes: [...pre.notes, ...post.notes],
196
+ soulCharge: post.soulCharge ?? pre.soulCharge,
197
+ soulManifoldStatus: post.soulManifoldStatus ?? pre.soulManifoldStatus,
198
+ ghazaliVerdict: post.ghazaliVerdict ?? pre.ghazaliVerdict,
199
+ latencyMs: pre.latencyMs + post.latencyMs,
200
+ dispatched: pre.dispatched && post.dispatched,
201
+ draft,
202
+ };
203
+ }
204
+
205
+ /**
206
+ * Lifecycle wrapper for CLI commands. Fires pre-coverage before the
207
+ * command's main action, then post-coverage after. Failures never block
208
+ * the command — the wire is observability + cognition-log + Fitrah hard-gate.
209
+ *
210
+ * Returns the post result so the caller can decide whether to print a
211
+ * one-line cognition footer (`task #95 — human-readable harness footer`).
212
+ */
213
+ export async function wrapCliCommand<T>(
214
+ command: SdkEmissionSurface,
215
+ emissionId: string,
216
+ action: () => Promise<T>,
217
+ ctx: Omit<AristotleNoorWireInput, 'surface' | 'emissionId'> = {},
218
+ ): Promise<{ result: T; coverage: AristotleNoorWireResult }> {
219
+ await runAristotleNoorOnSDK({
220
+ ...ctx,
221
+ surface: command,
222
+ emissionId,
223
+ });
224
+
225
+ const result = await action();
226
+
227
+ const coverage = await runAristotleNoorOnSDK({
228
+ ...ctx,
229
+ surface: command,
230
+ emissionId,
231
+ draft: typeof result === 'string' ? result : undefined,
232
+ });
233
+
234
+ return { result, coverage };
235
+ }
236
+
237
+ // ─── Internal helpers ───────────────────────────────────────────────────────
238
+
239
+ /** Fail-open default — fires the legacy `validateOutput` route so at
240
+ * least the post-stage 8-lens + Mizan rewrite legs run when the new
241
+ * `/api/harness/aristotle-noor` route is unreachable. */
242
+ async function fallbackToValidateOutput(
243
+ input: AristotleNoorWireInput,
244
+ t0: number,
245
+ ): Promise<AristotleNoorWireResult> {
246
+ const fired: string[] = [];
247
+ const notes: string[] = ['aristotle-noor: harness route unreachable, ran validateOutput fallback'];
248
+ let qualityScore = 100;
249
+ let reAuthorSignal = false;
250
+
251
+ if (input.draft) {
252
+ try {
253
+ const verdict = await validateOutput({
254
+ text: input.draft,
255
+ sessionId: input.sessionId ?? input.emissionId,
256
+ });
257
+ if (verdict) {
258
+ fired.push('eight_lens_detector_fallback', 'mizan_validate_fallback');
259
+ if (verdict.severity === 'block') {
260
+ qualityScore = 40;
261
+ reAuthorSignal = true;
262
+ } else if (verdict.severity === 'warn') {
263
+ qualityScore = 70;
264
+ }
265
+ }
266
+ } catch {
267
+ // swallow — fail-open
268
+ }
269
+ } else if (input.message) {
270
+ // Pre-stage fallback: at minimum, fetch the harness packet so doctrine
271
+ // injection still surfaces to the caller.
272
+ try {
273
+ await fetchHarness({
274
+ message: input.message,
275
+ sessionId: input.sessionId ?? input.emissionId,
276
+ userId: input.userId,
277
+ });
278
+ fired.push('harness_fetch_fallback');
279
+ } catch {
280
+ // swallow — fail-open
281
+ }
282
+ }
283
+
284
+ return {
285
+ fired,
286
+ fitrahVetoed: false,
287
+ fitrahAlignment: 1.0,
288
+ qualityScore,
289
+ reAuthorSignal,
290
+ notes,
291
+ soulCharge: null,
292
+ soulManifoldStatus: null,
293
+ ghazaliVerdict: null,
294
+ latencyMs: Date.now() - t0,
295
+ dispatched: false,
296
+ };
297
+ }
298
+
299
+ /** Stable order-preserving dedupe used by `wrapAriaChatTurn`. */
300
+ function dedupe<T>(values: T[]): T[] {
301
+ const seen = new Set<T>();
302
+ const out: T[] = [];
303
+ for (const v of values) {
304
+ if (!seen.has(v)) {
305
+ seen.add(v);
306
+ out.push(v);
307
+ }
308
+ }
309
+ return out;
310
+ }
@@ -1,3 +1,5 @@
1
+ import type { RuntimeProofSnapshot } from '../runtime-proof.js';
2
+
1
3
  export interface Message {
2
4
  role: 'system' | 'user' | 'assistant';
3
5
  content: string;
@@ -11,10 +13,14 @@ export interface ChatOptions {
11
13
 
12
14
  export interface ChatResult {
13
15
  text: string;
16
+ provider?: string;
17
+ model?: string;
18
+ latencyMs?: number;
14
19
  usage?: {
15
20
  promptTokens: number;
16
21
  completionTokens: number;
17
22
  };
23
+ runtimeProof?: RuntimeProofSnapshot;
18
24
  }
19
25
 
20
26
  export type ProviderName = 'openai' | 'anthropic' | 'google' | 'deepseek' | 'openrouter' | 'ollama';