@markusylisiurunen/tau 0.2.128 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/README.md +130 -75
  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/auth/auth_manager.js +0 -92
  12. package/dist/core/auth/auth_manager.js.map +1 -1
  13. package/dist/core/auth/credential_store.js +247 -0
  14. package/dist/core/auth/credential_store.js.map +1 -0
  15. package/dist/core/auth/index.js +0 -1
  16. package/dist/core/auth/index.js.map +1 -1
  17. package/dist/core/cli.js +12 -15
  18. package/dist/core/cli.js.map +1 -1
  19. package/dist/core/commands/registry.js +11 -55
  20. package/dist/core/commands/registry.js.map +1 -1
  21. package/dist/core/config/index.js.map +1 -1
  22. package/dist/core/config/runtime.js +0 -1
  23. package/dist/core/config/runtime.js.map +1 -1
  24. package/dist/core/config/schema.js +102 -17
  25. package/dist/core/config/schema.js.map +1 -1
  26. package/dist/core/debug.js +1 -20
  27. package/dist/core/debug.js.map +1 -1
  28. package/dist/core/diff_review/{session.js → bridge.js} +57 -114
  29. package/dist/core/diff_review/bridge.js.map +1 -0
  30. package/dist/core/diff_review/index.js +2 -3
  31. package/dist/core/diff_review/index.js.map +1 -1
  32. package/dist/core/diff_review/review_thread.js +48 -23
  33. package/dist/core/diff_review/review_thread.js.map +1 -1
  34. package/dist/core/diff_review/snapshot.js +40 -11
  35. package/dist/core/diff_review/snapshot.js.map +1 -1
  36. package/dist/core/events/parser.js +43 -12
  37. package/dist/core/events/parser.js.map +1 -1
  38. package/dist/core/index.js +1 -2
  39. package/dist/core/index.js.map +1 -1
  40. package/dist/core/models/catalog.js +3 -3
  41. package/dist/core/models/catalog.js.map +1 -1
  42. package/dist/core/modes/index.js +1 -2
  43. package/dist/core/modes/index.js.map +1 -1
  44. package/dist/core/modes/rpc_server.js +15 -325
  45. package/dist/core/modes/rpc_server.js.map +1 -1
  46. package/dist/core/modes/websocket_server.js +181 -0
  47. package/dist/core/modes/websocket_server.js.map +1 -0
  48. package/dist/core/personas.js +11 -1
  49. package/dist/core/personas.js.map +1 -1
  50. package/dist/core/runtime/chat_runtime.js +19 -12
  51. package/dist/core/runtime/chat_runtime.js.map +1 -1
  52. package/dist/core/runtime/conversation_turn_runtime.js +16 -1
  53. package/dist/core/runtime/conversation_turn_runtime.js.map +1 -1
  54. package/dist/core/runtime/runtime_bootstrap.js +326 -0
  55. package/dist/core/runtime/runtime_bootstrap.js.map +1 -1
  56. package/dist/core/runtime/steering.js +6 -0
  57. package/dist/core/runtime/steering.js.map +1 -0
  58. package/dist/core/session/compaction.js +225 -22
  59. package/dist/core/session/compaction.js.map +1 -1
  60. package/dist/core/session/core_session.js +9 -0
  61. package/dist/core/session/core_session.js.map +1 -1
  62. package/dist/core/session/direct_bash.js +34 -0
  63. package/dist/core/session/direct_bash.js.map +1 -0
  64. package/dist/core/session/pruning.js +595 -0
  65. package/dist/core/session/pruning.js.map +1 -0
  66. package/dist/core/session/runner.js +47 -8
  67. package/dist/core/session/runner.js.map +1 -1
  68. package/dist/core/session/session_engine.js +128 -55
  69. package/dist/core/session/session_engine.js.map +1 -1
  70. package/dist/core/static/prompts/diff-review-wrapper.md +1 -1
  71. package/dist/core/subagents/subagent_engine.js +19 -27
  72. package/dist/core/subagents/subagent_engine.js.map +1 -1
  73. package/dist/core/tools/catalog.js.map +1 -1
  74. package/dist/core/tools/diff_review.js +12 -12
  75. package/dist/core/tools/diff_review.js.map +1 -1
  76. package/dist/core/tools/execution_backend.js +9 -2
  77. package/dist/core/tools/execution_backend.js.map +1 -1
  78. package/dist/core/tools/registry.js.map +1 -1
  79. package/dist/core/usage/logs.js.map +1 -1
  80. package/dist/core/utils/compact.js +3 -1
  81. package/dist/core/utils/compact.js.map +1 -1
  82. package/dist/core/utils/context.js +1 -1
  83. package/dist/core/utils/context.js.map +1 -1
  84. package/dist/core/utils/context_builder.js +1 -18
  85. package/dist/core/utils/context_builder.js.map +1 -1
  86. package/dist/core/utils/gemini_speech.js +1 -1
  87. package/dist/core/utils/gemini_speech.js.map +1 -1
  88. package/dist/core/utils/model_stream.js +105 -14
  89. package/dist/core/utils/model_stream.js.map +1 -1
  90. package/dist/core/utils/project_files.js +11 -16
  91. package/dist/core/utils/project_files.js.map +1 -1
  92. package/dist/core/utils/spawn_capture.js +2 -2
  93. package/dist/core/utils/spawn_capture.js.map +1 -1
  94. package/dist/core/utils/user_metadata.js +35 -2
  95. package/dist/core/utils/user_metadata.js.map +1 -1
  96. package/dist/core/version.js +1 -1
  97. package/dist/core/version.js.map +1 -1
  98. package/dist/diff_tool/app/dist/assets/{index-jn1I_CPZ.js → index-ivRn2dP2.js} +34 -34
  99. package/dist/diff_tool/app/dist/index.html +1 -1
  100. package/dist/execution/cloudflare_sandbox_execution_environment.js +400 -0
  101. package/dist/execution/cloudflare_sandbox_execution_environment.js.map +1 -0
  102. package/dist/execution/execution_environment.js +24 -0
  103. package/dist/execution/execution_environment.js.map +1 -0
  104. package/dist/execution/fly_sprite_execution_environment.js +559 -0
  105. package/dist/execution/fly_sprite_execution_environment.js.map +1 -0
  106. package/dist/execution/local_execution_environment.js +93 -0
  107. package/dist/execution/local_execution_environment.js.map +1 -0
  108. package/dist/execution/runtime_config_snapshot.js +209 -0
  109. package/dist/execution/runtime_config_snapshot.js.map +1 -0
  110. package/dist/execution/sandbox_tool_helpers.js +55 -0
  111. package/dist/execution/sandbox_tool_helpers.js.map +1 -0
  112. package/dist/execution/tool_backend_execution_environment.js +55 -0
  113. package/dist/execution/tool_backend_execution_environment.js.map +1 -0
  114. package/dist/host/hosted_ephemeral_agent_session.js +286 -0
  115. package/dist/host/hosted_ephemeral_agent_session.js.map +1 -0
  116. package/dist/host/index.js +3 -0
  117. package/dist/host/index.js.map +1 -0
  118. package/dist/host/local_session_host.js +1464 -0
  119. package/dist/host/local_session_host.js.map +1 -0
  120. package/dist/host/session_host.js +2 -0
  121. package/dist/host/session_host.js.map +1 -0
  122. package/dist/host/session_protocol_handler.js +873 -0
  123. package/dist/host/session_protocol_handler.js.map +1 -0
  124. package/dist/main.js +537 -77
  125. package/dist/main.js.map +1 -1
  126. package/dist/protocol/index.d.ts +2 -0
  127. package/dist/protocol/index.js +2 -0
  128. package/dist/protocol/index.js.map +1 -0
  129. package/dist/protocol/session_protocol.d.ts +691 -0
  130. package/dist/protocol/session_protocol.js +2117 -0
  131. package/dist/protocol/session_protocol.js.map +1 -0
  132. package/dist/sdk/client.d.ts +2 -1
  133. package/dist/sdk/client.js +136 -392
  134. package/dist/sdk/client.js.map +1 -1
  135. package/dist/sdk/index.d.ts +7 -4
  136. package/dist/sdk/index.js +4 -2
  137. package/dist/sdk/index.js.map +1 -1
  138. package/dist/sdk/session.d.ts +5 -0
  139. package/dist/sdk/session.js +406 -0
  140. package/dist/sdk/session.js.map +1 -0
  141. package/dist/sdk/types.d.ts +97 -78
  142. package/dist/store/file_session_store.js +157 -0
  143. package/dist/store/file_session_store.js.map +1 -0
  144. package/dist/store/memory_session_store.js +24 -0
  145. package/dist/store/memory_session_store.js.map +1 -0
  146. package/dist/store/session_store.js +32 -0
  147. package/dist/store/session_store.js.map +1 -0
  148. package/dist/transport/errors.d.ts +29 -0
  149. package/dist/{sdk → transport}/errors.js +5 -5
  150. package/dist/transport/errors.js.map +1 -0
  151. package/dist/transport/in_process_session_transport.js +102 -0
  152. package/dist/transport/in_process_session_transport.js.map +1 -0
  153. package/dist/transport/index.d.ts +7 -0
  154. package/dist/transport/index.js +4 -0
  155. package/dist/transport/index.js.map +1 -0
  156. package/dist/transport/pending_session_protocol_requests.js +67 -0
  157. package/dist/transport/pending_session_protocol_requests.js.map +1 -0
  158. package/dist/transport/session_protocol_transport_helpers.js +98 -0
  159. package/dist/transport/session_protocol_transport_helpers.js.map +1 -0
  160. package/dist/transport/session_transport.d.ts +11 -0
  161. package/dist/transport/session_transport.js +2 -0
  162. package/dist/transport/session_transport.js.map +1 -0
  163. package/dist/transport/stdio_session_transport.d.ts +38 -0
  164. package/dist/transport/stdio_session_transport.js +243 -0
  165. package/dist/transport/stdio_session_transport.js.map +1 -0
  166. package/dist/transport/websocket_session_transport.d.ts +52 -0
  167. package/dist/transport/websocket_session_transport.js +235 -0
  168. package/dist/transport/websocket_session_transport.js.map +1 -0
  169. package/dist/tui/chat_controller/assistant_clipboard.js +39 -0
  170. package/dist/tui/chat_controller/assistant_clipboard.js.map +1 -0
  171. package/dist/tui/chat_controller/command_hints.js +43 -0
  172. package/dist/tui/chat_controller/command_hints.js.map +1 -0
  173. package/dist/tui/chat_controller/diff_review_service.js +9 -9
  174. package/dist/tui/chat_controller/diff_review_service.js.map +1 -1
  175. package/dist/tui/chat_controller/diff_review_user_message.js +17 -0
  176. package/dist/tui/chat_controller/diff_review_user_message.js.map +1 -0
  177. package/dist/tui/chat_controller/history_labels.js +8 -0
  178. package/dist/tui/chat_controller/history_labels.js.map +1 -0
  179. package/dist/tui/chat_controller/history_message_model.js +36 -0
  180. package/dist/tui/chat_controller/history_message_model.js.map +1 -0
  181. package/dist/tui/chat_controller/queued_user_messages.js +18 -1
  182. package/dist/tui/chat_controller/queued_user_messages.js.map +1 -1
  183. package/dist/tui/chat_controller/status_format.js +22 -0
  184. package/dist/tui/chat_controller/status_format.js.map +1 -0
  185. package/dist/tui/chat_view.js +3 -1
  186. package/dist/tui/chat_view.js.map +1 -1
  187. package/dist/tui/index.js +1 -1
  188. package/dist/tui/index.js.map +1 -1
  189. package/dist/tui/listen_capture.js +87 -0
  190. package/dist/tui/listen_capture.js.map +1 -0
  191. package/dist/tui/memory_mode.js +23 -0
  192. package/dist/tui/memory_mode.js.map +1 -0
  193. package/dist/tui/session_chat_app.js +227 -0
  194. package/dist/tui/session_chat_app.js.map +1 -0
  195. package/dist/tui/session_chat_controller.js +2167 -0
  196. package/dist/tui/session_chat_controller.js.map +1 -0
  197. package/dist/tui/session_tool_execution_backend.js +170 -0
  198. package/dist/tui/session_tool_execution_backend.js.map +1 -0
  199. package/dist/tui/speech_playback.js +107 -0
  200. package/dist/tui/speech_playback.js.map +1 -0
  201. package/dist/tui/ui/assistant_message.js +27 -21
  202. package/dist/tui/ui/assistant_message.js.map +1 -1
  203. package/dist/tui/ui/components/editor.js +17 -13
  204. package/dist/tui/ui/components/editor.js.map +1 -1
  205. package/dist/tui/ui/custom_editor.js +25 -5
  206. package/dist/tui/ui/custom_editor.js.map +1 -1
  207. package/dist/tui/ui/queued_messages.js +1 -1
  208. package/dist/tui/ui/queued_messages.js.map +1 -1
  209. package/dist/tui/ui/slash_autocomplete.js +14 -36
  210. package/dist/tui/ui/slash_autocomplete.js.map +1 -1
  211. package/dist/tui/ui/tool_ui_registry.js +21 -0
  212. package/dist/tui/ui/tool_ui_registry.js.map +1 -1
  213. package/package.json +14 -11
  214. package/dist/core/auth/credential_resolver.js +0 -36
  215. package/dist/core/auth/credential_resolver.js.map +0 -1
  216. package/dist/core/config/bash_commands.js +0 -44
  217. package/dist/core/config/bash_commands.js.map +0 -1
  218. package/dist/core/diff_review/session.js.map +0 -1
  219. package/dist/core/modes/rpc_adapter.js +0 -17
  220. package/dist/core/modes/rpc_adapter.js.map +0 -1
  221. package/dist/core/modes/rpc_protocol.js +0 -500
  222. package/dist/core/modes/rpc_protocol.js.map +0 -1
  223. package/dist/core/session/checkpoint.js +0 -34
  224. package/dist/core/session/checkpoint.js.map +0 -1
  225. package/dist/sdk/errors.d.ts +0 -33
  226. package/dist/sdk/errors.js.map +0 -1
  227. package/dist/tui/app.js +0 -64
  228. package/dist/tui/app.js.map +0 -1
  229. package/dist/tui/chat_controller/session_maintenance_service.js +0 -634
  230. package/dist/tui/chat_controller/session_maintenance_service.js.map +0 -1
  231. package/dist/tui/chat_controller.js +0 -2532
  232. package/dist/tui/chat_controller.js.map +0 -1
@@ -0,0 +1,227 @@
1
+ import { spawn as spawnProcess } from "node:child_process";
2
+ import { createInterface } from "node:readline/promises";
3
+ import { createCommandRegistry } from "../core/commands/index.js";
4
+ import { createTauSdkClientFromTransport } from "../sdk/session.js";
5
+ import { StdioSessionProtocolTransport } from "../transport/stdio_session_transport.js";
6
+ import { WebSocketSessionProtocolTransport } from "../transport/websocket_session_transport.js";
7
+ import { TuiChatView } from "./chat_view.js";
8
+ import { EXIT_DOUBLE_PRESS_WINDOW_MS, EXIT_TOAST_DURATION_MS } from "./constants.js";
9
+ import { SessionChatController } from "./session_chat_controller.js";
10
+ import { SlashAutocompleteProvider } from "./ui/slash_autocomplete.js";
11
+ export class SessionChatApp {
12
+ view;
13
+ controller;
14
+ client;
15
+ initialUserMessage;
16
+ lastCtrlCAt;
17
+ constructor(options) {
18
+ this.view = options.view;
19
+ this.controller = options.controller;
20
+ this.client = options.client;
21
+ this.initialUserMessage = options.initialUserMessage;
22
+ }
23
+ static async connect(options) {
24
+ const transport = options.transport === "stdio"
25
+ ? new StdioSessionProtocolTransport(spawnProcess(options.command, options.args, {
26
+ stdio: "pipe",
27
+ }))
28
+ : new WebSocketSessionProtocolTransport({
29
+ url: options.url,
30
+ authToken: options.authToken,
31
+ });
32
+ const client = await createTauSdkClientFromTransport(transport, {
33
+ initialize: { client: { name: "tau-tui", version: "1" } },
34
+ });
35
+ return await SessionChatApp.open({
36
+ ...options,
37
+ client,
38
+ targetLabel: options.transport === "stdio" ? [options.command, ...options.args].join(" ") : options.url,
39
+ });
40
+ }
41
+ static async open(options) {
42
+ try {
43
+ const session = await resolveSession(options.client, options.sessionSelection);
44
+ const snapshot = await session.snapshot();
45
+ const queuedUserMessages = [];
46
+ const view = new TuiChatView({
47
+ queuedUserMessages,
48
+ compactToolUi: true,
49
+ showThinking: false,
50
+ terminalAppearance: options.terminalAppearance,
51
+ themeId: options.themeId,
52
+ themes: options.themes ?? [],
53
+ });
54
+ const controller = new SessionChatController({
55
+ view,
56
+ session,
57
+ snapshot,
58
+ createSession: (input) => options.client.sessions.create(input),
59
+ targetLabel: options.targetLabel,
60
+ config: options.config,
61
+ defaultDiffTool: options.defaultDiffTool,
62
+ deps: options.deps,
63
+ queuedUserMessages,
64
+ caffeinated: options.caffeinated,
65
+ themeIds: (options.themes ?? []).map((theme) => theme.id),
66
+ });
67
+ const sources = controller.getAutocompleteSources();
68
+ view.setAutocompleteProvider(new SlashAutocompleteProvider(createCommandRegistry(), sources.personas, sources.prompts, sources.themes, async (query, limit, signal) => {
69
+ if (signal.aborted)
70
+ return [];
71
+ return await sources.autocompletePaths(query, limit);
72
+ }, sources.skills, sources.subagents, sources.riskLevels));
73
+ const handlers = controller.getInputHandlers();
74
+ const app = new SessionChatApp({
75
+ view,
76
+ controller,
77
+ client: options.client,
78
+ initialUserMessage: options.initialUserMessage,
79
+ });
80
+ handlers.onCtrlC = () => app.handleCtrlC();
81
+ view.bindInputHandlers(handlers);
82
+ return app;
83
+ }
84
+ catch (error) {
85
+ await options.client.close();
86
+ throw error;
87
+ }
88
+ }
89
+ async start() {
90
+ this.view.start();
91
+ this.controller.start();
92
+ if (this.initialUserMessage) {
93
+ await this.controller.onUserInput(this.initialUserMessage);
94
+ }
95
+ }
96
+ async stop() {
97
+ this.view.stop();
98
+ try {
99
+ await this.controller.dispose();
100
+ }
101
+ finally {
102
+ await this.client.close();
103
+ }
104
+ }
105
+ async onUserInput(text) {
106
+ await this.controller.onUserInput(text);
107
+ }
108
+ onInterrupt() {
109
+ const handlers = this.controller.getInputHandlers();
110
+ handlers.onEscape?.();
111
+ }
112
+ onEvent() { }
113
+ handleCtrlC() {
114
+ const now = Date.now();
115
+ if (this.lastCtrlCAt !== undefined && now - this.lastCtrlCAt <= EXIT_DOUBLE_PRESS_WINDOW_MS) {
116
+ this.lastCtrlCAt = undefined;
117
+ void this.stop().finally(() => process.exit(0));
118
+ return;
119
+ }
120
+ this.lastCtrlCAt = now;
121
+ this.view.addSystemMessage("press ctrl+c again to quit", "warn", {
122
+ toastDurationMs: EXIT_TOAST_DURATION_MS,
123
+ });
124
+ }
125
+ }
126
+ async function resolveSession(client, selection) {
127
+ switch (selection.mode) {
128
+ case "attach":
129
+ return await client.sessions.observe(selection.sessionId);
130
+ case "create":
131
+ return await client.sessions.create(selection.input);
132
+ case "select":
133
+ return await selectSession(client);
134
+ }
135
+ }
136
+ async function selectSession(client) {
137
+ if (!process.stdin.isTTY || !process.stdout.isTTY) {
138
+ throw new Error("attach requires --session or --new when stdin/stdout are not a TTY");
139
+ }
140
+ const sessions = await client.sessions.list();
141
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
142
+ try {
143
+ if (sessions.length === 0) {
144
+ const answer = (await rl.question("no hosted sessions found. create a new session? [y/N] "))
145
+ .trim()
146
+ .toLowerCase();
147
+ if (answer === "y" || answer === "yes") {
148
+ return await createSessionFromPrompt(client, rl);
149
+ }
150
+ throw new Error("no session selected");
151
+ }
152
+ console.log("hosted sessions:");
153
+ sessions.forEach((session, index) => {
154
+ console.log(` ${index + 1}. ${session.sessionId} (${session.lifecycle})`);
155
+ });
156
+ console.log(" n. create new session");
157
+ const answer = (await rl.question("select session number/id, or n for new: ")).trim();
158
+ if (answer === "n" || answer === "new") {
159
+ return await createSessionFromPrompt(client, rl);
160
+ }
161
+ const index = Number(answer);
162
+ if (Number.isInteger(index) && index >= 1 && index <= sessions.length) {
163
+ return await client.sessions.observe(sessions[index - 1].sessionId);
164
+ }
165
+ if (answer.length > 0) {
166
+ return await client.sessions.observe(answer);
167
+ }
168
+ throw new Error("no session selected");
169
+ }
170
+ finally {
171
+ rl.close();
172
+ }
173
+ }
174
+ async function createSessionFromPrompt(client, rl) {
175
+ const rawKind = (await rl.question("execution kind [local/cloudflare-sandbox/fly-sprite, default local]: "))
176
+ .trim()
177
+ .toLowerCase();
178
+ const kind = rawKind === ""
179
+ ? "local"
180
+ : rawKind === "local" || rawKind === "cloudflare-sandbox" || rawKind === "fly-sprite"
181
+ ? rawKind
182
+ : undefined;
183
+ if (!kind) {
184
+ throw new Error("execution kind must be local, cloudflare-sandbox, or fly-sprite");
185
+ }
186
+ const cwd = (await rl.question("execution cwd: ")).trim();
187
+ if (!cwd) {
188
+ throw new Error("execution cwd is required");
189
+ }
190
+ if (kind === "local") {
191
+ return await client.sessions.create({
192
+ executionEnvironment: {
193
+ kind,
194
+ cwd,
195
+ },
196
+ });
197
+ }
198
+ if (kind === "cloudflare-sandbox") {
199
+ const bridgeId = (await rl.question("Cloudflare bridge id: ")).trim();
200
+ const sandboxId = (await rl.question("Cloudflare sandbox id: ")).trim();
201
+ if (!bridgeId || !sandboxId) {
202
+ throw new Error("Cloudflare bridge id and sandbox id are required");
203
+ }
204
+ return await client.sessions.create({
205
+ executionEnvironment: {
206
+ kind,
207
+ bridgeId,
208
+ sandboxId,
209
+ cwd,
210
+ },
211
+ });
212
+ }
213
+ const apiId = (await rl.question("Fly API id: ")).trim();
214
+ const spriteName = (await rl.question("Fly Sprite name: ")).trim();
215
+ if (!apiId || !spriteName) {
216
+ throw new Error("Fly API id and Sprite name are required");
217
+ }
218
+ return await client.sessions.create({
219
+ executionEnvironment: {
220
+ kind,
221
+ apiId,
222
+ spriteName,
223
+ cwd,
224
+ },
225
+ });
226
+ }
227
+ //# sourceMappingURL=session_chat_app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session_chat_app.js","sourceRoot":"","sources":["../../src/tui/session_chat_app.ts"],"names":[],"mappings":"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"}