@ai-sdk/code-mode 0.0.0-2d998b35-20260731001744

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 (51) hide show
  1. package/LICENSE +13 -0
  2. package/README.md +99 -0
  3. package/dist/code-mode-tool.js +40 -0
  4. package/dist/code-mode-tool.js.map +1 -0
  5. package/dist/errors.js +192 -0
  6. package/dist/errors.js.map +1 -0
  7. package/dist/index.d.ts +179 -0
  8. package/dist/index.js +33 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/run-code-mode.js +8 -0
  11. package/dist/run-code-mode.js.map +1 -0
  12. package/dist/runtime/guest-sources.js +260 -0
  13. package/dist/runtime/guest-sources.js.map +1 -0
  14. package/dist/runtime/manager.js +414 -0
  15. package/dist/runtime/manager.js.map +1 -0
  16. package/dist/runtime/max-workers.js +40 -0
  17. package/dist/runtime/max-workers.js.map +1 -0
  18. package/dist/runtime/protocol.js +1 -0
  19. package/dist/runtime/protocol.js.map +1 -0
  20. package/dist/runtime/worker-source.d.ts +11 -0
  21. package/dist/runtime/worker-source.js +2 -0
  22. package/dist/tool-invocation.js +129 -0
  23. package/dist/tool-invocation.js.map +1 -0
  24. package/dist/tool-prompt.js +440 -0
  25. package/dist/tool-prompt.js.map +1 -0
  26. package/dist/types.js +1 -0
  27. package/dist/types.js.map +1 -0
  28. package/dist/utils/options.js +76 -0
  29. package/dist/utils/options.js.map +1 -0
  30. package/dist/utils/serialization.js +49 -0
  31. package/dist/utils/serialization.js.map +1 -0
  32. package/dist/utils/source-cache.js +77 -0
  33. package/dist/utils/source-cache.js.map +1 -0
  34. package/package.json +77 -0
  35. package/src/code-mode-tool.ts +60 -0
  36. package/src/errors.ts +267 -0
  37. package/src/index.ts +26 -0
  38. package/src/run-code-mode.ts +15 -0
  39. package/src/runtime/guest-sources.ts +260 -0
  40. package/src/runtime/manager.ts +498 -0
  41. package/src/runtime/max-workers.ts +65 -0
  42. package/src/runtime/protocol.ts +52 -0
  43. package/src/runtime/worker-source.ts +10 -0
  44. package/src/runtime/worker.ts +497 -0
  45. package/src/tool-invocation.ts +181 -0
  46. package/src/tool-prompt.ts +585 -0
  47. package/src/tsconfig.json +11 -0
  48. package/src/types.ts +111 -0
  49. package/src/utils/options.ts +83 -0
  50. package/src/utils/serialization.ts +66 -0
  51. package/src/utils/source-cache.ts +91 -0
@@ -0,0 +1,129 @@
1
+ import { asSchema } from "ai";
2
+ import { CodeModeToolError } from "./errors.js";
3
+ import {
4
+ assertJsonSerializable,
5
+ toJsonPayload
6
+ } from "./utils/serialization.js";
7
+ async function invokeHostTool({
8
+ toolName,
9
+ inputJson,
10
+ tools,
11
+ baseExecutionOptions,
12
+ maxToolInputBytes,
13
+ maxToolOutputBytes,
14
+ toolCallId
15
+ }) {
16
+ throwIfAborted(baseExecutionOptions.abortSignal);
17
+ const hostTool = tools[toolName];
18
+ if (!hostTool) {
19
+ throw new CodeModeToolError(`Unknown tool: ${toolName}`, {
20
+ toolName,
21
+ availableTools: Object.keys(tools)
22
+ });
23
+ }
24
+ if (hostTool.execute == null) {
25
+ throw new CodeModeToolError(`Tool "${toolName}" does not have execute().`, {
26
+ toolName
27
+ });
28
+ }
29
+ const input = inputJson === "" ? void 0 : JSON.parse(inputJson);
30
+ assertJsonSerializable(input, maxToolInputBytes, `Tool "${toolName}" input`);
31
+ const validation = await raceAgainstAbort(
32
+ validateToolInput(hostTool.inputSchema, input),
33
+ baseExecutionOptions.abortSignal
34
+ );
35
+ if (!validation.success) {
36
+ throw new CodeModeToolError(
37
+ `Invalid input for tool "${toolName}": ${validation.error.message}`,
38
+ { toolName, input, cause: validation.error.message }
39
+ );
40
+ }
41
+ const executionOptions = {
42
+ ...baseExecutionOptions,
43
+ toolCallId
44
+ };
45
+ if (await raceAgainstAbort(
46
+ requiresApproval(hostTool, validation.value, executionOptions),
47
+ executionOptions.abortSignal
48
+ )) {
49
+ throw new CodeModeToolError(
50
+ `Tool "${toolName}" requires approval, which code mode does not support yet.`,
51
+ { toolName, input: validation.value, toolCallId }
52
+ );
53
+ }
54
+ const output = await raceAgainstAbort(
55
+ executeHostTool(hostTool.execute.bind(hostTool), {
56
+ input: validation.value,
57
+ options: executionOptions
58
+ }),
59
+ executionOptions.abortSignal
60
+ );
61
+ return toJsonPayload(output, maxToolOutputBytes, `Tool "${toolName}" output`);
62
+ }
63
+ async function requiresApproval(hostTool, input, options) {
64
+ if (hostTool.needsApproval == null) {
65
+ return false;
66
+ }
67
+ if (typeof hostTool.needsApproval === "boolean") {
68
+ return hostTool.needsApproval;
69
+ }
70
+ return await hostTool.needsApproval(input, options);
71
+ }
72
+ async function validateToolInput(schema, input) {
73
+ const normalizedSchema = asSchema(schema);
74
+ if (normalizedSchema.validate === void 0) {
75
+ return { success: true, value: input };
76
+ }
77
+ return await normalizedSchema.validate(input);
78
+ }
79
+ async function executeHostTool(execute, {
80
+ input,
81
+ options
82
+ }) {
83
+ const output = execute(input, options);
84
+ if (isAsyncIterable(output)) {
85
+ let finalOutput;
86
+ for await (const part of output) {
87
+ finalOutput = part;
88
+ }
89
+ return finalOutput;
90
+ }
91
+ return await output;
92
+ }
93
+ function isAsyncIterable(value) {
94
+ return typeof value === "object" && value !== null && Symbol.asyncIterator in value && typeof value[Symbol.asyncIterator] === "function";
95
+ }
96
+ async function raceAgainstAbort(operation, abortSignal) {
97
+ if (abortSignal === void 0) {
98
+ return await operation;
99
+ }
100
+ throwIfAborted(abortSignal);
101
+ let rejectOnAbort;
102
+ const aborted = new Promise((_resolve, reject) => {
103
+ rejectOnAbort = reject;
104
+ });
105
+ const onAbort = () => {
106
+ rejectOnAbort(abortReason(abortSignal));
107
+ };
108
+ abortSignal.addEventListener("abort", onAbort, { once: true });
109
+ if (abortSignal.aborted) {
110
+ onAbort();
111
+ }
112
+ try {
113
+ return await Promise.race([operation, aborted]);
114
+ } finally {
115
+ abortSignal.removeEventListener("abort", onAbort);
116
+ }
117
+ }
118
+ function throwIfAborted(abortSignal) {
119
+ if (abortSignal?.aborted) {
120
+ throw abortReason(abortSignal);
121
+ }
122
+ }
123
+ function abortReason(abortSignal) {
124
+ return abortSignal.reason ?? new DOMException("The operation was aborted.", "AbortError");
125
+ }
126
+ export {
127
+ invokeHostTool
128
+ };
129
+ //# sourceMappingURL=tool-invocation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tool-invocation.ts"],"sourcesContent":["import { asSchema } from 'ai';\nimport { CodeModeToolError } from './errors.js';\nimport type { CodeModeToolExecutionOptions, CodeModeToolSet } from './types.js';\nimport {\n assertJsonSerializable,\n toJsonPayload,\n} from './utils/serialization.js';\n\nexport async function invokeHostTool({\n toolName,\n inputJson,\n tools,\n baseExecutionOptions,\n maxToolInputBytes,\n maxToolOutputBytes,\n toolCallId,\n}: {\n toolName: string;\n inputJson: string;\n tools: CodeModeToolSet;\n baseExecutionOptions: CodeModeToolExecutionOptions;\n maxToolInputBytes: number;\n maxToolOutputBytes: number;\n toolCallId: string;\n}): Promise<string> {\n throwIfAborted(baseExecutionOptions.abortSignal);\n\n const hostTool = tools[toolName];\n if (!hostTool) {\n throw new CodeModeToolError(`Unknown tool: ${toolName}`, {\n toolName,\n availableTools: Object.keys(tools),\n });\n }\n if (hostTool.execute == null) {\n throw new CodeModeToolError(`Tool \"${toolName}\" does not have execute().`, {\n toolName,\n });\n }\n\n const input = inputJson === '' ? undefined : JSON.parse(inputJson);\n assertJsonSerializable(input, maxToolInputBytes, `Tool \"${toolName}\" input`);\n\n const validation = await raceAgainstAbort(\n validateToolInput(hostTool.inputSchema, input),\n baseExecutionOptions.abortSignal,\n );\n if (!validation.success) {\n throw new CodeModeToolError(\n `Invalid input for tool \"${toolName}\": ${validation.error.message}`,\n { toolName, input, cause: validation.error.message },\n );\n }\n\n const executionOptions: CodeModeToolExecutionOptions = {\n ...baseExecutionOptions,\n toolCallId,\n };\n\n if (\n await raceAgainstAbort(\n requiresApproval(hostTool, validation.value, executionOptions),\n executionOptions.abortSignal,\n )\n ) {\n throw new CodeModeToolError(\n `Tool \"${toolName}\" requires approval, which code mode does not support yet.`,\n { toolName, input: validation.value, toolCallId },\n );\n }\n\n const output = await raceAgainstAbort(\n executeHostTool(hostTool.execute.bind(hostTool), {\n input: validation.value,\n options: executionOptions,\n }),\n executionOptions.abortSignal,\n );\n return toJsonPayload(output, maxToolOutputBytes, `Tool \"${toolName}\" output`);\n}\n\nasync function requiresApproval(\n hostTool: CodeModeToolSet[string],\n input: unknown,\n options: CodeModeToolExecutionOptions,\n): Promise<boolean> {\n if (hostTool.needsApproval == null) {\n return false;\n }\n if (typeof hostTool.needsApproval === 'boolean') {\n return hostTool.needsApproval;\n }\n return await hostTool.needsApproval(input as never, options as never);\n}\n\nasync function validateToolInput(\n schema: CodeModeToolSet[string]['inputSchema'],\n input: unknown,\n): Promise<\n { success: true; value: unknown } | { success: false; error: Error }\n> {\n const normalizedSchema = asSchema(schema);\n if (normalizedSchema.validate === undefined) {\n return { success: true, value: input };\n }\n return await normalizedSchema.validate(input);\n}\n\nasync function executeHostTool(\n execute: NonNullable<CodeModeToolSet[string]['execute']>,\n {\n input,\n options,\n }: {\n input: unknown;\n options: CodeModeToolExecutionOptions;\n },\n): Promise<unknown> {\n const output = execute(input as never, options as never);\n if (isAsyncIterable(output)) {\n let finalOutput: unknown;\n for await (const part of output) {\n finalOutput = part;\n }\n return finalOutput;\n }\n return await output;\n}\n\nfunction isAsyncIterable(value: unknown): value is AsyncIterable<unknown> {\n return (\n typeof value === 'object' &&\n value !== null &&\n Symbol.asyncIterator in value &&\n typeof (value as { [Symbol.asyncIterator]?: unknown })[\n Symbol.asyncIterator\n ] === 'function'\n );\n}\n\nasync function raceAgainstAbort<T>(\n operation: Promise<T>,\n abortSignal: AbortSignal | undefined,\n): Promise<T> {\n if (abortSignal === undefined) {\n return await operation;\n }\n throwIfAborted(abortSignal);\n\n let rejectOnAbort!: (reason?: unknown) => void;\n const aborted = new Promise<never>((_resolve, reject) => {\n rejectOnAbort = reject;\n });\n const onAbort = () => {\n rejectOnAbort(abortReason(abortSignal));\n };\n\n abortSignal.addEventListener('abort', onAbort, { once: true });\n if (abortSignal.aborted) {\n onAbort();\n }\n\n try {\n return await Promise.race([operation, aborted]);\n } finally {\n abortSignal.removeEventListener('abort', onAbort);\n }\n}\n\nfunction throwIfAborted(abortSignal: AbortSignal | undefined): void {\n if (abortSignal?.aborted) {\n throw abortReason(abortSignal);\n }\n}\n\nfunction abortReason(abortSignal: AbortSignal): unknown {\n return (\n abortSignal.reason ??\n new DOMException('The operation was aborted.', 'AbortError')\n );\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,440 @@
1
+ import { asSchema } from "ai";
2
+ const MAX_SCHEMA_DEPTH = 8;
3
+ const MAX_COMPACT_OBJECT_TYPE_LENGTH = 120;
4
+ function buildCodeModeToolDescription(tools) {
5
+ const toolEntries = Object.entries(tools);
6
+ const typeBlock = toolEntries.length === 0 ? "No host tools. Do not call `tools.*`." : [
7
+ "```ts",
8
+ "declare const tools: {",
9
+ ...toolEntries.flatMap(renderToolType),
10
+ "};",
11
+ "```"
12
+ ].join("\n");
13
+ const exampleBlock = toolEntries.length === 0 ? "" : [
14
+ "",
15
+ "Tool call examples:",
16
+ "```ts",
17
+ ...renderToolExamples(toolEntries),
18
+ "```"
19
+ ].join("\n");
20
+ const sections = [
21
+ "Execute code-mode TypeScript in an isolated sandbox.",
22
+ "",
23
+ "Put the full program in `js`; top-level `await`/`return` work. Return a JSON-serializable result.",
24
+ "Call host tools only as async `tools.name(input)`; await each or use `Promise.all` for independent calls.",
25
+ "Use exact names/types below. `JSON.parse`/`JSON.stringify` are available.",
26
+ "Fetch: `fetch` is not available."
27
+ ];
28
+ sections.push("", "Tools:", typeBlock);
29
+ if (exampleBlock.length > 0) {
30
+ sections.push(exampleBlock);
31
+ }
32
+ return sections.join("\n");
33
+ }
34
+ function renderToolType([toolName, tool]) {
35
+ const schema = resolveInputSchema(tool);
36
+ const inputType = schema === void 0 ? "unknown" : schemaToType(schema, schema);
37
+ const outputSchema = resolveOutputSchema(tool);
38
+ const outputType = outputSchema === void 0 ? "unknown" : schemaToType(outputSchema, outputSchema);
39
+ const description = firstString(tool.description, tool.title);
40
+ const lines = [];
41
+ if (description !== void 0) {
42
+ lines.push(` /** ${toComment(description)} */`);
43
+ }
44
+ lines.push(
45
+ ` ${formatObjectKey(toolName)}: (input: ${indentType(inputType, 2)}) => Promise<${indentType(outputType, 2)}>;`
46
+ );
47
+ return lines;
48
+ }
49
+ function renderToolExamples(toolEntries) {
50
+ if (toolEntries.length === 1) {
51
+ const toolEntry = toolEntries[0];
52
+ const projection = renderToolProjection("result", toolEntry[1]);
53
+ return [
54
+ `const result = await ${renderToolExampleCall(toolEntry)};`,
55
+ `return ${projection};`
56
+ ];
57
+ }
58
+ const variableNames = uniqueToolVariableNames(
59
+ toolEntries.map(([toolName]) => toolName)
60
+ );
61
+ const calls = toolEntries.map(
62
+ (toolEntry) => ` ${renderToolExampleCall(toolEntry)},`
63
+ );
64
+ return [
65
+ `const [${variableNames.join(", ")}] = await Promise.all([`,
66
+ ...calls,
67
+ "]);",
68
+ "return {",
69
+ ...toolEntries.map(([toolName, tool], index) => {
70
+ const projection = renderToolProjection(variableNames[index], tool);
71
+ return ` ${formatObjectKey(toolName)}: ${projection},`;
72
+ }),
73
+ "};"
74
+ ];
75
+ }
76
+ function renderToolExampleCall([toolName, tool]) {
77
+ const schema = resolveInputSchema(tool);
78
+ const input = firstInputExample(tool) ?? (schema === void 0 ? {} : sampleFromSchema(schema, schema));
79
+ return `tools${formatPropertyAccess(toolName)}(${JSON.stringify(input)})`;
80
+ }
81
+ function renderToolProjection(variableName, tool) {
82
+ const field = firstObjectProperty(resolveOutputSchema(tool));
83
+ if (field === void 0) {
84
+ return variableName;
85
+ }
86
+ return `{ ${formatObjectKey(field)}: ${variableName}${formatPropertyAccess(field)} }`;
87
+ }
88
+ function firstObjectProperty(schema) {
89
+ if (schema === void 0 || !isRecord(schema.properties)) {
90
+ return void 0;
91
+ }
92
+ return Object.entries(schema.properties).find(
93
+ (entry) => isRecord(entry[1])
94
+ )?.[0];
95
+ }
96
+ function resolveInputSchema(tool) {
97
+ try {
98
+ const jsonSchema = asSchema(tool.inputSchema).jsonSchema;
99
+ if (isPromiseLike(jsonSchema) || !isRecord(jsonSchema)) {
100
+ return void 0;
101
+ }
102
+ return jsonSchema;
103
+ } catch {
104
+ return void 0;
105
+ }
106
+ }
107
+ function resolveOutputSchema(tool) {
108
+ try {
109
+ const outputSchema = tool.outputSchema;
110
+ if (outputSchema === void 0) {
111
+ return void 0;
112
+ }
113
+ const jsonSchema = asSchema(outputSchema).jsonSchema;
114
+ if (isPromiseLike(jsonSchema) || !isRecord(jsonSchema)) {
115
+ return void 0;
116
+ }
117
+ return jsonSchema;
118
+ } catch {
119
+ return void 0;
120
+ }
121
+ }
122
+ function schemaToType(schema, root) {
123
+ return schemaToTypeInner(schema, {
124
+ root,
125
+ seenRefs: /* @__PURE__ */ new Set(),
126
+ depth: 0
127
+ });
128
+ }
129
+ function schemaToTypeInner(schema, context) {
130
+ if (context.depth > MAX_SCHEMA_DEPTH) {
131
+ return "unknown";
132
+ }
133
+ const ref = firstString(schema.$ref);
134
+ if (ref !== void 0) {
135
+ const resolved = resolveRef(ref, context.root, context.seenRefs);
136
+ return resolved === void 0 ? "unknown" : schemaToTypeInner(resolved, nextContext(context));
137
+ }
138
+ const constValue = schema.const;
139
+ if (constValue !== void 0) {
140
+ return literalType(constValue);
141
+ }
142
+ const enumValues = asArray(schema.enum);
143
+ if (enumValues !== void 0) {
144
+ return union(enumValues.map(literalType));
145
+ }
146
+ const oneOf = schemaArray(schema.oneOf);
147
+ if (oneOf !== void 0) {
148
+ return union(
149
+ oneOf.map((part) => schemaToTypeInner(part, nextContext(context)))
150
+ );
151
+ }
152
+ const anyOf = schemaArray(schema.anyOf);
153
+ if (anyOf !== void 0) {
154
+ return union(
155
+ anyOf.map((part) => schemaToTypeInner(part, nextContext(context)))
156
+ );
157
+ }
158
+ const allOf = schemaArray(schema.allOf);
159
+ if (allOf !== void 0) {
160
+ return allOf.map((part) => schemaToTypeInner(part, nextContext(context))).join(" & ");
161
+ }
162
+ const type = schema.type;
163
+ if (Array.isArray(type)) {
164
+ return union(
165
+ type.map((part) => schemaToTypeInner({ ...schema, type: part }, context))
166
+ );
167
+ }
168
+ if (type === "object" || isRecord(schema.properties)) {
169
+ return objectType(schema, context);
170
+ }
171
+ if (type === "array" || schema.items !== void 0) {
172
+ return arrayType(schema, context);
173
+ }
174
+ if (type === "string") {
175
+ return "string";
176
+ }
177
+ if (type === "number" || type === "integer") {
178
+ return "number";
179
+ }
180
+ if (type === "boolean") {
181
+ return "boolean";
182
+ }
183
+ if (type === "null") {
184
+ return "null";
185
+ }
186
+ return "unknown";
187
+ }
188
+ function objectType(schema, context) {
189
+ const properties = isRecord(schema.properties) ? schema.properties : {};
190
+ const required = new Set(asArray(schema.required)?.filter(isString) ?? []);
191
+ const entries = Object.entries(properties).filter(
192
+ (entry) => isRecord(entry[1])
193
+ );
194
+ if (entries.length === 0) {
195
+ const additionalProperties2 = schema.additionalProperties;
196
+ if (isRecord(additionalProperties2)) {
197
+ return `Record<string, ${schemaToTypeInner(additionalProperties2, nextContext(context))}>`;
198
+ }
199
+ if (additionalProperties2 === true) {
200
+ return "Record<string, unknown>";
201
+ }
202
+ return "{}";
203
+ }
204
+ const lines = entries.flatMap(([name, value]) => {
205
+ const propertyLines = [];
206
+ const description = firstString(value.description);
207
+ if (description !== void 0) {
208
+ propertyLines.push(` /** ${toComment(description)} */`);
209
+ }
210
+ propertyLines.push(
211
+ ` ${formatObjectKey(name)}${required.has(name) ? "" : "?"}: ${indentType(
212
+ schemaToTypeInner(value, nextContext(context)),
213
+ 2
214
+ )};`
215
+ );
216
+ return propertyLines;
217
+ });
218
+ const additionalProperties = schema.additionalProperties;
219
+ if (isRecord(additionalProperties)) {
220
+ lines.push(
221
+ ` [key: string]: ${schemaToTypeInner(additionalProperties, nextContext(context))};`
222
+ );
223
+ } else if (additionalProperties === true) {
224
+ lines.push(" [key: string]: unknown;");
225
+ }
226
+ const compact = compactObjectType(lines);
227
+ if (compact !== void 0) {
228
+ return compact;
229
+ }
230
+ return `{
231
+ ${lines.join("\n")}
232
+ }`;
233
+ }
234
+ function arrayType(schema, context) {
235
+ const items = schema.items;
236
+ if (Array.isArray(items)) {
237
+ return `[${items.map(
238
+ (item) => isRecord(item) ? schemaToTypeInner(item, nextContext(context)) : "unknown"
239
+ ).join(", ")}]`;
240
+ }
241
+ if (isRecord(items)) {
242
+ const itemType = schemaToTypeInner(items, nextContext(context));
243
+ return needsParentheses(itemType) || itemType.includes("\n") ? `Array<${itemType}>` : `${itemType}[]`;
244
+ }
245
+ return "unknown[]";
246
+ }
247
+ function sampleFromSchema(schema, root) {
248
+ return sampleFromSchemaInner(schema, {
249
+ root,
250
+ seenRefs: /* @__PURE__ */ new Set(),
251
+ depth: 0
252
+ });
253
+ }
254
+ function sampleFromSchemaInner(schema, context) {
255
+ if (context.depth > MAX_SCHEMA_DEPTH) {
256
+ return null;
257
+ }
258
+ if (schema.default !== void 0) {
259
+ return schema.default;
260
+ }
261
+ const ref = firstString(schema.$ref);
262
+ if (ref !== void 0) {
263
+ const resolved = resolveRef(ref, context.root, context.seenRefs);
264
+ return resolved === void 0 ? null : sampleFromSchemaInner(resolved, nextContext(context));
265
+ }
266
+ if (schema.const !== void 0) {
267
+ return schema.const;
268
+ }
269
+ const enumValues = asArray(schema.enum);
270
+ if (enumValues !== void 0) {
271
+ return enumValues[0] ?? null;
272
+ }
273
+ const oneOf = schemaArray(schema.oneOf);
274
+ if (oneOf !== void 0) {
275
+ return sampleFromSchemaInner(oneOf[0] ?? {}, nextContext(context));
276
+ }
277
+ const anyOf = schemaArray(schema.anyOf);
278
+ if (anyOf !== void 0) {
279
+ return sampleFromSchemaInner(anyOf[0] ?? {}, nextContext(context));
280
+ }
281
+ const type = schema.type;
282
+ if (Array.isArray(type)) {
283
+ return sampleFromSchemaInner(
284
+ { ...schema, type: type.find((part) => part !== "null") ?? type[0] },
285
+ context
286
+ );
287
+ }
288
+ if (type === "object" || isRecord(schema.properties)) {
289
+ const properties = isRecord(schema.properties) ? schema.properties : {};
290
+ return Object.fromEntries(
291
+ Object.entries(properties).filter((entry) => isRecord(entry[1])).map(([name, value]) => [
292
+ name,
293
+ sampleFromSchemaInner(value, nextContext(context))
294
+ ])
295
+ );
296
+ }
297
+ if (type === "array" || schema.items !== void 0) {
298
+ const items = Array.isArray(schema.items) ? schema.items[0] : schema.items;
299
+ return [
300
+ isRecord(items) ? sampleFromSchemaInner(items, nextContext(context)) : null
301
+ ];
302
+ }
303
+ if (type === "number" || type === "integer") {
304
+ return 1;
305
+ }
306
+ if (type === "boolean") {
307
+ return true;
308
+ }
309
+ if (type === "null") {
310
+ return null;
311
+ }
312
+ if (type === "string" || type === void 0) {
313
+ const examples = asArray(schema.examples);
314
+ if (examples?.[0] !== void 0) {
315
+ return examples[0];
316
+ }
317
+ const format = firstString(schema.format);
318
+ if (format === "uri" || format === "url") {
319
+ return "https://example.com";
320
+ }
321
+ if (format === "date-time") {
322
+ return "2026-01-01T00:00:00.000Z";
323
+ }
324
+ if (format === "date") {
325
+ return "2026-01-01";
326
+ }
327
+ return "string";
328
+ }
329
+ return null;
330
+ }
331
+ function firstInputExample(tool) {
332
+ const examples = asArray(tool.inputExamples);
333
+ const first = examples?.[0];
334
+ return isRecord(first) && "input" in first ? first.input : void 0;
335
+ }
336
+ function resolveRef(ref, root, seenRefs) {
337
+ if (!ref.startsWith("#/") || seenRefs.has(ref)) {
338
+ return void 0;
339
+ }
340
+ seenRefs.add(ref);
341
+ const value = ref.slice(2).split("/").map((part) => part.replace(/~1/g, "/").replace(/~0/g, "~")).reduce((current, part) => {
342
+ if (!isRecord(current)) {
343
+ return void 0;
344
+ }
345
+ return current[part];
346
+ }, root);
347
+ return isRecord(value) ? value : void 0;
348
+ }
349
+ function nextContext(context) {
350
+ return {
351
+ ...context,
352
+ depth: context.depth + 1
353
+ };
354
+ }
355
+ function union(types) {
356
+ const unique = [...new Set(types)];
357
+ return unique.length === 0 ? "unknown" : unique.join(" | ");
358
+ }
359
+ function literalType(value) {
360
+ if (typeof value === "string") {
361
+ return JSON.stringify(value);
362
+ }
363
+ if (typeof value === "number" || typeof value === "boolean" || value === null) {
364
+ return String(value);
365
+ }
366
+ return "unknown";
367
+ }
368
+ function indentType(type, spaces) {
369
+ if (!type.includes("\n")) {
370
+ return type;
371
+ }
372
+ const padding = " ".repeat(spaces);
373
+ return type.replaceAll("\n", `
374
+ ${padding}`);
375
+ }
376
+ function needsParentheses(type) {
377
+ return type.includes(" | ") || type.includes(" & ");
378
+ }
379
+ function formatObjectKey(key) {
380
+ return isIdentifier(key) ? key : JSON.stringify(key);
381
+ }
382
+ function formatPropertyAccess(key) {
383
+ return isIdentifier(key) ? `.${key}` : `[${JSON.stringify(key)}]`;
384
+ }
385
+ function uniqueToolVariableNames(toolNames) {
386
+ const seen = /* @__PURE__ */ new Map();
387
+ return toolNames.map((toolName) => {
388
+ const base = toIdentifier(toolName);
389
+ const count = seen.get(base) ?? 0;
390
+ seen.set(base, count + 1);
391
+ return count === 0 ? base : `${base}${count + 1}`;
392
+ });
393
+ }
394
+ function toIdentifier(value) {
395
+ const identifier = value.replace(/[^A-Za-z0-9_$]/g, "_").replace(/^[^A-Za-z_$]+/, "");
396
+ return identifier.length === 0 ? "tool" : identifier;
397
+ }
398
+ function isIdentifier(value) {
399
+ return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(value);
400
+ }
401
+ function compactObjectType(lines) {
402
+ if (lines.length === 0 || lines.some((line) => line.includes("/**"))) {
403
+ return void 0;
404
+ }
405
+ const fields = lines.map((line) => line.trim());
406
+ if (fields.some((field) => field.includes("\n"))) {
407
+ return void 0;
408
+ }
409
+ const compact = `{ ${fields.join(" ")} }`;
410
+ return compact.length <= MAX_COMPACT_OBJECT_TYPE_LENGTH ? compact : void 0;
411
+ }
412
+ function toComment(value) {
413
+ return value.replaceAll("*/", "* /").replace(/\s+/g, " ").trim();
414
+ }
415
+ function firstString(...values) {
416
+ return values.find(isString);
417
+ }
418
+ function schemaArray(value) {
419
+ const values = asArray(value);
420
+ if (values === void 0 || !values.every(isRecord)) {
421
+ return void 0;
422
+ }
423
+ return values;
424
+ }
425
+ function asArray(value) {
426
+ return Array.isArray(value) ? value : void 0;
427
+ }
428
+ function isRecord(value) {
429
+ return typeof value === "object" && value !== null && !Array.isArray(value);
430
+ }
431
+ function isString(value) {
432
+ return typeof value === "string";
433
+ }
434
+ function isPromiseLike(value) {
435
+ return isRecord(value) && typeof value.then === "function";
436
+ }
437
+ export {
438
+ buildCodeModeToolDescription
439
+ };
440
+ //# sourceMappingURL=tool-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tool-prompt.ts"],"sourcesContent":["import { asSchema } from 'ai';\nimport type { CodeModeToolSet } from './types.js';\n\ntype JsonSchema = Record<string, unknown>;\n\ninterface SchemaContext {\n root: JsonSchema;\n seenRefs: Set<string>;\n depth: number;\n}\n\nconst MAX_SCHEMA_DEPTH = 8;\nconst MAX_COMPACT_OBJECT_TYPE_LENGTH = 120;\n\nexport function buildCodeModeToolDescription(tools: CodeModeToolSet): string {\n const toolEntries = Object.entries(tools);\n const typeBlock =\n toolEntries.length === 0\n ? 'No host tools. Do not call `tools.*`.'\n : [\n '```ts',\n 'declare const tools: {',\n ...toolEntries.flatMap(renderToolType),\n '};',\n '```',\n ].join('\\n');\n\n const exampleBlock =\n toolEntries.length === 0\n ? ''\n : [\n '',\n 'Tool call examples:',\n '```ts',\n ...renderToolExamples(toolEntries),\n '```',\n ].join('\\n');\n\n const sections = [\n 'Execute code-mode TypeScript in an isolated sandbox.',\n '',\n 'Put the full program in `js`; top-level `await`/`return` work. Return a JSON-serializable result.',\n 'Call host tools only as async `tools.name(input)`; await each or use `Promise.all` for independent calls.',\n 'Use exact names/types below. `JSON.parse`/`JSON.stringify` are available.',\n 'Fetch: `fetch` is not available.',\n ];\n\n sections.push('', 'Tools:', typeBlock);\n\n if (exampleBlock.length > 0) {\n sections.push(exampleBlock);\n }\n\n return sections.join('\\n');\n}\n\nfunction renderToolType([toolName, tool]: [\n string,\n CodeModeToolSet[string],\n]): string[] {\n const schema = resolveInputSchema(tool);\n const inputType =\n schema === undefined ? 'unknown' : schemaToType(schema, schema);\n const outputSchema = resolveOutputSchema(tool);\n const outputType =\n outputSchema === undefined\n ? 'unknown'\n : schemaToType(outputSchema, outputSchema);\n const description = firstString(tool.description, tool.title);\n const lines: string[] = [];\n\n if (description !== undefined) {\n lines.push(` /** ${toComment(description)} */`);\n }\n\n lines.push(\n ` ${formatObjectKey(toolName)}: (input: ${indentType(inputType, 2)}) => Promise<${indentType(outputType, 2)}>;`,\n );\n return lines;\n}\n\nfunction renderToolExamples(\n toolEntries: Array<[string, CodeModeToolSet[string]]>,\n): string[] {\n if (toolEntries.length === 1) {\n const toolEntry = toolEntries[0]!;\n const projection = renderToolProjection('result', toolEntry[1]);\n return [\n `const result = await ${renderToolExampleCall(toolEntry)};`,\n `return ${projection};`,\n ];\n }\n\n const variableNames = uniqueToolVariableNames(\n toolEntries.map(([toolName]) => toolName),\n );\n const calls = toolEntries.map(\n toolEntry => ` ${renderToolExampleCall(toolEntry)},`,\n );\n return [\n `const [${variableNames.join(', ')}] = await Promise.all([`,\n ...calls,\n ']);',\n 'return {',\n ...toolEntries.map(([toolName, tool], index) => {\n const projection = renderToolProjection(variableNames[index]!, tool);\n return ` ${formatObjectKey(toolName)}: ${projection},`;\n }),\n '};',\n ];\n}\n\nfunction renderToolExampleCall([toolName, tool]: [\n string,\n CodeModeToolSet[string],\n]): string {\n const schema = resolveInputSchema(tool);\n const input =\n firstInputExample(tool) ??\n (schema === undefined ? {} : sampleFromSchema(schema, schema));\n return `tools${formatPropertyAccess(toolName)}(${JSON.stringify(input)})`;\n}\n\nfunction renderToolProjection(\n variableName: string,\n tool: CodeModeToolSet[string],\n): string {\n const field = firstObjectProperty(resolveOutputSchema(tool));\n if (field === undefined) {\n return variableName;\n }\n return `{ ${formatObjectKey(field)}: ${variableName}${formatPropertyAccess(field)} }`;\n}\n\nfunction firstObjectProperty(\n schema: JsonSchema | undefined,\n): string | undefined {\n if (schema === undefined || !isRecord(schema.properties)) {\n return undefined;\n }\n return Object.entries(schema.properties).find(entry =>\n isRecord(entry[1]),\n )?.[0];\n}\n\nfunction resolveInputSchema(\n tool: CodeModeToolSet[string],\n): JsonSchema | undefined {\n try {\n const jsonSchema = asSchema(tool.inputSchema).jsonSchema;\n if (isPromiseLike(jsonSchema) || !isRecord(jsonSchema)) {\n return undefined;\n }\n return jsonSchema;\n } catch {\n return undefined;\n }\n}\n\nfunction resolveOutputSchema(\n tool: CodeModeToolSet[string],\n): JsonSchema | undefined {\n try {\n const outputSchema = tool.outputSchema;\n if (outputSchema === undefined) {\n return undefined;\n }\n const jsonSchema = asSchema(outputSchema).jsonSchema;\n if (isPromiseLike(jsonSchema) || !isRecord(jsonSchema)) {\n return undefined;\n }\n return jsonSchema;\n } catch {\n return undefined;\n }\n}\n\nfunction schemaToType(schema: JsonSchema, root: JsonSchema): string {\n return schemaToTypeInner(schema, {\n root,\n seenRefs: new Set(),\n depth: 0,\n });\n}\n\nfunction schemaToTypeInner(schema: JsonSchema, context: SchemaContext): string {\n if (context.depth > MAX_SCHEMA_DEPTH) {\n return 'unknown';\n }\n\n const ref = firstString(schema.$ref);\n if (ref !== undefined) {\n const resolved = resolveRef(ref, context.root, context.seenRefs);\n return resolved === undefined\n ? 'unknown'\n : schemaToTypeInner(resolved, nextContext(context));\n }\n\n const constValue = schema.const;\n if (constValue !== undefined) {\n return literalType(constValue);\n }\n\n const enumValues = asArray(schema.enum);\n if (enumValues !== undefined) {\n return union(enumValues.map(literalType));\n }\n\n const oneOf = schemaArray(schema.oneOf);\n if (oneOf !== undefined) {\n return union(\n oneOf.map(part => schemaToTypeInner(part, nextContext(context))),\n );\n }\n\n const anyOf = schemaArray(schema.anyOf);\n if (anyOf !== undefined) {\n return union(\n anyOf.map(part => schemaToTypeInner(part, nextContext(context))),\n );\n }\n\n const allOf = schemaArray(schema.allOf);\n if (allOf !== undefined) {\n return allOf\n .map(part => schemaToTypeInner(part, nextContext(context)))\n .join(' & ');\n }\n\n const type = schema.type;\n if (Array.isArray(type)) {\n return union(\n type.map(part => schemaToTypeInner({ ...schema, type: part }, context)),\n );\n }\n\n if (type === 'object' || isRecord(schema.properties)) {\n return objectType(schema, context);\n }\n\n if (type === 'array' || schema.items !== undefined) {\n return arrayType(schema, context);\n }\n\n if (type === 'string') {\n return 'string';\n }\n\n if (type === 'number' || type === 'integer') {\n return 'number';\n }\n\n if (type === 'boolean') {\n return 'boolean';\n }\n\n if (type === 'null') {\n return 'null';\n }\n\n return 'unknown';\n}\n\nfunction objectType(schema: JsonSchema, context: SchemaContext): string {\n const properties = isRecord(schema.properties) ? schema.properties : {};\n const required = new Set(asArray(schema.required)?.filter(isString) ?? []);\n const entries = Object.entries(properties).filter(\n (entry): entry is [string, JsonSchema] => isRecord(entry[1]),\n );\n\n if (entries.length === 0) {\n const additionalProperties = schema.additionalProperties;\n if (isRecord(additionalProperties)) {\n return `Record<string, ${schemaToTypeInner(additionalProperties, nextContext(context))}>`;\n }\n if (additionalProperties === true) {\n return 'Record<string, unknown>';\n }\n return '{}';\n }\n\n const lines = entries.flatMap(([name, value]) => {\n const propertyLines: string[] = [];\n const description = firstString(value.description);\n if (description !== undefined) {\n propertyLines.push(` /** ${toComment(description)} */`);\n }\n propertyLines.push(\n ` ${formatObjectKey(name)}${required.has(name) ? '' : '?'}: ${indentType(\n schemaToTypeInner(value, nextContext(context)),\n 2,\n )};`,\n );\n return propertyLines;\n });\n\n const additionalProperties = schema.additionalProperties;\n if (isRecord(additionalProperties)) {\n lines.push(\n ` [key: string]: ${schemaToTypeInner(additionalProperties, nextContext(context))};`,\n );\n } else if (additionalProperties === true) {\n lines.push(' [key: string]: unknown;');\n }\n\n const compact = compactObjectType(lines);\n if (compact !== undefined) {\n return compact;\n }\n\n return `{\\n${lines.join('\\n')}\\n}`;\n}\n\nfunction arrayType(schema: JsonSchema, context: SchemaContext): string {\n const items = schema.items;\n if (Array.isArray(items)) {\n return `[${items\n .map(item =>\n isRecord(item)\n ? schemaToTypeInner(item, nextContext(context))\n : 'unknown',\n )\n .join(', ')}]`;\n }\n if (isRecord(items)) {\n const itemType = schemaToTypeInner(items, nextContext(context));\n return needsParentheses(itemType) || itemType.includes('\\n')\n ? `Array<${itemType}>`\n : `${itemType}[]`;\n }\n return 'unknown[]';\n}\n\nfunction sampleFromSchema(schema: JsonSchema, root: JsonSchema): unknown {\n return sampleFromSchemaInner(schema, {\n root,\n seenRefs: new Set(),\n depth: 0,\n });\n}\n\nfunction sampleFromSchemaInner(\n schema: JsonSchema,\n context: SchemaContext,\n): unknown {\n if (context.depth > MAX_SCHEMA_DEPTH) {\n return null;\n }\n\n if (schema.default !== undefined) {\n return schema.default;\n }\n\n const ref = firstString(schema.$ref);\n if (ref !== undefined) {\n const resolved = resolveRef(ref, context.root, context.seenRefs);\n return resolved === undefined\n ? null\n : sampleFromSchemaInner(resolved, nextContext(context));\n }\n\n if (schema.const !== undefined) {\n return schema.const;\n }\n\n const enumValues = asArray(schema.enum);\n if (enumValues !== undefined) {\n return enumValues[0] ?? null;\n }\n\n const oneOf = schemaArray(schema.oneOf);\n if (oneOf !== undefined) {\n return sampleFromSchemaInner(oneOf[0] ?? {}, nextContext(context));\n }\n\n const anyOf = schemaArray(schema.anyOf);\n if (anyOf !== undefined) {\n return sampleFromSchemaInner(anyOf[0] ?? {}, nextContext(context));\n }\n\n const type = schema.type;\n if (Array.isArray(type)) {\n return sampleFromSchemaInner(\n { ...schema, type: type.find(part => part !== 'null') ?? type[0] },\n context,\n );\n }\n\n if (type === 'object' || isRecord(schema.properties)) {\n const properties = isRecord(schema.properties) ? schema.properties : {};\n return Object.fromEntries(\n Object.entries(properties)\n .filter((entry): entry is [string, JsonSchema] => isRecord(entry[1]))\n .map(([name, value]) => [\n name,\n sampleFromSchemaInner(value, nextContext(context)),\n ]),\n );\n }\n\n if (type === 'array' || schema.items !== undefined) {\n const items = Array.isArray(schema.items) ? schema.items[0] : schema.items;\n return [\n isRecord(items)\n ? sampleFromSchemaInner(items, nextContext(context))\n : null,\n ];\n }\n\n if (type === 'number' || type === 'integer') {\n return 1;\n }\n\n if (type === 'boolean') {\n return true;\n }\n\n if (type === 'null') {\n return null;\n }\n\n if (type === 'string' || type === undefined) {\n const examples = asArray(schema.examples);\n if (examples?.[0] !== undefined) {\n return examples[0];\n }\n const format = firstString(schema.format);\n if (format === 'uri' || format === 'url') {\n return 'https://example.com';\n }\n if (format === 'date-time') {\n return '2026-01-01T00:00:00.000Z';\n }\n if (format === 'date') {\n return '2026-01-01';\n }\n return 'string';\n }\n\n return null;\n}\n\nfunction firstInputExample(tool: CodeModeToolSet[string]): unknown {\n const examples = asArray(tool.inputExamples);\n const first = examples?.[0];\n return isRecord(first) && 'input' in first ? first.input : undefined;\n}\n\nfunction resolveRef(\n ref: string,\n root: JsonSchema,\n seenRefs: Set<string>,\n): JsonSchema | undefined {\n if (!ref.startsWith('#/') || seenRefs.has(ref)) {\n return undefined;\n }\n\n seenRefs.add(ref);\n const value = ref\n .slice(2)\n .split('/')\n .map(part => part.replace(/~1/g, '/').replace(/~0/g, '~'))\n .reduce<unknown>((current, part) => {\n if (!isRecord(current)) {\n return undefined;\n }\n return current[part];\n }, root);\n\n return isRecord(value) ? value : undefined;\n}\n\nfunction nextContext(context: SchemaContext): SchemaContext {\n return {\n ...context,\n depth: context.depth + 1,\n };\n}\n\nfunction union(types: string[]): string {\n const unique = [...new Set(types)];\n return unique.length === 0 ? 'unknown' : unique.join(' | ');\n}\n\nfunction literalType(value: unknown): string {\n if (typeof value === 'string') {\n return JSON.stringify(value);\n }\n if (\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n value === null\n ) {\n return String(value);\n }\n return 'unknown';\n}\n\nfunction indentType(type: string, spaces: number): string {\n if (!type.includes('\\n')) {\n return type;\n }\n\n const padding = ' '.repeat(spaces);\n return type.replaceAll('\\n', `\\n${padding}`);\n}\n\nfunction needsParentheses(type: string): boolean {\n return type.includes(' | ') || type.includes(' & ');\n}\n\nfunction formatObjectKey(key: string): string {\n return isIdentifier(key) ? key : JSON.stringify(key);\n}\n\nfunction formatPropertyAccess(key: string): string {\n return isIdentifier(key) ? `.${key}` : `[${JSON.stringify(key)}]`;\n}\n\nfunction uniqueToolVariableNames(toolNames: string[]): string[] {\n const seen = new Map<string, number>();\n return toolNames.map(toolName => {\n const base = toIdentifier(toolName);\n const count = seen.get(base) ?? 0;\n seen.set(base, count + 1);\n return count === 0 ? base : `${base}${count + 1}`;\n });\n}\n\nfunction toIdentifier(value: string): string {\n const identifier = value\n .replace(/[^A-Za-z0-9_$]/g, '_')\n .replace(/^[^A-Za-z_$]+/, '');\n return identifier.length === 0 ? 'tool' : identifier;\n}\n\nfunction isIdentifier(value: string): boolean {\n return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(value);\n}\n\nfunction compactObjectType(lines: string[]): string | undefined {\n if (lines.length === 0 || lines.some(line => line.includes('/**'))) {\n return undefined;\n }\n\n const fields = lines.map(line => line.trim());\n if (fields.some(field => field.includes('\\n'))) {\n return undefined;\n }\n\n const compact = `{ ${fields.join(' ')} }`;\n return compact.length <= MAX_COMPACT_OBJECT_TYPE_LENGTH ? compact : undefined;\n}\n\nfunction toComment(value: string): string {\n return value.replaceAll('*/', '* /').replace(/\\s+/g, ' ').trim();\n}\n\nfunction firstString(...values: unknown[]): string | undefined {\n return values.find(isString);\n}\n\nfunction schemaArray(value: unknown): JsonSchema[] | undefined {\n const values = asArray(value);\n if (values === undefined || !values.every(isRecord)) {\n return undefined;\n }\n return values;\n}\n\nfunction asArray(value: unknown): unknown[] | undefined {\n return Array.isArray(value) ? value : undefined;\n}\n\nfunction isRecord(value: unknown): value is JsonSchema {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isString(value: unknown): value is string {\n return typeof value === 'string';\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n return isRecord(value) && typeof value.then === 'function';\n}\n"],"mappings":"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","names":["additionalProperties"]}
package/dist/types.js ADDED
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}