maestro-agent-sdk 0.1.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 (196) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE +24 -0
  3. package/README.md +133 -0
  4. package/dist/agents/contracts.d.ts +49 -0
  5. package/dist/agents/contracts.d.ts.map +1 -0
  6. package/dist/agents/contracts.js +2 -0
  7. package/dist/agents/contracts.js.map +1 -0
  8. package/dist/agents/rollout/shared.d.ts +24 -0
  9. package/dist/agents/rollout/shared.d.ts.map +1 -0
  10. package/dist/agents/rollout/shared.js +105 -0
  11. package/dist/agents/rollout/shared.js.map +1 -0
  12. package/dist/core/agent.d.ts +71 -0
  13. package/dist/core/agent.d.ts.map +1 -0
  14. package/dist/core/agent.js +22 -0
  15. package/dist/core/agent.js.map +1 -0
  16. package/dist/core/loop.d.ts +26 -0
  17. package/dist/core/loop.d.ts.map +1 -0
  18. package/dist/core/loop.js +317 -0
  19. package/dist/core/loop.js.map +1 -0
  20. package/dist/index.d.ts +49 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +53 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/mcp/client.d.ts +79 -0
  25. package/dist/mcp/client.d.ts.map +1 -0
  26. package/dist/mcp/client.js +176 -0
  27. package/dist/mcp/client.js.map +1 -0
  28. package/dist/mcp/pool-cache.d.ts +103 -0
  29. package/dist/mcp/pool-cache.d.ts.map +1 -0
  30. package/dist/mcp/pool-cache.js +249 -0
  31. package/dist/mcp/pool-cache.js.map +1 -0
  32. package/dist/mcp/pool.d.ts +65 -0
  33. package/dist/mcp/pool.d.ts.map +1 -0
  34. package/dist/mcp/pool.js +86 -0
  35. package/dist/mcp/pool.js.map +1 -0
  36. package/dist/media/file-events.d.ts +8 -0
  37. package/dist/media/file-events.d.ts.map +1 -0
  38. package/dist/media/file-events.js +15 -0
  39. package/dist/media/file-events.js.map +1 -0
  40. package/dist/memory/active-task-template.d.ts +34 -0
  41. package/dist/memory/active-task-template.d.ts.map +1 -0
  42. package/dist/memory/active-task-template.js +63 -0
  43. package/dist/memory/active-task-template.js.map +1 -0
  44. package/dist/memory/compressor.d.ts +87 -0
  45. package/dist/memory/compressor.d.ts.map +1 -0
  46. package/dist/memory/compressor.js +164 -0
  47. package/dist/memory/compressor.js.map +1 -0
  48. package/dist/memory/hash.d.ts +17 -0
  49. package/dist/memory/hash.d.ts.map +1 -0
  50. package/dist/memory/hash.js +20 -0
  51. package/dist/memory/hash.js.map +1 -0
  52. package/dist/memory/prune.d.ts +117 -0
  53. package/dist/memory/prune.d.ts.map +1 -0
  54. package/dist/memory/prune.js +416 -0
  55. package/dist/memory/prune.js.map +1 -0
  56. package/dist/memory/reminder.d.ts +57 -0
  57. package/dist/memory/reminder.d.ts.map +1 -0
  58. package/dist/memory/reminder.js +57 -0
  59. package/dist/memory/reminder.js.map +1 -0
  60. package/dist/memory/scrubber.d.ts +28 -0
  61. package/dist/memory/scrubber.d.ts.map +1 -0
  62. package/dist/memory/scrubber.js +147 -0
  63. package/dist/memory/scrubber.js.map +1 -0
  64. package/dist/memory/token-estimate.d.ts +10 -0
  65. package/dist/memory/token-estimate.d.ts.map +1 -0
  66. package/dist/memory/token-estimate.js +69 -0
  67. package/dist/memory/token-estimate.js.map +1 -0
  68. package/dist/platform/config.d.ts +12 -0
  69. package/dist/platform/config.d.ts.map +1 -0
  70. package/dist/platform/config.js +54 -0
  71. package/dist/platform/config.js.map +1 -0
  72. package/dist/platform/jsonl.d.ts +15 -0
  73. package/dist/platform/jsonl.d.ts.map +1 -0
  74. package/dist/platform/jsonl.js +80 -0
  75. package/dist/platform/jsonl.js.map +1 -0
  76. package/dist/platform/lifecycle.d.ts +22 -0
  77. package/dist/platform/lifecycle.d.ts.map +1 -0
  78. package/dist/platform/lifecycle.js +60 -0
  79. package/dist/platform/lifecycle.js.map +1 -0
  80. package/dist/platform/logger.d.ts +26 -0
  81. package/dist/platform/logger.d.ts.map +1 -0
  82. package/dist/platform/logger.js +41 -0
  83. package/dist/platform/logger.js.map +1 -0
  84. package/dist/platform/mcp-config.d.ts +15 -0
  85. package/dist/platform/mcp-config.d.ts.map +1 -0
  86. package/dist/platform/mcp-config.js +8 -0
  87. package/dist/platform/mcp-config.js.map +1 -0
  88. package/dist/provider.d.ts +81 -0
  89. package/dist/provider.d.ts.map +1 -0
  90. package/dist/provider.js +444 -0
  91. package/dist/provider.js.map +1 -0
  92. package/dist/providers/anthropic.d.ts +132 -0
  93. package/dist/providers/anthropic.d.ts.map +1 -0
  94. package/dist/providers/anthropic.js +518 -0
  95. package/dist/providers/anthropic.js.map +1 -0
  96. package/dist/providers/base.d.ts +140 -0
  97. package/dist/providers/base.d.ts.map +1 -0
  98. package/dist/providers/base.js +2 -0
  99. package/dist/providers/base.js.map +1 -0
  100. package/dist/providers/deepseek.d.ts +118 -0
  101. package/dist/providers/deepseek.d.ts.map +1 -0
  102. package/dist/providers/deepseek.js +467 -0
  103. package/dist/providers/deepseek.js.map +1 -0
  104. package/dist/registry.d.ts +3 -0
  105. package/dist/registry.d.ts.map +1 -0
  106. package/dist/registry.js +94 -0
  107. package/dist/registry.js.map +1 -0
  108. package/dist/session-store.d.ts +133 -0
  109. package/dist/session-store.d.ts.map +1 -0
  110. package/dist/session-store.js +277 -0
  111. package/dist/session-store.js.map +1 -0
  112. package/dist/skills/curator.d.ts +104 -0
  113. package/dist/skills/curator.d.ts.map +1 -0
  114. package/dist/skills/curator.js +162 -0
  115. package/dist/skills/curator.js.map +1 -0
  116. package/dist/skills/index-builder.d.ts +42 -0
  117. package/dist/skills/index-builder.d.ts.map +1 -0
  118. package/dist/skills/index-builder.js +94 -0
  119. package/dist/skills/index-builder.js.map +1 -0
  120. package/dist/skills/loader.d.ts +107 -0
  121. package/dist/skills/loader.d.ts.map +1 -0
  122. package/dist/skills/loader.js +286 -0
  123. package/dist/skills/loader.js.map +1 -0
  124. package/dist/skills/preprocess.d.ts +45 -0
  125. package/dist/skills/preprocess.d.ts.map +1 -0
  126. package/dist/skills/preprocess.js +126 -0
  127. package/dist/skills/preprocess.js.map +1 -0
  128. package/dist/skills/usage.d.ts +75 -0
  129. package/dist/skills/usage.d.ts.map +1 -0
  130. package/dist/skills/usage.js +147 -0
  131. package/dist/skills/usage.js.map +1 -0
  132. package/dist/state/todos.d.ts +95 -0
  133. package/dist/state/todos.d.ts.map +1 -0
  134. package/dist/state/todos.js +198 -0
  135. package/dist/state/todos.js.map +1 -0
  136. package/dist/storage/conversations.d.ts +28 -0
  137. package/dist/storage/conversations.d.ts.map +1 -0
  138. package/dist/storage/conversations.js +8 -0
  139. package/dist/storage/conversations.js.map +1 -0
  140. package/dist/sub-agent/runner.d.ts +78 -0
  141. package/dist/sub-agent/runner.d.ts.map +1 -0
  142. package/dist/sub-agent/runner.js +215 -0
  143. package/dist/sub-agent/runner.js.map +1 -0
  144. package/dist/tools/builtin/agent.d.ts +33 -0
  145. package/dist/tools/builtin/agent.d.ts.map +1 -0
  146. package/dist/tools/builtin/agent.js +76 -0
  147. package/dist/tools/builtin/agent.js.map +1 -0
  148. package/dist/tools/builtin/bash.d.ts +11 -0
  149. package/dist/tools/builtin/bash.d.ts.map +1 -0
  150. package/dist/tools/builtin/bash.js +91 -0
  151. package/dist/tools/builtin/bash.js.map +1 -0
  152. package/dist/tools/builtin/edit.d.ts +21 -0
  153. package/dist/tools/builtin/edit.d.ts.map +1 -0
  154. package/dist/tools/builtin/edit.js +238 -0
  155. package/dist/tools/builtin/edit.js.map +1 -0
  156. package/dist/tools/builtin/read.d.ts +17 -0
  157. package/dist/tools/builtin/read.d.ts.map +1 -0
  158. package/dist/tools/builtin/read.js +139 -0
  159. package/dist/tools/builtin/read.js.map +1 -0
  160. package/dist/tools/builtin/sandbox.d.ts +16 -0
  161. package/dist/tools/builtin/sandbox.d.ts.map +1 -0
  162. package/dist/tools/builtin/sandbox.js +58 -0
  163. package/dist/tools/builtin/sandbox.js.map +1 -0
  164. package/dist/tools/builtin/skill_view.d.ts +37 -0
  165. package/dist/tools/builtin/skill_view.d.ts.map +1 -0
  166. package/dist/tools/builtin/skill_view.js +82 -0
  167. package/dist/tools/builtin/skill_view.js.map +1 -0
  168. package/dist/tools/builtin/todo_write.d.ts +29 -0
  169. package/dist/tools/builtin/todo_write.d.ts.map +1 -0
  170. package/dist/tools/builtin/todo_write.js +96 -0
  171. package/dist/tools/builtin/todo_write.js.map +1 -0
  172. package/dist/tools/builtin/web_fetch.d.ts +10 -0
  173. package/dist/tools/builtin/web_fetch.d.ts.map +1 -0
  174. package/dist/tools/builtin/web_fetch.js +150 -0
  175. package/dist/tools/builtin/web_fetch.js.map +1 -0
  176. package/dist/tools/builtin/write.d.ts +35 -0
  177. package/dist/tools/builtin/write.d.ts.map +1 -0
  178. package/dist/tools/builtin/write.js +70 -0
  179. package/dist/tools/builtin/write.js.map +1 -0
  180. package/dist/tools/file-state.d.ts +99 -0
  181. package/dist/tools/file-state.d.ts.map +1 -0
  182. package/dist/tools/file-state.js +133 -0
  183. package/dist/tools/file-state.js.map +1 -0
  184. package/dist/tools/hooks/sandbox-fs.d.ts +25 -0
  185. package/dist/tools/hooks/sandbox-fs.d.ts.map +1 -0
  186. package/dist/tools/hooks/sandbox-fs.js +48 -0
  187. package/dist/tools/hooks/sandbox-fs.js.map +1 -0
  188. package/dist/tools/registry.d.ts +102 -0
  189. package/dist/tools/registry.d.ts.map +1 -0
  190. package/dist/tools/registry.js +93 -0
  191. package/dist/tools/registry.js.map +1 -0
  192. package/dist/types.d.ts +109 -0
  193. package/dist/types.d.ts.map +1 -0
  194. package/dist/types.js +20 -0
  195. package/dist/types.js.map +1 -0
  196. package/package.json +72 -0
@@ -0,0 +1,317 @@
1
+ import { compressIfNeeded } from "../memory/compressor.js";
2
+ import { StreamingContextScrubber, scrubString } from "../memory/scrubber.js";
3
+ import { extractFileEvents } from "../media/file-events.js";
4
+ import { logger } from "../platform/logger.js";
5
+ /**
6
+ * Cap applied to the `content` field of `tool_result` UnifiedEvents emitted to
7
+ * the dispatcher. Matches the 200-char ceiling already enforced by
8
+ * claude-provider.ts:373 and codex-provider.ts's `summarizeMcpToolCallResult`.
9
+ * Downstream telegram renderers are sized for that ceiling — letting raw
10
+ * 16KB+ bash payloads or full MCP results through would break their layout
11
+ * assumptions.
12
+ *
13
+ * Critically, this cap applies ONLY to the surfaced UnifiedEvent. The
14
+ * `tool_result` block pushed back into `messages` for the next API turn keeps
15
+ * the full payload, so the model still sees complete tool output — same as
16
+ * claude/codex, where the SDK passes full results to the model and only the
17
+ * UnifiedEvent emit path truncates.
18
+ */
19
+ const TOOL_RESULT_PREVIEW_MAX = 200;
20
+ /**
21
+ * run_conversation — Maestro agent loop (TS port).
22
+ *
23
+ * Yields UnifiedEvents so the Clawgram dispatcher can stream them to telegram
24
+ * without caring about the underlying provider format.
25
+ *
26
+ * Multi-turn: the caller owns the `messages` array and passes it in
27
+ * pre-populated with prior history (loaded from `~/.maestro/sessions/<id>.jsonl`
28
+ * by `maestroProvider`) plus the new user prompt as the last entry. The loop
29
+ * mutates that array in place, appending assistant turns and tool-result
30
+ * user turns as the conversation progresses; once the generator drains, the
31
+ * caller persists the final `messages` back to disk for the next resume.
32
+ *
33
+ * This shape avoids returning the final history through the async iterator
34
+ * (which would either require a special "internal" UnifiedEvent variant or a
35
+ * companion side-channel — both worse than just sharing the array).
36
+ *
37
+ * Upstream reference: `run_agent.py::AIAgent.run_conversation` — same control
38
+ * flow, just `client.chat.completions.create` swapped for `provider.complete`
39
+ * and OpenAI message blocks swapped for Anthropic blocks.
40
+ */
41
+ export async function* runConversation(agent, messages) {
42
+ let iterations = 0;
43
+ const maxIter = agent.config.maxIterations;
44
+ const usageAcc = {
45
+ inputTokens: 0,
46
+ outputTokens: 0,
47
+ cacheCreationInputTokens: 0,
48
+ cacheReadInputTokens: 0,
49
+ };
50
+ while (iterations < maxIter) {
51
+ if (agent.config.abortSignal?.aborted) {
52
+ yield { type: "error", content: "maestro loop aborted" };
53
+ return;
54
+ }
55
+ // Two-stage context shrink before the provider call:
56
+ // 1. compressIfNeeded — runs pruneMessages internally, then if still
57
+ // over 80% of the context window dispatches the aux LLM (cheap
58
+ // haiku) to summarize the middle into the Active Task template.
59
+ // Returns the caller's array as-is when below threshold so the
60
+ // common case is just a token-estimate pass.
61
+ // 2. compressIfNeeded already prunes — no second pruneMessages call.
62
+ //
63
+ // Pure with respect to `messages` (canonical history kept intact for
64
+ // resume); only the on-wire slice is reshaped. Anti-thrashing on the
65
+ // array reference (both in prune.ts and compressor.ts) keeps back-to-
66
+ // back iterations near-zero CPU once the conversation stabilizes.
67
+ //
68
+ // Aux provider is the same Provider instance as the agent's main
69
+ // provider — Anthropic adapter accepts the haiku model id directly,
70
+ // so no second client needed. Fallback inside compressIfNeeded handles
71
+ // aux LLM failure by dropping to prune-only.
72
+ const wireMessages = await compressIfNeeded(messages, {
73
+ auxProvider: agent.provider,
74
+ ...(agent.config.abortSignal ? { abortSignal: agent.config.abortSignal } : {}),
75
+ });
76
+ // Drive the API call via stream() when available so we can emit
77
+ // text_delta UnifiedEvents as the tokens arrive — matches claude/codex
78
+ // progressive typing UX. complete() stays as the fallback for providers
79
+ // that haven't implemented stream() yet (e.g. an early Phase 5 OpenAI
80
+ // adapter could ship stream() in a follow-up).
81
+ const callOpts = {
82
+ model: agent.config.model,
83
+ messages: wireMessages,
84
+ system: agent.config.systemPrompt,
85
+ tools: agent.tools.schemas(),
86
+ maxTokens: agent.config.maxTokens,
87
+ ...(agent.config.thinkingBudget ? { thinkingBudget: agent.config.thinkingBudget } : {}),
88
+ ...(agent.config.effort ? { effort: agent.config.effort } : {}),
89
+ ...(agent.config.abortSignal ? { abortSignal: agent.config.abortSignal } : {}),
90
+ };
91
+ let response;
92
+ let assistantText = "";
93
+ const toolUses = [];
94
+ const assistantBlocks = [];
95
+ if (agent.provider.stream) {
96
+ // Per-tool_use scratch: accumulate the JSON input arriving across
97
+ // multiple `tool_use_input_delta` chunks, then parse on _complete.
98
+ const toolInputBuffer = new Map();
99
+ let streamUsage = { inputTokens: 0, outputTokens: 0 };
100
+ let streamStopReason = "end_turn";
101
+ // Strip any `<compacted-history>...</compacted-history>` fence the
102
+ // model echoes from a prior compaction. The scrubber buffers up to a
103
+ // marker's worth of bytes across chunk boundaries so a split tag
104
+ // (`...<comp` | `acted-history>...`) still matches. See
105
+ // `memory/scrubber.ts` — also used as `scrubString` for the
106
+ // consolidated end-of-turn text below.
107
+ const scrubber = new StreamingContextScrubber();
108
+ for await (const chunk of agent.provider.stream(callOpts)) {
109
+ if (chunk.type === "text_delta") {
110
+ const scrubbed = scrubber.feed(chunk.text);
111
+ assistantText += scrubbed;
112
+ if (scrubbed.length > 0)
113
+ yield { type: "text_delta", content: scrubbed };
114
+ }
115
+ else if (chunk.type === "tool_use_start") {
116
+ toolInputBuffer.set(chunk.id, { name: chunk.name, partial: "" });
117
+ }
118
+ else if (chunk.type === "tool_use_input_delta") {
119
+ const buf = toolInputBuffer.get(chunk.id);
120
+ if (buf)
121
+ buf.partial += chunk.partial_json;
122
+ }
123
+ else if (chunk.type === "tool_use_complete") {
124
+ const buf = toolInputBuffer.get(chunk.id);
125
+ if (!buf)
126
+ continue;
127
+ let input = {};
128
+ if (buf.partial.length > 0) {
129
+ try {
130
+ input = JSON.parse(buf.partial);
131
+ }
132
+ catch (e) {
133
+ logger.warn({ err: e, toolName: chunk.name, raw: buf.partial.slice(0, 200) }, "maestro stream: tool_use input_json parse failed — using empty input");
134
+ }
135
+ }
136
+ toolUses.push({ id: chunk.id, name: chunk.name, input });
137
+ assistantBlocks.push({ type: "tool_use", id: chunk.id, name: chunk.name, input });
138
+ yield { type: "tool_use", name: chunk.name, input };
139
+ toolInputBuffer.delete(chunk.id);
140
+ }
141
+ else if (chunk.type === "thinking_complete") {
142
+ assistantBlocks.push(chunk.block);
143
+ }
144
+ else if (chunk.type === "message_complete") {
145
+ streamUsage = chunk.usage;
146
+ streamStopReason = chunk.stopReason;
147
+ }
148
+ }
149
+ // Flush any bytes the scrubber was holding (matching-open buffer that
150
+ // turned out not to be a real marker). `finish()` is also where an
151
+ // unclosed `<compacted-history>` block gets silently dropped.
152
+ const tail = scrubber.finish();
153
+ if (tail.length > 0) {
154
+ assistantText += tail;
155
+ yield { type: "text_delta", content: tail };
156
+ }
157
+ // Reconstruct the text block(s) once at the end — the loop only
158
+ // needs a single concatenated block to push back into history, which
159
+ // matches what Anthropic's non-streaming response would have given us.
160
+ if (assistantText.length > 0) {
161
+ assistantBlocks.unshift({ type: "text", text: assistantText });
162
+ }
163
+ response = { content: assistantBlocks, stopReason: streamStopReason, usage: streamUsage };
164
+ }
165
+ else {
166
+ response = await agent.provider.complete(callOpts);
167
+ // Walk the assistant's content blocks once: emit text/tool_use events
168
+ // to the caller, build the assistant-turn message for the next
169
+ // iteration, and collect tool_use blocks that need dispatching.
170
+ for (const block of response.content) {
171
+ if (block.type === "text") {
172
+ // Non-streaming path: scrub the whole block at once. Mirrors the
173
+ // streaming scrubber so consumers see the same shape regardless
174
+ // of which provider mode produced the response.
175
+ const cleaned = scrubString(block.text);
176
+ assistantText += cleaned;
177
+ if (cleaned.length > 0) {
178
+ assistantBlocks.push({ type: "text", text: cleaned });
179
+ }
180
+ }
181
+ else if (block.type === "tool_use") {
182
+ toolUses.push({ id: block.id, name: block.name, input: block.input });
183
+ assistantBlocks.push(block);
184
+ yield { type: "tool_use", name: block.name, input: block.input };
185
+ }
186
+ else if (block.type === "thinking" || block.type === "redacted_thinking") {
187
+ assistantBlocks.push(block);
188
+ }
189
+ }
190
+ }
191
+ usageAcc.inputTokens += response.usage.inputTokens;
192
+ usageAcc.outputTokens += response.usage.outputTokens;
193
+ usageAcc.cacheCreationInputTokens += response.usage.cacheCreationInputTokens ?? 0;
194
+ usageAcc.cacheReadInputTokens += response.usage.cacheReadInputTokens ?? 0;
195
+ if (assistantText.length > 0) {
196
+ // Streaming emitted text_delta chunks during the run; this terminal
197
+ // `text` event is the consolidated assistant turn so non-streaming
198
+ // consumers (recorders, log archives) still see one canonical entry
199
+ // per turn — same shape claude-provider.ts surfaces.
200
+ yield { type: "text", content: assistantText };
201
+ // Surface [FILE:/abs/path] tags emitted mid-turn (e.g. assistant
202
+ // narrating a file before calling a tool) so the dispatcher sends them
203
+ // immediately, matching codex-provider.ts's agent_message extract.
204
+ yield* extractFileEvents(assistantText, "text");
205
+ }
206
+ // Persist the assistant turn into the shared history before we either
207
+ // exit (so the next resume sees it) or run tools and continue. Doing
208
+ // this even for the no-tool exit keeps the caller's persistence call
209
+ // schema-consistent: every successful provider.complete() lands in the
210
+ // history exactly once.
211
+ messages.push({ role: "assistant", content: assistantBlocks });
212
+ if (toolUses.length === 0) {
213
+ // No more tools — turn complete.
214
+ yield {
215
+ type: "result",
216
+ content: assistantText,
217
+ stopReason: response.stopReason,
218
+ usage: {
219
+ inputTokens: usageAcc.inputTokens,
220
+ outputTokens: usageAcc.outputTokens,
221
+ ...(usageAcc.cacheCreationInputTokens > 0 && {
222
+ cacheCreationInputTokens: usageAcc.cacheCreationInputTokens,
223
+ }),
224
+ ...(usageAcc.cacheReadInputTokens > 0 && {
225
+ cacheReadInputTokens: usageAcc.cacheReadInputTokens,
226
+ }),
227
+ },
228
+ };
229
+ // Final pass on the result text — matches claude-provider.ts:352 and
230
+ // codex-provider.ts's turn.completed extract so [FILE:...] tags in the
231
+ // final assistant message reach the send-file path.
232
+ yield* extractFileEvents(assistantText, "result");
233
+ return;
234
+ }
235
+ // Dispatch tools in two phases so independent reads / fetches run in
236
+ // parallel while side-effecting calls (Write/Edit/Bash/most MCP) stay
237
+ // sequential:
238
+ // Phase A — every tool whose handler is `parallelSafe: true` runs via
239
+ // Promise.all. dispatch() never throws (errors are wrapped as
240
+ // {error: ...} strings) so the batch always settles.
241
+ // Phase B — remaining tools run one-by-one in their original order so
242
+ // write/edit ordering is deterministic and unrelated bash
243
+ // invocations don't race on ports/files/env.
244
+ //
245
+ // `results` is indexed by the position in `toolUses` so the final yield
246
+ // + push order matches what the model emitted, regardless of completion
247
+ // order. Anthropic requires `tool_result` blocks in one user turn to
248
+ // align with their corresponding `tool_use` ids; preserving the order
249
+ // also keeps the conversation log easier to read.
250
+ const results = new Array(toolUses.length);
251
+ const parallelIndices = [];
252
+ const serialIndices = [];
253
+ for (let i = 0; i < toolUses.length; i++) {
254
+ if (agent.tools.isParallelSafe(toolUses[i].name)) {
255
+ parallelIndices.push(i);
256
+ }
257
+ else {
258
+ serialIndices.push(i);
259
+ }
260
+ }
261
+ if (parallelIndices.length > 0) {
262
+ const parallelResults = await Promise.all(parallelIndices.map((i) => agent.tools.dispatch(toolUses[i].name, toolUses[i].input)));
263
+ for (let k = 0; k < parallelIndices.length; k++) {
264
+ results[parallelIndices[k]] = parallelResults[k];
265
+ }
266
+ }
267
+ for (const i of serialIndices) {
268
+ results[i] = await agent.tools.dispatch(toolUses[i].name, toolUses[i].input);
269
+ }
270
+ // Cap the surfaced UnifiedEvent `content` at TOOL_RESULT_PREVIEW_MAX to
271
+ // match claude/codex, but push the FULL `result` into `toolResultBlocks`
272
+ // so the model sees complete tool output on the next turn — claude/codex
273
+ // do the same (SDK feeds full payload to model, UnifiedEvent emit is the
274
+ // only place truncation happens).
275
+ const toolResultBlocks = [];
276
+ for (let i = 0; i < toolUses.length; i++) {
277
+ const tu = toolUses[i];
278
+ const result = results[i];
279
+ const preview = result.length > TOOL_RESULT_PREVIEW_MAX ? result.slice(0, TOOL_RESULT_PREVIEW_MAX) : result;
280
+ yield { type: "tool_result", toolUseId: tu.id, content: preview };
281
+ toolResultBlocks.push({
282
+ type: "tool_result",
283
+ tool_use_id: tu.id,
284
+ content: result,
285
+ });
286
+ }
287
+ // Append a fresh `<system-reminder>` text block AFTER the tool_result
288
+ // blocks so the model's next turn sees an up-to-date "iterations
289
+ // remaining" line. Budget = `maxIter - (iterations + 1)` because we
290
+ // haven't bumped `iterations` for this turn yet — the value reflects
291
+ // what the model will have AFTER consuming this turn.
292
+ //
293
+ // Anthropic accepts mixed tool_result+text blocks in a single user
294
+ // message; the trailing text block reads as meta annotation rather
295
+ // than user intent (claude/codex use the same shape).
296
+ //
297
+ // Freezing the reminder into `messages` (rather than re-injecting at
298
+ // wire time each iteration) keeps prefix-cache hits intact: turn N's
299
+ // reminder is byte-stable across every subsequent call, so the cache
300
+ // boundary moves forward one turn at a time instead of invalidating
301
+ // on every API hit.
302
+ if (agent.config.buildIterReminder) {
303
+ const remaining = Math.max(0, maxIter - (iterations + 1));
304
+ const reminderText = agent.config.buildIterReminder(remaining);
305
+ if (reminderText && reminderText.length > 0) {
306
+ toolResultBlocks.push({ type: "text", text: reminderText });
307
+ }
308
+ }
309
+ messages.push({ role: "user", content: toolResultBlocks });
310
+ iterations++;
311
+ }
312
+ yield {
313
+ type: "error",
314
+ content: `maestro loop hit max_iterations (${maxIter}) without resolving`,
315
+ };
316
+ }
317
+ //# sourceMappingURL=loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/core/loop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * maestro-agent-sdk — public API.
3
+ *
4
+ * Provider-agnostic agent loop with built-in tools, skills, memory, and MCP.
5
+ * See README.md for a quick start.
6
+ *
7
+ * Originally derived from Nous Research's hermes-agent (MIT); see NOTICE.
8
+ */
9
+ export declare const MAESTRO_SDK_VERSION: "0.1.0";
10
+ export declare const MAESTRO_UPSTREAM_SNAPSHOT: "v0.13.0 (2026-05-07)";
11
+ export { AIAgent, type AIAgentConfig } from "./core/agent.js";
12
+ export { runConversation } from "./core/loop.js";
13
+ export { ToolRegistry, type ToolHandler, type HookRegistration, type PreToolUseHook, type PostToolUseHook, type PreToolUseContext, type PreToolUseDecision, type PostToolUseContext, type PostToolUseResult, } from "./tools/registry.js";
14
+ export { bashTool } from "./tools/builtin/bash.js";
15
+ export { createReadTool } from "./tools/builtin/read.js";
16
+ export { createWriteTool } from "./tools/builtin/write.js";
17
+ export { createEditTool } from "./tools/builtin/edit.js";
18
+ export { createTodoWriteTool } from "./tools/builtin/todo_write.js";
19
+ export { createSkillViewTool } from "./tools/builtin/skill_view.js";
20
+ export { createAgentTool } from "./tools/builtin/agent.js";
21
+ export { isSandboxEnabled, checkFilesystemAccess } from "./tools/builtin/sandbox.js";
22
+ export { createSandboxFsHook } from "./tools/hooks/sandbox-fs.js";
23
+ export { getFileStateTracker, dropFileStateTracker } from "./tools/file-state.js";
24
+ export type { Provider, ProviderToolSchema, ProviderMessage, ProviderContentBlock, ProviderResponse, ProviderStreamChunk, ProviderCompleteOptions, } from "./providers/base.js";
25
+ export { AnthropicProvider, effortToThinkingBudget, effortToMaxIter, applyThinkingBudget, buildCacheableSystem, buildCacheableTools, buildCacheableMessages, } from "./providers/anthropic.js";
26
+ export { DeepseekProvider, effortForDeepseek, translateToolsToOpenAI, translateMessagesToOpenAI, } from "./providers/deepseek.js";
27
+ export { maestroRegistry } from "./registry.js";
28
+ export { maestroProvider, providerForModel, isAbortError, iterationBudgetLine } from "./provider.js";
29
+ export { loadSkillsCached, findSkillByName, type SkillEntry } from "./skills/loader.js";
30
+ export { buildSkillsIndex } from "./skills/index-builder.js";
31
+ export { curateSkills } from "./skills/curator.js";
32
+ export { loadUsage, bumpView, type SkillCounters } from "./skills/usage.js";
33
+ export { compressIfNeeded } from "./memory/compressor.js";
34
+ export { estimateTokens } from "./memory/token-estimate.js";
35
+ export { buildSystemReminder } from "./memory/reminder.js";
36
+ export { hashToolContent } from "./memory/hash.js";
37
+ export { ACTIVE_TASK_TEMPLATE, wrapCompactedSummary } from "./memory/active-task-template.js";
38
+ export { getTodoStore, dropTodoStore } from "./state/todos.js";
39
+ export type { MaestroMcpServerSpec, MaestroMcpClient, MaestroMcpTool } from "./mcp/client.js";
40
+ export { deleteMaestroSession } from "./session-store.js";
41
+ export { setLogger, type Logger, type LogFn } from "./platform/logger.js";
42
+ export { onShutdown, runShutdown } from "./platform/lifecycle.js";
43
+ export { setMcpResolver, type McpResolver, type McpServerMap } from "./platform/mcp-config.js";
44
+ export { setConversationReader, type ConversationReader } from "./storage/conversations.js";
45
+ export type { TokenUsage, EffortLevel, AgentKind, AgentQueryOptions, UnifiedEvent, } from "./types.js";
46
+ export { MAESTRO_EFFORT_VALUES, SUPPORTED_AGENTS, FALLBACK_AGENT, isAgentKind, } from "./types.js";
47
+ export type { ConversationEntry } from "./storage/conversations.js";
48
+ export type { AgentRegistry, WriteRolloutOptions, WriteRolloutResult, ForkRegistryOptions, ForkRegistryResult, CleanupRolloutsOptions, } from "./agents/contracts.js";
49
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,53 @@
1
+ /**
2
+ * maestro-agent-sdk — public API.
3
+ *
4
+ * Provider-agnostic agent loop with built-in tools, skills, memory, and MCP.
5
+ * See README.md for a quick start.
6
+ *
7
+ * Originally derived from Nous Research's hermes-agent (MIT); see NOTICE.
8
+ */
9
+ export const MAESTRO_SDK_VERSION = "0.1.0";
10
+ export const MAESTRO_UPSTREAM_SNAPSHOT = "v0.13.0 (2026-05-07)";
11
+ // ─── Core agent loop ─────────────────────────────────────────────────────────
12
+ export { AIAgent } from "./core/agent.js";
13
+ export { runConversation } from "./core/loop.js";
14
+ // ─── Tool registry + hook surface ────────────────────────────────────────────
15
+ export { ToolRegistry, } from "./tools/registry.js";
16
+ // ─── Built-in tools ──────────────────────────────────────────────────────────
17
+ export { bashTool } from "./tools/builtin/bash.js";
18
+ export { createReadTool } from "./tools/builtin/read.js";
19
+ export { createWriteTool } from "./tools/builtin/write.js";
20
+ export { createEditTool } from "./tools/builtin/edit.js";
21
+ export { createTodoWriteTool } from "./tools/builtin/todo_write.js";
22
+ export { createSkillViewTool } from "./tools/builtin/skill_view.js";
23
+ export { createAgentTool } from "./tools/builtin/agent.js";
24
+ export { isSandboxEnabled, checkFilesystemAccess } from "./tools/builtin/sandbox.js";
25
+ export { createSandboxFsHook } from "./tools/hooks/sandbox-fs.js";
26
+ export { getFileStateTracker, dropFileStateTracker } from "./tools/file-state.js";
27
+ export { AnthropicProvider, effortToThinkingBudget, effortToMaxIter, applyThinkingBudget, buildCacheableSystem, buildCacheableTools, buildCacheableMessages, } from "./providers/anthropic.js";
28
+ export { DeepseekProvider, effortForDeepseek, translateToolsToOpenAI, translateMessagesToOpenAI, } from "./providers/deepseek.js";
29
+ // ─── Maestro registry + top-level provider entry point ───────────────────────
30
+ export { maestroRegistry } from "./registry.js";
31
+ export { maestroProvider, providerForModel, isAbortError, iterationBudgetLine } from "./provider.js";
32
+ // ─── Skills ──────────────────────────────────────────────────────────────────
33
+ export { loadSkillsCached, findSkillByName } from "./skills/loader.js";
34
+ export { buildSkillsIndex } from "./skills/index-builder.js";
35
+ export { curateSkills } from "./skills/curator.js";
36
+ export { loadUsage, bumpView } from "./skills/usage.js";
37
+ // ─── Memory / compression ────────────────────────────────────────────────────
38
+ export { compressIfNeeded } from "./memory/compressor.js";
39
+ export { estimateTokens } from "./memory/token-estimate.js";
40
+ export { buildSystemReminder } from "./memory/reminder.js";
41
+ export { hashToolContent } from "./memory/hash.js";
42
+ export { ACTIVE_TASK_TEMPLATE, wrapCompactedSummary } from "./memory/active-task-template.js";
43
+ // ─── State (todos) ───────────────────────────────────────────────────────────
44
+ export { getTodoStore, dropTodoStore } from "./state/todos.js";
45
+ // ─── Session store ───────────────────────────────────────────────────────────
46
+ export { deleteMaestroSession } from "./session-store.js";
47
+ // ─── Host integration points (dependency injection) ──────────────────────────
48
+ export { setLogger } from "./platform/logger.js";
49
+ export { onShutdown, runShutdown } from "./platform/lifecycle.js";
50
+ export { setMcpResolver } from "./platform/mcp-config.js";
51
+ export { setConversationReader } from "./storage/conversations.js";
52
+ export { MAESTRO_EFFORT_VALUES, SUPPORTED_AGENTS, FALLBACK_AGENT, isAgentKind, } from "./types.js";
53
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,OAAgB,CAAC;AACpD,MAAM,CAAC,MAAM,yBAAyB,GAAG,sBAA+B,CAAC;AAEzE,gFAAgF;AAChF,OAAO,EAAE,OAAO,EAAsB,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,gFAAgF;AAChF,OAAO,EACL,YAAY,GASb,MAAM,kBAAkB,CAAC;AAE1B,gFAAgF;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAa/E,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAE9B,gFAAgF;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAElG,gFAAgF;AAChF,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAmB,MAAM,iBAAiB,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAsB,MAAM,gBAAgB,CAAC;AAEzE,gFAAgF;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAE3F,gFAAgF;AAChF,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAK5D,gFAAgF;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,gFAAgF;AAChF,OAAO,EAAE,SAAS,EAA2B,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAuC,MAAM,uBAAuB,CAAC;AAC5F,OAAO,EAAE,qBAAqB,EAA2B,MAAM,yBAAyB,CAAC;AAUzF,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,cAAc,EACd,WAAW,GACZ,MAAM,SAAS,CAAC"}
@@ -0,0 +1,79 @@
1
+ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
2
+ import type { Transport } from "@modelcontextprotocol/sdk/shared/transport.js";
3
+ import type { ProviderToolSchema } from "../providers/base.js";
4
+ /**
5
+ * Maestro MCP client wrapper.
6
+ *
7
+ * Wraps `@modelcontextprotocol/sdk` Client so the Maestro loop can spawn /
8
+ * connect / list_tools / call_tool / close in a single namespace, mirroring
9
+ * what `@anthropic-ai/claude-agent-sdk` and `@openai/codex-sdk` do internally
10
+ * for the claude / codex providers.
11
+ *
12
+ * Unlike claude/codex, Maestro hits Anthropic's Messages API directly via
13
+ * fetch (see `providers/anthropic.ts`) — no SDK manages MCP for us, so we
14
+ * spawn the servers ourselves and surface their tools through Maestro's
15
+ * existing `ToolRegistry`.
16
+ */
17
+ /** Raw spawn shape — matches `getMcpServersForQuery()` output (Claude-SDK shape). */
18
+ export interface MaestroMcpServerSpec {
19
+ /** stdio servers. */
20
+ command?: string;
21
+ args?: string[];
22
+ env?: Record<string, string>;
23
+ /** sse servers. */
24
+ type?: "sse";
25
+ url?: string;
26
+ }
27
+ /** One tool resolved from an MCP server, ready to register with a ToolRegistry. */
28
+ export interface MaestroMcpTool {
29
+ /** Name exposed to the model (`mcp__<server>__<tool>`). */
30
+ publicName: string;
31
+ /** Original MCP tool name — used in `client.callTool`. */
32
+ originalName: string;
33
+ /** Owning MCP server name. */
34
+ serverName: string;
35
+ /** Anthropic-style tool schema for the API `tools` array. */
36
+ schema: ProviderToolSchema;
37
+ }
38
+ export declare class MaestroMcpClient {
39
+ readonly name: string;
40
+ private readonly spec;
41
+ /**
42
+ * Test-only override: when supplied, `start()` connects to this transport
43
+ * instead of building one from `spec`. Production callers pass two args.
44
+ */
45
+ private readonly transportOverride?;
46
+ readonly client: Client;
47
+ private transport?;
48
+ private started;
49
+ constructor(name: string, spec: MaestroMcpServerSpec,
50
+ /**
51
+ * Test-only override: when supplied, `start()` connects to this transport
52
+ * instead of building one from `spec`. Production callers pass two args.
53
+ */
54
+ transportOverride?: Transport | undefined);
55
+ start(): Promise<void>;
56
+ /** Fetch `tools/list` and convert to Maestro/Anthropic shape with prefixed names. */
57
+ listTools(): Promise<MaestroMcpTool[]>;
58
+ /**
59
+ * Invoke an MCP tool. Returns the FULL rendered payload string for the
60
+ * Maestro tool_result block — the model needs to see complete tool output on
61
+ * the next turn, matching how claude/codex SDKs feed full payloads back.
62
+ * The 200-char cap that claude-provider.ts:373 and codex-provider.ts apply
63
+ * is a UnifiedEvent display concern only; Maestro enforces it inside the
64
+ * agent loop (`loop.ts:TOOL_RESULT_PREVIEW_MAX`) at the emit site, not here.
65
+ *
66
+ * Optional `abortSignal` propagates the Maestro-level abort down into the
67
+ * SDK's JSON-RPC request, so an in-flight `tools/call` is cancelled instead
68
+ * of left blocking on a dead server.
69
+ */
70
+ callTool(originalName: string, input: Record<string, unknown>, abortSignal?: AbortSignal): Promise<string>;
71
+ close(): Promise<void>;
72
+ private buildTransport;
73
+ }
74
+ /**
75
+ * Public MCP tool name. Mirrors Claude SDK's `mcp__<server>__<tool>` convention
76
+ * so the model sees consistent names across providers in the same topic.
77
+ */
78
+ export declare function makePublicName(server: string, tool: string): string;
79
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAGnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAC/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAG3D;;;;;;;;;;;;GAYG;AAEH,qFAAqF;AACrF,MAAM,WAAW,oBAAoB;IACnC,qBAAqB;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,mBAAmB;IACnB,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,mFAAmF;AACnF,MAAM,WAAW,cAAc;IAC7B,2DAA2D;IAC3D,UAAU,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,YAAY,EAAE,MAAM,CAAC;IACrB,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,MAAM,EAAE,kBAAkB,CAAC;CAC5B;AAED,qBAAa,gBAAgB;IAMzB,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAXrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,SAAS,CAAC,CAAY;IAC9B,OAAO,CAAC,OAAO,CAAS;gBAGb,IAAI,EAAE,MAAM,EACJ,IAAI,EAAE,oBAAoB;IAC3C;;;OAGG;IACc,iBAAiB,CAAC,EAAE,SAAS,YAAA;IAK1C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B,qFAAqF;IAC/E,SAAS,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAsB5C;;;;;;;;;;;OAWG;IACG,QAAQ,CACZ,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,MAAM,CAAC;IASZ,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5B,OAAO,CAAC,cAAc;CAwBvB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnE"}