@markusylisiurunen/tau 0.3.77 → 0.3.78

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 (209) hide show
  1. package/dist/core/agent/agent_runtime.js +6 -11
  2. package/dist/core/agent/agent_runtime.js.map +1 -1
  3. package/dist/core/cli.js +2 -2
  4. package/dist/core/cli.js.map +1 -1
  5. package/dist/core/commands/registry.js +2 -1
  6. package/dist/core/commands/registry.js.map +1 -1
  7. package/dist/core/config/content_loader.js +9 -193
  8. package/dist/core/config/content_loader.js.map +1 -1
  9. package/dist/core/config/index.js +1 -1
  10. package/dist/core/config/index.js.map +1 -1
  11. package/dist/core/config/runtime.js +1 -2
  12. package/dist/core/config/runtime.js.map +1 -1
  13. package/dist/core/config/schema.js +10 -151
  14. package/dist/core/config/schema.js.map +1 -1
  15. package/dist/core/config/virtual_bundle.js +2 -5
  16. package/dist/core/config/virtual_bundle.js.map +1 -1
  17. package/dist/core/config/virtual_defaults.js +0 -2
  18. package/dist/core/config/virtual_defaults.js.map +1 -1
  19. package/dist/core/debug.js +8 -23
  20. package/dist/core/debug.js.map +1 -1
  21. package/dist/core/diff_review/bridge.js +2 -24
  22. package/dist/core/diff_review/bridge.js.map +1 -1
  23. package/dist/core/index.js.map +1 -1
  24. package/dist/core/personas.js +4 -8
  25. package/dist/core/personas.js.map +1 -1
  26. package/dist/core/runtime/agent_model.js +0 -2
  27. package/dist/core/runtime/agent_model.js.map +1 -1
  28. package/dist/core/runtime/chat_runtime.js +4 -6
  29. package/dist/core/runtime/chat_runtime.js.map +1 -1
  30. package/dist/core/runtime/session_prompt_composer.js +12 -27
  31. package/dist/core/runtime/session_prompt_composer.js.map +1 -1
  32. package/dist/core/static/index.js +4 -4
  33. package/dist/core/static/index.js.map +1 -1
  34. package/dist/core/static/tau_docs/client-tools.md +1 -1
  35. package/dist/core/static/tau_docs/config-reference.md +13 -94
  36. package/dist/core/static/tau_docs/configuration.md +4 -11
  37. package/dist/core/static/tau_docs/ownership-and-scope.md +2 -2
  38. package/dist/core/static/tau_docs/personas.md +6 -19
  39. package/dist/core/static/tau_docs/prompts-and-project-context.md +1 -1
  40. package/dist/core/static/tau_docs/remote-sessions.md +2 -2
  41. package/dist/core/static/tau_docs/security.md +2 -2
  42. package/dist/core/static/tau_docs/session-protocol.md +2 -0
  43. package/dist/core/static/tau_docs/sessions.md +2 -14
  44. package/dist/core/static/tau_docs/skills.md +1 -1
  45. package/dist/core/static/tau_docs/subagents.md +26 -99
  46. package/dist/core/static/tau_docs/telegram.md +10 -13
  47. package/dist/core/static/tau_docs/tools.md +6 -6
  48. package/dist/core/static/tau_docs/troubleshooting.md +4 -5
  49. package/dist/core/static/tau_docs/tui.md +10 -21
  50. package/dist/core/subagents/agent_supervisor.js +5 -6
  51. package/dist/core/subagents/agent_supervisor.js.map +1 -1
  52. package/dist/core/subagents/format.js +1 -1
  53. package/dist/core/subagents/format.js.map +1 -1
  54. package/dist/core/subagents/prompt.js +7 -0
  55. package/dist/core/subagents/prompt.js.map +1 -0
  56. package/dist/core/subagents/registry.js +14 -43
  57. package/dist/core/subagents/registry.js.map +1 -1
  58. package/dist/core/subagents/types.js +2 -2
  59. package/dist/core/subagents/types.js.map +1 -1
  60. package/dist/core/telegram/adapter.js +6 -10
  61. package/dist/core/telegram/adapter.js.map +1 -1
  62. package/dist/core/telegram/config.js +32 -57
  63. package/dist/core/telegram/config.js.map +1 -1
  64. package/dist/core/telegram/local_session_client.js +0 -3
  65. package/dist/core/telegram/local_session_client.js.map +1 -1
  66. package/dist/core/telegram/runtime.js +0 -3
  67. package/dist/core/telegram/runtime.js.map +1 -1
  68. package/dist/core/telegram/session_manager.js +29 -52
  69. package/dist/core/telegram/session_manager.js.map +1 -1
  70. package/dist/core/telegram/workspace.js +13 -18
  71. package/dist/core/telegram/workspace.js.map +1 -1
  72. package/dist/core/tools/catalog.js +10 -5
  73. package/dist/core/tools/catalog.js.map +1 -1
  74. package/dist/core/tools/send_input_to_agent.js +1 -1
  75. package/dist/core/tools/send_input_to_agent.js.map +1 -1
  76. package/dist/core/tools/spawn_agent.js +13 -30
  77. package/dist/core/tools/spawn_agent.js.map +1 -1
  78. package/dist/core/tools/view_image.js +12 -17
  79. package/dist/core/tools/view_image.js.map +1 -1
  80. package/dist/core/types.js.map +1 -1
  81. package/dist/core/usage/logs.js.map +1 -1
  82. package/dist/core/version.js +1 -1
  83. package/dist/diff_tool/app/dist/assets/{angular-html-BjHlbeCk.js → angular-html-CnO8qept.js} +1 -1
  84. package/dist/diff_tool/app/dist/assets/{angular-ts-5J5hsUV-.js → angular-ts-DPXUio9Z.js} +1 -1
  85. package/dist/diff_tool/app/dist/assets/{apl-ChIs51_N.js → apl-X8YsymsQ.js} +1 -1
  86. package/dist/diff_tool/app/dist/assets/{astro-RtGdbaIT.js → astro-BQ9k8AQ0.js} +1 -1
  87. package/dist/diff_tool/app/dist/assets/{blade-Cuc0ZzS1.js → blade-DZ1LYIzB.js} +1 -1
  88. package/dist/diff_tool/app/dist/assets/{c-IpjS3QEt.js → c-VLTwNh7z.js} +1 -1
  89. package/dist/diff_tool/app/dist/assets/{chapel-BvHOmF40.js → chapel-5s-sGN8D.js} +1 -1
  90. package/dist/diff_tool/app/dist/assets/{cobol-BWLkapNx.js → cobol-C9RzwrVu.js} +1 -1
  91. package/dist/diff_tool/app/dist/assets/{coffee-lfdf_MuK.js → coffee-BHvjZ343.js} +1 -1
  92. package/dist/diff_tool/app/dist/assets/{cpp-GvMfdutG.js → cpp-CBTVXbBp.js} +1 -1
  93. package/dist/diff_tool/app/dist/assets/{crystal--kdmUeXB.js → crystal-DQJua4y4.js} +1 -1
  94. package/dist/diff_tool/app/dist/assets/{css-CnlOazId.js → css-BQflXFb6.js} +1 -1
  95. package/dist/diff_tool/app/dist/assets/{edge-CwnxQiFe.js → edge-BmdmXGH4.js} +1 -1
  96. package/dist/diff_tool/app/dist/assets/{elixir-BVO19qQd.js → elixir-oiOLs98L.js} +1 -1
  97. package/dist/diff_tool/app/dist/assets/{elm-BK3istEo.js → elm-BgYuiU4E.js} +1 -1
  98. package/dist/diff_tool/app/dist/assets/{erb-CO4uKwKD.js → erb-CvFrXpyY.js} +1 -1
  99. package/dist/diff_tool/app/dist/assets/{git-rebase-CDrrgbGV.js → git-rebase-D3Zo1BLH.js} +1 -1
  100. package/dist/diff_tool/app/dist/assets/{glimmer-js-7CFSyo6c.js → glimmer-js-B4-8E3lJ.js} +1 -1
  101. package/dist/diff_tool/app/dist/assets/{glimmer-ts-Ofllf2Yo.js → glimmer-ts-CtKkD0t_.js} +1 -1
  102. package/dist/diff_tool/app/dist/assets/{glsl-K_36bq1K.js → glsl-BAqforx_.js} +1 -1
  103. package/dist/diff_tool/app/dist/assets/{graphql-BMZnssUN.js → graphql-DuE1RMyL.js} +1 -1
  104. package/dist/diff_tool/app/dist/assets/{hack-MG_t8QNs.js → hack-CHBcXjz1.js} +1 -1
  105. package/dist/diff_tool/app/dist/assets/{haml-0hDK-uCt.js → haml-DAs2z3tD.js} +1 -1
  106. package/dist/diff_tool/app/dist/assets/{handlebars-D4_MRJPB.js → handlebars-CfAla6QK.js} +1 -1
  107. package/dist/diff_tool/app/dist/assets/{html-BCi--7qp.js → html-D5co0BLD.js} +1 -1
  108. package/dist/diff_tool/app/dist/assets/{html-derivative-DYq2AWiD.js → html-derivative-BZaWEmAT.js} +1 -1
  109. package/dist/diff_tool/app/dist/assets/{http-BmLFm2Pm.js → http-Cii5MjJE.js} +1 -1
  110. package/dist/diff_tool/app/dist/assets/{hurl-CT71cK69.js → hurl-Bur-XdJO.js} +1 -1
  111. package/dist/diff_tool/app/dist/assets/index-CZUi_I-p.js +340 -0
  112. package/dist/diff_tool/app/dist/assets/{java-Bm2FCq-d.js → java-DN39wI4w.js} +1 -1
  113. package/dist/diff_tool/app/dist/assets/{javascript-C7oEny21.js → javascript-VUReF1H4.js} +1 -1
  114. package/dist/diff_tool/app/dist/assets/{jinja-igQBS-SS.js → jinja-BcrfV1JB.js} +1 -1
  115. package/dist/diff_tool/app/dist/assets/{jison-BrOUp4rK.js → jison-Bez5Mtmy.js} +1 -1
  116. package/dist/diff_tool/app/dist/assets/{json-DsuR7Nai.js → json-ChV8m0Le.js} +1 -1
  117. package/dist/diff_tool/app/dist/assets/{jsx-BdomFXcA.js → jsx-D0SXNtM0.js} +1 -1
  118. package/dist/diff_tool/app/dist/assets/{julia-DqOG4pbM.js → julia-DvhpcBwG.js} +1 -1
  119. package/dist/diff_tool/app/dist/assets/{just-ZrSTuT0n.js → just-BGwe8S6x.js} +1 -1
  120. package/dist/diff_tool/app/dist/assets/{latex-DbmtZIwN.js → latex-pWSag83P.js} +1 -1
  121. package/dist/diff_tool/app/dist/assets/{liquid-DKnUlRIp.js → liquid-UdnqDjKz.js} +1 -1
  122. package/dist/diff_tool/app/dist/assets/{lua-Cyq3f59a.js → lua-CjDHeHEr.js} +1 -1
  123. package/dist/diff_tool/app/dist/assets/{marko-hmOsFPHQ.js → marko-yLX6iW68.js} +1 -1
  124. package/dist/diff_tool/app/dist/assets/{mdc-BnnQmDC-.js → mdc-BOLj6Oyq.js} +1 -1
  125. package/dist/diff_tool/app/dist/assets/{nginx-C0zLUSna.js → nginx-5r5xPc2T.js} +1 -1
  126. package/dist/diff_tool/app/dist/assets/{nim-Oljl3c5n.js → nim-9exKQYMz.js} +1 -1
  127. package/dist/diff_tool/app/dist/assets/{org-Cp4CA-0c.js → org-B2fpAlbt.js} +1 -1
  128. package/dist/diff_tool/app/dist/assets/{perl-DstDVYmJ.js → perl-DV2fcwyY.js} +1 -1
  129. package/dist/diff_tool/app/dist/assets/{php-Cc3bNZ7J.js → php-D-AthX_E.js} +1 -1
  130. package/dist/diff_tool/app/dist/assets/{pug-B3xDUzl0.js → pug-DuKcQxFj.js} +1 -1
  131. package/dist/diff_tool/app/dist/assets/{qml-B9iDahKk.js → qml-C16b4SYx.js} +1 -1
  132. package/dist/diff_tool/app/dist/assets/{r-B7M5ZSBC.js → r-B1ZldnJf.js} +1 -1
  133. package/dist/diff_tool/app/dist/assets/{razor-BlfV6bjQ.js → razor-TYmslaAB.js} +1 -1
  134. package/dist/diff_tool/app/dist/assets/{regexp-BVT0NBj6.js → regexp-dWCffmDD.js} +1 -1
  135. package/dist/diff_tool/app/dist/assets/{rst-Cq-Mcher.js → rst-DEkLr2YR.js} +1 -1
  136. package/dist/diff_tool/app/dist/assets/{ruby-5uCK_s01.js → ruby-BJnJzr4u.js} +1 -1
  137. package/dist/diff_tool/app/dist/assets/{sas-m4dYluKN.js → sas-DeRsDbUE.js} +1 -1
  138. package/dist/diff_tool/app/dist/assets/{scss-DFiJcBQH.js → scss-SGV_CwKm.js} +1 -1
  139. package/dist/diff_tool/app/dist/assets/{shellscript-DCtSkJJQ.js → shellscript-BI7khmmR.js} +1 -1
  140. package/dist/diff_tool/app/dist/assets/{shellsession-_DntbpLM.js → shellsession-Nupw_Vvw.js} +1 -1
  141. package/dist/diff_tool/app/dist/assets/{soy-Dd1fWsG8.js → soy-B96cBzxv.js} +1 -1
  142. package/dist/diff_tool/app/dist/assets/{sql-Bygp5F-5.js → sql-CsIdKfaO.js} +1 -1
  143. package/dist/diff_tool/app/dist/assets/{stata-CqIA1VQD.js → stata-Dnq48cE6.js} +1 -1
  144. package/dist/diff_tool/app/dist/assets/{surrealql-C2-2C-z3.js → surrealql-D6lw4TiD.js} +1 -1
  145. package/dist/diff_tool/app/dist/assets/{svelte-CrTy7VSb.js → svelte-ChVoq9tB.js} +1 -1
  146. package/dist/diff_tool/app/dist/assets/{templ-B_h9AHFJ.js → templ-Dh1EXuHD.js} +1 -1
  147. package/dist/diff_tool/app/dist/assets/{tex-AwlGuBDG.js → tex-KTYusNFe.js} +1 -1
  148. package/dist/diff_tool/app/dist/assets/{ts-tags--oqU6stH.js → ts-tags-DC2RU1_R.js} +1 -1
  149. package/dist/diff_tool/app/dist/assets/{tsx-Cx-oUPFA.js → tsx-DtIM39Jy.js} +1 -1
  150. package/dist/diff_tool/app/dist/assets/{twig-DMQw3R9O.js → twig-C6D_TA3n.js} +1 -1
  151. package/dist/diff_tool/app/dist/assets/{typescript-BCtu9W7E.js → typescript-BGAE5iuw.js} +1 -1
  152. package/dist/diff_tool/app/dist/assets/{typst-jGrqJHSo.js → typst-nWoGZ22y.js} +1 -1
  153. package/dist/diff_tool/app/dist/assets/{vue-html-DTMalvg7.js → vue-html-prNdIjLu.js} +1 -1
  154. package/dist/diff_tool/app/dist/assets/{vue-GFZcsvXd.js → vue-iyHf-l4z.js} +1 -1
  155. package/dist/diff_tool/app/dist/assets/{vue-vine-BwDeqLrM.js → vue-vine-KSSlnVeg.js} +1 -1
  156. package/dist/diff_tool/app/dist/assets/{xml-CoXyuOzf.js → xml-DdCC83Xd.js} +1 -1
  157. package/dist/diff_tool/app/dist/assets/{xsl-BQFm34CN.js → xsl-DSqZxsez.js} +1 -1
  158. package/dist/diff_tool/app/dist/assets/{yaml-CbO2A_pF.js → yaml-CZcBUWvf.js} +1 -1
  159. package/dist/diff_tool/app/dist/index.html +1 -1
  160. package/dist/diff_tool/http_server.js +2 -9
  161. package/dist/diff_tool/http_server.js.map +1 -1
  162. package/dist/diff_tool/index.js +2 -2
  163. package/dist/diff_tool/index.js.map +1 -1
  164. package/dist/diff_tool/launcher.js +14 -8
  165. package/dist/diff_tool/launcher.js.map +1 -1
  166. package/dist/diff_tool/protocol_client.js +0 -7
  167. package/dist/diff_tool/protocol_client.js.map +1 -1
  168. package/dist/diff_tool/review_state.js +4 -10
  169. package/dist/diff_tool/review_state.js.map +1 -1
  170. package/dist/diff_tool/review_state_persistence.js +12 -7
  171. package/dist/diff_tool/review_state_persistence.js.map +1 -1
  172. package/dist/diff_tool/shared_types.js +0 -48
  173. package/dist/diff_tool/shared_types.js.map +1 -1
  174. package/dist/host/execution_runtime.js +1 -1
  175. package/dist/host/execution_runtime.js.map +1 -1
  176. package/dist/host/hosted_ephemeral_agent_session.js +1 -1
  177. package/dist/host/hosted_ephemeral_agent_session.js.map +1 -1
  178. package/dist/host/local_session_host.js +8 -18
  179. package/dist/host/local_session_host.js.map +1 -1
  180. package/dist/main.js +1 -15
  181. package/dist/main.js.map +1 -1
  182. package/dist/protocol/index.d.ts +1 -1
  183. package/dist/protocol/index.js.map +1 -1
  184. package/dist/protocol/session_protocol.d.ts +2 -8
  185. package/dist/protocol/session_protocol.js +2 -10
  186. package/dist/protocol/session_protocol.js.map +1 -1
  187. package/dist/store/session_snapshot_migrations.js +32 -1
  188. package/dist/store/session_snapshot_migrations.js.map +1 -1
  189. package/dist/tui/chat_controller/diff_review_service.js +0 -15
  190. package/dist/tui/chat_controller/diff_review_service.js.map +1 -1
  191. package/dist/tui/chat_view.js +5 -1
  192. package/dist/tui/chat_view.js.map +1 -1
  193. package/dist/tui/session_chat_app.js +1 -2
  194. package/dist/tui/session_chat_app.js.map +1 -1
  195. package/dist/tui/session_chat_controller.js +30 -37
  196. package/dist/tui/session_chat_controller.js.map +1 -1
  197. package/dist/tui/ui/custom_editor.js +21 -15
  198. package/dist/tui/ui/custom_editor.js.map +1 -1
  199. package/dist/tui/ui/slash_autocomplete.js +1 -8
  200. package/dist/tui/ui/slash_autocomplete.js.map +1 -1
  201. package/dist/tui/ui/subagent_panel.js +1 -12
  202. package/dist/tui/ui/subagent_panel.js.map +1 -1
  203. package/package.json +1 -1
  204. package/dist/core/config/diff_tool.js +0 -51
  205. package/dist/core/config/diff_tool.js.map +0 -1
  206. package/dist/core/subagents/default.js +0 -8
  207. package/dist/core/subagents/default.js.map +0 -1
  208. package/dist/diff_tool/app/dist/assets/index-DyaXBald.js +0 -340
  209. /package/dist/core/static/prompts/{default-subagent-wrapper.md → subagent-wrapper.md} +0 -0
@@ -1,6 +1,6 @@
1
1
  import { dirname } from "node:path/posix";
2
2
  import { createCommandRegistry, } from "../core/commands/index.js";
3
- import { getElevenLabsApiKey, getOpenAIApiKey, } from "../core/config/index.js";
3
+ import { getElevenLabsApiKey, getOpenAIApiKey } from "../core/config/index.js";
4
4
  import { captureDiffReviewSnapshot, DiffReviewBridge, } from "../core/diff_review/index.js";
5
5
  import { buildDiffReviewInstructions } from "../core/diff_review/review_instructions.js";
6
6
  import { createDefaultCoreDeps } from "../core/runtime/deps.js";
@@ -14,6 +14,7 @@ import { getSpeechToTextRecordingMaxDurationMs, getSpeechToTextStreamingSampleRa
14
14
  import { collectSpeechToTextContext } from "../core/utils/speech_to_text_context.js";
15
15
  import { formatTauUserText, hasAutoCompactionContinuationMetadata, splitTauUserText, } from "../core/utils/user_metadata.js";
16
16
  import { APP_VERSION } from "../core/version.js";
17
+ import { launchBuiltInDiffTool } from "../diff_tool/launcher.js";
17
18
  import { applySessionProtocolDelta, applySessionProtocolSubagentActivitiesMessage, } from "../protocol/session_protocol.js";
18
19
  import { TauSessionProtocolResponseError } from "../transport/errors.js";
19
20
  import { copyAssistantCodeToClipboard, copyAssistantTextToClipboard, } from "./chat_controller/assistant_clipboard.js";
@@ -37,7 +38,6 @@ export class SessionChatController {
37
38
  targetLabel;
38
39
  configuredClientToolNames;
39
40
  config;
40
- defaultDiffTool;
41
41
  diffToolLauncher;
42
42
  deps;
43
43
  speechToTextDeps;
@@ -98,7 +98,6 @@ export class SessionChatController {
98
98
  this.targetLabel = options.targetLabel;
99
99
  this.configuredClientToolNames = options.configuredClientToolNames ?? [];
100
100
  this.config = options.config ?? {};
101
- this.defaultDiffTool = options.defaultDiffTool;
102
101
  this.diffToolLauncher = options.diffToolLauncher;
103
102
  this.deps = options.deps ?? createDefaultCoreDeps();
104
103
  this.speechToTextDeps = options.speechToTextDeps;
@@ -130,7 +129,6 @@ export class SessionChatController {
130
129
  refreshStatus: () => this.refreshStatus(),
131
130
  startTurnTimer: () => this.startTurnTimer(),
132
131
  stopTurnTimer: () => this.stopTurnTimer(),
133
- getDiffToolConfig: () => this.resolveDiffToolConfig(),
134
132
  startSession: (args) => this.startDiffReviewBridge(args, this.session, this.snapshot),
135
133
  onReviewReturned: (review) => this.handleReturnedDiffReview(review, this.session),
136
134
  });
@@ -188,6 +186,11 @@ export class SessionChatController {
188
186
  onCtrlP: () => void this.cyclePersonality(),
189
187
  onCtrlS: () => void this.stashEditorToClipboard(),
190
188
  onCtrlY: () => void this.toggleListenCapture(),
189
+ onDisabledSubmit: (mode) => {
190
+ if (this.listenRecording && !this.listenTransition) {
191
+ void this.runListenTransition(() => this.stopListenCapture(mode));
192
+ }
193
+ },
191
194
  onCtrlG: () => this.interruptSelectedSubagent(),
192
195
  onEscape: () => void this.interrupt(),
193
196
  beforeSubmit: (text) => {
@@ -197,7 +200,7 @@ export class SessionChatController {
197
200
  },
198
201
  onChange: (text) => this.handleEditorChange(text),
199
202
  onSubmit: (text) => void this.handleSubmit(text, this.takeHiddenSystemSubmission()),
200
- onSteerSubmit: (text) => void this.submitSteeringMessage(text, this.takeHiddenSystemSubmission()),
203
+ onQueueSubmit: (text) => void this.handleSubmit(text, this.takeHiddenSystemSubmission(), "queue"),
201
204
  onAltUp: () => void this.cancelPendingMessagesIntoEditor(),
202
205
  onAltDown: () => this.cycleSubagentSelection(),
203
206
  };
@@ -234,7 +237,7 @@ export class SessionChatController {
234
237
  formatSubmittedText(text, hiddenSystemMessages) {
235
238
  return formatTauUserText({ text, hiddenSystemMessages });
236
239
  }
237
- async handleSubmit(text, hiddenSystemMessages = []) {
240
+ async handleSubmit(text, hiddenSystemMessages = [], mode = "steer") {
238
241
  const trimmed = text.trim();
239
242
  if (!trimmed) {
240
243
  if (this.isStreaming || this.submittedTurnInProgress) {
@@ -272,7 +275,11 @@ export class SessionChatController {
272
275
  if (trimmed.startsWith("!")) {
273
276
  return;
274
277
  }
275
- this.submitQueuedText(this.formatSubmittedText(trimmed, hiddenSystemMessages));
278
+ const submittedText = this.formatSubmittedText(trimmed, hiddenSystemMessages);
279
+ if (mode === "steer")
280
+ this.submitSteeringText(submittedText);
281
+ else
282
+ this.submitQueuedText(submittedText);
276
283
  return;
277
284
  }
278
285
  if (trimmed.startsWith("/") && this.isSingleLineInput(text)) {
@@ -353,7 +360,6 @@ export class SessionChatController {
353
360
  themes: () => this.themeIds.map((id) => ({ id })),
354
361
  autocompletePaths: async (query, limit) => (await this.session.autocompletePaths({ query, limit })).paths,
355
362
  skills: () => this.snapshot.catalog.skills.map((skill) => skill.name),
356
- subagents: () => Object.keys(this.getCurrentPersonaSnapshot()?.subagents ?? {}),
357
363
  };
358
364
  }
359
365
  buildStartupIntroTitle() {
@@ -473,21 +479,6 @@ export class SessionChatController {
473
479
  this.view.requestRender();
474
480
  }
475
481
  }
476
- async submitSteeringMessage(text, hiddenSystemMessages = []) {
477
- const trimmed = text.trim();
478
- if (!trimmed) {
479
- return;
480
- }
481
- if (!this.isSessionOperationActive()) {
482
- await this.runSessionTurn(() => this.session.submit(this.formatSubmittedText(trimmed, hiddenSystemMessages)));
483
- return;
484
- }
485
- if (this.isBlockingSessionOperationActive()) {
486
- this.view.showFooterNotice("wait for tau to become idle before submitting input", "default");
487
- return;
488
- }
489
- this.submitSteeringText(this.formatSubmittedText(trimmed, hiddenSystemMessages));
490
- }
491
482
  submitQueuedText(text) {
492
483
  void this.session.queue(text).catch((error) => {
493
484
  if (!this.isPendingMessageCancellation(error)) {
@@ -790,7 +781,7 @@ export class SessionChatController {
790
781
  clearTimeout(timeout);
791
782
  }
792
783
  }
793
- async stopListenCapture() {
784
+ async stopListenCapture(mode) {
794
785
  const recording = this.listenRecording;
795
786
  if (!recording)
796
787
  return;
@@ -810,7 +801,9 @@ export class SessionChatController {
810
801
  return;
811
802
  }
812
803
  const durationMs = Math.min(Math.max(Date.now() - recording.startedAt, 0), SPEECH_TO_TEXT_CLIENT_MAX_DURATION_MS);
813
- await this.transcribeListenAudioFile(recording.audioPath, durationMs, recording.transcription);
804
+ const transcribed = await this.transcribeListenAudioFile(recording.audioPath, durationMs, recording.transcription);
805
+ if (mode && transcribed && !this.disposed)
806
+ this.view.submitEditor(mode);
814
807
  }
815
808
  async retryRetainedListenAudio() {
816
809
  if (this.pendingEditorMutations > 0) {
@@ -826,7 +819,9 @@ export class SessionChatController {
826
819
  this.view.showFooterNotice("no failed speech recording to retry", "default");
827
820
  return;
828
821
  }
829
- await this.runListenTransition(() => this.transcribeListenAudioFile(retainedAudio.audioPath, retainedAudio.durationMs));
822
+ await this.runListenTransition(async () => {
823
+ await this.transcribeListenAudioFile(retainedAudio.audioPath, retainedAudio.durationMs);
824
+ });
830
825
  }
831
826
  async discardRetainedListenAudio() {
832
827
  if (this.listenRecording || this.listenTransition || this.listenActivityLabel) {
@@ -883,7 +878,7 @@ export class SessionChatController {
883
878
  this.retainedListenAudio = undefined;
884
879
  }
885
880
  await cleanupListenTempFile(audioPath);
886
- return;
881
+ return false;
887
882
  }
888
883
  if (!this.listenPreview)
889
884
  this.beginListenPreview();
@@ -897,7 +892,7 @@ export class SessionChatController {
897
892
  `recording retained at ${audioPath}`,
898
893
  "run /listen discard to delete it",
899
894
  ]);
900
- return;
895
+ return false;
901
896
  }
902
897
  let audio;
903
898
  try {
@@ -912,7 +907,7 @@ export class SessionChatController {
912
907
  this.retainedListenAudio = undefined;
913
908
  }
914
909
  await cleanupListenTempFile(audioPath);
915
- return;
910
+ return false;
916
911
  }
917
912
  if (audio.byteLength < LISTEN_RECORDING_MIN_BYTES) {
918
913
  transcription?.abort();
@@ -921,7 +916,7 @@ export class SessionChatController {
921
916
  this.retainedListenAudio = undefined;
922
917
  }
923
918
  await cleanupListenTempFile(audioPath);
924
- return;
919
+ return false;
925
920
  }
926
921
  if (this.disposed) {
927
922
  transcription?.abort();
@@ -929,7 +924,7 @@ export class SessionChatController {
929
924
  this.retainedListenAudio = undefined;
930
925
  }
931
926
  await cleanupListenTempFile(audioPath);
932
- return;
927
+ return false;
933
928
  }
934
929
  let activeTranscription = transcription;
935
930
  this.listenActivityLabel = "transcribing voice input";
@@ -942,7 +937,7 @@ export class SessionChatController {
942
937
  mimeType: "audio/wav",
943
938
  });
944
939
  if (this.listenPreview !== preview)
945
- return;
940
+ return false;
946
941
  preview.commit(text);
947
942
  if (text.trim() && !this.editorHiddenSystemMessages.includes(TRANSCRIPTION_GUIDANCE)) {
948
943
  this.editorHiddenSystemMessages.push(TRANSCRIPTION_GUIDANCE);
@@ -957,6 +952,7 @@ export class SessionChatController {
957
952
  `recording remains at ${audioPath}; delete it manually`,
958
953
  ]);
959
954
  }
955
+ return Boolean(text.trim());
960
956
  }
961
957
  catch (error) {
962
958
  this.retainedListenAudio = { audioPath, durationMs };
@@ -965,6 +961,7 @@ export class SessionChatController {
965
961
  `recording retained at ${audioPath}`,
966
962
  "run /listen retry to try again, or /listen discard to delete it",
967
963
  ]);
964
+ return false;
968
965
  }
969
966
  finally {
970
967
  activeTranscription?.abort();
@@ -2278,9 +2275,6 @@ export class SessionChatController {
2278
2275
  !this.listenActivityLabel &&
2279
2276
  !this.speakTask);
2280
2277
  }
2281
- resolveDiffToolConfig() {
2282
- return this.config.diffTool ?? this.defaultDiffTool;
2283
- }
2284
2278
  async startDiffReviewBridge(args, session, sessionSnapshot, executionEnvironment = session) {
2285
2279
  const cwd = sessionSnapshot.executionEnvironment.cwd;
2286
2280
  const backend = createSdkToolExecutionBackend({ executionEnvironment, cwd });
@@ -2305,7 +2299,6 @@ export class SessionChatController {
2305
2299
  ...(options.reasoning !== undefined ? { reasoning: options.reasoning } : {}),
2306
2300
  }),
2307
2301
  deps: this.deps,
2308
- ...(this.diffToolLauncher ? { toolLauncher: this.diffToolLauncher } : {}),
2309
2302
  });
2310
2303
  const unsubscribeEphemeral = session.onEphemeral((message) => {
2311
2304
  const event = message.event;
@@ -2326,7 +2319,7 @@ export class SessionChatController {
2326
2319
  if (args.signal.aborted) {
2327
2320
  throw new Error("diff review start aborted");
2328
2321
  }
2329
- await bridge.launchTool(args.diffTool);
2322
+ await bridge.launchTool(this.diffToolLauncher ?? launchBuiltInDiffTool);
2330
2323
  }
2331
2324
  catch (error) {
2332
2325
  unsubscribeEphemeral();