klaus-agent 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/README.md +685 -0
  2. package/dist/approval/approval.d.ts +18 -0
  3. package/dist/approval/approval.js +93 -0
  4. package/dist/approval/approval.js.map +1 -0
  5. package/dist/approval/types.d.ts +21 -0
  6. package/dist/approval/types.js +3 -0
  7. package/dist/approval/types.js.map +1 -0
  8. package/dist/background/task-manager.d.ts +14 -0
  9. package/dist/background/task-manager.js +89 -0
  10. package/dist/background/task-manager.js.map +1 -0
  11. package/dist/background/tools.d.ts +4 -0
  12. package/dist/background/tools.js +74 -0
  13. package/dist/background/tools.js.map +1 -0
  14. package/dist/background/types.d.ts +31 -0
  15. package/dist/background/types.js +3 -0
  16. package/dist/background/types.js.map +1 -0
  17. package/dist/checkpoint/checkpoint-manager.d.ts +19 -0
  18. package/dist/checkpoint/checkpoint-manager.js +49 -0
  19. package/dist/checkpoint/checkpoint-manager.js.map +1 -0
  20. package/dist/checkpoint/dmail.d.ts +10 -0
  21. package/dist/checkpoint/dmail.js +26 -0
  22. package/dist/checkpoint/dmail.js.map +1 -0
  23. package/dist/checkpoint/types.d.ts +12 -0
  24. package/dist/checkpoint/types.js +3 -0
  25. package/dist/checkpoint/types.js.map +1 -0
  26. package/dist/compaction/compaction.d.ts +6 -0
  27. package/dist/compaction/compaction.js +104 -0
  28. package/dist/compaction/compaction.js.map +1 -0
  29. package/dist/compaction/summarizer.d.ts +10 -0
  30. package/dist/compaction/summarizer.js +75 -0
  31. package/dist/compaction/summarizer.js.map +1 -0
  32. package/dist/compaction/types.d.ts +23 -0
  33. package/dist/compaction/types.js +3 -0
  34. package/dist/compaction/types.js.map +1 -0
  35. package/dist/core/agent-loop.d.ts +37 -0
  36. package/dist/core/agent-loop.js +337 -0
  37. package/dist/core/agent-loop.js.map +1 -0
  38. package/dist/core/agent.d.ts +97 -0
  39. package/dist/core/agent.js +335 -0
  40. package/dist/core/agent.js.map +1 -0
  41. package/dist/extensions/runner.d.ts +19 -0
  42. package/dist/extensions/runner.js +88 -0
  43. package/dist/extensions/runner.js.map +1 -0
  44. package/dist/extensions/types.d.ts +179 -0
  45. package/dist/extensions/types.js +3 -0
  46. package/dist/extensions/types.js.map +1 -0
  47. package/dist/index.d.ts +78 -0
  48. package/dist/index.js +53 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/injection/history-normalizer.d.ts +2 -0
  51. package/dist/injection/history-normalizer.js +34 -0
  52. package/dist/injection/history-normalizer.js.map +1 -0
  53. package/dist/injection/injection-manager.d.ts +8 -0
  54. package/dist/injection/injection-manager.js +28 -0
  55. package/dist/injection/injection-manager.js.map +1 -0
  56. package/dist/injection/types.d.ts +8 -0
  57. package/dist/injection/types.js +3 -0
  58. package/dist/injection/types.js.map +1 -0
  59. package/dist/llm/provider.d.ts +16 -0
  60. package/dist/llm/provider.js +233 -0
  61. package/dist/llm/provider.js.map +1 -0
  62. package/dist/llm/types.d.ts +110 -0
  63. package/dist/llm/types.js +3 -0
  64. package/dist/llm/types.js.map +1 -0
  65. package/dist/multi-agent/labor-market.d.ts +16 -0
  66. package/dist/multi-agent/labor-market.js +40 -0
  67. package/dist/multi-agent/labor-market.js.map +1 -0
  68. package/dist/multi-agent/task-executor.d.ts +12 -0
  69. package/dist/multi-agent/task-executor.js +38 -0
  70. package/dist/multi-agent/task-executor.js.map +1 -0
  71. package/dist/multi-agent/task-tool.d.ts +4 -0
  72. package/dist/multi-agent/task-tool.js +46 -0
  73. package/dist/multi-agent/task-tool.js.map +1 -0
  74. package/dist/multi-agent/types.d.ts +7 -0
  75. package/dist/multi-agent/types.js +3 -0
  76. package/dist/multi-agent/types.js.map +1 -0
  77. package/dist/session/session-context-builder.d.ts +2 -0
  78. package/dist/session/session-context-builder.js +52 -0
  79. package/dist/session/session-context-builder.js.map +1 -0
  80. package/dist/session/session-manager.d.ts +30 -0
  81. package/dist/session/session-manager.js +209 -0
  82. package/dist/session/session-manager.js.map +1 -0
  83. package/dist/session/types.d.ts +61 -0
  84. package/dist/session/types.js +3 -0
  85. package/dist/session/types.js.map +1 -0
  86. package/dist/skills/discovery.d.ts +2 -0
  87. package/dist/skills/discovery.js +29 -0
  88. package/dist/skills/discovery.js.map +1 -0
  89. package/dist/skills/loader.d.ts +3 -0
  90. package/dist/skills/loader.js +46 -0
  91. package/dist/skills/loader.js.map +1 -0
  92. package/dist/skills/skill-tool.d.ts +3 -0
  93. package/dist/skills/skill-tool.js +38 -0
  94. package/dist/skills/skill-tool.js.map +1 -0
  95. package/dist/skills/types.d.ts +14 -0
  96. package/dist/skills/types.js +3 -0
  97. package/dist/skills/types.js.map +1 -0
  98. package/dist/tools/executor.d.ts +37 -0
  99. package/dist/tools/executor.js +131 -0
  100. package/dist/tools/executor.js.map +1 -0
  101. package/dist/tools/mcp-adapter.d.ts +57 -0
  102. package/dist/tools/mcp-adapter.js +113 -0
  103. package/dist/tools/mcp-adapter.js.map +1 -0
  104. package/dist/tools/types.d.ts +43 -0
  105. package/dist/tools/types.js +2 -0
  106. package/dist/tools/types.js.map +1 -0
  107. package/dist/types.d.ts +96 -0
  108. package/dist/types.js +3 -0
  109. package/dist/types.js.map +1 -0
  110. package/dist/utils/id.d.ts +1 -0
  111. package/dist/utils/id.js +9 -0
  112. package/dist/utils/id.js.map +1 -0
  113. package/dist/utils/jsonl.d.ts +3 -0
  114. package/dist/utils/jsonl.js +17 -0
  115. package/dist/utils/jsonl.js.map +1 -0
  116. package/dist/wire/types.d.ts +10 -0
  117. package/dist/wire/types.js +3 -0
  118. package/dist/wire/types.js.map +1 -0
  119. package/dist/wire/wire.d.ts +20 -0
  120. package/dist/wire/wire.js +71 -0
  121. package/dist/wire/wire.js.map +1 -0
  122. package/package.json +26 -0
  123. package/src/approval/approval.ts +108 -0
  124. package/src/approval/types.ts +26 -0
  125. package/src/background/task-manager.ts +112 -0
  126. package/src/background/tools.ts +84 -0
  127. package/src/background/types.ts +29 -0
  128. package/src/checkpoint/checkpoint-manager.ts +60 -0
  129. package/src/checkpoint/dmail.ts +35 -0
  130. package/src/checkpoint/types.ts +16 -0
  131. package/src/compaction/compaction.ts +119 -0
  132. package/src/compaction/summarizer.ts +83 -0
  133. package/src/compaction/types.ts +29 -0
  134. package/src/core/agent-loop.ts +427 -0
  135. package/src/core/agent.ts +430 -0
  136. package/src/extensions/runner.ts +138 -0
  137. package/src/extensions/types.ts +177 -0
  138. package/src/index.ts +221 -0
  139. package/src/injection/history-normalizer.ts +44 -0
  140. package/src/injection/injection-manager.ts +34 -0
  141. package/src/injection/types.ts +12 -0
  142. package/src/llm/provider.ts +254 -0
  143. package/src/llm/types.ts +146 -0
  144. package/src/multi-agent/labor-market.ts +54 -0
  145. package/src/multi-agent/task-executor.ts +49 -0
  146. package/src/multi-agent/task-tool.ts +58 -0
  147. package/src/multi-agent/types.ts +10 -0
  148. package/src/session/session-context-builder.ts +65 -0
  149. package/src/session/session-manager.ts +258 -0
  150. package/src/session/types.ts +93 -0
  151. package/src/skills/discovery.ts +32 -0
  152. package/src/skills/loader.ts +54 -0
  153. package/src/skills/skill-tool.ts +50 -0
  154. package/src/skills/types.ts +18 -0
  155. package/src/tools/executor.ts +196 -0
  156. package/src/tools/mcp-adapter.ts +185 -0
  157. package/src/tools/types.ts +64 -0
  158. package/src/types.ts +96 -0
  159. package/src/utils/id.ts +8 -0
  160. package/src/utils/jsonl.ts +19 -0
  161. package/src/wire/types.ts +14 -0
  162. package/src/wire/wire.ts +79 -0
  163. package/tsconfig.json +19 -0
@@ -0,0 +1,75 @@
1
+ // LLM-based summarization for compaction
2
+ const SUMMARIZE_PROMPT = `You are a conversation summarizer. Summarize the following conversation history concisely, preserving:
3
+ - Key decisions and outcomes
4
+ - Important context and facts established
5
+ - Current state of any ongoing tasks
6
+ - Tool calls made and their results (briefly)
7
+
8
+ Be concise but thorough. Use bullet points. Do not include greetings or filler.`;
9
+ const UPDATE_PROMPT = `You are a conversation summarizer. You have a previous summary and new conversation to incorporate.
10
+
11
+ Previous summary:
12
+ {previous_summary}
13
+
14
+ Merge the new conversation into the summary, preserving all important context. Remove outdated information that has been superseded.`;
15
+ export class LLMSummarizer {
16
+ provider;
17
+ modelId;
18
+ constructor(provider, modelId) {
19
+ this.provider = provider;
20
+ this.modelId = modelId;
21
+ }
22
+ async summarize(messages, previousSummary) {
23
+ const conversationText = messages.map((m) => `${m.role}: ${m.content}`).join("\n");
24
+ const systemPrompt = previousSummary
25
+ ? UPDATE_PROMPT.replace("{previous_summary}", previousSummary)
26
+ : SUMMARIZE_PROMPT;
27
+ const options = {
28
+ model: this.modelId,
29
+ systemPrompt,
30
+ messages: [{ role: "user", content: `Summarize this conversation:\n\n${conversationText}` }],
31
+ maxTokens: 2048,
32
+ };
33
+ let result = "";
34
+ for await (const event of this.provider.stream(options)) {
35
+ if (event.type === "text") {
36
+ result += event.text;
37
+ }
38
+ else if (event.type === "done") {
39
+ const textBlocks = event.message.content.filter((b) => b.type === "text");
40
+ if (textBlocks.length > 0) {
41
+ result = textBlocks.map((b) => b.text).join("");
42
+ }
43
+ }
44
+ }
45
+ return result;
46
+ }
47
+ }
48
+ export function agentMessagesToCompactionInput(messages) {
49
+ const results = [];
50
+ for (const msg of messages) {
51
+ if (!msg || typeof msg !== "object" || !("role" in msg))
52
+ continue;
53
+ const m = msg;
54
+ if (m.role === "user") {
55
+ const text = typeof m.content === "string"
56
+ ? m.content
57
+ : (m.content ?? []).filter((b) => b.type === "text").map((b) => b.text).join("\n");
58
+ results.push({ role: "user", content: text });
59
+ }
60
+ else if (m.role === "assistant") {
61
+ const text = (m.content ?? []).filter((b) => b.type === "text").map((b) => b.text).join("\n");
62
+ const toolCalls = (m.content ?? []).filter((b) => b.type === "tool_call").map((b) => b.name);
63
+ const suffix = toolCalls.length ? ` [tools: ${toolCalls.join(", ")}]` : "";
64
+ results.push({ role: "assistant", content: text + suffix });
65
+ }
66
+ else if (m.role === "tool_result") {
67
+ const text = typeof m.content === "string"
68
+ ? m.content
69
+ : (m.content ?? []).filter((b) => b.type === "text").map((b) => b.text).join("\n");
70
+ results.push({ role: "tool_result", content: text.slice(0, 500) });
71
+ }
72
+ }
73
+ return results;
74
+ }
75
+ //# sourceMappingURL=summarizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summarizer.js","sourceRoot":"","sources":["../../src/compaction/summarizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export interface CompactionConfig {
2
+ enabled?: boolean;
3
+ reserveTokens?: number;
4
+ keepRecentTokens?: number;
5
+ maxContextTokens?: number;
6
+ customSummarizer?: CompactionSummarizer;
7
+ }
8
+ export interface CompactionSummarizer {
9
+ summarize(messages: CompactionInput[], previousSummary?: string): Promise<string>;
10
+ }
11
+ export interface CompactionInput {
12
+ role: string;
13
+ content: string;
14
+ }
15
+ export interface CompactionResult {
16
+ summary: string;
17
+ firstKeptEntryId: string;
18
+ tokensBefore: number;
19
+ }
20
+ export interface CutPointResult {
21
+ firstKeptIndex: number;
22
+ isSplitTurn: boolean;
23
+ }
@@ -0,0 +1,3 @@
1
+ // Compaction types
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/compaction/types.ts"],"names":[],"mappings":"AAAA,mBAAmB"}
@@ -0,0 +1,37 @@
1
+ import type { AgentMessage, AgentEvent, AgentHooks, ThinkingLevel } from "../types.js";
2
+ import type { AgentTool } from "../tools/types.js";
3
+ import type { LLMProvider } from "../llm/types.js";
4
+ import type { Approval } from "../approval/types.js";
5
+ import type { SessionManager } from "../session/session-manager.js";
6
+ import type { CheckpointManager } from "../checkpoint/checkpoint-manager.js";
7
+ import type { InjectionManager } from "../injection/injection-manager.js";
8
+ import type { ExtensionRunner } from "../extensions/runner.js";
9
+ import type { CompactionConfig } from "../compaction/types.js";
10
+ export interface AgentLoopConfig {
11
+ provider: LLMProvider;
12
+ modelId: string;
13
+ systemPrompt: string;
14
+ tools: AgentTool[];
15
+ approval: Approval;
16
+ agentName: string;
17
+ toolExecution: "sequential" | "parallel";
18
+ maxStepsPerTurn: number;
19
+ thinkingLevel?: ThinkingLevel;
20
+ capabilities?: {
21
+ vision?: boolean;
22
+ thinking?: boolean;
23
+ };
24
+ hooks?: AgentHooks;
25
+ getSteeringMessages?: () => AgentMessage[];
26
+ getFollowUpMessages?: () => AgentMessage[];
27
+ onEvent: (event: AgentEvent) => void;
28
+ signal: AbortSignal;
29
+ sessionManager?: SessionManager;
30
+ checkpointManager?: CheckpointManager;
31
+ injectionManager?: InjectionManager;
32
+ extensionRunner?: ExtensionRunner;
33
+ compaction?: CompactionConfig & {
34
+ summarize?: (messages: AgentMessage[]) => Promise<string>;
35
+ };
36
+ }
37
+ export declare function runAgentLoop(initialMessages: AgentMessage[], config: AgentLoopConfig): Promise<AgentMessage[]>;
@@ -0,0 +1,337 @@
1
+ // Agent loop — nested while loop with full integration
2
+ // session, compaction, checkpoint, injection, extension all wired in
3
+ import { executeToolCalls } from "../tools/executor.js";
4
+ import { estimateTokens, shouldCompact, findCutPoint } from "../compaction/compaction.js";
5
+ import { normalizeHistory } from "../injection/history-normalizer.js";
6
+ function defaultConvertToLlm(messages) {
7
+ return messages.filter((m) => typeof m === "object" && m !== null && "role" in m &&
8
+ (m.role === "user" || m.role === "assistant" || m.role === "tool_result"));
9
+ }
10
+ /** Strip image content blocks from messages when the model lacks vision. */
11
+ function stripImages(messages) {
12
+ return messages.map((m) => {
13
+ if ((m.role === "user" || m.role === "tool_result") && Array.isArray(m.content)) {
14
+ const filtered = m.content.filter((b) => b.type !== "image");
15
+ return { ...m, content: filtered.length > 0 ? filtered : "[image removed — model does not support vision]" };
16
+ }
17
+ return m;
18
+ });
19
+ }
20
+ function toolsToDefinitions(tools) {
21
+ return tools.map((t) => ({
22
+ name: t.name,
23
+ description: t.description,
24
+ inputSchema: t.parameters,
25
+ }));
26
+ }
27
+ function extractToolCalls(message) {
28
+ return message.content.filter((b) => b.type === "tool_call");
29
+ }
30
+ function toolResultsToMessages(results) {
31
+ return results.map((r) => ({
32
+ role: "tool_result",
33
+ toolCallId: r.toolCallId,
34
+ content: r.result.content,
35
+ isError: r.isError || undefined,
36
+ }));
37
+ }
38
+ export async function runAgentLoop(initialMessages, config) {
39
+ const allMessages = [...initialMessages];
40
+ const { onEvent, sessionManager, checkpointManager, injectionManager, extensionRunner, compaction } = config;
41
+ // Merge extension-registered tools with config tools
42
+ let allTools = extensionRunner
43
+ ? [...config.tools, ...extensionRunner.getRegisteredTools()]
44
+ : config.tools;
45
+ // Mutable copies of config values that before_agent_start can override
46
+ let { modelId, systemPrompt, thinkingLevel } = config;
47
+ // --- before_agent_start: let extensions modify agent config ---
48
+ if (extensionRunner) {
49
+ const result = await extensionRunner.emitBeforeAgentStart({
50
+ systemPrompt,
51
+ tools: allTools,
52
+ modelId,
53
+ thinkingLevel,
54
+ });
55
+ if (result) {
56
+ if (result.systemPrompt !== undefined)
57
+ systemPrompt = result.systemPrompt;
58
+ if (result.tools !== undefined)
59
+ allTools = result.tools;
60
+ if (result.modelId !== undefined)
61
+ modelId = result.modelId;
62
+ if (result.thinkingLevel !== undefined)
63
+ thinkingLevel = result.thinkingLevel;
64
+ }
65
+ }
66
+ onEvent({ type: "agent_start" });
67
+ await extensionRunner?.emitSimple("agent_start");
68
+ try {
69
+ // Outer loop: follow-up messages
70
+ let hasFollowUp = true;
71
+ while (hasFollowUp && !config.signal.aborted) {
72
+ hasFollowUp = false;
73
+ // Inner loop: tool calls + steering
74
+ let hasMoreWork = true;
75
+ let stepCount = 0;
76
+ while (hasMoreWork && !config.signal.aborted) {
77
+ hasMoreWork = false;
78
+ if (stepCount >= config.maxStepsPerTurn)
79
+ break;
80
+ stepCount++;
81
+ // --- Checkpoint (before each step) ---
82
+ if (checkpointManager) {
83
+ const cp = await checkpointManager.checkpoint();
84
+ onEvent({ type: "checkpoint", id: cp.checkpointId });
85
+ }
86
+ // --- Compaction check ---
87
+ if (compaction?.enabled !== false && compaction?.maxContextTokens) {
88
+ const tokens = estimateTokens(allMessages);
89
+ const reserve = compaction.reserveTokens ?? 16384;
90
+ if (shouldCompact(tokens, compaction.maxContextTokens, reserve)) {
91
+ onEvent({ type: "compaction_start" });
92
+ // Let extensions intercept
93
+ const extResult = await extensionRunner?.emitBeforeCompact({ messages: allMessages });
94
+ if (!extResult?.skip) {
95
+ const keepTokens = compaction.keepRecentTokens ?? 20000;
96
+ const cutPoint = findCutPoint(allMessages, keepTokens);
97
+ if (cutPoint.firstKeptIndex > 0) {
98
+ const toDiscard = allMessages.slice(0, cutPoint.firstKeptIndex);
99
+ const toKeep = allMessages.slice(cutPoint.firstKeptIndex);
100
+ let summary = extResult?.summary ?? "";
101
+ if (!summary && compaction.summarize) {
102
+ summary = await compaction.summarize(toDiscard);
103
+ }
104
+ // Replace messages: summary + kept
105
+ allMessages.length = 0;
106
+ if (summary) {
107
+ const summaryMsg = {
108
+ role: "user",
109
+ content: `<compaction-summary>${summary}</compaction-summary>`,
110
+ };
111
+ allMessages.push(summaryMsg);
112
+ }
113
+ allMessages.push(...toKeep);
114
+ // Persist compaction to session
115
+ // Append compaction entry as boundary marker, then re-append
116
+ // kept messages after it so buildSessionContext picks them up
117
+ if (sessionManager) {
118
+ await sessionManager.appendCompaction(summary, sessionManager.getLeafId() ?? "", tokens);
119
+ for (const msg of toKeep) {
120
+ await sessionManager.appendMessage(msg);
121
+ }
122
+ }
123
+ onEvent({ type: "compaction_end", summary });
124
+ await extensionRunner?.emitSimple("after_compact", {
125
+ summary,
126
+ tokensBefore: tokens,
127
+ tokensAfter: estimateTokens(allMessages),
128
+ });
129
+ }
130
+ }
131
+ }
132
+ }
133
+ // --- Dynamic injections ---
134
+ let contextMessages = [...allMessages];
135
+ if (injectionManager) {
136
+ const injections = await injectionManager.collectInjections(allMessages);
137
+ if (injections.length > 0) {
138
+ contextMessages.push(...injections);
139
+ }
140
+ }
141
+ // --- History normalization ---
142
+ contextMessages = normalizeHistory(contextMessages);
143
+ // --- Extension context hook ---
144
+ if (extensionRunner) {
145
+ const ctxResult = await extensionRunner.emitContext({ messages: contextMessages });
146
+ if (ctxResult?.messages) {
147
+ contextMessages = ctxResult.messages;
148
+ }
149
+ }
150
+ // --- Extension pending messages ---
151
+ if (extensionRunner) {
152
+ const extMsgs = extensionRunner.drainPendingMessages();
153
+ if (extMsgs.length > 0) {
154
+ allMessages.push(...extMsgs);
155
+ contextMessages.push(...extMsgs);
156
+ }
157
+ }
158
+ onEvent({ type: "turn_start" });
159
+ await extensionRunner?.emitSimple("turn_start");
160
+ // --- Transform context (user hook) ---
161
+ if (config.hooks?.transformContext) {
162
+ contextMessages = await config.hooks.transformContext(contextMessages);
163
+ }
164
+ // --- Convert to LLM messages ---
165
+ const convertToLlm = config.hooks?.convertToLlm ?? defaultConvertToLlm;
166
+ let llmMessages = convertToLlm(contextMessages);
167
+ // --- Strip images if model lacks vision ---
168
+ if (config.capabilities?.vision === false) {
169
+ llmMessages = stripImages(llmMessages);
170
+ }
171
+ // --- Stream LLM response ---
172
+ const toolDefs = toolsToDefinitions(allTools);
173
+ let requestOptions = {
174
+ model: modelId,
175
+ systemPrompt,
176
+ messages: llmMessages,
177
+ tools: toolDefs.length > 0 ? toolDefs : undefined,
178
+ thinkingLevel: config.capabilities?.thinking !== false ? thinkingLevel : undefined,
179
+ signal: config.signal,
180
+ };
181
+ // --- before_provider_request: let extensions modify LLM request ---
182
+ if (extensionRunner) {
183
+ const reqResult = await extensionRunner.emitBeforeProviderRequest({
184
+ model: requestOptions.model,
185
+ systemPrompt: requestOptions.systemPrompt,
186
+ messages: requestOptions.messages,
187
+ tools: requestOptions.tools,
188
+ thinkingLevel: requestOptions.thinkingLevel,
189
+ });
190
+ if (reqResult) {
191
+ requestOptions = {
192
+ ...requestOptions,
193
+ ...(reqResult.systemPrompt !== undefined && { systemPrompt: reqResult.systemPrompt }),
194
+ ...(reqResult.messages !== undefined && { messages: reqResult.messages }),
195
+ ...(reqResult.tools !== undefined && { tools: reqResult.tools }),
196
+ ...(reqResult.thinkingLevel !== undefined && { thinkingLevel: reqResult.thinkingLevel }),
197
+ };
198
+ }
199
+ }
200
+ let assistantMessage = null;
201
+ let usage;
202
+ let messageStartEmitted = false;
203
+ for await (const event of config.provider.stream(requestOptions)) {
204
+ if (event.type === "done") {
205
+ assistantMessage = event.message;
206
+ usage = event.usage;
207
+ onEvent({ type: "message_end", message: event.message, usage: event.usage });
208
+ await extensionRunner?.emitSimple("message_end", { message: event.message });
209
+ }
210
+ else if (event.type === "error") {
211
+ onEvent({ type: "error", error: event.error });
212
+ throw event.error;
213
+ }
214
+ else {
215
+ if (!messageStartEmitted && (event.type === "text" || event.type === "tool_call_start" || event.type === "thinking")) {
216
+ const partial = { role: "assistant", content: [] };
217
+ onEvent({ type: "message_start", message: partial });
218
+ await extensionRunner?.emitSimple("message_start", { message: partial });
219
+ messageStartEmitted = true;
220
+ }
221
+ const partial = { role: "assistant", content: [] };
222
+ onEvent({ type: "message_update", message: partial, event });
223
+ }
224
+ }
225
+ if (!assistantMessage) {
226
+ break;
227
+ }
228
+ allMessages.push(assistantMessage);
229
+ await sessionManager?.appendMessage(assistantMessage);
230
+ // --- Tool calls ---
231
+ const toolCalls = extractToolCalls(assistantMessage);
232
+ const toolResults = [];
233
+ if (toolCalls.length > 0) {
234
+ const results = await executeToolCalls(toolCalls, {
235
+ tools: allTools,
236
+ mode: config.toolExecution,
237
+ approval: config.approval,
238
+ agentName: config.agentName,
239
+ signal: config.signal,
240
+ beforeToolCall: async (ctx) => {
241
+ // Extension hook first
242
+ const extResult = await extensionRunner?.emitToolCall({
243
+ toolName: ctx.toolName,
244
+ toolCallId: ctx.toolCallId,
245
+ args: ctx.args,
246
+ });
247
+ if (extResult?.block)
248
+ return extResult;
249
+ // Then user hook
250
+ return config.hooks?.beforeToolCall?.(ctx);
251
+ },
252
+ afterToolCall: async (ctx) => {
253
+ // Extension hook first
254
+ const extResult = await extensionRunner?.emitToolResult({
255
+ toolName: ctx.toolName,
256
+ toolCallId: ctx.toolCallId,
257
+ args: ctx.args,
258
+ result: ctx.result,
259
+ isError: ctx.isError,
260
+ });
261
+ // Then user hook
262
+ const hookResult = await config.hooks?.afterToolCall?.(ctx);
263
+ return hookResult ?? extResult ?? undefined;
264
+ },
265
+ onEvent: (e) => onEvent(e),
266
+ });
267
+ const resultMessages = toolResultsToMessages(results);
268
+ toolResults.push(...resultMessages);
269
+ allMessages.push(...resultMessages);
270
+ // Persist tool results to session
271
+ for (const rm of resultMessages) {
272
+ await sessionManager?.appendMessage(rm);
273
+ }
274
+ hasMoreWork = true;
275
+ }
276
+ onEvent({ type: "turn_end", message: assistantMessage, toolResults });
277
+ await extensionRunner?.emitSimple("turn_end", { message: assistantMessage });
278
+ // --- D-Mail check (after tool execution) ---
279
+ if (checkpointManager) {
280
+ const dmailContent = await checkpointManager.handleDMail();
281
+ if (dmailContent) {
282
+ // Get the checkpoint ID the D-Mail targeted
283
+ const lastCheckpoint = checkpointManager.getAllCheckpoints();
284
+ const targetCheckpointId = lastCheckpoint.length > 0 ? lastCheckpoint[lastCheckpoint.length - 1].checkpointId : 0;
285
+ onEvent({ type: "dmail_received", checkpoint: targetCheckpointId, content: dmailContent });
286
+ // Rebuild allMessages from session context after branch
287
+ if (sessionManager) {
288
+ const ctx = sessionManager.buildSessionContext();
289
+ allMessages.length = 0;
290
+ allMessages.push(...ctx.messages);
291
+ }
292
+ // Inject D-Mail as system message
293
+ const dmailMsg = {
294
+ role: "user",
295
+ content: `<dmail>${dmailContent}</dmail>`,
296
+ };
297
+ allMessages.push(dmailMsg);
298
+ await sessionManager?.appendMessage(dmailMsg);
299
+ hasMoreWork = true;
300
+ continue;
301
+ }
302
+ }
303
+ // --- Steering messages ---
304
+ if (config.getSteeringMessages) {
305
+ const steering = config.getSteeringMessages();
306
+ if (steering.length > 0) {
307
+ allMessages.push(...steering);
308
+ for (const sm of steering) {
309
+ await sessionManager?.appendMessage(sm);
310
+ }
311
+ hasMoreWork = true;
312
+ }
313
+ }
314
+ }
315
+ // --- Follow-up messages ---
316
+ if (config.getFollowUpMessages) {
317
+ const followUps = config.getFollowUpMessages();
318
+ if (followUps.length > 0) {
319
+ allMessages.push(...followUps);
320
+ for (const fm of followUps) {
321
+ await sessionManager?.appendMessage(fm);
322
+ }
323
+ hasFollowUp = true;
324
+ }
325
+ }
326
+ }
327
+ }
328
+ catch (err) {
329
+ if (!(err instanceof Error && err.name === "AbortError")) {
330
+ onEvent({ type: "error", error: err instanceof Error ? err : new Error(String(err)) });
331
+ }
332
+ }
333
+ onEvent({ type: "agent_end", messages: allMessages });
334
+ await extensionRunner?.emitSimple("agent_end", { messages: allMessages });
335
+ return allMessages;
336
+ }
337
+ //# sourceMappingURL=agent-loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-loop.js","sourceRoot":"","sources":["../../src/core/agent-loop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ import type { AgentMessage, AgentEvent, AgentState, AgentHooks, ModelConfig, ThinkingLevel } from "../types.js";
2
+ import type { AgentTool } from "../tools/types.js";
3
+ import type { Approval } from "../approval/types.js";
4
+ import type { LLMProvider } from "../llm/types.js";
5
+ import type { SessionConfig } from "../session/types.js";
6
+ import type { CompactionConfig } from "../compaction/types.js";
7
+ import type { CheckpointConfig } from "../checkpoint/types.js";
8
+ import type { DynamicInjectionProvider } from "../injection/types.js";
9
+ import type { ExtensionFactory } from "../extensions/types.js";
10
+ import type { SubagentConfig } from "../multi-agent/types.js";
11
+ import type { SkillSource } from "../skills/types.js";
12
+ import type { MCPServerConfig, MCPClient } from "../tools/mcp-adapter.js";
13
+ import type { TaskFactory } from "../background/types.js";
14
+ import { SessionManager } from "../session/session-manager.js";
15
+ import { CheckpointManager } from "../checkpoint/checkpoint-manager.js";
16
+ import { InjectionManager } from "../injection/injection-manager.js";
17
+ import { ExtensionRunner } from "../extensions/runner.js";
18
+ import { LaborMarket } from "../multi-agent/labor-market.js";
19
+ import { MCPAdapter } from "../tools/mcp-adapter.js";
20
+ import { Wire } from "../wire/wire.js";
21
+ import { BackgroundTaskManager } from "../background/task-manager.js";
22
+ export interface AgentConfig {
23
+ model: ModelConfig;
24
+ systemPrompt: string | (() => string | Promise<string>);
25
+ tools: AgentTool[];
26
+ provider: LLMProvider;
27
+ approval: Approval;
28
+ name?: string;
29
+ toolExecution?: "sequential" | "parallel";
30
+ maxStepsPerTurn?: number;
31
+ thinkingLevel?: ThinkingLevel;
32
+ hooks?: AgentHooks;
33
+ session?: SessionConfig;
34
+ compaction?: CompactionConfig;
35
+ checkpoint?: CheckpointConfig;
36
+ injection?: DynamicInjectionProvider[];
37
+ extensions?: ExtensionFactory[];
38
+ subagents?: Record<string, SubagentConfig>;
39
+ skills?: SkillSource[];
40
+ mcp?: {
41
+ servers: MCPServerConfig[];
42
+ clientFactory: (config: MCPServerConfig) => MCPClient;
43
+ };
44
+ wire?: {
45
+ bufferSize?: number;
46
+ };
47
+ backgroundTasks?: {
48
+ factories?: Record<string, TaskFactory>;
49
+ };
50
+ }
51
+ export declare class Agent {
52
+ private _state;
53
+ private _provider;
54
+ private _approval;
55
+ private _listeners;
56
+ private _steeringQueue;
57
+ private _followUpQueue;
58
+ private _abortController;
59
+ private _config;
60
+ private _name;
61
+ private _sessionManager;
62
+ private _checkpointManager;
63
+ private _injectionManager;
64
+ private _extensionRunner;
65
+ private _laborMarket;
66
+ private _taskExecutor;
67
+ private _mcpAdapter;
68
+ private _wire;
69
+ private _backgroundTaskManager;
70
+ private _initialized;
71
+ constructor(config: AgentConfig);
72
+ prompt(input: string | AgentMessage | AgentMessage[]): Promise<AgentMessage[]>;
73
+ continue(): Promise<AgentMessage[]>;
74
+ steer(message: AgentMessage): void;
75
+ followUp(message: AgentMessage): void;
76
+ abort(): void;
77
+ subscribe(fn: (event: AgentEvent) => void): () => void;
78
+ get state(): AgentState;
79
+ get approval(): Approval;
80
+ get session(): SessionManager | undefined;
81
+ get checkpoints(): CheckpointManager | undefined;
82
+ get extensions(): ExtensionRunner | undefined;
83
+ get injections(): InjectionManager | undefined;
84
+ get laborMarket(): LaborMarket | undefined;
85
+ get mcpAdapter(): MCPAdapter | undefined;
86
+ get wire(): Wire;
87
+ get backgroundTasks(): BackgroundTaskManager | undefined;
88
+ setSystemPrompt(prompt: string): void;
89
+ setModel(model: ModelConfig): void;
90
+ setTools(tools: AgentTool[]): void;
91
+ setThinkingLevel(level: ThinkingLevel): void;
92
+ dispose(): Promise<void>;
93
+ private _ensureInitialized;
94
+ private _normalizeInput;
95
+ private _emit;
96
+ private _runLoop;
97
+ }