@poping/yome 0.0.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 (156) hide show
  1. package/README.md +54 -0
  2. package/bin/yome.js +2 -0
  3. package/dist/agent.d.ts +43 -0
  4. package/dist/agent.js +140 -0
  5. package/dist/agent.js.map +1 -0
  6. package/dist/config.d.ts +41 -0
  7. package/dist/config.js +108 -0
  8. package/dist/config.js.map +1 -0
  9. package/dist/context.d.ts +1 -0
  10. package/dist/context.js +101 -0
  11. package/dist/context.js.map +1 -0
  12. package/dist/index.d.ts +1 -0
  13. package/dist/index.js +65 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/llm.d.ts +13 -0
  16. package/dist/llm.js +317 -0
  17. package/dist/llm.js.map +1 -0
  18. package/dist/loops/chain.d.ts +15 -0
  19. package/dist/loops/chain.js +105 -0
  20. package/dist/loops/chain.js.map +1 -0
  21. package/dist/loops/evaluator.d.ts +12 -0
  22. package/dist/loops/evaluator.js +100 -0
  23. package/dist/loops/evaluator.js.map +1 -0
  24. package/dist/loops/index.d.ts +12 -0
  25. package/dist/loops/index.js +39 -0
  26. package/dist/loops/index.js.map +1 -0
  27. package/dist/loops/orchestrator.d.ts +13 -0
  28. package/dist/loops/orchestrator.js +107 -0
  29. package/dist/loops/orchestrator.js.map +1 -0
  30. package/dist/loops/parallel.d.ts +6 -0
  31. package/dist/loops/parallel.js +48 -0
  32. package/dist/loops/parallel.js.map +1 -0
  33. package/dist/loops/route.d.ts +13 -0
  34. package/dist/loops/route.js +88 -0
  35. package/dist/loops/route.js.map +1 -0
  36. package/dist/loops/simple.d.ts +6 -0
  37. package/dist/loops/simple.js +46 -0
  38. package/dist/loops/simple.js.map +1 -0
  39. package/dist/loops/types.d.ts +32 -0
  40. package/dist/loops/types.js +9 -0
  41. package/dist/loops/types.js.map +1 -0
  42. package/dist/permissions/checker.d.ts +18 -0
  43. package/dist/permissions/checker.js +89 -0
  44. package/dist/permissions/checker.js.map +1 -0
  45. package/dist/permissions/index.d.ts +4 -0
  46. package/dist/permissions/index.js +4 -0
  47. package/dist/permissions/index.js.map +1 -0
  48. package/dist/permissions/loader.d.ts +22 -0
  49. package/dist/permissions/loader.js +104 -0
  50. package/dist/permissions/loader.js.map +1 -0
  51. package/dist/permissions/ruleParser.d.ts +23 -0
  52. package/dist/permissions/ruleParser.js +59 -0
  53. package/dist/permissions/ruleParser.js.map +1 -0
  54. package/dist/permissions/types.d.ts +37 -0
  55. package/dist/permissions/types.js +2 -0
  56. package/dist/permissions/types.js.map +1 -0
  57. package/dist/sessions.d.ts +20 -0
  58. package/dist/sessions.js +119 -0
  59. package/dist/sessions.js.map +1 -0
  60. package/dist/skills/index.d.ts +2 -0
  61. package/dist/skills/index.js +2 -0
  62. package/dist/skills/index.js.map +1 -0
  63. package/dist/skills/loader.d.ts +4 -0
  64. package/dist/skills/loader.js +125 -0
  65. package/dist/skills/loader.js.map +1 -0
  66. package/dist/skills/types.d.ts +22 -0
  67. package/dist/skills/types.js +2 -0
  68. package/dist/skills/types.js.map +1 -0
  69. package/dist/subagent/agentTool.d.ts +7 -0
  70. package/dist/subagent/agentTool.js +121 -0
  71. package/dist/subagent/agentTool.js.map +1 -0
  72. package/dist/subagent/builtinAgents.d.ts +3 -0
  73. package/dist/subagent/builtinAgents.js +23 -0
  74. package/dist/subagent/builtinAgents.js.map +1 -0
  75. package/dist/subagent/index.d.ts +6 -0
  76. package/dist/subagent/index.js +5 -0
  77. package/dist/subagent/index.js.map +1 -0
  78. package/dist/subagent/loadAgents.d.ts +2 -0
  79. package/dist/subagent/loadAgents.js +98 -0
  80. package/dist/subagent/loadAgents.js.map +1 -0
  81. package/dist/subagent/runAgent.d.ts +18 -0
  82. package/dist/subagent/runAgent.js +115 -0
  83. package/dist/subagent/runAgent.js.map +1 -0
  84. package/dist/subagent/types.d.ts +20 -0
  85. package/dist/subagent/types.js +2 -0
  86. package/dist/subagent/types.js.map +1 -0
  87. package/dist/toggleState.d.ts +6 -0
  88. package/dist/toggleState.js +58 -0
  89. package/dist/toggleState.js.map +1 -0
  90. package/dist/tools/bash.d.ts +2 -0
  91. package/dist/tools/bash.js +78 -0
  92. package/dist/tools/bash.js.map +1 -0
  93. package/dist/tools/edit.d.ts +2 -0
  94. package/dist/tools/edit.js +103 -0
  95. package/dist/tools/edit.js.map +1 -0
  96. package/dist/tools/glob.d.ts +2 -0
  97. package/dist/tools/glob.js +44 -0
  98. package/dist/tools/glob.js.map +1 -0
  99. package/dist/tools/grep.d.ts +2 -0
  100. package/dist/tools/grep.js +89 -0
  101. package/dist/tools/grep.js.map +1 -0
  102. package/dist/tools/index.d.ts +15 -0
  103. package/dist/tools/index.js +99 -0
  104. package/dist/tools/index.js.map +1 -0
  105. package/dist/tools/ls.d.ts +2 -0
  106. package/dist/tools/ls.js +47 -0
  107. package/dist/tools/ls.js.map +1 -0
  108. package/dist/tools/read.d.ts +2 -0
  109. package/dist/tools/read.js +52 -0
  110. package/dist/tools/read.js.map +1 -0
  111. package/dist/tools/write.d.ts +2 -0
  112. package/dist/tools/write.js +46 -0
  113. package/dist/tools/write.js.map +1 -0
  114. package/dist/types.d.ts +82 -0
  115. package/dist/types.js +13 -0
  116. package/dist/types.js.map +1 -0
  117. package/dist/ui/AgentPicker.d.ts +12 -0
  118. package/dist/ui/AgentPicker.js +32 -0
  119. package/dist/ui/AgentPicker.js.map +1 -0
  120. package/dist/ui/App.d.ts +6 -0
  121. package/dist/ui/App.js +327 -0
  122. package/dist/ui/App.js.map +1 -0
  123. package/dist/ui/Banner.d.ts +1 -0
  124. package/dist/ui/Banner.js +14 -0
  125. package/dist/ui/Banner.js.map +1 -0
  126. package/dist/ui/InputBar.d.ts +17 -0
  127. package/dist/ui/InputBar.js +93 -0
  128. package/dist/ui/InputBar.js.map +1 -0
  129. package/dist/ui/Markdown.d.ts +4 -0
  130. package/dist/ui/Markdown.js +97 -0
  131. package/dist/ui/Markdown.js.map +1 -0
  132. package/dist/ui/MessageList.d.ts +17 -0
  133. package/dist/ui/MessageList.js +50 -0
  134. package/dist/ui/MessageList.js.map +1 -0
  135. package/dist/ui/ModelPicker.d.ts +9 -0
  136. package/dist/ui/ModelPicker.js +70 -0
  137. package/dist/ui/ModelPicker.js.map +1 -0
  138. package/dist/ui/PermissionPrompt.d.ts +10 -0
  139. package/dist/ui/PermissionPrompt.js +37 -0
  140. package/dist/ui/PermissionPrompt.js.map +1 -0
  141. package/dist/ui/SessionPicker.d.ts +8 -0
  142. package/dist/ui/SessionPicker.js +64 -0
  143. package/dist/ui/SessionPicker.js.map +1 -0
  144. package/dist/ui/Spinner.d.ts +3 -0
  145. package/dist/ui/Spinner.js +15 -0
  146. package/dist/ui/Spinner.js.map +1 -0
  147. package/dist/ui/TogglePicker.d.ts +16 -0
  148. package/dist/ui/TogglePicker.js +35 -0
  149. package/dist/ui/TogglePicker.js.map +1 -0
  150. package/dist/ui/ToolResult.d.ts +6 -0
  151. package/dist/ui/ToolResult.js +59 -0
  152. package/dist/ui/ToolResult.js.map +1 -0
  153. package/dist/utils/imagePaste.d.ts +12 -0
  154. package/dist/utils/imagePaste.js +54 -0
  155. package/dist/utils/imagePaste.js.map +1 -0
  156. package/package.json +44 -0
package/dist/llm.js ADDED
@@ -0,0 +1,317 @@
1
+ const MAX_RETRIES = 3;
2
+ const RETRY_DELAYS = [1000, 3000, 8000];
3
+ async function fetchWithRetry(url, init, retries = MAX_RETRIES) {
4
+ for (let attempt = 0; attempt <= retries; attempt++) {
5
+ const response = await fetch(url, init);
6
+ if (response.ok)
7
+ return response;
8
+ const status = response.status;
9
+ const isRetryable = status === 429 || status === 500 || status === 502 || status === 503;
10
+ if (!isRetryable || attempt === retries) {
11
+ const error = await response.text();
12
+ throw new Error(`API error ${status}: ${error}`);
13
+ }
14
+ // Respect Retry-After header or use exponential backoff
15
+ const retryAfter = response.headers.get('retry-after');
16
+ const delay = retryAfter
17
+ ? parseInt(retryAfter, 10) * 1000
18
+ : RETRY_DELAYS[attempt] ?? 8000;
19
+ await new Promise((r) => setTimeout(r, delay));
20
+ }
21
+ throw new Error('Unreachable');
22
+ }
23
+ // ── OpenAI-compatible format conversion ──
24
+ function toOpenAITools(tools) {
25
+ return tools.map((t) => ({
26
+ type: 'function',
27
+ function: { name: t.name, description: t.description, parameters: t.input_schema },
28
+ }));
29
+ }
30
+ function toOpenAIMessages(systemPrompt, messages) {
31
+ const result = [{ role: 'system', content: systemPrompt }];
32
+ for (const msg of messages) {
33
+ if (typeof msg.content === 'string') {
34
+ result.push({ role: msg.role, content: msg.content });
35
+ continue;
36
+ }
37
+ if (msg.role === 'assistant') {
38
+ const textParts = msg.content.filter((b) => b.type === 'text').map((b) => b.text);
39
+ const toolCalls = msg.content
40
+ .filter((b) => b.type === 'tool_use')
41
+ .map((b) => ({
42
+ id: b.id,
43
+ type: 'function',
44
+ function: { name: b.name, arguments: JSON.stringify(b.input) },
45
+ }));
46
+ const entry = { role: 'assistant' };
47
+ entry.content = textParts.length > 0 ? textParts.join('\n') : null;
48
+ if (toolCalls.length > 0)
49
+ entry.tool_calls = toolCalls;
50
+ result.push(entry);
51
+ }
52
+ else {
53
+ const toolResults = msg.content.filter((b) => b.type === 'tool_result');
54
+ if (toolResults.length > 0) {
55
+ for (const tr of toolResults) {
56
+ result.push({
57
+ role: 'tool',
58
+ tool_call_id: tr.tool_use_id,
59
+ content: typeof tr.content === 'string'
60
+ ? tr.content
61
+ : JSON.stringify(tr.content),
62
+ });
63
+ }
64
+ }
65
+ else {
66
+ const textParts = msg.content.filter((b) => b.type === 'text').map((b) => b.text);
67
+ const imageParts = msg.content.filter((b) => b.type === 'image');
68
+ if (imageParts.length > 0) {
69
+ const parts = [];
70
+ for (const img of imageParts) {
71
+ const src = img.source;
72
+ parts.push({
73
+ type: 'image_url',
74
+ image_url: { url: `data:${src.media_type};base64,${src.data}` },
75
+ });
76
+ }
77
+ if (textParts.length > 0) {
78
+ parts.push({ type: 'text', text: textParts.join('\n') });
79
+ }
80
+ result.push({ role: 'user', content: parts });
81
+ }
82
+ else {
83
+ result.push({ role: 'user', content: textParts.join('\n') || '' });
84
+ }
85
+ }
86
+ }
87
+ }
88
+ return result;
89
+ }
90
+ // ── OpenAI stream parser ──
91
+ async function callOpenAIStream(config, systemPrompt, messages, tools, onEvent) {
92
+ const body = {
93
+ model: config.model ?? 'qwen-plus',
94
+ max_tokens: 8192,
95
+ stream: true,
96
+ messages: toOpenAIMessages(systemPrompt, messages),
97
+ };
98
+ if (tools.length > 0)
99
+ body.tools = toOpenAITools(tools);
100
+ const response = await fetchWithRetry(`${config.baseUrl}/chat/completions`, {
101
+ method: 'POST',
102
+ headers: {
103
+ 'Content-Type': 'application/json',
104
+ 'Authorization': `Bearer ${config.apiKey}`,
105
+ },
106
+ body: JSON.stringify(body),
107
+ });
108
+ let textContent = '';
109
+ const toolCalls = new Map();
110
+ let inputTokens = 0;
111
+ let outputTokens = 0;
112
+ const reader = response.body.getReader();
113
+ const decoder = new TextDecoder();
114
+ let buffer = '';
115
+ while (true) {
116
+ const { done, value } = await reader.read();
117
+ if (done)
118
+ break;
119
+ buffer += decoder.decode(value, { stream: true });
120
+ const lines = buffer.split('\n');
121
+ buffer = lines.pop() || '';
122
+ for (const line of lines) {
123
+ if (!line.startsWith('data:'))
124
+ continue;
125
+ const data = line.slice(line.startsWith('data: ') ? 6 : 5).trim();
126
+ if (data === '[DONE]')
127
+ continue;
128
+ let chunk;
129
+ try {
130
+ chunk = JSON.parse(data);
131
+ }
132
+ catch {
133
+ continue;
134
+ }
135
+ if (chunk.usage) {
136
+ inputTokens = chunk.usage.prompt_tokens ?? 0;
137
+ outputTokens = chunk.usage.completion_tokens ?? 0;
138
+ }
139
+ const delta = chunk.choices?.[0]?.delta;
140
+ if (!delta)
141
+ continue;
142
+ if (delta.content) {
143
+ textContent += delta.content;
144
+ onEvent({ type: 'text_delta', text: delta.content });
145
+ }
146
+ if (delta.tool_calls) {
147
+ for (const tc of delta.tool_calls) {
148
+ const idx = tc.index ?? 0;
149
+ if (!toolCalls.has(idx)) {
150
+ toolCalls.set(idx, { id: tc.id || '', name: tc.function?.name || '', arguments: '' });
151
+ if (tc.id) {
152
+ onEvent({ type: 'tool_use_start', index: idx, toolUseId: tc.id, toolName: tc.function?.name });
153
+ }
154
+ }
155
+ const existing = toolCalls.get(idx);
156
+ if (tc.id)
157
+ existing.id = tc.id;
158
+ if (tc.function?.name)
159
+ existing.name = tc.function.name;
160
+ if (tc.function?.arguments)
161
+ existing.arguments += tc.function.arguments;
162
+ }
163
+ }
164
+ }
165
+ }
166
+ onEvent({ type: 'message_stop' });
167
+ const contentBlocks = [];
168
+ if (textContent)
169
+ contentBlocks.push({ type: 'text', text: textContent });
170
+ for (const [, tc] of toolCalls) {
171
+ let parsedInput = {};
172
+ try {
173
+ parsedInput = JSON.parse(tc.arguments || '{}');
174
+ }
175
+ catch { /* */ }
176
+ contentBlocks.push({ type: 'tool_use', id: tc.id, name: tc.name, input: parsedInput });
177
+ }
178
+ return {
179
+ id: '',
180
+ content: contentBlocks,
181
+ stop_reason: toolCalls.size > 0 ? 'tool_use' : 'end_turn',
182
+ usage: { input_tokens: inputTokens, output_tokens: outputTokens },
183
+ };
184
+ }
185
+ // ── Anthropic stream parser ──
186
+ async function callAnthropicNativeStream(config, systemPrompt, messages, tools, onEvent) {
187
+ const body = {
188
+ model: config.model ?? 'anthropic/claude-sonnet-4-20250514',
189
+ max_tokens: 8192,
190
+ stream: true,
191
+ system: systemPrompt,
192
+ messages: messages.map((m) => ({ role: m.role, content: m.content })),
193
+ };
194
+ if (tools.length > 0)
195
+ body.tools = tools;
196
+ const response = await fetchWithRetry(`${config.baseUrl}/v1/messages`, {
197
+ method: 'POST',
198
+ headers: {
199
+ 'Content-Type': 'application/json',
200
+ 'x-api-key': config.apiKey,
201
+ 'anthropic-version': '2023-06-01',
202
+ },
203
+ body: JSON.stringify(body),
204
+ });
205
+ const contentBlocks = [];
206
+ let stopReason = 'end_turn';
207
+ let inputTokens = 0;
208
+ let outputTokens = 0;
209
+ const toolInputBuffers = new Map();
210
+ const reader = response.body.getReader();
211
+ const decoder = new TextDecoder();
212
+ let buffer = '';
213
+ while (true) {
214
+ const { done, value } = await reader.read();
215
+ if (done)
216
+ break;
217
+ buffer += decoder.decode(value, { stream: true });
218
+ const lines = buffer.split('\n');
219
+ buffer = lines.pop() || '';
220
+ for (const line of lines) {
221
+ if (!line.startsWith('data:'))
222
+ continue;
223
+ const data = line.slice(line.startsWith('data: ') ? 6 : 5).trim();
224
+ if (data === '[DONE]')
225
+ continue;
226
+ let event;
227
+ try {
228
+ event = JSON.parse(data);
229
+ }
230
+ catch {
231
+ continue;
232
+ }
233
+ switch (event.type) {
234
+ case 'content_block_start': {
235
+ const block = event.content_block;
236
+ if (block.type === 'text') {
237
+ contentBlocks[event.index] = { type: 'text', text: '' };
238
+ }
239
+ else if (block.type === 'tool_use') {
240
+ contentBlocks[event.index] = {
241
+ type: 'tool_use', id: block.id, name: block.name, input: {},
242
+ };
243
+ toolInputBuffers.set(event.index, { id: block.id, name: block.name, input: '' });
244
+ onEvent({ type: 'tool_use_start', index: event.index, toolUseId: block.id, toolName: block.name });
245
+ }
246
+ break;
247
+ }
248
+ case 'content_block_delta': {
249
+ const delta = event.delta;
250
+ if (delta.type === 'text_delta') {
251
+ const block = contentBlocks[event.index];
252
+ if (block?.type === 'text')
253
+ block.text += delta.text;
254
+ onEvent({ type: 'text_delta', text: delta.text, index: event.index });
255
+ }
256
+ else if (delta.type === 'input_json_delta') {
257
+ const buf = toolInputBuffers.get(event.index);
258
+ if (buf)
259
+ buf.input += delta.partial_json;
260
+ }
261
+ break;
262
+ }
263
+ case 'content_block_stop': {
264
+ const buf = toolInputBuffers.get(event.index);
265
+ if (buf) {
266
+ try {
267
+ const block = contentBlocks[event.index];
268
+ if (block?.type === 'tool_use')
269
+ block.input = JSON.parse(buf.input || '{}');
270
+ }
271
+ catch { /* invalid JSON */ }
272
+ toolInputBuffers.delete(event.index);
273
+ }
274
+ onEvent({ type: 'content_block_stop', index: event.index });
275
+ break;
276
+ }
277
+ case 'message_delta': {
278
+ if (event.delta?.stop_reason)
279
+ stopReason = event.delta.stop_reason;
280
+ if (event.usage)
281
+ outputTokens = event.usage.output_tokens;
282
+ break;
283
+ }
284
+ case 'message_start': {
285
+ if (event.message?.usage)
286
+ inputTokens = event.message.usage.input_tokens;
287
+ break;
288
+ }
289
+ }
290
+ }
291
+ }
292
+ onEvent({ type: 'message_stop' });
293
+ return {
294
+ id: '',
295
+ content: contentBlocks,
296
+ stop_reason: stopReason,
297
+ usage: { input_tokens: inputTokens, output_tokens: outputTokens },
298
+ };
299
+ }
300
+ // ── Public API: auto-routes by provider ──
301
+ export function callLLMStream(config, systemPrompt, messages, tools, onEvent) {
302
+ if (config.provider === 'openai') {
303
+ return callOpenAIStream(config, systemPrompt, messages, tools, onEvent);
304
+ }
305
+ return callAnthropicNativeStream(config, systemPrompt, messages, tools, onEvent);
306
+ }
307
+ export function callLLM(config, systemPrompt, messages, tools = []) {
308
+ const noop = () => { };
309
+ return callLLMStream(config, systemPrompt, messages, tools, noop);
310
+ }
311
+ export function extractText(response) {
312
+ return response.content
313
+ .filter((b) => b.type === 'text')
314
+ .map((b) => b.text)
315
+ .join('\n');
316
+ }
317
+ //# sourceMappingURL=llm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm.js","sourceRoot":"","sources":["../src/llm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { AgentLoop, AgentLoopContext, AgentLoopCallbacks, UserInput } from './types.js';
2
+ /**
3
+ * Prompt Chaining: decomposes a task into sequential LLM steps.
4
+ *
5
+ * Step 1 (planner): LLM generates a plan with numbered steps.
6
+ * Step 2..N: each step is executed as a separate sub-agent loop with tool access.
7
+ * A programmatic gate checks each step's output before proceeding.
8
+ *
9
+ * Flow: In → LLM Plan → [Step1 → Gate → Step2 → Gate → ...] → Out
10
+ */
11
+ export declare class ChainAgentLoop implements AgentLoop {
12
+ readonly name = "chain";
13
+ readonly description = "Prompt chaining: plan then execute steps sequentially with gates";
14
+ run(userMessage: UserInput, ctx: AgentLoopContext, cb: AgentLoopCallbacks): Promise<void>;
15
+ }
@@ -0,0 +1,105 @@
1
+ import { callLLMStream, callLLM, extractText } from '../llm.js';
2
+ import { userInputAsText } from './types.js';
3
+ const MAX_ITERATIONS = 30;
4
+ /**
5
+ * Prompt Chaining: decomposes a task into sequential LLM steps.
6
+ *
7
+ * Step 1 (planner): LLM generates a plan with numbered steps.
8
+ * Step 2..N: each step is executed as a separate sub-agent loop with tool access.
9
+ * A programmatic gate checks each step's output before proceeding.
10
+ *
11
+ * Flow: In → LLM Plan → [Step1 → Gate → Step2 → Gate → ...] → Out
12
+ */
13
+ export class ChainAgentLoop {
14
+ name = 'chain';
15
+ description = 'Prompt chaining: plan then execute steps sequentially with gates';
16
+ async run(userMessage, ctx, cb) {
17
+ ctx.messages.push({ role: 'user', content: userMessage });
18
+ let totalInput = 0;
19
+ let totalOutput = 0;
20
+ try {
21
+ // Step 1: Ask LLM to decompose the task into a numbered plan
22
+ const planResponse = await callLLM(ctx.config, ctx.systemPrompt, [
23
+ ...ctx.messages,
24
+ {
25
+ role: 'user',
26
+ content: 'Break the user\'s request into 2-5 concrete numbered steps. ' +
27
+ 'Output ONLY a JSON array of step descriptions, e.g. ["step 1 desc", "step 2 desc"]. ' +
28
+ 'No other text.',
29
+ },
30
+ ]);
31
+ totalInput += planResponse.usage.input_tokens;
32
+ totalOutput += planResponse.usage.output_tokens;
33
+ const planText = extractText(planResponse);
34
+ let steps;
35
+ try {
36
+ const match = planText.match(/\[[\s\S]*\]/);
37
+ steps = match ? JSON.parse(match[0]) : [userInputAsText(userMessage)];
38
+ }
39
+ catch {
40
+ // If LLM doesn't produce valid JSON, fall through to simple mode
41
+ steps = [userInputAsText(userMessage)];
42
+ }
43
+ cb.onTextDelta(`**Plan** (${steps.length} steps)\n`);
44
+ steps.forEach((s, i) => cb.onTextDelta(`${i + 1}. ${s}\n`));
45
+ cb.onTextDelta('\n---\n\n');
46
+ // Step 2..N: execute each step with full tool access
47
+ const stepResults = [];
48
+ for (let i = 0; i < steps.length; i++) {
49
+ const stepPrompt = `You are executing step ${i + 1}/${steps.length} of a plan.\n` +
50
+ `Overall task: ${userMessage}\n` +
51
+ `Current step: ${steps[i]}\n` +
52
+ (stepResults.length > 0
53
+ ? `Previous steps completed:\n${stepResults.map((r, j) => `Step ${j + 1}: ${r}`).join('\n')}\n`
54
+ : '') +
55
+ `Execute this step now. Be concise.`;
56
+ // Sub-agent loop for this step (with streaming + tools)
57
+ const stepMessages = [...ctx.messages];
58
+ stepMessages.push({ role: 'user', content: stepPrompt });
59
+ let stepText = '';
60
+ for (let iter = 0; iter < MAX_ITERATIONS; iter++) {
61
+ const response = await callLLMStream(ctx.config, ctx.systemPrompt, stepMessages, ctx.tools, (event) => {
62
+ if (event.type === 'text_delta' && event.text) {
63
+ stepText += event.text;
64
+ cb.onTextDelta(event.text);
65
+ }
66
+ });
67
+ totalInput += response.usage.input_tokens;
68
+ totalOutput += response.usage.output_tokens;
69
+ stepMessages.push({ role: 'assistant', content: response.content });
70
+ const toolUseBlocks = response.content.filter((b) => b.type === 'tool_use');
71
+ if (toolUseBlocks.length === 0 || response.stop_reason === 'end_turn')
72
+ break;
73
+ const toolResults = [];
74
+ for (const block of toolUseBlocks) {
75
+ cb.onToolUse(block.name, block.input);
76
+ const result = await ctx.executeTool(block.name, block.input);
77
+ cb.onToolResult(block.name, result);
78
+ toolResults.push({ type: 'tool_result', tool_use_id: block.id, content: result });
79
+ }
80
+ stepMessages.push({ role: 'user', content: toolResults });
81
+ }
82
+ stepResults.push(stepText.slice(0, 500) || '(completed)');
83
+ // Gate: verify step completed (programmatic check - non-empty output)
84
+ if (!stepText.trim()) {
85
+ cb.onTextDelta(`\n**Gate failed at step ${i + 1}** - no output produced.\n`);
86
+ break;
87
+ }
88
+ if (i < steps.length - 1) {
89
+ cb.onTextDelta(`\n\n---\n**Step ${i + 1} complete. Proceeding to step ${i + 2}...**\n\n`);
90
+ }
91
+ }
92
+ // Record the final exchange in main context
93
+ ctx.messages.push({
94
+ role: 'assistant',
95
+ content: [{ type: 'text', text: stepResults.join('\n\n') }],
96
+ });
97
+ }
98
+ catch (err) {
99
+ cb.onError(err);
100
+ return;
101
+ }
102
+ cb.onDone({ inputTokens: totalInput, outputTokens: totalOutput });
103
+ }
104
+ }
105
+ //# sourceMappingURL=chain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain.js","sourceRoot":"","sources":["../../src/loops/chain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { AgentLoop, AgentLoopContext, AgentLoopCallbacks, UserInput } from './types.js';
2
+ /**
3
+ * Evaluator-Optimizer: one LLM generates a solution with tools,
4
+ * another evaluates and provides feedback. Loop until accepted.
5
+ *
6
+ * Flow: In → Generator (with tools) → Evaluator → [accept | reject+feedback → Generator] → Out
7
+ */
8
+ export declare class EvaluatorAgentLoop implements AgentLoop {
9
+ readonly name = "evaluator";
10
+ readonly description = "Evaluator-optimizer: generate, evaluate, refine loop";
11
+ run(userMessage: UserInput, ctx: AgentLoopContext, cb: AgentLoopCallbacks): Promise<void>;
12
+ }
@@ -0,0 +1,100 @@
1
+ import { callLLM, extractText, callLLMStream } from '../llm.js';
2
+ const MAX_GENERATOR_ITERATIONS = 20;
3
+ const MAX_EVAL_ROUNDS = 3;
4
+ /**
5
+ * Evaluator-Optimizer: one LLM generates a solution with tools,
6
+ * another evaluates and provides feedback. Loop until accepted.
7
+ *
8
+ * Flow: In → Generator (with tools) → Evaluator → [accept | reject+feedback → Generator] → Out
9
+ */
10
+ export class EvaluatorAgentLoop {
11
+ name = 'evaluator';
12
+ description = 'Evaluator-optimizer: generate, evaluate, refine loop';
13
+ async run(userMessage, ctx, cb) {
14
+ ctx.messages.push({ role: 'user', content: userMessage });
15
+ let totalInput = 0;
16
+ let totalOutput = 0;
17
+ try {
18
+ let lastSolution = '';
19
+ let feedback = '';
20
+ for (let round = 0; round < MAX_EVAL_ROUNDS; round++) {
21
+ // Generator phase
22
+ if (round > 0) {
23
+ cb.onTextDelta(`\n---\n**Round ${round + 1}: refining based on feedback...**\n\n`);
24
+ }
25
+ const generatorPrompt = round === 0
26
+ ? userMessage
27
+ : `The evaluator rejected your previous solution with this feedback:\n\n${feedback}\n\nOriginal task: ${userMessage}\n\nPlease revise your solution.`;
28
+ const genMessages = [...ctx.messages];
29
+ if (round > 0) {
30
+ genMessages.push({ role: 'user', content: generatorPrompt });
31
+ }
32
+ let solutionText = '';
33
+ for (let i = 0; i < MAX_GENERATOR_ITERATIONS; i++) {
34
+ const response = await callLLMStream(ctx.config, ctx.systemPrompt, genMessages, ctx.tools, (event) => {
35
+ if (event.type === 'text_delta' && event.text) {
36
+ solutionText += event.text;
37
+ cb.onTextDelta(event.text);
38
+ }
39
+ });
40
+ totalInput += response.usage.input_tokens;
41
+ totalOutput += response.usage.output_tokens;
42
+ genMessages.push({ role: 'assistant', content: response.content });
43
+ const toolUseBlocks = response.content.filter((b) => b.type === 'tool_use');
44
+ if (toolUseBlocks.length === 0 || response.stop_reason === 'end_turn')
45
+ break;
46
+ const toolResults = [];
47
+ for (const block of toolUseBlocks) {
48
+ cb.onToolUse(block.name, block.input);
49
+ const result = await ctx.executeTool(block.name, block.input);
50
+ cb.onToolResult(block.name, result);
51
+ toolResults.push({ type: 'tool_result', tool_use_id: block.id, content: result });
52
+ }
53
+ genMessages.push({ role: 'user', content: toolResults });
54
+ }
55
+ lastSolution = solutionText;
56
+ // Last round: skip evaluation, accept as-is
57
+ if (round === MAX_EVAL_ROUNDS - 1)
58
+ break;
59
+ // Evaluator phase
60
+ cb.onTextDelta('\n\n*Evaluating...*\n');
61
+ const evalResponse = await callLLM(ctx.config, 'You are a critical evaluator. Judge whether the solution meets the task requirements. ' +
62
+ 'Reply with a JSON object: {"accepted": true/false, "feedback": "your feedback"}. ' +
63
+ 'Only accept if the solution is complete and correct. No other text.', [
64
+ {
65
+ role: 'user',
66
+ content: `Task: ${userMessage}\n\nSolution:\n${lastSolution.slice(0, 4000)}`,
67
+ },
68
+ ]);
69
+ totalInput += evalResponse.usage.input_tokens;
70
+ totalOutput += evalResponse.usage.output_tokens;
71
+ const evalText = extractText(evalResponse);
72
+ let evalResult;
73
+ try {
74
+ const match = evalText.match(/\{[\s\S]*\}/);
75
+ evalResult = match ? JSON.parse(match[0]) : { accepted: true, feedback: '' };
76
+ }
77
+ catch {
78
+ evalResult = { accepted: true, feedback: '' };
79
+ }
80
+ if (evalResult.accepted) {
81
+ cb.onTextDelta('*Accepted.*\n');
82
+ break;
83
+ }
84
+ feedback = evalResult.feedback || 'Solution needs improvement.';
85
+ cb.onTextDelta(`*Rejected: ${feedback}*\n`);
86
+ }
87
+ // Record final solution in context
88
+ ctx.messages.push({
89
+ role: 'assistant',
90
+ content: [{ type: 'text', text: lastSolution }],
91
+ });
92
+ }
93
+ catch (err) {
94
+ cb.onError(err);
95
+ return;
96
+ }
97
+ cb.onDone({ inputTokens: totalInput, outputTokens: totalOutput });
98
+ }
99
+ }
100
+ //# sourceMappingURL=evaluator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../src/loops/evaluator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { AgentLoop, AgentLoopRegistry } from './types.js';
2
+ export type { AgentLoop, AgentLoopCallbacks, AgentLoopContext, AgentLoopRegistry } from './types.js';
3
+ declare class Registry implements AgentLoopRegistry {
4
+ private loops;
5
+ private defaultName;
6
+ get(name: string): AgentLoop | undefined;
7
+ list(): AgentLoop[];
8
+ register(loop: AgentLoop): void;
9
+ default(): AgentLoop;
10
+ setDefault(name: string): boolean;
11
+ }
12
+ export declare function createLoopRegistry(): Registry;
@@ -0,0 +1,39 @@
1
+ import { SimpleAgentLoop } from './simple.js';
2
+ import { ParallelAgentLoop } from './parallel.js';
3
+ import { ChainAgentLoop } from './chain.js';
4
+ import { RouteAgentLoop } from './route.js';
5
+ import { OrchestratorAgentLoop } from './orchestrator.js';
6
+ import { EvaluatorAgentLoop } from './evaluator.js';
7
+ class Registry {
8
+ loops = new Map();
9
+ defaultName = 'simple';
10
+ get(name) {
11
+ return this.loops.get(name);
12
+ }
13
+ list() {
14
+ return Array.from(this.loops.values());
15
+ }
16
+ register(loop) {
17
+ this.loops.set(loop.name, loop);
18
+ }
19
+ default() {
20
+ return this.loops.get(this.defaultName);
21
+ }
22
+ setDefault(name) {
23
+ if (!this.loops.has(name))
24
+ return false;
25
+ this.defaultName = name;
26
+ return true;
27
+ }
28
+ }
29
+ export function createLoopRegistry() {
30
+ const registry = new Registry();
31
+ registry.register(new SimpleAgentLoop());
32
+ registry.register(new ParallelAgentLoop());
33
+ registry.register(new ChainAgentLoop());
34
+ registry.register(new RouteAgentLoop());
35
+ registry.register(new OrchestratorAgentLoop());
36
+ registry.register(new EvaluatorAgentLoop());
37
+ return registry;
38
+ }
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/loops/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAIpD,MAAM,QAAQ;IACJ,KAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;IACrC,WAAW,GAAG,QAAQ,CAAC;IAE/B,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,QAAQ,CAAC,IAAe;QACtB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAE,CAAC;IAC3C,CAAC;IAED,UAAU,CAAC,IAAY;QACrB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QACxC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,MAAM,UAAU,kBAAkB;IAChC,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC;IACzC,QAAQ,CAAC,QAAQ,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC;IAC3C,QAAQ,CAAC,QAAQ,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC;IACxC,QAAQ,CAAC,QAAQ,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC;IACxC,QAAQ,CAAC,QAAQ,CAAC,IAAI,qBAAqB,EAAE,CAAC,CAAC;IAC/C,QAAQ,CAAC,QAAQ,CAAC,IAAI,kBAAkB,EAAE,CAAC,CAAC;IAC5C,OAAO,QAAQ,CAAC;AAClB,CAAC"}