@ebowwa/coder 0.7.63 → 0.7.64
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/__tests__/permissions.test.d.ts +12 -0
- package/dist/core/__tests__/permissions.test.d.ts.map +1 -0
- package/dist/core/__tests__/permissions.test.js +851 -0
- package/dist/core/agent-loop/__tests__/compaction.test.d.ts +5 -0
- package/dist/core/agent-loop/__tests__/compaction.test.d.ts.map +1 -0
- package/dist/core/agent-loop/__tests__/compaction.test.js +209 -0
- package/dist/core/agent-loop/__tests__/formatters.test.d.ts +5 -0
- package/dist/core/agent-loop/__tests__/formatters.test.d.ts.map +1 -0
- package/dist/core/agent-loop/__tests__/formatters.test.js +195 -0
- package/dist/core/agent-loop/__tests__/index.test.d.ts +5 -0
- package/dist/core/agent-loop/__tests__/index.test.d.ts.map +1 -0
- package/dist/core/agent-loop/__tests__/index.test.js +121 -0
- package/dist/core/agent-loop/__tests__/loop-state.test.d.ts +5 -0
- package/dist/core/agent-loop/__tests__/loop-state.test.d.ts.map +1 -0
- package/dist/core/agent-loop/__tests__/loop-state.test.js +340 -0
- package/dist/core/agent-loop/__tests__/message-builder.test.d.ts +5 -0
- package/dist/core/agent-loop/__tests__/message-builder.test.d.ts.map +1 -0
- package/dist/core/agent-loop/__tests__/message-builder.test.js +178 -0
- package/dist/core/agent-loop/__tests__/tool-executor.test.d.ts +5 -0
- package/dist/core/agent-loop/__tests__/tool-executor.test.d.ts.map +1 -0
- package/dist/core/agent-loop/__tests__/tool-executor.test.js +331 -0
- package/dist/core/agent-loop/compaction.d.ts +39 -0
- package/dist/core/agent-loop/compaction.d.ts.map +1 -0
- package/dist/core/agent-loop/compaction.js +51 -0
- package/dist/core/agent-loop/formatters.d.ts +21 -0
- package/dist/core/agent-loop/formatters.d.ts.map +1 -0
- package/dist/core/agent-loop/formatters.js +42 -0
- package/dist/core/agent-loop/index.d.ts +25 -0
- package/dist/core/agent-loop/index.d.ts.map +1 -0
- package/dist/core/agent-loop/index.js +83 -0
- package/dist/core/agent-loop/loop-state.d.ts +74 -0
- package/dist/core/agent-loop/loop-state.d.ts.map +1 -0
- package/dist/core/agent-loop/loop-state.js +147 -0
- package/dist/core/agent-loop/message-builder.d.ts +13 -0
- package/dist/core/agent-loop/message-builder.d.ts.map +1 -0
- package/dist/core/agent-loop/message-builder.js +49 -0
- package/dist/core/agent-loop/tool-executor.d.ts +23 -0
- package/dist/core/agent-loop/tool-executor.d.ts.map +1 -0
- package/dist/core/agent-loop/tool-executor.js +152 -0
- package/dist/core/agent-loop/turn-executor.d.ts +57 -0
- package/dist/core/agent-loop/turn-executor.d.ts.map +1 -0
- package/dist/core/agent-loop/turn-executor.js +124 -0
- package/dist/core/agent-loop/types.d.ts +141 -0
- package/dist/core/agent-loop/types.d.ts.map +1 -0
- package/dist/core/agent-loop/types.js +4 -0
- package/dist/core/agent-loop.d.ts +17 -0
- package/dist/core/agent-loop.d.ts.map +1 -0
- package/dist/core/agent-loop.js +16 -0
- package/dist/core/api-client-impl.d.ts +62 -0
- package/dist/core/api-client-impl.d.ts.map +1 -0
- package/dist/core/api-client-impl.js +479 -0
- package/dist/core/api-client.d.ts +6 -0
- package/dist/core/api-client.d.ts.map +1 -0
- package/dist/core/api-client.js +5 -0
- package/dist/core/checkpoints.d.ts +128 -0
- package/dist/core/checkpoints.d.ts.map +1 -0
- package/dist/core/checkpoints.js +438 -0
- package/dist/core/claude-md.d.ts +71 -0
- package/dist/core/claude-md.d.ts.map +1 -0
- package/dist/core/claude-md.js +198 -0
- package/dist/core/cognitive-security/hooks.d.ts +138 -0
- package/dist/core/cognitive-security/hooks.d.ts.map +1 -0
- package/dist/core/cognitive-security/hooks.js +389 -0
- package/dist/core/cognitive-security/index.d.ts +751 -0
- package/dist/core/cognitive-security/index.d.ts.map +1 -0
- package/dist/core/cognitive-security/index.js +1123 -0
- package/dist/core/cognitive-security/middleware.d.ts +136 -0
- package/dist/core/cognitive-security/middleware.d.ts.map +1 -0
- package/dist/core/cognitive-security/middleware.js +376 -0
- package/dist/core/config-loader.d.ts +127 -0
- package/dist/core/config-loader.d.ts.map +1 -0
- package/dist/core/config-loader.js +219 -0
- package/dist/core/context-compaction.d.ts +87 -0
- package/dist/core/context-compaction.d.ts.map +1 -0
- package/dist/core/context-compaction.js +428 -0
- package/dist/core/git-status.d.ts +25 -0
- package/dist/core/git-status.d.ts.map +1 -0
- package/dist/core/git-status.js +204 -0
- package/dist/core/image.d.ts +69 -0
- package/dist/core/image.d.ts.map +1 -0
- package/dist/core/image.js +290 -0
- package/dist/core/image.test.d.ts +2 -0
- package/dist/core/image.test.d.ts.map +1 -0
- package/dist/core/image.test.js +149 -0
- package/dist/core/models.d.ts +123 -0
- package/dist/core/models.d.ts.map +1 -0
- package/dist/core/models.js +325 -0
- package/dist/core/permissions.d.ts +81 -0
- package/dist/core/permissions.d.ts.map +1 -0
- package/dist/core/permissions.js +327 -0
- package/dist/core/retry.d.ts +25 -0
- package/dist/core/retry.d.ts.map +1 -0
- package/dist/core/retry.js +121 -0
- package/dist/core/session-store.d.ts +9 -0
- package/dist/core/session-store.d.ts.map +1 -0
- package/dist/core/session-store.js +10 -0
- package/dist/core/sessions/export.d.ts +47 -0
- package/dist/core/sessions/export.d.ts.map +1 -0
- package/dist/core/sessions/export.js +256 -0
- package/dist/core/sessions/index.d.ts +132 -0
- package/dist/core/sessions/index.d.ts.map +1 -0
- package/dist/core/sessions/index.js +442 -0
- package/dist/core/sessions/metadata.d.ts +77 -0
- package/dist/core/sessions/metadata.d.ts.map +1 -0
- package/dist/core/sessions/metadata.js +233 -0
- package/dist/core/sessions/persistence.d.ts +72 -0
- package/dist/core/sessions/persistence.d.ts.map +1 -0
- package/dist/core/sessions/persistence.js +201 -0
- package/dist/core/sessions/types.d.ts +110 -0
- package/dist/core/sessions/types.d.ts.map +1 -0
- package/dist/core/sessions/types.js +4 -0
- package/dist/core/stream-highlighter.d.ts +18 -0
- package/dist/core/stream-highlighter.d.ts.map +1 -0
- package/dist/core/stream-highlighter.js +916 -0
- package/dist/core/system-reminders.d.ts +89 -0
- package/dist/core/system-reminders.d.ts.map +1 -0
- package/dist/core/system-reminders.js +285 -0
- package/dist/ecosystem/hooks/__tests__/index.test.d.ts +5 -0
- package/dist/ecosystem/hooks/__tests__/index.test.d.ts.map +1 -0
- package/dist/ecosystem/hooks/__tests__/index.test.js +458 -0
- package/dist/ecosystem/hooks/index.d.ts +59 -0
- package/dist/ecosystem/hooks/index.d.ts.map +1 -0
- package/dist/ecosystem/hooks/index.js +294 -0
- package/dist/ecosystem/hooks/prompt-evaluator.d.ts +32 -0
- package/dist/ecosystem/hooks/prompt-evaluator.d.ts.map +1 -0
- package/dist/ecosystem/hooks/prompt-evaluator.js +229 -0
- package/dist/ecosystem/skills/index.d.ts +55 -0
- package/dist/ecosystem/skills/index.d.ts.map +1 -0
- package/dist/ecosystem/skills/index.js +258 -0
- package/dist/ecosystem/tools/__tests__/index.test.d.ts +7 -0
- package/dist/ecosystem/tools/__tests__/index.test.d.ts.map +1 -0
- package/dist/ecosystem/tools/__tests__/index.test.js +856 -0
- package/dist/ecosystem/tools/index.d.ts +24 -0
- package/dist/ecosystem/tools/index.d.ts.map +1 -0
- package/dist/ecosystem/tools/index.js +1709 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -52192
- package/dist/interfaces/mcp/client.d.ts +40 -0
- package/dist/interfaces/mcp/client.d.ts.map +1 -0
- package/dist/interfaces/mcp/client.js +309 -0
- package/dist/interfaces/ui/index.d.ts +36 -0
- package/dist/interfaces/ui/index.d.ts.map +1 -0
- package/dist/interfaces/ui/index.js +61 -0
- package/dist/interfaces/ui/spinner.d.ts +140 -0
- package/dist/interfaces/ui/spinner.d.ts.map +1 -0
- package/dist/interfaces/ui/spinner.js +342 -0
- package/dist/interfaces/ui/terminal/cli/index.d.ts +12 -0
- package/dist/interfaces/ui/terminal/cli/index.d.ts.map +1 -0
- package/dist/interfaces/ui/terminal/cli/index.js +159 -52768
- package/dist/interfaces/ui/terminal/shared/args.d.ts +39 -0
- package/dist/interfaces/ui/terminal/shared/args.d.ts.map +1 -0
- package/dist/interfaces/ui/terminal/shared/args.js +176 -0
- package/dist/interfaces/ui/terminal/shared/index.d.ts +11 -0
- package/dist/interfaces/ui/terminal/shared/index.d.ts.map +1 -0
- package/dist/interfaces/ui/terminal/shared/index.js +16 -0
- package/dist/interfaces/ui/terminal/shared/loading-state.d.ts +124 -0
- package/dist/interfaces/ui/terminal/shared/loading-state.d.ts.map +1 -0
- package/dist/interfaces/ui/terminal/shared/loading-state.js +246 -0
- package/dist/interfaces/ui/terminal/shared/query.d.ts +22 -0
- package/dist/interfaces/ui/terminal/shared/query.d.ts.map +1 -0
- package/dist/interfaces/ui/terminal/shared/query.js +100 -0
- package/dist/interfaces/ui/terminal/shared/setup.d.ts +33 -0
- package/dist/interfaces/ui/terminal/shared/setup.d.ts.map +1 -0
- package/dist/interfaces/ui/terminal/shared/setup.js +226 -0
- package/dist/interfaces/ui/terminal/shared/status-line.d.ts +117 -0
- package/dist/interfaces/ui/terminal/shared/status-line.d.ts.map +1 -0
- package/dist/interfaces/ui/terminal/shared/status-line.js +267 -0
- package/dist/interfaces/ui/terminal/shared/system-prompt.d.ts +38 -0
- package/dist/interfaces/ui/terminal/shared/system-prompt.d.ts.map +1 -0
- package/dist/interfaces/ui/terminal/shared/system-prompt.js +102 -0
- package/dist/interfaces/ui/terminal/tui/HelpPanel.d.ts +39 -0
- package/dist/interfaces/ui/terminal/tui/HelpPanel.d.ts.map +1 -0
- package/dist/interfaces/ui/terminal/tui/HelpPanel.js +215 -0
- package/dist/interfaces/ui/terminal/tui/InputContext.d.ts +91 -0
- package/dist/interfaces/ui/terminal/tui/InputContext.d.ts.map +1 -0
- package/dist/interfaces/ui/terminal/tui/InputContext.js +154 -0
- package/dist/interfaces/ui/terminal/tui/InputField.d.ts +18 -0
- package/dist/interfaces/ui/terminal/tui/InputField.d.ts.map +1 -0
- package/dist/interfaces/ui/terminal/tui/InputField.js +41 -0
- package/dist/interfaces/ui/terminal/tui/InteractiveTUI.d.ts +16 -0
- package/dist/interfaces/ui/terminal/tui/InteractiveTUI.d.ts.map +1 -0
- package/dist/interfaces/ui/terminal/tui/InteractiveTUI.js +451 -0
- package/dist/interfaces/ui/terminal/tui/MessageArea.d.ts +10 -0
- package/dist/interfaces/ui/terminal/tui/MessageArea.d.ts.map +1 -0
- package/dist/interfaces/ui/terminal/tui/MessageArea.js +91 -0
- package/dist/interfaces/ui/terminal/tui/MessageStore.d.ts +48 -0
- package/dist/interfaces/ui/terminal/tui/MessageStore.d.ts.map +1 -0
- package/dist/interfaces/ui/terminal/tui/MessageStore.js +151 -0
- package/dist/interfaces/ui/terminal/tui/StatusBar.d.ts +9 -0
- package/dist/interfaces/ui/terminal/tui/StatusBar.d.ts.map +1 -0
- package/dist/interfaces/ui/terminal/tui/StatusBar.js +36 -0
- package/dist/interfaces/ui/terminal/tui/commands.d.ts +21 -0
- package/dist/interfaces/ui/terminal/tui/commands.d.ts.map +1 -0
- package/dist/interfaces/ui/terminal/tui/commands.js +359 -0
- package/dist/interfaces/ui/terminal/tui/components/InteractiveElements.d.ts +115 -0
- package/dist/interfaces/ui/terminal/tui/components/InteractiveElements.d.ts.map +1 -0
- package/dist/interfaces/ui/terminal/tui/components/InteractiveElements.js +306 -0
- package/dist/interfaces/ui/terminal/tui/components/MultilineInput.d.ts +92 -0
- package/dist/interfaces/ui/terminal/tui/components/MultilineInput.d.ts.map +1 -0
- package/dist/interfaces/ui/terminal/tui/components/MultilineInput.js +399 -0
- package/dist/interfaces/ui/terminal/tui/components/PaneManager.d.ts +59 -0
- package/dist/interfaces/ui/terminal/tui/components/PaneManager.d.ts.map +1 -0
- package/dist/interfaces/ui/terminal/tui/components/PaneManager.js +139 -0
- package/dist/interfaces/ui/terminal/tui/components/Sidebar.d.ts +68 -0
- package/dist/interfaces/ui/terminal/tui/components/Sidebar.d.ts.map +1 -0
- package/dist/interfaces/ui/terminal/tui/components/Sidebar.js +340 -0
- package/dist/interfaces/ui/terminal/tui/components/index.d.ts +23 -0
- package/dist/interfaces/ui/terminal/tui/components/index.d.ts.map +1 -0
- package/dist/interfaces/ui/terminal/tui/components/index.js +51 -0
- package/dist/interfaces/ui/terminal/tui/console.d.ts +20 -0
- package/dist/interfaces/ui/terminal/tui/console.d.ts.map +1 -0
- package/dist/interfaces/ui/terminal/tui/console.js +46 -0
- package/dist/interfaces/ui/terminal/tui/index.d.ts +20 -0
- package/dist/interfaces/ui/terminal/tui/index.d.ts.map +1 -0
- package/dist/interfaces/ui/terminal/tui/index.js +28 -0
- package/dist/interfaces/ui/terminal/tui/run.d.ts +13 -0
- package/dist/interfaces/ui/terminal/tui/run.d.ts.map +1 -0
- package/dist/interfaces/ui/terminal/tui/run.js +31 -0
- package/dist/interfaces/ui/terminal/tui/spinner.d.ts +44 -0
- package/dist/interfaces/ui/terminal/tui/spinner.d.ts.map +1 -0
- package/dist/interfaces/ui/terminal/tui/spinner.js +59 -0
- package/dist/interfaces/ui/terminal/tui/tui-app.d.ts +39 -0
- package/dist/interfaces/ui/terminal/tui/tui-app.d.ts.map +1 -0
- package/dist/interfaces/ui/terminal/tui/tui-app.js +198 -0
- package/dist/interfaces/ui/terminal/tui/tui-footer.d.ts +167 -0
- package/dist/interfaces/ui/terminal/tui/tui-footer.d.ts.map +1 -0
- package/dist/interfaces/ui/terminal/tui/tui-footer.js +330 -0
- package/dist/interfaces/ui/terminal/tui/types.d.ts +165 -0
- package/dist/interfaces/ui/terminal/tui/types.d.ts.map +1 -0
- package/dist/interfaces/ui/terminal/tui/types.js +5 -0
- package/dist/interfaces/ui/terminal/tui/useInputHandler.d.ts +23 -0
- package/dist/interfaces/ui/terminal/tui/useInputHandler.d.ts.map +1 -0
- package/dist/interfaces/ui/terminal/tui/useInputHandler.js +72 -0
- package/dist/interfaces/ui/terminal/tui/useNativeInput.d.ts +90 -0
- package/dist/interfaces/ui/terminal/tui/useNativeInput.d.ts.map +1 -0
- package/dist/interfaces/ui/terminal/tui/useNativeInput.js +188 -0
- package/dist/native/index.d.ts +480 -0
- package/dist/native/index.d.ts.map +1 -0
- package/dist/native/index.js +1625 -0
- package/dist/teammates/index.d.ts +161 -0
- package/dist/teammates/index.d.ts.map +1 -0
- package/dist/teammates/index.js +827 -0
- package/dist/types/index.d.ts +482 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +52 -0
- package/package.json +4 -2
- package/packages/src/core/__tests__/permissions.test.ts +1091 -0
- package/packages/src/core/agent-loop/__tests__/compaction.test.ts +280 -0
- package/packages/src/core/agent-loop/__tests__/formatters.test.ts +234 -0
- package/packages/src/core/agent-loop/__tests__/index.test.ts +162 -0
- package/packages/src/core/agent-loop/__tests__/loop-state.test.ts +413 -0
- package/packages/src/core/agent-loop/__tests__/message-builder.test.ts +229 -0
- package/packages/src/core/agent-loop/__tests__/tool-executor.test.ts +457 -0
- package/packages/src/core/agent-loop/compaction.ts +88 -0
- package/packages/src/core/agent-loop/formatters.ts +50 -0
- package/packages/src/core/agent-loop/index.ts +135 -0
- package/packages/src/core/agent-loop/loop-state.ts +187 -0
- package/packages/src/core/agent-loop/message-builder.ts +62 -0
- package/packages/src/core/agent-loop/tool-executor.ts +211 -0
- package/packages/src/core/agent-loop/turn-executor.ts +222 -0
- package/packages/src/core/agent-loop/types.ts +148 -0
- package/packages/src/core/agent-loop.ts +18 -0
- package/packages/src/core/api-client-impl.ts +619 -0
- package/packages/src/core/api-client.ts +6 -0
- package/packages/src/core/checkpoints.ts +606 -0
- package/packages/src/core/claude-md.ts +272 -0
- package/packages/src/core/cognitive-security/hooks.ts +590 -0
- package/packages/src/core/cognitive-security/index.ts +2041 -0
- package/packages/src/core/cognitive-security/middleware.ts +536 -0
- package/packages/src/core/config-loader.ts +324 -0
- package/packages/src/core/context-compaction.ts +578 -0
- package/packages/src/core/git-status.ts +262 -0
- package/packages/src/core/image.test.ts +180 -0
- package/packages/src/core/image.ts +350 -0
- package/packages/src/core/lmdb.db +0 -0
- package/packages/src/core/lmdb.db-lock +0 -0
- package/packages/src/core/models.ts +430 -0
- package/packages/src/core/normalizers/todo +4 -0
- package/packages/src/core/permissions.ts +431 -0
- package/packages/src/core/retry.ts +170 -0
- package/packages/src/core/session-store.ts +36 -0
- package/packages/src/core/sessions/export.ts +329 -0
- package/packages/src/core/sessions/index.ts +587 -0
- package/packages/src/core/sessions/metadata.ts +309 -0
- package/packages/src/core/sessions/persistence.ts +244 -0
- package/packages/src/core/sessions/types.ts +169 -0
- package/packages/src/core/stream-highlighter.ts +1123 -0
- package/packages/src/core/system-reminders.ts +402 -0
- package/packages/src/core/todo +8 -0
- package/packages/src/ecosystem/hooks/__tests__/index.test.ts +561 -0
- package/packages/src/ecosystem/hooks/index.ts +341 -0
- package/packages/src/ecosystem/hooks/prompt-evaluator.ts +300 -0
- package/packages/src/ecosystem/skills/index.ts +295 -0
- package/packages/src/ecosystem/tools/__tests__/index.test.ts +1335 -0
- package/packages/src/ecosystem/tools/index.ts +1877 -0
- package/packages/src/index.ts +120 -0
- package/packages/src/interfaces/mcp/client.ts +389 -0
- package/packages/src/interfaces/ui/Screenshot 2026-03-02 at 9.23.10/342/200/257PM.png +0 -0
- package/packages/src/interfaces/ui/Screenshot 2026-03-03 at 10.55.11/342/200/257AM.png +0 -0
- package/packages/src/interfaces/ui/index.ts +161 -0
- package/packages/src/interfaces/ui/lmdb.db +0 -0
- package/packages/src/interfaces/ui/lmdb.db-lock +0 -0
- package/packages/src/interfaces/ui/spinner.ts +451 -0
- package/packages/src/interfaces/ui/terminal/cli/index.ts +228 -0
- package/packages/src/interfaces/ui/terminal/lmdb.db +0 -0
- package/packages/src/interfaces/ui/terminal/lmdb.db-lock +0 -0
- package/packages/src/interfaces/ui/terminal/shared/args.ts +222 -0
- package/packages/src/interfaces/ui/terminal/shared/index.ts +71 -0
- package/packages/src/interfaces/ui/terminal/shared/loading-state.ts +322 -0
- package/packages/src/interfaces/ui/terminal/shared/query.ts +146 -0
- package/packages/src/interfaces/ui/terminal/shared/setup.ts +295 -0
- package/packages/src/interfaces/ui/terminal/shared/status-line.ts +358 -0
- package/packages/src/interfaces/ui/terminal/shared/system-prompt.ts +146 -0
- package/packages/src/interfaces/ui/terminal/tui/HelpPanel.tsx +262 -0
- package/packages/src/interfaces/ui/terminal/tui/InputContext.tsx +232 -0
- package/packages/src/interfaces/ui/terminal/tui/InputField.tsx +62 -0
- package/packages/src/interfaces/ui/terminal/tui/InteractiveTUI.tsx +537 -0
- package/packages/src/interfaces/ui/terminal/tui/MessageArea.tsx +107 -0
- package/packages/src/interfaces/ui/terminal/tui/MessageStore.tsx +240 -0
- package/packages/src/interfaces/ui/terminal/tui/StatusBar.tsx +54 -0
- package/packages/src/interfaces/ui/terminal/tui/commands.ts +438 -0
- package/packages/src/interfaces/ui/terminal/tui/components/InteractiveElements.tsx +584 -0
- package/packages/src/interfaces/ui/terminal/tui/components/MultilineInput.tsx +614 -0
- package/packages/src/interfaces/ui/terminal/tui/components/PaneManager.tsx +333 -0
- package/packages/src/interfaces/ui/terminal/tui/components/Sidebar.tsx +604 -0
- package/packages/src/interfaces/ui/terminal/tui/components/index.ts +118 -0
- package/packages/src/interfaces/ui/terminal/tui/console.ts +49 -0
- package/packages/src/interfaces/ui/terminal/tui/index.ts +90 -0
- package/packages/src/interfaces/ui/terminal/tui/run.tsx +42 -0
- package/packages/src/interfaces/ui/terminal/tui/spinner.ts +69 -0
- package/packages/src/interfaces/ui/terminal/tui/tui-app.tsx +390 -0
- package/packages/src/interfaces/ui/terminal/tui/tui-footer.ts +422 -0
- package/packages/src/interfaces/ui/terminal/tui/types.ts +186 -0
- package/packages/src/interfaces/ui/terminal/tui/useInputHandler.ts +104 -0
- package/packages/src/interfaces/ui/terminal/tui/useNativeInput.ts +239 -0
- package/packages/src/lmdb.db +0 -0
- package/packages/src/lmdb.db-lock +0 -0
- package/packages/src/native/index.ts +2345 -0
- package/packages/src/teammates/index.ts +982 -0
- package/packages/src/types/index.ts +722 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spinner Animation
|
|
3
|
+
* Provides animated spinner frames for loading indicators
|
|
4
|
+
*
|
|
5
|
+
* This is the single source of truth for all spinner frames in Coder.
|
|
6
|
+
* Other modules should import from here rather than defining their own.
|
|
7
|
+
*/
|
|
8
|
+
// ============================================
|
|
9
|
+
// SPINNER FRAME DEFINITIONS
|
|
10
|
+
// ============================================
|
|
11
|
+
/**
|
|
12
|
+
* Standard braille spinner frames (default)
|
|
13
|
+
* Used by: ora spinner, TUI footer, Ink components
|
|
14
|
+
*/
|
|
15
|
+
export const spinnerFrames = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
|
|
16
|
+
/**
|
|
17
|
+
* Alternative dot spinner frames
|
|
18
|
+
* Rising dots pattern
|
|
19
|
+
*/
|
|
20
|
+
export const dotSpinnerFrames = ["⠁", "⠂", "⠄", "⡀", "⢀", "⠠", "⠐", "⠈"];
|
|
21
|
+
/**
|
|
22
|
+
* Simple ASCII spinner frames
|
|
23
|
+
* Fallback for limited terminal support
|
|
24
|
+
*/
|
|
25
|
+
export const asciiSpinnerFrames = ["|", "/", "-", "\\"];
|
|
26
|
+
/**
|
|
27
|
+
* Arrow spinner frames
|
|
28
|
+
* Used for tool execution indicators
|
|
29
|
+
*/
|
|
30
|
+
export const arrowSpinnerFrames = ["←", "↖", "↑", "↗", "→", "↘", "↓", "↙"];
|
|
31
|
+
/**
|
|
32
|
+
* Simple dots for minimal display
|
|
33
|
+
*/
|
|
34
|
+
export const simpleDotFrames = [". ", ".. ", "...", " "];
|
|
35
|
+
// ============================================
|
|
36
|
+
// FRAME ITERATION UTILITIES
|
|
37
|
+
// ============================================
|
|
38
|
+
/**
|
|
39
|
+
* Get the next spinner frame index
|
|
40
|
+
*/
|
|
41
|
+
export function nextFrame(currentIndex, frames = spinnerFrames) {
|
|
42
|
+
return (currentIndex + 1) % frames.length;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Get a spinner frame by index (with wraparound)
|
|
46
|
+
*/
|
|
47
|
+
export function getFrame(index, frames = spinnerFrames) {
|
|
48
|
+
return frames[index % frames.length] ?? frames[0] ?? "";
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Create a spinner iterator
|
|
52
|
+
*/
|
|
53
|
+
export function* createSpinnerIterator(frames = spinnerFrames) {
|
|
54
|
+
let index = 0;
|
|
55
|
+
while (true) {
|
|
56
|
+
yield getFrame(index, frames);
|
|
57
|
+
index = nextFrame(index, frames);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TUI App Component for Coder CLI
|
|
3
|
+
* Full Ink-based TUI with message area, status bar, and input field
|
|
4
|
+
*/
|
|
5
|
+
import React from "react";
|
|
6
|
+
import type { PermissionMode } from "../../../../types/index.js";
|
|
7
|
+
export interface Message {
|
|
8
|
+
id: string;
|
|
9
|
+
role: "user" | "assistant" | "system";
|
|
10
|
+
content: string;
|
|
11
|
+
timestamp: number;
|
|
12
|
+
}
|
|
13
|
+
export interface TUIAppProps {
|
|
14
|
+
permissionMode: PermissionMode;
|
|
15
|
+
tokensUsed: number;
|
|
16
|
+
model: string;
|
|
17
|
+
messages: Message[];
|
|
18
|
+
isLoading?: boolean;
|
|
19
|
+
onSubmit: (value: string) => Promise<void>;
|
|
20
|
+
onExit?: () => void;
|
|
21
|
+
}
|
|
22
|
+
declare function TUIApp({ permissionMode, tokensUsed, model, messages, isLoading, onSubmit, onExit, }: TUIAppProps): React.JSX.Element;
|
|
23
|
+
export interface TUIAppHandle {
|
|
24
|
+
rerender: (props: Partial<TUIAppProps>) => void;
|
|
25
|
+
unmount: () => void;
|
|
26
|
+
waitUntilExit: () => Promise<void>;
|
|
27
|
+
addMessage: (message: Omit<Message, "id" | "timestamp">) => void;
|
|
28
|
+
setMessages: (messages: Message[]) => void;
|
|
29
|
+
setLoading: (isLoading: boolean) => void;
|
|
30
|
+
setTokensUsed: (tokens: number) => void;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Create and render the TUI app
|
|
34
|
+
*/
|
|
35
|
+
export declare function createTUIApp(initialProps: Omit<TUIAppProps, "messages"> & {
|
|
36
|
+
messages?: Message[];
|
|
37
|
+
}): TUIAppHandle;
|
|
38
|
+
export default TUIApp;
|
|
39
|
+
//# sourceMappingURL=tui-app.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui-app.d.ts","sourceRoot":"","sources":["../../../../../packages/src/interfaces/ui/terminal/tui/tui-app.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAmD,MAAM,OAAO,CAAC;AAIxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAWjE,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,cAAc,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AA8LD,iBAAS,MAAM,CAAC,EACd,cAAc,EACd,UAAU,EACV,KAAK,EACL,QAAQ,EACR,SAAiB,EACjB,QAAQ,EACR,MAAM,GACP,EAAE,WAAW,qBAiEb;AAMD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAChD,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,UAAU,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,WAAW,CAAC,KAAK,IAAI,CAAC;IACjE,WAAW,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAC3C,UAAU,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,YAAY,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,GAAG;IAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAA;CAAE,GACrE,YAAY,CAgEd;AAMD,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TUI App Component for Coder CLI
|
|
3
|
+
* Full Ink-based TUI with message area, status bar, and input field
|
|
4
|
+
*/
|
|
5
|
+
import React, { useState, useEffect, useCallback, useRef } from "react";
|
|
6
|
+
import { render, Box, Text, useInput, useApp, useStdout } from "ink";
|
|
7
|
+
import chalk from "chalk";
|
|
8
|
+
import { calculateContextInfo, getPermissionModeDisplay, } from "../shared/status-line.js";
|
|
9
|
+
import { spinnerFrames } from "./spinner.js";
|
|
10
|
+
function MessageArea({ messages, isLoading, height }) {
|
|
11
|
+
const visibleMessages = messages.slice(-height + 2); // Reserve 2 lines for padding
|
|
12
|
+
return (React.createElement(Box, { flexDirection: "column", height: height, overflow: "hidden" },
|
|
13
|
+
visibleMessages.map((msg) => (React.createElement(Box, { key: msg.id, flexDirection: "column", marginBottom: 1 },
|
|
14
|
+
React.createElement(Text, { bold: true, color: msg.role === "user" ? "cyan" : "magenta" }, msg.role === "user" ? "You:" : "Claude:"),
|
|
15
|
+
React.createElement(Text, { dimColor: msg.role === "system" }, msg.content)))),
|
|
16
|
+
isLoading && (React.createElement(Box, null,
|
|
17
|
+
React.createElement(Text, { dimColor: true }, "Thinking...")))));
|
|
18
|
+
}
|
|
19
|
+
function StatusBar({ permissionMode, tokensUsed, model, isLoading, }) {
|
|
20
|
+
const [frame, setFrame] = useState(0);
|
|
21
|
+
const contextInfo = calculateContextInfo(tokensUsed, model);
|
|
22
|
+
const permDisplay = getPermissionModeDisplay(permissionMode);
|
|
23
|
+
// Spinner animation
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
if (!isLoading)
|
|
26
|
+
return;
|
|
27
|
+
const interval = setInterval(() => {
|
|
28
|
+
setFrame((f) => (f + 1) % spinnerFrames.length);
|
|
29
|
+
}, 80);
|
|
30
|
+
return () => clearInterval(interval);
|
|
31
|
+
}, [isLoading]);
|
|
32
|
+
// Build status line
|
|
33
|
+
const parts = [];
|
|
34
|
+
// Loading spinner
|
|
35
|
+
if (isLoading) {
|
|
36
|
+
parts.push(chalk.cyan(spinnerFrames[frame]));
|
|
37
|
+
}
|
|
38
|
+
// Context percentage
|
|
39
|
+
const contextValue = contextInfo.isCritical
|
|
40
|
+
? chalk.red(`${contextInfo.percentRemaining.toFixed(0)}%`)
|
|
41
|
+
: contextInfo.isLow
|
|
42
|
+
? chalk.yellow(`${contextInfo.percentRemaining.toFixed(0)}%`)
|
|
43
|
+
: `${contextInfo.percentRemaining.toFixed(0)}%`;
|
|
44
|
+
parts.push(`Context: ${contextValue}`);
|
|
45
|
+
// Permission mode
|
|
46
|
+
const permColor = permDisplay.color;
|
|
47
|
+
const colorFn = chalk[permColor]?.bind(chalk) ?? chalk.gray;
|
|
48
|
+
parts.push(`${colorFn(permDisplay.symbol)} ${permDisplay.label}`);
|
|
49
|
+
const statusText = parts.join(" | ");
|
|
50
|
+
return (React.createElement(Box, { width: "100%", paddingX: 1 },
|
|
51
|
+
React.createElement(Text, { dimColor: true }, statusText)));
|
|
52
|
+
}
|
|
53
|
+
function InputField({ value, onChange, onSubmit, placeholder = "Type your message... (/help for commands)", isActive = true, }) {
|
|
54
|
+
const [cursorPos, setCursorPos] = useState(0);
|
|
55
|
+
useInput((input, key) => {
|
|
56
|
+
if (!isActive)
|
|
57
|
+
return;
|
|
58
|
+
if (key.return) {
|
|
59
|
+
if (value.trim()) {
|
|
60
|
+
onSubmit(value);
|
|
61
|
+
}
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if (key.backspace || key.delete) {
|
|
65
|
+
if (cursorPos > 0) {
|
|
66
|
+
onChange(value.slice(0, cursorPos - 1) + value.slice(cursorPos));
|
|
67
|
+
setCursorPos(cursorPos - 1);
|
|
68
|
+
}
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (key.leftArrow) {
|
|
72
|
+
setCursorPos(Math.max(0, cursorPos - 1));
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (key.rightArrow) {
|
|
76
|
+
setCursorPos(Math.min(value.length, cursorPos + 1));
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (key.upArrow || key.downArrow) {
|
|
80
|
+
// Ignore up/down for now (could be used for history)
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
// Regular character input
|
|
84
|
+
if (input && !key.ctrl && !key.meta) {
|
|
85
|
+
onChange(value.slice(0, cursorPos) + input + value.slice(cursorPos));
|
|
86
|
+
setCursorPos(cursorPos + input.length);
|
|
87
|
+
}
|
|
88
|
+
}, { isActive });
|
|
89
|
+
// Display value with cursor
|
|
90
|
+
const displayValue = value.length > 0 ? value : chalk.dim(placeholder);
|
|
91
|
+
const cursorChar = value.length > 0 ? "▋" : chalk.dim("▋");
|
|
92
|
+
// Calculate where cursor should appear
|
|
93
|
+
const beforeCursor = value.slice(0, cursorPos);
|
|
94
|
+
const afterCursor = value.slice(cursorPos);
|
|
95
|
+
return (React.createElement(Box, { borderStyle: "round", borderColor: "cyan", paddingX: 1, width: "100%" },
|
|
96
|
+
React.createElement(Text, { bold: true, color: "cyan" },
|
|
97
|
+
"You:",
|
|
98
|
+
" "),
|
|
99
|
+
value.length > 0 ? (React.createElement(Text, null,
|
|
100
|
+
beforeCursor,
|
|
101
|
+
cursorChar,
|
|
102
|
+
afterCursor)) : (React.createElement(Text, { dimColor: true }, placeholder))));
|
|
103
|
+
}
|
|
104
|
+
// ============================================
|
|
105
|
+
// MAIN TUI APP COMPONENT
|
|
106
|
+
// ============================================
|
|
107
|
+
function TUIApp({ permissionMode, tokensUsed, model, messages, isLoading = false, onSubmit, onExit, }) {
|
|
108
|
+
const [inputValue, setInputValue] = useState("");
|
|
109
|
+
const { exit } = useApp();
|
|
110
|
+
const { stdout } = useStdout();
|
|
111
|
+
// Calculate heights
|
|
112
|
+
const terminalHeight = stdout.rows || 24;
|
|
113
|
+
const inputHeight = 3; // Input field with border
|
|
114
|
+
const statusHeight = 1; // Status bar
|
|
115
|
+
const messageHeight = Math.max(5, terminalHeight - inputHeight - statusHeight - 2);
|
|
116
|
+
// Handle global keybindings
|
|
117
|
+
useInput((input, key) => {
|
|
118
|
+
// Ctrl+C to exit
|
|
119
|
+
if (key.ctrl && input === "c") {
|
|
120
|
+
if (onExit)
|
|
121
|
+
onExit();
|
|
122
|
+
exit();
|
|
123
|
+
}
|
|
124
|
+
}, { isActive: true });
|
|
125
|
+
// Handle submit
|
|
126
|
+
const handleSubmit = useCallback(async (value) => {
|
|
127
|
+
if (!value.trim())
|
|
128
|
+
return;
|
|
129
|
+
// Clear input
|
|
130
|
+
setInputValue("");
|
|
131
|
+
// Call onSubmit
|
|
132
|
+
await onSubmit(value);
|
|
133
|
+
}, [onSubmit]);
|
|
134
|
+
return (React.createElement(Box, { flexDirection: "column", height: terminalHeight, width: "100%" },
|
|
135
|
+
React.createElement(Box, { flexGrow: 1, flexDirection: "column", overflow: "hidden" },
|
|
136
|
+
React.createElement(MessageArea, { messages: messages, isLoading: isLoading, height: messageHeight })),
|
|
137
|
+
React.createElement(StatusBar, { permissionMode: permissionMode, tokensUsed: tokensUsed, model: model, isLoading: isLoading }),
|
|
138
|
+
React.createElement(InputField, { value: inputValue, onChange: setInputValue, onSubmit: handleSubmit, isActive: !isLoading })));
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Create and render the TUI app
|
|
142
|
+
*/
|
|
143
|
+
export function createTUIApp(initialProps) {
|
|
144
|
+
let currentProps = {
|
|
145
|
+
...initialProps,
|
|
146
|
+
messages: initialProps.messages || [],
|
|
147
|
+
};
|
|
148
|
+
let rerenderFn = null;
|
|
149
|
+
let unmountFn = null;
|
|
150
|
+
let waitUntilExitFn = null;
|
|
151
|
+
// Create the app
|
|
152
|
+
const { rerender, unmount, waitUntilExit } = render(React.createElement(TUIApp, { ...currentProps }), {
|
|
153
|
+
exitOnCtrlC: false,
|
|
154
|
+
});
|
|
155
|
+
rerenderFn = rerender;
|
|
156
|
+
unmountFn = unmount;
|
|
157
|
+
waitUntilExitFn = waitUntilExit;
|
|
158
|
+
return {
|
|
159
|
+
rerender: (newProps) => {
|
|
160
|
+
currentProps = { ...currentProps, ...newProps };
|
|
161
|
+
rerenderFn?.(React.createElement(TUIApp, { ...currentProps }));
|
|
162
|
+
},
|
|
163
|
+
unmount: () => {
|
|
164
|
+
unmountFn?.();
|
|
165
|
+
},
|
|
166
|
+
waitUntilExit: () => {
|
|
167
|
+
return waitUntilExitFn?.() || Promise.resolve();
|
|
168
|
+
},
|
|
169
|
+
addMessage: (message) => {
|
|
170
|
+
const newMessage = {
|
|
171
|
+
...message,
|
|
172
|
+
id: `msg-${Date.now()}-${Math.random().toString(36).slice(2)}`,
|
|
173
|
+
timestamp: Date.now(),
|
|
174
|
+
};
|
|
175
|
+
currentProps = {
|
|
176
|
+
...currentProps,
|
|
177
|
+
messages: [...currentProps.messages, newMessage],
|
|
178
|
+
};
|
|
179
|
+
rerenderFn?.(React.createElement(TUIApp, { ...currentProps }));
|
|
180
|
+
},
|
|
181
|
+
setMessages: (messages) => {
|
|
182
|
+
currentProps = { ...currentProps, messages };
|
|
183
|
+
rerenderFn?.(React.createElement(TUIApp, { ...currentProps }));
|
|
184
|
+
},
|
|
185
|
+
setLoading: (isLoading) => {
|
|
186
|
+
currentProps = { ...currentProps, isLoading };
|
|
187
|
+
rerenderFn?.(React.createElement(TUIApp, { ...currentProps }));
|
|
188
|
+
},
|
|
189
|
+
setTokensUsed: (tokensUsed) => {
|
|
190
|
+
currentProps = { ...currentProps, tokensUsed };
|
|
191
|
+
rerenderFn?.(React.createElement(TUIApp, { ...currentProps }));
|
|
192
|
+
},
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
// ============================================
|
|
196
|
+
// EXPORTS
|
|
197
|
+
// ============================================
|
|
198
|
+
export default TUIApp;
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TUI Footer Component for Coder CLI
|
|
3
|
+
* Provides a persistent status bar at the bottom of the terminal
|
|
4
|
+
*
|
|
5
|
+
* Uses ANSI escape codes for cursor positioning:
|
|
6
|
+
* - ESC[s Save cursor position
|
|
7
|
+
* - ESC[u Restore cursor position
|
|
8
|
+
* - ESC[#;#H Move cursor to row, col
|
|
9
|
+
* - ESC[2K Clear entire line
|
|
10
|
+
* - ESC[J Clear from cursor to end of screen
|
|
11
|
+
*/
|
|
12
|
+
import type { PermissionMode } from "../../../../types/index.js";
|
|
13
|
+
declare const ANSI: {
|
|
14
|
+
SAVE_CURSOR: string;
|
|
15
|
+
RESTORE_CURSOR: string;
|
|
16
|
+
MOVE_TO: (row: number, col: number) => string;
|
|
17
|
+
MOVE_TO_BOTTOM: (offset?: number) => string;
|
|
18
|
+
CLEAR_LINE: string;
|
|
19
|
+
CLEAR_TO_END: string;
|
|
20
|
+
CLEAR_SCREEN: string;
|
|
21
|
+
SCROLL_UP: (lines: number) => string;
|
|
22
|
+
SCROLL_DOWN: (lines: number) => string;
|
|
23
|
+
RESET: string;
|
|
24
|
+
ENTER_ALT_SCREEN: string;
|
|
25
|
+
EXIT_ALT_SCREEN: string;
|
|
26
|
+
HIDE_CURSOR: string;
|
|
27
|
+
SHOW_CURSOR: string;
|
|
28
|
+
};
|
|
29
|
+
export { ANSI };
|
|
30
|
+
export interface TUIFooterOptions {
|
|
31
|
+
/** Permission mode to display */
|
|
32
|
+
permissionMode: PermissionMode;
|
|
33
|
+
/** Tokens used in context */
|
|
34
|
+
tokensUsed: number;
|
|
35
|
+
/** Current model */
|
|
36
|
+
model: string;
|
|
37
|
+
/** Is loading/spinning */
|
|
38
|
+
isLoading?: boolean;
|
|
39
|
+
/** Verbose mode */
|
|
40
|
+
verbose?: boolean;
|
|
41
|
+
/** Show version */
|
|
42
|
+
showVersion?: boolean;
|
|
43
|
+
}
|
|
44
|
+
export interface TUIFooterState {
|
|
45
|
+
isEnabled: boolean;
|
|
46
|
+
lastRender: string;
|
|
47
|
+
lastOptions: TUIFooterOptions | null;
|
|
48
|
+
renderInterval: Timer | null;
|
|
49
|
+
spinnerFrame: number;
|
|
50
|
+
terminalHeight: number;
|
|
51
|
+
terminalWidth: number;
|
|
52
|
+
}
|
|
53
|
+
export declare class TUIFooter {
|
|
54
|
+
private state;
|
|
55
|
+
private static instance;
|
|
56
|
+
private constructor();
|
|
57
|
+
/**
|
|
58
|
+
* Get singleton instance
|
|
59
|
+
*/
|
|
60
|
+
static getInstance(): TUIFooter;
|
|
61
|
+
/**
|
|
62
|
+
* Reset singleton (for testing)
|
|
63
|
+
*/
|
|
64
|
+
static reset(): void;
|
|
65
|
+
/**
|
|
66
|
+
* Enable the footer (start tracking terminal size)
|
|
67
|
+
*/
|
|
68
|
+
enable(): void;
|
|
69
|
+
/**
|
|
70
|
+
* Disable the footer and clear it
|
|
71
|
+
*/
|
|
72
|
+
disable(): void;
|
|
73
|
+
/**
|
|
74
|
+
* Check if footer is enabled
|
|
75
|
+
*/
|
|
76
|
+
isEnabled(): boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Update terminal dimensions
|
|
79
|
+
*/
|
|
80
|
+
private updateTerminalSize;
|
|
81
|
+
/**
|
|
82
|
+
* Handle terminal resize
|
|
83
|
+
*/
|
|
84
|
+
private handleResize;
|
|
85
|
+
/**
|
|
86
|
+
* Render the footer at the bottom of the screen
|
|
87
|
+
* Saves cursor position, moves to bottom, renders, restores cursor
|
|
88
|
+
*/
|
|
89
|
+
render(options: TUIFooterOptions): void;
|
|
90
|
+
/**
|
|
91
|
+
* Render with loading spinner animation
|
|
92
|
+
*/
|
|
93
|
+
renderLoading(options: TUIFooterOptions): void;
|
|
94
|
+
/**
|
|
95
|
+
* Start spinner animation for loading state
|
|
96
|
+
*/
|
|
97
|
+
startSpinner(options: TUIFooterOptions, interval?: number): void;
|
|
98
|
+
/**
|
|
99
|
+
* Stop spinner animation
|
|
100
|
+
*/
|
|
101
|
+
stopSpinner(): void;
|
|
102
|
+
/**
|
|
103
|
+
* Clear the footer line
|
|
104
|
+
*/
|
|
105
|
+
clear(): void;
|
|
106
|
+
/**
|
|
107
|
+
* Update just the token count (for incremental updates)
|
|
108
|
+
*/
|
|
109
|
+
updateTokens(tokensUsed: number): void;
|
|
110
|
+
/**
|
|
111
|
+
* Update loading state
|
|
112
|
+
*/
|
|
113
|
+
setLoading(isLoading: boolean): void;
|
|
114
|
+
/**
|
|
115
|
+
* Get terminal dimensions
|
|
116
|
+
*/
|
|
117
|
+
getTerminalSize(): {
|
|
118
|
+
width: number;
|
|
119
|
+
height: number;
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Get the global TUI footer instance
|
|
124
|
+
*/
|
|
125
|
+
export declare function getTUIFooter(): TUIFooter;
|
|
126
|
+
/**
|
|
127
|
+
* Enable TUI footer
|
|
128
|
+
*/
|
|
129
|
+
export declare function enableTUIFooter(): TUIFooter;
|
|
130
|
+
/**
|
|
131
|
+
* Disable TUI footer
|
|
132
|
+
*/
|
|
133
|
+
export declare function disableTUIFooter(): void;
|
|
134
|
+
/**
|
|
135
|
+
* Render footer status (convenience function)
|
|
136
|
+
*/
|
|
137
|
+
export declare function renderTUIFooter(options: TUIFooterOptions): void;
|
|
138
|
+
/**
|
|
139
|
+
* Clear the footer line
|
|
140
|
+
*/
|
|
141
|
+
export declare function clearTUIFooter(): void;
|
|
142
|
+
declare const _default: {
|
|
143
|
+
TUIFooter: typeof TUIFooter;
|
|
144
|
+
getTUIFooter: typeof getTUIFooter;
|
|
145
|
+
enableTUIFooter: typeof enableTUIFooter;
|
|
146
|
+
disableTUIFooter: typeof disableTUIFooter;
|
|
147
|
+
renderTUIFooter: typeof renderTUIFooter;
|
|
148
|
+
clearTUIFooter: typeof clearTUIFooter;
|
|
149
|
+
ANSI: {
|
|
150
|
+
SAVE_CURSOR: string;
|
|
151
|
+
RESTORE_CURSOR: string;
|
|
152
|
+
MOVE_TO: (row: number, col: number) => string;
|
|
153
|
+
MOVE_TO_BOTTOM: (offset?: number) => string;
|
|
154
|
+
CLEAR_LINE: string;
|
|
155
|
+
CLEAR_TO_END: string;
|
|
156
|
+
CLEAR_SCREEN: string;
|
|
157
|
+
SCROLL_UP: (lines: number) => string;
|
|
158
|
+
SCROLL_DOWN: (lines: number) => string;
|
|
159
|
+
RESET: string;
|
|
160
|
+
ENTER_ALT_SCREEN: string;
|
|
161
|
+
EXIT_ALT_SCREEN: string;
|
|
162
|
+
HIDE_CURSOR: string;
|
|
163
|
+
SHOW_CURSOR: string;
|
|
164
|
+
};
|
|
165
|
+
};
|
|
166
|
+
export default _default;
|
|
167
|
+
//# sourceMappingURL=tui-footer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui-footer.d.ts","sourceRoot":"","sources":["../../../../../packages/src/interfaces/ui/terminal/tui/tui-footer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAYjE,QAAA,MAAM,IAAI;;;mBAIO,MAAM,OAAO,MAAM;;;;;uBASf,MAAM;yBACJ,MAAM;;;;;;CAY5B,CAAC;AAGF,OAAO,EAAE,IAAI,EAAE,CAAC;AAMhB,MAAM,WAAW,gBAAgB;IAC/B,iCAAiC;IACjC,cAAc,EAAE,cAAc,CAAC;IAC/B,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,0BAA0B;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mBAAmB;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mBAAmB;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACrC,cAAc,EAAE,KAAK,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB;AA0DD,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA0B;IAEjD,OAAO;IAYP;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,SAAS;IAO/B;;OAEG;IACH,MAAM,CAAC,KAAK,IAAI,IAAI;IAOpB;;OAEG;IACH,MAAM,IAAI,IAAI;IAUd;;OAEG;IACH,OAAO,IAAI,IAAI;IAUf;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAK1B;;OAEG;IACH,OAAO,CAAC,YAAY,CAKlB;IAEF;;;OAGG;IACH,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAiCvC;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAqB9C;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,SAAK,GAAG,IAAI;IAQ5D;;OAEG;IACH,WAAW,IAAI,IAAI;IAOnB;;OAEG;IACH,KAAK,IAAI,IAAI;IAab;;OAEG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAStC;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;IAgBpC;;OAEG;IACH,eAAe,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;CAMrD;AAMD;;GAEG;AACH,wBAAgB,YAAY,IAAI,SAAS,CAExC;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,SAAS,CAI3C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAE/D;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAErC;;;;;;;;;;;uBA1XgB,MAAM,OAAO,MAAM;;;;;2BASf,MAAM;6BACJ,MAAM;;;;;;;;AAsX7B,wBAQE"}
|