zora-agent 0.9.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 (303) hide show
  1. package/CHANGELOG.md +145 -0
  2. package/LICENSE +21 -0
  3. package/README.md +159 -0
  4. package/dist/cli/audit-commands.d.ts +8 -0
  5. package/dist/cli/audit-commands.d.ts.map +1 -0
  6. package/dist/cli/audit-commands.js +67 -0
  7. package/dist/cli/audit-commands.js.map +1 -0
  8. package/dist/cli/daemon.d.ts +9 -0
  9. package/dist/cli/daemon.d.ts.map +1 -0
  10. package/dist/cli/daemon.js +107 -0
  11. package/dist/cli/daemon.js.map +1 -0
  12. package/dist/cli/doctor.d.ts +21 -0
  13. package/dist/cli/doctor.d.ts.map +1 -0
  14. package/dist/cli/doctor.js +31 -0
  15. package/dist/cli/doctor.js.map +1 -0
  16. package/dist/cli/edit-commands.d.ts +8 -0
  17. package/dist/cli/edit-commands.d.ts.map +1 -0
  18. package/dist/cli/edit-commands.js +46 -0
  19. package/dist/cli/edit-commands.js.map +1 -0
  20. package/dist/cli/index.d.ts +11 -0
  21. package/dist/cli/index.d.ts.map +1 -0
  22. package/dist/cli/index.js +319 -0
  23. package/dist/cli/index.js.map +1 -0
  24. package/dist/cli/init-command.d.ts +30 -0
  25. package/dist/cli/init-command.d.ts.map +1 -0
  26. package/dist/cli/init-command.js +425 -0
  27. package/dist/cli/init-command.js.map +1 -0
  28. package/dist/cli/memory-commands.d.ts +11 -0
  29. package/dist/cli/memory-commands.d.ts.map +1 -0
  30. package/dist/cli/memory-commands.js +57 -0
  31. package/dist/cli/memory-commands.js.map +1 -0
  32. package/dist/cli/presets.d.ts +12 -0
  33. package/dist/cli/presets.d.ts.map +1 -0
  34. package/dist/cli/presets.js +169 -0
  35. package/dist/cli/presets.js.map +1 -0
  36. package/dist/cli/skill-commands.d.ts +10 -0
  37. package/dist/cli/skill-commands.d.ts.map +1 -0
  38. package/dist/cli/skill-commands.js +73 -0
  39. package/dist/cli/skill-commands.js.map +1 -0
  40. package/dist/cli/steer-commands.d.ts +10 -0
  41. package/dist/cli/steer-commands.d.ts.map +1 -0
  42. package/dist/cli/steer-commands.js +92 -0
  43. package/dist/cli/steer-commands.js.map +1 -0
  44. package/dist/cli/team-commands.d.ts +8 -0
  45. package/dist/cli/team-commands.d.ts.map +1 -0
  46. package/dist/cli/team-commands.js +93 -0
  47. package/dist/cli/team-commands.js.map +1 -0
  48. package/dist/config/defaults.d.ts +26 -0
  49. package/dist/config/defaults.d.ts.map +1 -0
  50. package/dist/config/defaults.js +173 -0
  51. package/dist/config/defaults.js.map +1 -0
  52. package/dist/config/index.d.ts +3 -0
  53. package/dist/config/index.d.ts.map +1 -0
  54. package/dist/config/index.js +3 -0
  55. package/dist/config/index.js.map +1 -0
  56. package/dist/config/loader.d.ts +30 -0
  57. package/dist/config/loader.d.ts.map +1 -0
  58. package/dist/config/loader.js +130 -0
  59. package/dist/config/loader.js.map +1 -0
  60. package/dist/config/policy-loader.d.ts +18 -0
  61. package/dist/config/policy-loader.d.ts.map +1 -0
  62. package/dist/config/policy-loader.js +72 -0
  63. package/dist/config/policy-loader.js.map +1 -0
  64. package/dist/dashboard/auth-middleware.d.ts +15 -0
  65. package/dist/dashboard/auth-middleware.d.ts.map +1 -0
  66. package/dist/dashboard/auth-middleware.js +44 -0
  67. package/dist/dashboard/auth-middleware.js.map +1 -0
  68. package/dist/dashboard/frontend/vite.config.d.ts +3 -0
  69. package/dist/dashboard/frontend/vite.config.d.ts.map +1 -0
  70. package/dist/dashboard/frontend/vite.config.js +11 -0
  71. package/dist/dashboard/frontend/vite.config.js.map +1 -0
  72. package/dist/dashboard/server.d.ts +55 -0
  73. package/dist/dashboard/server.d.ts.map +1 -0
  74. package/dist/dashboard/server.js +254 -0
  75. package/dist/dashboard/server.js.map +1 -0
  76. package/dist/index.d.ts +20 -0
  77. package/dist/index.d.ts.map +1 -0
  78. package/dist/index.js +19 -0
  79. package/dist/index.js.map +1 -0
  80. package/dist/memory/category-organizer.d.ts +33 -0
  81. package/dist/memory/category-organizer.d.ts.map +1 -0
  82. package/dist/memory/category-organizer.js +137 -0
  83. package/dist/memory/category-organizer.js.map +1 -0
  84. package/dist/memory/extraction-pipeline.d.ts +22 -0
  85. package/dist/memory/extraction-pipeline.d.ts.map +1 -0
  86. package/dist/memory/extraction-pipeline.js +156 -0
  87. package/dist/memory/extraction-pipeline.js.map +1 -0
  88. package/dist/memory/index.d.ts +7 -0
  89. package/dist/memory/index.d.ts.map +1 -0
  90. package/dist/memory/index.js +7 -0
  91. package/dist/memory/index.js.map +1 -0
  92. package/dist/memory/memory-manager.d.ts +56 -0
  93. package/dist/memory/memory-manager.d.ts.map +1 -0
  94. package/dist/memory/memory-manager.js +198 -0
  95. package/dist/memory/memory-manager.js.map +1 -0
  96. package/dist/memory/memory-types.d.ts +44 -0
  97. package/dist/memory/memory-types.d.ts.map +1 -0
  98. package/dist/memory/memory-types.js +8 -0
  99. package/dist/memory/memory-types.js.map +1 -0
  100. package/dist/memory/salience-scorer.d.ts +19 -0
  101. package/dist/memory/salience-scorer.d.ts.map +1 -0
  102. package/dist/memory/salience-scorer.js +72 -0
  103. package/dist/memory/salience-scorer.js.map +1 -0
  104. package/dist/memory/structured-memory.d.ts +28 -0
  105. package/dist/memory/structured-memory.d.ts.map +1 -0
  106. package/dist/memory/structured-memory.js +140 -0
  107. package/dist/memory/structured-memory.js.map +1 -0
  108. package/dist/orchestrator/auth-monitor.d.ts +28 -0
  109. package/dist/orchestrator/auth-monitor.d.ts.map +1 -0
  110. package/dist/orchestrator/auth-monitor.js +49 -0
  111. package/dist/orchestrator/auth-monitor.js.map +1 -0
  112. package/dist/orchestrator/execution-loop.d.ts +59 -0
  113. package/dist/orchestrator/execution-loop.d.ts.map +1 -0
  114. package/dist/orchestrator/execution-loop.js +94 -0
  115. package/dist/orchestrator/execution-loop.js.map +1 -0
  116. package/dist/orchestrator/failover-controller.d.ts +32 -0
  117. package/dist/orchestrator/failover-controller.d.ts.map +1 -0
  118. package/dist/orchestrator/failover-controller.js +111 -0
  119. package/dist/orchestrator/failover-controller.js.map +1 -0
  120. package/dist/orchestrator/index.d.ts +11 -0
  121. package/dist/orchestrator/index.d.ts.map +1 -0
  122. package/dist/orchestrator/index.js +11 -0
  123. package/dist/orchestrator/index.js.map +1 -0
  124. package/dist/orchestrator/orchestrator.d.ts +99 -0
  125. package/dist/orchestrator/orchestrator.d.ts.map +1 -0
  126. package/dist/orchestrator/orchestrator.js +456 -0
  127. package/dist/orchestrator/orchestrator.js.map +1 -0
  128. package/dist/orchestrator/retry-queue.d.ts +39 -0
  129. package/dist/orchestrator/retry-queue.d.ts.map +1 -0
  130. package/dist/orchestrator/retry-queue.js +99 -0
  131. package/dist/orchestrator/retry-queue.js.map +1 -0
  132. package/dist/orchestrator/router.d.ts +49 -0
  133. package/dist/orchestrator/router.d.ts.map +1 -0
  134. package/dist/orchestrator/router.js +167 -0
  135. package/dist/orchestrator/router.js.map +1 -0
  136. package/dist/orchestrator/session-manager.d.ts +39 -0
  137. package/dist/orchestrator/session-manager.d.ts.map +1 -0
  138. package/dist/orchestrator/session-manager.js +117 -0
  139. package/dist/orchestrator/session-manager.js.map +1 -0
  140. package/dist/providers/claude-provider.d.ts +182 -0
  141. package/dist/providers/claude-provider.d.ts.map +1 -0
  142. package/dist/providers/claude-provider.js +443 -0
  143. package/dist/providers/claude-provider.js.map +1 -0
  144. package/dist/providers/gemini-provider.d.ts +46 -0
  145. package/dist/providers/gemini-provider.d.ts.map +1 -0
  146. package/dist/providers/gemini-provider.js +336 -0
  147. package/dist/providers/gemini-provider.js.map +1 -0
  148. package/dist/providers/index.d.ts +10 -0
  149. package/dist/providers/index.d.ts.map +1 -0
  150. package/dist/providers/index.js +10 -0
  151. package/dist/providers/index.js.map +1 -0
  152. package/dist/providers/ollama-provider.d.ts +61 -0
  153. package/dist/providers/ollama-provider.d.ts.map +1 -0
  154. package/dist/providers/ollama-provider.js +319 -0
  155. package/dist/providers/ollama-provider.js.map +1 -0
  156. package/dist/routines/event-triggers.d.ts +34 -0
  157. package/dist/routines/event-triggers.d.ts.map +1 -0
  158. package/dist/routines/event-triggers.js +104 -0
  159. package/dist/routines/event-triggers.js.map +1 -0
  160. package/dist/routines/heartbeat.d.ts +35 -0
  161. package/dist/routines/heartbeat.d.ts.map +1 -0
  162. package/dist/routines/heartbeat.js +93 -0
  163. package/dist/routines/heartbeat.js.map +1 -0
  164. package/dist/routines/index.d.ts +7 -0
  165. package/dist/routines/index.d.ts.map +1 -0
  166. package/dist/routines/index.js +7 -0
  167. package/dist/routines/index.js.map +1 -0
  168. package/dist/routines/routine-manager.d.ts +62 -0
  169. package/dist/routines/routine-manager.d.ts.map +1 -0
  170. package/dist/routines/routine-manager.js +148 -0
  171. package/dist/routines/routine-manager.js.map +1 -0
  172. package/dist/security/audit-logger.d.ts +55 -0
  173. package/dist/security/audit-logger.d.ts.map +1 -0
  174. package/dist/security/audit-logger.js +252 -0
  175. package/dist/security/audit-logger.js.map +1 -0
  176. package/dist/security/capability-tokens.d.ts +30 -0
  177. package/dist/security/capability-tokens.d.ts.map +1 -0
  178. package/dist/security/capability-tokens.js +110 -0
  179. package/dist/security/capability-tokens.js.map +1 -0
  180. package/dist/security/index.d.ts +18 -0
  181. package/dist/security/index.d.ts.map +1 -0
  182. package/dist/security/index.js +12 -0
  183. package/dist/security/index.js.map +1 -0
  184. package/dist/security/integrity-guardian.d.ts +43 -0
  185. package/dist/security/integrity-guardian.d.ts.map +1 -0
  186. package/dist/security/integrity-guardian.js +103 -0
  187. package/dist/security/integrity-guardian.js.map +1 -0
  188. package/dist/security/intent-capsule.d.ts +52 -0
  189. package/dist/security/intent-capsule.d.ts.map +1 -0
  190. package/dist/security/intent-capsule.js +157 -0
  191. package/dist/security/intent-capsule.js.map +1 -0
  192. package/dist/security/leak-detector.d.ts +26 -0
  193. package/dist/security/leak-detector.d.ts.map +1 -0
  194. package/dist/security/leak-detector.js +75 -0
  195. package/dist/security/leak-detector.js.map +1 -0
  196. package/dist/security/policy-engine.d.ts +188 -0
  197. package/dist/security/policy-engine.d.ts.map +1 -0
  198. package/dist/security/policy-engine.js +799 -0
  199. package/dist/security/policy-engine.js.map +1 -0
  200. package/dist/security/prompt-defense.d.ts +30 -0
  201. package/dist/security/prompt-defense.d.ts.map +1 -0
  202. package/dist/security/prompt-defense.js +164 -0
  203. package/dist/security/prompt-defense.js.map +1 -0
  204. package/dist/security/secrets-manager.d.ts +47 -0
  205. package/dist/security/secrets-manager.d.ts.map +1 -0
  206. package/dist/security/secrets-manager.js +132 -0
  207. package/dist/security/secrets-manager.js.map +1 -0
  208. package/dist/security/security-types.d.ts +84 -0
  209. package/dist/security/security-types.d.ts.map +1 -0
  210. package/dist/security/security-types.js +8 -0
  211. package/dist/security/security-types.js.map +1 -0
  212. package/dist/skills/index.d.ts +5 -0
  213. package/dist/skills/index.d.ts.map +1 -0
  214. package/dist/skills/index.js +5 -0
  215. package/dist/skills/index.js.map +1 -0
  216. package/dist/skills/skill-loader.d.ts +25 -0
  217. package/dist/skills/skill-loader.d.ts.map +1 -0
  218. package/dist/skills/skill-loader.js +64 -0
  219. package/dist/skills/skill-loader.js.map +1 -0
  220. package/dist/steering/flag-manager.d.ts +52 -0
  221. package/dist/steering/flag-manager.d.ts.map +1 -0
  222. package/dist/steering/flag-manager.js +160 -0
  223. package/dist/steering/flag-manager.js.map +1 -0
  224. package/dist/steering/index.d.ts +8 -0
  225. package/dist/steering/index.d.ts.map +1 -0
  226. package/dist/steering/index.js +8 -0
  227. package/dist/steering/index.js.map +1 -0
  228. package/dist/steering/steer-injector.d.ts +15 -0
  229. package/dist/steering/steer-injector.d.ts.map +1 -0
  230. package/dist/steering/steer-injector.js +41 -0
  231. package/dist/steering/steer-injector.js.map +1 -0
  232. package/dist/steering/steering-manager.d.ts +33 -0
  233. package/dist/steering/steering-manager.d.ts.map +1 -0
  234. package/dist/steering/steering-manager.js +79 -0
  235. package/dist/steering/steering-manager.js.map +1 -0
  236. package/dist/steering/telegram-gateway.d.ts +27 -0
  237. package/dist/steering/telegram-gateway.d.ts.map +1 -0
  238. package/dist/steering/telegram-gateway.js +89 -0
  239. package/dist/steering/telegram-gateway.js.map +1 -0
  240. package/dist/steering/types.d.ts +54 -0
  241. package/dist/steering/types.d.ts.map +1 -0
  242. package/dist/steering/types.js +11 -0
  243. package/dist/steering/types.js.map +1 -0
  244. package/dist/teams/agent-loader.d.ts +38 -0
  245. package/dist/teams/agent-loader.d.ts.map +1 -0
  246. package/dist/teams/agent-loader.js +85 -0
  247. package/dist/teams/agent-loader.js.map +1 -0
  248. package/dist/teams/bridge-watchdog.d.ts +44 -0
  249. package/dist/teams/bridge-watchdog.d.ts.map +1 -0
  250. package/dist/teams/bridge-watchdog.js +118 -0
  251. package/dist/teams/bridge-watchdog.js.map +1 -0
  252. package/dist/teams/gemini-bridge.d.ts +43 -0
  253. package/dist/teams/gemini-bridge.d.ts.map +1 -0
  254. package/dist/teams/gemini-bridge.js +132 -0
  255. package/dist/teams/gemini-bridge.js.map +1 -0
  256. package/dist/teams/index.d.ts +11 -0
  257. package/dist/teams/index.d.ts.map +1 -0
  258. package/dist/teams/index.js +11 -0
  259. package/dist/teams/index.js.map +1 -0
  260. package/dist/teams/mailbox.d.ts +33 -0
  261. package/dist/teams/mailbox.d.ts.map +1 -0
  262. package/dist/teams/mailbox.js +97 -0
  263. package/dist/teams/mailbox.js.map +1 -0
  264. package/dist/teams/pr-lifecycle.d.ts +47 -0
  265. package/dist/teams/pr-lifecycle.d.ts.map +1 -0
  266. package/dist/teams/pr-lifecycle.js +83 -0
  267. package/dist/teams/pr-lifecycle.js.map +1 -0
  268. package/dist/teams/team-manager.d.ts +57 -0
  269. package/dist/teams/team-manager.d.ts.map +1 -0
  270. package/dist/teams/team-manager.js +170 -0
  271. package/dist/teams/team-manager.js.map +1 -0
  272. package/dist/teams/team-types.d.ts +35 -0
  273. package/dist/teams/team-types.d.ts.map +1 -0
  274. package/dist/teams/team-types.js +9 -0
  275. package/dist/teams/team-types.js.map +1 -0
  276. package/dist/tools/index.d.ts +8 -0
  277. package/dist/tools/index.d.ts.map +1 -0
  278. package/dist/tools/index.js +8 -0
  279. package/dist/tools/index.js.map +1 -0
  280. package/dist/tools/notifications.d.ts +13 -0
  281. package/dist/tools/notifications.d.ts.map +1 -0
  282. package/dist/tools/notifications.js +30 -0
  283. package/dist/tools/notifications.js.map +1 -0
  284. package/dist/types.d.ts +311 -0
  285. package/dist/types.d.ts.map +1 -0
  286. package/dist/types.js +8 -0
  287. package/dist/types.js.map +1 -0
  288. package/dist/utils/fs.d.ts +9 -0
  289. package/dist/utils/fs.d.ts.map +1 -0
  290. package/dist/utils/fs.js +31 -0
  291. package/dist/utils/fs.js.map +1 -0
  292. package/dist/utils/logger.d.ts +43 -0
  293. package/dist/utils/logger.d.ts.map +1 -0
  294. package/dist/utils/logger.js +139 -0
  295. package/dist/utils/logger.js.map +1 -0
  296. package/dist/wasm/wasmtime-spike.d.ts +19 -0
  297. package/dist/wasm/wasmtime-spike.d.ts.map +1 -0
  298. package/dist/wasm/wasmtime-spike.js +39 -0
  299. package/dist/wasm/wasmtime-spike.js.map +1 -0
  300. package/examples/routines/content-pipeline.toml +20 -0
  301. package/examples/routines/job-search.toml +19 -0
  302. package/examples/routines/repo-cleanup.toml +14 -0
  303. package/package.json +66 -0
@@ -0,0 +1,182 @@
1
+ /**
2
+ * ClaudeProvider — LLMProvider implementation backed by the Claude Agent SDK.
3
+ *
4
+ * Spec §4.2 "Claude Provider" (type: "claude-sdk"):
5
+ * - SDK: @anthropic-ai/claude-agent-sdk
6
+ * - Authentication: Mac session token (no API key required)
7
+ * - Execution mode: Embedded agent with streaming events
8
+ * - Max turns: configurable (default 200)
9
+ *
10
+ * Design decisions:
11
+ * - query function is dependency-injected (queryFn) so tests never spawn real processes
12
+ * - SDKMessage → AgentEvent mapping is explicit and exhaustive
13
+ * - AbortController wired through for clean cancellation
14
+ * - Auth/quota checks use accountInfo() probe on the Query object
15
+ */
16
+ import type { LLMProvider, AuthStatus, QuotaStatus, ProviderUsage, AgentEvent, TaskContext, ProviderCapability, CostTier, ProviderConfig } from '../types.js';
17
+ /**
18
+ * Minimal subset of SDK message types we consume.
19
+ * Using structural types rather than importing SDK internals directly
20
+ * to keep the boundary clean and testable.
21
+ */
22
+ export interface SDKAssistantMessage {
23
+ type: 'assistant';
24
+ uuid: string;
25
+ session_id: string;
26
+ message: {
27
+ role: 'assistant';
28
+ content: Array<{
29
+ type: 'text';
30
+ text: string;
31
+ } | {
32
+ type: 'thinking';
33
+ thinking: string;
34
+ } | {
35
+ type: 'tool_use';
36
+ id: string;
37
+ name: string;
38
+ input: Record<string, unknown>;
39
+ } | {
40
+ type: 'tool_result';
41
+ tool_use_id: string;
42
+ content: unknown;
43
+ }>;
44
+ };
45
+ parent_tool_use_id: string | null;
46
+ }
47
+ export interface SDKResultMessage {
48
+ type: 'result';
49
+ subtype: 'success' | 'error_max_turns' | 'error_during_execution' | 'error_max_budget_usd' | 'error_max_structured_output_retries';
50
+ uuid: string;
51
+ session_id: string;
52
+ duration_ms: number;
53
+ is_error: boolean;
54
+ num_turns: number;
55
+ result?: string;
56
+ total_cost_usd: number;
57
+ errors?: string[];
58
+ }
59
+ export interface SDKSystemMessage {
60
+ type: 'system';
61
+ subtype: string;
62
+ uuid: string;
63
+ session_id: string;
64
+ model?: string;
65
+ tools?: string[];
66
+ }
67
+ export interface SDKUserMessage {
68
+ type: 'user';
69
+ uuid?: string;
70
+ session_id: string;
71
+ message: unknown;
72
+ parent_tool_use_id: string | null;
73
+ }
74
+ export type SDKMessage = SDKAssistantMessage | SDKResultMessage | SDKSystemMessage | SDKUserMessage | {
75
+ type: string;
76
+ [key: string]: unknown;
77
+ };
78
+ /**
79
+ * Minimal Query interface matching what the SDK returns.
80
+ * We only depend on the AsyncGenerator behavior + abort.
81
+ */
82
+ export interface SDKQuery extends AsyncGenerator<SDKMessage, void> {
83
+ abort?: () => void;
84
+ }
85
+ /**
86
+ * The injectable query function type.
87
+ * Matches the SDK's `query({ prompt, options })` signature.
88
+ */
89
+ export type QueryFn = (params: {
90
+ prompt: string;
91
+ options?: Record<string, unknown>;
92
+ }) => SDKQuery;
93
+ export interface ClaudeProviderOptions {
94
+ /** Provider config from config.toml */
95
+ config: ProviderConfig;
96
+ /** Injected query function. Defaults to the real SDK's query(). */
97
+ queryFn?: QueryFn;
98
+ /** Working directory for the agent. Defaults to process.cwd(). */
99
+ cwd?: string;
100
+ /** System prompt prefix. */
101
+ systemPrompt?: string;
102
+ /** Allowed tools list for the SDK. */
103
+ allowedTools?: string[];
104
+ /** Permission mode. Defaults to 'bypassPermissions' for autonomous operation. */
105
+ permissionMode?: 'default' | 'acceptEdits' | 'bypassPermissions' | 'plan';
106
+ }
107
+ export declare class ClaudeProvider implements LLMProvider {
108
+ readonly name: string;
109
+ readonly rank: number;
110
+ readonly capabilities: ProviderCapability[];
111
+ readonly costTier: CostTier;
112
+ private readonly _config;
113
+ private readonly _queryFn;
114
+ private readonly _cwd;
115
+ private readonly _systemPrompt;
116
+ private readonly _allowedTools;
117
+ private readonly _permissionMode;
118
+ /** Active queries indexed by jobId for abort support */
119
+ private readonly _activeQueries;
120
+ /** Cached auth status from last check */
121
+ private _lastAuthStatus;
122
+ /** Cached quota status from last check */
123
+ private _lastQuotaStatus;
124
+ /** Track cumulative cost */
125
+ private _totalCostUsd;
126
+ /** Track cumulative token usage */
127
+ private _totalInputTokens;
128
+ private _totalOutputTokens;
129
+ private _requestCount;
130
+ private _lastRequestAt;
131
+ constructor(options: ClaudeProviderOptions);
132
+ /**
133
+ * Resolve the query function — lazy-loads the real SDK if no mock was injected.
134
+ */
135
+ private _resolveQueryFn;
136
+ isAvailable(): Promise<boolean>;
137
+ checkAuth(): Promise<AuthStatus>;
138
+ getQuotaStatus(): Promise<QuotaStatus>;
139
+ execute(task: TaskContext): AsyncGenerator<AgentEvent>;
140
+ abort(jobId: string): Promise<void>;
141
+ /**
142
+ * Map an SDK message to zero or more AgentEvents.
143
+ * One SDK message can produce multiple events (e.g., an assistant message
144
+ * with both thinking and text content blocks).
145
+ */
146
+ private _mapSDKMessage;
147
+ /**
148
+ * Build a prompt string from task context.
149
+ * Includes memory context, history, and system prompt elements.
150
+ */
151
+ private _buildPrompt;
152
+ /**
153
+ * Update internal state based on SDK result message.
154
+ */
155
+ private _handleResultMessage;
156
+ /**
157
+ * Heuristic to detect auth errors from error messages.
158
+ */
159
+ private _isAuthError;
160
+ /**
161
+ * Heuristic to detect quota/rate-limit errors from error messages.
162
+ */
163
+ private _isQuotaError;
164
+ get totalCostUsd(): number;
165
+ get activeJobCount(): number;
166
+ get lastAuthStatus(): AuthStatus | null;
167
+ get lastQuotaStatus(): QuotaStatus | null;
168
+ getUsage(): ProviderUsage;
169
+ /**
170
+ * Force-set auth status (used by orchestrator on external auth events).
171
+ */
172
+ setAuthStatus(status: AuthStatus): void;
173
+ /**
174
+ * Force-set quota status (used by orchestrator on external quota events).
175
+ */
176
+ setQuotaStatus(status: QuotaStatus): void;
177
+ /**
178
+ * Reset cached status (used after auth recovery).
179
+ */
180
+ resetStatus(): void;
181
+ }
182
+ //# sourceMappingURL=claude-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-provider.d.ts","sourceRoot":"","sources":["../../src/providers/claude-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,443 @@
1
+ /**
2
+ * ClaudeProvider — LLMProvider implementation backed by the Claude Agent SDK.
3
+ *
4
+ * Spec §4.2 "Claude Provider" (type: "claude-sdk"):
5
+ * - SDK: @anthropic-ai/claude-agent-sdk
6
+ * - Authentication: Mac session token (no API key required)
7
+ * - Execution mode: Embedded agent with streaming events
8
+ * - Max turns: configurable (default 200)
9
+ *
10
+ * Design decisions:
11
+ * - query function is dependency-injected (queryFn) so tests never spawn real processes
12
+ * - SDKMessage → AgentEvent mapping is explicit and exhaustive
13
+ * - AbortController wired through for clean cancellation
14
+ * - Auth/quota checks use accountInfo() probe on the Query object
15
+ */
16
+ // ─── Claude Provider ────────────────────────────────────────────────
17
+ export class ClaudeProvider {
18
+ name;
19
+ rank;
20
+ capabilities;
21
+ costTier;
22
+ _config;
23
+ _queryFn;
24
+ _cwd;
25
+ _systemPrompt;
26
+ _allowedTools;
27
+ _permissionMode;
28
+ /** Active queries indexed by jobId for abort support */
29
+ _activeQueries = new Map();
30
+ /** Cached auth status from last check */
31
+ _lastAuthStatus = null;
32
+ /** Cached quota status from last check */
33
+ _lastQuotaStatus = null;
34
+ /** Track cumulative cost */
35
+ _totalCostUsd = 0;
36
+ /** Track cumulative token usage */
37
+ _totalInputTokens = 0;
38
+ _totalOutputTokens = 0;
39
+ _requestCount = 0;
40
+ _lastRequestAt = null;
41
+ constructor(options) {
42
+ const { config } = options;
43
+ this.name = config.name;
44
+ this.rank = config.rank;
45
+ this.capabilities = config.capabilities;
46
+ this.costTier = config.cost_tier;
47
+ this._config = config;
48
+ this._cwd = options.cwd ?? process.cwd();
49
+ this._systemPrompt = options.systemPrompt ?? '';
50
+ this._allowedTools = options.allowedTools ?? [];
51
+ this._permissionMode = options.permissionMode ?? 'bypassPermissions';
52
+ // Dependency injection: use provided queryFn or lazy-load the real SDK
53
+ if (options.queryFn) {
54
+ this._queryFn = options.queryFn;
55
+ }
56
+ else {
57
+ // Lazy import to avoid requiring the SDK at construction time
58
+ // This will be resolved at first execute() call
59
+ this._queryFn = null;
60
+ }
61
+ }
62
+ /**
63
+ * Resolve the query function — lazy-loads the real SDK if no mock was injected.
64
+ */
65
+ async _resolveQueryFn() {
66
+ if (this._queryFn)
67
+ return this._queryFn;
68
+ // Dynamic import of the real SDK
69
+ const sdk = await import('@anthropic-ai/claude-agent-sdk');
70
+ const realQuery = sdk.query;
71
+ // Cache it so we don't re-import
72
+ this._queryFn = realQuery;
73
+ return realQuery;
74
+ }
75
+ // ─── LLMProvider interface ──────────────────────────────────────
76
+ async isAvailable() {
77
+ // Claude is available if:
78
+ // 1. Provider is enabled in config
79
+ // 2. Auth is valid (or we haven't checked yet — optimistic)
80
+ if (!this._config.enabled)
81
+ return false;
82
+ if (this._lastAuthStatus && !this._lastAuthStatus.valid)
83
+ return false;
84
+ if (this._lastQuotaStatus?.isExhausted)
85
+ return false;
86
+ return true;
87
+ }
88
+ async checkAuth() {
89
+ // For the injected mock path, we can't probe the real SDK.
90
+ // Return optimistic auth if we have no cached status.
91
+ // In production, the orchestrator's heartbeat loop calls this periodically
92
+ // and the real SDK will surface auth errors during execute().
93
+ if (this._lastAuthStatus) {
94
+ return this._lastAuthStatus;
95
+ }
96
+ // Default to optimistic — auth will be validated on first execute()
97
+ const status = {
98
+ valid: true,
99
+ expiresAt: null,
100
+ canAutoRefresh: true,
101
+ requiresInteraction: false,
102
+ };
103
+ this._lastAuthStatus = status;
104
+ return status;
105
+ }
106
+ async getQuotaStatus() {
107
+ if (this._lastQuotaStatus) {
108
+ return this._lastQuotaStatus;
109
+ }
110
+ // Default to healthy
111
+ const status = {
112
+ isExhausted: false,
113
+ remainingRequests: null,
114
+ cooldownUntil: null,
115
+ healthScore: 1.0,
116
+ };
117
+ this._lastQuotaStatus = status;
118
+ return status;
119
+ }
120
+ async *execute(task) {
121
+ const queryFn = await this._resolveQueryFn();
122
+ const abortController = new AbortController();
123
+ // Build SDK options
124
+ const sdkOptions = {
125
+ abortController,
126
+ model: this._config.model ?? 'claude-sonnet-4-5',
127
+ cwd: this._cwd,
128
+ permissionMode: this._permissionMode,
129
+ maxTurns: task.maxTurns ?? this._config.max_turns ?? 200,
130
+ // Prefer the per-task system prompt, falling back to the provider default.
131
+ systemPrompt: task.systemPrompt || this._systemPrompt,
132
+ };
133
+ if (this._allowedTools.length > 0) {
134
+ sdkOptions['allowedTools'] = this._allowedTools;
135
+ }
136
+ // Build the prompt from task context
137
+ const prompt = this._buildPrompt(task);
138
+ try {
139
+ // Create the SDK query
140
+ const sdkQuery = queryFn({ prompt, options: sdkOptions });
141
+ // Register for abort support
142
+ this._activeQueries.set(task.jobId, { abort: abortController, query: sdkQuery });
143
+ for await (const message of sdkQuery) {
144
+ const events = this._mapSDKMessage(message);
145
+ for (const event of events) {
146
+ yield event;
147
+ // If we got a result message, update internal state
148
+ if (message.type === 'result') {
149
+ this._handleResultMessage(message);
150
+ }
151
+ }
152
+ }
153
+ // If we consumed all messages without a 'done' event,
154
+ // yield one to signal completion
155
+ yield {
156
+ type: 'done',
157
+ timestamp: new Date(),
158
+ content: { text: 'Query completed' },
159
+ };
160
+ }
161
+ catch (err) {
162
+ const errorMessage = err instanceof Error ? err.message : String(err);
163
+ // Check for specific error types that indicate auth/quota issues
164
+ if (this._isAuthError(errorMessage)) {
165
+ this._lastAuthStatus = {
166
+ valid: false,
167
+ expiresAt: null,
168
+ canAutoRefresh: false,
169
+ requiresInteraction: true,
170
+ };
171
+ }
172
+ else if (this._isQuotaError(errorMessage)) {
173
+ this._lastQuotaStatus = {
174
+ isExhausted: true,
175
+ remainingRequests: 0,
176
+ cooldownUntil: new Date(Date.now() + 60_000), // 1 min default cooldown
177
+ healthScore: 0,
178
+ };
179
+ }
180
+ yield {
181
+ type: 'error',
182
+ timestamp: new Date(),
183
+ content: {
184
+ message: errorMessage,
185
+ isAuthError: this._isAuthError(errorMessage),
186
+ isQuotaError: this._isQuotaError(errorMessage),
187
+ },
188
+ };
189
+ }
190
+ finally {
191
+ this._activeQueries.delete(task.jobId);
192
+ }
193
+ }
194
+ async abort(jobId) {
195
+ const entry = this._activeQueries.get(jobId);
196
+ if (entry) {
197
+ entry.abort.abort();
198
+ this._activeQueries.delete(jobId);
199
+ }
200
+ }
201
+ // ─── SDK Message Mapping ──────────────────────────────────────────
202
+ /**
203
+ * Map an SDK message to zero or more AgentEvents.
204
+ * One SDK message can produce multiple events (e.g., an assistant message
205
+ * with both thinking and text content blocks).
206
+ */
207
+ _mapSDKMessage(message) {
208
+ const events = [];
209
+ switch (message.type) {
210
+ case 'assistant': {
211
+ const msg = message;
212
+ for (const block of msg.message.content) {
213
+ switch (block.type) {
214
+ case 'thinking':
215
+ events.push({
216
+ type: 'thinking',
217
+ timestamp: new Date(),
218
+ content: { text: block.thinking },
219
+ });
220
+ break;
221
+ case 'text':
222
+ events.push({
223
+ type: 'text',
224
+ timestamp: new Date(),
225
+ content: { text: block.text },
226
+ });
227
+ break;
228
+ case 'tool_use':
229
+ events.push({
230
+ type: 'tool_call',
231
+ timestamp: new Date(),
232
+ content: {
233
+ toolCallId: block.id,
234
+ tool: block.name,
235
+ arguments: block.input,
236
+ },
237
+ });
238
+ break;
239
+ case 'tool_result':
240
+ events.push({
241
+ type: 'tool_result',
242
+ timestamp: new Date(),
243
+ content: {
244
+ toolCallId: block.tool_use_id,
245
+ result: block.content,
246
+ },
247
+ });
248
+ break;
249
+ }
250
+ }
251
+ break;
252
+ }
253
+ case 'result': {
254
+ const msg = message;
255
+ if (msg.is_error) {
256
+ events.push({
257
+ type: 'error',
258
+ timestamp: new Date(),
259
+ content: {
260
+ message: msg.errors?.join('; ') ?? `SDK error: ${msg.subtype}`,
261
+ subtype: msg.subtype,
262
+ duration_ms: msg.duration_ms,
263
+ num_turns: msg.num_turns,
264
+ total_cost_usd: msg.total_cost_usd,
265
+ },
266
+ });
267
+ }
268
+ else {
269
+ events.push({
270
+ type: 'done',
271
+ timestamp: new Date(),
272
+ content: {
273
+ text: msg.result ?? '',
274
+ duration_ms: msg.duration_ms,
275
+ num_turns: msg.num_turns,
276
+ total_cost_usd: msg.total_cost_usd,
277
+ },
278
+ });
279
+ }
280
+ break;
281
+ }
282
+ case 'system': {
283
+ // System messages are informational — we don't emit them as AgentEvents
284
+ // but we could log them for debugging
285
+ break;
286
+ }
287
+ case 'user': {
288
+ // User message replays — skip
289
+ break;
290
+ }
291
+ default: {
292
+ // Unknown message type — ignore gracefully
293
+ break;
294
+ }
295
+ }
296
+ return events;
297
+ }
298
+ // ─── Internal helpers ─────────────────────────────────────────────
299
+ /**
300
+ * Build a prompt string from task context.
301
+ * Includes memory context, history, and system prompt elements.
302
+ */
303
+ _buildPrompt(task) {
304
+ const parts = [];
305
+ // Memory context (if any)
306
+ if (task.memoryContext.length > 0) {
307
+ parts.push('<memory_context>');
308
+ parts.push(task.memoryContext.join('\n'));
309
+ parts.push('</memory_context>');
310
+ parts.push('');
311
+ }
312
+ // History (if any) — helps with restarts and steering
313
+ if (task.history.length > 0) {
314
+ parts.push('<execution_history>');
315
+ for (const event of task.history) {
316
+ if (event.type === 'text') {
317
+ parts.push(' <assistant_response>');
318
+ parts.push(event.content.text);
319
+ parts.push(' </assistant_response>');
320
+ }
321
+ else if (event.type === 'tool_call') {
322
+ const c = event.content;
323
+ parts.push(` <tool_call name="${c.tool}" id="${c.toolCallId}">`);
324
+ parts.push(JSON.stringify(c.arguments, null, 2));
325
+ parts.push(' </tool_call>');
326
+ }
327
+ else if (event.type === 'tool_result') {
328
+ const c = event.content;
329
+ parts.push(` <tool_result id="${c.toolCallId}">`);
330
+ parts.push(JSON.stringify(c.result, null, 2));
331
+ parts.push(' </tool_result>');
332
+ }
333
+ else if (event.type === 'steering') {
334
+ const c = event.content;
335
+ parts.push(` <human_steering source="${c.source}" author="${c.author}">`);
336
+ parts.push(c.text);
337
+ parts.push(' </human_steering>');
338
+ }
339
+ }
340
+ parts.push('</execution_history>');
341
+ parts.push('');
342
+ }
343
+ // The actual task
344
+ parts.push(`Current Task: ${task.task}`);
345
+ return parts.join('\n');
346
+ }
347
+ /**
348
+ * Update internal state based on SDK result message.
349
+ */
350
+ _handleResultMessage(msg) {
351
+ this._totalCostUsd += msg.total_cost_usd;
352
+ this._requestCount++;
353
+ this._lastRequestAt = new Date();
354
+ // Aggregate token usage from modelUsage if the SDK exposes it
355
+ const raw = msg;
356
+ if (raw.modelUsage && typeof raw.modelUsage === 'object') {
357
+ for (const usage of Object.values(raw.modelUsage)) {
358
+ this._totalInputTokens += usage.inputTokens ?? 0;
359
+ this._totalOutputTokens += usage.outputTokens ?? 0;
360
+ }
361
+ }
362
+ // If result was an error, check if it's auth/quota related
363
+ if (msg.is_error && msg.subtype === 'error_max_turns') {
364
+ // Not an auth/quota issue — just hit max turns
365
+ }
366
+ }
367
+ /**
368
+ * Heuristic to detect auth errors from error messages.
369
+ */
370
+ _isAuthError(message) {
371
+ const authPatterns = [
372
+ 'authentication',
373
+ 'auth_error',
374
+ 'unauthorized',
375
+ 'session expired',
376
+ 'session_expired',
377
+ 'token expired',
378
+ 'invalid_token',
379
+ 'not authenticated',
380
+ 'login required',
381
+ ];
382
+ const lower = message.toLowerCase();
383
+ return authPatterns.some((p) => lower.includes(p));
384
+ }
385
+ /**
386
+ * Heuristic to detect quota/rate-limit errors from error messages.
387
+ */
388
+ _isQuotaError(message) {
389
+ const quotaPatterns = [
390
+ 'rate_limit',
391
+ 'rate limit',
392
+ 'quota',
393
+ 'too many requests',
394
+ 'capacity',
395
+ 'overloaded',
396
+ '429',
397
+ ];
398
+ const lower = message.toLowerCase();
399
+ return quotaPatterns.some((p) => lower.includes(p));
400
+ }
401
+ // ─── Public getters for observability ─────────────────────────────
402
+ get totalCostUsd() {
403
+ return this._totalCostUsd;
404
+ }
405
+ get activeJobCount() {
406
+ return this._activeQueries.size;
407
+ }
408
+ get lastAuthStatus() {
409
+ return this._lastAuthStatus;
410
+ }
411
+ get lastQuotaStatus() {
412
+ return this._lastQuotaStatus;
413
+ }
414
+ getUsage() {
415
+ return {
416
+ totalCostUsd: this._totalCostUsd,
417
+ totalInputTokens: this._totalInputTokens,
418
+ totalOutputTokens: this._totalOutputTokens,
419
+ requestCount: this._requestCount,
420
+ lastRequestAt: this._lastRequestAt,
421
+ };
422
+ }
423
+ /**
424
+ * Force-set auth status (used by orchestrator on external auth events).
425
+ */
426
+ setAuthStatus(status) {
427
+ this._lastAuthStatus = status;
428
+ }
429
+ /**
430
+ * Force-set quota status (used by orchestrator on external quota events).
431
+ */
432
+ setQuotaStatus(status) {
433
+ this._lastQuotaStatus = status;
434
+ }
435
+ /**
436
+ * Reset cached status (used after auth recovery).
437
+ */
438
+ resetStatus() {
439
+ this._lastAuthStatus = null;
440
+ this._lastQuotaStatus = null;
441
+ }
442
+ }
443
+ //# sourceMappingURL=claude-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-provider.js","sourceRoot":"","sources":["../../src/providers/claude-provider.ts"],"names":[],"mappings":"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"}