@usestratus/sdk 0.12.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/dist/azure/chat-completions-model.d.ts +23 -0
- package/dist/azure/chat-completions-model.d.ts.map +1 -0
- package/dist/azure/chat-completions-model.js +293 -0
- package/dist/azure/chat-completions-model.js.map +1 -0
- package/dist/azure/endpoint.d.ts +18 -0
- package/dist/azure/endpoint.d.ts.map +1 -0
- package/dist/azure/endpoint.js +57 -0
- package/dist/azure/endpoint.js.map +1 -0
- package/dist/azure/index.d.ts +5 -0
- package/dist/azure/index.d.ts.map +1 -0
- package/dist/azure/index.js +3 -0
- package/dist/azure/index.js.map +1 -0
- package/dist/azure/responses-model.d.ts +25 -0
- package/dist/azure/responses-model.d.ts.map +1 -0
- package/dist/azure/responses-model.js +557 -0
- package/dist/azure/responses-model.js.map +1 -0
- package/dist/azure/sse-parser.d.ts +2 -0
- package/dist/azure/sse-parser.d.ts.map +1 -0
- package/dist/azure/sse-parser.js +39 -0
- package/dist/azure/sse-parser.js.map +1 -0
- package/dist/core/agent.d.ts +47 -0
- package/dist/core/agent.d.ts.map +1 -0
- package/dist/core/agent.js +74 -0
- package/dist/core/agent.js.map +1 -0
- package/dist/core/builtin-tools.d.ts +41 -0
- package/dist/core/builtin-tools.d.ts.map +1 -0
- package/dist/core/builtin-tools.js +80 -0
- package/dist/core/builtin-tools.js.map +1 -0
- package/dist/core/codemode/executor.d.ts +62 -0
- package/dist/core/codemode/executor.d.ts.map +1 -0
- package/dist/core/codemode/executor.js +188 -0
- package/dist/core/codemode/executor.js.map +1 -0
- package/dist/core/codemode/index.d.ts +62 -0
- package/dist/core/codemode/index.d.ts.map +1 -0
- package/dist/core/codemode/index.js +104 -0
- package/dist/core/codemode/index.js.map +1 -0
- package/dist/core/codemode/types.d.ts +24 -0
- package/dist/core/codemode/types.d.ts.map +1 -0
- package/dist/core/codemode/types.js +405 -0
- package/dist/core/codemode/types.js.map +1 -0
- package/dist/core/context.d.ts +10 -0
- package/dist/core/context.d.ts.map +1 -0
- package/dist/core/context.js +32 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/cost.d.ts +9 -0
- package/dist/core/cost.d.ts.map +1 -0
- package/dist/core/cost.js +14 -0
- package/dist/core/cost.js.map +1 -0
- package/dist/core/errors.d.ts +48 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +85 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/guardrails.d.ts +39 -0
- package/dist/core/guardrails.d.ts.map +1 -0
- package/dist/core/guardrails.js +40 -0
- package/dist/core/guardrails.js.map +1 -0
- package/dist/core/handoff.d.ts +35 -0
- package/dist/core/handoff.d.ts.map +1 -0
- package/dist/core/handoff.js +39 -0
- package/dist/core/handoff.js.map +1 -0
- package/dist/core/hooks.d.ts +154 -0
- package/dist/core/hooks.d.ts.map +1 -0
- package/dist/core/hooks.js +2 -0
- package/dist/core/hooks.js.map +1 -0
- package/dist/core/hosted-tool.d.ts +11 -0
- package/dist/core/hosted-tool.d.ts.map +1 -0
- package/dist/core/hosted-tool.js +7 -0
- package/dist/core/hosted-tool.js.map +1 -0
- package/dist/core/index.d.ts +35 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +18 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/model.d.ts +56 -0
- package/dist/core/model.d.ts.map +1 -0
- package/dist/core/model.js +2 -0
- package/dist/core/model.js.map +1 -0
- package/dist/core/result.d.ts +34 -0
- package/dist/core/result.d.ts.map +1 -0
- package/dist/core/result.js +31 -0
- package/dist/core/result.js.map +1 -0
- package/dist/core/run.d.ts +52 -0
- package/dist/core/run.d.ts.map +1 -0
- package/dist/core/run.js +972 -0
- package/dist/core/run.js.map +1 -0
- package/dist/core/session.d.ts +77 -0
- package/dist/core/session.d.ts.map +1 -0
- package/dist/core/session.js +160 -0
- package/dist/core/session.js.map +1 -0
- package/dist/core/subagent.d.ts +30 -0
- package/dist/core/subagent.d.ts.map +1 -0
- package/dist/core/subagent.js +52 -0
- package/dist/core/subagent.js.map +1 -0
- package/dist/core/todo.d.ts +56 -0
- package/dist/core/todo.d.ts.map +1 -0
- package/dist/core/todo.js +76 -0
- package/dist/core/todo.js.map +1 -0
- package/dist/core/tool.d.ts +26 -0
- package/dist/core/tool.d.ts.map +1 -0
- package/dist/core/tool.js +23 -0
- package/dist/core/tool.js.map +1 -0
- package/dist/core/tracing.d.ts +31 -0
- package/dist/core/tracing.d.ts.map +1 -0
- package/dist/core/tracing.js +62 -0
- package/dist/core/tracing.js.map +1 -0
- package/dist/core/types.d.ts +106 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/utils/zod.d.ts +5 -0
- package/dist/core/utils/zod.d.ts.map +1 -0
- package/dist/core/utils/zod.js +7 -0
- package/dist/core/utils/zod.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/package.json +36 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code mode: let LLMs write code that orchestrates tools instead of calling them one at a time.
|
|
3
|
+
*
|
|
4
|
+
* Inspired by Cloudflare's Code Mode and CodeAct — LLMs are better at writing code
|
|
5
|
+
* than making individual tool calls because they've seen millions of lines of real-world
|
|
6
|
+
* TypeScript but only contrived tool-calling examples.
|
|
7
|
+
*/
|
|
8
|
+
import { z } from "zod";
|
|
9
|
+
import { isFunctionTool } from "../hosted-tool";
|
|
10
|
+
import { tool } from "../tool";
|
|
11
|
+
import { generateTypes, normalizeCode, sanitizeToolName } from "./types";
|
|
12
|
+
export { FunctionExecutor, WorkerExecutor } from "./executor";
|
|
13
|
+
export { generateTypes, normalizeCode, sanitizeToolName } from "./types";
|
|
14
|
+
// ── Default description ────────────────────────────────────────────
|
|
15
|
+
const DEFAULT_DESCRIPTION = `Execute code to achieve a goal.
|
|
16
|
+
|
|
17
|
+
Available:
|
|
18
|
+
{{types}}
|
|
19
|
+
|
|
20
|
+
Write an async arrow function in JavaScript that returns the result.
|
|
21
|
+
Do NOT use TypeScript syntax — no type annotations, interfaces, or generics.
|
|
22
|
+
Do NOT define named functions then call them — just write the arrow function body directly.
|
|
23
|
+
|
|
24
|
+
Example: async () => { const r = await codemode.searchWeb({ query: "test" }); return r; }`;
|
|
25
|
+
const codeSchema = z.object({
|
|
26
|
+
code: z.string().describe("JavaScript async arrow function to execute"),
|
|
27
|
+
});
|
|
28
|
+
/**
|
|
29
|
+
* Create a code mode tool that allows LLMs to write and execute code
|
|
30
|
+
* with access to your tools in a sandboxed environment.
|
|
31
|
+
*
|
|
32
|
+
* Returns a Stratus `FunctionTool` that can be added to any agent's tools array.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```ts
|
|
36
|
+
* import { Agent, tool } from "stratus";
|
|
37
|
+
* import { createCodeModeTool, FunctionExecutor } from "stratus/core/codemode";
|
|
38
|
+
*
|
|
39
|
+
* const weatherTool = tool({
|
|
40
|
+
* name: "get_weather",
|
|
41
|
+
* description: "Get weather for a location",
|
|
42
|
+
* parameters: z.object({ location: z.string() }),
|
|
43
|
+
* execute: async (ctx, { location }) => `72°F, sunny in ${location}`,
|
|
44
|
+
* });
|
|
45
|
+
*
|
|
46
|
+
* const executor = new FunctionExecutor({ timeout: 10_000 });
|
|
47
|
+
* const codemode = createCodeModeTool({
|
|
48
|
+
* tools: [weatherTool],
|
|
49
|
+
* executor,
|
|
50
|
+
* });
|
|
51
|
+
*
|
|
52
|
+
* const agent = new Agent({
|
|
53
|
+
* name: "assistant",
|
|
54
|
+
* instructions: "You are a helpful assistant.",
|
|
55
|
+
* tools: [codemode],
|
|
56
|
+
* });
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
export function createCodeModeTool(options) {
|
|
60
|
+
// Filter to only function tools (hosted tools can't be called locally)
|
|
61
|
+
const functionTools = options.tools.filter(isFunctionTool);
|
|
62
|
+
const types = generateTypes(functionTools);
|
|
63
|
+
const executor = options.executor;
|
|
64
|
+
return tool({
|
|
65
|
+
name: "execute_code",
|
|
66
|
+
description: (options.description ?? DEFAULT_DESCRIPTION).replace("{{types}}", types),
|
|
67
|
+
parameters: codeSchema,
|
|
68
|
+
async execute(context, { code }) {
|
|
69
|
+
// Build the function map for the sandbox
|
|
70
|
+
const fns = {};
|
|
71
|
+
for (const t of functionTools) {
|
|
72
|
+
const safeName = sanitizeToolName(t.name);
|
|
73
|
+
fns[safeName] = async (args) => {
|
|
74
|
+
const validated = t.parameters.parse(args);
|
|
75
|
+
const result = await t.execute(context, validated);
|
|
76
|
+
// Try to parse as JSON, fall back to raw string
|
|
77
|
+
try {
|
|
78
|
+
return JSON.parse(result);
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return result;
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
const normalizedCode = normalizeCode(code);
|
|
86
|
+
const executeResult = await executor.execute(normalizedCode, fns);
|
|
87
|
+
if (executeResult.error) {
|
|
88
|
+
const logCtx = executeResult.logs?.length
|
|
89
|
+
? `\n\nConsole output:\n${executeResult.logs.join("\n")}`
|
|
90
|
+
: "";
|
|
91
|
+
throw new Error(`Code execution failed: ${executeResult.error}${logCtx}`);
|
|
92
|
+
}
|
|
93
|
+
const output = {
|
|
94
|
+
code,
|
|
95
|
+
result: executeResult.result,
|
|
96
|
+
};
|
|
97
|
+
if (executeResult.logs?.length) {
|
|
98
|
+
output.logs = executeResult.logs;
|
|
99
|
+
}
|
|
100
|
+
return JSON.stringify(output);
|
|
101
|
+
},
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/codemode/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code mode: type generation and code normalization utilities.
|
|
3
|
+
* Adapted from @cloudflare/codemode for the Stratus SDK.
|
|
4
|
+
*/
|
|
5
|
+
import type { FunctionTool } from "../tool";
|
|
6
|
+
/**
|
|
7
|
+
* Sanitize a tool name into a valid JavaScript identifier.
|
|
8
|
+
* Replaces hyphens, dots, and spaces with `_`, strips other invalid chars,
|
|
9
|
+
* prefixes digit-leading names with `_`, and appends `_` to JS reserved words.
|
|
10
|
+
*/
|
|
11
|
+
export declare function sanitizeToolName(name: string): string;
|
|
12
|
+
/**
|
|
13
|
+
* Generate TypeScript type definitions from an array of FunctionTools.
|
|
14
|
+
* These types are included in the LLM's system prompt so it can write
|
|
15
|
+
* correct code against the `codemode.*` API.
|
|
16
|
+
*/
|
|
17
|
+
export declare function generateTypes(tools: FunctionTool[]): string;
|
|
18
|
+
/**
|
|
19
|
+
* Normalize LLM-generated code into an async arrow function.
|
|
20
|
+
* Handles common LLM patterns: bare statements, function declarations,
|
|
21
|
+
* code fences, and expression statements.
|
|
22
|
+
*/
|
|
23
|
+
export declare function normalizeCode(code: string): string;
|
|
24
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/codemode/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AA2E5C;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQrD;AAoQD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,CA6D3D;AAYD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYlD"}
|
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code mode: type generation and code normalization utilities.
|
|
3
|
+
* Adapted from @cloudflare/codemode for the Stratus SDK.
|
|
4
|
+
*/
|
|
5
|
+
import { zodToJsonSchema } from "../utils/zod";
|
|
6
|
+
// ── JS reserved words ──────────────────────────────────────────────
|
|
7
|
+
const JS_RESERVED = new Set([
|
|
8
|
+
"abstract",
|
|
9
|
+
"arguments",
|
|
10
|
+
"await",
|
|
11
|
+
"boolean",
|
|
12
|
+
"break",
|
|
13
|
+
"byte",
|
|
14
|
+
"case",
|
|
15
|
+
"catch",
|
|
16
|
+
"char",
|
|
17
|
+
"class",
|
|
18
|
+
"const",
|
|
19
|
+
"continue",
|
|
20
|
+
"debugger",
|
|
21
|
+
"default",
|
|
22
|
+
"delete",
|
|
23
|
+
"do",
|
|
24
|
+
"double",
|
|
25
|
+
"else",
|
|
26
|
+
"enum",
|
|
27
|
+
"eval",
|
|
28
|
+
"export",
|
|
29
|
+
"extends",
|
|
30
|
+
"false",
|
|
31
|
+
"final",
|
|
32
|
+
"finally",
|
|
33
|
+
"float",
|
|
34
|
+
"for",
|
|
35
|
+
"function",
|
|
36
|
+
"goto",
|
|
37
|
+
"if",
|
|
38
|
+
"implements",
|
|
39
|
+
"import",
|
|
40
|
+
"in",
|
|
41
|
+
"instanceof",
|
|
42
|
+
"int",
|
|
43
|
+
"interface",
|
|
44
|
+
"let",
|
|
45
|
+
"long",
|
|
46
|
+
"native",
|
|
47
|
+
"new",
|
|
48
|
+
"null",
|
|
49
|
+
"package",
|
|
50
|
+
"private",
|
|
51
|
+
"protected",
|
|
52
|
+
"public",
|
|
53
|
+
"return",
|
|
54
|
+
"short",
|
|
55
|
+
"static",
|
|
56
|
+
"super",
|
|
57
|
+
"switch",
|
|
58
|
+
"synchronized",
|
|
59
|
+
"this",
|
|
60
|
+
"throw",
|
|
61
|
+
"throws",
|
|
62
|
+
"transient",
|
|
63
|
+
"true",
|
|
64
|
+
"try",
|
|
65
|
+
"typeof",
|
|
66
|
+
"undefined",
|
|
67
|
+
"var",
|
|
68
|
+
"void",
|
|
69
|
+
"volatile",
|
|
70
|
+
"while",
|
|
71
|
+
"with",
|
|
72
|
+
"yield",
|
|
73
|
+
]);
|
|
74
|
+
// ── Name sanitization ──────────────────────────────────────────────
|
|
75
|
+
/**
|
|
76
|
+
* Sanitize a tool name into a valid JavaScript identifier.
|
|
77
|
+
* Replaces hyphens, dots, and spaces with `_`, strips other invalid chars,
|
|
78
|
+
* prefixes digit-leading names with `_`, and appends `_` to JS reserved words.
|
|
79
|
+
*/
|
|
80
|
+
export function sanitizeToolName(name) {
|
|
81
|
+
if (!name)
|
|
82
|
+
return "_";
|
|
83
|
+
let sanitized = name.replace(/[-.\s]/g, "_");
|
|
84
|
+
sanitized = sanitized.replace(/[^a-zA-Z0-9_$]/g, "");
|
|
85
|
+
if (!sanitized)
|
|
86
|
+
return "_";
|
|
87
|
+
if (/^[0-9]/.test(sanitized))
|
|
88
|
+
sanitized = `_${sanitized}`;
|
|
89
|
+
if (JS_RESERVED.has(sanitized))
|
|
90
|
+
sanitized = `${sanitized}_`;
|
|
91
|
+
return sanitized;
|
|
92
|
+
}
|
|
93
|
+
function toCamelCase(str) {
|
|
94
|
+
return str
|
|
95
|
+
.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase())
|
|
96
|
+
.replace(/^[a-z]/, (letter) => letter.toUpperCase());
|
|
97
|
+
}
|
|
98
|
+
// ── String escaping ────────────────────────────────────────────────
|
|
99
|
+
function escapeControlChar(ch) {
|
|
100
|
+
const code = ch.charCodeAt(0);
|
|
101
|
+
if (code <= 31 || code === 127)
|
|
102
|
+
return `\\u${code.toString(16).padStart(4, "0")}`;
|
|
103
|
+
return ch;
|
|
104
|
+
}
|
|
105
|
+
function escapeStringLiteral(s) {
|
|
106
|
+
let out = "";
|
|
107
|
+
for (const ch of s) {
|
|
108
|
+
if (ch === "\\")
|
|
109
|
+
out += "\\\\";
|
|
110
|
+
else if (ch === '"')
|
|
111
|
+
out += '\\"';
|
|
112
|
+
else if (ch === "\n")
|
|
113
|
+
out += "\\n";
|
|
114
|
+
else if (ch === "\r")
|
|
115
|
+
out += "\\r";
|
|
116
|
+
else if (ch === "\t")
|
|
117
|
+
out += "\\t";
|
|
118
|
+
else if (ch === "\u2028")
|
|
119
|
+
out += "\\u2028";
|
|
120
|
+
else if (ch === "\u2029")
|
|
121
|
+
out += "\\u2029";
|
|
122
|
+
else
|
|
123
|
+
out += escapeControlChar(ch);
|
|
124
|
+
}
|
|
125
|
+
return out;
|
|
126
|
+
}
|
|
127
|
+
function escapeJsDoc(text) {
|
|
128
|
+
return text.replace(/\*\//g, "*\\/");
|
|
129
|
+
}
|
|
130
|
+
function needsQuotes(name) {
|
|
131
|
+
return !/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(name);
|
|
132
|
+
}
|
|
133
|
+
function quoteProp(name) {
|
|
134
|
+
if (needsQuotes(name)) {
|
|
135
|
+
let escaped = "";
|
|
136
|
+
for (const ch of name) {
|
|
137
|
+
if (ch === "\\")
|
|
138
|
+
escaped += "\\\\";
|
|
139
|
+
else if (ch === '"')
|
|
140
|
+
escaped += '\\"';
|
|
141
|
+
else if (ch === "\n")
|
|
142
|
+
escaped += "\\n";
|
|
143
|
+
else if (ch === "\r")
|
|
144
|
+
escaped += "\\r";
|
|
145
|
+
else if (ch === "\t")
|
|
146
|
+
escaped += "\\t";
|
|
147
|
+
else if (ch === "\u2028")
|
|
148
|
+
escaped += "\\u2028";
|
|
149
|
+
else if (ch === "\u2029")
|
|
150
|
+
escaped += "\\u2029";
|
|
151
|
+
else
|
|
152
|
+
escaped += escapeControlChar(ch);
|
|
153
|
+
}
|
|
154
|
+
return `"${escaped}"`;
|
|
155
|
+
}
|
|
156
|
+
return name;
|
|
157
|
+
}
|
|
158
|
+
function resolveRef(ref, root) {
|
|
159
|
+
if (ref === "#")
|
|
160
|
+
return root;
|
|
161
|
+
if (!ref.startsWith("#/"))
|
|
162
|
+
return null;
|
|
163
|
+
const segments = ref
|
|
164
|
+
.slice(2)
|
|
165
|
+
.split("/")
|
|
166
|
+
.map((s) => s.replace(/~1/g, "/").replace(/~0/g, "~"));
|
|
167
|
+
let current = root;
|
|
168
|
+
for (const seg of segments) {
|
|
169
|
+
if (current === null || typeof current !== "object")
|
|
170
|
+
return null;
|
|
171
|
+
current = current[seg];
|
|
172
|
+
if (current === undefined)
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
175
|
+
if (typeof current === "boolean")
|
|
176
|
+
return current;
|
|
177
|
+
if (current === null || typeof current !== "object")
|
|
178
|
+
return null;
|
|
179
|
+
return current;
|
|
180
|
+
}
|
|
181
|
+
function applyNullable(result, schema) {
|
|
182
|
+
if (result !== "unknown" && result !== "never" && schema?.nullable === true)
|
|
183
|
+
return `${result} | null`;
|
|
184
|
+
return result;
|
|
185
|
+
}
|
|
186
|
+
function jsonSchemaToTypeString(schema, indent, ctx) {
|
|
187
|
+
if (typeof schema === "boolean")
|
|
188
|
+
return schema ? "unknown" : "never";
|
|
189
|
+
if (ctx.depth >= ctx.maxDepth)
|
|
190
|
+
return "unknown";
|
|
191
|
+
if (ctx.seen.has(schema))
|
|
192
|
+
return "unknown";
|
|
193
|
+
ctx.seen.add(schema);
|
|
194
|
+
const nextCtx = { ...ctx, depth: ctx.depth + 1 };
|
|
195
|
+
try {
|
|
196
|
+
if (schema.$ref) {
|
|
197
|
+
const resolved = resolveRef(schema.$ref, ctx.root);
|
|
198
|
+
if (!resolved)
|
|
199
|
+
return "unknown";
|
|
200
|
+
return applyNullable(jsonSchemaToTypeString(resolved, indent, nextCtx), schema);
|
|
201
|
+
}
|
|
202
|
+
if (schema.anyOf)
|
|
203
|
+
return applyNullable(schema.anyOf.map((s) => jsonSchemaToTypeString(s, indent, nextCtx)).join(" | "), schema);
|
|
204
|
+
if (schema.oneOf)
|
|
205
|
+
return applyNullable(schema.oneOf.map((s) => jsonSchemaToTypeString(s, indent, nextCtx)).join(" | "), schema);
|
|
206
|
+
if (schema.allOf)
|
|
207
|
+
return applyNullable(schema.allOf.map((s) => jsonSchemaToTypeString(s, indent, nextCtx)).join(" & "), schema);
|
|
208
|
+
if (schema.enum) {
|
|
209
|
+
if (schema.enum.length === 0)
|
|
210
|
+
return "never";
|
|
211
|
+
return applyNullable(schema.enum
|
|
212
|
+
.map((v) => {
|
|
213
|
+
if (v === null)
|
|
214
|
+
return "null";
|
|
215
|
+
if (typeof v === "string")
|
|
216
|
+
return `"${escapeStringLiteral(v)}"`;
|
|
217
|
+
if (typeof v === "object")
|
|
218
|
+
return JSON.stringify(v) ?? "unknown";
|
|
219
|
+
return String(v);
|
|
220
|
+
})
|
|
221
|
+
.join(" | "), schema);
|
|
222
|
+
}
|
|
223
|
+
if (schema.const !== undefined) {
|
|
224
|
+
return applyNullable(schema.const === null
|
|
225
|
+
? "null"
|
|
226
|
+
: typeof schema.const === "string"
|
|
227
|
+
? `"${escapeStringLiteral(schema.const)}"`
|
|
228
|
+
: typeof schema.const === "object"
|
|
229
|
+
? (JSON.stringify(schema.const) ?? "unknown")
|
|
230
|
+
: String(schema.const), schema);
|
|
231
|
+
}
|
|
232
|
+
const type = schema.type;
|
|
233
|
+
if (type === "string")
|
|
234
|
+
return applyNullable("string", schema);
|
|
235
|
+
if (type === "number" || type === "integer")
|
|
236
|
+
return applyNullable("number", schema);
|
|
237
|
+
if (type === "boolean")
|
|
238
|
+
return applyNullable("boolean", schema);
|
|
239
|
+
if (type === "null")
|
|
240
|
+
return "null";
|
|
241
|
+
if (type === "array") {
|
|
242
|
+
const prefixItems = schema.prefixItems;
|
|
243
|
+
if (Array.isArray(prefixItems))
|
|
244
|
+
return applyNullable(`[${prefixItems.map((s) => jsonSchemaToTypeString(s, indent, nextCtx)).join(", ")}]`, schema);
|
|
245
|
+
if (Array.isArray(schema.items))
|
|
246
|
+
return applyNullable(`[${schema.items.map((s) => jsonSchemaToTypeString(s, indent, nextCtx)).join(", ")}]`, schema);
|
|
247
|
+
if (schema.items)
|
|
248
|
+
return applyNullable(`${jsonSchemaToTypeString(schema.items, indent, nextCtx)}[]`, schema);
|
|
249
|
+
return applyNullable("unknown[]", schema);
|
|
250
|
+
}
|
|
251
|
+
if (type === "object" || schema.properties) {
|
|
252
|
+
const props = schema.properties || {};
|
|
253
|
+
const required = new Set(schema.required || []);
|
|
254
|
+
const lines = [];
|
|
255
|
+
for (const [propName, propSchema] of Object.entries(props)) {
|
|
256
|
+
if (typeof propSchema === "boolean") {
|
|
257
|
+
const boolType = propSchema ? "unknown" : "never";
|
|
258
|
+
const optionalMark = required.has(propName) ? "" : "?";
|
|
259
|
+
lines.push(`${indent} ${quoteProp(propName)}${optionalMark}: ${boolType};`);
|
|
260
|
+
continue;
|
|
261
|
+
}
|
|
262
|
+
const isRequired = required.has(propName);
|
|
263
|
+
const propType = jsonSchemaToTypeString(propSchema, `${indent} `, nextCtx);
|
|
264
|
+
const desc = propSchema.description;
|
|
265
|
+
const format = propSchema.format;
|
|
266
|
+
if (desc || format) {
|
|
267
|
+
const descText = desc
|
|
268
|
+
? escapeJsDoc(desc.replace(/\r?\n/g, " "))
|
|
269
|
+
: undefined;
|
|
270
|
+
const formatTag = format ? `@format ${escapeJsDoc(format)}` : undefined;
|
|
271
|
+
if (descText && formatTag) {
|
|
272
|
+
lines.push(`${indent} /**`);
|
|
273
|
+
lines.push(`${indent} * ${descText}`);
|
|
274
|
+
lines.push(`${indent} * ${formatTag}`);
|
|
275
|
+
lines.push(`${indent} */`);
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
lines.push(`${indent} /** ${descText ?? formatTag} */`);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
const quotedName = quoteProp(propName);
|
|
282
|
+
const optionalMark = isRequired ? "" : "?";
|
|
283
|
+
lines.push(`${indent} ${quotedName}${optionalMark}: ${propType};`);
|
|
284
|
+
}
|
|
285
|
+
if (schema.additionalProperties) {
|
|
286
|
+
const valueType = schema.additionalProperties === true
|
|
287
|
+
? "unknown"
|
|
288
|
+
: jsonSchemaToTypeString(schema.additionalProperties, `${indent} `, nextCtx);
|
|
289
|
+
lines.push(`${indent} [key: string]: ${valueType};`);
|
|
290
|
+
}
|
|
291
|
+
if (lines.length === 0) {
|
|
292
|
+
if (schema.additionalProperties === false)
|
|
293
|
+
return applyNullable("{}", schema);
|
|
294
|
+
return applyNullable("Record<string, unknown>", schema);
|
|
295
|
+
}
|
|
296
|
+
return applyNullable(`{\n${lines.join("\n")}\n${indent}}`, schema);
|
|
297
|
+
}
|
|
298
|
+
if (Array.isArray(type)) {
|
|
299
|
+
return applyNullable(type
|
|
300
|
+
.map((t) => {
|
|
301
|
+
if (t === "string")
|
|
302
|
+
return "string";
|
|
303
|
+
if (t === "number" || t === "integer")
|
|
304
|
+
return "number";
|
|
305
|
+
if (t === "boolean")
|
|
306
|
+
return "boolean";
|
|
307
|
+
if (t === "null")
|
|
308
|
+
return "null";
|
|
309
|
+
if (t === "array")
|
|
310
|
+
return "unknown[]";
|
|
311
|
+
if (t === "object")
|
|
312
|
+
return "Record<string, unknown>";
|
|
313
|
+
return "unknown";
|
|
314
|
+
})
|
|
315
|
+
.join(" | "), schema);
|
|
316
|
+
}
|
|
317
|
+
return "unknown";
|
|
318
|
+
}
|
|
319
|
+
finally {
|
|
320
|
+
ctx.seen.delete(schema);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
// ── Public: generateTypes ──────────────────────────────────────────
|
|
324
|
+
/**
|
|
325
|
+
* Generate TypeScript type definitions from an array of FunctionTools.
|
|
326
|
+
* These types are included in the LLM's system prompt so it can write
|
|
327
|
+
* correct code against the `codemode.*` API.
|
|
328
|
+
*/
|
|
329
|
+
export function generateTypes(tools) {
|
|
330
|
+
let availableTools = "";
|
|
331
|
+
let availableTypes = "";
|
|
332
|
+
for (const t of tools) {
|
|
333
|
+
const safeName = sanitizeToolName(t.name);
|
|
334
|
+
const camelName = toCamelCase(safeName);
|
|
335
|
+
try {
|
|
336
|
+
const jsonSchema = zodToJsonSchema(t.parameters);
|
|
337
|
+
const inputType = `type ${camelName}Input = ${jsonSchemaToTypeString(jsonSchema, "", {
|
|
338
|
+
root: jsonSchema,
|
|
339
|
+
depth: 0,
|
|
340
|
+
seen: new Set(),
|
|
341
|
+
maxDepth: 20,
|
|
342
|
+
})}`;
|
|
343
|
+
const outputType = `type ${camelName}Output = unknown`;
|
|
344
|
+
availableTypes += `\n${inputType.trim()}`;
|
|
345
|
+
availableTypes += `\n${outputType.trim()}`;
|
|
346
|
+
const jsdocLines = [];
|
|
347
|
+
if (t.description?.trim()) {
|
|
348
|
+
jsdocLines.push(escapeJsDoc(t.description.trim().replace(/\r?\n/g, " ")));
|
|
349
|
+
}
|
|
350
|
+
else {
|
|
351
|
+
jsdocLines.push(escapeJsDoc(t.name));
|
|
352
|
+
}
|
|
353
|
+
// Extract param descriptions from JSON Schema properties
|
|
354
|
+
if (jsonSchema.properties) {
|
|
355
|
+
for (const [fieldName, propSchema] of Object.entries(jsonSchema.properties)) {
|
|
356
|
+
if (typeof propSchema === "object" &&
|
|
357
|
+
propSchema !== null &&
|
|
358
|
+
"description" in propSchema &&
|
|
359
|
+
propSchema.description) {
|
|
360
|
+
jsdocLines.push(escapeJsDoc(`@param input.${fieldName} - ${String(propSchema.description).replace(/\r?\n/g, " ")}`));
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
const jsdocBody = jsdocLines.map((l) => `\t * ${l}`).join("\n");
|
|
365
|
+
availableTools += `\n\t/**\n${jsdocBody}\n\t */`;
|
|
366
|
+
availableTools += `\n\t${safeName}: (input: ${camelName}Input) => Promise<${camelName}Output>;`;
|
|
367
|
+
availableTools += "\n";
|
|
368
|
+
}
|
|
369
|
+
catch {
|
|
370
|
+
availableTypes += `\ntype ${camelName}Input = unknown`;
|
|
371
|
+
availableTypes += `\ntype ${camelName}Output = unknown`;
|
|
372
|
+
availableTools += `\n\t/**\n\t * ${escapeJsDoc(t.name)}\n\t */`;
|
|
373
|
+
availableTools += `\n\t${safeName}: (input: ${camelName}Input) => Promise<${camelName}Output>;`;
|
|
374
|
+
availableTools += "\n";
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
availableTools = `\ndeclare const codemode: {${availableTools}}`;
|
|
378
|
+
return `\n${availableTypes}\n${availableTools}\n`.trim();
|
|
379
|
+
}
|
|
380
|
+
// ── Public: normalizeCode ──────────────────────────────────────────
|
|
381
|
+
/**
|
|
382
|
+
* Strip markdown code fences that LLMs commonly wrap code in.
|
|
383
|
+
*/
|
|
384
|
+
function stripCodeFences(code) {
|
|
385
|
+
const match = code.match(/^```(?:js|javascript|typescript|ts|tsx|jsx)?\s*\n([\s\S]*?)```\s*$/);
|
|
386
|
+
return match ? match[1] : code;
|
|
387
|
+
}
|
|
388
|
+
/**
|
|
389
|
+
* Normalize LLM-generated code into an async arrow function.
|
|
390
|
+
* Handles common LLM patterns: bare statements, function declarations,
|
|
391
|
+
* code fences, and expression statements.
|
|
392
|
+
*/
|
|
393
|
+
export function normalizeCode(code) {
|
|
394
|
+
const trimmed = stripCodeFences(code.trim());
|
|
395
|
+
if (!trimmed.trim())
|
|
396
|
+
return "async () => {}";
|
|
397
|
+
const source = trimmed.trim();
|
|
398
|
+
// Check if it's already an async arrow function
|
|
399
|
+
if (/^async\s*\(/.test(source) && source.includes("=>")) {
|
|
400
|
+
return source;
|
|
401
|
+
}
|
|
402
|
+
// Wrap bare code in an async arrow function
|
|
403
|
+
return `async () => {\n${source}\n}`;
|
|
404
|
+
}
|
|
405
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/codemode/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { UsageInfo } from "./model";
|
|
2
|
+
export declare class RunContext<TContext> {
|
|
3
|
+
readonly context: TContext;
|
|
4
|
+
readonly usage: UsageInfo;
|
|
5
|
+
numTurns: number;
|
|
6
|
+
totalCostUsd: number;
|
|
7
|
+
constructor(context: TContext);
|
|
8
|
+
addUsage(usage: UsageInfo | undefined): void;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,qBAAa,UAAU,CAAC,QAAQ;IAC/B,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,SAAK;IACb,YAAY,SAAK;gBAEL,OAAO,EAAE,QAAQ;IAS7B,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,IAAI;CAgB5C"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export class RunContext {
|
|
2
|
+
context;
|
|
3
|
+
usage;
|
|
4
|
+
numTurns = 0;
|
|
5
|
+
totalCostUsd = 0;
|
|
6
|
+
constructor(context) {
|
|
7
|
+
this.context = context;
|
|
8
|
+
this.usage = {
|
|
9
|
+
promptTokens: 0,
|
|
10
|
+
completionTokens: 0,
|
|
11
|
+
totalTokens: 0,
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
addUsage(usage) {
|
|
15
|
+
if (!usage)
|
|
16
|
+
return;
|
|
17
|
+
const u = this.usage;
|
|
18
|
+
u.promptTokens += usage.promptTokens;
|
|
19
|
+
u.completionTokens += usage.completionTokens;
|
|
20
|
+
u.totalTokens += usage.totalTokens;
|
|
21
|
+
if (usage.cacheReadTokens !== undefined) {
|
|
22
|
+
u.cacheReadTokens = (u.cacheReadTokens ?? 0) + usage.cacheReadTokens;
|
|
23
|
+
}
|
|
24
|
+
if (usage.cacheCreationTokens !== undefined) {
|
|
25
|
+
u.cacheCreationTokens = (u.cacheCreationTokens ?? 0) + usage.cacheCreationTokens;
|
|
26
|
+
}
|
|
27
|
+
if (usage.reasoningTokens !== undefined) {
|
|
28
|
+
u.reasoningTokens = (u.reasoningTokens ?? 0) + usage.reasoningTokens;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,UAAU;IACb,OAAO,CAAW;IAClB,KAAK,CAAY;IAC1B,QAAQ,GAAG,CAAC,CAAC;IACb,YAAY,GAAG,CAAC,CAAC;IAEjB,YAAY,OAAiB;QAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG;YACZ,YAAY,EAAE,CAAC;YACf,gBAAgB,EAAE,CAAC;YACnB,WAAW,EAAE,CAAC;SACd,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,KAA4B;QACpC,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QACrB,CAAC,CAAC,YAAY,IAAI,KAAK,CAAC,YAAY,CAAC;QACrC,CAAC,CAAC,gBAAgB,IAAI,KAAK,CAAC,gBAAgB,CAAC;QAC7C,CAAC,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC;QACnC,IAAI,KAAK,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YACzC,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC;QACtE,CAAC;QACD,IAAI,KAAK,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;YAC7C,CAAC,CAAC,mBAAmB,GAAG,CAAC,CAAC,CAAC,mBAAmB,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,mBAAmB,CAAC;QAClF,CAAC;QACD,IAAI,KAAK,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YACzC,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC;QACtE,CAAC;IACF,CAAC;CACD"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { UsageInfo } from "./model";
|
|
2
|
+
export interface PricingConfig {
|
|
3
|
+
inputTokenCostPer1k: number;
|
|
4
|
+
outputTokenCostPer1k: number;
|
|
5
|
+
cachedInputTokenCostPer1k?: number;
|
|
6
|
+
}
|
|
7
|
+
export type CostEstimator = (usage: UsageInfo) => number;
|
|
8
|
+
export declare function createCostEstimator(pricing: PricingConfig): CostEstimator;
|
|
9
|
+
//# sourceMappingURL=cost.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost.d.ts","sourceRoot":"","sources":["../../src/core/cost.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,MAAM,WAAW,aAAa;IAC7B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,yBAAyB,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,SAAS,KAAK,MAAM,CAAC;AAEzD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,CAezE"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export function createCostEstimator(pricing) {
|
|
2
|
+
return (usage) => {
|
|
3
|
+
let inputTokens = usage.promptTokens;
|
|
4
|
+
let cachedCost = 0;
|
|
5
|
+
if (pricing.cachedInputTokenCostPer1k !== undefined && usage.cacheReadTokens) {
|
|
6
|
+
cachedCost = (usage.cacheReadTokens / 1000) * pricing.cachedInputTokenCostPer1k;
|
|
7
|
+
inputTokens -= usage.cacheReadTokens;
|
|
8
|
+
}
|
|
9
|
+
const inputCost = (inputTokens / 1000) * pricing.inputTokenCostPer1k;
|
|
10
|
+
const outputCost = (usage.completionTokens / 1000) * pricing.outputTokenCostPer1k;
|
|
11
|
+
return inputCost + outputCost + cachedCost;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=cost.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost.js","sourceRoot":"","sources":["../../src/core/cost.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,mBAAmB,CAAC,OAAsB;IACzD,OAAO,CAAC,KAAgB,EAAU,EAAE;QACnC,IAAI,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC;QACrC,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,IAAI,OAAO,CAAC,yBAAyB,KAAK,SAAS,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;YAC9E,UAAU,GAAG,CAAC,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,yBAAyB,CAAC;YAChF,WAAW,IAAI,KAAK,CAAC,eAAe,CAAC;QACtC,CAAC;QAED,MAAM,SAAS,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC;QACrE,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,oBAAoB,CAAC;QAElF,OAAO,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;IAC5C,CAAC,CAAC;AACH,CAAC"}
|