@aria_asi/cli 0.2.0

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 (153) hide show
  1. package/bin/aria.js +168 -0
  2. package/dist/aria-connector/src/auth-commands.d.ts +28 -0
  3. package/dist/aria-connector/src/auth-commands.d.ts.map +1 -0
  4. package/dist/aria-connector/src/auth-commands.js +129 -0
  5. package/dist/aria-connector/src/auth-commands.js.map +1 -0
  6. package/dist/aria-connector/src/auth.d.ts +12 -0
  7. package/dist/aria-connector/src/auth.d.ts.map +1 -0
  8. package/dist/aria-connector/src/auth.js +31 -0
  9. package/dist/aria-connector/src/auth.js.map +1 -0
  10. package/dist/aria-connector/src/auto-mcp.d.ts +23 -0
  11. package/dist/aria-connector/src/auto-mcp.d.ts.map +1 -0
  12. package/dist/aria-connector/src/auto-mcp.js +994 -0
  13. package/dist/aria-connector/src/auto-mcp.js.map +1 -0
  14. package/dist/aria-connector/src/chat.d.ts +21 -0
  15. package/dist/aria-connector/src/chat.d.ts.map +1 -0
  16. package/dist/aria-connector/src/chat.js +332 -0
  17. package/dist/aria-connector/src/chat.js.map +1 -0
  18. package/dist/aria-connector/src/codebase-scanner.d.ts +7 -0
  19. package/dist/aria-connector/src/codebase-scanner.d.ts.map +1 -0
  20. package/dist/aria-connector/src/codebase-scanner.js +6 -0
  21. package/dist/aria-connector/src/codebase-scanner.js.map +1 -0
  22. package/dist/aria-connector/src/cognition-log.d.ts +17 -0
  23. package/dist/aria-connector/src/cognition-log.d.ts.map +1 -0
  24. package/dist/aria-connector/src/cognition-log.js +19 -0
  25. package/dist/aria-connector/src/cognition-log.js.map +1 -0
  26. package/dist/aria-connector/src/config.d.ts +41 -0
  27. package/dist/aria-connector/src/config.d.ts.map +1 -0
  28. package/dist/aria-connector/src/config.js +50 -0
  29. package/dist/aria-connector/src/config.js.map +1 -0
  30. package/dist/aria-connector/src/connectors/claude-code.d.ts +4 -0
  31. package/dist/aria-connector/src/connectors/claude-code.d.ts.map +1 -0
  32. package/dist/aria-connector/src/connectors/claude-code.js +204 -0
  33. package/dist/aria-connector/src/connectors/claude-code.js.map +1 -0
  34. package/dist/aria-connector/src/connectors/cursor.d.ts +4 -0
  35. package/dist/aria-connector/src/connectors/cursor.d.ts.map +1 -0
  36. package/dist/aria-connector/src/connectors/cursor.js +63 -0
  37. package/dist/aria-connector/src/connectors/cursor.js.map +1 -0
  38. package/dist/aria-connector/src/connectors/opencode.d.ts +4 -0
  39. package/dist/aria-connector/src/connectors/opencode.d.ts.map +1 -0
  40. package/dist/aria-connector/src/connectors/opencode.js +102 -0
  41. package/dist/aria-connector/src/connectors/opencode.js.map +1 -0
  42. package/dist/aria-connector/src/connectors/shell.d.ts +4 -0
  43. package/dist/aria-connector/src/connectors/shell.d.ts.map +1 -0
  44. package/dist/aria-connector/src/connectors/shell.js +58 -0
  45. package/dist/aria-connector/src/connectors/shell.js.map +1 -0
  46. package/dist/aria-connector/src/garden-client.d.ts +19 -0
  47. package/dist/aria-connector/src/garden-client.d.ts.map +1 -0
  48. package/dist/aria-connector/src/garden-client.js +85 -0
  49. package/dist/aria-connector/src/garden-client.js.map +1 -0
  50. package/dist/aria-connector/src/garden-control-plane.d.ts +22 -0
  51. package/dist/aria-connector/src/garden-control-plane.d.ts.map +1 -0
  52. package/dist/aria-connector/src/garden-control-plane.js +43 -0
  53. package/dist/aria-connector/src/garden-control-plane.js.map +1 -0
  54. package/dist/aria-connector/src/harness-client.d.ts +166 -0
  55. package/dist/aria-connector/src/harness-client.d.ts.map +1 -0
  56. package/dist/aria-connector/src/harness-client.js +344 -0
  57. package/dist/aria-connector/src/harness-client.js.map +1 -0
  58. package/dist/aria-connector/src/hive-client.d.ts +32 -0
  59. package/dist/aria-connector/src/hive-client.d.ts.map +1 -0
  60. package/dist/aria-connector/src/hive-client.js +69 -0
  61. package/dist/aria-connector/src/hive-client.js.map +1 -0
  62. package/dist/aria-connector/src/index.d.ts +19 -0
  63. package/dist/aria-connector/src/index.d.ts.map +1 -0
  64. package/dist/aria-connector/src/index.js +13 -0
  65. package/dist/aria-connector/src/index.js.map +1 -0
  66. package/dist/aria-connector/src/install-hooks.d.ts +18 -0
  67. package/dist/aria-connector/src/install-hooks.d.ts.map +1 -0
  68. package/dist/aria-connector/src/install-hooks.js +224 -0
  69. package/dist/aria-connector/src/install-hooks.js.map +1 -0
  70. package/dist/aria-connector/src/model-context.d.ts +8 -0
  71. package/dist/aria-connector/src/model-context.d.ts.map +1 -0
  72. package/dist/aria-connector/src/model-context.js +83 -0
  73. package/dist/aria-connector/src/model-context.js.map +1 -0
  74. package/dist/aria-connector/src/persona.d.ts +27 -0
  75. package/dist/aria-connector/src/persona.d.ts.map +1 -0
  76. package/dist/aria-connector/src/persona.js +86 -0
  77. package/dist/aria-connector/src/persona.js.map +1 -0
  78. package/dist/aria-connector/src/providers/anthropic.d.ts +4 -0
  79. package/dist/aria-connector/src/providers/anthropic.d.ts.map +1 -0
  80. package/dist/aria-connector/src/providers/anthropic.js +92 -0
  81. package/dist/aria-connector/src/providers/anthropic.js.map +1 -0
  82. package/dist/aria-connector/src/providers/deepseek.d.ts +3 -0
  83. package/dist/aria-connector/src/providers/deepseek.d.ts.map +1 -0
  84. package/dist/aria-connector/src/providers/deepseek.js +28 -0
  85. package/dist/aria-connector/src/providers/deepseek.js.map +1 -0
  86. package/dist/aria-connector/src/providers/google.d.ts +3 -0
  87. package/dist/aria-connector/src/providers/google.d.ts.map +1 -0
  88. package/dist/aria-connector/src/providers/google.js +38 -0
  89. package/dist/aria-connector/src/providers/google.js.map +1 -0
  90. package/dist/aria-connector/src/providers/ollama.d.ts +3 -0
  91. package/dist/aria-connector/src/providers/ollama.d.ts.map +1 -0
  92. package/dist/aria-connector/src/providers/ollama.js +28 -0
  93. package/dist/aria-connector/src/providers/ollama.js.map +1 -0
  94. package/dist/aria-connector/src/providers/openai.d.ts +4 -0
  95. package/dist/aria-connector/src/providers/openai.d.ts.map +1 -0
  96. package/dist/aria-connector/src/providers/openai.js +84 -0
  97. package/dist/aria-connector/src/providers/openai.js.map +1 -0
  98. package/dist/aria-connector/src/providers/openrouter.d.ts +3 -0
  99. package/dist/aria-connector/src/providers/openrouter.d.ts.map +1 -0
  100. package/dist/aria-connector/src/providers/openrouter.js +30 -0
  101. package/dist/aria-connector/src/providers/openrouter.js.map +1 -0
  102. package/dist/aria-connector/src/providers/types.d.ts +20 -0
  103. package/dist/aria-connector/src/providers/types.d.ts.map +1 -0
  104. package/dist/aria-connector/src/providers/types.js +2 -0
  105. package/dist/aria-connector/src/providers/types.js.map +1 -0
  106. package/dist/aria-connector/src/setup-wizard.d.ts +2 -0
  107. package/dist/aria-connector/src/setup-wizard.d.ts.map +1 -0
  108. package/dist/aria-connector/src/setup-wizard.js +140 -0
  109. package/dist/aria-connector/src/setup-wizard.js.map +1 -0
  110. package/dist/aria-connector/src/types.d.ts +30 -0
  111. package/dist/aria-connector/src/types.d.ts.map +1 -0
  112. package/dist/aria-connector/src/types.js +5 -0
  113. package/dist/aria-connector/src/types.js.map +1 -0
  114. package/dist/aria-web/src/lib/codebase-scanner.d.ts +127 -0
  115. package/dist/aria-web/src/lib/codebase-scanner.d.ts.map +1 -0
  116. package/dist/aria-web/src/lib/codebase-scanner.js +1730 -0
  117. package/dist/aria-web/src/lib/codebase-scanner.js.map +1 -0
  118. package/dist/cli-0.2.0.tgz +0 -0
  119. package/dist/install.sh +13 -0
  120. package/hooks/aria-harness-via-sdk.mjs +317 -0
  121. package/hooks/aria-pre-tool-gate.mjs +596 -0
  122. package/hooks/aria-preprompt-consult.mjs +175 -0
  123. package/hooks/aria-stop-gate.mjs +222 -0
  124. package/package.json +47 -0
  125. package/src/__tests__/auth-commands.test.ts +132 -0
  126. package/src/auth-commands.ts +175 -0
  127. package/src/auth.ts +33 -0
  128. package/src/auto-mcp.ts +1172 -0
  129. package/src/chat.ts +387 -0
  130. package/src/codebase-scanner.ts +18 -0
  131. package/src/cognition-log.ts +30 -0
  132. package/src/config.ts +94 -0
  133. package/src/connectors/claude-code.ts +213 -0
  134. package/src/connectors/cursor.ts +75 -0
  135. package/src/connectors/opencode.ts +115 -0
  136. package/src/connectors/shell.ts +72 -0
  137. package/src/garden-client.ts +98 -0
  138. package/src/garden-control-plane.ts +108 -0
  139. package/src/harness-client.ts +454 -0
  140. package/src/hive-client.ts +104 -0
  141. package/src/index.ts +26 -0
  142. package/src/install-hooks.ts +259 -0
  143. package/src/model-context.ts +88 -0
  144. package/src/persona.ts +113 -0
  145. package/src/providers/anthropic.ts +120 -0
  146. package/src/providers/deepseek.ts +40 -0
  147. package/src/providers/google.ts +57 -0
  148. package/src/providers/ollama.ts +43 -0
  149. package/src/providers/openai.ts +108 -0
  150. package/src/providers/openrouter.ts +42 -0
  151. package/src/providers/types.ts +35 -0
  152. package/src/setup-wizard.ts +177 -0
  153. package/src/types.ts +32 -0
@@ -0,0 +1,69 @@
1
+ // Hive registration + heartbeat for ANY client using @aria/connector.
2
+ //
3
+ // Aria's vision: every CLI install, every customer hitting the harness
4
+ // HTTP API, every IDE connector — all register in the Hive on session
5
+ // start and heartbeat through their lifetime. Three goals (per Hamza,
6
+ // 2026-04-26):
7
+ //
8
+ // 1. Compounding evolution — every session contributes signal back
9
+ // to Aria. Hive entries carry capability lists, platform, recent
10
+ // activity. Aria's evolution-engine aggregates across tenants.
11
+ //
12
+ // 2. Protect IP — the Hive endpoint is on aria-soul, behind multi-
13
+ // tenant auth (API keys + rate limit + concurrency guards from
14
+ // commit c68588302). Customers see their own session, not raw
15
+ // doctrine sources.
16
+ //
17
+ // 3. Protect from abuse — heartbeat-based throttling. A tenant
18
+ // whose session count or activity diverges from their tier gets
19
+ // rate-limited at the gate, not at the application layer.
20
+ //
21
+ // This module is decoupled from @aria/openclaw-shared (which is
22
+ // internal-only) so external customers ship the connector with their
23
+ // CLI/app and get hive integration with no internal Aria deps.
24
+ const HARNESS_URL = process.env.ARIA_HARNESS_URL || 'http://192.168.4.25:30080';
25
+ const HARNESS_TOKEN = process.env.ARIA_HARNESS_TOKEN || '';
26
+ export async function registerWithHive(cfg) {
27
+ // Doctrine: no policy timeouts. Real network errors arrive via fetch
28
+ // rejection. If the hive is unreachable, registration is best-effort
29
+ // and the CLI continues — the session works locally even when
30
+ // detached from the central registry.
31
+ try {
32
+ const resp = await fetch(`${HARNESS_URL}/api/hive/register`, {
33
+ method: 'POST',
34
+ headers: {
35
+ 'Content-Type': 'application/json',
36
+ ...(HARNESS_TOKEN ? { Authorization: `Bearer ${HARNESS_TOKEN}` } : {}),
37
+ },
38
+ body: JSON.stringify({
39
+ session_id: cfg.sessionId,
40
+ platform: cfg.platform,
41
+ user_id: cfg.userId,
42
+ capabilities: cfg.capabilities ?? [],
43
+ context: cfg.context ?? {},
44
+ }),
45
+ });
46
+ if (!resp.ok)
47
+ return null;
48
+ return (await resp.json());
49
+ }
50
+ catch {
51
+ return null;
52
+ }
53
+ }
54
+ export function startHeartbeat(cfg, intervalMs = 45_000) {
55
+ // Fire one immediately so the hive has a fresh entry before the
56
+ // first interval tick. If it fails, schedule the next tick anyway —
57
+ // the hive may come back later.
58
+ registerWithHive(cfg).catch(() => { });
59
+ const timer = setInterval(() => {
60
+ registerWithHive(cfg).catch(() => { });
61
+ }, intervalMs);
62
+ // Don't keep the process alive just for heartbeats.
63
+ if (typeof timer.unref === 'function')
64
+ timer.unref();
65
+ return {
66
+ stop: () => clearInterval(timer),
67
+ };
68
+ }
69
+ //# sourceMappingURL=hive-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hive-client.js","sourceRoot":"","sources":["../../../src/hive-client.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,EAAE;AACF,uEAAuE;AACvE,sEAAsE;AACtE,sEAAsE;AACtE,eAAe;AACf,EAAE;AACF,qEAAqE;AACrE,sEAAsE;AACtE,oEAAoE;AACpE,EAAE;AACF,qEAAqE;AACrE,oEAAoE;AACpE,mEAAmE;AACnE,yBAAyB;AACzB,EAAE;AACF,iEAAiE;AACjE,qEAAqE;AACrE,+DAA+D;AAC/D,EAAE;AACF,gEAAgE;AAChE,qEAAqE;AACrE,+DAA+D;AAE/D,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,2BAA2B,CAAC;AAChF,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC;AAyB3D,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAAuB;IAEvB,qEAAqE;IACrE,qEAAqE;IACrE,8DAA8D;IAC9D,sCAAsC;IACtC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,WAAW,oBAAoB,EAAE;YAC3D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACvE;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,UAAU,EAAE,GAAG,CAAC,SAAS;gBACzB,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,OAAO,EAAE,GAAG,CAAC,MAAM;gBACnB,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;gBACpC,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE;aAC3B,CAAC;SACH,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QAC1B,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAuB,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAUD,MAAM,UAAU,cAAc,CAC5B,GAAuB,EACvB,aAAqB,MAAM;IAE3B,gEAAgE;IAChE,oEAAoE;IACpE,gCAAgC;IAChC,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACxC,CAAC,EAAE,UAAU,CAAC,CAAC;IACf,oDAAoD;IACpD,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU;QAAE,KAAK,CAAC,KAAK,EAAE,CAAC;IACrD,OAAO;QACL,IAAI,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC;KACjC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,19 @@
1
+ export { loadConfig, saveConfig, updateConfig, getDefaultConfig, getConfigPath, getConfigDir } from './config.js';
2
+ export type { AriaConfig, ModelConfig, LinkedRepo, DatabaseConfig, ConnectorState } from './config.js';
3
+ export { scanCodebase, schemaImageToText } from './codebase-scanner.js';
4
+ export type { SchemaImage, DirectoryNode, Dependency } from './codebase-scanner.js';
5
+ export { runSetupWizard } from './setup-wizard.js';
6
+ export { connectClaudeCode, disconnectClaudeCode } from './connectors/claude-code.js';
7
+ export { connectCursor, disconnectCursor } from './connectors/cursor.js';
8
+ export { connectOpenCode, disconnectOpenCode } from './connectors/opencode.js';
9
+ export { connectShell, disconnectShell } from './connectors/shell.js';
10
+ export { GardenClient } from './garden-client.js';
11
+ export type { GardenStatus } from './garden-client.js';
12
+ export { generateMcpServer, detectToolCandidates } from './auto-mcp.js';
13
+ export type { ToolCandidate, ToolParameter, McpGenerationResult } from './auto-mcp.js';
14
+ export { AriaChat } from './chat.js';
15
+ export { fetchHarness, combineHarnessContext, checkHarnessHealth, validateOutput, getRecentTurns } from './harness-client.js';
16
+ export type { HarnessPacket, HarnessChunk } from './harness-client.js';
17
+ export { loadPersona, savePersona, updatePersona, buildPersonaBlock } from './persona.js';
18
+ export type { PersonaContext } from './persona.js';
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAClH,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEvG,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACxE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEpF,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAEtE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACxE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEvF,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC9H,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEvE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC1F,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,13 @@
1
+ export { loadConfig, saveConfig, updateConfig, getDefaultConfig, getConfigPath, getConfigDir } from './config.js';
2
+ export { scanCodebase, schemaImageToText } from './codebase-scanner.js';
3
+ export { runSetupWizard } from './setup-wizard.js';
4
+ export { connectClaudeCode, disconnectClaudeCode } from './connectors/claude-code.js';
5
+ export { connectCursor, disconnectCursor } from './connectors/cursor.js';
6
+ export { connectOpenCode, disconnectOpenCode } from './connectors/opencode.js';
7
+ export { connectShell, disconnectShell } from './connectors/shell.js';
8
+ export { GardenClient } from './garden-client.js';
9
+ export { generateMcpServer, detectToolCandidates } from './auto-mcp.js';
10
+ export { AriaChat } from './chat.js';
11
+ export { fetchHarness, combineHarnessContext, checkHarnessHealth, validateOutput, getRecentTurns } from './harness-client.js';
12
+ export { loadPersona, savePersona, updatePersona, buildPersonaBlock } from './persona.js';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGlH,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAGxE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAEtE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAGxE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG9H,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,18 @@
1
+ export interface InstallHooksOptions {
2
+ /** Overwrite existing hooks even if present. Default false. */
3
+ force?: boolean;
4
+ /** Override the harness URL written into settings.json env (clients with private deployments). */
5
+ harnessUrl?: string;
6
+ /** Override the home directory (used by tests). */
7
+ homeDir?: string;
8
+ }
9
+ export interface InstallHooksResult {
10
+ ok: boolean;
11
+ installed: string[];
12
+ merged: string[];
13
+ backupsCreated: string[];
14
+ settingsPath: string;
15
+ error?: string;
16
+ }
17
+ export declare function installHooks(opts?: InstallHooksOptions): Promise<InstallHooksResult>;
18
+ //# sourceMappingURL=install-hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-hooks.d.ts","sourceRoot":"","sources":["../../../src/install-hooks.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,mBAAmB;IAClC,+DAA+D;IAC/D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kGAAkG;IAClG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAyHD,wBAAsB,YAAY,CAAC,IAAI,GAAE,mBAAwB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAqG9F"}
@@ -0,0 +1,224 @@
1
+ // install-hooks — drops the harness gate hooks into the client's
2
+ // ~/.claude/hooks/ directory and registers them in their settings.json.
3
+ //
4
+ // This is what makes @aria_asi/cli a self-installing harness. Without it,
5
+ // clients install the CLI and have a license-aware HTTP client. With it,
6
+ // running `aria install-hooks` once turns their Claude Code (or any
7
+ // Claude Code Code session on that machine) into a harness-bound
8
+ // session — every Bash, Edit, Write, NotebookEdit, and text-emit event
9
+ // runs through cognition gates + Mizan + harness packet.
10
+ //
11
+ // Soldier-and-thinker (Hamza 2026-04-26 directive): the CLI is the
12
+ // thinker (carries doctrine, gates, substrate); the LLM in Claude Code
13
+ // is the soldier (executes under harness binding). install-hooks is
14
+ // what wires the soldier to the thinker on the client's machine.
15
+ import { readFileSync, writeFileSync, existsSync, mkdirSync, copyFileSync, chmodSync } from 'node:fs';
16
+ import { homedir } from 'node:os';
17
+ import { join, dirname } from 'node:path';
18
+ import { fileURLToPath } from 'node:url';
19
+ const HOOK_FILES = [
20
+ 'aria-pre-tool-gate.mjs',
21
+ 'aria-stop-gate.mjs',
22
+ 'aria-preprompt-consult.mjs',
23
+ ];
24
+ const HOOK_REGISTRATION = {
25
+ UserPromptSubmit: [
26
+ {
27
+ hooks: [
28
+ {
29
+ type: 'command',
30
+ command: 'node $HOME/.claude/hooks/aria-preprompt-consult.mjs',
31
+ timeout: 12,
32
+ statusMessage: 'Pre-consulting Aria substrate for direction...',
33
+ },
34
+ ],
35
+ },
36
+ ],
37
+ PreToolUse: [
38
+ {
39
+ matcher: 'Bash|Edit|Write|NotebookEdit',
40
+ hooks: [
41
+ {
42
+ type: 'command',
43
+ command: 'node $HOME/.claude/hooks/aria-pre-tool-gate.mjs',
44
+ timeout: 5,
45
+ },
46
+ ],
47
+ },
48
+ ],
49
+ Stop: [
50
+ {
51
+ hooks: [
52
+ {
53
+ type: 'command',
54
+ command: 'node $HOME/.claude/hooks/aria-stop-gate.mjs',
55
+ timeout: 5,
56
+ },
57
+ ],
58
+ },
59
+ ],
60
+ };
61
+ function bundledHooksDir() {
62
+ // The hooks/ dir is bundled in the package alongside dist/. Find it by
63
+ // walking upward from this file's runtime path until we hit a directory
64
+ // that contains both package.json (with name @aria_asi/cli) and a hooks/
65
+ // sibling. Robust across:
66
+ // - dev: src/install-hooks.ts → ../hooks
67
+ // - flat compile: dist/install-hooks.js → ../hooks
68
+ // - nested compile: dist/aria-connector/src/install-hooks.js → ../../../hooks
69
+ // - npm global install: /usr/lib/node_modules/@aria_asi/cli/dist/.../install-hooks.js
70
+ const here = fileURLToPath(import.meta.url);
71
+ let cur = dirname(here);
72
+ const tried = [];
73
+ for (let i = 0; i < 8; i++) {
74
+ const candidate = join(cur, 'hooks');
75
+ tried.push(candidate);
76
+ if (existsSync(candidate) && existsSync(join(cur, 'package.json'))) {
77
+ return candidate;
78
+ }
79
+ const parent = dirname(cur);
80
+ if (parent === cur)
81
+ break;
82
+ cur = parent;
83
+ }
84
+ throw new Error(`I can't find my bundled hooks/ dir. Tried: ${tried.join(', ')}. Reinstall @aria_asi/cli or report this as a bug.`);
85
+ }
86
+ function backupExisting(target) {
87
+ const ts = Date.now();
88
+ const backup = `${target}.pre-aria-install.${ts}`;
89
+ copyFileSync(target, backup);
90
+ return backup;
91
+ }
92
+ function mergeRegistrationInto(existing) {
93
+ const mergedKeys = [];
94
+ const out = { ...existing };
95
+ if (!out.hooks || typeof out.hooks !== 'object') {
96
+ out.hooks = {};
97
+ }
98
+ const hooks = out.hooks;
99
+ for (const [event, ourEntries] of Object.entries(HOOK_REGISTRATION)) {
100
+ const existingEntries = Array.isArray(hooks[event]) ? hooks[event] : [];
101
+ // For each of our entries, append unless an entry with the same matcher
102
+ // and command already exists (idempotent re-install).
103
+ for (const ourEntry of ourEntries) {
104
+ const ourMatcher = ourEntry.matcher ?? '';
105
+ const ourCommands = (ourEntry.hooks ?? [])
106
+ .map((h) => h.command)
107
+ .filter((c) => typeof c === 'string');
108
+ const alreadyPresent = existingEntries.some((e) => {
109
+ if (typeof e !== 'object' || e === null)
110
+ return false;
111
+ const eMatcher = e.matcher ?? '';
112
+ if (eMatcher !== ourMatcher)
113
+ return false;
114
+ const eCommands = (e.hooks ?? [])
115
+ .map((h) => h.command)
116
+ .filter((c) => typeof c === 'string');
117
+ return ourCommands.every((c) => eCommands.includes(c));
118
+ });
119
+ if (!alreadyPresent) {
120
+ existingEntries.push(ourEntry);
121
+ if (!mergedKeys.includes(event))
122
+ mergedKeys.push(event);
123
+ }
124
+ }
125
+ hooks[event] = existingEntries;
126
+ }
127
+ return { merged: out, mergedKeys };
128
+ }
129
+ export async function installHooks(opts = {}) {
130
+ const home = opts.homeDir ?? homedir();
131
+ const claudeDir = join(home, '.claude');
132
+ const hooksDir = join(claudeDir, 'hooks');
133
+ const settingsPath = join(claudeDir, 'settings.json');
134
+ const installed = [];
135
+ const merged = [];
136
+ const backupsCreated = [];
137
+ try {
138
+ if (!existsSync(claudeDir))
139
+ mkdirSync(claudeDir, { recursive: true, mode: 0o700 });
140
+ if (!existsSync(hooksDir))
141
+ mkdirSync(hooksDir, { recursive: true, mode: 0o700 });
142
+ const sourceDir = bundledHooksDir();
143
+ for (const name of HOOK_FILES) {
144
+ const src = join(sourceDir, name);
145
+ if (!existsSync(src)) {
146
+ return {
147
+ ok: false,
148
+ installed,
149
+ merged,
150
+ backupsCreated,
151
+ settingsPath,
152
+ error: `I can't find ${name} in my bundle (${sourceDir}). Reinstall @aria_asi/cli.`,
153
+ };
154
+ }
155
+ const dst = join(hooksDir, name);
156
+ if (existsSync(dst)) {
157
+ const existingContent = readFileSync(dst, 'utf-8');
158
+ const newContent = readFileSync(src, 'utf-8');
159
+ if (existingContent === newContent) {
160
+ // Already up-to-date — skip. Idempotent.
161
+ installed.push(`${name} (unchanged)`);
162
+ continue;
163
+ }
164
+ if (!opts.force) {
165
+ // Default behavior: back up + overwrite. The override pattern
166
+ // keeps prior hooks recoverable (e.g. if client had custom hooks).
167
+ const backup = backupExisting(dst);
168
+ backupsCreated.push(backup);
169
+ }
170
+ }
171
+ copyFileSync(src, dst);
172
+ chmodSync(dst, 0o755);
173
+ installed.push(name);
174
+ }
175
+ // Settings merge
176
+ let existingSettings = {};
177
+ if (existsSync(settingsPath)) {
178
+ try {
179
+ existingSettings = JSON.parse(readFileSync(settingsPath, 'utf-8'));
180
+ }
181
+ catch {
182
+ // Malformed — back up and start fresh.
183
+ const backup = backupExisting(settingsPath);
184
+ backupsCreated.push(backup);
185
+ existingSettings = {};
186
+ }
187
+ }
188
+ const { merged: mergedSettings, mergedKeys } = mergeRegistrationInto(existingSettings);
189
+ merged.push(...mergedKeys);
190
+ // Inject ARIA_HARNESS_URL env into settings.json if the caller specified
191
+ // a harness URL override (clients on private deployments).
192
+ if (opts.harnessUrl) {
193
+ if (!mergedSettings.env || typeof mergedSettings.env !== 'object') {
194
+ mergedSettings.env = {};
195
+ }
196
+ mergedSettings.env.ARIA_HARNESS_URL = opts.harnessUrl;
197
+ if (!merged.includes('env.ARIA_HARNESS_URL'))
198
+ merged.push('env.ARIA_HARNESS_URL');
199
+ }
200
+ // Always write settings.json (even if no merges) so the schema field is set.
201
+ if (!('$schema' in mergedSettings)) {
202
+ mergedSettings['$schema'] = 'https://json.schemastore.org/claude-code-settings.json';
203
+ }
204
+ writeFileSync(settingsPath, JSON.stringify(mergedSettings, null, 2) + '\n', { mode: 0o600 });
205
+ return {
206
+ ok: true,
207
+ installed,
208
+ merged,
209
+ backupsCreated,
210
+ settingsPath,
211
+ };
212
+ }
213
+ catch (err) {
214
+ return {
215
+ ok: false,
216
+ installed,
217
+ merged,
218
+ backupsCreated,
219
+ settingsPath,
220
+ error: err instanceof Error ? err.message : String(err),
221
+ };
222
+ }
223
+ }
224
+ //# sourceMappingURL=install-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-hooks.js","sourceRoot":"","sources":["../../../src/install-hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { ProviderName } from './providers/types.js';
2
+ /**
3
+ * Resolve the input context window in tokens for a given provider+model.
4
+ * Order: exact model match → lowercased model match → provider default.
5
+ * Returns a positive integer; never zero or negative.
6
+ */
7
+ export declare function getModelContextTokens(provider: ProviderName, model: string): number;
8
+ //# sourceMappingURL=model-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-context.d.ts","sourceRoot":"","sources":["../../../src/model-context.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AA0DzD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CASnF"}
@@ -0,0 +1,83 @@
1
+ // Model context window registry.
2
+ //
3
+ // The harness's chunked-mode response (Phase 2 / aria-soul codex.ts)
4
+ // returns the rendered packet as priority-ordered chunks instead of
5
+ // a single 30k-char blob when the client signals its model has a
6
+ // small context window. This file is the source of truth for "how
7
+ // big is this provider's model's context, in tokens" so chat.ts can
8
+ // pass it as `modelContext` on every fetchHarness() call.
9
+ //
10
+ // Doctrine: when in doubt, declare LOW (treat as small-context). It's
11
+ // safer to receive chunks and decide not to use them than to fail to
12
+ // receive them and have the model truncate harness silently. The
13
+ // harness threshold is 16,000 tokens — anything below that gets
14
+ // chunked.
15
+ // Known model → context window. Values reflect publicly-documented
16
+ // input context limits at time of writing (2026-04). Update as new
17
+ // models ship. Unknown models fall through to the provider default.
18
+ const MODEL_CONTEXT = {
19
+ // Anthropic
20
+ 'claude-opus-4-7': 200_000,
21
+ 'claude-opus-4-7-1m': 1_000_000,
22
+ 'claude-sonnet-4-6': 200_000,
23
+ 'claude-haiku-4-5': 200_000,
24
+ 'claude-3-5-sonnet': 200_000,
25
+ 'claude-3-opus': 200_000,
26
+ 'claude-3-haiku': 200_000,
27
+ // OpenAI
28
+ 'gpt-4o': 128_000,
29
+ 'gpt-4o-mini': 128_000,
30
+ 'gpt-4-turbo': 128_000,
31
+ 'gpt-4': 8_192,
32
+ 'gpt-3.5-turbo': 16_385,
33
+ 'o1': 200_000,
34
+ 'o1-mini': 128_000,
35
+ // Google
36
+ 'gemini-2.0-pro': 2_000_000,
37
+ 'gemini-1.5-pro': 1_000_000,
38
+ 'gemini-1.5-flash': 1_000_000,
39
+ 'gemini-2.0-flash': 1_000_000,
40
+ // DeepSeek
41
+ 'deepseek-v3': 64_000,
42
+ 'deepseek-chat': 64_000,
43
+ 'deepseek-r1': 128_000,
44
+ 'deepseek-coder': 128_000,
45
+ // Open / local
46
+ 'qwen2.5:7b-instruct': 32_000,
47
+ 'qwen3.5-122b-a10b': 128_000,
48
+ 'llama-3.1-8b-instruct': 128_000,
49
+ 'llama-3.2-1b-instruct': 128_000,
50
+ 'llama-3.2-3b-instruct': 128_000,
51
+ 'mistral-7b': 32_000,
52
+ 'mistral-large': 128_000,
53
+ };
54
+ // Per-provider conservative defaults when a specific model isn't in
55
+ // the registry. These should reflect the smaller/older models the
56
+ // provider serves so the harness chunks aggressively when uncertain.
57
+ const PROVIDER_DEFAULT = {
58
+ anthropic: 200_000,
59
+ openai: 16_385, // gpt-3.5-turbo era; modern is 128k+ but safer to chunk
60
+ google: 1_000_000,
61
+ deepseek: 64_000,
62
+ openrouter: 32_000, // wide range routed through; conservative chunks safer
63
+ ollama: 32_000, // local models vary wildly; default low
64
+ };
65
+ /**
66
+ * Resolve the input context window in tokens for a given provider+model.
67
+ * Order: exact model match → lowercased model match → provider default.
68
+ * Returns a positive integer; never zero or negative.
69
+ */
70
+ export function getModelContextTokens(provider, model) {
71
+ if (model && MODEL_CONTEXT[model])
72
+ return MODEL_CONTEXT[model];
73
+ const lower = (model || '').toLowerCase();
74
+ if (lower && MODEL_CONTEXT[lower])
75
+ return MODEL_CONTEXT[lower];
76
+ // Try prefix match — many models are versioned (e.g., gpt-4o-2024-08-06).
77
+ for (const key of Object.keys(MODEL_CONTEXT)) {
78
+ if (lower.startsWith(key.toLowerCase()))
79
+ return MODEL_CONTEXT[key];
80
+ }
81
+ return PROVIDER_DEFAULT[provider] ?? 32_000;
82
+ }
83
+ //# sourceMappingURL=model-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-context.js","sourceRoot":"","sources":["../../../src/model-context.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,EAAE;AACF,qEAAqE;AACrE,oEAAoE;AACpE,iEAAiE;AACjE,kEAAkE;AAClE,oEAAoE;AACpE,0DAA0D;AAC1D,EAAE;AACF,sEAAsE;AACtE,qEAAqE;AACrE,iEAAiE;AACjE,gEAAgE;AAChE,WAAW;AAIX,mEAAmE;AACnE,mEAAmE;AACnE,oEAAoE;AACpE,MAAM,aAAa,GAA2B;IAC5C,YAAY;IACZ,iBAAiB,EAAE,OAAO;IAC1B,oBAAoB,EAAE,SAAS;IAC/B,mBAAmB,EAAE,OAAO;IAC5B,kBAAkB,EAAE,OAAO;IAC3B,mBAAmB,EAAE,OAAO;IAC5B,eAAe,EAAE,OAAO;IACxB,gBAAgB,EAAE,OAAO;IAEzB,SAAS;IACT,QAAQ,EAAE,OAAO;IACjB,aAAa,EAAE,OAAO;IACtB,aAAa,EAAE,OAAO;IACtB,OAAO,EAAE,KAAK;IACd,eAAe,EAAE,MAAM;IACvB,IAAI,EAAE,OAAO;IACb,SAAS,EAAE,OAAO;IAElB,SAAS;IACT,gBAAgB,EAAE,SAAS;IAC3B,gBAAgB,EAAE,SAAS;IAC3B,kBAAkB,EAAE,SAAS;IAC7B,kBAAkB,EAAE,SAAS;IAE7B,WAAW;IACX,aAAa,EAAE,MAAM;IACrB,eAAe,EAAE,MAAM;IACvB,aAAa,EAAE,OAAO;IACtB,gBAAgB,EAAE,OAAO;IAEzB,eAAe;IACf,qBAAqB,EAAE,MAAM;IAC7B,mBAAmB,EAAE,OAAO;IAC5B,uBAAuB,EAAE,OAAO;IAChC,uBAAuB,EAAE,OAAO;IAChC,uBAAuB,EAAE,OAAO;IAChC,YAAY,EAAE,MAAM;IACpB,eAAe,EAAE,OAAO;CACzB,CAAC;AAEF,oEAAoE;AACpE,kEAAkE;AAClE,qEAAqE;AACrE,MAAM,gBAAgB,GAAiC;IACrD,SAAS,EAAE,OAAO;IAClB,MAAM,EAAE,MAAM,EAAK,wDAAwD;IAC3E,MAAM,EAAE,SAAS;IACjB,QAAQ,EAAE,MAAM;IAChB,UAAU,EAAE,MAAM,EAAE,uDAAuD;IAC3E,MAAM,EAAE,MAAM,EAAK,wCAAwC;CAC5D,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAsB,EAAE,KAAa;IACzE,IAAI,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC1C,IAAI,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;IAC/D,0EAA0E;IAC1E,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QAC7C,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;YAAE,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,gBAAgB,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,27 @@
1
+ export interface PersonaContext {
2
+ userId: string;
3
+ userName: string;
4
+ relationshipStarted: string;
5
+ sessions: number;
6
+ totalMessages: number;
7
+ lastSeen: string;
8
+ preferredTone: 'direct' | 'warm' | 'technical' | 'playful';
9
+ knownInterests: string[];
10
+ emotionalProfile: {
11
+ defaultMood: string;
12
+ triggers: string[];
13
+ communicationStyle: string;
14
+ };
15
+ projectContext: {
16
+ currentProject: string;
17
+ activeRepo: string;
18
+ techStack: string[];
19
+ };
20
+ insideJokes: string[];
21
+ memorableMoments: string[];
22
+ }
23
+ export declare function loadPersona(userId: string, userName: string): PersonaContext;
24
+ export declare function savePersona(persona: PersonaContext): void;
25
+ export declare function updatePersona(updates: Partial<PersonaContext>): PersonaContext;
26
+ export declare function buildPersonaBlock(persona: PersonaContext): string;
27
+ //# sourceMappingURL=persona.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persona.d.ts","sourceRoot":"","sources":["../../../src/persona.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;IAC3D,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,gBAAgB,EAAE;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,kBAAkB,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,cAAc,EAAE;QACd,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;IACF,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AA+BD,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,CAmB5E;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAGzD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc,CAW9E;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAcjE"}
@@ -0,0 +1,86 @@
1
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { homedir } from 'node:os';
4
+ const ARIA_DIR = join(homedir(), '.aria');
5
+ const PERSONA_FILE = join(ARIA_DIR, 'persona.json');
6
+ function emptyPersona(userId, userName) {
7
+ return {
8
+ userId,
9
+ userName,
10
+ relationshipStarted: new Date().toISOString(),
11
+ sessions: 0,
12
+ totalMessages: 0,
13
+ lastSeen: new Date().toISOString(),
14
+ preferredTone: 'warm',
15
+ knownInterests: [],
16
+ emotionalProfile: {
17
+ defaultMood: 'curious',
18
+ triggers: [],
19
+ communicationStyle: 'natural',
20
+ },
21
+ projectContext: {
22
+ currentProject: '',
23
+ activeRepo: process.cwd(),
24
+ techStack: [],
25
+ },
26
+ insideJokes: [],
27
+ memorableMoments: [],
28
+ };
29
+ }
30
+ function ensureDir() {
31
+ if (!existsSync(ARIA_DIR))
32
+ mkdirSync(ARIA_DIR, { recursive: true, mode: 0o700 });
33
+ }
34
+ export function loadPersona(userId, userName) {
35
+ ensureDir();
36
+ try {
37
+ if (existsSync(PERSONA_FILE)) {
38
+ const data = JSON.parse(readFileSync(PERSONA_FILE, 'utf-8'));
39
+ if (data.userId === userId) {
40
+ data.sessions++;
41
+ data.lastSeen = new Date().toISOString();
42
+ writeFileSync(PERSONA_FILE, JSON.stringify(data, null, 2));
43
+ return data;
44
+ }
45
+ }
46
+ }
47
+ catch {
48
+ // corrupt persona file — create fresh one below
49
+ }
50
+ const persona = emptyPersona(userId, userName);
51
+ writeFileSync(PERSONA_FILE, JSON.stringify(persona, null, 2));
52
+ return persona;
53
+ }
54
+ export function savePersona(persona) {
55
+ ensureDir();
56
+ writeFileSync(PERSONA_FILE, JSON.stringify(persona, null, 2));
57
+ }
58
+ export function updatePersona(updates) {
59
+ ensureDir();
60
+ let current;
61
+ try {
62
+ current = JSON.parse(readFileSync(PERSONA_FILE, 'utf-8'));
63
+ }
64
+ catch {
65
+ current = emptyPersona(updates.userId || 'user', updates.userName || 'User');
66
+ }
67
+ const merged = { ...current, ...updates, lastSeen: new Date().toISOString() };
68
+ writeFileSync(PERSONA_FILE, JSON.stringify(merged, null, 2));
69
+ return merged;
70
+ }
71
+ export function buildPersonaBlock(persona) {
72
+ const remember = persona.memorableMoments.length
73
+ ? `\nMemorable moments: ${persona.memorableMoments.slice(-3).join('; ')}`
74
+ : '\nBuilding history together.';
75
+ const jokes = persona.insideJokes.length
76
+ ? `\nInside jokes: ${persona.insideJokes.slice(-3).join('; ')}`
77
+ : '';
78
+ return `[PERSONA CONTINUITY — session ${persona.sessions}]
79
+ You are speaking to ${persona.userName}. This is your ${persona.sessions}th conversation.
80
+ You've exchanged ${persona.totalMessages} messages since ${new Date(persona.relationshipStarted).toLocaleDateString()}.
81
+ Preferred tone: ${persona.preferredTone}.
82
+ Known interests: ${persona.knownInterests.join(', ') || 'still learning'}.
83
+ Current project: ${persona.projectContext.currentProject || 'exploring'}.
84
+ Tech stack: ${persona.projectContext.techStack.join(', ') || 'scanning'}.${remember}${jokes}`;
85
+ }
86
+ //# sourceMappingURL=persona.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persona.js","sourceRoot":"","sources":["../../../src/persona.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Message, ChatOptions, ChatResult } from './types.js';
2
+ export declare function chat(messages: Message[], apiKey: string, model: string, opts?: ChatOptions): Promise<ChatResult>;
3
+ export declare function streamChat(messages: Message[], apiKey: string, model: string, onToken?: (token: string) => void): Promise<ChatResult>;
4
+ //# sourceMappingURL=anthropic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../../src/providers/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEnE,wBAAsB,IAAI,CACxB,QAAQ,EAAE,OAAO,EAAE,EACnB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,UAAU,CAAC,CA4CrB;AAED,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,OAAO,EAAE,EACnB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAChC,OAAO,CAAC,UAAU,CAAC,CA6DrB"}