@markusylisiurunen/tau 0.2.129 → 0.3.1

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 (208) hide show
  1. package/README.md +111 -59
  2. package/dist/core/async/cli.js +12 -2
  3. package/dist/core/async/cli.js.map +1 -1
  4. package/dist/core/async/http_protocol.js +7 -1
  5. package/dist/core/async/http_protocol.js.map +1 -1
  6. package/dist/core/async/http_server.js +9 -1
  7. package/dist/core/async/http_server.js.map +1 -1
  8. package/dist/core/async/index.js.map +1 -1
  9. package/dist/core/async/session_manager.js +94 -51
  10. package/dist/core/async/session_manager.js.map +1 -1
  11. package/dist/core/cli.js +12 -15
  12. package/dist/core/cli.js.map +1 -1
  13. package/dist/core/commands/registry.js +9 -55
  14. package/dist/core/commands/registry.js.map +1 -1
  15. package/dist/core/config/index.js.map +1 -1
  16. package/dist/core/config/runtime.js +0 -1
  17. package/dist/core/config/runtime.js.map +1 -1
  18. package/dist/core/config/schema.js +102 -17
  19. package/dist/core/config/schema.js.map +1 -1
  20. package/dist/core/debug.js +1 -20
  21. package/dist/core/debug.js.map +1 -1
  22. package/dist/core/diff_review/{session.js → bridge.js} +57 -114
  23. package/dist/core/diff_review/bridge.js.map +1 -0
  24. package/dist/core/diff_review/index.js +2 -3
  25. package/dist/core/diff_review/index.js.map +1 -1
  26. package/dist/core/diff_review/review_thread.js +48 -23
  27. package/dist/core/diff_review/review_thread.js.map +1 -1
  28. package/dist/core/diff_review/snapshot.js +40 -11
  29. package/dist/core/diff_review/snapshot.js.map +1 -1
  30. package/dist/core/events/parser.js +43 -12
  31. package/dist/core/events/parser.js.map +1 -1
  32. package/dist/core/index.js +0 -1
  33. package/dist/core/index.js.map +1 -1
  34. package/dist/core/modes/index.js +1 -2
  35. package/dist/core/modes/index.js.map +1 -1
  36. package/dist/core/modes/rpc_server.js +15 -321
  37. package/dist/core/modes/rpc_server.js.map +1 -1
  38. package/dist/core/modes/websocket_server.js +181 -0
  39. package/dist/core/modes/websocket_server.js.map +1 -0
  40. package/dist/core/personas.js +11 -1
  41. package/dist/core/personas.js.map +1 -1
  42. package/dist/core/runtime/chat_runtime.js +19 -12
  43. package/dist/core/runtime/chat_runtime.js.map +1 -1
  44. package/dist/core/runtime/conversation_turn_runtime.js +16 -1
  45. package/dist/core/runtime/conversation_turn_runtime.js.map +1 -1
  46. package/dist/core/runtime/runtime_bootstrap.js +326 -0
  47. package/dist/core/runtime/runtime_bootstrap.js.map +1 -1
  48. package/dist/core/session/compaction.js +13 -11
  49. package/dist/core/session/compaction.js.map +1 -1
  50. package/dist/core/session/core_session.js +9 -0
  51. package/dist/core/session/core_session.js.map +1 -1
  52. package/dist/core/session/direct_bash.js +34 -0
  53. package/dist/core/session/direct_bash.js.map +1 -0
  54. package/dist/core/session/pruning.js +595 -0
  55. package/dist/core/session/pruning.js.map +1 -0
  56. package/dist/core/session/runner.js +45 -5
  57. package/dist/core/session/runner.js.map +1 -1
  58. package/dist/core/session/session_engine.js +84 -10
  59. package/dist/core/session/session_engine.js.map +1 -1
  60. package/dist/core/static/prompts/diff-review-wrapper.md +1 -1
  61. package/dist/core/subagents/subagent_engine.js +1 -1
  62. package/dist/core/subagents/subagent_engine.js.map +1 -1
  63. package/dist/core/tools/catalog.js.map +1 -1
  64. package/dist/core/tools/diff_review.js +12 -12
  65. package/dist/core/tools/diff_review.js.map +1 -1
  66. package/dist/core/tools/execution_backend.js +9 -2
  67. package/dist/core/tools/execution_backend.js.map +1 -1
  68. package/dist/core/tools/registry.js.map +1 -1
  69. package/dist/core/usage/logs.js.map +1 -1
  70. package/dist/core/utils/context.js +1 -1
  71. package/dist/core/utils/context.js.map +1 -1
  72. package/dist/core/utils/context_builder.js +1 -18
  73. package/dist/core/utils/context_builder.js.map +1 -1
  74. package/dist/core/utils/gemini_speech.js +1 -1
  75. package/dist/core/utils/gemini_speech.js.map +1 -1
  76. package/dist/core/utils/project_files.js +11 -16
  77. package/dist/core/utils/project_files.js.map +1 -1
  78. package/dist/core/utils/spawn_capture.js +2 -2
  79. package/dist/core/utils/spawn_capture.js.map +1 -1
  80. package/dist/core/version.js +1 -1
  81. package/dist/core/version.js.map +1 -1
  82. package/dist/execution/cloudflare_sandbox_execution_environment.js +400 -0
  83. package/dist/execution/cloudflare_sandbox_execution_environment.js.map +1 -0
  84. package/dist/execution/execution_environment.js +24 -0
  85. package/dist/execution/execution_environment.js.map +1 -0
  86. package/dist/execution/fly_sprite_execution_environment.js +559 -0
  87. package/dist/execution/fly_sprite_execution_environment.js.map +1 -0
  88. package/dist/execution/local_execution_environment.js +93 -0
  89. package/dist/execution/local_execution_environment.js.map +1 -0
  90. package/dist/execution/runtime_config_snapshot.js +209 -0
  91. package/dist/execution/runtime_config_snapshot.js.map +1 -0
  92. package/dist/execution/sandbox_tool_helpers.js +55 -0
  93. package/dist/execution/sandbox_tool_helpers.js.map +1 -0
  94. package/dist/execution/tool_backend_execution_environment.js +55 -0
  95. package/dist/execution/tool_backend_execution_environment.js.map +1 -0
  96. package/dist/host/hosted_ephemeral_agent_session.js +286 -0
  97. package/dist/host/hosted_ephemeral_agent_session.js.map +1 -0
  98. package/dist/host/index.js +3 -0
  99. package/dist/host/index.js.map +1 -0
  100. package/dist/host/local_session_host.js +1464 -0
  101. package/dist/host/local_session_host.js.map +1 -0
  102. package/dist/host/session_host.js +2 -0
  103. package/dist/host/session_host.js.map +1 -0
  104. package/dist/host/session_protocol_handler.js +873 -0
  105. package/dist/host/session_protocol_handler.js.map +1 -0
  106. package/dist/main.js +537 -77
  107. package/dist/main.js.map +1 -1
  108. package/dist/protocol/index.d.ts +2 -0
  109. package/dist/protocol/index.js +2 -0
  110. package/dist/protocol/index.js.map +1 -0
  111. package/dist/protocol/session_protocol.d.ts +691 -0
  112. package/dist/protocol/session_protocol.js +2117 -0
  113. package/dist/protocol/session_protocol.js.map +1 -0
  114. package/dist/sdk/client.d.ts +2 -1
  115. package/dist/sdk/client.js +136 -392
  116. package/dist/sdk/client.js.map +1 -1
  117. package/dist/sdk/index.d.ts +7 -4
  118. package/dist/sdk/index.js +4 -2
  119. package/dist/sdk/index.js.map +1 -1
  120. package/dist/sdk/session.d.ts +5 -0
  121. package/dist/sdk/session.js +406 -0
  122. package/dist/sdk/session.js.map +1 -0
  123. package/dist/sdk/types.d.ts +97 -78
  124. package/dist/store/file_session_store.js +157 -0
  125. package/dist/store/file_session_store.js.map +1 -0
  126. package/dist/store/memory_session_store.js +24 -0
  127. package/dist/store/memory_session_store.js.map +1 -0
  128. package/dist/store/session_store.js +32 -0
  129. package/dist/store/session_store.js.map +1 -0
  130. package/dist/transport/errors.d.ts +29 -0
  131. package/dist/{sdk → transport}/errors.js +5 -5
  132. package/dist/transport/errors.js.map +1 -0
  133. package/dist/transport/in_process_session_transport.js +102 -0
  134. package/dist/transport/in_process_session_transport.js.map +1 -0
  135. package/dist/transport/index.d.ts +7 -0
  136. package/dist/transport/index.js +4 -0
  137. package/dist/transport/index.js.map +1 -0
  138. package/dist/transport/pending_session_protocol_requests.js +67 -0
  139. package/dist/transport/pending_session_protocol_requests.js.map +1 -0
  140. package/dist/transport/session_protocol_transport_helpers.js +98 -0
  141. package/dist/transport/session_protocol_transport_helpers.js.map +1 -0
  142. package/dist/transport/session_transport.d.ts +11 -0
  143. package/dist/transport/session_transport.js +2 -0
  144. package/dist/transport/session_transport.js.map +1 -0
  145. package/dist/transport/stdio_session_transport.d.ts +38 -0
  146. package/dist/transport/stdio_session_transport.js +243 -0
  147. package/dist/transport/stdio_session_transport.js.map +1 -0
  148. package/dist/transport/websocket_session_transport.d.ts +52 -0
  149. package/dist/transport/websocket_session_transport.js +235 -0
  150. package/dist/transport/websocket_session_transport.js.map +1 -0
  151. package/dist/tui/chat_controller/assistant_clipboard.js +39 -0
  152. package/dist/tui/chat_controller/assistant_clipboard.js.map +1 -0
  153. package/dist/tui/chat_controller/command_hints.js +43 -0
  154. package/dist/tui/chat_controller/command_hints.js.map +1 -0
  155. package/dist/tui/chat_controller/diff_review_service.js +9 -9
  156. package/dist/tui/chat_controller/diff_review_service.js.map +1 -1
  157. package/dist/tui/chat_controller/diff_review_user_message.js +17 -0
  158. package/dist/tui/chat_controller/diff_review_user_message.js.map +1 -0
  159. package/dist/tui/chat_controller/history_labels.js +8 -0
  160. package/dist/tui/chat_controller/history_labels.js.map +1 -0
  161. package/dist/tui/chat_controller/history_message_model.js +36 -0
  162. package/dist/tui/chat_controller/history_message_model.js.map +1 -0
  163. package/dist/tui/chat_controller/status_format.js +22 -0
  164. package/dist/tui/chat_controller/status_format.js.map +1 -0
  165. package/dist/tui/chat_view.js +0 -1
  166. package/dist/tui/chat_view.js.map +1 -1
  167. package/dist/tui/index.js +1 -1
  168. package/dist/tui/index.js.map +1 -1
  169. package/dist/tui/listen_capture.js +87 -0
  170. package/dist/tui/listen_capture.js.map +1 -0
  171. package/dist/tui/memory_mode.js +23 -0
  172. package/dist/tui/memory_mode.js.map +1 -0
  173. package/dist/tui/session_chat_app.js +227 -0
  174. package/dist/tui/session_chat_app.js.map +1 -0
  175. package/dist/tui/session_chat_controller.js +2176 -0
  176. package/dist/tui/session_chat_controller.js.map +1 -0
  177. package/dist/tui/session_tool_execution_backend.js +170 -0
  178. package/dist/tui/session_tool_execution_backend.js.map +1 -0
  179. package/dist/tui/speech_playback.js +107 -0
  180. package/dist/tui/speech_playback.js.map +1 -0
  181. package/dist/tui/ui/assistant_message.js +27 -21
  182. package/dist/tui/ui/assistant_message.js.map +1 -1
  183. package/dist/tui/ui/chat_container.js +4 -0
  184. package/dist/tui/ui/chat_container.js.map +1 -1
  185. package/dist/tui/ui/custom_editor.js +0 -5
  186. package/dist/tui/ui/custom_editor.js.map +1 -1
  187. package/dist/tui/ui/slash_autocomplete.js +14 -36
  188. package/dist/tui/ui/slash_autocomplete.js.map +1 -1
  189. package/dist/tui/ui/tool_ui_registry.js +21 -0
  190. package/dist/tui/ui/tool_ui_registry.js.map +1 -1
  191. package/package.json +6 -3
  192. package/dist/core/config/bash_commands.js +0 -44
  193. package/dist/core/config/bash_commands.js.map +0 -1
  194. package/dist/core/diff_review/session.js.map +0 -1
  195. package/dist/core/modes/rpc_adapter.js +0 -17
  196. package/dist/core/modes/rpc_adapter.js.map +0 -1
  197. package/dist/core/modes/rpc_protocol.js +0 -500
  198. package/dist/core/modes/rpc_protocol.js.map +0 -1
  199. package/dist/core/session/checkpoint.js +0 -34
  200. package/dist/core/session/checkpoint.js.map +0 -1
  201. package/dist/sdk/errors.d.ts +0 -33
  202. package/dist/sdk/errors.js.map +0 -1
  203. package/dist/tui/app.js +0 -64
  204. package/dist/tui/app.js.map +0 -1
  205. package/dist/tui/chat_controller/session_maintenance_service.js +0 -634
  206. package/dist/tui/chat_controller/session_maintenance_service.js.map +0 -1
  207. package/dist/tui/chat_controller.js +0 -2579
  208. package/dist/tui/chat_controller.js.map +0 -1
@@ -0,0 +1,559 @@
1
+ import { SpritesClient } from "@fly/sprites";
2
+ import { assertFileWithinMaxBytes, buildSandboxGrepDryRunResult, buildSandboxGrepErrorResult, resolveSandboxGrepPaths, } from "./sandbox_tool_helpers.js";
3
+ import { ToolBackendExecutionEnvironment } from "./tool_backend_execution_environment.js";
4
+ const BASH_MAX_CAPTURE_BYTES = 1024 * 1024;
5
+ const DEFAULT_BASE_URL = "https://api.sprites.dev";
6
+ const DEFAULT_HOME = "/home/sprite";
7
+ const HELPER_COMMAND_TIMEOUT_MS = 30_000;
8
+ const COMMAND_STOP_GRACE_MS = 2_000;
9
+ export class FlySpriteExecutionEnvironment extends ToolBackendExecutionEnvironment {
10
+ kind = "fly-sprite";
11
+ constructor(options) {
12
+ super({
13
+ snapshot: {
14
+ kind: "fly-sprite",
15
+ apiId: options.apiId,
16
+ spriteName: options.spriteName,
17
+ cwd: options.cwd,
18
+ home: options.home,
19
+ },
20
+ backend: options.backend,
21
+ toolCatalogOptions: options.toolCatalogOptions,
22
+ });
23
+ }
24
+ }
25
+ export class FlySpriteExecutionEnvironmentResolver {
26
+ apis;
27
+ env;
28
+ createClient;
29
+ toolCatalogOptions;
30
+ constructor(options) {
31
+ this.apis = options.apis;
32
+ this.env = options.env ?? process.env;
33
+ this.createClient =
34
+ options.createClient ?? ((token, clientOptions) => new SpritesClient(token, clientOptions));
35
+ this.toolCatalogOptions = options.toolCatalogOptions;
36
+ }
37
+ async resolve(input) {
38
+ if (input.kind !== "fly-sprite") {
39
+ throw new Error(`unsupported execution environment kind '${input.kind}'`);
40
+ }
41
+ return this.createEnvironment(input);
42
+ }
43
+ canRestore(snapshot) {
44
+ return snapshot.kind === "fly-sprite" && snapshot.apiId in this.apis;
45
+ }
46
+ async restore(snapshot) {
47
+ if (snapshot.kind !== "fly-sprite") {
48
+ throw new Error(`unsupported execution environment kind '${snapshot.kind}'`);
49
+ }
50
+ return this.createEnvironment(snapshot);
51
+ }
52
+ createEnvironment(input) {
53
+ const api = this.apis[input.apiId];
54
+ if (!api) {
55
+ throw new Error(`unknown Fly Sprite API '${input.apiId}'`);
56
+ }
57
+ const token = api.token ?? (api.tokenEnv ? this.env[api.tokenEnv] : undefined);
58
+ if (!token) {
59
+ throw new Error(`Fly Sprite API '${input.apiId}' is missing a token`);
60
+ }
61
+ const client = this.createClient(token, { baseURL: api.baseURL ?? DEFAULT_BASE_URL });
62
+ const backend = createFlySpriteToolExecutionBackend({
63
+ sprite: client.sprite(input.spriteName),
64
+ cwd: input.cwd,
65
+ });
66
+ return new FlySpriteExecutionEnvironment({
67
+ apiId: input.apiId,
68
+ spriteName: input.spriteName,
69
+ cwd: input.cwd,
70
+ home: "home" in input ? input.home : (api.home ?? DEFAULT_HOME),
71
+ backend,
72
+ toolCatalogOptions: this.toolCatalogOptions,
73
+ });
74
+ }
75
+ }
76
+ export function createFlySpriteToolExecutionBackend(options) {
77
+ const worker = new FlySpriteWorker(options.sprite, options.cwd);
78
+ return {
79
+ async runBash(command, runOptions = {}) {
80
+ return await worker.request("exec", {
81
+ command,
82
+ cwd: runOptions.cwd ?? options.cwd,
83
+ timeoutMs: runOptions.timeoutMs,
84
+ }, { signal: runOptions.signal });
85
+ },
86
+ async readFile(path) {
87
+ const result = await worker.request("readFile", {
88
+ path,
89
+ timeoutMs: HELPER_COMMAND_TIMEOUT_MS,
90
+ });
91
+ return { path, content: result.content };
92
+ },
93
+ async readFileBinary(path, readOptions = {}) {
94
+ const result = await worker.request("readFileBinary", {
95
+ path,
96
+ timeoutMs: HELPER_COMMAND_TIMEOUT_MS,
97
+ });
98
+ const content = Buffer.from(result.contentBase64, "base64");
99
+ const bytes = result.bytes;
100
+ assertFileWithinMaxBytes(bytes, readOptions.maxBytes);
101
+ return { path, content, bytes };
102
+ },
103
+ async writeFile(path, content) {
104
+ return await worker.request("writeFile", {
105
+ path,
106
+ contentBase64: Buffer.from(content, "utf-8").toString("base64"),
107
+ timeoutMs: HELPER_COMMAND_TIMEOUT_MS,
108
+ });
109
+ },
110
+ async listDir(path) {
111
+ const result = await worker.request("listDir", {
112
+ path,
113
+ timeoutMs: HELPER_COMMAND_TIMEOUT_MS,
114
+ });
115
+ return { path, entries: result.entries };
116
+ },
117
+ async grep(grepOptions) {
118
+ const resolvedPaths = resolveSandboxGrepPaths(grepOptions.paths);
119
+ if (grepOptions.dryRun) {
120
+ return buildSandboxGrepDryRunResult(resolvedPaths);
121
+ }
122
+ const result = await worker
123
+ .request("grep", {
124
+ cwd: options.cwd,
125
+ baseArgs: grepOptions.baseArgs,
126
+ pattern: grepOptions.pattern,
127
+ paths: resolvedPaths,
128
+ timeoutMs: grepOptions.timeoutMs,
129
+ }, { signal: grepOptions.signal })
130
+ .catch((err) => buildSandboxGrepErrorResult(err, resolvedPaths));
131
+ return {
132
+ output: result.output,
133
+ exitCode: result.exitCode,
134
+ captureTruncated: "truncated" in result ? result.truncated : result.captureTruncated,
135
+ resolvedPaths,
136
+ };
137
+ },
138
+ async dispose() {
139
+ await worker.dispose();
140
+ },
141
+ };
142
+ }
143
+ class FlySpriteWorker {
144
+ sprite;
145
+ cwd;
146
+ command;
147
+ readyPromise;
148
+ stdoutBuffer = "";
149
+ nextRequestId = 1;
150
+ pendingRequests = new Map();
151
+ closed = false;
152
+ constructor(sprite, cwd) {
153
+ this.sprite = sprite;
154
+ this.cwd = cwd;
155
+ }
156
+ async request(method, params, options = {}) {
157
+ if (this.closed) {
158
+ throw new Error("Fly Sprite worker is closed");
159
+ }
160
+ await this.ensureStarted();
161
+ const id = this.nextRequestId++;
162
+ const payload = JSON.stringify({ id, method, ...params });
163
+ return await new Promise((resolve, reject) => {
164
+ const timeoutMs = "timeoutMs" in params ? params.timeoutMs : undefined;
165
+ const { signal } = options;
166
+ let shouldCancel = false;
167
+ const pending = {
168
+ resolve: (value) => resolve(value),
169
+ reject,
170
+ signal,
171
+ };
172
+ if (timeoutMs !== undefined && Number.isFinite(timeoutMs) && timeoutMs > 0) {
173
+ pending.timer = setTimeout(() => {
174
+ this.sendCancel(id);
175
+ this.rejectPendingRequest(id, new Error(`Fly Sprite worker request '${method}' timed out after ${timeoutMs}ms`));
176
+ }, timeoutMs + COMMAND_STOP_GRACE_MS + 1_000);
177
+ }
178
+ if (signal) {
179
+ pending.abort = () => {
180
+ shouldCancel = true;
181
+ this.sendCancel(id);
182
+ };
183
+ signal.addEventListener("abort", pending.abort, { once: true });
184
+ }
185
+ this.pendingRequests.set(id, pending);
186
+ try {
187
+ this.command.stdin.write(`${payload}\n`);
188
+ if (shouldCancel || signal?.aborted) {
189
+ this.sendCancel(id);
190
+ }
191
+ }
192
+ catch (err) {
193
+ this.rejectPendingRequest(id, err);
194
+ }
195
+ });
196
+ }
197
+ async dispose() {
198
+ if (this.closed) {
199
+ return;
200
+ }
201
+ if (this.command) {
202
+ await this.request("shutdown", {}).catch(() => undefined);
203
+ this.command.kill();
204
+ this.command = undefined;
205
+ }
206
+ this.closed = true;
207
+ this.rejectAllPending(new Error("Fly Sprite worker was disposed"));
208
+ }
209
+ async ensureStarted() {
210
+ if (this.command && this.readyPromise) {
211
+ await this.readyPromise;
212
+ return;
213
+ }
214
+ this.readyPromise = this.start();
215
+ await this.readyPromise;
216
+ }
217
+ async start() {
218
+ const command = this.sprite.spawn("node", ["-e", WORKER_SCRIPT], {
219
+ cwd: this.cwd,
220
+ });
221
+ this.command = command;
222
+ this.stdoutBuffer = "";
223
+ return await new Promise((resolve, reject) => {
224
+ let settled = false;
225
+ const timer = setTimeout(() => {
226
+ cleanup();
227
+ command.kill();
228
+ reject(new Error("timed out waiting for Fly Sprite worker"));
229
+ }, HELPER_COMMAND_TIMEOUT_MS);
230
+ const cleanup = () => {
231
+ clearTimeout(timer);
232
+ command.off("error", onError);
233
+ };
234
+ const finishReady = () => {
235
+ if (settled)
236
+ return;
237
+ settled = true;
238
+ cleanup();
239
+ resolve();
240
+ };
241
+ const onError = (err) => {
242
+ if (settled)
243
+ return;
244
+ settled = true;
245
+ cleanup();
246
+ this.command = undefined;
247
+ this.readyPromise = undefined;
248
+ reject(err);
249
+ };
250
+ command.on("error", onError);
251
+ command.stdout.on("data", (chunk) => {
252
+ this.handleStdoutChunk(chunk, finishReady);
253
+ });
254
+ command.stderr.resume();
255
+ command.on("exit", (exitCode) => {
256
+ this.command = undefined;
257
+ this.readyPromise = undefined;
258
+ if (!settled) {
259
+ settled = true;
260
+ cleanup();
261
+ reject(new Error(`Fly Sprite worker exited before ready with code ${exitCode}`));
262
+ }
263
+ this.rejectAllPending(new Error(`Fly Sprite worker exited with code ${exitCode}`));
264
+ });
265
+ });
266
+ }
267
+ handleStdoutChunk(chunk, onReady) {
268
+ this.stdoutBuffer += chunk.toString("utf-8");
269
+ while (true) {
270
+ const newlineIndex = this.stdoutBuffer.indexOf("\n");
271
+ if (newlineIndex === -1) {
272
+ break;
273
+ }
274
+ const line = this.stdoutBuffer.slice(0, newlineIndex);
275
+ this.stdoutBuffer = this.stdoutBuffer.slice(newlineIndex + 1);
276
+ this.handleStdoutLine(line, onReady);
277
+ }
278
+ }
279
+ handleStdoutLine(line, onReady) {
280
+ if (!line.trim()) {
281
+ return;
282
+ }
283
+ let message;
284
+ try {
285
+ message = JSON.parse(line);
286
+ }
287
+ catch {
288
+ return;
289
+ }
290
+ if ("type" in message && message.type === "ready") {
291
+ onReady?.();
292
+ return;
293
+ }
294
+ if (!("id" in message)) {
295
+ return;
296
+ }
297
+ const pending = this.pendingRequests.get(message.id);
298
+ if (!pending) {
299
+ return;
300
+ }
301
+ this.pendingRequests.delete(message.id);
302
+ this.cleanupPendingRequest(pending);
303
+ if (message.ok) {
304
+ pending.resolve(message.result);
305
+ return;
306
+ }
307
+ pending.reject(new Error(message.error));
308
+ }
309
+ sendCancel(targetId) {
310
+ const command = this.command;
311
+ if (!command) {
312
+ return;
313
+ }
314
+ try {
315
+ command.stdin.write(`${JSON.stringify({ id: this.nextRequestId++, method: "cancel", targetId })}\n`);
316
+ }
317
+ catch {
318
+ // The worker exit path rejects the original request.
319
+ }
320
+ }
321
+ rejectPendingRequest(id, reason) {
322
+ const pending = this.pendingRequests.get(id);
323
+ if (!pending) {
324
+ return;
325
+ }
326
+ this.pendingRequests.delete(id);
327
+ this.cleanupPendingRequest(pending);
328
+ pending.reject(reason);
329
+ }
330
+ rejectAllPending(reason) {
331
+ const pending = [...this.pendingRequests.values()];
332
+ this.pendingRequests.clear();
333
+ for (const request of pending) {
334
+ this.cleanupPendingRequest(request);
335
+ request.reject(reason);
336
+ }
337
+ }
338
+ cleanupPendingRequest(request) {
339
+ if (request.timer) {
340
+ clearTimeout(request.timer);
341
+ }
342
+ if (request.signal && request.abort) {
343
+ request.signal.removeEventListener("abort", request.abort);
344
+ }
345
+ }
346
+ }
347
+ const WORKER_SCRIPT = `
348
+ const fs = require("node:fs");
349
+ const path = require("node:path");
350
+ const readline = require("node:readline");
351
+ const { spawn } = require("node:child_process");
352
+
353
+ const BASH_MAX_CAPTURE_BYTES = ${BASH_MAX_CAPTURE_BYTES};
354
+ const COMMAND_STOP_GRACE_MS = ${COMMAND_STOP_GRACE_MS};
355
+ const running = new Map();
356
+ const rl = readline.createInterface({ input: process.stdin });
357
+
358
+ console.log(JSON.stringify({ type: "ready" }));
359
+
360
+ rl.on("line", (line) => {
361
+ void handleLine(line);
362
+ });
363
+
364
+ async function handleLine(line) {
365
+ let request;
366
+ try {
367
+ request = JSON.parse(line);
368
+ } catch (err) {
369
+ return;
370
+ }
371
+
372
+ try {
373
+ if (request.method === "shutdown") {
374
+ respond(request.id, { exitCode: 0 });
375
+ process.exit(0);
376
+ return;
377
+ }
378
+
379
+ if (request.method === "cancel") {
380
+ const runningRequest = running.get(request.targetId);
381
+ if (runningRequest) {
382
+ runningRequest.cancel("abort");
383
+ }
384
+ respond(request.id, { accepted: Boolean(runningRequest) });
385
+ return;
386
+ }
387
+
388
+ if (request.method === "exec") {
389
+ const result = await runCommand(request.id, "sh", ["-lc", request.command], {
390
+ cwd: request.cwd,
391
+ timeoutMs: request.timeoutMs,
392
+ });
393
+ respond(request.id, result);
394
+ return;
395
+ }
396
+
397
+ if (request.method === "grep") {
398
+ const result = await runCommand(
399
+ request.id,
400
+ "rg",
401
+ [...request.baseArgs, "--", request.pattern, ...request.paths],
402
+ { cwd: request.cwd, timeoutMs: request.timeoutMs },
403
+ );
404
+ respond(request.id, result);
405
+ return;
406
+ }
407
+
408
+ if (request.method === "readFile") {
409
+ const content = await fs.promises.readFile(request.path, "utf-8");
410
+ respond(request.id, { content });
411
+ return;
412
+ }
413
+
414
+ if (request.method === "readFileBinary") {
415
+ const content = await fs.promises.readFile(request.path);
416
+ respond(request.id, {
417
+ contentBase64: content.toString("base64"),
418
+ bytes: content.byteLength,
419
+ });
420
+ return;
421
+ }
422
+
423
+ if (request.method === "writeFile") {
424
+ const content = Buffer.from(request.contentBase64, "base64");
425
+ await fs.promises.mkdir(path.dirname(request.path), { recursive: true });
426
+ await fs.promises.writeFile(request.path, content);
427
+ respond(request.id, {
428
+ path: request.path,
429
+ bytes: content.byteLength,
430
+ lines: content.toString("utf-8").split("\\n").length,
431
+ });
432
+ return;
433
+ }
434
+
435
+ if (request.method === "listDir") {
436
+ const entries = (await fs.promises.readdir(request.path, { withFileTypes: true })).map((entry) => ({
437
+ name: entry.name,
438
+ isDirectory: entry.isDirectory(),
439
+ isSymlink: entry.isSymbolicLink(),
440
+ }));
441
+ respond(request.id, { entries });
442
+ return;
443
+ }
444
+
445
+ fail(request.id, "unknown worker method");
446
+ } catch (err) {
447
+ fail(request.id, err instanceof Error ? err.message : String(err));
448
+ }
449
+ }
450
+
451
+ function runCommand(id, command, args, options) {
452
+ return new Promise((resolve) => {
453
+ const chunks = [];
454
+ const stdoutChunks = [];
455
+ const stderrChunks = [];
456
+ let bytes = 0;
457
+ let stdoutBytes = 0;
458
+ let stderrBytes = 0;
459
+ let truncated = false;
460
+ let timedOut = false;
461
+ let aborted = false;
462
+ let settled = false;
463
+ let timer;
464
+ let stopTimer;
465
+
466
+ const child = spawn(command, args, {
467
+ cwd: options.cwd,
468
+ detached: true,
469
+ stdio: ["ignore", "pipe", "pipe"],
470
+ });
471
+
472
+ const trimChunks = (targetChunks, targetBytes) => {
473
+ let nextBytes = targetBytes;
474
+ while (nextBytes > BASH_MAX_CAPTURE_BYTES && targetChunks.length > 0) {
475
+ const removed = targetChunks.shift();
476
+ nextBytes -= removed.byteLength;
477
+ truncated = true;
478
+ }
479
+ return nextBytes;
480
+ };
481
+
482
+ const append = (chunk, target) => {
483
+ const buffer = Buffer.from(chunk);
484
+ chunks.push(buffer);
485
+ bytes += buffer.byteLength;
486
+ bytes = trimChunks(chunks, bytes);
487
+
488
+ if (target === "stdout") {
489
+ stdoutChunks.push(buffer);
490
+ stdoutBytes += buffer.byteLength;
491
+ stdoutBytes = trimChunks(stdoutChunks, stdoutBytes);
492
+ } else {
493
+ stderrChunks.push(buffer);
494
+ stderrBytes += buffer.byteLength;
495
+ stderrBytes = trimChunks(stderrChunks, stderrBytes);
496
+ }
497
+ };
498
+
499
+ const cleanup = () => {
500
+ running.delete(id);
501
+ if (timer) clearTimeout(timer);
502
+ if (stopTimer) clearTimeout(stopTimer);
503
+ };
504
+
505
+ const finish = (exitCode) => {
506
+ if (settled) return;
507
+ settled = true;
508
+ cleanup();
509
+ let output = Buffer.concat(chunks).toString("utf-8");
510
+ let stdout = Buffer.concat(stdoutChunks).toString("utf-8");
511
+ let stderr = Buffer.concat(stderrChunks).toString("utf-8");
512
+ const note = timedOut
513
+ ? "\\n(tau) timed out after " + options.timeoutMs + "ms\\n"
514
+ : aborted
515
+ ? "\\n(tau) aborted\\n"
516
+ : "";
517
+ if (note && !output.includes(note.trim())) {
518
+ output += note;
519
+ stderr += note;
520
+ }
521
+ resolve({ output, stdout, stderr, exitCode, truncated });
522
+ };
523
+
524
+ const cancel = (reason) => {
525
+ if (reason === "timeout") timedOut = true;
526
+ if (reason === "abort") aborted = true;
527
+ try {
528
+ process.kill(-child.pid);
529
+ } catch {
530
+ child.kill();
531
+ }
532
+ stopTimer = setTimeout(() => finish(null), COMMAND_STOP_GRACE_MS);
533
+ };
534
+
535
+ running.set(id, { cancel });
536
+
537
+ if (options.timeoutMs && Number.isFinite(options.timeoutMs) && options.timeoutMs > 0) {
538
+ timer = setTimeout(() => cancel("timeout"), options.timeoutMs);
539
+ }
540
+
541
+ child.stdout.on("data", (chunk) => append(chunk, "stdout"));
542
+ child.stderr.on("data", (chunk) => append(chunk, "stderr"));
543
+ child.on("error", (err) => {
544
+ append(Buffer.from(err.message), "stderr");
545
+ finish(1);
546
+ });
547
+ child.on("close", finish);
548
+ });
549
+ }
550
+
551
+ function respond(id, result) {
552
+ console.log(JSON.stringify({ id, ok: true, result }));
553
+ }
554
+
555
+ function fail(id, error) {
556
+ console.log(JSON.stringify({ id, ok: false, error }));
557
+ }
558
+ `;
559
+ //# sourceMappingURL=fly_sprite_execution_environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fly_sprite_execution_environment.js","sourceRoot":"","sources":["../../src/execution/fly_sprite_execution_environment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ import { createDefaultConfigDeps, loadRuntimeConfig, } from "../core/config/index.js";
2
+ import { resolveRuntimePromptBootstrap, } from "../core/runtime/runtime_bootstrap.js";
3
+ import { ToolCatalog } from "../core/tools/catalog.js";
4
+ import { scopeToolExecutionBackend, } from "../core/tools/execution_backend.js";
5
+ export class LocalExecutionEnvironment {
6
+ kind = "local";
7
+ cwd;
8
+ home;
9
+ toolRegistry;
10
+ toolBackend;
11
+ readFile;
12
+ constructor(options) {
13
+ this.cwd = options.cwd;
14
+ this.home = options.home;
15
+ this.readFile = options.readFile;
16
+ this.toolBackend = options.toolBackend;
17
+ this.toolRegistry = options.toolRegistry;
18
+ }
19
+ async resolveRuntimeConfig() {
20
+ const deps = createDefaultConfigDeps();
21
+ return await loadRuntimeConfig(this.cwd, {
22
+ ...deps,
23
+ env: {
24
+ ...deps.env,
25
+ cwd: () => this.cwd,
26
+ home: () => this.home,
27
+ },
28
+ });
29
+ }
30
+ resolveRuntimeContext(options) {
31
+ const promptBootstrap = resolveRuntimePromptBootstrap({
32
+ persona: options.persona,
33
+ discoveredSkills: options.discoveredSkills,
34
+ cwd: this.cwd,
35
+ home: this.home,
36
+ includeAgentContext: options.includeAgentContext,
37
+ readFile: this.readFile,
38
+ });
39
+ return {
40
+ promptBootstrap,
41
+ toolRegistry: this.toolRegistry,
42
+ };
43
+ }
44
+ snapshot() {
45
+ return {
46
+ kind: this.kind,
47
+ cwd: this.cwd,
48
+ home: this.home,
49
+ };
50
+ }
51
+ getToolExecutionBackend() {
52
+ return this.toolBackend;
53
+ }
54
+ async dispose() { }
55
+ }
56
+ export class LocalExecutionEnvironmentResolver {
57
+ home;
58
+ readFile;
59
+ toolBackend;
60
+ toolCatalogOptions;
61
+ constructor(options) {
62
+ this.home = options.home;
63
+ this.readFile = options.readFile;
64
+ this.toolBackend = options.toolBackend;
65
+ this.toolCatalogOptions = options.toolCatalogOptions;
66
+ }
67
+ async resolve(input) {
68
+ if (input.kind !== "local") {
69
+ throw new Error(`unsupported execution environment kind '${input.kind}'`);
70
+ }
71
+ return this.createLocalEnvironment(input.cwd);
72
+ }
73
+ canRestore(snapshot) {
74
+ return snapshot.kind === "local";
75
+ }
76
+ async restore(snapshot) {
77
+ if (snapshot.kind !== "local") {
78
+ throw new Error(`unsupported execution environment kind '${snapshot.kind}'`);
79
+ }
80
+ return this.createLocalEnvironment(snapshot.cwd, snapshot.home);
81
+ }
82
+ createLocalEnvironment(cwd, home = this.home) {
83
+ const scopedBackend = scopeToolExecutionBackend(this.toolBackend, cwd);
84
+ return new LocalExecutionEnvironment({
85
+ cwd,
86
+ home,
87
+ readFile: this.readFile,
88
+ toolBackend: scopedBackend,
89
+ toolRegistry: ToolCatalog.createRegistry(scopedBackend, this.toolCatalogOptions),
90
+ });
91
+ }
92
+ }
93
+ //# sourceMappingURL=local_execution_environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local_execution_environment.js","sourceRoot":"","sources":["../../src/execution/local_execution_environment.ts"],"names":[],"mappings":"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"}