@botbotgo/common 1.0.0 → 1.0.1
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.
|
@@ -291,12 +291,13 @@ function buildTreeLines(event, payload, currentRunThread, toolCalls) {
|
|
|
291
291
|
if (id) {
|
|
292
292
|
toolCalls.delete(id);
|
|
293
293
|
}
|
|
294
|
+
const fallbackToolName = event.name === "agent.runtime2.tool.call.blocked" ? to : from;
|
|
294
295
|
const icon = event.name === "agent.runtime2.tool.call.done" ? "OK" : event.name === "agent.runtime2.tool.call.blocked" ? "BLOCKED" : "ERROR";
|
|
295
296
|
const combined = compactFields([
|
|
296
|
-
summarizeToolArgs(remembered?.args),
|
|
297
|
+
summarizeToolArgs(remembered?.args ?? asRecord2(payload?.args)),
|
|
297
298
|
details
|
|
298
299
|
]);
|
|
299
|
-
return [`\u251C\u2500 ${icon} ${remembered?.toolName ??
|
|
300
|
+
return [`\u251C\u2500 ${icon} ${remembered?.toolName ?? fallbackToolName}${combined ? ` | ${combined}` : ""}`];
|
|
300
301
|
}
|
|
301
302
|
const prefix = currentRunThread ? "\u251C\u2500" : "\u2022";
|
|
302
303
|
return [`${prefix} ${from} -> ${to} | ${action}${suffix}`];
|
|
@@ -460,4 +461,4 @@ export {
|
|
|
460
461
|
createAgentEventBus,
|
|
461
462
|
createConsoleAgentEventListener
|
|
462
463
|
};
|
|
463
|
-
//# sourceMappingURL=chunk-
|
|
464
|
+
//# sourceMappingURL=chunk-PZOGGHUH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/events/progress-listener.ts","../src/events/runtime2-tree-listener.ts","../src/events/index.ts"],"sourcesContent":["import type { AgentEvent, AgentEventListener } from \"./index.js\";\nimport { asRecord, asTrimmedString, parseJsonObject, shortToolName } from \"../utils/index.js\";\n\ninterface ToolStep {\n action: string;\n startedAtMs: number;\n}\n\ninterface ProgressState {\n runStartedAtMs: number | null;\n startedSteps: number;\n completedSteps: number;\n currentStep: number;\n steps: Map<number, ToolStep>;\n pendingStepNumbers: number[];\n}\n\nexport interface ProgressEventListenerOptions {\n writer?: (line: string) => void;\n runLabelReact?: string;\n runLabelDeep?: string;\n reasonForAction?: (action: string) => string | null;\n}\n\nfunction formatElapsed(ms: number): string {\n return `${Math.max(0, Math.round(ms))}ms`;\n}\n\nfunction formatStepNumber(stepNumber: number): string {\n return String(Math.max(0, stepNumber)).padStart(2, \"0\");\n}\n\nfunction hasAny(record: Record<string, unknown>, keys: string[]): boolean {\n return keys.some((key) => key in record);\n}\n\nfunction summarizeAction(args: unknown, toolName: string, fallback: string): string {\n const record = asRecord(args) ?? parseJsonObject(args);\n if (!record) return fallback;\n const tool = shortToolName(toolName);\n const command = asTrimmedString(record.command);\n const path = asTrimmedString(record.path);\n const isListDirShape = hasAny(record, [\"maxEntries\", \"recursive\", \"maxDepth\", \"includeHidden\"]);\n const isReadTextShape = hasAny(record, [\"maxBytes\", \"startLine\", \"endLine\", \"encoding\"]);\n if (tool === \"runCommand\" && command) return `run command: ${command}`;\n if (tool.includes(\"itermRunCommandInSession\") && command) return `run command: ${command}`;\n if (tool === \"listDir\" || (Boolean(path) && isListDirShape)) {\n if (!path || path === \".\") return \"list directory\";\n return `list directory: ${path}`;\n }\n if (tool === \"readText\" || (Boolean(path) && isReadTextShape)) {\n if (!path) return \"read file\";\n return `read file: ${path}`;\n }\n if (command) return `run command: ${command}`;\n const query = asTrimmedString(record.query);\n if (query) return `search/query: ${query}`;\n if (path) return `read path: ${path}`;\n return fallback;\n}\n\nfunction getResultError(payload: unknown): string | null {\n const payloadRecord = asRecord(payload);\n const result = payloadRecord?.result;\n const resultRecord = asRecord(result) ?? parseJsonObject(result);\n const nestedResult = asRecord(resultRecord?.result);\n return asTrimmedString(nestedResult?.error) ?? asTrimmedString(resultRecord?.error);\n}\n\nfunction getResultPreview(payload: unknown): string | null {\n const payloadRecord = asRecord(payload);\n const directPreview = asTrimmedString(payloadRecord?.resultPreview);\n if (directPreview) return directPreview;\n\n const result = payloadRecord?.result;\n const resultRecord = asRecord(result) ?? parseJsonObject(result);\n const nestedResult = asRecord(resultRecord?.result);\n const preview =\n asTrimmedString(nestedResult?.outputText)\n ?? asTrimmedString(nestedResult?.output)\n ?? asTrimmedString(resultRecord?.output)\n ?? asTrimmedString(resultRecord?.outputText);\n return preview ? preview.replace(/\\s+/g, \" \").trim() : null;\n}\n\nfunction writeProgress(writer: (line: string) => void, state: ProgressState): void {\n writer(` progress ${state.completedSteps}/${state.startedSteps}`);\n}\n\nfunction onRunStart(writer: (line: string) => void, state: ProgressState, runLabelText: string): void {\n state.runStartedAtMs = Date.now();\n state.startedSteps = 0;\n state.completedSteps = 0;\n state.currentStep = 0;\n state.steps.clear();\n state.pendingStepNumbers = [];\n writer(\"\");\n writer(`=== Steps: ${runLabelText} ===`);\n writer(`[${formatStepNumber(0)}] ▶ understand request and plan next action`);\n}\n\nfunction onRunDone(writer: (line: string) => void, state: ProgressState): void {\n const elapsed = state.runStartedAtMs === null ? \"?\" : formatElapsed(Date.now() - state.runStartedAtMs);\n writer(`[${formatStepNumber(0)}] ✓ understand request and plan next action`);\n writeProgress(writer, state);\n writer(`=== Steps complete: ${state.completedSteps} step(s), ${elapsed} ===`);\n writer(\"\");\n}\n\nfunction onToolStart(\n writer: (line: string) => void,\n state: ProgressState,\n event: AgentEvent,\n reasonForAction?: (action: string) => string | null,\n): void {\n state.currentStep += 1;\n state.startedSteps += 1;\n const stepNumber = state.currentStep;\n const payload = asRecord(event.payload);\n const action = summarizeAction(payload?.args, event.to, `invoke tool: ${shortToolName(event.to)}`);\n state.steps.set(stepNumber, { action, startedAtMs: Date.now() });\n state.pendingStepNumbers.push(stepNumber);\n writer(`[${formatStepNumber(stepNumber)}] ▶ ${action}`);\n writer(` tool: ${shortToolName(event.to)}`);\n const reason = reasonForAction?.(action);\n if (reason) writer(` reason: ${reason}`);\n}\n\nfunction onToolDoneWithPayload(writer: (line: string) => void, state: ProgressState, event: AgentEvent): void {\n const stepNumber = state.pendingStepNumbers.shift() ?? state.currentStep;\n const step = state.steps.get(stepNumber);\n const error = getResultError(event.payload);\n const preview = getResultPreview(event.payload);\n const elapsed = step ? formatElapsed(Date.now() - step.startedAtMs) : \"?\";\n if (error) {\n writer(`[${formatStepNumber(stepNumber)}] ✖ ${step?.action ?? \"tool invocation\"}`);\n writer(` error: ${error}`);\n } else {\n writer(`[${formatStepNumber(stepNumber)}] ✓ ${step?.action ?? \"tool invocation\"} (${elapsed})`);\n if (preview) writer(` observation: ${preview}`);\n }\n state.steps.delete(stepNumber);\n state.completedSteps += 1;\n writeProgress(writer, state);\n}\n\nfunction onToolError(writer: (line: string) => void, state: ProgressState, event: AgentEvent): void {\n const stepNumber = state.pendingStepNumbers.shift() ?? state.currentStep;\n const step = state.steps.get(stepNumber);\n const payload = asRecord(event.payload);\n const error = asTrimmedString(payload?.error) ?? \"unknown error\";\n writer(`[${formatStepNumber(stepNumber)}] ✖ ${step?.action ?? \"tool invocation\"}`);\n writer(` error: ${error}`);\n state.steps.delete(stepNumber);\n state.completedSteps += 1;\n writeProgress(writer, state);\n}\n\nexport function createProgressAgentEventListener(options: ProgressEventListenerOptions = {}): AgentEventListener {\n const writer = options.writer ?? console.log;\n const runLabelReact = options.runLabelReact ?? \"analysis\";\n const runLabelDeep = options.runLabelDeep ?? \"deep analysis\";\n\n const state: ProgressState = {\n runStartedAtMs: null,\n startedSteps: 0,\n completedSteps: 0,\n currentStep: 0,\n steps: new Map(),\n pendingStepNumbers: [],\n };\n\n return (event: AgentEvent): void => {\n switch (event.name) {\n case \"agent.react.run.start\":\n onRunStart(writer, state, runLabelReact);\n return;\n case \"agent.deep.run.start\":\n onRunStart(writer, state, runLabelDeep);\n return;\n case \"agent.react.skill.matched\":\n case \"agent.deep.skill.matched\": {\n const payload = asRecord(event.payload);\n const skillName = asTrimmedString(payload?.skill) ?? \"unknown\";\n writer(` skill: ${skillName}`);\n return;\n }\n case \"agent.react.context.truncated\":\n case \"agent.deep.context.truncated\":\n writer(\" context: truncated and compacted\");\n return;\n case \"agent.react.tool.invoke.start\":\n onToolStart(writer, state, event, options.reasonForAction);\n return;\n case \"agent.react.tool.invoke.done\":\n onToolDoneWithPayload(writer, state, event);\n return;\n case \"agent.react.tool.invoke.error\":\n onToolError(writer, state, event);\n return;\n case \"agent.react.memory.write.start\":\n writer(\" memory: write started\");\n return;\n case \"agent.react.memory.write.done\":\n writer(\" memory: write completed\");\n return;\n case \"agent.react.memory.write.error\":\n writer(\" memory: write failed\");\n return;\n case \"agent.react.ptc.retry\": {\n const payload = asRecord(event.payload);\n const retry = payload?.retry;\n const reason = asTrimmedString(payload?.reason);\n writer(` planning retry: attempt ${String(retry ?? \"?\")}${reason ? `, reason=${reason}` : \"\"}`);\n return;\n }\n case \"agent.react.run.done\":\n case \"agent.deep.run.done\":\n onRunDone(writer, state);\n return;\n default:\n return;\n }\n };\n}\n","import type { AgentEvent, AgentEventListener } from \"./index.js\";\n\nexport interface Runtime2EventDebugConfig {\n run?: boolean;\n workspace?: boolean;\n toolCall?: boolean;\n stream?: boolean;\n close?: boolean;\n}\n\nexport interface Runtime2EventRuntimeConfig {\n debug?: Runtime2EventDebugConfig;\n eventLogLevel?: \"silent\" | \"lifecycle\" | \"tools\" | \"verbose\";\n}\n\nexport interface Runtime2TreeEventListenerOptions {\n runtimeConfig?: Runtime2EventRuntimeConfig;\n writer?: (line: string) => void;\n}\n\ninterface ResolvedDebugConfig {\n run: boolean;\n workspace: boolean;\n toolCall: boolean;\n stream: boolean;\n close: boolean;\n}\n\nexport function createRuntime2TreeEventListener(\n options: Runtime2TreeEventListenerOptions = {}\n): AgentEventListener {\n const writer = options.writer ?? console.error;\n const debugConfig = resolveRuntime2DebugConfig(options.runtimeConfig);\n let currentRunThread: string | null = null;\n const toolCalls = new Map<string, { toolName: string; args?: Record<string, unknown> }>();\n\n return (event: AgentEvent): void => {\n const payload = asRecord(event.payload);\n if (shouldSkipRuntime2Event(event.name, debugConfig)) {\n return;\n }\n\n const lines = buildTreeLines(event, payload, currentRunThread, toolCalls);\n if (event.name === \"agent.runtime2.run.start\") {\n currentRunThread = typeof payload?.threadId === \"string\" ? payload.threadId : null;\n toolCalls.clear();\n } else if (event.name === \"agent.runtime2.run.done\" || event.name === \"agent.runtime2.run.error\") {\n currentRunThread = null;\n toolCalls.clear();\n }\n\n for (const line of lines) {\n writer(line);\n }\n };\n}\n\nexport function resolveRuntime2DebugConfig(\n runtimeConfig?: Runtime2EventRuntimeConfig\n): ResolvedDebugConfig {\n if (runtimeConfig?.debug) {\n return {\n run: runtimeConfig.debug.run ?? true,\n workspace: runtimeConfig.debug.workspace ?? true,\n toolCall: runtimeConfig.debug.toolCall ?? true,\n stream: runtimeConfig.debug.stream ?? false,\n close: runtimeConfig.debug.close ?? true,\n };\n }\n\n switch (runtimeConfig?.eventLogLevel ?? \"tools\") {\n case \"silent\":\n return { run: false, workspace: false, toolCall: false, stream: false, close: false };\n case \"lifecycle\":\n return { run: true, workspace: true, toolCall: false, stream: false, close: true };\n case \"verbose\":\n return { run: true, workspace: true, toolCall: true, stream: true, close: true };\n case \"tools\":\n default:\n return { run: true, workspace: true, toolCall: true, stream: false, close: true };\n }\n}\n\nfunction shouldSkipRuntime2Event(name: string, debugConfig: ResolvedDebugConfig): boolean {\n if (name.startsWith(\"agent.runtime2.stream.\")) {\n return !debugConfig.stream;\n }\n if (name.startsWith(\"agent.runtime2.tool.call.\")) {\n return !debugConfig.toolCall;\n }\n if (name.startsWith(\"agent.runtime2.workspace.\")) {\n if (name === \"agent.runtime2.workspace.prepare\" || name === \"agent.runtime2.workspace.run.update\") {\n return true;\n }\n return !debugConfig.workspace;\n }\n if (name.startsWith(\"agent.runtime2.run.\")) {\n if (name === \"agent.runtime2.run.prepare\") {\n return true;\n }\n return !debugConfig.run;\n }\n if (name.startsWith(\"agent.runtime2.close.\")) {\n return !debugConfig.close;\n }\n return false;\n}\n\nfunction buildTreeLines(\n event: Pick<AgentEvent, \"name\" | \"from\" | \"to\">,\n payload: Record<string, unknown> | undefined,\n currentRunThread: string | null,\n toolCalls: Map<string, { toolName: string; args?: Record<string, unknown> }>,\n): string[] {\n const from = shortComponent(event.from);\n const to = shortComponent(event.to);\n const action = event.name.replace(/^agent\\.runtime2\\./, \"\");\n const details = summarizePayload(event.name, payload);\n const suffix = details ? ` | ${details}` : \"\";\n\n if (event.name === \"agent.runtime2.run.start\") {\n return [\n `run ${typeof payload?.threadId === \"string\" ? payload.threadId : \"\"}`.trim(),\n `├─ ${from} -> ${to} | ${action}${suffix}`,\n ];\n }\n\n if (event.name === \"agent.runtime2.run.done\" || event.name === \"agent.runtime2.run.error\") {\n return [`└─ ${from} -> ${to} | ${action}${suffix}`];\n }\n\n if (event.name === \"agent.runtime2.tool.call.start\") {\n const id = typeof payload?.toolCallId === \"string\" ? payload.toolCallId : \"\";\n if (id) {\n toolCalls.set(id, {\n toolName: to,\n args: asRecord(payload?.args),\n });\n }\n return [];\n }\n\n if (\n event.name === \"agent.runtime2.tool.call.done\"\n || event.name === \"agent.runtime2.tool.call.error\"\n || event.name === \"agent.runtime2.tool.call.blocked\"\n ) {\n const id = typeof payload?.toolCallId === \"string\" ? payload.toolCallId : \"\";\n const remembered = id ? toolCalls.get(id) : undefined;\n if (id) {\n toolCalls.delete(id);\n }\n const fallbackToolName = event.name === \"agent.runtime2.tool.call.blocked\" ? to : from;\n const icon = event.name === \"agent.runtime2.tool.call.done\"\n ? \"OK\"\n : event.name === \"agent.runtime2.tool.call.blocked\"\n ? \"BLOCKED\"\n : \"ERROR\";\n const combined = compactFields([\n summarizeToolArgs(remembered?.args ?? asRecord(payload?.args)),\n details,\n ]);\n return [`├─ ${icon} ${remembered?.toolName ?? fallbackToolName}${combined ? ` | ${combined}` : \"\"}`];\n }\n\n const prefix = currentRunThread ? \"├─\" : \"•\";\n return [`${prefix} ${from} -> ${to} | ${action}${suffix}`];\n}\n\nfunction summarizePayload(name: string, payload?: Record<string, unknown>): string | null {\n switch (name) {\n case \"agent.runtime2.run.start\":\n return typeof payload?.threadId === \"string\" ? `thread=${payload.threadId}` : null;\n case \"agent.runtime2.run.done\":\n return compactFields([\n formatField(\"steps\", payload?.stepCount),\n formatDuration(payload?.durationMs),\n formatField(\"summary\", payload?.lastSummary),\n ]);\n case \"agent.runtime2.run.error\":\n return compactFields([\n formatField(\"summary\", payload?.lastSummary),\n formatField(\"error\", payload?.error),\n ]);\n case \"agent.runtime2.stream.summary\":\n return typeof payload?.summary === \"string\" ? payload.summary : null;\n case \"agent.runtime2.stream.heartbeat\":\n return formatDuration(payload?.elapsedMs);\n case \"agent.runtime2.tool.call.done\":\n case \"agent.runtime2.tool.call.error\":\n case \"agent.runtime2.tool.call.blocked\":\n return compactFields([\n formatDuration(payload?.durationMs),\n formatField(\"reason\", payload?.reason),\n formatField(\"error\", payload?.error),\n ]);\n case \"agent.runtime2.workspace.run.update\":\n case \"agent.runtime2.workspace.run.finish\":\n return compactFields([\n formatField(\"steps\", payload?.stepCount),\n formatField(\"summary\", payload?.lastSummary),\n formatField(\"status\", payload?.status),\n ]);\n case \"agent.runtime2.run.retry.empty\":\n case \"agent.runtime2.run.retry.incomplete\":\n case \"agent.runtime2.run.retry.idle_timeout\":\n case \"agent.runtime2.run.retry.transient_model\":\n case \"agent.runtime2.run.retry.tool_call\":\n return compactFields([\n formatField(\"attempt\", formatAttempt(payload?.attempt, payload?.maxRetries)),\n formatField(\"summary\", payload?.lastSummary),\n formatField(\"error\", payload?.error),\n ]);\n default:\n return compactFields([\n formatField(\"thread\", payload?.threadId),\n formatField(\"steps\", payload?.stepCount),\n formatField(\"status\", payload?.status),\n ]);\n }\n}\n\nfunction summarizeToolArgs(args: Record<string, unknown> | undefined): string | null {\n if (!args) {\n return null;\n }\n\n return compactFields([\n formatArg(\"path\", args.file_path ?? args.path),\n formatArg(\"query\", args.query),\n formatArg(\"symbol\", args.symbol),\n formatArg(\"ticker\", args.ticker),\n formatArg(\"command\", args.command),\n formatArg(\"subagent_type\", args.subagent_type),\n ]);\n}\n\nfunction formatArg(key: string, value: unknown): string | null {\n if (typeof value !== \"string\" && typeof value !== \"number\" && typeof value !== \"boolean\") {\n return null;\n }\n const text = String(value).trim();\n if (!text) {\n return null;\n }\n return `${key}=${truncate(text, 80)}`;\n}\n\nfunction formatField(key: string, value: unknown): string | null {\n if (typeof value !== \"string\" && typeof value !== \"number\" && typeof value !== \"boolean\") {\n return null;\n }\n const text = String(value).trim();\n if (!text) {\n return null;\n }\n return `${key}=${truncate(text, 80)}`;\n}\n\nfunction formatAttempt(attempt: unknown, maxRetries: unknown): string | null {\n if (typeof attempt !== \"number\") {\n return null;\n }\n return typeof maxRetries === \"number\" ? `${attempt}/${maxRetries}` : String(attempt);\n}\n\nfunction formatDuration(durationMs: unknown): string | null {\n if (typeof durationMs !== \"number\") {\n return null;\n }\n if (durationMs < 1_000) {\n return `elapsed=${Math.round(durationMs)}ms`;\n }\n if (durationMs < 10_000) {\n return `elapsed=${(durationMs / 1000).toFixed(2)}s`;\n }\n return `elapsed=${(durationMs / 1000).toFixed(1)}s`;\n}\n\nfunction shortComponent(value: string | undefined): string {\n return (value ?? \"?\").replace(/^agent-runtime2\\./, \"\");\n}\n\nfunction compactFields(fields: Array<string | null>): string | null {\n const items = fields.filter((field): field is string => Boolean(field));\n return items.length > 0 ? items.join(\", \") : null;\n}\n\nfunction truncate(value: string, maxLength: number): string {\n return value.length > maxLength ? `${value.slice(0, maxLength - 3)}...` : value;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? value as Record<string, unknown>\n : undefined;\n}\n","import { getDefaultAgentContext, AgentContextTokens } from \"../context/index.js\";\n\nexport interface AgentEvent<TPayload = unknown> {\n id: string;\n name: string;\n from: string;\n to: string;\n at: string;\n payload?: TPayload;\n}\n\nexport interface AgentEventBus {\n publish<TPayload = unknown>(event: Omit<AgentEvent<TPayload>, \"id\" | \"at\">): AgentEvent<TPayload>;\n subscribe(listener: AgentEventListener): () => void;\n}\n\nexport type AgentEventListener = (event: AgentEvent) => void;\n\nclass DefaultAgentEventBus implements AgentEventBus {\n private listeners = new Set<AgentEventListener>();\n\n publish<TPayload = unknown>(\n event: Omit<AgentEvent<TPayload>, \"id\" | \"at\">\n ): AgentEvent<TPayload> {\n const resolved: AgentEvent<TPayload> = {\n ...event,\n id: `${Date.now()}-${Math.random().toString(36).slice(2, 10)}`,\n at: new Date().toISOString(),\n };\n for (const listener of this.listeners) {\n try {\n listener(resolved);\n } catch {\n // Listener failures must not break agent runtime.\n }\n }\n return resolved;\n }\n\n subscribe(listener: AgentEventListener): () => void {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n }\n}\n\nexport function createAgentEventBus(): AgentEventBus {\n const bus = new DefaultAgentEventBus();\n getDefaultAgentContext().set(AgentContextTokens.EventBus, bus);\n return bus;\n}\n\nexport function createConsoleAgentEventListener(\n writer: (line: string) => void = console.error\n): AgentEventListener {\n return (event) => {\n writer(`[${event.at}] ${event.from} -> ${event.to} ${event.name}`);\n };\n}\n\nexport {\n createProgressAgentEventListener,\n type ProgressEventListenerOptions,\n} from \"./progress-listener.js\";\nexport {\n createRuntime2TreeEventListener,\n resolveRuntime2DebugConfig,\n type Runtime2EventDebugConfig,\n type Runtime2EventRuntimeConfig,\n type Runtime2TreeEventListenerOptions,\n} from \"./runtime2-tree-listener.js\";\n"],"mappings":"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","names":["asRecord"]}
|
package/dist/events/index.js
CHANGED
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
createProgressAgentEventListener,
|
|
5
5
|
createRuntime2TreeEventListener,
|
|
6
6
|
resolveRuntime2DebugConfig
|
|
7
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-PZOGGHUH.js";
|
|
8
8
|
import "../chunk-OTWARMTU.js";
|
|
9
9
|
import "../chunk-X4TDNR4V.js";
|
|
10
10
|
import "../chunk-H5BG6SXW.js";
|
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/events/progress-listener.ts","../src/events/runtime2-tree-listener.ts","../src/events/index.ts"],"sourcesContent":["import type { AgentEvent, AgentEventListener } from \"./index.js\";\nimport { asRecord, asTrimmedString, parseJsonObject, shortToolName } from \"../utils/index.js\";\n\ninterface ToolStep {\n action: string;\n startedAtMs: number;\n}\n\ninterface ProgressState {\n runStartedAtMs: number | null;\n startedSteps: number;\n completedSteps: number;\n currentStep: number;\n steps: Map<number, ToolStep>;\n pendingStepNumbers: number[];\n}\n\nexport interface ProgressEventListenerOptions {\n writer?: (line: string) => void;\n runLabelReact?: string;\n runLabelDeep?: string;\n reasonForAction?: (action: string) => string | null;\n}\n\nfunction formatElapsed(ms: number): string {\n return `${Math.max(0, Math.round(ms))}ms`;\n}\n\nfunction formatStepNumber(stepNumber: number): string {\n return String(Math.max(0, stepNumber)).padStart(2, \"0\");\n}\n\nfunction hasAny(record: Record<string, unknown>, keys: string[]): boolean {\n return keys.some((key) => key in record);\n}\n\nfunction summarizeAction(args: unknown, toolName: string, fallback: string): string {\n const record = asRecord(args) ?? parseJsonObject(args);\n if (!record) return fallback;\n const tool = shortToolName(toolName);\n const command = asTrimmedString(record.command);\n const path = asTrimmedString(record.path);\n const isListDirShape = hasAny(record, [\"maxEntries\", \"recursive\", \"maxDepth\", \"includeHidden\"]);\n const isReadTextShape = hasAny(record, [\"maxBytes\", \"startLine\", \"endLine\", \"encoding\"]);\n if (tool === \"runCommand\" && command) return `run command: ${command}`;\n if (tool.includes(\"itermRunCommandInSession\") && command) return `run command: ${command}`;\n if (tool === \"listDir\" || (Boolean(path) && isListDirShape)) {\n if (!path || path === \".\") return \"list directory\";\n return `list directory: ${path}`;\n }\n if (tool === \"readText\" || (Boolean(path) && isReadTextShape)) {\n if (!path) return \"read file\";\n return `read file: ${path}`;\n }\n if (command) return `run command: ${command}`;\n const query = asTrimmedString(record.query);\n if (query) return `search/query: ${query}`;\n if (path) return `read path: ${path}`;\n return fallback;\n}\n\nfunction getResultError(payload: unknown): string | null {\n const payloadRecord = asRecord(payload);\n const result = payloadRecord?.result;\n const resultRecord = asRecord(result) ?? parseJsonObject(result);\n const nestedResult = asRecord(resultRecord?.result);\n return asTrimmedString(nestedResult?.error) ?? asTrimmedString(resultRecord?.error);\n}\n\nfunction getResultPreview(payload: unknown): string | null {\n const payloadRecord = asRecord(payload);\n const directPreview = asTrimmedString(payloadRecord?.resultPreview);\n if (directPreview) return directPreview;\n\n const result = payloadRecord?.result;\n const resultRecord = asRecord(result) ?? parseJsonObject(result);\n const nestedResult = asRecord(resultRecord?.result);\n const preview =\n asTrimmedString(nestedResult?.outputText)\n ?? asTrimmedString(nestedResult?.output)\n ?? asTrimmedString(resultRecord?.output)\n ?? asTrimmedString(resultRecord?.outputText);\n return preview ? preview.replace(/\\s+/g, \" \").trim() : null;\n}\n\nfunction writeProgress(writer: (line: string) => void, state: ProgressState): void {\n writer(` progress ${state.completedSteps}/${state.startedSteps}`);\n}\n\nfunction onRunStart(writer: (line: string) => void, state: ProgressState, runLabelText: string): void {\n state.runStartedAtMs = Date.now();\n state.startedSteps = 0;\n state.completedSteps = 0;\n state.currentStep = 0;\n state.steps.clear();\n state.pendingStepNumbers = [];\n writer(\"\");\n writer(`=== Steps: ${runLabelText} ===`);\n writer(`[${formatStepNumber(0)}] ▶ understand request and plan next action`);\n}\n\nfunction onRunDone(writer: (line: string) => void, state: ProgressState): void {\n const elapsed = state.runStartedAtMs === null ? \"?\" : formatElapsed(Date.now() - state.runStartedAtMs);\n writer(`[${formatStepNumber(0)}] ✓ understand request and plan next action`);\n writeProgress(writer, state);\n writer(`=== Steps complete: ${state.completedSteps} step(s), ${elapsed} ===`);\n writer(\"\");\n}\n\nfunction onToolStart(\n writer: (line: string) => void,\n state: ProgressState,\n event: AgentEvent,\n reasonForAction?: (action: string) => string | null,\n): void {\n state.currentStep += 1;\n state.startedSteps += 1;\n const stepNumber = state.currentStep;\n const payload = asRecord(event.payload);\n const action = summarizeAction(payload?.args, event.to, `invoke tool: ${shortToolName(event.to)}`);\n state.steps.set(stepNumber, { action, startedAtMs: Date.now() });\n state.pendingStepNumbers.push(stepNumber);\n writer(`[${formatStepNumber(stepNumber)}] ▶ ${action}`);\n writer(` tool: ${shortToolName(event.to)}`);\n const reason = reasonForAction?.(action);\n if (reason) writer(` reason: ${reason}`);\n}\n\nfunction onToolDoneWithPayload(writer: (line: string) => void, state: ProgressState, event: AgentEvent): void {\n const stepNumber = state.pendingStepNumbers.shift() ?? state.currentStep;\n const step = state.steps.get(stepNumber);\n const error = getResultError(event.payload);\n const preview = getResultPreview(event.payload);\n const elapsed = step ? formatElapsed(Date.now() - step.startedAtMs) : \"?\";\n if (error) {\n writer(`[${formatStepNumber(stepNumber)}] ✖ ${step?.action ?? \"tool invocation\"}`);\n writer(` error: ${error}`);\n } else {\n writer(`[${formatStepNumber(stepNumber)}] ✓ ${step?.action ?? \"tool invocation\"} (${elapsed})`);\n if (preview) writer(` observation: ${preview}`);\n }\n state.steps.delete(stepNumber);\n state.completedSteps += 1;\n writeProgress(writer, state);\n}\n\nfunction onToolError(writer: (line: string) => void, state: ProgressState, event: AgentEvent): void {\n const stepNumber = state.pendingStepNumbers.shift() ?? state.currentStep;\n const step = state.steps.get(stepNumber);\n const payload = asRecord(event.payload);\n const error = asTrimmedString(payload?.error) ?? \"unknown error\";\n writer(`[${formatStepNumber(stepNumber)}] ✖ ${step?.action ?? \"tool invocation\"}`);\n writer(` error: ${error}`);\n state.steps.delete(stepNumber);\n state.completedSteps += 1;\n writeProgress(writer, state);\n}\n\nexport function createProgressAgentEventListener(options: ProgressEventListenerOptions = {}): AgentEventListener {\n const writer = options.writer ?? console.log;\n const runLabelReact = options.runLabelReact ?? \"analysis\";\n const runLabelDeep = options.runLabelDeep ?? \"deep analysis\";\n\n const state: ProgressState = {\n runStartedAtMs: null,\n startedSteps: 0,\n completedSteps: 0,\n currentStep: 0,\n steps: new Map(),\n pendingStepNumbers: [],\n };\n\n return (event: AgentEvent): void => {\n switch (event.name) {\n case \"agent.react.run.start\":\n onRunStart(writer, state, runLabelReact);\n return;\n case \"agent.deep.run.start\":\n onRunStart(writer, state, runLabelDeep);\n return;\n case \"agent.react.skill.matched\":\n case \"agent.deep.skill.matched\": {\n const payload = asRecord(event.payload);\n const skillName = asTrimmedString(payload?.skill) ?? \"unknown\";\n writer(` skill: ${skillName}`);\n return;\n }\n case \"agent.react.context.truncated\":\n case \"agent.deep.context.truncated\":\n writer(\" context: truncated and compacted\");\n return;\n case \"agent.react.tool.invoke.start\":\n onToolStart(writer, state, event, options.reasonForAction);\n return;\n case \"agent.react.tool.invoke.done\":\n onToolDoneWithPayload(writer, state, event);\n return;\n case \"agent.react.tool.invoke.error\":\n onToolError(writer, state, event);\n return;\n case \"agent.react.memory.write.start\":\n writer(\" memory: write started\");\n return;\n case \"agent.react.memory.write.done\":\n writer(\" memory: write completed\");\n return;\n case \"agent.react.memory.write.error\":\n writer(\" memory: write failed\");\n return;\n case \"agent.react.ptc.retry\": {\n const payload = asRecord(event.payload);\n const retry = payload?.retry;\n const reason = asTrimmedString(payload?.reason);\n writer(` planning retry: attempt ${String(retry ?? \"?\")}${reason ? `, reason=${reason}` : \"\"}`);\n return;\n }\n case \"agent.react.run.done\":\n case \"agent.deep.run.done\":\n onRunDone(writer, state);\n return;\n default:\n return;\n }\n };\n}\n","import type { AgentEvent, AgentEventListener } from \"./index.js\";\n\nexport interface Runtime2EventDebugConfig {\n run?: boolean;\n workspace?: boolean;\n toolCall?: boolean;\n stream?: boolean;\n close?: boolean;\n}\n\nexport interface Runtime2EventRuntimeConfig {\n debug?: Runtime2EventDebugConfig;\n eventLogLevel?: \"silent\" | \"lifecycle\" | \"tools\" | \"verbose\";\n}\n\nexport interface Runtime2TreeEventListenerOptions {\n runtimeConfig?: Runtime2EventRuntimeConfig;\n writer?: (line: string) => void;\n}\n\ninterface ResolvedDebugConfig {\n run: boolean;\n workspace: boolean;\n toolCall: boolean;\n stream: boolean;\n close: boolean;\n}\n\nexport function createRuntime2TreeEventListener(\n options: Runtime2TreeEventListenerOptions = {}\n): AgentEventListener {\n const writer = options.writer ?? console.error;\n const debugConfig = resolveRuntime2DebugConfig(options.runtimeConfig);\n let currentRunThread: string | null = null;\n const toolCalls = new Map<string, { toolName: string; args?: Record<string, unknown> }>();\n\n return (event: AgentEvent): void => {\n const payload = asRecord(event.payload);\n if (shouldSkipRuntime2Event(event.name, debugConfig)) {\n return;\n }\n\n const lines = buildTreeLines(event, payload, currentRunThread, toolCalls);\n if (event.name === \"agent.runtime2.run.start\") {\n currentRunThread = typeof payload?.threadId === \"string\" ? payload.threadId : null;\n toolCalls.clear();\n } else if (event.name === \"agent.runtime2.run.done\" || event.name === \"agent.runtime2.run.error\") {\n currentRunThread = null;\n toolCalls.clear();\n }\n\n for (const line of lines) {\n writer(line);\n }\n };\n}\n\nexport function resolveRuntime2DebugConfig(\n runtimeConfig?: Runtime2EventRuntimeConfig\n): ResolvedDebugConfig {\n if (runtimeConfig?.debug) {\n return {\n run: runtimeConfig.debug.run ?? true,\n workspace: runtimeConfig.debug.workspace ?? true,\n toolCall: runtimeConfig.debug.toolCall ?? true,\n stream: runtimeConfig.debug.stream ?? false,\n close: runtimeConfig.debug.close ?? true,\n };\n }\n\n switch (runtimeConfig?.eventLogLevel ?? \"tools\") {\n case \"silent\":\n return { run: false, workspace: false, toolCall: false, stream: false, close: false };\n case \"lifecycle\":\n return { run: true, workspace: true, toolCall: false, stream: false, close: true };\n case \"verbose\":\n return { run: true, workspace: true, toolCall: true, stream: true, close: true };\n case \"tools\":\n default:\n return { run: true, workspace: true, toolCall: true, stream: false, close: true };\n }\n}\n\nfunction shouldSkipRuntime2Event(name: string, debugConfig: ResolvedDebugConfig): boolean {\n if (name.startsWith(\"agent.runtime2.stream.\")) {\n return !debugConfig.stream;\n }\n if (name.startsWith(\"agent.runtime2.tool.call.\")) {\n return !debugConfig.toolCall;\n }\n if (name.startsWith(\"agent.runtime2.workspace.\")) {\n if (name === \"agent.runtime2.workspace.prepare\" || name === \"agent.runtime2.workspace.run.update\") {\n return true;\n }\n return !debugConfig.workspace;\n }\n if (name.startsWith(\"agent.runtime2.run.\")) {\n if (name === \"agent.runtime2.run.prepare\") {\n return true;\n }\n return !debugConfig.run;\n }\n if (name.startsWith(\"agent.runtime2.close.\")) {\n return !debugConfig.close;\n }\n return false;\n}\n\nfunction buildTreeLines(\n event: Pick<AgentEvent, \"name\" | \"from\" | \"to\">,\n payload: Record<string, unknown> | undefined,\n currentRunThread: string | null,\n toolCalls: Map<string, { toolName: string; args?: Record<string, unknown> }>,\n): string[] {\n const from = shortComponent(event.from);\n const to = shortComponent(event.to);\n const action = event.name.replace(/^agent\\.runtime2\\./, \"\");\n const details = summarizePayload(event.name, payload);\n const suffix = details ? ` | ${details}` : \"\";\n\n if (event.name === \"agent.runtime2.run.start\") {\n return [\n `run ${typeof payload?.threadId === \"string\" ? payload.threadId : \"\"}`.trim(),\n `├─ ${from} -> ${to} | ${action}${suffix}`,\n ];\n }\n\n if (event.name === \"agent.runtime2.run.done\" || event.name === \"agent.runtime2.run.error\") {\n return [`└─ ${from} -> ${to} | ${action}${suffix}`];\n }\n\n if (event.name === \"agent.runtime2.tool.call.start\") {\n const id = typeof payload?.toolCallId === \"string\" ? payload.toolCallId : \"\";\n if (id) {\n toolCalls.set(id, {\n toolName: to,\n args: asRecord(payload?.args),\n });\n }\n return [];\n }\n\n if (\n event.name === \"agent.runtime2.tool.call.done\"\n || event.name === \"agent.runtime2.tool.call.error\"\n || event.name === \"agent.runtime2.tool.call.blocked\"\n ) {\n const id = typeof payload?.toolCallId === \"string\" ? payload.toolCallId : \"\";\n const remembered = id ? toolCalls.get(id) : undefined;\n if (id) {\n toolCalls.delete(id);\n }\n const icon = event.name === \"agent.runtime2.tool.call.done\"\n ? \"OK\"\n : event.name === \"agent.runtime2.tool.call.blocked\"\n ? \"BLOCKED\"\n : \"ERROR\";\n const combined = compactFields([\n summarizeToolArgs(remembered?.args),\n details,\n ]);\n return [`├─ ${icon} ${remembered?.toolName ?? from}${combined ? ` | ${combined}` : \"\"}`];\n }\n\n const prefix = currentRunThread ? \"├─\" : \"•\";\n return [`${prefix} ${from} -> ${to} | ${action}${suffix}`];\n}\n\nfunction summarizePayload(name: string, payload?: Record<string, unknown>): string | null {\n switch (name) {\n case \"agent.runtime2.run.start\":\n return typeof payload?.threadId === \"string\" ? `thread=${payload.threadId}` : null;\n case \"agent.runtime2.run.done\":\n return compactFields([\n formatField(\"steps\", payload?.stepCount),\n formatDuration(payload?.durationMs),\n formatField(\"summary\", payload?.lastSummary),\n ]);\n case \"agent.runtime2.run.error\":\n return compactFields([\n formatField(\"summary\", payload?.lastSummary),\n formatField(\"error\", payload?.error),\n ]);\n case \"agent.runtime2.stream.summary\":\n return typeof payload?.summary === \"string\" ? payload.summary : null;\n case \"agent.runtime2.stream.heartbeat\":\n return formatDuration(payload?.elapsedMs);\n case \"agent.runtime2.tool.call.done\":\n case \"agent.runtime2.tool.call.error\":\n case \"agent.runtime2.tool.call.blocked\":\n return compactFields([\n formatDuration(payload?.durationMs),\n formatField(\"reason\", payload?.reason),\n formatField(\"error\", payload?.error),\n ]);\n case \"agent.runtime2.workspace.run.update\":\n case \"agent.runtime2.workspace.run.finish\":\n return compactFields([\n formatField(\"steps\", payload?.stepCount),\n formatField(\"summary\", payload?.lastSummary),\n formatField(\"status\", payload?.status),\n ]);\n case \"agent.runtime2.run.retry.empty\":\n case \"agent.runtime2.run.retry.incomplete\":\n case \"agent.runtime2.run.retry.idle_timeout\":\n case \"agent.runtime2.run.retry.transient_model\":\n case \"agent.runtime2.run.retry.tool_call\":\n return compactFields([\n formatField(\"attempt\", formatAttempt(payload?.attempt, payload?.maxRetries)),\n formatField(\"summary\", payload?.lastSummary),\n formatField(\"error\", payload?.error),\n ]);\n default:\n return compactFields([\n formatField(\"thread\", payload?.threadId),\n formatField(\"steps\", payload?.stepCount),\n formatField(\"status\", payload?.status),\n ]);\n }\n}\n\nfunction summarizeToolArgs(args: Record<string, unknown> | undefined): string | null {\n if (!args) {\n return null;\n }\n\n return compactFields([\n formatArg(\"path\", args.file_path ?? args.path),\n formatArg(\"query\", args.query),\n formatArg(\"symbol\", args.symbol),\n formatArg(\"ticker\", args.ticker),\n formatArg(\"command\", args.command),\n formatArg(\"subagent_type\", args.subagent_type),\n ]);\n}\n\nfunction formatArg(key: string, value: unknown): string | null {\n if (typeof value !== \"string\" && typeof value !== \"number\" && typeof value !== \"boolean\") {\n return null;\n }\n const text = String(value).trim();\n if (!text) {\n return null;\n }\n return `${key}=${truncate(text, 80)}`;\n}\n\nfunction formatField(key: string, value: unknown): string | null {\n if (typeof value !== \"string\" && typeof value !== \"number\" && typeof value !== \"boolean\") {\n return null;\n }\n const text = String(value).trim();\n if (!text) {\n return null;\n }\n return `${key}=${truncate(text, 80)}`;\n}\n\nfunction formatAttempt(attempt: unknown, maxRetries: unknown): string | null {\n if (typeof attempt !== \"number\") {\n return null;\n }\n return typeof maxRetries === \"number\" ? `${attempt}/${maxRetries}` : String(attempt);\n}\n\nfunction formatDuration(durationMs: unknown): string | null {\n if (typeof durationMs !== \"number\") {\n return null;\n }\n if (durationMs < 1_000) {\n return `elapsed=${Math.round(durationMs)}ms`;\n }\n if (durationMs < 10_000) {\n return `elapsed=${(durationMs / 1000).toFixed(2)}s`;\n }\n return `elapsed=${(durationMs / 1000).toFixed(1)}s`;\n}\n\nfunction shortComponent(value: string | undefined): string {\n return (value ?? \"?\").replace(/^agent-runtime2\\./, \"\");\n}\n\nfunction compactFields(fields: Array<string | null>): string | null {\n const items = fields.filter((field): field is string => Boolean(field));\n return items.length > 0 ? items.join(\", \") : null;\n}\n\nfunction truncate(value: string, maxLength: number): string {\n return value.length > maxLength ? `${value.slice(0, maxLength - 3)}...` : value;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? value as Record<string, unknown>\n : undefined;\n}\n","import { getDefaultAgentContext, AgentContextTokens } from \"../context/index.js\";\n\nexport interface AgentEvent<TPayload = unknown> {\n id: string;\n name: string;\n from: string;\n to: string;\n at: string;\n payload?: TPayload;\n}\n\nexport interface AgentEventBus {\n publish<TPayload = unknown>(event: Omit<AgentEvent<TPayload>, \"id\" | \"at\">): AgentEvent<TPayload>;\n subscribe(listener: AgentEventListener): () => void;\n}\n\nexport type AgentEventListener = (event: AgentEvent) => void;\n\nclass DefaultAgentEventBus implements AgentEventBus {\n private listeners = new Set<AgentEventListener>();\n\n publish<TPayload = unknown>(\n event: Omit<AgentEvent<TPayload>, \"id\" | \"at\">\n ): AgentEvent<TPayload> {\n const resolved: AgentEvent<TPayload> = {\n ...event,\n id: `${Date.now()}-${Math.random().toString(36).slice(2, 10)}`,\n at: new Date().toISOString(),\n };\n for (const listener of this.listeners) {\n try {\n listener(resolved);\n } catch {\n // Listener failures must not break agent runtime.\n }\n }\n return resolved;\n }\n\n subscribe(listener: AgentEventListener): () => void {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n }\n}\n\nexport function createAgentEventBus(): AgentEventBus {\n const bus = new DefaultAgentEventBus();\n getDefaultAgentContext().set(AgentContextTokens.EventBus, bus);\n return bus;\n}\n\nexport function createConsoleAgentEventListener(\n writer: (line: string) => void = console.error\n): AgentEventListener {\n return (event) => {\n writer(`[${event.at}] ${event.from} -> ${event.to} ${event.name}`);\n };\n}\n\nexport {\n createProgressAgentEventListener,\n type ProgressEventListenerOptions,\n} from \"./progress-listener.js\";\nexport {\n createRuntime2TreeEventListener,\n resolveRuntime2DebugConfig,\n type Runtime2EventDebugConfig,\n type Runtime2EventRuntimeConfig,\n type Runtime2TreeEventListenerOptions,\n} from \"./runtime2-tree-listener.js\";\n"],"mappings":"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","names":["asRecord"]}
|