@yeshwanthyk/coding-agent 0.3.0 → 0.3.2
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/README.md +8 -6
- package/dist/adapters/acp/index.d.ts +10 -0
- package/dist/adapters/acp/index.d.ts.map +1 -0
- package/dist/adapters/acp/index.js +250 -0
- package/dist/adapters/acp/index.js.map +1 -0
- package/dist/adapters/acp/protocol.d.ts +171 -0
- package/dist/adapters/acp/protocol.d.ts.map +1 -0
- package/dist/adapters/acp/protocol.js +25 -0
- package/dist/adapters/acp/protocol.js.map +1 -0
- package/dist/adapters/acp/session.d.ts +33 -0
- package/dist/adapters/acp/session.d.ts.map +1 -0
- package/dist/adapters/acp/session.js +216 -0
- package/dist/adapters/acp/session.js.map +1 -0
- package/dist/adapters/acp/updates.d.ts +17 -0
- package/dist/adapters/acp/updates.d.ts.map +1 -0
- package/dist/adapters/acp/updates.js +62 -0
- package/dist/adapters/acp/updates.js.map +1 -0
- package/dist/adapters/cli/headless.d.ts +7 -0
- package/dist/adapters/cli/headless.d.ts.map +1 -0
- package/dist/adapters/cli/headless.js +93 -0
- package/dist/adapters/cli/headless.js.map +1 -0
- package/dist/adapters/cli/validate.d.ts +3 -0
- package/dist/adapters/cli/validate.d.ts.map +1 -0
- package/dist/adapters/cli/validate.js +40 -0
- package/dist/adapters/cli/validate.js.map +1 -0
- package/dist/adapters/tui/app.d.ts +8 -0
- package/dist/adapters/tui/app.d.ts.map +1 -0
- package/dist/adapters/tui/app.jsx +25 -0
- package/dist/adapters/tui/app.jsx.map +1 -0
- package/dist/agent-events.d.ts +63 -0
- package/dist/agent-events.d.ts.map +1 -0
- package/dist/agent-events.js +510 -0
- package/dist/agent-events.js.map +1 -0
- package/dist/args.d.ts +18 -0
- package/dist/args.d.ts.map +1 -0
- package/dist/args.js +87 -0
- package/dist/args.js.map +1 -0
- package/dist/autocomplete-commands.d.ts +26 -0
- package/dist/autocomplete-commands.d.ts.map +1 -0
- package/dist/autocomplete-commands.js +82 -0
- package/dist/autocomplete-commands.js.map +1 -0
- package/dist/commands.d.ts +10 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +17 -0
- package/dist/commands.js.map +1 -0
- package/dist/compact-handler.d.ts +42 -0
- package/dist/compact-handler.d.ts.map +1 -0
- package/dist/compact-handler.js +211 -0
- package/dist/compact-handler.js.map +1 -0
- package/dist/components/Footer.d.ts +9 -0
- package/dist/components/Footer.d.ts.map +1 -0
- package/dist/components/Footer.jsx +36 -0
- package/dist/components/Footer.jsx.map +1 -0
- package/dist/components/Header.d.ts +23 -0
- package/dist/components/Header.d.ts.map +1 -0
- package/dist/components/Header.jsx +174 -0
- package/dist/components/Header.jsx.map +1 -0
- package/dist/components/MessageList.d.ts +19 -0
- package/dist/components/MessageList.d.ts.map +1 -0
- package/dist/components/MessageList.jsx +237 -0
- package/dist/components/MessageList.jsx.map +1 -0
- package/dist/config.d.ts +2 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -0
- package/dist/domain/commands/builtin/clear.d.ts +3 -0
- package/dist/domain/commands/builtin/clear.d.ts.map +1 -0
- package/dist/domain/commands/builtin/clear.js +13 -0
- package/dist/domain/commands/builtin/clear.js.map +1 -0
- package/dist/domain/commands/builtin/compact.d.ts +3 -0
- package/dist/domain/commands/builtin/compact.d.ts.map +1 -0
- package/dist/domain/commands/builtin/compact.js +84 -0
- package/dist/domain/commands/builtin/compact.js.map +1 -0
- package/dist/domain/commands/builtin/conceal.d.ts +3 -0
- package/dist/domain/commands/builtin/conceal.d.ts.map +1 -0
- package/dist/domain/commands/builtin/conceal.js +8 -0
- package/dist/domain/commands/builtin/conceal.js.map +1 -0
- package/dist/domain/commands/builtin/diffwrap.d.ts +3 -0
- package/dist/domain/commands/builtin/diffwrap.d.ts.map +1 -0
- package/dist/domain/commands/builtin/diffwrap.js +8 -0
- package/dist/domain/commands/builtin/diffwrap.js.map +1 -0
- package/dist/domain/commands/builtin/editor.d.ts +3 -0
- package/dist/domain/commands/builtin/editor.d.ts.map +1 -0
- package/dist/domain/commands/builtin/editor.js +22 -0
- package/dist/domain/commands/builtin/editor.js.map +1 -0
- package/dist/domain/commands/builtin/exit.d.ts +3 -0
- package/dist/domain/commands/builtin/exit.d.ts.map +1 -0
- package/dist/domain/commands/builtin/exit.js +14 -0
- package/dist/domain/commands/builtin/exit.js.map +1 -0
- package/dist/domain/commands/builtin/followup.d.ts +3 -0
- package/dist/domain/commands/builtin/followup.d.ts.map +1 -0
- package/dist/domain/commands/builtin/followup.js +20 -0
- package/dist/domain/commands/builtin/followup.js.map +1 -0
- package/dist/domain/commands/builtin/index.d.ts +2 -0
- package/dist/domain/commands/builtin/index.d.ts.map +1 -0
- package/dist/domain/commands/builtin/index.js +29 -0
- package/dist/domain/commands/builtin/index.js.map +1 -0
- package/dist/domain/commands/builtin/login.d.ts +3 -0
- package/dist/domain/commands/builtin/login.d.ts.map +1 -0
- package/dist/domain/commands/builtin/login.js +92 -0
- package/dist/domain/commands/builtin/login.js.map +1 -0
- package/dist/domain/commands/builtin/model.d.ts +3 -0
- package/dist/domain/commands/builtin/model.d.ts.map +1 -0
- package/dist/domain/commands/builtin/model.js +53 -0
- package/dist/domain/commands/builtin/model.js.map +1 -0
- package/dist/domain/commands/builtin/status.d.ts +3 -0
- package/dist/domain/commands/builtin/status.d.ts.map +1 -0
- package/dist/domain/commands/builtin/status.js +30 -0
- package/dist/domain/commands/builtin/status.js.map +1 -0
- package/dist/domain/commands/builtin/steer.d.ts +3 -0
- package/dist/domain/commands/builtin/steer.d.ts.map +1 -0
- package/dist/domain/commands/builtin/steer.js +20 -0
- package/dist/domain/commands/builtin/steer.js.map +1 -0
- package/dist/domain/commands/builtin/theme.d.ts +3 -0
- package/dist/domain/commands/builtin/theme.d.ts.map +1 -0
- package/dist/domain/commands/builtin/theme.js +19 -0
- package/dist/domain/commands/builtin/theme.js.map +1 -0
- package/dist/domain/commands/builtin/thinking.d.ts +3 -0
- package/dist/domain/commands/builtin/thinking.d.ts.map +1 -0
- package/dist/domain/commands/builtin/thinking.js +16 -0
- package/dist/domain/commands/builtin/thinking.js.map +1 -0
- package/dist/domain/commands/helpers.d.ts +7 -0
- package/dist/domain/commands/helpers.d.ts.map +1 -0
- package/dist/domain/commands/helpers.js +34 -0
- package/dist/domain/commands/helpers.js.map +1 -0
- package/dist/domain/commands/registry.d.ts +10 -0
- package/dist/domain/commands/registry.d.ts.map +1 -0
- package/dist/domain/commands/registry.js +36 -0
- package/dist/domain/commands/registry.js.map +1 -0
- package/dist/domain/commands/types.d.ts +62 -0
- package/dist/domain/commands/types.d.ts.map +1 -0
- package/dist/domain/commands/types.js +2 -0
- package/dist/domain/commands/types.js.map +1 -0
- package/dist/domain/messaging/content.d.ts +37 -0
- package/dist/domain/messaging/content.d.ts.map +1 -0
- package/dist/domain/messaging/content.js +103 -0
- package/dist/domain/messaging/content.js.map +1 -0
- package/dist/editor.d.ts +26 -0
- package/dist/editor.d.ts.map +1 -0
- package/dist/editor.js +81 -0
- package/dist/editor.js.map +1 -0
- package/dist/extensibility/schema.d.ts +2 -0
- package/dist/extensibility/schema.d.ts.map +1 -0
- package/{src/extensibility/schema.ts → dist/extensibility/schema.js} +2 -1
- package/dist/extensibility/schema.js.map +1 -0
- package/dist/extensibility/validation.d.ts +2 -0
- package/dist/extensibility/validation.d.ts.map +1 -0
- package/{src/extensibility/validation.ts → dist/extensibility/validation.js} +2 -1
- package/dist/extensibility/validation.js.map +1 -0
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +2 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/useAgentEvents.d.ts +8 -0
- package/dist/hooks/useAgentEvents.d.ts.map +1 -0
- package/dist/hooks/useAgentEvents.js +22 -0
- package/dist/hooks/useAgentEvents.js.map +1 -0
- package/dist/hooks/useEditorBridge.d.ts +20 -0
- package/dist/hooks/useEditorBridge.d.ts.map +1 -0
- package/dist/hooks/useEditorBridge.js +80 -0
- package/dist/hooks/useEditorBridge.js.map +1 -0
- package/dist/hooks/useGitStatus.d.ts +2 -0
- package/dist/hooks/useGitStatus.d.ts.map +1 -0
- package/dist/hooks/useGitStatus.js +26 -0
- package/dist/hooks/useGitStatus.js.map +1 -0
- package/dist/hooks/usePromptQueue.d.ts +2 -0
- package/dist/hooks/usePromptQueue.d.ts.map +1 -0
- package/dist/hooks/usePromptQueue.js +2 -0
- package/dist/hooks/usePromptQueue.js.map +1 -0
- package/dist/hooks/useSessionController.d.ts +2 -0
- package/dist/hooks/useSessionController.d.ts.map +1 -0
- package/dist/hooks/useSessionController.js +2 -0
- package/dist/hooks/useSessionController.js.map +1 -0
- package/dist/hooks/useSpinner.d.ts +4 -0
- package/dist/hooks/useSpinner.d.ts.map +1 -0
- package/dist/hooks/useSpinner.js +25 -0
- package/dist/hooks/useSpinner.js.map +1 -0
- package/dist/hooks/useToastManager.d.ts +6 -0
- package/dist/hooks/useToastManager.d.ts.map +1 -0
- package/dist/hooks/useToastManager.js +22 -0
- package/dist/hooks/useToastManager.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +156 -0
- package/dist/index.js.map +1 -0
- package/dist/keyboard-handler.d.ts +30 -0
- package/dist/keyboard-handler.d.ts.map +1 -0
- package/dist/keyboard-handler.js +96 -0
- package/dist/keyboard-handler.js.map +1 -0
- package/dist/profiler.d.ts +2 -0
- package/dist/profiler.d.ts.map +1 -0
- package/dist/profiler.js +41 -0
- package/dist/profiler.js.map +1 -0
- package/dist/runtime/context.d.ts +8 -0
- package/dist/runtime/context.d.ts.map +1 -0
- package/dist/runtime/context.jsx +11 -0
- package/dist/runtime/context.jsx.map +1 -0
- package/dist/runtime/factory.d.ts +12 -0
- package/dist/runtime/factory.d.ts.map +1 -0
- package/dist/runtime/factory.js +37 -0
- package/dist/runtime/factory.js.map +1 -0
- package/dist/runtime/git/git-info.d.ts +3 -0
- package/dist/runtime/git/git-info.d.ts.map +1 -0
- package/dist/runtime/git/git-info.js +29 -0
- package/dist/runtime/git/git-info.js.map +1 -0
- package/dist/runtime/session/session-controller.d.ts +48 -0
- package/dist/runtime/session/session-controller.d.ts.map +1 -0
- package/dist/runtime/session/session-controller.js +159 -0
- package/dist/runtime/session/session-controller.js.map +1 -0
- package/dist/session-manager.d.ts +2 -0
- package/dist/session-manager.d.ts.map +1 -0
- package/dist/session-manager.js +2 -0
- package/dist/session-manager.js.map +1 -0
- package/dist/session-picker.d.ts +6 -0
- package/dist/session-picker.d.ts.map +1 -0
- package/dist/session-picker.jsx +96 -0
- package/dist/session-picker.jsx.map +1 -0
- package/dist/shell-runner.d.ts +21 -0
- package/dist/shell-runner.d.ts.map +1 -0
- package/dist/shell-runner.js +106 -0
- package/dist/shell-runner.js.map +1 -0
- package/dist/syntax-highlighting.d.ts +4 -0
- package/dist/syntax-highlighting.d.ts.map +1 -0
- package/dist/syntax-highlighting.js +108 -0
- package/dist/syntax-highlighting.js.map +1 -0
- package/dist/theme-names.d.ts +7 -0
- package/dist/theme-names.d.ts.map +1 -0
- package/dist/theme-names.js +38 -0
- package/dist/theme-names.js.map +1 -0
- package/dist/tool-ui-contracts.d.ts +30 -0
- package/dist/tool-ui-contracts.d.ts.map +1 -0
- package/dist/tool-ui-contracts.js +53 -0
- package/dist/tool-ui-contracts.js.map +1 -0
- package/dist/tui-open-rendering.d.ts +37 -0
- package/dist/tui-open-rendering.d.ts.map +1 -0
- package/dist/tui-open-rendering.jsx +462 -0
- package/dist/tui-open-rendering.jsx.map +1 -0
- package/dist/types.d.ts +117 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/dist/ui/app-shell/TuiApp.d.ts +6 -0
- package/dist/ui/app-shell/TuiApp.d.ts.map +1 -0
- package/dist/ui/app-shell/TuiApp.jsx +480 -0
- package/dist/ui/app-shell/TuiApp.jsx.map +1 -0
- package/dist/ui/clipboard/osc52.d.ts +2 -0
- package/dist/ui/clipboard/osc52.d.ts.map +1 -0
- package/dist/ui/clipboard/osc52.js +19 -0
- package/dist/ui/clipboard/osc52.js.map +1 -0
- package/dist/ui/components/modals/ConfirmModal.d.ts +8 -0
- package/dist/ui/components/modals/ConfirmModal.d.ts.map +1 -0
- package/dist/ui/components/modals/ConfirmModal.jsx +39 -0
- package/dist/ui/components/modals/ConfirmModal.jsx.map +1 -0
- package/dist/ui/components/modals/EditorModal.d.ts +8 -0
- package/dist/ui/components/modals/EditorModal.d.ts.map +1 -0
- package/dist/ui/components/modals/EditorModal.jsx +23 -0
- package/dist/ui/components/modals/EditorModal.jsx.map +1 -0
- package/dist/ui/components/modals/InputModal.d.ts +8 -0
- package/dist/ui/components/modals/InputModal.d.ts.map +1 -0
- package/dist/ui/components/modals/InputModal.jsx +15 -0
- package/dist/ui/components/modals/InputModal.jsx.map +1 -0
- package/dist/ui/components/modals/ModalContainer.d.ts +8 -0
- package/dist/ui/components/modals/ModalContainer.d.ts.map +1 -0
- package/dist/ui/components/modals/ModalContainer.jsx +34 -0
- package/dist/ui/components/modals/ModalContainer.jsx.map +1 -0
- package/dist/ui/components/modals/SelectModal.d.ts +8 -0
- package/dist/ui/components/modals/SelectModal.d.ts.map +1 -0
- package/dist/ui/components/modals/SelectModal.jsx +32 -0
- package/dist/ui/components/modals/SelectModal.jsx.map +1 -0
- package/{src/ui/components/modals/index.ts → dist/ui/components/modals/index.d.ts} +5 -4
- package/dist/ui/components/modals/index.d.ts.map +1 -0
- package/dist/ui/components/modals/index.js +5 -0
- package/dist/ui/components/modals/index.js.map +1 -0
- package/dist/ui/features/composer/Composer.d.ts +16 -0
- package/dist/ui/features/composer/Composer.d.ts.map +1 -0
- package/dist/ui/features/composer/Composer.jsx +39 -0
- package/dist/ui/features/composer/Composer.jsx.map +1 -0
- package/dist/ui/features/composer/SlashCommandHandler.d.ts +14 -0
- package/dist/ui/features/composer/SlashCommandHandler.d.ts.map +1 -0
- package/dist/ui/features/composer/SlashCommandHandler.js +43 -0
- package/dist/ui/features/composer/SlashCommandHandler.js.map +1 -0
- package/dist/ui/features/composer/keyboard.d.ts +3 -0
- package/dist/ui/features/composer/keyboard.d.ts.map +1 -0
- package/dist/ui/features/composer/keyboard.js +3 -0
- package/dist/ui/features/composer/keyboard.js.map +1 -0
- package/dist/ui/features/main-view/MainView.d.ts +52 -0
- package/dist/ui/features/main-view/MainView.d.ts.map +1 -0
- package/dist/ui/features/main-view/MainView.jsx +269 -0
- package/dist/ui/features/main-view/MainView.jsx.map +1 -0
- package/dist/ui/features/message-pane/MessagePane.d.ts +15 -0
- package/dist/ui/features/message-pane/MessagePane.d.ts.map +1 -0
- package/dist/ui/features/message-pane/MessagePane.jsx +7 -0
- package/dist/ui/features/message-pane/MessagePane.jsx.map +1 -0
- package/dist/ui/hooks/useModals.d.ts +35 -0
- package/dist/ui/hooks/useModals.d.ts.map +1 -0
- package/dist/ui/hooks/useModals.js +36 -0
- package/dist/ui/hooks/useModals.js.map +1 -0
- package/dist/ui/state/app-store.d.ts +42 -0
- package/dist/ui/state/app-store.d.ts.map +1 -0
- package/dist/ui/state/app-store.js +28 -0
- package/dist/ui/state/app-store.js.map +1 -0
- package/dist/utils.d.ts +3 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +3 -0
- package/dist/utils.js.map +1 -0
- package/package.json +19 -6
- package/src/adapters/acp/index.ts +0 -305
- package/src/adapters/acp/protocol.ts +0 -191
- package/src/adapters/acp/session.ts +0 -289
- package/src/adapters/acp/updates.ts +0 -96
- package/src/adapters/cli/headless.ts +0 -112
- package/src/adapters/cli/validate.ts +0 -50
- package/src/adapters/tui/app.tsx +0 -39
- package/src/agent-events.ts +0 -671
- package/src/args.ts +0 -102
- package/src/autocomplete-commands.ts +0 -102
- package/src/commands.ts +0 -23
- package/src/compact-handler.ts +0 -272
- package/src/components/Footer.tsx +0 -49
- package/src/components/Header.tsx +0 -218
- package/src/components/MessageList.tsx +0 -380
- package/src/config.ts +0 -1
- package/src/domain/commands/builtin/clear.ts +0 -14
- package/src/domain/commands/builtin/compact.ts +0 -96
- package/src/domain/commands/builtin/conceal.ts +0 -9
- package/src/domain/commands/builtin/diffwrap.ts +0 -9
- package/src/domain/commands/builtin/editor.ts +0 -24
- package/src/domain/commands/builtin/exit.ts +0 -14
- package/src/domain/commands/builtin/followup.ts +0 -24
- package/src/domain/commands/builtin/index.ts +0 -29
- package/src/domain/commands/builtin/login.ts +0 -118
- package/src/domain/commands/builtin/model.ts +0 -66
- package/src/domain/commands/builtin/status.ts +0 -32
- package/src/domain/commands/builtin/steer.ts +0 -24
- package/src/domain/commands/builtin/theme.ts +0 -23
- package/src/domain/commands/builtin/thinking.ts +0 -16
- package/src/domain/commands/helpers.ts +0 -41
- package/src/domain/commands/registry.ts +0 -42
- package/src/domain/commands/types.ts +0 -69
- package/src/domain/messaging/content.ts +0 -117
- package/src/editor.ts +0 -103
- package/src/hooks/index.ts +0 -1
- package/src/hooks/useAgentEvents.ts +0 -28
- package/src/hooks/useEditorBridge.ts +0 -101
- package/src/hooks/useGitStatus.ts +0 -28
- package/src/hooks/usePromptQueue.ts +0 -7
- package/src/hooks/useSessionController.ts +0 -5
- package/src/hooks/useSpinner.ts +0 -28
- package/src/hooks/useToastManager.ts +0 -26
- package/src/index.ts +0 -188
- package/src/keyboard-handler.ts +0 -134
- package/src/profiler.ts +0 -40
- package/src/runtime/context.tsx +0 -16
- package/src/runtime/factory.ts +0 -63
- package/src/runtime/git/git-info.ts +0 -25
- package/src/runtime/session/session-controller.ts +0 -208
- package/src/session-manager.ts +0 -1
- package/src/session-picker.tsx +0 -134
- package/src/shell-runner.ts +0 -134
- package/src/syntax-highlighting.ts +0 -114
- package/src/theme-names.ts +0 -37
- package/src/tool-ui-contracts.ts +0 -77
- package/src/tui-open-rendering.tsx +0 -565
- package/src/types.ts +0 -89
- package/src/ui/app-shell/TuiApp.tsx +0 -586
- package/src/ui/clipboard/osc52.ts +0 -18
- package/src/ui/components/modals/ConfirmModal.tsx +0 -52
- package/src/ui/components/modals/EditorModal.tsx +0 -39
- package/src/ui/components/modals/InputModal.tsx +0 -30
- package/src/ui/components/modals/ModalContainer.tsx +0 -67
- package/src/ui/components/modals/SelectModal.tsx +0 -48
- package/src/ui/features/composer/Composer.tsx +0 -73
- package/src/ui/features/composer/SlashCommandHandler.ts +0 -58
- package/src/ui/features/composer/keyboard.ts +0 -3
- package/src/ui/features/main-view/MainView.tsx +0 -367
- package/src/ui/features/message-pane/MessagePane.tsx +0 -34
- package/src/ui/hooks/useModals.ts +0 -74
- package/src/ui/state/app-store.ts +0 -67
- package/src/utils.ts +0 -14
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSessionController.js","sourceRoot":"","sources":["../../src/hooks/useSessionController.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,uBAAuB,GAGvB,MAAM,wCAAwC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSpinner.d.ts","sourceRoot":"","sources":["../../src/hooks/useSpinner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyC,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAA;AAC/E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,wBAAgB,UAAU,CAAC,aAAa,EAAE,QAAQ,CAAC,aAAa,CAAC,GAAG,MAAM,MAAM,CAwB/E"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { createSignal, createEffect, onCleanup } from "solid-js";
|
|
2
|
+
export function useSpinner(activityState) {
|
|
3
|
+
const [spinnerFrame, setSpinnerFrame] = createSignal(0);
|
|
4
|
+
let spinnerInterval = null;
|
|
5
|
+
createEffect(() => {
|
|
6
|
+
if (activityState() !== "idle") {
|
|
7
|
+
if (!spinnerInterval) {
|
|
8
|
+
spinnerInterval = setInterval(() => setSpinnerFrame((frame) => (frame + 1) % 8), 200);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
else if (spinnerInterval) {
|
|
12
|
+
clearInterval(spinnerInterval);
|
|
13
|
+
spinnerInterval = null;
|
|
14
|
+
setSpinnerFrame(0);
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
onCleanup(() => {
|
|
18
|
+
if (spinnerInterval) {
|
|
19
|
+
clearInterval(spinnerInterval);
|
|
20
|
+
spinnerInterval = null;
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
return spinnerFrame;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=useSpinner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSpinner.js","sourceRoot":"","sources":["../../src/hooks/useSpinner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAiB,MAAM,UAAU,CAAA;AAG/E,MAAM,UAAU,UAAU,CAAC,aAAsC;IAChE,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;IACvD,IAAI,eAAe,GAA0C,IAAI,CAAA;IAEjE,YAAY,CAAC,GAAG,EAAE;QACjB,IAAI,aAAa,EAAE,KAAK,MAAM,EAAE,CAAC;YAChC,IAAI,CAAC,eAAe,EAAE,CAAC;gBACtB,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;YACtF,CAAC;QACF,CAAC;aAAM,IAAI,eAAe,EAAE,CAAC;YAC5B,aAAa,CAAC,eAAe,CAAC,CAAA;YAC9B,eAAe,GAAG,IAAI,CAAA;YACtB,eAAe,CAAC,CAAC,CAAC,CAAA;QACnB,CAAC;IACF,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,eAAe,EAAE,CAAC;YACrB,aAAa,CAAC,eAAe,CAAC,CAAA;YAC9B,eAAe,GAAG,IAAI,CAAA;QACvB,CAAC;IACF,CAAC,CAAC,CAAA;IAEF,OAAO,YAAY,CAAA;AACpB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ToastItem } from "@yeshwanthyk/open-tui";
|
|
2
|
+
export declare function useToastManager(limit?: number): {
|
|
3
|
+
toasts: import("solid-js").Accessor<ToastItem[]>;
|
|
4
|
+
pushToast: (toast: Omit<ToastItem, "id">, ttlMs?: number) => void;
|
|
5
|
+
};
|
|
6
|
+
//# sourceMappingURL=useToastManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useToastManager.d.ts","sourceRoot":"","sources":["../../src/hooks/useToastManager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAEtD,wBAAgB,eAAe,CAAC,KAAK,SAAI;;uBAWd,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;EAW/C"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { createSignal, onCleanup } from "solid-js";
|
|
2
|
+
export function useToastManager(limit = 3) {
|
|
3
|
+
const [toasts, setToasts] = createSignal([]);
|
|
4
|
+
const timeouts = new Set();
|
|
5
|
+
onCleanup(() => {
|
|
6
|
+
for (const timeout of timeouts) {
|
|
7
|
+
clearTimeout(timeout);
|
|
8
|
+
}
|
|
9
|
+
timeouts.clear();
|
|
10
|
+
});
|
|
11
|
+
const pushToast = (toast, ttlMs = 2000) => {
|
|
12
|
+
const id = crypto.randomUUID();
|
|
13
|
+
setToasts((prev) => [{ id, ...toast }, ...prev].slice(0, limit));
|
|
14
|
+
const timeout = setTimeout(() => {
|
|
15
|
+
timeouts.delete(timeout);
|
|
16
|
+
setToasts((prev) => prev.filter((t) => t.id !== id));
|
|
17
|
+
}, ttlMs);
|
|
18
|
+
timeouts.add(timeout);
|
|
19
|
+
};
|
|
20
|
+
return { toasts, pushToast };
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=useToastManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useToastManager.js","sourceRoot":"","sources":["../../src/hooks/useToastManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAGlD,MAAM,UAAU,eAAe,CAAC,KAAK,GAAG,CAAC;IACxC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,YAAY,CAAc,EAAE,CAAC,CAAA;IACzD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAiC,CAAA;IAEzD,SAAS,CAAC,GAAG,EAAE;QACd,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAChC,YAAY,CAAC,OAAO,CAAC,CAAA;QACtB,CAAC;QACD,QAAQ,CAAC,KAAK,EAAE,CAAA;IACjB,CAAC,CAAC,CAAA;IAEF,MAAM,SAAS,GAAG,CAAC,KAA4B,EAAE,KAAK,GAAG,IAAI,EAAE,EAAE;QAChE,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAA;QAC9B,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;QAChE,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC/B,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;YACxB,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;QACrD,CAAC,EAAE,KAAK,CAAC,CAAA;QACT,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACtB,CAAC,CAAA;IAED,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;AAC7B,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
import pkg from '../package.json';
|
|
3
|
+
import { existsSync } from 'node:fs';
|
|
4
|
+
import { createRequire } from 'node:module';
|
|
5
|
+
import { dirname, join } from 'node:path';
|
|
6
|
+
import { fileURLToPath } from 'node:url';
|
|
7
|
+
import { parseArgs } from './args.js';
|
|
8
|
+
import { runHeadless } from './adapters/cli/headless.js';
|
|
9
|
+
import { runValidate } from './adapters/cli/validate.js';
|
|
10
|
+
import { runAcp } from './adapters/acp/index.js';
|
|
11
|
+
const ensureTreeSitterWorkerPath = () => {
|
|
12
|
+
if (process.env.OTUI_TREE_SITTER_WORKER_PATH ||
|
|
13
|
+
typeof OTUI_TREE_SITTER_WORKER_PATH !== 'undefined') {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
const candidates = [];
|
|
17
|
+
const execDir = dirname(process.execPath);
|
|
18
|
+
candidates.push(join(execDir, 'parser.worker.js'));
|
|
19
|
+
try {
|
|
20
|
+
const moduleDir = dirname(fileURLToPath(import.meta.url));
|
|
21
|
+
candidates.push(join(moduleDir, 'parser.worker.js'));
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// Ignore non-file URLs (e.g. bundled snapshot)
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
const require = createRequire(import.meta.url);
|
|
28
|
+
// Use dynamic string to prevent static analysis by bundler
|
|
29
|
+
const modulePath = ['@opentui', 'core', 'parser.worker.js'].join('/');
|
|
30
|
+
candidates.push(require.resolve(modulePath));
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
// Ignore missing module resolution in minimal installs
|
|
34
|
+
}
|
|
35
|
+
for (const candidate of candidates) {
|
|
36
|
+
if (candidate && existsSync(candidate)) {
|
|
37
|
+
process.env.OTUI_TREE_SITTER_WORKER_PATH = candidate;
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
ensureTreeSitterWorkerPath();
|
|
43
|
+
// Dynamic import for TUI (requires solid plugin for TSX)
|
|
44
|
+
const runTui = async (args) => {
|
|
45
|
+
const solidPlugin = (await import("@opentui/solid/bun-plugin")).default;
|
|
46
|
+
Bun.plugin(solidPlugin);
|
|
47
|
+
// Initialize tree-sitter parsers for code syntax highlighting
|
|
48
|
+
const { addDefaultParsers } = await import("@opentui/core");
|
|
49
|
+
const { parsersConfig } = await import("@yeshwanthyk/open-tui");
|
|
50
|
+
addDefaultParsers(parsersConfig.parsers);
|
|
51
|
+
const { runTuiOpen } = await import('./adapters/tui/app.js');
|
|
52
|
+
return runTuiOpen(args);
|
|
53
|
+
};
|
|
54
|
+
const printHelp = () => {
|
|
55
|
+
process.stdout.write([
|
|
56
|
+
'Usage:',
|
|
57
|
+
' marvin [options] [prompt...]',
|
|
58
|
+
' marvin validate [options]',
|
|
59
|
+
'',
|
|
60
|
+
'Options:',
|
|
61
|
+
' --provider <name> Provider (e.g. openai, anthropic, codex)',
|
|
62
|
+
' --model <id> Model id or comma-separated list (Ctrl+P to cycle)',
|
|
63
|
+
' --thinking <level> off|minimal|low|medium|high|xhigh',
|
|
64
|
+
' --config-dir <dir> Config directory (default: ~/.config/marvin)',
|
|
65
|
+
' --config <path> Config file path (default: <config-dir>/config.json)',
|
|
66
|
+
' -c, --continue Resume most recent session for current directory',
|
|
67
|
+
' -r, --resume Pick from recent sessions to resume',
|
|
68
|
+
' --headless Run without TUI; reads prompt from args or stdin',
|
|
69
|
+
' --acp Run as ACP server for Zed integration',
|
|
70
|
+
' -h, --help Show help',
|
|
71
|
+
' -v, --version Print version',
|
|
72
|
+
'',
|
|
73
|
+
'Keybinds:',
|
|
74
|
+
' Ctrl+P Cycle through --models list',
|
|
75
|
+
' Shift+Tab Cycle thinking level',
|
|
76
|
+
' Ctrl+C Clear input / double to exit',
|
|
77
|
+
' Esc Abort current request',
|
|
78
|
+
'',
|
|
79
|
+
'Custom Commands:',
|
|
80
|
+
' Place .md files in ~/.config/marvin/commands/',
|
|
81
|
+
' Use /<name> [args] to expand the template.',
|
|
82
|
+
' $ARGUMENTS in the template is replaced with args.',
|
|
83
|
+
'',
|
|
84
|
+
'Lifecycle Hooks:',
|
|
85
|
+
' Place .ts files in ~/.config/marvin/hooks/',
|
|
86
|
+
' Export default function(marvin) { marvin.on(event, handler) }',
|
|
87
|
+
' Events: app.start, session.start/resume/clear, agent.start/end,',
|
|
88
|
+
' turn.start/end, tool.execute.before/after',
|
|
89
|
+
' Use marvin.send(text) to inject messages into conversation',
|
|
90
|
+
'',
|
|
91
|
+
'Custom Tools:',
|
|
92
|
+
' Place .ts files in ~/.config/marvin/tools/',
|
|
93
|
+
' Export default function(api) returning AgentTool or AgentTool[]',
|
|
94
|
+
' api.cwd: current working directory',
|
|
95
|
+
' api.exec(cmd, args, opts): run commands',
|
|
96
|
+
'',
|
|
97
|
+
'Validation:',
|
|
98
|
+
' Run "marvin validate --config-dir <dir>" to check custom hooks/tools/commands',
|
|
99
|
+
'',
|
|
100
|
+
'Environment:',
|
|
101
|
+
' OPENAI_API_KEY / ANTHROPIC_API_KEY / GEMINI_API_KEY / ...',
|
|
102
|
+
'',
|
|
103
|
+
].join('\n'));
|
|
104
|
+
};
|
|
105
|
+
const main = async () => {
|
|
106
|
+
const argv = process.argv.slice(2);
|
|
107
|
+
const args = parseArgs(argv);
|
|
108
|
+
if (args.version) {
|
|
109
|
+
process.stdout.write(`${pkg.name} ${pkg.version}\n`);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
if (args.help) {
|
|
113
|
+
printHelp();
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
if (args.command === 'validate') {
|
|
117
|
+
await runValidate({
|
|
118
|
+
configDir: args.configDir,
|
|
119
|
+
configPath: args.configPath,
|
|
120
|
+
provider: args.provider,
|
|
121
|
+
model: args.model,
|
|
122
|
+
thinking: args.thinking,
|
|
123
|
+
});
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
if (args.acp) {
|
|
127
|
+
await runAcp({
|
|
128
|
+
configDir: args.configDir,
|
|
129
|
+
configPath: args.configPath,
|
|
130
|
+
model: args.model,
|
|
131
|
+
});
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
if (args.headless) {
|
|
135
|
+
await runHeadless({
|
|
136
|
+
prompt: args.prompt,
|
|
137
|
+
configDir: args.configDir,
|
|
138
|
+
configPath: args.configPath,
|
|
139
|
+
provider: args.provider,
|
|
140
|
+
model: args.model,
|
|
141
|
+
thinking: args.thinking,
|
|
142
|
+
});
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
await runTui({
|
|
146
|
+
configDir: args.configDir,
|
|
147
|
+
configPath: args.configPath,
|
|
148
|
+
provider: args.provider,
|
|
149
|
+
model: args.model,
|
|
150
|
+
thinking: args.thinking,
|
|
151
|
+
continueSession: args.continue,
|
|
152
|
+
resumeSession: args.resume,
|
|
153
|
+
});
|
|
154
|
+
};
|
|
155
|
+
await main();
|
|
156
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Keyboard event handling for TUI application
|
|
3
|
+
*/
|
|
4
|
+
import type { KeyEvent } from "@opentui/core";
|
|
5
|
+
export interface KeyboardHandlerConfig {
|
|
6
|
+
showAutocomplete: () => boolean;
|
|
7
|
+
autocompleteItems: () => Array<{
|
|
8
|
+
label: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
}>;
|
|
11
|
+
setAutocompleteIndex: (updater: (i: number) => number) => void;
|
|
12
|
+
setShowAutocomplete: (v: boolean) => void;
|
|
13
|
+
applyAutocomplete: () => boolean;
|
|
14
|
+
isResponding: () => boolean;
|
|
15
|
+
retryStatus: () => string | null;
|
|
16
|
+
onAbort: () => string | null;
|
|
17
|
+
onToggleThinking: () => void;
|
|
18
|
+
onCycleModel: () => void;
|
|
19
|
+
onCycleThinking: () => void;
|
|
20
|
+
toggleLastToolExpanded: () => void;
|
|
21
|
+
copySelectionToClipboard: () => void;
|
|
22
|
+
clearEditor: () => void;
|
|
23
|
+
setEditorText: (text: string) => void;
|
|
24
|
+
lastCtrlC: {
|
|
25
|
+
current: number;
|
|
26
|
+
};
|
|
27
|
+
onExit: () => void;
|
|
28
|
+
}
|
|
29
|
+
export declare function createKeyboardHandler(config: KeyboardHandlerConfig): (e: KeyEvent) => void;
|
|
30
|
+
//# sourceMappingURL=keyboard-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyboard-handler.d.ts","sourceRoot":"","sources":["../src/keyboard-handler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C,MAAM,WAAW,qBAAqB;IAErC,gBAAgB,EAAE,MAAM,OAAO,CAAA;IAC/B,iBAAiB,EAAE,MAAM,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACvE,oBAAoB,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,KAAK,IAAI,CAAA;IAC9D,mBAAmB,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IACzC,iBAAiB,EAAE,MAAM,OAAO,CAAA;IAGhC,YAAY,EAAE,MAAM,OAAO,CAAA;IAC3B,WAAW,EAAE,MAAM,MAAM,GAAG,IAAI,CAAA;IAGhC,OAAO,EAAE,MAAM,MAAM,GAAG,IAAI,CAAA;IAC5B,gBAAgB,EAAE,MAAM,IAAI,CAAA;IAC5B,YAAY,EAAE,MAAM,IAAI,CAAA;IACxB,eAAe,EAAE,MAAM,IAAI,CAAA;IAC3B,sBAAsB,EAAE,MAAM,IAAI,CAAA;IAClC,wBAAwB,EAAE,MAAM,IAAI,CAAA;IAGpC,WAAW,EAAE,MAAM,IAAI,CAAA;IACvB,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAGrC,SAAS,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IAG9B,MAAM,EAAE,MAAM,IAAI,CAAA;CAClB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,qBAAqB,GAAG,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAI,CAgG1F"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Keyboard event handling for TUI application
|
|
3
|
+
*/
|
|
4
|
+
export function createKeyboardHandler(config) {
|
|
5
|
+
return (e) => {
|
|
6
|
+
// Autocomplete navigation
|
|
7
|
+
if (config.showAutocomplete()) {
|
|
8
|
+
const items = config.autocompleteItems();
|
|
9
|
+
if (e.name === "up") {
|
|
10
|
+
config.setAutocompleteIndex((i) => (i > 0 ? i - 1 : items.length - 1));
|
|
11
|
+
e.preventDefault();
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
if (e.name === "down") {
|
|
15
|
+
config.setAutocompleteIndex((i) => (i < items.length - 1 ? i + 1 : 0));
|
|
16
|
+
e.preventDefault();
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
if (e.name === "tab" || e.name === "return") {
|
|
20
|
+
if (config.applyAutocomplete()) {
|
|
21
|
+
e.preventDefault();
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (e.name === "escape") {
|
|
26
|
+
config.setShowAutocomplete(false);
|
|
27
|
+
e.preventDefault();
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// Ctrl+N/Ctrl+P for autocomplete navigation
|
|
32
|
+
if (config.showAutocomplete() && e.ctrl && (e.name === "n" || e.name === "p")) {
|
|
33
|
+
const items = config.autocompleteItems();
|
|
34
|
+
if (e.name === "n") {
|
|
35
|
+
config.setAutocompleteIndex((i) => (i < items.length - 1 ? i + 1 : 0));
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
config.setAutocompleteIndex((i) => (i > 0 ? i - 1 : items.length - 1));
|
|
39
|
+
}
|
|
40
|
+
e.preventDefault();
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
// Ctrl+C - clear or exit
|
|
44
|
+
if (e.ctrl && e.name === "c") {
|
|
45
|
+
const now = Date.now();
|
|
46
|
+
if (now - config.lastCtrlC.current < 750) {
|
|
47
|
+
config.onExit();
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
config.clearEditor();
|
|
51
|
+
}
|
|
52
|
+
config.lastCtrlC.current = now;
|
|
53
|
+
e.preventDefault();
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
// Escape - abort if responding
|
|
57
|
+
if (e.name === "escape" && (config.isResponding() || config.retryStatus())) {
|
|
58
|
+
const restore = config.onAbort();
|
|
59
|
+
if (restore)
|
|
60
|
+
config.setEditorText(restore);
|
|
61
|
+
e.preventDefault();
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
// Ctrl+O - toggle latest tool block
|
|
65
|
+
if (e.ctrl && e.name === "o") {
|
|
66
|
+
config.toggleLastToolExpanded();
|
|
67
|
+
e.preventDefault();
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
// Ctrl+T - toggle thinking visibility
|
|
71
|
+
if (e.ctrl && e.name === "t") {
|
|
72
|
+
config.onToggleThinking();
|
|
73
|
+
e.preventDefault();
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
// Ctrl+P - cycle model
|
|
77
|
+
if (e.ctrl && e.name === "p") {
|
|
78
|
+
config.onCycleModel();
|
|
79
|
+
e.preventDefault();
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
// Ctrl+Y - copy selection to clipboard
|
|
83
|
+
if (e.ctrl && e.name === "y") {
|
|
84
|
+
config.copySelectionToClipboard();
|
|
85
|
+
e.preventDefault();
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
// Shift+Tab - cycle thinking level
|
|
89
|
+
if (e.shift && e.name === "tab") {
|
|
90
|
+
config.onCycleThinking();
|
|
91
|
+
e.preventDefault();
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=keyboard-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyboard-handler.js","sourceRoot":"","sources":["../src/keyboard-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiler.d.ts","sourceRoot":"","sources":["../src/profiler.ts"],"names":[],"mappings":"AA+BA,wBAAgB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAQvD"}
|
package/dist/profiler.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { performance } from "node:perf_hooks";
|
|
2
|
+
const enabled = process.env["MARVIN_TUI_PROFILE"] === "1";
|
|
3
|
+
const reportEveryMs = 2000;
|
|
4
|
+
const stats = new Map();
|
|
5
|
+
let lastReport = performance.now();
|
|
6
|
+
function record(name, ms) {
|
|
7
|
+
if (!enabled)
|
|
8
|
+
return;
|
|
9
|
+
const stat = stats.get(name) ?? { count: 0, totalMs: 0, maxMs: 0 };
|
|
10
|
+
stat.count += 1;
|
|
11
|
+
stat.totalMs += ms;
|
|
12
|
+
if (ms > stat.maxMs)
|
|
13
|
+
stat.maxMs = ms;
|
|
14
|
+
stats.set(name, stat);
|
|
15
|
+
const now = performance.now();
|
|
16
|
+
if (now - lastReport < reportEveryMs)
|
|
17
|
+
return;
|
|
18
|
+
lastReport = now;
|
|
19
|
+
try {
|
|
20
|
+
for (const [key, s] of stats) {
|
|
21
|
+
const avg = s.totalMs / Math.max(1, s.count);
|
|
22
|
+
process.stderr.write(`[perf] ${key} avg=${avg.toFixed(1)}ms max=${s.maxMs.toFixed(1)}ms n=${s.count}\n`);
|
|
23
|
+
s.count = 0;
|
|
24
|
+
s.totalMs = 0;
|
|
25
|
+
s.maxMs = 0;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
catch { }
|
|
29
|
+
}
|
|
30
|
+
export function profile(name, fn) {
|
|
31
|
+
if (!enabled)
|
|
32
|
+
return fn();
|
|
33
|
+
const start = performance.now();
|
|
34
|
+
try {
|
|
35
|
+
return fn();
|
|
36
|
+
}
|
|
37
|
+
finally {
|
|
38
|
+
record(name, performance.now() - start);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=profiler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiler.js","sourceRoot":"","sources":["../src/profiler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAI7C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,KAAK,GAAG,CAAA;AACzD,MAAM,aAAa,GAAG,IAAI,CAAA;AAC1B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAgB,CAAA;AACrC,IAAI,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,CAAA;AAElC,SAAS,MAAM,CAAC,IAAY,EAAE,EAAU;IACvC,IAAI,CAAC,OAAO;QAAE,OAAM;IACpB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;IAClE,IAAI,CAAC,KAAK,IAAI,CAAC,CAAA;IACf,IAAI,CAAC,OAAO,IAAI,EAAE,CAAA;IAClB,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK;QAAE,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;IACpC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAErB,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,CAAA;IAC7B,IAAI,GAAG,GAAG,UAAU,GAAG,aAAa;QAAE,OAAM;IAC5C,UAAU,GAAG,GAAG,CAAA;IAChB,IAAI,CAAC;QACJ,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAA;YAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,IAAI,CAAC,CAAA;YACxG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAA;YACX,CAAC,CAAC,OAAO,GAAG,CAAC,CAAA;YACb,CAAC,CAAC,KAAK,GAAG,CAAC,CAAA;QACZ,CAAC;IACF,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;AACX,CAAC;AAED,MAAM,UAAU,OAAO,CAAI,IAAY,EAAE,EAAW;IACnD,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,EAAE,CAAA;IACzB,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAA;IAC/B,IAAI,CAAC;QACJ,OAAO,EAAE,EAAE,CAAA;IACZ,CAAC;YAAS,CAAC;QACV,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAA;IACxC,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type JSX } from "solid-js";
|
|
2
|
+
import type { RuntimeContext as RuntimeServices } from "./factory.js";
|
|
3
|
+
export declare const RuntimeProvider: (props: {
|
|
4
|
+
runtime: RuntimeServices;
|
|
5
|
+
children: JSX.Element;
|
|
6
|
+
}) => any;
|
|
7
|
+
export declare const useRuntime: () => RuntimeServices;
|
|
8
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/runtime/context.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9D,OAAO,KAAK,EAAE,cAAc,IAAI,eAAe,EAAE,MAAM,cAAc,CAAA;AAIrE,eAAO,MAAM,eAAe,GAAI,OAAO;IAAE,OAAO,EAAE,eAAe,CAAC;IAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAA;CAAE,QAEzF,CAAA;AAED,eAAO,MAAM,UAAU,QAAO,eAM7B,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createContext, useContext } from "solid-js";
|
|
2
|
+
const RuntimeContext = createContext(null);
|
|
3
|
+
export const RuntimeProvider = (props) => (<RuntimeContext.Provider value={props.runtime}>{props.children}</RuntimeContext.Provider>);
|
|
4
|
+
export const useRuntime = () => {
|
|
5
|
+
const ctx = useContext(RuntimeContext);
|
|
6
|
+
if (!ctx) {
|
|
7
|
+
throw new Error("RuntimeContext not found");
|
|
8
|
+
}
|
|
9
|
+
return ctx;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=context.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.jsx","sourceRoot":"","sources":["../../src/runtime/context.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAY,MAAM,UAAU,CAAA;AAG9D,MAAM,cAAc,GAAG,aAAa,CAAyB,IAAI,CAAC,CAAA;AAElE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAA0D,EAAE,EAAE,CAAC,CAC9F,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CACzF,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,GAAoB,EAAE;IAC/C,MAAM,GAAG,GAAG,UAAU,CAAC,cAAc,CAAC,CAAA;IACtC,IAAI,CAAC,GAAG,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;IAC5C,CAAC;IACD,OAAO,GAAG,CAAA;AACX,CAAC,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type AdapterKind, type RuntimeServices } from "@yeshwanthyk/runtime-effect/runtime.js";
|
|
2
|
+
import type { LoadConfigOptions } from "@yeshwanthyk/runtime-effect/config.js";
|
|
3
|
+
export type RuntimeInitArgs = LoadConfigOptions;
|
|
4
|
+
export type RuntimeContext = RuntimeServices & {
|
|
5
|
+
/**
|
|
6
|
+
* Explicitly shuts down the runtime scope, allowing services like the LSP
|
|
7
|
+
* manager to flush state before the process exits.
|
|
8
|
+
*/
|
|
9
|
+
close: () => Promise<void>;
|
|
10
|
+
};
|
|
11
|
+
export declare const createRuntime: (args?: RuntimeInitArgs, adapter?: AdapterKind) => Promise<RuntimeContext>;
|
|
12
|
+
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/runtime/factory.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,WAAW,EAEhB,KAAK,eAAe,EACrB,MAAM,wCAAwC,CAAC;AAChD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAE/E,MAAM,MAAM,eAAe,GAAG,iBAAiB,CAAC;AAEhD,MAAM,MAAM,cAAc,GAAG,eAAe,GAAG;IAC7C;;;OAGG;IACH,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B,CAAC;AAWF,eAAO,MAAM,aAAa,GACxB,OAAM,eAAoB,EAC1B,UAAS,WAAmB,KAC3B,OAAO,CAAC,cAAc,CA8BxB,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Context, Effect, Exit, Layer, Scope } from "effect";
|
|
2
|
+
import { RuntimeLayer, RuntimeServicesTag, } from "@yeshwanthyk/runtime-effect/runtime.js";
|
|
3
|
+
const toLayerOptions = (args, adapter) => ({
|
|
4
|
+
adapter,
|
|
5
|
+
configDir: args?.configDir,
|
|
6
|
+
configPath: args?.configPath,
|
|
7
|
+
provider: args?.provider,
|
|
8
|
+
model: args?.model,
|
|
9
|
+
thinking: args?.thinking,
|
|
10
|
+
});
|
|
11
|
+
export const createRuntime = async (args = {}, adapter = "tui") => {
|
|
12
|
+
const layer = RuntimeLayer(toLayerOptions(args, adapter));
|
|
13
|
+
const setupEffect = Effect.gen(function* () {
|
|
14
|
+
const scope = yield* Scope.make();
|
|
15
|
+
const context = yield* Layer.buildWithScope(layer, scope);
|
|
16
|
+
const services = Context.get(context, RuntimeServicesTag);
|
|
17
|
+
return { services, scope };
|
|
18
|
+
});
|
|
19
|
+
const { services, scope } = await Effect.runPromise(setupEffect);
|
|
20
|
+
let closed = false;
|
|
21
|
+
const close = async () => {
|
|
22
|
+
if (closed)
|
|
23
|
+
return;
|
|
24
|
+
closed = true;
|
|
25
|
+
process.removeListener("exit", exitHandler);
|
|
26
|
+
await Effect.runPromise(Scope.close(scope, Exit.void));
|
|
27
|
+
};
|
|
28
|
+
const exitHandler = () => {
|
|
29
|
+
void close();
|
|
30
|
+
};
|
|
31
|
+
process.once("exit", exitHandler);
|
|
32
|
+
return {
|
|
33
|
+
...services,
|
|
34
|
+
close,
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/runtime/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,EACL,YAAY,EACZ,kBAAkB,GAInB,MAAM,wCAAwC,CAAC;AAahD,MAAM,cAAc,GAAG,CAAC,IAAiC,EAAE,OAAoB,EAAuB,EAAE,CAAC,CAAC;IACxG,OAAO;IACP,SAAS,EAAE,IAAI,EAAE,SAAS;IAC1B,UAAU,EAAE,IAAI,EAAE,UAAU;IAC5B,QAAQ,EAAE,IAAI,EAAE,QAAQ;IACxB,KAAK,EAAE,IAAI,EAAE,KAAK;IAClB,QAAQ,EAAE,IAAI,EAAE,QAAQ;CACzB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAChC,OAAwB,EAAE,EAC1B,UAAuB,KAAK,EACH,EAAE;IAC3B,MAAM,KAAK,GAAG,YAAY,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAA+C,CAAC;IAExG,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACtC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;QAC1D,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAEjE,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,MAAM,KAAK,GAAG,KAAK,IAAI,EAAE;QACvB,IAAI,MAAM;YAAE,OAAO;QACnB,MAAM,GAAG,IAAI,CAAC;QACd,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC5C,MAAM,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,KAAK,KAAK,EAAE,CAAC;IACf,CAAC,CAAC;IAEF,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAElC,OAAO;QACL,GAAG,QAAQ;QACX,KAAK;KACN,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-info.d.ts","sourceRoot":"","sources":["../../../src/runtime/git/git-info.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,eAAe,GAAI,WAAU,MAAsB,KAAG,MAAM,GAAG,IAS3E,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,WAAW,MAAM,KAAG,MAAM,GAAG,IAU7D,CAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "fs";
|
|
2
|
+
import { dirname, join } from "path";
|
|
3
|
+
export const findGitHeadPath = (startDir = process.cwd()) => {
|
|
4
|
+
let dir = startDir;
|
|
5
|
+
while (true) {
|
|
6
|
+
const gitHeadPath = join(dir, ".git", "HEAD");
|
|
7
|
+
if (existsSync(gitHeadPath))
|
|
8
|
+
return gitHeadPath;
|
|
9
|
+
const parent = dirname(dir);
|
|
10
|
+
if (parent === dir)
|
|
11
|
+
return null;
|
|
12
|
+
dir = parent;
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
export const getCurrentBranch = (startDir) => {
|
|
16
|
+
try {
|
|
17
|
+
const gitHeadPath = findGitHeadPath(startDir);
|
|
18
|
+
if (!gitHeadPath)
|
|
19
|
+
return null;
|
|
20
|
+
const content = readFileSync(gitHeadPath, "utf8").trim();
|
|
21
|
+
if (content.startsWith("ref: refs/heads/"))
|
|
22
|
+
return content.slice(16);
|
|
23
|
+
return "detached";
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=git-info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-info.js","sourceRoot":"","sources":["../../../src/runtime/git/git-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAEpC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,WAAmB,OAAO,CAAC,GAAG,EAAE,EAAiB,EAAE;IAClF,IAAI,GAAG,GAAG,QAAQ,CAAA;IAClB,OAAO,IAAI,EAAE,CAAC;QACb,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;QAC7C,IAAI,UAAU,CAAC,WAAW,CAAC;YAAE,OAAO,WAAW,CAAA;QAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;QAC3B,IAAI,MAAM,KAAK,GAAG;YAAE,OAAO,IAAI,CAAA;QAC/B,GAAG,GAAG,MAAM,CAAA;IACb,CAAC;AACF,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAiB,EAAiB,EAAE;IACpE,IAAI,CAAC;QACJ,MAAM,WAAW,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;QAC7C,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAA;QAC7B,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAA;QACxD,IAAI,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC;YAAE,OAAO,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACpE,OAAO,UAAU,CAAA;IAClB,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAA;IACZ,CAAC;AACF,CAAC,CAAA"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { Agent, ThinkingLevel } from "@yeshwanthyk/agent-core";
|
|
2
|
+
import type { Api, Model, KnownProvider } from "@yeshwanthyk/ai";
|
|
3
|
+
import type { HookRunner } from "../../hooks/index.js";
|
|
4
|
+
import type { SessionManager, LoadedSession } from "../../session-manager.js";
|
|
5
|
+
import type { UIMessage } from "../../types.js";
|
|
6
|
+
import type { PromptDeliveryMode, PromptQueue } from "@yeshwanthyk/runtime-effect/session/prompt-queue.js";
|
|
7
|
+
export interface SessionControllerOptions {
|
|
8
|
+
initialProvider: KnownProvider;
|
|
9
|
+
initialModel: Model<Api>;
|
|
10
|
+
initialModelId: string;
|
|
11
|
+
initialThinking: ThinkingLevel;
|
|
12
|
+
agent: Agent;
|
|
13
|
+
sessionManager: SessionManager;
|
|
14
|
+
hookRunner: HookRunner;
|
|
15
|
+
toolByName: Map<string, {
|
|
16
|
+
label: string;
|
|
17
|
+
source: "builtin" | "custom";
|
|
18
|
+
sourcePath?: string;
|
|
19
|
+
renderCall?: any;
|
|
20
|
+
renderResult?: any;
|
|
21
|
+
}>;
|
|
22
|
+
setMessages: (updater: (prev: UIMessage[]) => UIMessage[]) => void;
|
|
23
|
+
setContextTokens: (v: number) => void;
|
|
24
|
+
setDisplayProvider: (provider: KnownProvider) => void;
|
|
25
|
+
setDisplayModelId: (id: string) => void;
|
|
26
|
+
setDisplayThinking: (v: ThinkingLevel) => void;
|
|
27
|
+
setDisplayContextWindow: (v: number) => void;
|
|
28
|
+
shellInjectionPrefix: string;
|
|
29
|
+
promptQueue?: PromptQueue;
|
|
30
|
+
}
|
|
31
|
+
export interface SessionControllerState {
|
|
32
|
+
ensureSession: () => void;
|
|
33
|
+
restoreSession: (session: LoadedSession) => void;
|
|
34
|
+
currentProvider: () => KnownProvider;
|
|
35
|
+
setCurrentProvider: (p: KnownProvider) => void;
|
|
36
|
+
currentModelId: () => string;
|
|
37
|
+
setCurrentModelId: (id: string) => void;
|
|
38
|
+
currentThinking: () => ThinkingLevel;
|
|
39
|
+
setCurrentThinking: (t: ThinkingLevel) => void;
|
|
40
|
+
isSessionStarted: () => boolean;
|
|
41
|
+
followUp: (text: string) => Promise<void>;
|
|
42
|
+
steer: (text: string) => Promise<void>;
|
|
43
|
+
sendUserMessage: (text: string, options?: {
|
|
44
|
+
deliverAs?: PromptDeliveryMode;
|
|
45
|
+
}) => Promise<void>;
|
|
46
|
+
}
|
|
47
|
+
export declare function createSessionController(options: SessionControllerOptions): SessionControllerState;
|
|
48
|
+
//# sourceMappingURL=session-controller.d.ts.map
|