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,78 @@
1
+ import { Agent } from "./core/agent.js";
2
+ import type { AgentTool } from "./tools/types.js";
3
+ import type { AgentHooks, ModelConfig, ThinkingLevel, ApprovalConfig } from "./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
+ export interface CreateAgentConfig {
15
+ model: ModelConfig;
16
+ systemPrompt: string | (() => string | Promise<string>);
17
+ tools: AgentTool[];
18
+ name?: string;
19
+ approval?: ApprovalConfig;
20
+ thinkingLevel?: ThinkingLevel;
21
+ toolExecution?: "sequential" | "parallel";
22
+ maxStepsPerTurn?: number;
23
+ hooks?: AgentHooks;
24
+ session?: SessionConfig;
25
+ compaction?: CompactionConfig;
26
+ checkpoint?: CheckpointConfig;
27
+ injection?: DynamicInjectionProvider[];
28
+ extensions?: ExtensionFactory[];
29
+ subagents?: Record<string, SubagentConfig>;
30
+ skills?: SkillSource[];
31
+ mcp?: {
32
+ servers: MCPServerConfig[];
33
+ clientFactory: (config: MCPServerConfig) => MCPClient;
34
+ };
35
+ wire?: {
36
+ bufferSize?: number;
37
+ };
38
+ backgroundTasks?: {
39
+ factories?: Record<string, TaskFactory>;
40
+ };
41
+ provider?: LLMProvider;
42
+ }
43
+ export declare function createAgent(config: CreateAgentConfig): Agent;
44
+ export { Agent } from "./core/agent.js";
45
+ export { ApprovalImpl } from "./approval/approval.js";
46
+ export { registerProvider, resolveProvider } from "./llm/provider.js";
47
+ export { executeToolCalls } from "./tools/executor.js";
48
+ export { SessionManager } from "./session/session-manager.js";
49
+ export { buildSessionContext } from "./session/session-context-builder.js";
50
+ export { CheckpointManager } from "./checkpoint/checkpoint-manager.js";
51
+ export { DenwaRenji } from "./checkpoint/dmail.js";
52
+ export { InjectionManager } from "./injection/injection-manager.js";
53
+ export { normalizeHistory } from "./injection/history-normalizer.js";
54
+ export { LaborMarket } from "./multi-agent/labor-market.js";
55
+ export { TaskExecutor } from "./multi-agent/task-executor.js";
56
+ export { ExtensionRunner } from "./extensions/runner.js";
57
+ export { discoverSkills } from "./skills/discovery.js";
58
+ export { loadSkill, renderSkillTemplate } from "./skills/loader.js";
59
+ export { MCPAdapter } from "./tools/mcp-adapter.js";
60
+ export { estimateTokens, shouldCompact, findCutPoint } from "./compaction/compaction.js";
61
+ export { LLMSummarizer } from "./compaction/summarizer.js";
62
+ export { Wire } from "./wire/wire.js";
63
+ export { BackgroundTaskManager } from "./background/task-manager.js";
64
+ export { createBackgroundTaskTools } from "./background/tools.js";
65
+ export type { AgentMessage, AgentEvent, AgentState, AgentHooks, ModelConfig, ThinkingLevel, AgentTool, ApprovalConfig, CustomAgentMessages, } from "./types.js";
66
+ export type { AgentToolResult, ToolExecutionContext, BeforeToolCallContext, BeforeToolCallResult, AfterToolCallContext, AfterToolCallResult, } from "./tools/types.js";
67
+ export type { Approval, ApprovalRequest, ApprovalResponse, } from "./approval/types.js";
68
+ export type { LLMProvider, LLMRequestOptions, AssistantMessage, AssistantMessageEvent, UserMessage, ToolResultMessage, Message, TokenUsage, ContentBlock, TextContent, ImageContent, ToolCallBlock, ToolDefinition, } from "./llm/types.js";
69
+ export type { SessionEntry, SessionMessageEntry, CompactionEntry, BranchSummaryEntry, CheckpointEntry, SessionTreeNode, SessionContext, SessionConfig, } from "./session/types.js";
70
+ export type { CompactionConfig, CompactionSummarizer, CompactionResult, } from "./compaction/types.js";
71
+ export type { CheckpointConfig, DMail, CheckpointInfo, } from "./checkpoint/types.js";
72
+ export type { DynamicInjection, DynamicInjectionProvider, } from "./injection/types.js";
73
+ export type { SubagentConfig } from "./multi-agent/types.js";
74
+ export type { ExtensionFactory, ExtensionAPI, ExtensionEventType, ExtensionEventMap, ExtensionHandler, BeforeAgentStartEvent, BeforeAgentStartResult, BeforeProviderRequestEvent, BeforeProviderRequestResult, ToolCallEvent, ToolCallEventResult, ToolResultEvent, ToolResultEventResult, ContextEvent, ContextEventResult, BeforeCompactEvent, BeforeCompactResult, AfterCompactEvent, SessionEvent, } from "./extensions/types.js";
75
+ export type { Skill, SkillSource } from "./skills/types.js";
76
+ export type { MCPServerConfig, MCPTransport, MCPServerStatus, MCPClient } from "./tools/mcp-adapter.js";
77
+ export type { WireMessage, WireSubscriber, WireSubscription } from "./wire/types.js";
78
+ export type { BackgroundTaskStatus, BackgroundTaskInfo, BackgroundTaskHandle, BackgroundTaskEvent, TaskFactory, } from "./background/types.js";
package/dist/index.js ADDED
@@ -0,0 +1,53 @@
1
+ // Public API surface
2
+ import { Agent } from "./core/agent.js";
3
+ import { ApprovalImpl } from "./approval/approval.js";
4
+ import { resolveProvider } from "./llm/provider.js";
5
+ export function createAgent(config) {
6
+ const provider = config.provider ?? resolveProvider(config.model);
7
+ const approval = new ApprovalImpl(config.approval);
8
+ return new Agent({
9
+ model: config.model,
10
+ systemPrompt: config.systemPrompt,
11
+ tools: config.tools,
12
+ provider,
13
+ approval,
14
+ name: config.name,
15
+ toolExecution: config.toolExecution,
16
+ maxStepsPerTurn: config.maxStepsPerTurn,
17
+ thinkingLevel: config.thinkingLevel,
18
+ hooks: config.hooks,
19
+ session: config.session,
20
+ compaction: config.compaction,
21
+ checkpoint: config.checkpoint,
22
+ injection: config.injection,
23
+ extensions: config.extensions,
24
+ subagents: config.subagents,
25
+ skills: config.skills,
26
+ mcp: config.mcp,
27
+ wire: config.wire,
28
+ backgroundTasks: config.backgroundTasks,
29
+ });
30
+ }
31
+ // Re-export classes
32
+ export { Agent } from "./core/agent.js";
33
+ export { ApprovalImpl } from "./approval/approval.js";
34
+ export { registerProvider, resolveProvider } from "./llm/provider.js";
35
+ export { executeToolCalls } from "./tools/executor.js";
36
+ export { SessionManager } from "./session/session-manager.js";
37
+ export { buildSessionContext } from "./session/session-context-builder.js";
38
+ export { CheckpointManager } from "./checkpoint/checkpoint-manager.js";
39
+ export { DenwaRenji } from "./checkpoint/dmail.js";
40
+ export { InjectionManager } from "./injection/injection-manager.js";
41
+ export { normalizeHistory } from "./injection/history-normalizer.js";
42
+ export { LaborMarket } from "./multi-agent/labor-market.js";
43
+ export { TaskExecutor } from "./multi-agent/task-executor.js";
44
+ export { ExtensionRunner } from "./extensions/runner.js";
45
+ export { discoverSkills } from "./skills/discovery.js";
46
+ export { loadSkill, renderSkillTemplate } from "./skills/loader.js";
47
+ export { MCPAdapter } from "./tools/mcp-adapter.js";
48
+ export { estimateTokens, shouldCompact, findCutPoint } from "./compaction/compaction.js";
49
+ export { LLMSummarizer } from "./compaction/summarizer.js";
50
+ export { Wire } from "./wire/wire.js";
51
+ export { BackgroundTaskManager } from "./background/task-manager.js";
52
+ export { createBackgroundTaskTools } from "./background/tools.js";
53
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qBAAqB;AAErB,OAAO,EAAE,KAAK,EAA2C,MAAM,iBAAiB,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAoB,MAAM,mBAAmB,CAAC;AA4CtE,MAAM,UAAU,WAAW,CAAC,MAAyB;IACnD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEnD,OAAO,IAAI,KAAK,CAAC;QACf,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,QAAQ;QACR,QAAQ;QACR,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,eAAe,EAAE,MAAM,CAAC,eAAe;KACxC,CAAC,CAAC;AACL,CAAC;AAED,oBAAoB;AACpB,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { AgentMessage } from "../types.js";
2
+ export declare function normalizeHistory(messages: AgentMessage[]): AgentMessage[];
@@ -0,0 +1,34 @@
1
+ // History normalizer — merge adjacent user messages
2
+ export function normalizeHistory(messages) {
3
+ if (messages.length <= 1)
4
+ return messages;
5
+ const result = [];
6
+ for (const msg of messages) {
7
+ if (!msg || typeof msg !== "object" || !("role" in msg)) {
8
+ result.push(msg);
9
+ continue;
10
+ }
11
+ const current = msg;
12
+ const prev = result.length > 0 ? result[result.length - 1] : null;
13
+ // Merge adjacent user messages
14
+ if (current.role === "user" &&
15
+ prev && typeof prev === "object" && "role" in prev &&
16
+ prev.role === "user") {
17
+ const prevMsg = prev;
18
+ const prevText = typeof prevMsg.content === "string"
19
+ ? prevMsg.content
20
+ : prevMsg.content.filter((b) => b.type === "text").map((b) => b.text).join("\n");
21
+ const currentText = typeof current.content === "string"
22
+ ? current.content
23
+ : current.content.filter((b) => b.type === "text").map((b) => b.text).join("\n");
24
+ result[result.length - 1] = {
25
+ role: "user",
26
+ content: prevText + "\n" + currentText,
27
+ };
28
+ continue;
29
+ }
30
+ result.push(msg);
31
+ }
32
+ return result;
33
+ }
34
+ //# sourceMappingURL=history-normalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history-normalizer.js","sourceRoot":"","sources":["../../src/injection/history-normalizer.ts"],"names":[],"mappings":"AAAA,oDAAoD;AAIpD,MAAM,UAAU,gBAAgB,CAAC,QAAwB;IACvD,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IAE1C,MAAM,MAAM,GAAmB,EAAE,CAAC;IAElC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC;YACxD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,SAAS;QACX,CAAC;QAED,MAAM,OAAO,GAAG,GAAc,CAAC;QAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAElE,+BAA+B;QAC/B,IACE,OAAO,CAAC,IAAI,KAAK,MAAM;YACvB,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,MAAM,IAAI,IAAI;YACjD,IAAgB,CAAC,IAAI,KAAK,MAAM,EACjC,CAAC;YACD,MAAM,OAAO,GAAG,IAAkC,CAAC;YACnD,MAAM,QAAQ,GAAG,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ;gBAClD,CAAC,CAAC,OAAO,CAAC,OAAO;gBACjB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAAsB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzG,MAAM,WAAW,GAAG,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ;gBACrD,CAAC,CAAC,OAAO,CAAC,OAAO;gBACjB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAAsB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEzG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG;gBAC1B,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,QAAQ,GAAG,IAAI,GAAG,WAAW;aACvC,CAAC;YACF,SAAS;QACX,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { DynamicInjectionProvider } from "./types.js";
2
+ import type { AgentMessage } from "../types.js";
3
+ export declare class InjectionManager {
4
+ private _providers;
5
+ constructor(providers?: DynamicInjectionProvider[]);
6
+ addProvider(provider: DynamicInjectionProvider): void;
7
+ collectInjections(history: AgentMessage[]): Promise<AgentMessage[]>;
8
+ }
@@ -0,0 +1,28 @@
1
+ // Injection manager — collect injections from providers before each LLM step
2
+ export class InjectionManager {
3
+ _providers = [];
4
+ constructor(providers) {
5
+ if (providers)
6
+ this._providers = [...providers];
7
+ }
8
+ addProvider(provider) {
9
+ this._providers.push(provider);
10
+ }
11
+ async collectInjections(history) {
12
+ if (this._providers.length === 0)
13
+ return [];
14
+ const allInjections = [];
15
+ for (const provider of this._providers) {
16
+ const injections = await provider.getInjections(history);
17
+ allInjections.push(...injections);
18
+ }
19
+ if (allInjections.length === 0)
20
+ return [];
21
+ // Wrap injections as user messages with system-reminder tags
22
+ return allInjections.map((inj) => ({
23
+ role: "user",
24
+ content: `<system-reminder type="${inj.type}">${inj.content}</system-reminder>`,
25
+ }));
26
+ }
27
+ }
28
+ //# sourceMappingURL=injection-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injection-manager.js","sourceRoot":"","sources":["../../src/injection/injection-manager.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAK7E,MAAM,OAAO,gBAAgB;IACnB,UAAU,GAA+B,EAAE,CAAC;IAEpD,YAAY,SAAsC;QAChD,IAAI,SAAS;YAAE,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;IAClD,CAAC;IAED,WAAW,CAAC,QAAkC;QAC5C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,OAAuB;QAC7C,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAE5C,MAAM,aAAa,GAAuB,EAAE,CAAC;QAC7C,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACvC,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YACzD,aAAa,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;QACpC,CAAC;QAED,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAE1C,6DAA6D;QAC7D,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,EAAe,EAAE,CAAC,CAAC;YAC9C,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,0BAA0B,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,OAAO,oBAAoB;SAChF,CAAC,CAAC,CAAC;IACN,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import type { AgentMessage } from "../types.js";
2
+ export interface DynamicInjection {
3
+ type: string;
4
+ content: string;
5
+ }
6
+ export interface DynamicInjectionProvider {
7
+ getInjections(history: AgentMessage[]): Promise<DynamicInjection[]>;
8
+ }
@@ -0,0 +1,3 @@
1
+ // Dynamic injection types
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/injection/types.ts"],"names":[],"mappings":"AAAA,0BAA0B"}
@@ -0,0 +1,16 @@
1
+ import type { LLMProvider, LLMRequestOptions, AssistantMessageEvent } from "./types.js";
2
+ export declare class AnthropicProvider implements LLMProvider {
3
+ private client;
4
+ constructor(apiKey?: string, baseUrl?: string);
5
+ stream(options: LLMRequestOptions): AsyncIterable<AssistantMessageEvent>;
6
+ private _streamOnce;
7
+ }
8
+ export declare function registerProvider(name: string, factory: (config: {
9
+ apiKey?: string;
10
+ baseUrl?: string;
11
+ }) => LLMProvider): void;
12
+ export declare function resolveProvider(config: {
13
+ provider: string;
14
+ apiKey?: string;
15
+ baseUrl?: string;
16
+ }): LLMProvider;
@@ -0,0 +1,233 @@
1
+ // Anthropic LLM provider
2
+ import Anthropic from "@anthropic-ai/sdk";
3
+ function mapThinkingLevel(level) {
4
+ if (!level || level === "off")
5
+ return undefined;
6
+ const budgets = {
7
+ minimal: 1024,
8
+ low: 4096,
9
+ medium: 10240,
10
+ high: 20480,
11
+ xhigh: 40960,
12
+ };
13
+ return budgets[level];
14
+ }
15
+ export class AnthropicProvider {
16
+ client;
17
+ constructor(apiKey, baseUrl) {
18
+ this.client = new Anthropic({
19
+ apiKey: apiKey || process.env.ANTHROPIC_API_KEY,
20
+ ...(baseUrl ? { baseURL: baseUrl } : {}),
21
+ });
22
+ }
23
+ async *stream(options) {
24
+ const maxRetries = 3;
25
+ let lastError = null;
26
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
27
+ if (attempt > 0) {
28
+ const delay = Math.min(1000 * Math.pow(2, attempt - 1), 4000);
29
+ await new Promise((r) => setTimeout(r, delay));
30
+ }
31
+ try {
32
+ // On last attempt or first attempt, stream directly for real-time output.
33
+ // On intermediate retries, errors will be caught and retried.
34
+ yield* this._streamOnce(options);
35
+ return;
36
+ }
37
+ catch (err) {
38
+ lastError = err instanceof Error ? err : new Error(String(err));
39
+ // Only retry on transient errors, and only if we haven't yielded
40
+ // any events yet (connection-level failures before streaming starts)
41
+ const isRetryable = lastError.message.includes("rate_limit")
42
+ || lastError.message.includes("overloaded")
43
+ || lastError.message.includes("529")
44
+ || lastError.message.includes("500")
45
+ || lastError.message.includes("ECONNRESET");
46
+ if (!isRetryable || attempt === maxRetries) {
47
+ yield { type: "error", error: lastError };
48
+ return;
49
+ }
50
+ // Note: if _streamOnce yielded partial events before throwing,
51
+ // those events are already consumed by the caller. Retries only
52
+ // help with pre-stream connection failures, not mid-stream breaks.
53
+ }
54
+ }
55
+ }
56
+ async *_streamOnce(options) {
57
+ const { model, systemPrompt, messages, tools, thinkingLevel, maxTokens, signal } = options;
58
+ const thinkingBudget = mapThinkingLevel(thinkingLevel);
59
+ const params = {
60
+ model,
61
+ max_tokens: maxTokens ?? 8192,
62
+ system: systemPrompt,
63
+ messages: messages.map((m) => {
64
+ if (m.role === "user") {
65
+ return { role: "user", content: typeof m.content === "string" ? m.content : m.content.map(mapContentBlock) };
66
+ }
67
+ if (m.role === "assistant") {
68
+ return { role: "assistant", content: m.content.map(mapAssistantBlock) };
69
+ }
70
+ // tool_result
71
+ return {
72
+ role: "user",
73
+ content: [{
74
+ type: "tool_result",
75
+ tool_use_id: m.toolCallId,
76
+ content: typeof m.content === "string" ? m.content : m.content.map(mapToolResultContent),
77
+ ...(m.isError ? { is_error: true } : {}),
78
+ }],
79
+ };
80
+ }),
81
+ stream: true,
82
+ ...(tools?.length ? {
83
+ tools: tools.map((t) => ({
84
+ name: t.name,
85
+ description: t.description,
86
+ input_schema: t.inputSchema,
87
+ })),
88
+ } : {}),
89
+ ...(thinkingBudget ? {
90
+ thinking: { type: "enabled", budget_tokens: thinkingBudget },
91
+ } : {}),
92
+ };
93
+ const contentBlocks = [];
94
+ const toolInputBuffers = new Map();
95
+ let usage = { inputTokens: 0, outputTokens: 0, totalTokens: 0 };
96
+ const stream = this.client.messages.stream(params, { signal });
97
+ try {
98
+ for await (const event of stream) {
99
+ if (event.type === "content_block_start") {
100
+ const block = event.content_block;
101
+ if (block.type === "text") {
102
+ contentBlocks.push({ type: "text", text: "" });
103
+ }
104
+ else if (block.type === "tool_use") {
105
+ contentBlocks.push({ type: "tool_call", id: block.id, name: block.name, input: {} });
106
+ toolInputBuffers.set(event.index, "");
107
+ yield { type: "tool_call_start", id: block.id, name: block.name };
108
+ }
109
+ else if (block.type === "thinking") {
110
+ contentBlocks.push({ type: "thinking", thinking: "" });
111
+ }
112
+ }
113
+ else if (event.type === "content_block_delta") {
114
+ const delta = event.delta;
115
+ if (delta.type === "text_delta") {
116
+ const block = contentBlocks[event.index];
117
+ if (block && block.type === "text") {
118
+ block.text += delta.text;
119
+ }
120
+ yield { type: "text", text: delta.text };
121
+ }
122
+ else if (delta.type === "input_json_delta") {
123
+ const buf = (toolInputBuffers.get(event.index) ?? "") + delta.partial_json;
124
+ toolInputBuffers.set(event.index, buf);
125
+ const block = contentBlocks[event.index];
126
+ if (block && block.type === "tool_call") {
127
+ yield { type: "tool_call_delta", id: block.id, input: delta.partial_json };
128
+ }
129
+ }
130
+ else if (delta.type === "thinking_delta") {
131
+ const block = contentBlocks[event.index];
132
+ if (block && block.type === "thinking") {
133
+ block.thinking += delta.thinking;
134
+ }
135
+ yield { type: "thinking", thinking: delta.thinking };
136
+ }
137
+ }
138
+ else if (event.type === "content_block_stop") {
139
+ // Parse accumulated tool input JSON
140
+ const block = contentBlocks[event.index];
141
+ if (block && block.type === "tool_call") {
142
+ const buf = toolInputBuffers.get(event.index) ?? "{}";
143
+ try {
144
+ block.input = JSON.parse(buf || "{}");
145
+ }
146
+ catch {
147
+ block.input = {};
148
+ }
149
+ toolInputBuffers.delete(event.index);
150
+ }
151
+ }
152
+ else if (event.type === "message_delta") {
153
+ if (event.usage) {
154
+ usage = {
155
+ inputTokens: usage.inputTokens,
156
+ outputTokens: event.usage.output_tokens,
157
+ totalTokens: usage.inputTokens + event.usage.output_tokens,
158
+ };
159
+ }
160
+ }
161
+ else if (event.type === "message_start") {
162
+ if (event.message.usage) {
163
+ usage = {
164
+ inputTokens: event.message.usage.input_tokens,
165
+ outputTokens: event.message.usage.output_tokens,
166
+ totalTokens: event.message.usage.input_tokens + event.message.usage.output_tokens,
167
+ cacheReadTokens: event.message.usage.cache_read_input_tokens,
168
+ cacheWriteTokens: event.message.usage.cache_creation_input_tokens,
169
+ };
170
+ }
171
+ }
172
+ }
173
+ }
174
+ catch (err) {
175
+ throw err; // Let retry wrapper handle it
176
+ }
177
+ const message = { role: "assistant", content: contentBlocks };
178
+ yield { type: "done", message, usage };
179
+ }
180
+ }
181
+ function mapToolResultContent(block) {
182
+ if (block.type === "image" && block.source?.type === "base64") {
183
+ return {
184
+ type: "image",
185
+ source: { type: "base64", media_type: block.source.mediaType, data: block.source.data },
186
+ };
187
+ }
188
+ if (block.type === "image" && block.source?.type === "url") {
189
+ return { type: "image", source: { type: "url", url: block.source.url } };
190
+ }
191
+ return { type: "text", text: block.type === "text" ? block.text : JSON.stringify(block) };
192
+ }
193
+ function mapContentBlock(block) {
194
+ if (block.type === "text") {
195
+ return { type: "text", text: block.text };
196
+ }
197
+ if (block.type === "image") {
198
+ if (block.source.type === "base64") {
199
+ return {
200
+ type: "image",
201
+ source: { type: "base64", media_type: block.source.mediaType, data: block.source.data },
202
+ };
203
+ }
204
+ return { type: "image", source: { type: "url", url: block.source.url } };
205
+ }
206
+ return { type: "text", text: JSON.stringify(block) };
207
+ }
208
+ function mapAssistantBlock(block) {
209
+ if (block.type === "text") {
210
+ return { type: "text", text: block.text };
211
+ }
212
+ if (block.type === "tool_call") {
213
+ return { type: "tool_use", id: block.id, name: block.name, input: block.input };
214
+ }
215
+ if (block.type === "thinking") {
216
+ return { type: "thinking", thinking: block.thinking, signature: "" };
217
+ }
218
+ return { type: "text", text: JSON.stringify(block) };
219
+ }
220
+ // --- Provider registry ---
221
+ const providers = new Map();
222
+ providers.set("anthropic", (config) => new AnthropicProvider(config.apiKey, config.baseUrl));
223
+ export function registerProvider(name, factory) {
224
+ providers.set(name, factory);
225
+ }
226
+ export function resolveProvider(config) {
227
+ const factory = providers.get(config.provider);
228
+ if (!factory) {
229
+ throw new Error(`Unknown LLM provider: ${config.provider}. Register it with registerProvider().`);
230
+ }
231
+ return factory(config);
232
+ }
233
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/llm/provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ export interface ModelConfig {
2
+ provider: string;
3
+ model: string;
4
+ apiKey?: string;
5
+ baseUrl?: string;
6
+ maxContextTokens: number;
7
+ capabilities?: {
8
+ vision?: boolean;
9
+ thinking?: boolean;
10
+ };
11
+ }
12
+ export type ThinkingLevel = "off" | "minimal" | "low" | "medium" | "high" | "xhigh";
13
+ export interface TextContent {
14
+ type: "text";
15
+ text: string;
16
+ }
17
+ export interface ImageContent {
18
+ type: "image";
19
+ source: {
20
+ type: "base64";
21
+ mediaType: string;
22
+ data: string;
23
+ } | {
24
+ type: "url";
25
+ url: string;
26
+ };
27
+ }
28
+ export type ContentBlock = TextContent | ImageContent;
29
+ export interface ToolDefinition {
30
+ name: string;
31
+ description: string;
32
+ inputSchema: Record<string, unknown>;
33
+ }
34
+ export interface UserMessage {
35
+ role: "user";
36
+ content: string | ContentBlock[];
37
+ }
38
+ export interface ToolCallBlock {
39
+ type: "tool_call";
40
+ id: string;
41
+ name: string;
42
+ input: Record<string, unknown>;
43
+ }
44
+ export interface TextBlock {
45
+ type: "text";
46
+ text: string;
47
+ }
48
+ export interface ThinkingBlock {
49
+ type: "thinking";
50
+ thinking: string;
51
+ }
52
+ export type AssistantContentBlock = TextBlock | ToolCallBlock | ThinkingBlock;
53
+ export interface AssistantMessage {
54
+ role: "assistant";
55
+ content: AssistantContentBlock[];
56
+ }
57
+ export interface ToolResultMessage {
58
+ role: "tool_result";
59
+ toolCallId: string;
60
+ content: string | ContentBlock[];
61
+ isError?: boolean;
62
+ }
63
+ export type Message = UserMessage | AssistantMessage | ToolResultMessage;
64
+ export interface TokenUsage {
65
+ inputTokens: number;
66
+ outputTokens: number;
67
+ totalTokens: number;
68
+ cacheReadTokens?: number;
69
+ cacheWriteTokens?: number;
70
+ }
71
+ export interface StreamTextEvent {
72
+ type: "text";
73
+ text: string;
74
+ }
75
+ export interface StreamToolCallStartEvent {
76
+ type: "tool_call_start";
77
+ id: string;
78
+ name: string;
79
+ }
80
+ export interface StreamToolCallDeltaEvent {
81
+ type: "tool_call_delta";
82
+ id: string;
83
+ input: string;
84
+ }
85
+ export interface StreamThinkingEvent {
86
+ type: "thinking";
87
+ thinking: string;
88
+ }
89
+ export interface StreamDoneEvent {
90
+ type: "done";
91
+ message: AssistantMessage;
92
+ usage: TokenUsage;
93
+ }
94
+ export interface StreamErrorEvent {
95
+ type: "error";
96
+ error: Error;
97
+ }
98
+ export type AssistantMessageEvent = StreamTextEvent | StreamToolCallStartEvent | StreamToolCallDeltaEvent | StreamThinkingEvent | StreamDoneEvent | StreamErrorEvent;
99
+ export interface LLMProvider {
100
+ stream(options: LLMRequestOptions): AsyncIterable<AssistantMessageEvent>;
101
+ }
102
+ export interface LLMRequestOptions {
103
+ model: string;
104
+ systemPrompt: string;
105
+ messages: Message[];
106
+ tools?: ToolDefinition[];
107
+ thinkingLevel?: ThinkingLevel;
108
+ maxTokens?: number;
109
+ signal?: AbortSignal;
110
+ }
@@ -0,0 +1,3 @@
1
+ // LLM abstraction types
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/llm/types.ts"],"names":[],"mappings":"AAAA,wBAAwB"}
@@ -0,0 +1,16 @@
1
+ import type { Agent } from "../core/agent.js";
2
+ export declare class LaborMarket {
3
+ private _fixed;
4
+ private _dynamic;
5
+ addFixed(name: string, agent: Agent, description: string): void;
6
+ addDynamic(name: string, agent: Agent, description: string): void;
7
+ get(name: string): Agent | undefined;
8
+ getDescription(name: string): string | undefined;
9
+ listAll(): {
10
+ name: string;
11
+ description: string;
12
+ type: "fixed" | "dynamic";
13
+ }[];
14
+ removeDynamic(name: string): boolean;
15
+ has(name: string): boolean;
16
+ }