@synergenius/flow-weaver-pack-weaver 0.9.55 → 0.9.57

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 (43) hide show
  1. package/dist/bot/runner.d.ts.map +1 -1
  2. package/dist/bot/runner.js +57 -4
  3. package/dist/bot/runner.js.map +1 -1
  4. package/dist/bot/types.d.ts +4 -0
  5. package/dist/bot/types.d.ts.map +1 -1
  6. package/dist/docs/weaver-bot-usage.md +34 -0
  7. package/dist/docs/weaver-config.md +9 -15
  8. package/dist/docs/weaver-genesis.md +32 -0
  9. package/dist/docs/weaver-task-queue.md +34 -0
  10. package/dist/ui/bot-workspace.js +8 -3
  11. package/dist/ui/trace-to-timeline.d.ts +4 -0
  12. package/dist/ui/trace-to-timeline.d.ts.map +1 -1
  13. package/dist/ui/trace-to-timeline.js +1 -0
  14. package/dist/ui/trace-to-timeline.js.map +1 -1
  15. package/dist/ui/use-stream-timeline.d.ts.map +1 -1
  16. package/dist/ui/use-stream-timeline.js +4 -0
  17. package/dist/ui/use-stream-timeline.js.map +1 -1
  18. package/flowweaver.manifest.json +1 -1
  19. package/package.json +1 -1
  20. package/src/bot/runner.ts +56 -4
  21. package/src/bot/types.ts +1 -0
  22. package/src/ui/trace-to-timeline.ts +2 -0
  23. package/src/ui/use-stream-timeline.ts +6 -0
  24. package/dist/bot/agent-loop.d.ts +0 -20
  25. package/dist/bot/agent-loop.d.ts.map +0 -1
  26. package/dist/bot/agent-loop.js +0 -331
  27. package/dist/bot/agent-loop.js.map +0 -1
  28. package/dist/cli.d.ts +0 -3
  29. package/dist/cli.d.ts.map +0 -1
  30. package/dist/cli.js +0 -749
  31. package/dist/cli.js.map +0 -1
  32. package/dist/templates/weaver-template.d.ts +0 -11
  33. package/dist/templates/weaver-template.d.ts.map +0 -1
  34. package/dist/templates/weaver-template.js +0 -53
  35. package/dist/templates/weaver-template.js.map +0 -1
  36. package/dist/workflows/weaver-bot-session.d.ts +0 -65
  37. package/dist/workflows/weaver-bot-session.d.ts.map +0 -1
  38. package/dist/workflows/weaver-bot-session.js +0 -68
  39. package/dist/workflows/weaver-bot-session.js.map +0 -1
  40. package/dist/workflows/weaver.d.ts +0 -24
  41. package/dist/workflows/weaver.d.ts.map +0 -1
  42. package/dist/workflows/weaver.js +0 -28
  43. package/dist/workflows/weaver.js.map +0 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "manifestVersion": 2,
3
3
  "name": "@synergenius/flow-weaver-pack-weaver",
4
- "version": "0.9.44",
4
+ "version": "0.9.57",
5
5
  "description": "AI bot for Flow Weaver. Execute tasks, run workflows, evolve autonomously.",
6
6
  "engineVersion": ">=0.22.10",
7
7
  "categories": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synergenius/flow-weaver-pack-weaver",
3
- "version": "0.9.55",
3
+ "version": "0.9.57",
4
4
  "description": "AI bot for Flow Weaver. Execute tasks, run workflows, evolve autonomously.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
package/src/bot/runner.ts CHANGED
@@ -226,9 +226,10 @@ export async function runWorkflow(
226
226
  return dryResult;
227
227
  }
228
228
 
229
- // Pre-parse node labels from the workflow AST so live stream events carry
230
- // human-readable names instead of code identifiers.
231
- const nodeLabels = new Map<string, string>(); // nodeTypeName → label
229
+ // Pre-parse node labels and port labels from the workflow AST so live
230
+ // stream events carry human-readable names instead of code identifiers.
231
+ const nodeLabels = new Map<string, string>(); // nodeTypeName | instanceId → label
232
+ const portLabels = new Map<string, string>(); // "nodeTypeName.portName" → label
232
233
  try {
233
234
  const parserMod = '@synergenius/flow-weaver';
234
235
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -236,6 +237,13 @@ export async function runWorkflow(
236
237
  const parseResult = fwParser.parse(absPath);
237
238
  for (const nt of parseResult?.nodeTypes ?? []) {
238
239
  if (nt.label) nodeLabels.set(nt.name, nt.label);
240
+ // Extract output port labels: outputs is Record<string, PortConfig>
241
+ if (nt.outputs && typeof nt.outputs === 'object') {
242
+ for (const [portName, portCfg] of Object.entries(nt.outputs)) {
243
+ const cfg = portCfg as { label?: string } | undefined;
244
+ if (cfg?.label) portLabels.set(`${nt.name}.${portName}`, cfg.label);
245
+ }
246
+ }
239
247
  }
240
248
  for (const inst of parseResult?.workflow?.instances ?? []) {
241
249
  const label = inst.config?.label ?? nodeLabels.get(inst.nodeType);
@@ -244,10 +252,47 @@ export async function runWorkflow(
244
252
  } catch { /* non-fatal — live events will use code names */ }
245
253
 
246
254
  // Always collect trace events for persistence; also forward to caller if provided.
247
- // Track node start times so we can compute durationMs on completion.
255
+ // Track node start times, node types, and outputs so we can attach them on completion.
248
256
  const nodeStartTimes = new Map<string, number>();
257
+ const nodeTypes = new Map<string, string>(); // nodeId → nodeTypeName
258
+ const nodeOutputs = new Map<string, Array<{ portLabel: string; value: unknown }>>();
259
+
260
+ /** Truncate large string values; preserve objects as-is (UI handles overflow). */
261
+ function truncateValue(value: unknown, maxLen = 8192): unknown {
262
+ if (typeof value === 'string' && value.length > maxLen) {
263
+ return value.slice(0, maxLen) + '…';
264
+ }
265
+ return value;
266
+ }
267
+
268
+ /** Resolve a human-readable port label from nodeType + portName. */
269
+ function resolvePortLabel(nodeTypeName: string | undefined, portName: string): string {
270
+ if (nodeTypeName) {
271
+ const label = portLabels.get(`${nodeTypeName}.${portName}`);
272
+ if (label) return label;
273
+ }
274
+ return portName;
275
+ }
249
276
 
250
277
  const onTraceEvent = (traceEvent: { type: string; timestamp: number; data?: Record<string, unknown> }) => {
278
+ // Capture VARIABLE_SET events — these carry node output port values
279
+ if (traceEvent.type === 'VARIABLE_SET' && traceEvent.data) {
280
+ const ident = traceEvent.data.identifier as Record<string, unknown> | undefined;
281
+ if (ident) {
282
+ const nodeId = ident.id as string;
283
+ const portName = ident.portName as string;
284
+ const nodeTypeName = ident.nodeTypeName as string | undefined;
285
+ if (nodeId && portName) {
286
+ if (nodeTypeName) nodeTypes.set(nodeId, nodeTypeName);
287
+ const label = resolvePortLabel(nodeTypeName ?? nodeTypes.get(nodeId), portName);
288
+ const outputs = nodeOutputs.get(nodeId) ?? [];
289
+ outputs.push({ portLabel: label, value: truncateValue(traceEvent.data.value) });
290
+ nodeOutputs.set(nodeId, outputs);
291
+ }
292
+ }
293
+ return;
294
+ }
295
+
251
296
  if (traceEvent.type !== 'STATUS_CHANGED' || !traceEvent.data) return;
252
297
  const nodeId = traceEvent.data.id as string | undefined;
253
298
  const status = traceEvent.data.status as string | undefined;
@@ -259,6 +304,7 @@ export async function runWorkflow(
259
304
  if (status === 'RUNNING') {
260
305
  eventType = 'node-start';
261
306
  nodeStartTimes.set(nodeId, traceEvent.timestamp);
307
+ if (traceEvent.data.nodeTypeName) nodeTypes.set(nodeId, traceEvent.data.nodeTypeName as string);
262
308
  } else if (status === 'SUCCEEDED') {
263
309
  eventType = 'node-complete';
264
310
  const startTime = nodeStartTimes.get(nodeId);
@@ -272,6 +318,10 @@ export async function runWorkflow(
272
318
  }
273
319
 
274
320
  if (eventType) {
321
+ // Attach accumulated outputs on completion/error, then clear
322
+ const outputs = nodeOutputs.get(nodeId);
323
+ if (eventType !== 'node-start') nodeOutputs.delete(nodeId);
324
+
275
325
  const event: ExecutionEvent = {
276
326
  type: eventType,
277
327
  nodeId,
@@ -279,12 +329,14 @@ export async function runWorkflow(
279
329
  timestamp: traceEvent.timestamp,
280
330
  durationMs,
281
331
  error: traceEvent.data.error as string | undefined,
332
+ outputs: outputs && outputs.length > 0 ? outputs : undefined,
282
333
  };
283
334
  collectedTrace.push(event);
284
335
  options?.onEvent?.(event);
285
336
  const nodeLabel = nodeLabels.get(nodeId) ?? nodeLabels.get(event.nodeType ?? '') ?? undefined;
286
337
  logEvent?.({ type: event.type, timestamp: event.timestamp, data: {
287
338
  nodeId: event.nodeId, nodeType: event.nodeType, label: nodeLabel, durationMs: event.durationMs, error: event.error,
339
+ outputs: event.outputs,
288
340
  }});
289
341
 
290
342
  // Emit approval-needed when the approval gate starts
package/src/bot/types.ts CHANGED
@@ -146,6 +146,7 @@ export interface ExecutionEvent {
146
146
  timestamp: number;
147
147
  durationMs?: number;
148
148
  error?: string;
149
+ outputs?: Array<{ portLabel: string; value: unknown }>;
149
150
  }
150
151
 
151
152
  export interface BotConfig {
@@ -22,6 +22,7 @@ export interface HistoricalTraceEvent {
22
22
  timestamp: number;
23
23
  durationMs?: number;
24
24
  error?: string;
25
+ outputs?: Array<{ portLabel: string; value: unknown }>;
25
26
  }
26
27
 
27
28
  export interface HistoricalStepLog {
@@ -111,6 +112,7 @@ export function traceToTimeline(run: HistoricalRun): TimelineEntry[] {
111
112
  duration,
112
113
  color: nm?.color,
113
114
  icon: nm?.icon,
115
+ outputs: event.outputs && event.outputs.length > 0 ? event.outputs : undefined,
114
116
  });
115
117
  nodeStarts.delete(event.nodeId);
116
118
  }
@@ -114,6 +114,8 @@ export function useStreamTimeline(events: StreamEvent[], isDone: boolean): Strea
114
114
  (d.durationMs as number) ?? (startTs ? event.timestamp - startTs : undefined);
115
115
  if (nodeId) nodeStarts.delete(nodeId);
116
116
 
117
+ const rawOutputs = d.outputs as Array<{ portLabel: string; value: unknown }> | undefined;
118
+
117
119
  const completed: TimelineEntry = {
118
120
  id: `s-${idCounter++}`,
119
121
  timestamp: new Date(startTs ?? event.timestamp),
@@ -121,6 +123,7 @@ export function useStreamTimeline(events: StreamEvent[], isDone: boolean): Strea
121
123
  nodeId,
122
124
  label: (d.label as string) ?? (d.nodeType as string) ?? nodeId ?? 'Node',
123
125
  duration,
126
+ outputs: rawOutputs && rawOutputs.length > 0 ? rawOutputs : undefined,
124
127
  };
125
128
 
126
129
  // Replace the node-started entry in-place
@@ -141,6 +144,8 @@ export function useStreamTimeline(events: StreamEvent[], isDone: boolean): Strea
141
144
  (d.durationMs as number) ?? (startTs ? event.timestamp - startTs : undefined);
142
145
  if (nodeId) nodeStarts.delete(nodeId);
143
146
 
147
+ const rawOutputs = d.outputs as Array<{ portLabel: string; value: unknown }> | undefined;
148
+
144
149
  const failed: TimelineEntry = {
145
150
  id: `s-${idCounter++}`,
146
151
  timestamp: new Date(startTs ?? event.timestamp),
@@ -149,6 +154,7 @@ export function useStreamTimeline(events: StreamEvent[], isDone: boolean): Strea
149
154
  label: (d.label as string) ?? (d.nodeType as string) ?? nodeId ?? 'Node',
150
155
  detail: d.error as string | undefined,
151
156
  duration,
157
+ outputs: rawOutputs && rawOutputs.length > 0 ? rawOutputs : undefined,
152
158
  };
153
159
 
154
160
  // Replace the node-started entry in-place
@@ -1,20 +0,0 @@
1
- /**
2
- * Tool-use agent loop — Claude drives the entire task via tool calls.
3
- *
4
- * Instead of plan → execute → retry, the AI calls tools directly:
5
- * validate → sees errors → read_file → sees code → patch_file → validate → done
6
- *
7
- * Supports two providers:
8
- * - Anthropic API: direct streaming with tool_use blocks
9
- * - Claude CLI: fallback via callCliAsync (no tool loop, uses --json-schema)
10
- */
11
- import type { ProviderInfo, StepLogEntry } from './types.js';
12
- export interface AgentLoopResult {
13
- success: boolean;
14
- summary: string;
15
- filesModified: string[];
16
- stepLog: StepLogEntry[];
17
- toolCallCount: number;
18
- }
19
- export declare function runAgentLoop(pInfo: Pick<ProviderInfo, 'type' | 'apiKey' | 'model' | 'maxTokens'>, systemPrompt: string, taskPrompt: string, projectDir: string, maxIterations?: number): Promise<AgentLoopResult>;
20
- //# sourceMappingURL=agent-loop.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-loop.d.ts","sourceRoot":"","sources":["../../src/bot/agent-loop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAqH7D,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;CACvB;AAaD,wBAAsB,YAAY,CAChC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,WAAW,CAAC,EACpE,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,aAAa,SAAK,GACjB,OAAO,CAAC,eAAe,CAAC,CA8E1B"}
@@ -1,331 +0,0 @@
1
- /**
2
- * Tool-use agent loop — Claude drives the entire task via tool calls.
3
- *
4
- * Instead of plan → execute → retry, the AI calls tools directly:
5
- * validate → sees errors → read_file → sees code → patch_file → validate → done
6
- *
7
- * Supports two providers:
8
- * - Anthropic API: direct streaming with tool_use blocks
9
- * - Claude CLI: fallback via callCliAsync (no tool loop, uses --json-schema)
10
- */
11
- import { executeStep } from './step-executor.js';
12
- // ---------------------------------------------------------------------------
13
- // Tool definitions
14
- // ---------------------------------------------------------------------------
15
- const TOOLS = [
16
- {
17
- name: 'validate',
18
- description: 'Run flow-weaver validate on a workflow file. Returns JSON with errors and warnings. Use this FIRST to discover issues, and AFTER patching to confirm fixes.',
19
- input_schema: { type: 'object', properties: { file: { type: 'string', description: 'Path to the workflow file to validate' } }, required: ['file'] },
20
- },
21
- {
22
- name: 'read_file',
23
- description: 'Read a file and return its full contents. Use this to understand file structure before patching.',
24
- input_schema: { type: 'object', properties: { file: { type: 'string', description: 'Path to the file to read' } }, required: ['file'] },
25
- },
26
- {
27
- name: 'patch_file',
28
- description: 'Apply surgical find-and-replace patches to a file. Each patch must have exact "find" and "replace" strings. Preferred over write_file for modifications.',
29
- input_schema: {
30
- type: 'object',
31
- properties: {
32
- file: { type: 'string', description: 'Path to the file to patch' },
33
- patches: {
34
- type: 'array',
35
- items: {
36
- type: 'object',
37
- properties: {
38
- find: { type: 'string', description: 'Exact string to find' },
39
- replace: { type: 'string', description: 'String to replace with' },
40
- },
41
- required: ['find', 'replace'],
42
- },
43
- description: 'Array of find/replace patches',
44
- },
45
- },
46
- required: ['file', 'patches'],
47
- },
48
- },
49
- {
50
- name: 'run_shell',
51
- description: 'Execute a shell command and return output. Use for: npx flow-weaver validate, git status, etc. Blocked: rm -rf, git push, sudo.',
52
- input_schema: { type: 'object', properties: { command: { type: 'string', description: 'Shell command to execute' } }, required: ['command'] },
53
- },
54
- {
55
- name: 'list_files',
56
- description: 'List files in a directory, optionally filtered by regex pattern.',
57
- input_schema: {
58
- type: 'object',
59
- properties: {
60
- directory: { type: 'string', description: 'Directory to list' },
61
- pattern: { type: 'string', description: 'Optional regex filter pattern' },
62
- },
63
- required: ['directory'],
64
- },
65
- },
66
- {
67
- name: 'write_file',
68
- description: 'Write content to a file (creates or overwrites). Use patch_file instead for modifications to existing files.',
69
- input_schema: {
70
- type: 'object',
71
- properties: {
72
- file: { type: 'string', description: 'Path to the file to write' },
73
- content: { type: 'string', description: 'Complete file content' },
74
- },
75
- required: ['file', 'content'],
76
- },
77
- },
78
- ];
79
- // ---------------------------------------------------------------------------
80
- // Tool execution — delegates to step-executor with all safety guards
81
- // ---------------------------------------------------------------------------
82
- async function executeTool(name, args, projectDir) {
83
- // Map tool names to step-executor operations
84
- const operationMap = {
85
- validate: 'run-shell',
86
- read_file: 'read-file',
87
- patch_file: 'patch-file',
88
- run_shell: 'run-shell',
89
- list_files: 'list-files',
90
- write_file: 'write-file',
91
- };
92
- const operation = operationMap[name];
93
- if (!operation) {
94
- return { result: `Unknown tool: ${name}`, isError: true };
95
- }
96
- // Transform validate tool to run-shell with flow-weaver validate command
97
- let stepArgs = { ...args };
98
- if (name === 'validate') {
99
- stepArgs = { command: `npx flow-weaver validate ${args.file} --json` };
100
- }
101
- try {
102
- const result = await executeStep({ operation, args: stepArgs }, projectDir);
103
- if (result.blocked) {
104
- return { result: result.blockReason ?? 'Blocked by safety guard', isError: true };
105
- }
106
- return { result: result.output ?? 'Done', isError: false };
107
- }
108
- catch (err) {
109
- const msg = err instanceof Error ? err.message : String(err);
110
- return { result: msg, isError: true };
111
- }
112
- }
113
- export async function runAgentLoop(pInfo, systemPrompt, taskPrompt, projectDir, maxIterations = 15) {
114
- if (pInfo.type !== 'anthropic' || !pInfo.apiKey) {
115
- throw new Error('Agent loop requires Anthropic API provider with API key');
116
- }
117
- const messages = [{ role: 'user', content: taskPrompt }];
118
- const filesModified = [];
119
- const stepLog = [];
120
- let toolCallCount = 0;
121
- for (let iteration = 0; iteration < maxIterations; iteration++) {
122
- // Call Anthropic API with streaming
123
- const { text, toolCalls, finishReason } = await streamAnthropicWithTools(pInfo.apiKey, pInfo.model ?? 'claude-sonnet-4-20250514', systemPrompt, messages, pInfo.maxTokens ?? 8192);
124
- // Add assistant response to history
125
- if (toolCalls.length > 0) {
126
- messages.push({ role: 'assistant', content: text || '', toolCalls });
127
- }
128
- else if (text) {
129
- messages.push({ role: 'assistant', content: text });
130
- }
131
- // If no tool calls, we're done
132
- if (finishReason !== 'tool_calls' || toolCalls.length === 0) {
133
- return {
134
- success: true,
135
- summary: text || 'Task completed',
136
- filesModified: [...new Set(filesModified)],
137
- stepLog,
138
- toolCallCount,
139
- };
140
- }
141
- // Execute tool calls and add results to history
142
- for (const tc of toolCalls) {
143
- toolCallCount++;
144
- process.stderr.write(`\x1b[33m ⚡ ${tc.name}(${formatToolArgs(tc.arguments)})\x1b[0m\n`);
145
- const { result, isError } = await executeTool(tc.name, tc.arguments, projectDir);
146
- // Track files modified by patch_file and write_file
147
- if ((tc.name === 'patch_file' || tc.name === 'write_file') && !isError && tc.arguments.file) {
148
- filesModified.push(tc.arguments.file);
149
- }
150
- // Log step
151
- stepLog.push({
152
- step: `${tc.name}`,
153
- status: isError ? 'error' : 'ok',
154
- detail: isError ? result.slice(0, 200) : `${tc.name}(${formatToolArgs(tc.arguments)})`,
155
- });
156
- // Print result preview
157
- const preview = result.slice(0, 150).replace(/\n/g, ' ');
158
- const icon = isError ? '\x1b[31m ✗' : '\x1b[32m →';
159
- process.stderr.write(`${icon} ${preview}\x1b[0m\n`);
160
- // Add tool result to conversation
161
- messages.push({
162
- role: 'tool',
163
- content: result.slice(0, 10000), // Cap tool result to prevent context overflow
164
- toolCallId: tc.id,
165
- });
166
- }
167
- }
168
- return {
169
- success: false,
170
- summary: `Reached max iterations (${maxIterations})`,
171
- filesModified: [...new Set(filesModified)],
172
- stepLog,
173
- toolCallCount,
174
- };
175
- }
176
- function formatToolArgs(args) {
177
- if (args.file)
178
- return String(args.file).split('/').pop() ?? '';
179
- if (args.command)
180
- return String(args.command).slice(0, 60);
181
- if (args.directory)
182
- return String(args.directory);
183
- return '';
184
- }
185
- // ---------------------------------------------------------------------------
186
- // Anthropic streaming with tool support
187
- // ---------------------------------------------------------------------------
188
- async function streamAnthropicWithTools(apiKey, model, systemPrompt, messages, maxTokens) {
189
- // Build Anthropic API request body
190
- const apiMessages = messages.map((m) => {
191
- if (m.role === 'tool') {
192
- return {
193
- role: 'user',
194
- content: [{ type: 'tool_result', tool_use_id: m.toolCallId, content: m.content }],
195
- };
196
- }
197
- if (m.role === 'assistant' && m.toolCalls?.length) {
198
- const blocks = [];
199
- if (m.content)
200
- blocks.push({ type: 'text', text: m.content });
201
- for (const tc of m.toolCalls) {
202
- blocks.push({ type: 'tool_use', id: tc.id, name: tc.name, input: tc.arguments });
203
- }
204
- return { role: 'assistant', content: blocks };
205
- }
206
- return { role: m.role, content: m.content };
207
- });
208
- const body = JSON.stringify({
209
- model,
210
- max_tokens: maxTokens,
211
- system: systemPrompt,
212
- stream: true,
213
- messages: apiMessages,
214
- tools: TOOLS,
215
- });
216
- const response = await fetch('https://api.anthropic.com/v1/messages', {
217
- method: 'POST',
218
- headers: {
219
- 'x-api-key': apiKey,
220
- 'anthropic-version': '2025-04-15',
221
- 'content-type': 'application/json',
222
- },
223
- body,
224
- signal: AbortSignal.timeout(300_000),
225
- });
226
- if (!response.ok) {
227
- const err = await response.text();
228
- throw new Error(`Anthropic API error ${response.status}: ${err.slice(0, 200)}`);
229
- }
230
- if (!response.body)
231
- throw new Error('No response body');
232
- // Parse SSE stream
233
- const reader = response.body.getReader();
234
- const decoder = new TextDecoder();
235
- let buffer = '';
236
- let textContent = '';
237
- let finishReason = 'stop';
238
- const toolCalls = [];
239
- const activeToolUses = new Map();
240
- let inThinking = false;
241
- try {
242
- while (true) {
243
- const { done, value } = await reader.read();
244
- if (done)
245
- break;
246
- buffer += decoder.decode(value, { stream: true });
247
- const lines = buffer.split('\n');
248
- buffer = lines.pop() || '';
249
- for (const line of lines) {
250
- if (!line.startsWith('data: '))
251
- continue;
252
- const jsonStr = line.slice(6).trim();
253
- if (jsonStr === '[DONE]')
254
- continue;
255
- let event;
256
- try {
257
- event = JSON.parse(jsonStr);
258
- }
259
- catch {
260
- continue;
261
- }
262
- const eventType = event.type;
263
- if (eventType === 'content_block_start') {
264
- const block = event.content_block;
265
- const index = event.index;
266
- if (block.type === 'tool_use' && block.id && block.name) {
267
- activeToolUses.set(index, { id: block.id, name: block.name, jsonChunks: [] });
268
- }
269
- if (block.type === 'thinking') {
270
- inThinking = true;
271
- process.stderr.write('\x1b[90m thinking...');
272
- }
273
- }
274
- if (eventType === 'content_block_delta') {
275
- const delta = event.delta;
276
- const index = event.index;
277
- if (delta.type === 'text_delta' && delta.text) {
278
- textContent += delta.text;
279
- process.stderr.write(`\x1b[36m${delta.text}\x1b[0m`);
280
- }
281
- if (delta.type === 'thinking_delta' && delta.thinking) {
282
- // Thinking — just show indicator, don't spam
283
- }
284
- if (delta.type === 'input_json_delta' && delta.partial_json !== undefined) {
285
- const active = activeToolUses.get(index);
286
- if (active)
287
- active.jsonChunks.push(delta.partial_json);
288
- }
289
- }
290
- if (eventType === 'content_block_stop') {
291
- const index = event.index;
292
- if (inThinking) {
293
- process.stderr.write('\x1b[0m\n');
294
- inThinking = false;
295
- }
296
- const active = activeToolUses.get(index);
297
- if (active) {
298
- activeToolUses.delete(index);
299
- let args = {};
300
- try {
301
- args = JSON.parse(active.jsonChunks.join(''));
302
- }
303
- catch { /* malformed */ }
304
- toolCalls.push({ id: active.id, name: active.name, arguments: args });
305
- }
306
- }
307
- if (eventType === 'message_delta') {
308
- const delta = event.delta;
309
- if (delta.stop_reason === 'tool_use')
310
- finishReason = 'tool_calls';
311
- else if (delta.stop_reason === 'end_turn')
312
- finishReason = 'stop';
313
- else if (delta.stop_reason)
314
- finishReason = delta.stop_reason;
315
- }
316
- if (eventType === 'error') {
317
- const errObj = event.error;
318
- throw new Error(`Anthropic stream error: ${errObj?.message ?? 'unknown'}`);
319
- }
320
- }
321
- }
322
- }
323
- finally {
324
- reader.releaseLock();
325
- }
326
- // Newline after streamed text
327
- if (textContent)
328
- process.stderr.write('\n');
329
- return { text: textContent, toolCalls, finishReason };
330
- }
331
- //# sourceMappingURL=agent-loop.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-loop.js","sourceRoot":"","sources":["../../src/bot/agent-loop.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts DELETED
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}