@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,650 @@
1
+ #!/usr/bin/env node
2
+
3
+ const DECEPTION_RX = /\b(?:deceive|spoof|fabricate|hallucinate|misrepresent|pretend)\b/i;
4
+ const DESTRUCTIVE_RX = /\b(?:delete|destroy|purge|drop|rm\s+-rf|wipe|nuke)\b/i;
5
+ const SECRET_RX = /\b(?:credential|token|secret|key|password|private key)\b/i;
6
+ const HIGH_IMPACT_RX = /\b(?:deploy|writeback|mutation|garden_write|telegram_send|push to main|kubectl apply|set image)\b/i;
7
+ const STATE_CLAIM_RX = /\b(?:done|shipped|wired|complete|fixed|landed|ready|verified|passes|succeeds)\b/i;
8
+ const ETHICAL_DRIFT_RX = /\b(?:sudo|rm\s+-rf|delete|destroy|token|secret|password|credential|bypass|disable|force|--no-verify)\b/i;
9
+ const DECISION_SIGNAL_RX = /\b(?:recommend|should|propose|prefer|choose|ship|block|defer|reject|approve)\b/i;
10
+
11
+ export const ARISTOTLE_28_MODULES = [
12
+ 'fitrah_gate',
13
+ 'truth_lens',
14
+ 'harm_lens',
15
+ 'trust_lens',
16
+ 'power_lens',
17
+ 'reflection_lens',
18
+ 'hikma',
19
+ 'mizan',
20
+ 'nur',
21
+ 'firasah',
22
+ 'tafakkur',
23
+ 'tadabbur',
24
+ 'qiyas',
25
+ 'istiqra',
26
+ 'deep_soul_bridge',
27
+ 'clean_cognition',
28
+ 'meta_cognition',
29
+ 'self_reflection',
30
+ 'predictor',
31
+ 'continuity_guard',
32
+ 'memory_recall',
33
+ 'research_pull',
34
+ 'first_principle_bind',
35
+ 'axiom_runtime',
36
+ 'ghazali_8_lens',
37
+ 'quality_gate',
38
+ 'evolution_distill',
39
+ 'aegis_pattern_match',
40
+ ];
41
+
42
+ export const NOOR_COGNITIVE_SUITE = [
43
+ 'noor_recognition',
44
+ 'noor_resonance',
45
+ 'soul_charge',
46
+ 'soul_drift_watch',
47
+ 'ethical_membrane',
48
+ 'projection_components',
49
+ 'continuity_trace',
50
+ 'memory_gravity',
51
+ 'truth_signal',
52
+ 'intent_alignment',
53
+ 'ghazali_verdict',
54
+ 'pattern_resonance',
55
+ 'forge_primitive_planner',
56
+ 'evolution_pull',
57
+ ];
58
+
59
+ const NOOR_FORGE_PRIMITIVES = ['http', 'sql', 'file_read', 'file_write', 'pub_sub'];
60
+
61
+ function tokenize(text) {
62
+ return String(text || '')
63
+ .toLowerCase()
64
+ .split(/[^a-z0-9_]+/g)
65
+ .map((token) => token.trim())
66
+ .filter((token) => token.length > 2);
67
+ }
68
+
69
+ function jaccard(a, b) {
70
+ const left = new Set(tokenize(a));
71
+ const right = new Set(tokenize(b));
72
+ if (left.size === 0 || right.size === 0) return 0;
73
+ let intersection = 0;
74
+ for (const token of left) {
75
+ if (right.has(token)) intersection++;
76
+ }
77
+ const union = new Set([...left, ...right]).size;
78
+ return union === 0 ? 0 : intersection / union;
79
+ }
80
+
81
+ function dedupe(items) {
82
+ return [...new Set((items || []).filter(Boolean))];
83
+ }
84
+
85
+ function packetRecord(packet) {
86
+ if (packet?.packet && typeof packet.packet === 'object') return packet.packet;
87
+ if (packet && typeof packet === 'object') return packet;
88
+ return {};
89
+ }
90
+
91
+ function getFirstPrinciple(packet) {
92
+ const p = packetRecord(packet);
93
+ if (typeof p?.frames?.first_principle === 'string') return p.frames.first_principle;
94
+ if (typeof p?.first_principle === 'string') return p.first_principle;
95
+ return '';
96
+ }
97
+
98
+ function getAxioms(packet) {
99
+ const p = packetRecord(packet);
100
+ return Object.keys(p?.axioms || {});
101
+ }
102
+
103
+ function getFrames(packet) {
104
+ const p = packetRecord(packet);
105
+ return Object.keys(p?.frames || {});
106
+ }
107
+
108
+ function asPercent(value) {
109
+ return Math.max(0, Math.min(100, Math.round(value * 100)));
110
+ }
111
+
112
+ function moduleResult(name, score, insight, extras = {}) {
113
+ return {
114
+ name,
115
+ score: Math.max(0, Math.min(1, Number(score || 0))),
116
+ insight,
117
+ ...extras,
118
+ };
119
+ }
120
+
121
+ function baseModuleScores(intendedAction, rationale, firstPrincipleText, axioms, frames) {
122
+ const hasAction = intendedAction.length > 0;
123
+ const hasRationale = rationale.length > 15;
124
+ return {
125
+ fitrah_gate: moduleResult(
126
+ 'fitrah_gate',
127
+ DECEPTION_RX.test(intendedAction) ? 0.05 : 0.92,
128
+ DECEPTION_RX.test(intendedAction)
129
+ ? 'Intent reads as deceptive and conflicts with truth over deception.'
130
+ : 'Intent is framed as a truthful action under the fitrah gate.',
131
+ ),
132
+ truth_lens: moduleResult(
133
+ 'truth_lens',
134
+ DECEPTION_RX.test(intendedAction) ? 0.1 : 0.9,
135
+ DECEPTION_RX.test(intendedAction)
136
+ ? 'Truth lens detected fabrication or spoofing language.'
137
+ : 'Truth lens sees no direct fabrication markers in the stated intent.',
138
+ ),
139
+ harm_lens: moduleResult(
140
+ 'harm_lens',
141
+ DESTRUCTIVE_RX.test(intendedAction) ? 0.45 : 0.88,
142
+ DESTRUCTIVE_RX.test(intendedAction)
143
+ ? 'Harm lens detected destructive vocabulary that requires explicit owner safety proof.'
144
+ : 'Harm lens sees no direct destructive marker in the intent.',
145
+ ),
146
+ trust_lens: moduleResult(
147
+ 'trust_lens',
148
+ SECRET_RX.test(intendedAction) ? 0.5 : 0.9,
149
+ SECRET_RX.test(intendedAction)
150
+ ? 'Trust lens detected secret or credential language and tightened approval requirements.'
151
+ : 'Trust lens sees no immediate secret-boundary breach in the intent.',
152
+ ),
153
+ power_lens: moduleResult(
154
+ 'power_lens',
155
+ HIGH_IMPACT_RX.test(intendedAction) ? 0.68 : 0.87,
156
+ HIGH_IMPACT_RX.test(intendedAction)
157
+ ? 'Power lens marked this as high-impact and survivability-sensitive.'
158
+ : 'Power lens sees ordinary impact and no major survivability concern.',
159
+ ),
160
+ reflection_lens: moduleResult(
161
+ 'reflection_lens',
162
+ hasRationale ? 0.88 : 0.3,
163
+ hasRationale
164
+ ? 'Reflection lens has enough rationale text to evaluate tradeoffs.'
165
+ : 'Reflection lens sees thin or missing rationale and requires deeper thought.',
166
+ ),
167
+ hikma: moduleResult(
168
+ 'hikma',
169
+ firstPrincipleText ? 0.9 : 0.5,
170
+ firstPrincipleText
171
+ ? `Hikma anchored to first principle: ${firstPrincipleText}`
172
+ : 'Hikma could not find a first principle in the loaded packet and will lean on axioms.',
173
+ ),
174
+ mizan: moduleResult(
175
+ 'mizan',
176
+ hasAction ? 0.84 : 0.4,
177
+ hasAction
178
+ ? 'Mizan sees an actionable ask and can weigh proportionality and quality.'
179
+ : 'Mizan lacks a concrete action target to balance.',
180
+ ),
181
+ nur: moduleResult(
182
+ 'nur',
183
+ hasAction ? 0.83 : 0.45,
184
+ hasAction
185
+ ? 'Nur extracted a visible action surface and current-state read.'
186
+ : 'Nur could not resolve a visible action surface from the turn.',
187
+ ),
188
+ firasah: moduleResult(
189
+ 'firasah',
190
+ hasRationale ? 0.8 : 0.55,
191
+ hasRationale
192
+ ? 'Firasah sees enough context to infer intent beneath the explicit request.'
193
+ : 'Firasah sees limited context and keeps pattern inference conservative.',
194
+ ),
195
+ tafakkur: moduleResult(
196
+ 'tafakkur',
197
+ hasRationale ? 0.86 : 0.38,
198
+ hasRationale
199
+ ? 'Tafakkur has enough depth to contemplate structure, cost, and order effects.'
200
+ : 'Tafakkur is underfed because the turn lacks a real rationale trace.',
201
+ ),
202
+ tadabbur: moduleResult(
203
+ 'tadabbur',
204
+ HIGH_IMPACT_RX.test(intendedAction) ? 0.8 : 0.72,
205
+ HIGH_IMPACT_RX.test(intendedAction)
206
+ ? 'Tadabbur is tracking second-order effects because the action is high impact.'
207
+ : 'Tadabbur sees limited ripple risk but still preserves rollback awareness.',
208
+ ),
209
+ qiyas: moduleResult(
210
+ 'qiyas',
211
+ axioms.length ? 0.82 : 0.58,
212
+ axioms.length
213
+ ? `Qiyas can analogize against loaded axioms: ${axioms.slice(0, 5).join(', ')}`
214
+ : 'Qiyas has no loaded axioms to analogize against and falls back to generic doctrine.',
215
+ ),
216
+ istiqra: moduleResult(
217
+ 'istiqra',
218
+ frames.length ? 0.82 : 0.6,
219
+ frames.length
220
+ ? `Istiqra sees loaded frame patterns: ${frames.slice(0, 6).join(', ')}`
221
+ : 'Istiqra has little frame evidence and keeps induction narrow.',
222
+ ),
223
+ };
224
+ }
225
+
226
+ function buildNoorState(packet, message, plannedApproach, modules, phase) {
227
+ const firstPrincipleText = getFirstPrinciple(packet);
228
+ const coherence = jaccard(message, plannedApproach || message || firstPrincipleText || '');
229
+ const ghazaliVerdict =
230
+ modules.some((module) => module.score < 0.35) ? 'violation'
231
+ : modules.some((module) => module.score < 0.6) ? 'caution'
232
+ : 'aligned';
233
+ const soulCharge = Math.max(
234
+ 0.2,
235
+ Math.min(
236
+ 0.98,
237
+ modules.reduce((sum, module) => sum + module.score, 0) / Math.max(modules.length, 1),
238
+ ),
239
+ );
240
+
241
+ return {
242
+ fired: NOOR_COGNITIVE_SUITE.slice(),
243
+ phase,
244
+ soulCharge,
245
+ soulManifoldStatus: coherence < 0.25 ? 'drifting' : coherence < 0.55 ? 'stable' : 'aligned',
246
+ ghazaliVerdict,
247
+ resonance: coherence,
248
+ forgePrimitives: NOOR_FORGE_PRIMITIVES.slice(),
249
+ insights: [
250
+ `Noor resonance=${coherence.toFixed(2)} across message and planned approach alignment.`,
251
+ firstPrincipleText
252
+ ? `Noor continuity remains bound to first principle: ${firstPrincipleText}`
253
+ : 'Noor continuity is operating without an explicit first principle anchor.',
254
+ `Noor forge primitives available through the runtime: ${NOOR_FORGE_PRIMITIVES.join(', ')}`,
255
+ ],
256
+ };
257
+ }
258
+
259
+ function baseResult(phase, modules, noorState, notes, extra = {}) {
260
+ const fitrahAlignment = Math.max(
261
+ 0.05,
262
+ modules.reduce((sum, module) => sum + module.score, 0) / Math.max(modules.length, 1),
263
+ );
264
+ return {
265
+ phase,
266
+ fired: dedupe([
267
+ ...modules.map((module) => module.name),
268
+ ...noorState.fired,
269
+ ]),
270
+ fitrahVetoed: modules.some((module) => module.name === 'fitrah_gate' && module.score < 0.15),
271
+ fitrahAlignment,
272
+ qualityScore: asPercent(fitrahAlignment),
273
+ reAuthorSignal: false,
274
+ notes,
275
+ moduleReadouts: modules,
276
+ noorState,
277
+ dispatched: true,
278
+ ...extra,
279
+ };
280
+ }
281
+
282
+ export function evaluateLocalPrePhase(packet, context = {}) {
283
+ const intendedAction = String(context.intendedAction || context.message || '').trim();
284
+ const rationale = String(context.rationale || '').trim();
285
+ const firstPrincipleText = getFirstPrinciple(packet);
286
+ const axioms = getAxioms(packet);
287
+ const frames = getFrames(packet);
288
+ const modulesMap = baseModuleScores(intendedAction, rationale, firstPrincipleText, axioms, frames);
289
+ const modules = [
290
+ modulesMap.fitrah_gate,
291
+ modulesMap.truth_lens,
292
+ modulesMap.harm_lens,
293
+ modulesMap.trust_lens,
294
+ modulesMap.power_lens,
295
+ modulesMap.reflection_lens,
296
+ modulesMap.hikma,
297
+ modulesMap.mizan,
298
+ modulesMap.nur,
299
+ modulesMap.firasah,
300
+ modulesMap.tafakkur,
301
+ modulesMap.tadabbur,
302
+ modulesMap.qiyas,
303
+ modulesMap.istiqra,
304
+ moduleResult(
305
+ 'deep_soul_bridge',
306
+ firstPrincipleText ? 0.84 : 0.55,
307
+ firstPrincipleText
308
+ ? 'DeepSoulBridge preserved continuity with the loaded first principle.'
309
+ : 'DeepSoulBridge has no first-principle string and is relying on axioms only.',
310
+ ),
311
+ moduleResult(
312
+ 'clean_cognition',
313
+ rationale.length > 15 ? 0.86 : 0.45,
314
+ rationale.length > 15
315
+ ? 'CleanCognition sees enough rationale to avoid prompt-only drift.'
316
+ : 'CleanCognition sees under-specified intent and is raising friction.',
317
+ ),
318
+ moduleResult(
319
+ 'research_pull',
320
+ /research|verify|audit|compare|inspect/.test(intendedAction) ? 0.88 : 0.68,
321
+ /research|verify|audit|compare|inspect/.test(intendedAction)
322
+ ? 'Research pull is explicitly warranted by the requested action.'
323
+ : 'Research pull is optional for this turn and will stay lightweight.',
324
+ ),
325
+ moduleResult(
326
+ 'first_principle_bind',
327
+ firstPrincipleText ? 0.92 : 0.45,
328
+ firstPrincipleText
329
+ ? `First-principle bind is active: ${firstPrincipleText}`
330
+ : 'First-principle bind is weak because the loaded packet did not expose a first principle.',
331
+ ),
332
+ moduleResult(
333
+ 'axiom_runtime',
334
+ axioms.length ? 0.9 : 0.5,
335
+ axioms.length
336
+ ? `Axiom runtime loaded ${axioms.length} axioms for this turn.`
337
+ : 'Axiom runtime saw no loaded axioms and cannot ground doctrine strongly.',
338
+ ),
339
+ ];
340
+
341
+ const notes = [];
342
+ if (DECEPTION_RX.test(intendedAction)) notes.push('truth_over_deception: intended action reads as deceptive');
343
+ if (rationale.length < 10) notes.push('reflection_before_action: rationale is too thin');
344
+ if (DESTRUCTIVE_RX.test(intendedAction)) notes.push('no_harm: destructive action requires explicit safety proof or owner approval');
345
+ if (SECRET_RX.test(intendedAction)) notes.push('sacred_trust: credential boundary crossed; authorization must be fresh');
346
+ if (HIGH_IMPACT_RX.test(intendedAction)) notes.push('power_obligates_service: high-impact action must be logged and survivable');
347
+ if (firstPrincipleText) notes.push(`first_principle: ${firstPrincipleText}`);
348
+
349
+ const noorState = buildNoorState(packet, intendedAction, rationale, modules, 'pre');
350
+ return baseResult('pre', modules, noorState, notes, {
351
+ constraints: notes,
352
+ firstPrincipleText,
353
+ recommendedApproach: [
354
+ 'Anchor the response to the loaded first principle and active axioms.',
355
+ 'Use Qiyas for analogy, Istiqra for pattern induction, and Tadabbur for second-order effects.',
356
+ 'If tool abstraction is required, route it through Noor forge primitives instead of ad hoc scaffolding.',
357
+ ],
358
+ });
359
+ }
360
+
361
+ export function evaluateLocalMidPhase(message, plannedApproach, packet = null) {
362
+ const confidence = jaccard(message, plannedApproach);
363
+ const notes = [];
364
+ if (ETHICAL_DRIFT_RX.test(String(plannedApproach || ''))) {
365
+ notes.push('planned approach drifted into destructive or trust-boundary vocabulary');
366
+ }
367
+ if (confidence < 0.2) {
368
+ notes.push('planned approach has weak overlap with the original intent');
369
+ }
370
+
371
+ const modules = [
372
+ moduleResult(
373
+ 'meta_cognition',
374
+ Math.max(0.2, confidence || 0.2),
375
+ `MetaCognition scored plan/message overlap at ${confidence.toFixed(2)}.`,
376
+ ),
377
+ moduleResult(
378
+ 'self_reflection',
379
+ confidence < 0.25 ? 0.34 : 0.82,
380
+ confidence < 0.25
381
+ ? 'SelfReflection detected real drift and requires re-binding before emission.'
382
+ : 'SelfReflection sees the approach staying close to the original request.',
383
+ ),
384
+ moduleResult(
385
+ 'predictor',
386
+ confidence < 0.25 ? 0.4 : 0.84,
387
+ confidence < 0.25
388
+ ? 'Predictor expects a poor downstream answer if this approach is not corrected.'
389
+ : 'Predictor expects the bound approach to survive post-phase validation.',
390
+ ),
391
+ moduleResult(
392
+ 'continuity_guard',
393
+ confidence < 0.3 ? 0.45 : 0.86,
394
+ confidence < 0.3
395
+ ? 'Continuity guard sees a weak thread from intent to plan.'
396
+ : 'Continuity guard sees a stable thread from intent to plan.',
397
+ ),
398
+ moduleResult(
399
+ 'memory_recall',
400
+ plannedApproach ? 0.78 : 0.5,
401
+ plannedApproach
402
+ ? 'MemoryRecall has enough plan structure to preserve the active thread.'
403
+ : 'MemoryRecall sees no real plan structure to persist.',
404
+ ),
405
+ moduleResult(
406
+ 'qiyas',
407
+ confidence < 0.25 ? 0.45 : 0.82,
408
+ confidence < 0.25
409
+ ? 'Qiyas sees the plan analogizing poorly against the original ask.'
410
+ : 'Qiyas sees the plan preserving structural similarity to the ask.',
411
+ ),
412
+ moduleResult(
413
+ 'istiqra',
414
+ confidence < 0.25 ? 0.42 : 0.81,
415
+ confidence < 0.25
416
+ ? 'Istiqra sees pattern extraction drifting away from the original request.'
417
+ : 'Istiqra sees the induced plan staying bound to the observed request pattern.',
418
+ ),
419
+ ];
420
+
421
+ const noorState = buildNoorState(packet, message, plannedApproach, modules, 'mid');
422
+ const result = baseResult('mid', modules, noorState, notes, {
423
+ confidence,
424
+ ethicalConcerns: notes,
425
+ recommendedRevision:
426
+ confidence < 0.2
427
+ ? 'Planned approach drifted from the original intent. Re-bind the packet, restate the next action, and tighten the approach before continuing.'
428
+ : null,
429
+ });
430
+ result.reAuthorSignal = confidence < 0.2;
431
+ result.fitrahAlignment = Math.max(0.2, confidence || 0.2);
432
+ result.qualityScore = asPercent(result.fitrahAlignment);
433
+ return result;
434
+ }
435
+
436
+ export function evaluateLocalPostPhase(text, evidence = {}, packet = null, message = '', plannedApproach = '') {
437
+ const notes = [];
438
+ const modules = [
439
+ moduleResult(
440
+ 'ghazali_8_lens',
441
+ evidence.layer3Pass === false ? 0.42 : 0.88,
442
+ evidence.layer3Pass === false
443
+ ? 'Ghazali 8-lens sees unresolved substrate or cognition failures.'
444
+ : 'Ghazali 8-lens sees no substrate-level break in the emission.',
445
+ ),
446
+ moduleResult(
447
+ 'quality_gate',
448
+ evidence.remoteValidationSeverity === 'block' ? 0.3 : evidence.remoteValidationSeverity === 'warn' ? 0.68 : 0.9,
449
+ evidence.remoteValidationSeverity === 'block'
450
+ ? 'Quality gate received a blocking validator verdict.'
451
+ : evidence.remoteValidationSeverity === 'warn'
452
+ ? 'Quality gate received a warning verdict and is trimming confidence.'
453
+ : 'Quality gate received a pass verdict from the validator.',
454
+ ),
455
+ moduleResult(
456
+ 'state_claim_check',
457
+ STATE_CLAIM_RX.test(String(text || '')) && evidence.hasVerifiedState !== true ? 0.42 : 0.86,
458
+ STATE_CLAIM_RX.test(String(text || '')) && evidence.hasVerifiedState !== true
459
+ ? 'StateClaimCheck found completion language without explicit evidence.'
460
+ : 'StateClaimCheck found no unsupported completion language.',
461
+ ),
462
+ moduleResult(
463
+ 'predictor',
464
+ evidence.layer3Pass === false ? 0.35 : 0.84,
465
+ evidence.layer3Pass === false
466
+ ? 'Predictor expects downstream breakage if this text is released unchanged.'
467
+ : 'Predictor sees the current response surviving the next operational step.',
468
+ ),
469
+ moduleResult(
470
+ 'self_reflection',
471
+ evidence.remoteValidationSeverity === 'block' ? 0.32 : 0.82,
472
+ evidence.remoteValidationSeverity === 'block'
473
+ ? 'SelfReflection sees a need to re-author instead of emitting this draft.'
474
+ : 'SelfReflection does not detect a need for major re-authoring.',
475
+ ),
476
+ moduleResult(
477
+ 'evolution_distill',
478
+ DECISION_SIGNAL_RX.test(text) ? 0.88 : 0.72,
479
+ DECISION_SIGNAL_RX.test(text)
480
+ ? 'EvolutionDistill found a decision signal worth persisting into the hive.'
481
+ : 'EvolutionDistill sees a general response rather than a durable decision point.',
482
+ ),
483
+ moduleResult(
484
+ 'aegis_pattern_match',
485
+ evidence.remoteValidationSeverity === 'block' ? 0.4 : 0.84,
486
+ evidence.remoteValidationSeverity === 'block'
487
+ ? 'AegisPatternMatch found a known high-risk output pattern.'
488
+ : 'AegisPatternMatch sees no known high-risk pattern cluster in the output.',
489
+ ),
490
+ ];
491
+
492
+ if (STATE_CLAIM_RX.test(String(text || '')) && evidence.hasVerifiedState !== true) {
493
+ notes.push('state-claim-verification: completion language appeared without explicit evidence');
494
+ }
495
+ if (evidence.layer3Pass === false) {
496
+ notes.push('layer3_local: cognition or substrate gates did not pass');
497
+ }
498
+ if (evidence.remoteValidationSeverity === 'block') {
499
+ notes.push('remote_validate: upstream output validator blocked the draft');
500
+ }
501
+
502
+ const noorState = buildNoorState(packet, message || text, plannedApproach || text, modules, 'post');
503
+ const result = baseResult('post', modules, noorState, notes, {
504
+ predictorConcerns: notes,
505
+ });
506
+ result.reAuthorSignal = notes.length > 0;
507
+ result.qualityScore = Math.min(
508
+ result.qualityScore,
509
+ evidence.remoteValidationSeverity === 'block' ? 35 : evidence.remoteValidationSeverity === 'warn' ? 68 : 100,
510
+ evidence.layer3Pass === false ? 45 : 100,
511
+ );
512
+ result.fitrahAlignment = Math.max(0.35, result.qualityScore / 100);
513
+ return result;
514
+ }
515
+
516
+ export function buildPhaseBlockMessage(result, phase) {
517
+ const notes = Array.isArray(result?.notes) ? result.notes.filter(Boolean) : [];
518
+ if (!notes.length) return `Aria runtime ${phase}-phase blocked emission without a more specific note.`;
519
+ return `Aria runtime ${phase}-phase blocked emission: ${notes.slice(0, 3).join(' | ')}`;
520
+ }
521
+
522
+ export function extractEvolutionPrinciples(packet, results = []) {
523
+ const principles = [];
524
+ const firstPrincipleText = getFirstPrinciple(packet);
525
+ if (firstPrincipleText) {
526
+ principles.push({
527
+ name: 'first_principle',
528
+ principle: firstPrincipleText,
529
+ source: 'harness_packet',
530
+ });
531
+ }
532
+
533
+ for (const axiom of getAxioms(packet)) {
534
+ principles.push({
535
+ name: 'axiom',
536
+ principle: axiom,
537
+ source: 'harness_packet',
538
+ });
539
+ }
540
+
541
+ for (const result of results) {
542
+ for (const note of result?.notes || []) {
543
+ principles.push({
544
+ name: 'phase_note',
545
+ principle: note,
546
+ source: 'local_phase',
547
+ });
548
+ }
549
+ }
550
+
551
+ return principles;
552
+ }
553
+
554
+ export function extractAegisPatterns(input = {}) {
555
+ const patterns = [];
556
+ if (Array.isArray(input?.aegisPatterns)) {
557
+ for (const pattern of input.aegisPatterns) {
558
+ if (!pattern) continue;
559
+ patterns.push(pattern);
560
+ }
561
+ }
562
+ if (Array.isArray(input?.ethicalConcerns)) {
563
+ for (const concern of input.ethicalConcerns) {
564
+ patterns.push({
565
+ name: concern,
566
+ category: 'ethical_concern',
567
+ outcome: 'flagged',
568
+ lesson: concern,
569
+ });
570
+ }
571
+ }
572
+ if (Array.isArray(input?.notes)) {
573
+ for (const note of input.notes) {
574
+ if (!note) continue;
575
+ patterns.push({
576
+ name: note,
577
+ category: 'phase_note',
578
+ outcome: 'observed',
579
+ lesson: note,
580
+ });
581
+ }
582
+ }
583
+ return patterns;
584
+ }
585
+
586
+ export function buildRuntimeCognitionDirective(packet, bundle = {}) {
587
+ const firstPrincipleText = getFirstPrinciple(packet) || 'No first principle was supplied in the packet.';
588
+ const axioms = getAxioms(packet);
589
+ const frames = getFrames(packet);
590
+ const evolution = extractEvolutionPrinciples(packet, [bundle.preResult, bundle.midResult, bundle.postResult].filter(Boolean));
591
+ const aegisPatterns = dedupe(
592
+ extractAegisPatterns(bundle.midResult || {}).map((pattern) => pattern.name || pattern.lesson || ''),
593
+ ).slice(0, 8);
594
+ const preReadouts = bundle.preResult?.moduleReadouts || [];
595
+ const midReadouts = bundle.midResult?.moduleReadouts || [];
596
+ const postReadouts = bundle.postResult?.moduleReadouts || [];
597
+ const dominantModules = [...preReadouts, ...midReadouts, ...postReadouts]
598
+ .sort((a, b) => b.score - a.score)
599
+ .slice(0, 12)
600
+ .map((module) => `${module.name}: ${module.insight}`);
601
+
602
+ return [
603
+ '## Aria Runtime Cognition Control Plane',
604
+ 'Aria is the control plane for this turn. The upstream model is only the inference engine.',
605
+ `First principle: ${firstPrincipleText}`,
606
+ `Loaded axioms: ${axioms.length ? axioms.join(', ') : 'none exposed in packet'}`,
607
+ `Loaded frames: ${frames.length ? frames.join(', ') : 'none exposed in packet'}`,
608
+ 'Full Aristotle phase coverage and Noor cognition are active through the runtime.',
609
+ 'Noor forge primitives are available only through Aria when a real tool abstraction is required.',
610
+ '',
611
+ 'Think through these exact disciplines before answering:',
612
+ '- Fitrah and the loaded axioms set the moral boundary.',
613
+ '- Tafakkur contemplates structure and hidden assumptions.',
614
+ '- Tadabbur maps second-order effects and rollback risk.',
615
+ '- Qiyas transfers relevant analogy from prior known structures.',
616
+ '- Istiqra extracts the pattern from the visible evidence instead of guessing.',
617
+ '- SelfReflection checks drift between intent, approach, and emission.',
618
+ '- Predictor tests whether the answer will survive the next real operational step.',
619
+ '- Mizan keeps the answer proportionate, exact, and high-quality.',
620
+ '',
621
+ 'Visible cognition contract for the user-facing response:',
622
+ '- For any non-trivial reply, include a readable <cognition> block using everyday labels, not internal lens codenames.',
623
+ '- If you request any non-trivial tool call, place the <cognition> block BEFORE the tool request.',
624
+ '- If the action is deploy, destructive, or state-mutating, include both <verify> and <expected> blocks before the tool request.',
625
+ '- The runtime will canonicalize the readable block into backend JSON automatically, so do not hide it behind private shorthand.',
626
+ '',
627
+ '<cognition>',
628
+ ' truth: <what is actually true here, grounded in visible evidence and substrate anchors>',
629
+ ' harm: <what could break, mislead, or damage trust if the next step is wrong>',
630
+ ' trust: <what principle, promise, or user trust boundary governs this turn>',
631
+ ' power: <what capability is being used and what restraint it requires>',
632
+ ' reflection: <what deeper structural read changes the action, not just the wording>',
633
+ ' context: <what surrounding repo/runtime/user context materially changes the correct move>',
634
+ ' impact: <what second-order consequence or next-step outcome follows from this move>',
635
+ ' beauty: <what cleaner, more elegant, more durable path preserves the contract>',
636
+ ` first_principle: ${firstPrincipleText}`,
637
+ '</cognition>',
638
+ '',
639
+ dominantModules.length ? 'Current module insights:' : 'Current module insights: none yet',
640
+ ...dominantModules.map((line) => `- ${line}`),
641
+ '',
642
+ evolution.length ? 'Evolution principles to preserve:' : 'Evolution principles to preserve: none extracted yet',
643
+ ...evolution.slice(0, 10).map((entry) => `- ${entry.principle}`),
644
+ '',
645
+ aegisPatterns.length ? 'Recent aegis pattern pressure:' : 'Recent aegis pattern pressure: none',
646
+ ...aegisPatterns.map((pattern) => `- ${pattern}`),
647
+ '',
648
+ 'Do not mention the modules by name in the user-facing response. Apply them and speak plainly.',
649
+ ].join('\n');
650
+ }