@luckydraw/cumulus 0.27.41 → 0.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/dist/gateway/adapters/webchat.d.ts +5 -7
  2. package/dist/gateway/adapters/webchat.d.ts.map +1 -1
  3. package/dist/gateway/adapters/webchat.js +204 -57
  4. package/dist/gateway/adapters/webchat.js.map +1 -1
  5. package/dist/gateway/config.d.ts +48 -0
  6. package/dist/gateway/config.d.ts.map +1 -1
  7. package/dist/gateway/config.js +90 -0
  8. package/dist/gateway/config.js.map +1 -1
  9. package/dist/gateway/daemon.d.ts.map +1 -1
  10. package/dist/gateway/daemon.js +268 -27
  11. package/dist/gateway/daemon.js.map +1 -1
  12. package/dist/gateway/gateway-agents-mcp.js +570 -31
  13. package/dist/gateway/gateway-agents-mcp.js.map +1 -1
  14. package/dist/gateway/hooks.d.ts +101 -0
  15. package/dist/gateway/hooks.d.ts.map +1 -0
  16. package/dist/gateway/hooks.js +200 -0
  17. package/dist/gateway/hooks.js.map +1 -0
  18. package/dist/gateway/scheduler.d.ts +50 -0
  19. package/dist/gateway/scheduler.d.ts.map +1 -0
  20. package/dist/gateway/scheduler.js +263 -0
  21. package/dist/gateway/scheduler.js.map +1 -0
  22. package/dist/gateway/server.d.ts +16 -1
  23. package/dist/gateway/server.d.ts.map +1 -1
  24. package/dist/gateway/server.js +451 -22
  25. package/dist/gateway/server.js.map +1 -1
  26. package/dist/gateway/static/blex.min.js +74 -17
  27. package/dist/gateway/static/chat.html +1 -4
  28. package/dist/gateway/static/dashboard.html +151 -0
  29. package/dist/gateway/static/dashboard.js +229 -0
  30. package/dist/gateway/static/widget.js +656 -460
  31. package/dist/index.d.ts +13 -5
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +9 -3
  34. package/dist/index.js.map +1 -1
  35. package/dist/lib/agentic-loop.d.ts +124 -0
  36. package/dist/lib/agentic-loop.d.ts.map +1 -0
  37. package/dist/lib/agentic-loop.js +338 -0
  38. package/dist/lib/agentic-loop.js.map +1 -0
  39. package/dist/lib/config.d.ts +28 -15
  40. package/dist/lib/config.d.ts.map +1 -1
  41. package/dist/lib/config.js +47 -41
  42. package/dist/lib/config.js.map +1 -1
  43. package/dist/lib/gateway.d.ts +34 -3
  44. package/dist/lib/gateway.d.ts.map +1 -1
  45. package/dist/lib/gateway.js +584 -37
  46. package/dist/lib/gateway.js.map +1 -1
  47. package/dist/lib/huggingface-provider.d.ts +26 -0
  48. package/dist/lib/huggingface-provider.d.ts.map +1 -0
  49. package/dist/lib/huggingface-provider.js +338 -0
  50. package/dist/lib/huggingface-provider.js.map +1 -0
  51. package/dist/lib/provider.d.ts +71 -0
  52. package/dist/lib/provider.d.ts.map +1 -0
  53. package/dist/lib/provider.js +90 -0
  54. package/dist/lib/provider.js.map +1 -0
  55. package/dist/lib/tools/ask-user-question.d.ts +14 -0
  56. package/dist/lib/tools/ask-user-question.d.ts.map +1 -0
  57. package/dist/lib/tools/ask-user-question.js +74 -0
  58. package/dist/lib/tools/ask-user-question.js.map +1 -0
  59. package/dist/lib/tools/bash.d.ts +6 -0
  60. package/dist/lib/tools/bash.d.ts.map +1 -0
  61. package/dist/lib/tools/bash.js +85 -0
  62. package/dist/lib/tools/bash.js.map +1 -0
  63. package/dist/lib/tools/edit.d.ts +6 -0
  64. package/dist/lib/tools/edit.d.ts.map +1 -0
  65. package/dist/lib/tools/edit.js +79 -0
  66. package/dist/lib/tools/edit.js.map +1 -0
  67. package/dist/lib/tools/glob.d.ts +6 -0
  68. package/dist/lib/tools/glob.d.ts.map +1 -0
  69. package/dist/lib/tools/glob.js +91 -0
  70. package/dist/lib/tools/glob.js.map +1 -0
  71. package/dist/lib/tools/grep.d.ts +6 -0
  72. package/dist/lib/tools/grep.d.ts.map +1 -0
  73. package/dist/lib/tools/grep.js +110 -0
  74. package/dist/lib/tools/grep.js.map +1 -0
  75. package/dist/lib/tools/index.d.ts +29 -0
  76. package/dist/lib/tools/index.d.ts.map +1 -0
  77. package/dist/lib/tools/index.js +52 -0
  78. package/dist/lib/tools/index.js.map +1 -0
  79. package/dist/lib/tools/read.d.ts +6 -0
  80. package/dist/lib/tools/read.d.ts.map +1 -0
  81. package/dist/lib/tools/read.js +80 -0
  82. package/dist/lib/tools/read.js.map +1 -0
  83. package/dist/lib/tools/tool-search.d.ts +30 -0
  84. package/dist/lib/tools/tool-search.d.ts.map +1 -0
  85. package/dist/lib/tools/tool-search.js +108 -0
  86. package/dist/lib/tools/tool-search.js.map +1 -0
  87. package/dist/lib/tools/web-fetch.d.ts +9 -0
  88. package/dist/lib/tools/web-fetch.d.ts.map +1 -0
  89. package/dist/lib/tools/web-fetch.js +114 -0
  90. package/dist/lib/tools/web-fetch.js.map +1 -0
  91. package/dist/lib/tools/web-search.d.ts +12 -0
  92. package/dist/lib/tools/web-search.d.ts.map +1 -0
  93. package/dist/lib/tools/web-search.js +89 -0
  94. package/dist/lib/tools/web-search.js.map +1 -0
  95. package/dist/lib/tools/write.d.ts +6 -0
  96. package/dist/lib/tools/write.d.ts.map +1 -0
  97. package/dist/lib/tools/write.js +44 -0
  98. package/dist/lib/tools/write.js.map +1 -0
  99. package/package.json +3 -2
package/dist/index.d.ts CHANGED
@@ -22,8 +22,8 @@ export { classifyQuery, getRetrievalWeights } from './lib/query-classifier.js';
22
22
  export type { QueryType, RetrievalWeights } from './lib/query-classifier.js';
23
23
  export { StreamProcessor, shouldExternalizeUserInput, externalizeUserInput, } from './lib/stream-processor.js';
24
24
  export type { StreamEventType, StreamMessage, ProcessedLine, StreamProcessorConfig, } from './lib/stream-processor.js';
25
- export { loadGlobalConfig, loadThreadConfig, saveThreadConfig, mergeConfigs, resolveFilePath, readAlwaysIncludeFiles, saveConfig, addAlwaysIncludeFile, removeAlwaysIncludeFile, listAlwaysIncludeFiles, resolveRagBudget, } from './lib/config.js';
26
- export type { CumulusConfig, RagBudgetPreset, AlwaysIncludeFile, AlwaysIncludeResult, } from './lib/config.js';
25
+ export { loadGlobalConfig, loadThreadConfig, saveThreadConfig, mergeConfigs, resolveFilePath, readAlwaysIncludeFiles, saveConfig, addAlwaysIncludeFile, removeAlwaysIncludeFile, listAlwaysIncludeFiles, } from './lib/config.js';
26
+ export type { CumulusConfig, AlwaysIncludeFile, AlwaysIncludeResult } from './lib/config.js';
27
27
  export type { BudgetDebugInfo, SystemPromptBreakdown } from './tui/hooks/useAppState.js';
28
28
  export { processImagesInMessage, readClipboardImage } from './lib/image-utils.js';
29
29
  export type { DetectedImage, ImageProcessingResult } from './lib/image-utils.js';
@@ -35,12 +35,20 @@ export { executeRevert } from './lib/revert.js';
35
35
  export type { RevertResult, RevertOptions } from './lib/revert.js';
36
36
  export { sendMessage, getOrCreateThread, clearThreadCache, resolveClaudeCli, resolveNode, truncateToTokens, formatRecentContext, generateSystemPrompt, generateMcpConfig, cleanupMcpConfig, parseStreamSegments, extractTextFromStreamLine, computeAvgRelevance, SYSTEM_PROMPT_TEMPLATE, FILE_READ_REMINDER, RECENT_CONTEXT_COUNT, RECENT_MSG_MAX_TOKENS, RECENT_CONTEXT_BUDGET, } from './lib/gateway.js';
37
37
  export type { StreamSegment, DebugSnapshot, McpServerEntry, GatewayAgentsConfig, MessagePipelineOptions, MessagePipelineResult, ThreadState, } from './lib/gateway.js';
38
- export { startGatewayServer } from './gateway/server.js';
38
+ export { runAgenticLoop } from './lib/agentic-loop.js';
39
+ export type { AgenticLoopOptions, AgenticLoopResult, ResumeState, NeedsInputPayload, } from './lib/agentic-loop.js';
40
+ export { AnthropicProvider } from './lib/provider.js';
41
+ export type { LLMProvider, LLMResponse, ChatOptions, SystemBlock, StreamEvent, ToolDefinition, ToolCall, ToolResult, } from './lib/provider.js';
42
+ export { HuggingFaceProvider, getModelContextLimit, getModelMaxOutput, } from './lib/huggingface-provider.js';
43
+ export { getEagerTools, getToolDefinitions as getAgenticToolDefinitions, } from './lib/tools/index.js';
44
+ export { startGatewayServer, setThreadsDir } from './gateway/server.js';
39
45
  export type { GatewayServerOptions, GatewayServerHandle } from './gateway/server.js';
40
46
  export { ExecutorRegistry } from './lib/executor.js';
41
47
  export type { ExecutePayload, ExecuteTokenMessage, ExecuteDoneMessage, ExecuteErrorMessage, ExecuteAbortPayload, ExecutorRegisterMessage, ExecutorRegisteredMessage, ExecutorMessage, ExecutionResult, McpServerDispatchConfig, DeviceToolCallMessage, DeviceToolResultMessage, } from './lib/executor.js';
42
48
  export { loadGatewayConfig, getConfigPath as getGatewayConfigPath } from './gateway/config.js';
43
- export type { GatewayConfig, SlackChannelConfig, DiscordChannelConfig, ChannelsConfig, VapidConfig, } from './gateway/config.js';
49
+ export type { GatewayConfig, SlackChannelConfig, DiscordChannelConfig, ChannelsConfig, VapidConfig, HooksConfig, ResendConfig, ModelEntry, } from './gateway/config.js';
50
+ export { verifyResendSignature, interpolateThreadName, normalizeThreadName, formatEmailMessage, } from './gateway/hooks.js';
51
+ export type { HookPipelineOpts, EmailHookConfig, FormHookConfig, WebhookConfig, } from './gateway/hooks.js';
44
52
  export { authenticate as authenticateRequest } from './gateway/auth.js';
45
53
  export { configureVapid, generateVapidKeys, subscribe as pushSubscribe, unsubscribe as pushUnsubscribe, getSubscriptions as getPushSubscriptions, sendNotification, } from './gateway/push.js';
46
54
  export type { VapidConfig as PushVapidConfig, StoredSubscription as PushSubscription, NotificationPayload, } from './gateway/push.js';
@@ -53,7 +61,7 @@ export { createSlackAdapter, markdownToMrkdwn, splitMessage } from './gateway/ad
53
61
  export type { SlackAdapterConfig, SlackAdapterHandle } from './gateway/adapters/slack.js';
54
62
  export { createDiscordAdapter, splitDiscordMessage } from './gateway/adapters/discord.js';
55
63
  export type { DiscordAdapterConfig, DiscordAdapterHandle } from './gateway/adapters/discord.js';
56
- export { createWebChatAdapter, drainInflightMessages, serveStaticFile, } from './gateway/adapters/webchat.js';
64
+ export { createWebChatAdapter, serveStaticFile } from './gateway/adapters/webchat.js';
57
65
  export type { WebChatAdapterConfig, WebChatAdapterHandle } from './gateway/adapters/webchat.js';
58
66
  export { startSharedMcpServer } from './mcp/shared-server.js';
59
67
  export type { SharedMcpServerOptions, SharedMcpServerHandle } from './mcp/shared-server.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -25,7 +25,7 @@ export { classifyQuery, getRetrievalWeights } from './lib/query-classifier.js';
25
25
  // Stream Processor
26
26
  export { StreamProcessor, shouldExternalizeUserInput, externalizeUserInput, } from './lib/stream-processor.js';
27
27
  // Config
28
- export { loadGlobalConfig, loadThreadConfig, saveThreadConfig, mergeConfigs, resolveFilePath, readAlwaysIncludeFiles, saveConfig, addAlwaysIncludeFile, removeAlwaysIncludeFile, listAlwaysIncludeFiles, resolveRagBudget, } from './lib/config.js';
28
+ export { loadGlobalConfig, loadThreadConfig, saveThreadConfig, mergeConfigs, resolveFilePath, readAlwaysIncludeFiles, saveConfig, addAlwaysIncludeFile, removeAlwaysIncludeFile, listAlwaysIncludeFiles, } from './lib/config.js';
29
29
  // Image Utils
30
30
  export { processImagesInMessage, readClipboardImage } from './lib/image-utils.js';
31
31
  // Snapshots
@@ -36,11 +36,17 @@ export { getSummary, getSummaryPath, loadSummaries, runSummarization, saveSummar
36
36
  export { executeRevert } from './lib/revert.js';
37
37
  // Gateway — message pipeline for Janus and gateway server
38
38
  export { sendMessage, getOrCreateThread, clearThreadCache, resolveClaudeCli, resolveNode, truncateToTokens, formatRecentContext, generateSystemPrompt, generateMcpConfig, cleanupMcpConfig, parseStreamSegments, extractTextFromStreamLine, computeAvgRelevance, SYSTEM_PROMPT_TEMPLATE, FILE_READ_REMINDER, RECENT_CONTEXT_COUNT, RECENT_MSG_MAX_TOKENS, RECENT_CONTEXT_BUDGET, } from './lib/gateway.js';
39
+ // Agentic loop + providers (for non-Claude models)
40
+ export { runAgenticLoop } from './lib/agentic-loop.js';
41
+ export { AnthropicProvider } from './lib/provider.js';
42
+ export { HuggingFaceProvider, getModelContextLimit, getModelMaxOutput, } from './lib/huggingface-provider.js';
43
+ export { getEagerTools, getToolDefinitions as getAgenticToolDefinitions, } from './lib/tools/index.js';
39
44
  // Gateway Server — HTTP/SSE API for remote access
40
- export { startGatewayServer } from './gateway/server.js';
45
+ export { startGatewayServer, setThreadsDir } from './gateway/server.js';
41
46
  // Executor dispatch — remote Claude execution
42
47
  export { ExecutorRegistry } from './lib/executor.js';
43
48
  export { loadGatewayConfig, getConfigPath as getGatewayConfigPath } from './gateway/config.js';
49
+ export { verifyResendSignature, interpolateThreadName, normalizeThreadName, formatEmailMessage, } from './gateway/hooks.js';
44
50
  export { authenticate as authenticateRequest } from './gateway/auth.js';
45
51
  export { configureVapid, generateVapidKeys, subscribe as pushSubscribe, unsubscribe as pushUnsubscribe, getSubscriptions as getPushSubscriptions, sendNotification, } from './gateway/push.js';
46
52
  export { createLogger, getDefaultLogPath } from './gateway/logger.js';
@@ -50,7 +56,7 @@ export { scaffoldFromTemplate, listTemplates, getTemplateAlwaysInclude } from '.
50
56
  // Gateway Adapters — channel adapters for Slack, Discord, etc.
51
57
  export { createSlackAdapter, markdownToMrkdwn, splitMessage } from './gateway/adapters/slack.js';
52
58
  export { createDiscordAdapter, splitDiscordMessage } from './gateway/adapters/discord.js';
53
- export { createWebChatAdapter, drainInflightMessages, serveStaticFile, } from './gateway/adapters/webchat.js';
59
+ export { createWebChatAdapter, serveStaticFile } from './gateway/adapters/webchat.js';
54
60
  // MCP - Shared server for multi-agent setups
55
61
  export { startSharedMcpServer } from './mcp/shared-server.js';
56
62
  // MCP paths - for spawning subprocesses via --mcp-config
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Agentic loop — the core execution cycle that replaces Claude CLI.
3
+ *
4
+ * Flow: API call -> stream tokens -> collect tool_use blocks -> execute tools
5
+ * concurrently -> send tool_results -> repeat until stop_reason !== 'tool_use'
6
+ *
7
+ * Tool deferral: Only eager tools (10) have their schemas sent each turn.
8
+ * Deferred tools (MCP tools) are registered with ToolSearch — the LLM calls
9
+ * ToolSearch to get the schema, then calls the tool. Schemas are re-deferred
10
+ * each turn (not accumulated), keeping per-turn token count flat.
11
+ *
12
+ * AskUserQuestion: When the LLM calls AskUserQuestion, the loop pauses and
13
+ * returns a NeedsInputResult. The caller provides the user's answer and
14
+ * resumes the loop by calling runAgenticLoop again with resumeState.
15
+ */
16
+ import type Anthropic from '@anthropic-ai/sdk';
17
+ import type { LLMProvider, SystemBlock, ToolDefinition } from './provider.js';
18
+ import type { Tool } from './tools/index.js';
19
+ export interface AgenticLoopOptions {
20
+ provider: LLMProvider;
21
+ model: string;
22
+ system: SystemBlock[];
23
+ userMessage: string;
24
+ imageBlocks?: Array<{
25
+ type: string;
26
+ source: {
27
+ type: string;
28
+ media_type: string;
29
+ data: string;
30
+ };
31
+ }>;
32
+ /** Eager tools — schemas sent every turn. */
33
+ tools: Tool[];
34
+ /** MCP tools — all have executors registered, but schemas are deferred by default. */
35
+ mcpTools?: McpToolEntry[];
36
+ /** If true, send ALL tool schemas eagerly (disable deferral). Default: false. */
37
+ eagerAll?: boolean;
38
+ maxTurns?: number;
39
+ maxTokens?: number;
40
+ onToken?: (text: string) => void;
41
+ onToolUse?: (name: string, input: Record<string, unknown>) => void;
42
+ onToolResult?: (name: string, output: string, isError: boolean) => void;
43
+ signal?: AbortSignal;
44
+ cwd: string;
45
+ /** Thread name for per-thread state. */
46
+ threadName?: string;
47
+ /** Resume state from a previous NeedsInputResult. When provided, userMessage and imageBlocks are ignored. */
48
+ resumeState?: ResumeState;
49
+ }
50
+ export interface McpToolEntry {
51
+ definition: ToolDefinition;
52
+ execute: (input: Record<string, unknown>) => Promise<string>;
53
+ }
54
+ export interface AgenticLoopResult {
55
+ /** 'done' = loop completed normally. 'needs_input' = paused waiting for user. */
56
+ status: 'done' | 'needs_input';
57
+ response: string;
58
+ toolCalls: Array<{
59
+ name: string;
60
+ input: Record<string, unknown>;
61
+ output: string;
62
+ isError: boolean;
63
+ }>;
64
+ turns: number;
65
+ usage: {
66
+ totalInputTokens: number;
67
+ totalOutputTokens: number;
68
+ cacheReadTokens: number;
69
+ cacheCreationTokens: number;
70
+ };
71
+ /** Present when status === 'needs_input'. Contains state needed to resume the loop. */
72
+ needsInput?: NeedsInputPayload;
73
+ }
74
+ /** Single question in a multi-question carousel. */
75
+ export interface QuestionItem {
76
+ question: string;
77
+ options: string[];
78
+ multiSelect?: boolean;
79
+ writeIn?: boolean;
80
+ }
81
+ /** Payload describing the question the LLM wants to ask. */
82
+ export interface NeedsInputPayload {
83
+ /** The question text (single-question mode). */
84
+ question: string;
85
+ /** Optional choices for the user (single-question mode). */
86
+ options?: string[];
87
+ /** Whether the user can type a free-text answer. */
88
+ allowFreeform: boolean;
89
+ /** Multi-question carousel (overrides question/options when present). */
90
+ questions?: QuestionItem[];
91
+ /** The tool_use_id that needs a tool_result. */
92
+ toolUseId: string;
93
+ /** Serialized conversation state for resumption. */
94
+ resumeState: ResumeState;
95
+ }
96
+ /** Opaque state blob that allows the loop to resume after a pause. */
97
+ export interface ResumeState {
98
+ /** Accumulated messages up to the pause point (includes the assistant's tool_use). */
99
+ messages: Anthropic.MessageParam[];
100
+ /** The tool_use_id that needs a tool_result. */
101
+ toolUseId: string;
102
+ /** Tool calls collected so far. */
103
+ toolCalls: Array<{
104
+ name: string;
105
+ input: Record<string, unknown>;
106
+ output: string;
107
+ isError: boolean;
108
+ }>;
109
+ /** Any other tool_result blocks from the same turn that were already resolved. */
110
+ resolvedToolResults: Anthropic.ToolResultBlockParam[];
111
+ /** Text response accumulated so far. */
112
+ partialResponse: string;
113
+ /** Usage accumulated so far. */
114
+ usage: {
115
+ totalInputTokens: number;
116
+ totalOutputTokens: number;
117
+ cacheReadTokens: number;
118
+ cacheCreationTokens: number;
119
+ };
120
+ /** Turns completed so far. */
121
+ turns: number;
122
+ }
123
+ export declare function runAgenticLoop(options: AgenticLoopOptions): Promise<AgenticLoopResult>;
124
+ //# sourceMappingURL=agentic-loop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentic-loop.d.ts","sourceRoot":"","sources":["../../src/lib/agentic-loop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,338 @@
1
+ /**
2
+ * Agentic loop — the core execution cycle that replaces Claude CLI.
3
+ *
4
+ * Flow: API call -> stream tokens -> collect tool_use blocks -> execute tools
5
+ * concurrently -> send tool_results -> repeat until stop_reason !== 'tool_use'
6
+ *
7
+ * Tool deferral: Only eager tools (10) have their schemas sent each turn.
8
+ * Deferred tools (MCP tools) are registered with ToolSearch — the LLM calls
9
+ * ToolSearch to get the schema, then calls the tool. Schemas are re-deferred
10
+ * each turn (not accumulated), keeping per-turn token count flat.
11
+ *
12
+ * AskUserQuestion: When the LLM calls AskUserQuestion, the loop pauses and
13
+ * returns a NeedsInputResult. The caller provides the user's answer and
14
+ * resumes the loop by calling runAgenticLoop again with resumeState.
15
+ */
16
+ import { getModelMaxOutput } from './huggingface-provider.js';
17
+ import { ASK_USER_QUESTION_TOOL } from './tools/ask-user-question.js';
18
+ import { setDeferredRegistry, buildDeferredToolList } from './tools/tool-search.js';
19
+ // ─── Constants ───────────────────────────────────────────────────────────────
20
+ const DEFAULT_MAX_TURNS = 30;
21
+ const DEFAULT_MAX_TOKENS = 8_192;
22
+ // ─── Truncation escalation ──────────────────────────────────────────────────
23
+ const ESCALATION_SCHEDULE = [8_192, 16_384, 32_768];
24
+ const MAX_CONTINUATIONS = 3;
25
+ const MAX_CUMULATIVE_OUTPUT_TOKENS = 16_384;
26
+ // ─── Loop ────────────────────────────────────────────────────────────────────
27
+ export async function runAgenticLoop(options) {
28
+ const { provider, model, system, userMessage, imageBlocks, tools, mcpTools = [], eagerAll = false, maxTurns = DEFAULT_MAX_TURNS, maxTokens = DEFAULT_MAX_TOKENS, onToken, onToolUse, onToolResult, signal, cwd, threadName: _threadName, resumeState, } = options;
29
+ // ─── Tool deferral setup ─────────────────────────────────────────────────
30
+ //
31
+ // Eager tools: full schemas sent every turn (10 tools, ~2.5k tokens)
32
+ // Deferred tools: name + description only, fetched via ToolSearch (~500 tokens)
33
+ //
34
+ // All tools have executors registered — deferred tools ARE callable,
35
+ // they just don't have schemas in the API call until ToolSearch provides them.
36
+ // Eager: core tools (always sent)
37
+ const eagerToolDefs = tools.map(t => t.definition);
38
+ // Deferred: MCP tools (schemas available via ToolSearch)
39
+ if (!eagerAll && mcpTools.length > 0) {
40
+ setDeferredRegistry(mcpTools.map(t => ({
41
+ name: t.definition.name,
42
+ description: t.definition.description,
43
+ definition: t.definition,
44
+ })));
45
+ }
46
+ else {
47
+ // eagerAll mode or no MCP tools — send everything eagerly
48
+ for (const t of mcpTools) {
49
+ eagerToolDefs.push(t.definition);
50
+ }
51
+ setDeferredRegistry([]);
52
+ }
53
+ // Build tool executor lookup (ALL tools, eager + deferred)
54
+ const toolExecutors = new Map();
55
+ for (const t of tools) {
56
+ toolExecutors.set(t.definition.name, input => t.execute(input, cwd));
57
+ }
58
+ for (const t of mcpTools) {
59
+ toolExecutors.set(t.definition.name, t.execute);
60
+ }
61
+ // Inject deferred tool list into system prompt
62
+ const deferredList = buildDeferredToolList();
63
+ const effectiveSystem = deferredList
64
+ ? [
65
+ ...system,
66
+ {
67
+ type: 'text',
68
+ text: deferredList,
69
+ },
70
+ ]
71
+ : system;
72
+ // ─── Build or restore messages ──────────────────────────────────────────
73
+ let messages;
74
+ let fullResponse;
75
+ const allToolCalls = [];
76
+ let totalInputTokens;
77
+ let totalOutputTokens;
78
+ let cacheReadTokens;
79
+ let cacheCreationTokens;
80
+ let turns;
81
+ if (resumeState) {
82
+ // Resuming from a pause — restore state and inject the user's answer
83
+ messages = resumeState.messages;
84
+ fullResponse = resumeState.partialResponse;
85
+ totalInputTokens = resumeState.usage.totalInputTokens;
86
+ totalOutputTokens = resumeState.usage.totalOutputTokens;
87
+ cacheReadTokens = resumeState.usage.cacheReadTokens;
88
+ cacheCreationTokens = resumeState.usage.cacheCreationTokens;
89
+ turns = resumeState.turns;
90
+ allToolCalls.push(...resumeState.toolCalls);
91
+ // The userMessage in resume mode is the user's answer to the question.
92
+ // Build the tool_result for the AskUserQuestion call + any already-resolved results.
93
+ const answerResult = {
94
+ type: 'tool_result',
95
+ tool_use_id: resumeState.toolUseId,
96
+ content: userMessage,
97
+ is_error: false,
98
+ };
99
+ const allResults = [...resumeState.resolvedToolResults, answerResult];
100
+ messages.push({ role: 'user', content: allResults });
101
+ }
102
+ else {
103
+ // Fresh start
104
+ messages = [];
105
+ fullResponse = '';
106
+ totalInputTokens = 0;
107
+ totalOutputTokens = 0;
108
+ cacheReadTokens = 0;
109
+ cacheCreationTokens = 0;
110
+ turns = 0;
111
+ const contentBlocks = [];
112
+ if (imageBlocks && imageBlocks.length > 0) {
113
+ for (const img of imageBlocks) {
114
+ contentBlocks.push({
115
+ type: 'image',
116
+ source: img.source,
117
+ });
118
+ }
119
+ }
120
+ contentBlocks.push({ type: 'text', text: userMessage });
121
+ messages.push({ role: 'user', content: contentBlocks });
122
+ }
123
+ // ─── Truncation escalation state ──────────────────────────────────────────
124
+ const modelMaxOutput = getModelMaxOutput(model);
125
+ let currentMaxTokens = Math.min(maxTokens || DEFAULT_MAX_TOKENS, modelMaxOutput);
126
+ let escalationIndex = ESCALATION_SCHEDULE.indexOf(currentMaxTokens);
127
+ if (escalationIndex === -1)
128
+ escalationIndex = 0;
129
+ let continuationCount = 0;
130
+ let cumulativeOutputTokens = 0;
131
+ // ═══ THE LOOP ═══
132
+ while (turns < maxTurns) {
133
+ turns++;
134
+ if (signal?.aborted) {
135
+ throw new Error('Aborted');
136
+ }
137
+ // Call the LLM — only eager tool defs sent (re-deferred each turn)
138
+ let turnOutputTokens = 0;
139
+ const response = await provider.chat({
140
+ model,
141
+ system: effectiveSystem,
142
+ messages,
143
+ tools: eagerToolDefs,
144
+ maxTokens: currentMaxTokens,
145
+ onEvent: (event) => {
146
+ if (event.type === 'text' && event.text) {
147
+ fullResponse += event.text;
148
+ onToken?.(event.text);
149
+ }
150
+ if (event.type === 'done' && event.usage) {
151
+ totalInputTokens += event.usage.input_tokens;
152
+ totalOutputTokens += event.usage.output_tokens;
153
+ turnOutputTokens = event.usage.output_tokens;
154
+ cacheReadTokens += event.usage.cache_read_input_tokens || 0;
155
+ cacheCreationTokens += event.usage.cache_creation_input_tokens || 0;
156
+ }
157
+ },
158
+ signal,
159
+ });
160
+ cumulativeOutputTokens += turnOutputTokens;
161
+ // ─── Truncation handling ────────────────────────────────────────────────
162
+ if (response.stopReason === 'max_tokens') {
163
+ // Check if truncation happened mid-tool-call (partial JSON)
164
+ const hasToolUse = response.content.some(b => b.type === 'tool_use');
165
+ const hasPartialToolCall = hasToolUse; // If we got tool_use blocks but stop was length, they're partial
166
+ if (hasPartialToolCall) {
167
+ // Partial tool call — discard and retry the full turn with escalated max_tokens
168
+ // Don't add the broken response to messages — just escalate and retry
169
+ escalationIndex = Math.min(escalationIndex + 1, ESCALATION_SCHEDULE.length - 1);
170
+ currentMaxTokens = Math.min(ESCALATION_SCHEDULE[escalationIndex] ?? modelMaxOutput, modelMaxOutput);
171
+ continuationCount++;
172
+ if (continuationCount >= MAX_CONTINUATIONS) {
173
+ // Give up — return whatever we have
174
+ break;
175
+ }
176
+ // Retry same turn (don't increment turns, don't add to messages)
177
+ turns--;
178
+ continue;
179
+ }
180
+ // Pure text truncation — continuation stitching
181
+ if (continuationCount >= MAX_CONTINUATIONS ||
182
+ cumulativeOutputTokens >= MAX_CUMULATIVE_OUTPUT_TOKENS) {
183
+ // Hit safety cap — accept truncated response
184
+ break;
185
+ }
186
+ // Escalate max_tokens
187
+ escalationIndex = Math.min(escalationIndex + 1, ESCALATION_SCHEDULE.length - 1);
188
+ currentMaxTokens = Math.min(ESCALATION_SCHEDULE[escalationIndex] ?? modelMaxOutput, modelMaxOutput);
189
+ continuationCount++;
190
+ // Append partial assistant response + continuation prompt
191
+ messages.push({ role: 'assistant', content: response.content });
192
+ const last200 = fullResponse.slice(-200);
193
+ const continuationPrompt = `Your previous response was truncated due to length. Continue EXACTLY where you left off. Do not repeat any content. Your last output ended with:\n"""\n${last200}\n"""\nContinue from that exact point:`;
194
+ messages.push({ role: 'user', content: continuationPrompt });
195
+ // Don't break — continue the loop to make another API call
196
+ // The onToken stream stays open, so the user sees seamless continuation
197
+ continue;
198
+ }
199
+ // Check stop reason
200
+ if (response.stopReason !== 'tool_use') {
201
+ break;
202
+ }
203
+ // Extract tool_use blocks from the response
204
+ const toolUseBlocks = response.content.filter((b) => b.type === 'tool_use');
205
+ if (toolUseBlocks.length === 0) {
206
+ break;
207
+ }
208
+ // Add assistant response to messages
209
+ messages.push({ role: 'assistant', content: response.content });
210
+ // ─── Check for AskUserQuestion ──────────────────────────────────────
211
+ const askBlock = toolUseBlocks.find(b => b.name === ASK_USER_QUESTION_TOOL);
212
+ if (askBlock) {
213
+ const askInput = askBlock.input;
214
+ const askQuestions = askInput.questions;
215
+ const question = askInput.question || (askQuestions?.[0]?.question ?? 'Please answer:');
216
+ const askOptions = askInput.options;
217
+ const allowFreeform = askInput.allowFreeform ?? false;
218
+ onToolUse?.(ASK_USER_QUESTION_TOOL, askInput);
219
+ // Execute all OTHER tool calls in this batch (not AskUserQuestion)
220
+ const otherBlocks = toolUseBlocks.filter(b => b.id !== askBlock.id);
221
+ const resolvedToolResults = await Promise.all(otherBlocks.map(async (block) => {
222
+ const toolName = block.name;
223
+ const toolInput = block.input;
224
+ onToolUse?.(toolName, toolInput);
225
+ const executor = toolExecutors.get(toolName);
226
+ let output;
227
+ let isError = false;
228
+ if (!executor) {
229
+ output = `Error: Unknown tool "${toolName}"`;
230
+ isError = true;
231
+ }
232
+ else {
233
+ try {
234
+ output = await executor(toolInput);
235
+ }
236
+ catch (err) {
237
+ output = `Error: ${err.message}`;
238
+ isError = true;
239
+ }
240
+ }
241
+ if (output.length > 100_000) {
242
+ output = output.slice(0, 100_000) + '\n\n[Output truncated at 100KB]';
243
+ }
244
+ onToolResult?.(toolName, output, isError);
245
+ allToolCalls.push({ name: toolName, input: toolInput, output, isError });
246
+ return {
247
+ type: 'tool_result',
248
+ tool_use_id: block.id,
249
+ content: output,
250
+ is_error: isError,
251
+ };
252
+ }));
253
+ // Return paused state
254
+ return {
255
+ status: 'needs_input',
256
+ response: fullResponse,
257
+ toolCalls: allToolCalls,
258
+ turns,
259
+ usage: {
260
+ totalInputTokens,
261
+ totalOutputTokens,
262
+ cacheReadTokens,
263
+ cacheCreationTokens,
264
+ },
265
+ needsInput: {
266
+ question,
267
+ options: askOptions,
268
+ allowFreeform,
269
+ questions: askQuestions,
270
+ toolUseId: askBlock.id,
271
+ resumeState: {
272
+ messages: messages,
273
+ toolUseId: askBlock.id,
274
+ toolCalls: allToolCalls,
275
+ resolvedToolResults,
276
+ partialResponse: fullResponse,
277
+ usage: {
278
+ totalInputTokens,
279
+ totalOutputTokens,
280
+ cacheReadTokens,
281
+ cacheCreationTokens,
282
+ },
283
+ turns,
284
+ },
285
+ },
286
+ };
287
+ }
288
+ // ─── Normal tool execution (no AskUserQuestion) ─────────────────────
289
+ const toolResults = await Promise.all(toolUseBlocks.map(async (block) => {
290
+ const toolName = block.name;
291
+ const toolInput = block.input;
292
+ onToolUse?.(toolName, toolInput);
293
+ const executor = toolExecutors.get(toolName);
294
+ let output;
295
+ let isError = false;
296
+ if (!executor) {
297
+ output = `Error: Unknown tool "${toolName}"`;
298
+ isError = true;
299
+ }
300
+ else {
301
+ try {
302
+ output = await executor(toolInput);
303
+ }
304
+ catch (err) {
305
+ output = `Error: ${err.message}`;
306
+ isError = true;
307
+ }
308
+ }
309
+ // Truncate very large tool results
310
+ if (output.length > 100_000) {
311
+ output = output.slice(0, 100_000) + '\n\n[Output truncated at 100KB]';
312
+ }
313
+ onToolResult?.(toolName, output, isError);
314
+ allToolCalls.push({ name: toolName, input: toolInput, output, isError });
315
+ return {
316
+ type: 'tool_result',
317
+ tool_use_id: block.id,
318
+ content: output,
319
+ is_error: isError,
320
+ };
321
+ }));
322
+ // Add tool results as next user message
323
+ messages.push({ role: 'user', content: toolResults });
324
+ }
325
+ return {
326
+ status: 'done',
327
+ response: fullResponse,
328
+ toolCalls: allToolCalls,
329
+ turns,
330
+ usage: {
331
+ totalInputTokens,
332
+ totalOutputTokens,
333
+ cacheReadTokens,
334
+ cacheCreationTokens,
335
+ },
336
+ };
337
+ }
338
+ //# sourceMappingURL=agentic-loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentic-loop.js","sourceRoot":"","sources":["../../src/lib/agentic-loop.ts"],"names":[],"mappings":"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"}