@intrect/openswarm 0.9.3 → 0.10.0
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 +76 -1
- package/config.example.yaml +6 -0
- package/dist/adapters/agenticLoop.d.ts +24 -0
- package/dist/adapters/agenticLoop.d.ts.map +1 -1
- package/dist/adapters/agenticLoop.js +130 -11
- package/dist/adapters/agenticLoop.js.map +1 -1
- package/dist/adapters/applyPatch.d.ts +21 -0
- package/dist/adapters/applyPatch.d.ts.map +1 -0
- package/dist/adapters/applyPatch.js +175 -0
- package/dist/adapters/applyPatch.js.map +1 -0
- package/dist/adapters/base.d.ts.map +1 -1
- package/dist/adapters/base.js +7 -0
- package/dist/adapters/base.js.map +1 -1
- package/dist/adapters/codex.js +10 -0
- package/dist/adapters/codex.js.map +1 -1
- package/dist/adapters/codexResponses.d.ts +8 -0
- package/dist/adapters/codexResponses.d.ts.map +1 -1
- package/dist/adapters/codexResponses.js +86 -8
- package/dist/adapters/codexResponses.js.map +1 -1
- package/dist/adapters/errorClassification.d.ts +8 -0
- package/dist/adapters/errorClassification.d.ts.map +1 -0
- package/dist/adapters/errorClassification.js +54 -0
- package/dist/adapters/errorClassification.js.map +1 -0
- package/dist/adapters/gpt.d.ts.map +1 -1
- package/dist/adapters/gpt.js +12 -1
- package/dist/adapters/gpt.js.map +1 -1
- package/dist/adapters/local.d.ts.map +1 -1
- package/dist/adapters/local.js +9 -1
- package/dist/adapters/local.js.map +1 -1
- package/dist/adapters/openrouter.d.ts.map +1 -1
- package/dist/adapters/openrouter.js +9 -1
- package/dist/adapters/openrouter.js.map +1 -1
- package/dist/adapters/rateLimitError.d.ts +29 -0
- package/dist/adapters/rateLimitError.d.ts.map +1 -0
- package/dist/adapters/rateLimitError.js +64 -0
- package/dist/adapters/rateLimitError.js.map +1 -0
- package/dist/adapters/resultParsing.d.ts.map +1 -1
- package/dist/adapters/resultParsing.js +18 -0
- package/dist/adapters/resultParsing.js.map +1 -1
- package/dist/adapters/tools.d.ts +3 -0
- package/dist/adapters/tools.d.ts.map +1 -1
- package/dist/adapters/tools.js +148 -11
- package/dist/adapters/tools.js.map +1 -1
- package/dist/adapters/types.d.ts +15 -0
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/adapters/webTools.d.ts.map +1 -1
- package/dist/adapters/webTools.js +44 -21
- package/dist/adapters/webTools.js.map +1 -1
- package/dist/agents/agentPair.d.ts +9 -0
- package/dist/agents/agentPair.d.ts.map +1 -1
- package/dist/agents/agentPair.js.map +1 -1
- package/dist/agents/auditor.d.ts.map +1 -1
- package/dist/agents/auditor.js +3 -0
- package/dist/agents/auditor.js.map +1 -1
- package/dist/agents/documenter.d.ts.map +1 -1
- package/dist/agents/documenter.js +3 -0
- package/dist/agents/documenter.js.map +1 -1
- package/dist/agents/draftAnalyzer.d.ts +30 -7
- package/dist/agents/draftAnalyzer.d.ts.map +1 -1
- package/dist/agents/draftAnalyzer.js +181 -30
- package/dist/agents/draftAnalyzer.js.map +1 -1
- package/dist/agents/pairPipeline.d.ts +7 -1
- package/dist/agents/pairPipeline.d.ts.map +1 -1
- package/dist/agents/pairPipeline.js +110 -66
- package/dist/agents/pairPipeline.js.map +1 -1
- package/dist/agents/pipelineFormat.d.ts.map +1 -1
- package/dist/agents/pipelineFormat.js +4 -0
- package/dist/agents/pipelineFormat.js.map +1 -1
- package/dist/agents/reviewer.d.ts +16 -0
- package/dist/agents/reviewer.d.ts.map +1 -1
- package/dist/agents/reviewer.js +30 -0
- package/dist/agents/reviewer.js.map +1 -1
- package/dist/agents/skillDocumenter.d.ts.map +1 -1
- package/dist/agents/skillDocumenter.js +3 -0
- package/dist/agents/skillDocumenter.js.map +1 -1
- package/dist/agents/tester.d.ts.map +1 -1
- package/dist/agents/tester.js +3 -0
- package/dist/agents/tester.js.map +1 -1
- package/dist/agents/worker.d.ts +14 -0
- package/dist/agents/worker.d.ts.map +1 -1
- package/dist/agents/worker.js +123 -22
- package/dist/agents/worker.js.map +1 -1
- package/dist/automation/autonomousRunner.d.ts +12 -0
- package/dist/automation/autonomousRunner.d.ts.map +1 -1
- package/dist/automation/autonomousRunner.js +218 -29
- package/dist/automation/autonomousRunner.js.map +1 -1
- package/dist/automation/runnerExecution.d.ts +15 -0
- package/dist/automation/runnerExecution.d.ts.map +1 -1
- package/dist/automation/runnerExecution.js +77 -1
- package/dist/automation/runnerExecution.js.map +1 -1
- package/dist/automation/runnerState.d.ts +7 -0
- package/dist/automation/runnerState.d.ts.map +1 -1
- package/dist/automation/runnerState.js +23 -1
- package/dist/automation/runnerState.js.map +1 -1
- package/dist/automation/runnerTypes.d.ts +2 -0
- package/dist/automation/runnerTypes.d.ts.map +1 -1
- package/dist/automation/scheduler.d.ts +12 -0
- package/dist/automation/scheduler.d.ts.map +1 -1
- package/dist/automation/scheduler.js +29 -2
- package/dist/automation/scheduler.js.map +1 -1
- package/dist/automation/taskSource.d.ts +9 -1
- package/dist/automation/taskSource.d.ts.map +1 -1
- package/dist/automation/taskSource.js +13 -2
- package/dist/automation/taskSource.js.map +1 -1
- package/dist/cli/auditPM.d.ts +40 -0
- package/dist/cli/auditPM.d.ts.map +1 -0
- package/dist/cli/auditPM.js +132 -0
- package/dist/cli/auditPM.js.map +1 -0
- package/dist/cli/designPipeline.d.ts +30 -0
- package/dist/cli/designPipeline.d.ts.map +1 -0
- package/dist/cli/designPipeline.js +113 -0
- package/dist/cli/designPipeline.js.map +1 -0
- package/dist/cli/mcpCommand.d.ts +22 -0
- package/dist/cli/mcpCommand.d.ts.map +1 -0
- package/dist/cli/mcpCommand.js +93 -0
- package/dist/cli/mcpCommand.js.map +1 -0
- package/dist/cli/projectHandler.d.ts.map +1 -1
- package/dist/cli/projectHandler.js +4 -2
- package/dist/cli/projectHandler.js.map +1 -1
- package/dist/cli/reviewAudit.d.ts +130 -0
- package/dist/cli/reviewAudit.d.ts.map +1 -0
- package/dist/cli/reviewAudit.js +283 -0
- package/dist/cli/reviewAudit.js.map +1 -0
- package/dist/cli/reviewCommand.d.ts +53 -0
- package/dist/cli/reviewCommand.d.ts.map +1 -0
- package/dist/cli/reviewCommand.js +207 -0
- package/dist/cli/reviewCommand.js.map +1 -0
- package/dist/cli/reviewMaxCommand.d.ts +35 -0
- package/dist/cli/reviewMaxCommand.d.ts.map +1 -0
- package/dist/cli/reviewMaxCommand.js +272 -0
- package/dist/cli/reviewMaxCommand.js.map +1 -0
- package/dist/cli/reviewProgress.d.ts +34 -0
- package/dist/cli/reviewProgress.d.ts.map +1 -0
- package/dist/cli/reviewProgress.js +109 -0
- package/dist/cli/reviewProgress.js.map +1 -0
- package/dist/cli/scheduleCommand.d.ts +15 -0
- package/dist/cli/scheduleCommand.d.ts.map +1 -0
- package/dist/cli/scheduleCommand.js +68 -0
- package/dist/cli/scheduleCommand.js.map +1 -0
- package/dist/cli.js +182 -26
- package/dist/cli.js.map +1 -1
- package/dist/core/config.d.ts +24 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +42 -0
- package/dist/core/config.js.map +1 -1
- package/dist/core/providerOverride.d.ts.map +1 -1
- package/dist/core/providerOverride.js +16 -13
- package/dist/core/providerOverride.js.map +1 -1
- package/dist/core/service.d.ts.map +1 -1
- package/dist/core/service.js +11 -0
- package/dist/core/service.js.map +1 -1
- package/dist/core/types.d.ts +38 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/discord/discordHandlers.d.ts.map +1 -1
- package/dist/discord/discordHandlers.js +1 -0
- package/dist/discord/discordHandlers.js.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/linear/linear.d.ts +21 -0
- package/dist/linear/linear.d.ts.map +1 -1
- package/dist/linear/linear.js +109 -4
- package/dist/linear/linear.js.map +1 -1
- package/dist/linear/projectUpdater.js +3 -1
- package/dist/linear/projectUpdater.js.map +1 -1
- package/dist/locale/prompts/en.d.ts.map +1 -1
- package/dist/locale/prompts/en.js +104 -11
- package/dist/locale/prompts/en.js.map +1 -1
- package/dist/locale/prompts/ko.d.ts.map +1 -1
- package/dist/locale/prompts/ko.js +103 -11
- package/dist/locale/prompts/ko.js.map +1 -1
- package/dist/locale/types.d.ts +12 -0
- package/dist/locale/types.d.ts.map +1 -1
- package/dist/mcp/mcpClient.d.ts +28 -1
- package/dist/mcp/mcpClient.d.ts.map +1 -1
- package/dist/mcp/mcpClient.js +74 -3
- package/dist/mcp/mcpClient.js.map +1 -1
- package/dist/orchestration/decisionEngine.d.ts +20 -0
- package/dist/orchestration/decisionEngine.d.ts.map +1 -1
- package/dist/orchestration/decisionEngine.js +23 -0
- package/dist/orchestration/decisionEngine.js.map +1 -1
- package/dist/orchestration/taskScheduler.d.ts.map +1 -1
- package/dist/orchestration/taskScheduler.js +12 -1
- package/dist/orchestration/taskScheduler.js.map +1 -1
- package/dist/support/chatBackend.d.ts +18 -0
- package/dist/support/chatBackend.d.ts.map +1 -1
- package/dist/support/chatBackend.js +92 -8
- package/dist/support/chatBackend.js.map +1 -1
- package/dist/support/chatSession.d.ts +51 -0
- package/dist/support/chatSession.d.ts.map +1 -0
- package/dist/support/chatSession.js +134 -0
- package/dist/support/chatSession.js.map +1 -0
- package/dist/support/chatTui.d.ts.map +1 -1
- package/dist/support/chatTui.js +6 -75
- package/dist/support/chatTui.js.map +1 -1
- package/dist/support/concurrencyPool.d.ts +18 -0
- package/dist/support/concurrencyPool.d.ts.map +1 -0
- package/dist/support/concurrencyPool.js +46 -0
- package/dist/support/concurrencyPool.js.map +1 -0
- package/dist/support/dashboardHtml.d.ts +1 -1
- package/dist/support/dashboardHtml.d.ts.map +1 -1
- package/dist/support/dashboardHtml.js +0 -28
- package/dist/support/dashboardHtml.js.map +1 -1
- package/dist/support/editParser.d.ts +26 -0
- package/dist/support/editParser.d.ts.map +1 -1
- package/dist/support/editParser.js +43 -0
- package/dist/support/editParser.js.map +1 -1
- package/dist/support/goalCommand.d.ts +35 -0
- package/dist/support/goalCommand.d.ts.map +1 -0
- package/dist/support/goalCommand.js +112 -0
- package/dist/support/goalCommand.js.map +1 -0
- package/dist/support/index.d.ts +0 -1
- package/dist/support/index.d.ts.map +1 -1
- package/dist/support/index.js +0 -1
- package/dist/support/index.js.map +1 -1
- package/dist/support/web.d.ts.map +1 -1
- package/dist/support/web.js +0 -7
- package/dist/support/web.js.map +1 -1
- package/dist/taskState/store.d.ts +5 -0
- package/dist/taskState/store.d.ts.map +1 -1
- package/dist/taskState/store.js +16 -0
- package/dist/taskState/store.js.map +1 -1
- package/dist/telemetry/telemetry.d.ts +42 -0
- package/dist/telemetry/telemetry.d.ts.map +1 -0
- package/dist/telemetry/telemetry.js +138 -0
- package/dist/telemetry/telemetry.js.map +1 -0
- package/dist/tui/App.d.ts +20 -0
- package/dist/tui/App.d.ts.map +1 -0
- package/dist/tui/App.js +52 -0
- package/dist/tui/App.js.map +1 -0
- package/dist/tui/chatModel.d.ts +81 -0
- package/dist/tui/chatModel.d.ts.map +1 -0
- package/dist/tui/chatModel.js +129 -0
- package/dist/tui/chatModel.js.map +1 -0
- package/dist/tui/components/AuditBoard.d.ts +10 -0
- package/dist/tui/components/AuditBoard.d.ts.map +1 -0
- package/dist/tui/components/AuditBoard.js +50 -0
- package/dist/tui/components/AuditBoard.js.map +1 -0
- package/dist/tui/components/ChatInput.d.ts +14 -0
- package/dist/tui/components/ChatInput.d.ts.map +1 -0
- package/dist/tui/components/ChatInput.js +46 -0
- package/dist/tui/components/ChatInput.js.map +1 -0
- package/dist/tui/components/ChatLog.d.ts +12 -0
- package/dist/tui/components/ChatLog.d.ts.map +1 -0
- package/dist/tui/components/ChatLog.js +47 -0
- package/dist/tui/components/ChatLog.js.map +1 -0
- package/dist/tui/components/CommandPalette.d.ts +6 -0
- package/dist/tui/components/CommandPalette.d.ts.map +1 -0
- package/dist/tui/components/CommandPalette.js +14 -0
- package/dist/tui/components/CommandPalette.js.map +1 -0
- package/dist/tui/components/ContextBar.d.ts +9 -0
- package/dist/tui/components/ContextBar.d.ts.map +1 -0
- package/dist/tui/components/ContextBar.js +18 -0
- package/dist/tui/components/ContextBar.js.map +1 -0
- package/dist/tui/components/DataTable.d.ts +6 -0
- package/dist/tui/components/DataTable.d.ts.map +1 -0
- package/dist/tui/components/DataTable.js +13 -0
- package/dist/tui/components/DataTable.js.map +1 -0
- package/dist/tui/components/HelpBar.d.ts +2 -0
- package/dist/tui/components/HelpBar.d.ts.map +1 -0
- package/dist/tui/components/HelpBar.js +8 -0
- package/dist/tui/components/HelpBar.js.map +1 -0
- package/dist/tui/components/LiveLog.d.ts +6 -0
- package/dist/tui/components/LiveLog.d.ts.map +1 -0
- package/dist/tui/components/LiveLog.js +10 -0
- package/dist/tui/components/LiveLog.js.map +1 -0
- package/dist/tui/components/LogLine.d.ts +4 -0
- package/dist/tui/components/LogLine.d.ts.map +1 -0
- package/dist/tui/components/LogLine.js +8 -0
- package/dist/tui/components/LogLine.js.map +1 -0
- package/dist/tui/components/SelectList.d.ts +6 -0
- package/dist/tui/components/SelectList.d.ts.map +1 -0
- package/dist/tui/components/SelectList.js +15 -0
- package/dist/tui/components/SelectList.js.map +1 -0
- package/dist/tui/components/StageTimeline.d.ts +7 -0
- package/dist/tui/components/StageTimeline.d.ts.map +1 -0
- package/dist/tui/components/StageTimeline.js +18 -0
- package/dist/tui/components/StageTimeline.js.map +1 -0
- package/dist/tui/components/StatusBar.d.ts +7 -0
- package/dist/tui/components/StatusBar.d.ts.map +1 -0
- package/dist/tui/components/StatusBar.js +8 -0
- package/dist/tui/components/StatusBar.js.map +1 -0
- package/dist/tui/components/SubagentTree.d.ts +10 -0
- package/dist/tui/components/SubagentTree.d.ts.map +1 -0
- package/dist/tui/components/SubagentTree.js +12 -0
- package/dist/tui/components/SubagentTree.js.map +1 -0
- package/dist/tui/components/TabBar.d.ts +5 -0
- package/dist/tui/components/TabBar.d.ts.map +1 -0
- package/dist/tui/components/TabBar.js +9 -0
- package/dist/tui/components/TabBar.js.map +1 -0
- package/dist/tui/components/WorkingIndicator.d.ts +6 -0
- package/dist/tui/components/WorkingIndicator.d.ts.map +1 -0
- package/dist/tui/components/WorkingIndicator.js +20 -0
- package/dist/tui/components/WorkingIndicator.js.map +1 -0
- package/dist/tui/hooks/useMonitor.d.ts +8 -0
- package/dist/tui/hooks/useMonitor.d.ts.map +1 -0
- package/dist/tui/hooks/useMonitor.js +42 -0
- package/dist/tui/hooks/useMonitor.js.map +1 -0
- package/dist/tui/hooks/usePipelineEvents.d.ts +6 -0
- package/dist/tui/hooks/usePipelineEvents.d.ts.map +1 -0
- package/dist/tui/hooks/usePipelineEvents.js +21 -0
- package/dist/tui/hooks/usePipelineEvents.js.map +1 -0
- package/dist/tui/hooks/useTerminalSize.d.ts +6 -0
- package/dist/tui/hooks/useTerminalSize.d.ts.map +1 -0
- package/dist/tui/hooks/useTerminalSize.js +26 -0
- package/dist/tui/hooks/useTerminalSize.js.map +1 -0
- package/dist/tui/index.d.ts +22 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +18 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/inputDebug.d.ts +20 -0
- package/dist/tui/inputDebug.d.ts.map +1 -0
- package/dist/tui/inputDebug.js +42 -0
- package/dist/tui/inputDebug.js.map +1 -0
- package/dist/tui/loadingMessages.d.ts +11 -0
- package/dist/tui/loadingMessages.d.ts.map +1 -0
- package/dist/tui/loadingMessages.js +39 -0
- package/dist/tui/loadingMessages.js.map +1 -0
- package/dist/tui/logFormat.d.ts +10 -0
- package/dist/tui/logFormat.d.ts.map +1 -0
- package/dist/tui/logFormat.js +86 -0
- package/dist/tui/logFormat.js.map +1 -0
- package/dist/tui/markdown.d.ts +3 -0
- package/dist/tui/markdown.d.ts.map +1 -0
- package/dist/tui/markdown.js +33 -0
- package/dist/tui/markdown.js.map +1 -0
- package/dist/tui/monitorApi.d.ts +6 -0
- package/dist/tui/monitorApi.d.ts.map +1 -0
- package/dist/tui/monitorApi.js +35 -0
- package/dist/tui/monitorApi.js.map +1 -0
- package/dist/tui/monitorRows.d.ts +43 -0
- package/dist/tui/monitorRows.d.ts.map +1 -0
- package/dist/tui/monitorRows.js +65 -0
- package/dist/tui/monitorRows.js.map +1 -0
- package/dist/tui/panels/ChatPanel.d.ts +16 -0
- package/dist/tui/panels/ChatPanel.d.ts.map +1 -0
- package/dist/tui/panels/ChatPanel.js +305 -0
- package/dist/tui/panels/ChatPanel.js.map +1 -0
- package/dist/tui/panels/LogsPanel.d.ts +8 -0
- package/dist/tui/panels/LogsPanel.d.ts.map +1 -0
- package/dist/tui/panels/LogsPanel.js +19 -0
- package/dist/tui/panels/LogsPanel.js.map +1 -0
- package/dist/tui/panels/MonitorPanel.d.ts +8 -0
- package/dist/tui/panels/MonitorPanel.d.ts.map +1 -0
- package/dist/tui/panels/MonitorPanel.js +19 -0
- package/dist/tui/panels/MonitorPanel.js.map +1 -0
- package/dist/tui/panels/PipelinePanel.d.ts +6 -0
- package/dist/tui/panels/PipelinePanel.d.ts.map +1 -0
- package/dist/tui/panels/PipelinePanel.js +22 -0
- package/dist/tui/panels/PipelinePanel.js.map +1 -0
- package/dist/tui/pipelineEvents.d.ts +21 -0
- package/dist/tui/pipelineEvents.d.ts.map +1 -0
- package/dist/tui/pipelineEvents.js +30 -0
- package/dist/tui/pipelineEvents.js.map +1 -0
- package/dist/tui/sse.d.ts +24 -0
- package/dist/tui/sse.d.ts.map +1 -0
- package/dist/tui/sse.js +78 -0
- package/dist/tui/sse.js.map +1 -0
- package/dist/tui/subagentTree.d.ts +10 -0
- package/dist/tui/subagentTree.d.ts.map +1 -0
- package/dist/tui/subagentTree.js +30 -0
- package/dist/tui/subagentTree.js.map +1 -0
- package/dist/tui/tabs.d.ts +10 -0
- package/dist/tui/tabs.d.ts.map +1 -0
- package/dist/tui/tabs.js +26 -0
- package/dist/tui/tabs.js.map +1 -0
- package/dist/tui/theme.d.ts +29 -0
- package/dist/tui/theme.d.ts.map +1 -0
- package/dist/tui/theme.js +34 -0
- package/dist/tui/theme.js.map +1 -0
- package/package.json +13 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/tui/App.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { Message } from '../support/chatSession.js';
|
|
2
|
+
export interface ChatLine {
|
|
3
|
+
role: 'user' | 'assistant' | 'system';
|
|
4
|
+
content: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Convert chat history to persistable messages: only user/assistant turns are
|
|
8
|
+
* saved. System lines (slash-command output, UI notices) are transient and
|
|
9
|
+
* dropped — they aren't part of the conversation to resume. (INT-2014)
|
|
10
|
+
*/
|
|
11
|
+
export declare function historyToMessages(history: ChatLine[]): Message[];
|
|
12
|
+
/** Restore persisted messages back to chat history lines. (INT-2014) */
|
|
13
|
+
export declare function messagesToHistory(messages: Message[]): ChatLine[];
|
|
14
|
+
export interface ChatState {
|
|
15
|
+
/** Finalized lines — rendered in <Static> (no re-render, no flicker). */
|
|
16
|
+
history: ChatLine[];
|
|
17
|
+
/** In-flight assistant text being streamed, or null when idle. */
|
|
18
|
+
streaming: string | null;
|
|
19
|
+
}
|
|
20
|
+
export declare const initialChatState: ChatState;
|
|
21
|
+
export type ChatAction = {
|
|
22
|
+
type: 'user';
|
|
23
|
+
content: string;
|
|
24
|
+
} | {
|
|
25
|
+
type: 'system';
|
|
26
|
+
content: string;
|
|
27
|
+
} | {
|
|
28
|
+
type: 'stream';
|
|
29
|
+
chunk: string;
|
|
30
|
+
} | {
|
|
31
|
+
type: 'commit';
|
|
32
|
+
} | {
|
|
33
|
+
type: 'clear';
|
|
34
|
+
};
|
|
35
|
+
export declare function chatReducer(state: ChatState, action: ChatAction): ChatState;
|
|
36
|
+
export interface SlashCommand {
|
|
37
|
+
name: string;
|
|
38
|
+
args: string;
|
|
39
|
+
desc: string;
|
|
40
|
+
}
|
|
41
|
+
/** Slash commands offered in the Ink palette (mirrors the blessed TUI). */
|
|
42
|
+
export declare const SLASH_COMMANDS: readonly SlashCommand[];
|
|
43
|
+
export type ParsedInput = {
|
|
44
|
+
kind: 'chat';
|
|
45
|
+
text: string;
|
|
46
|
+
} | {
|
|
47
|
+
kind: 'command';
|
|
48
|
+
name: string;
|
|
49
|
+
args: string;
|
|
50
|
+
};
|
|
51
|
+
/** Classify a submitted input line as free chat or a slash command. */
|
|
52
|
+
export declare function parseInput(raw: string): ParsedInput | null;
|
|
53
|
+
/**
|
|
54
|
+
* Whether an adapter log line is internal loop chatter that shouldn't surface in
|
|
55
|
+
* the chat activity feed. Hides the "▸ API call #N" turns and the per-adapter
|
|
56
|
+
* "[GPT] N API calls, …" summary; real tool activity (🔧 read_file, edit
|
|
57
|
+
* results, errors) still shows. (INT-1813 follow-up)
|
|
58
|
+
*/
|
|
59
|
+
export declare function isActivityNoise(line: string): boolean;
|
|
60
|
+
/** Normalize a typed confirm answer to the PlanIO decision vocabulary. */
|
|
61
|
+
export declare function normalizeConfirm(input: string): 'yes' | 'no' | 'edit';
|
|
62
|
+
/**
|
|
63
|
+
* Mobile-SSH multibyte input mitigation (INT-1964, extended INT-2012). Some
|
|
64
|
+
* terminals deliver a multibyte keystroke as the character(s) doubled in one
|
|
65
|
+
* input event, so Hangul appears doubled while ASCII is fine. Two observed shapes:
|
|
66
|
+
*
|
|
67
|
+
* (A) one grapheme repeated N times — '이' → '이이' or '이이이'
|
|
68
|
+
* (B) each grapheme doubled in place — '이렇게' → '이이렇렇게게'
|
|
69
|
+
*
|
|
70
|
+
* Collapse both back to the intended text. Only NON-ASCII graphemes are touched;
|
|
71
|
+
* ASCII, single graphemes, odd-length mixed events, and differing graphemes pass
|
|
72
|
+
* through untouched, so normal typing is unaffected. The only false positive is
|
|
73
|
+
* pasting an exact run/pairing of identical multibyte characters (e.g. '각각'),
|
|
74
|
+
* which is vanishingly rare. (INT-1964 only handled shape A at exactly length 2.)
|
|
75
|
+
*/
|
|
76
|
+
export declare function dedupeDoubledGrapheme(input: string): string;
|
|
77
|
+
/** Wrap-around move of the palette selection index. Returns 0 for an empty list. (INT-1959) */
|
|
78
|
+
export declare function movePaletteSelection(current: number, delta: number, count: number): number;
|
|
79
|
+
/** Slash commands whose name prefix-matches the current input (palette). */
|
|
80
|
+
export declare function matchSlash(input: string): SlashCommand[];
|
|
81
|
+
//# sourceMappingURL=chatModel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatModel.d.ts","sourceRoot":"","sources":["../../src/tui/chatModel.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAEzD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,OAAO,EAAE,CAIhE;AAED,wEAAwE;AACxE,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,CAEjE;AAED,MAAM,WAAW,SAAS;IACxB,yEAAyE;IACzE,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,kEAAkE;IAClE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,eAAO,MAAM,gBAAgB,EAAE,SAA4C,CAAC;AAE5E,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAEtB,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,SAAS,CAe3E;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,2EAA2E;AAC3E,eAAO,MAAM,cAAc,EAAE,SAAS,YAAY,EAOjD,CAAC;AAEF,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpD,uEAAuE;AACvE,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAU1D;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGrD;AAED,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,MAAM,CAKrE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAuB3D;AAED,+FAA+F;AAC/F,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAG1F;AAED,4EAA4E;AAC5E,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,EAAE,CAIxD"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
// ============================================
|
|
2
|
+
// OpenSwarm - Chat model (EPIC INT-1813 S4 / INT-1937)
|
|
3
|
+
// Pure chat state + input parsing for the Ink Chat tab. No React/ink/network —
|
|
4
|
+
// the streaming reducer and slash parser are unit-tested; ChatPanel wires them
|
|
5
|
+
// to chatSession.callChatModel.
|
|
6
|
+
// ============================================
|
|
7
|
+
/**
|
|
8
|
+
* Convert chat history to persistable messages: only user/assistant turns are
|
|
9
|
+
* saved. System lines (slash-command output, UI notices) are transient and
|
|
10
|
+
* dropped — they aren't part of the conversation to resume. (INT-2014)
|
|
11
|
+
*/
|
|
12
|
+
export function historyToMessages(history) {
|
|
13
|
+
return history
|
|
14
|
+
.filter((l) => l.role === 'user' || l.role === 'assistant')
|
|
15
|
+
.map((l) => ({ role: l.role, content: l.content }));
|
|
16
|
+
}
|
|
17
|
+
/** Restore persisted messages back to chat history lines. (INT-2014) */
|
|
18
|
+
export function messagesToHistory(messages) {
|
|
19
|
+
return messages.map((m) => ({ role: m.role, content: m.content }));
|
|
20
|
+
}
|
|
21
|
+
export const initialChatState = { history: [], streaming: null };
|
|
22
|
+
export function chatReducer(state, action) {
|
|
23
|
+
switch (action.type) {
|
|
24
|
+
case 'user':
|
|
25
|
+
return { ...state, history: [...state.history, { role: 'user', content: action.content }] };
|
|
26
|
+
case 'system':
|
|
27
|
+
return { ...state, history: [...state.history, { role: 'system', content: action.content }] };
|
|
28
|
+
case 'stream':
|
|
29
|
+
return { ...state, streaming: (state.streaming ?? '') + action.chunk };
|
|
30
|
+
case 'commit':
|
|
31
|
+
return state.streaming === null
|
|
32
|
+
? state
|
|
33
|
+
: { history: [...state.history, { role: 'assistant', content: state.streaming }], streaming: null };
|
|
34
|
+
case 'clear':
|
|
35
|
+
return initialChatState;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/** Slash commands offered in the Ink palette (mirrors the blessed TUI). */
|
|
39
|
+
export const SLASH_COMMANDS = [
|
|
40
|
+
{ name: '/goal', args: '<goal>', desc: 'Set a goal & pursue it autonomously' },
|
|
41
|
+
{ name: '/plan', args: '<goal>', desc: 'Decompose a goal & dispatch to the loop' },
|
|
42
|
+
{ name: '/model', args: '', desc: 'Switch model (interactive)' },
|
|
43
|
+
{ name: '/provider', args: '', desc: 'Switch provider (interactive)' },
|
|
44
|
+
{ name: '/clear', args: '', desc: 'Clear the conversation' },
|
|
45
|
+
{ name: '/help', args: '', desc: 'Show all commands' },
|
|
46
|
+
];
|
|
47
|
+
/** Classify a submitted input line as free chat or a slash command. */
|
|
48
|
+
export function parseInput(raw) {
|
|
49
|
+
const t = raw.trim();
|
|
50
|
+
if (!t)
|
|
51
|
+
return null;
|
|
52
|
+
if (t.startsWith('/')) {
|
|
53
|
+
const sp = t.indexOf(' ');
|
|
54
|
+
return sp === -1
|
|
55
|
+
? { kind: 'command', name: t, args: '' }
|
|
56
|
+
: { kind: 'command', name: t.slice(0, sp), args: t.slice(sp + 1).trim() };
|
|
57
|
+
}
|
|
58
|
+
return { kind: 'chat', text: t };
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Whether an adapter log line is internal loop chatter that shouldn't surface in
|
|
62
|
+
* the chat activity feed. Hides the "▸ API call #N" turns and the per-adapter
|
|
63
|
+
* "[GPT] N API calls, …" summary; real tool activity (🔧 read_file, edit
|
|
64
|
+
* results, errors) still shows. (INT-1813 follow-up)
|
|
65
|
+
*/
|
|
66
|
+
export function isActivityNoise(line) {
|
|
67
|
+
const t = line.trim();
|
|
68
|
+
return /^▸\s*API call/i.test(t) || /\bAPI calls?\b,/i.test(t);
|
|
69
|
+
}
|
|
70
|
+
/** Normalize a typed confirm answer to the PlanIO decision vocabulary. */
|
|
71
|
+
export function normalizeConfirm(input) {
|
|
72
|
+
const t = input.trim().toLowerCase();
|
|
73
|
+
if (t === 'y' || t === 'yes')
|
|
74
|
+
return 'yes';
|
|
75
|
+
if (t === 'e' || t === 'edit')
|
|
76
|
+
return 'edit';
|
|
77
|
+
return 'no';
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Mobile-SSH multibyte input mitigation (INT-1964, extended INT-2012). Some
|
|
81
|
+
* terminals deliver a multibyte keystroke as the character(s) doubled in one
|
|
82
|
+
* input event, so Hangul appears doubled while ASCII is fine. Two observed shapes:
|
|
83
|
+
*
|
|
84
|
+
* (A) one grapheme repeated N times — '이' → '이이' or '이이이'
|
|
85
|
+
* (B) each grapheme doubled in place — '이렇게' → '이이렇렇게게'
|
|
86
|
+
*
|
|
87
|
+
* Collapse both back to the intended text. Only NON-ASCII graphemes are touched;
|
|
88
|
+
* ASCII, single graphemes, odd-length mixed events, and differing graphemes pass
|
|
89
|
+
* through untouched, so normal typing is unaffected. The only false positive is
|
|
90
|
+
* pasting an exact run/pairing of identical multibyte characters (e.g. '각각'),
|
|
91
|
+
* which is vanishingly rare. (INT-1964 only handled shape A at exactly length 2.)
|
|
92
|
+
*/
|
|
93
|
+
export function dedupeDoubledGrapheme(input) {
|
|
94
|
+
const g = Array.from(input);
|
|
95
|
+
if (g.length < 2)
|
|
96
|
+
return input;
|
|
97
|
+
// (A) a single non-ASCII grapheme repeated N times → one.
|
|
98
|
+
if ((g[0].codePointAt(0) ?? 0) > 0x7f && g.every((c) => c === g[0])) {
|
|
99
|
+
return g[0];
|
|
100
|
+
}
|
|
101
|
+
// (B) even-length event where every adjacent pair is the same non-ASCII
|
|
102
|
+
// grapheme → keep one of each pair.
|
|
103
|
+
if (g.length % 2 === 0) {
|
|
104
|
+
let paired = true;
|
|
105
|
+
for (let i = 0; i < g.length; i += 2) {
|
|
106
|
+
if (g[i] !== g[i + 1] || (g[i].codePointAt(0) ?? 0) <= 0x7f) {
|
|
107
|
+
paired = false;
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
if (paired)
|
|
112
|
+
return g.filter((_, i) => i % 2 === 0).join('');
|
|
113
|
+
}
|
|
114
|
+
return input;
|
|
115
|
+
}
|
|
116
|
+
/** Wrap-around move of the palette selection index. Returns 0 for an empty list. (INT-1959) */
|
|
117
|
+
export function movePaletteSelection(current, delta, count) {
|
|
118
|
+
if (count <= 0)
|
|
119
|
+
return 0;
|
|
120
|
+
return ((current + delta) % count + count) % count;
|
|
121
|
+
}
|
|
122
|
+
/** Slash commands whose name prefix-matches the current input (palette). */
|
|
123
|
+
export function matchSlash(input) {
|
|
124
|
+
if (!input.startsWith('/') || input.includes(' '))
|
|
125
|
+
return [];
|
|
126
|
+
const q = input.slice(1).toLowerCase();
|
|
127
|
+
return SLASH_COMMANDS.filter((c) => c.name.slice(1).toLowerCase().startsWith(q));
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=chatModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatModel.js","sourceRoot":"","sources":["../../src/tui/chatModel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { EventEmitter } from 'node:events';
|
|
2
|
+
import type { AuditArea } from '../../cli/reviewAudit.js';
|
|
3
|
+
export interface AuditBoardProps {
|
|
4
|
+
areas: AuditArea[];
|
|
5
|
+
concurrency: number;
|
|
6
|
+
/** Emits 'progress' (AuditProgress) as the fan-out advances. */
|
|
7
|
+
events: EventEmitter;
|
|
8
|
+
}
|
|
9
|
+
export declare function AuditBoard({ areas, concurrency, events }: AuditBoardProps): import("react").JSX.Element;
|
|
10
|
+
//# sourceMappingURL=AuditBoard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuditBoard.d.ts","sourceRoot":"","sources":["../../../src/tui/components/AuditBoard.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,OAAO,KAAK,EAAE,SAAS,EAAiB,MAAM,0BAA0B,CAAC;AASzE,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,gEAAgE;IAChE,MAAM,EAAE,YAAY,CAAC;CACtB;AAID,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,eAAe,+BAmEzE"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// AuditBoard — live multi-area board for `openswarm review --max` (INT-2006).
|
|
3
|
+
// Each in-flight reviewer subagent gets its own row (spinner + area + last tool
|
|
4
|
+
// line); finished areas roll up into a verdict tally. Showing only the running
|
|
5
|
+
// rows (≤ concurrency) keeps the board height stable no matter how many areas
|
|
6
|
+
// the codebase splits into. Drives off a progress EventEmitter so the pure
|
|
7
|
+
// orchestration (runMaxReview) stays ink-free.
|
|
8
|
+
import { Box, Text } from 'ink';
|
|
9
|
+
import { useState, useEffect } from 'react';
|
|
10
|
+
import { spinnerFrame } from '../loadingMessages.js';
|
|
11
|
+
import { theme } from '../theme.js';
|
|
12
|
+
const truncate = (s, n) => (s.length <= n ? s : `${s.slice(0, n - 1)}…`);
|
|
13
|
+
export function AuditBoard({ areas, concurrency, events }) {
|
|
14
|
+
const [tick, setTick] = useState(0);
|
|
15
|
+
const [statuses, setStatuses] = useState(() => Object.fromEntries(areas.map((a) => [a.label, { status: 'pending' }])));
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
const onProgress = (e) => {
|
|
18
|
+
setStatuses((prev) => {
|
|
19
|
+
const cur = prev[e.label] ?? { status: 'pending' };
|
|
20
|
+
let next;
|
|
21
|
+
if (e.type === 'start')
|
|
22
|
+
next = { ...cur, status: 'running' };
|
|
23
|
+
else if (e.type === 'log')
|
|
24
|
+
next = { ...cur, lastLog: e.line };
|
|
25
|
+
else if (e.type === 'done')
|
|
26
|
+
next = { ...cur, status: 'done', decision: e.decision };
|
|
27
|
+
else
|
|
28
|
+
next = { ...cur, status: 'error', lastLog: e.error };
|
|
29
|
+
return { ...prev, [e.label]: next };
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
events.on('progress', onProgress);
|
|
33
|
+
return () => {
|
|
34
|
+
events.off('progress', onProgress);
|
|
35
|
+
};
|
|
36
|
+
}, [events]);
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
const t = setInterval(() => setTick((x) => x + 1), 120);
|
|
39
|
+
return () => clearInterval(t);
|
|
40
|
+
}, []);
|
|
41
|
+
const entries = Object.values(statuses);
|
|
42
|
+
const done = entries.filter((s) => s.status === 'done' || s.status === 'error').length;
|
|
43
|
+
const running = Object.entries(statuses).filter(([, s]) => s.status === 'running');
|
|
44
|
+
const approved = entries.filter((s) => s.decision === 'approve').length;
|
|
45
|
+
const revised = entries.filter((s) => s.decision === 'revise').length;
|
|
46
|
+
const rejected = entries.filter((s) => s.decision === 'reject').length;
|
|
47
|
+
const failed = entries.filter((s) => s.status === 'error').length;
|
|
48
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { children: [_jsx(Text, { color: theme.accent, children: spinnerFrame(tick) }), _jsx(Text, { bold: true, children: ` Codebase audit · ${done}/${areas.length} areas · concurrency ${concurrency}` })] }), running.map(([label, s]) => (_jsxs(Text, { color: theme.dim, children: [' ', _jsx(Text, { color: theme.accent, children: spinnerFrame(tick) }), ` ${label}`, s.lastLog ? ` ${truncate(s.lastLog, 48)}` : ''] }, label))), _jsxs(Text, { color: theme.dim, children: [' ', _jsx(Text, { color: theme.ok, children: `✓ ${approved} done` }), ' · ', _jsx(Text, { color: theme.accentAlt, children: `✎ ${revised} revise` }), ' · ', _jsx(Text, { color: theme.err, children: `✗ ${rejected} reject` }), failed ? (_jsxs(Text, { children: [' · ', _jsx(Text, { color: theme.warn, children: `⚠ ${failed} failed` })] })) : null] })] }));
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=AuditBoard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuditBoard.js","sourceRoot":"","sources":["../../../src/tui/components/AuditBoard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface ChatInputProps {
|
|
2
|
+
value: string;
|
|
3
|
+
active: boolean;
|
|
4
|
+
busy?: boolean;
|
|
5
|
+
onChange: (value: string) => void;
|
|
6
|
+
onSubmit: (value: string) => void;
|
|
7
|
+
/** Command palette is open — ↑/↓ navigate, Enter/Tab select instead of submit. (INT-1959) */
|
|
8
|
+
paletteOpen?: boolean;
|
|
9
|
+
onPaletteMove?: (delta: number) => void;
|
|
10
|
+
onPaletteSelect?: () => void;
|
|
11
|
+
onPaletteClose?: () => void;
|
|
12
|
+
}
|
|
13
|
+
export declare function ChatInput({ value, active, busy, onChange, onSubmit, paletteOpen, onPaletteMove, onPaletteSelect, onPaletteClose, }: ChatInputProps): import("react").JSX.Element;
|
|
14
|
+
//# sourceMappingURL=ChatInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatInput.d.ts","sourceRoot":"","sources":["../../../src/tui/components/ChatInput.tsx"],"names":[],"mappings":"AAcA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,6FAA6F;IAC7F,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,aAAa,EACb,eAAe,EACf,cAAc,GACf,EAAE,cAAc,+BA6ChB"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// ChatInput — bordered prompt box, Claude-Code style (INT-1943).
|
|
3
|
+
// Controlled single-line input via useInput. Korean/IME caveat: terminals
|
|
4
|
+
// deliver committed code points, so typed/pasted Hangul appends fine; in-flight
|
|
5
|
+
// IME composition is terminal-dependent. Nav keys (Tab/arrows) are left to the
|
|
6
|
+
// App router; Enter submits, Backspace deletes.
|
|
7
|
+
import { Box, Text, useInput } from 'ink';
|
|
8
|
+
import Spinner from 'ink-spinner';
|
|
9
|
+
import { theme, ICON } from '../theme.js';
|
|
10
|
+
import { inputDebugEnabled, appendInputDebug } from '../inputDebug.js';
|
|
11
|
+
import { dedupeDoubledGrapheme } from '../chatModel.js';
|
|
12
|
+
// Read once at module load — toggling mid-session isn't a use case. (INT-1964)
|
|
13
|
+
const INPUT_DEBUG = inputDebugEnabled();
|
|
14
|
+
export function ChatInput({ value, active, busy, onChange, onSubmit, paletteOpen, onPaletteMove, onPaletteSelect, onPaletteClose, }) {
|
|
15
|
+
useInput((input, key) => {
|
|
16
|
+
// Diagnostics for mobile-SSH multibyte doubling (OPENSWARM_DEBUG_INPUT). (INT-1964)
|
|
17
|
+
if (INPUT_DEBUG)
|
|
18
|
+
appendInputDebug(input, key);
|
|
19
|
+
// When the palette is open it claims navigation + selection keys (INT-1959).
|
|
20
|
+
if (paletteOpen) {
|
|
21
|
+
if (key.upArrow)
|
|
22
|
+
return onPaletteMove?.(-1);
|
|
23
|
+
if (key.downArrow)
|
|
24
|
+
return onPaletteMove?.(1);
|
|
25
|
+
if (key.tab || key.return)
|
|
26
|
+
return onPaletteSelect?.();
|
|
27
|
+
if (key.escape)
|
|
28
|
+
return onPaletteClose?.();
|
|
29
|
+
}
|
|
30
|
+
if (key.return) {
|
|
31
|
+
onSubmit(value);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (key.backspace || key.delete) {
|
|
35
|
+
onChange(value.slice(0, -1));
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if (key.tab || key.leftArrow || key.rightArrow || key.upArrow || key.downArrow || key.escape)
|
|
39
|
+
return;
|
|
40
|
+
// dedupeDoubledGrapheme: mobile-SSH multibyte doubling mitigation (INT-1964).
|
|
41
|
+
if (input && !key.ctrl && !key.meta)
|
|
42
|
+
onChange(value + dedupeDoubledGrapheme(input));
|
|
43
|
+
}, { isActive: active && !busy });
|
|
44
|
+
return (_jsx(Box, { borderStyle: "round", borderColor: active ? theme.borderActive : theme.border, paddingX: 1, children: busy ? (_jsxs(Text, { color: theme.dim, children: [_jsx(Text, { color: theme.accent, children: _jsx(Spinner, { type: "dots" }) }), _jsx(Text, { children: ' working… (Esc to leave)' })] })) : (_jsxs(Box, { children: [_jsx(Text, { color: theme.accent, children: `${ICON.prompt} ` }), value ? _jsx(Text, { children: value }) : _jsx(Text, { color: theme.dim, children: 'type a message… / for commands' }), active ? _jsx(Text, { inverse: true, children: " " }) : null] })) }));
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=ChatInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatInput.js","sourceRoot":"","sources":["../../../src/tui/components/ChatInput.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ChatLine } from '../chatModel.js';
|
|
2
|
+
export interface ChatLogProps {
|
|
3
|
+
history: ChatLine[];
|
|
4
|
+
streaming: string | null;
|
|
5
|
+
/** Recent tool-activity lines shown under the in-flight reply. */
|
|
6
|
+
activity?: string[];
|
|
7
|
+
busy?: boolean;
|
|
8
|
+
/** Keep the last N messages on screen (bounds height in the full-screen layout). */
|
|
9
|
+
maxMessages?: number;
|
|
10
|
+
}
|
|
11
|
+
export declare function ChatLog({ history, streaming, activity, busy, maxMessages }: ChatLogProps): import("react").JSX.Element;
|
|
12
|
+
//# sourceMappingURL=ChatLog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatLog.d.ts","sourceRoot":"","sources":["../../../src/tui/components/ChatLog.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AA2ChD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,oFAAoF;IACpF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,OAAO,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,QAAa,EAAE,IAAI,EAAE,WAAgB,EAAE,EAAE,YAAY,+BAsBlG"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// ChatLog — Claude-Code-style conversation (INT-1943).
|
|
3
|
+
// Renders the recent message history (assistant text as markdown) plus a live
|
|
4
|
+
// area with the streaming reply, inline tool activity, and a spinner.
|
|
5
|
+
//
|
|
6
|
+
// NOTE: this deliberately does NOT use Ink's <Static>. <Static> prints items to
|
|
7
|
+
// the scrollback ABOVE the live region, which is incompatible with the
|
|
8
|
+
// full-screen alternate-screen buffer (fullscreen-ink) — the next full-frame
|
|
9
|
+
// render wipes them, so messages never accumulate. The reconciler already
|
|
10
|
+
// diff-renders, so a normal (windowed) map keeps history without flicker.
|
|
11
|
+
import { Box, Text } from 'ink';
|
|
12
|
+
import { renderMarkdown } from '../markdown.js';
|
|
13
|
+
import { theme, ICON } from '../theme.js';
|
|
14
|
+
import { WorkingIndicator } from './WorkingIndicator.js';
|
|
15
|
+
const ROLE_COLOR = {
|
|
16
|
+
user: theme.user,
|
|
17
|
+
assistant: theme.assistant,
|
|
18
|
+
system: theme.system,
|
|
19
|
+
};
|
|
20
|
+
const ROLE_LABEL = {
|
|
21
|
+
user: 'you',
|
|
22
|
+
assistant: 'openswarm',
|
|
23
|
+
system: 'system',
|
|
24
|
+
};
|
|
25
|
+
const ROLE_ICON = {
|
|
26
|
+
user: ICON.user,
|
|
27
|
+
assistant: ICON.assistant,
|
|
28
|
+
system: ICON.system,
|
|
29
|
+
};
|
|
30
|
+
// Cap the in-flight streaming preview so a long reply (or reasoning spill) can't
|
|
31
|
+
// fill the full-screen frame and push the input box off-screen. The finalized
|
|
32
|
+
// message renders in full once committed to history. (INT-2014 / INT-2013)
|
|
33
|
+
const STREAM_TAIL_LINES = 14;
|
|
34
|
+
function tailLines(text, n) {
|
|
35
|
+
const lines = text.split('\n');
|
|
36
|
+
return lines.length <= n ? text : `…\n${lines.slice(-n).join('\n')}`;
|
|
37
|
+
}
|
|
38
|
+
function Message({ line }) {
|
|
39
|
+
const body = line.role === 'assistant' ? renderMarkdown(line.content) : line.content;
|
|
40
|
+
return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { color: ROLE_COLOR[line.role], bold: true, children: `${ROLE_ICON[line.role]} ${ROLE_LABEL[line.role]}` }), _jsx(Box, { paddingLeft: 2, children: _jsx(Text, { children: body }) })] }));
|
|
41
|
+
}
|
|
42
|
+
export function ChatLog({ history, streaming, activity = [], busy, maxMessages = 40 }) {
|
|
43
|
+
const live = streaming !== null || busy;
|
|
44
|
+
const shown = history.slice(-maxMessages);
|
|
45
|
+
return (_jsxs(Box, { flexDirection: "column", children: [shown.map((line, i) => (_jsx(Message, { line: line }, history.length - shown.length + i))), live ? (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: theme.assistant, bold: true, children: `${ICON.assistant} ${ROLE_LABEL.assistant}` }), _jsxs(Box, { flexDirection: "column", paddingLeft: 2, children: [activity.slice(-5).map((line, i) => (_jsx(Text, { color: theme.dim, children: `${ICON.tool} ${line}` }, i))), streaming ? _jsx(Text, { children: tailLines(streaming, STREAM_TAIL_LINES) }) : null, busy ? _jsx(WorkingIndicator, {}) : null] })] })) : null] }));
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=ChatLog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatLog.js","sourceRoot":"","sources":["../../../src/tui/components/ChatLog.tsx"],"names":[],"mappings":";AAAA,uDAAuD;AACvD,8EAA8E;AAC9E,sEAAsE;AACtE,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,6EAA6E;AAC7E,0EAA0E;AAC1E,0EAA0E;AAC1E,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAEhC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,UAAU,GAAqC;IACnD,IAAI,EAAE,KAAK,CAAC,IAAI;IAChB,SAAS,EAAE,KAAK,CAAC,SAAS;IAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;CACrB,CAAC;AACF,MAAM,UAAU,GAAqC;IACnD,IAAI,EAAE,KAAK;IACX,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,QAAQ;CACjB,CAAC;AACF,MAAM,SAAS,GAAqC;IAClD,IAAI,EAAE,IAAI,CAAC,IAAI;IACf,SAAS,EAAE,IAAI,CAAC,SAAS;IACzB,MAAM,EAAE,IAAI,CAAC,MAAM;CACpB,CAAC;AAEF,iFAAiF;AACjF,8EAA8E;AAC9E,2EAA2E;AAC3E,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAE7B,SAAS,SAAS,CAAC,IAAY,EAAE,CAAS;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,OAAO,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACvE,CAAC;AAED,SAAS,OAAO,CAAC,EAAE,IAAI,EAAsB;IAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;IACrF,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,aACzC,KAAC,IAAI,IAAC,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,kBAAE,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAQ,EACpG,KAAC,GAAG,IAAC,WAAW,EAAE,CAAC,YACjB,KAAC,IAAI,cAAE,IAAI,GAAQ,GACf,IACF,CACP,CAAC;AACJ,CAAC;AAYD,MAAM,UAAU,OAAO,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,GAAG,EAAE,EAAE,IAAI,EAAE,WAAW,GAAG,EAAE,EAAgB;IACjG,MAAM,IAAI,GAAG,SAAS,KAAK,IAAI,IAAI,IAAI,CAAC;IACxC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC;IAC1C,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACxB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACtB,KAAC,OAAO,IAAyC,IAAI,EAAE,IAAI,IAA7C,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAgB,CAChE,CAAC,EACD,IAAI,CAAC,CAAC,CAAC,CACN,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,kBAAE,GAAG,IAAI,CAAC,SAAS,IAAI,UAAU,CAAC,SAAS,EAAE,GAAQ,EACvF,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAE,CAAC,aACvC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACnC,KAAC,IAAI,IAAS,KAAK,EAAE,KAAK,CAAC,GAAG,YAAG,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,IAA5C,CAAC,CAAmD,CAChE,CAAC,EACD,SAAS,CAAC,CAAC,CAAC,KAAC,IAAI,cAAE,SAAS,CAAC,SAAS,EAAE,iBAAiB,CAAC,GAAQ,CAAC,CAAC,CAAC,IAAI,EACzE,IAAI,CAAC,CAAC,CAAC,KAAC,gBAAgB,KAAG,CAAC,CAAC,CAAC,IAAI,IAC/B,IACF,CACP,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommandPalette.d.ts","sourceRoot":"","sources":["../../../src/tui/components/CommandPalette.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,wBAAgB,cAAc,CAAC,EAAE,OAAO,EAAE,aAAiB,EAAE,EAAE;IAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,sCAgBjH"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// CommandPalette — slash-command suggestions for the current input (S4).
|
|
3
|
+
// Interactive: the selected row (↑/↓) is highlighted; Enter/Tab completes it. (INT-1959)
|
|
4
|
+
import { Box, Text } from 'ink';
|
|
5
|
+
import { theme } from '../theme.js';
|
|
6
|
+
export function CommandPalette({ matches, selectedIndex = 0 }) {
|
|
7
|
+
if (matches.length === 0)
|
|
8
|
+
return null;
|
|
9
|
+
return (_jsx(Box, { flexDirection: "column", marginTop: 1, children: matches.map((c, i) => {
|
|
10
|
+
const selected = i === selectedIndex;
|
|
11
|
+
return (_jsxs(Text, { inverse: selected, children: [_jsx(Text, { color: theme.accent, children: `${selected ? '❯ ' : ' '}${c.name}` }), c.args ? _jsx(Text, { dimColor: true, children: ` ${c.args}` }) : null, _jsx(Text, { dimColor: true, children: ` ${c.desc}` })] }, c.name));
|
|
12
|
+
}) }));
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=CommandPalette.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommandPalette.js","sourceRoot":"","sources":["../../../src/tui/components/CommandPalette.tsx"],"names":[],"mappings":";AAAA,yEAAyE;AACzE,yFAAyF;AACzF,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,MAAM,UAAU,cAAc,CAAC,EAAE,OAAO,EAAE,aAAa,GAAG,CAAC,EAAuD;IAChH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,CACL,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,YACrC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACpB,MAAM,QAAQ,GAAG,CAAC,KAAK,aAAa,CAAC;YACrC,OAAO,CACL,MAAC,IAAI,IAAc,OAAO,EAAE,QAAQ,aAClC,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,MAAM,YAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,GAAQ,EACvE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,QAAQ,kBAAE,IAAI,CAAC,CAAC,IAAI,EAAE,GAAQ,CAAC,CAAC,CAAC,IAAI,EACrD,KAAC,IAAI,IAAC,QAAQ,kBAAE,KAAK,CAAC,CAAC,IAAI,EAAE,GAAQ,KAH5B,CAAC,CAAC,IAAI,CAIV,CACR,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface ContextBarProps {
|
|
2
|
+
version?: string;
|
|
3
|
+
provider?: string;
|
|
4
|
+
model?: string;
|
|
5
|
+
cwd?: string;
|
|
6
|
+
branch?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function ContextBar({ version, provider, model, cwd, branch }: ContextBarProps): import("react").JSX.Element;
|
|
9
|
+
//# sourceMappingURL=ContextBar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContextBar.d.ts","sourceRoot":"","sources":["../../../src/tui/components/ContextBar.tsx"],"names":[],"mappings":"AAOA,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,eAAe,+BAkBpF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// ContextBar — top line: gradient wordmark + provider/model · cwd · git branch
|
|
3
|
+
// (INT-1943). Replaces the plain StatusBar with a Claude-Code-style header.
|
|
4
|
+
import { Box, Text } from 'ink';
|
|
5
|
+
import Gradient from 'ink-gradient';
|
|
6
|
+
import { basename } from 'node:path';
|
|
7
|
+
import { theme, ICON, LOGO_GRADIENT } from '../theme.js';
|
|
8
|
+
export function ContextBar({ version, provider, model, cwd, branch }) {
|
|
9
|
+
const right = [
|
|
10
|
+
provider ? (model ? `${provider}:${model}` : provider) : null,
|
|
11
|
+
cwd ? basename(cwd) : null,
|
|
12
|
+
branch ? `${ICON.git}${branch}` : null,
|
|
13
|
+
]
|
|
14
|
+
.filter(Boolean)
|
|
15
|
+
.join(' · ');
|
|
16
|
+
return (_jsxs(Box, { justifyContent: "space-between", children: [_jsxs(Box, { children: [_jsx(Gradient, { colors: LOGO_GRADIENT, children: "OpenSwarm" }), version ? _jsx(Text, { color: theme.dim, children: ` v${version}` }) : null] }), right ? _jsx(Text, { color: theme.dim, children: right }) : null] }));
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=ContextBar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContextBar.js","sourceRoot":"","sources":["../../../src/tui/components/ContextBar.tsx"],"names":[],"mappings":";AAAA,+EAA+E;AAC/E,4EAA4E;AAC5E,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,QAAQ,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAUzD,MAAM,UAAU,UAAU,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAmB;IACnF,MAAM,KAAK,GAAG;QACZ,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;QAC7D,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;QAC1B,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI;KACvC;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,OAAO,CAAC,CAAC;IAEjB,OAAO,CACL,MAAC,GAAG,IAAC,cAAc,EAAC,eAAe,aACjC,MAAC,GAAG,eACF,KAAC,QAAQ,IAAC,MAAM,EAAE,aAAa,0BAAsB,EACpD,OAAO,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,GAAG,YAAG,KAAK,OAAO,EAAE,GAAQ,CAAC,CAAC,CAAC,IAAI,IAC7D,EACL,KAAK,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,GAAG,YAAG,KAAK,GAAQ,CAAC,CAAC,CAAC,IAAI,IAClD,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../../src/tui/components/DataTable.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,WAAW,cAAe,SAAQ,KAAK;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,cAAc,+BAgBjE"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// DataTable — minimal column-aligned table for the monitor tabs (S6).
|
|
3
|
+
// Hand-rolled (no ink-table) to avoid peer-version risk on ink 7 / react 19.
|
|
4
|
+
import { Box, Text } from 'ink';
|
|
5
|
+
export function DataTable({ columns, rows, empty }) {
|
|
6
|
+
if (rows.length === 0) {
|
|
7
|
+
return _jsx(Text, { dimColor: true, children: empty ?? '(no data)' });
|
|
8
|
+
}
|
|
9
|
+
const widths = columns.map((c, i) => Math.max(c.length, ...rows.map((r) => (r[i] ?? '').length)));
|
|
10
|
+
const fmt = (cells) => cells.map((cell, i) => (cell ?? '').padEnd(widths[i])).join(' ');
|
|
11
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, children: fmt(columns) }), rows.map((r, i) => (_jsx(Text, { children: fmt(r) }, i)))] }));
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=DataTable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataTable.js","sourceRoot":"","sources":["../../../src/tui/components/DataTable.tsx"],"names":[],"mappings":";AAAA,sEAAsE;AACtE,6EAA6E;AAC7E,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAOhC,MAAM,UAAU,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAkB;IAChE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,KAAC,IAAI,IAAC,QAAQ,kBAAE,KAAK,IAAI,WAAW,GAAQ,CAAC;IACtD,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAClC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAC5D,CAAC;IACF,MAAM,GAAG,GAAG,CAAC,KAAe,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnG,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,IAAI,IAAC,IAAI,kBAAE,GAAG,CAAC,OAAO,CAAC,GAAQ,EAC/B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAClB,KAAC,IAAI,cAAU,GAAG,CAAC,CAAC,CAAC,IAAV,CAAC,CAAiB,CAC9B,CAAC,IACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HelpBar.d.ts","sourceRoot":"","sources":["../../../src/tui/components/HelpBar.tsx"],"names":[],"mappings":"AAIA,wBAAgB,OAAO,gCAOtB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// HelpBar — bottom hint strip (INT-1943). Slash commands + nav, themed dim.
|
|
3
|
+
import { Box, Text } from 'ink';
|
|
4
|
+
import { theme } from '../theme.js';
|
|
5
|
+
export function HelpBar() {
|
|
6
|
+
return (_jsxs(Box, { children: [_jsx(Text, { color: theme.accent, children: "/plan /goal /model" }), _jsx(Text, { color: theme.dim, children: ' · Tab: panels · ↑↓ history · ^C quit' })] }));
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=HelpBar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HelpBar.js","sourceRoot":"","sources":["../../../src/tui/components/HelpBar.tsx"],"names":[],"mappings":";AAAA,4EAA4E;AAC5E,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,MAAM,UAAU,OAAO;IACrB,OAAO,CACL,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,MAAM,mCAA2B,EACpD,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,GAAG,YAAG,mDAAmD,GAAQ,IAChF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LiveLog.d.ts","sourceRoot":"","sources":["../../../src/tui/components/LiveLog.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,OAAO,CAAC,EAAE,IAAI,EAAE,GAAQ,EAAE,EAAE,YAAY,+BAYvD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// LiveLog — recent daemon log lines (EPIC INT-1813 S5). Each line is syntax-
|
|
3
|
+
// highlighted via LogLine (stage/issue/worktree/code/level colors). (INT-1974)
|
|
4
|
+
import { Box, Text } from 'ink';
|
|
5
|
+
import { LogLine } from './LogLine.js';
|
|
6
|
+
export function LiveLog({ logs, max = 12 }) {
|
|
7
|
+
const shown = logs.slice(-max);
|
|
8
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, children: "Live log" }), shown.length === 0 ? (_jsx(Text, { dimColor: true, children: "(no log output yet)" })) : (shown.map((line, i) => _jsx(LogLine, { line: line }, i)))] }));
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=LiveLog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LiveLog.js","sourceRoot":"","sources":["../../../src/tui/components/LiveLog.tsx"],"names":[],"mappings":";AAAA,6EAA6E;AAC7E,+EAA+E;AAC/E,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAOvC,MAAM,UAAU,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,GAAG,EAAE,EAAgB;IACtD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/B,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,IAAI,IAAC,IAAI,+BAAgB,EACzB,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACpB,KAAC,IAAI,IAAC,QAAQ,0CAA2B,CAC1C,CAAC,CAAC,CAAC,CACF,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,KAAC,OAAO,IAAS,IAAI,EAAE,IAAI,IAAb,CAAC,CAAgB,CAAC,CACxD,IACG,CACP,CAAC;AACJ,CAAC"}
|