@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,216 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ACP Session - wraps Agent and emits ACP updates
|
|
3
|
+
*/
|
|
4
|
+
import { textChunk, thoughtChunk, toolCall, toolCallUpdate, toolNameToKind } from "./updates.js";
|
|
5
|
+
import { Effect } from "effect";
|
|
6
|
+
// Slash commands exposed to Zed
|
|
7
|
+
const AVAILABLE_COMMANDS = [
|
|
8
|
+
{ name: "model", description: "Switch model: /model <modelId>" },
|
|
9
|
+
{ name: "thinking", description: "Set thinking: /thinking off|minimal|low|medium|high|xhigh" },
|
|
10
|
+
{ name: "status", description: "Show session status" },
|
|
11
|
+
{ name: "compact", description: "Compact conversation context" },
|
|
12
|
+
{ name: "clear", description: "Clear conversation" },
|
|
13
|
+
];
|
|
14
|
+
export function createAcpSession(config) {
|
|
15
|
+
const { sessionId, cwd, agent, emitter, models, contextWindow, sessionOrchestrator } = config;
|
|
16
|
+
let currentModelId = config.currentModelId;
|
|
17
|
+
let thinkingLevel = config.thinkingLevel;
|
|
18
|
+
let cancelled = false;
|
|
19
|
+
let unsubscribe = null;
|
|
20
|
+
// Track session stats
|
|
21
|
+
let turnCount = 0;
|
|
22
|
+
let lastUsage = null;
|
|
23
|
+
// Track emitted content to avoid duplicate chunks
|
|
24
|
+
let lastEmittedTextLen = 0;
|
|
25
|
+
let lastEmittedThinkingLen = 0;
|
|
26
|
+
// Subscribe to agent events and emit ACP updates
|
|
27
|
+
function subscribeToEvents() {
|
|
28
|
+
lastEmittedTextLen = 0;
|
|
29
|
+
lastEmittedThinkingLen = 0;
|
|
30
|
+
return agent.subscribe((event) => {
|
|
31
|
+
if (cancelled)
|
|
32
|
+
return;
|
|
33
|
+
switch (event.type) {
|
|
34
|
+
case "message_update":
|
|
35
|
+
if (event.message.role === "assistant") {
|
|
36
|
+
// Extract text and thinking from content
|
|
37
|
+
const content = event.message.content;
|
|
38
|
+
let totalText = "";
|
|
39
|
+
let totalThinking = "";
|
|
40
|
+
for (const block of content) {
|
|
41
|
+
if (typeof block !== "object" || block === null)
|
|
42
|
+
continue;
|
|
43
|
+
const b = block;
|
|
44
|
+
if (b.type === "text" && typeof b.text === "string") {
|
|
45
|
+
totalText += b.text;
|
|
46
|
+
}
|
|
47
|
+
else if (b.type === "thinking" && typeof b.thinking === "string") {
|
|
48
|
+
totalThinking += b.thinking;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Emit only new content (delta)
|
|
52
|
+
if (totalText.length > lastEmittedTextLen) {
|
|
53
|
+
const delta = totalText.slice(lastEmittedTextLen);
|
|
54
|
+
lastEmittedTextLen = totalText.length;
|
|
55
|
+
emitter.emit(textChunk(delta));
|
|
56
|
+
}
|
|
57
|
+
if (totalThinking.length > lastEmittedThinkingLen) {
|
|
58
|
+
const delta = totalThinking.slice(lastEmittedThinkingLen);
|
|
59
|
+
lastEmittedThinkingLen = totalThinking.length;
|
|
60
|
+
emitter.emit(thoughtChunk(delta));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
break;
|
|
64
|
+
case "tool_execution_start":
|
|
65
|
+
emitter.emit(toolCall(event.toolCallId, event.toolName, toolNameToKind(event.toolName), event.args));
|
|
66
|
+
break;
|
|
67
|
+
case "tool_execution_update":
|
|
68
|
+
emitter.emit(toolCallUpdate(event.toolCallId, "in_progress", event.partialResult ? JSON.stringify(event.partialResult) : undefined));
|
|
69
|
+
break;
|
|
70
|
+
case "tool_execution_end":
|
|
71
|
+
emitter.emit(toolCallUpdate(event.toolCallId, event.isError ? "failed" : "completed", event.result ? JSON.stringify(event.result) : undefined));
|
|
72
|
+
break;
|
|
73
|
+
case "message_end":
|
|
74
|
+
// Capture usage from assistant messages
|
|
75
|
+
if (event.message.role === "assistant") {
|
|
76
|
+
const msg = event.message;
|
|
77
|
+
if (msg.usage?.totalTokens) {
|
|
78
|
+
lastUsage = {
|
|
79
|
+
totalTokens: msg.usage.totalTokens,
|
|
80
|
+
cacheRead: msg.usage.cacheRead,
|
|
81
|
+
cacheWrite: msg.usage.cacheWrite,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
async function prompt(content) {
|
|
90
|
+
cancelled = false;
|
|
91
|
+
turnCount++;
|
|
92
|
+
unsubscribe = subscribeToEvents();
|
|
93
|
+
try {
|
|
94
|
+
// Check for slash command
|
|
95
|
+
const firstText = content.find((b) => b.type === "text")?.text?.trim();
|
|
96
|
+
if (firstText?.startsWith("/")) {
|
|
97
|
+
return handleSlashCommand(firstText);
|
|
98
|
+
}
|
|
99
|
+
// Extract text and images
|
|
100
|
+
let textContent = "";
|
|
101
|
+
const images = [];
|
|
102
|
+
for (const block of content) {
|
|
103
|
+
if (block.type === "text" && block.text) {
|
|
104
|
+
textContent += block.text;
|
|
105
|
+
}
|
|
106
|
+
else if (block.type === "image" && block.data && block.mimeType) {
|
|
107
|
+
images.push({ data: block.data, mimeType: block.mimeType });
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (!textContent && images.length === 0) {
|
|
111
|
+
return "end_turn";
|
|
112
|
+
}
|
|
113
|
+
// Convert images to attachment format
|
|
114
|
+
const attachments = images.map((img, idx) => ({
|
|
115
|
+
id: `acp-img-${idx}`,
|
|
116
|
+
type: "image",
|
|
117
|
+
content: img.data,
|
|
118
|
+
mimeType: img.mimeType,
|
|
119
|
+
fileName: `image-${idx}`,
|
|
120
|
+
size: Math.ceil(img.data.length * 0.75),
|
|
121
|
+
}));
|
|
122
|
+
await Effect.runPromise(sessionOrchestrator.submitPromptAndWait(textContent, {
|
|
123
|
+
mode: "followUp",
|
|
124
|
+
attachments: attachments.length > 0 ? attachments : undefined,
|
|
125
|
+
}));
|
|
126
|
+
return cancelled ? "cancelled" : "end_turn";
|
|
127
|
+
}
|
|
128
|
+
finally {
|
|
129
|
+
unsubscribe?.();
|
|
130
|
+
unsubscribe = null;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
function handleSlashCommand(line) {
|
|
134
|
+
const parts = line.slice(1).split(/\s+/);
|
|
135
|
+
const cmd = parts[0]?.toLowerCase();
|
|
136
|
+
const args = parts.slice(1).join(" ");
|
|
137
|
+
switch (cmd) {
|
|
138
|
+
case "model":
|
|
139
|
+
if (args && setModel(args)) {
|
|
140
|
+
emitter.emit(textChunk(`Model switched to ${args}`));
|
|
141
|
+
}
|
|
142
|
+
else if (args) {
|
|
143
|
+
emitter.emit(textChunk(`Unknown model: ${args}. Available: ${models.map((m) => m.modelId).join(", ")}`));
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
emitter.emit(textChunk(`Current model: ${currentModelId}\nAvailable: ${models.map((m) => m.modelId).join(", ")}`));
|
|
147
|
+
}
|
|
148
|
+
break;
|
|
149
|
+
case "thinking": {
|
|
150
|
+
const levels = ["off", "minimal", "low", "medium", "high", "xhigh"];
|
|
151
|
+
if (levels.includes(args)) {
|
|
152
|
+
agent.setThinkingLevel(args);
|
|
153
|
+
thinkingLevel = args;
|
|
154
|
+
emitter.emit(textChunk(`Thinking level set to ${args}`));
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
emitter.emit(textChunk(`Invalid thinking level. Use: ${levels.join(", ")}`));
|
|
158
|
+
}
|
|
159
|
+
break;
|
|
160
|
+
}
|
|
161
|
+
case "status": {
|
|
162
|
+
const provider = currentModelId.includes("/") ? currentModelId.split("/")[0] : "anthropic";
|
|
163
|
+
const fmt = (n) => n >= 1000 ? `${(n / 1000).toFixed(1)}k` : String(n);
|
|
164
|
+
let ctx = `0/${fmt(contextWindow)}`;
|
|
165
|
+
let cache = "";
|
|
166
|
+
if (lastUsage && contextWindow > 0) {
|
|
167
|
+
const pct = ((lastUsage.totalTokens / contextWindow) * 100).toFixed(1);
|
|
168
|
+
ctx = `${fmt(lastUsage.totalTokens)}/${fmt(contextWindow)} (${pct}%)`;
|
|
169
|
+
if (lastUsage.cacheRead)
|
|
170
|
+
cache = ` | cache: ${fmt(lastUsage.cacheRead)} read`;
|
|
171
|
+
}
|
|
172
|
+
const status = `${currentModelId} (${provider}) | ${thinkingLevel} | ${ctx}${cache} | turns: ${turnCount}`;
|
|
173
|
+
emitter.emit(textChunk(status));
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
176
|
+
case "clear":
|
|
177
|
+
agent.reset();
|
|
178
|
+
emitter.emit(textChunk("Conversation cleared"));
|
|
179
|
+
break;
|
|
180
|
+
case "compact":
|
|
181
|
+
emitter.emit(textChunk("Compact not yet implemented in ACP mode"));
|
|
182
|
+
break;
|
|
183
|
+
default:
|
|
184
|
+
emitter.emit(textChunk(`Unknown command: /${cmd}`));
|
|
185
|
+
}
|
|
186
|
+
return "end_turn";
|
|
187
|
+
}
|
|
188
|
+
function cancel() {
|
|
189
|
+
cancelled = true;
|
|
190
|
+
agent.abort();
|
|
191
|
+
}
|
|
192
|
+
function getAvailableCommands() {
|
|
193
|
+
return AVAILABLE_COMMANDS;
|
|
194
|
+
}
|
|
195
|
+
function getModels() {
|
|
196
|
+
return { options: models, currentModelId };
|
|
197
|
+
}
|
|
198
|
+
function setModel(modelId) {
|
|
199
|
+
const success = config.setModel(modelId);
|
|
200
|
+
if (success) {
|
|
201
|
+
currentModelId = modelId;
|
|
202
|
+
emitter.emitModels(models, currentModelId);
|
|
203
|
+
}
|
|
204
|
+
return success;
|
|
205
|
+
}
|
|
206
|
+
return {
|
|
207
|
+
id: sessionId,
|
|
208
|
+
cwd,
|
|
209
|
+
prompt,
|
|
210
|
+
cancel,
|
|
211
|
+
getAvailableCommands,
|
|
212
|
+
getModels,
|
|
213
|
+
setModel,
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/adapters/acp/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ACP session/update notification emitter
|
|
3
|
+
* Bridges agent events to ACP protocol notifications
|
|
4
|
+
*/
|
|
5
|
+
import type { SessionUpdate, SlashCommand, ModelOption, ToolCallKind, ToolCallStatus, JsonRpcNotification } from "./protocol.js";
|
|
6
|
+
export interface UpdateEmitter {
|
|
7
|
+
emit(update: SessionUpdate): void;
|
|
8
|
+
emitCommands(commands: SlashCommand[]): void;
|
|
9
|
+
emitModels(availableModels: ModelOption[], currentModelId: string): void;
|
|
10
|
+
}
|
|
11
|
+
export declare function createUpdateEmitter(sessionId: string, write: (notification: JsonRpcNotification) => void): UpdateEmitter;
|
|
12
|
+
export declare function textChunk(text: string): SessionUpdate;
|
|
13
|
+
export declare function thoughtChunk(text: string): SessionUpdate;
|
|
14
|
+
export declare function toolCall(toolCallId: string, title: string, kind: ToolCallKind, rawInput?: unknown): SessionUpdate;
|
|
15
|
+
export declare function toolCallUpdate(toolCallId: string, status: ToolCallStatus, content?: string, title?: string): SessionUpdate;
|
|
16
|
+
export declare function toolNameToKind(name: string): ToolCallKind;
|
|
17
|
+
//# sourceMappingURL=updates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updates.d.ts","sourceRoot":"","sources":["../../../src/adapters/acp/updates.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACX,aAAa,EAEb,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,MAAM,eAAe,CAAA;AAGtB,MAAM,WAAW,aAAa;IAC7B,IAAI,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAA;IACjC,YAAY,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAI,CAAA;IAC5C,UAAU,CAAC,eAAe,EAAE,WAAW,EAAE,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;CACxE;AAED,wBAAgB,mBAAmB,CAClC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,CAAC,YAAY,EAAE,mBAAmB,KAAK,IAAI,GAChD,aAAa,CAiBf;AAMD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAErD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAExD;AAED,wBAAgB,QAAQ,CACvB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,YAAY,EAClB,QAAQ,CAAC,EAAE,OAAO,GAChB,aAAa,CASf;AAED,wBAAgB,cAAc,CAC7B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,MAAM,GACZ,aAAa,CAQf;AAGD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAOzD"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ACP session/update notification emitter
|
|
3
|
+
* Bridges agent events to ACP protocol notifications
|
|
4
|
+
*/
|
|
5
|
+
import { makeNotification } from "./protocol.js";
|
|
6
|
+
export function createUpdateEmitter(sessionId, write) {
|
|
7
|
+
const emit = (update) => {
|
|
8
|
+
const params = { sessionId, update };
|
|
9
|
+
write(makeNotification("session/update", params));
|
|
10
|
+
};
|
|
11
|
+
return {
|
|
12
|
+
emit,
|
|
13
|
+
emitCommands(commands) {
|
|
14
|
+
emit({ sessionUpdate: "available_commands_update", availableCommands: commands });
|
|
15
|
+
},
|
|
16
|
+
emitModels(availableModels, currentModelId) {
|
|
17
|
+
emit({ sessionUpdate: "models_update", models: { availableModels, currentModelId } });
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
// ============================================================================
|
|
22
|
+
// Convenience builders for common updates
|
|
23
|
+
// ============================================================================
|
|
24
|
+
export function textChunk(text) {
|
|
25
|
+
return { sessionUpdate: "agent_message_chunk", content: { type: "text", text } };
|
|
26
|
+
}
|
|
27
|
+
export function thoughtChunk(text) {
|
|
28
|
+
return { sessionUpdate: "agent_thought_chunk", content: { type: "text", text } };
|
|
29
|
+
}
|
|
30
|
+
export function toolCall(toolCallId, title, kind, rawInput) {
|
|
31
|
+
return {
|
|
32
|
+
sessionUpdate: "tool_call",
|
|
33
|
+
toolCallId,
|
|
34
|
+
title,
|
|
35
|
+
kind,
|
|
36
|
+
status: "pending",
|
|
37
|
+
rawInput,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export function toolCallUpdate(toolCallId, status, content, title) {
|
|
41
|
+
return {
|
|
42
|
+
sessionUpdate: "tool_call_update",
|
|
43
|
+
toolCallId,
|
|
44
|
+
status,
|
|
45
|
+
title,
|
|
46
|
+
content: content ? [{ type: "text", text: content }] : undefined,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
// Map tool names to ACP kinds
|
|
50
|
+
export function toolNameToKind(name) {
|
|
51
|
+
const lower = name.toLowerCase();
|
|
52
|
+
if (lower === "read" || lower.includes("read"))
|
|
53
|
+
return "read";
|
|
54
|
+
if (lower === "write" || lower.includes("write"))
|
|
55
|
+
return "write";
|
|
56
|
+
if (lower === "edit" || lower.includes("edit"))
|
|
57
|
+
return "edit";
|
|
58
|
+
if (lower === "bash" || lower === "command" || lower.includes("terminal"))
|
|
59
|
+
return "command";
|
|
60
|
+
return "other";
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=updates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updates.js","sourceRoot":"","sources":["../../../src/adapters/acp/updates.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAQhD,MAAM,UAAU,mBAAmB,CAClC,SAAiB,EACjB,KAAkD;IAElD,MAAM,IAAI,GAAG,CAAC,MAAqB,EAAQ,EAAE;QAC5C,MAAM,MAAM,GAAwB,EAAE,SAAS,EAAE,MAAM,EAAE,CAAA;QACzD,KAAK,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAA;IAClD,CAAC,CAAA;IAED,OAAO;QACN,IAAI;QAEJ,YAAY,CAAC,QAAwB;YACpC,IAAI,CAAC,EAAE,aAAa,EAAE,2BAA2B,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,CAAA;QAClF,CAAC;QAED,UAAU,CAAC,eAA8B,EAAE,cAAsB;YAChE,IAAI,CAAC,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,eAAe,EAAE,cAAc,EAAE,EAAE,CAAC,CAAA;QACtF,CAAC;KACD,CAAA;AACF,CAAC;AAED,+EAA+E;AAC/E,0CAA0C;AAC1C,+EAA+E;AAE/E,MAAM,UAAU,SAAS,CAAC,IAAY;IACrC,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAA;AACjF,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACxC,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAA;AACjF,CAAC;AAED,MAAM,UAAU,QAAQ,CACvB,UAAkB,EAClB,KAAa,EACb,IAAkB,EAClB,QAAkB;IAElB,OAAO;QACN,aAAa,EAAE,WAAW;QAC1B,UAAU;QACV,KAAK;QACL,IAAI;QACJ,MAAM,EAAE,SAAS;QACjB,QAAQ;KACR,CAAA;AACF,CAAC;AAED,MAAM,UAAU,cAAc,CAC7B,UAAkB,EAClB,MAAsB,EACtB,OAAgB,EAChB,KAAc;IAEd,OAAO;QACN,aAAa,EAAE,kBAAkB;QACjC,UAAU;QACV,MAAM;QACN,KAAK;QACL,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;KACzE,CAAA;AACF,CAAC;AAED,8BAA8B;AAC9B,MAAM,UAAU,cAAc,CAAC,IAAY;IAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;IAChC,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAA;IAC7D,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAA;IAChE,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAA;IAC7D,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,SAAS,CAAA;IAC3F,OAAO,OAAO,CAAA;AACf,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headless.d.ts","sourceRoot":"","sources":["../../../src/adapters/cli/headless.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAiCzE,UAAU,YAAa,SAAQ,eAAe;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAA;CACf;AAED,eAAO,MAAM,WAAW,GAAU,MAAM,YAAY,kBAwEnD,CAAA"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import { createRuntime } from "../../runtime/factory.js";
|
|
3
|
+
const readStdin = async () => {
|
|
4
|
+
const chunks = [];
|
|
5
|
+
for await (const chunk of process.stdin)
|
|
6
|
+
chunks.push(Buffer.from(chunk));
|
|
7
|
+
return Buffer.concat(chunks).toString("utf8");
|
|
8
|
+
};
|
|
9
|
+
const textFromBlocks = (blocks) => {
|
|
10
|
+
const parts = [];
|
|
11
|
+
for (const block of blocks) {
|
|
12
|
+
if (block.type === "text")
|
|
13
|
+
parts.push(block.text);
|
|
14
|
+
}
|
|
15
|
+
return parts.join("");
|
|
16
|
+
};
|
|
17
|
+
const renderMessage = (message) => {
|
|
18
|
+
if (message.role === "user") {
|
|
19
|
+
if (typeof message.content === "string")
|
|
20
|
+
return message.content;
|
|
21
|
+
return textFromBlocks(message.content);
|
|
22
|
+
}
|
|
23
|
+
if (message.role === "assistant") {
|
|
24
|
+
const parts = [];
|
|
25
|
+
for (const block of message.content) {
|
|
26
|
+
if (block.type === "text")
|
|
27
|
+
parts.push(block.text);
|
|
28
|
+
}
|
|
29
|
+
return parts.join("");
|
|
30
|
+
}
|
|
31
|
+
return textFromBlocks(message.content);
|
|
32
|
+
};
|
|
33
|
+
export const runHeadless = async (args) => {
|
|
34
|
+
const runtime = await createRuntime({
|
|
35
|
+
configDir: args.configDir,
|
|
36
|
+
configPath: args.configPath,
|
|
37
|
+
provider: args.provider,
|
|
38
|
+
model: args.model,
|
|
39
|
+
thinking: args.thinking,
|
|
40
|
+
}, "headless");
|
|
41
|
+
// Initialize hooks with no-op handlers for headless mode (single-shot, no UI)
|
|
42
|
+
runtime.hookRunner.initialize({
|
|
43
|
+
sendHandler: () => { },
|
|
44
|
+
sendMessageHandler: () => { },
|
|
45
|
+
sendUserMessageHandler: async () => { },
|
|
46
|
+
steerHandler: async () => { },
|
|
47
|
+
followUpHandler: async () => { },
|
|
48
|
+
isIdleHandler: () => true,
|
|
49
|
+
appendEntryHandler: (customType, data) => runtime.sessionManager.appendEntry(customType, data),
|
|
50
|
+
getSessionId: () => runtime.sessionManager.sessionId,
|
|
51
|
+
getModel: () => runtime.agent.state.model,
|
|
52
|
+
hasUI: false,
|
|
53
|
+
});
|
|
54
|
+
const prompt = (args.prompt ?? (await readStdin())).trim();
|
|
55
|
+
if (!prompt) {
|
|
56
|
+
process.stdout.write(JSON.stringify({ ok: false, error: "Empty prompt" }) + "\n");
|
|
57
|
+
process.exitCode = 2;
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
try {
|
|
61
|
+
await Effect.runPromise(runtime.sessionOrchestrator.submitPromptAndWait(prompt, { mode: "followUp" }));
|
|
62
|
+
const conversation = runtime.agent.state.messages.filter((m) => {
|
|
63
|
+
const role = m.role;
|
|
64
|
+
return role === "user" || role === "assistant" || role === "toolResult";
|
|
65
|
+
});
|
|
66
|
+
const lastAssistant = [...conversation].reverse().find((m) => m.role === "assistant");
|
|
67
|
+
const assistant = lastAssistant ? renderMessage(lastAssistant) : "";
|
|
68
|
+
process.stdout.write(JSON.stringify({
|
|
69
|
+
ok: true,
|
|
70
|
+
provider: runtime.config.provider,
|
|
71
|
+
model: runtime.config.modelId,
|
|
72
|
+
prompt,
|
|
73
|
+
assistant,
|
|
74
|
+
validationIssues: runtime.validationIssues,
|
|
75
|
+
}) + "\n");
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
process.stdout.write(JSON.stringify({
|
|
79
|
+
ok: false,
|
|
80
|
+
provider: runtime.config.provider,
|
|
81
|
+
model: runtime.config.modelId,
|
|
82
|
+
prompt,
|
|
83
|
+
assistant: "",
|
|
84
|
+
error: err instanceof Error ? err.message : String(err),
|
|
85
|
+
validationIssues: runtime.validationIssues,
|
|
86
|
+
}) + "\n");
|
|
87
|
+
process.exitCode = 1;
|
|
88
|
+
}
|
|
89
|
+
finally {
|
|
90
|
+
await runtime.close().catch(() => { });
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
//# sourceMappingURL=headless.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headless.js","sourceRoot":"","sources":["../../../src/adapters/cli/headless.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/adapters/cli/validate.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAO1D,eAAO,MAAM,WAAW,GAAU,OAAM,eAAoB,KAAG,OAAO,CAAC,IAAI,CAuC1E,CAAA"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { createToolRegistry } from "@yeshwanthyk/base-tools";
|
|
2
|
+
import { loadAppConfig } from "../../config.js";
|
|
3
|
+
import { loadCustomCommands } from "@yeshwanthyk/runtime-effect/extensibility/custom-commands.js";
|
|
4
|
+
import { loadExtensibility } from "@yeshwanthyk/runtime-effect/extensibility/index.js";
|
|
5
|
+
import { formatValidationIssue, hasBlockingIssues } from "../../extensibility/validation.js";
|
|
6
|
+
import { SessionManager } from "../../session-manager.js";
|
|
7
|
+
export const runValidate = async (args = {}) => {
|
|
8
|
+
const loaded = await loadAppConfig({
|
|
9
|
+
configDir: args.configDir,
|
|
10
|
+
configPath: args.configPath,
|
|
11
|
+
provider: args.provider,
|
|
12
|
+
model: args.model,
|
|
13
|
+
thinking: args.thinking,
|
|
14
|
+
});
|
|
15
|
+
const { issues: commandIssues } = loadCustomCommands(loaded.configDir);
|
|
16
|
+
const sendRef = { current: () => { } };
|
|
17
|
+
const sessionManager = new SessionManager(loaded.configDir);
|
|
18
|
+
const builtinToolNames = Object.keys(createToolRegistry(process.cwd()));
|
|
19
|
+
const extensibility = await loadExtensibility({
|
|
20
|
+
configDir: loaded.configDir,
|
|
21
|
+
cwd: process.cwd(),
|
|
22
|
+
sendRef,
|
|
23
|
+
builtinToolNames,
|
|
24
|
+
hasUI: false,
|
|
25
|
+
sessionManager,
|
|
26
|
+
});
|
|
27
|
+
const issues = [...commandIssues, ...extensibility.validationIssues];
|
|
28
|
+
if (issues.length === 0) {
|
|
29
|
+
process.stdout.write("No validation issues found.\n");
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
process.stdout.write(`Found ${issues.length} validation issue${issues.length === 1 ? "" : "s"}:\n`);
|
|
33
|
+
for (const issue of issues) {
|
|
34
|
+
process.stdout.write(`${formatValidationIssue(issue)}\n`);
|
|
35
|
+
}
|
|
36
|
+
if (hasBlockingIssues(issues)) {
|
|
37
|
+
process.exitCode = 1;
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/adapters/cli/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,8DAA8D,CAAA;AAEjG,OAAO,EAAE,iBAAiB,EAAE,MAAM,oDAAoD,CAAA;AACtF,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAG7E,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAEzD,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAAE,OAAwB,EAAE,EAAiB,EAAE;IAC9E,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;QAClC,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;KACvB,CAAC,CAAA;IAEF,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IACtE,MAAM,OAAO,GAAY,EAAE,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAAA;IAC9C,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IAE3D,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IAEvE,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC;QAC7C,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,OAAO;QACP,gBAAgB;QAChB,KAAK,EAAE,KAAK;QACZ,cAAc;KACd,CAAC,CAAA;IAEF,MAAM,MAAM,GAAsB,CAAC,GAAG,aAAa,EAAE,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAA;IAEvF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAA;QACrD,OAAM;IACP,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,MAAM,CAAC,MAAM,oBAAoB,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAA;IACnG,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC1D,CAAC;IAED,IAAI,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;IACrB,CAAC;AACF,CAAC,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type RuntimeInitArgs } from "../../runtime/factory.js";
|
|
2
|
+
interface RunTuiArgs extends RuntimeInitArgs {
|
|
3
|
+
continueSession?: boolean;
|
|
4
|
+
resumeSession?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare const runTuiOpen: (args?: RunTuiArgs) => Promise<void>;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=app.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/adapters/tui/app.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAKzE,UAAU,UAAW,SAAQ,eAAe;IAC3C,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,aAAa,CAAC,EAAE,OAAO,CAAA;CACvB;AAED,eAAO,MAAM,UAAU,GAAU,OAAO,UAAU,kBA0BjD,CAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { render } from "@opentui/solid";
|
|
2
|
+
import { RuntimeProvider } from "../../runtime/context.js";
|
|
3
|
+
import { createRuntime } from "../../runtime/factory.js";
|
|
4
|
+
import { selectSession as selectSessionOpen } from "../../session-picker.js";
|
|
5
|
+
import { TuiApp } from "../../ui/app-shell/TuiApp.js";
|
|
6
|
+
export const runTuiOpen = async (args) => {
|
|
7
|
+
const runtime = await createRuntime(args, "tui");
|
|
8
|
+
const { sessionManager } = runtime;
|
|
9
|
+
let initialSession = null;
|
|
10
|
+
if (args?.resumeSession) {
|
|
11
|
+
const selectedPath = await selectSessionOpen(sessionManager);
|
|
12
|
+
if (selectedPath === null) {
|
|
13
|
+
process.stdout.write("No session selected\n");
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
initialSession = sessionManager.loadSession(selectedPath);
|
|
17
|
+
}
|
|
18
|
+
if (args?.continueSession && !initialSession) {
|
|
19
|
+
initialSession = sessionManager.loadLatest();
|
|
20
|
+
}
|
|
21
|
+
render(() => (<RuntimeProvider runtime={runtime}>
|
|
22
|
+
<TuiApp initialSession={initialSession}/>
|
|
23
|
+
</RuntimeProvider>), { targetFps: 30, exitOnCtrlC: false, useKittyKeyboard: {} });
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=app.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.jsx","sourceRoot":"","sources":["../../../src/adapters/tui/app.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAwB,MAAM,qBAAqB,CAAA;AAEzE,OAAO,EAAE,aAAa,IAAI,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAOhD,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,IAAiB,EAAE,EAAE;IACrD,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IAChD,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAA;IAClC,IAAI,cAAc,GAAyB,IAAI,CAAA;IAE/C,IAAI,IAAI,EAAE,aAAa,EAAE,CAAC;QACzB,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC,cAAc,CAAC,CAAA;QAC5D,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;YAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAA;YAC7C,OAAM;QACP,CAAC;QACD,cAAc,GAAG,cAAc,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;IAC1D,CAAC;IAED,IAAI,IAAI,EAAE,eAAe,IAAI,CAAC,cAAc,EAAE,CAAC;QAC9C,cAAc,GAAG,cAAc,CAAC,UAAU,EAAE,CAAA;IAC7C,CAAC;IAED,MAAM,CACL,GAAG,EAAE,CAAC,CACL,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CACjC;IAAA,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,EACxC;GAAA,EAAE,eAAe,CAAC,CAClB,EACD,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAC3D,CAAA;AACF,CAAC,CAAA"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent event handler for TUI application
|
|
3
|
+
*/
|
|
4
|
+
import type { AgentEvent } from "@yeshwanthyk/agent-core";
|
|
5
|
+
import type { AgentToolResult } from "@yeshwanthyk/ai";
|
|
6
|
+
import type { Theme } from "@yeshwanthyk/open-tui";
|
|
7
|
+
import type { JSX } from "solid-js";
|
|
8
|
+
import type { SessionManager } from "./session-manager.js";
|
|
9
|
+
import type { UIMessage, ToolBlock, ActivityState } from "./types.js";
|
|
10
|
+
import type { PromptQueue } from "./hooks/usePromptQueue.js";
|
|
11
|
+
import type { HookRunner } from "./hooks/index.js";
|
|
12
|
+
import type { RenderResultOptions } from "@yeshwanthyk/runtime-effect/extensibility/custom-tools/types.js";
|
|
13
|
+
/** Tool metadata for UI rendering */
|
|
14
|
+
export interface ToolMeta {
|
|
15
|
+
label: string;
|
|
16
|
+
source: "builtin" | "custom";
|
|
17
|
+
sourcePath?: string;
|
|
18
|
+
renderCall?: (args: any, theme: Theme) => JSX.Element;
|
|
19
|
+
renderResult?: (result: AgentToolResult<any>, opts: RenderResultOptions, theme: Theme) => JSX.Element;
|
|
20
|
+
}
|
|
21
|
+
export interface EventHandlerContext {
|
|
22
|
+
setMessages: (updater: (prev: UIMessage[]) => UIMessage[]) => void;
|
|
23
|
+
setToolBlocks: (updater: (prev: ToolBlock[]) => ToolBlock[]) => void;
|
|
24
|
+
setActivityState: (s: ActivityState) => void;
|
|
25
|
+
setIsResponding: (v: boolean) => void;
|
|
26
|
+
setContextTokens: (v: number) => void;
|
|
27
|
+
setCacheStats: (v: {
|
|
28
|
+
cacheRead: number;
|
|
29
|
+
input: number;
|
|
30
|
+
} | null) => void;
|
|
31
|
+
setRetryStatus: (v: string | null) => void;
|
|
32
|
+
setTurnCount: (v: number) => void;
|
|
33
|
+
promptQueue: PromptQueue;
|
|
34
|
+
sessionManager: SessionManager;
|
|
35
|
+
streamingMessageId: {
|
|
36
|
+
current: string | null;
|
|
37
|
+
};
|
|
38
|
+
retryConfig: {
|
|
39
|
+
enabled: boolean;
|
|
40
|
+
maxRetries: number;
|
|
41
|
+
baseDelayMs: number;
|
|
42
|
+
};
|
|
43
|
+
retryablePattern: RegExp;
|
|
44
|
+
retryState: {
|
|
45
|
+
attempt: number;
|
|
46
|
+
abortController: AbortController | null;
|
|
47
|
+
};
|
|
48
|
+
agent: {
|
|
49
|
+
state: {
|
|
50
|
+
messages: unknown[];
|
|
51
|
+
};
|
|
52
|
+
replaceMessages: (messages: unknown[]) => void;
|
|
53
|
+
continue: () => Promise<void>;
|
|
54
|
+
};
|
|
55
|
+
hookRunner?: HookRunner;
|
|
56
|
+
toolByName?: Map<string, ToolMeta>;
|
|
57
|
+
getContextWindow?: () => number;
|
|
58
|
+
}
|
|
59
|
+
export type AgentEventHandler = ((event: AgentEvent) => void) & {
|
|
60
|
+
dispose: () => void;
|
|
61
|
+
};
|
|
62
|
+
export declare function createAgentEventHandler(ctx: EventHandlerContext): AgentEventHandler;
|
|
63
|
+
//# sourceMappingURL=agent-events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-events.d.ts","sourceRoot":"","sources":["../src/agent-events.ts"],"names":[],"mappings":"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"}
|