kode-sdk 2.7.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.
- package/LICENSE +201 -0
- package/README.md +74 -0
- package/dist/core/agent/breakpoint-manager.d.ts +16 -0
- package/dist/core/agent/breakpoint-manager.js +36 -0
- package/dist/core/agent/message-queue.d.ts +26 -0
- package/dist/core/agent/message-queue.js +47 -0
- package/dist/core/agent/permission-manager.d.ts +9 -0
- package/dist/core/agent/permission-manager.js +32 -0
- package/dist/core/agent/todo-manager.d.ts +26 -0
- package/dist/core/agent/todo-manager.js +91 -0
- package/dist/core/agent/tool-runner.d.ts +9 -0
- package/dist/core/agent/tool-runner.js +45 -0
- package/dist/core/agent.d.ts +271 -0
- package/dist/core/agent.js +2334 -0
- package/dist/core/checkpointer.d.ts +96 -0
- package/dist/core/checkpointer.js +57 -0
- package/dist/core/checkpointers/file.d.ts +20 -0
- package/dist/core/checkpointers/file.js +153 -0
- package/dist/core/checkpointers/index.d.ts +3 -0
- package/dist/core/checkpointers/index.js +9 -0
- package/dist/core/checkpointers/redis.d.ts +35 -0
- package/dist/core/checkpointers/redis.js +113 -0
- package/dist/core/compression/ai-strategy.d.ts +53 -0
- package/dist/core/compression/ai-strategy.js +298 -0
- package/dist/core/compression/index.d.ts +12 -0
- package/dist/core/compression/index.js +27 -0
- package/dist/core/compression/prompts.d.ts +35 -0
- package/dist/core/compression/prompts.js +114 -0
- package/dist/core/compression/simple-strategy.d.ts +44 -0
- package/dist/core/compression/simple-strategy.js +240 -0
- package/dist/core/compression/token-estimator.d.ts +42 -0
- package/dist/core/compression/token-estimator.js +121 -0
- package/dist/core/compression/types.d.ts +140 -0
- package/dist/core/compression/types.js +9 -0
- package/dist/core/config.d.ts +10 -0
- package/dist/core/config.js +2 -0
- package/dist/core/context-manager.d.ts +115 -0
- package/dist/core/context-manager.js +107 -0
- package/dist/core/errors.d.ts +6 -0
- package/dist/core/errors.js +17 -0
- package/dist/core/events.d.ts +49 -0
- package/dist/core/events.js +312 -0
- package/dist/core/file-pool.d.ts +43 -0
- package/dist/core/file-pool.js +120 -0
- package/dist/core/hooks.d.ts +23 -0
- package/dist/core/hooks.js +71 -0
- package/dist/core/permission-modes.d.ts +31 -0
- package/dist/core/permission-modes.js +61 -0
- package/dist/core/pool.d.ts +31 -0
- package/dist/core/pool.js +87 -0
- package/dist/core/room.d.ts +15 -0
- package/dist/core/room.js +57 -0
- package/dist/core/scheduler.d.ts +33 -0
- package/dist/core/scheduler.js +58 -0
- package/dist/core/template.d.ts +69 -0
- package/dist/core/template.js +35 -0
- package/dist/core/time-bridge.d.ts +18 -0
- package/dist/core/time-bridge.js +100 -0
- package/dist/core/todo.d.ts +34 -0
- package/dist/core/todo.js +89 -0
- package/dist/core/types.d.ts +380 -0
- package/dist/core/types.js +3 -0
- package/dist/index.d.ts +51 -0
- package/dist/index.js +147 -0
- package/dist/infra/provider.d.ts +144 -0
- package/dist/infra/provider.js +294 -0
- package/dist/infra/sandbox-factory.d.ts +10 -0
- package/dist/infra/sandbox-factory.js +21 -0
- package/dist/infra/sandbox.d.ts +87 -0
- package/dist/infra/sandbox.js +255 -0
- package/dist/infra/store.d.ts +154 -0
- package/dist/infra/store.js +584 -0
- package/dist/skills/index.d.ts +12 -0
- package/dist/skills/index.js +36 -0
- package/dist/skills/injector.d.ts +29 -0
- package/dist/skills/injector.js +96 -0
- package/dist/skills/loader.d.ts +59 -0
- package/dist/skills/loader.js +215 -0
- package/dist/skills/manager.d.ts +85 -0
- package/dist/skills/manager.js +221 -0
- package/dist/skills/parser.d.ts +40 -0
- package/dist/skills/parser.js +107 -0
- package/dist/skills/types.d.ts +107 -0
- package/dist/skills/types.js +7 -0
- package/dist/skills/validator.d.ts +30 -0
- package/dist/skills/validator.js +121 -0
- package/dist/store.d.ts +1 -0
- package/dist/store.js +5 -0
- package/dist/tools/bash_kill/index.d.ts +1 -0
- package/dist/tools/bash_kill/index.js +35 -0
- package/dist/tools/bash_kill/prompt.d.ts +2 -0
- package/dist/tools/bash_kill/prompt.js +14 -0
- package/dist/tools/bash_logs/index.d.ts +1 -0
- package/dist/tools/bash_logs/index.js +40 -0
- package/dist/tools/bash_logs/prompt.d.ts +2 -0
- package/dist/tools/bash_logs/prompt.js +14 -0
- package/dist/tools/bash_run/index.d.ts +16 -0
- package/dist/tools/bash_run/index.js +61 -0
- package/dist/tools/bash_run/prompt.d.ts +2 -0
- package/dist/tools/bash_run/prompt.js +18 -0
- package/dist/tools/builtin.d.ts +9 -0
- package/dist/tools/builtin.js +27 -0
- package/dist/tools/define.d.ts +101 -0
- package/dist/tools/define.js +214 -0
- package/dist/tools/fs_edit/index.d.ts +1 -0
- package/dist/tools/fs_edit/index.js +62 -0
- package/dist/tools/fs_edit/prompt.d.ts +2 -0
- package/dist/tools/fs_edit/prompt.js +15 -0
- package/dist/tools/fs_glob/index.d.ts +1 -0
- package/dist/tools/fs_glob/index.js +60 -0
- package/dist/tools/fs_glob/prompt.d.ts +2 -0
- package/dist/tools/fs_glob/prompt.js +18 -0
- package/dist/tools/fs_grep/index.d.ts +1 -0
- package/dist/tools/fs_grep/index.js +66 -0
- package/dist/tools/fs_grep/prompt.d.ts +2 -0
- package/dist/tools/fs_grep/prompt.js +16 -0
- package/dist/tools/fs_multi_edit/index.d.ts +1 -0
- package/dist/tools/fs_multi_edit/index.js +106 -0
- package/dist/tools/fs_multi_edit/prompt.d.ts +2 -0
- package/dist/tools/fs_multi_edit/prompt.js +16 -0
- package/dist/tools/fs_read/index.d.ts +1 -0
- package/dist/tools/fs_read/index.js +40 -0
- package/dist/tools/fs_read/prompt.d.ts +2 -0
- package/dist/tools/fs_read/prompt.js +16 -0
- package/dist/tools/fs_rm/index.d.ts +1 -0
- package/dist/tools/fs_rm/index.js +41 -0
- package/dist/tools/fs_rm/prompt.d.ts +2 -0
- package/dist/tools/fs_rm/prompt.js +14 -0
- package/dist/tools/fs_write/index.d.ts +1 -0
- package/dist/tools/fs_write/index.js +40 -0
- package/dist/tools/fs_write/prompt.d.ts +2 -0
- package/dist/tools/fs_write/prompt.js +15 -0
- package/dist/tools/index.d.ts +9 -0
- package/dist/tools/index.js +56 -0
- package/dist/tools/mcp.d.ts +73 -0
- package/dist/tools/mcp.js +198 -0
- package/dist/tools/registry.d.ts +29 -0
- package/dist/tools/registry.js +26 -0
- package/dist/tools/skill_activate/index.d.ts +5 -0
- package/dist/tools/skill_activate/index.js +63 -0
- package/dist/tools/skill_list/index.d.ts +5 -0
- package/dist/tools/skill_list/index.js +48 -0
- package/dist/tools/skill_resource/index.d.ts +5 -0
- package/dist/tools/skill_resource/index.js +82 -0
- package/dist/tools/task_run/index.d.ts +7 -0
- package/dist/tools/task_run/index.js +60 -0
- package/dist/tools/task_run/prompt.d.ts +5 -0
- package/dist/tools/task_run/prompt.js +29 -0
- package/dist/tools/todo_read/index.d.ts +1 -0
- package/dist/tools/todo_read/index.js +29 -0
- package/dist/tools/todo_read/prompt.d.ts +2 -0
- package/dist/tools/todo_read/prompt.js +18 -0
- package/dist/tools/todo_write/index.d.ts +1 -0
- package/dist/tools/todo_write/index.js +42 -0
- package/dist/tools/todo_write/prompt.d.ts +2 -0
- package/dist/tools/todo_write/prompt.js +23 -0
- package/dist/tools/tool.d.ts +43 -0
- package/dist/tools/tool.js +104 -0
- package/dist/tools/toolkit.d.ts +69 -0
- package/dist/tools/toolkit.js +98 -0
- package/dist/tools/type-inference.d.ts +127 -0
- package/dist/tools/type-inference.js +207 -0
- package/dist/utils/agent-id.d.ts +1 -0
- package/dist/utils/agent-id.js +28 -0
- package/dist/utils/session-id.d.ts +21 -0
- package/dist/utils/session-id.js +64 -0
- package/dist/utils/unicode.d.ts +17 -0
- package/dist/utils/unicode.js +62 -0
- package/package.json +117 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.defineTool = exports.globalToolRegistry = exports.ToolRegistry = exports.builtin = exports.SkillResource = exports.SkillActivate = exports.SkillList = exports.TodoWrite = exports.TodoRead = exports.createTaskRunTool = exports.BashKill = exports.BashLogs = exports.BashRun = exports.FsRm = exports.FsMultiEdit = exports.FsGrep = exports.FsGlob = exports.FsEdit = exports.FsWrite = exports.FsRead = exports.SandboxFactory = exports.AnthropicProvider = exports.LocalSandbox = exports.JSONStore = exports.ResumeError = exports.RedisCheckpointer = exports.FileCheckpointer = exports.MemoryCheckpointer = exports.PermissionModeRegistry = exports.permissionModes = exports.ToolRunner = exports.TodoManager = exports.MessageQueue = exports.PermissionManager = exports.BreakpointManager = exports.TimeBridge = exports.TodoService = exports.AgentTemplateRegistry = exports.estimateMessageTokens = exports.estimateTotalTokens = exports.AICompressionStrategy = exports.SimpleCompressionStrategy = exports.FilePool = exports.ContextManager = exports.HookManager = exports.EventBus = exports.Scheduler = exports.Room = exports.AgentPool = exports.Agent = void 0;
|
|
18
|
+
exports.generateAgentId = exports.SkillsInjector = exports.SkillsManager = exports.SkillsLoader = exports.SkillsValidator = exports.SkillsParser = exports.extendSchema = exports.mergeSchemas = exports.SchemaBuilder = exports.patterns = exports.schema = exports.inferFromExample = exports.toolMethod = exports.ToolKit = exports.disconnectAllMCP = exports.disconnectMCP = exports.getMCPTools = exports.tools = exports.tool = exports.extractTools = exports.defineTools = void 0;
|
|
19
|
+
// Core
|
|
20
|
+
var agent_1 = require("./core/agent");
|
|
21
|
+
Object.defineProperty(exports, "Agent", { enumerable: true, get: function () { return agent_1.Agent; } });
|
|
22
|
+
var pool_1 = require("./core/pool");
|
|
23
|
+
Object.defineProperty(exports, "AgentPool", { enumerable: true, get: function () { return pool_1.AgentPool; } });
|
|
24
|
+
var room_1 = require("./core/room");
|
|
25
|
+
Object.defineProperty(exports, "Room", { enumerable: true, get: function () { return room_1.Room; } });
|
|
26
|
+
var scheduler_1 = require("./core/scheduler");
|
|
27
|
+
Object.defineProperty(exports, "Scheduler", { enumerable: true, get: function () { return scheduler_1.Scheduler; } });
|
|
28
|
+
var events_1 = require("./core/events");
|
|
29
|
+
Object.defineProperty(exports, "EventBus", { enumerable: true, get: function () { return events_1.EventBus; } });
|
|
30
|
+
var hooks_1 = require("./core/hooks");
|
|
31
|
+
Object.defineProperty(exports, "HookManager", { enumerable: true, get: function () { return hooks_1.HookManager; } });
|
|
32
|
+
var context_manager_1 = require("./core/context-manager");
|
|
33
|
+
Object.defineProperty(exports, "ContextManager", { enumerable: true, get: function () { return context_manager_1.ContextManager; } });
|
|
34
|
+
var file_pool_1 = require("./core/file-pool");
|
|
35
|
+
Object.defineProperty(exports, "FilePool", { enumerable: true, get: function () { return file_pool_1.FilePool; } });
|
|
36
|
+
// Compression Strategies
|
|
37
|
+
var compression_1 = require("./core/compression");
|
|
38
|
+
Object.defineProperty(exports, "SimpleCompressionStrategy", { enumerable: true, get: function () { return compression_1.SimpleCompressionStrategy; } });
|
|
39
|
+
Object.defineProperty(exports, "AICompressionStrategy", { enumerable: true, get: function () { return compression_1.AICompressionStrategy; } });
|
|
40
|
+
Object.defineProperty(exports, "estimateTotalTokens", { enumerable: true, get: function () { return compression_1.estimateTotalTokens; } });
|
|
41
|
+
Object.defineProperty(exports, "estimateMessageTokens", { enumerable: true, get: function () { return compression_1.estimateMessageTokens; } });
|
|
42
|
+
var template_1 = require("./core/template");
|
|
43
|
+
Object.defineProperty(exports, "AgentTemplateRegistry", { enumerable: true, get: function () { return template_1.AgentTemplateRegistry; } });
|
|
44
|
+
var todo_1 = require("./core/todo");
|
|
45
|
+
Object.defineProperty(exports, "TodoService", { enumerable: true, get: function () { return todo_1.TodoService; } });
|
|
46
|
+
var time_bridge_1 = require("./core/time-bridge");
|
|
47
|
+
Object.defineProperty(exports, "TimeBridge", { enumerable: true, get: function () { return time_bridge_1.TimeBridge; } });
|
|
48
|
+
var breakpoint_manager_1 = require("./core/agent/breakpoint-manager");
|
|
49
|
+
Object.defineProperty(exports, "BreakpointManager", { enumerable: true, get: function () { return breakpoint_manager_1.BreakpointManager; } });
|
|
50
|
+
var permission_manager_1 = require("./core/agent/permission-manager");
|
|
51
|
+
Object.defineProperty(exports, "PermissionManager", { enumerable: true, get: function () { return permission_manager_1.PermissionManager; } });
|
|
52
|
+
var message_queue_1 = require("./core/agent/message-queue");
|
|
53
|
+
Object.defineProperty(exports, "MessageQueue", { enumerable: true, get: function () { return message_queue_1.MessageQueue; } });
|
|
54
|
+
var todo_manager_1 = require("./core/agent/todo-manager");
|
|
55
|
+
Object.defineProperty(exports, "TodoManager", { enumerable: true, get: function () { return todo_manager_1.TodoManager; } });
|
|
56
|
+
var tool_runner_1 = require("./core/agent/tool-runner");
|
|
57
|
+
Object.defineProperty(exports, "ToolRunner", { enumerable: true, get: function () { return tool_runner_1.ToolRunner; } });
|
|
58
|
+
var permission_modes_1 = require("./core/permission-modes");
|
|
59
|
+
Object.defineProperty(exports, "permissionModes", { enumerable: true, get: function () { return permission_modes_1.permissionModes; } });
|
|
60
|
+
Object.defineProperty(exports, "PermissionModeRegistry", { enumerable: true, get: function () { return permission_modes_1.PermissionModeRegistry; } });
|
|
61
|
+
var checkpointer_1 = require("./core/checkpointer");
|
|
62
|
+
Object.defineProperty(exports, "MemoryCheckpointer", { enumerable: true, get: function () { return checkpointer_1.MemoryCheckpointer; } });
|
|
63
|
+
var checkpointers_1 = require("./core/checkpointers");
|
|
64
|
+
Object.defineProperty(exports, "FileCheckpointer", { enumerable: true, get: function () { return checkpointers_1.FileCheckpointer; } });
|
|
65
|
+
Object.defineProperty(exports, "RedisCheckpointer", { enumerable: true, get: function () { return checkpointers_1.RedisCheckpointer; } });
|
|
66
|
+
// Types
|
|
67
|
+
__exportStar(require("./core/types"), exports);
|
|
68
|
+
var errors_1 = require("./core/errors");
|
|
69
|
+
Object.defineProperty(exports, "ResumeError", { enumerable: true, get: function () { return errors_1.ResumeError; } });
|
|
70
|
+
// Infrastructure
|
|
71
|
+
var store_1 = require("./infra/store");
|
|
72
|
+
Object.defineProperty(exports, "JSONStore", { enumerable: true, get: function () { return store_1.JSONStore; } });
|
|
73
|
+
var sandbox_1 = require("./infra/sandbox");
|
|
74
|
+
Object.defineProperty(exports, "LocalSandbox", { enumerable: true, get: function () { return sandbox_1.LocalSandbox; } });
|
|
75
|
+
var provider_1 = require("./infra/provider");
|
|
76
|
+
Object.defineProperty(exports, "AnthropicProvider", { enumerable: true, get: function () { return provider_1.AnthropicProvider; } });
|
|
77
|
+
var sandbox_factory_1 = require("./infra/sandbox-factory");
|
|
78
|
+
Object.defineProperty(exports, "SandboxFactory", { enumerable: true, get: function () { return sandbox_factory_1.SandboxFactory; } });
|
|
79
|
+
// Tools
|
|
80
|
+
var fs_read_1 = require("./tools/fs_read");
|
|
81
|
+
Object.defineProperty(exports, "FsRead", { enumerable: true, get: function () { return fs_read_1.FsRead; } });
|
|
82
|
+
var fs_write_1 = require("./tools/fs_write");
|
|
83
|
+
Object.defineProperty(exports, "FsWrite", { enumerable: true, get: function () { return fs_write_1.FsWrite; } });
|
|
84
|
+
var fs_edit_1 = require("./tools/fs_edit");
|
|
85
|
+
Object.defineProperty(exports, "FsEdit", { enumerable: true, get: function () { return fs_edit_1.FsEdit; } });
|
|
86
|
+
var fs_glob_1 = require("./tools/fs_glob");
|
|
87
|
+
Object.defineProperty(exports, "FsGlob", { enumerable: true, get: function () { return fs_glob_1.FsGlob; } });
|
|
88
|
+
var fs_grep_1 = require("./tools/fs_grep");
|
|
89
|
+
Object.defineProperty(exports, "FsGrep", { enumerable: true, get: function () { return fs_grep_1.FsGrep; } });
|
|
90
|
+
var fs_multi_edit_1 = require("./tools/fs_multi_edit");
|
|
91
|
+
Object.defineProperty(exports, "FsMultiEdit", { enumerable: true, get: function () { return fs_multi_edit_1.FsMultiEdit; } });
|
|
92
|
+
var fs_rm_1 = require("./tools/fs_rm");
|
|
93
|
+
Object.defineProperty(exports, "FsRm", { enumerable: true, get: function () { return fs_rm_1.FsRm; } });
|
|
94
|
+
var bash_run_1 = require("./tools/bash_run");
|
|
95
|
+
Object.defineProperty(exports, "BashRun", { enumerable: true, get: function () { return bash_run_1.BashRun; } });
|
|
96
|
+
var bash_logs_1 = require("./tools/bash_logs");
|
|
97
|
+
Object.defineProperty(exports, "BashLogs", { enumerable: true, get: function () { return bash_logs_1.BashLogs; } });
|
|
98
|
+
var bash_kill_1 = require("./tools/bash_kill");
|
|
99
|
+
Object.defineProperty(exports, "BashKill", { enumerable: true, get: function () { return bash_kill_1.BashKill; } });
|
|
100
|
+
var task_run_1 = require("./tools/task_run");
|
|
101
|
+
Object.defineProperty(exports, "createTaskRunTool", { enumerable: true, get: function () { return task_run_1.createTaskRunTool; } });
|
|
102
|
+
var todo_read_1 = require("./tools/todo_read");
|
|
103
|
+
Object.defineProperty(exports, "TodoRead", { enumerable: true, get: function () { return todo_read_1.TodoRead; } });
|
|
104
|
+
var todo_write_1 = require("./tools/todo_write");
|
|
105
|
+
Object.defineProperty(exports, "TodoWrite", { enumerable: true, get: function () { return todo_write_1.TodoWrite; } });
|
|
106
|
+
var skill_list_1 = require("./tools/skill_list");
|
|
107
|
+
Object.defineProperty(exports, "SkillList", { enumerable: true, get: function () { return skill_list_1.SkillList; } });
|
|
108
|
+
var skill_activate_1 = require("./tools/skill_activate");
|
|
109
|
+
Object.defineProperty(exports, "SkillActivate", { enumerable: true, get: function () { return skill_activate_1.SkillActivate; } });
|
|
110
|
+
var skill_resource_1 = require("./tools/skill_resource");
|
|
111
|
+
Object.defineProperty(exports, "SkillResource", { enumerable: true, get: function () { return skill_resource_1.SkillResource; } });
|
|
112
|
+
var builtin_1 = require("./tools/builtin");
|
|
113
|
+
Object.defineProperty(exports, "builtin", { enumerable: true, get: function () { return builtin_1.builtin; } });
|
|
114
|
+
var registry_1 = require("./tools/registry");
|
|
115
|
+
Object.defineProperty(exports, "ToolRegistry", { enumerable: true, get: function () { return registry_1.ToolRegistry; } });
|
|
116
|
+
Object.defineProperty(exports, "globalToolRegistry", { enumerable: true, get: function () { return registry_1.globalToolRegistry; } });
|
|
117
|
+
var define_1 = require("./tools/define");
|
|
118
|
+
Object.defineProperty(exports, "defineTool", { enumerable: true, get: function () { return define_1.defineTool; } });
|
|
119
|
+
Object.defineProperty(exports, "defineTools", { enumerable: true, get: function () { return define_1.defineTools; } });
|
|
120
|
+
Object.defineProperty(exports, "extractTools", { enumerable: true, get: function () { return define_1.extractTools; } });
|
|
121
|
+
var tool_1 = require("./tools/tool");
|
|
122
|
+
Object.defineProperty(exports, "tool", { enumerable: true, get: function () { return tool_1.tool; } });
|
|
123
|
+
Object.defineProperty(exports, "tools", { enumerable: true, get: function () { return tool_1.tools; } });
|
|
124
|
+
var mcp_1 = require("./tools/mcp");
|
|
125
|
+
Object.defineProperty(exports, "getMCPTools", { enumerable: true, get: function () { return mcp_1.getMCPTools; } });
|
|
126
|
+
Object.defineProperty(exports, "disconnectMCP", { enumerable: true, get: function () { return mcp_1.disconnectMCP; } });
|
|
127
|
+
Object.defineProperty(exports, "disconnectAllMCP", { enumerable: true, get: function () { return mcp_1.disconnectAllMCP; } });
|
|
128
|
+
var toolkit_1 = require("./tools/toolkit");
|
|
129
|
+
Object.defineProperty(exports, "ToolKit", { enumerable: true, get: function () { return toolkit_1.ToolKit; } });
|
|
130
|
+
Object.defineProperty(exports, "toolMethod", { enumerable: true, get: function () { return toolkit_1.toolMethod; } });
|
|
131
|
+
var type_inference_1 = require("./tools/type-inference");
|
|
132
|
+
Object.defineProperty(exports, "inferFromExample", { enumerable: true, get: function () { return type_inference_1.inferFromExample; } });
|
|
133
|
+
Object.defineProperty(exports, "schema", { enumerable: true, get: function () { return type_inference_1.schema; } });
|
|
134
|
+
Object.defineProperty(exports, "patterns", { enumerable: true, get: function () { return type_inference_1.patterns; } });
|
|
135
|
+
Object.defineProperty(exports, "SchemaBuilder", { enumerable: true, get: function () { return type_inference_1.SchemaBuilder; } });
|
|
136
|
+
Object.defineProperty(exports, "mergeSchemas", { enumerable: true, get: function () { return type_inference_1.mergeSchemas; } });
|
|
137
|
+
Object.defineProperty(exports, "extendSchema", { enumerable: true, get: function () { return type_inference_1.extendSchema; } });
|
|
138
|
+
// Skills
|
|
139
|
+
var skills_1 = require("./skills");
|
|
140
|
+
Object.defineProperty(exports, "SkillsParser", { enumerable: true, get: function () { return skills_1.SkillsParser; } });
|
|
141
|
+
Object.defineProperty(exports, "SkillsValidator", { enumerable: true, get: function () { return skills_1.SkillsValidator; } });
|
|
142
|
+
Object.defineProperty(exports, "SkillsLoader", { enumerable: true, get: function () { return skills_1.SkillsLoader; } });
|
|
143
|
+
Object.defineProperty(exports, "SkillsManager", { enumerable: true, get: function () { return skills_1.SkillsManager; } });
|
|
144
|
+
Object.defineProperty(exports, "SkillsInjector", { enumerable: true, get: function () { return skills_1.SkillsInjector; } });
|
|
145
|
+
// Utils
|
|
146
|
+
var agent_id_1 = require("./utils/agent-id");
|
|
147
|
+
Object.defineProperty(exports, "generateAgentId", { enumerable: true, get: function () { return agent_id_1.generateAgentId; } });
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { Message, ContentBlock } from '../core/types';
|
|
2
|
+
import { Configurable } from '../core/config';
|
|
3
|
+
export interface AnthropicRetryConfig {
|
|
4
|
+
/**
|
|
5
|
+
* Total attempts including the initial request.
|
|
6
|
+
*
|
|
7
|
+
* - `1` means "no retries" (single attempt).
|
|
8
|
+
* - `3` means "initial try + up to 2 retries".
|
|
9
|
+
*
|
|
10
|
+
* Default: `6`.
|
|
11
|
+
*/
|
|
12
|
+
maxAttempts?: number;
|
|
13
|
+
/**
|
|
14
|
+
* Base delay for exponential backoff in milliseconds.
|
|
15
|
+
*
|
|
16
|
+
* The actual delay grows exponentially with the attempt number:
|
|
17
|
+
* `delay = min(maxDelayMs, baseDelayMs * 2^(attemptIndex-1))`, then jitter is applied.
|
|
18
|
+
*
|
|
19
|
+
* Default: `500`.
|
|
20
|
+
*/
|
|
21
|
+
baseDelayMs?: number;
|
|
22
|
+
/**
|
|
23
|
+
* Max delay cap for exponential backoff in milliseconds.
|
|
24
|
+
*
|
|
25
|
+
* Default: `20000`.
|
|
26
|
+
*/
|
|
27
|
+
maxDelayMs?: number;
|
|
28
|
+
/**
|
|
29
|
+
* Jitter ratio applied to the computed backoff delay, in `[0, 1]`.
|
|
30
|
+
*
|
|
31
|
+
* Jitter reduces synchronized retry spikes ("thundering herd") by randomizing delay:
|
|
32
|
+
* `delay = delay * random(1-jitterRatio, 1+jitterRatio)`.
|
|
33
|
+
*
|
|
34
|
+
* Default: `0.2`.
|
|
35
|
+
*/
|
|
36
|
+
jitterRatio?: number;
|
|
37
|
+
}
|
|
38
|
+
export interface AnthropicProviderOptions {
|
|
39
|
+
/**
|
|
40
|
+
* Retry/backoff strategy for transient failures (e.g. 429, 5xx).
|
|
41
|
+
*
|
|
42
|
+
* Note: this SDK intentionally does NOT read environment variables here.
|
|
43
|
+
* If you want env-driven configuration, read env in your application and pass it in.
|
|
44
|
+
*/
|
|
45
|
+
retry?: AnthropicRetryConfig;
|
|
46
|
+
}
|
|
47
|
+
export interface ModelResponse {
|
|
48
|
+
role: 'assistant';
|
|
49
|
+
content: ContentBlock[];
|
|
50
|
+
usage?: {
|
|
51
|
+
input_tokens: number;
|
|
52
|
+
output_tokens: number;
|
|
53
|
+
};
|
|
54
|
+
stop_reason?: string;
|
|
55
|
+
}
|
|
56
|
+
export interface ModelStreamChunk {
|
|
57
|
+
type: 'content_block_start' | 'content_block_delta' | 'content_block_stop' | 'message_delta' | 'message_stop';
|
|
58
|
+
index?: number;
|
|
59
|
+
content_block?: ContentBlock;
|
|
60
|
+
delta?: {
|
|
61
|
+
type: 'text_delta' | 'input_json_delta';
|
|
62
|
+
text?: string;
|
|
63
|
+
partial_json?: string;
|
|
64
|
+
};
|
|
65
|
+
usage?: {
|
|
66
|
+
output_tokens: number;
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
export interface ModelConfig {
|
|
70
|
+
provider: 'anthropic' | string;
|
|
71
|
+
model: string;
|
|
72
|
+
baseUrl?: string;
|
|
73
|
+
apiKey?: string;
|
|
74
|
+
maxTokens?: number;
|
|
75
|
+
temperature?: number;
|
|
76
|
+
/**
|
|
77
|
+
* Optional provider-specific retry configuration.
|
|
78
|
+
* Only used by the built-in Anthropic provider.
|
|
79
|
+
*
|
|
80
|
+
* This is designed for application-layer injection (e.g. read env in your API server,
|
|
81
|
+
* then pass it to the model factory), so the SDK core stays environment-agnostic.
|
|
82
|
+
*/
|
|
83
|
+
retry?: AnthropicRetryConfig;
|
|
84
|
+
}
|
|
85
|
+
export interface ModelProvider extends Configurable<ModelConfig> {
|
|
86
|
+
readonly model: string;
|
|
87
|
+
readonly maxWindowSize: number;
|
|
88
|
+
readonly maxOutputTokens: number;
|
|
89
|
+
readonly temperature: number;
|
|
90
|
+
complete(messages: Message[], opts?: {
|
|
91
|
+
tools?: any[];
|
|
92
|
+
maxTokens?: number;
|
|
93
|
+
temperature?: number;
|
|
94
|
+
system?: string;
|
|
95
|
+
stream?: boolean;
|
|
96
|
+
}): Promise<ModelResponse>;
|
|
97
|
+
stream(messages: Message[], opts?: {
|
|
98
|
+
tools?: any[];
|
|
99
|
+
maxTokens?: number;
|
|
100
|
+
temperature?: number;
|
|
101
|
+
system?: string;
|
|
102
|
+
}): AsyncIterable<ModelStreamChunk>;
|
|
103
|
+
}
|
|
104
|
+
export declare class AnthropicProvider implements ModelProvider {
|
|
105
|
+
private apiKey;
|
|
106
|
+
private baseUrl;
|
|
107
|
+
readonly maxWindowSize = 200000;
|
|
108
|
+
readonly maxOutputTokens = 8192;
|
|
109
|
+
readonly temperature = 0.7;
|
|
110
|
+
readonly model: string;
|
|
111
|
+
private readonly retryMaxAttempts;
|
|
112
|
+
private readonly retryBaseDelayMs;
|
|
113
|
+
private readonly retryMaxDelayMs;
|
|
114
|
+
private readonly retryJitterRatio;
|
|
115
|
+
constructor(apiKey: string, model?: string, baseUrl?: string, opts?: AnthropicProviderOptions);
|
|
116
|
+
private isRetryableStatus;
|
|
117
|
+
private computeBackoffMs;
|
|
118
|
+
/**
|
|
119
|
+
* Sends a Messages API request with automatic retries for transient failures.
|
|
120
|
+
*
|
|
121
|
+
* Rules:
|
|
122
|
+
* - Retries for HTTP 429/408/409 and 5xx.
|
|
123
|
+
* - Prefer server guidance via `Retry-After` header when present (seconds or HTTP-date).
|
|
124
|
+
* - Otherwise use exponential backoff with jitter.
|
|
125
|
+
* - Additionally, if the server rejects `max_tokens` as too large, retry once with 4096.
|
|
126
|
+
*/
|
|
127
|
+
private fetchMessagesWithRetry;
|
|
128
|
+
complete(messages: Message[], opts?: {
|
|
129
|
+
tools?: any[];
|
|
130
|
+
maxTokens?: number;
|
|
131
|
+
temperature?: number;
|
|
132
|
+
system?: string;
|
|
133
|
+
stream?: boolean;
|
|
134
|
+
}): Promise<ModelResponse>;
|
|
135
|
+
stream(messages: Message[], opts?: {
|
|
136
|
+
tools?: any[];
|
|
137
|
+
maxTokens?: number;
|
|
138
|
+
temperature?: number;
|
|
139
|
+
system?: string;
|
|
140
|
+
}): AsyncIterable<ModelStreamChunk>;
|
|
141
|
+
private formatMessages;
|
|
142
|
+
private formatContent;
|
|
143
|
+
toConfig(): ModelConfig;
|
|
144
|
+
}
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AnthropicProvider = void 0;
|
|
4
|
+
const unicode_1 = require("../utils/unicode");
|
|
5
|
+
function sleep(ms) {
|
|
6
|
+
const delay = Number.isFinite(ms) ? Math.max(0, Math.floor(ms)) : 0;
|
|
7
|
+
if (delay <= 0)
|
|
8
|
+
return Promise.resolve();
|
|
9
|
+
return new Promise((resolve) => setTimeout(resolve, delay));
|
|
10
|
+
}
|
|
11
|
+
function parseRetryAfterMs(value) {
|
|
12
|
+
if (!value)
|
|
13
|
+
return null;
|
|
14
|
+
const raw = String(value).trim();
|
|
15
|
+
if (!raw)
|
|
16
|
+
return null;
|
|
17
|
+
// Retry-After can be either:
|
|
18
|
+
// - delay-seconds (integer/float)
|
|
19
|
+
// - HTTP-date
|
|
20
|
+
const asSeconds = Number(raw);
|
|
21
|
+
if (Number.isFinite(asSeconds) && asSeconds >= 0) {
|
|
22
|
+
return Math.max(0, Math.floor(asSeconds * 1000));
|
|
23
|
+
}
|
|
24
|
+
const asDateMs = Date.parse(raw);
|
|
25
|
+
if (Number.isFinite(asDateMs)) {
|
|
26
|
+
const delta = asDateMs - Date.now();
|
|
27
|
+
return Math.max(0, Math.floor(delta));
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
class AnthropicProvider {
|
|
32
|
+
constructor(apiKey, model = 'claude-3-5-sonnet-20241022', baseUrl = 'https://api.anthropic.com', opts) {
|
|
33
|
+
this.apiKey = apiKey;
|
|
34
|
+
this.baseUrl = baseUrl;
|
|
35
|
+
this.maxWindowSize = 200000;
|
|
36
|
+
// Modern Anthropic models often support >4k output tokens. Using 8k by default reduces
|
|
37
|
+
// truncated tool JSON (which can otherwise lead to invalid/empty tool inputs and stalled runs).
|
|
38
|
+
this.maxOutputTokens = 8192;
|
|
39
|
+
this.temperature = 0.7;
|
|
40
|
+
this.model = model;
|
|
41
|
+
const retry = opts?.retry;
|
|
42
|
+
const maxAttempts = typeof retry?.maxAttempts === 'number' ? retry.maxAttempts : Number.NaN;
|
|
43
|
+
const baseDelayMs = typeof retry?.baseDelayMs === 'number' ? retry.baseDelayMs : Number.NaN;
|
|
44
|
+
const maxDelayMs = typeof retry?.maxDelayMs === 'number' ? retry.maxDelayMs : Number.NaN;
|
|
45
|
+
const jitterRatio = typeof retry?.jitterRatio === 'number' ? retry.jitterRatio : Number.NaN;
|
|
46
|
+
// Defaults are intentionally conservative.
|
|
47
|
+
this.retryMaxAttempts = Number.isFinite(maxAttempts) && maxAttempts > 0 ? Math.floor(maxAttempts) : 6;
|
|
48
|
+
this.retryBaseDelayMs = Number.isFinite(baseDelayMs) && baseDelayMs >= 0 ? Math.floor(baseDelayMs) : 500;
|
|
49
|
+
this.retryMaxDelayMs = Number.isFinite(maxDelayMs) && maxDelayMs > 0 ? Math.floor(maxDelayMs) : 20000;
|
|
50
|
+
this.retryJitterRatio = Number.isFinite(jitterRatio) && jitterRatio >= 0 && jitterRatio <= 1 ? jitterRatio : 0.2;
|
|
51
|
+
}
|
|
52
|
+
isRetryableStatus(status) {
|
|
53
|
+
// 429 = rate limit. 408/409 occasionally show up in transient network/proxy scenarios.
|
|
54
|
+
// 5xx = upstream/server errors.
|
|
55
|
+
if (status === 429)
|
|
56
|
+
return true;
|
|
57
|
+
if (status === 408)
|
|
58
|
+
return true;
|
|
59
|
+
if (status === 409)
|
|
60
|
+
return true;
|
|
61
|
+
return status >= 500 && status <= 599;
|
|
62
|
+
}
|
|
63
|
+
computeBackoffMs(attemptIndex) {
|
|
64
|
+
// attemptIndex is 1-based.
|
|
65
|
+
const exp = Math.max(0, attemptIndex - 1);
|
|
66
|
+
const raw = this.retryBaseDelayMs * Math.pow(2, exp);
|
|
67
|
+
const capped = Math.min(this.retryMaxDelayMs, raw);
|
|
68
|
+
const jitter = this.retryJitterRatio;
|
|
69
|
+
if (jitter <= 0)
|
|
70
|
+
return Math.floor(capped);
|
|
71
|
+
const factor = 1 - jitter + Math.random() * (2 * jitter); // [1-j, 1+j]
|
|
72
|
+
return Math.max(0, Math.floor(capped * factor));
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Sends a Messages API request with automatic retries for transient failures.
|
|
76
|
+
*
|
|
77
|
+
* Rules:
|
|
78
|
+
* - Retries for HTTP 429/408/409 and 5xx.
|
|
79
|
+
* - Prefer server guidance via `Retry-After` header when present (seconds or HTTP-date).
|
|
80
|
+
* - Otherwise use exponential backoff with jitter.
|
|
81
|
+
* - Additionally, if the server rejects `max_tokens` as too large, retry once with 4096.
|
|
82
|
+
*/
|
|
83
|
+
async fetchMessagesWithRetry(body) {
|
|
84
|
+
const safeJson = (value) => JSON.stringify(value, (_key, v) => (typeof v === 'string' ? (0, unicode_1.stripInvalidSurrogates)(v) : v));
|
|
85
|
+
const doFetch = async () => fetch(`${this.baseUrl}/v1/messages`, {
|
|
86
|
+
method: 'POST',
|
|
87
|
+
headers: {
|
|
88
|
+
'Content-Type': 'application/json',
|
|
89
|
+
'x-api-key': this.apiKey,
|
|
90
|
+
'anthropic-version': '2023-06-01',
|
|
91
|
+
},
|
|
92
|
+
body: safeJson(body),
|
|
93
|
+
});
|
|
94
|
+
let lastStatus;
|
|
95
|
+
let lastErrorText;
|
|
96
|
+
let lastErr;
|
|
97
|
+
for (let attempt = 1; attempt <= this.retryMaxAttempts; attempt++) {
|
|
98
|
+
let response;
|
|
99
|
+
try {
|
|
100
|
+
response = await doFetch();
|
|
101
|
+
}
|
|
102
|
+
catch (err) {
|
|
103
|
+
lastErr = err;
|
|
104
|
+
if (attempt >= this.retryMaxAttempts)
|
|
105
|
+
break;
|
|
106
|
+
const delayMs = this.computeBackoffMs(attempt);
|
|
107
|
+
await sleep(delayMs);
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
if (response.ok)
|
|
111
|
+
return response;
|
|
112
|
+
lastStatus = response.status;
|
|
113
|
+
try {
|
|
114
|
+
lastErrorText = await response.text();
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
lastErrorText = '';
|
|
118
|
+
}
|
|
119
|
+
// Some model ids / gateways may reject larger max_tokens. Retry once with a smaller safe default.
|
|
120
|
+
if (body.max_tokens > 4096 && /max_tokens/i.test(lastErrorText || '')) {
|
|
121
|
+
body.max_tokens = 4096;
|
|
122
|
+
if (attempt >= this.retryMaxAttempts)
|
|
123
|
+
break;
|
|
124
|
+
// Treat as immediate retry (no sleep) because this is a deterministic request-shape fix.
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
if (!this.isRetryableStatus(response.status) || attempt >= this.retryMaxAttempts) {
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
const retryAfterMs = parseRetryAfterMs(response.headers.get('retry-after'));
|
|
131
|
+
const backoffMs = this.computeBackoffMs(attempt);
|
|
132
|
+
const delayMs = Math.max(0, retryAfterMs ?? 0, backoffMs);
|
|
133
|
+
await sleep(delayMs);
|
|
134
|
+
}
|
|
135
|
+
if (lastStatus !== undefined) {
|
|
136
|
+
throw new Error(`Anthropic API error after ${this.retryMaxAttempts} attempts: ${lastStatus} ${lastErrorText ?? ''}`);
|
|
137
|
+
}
|
|
138
|
+
throw new Error(`Anthropic API error after ${this.retryMaxAttempts} attempts: ${lastErr?.message || String(lastErr || 'Unknown error')}`);
|
|
139
|
+
}
|
|
140
|
+
async complete(messages, opts) {
|
|
141
|
+
const body = {
|
|
142
|
+
model: this.model,
|
|
143
|
+
messages: this.formatMessages(messages),
|
|
144
|
+
max_tokens: opts?.maxTokens || this.maxOutputTokens,
|
|
145
|
+
};
|
|
146
|
+
if (opts?.temperature !== undefined)
|
|
147
|
+
body.temperature = opts.temperature;
|
|
148
|
+
if (opts?.system)
|
|
149
|
+
body.system = opts.system;
|
|
150
|
+
if (opts?.tools && opts.tools.length > 0)
|
|
151
|
+
body.tools = opts.tools;
|
|
152
|
+
const response = await this.fetchMessagesWithRetry(body);
|
|
153
|
+
const data = (await response.json());
|
|
154
|
+
return {
|
|
155
|
+
role: 'assistant',
|
|
156
|
+
content: data.content,
|
|
157
|
+
usage: data.usage,
|
|
158
|
+
stop_reason: data.stop_reason,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
async *stream(messages, opts) {
|
|
162
|
+
const body = {
|
|
163
|
+
model: this.model,
|
|
164
|
+
messages: this.formatMessages(messages),
|
|
165
|
+
max_tokens: opts?.maxTokens || this.maxOutputTokens,
|
|
166
|
+
stream: true,
|
|
167
|
+
};
|
|
168
|
+
if (opts?.temperature !== undefined)
|
|
169
|
+
body.temperature = opts.temperature;
|
|
170
|
+
if (opts?.system)
|
|
171
|
+
body.system = opts.system;
|
|
172
|
+
if (opts?.tools && opts.tools.length > 0)
|
|
173
|
+
body.tools = opts.tools;
|
|
174
|
+
const response = await this.fetchMessagesWithRetry(body);
|
|
175
|
+
const reader = response.body?.getReader();
|
|
176
|
+
if (!reader)
|
|
177
|
+
throw new Error('No response body');
|
|
178
|
+
const decoder = new TextDecoder();
|
|
179
|
+
let buffer = '';
|
|
180
|
+
while (true) {
|
|
181
|
+
const { done, value } = await reader.read();
|
|
182
|
+
if (done)
|
|
183
|
+
break;
|
|
184
|
+
buffer += decoder.decode(value, { stream: true });
|
|
185
|
+
const lines = buffer.split('\n');
|
|
186
|
+
buffer = lines.pop() || '';
|
|
187
|
+
for (const line of lines) {
|
|
188
|
+
if (!line.trim() || !line.startsWith('data: '))
|
|
189
|
+
continue;
|
|
190
|
+
const data = line.slice(6);
|
|
191
|
+
if (data === '[DONE]')
|
|
192
|
+
continue;
|
|
193
|
+
try {
|
|
194
|
+
const event = JSON.parse(data);
|
|
195
|
+
if (event.type === 'content_block_start') {
|
|
196
|
+
yield { type: 'content_block_start', index: event.index, content_block: event.content_block };
|
|
197
|
+
}
|
|
198
|
+
else if (event.type === 'content_block_delta') {
|
|
199
|
+
yield { type: 'content_block_delta', index: event.index, delta: event.delta };
|
|
200
|
+
}
|
|
201
|
+
else if (event.type === 'content_block_stop') {
|
|
202
|
+
yield { type: 'content_block_stop', index: event.index };
|
|
203
|
+
}
|
|
204
|
+
else if (event.type === 'message_delta') {
|
|
205
|
+
yield { type: 'message_delta', delta: event.delta, usage: event.usage };
|
|
206
|
+
}
|
|
207
|
+
else if (event.type === 'message_stop') {
|
|
208
|
+
yield { type: 'message_stop' };
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
catch (e) {
|
|
212
|
+
// Skip invalid JSON
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
formatMessages(messages) {
|
|
218
|
+
return messages.map((msg) => ({
|
|
219
|
+
role: msg.role === 'system' ? 'user' : msg.role,
|
|
220
|
+
content: this.formatContent(msg.content),
|
|
221
|
+
}));
|
|
222
|
+
}
|
|
223
|
+
formatContent(content) {
|
|
224
|
+
// Anthropic Messages API accepts message.content as either a string or an array of content blocks.
|
|
225
|
+
if (typeof content === 'string')
|
|
226
|
+
return content;
|
|
227
|
+
if (!Array.isArray(content)) {
|
|
228
|
+
return String(content ?? '');
|
|
229
|
+
}
|
|
230
|
+
return content.map((block) => {
|
|
231
|
+
if (!block || typeof block !== 'object') {
|
|
232
|
+
return { type: 'text', text: String(block ?? '') };
|
|
233
|
+
}
|
|
234
|
+
if (block.type === 'text') {
|
|
235
|
+
return { type: 'text', text: String(block.text ?? '') };
|
|
236
|
+
}
|
|
237
|
+
if (block.type === 'tool_use') {
|
|
238
|
+
return {
|
|
239
|
+
type: 'tool_use',
|
|
240
|
+
id: String(block.id ?? ''),
|
|
241
|
+
name: String(block.name ?? ''),
|
|
242
|
+
input: block.input ?? {},
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
if (block.type === 'tool_result') {
|
|
246
|
+
const raw = block.content;
|
|
247
|
+
let formatted = raw;
|
|
248
|
+
// Older Anthropic versions expect tool_result.content to be a string.
|
|
249
|
+
// We stringify structured payloads to keep compatibility.
|
|
250
|
+
if (typeof raw === 'string') {
|
|
251
|
+
formatted = raw;
|
|
252
|
+
}
|
|
253
|
+
else if (Array.isArray(raw)) {
|
|
254
|
+
formatted = raw;
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
try {
|
|
258
|
+
formatted = JSON.stringify(raw ?? null);
|
|
259
|
+
}
|
|
260
|
+
catch {
|
|
261
|
+
formatted = String(raw ?? '');
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
const out = {
|
|
265
|
+
type: 'tool_result',
|
|
266
|
+
tool_use_id: String(block.tool_use_id ?? ''),
|
|
267
|
+
content: formatted,
|
|
268
|
+
};
|
|
269
|
+
if (block.is_error !== undefined) {
|
|
270
|
+
out.is_error = Boolean(block.is_error);
|
|
271
|
+
}
|
|
272
|
+
return out;
|
|
273
|
+
}
|
|
274
|
+
// Fallback for unknown blocks: serialize as text.
|
|
275
|
+
try {
|
|
276
|
+
return { type: 'text', text: JSON.stringify(block) };
|
|
277
|
+
}
|
|
278
|
+
catch {
|
|
279
|
+
return { type: 'text', text: String(block) };
|
|
280
|
+
}
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
toConfig() {
|
|
284
|
+
return {
|
|
285
|
+
provider: 'anthropic',
|
|
286
|
+
model: this.model,
|
|
287
|
+
baseUrl: this.baseUrl,
|
|
288
|
+
apiKey: this.apiKey,
|
|
289
|
+
maxTokens: this.maxOutputTokens,
|
|
290
|
+
temperature: this.temperature,
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
exports.AnthropicProvider = AnthropicProvider;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Sandbox, SandboxKind } from './sandbox';
|
|
2
|
+
export type SandboxFactoryFn = (config: Record<string, any>) => Sandbox;
|
|
3
|
+
export declare class SandboxFactory {
|
|
4
|
+
private factories;
|
|
5
|
+
constructor();
|
|
6
|
+
register(kind: SandboxKind, factory: SandboxFactoryFn): void;
|
|
7
|
+
create(config: {
|
|
8
|
+
kind: SandboxKind;
|
|
9
|
+
} & Record<string, any>): Sandbox;
|
|
10
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SandboxFactory = void 0;
|
|
4
|
+
const sandbox_1 = require("./sandbox");
|
|
5
|
+
class SandboxFactory {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.factories = new Map();
|
|
8
|
+
this.factories.set('local', (config) => new sandbox_1.LocalSandbox(config));
|
|
9
|
+
}
|
|
10
|
+
register(kind, factory) {
|
|
11
|
+
this.factories.set(kind, factory);
|
|
12
|
+
}
|
|
13
|
+
create(config) {
|
|
14
|
+
const factory = this.factories.get(config.kind);
|
|
15
|
+
if (!factory) {
|
|
16
|
+
throw new Error(`Sandbox factory not registered: ${config.kind}`);
|
|
17
|
+
}
|
|
18
|
+
return factory(config);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.SandboxFactory = SandboxFactory;
|