zidane 7.2.5 → 8.0.4
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/LICENSE +21 -0
- package/README.md +34 -6
- package/dist/{acp-D-tVyUjw.js → acp-DQDhi2dj.js} +230 -77
- package/dist/acp-DQDhi2dj.js.map +1 -0
- package/dist/acp-cli.d.ts +1 -1
- package/dist/acp-cli.js +9 -66
- package/dist/acp-cli.js.map +1 -1
- package/dist/acp.d.ts +10 -590
- package/dist/acp.d.ts.map +1 -1
- package/dist/acp.js +3 -3
- package/dist/{agent-D0zZnGbt.js → agent-DSLNmBp0.js} +14401 -13214
- package/dist/agent-DSLNmBp0.js.map +1 -0
- package/dist/agent.d.ts +1 -1
- package/dist/agent.js +3 -2
- package/dist/aliasing-lVFbm81n.js +217 -0
- package/dist/aliasing-lVFbm81n.js.map +1 -0
- package/dist/{anthropic-C2aole0G.js → anthropic-CD00LhUP.js} +1442 -1264
- package/dist/anthropic-CD00LhUP.js.map +1 -0
- package/dist/artifacts-CV2hUKnL.js.map +1 -1
- package/dist/{atomic-write-B7zr1ddF.js → atomic-write-Ijgf2Mhc.js} +13 -3
- package/dist/atomic-write-Ijgf2Mhc.js.map +1 -0
- package/dist/call-tool-dHlbGOIY.js +70 -0
- package/dist/call-tool-dHlbGOIY.js.map +1 -0
- package/dist/chat/pure.d.ts +372 -6
- package/dist/chat/pure.d.ts.map +1 -1
- package/dist/chat/pure.js +35 -244
- package/dist/chat/pure.js.map +1 -1
- package/dist/{approvals-DKaJZYlm.js → chat-JPJJ8uu5.js} +15879 -14631
- package/dist/chat-JPJJ8uu5.js.map +1 -0
- package/dist/chat.d.ts +4 -6
- package/dist/chat.js +23 -12
- package/dist/cli-shared-C-YCaglL.js +159 -0
- package/dist/cli-shared-C-YCaglL.js.map +1 -0
- package/dist/client-core-BQSyDALT.d.ts +2115 -0
- package/dist/client-core-BQSyDALT.d.ts.map +1 -0
- package/dist/codemode-worker.d.ts +1 -0
- package/dist/codemode-worker.js +155 -0
- package/dist/codemode-worker.js.map +1 -0
- package/dist/codemode.d.ts +352 -0
- package/dist/codemode.d.ts.map +1 -0
- package/dist/codemode.js +5 -0
- package/dist/connection-Dr-Js4yZ.d.ts +28 -0
- package/dist/connection-Dr-Js4yZ.d.ts.map +1 -0
- package/dist/connection-loop-gdh22LTI.js +112 -0
- package/dist/connection-loop-gdh22LTI.js.map +1 -0
- package/dist/context-segments-BHKlagL6.js +1016 -0
- package/dist/context-segments-BHKlagL6.js.map +1 -0
- package/dist/{context-transport-T_6AYIvy.js → context-transport-DSMTUsK1.js} +3 -3
- package/dist/{context-transport-T_6AYIvy.js.map → context-transport-DSMTUsK1.js.map} +1 -1
- package/dist/contexts/daytona.d.ts +19 -8
- package/dist/contexts/daytona.d.ts.map +1 -1
- package/dist/contexts/daytona.js +1 -440
- package/dist/contexts/docker.d.ts +36 -7
- package/dist/contexts/docker.d.ts.map +1 -1
- package/dist/contexts/docker.js +1 -456
- package/dist/contexts/e2b.d.ts +68 -13
- package/dist/contexts/e2b.d.ts.map +1 -1
- package/dist/contexts/e2b.js +1 -382
- package/dist/contexts/sandbox.d.ts +1 -1
- package/dist/contexts/sandbox.js +5 -0
- package/dist/contexts/sandbox.js.map +1 -1
- package/dist/{contexts-CRE9pw07.js → contexts-d7UolYot.js} +1059 -524
- package/dist/contexts-d7UolYot.js.map +1 -0
- package/dist/contexts.d.ts +3 -3
- package/dist/contexts.js +1 -1
- package/dist/cred-keys-GpBg71cP.js +105 -0
- package/dist/cred-keys-GpBg71cP.js.map +1 -0
- package/dist/{auth-BG2rVKSt.js → credentials-JttEuRON.js} +55 -206
- package/dist/credentials-JttEuRON.js.map +1 -0
- package/dist/{cursor-iojRXHF9.js → cursor-CdjaQTBW.js} +3 -3
- package/dist/{cursor-iojRXHF9.js.map → cursor-CdjaQTBW.js.map} +1 -1
- package/dist/daemon-cli.d.ts +1 -1
- package/dist/daemon-cli.js +3 -2
- package/dist/daemon-cli.js.map +1 -1
- package/dist/daytona-DG3omipZ.js +513 -0
- package/dist/daytona-DG3omipZ.js.map +1 -0
- package/dist/defaults-Cx3zvDOV.js +23 -0
- package/dist/defaults-Cx3zvDOV.js.map +1 -0
- package/dist/dispatcher-BMlu2BmZ.js +4941 -0
- package/dist/dispatcher-BMlu2BmZ.js.map +1 -0
- package/dist/docker-BZhMMJUp.js +727 -0
- package/dist/docker-BZhMMJUp.js.map +1 -0
- package/dist/e2b-CEVOdRib.js +480 -0
- package/dist/e2b-CEVOdRib.js.map +1 -0
- package/dist/edit-utils-EGosADZq.js +234 -0
- package/dist/edit-utils-EGosADZq.js.map +1 -0
- package/dist/environment-8wsKE2Ln.js +214 -0
- package/dist/environment-8wsKE2Ln.js.map +1 -0
- package/dist/eval-BNcvle_J.js +1595 -0
- package/dist/eval-BNcvle_J.js.map +1 -0
- package/dist/eval.d.ts +2 -2
- package/dist/eval.js +1 -1489
- package/dist/executor-Cx5-8yqi.js +621 -0
- package/dist/executor-Cx5-8yqi.js.map +1 -0
- package/dist/extension-authoring-DyGGmq9V.js +385 -0
- package/dist/extension-authoring-DyGGmq9V.js.map +1 -0
- package/dist/extensions.d.ts +2 -2
- package/dist/extensions.js +3 -3
- package/dist/{fetch-url-DX75gpL0.js → fetch-url-Ct2TjDWt.js} +4 -4
- package/dist/{fetch-url-DX75gpL0.js.map → fetch-url-Ct2TjDWt.js.map} +1 -1
- package/dist/{format-BF745pLL.js → format-C2NQEVUH.js} +39 -2
- package/dist/format-C2NQEVUH.js.map +1 -0
- package/dist/format-bytes-C7tfc3Zm.js +55 -0
- package/dist/format-bytes-C7tfc3Zm.js.map +1 -0
- package/dist/headless-C_rNUuYC.js +960 -0
- package/dist/headless-C_rNUuYC.js.map +1 -0
- package/dist/headless.d.ts +1 -1
- package/dist/headless.js +1 -413
- package/dist/{history-search-C4bk1Wz_.js → history-search-CcYzF8-0.js} +7 -3
- package/dist/history-search-CcYzF8-0.js.map +1 -0
- package/dist/history-search-worker.d.ts +1 -1
- package/dist/history-search-worker.js +1 -1
- package/dist/host-D7NrI03V.js +378 -0
- package/dist/host-D7NrI03V.js.map +1 -0
- package/dist/host-signals-BcP5QKUD.js +118 -0
- package/dist/host-signals-BcP5QKUD.js.map +1 -0
- package/dist/identity-CwfO8K-t.js +26 -0
- package/dist/identity-CwfO8K-t.js.map +1 -0
- package/dist/{index-BgN1T3lk.d.ts → index-BGe1fQT7.d.ts} +10987 -9320
- package/dist/index-BGe1fQT7.d.ts.map +1 -0
- package/dist/index-BVQsIKGn.d.ts +448 -0
- package/dist/index-BVQsIKGn.d.ts.map +1 -0
- package/dist/{index-C6NEd5y_.d.ts → index-CHABJd-L.d.ts} +3386 -502
- package/dist/index-CHABJd-L.d.ts.map +1 -0
- package/dist/{index-C37_ppWv.d.ts → index-D6a7qXpg.d.ts} +2 -3
- package/dist/index-D6a7qXpg.d.ts.map +1 -0
- package/dist/index.d.ts +6 -6
- package/dist/index.js +27 -23
- package/dist/{completion-core-BRo86R_L.js → inline-ghost-BVRQeGoL.js} +50 -2
- package/dist/inline-ghost-BVRQeGoL.js.map +1 -0
- package/dist/ipc/remote.d.ts +313 -0
- package/dist/ipc/remote.d.ts.map +1 -0
- package/dist/ipc/remote.js +4 -0
- package/dist/ipc.d.ts +6 -964
- package/dist/ipc.js +403 -4
- package/dist/ipc.js.map +1 -0
- package/dist/{isolation-Kfoof0MM.d.ts → isolation-D9L650W5.d.ts} +100 -15
- package/dist/isolation-D9L650W5.d.ts.map +1 -0
- package/dist/json-rpc--HXQti1E.js +350 -0
- package/dist/json-rpc--HXQti1E.js.map +1 -0
- package/dist/links-j8rED1sR.js +603 -0
- package/dist/links-j8rED1sR.js.map +1 -0
- package/dist/local-terminal-D8QThwo_.js +252 -0
- package/dist/local-terminal-D8QThwo_.js.map +1 -0
- package/dist/{logger--C1VQjwJ.js → logger-Gtqlayx8.js} +199 -173
- package/dist/logger-Gtqlayx8.js.map +1 -0
- package/dist/logs-view-CWG8aUAG.js.map +1 -1
- package/dist/{mcp-CgNd-f3F.js → mcp-_wecH9Qe.js} +608 -562
- package/dist/mcp-_wecH9Qe.js.map +1 -0
- package/dist/mcp.d.ts +2 -2
- package/dist/mcp.js +2 -2
- package/dist/media-sniff-UKijEaiQ.js.map +1 -1
- package/dist/{messages-2jcOA_5R.js → messages-BqiwcD2Q.js} +1017 -1014
- package/dist/messages-BqiwcD2Q.js.map +1 -0
- package/dist/{oauth-DxHO17JE.js → oauth-Px_pBB9W.js} +5 -5
- package/dist/{oauth-DxHO17JE.js.map → oauth-Px_pBB9W.js.map} +1 -1
- package/dist/{openai-compat-Dy56weK8.js → openai-compat-CFrpH7uq.js} +432 -589
- package/dist/openai-compat-CFrpH7uq.js.map +1 -0
- package/dist/orchestration-BCGmB8Ps.js +511 -0
- package/dist/orchestration-BCGmB8Ps.js.map +1 -0
- package/dist/output/stream-json.d.ts +1 -2
- package/dist/output/stream-json.d.ts.map +1 -1
- package/dist/output/stream-json.js +1 -1
- package/dist/output/terminal.d.ts +1 -2
- package/dist/output/terminal.d.ts.map +1 -1
- package/dist/output/terminal.js +13 -7
- package/dist/output/terminal.js.map +1 -1
- package/dist/{plugins-gbI7SBA6.js → plugins-DS7mahzZ.js} +20 -101
- package/dist/plugins-DS7mahzZ.js.map +1 -0
- package/dist/plugins.d.ts +1 -1
- package/dist/plugins.js +1 -2
- package/dist/prelude-Cxo4t74B.js +517 -0
- package/dist/prelude-Cxo4t74B.js.map +1 -0
- package/dist/presets.d.ts +1 -1
- package/dist/presets.js +1 -2
- package/dist/project-root-B8zADr4o.js +167 -0
- package/dist/project-root-B8zADr4o.js.map +1 -0
- package/dist/project-user-paths-BSgtrRxl.js +58 -0
- package/dist/project-user-paths-BSgtrRxl.js.map +1 -0
- package/dist/{prompts-Pqc3JdW_.d.ts → prompts-DYcvqShf.d.ts} +14 -11
- package/dist/prompts-DYcvqShf.d.ts.map +1 -0
- package/dist/protocol-DnhqqSmE.js +13 -0
- package/dist/protocol-DnhqqSmE.js.map +1 -0
- package/dist/providers/anthropic.d.ts +2 -2
- package/dist/providers/anthropic.js +1 -2
- package/dist/providers/arcee.d.ts +1 -1
- package/dist/providers/arcee.js +1 -1
- package/dist/providers/baseten.d.ts +1 -1
- package/dist/providers/baseten.js +1 -1
- package/dist/providers/cerebras.d.ts +1 -1
- package/dist/providers/cerebras.js +3 -2
- package/dist/providers/cerebras.js.map +1 -1
- package/dist/providers/local.d.ts +1 -1
- package/dist/providers/local.js +1 -1
- package/dist/providers/openai-compat.d.ts +1 -1
- package/dist/providers/openai-compat.js +1 -2
- package/dist/providers/openai.d.ts +1 -1
- package/dist/providers/openai.js +15 -12
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/openrouter.d.ts +1 -1
- package/dist/providers/openrouter.js +3 -2
- package/dist/providers/openrouter.js.map +1 -1
- package/dist/providers/xai.d.ts +1 -1
- package/dist/providers/xai.js +3 -3
- package/dist/{providers-BVhnFyiY.js → providers-XUR7F4Hi.js} +4 -4
- package/dist/{providers-BVhnFyiY.js.map → providers-XUR7F4Hi.js.map} +1 -1
- package/dist/providers.d.ts +1 -1
- package/dist/providers.js +4 -4
- package/dist/registry-D6ShBWJU.js +5234 -0
- package/dist/registry-D6ShBWJU.js.map +1 -0
- package/dist/remote-hosts-BtA_9ZGp.js +97 -0
- package/dist/remote-hosts-BtA_9ZGp.js.map +1 -0
- package/dist/restate.d.ts +2 -3
- package/dist/restate.d.ts.map +1 -1
- package/dist/restate.js +631 -572
- package/dist/restate.js.map +1 -1
- package/dist/run-summary-CklLiZ4y.js +288 -0
- package/dist/run-summary-CklLiZ4y.js.map +1 -0
- package/dist/{sandbox-BH0WQkXn.d.ts → sandbox-C5dR5DwQ.d.ts} +6 -3
- package/dist/sandbox-C5dR5DwQ.d.ts.map +1 -0
- package/dist/session/sqlite.d.ts +1 -2
- package/dist/session/sqlite.d.ts.map +1 -1
- package/dist/session/sqlite.js +1 -616
- package/dist/session-factory-BUGY5P40.js +1576 -0
- package/dist/session-factory-BUGY5P40.js.map +1 -0
- package/dist/{session-BqRP1hS7.js → session-xh9JXu6i.js} +94 -52
- package/dist/session-xh9JXu6i.js.map +1 -0
- package/dist/session.d.ts +1 -1
- package/dist/session.js +2 -2
- package/dist/settings-keys-Ckf29NeM.js +677 -0
- package/dist/settings-keys-Ckf29NeM.js.map +1 -0
- package/dist/shell-path-Dqaoow2J.js +412 -0
- package/dist/shell-path-Dqaoow2J.js.map +1 -0
- package/dist/{skills-BC3dodWp.js → skills-DKqZJm4X.js} +430 -470
- package/dist/skills-DKqZJm4X.js.map +1 -0
- package/dist/skills.d.ts +2 -2
- package/dist/skills.js +1 -2
- package/dist/source-mPExaUm8.js +381 -0
- package/dist/source-mPExaUm8.js.map +1 -0
- package/dist/sqlite-DV1DQzN2.js +698 -0
- package/dist/sqlite-DV1DQzN2.js.map +1 -0
- package/dist/{src-CkNQKFKr.js → src-BRMYRJib.js} +903 -1121
- package/dist/src-BRMYRJib.js.map +1 -0
- package/dist/{stdio-DPpBDPx5.js → stdio-C6YyoW3I.js} +4 -4
- package/dist/{stdio-DPpBDPx5.js.map → stdio-C6YyoW3I.js.map} +1 -1
- package/dist/{stdio-loader-Bbx19dMZ.js → stdio-loader-C830Vg-Z.js} +4 -4
- package/dist/{stdio-loader-Bbx19dMZ.js.map → stdio-loader-C830Vg-Z.js.map} +1 -1
- package/dist/system-prompt-MNVHatSD.d.ts.map +1 -1
- package/dist/timeout-DEaqslLO.d.ts.map +1 -1
- package/dist/todo-edits-Dn251YUP.js +1790 -0
- package/dist/todo-edits-Dn251YUP.js.map +1 -0
- package/dist/{turn-operations-DrbJlpq9.js → tool-formatters-IQFDrdrs.js} +1456 -2120
- package/dist/tool-formatters-IQFDrdrs.js.map +1 -0
- package/dist/tool-state-Dku6YqAB.js +989 -0
- package/dist/tool-state-Dku6YqAB.js.map +1 -0
- package/dist/tools/fetch-url.d.ts +1 -2
- package/dist/tools/fetch-url.d.ts.map +1 -1
- package/dist/tools/fetch-url.js +1 -2
- package/dist/tools/prompts.d.ts +1 -1
- package/dist/tools/prompts.js +7 -7
- package/dist/tools/prompts.js.map +1 -1
- package/dist/tools/web-search.d.ts +1 -2
- package/dist/tools/web-search.d.ts.map +1 -1
- package/dist/tools/web-search.js +2 -2
- package/dist/tools/web-search.js.map +1 -1
- package/dist/tools-_DnT3AGM.js +578 -0
- package/dist/tools-_DnT3AGM.js.map +1 -0
- package/dist/tools.d.ts +3 -3
- package/dist/tools.js +4 -2
- package/dist/tui.d.ts +534 -517
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +34933 -27243
- package/dist/tui.js.map +1 -1
- package/dist/turn-operations-B8sokwi5.js +333 -0
- package/dist/turn-operations-B8sokwi5.js.map +1 -0
- package/dist/turn-operations-DQX5ZZni.d.ts +3089 -0
- package/dist/turn-operations-DQX5ZZni.d.ts.map +1 -0
- package/dist/types-C7ZFOztE.d.ts +132 -0
- package/dist/types-C7ZFOztE.d.ts.map +1 -0
- package/dist/types-CH5XpIHw.js +114 -0
- package/dist/types-CH5XpIHw.js.map +1 -0
- package/dist/{types-CWgENVLY.js → types-Cu0ZGDu9.js} +10 -6
- package/dist/types-Cu0ZGDu9.js.map +1 -0
- package/dist/types-IqegbJEE.d.ts +624 -0
- package/dist/types-IqegbJEE.d.ts.map +1 -0
- package/dist/types.d.ts +4 -4
- package/dist/types.js +1 -1
- package/dist/url-D8HCl65b.js +1259 -0
- package/dist/url-D8HCl65b.js.map +1 -0
- package/dist/wasm-BVT-j5cl.js +33 -0
- package/dist/wasm-BVT-j5cl.js.map +1 -0
- package/dist/workspace-exec-stream-SV2R9d5S.js +355 -0
- package/dist/workspace-exec-stream-SV2R9d5S.js.map +1 -0
- package/dist/ws-CIHMvlSh.js +952 -0
- package/dist/ws-CIHMvlSh.js.map +1 -0
- package/dist/ws-client-N7NxzvQp.js +230 -0
- package/dist/ws-client-N7NxzvQp.js.map +1 -0
- package/dist/{xai-CazjStOK.js → xai-CvJTeLrI.js} +165 -5
- package/dist/xai-CvJTeLrI.js.map +1 -0
- package/dist/xdg-zweed0-t.js +117 -0
- package/dist/xdg-zweed0-t.js.map +1 -0
- package/docs/ACP.md +52 -0
- package/docs/ARCHITECTURE.md +103 -6
- package/docs/ARTIFACTS.md +8 -4
- package/docs/CHAT.md +165 -14
- package/docs/EXECUTION_CONTEXT.md +8 -0
- package/docs/EXTENSIONS.md +123 -2
- package/docs/HEADLESS.md +2 -0
- package/docs/IPC.md +775 -64
- package/docs/MACHINES.md +456 -0
- package/docs/PANELS.md +3 -0
- package/docs/README.md +4 -0
- package/docs/RESTATE.md +3 -2
- package/docs/RUN_IN_BACKGROUND.md +10 -2
- package/docs/SERVER.md +1085 -0
- package/docs/SKILL.md +6 -1
- package/docs/TERMINAL.md +75 -0
- package/docs/TUI.md +65 -14
- package/package.json +58 -26
- package/scripts/eval.ts +4 -0
- package/dist/acp-D-tVyUjw.js.map +0 -1
- package/dist/agent-D0zZnGbt.js.map +0 -1
- package/dist/anthropic-C2aole0G.js.map +0 -1
- package/dist/approvals-DKaJZYlm.js.map +0 -1
- package/dist/atomic-write-B7zr1ddF.js.map +0 -1
- package/dist/auth-BG2rVKSt.js.map +0 -1
- package/dist/completion-core-BRo86R_L.js.map +0 -1
- package/dist/contexts/daytona.js.map +0 -1
- package/dist/contexts/docker.js.map +0 -1
- package/dist/contexts/e2b.js.map +0 -1
- package/dist/contexts-CRE9pw07.js.map +0 -1
- package/dist/eval.js.map +0 -1
- package/dist/format-BF745pLL.js.map +0 -1
- package/dist/glob-DluQFSw1.js +0 -270
- package/dist/glob-DluQFSw1.js.map +0 -1
- package/dist/headless.js.map +0 -1
- package/dist/history-search-C4bk1Wz_.js.map +0 -1
- package/dist/index-BgN1T3lk.d.ts.map +0 -1
- package/dist/index-C37_ppWv.d.ts.map +0 -1
- package/dist/index-C6NEd5y_.d.ts.map +0 -1
- package/dist/ipc-BKVIIOqH.js +0 -331
- package/dist/ipc-BKVIIOqH.js.map +0 -1
- package/dist/ipc.d.ts.map +0 -1
- package/dist/isolation-Kfoof0MM.d.ts.map +0 -1
- package/dist/json-rpc-rSWMUh9b.js +0 -192
- package/dist/json-rpc-rSWMUh9b.js.map +0 -1
- package/dist/logger--C1VQjwJ.js.map +0 -1
- package/dist/mcp-CgNd-f3F.js.map +0 -1
- package/dist/messages-2jcOA_5R.js.map +0 -1
- package/dist/openai-compat-Dy56weK8.js.map +0 -1
- package/dist/output-cap-C9zukcCj.js +0 -100
- package/dist/output-cap-C9zukcCj.js.map +0 -1
- package/dist/panels-B6gRk4bf.js +0 -789
- package/dist/panels-B6gRk4bf.js.map +0 -1
- package/dist/plugins-gbI7SBA6.js.map +0 -1
- package/dist/prompts-Pqc3JdW_.d.ts.map +0 -1
- package/dist/run-summary-BU_NgwUT.js +0 -269
- package/dist/run-summary-BU_NgwUT.js.map +0 -1
- package/dist/sandbox-BH0WQkXn.d.ts.map +0 -1
- package/dist/session/sqlite.js.map +0 -1
- package/dist/session-BqRP1hS7.js.map +0 -1
- package/dist/shell-path-DfdXrGg9.js +0 -1549
- package/dist/shell-path-DfdXrGg9.js.map +0 -1
- package/dist/skills-BC3dodWp.js.map +0 -1
- package/dist/src-CkNQKFKr.js.map +0 -1
- package/dist/todo-edits-UOwgxGKu.js +0 -528
- package/dist/todo-edits-UOwgxGKu.js.map +0 -1
- package/dist/tool-formatters-DoRLnfuD.d.ts +0 -759
- package/dist/tool-formatters-DoRLnfuD.d.ts.map +0 -1
- package/dist/transcript-anchors-BeudMbXx.d.ts +0 -1762
- package/dist/transcript-anchors-BeudMbXx.d.ts.map +0 -1
- package/dist/turn-operations-C8bMBDl_.d.ts +0 -1258
- package/dist/turn-operations-C8bMBDl_.d.ts.map +0 -1
- package/dist/turn-operations-DrbJlpq9.js.map +0 -1
- package/dist/types-CWgENVLY.js.map +0 -1
- package/dist/xai-CazjStOK.js.map +0 -1
package/dist/tui.d.ts
CHANGED
|
@@ -1,10 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { Bp as Settings, Bs as LoadedPluginRecord, Cy as McpToolSchema, Ed as InlineAutocompleteProvider, Fd as CompletionProvider, Gh as ProviderAuth, Gy as SessionTurn, Id as CompletionReference, Iu as Theme, Kh as ProviderKey, Lm as ModelChainEntry, Lu as ThemeColors, Oc as StoredExtensionConfigItem, Qb as SessionData, Uc as BadgeTarget, Uo as ExtensionDefinition, Vo as ExtensionCustomRenderer, Vp as StreamEvent, Vs as SessionBadgeEntry, Wb as SkillConfig, Xh as ModelInfo, Zh as ModelOption, _f as InteractionResponse, _s as ExtensionRegistry, bg as accentColor, by as JsonValue, eb as ThinkingLevel, gc as ExtensionConfigCategory, gf as InteractionRequest, gh as EnvironmentActionSummary, gp as AgentRegistry, hh as EnvironmentActionResult, ip as RingBufferSink, js as ExtensionToolRendererEntry, md as PanelFocus, wf as PlanRequest, xg as ContextSegment, xy as McpServerConfig, zp as SessionMeta, zs as LoadedExtension } from "./index-BGe1fQT7.js";
|
|
2
|
+
import { $r as EnabledAllowlistKey, Ai as PreferredCredentialTarget, Ma as KeyBindings, N as SettingsCategory, Qi as ResolvedConfig, So as truncateTrailing, U as SessionExportFormat, Xi as ChatOptions, bo as clipHintsToWidth, ma as marginTopFor, n as computeTurnAnchors, pi as DiscoveredPlugin, qs as CompletionState, t as TranscriptItem, vi as DiscoveredMcp, xo as hintsLength, yi as DiscoveryError, yo as Hint } from "./index-CHABJd-L.js";
|
|
3
|
+
import { Ai as DaemonHealth, G as PromptSegmentRef, J as splitPromptSegments, Ki as isEditErrorResult, Ot as splitMarkdownCodeBlocks, Si as ApprovalRequest, Tt as MarkdownSegment, W as PromptSegment, Yi as isVisible, c as ToolFormatLine, ea as selectableTurnIds, l as displayNameFor, mr as SessionHistoryMatch, na as turnSelectionOwnership, o as TOOL_DISPLAY, qi as isTurnHighlighted, s as ToolDisplayMeta, tt as CatalogEntry, u as formatToolCall, xi as ApprovalDecision } from "./turn-operations-DQX5ZZni.js";
|
|
4
|
+
import { t as HostConnectionStatus } from "./connection-Dr-Js4yZ.js";
|
|
5
|
+
import "./index-BVQsIKGn.js";
|
|
6
|
+
import { t as IpcClient } from "./client-core-BQSyDALT.js";
|
|
4
7
|
import { Buffer } from "node:buffer";
|
|
5
|
-
import { ReactNode } from "react";
|
|
8
|
+
import { Dispatch, ReactNode, SetStateAction } from "react";
|
|
6
9
|
import { RGBA, SyntaxStyle } from "@opentui/core";
|
|
7
|
-
|
|
10
|
+
//#region src/tui/host-target.d.ts
|
|
11
|
+
interface RemoteHost {
|
|
12
|
+
/** `wss://` (or `ws://` on loopback). */
|
|
13
|
+
url: string;
|
|
14
|
+
token?: string;
|
|
15
|
+
}
|
|
16
|
+
//#endregion
|
|
8
17
|
//#region src/tui/agent-picker.d.ts
|
|
9
18
|
/**
|
|
10
19
|
* Modal that lists the registered {@link AgentProfile}s and lets the user
|
|
@@ -17,11 +26,7 @@ import { RGBA, SyntaxStyle } from "@opentui/core";
|
|
|
17
26
|
* Used by `App` (Ctrl+A binding) and exported for hosts that want to drive
|
|
18
27
|
* agent switching from elsewhere in their own composition.
|
|
19
28
|
*/
|
|
20
|
-
declare function AgentPickerModal({
|
|
21
|
-
agents,
|
|
22
|
-
currentAgentId,
|
|
23
|
-
onPick
|
|
24
|
-
}: {
|
|
29
|
+
declare function AgentPickerModal({ agents, currentAgentId, onPick }: {
|
|
25
30
|
agents: AgentRegistry;
|
|
26
31
|
currentAgentId: string;
|
|
27
32
|
onPick: (id: string) => void;
|
|
@@ -36,9 +41,7 @@ declare function AgentPickerModal({
|
|
|
36
41
|
* mount `<App config={resolveConfig(...)} />` themselves inside a renderer
|
|
37
42
|
* they already own.
|
|
38
43
|
*/
|
|
39
|
-
declare function App({
|
|
40
|
-
config
|
|
41
|
-
}: {
|
|
44
|
+
declare function App({ config }: {
|
|
42
45
|
config: ResolvedConfig;
|
|
43
46
|
}): import("react").ReactNode;
|
|
44
47
|
//#endregion
|
|
@@ -69,14 +72,101 @@ declare function App({
|
|
|
69
72
|
* the picker title still reads as "this is the X provider" without
|
|
70
73
|
* carrying the chip pill's heavy visual weight.
|
|
71
74
|
*/
|
|
72
|
-
declare function CompletionPopup({
|
|
73
|
-
state,
|
|
74
|
-
/** Cap on visible rows. 6 keeps the popover compact even with long catalogs. */visibleRows
|
|
75
|
-
}: {
|
|
75
|
+
declare function CompletionPopup({ state, visibleRows }: {
|
|
76
76
|
state: CompletionState<unknown>;
|
|
77
77
|
visibleRows?: number;
|
|
78
78
|
}): ReactNode;
|
|
79
79
|
//#endregion
|
|
80
|
+
//#region src/tui/status-spinner.d.ts
|
|
81
|
+
declare function Spinner({ label }: {
|
|
82
|
+
label?: string;
|
|
83
|
+
}): import("react").ReactNode;
|
|
84
|
+
/**
|
|
85
|
+
* Bar spinner painted in a caller-chosen color: the session-title status
|
|
86
|
+
* icon and the folded-exchange marker. Five cells wide.
|
|
87
|
+
*/
|
|
88
|
+
declare function StatusSpinner({ color }: {
|
|
89
|
+
color: string;
|
|
90
|
+
}): import("react").ReactNode;
|
|
91
|
+
//#endregion
|
|
92
|
+
//#region src/tui/transcript/transcript.d.ts
|
|
93
|
+
/**
|
|
94
|
+
* Transcript rows are keyed by array index on purpose.
|
|
95
|
+
*
|
|
96
|
+
* Identity keys look more correct and are worse here: the streaming tail event
|
|
97
|
+
* is a *new object* on every ~16ms drain tick (coalescing copies the accumulated
|
|
98
|
+
* text into fresh state), so keying by identity hands the hot row a new key
|
|
99
|
+
* every tick and remounts its whole `<markdown>` subtree — measured as the
|
|
100
|
+
* markdown renderable id incrementing once per tick, versus staying put with
|
|
101
|
+
* index keys.
|
|
102
|
+
*
|
|
103
|
+
* The cost of index keys is that `revealEarlierTranscriptEvents` prepends a
|
|
104
|
+
* page, shifting every index and remounting the list once. That is a rare,
|
|
105
|
+
* user-initiated action; the streaming tail is 60 times a second. Fixing both
|
|
106
|
+
* needs a stable id on `StreamEvent` itself, which is a data-model change
|
|
107
|
+
* rather than a rendering one.
|
|
108
|
+
*/
|
|
109
|
+
declare function Transcript({ events, settings, selectedTurnId, busy, searchQuery, searchPending, interactionPending, onLoadEarlier, onReachBottom, onSelectTurn, onOpenTurn, onOpenSessionEvent, onResume, pinSeq }: {
|
|
110
|
+
events: StreamEvent[];
|
|
111
|
+
settings: Settings;
|
|
112
|
+
/** Continue / Retry on the run that stopped early: sends `text` as a prompt. */
|
|
113
|
+
onResume?: (text: string) => void;
|
|
114
|
+
/**
|
|
115
|
+
* Bumped each time you send: the view jumps back to the bottom and follows
|
|
116
|
+
* again, so what you just sent is on screen wherever you were reading.
|
|
117
|
+
*/
|
|
118
|
+
pinSeq?: number;
|
|
119
|
+
/**
|
|
120
|
+
* True while an interaction (question wizard / plan picker) owns the screen.
|
|
121
|
+
* Releases the `pageup` / `pagedown` bindings to that surface, which binds the
|
|
122
|
+
* same keys for its own scrollbox — see `onTranscriptScroll`.
|
|
123
|
+
*/
|
|
124
|
+
interactionPending?: boolean;
|
|
125
|
+
/**
|
|
126
|
+
* Turn id whose events should render with the selection accent bar. `null`
|
|
127
|
+
* leaves every event unhighlighted (normal mode). Events without a turnId
|
|
128
|
+
* (synthetic markers) are never highlighted.
|
|
129
|
+
*/
|
|
130
|
+
selectedTurnId?: string | null;
|
|
131
|
+
/**
|
|
132
|
+
* True while a run is streaming. Drives the inline working throbber that
|
|
133
|
+
* appears at the tail of the transcript while the assistant is preparing
|
|
134
|
+
* a reply (thinking, or otherwise busy before content/tool calls land).
|
|
135
|
+
* Matches Crush's `AssistantMessageItem.isSpinning()` semantics: the
|
|
136
|
+
* throbber hides as soon as the active turn produces visible output.
|
|
137
|
+
*/
|
|
138
|
+
busy?: boolean;
|
|
139
|
+
/** Optional filter query. Rich rows render normally; matching text ranges use the search background. */
|
|
140
|
+
searchQuery?: string;
|
|
141
|
+
/** Suppress the empty-result label while async filtering is still running. */
|
|
142
|
+
searchPending?: boolean;
|
|
143
|
+
/**
|
|
144
|
+
* Reveal one older persisted-history page. Called automatically once the
|
|
145
|
+
* viewport nears the top marker; returns false when no page was loaded.
|
|
146
|
+
*/
|
|
147
|
+
onLoadEarlier?: () => boolean;
|
|
148
|
+
/**
|
|
149
|
+
* Fired once each time the viewport returns to the bottom after being
|
|
150
|
+
* scrolled away — the host ends a history-reveal hold here.
|
|
151
|
+
*/
|
|
152
|
+
onReachBottom?: () => void;
|
|
153
|
+
/**
|
|
154
|
+
* Mouse companion to select-turn navigation: hovering an event row
|
|
155
|
+
* moves the selection cursor to its owning turn. Only consulted while
|
|
156
|
+
* a selection exists (`selectedTurnId != null`) — i.e. select-turn or
|
|
157
|
+
* transcript-search mode — so normal reading never hijacks the cursor.
|
|
158
|
+
* The host validates the id against its navigable candidates and
|
|
159
|
+
* returns `false` for a rejected move (void/`true` = accepted) — the
|
|
160
|
+
* Transcript uses that to avoid arming its mouse-selection flag for a
|
|
161
|
+
* change that will never land.
|
|
162
|
+
*/
|
|
163
|
+
onSelectTurn?: (turnId: string) => boolean | void;
|
|
164
|
+
/** Click companion — open the turn (same action as `↵` on the selection). Same return contract. */
|
|
165
|
+
onOpenTurn?: (turnId: string) => boolean | void;
|
|
166
|
+
/** Click a `session-event` row — switch to the worker session it reports on. */
|
|
167
|
+
onOpenSessionEvent?: (sessionId: string) => void;
|
|
168
|
+
}): import("react").ReactNode;
|
|
169
|
+
//#endregion
|
|
80
170
|
//#region src/tui/components.d.ts
|
|
81
171
|
/**
|
|
82
172
|
* `@opentui/react` extends `React.JSX.IntrinsicElements`, so `onSubmit` on `<input>`
|
|
@@ -106,22 +196,12 @@ interface FooterUsage {
|
|
|
106
196
|
* enough, otherwise stacks the context indicator beneath the hint row.
|
|
107
197
|
* Width tiering is driven by plain-text length estimates — close enough
|
|
108
198
|
* since the segments are ASCII-heavy.
|
|
199
|
+
*
|
|
200
|
+
* Memoized: AppShell re-renders on every stream drain tick, and the footer's
|
|
201
|
+
* props settle between ticks (its clocks run on its own 1s tickers).
|
|
109
202
|
*/
|
|
110
|
-
declare
|
|
111
|
-
|
|
112
|
-
context,
|
|
113
|
-
cost,
|
|
114
|
-
status,
|
|
115
|
-
compactionTokens,
|
|
116
|
-
compactionStartedAt,
|
|
117
|
-
retry,
|
|
118
|
-
contextKey,
|
|
119
|
-
usage,
|
|
120
|
-
usageKey,
|
|
121
|
-
daemonHealth,
|
|
122
|
-
streaming,
|
|
123
|
-
costEstimated
|
|
124
|
-
}: {
|
|
203
|
+
declare const Footer: import("react").MemoExoticComponent<typeof FooterView>;
|
|
204
|
+
declare function FooterView({ hints, context, cost, status, compactionTokens, compactionStartedAt, retry, contextKey, usage, usageKey, daemonHealth, hostLabel, streaming, run, costEstimated }: {
|
|
125
205
|
hints: Hint[];
|
|
126
206
|
context: ContextUsage | null;
|
|
127
207
|
/**
|
|
@@ -143,10 +223,20 @@ declare function Footer({
|
|
|
143
223
|
* or zero tokens leaves the bare spinner.
|
|
144
224
|
*/
|
|
145
225
|
streaming?: {
|
|
226
|
+
turnId?: string;
|
|
146
227
|
outputTokens: number;
|
|
147
228
|
estimated: boolean;
|
|
148
229
|
elapsedMs: number;
|
|
149
230
|
} | null;
|
|
231
|
+
/**
|
|
232
|
+
* The run in flight: when it started and the output its settled turns
|
|
233
|
+
* produced. With `streaming` it drives the busy readout, `1m 15s · ↓1.2k ·
|
|
234
|
+
* 41 tok/s`. `null` falls back to the streaming turn's count alone.
|
|
235
|
+
*/
|
|
236
|
+
run?: {
|
|
237
|
+
startedAt: number;
|
|
238
|
+
settledOutputTokens: number;
|
|
239
|
+
} | null;
|
|
150
240
|
/**
|
|
151
241
|
* Active run status, surfaced as a small glyph at the right edge of
|
|
152
242
|
* the hints (left) section. Replaces the spinner that used to live in
|
|
@@ -162,6 +252,7 @@ declare function Footer({
|
|
|
162
252
|
retry?: {
|
|
163
253
|
attempt: number;
|
|
164
254
|
max: number;
|
|
255
|
+
source?: string;
|
|
165
256
|
} | null;
|
|
166
257
|
/**
|
|
167
258
|
* Rough token estimate of the in-flight compaction summary. Rendered
|
|
@@ -169,7 +260,8 @@ declare function Footer({
|
|
|
169
260
|
* the stream making progress instead of an opaque spinner. Ignored
|
|
170
261
|
* unless `status === 'compacting'`.
|
|
171
262
|
*/
|
|
172
|
-
compactionTokens?: number | null;
|
|
263
|
+
compactionTokens?: number | null;
|
|
264
|
+
/** Wall-clock start of the in-flight compaction — drives the elapsed suffix. */
|
|
173
265
|
compactionStartedAt?: number | null;
|
|
174
266
|
/**
|
|
175
267
|
* Keybinding spec (e.g. `ctrl+shift+g`) that opens the context-usage
|
|
@@ -200,6 +292,8 @@ declare function Footer({
|
|
|
200
292
|
* no trace of a feature that is switched off.
|
|
201
293
|
*/
|
|
202
294
|
daemonHealth?: DaemonHealth | null;
|
|
295
|
+
/** The remote host's name beside the dot (`host: <name>`); `null` (not on a remote host) hides it. */
|
|
296
|
+
hostLabel?: string | null;
|
|
203
297
|
}): ReactNode;
|
|
204
298
|
/**
|
|
205
299
|
* Pure renderer for a list of {@link Hint}s as colored spans —
|
|
@@ -211,9 +305,9 @@ declare function Footer({
|
|
|
211
305
|
* prompt-box overlay wraps it with leading + trailing spaces so the
|
|
212
306
|
* outermost cells punch through the border like a native title would.
|
|
213
307
|
*
|
|
214
|
-
*
|
|
215
|
-
*
|
|
216
|
-
*
|
|
308
|
+
* Pure function over an opaque `ThemeColors`, no internal hook calls so it
|
|
309
|
+
* composes inside any `<text>` regardless of where the parent grabbed its
|
|
310
|
+
* palette.
|
|
217
311
|
*/
|
|
218
312
|
declare function renderHintSpans(hints: readonly Hint[], COLOR: ThemeColors): ReactNode;
|
|
219
313
|
/**
|
|
@@ -278,19 +372,14 @@ interface MetaSegment {
|
|
|
278
372
|
* />
|
|
279
373
|
* </box>
|
|
280
374
|
* ```
|
|
375
|
+
*
|
|
376
|
+
* Memoized for the same reason as {@link Footer}: the chat header's props
|
|
377
|
+
* hold still while a reply streams.
|
|
281
378
|
*/
|
|
282
|
-
declare
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
bg,
|
|
287
|
-
parentWidth,
|
|
288
|
-
statusIcon,
|
|
289
|
-
statusIconCells,
|
|
290
|
-
clickKey,
|
|
291
|
-
action
|
|
292
|
-
}: {
|
|
293
|
-
title: string; /** Optional right-aligned secondary segment. Dropped first when space runs out. */
|
|
379
|
+
declare const TitleOverlay: import("react").MemoExoticComponent<typeof TitleOverlayView>;
|
|
380
|
+
declare function TitleOverlayView({ title, meta, titleColor, bg, parentWidth, statusIcon, statusIconCells, clickKey, action }: {
|
|
381
|
+
title: string;
|
|
382
|
+
/** Optional right-aligned secondary segment. Dropped first when space runs out. */
|
|
294
383
|
meta?: string | readonly MetaSegment[] | null;
|
|
295
384
|
/**
|
|
296
385
|
* Optional clickable glyph chip sitting just LEFT of `meta` on the border
|
|
@@ -299,7 +388,8 @@ declare function TitleOverlay({
|
|
|
299
388
|
* `active` paints it in the brand color, hover in the accent. Counted in
|
|
300
389
|
* the meta budget so it never collides with the title.
|
|
301
390
|
*/
|
|
302
|
-
action?: TitleOverlayAction | null;
|
|
391
|
+
action?: TitleOverlayAction | null;
|
|
392
|
+
/** Defaults to `COLOR.brand`. */
|
|
303
393
|
titleColor?: string;
|
|
304
394
|
/**
|
|
305
395
|
* Background painted behind every overlay cell. MUST match the surface
|
|
@@ -324,8 +414,9 @@ declare function TitleOverlay({
|
|
|
324
414
|
*
|
|
325
415
|
* Sized as `statusIconCells` cells + one leading space when present,
|
|
326
416
|
* so the title budget reserves the right number of extra columns.
|
|
327
|
-
* Pass a {@link StatusSpinner}
|
|
328
|
-
* (
|
|
417
|
+
* Pass a 1-cell `<span>`, or a {@link StatusSpinner} with
|
|
418
|
+
* `statusIconCells={5}` (its bar is five cells); `null` (the default)
|
|
419
|
+
* takes no space.
|
|
329
420
|
*
|
|
330
421
|
* Render order is `title <space> icon`. The leading title slot reads
|
|
331
422
|
* naturally — eye lands on the name first, then catches the activity
|
|
@@ -360,101 +451,9 @@ interface TitleOverlayAction {
|
|
|
360
451
|
/** Optional count rendered after the glyph when > 0. */
|
|
361
452
|
count?: number;
|
|
362
453
|
}
|
|
363
|
-
declare function Spinner({
|
|
364
|
-
label
|
|
365
|
-
}: {
|
|
366
|
-
label?: string;
|
|
367
|
-
}): ReactNode;
|
|
368
|
-
/**
|
|
369
|
-
* Glyph-only spinner painted in a caller-chosen color. Used as the
|
|
370
|
-
* status icon prefixed to the chat screen's session title — a single
|
|
371
|
-
* cell wide so it slots in front of the title text without disturbing
|
|
372
|
-
* the existing `TITLE_OVERLAY_WRAP` budget math.
|
|
373
|
-
*/
|
|
374
|
-
declare function StatusSpinner({
|
|
375
|
-
color
|
|
376
|
-
}: {
|
|
377
|
-
color: string;
|
|
378
|
-
}): ReactNode;
|
|
379
|
-
/**
|
|
380
|
-
* Transcript rows are keyed by array index on purpose.
|
|
381
|
-
*
|
|
382
|
-
* Identity keys look more correct and are worse here: the streaming tail event
|
|
383
|
-
* is a *new object* on every ~16ms drain tick (coalescing copies the accumulated
|
|
384
|
-
* text into fresh state), so keying by identity hands the hot row a new key
|
|
385
|
-
* every tick and remounts its whole `<markdown>` subtree — measured as the
|
|
386
|
-
* markdown renderable id incrementing once per tick, versus staying put with
|
|
387
|
-
* index keys.
|
|
388
|
-
*
|
|
389
|
-
* The cost of index keys is that `revealEarlierTranscriptEvents` prepends a
|
|
390
|
-
* page, shifting every index and remounting the list once. That is a rare,
|
|
391
|
-
* user-initiated action; the streaming tail is 60 times a second. Fixing both
|
|
392
|
-
* needs a stable id on `StreamEvent` itself, which is a data-model change
|
|
393
|
-
* rather than a rendering one.
|
|
394
|
-
*/
|
|
395
|
-
declare function Transcript({
|
|
396
|
-
events,
|
|
397
|
-
settings,
|
|
398
|
-
selectedTurnId,
|
|
399
|
-
busy,
|
|
400
|
-
searchQuery,
|
|
401
|
-
searchPending,
|
|
402
|
-
interactionPending,
|
|
403
|
-
onLoadEarlier,
|
|
404
|
-
onSelectTurn,
|
|
405
|
-
onOpenTurn,
|
|
406
|
-
onOpenSessionEvent
|
|
407
|
-
}: {
|
|
408
|
-
events: StreamEvent[];
|
|
409
|
-
settings: Settings;
|
|
410
|
-
/**
|
|
411
|
-
* True while an interaction (question wizard / plan picker) owns the screen.
|
|
412
|
-
* Releases the `pageup` / `pagedown` bindings to that surface, which binds the
|
|
413
|
-
* same keys for its own scrollbox — see `onTranscriptScroll`.
|
|
414
|
-
*/
|
|
415
|
-
interactionPending?: boolean;
|
|
416
|
-
/**
|
|
417
|
-
* Turn id whose events should render with the selection accent bar. `null`
|
|
418
|
-
* leaves every event unhighlighted (normal mode). Events without a turnId
|
|
419
|
-
* (synthetic markers) are never highlighted.
|
|
420
|
-
*/
|
|
421
|
-
selectedTurnId?: string | null;
|
|
422
|
-
/**
|
|
423
|
-
* True while a run is streaming. Drives the inline working throbber that
|
|
424
|
-
* appears at the tail of the transcript while the assistant is preparing
|
|
425
|
-
* a reply (thinking, or otherwise busy before content/tool calls land).
|
|
426
|
-
* Matches Crush's `AssistantMessageItem.isSpinning()` semantics: the
|
|
427
|
-
* throbber hides as soon as the active turn produces visible output.
|
|
428
|
-
*/
|
|
429
|
-
busy?: boolean; /** Optional filter query. Rich rows render normally; matching text ranges use the search background. */
|
|
430
|
-
searchQuery?: string; /** Suppress the empty-result label while async filtering is still running. */
|
|
431
|
-
searchPending?: boolean;
|
|
432
|
-
/**
|
|
433
|
-
* Reveal one older persisted-history page. Called automatically once the
|
|
434
|
-
* viewport nears the top marker; returns false when no page was loaded.
|
|
435
|
-
*/
|
|
436
|
-
onLoadEarlier?: () => boolean;
|
|
437
|
-
/**
|
|
438
|
-
* Mouse companion to select-turn navigation: hovering an event row
|
|
439
|
-
* moves the selection cursor to its owning turn. Only consulted while
|
|
440
|
-
* a selection exists (`selectedTurnId != null`) — i.e. select-turn or
|
|
441
|
-
* transcript-search mode — so normal reading never hijacks the cursor.
|
|
442
|
-
* The host validates the id against its navigable candidates and
|
|
443
|
-
* returns `false` for a rejected move (void/`true` = accepted) — the
|
|
444
|
-
* Transcript uses that to avoid arming its mouse-selection flag for a
|
|
445
|
-
* change that will never land.
|
|
446
|
-
*/
|
|
447
|
-
onSelectTurn?: (turnId: string) => boolean | void; /** Click companion — open the turn (same action as `↵` on the selection). Same return contract. */
|
|
448
|
-
onOpenTurn?: (turnId: string) => boolean | void; /** Click a `session-event` row — switch to the worker session it reports on. */
|
|
449
|
-
onOpenSessionEvent?: (sessionId: string) => void;
|
|
450
|
-
}): ReactNode;
|
|
451
454
|
//#endregion
|
|
452
455
|
//#region src/tui/effort-picker.d.ts
|
|
453
|
-
declare function EffortPickerModal({
|
|
454
|
-
current,
|
|
455
|
-
supportsAdaptive,
|
|
456
|
-
onPick
|
|
457
|
-
}: {
|
|
456
|
+
declare function EffortPickerModal({ current, supportsAdaptive, onPick }: {
|
|
458
457
|
current: ThinkingLevel | undefined;
|
|
459
458
|
supportsAdaptive: boolean;
|
|
460
459
|
onPick: (effort: ThinkingLevel) => void;
|
|
@@ -482,10 +481,7 @@ declare function useExtensionRenderers(): ExtensionRenderers;
|
|
|
482
481
|
* enabled set actually change, so transcript re-renders stay scoped to
|
|
483
482
|
* real swaps.
|
|
484
483
|
*/
|
|
485
|
-
declare function ExtensionRenderersProvider({
|
|
486
|
-
registry,
|
|
487
|
-
children
|
|
488
|
-
}: {
|
|
484
|
+
declare function ExtensionRenderersProvider({ registry, children }: {
|
|
489
485
|
registry: ExtensionRegistry;
|
|
490
486
|
children: ReactNode;
|
|
491
487
|
}): ReactNode;
|
|
@@ -535,25 +531,21 @@ declare function useRowVisible(margin?: number): boolean;
|
|
|
535
531
|
* Enabled state lives in `settings.enabledExtensions` (mirrors
|
|
536
532
|
* `enabledSkills` / `enabledMcps`). Toggling OFF filters the live
|
|
537
533
|
* registry immediately; toggling ON an extension that boot skipped
|
|
538
|
-
* hot-reloads the registry (see "Hot-load on enable" in
|
|
534
|
+
* hot-reloads the registry (see "Hot-load on enable" in `extensions/use-extension-auto-reload.ts`), so
|
|
539
535
|
* its `setup()` runs and its settings appear without a restart.
|
|
540
536
|
* Agent-side contributions (tools / hooks) apply on the next run.
|
|
541
537
|
*/
|
|
542
|
-
declare function ExtensionsSettingsModal({
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
/** Successfully-loaded + currently-active extensions. */catalog: readonly LoadedExtension[]; /** Inactive entries — disabled-via-allowlist + load failures. */
|
|
538
|
+
declare function ExtensionsSettingsModal({ catalog, inactive }: {
|
|
539
|
+
/** Successfully-loaded + currently-active extensions. */
|
|
540
|
+
catalog: readonly LoadedExtension[];
|
|
541
|
+
/** Inactive entries — disabled-via-allowlist + load failures. */
|
|
547
542
|
inactive?: readonly LoadedExtension[];
|
|
548
543
|
}): import("react").ReactNode;
|
|
549
544
|
//#endregion
|
|
550
545
|
//#region src/tui/interaction-block.d.ts
|
|
551
|
-
declare function InteractionBlock({
|
|
552
|
-
request
|
|
553
|
-
|
|
554
|
-
abortHint
|
|
555
|
-
}: {
|
|
556
|
-
request: InteractionRequest; /** Submit the user's response to the head of the queue. */
|
|
546
|
+
declare function InteractionBlock({ request, onResolve, abortHint }: {
|
|
547
|
+
request: InteractionRequest;
|
|
548
|
+
/** Submit the user's response to the head of the queue. */
|
|
557
549
|
onResolve: (response: InteractionResponse) => void;
|
|
558
550
|
/**
|
|
559
551
|
* Display chord of the `abortRun` binding for the title hint (e.g.
|
|
@@ -571,9 +563,7 @@ declare function InteractionBlock({
|
|
|
571
563
|
* scrollbox, no preview/collapse state. Hosts embedding these standalone
|
|
572
564
|
* must mount BOTH — the picker alone shows a plan the user cannot read.
|
|
573
565
|
*/
|
|
574
|
-
declare function PlanReviewPanel({
|
|
575
|
-
request
|
|
576
|
-
}: {
|
|
566
|
+
declare function PlanReviewPanel({ request }: {
|
|
577
567
|
request: PlanRequest;
|
|
578
568
|
}): ReactNode;
|
|
579
569
|
//#endregion
|
|
@@ -582,11 +572,14 @@ declare function PlanReviewPanel({
|
|
|
582
572
|
* MCP server picker. Hierarchical: each server is one row, and an
|
|
583
573
|
* expanded server reveals one row per advertised tool. The full surface:
|
|
584
574
|
*
|
|
585
|
-
*
|
|
586
|
-
*
|
|
587
|
-
*
|
|
588
|
-
*
|
|
589
|
-
*
|
|
575
|
+
* ▶ linear stdio · npx -y mcp-remote … (5/7) Signed in ━━● ▼
|
|
576
|
+
* create_issue Create a new Linear issue ━━●
|
|
577
|
+
* list_issues Query issues by status / assignee ━━●
|
|
578
|
+
* update_issue Update fields on an existing issue ●──
|
|
579
|
+
* chrome-devtools stdio · npx -y chrome-devtools-mcp@latest ━━● ◀
|
|
580
|
+
*
|
|
581
|
+
* `▶` marks the cursor row; the chevron after the switch says whether a
|
|
582
|
+
* server is open (`▼`) or closed (`◀`).
|
|
590
583
|
*
|
|
591
584
|
* Keybindings:
|
|
592
585
|
*
|
|
@@ -596,8 +589,8 @@ declare function PlanReviewPanel({
|
|
|
596
589
|
* back to the parent server
|
|
597
590
|
* enter / space toggle — server toggles `enabledMcps`; tool toggles
|
|
598
591
|
* `disabledMcpTools[serverName]`
|
|
599
|
-
* l
|
|
600
|
-
* o
|
|
592
|
+
* l sign in (server rows only — needs-auth / error)
|
|
593
|
+
* o sign out (server rows only — authed / error /
|
|
601
594
|
* authorizing)
|
|
602
595
|
* r refresh discovery
|
|
603
596
|
* esc close — also cancels an in-flight `authorizing`
|
|
@@ -605,10 +598,13 @@ declare function PlanReviewPanel({
|
|
|
605
598
|
*
|
|
606
599
|
* Status badge legend (server row only):
|
|
607
600
|
*
|
|
608
|
-
*
|
|
609
|
-
*
|
|
610
|
-
*
|
|
611
|
-
*
|
|
601
|
+
* (the shared `MCP_STATUS_LABEL` words, same as the desktop app)
|
|
602
|
+
* Signed in tokens stored + bootstrap connected
|
|
603
|
+
* Needs sign-in OAuth wanted, or the server refused the connection
|
|
604
|
+
* Signing in… interactive sign-in in flight
|
|
605
|
+
* Sign-in failed the last sign-in attempt failed
|
|
606
|
+
* Couldn't connect failed for another reason
|
|
607
|
+
* Key refused refused the key in its headers
|
|
612
608
|
*
|
|
613
609
|
* The (N/M) chip on a server header counts ENABLED / TOTAL advertised
|
|
614
610
|
* tools, drawn only when the tool catalog has loaded. Without a catalog
|
|
@@ -619,15 +615,7 @@ declare function PlanReviewPanel({
|
|
|
619
615
|
* Errors (`DiscoveryError[]`) surface in a warn-colored preamble so a
|
|
620
616
|
* broken `mcps.json` is loud rather than invisible.
|
|
621
617
|
*/
|
|
622
|
-
declare function McpsSettingsModal({
|
|
623
|
-
catalog,
|
|
624
|
-
errors,
|
|
625
|
-
toolsByServer,
|
|
626
|
-
onLogin,
|
|
627
|
-
onLogout,
|
|
628
|
-
onCancelLogin,
|
|
629
|
-
onRefresh
|
|
630
|
-
}: {
|
|
618
|
+
declare function McpsSettingsModal({ catalog, errors, toolsByServer, onLogin, onLogout, onCancelLogin, onRefresh }: {
|
|
631
619
|
catalog: readonly DiscoveredMcp[];
|
|
632
620
|
errors?: readonly DiscoveryError[];
|
|
633
621
|
/**
|
|
@@ -668,9 +656,7 @@ interface ModalApi {
|
|
|
668
656
|
unlockEscape: () => void;
|
|
669
657
|
isOpen: boolean;
|
|
670
658
|
}
|
|
671
|
-
declare function ModalRoot({
|
|
672
|
-
children
|
|
673
|
-
}: {
|
|
659
|
+
declare function ModalRoot({ children }: {
|
|
674
660
|
children: ReactNode;
|
|
675
661
|
}): ReactNode;
|
|
676
662
|
declare function useModal(): ModalApi;
|
|
@@ -758,35 +744,19 @@ interface ModalProps {
|
|
|
758
744
|
*
|
|
759
745
|
* Uses `useTerminalDimensions()` so it reflows on `SIGWINCH` without remount.
|
|
760
746
|
*/
|
|
761
|
-
declare function Modal({
|
|
762
|
-
title,
|
|
763
|
-
bottomTitle,
|
|
764
|
-
rightTitle,
|
|
765
|
-
onClose,
|
|
766
|
-
disableEscape,
|
|
767
|
-
children,
|
|
768
|
-
maxWidth,
|
|
769
|
-
minWidth,
|
|
770
|
-
maxHeight,
|
|
771
|
-
horizontalMargin,
|
|
772
|
-
verticalMargin,
|
|
773
|
-
fullscreen
|
|
774
|
-
}: ModalProps): ReactNode;
|
|
747
|
+
declare function Modal({ title, bottomTitle, rightTitle, onClose, disableEscape, children, maxWidth, minWidth, maxHeight, horizontalMargin, verticalMargin, fullscreen }: ModalProps): ReactNode;
|
|
775
748
|
//#endregion
|
|
776
749
|
//#region src/tui/model-options-picker.d.ts
|
|
777
|
-
declare function ModelOptionsPickerModal({
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
/**
|
|
787
|
-
supportsAdaptive: boolean; /** Currently-selected effort (for the `●` marker). */
|
|
788
|
-
currentEffort: ThinkingLevel | undefined; /** Feature options the model declares. */
|
|
789
|
-
options: readonly ModelOption[]; /** Enabled option ids. */
|
|
750
|
+
declare function ModelOptionsPickerModal({ supportsReasoning, supportsAdaptive, currentEffort, options, enabled, onPickEffort, onToggleOption }: {
|
|
751
|
+
/** Whether to render the reasoning-effort section. */
|
|
752
|
+
supportsReasoning: boolean;
|
|
753
|
+
/** Whether the active provider can express the `adaptive` level. */
|
|
754
|
+
supportsAdaptive: boolean;
|
|
755
|
+
/** Currently-selected effort (for the trailing check). */
|
|
756
|
+
currentEffort: ThinkingLevel | undefined;
|
|
757
|
+
/** Feature options the model declares. */
|
|
758
|
+
options: readonly ModelOption[];
|
|
759
|
+
/** Enabled option ids. */
|
|
790
760
|
enabled: Record<string, boolean> | undefined;
|
|
791
761
|
onPickEffort: (effort: ThinkingLevel) => void;
|
|
792
762
|
onToggleOption: (optionId: string) => void;
|
|
@@ -797,17 +767,14 @@ interface PickedModel {
|
|
|
797
767
|
providerKey: ProviderKey;
|
|
798
768
|
modelId: string;
|
|
799
769
|
}
|
|
800
|
-
declare function ModelPickerModal({
|
|
801
|
-
providers
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
/** Authed providers — the catalog is unioned across these. */providers: readonly ProviderAuth[]; /** Resolver from `ResolvedConfig.modelsFor`. */
|
|
809
|
-
modelsFor: (key: ProviderKey) => readonly ModelInfo[]; /** Currently active selection. Promoted to top of its provider section + pre-highlighted. */
|
|
810
|
-
current: PickedModel; /** Single-pick commit — ↵ picks the highlighted row. Ignored when `onApplyChain` is set. */
|
|
770
|
+
declare function ModelPickerModal({ providers, modelsFor, current, onPick, chain, onApplyChain }: {
|
|
771
|
+
/** Authed providers — the catalog is unioned across these. */
|
|
772
|
+
providers: readonly ProviderAuth[];
|
|
773
|
+
/** Resolver from `ResolvedConfig.modelsFor`. */
|
|
774
|
+
modelsFor: (key: ProviderKey) => readonly ModelInfo[];
|
|
775
|
+
/** Currently active selection. Promoted to top of its provider section + pre-highlighted. */
|
|
776
|
+
current: PickedModel;
|
|
777
|
+
/** Single-pick commit — ↵ picks the highlighted row. Ignored when `onApplyChain` is set. */
|
|
811
778
|
onPick?: (picked: PickedModel) => void;
|
|
812
779
|
/**
|
|
813
780
|
* Seed chain for the ordered multi-select (entry 0 = current primary,
|
|
@@ -824,7 +791,18 @@ declare function ModelPickerModal({
|
|
|
824
791
|
onApplyChain?: (chain: ModelChainEntry[]) => void;
|
|
825
792
|
}): import("react").ReactNode;
|
|
826
793
|
//#endregion
|
|
827
|
-
//#region src/tui/
|
|
794
|
+
//#region src/tui/auth/auth-screen.d.ts
|
|
795
|
+
declare function AuthScreen({ onPick, initialConfigureKey }: {
|
|
796
|
+
onPick: (p: ProviderAuth) => void;
|
|
797
|
+
/**
|
|
798
|
+
* Open straight into a SPECIFIC provider's wizard (skip the auth list and
|
|
799
|
+
* the wizard's provider picker). Set when the user picked a provider row in
|
|
800
|
+
* Settings → Authentication to (re)configure it.
|
|
801
|
+
*/
|
|
802
|
+
initialConfigureKey?: string;
|
|
803
|
+
}): import("react").ReactNode;
|
|
804
|
+
//#endregion
|
|
805
|
+
//#region src/tui/prompt/paste.d.ts
|
|
828
806
|
/**
|
|
829
807
|
* Prompt-level attachment captured by the textarea's paste pipeline.
|
|
830
808
|
* Lives only in the TUI layer — converted to {@link PromptPart}s at
|
|
@@ -837,165 +815,54 @@ interface Attachment {
|
|
|
837
815
|
content: Buffer;
|
|
838
816
|
mediaType: string;
|
|
839
817
|
}
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
initialConfigureKey
|
|
843
|
-
}: {
|
|
844
|
-
onPick: (p: ProviderAuth) => void;
|
|
845
|
-
/**
|
|
846
|
-
* Open straight into a SPECIFIC provider's wizard (skip the auth list and
|
|
847
|
-
* the wizard's provider picker). Set when the user picked a provider row in
|
|
848
|
-
* Settings → Authentication to (re)configure it.
|
|
849
|
-
*/
|
|
850
|
-
initialConfigureKey?: string;
|
|
851
|
-
}): ReactNode;
|
|
818
|
+
//#endregion
|
|
819
|
+
//#region src/tui/queue/queued-messages-block.d.ts
|
|
852
820
|
/**
|
|
853
|
-
*
|
|
854
|
-
*
|
|
855
|
-
*
|
|
821
|
+
* One entry in the queued-messages preview list shown above the prompt
|
|
822
|
+
* input. Only the displayable text + the user-provided ref spans are
|
|
823
|
+
* surfaced — the `references` carry-through happens entirely in the
|
|
824
|
+
* App layer (see `messageQueueRef`); this view doesn't need to know
|
|
825
|
+
* about them.
|
|
856
826
|
*/
|
|
857
|
-
interface
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
attention: boolean;
|
|
861
|
-
}
|
|
862
|
-
declare function SessionsScreen({
|
|
863
|
-
sessions,
|
|
864
|
-
currentId,
|
|
865
|
-
focusedSessionId,
|
|
866
|
-
onPick,
|
|
867
|
-
onCreate,
|
|
868
|
-
onFocusChange,
|
|
869
|
-
contentMatches,
|
|
870
|
-
contentSearching,
|
|
871
|
-
contentSearchProgress,
|
|
872
|
-
onSearchQueryChange,
|
|
873
|
-
showAllProjects,
|
|
874
|
-
scopeLabel,
|
|
875
|
-
presence,
|
|
876
|
-
showArtifacts,
|
|
877
|
-
onToggleScope,
|
|
878
|
-
currentProjectRoot,
|
|
879
|
-
mainSessionId,
|
|
880
|
-
notice
|
|
881
|
-
}: {
|
|
882
|
-
sessions: SessionMeta[];
|
|
883
|
-
/**
|
|
884
|
-
* Identity of the row the parent considers focused. Drives the row
|
|
885
|
-
* cursor so the highlight follows the SESSION (not its slot) when the
|
|
886
|
-
* list reorders. `null` lands the cursor on the first session row, or
|
|
887
|
-
* on "+ new" if there are no sessions yet.
|
|
888
|
-
*/
|
|
889
|
-
focusedSessionId: string | null;
|
|
890
|
-
currentId: string | null;
|
|
891
|
-
onPick: (id: string) => void;
|
|
892
|
-
onCreate: () => void;
|
|
893
|
-
/**
|
|
894
|
-
* Notified as the user navigates between rows. Receives the session id
|
|
895
|
-
* of the focused row, or `null` when "+ new" is focused (no session to
|
|
896
|
-
* act on). Parents use this to wire `openSessionDetails` against the live focus.
|
|
897
|
-
*/
|
|
898
|
-
onFocusChange?: (id: string | null) => void; /** Async full-history matches keyed by session id. */
|
|
899
|
-
contentMatches?: ReadonlyMap<string, SessionHistoryMatch>;
|
|
900
|
-
contentSearching?: boolean;
|
|
901
|
-
contentSearchProgress?: {
|
|
902
|
-
done: number;
|
|
903
|
-
total: number;
|
|
904
|
-
}; /** Called whenever the local conversation-filter query changes. */
|
|
905
|
-
onSearchQueryChange?: (query: string) => void;
|
|
906
|
-
/**
|
|
907
|
-
* When `true`, render each session's project label under the title.
|
|
908
|
-
* Off by default — when the list is already filtered to one project
|
|
909
|
-
* the label would just repeat that project on every row.
|
|
910
|
-
*/
|
|
911
|
-
showAllProjects?: boolean; /** `Settings.artifacts` — off hides the `N artifacts` badge on rows. */
|
|
912
|
-
showArtifacts?: boolean;
|
|
913
|
-
/**
|
|
914
|
-
* Fired on `tab` — cycles the list scope (current project / all
|
|
915
|
-
* projects / active windows). The parent owns the scope state (it
|
|
916
|
-
* drives the store query), so this is a plain notification.
|
|
917
|
-
*/
|
|
918
|
-
onToggleScope?: () => void;
|
|
919
|
-
/**
|
|
920
|
-
* Scope label for the title overlay when a non-project scope is on
|
|
921
|
-
* ("all projects", "active windows"). Falls back to "all projects"
|
|
922
|
-
* when `showAllProjects` is set without a label.
|
|
923
|
-
*/
|
|
924
|
-
scopeLabel?: string;
|
|
925
|
-
/**
|
|
926
|
-
* Live presence per session id (daemon mode) — drives the per-row
|
|
927
|
-
* status glyph: running, awaiting input, or attached-idle.
|
|
928
|
-
*/
|
|
929
|
-
presence?: ReadonlyMap<string, SessionPresenceInfo>;
|
|
930
|
-
/**
|
|
931
|
-
* Current project root, used to label "current project" on rows that
|
|
932
|
-
* belong to it when `showAllProjects` is on. Untagged (legacy)
|
|
933
|
-
* sessions render as "untagged".
|
|
934
|
-
*/
|
|
935
|
-
currentProjectRoot?: string;
|
|
827
|
+
interface QueuedPreview {
|
|
828
|
+
/** Raw prompt text the user typed (no `❯` prefix). */
|
|
829
|
+
text: string;
|
|
936
830
|
/**
|
|
937
|
-
*
|
|
938
|
-
*
|
|
939
|
-
*
|
|
940
|
-
*
|
|
941
|
-
* its row is pinned first with a `◆ Main` badge.
|
|
831
|
+
* Optional chip spans from the original prompt (`@files`, `/skills`)
|
|
832
|
+
* — passed through so the queued entry highlights skill / file names
|
|
833
|
+
* the same way the echoed user-prompt event does once it lands in
|
|
834
|
+
* the transcript.
|
|
942
835
|
*/
|
|
943
|
-
|
|
836
|
+
refs?: readonly {
|
|
837
|
+
start: number;
|
|
838
|
+
end: number;
|
|
839
|
+
providerId: string;
|
|
840
|
+
}[];
|
|
944
841
|
/**
|
|
945
|
-
*
|
|
946
|
-
*
|
|
842
|
+
* How many attachments were captured with the prompt. A COUNT rather than the
|
|
843
|
+
* attachments themselves: the row only needs to say they exist, and holding
|
|
844
|
+
* the payloads in a render prop would keep every queued file's bytes alive
|
|
845
|
+
* for as long as the queue is on screen.
|
|
846
|
+
*
|
|
847
|
+
* Absent or `0` renders no badge, so unattached rows look exactly as before.
|
|
947
848
|
*/
|
|
948
|
-
|
|
949
|
-
}
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
onInteraction,
|
|
966
|
-
completionProviders,
|
|
967
|
-
inlineAutocompleteProviders,
|
|
968
|
-
onCompletionTab,
|
|
969
|
-
enterSelectsCompletion,
|
|
970
|
-
onPopupOpenChange,
|
|
971
|
-
selectedTurnId,
|
|
972
|
-
onSelectTurn,
|
|
973
|
-
onOpenTurn,
|
|
974
|
-
onOpenSessionEvent,
|
|
975
|
-
transcriptSearchMode,
|
|
976
|
-
transcriptSearchQuery,
|
|
977
|
-
transcriptSearchEvents,
|
|
978
|
-
transcriptSearchSearching,
|
|
979
|
-
onTranscriptSearchModeChange,
|
|
980
|
-
onTranscriptSearchQueryChange,
|
|
981
|
-
onTranscriptSearchNavigate,
|
|
982
|
-
onTranscriptSearchOpen,
|
|
983
|
-
onLoadEarlierTranscript,
|
|
984
|
-
promptTriggerHints,
|
|
985
|
-
attachImageBinding,
|
|
986
|
-
editorBinding,
|
|
987
|
-
abortBinding,
|
|
988
|
-
sessionDetailsBinding,
|
|
989
|
-
frameWidth,
|
|
990
|
-
artifactsAction,
|
|
991
|
-
onDraftChange,
|
|
992
|
-
remoteDraft,
|
|
993
|
-
onDraftAttachmentsChange,
|
|
994
|
-
remoteDraftAttachments,
|
|
995
|
-
remoteSearchQuery,
|
|
996
|
-
remoteSuggest,
|
|
997
|
-
resolveGhostRemote
|
|
998
|
-
}: {
|
|
849
|
+
attachments?: number;
|
|
850
|
+
}
|
|
851
|
+
/**
|
|
852
|
+
* Resolved keybinding specs the queue UI surfaces to the user. Each
|
|
853
|
+
* field is the literal string from `keybindings.json` ("ctrl+return",
|
|
854
|
+
* "backspace" — or whatever the user has configured) formatted for
|
|
855
|
+
* display via {@link formatBindingForDisplay} at render time so any
|
|
856
|
+
* customization (e.g. `"cmd+up"`, `"delete"`) shows the actual key.
|
|
857
|
+
*/
|
|
858
|
+
interface QueueShortcuts {
|
|
859
|
+
enter: string;
|
|
860
|
+
push: string;
|
|
861
|
+
drop: string;
|
|
862
|
+
}
|
|
863
|
+
//#endregion
|
|
864
|
+
//#region src/tui/chat/chat-screen.d.ts
|
|
865
|
+
interface ChatScreenProps {
|
|
999
866
|
cwd: string;
|
|
1000
867
|
events: StreamEvent[];
|
|
1001
868
|
busy: boolean;
|
|
@@ -1042,9 +909,13 @@ declare function ChatScreen({
|
|
|
1042
909
|
* referenced skill before `agent.run()`), and any attachments captured
|
|
1043
910
|
* by the textarea's paste pipeline.
|
|
1044
911
|
*/
|
|
1045
|
-
onSubmit: (prompt: string, references: readonly CompletionReference<unknown>[], attachments: readonly Attachment[]
|
|
1046
|
-
|
|
1047
|
-
|
|
912
|
+
onSubmit: (prompt: string, references: readonly CompletionReference<unknown>[], attachments: readonly Attachment[], opts?: {
|
|
913
|
+
fromComposer?: boolean;
|
|
914
|
+
}) => void;
|
|
915
|
+
session: SessionMeta | null;
|
|
916
|
+
/** Head of the safe-mode approval queue, or `null` when nothing is pending. */
|
|
917
|
+
pending: ApprovalRequest | null;
|
|
918
|
+
/** Resolve the active prompt with the user's pick. */
|
|
1048
919
|
onApproval: (decision: ApprovalDecision) => void;
|
|
1049
920
|
/**
|
|
1050
921
|
* Head of the interactions queue (plan approval / Q&A). When set,
|
|
@@ -1052,7 +923,8 @@ declare function ChatScreen({
|
|
|
1052
923
|
* mounted but hidden, preserving its draft and attachments. Works the same
|
|
1053
924
|
* for live and resumed interactions; the App only swaps the resolver.
|
|
1054
925
|
*/
|
|
1055
|
-
pendingInteraction: InteractionRequest | null;
|
|
926
|
+
pendingInteraction: InteractionRequest | null;
|
|
927
|
+
/** Submit the user's response to the head of the interactions queue. */
|
|
1056
928
|
onInteraction: (response: InteractionResponse) => void;
|
|
1057
929
|
/**
|
|
1058
930
|
* Optional autocomplete providers. When passed, `PromptBlock` shows a
|
|
@@ -1066,21 +938,9 @@ declare function ChatScreen({
|
|
|
1066
938
|
* extension-registered). Gated by the `inlineAutocomplete` setting
|
|
1067
939
|
* inside `PromptBlock`; Tab accepts the visible ghost.
|
|
1068
940
|
*/
|
|
1069
|
-
inlineAutocompleteProviders?: readonly InlineAutocompleteProvider[];
|
|
941
|
+
inlineAutocompleteProviders?: readonly InlineAutocompleteProvider[];
|
|
942
|
+
/** Optional provider-specific Tab override while the completion popup is open. */
|
|
1070
943
|
onCompletionTab?: (providerId: string) => boolean;
|
|
1071
|
-
/**
|
|
1072
|
-
* Providers whose popup keeps `↵` as the SELECT key (e.g. `chats`,
|
|
1073
|
-
* whose tab is the scope toggle). Everywhere else `↵` submits the
|
|
1074
|
-
* prompt and `tab` is the only select key.
|
|
1075
|
-
*
|
|
1076
|
-
* COUPLED with `onCompletionTab`: any provider whose tab is consumed by
|
|
1077
|
-
* `onCompletionTab` (returns `true`) MUST also be claimed here, or its
|
|
1078
|
-
* popup becomes unselectable — tab does something else and ↵ submits.
|
|
1079
|
-
* The two are separate props (a host may want ↵-select without a tab
|
|
1080
|
-
* override, e.g. a plain list), so the coupling is the caller's to
|
|
1081
|
-
* honor; see `<App>` where both name `chats`.
|
|
1082
|
-
*/
|
|
1083
|
-
enterSelectsCompletion?: (providerId: string) => boolean;
|
|
1084
944
|
/**
|
|
1085
945
|
* Notified whenever the popup opens / closes. The App uses this to gate
|
|
1086
946
|
* the esc-abort handler so esc dismisses the popup instead of aborting
|
|
@@ -1092,9 +952,12 @@ declare function ChatScreen({
|
|
|
1092
952
|
* filtered-result highlight while the textarea remains focused for query
|
|
1093
953
|
* input.
|
|
1094
954
|
*/
|
|
1095
|
-
selectedTurnId?: string | null;
|
|
1096
|
-
|
|
1097
|
-
|
|
955
|
+
selectedTurnId?: string | null;
|
|
956
|
+
/** Hover-to-move-cursor while select-turn / search selection is active. `false` = move rejected. See `Transcript`. */
|
|
957
|
+
onSelectTurn?: (turnId: string) => boolean | void;
|
|
958
|
+
/** Click-to-open a hovered turn — same action as `↵` on the selection. Same return contract. */
|
|
959
|
+
onOpenTurn?: (turnId: string) => boolean | void;
|
|
960
|
+
/** Click a `session-event` row — switch to the worker session it reports on. */
|
|
1098
961
|
onOpenSessionEvent?: (sessionId: string) => void;
|
|
1099
962
|
transcriptSearchMode?: boolean;
|
|
1100
963
|
transcriptSearchQuery?: string;
|
|
@@ -1103,8 +966,13 @@ declare function ChatScreen({
|
|
|
1103
966
|
onTranscriptSearchModeChange?: (enabled: boolean) => void;
|
|
1104
967
|
onTranscriptSearchQueryChange?: (query: string) => void;
|
|
1105
968
|
onTranscriptSearchNavigate?: (delta: -1 | 1) => void;
|
|
1106
|
-
onTranscriptSearchOpen?: () => void;
|
|
969
|
+
onTranscriptSearchOpen?: () => void;
|
|
970
|
+
/** Reveal another persisted transcript page when the scrollbox nears top. */
|
|
1107
971
|
onLoadEarlierTranscript?: () => boolean;
|
|
972
|
+
/** The transcript viewport returned to the bottom (see Transcript `onReachBottom`). */
|
|
973
|
+
onTranscriptReachBottom?: () => void;
|
|
974
|
+
/** Whole-session prompt count for the title meta (the displayed events are capped). */
|
|
975
|
+
userMessageCount?: number;
|
|
1108
976
|
/**
|
|
1109
977
|
* Optional trigger affordances (e.g. `@ files`, `/ skills`) appended
|
|
1110
978
|
* to the prompt-box overlay's hint row when there's room. Caller
|
|
@@ -1112,13 +980,15 @@ declare function ChatScreen({
|
|
|
1112
980
|
* skills catalog is empty, etc.) — the prompt overlay drops the
|
|
1113
981
|
* triggers entirely on narrow terminals.
|
|
1114
982
|
*/
|
|
1115
|
-
promptTriggerHints?: readonly Hint[];
|
|
983
|
+
promptTriggerHints?: readonly Hint[];
|
|
984
|
+
/** App-native text/image clipboard binding threaded into {@link PromptBlock}. */
|
|
1116
985
|
attachImageBinding?: string;
|
|
1117
986
|
/**
|
|
1118
987
|
* Resolved keybinding spec for "edit prompt in $EDITOR", threaded into
|
|
1119
988
|
* {@link PromptBlock}. Absent when the `externalEditor` setting is off.
|
|
1120
989
|
*/
|
|
1121
|
-
editorBinding?: string;
|
|
990
|
+
editorBinding?: string;
|
|
991
|
+
/** Resolved `abortRun` spec, shown in the prompt's busy hint row. */
|
|
1122
992
|
abortBinding?: string;
|
|
1123
993
|
/**
|
|
1124
994
|
* Resolved keybinding spec for `openSessionDetails`, rendered in the
|
|
@@ -1138,7 +1008,8 @@ declare function ChatScreen({
|
|
|
1138
1008
|
* dispatches `clickKey` (the `openArtifacts` binding) to toggle the rail;
|
|
1139
1009
|
* absent when `Settings.artifacts` is off.
|
|
1140
1010
|
*/
|
|
1141
|
-
artifactsAction?: TitleOverlayAction | null;
|
|
1011
|
+
artifactsAction?: TitleOverlayAction | null;
|
|
1012
|
+
/** Draft-sync taps — see the `PromptBlock` props of the same names. */
|
|
1142
1013
|
onDraftChange?: (text: string, shell?: boolean) => void;
|
|
1143
1014
|
remoteDraft?: {
|
|
1144
1015
|
seq: number;
|
|
@@ -1150,70 +1021,193 @@ declare function ChatScreen({
|
|
|
1150
1021
|
* action (paste, drop, remove, submit-clear). Not called for
|
|
1151
1022
|
* `remoteDraftAttachments` applies.
|
|
1152
1023
|
*/
|
|
1153
|
-
onDraftAttachmentsChange?: (attachments: readonly Attachment[]) => void;
|
|
1024
|
+
onDraftAttachmentsChange?: (attachments: readonly Attachment[]) => void;
|
|
1025
|
+
/** Remote composing attachments to mirror, keyed on `seq` like `remoteDraft`. */
|
|
1154
1026
|
remoteDraftAttachments?: {
|
|
1155
1027
|
seq: number;
|
|
1156
1028
|
attachments: Attachment[];
|
|
1157
|
-
} | null;
|
|
1029
|
+
} | null;
|
|
1030
|
+
/** A badge's "Add to prompt", held until the prompt applies it. */
|
|
1031
|
+
promptInsert?: {
|
|
1032
|
+
seq: number;
|
|
1033
|
+
text: string;
|
|
1034
|
+
} | null;
|
|
1035
|
+
onPromptInsertApplied?: (seq: number) => void;
|
|
1036
|
+
/** Remote search-query mirror — see the PromptBlock prop of the same name. */
|
|
1158
1037
|
remoteSearchQuery?: {
|
|
1159
1038
|
seq: number;
|
|
1160
1039
|
query: string;
|
|
1161
|
-
} | null;
|
|
1040
|
+
} | null;
|
|
1041
|
+
/** Remote inline-suggest mirror — see the PromptBlock prop of the same name. */
|
|
1162
1042
|
remoteSuggest?: {
|
|
1163
1043
|
seq: number;
|
|
1164
1044
|
basis: string;
|
|
1165
1045
|
caret: number;
|
|
1166
1046
|
suggestion: string | null;
|
|
1167
1047
|
candidates?: string[];
|
|
1168
|
-
} | null;
|
|
1048
|
+
} | null;
|
|
1049
|
+
/** Daemon-side ghost resolver — see the PromptBlock prop of the same name. */
|
|
1169
1050
|
resolveGhostRemote?: (text: string, cursor: number) => Promise<{
|
|
1170
1051
|
suggestion: string | null;
|
|
1171
1052
|
candidates?: string[];
|
|
1172
1053
|
} | null>;
|
|
1173
|
-
}
|
|
1054
|
+
}
|
|
1055
|
+
declare function ChatScreen({ cwd, events, busy, compacting, queuedMessages, queueSelectionIndex, queueShortcuts, onEnterQueueFromEmptyPrompt, settings, onSubmit, session, pending, onApproval, pendingInteraction, onInteraction, completionProviders, inlineAutocompleteProviders, onCompletionTab, onPopupOpenChange, selectedTurnId, onSelectTurn, onOpenTurn, onOpenSessionEvent, transcriptSearchMode, transcriptSearchQuery, transcriptSearchEvents, transcriptSearchSearching, onTranscriptSearchModeChange, onTranscriptSearchQueryChange, onTranscriptSearchNavigate, onTranscriptSearchOpen, onLoadEarlierTranscript, onTranscriptReachBottom, userMessageCount: userMessageCountProp, promptTriggerHints, attachImageBinding, editorBinding, abortBinding, sessionDetailsBinding, frameWidth, artifactsAction: artifactsActionProp, onDraftChange, remoteDraft, onDraftAttachmentsChange, remoteDraftAttachments, promptInsert, onPromptInsertApplied, remoteSearchQuery, remoteSuggest, resolveGhostRemote }: ChatScreenProps): import("react").ReactNode;
|
|
1056
|
+
//#endregion
|
|
1057
|
+
//#region src/tui/sessions/session-row.d.ts
|
|
1174
1058
|
/**
|
|
1175
|
-
*
|
|
1176
|
-
*
|
|
1177
|
-
*
|
|
1178
|
-
* App layer (see `messageQueueRef`); this view doesn't need to know
|
|
1179
|
-
* about them.
|
|
1059
|
+
* Live per-session presence, structurally mirrored from `zidane/ipc`'s
|
|
1060
|
+
* `SessionPresence` — declared locally so this presentation module never
|
|
1061
|
+
* imports the IPC layer.
|
|
1180
1062
|
*/
|
|
1181
|
-
interface
|
|
1182
|
-
|
|
1183
|
-
|
|
1063
|
+
interface SessionPresenceInfo {
|
|
1064
|
+
windows: number;
|
|
1065
|
+
running: boolean;
|
|
1066
|
+
attention: boolean;
|
|
1067
|
+
}
|
|
1068
|
+
//#endregion
|
|
1069
|
+
//#region src/tui/runtime/transport.d.ts
|
|
1070
|
+
interface HostConnectOptions {
|
|
1071
|
+
appVersion?: string;
|
|
1072
|
+
/** The connection dropped (daemon exit, socket error, host shutdown). Not called for `close()`. */
|
|
1073
|
+
onClose?: () => void;
|
|
1184
1074
|
/**
|
|
1185
|
-
*
|
|
1186
|
-
*
|
|
1187
|
-
*
|
|
1188
|
-
*
|
|
1075
|
+
* A watcher that must never retire a mismatched daemon (the presence
|
|
1076
|
+
* client): it connects to whatever is running and degrades instead.
|
|
1077
|
+
* Session controllers are active: a stale daemon is drained and respawned.
|
|
1078
|
+
* Meaningless in-process, where client and host are one build.
|
|
1189
1079
|
*/
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1080
|
+
passive?: boolean;
|
|
1081
|
+
/** Give up before connecting once aborted (the attempt was superseded). */
|
|
1082
|
+
signal?: AbortSignal;
|
|
1083
|
+
}
|
|
1084
|
+
interface HostTransport {
|
|
1085
|
+
connect: (options?: HostConnectOptions) => Promise<IpcClient>;
|
|
1086
|
+
}
|
|
1087
|
+
//#endregion
|
|
1088
|
+
//#region src/tui/host/host-directory.d.ts
|
|
1089
|
+
type DirectoryHostKind = 'in-process' | 'daemon' | 'server';
|
|
1090
|
+
interface DirectoryHost {
|
|
1091
|
+
readonly key: string;
|
|
1092
|
+
kind: DirectoryHostKind;
|
|
1093
|
+
/** What the user calls it: "This computer", the saved name, or the server's. */
|
|
1094
|
+
name: string;
|
|
1095
|
+
/** Servers. */
|
|
1096
|
+
url?: string;
|
|
1097
|
+
/** `--host`: not saved, not removable. */
|
|
1098
|
+
adHoc?: boolean;
|
|
1099
|
+
transport: HostTransport;
|
|
1100
|
+
/** The app-lifetime client; `null` while (re)connecting or offline. */
|
|
1101
|
+
client: IpcClient | null;
|
|
1102
|
+
status: HostConnectionStatus;
|
|
1103
|
+
/** Why the last connect failed. */
|
|
1104
|
+
error?: string;
|
|
1105
|
+
serverName?: string;
|
|
1106
|
+
serverVersion?: string;
|
|
1107
|
+
}
|
|
1108
|
+
//#endregion
|
|
1109
|
+
//#region src/tui/sessions/hosted-sessions.d.ts
|
|
1110
|
+
/** A host's header in the grouped list. */
|
|
1111
|
+
interface SessionHostGroup {
|
|
1112
|
+
key: string;
|
|
1113
|
+
name: string;
|
|
1114
|
+
kind: DirectoryHost['kind'];
|
|
1115
|
+
status: HostConnectionStatus;
|
|
1116
|
+
/** Rows shown from the last good list (the host is not connected). */
|
|
1117
|
+
stale: boolean;
|
|
1118
|
+
}
|
|
1119
|
+
//#endregion
|
|
1120
|
+
//#region src/tui/sessions/sessions-screen.d.ts
|
|
1121
|
+
interface SessionsScreenProps {
|
|
1122
|
+
sessions: SessionMeta[];
|
|
1195
1123
|
/**
|
|
1196
|
-
*
|
|
1197
|
-
*
|
|
1198
|
-
*
|
|
1199
|
-
*
|
|
1200
|
-
*
|
|
1201
|
-
* Absent or `0` renders no badge, so unattached rows look exactly as before.
|
|
1124
|
+
* Identity of the row the parent considers focused. Drives the row
|
|
1125
|
+
* cursor so the highlight follows the SESSION (not its slot) when the
|
|
1126
|
+
* list reorders. `null` lands the cursor on the first session row, or
|
|
1127
|
+
* on "+ new" if there are no sessions yet.
|
|
1202
1128
|
*/
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1129
|
+
focusedSessionId: string | null;
|
|
1130
|
+
currentId: string | null;
|
|
1131
|
+
onPick: (id: string) => void;
|
|
1132
|
+
onCreate: () => void;
|
|
1133
|
+
/**
|
|
1134
|
+
* Notified as the user navigates between rows. Receives the session id
|
|
1135
|
+
* of the focused row, or `null` when "+ new" is focused (no session to
|
|
1136
|
+
* act on). Parents use this to wire `openSessionDetails` against the live focus.
|
|
1137
|
+
*/
|
|
1138
|
+
onFocusChange?: (id: string | null) => void;
|
|
1139
|
+
/** Async full-history matches keyed by session id. */
|
|
1140
|
+
contentMatches?: ReadonlyMap<string, SessionHistoryMatch>;
|
|
1141
|
+
contentSearching?: boolean;
|
|
1142
|
+
contentSearchProgress?: {
|
|
1143
|
+
done: number;
|
|
1144
|
+
total: number;
|
|
1145
|
+
};
|
|
1146
|
+
/** Called whenever the local conversation-filter query changes. */
|
|
1147
|
+
onSearchQueryChange?: (query: string) => void;
|
|
1148
|
+
/**
|
|
1149
|
+
* When `true`, render each session's project label under the title.
|
|
1150
|
+
* Off by default — when the list is already filtered to one project
|
|
1151
|
+
* the label would just repeat that project on every row.
|
|
1152
|
+
*/
|
|
1153
|
+
showAllProjects?: boolean;
|
|
1154
|
+
/** `Settings.artifacts` — off hides the `N artifacts` badge and the badge line on rows. */
|
|
1155
|
+
showArtifacts?: boolean;
|
|
1156
|
+
/** A session's badges (commits, pull requests, extension kinds): the line under its stats. */
|
|
1157
|
+
loadBadges?: (sessionId: string) => Promise<readonly SessionBadgeEntry[]>;
|
|
1158
|
+
/** Ctrl-click on a badge that stands for one thing (a URL or a path). */
|
|
1159
|
+
onOpenHref?: (href: string) => void;
|
|
1160
|
+
/** Click on a badge: open that chat (by row id) with the rail on `panelId` (default Artifacts), focused on the badge. */
|
|
1161
|
+
onOpenBadge?: (rowId: string, panelId: string | undefined, focus: PanelFocus) => void;
|
|
1162
|
+
/** Right-click on a badge: its actions modal. */
|
|
1163
|
+
onBadgeMenu?: (target: BadgeTarget) => void;
|
|
1164
|
+
/**
|
|
1165
|
+
* Fired on `tab` — cycles the list scope (current project / all
|
|
1166
|
+
* projects / active windows). The parent owns the scope state (it
|
|
1167
|
+
* drives the store query), so this is a plain notification.
|
|
1168
|
+
*/
|
|
1169
|
+
onToggleScope?: () => void;
|
|
1170
|
+
/**
|
|
1171
|
+
* Scope label for the title overlay when a non-project scope is on
|
|
1172
|
+
* ("all projects", "active windows"). Falls back to "all projects"
|
|
1173
|
+
* when `showAllProjects` is set without a label.
|
|
1174
|
+
*/
|
|
1175
|
+
scopeLabel?: string;
|
|
1176
|
+
/**
|
|
1177
|
+
* Live presence per session ROW id (`sessionRowId`: host + id; daemon mode) — drives the per-row
|
|
1178
|
+
* status glyph: running, awaiting input, or attached-idle.
|
|
1179
|
+
*/
|
|
1180
|
+
presence?: ReadonlyMap<string, SessionPresenceInfo>;
|
|
1181
|
+
/**
|
|
1182
|
+
* Current project root, used to label "current project" on rows that
|
|
1183
|
+
* belong to it when `showAllProjects` is on. Untagged (legacy)
|
|
1184
|
+
* sessions render as "untagged".
|
|
1185
|
+
*/
|
|
1186
|
+
currentProjectRoot?: string;
|
|
1187
|
+
/**
|
|
1188
|
+
* Id of the resolved "Main" orchestration session, or `null` when
|
|
1189
|
+
* orchestration is off/ungated or none has been resolved yet (the
|
|
1190
|
+
* `openMainSession` chord creates it lazily — this screen never fabricates
|
|
1191
|
+
* a row for one that doesn't exist). When set and present in `sessions`,
|
|
1192
|
+
* its row is pinned first with a `◆ Main` badge.
|
|
1193
|
+
*/
|
|
1194
|
+
mainSessionId?: string | null;
|
|
1195
|
+
/**
|
|
1196
|
+
* One-line warning under the list (e.g. "a run is in progress — abort
|
|
1197
|
+
* first"). Replaces the search spinner slot while set.
|
|
1198
|
+
*/
|
|
1199
|
+
notice?: string | null;
|
|
1200
|
+
/** `ctrl+r` on a row whose environment failed — provision it again. */
|
|
1201
|
+
onRetryEnvironment?: (id: string) => void;
|
|
1202
|
+
/**
|
|
1203
|
+
* Several hosts (remote hosts on): one header per host, This computer
|
|
1204
|
+
* first. `null` / absent: one host, no headers (the list as it always was).
|
|
1205
|
+
*/
|
|
1206
|
+
hostGroups?: readonly SessionHostGroup[] | null;
|
|
1207
|
+
/** The host that listed a session (a `hostGroups` key). */
|
|
1208
|
+
hostOfSession?: (id: string) => string | undefined;
|
|
1216
1209
|
}
|
|
1210
|
+
declare function SessionsScreen({ sessions, currentId, focusedSessionId, onPick, onCreate, onFocusChange, contentMatches, contentSearching, contentSearchProgress, onSearchQueryChange, showAllProjects, scopeLabel, presence, showArtifacts, loadBadges, onOpenHref, onOpenBadge, onBadgeMenu, onToggleScope, currentProjectRoot, mainSessionId, notice, onRetryEnvironment, hostGroups, hostOfSession }: SessionsScreenProps): import("react").ReactNode;
|
|
1217
1211
|
//#endregion
|
|
1218
1212
|
//#region src/tui/session-details-modal.d.ts
|
|
1219
1213
|
/** Result handed back by the host's export handler — drives the success footer. */
|
|
@@ -1223,7 +1217,14 @@ interface SessionExportResult {
|
|
|
1223
1217
|
/** Format that was written — used to label the success banner. */
|
|
1224
1218
|
format: SessionExportFormat;
|
|
1225
1219
|
}
|
|
1220
|
+
/** The session environment's own commands (push, open PR) — see `EnvironmentAction`. */
|
|
1221
|
+
interface SessionEnvironmentActions {
|
|
1222
|
+
list: (sessionId: string) => Promise<EnvironmentActionSummary[]>;
|
|
1223
|
+
run: (sessionId: string, actionId: string) => Promise<EnvironmentActionResult>;
|
|
1224
|
+
}
|
|
1226
1225
|
interface SessionDetailsModalActions {
|
|
1226
|
+
/** Environment commands, run with `1`–`9`. Omit when the host can't run them. */
|
|
1227
|
+
environment?: SessionEnvironmentActions;
|
|
1227
1228
|
/** Delete the entire session from the store. Parent handles teardown / navigation. */
|
|
1228
1229
|
onDelete: (sessionId: string) => void | Promise<void>;
|
|
1229
1230
|
/**
|
|
@@ -1317,13 +1318,7 @@ interface SessionCompactResult {
|
|
|
1317
1318
|
*/
|
|
1318
1319
|
effectiveTokens: number;
|
|
1319
1320
|
}
|
|
1320
|
-
declare function SessionDetailsModal({
|
|
1321
|
-
session,
|
|
1322
|
-
title,
|
|
1323
|
-
isCurrent,
|
|
1324
|
-
actions,
|
|
1325
|
-
keybindings
|
|
1326
|
-
}: {
|
|
1321
|
+
declare function SessionDetailsModal({ session, title, isCurrent, actions, keybindings }: {
|
|
1327
1322
|
session: SessionData;
|
|
1328
1323
|
/**
|
|
1329
1324
|
* Display title for the session. Falls back to the first user turn's
|
|
@@ -1331,13 +1326,15 @@ declare function SessionDetailsModal({
|
|
|
1331
1326
|
* title and threads it through so the modal header matches what the
|
|
1332
1327
|
* sessions list / chat title bar are showing.
|
|
1333
1328
|
*/
|
|
1334
|
-
title?: string;
|
|
1329
|
+
title?: string;
|
|
1330
|
+
/** True when this is the actively-mounted session — gates the "active" tag in the header. */
|
|
1335
1331
|
isCurrent: boolean;
|
|
1336
|
-
actions: SessionDetailsModalActions;
|
|
1332
|
+
actions: SessionDetailsModalActions;
|
|
1333
|
+
/** Effective keybindings — the modal-internal letter actions resolve through this. */
|
|
1337
1334
|
keybindings: KeyBindings;
|
|
1338
1335
|
}): import("react").ReactNode;
|
|
1339
1336
|
//#endregion
|
|
1340
|
-
//#region src/tui/settings-
|
|
1337
|
+
//#region src/tui/settings/settings-actions.d.ts
|
|
1341
1338
|
interface SettingsActions {
|
|
1342
1339
|
/**
|
|
1343
1340
|
* Generic "open the auth flow" — only used as a FALLBACK action row on the
|
|
@@ -1379,6 +1376,12 @@ interface SettingsActions {
|
|
|
1379
1376
|
* Closes the modal as a side effect — the picker owns the modal slot.
|
|
1380
1377
|
*/
|
|
1381
1378
|
onPickCompactionModel?: () => void;
|
|
1379
|
+
/**
|
|
1380
|
+
* Open Settings → Environments (`environments-settings.tsx`): the default
|
|
1381
|
+
* environment for new sessions and each kind's options. Replaces the
|
|
1382
|
+
* settings modal in the single modal slot.
|
|
1383
|
+
*/
|
|
1384
|
+
onOpenEnvironments?: () => void;
|
|
1382
1385
|
/**
|
|
1383
1386
|
* Open the "Import from Claude Code" flow (sessions / MCP servers /
|
|
1384
1387
|
* skills — see `claude-import.ts`). Hosts wire it only when a
|
|
@@ -1488,9 +1491,10 @@ interface SettingsActions {
|
|
|
1488
1491
|
* panel always shows the freshest tool list. Hosts that don't
|
|
1489
1492
|
* want the auto-refresh (no live agent yet, no MCP credentials
|
|
1490
1493
|
* wired) can omit the action — the panel then degrades to
|
|
1491
|
-
* whatever the on-disk cache last captured.
|
|
1494
|
+
* whatever the on-disk cache last captured. With `name`, tests that
|
|
1495
|
+
* one server only (`ctrl+t` on a server row).
|
|
1492
1496
|
*/
|
|
1493
|
-
onRefreshMcpTools?: () => Promise<void> | void;
|
|
1497
|
+
onRefreshMcpTools?: (name?: string) => Promise<void> | void;
|
|
1494
1498
|
/**
|
|
1495
1499
|
* Open an "edit extension" session rooted at `dir` (`ctrl+e` on a
|
|
1496
1500
|
* focused extension row). The host chdir's into the dir, opens a fresh
|
|
@@ -1533,7 +1537,8 @@ interface SettingsActions {
|
|
|
1533
1537
|
catalog: readonly LoadedExtension[];
|
|
1534
1538
|
inactive: readonly LoadedExtension[];
|
|
1535
1539
|
configCategories: Readonly<Record<string, ExtensionConfigCategory>>;
|
|
1536
|
-
configItems: Readonly<Record<string, Readonly<Record<string, StoredExtensionConfigItem>>>>;
|
|
1540
|
+
configItems: Readonly<Record<string, Readonly<Record<string, StoredExtensionConfigItem>>>>;
|
|
1541
|
+
/** Plugins the rebuilt registry's extensions loaded. */
|
|
1537
1542
|
plugins: readonly LoadedPluginRecord[];
|
|
1538
1543
|
/**
|
|
1539
1544
|
* Skills the registry contributes, ALREADY filtered by
|
|
@@ -1619,27 +1624,20 @@ interface AuthenticationView {
|
|
|
1619
1624
|
/** Detected providers from `detectAuth` — used to render the list with credential badges. */
|
|
1620
1625
|
providers?: readonly ProviderAuth[];
|
|
1621
1626
|
}
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
extensionConfigItems: extensionConfigItemsProp,
|
|
1637
|
-
modelCatalog,
|
|
1638
|
-
logs,
|
|
1639
|
-
authentication,
|
|
1640
|
-
actions,
|
|
1641
|
-
version
|
|
1642
|
-
}?: {
|
|
1627
|
+
//#endregion
|
|
1628
|
+
//#region src/tui/settings/shared.d.ts
|
|
1629
|
+
type TabId = 'authentication' | 'extensions' | 'instructions' | 'keybindings' | 'logs' | 'mcps' | 'skills' | PanelTabId | SettingsCategory;
|
|
1630
|
+
/**
|
|
1631
|
+
* Tabs whose body is a self-contained panel (it owns its keys and layout)
|
|
1632
|
+
* instead of a row list: the Hosts page, and a server's stand-ins for the
|
|
1633
|
+
* Authentication / Skills / MCP / Extensions tabs while the Settings modal
|
|
1634
|
+
* edits that server (`host-settings-scope`).
|
|
1635
|
+
*/
|
|
1636
|
+
type PanelTabId = 'hosts' | 'host-auth' | 'host-skills' | 'host-mcps' | 'host-extensions';
|
|
1637
|
+
//#endregion
|
|
1638
|
+
//#region src/tui/settings/settings-modal-props.d.ts
|
|
1639
|
+
/** Props of `<SettingsModal>` (see `settings-modal.tsx`). */
|
|
1640
|
+
interface SettingsModalProps {
|
|
1643
1641
|
/**
|
|
1644
1642
|
* Embedder fallback — discovered skills when no `<DiscoveryProvider>`
|
|
1645
1643
|
* is mounted. In the in-app flow this is ignored; the modal reads
|
|
@@ -1652,8 +1650,10 @@ declare function SettingsModal({
|
|
|
1652
1650
|
* modal's bottom border as `zidane v…`. Omitted → no version chip.
|
|
1653
1651
|
*/
|
|
1654
1652
|
version?: string;
|
|
1655
|
-
skillsCatalog?: readonly SkillConfig[];
|
|
1656
|
-
|
|
1653
|
+
skillsCatalog?: readonly SkillConfig[];
|
|
1654
|
+
/** Embedder fallback — discovered MCP servers; superseded by context when present. */
|
|
1655
|
+
mcpsCatalog?: readonly DiscoveredMcp[];
|
|
1656
|
+
/** Embedder fallback — `mcps.json` parse errors; superseded by context when present. */
|
|
1657
1657
|
mcpsErrors?: readonly DiscoveryError[];
|
|
1658
1658
|
/**
|
|
1659
1659
|
* Merged keybinding map. When provided, a "Keybindings" tab appears
|
|
@@ -1661,7 +1661,8 @@ declare function SettingsModal({
|
|
|
1661
1661
|
* `actions.onOpenKeybindings`. The UI-tab action row for the same
|
|
1662
1662
|
* affordance is dropped when this is set (no duplicate entry points).
|
|
1663
1663
|
*/
|
|
1664
|
-
keybindings?: KeyBindings;
|
|
1664
|
+
keybindings?: KeyBindings;
|
|
1665
|
+
/** Absolute path to `keybindings.json`. Surfaced on the pinned edit-file button. */
|
|
1665
1666
|
keybindingsPath?: string;
|
|
1666
1667
|
/**
|
|
1667
1668
|
* Extension-contributed keybindings, already resolved against the
|
|
@@ -1692,7 +1693,7 @@ declare function SettingsModal({
|
|
|
1692
1693
|
* directly from there. Toggling OFF filters contributions live;
|
|
1693
1694
|
* toggling ON hot-loads the extension (the host rebuilds the registry,
|
|
1694
1695
|
* so its settings appear immediately — see "Hot-load on enable" in
|
|
1695
|
-
*
|
|
1696
|
+
* `extensions/use-extension-auto-reload.ts`). Agent-side contributions apply on the next run.
|
|
1696
1697
|
*/
|
|
1697
1698
|
extensionsCatalog?: readonly LoadedExtension[];
|
|
1698
1699
|
/**
|
|
@@ -1760,7 +1761,30 @@ declare function SettingsModal({
|
|
|
1760
1761
|
*/
|
|
1761
1762
|
authentication?: AuthenticationView;
|
|
1762
1763
|
actions?: SettingsActions;
|
|
1763
|
-
|
|
1764
|
+
/** Panel tabs (`PanelTabId`): the Hosts page, a server's stand-in tabs. Absent ids are not shown. */
|
|
1765
|
+
panels?: Partial<Record<PanelTabId, SettingsPanel>>;
|
|
1766
|
+
/** Built-in tabs to leave out (a server's settings have no local catalogs to show). */
|
|
1767
|
+
hiddenTabs?: readonly TabId[];
|
|
1768
|
+
/** Replaces "settings" in the title (e.g. `settings · box`). */
|
|
1769
|
+
title?: string;
|
|
1770
|
+
}
|
|
1771
|
+
/** A panel tab's body. Mounted while its tab is active; it owns its keys except ←/→ (unless it captures input). */
|
|
1772
|
+
interface SettingsPanel {
|
|
1773
|
+
render: (props: SettingsPanelRenderProps) => ReactNode;
|
|
1774
|
+
}
|
|
1775
|
+
interface SettingsPanelRenderProps {
|
|
1776
|
+
/** The modal's search text. */
|
|
1777
|
+
query: string;
|
|
1778
|
+
/**
|
|
1779
|
+
* The panel is editing (a text field, a confirmation): every key and esc
|
|
1780
|
+
* go to it, the search input lets go. `false` hands them back.
|
|
1781
|
+
*/
|
|
1782
|
+
setCaptured: (captured: boolean) => void;
|
|
1783
|
+
contentCols: number;
|
|
1784
|
+
}
|
|
1785
|
+
//#endregion
|
|
1786
|
+
//#region src/tui/settings-modal.d.ts
|
|
1787
|
+
declare function SettingsModal(props?: SettingsModalProps): import("react").ReactNode;
|
|
1764
1788
|
//#endregion
|
|
1765
1789
|
//#region src/tui/skills-settings.d.ts
|
|
1766
1790
|
/**
|
|
@@ -1773,10 +1797,7 @@ declare function SettingsModal({
|
|
|
1773
1797
|
* `<SettingsModal>` which exposes the same affordance via its own
|
|
1774
1798
|
* `SettingsActions.onRefreshSkills` plumbing.
|
|
1775
1799
|
*/
|
|
1776
|
-
declare function SkillsSettingsModal({
|
|
1777
|
-
catalog,
|
|
1778
|
-
onRefresh
|
|
1779
|
-
}: {
|
|
1800
|
+
declare function SkillsSettingsModal({ catalog, onRefresh }: {
|
|
1780
1801
|
catalog: readonly SkillConfig[];
|
|
1781
1802
|
onRefresh?: () => Promise<void> | void;
|
|
1782
1803
|
}): import("react").ReactNode;
|
|
@@ -1813,7 +1834,6 @@ declare function buildMdStyle(theme: Theme, overrides?: Record<string, Partial<S
|
|
|
1813
1834
|
* colors (headings, bold, code) paint at full brightness and the block
|
|
1814
1835
|
* doesn't look dim at all. Italic is preserved (it carries no color).
|
|
1815
1836
|
*/
|
|
1816
|
-
|
|
1817
1837
|
flattenFg?: RGBA): SyntaxStyle;
|
|
1818
1838
|
/**
|
|
1819
1839
|
* Active markdown / syntax-highlighting style. Returns a single shared
|
|
@@ -1850,23 +1870,17 @@ declare function useMdStyle(opts?: {
|
|
|
1850
1870
|
* (chat layer) — a GUI shell can build its own toggle list against the
|
|
1851
1871
|
* same hook without pulling OpenTUI.
|
|
1852
1872
|
*/
|
|
1853
|
-
declare function ToggleListModal<T>({
|
|
1854
|
-
catalog,
|
|
1855
|
-
keyOf,
|
|
1856
|
-
settingKey,
|
|
1857
|
-
gcKeys,
|
|
1858
|
-
title,
|
|
1859
|
-
renderDetail,
|
|
1860
|
-
emptyState,
|
|
1861
|
-
preamble,
|
|
1862
|
-
onRefresh
|
|
1863
|
-
}: {
|
|
1873
|
+
declare function ToggleListModal<T>({ catalog, keyOf, settingKey, gcKeys, title, renderDetail, emptyState, preamble, onRefresh }: {
|
|
1864
1874
|
catalog: readonly T[];
|
|
1865
1875
|
keyOf: (entry: T) => string;
|
|
1866
|
-
settingKey: EnabledAllowlistKey;
|
|
1867
|
-
|
|
1868
|
-
|
|
1869
|
-
|
|
1876
|
+
settingKey: EnabledAllowlistKey;
|
|
1877
|
+
/** Forwarded to `useEnabledToggleSet` — names that survive allowlist GC beyond the catalog. */
|
|
1878
|
+
gcKeys?: readonly string[];
|
|
1879
|
+
/** Modal title stem — rendered as `${title} · N / M enabled` in non-empty mode. */
|
|
1880
|
+
title: string;
|
|
1881
|
+
/** Mute-colored trailing copy for each row (description, transport, …). */
|
|
1882
|
+
renderDetail?: (entry: T) => ReactNode;
|
|
1883
|
+
/** What to render when `catalog` is empty (hint about where to drop config). */
|
|
1870
1884
|
emptyState: ReactNode;
|
|
1871
1885
|
/**
|
|
1872
1886
|
* Optional content rendered ABOVE the list (or the empty state). Used to
|
|
@@ -1893,21 +1907,18 @@ interface TurnDetailsModalActions {
|
|
|
1893
1907
|
/** Edit the text content of this turn. */
|
|
1894
1908
|
onEdit: (turnId: string, newText: string) => void;
|
|
1895
1909
|
}
|
|
1896
|
-
declare function TurnDetailsModal({
|
|
1897
|
-
turn
|
|
1898
|
-
|
|
1899
|
-
|
|
1900
|
-
|
|
1901
|
-
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
|
|
1905
|
-
turn: SessionTurn; /** Tool-result turns owned by tool calls in `turn`. */
|
|
1906
|
-
toolResultTurns?: SessionTurn[]; /** Active conversation-search query used to highlight preview matches. */
|
|
1907
|
-
searchQuery?: string; /** 1-based position of this turn in the session, for the header. */
|
|
1908
|
-
index: number; /** Total turn count, for the `n / N` header. */
|
|
1910
|
+
declare function TurnDetailsModal({ turn, toolResultTurns, searchQuery, index, total, actions, keybindings }: {
|
|
1911
|
+
turn: SessionTurn;
|
|
1912
|
+
/** Tool-result turns owned by tool calls in `turn`. */
|
|
1913
|
+
toolResultTurns?: SessionTurn[];
|
|
1914
|
+
/** Active conversation-search query used to highlight preview matches. */
|
|
1915
|
+
searchQuery?: string;
|
|
1916
|
+
/** 1-based position of this turn in the session, for the header. */
|
|
1917
|
+
index: number;
|
|
1918
|
+
/** Total turn count, for the `n / N` header. */
|
|
1909
1919
|
total: number;
|
|
1910
|
-
actions: TurnDetailsModalActions;
|
|
1920
|
+
actions: TurnDetailsModalActions;
|
|
1921
|
+
/** Effective keybindings — the modal-internal letter actions resolve through this. */
|
|
1911
1922
|
keybindings: KeyBindings;
|
|
1912
1923
|
}): import("react").ReactNode;
|
|
1913
1924
|
//#endregion
|
|
@@ -1938,6 +1949,12 @@ interface RunTuiOptions extends Partial<ChatOptions> {
|
|
|
1938
1949
|
* while disabled disk extensions are never imported at all.
|
|
1939
1950
|
*/
|
|
1940
1951
|
extensions?: readonly ExtensionDefinition[];
|
|
1952
|
+
/**
|
|
1953
|
+
* Run every session on this remote zidane-server instead of a local host
|
|
1954
|
+
* (`zidane --host <wss-url> --token <t>`): the whole window, multi-process
|
|
1955
|
+
* semantics. Ignored under `ZIDANE_NO_REMOTE=1` (see `./host-target`).
|
|
1956
|
+
*/
|
|
1957
|
+
remoteHost?: RemoteHost;
|
|
1941
1958
|
}
|
|
1942
1959
|
/**
|
|
1943
1960
|
* Boot a full chat TUI with sensible defaults. **Does not return** under
|