@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
@@ -1,351 +1,45 @@
1
1
  import { createInterface } from "node:readline";
2
- import { wrapCoreEvent } from "../events/types.js";
3
- import { formatSteeringUserMessage } from "../runtime/steering.js";
4
- import { createRpcErrorResponse, createRpcEventMessage, createRpcReadyMessage, createRpcSuccessResponse, parseRpcRequestLine, RPC_ERROR_CODES, RPC_METHODS, RPC_PROTOCOL_VERSION, serializeRpcMessage, } from "./rpc_protocol.js";
2
+ import { SessionProtocolHandler, } from "../../host/session_protocol_handler.js";
3
+ import { createSessionProtocolErrorResponse, parseSessionProtocolRequestLine, serializeSessionProtocolMessage, } from "../../protocol/session_protocol.js";
5
4
  export class RpcServer {
6
- runtime;
5
+ handler;
7
6
  send;
8
- unsubscribeEvent;
9
- activeSubmit;
10
- activeSubmitRequestId;
11
- pendingSteeringSubmits = [];
12
- submitRequestByUserHistoryEntryId = new Map();
13
- mutationQueue = Promise.resolve();
14
- pendingSessionMutations = 0;
15
- initialized = false;
16
- rpcShutdown = false;
17
7
  closed = false;
18
8
  constructor(options) {
19
- this.runtime = options.runtime;
20
9
  this.send = options.send;
21
- this.unsubscribeEvent = this.runtime.session.onEvent((event) => {
22
- if (this.rpcShutdown || this.closed) {
23
- return;
24
- }
25
- const requestId = this.resolveEventRequestId(event);
26
- this.sendMessage(createRpcEventMessage(wrapCoreEvent(event), { requestId }));
10
+ this.handler = new SessionProtocolHandler({
11
+ host: options.host,
12
+ send: (message) => this.send(serializeSessionProtocolMessage(message)),
27
13
  });
28
- if (options.emitReadyOnStart ?? true) {
29
- this.emitReady();
30
- }
31
14
  }
32
15
  async handleLine(line) {
33
16
  if (this.closed) {
34
17
  return;
35
18
  }
36
- const parsed = parseRpcRequestLine(line);
19
+ const parsed = parseSessionProtocolRequestLine(line);
37
20
  if (!parsed.ok) {
38
21
  this.sendParseFailure(parsed);
39
22
  return;
40
23
  }
41
- const request = parsed.request;
42
- if (this.rpcShutdown && request.method !== "initialize") {
43
- this.sendServerShutdownError(request.id);
44
- return;
45
- }
46
- try {
47
- switch (request.method) {
48
- case "initialize":
49
- this.handleInitialize(request);
50
- return;
51
- case "session.submit":
52
- await this.handleSubmit(request);
53
- return;
54
- case "session.interrupt":
55
- this.handleInterrupt(request);
56
- return;
57
- case "session.snapshot":
58
- this.handleSnapshot(request);
59
- return;
60
- case "session.reset":
61
- await this.handleReset(request);
62
- return;
63
- case "session.shutdown":
64
- await this.handleShutdown(request);
65
- return;
66
- }
67
- }
68
- catch (error) {
69
- this.sendMessage(createRpcErrorResponse(request.id, RPC_ERROR_CODES.internalError, "rpc request failed", {
70
- cause: error instanceof Error ? error.message : String(error),
71
- }));
72
- }
24
+ await this.handler.handleRequest(parsed.request);
73
25
  }
74
- async close(options = {}) {
75
- if (this.closed) {
76
- return;
77
- }
26
+ async close() {
78
27
  this.closed = true;
79
- this.clearEventCorrelationState();
80
- this.unsubscribeEventListener();
81
- if (options.interruptActiveSubmit && (this.activeSubmit || this.runtime.isTurnRunning)) {
82
- this.runtime.interruptTurn();
83
- }
84
- this.runtime.session.dispose();
28
+ await this.handler.close("shutdown-host");
85
29
  }
86
- async shutdown(options = {}) {
87
- await this.close(options);
88
- }
89
- emitReady() {
90
- this.sendMessage(createRpcReadyMessage({
91
- sessionId: this.runtime.session.sessionId,
92
- }));
30
+ async shutdown() {
31
+ await this.close();
93
32
  }
94
33
  sendParseFailure(parsed) {
95
- this.sendMessage(createRpcErrorResponse(parsed.id, parsed.error.code, parsed.error.message, parsed.error.data));
96
- }
97
- handleInitialize(request) {
98
- const result = {
99
- protocolVersion: RPC_PROTOCOL_VERSION,
100
- sessionId: this.runtime.session.sessionId,
101
- methods: [...RPC_METHODS],
102
- alreadyInitialized: this.initialized,
103
- };
104
- this.initialized = true;
105
- this.sendMessage(createRpcSuccessResponse(request.id, result));
106
- }
107
- async handleSubmit(request) {
108
- if (this.pendingSessionMutations > 0) {
109
- this.sendSubmitBusy(request.id);
110
- return;
111
- }
112
- const startedSubmit = await this.enqueueMutation(() => this.startSubmit(request));
113
- if (!startedSubmit) {
114
- return;
115
- }
116
- const { submitPromise } = startedSubmit;
117
- try {
118
- await submitPromise;
119
- }
120
- finally {
121
- await this.enqueueMutation(() => {
122
- if (this.activeSubmit === submitPromise) {
123
- this.activeSubmit = undefined;
124
- this.activeSubmitRequestId = undefined;
125
- }
126
- });
127
- void this.drainPendingSteeringSubmits();
128
- }
129
- }
130
- startSubmit(request) {
131
- if (this.rpcShutdown) {
132
- this.sendServerShutdownError(request.id);
133
- return undefined;
134
- }
135
- if (this.activeSubmit || this.runtime.isTurnRunning) {
136
- if (request.params.mode === "steer") {
137
- this.pendingSteeringSubmits.push(request);
138
- this.runtime.requestTurnBoundaryStop();
139
- }
140
- else {
141
- this.sendSubmitBusy(request.id);
142
- }
143
- return undefined;
144
- }
145
- const addOptions = request.params.historyEntryId
146
- ? { historyEntryId: request.params.historyEntryId }
147
- : undefined;
148
- const userHistoryEntryId = this.runtime.session.addUserText(request.params.text, addOptions);
149
- this.submitRequestByUserHistoryEntryId.set(userHistoryEntryId, request.id);
150
- this.activeSubmitRequestId = request.id;
151
- const submitPromise = this.executeSubmit(request.id, userHistoryEntryId);
152
- this.activeSubmit = submitPromise;
153
- return {
154
- submitPromise,
155
- };
156
- }
157
- async drainPendingSteeringSubmits() {
158
- const batch = await this.enqueueMutation(() => {
159
- if (this.rpcShutdown ||
160
- this.pendingSteeringSubmits.length === 0 ||
161
- this.activeSubmit ||
162
- this.runtime.isTurnRunning) {
163
- return undefined;
164
- }
165
- const requests = this.pendingSteeringSubmits.splice(0);
166
- const primaryRequest = requests[0];
167
- const preferredHistoryEntryId = requests.length === 1 ? primaryRequest.params.historyEntryId : undefined;
168
- const userHistoryEntryId = this.runtime.session.addUserText(formatSteeringUserMessage(requests.map((item) => item.params.text)), preferredHistoryEntryId ? { historyEntryId: preferredHistoryEntryId } : undefined);
169
- this.submitRequestByUserHistoryEntryId.set(userHistoryEntryId, primaryRequest.id);
170
- this.activeSubmitRequestId = primaryRequest.id;
171
- const submitPromise = this.executeSubmit(primaryRequest.id, userHistoryEntryId, requests);
172
- this.activeSubmit = submitPromise;
173
- return { submitPromise };
174
- });
175
- if (!batch) {
176
- return;
177
- }
178
- try {
179
- await batch.submitPromise;
180
- }
181
- finally {
182
- await this.enqueueMutation(() => {
183
- if (this.activeSubmit === batch.submitPromise) {
184
- this.activeSubmit = undefined;
185
- this.activeSubmitRequestId = undefined;
186
- }
187
- });
188
- void this.drainPendingSteeringSubmits();
189
- }
190
- }
191
- async executeSubmit(requestId, userHistoryEntryId, responseRequests) {
192
- try {
193
- const turnResult = await this.runtime.runTurn();
194
- const result = {
195
- userHistoryEntryId,
196
- turn: {
197
- aborted: turnResult.aborted,
198
- ...(turnResult.blocked ? { blocked: turnResult.blocked } : {}),
199
- },
200
- };
201
- if (responseRequests) {
202
- for (const request of responseRequests) {
203
- this.sendMessage(createRpcSuccessResponse(request.id, result));
204
- }
205
- }
206
- else {
207
- this.sendMessage(createRpcSuccessResponse(requestId, result));
208
- }
209
- }
210
- catch (error) {
211
- const requests = responseRequests ?? [{ id: requestId }];
212
- for (const request of requests) {
213
- this.sendMessage(createRpcErrorResponse(request.id, RPC_ERROR_CODES.internalError, "failed to run session turn", { cause: error instanceof Error ? error.message : String(error) }));
214
- }
215
- }
216
- }
217
- handleInterrupt(request) {
218
- const interrupted = this.runtime.interruptTurn();
219
- this.rejectPendingSteeringSubmits("session was interrupted");
220
- const result = {
221
- interrupted,
222
- isTurnRunning: this.runtime.isTurnRunning,
223
- };
224
- this.sendMessage(createRpcSuccessResponse(request.id, result));
225
- }
226
- handleSnapshot(request) {
227
- const result = {
228
- sessionId: this.runtime.session.sessionId,
229
- isTurnRunning: this.runtime.isTurnRunning,
230
- historyLength: this.runtime.session.history.length,
231
- history: [...this.runtime.session.history],
232
- historyEntries: this.runtime.session.historyEntries.map((entry) => ({
233
- id: entry.id,
234
- message: entry.message,
235
- })),
236
- };
237
- this.sendMessage(createRpcSuccessResponse(request.id, result));
238
- }
239
- async handleReset(request) {
240
- await this.runSessionMutation(async () => {
241
- if (this.rpcShutdown) {
242
- this.sendServerShutdownError(request.id);
243
- return;
244
- }
245
- await this.interruptAndWaitForActiveSubmit();
246
- this.rejectPendingSteeringSubmits("session was reset");
247
- const previousSessionId = this.runtime.session.sessionId;
248
- this.runtime.session.reset();
249
- this.clearEventCorrelationState();
250
- const result = {
251
- previousSessionId,
252
- sessionId: this.runtime.session.sessionId,
253
- };
254
- this.sendMessage(createRpcSuccessResponse(request.id, result));
255
- });
256
- }
257
- async handleShutdown(request) {
258
- await this.runSessionMutation(async () => {
259
- if (this.rpcShutdown) {
260
- const result = {
261
- shutdown: true,
262
- };
263
- this.sendMessage(createRpcSuccessResponse(request.id, result));
264
- return;
265
- }
266
- await this.interruptAndWaitForActiveSubmit();
267
- this.rpcShutdown = true;
268
- this.rejectPendingSteeringSubmits("rpc server is shut down");
269
- this.clearEventCorrelationState();
270
- this.unsubscribeEventListener();
271
- const result = {
272
- shutdown: true,
273
- };
274
- this.sendMessage(createRpcSuccessResponse(request.id, result));
275
- });
276
- }
277
- rejectPendingSteeringSubmits(message) {
278
- const requests = this.pendingSteeringSubmits.splice(0);
279
- for (const request of requests) {
280
- this.sendMessage(createRpcErrorResponse(request.id, RPC_ERROR_CODES.invalidRequest, message));
281
- }
282
- }
283
- sendServerShutdownError(id) {
284
- this.sendMessage(createRpcErrorResponse(id, RPC_ERROR_CODES.invalidRequest, "rpc server is shut down"));
285
- }
286
- sendSubmitBusy(id) {
287
- const message = this.pendingSessionMutations > 0
288
- ? "a mutating session request is in progress"
289
- : "a session turn is already running";
290
- this.sendMessage(createRpcErrorResponse(id, RPC_ERROR_CODES.busy, message));
291
- }
292
- enqueueMutation(handler) {
293
- const run = this.mutationQueue.then(handler);
294
- this.mutationQueue = run.then(() => undefined, () => undefined);
295
- return run;
296
- }
297
- async runSessionMutation(handler) {
298
- this.pendingSessionMutations += 1;
299
- try {
300
- return await this.enqueueMutation(handler);
301
- }
302
- finally {
303
- this.pendingSessionMutations -= 1;
304
- }
305
- }
306
- async interruptAndWaitForActiveSubmit() {
307
- if (!this.activeSubmit && !this.runtime.isTurnRunning) {
308
- return;
309
- }
310
- this.runtime.interruptTurn();
311
- if (!this.activeSubmit) {
312
- return;
313
- }
314
- try {
315
- await this.activeSubmit;
316
- }
317
- catch {
318
- // ignore submit failure while finishing active mutation
319
- }
320
- }
321
- resolveEventRequestId(event) {
322
- if (event.type === "subagent_ui") {
323
- return this.submitRequestByUserHistoryEntryId.get(event.originHistoryEntryId);
324
- }
325
- return this.activeSubmitRequestId;
326
- }
327
- clearEventCorrelationState() {
328
- this.activeSubmitRequestId = undefined;
329
- this.submitRequestByUserHistoryEntryId.clear();
330
- }
331
- unsubscribeEventListener() {
332
- if (!this.unsubscribeEvent) {
333
- return;
334
- }
335
- this.unsubscribeEvent();
336
- this.unsubscribeEvent = undefined;
337
- }
338
- sendMessage(message) {
339
- this.send(serializeRpcMessage(message));
34
+ this.send(serializeSessionProtocolMessage(createSessionProtocolErrorResponse(parsed.id, parsed.error.code, parsed.error.message, parsed.error.data)));
340
35
  }
341
36
  }
342
37
  export async function runRpcServer(options) {
343
38
  const server = new RpcServer({
344
- runtime: options.runtime,
39
+ host: options.host,
345
40
  send: (line) => {
346
41
  options.output.write(`${line}\n`);
347
42
  },
348
- emitReadyOnStart: true,
349
43
  });
350
44
  const lineReader = createInterface({
351
45
  input: options.input,
@@ -399,7 +93,7 @@ export async function runRpcServer(options) {
399
93
  finally {
400
94
  lineReader.off("line", onLine);
401
95
  options.signal?.removeEventListener("abort", onAbort);
402
- await server.shutdown({ interruptActiveSubmit: true });
96
+ await server.shutdown();
403
97
  if (inFlightHandlers.size > 0) {
404
98
  await Promise.allSettled([...inFlightHandlers]);
405
99
  }
@@ -1 +1 @@
1
- {"version":3,"file":"rpc_server.js","sourceRoot":"","sources":["../../../src/core/modes/rpc_server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rpc_server.js","sourceRoot":"","sources":["../../../src/core/modes/rpc_server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EACL,sBAAsB,GAEvB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,kCAAkC,EAClC,+BAA+B,EAE/B,+BAA+B,GAChC,MAAM,oCAAoC,CAAC;AAc5C,MAAM,OAAO,SAAS;IACH,OAAO,CAAyB;IAChC,IAAI,CAAyB;IACtC,MAAM,GAAG,KAAK,CAAC;IAEvB,YAAY,OAAyB;QACnC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,sBAAsB,CAAC;YACxC,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,CAAC;SAC/B,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAY;QAC3B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,+BAA+B,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAC9B,OAAO;QACT,CAAC;QAED,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAEO,gBAAgB,CAAC,MAAmC;QAC1D,IAAI,CAAC,IAAI,CACP,+BAA+B,CAC7B,kCAAkC,CAChC,MAAM,CAAC,EAAE,EACT,MAAM,CAAC,KAAK,CAAC,IAAI,EACjB,MAAM,CAAC,KAAK,CAAC,OAAO,EACpB,MAAM,CAAC,KAAK,CAAC,IAAI,CAClB,CACF,CACF,CAAC;IACJ,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAA4B;IAC7D,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;QACpC,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,eAAe,CAAC;QACjC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,SAAS,EAAE,MAAM,CAAC,iBAAiB;KACpC,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAiB,CAAC;IAClD,IAAI,UAAmB,CAAC;IACxB,IAAI,aAAa,GAAG,KAAK,CAAC;IAE1B,MAAM,aAAa,GAAG,CAAC,OAAsB,EAAE,EAAE;QAC/C,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC9B,KAAK,OAAO;aACT,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACf,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC7B,UAAU,GAAG,KAAK,CAAC;YACrB,CAAC;QACH,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACZ,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QAED,aAAa,GAAG,IAAI,CAAC;QACrB,UAAU,CAAC,KAAK,EAAE,CAAC;QAEnB,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YAC9C,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE;QAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACxC,aAAa,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,WAAW,EAAE,CAAC;IAChB,CAAC,CAAC;IAEF,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE9B,MAAM,YAAY,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QACjD,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC3B,WAAW,EAAE,CAAC;QAChB,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,CAAC;QACH,MAAM,YAAY,CAAC;IACrB,CAAC;YAAS,CAAC;QACT,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/B,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAEtD,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QAExB,IAAI,gBAAgB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,UAAU,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -0,0 +1,181 @@
1
+ import { createServer } from "node:http";
2
+ import { WebSocketServer } from "ws";
3
+ import { SessionProtocolHandler } from "../../host/session_protocol_handler.js";
4
+ import { createSessionProtocolErrorResponse, parseSessionProtocolRequestLine, serializeSessionProtocolMessage, } from "../../protocol/session_protocol.js";
5
+ export class WebSocketSessionServer {
6
+ host;
7
+ authToken;
8
+ clients = new Set();
9
+ closed = false;
10
+ constructor(options) {
11
+ this.host = options.host;
12
+ this.authToken = options.authToken;
13
+ }
14
+ accept(socket, requestUrl) {
15
+ if (this.closed) {
16
+ socket.close(1012, "server closed");
17
+ return;
18
+ }
19
+ if (!this.isAuthorized(requestUrl)) {
20
+ socket.close(1008, "unauthorized");
21
+ return;
22
+ }
23
+ const state = {
24
+ socket,
25
+ inFlightHandlers: new Set(),
26
+ handler: new SessionProtocolHandler({
27
+ host: this.host,
28
+ send: (message) => {
29
+ this.sendSocketMessage(socket, serializeSessionProtocolMessage(message));
30
+ },
31
+ }),
32
+ };
33
+ this.clients.add(state);
34
+ socket.on("message", (data, isBinary) => {
35
+ if (isBinary) {
36
+ socket.close(1003, "session protocol requires text messages");
37
+ return;
38
+ }
39
+ const handler = this.handleSocketMessage(state, data.toString("utf8"));
40
+ state.inFlightHandlers.add(handler);
41
+ void handler
42
+ .catch(() => {
43
+ if (socket.readyState === socket.OPEN) {
44
+ socket.close(1011, "session protocol request failed");
45
+ }
46
+ })
47
+ .finally(() => {
48
+ state.inFlightHandlers.delete(handler);
49
+ });
50
+ });
51
+ socket.once("close", () => {
52
+ this.clients.delete(state);
53
+ void this.closeClient(state);
54
+ });
55
+ }
56
+ async close() {
57
+ if (this.closed) {
58
+ return;
59
+ }
60
+ this.closed = true;
61
+ const states = [...this.clients];
62
+ this.clients.clear();
63
+ await Promise.allSettled(states.map(async (state) => {
64
+ state.socket.terminate();
65
+ await this.closeClient(state, { mode: "interrupt" });
66
+ }));
67
+ await this.host.shutdown();
68
+ }
69
+ async handleSocketMessage(state, payload) {
70
+ const parsed = parseSessionProtocolRequestLine(payload);
71
+ if (!parsed.ok) {
72
+ this.sendParseFailure(state.socket, parsed);
73
+ return;
74
+ }
75
+ await state.handler.handleRequest(parsed.request);
76
+ }
77
+ async closeClient(state, options = {}) {
78
+ await state.handler.close(options.mode ?? (this.closed ? "interrupt" : "detach"));
79
+ if (options.waitForInFlight !== false && state.inFlightHandlers.size > 0) {
80
+ await Promise.allSettled([...state.inFlightHandlers]);
81
+ }
82
+ }
83
+ sendParseFailure(socket, parsed) {
84
+ this.sendSocketMessage(socket, serializeSessionProtocolMessage(createSessionProtocolErrorResponse(parsed.id, parsed.error.code, parsed.error.message, parsed.error.data)));
85
+ }
86
+ sendSocketMessage(socket, message) {
87
+ if (socket.readyState !== socket.OPEN) {
88
+ return;
89
+ }
90
+ try {
91
+ socket.send(message);
92
+ }
93
+ catch {
94
+ socket.close(1011, "session protocol send failed");
95
+ }
96
+ }
97
+ isAuthorized(requestUrl) {
98
+ if (this.authToken === undefined) {
99
+ return true;
100
+ }
101
+ if (requestUrl === undefined) {
102
+ return false;
103
+ }
104
+ const url = new URL(requestUrl, "ws://localhost");
105
+ return url.searchParams.get("tau_token") === this.authToken;
106
+ }
107
+ }
108
+ export async function runWebSocketSessionServer(options) {
109
+ const httpServer = createServer();
110
+ const socketServer = new WebSocketServer({ server: httpServer });
111
+ const sessionServer = new WebSocketSessionServer({
112
+ host: options.host,
113
+ authToken: options.authToken,
114
+ });
115
+ socketServer.on("connection", (socket, request) => {
116
+ sessionServer.accept(socket, request.url);
117
+ });
118
+ const listeningPromise = new Promise((resolve, reject) => {
119
+ const rejectListening = (error) => {
120
+ httpServer.off("error", rejectListening);
121
+ socketServer.off("error", rejectListening);
122
+ reject(error);
123
+ };
124
+ httpServer.once("error", rejectListening);
125
+ socketServer.once("error", rejectListening);
126
+ httpServer.listen(options.port, options.hostname, () => {
127
+ httpServer.off("error", rejectListening);
128
+ socketServer.off("error", rejectListening);
129
+ const address = httpServer.address();
130
+ if (typeof address === "object" && address !== null) {
131
+ resolve({
132
+ hostname: options.hostname,
133
+ port: address.port,
134
+ });
135
+ return;
136
+ }
137
+ reject(new Error("websocket server did not expose a TCP address"));
138
+ });
139
+ });
140
+ let didStartListening = false;
141
+ let removeAbortListener;
142
+ try {
143
+ const address = await listeningPromise;
144
+ didStartListening = true;
145
+ options.onListening?.(address);
146
+ const stopPromise = new Promise((resolve) => {
147
+ const requestStop = () => resolve();
148
+ if (options.signal) {
149
+ if (options.signal.aborted) {
150
+ resolve();
151
+ return;
152
+ }
153
+ options.signal.addEventListener("abort", requestStop, { once: true });
154
+ removeAbortListener = () => options.signal?.removeEventListener("abort", requestStop);
155
+ }
156
+ });
157
+ await stopPromise;
158
+ }
159
+ finally {
160
+ removeAbortListener?.();
161
+ await sessionServer.close();
162
+ if (didStartListening) {
163
+ await new Promise((resolve, reject) => {
164
+ socketServer.close((socketError) => {
165
+ if (socketError) {
166
+ reject(socketError);
167
+ return;
168
+ }
169
+ httpServer.close((httpError) => {
170
+ if (httpError) {
171
+ reject(httpError);
172
+ return;
173
+ }
174
+ resolve();
175
+ });
176
+ });
177
+ });
178
+ }
179
+ }
180
+ }
181
+ //# sourceMappingURL=websocket_server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket_server.js","sourceRoot":"","sources":["../../../src/core/modes/websocket_server.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,7 @@ Prioritize accuracy over agreement. If the user's assumption is wrong, say so di
11
11
  const BLOCK_CODER_PREAMBLE = `
12
12
  You are an expert software engineer working alongside the user in their codebase. Your role is to understand their intent and execute: implement features, fix bugs, refactor code, write tests, debug issues, and answer technical questions. The code you write should be indistinguishable from what a skilled teammate would write: it matches existing patterns, style, and conventions exactly.
13
13
 
14
- Be direct and concise. Skip pleasantries and filler. When the user asks for a change, make it; don't narrate what you're about to do or ask for permission unless truly necessary.
14
+ Be direct and concise. Skip pleasantries and filler. When the user asks for a change, make it; brief narration is welcome for non-trivial work, but don't ask for permission unless truly necessary.
15
15
 
16
16
  Prioritize technical accuracy over agreeing with the user. If their assumption is wrong or their approach has issues, say so directly. Investigate before confirming; respectful correction beats false agreement.
17
17
  `.trim();
@@ -52,6 +52,15 @@ const BLOCK_TOOL_USE_GUIDELINES_CODER = `
52
52
 
53
53
  **Safety**: File modification tools require read-write risk level. If permissions don't match, stop and tell the user. For destructive operations (deleting files, dropping data, force-pushing), confirm intent even if the user seems confident.
54
54
  `.trim();
55
+ const BLOCK_CODER_PROGRESS_UPDATES = `
56
+ ### Intermediary updates
57
+
58
+ For non-trivial work, provide brief user-facing updates in the commentary channel at natural checkpoints. They are not final answers; they are a way to keep the user naturally oriented and make longer work easy to follow without leaving long stretches of silence.
59
+
60
+ Treat these updates as a place to think out loud in a calm, casual, companionable way. Explain what you are doing and why in one or two concrete sentences, and include enough context that the user can follow the thread of the work. Good moments include finishing a meaningful exploration chunk, changing direction, finding an important clue, deciding on an approach, or preparing a substantial edit.
61
+
62
+ Keep updates informative and varied, but stay concise. Do not let them become a constant stream or a drumbeat at a fixed cadence, and do not start every update the same way. Never praise your plan by contrasting it with an implied worse alternative, such as "I'll do this carefully instead of rushing" or "I'll update the focused code, not random files." Skip updates for trivial reads, quick answers, or back-to-back small tool calls where the tool UI already makes progress obvious.
63
+ `.trim();
55
64
  const BLOCK_FILE_MENTIONS = `
56
65
  ### File, skill, and agent mentions
57
66
 
@@ -153,6 +162,7 @@ const CODER_SYSTEM_PROMPT = [
153
162
  BLOCK_CODER_PREAMBLE,
154
163
  BLOCK_OUTPUT_STYLE_GUIDELINES,
155
164
  BLOCK_TOOL_USE_GUIDELINES_CODER,
165
+ BLOCK_CODER_PROGRESS_UPDATES,
156
166
  BLOCK_RISK_LEVELS,
157
167
  BLOCK_FILE_MENTIONS,
158
168
  BLOCK_FILE_EDIT_GUIDELINES,