@felan-ai/agent-core 0.1.0-alpha.3 → 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/NOTICE CHANGED
@@ -2,10 +2,6 @@
2
2
 
3
3
  Copyright (c) 2026 Felan contributors
4
4
 
5
- This package uses @earendil-works/pi-coding-agent 0.82.1 and its Pi runtime
5
+ This package uses @earendil-works/pi-coding-agent 0.83.0 and its Pi runtime
6
6
  packages from https://github.com/earendil-works/pi, licensed under the MIT
7
7
  License. Copyright (c) 2025 Mario Zechner.
8
-
9
- This package uses TypeBox 1.1.38 from
10
- https://github.com/sinclairzx81/typebox, licensed under the MIT License.
11
- Copyright (c) 2017-2026 Haydn Paterson.
package/README.md CHANGED
@@ -18,20 +18,14 @@ Host mode runs with the current user's filesystem and process permissions. It
18
18
  provides workspace path containment, but no OS isolation or sandbox boundary.
19
19
  Run untrusted workloads in an isolated runtime instead.
20
20
 
21
- The `@felan-ai/agent-core/runtime-test-kit` export provides a framework-neutral
22
- runtime conformance runner, reusable fixtures, and `TestAgentRuntime`.
23
-
24
- The package also composes Pi 0.82.1 sessions with inline-only Felan extensions
21
+ The package also composes Pi 0.83.0 sessions with inline-only Felan extensions
25
22
  and runtime-backed coding tools. `createAgentCoreSession` returns a headless,
26
23
  inactive session, while `createAgentCoreSessionRuntimeFactory` provides the
27
24
  typed seam used with Pi's `createAgentSessionRuntime`. Applications retain
28
25
  ownership of model credentials, settings, session storage, stream wrappers,
29
- child-session creation, and presentation listeners.
30
-
31
- Every composed session includes `spawn_agent`, which maps portable child-agent
32
- requests onto `AgentSessionHost.createChildSession`. Applications own child
33
- execution and can run it locally or delegate it to another runtime without
34
- changing shared agent behavior.
26
+ feature extensions, and presentation listeners. `FelanExtensionAPI` adds only
27
+ the selected `AgentRuntime` to Pi's extension API; feature-specific contracts
28
+ remain in their owning extension packages.
35
29
 
36
30
  Applications may pass an explicit `skills` list into session composition.
37
31
  Agent Core exposes only that list while project, user, and package skill
@@ -1 +1 @@
1
- {"version":3,"file":"extensions.d.ts","sourceRoot":"","sources":["../src/extensions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EAChB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;CAChC;AAED,MAAM,MAAM,cAAc,GAAG,CAC3B,EAAE,EAAE,iBAAiB,KAClB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B,MAAM,MAAM,wBAAwB,GAAG,CACrC,WAAW,EAAE,MAAM,KAChB,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,cAAc,EACzB,OAAO,EAAE,YAAY,GACpB,eAAe,CAKjB;AAED,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,SAAS,MAAM,EAAE,EAC/B,eAAe,EAAE,wBAAwB,EACzC,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,eAAe,EAAE,CAAC,CAmC5B"}
1
+ {"version":3,"file":"extensions.d.ts","sourceRoot":"","sources":["../src/extensions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EAChB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;CAChC;AAED,MAAM,MAAM,cAAc,GAAG,CAC3B,EAAE,EAAE,iBAAiB,KAClB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B,MAAM,MAAM,wBAAwB,GAAG,CACrC,WAAW,EAAE,MAAM,KAChB,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,cAAc,EACzB,OAAO,EAAE,YAAY,GACpB,eAAe,CAKjB;AAED,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,SAAS,MAAM,EAAE,EAC/B,eAAe,EAAE,wBAAwB,EACzC,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,eAAe,EAAE,CAAC,CAuC5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"extensions.js","sourceRoot":"","sources":["../src/extensions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extensions.js","sourceRoot":"","sources":["../src/extensions.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -2,14 +2,13 @@ export type { AgentRuntime, AgentRuntimeKind, ExecOptions, ExecResult, } from '.
2
2
  export { AGENT_CORE_VERSION } from './version.js';
3
3
  export { HostAgentRuntime } from './host-agent-runtime.js';
4
4
  export type { HostShellOptions } from './host-agent-runtime.js';
5
- export { createChildSessionTool } from './child-session-tool.js';
6
5
  export { bindFelanExtension, loadFelanExtensions, } from './extensions.js';
7
6
  export type { ExtensionPackageImporter, FelanExtension, FelanExtensionAPI, } from './extensions.js';
8
7
  export { createAgentCoreResourceLoader } from './resource-loader.js';
9
8
  export type { CreateAgentCoreResourceLoaderOptions } from './resource-loader.js';
10
9
  export { createRuntimeCodingTools } from './tools.js';
11
10
  export { createAgentCoreSession, createAgentCoreSessionRuntime, createAgentCoreSessionRuntimeFactory, } from './session.js';
12
- export type { AgentChildSessionRequest, AgentChildSessionResult, AgentCoreSessionRuntimeFactoryOptions, AgentCoreSessionRuntimeFactoryRequest, AgentCoreSessionRuntimeOptionsFactory, AgentSessionHost, CreateAgentCoreSessionOptions, StreamFunction, } from './session.js';
11
+ export type { AgentCoreSessionRuntimeFactoryOptions, AgentCoreSessionRuntimeFactoryRequest, AgentCoreSessionRuntimeOptionsFactory, CreateAgentCoreSessionOptions, StreamFunction, } from './session.js';
13
12
  export { AgentSession, ModelRuntime, SessionManager, SettingsManager, createAgentSessionRuntime, } from '@earendil-works/pi-coding-agent';
14
13
  export type { AgentSessionEvent, AgentSessionEventListener, AgentSessionRuntimeDiagnostic, AgentSessionServices, CreateAgentSessionOptions, CreateAgentSessionResult, CreateAgentSessionRuntimeFactory, CreateAgentSessionRuntimeResult, Extension, ExtensionAPI, ExtensionContext, ExtensionFactory, InlineExtension, LoadExtensionsResult, ResourceLoader, SessionStartEvent, Skill, ToolDefinition, } from '@earendil-works/pi-coding-agent';
15
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,UAAU,GACX,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EACL,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,wBAAwB,EACxB,cAAc,EACd,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AACrE,YAAY,EAAE,oCAAoC,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,oCAAoC,GACrC,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,wBAAwB,EACxB,uBAAuB,EACvB,qCAAqC,EACrC,qCAAqC,EACrC,qCAAqC,EACrC,gBAAgB,EAChB,6BAA6B,EAC7B,cAAc,GACf,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,eAAe,EACf,yBAAyB,GAC1B,MAAM,iCAAiC,CAAC;AACzC,YAAY,EACV,iBAAiB,EACjB,yBAAyB,EACzB,6BAA6B,EAC7B,oBAAoB,EACpB,yBAAyB,EACzB,wBAAwB,EACxB,gCAAgC,EAChC,+BAA+B,EAC/B,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,KAAK,EACL,cAAc,GACf,MAAM,iCAAiC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,UAAU,GACX,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EACL,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,wBAAwB,EACxB,cAAc,EACd,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AACrE,YAAY,EAAE,oCAAoC,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,oCAAoC,GACrC,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,qCAAqC,EACrC,qCAAqC,EACrC,qCAAqC,EACrC,6BAA6B,EAC7B,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,eAAe,EACf,yBAAyB,GAC1B,MAAM,iCAAiC,CAAC;AACzC,YAAY,EACV,iBAAiB,EACjB,yBAAyB,EACzB,6BAA6B,EAC7B,oBAAoB,EACpB,yBAAyB,EACzB,wBAAwB,EACxB,gCAAgC,EAChC,+BAA+B,EAC/B,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,KAAK,EACL,cAAc,GACf,MAAM,iCAAiC,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,5 @@
1
1
  export { AGENT_CORE_VERSION } from './version.js';
2
2
  export { HostAgentRuntime } from './host-agent-runtime.js';
3
- export { createChildSessionTool } from './child-session-tool.js';
4
3
  export { bindFelanExtension, loadFelanExtensions, } from './extensions.js';
5
4
  export { createAgentCoreResourceLoader } from './resource-loader.js';
6
5
  export { createRuntimeCodingTools } from './tools.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EACL,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAMzB,OAAO,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AAErE,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,oCAAoC,GACrC,MAAM,cAAc,CAAC;AAYtB,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,eAAe,EACf,yBAAyB,GAC1B,MAAM,iCAAiC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EACL,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAMzB,OAAO,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AAErE,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,oCAAoC,GACrC,MAAM,cAAc,CAAC;AAQtB,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,eAAe,EACf,yBAAyB,GAC1B,MAAM,iCAAiC,CAAC"}
package/dist/session.d.ts CHANGED
@@ -2,32 +2,9 @@ import { type AgentSession, type CreateAgentSessionOptions, type CreateAgentSess
2
2
  import { type ExtensionPackageImporter } from './extensions.js';
3
3
  import type { AgentRuntime } from './runtime.js';
4
4
  export type StreamFunction = AgentSession['agent']['streamFunction'];
5
- export interface AgentSessionHost {
6
- wrapStreamFunction?(original: StreamFunction): StreamFunction;
7
- createChildSession(request: AgentChildSessionRequest): Promise<AgentChildSessionResult>;
8
- }
9
- export interface AgentChildSessionRequest {
10
- readonly rootSessionId: string;
11
- readonly parentSessionId: string;
12
- readonly personaId: string;
13
- readonly prompt: string;
14
- readonly block: boolean;
15
- readonly model?: string;
16
- readonly timeoutMinutes?: number;
17
- readonly metadata?: Readonly<Record<string, unknown>>;
18
- }
19
- export interface AgentChildSessionResult {
20
- readonly ok: boolean;
21
- readonly sessionId: string;
22
- readonly status: 'running' | 'queued' | 'completed' | 'failed';
23
- readonly result?: string;
24
- readonly error?: string;
25
- readonly message?: string;
26
- }
27
5
  export interface CreateAgentCoreSessionOptions {
28
- readonly applicationKind: 'cloud' | 'tui';
29
6
  readonly runtime: AgentRuntime;
30
- readonly host: AgentSessionHost;
7
+ readonly wrapStreamFunction?: (original: StreamFunction) => StreamFunction;
31
8
  readonly extensionPackages: readonly string[];
32
9
  readonly importExtension: ExtensionPackageImporter;
33
10
  readonly extensionFlagValues?: ReadonlyMap<string, boolean | string>;
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EAEjB,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,gCAAgC,EACrC,KAAK,+BAA+B,EACpC,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,KAAK,EACV,KAAK,cAAc,EACpB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAuB,KAAK,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAErF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGjD,MAAM,MAAM,cAAc,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,CAAC;AAErE,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,cAAc,CAAC;IAC3E,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C,QAAQ,CAAC,eAAe,EAAE,wBAAwB,CAAC;IACnD,QAAQ,CAAC,mBAAmB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC;IACrE,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,yBAAyB,CAAC,OAAO,CAAC,CAAC;IACpD,QAAQ,CAAC,aAAa,CAAC,EAAE,yBAAyB,CAAC,eAAe,CAAC,CAAC;IACpE,QAAQ,CAAC,YAAY,CAAC,EAAE,yBAAyB,CAAC,cAAc,CAAC,CAAC;IAClE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IAC/C,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IACjD,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,KAAK,EAAE,CAAC;IACnC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACjD;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,wBAAwB,CAAC,CAGnC;AAED,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,+BAA+B,CAAC,CAO1C;AAED,MAAM,MAAM,qCAAqC,GAAG,UAAU,CAAC,gCAAgC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEpG,MAAM,MAAM,qCAAqC,GAAG,IAAI,CACtD,6BAA6B,EAC7B,UAAU,GAAG,gBAAgB,GAAG,mBAAmB,CACpD,CAAC;AAEF,MAAM,MAAM,qCAAqC,GAAG,CAClD,OAAO,EAAE,qCAAqC,KAC3C,qCAAqC,GAAG,OAAO,CAAC,qCAAqC,CAAC,CAAC;AAE5F,wBAAgB,oCAAoC,CAClD,aAAa,EAAE,qCAAqC,GACnD,gCAAgC,CASlC"}
package/dist/session.js CHANGED
@@ -1,6 +1,5 @@
1
1
  import { createAgentSession, } from '@earendil-works/pi-coding-agent';
2
2
  import { loadFelanExtensions } from './extensions.js';
3
- import { createChildSessionTool } from './child-session-tool.js';
4
3
  import { createAgentCoreResourceLoader } from './resource-loader.js';
5
4
  import { createRuntimeCodingTools } from './tools.js';
6
5
  export async function createAgentCoreSession(options) {
@@ -43,7 +42,6 @@ async function composeAgentCoreSession(options) {
43
42
  });
44
43
  const customTools = [
45
44
  ...createRuntimeCodingTools(options.runtime),
46
- createChildSessionTool(options.host),
47
45
  ...(options.customTools ?? []),
48
46
  ];
49
47
  const result = await createAgentSession({
@@ -62,12 +60,14 @@ async function composeAgentCoreSession(options) {
62
60
  ? {}
63
61
  : { sessionStartEvent: options.sessionStartEvent }),
64
62
  });
65
- if (options.host.wrapStreamFunction) {
66
- const wrapped = options.host.wrapStreamFunction(result.session.agent.streamFunction);
67
- if (typeof wrapped !== 'function') {
68
- throw new Error('AgentSessionHost.wrapStreamFunction must return a stream function');
63
+ try {
64
+ if (options.wrapStreamFunction) {
65
+ result.session.agent.streamFunction = options.wrapStreamFunction(result.session.agent.streamFunction);
69
66
  }
70
- result.session.agent.streamFunction = wrapped;
67
+ }
68
+ catch (error) {
69
+ result.session.dispose();
70
+ throw error;
71
71
  }
72
72
  return {
73
73
  result,
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
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.1.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":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAI/B,MAAM,sBAAsB,GAAG,IAAI,CAAC,MAAM,CAAC;IACzC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,qCAAqC,EAAE,CAAC;IAC9E,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,0BAA0B,EAAE,CAAC;IAChE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,2BAA2B,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/F,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,kCAAkC,EAAE,CAAC,CAAC;IACtF,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IAC3D,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;CACpE,CAAC,CAAC;AAEH,MAAM,UAAU,sBAAsB,CACpC,IAAsB;IAEtB,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,+FAA+F;QAC5G,aAAa,EAAE,4CAA4C;QAC3D,gBAAgB,EAAE;YAChB,uHAAuH;SACxH;QACD,UAAU,EAAE,sBAAsB;QAClC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO;YAC3D,IAAI,MAAM,EAAE,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;YACpE,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;YACxD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK;mBACrB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACnF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC;gBAC3C,aAAa,EAAE,SAAS;gBACxB,eAAe,EAAE,SAAS;gBAC1B,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,IAAI;gBAC3B,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;gBACzC,GAAG,CAAC,MAAM,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC;gBACzF,GAAG,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;aACxE,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,IAAI,sBAAsB,CAAC,CAAC;YAC5E,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM;mBACrB,MAAM,CAAC,OAAO;mBACd,iBAAiB,MAAM,CAAC,SAAS,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC;YAC7D,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;gBACjC,OAAO,EAAE,MAAM;aAChB,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -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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"}