@aiden-ade/sandbox-agent 0.1.15 → 0.1.17

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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Aiden Sandbox Agent
3
+ * Runs inside E2B sandbox, connects to WS server, executes CoreAgent.
4
+ */
5
+ import { runSandbox } from "./sandbox.js";
6
+ import { AGENT_VERSION } from "./version.js";
7
+ // Support `aiden-agent --version` for version detection without starting the agent
8
+ if (process.argv.includes("--version")) {
9
+ process.stdout.write(`${AGENT_VERSION}\n`);
10
+ process.exit(0);
11
+ }
12
+ const wsUrl = process.env.AIDEN_WS_URL;
13
+ const sessionId = process.env.AIDEN_SESSION_ID;
14
+ const taskId = process.env.AIDEN_TASK_ID;
15
+ const sessionToken = process.env.AIDEN_SESSION_TOKEN;
16
+ const task = process.env.AIDEN_TASK;
17
+ const teamId = process.env.AIDEN_TEAM_ID || undefined;
18
+ const projectPath = process.env.AIDEN_PROJECT_PATH || "/home/user/workspace";
19
+ const backendKind = process.env.AIDEN_BACKEND_KIND || "claude_cli";
20
+ const agentId = process.env.AIDEN_AGENT_ID || undefined;
21
+ const agentPrompt = process.env.AIDEN_AGENT_PROMPT || undefined;
22
+ const mode = process.env.AIDEN_MODE || "agent";
23
+ const model = process.env.AIDEN_MODEL;
24
+ const contextWindow = process.env.AIDEN_CONTEXT_WINDOW || undefined;
25
+ const effortLevel = process.env.AIDEN_EFFORT_LEVEL || undefined;
26
+ const providerSessionId = process.env.AIDEN_PROVIDER_SESSION_ID || undefined;
27
+ if (!wsUrl || !sessionId || !taskId || !sessionToken || task == null) {
28
+ console.error("[aiden-agent] Missing required env vars: AIDEN_WS_URL, AIDEN_SESSION_ID, AIDEN_TASK_ID, AIDEN_SESSION_TOKEN, AIDEN_TASK");
29
+ process.exit(1);
30
+ }
31
+ console.info("[aiden-agent] Starting", { sessionId, taskId, projectPath, backendKind, agentId, mode, model, version: AGENT_VERSION });
32
+ runSandbox({
33
+ wsUrl,
34
+ sessionId,
35
+ taskId,
36
+ sessionToken,
37
+ task,
38
+ teamId,
39
+ projectPath,
40
+ backendKind,
41
+ agentId,
42
+ agentPrompt,
43
+ mode,
44
+ model,
45
+ contextWindow,
46
+ effortLevel,
47
+ providerSessionId,
48
+ maxIterations: 50,
49
+ }).catch((error) => {
50
+ console.error("[aiden-agent] Fatal error:", error);
51
+ process.exit(1);
52
+ });
53
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,mFAAmF;AACnF,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;IACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,aAAa,IAAI,CAAC,CAAC;IAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;AACvC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;AAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;AACzC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;AACrD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;AACpC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,SAAS,CAAC;AACtD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,sBAAsB,CAAC;AAC7E,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,YAAY,CAAC;AACnE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,SAAS,CAAC;AACxD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,SAAS,CAAC;AAChE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC;AAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;AACtC,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,SAAS,CAAC;AACpE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,SAAS,CAAC;AAChE,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,SAAS,CAAC;AAE7E,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;IACrE,OAAO,CAAC,KAAK,CAAC,yHAAyH,CAAC,CAAC;IACzI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;AAEtI,UAAU,CAAC;IACT,KAAK;IACL,SAAS;IACT,MAAM;IACN,YAAY;IACZ,IAAI;IACJ,MAAM;IACN,WAAW;IACX,WAAW;IACX,OAAO;IACP,WAAW;IACX,IAAI;IACJ,KAAK;IACL,aAAa;IACb,WAAW;IACX,iBAAiB;IACjB,aAAa,EAAE,EAAE;CAClB,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACjB,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;IACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "@aiden/agent-core";
2
+ //# sourceMappingURL=runtime-backends.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-backends.d.ts","sourceRoot":"","sources":["../src/runtime-backends.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "@aiden/agent-core";
2
+ //# sourceMappingURL=runtime-backends.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-backends.js","sourceRoot":"","sources":["../src/runtime-backends.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,25 @@
1
+ export interface SandboxConfig {
2
+ wsUrl: string;
3
+ sessionId: string;
4
+ taskId: string;
5
+ teamId?: string;
6
+ sessionToken: string;
7
+ task: string;
8
+ projectPath: string;
9
+ backendKind?: string;
10
+ agentId?: string;
11
+ agentPrompt?: string;
12
+ mode?: string;
13
+ model?: string;
14
+ contextWindow?: string | null;
15
+ effortLevel?: string | null;
16
+ providerSessionId?: string;
17
+ currentUser?: {
18
+ id: string;
19
+ name: string | null;
20
+ email: string;
21
+ };
22
+ maxIterations?: number;
23
+ }
24
+ export declare function runSandbox(config: SandboxConfig): Promise<void>;
25
+ //# sourceMappingURL=sandbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../src/sandbox.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACjE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA4LrE"}
@@ -0,0 +1,185 @@
1
+ /**
2
+ * Sandbox mode: connects to WS server, runs CoreAgent in a multi-turn loop.
3
+ * Runs INSIDE the E2B sandbox.
4
+ */
5
+ import { CoreAgent } from "./core-agent.js";
6
+ import { WebPresenter } from "./web-presenter.js";
7
+ import { WSClient } from "./ws-client.js";
8
+ import { AGENT_VERSION } from "./version.js";
9
+ export async function runSandbox(config) {
10
+ let currentTask = config.task;
11
+ let currentImages = [];
12
+ let stopped = false;
13
+ let pendingMessageResolve = null;
14
+ let currentAgent = null;
15
+ // Per-turn enrichment state — updated from each incoming WS payload.
16
+ // Seeded from config for the first turn; overwritten on every subsequent turn.
17
+ let currentTaskMeta = undefined;
18
+ let currentWorkflowTools = undefined;
19
+ let currentMaxIterations = config.maxIterations ?? 50;
20
+ let currentTaskId = config.taskId;
21
+ let currentConversationId = config.sessionId;
22
+ let currentTeamId = config.teamId;
23
+ let currentUser = config.currentUser;
24
+ console.info("[sandbox] Connecting to WS server", { wsUrl: config.wsUrl, sessionId: config.sessionId });
25
+ const wsClient = new WSClient(config.wsUrl, config.sessionId, config.taskId, config.sessionToken, {
26
+ onUserMessage: (payload) => {
27
+ if (pendingMessageResolve) {
28
+ const resolve = pendingMessageResolve;
29
+ pendingMessageResolve = null;
30
+ resolve(payload);
31
+ }
32
+ else {
33
+ console.warn("[sandbox] No handler for user message — dropped");
34
+ }
35
+ },
36
+ onStop: () => {
37
+ console.info("[sandbox] Stop signal received");
38
+ if (currentAgent) {
39
+ const killed = currentAgent.kill();
40
+ if (!killed)
41
+ currentAgent.abort();
42
+ }
43
+ },
44
+ onToolResponse: (toolId, response) => {
45
+ if (currentAgent) {
46
+ const sent = currentAgent.sendToolResponse(toolId, response);
47
+ if (!sent) {
48
+ console.warn("[sandbox] Failed to deliver tool_response to agent stdin", { toolId });
49
+ }
50
+ }
51
+ else {
52
+ console.warn("[sandbox] No active agent for tool_response", { toolId });
53
+ }
54
+ },
55
+ onConnect: () => console.info("[sandbox] WS connected"),
56
+ onDisconnect: (reason) => console.info(`[sandbox] WS disconnected: ${reason}`),
57
+ }, AGENT_VERSION);
58
+ try {
59
+ await wsClient.waitForConnection();
60
+ }
61
+ catch (error) {
62
+ console.error("[sandbox] Failed to connect to WS server:", error.message);
63
+ process.exit(1);
64
+ }
65
+ const presenter = new WebPresenter(wsClient, config.sessionId);
66
+ presenter.setSuppressSessionLifecycle(true);
67
+ let lastProviderSessionId = config.providerSessionId;
68
+ let activeBackendKind = config.backendKind || "claude_cli";
69
+ let activeAgentId = config.agentId;
70
+ let activeAgentPrompt = config.agentPrompt;
71
+ let activeModel = config.model;
72
+ let activeContextWindow = config.contextWindow;
73
+ let activeEffortLevel = config.effortLevel;
74
+ let activeMode = config.mode || "agent";
75
+ while (!stopped) {
76
+ if (currentTask?.trim()) {
77
+ const agent = new CoreAgent(presenter, {
78
+ backendKind: activeBackendKind,
79
+ });
80
+ currentAgent = agent;
81
+ let result;
82
+ try {
83
+ result = await agent.run({
84
+ task: currentTask,
85
+ maxIterations: currentMaxIterations,
86
+ teamPath: config.projectPath,
87
+ cwd: config.projectPath,
88
+ backendKind: activeBackendKind,
89
+ agentId: activeAgentId,
90
+ agentPrompt: activeAgentPrompt,
91
+ mode: activeMode,
92
+ selectedModel: activeModel,
93
+ selectedContextWindow: activeContextWindow ?? null,
94
+ selectedEffortLevel: activeEffortLevel ?? null,
95
+ providerSessionId: lastProviderSessionId ?? undefined,
96
+ taskMeta: currentTaskMeta,
97
+ taskId: currentTaskId,
98
+ conversationId: currentConversationId,
99
+ teamId: currentTeamId,
100
+ currentUser,
101
+ workflowTools: currentWorkflowTools,
102
+ images: currentImages.length > 0
103
+ ? currentImages.map((img) => ({
104
+ id: img.id,
105
+ data: img.data,
106
+ mimeType: img.mimeType,
107
+ filename: img.filename,
108
+ width: 0,
109
+ height: 0,
110
+ }))
111
+ : undefined,
112
+ });
113
+ }
114
+ catch (error) {
115
+ const errorMessage = error instanceof Error ? error.message : String(error);
116
+ console.error("[sandbox] Agent run failed:", errorMessage);
117
+ result = { success: false, summary: "Agent run failed", filesModified: [], planFilesCreated: [], iterations: 0, error: errorMessage };
118
+ }
119
+ currentAgent = null;
120
+ if (result?.providerSessionId) {
121
+ lastProviderSessionId = result.providerSessionId;
122
+ }
123
+ if (stopped)
124
+ break;
125
+ }
126
+ // Wait for next user message
127
+ const nextPayload = await new Promise((resolve) => {
128
+ pendingMessageResolve = resolve;
129
+ });
130
+ if (nextPayload === null || stopped) {
131
+ break;
132
+ }
133
+ currentTask = nextPayload.text;
134
+ currentImages = nextPayload.images ?? [];
135
+ if (nextPayload.providerSessionId) {
136
+ lastProviderSessionId = nextPayload.providerSessionId;
137
+ }
138
+ if (nextPayload.backendKind) {
139
+ activeBackendKind = nextPayload.backendKind;
140
+ }
141
+ if (nextPayload.agentId !== undefined) {
142
+ activeAgentId = nextPayload.agentId;
143
+ }
144
+ if (nextPayload.agentPrompt !== undefined) {
145
+ activeAgentPrompt = nextPayload.agentPrompt;
146
+ }
147
+ if (nextPayload.selectedModel) {
148
+ activeModel = nextPayload.selectedModel;
149
+ }
150
+ if (nextPayload.selectedContextWindow !== undefined) {
151
+ activeContextWindow = nextPayload.selectedContextWindow;
152
+ }
153
+ if (nextPayload.selectedEffortLevel !== undefined) {
154
+ activeEffortLevel = nextPayload.selectedEffortLevel;
155
+ }
156
+ if (nextPayload.mode) {
157
+ activeMode = nextPayload.mode;
158
+ }
159
+ // Update per-turn enrichment fields from the incoming payload
160
+ if (nextPayload.taskMeta !== undefined) {
161
+ currentTaskMeta = nextPayload.taskMeta;
162
+ }
163
+ if (nextPayload.workflowTools !== undefined) {
164
+ currentWorkflowTools = nextPayload.workflowTools;
165
+ }
166
+ if (nextPayload.maxIterations !== undefined) {
167
+ currentMaxIterations = nextPayload.maxIterations;
168
+ }
169
+ if (nextPayload.taskId !== undefined) {
170
+ currentTaskId = nextPayload.taskId;
171
+ }
172
+ if (nextPayload.conversationId !== undefined) {
173
+ currentConversationId = nextPayload.conversationId;
174
+ }
175
+ if (nextPayload.currentUser !== undefined) {
176
+ currentUser = nextPayload.currentUser;
177
+ }
178
+ if (nextPayload.teamId !== undefined) {
179
+ currentTeamId = nextPayload.teamId;
180
+ }
181
+ }
182
+ presenter.setSuppressSessionLifecycle(false);
183
+ wsClient.close();
184
+ }
185
+ //# sourceMappingURL=sandbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../src/sandbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Re-exports from the canonical shared agent types.
3
+ * Single source of truth: packages/shared/src/agent/types.ts
4
+ */
5
+ export * from "@aiden/shared/agent";
6
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,qBAAqB,CAAC"}
package/dist/types.js ADDED
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Re-exports from the canonical shared agent types.
3
+ * Single source of truth: packages/shared/src/agent/types.ts
4
+ */
5
+ export * from "@aiden/shared/agent";
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,15 @@
1
+ export interface UpdatePayload {
2
+ devMode: boolean;
3
+ version?: string;
4
+ }
5
+ /**
6
+ * Install the new agent version via npm.
7
+ * Returns true if the install succeeded.
8
+ */
9
+ export declare function installUpdate(payload: UpdatePayload): Promise<boolean>;
10
+ /**
11
+ * Spawn a new agent process with the same env vars, then exit this process.
12
+ * Preserves the provider session ID so the new agent can resume Claude context.
13
+ */
14
+ export declare function respawnAgent(lastProviderSessionId?: string): void;
15
+ //# sourceMappingURL=updater.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updater.d.ts","sourceRoot":"","sources":["../src/updater.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAmB5E;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAmBjE"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Self-update logic for the sandbox agent.
3
+ * In prod/staging, installs the new version from npm.
4
+ */
5
+ import { execSync, spawn } from "node:child_process";
6
+ const DEFAULT_PATH = "/home/user/.local/node/bin:/home/user/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin";
7
+ /**
8
+ * Install the new agent version via npm.
9
+ * Returns true if the install succeeded.
10
+ */
11
+ export async function installUpdate(payload) {
12
+ const version = payload.version ?? "latest";
13
+ if (!/^[\w.\-+]+$/.test(version)) {
14
+ console.error(`[updater] Refusing to install: invalid version string "${version}"`);
15
+ return false;
16
+ }
17
+ try {
18
+ console.info(`[updater] Installing @aiden-ade/sandbox-agent@${version} via npm`);
19
+ execSync(`npm install -g @aiden-ade/sandbox-agent@${version}`, {
20
+ timeout: 60_000,
21
+ env: { ...process.env, PATH: DEFAULT_PATH },
22
+ stdio: "pipe",
23
+ });
24
+ console.info("[updater] npm install complete");
25
+ return true;
26
+ }
27
+ catch (error) {
28
+ console.error("[updater] npm install failed:", error.message);
29
+ return false;
30
+ }
31
+ }
32
+ /**
33
+ * Spawn a new agent process with the same env vars, then exit this process.
34
+ * Preserves the provider session ID so the new agent can resume Claude context.
35
+ */
36
+ export function respawnAgent(lastProviderSessionId) {
37
+ const env = { ...process.env };
38
+ if (lastProviderSessionId) {
39
+ env.AIDEN_PROVIDER_SESSION_ID = lastProviderSessionId;
40
+ }
41
+ console.info("[updater] Spawning new agent process");
42
+ const child = spawn("aiden-agent", [], {
43
+ detached: true,
44
+ stdio: "ignore",
45
+ env: { ...env, PATH: DEFAULT_PATH },
46
+ });
47
+ child.unref();
48
+ // Give the new process a moment to start before we exit
49
+ setTimeout(() => {
50
+ console.info("[updater] Old agent exiting after respawn");
51
+ process.exit(0);
52
+ }, 500);
53
+ }
54
+ //# sourceMappingURL=updater.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updater.js","sourceRoot":"","sources":["../src/updater.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,YAAY,GAAG,+GAA+G,CAAC;AAOrI;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAsB;IACxD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC;IAC5C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,0DAA0D,OAAO,GAAG,CAAC,CAAC;QACpF,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,iDAAiD,OAAO,UAAU,CAAC,CAAC;QACjF,QAAQ,CAAC,2CAA2C,OAAO,EAAE,EAAE;YAC7D,OAAO,EAAE,MAAM;YACf,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE;YAC3C,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QACzE,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,qBAA8B;IACzD,MAAM,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/B,IAAI,qBAAqB,EAAE,CAAC;QAC1B,GAAG,CAAC,yBAAyB,GAAG,qBAAqB,CAAC;IACxD,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,EAAE,EAAE,EAAE;QACrC,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,QAAQ;QACf,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE;KACpC,CAAC,CAAC;IACH,KAAK,CAAC,KAAK,EAAE,CAAC;IAEd,wDAAwD;IACxD,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,EAAE,GAAG,CAAC,CAAC;AACV,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const AGENT_VERSION = "0.1.8";
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,UAAU,CAAC"}
@@ -0,0 +1,2 @@
1
+ export const AGENT_VERSION = "0.1.8";
2
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC"}
@@ -0,0 +1,33 @@
1
+ import type { WSClient } from "./ws-client.js";
2
+ import type { AgentConfig, AgentResult, ExitPlanModeInput, UsageUpdate } from "./types.js";
3
+ import type { AgentPresenter } from "./types.js";
4
+ export declare class WebPresenter implements AgentPresenter {
5
+ private wsClient;
6
+ private conversationId;
7
+ private suppressSessionLifecycle;
8
+ constructor(wsClient: WSClient, conversationId: string);
9
+ setSuppressSessionLifecycle(suppress: boolean): void;
10
+ onStart(config: AgentConfig): void;
11
+ onLog(message: string): void;
12
+ onAssistantText(text: string): void;
13
+ onThinking(text: string): void;
14
+ onToolUse(tool: string, input: unknown, toolId: string): void;
15
+ onToolResult(toolId: string, content: string, isError?: boolean): void;
16
+ onTurnComplete(content: unknown[]): void;
17
+ onUsageUpdate(usage: UsageUpdate): void;
18
+ onAskUser(id: string, questions: unknown[]): void;
19
+ onTodoWrite(todos: unknown[]): void;
20
+ onExitPlanMode(id: string, input: ExitPlanModeInput, planFilePath?: string): void;
21
+ onCheckpoint(id: string): void;
22
+ onActivity(status: string): void;
23
+ onOpenBrowserTab(browserId: string, url?: string): void;
24
+ recordRawTranscript(): void;
25
+ onError(message: string, _isAgentError?: boolean): void;
26
+ onComplete(result: AgentResult): void;
27
+ /**
28
+ * Manually emit session lifecycle events and close.
29
+ * Called after the multi-turn loop exits.
30
+ */
31
+ emitSessionEnd(result: AgentResult): Promise<void>;
32
+ }
33
+ //# sourceMappingURL=web-presenter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-presenter.d.ts","sourceRoot":"","sources":["../src/web-presenter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAc,WAAW,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACvG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,YAAa,YAAW,cAAc;IACjD,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,wBAAwB,CAAS;gBAE7B,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM;IAKtD,2BAA2B,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAIpD,OAAO,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAIlC,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI5B,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAInC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI9B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAI7D,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI;IAUtE,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI;IAIxC,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAIvC,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI;IAIjD,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI;IAInC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI;IAIjF,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI9B,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIhC,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAIvD,mBAAmB,IAAI,IAAI;IAI3B,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,OAAO,GAAG,IAAI;IAQvD,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAkBrC;;;OAGG;IACG,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAQzD"}
@@ -0,0 +1,100 @@
1
+ export class WebPresenter {
2
+ wsClient;
3
+ conversationId;
4
+ suppressSessionLifecycle = false;
5
+ constructor(wsClient, conversationId) {
6
+ this.wsClient = wsClient;
7
+ this.conversationId = conversationId;
8
+ }
9
+ setSuppressSessionLifecycle(suppress) {
10
+ this.suppressSessionLifecycle = suppress;
11
+ }
12
+ onStart(config) {
13
+ this.wsClient.emitEvent({ type: "start", task: config.task, ts: Date.now() });
14
+ }
15
+ onLog(message) {
16
+ console.error(message);
17
+ }
18
+ onAssistantText(text) {
19
+ this.wsClient.emitEvent({ type: "text", text, ts: Date.now() });
20
+ }
21
+ onThinking(text) {
22
+ this.wsClient.emitEvent({ type: "thinking", text, ts: Date.now() });
23
+ }
24
+ onToolUse(tool, input, toolId) {
25
+ this.wsClient.emitEvent({ type: "tool_use", id: toolId, name: tool, input, ts: Date.now() });
26
+ }
27
+ onToolResult(toolId, content, isError) {
28
+ this.wsClient.emitEvent({
29
+ type: "tool_result",
30
+ id: toolId,
31
+ content,
32
+ ts: Date.now(),
33
+ ...(isError ? { is_error: true } : {}),
34
+ });
35
+ }
36
+ onTurnComplete(content) {
37
+ this.wsClient.emitEvent({ type: "turn_complete", content, ts: Date.now() });
38
+ }
39
+ onUsageUpdate(usage) {
40
+ this.wsClient.emitEvent({ type: "usage", usage });
41
+ }
42
+ onAskUser(id, questions) {
43
+ this.wsClient.emitEvent({ type: "ask_user", id, questions });
44
+ }
45
+ onTodoWrite(todos) {
46
+ this.wsClient.emitEvent({ type: "todo_write", todos });
47
+ }
48
+ onExitPlanMode(id, input, planFilePath) {
49
+ this.wsClient.emitEvent({ type: "exit_plan_mode", id, input, ...(planFilePath ? { planFilePath } : {}) });
50
+ }
51
+ onCheckpoint(id) {
52
+ this.wsClient.emitEvent({ type: "checkpoint", id });
53
+ }
54
+ onActivity(status) {
55
+ this.wsClient.emitEvent({ type: "activity", status, ts: Date.now() });
56
+ }
57
+ onOpenBrowserTab(browserId, url) {
58
+ this.wsClient.emitEvent({ type: "open_browser_tab", browserId, ...(url ? { url } : {}) });
59
+ }
60
+ recordRawTranscript() {
61
+ // No-op for sandbox — raw transcripts stay in the container
62
+ }
63
+ onError(message, _isAgentError) {
64
+ this.wsClient.emitEvent({ type: "error", message });
65
+ if (!this.suppressSessionLifecycle) {
66
+ this.wsClient.emitEvent({ type: "session_error", error: message });
67
+ this.wsClient.close();
68
+ }
69
+ }
70
+ onComplete(result) {
71
+ // Always send query_complete so the server persists query content
72
+ this.wsClient.emitEvent({ type: "query_complete", result, ts: Date.now() });
73
+ // In multi-turn mode (suppressSessionLifecycle=true), skip session lifecycle
74
+ if (this.suppressSessionLifecycle) {
75
+ return;
76
+ }
77
+ // Single-turn mode: also send session lifecycle event and close
78
+ if (result.success) {
79
+ this.wsClient.emitEvent({ type: "session_complete", result });
80
+ }
81
+ else {
82
+ this.wsClient.emitEvent({ type: "session_error", error: result.error || "Unknown error" });
83
+ }
84
+ this.wsClient.close();
85
+ }
86
+ /**
87
+ * Manually emit session lifecycle events and close.
88
+ * Called after the multi-turn loop exits.
89
+ */
90
+ async emitSessionEnd(result) {
91
+ if (result.success) {
92
+ this.wsClient.emitEvent({ type: "session_complete", result });
93
+ }
94
+ else {
95
+ this.wsClient.emitEvent({ type: "session_error", error: result.error || "Unknown error" });
96
+ }
97
+ this.wsClient.close();
98
+ }
99
+ }
100
+ //# sourceMappingURL=web-presenter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-presenter.js","sourceRoot":"","sources":["../src/web-presenter.ts"],"names":[],"mappings":"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"}