@agent-native/core 0.49.27 → 0.50.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/dist/agent/harness/ai-sdk-adapter.d.ts +13 -0
- package/dist/agent/harness/ai-sdk-adapter.d.ts.map +1 -0
- package/dist/agent/harness/ai-sdk-adapter.js +232 -0
- package/dist/agent/harness/ai-sdk-adapter.js.map +1 -0
- package/dist/agent/harness/background.d.ts +15 -0
- package/dist/agent/harness/background.d.ts.map +1 -0
- package/dist/agent/harness/background.js +233 -0
- package/dist/agent/harness/background.js.map +1 -0
- package/dist/agent/harness/builtin.d.ts +2 -0
- package/dist/agent/harness/builtin.d.ts.map +1 -0
- package/dist/agent/harness/builtin.js +24 -0
- package/dist/agent/harness/builtin.js.map +1 -0
- package/dist/agent/harness/index.d.ts +9 -0
- package/dist/agent/harness/index.d.ts.map +1 -0
- package/dist/agent/harness/index.js +8 -0
- package/dist/agent/harness/index.js.map +1 -0
- package/dist/agent/harness/registry.d.ts +15 -0
- package/dist/agent/harness/registry.d.ts.map +1 -0
- package/dist/agent/harness/registry.js +70 -0
- package/dist/agent/harness/registry.js.map +1 -0
- package/dist/agent/harness/runner.d.ts +21 -0
- package/dist/agent/harness/runner.d.ts.map +1 -0
- package/dist/agent/harness/runner.js +86 -0
- package/dist/agent/harness/runner.js.map +1 -0
- package/dist/agent/harness/store.d.ts +46 -0
- package/dist/agent/harness/store.d.ts.map +1 -0
- package/dist/agent/harness/store.js +304 -0
- package/dist/agent/harness/store.js.map +1 -0
- package/dist/agent/harness/translate.d.ts +5 -0
- package/dist/agent/harness/translate.d.ts.map +1 -0
- package/dist/agent/harness/translate.js +120 -0
- package/dist/agent/harness/translate.js.map +1 -0
- package/dist/agent/harness/types.d.ts +127 -0
- package/dist/agent/harness/types.d.ts.map +1 -0
- package/dist/agent/harness/types.js +2 -0
- package/dist/agent/harness/types.js.map +1 -0
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +2 -0
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +10 -1
- package/dist/cli/create.js.map +1 -1
- package/dist/cli/pr-visual-recap-workflow.d.ts +1 -1
- package/dist/cli/pr-visual-recap-workflow.d.ts.map +1 -1
- package/dist/cli/pr-visual-recap-workflow.js +1 -1
- package/dist/cli/pr-visual-recap-workflow.js.map +1 -1
- package/dist/cli/skills.d.ts +1 -1
- package/dist/cli/skills.d.ts.map +1 -1
- package/dist/cli/skills.js +8 -1
- package/dist/cli/skills.js.map +1 -1
- package/dist/client/blocks/library/wireframe.d.ts.map +1 -1
- package/dist/client/blocks/library/wireframe.js +0 -1
- package/dist/client/blocks/library/wireframe.js.map +1 -1
- package/dist/client/resources/use-resources.d.ts.map +1 -1
- package/dist/client/resources/use-resources.js +4 -2
- package/dist/client/resources/use-resources.js.map +1 -1
- package/dist/code-agents/background-run.d.ts +6 -4
- package/dist/code-agents/background-run.d.ts.map +1 -1
- package/dist/code-agents/background-run.js.map +1 -1
- package/dist/coding-tools/run-code.js +6 -4
- package/dist/coding-tools/run-code.js.map +1 -1
- package/dist/provider-api/index.d.ts +20 -12
- package/dist/provider-api/index.d.ts.map +1 -1
- package/dist/provider-api/index.js +157 -37
- package/dist/provider-api/index.js.map +1 -1
- package/dist/provider-api/quota-governor.d.ts +53 -0
- package/dist/provider-api/quota-governor.d.ts.map +1 -0
- package/dist/provider-api/quota-governor.js +395 -0
- package/dist/provider-api/quota-governor.js.map +1 -0
- package/dist/provider-api/staging.d.ts.map +1 -1
- package/dist/provider-api/staging.js +16 -0
- package/dist/provider-api/staging.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +34 -10
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/templates/workspace-core/.agents/skills/harness-agents/SKILL.md +98 -0
- package/dist/workspace-files/index.d.ts +0 -1
- package/dist/workspace-files/index.d.ts.map +1 -1
- package/dist/workspace-files/index.js +0 -1
- package/dist/workspace-files/index.js.map +1 -1
- package/dist/workspace-files/store.d.ts +14 -9
- package/dist/workspace-files/store.d.ts.map +1 -1
- package/dist/workspace-files/store.js +89 -164
- package/dist/workspace-files/store.js.map +1 -1
- package/dist/workspace-files/tool.d.ts +3 -4
- package/dist/workspace-files/tool.d.ts.map +1 -1
- package/dist/workspace-files/tool.js +8 -7
- package/dist/workspace-files/tool.js.map +1 -1
- package/docs/content/deployment.md +1 -1
- package/package.json +2 -1
- package/src/templates/workspace-core/.agents/skills/harness-agents/SKILL.md +98 -0
- package/dist/workspace-files/schema.d.ts +0 -195
- package/dist/workspace-files/schema.d.ts.map +0 -1
- package/dist/workspace-files/schema.js +0 -48
- package/dist/workspace-files/schema.js.map +0 -1
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { AgentHarnessAdapter, AgentHarnessCreateSessionOptions, AgentHarnessEvent } from "./types.js";
|
|
2
|
+
export type AiSdkHarnessRuntime = "claude-code" | "codex" | "pi";
|
|
3
|
+
export interface AiSdkHarnessAdapterOptions {
|
|
4
|
+
runtime: AiSdkHarnessRuntime;
|
|
5
|
+
label?: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
permissionMode?: AgentHarnessCreateSessionOptions["permissionMode"];
|
|
8
|
+
harnessOptions?: Record<string, unknown>;
|
|
9
|
+
agentOptions?: Record<string, unknown>;
|
|
10
|
+
}
|
|
11
|
+
export declare function createAiSdkHarnessAdapter(options: AiSdkHarnessAdapterOptions): AgentHarnessAdapter;
|
|
12
|
+
export declare function aiSdkHarnessPartToEvents(part: any): AgentHarnessEvent[];
|
|
13
|
+
//# sourceMappingURL=ai-sdk-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-sdk-adapter.d.ts","sourceRoot":"","sources":["../../../src/agent/harness/ai-sdk-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EAEnB,gCAAgC,EAChC,iBAAiB,EAGlB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,mBAAmB,GAAG,aAAa,GAAG,OAAO,GAAG,IAAI,CAAC;AAEjE,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,mBAAmB,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,gCAAgC,CAAC,gBAAgB,CAAC,CAAC;IACpE,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAmCD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,0BAA0B,GAClC,mBAAmB,CA6DrB;AAwFD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,GAAG,GAAG,iBAAiB,EAAE,CAyEvE"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
const RUNTIME_IMPORTS = {
|
|
2
|
+
"claude-code": {
|
|
3
|
+
packageName: "@ai-sdk/harness-claude-code",
|
|
4
|
+
exportNames: ["claudeCode", "createClaudeCode"],
|
|
5
|
+
label: "Claude Code",
|
|
6
|
+
sandbox: true,
|
|
7
|
+
},
|
|
8
|
+
codex: {
|
|
9
|
+
packageName: "@ai-sdk/harness-codex",
|
|
10
|
+
exportNames: ["createCodex", "codex"],
|
|
11
|
+
label: "Codex",
|
|
12
|
+
sandbox: true,
|
|
13
|
+
},
|
|
14
|
+
pi: {
|
|
15
|
+
packageName: "@ai-sdk/harness-pi",
|
|
16
|
+
exportNames: ["pi", "createPi"],
|
|
17
|
+
label: "Pi",
|
|
18
|
+
sandbox: false,
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
const dynamicImport = new Function("specifier", "return import(specifier)");
|
|
22
|
+
export function createAiSdkHarnessAdapter(options) {
|
|
23
|
+
const runtime = RUNTIME_IMPORTS[options.runtime];
|
|
24
|
+
if (!runtime) {
|
|
25
|
+
throw new Error(`[agent-harness] Unsupported AI SDK harness runtime`);
|
|
26
|
+
}
|
|
27
|
+
const capabilities = {
|
|
28
|
+
sandbox: runtime.sandbox,
|
|
29
|
+
resumable: true,
|
|
30
|
+
approvals: options.runtime !== "codex",
|
|
31
|
+
hostTools: true,
|
|
32
|
+
fileEvents: true,
|
|
33
|
+
};
|
|
34
|
+
return {
|
|
35
|
+
name: `ai-sdk-harness:${options.runtime}`,
|
|
36
|
+
label: options.label ?? runtime.label,
|
|
37
|
+
description: options.description ??
|
|
38
|
+
`Runs ${runtime.label} through the AI SDK HarnessAgent adapter.`,
|
|
39
|
+
installPackage: `@ai-sdk/harness@canary ${runtime.packageName}@canary`,
|
|
40
|
+
capabilities,
|
|
41
|
+
async createSession(sessionOptions) {
|
|
42
|
+
const [{ HarnessAgent }, runtimeModule] = await Promise.all([
|
|
43
|
+
dynamicImport("@ai-sdk/harness/agent"),
|
|
44
|
+
dynamicImport(runtime.packageName),
|
|
45
|
+
]);
|
|
46
|
+
const exportName = runtime.exportNames.find((name) => runtimeModule[name]);
|
|
47
|
+
const harnessFactory = exportName ? runtimeModule[exportName] : undefined;
|
|
48
|
+
if (!HarnessAgent || !harnessFactory) {
|
|
49
|
+
throw new Error(`[agent-harness] AI SDK harness package "${runtime.packageName}" did not expose one of: ${runtime.exportNames.join(", ")}`);
|
|
50
|
+
}
|
|
51
|
+
const hasHarnessOptions = options.harnessOptions &&
|
|
52
|
+
Object.keys(options.harnessOptions).length > 0;
|
|
53
|
+
const harness = typeof harnessFactory === "function" &&
|
|
54
|
+
(hasHarnessOptions || exportName?.startsWith("create"))
|
|
55
|
+
? harnessFactory(options.harnessOptions)
|
|
56
|
+
: harnessFactory;
|
|
57
|
+
const agent = new HarnessAgent({
|
|
58
|
+
...(options.agentOptions ?? {}),
|
|
59
|
+
harness,
|
|
60
|
+
...(sessionOptions.sandbox ? { sandbox: sessionOptions.sandbox } : {}),
|
|
61
|
+
...(sessionOptions.instructions
|
|
62
|
+
? { instructions: sessionOptions.instructions }
|
|
63
|
+
: {}),
|
|
64
|
+
...(sessionOptions.skills ? { skills: sessionOptions.skills } : {}),
|
|
65
|
+
...(sessionOptions.tools ? { tools: sessionOptions.tools } : {}),
|
|
66
|
+
permissionMode: sessionOptions.permissionMode ??
|
|
67
|
+
options.permissionMode ??
|
|
68
|
+
"allow-reads",
|
|
69
|
+
});
|
|
70
|
+
const nativeSession = await createNativeSession(agent, sessionOptions);
|
|
71
|
+
return new AiSdkHarnessSession(agent, nativeSession);
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
async function createNativeSession(agent, options) {
|
|
76
|
+
if (options.resumeState && typeof agent.resumeSession === "function") {
|
|
77
|
+
return agent.resumeSession(options.resumeState);
|
|
78
|
+
}
|
|
79
|
+
if (options.resumeState && typeof agent.createSession === "function") {
|
|
80
|
+
try {
|
|
81
|
+
return await agent.createSession({ resumeState: options.resumeState });
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return agent.createSession();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (typeof agent.createSession !== "function") {
|
|
88
|
+
throw new Error("[agent-harness] HarnessAgent does not expose createSession()");
|
|
89
|
+
}
|
|
90
|
+
return agent.createSession();
|
|
91
|
+
}
|
|
92
|
+
class AiSdkHarnessSession {
|
|
93
|
+
agent;
|
|
94
|
+
nativeSession;
|
|
95
|
+
id;
|
|
96
|
+
constructor(agent, nativeSession) {
|
|
97
|
+
this.agent = agent;
|
|
98
|
+
this.nativeSession = nativeSession;
|
|
99
|
+
this.id =
|
|
100
|
+
typeof nativeSession?.id === "string"
|
|
101
|
+
? nativeSession.id
|
|
102
|
+
: typeof nativeSession?.sessionId === "string"
|
|
103
|
+
? nativeSession.sessionId
|
|
104
|
+
: `ai-sdk-harness-${Math.random().toString(36).slice(2)}`;
|
|
105
|
+
}
|
|
106
|
+
async *streamTurn(input) {
|
|
107
|
+
const result = await this.agent.stream({
|
|
108
|
+
session: this.nativeSession,
|
|
109
|
+
...(input.prompt ? { prompt: input.prompt } : {}),
|
|
110
|
+
...(input.messages ? { messages: input.messages } : {}),
|
|
111
|
+
...(input.abortSignal ? { abortSignal: input.abortSignal } : {}),
|
|
112
|
+
});
|
|
113
|
+
for await (const part of result.fullStream ?? []) {
|
|
114
|
+
for (const event of aiSdkHarnessPartToEvents(part)) {
|
|
115
|
+
yield event;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
async *continueTurn() {
|
|
120
|
+
if (typeof this.agent.continueStream !== "function") {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
const result = await this.agent.continueStream({
|
|
124
|
+
session: this.nativeSession,
|
|
125
|
+
});
|
|
126
|
+
for await (const part of result.fullStream ?? []) {
|
|
127
|
+
for (const event of aiSdkHarnessPartToEvents(part)) {
|
|
128
|
+
yield event;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
async detach() {
|
|
133
|
+
if (typeof this.nativeSession.detach === "function") {
|
|
134
|
+
return this.nativeSession.detach();
|
|
135
|
+
}
|
|
136
|
+
return undefined;
|
|
137
|
+
}
|
|
138
|
+
async stop() {
|
|
139
|
+
if (typeof this.nativeSession.stop === "function") {
|
|
140
|
+
return this.nativeSession.stop();
|
|
141
|
+
}
|
|
142
|
+
return this.destroy();
|
|
143
|
+
}
|
|
144
|
+
async destroy() {
|
|
145
|
+
await this.nativeSession.destroy?.();
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
export function aiSdkHarnessPartToEvents(part) {
|
|
149
|
+
const type = part?.type;
|
|
150
|
+
const events = [];
|
|
151
|
+
switch (type) {
|
|
152
|
+
case "text-delta":
|
|
153
|
+
if (part.text)
|
|
154
|
+
events.push({ type: "text-delta", text: part.text });
|
|
155
|
+
break;
|
|
156
|
+
case "reasoning-delta":
|
|
157
|
+
case "thinking-delta":
|
|
158
|
+
if (part.text)
|
|
159
|
+
events.push({ type: "thinking-delta", text: part.text });
|
|
160
|
+
break;
|
|
161
|
+
case "tool-input-start":
|
|
162
|
+
events.push({
|
|
163
|
+
type: "tool-start",
|
|
164
|
+
id: part.id ?? part.toolCallId,
|
|
165
|
+
name: part.toolName ?? part.name ?? "tool",
|
|
166
|
+
input: {},
|
|
167
|
+
});
|
|
168
|
+
break;
|
|
169
|
+
case "tool-call":
|
|
170
|
+
case "dynamic-tool-call":
|
|
171
|
+
events.push({
|
|
172
|
+
type: "tool-start",
|
|
173
|
+
id: part.toolCallId ?? part.id,
|
|
174
|
+
name: part.toolName ?? part.name ?? "tool",
|
|
175
|
+
input: part.input ?? part.args ?? {},
|
|
176
|
+
});
|
|
177
|
+
break;
|
|
178
|
+
case "tool-result":
|
|
179
|
+
case "dynamic-tool-result":
|
|
180
|
+
events.push({
|
|
181
|
+
type: "tool-done",
|
|
182
|
+
id: part.toolCallId ?? part.id,
|
|
183
|
+
name: part.toolName ?? part.name ?? "tool",
|
|
184
|
+
result: part.output ?? part.result,
|
|
185
|
+
});
|
|
186
|
+
break;
|
|
187
|
+
case "tool-approval-request":
|
|
188
|
+
events.push({
|
|
189
|
+
type: "approval-request",
|
|
190
|
+
id: part.id ?? part.toolCallId ?? "approval",
|
|
191
|
+
tool: part.toolName ?? part.name,
|
|
192
|
+
message: part.message ?? "Harness is waiting for approval",
|
|
193
|
+
input: part.input ?? part.args,
|
|
194
|
+
});
|
|
195
|
+
break;
|
|
196
|
+
case "file-change":
|
|
197
|
+
if (part.path) {
|
|
198
|
+
events.push({
|
|
199
|
+
type: "file-change",
|
|
200
|
+
path: String(part.path),
|
|
201
|
+
operation: normalizeFileOperation(part.operation),
|
|
202
|
+
summary: typeof part.summary === "string" ? part.summary : undefined,
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
break;
|
|
206
|
+
case "compaction":
|
|
207
|
+
events.push({
|
|
208
|
+
type: "compaction",
|
|
209
|
+
summary: typeof part.summary === "string" ? part.summary : undefined,
|
|
210
|
+
});
|
|
211
|
+
break;
|
|
212
|
+
case "finish":
|
|
213
|
+
events.push({ type: "done", reason: part.finishReason });
|
|
214
|
+
break;
|
|
215
|
+
case "error":
|
|
216
|
+
events.push({
|
|
217
|
+
type: "error",
|
|
218
|
+
error: part.error?.message ?? part.message ?? "Harness stream error",
|
|
219
|
+
});
|
|
220
|
+
break;
|
|
221
|
+
}
|
|
222
|
+
return events;
|
|
223
|
+
}
|
|
224
|
+
function normalizeFileOperation(value) {
|
|
225
|
+
return value === "create" ||
|
|
226
|
+
value === "update" ||
|
|
227
|
+
value === "delete" ||
|
|
228
|
+
value === "rename"
|
|
229
|
+
? value
|
|
230
|
+
: "unknown";
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=ai-sdk-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-sdk-adapter.js","sourceRoot":"","sources":["../../../src/agent/harness/ai-sdk-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n AgentHarnessAdapter,\n AgentHarnessCapabilities,\n AgentHarnessCreateSessionOptions,\n AgentHarnessEvent,\n AgentHarnessSession,\n AgentHarnessTurnInput,\n} from \"./types.js\";\n\nexport type AiSdkHarnessRuntime = \"claude-code\" | \"codex\" | \"pi\";\n\nexport interface AiSdkHarnessAdapterOptions {\n runtime: AiSdkHarnessRuntime;\n label?: string;\n description?: string;\n permissionMode?: AgentHarnessCreateSessionOptions[\"permissionMode\"];\n harnessOptions?: Record<string, unknown>;\n agentOptions?: Record<string, unknown>;\n}\n\nconst RUNTIME_IMPORTS: Record<\n AiSdkHarnessRuntime,\n {\n packageName: string;\n exportNames: string[];\n label: string;\n sandbox: boolean;\n }\n> = {\n \"claude-code\": {\n packageName: \"@ai-sdk/harness-claude-code\",\n exportNames: [\"claudeCode\", \"createClaudeCode\"],\n label: \"Claude Code\",\n sandbox: true,\n },\n codex: {\n packageName: \"@ai-sdk/harness-codex\",\n exportNames: [\"createCodex\", \"codex\"],\n label: \"Codex\",\n sandbox: true,\n },\n pi: {\n packageName: \"@ai-sdk/harness-pi\",\n exportNames: [\"pi\", \"createPi\"],\n label: \"Pi\",\n sandbox: false,\n },\n};\n\nconst dynamicImport = new Function(\"specifier\", \"return import(specifier)\") as (\n specifier: string,\n) => Promise<any>;\n\nexport function createAiSdkHarnessAdapter(\n options: AiSdkHarnessAdapterOptions,\n): AgentHarnessAdapter {\n const runtime = RUNTIME_IMPORTS[options.runtime];\n if (!runtime) {\n throw new Error(`[agent-harness] Unsupported AI SDK harness runtime`);\n }\n const capabilities: AgentHarnessCapabilities = {\n sandbox: runtime.sandbox,\n resumable: true,\n approvals: options.runtime !== \"codex\",\n hostTools: true,\n fileEvents: true,\n };\n return {\n name: `ai-sdk-harness:${options.runtime}`,\n label: options.label ?? runtime.label,\n description:\n options.description ??\n `Runs ${runtime.label} through the AI SDK HarnessAgent adapter.`,\n installPackage: `@ai-sdk/harness@canary ${runtime.packageName}@canary`,\n capabilities,\n async createSession(sessionOptions) {\n const [{ HarnessAgent }, runtimeModule] = await Promise.all([\n dynamicImport(\"@ai-sdk/harness/agent\"),\n dynamicImport(runtime.packageName),\n ]);\n const exportName = runtime.exportNames.find(\n (name) => runtimeModule[name],\n );\n const harnessFactory = exportName ? runtimeModule[exportName] : undefined;\n if (!HarnessAgent || !harnessFactory) {\n throw new Error(\n `[agent-harness] AI SDK harness package \"${runtime.packageName}\" did not expose one of: ${runtime.exportNames.join(\", \")}`,\n );\n }\n const hasHarnessOptions =\n options.harnessOptions &&\n Object.keys(options.harnessOptions).length > 0;\n const harness =\n typeof harnessFactory === \"function\" &&\n (hasHarnessOptions || exportName?.startsWith(\"create\"))\n ? harnessFactory(options.harnessOptions)\n : harnessFactory;\n const agent = new HarnessAgent({\n ...(options.agentOptions ?? {}),\n harness,\n ...(sessionOptions.sandbox ? { sandbox: sessionOptions.sandbox } : {}),\n ...(sessionOptions.instructions\n ? { instructions: sessionOptions.instructions }\n : {}),\n ...(sessionOptions.skills ? { skills: sessionOptions.skills } : {}),\n ...(sessionOptions.tools ? { tools: sessionOptions.tools } : {}),\n permissionMode:\n sessionOptions.permissionMode ??\n options.permissionMode ??\n \"allow-reads\",\n });\n\n const nativeSession = await createNativeSession(agent, sessionOptions);\n return new AiSdkHarnessSession(agent, nativeSession);\n },\n };\n}\n\nasync function createNativeSession(\n agent: any,\n options: AgentHarnessCreateSessionOptions,\n): Promise<any> {\n if (options.resumeState && typeof agent.resumeSession === \"function\") {\n return agent.resumeSession(options.resumeState);\n }\n if (options.resumeState && typeof agent.createSession === \"function\") {\n try {\n return await agent.createSession({ resumeState: options.resumeState });\n } catch {\n return agent.createSession();\n }\n }\n if (typeof agent.createSession !== \"function\") {\n throw new Error(\n \"[agent-harness] HarnessAgent does not expose createSession()\",\n );\n }\n return agent.createSession();\n}\n\nclass AiSdkHarnessSession implements AgentHarnessSession {\n readonly id: string;\n\n constructor(\n private readonly agent: any,\n private readonly nativeSession: any,\n ) {\n this.id =\n typeof nativeSession?.id === \"string\"\n ? nativeSession.id\n : typeof nativeSession?.sessionId === \"string\"\n ? nativeSession.sessionId\n : `ai-sdk-harness-${Math.random().toString(36).slice(2)}`;\n }\n\n async *streamTurn(\n input: AgentHarnessTurnInput,\n ): AsyncIterable<AgentHarnessEvent> {\n const result = await this.agent.stream({\n session: this.nativeSession,\n ...(input.prompt ? { prompt: input.prompt } : {}),\n ...(input.messages ? { messages: input.messages } : {}),\n ...(input.abortSignal ? { abortSignal: input.abortSignal } : {}),\n });\n for await (const part of result.fullStream ?? []) {\n for (const event of aiSdkHarnessPartToEvents(part)) {\n yield event;\n }\n }\n }\n\n async *continueTurn(): AsyncIterable<AgentHarnessEvent> {\n if (typeof this.agent.continueStream !== \"function\") {\n return;\n }\n const result = await this.agent.continueStream({\n session: this.nativeSession,\n });\n for await (const part of result.fullStream ?? []) {\n for (const event of aiSdkHarnessPartToEvents(part)) {\n yield event;\n }\n }\n }\n\n async detach(): Promise<unknown> {\n if (typeof this.nativeSession.detach === \"function\") {\n return this.nativeSession.detach();\n }\n return undefined;\n }\n\n async stop(): Promise<unknown> {\n if (typeof this.nativeSession.stop === \"function\") {\n return this.nativeSession.stop();\n }\n return this.destroy();\n }\n\n async destroy(): Promise<void> {\n await this.nativeSession.destroy?.();\n }\n}\n\nexport function aiSdkHarnessPartToEvents(part: any): AgentHarnessEvent[] {\n const type = part?.type;\n const events: AgentHarnessEvent[] = [];\n switch (type) {\n case \"text-delta\":\n if (part.text) events.push({ type: \"text-delta\", text: part.text });\n break;\n case \"reasoning-delta\":\n case \"thinking-delta\":\n if (part.text) events.push({ type: \"thinking-delta\", text: part.text });\n break;\n case \"tool-input-start\":\n events.push({\n type: \"tool-start\",\n id: part.id ?? part.toolCallId,\n name: part.toolName ?? part.name ?? \"tool\",\n input: {},\n });\n break;\n case \"tool-call\":\n case \"dynamic-tool-call\":\n events.push({\n type: \"tool-start\",\n id: part.toolCallId ?? part.id,\n name: part.toolName ?? part.name ?? \"tool\",\n input: part.input ?? part.args ?? {},\n });\n break;\n case \"tool-result\":\n case \"dynamic-tool-result\":\n events.push({\n type: \"tool-done\",\n id: part.toolCallId ?? part.id,\n name: part.toolName ?? part.name ?? \"tool\",\n result: part.output ?? part.result,\n });\n break;\n case \"tool-approval-request\":\n events.push({\n type: \"approval-request\",\n id: part.id ?? part.toolCallId ?? \"approval\",\n tool: part.toolName ?? part.name,\n message: part.message ?? \"Harness is waiting for approval\",\n input: part.input ?? part.args,\n });\n break;\n case \"file-change\":\n if (part.path) {\n events.push({\n type: \"file-change\",\n path: String(part.path),\n operation: normalizeFileOperation(part.operation),\n summary: typeof part.summary === \"string\" ? part.summary : undefined,\n });\n }\n break;\n case \"compaction\":\n events.push({\n type: \"compaction\",\n summary: typeof part.summary === \"string\" ? part.summary : undefined,\n });\n break;\n case \"finish\":\n events.push({ type: \"done\", reason: part.finishReason });\n break;\n case \"error\":\n events.push({\n type: \"error\",\n error: part.error?.message ?? part.message ?? \"Harness stream error\",\n });\n break;\n }\n return events;\n}\n\nfunction normalizeFileOperation(\n value: unknown,\n): Extract<AgentHarnessEvent, { type: \"file-change\" }>[\"operation\"] {\n return value === \"create\" ||\n value === \"update\" ||\n value === \"delete\" ||\n value === \"rename\"\n ? value\n : \"unknown\";\n}\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { BackgroundAgentControlResult, BackgroundAgentController } from "../../code-agents/background-controller.js";
|
|
2
|
+
import type { BackgroundAgentRun, BackgroundAgentTranscriptEvent, ListBackgroundAgentRunsOptions } from "../../code-agents/background-run.js";
|
|
3
|
+
export declare function createAgentHarnessBackgroundAgentController(): BackgroundAgentController;
|
|
4
|
+
export declare const agentHarnessBackgroundAgentController: BackgroundAgentController;
|
|
5
|
+
export declare function listAgentHarnessBackgroundRuns(options?: ListBackgroundAgentRunsOptions): Promise<BackgroundAgentRun[]>;
|
|
6
|
+
export declare function getAgentHarnessBackgroundRun(runId: string, options?: {
|
|
7
|
+
ownerEmail?: string | null;
|
|
8
|
+
}): Promise<BackgroundAgentRun | null>;
|
|
9
|
+
export declare function listAgentHarnessBackgroundTranscriptEvents(runId: string, options?: {
|
|
10
|
+
ownerEmail?: string | null;
|
|
11
|
+
}): Promise<BackgroundAgentTranscriptEvent[]>;
|
|
12
|
+
export declare function stopAgentHarnessBackgroundRun(runId: string, options?: {
|
|
13
|
+
ownerEmail?: string | null;
|
|
14
|
+
}): Promise<BackgroundAgentControlResult>;
|
|
15
|
+
//# sourceMappingURL=background.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background.d.ts","sourceRoot":"","sources":["../../../src/agent/harness/background.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,4BAA4B,EAC5B,yBAAyB,EAE1B,MAAM,4CAA4C,CAAC;AACpD,OAAO,KAAK,EACV,kBAAkB,EAClB,8BAA8B,EAC9B,8BAA8B,EAC/B,MAAM,qCAAqC,CAAC;AAS7C,wBAAgB,2CAA2C,IAAI,yBAAyB,CAQvF;AAED,eAAO,MAAM,qCAAqC,2BACH,CAAC;AAEhD,wBAAsB,8BAA8B,CAClD,OAAO,GAAE,8BAAmC,GAC3C,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAQ/B;AAED,wBAAsB,4BAA4B,CAChD,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAO,GAC3C,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAMpC;AAED,wBAAsB,0CAA0C,CAC9D,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAO,GAC3C,OAAO,CAAC,8BAA8B,EAAE,CAAC,CAY3C;AAED,wBAAsB,6BAA6B,CACjD,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAO,GAC3C,OAAO,CAAC,4BAA4B,CAAC,CAmBvC"}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import { abortRun } from "../run-manager.js";
|
|
2
|
+
import { getRunEventsSince } from "../run-store.js";
|
|
3
|
+
import { getAgentHarnessSessionByRunId, listAgentHarnessSessions, markAgentHarnessSessionStopped, } from "./store.js";
|
|
4
|
+
export function createAgentHarnessBackgroundAgentController() {
|
|
5
|
+
return {
|
|
6
|
+
list: listAgentHarnessBackgroundRuns,
|
|
7
|
+
get: getAgentHarnessBackgroundRun,
|
|
8
|
+
transcript: listAgentHarnessBackgroundTranscriptEvents,
|
|
9
|
+
sendFollowUp: sendAgentHarnessBackgroundFollowUp,
|
|
10
|
+
control: controlAgentHarnessBackgroundRun,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export const agentHarnessBackgroundAgentController = createAgentHarnessBackgroundAgentController();
|
|
14
|
+
export async function listAgentHarnessBackgroundRuns(options = {}) {
|
|
15
|
+
if (options.goalId && options.goalId !== "agent-harness")
|
|
16
|
+
return [];
|
|
17
|
+
const sessions = await listAgentHarnessSessions({
|
|
18
|
+
ownerEmail: options.ownerEmail,
|
|
19
|
+
});
|
|
20
|
+
return sessions
|
|
21
|
+
.filter((session) => session.runId)
|
|
22
|
+
.map(toAgentHarnessBackgroundRun);
|
|
23
|
+
}
|
|
24
|
+
export async function getAgentHarnessBackgroundRun(runId, options = {}) {
|
|
25
|
+
const session = await getAgentHarnessSessionByRunId(runId);
|
|
26
|
+
if (options.ownerEmail && session?.ownerEmail !== options.ownerEmail) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
return session ? toAgentHarnessBackgroundRun(session) : null;
|
|
30
|
+
}
|
|
31
|
+
export async function listAgentHarnessBackgroundTranscriptEvents(runId, options = {}) {
|
|
32
|
+
const session = await getAgentHarnessSessionByRunId(runId);
|
|
33
|
+
if (options.ownerEmail && session?.ownerEmail !== options.ownerEmail) {
|
|
34
|
+
return [];
|
|
35
|
+
}
|
|
36
|
+
if (!session?.runId)
|
|
37
|
+
return [];
|
|
38
|
+
const events = await getRunEventsSince(session.runId, 0);
|
|
39
|
+
return events
|
|
40
|
+
.map((event) => parseRunEvent(event))
|
|
41
|
+
.filter((event) => Boolean(event))
|
|
42
|
+
.map((event) => toAgentHarnessBackgroundTranscriptEvent(session, event))
|
|
43
|
+
.filter((event) => Boolean(event));
|
|
44
|
+
}
|
|
45
|
+
export async function stopAgentHarnessBackgroundRun(runId, options = {}) {
|
|
46
|
+
const session = await getAgentHarnessSessionByRunId(runId);
|
|
47
|
+
if (!session)
|
|
48
|
+
return missingHarnessRunResult(runId);
|
|
49
|
+
if (options.ownerEmail && session.ownerEmail !== options.ownerEmail) {
|
|
50
|
+
return missingHarnessRunResult(runId);
|
|
51
|
+
}
|
|
52
|
+
if (session.runId) {
|
|
53
|
+
abortRun(session.runId, "user");
|
|
54
|
+
}
|
|
55
|
+
await markAgentHarnessSessionStopped(session.id, "stopped");
|
|
56
|
+
return {
|
|
57
|
+
ok: true,
|
|
58
|
+
runId,
|
|
59
|
+
run: toAgentHarnessBackgroundRun({
|
|
60
|
+
...session,
|
|
61
|
+
status: "stopped",
|
|
62
|
+
stoppedAt: Date.now(),
|
|
63
|
+
}),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function toAgentHarnessBackgroundRun(session) {
|
|
67
|
+
const updatedAt = new Date(session.updatedAt).toISOString();
|
|
68
|
+
const createdAt = new Date(session.createdAt).toISOString();
|
|
69
|
+
return {
|
|
70
|
+
schemaVersion: 1,
|
|
71
|
+
id: session.runId ?? session.id,
|
|
72
|
+
kind: "harness",
|
|
73
|
+
source: "agent-harness",
|
|
74
|
+
sourceLabel: "Agent Harness",
|
|
75
|
+
sourceRecord: {
|
|
76
|
+
type: "agent-harness-session",
|
|
77
|
+
id: session.id,
|
|
78
|
+
threadId: session.threadId,
|
|
79
|
+
name: session.harnessName,
|
|
80
|
+
},
|
|
81
|
+
title: `${session.harnessName} harness`,
|
|
82
|
+
subtitle: session.status === "running" ? "Running" : undefined,
|
|
83
|
+
status: backgroundStatus(session.status),
|
|
84
|
+
phase: session.status,
|
|
85
|
+
createdAt,
|
|
86
|
+
updatedAt,
|
|
87
|
+
goalId: "agent-harness",
|
|
88
|
+
needsInput: Boolean(session.pendingApproval),
|
|
89
|
+
needsApproval: Boolean(session.pendingApproval),
|
|
90
|
+
details: [
|
|
91
|
+
{ label: "Harness", value: session.harnessName },
|
|
92
|
+
{ label: "Session", value: session.id },
|
|
93
|
+
{ label: "Thread", value: session.threadId },
|
|
94
|
+
...(session.providerSessionId
|
|
95
|
+
? [{ label: "Provider session", value: session.providerSessionId }]
|
|
96
|
+
: []),
|
|
97
|
+
],
|
|
98
|
+
surfaceUrl: `agent-native://threads/${session.threadId}`,
|
|
99
|
+
metadata: {
|
|
100
|
+
harnessName: session.harnessName,
|
|
101
|
+
sessionId: session.id,
|
|
102
|
+
providerSessionId: session.providerSessionId,
|
|
103
|
+
threadId: session.threadId,
|
|
104
|
+
runId: session.runId,
|
|
105
|
+
status: session.status,
|
|
106
|
+
pendingApproval: session.pendingApproval,
|
|
107
|
+
workspaceRef: session.workspaceRef,
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
function toAgentHarnessBackgroundTranscriptEvent(session, runEvent) {
|
|
112
|
+
const summary = summarizeAgentChatEvent(runEvent.event);
|
|
113
|
+
if (!summary)
|
|
114
|
+
return null;
|
|
115
|
+
const eventId = `${session.runId ?? session.id}:${runEvent.seq}`;
|
|
116
|
+
return {
|
|
117
|
+
schemaVersion: 1,
|
|
118
|
+
id: eventId,
|
|
119
|
+
runId: session.runId ?? session.id,
|
|
120
|
+
kind: summary.kind,
|
|
121
|
+
source: "agent-harness",
|
|
122
|
+
sourceRecord: {
|
|
123
|
+
type: "agent-harness-run-event",
|
|
124
|
+
id: eventId,
|
|
125
|
+
seq: runEvent.seq,
|
|
126
|
+
},
|
|
127
|
+
message: summary.message,
|
|
128
|
+
createdAt: new Date(session.updatedAt).toISOString(),
|
|
129
|
+
metadata: {
|
|
130
|
+
...(summary.metadata ?? {}),
|
|
131
|
+
seq: runEvent.seq,
|
|
132
|
+
harnessName: session.harnessName,
|
|
133
|
+
sessionId: session.id,
|
|
134
|
+
},
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
function summarizeAgentChatEvent(event) {
|
|
138
|
+
switch (event.type) {
|
|
139
|
+
case "text":
|
|
140
|
+
return { kind: "note", message: event.text };
|
|
141
|
+
case "thinking":
|
|
142
|
+
return {
|
|
143
|
+
kind: "status",
|
|
144
|
+
message: event.text,
|
|
145
|
+
metadata: { type: "thinking" },
|
|
146
|
+
};
|
|
147
|
+
case "activity":
|
|
148
|
+
return {
|
|
149
|
+
kind: "status",
|
|
150
|
+
message: event.label,
|
|
151
|
+
metadata: event.tool ? { tool: event.tool } : undefined,
|
|
152
|
+
};
|
|
153
|
+
case "tool_start":
|
|
154
|
+
return {
|
|
155
|
+
kind: "status",
|
|
156
|
+
message: `Running ${event.tool}`,
|
|
157
|
+
metadata: { type: "tool_start", tool: event.tool, input: event.input },
|
|
158
|
+
};
|
|
159
|
+
case "tool_done":
|
|
160
|
+
return {
|
|
161
|
+
kind: "artifact",
|
|
162
|
+
message: event.result,
|
|
163
|
+
metadata: { type: "tool_done", tool: event.tool },
|
|
164
|
+
};
|
|
165
|
+
case "error":
|
|
166
|
+
return {
|
|
167
|
+
kind: "status",
|
|
168
|
+
message: event.error,
|
|
169
|
+
metadata: { errorCode: event.errorCode },
|
|
170
|
+
};
|
|
171
|
+
case "done":
|
|
172
|
+
return { kind: "status", message: "Run completed" };
|
|
173
|
+
case "auto_continue":
|
|
174
|
+
return {
|
|
175
|
+
kind: "status",
|
|
176
|
+
message: "Run reached its continuation boundary",
|
|
177
|
+
metadata: { reason: event.reason },
|
|
178
|
+
};
|
|
179
|
+
case "clear":
|
|
180
|
+
return null;
|
|
181
|
+
default:
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
function parseRunEvent(row) {
|
|
186
|
+
try {
|
|
187
|
+
const event = JSON.parse(row.eventData);
|
|
188
|
+
return { seq: Number(row.seq), event };
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
return null;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
function backgroundStatus(status) {
|
|
195
|
+
if (status === "running")
|
|
196
|
+
return "running";
|
|
197
|
+
if (status === "errored")
|
|
198
|
+
return "errored";
|
|
199
|
+
if (status === "idle" || status === "stopped" || status === "destroyed") {
|
|
200
|
+
return "completed";
|
|
201
|
+
}
|
|
202
|
+
return "unknown";
|
|
203
|
+
}
|
|
204
|
+
async function sendAgentHarnessBackgroundFollowUp(input) {
|
|
205
|
+
const run = await getAgentHarnessBackgroundRun(input.runId);
|
|
206
|
+
return {
|
|
207
|
+
ok: false,
|
|
208
|
+
runId: input.runId,
|
|
209
|
+
run,
|
|
210
|
+
error: "Harness follow-up is not available through the background controller yet. Resume the stored harness session directly.",
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
async function controlAgentHarnessBackgroundRun(input) {
|
|
214
|
+
if (input.command === "stop") {
|
|
215
|
+
return stopAgentHarnessBackgroundRun(input.runId);
|
|
216
|
+
}
|
|
217
|
+
const run = await getAgentHarnessBackgroundRun(input.runId);
|
|
218
|
+
return {
|
|
219
|
+
ok: false,
|
|
220
|
+
runId: input.runId,
|
|
221
|
+
run,
|
|
222
|
+
error: `Unsupported control command for harness runs: ${input.command}`,
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
function missingHarnessRunResult(runId) {
|
|
226
|
+
return {
|
|
227
|
+
ok: false,
|
|
228
|
+
runId,
|
|
229
|
+
run: null,
|
|
230
|
+
error: "Harness run not found",
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=background.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background.js","sourceRoot":"","sources":["../../../src/agent/harness/background.ts"],"names":[],"mappings":"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","sourcesContent":["import { abortRun } from \"../run-manager.js\";\nimport { getRunEventsSince } from \"../run-store.js\";\nimport type { AgentChatEvent, RunEvent } from \"../types.js\";\nimport type {\n BackgroundAgentControlInput,\n BackgroundAgentControlResult,\n BackgroundAgentController,\n BackgroundAgentFollowUpInput,\n} from \"../../code-agents/background-controller.js\";\nimport type {\n BackgroundAgentRun,\n BackgroundAgentTranscriptEvent,\n ListBackgroundAgentRunsOptions,\n} from \"../../code-agents/background-run.js\";\nimport {\n getAgentHarnessSessionByRunId,\n listAgentHarnessSessions,\n markAgentHarnessSessionStopped,\n type AgentHarnessSessionStatus,\n type StoredAgentHarnessSession,\n} from \"./store.js\";\n\nexport function createAgentHarnessBackgroundAgentController(): BackgroundAgentController {\n return {\n list: listAgentHarnessBackgroundRuns,\n get: getAgentHarnessBackgroundRun,\n transcript: listAgentHarnessBackgroundTranscriptEvents,\n sendFollowUp: sendAgentHarnessBackgroundFollowUp,\n control: controlAgentHarnessBackgroundRun,\n };\n}\n\nexport const agentHarnessBackgroundAgentController =\n createAgentHarnessBackgroundAgentController();\n\nexport async function listAgentHarnessBackgroundRuns(\n options: ListBackgroundAgentRunsOptions = {},\n): Promise<BackgroundAgentRun[]> {\n if (options.goalId && options.goalId !== \"agent-harness\") return [];\n const sessions = await listAgentHarnessSessions({\n ownerEmail: options.ownerEmail,\n });\n return sessions\n .filter((session) => session.runId)\n .map(toAgentHarnessBackgroundRun);\n}\n\nexport async function getAgentHarnessBackgroundRun(\n runId: string,\n options: { ownerEmail?: string | null } = {},\n): Promise<BackgroundAgentRun | null> {\n const session = await getAgentHarnessSessionByRunId(runId);\n if (options.ownerEmail && session?.ownerEmail !== options.ownerEmail) {\n return null;\n }\n return session ? toAgentHarnessBackgroundRun(session) : null;\n}\n\nexport async function listAgentHarnessBackgroundTranscriptEvents(\n runId: string,\n options: { ownerEmail?: string | null } = {},\n): Promise<BackgroundAgentTranscriptEvent[]> {\n const session = await getAgentHarnessSessionByRunId(runId);\n if (options.ownerEmail && session?.ownerEmail !== options.ownerEmail) {\n return [];\n }\n if (!session?.runId) return [];\n const events = await getRunEventsSince(session.runId, 0);\n return events\n .map((event) => parseRunEvent(event))\n .filter((event): event is RunEvent => Boolean(event))\n .map((event) => toAgentHarnessBackgroundTranscriptEvent(session, event))\n .filter((event): event is BackgroundAgentTranscriptEvent => Boolean(event));\n}\n\nexport async function stopAgentHarnessBackgroundRun(\n runId: string,\n options: { ownerEmail?: string | null } = {},\n): Promise<BackgroundAgentControlResult> {\n const session = await getAgentHarnessSessionByRunId(runId);\n if (!session) return missingHarnessRunResult(runId);\n if (options.ownerEmail && session.ownerEmail !== options.ownerEmail) {\n return missingHarnessRunResult(runId);\n }\n if (session.runId) {\n abortRun(session.runId, \"user\");\n }\n await markAgentHarnessSessionStopped(session.id, \"stopped\");\n return {\n ok: true,\n runId,\n run: toAgentHarnessBackgroundRun({\n ...session,\n status: \"stopped\",\n stoppedAt: Date.now(),\n }),\n };\n}\n\nfunction toAgentHarnessBackgroundRun(\n session: StoredAgentHarnessSession,\n): BackgroundAgentRun {\n const updatedAt = new Date(session.updatedAt).toISOString();\n const createdAt = new Date(session.createdAt).toISOString();\n return {\n schemaVersion: 1,\n id: session.runId ?? session.id,\n kind: \"harness\",\n source: \"agent-harness\",\n sourceLabel: \"Agent Harness\",\n sourceRecord: {\n type: \"agent-harness-session\",\n id: session.id,\n threadId: session.threadId,\n name: session.harnessName,\n },\n title: `${session.harnessName} harness`,\n subtitle: session.status === \"running\" ? \"Running\" : undefined,\n status: backgroundStatus(session.status),\n phase: session.status,\n createdAt,\n updatedAt,\n goalId: \"agent-harness\",\n needsInput: Boolean(session.pendingApproval),\n needsApproval: Boolean(session.pendingApproval),\n details: [\n { label: \"Harness\", value: session.harnessName },\n { label: \"Session\", value: session.id },\n { label: \"Thread\", value: session.threadId },\n ...(session.providerSessionId\n ? [{ label: \"Provider session\", value: session.providerSessionId }]\n : []),\n ],\n surfaceUrl: `agent-native://threads/${session.threadId}`,\n metadata: {\n harnessName: session.harnessName,\n sessionId: session.id,\n providerSessionId: session.providerSessionId,\n threadId: session.threadId,\n runId: session.runId,\n status: session.status,\n pendingApproval: session.pendingApproval,\n workspaceRef: session.workspaceRef,\n },\n };\n}\n\nfunction toAgentHarnessBackgroundTranscriptEvent(\n session: StoredAgentHarnessSession,\n runEvent: RunEvent,\n): BackgroundAgentTranscriptEvent | null {\n const summary = summarizeAgentChatEvent(runEvent.event);\n if (!summary) return null;\n const eventId = `${session.runId ?? session.id}:${runEvent.seq}`;\n return {\n schemaVersion: 1,\n id: eventId,\n runId: session.runId ?? session.id,\n kind: summary.kind,\n source: \"agent-harness\",\n sourceRecord: {\n type: \"agent-harness-run-event\",\n id: eventId,\n seq: runEvent.seq,\n },\n message: summary.message,\n createdAt: new Date(session.updatedAt).toISOString(),\n metadata: {\n ...(summary.metadata ?? {}),\n seq: runEvent.seq,\n harnessName: session.harnessName,\n sessionId: session.id,\n },\n };\n}\n\nfunction summarizeAgentChatEvent(event: AgentChatEvent): {\n kind: BackgroundAgentTranscriptEvent[\"kind\"];\n message: string;\n metadata?: Record<string, unknown>;\n} | null {\n switch (event.type) {\n case \"text\":\n return { kind: \"note\", message: event.text };\n case \"thinking\":\n return {\n kind: \"status\",\n message: event.text,\n metadata: { type: \"thinking\" },\n };\n case \"activity\":\n return {\n kind: \"status\",\n message: event.label,\n metadata: event.tool ? { tool: event.tool } : undefined,\n };\n case \"tool_start\":\n return {\n kind: \"status\",\n message: `Running ${event.tool}`,\n metadata: { type: \"tool_start\", tool: event.tool, input: event.input },\n };\n case \"tool_done\":\n return {\n kind: \"artifact\",\n message: event.result,\n metadata: { type: \"tool_done\", tool: event.tool },\n };\n case \"error\":\n return {\n kind: \"status\",\n message: event.error,\n metadata: { errorCode: event.errorCode },\n };\n case \"done\":\n return { kind: \"status\", message: \"Run completed\" };\n case \"auto_continue\":\n return {\n kind: \"status\",\n message: \"Run reached its continuation boundary\",\n metadata: { reason: event.reason },\n };\n case \"clear\":\n return null;\n default:\n return null;\n }\n}\n\nfunction parseRunEvent(row: {\n seq: number;\n eventData: string;\n}): RunEvent | null {\n try {\n const event = JSON.parse(row.eventData) as AgentChatEvent;\n return { seq: Number(row.seq), event };\n } catch {\n return null;\n }\n}\n\nfunction backgroundStatus(\n status: AgentHarnessSessionStatus,\n): BackgroundAgentRun[\"status\"] {\n if (status === \"running\") return \"running\";\n if (status === \"errored\") return \"errored\";\n if (status === \"idle\" || status === \"stopped\" || status === \"destroyed\") {\n return \"completed\";\n }\n return \"unknown\";\n}\n\nasync function sendAgentHarnessBackgroundFollowUp(\n input: BackgroundAgentFollowUpInput,\n): Promise<BackgroundAgentControlResult> {\n const run = await getAgentHarnessBackgroundRun(input.runId);\n return {\n ok: false,\n runId: input.runId,\n run,\n error:\n \"Harness follow-up is not available through the background controller yet. Resume the stored harness session directly.\",\n };\n}\n\nasync function controlAgentHarnessBackgroundRun(\n input: BackgroundAgentControlInput,\n): Promise<BackgroundAgentControlResult> {\n if (input.command === \"stop\") {\n return stopAgentHarnessBackgroundRun(input.runId);\n }\n const run = await getAgentHarnessBackgroundRun(input.runId);\n return {\n ok: false,\n runId: input.runId,\n run,\n error: `Unsupported control command for harness runs: ${input.command}`,\n };\n}\n\nfunction missingHarnessRunResult(runId: string): BackgroundAgentControlResult {\n return {\n ok: false,\n runId,\n run: null,\n error: \"Harness run not found\",\n };\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builtin.d.ts","sourceRoot":"","sources":["../../../src/agent/harness/builtin.ts"],"names":[],"mappings":"AAYA,wBAAgB,6BAA6B,IAAI,IAAI,CAgBpD"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { createAiSdkHarnessAdapter, } from "./ai-sdk-adapter.js";
|
|
2
|
+
import { registerAgentHarness } from "./registry.js";
|
|
3
|
+
const AI_SDK_HARNESS_RUNTIMES = [
|
|
4
|
+
"claude-code",
|
|
5
|
+
"codex",
|
|
6
|
+
"pi",
|
|
7
|
+
];
|
|
8
|
+
export function registerBuiltinAgentHarnesses() {
|
|
9
|
+
for (const runtime of AI_SDK_HARNESS_RUNTIMES) {
|
|
10
|
+
const adapter = createAiSdkHarnessAdapter({ runtime });
|
|
11
|
+
registerAgentHarness({
|
|
12
|
+
name: adapter.name,
|
|
13
|
+
label: adapter.label,
|
|
14
|
+
description: adapter.description,
|
|
15
|
+
installPackage: adapter.installPackage,
|
|
16
|
+
capabilities: adapter.capabilities,
|
|
17
|
+
create: (config) => createAiSdkHarnessAdapter({
|
|
18
|
+
runtime,
|
|
19
|
+
...(config ?? {}),
|
|
20
|
+
}),
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=builtin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builtin.js","sourceRoot":"","sources":["../../../src/agent/harness/builtin.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,GAE1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,MAAM,uBAAuB,GAA0B;IACrD,aAAa;IACb,OAAO;IACP,IAAI;CACL,CAAC;AAEF,MAAM,UAAU,6BAA6B;IAC3C,KAAK,MAAM,OAAO,IAAI,uBAAuB,EAAE,CAAC;QAC9C,MAAM,OAAO,GAAG,yBAAyB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QACvD,oBAAoB,CAAC;YACnB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CACjB,yBAAyB,CAAC;gBACxB,OAAO;gBACP,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;aACiC,CAAC;SACxD,CAAC,CAAC;IACL,CAAC;AACH,CAAC","sourcesContent":["import {\n createAiSdkHarnessAdapter,\n type AiSdkHarnessRuntime,\n} from \"./ai-sdk-adapter.js\";\nimport { registerAgentHarness } from \"./registry.js\";\n\nconst AI_SDK_HARNESS_RUNTIMES: AiSdkHarnessRuntime[] = [\n \"claude-code\",\n \"codex\",\n \"pi\",\n];\n\nexport function registerBuiltinAgentHarnesses(): void {\n for (const runtime of AI_SDK_HARNESS_RUNTIMES) {\n const adapter = createAiSdkHarnessAdapter({ runtime });\n registerAgentHarness({\n name: adapter.name,\n label: adapter.label,\n description: adapter.description,\n installPackage: adapter.installPackage,\n capabilities: adapter.capabilities,\n create: (config) =>\n createAiSdkHarnessAdapter({\n runtime,\n ...(config ?? {}),\n } as Parameters<typeof createAiSdkHarnessAdapter>[0]),\n });\n }\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type { AgentHarnessAdapter, AgentHarnessApproval, AgentHarnessCapabilities, AgentHarnessContinueInput, AgentHarnessCreateSessionOptions, AgentHarnessEvent, AgentHarnessMessage, AgentHarnessPermissionMode, AgentHarnessSession, AgentHarnessTurnInput, } from "./types.js";
|
|
2
|
+
export { agentHarnessEventToAgentChatEvents, stringifyResult as stringifyAgentHarnessResult, } from "./translate.js";
|
|
3
|
+
export { getAgentHarnessEntry, isAgentHarnessPackageInstalled, listAgentHarnesses, registerAgentHarness, resolveAgentHarness, type AgentHarnessEntry, } from "./registry.js";
|
|
4
|
+
export { ensureAgentHarnessSessionTables, getAgentHarnessSession, getAgentHarnessSessionByRunId, getLatestAgentHarnessSessionForThread, listAgentHarnessSessions, markAgentHarnessSessionStopped, saveAgentHarnessSession, updateAgentHarnessSession, type AgentHarnessSessionStatus, type SaveAgentHarnessSessionInput, type StoredAgentHarnessSession, } from "./store.js";
|
|
5
|
+
export { sendAgentHarnessEvent, startAgentHarnessRun, type StartAgentHarnessRunOptions, } from "./runner.js";
|
|
6
|
+
export { aiSdkHarnessPartToEvents, createAiSdkHarnessAdapter, type AiSdkHarnessAdapterOptions, type AiSdkHarnessRuntime, } from "./ai-sdk-adapter.js";
|
|
7
|
+
export { registerBuiltinAgentHarnesses } from "./builtin.js";
|
|
8
|
+
export { agentHarnessBackgroundAgentController, createAgentHarnessBackgroundAgentController, getAgentHarnessBackgroundRun, listAgentHarnessBackgroundRuns, listAgentHarnessBackgroundTranscriptEvents, stopAgentHarnessBackgroundRun, } from "./background.js";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent/harness/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,mBAAmB,EACnB,oBAAoB,EACpB,wBAAwB,EACxB,yBAAyB,EACzB,gCAAgC,EAChC,iBAAiB,EACjB,mBAAmB,EACnB,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,kCAAkC,EAClC,eAAe,IAAI,2BAA2B,GAC/C,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,oBAAoB,EACpB,8BAA8B,EAC9B,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,KAAK,iBAAiB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,+BAA+B,EAC/B,sBAAsB,EACtB,6BAA6B,EAC7B,qCAAqC,EACrC,wBAAwB,EACxB,8BAA8B,EAC9B,uBAAuB,EACvB,yBAAyB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,GAC/B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,KAAK,2BAA2B,GACjC,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,KAAK,0BAA0B,EAC/B,KAAK,mBAAmB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EACL,qCAAqC,EACrC,2CAA2C,EAC3C,4BAA4B,EAC5B,8BAA8B,EAC9B,0CAA0C,EAC1C,6BAA6B,GAC9B,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { agentHarnessEventToAgentChatEvents, stringifyResult as stringifyAgentHarnessResult, } from "./translate.js";
|
|
2
|
+
export { getAgentHarnessEntry, isAgentHarnessPackageInstalled, listAgentHarnesses, registerAgentHarness, resolveAgentHarness, } from "./registry.js";
|
|
3
|
+
export { ensureAgentHarnessSessionTables, getAgentHarnessSession, getAgentHarnessSessionByRunId, getLatestAgentHarnessSessionForThread, listAgentHarnessSessions, markAgentHarnessSessionStopped, saveAgentHarnessSession, updateAgentHarnessSession, } from "./store.js";
|
|
4
|
+
export { sendAgentHarnessEvent, startAgentHarnessRun, } from "./runner.js";
|
|
5
|
+
export { aiSdkHarnessPartToEvents, createAiSdkHarnessAdapter, } from "./ai-sdk-adapter.js";
|
|
6
|
+
export { registerBuiltinAgentHarnesses } from "./builtin.js";
|
|
7
|
+
export { agentHarnessBackgroundAgentController, createAgentHarnessBackgroundAgentController, getAgentHarnessBackgroundRun, listAgentHarnessBackgroundRuns, listAgentHarnessBackgroundTranscriptEvents, stopAgentHarnessBackgroundRun, } from "./background.js";
|
|
8
|
+
//# sourceMappingURL=index.js.map
|