@fabric-harness/sdk 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.md +73 -0
- package/dist/agent-definition.d.ts +61 -0
- package/dist/agent-definition.d.ts.map +1 -0
- package/dist/agent-definition.js +52 -0
- package/dist/agent-definition.js.map +1 -0
- package/dist/agent.d.ts +13 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +99 -0
- package/dist/agent.js.map +1 -0
- package/dist/context-budget.d.ts +20 -0
- package/dist/context-budget.d.ts.map +1 -0
- package/dist/context-budget.js +27 -0
- package/dist/context-budget.js.map +1 -0
- package/dist/context.d.ts +3 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +8 -0
- package/dist/context.js.map +1 -0
- package/dist/error.d.ts +25 -0
- package/dist/error.d.ts.map +1 -0
- package/dist/error.js +48 -0
- package/dist/error.js.map +1 -0
- package/dist/filesystem-source.d.ts +69 -0
- package/dist/filesystem-source.d.ts.map +1 -0
- package/dist/filesystem-source.js +109 -0
- package/dist/filesystem-source.js.map +1 -0
- package/dist/history.d.ts +16 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +118 -0
- package/dist/history.js.map +1 -0
- package/dist/index.d.ts +44 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/lite.d.ts +46 -0
- package/dist/lite.d.ts.map +1 -0
- package/dist/lite.js +38 -0
- package/dist/lite.js.map +1 -0
- package/dist/loop.d.ts +41 -0
- package/dist/loop.d.ts.map +1 -0
- package/dist/loop.js +94 -0
- package/dist/loop.js.map +1 -0
- package/dist/mcp-stdio.d.ts +28 -0
- package/dist/mcp-stdio.d.ts.map +1 -0
- package/dist/mcp-stdio.js +102 -0
- package/dist/mcp-stdio.js.map +1 -0
- package/dist/mcp.d.ts +40 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +153 -0
- package/dist/mcp.js.map +1 -0
- package/dist/model.d.ts +204 -0
- package/dist/model.d.ts.map +1 -0
- package/dist/model.js +661 -0
- package/dist/model.js.map +1 -0
- package/dist/otel.d.ts +17 -0
- package/dist/otel.d.ts.map +1 -0
- package/dist/otel.js +25 -0
- package/dist/otel.js.map +1 -0
- package/dist/policy.d.ts +54 -0
- package/dist/policy.d.ts.map +1 -0
- package/dist/policy.js +148 -0
- package/dist/policy.js.map +1 -0
- package/dist/providers.d.ts +37 -0
- package/dist/providers.d.ts.map +1 -0
- package/dist/providers.js +265 -0
- package/dist/providers.js.map +1 -0
- package/dist/redaction.d.ts +11 -0
- package/dist/redaction.d.ts.map +1 -0
- package/dist/redaction.js +41 -0
- package/dist/redaction.js.map +1 -0
- package/dist/result.d.ts +7 -0
- package/dist/result.d.ts.map +1 -0
- package/dist/result.js +105 -0
- package/dist/result.js.map +1 -0
- package/dist/runtime-mode.d.ts +30 -0
- package/dist/runtime-mode.d.ts.map +1 -0
- package/dist/runtime-mode.js +42 -0
- package/dist/runtime-mode.js.map +1 -0
- package/dist/sandbox.d.ts +247 -0
- package/dist/sandbox.d.ts.map +1 -0
- package/dist/sandbox.js +922 -0
- package/dist/sandbox.js.map +1 -0
- package/dist/schema.d.ts +37 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +121 -0
- package/dist/schema.js.map +1 -0
- package/dist/session.d.ts +60 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +762 -0
- package/dist/session.js.map +1 -0
- package/dist/store.d.ts +48 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +348 -0
- package/dist/store.js.map +1 -0
- package/dist/telemetry.d.ts +15 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +51 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/tools.d.ts +131 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +235 -0
- package/dist/tools.js.map +1 -0
- package/dist/types.d.ts +343 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +71 -0
package/dist/tools.d.ts
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import type { FileStat, SandboxEnv } from './sandbox.js';
|
|
2
|
+
import type { JsonObject, ShellResult } from './types.js';
|
|
3
|
+
export interface ToolContext {
|
|
4
|
+
sandbox: SandboxEnv;
|
|
5
|
+
}
|
|
6
|
+
export interface ToolCall<TInput = unknown> {
|
|
7
|
+
tool: string;
|
|
8
|
+
input: TInput;
|
|
9
|
+
id?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface ToolCallResult<TOutput = unknown> {
|
|
12
|
+
tool: string;
|
|
13
|
+
input: unknown;
|
|
14
|
+
output?: TOutput;
|
|
15
|
+
error?: string;
|
|
16
|
+
id?: string;
|
|
17
|
+
}
|
|
18
|
+
export type ToolEffect = 'read' | 'write' | 'execute' | 'none';
|
|
19
|
+
export interface ToolDef<TInput = unknown, TOutput = unknown> {
|
|
20
|
+
name: string;
|
|
21
|
+
description?: string;
|
|
22
|
+
inputSchema?: unknown;
|
|
23
|
+
metadata?: JsonObject & {
|
|
24
|
+
effect?: ToolEffect;
|
|
25
|
+
};
|
|
26
|
+
execute?(input: TInput, context?: ToolContext): Promise<TOutput> | TOutput;
|
|
27
|
+
}
|
|
28
|
+
export interface SecretRef {
|
|
29
|
+
kind: 'secret';
|
|
30
|
+
name: string;
|
|
31
|
+
}
|
|
32
|
+
export type CommandEnvValue = string | SecretRef | undefined;
|
|
33
|
+
export interface Command<TInput = CommandToolInput> {
|
|
34
|
+
name: string;
|
|
35
|
+
description?: string;
|
|
36
|
+
executable?: string;
|
|
37
|
+
args?: string[];
|
|
38
|
+
argsSchema?: unknown;
|
|
39
|
+
buildArgs?: (input: TInput) => string[];
|
|
40
|
+
env?: Record<string, CommandEnvValue>;
|
|
41
|
+
cwd?: string;
|
|
42
|
+
metadata?: JsonObject;
|
|
43
|
+
}
|
|
44
|
+
export interface CommandToolInput {
|
|
45
|
+
args?: string[];
|
|
46
|
+
cwd?: string;
|
|
47
|
+
timeout?: number;
|
|
48
|
+
}
|
|
49
|
+
export interface CommandToolOptions {
|
|
50
|
+
resolveSecret?: (ref: SecretRef) => string | undefined | Promise<string | undefined>;
|
|
51
|
+
/** Defaults to fail: command secrets are runtime-only and must not be silently omitted. */
|
|
52
|
+
onMissingSecret?: 'fail';
|
|
53
|
+
}
|
|
54
|
+
export interface ReadFileInput {
|
|
55
|
+
path: string;
|
|
56
|
+
}
|
|
57
|
+
export interface ReadFileBufferInput {
|
|
58
|
+
path: string;
|
|
59
|
+
}
|
|
60
|
+
export interface WriteFileInput {
|
|
61
|
+
path: string;
|
|
62
|
+
content: string | Uint8Array;
|
|
63
|
+
}
|
|
64
|
+
export interface StatInput {
|
|
65
|
+
path: string;
|
|
66
|
+
}
|
|
67
|
+
export interface ReaddirInput {
|
|
68
|
+
path: string;
|
|
69
|
+
}
|
|
70
|
+
export interface ExistsInput {
|
|
71
|
+
path: string;
|
|
72
|
+
}
|
|
73
|
+
export interface MkdirInput {
|
|
74
|
+
path: string;
|
|
75
|
+
recursive?: boolean;
|
|
76
|
+
}
|
|
77
|
+
export interface RmInput {
|
|
78
|
+
path: string;
|
|
79
|
+
recursive?: boolean;
|
|
80
|
+
force?: boolean;
|
|
81
|
+
}
|
|
82
|
+
export interface EditInput {
|
|
83
|
+
path: string;
|
|
84
|
+
oldText: string;
|
|
85
|
+
newText: string;
|
|
86
|
+
}
|
|
87
|
+
export interface BashInput {
|
|
88
|
+
command: string;
|
|
89
|
+
cwd?: string;
|
|
90
|
+
env?: Record<string, string>;
|
|
91
|
+
timeout?: number;
|
|
92
|
+
}
|
|
93
|
+
export interface GrepInput {
|
|
94
|
+
pattern: string;
|
|
95
|
+
path?: string;
|
|
96
|
+
ignoreCase?: boolean;
|
|
97
|
+
literal?: boolean;
|
|
98
|
+
maxMatches?: number;
|
|
99
|
+
}
|
|
100
|
+
export interface GrepMatch {
|
|
101
|
+
path: string;
|
|
102
|
+
line: number;
|
|
103
|
+
text: string;
|
|
104
|
+
}
|
|
105
|
+
export interface GlobInput {
|
|
106
|
+
pattern: string;
|
|
107
|
+
cwd?: string;
|
|
108
|
+
maxMatches?: number;
|
|
109
|
+
}
|
|
110
|
+
export declare function secret(name: string): SecretRef;
|
|
111
|
+
export declare function defineCommand<TInput = CommandToolInput>(name: string, options?: Omit<Command<TInput>, 'name'>): Command<TInput>;
|
|
112
|
+
export declare function defineTool<TInput = unknown, TOutput = unknown>(tool: ToolDef<TInput, TOutput>): ToolDef<TInput, TOutput>;
|
|
113
|
+
export type BuiltinTool = ToolDef<ReadFileInput, string> | ToolDef<ReadFileBufferInput, Uint8Array> | ToolDef<WriteFileInput, void> | ToolDef<EditInput, void> | ToolDef<StatInput, FileStat> | ToolDef<ReaddirInput, string[]> | ToolDef<ExistsInput, boolean> | ToolDef<MkdirInput, void> | ToolDef<RmInput, void> | ToolDef<BashInput, ShellResult> | ToolDef<GrepInput, GrepMatch[]> | ToolDef<GlobInput, string[]>;
|
|
114
|
+
export type BuiltinFileTool = Exclude<BuiltinTool, ToolDef<BashInput, ShellResult> | ToolDef<GrepInput, GrepMatch[]> | ToolDef<GlobInput, string[]>>;
|
|
115
|
+
export declare function createCommandTools(commands: Command[], options?: CommandToolOptions): ToolDef<CommandToolInput, ShellResult>[];
|
|
116
|
+
export declare function createBuiltinTools(sandbox: SandboxEnv): BuiltinTool[];
|
|
117
|
+
export declare function createFileTools(sandbox: SandboxEnv): BuiltinFileTool[];
|
|
118
|
+
export declare function readFileTool(sandbox?: SandboxEnv): ToolDef<ReadFileInput, string>;
|
|
119
|
+
export declare function readFileBufferTool(sandbox?: SandboxEnv): ToolDef<ReadFileBufferInput, Uint8Array>;
|
|
120
|
+
export declare function writeFileTool(sandbox?: SandboxEnv): ToolDef<WriteFileInput, void>;
|
|
121
|
+
export declare function editFileTool(sandbox?: SandboxEnv): ToolDef<EditInput, void>;
|
|
122
|
+
export declare function statTool(sandbox?: SandboxEnv): ToolDef<StatInput, FileStat>;
|
|
123
|
+
export declare function readdirTool(sandbox?: SandboxEnv): ToolDef<ReaddirInput, string[]>;
|
|
124
|
+
export declare function existsTool(sandbox?: SandboxEnv): ToolDef<ExistsInput, boolean>;
|
|
125
|
+
export declare function mkdirTool(sandbox?: SandboxEnv): ToolDef<MkdirInput, void>;
|
|
126
|
+
export declare function rmTool(sandbox?: SandboxEnv): ToolDef<RmInput, void>;
|
|
127
|
+
export declare function bashTool(sandbox?: SandboxEnv): ToolDef<BashInput, ShellResult>;
|
|
128
|
+
export declare function grepTool(sandbox?: SandboxEnv): ToolDef<GrepInput, GrepMatch[]>;
|
|
129
|
+
export declare function globTool(sandbox?: SandboxEnv): ToolDef<GlobInput, string[]>;
|
|
130
|
+
export declare function shellQuote(value: string): string;
|
|
131
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
package/dist/tools.js
ADDED
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
export function secret(name) {
|
|
3
|
+
return { kind: 'secret', name };
|
|
4
|
+
}
|
|
5
|
+
export function defineCommand(name, options = {}) {
|
|
6
|
+
return { name, ...options };
|
|
7
|
+
}
|
|
8
|
+
export function defineTool(tool) {
|
|
9
|
+
return tool;
|
|
10
|
+
}
|
|
11
|
+
function pathInputSchema(description) {
|
|
12
|
+
return { type: 'object', additionalProperties: false, properties: { path: { type: 'string', description } }, required: ['path'] };
|
|
13
|
+
}
|
|
14
|
+
function requireSandbox(sandbox) {
|
|
15
|
+
if (!sandbox)
|
|
16
|
+
throw new Error('A SandboxEnv is required to execute this tool.');
|
|
17
|
+
return sandbox;
|
|
18
|
+
}
|
|
19
|
+
export function createCommandTools(commands, options = {}) {
|
|
20
|
+
return commands.map((command) => defineTool({
|
|
21
|
+
name: command.name,
|
|
22
|
+
description: command.description ?? `Run the scoped ${command.name} command in the session sandbox.`,
|
|
23
|
+
inputSchema: command.argsSchema ?? {
|
|
24
|
+
type: 'object',
|
|
25
|
+
additionalProperties: false,
|
|
26
|
+
properties: {
|
|
27
|
+
args: { type: 'array', items: { type: 'string' }, description: 'Command arguments.' },
|
|
28
|
+
cwd: { type: 'string', description: 'Working directory inside the sandbox.' },
|
|
29
|
+
timeout: { type: 'number', description: 'Timeout in milliseconds.' },
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
metadata: { kind: 'command', effect: 'execute', command: command.name, executable: command.executable ?? command.name, envKeys: Object.keys(command.env ?? {}) },
|
|
33
|
+
async execute(input, context) {
|
|
34
|
+
const env = requireSandbox(context?.sandbox);
|
|
35
|
+
const builtArgs = command.buildArgs ? command.buildArgs(input) : [...(command.args ?? []), ...(input.args ?? [])];
|
|
36
|
+
const executable = command.executable ?? command.name;
|
|
37
|
+
const shellCommand = [executable, ...builtArgs.map(shellQuote)].join(' ');
|
|
38
|
+
const execOptions = {};
|
|
39
|
+
const scopedEnv = await resolveCommandEnv(command.env, options);
|
|
40
|
+
const cwd = input.cwd ?? command.cwd;
|
|
41
|
+
if (cwd !== undefined)
|
|
42
|
+
execOptions.cwd = cwd;
|
|
43
|
+
if (Object.keys(scopedEnv).length > 0)
|
|
44
|
+
execOptions.env = scopedEnv;
|
|
45
|
+
if (input.timeout !== undefined)
|
|
46
|
+
execOptions.timeout = input.timeout;
|
|
47
|
+
return env.exec(shellCommand, execOptions);
|
|
48
|
+
},
|
|
49
|
+
}));
|
|
50
|
+
}
|
|
51
|
+
export function createBuiltinTools(sandbox) {
|
|
52
|
+
return [...createFileTools(sandbox), bashTool(sandbox), grepTool(sandbox), globTool(sandbox)];
|
|
53
|
+
}
|
|
54
|
+
export function createFileTools(sandbox) {
|
|
55
|
+
return [readFileTool(sandbox), readFileBufferTool(sandbox), writeFileTool(sandbox), editFileTool(sandbox), statTool(sandbox), readdirTool(sandbox), existsTool(sandbox), mkdirTool(sandbox), rmTool(sandbox)];
|
|
56
|
+
}
|
|
57
|
+
export function readFileTool(sandbox) {
|
|
58
|
+
return defineTool({ name: 'read', description: 'Read a UTF-8 text file from the session sandbox.', inputSchema: pathInputSchema('File path to read.'), metadata: { effect: 'read' }, async execute(input, context) { return requireSandbox(sandbox ?? context?.sandbox).readFile(input.path); } });
|
|
59
|
+
}
|
|
60
|
+
export function readFileBufferTool(sandbox) {
|
|
61
|
+
return defineTool({ name: 'read_buffer', description: 'Read a binary file from the session sandbox.', inputSchema: pathInputSchema('File path to read.'), metadata: { effect: 'read' }, async execute(input, context) { return requireSandbox(sandbox ?? context?.sandbox).readFileBuffer(input.path); } });
|
|
62
|
+
}
|
|
63
|
+
export function writeFileTool(sandbox) {
|
|
64
|
+
return defineTool({ name: 'write', description: 'Write a text or binary file into the session sandbox.', inputSchema: { type: 'object', additionalProperties: false, properties: { path: { type: 'string' }, content: { type: 'string' } }, required: ['path', 'content'] }, metadata: { effect: 'write' }, async execute(input, context) { return requireSandbox(sandbox ?? context?.sandbox).writeFile(input.path, input.content); } });
|
|
65
|
+
}
|
|
66
|
+
export function editFileTool(sandbox) {
|
|
67
|
+
return defineTool({
|
|
68
|
+
name: 'edit',
|
|
69
|
+
description: 'Replace exactly one text block in a sandbox file.',
|
|
70
|
+
inputSchema: { type: 'object', additionalProperties: false, properties: { path: { type: 'string' }, oldText: { type: 'string' }, newText: { type: 'string' } }, required: ['path', 'oldText', 'newText'] },
|
|
71
|
+
metadata: { effect: 'write' },
|
|
72
|
+
async execute(input, context) {
|
|
73
|
+
const env = requireSandbox(sandbox ?? context?.sandbox);
|
|
74
|
+
const original = await env.readFile(input.path);
|
|
75
|
+
const first = original.indexOf(input.oldText);
|
|
76
|
+
if (first === -1)
|
|
77
|
+
throw new Error('oldText was not found in the target file.');
|
|
78
|
+
if (original.indexOf(input.oldText, first + input.oldText.length) !== -1)
|
|
79
|
+
throw new Error('oldText must match exactly one location in the target file.');
|
|
80
|
+
await env.writeFile(input.path, `${original.slice(0, first)}${input.newText}${original.slice(first + input.oldText.length)}`);
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
export function statTool(sandbox) {
|
|
85
|
+
return defineTool({ name: 'stat', description: 'Stat a sandbox path.', inputSchema: pathInputSchema('Path to stat.'), metadata: { effect: 'read' }, async execute(input, context) { return requireSandbox(sandbox ?? context?.sandbox).stat(input.path); } });
|
|
86
|
+
}
|
|
87
|
+
export function readdirTool(sandbox) {
|
|
88
|
+
return defineTool({ name: 'readdir', description: 'List entries in a sandbox directory.', inputSchema: pathInputSchema('Directory path to list.'), metadata: { effect: 'read' }, async execute(input, context) { return requireSandbox(sandbox ?? context?.sandbox).readdir(input.path); } });
|
|
89
|
+
}
|
|
90
|
+
export function existsTool(sandbox) {
|
|
91
|
+
return defineTool({ name: 'exists', description: 'Check whether a sandbox path exists.', inputSchema: pathInputSchema('Path to check.'), metadata: { effect: 'read' }, async execute(input, context) { return requireSandbox(sandbox ?? context?.sandbox).exists(input.path); } });
|
|
92
|
+
}
|
|
93
|
+
export function mkdirTool(sandbox) {
|
|
94
|
+
return defineTool({ name: 'mkdir', description: 'Create a directory in the session sandbox.', inputSchema: { type: 'object', additionalProperties: false, properties: { path: { type: 'string' }, recursive: { type: 'boolean' } }, required: ['path'] }, metadata: { effect: 'write' }, async execute(input, context) { const options = {}; if (input.recursive !== undefined)
|
|
95
|
+
options.recursive = input.recursive; return requireSandbox(sandbox ?? context?.sandbox).mkdir(input.path, options); } });
|
|
96
|
+
}
|
|
97
|
+
export function rmTool(sandbox) {
|
|
98
|
+
return defineTool({ name: 'rm', description: 'Remove a file or directory from the session sandbox.', inputSchema: { type: 'object', additionalProperties: false, properties: { path: { type: 'string' }, recursive: { type: 'boolean' }, force: { type: 'boolean' } }, required: ['path'] }, metadata: { effect: 'write' }, async execute(input, context) { const options = {}; if (input.recursive !== undefined)
|
|
99
|
+
options.recursive = input.recursive; if (input.force !== undefined)
|
|
100
|
+
options.force = input.force; return requireSandbox(sandbox ?? context?.sandbox).rm(input.path, options); } });
|
|
101
|
+
}
|
|
102
|
+
export function bashTool(sandbox) {
|
|
103
|
+
return defineTool({
|
|
104
|
+
name: 'bash',
|
|
105
|
+
description: 'Execute a shell command through the session sandbox.',
|
|
106
|
+
inputSchema: { type: 'object', additionalProperties: false, properties: { command: { type: 'string' }, cwd: { type: 'string' }, env: { type: 'object', additionalProperties: { type: 'string' } }, timeout: { type: 'number' } }, required: ['command'] },
|
|
107
|
+
metadata: { effect: 'execute' },
|
|
108
|
+
async execute(input, context) {
|
|
109
|
+
const options = {};
|
|
110
|
+
if (input.cwd !== undefined)
|
|
111
|
+
options.cwd = input.cwd;
|
|
112
|
+
if (input.env !== undefined)
|
|
113
|
+
options.env = input.env;
|
|
114
|
+
if (input.timeout !== undefined)
|
|
115
|
+
options.timeout = input.timeout;
|
|
116
|
+
return requireSandbox(sandbox ?? context?.sandbox).exec(input.command, options);
|
|
117
|
+
},
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
export function grepTool(sandbox) {
|
|
121
|
+
return defineTool({
|
|
122
|
+
name: 'grep',
|
|
123
|
+
description: 'Search text files in the session sandbox.',
|
|
124
|
+
inputSchema: { type: 'object', additionalProperties: false, properties: { pattern: { type: 'string' }, path: { type: 'string' }, ignoreCase: { type: 'boolean' }, literal: { type: 'boolean' }, maxMatches: { type: 'number' } }, required: ['pattern'] },
|
|
125
|
+
metadata: { effect: 'read' },
|
|
126
|
+
async execute(input, context) {
|
|
127
|
+
const env = requireSandbox(sandbox ?? context?.sandbox);
|
|
128
|
+
const root = input.path ?? '.';
|
|
129
|
+
const files = await listFiles(env, root);
|
|
130
|
+
const flags = input.ignoreCase ? 'i' : '';
|
|
131
|
+
const regex = input.literal ? undefined : new RegExp(input.pattern, flags);
|
|
132
|
+
const needle = input.ignoreCase ? input.pattern.toLowerCase() : input.pattern;
|
|
133
|
+
const matches = [];
|
|
134
|
+
for (const file of files) {
|
|
135
|
+
let text;
|
|
136
|
+
try {
|
|
137
|
+
text = await env.readFile(file);
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
const lines = text.split(/\r?\n/);
|
|
143
|
+
for (let index = 0; index < lines.length; index += 1) {
|
|
144
|
+
const line = lines[index] ?? '';
|
|
145
|
+
const haystack = input.ignoreCase ? line.toLowerCase() : line;
|
|
146
|
+
if (regex ? regex.test(line) : haystack.includes(needle)) {
|
|
147
|
+
matches.push({ path: file, line: index + 1, text: line });
|
|
148
|
+
if (matches.length >= (input.maxMatches ?? 100))
|
|
149
|
+
return matches;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return matches;
|
|
154
|
+
},
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
export function globTool(sandbox) {
|
|
158
|
+
return defineTool({
|
|
159
|
+
name: 'glob',
|
|
160
|
+
description: 'Find files by glob pattern in the session sandbox.',
|
|
161
|
+
inputSchema: { type: 'object', additionalProperties: false, properties: { pattern: { type: 'string' }, cwd: { type: 'string' }, maxMatches: { type: 'number' } }, required: ['pattern'] },
|
|
162
|
+
metadata: { effect: 'read' },
|
|
163
|
+
async execute(input, context) {
|
|
164
|
+
const env = requireSandbox(sandbox ?? context?.sandbox);
|
|
165
|
+
const cwd = input.cwd ?? '.';
|
|
166
|
+
const files = await listFiles(env, cwd);
|
|
167
|
+
const regex = globToRegex(input.pattern);
|
|
168
|
+
return files.filter((file) => regex.test(file)).slice(0, input.maxMatches ?? 1000);
|
|
169
|
+
},
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
async function listFiles(env, dir) {
|
|
173
|
+
const out = [];
|
|
174
|
+
const entries = await env.readdir(dir);
|
|
175
|
+
for (const entry of entries) {
|
|
176
|
+
const child = path.posix.join(dir, entry);
|
|
177
|
+
const stat = await env.stat(child);
|
|
178
|
+
if (stat.type === 'directory')
|
|
179
|
+
out.push(...(await listFiles(env, child)));
|
|
180
|
+
if (stat.type === 'file')
|
|
181
|
+
out.push(child.replace(/^\.\//, ''));
|
|
182
|
+
}
|
|
183
|
+
return out;
|
|
184
|
+
}
|
|
185
|
+
async function resolveCommandEnv(input, options) {
|
|
186
|
+
const output = {};
|
|
187
|
+
for (const [key, value] of Object.entries(input ?? {})) {
|
|
188
|
+
if (typeof value === 'string')
|
|
189
|
+
output[key] = value;
|
|
190
|
+
if (isSecretRef(value)) {
|
|
191
|
+
const resolved = await options.resolveSecret?.(value);
|
|
192
|
+
if (resolved !== undefined) {
|
|
193
|
+
output[key] = resolved;
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
throw new Error(`Missing runtime secret for command environment variable ${key}. Configure resolveSecret or remove the secret reference.`);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return output;
|
|
201
|
+
}
|
|
202
|
+
function isSecretRef(value) {
|
|
203
|
+
return typeof value === 'object' && value !== null && value.kind === 'secret' && typeof value.name === 'string';
|
|
204
|
+
}
|
|
205
|
+
export function shellQuote(value) {
|
|
206
|
+
if (/^[A-Za-z0-9_/:=.,@%+-]+$/.test(value))
|
|
207
|
+
return value;
|
|
208
|
+
return `'${value.replaceAll("'", "'\\''")}'`;
|
|
209
|
+
}
|
|
210
|
+
function globToRegex(pattern) {
|
|
211
|
+
let source = '^';
|
|
212
|
+
for (let index = 0; index < pattern.length; index += 1) {
|
|
213
|
+
const char = pattern[index];
|
|
214
|
+
const next = pattern[index + 1];
|
|
215
|
+
if (char === '*' && next === '*') {
|
|
216
|
+
source += '.*';
|
|
217
|
+
index += 1;
|
|
218
|
+
continue;
|
|
219
|
+
}
|
|
220
|
+
if (char === '*') {
|
|
221
|
+
source += '[^/]*';
|
|
222
|
+
continue;
|
|
223
|
+
}
|
|
224
|
+
if (char === '?') {
|
|
225
|
+
source += '[^/]';
|
|
226
|
+
continue;
|
|
227
|
+
}
|
|
228
|
+
source += escapeRegex(char ?? '');
|
|
229
|
+
}
|
|
230
|
+
return new RegExp(`${source}$`);
|
|
231
|
+
}
|
|
232
|
+
function escapeRegex(value) {
|
|
233
|
+
return value.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&');
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|