@felan-ai/agent-core 0.1.0-alpha.3 → 0.2.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.
Files changed (43) hide show
  1. package/NOTICE +1 -5
  2. package/README.md +32 -12
  3. package/dist/capabilities.d.ts +18 -0
  4. package/dist/capabilities.d.ts.map +1 -0
  5. package/dist/capabilities.js +63 -0
  6. package/dist/capabilities.js.map +1 -0
  7. package/dist/extensions.d.ts +5 -2
  8. package/dist/extensions.d.ts.map +1 -1
  9. package/dist/extensions.js +35 -7
  10. package/dist/extensions.js.map +1 -1
  11. package/dist/index.d.ts +4 -2
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +2 -1
  14. package/dist/index.js.map +1 -1
  15. package/dist/resource-loader.d.ts +1 -1
  16. package/dist/resource-loader.d.ts.map +1 -1
  17. package/dist/resource-loader.js +11 -5
  18. package/dist/resource-loader.js.map +1 -1
  19. package/dist/session.d.ts +2 -25
  20. package/dist/session.d.ts.map +1 -1
  21. package/dist/session.js +9 -9
  22. package/dist/session.js.map +1 -1
  23. package/dist/system-prompt.d.ts +2 -0
  24. package/dist/system-prompt.d.ts.map +1 -0
  25. package/dist/system-prompt.js +43 -0
  26. package/dist/system-prompt.js.map +1 -0
  27. package/package.json +3 -8
  28. package/dist/child-session-tool.d.ts +0 -14
  29. package/dist/child-session-tool.d.ts.map +0 -1
  30. package/dist/child-session-tool.js +0 -49
  31. package/dist/child-session-tool.js.map +0 -1
  32. package/dist/runtime-conformance.d.ts +0 -29
  33. package/dist/runtime-conformance.d.ts.map +0 -1
  34. package/dist/runtime-conformance.js +0 -172
  35. package/dist/runtime-conformance.js.map +0 -1
  36. package/dist/runtime-test-kit.d.ts +0 -5
  37. package/dist/runtime-test-kit.d.ts.map +0 -1
  38. package/dist/runtime-test-kit.js +0 -3
  39. package/dist/runtime-test-kit.js.map +0 -1
  40. package/dist/test-agent-runtime.d.ts +0 -41
  41. package/dist/test-agent-runtime.d.ts.map +0 -1
  42. package/dist/test-agent-runtime.js +0 -203
  43. package/dist/test-agent-runtime.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@felan-ai/agent-core",
3
- "version": "0.1.0-alpha.3",
3
+ "version": "0.2.0",
4
4
  "description": "Portable Felan agent contracts and composition",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -22,22 +22,17 @@
22
22
  ".": {
23
23
  "types": "./dist/index.d.ts",
24
24
  "import": "./dist/index.js"
25
- },
26
- "./runtime-test-kit": {
27
- "types": "./dist/runtime-test-kit.d.ts",
28
- "import": "./dist/runtime-test-kit.js"
29
25
  }
30
26
  },
31
27
  "dependencies": {
32
- "@earendil-works/pi-coding-agent": "0.82.1",
33
- "typebox": "1.1.38"
28
+ "@earendil-works/pi-coding-agent": "0.83.0"
34
29
  },
35
30
  "publishConfig": {
36
31
  "access": "public",
37
32
  "provenance": true
38
33
  },
39
34
  "scripts": {
40
- "build": "tsc -p tsconfig.build.json",
35
+ "build": "rm -rf dist && tsc -p tsconfig.build.json",
41
36
  "type-check": "tsc -p tsconfig.json --noEmit",
42
37
  "test": "vitest run"
43
38
  }
@@ -1,14 +0,0 @@
1
- import { Type } from 'typebox';
2
- import type { ToolDefinition } from '@earendil-works/pi-coding-agent';
3
- import type { AgentChildSessionResult, AgentSessionHost } from './session.js';
4
- declare const childSessionParameters: Type.TObject<{
5
- personaId: Type.TString;
6
- prompt: Type.TString;
7
- block: Type.TOptional<Type.TBoolean>;
8
- model: Type.TOptional<Type.TString>;
9
- timeoutMinutes: Type.TOptional<Type.TInteger>;
10
- metadata: Type.TOptional<Type.TRecord<"^.*$", Type.TUnknown>>;
11
- }>;
12
- export declare function createChildSessionTool(host: AgentSessionHost): ToolDefinition<typeof childSessionParameters, AgentChildSessionResult>;
13
- export {};
14
- //# sourceMappingURL=child-session-tool.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"child-session-tool.d.ts","sourceRoot":"","sources":["../src/child-session-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAE9E,QAAA,MAAM,sBAAsB;;;;;;;EAO1B,CAAC;AAEH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,gBAAgB,GACrB,cAAc,CAAC,OAAO,sBAAsB,EAAE,uBAAuB,CAAC,CAsCxE"}
@@ -1,49 +0,0 @@
1
- import { Type } from 'typebox';
2
- const childSessionParameters = Type.Object({
3
- personaId: Type.String({ description: 'Persona or role for the child agent' }),
4
- prompt: Type.String({ description: 'Task for the child agent' }),
5
- block: Type.Optional(Type.Boolean({ description: 'Wait for the child result', default: true })),
6
- model: Type.Optional(Type.String({ description: 'Optional provider/model override' })),
7
- timeoutMinutes: Type.Optional(Type.Integer({ minimum: 1 })),
8
- metadata: Type.Optional(Type.Record(Type.String(), Type.Unknown())),
9
- });
10
- export function createChildSessionTool(host) {
11
- return {
12
- name: 'spawn_agent',
13
- label: 'Spawn Agent',
14
- description: 'Spawn a portable child agent through the application host and optionally wait for its result.',
15
- promptSnippet: 'Delegate an isolated task to a child agent',
16
- promptGuidelines: [
17
- 'Use spawn_agent when an isolated child agent can handle a self-contained task in parallel or with a separate context.',
18
- ],
19
- parameters: childSessionParameters,
20
- async execute(_toolCallId, params, signal, _onUpdate, context) {
21
- if (signal?.aborted)
22
- throw new Error('Child session spawn aborted');
23
- const sessionId = context.sessionManager.getSessionId();
24
- const model = params.model
25
- ?? (context.model ? `${context.model.provider}/${context.model.id}` : undefined);
26
- const result = await host.createChildSession({
27
- rootSessionId: sessionId,
28
- parentSessionId: sessionId,
29
- personaId: params.personaId,
30
- prompt: params.prompt,
31
- block: params.block ?? true,
32
- ...(model === undefined ? {} : { model }),
33
- ...(params.timeoutMinutes === undefined ? {} : { timeoutMinutes: params.timeoutMinutes }),
34
- ...(params.metadata === undefined ? {} : { metadata: params.metadata }),
35
- });
36
- if (!result.ok) {
37
- throw new Error(result.error ?? result.message ?? 'Child session failed');
38
- }
39
- const text = result.result
40
- ?? result.message
41
- ?? `Child session ${result.sessionId} is ${result.status}`;
42
- return {
43
- content: [{ type: 'text', text }],
44
- details: result,
45
- };
46
- },
47
- };
48
- }
49
- //# sourceMappingURL=child-session-tool.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"child-session-tool.js","sourceRoot":"","sources":["../src/child-session-tool.ts"],"names":[],"mappings":"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"}
@@ -1,29 +0,0 @@
1
- import type { AgentRuntime } from './runtime.js';
2
- export interface RuntimeCommandFixture {
3
- readonly command: string;
4
- readonly args: readonly string[];
5
- readonly stdout?: string;
6
- readonly stderr?: string;
7
- readonly code?: number;
8
- }
9
- export interface RuntimeConformanceFixtures {
10
- readonly argv: RuntimeCommandFixture;
11
- readonly failure: RuntimeCommandFixture;
12
- readonly longRunning: RuntimeCommandFixture;
13
- readonly cwd: RuntimeCommandFixture;
14
- readonly binary: Uint8Array;
15
- }
16
- export interface RuntimeConformanceHarness {
17
- createRuntime(): AgentRuntime | Promise<AgentRuntime>;
18
- disposeRuntime?(runtime: AgentRuntime): void | Promise<void>;
19
- createSymlinkEscape?(runtime: AgentRuntime, linkPath: string): void | Promise<void>;
20
- }
21
- export interface RuntimeConformanceCase {
22
- readonly name: string;
23
- run(runtime: AgentRuntime, harness: RuntimeConformanceHarness): Promise<void>;
24
- }
25
- export declare const testRuntimeConformanceFixtures: RuntimeConformanceFixtures;
26
- export declare function createNodeRuntimeConformanceFixtures(command?: string): RuntimeConformanceFixtures;
27
- export declare function createRuntimeConformanceCases(fixtures: RuntimeConformanceFixtures): readonly RuntimeConformanceCase[];
28
- export declare function runRuntimeConformance(harness: RuntimeConformanceHarness, fixtures: RuntimeConformanceFixtures): Promise<void>;
29
- //# sourceMappingURL=runtime-conformance.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtime-conformance.d.ts","sourceRoot":"","sources":["../src/runtime-conformance.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAc,MAAM,cAAc,CAAC;AAE7D,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,qBAAqB,CAAC;IAC5C,QAAQ,CAAC,GAAG,EAAE,qBAAqB,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;CAC7B;AAED,MAAM,WAAW,yBAAyB;IACxC,aAAa,IAAI,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACtD,cAAc,CAAC,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,mBAAmB,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrF;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/E;AAID,eAAO,MAAM,8BAA8B,EAAE,0BAqB5C,CAAC;AAEF,wBAAgB,oCAAoC,CAAC,OAAO,SAAS,GAAG,0BAA0B,CAuBjG;AAED,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,0BAA0B,GACnC,SAAS,sBAAsB,EAAE,CAqFnC;AAED,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,yBAAyB,EAClC,QAAQ,EAAE,0BAA0B,GACnC,OAAO,CAAC,IAAI,CAAC,CAWf"}
@@ -1,172 +0,0 @@
1
- import { dirname, resolve } from 'node:path';
2
- const literalArguments = ['plain', 'two words', '"quoted"', "'single'", '$HOME', 'semi;colon', '', '--flag=value'];
3
- export const testRuntimeConformanceFixtures = {
4
- argv: {
5
- command: 'fixture:argv',
6
- args: literalArguments,
7
- stdout: JSON.stringify(literalArguments),
8
- },
9
- failure: {
10
- command: 'fixture:failure',
11
- args: [],
12
- stderr: 'expected failure',
13
- code: 17,
14
- },
15
- longRunning: {
16
- command: 'fixture:wait',
17
- args: [],
18
- },
19
- cwd: {
20
- command: 'fixture:cwd',
21
- args: [],
22
- },
23
- binary: new Uint8Array([0, 255, 1, 128, 10, 13, 239, 191, 189]),
24
- };
25
- export function createNodeRuntimeConformanceFixtures(command = 'node') {
26
- return {
27
- argv: {
28
- command,
29
- args: ['-e', 'process.stdout.write(JSON.stringify(process.argv.slice(1)))', '--', ...literalArguments],
30
- stdout: JSON.stringify(literalArguments),
31
- },
32
- failure: {
33
- command,
34
- args: ['-e', "process.stderr.write('expected failure'); process.exit(17)"],
35
- stderr: 'expected failure',
36
- code: 17,
37
- },
38
- longRunning: {
39
- command,
40
- args: ['-e', 'setInterval(() => {}, 1000)'],
41
- },
42
- cwd: {
43
- command,
44
- args: ['-e', 'process.stdout.write(process.cwd())'],
45
- },
46
- binary: testRuntimeConformanceFixtures.binary.slice(),
47
- };
48
- }
49
- export function createRuntimeConformanceCases(fixtures) {
50
- return [
51
- {
52
- name: 'keeps cwd immutable and contains file paths',
53
- async run(runtime) {
54
- const originalCwd = runtime.cwd;
55
- Reflect.set(runtime, 'cwd', resolve(runtime.cwd, 'other'));
56
- equal(runtime.cwd, originalCwd, 'cwd changed');
57
- await runtime.mkdir('nested', { recursive: true });
58
- await runtime.writeFile('nested/relative.bin', fixtures.binary);
59
- bytesEqual(await runtime.readFile(resolve(runtime.cwd, 'nested/relative.bin')), fixtures.binary);
60
- await rejects(() => runtime.readFile('../outside'));
61
- await rejects(() => runtime.writeFile(`${runtime.cwd}\0bad`, fixtures.binary));
62
- await rejects(() => runtime.remove(runtime.cwd, { recursive: true }));
63
- },
64
- },
65
- {
66
- name: 'rejects escaping exec cwd before execution',
67
- async run(runtime) {
68
- await rejects(() => runtime.exec(fixtures.cwd.command, fixtures.cwd.args, {
69
- cwd: resolve(runtime.cwd, '..'),
70
- }));
71
- const childCwd = resolve(runtime.cwd, 'child');
72
- await runtime.mkdir(childCwd, { recursive: true });
73
- const result = await runtime.exec(fixtures.cwd.command, fixtures.cwd.args, { cwd: childCwd });
74
- equal(result.stdout, childCwd, 'exec cwd was not contained or normalized');
75
- },
76
- },
77
- {
78
- name: 'rejects symlink-resolved escapes when supported',
79
- async run(runtime, harness) {
80
- if (!harness.createSymlinkEscape)
81
- return;
82
- const linkPath = resolve(runtime.cwd, 'escape-link');
83
- await harness.createSymlinkEscape(runtime, linkPath);
84
- await rejects(() => runtime.readFile(resolve(linkPath, 'secret')));
85
- },
86
- },
87
- {
88
- name: 'preserves literal argv boundaries',
89
- async run(runtime) {
90
- const result = await runtime.exec(fixtures.argv.command, fixtures.argv.args);
91
- equal(result.stdout, fixtures.argv.stdout ?? '', 'argv output changed');
92
- equal(result.code, 0, 'argv command failed');
93
- equal(result.killed, false, 'argv command was killed');
94
- },
95
- },
96
- {
97
- name: 'returns nonzero execution results',
98
- async run(runtime) {
99
- const result = await runtime.exec(fixtures.failure.command, fixtures.failure.args);
100
- equal(result.code, fixtures.failure.code ?? 1, 'nonzero code changed');
101
- equal(result.stderr, fixtures.failure.stderr ?? '', 'stderr changed');
102
- equal(result.killed, false, 'failure command was killed');
103
- },
104
- },
105
- {
106
- name: 'round-trips binary file content',
107
- async run(runtime) {
108
- await runtime.mkdir(dirname('binary/payload.bin'), { recursive: true });
109
- await runtime.writeFile('binary/payload.bin', fixtures.binary);
110
- bytesEqual(await runtime.readFile('binary/payload.bin'), fixtures.binary);
111
- },
112
- },
113
- {
114
- name: 'kills execution on timeout',
115
- async run(runtime) {
116
- const result = await runtime.exec(fixtures.longRunning.command, fixtures.longRunning.args, { timeout: 10 });
117
- killed(result, 'timeout');
118
- },
119
- },
120
- {
121
- name: 'kills execution on AbortSignal cancellation',
122
- async run(runtime) {
123
- const controller = new AbortController();
124
- const execution = runtime.exec(fixtures.longRunning.command, fixtures.longRunning.args, {
125
- signal: controller.signal,
126
- });
127
- controller.abort();
128
- killed(await execution, 'AbortSignal');
129
- },
130
- },
131
- ];
132
- }
133
- export async function runRuntimeConformance(harness, fixtures) {
134
- for (const testCase of createRuntimeConformanceCases(fixtures)) {
135
- const runtime = await harness.createRuntime();
136
- try {
137
- await testCase.run(runtime, harness);
138
- }
139
- catch (error) {
140
- throw new Error(`Runtime conformance failed: ${testCase.name}`, { cause: error });
141
- }
142
- finally {
143
- await harness.disposeRuntime?.(runtime);
144
- }
145
- }
146
- }
147
- function equal(actual, expected, message) {
148
- if (actual !== expected) {
149
- throw new Error(`${message}: expected ${String(expected)}, received ${String(actual)}`);
150
- }
151
- }
152
- function bytesEqual(actual, expected) {
153
- if (actual.length !== expected.length || actual.some((value, index) => value !== expected[index])) {
154
- throw new Error('Binary content changed');
155
- }
156
- }
157
- async function rejects(operation) {
158
- try {
159
- await operation();
160
- }
161
- catch {
162
- return;
163
- }
164
- throw new Error('Expected operation to reject');
165
- }
166
- function killed(result, source) {
167
- equal(result.killed, true, `${source} did not kill execution`);
168
- if (result.code === 0) {
169
- throw new Error(`${source} returned a successful exit code`);
170
- }
171
- }
172
- //# sourceMappingURL=runtime-conformance.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtime-conformance.js","sourceRoot":"","sources":["../src/runtime-conformance.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- export { createNodeRuntimeConformanceFixtures, createRuntimeConformanceCases, runRuntimeConformance, testRuntimeConformanceFixtures, } from './runtime-conformance.js';
2
- export type { RuntimeCommandFixture, RuntimeConformanceCase, RuntimeConformanceFixtures, RuntimeConformanceHarness, } from './runtime-conformance.js';
3
- export { TestAgentRuntime } from './test-agent-runtime.js';
4
- export type { TestAgentRuntimeOptions, TestExecCall, TestShellCall, TestShellOptions, } from './test-agent-runtime.js';
5
- //# sourceMappingURL=runtime-test-kit.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtime-test-kit.d.ts","sourceRoot":"","sources":["../src/runtime-test-kit.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oCAAoC,EACpC,6BAA6B,EAC7B,qBAAqB,EACrB,8BAA8B,GAC/B,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,YAAY,EACV,uBAAuB,EACvB,YAAY,EACZ,aAAa,EACb,gBAAgB,GACjB,MAAM,yBAAyB,CAAC"}
@@ -1,3 +0,0 @@
1
- export { createNodeRuntimeConformanceFixtures, createRuntimeConformanceCases, runRuntimeConformance, testRuntimeConformanceFixtures, } from './runtime-conformance.js';
2
- export { TestAgentRuntime } from './test-agent-runtime.js';
3
- //# sourceMappingURL=runtime-test-kit.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtime-test-kit.js","sourceRoot":"","sources":["../src/runtime-test-kit.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oCAAoC,EACpC,6BAA6B,EAC7B,qBAAqB,EACrB,8BAA8B,GAC/B,MAAM,0BAA0B,CAAC;AAOlC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -1,41 +0,0 @@
1
- import type { AgentRuntime, AgentRuntimeKind, ExecOptions, ExecResult } from './runtime.js';
2
- export type TestShellOptions = ExecOptions & {
3
- env?: Readonly<Record<string, string>>;
4
- };
5
- export interface TestExecCall {
6
- readonly command: string;
7
- readonly args: readonly string[];
8
- readonly options?: ExecOptions;
9
- }
10
- export interface TestShellCall {
11
- readonly command: string;
12
- readonly options?: TestShellOptions;
13
- }
14
- export interface TestAgentRuntimeOptions {
15
- readonly kind?: AgentRuntimeKind;
16
- readonly exec?: (call: TestExecCall) => ExecResult | Promise<ExecResult>;
17
- readonly shell?: (call: TestShellCall) => ExecResult | Promise<ExecResult>;
18
- }
19
- export declare class TestAgentRuntime implements AgentRuntime {
20
- #private;
21
- readonly execCalls: TestExecCall[];
22
- readonly shellCalls: TestShellCall[];
23
- constructor(cwd?: string, options?: TestAgentRuntimeOptions);
24
- get cwd(): string;
25
- get kind(): AgentRuntimeKind;
26
- exec(command: string, args: readonly string[], options?: ExecOptions): Promise<ExecResult>;
27
- shell(command: string, options?: TestShellOptions): Promise<ExecResult>;
28
- readFile(path: string): Promise<Uint8Array>;
29
- writeFile(path: string, content: Uint8Array): Promise<void>;
30
- listFiles(path: string, options?: {
31
- recursive?: boolean;
32
- }): Promise<string[]>;
33
- mkdir(path: string, options?: {
34
- recursive?: boolean;
35
- }): Promise<void>;
36
- remove(path: string, options?: {
37
- recursive?: boolean;
38
- }): Promise<void>;
39
- addSymlink(path: string, target: string): void;
40
- }
41
- //# sourceMappingURL=test-agent-runtime.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-agent-runtime.d.ts","sourceRoot":"","sources":["../src/test-agent-runtime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE5F,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG;IAC3C,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACxC,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACzE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAC5E;AASD,qBAAa,gBAAiB,YAAW,YAAY;;IASnD,QAAQ,CAAC,SAAS,EAAE,YAAY,EAAE,CAAM;IACxC,QAAQ,CAAC,UAAU,EAAE,aAAa,EAAE,CAAM;gBAE9B,GAAG,SAAe,EAAE,OAAO,GAAE,uBAA4B;IAQrE,IAAI,GAAG,IAAI,MAAM,CAEhB;IAED,IAAI,IAAI,IAAI,gBAAgB,CAE3B;IAEK,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAa1F,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IAWvE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAS3C,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ3D,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAc7E,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBrE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB5E,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;CA+F/C"}
@@ -1,203 +0,0 @@
1
- import { dirname, isAbsolute, relative, resolve, sep } from 'node:path';
2
- const successResult = () => ({
3
- stdout: '',
4
- stderr: '',
5
- code: 0,
6
- killed: false,
7
- });
8
- export class TestAgentRuntime {
9
- #cwd;
10
- #kind;
11
- #execHandler;
12
- #shellHandler;
13
- #files = new Map();
14
- #directories = new Set();
15
- #symlinks = new Map();
16
- execCalls = [];
17
- shellCalls = [];
18
- constructor(cwd = '/workspace', options = {}) {
19
- this.#cwd = resolve(cwd);
20
- this.#kind = options.kind ?? 'host';
21
- this.#execHandler = options.exec ?? successResult;
22
- this.#shellHandler = options.shell ?? successResult;
23
- this.#directories.add(this.#cwd);
24
- }
25
- get cwd() {
26
- return this.#cwd;
27
- }
28
- get kind() {
29
- return this.#kind;
30
- }
31
- async exec(command, args, options) {
32
- const normalizedOptions = this.#normalizeExecOptions(options);
33
- if (normalizedOptions?.signal?.aborted) {
34
- return this.#killedResult();
35
- }
36
- const call = normalizedOptions
37
- ? { command, args: [...args], options: normalizedOptions }
38
- : { command, args: [...args] };
39
- this.execCalls.push(call);
40
- return this.#run(() => this.#execHandler(call), normalizedOptions);
41
- }
42
- async shell(command, options) {
43
- const normalizedOptions = this.#normalizeShellOptions(options);
44
- if (normalizedOptions?.signal?.aborted) {
45
- return this.#killedResult();
46
- }
47
- const call = normalizedOptions ? { command, options: normalizedOptions } : { command };
48
- this.shellCalls.push(call);
49
- return this.#run(() => this.#shellHandler(call), normalizedOptions);
50
- }
51
- async readFile(path) {
52
- const resolvedPath = this.#resolvePath(path);
53
- const content = this.#files.get(resolvedPath);
54
- if (!content) {
55
- throw new Error(`File does not exist: ${path}`);
56
- }
57
- return content.slice();
58
- }
59
- async writeFile(path, content) {
60
- const resolvedPath = this.#resolvePath(path, false);
61
- if (!this.#directories.has(dirname(resolvedPath))) {
62
- throw new Error(`Parent directory does not exist: ${path}`);
63
- }
64
- this.#files.set(resolvedPath, content.slice());
65
- }
66
- async listFiles(path, options) {
67
- const resolvedPath = this.#resolvePath(path);
68
- if (!this.#directories.has(resolvedPath)) {
69
- throw new Error(`Directory does not exist: ${path}`);
70
- }
71
- const prefix = `${resolvedPath}${sep}`;
72
- return [...this.#files.keys()]
73
- .filter((filePath) => filePath.startsWith(prefix))
74
- .map((filePath) => relative(resolvedPath, filePath))
75
- .filter((filePath) => options?.recursive || !filePath.includes(sep))
76
- .sort();
77
- }
78
- async mkdir(path, options) {
79
- const resolvedPath = this.#resolvePath(path);
80
- if (options?.recursive) {
81
- let current = resolvedPath;
82
- const pending = [];
83
- while (current !== this.#cwd && !this.#directories.has(current)) {
84
- pending.push(current);
85
- current = dirname(current);
86
- }
87
- for (const directory of pending.reverse()) {
88
- this.#directories.add(directory);
89
- }
90
- return;
91
- }
92
- if (!this.#directories.has(dirname(resolvedPath))) {
93
- throw new Error(`Parent directory does not exist: ${path}`);
94
- }
95
- this.#directories.add(resolvedPath);
96
- }
97
- async remove(path, options) {
98
- const resolvedPath = this.#resolvePath(path, false);
99
- const prefix = `${resolvedPath}${sep}`;
100
- const descendants = [...this.#files.keys(), ...this.#directories, ...this.#symlinks.keys()]
101
- .filter((entry) => entry.startsWith(prefix));
102
- if (descendants.length > 0 && !options?.recursive) {
103
- throw new Error(`Directory is not empty: ${path}`);
104
- }
105
- this.#files.delete(resolvedPath);
106
- this.#directories.delete(resolvedPath);
107
- this.#symlinks.delete(resolvedPath);
108
- if (options?.recursive) {
109
- for (const entry of descendants) {
110
- this.#files.delete(entry);
111
- this.#directories.delete(entry);
112
- this.#symlinks.delete(entry);
113
- }
114
- }
115
- }
116
- addSymlink(path, target) {
117
- const linkPath = this.#resolvePath(path, false, false);
118
- const targetPath = isAbsolute(target) ? resolve(target) : resolve(dirname(linkPath), target);
119
- this.#symlinks.set(linkPath, targetPath);
120
- }
121
- #normalizeExecOptions(options) {
122
- if (!options) {
123
- return undefined;
124
- }
125
- const normalized = {};
126
- if (options.cwd !== undefined)
127
- normalized.cwd = this.#resolvePath(options.cwd);
128
- if (options.signal !== undefined)
129
- normalized.signal = options.signal;
130
- if (options.timeout !== undefined)
131
- normalized.timeout = options.timeout;
132
- return normalized;
133
- }
134
- #normalizeShellOptions(options) {
135
- const normalized = this.#normalizeExecOptions(options);
136
- if (!options?.env) {
137
- return normalized;
138
- }
139
- return { ...normalized, env: { ...options.env } };
140
- }
141
- async #run(handler, options) {
142
- if ((!options?.timeout || options.timeout <= 0) && !options?.signal) {
143
- return handler();
144
- }
145
- let timeout;
146
- let abortListener;
147
- const cancellation = new Promise((resolveCancellation) => {
148
- if (options?.timeout && options.timeout > 0) {
149
- timeout = setTimeout(() => resolveCancellation(this.#killedResult()), options.timeout);
150
- }
151
- if (options?.signal) {
152
- abortListener = () => resolveCancellation(this.#killedResult());
153
- options.signal.addEventListener('abort', abortListener, { once: true });
154
- }
155
- });
156
- try {
157
- return await Promise.race([handler(), cancellation]);
158
- }
159
- finally {
160
- if (timeout)
161
- clearTimeout(timeout);
162
- if (abortListener && options?.signal) {
163
- options.signal.removeEventListener('abort', abortListener);
164
- }
165
- }
166
- }
167
- #killedResult() {
168
- return { stdout: '', stderr: '', code: 143, killed: true };
169
- }
170
- #resolvePath(path, allowRoot = true, followSymlinks = true) {
171
- if (path.includes('\0')) {
172
- throw new Error('Paths cannot contain NUL bytes');
173
- }
174
- let resolvedPath = isAbsolute(path) ? resolve(path) : resolve(this.#cwd, path);
175
- this.#assertContained(resolvedPath, allowRoot);
176
- if (followSymlinks) {
177
- const relativePath = relative(this.#cwd, resolvedPath);
178
- const segments = relativePath === '' ? [] : relativePath.split(sep);
179
- let current = this.#cwd;
180
- for (let index = 0; index < segments.length; index += 1) {
181
- current = resolve(current, segments[index]);
182
- const target = this.#symlinks.get(current);
183
- if (target) {
184
- resolvedPath = resolve(target, ...segments.slice(index + 1));
185
- this.#assertContained(resolvedPath, allowRoot);
186
- break;
187
- }
188
- }
189
- }
190
- return resolvedPath;
191
- }
192
- #assertContained(path, allowRoot) {
193
- const relativePath = relative(this.#cwd, path);
194
- const contained = relativePath === '' || (!relativePath.startsWith(`..${sep}`) && relativePath !== '..' && !isAbsolute(relativePath));
195
- if (!contained) {
196
- throw new Error(`Path escapes runtime cwd: ${path}`);
197
- }
198
- if (!allowRoot && relativePath === '') {
199
- throw new Error('The runtime cwd cannot be modified or removed');
200
- }
201
- }
202
- }
203
- //# sourceMappingURL=test-agent-runtime.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-agent-runtime.js","sourceRoot":"","sources":["../src/test-agent-runtime.ts"],"names":[],"mappings":"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"}