wiggum-cli 0.12.0 → 0.13.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/dist/ai/agents/codebase-analyst.d.ts +0 -1
- package/dist/ai/agents/codebase-analyst.js +0 -1
- package/dist/ai/agents/codebase-analyzer.d.ts +0 -1
- package/dist/ai/agents/codebase-analyzer.js +0 -1
- package/dist/ai/agents/context-enricher.d.ts +0 -1
- package/dist/ai/agents/context-enricher.js +0 -1
- package/dist/ai/agents/evaluator-optimizer.d.ts +0 -1
- package/dist/ai/agents/evaluator-optimizer.js +0 -1
- package/dist/ai/agents/index.d.ts +0 -1
- package/dist/ai/agents/index.js +0 -1
- package/dist/ai/agents/mcp-detector.d.ts +0 -1
- package/dist/ai/agents/mcp-detector.js +0 -1
- package/dist/ai/agents/orchestrator.d.ts +0 -1
- package/dist/ai/agents/orchestrator.js +0 -1
- package/dist/ai/agents/planning-orchestrator.d.ts +0 -1
- package/dist/ai/agents/planning-orchestrator.js +0 -1
- package/dist/ai/agents/stack-researcher.d.ts +0 -1
- package/dist/ai/agents/stack-researcher.js +0 -1
- package/dist/ai/agents/stack-utils.d.ts +0 -1
- package/dist/ai/agents/stack-utils.js +0 -1
- package/dist/ai/agents/synthesis-agent.d.ts +0 -1
- package/dist/ai/agents/synthesis-agent.js +0 -1
- package/dist/ai/agents/tech-researcher.d.ts +0 -1
- package/dist/ai/agents/tech-researcher.js +0 -1
- package/dist/ai/agents/types.d.ts +0 -1
- package/dist/ai/agents/types.js +0 -1
- package/dist/ai/conversation/conversation-manager.d.ts +0 -1
- package/dist/ai/conversation/conversation-manager.js +0 -1
- package/dist/ai/conversation/index.d.ts +0 -1
- package/dist/ai/conversation/index.js +0 -1
- package/dist/ai/conversation/interview-tools.d.ts +0 -1
- package/dist/ai/conversation/interview-tools.js +0 -1
- package/dist/ai/conversation/spec-generator.d.ts +0 -1
- package/dist/ai/conversation/spec-generator.js +0 -1
- package/dist/ai/conversation/url-fetcher.d.ts +0 -1
- package/dist/ai/conversation/url-fetcher.js +0 -1
- package/dist/ai/enhancer.d.ts +0 -1
- package/dist/ai/enhancer.js +0 -1
- package/dist/ai/index.d.ts +0 -1
- package/dist/ai/index.js +0 -1
- package/dist/ai/prompts.d.ts +0 -1
- package/dist/ai/prompts.js +0 -1
- package/dist/ai/providers.d.ts +0 -1
- package/dist/ai/providers.js +0 -1
- package/dist/ai/tools/context7.d.ts +0 -1
- package/dist/ai/tools/context7.js +0 -1
- package/dist/ai/tools/index.d.ts +0 -1
- package/dist/ai/tools/index.js +0 -1
- package/dist/ai/tools/tavily.d.ts +0 -1
- package/dist/ai/tools/tavily.js +0 -1
- package/dist/ai/tools.d.ts +0 -1
- package/dist/ai/tools.js +0 -1
- package/dist/commands/config.d.ts +0 -1
- package/dist/commands/config.js +0 -1
- package/dist/commands/init.d.ts +0 -1
- package/dist/commands/init.js +0 -1
- package/dist/commands/monitor.d.ts +0 -1
- package/dist/commands/monitor.js +0 -1
- package/dist/commands/new.d.ts +0 -1
- package/dist/commands/new.js +0 -1
- package/dist/commands/run.d.ts +0 -1
- package/dist/commands/run.js +0 -1
- package/dist/context/convert.d.ts +0 -1
- package/dist/context/convert.js +0 -1
- package/dist/context/index.d.ts +0 -1
- package/dist/context/index.js +0 -1
- package/dist/context/storage.d.ts +0 -1
- package/dist/context/storage.js +0 -1
- package/dist/context/types.d.ts +0 -1
- package/dist/context/types.js +0 -1
- package/dist/generator/config.d.ts +0 -1
- package/dist/generator/config.js +0 -1
- package/dist/generator/index.d.ts +0 -1
- package/dist/generator/index.js +0 -1
- package/dist/generator/templates.d.ts +0 -1
- package/dist/generator/templates.js +0 -1
- package/dist/generator/writer.d.ts +0 -1
- package/dist/generator/writer.js +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +7 -7
- package/dist/repl/command-parser.d.ts +0 -1
- package/dist/repl/command-parser.js +0 -1
- package/dist/repl/index.d.ts +0 -1
- package/dist/repl/index.js +0 -1
- package/dist/repl/session-state.d.ts +0 -1
- package/dist/repl/session-state.js +0 -1
- package/dist/scanner/detectors/core/framework.d.ts +0 -1
- package/dist/scanner/detectors/core/framework.js +0 -1
- package/dist/scanner/detectors/core/packageManager.d.ts +0 -1
- package/dist/scanner/detectors/core/packageManager.js +0 -1
- package/dist/scanner/detectors/core/styling.d.ts +0 -1
- package/dist/scanner/detectors/core/styling.js +0 -1
- package/dist/scanner/detectors/core/testing.d.ts +0 -1
- package/dist/scanner/detectors/core/testing.js +0 -1
- package/dist/scanner/detectors/data/api.d.ts +0 -1
- package/dist/scanner/detectors/data/api.js +0 -1
- package/dist/scanner/detectors/data/database.d.ts +0 -1
- package/dist/scanner/detectors/data/database.js +0 -1
- package/dist/scanner/detectors/data/orm.d.ts +0 -1
- package/dist/scanner/detectors/data/orm.js +0 -1
- package/dist/scanner/detectors/frontend/formHandling.d.ts +0 -1
- package/dist/scanner/detectors/frontend/formHandling.js +0 -1
- package/dist/scanner/detectors/frontend/stateManagement.d.ts +0 -1
- package/dist/scanner/detectors/frontend/stateManagement.js +0 -1
- package/dist/scanner/detectors/frontend/uiComponents.d.ts +0 -1
- package/dist/scanner/detectors/frontend/uiComponents.js +0 -1
- package/dist/scanner/detectors/infra/deployment.d.ts +0 -1
- package/dist/scanner/detectors/infra/deployment.js +0 -1
- package/dist/scanner/detectors/infra/monorepo.d.ts +0 -1
- package/dist/scanner/detectors/infra/monorepo.js +0 -1
- package/dist/scanner/detectors/mcp/mcpProject.d.ts +0 -1
- package/dist/scanner/detectors/mcp/mcpProject.js +0 -1
- package/dist/scanner/detectors/mcp/mcpServers.d.ts +0 -1
- package/dist/scanner/detectors/mcp/mcpServers.js +0 -1
- package/dist/scanner/detectors/services/analytics.d.ts +0 -1
- package/dist/scanner/detectors/services/analytics.js +0 -1
- package/dist/scanner/detectors/services/auth.d.ts +0 -1
- package/dist/scanner/detectors/services/auth.js +0 -1
- package/dist/scanner/detectors/services/email.d.ts +0 -1
- package/dist/scanner/detectors/services/email.js +0 -1
- package/dist/scanner/detectors/services/payments.d.ts +0 -1
- package/dist/scanner/detectors/services/payments.js +0 -1
- package/dist/scanner/detectors/utils.d.ts +0 -1
- package/dist/scanner/detectors/utils.js +0 -1
- package/dist/scanner/index.d.ts +0 -1
- package/dist/scanner/index.js +0 -1
- package/dist/scanner/registry.d.ts +0 -1
- package/dist/scanner/registry.js +0 -1
- package/dist/scanner/types.d.ts +0 -1
- package/dist/scanner/types.js +0 -1
- package/dist/tui/app.d.ts +12 -23
- package/dist/tui/app.js +130 -315
- package/dist/tui/components/ActionOutput.d.ts +0 -1
- package/dist/tui/components/ActionOutput.js +0 -1
- package/dist/tui/components/AppShell.d.ts +47 -0
- package/dist/tui/components/AppShell.js +19 -0
- package/dist/tui/components/ChatInput.d.ts +0 -1
- package/dist/tui/components/ChatInput.js +0 -1
- package/dist/tui/components/CommandDropdown.d.ts +0 -1
- package/dist/tui/components/CommandDropdown.js +0 -1
- package/dist/tui/components/Confirm.d.ts +0 -1
- package/dist/tui/components/Confirm.js +0 -1
- package/dist/tui/components/ErrorCard.d.ts +0 -1
- package/dist/tui/components/ErrorCard.js +0 -1
- package/dist/tui/components/FooterStatusBar.d.ts +0 -1
- package/dist/tui/components/FooterStatusBar.js +2 -4
- package/dist/tui/components/HeaderContent.d.ts +28 -0
- package/dist/tui/components/HeaderContent.js +16 -0
- package/dist/tui/components/MessageList.d.ts +9 -8
- package/dist/tui/components/MessageList.js +23 -18
- package/dist/tui/components/MultiSelect.d.ts +0 -1
- package/dist/tui/components/MultiSelect.js +0 -1
- package/dist/tui/components/PasswordInput.d.ts +0 -1
- package/dist/tui/components/PasswordInput.js +0 -1
- package/dist/tui/components/PhaseHeader.d.ts +0 -1
- package/dist/tui/components/PhaseHeader.js +0 -1
- package/dist/tui/components/RunCompletionSummary.d.ts +22 -0
- package/dist/tui/components/RunCompletionSummary.js +23 -0
- package/dist/tui/components/Select.d.ts +0 -1
- package/dist/tui/components/Select.js +0 -1
- package/dist/tui/components/SpecCompletionSummary.d.ts +47 -0
- package/dist/tui/components/SpecCompletionSummary.js +124 -0
- package/dist/tui/components/StatusLine.d.ts +0 -1
- package/dist/tui/components/StatusLine.js +0 -1
- package/dist/tui/components/StreamingText.d.ts +0 -1
- package/dist/tui/components/StreamingText.js +0 -1
- package/dist/tui/components/TipsBar.d.ts +24 -0
- package/dist/tui/components/TipsBar.js +23 -0
- package/dist/tui/components/ToolCallCard.d.ts +0 -1
- package/dist/tui/components/ToolCallCard.js +0 -1
- package/dist/tui/components/WiggumBanner.d.ts +0 -1
- package/dist/tui/components/WiggumBanner.js +8 -4
- package/dist/tui/components/WorkingIndicator.d.ts +0 -1
- package/dist/tui/components/WorkingIndicator.js +0 -1
- package/dist/tui/components/index.d.ts +0 -1
- package/dist/tui/components/index.js +0 -1
- package/dist/tui/hooks/index.d.ts +0 -1
- package/dist/tui/hooks/index.js +0 -1
- package/dist/tui/hooks/useBackgroundRuns.d.ts +52 -0
- package/dist/tui/hooks/useBackgroundRuns.js +121 -0
- package/dist/tui/hooks/useCommandHistory.d.ts +0 -1
- package/dist/tui/hooks/useCommandHistory.js +0 -1
- package/dist/tui/hooks/useInit.d.ts +0 -1
- package/dist/tui/hooks/useInit.js +0 -1
- package/dist/tui/hooks/useSpecGenerator.d.ts +0 -1
- package/dist/tui/hooks/useSpecGenerator.js +0 -1
- package/dist/tui/hooks/useSync.d.ts +0 -1
- package/dist/tui/hooks/useSync.js +0 -1
- package/dist/tui/index.d.ts +0 -1
- package/dist/tui/index.js +0 -1
- package/dist/tui/orchestration/index.d.ts +0 -1
- package/dist/tui/orchestration/index.js +0 -1
- package/dist/tui/orchestration/interview-orchestrator.d.ts +0 -1
- package/dist/tui/orchestration/interview-orchestrator.js +1 -2
- package/dist/tui/screens/InitScreen.d.ts +13 -9
- package/dist/tui/screens/InitScreen.js +86 -88
- package/dist/tui/screens/InterviewScreen.d.ts +11 -9
- package/dist/tui/screens/InterviewScreen.js +145 -100
- package/dist/tui/screens/MainShell.d.ts +13 -13
- package/dist/tui/screens/MainShell.js +65 -70
- package/dist/tui/screens/RunScreen.d.ts +17 -2
- package/dist/tui/screens/RunScreen.js +235 -81
- package/dist/tui/screens/index.d.ts +0 -3
- package/dist/tui/screens/index.js +0 -2
- package/dist/tui/theme.d.ts +0 -1
- package/dist/tui/theme.js +0 -1
- package/dist/tui/types/interview.d.ts +0 -1
- package/dist/tui/types/interview.js +0 -1
- package/dist/tui/utils/input-utils.d.ts +0 -1
- package/dist/tui/utils/input-utils.js +0 -1
- package/dist/tui/utils/loop-status.d.ts +22 -4
- package/dist/tui/utils/loop-status.js +65 -16
- package/dist/utils/colors.d.ts +0 -1
- package/dist/utils/colors.js +0 -1
- package/dist/utils/config.d.ts +0 -1
- package/dist/utils/config.js +0 -1
- package/dist/utils/env.d.ts +0 -1
- package/dist/utils/env.js +0 -1
- package/dist/utils/header.d.ts +0 -1
- package/dist/utils/header.js +0 -1
- package/dist/utils/json-repair.d.ts +0 -1
- package/dist/utils/json-repair.js +0 -1
- package/dist/utils/logger.d.ts +0 -1
- package/dist/utils/logger.js +0 -1
- package/dist/utils/spinner.d.ts +0 -1
- package/dist/utils/spinner.js +0 -1
- package/dist/utils/tracing.d.ts +0 -1
- package/dist/utils/tracing.js +0 -1
- package/dist/utils/tui.d.ts +0 -1
- package/dist/utils/tui.js +0 -1
- package/dist/utils/update-check.d.ts +0 -1
- package/dist/utils/update-check.js +0 -1
- package/package.json +6 -4
- package/CONTRIBUTING.md +0 -162
- package/dist/__test-utils__/fixtures.d.ts +0 -17
- package/dist/__test-utils__/fixtures.d.ts.map +0 -1
- package/dist/__test-utils__/fixtures.js +0 -32
- package/dist/__test-utils__/fixtures.js.map +0 -1
- package/dist/__test-utils__/ink-helpers.d.ts +0 -43
- package/dist/__test-utils__/ink-helpers.d.ts.map +0 -1
- package/dist/__test-utils__/ink-helpers.js +0 -62
- package/dist/__test-utils__/ink-helpers.js.map +0 -1
- package/dist/__test-utils__/mock-ai.d.ts +0 -99
- package/dist/__test-utils__/mock-ai.d.ts.map +0 -1
- package/dist/__test-utils__/mock-ai.js +0 -75
- package/dist/__test-utils__/mock-ai.js.map +0 -1
- package/dist/__test-utils__/mock-tracing.d.ts +0 -18
- package/dist/__test-utils__/mock-tracing.d.ts.map +0 -1
- package/dist/__test-utils__/mock-tracing.js +0 -24
- package/dist/__test-utils__/mock-tracing.js.map +0 -1
- package/dist/__test-utils__/setup.d.ts +0 -8
- package/dist/__test-utils__/setup.d.ts.map +0 -1
- package/dist/__test-utils__/setup.js +0 -21
- package/dist/__test-utils__/setup.js.map +0 -1
- package/dist/ai/agents/codebase-analyst.d.ts.map +0 -1
- package/dist/ai/agents/codebase-analyst.js.map +0 -1
- package/dist/ai/agents/codebase-analyzer.d.ts.map +0 -1
- package/dist/ai/agents/codebase-analyzer.js.map +0 -1
- package/dist/ai/agents/context-enricher.d.ts.map +0 -1
- package/dist/ai/agents/context-enricher.js.map +0 -1
- package/dist/ai/agents/evaluator-optimizer.d.ts.map +0 -1
- package/dist/ai/agents/evaluator-optimizer.js.map +0 -1
- package/dist/ai/agents/index.d.ts.map +0 -1
- package/dist/ai/agents/index.js.map +0 -1
- package/dist/ai/agents/mcp-detector.d.ts.map +0 -1
- package/dist/ai/agents/mcp-detector.js.map +0 -1
- package/dist/ai/agents/orchestrator.d.ts.map +0 -1
- package/dist/ai/agents/orchestrator.js.map +0 -1
- package/dist/ai/agents/planning-orchestrator.d.ts.map +0 -1
- package/dist/ai/agents/planning-orchestrator.js.map +0 -1
- package/dist/ai/agents/stack-researcher.d.ts.map +0 -1
- package/dist/ai/agents/stack-researcher.js.map +0 -1
- package/dist/ai/agents/stack-utils.d.ts.map +0 -1
- package/dist/ai/agents/stack-utils.js.map +0 -1
- package/dist/ai/agents/synthesis-agent.d.ts.map +0 -1
- package/dist/ai/agents/synthesis-agent.js.map +0 -1
- package/dist/ai/agents/tech-researcher.d.ts.map +0 -1
- package/dist/ai/agents/tech-researcher.js.map +0 -1
- package/dist/ai/agents/types.d.ts.map +0 -1
- package/dist/ai/agents/types.js.map +0 -1
- package/dist/ai/conversation/conversation-manager.d.ts.map +0 -1
- package/dist/ai/conversation/conversation-manager.js.map +0 -1
- package/dist/ai/conversation/index.d.ts.map +0 -1
- package/dist/ai/conversation/index.js.map +0 -1
- package/dist/ai/conversation/interview-tools.d.ts.map +0 -1
- package/dist/ai/conversation/interview-tools.js.map +0 -1
- package/dist/ai/conversation/spec-generator.d.ts.map +0 -1
- package/dist/ai/conversation/spec-generator.js.map +0 -1
- package/dist/ai/conversation/url-fetcher.d.ts.map +0 -1
- package/dist/ai/conversation/url-fetcher.js.map +0 -1
- package/dist/ai/enhancer.d.ts.map +0 -1
- package/dist/ai/enhancer.js.map +0 -1
- package/dist/ai/index.d.ts.map +0 -1
- package/dist/ai/index.js.map +0 -1
- package/dist/ai/prompts.d.ts.map +0 -1
- package/dist/ai/prompts.js.map +0 -1
- package/dist/ai/providers.d.ts.map +0 -1
- package/dist/ai/providers.js.map +0 -1
- package/dist/ai/tools/context7.d.ts.map +0 -1
- package/dist/ai/tools/context7.js.map +0 -1
- package/dist/ai/tools/index.d.ts.map +0 -1
- package/dist/ai/tools/index.js.map +0 -1
- package/dist/ai/tools/tavily.d.ts.map +0 -1
- package/dist/ai/tools/tavily.js.map +0 -1
- package/dist/ai/tools.d.ts.map +0 -1
- package/dist/ai/tools.js.map +0 -1
- package/dist/commands/config.d.ts.map +0 -1
- package/dist/commands/config.js.map +0 -1
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/monitor.d.ts.map +0 -1
- package/dist/commands/monitor.js.map +0 -1
- package/dist/commands/new.d.ts.map +0 -1
- package/dist/commands/new.js.map +0 -1
- package/dist/commands/run.d.ts.map +0 -1
- package/dist/commands/run.js.map +0 -1
- package/dist/context/convert.d.ts.map +0 -1
- package/dist/context/convert.js.map +0 -1
- package/dist/context/index.d.ts.map +0 -1
- package/dist/context/index.js.map +0 -1
- package/dist/context/storage.d.ts.map +0 -1
- package/dist/context/storage.js.map +0 -1
- package/dist/context/types.d.ts.map +0 -1
- package/dist/context/types.js.map +0 -1
- package/dist/generator/config.d.ts.map +0 -1
- package/dist/generator/config.js.map +0 -1
- package/dist/generator/index.d.ts.map +0 -1
- package/dist/generator/index.js.map +0 -1
- package/dist/generator/templates.d.ts.map +0 -1
- package/dist/generator/templates.js.map +0 -1
- package/dist/generator/writer.d.ts.map +0 -1
- package/dist/generator/writer.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/repl/command-parser.d.ts.map +0 -1
- package/dist/repl/command-parser.js.map +0 -1
- package/dist/repl/index.d.ts.map +0 -1
- package/dist/repl/index.js.map +0 -1
- package/dist/repl/session-state.d.ts.map +0 -1
- package/dist/repl/session-state.js.map +0 -1
- package/dist/scanner/detectors/core/framework.d.ts.map +0 -1
- package/dist/scanner/detectors/core/framework.js.map +0 -1
- package/dist/scanner/detectors/core/packageManager.d.ts.map +0 -1
- package/dist/scanner/detectors/core/packageManager.js.map +0 -1
- package/dist/scanner/detectors/core/styling.d.ts.map +0 -1
- package/dist/scanner/detectors/core/styling.js.map +0 -1
- package/dist/scanner/detectors/core/testing.d.ts.map +0 -1
- package/dist/scanner/detectors/core/testing.js.map +0 -1
- package/dist/scanner/detectors/data/api.d.ts.map +0 -1
- package/dist/scanner/detectors/data/api.js.map +0 -1
- package/dist/scanner/detectors/data/database.d.ts.map +0 -1
- package/dist/scanner/detectors/data/database.js.map +0 -1
- package/dist/scanner/detectors/data/orm.d.ts.map +0 -1
- package/dist/scanner/detectors/data/orm.js.map +0 -1
- package/dist/scanner/detectors/frontend/formHandling.d.ts.map +0 -1
- package/dist/scanner/detectors/frontend/formHandling.js.map +0 -1
- package/dist/scanner/detectors/frontend/stateManagement.d.ts.map +0 -1
- package/dist/scanner/detectors/frontend/stateManagement.js.map +0 -1
- package/dist/scanner/detectors/frontend/uiComponents.d.ts.map +0 -1
- package/dist/scanner/detectors/frontend/uiComponents.js.map +0 -1
- package/dist/scanner/detectors/infra/deployment.d.ts.map +0 -1
- package/dist/scanner/detectors/infra/deployment.js.map +0 -1
- package/dist/scanner/detectors/infra/monorepo.d.ts.map +0 -1
- package/dist/scanner/detectors/infra/monorepo.js.map +0 -1
- package/dist/scanner/detectors/mcp/mcpProject.d.ts.map +0 -1
- package/dist/scanner/detectors/mcp/mcpProject.js.map +0 -1
- package/dist/scanner/detectors/mcp/mcpServers.d.ts.map +0 -1
- package/dist/scanner/detectors/mcp/mcpServers.js.map +0 -1
- package/dist/scanner/detectors/services/analytics.d.ts.map +0 -1
- package/dist/scanner/detectors/services/analytics.js.map +0 -1
- package/dist/scanner/detectors/services/auth.d.ts.map +0 -1
- package/dist/scanner/detectors/services/auth.js.map +0 -1
- package/dist/scanner/detectors/services/email.d.ts.map +0 -1
- package/dist/scanner/detectors/services/email.js.map +0 -1
- package/dist/scanner/detectors/services/payments.d.ts.map +0 -1
- package/dist/scanner/detectors/services/payments.js.map +0 -1
- package/dist/scanner/detectors/utils.d.ts.map +0 -1
- package/dist/scanner/detectors/utils.js.map +0 -1
- package/dist/scanner/index.d.ts.map +0 -1
- package/dist/scanner/index.js.map +0 -1
- package/dist/scanner/registry.d.ts.map +0 -1
- package/dist/scanner/registry.js.map +0 -1
- package/dist/scanner/types.d.ts.map +0 -1
- package/dist/scanner/types.js.map +0 -1
- package/dist/tui/app.d.ts.map +0 -1
- package/dist/tui/app.js.map +0 -1
- package/dist/tui/components/ActionOutput.d.ts.map +0 -1
- package/dist/tui/components/ActionOutput.js.map +0 -1
- package/dist/tui/components/ChatInput.d.ts.map +0 -1
- package/dist/tui/components/ChatInput.js.map +0 -1
- package/dist/tui/components/ChatInput.test.d.ts +0 -2
- package/dist/tui/components/ChatInput.test.d.ts.map +0 -1
- package/dist/tui/components/ChatInput.test.js +0 -75
- package/dist/tui/components/ChatInput.test.js.map +0 -1
- package/dist/tui/components/CommandDropdown.d.ts.map +0 -1
- package/dist/tui/components/CommandDropdown.js.map +0 -1
- package/dist/tui/components/Confirm.d.ts.map +0 -1
- package/dist/tui/components/Confirm.js.map +0 -1
- package/dist/tui/components/ErrorCard.d.ts.map +0 -1
- package/dist/tui/components/ErrorCard.js.map +0 -1
- package/dist/tui/components/FooterStatusBar.d.ts.map +0 -1
- package/dist/tui/components/FooterStatusBar.js.map +0 -1
- package/dist/tui/components/MessageList.d.ts.map +0 -1
- package/dist/tui/components/MessageList.js.map +0 -1
- package/dist/tui/components/MultiSelect.d.ts.map +0 -1
- package/dist/tui/components/MultiSelect.js.map +0 -1
- package/dist/tui/components/PasswordInput.d.ts.map +0 -1
- package/dist/tui/components/PasswordInput.js.map +0 -1
- package/dist/tui/components/PhaseHeader.d.ts.map +0 -1
- package/dist/tui/components/PhaseHeader.js.map +0 -1
- package/dist/tui/components/Select.d.ts.map +0 -1
- package/dist/tui/components/Select.js.map +0 -1
- package/dist/tui/components/StatusLine.d.ts.map +0 -1
- package/dist/tui/components/StatusLine.js.map +0 -1
- package/dist/tui/components/StreamingText.d.ts.map +0 -1
- package/dist/tui/components/StreamingText.js.map +0 -1
- package/dist/tui/components/ToolCallCard.d.ts.map +0 -1
- package/dist/tui/components/ToolCallCard.js.map +0 -1
- package/dist/tui/components/WiggumBanner.d.ts.map +0 -1
- package/dist/tui/components/WiggumBanner.js.map +0 -1
- package/dist/tui/components/WorkingIndicator.d.ts.map +0 -1
- package/dist/tui/components/WorkingIndicator.js.map +0 -1
- package/dist/tui/components/WorkingIndicator.test.d.ts +0 -2
- package/dist/tui/components/WorkingIndicator.test.d.ts.map +0 -1
- package/dist/tui/components/WorkingIndicator.test.js +0 -26
- package/dist/tui/components/WorkingIndicator.test.js.map +0 -1
- package/dist/tui/components/index.d.ts.map +0 -1
- package/dist/tui/components/index.js.map +0 -1
- package/dist/tui/demo.d.ts +0 -8
- package/dist/tui/demo.d.ts.map +0 -1
- package/dist/tui/demo.js +0 -69
- package/dist/tui/demo.js.map +0 -1
- package/dist/tui/hooks/index.d.ts.map +0 -1
- package/dist/tui/hooks/index.js.map +0 -1
- package/dist/tui/hooks/useCommandHistory.d.ts.map +0 -1
- package/dist/tui/hooks/useCommandHistory.js.map +0 -1
- package/dist/tui/hooks/useInit.d.ts.map +0 -1
- package/dist/tui/hooks/useInit.js.map +0 -1
- package/dist/tui/hooks/useSpecGenerator.d.ts.map +0 -1
- package/dist/tui/hooks/useSpecGenerator.js.map +0 -1
- package/dist/tui/hooks/useSync.d.ts.map +0 -1
- package/dist/tui/hooks/useSync.js.map +0 -1
- package/dist/tui/index.d.ts.map +0 -1
- package/dist/tui/index.js.map +0 -1
- package/dist/tui/orchestration/index.d.ts.map +0 -1
- package/dist/tui/orchestration/index.js.map +0 -1
- package/dist/tui/orchestration/interview-orchestrator.d.ts.map +0 -1
- package/dist/tui/orchestration/interview-orchestrator.js.map +0 -1
- package/dist/tui/screens/InitScreen.d.ts.map +0 -1
- package/dist/tui/screens/InitScreen.js.map +0 -1
- package/dist/tui/screens/InterviewScreen.d.ts.map +0 -1
- package/dist/tui/screens/InterviewScreen.integration.test.d.ts +0 -7
- package/dist/tui/screens/InterviewScreen.integration.test.d.ts.map +0 -1
- package/dist/tui/screens/InterviewScreen.integration.test.js +0 -149
- package/dist/tui/screens/InterviewScreen.integration.test.js.map +0 -1
- package/dist/tui/screens/InterviewScreen.js.map +0 -1
- package/dist/tui/screens/MainShell.d.ts.map +0 -1
- package/dist/tui/screens/MainShell.js.map +0 -1
- package/dist/tui/screens/MainShell.test.d.ts +0 -2
- package/dist/tui/screens/MainShell.test.d.ts.map +0 -1
- package/dist/tui/screens/MainShell.test.js +0 -103
- package/dist/tui/screens/MainShell.test.js.map +0 -1
- package/dist/tui/screens/RunScreen.d.ts.map +0 -1
- package/dist/tui/screens/RunScreen.js.map +0 -1
- package/dist/tui/screens/WelcomeScreen.d.ts +0 -45
- package/dist/tui/screens/WelcomeScreen.d.ts.map +0 -1
- package/dist/tui/screens/WelcomeScreen.js +0 -55
- package/dist/tui/screens/WelcomeScreen.js.map +0 -1
- package/dist/tui/screens/WelcomeScreen.test.d.ts +0 -2
- package/dist/tui/screens/WelcomeScreen.test.d.ts.map +0 -1
- package/dist/tui/screens/WelcomeScreen.test.js +0 -51
- package/dist/tui/screens/WelcomeScreen.test.js.map +0 -1
- package/dist/tui/screens/index.d.ts.map +0 -1
- package/dist/tui/screens/index.js.map +0 -1
- package/dist/tui/theme.d.ts.map +0 -1
- package/dist/tui/theme.js.map +0 -1
- package/dist/tui/types/interview.d.ts.map +0 -1
- package/dist/tui/types/interview.js.map +0 -1
- package/dist/tui/utils/input-utils.d.ts.map +0 -1
- package/dist/tui/utils/input-utils.js.map +0 -1
- package/dist/tui/utils/loop-status.d.ts.map +0 -1
- package/dist/tui/utils/loop-status.js.map +0 -1
- package/dist/utils/colors.d.ts.map +0 -1
- package/dist/utils/colors.js.map +0 -1
- package/dist/utils/config.d.ts.map +0 -1
- package/dist/utils/config.js.map +0 -1
- package/dist/utils/env.d.ts.map +0 -1
- package/dist/utils/env.js.map +0 -1
- package/dist/utils/header.d.ts.map +0 -1
- package/dist/utils/header.js.map +0 -1
- package/dist/utils/json-repair.d.ts.map +0 -1
- package/dist/utils/json-repair.js.map +0 -1
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/spinner.d.ts.map +0 -1
- package/dist/utils/spinner.js.map +0 -1
- package/dist/utils/tracing.d.ts.map +0 -1
- package/dist/utils/tracing.js.map +0 -1
- package/dist/utils/tui.d.ts.map +0 -1
- package/dist/utils/tui.js.map +0 -1
- package/dist/utils/update-check.d.ts.map +0 -1
- package/dist/utils/update-check.js.map +0 -1
|
@@ -57,4 +57,3 @@ export function Confirm({ message, onConfirm, onCancel, initialValue = true, })
|
|
|
57
57
|
});
|
|
58
58
|
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { color: colors.yellow, children: "? " }), _jsx(Text, { children: message })] }), _jsxs(Box, { paddingLeft: 2, children: [_jsxs(Text, { color: value ? colors.green : undefined, bold: value, children: [value ? '❯ ' : ' ', "Yes"] }), _jsx(Text, { children: " / " }), _jsxs(Text, { color: !value ? colors.pink : undefined, bold: !value, children: [!value ? '❯ ' : ' ', "No"] })] }), _jsx(Box, { marginTop: 1, paddingLeft: 2, children: _jsx(Text, { dimColor: true, children: "(\u2190\u2192 to toggle, y/n or Enter to confirm, Esc to cancel)" }) })] }));
|
|
59
59
|
}
|
|
60
|
-
//# sourceMappingURL=Confirm.js.map
|
|
@@ -24,8 +24,6 @@ const SEPARATOR_CHAR = '\u2500';
|
|
|
24
24
|
*/
|
|
25
25
|
export function FooterStatusBar(props) {
|
|
26
26
|
const { stdout } = useStdout();
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
return (_jsxs(Box, { flexDirection: "column", width: "100%", children: [_jsx(Box, { width: "100%", children: _jsx(Text, { color: colors.separator, children: SEPARATOR_CHAR.repeat(width) }) }), _jsx(StatusLine, { ...props })] }));
|
|
27
|
+
const width = Math.max(1, stdout?.columns ?? 80);
|
|
28
|
+
return (_jsxs(Box, { flexDirection: "column", width: "100%", children: [_jsx(Box, { width: "100%", overflow: "hidden", children: _jsx(Text, { color: colors.separator, wrap: "truncate", children: SEPARATOR_CHAR.repeat(width) }) }), _jsx(StatusLine, { ...props })] }));
|
|
30
29
|
}
|
|
31
|
-
//# sourceMappingURL=FooterStatusBar.js.map
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HeaderContent - Banner + status meta for the AppShell header zone
|
|
3
|
+
*
|
|
4
|
+
* Renders in a vertical column: banner on top, status metadata row below.
|
|
5
|
+
* Includes version badge, provider/model info, init status, and background run indicators.
|
|
6
|
+
*/
|
|
7
|
+
import React from 'react';
|
|
8
|
+
import type { SessionState } from '../../repl/session-state.js';
|
|
9
|
+
import type { BackgroundRun } from '../hooks/useBackgroundRuns.js';
|
|
10
|
+
/**
|
|
11
|
+
* Props for the HeaderContent component
|
|
12
|
+
*/
|
|
13
|
+
export interface HeaderContentProps {
|
|
14
|
+
/** CLI version string */
|
|
15
|
+
version: string;
|
|
16
|
+
/** Current session state */
|
|
17
|
+
sessionState: SessionState;
|
|
18
|
+
/** Background runs (only active ones are displayed) */
|
|
19
|
+
backgroundRuns?: BackgroundRun[];
|
|
20
|
+
/** Use compact banner for small terminals */
|
|
21
|
+
compact?: boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* HeaderContent component
|
|
25
|
+
*
|
|
26
|
+
* Renders the banner and status row for the AppShell header zone.
|
|
27
|
+
*/
|
|
28
|
+
export declare function HeaderContent({ version, sessionState, backgroundRuns, compact, }: HeaderContentProps): React.ReactElement;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import { WiggumBanner } from './WiggumBanner.js';
|
|
4
|
+
import { colors, theme } from '../theme.js';
|
|
5
|
+
/**
|
|
6
|
+
* HeaderContent component
|
|
7
|
+
*
|
|
8
|
+
* Renders the banner and status row for the AppShell header zone.
|
|
9
|
+
*/
|
|
10
|
+
export function HeaderContent({ version, sessionState, backgroundRuns, compact = false, }) {
|
|
11
|
+
const activeRuns = backgroundRuns?.filter((r) => !r.completed && !r.pollError) ?? [];
|
|
12
|
+
const errorRuns = backgroundRuns?.filter((r) => r.pollError) ?? [];
|
|
13
|
+
return (_jsxs(Box, { flexDirection: "column", paddingX: 1, children: [_jsx(WiggumBanner, { compact: compact }), _jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { color: colors.pink, children: ["v", version] }), _jsx(Text, { dimColor: true, children: theme.statusLine.separator }), sessionState.provider ? (_jsxs(Text, { color: colors.blue, children: [sessionState.provider, "/", sessionState.model] })) : (_jsx(Text, { color: colors.orange, children: "not configured" })), _jsx(Text, { dimColor: true, children: theme.statusLine.separator }), _jsx(Text, { color: sessionState.initialized ? colors.green : colors.orange, children: sessionState.initialized ? 'Ready' : 'Not initialized' }), activeRuns.length > 0 && (_jsxs(_Fragment, { children: [_jsx(Text, { dimColor: true, children: theme.statusLine.separator }), _jsxs(Text, { color: colors.green, children: [theme.chars.bulletLarge, " ", activeRuns[0].featureName, activeRuns[0].lastStatus.iteration > 0
|
|
14
|
+
? ` (${activeRuns[0].lastStatus.iteration}/${activeRuns[0].lastStatus.maxIterations || '?'})`
|
|
15
|
+
: ''] }), activeRuns.length > 1 && (_jsxs(Text, { dimColor: true, children: [" +", activeRuns.length - 1, " more"] }))] })), errorRuns.length > 0 && (_jsxs(_Fragment, { children: [_jsx(Text, { dimColor: true, children: theme.statusLine.separator }), _jsxs(Text, { color: colors.orange, children: [theme.chars.bullet, " ", errorRuns[0].featureName, " (status unknown)"] })] }))] })] }));
|
|
16
|
+
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Displays the full conversation history with clean formatting:
|
|
5
5
|
* - User messages: › prefix
|
|
6
|
-
* - Assistant messages:
|
|
6
|
+
* - Assistant messages: • dimmed bullet for context, bold header for questions
|
|
7
7
|
* - Tool calls: Inline action indicators
|
|
8
8
|
*/
|
|
9
9
|
import React from 'react';
|
|
@@ -44,7 +44,7 @@ export interface Message {
|
|
|
44
44
|
export interface MessageListProps {
|
|
45
45
|
/** Array of messages to display */
|
|
46
46
|
messages: Message[];
|
|
47
|
-
/** Optional max height in lines (
|
|
47
|
+
/** Optional max height in lines (clips content when set) */
|
|
48
48
|
maxHeight?: number;
|
|
49
49
|
/** Whether tool calls should show expanded preview (default: false) */
|
|
50
50
|
toolCallsExpanded?: boolean;
|
|
@@ -53,22 +53,23 @@ export interface MessageListProps {
|
|
|
53
53
|
* MessageList component
|
|
54
54
|
*
|
|
55
55
|
* Displays the full conversation history with clean styling:
|
|
56
|
-
* - User messages: `› ` prefix in
|
|
57
|
-
* - Assistant messages:
|
|
58
|
-
* - System messages: dimmed text
|
|
56
|
+
* - User messages: `› ` prefix in green
|
|
57
|
+
* - Assistant messages: context with dimmed bullet, questions with bold header
|
|
58
|
+
* - System messages: dimmed text (phase headers in yellow bold)
|
|
59
59
|
*
|
|
60
60
|
* @example
|
|
61
61
|
* ```tsx
|
|
62
62
|
* <MessageList
|
|
63
63
|
* messages={[
|
|
64
64
|
* { id: '1', role: 'user', content: 'Hello' },
|
|
65
|
-
* { id: '2', role: 'assistant', content: '
|
|
65
|
+
* { id: '2', role: 'assistant', content: 'Let me think about that.\n\nWhat framework do you prefer?' },
|
|
66
66
|
* ]}
|
|
67
67
|
* />
|
|
68
68
|
* // Renders:
|
|
69
69
|
* // › Hello
|
|
70
|
-
* //
|
|
70
|
+
* // • Let me think about that.
|
|
71
|
+
* // Next question:
|
|
72
|
+
* // What framework do you prefer?
|
|
71
73
|
* ```
|
|
72
74
|
*/
|
|
73
75
|
export declare function MessageList({ messages, maxHeight, toolCallsExpanded, }: MessageListProps): React.ReactElement;
|
|
74
|
-
//# sourceMappingURL=MessageList.d.ts.map
|
|
@@ -7,24 +7,24 @@ import { ToolCallCard } from './ToolCallCard.js';
|
|
|
7
7
|
* Renders a single user message with › prefix in green
|
|
8
8
|
*/
|
|
9
9
|
function UserMessage({ content }) {
|
|
10
|
-
return (_jsxs(Box, { flexDirection: "row",
|
|
10
|
+
return (_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { color: theme.colors.prompt, bold: true, children: [theme.chars.prompt, ' '] }), _jsx(Text, { color: theme.colors.userText, children: content })] }));
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
|
-
* Renders a single assistant message with tool calls
|
|
14
|
-
*
|
|
15
|
-
*
|
|
13
|
+
* Renders a single assistant message with tool calls
|
|
14
|
+
* Context/thinking paragraphs: dimmed bullet prefix, italic
|
|
15
|
+
* Question paragraphs: bold "Next question:" header, no bullet
|
|
16
16
|
*/
|
|
17
17
|
function AssistantMessage({ content, toolCalls, isStreaming, toolCallsExpanded = false, }) {
|
|
18
18
|
// Split content into paragraphs for differentiated styling
|
|
19
19
|
const paragraphs = content ? content.split('\n\n').filter((p) => p.trim()) : [];
|
|
20
|
-
return (_jsxs(Box, { flexDirection: "column",
|
|
20
|
+
return (_jsxs(Box, { flexDirection: "column", gap: 1, children: [toolCalls && toolCalls.length > 0 && (_jsx(Box, { flexDirection: "column", children: toolCalls.map((toolCall, index) => (_jsx(ToolCallCard, { toolName: toolCall.toolName, status: toolCall.status, input: toolCall.input, output: toolCall.output, error: toolCall.error, expanded: toolCallsExpanded }, `tool-${index}`))) })), content && !isStreaming && (_jsx(Box, { flexDirection: "column", flexGrow: 1, children: paragraphs.map((para, index) => {
|
|
21
21
|
const isQuestion = para.trim().endsWith('?');
|
|
22
22
|
if (isQuestion) {
|
|
23
23
|
// Question - prominent, with "Next question:" prefix
|
|
24
|
-
return (_jsxs(Box, {
|
|
24
|
+
return (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { bold: true, children: "Next question:" }), _jsx(Text, { color: theme.colors.aiText, children: para })] }, index));
|
|
25
25
|
}
|
|
26
26
|
else {
|
|
27
|
-
// Context/thinking -
|
|
27
|
+
// Context/thinking - dimmed bullet prefix, italic dimmed text
|
|
28
28
|
return (_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { dimColor: true, children: [theme.chars.bullet, " "] }), _jsx(Text, { dimColor: true, italic: true, children: para })] }, index));
|
|
29
29
|
}
|
|
30
30
|
}) })), content && isStreaming && (_jsx(Box, { flexDirection: "column", flexGrow: 1, children: _jsx(StreamingText, { text: content, isStreaming: true, color: theme.colors.aiText }) }))] }));
|
|
@@ -36,43 +36,49 @@ function AssistantMessage({ content, toolCalls, isStreaming, toolCallsExpanded =
|
|
|
36
36
|
function SystemMessage({ content }) {
|
|
37
37
|
// Check if this is a phase header (e.g., "Phase 2: Goals - Describe what you want to build")
|
|
38
38
|
const phaseMatch = content.match(/^Phase (\d+): (.+?) - (.+)$/);
|
|
39
|
+
const isSuccess = content.startsWith('\u2713');
|
|
39
40
|
const isSyncFailure = content.toLowerCase().startsWith('sync failed:');
|
|
40
41
|
const isSyncMessage = content.toLowerCase().startsWith('sync:');
|
|
41
42
|
if (phaseMatch) {
|
|
42
43
|
const [, phaseNum, phaseName, description] = phaseMatch;
|
|
43
|
-
return (_jsxs(Box, {
|
|
44
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { color: theme.colors.brand, bold: true, children: ["Phase ", phaseNum, ": ", phaseName] }), _jsx(Text, { dimColor: true, children: description })] }));
|
|
45
|
+
}
|
|
46
|
+
if (isSuccess) {
|
|
47
|
+
return (_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { color: colors.green, children: ['\u2713', " "] }), _jsx(Text, { children: content.slice(1).trimStart() })] }));
|
|
44
48
|
}
|
|
45
49
|
if (isSyncFailure) {
|
|
46
|
-
return (_jsx(Box, {
|
|
50
|
+
return (_jsx(Box, { children: _jsx(Text, { color: colors.pink, children: content }) }));
|
|
47
51
|
}
|
|
48
52
|
if (isSyncMessage) {
|
|
49
|
-
return (_jsx(Box, {
|
|
53
|
+
return (_jsx(Box, { children: _jsx(Text, { color: colors.blue, children: content }) }));
|
|
50
54
|
}
|
|
51
|
-
return (_jsx(Box, {
|
|
55
|
+
return (_jsx(Box, { children: _jsx(Text, { dimColor: true, children: content }) }));
|
|
52
56
|
}
|
|
53
57
|
/**
|
|
54
58
|
* MessageList component
|
|
55
59
|
*
|
|
56
60
|
* Displays the full conversation history with clean styling:
|
|
57
|
-
* - User messages: `› ` prefix in
|
|
58
|
-
* - Assistant messages:
|
|
59
|
-
* - System messages: dimmed text
|
|
61
|
+
* - User messages: `› ` prefix in green
|
|
62
|
+
* - Assistant messages: context with dimmed bullet, questions with bold header
|
|
63
|
+
* - System messages: dimmed text (phase headers in yellow bold)
|
|
60
64
|
*
|
|
61
65
|
* @example
|
|
62
66
|
* ```tsx
|
|
63
67
|
* <MessageList
|
|
64
68
|
* messages={[
|
|
65
69
|
* { id: '1', role: 'user', content: 'Hello' },
|
|
66
|
-
* { id: '2', role: 'assistant', content: '
|
|
70
|
+
* { id: '2', role: 'assistant', content: 'Let me think about that.\n\nWhat framework do you prefer?' },
|
|
67
71
|
* ]}
|
|
68
72
|
* />
|
|
69
73
|
* // Renders:
|
|
70
74
|
* // › Hello
|
|
71
|
-
* //
|
|
75
|
+
* // • Let me think about that.
|
|
76
|
+
* // Next question:
|
|
77
|
+
* // What framework do you prefer?
|
|
72
78
|
* ```
|
|
73
79
|
*/
|
|
74
80
|
export function MessageList({ messages, maxHeight, toolCallsExpanded = false, }) {
|
|
75
|
-
return (_jsx(Box, { flexDirection: "column", ...(maxHeight ? { height: maxHeight } : {}), children: messages.map((message) => {
|
|
81
|
+
return (_jsx(Box, { flexDirection: "column", gap: 1, ...(maxHeight ? { height: maxHeight } : {}), children: messages.map((message) => {
|
|
76
82
|
switch (message.role) {
|
|
77
83
|
case 'user':
|
|
78
84
|
return _jsx(UserMessage, { content: message.content }, message.id);
|
|
@@ -83,4 +89,3 @@ export function MessageList({ messages, maxHeight, toolCallsExpanded = false, })
|
|
|
83
89
|
}
|
|
84
90
|
}) }));
|
|
85
91
|
}
|
|
86
|
-
//# sourceMappingURL=MessageList.js.map
|
|
@@ -90,4 +90,3 @@ export function MultiSelect({ message, options, onSubmit, onChatMode, onCancel,
|
|
|
90
90
|
return (_jsxs(Box, { paddingLeft: 2, children: [_jsxs(Text, { color: color, children: [isFocused ? '❯ ' : ' ', num, " ", indicator, " ", option.label] }), option.hint && _jsxs(Text, { dimColor: true, children: [" (", option.hint, ")"] })] }, option.value));
|
|
91
91
|
}) }), _jsx(Box, { marginTop: 1, paddingLeft: 2, children: _jsx(Text, { dimColor: true, children: "(\u2191\u2193 move, Space toggle, Enter submit, c chat mode, Esc free-text)" }) })] }));
|
|
92
92
|
}
|
|
93
|
-
//# sourceMappingURL=MultiSelect.js.map
|
|
@@ -60,4 +60,3 @@ export function PasswordInput({ message, onSubmit, onCancel, mask = '*', placeho
|
|
|
60
60
|
const displayValue = value.length > 0 ? maskedValue : placeholder;
|
|
61
61
|
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { color: colors.yellow, children: "? " }), _jsx(Text, { children: message })] }), _jsxs(Box, { paddingLeft: 2, children: [_jsx(Text, { color: colors.brown, children: "> " }), _jsx(Text, { color: value.length > 0 ? colors.white : undefined, dimColor: value.length === 0, children: displayValue }), _jsx(Text, { color: colors.yellow, children: "\u258C" })] }), _jsx(Box, { marginTop: 1, paddingLeft: 2, children: _jsx(Text, { dimColor: true, children: "(Enter to submit, Esc to cancel)" }) })] }));
|
|
62
62
|
}
|
|
63
|
-
//# sourceMappingURL=PasswordInput.js.map
|
|
@@ -28,4 +28,3 @@ export function PhaseHeader({ currentPhase, totalPhases, phaseName, }) {
|
|
|
28
28
|
const lineSegment = HEAVY_HORIZONTAL.repeat(3);
|
|
29
29
|
return (_jsx(Box, { flexDirection: "row", justifyContent: "center", width: "100%", children: _jsxs(Text, { color: colors.yellow, children: [lineSegment, " ", phaseText, " ", lineSegment] }) }));
|
|
30
30
|
}
|
|
31
|
-
//# sourceMappingURL=PhaseHeader.js.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RunCompletionSummary - Displays run loop completion recap
|
|
3
|
+
*
|
|
4
|
+
* Shows the feature, iterations, tasks, tokens, branch, exit status,
|
|
5
|
+
* log tail, and "what's next" section after a feature loop completes.
|
|
6
|
+
*/
|
|
7
|
+
import React from 'react';
|
|
8
|
+
import type { RunSummary } from '../screens/RunScreen.js';
|
|
9
|
+
/**
|
|
10
|
+
* Props for RunCompletionSummary component
|
|
11
|
+
*/
|
|
12
|
+
export interface RunCompletionSummaryProps {
|
|
13
|
+
/** Run summary data */
|
|
14
|
+
summary: RunSummary;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* RunCompletionSummary component
|
|
18
|
+
*
|
|
19
|
+
* Renders the run loop completion recap inline within the
|
|
20
|
+
* RunScreen content area.
|
|
21
|
+
*/
|
|
22
|
+
export declare function RunCompletionSummary({ summary, }: RunCompletionSummaryProps): React.ReactElement;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import { StatusLine } from './StatusLine.js';
|
|
4
|
+
import { colors, theme } from '../theme.js';
|
|
5
|
+
import { formatNumber } from '../utils/loop-status.js';
|
|
6
|
+
/**
|
|
7
|
+
* RunCompletionSummary component
|
|
8
|
+
*
|
|
9
|
+
* Renders the run loop completion recap inline within the
|
|
10
|
+
* RunScreen content area.
|
|
11
|
+
*/
|
|
12
|
+
export function RunCompletionSummary({ summary, }) {
|
|
13
|
+
const totalTokens = summary.tokensInput + summary.tokensOutput;
|
|
14
|
+
const stoppedCodes = new Set([130, 143]);
|
|
15
|
+
const exitState = summary.exitCode === 0
|
|
16
|
+
? { label: 'Complete', color: colors.green, message: 'Done. Feature loop completed successfully.' }
|
|
17
|
+
: stoppedCodes.has(summary.exitCode)
|
|
18
|
+
? { label: 'Stopped', color: colors.orange, message: 'Stopped. Feature loop interrupted.' }
|
|
19
|
+
: summary.exitCodeInferred
|
|
20
|
+
? { label: 'Unknown', color: colors.orange, message: `Done. Exit status uncertain (inferred code ${summary.exitCode}). Check logs for details.` }
|
|
21
|
+
: { label: 'Failed', color: colors.pink, message: `Done. Feature loop exited with code ${summary.exitCode}.` };
|
|
22
|
+
return (_jsxs(Box, { flexDirection: "column", marginY: 1, children: [_jsx(StatusLine, { action: "Run Loop", phase: exitState.label, path: summary.feature }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { bold: true, children: "Summary" }), _jsxs(Text, { children: ["- Feature: ", summary.feature] }), _jsxs(Text, { children: ["- Iterations: ", summary.iterations, "/", summary.maxIterations] }), _jsxs(Text, { children: ["- Tasks: ", summary.tasksDone, "/", summary.tasksTotal] }), _jsxs(Text, { children: ["- Tokens: ", formatNumber(totalTokens), " (in:", formatNumber(summary.tokensInput), " out:", formatNumber(summary.tokensOutput), ")"] }), summary.branch && summary.branch !== '-' && (_jsxs(Text, { children: ["- Branch: ", summary.branch] }))] }), _jsxs(Box, { marginTop: 1, flexDirection: "row", children: [_jsxs(Text, { color: exitState.color, children: [theme.chars.bullet, " "] }), _jsx(Text, { children: exitState.message })] }), (summary.errorTail || summary.logPath) && (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [summary.logPath && (_jsxs(Text, { dimColor: true, children: ["Log: ", summary.logPath] })), summary.errorTail && (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { dimColor: true, children: "Last output:" }), summary.errorTail.split('\n').map((line, idx) => (_jsx(Text, { dimColor: true, children: line }, `${line}-${idx}`)))] }))] })), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { bold: true, children: "What's next:" }), _jsxs(Box, { flexDirection: "row", gap: 1, children: [_jsx(Text, { color: colors.green, children: theme.chars.prompt }), _jsx(Text, { dimColor: true, children: "Review changes and open a PR if needed" })] }), _jsxs(Box, { flexDirection: "row", gap: 1, children: [_jsx(Text, { color: colors.green, children: theme.chars.prompt }), _jsxs(Text, { color: colors.blue, children: ["/new ", '<feature>'] }), _jsx(Text, { dimColor: true, children: "Create another feature specification" })] }), _jsxs(Box, { flexDirection: "row", gap: 1, children: [_jsx(Text, { color: colors.green, children: theme.chars.prompt }), _jsx(Text, { color: colors.blue, children: "/help" }), _jsx(Text, { dimColor: true, children: "See all commands" })] })] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "Press Enter or Esc to return to shell" }) })] }));
|
|
23
|
+
}
|
|
@@ -60,4 +60,3 @@ export function Select({ message, options, onSelect, onCancel, initialIndex = 0,
|
|
|
60
60
|
return (_jsxs(Box, { paddingLeft: 2, children: [_jsx(Text, { color: isSelected ? colors.blue : undefined, children: isSelected ? '❯ ' : ' ' }), _jsx(Text, { color: isSelected ? colors.blue : undefined, children: option.label }), option.hint && (_jsxs(Text, { dimColor: true, children: [" (", option.hint, ")"] }))] }, String(option.value)));
|
|
61
61
|
}) }), _jsx(Box, { marginTop: 1, paddingLeft: 2, children: _jsx(Text, { dimColor: true, children: "(\u2191\u2193 to move, Enter to select, Esc to cancel)" }) })] }));
|
|
62
62
|
}
|
|
63
|
-
//# sourceMappingURL=Select.js.map
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SpecCompletionSummary - Displays spec generation recap
|
|
3
|
+
*
|
|
4
|
+
* Shows the goal, key decisions, file preview, and "what's next"
|
|
5
|
+
* section after a spec has been generated. Extracts a recap from
|
|
6
|
+
* the conversation history using heuristic text analysis.
|
|
7
|
+
*/
|
|
8
|
+
import React from 'react';
|
|
9
|
+
import type { Message } from './MessageList.js';
|
|
10
|
+
/**
|
|
11
|
+
* Props for the SpecCompletionSummary component
|
|
12
|
+
*/
|
|
13
|
+
export interface SpecCompletionSummaryProps {
|
|
14
|
+
/** Name of the feature */
|
|
15
|
+
featureName: string;
|
|
16
|
+
/** Generated spec content */
|
|
17
|
+
spec: string;
|
|
18
|
+
/** Path where spec was saved */
|
|
19
|
+
specPath: string;
|
|
20
|
+
/** Conversation messages from the interview */
|
|
21
|
+
messages: Message[];
|
|
22
|
+
}
|
|
23
|
+
/** Strip filler prefixes ('you want', 'understood', 'got it') from AI recap text and capitalize. */
|
|
24
|
+
export declare function normalizeRecap(text: string): string;
|
|
25
|
+
/** Strip user speech filler and normalize decision text: add trailing period if missing, capitalize. */
|
|
26
|
+
export declare function normalizeUserDecision(text: string): string;
|
|
27
|
+
/** Truncate text to max characters with ellipsis. */
|
|
28
|
+
export declare function summarizeText(text: string, max?: number): string;
|
|
29
|
+
/** Return true if the decision string is substantive enough to display (>= 8 chars and >= 3 words). */
|
|
30
|
+
export declare function isUsefulDecision(entry: string): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Extract goal and key decisions from conversation messages.
|
|
33
|
+
*
|
|
34
|
+
* @returns `goalCandidate` — a one-line summary of the feature goal, and
|
|
35
|
+
* `decisions` — up to 4 key decisions extracted from the conversation.
|
|
36
|
+
*/
|
|
37
|
+
export declare function extractRecap(messages: Message[], featureName: string): {
|
|
38
|
+
goalCandidate: string;
|
|
39
|
+
decisions: string[];
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* SpecCompletionSummary component
|
|
43
|
+
*
|
|
44
|
+
* Renders the spec generation completion recap inline within the
|
|
45
|
+
* InterviewScreen content area.
|
|
46
|
+
*/
|
|
47
|
+
export declare function SpecCompletionSummary({ featureName, spec, specPath, messages, }: SpecCompletionSummaryProps): React.ReactElement;
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import { StatusLine } from './StatusLine.js';
|
|
4
|
+
import { colors, theme } from '../theme.js';
|
|
5
|
+
import { PHASE_CONFIGS } from '../hooks/useSpecGenerator.js';
|
|
6
|
+
const MAX_RECAP_SOURCE_LENGTH = 1200;
|
|
7
|
+
/** Strip filler prefixes ('you want', 'understood', 'got it') from AI recap text and capitalize. */
|
|
8
|
+
export function normalizeRecap(text) {
|
|
9
|
+
let result = text.trim();
|
|
10
|
+
result = result.replace(/^[^a-z0-9]+/i, '');
|
|
11
|
+
result = result.replace(/^you want\s*/i, '');
|
|
12
|
+
result = result.replace(/^understood[:,]?\s*/i, '');
|
|
13
|
+
result = result.replace(/^got it[-\u2014:]*\s*/i, '');
|
|
14
|
+
return result.charAt(0).toUpperCase() + result.slice(1);
|
|
15
|
+
}
|
|
16
|
+
/** Strip user speech filler and normalize decision text: add trailing period if missing, capitalize. */
|
|
17
|
+
export function normalizeUserDecision(text) {
|
|
18
|
+
let result = text.trim();
|
|
19
|
+
result = result.replace(/^[^a-z0-9]+/i, '');
|
|
20
|
+
result = result.replace(/^i (?:would like|want|need|prefer|expect) to\s*/i, '');
|
|
21
|
+
result = result.replace(/^i (?:would like|want|need|prefer|expect)\s*/i, '');
|
|
22
|
+
result = result.replace(/^please\s*/i, '');
|
|
23
|
+
result = result.replace(/^up to you[:,]?\s*/i, '');
|
|
24
|
+
result = result.replace(/^both\s*/i, 'Both ');
|
|
25
|
+
if (result && !/[.!?]$/.test(result)) {
|
|
26
|
+
result += '.';
|
|
27
|
+
}
|
|
28
|
+
return result.charAt(0).toUpperCase() + result.slice(1);
|
|
29
|
+
}
|
|
30
|
+
/** Truncate text to max characters with ellipsis. */
|
|
31
|
+
export function summarizeText(text, max = 160) {
|
|
32
|
+
if (text.length <= max)
|
|
33
|
+
return text;
|
|
34
|
+
return `${text.slice(0, max - 1)}\u2026`;
|
|
35
|
+
}
|
|
36
|
+
/** Return true if the decision string is substantive enough to display (>= 8 chars and >= 3 words). */
|
|
37
|
+
export function isUsefulDecision(entry) {
|
|
38
|
+
const normalized = entry.trim().toLowerCase();
|
|
39
|
+
if (normalized.length < 8)
|
|
40
|
+
return false;
|
|
41
|
+
const wordCount = normalized.split(/\s+/).length;
|
|
42
|
+
if (wordCount < 3)
|
|
43
|
+
return false;
|
|
44
|
+
if (['yes', 'no', 'both', 'ok', 'okay'].includes(normalized))
|
|
45
|
+
return false;
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Extract goal and key decisions from conversation messages.
|
|
50
|
+
*
|
|
51
|
+
* @returns `goalCandidate` — a one-line summary of the feature goal, and
|
|
52
|
+
* `decisions` — up to 4 key decisions extracted from the conversation.
|
|
53
|
+
*/
|
|
54
|
+
export function extractRecap(messages, featureName) {
|
|
55
|
+
const userMessages = messages
|
|
56
|
+
.filter((msg) => msg.role === 'user')
|
|
57
|
+
.map((msg) => msg.content.trim())
|
|
58
|
+
.filter((content) => content.length > 0 && content.length <= MAX_RECAP_SOURCE_LENGTH);
|
|
59
|
+
const nonUrlUserMessages = userMessages.filter((content) => !/^https?:\/\//i.test(content) && !/^www\./i.test(content));
|
|
60
|
+
const assistantParagraphs = messages
|
|
61
|
+
.filter((msg) => msg.role === 'assistant' && msg.content && msg.content.length <= MAX_RECAP_SOURCE_LENGTH)
|
|
62
|
+
.flatMap((msg) => msg.content.split('\n\n'))
|
|
63
|
+
.map((para) => para.replace(/\s+/g, ' ').trim())
|
|
64
|
+
.filter((para) => para.length > 0 && para.length <= 320);
|
|
65
|
+
const recapCandidates = assistantParagraphs
|
|
66
|
+
.map((para) => para.replace(/^[^a-z0-9]+/i, '').trim())
|
|
67
|
+
.filter((para) => /^(you want|understood|got it)/i.test(para))
|
|
68
|
+
.map((para) => para.split(/next question:/i)[0].trim())
|
|
69
|
+
.filter((para) => para.length > 0);
|
|
70
|
+
const goalCandidate = recapCandidates.length > 0
|
|
71
|
+
? normalizeRecap(recapCandidates[0])
|
|
72
|
+
: (nonUrlUserMessages.find((content) => content.length > 20)
|
|
73
|
+
? normalizeUserDecision(nonUrlUserMessages.find((content) => content.length > 20))
|
|
74
|
+
: (nonUrlUserMessages[0] ? normalizeUserDecision(nonUrlUserMessages[0]) : `Define "${featureName}"`));
|
|
75
|
+
const decisions = [];
|
|
76
|
+
const seen = new Set();
|
|
77
|
+
if (recapCandidates.length > 1) {
|
|
78
|
+
for (let i = 1; i < recapCandidates.length; i += 1) {
|
|
79
|
+
const entry = normalizeRecap(recapCandidates[i]);
|
|
80
|
+
const normalized = entry.toLowerCase();
|
|
81
|
+
if (!isUsefulDecision(entry))
|
|
82
|
+
continue;
|
|
83
|
+
if (seen.has(normalized))
|
|
84
|
+
continue;
|
|
85
|
+
decisions.push(entry);
|
|
86
|
+
seen.add(normalized);
|
|
87
|
+
if (decisions.length >= 4)
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
for (let i = nonUrlUserMessages.length - 1; i >= 0; i -= 1) {
|
|
93
|
+
const entry = nonUrlUserMessages[i];
|
|
94
|
+
const normalized = entry.toLowerCase();
|
|
95
|
+
if (entry === goalCandidate)
|
|
96
|
+
continue;
|
|
97
|
+
if (!isUsefulDecision(entry))
|
|
98
|
+
continue;
|
|
99
|
+
if (entry.length > 160)
|
|
100
|
+
continue;
|
|
101
|
+
if (seen.has(normalized))
|
|
102
|
+
continue;
|
|
103
|
+
decisions.unshift(normalizeUserDecision(entry));
|
|
104
|
+
seen.add(normalized);
|
|
105
|
+
if (decisions.length >= 4)
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return { goalCandidate, decisions };
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* SpecCompletionSummary component
|
|
113
|
+
*
|
|
114
|
+
* Renders the spec generation completion recap inline within the
|
|
115
|
+
* InterviewScreen content area.
|
|
116
|
+
*/
|
|
117
|
+
export function SpecCompletionSummary({ featureName, spec, specPath, messages, }) {
|
|
118
|
+
const specLines = spec ? spec.split('\n') : [];
|
|
119
|
+
const totalLines = specLines.length;
|
|
120
|
+
const previewLines = specLines.slice(0, 5);
|
|
121
|
+
const remainingLines = Math.max(0, totalLines - 5);
|
|
122
|
+
const { goalCandidate, decisions } = extractRecap(messages, featureName);
|
|
123
|
+
return (_jsxs(Box, { flexDirection: "column", marginY: 1, children: [_jsx(StatusLine, { action: "New Spec", phase: `Complete (${PHASE_CONFIGS.complete.number}/${PHASE_CONFIGS.complete.number})`, path: featureName }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { bold: true, children: "Summary" }), _jsxs(Text, { children: ["- Goal: ", summarizeText(goalCandidate)] }), _jsxs(Text, { children: ["- Outcome: Spec written to ", specPath || `${featureName}.md`, " (", totalLines, " lines)"] })] }), decisions.length > 0 && (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { bold: true, children: "Key decisions" }), decisions.map((decision, idx) => (_jsxs(Text, { children: [idx + 1, ". ", summarizeText(decision, 120)] }, `${decision}-${idx}`)))] })), _jsxs(Box, { marginTop: 1, flexDirection: "row", children: [_jsxs(Text, { color: colors.green, children: [theme.chars.bullet, " "] }), _jsx(Text, { bold: true, children: "Write" }), _jsxs(Text, { dimColor: true, children: ["(", specPath || `${featureName}.md`, ")"] })] }), _jsx(Box, { marginLeft: 2, children: _jsxs(Text, { dimColor: true, children: [theme.chars.lineEnd, " Wrote ", totalLines, " lines"] }) }), _jsxs(Box, { marginLeft: 4, flexDirection: "column", children: [previewLines.map((line, i) => (_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { dimColor: true, children: [String(i + 1).padStart(4), " "] }), _jsx(Text, { dimColor: true, children: line })] }, i))), remainingLines > 0 && (_jsxs(Text, { dimColor: true, children: ['\u2026', " +", remainingLines, " lines"] }))] }), _jsxs(Box, { marginTop: 1, flexDirection: "row", children: [_jsxs(Text, { color: colors.green, children: [theme.chars.bullet, " "] }), _jsx(Text, { children: "Done. Specification generated successfully." })] }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { bold: true, children: "What's next:" }), _jsxs(Box, { flexDirection: "row", gap: 1, children: [_jsx(Text, { color: colors.green, children: theme.chars.prompt }), _jsx(Text, { dimColor: true, children: "Review the spec in your editor" })] }), _jsxs(Box, { flexDirection: "row", gap: 1, children: [_jsx(Text, { color: colors.green, children: theme.chars.prompt }), _jsx(Text, { color: colors.blue, children: "/help" }), _jsx(Text, { dimColor: true, children: "See all commands" })] })] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "Press Enter or Esc to return to shell" }) })] }));
|
|
124
|
+
}
|
|
@@ -25,4 +25,3 @@ export function StatusLine({ action, phase, path, }) {
|
|
|
25
25
|
: path;
|
|
26
26
|
return (_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: colors.yellow, bold: true, children: action }), phase && (_jsxs(_Fragment, { children: [_jsx(Text, { dimColor: true, children: separator }), _jsx(Text, { children: phase })] })), displayPath && (_jsxs(_Fragment, { children: [_jsx(Text, { dimColor: true, children: separator }), _jsx(Text, { dimColor: true, children: displayPath })] }))] }));
|
|
27
27
|
}
|
|
28
|
-
//# sourceMappingURL=StatusLine.js.map
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TipsBar - Contextual hints bar
|
|
3
|
+
*
|
|
4
|
+
* Renders a single dimmed line with slash commands highlighted in blue.
|
|
5
|
+
*/
|
|
6
|
+
import React from 'react';
|
|
7
|
+
/**
|
|
8
|
+
* Props for TipsBar component
|
|
9
|
+
*/
|
|
10
|
+
export interface TipsBarProps {
|
|
11
|
+
/** Tip text - slash commands (e.g. /help) are auto-highlighted */
|
|
12
|
+
text: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* TipsBar component
|
|
16
|
+
*
|
|
17
|
+
* Displays contextual tips with slash commands highlighted in blue.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```tsx
|
|
21
|
+
* <TipsBar text="Tip: /new <feature> to create spec, /help for commands" />
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export declare function TipsBar({ text }: TipsBarProps): React.ReactElement;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import { colors } from '../theme.js';
|
|
4
|
+
/**
|
|
5
|
+
* TipsBar component
|
|
6
|
+
*
|
|
7
|
+
* Displays contextual tips with slash commands highlighted in blue.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```tsx
|
|
11
|
+
* <TipsBar text="Tip: /new <feature> to create spec, /help for commands" />
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export function TipsBar({ text }) {
|
|
15
|
+
// Split text on slash commands to highlight them
|
|
16
|
+
const parts = text.split(/(\/[a-zA-Z]+)/g);
|
|
17
|
+
return (_jsx(Box, { children: parts.map((part, i) => {
|
|
18
|
+
if (part.startsWith('/')) {
|
|
19
|
+
return _jsx(Text, { color: colors.blue, children: part }, i);
|
|
20
|
+
}
|
|
21
|
+
return _jsx(Text, { dimColor: true, children: part }, i);
|
|
22
|
+
}) }));
|
|
23
|
+
}
|
|
@@ -173,4 +173,3 @@ export function ToolCallCard({ toolName, status, input, output, error, expanded
|
|
|
173
173
|
: (parsedOutput?.remainingCount || 0);
|
|
174
174
|
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: color, children: dot }), _jsx(Text, { children: " " }), _jsx(Text, { bold: true, children: displayName }), _jsxs(Text, { dimColor: true, children: ["(", displayInput, ")"] })] }), summary && (_jsxs(Box, { marginLeft: 2, children: [_jsxs(Text, { dimColor: true, children: [theme.chars.lineEnd, " "] }), _jsx(Text, { color: status === 'error' ? theme.colors.error : undefined, dimColor: status !== 'error', children: summary })] })), showPreview && (_jsxs(Box, { flexDirection: "column", marginLeft: 4, children: [linesToShow.map((line, index) => (_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { dimColor: true, children: [String(index + 1).padStart(4), " "] }), _jsx(Text, { dimColor: true, children: line })] }, index))), remainingCount > 0 && (_jsxs(Text, { dimColor: true, children: ["... +", remainingCount, " lines (ctrl+o to expand)"] }))] }))] }));
|
|
175
175
|
}
|
|
176
|
-
//# sourceMappingURL=ToolCallCard.js.map
|