@codeany/open-agent-sdk 0.2.1 → 0.2.2

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 (232) hide show
  1. package/.env.example +8 -0
  2. package/examples/01-simple-query.ts +43 -0
  3. package/examples/02-multi-tool.ts +44 -0
  4. package/examples/03-multi-turn.ts +39 -0
  5. package/examples/04-prompt-api.ts +29 -0
  6. package/examples/05-custom-system-prompt.ts +26 -0
  7. package/examples/06-mcp-server.ts +49 -0
  8. package/examples/07-custom-tools.ts +87 -0
  9. package/examples/08-official-api-compat.ts +38 -0
  10. package/examples/09-subagents.ts +48 -0
  11. package/examples/10-permissions.ts +40 -0
  12. package/examples/11-custom-mcp-tools.ts +101 -0
  13. package/examples/12-skills.ts +88 -0
  14. package/examples/13-hooks.ts +88 -0
  15. package/examples/14-openai-compat.ts +71 -0
  16. package/examples/web/index.html +365 -0
  17. package/examples/web/server.ts +157 -0
  18. package/package.json +1 -7
  19. package/src/engine.ts +3 -0
  20. package/tsconfig.json +19 -0
  21. package/dist/agent.d.ts +0 -113
  22. package/dist/agent.d.ts.map +0 -1
  23. package/dist/agent.js +0 -446
  24. package/dist/agent.js.map +0 -1
  25. package/dist/engine.d.ts +0 -62
  26. package/dist/engine.d.ts.map +0 -1
  27. package/dist/engine.js +0 -494
  28. package/dist/engine.js.map +0 -1
  29. package/dist/hooks.d.ts +0 -111
  30. package/dist/hooks.d.ts.map +0 -1
  31. package/dist/hooks.js +0 -179
  32. package/dist/hooks.js.map +0 -1
  33. package/dist/index.d.ts +0 -66
  34. package/dist/index.d.ts.map +0 -1
  35. package/dist/index.js +0 -133
  36. package/dist/index.js.map +0 -1
  37. package/dist/mcp/client.d.ts +0 -19
  38. package/dist/mcp/client.d.ts.map +0 -1
  39. package/dist/mcp/client.js +0 -126
  40. package/dist/mcp/client.js.map +0 -1
  41. package/dist/providers/anthropic.d.ts +0 -17
  42. package/dist/providers/anthropic.d.ts.map +0 -1
  43. package/dist/providers/anthropic.js +0 -47
  44. package/dist/providers/anthropic.js.map +0 -1
  45. package/dist/providers/index.d.ts +0 -20
  46. package/dist/providers/index.d.ts.map +0 -1
  47. package/dist/providers/index.js +0 -26
  48. package/dist/providers/index.js.map +0 -1
  49. package/dist/providers/openai.d.ts +0 -26
  50. package/dist/providers/openai.d.ts.map +0 -1
  51. package/dist/providers/openai.js +0 -212
  52. package/dist/providers/openai.js.map +0 -1
  53. package/dist/providers/types.d.ts +0 -84
  54. package/dist/providers/types.d.ts.map +0 -1
  55. package/dist/providers/types.js +0 -11
  56. package/dist/providers/types.js.map +0 -1
  57. package/dist/sdk-mcp-server.d.ts +0 -52
  58. package/dist/sdk-mcp-server.d.ts.map +0 -1
  59. package/dist/sdk-mcp-server.js +0 -57
  60. package/dist/sdk-mcp-server.js.map +0 -1
  61. package/dist/session.d.ts +0 -73
  62. package/dist/session.d.ts.map +0 -1
  63. package/dist/session.js +0 -159
  64. package/dist/session.js.map +0 -1
  65. package/dist/skills/bundled/commit.d.ts +0 -7
  66. package/dist/skills/bundled/commit.d.ts.map +0 -1
  67. package/dist/skills/bundled/commit.js +0 -35
  68. package/dist/skills/bundled/commit.js.map +0 -1
  69. package/dist/skills/bundled/debug.d.ts +0 -7
  70. package/dist/skills/bundled/debug.d.ts.map +0 -1
  71. package/dist/skills/bundled/debug.js +0 -46
  72. package/dist/skills/bundled/debug.js.map +0 -1
  73. package/dist/skills/bundled/index.d.ts +0 -11
  74. package/dist/skills/bundled/index.d.ts.map +0 -1
  75. package/dist/skills/bundled/index.js +0 -26
  76. package/dist/skills/bundled/index.js.map +0 -1
  77. package/dist/skills/bundled/review.d.ts +0 -7
  78. package/dist/skills/bundled/review.d.ts.map +0 -1
  79. package/dist/skills/bundled/review.js +0 -38
  80. package/dist/skills/bundled/review.js.map +0 -1
  81. package/dist/skills/bundled/simplify.d.ts +0 -8
  82. package/dist/skills/bundled/simplify.d.ts.map +0 -1
  83. package/dist/skills/bundled/simplify.js +0 -48
  84. package/dist/skills/bundled/simplify.js.map +0 -1
  85. package/dist/skills/bundled/test.d.ts +0 -7
  86. package/dist/skills/bundled/test.d.ts.map +0 -1
  87. package/dist/skills/bundled/test.js +0 -40
  88. package/dist/skills/bundled/test.js.map +0 -1
  89. package/dist/skills/index.d.ts +0 -7
  90. package/dist/skills/index.d.ts.map +0 -1
  91. package/dist/skills/index.js +0 -8
  92. package/dist/skills/index.js.map +0 -1
  93. package/dist/skills/registry.d.ts +0 -43
  94. package/dist/skills/registry.d.ts.map +0 -1
  95. package/dist/skills/registry.js +0 -111
  96. package/dist/skills/registry.js.map +0 -1
  97. package/dist/skills/types.d.ts +0 -83
  98. package/dist/skills/types.d.ts.map +0 -1
  99. package/dist/skills/types.js +0 -8
  100. package/dist/skills/types.js.map +0 -1
  101. package/dist/tool-helper.d.ts +0 -73
  102. package/dist/tool-helper.d.ts.map +0 -1
  103. package/dist/tool-helper.js +0 -86
  104. package/dist/tool-helper.js.map +0 -1
  105. package/dist/tools/agent-tool.d.ts +0 -17
  106. package/dist/tools/agent-tool.d.ts.map +0 -1
  107. package/dist/tools/agent-tool.js +0 -146
  108. package/dist/tools/agent-tool.js.map +0 -1
  109. package/dist/tools/ask-user.d.ts +0 -18
  110. package/dist/tools/ask-user.d.ts.map +0 -1
  111. package/dist/tools/ask-user.js +0 -72
  112. package/dist/tools/ask-user.js.map +0 -1
  113. package/dist/tools/bash.d.ts +0 -5
  114. package/dist/tools/bash.d.ts.map +0 -1
  115. package/dist/tools/bash.js +0 -67
  116. package/dist/tools/bash.js.map +0 -1
  117. package/dist/tools/config-tool.d.ts +0 -20
  118. package/dist/tools/config-tool.d.ts.map +0 -1
  119. package/dist/tools/config-tool.js +0 -83
  120. package/dist/tools/config-tool.js.map +0 -1
  121. package/dist/tools/cron-tools.d.ts +0 -33
  122. package/dist/tools/cron-tools.d.ts.map +0 -1
  123. package/dist/tools/cron-tools.js +0 -128
  124. package/dist/tools/cron-tools.js.map +0 -1
  125. package/dist/tools/edit.d.ts +0 -5
  126. package/dist/tools/edit.d.ts.map +0 -1
  127. package/dist/tools/edit.js +0 -70
  128. package/dist/tools/edit.js.map +0 -1
  129. package/dist/tools/glob.d.ts +0 -5
  130. package/dist/tools/glob.d.ts.map +0 -1
  131. package/dist/tools/glob.js +0 -75
  132. package/dist/tools/glob.js.map +0 -1
  133. package/dist/tools/grep.d.ts +0 -5
  134. package/dist/tools/grep.d.ts.map +0 -1
  135. package/dist/tools/grep.js +0 -168
  136. package/dist/tools/grep.js.map +0 -1
  137. package/dist/tools/index.d.ts +0 -45
  138. package/dist/tools/index.d.ts.map +0 -1
  139. package/dist/tools/index.js +0 -162
  140. package/dist/tools/index.js.map +0 -1
  141. package/dist/tools/lsp-tool.d.ts +0 -9
  142. package/dist/tools/lsp-tool.d.ts.map +0 -1
  143. package/dist/tools/lsp-tool.js +0 -137
  144. package/dist/tools/lsp-tool.js.map +0 -1
  145. package/dist/tools/mcp-resource-tools.d.ts +0 -14
  146. package/dist/tools/mcp-resource-tools.d.ts.map +0 -1
  147. package/dist/tools/mcp-resource-tools.js +0 -117
  148. package/dist/tools/mcp-resource-tools.js.map +0 -1
  149. package/dist/tools/notebook-edit.d.ts +0 -5
  150. package/dist/tools/notebook-edit.d.ts.map +0 -1
  151. package/dist/tools/notebook-edit.js +0 -85
  152. package/dist/tools/notebook-edit.js.map +0 -1
  153. package/dist/tools/plan-tools.d.ts +0 -12
  154. package/dist/tools/plan-tools.d.ts.map +0 -1
  155. package/dist/tools/plan-tools.js +0 -77
  156. package/dist/tools/plan-tools.js.map +0 -1
  157. package/dist/tools/read.d.ts +0 -5
  158. package/dist/tools/read.d.ts.map +0 -1
  159. package/dist/tools/read.js +0 -66
  160. package/dist/tools/read.js.map +0 -1
  161. package/dist/tools/send-message.d.ts +0 -31
  162. package/dist/tools/send-message.d.ts.map +0 -1
  163. package/dist/tools/send-message.js +0 -77
  164. package/dist/tools/send-message.js.map +0 -1
  165. package/dist/tools/skill-tool.d.ts +0 -9
  166. package/dist/tools/skill-tool.d.ts.map +0 -1
  167. package/dist/tools/skill-tool.js +0 -115
  168. package/dist/tools/skill-tool.js.map +0 -1
  169. package/dist/tools/task-tools.d.ts +0 -48
  170. package/dist/tools/task-tools.d.ts.map +0 -1
  171. package/dist/tools/task-tools.js +0 -242
  172. package/dist/tools/task-tools.js.map +0 -1
  173. package/dist/tools/team-tools.d.ts +0 -34
  174. package/dist/tools/team-tools.d.ts.map +0 -1
  175. package/dist/tools/team-tools.js +0 -103
  176. package/dist/tools/team-tools.js.map +0 -1
  177. package/dist/tools/todo-tool.d.ts +0 -22
  178. package/dist/tools/todo-tool.d.ts.map +0 -1
  179. package/dist/tools/todo-tool.js +0 -93
  180. package/dist/tools/todo-tool.js.map +0 -1
  181. package/dist/tools/tool-search.d.ts +0 -13
  182. package/dist/tools/tool-search.d.ts.map +0 -1
  183. package/dist/tools/tool-search.js +0 -76
  184. package/dist/tools/tool-search.js.map +0 -1
  185. package/dist/tools/types.d.ts +0 -29
  186. package/dist/tools/types.d.ts.map +0 -1
  187. package/dist/tools/types.js +0 -52
  188. package/dist/tools/types.js.map +0 -1
  189. package/dist/tools/web-fetch.d.ts +0 -5
  190. package/dist/tools/web-fetch.d.ts.map +0 -1
  191. package/dist/tools/web-fetch.js +0 -60
  192. package/dist/tools/web-fetch.js.map +0 -1
  193. package/dist/tools/web-search.d.ts +0 -5
  194. package/dist/tools/web-search.d.ts.map +0 -1
  195. package/dist/tools/web-search.js +0 -77
  196. package/dist/tools/web-search.js.map +0 -1
  197. package/dist/tools/worktree-tools.d.ts +0 -10
  198. package/dist/tools/worktree-tools.d.ts.map +0 -1
  199. package/dist/tools/worktree-tools.js +0 -130
  200. package/dist/tools/worktree-tools.js.map +0 -1
  201. package/dist/tools/write.d.ts +0 -5
  202. package/dist/tools/write.d.ts.map +0 -1
  203. package/dist/tools/write.js +0 -40
  204. package/dist/tools/write.js.map +0 -1
  205. package/dist/types.d.ts +0 -423
  206. package/dist/types.d.ts.map +0 -1
  207. package/dist/types.js +0 -5
  208. package/dist/types.js.map +0 -1
  209. package/dist/utils/compact.d.ts +0 -44
  210. package/dist/utils/compact.d.ts.map +0 -1
  211. package/dist/utils/compact.js +0 -162
  212. package/dist/utils/compact.js.map +0 -1
  213. package/dist/utils/context.d.ts +0 -35
  214. package/dist/utils/context.d.ts.map +0 -1
  215. package/dist/utils/context.js +0 -174
  216. package/dist/utils/context.js.map +0 -1
  217. package/dist/utils/fileCache.d.ts +0 -64
  218. package/dist/utils/fileCache.d.ts.map +0 -1
  219. package/dist/utils/fileCache.js +0 -117
  220. package/dist/utils/fileCache.js.map +0 -1
  221. package/dist/utils/messages.d.ts +0 -57
  222. package/dist/utils/messages.d.ts.map +0 -1
  223. package/dist/utils/messages.js +0 -152
  224. package/dist/utils/messages.js.map +0 -1
  225. package/dist/utils/retry.d.ts +0 -48
  226. package/dist/utils/retry.d.ts.map +0 -1
  227. package/dist/utils/retry.js +0 -111
  228. package/dist/utils/retry.js.map +0 -1
  229. package/dist/utils/tokens.d.ts +0 -57
  230. package/dist/utils/tokens.d.ts.map +0 -1
  231. package/dist/utils/tokens.js +0 -134
  232. package/dist/utils/tokens.js.map +0 -1
package/src/engine.ts CHANGED
@@ -315,12 +315,15 @@ export class QueryEngine {
315
315
  }
316
316
  }
317
317
 
318
+ const message = err?.message ? String(err.message) : String(err)
319
+
318
320
  yield {
319
321
  type: 'result',
320
322
  subtype: 'error',
321
323
  usage: this.totalUsage,
322
324
  num_turns: this.turnCount,
323
325
  cost: this.totalCost,
326
+ errors: [message],
324
327
  }
325
328
  return
326
329
  }
package/tsconfig.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "NodeNext",
5
+ "moduleResolution": "NodeNext",
6
+ "outDir": "./dist",
7
+ "rootDir": "./src",
8
+ "declaration": true,
9
+ "declarationMap": true,
10
+ "sourceMap": true,
11
+ "strict": true,
12
+ "esModuleInterop": true,
13
+ "skipLibCheck": true,
14
+ "forceConsistentCasingInFileNames": true,
15
+ "resolveJsonModule": true
16
+ },
17
+ "include": ["src/**/*"],
18
+ "exclude": ["node_modules", "dist", "examples"]
19
+ }
package/dist/agent.d.ts DELETED
@@ -1,113 +0,0 @@
1
- /**
2
- * Agent - High-level API
3
- *
4
- * Provides createAgent() and query() interfaces compatible with
5
- * open-agent-sdk.
6
- *
7
- * Usage:
8
- * import { createAgent } from 'open-agent-sdk'
9
- * const agent = createAgent({ model: 'claude-sonnet-4-6' })
10
- * for await (const event of agent.query('Hello')) { ... }
11
- *
12
- * // OpenAI-compatible models
13
- * const agent = createAgent({
14
- * apiType: 'openai-completions',
15
- * model: 'gpt-4o',
16
- * apiKey: 'sk-...',
17
- * baseURL: 'https://api.openai.com/v1',
18
- * })
19
- */
20
- import type { AgentOptions, QueryResult, SDKMessage, Message, PermissionMode } from './types.js';
21
- import { type ApiType } from './providers/index.js';
22
- export declare class Agent {
23
- private cfg;
24
- private toolPool;
25
- private modelId;
26
- private apiType;
27
- private apiCredentials;
28
- private provider;
29
- private mcpLinks;
30
- private history;
31
- private messageLog;
32
- private setupDone;
33
- private sid;
34
- private abortCtrl;
35
- private currentEngine;
36
- private hookRegistry;
37
- constructor(options?: AgentOptions);
38
- /**
39
- * Resolve API type from options, env, or model name heuristic.
40
- */
41
- private resolveApiType;
42
- /** Pick API key and base URL from options or CODEANY_* env vars. */
43
- private pickCredentials;
44
- /** Read a value from process.env (returns undefined if missing). */
45
- private readEnv;
46
- /** Assemble the available tool set based on options. */
47
- private buildToolPool;
48
- /**
49
- * Async initialization: connect MCP servers, register agents, resume sessions.
50
- */
51
- private setup;
52
- /**
53
- * Run a query with streaming events.
54
- */
55
- query(prompt: string, overrides?: Partial<AgentOptions>): AsyncGenerator<SDKMessage, void>;
56
- /**
57
- * Convenience method: send a prompt and collect the final answer as a single object.
58
- * Internally iterates through the streaming query and aggregates the outcome.
59
- */
60
- prompt(text: string, overrides?: Partial<AgentOptions>): Promise<QueryResult>;
61
- /**
62
- * Get conversation messages.
63
- */
64
- getMessages(): Message[];
65
- /**
66
- * Reset conversation history.
67
- */
68
- clear(): void;
69
- /**
70
- * Interrupt the current query.
71
- */
72
- interrupt(): Promise<void>;
73
- /**
74
- * Change the model during a session.
75
- */
76
- setModel(model?: string): Promise<void>;
77
- /**
78
- * Change the permission mode during a session.
79
- */
80
- setPermissionMode(mode: PermissionMode): Promise<void>;
81
- /**
82
- * Set maximum thinking tokens.
83
- */
84
- setMaxThinkingTokens(maxThinkingTokens: number | null): Promise<void>;
85
- /**
86
- * Get the session ID.
87
- */
88
- getSessionId(): string;
89
- /**
90
- * Get the current API type.
91
- */
92
- getApiType(): ApiType;
93
- /**
94
- * Stop a background task.
95
- */
96
- stopTask(taskId: string): Promise<void>;
97
- /**
98
- * Close MCP connections and clean up.
99
- * Optionally persist session to disk.
100
- */
101
- close(): Promise<void>;
102
- }
103
- /** Factory: shorthand for `new Agent(options)`. */
104
- export declare function createAgent(options?: AgentOptions): Agent;
105
- /**
106
- * Execute a single agentic query without managing an Agent instance.
107
- * The agent is created, used, and cleaned up automatically.
108
- */
109
- export declare function query(params: {
110
- prompt: string;
111
- options?: AgentOptions;
112
- }): AsyncGenerator<SDKMessage, void>;
113
- //# sourceMappingURL=agent.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACX,UAAU,EAGV,OAAO,EACP,cAAc,EACf,MAAM,YAAY,CAAA;AAYnB,OAAO,EAAoC,KAAK,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAOrF,qBAAa,KAAK;IAChB,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,cAAc,CAAoC;IAC1D,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,SAAS,CAAe;IAChC,OAAO,CAAC,GAAG,CAAQ;IACnB,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,aAAa,CAA2B;IAChD,OAAO,CAAC,YAAY,CAAc;gBAEtB,OAAO,GAAE,YAAiB;IAkDtC;;OAEG;IACH,OAAO,CAAC,cAAc;IAgCtB,oEAAoE;IACpE,OAAO,CAAC,eAAe;IAgBvB,oEAAoE;IACpE,OAAO,CAAC,OAAO;IAIf,wDAAwD;IACxD,OAAO,CAAC,aAAa;IAerB;;OAEG;YACW,KAAK;IAsCnB;;OAEG;IACI,KAAK,CACV,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAChC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC;IAqHnC;;;OAGG;IACG,MAAM,CACV,IAAI,EAAE,MAAM,EACZ,SAAS,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAChC,OAAO,CAAC,WAAW,CAAC;IA+BvB;;OAEG;IACH,WAAW,IAAI,OAAO,EAAE;IAIxB;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC;;OAEG;IACG,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO7C;;OAEG;IACG,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5D;;OAEG;IACG,oBAAoB,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ3E;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ7C;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAmB7B;AAMD,mDAAmD;AACnD,wBAAgB,WAAW,CAAC,OAAO,GAAE,YAAiB,GAAG,KAAK,CAE7D;AAMD;;;GAGG;AACH,wBAAuB,KAAK,CAAC,MAAM,EAAE;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,YAAY,CAAA;CACvB,GAAG,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,CAOnC"}
package/dist/agent.js DELETED
@@ -1,446 +0,0 @@
1
- /**
2
- * Agent - High-level API
3
- *
4
- * Provides createAgent() and query() interfaces compatible with
5
- * open-agent-sdk.
6
- *
7
- * Usage:
8
- * import { createAgent } from 'open-agent-sdk'
9
- * const agent = createAgent({ model: 'claude-sonnet-4-6' })
10
- * for await (const event of agent.query('Hello')) { ... }
11
- *
12
- * // OpenAI-compatible models
13
- * const agent = createAgent({
14
- * apiType: 'openai-completions',
15
- * model: 'gpt-4o',
16
- * apiKey: 'sk-...',
17
- * baseURL: 'https://api.openai.com/v1',
18
- * })
19
- */
20
- import { QueryEngine } from './engine.js';
21
- import { getAllBaseTools, filterTools } from './tools/index.js';
22
- import { connectMCPServer } from './mcp/client.js';
23
- import { isSdkServerConfig } from './sdk-mcp-server.js';
24
- import { registerAgents } from './tools/agent-tool.js';
25
- import { saveSession, loadSession, } from './session.js';
26
- import { createHookRegistry } from './hooks.js';
27
- import { initBundledSkills } from './skills/index.js';
28
- import { createProvider } from './providers/index.js';
29
- // --------------------------------------------------------------------------
30
- // Agent class
31
- // --------------------------------------------------------------------------
32
- export class Agent {
33
- cfg;
34
- toolPool;
35
- modelId;
36
- apiType;
37
- apiCredentials;
38
- provider;
39
- mcpLinks = [];
40
- history = [];
41
- messageLog = [];
42
- setupDone;
43
- sid;
44
- abortCtrl = null;
45
- currentEngine = null;
46
- hookRegistry;
47
- constructor(options = {}) {
48
- // Shallow copy to avoid mutating caller's object
49
- this.cfg = { ...options };
50
- // Merge credentials from options.env map, direct options, and process.env
51
- this.apiCredentials = this.pickCredentials();
52
- this.modelId = this.cfg.model ?? this.readEnv('CODEANY_MODEL') ?? 'claude-sonnet-4-6';
53
- this.sid = this.cfg.sessionId ?? crypto.randomUUID();
54
- // Resolve API type
55
- this.apiType = this.resolveApiType();
56
- // Create LLM provider
57
- this.provider = createProvider(this.apiType, {
58
- apiKey: this.apiCredentials.key,
59
- baseURL: this.apiCredentials.baseUrl,
60
- });
61
- // Initialize bundled skills
62
- initBundledSkills();
63
- // Build hook registry from options
64
- this.hookRegistry = createHookRegistry();
65
- if (this.cfg.hooks) {
66
- // Convert AgentOptions hooks format to HookConfig
67
- for (const [event, defs] of Object.entries(this.cfg.hooks)) {
68
- for (const def of defs) {
69
- for (const handler of def.hooks) {
70
- this.hookRegistry.register(event, {
71
- matcher: def.matcher,
72
- timeout: def.timeout,
73
- handler: async (input) => {
74
- const result = await handler(input, input.toolUseId || '', {
75
- signal: this.abortCtrl?.signal || new AbortController().signal,
76
- });
77
- return result || undefined;
78
- },
79
- });
80
- }
81
- }
82
- }
83
- }
84
- // Build tool pool from options (supports ToolDefinition[], string[], or preset)
85
- this.toolPool = this.buildToolPool();
86
- // Kick off async setup (MCP connections, agent registration, session resume)
87
- this.setupDone = this.setup();
88
- }
89
- /**
90
- * Resolve API type from options, env, or model name heuristic.
91
- */
92
- resolveApiType() {
93
- // Explicit option
94
- if (this.cfg.apiType)
95
- return this.cfg.apiType;
96
- // Env var
97
- const envType = this.cfg.env?.CODEANY_API_TYPE ??
98
- this.readEnv('CODEANY_API_TYPE');
99
- if (envType === 'openai-completions' || envType === 'anthropic-messages') {
100
- return envType;
101
- }
102
- // Heuristic from model name
103
- const model = this.modelId.toLowerCase();
104
- if (model.includes('gpt-') ||
105
- model.includes('o1') ||
106
- model.includes('o3') ||
107
- model.includes('o4') ||
108
- model.includes('deepseek') ||
109
- model.includes('qwen') ||
110
- model.includes('yi-') ||
111
- model.includes('glm') ||
112
- model.includes('mistral') ||
113
- model.includes('gemma')) {
114
- return 'openai-completions';
115
- }
116
- return 'anthropic-messages';
117
- }
118
- /** Pick API key and base URL from options or CODEANY_* env vars. */
119
- pickCredentials() {
120
- const envMap = this.cfg.env;
121
- return {
122
- key: this.cfg.apiKey ??
123
- envMap?.CODEANY_API_KEY ??
124
- envMap?.CODEANY_AUTH_TOKEN ??
125
- this.readEnv('CODEANY_API_KEY') ??
126
- this.readEnv('CODEANY_AUTH_TOKEN'),
127
- baseUrl: this.cfg.baseURL ??
128
- envMap?.CODEANY_BASE_URL ??
129
- this.readEnv('CODEANY_BASE_URL'),
130
- };
131
- }
132
- /** Read a value from process.env (returns undefined if missing). */
133
- readEnv(key) {
134
- return process.env[key] || undefined;
135
- }
136
- /** Assemble the available tool set based on options. */
137
- buildToolPool() {
138
- const raw = this.cfg.tools;
139
- let pool;
140
- if (!raw || (typeof raw === 'object' && !Array.isArray(raw) && 'type' in raw)) {
141
- pool = getAllBaseTools();
142
- }
143
- else if (Array.isArray(raw) && raw.length > 0 && typeof raw[0] === 'string') {
144
- pool = filterTools(getAllBaseTools(), raw);
145
- }
146
- else {
147
- pool = raw;
148
- }
149
- return filterTools(pool, this.cfg.allowedTools, this.cfg.disallowedTools);
150
- }
151
- /**
152
- * Async initialization: connect MCP servers, register agents, resume sessions.
153
- */
154
- async setup() {
155
- // Register custom agent definitions
156
- if (this.cfg.agents) {
157
- registerAgents(this.cfg.agents);
158
- }
159
- // Connect MCP servers (supports stdio, SSE, HTTP, and in-process SDK servers)
160
- if (this.cfg.mcpServers) {
161
- for (const [name, config] of Object.entries(this.cfg.mcpServers)) {
162
- try {
163
- if (isSdkServerConfig(config)) {
164
- // In-process SDK MCP server - directly add tools
165
- this.toolPool = [...this.toolPool, ...config.tools];
166
- }
167
- else {
168
- // External MCP server
169
- const connection = await connectMCPServer(name, config);
170
- this.mcpLinks.push(connection);
171
- if (connection.status === 'connected' && connection.tools.length > 0) {
172
- this.toolPool = [...this.toolPool, ...connection.tools];
173
- }
174
- }
175
- }
176
- catch (err) {
177
- console.error(`[MCP] Failed to connect to "${name}": ${err.message}`);
178
- }
179
- }
180
- }
181
- // Resume or continue session
182
- if (this.cfg.resume) {
183
- const sessionData = await loadSession(this.cfg.resume);
184
- if (sessionData) {
185
- this.history = sessionData.messages;
186
- this.sid = this.cfg.resume;
187
- }
188
- }
189
- }
190
- /**
191
- * Run a query with streaming events.
192
- */
193
- async *query(prompt, overrides) {
194
- await this.setupDone;
195
- const opts = { ...this.cfg, ...overrides };
196
- const cwd = opts.cwd || process.cwd();
197
- // Create abort controller for this query
198
- this.abortCtrl = opts.abortController || new AbortController();
199
- if (opts.abortSignal) {
200
- opts.abortSignal.addEventListener('abort', () => this.abortCtrl?.abort(), { once: true });
201
- }
202
- // Resolve systemPrompt (handle preset object)
203
- let systemPrompt;
204
- let appendSystemPrompt = opts.appendSystemPrompt;
205
- if (typeof opts.systemPrompt === 'object' && opts.systemPrompt?.type === 'preset') {
206
- systemPrompt = undefined; // Use engine default (default style)
207
- if (opts.systemPrompt.append) {
208
- appendSystemPrompt = (appendSystemPrompt || '') + '\n' + opts.systemPrompt.append;
209
- }
210
- }
211
- else {
212
- systemPrompt = opts.systemPrompt;
213
- }
214
- // Build canUseTool based on permission mode
215
- const permMode = opts.permissionMode ?? 'bypassPermissions';
216
- const canUseTool = opts.canUseTool ?? (async (_tool, _input) => {
217
- if (permMode === 'bypassPermissions' || permMode === 'dontAsk' || permMode === 'auto') {
218
- return { behavior: 'allow' };
219
- }
220
- if (permMode === 'acceptEdits') {
221
- return { behavior: 'allow' };
222
- }
223
- return { behavior: 'allow' };
224
- });
225
- // Resolve tools with overrides
226
- let tools = this.toolPool;
227
- if (overrides?.allowedTools || overrides?.disallowedTools) {
228
- tools = filterTools(tools, overrides.allowedTools, overrides.disallowedTools);
229
- }
230
- if (overrides?.tools) {
231
- const ot = overrides.tools;
232
- if (Array.isArray(ot) && ot.length > 0 && typeof ot[0] === 'string') {
233
- tools = filterTools(this.toolPool, ot);
234
- }
235
- else if (Array.isArray(ot)) {
236
- tools = ot;
237
- }
238
- }
239
- // Recreate provider if overrides change credentials or apiType
240
- let provider = this.provider;
241
- if (overrides?.apiType || overrides?.apiKey || overrides?.baseURL) {
242
- const resolvedApiType = overrides.apiType ?? this.apiType;
243
- provider = createProvider(resolvedApiType, {
244
- apiKey: overrides.apiKey ?? this.apiCredentials.key,
245
- baseURL: overrides.baseURL ?? this.apiCredentials.baseUrl,
246
- });
247
- }
248
- // Create query engine with current conversation state
249
- const engine = new QueryEngine({
250
- cwd,
251
- model: opts.model || this.modelId,
252
- provider,
253
- tools,
254
- systemPrompt,
255
- appendSystemPrompt,
256
- maxTurns: opts.maxTurns ?? 10,
257
- maxBudgetUsd: opts.maxBudgetUsd,
258
- maxTokens: opts.maxTokens ?? 16384,
259
- thinking: opts.thinking,
260
- jsonSchema: opts.jsonSchema,
261
- canUseTool,
262
- includePartialMessages: opts.includePartialMessages ?? false,
263
- abortSignal: this.abortCtrl.signal,
264
- agents: opts.agents,
265
- hookRegistry: this.hookRegistry,
266
- sessionId: this.sid,
267
- });
268
- this.currentEngine = engine;
269
- // Inject existing conversation history
270
- for (const msg of this.history) {
271
- engine.messages.push(msg);
272
- }
273
- // Run the engine
274
- for await (const event of engine.submitMessage(prompt)) {
275
- yield event;
276
- // Track assistant messages for multi-turn persistence
277
- if (event.type === 'assistant') {
278
- const uuid = crypto.randomUUID();
279
- const timestamp = new Date().toISOString();
280
- this.messageLog.push({
281
- type: 'assistant',
282
- message: event.message,
283
- uuid,
284
- timestamp,
285
- });
286
- }
287
- }
288
- // Persist conversation state for multi-turn
289
- this.history = engine.getMessages();
290
- // Add user message to tracked messages
291
- const userUuid = crypto.randomUUID();
292
- this.messageLog.push({
293
- type: 'user',
294
- message: { role: 'user', content: prompt },
295
- uuid: userUuid,
296
- timestamp: new Date().toISOString(),
297
- });
298
- }
299
- /**
300
- * Convenience method: send a prompt and collect the final answer as a single object.
301
- * Internally iterates through the streaming query and aggregates the outcome.
302
- */
303
- async prompt(text, overrides) {
304
- const t0 = performance.now();
305
- const collected = { text: '', turns: 0, tokens: { in: 0, out: 0 } };
306
- for await (const ev of this.query(text, overrides)) {
307
- switch (ev.type) {
308
- case 'assistant': {
309
- // Extract the last assistant text (multi-turn: only final answer matters)
310
- const fragments = ev.message.content
311
- .filter((c) => c.type === 'text')
312
- .map((c) => c.text);
313
- if (fragments.length)
314
- collected.text = fragments.join('');
315
- break;
316
- }
317
- case 'result':
318
- collected.turns = ev.num_turns ?? 0;
319
- collected.tokens.in = ev.usage?.input_tokens ?? 0;
320
- collected.tokens.out = ev.usage?.output_tokens ?? 0;
321
- break;
322
- }
323
- }
324
- return {
325
- text: collected.text,
326
- usage: { input_tokens: collected.tokens.in, output_tokens: collected.tokens.out },
327
- num_turns: collected.turns,
328
- duration_ms: Math.round(performance.now() - t0),
329
- messages: [...this.messageLog],
330
- };
331
- }
332
- /**
333
- * Get conversation messages.
334
- */
335
- getMessages() {
336
- return [...this.messageLog];
337
- }
338
- /**
339
- * Reset conversation history.
340
- */
341
- clear() {
342
- this.history = [];
343
- this.messageLog = [];
344
- }
345
- /**
346
- * Interrupt the current query.
347
- */
348
- async interrupt() {
349
- this.abortCtrl?.abort();
350
- }
351
- /**
352
- * Change the model during a session.
353
- */
354
- async setModel(model) {
355
- if (model) {
356
- this.modelId = model;
357
- this.cfg.model = model;
358
- }
359
- }
360
- /**
361
- * Change the permission mode during a session.
362
- */
363
- async setPermissionMode(mode) {
364
- this.cfg.permissionMode = mode;
365
- }
366
- /**
367
- * Set maximum thinking tokens.
368
- */
369
- async setMaxThinkingTokens(maxThinkingTokens) {
370
- if (maxThinkingTokens === null) {
371
- this.cfg.thinking = { type: 'disabled' };
372
- }
373
- else {
374
- this.cfg.thinking = { type: 'enabled', budgetTokens: maxThinkingTokens };
375
- }
376
- }
377
- /**
378
- * Get the session ID.
379
- */
380
- getSessionId() {
381
- return this.sid;
382
- }
383
- /**
384
- * Get the current API type.
385
- */
386
- getApiType() {
387
- return this.apiType;
388
- }
389
- /**
390
- * Stop a background task.
391
- */
392
- async stopTask(taskId) {
393
- const { getTask } = await import('./tools/task-tools.js');
394
- const task = getTask(taskId);
395
- if (task) {
396
- task.status = 'cancelled';
397
- }
398
- }
399
- /**
400
- * Close MCP connections and clean up.
401
- * Optionally persist session to disk.
402
- */
403
- async close() {
404
- // Persist session if enabled
405
- if (this.cfg.persistSession !== false && this.history.length > 0) {
406
- try {
407
- await saveSession(this.sid, this.history, {
408
- cwd: this.cfg.cwd || process.cwd(),
409
- model: this.modelId,
410
- summary: undefined,
411
- });
412
- }
413
- catch {
414
- // Session persistence is best-effort
415
- }
416
- }
417
- for (const conn of this.mcpLinks) {
418
- await conn.close();
419
- }
420
- this.mcpLinks = [];
421
- }
422
- }
423
- // --------------------------------------------------------------------------
424
- // Factory function
425
- // --------------------------------------------------------------------------
426
- /** Factory: shorthand for `new Agent(options)`. */
427
- export function createAgent(options = {}) {
428
- return new Agent(options);
429
- }
430
- // --------------------------------------------------------------------------
431
- // Standalone query — one-shot convenience wrapper
432
- // --------------------------------------------------------------------------
433
- /**
434
- * Execute a single agentic query without managing an Agent instance.
435
- * The agent is created, used, and cleaned up automatically.
436
- */
437
- export async function* query(params) {
438
- const ephemeral = createAgent(params.options);
439
- try {
440
- yield* ephemeral.query(params.prompt);
441
- }
442
- finally {
443
- await ephemeral.close();
444
- }
445
- }
446
- //# sourceMappingURL=agent.js.map
package/dist/agent.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}