@markusylisiurunen/tau 0.3.76 → 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.
- package/dist/core/agent/agent_runtime.js +6 -11
- package/dist/core/agent/agent_runtime.js.map +1 -1
- package/dist/core/cli.js +2 -5
- package/dist/core/cli.js.map +1 -1
- package/dist/core/commands/registry.js +2 -1
- package/dist/core/commands/registry.js.map +1 -1
- package/dist/core/config/builtin_themes.js +0 -30
- package/dist/core/config/builtin_themes.js.map +1 -1
- package/dist/core/config/content_loader.js +19 -308
- package/dist/core/config/content_loader.js.map +1 -1
- package/dist/core/config/index.js +1 -1
- package/dist/core/config/index.js.map +1 -1
- package/dist/core/config/paths.js +0 -1
- package/dist/core/config/paths.js.map +1 -1
- package/dist/core/config/runtime.js +2 -3
- package/dist/core/config/runtime.js.map +1 -1
- package/dist/core/config/runtime_config_snapshot.js +0 -1
- package/dist/core/config/runtime_config_snapshot.js.map +1 -1
- package/dist/core/config/schema.js +17 -234
- package/dist/core/config/schema.js.map +1 -1
- package/dist/core/config/skills_loader.js +0 -8
- package/dist/core/config/skills_loader.js.map +1 -1
- package/dist/core/config/theme_variants.js.map +1 -1
- package/dist/core/config/virtual_bundle.js +3 -9
- package/dist/core/config/virtual_bundle.js.map +1 -1
- package/dist/core/config/virtual_defaults.js +0 -2
- package/dist/core/config/virtual_defaults.js.map +1 -1
- package/dist/core/debug.js +8 -25
- package/dist/core/debug.js.map +1 -1
- package/dist/core/diff_review/bridge.js +2 -24
- package/dist/core/diff_review/bridge.js.map +1 -1
- package/dist/core/index.js +0 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/models/catalog.js +2 -3
- package/dist/core/models/catalog.js.map +1 -1
- package/dist/core/personas.js +7 -89
- package/dist/core/personas.js.map +1 -1
- package/dist/core/runtime/agent_model.js +0 -2
- package/dist/core/runtime/agent_model.js.map +1 -1
- package/dist/core/runtime/chat_runtime.js +4 -6
- package/dist/core/runtime/chat_runtime.js.map +1 -1
- package/dist/core/runtime/session_prompt_composer.js +12 -27
- package/dist/core/runtime/session_prompt_composer.js.map +1 -1
- package/dist/core/static/index.js +4 -7
- package/dist/core/static/index.js.map +1 -1
- package/dist/core/static/tau_docs/client-tools.md +1 -1
- package/dist/core/static/tau_docs/config-reference.md +30 -153
- package/dist/core/static/tau_docs/configuration.md +9 -21
- package/dist/core/static/tau_docs/credentials.md +9 -28
- package/dist/core/static/tau_docs/image-generation.md +1 -1
- package/dist/core/static/tau_docs/node-sdk.md +1 -1
- package/dist/core/static/tau_docs/ownership-and-scope.md +5 -5
- package/dist/core/static/tau_docs/pdf-unpacking.md +1 -1
- package/dist/core/static/tau_docs/personas.md +9 -20
- package/dist/core/static/tau_docs/prompts-and-project-context.md +1 -11
- package/dist/core/static/tau_docs/remote-sessions.md +6 -22
- package/dist/core/static/tau_docs/security.md +2 -2
- package/dist/core/static/tau_docs/session-protocol-methods.md +1 -7
- package/dist/core/static/tau_docs/session-protocol.md +2 -0
- package/dist/core/static/tau_docs/sessions.md +2 -14
- package/dist/core/static/tau_docs/skills.md +1 -23
- package/dist/core/static/tau_docs/speech-generation.md +1 -1
- package/dist/core/static/tau_docs/subagents.md +26 -99
- package/dist/core/static/tau_docs/telegram.md +14 -22
- package/dist/core/static/tau_docs/tools.md +6 -6
- package/dist/core/static/tau_docs/troubleshooting.md +19 -20
- package/dist/core/static/tau_docs/tui.md +18 -44
- package/dist/core/subagents/agent_supervisor.js +5 -6
- package/dist/core/subagents/agent_supervisor.js.map +1 -1
- package/dist/core/subagents/format.js +1 -1
- package/dist/core/subagents/format.js.map +1 -1
- package/dist/core/subagents/prompt.js +7 -0
- package/dist/core/subagents/prompt.js.map +1 -0
- package/dist/core/subagents/registry.js +14 -43
- package/dist/core/subagents/registry.js.map +1 -1
- package/dist/core/subagents/types.js +2 -2
- package/dist/core/subagents/types.js.map +1 -1
- package/dist/core/telegram/adapter.js +23 -30
- package/dist/core/telegram/adapter.js.map +1 -1
- package/dist/core/telegram/cli.js +4 -5
- package/dist/core/telegram/cli.js.map +1 -1
- package/dist/core/telegram/config.js +32 -57
- package/dist/core/telegram/config.js.map +1 -1
- package/dist/core/telegram/local_session_client.js +0 -3
- package/dist/core/telegram/local_session_client.js.map +1 -1
- package/dist/core/telegram/runtime.js +3 -5
- package/dist/core/telegram/runtime.js.map +1 -1
- package/dist/core/telegram/session_manager.js +29 -52
- package/dist/core/telegram/session_manager.js.map +1 -1
- package/dist/core/telegram/tts.js +11 -9
- package/dist/core/telegram/tts.js.map +1 -1
- package/dist/core/telegram/workspace.js +13 -18
- package/dist/core/telegram/workspace.js.map +1 -1
- package/dist/core/tool/image_generate.js +37 -14
- package/dist/core/tool/image_generate.js.map +1 -1
- package/dist/core/tool/media.js +84 -4
- package/dist/core/tool/media.js.map +1 -1
- package/dist/core/tool/pdf_unpack.js +17 -10
- package/dist/core/tool/pdf_unpack.js.map +1 -1
- package/dist/core/tool/speech_generate.js +30 -13
- package/dist/core/tool/speech_generate.js.map +1 -1
- package/dist/core/tools/catalog.js +10 -5
- package/dist/core/tools/catalog.js.map +1 -1
- package/dist/core/tools/send_input_to_agent.js +1 -1
- package/dist/core/tools/send_input_to_agent.js.map +1 -1
- package/dist/core/tools/spawn_agent.js +13 -30
- package/dist/core/tools/spawn_agent.js.map +1 -1
- package/dist/core/tools/view_image.js +12 -17
- package/dist/core/tools/view_image.js.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/usage/logs.js.map +1 -1
- package/dist/core/utils/gemini_transcription.js +5 -95
- package/dist/core/utils/gemini_transcription.js.map +1 -1
- package/dist/core/utils/{gemini_speech.js → speech.js} +167 -428
- package/dist/core/utils/speech.js.map +1 -0
- package/dist/core/utils/speech_to_text.js +24 -52
- package/dist/core/utils/speech_to_text.js.map +1 -1
- package/dist/core/utils/speech_to_text_keywords.js +65 -0
- package/dist/core/utils/speech_to_text_keywords.js.map +1 -1
- package/dist/core/version.js +1 -1
- package/dist/diff_tool/app/dist/assets/{angular-html-BjHlbeCk.js → angular-html-CnO8qept.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{angular-ts-5J5hsUV-.js → angular-ts-DPXUio9Z.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{apl-ChIs51_N.js → apl-X8YsymsQ.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{astro-RtGdbaIT.js → astro-BQ9k8AQ0.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{blade-Cuc0ZzS1.js → blade-DZ1LYIzB.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{c-IpjS3QEt.js → c-VLTwNh7z.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{chapel-BvHOmF40.js → chapel-5s-sGN8D.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{cobol-BWLkapNx.js → cobol-C9RzwrVu.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{coffee-lfdf_MuK.js → coffee-BHvjZ343.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{cpp-GvMfdutG.js → cpp-CBTVXbBp.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{crystal--kdmUeXB.js → crystal-DQJua4y4.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{css-CnlOazId.js → css-BQflXFb6.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{edge-CwnxQiFe.js → edge-BmdmXGH4.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{elixir-BVO19qQd.js → elixir-oiOLs98L.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{elm-BK3istEo.js → elm-BgYuiU4E.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{erb-CO4uKwKD.js → erb-CvFrXpyY.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{git-rebase-CDrrgbGV.js → git-rebase-D3Zo1BLH.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{glimmer-js-7CFSyo6c.js → glimmer-js-B4-8E3lJ.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{glimmer-ts-Ofllf2Yo.js → glimmer-ts-CtKkD0t_.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{glsl-K_36bq1K.js → glsl-BAqforx_.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{graphql-BMZnssUN.js → graphql-DuE1RMyL.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{hack-MG_t8QNs.js → hack-CHBcXjz1.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{haml-0hDK-uCt.js → haml-DAs2z3tD.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{handlebars-D4_MRJPB.js → handlebars-CfAla6QK.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{html-BCi--7qp.js → html-D5co0BLD.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{html-derivative-DYq2AWiD.js → html-derivative-BZaWEmAT.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{http-BmLFm2Pm.js → http-Cii5MjJE.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{hurl-CT71cK69.js → hurl-Bur-XdJO.js} +1 -1
- package/dist/diff_tool/app/dist/assets/index-CZUi_I-p.js +340 -0
- package/dist/diff_tool/app/dist/assets/{java-Bm2FCq-d.js → java-DN39wI4w.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{javascript-C7oEny21.js → javascript-VUReF1H4.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{jinja-igQBS-SS.js → jinja-BcrfV1JB.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{jison-BrOUp4rK.js → jison-Bez5Mtmy.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{json-DsuR7Nai.js → json-ChV8m0Le.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{jsx-BdomFXcA.js → jsx-D0SXNtM0.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{julia-DqOG4pbM.js → julia-DvhpcBwG.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{just-ZrSTuT0n.js → just-BGwe8S6x.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{latex-DbmtZIwN.js → latex-pWSag83P.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{liquid-DKnUlRIp.js → liquid-UdnqDjKz.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{lua-Cyq3f59a.js → lua-CjDHeHEr.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{marko-hmOsFPHQ.js → marko-yLX6iW68.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{mdc-BnnQmDC-.js → mdc-BOLj6Oyq.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{nginx-C0zLUSna.js → nginx-5r5xPc2T.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{nim-Oljl3c5n.js → nim-9exKQYMz.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{org-Cp4CA-0c.js → org-B2fpAlbt.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{perl-DstDVYmJ.js → perl-DV2fcwyY.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{php-Cc3bNZ7J.js → php-D-AthX_E.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{pug-B3xDUzl0.js → pug-DuKcQxFj.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{qml-B9iDahKk.js → qml-C16b4SYx.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{r-B7M5ZSBC.js → r-B1ZldnJf.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{razor-BlfV6bjQ.js → razor-TYmslaAB.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{regexp-BVT0NBj6.js → regexp-dWCffmDD.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{rst-Cq-Mcher.js → rst-DEkLr2YR.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{ruby-5uCK_s01.js → ruby-BJnJzr4u.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{sas-m4dYluKN.js → sas-DeRsDbUE.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{scss-DFiJcBQH.js → scss-SGV_CwKm.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{shellscript-DCtSkJJQ.js → shellscript-BI7khmmR.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{shellsession-_DntbpLM.js → shellsession-Nupw_Vvw.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{soy-Dd1fWsG8.js → soy-B96cBzxv.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{sql-Bygp5F-5.js → sql-CsIdKfaO.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{stata-CqIA1VQD.js → stata-Dnq48cE6.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{surrealql-C2-2C-z3.js → surrealql-D6lw4TiD.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{svelte-CrTy7VSb.js → svelte-ChVoq9tB.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{templ-B_h9AHFJ.js → templ-Dh1EXuHD.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{tex-AwlGuBDG.js → tex-KTYusNFe.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{ts-tags--oqU6stH.js → ts-tags-DC2RU1_R.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{tsx-Cx-oUPFA.js → tsx-DtIM39Jy.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{twig-DMQw3R9O.js → twig-C6D_TA3n.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{typescript-BCtu9W7E.js → typescript-BGAE5iuw.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{typst-jGrqJHSo.js → typst-nWoGZ22y.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{vue-html-DTMalvg7.js → vue-html-prNdIjLu.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{vue-GFZcsvXd.js → vue-iyHf-l4z.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{vue-vine-BwDeqLrM.js → vue-vine-KSSlnVeg.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{xml-CoXyuOzf.js → xml-DdCC83Xd.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{xsl-BQFm34CN.js → xsl-DSqZxsez.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{yaml-CbO2A_pF.js → yaml-CZcBUWvf.js} +1 -1
- package/dist/diff_tool/app/dist/index.html +1 -1
- package/dist/diff_tool/http_server.js +2 -9
- package/dist/diff_tool/http_server.js.map +1 -1
- package/dist/diff_tool/index.js +2 -2
- package/dist/diff_tool/index.js.map +1 -1
- package/dist/diff_tool/launcher.js +14 -8
- package/dist/diff_tool/launcher.js.map +1 -1
- package/dist/diff_tool/protocol_client.js +0 -7
- package/dist/diff_tool/protocol_client.js.map +1 -1
- package/dist/diff_tool/review_state.js +4 -10
- package/dist/diff_tool/review_state.js.map +1 -1
- package/dist/diff_tool/review_state_persistence.js +12 -7
- package/dist/diff_tool/review_state_persistence.js.map +1 -1
- package/dist/diff_tool/shared_types.js +0 -48
- package/dist/diff_tool/shared_types.js.map +1 -1
- package/dist/execution/fly_sprite_execution_environment.js +4 -2
- package/dist/execution/fly_sprite_execution_environment.js.map +1 -1
- package/dist/host/execution_runtime.js +1 -1
- package/dist/host/execution_runtime.js.map +1 -1
- package/dist/host/hosted_ephemeral_agent_session.js +1 -1
- package/dist/host/hosted_ephemeral_agent_session.js.map +1 -1
- package/dist/host/local_session_host.js +8 -18
- package/dist/host/local_session_host.js.map +1 -1
- package/dist/main.js +7 -93
- package/dist/main.js.map +1 -1
- package/dist/protocol/index.d.ts +1 -1
- package/dist/protocol/index.js.map +1 -1
- package/dist/protocol/session_protocol.d.ts +4 -23
- package/dist/protocol/session_protocol.js +3 -30
- package/dist/protocol/session_protocol.js.map +1 -1
- package/dist/sdk/local_client.js +0 -6
- package/dist/sdk/local_client.js.map +1 -1
- package/dist/store/session_snapshot_migrations.js +32 -1
- package/dist/store/session_snapshot_migrations.js.map +1 -1
- package/dist/tui/chat_controller/diff_review_service.js +0 -15
- package/dist/tui/chat_controller/diff_review_service.js.map +1 -1
- package/dist/tui/chat_view.js +6 -4
- package/dist/tui/chat_view.js.map +1 -1
- package/dist/tui/listen_capture.js +7 -26
- package/dist/tui/listen_capture.js.map +1 -1
- package/dist/tui/session_chat_app.js +4 -21
- package/dist/tui/session_chat_app.js.map +1 -1
- package/dist/tui/session_chat_controller.js +81 -59
- package/dist/tui/session_chat_controller.js.map +1 -1
- package/dist/tui/speech_playback.js +10 -8
- package/dist/tui/speech_playback.js.map +1 -1
- package/dist/tui/ui/custom_editor.js +21 -15
- package/dist/tui/ui/custom_editor.js.map +1 -1
- package/dist/tui/ui/pending_messages.js +2 -1
- package/dist/tui/ui/pending_messages.js.map +1 -1
- package/dist/tui/ui/slash_autocomplete.js +1 -8
- package/dist/tui/ui/slash_autocomplete.js.map +1 -1
- package/dist/tui/ui/subagent_panel.js +1 -12
- package/dist/tui/ui/subagent_panel.js.map +1 -1
- package/package.json +3 -3
- package/dist/core/config/diff_tool.js +0 -51
- package/dist/core/config/diff_tool.js.map +0 -1
- package/dist/core/install/cli.js +0 -260
- package/dist/core/install/cli.js.map +0 -1
- package/dist/core/models/tau_model_overrides.js +0 -4
- package/dist/core/models/tau_model_overrides.js.map +0 -1
- package/dist/core/subagents/default.js +0 -8
- package/dist/core/subagents/default.js.map +0 -1
- package/dist/core/utils/gemini_speech.js.map +0 -1
- package/dist/core/utils/openai_transcription.js +0 -594
- package/dist/core/utils/openai_transcription.js.map +0 -1
- package/dist/diff_tool/app/dist/assets/index-DyaXBald.js +0 -340
- package/dist/execution/cloudflare_sandbox_execution_environment.js +0 -563
- package/dist/execution/cloudflare_sandbox_execution_environment.js.map +0 -1
- package/dist/execution/sandbox_tool_helpers.js +0 -30
- package/dist/execution/sandbox_tool_helpers.js.map +0 -1
- package/dist/starter/prompts/approval-review-branch.md +0 -7
- package/dist/starter/prompts/approval-review-current-changes.md +0 -7
- package/dist/starter/prompts/approval-review-last-commit.md +0 -7
- package/dist/starter/prompts/commit-all.md +0 -9
- package/dist/starter/prompts/commit-staged.md +0 -9
- package/dist/starter/prompts/guided-review-branch.md +0 -7
- package/dist/starter/prompts/guided-review-current-changes.md +0 -7
- package/dist/starter/prompts/guided-review-last-commit.md +0 -7
- package/dist/starter/prompts/plan.md +0 -7
- package/dist/starter/prompts/review-branch.md +0 -7
- package/dist/starter/prompts/review-current-changes.md +0 -7
- package/dist/starter/prompts/review-last-commit.md +0 -7
- package/dist/starter/prompts/rewrite-prompt.md +0 -89
- package/dist/starter/skills/approval-review/SKILL.md +0 -219
- package/dist/starter/skills/code-review/SKILL.md +0 -102
- package/dist/starter/skills/guided-review/SKILL.md +0 -152
- package/dist/starter/skills/plan/SKILL.md +0 -53
- /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 {
|
|
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";
|
|
@@ -12,8 +12,9 @@ import { formatAdaptiveNumber, formatCwd, formatTokenWindow } from "../core/util
|
|
|
12
12
|
import { extractAssistantText } from "../core/utils/messages.js";
|
|
13
13
|
import { getSpeechToTextRecordingMaxDurationMs, getSpeechToTextStreamingSampleRate, SPEECH_TO_TEXT_CLIENT_MAX_DURATION_MS, } from "../core/utils/speech_to_text.js";
|
|
14
14
|
import { collectSpeechToTextContext } from "../core/utils/speech_to_text_context.js";
|
|
15
|
-
import { hasAutoCompactionContinuationMetadata } from "../core/utils/user_metadata.js";
|
|
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";
|
|
@@ -25,9 +26,10 @@ import { InterruptLifecycle } from "./chat_controller/interrupt_lifecycle.js";
|
|
|
25
26
|
import { formatDurationMs, formatFooterTokenCount, formatSessionCost, } from "./chat_controller/status_format.js";
|
|
26
27
|
import { copyTextToClipboard } from "./clipboard.js";
|
|
27
28
|
import { DOUBLE_PRESS_WINDOW_MS } from "./constants.js";
|
|
28
|
-
import { cleanupListenTempFile, createListenTempFilePath, createListenTranscription, deleteListenTempFile, getSpeechToTextApiKey, getSpeechToTextApiKeyErrorMessage,
|
|
29
|
+
import { cleanupListenTempFile, createListenTempFilePath, createListenTranscription, deleteListenTempFile, getSpeechToTextApiKey, getSpeechToTextApiKeyErrorMessage, LISTEN_CAPTURE_START_TIMEOUT_MS, LISTEN_RECORDING_MIN_BYTES, readListenAudio, startListenAudioCapture, } from "./listen_capture.js";
|
|
29
30
|
import { createSdkDiffSnapshotDeps, createSdkToolExecutionBackend, } from "./session_tool_execution_backend.js";
|
|
30
31
|
import { runSpeechPlaybackTask } from "./speech_playback.js";
|
|
32
|
+
const TRANSCRIPTION_GUIDANCE = "Some or all of this message may have been transcribed from speech and may contain misheard words or other transcription errors.";
|
|
31
33
|
const LISTEN_CAPTURE_START_CANCELLED = Symbol("listen capture start cancelled");
|
|
32
34
|
export class SessionChatController {
|
|
33
35
|
view;
|
|
@@ -36,7 +38,6 @@ export class SessionChatController {
|
|
|
36
38
|
targetLabel;
|
|
37
39
|
configuredClientToolNames;
|
|
38
40
|
config;
|
|
39
|
-
defaultDiffTool;
|
|
40
41
|
diffToolLauncher;
|
|
41
42
|
deps;
|
|
42
43
|
speechToTextDeps;
|
|
@@ -83,6 +84,8 @@ export class SessionChatController {
|
|
|
83
84
|
activeListenTranscription;
|
|
84
85
|
listenActivityLabel;
|
|
85
86
|
listenPreview;
|
|
87
|
+
editorHiddenSystemMessages = [];
|
|
88
|
+
submissionHiddenSystemMessages = [];
|
|
86
89
|
pendingEditorMutations = 0;
|
|
87
90
|
speechActivityLabel;
|
|
88
91
|
speakTask;
|
|
@@ -95,7 +98,6 @@ export class SessionChatController {
|
|
|
95
98
|
this.targetLabel = options.targetLabel;
|
|
96
99
|
this.configuredClientToolNames = options.configuredClientToolNames ?? [];
|
|
97
100
|
this.config = options.config ?? {};
|
|
98
|
-
this.defaultDiffTool = options.defaultDiffTool;
|
|
99
101
|
this.diffToolLauncher = options.diffToolLauncher;
|
|
100
102
|
this.deps = options.deps ?? createDefaultCoreDeps();
|
|
101
103
|
this.speechToTextDeps = options.speechToTextDeps;
|
|
@@ -127,7 +129,6 @@ export class SessionChatController {
|
|
|
127
129
|
refreshStatus: () => this.refreshStatus(),
|
|
128
130
|
startTurnTimer: () => this.startTurnTimer(),
|
|
129
131
|
stopTurnTimer: () => this.stopTurnTimer(),
|
|
130
|
-
getDiffToolConfig: () => this.resolveDiffToolConfig(),
|
|
131
132
|
startSession: (args) => this.startDiffReviewBridge(args, this.session, this.snapshot),
|
|
132
133
|
onReviewReturned: (review) => this.handleReturnedDiffReview(review, this.session),
|
|
133
134
|
});
|
|
@@ -185,12 +186,21 @@ export class SessionChatController {
|
|
|
185
186
|
onCtrlP: () => void this.cyclePersonality(),
|
|
186
187
|
onCtrlS: () => void this.stashEditorToClipboard(),
|
|
187
188
|
onCtrlY: () => void this.toggleListenCapture(),
|
|
189
|
+
onDisabledSubmit: (mode) => {
|
|
190
|
+
if (this.listenRecording && !this.listenTransition) {
|
|
191
|
+
void this.runListenTransition(() => this.stopListenCapture(mode));
|
|
192
|
+
}
|
|
193
|
+
},
|
|
188
194
|
onCtrlG: () => this.interruptSelectedSubagent(),
|
|
189
195
|
onEscape: () => void this.interrupt(),
|
|
190
|
-
beforeSubmit: (text) =>
|
|
196
|
+
beforeSubmit: (text) => {
|
|
197
|
+
const allowed = this.beforeSubmit(text);
|
|
198
|
+
this.submissionHiddenSystemMessages = allowed ? [...this.editorHiddenSystemMessages] : [];
|
|
199
|
+
return allowed;
|
|
200
|
+
},
|
|
191
201
|
onChange: (text) => this.handleEditorChange(text),
|
|
192
|
-
onSubmit: (text) => void this.handleSubmit(text),
|
|
193
|
-
|
|
202
|
+
onSubmit: (text) => void this.handleSubmit(text, this.takeHiddenSystemSubmission()),
|
|
203
|
+
onQueueSubmit: (text) => void this.handleSubmit(text, this.takeHiddenSystemSubmission(), "queue"),
|
|
194
204
|
onAltUp: () => void this.cancelPendingMessagesIntoEditor(),
|
|
195
205
|
onAltDown: () => this.cycleSubagentSelection(),
|
|
196
206
|
};
|
|
@@ -218,7 +228,16 @@ export class SessionChatController {
|
|
|
218
228
|
}
|
|
219
229
|
return true;
|
|
220
230
|
}
|
|
221
|
-
|
|
231
|
+
takeHiddenSystemSubmission() {
|
|
232
|
+
const hiddenSystemMessages = this.submissionHiddenSystemMessages;
|
|
233
|
+
this.submissionHiddenSystemMessages = [];
|
|
234
|
+
this.editorHiddenSystemMessages = [];
|
|
235
|
+
return hiddenSystemMessages;
|
|
236
|
+
}
|
|
237
|
+
formatSubmittedText(text, hiddenSystemMessages) {
|
|
238
|
+
return formatTauUserText({ text, hiddenSystemMessages });
|
|
239
|
+
}
|
|
240
|
+
async handleSubmit(text, hiddenSystemMessages = [], mode = "steer") {
|
|
222
241
|
const trimmed = text.trim();
|
|
223
242
|
if (!trimmed) {
|
|
224
243
|
if (this.isStreaming || this.submittedTurnInProgress) {
|
|
@@ -256,7 +275,11 @@ export class SessionChatController {
|
|
|
256
275
|
if (trimmed.startsWith("!")) {
|
|
257
276
|
return;
|
|
258
277
|
}
|
|
259
|
-
this.
|
|
278
|
+
const submittedText = this.formatSubmittedText(trimmed, hiddenSystemMessages);
|
|
279
|
+
if (mode === "steer")
|
|
280
|
+
this.submitSteeringText(submittedText);
|
|
281
|
+
else
|
|
282
|
+
this.submitQueuedText(submittedText);
|
|
260
283
|
return;
|
|
261
284
|
}
|
|
262
285
|
if (trimmed.startsWith("/") && this.isSingleLineInput(text)) {
|
|
@@ -286,7 +309,7 @@ export class SessionChatController {
|
|
|
286
309
|
}
|
|
287
310
|
return;
|
|
288
311
|
}
|
|
289
|
-
await this.runSessionTurn(() => this.session.submit(trimmed));
|
|
312
|
+
await this.runSessionTurn(() => this.session.submit(this.formatSubmittedText(trimmed, hiddenSystemMessages)));
|
|
290
313
|
}
|
|
291
314
|
async onUserInput(text) {
|
|
292
315
|
await this.handleSubmit(text);
|
|
@@ -307,6 +330,10 @@ export class SessionChatController {
|
|
|
307
330
|
this.view.showFooterNotice(`theme set to ${themeId}`, "default");
|
|
308
331
|
}
|
|
309
332
|
handleEditorChange(text) {
|
|
333
|
+
if (!text.trim())
|
|
334
|
+
this.editorHiddenSystemMessages = [];
|
|
335
|
+
else
|
|
336
|
+
this.submissionHiddenSystemMessages = [];
|
|
310
337
|
const wasBash = this.isBashMode;
|
|
311
338
|
const wasBashIncognito = this.isBashIncognito;
|
|
312
339
|
if (text.trim().length > 0) {
|
|
@@ -333,7 +360,6 @@ export class SessionChatController {
|
|
|
333
360
|
themes: () => this.themeIds.map((id) => ({ id })),
|
|
334
361
|
autocompletePaths: async (query, limit) => (await this.session.autocompletePaths({ query, limit })).paths,
|
|
335
362
|
skills: () => this.snapshot.catalog.skills.map((skill) => skill.name),
|
|
336
|
-
subagents: () => Object.keys(this.getCurrentPersonaSnapshot()?.subagents ?? {}),
|
|
337
363
|
};
|
|
338
364
|
}
|
|
339
365
|
buildStartupIntroTitle() {
|
|
@@ -453,21 +479,6 @@ export class SessionChatController {
|
|
|
453
479
|
this.view.requestRender();
|
|
454
480
|
}
|
|
455
481
|
}
|
|
456
|
-
async submitSteeringMessage(text) {
|
|
457
|
-
const trimmed = text.trim();
|
|
458
|
-
if (!trimmed) {
|
|
459
|
-
return;
|
|
460
|
-
}
|
|
461
|
-
if (!this.isSessionOperationActive()) {
|
|
462
|
-
await this.runSessionTurn(() => this.session.submit(trimmed));
|
|
463
|
-
return;
|
|
464
|
-
}
|
|
465
|
-
if (this.isBlockingSessionOperationActive()) {
|
|
466
|
-
this.view.showFooterNotice("wait for tau to become idle before submitting input", "default");
|
|
467
|
-
return;
|
|
468
|
-
}
|
|
469
|
-
this.submitSteeringText(trimmed);
|
|
470
|
-
}
|
|
471
482
|
submitQueuedText(text) {
|
|
472
483
|
void this.session.queue(text).catch((error) => {
|
|
473
484
|
if (!this.isPendingMessageCancellation(error)) {
|
|
@@ -493,8 +504,17 @@ export class SessionChatController {
|
|
|
493
504
|
if (cancelled.length === 0) {
|
|
494
505
|
return;
|
|
495
506
|
}
|
|
496
|
-
const
|
|
497
|
-
|
|
507
|
+
const editor = splitTauUserText(this.view.getEditorText());
|
|
508
|
+
const restored = cancelled.map((message) => splitTauUserText(message.text));
|
|
509
|
+
const hiddenSystemMessages = [
|
|
510
|
+
...this.editorHiddenSystemMessages,
|
|
511
|
+
...[editor, ...restored].flatMap((message) => message.hiddenSystemBlocks.map((block) => block.text)),
|
|
512
|
+
];
|
|
513
|
+
this.view.setEditorText([
|
|
514
|
+
...(editor.displayText ? [editor.displayText] : []),
|
|
515
|
+
...restored.map((message) => message.displayText),
|
|
516
|
+
].join("\n\n---\n\n"));
|
|
517
|
+
this.editorHiddenSystemMessages = hiddenSystemMessages;
|
|
498
518
|
this.view.requestRender();
|
|
499
519
|
}
|
|
500
520
|
catch (error) {
|
|
@@ -651,7 +671,7 @@ export class SessionChatController {
|
|
|
651
671
|
const apiKey = getSpeechToTextApiKey(this.config, this.deps);
|
|
652
672
|
if (!apiKey) {
|
|
653
673
|
this.view.addTranscriptNotice("speech-to-text is not configured", "error", [
|
|
654
|
-
getSpeechToTextApiKeyErrorMessage(
|
|
674
|
+
getSpeechToTextApiKeyErrorMessage("use /listen"),
|
|
655
675
|
]);
|
|
656
676
|
return;
|
|
657
677
|
}
|
|
@@ -672,7 +692,7 @@ export class SessionChatController {
|
|
|
672
692
|
deps: this.deps,
|
|
673
693
|
audioPath,
|
|
674
694
|
signal: abortController.signal,
|
|
675
|
-
streamingSampleRate: getSpeechToTextStreamingSampleRate(
|
|
695
|
+
streamingSampleRate: getSpeechToTextStreamingSampleRate(),
|
|
676
696
|
onAudioChunk: (audio) => transcription?.appendAudio(audio),
|
|
677
697
|
});
|
|
678
698
|
completion = capture.completion;
|
|
@@ -714,7 +734,7 @@ export class SessionChatController {
|
|
|
714
734
|
if (this.listenRecording !== recording || this.listenTransition)
|
|
715
735
|
return;
|
|
716
736
|
void this.runListenTransition(() => this.stopListenCapture());
|
|
717
|
-
}, getSpeechToTextRecordingMaxDurationMs(
|
|
737
|
+
}, getSpeechToTextRecordingMaxDurationMs());
|
|
718
738
|
this.listenRecording = recording;
|
|
719
739
|
this.refreshStatus();
|
|
720
740
|
void this.watchListenRecording(recording);
|
|
@@ -761,7 +781,7 @@ export class SessionChatController {
|
|
|
761
781
|
clearTimeout(timeout);
|
|
762
782
|
}
|
|
763
783
|
}
|
|
764
|
-
async stopListenCapture() {
|
|
784
|
+
async stopListenCapture(mode) {
|
|
765
785
|
const recording = this.listenRecording;
|
|
766
786
|
if (!recording)
|
|
767
787
|
return;
|
|
@@ -781,7 +801,9 @@ export class SessionChatController {
|
|
|
781
801
|
return;
|
|
782
802
|
}
|
|
783
803
|
const durationMs = Math.min(Math.max(Date.now() - recording.startedAt, 0), SPEECH_TO_TEXT_CLIENT_MAX_DURATION_MS);
|
|
784
|
-
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);
|
|
785
807
|
}
|
|
786
808
|
async retryRetainedListenAudio() {
|
|
787
809
|
if (this.pendingEditorMutations > 0) {
|
|
@@ -797,7 +819,9 @@ export class SessionChatController {
|
|
|
797
819
|
this.view.showFooterNotice("no failed speech recording to retry", "default");
|
|
798
820
|
return;
|
|
799
821
|
}
|
|
800
|
-
await this.runListenTransition(() =>
|
|
822
|
+
await this.runListenTransition(async () => {
|
|
823
|
+
await this.transcribeListenAudioFile(retainedAudio.audioPath, retainedAudio.durationMs);
|
|
824
|
+
});
|
|
801
825
|
}
|
|
802
826
|
async discardRetainedListenAudio() {
|
|
803
827
|
if (this.listenRecording || this.listenTransition || this.listenActivityLabel) {
|
|
@@ -854,7 +878,7 @@ export class SessionChatController {
|
|
|
854
878
|
this.retainedListenAudio = undefined;
|
|
855
879
|
}
|
|
856
880
|
await cleanupListenTempFile(audioPath);
|
|
857
|
-
return;
|
|
881
|
+
return false;
|
|
858
882
|
}
|
|
859
883
|
if (!this.listenPreview)
|
|
860
884
|
this.beginListenPreview();
|
|
@@ -868,7 +892,7 @@ export class SessionChatController {
|
|
|
868
892
|
`recording retained at ${audioPath}`,
|
|
869
893
|
"run /listen discard to delete it",
|
|
870
894
|
]);
|
|
871
|
-
return;
|
|
895
|
+
return false;
|
|
872
896
|
}
|
|
873
897
|
let audio;
|
|
874
898
|
try {
|
|
@@ -883,7 +907,7 @@ export class SessionChatController {
|
|
|
883
907
|
this.retainedListenAudio = undefined;
|
|
884
908
|
}
|
|
885
909
|
await cleanupListenTempFile(audioPath);
|
|
886
|
-
return;
|
|
910
|
+
return false;
|
|
887
911
|
}
|
|
888
912
|
if (audio.byteLength < LISTEN_RECORDING_MIN_BYTES) {
|
|
889
913
|
transcription?.abort();
|
|
@@ -892,7 +916,7 @@ export class SessionChatController {
|
|
|
892
916
|
this.retainedListenAudio = undefined;
|
|
893
917
|
}
|
|
894
918
|
await cleanupListenTempFile(audioPath);
|
|
895
|
-
return;
|
|
919
|
+
return false;
|
|
896
920
|
}
|
|
897
921
|
if (this.disposed) {
|
|
898
922
|
transcription?.abort();
|
|
@@ -900,7 +924,7 @@ export class SessionChatController {
|
|
|
900
924
|
this.retainedListenAudio = undefined;
|
|
901
925
|
}
|
|
902
926
|
await cleanupListenTempFile(audioPath);
|
|
903
|
-
return;
|
|
927
|
+
return false;
|
|
904
928
|
}
|
|
905
929
|
let activeTranscription = transcription;
|
|
906
930
|
this.listenActivityLabel = "transcribing voice input";
|
|
@@ -913,8 +937,11 @@ export class SessionChatController {
|
|
|
913
937
|
mimeType: "audio/wav",
|
|
914
938
|
});
|
|
915
939
|
if (this.listenPreview !== preview)
|
|
916
|
-
return;
|
|
940
|
+
return false;
|
|
917
941
|
preview.commit(text);
|
|
942
|
+
if (text.trim() && !this.editorHiddenSystemMessages.includes(TRANSCRIPTION_GUIDANCE)) {
|
|
943
|
+
this.editorHiddenSystemMessages.push(TRANSCRIPTION_GUIDANCE);
|
|
944
|
+
}
|
|
918
945
|
this.retainedListenAudio = undefined;
|
|
919
946
|
try {
|
|
920
947
|
await deleteListenTempFile(audioPath);
|
|
@@ -925,6 +952,7 @@ export class SessionChatController {
|
|
|
925
952
|
`recording remains at ${audioPath}; delete it manually`,
|
|
926
953
|
]);
|
|
927
954
|
}
|
|
955
|
+
return Boolean(text.trim());
|
|
928
956
|
}
|
|
929
957
|
catch (error) {
|
|
930
958
|
this.retainedListenAudio = { audioPath, durationMs };
|
|
@@ -933,6 +961,7 @@ export class SessionChatController {
|
|
|
933
961
|
`recording retained at ${audioPath}`,
|
|
934
962
|
"run /listen retry to try again, or /listen discard to delete it",
|
|
935
963
|
]);
|
|
964
|
+
return false;
|
|
936
965
|
}
|
|
937
966
|
finally {
|
|
938
967
|
activeTranscription?.abort();
|
|
@@ -1143,13 +1172,6 @@ export class SessionChatController {
|
|
|
1143
1172
|
switch (snapshot.kind) {
|
|
1144
1173
|
case "local":
|
|
1145
1174
|
return { kind: "local", cwd: snapshot.cwd };
|
|
1146
|
-
case "cloudflare-sandbox":
|
|
1147
|
-
return {
|
|
1148
|
-
kind: "cloudflare-sandbox",
|
|
1149
|
-
bridgeId: snapshot.bridgeId,
|
|
1150
|
-
sandboxId: snapshot.sandboxId,
|
|
1151
|
-
cwd: snapshot.cwd,
|
|
1152
|
-
};
|
|
1153
1175
|
case "fly-sprite":
|
|
1154
1176
|
return {
|
|
1155
1177
|
kind: "fly-sprite",
|
|
@@ -1986,10 +2008,11 @@ export class SessionChatController {
|
|
|
1986
2008
|
this.view.showFooterNotice("last assistant message was empty.", "default");
|
|
1987
2009
|
return;
|
|
1988
2010
|
}
|
|
1989
|
-
const
|
|
1990
|
-
|
|
2011
|
+
const openAIApiKey = getOpenAIApiKey(this.config, this.deps.env.env());
|
|
2012
|
+
const elevenLabsApiKey = getElevenLabsApiKey(this.config, this.deps.env.env());
|
|
2013
|
+
if (!openAIApiKey || !elevenLabsApiKey) {
|
|
1991
2014
|
this.view.addTranscriptNotice("speech synthesis is not configured", "error", [
|
|
1992
|
-
"set
|
|
2015
|
+
"set OPENAI_API_KEY or apiKeys.openai for rewriting and ELEVENLABS_API_KEY or apiKeys.elevenlabs for synthesis to use /speak",
|
|
1993
2016
|
]);
|
|
1994
2017
|
return;
|
|
1995
2018
|
}
|
|
@@ -1998,7 +2021,8 @@ export class SessionChatController {
|
|
|
1998
2021
|
this.view.startWorkingIcon();
|
|
1999
2022
|
const abortController = new AbortController();
|
|
2000
2023
|
const completion = this.runSpeakTask({
|
|
2001
|
-
|
|
2024
|
+
openAIApiKey,
|
|
2025
|
+
elevenLabsApiKey,
|
|
2002
2026
|
sourceText,
|
|
2003
2027
|
signal: abortController.signal,
|
|
2004
2028
|
});
|
|
@@ -2028,7 +2052,9 @@ export class SessionChatController {
|
|
|
2028
2052
|
async runSpeakTask(args) {
|
|
2029
2053
|
await runSpeechPlaybackTask({
|
|
2030
2054
|
deps: this.deps,
|
|
2031
|
-
|
|
2055
|
+
openAIApiKey: args.openAIApiKey,
|
|
2056
|
+
elevenLabsApiKey: args.elevenLabsApiKey,
|
|
2057
|
+
voiceId: this.config.speech?.voiceId,
|
|
2032
2058
|
sourceText: args.sourceText,
|
|
2033
2059
|
signal: args.signal,
|
|
2034
2060
|
onActivityLabel: (hint) => {
|
|
@@ -2249,9 +2275,6 @@ export class SessionChatController {
|
|
|
2249
2275
|
!this.listenActivityLabel &&
|
|
2250
2276
|
!this.speakTask);
|
|
2251
2277
|
}
|
|
2252
|
-
resolveDiffToolConfig() {
|
|
2253
|
-
return this.config.diffTool ?? this.defaultDiffTool;
|
|
2254
|
-
}
|
|
2255
2278
|
async startDiffReviewBridge(args, session, sessionSnapshot, executionEnvironment = session) {
|
|
2256
2279
|
const cwd = sessionSnapshot.executionEnvironment.cwd;
|
|
2257
2280
|
const backend = createSdkToolExecutionBackend({ executionEnvironment, cwd });
|
|
@@ -2276,7 +2299,6 @@ export class SessionChatController {
|
|
|
2276
2299
|
...(options.reasoning !== undefined ? { reasoning: options.reasoning } : {}),
|
|
2277
2300
|
}),
|
|
2278
2301
|
deps: this.deps,
|
|
2279
|
-
...(this.diffToolLauncher ? { toolLauncher: this.diffToolLauncher } : {}),
|
|
2280
2302
|
});
|
|
2281
2303
|
const unsubscribeEphemeral = session.onEphemeral((message) => {
|
|
2282
2304
|
const event = message.event;
|
|
@@ -2297,7 +2319,7 @@ export class SessionChatController {
|
|
|
2297
2319
|
if (args.signal.aborted) {
|
|
2298
2320
|
throw new Error("diff review start aborted");
|
|
2299
2321
|
}
|
|
2300
|
-
await bridge.launchTool(
|
|
2322
|
+
await bridge.launchTool(this.diffToolLauncher ?? launchBuiltInDiffTool);
|
|
2301
2323
|
}
|
|
2302
2324
|
catch (error) {
|
|
2303
2325
|
unsubscribeEphemeral();
|