@vraxis/agent-v 0.6.0 → 0.7.1

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 (86) hide show
  1. package/AGENTS.md +8 -2
  2. package/ARCHITECTURE.md +27 -0
  3. package/CHANGELOG.md +14 -0
  4. package/README.md +91 -16
  5. package/compatibility.json +32 -1
  6. package/dist/adapters/ai-sdk/index.d.ts.map +1 -1
  7. package/dist/adapters/ai-sdk/index.js +2 -1
  8. package/dist/adapters/ai-sdk/index.js.map +1 -1
  9. package/dist/adapters/local-cli/parsing.d.ts.map +1 -1
  10. package/dist/adapters/local-cli/parsing.js +28 -3
  11. package/dist/adapters/local-cli/parsing.js.map +1 -1
  12. package/dist/adapters/providers/index.d.ts +100 -0
  13. package/dist/adapters/providers/index.d.ts.map +1 -0
  14. package/dist/adapters/providers/index.js +195 -0
  15. package/dist/adapters/providers/index.js.map +1 -0
  16. package/dist/core/agent-v.d.ts.map +1 -1
  17. package/dist/core/agent-v.js +6 -0
  18. package/dist/core/agent-v.js.map +1 -1
  19. package/dist/core/contracts.d.ts +11 -0
  20. package/dist/core/contracts.d.ts.map +1 -1
  21. package/dist/core/extensions.d.ts +4 -0
  22. package/dist/core/extensions.d.ts.map +1 -1
  23. package/dist/core/extensions.js +2 -0
  24. package/dist/core/extensions.js.map +1 -1
  25. package/dist/core/memory.d.ts +9 -1
  26. package/dist/core/memory.d.ts.map +1 -1
  27. package/dist/core/memory.js +17 -0
  28. package/dist/core/memory.js.map +1 -1
  29. package/dist/core/version.d.ts +1 -1
  30. package/dist/core/version.js +1 -1
  31. package/dist/node/credentials.d.ts +30 -0
  32. package/dist/node/credentials.d.ts.map +1 -0
  33. package/dist/node/credentials.js +104 -0
  34. package/dist/node/credentials.js.map +1 -0
  35. package/dist/node/doctor.js +6 -6
  36. package/dist/node/doctor.js.map +1 -1
  37. package/dist/node/index.d.ts +2 -0
  38. package/dist/node/index.d.ts.map +1 -1
  39. package/dist/node/index.js +2 -0
  40. package/dist/node/index.js.map +1 -1
  41. package/dist/node/skills.d.ts.map +1 -1
  42. package/dist/node/skills.js +10 -0
  43. package/dist/node/skills.js.map +1 -1
  44. package/dist/runtime/index.d.ts +55 -0
  45. package/dist/runtime/index.d.ts.map +1 -0
  46. package/dist/runtime/index.js +94 -0
  47. package/dist/runtime/index.js.map +1 -0
  48. package/dist/skills/index.d.ts +37 -0
  49. package/dist/skills/index.d.ts.map +1 -0
  50. package/dist/skills/index.js +128 -0
  51. package/dist/skills/index.js.map +1 -0
  52. package/dist/tools/approval.d.ts +26 -0
  53. package/dist/tools/approval.d.ts.map +1 -0
  54. package/dist/tools/approval.js +23 -0
  55. package/dist/tools/approval.js.map +1 -0
  56. package/dist/tools/browser.d.ts +25 -0
  57. package/dist/tools/browser.d.ts.map +1 -0
  58. package/dist/tools/browser.js +118 -0
  59. package/dist/tools/browser.js.map +1 -0
  60. package/dist/tools/http.d.ts +9 -0
  61. package/dist/tools/http.d.ts.map +1 -0
  62. package/dist/tools/http.js +123 -0
  63. package/dist/tools/http.js.map +1 -0
  64. package/dist/tools/index.d.ts +6 -0
  65. package/dist/tools/index.d.ts.map +1 -0
  66. package/dist/tools/index.js +6 -0
  67. package/dist/tools/index.js.map +1 -0
  68. package/dist/tools/names.d.ts +19 -0
  69. package/dist/tools/names.d.ts.map +1 -0
  70. package/dist/tools/names.js +19 -0
  71. package/dist/tools/names.js.map +1 -0
  72. package/dist/tools/node/index.d.ts +20 -0
  73. package/dist/tools/node/index.d.ts.map +1 -0
  74. package/dist/tools/node/index.js +406 -0
  75. package/dist/tools/node/index.js.map +1 -0
  76. package/dist/tools/pure.d.ts +13 -0
  77. package/dist/tools/pure.d.ts.map +1 -0
  78. package/dist/tools/pure.js +170 -0
  79. package/dist/tools/pure.js.map +1 -0
  80. package/examples/providers.ts +35 -0
  81. package/examples/runtime-kit.ts +25 -0
  82. package/examples/smoke.ts +8 -0
  83. package/llms.txt +1 -1
  84. package/package.json +31 -15
  85. package/skills/agent-v/SKILL.md +8 -2
  86. package/skills/agent-v/references/integration-patterns.md +11 -0
@@ -0,0 +1,406 @@
1
+ import { execFile } from "node:child_process";
2
+ import { readdir, readFile, realpath, rename, stat, writeFile } from "node:fs/promises";
3
+ import { basename, dirname, isAbsolute, relative, resolve, sep } from "node:path";
4
+ import { promisify } from "node:util";
5
+ import { defineOutput, defineTool } from "../../core/index.js";
6
+ import { standardToolNames } from "../names.js";
7
+ const execFileAsync = promisify(execFile);
8
+ function record(value, label) {
9
+ if (!value || typeof value !== "object" || Array.isArray(value))
10
+ throw new TypeError(`${label} must be an object.`);
11
+ return value;
12
+ }
13
+ function stringField(value, field, options = {}) {
14
+ const selected = record(value, "Tool input")[field];
15
+ if (typeof selected !== "string" || (!options.allowEmpty && !selected.trim()))
16
+ throw new TypeError(`${field} must be ${options.allowEmpty ? "a string" : "a non-empty string"}.`);
17
+ if (selected.includes("\0"))
18
+ throw new TypeError(`${field} contains an invalid null byte.`);
19
+ return selected;
20
+ }
21
+ function within(root, candidate) {
22
+ const path = relative(root, candidate);
23
+ return path === "" || (!path.startsWith(`..${sep}`) && path !== ".." && !isAbsolute(path));
24
+ }
25
+ class BoundedWorkspace {
26
+ rootPath;
27
+ constructor(rootPath) {
28
+ this.rootPath = rootPath;
29
+ }
30
+ static async create(rootPath) {
31
+ const canonical = await realpath(rootPath);
32
+ if (!(await stat(canonical)).isDirectory())
33
+ throw new TypeError("Workspace root must be a directory.");
34
+ return new BoundedWorkspace(canonical);
35
+ }
36
+ lexical(relativePath) {
37
+ if (!relativePath || isAbsolute(relativePath))
38
+ throw new TypeError("Paths must be non-empty and relative to the workspace root.");
39
+ const candidate = resolve(this.rootPath, relativePath);
40
+ if (!within(this.rootPath, candidate))
41
+ throw new TypeError("Path escapes the approved workspace root.");
42
+ return candidate;
43
+ }
44
+ async existing(relativePath) {
45
+ const candidate = this.lexical(relativePath);
46
+ const canonical = await realpath(candidate);
47
+ if (!within(this.rootPath, canonical))
48
+ throw new TypeError("Path resolves outside the approved workspace root.");
49
+ return canonical;
50
+ }
51
+ async writable(relativePath) {
52
+ const candidate = this.lexical(relativePath);
53
+ const canonicalParent = await realpath(dirname(candidate));
54
+ if (!within(this.rootPath, canonicalParent))
55
+ throw new TypeError("Path parent resolves outside the approved workspace root.");
56
+ const existing = await realpath(candidate).catch((error) => {
57
+ if (error.code === "ENOENT")
58
+ return undefined;
59
+ throw error;
60
+ });
61
+ if (existing && !within(this.rootPath, existing))
62
+ throw new TypeError("Path resolves outside the approved workspace root.");
63
+ return candidate;
64
+ }
65
+ }
66
+ export async function createFilesystemTools(options) {
67
+ const workspace = await BoundedWorkspace.create(options.rootPath);
68
+ const maxFileBytes = options.maxFileBytes ?? 1_000_000;
69
+ const maxSearchFiles = options.maxSearchFiles ?? 5_000;
70
+ const maxSearchResults = options.maxSearchResults ?? 200;
71
+ const ignored = new Set(options.ignoredDirectories ?? [".git", "node_modules"]);
72
+ const objectOutput = defineOutput({
73
+ name: "workspace-tool-output",
74
+ jsonSchema: { type: "object" },
75
+ parse(value) { return record(value, "Workspace tool output"); },
76
+ });
77
+ const pathInput = (name) => defineOutput({
78
+ name,
79
+ jsonSchema: { type: "object", properties: { path: { type: "string" } }, required: ["path"], additionalProperties: false },
80
+ parse(value) { return { path: stringField(value, "path") }; },
81
+ });
82
+ const readBoundedText = async (path) => {
83
+ const info = await stat(path);
84
+ if (!info.isFile())
85
+ throw new TypeError("Path must identify a regular file.");
86
+ if (info.size > maxFileBytes)
87
+ throw new RangeError(`File exceeds the ${maxFileBytes} byte read limit.`);
88
+ const content = await readFile(path, "utf8");
89
+ if (content.includes("\0"))
90
+ throw new TypeError("Binary files are not supported.");
91
+ return content;
92
+ };
93
+ return [
94
+ defineTool({
95
+ name: standardToolNames.listDirectory,
96
+ version: "1.0.0",
97
+ description: "List one directory inside the approved workspace root.",
98
+ input: pathInput("list-directory-input"),
99
+ output: objectOutput,
100
+ risk: "read",
101
+ sideEffect: "none",
102
+ requiredPermissions: ["filesystem:read"],
103
+ requiresApproval: false,
104
+ timeoutMs: 5_000,
105
+ async execute({ path }) {
106
+ const directory = await workspace.existing(path);
107
+ const entries = await readdir(directory, { withFileTypes: true });
108
+ if (entries.length > 1_000)
109
+ throw new RangeError("Directory exceeds the 1000-entry listing limit.");
110
+ return {
111
+ path,
112
+ entries: entries.sort((left, right) => left.name.localeCompare(right.name)).map((entry) => ({
113
+ name: entry.name,
114
+ type: entry.isDirectory() ? "directory" : entry.isFile() ? "file" : entry.isSymbolicLink() ? "symlink" : "other",
115
+ })),
116
+ };
117
+ },
118
+ }),
119
+ defineTool({
120
+ name: standardToolNames.readText,
121
+ version: "1.0.0",
122
+ description: "Read one bounded UTF-8 text file inside the approved workspace root.",
123
+ input: pathInput("read-text-input"),
124
+ output: objectOutput,
125
+ risk: "read",
126
+ sideEffect: "none",
127
+ requiredPermissions: ["filesystem:read"],
128
+ requiresApproval: false,
129
+ timeoutMs: 5_000,
130
+ async execute({ path }) {
131
+ const file = await workspace.existing(path);
132
+ return { path, content: await readBoundedText(file) };
133
+ },
134
+ }),
135
+ defineTool({
136
+ name: standardToolNames.searchText,
137
+ version: "1.0.0",
138
+ description: "Search bounded workspace text files without following symlinks.",
139
+ input: defineOutput({
140
+ name: "search-text-input",
141
+ jsonSchema: { type: "object", properties: { query: { type: "string" }, path: { type: "string" } }, required: ["query"], additionalProperties: false },
142
+ parse(value) {
143
+ const input = record(value, "Search input");
144
+ return { query: stringField(value, "query"), path: input.path === undefined ? "." : stringField(value, "path") };
145
+ },
146
+ }),
147
+ output: objectOutput,
148
+ risk: "read",
149
+ sideEffect: "none",
150
+ requiredPermissions: ["filesystem:read"],
151
+ requiresApproval: false,
152
+ timeoutMs: 15_000,
153
+ async execute({ query, path }) {
154
+ const start = await workspace.existing(path);
155
+ const results = [];
156
+ let files = 0;
157
+ const walk = async (directory) => {
158
+ for (const entry of await readdir(directory, { withFileTypes: true })) {
159
+ if (results.length >= maxSearchResults || files >= maxSearchFiles)
160
+ return;
161
+ if (entry.isSymbolicLink() || (entry.isDirectory() && ignored.has(entry.name)))
162
+ continue;
163
+ const child = resolve(directory, entry.name);
164
+ if (entry.isDirectory()) {
165
+ await walk(child);
166
+ continue;
167
+ }
168
+ if (!entry.isFile())
169
+ continue;
170
+ files += 1;
171
+ const info = await stat(child);
172
+ if (info.size > maxFileBytes)
173
+ continue;
174
+ const content = await readFile(child, "utf8").catch(() => "");
175
+ if (content.includes("\0"))
176
+ continue;
177
+ for (const [index, line] of content.split(/\r?\n/).entries()) {
178
+ if (line.includes(query))
179
+ results.push({ path: relative(workspace.rootPath, child), line: index + 1, text: line.slice(0, 500) });
180
+ if (results.length >= maxSearchResults)
181
+ break;
182
+ }
183
+ }
184
+ };
185
+ const info = await stat(start);
186
+ if (info.isDirectory())
187
+ await walk(start);
188
+ else {
189
+ files = 1;
190
+ const content = await readBoundedText(start);
191
+ for (const [index, line] of content.split(/\r?\n/).entries()) {
192
+ if (line.includes(query))
193
+ results.push({ path: relative(workspace.rootPath, start), line: index + 1, text: line.slice(0, 500) });
194
+ if (results.length >= maxSearchResults)
195
+ break;
196
+ }
197
+ }
198
+ return { query, path, filesSearched: files, results, truncated: files >= maxSearchFiles || results.length >= maxSearchResults };
199
+ },
200
+ }),
201
+ defineTool({
202
+ name: standardToolNames.writeText,
203
+ version: "1.0.0",
204
+ description: "Create or replace one UTF-8 text file inside the approved workspace root.",
205
+ input: defineOutput({
206
+ name: "write-text-input",
207
+ jsonSchema: { type: "object", properties: { path: { type: "string" }, content: { type: "string" } }, required: ["path", "content"], additionalProperties: false },
208
+ parse(value) { return { path: stringField(value, "path"), content: stringField(value, "content", { allowEmpty: true }) }; },
209
+ }),
210
+ output: objectOutput,
211
+ risk: "write",
212
+ sideEffect: "idempotent",
213
+ requiredPermissions: ["filesystem:write"],
214
+ requiresApproval: true,
215
+ approvalCategory: "write",
216
+ approvalReason: "Allow this agent to create or replace a file inside the approved workspace.",
217
+ timeoutMs: 5_000,
218
+ async execute({ path, content }) {
219
+ if (new TextEncoder().encode(content).byteLength > maxFileBytes)
220
+ throw new RangeError(`Content exceeds the ${maxFileBytes} byte write limit.`);
221
+ const file = await workspace.writable(path);
222
+ const temporary = resolve(dirname(file), `.${basename(file)}.${crypto.randomUUID()}.tmp`);
223
+ await writeFile(temporary, content, { encoding: "utf8", mode: 0o600 });
224
+ await rename(temporary, file);
225
+ return { path, bytes: new TextEncoder().encode(content).byteLength };
226
+ },
227
+ }),
228
+ defineTool({
229
+ name: standardToolNames.applyTextEdits,
230
+ version: "1.0.0",
231
+ description: "Apply exact, deterministic text replacements to one workspace file.",
232
+ input: defineOutput({
233
+ name: "apply-text-edits-input",
234
+ jsonSchema: {
235
+ type: "object",
236
+ properties: {
237
+ path: { type: "string" },
238
+ edits: { type: "array", minItems: 1, maxItems: 100, items: { type: "object", properties: { find: { type: "string" }, replace: { type: "string" }, all: { type: "boolean" } }, required: ["find", "replace"], additionalProperties: false } },
239
+ },
240
+ required: ["path", "edits"],
241
+ additionalProperties: false,
242
+ },
243
+ parse(value) {
244
+ const input = record(value, "Text edit input");
245
+ if (!Array.isArray(input.edits) || input.edits.length < 1 || input.edits.length > 100)
246
+ throw new TypeError("edits must contain between 1 and 100 entries.");
247
+ const edits = input.edits.map((item) => {
248
+ const edit = record(item, "Text edit");
249
+ if (typeof edit.find !== "string" || !edit.find)
250
+ throw new TypeError("Each edit find value must be non-empty.");
251
+ if (typeof edit.replace !== "string")
252
+ throw new TypeError("Each edit replace value must be a string.");
253
+ if (edit.all !== undefined && typeof edit.all !== "boolean")
254
+ throw new TypeError("Each edit all value must be a boolean.");
255
+ return { find: edit.find, replace: edit.replace, all: edit.all === true };
256
+ });
257
+ return { path: stringField(value, "path"), edits };
258
+ },
259
+ }),
260
+ output: objectOutput,
261
+ risk: "write",
262
+ sideEffect: "non-idempotent",
263
+ requiredPermissions: ["filesystem:write"],
264
+ requiresApproval: true,
265
+ approvalCategory: "write",
266
+ approvalReason: "Allow this agent to apply reviewed text edits inside the approved workspace.",
267
+ timeoutMs: 5_000,
268
+ async execute({ path, edits }) {
269
+ const file = await workspace.existing(path);
270
+ let content = await readBoundedText(file);
271
+ for (const edit of edits) {
272
+ const occurrences = content.split(edit.find).length - 1;
273
+ if (occurrences === 0)
274
+ throw new TypeError("An expected edit target was not found.");
275
+ if (!edit.all && occurrences !== 1)
276
+ throw new TypeError("An edit target is ambiguous; set all only when every occurrence should change.");
277
+ content = edit.all ? content.split(edit.find).join(edit.replace) : content.replace(edit.find, edit.replace);
278
+ }
279
+ if (new TextEncoder().encode(content).byteLength > maxFileBytes)
280
+ throw new RangeError(`Edited content exceeds the ${maxFileBytes} byte limit.`);
281
+ const temporary = resolve(dirname(file), `.${basename(file)}.${crypto.randomUUID()}.tmp`);
282
+ await writeFile(temporary, content, { encoding: "utf8", mode: 0o600 });
283
+ await rename(temporary, file);
284
+ return { path, editsApplied: edits.length, bytes: new TextEncoder().encode(content).byteLength };
285
+ },
286
+ }),
287
+ ];
288
+ }
289
+ async function execute(command, args, options) {
290
+ try {
291
+ const result = await execFileAsync(command, [...args], { cwd: options.cwd, signal: options.signal, timeout: options.timeout, env: options.env, maxBuffer: options.maxBuffer, encoding: "utf8" });
292
+ return { stdout: result.stdout, stderr: result.stderr, exitCode: 0 };
293
+ }
294
+ catch (error) {
295
+ const failure = error;
296
+ return { stdout: failure.stdout ?? "", stderr: failure.stderr ?? failure.message, exitCode: typeof failure.code === "number" ? failure.code : 1 };
297
+ }
298
+ }
299
+ export async function createDevelopmentTools(options) {
300
+ const workspace = await BoundedWorkspace.create(options.rootPath);
301
+ const allowedCommands = new Set(options.allowedCommands.map((item) => item.trim()).filter(Boolean));
302
+ if (!allowedCommands.size)
303
+ throw new TypeError("Development tools require an explicit command allowlist.");
304
+ const maxOutputBytes = options.maxOutputBytes ?? 512_000;
305
+ const timeoutMs = options.timeoutMs ?? 120_000;
306
+ const output = defineOutput({ name: "process-output", jsonSchema: { type: "object" }, parse(value) { return record(value, "Process output"); } });
307
+ const bounded = (value) => value.length > maxOutputBytes ? value.slice(0, maxOutputBytes) : value;
308
+ const environment = { ...options.environment };
309
+ for (const key of options.inheritedEnvironment ?? ["PATH", "TMPDIR", "LANG", "LC_ALL", "TERM"]) {
310
+ if (process.env[key] !== undefined)
311
+ environment[key] = process.env[key];
312
+ }
313
+ const git = async (args, signal) => {
314
+ const result = await execute("git", ["-C", workspace.rootPath, ...args], { cwd: workspace.rootPath, signal, timeout: timeoutMs, env: environment, maxBuffer: maxOutputBytes });
315
+ return { ...result, stdout: bounded(result.stdout), stderr: bounded(result.stderr), truncated: result.stdout.length > maxOutputBytes || result.stderr.length > maxOutputBytes };
316
+ };
317
+ return [
318
+ defineTool({
319
+ name: standardToolNames.gitStatus,
320
+ version: "1.0.0",
321
+ description: "Read concise Git working-tree status for the approved workspace.",
322
+ input: defineOutput({ name: "git-status-input", jsonSchema: { type: "object", additionalProperties: false }, parse: () => ({}) }),
323
+ output,
324
+ risk: "read",
325
+ sideEffect: "none",
326
+ requiredPermissions: ["git:read"],
327
+ requiresApproval: false,
328
+ timeoutMs,
329
+ execute(_, context) { return git(["status", "--short", "--branch"], context.abortSignal); },
330
+ }),
331
+ defineTool({
332
+ name: standardToolNames.gitDiff,
333
+ version: "1.0.0",
334
+ description: "Read a bounded Git diff for the approved workspace.",
335
+ input: defineOutput({
336
+ name: "git-diff-input",
337
+ jsonSchema: { type: "object", properties: { staged: { type: "boolean" } }, additionalProperties: false },
338
+ parse(value) {
339
+ const input = record(value, "Git diff input");
340
+ if (input.staged !== undefined && typeof input.staged !== "boolean")
341
+ throw new TypeError("staged must be a boolean.");
342
+ return { staged: input.staged === true };
343
+ },
344
+ }),
345
+ output,
346
+ risk: "read",
347
+ sideEffect: "none",
348
+ requiredPermissions: ["git:read"],
349
+ requiresApproval: false,
350
+ timeoutMs,
351
+ execute({ staged }, context) { return git(["diff", ...(staged ? ["--staged"] : []), "--no-ext-diff"], context.abortSignal); },
352
+ }),
353
+ defineTool({
354
+ name: standardToolNames.runCommand,
355
+ version: "1.0.0",
356
+ description: "Run one argument-array command from an explicit host allowlist with cwd constrained to the approved workspace.",
357
+ input: defineOutput({
358
+ name: "run-command-input",
359
+ jsonSchema: {
360
+ type: "object",
361
+ properties: { command: { type: "string" }, args: { type: "array", items: { type: "string" }, maxItems: 100 }, cwd: { type: "string" } },
362
+ required: ["command"],
363
+ additionalProperties: false,
364
+ },
365
+ parse(value) {
366
+ const input = record(value, "Command input");
367
+ const command = stringField(value, "command");
368
+ if (!allowedCommands.has(command))
369
+ throw new TypeError(`Command ${command} is not in the host allowlist.`);
370
+ if (input.args !== undefined && (!Array.isArray(input.args) || input.args.some((item) => typeof item !== "string") || input.args.length > 100))
371
+ throw new TypeError("args must contain at most 100 strings.");
372
+ return { command, args: input.args ?? [], cwd: input.cwd === undefined ? "." : stringField(value, "cwd") };
373
+ },
374
+ }),
375
+ output,
376
+ risk: "privileged",
377
+ sideEffect: "non-idempotent",
378
+ requiredPermissions: ["process:execute"],
379
+ requiresApproval: true,
380
+ approvalCategory: "command",
381
+ approvalReason: "Allow this agent to execute an allowlisted command inside the approved workspace.",
382
+ timeoutMs,
383
+ async execute({ command, args, cwd }, context) {
384
+ const workingDirectory = await workspace.existing(cwd);
385
+ if (!(await stat(workingDirectory)).isDirectory())
386
+ throw new TypeError("Command cwd must be a directory.");
387
+ const result = await execute(command, args, { cwd: workingDirectory, signal: context.abortSignal, timeout: timeoutMs, env: environment, maxBuffer: maxOutputBytes });
388
+ return { ...result, stdout: bounded(result.stdout), stderr: bounded(result.stderr), truncated: result.stdout.length > maxOutputBytes || result.stderr.length > maxOutputBytes };
389
+ },
390
+ }),
391
+ ];
392
+ }
393
+ export async function createWorkspaceTools(options) {
394
+ const filesystem = await createFilesystemTools(options);
395
+ if (!options.allowedCommands?.length)
396
+ return filesystem;
397
+ return [...filesystem, ...await createDevelopmentTools({
398
+ rootPath: options.rootPath,
399
+ allowedCommands: options.allowedCommands,
400
+ inheritedEnvironment: options.inheritedEnvironment,
401
+ environment: options.environment,
402
+ maxOutputBytes: options.maxOutputBytes,
403
+ timeoutMs: options.timeoutMs,
404
+ })];
405
+ }
406
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/node/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { type AgentTool, type OutputContract } from "../core/index.js";
2
+ export declare function createCalculatorTool(): AgentTool;
3
+ export declare function createDateTimeTool(options?: {
4
+ now?: () => Date;
5
+ }): AgentTool;
6
+ export declare function createJsonValidationTool(options: {
7
+ contracts: Readonly<Record<string, OutputContract<unknown>>>;
8
+ }): AgentTool;
9
+ export declare function createPureTools(options?: {
10
+ now?: () => Date;
11
+ contracts?: Readonly<Record<string, OutputContract<unknown>>>;
12
+ }): readonly AgentTool[];
13
+ //# sourceMappingURL=pure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pure.d.ts","sourceRoot":"","sources":["../../src/tools/pure.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,SAAS,EAAmC,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAmClI,wBAAgB,oBAAoB,IAAI,SAAS,CAiChD;AAED,wBAAgB,kBAAkB,CAAC,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;CAAO,GAAG,SAAS,CAsChF;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE;IAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;CAAE,GAAG,SAAS,CAyC7H;AAED,wBAAgB,eAAe,CAAC,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;CAAO,GAAG,SAAS,SAAS,EAAE,CAMvJ"}
@@ -0,0 +1,170 @@
1
+ import { defineOutput, defineTool } from "../core/index.js";
2
+ import { standardToolNames } from "./names.js";
3
+ function record(value, label) {
4
+ if (!value || typeof value !== "object" || Array.isArray(value))
5
+ throw new TypeError(`${label} must be an object.`);
6
+ return value;
7
+ }
8
+ function text(value, label) {
9
+ if (typeof value !== "string" || !value.trim())
10
+ throw new TypeError(`${label} must be a non-empty string.`);
11
+ return value;
12
+ }
13
+ const calculatorInput = defineOutput({
14
+ name: "calculator-input",
15
+ jsonSchema: {
16
+ type: "object",
17
+ properties: {
18
+ operation: { enum: ["add", "subtract", "multiply", "divide", "power", "modulo"] },
19
+ values: { type: "array", items: { type: "number" }, minItems: 2, maxItems: 100 },
20
+ },
21
+ required: ["operation", "values"],
22
+ additionalProperties: false,
23
+ },
24
+ parse(value) {
25
+ const input = record(value, "Calculator input");
26
+ const operation = text(input.operation, "operation");
27
+ if (!["add", "subtract", "multiply", "divide", "power", "modulo"].includes(operation))
28
+ throw new TypeError("operation is not supported.");
29
+ if (!Array.isArray(input.values) || input.values.length < 2 || input.values.length > 100 || input.values.some((item) => typeof item !== "number" || !Number.isFinite(item))) {
30
+ throw new TypeError("values must contain between 2 and 100 finite numbers.");
31
+ }
32
+ return { operation: operation, values: input.values };
33
+ },
34
+ });
35
+ export function createCalculatorTool() {
36
+ return defineTool({
37
+ name: standardToolNames.calculate,
38
+ version: "1.0.0",
39
+ description: "Perform bounded arithmetic without evaluating code.",
40
+ input: calculatorInput,
41
+ output: defineOutput({
42
+ name: "calculator-output",
43
+ jsonSchema: { type: "object", properties: { result: { type: "number" } }, required: ["result"], additionalProperties: false },
44
+ parse(value) {
45
+ const output = record(value, "Calculator output");
46
+ if (typeof output.result !== "number" || !Number.isFinite(output.result))
47
+ throw new TypeError("Calculator result must be finite.");
48
+ return { result: output.result };
49
+ },
50
+ }),
51
+ risk: "read",
52
+ sideEffect: "none",
53
+ requiredPermissions: [],
54
+ requiresApproval: false,
55
+ timeoutMs: 1_000,
56
+ execute({ operation, values }) {
57
+ const [first, ...rest] = values;
58
+ let result = first;
59
+ if (operation === "add")
60
+ result = values.reduce((sum, item) => sum + item, 0);
61
+ if (operation === "subtract")
62
+ result = rest.reduce((total, item) => total - item, result);
63
+ if (operation === "multiply")
64
+ result = values.reduce((total, item) => total * item, 1);
65
+ if (operation === "divide")
66
+ result = rest.reduce((total, item) => total / item, result);
67
+ if (operation === "power")
68
+ result = rest.reduce((total, item) => total ** item, result);
69
+ if (operation === "modulo")
70
+ result = rest.reduce((total, item) => total % item, result);
71
+ if (!Number.isFinite(result))
72
+ throw new RangeError("The calculation did not produce a finite result.");
73
+ return { result };
74
+ },
75
+ });
76
+ }
77
+ export function createDateTimeTool(options = {}) {
78
+ return defineTool({
79
+ name: standardToolNames.dateTime,
80
+ version: "1.0.0",
81
+ description: "Read the current date and time in an IANA time zone.",
82
+ input: defineOutput({
83
+ name: "date-time-input",
84
+ jsonSchema: { type: "object", properties: { timeZone: { type: "string" } }, additionalProperties: false },
85
+ parse(value) {
86
+ const input = record(value, "Date/time input");
87
+ if (input.timeZone !== undefined && typeof input.timeZone !== "string")
88
+ throw new TypeError("timeZone must be a string.");
89
+ return { timeZone: input.timeZone ?? "UTC" };
90
+ },
91
+ }),
92
+ output: defineOutput({
93
+ name: "date-time-output",
94
+ jsonSchema: { type: "object" },
95
+ parse(value) {
96
+ const output = record(value, "Date/time output");
97
+ return output;
98
+ },
99
+ }),
100
+ risk: "read",
101
+ sideEffect: "none",
102
+ requiredPermissions: [],
103
+ requiresApproval: false,
104
+ timeoutMs: 1_000,
105
+ execute({ timeZone }) {
106
+ const now = options.now?.() ?? new Date();
107
+ let local;
108
+ try {
109
+ local = new Intl.DateTimeFormat("en-CA", { dateStyle: "full", timeStyle: "long", timeZone }).format(now);
110
+ }
111
+ catch {
112
+ throw new TypeError(`Unknown IANA time zone: ${timeZone}.`);
113
+ }
114
+ return { iso: now.toISOString(), timeZone, local };
115
+ },
116
+ });
117
+ }
118
+ export function createJsonValidationTool(options) {
119
+ const names = Object.keys(options.contracts);
120
+ if (!names.length)
121
+ throw new TypeError("At least one named output contract is required.");
122
+ return defineTool({
123
+ name: standardToolNames.validateJson,
124
+ version: "1.0.0",
125
+ description: "Validate a JSON value with a host-registered output contract.",
126
+ input: defineOutput({
127
+ name: "validate-json-input",
128
+ jsonSchema: {
129
+ type: "object",
130
+ properties: { contract: { type: "string" }, value: {} },
131
+ required: ["contract", "value"],
132
+ additionalProperties: false,
133
+ },
134
+ parse(value) {
135
+ const input = record(value, "JSON validation input");
136
+ return { contract: text(input.contract, "contract"), value: input.value };
137
+ },
138
+ }),
139
+ output: defineOutput({
140
+ name: "validate-json-output",
141
+ jsonSchema: { type: "object" },
142
+ parse(value) { return record(value, "JSON validation output"); },
143
+ }),
144
+ risk: "read",
145
+ sideEffect: "none",
146
+ requiredPermissions: [],
147
+ requiresApproval: false,
148
+ timeoutMs: 1_000,
149
+ execute({ contract, value }) {
150
+ const selected = options.contracts[contract];
151
+ if (!selected)
152
+ return { valid: false, error: `Unknown contract: ${contract}.` };
153
+ try {
154
+ selected.parse(value);
155
+ return { valid: true, error: "" };
156
+ }
157
+ catch (error) {
158
+ return { valid: false, error: error instanceof Error ? error.message : "Validation failed." };
159
+ }
160
+ },
161
+ });
162
+ }
163
+ export function createPureTools(options = {}) {
164
+ return [
165
+ createCalculatorTool(),
166
+ createDateTimeTool({ now: options.now }),
167
+ ...(options.contracts && Object.keys(options.contracts).length ? [createJsonValidationTool({ contracts: options.contracts })] : []),
168
+ ];
169
+ }
170
+ //# sourceMappingURL=pure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pure.js","sourceRoot":"","sources":["../../src/tools/pure.ts"],"names":[],"mappings":"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"}