@aria_asi/cli 0.2.26 → 0.2.29

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 (248) 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/setup-wizard.d.ts.map +1 -1
  90. package/dist/aria-connector/src/setup-wizard.js +34 -2
  91. package/dist/aria-connector/src/setup-wizard.js.map +1 -1
  92. package/dist/assets/hooks/aria-agent-handoff.mjs +224 -0
  93. package/dist/assets/hooks/aria-agent-ledger-merge.mjs +164 -0
  94. package/dist/assets/hooks/aria-architect-fallback.mjs +267 -0
  95. package/dist/assets/hooks/aria-cognition-substrate-binding.mjs +676 -0
  96. package/dist/assets/hooks/aria-discovery-record.mjs +101 -0
  97. package/dist/assets/hooks/aria-harness-via-sdk.mjs +412 -0
  98. package/dist/assets/hooks/aria-import-resolution-gate.mjs +330 -0
  99. package/dist/assets/hooks/aria-outcome-record.mjs +84 -0
  100. package/dist/assets/hooks/aria-pre-emit-dryrun.mjs +294 -0
  101. package/dist/assets/hooks/aria-pre-text-gate.mjs +112 -0
  102. package/dist/assets/hooks/aria-pre-tool-gate.mjs +2133 -0
  103. package/dist/assets/hooks/aria-preprompt-consult.mjs +438 -0
  104. package/dist/assets/hooks/aria-preturn-memory-gate.mjs +570 -0
  105. package/dist/assets/hooks/aria-repo-doctrine-gate.mjs +397 -0
  106. package/dist/assets/hooks/aria-stop-gate.mjs +1551 -0
  107. package/dist/assets/hooks/aria-trigger-autolearn.mjs +229 -0
  108. package/dist/assets/hooks/aria-userprompt-abandon-detect.mjs +192 -0
  109. package/dist/assets/hooks/doctrine_trigger_map.json +479 -0
  110. package/dist/assets/hooks/lib/canonical-lenses.mjs +64 -0
  111. package/dist/assets/hooks/lib/gate-audit.mjs +43 -0
  112. package/dist/assets/hooks/test-aria-preturn-memory-gate.mjs +245 -0
  113. package/dist/assets/hooks/test-tier-lens-labeling.mjs +399 -0
  114. package/dist/assets/opencode-plugins/harness-context/index.js +60 -0
  115. package/dist/assets/opencode-plugins/harness-context/inject-context.mjs +179 -0
  116. package/dist/assets/opencode-plugins/harness-context/package.json +9 -0
  117. package/dist/assets/opencode-plugins/harness-gate/index.js +248 -0
  118. package/dist/assets/opencode-plugins/harness-outcome/index.js +129 -0
  119. package/dist/assets/opencode-plugins/harness-role/index.js +77 -0
  120. package/dist/assets/opencode-plugins/harness-role/package.json +9 -0
  121. package/dist/assets/opencode-plugins/harness-stop/index.js +241 -0
  122. package/dist/runtime/discipline/CLAUDE.md +339 -0
  123. package/dist/runtime/discipline/skills/aria-cognition/aria-essence/SKILL.md +63 -0
  124. package/dist/runtime/discipline/skills/aria-cognition/aria-essence/references/domain-matrix.md +80 -0
  125. package/dist/runtime/discipline/skills/aria-cognition/aria-essence/references/evolution-loop.md +30 -0
  126. package/dist/runtime/discipline/skills/aria-cognition/aria-essence/references/readable-cognition.md +27 -0
  127. package/dist/runtime/discipline/skills/aria-cognition/aria-forge-guardrails/SKILL.md +35 -0
  128. package/dist/runtime/discipline/skills/aria-cognition/aria-forge-guardrails/references/checklist.md +31 -0
  129. package/dist/runtime/discipline/skills/aria-cognition/aria-repo-doctrine/SKILL.md +39 -0
  130. package/dist/runtime/discipline/skills/aria-cognition/forge-quality-rules/SKILL.md +43 -0
  131. package/dist/runtime/discipline/skills/aria-cognition/ghazali-8lens/SKILL.md +38 -0
  132. package/dist/runtime/discipline/skills/aria-cognition/istiqra-induction/SKILL.md +26 -0
  133. package/dist/runtime/discipline/skills/aria-cognition/ladunni-22/SKILL.md +35 -0
  134. package/dist/runtime/discipline/skills/aria-cognition/mizan/SKILL.md +72 -0
  135. package/dist/runtime/discipline/skills/aria-cognition/nadia/SKILL.md +38 -0
  136. package/dist/runtime/discipline/skills/aria-cognition/nadia-psi/SKILL.md +38 -0
  137. package/dist/runtime/discipline/skills/aria-cognition/predictor/SKILL.md +25 -0
  138. package/dist/runtime/discipline/skills/aria-cognition/qiyas-analogy/SKILL.md +26 -0
  139. package/dist/runtime/discipline/skills/aria-cognition/soul-domains/SKILL.md +25 -0
  140. package/dist/runtime/discipline/skills/aria-harness/aria-aristotle-intra-phase/SKILL.md +81 -0
  141. package/dist/runtime/discipline/skills/aria-harness/aria-aristotle-post-phase/SKILL.md +98 -0
  142. package/dist/runtime/discipline/skills/aria-harness/aria-aristotle-pre-phase/SKILL.md +99 -0
  143. package/dist/runtime/discipline/skills/aria-harness/aria-harness-deploy/SKILL.md +127 -0
  144. package/dist/runtime/discipline/skills/aria-harness/aria-harness-no-stripping/SKILL.md +117 -0
  145. package/dist/runtime/discipline/skills/aria-harness/aria-harness-onboarding/SKILL.md +112 -0
  146. package/dist/runtime/discipline/skills/aria-harness/aria-harness-output-discipline/SKILL.md +102 -0
  147. package/dist/runtime/discipline/skills/aria-harness/aria-harness-substrate-binding/SKILL.md +121 -0
  148. package/dist/runtime/doctor.mjs +23 -0
  149. package/dist/runtime/local-phase.mjs +632 -0
  150. package/dist/runtime/manifest.json +15 -0
  151. package/dist/runtime/mizan-scheduler.mjs +331 -0
  152. package/dist/runtime/package.json +6 -0
  153. package/dist/runtime/provider-proxy.mjs +594 -0
  154. package/dist/runtime/sdk/BUNDLED.json +5 -0
  155. package/dist/runtime/sdk/index.d.ts +477 -0
  156. package/dist/runtime/sdk/index.js +1469 -0
  157. package/dist/runtime/sdk/index.js.map +1 -0
  158. package/dist/runtime/sdk/package.json +8 -0
  159. package/dist/runtime/sdk/runWithCognition.d.ts +77 -0
  160. package/dist/runtime/sdk/runWithCognition.js +157 -0
  161. package/dist/runtime/sdk/runWithCognition.js.map +1 -0
  162. package/dist/runtime/service.mjs +2708 -0
  163. package/dist/runtime/vendor/aria-gate-runtime/index.d.ts +53 -0
  164. package/dist/runtime/vendor/aria-gate-runtime/index.d.ts.map +1 -0
  165. package/dist/runtime/vendor/aria-gate-runtime/index.js +277 -0
  166. package/dist/runtime/vendor/aria-gate-runtime/index.js.map +1 -0
  167. package/dist/runtime/vendor/aria-gate-runtime/package.json +6 -0
  168. package/dist/sdk/BUNDLED.json +2 -2
  169. package/dist/sdk/index.d.ts +283 -0
  170. package/dist/sdk/index.js +622 -85
  171. package/dist/sdk/index.js.map +1 -1
  172. package/dist/sdk/runWithCognition.d.ts +77 -0
  173. package/dist/sdk/runWithCognition.js +157 -0
  174. package/dist/sdk/runWithCognition.js.map +1 -0
  175. package/hooks/aria-agent-handoff.mjs +11 -1
  176. package/hooks/aria-architect-fallback.mjs +109 -40
  177. package/hooks/aria-cognition-substrate-binding.mjs +676 -0
  178. package/hooks/aria-harness-via-sdk.mjs +34 -21
  179. package/hooks/aria-import-resolution-gate.mjs +330 -0
  180. package/hooks/aria-outcome-record.mjs +5 -1
  181. package/hooks/aria-pre-emit-dryrun.mjs +294 -0
  182. package/hooks/aria-pre-tool-gate.mjs +828 -41
  183. package/hooks/aria-preprompt-consult.mjs +113 -13
  184. package/hooks/aria-preturn-memory-gate.mjs +298 -6
  185. package/hooks/aria-repo-doctrine-gate.mjs +397 -0
  186. package/hooks/aria-stop-gate.mjs +739 -76
  187. package/hooks/aria-userprompt-abandon-detect.mjs +5 -1
  188. package/hooks/doctrine_trigger_map.json +209 -15
  189. package/hooks/lib/canonical-lenses.mjs +64 -0
  190. package/hooks/lib/gate-audit.mjs +43 -0
  191. package/opencode-plugins/harness-context/index.js +1 -1
  192. package/opencode-plugins/harness-context/inject-context.mjs +82 -23
  193. package/opencode-plugins/harness-gate/index.js +248 -0
  194. package/opencode-plugins/harness-outcome/index.js +129 -0
  195. package/opencode-plugins/harness-stop/index.js +241 -0
  196. package/package.json +8 -2
  197. package/runtime-src/doctor.mjs +23 -0
  198. package/runtime-src/local-phase.mjs +632 -0
  199. package/runtime-src/mizan-scheduler.mjs +331 -0
  200. package/runtime-src/provider-proxy.mjs +594 -0
  201. package/runtime-src/service.mjs +2708 -0
  202. package/scripts/bundle-sdk.mjs +317 -0
  203. package/scripts/install-client.sh +176 -0
  204. package/scripts/publish-all.sh +344 -0
  205. package/scripts/publish-docker.sh +27 -0
  206. package/scripts/validate-hook-contracts.mjs +54 -0
  207. package/scripts/validate-skill-prompts.mjs +95 -0
  208. package/skills/aria-cognition/aria-essence/SKILL.md +63 -0
  209. package/skills/aria-cognition/aria-essence/references/domain-matrix.md +80 -0
  210. package/skills/aria-cognition/aria-essence/references/evolution-loop.md +30 -0
  211. package/skills/aria-cognition/aria-essence/references/readable-cognition.md +27 -0
  212. package/skills/aria-cognition/aria-forge-guardrails/SKILL.md +35 -0
  213. package/skills/aria-cognition/aria-forge-guardrails/references/checklist.md +31 -0
  214. package/skills/aria-cognition/aria-repo-doctrine/SKILL.md +39 -0
  215. package/skills/aria-cognition/forge-quality-rules/SKILL.md +43 -0
  216. package/skills/aria-cognition/ghazali-8lens/SKILL.md +38 -0
  217. package/skills/aria-cognition/istiqra-induction/SKILL.md +26 -0
  218. package/skills/aria-cognition/ladunni-22/SKILL.md +35 -0
  219. package/skills/aria-cognition/mizan/SKILL.md +72 -0
  220. package/skills/aria-cognition/nadia/SKILL.md +38 -0
  221. package/skills/aria-cognition/nadia-psi/SKILL.md +38 -0
  222. package/skills/aria-cognition/predictor/SKILL.md +25 -0
  223. package/skills/aria-cognition/qiyas-analogy/SKILL.md +26 -0
  224. package/skills/aria-cognition/soul-domains/SKILL.md +25 -0
  225. package/src/auth-commands.ts +111 -45
  226. package/src/chat.ts +174 -13
  227. package/src/codebase-scanner.ts +4 -0
  228. package/src/config.ts +15 -0
  229. package/src/connectors/claude-code.ts +79 -25
  230. package/src/connectors/codebase-awareness.ts +408 -0
  231. package/src/connectors/codex.ts +274 -0
  232. package/src/connectors/cognitive-skills.ts +51 -0
  233. package/src/connectors/opencode.ts +93 -4
  234. package/src/connectors/repo-git-hooks.ts +86 -0
  235. package/src/connectors/repo-guard.ts +589 -0
  236. package/src/connectors/runtime.ts +374 -0
  237. package/src/connectors/shell.ts +83 -14
  238. package/src/connectors/syncd.ts +488 -0
  239. package/src/decisions.ts +469 -0
  240. package/src/garden-control-plane.ts +101 -26
  241. package/src/github-connect.ts +143 -0
  242. package/src/harness-client.ts +128 -3
  243. package/src/hive-client.ts +165 -5
  244. package/src/index.ts +41 -2
  245. package/src/lib/aristotle-noor-wire.ts +310 -0
  246. package/src/providers/types.ts +6 -0
  247. package/src/runtime-proof.ts +392 -0
  248. package/src/setup-wizard.ts +37 -2
@@ -0,0 +1,143 @@
1
+ import { execFileSync } from 'node:child_process';
2
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
3
+ import { homedir } from 'node:os';
4
+ import { join } from 'node:path';
5
+
6
+ const NPMRC_PATH = join(homedir(), '.npmrc');
7
+ const GH_SCOPE_LINE = '@aria_asi:registry=https://npm.pkg.github.com';
8
+ const GH_TOKEN_PREFIX = '//npm.pkg.github.com/:_authToken=';
9
+ const GH_ALWAYS_AUTH = 'always-auth=true';
10
+
11
+ export interface GitHubConnectResult {
12
+ ok: boolean;
13
+ authenticated: boolean;
14
+ npmrcConfigured: boolean;
15
+ gitConfigured: boolean;
16
+ logs: string[];
17
+ error?: string;
18
+ }
19
+
20
+ export interface GitHubStatusResult {
21
+ ghInstalled: boolean;
22
+ authenticated: boolean;
23
+ npmrcConfigured: boolean;
24
+ }
25
+
26
+ function hasGhCli(): boolean {
27
+ try {
28
+ execFileSync('gh', ['--version'], { stdio: 'ignore' });
29
+ return true;
30
+ } catch {
31
+ return false;
32
+ }
33
+ }
34
+
35
+ function isGhAuthenticated(): boolean {
36
+ try {
37
+ execFileSync('gh', ['auth', 'status', '--hostname', 'github.com'], { stdio: 'ignore' });
38
+ return true;
39
+ } catch {
40
+ return false;
41
+ }
42
+ }
43
+
44
+ function tryExec(args: string[], stdio: 'ignore' | 'inherit' = 'ignore'): boolean {
45
+ try {
46
+ execFileSync('gh', args, { stdio });
47
+ return true;
48
+ } catch {
49
+ return false;
50
+ }
51
+ }
52
+
53
+ function upsertNpmrc(token: string): void {
54
+ const dir = homedir();
55
+ if (!existsSync(dir)) {
56
+ mkdirSync(dir, { recursive: true, mode: 0o700 });
57
+ }
58
+
59
+ const existing = existsSync(NPMRC_PATH) ? readFileSync(NPMRC_PATH, 'utf8') : '';
60
+ const lines = existing
61
+ .split(/\r?\n/)
62
+ .filter((line) => line.trim() && !line.startsWith('@aria_asi:registry=') && !line.startsWith(GH_TOKEN_PREFIX) && line.trim() !== GH_ALWAYS_AUTH);
63
+
64
+ lines.push(GH_SCOPE_LINE, `${GH_TOKEN_PREFIX}${token}`, GH_ALWAYS_AUTH);
65
+ writeFileSync(NPMRC_PATH, `${lines.join('\n')}\n`, { mode: 0o600 });
66
+ }
67
+
68
+ function readGhToken(): string {
69
+ return execFileSync('gh', ['auth', 'token'], { encoding: 'utf8' }).trim();
70
+ }
71
+
72
+ export function getGitHubStatus(): GitHubStatusResult {
73
+ const ghInstalled = hasGhCli();
74
+ const authenticated = ghInstalled ? isGhAuthenticated() : false;
75
+ const npmrcConfigured = existsSync(NPMRC_PATH)
76
+ && readFileSync(NPMRC_PATH, 'utf8').includes(GH_SCOPE_LINE);
77
+ return { ghInstalled, authenticated, npmrcConfigured };
78
+ }
79
+
80
+ export function connectGitHub(options: { interactive?: boolean } = {}): GitHubConnectResult {
81
+ const interactive = options.interactive !== false;
82
+ const logs: string[] = [];
83
+
84
+ if (!hasGhCli()) {
85
+ return {
86
+ ok: false,
87
+ authenticated: false,
88
+ npmrcConfigured: false,
89
+ gitConfigured: false,
90
+ logs,
91
+ error: 'GitHub CLI (gh) is not installed. Install gh first, then run `aria github connect` again.',
92
+ };
93
+ }
94
+
95
+ let authenticated = isGhAuthenticated();
96
+ if (!authenticated) {
97
+ if (!interactive) {
98
+ return {
99
+ ok: false,
100
+ authenticated: false,
101
+ npmrcConfigured: false,
102
+ gitConfigured: false,
103
+ logs,
104
+ error: 'GitHub CLI is installed but not authenticated. Run `aria github connect` interactively.',
105
+ };
106
+ }
107
+
108
+ logs.push('Launching GitHub browser login...');
109
+ execFileSync('gh', ['auth', 'login', '--web', '--hostname', 'github.com', '--git-protocol', 'https', '--scopes', 'read:packages'], {
110
+ stdio: 'inherit',
111
+ });
112
+ authenticated = isGhAuthenticated();
113
+ } else if (interactive) {
114
+ tryExec(['auth', 'refresh', '--hostname', 'github.com', '--scopes', 'read:packages'], 'inherit');
115
+ }
116
+
117
+ if (!authenticated) {
118
+ return {
119
+ ok: false,
120
+ authenticated: false,
121
+ npmrcConfigured: false,
122
+ gitConfigured: false,
123
+ logs,
124
+ error: 'GitHub authentication did not complete successfully.',
125
+ };
126
+ }
127
+
128
+ const gitConfigured = tryExec(['auth', 'setup-git'], interactive ? 'inherit' : 'ignore');
129
+ const token = readGhToken();
130
+ upsertNpmrc(token);
131
+
132
+ logs.push('GitHub auth is active.');
133
+ logs.push('Configured ~/.npmrc for @aria_asi on GitHub Packages.');
134
+ if (gitConfigured) logs.push('Configured git to use GitHub CLI credentials.');
135
+
136
+ return {
137
+ ok: true,
138
+ authenticated: true,
139
+ npmrcConfigured: true,
140
+ gitConfigured,
141
+ logs,
142
+ };
143
+ }
@@ -55,6 +55,12 @@ export interface HarnessPacket {
55
55
 
56
56
  interface HarnessClientOptions {
57
57
  baseUrl?: string;
58
+ runtimeBaseUrl?: string;
59
+ }
60
+
61
+ interface RuntimeContext extends Record<string, unknown> {
62
+ sessionId?: string;
63
+ parentReceiptId?: string | null;
58
64
  }
59
65
 
60
66
  interface GateContext {
@@ -67,11 +73,21 @@ interface GateContext {
67
73
 
68
74
  export class HarnessClient {
69
75
  private baseUrl: string;
76
+ private runtimeBaseUrl: string;
70
77
  private token: string | null = null;
71
78
  private tokenPromise: Promise<string | null> | null = null;
72
79
 
73
80
  constructor(options: HarnessClientOptions = {}) {
74
- this.baseUrl = options.baseUrl ?? process.env.ARIA_HARNESS_BASE_URL ?? 'https://harness.ariasos.com';
81
+ this.baseUrl =
82
+ options.baseUrl ??
83
+ process.env.ARIA_HIVE_RUNTIME_URL ??
84
+ process.env.ARIA_HARNESS_BASE_URL ??
85
+ process.env.ARIA_HARNESS_URL ??
86
+ 'https://harness.ariasos.com';
87
+ this.runtimeBaseUrl =
88
+ options.runtimeBaseUrl ??
89
+ process.env.ARIA_RUNTIME_URL ??
90
+ 'http://127.0.0.1:4319';
75
91
  }
76
92
 
77
93
  /**
@@ -245,6 +261,61 @@ export class HarnessClient {
245
261
  return this.request<T>('PUT', path, body, gateContext);
246
262
  }
247
263
 
264
+ async runtimeRequest<T = unknown>(path: string, body?: unknown): Promise<T> {
265
+ const token = await this.getToken();
266
+ const headers: Record<string, string> = {
267
+ 'Content-Type': 'application/json',
268
+ };
269
+ if (token) headers['Authorization'] = `Bearer ${token}`;
270
+ if (fs.existsSync(OWNER_TOKEN_PATH)) {
271
+ const ownerJWT = fs.readFileSync(OWNER_TOKEN_PATH, 'utf-8').trim();
272
+ if (ownerJWT) {
273
+ headers['Authorization'] = `Bearer ${ownerJWT}`;
274
+ headers['x-aria-owner'] = 'true';
275
+ }
276
+ }
277
+ const response = await fetch(`${this.runtimeBaseUrl.replace(/\/+$/, '')}${path}`, {
278
+ method: 'POST',
279
+ headers,
280
+ body: body ? JSON.stringify(body) : undefined,
281
+ });
282
+ if (!response.ok) {
283
+ const detail = await this.tryExtractError(response);
284
+ throw new Error(`Runtime request failed (${response.status}) ${path}: ${detail}`);
285
+ }
286
+ return response.json() as Promise<T>;
287
+ }
288
+
289
+ async mizanPlan(context: RuntimeContext) {
290
+ return this.runtimeRequest('/mizan/plan', context);
291
+ }
292
+
293
+ async mizanPre(context: RuntimeContext, packet?: unknown) {
294
+ return this.runtimeRequest('/mizan/pre', { context, packet, sessionId: context.sessionId || 'runtime' });
295
+ }
296
+
297
+ async mizanMid(message: string, plannedApproach: string, context: RuntimeContext = {}, packet?: unknown) {
298
+ return this.runtimeRequest('/mizan/mid', {
299
+ context,
300
+ packet,
301
+ message,
302
+ plannedApproach,
303
+ sessionId: context.sessionId || 'runtime',
304
+ parentReceiptId: context.parentReceiptId || null,
305
+ });
306
+ }
307
+
308
+ async mizanPost(text: string, evidence: Record<string, unknown>, context: RuntimeContext = {}, packet?: unknown) {
309
+ return this.runtimeRequest('/mizan/post', {
310
+ context,
311
+ packet,
312
+ text,
313
+ evidence,
314
+ sessionId: context.sessionId || 'runtime',
315
+ parentReceiptId: context.parentReceiptId || null,
316
+ });
317
+ }
318
+
248
319
  // ── Helpers ──────────────────────────────────────────────────────
249
320
 
250
321
  private async tryExtractError(response: Response): Promise<string> {
@@ -302,14 +373,22 @@ function ownerHeaders(): Record<string, string> {
302
373
 
303
374
  export const harnessClient = {
304
375
  get(path: string, init?: { headers?: Record<string, string> }): Promise<Response> {
305
- const baseUrl = process.env.ARIA_HARNESS_BASE_URL ?? 'https://harness.ariasos.com';
376
+ const baseUrl =
377
+ process.env.ARIA_HIVE_RUNTIME_URL ??
378
+ process.env.ARIA_HARNESS_BASE_URL ??
379
+ process.env.ARIA_HARNESS_URL ??
380
+ 'https://harness.ariasos.com';
306
381
  return fetch(`${baseUrl}${path}`, {
307
382
  method: 'GET',
308
383
  headers: { 'Content-Type': 'application/json', ...ownerHeaders(), ...(init?.headers ?? {}) },
309
384
  });
310
385
  },
311
386
  post(path: string, init?: { body?: unknown; headers?: Record<string, string> }): Promise<Response> {
312
- const baseUrl = process.env.ARIA_HARNESS_BASE_URL ?? 'https://harness.ariasos.com';
387
+ const baseUrl =
388
+ process.env.ARIA_HIVE_RUNTIME_URL ??
389
+ process.env.ARIA_HARNESS_BASE_URL ??
390
+ process.env.ARIA_HARNESS_URL ??
391
+ 'https://harness.ariasos.com';
313
392
  return fetch(`${baseUrl}${path}`, {
314
393
  method: 'POST',
315
394
  headers: { 'Content-Type': 'application/json', ...ownerHeaders(), ...(init?.headers ?? {}) },
@@ -457,6 +536,52 @@ export async function validateOutput(args: {
457
536
  }
458
537
  }
459
538
 
539
+ export async function mizanPlan(context: RuntimeContext): Promise<unknown | null> {
540
+ try {
541
+ const client = getDefaultClient();
542
+ return await client.mizanPlan(context);
543
+ } catch {
544
+ return null;
545
+ }
546
+ }
547
+
548
+ export async function mizanPre(context: RuntimeContext, packet?: unknown): Promise<unknown | null> {
549
+ try {
550
+ const client = getDefaultClient();
551
+ return await client.mizanPre(context, packet);
552
+ } catch {
553
+ return null;
554
+ }
555
+ }
556
+
557
+ export async function mizanMid(
558
+ message: string,
559
+ plannedApproach: string,
560
+ context: RuntimeContext = {},
561
+ packet?: unknown,
562
+ ): Promise<unknown | null> {
563
+ try {
564
+ const client = getDefaultClient();
565
+ return await client.mizanMid(message, plannedApproach, context, packet);
566
+ } catch {
567
+ return null;
568
+ }
569
+ }
570
+
571
+ export async function mizanPost(
572
+ text: string,
573
+ evidence: Record<string, unknown>,
574
+ context: RuntimeContext = {},
575
+ packet?: unknown,
576
+ ): Promise<unknown | null> {
577
+ try {
578
+ const client = getDefaultClient();
579
+ return await client.mizanPost(text, evidence, context, packet);
580
+ } catch {
581
+ return null;
582
+ }
583
+ }
584
+
460
585
  // ── getRecentTurns ────────────────────────────────────────────────────
461
586
 
462
587
  /**
@@ -22,9 +22,50 @@
22
22
  // internal-only) so external customers ship the connector with their
23
23
  // CLI/app and get hive integration with no internal Aria deps.
24
24
 
25
- const HARNESS_URL = process.env.ARIA_HARNESS_URL || 'http://192.168.4.25:30080';
25
+ const HARNESS_URL =
26
+ process.env.ARIA_HIVE_RUNTIME_URL ||
27
+ process.env.ARIA_HARNESS_BASE_URL ||
28
+ process.env.ARIA_HARNESS_URL ||
29
+ 'https://harness.ariasos.com';
26
30
  const HARNESS_TOKEN = process.env.ARIA_HARNESS_TOKEN || '';
27
31
 
32
+ export interface RuntimeProofEmitConfig {
33
+ sessionId: string;
34
+ platform: string;
35
+ provider?: string;
36
+ model?: string;
37
+ surface?: string;
38
+ actor?: string;
39
+ promptTokens?: number;
40
+ completionTokens?: number;
41
+ totalTokens?: number;
42
+ latencyMs?: number;
43
+ turnCount?: number;
44
+ llmDispatches?: number;
45
+ toolDispatches?: number;
46
+ mcpToolCalls?: number;
47
+ gateSeverity?: string;
48
+ qualityScore?: number;
49
+ qualityStatus?: string;
50
+ complianceState?: string;
51
+ packetHash?: string;
52
+ blockedUnsafeActions?: number;
53
+ interceptions?: number;
54
+ hallucinationStops?: number;
55
+ passRatePercentToday?: number;
56
+ hiveRuntimeStatus?: string;
57
+ hiveCycleCount?: number;
58
+ hiveTasksCompleted?: number;
59
+ hiveTasksFailed?: number;
60
+ }
61
+
62
+ function authHeaders(): Record<string, string> {
63
+ return {
64
+ 'Content-Type': 'application/json',
65
+ ...(HARNESS_TOKEN ? { Authorization: `Bearer ${HARNESS_TOKEN}` } : {}),
66
+ };
67
+ }
68
+
28
69
  // Schema matches apps/arias-soul/api/hive/register.ts:
29
70
  // POST { session_id, platform, user_id?, context?, capabilities? }
30
71
  // → { status, session, hive: { active_sessions, message }, aria: { greeting } }
@@ -58,10 +99,7 @@ export async function registerWithHive(
58
99
  try {
59
100
  const resp = await fetch(`${HARNESS_URL}/api/hive/register`, {
60
101
  method: 'POST',
61
- headers: {
62
- 'Content-Type': 'application/json',
63
- ...(HARNESS_TOKEN ? { Authorization: `Bearer ${HARNESS_TOKEN}` } : {}),
64
- },
102
+ headers: authHeaders(),
65
103
  body: JSON.stringify({
66
104
  session_id: cfg.sessionId,
67
105
  platform: cfg.platform,
@@ -77,6 +115,128 @@ export async function registerWithHive(
77
115
  }
78
116
  }
79
117
 
118
+ export async function emitRuntimeProofMetric(
119
+ cfg: RuntimeProofEmitConfig,
120
+ ): Promise<void> {
121
+ const totalTokens =
122
+ cfg.totalTokens ??
123
+ ((cfg.promptTokens ?? undefined) !== undefined || (cfg.completionTokens ?? undefined) !== undefined
124
+ ? (cfg.promptTokens ?? 0) + (cfg.completionTokens ?? 0)
125
+ : undefined);
126
+ const gateSeverity = (cfg.gateSeverity || '').trim().toLowerCase();
127
+ const qualityGateStatus =
128
+ gateSeverity === 'block' ? 'block' :
129
+ gateSeverity === 'warn' ? 'warn' :
130
+ gateSeverity === 'pass' ? 'pass' :
131
+ (cfg.qualityStatus || '').trim().toLowerCase() === 'block' ? 'block' :
132
+ (cfg.qualityStatus || '').trim().toLowerCase() === 'warn' ? 'warn' :
133
+ 'pass';
134
+ const qualityScore =
135
+ typeof cfg.qualityScore === 'number'
136
+ ? cfg.qualityScore
137
+ : typeof cfg.passRatePercentToday === 'number'
138
+ ? Math.max(0, Math.min(1, cfg.passRatePercentToday / 100))
139
+ : undefined;
140
+
141
+ const runtimePayload = {
142
+ event_type: 'connector_turn_completed',
143
+ source: 'aria-connector',
144
+ session_id: cfg.sessionId,
145
+ actor: cfg.actor || cfg.platform,
146
+ surface: cfg.surface || cfg.platform,
147
+ provider: cfg.provider,
148
+ model: cfg.model,
149
+ success: qualityGateStatus !== 'block',
150
+ latency_ms: cfg.latencyMs,
151
+ token_usage: {
152
+ prompt_tokens: cfg.promptTokens,
153
+ completion_tokens: cfg.completionTokens,
154
+ total_tokens: totalTokens,
155
+ },
156
+ quality_gate: {
157
+ name: 'aria_runtime_proof',
158
+ passed: qualityGateStatus !== 'block',
159
+ hard_block: qualityGateStatus === 'block',
160
+ score: qualityScore,
161
+ reasons: [
162
+ cfg.qualityStatus,
163
+ cfg.complianceState,
164
+ cfg.hiveRuntimeStatus,
165
+ ].filter((value): value is string => typeof value === 'string' && value.trim().length > 0),
166
+ },
167
+ harness: {
168
+ packet_hash: cfg.packetHash,
169
+ packet_compliant: cfg.complianceState ? cfg.complianceState.toLowerCase() !== 'block' : undefined,
170
+ quality_gated_output: cfg.qualityStatus ? cfg.qualityStatus.toLowerCase() !== 'block' : undefined,
171
+ blocked_actions: cfg.blockedUnsafeActions,
172
+ interceptions: cfg.interceptions,
173
+ hallucinations_stopped: cfg.hallucinationStops,
174
+ public_proof_eligible: true,
175
+ },
176
+ payload: {
177
+ runtime_origin: 'connector',
178
+ platform: cfg.platform,
179
+ turn_count: cfg.turnCount,
180
+ llm_dispatches: cfg.llmDispatches,
181
+ tool_dispatches: cfg.toolDispatches,
182
+ mcp_tool_calls: cfg.mcpToolCalls,
183
+ hive_runtime_status: cfg.hiveRuntimeStatus,
184
+ hive_cycle_count: cfg.hiveCycleCount,
185
+ hive_tasks_completed: cfg.hiveTasksCompleted,
186
+ hive_tasks_failed: cfg.hiveTasksFailed,
187
+ pass_rate_percent_today: cfg.passRatePercentToday,
188
+ },
189
+ };
190
+
191
+ const proofPayload = {
192
+ source_service: 'aria-connector',
193
+ actor: cfg.actor || cfg.platform,
194
+ delivery_surface: cfg.surface || cfg.platform,
195
+ session_id: cfg.sessionId,
196
+ turn_count: cfg.turnCount,
197
+ model_provider: cfg.provider,
198
+ model_name: cfg.model,
199
+ harness_packet_hash: cfg.packetHash,
200
+ quality_score: qualityScore,
201
+ quality_gate_status: qualityGateStatus,
202
+ hallucination_stopped: (cfg.hallucinationStops ?? 0) > 0,
203
+ blocked_action: (cfg.blockedUnsafeActions ?? 0) > 0,
204
+ intercepted_action: (cfg.interceptions ?? 0) > 0,
205
+ prompt_tokens: cfg.promptTokens,
206
+ completion_tokens: cfg.completionTokens,
207
+ total_tokens: totalTokens,
208
+ latency_ms: cfg.latencyMs,
209
+ metadata: {
210
+ platform: cfg.platform,
211
+ llm_dispatches: cfg.llmDispatches,
212
+ tool_dispatches: cfg.toolDispatches,
213
+ mcp_tool_calls: cfg.mcpToolCalls,
214
+ gate_severity: cfg.gateSeverity,
215
+ quality_status: cfg.qualityStatus,
216
+ compliance_state: cfg.complianceState,
217
+ hive_runtime_status: cfg.hiveRuntimeStatus,
218
+ hive_cycle_count: cfg.hiveCycleCount,
219
+ hive_tasks_completed: cfg.hiveTasksCompleted,
220
+ hive_tasks_failed: cfg.hiveTasksFailed,
221
+ pass_rate_percent_today: cfg.passRatePercentToday,
222
+ },
223
+ };
224
+
225
+ const headers = authHeaders();
226
+ await Promise.allSettled([
227
+ fetch(`${HARNESS_URL}/runtime/ingest`, {
228
+ method: 'POST',
229
+ headers,
230
+ body: JSON.stringify(runtimePayload),
231
+ }),
232
+ fetch(`${HARNESS_URL}/runtime-proof/ingest`, {
233
+ method: 'POST',
234
+ headers,
235
+ body: JSON.stringify(proofPayload),
236
+ }),
237
+ ]);
238
+ }
239
+
80
240
  // Heartbeat = re-register the same payload. The hive endpoint is
81
241
  // idempotent (ON CONFLICT … DO UPDATE in the SQL). Default cadence
82
242
  // matches openclaw-shared's 45s — short enough for liveness, long
package/src/index.ts CHANGED
@@ -1,14 +1,26 @@
1
1
  export { loadConfig, saveConfig, updateConfig, getDefaultConfig, getConfigPath, getConfigDir } from './config.js';
2
2
  export type { AriaConfig, ModelConfig, LinkedRepo, DatabaseConfig, ConnectorState } from './config.js';
3
3
 
4
- export { scanCodebase, schemaImageToText } from './codebase-scanner.js';
5
- export type { SchemaImage, DirectoryNode, Dependency } from './codebase-scanner.js';
4
+ export { scanCodebase, schemaImageToText, watchCodebase } from './codebase-scanner.js';
5
+ export type { SchemaImage, DirectoryNode, Dependency, WatchHandle, WatchOptions, WatchMode } from './codebase-scanner.js';
6
6
 
7
7
  export { runSetupWizard } from './setup-wizard.js';
8
+ export { connectGitHub, getGitHubStatus } from './github-connect.js';
8
9
 
9
10
  export { connectClaudeCode, disconnectClaudeCode } from './connectors/claude-code.js';
11
+ export { connectCodex } from './connectors/codex.js';
10
12
  export { connectCursor, disconnectCursor } from './connectors/cursor.js';
11
13
  export { connectOpenCode, disconnectOpenCode } from './connectors/opencode.js';
14
+ export {
15
+ installCodebaseAwarenessDaemon,
16
+ startCodebaseAwarenessDaemon,
17
+ runCodebaseAwarenessScan,
18
+ readCodebaseAwarenessState,
19
+ } from './connectors/codebase-awareness.js';
20
+ export { installRepoGuardDaemon, startRepoGuardDaemon, readGuardState } from './connectors/repo-guard.js';
21
+ export { installRepoDoctrineGitHooks } from './connectors/repo-git-hooks.js';
22
+ export { installSharedRuntime } from './connectors/runtime.js';
23
+ export { installAriaSyncDaemon, runSyncOnce, startSyncDaemon, readSyncDaemonState } from './connectors/syncd.js';
12
24
  export { connectShell, disconnectShell } from './connectors/shell.js';
13
25
 
14
26
  export { GardenClient } from './garden-client.js';
@@ -21,6 +33,33 @@ export { AriaChat } from './chat.js';
21
33
 
22
34
  export { fetchHarness, combineHarnessContext, checkHarnessHealth, validateOutput, getRecentTurns } from './harness-client.js';
23
35
  export type { HarnessPacket, HarnessChunk } from './harness-client.js';
36
+ export { enrichRuntimeProof, fetchRuntimeProofTelemetry, formatRuntimeProofLine } from './runtime-proof.js';
37
+ export type { RuntimeProofSnapshot, RuntimeProofTelemetry } from './runtime-proof.js';
24
38
 
25
39
  export { loadPersona, savePersona, updatePersona, buildPersonaBlock } from './persona.js';
26
40
  export type { PersonaContext } from './persona.js';
41
+
42
+ export {
43
+ recordDalio,
44
+ evaluatePendingDecisions,
45
+ getBlockingIncidents,
46
+ claimSessionLock,
47
+ releaseSessionLock,
48
+ heartbeatSessionLock,
49
+ checkSessionLockDrift,
50
+ postSessionMessage,
51
+ readSessionMessages,
52
+ } from './decisions.js';
53
+ export type {
54
+ ExpectedOutcomePredicate,
55
+ RecordDalioArgs,
56
+ RecordDalioResult,
57
+ EvaluatePendingResult,
58
+ BlockingIncident,
59
+ SessionLockArgs,
60
+ SessionLockResult,
61
+ SessionLockHeartbeatResult,
62
+ SessionLockDriftResult,
63
+ SessionMessageArgs,
64
+ SessionMessageResult,
65
+ } from './decisions.js';