@aiden-ade/sandbox-agent 0.1.15 → 0.1.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/aiden-system-prompt.d.ts +6 -0
  2. package/dist/aiden-system-prompt.d.ts.map +1 -0
  3. package/dist/aiden-system-prompt.js +6 -0
  4. package/dist/aiden-system-prompt.js.map +1 -0
  5. package/dist/core-agent.d.ts +33 -0
  6. package/dist/core-agent.d.ts.map +1 -0
  7. package/dist/core-agent.js +218 -0
  8. package/dist/core-agent.js.map +1 -0
  9. package/dist/index.cjs +332 -42
  10. package/dist/index.d.ts +2 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +53 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/runtime-backends.d.ts +2 -0
  15. package/dist/runtime-backends.d.ts.map +1 -0
  16. package/dist/runtime-backends.js +2 -0
  17. package/dist/runtime-backends.js.map +1 -0
  18. package/dist/sandbox.d.ts +25 -0
  19. package/dist/sandbox.d.ts.map +1 -0
  20. package/dist/sandbox.js +185 -0
  21. package/dist/sandbox.js.map +1 -0
  22. package/dist/types.d.ts +6 -0
  23. package/dist/types.d.ts.map +1 -0
  24. package/dist/types.js +6 -0
  25. package/dist/types.js.map +1 -0
  26. package/dist/updater.d.ts +15 -0
  27. package/dist/updater.d.ts.map +1 -0
  28. package/dist/updater.js +50 -0
  29. package/dist/updater.js.map +1 -0
  30. package/dist/version.d.ts +2 -0
  31. package/dist/version.d.ts.map +1 -0
  32. package/dist/version.js +2 -0
  33. package/dist/version.js.map +1 -0
  34. package/dist/web-presenter.d.ts +33 -0
  35. package/dist/web-presenter.d.ts.map +1 -0
  36. package/dist/web-presenter.js +100 -0
  37. package/dist/web-presenter.js.map +1 -0
  38. package/dist/ws-client.d.ts +79 -0
  39. package/dist/ws-client.d.ts.map +1 -0
  40. package/dist/ws-client.js +74 -0
  41. package/dist/ws-client.js.map +1 -0
  42. package/package.json +11 -12
@@ -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,CAe5E;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAmBjE"}
@@ -0,0 +1,50 @@
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
+ try {
14
+ console.info(`[updater] Installing @aiden-ade/sandbox-agent@${version} via npm`);
15
+ execSync(`npm install -g @aiden-ade/sandbox-agent@${version}`, {
16
+ timeout: 60_000,
17
+ env: { ...process.env, PATH: DEFAULT_PATH },
18
+ stdio: "pipe",
19
+ });
20
+ console.info("[updater] npm install complete");
21
+ return true;
22
+ }
23
+ catch (error) {
24
+ console.error("[updater] npm install failed:", error.message);
25
+ return false;
26
+ }
27
+ }
28
+ /**
29
+ * Spawn a new agent process with the same env vars, then exit this process.
30
+ * Preserves the provider session ID so the new agent can resume Claude context.
31
+ */
32
+ export function respawnAgent(lastProviderSessionId) {
33
+ const env = { ...process.env };
34
+ if (lastProviderSessionId) {
35
+ env.AIDEN_PROVIDER_SESSION_ID = lastProviderSessionId;
36
+ }
37
+ console.info("[updater] Spawning new agent process");
38
+ const child = spawn("aiden-agent", [], {
39
+ detached: true,
40
+ stdio: "ignore",
41
+ env: { ...env, PATH: DEFAULT_PATH },
42
+ });
43
+ child.unref();
44
+ // Give the new process a moment to start before we exit
45
+ setTimeout(() => {
46
+ console.info("[updater] Old agent exiting after respawn");
47
+ process.exit(0);
48
+ }, 500);
49
+ }
50
+ //# 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;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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"}
@@ -0,0 +1,79 @@
1
+ import type { AgentEvent } from "./types.js";
2
+ export interface ResolvedImage {
3
+ id: string;
4
+ data: string;
5
+ mimeType: string;
6
+ filename: string;
7
+ }
8
+ export interface UserMessagePayload {
9
+ text: string;
10
+ images?: ResolvedImage[];
11
+ providerSessionId?: string;
12
+ backendKind?: string;
13
+ agentId?: string;
14
+ agentPrompt?: string;
15
+ selectedModel?: string;
16
+ selectedContextWindow?: string | null;
17
+ selectedEffortLevel?: string | null;
18
+ mode?: string;
19
+ /** Structured task metadata for system prompt injection. */
20
+ taskMeta?: {
21
+ id: string;
22
+ title: string;
23
+ description: string | null;
24
+ status: string;
25
+ priority: string;
26
+ labels: string[] | null;
27
+ assignees: Array<{
28
+ name: string | null;
29
+ email: string;
30
+ }>;
31
+ descriptionAttachmentIds?: Array<{
32
+ id: string;
33
+ filename: string;
34
+ }>;
35
+ };
36
+ /** Workflow tool allowlist (present when triggered from a workflow). */
37
+ workflowTools?: Array<{
38
+ type: string;
39
+ id: string;
40
+ }>;
41
+ /** Agent run ID for status tracking. */
42
+ runId?: string;
43
+ /** Message ID that triggered this run. */
44
+ messageId?: string;
45
+ /** Maximum number of agent iterations. */
46
+ maxIterations?: number;
47
+ /** Task ID for MCP artifact creation. */
48
+ taskId?: string;
49
+ /** Conversation ID for MCP artifact creation. */
50
+ conversationId?: string;
51
+ /** Role attached to this conversation. */
52
+ /** Team ID of the active team context — injected into system prompt for MCP calls. */
53
+ teamId?: string;
54
+ /** User who initiated the run. */
55
+ currentUser?: {
56
+ id: string;
57
+ name: string | null;
58
+ email: string;
59
+ };
60
+ }
61
+ export interface WSClientCallbacks {
62
+ onUserMessage: (payload: UserMessagePayload) => void;
63
+ onStop: () => void;
64
+ onToolResponse?: (toolId: string, response: string) => void;
65
+ onConnect?: () => void;
66
+ onDisconnect?: (reason: string) => void;
67
+ }
68
+ export declare class WSClient {
69
+ private socket;
70
+ constructor(wsUrl: string, sessionId: string, // conversationId
71
+ taskId: string, token: string, // sandboxSessionToken
72
+ callbacks: WSClientCallbacks, agentVersion?: string);
73
+ emitEvent(event: AgentEvent): void;
74
+ waitForConnection(timeoutMs?: number): Promise<void>;
75
+ get connected(): boolean;
76
+ close(): void;
77
+ private setupListeners;
78
+ }
79
+ //# sourceMappingURL=ws-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws-client.d.ts","sourceRoot":"","sources":["../src/ws-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import { io } from "socket.io-client";
2
+ export class WSClient {
3
+ socket;
4
+ constructor(wsUrl, sessionId, // conversationId
5
+ taskId, token, // sandboxSessionToken
6
+ callbacks, agentVersion) {
7
+ this.socket = io(wsUrl, {
8
+ query: { type: "agent", sessionId, taskId, agentVersion: agentVersion ?? "" },
9
+ auth: { token },
10
+ transports: ["websocket"],
11
+ reconnection: true,
12
+ reconnectionAttempts: Infinity,
13
+ reconnectionDelay: 1000,
14
+ reconnectionDelayMax: 5000,
15
+ timeout: 20_000,
16
+ upgrade: false,
17
+ extraHeaders: { "ngrok-skip-browser-warning": "1" },
18
+ });
19
+ this.setupListeners(callbacks);
20
+ }
21
+ emitEvent(event) {
22
+ this.socket.emit("agent_event", event);
23
+ }
24
+ waitForConnection(timeoutMs = 15000) {
25
+ return new Promise((resolve, reject) => {
26
+ if (this.socket.connected) {
27
+ resolve();
28
+ return;
29
+ }
30
+ const timeout = setTimeout(() => reject(new Error(`WSClient connection timeout after ${timeoutMs}ms`)), timeoutMs);
31
+ this.socket.once("connect", () => { clearTimeout(timeout); resolve(); });
32
+ this.socket.once("connect_error", (err) => { clearTimeout(timeout); reject(new Error(`WSClient connection failed: ${err.message}`)); });
33
+ });
34
+ }
35
+ get connected() { return this.socket.connected; }
36
+ close() { this.socket.disconnect(); }
37
+ setupListeners(callbacks) {
38
+ this.socket.on("connect", () => { console.debug("[WSClient] Connected to WS server"); callbacks.onConnect?.(); });
39
+ this.socket.on("disconnect", (reason) => { console.debug(`[WSClient] Disconnected: ${reason}`); callbacks.onDisconnect?.(reason); });
40
+ this.socket.on("connect_error", (error) => { console.warn(`[WSClient] Connection error: ${error.message}`); });
41
+ this.socket.on("user_message", (data, ack) => {
42
+ ack?.({ ok: true });
43
+ callbacks.onUserMessage({
44
+ text: data.text,
45
+ images: data.images,
46
+ providerSessionId: data.providerSessionId,
47
+ backendKind: data.backendKind,
48
+ agentId: data.agentId,
49
+ agentPrompt: data.agentPrompt,
50
+ selectedModel: data.selectedModel,
51
+ selectedContextWindow: data.selectedContextWindow,
52
+ selectedEffortLevel: data.selectedEffortLevel,
53
+ mode: data.mode,
54
+ taskMeta: data.taskMeta,
55
+ workflowTools: data.workflowTools,
56
+ runId: data.runId,
57
+ messageId: data.messageId,
58
+ maxIterations: data.maxIterations,
59
+ taskId: data.taskId,
60
+ conversationId: data.conversationId,
61
+ teamId: data.teamId,
62
+ currentUser: data.currentUser,
63
+ });
64
+ });
65
+ this.socket.on("stop", () => { callbacks.onStop(); });
66
+ this.socket.on("tool_response", (data) => {
67
+ if (data?.toolId && typeof data.response === "string") {
68
+ callbacks.onToolResponse?.(data.toolId, data.response);
69
+ }
70
+ });
71
+ this.socket.on("error", (data) => { console.error(`[WSClient] Server error: ${data.message} (${data.code})`); });
72
+ }
73
+ }
74
+ //# sourceMappingURL=ws-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws-client.js","sourceRoot":"","sources":["../src/ws-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAe,MAAM,kBAAkB,CAAC;AA2DnD,MAAM,OAAO,QAAQ;IACX,MAAM,CAAS;IAEvB,YACE,KAAa,EACb,SAAiB,EAAK,iBAAiB;IACvC,MAAc,EACd,KAAa,EAAS,sBAAsB;IAC5C,SAA4B,EAC5B,YAAqB;QAErB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,KAAK,EAAE;YACtB,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,IAAI,EAAE,EAAE;YAC7E,IAAI,EAAE,EAAE,KAAK,EAAE;YACf,UAAU,EAAE,CAAC,WAAW,CAAC;YACzB,YAAY,EAAE,IAAI;YAClB,oBAAoB,EAAE,QAAQ;YAC9B,iBAAiB,EAAE,IAAI;YACvB,oBAAoB,EAAE,IAAI;YAC1B,OAAO,EAAE,MAAM;YACf,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,EAAE,4BAA4B,EAAE,GAAG,EAAE;SACpD,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;IAED,SAAS,CAAC,KAAiB;QACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,iBAAiB,CAAC,SAAS,GAAG,KAAK;QACjC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBAAC,OAAO,EAAE,CAAC;gBAAC,OAAO;YAAC,CAAC;YACjD,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,qCAAqC,SAAS,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YACnH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACzE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1I,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,SAAS,KAAc,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IAC1D,KAAK,KAAW,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAEnC,cAAc,CAAC,SAA4B;QACjD,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAClH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,4BAA4B,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,gCAAgC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/G,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,IAAwB,EAAE,GAA2D,EAAE,EAAE;YACvH,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YACpB,SAAS,CAAC,aAAa,CAAC;gBACtB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;gBACzC,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;gBACjD,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;gBAC7C,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,WAAW,EAAE,IAAI,CAAC,WAAW;aAC9B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,IAA0C,EAAE,EAAE;YAC7E,IAAI,IAAI,EAAE,MAAM,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACtD,SAAS,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzD,CAAC;QACH,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAwC,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,4BAA4B,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvJ,CAAC;CACF"}