@agent-relay/harnesses 10.6.6 → 11.0.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/README.md +71 -4
- package/dist/ai-sdk/adapter-registry.d.ts +47 -0
- package/dist/ai-sdk/adapter-registry.d.ts.map +1 -0
- package/dist/ai-sdk/adapter-registry.js +134 -0
- package/dist/ai-sdk/adapter-registry.js.map +1 -0
- package/dist/ai-sdk/harness-host.d.ts +83 -0
- package/dist/ai-sdk/harness-host.d.ts.map +1 -0
- package/dist/ai-sdk/harness-host.js +573 -0
- package/dist/ai-sdk/harness-host.js.map +1 -0
- package/dist/ai-sdk/index.d.ts +6 -0
- package/dist/ai-sdk/index.d.ts.map +1 -0
- package/dist/ai-sdk/index.js +6 -0
- package/dist/ai-sdk/index.js.map +1 -0
- package/dist/ai-sdk/local-host-sandbox.d.ts +119 -0
- package/dist/ai-sdk/local-host-sandbox.d.ts.map +1 -0
- package/dist/ai-sdk/local-host-sandbox.js +475 -0
- package/dist/ai-sdk/local-host-sandbox.js.map +1 -0
- package/dist/ai-sdk/native-relay-tools.d.ts +10 -0
- package/dist/ai-sdk/native-relay-tools.d.ts.map +1 -0
- package/dist/ai-sdk/native-relay-tools.js +178 -0
- package/dist/ai-sdk/native-relay-tools.js.map +1 -0
- package/dist/ai-sdk/relay-session.d.ts +22 -0
- package/dist/ai-sdk/relay-session.d.ts.map +1 -0
- package/dist/ai-sdk/relay-session.js +423 -0
- package/dist/ai-sdk/relay-session.js.map +1 -0
- package/dist/ai-sdk/sidecar-main.d.ts +3 -0
- package/dist/ai-sdk/sidecar-main.d.ts.map +1 -0
- package/dist/ai-sdk/sidecar-main.js +7 -0
- package/dist/ai-sdk/sidecar-main.js.map +1 -0
- package/dist/ai-sdk/sidecar.d.ts +20 -0
- package/dist/ai-sdk/sidecar.d.ts.map +1 -0
- package/dist/ai-sdk/sidecar.js +361 -0
- package/dist/ai-sdk/sidecar.js.map +1 -0
- package/dist/define.d.ts +49 -1
- package/dist/define.d.ts.map +1 -1
- package/dist/define.js +202 -1
- package/dist/define.js.map +1 -1
- package/dist/index.d.ts +7 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -4
- package/dist/index.js.map +1 -1
- package/dist/observability.d.ts +41 -0
- package/dist/observability.d.ts.map +1 -0
- package/dist/observability.js +178 -0
- package/dist/observability.js.map +1 -0
- package/package.json +12 -3
package/README.md
CHANGED
|
@@ -1,7 +1,74 @@
|
|
|
1
1
|
# @agent-relay/harnesses
|
|
2
2
|
|
|
3
|
-
Pre-built harness definitions for
|
|
3
|
+
Pre-built harness definitions for local coding agents. Requires Node.js 22 or newer.
|
|
4
4
|
|
|
5
|
-
Use this package with `@agent-relay/harness-driver` when Agent Relay should create or
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
Use this package with `@agent-relay/harness-driver` when Agent Relay should create or supervise managed sessions.
|
|
6
|
+
|
|
7
|
+
## Runtime selection
|
|
8
|
+
|
|
9
|
+
Claude Code, Codex, and OpenCode offer both an official AI SDK native harness runtime and the existing PTY runtime. Their adapters begin as experimental, so `auto` continues to select PTY until each adapter passes its promotion gates.
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
import { claude } from '@agent-relay/harnesses';
|
|
13
|
+
|
|
14
|
+
await claude.create({ relay }); // auto: PTY while the adapter is experimental
|
|
15
|
+
await claude.create({ relay, runtime: 'native' }); // explicit native harness runtime
|
|
16
|
+
await claude.create({ relay, runtime: 'pty' }); // explicit terminal runtime
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Runtime selection is final before the session starts. Relay does not switch a running session between PTY and AI SDK.
|
|
20
|
+
|
|
21
|
+
| Harness | AI SDK adapter | PTY | Initial selection |
|
|
22
|
+
| --------------- | ------------------------------------ | --- | ---------------------------------------- |
|
|
23
|
+
| Claude Code | `@ai-sdk/harness-claude-code@1.0.35` | yes | PTY; native is explicit and experimental |
|
|
24
|
+
| Codex | `@ai-sdk/harness-codex@1.0.40` | yes | PTY; native is explicit and experimental |
|
|
25
|
+
| OpenCode | `@ai-sdk/harness-opencode@1.0.35` | yes | PTY; native is explicit and experimental |
|
|
26
|
+
| Pi | `@ai-sdk/harness-pi@1.0.34` | no | explicit experimental native |
|
|
27
|
+
| Deep Agents | `@ai-sdk/harness-deepagents@1.0.33` | no | explicit experimental native |
|
|
28
|
+
| Other built-ins | none | yes | PTY |
|
|
29
|
+
|
|
30
|
+
Pi and Deep Agents require `runtime: 'native'` while experimental. Deep Agents does not advertise manual compaction, and stopping its current adapter does not preserve in-memory conversation.
|
|
31
|
+
|
|
32
|
+
Harness execution is `pty` or `native`. The broker may internally wrap native harnesses and attached app servers as `headless` processes, but `headless` is not an observability mode. Both execution paths publish the same normalized `AgentEvent` contract.
|
|
33
|
+
|
|
34
|
+
Native sessions receive authenticated Agent Relay host tools and collaboration instructions at startup. They can discover agents and channels, check or search messages, send DMs, post to channels, and reply to threads without relying on a provider-global MCP configuration or extra prompting from the user.
|
|
35
|
+
|
|
36
|
+
## Native harness attach
|
|
37
|
+
|
|
38
|
+
AI SDK sessions expose agent-event history and live events instead of terminal bytes:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
agent-relay node agent attach my-agent --mode view
|
|
42
|
+
agent-relay node agent attach my-agent --mode drive
|
|
43
|
+
agent-relay node agent attach my-agent --mode view --json
|
|
44
|
+
agent-relay node agent attach my-agent --mode view --reasoning --diagnostics
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
`view` is read-only. `drive` sends each input line after broker acknowledgement; `/interrupt`, `/approve <id>`, `/reject <id>`, and `/detach` are local controls. `passthrough` is unavailable because a native harness session has no terminal byte stream. `--json` writes normalized NDJSON to stdout. Reasoning and diagnostics stay hidden unless requested.
|
|
48
|
+
|
|
49
|
+
## Observability
|
|
50
|
+
|
|
51
|
+
The AI SDK stream is Relay's reference observability profile. Relay publishes portable agent events and the activities `starting`, `thinking`, `typing`, `using_tool`, `waiting`, `idle`, and `error`. Every event carries its source and either `exact` or `inferred` fidelity.
|
|
52
|
+
|
|
53
|
+
PTY sessions use the same capability matrix. Today the broker provides exact startup and runtime failure plus inferred busy and idle boundaries. Signals that terminal bytes cannot prove, including reasoning, text blocks, tools, approvals, files, and compaction, are reported as unavailable rather than guessed.
|
|
54
|
+
|
|
55
|
+
Another Relay application can inspect events successfully accepted into Relaycast's durable agent log through the messaging surface:
|
|
56
|
+
|
|
57
|
+
```ts
|
|
58
|
+
const activity = await relay.messaging.sessionEvents?.list('my-agent', {
|
|
59
|
+
type: 'activity.changed',
|
|
60
|
+
limit: 100,
|
|
61
|
+
});
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
The broker owns PTY publication for every spawn surface. A managed `create({ relay })` call additionally mirrors those broker events into listeners on that local `AgentRelay` instance.
|
|
65
|
+
|
|
66
|
+
Hosted publication is operational observability, not a lossless audit ledger. The broker preserves order through a bounded publisher queue and logs queue, timeout, and Relaycast failures locally; events can be absent during a sustained outage or broker crash.
|
|
67
|
+
|
|
68
|
+
## Local-host security and troubleshooting
|
|
69
|
+
|
|
70
|
+
The AI SDK local-host provider is a process and filesystem lifecycle boundary, not an operating-system sandbox. It rejects lexical traversal and static symlink escapes on a best-effort basis for adapter file operations, holds bridge ports on loopback until handing them to the adapter process, and terminates only child processes it started. Concurrent filesystem mutation by another process is outside this boundary, so the path guard is not TOCTOU-safe and must not be used as isolation for untrusted code.
|
|
71
|
+
|
|
72
|
+
The local-host AI SDK runtime currently supports macOS and Linux. On Windows, use the PTY runtime; an explicit native selection fails with a typed platform error instead of attempting POSIX adapter bootstrap commands. Preflight checks the platform, Node.js 22, `pnpm`, workspace access, cache access, and loopback port allocation. If startup fails, verify those commands and permissions first. Bootstrap work is cached by stable adapter identity under the runtime cache; deleting unrelated workspace files is never part of cleanup.
|
|
73
|
+
|
|
74
|
+
Adapter upgrades must keep the `@ai-sdk/harness@1.0.34` family coherent and pass the registry, lifecycle, agent-event replay, observability, real-CLI, and 100-cycle soak contracts before changing an adapter's rollout state.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { HarnessV1 } from '@ai-sdk/harness';
|
|
2
|
+
export type AiSdkAdapterRollout = 'experimental' | 'validated' | 'default';
|
|
3
|
+
export interface AiSdkLifecycleCapabilities {
|
|
4
|
+
activeInput: boolean;
|
|
5
|
+
toolApprovals: boolean;
|
|
6
|
+
compact: boolean;
|
|
7
|
+
continueTurn: boolean;
|
|
8
|
+
suspendTurn: boolean;
|
|
9
|
+
detach: boolean;
|
|
10
|
+
stop: boolean;
|
|
11
|
+
destroy: boolean;
|
|
12
|
+
stopPreservesConversation: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface RelayAdapterSettings {
|
|
15
|
+
model?: string;
|
|
16
|
+
auth?: unknown;
|
|
17
|
+
port?: number;
|
|
18
|
+
startupTimeoutMs?: number;
|
|
19
|
+
maxTurns?: number;
|
|
20
|
+
thinking?: unknown;
|
|
21
|
+
thinkingLevel?: unknown;
|
|
22
|
+
reasoningEffort?: 'low' | 'medium' | 'high';
|
|
23
|
+
reasoningVariant?: string;
|
|
24
|
+
provider?: string;
|
|
25
|
+
webSearch?: boolean;
|
|
26
|
+
recursionLimit?: number;
|
|
27
|
+
}
|
|
28
|
+
export interface AiSdkAdapterRegistryEntry {
|
|
29
|
+
readonly name: string;
|
|
30
|
+
readonly aliases: readonly string[];
|
|
31
|
+
readonly packageName: string;
|
|
32
|
+
readonly execution: 'bridge' | 'host';
|
|
33
|
+
readonly lifecycle: AiSdkLifecycleCapabilities;
|
|
34
|
+
readonly ptyAvailable: boolean;
|
|
35
|
+
readonly rollout: AiSdkAdapterRollout;
|
|
36
|
+
readonly mapSettings: (settings: RelayAdapterSettings) => Record<string, unknown>;
|
|
37
|
+
readonly createHarness: (settings?: RelayAdapterSettings) => Promise<HarnessV1>;
|
|
38
|
+
}
|
|
39
|
+
export declare class AiSdkAdapterRegistry {
|
|
40
|
+
#private;
|
|
41
|
+
constructor(entries?: readonly AiSdkAdapterRegistryEntry[]);
|
|
42
|
+
list(): readonly AiSdkAdapterRegistryEntry[];
|
|
43
|
+
get(name: string): AiSdkAdapterRegistryEntry | undefined;
|
|
44
|
+
require(name: string): AiSdkAdapterRegistryEntry;
|
|
45
|
+
}
|
|
46
|
+
export declare const aiSdkAdapterRegistry: AiSdkAdapterRegistry;
|
|
47
|
+
//# sourceMappingURL=adapter-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-registry.d.ts","sourceRoot":"","sources":["../../src/ai-sdk/adapter-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,MAAM,mBAAmB,GAAG,cAAc,GAAG,WAAW,GAAG,SAAS,CAAC;AAE3E,MAAM,WAAW,0BAA0B;IACzC,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,yBAAyB,EAAE,OAAO,CAAC;CACpC;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC5C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,QAAQ,GAAG,MAAM,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,0BAA0B,CAAC;IAC/C,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,oBAAoB,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClF,QAAQ,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,EAAE,oBAAoB,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;CACjF;AA0JD,qBAAa,oBAAoB;;gBAInB,OAAO,GAAE,SAAS,yBAAyB,EAAY;IAWnE,IAAI,IAAI,SAAS,yBAAyB,EAAE;IAI5C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,yBAAyB,GAAG,SAAS;IAIxD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,yBAAyB;CAKjD;AAED,eAAO,MAAM,oBAAoB,sBAA6B,CAAC"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
function pickSettings(settings, keys) {
|
|
2
|
+
const mapped = {};
|
|
3
|
+
for (const key of keys) {
|
|
4
|
+
const value = settings[key];
|
|
5
|
+
if (value !== undefined)
|
|
6
|
+
mapped[key] = value;
|
|
7
|
+
}
|
|
8
|
+
return mapped;
|
|
9
|
+
}
|
|
10
|
+
function lazyFactory(packageName, load, exportName, mapSettings) {
|
|
11
|
+
return async (settings) => {
|
|
12
|
+
let loaded;
|
|
13
|
+
try {
|
|
14
|
+
loaded = await load();
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
throw new Error(`AI SDK harness adapter ${packageName} is unavailable`, { cause: error });
|
|
18
|
+
}
|
|
19
|
+
const factory = loaded[exportName];
|
|
20
|
+
if (typeof factory !== 'function') {
|
|
21
|
+
throw new Error(`AI SDK harness adapter ${packageName} does not export ${exportName}`);
|
|
22
|
+
}
|
|
23
|
+
return factory(mapSettings(settings ?? {}));
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
const FULL_LIFECYCLE = {
|
|
27
|
+
activeInput: true,
|
|
28
|
+
toolApprovals: true,
|
|
29
|
+
compact: true,
|
|
30
|
+
continueTurn: true,
|
|
31
|
+
suspendTurn: true,
|
|
32
|
+
detach: true,
|
|
33
|
+
stop: true,
|
|
34
|
+
destroy: true,
|
|
35
|
+
stopPreservesConversation: true,
|
|
36
|
+
};
|
|
37
|
+
// The upstream adapter currently defaults to gpt-5.3-codex, which ChatGPT-account
|
|
38
|
+
// authentication no longer accepts. Keep Relay's default aligned with Codex CLI
|
|
39
|
+
// while still allowing callers to select another supported model explicitly.
|
|
40
|
+
const DEFAULT_CODEX_MODEL = 'gpt-5.6-terra';
|
|
41
|
+
const codexSettings = (settings) => ({
|
|
42
|
+
model: settings.model ?? DEFAULT_CODEX_MODEL,
|
|
43
|
+
...pickSettings(settings, ['auth', 'port', 'startupTimeoutMs', 'reasoningEffort', 'webSearch']),
|
|
44
|
+
});
|
|
45
|
+
const openCodeSettings = (settings) => pickSettings(settings, ['model', 'auth', 'port', 'startupTimeoutMs', 'provider', 'reasoningVariant']);
|
|
46
|
+
const claudeSettings = (settings) => pickSettings(settings, ['model', 'auth', 'port', 'startupTimeoutMs', 'maxTurns', 'thinking']);
|
|
47
|
+
const piSettings = (settings) => pickSettings(settings, ['model', 'auth', 'thinkingLevel']);
|
|
48
|
+
const deepAgentsSettings = (settings) => pickSettings(settings, ['model', 'auth', 'port', 'startupTimeoutMs', 'recursionLimit']);
|
|
49
|
+
const ENTRIES = [
|
|
50
|
+
{
|
|
51
|
+
name: 'claude',
|
|
52
|
+
aliases: ['claude-code'],
|
|
53
|
+
packageName: '@ai-sdk/harness-claude-code',
|
|
54
|
+
execution: 'bridge',
|
|
55
|
+
lifecycle: FULL_LIFECYCLE,
|
|
56
|
+
ptyAvailable: true,
|
|
57
|
+
rollout: 'experimental',
|
|
58
|
+
mapSettings: claudeSettings,
|
|
59
|
+
createHarness: lazyFactory('@ai-sdk/harness-claude-code', () => import('@ai-sdk/harness-claude-code'), 'createClaudeCode', claudeSettings),
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: 'codex',
|
|
63
|
+
aliases: [],
|
|
64
|
+
packageName: '@ai-sdk/harness-codex',
|
|
65
|
+
execution: 'bridge',
|
|
66
|
+
lifecycle: FULL_LIFECYCLE,
|
|
67
|
+
ptyAvailable: true,
|
|
68
|
+
rollout: 'experimental',
|
|
69
|
+
mapSettings: codexSettings,
|
|
70
|
+
createHarness: lazyFactory('@ai-sdk/harness-codex', () => import('@ai-sdk/harness-codex'), 'createCodex', codexSettings),
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
name: 'opencode',
|
|
74
|
+
aliases: ['open-code'],
|
|
75
|
+
packageName: '@ai-sdk/harness-opencode',
|
|
76
|
+
execution: 'bridge',
|
|
77
|
+
lifecycle: FULL_LIFECYCLE,
|
|
78
|
+
ptyAvailable: true,
|
|
79
|
+
rollout: 'experimental',
|
|
80
|
+
mapSettings: openCodeSettings,
|
|
81
|
+
createHarness: lazyFactory('@ai-sdk/harness-opencode', () => import('@ai-sdk/harness-opencode'), 'createOpenCode', openCodeSettings),
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
name: 'pi',
|
|
85
|
+
aliases: [],
|
|
86
|
+
packageName: '@ai-sdk/harness-pi',
|
|
87
|
+
execution: 'host',
|
|
88
|
+
lifecycle: FULL_LIFECYCLE,
|
|
89
|
+
ptyAvailable: false,
|
|
90
|
+
rollout: 'experimental',
|
|
91
|
+
mapSettings: piSettings,
|
|
92
|
+
createHarness: lazyFactory('@ai-sdk/harness-pi', () => import('@ai-sdk/harness-pi'), 'createPi', piSettings),
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
name: 'deepagents',
|
|
96
|
+
aliases: ['deep-agents'],
|
|
97
|
+
packageName: '@ai-sdk/harness-deepagents',
|
|
98
|
+
execution: 'bridge',
|
|
99
|
+
lifecycle: { ...FULL_LIFECYCLE, compact: false, stopPreservesConversation: false },
|
|
100
|
+
ptyAvailable: false,
|
|
101
|
+
rollout: 'experimental',
|
|
102
|
+
mapSettings: deepAgentsSettings,
|
|
103
|
+
createHarness: lazyFactory('@ai-sdk/harness-deepagents', () => import('@ai-sdk/harness-deepagents'), 'createDeepAgents', deepAgentsSettings),
|
|
104
|
+
},
|
|
105
|
+
];
|
|
106
|
+
export class AiSdkAdapterRegistry {
|
|
107
|
+
#byName = new Map();
|
|
108
|
+
#entries;
|
|
109
|
+
constructor(entries = ENTRIES) {
|
|
110
|
+
this.#entries = [...entries];
|
|
111
|
+
for (const entry of entries) {
|
|
112
|
+
for (const candidate of [entry.name, ...entry.aliases]) {
|
|
113
|
+
const key = candidate.toLowerCase();
|
|
114
|
+
if (this.#byName.has(key))
|
|
115
|
+
throw new Error(`Duplicate AI SDK adapter alias: ${candidate}`);
|
|
116
|
+
this.#byName.set(key, entry);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
list() {
|
|
121
|
+
return this.#entries;
|
|
122
|
+
}
|
|
123
|
+
get(name) {
|
|
124
|
+
return this.#byName.get(name.toLowerCase());
|
|
125
|
+
}
|
|
126
|
+
require(name) {
|
|
127
|
+
const entry = this.get(name);
|
|
128
|
+
if (!entry)
|
|
129
|
+
throw new Error(`No AI SDK harness adapter is registered for ${name}`);
|
|
130
|
+
return entry;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
export const aiSdkAdapterRegistry = new AiSdkAdapterRegistry();
|
|
134
|
+
//# sourceMappingURL=adapter-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-registry.js","sourceRoot":"","sources":["../../src/ai-sdk/adapter-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type { HarnessV1, HarnessV1Bootstrap, HarnessV1ContinueTurnState, HarnessV1Diagnostic, HarnessV1Observability, HarnessV1PermissionMode, HarnessV1ResumeSessionState, HarnessV1SandboxProvider, HarnessV1Skill, HarnessV1StreamPart, HarnessV1ToolSpec } from '@ai-sdk/harness';
|
|
2
|
+
import type { Experimental_SandboxSession as SandboxSession } from '@ai-sdk/provider-utils';
|
|
3
|
+
export type HarnessHostState = 'new' | 'starting' | 'ready' | 'running' | 'suspended' | 'detached' | 'stopped' | 'destroyed' | 'failed';
|
|
4
|
+
export interface HarnessEventObservability {
|
|
5
|
+
source: 'ai-sdk';
|
|
6
|
+
fidelity: 'exact';
|
|
7
|
+
sequence: number;
|
|
8
|
+
timestamp: string;
|
|
9
|
+
turnId?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface NormalizedHarnessEvent {
|
|
12
|
+
type: string;
|
|
13
|
+
observability: HarnessEventObservability;
|
|
14
|
+
[key: string]: unknown;
|
|
15
|
+
}
|
|
16
|
+
type NormalizedHarnessEventInput = {
|
|
17
|
+
type: string;
|
|
18
|
+
[key: string]: unknown;
|
|
19
|
+
};
|
|
20
|
+
export interface HarnessHostOptions {
|
|
21
|
+
harness: HarnessV1;
|
|
22
|
+
sandboxProvider: HarnessV1SandboxProvider;
|
|
23
|
+
workspace: string;
|
|
24
|
+
sessionId?: string;
|
|
25
|
+
permissionMode?: HarnessV1PermissionMode;
|
|
26
|
+
skills?: readonly HarnessV1Skill[];
|
|
27
|
+
instructions?: string;
|
|
28
|
+
tools?: readonly HarnessHostTool[];
|
|
29
|
+
observability?: HarnessV1Observability;
|
|
30
|
+
abortSignal?: AbortSignal;
|
|
31
|
+
resumeFrom?: HarnessV1ResumeSessionState;
|
|
32
|
+
continueFrom?: HarnessV1ContinueTurnState;
|
|
33
|
+
onEvent?: (event: NormalizedHarnessEvent) => void | Promise<void>;
|
|
34
|
+
onDiagnostic?: (diagnostic: HarnessV1Diagnostic) => void | Promise<void>;
|
|
35
|
+
/** Bounded retries with a fresh local port when an adapter bridge loses a bind race. */
|
|
36
|
+
portBindRetries?: number;
|
|
37
|
+
}
|
|
38
|
+
export interface HarnessHostTool {
|
|
39
|
+
spec: HarnessV1ToolSpec;
|
|
40
|
+
execute(input: unknown, options: {
|
|
41
|
+
abortSignal?: AbortSignal;
|
|
42
|
+
}): Promise<unknown> | unknown;
|
|
43
|
+
}
|
|
44
|
+
export interface HarnessTurnHandle {
|
|
45
|
+
turnId: string;
|
|
46
|
+
done: Promise<void>;
|
|
47
|
+
}
|
|
48
|
+
declare function applyBootstrap(recipe: HarnessV1Bootstrap, session: SandboxSession, abortSignal?: AbortSignal): Promise<void>;
|
|
49
|
+
declare function streamEvents(part: HarnessV1StreamPart): NormalizedHarnessEventInput[];
|
|
50
|
+
export declare class HarnessHost {
|
|
51
|
+
#private;
|
|
52
|
+
readonly harness: HarnessV1;
|
|
53
|
+
readonly sandboxProvider: HarnessV1SandboxProvider;
|
|
54
|
+
readonly workspace: string;
|
|
55
|
+
readonly sessionId: string;
|
|
56
|
+
constructor(options: HarnessHostOptions);
|
|
57
|
+
get state(): HarnessHostState;
|
|
58
|
+
get activeTurnId(): string | undefined;
|
|
59
|
+
get hasActiveTurn(): boolean;
|
|
60
|
+
onEvent(listener: (event: NormalizedHarnessEvent) => void | Promise<void>): () => void;
|
|
61
|
+
start(): Promise<void>;
|
|
62
|
+
startTurn(prompt: string, turnId?: string): Promise<HarnessTurnHandle>;
|
|
63
|
+
submitUserMessage(text: string): Promise<void>;
|
|
64
|
+
submitToolResult(input: {
|
|
65
|
+
toolCallId: string;
|
|
66
|
+
output: unknown;
|
|
67
|
+
isError?: boolean;
|
|
68
|
+
}): Promise<void>;
|
|
69
|
+
submitToolApproval(input: {
|
|
70
|
+
approvalId: string;
|
|
71
|
+
approved: boolean;
|
|
72
|
+
reason?: string;
|
|
73
|
+
}): Promise<void>;
|
|
74
|
+
interrupt(reason?: string): Promise<void>;
|
|
75
|
+
compact(customInstructions?: string): Promise<void>;
|
|
76
|
+
suspend(): Promise<HarnessV1ContinueTurnState>;
|
|
77
|
+
continue(state: HarnessV1ContinueTurnState, turnId?: string): Promise<HarnessTurnHandle>;
|
|
78
|
+
detach(): Promise<HarnessV1ResumeSessionState>;
|
|
79
|
+
stop(): Promise<HarnessV1ResumeSessionState>;
|
|
80
|
+
destroy(): Promise<void>;
|
|
81
|
+
}
|
|
82
|
+
export { applyBootstrap, streamEvents as normalizeHarnessStreamPart };
|
|
83
|
+
//# sourceMappingURL=harness-host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"harness-host.d.ts","sourceRoot":"","sources":["../../src/ai-sdk/harness-host.ts"],"names":[],"mappings":"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"}
|