verbolab 0.1.0-alpha.1
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/LICENSE +21 -0
- package/README.md +71 -0
- package/dist/bin/verbo.d.ts +3 -0
- package/dist/bin/verbo.d.ts.map +1 -0
- package/dist/bin/verbo.js +1156 -0
- package/dist/bin/verbo.js.map +1 -0
- package/dist/relay/index.d.ts +2 -0
- package/dist/relay/index.d.ts.map +1 -0
- package/dist/relay/index.js +15 -0
- package/dist/relay/index.js.map +1 -0
- package/dist/src/agent/agent-launcher.d.ts +64 -0
- package/dist/src/agent/agent-launcher.d.ts.map +1 -0
- package/dist/src/agent/agent-launcher.js +326 -0
- package/dist/src/agent/agent-launcher.js.map +1 -0
- package/dist/src/agent/agent-monitor.d.ts +16 -0
- package/dist/src/agent/agent-monitor.d.ts.map +1 -0
- package/dist/src/agent/agent-monitor.js +41 -0
- package/dist/src/agent/agent-monitor.js.map +1 -0
- package/dist/src/agent/fun-names.d.ts +9 -0
- package/dist/src/agent/fun-names.d.ts.map +1 -0
- package/dist/src/agent/fun-names.js +118 -0
- package/dist/src/agent/fun-names.js.map +1 -0
- package/dist/src/agent/mcp-shim.d.ts +45 -0
- package/dist/src/agent/mcp-shim.d.ts.map +1 -0
- package/dist/src/agent/mcp-shim.js +192 -0
- package/dist/src/agent/mcp-shim.js.map +1 -0
- package/dist/src/agent/personas.d.ts +47 -0
- package/dist/src/agent/personas.d.ts.map +1 -0
- package/dist/src/agent/personas.js +86 -0
- package/dist/src/agent/personas.js.map +1 -0
- package/dist/src/agent/provider-detection.d.ts +21 -0
- package/dist/src/agent/provider-detection.d.ts.map +1 -0
- package/dist/src/agent/provider-detection.js +47 -0
- package/dist/src/agent/provider-detection.js.map +1 -0
- package/dist/src/agent/providers/claude-provider.d.ts +3 -0
- package/dist/src/agent/providers/claude-provider.d.ts.map +1 -0
- package/dist/src/agent/providers/claude-provider.js +119 -0
- package/dist/src/agent/providers/claude-provider.js.map +1 -0
- package/dist/src/agent/providers/gemini-provider.d.ts +13 -0
- package/dist/src/agent/providers/gemini-provider.d.ts.map +1 -0
- package/dist/src/agent/providers/gemini-provider.js +143 -0
- package/dist/src/agent/providers/gemini-provider.js.map +1 -0
- package/dist/src/agent/providers/openai-provider.d.ts +3 -0
- package/dist/src/agent/providers/openai-provider.d.ts.map +1 -0
- package/dist/src/agent/providers/openai-provider.js +127 -0
- package/dist/src/agent/providers/openai-provider.js.map +1 -0
- package/dist/src/agent/providers/registry.d.ts +19 -0
- package/dist/src/agent/providers/registry.d.ts.map +1 -0
- package/dist/src/agent/providers/registry.js +30 -0
- package/dist/src/agent/providers/registry.js.map +1 -0
- package/dist/src/agent/providers/types.d.ts +118 -0
- package/dist/src/agent/providers/types.d.ts.map +1 -0
- package/dist/src/agent/providers/types.js +2 -0
- package/dist/src/agent/providers/types.js.map +1 -0
- package/dist/src/approval/approval-server.d.ts +17 -0
- package/dist/src/approval/approval-server.d.ts.map +1 -0
- package/dist/src/approval/approval-server.js +90 -0
- package/dist/src/approval/approval-server.js.map +1 -0
- package/dist/src/approval/approval-store.d.ts +29 -0
- package/dist/src/approval/approval-store.d.ts.map +1 -0
- package/dist/src/approval/approval-store.js +94 -0
- package/dist/src/approval/approval-store.js.map +1 -0
- package/dist/src/auth/auth-store.d.ts +18 -0
- package/dist/src/auth/auth-store.d.ts.map +1 -0
- package/dist/src/auth/auth-store.js +34 -0
- package/dist/src/auth/auth-store.js.map +1 -0
- package/dist/src/auth/device-code-client.d.ts +32 -0
- package/dist/src/auth/device-code-client.d.ts.map +1 -0
- package/dist/src/auth/device-code-client.js +41 -0
- package/dist/src/auth/device-code-client.js.map +1 -0
- package/dist/src/auth/plan-enforcer.d.ts +8 -0
- package/dist/src/auth/plan-enforcer.d.ts.map +1 -0
- package/dist/src/auth/plan-enforcer.js +14 -0
- package/dist/src/auth/plan-enforcer.js.map +1 -0
- package/dist/src/commands/audit.d.ts +7 -0
- package/dist/src/commands/audit.d.ts.map +1 -0
- package/dist/src/commands/audit.js +92 -0
- package/dist/src/commands/audit.js.map +1 -0
- package/dist/src/commands/team.d.ts +48 -0
- package/dist/src/commands/team.d.ts.map +1 -0
- package/dist/src/commands/team.js +175 -0
- package/dist/src/commands/team.js.map +1 -0
- package/dist/src/config/verbo-config.d.ts +43 -0
- package/dist/src/config/verbo-config.d.ts.map +1 -0
- package/dist/src/config/verbo-config.js +111 -0
- package/dist/src/config/verbo-config.js.map +1 -0
- package/dist/src/core/agent-session-store.d.ts +69 -0
- package/dist/src/core/agent-session-store.d.ts.map +1 -0
- package/dist/src/core/agent-session-store.js +168 -0
- package/dist/src/core/agent-session-store.js.map +1 -0
- package/dist/src/core/audit-log-store.d.ts +33 -0
- package/dist/src/core/audit-log-store.d.ts.map +1 -0
- package/dist/src/core/audit-log-store.js +104 -0
- package/dist/src/core/audit-log-store.js.map +1 -0
- package/dist/src/core/compliance.d.ts +50 -0
- package/dist/src/core/compliance.d.ts.map +1 -0
- package/dist/src/core/compliance.js +59 -0
- package/dist/src/core/compliance.js.map +1 -0
- package/dist/src/core/conflict-detector.d.ts +19 -0
- package/dist/src/core/conflict-detector.d.ts.map +1 -0
- package/dist/src/core/conflict-detector.js +87 -0
- package/dist/src/core/conflict-detector.js.map +1 -0
- package/dist/src/core/conflict-enforcer.d.ts +37 -0
- package/dist/src/core/conflict-enforcer.d.ts.map +1 -0
- package/dist/src/core/conflict-enforcer.js +139 -0
- package/dist/src/core/conflict-enforcer.js.map +1 -0
- package/dist/src/core/cost-store.d.ts +55 -0
- package/dist/src/core/cost-store.d.ts.map +1 -0
- package/dist/src/core/cost-store.js +140 -0
- package/dist/src/core/cost-store.js.map +1 -0
- package/dist/src/core/hot-files.d.ts +19 -0
- package/dist/src/core/hot-files.d.ts.map +1 -0
- package/dist/src/core/hot-files.js +64 -0
- package/dist/src/core/hot-files.js.map +1 -0
- package/dist/src/core/human-action-store.d.ts +33 -0
- package/dist/src/core/human-action-store.d.ts.map +1 -0
- package/dist/src/core/human-action-store.js +92 -0
- package/dist/src/core/human-action-store.js.map +1 -0
- package/dist/src/core/learning-store.d.ts +32 -0
- package/dist/src/core/learning-store.d.ts.map +1 -0
- package/dist/src/core/learning-store.js +95 -0
- package/dist/src/core/learning-store.js.map +1 -0
- package/dist/src/core/merge-queue.d.ts +28 -0
- package/dist/src/core/merge-queue.d.ts.map +1 -0
- package/dist/src/core/merge-queue.js +92 -0
- package/dist/src/core/merge-queue.js.map +1 -0
- package/dist/src/core/notification-service.d.ts +13 -0
- package/dist/src/core/notification-service.d.ts.map +1 -0
- package/dist/src/core/notification-service.js +126 -0
- package/dist/src/core/notification-service.js.map +1 -0
- package/dist/src/core/notifications.d.ts +10 -0
- package/dist/src/core/notifications.d.ts.map +1 -0
- package/dist/src/core/notifications.js +33 -0
- package/dist/src/core/notifications.js.map +1 -0
- package/dist/src/core/orchestrator-store.d.ts +44 -0
- package/dist/src/core/orchestrator-store.d.ts.map +1 -0
- package/dist/src/core/orchestrator-store.js +69 -0
- package/dist/src/core/orchestrator-store.js.map +1 -0
- package/dist/src/core/parallelizer.d.ts +47 -0
- package/dist/src/core/parallelizer.d.ts.map +1 -0
- package/dist/src/core/parallelizer.js +224 -0
- package/dist/src/core/parallelizer.js.map +1 -0
- package/dist/src/core/pipeline-rollback.d.ts +29 -0
- package/dist/src/core/pipeline-rollback.d.ts.map +1 -0
- package/dist/src/core/pipeline-rollback.js +84 -0
- package/dist/src/core/pipeline-rollback.js.map +1 -0
- package/dist/src/core/pipeline-runner.d.ts +73 -0
- package/dist/src/core/pipeline-runner.d.ts.map +1 -0
- package/dist/src/core/pipeline-runner.js +165 -0
- package/dist/src/core/pipeline-runner.js.map +1 -0
- package/dist/src/core/pr-creator.d.ts +22 -0
- package/dist/src/core/pr-creator.d.ts.map +1 -0
- package/dist/src/core/pr-creator.js +55 -0
- package/dist/src/core/pr-creator.js.map +1 -0
- package/dist/src/core/rbac.d.ts +27 -0
- package/dist/src/core/rbac.d.ts.map +1 -0
- package/dist/src/core/rbac.js +76 -0
- package/dist/src/core/rbac.js.map +1 -0
- package/dist/src/core/startup-cleanup.d.ts +47 -0
- package/dist/src/core/startup-cleanup.d.ts.map +1 -0
- package/dist/src/core/startup-cleanup.js +150 -0
- package/dist/src/core/startup-cleanup.js.map +1 -0
- package/dist/src/core/task-store.d.ts +96 -0
- package/dist/src/core/task-store.d.ts.map +1 -0
- package/dist/src/core/task-store.js +309 -0
- package/dist/src/core/task-store.js.map +1 -0
- package/dist/src/core/verbo-config-editor.d.ts +44 -0
- package/dist/src/core/verbo-config-editor.d.ts.map +1 -0
- package/dist/src/core/verbo-config-editor.js +204 -0
- package/dist/src/core/verbo-config-editor.js.map +1 -0
- package/dist/src/core/verbo-config.d.ts +35 -0
- package/dist/src/core/verbo-config.d.ts.map +1 -0
- package/dist/src/core/verbo-config.js +55 -0
- package/dist/src/core/verbo-config.js.map +1 -0
- package/dist/src/core/verbo-md.d.ts +96 -0
- package/dist/src/core/verbo-md.d.ts.map +1 -0
- package/dist/src/core/verbo-md.js +410 -0
- package/dist/src/core/verbo-md.js.map +1 -0
- package/dist/src/db/database.d.ts +9 -0
- package/dist/src/db/database.d.ts.map +1 -0
- package/dist/src/db/database.js +37 -0
- package/dist/src/db/database.js.map +1 -0
- package/dist/src/db/migrations/001-personas-subtasks.d.ts +10 -0
- package/dist/src/db/migrations/001-personas-subtasks.d.ts.map +1 -0
- package/dist/src/db/migrations/001-personas-subtasks.js +32 -0
- package/dist/src/db/migrations/001-personas-subtasks.js.map +1 -0
- package/dist/src/db/migrations/002-rbac.d.ts +9 -0
- package/dist/src/db/migrations/002-rbac.d.ts.map +1 -0
- package/dist/src/db/migrations/002-rbac.js +31 -0
- package/dist/src/db/migrations/002-rbac.js.map +1 -0
- package/dist/src/db/migrations/003-provider-column.d.ts +8 -0
- package/dist/src/db/migrations/003-provider-column.d.ts.map +1 -0
- package/dist/src/db/migrations/003-provider-column.js +12 -0
- package/dist/src/db/migrations/003-provider-column.js.map +1 -0
- package/dist/src/db/migrations/004-pipeline-cost.d.ts +8 -0
- package/dist/src/db/migrations/004-pipeline-cost.d.ts.map +1 -0
- package/dist/src/db/migrations/004-pipeline-cost.js +23 -0
- package/dist/src/db/migrations/004-pipeline-cost.js.map +1 -0
- package/dist/src/db/migrations/005-audit-log-timestamp.d.ts +10 -0
- package/dist/src/db/migrations/005-audit-log-timestamp.d.ts.map +1 -0
- package/dist/src/db/migrations/005-audit-log-timestamp.js +39 -0
- package/dist/src/db/migrations/005-audit-log-timestamp.js.map +1 -0
- package/dist/src/db/migrations/006-human-action-type.d.ts +9 -0
- package/dist/src/db/migrations/006-human-action-type.d.ts.map +1 -0
- package/dist/src/db/migrations/006-human-action-type.js +16 -0
- package/dist/src/db/migrations/006-human-action-type.js.map +1 -0
- package/dist/src/db/schema.d.ts +6 -0
- package/dist/src/db/schema.d.ts.map +1 -0
- package/dist/src/db/schema.js +255 -0
- package/dist/src/db/schema.js.map +1 -0
- package/dist/src/deps/dependabot-generator.d.ts +22 -0
- package/dist/src/deps/dependabot-generator.d.ts.map +1 -0
- package/dist/src/deps/dependabot-generator.js +83 -0
- package/dist/src/deps/dependabot-generator.js.map +1 -0
- package/dist/src/deps/dependabot-monitor.d.ts +22 -0
- package/dist/src/deps/dependabot-monitor.d.ts.map +1 -0
- package/dist/src/deps/dependabot-monitor.js +28 -0
- package/dist/src/deps/dependabot-monitor.js.map +1 -0
- package/dist/src/deps/package-auditor.d.ts +24 -0
- package/dist/src/deps/package-auditor.d.ts.map +1 -0
- package/dist/src/deps/package-auditor.js +118 -0
- package/dist/src/deps/package-auditor.js.map +1 -0
- package/dist/src/init/ensure-init.d.ts +6 -0
- package/dist/src/init/ensure-init.d.ts.map +1 -0
- package/dist/src/init/ensure-init.js +27 -0
- package/dist/src/init/ensure-init.js.map +1 -0
- package/dist/src/init/project-detector.d.ts +11 -0
- package/dist/src/init/project-detector.d.ts.map +1 -0
- package/dist/src/init/project-detector.js +117 -0
- package/dist/src/init/project-detector.js.map +1 -0
- package/dist/src/init/questionnaire.d.ts +5 -0
- package/dist/src/init/questionnaire.d.ts.map +1 -0
- package/dist/src/init/questionnaire.js +112 -0
- package/dist/src/init/questionnaire.js.map +1 -0
- package/dist/src/init/template.d.ts +17 -0
- package/dist/src/init/template.d.ts.map +1 -0
- package/dist/src/init/template.js +46 -0
- package/dist/src/init/template.js.map +1 -0
- package/dist/src/intelligence/claude-client.d.ts +3 -0
- package/dist/src/intelligence/claude-client.d.ts.map +1 -0
- package/dist/src/intelligence/claude-client.js +12 -0
- package/dist/src/intelligence/claude-client.js.map +1 -0
- package/dist/src/intelligence/conflict-mediator.d.ts +17 -0
- package/dist/src/intelligence/conflict-mediator.d.ts.map +1 -0
- package/dist/src/intelligence/conflict-mediator.js +83 -0
- package/dist/src/intelligence/conflict-mediator.js.map +1 -0
- package/dist/src/intelligence/github-orchestrator.d.ts +30 -0
- package/dist/src/intelligence/github-orchestrator.d.ts.map +1 -0
- package/dist/src/intelligence/github-orchestrator.js +270 -0
- package/dist/src/intelligence/github-orchestrator.js.map +1 -0
- package/dist/src/intelligence/kill-switch.d.ts +10 -0
- package/dist/src/intelligence/kill-switch.d.ts.map +1 -0
- package/dist/src/intelligence/kill-switch.js +12 -0
- package/dist/src/intelligence/kill-switch.js.map +1 -0
- package/dist/src/intelligence/learnings-extractor.d.ts +13 -0
- package/dist/src/intelligence/learnings-extractor.d.ts.map +1 -0
- package/dist/src/intelligence/learnings-extractor.js +74 -0
- package/dist/src/intelligence/learnings-extractor.js.map +1 -0
- package/dist/src/intelligence/project-scanner.d.ts +2 -0
- package/dist/src/intelligence/project-scanner.d.ts.map +1 -0
- package/dist/src/intelligence/project-scanner.js +28 -0
- package/dist/src/intelligence/project-scanner.js.map +1 -0
- package/dist/src/intelligence/task-decomposer.d.ts +14 -0
- package/dist/src/intelligence/task-decomposer.d.ts.map +1 -0
- package/dist/src/intelligence/task-decomposer.js +97 -0
- package/dist/src/intelligence/task-decomposer.js.map +1 -0
- package/dist/src/intelligence/types.d.ts +14 -0
- package/dist/src/intelligence/types.d.ts.map +1 -0
- package/dist/src/intelligence/types.js +2 -0
- package/dist/src/intelligence/types.js.map +1 -0
- package/dist/src/mcp/server.d.ts +63 -0
- package/dist/src/mcp/server.d.ts.map +1 -0
- package/dist/src/mcp/server.js +537 -0
- package/dist/src/mcp/server.js.map +1 -0
- package/dist/src/mcp/stdio-entry.d.ts +2 -0
- package/dist/src/mcp/stdio-entry.d.ts.map +1 -0
- package/dist/src/mcp/stdio-entry.js +124 -0
- package/dist/src/mcp/stdio-entry.js.map +1 -0
- package/dist/src/mcp/subtask-handlers.d.ts +7 -0
- package/dist/src/mcp/subtask-handlers.d.ts.map +1 -0
- package/dist/src/mcp/subtask-handlers.js +50 -0
- package/dist/src/mcp/subtask-handlers.js.map +1 -0
- package/dist/src/security/network-proxy.d.ts +20 -0
- package/dist/src/security/network-proxy.d.ts.map +1 -0
- package/dist/src/security/network-proxy.js +125 -0
- package/dist/src/security/network-proxy.js.map +1 -0
- package/dist/src/security/network-sandbox.d.ts +19 -0
- package/dist/src/security/network-sandbox.d.ts.map +1 -0
- package/dist/src/security/network-sandbox.js +100 -0
- package/dist/src/security/network-sandbox.js.map +1 -0
- package/dist/src/security/sanitize.d.ts +13 -0
- package/dist/src/security/sanitize.d.ts.map +1 -0
- package/dist/src/security/sanitize.js +19 -0
- package/dist/src/security/sanitize.js.map +1 -0
- package/dist/src/security/secrets-patterns.d.ts +29 -0
- package/dist/src/security/secrets-patterns.d.ts.map +1 -0
- package/dist/src/security/secrets-patterns.js +430 -0
- package/dist/src/security/secrets-patterns.js.map +1 -0
- package/dist/src/security/secrets-scanner.d.ts +26 -0
- package/dist/src/security/secrets-scanner.d.ts.map +1 -0
- package/dist/src/security/secrets-scanner.js +62 -0
- package/dist/src/security/secrets-scanner.js.map +1 -0
- package/dist/src/skills/classifier.d.ts +9 -0
- package/dist/src/skills/classifier.d.ts.map +1 -0
- package/dist/src/skills/classifier.js +41 -0
- package/dist/src/skills/classifier.js.map +1 -0
- package/dist/src/skills/registry.d.ts +16 -0
- package/dist/src/skills/registry.d.ts.map +1 -0
- package/dist/src/skills/registry.js +61 -0
- package/dist/src/skills/registry.js.map +1 -0
- package/dist/src/sync/events.d.ts +9 -0
- package/dist/src/sync/events.d.ts.map +1 -0
- package/dist/src/sync/events.js +2 -0
- package/dist/src/sync/events.js.map +1 -0
- package/dist/src/sync/relay-server.d.ts +18 -0
- package/dist/src/sync/relay-server.d.ts.map +1 -0
- package/dist/src/sync/relay-server.js +131 -0
- package/dist/src/sync/relay-server.js.map +1 -0
- package/dist/src/sync/sync-client.d.ts +31 -0
- package/dist/src/sync/sync-client.d.ts.map +1 -0
- package/dist/src/sync/sync-client.js +314 -0
- package/dist/src/sync/sync-client.js.map +1 -0
- package/dist/src/tui/app.d.ts +35 -0
- package/dist/src/tui/app.d.ts.map +1 -0
- package/dist/src/tui/app.js +676 -0
- package/dist/src/tui/app.js.map +1 -0
- package/dist/src/tui/components/activity-feed.d.ts +12 -0
- package/dist/src/tui/components/activity-feed.d.ts.map +1 -0
- package/dist/src/tui/components/activity-feed.js +82 -0
- package/dist/src/tui/components/activity-feed.js.map +1 -0
- package/dist/src/tui/components/agent-list.d.ts +19 -0
- package/dist/src/tui/components/agent-list.d.ts.map +1 -0
- package/dist/src/tui/components/agent-list.js +33 -0
- package/dist/src/tui/components/agent-list.js.map +1 -0
- package/dist/src/tui/components/agent-row.d.ts +12 -0
- package/dist/src/tui/components/agent-row.d.ts.map +1 -0
- package/dist/src/tui/components/agent-row.js +37 -0
- package/dist/src/tui/components/agent-row.js.map +1 -0
- package/dist/src/tui/components/approval-terminal.d.ts +13 -0
- package/dist/src/tui/components/approval-terminal.d.ts.map +1 -0
- package/dist/src/tui/components/approval-terminal.js +34 -0
- package/dist/src/tui/components/approval-terminal.js.map +1 -0
- package/dist/src/tui/components/audit-viewer.d.ts +16 -0
- package/dist/src/tui/components/audit-viewer.d.ts.map +1 -0
- package/dist/src/tui/components/audit-viewer.js +46 -0
- package/dist/src/tui/components/audit-viewer.js.map +1 -0
- package/dist/src/tui/components/auth-gate.d.ts +9 -0
- package/dist/src/tui/components/auth-gate.d.ts.map +1 -0
- package/dist/src/tui/components/auth-gate.js +112 -0
- package/dist/src/tui/components/auth-gate.js.map +1 -0
- package/dist/src/tui/components/command-palette.d.ts +12 -0
- package/dist/src/tui/components/command-palette.d.ts.map +1 -0
- package/dist/src/tui/components/command-palette.js +51 -0
- package/dist/src/tui/components/command-palette.js.map +1 -0
- package/dist/src/tui/components/compliance-badge.d.ts +11 -0
- package/dist/src/tui/components/compliance-badge.d.ts.map +1 -0
- package/dist/src/tui/components/compliance-badge.js +12 -0
- package/dist/src/tui/components/compliance-badge.js.map +1 -0
- package/dist/src/tui/components/decomposition-review.d.ts +10 -0
- package/dist/src/tui/components/decomposition-review.d.ts.map +1 -0
- package/dist/src/tui/components/decomposition-review.js +19 -0
- package/dist/src/tui/components/decomposition-review.js.map +1 -0
- package/dist/src/tui/components/dependency-graph.d.ts +13 -0
- package/dist/src/tui/components/dependency-graph.d.ts.map +1 -0
- package/dist/src/tui/components/dependency-graph.js +143 -0
- package/dist/src/tui/components/dependency-graph.js.map +1 -0
- package/dist/src/tui/components/diff-viewer.d.ts +11 -0
- package/dist/src/tui/components/diff-viewer.d.ts.map +1 -0
- package/dist/src/tui/components/diff-viewer.js +82 -0
- package/dist/src/tui/components/diff-viewer.js.map +1 -0
- package/dist/src/tui/components/edit-task-input.d.ts +10 -0
- package/dist/src/tui/components/edit-task-input.d.ts.map +1 -0
- package/dist/src/tui/components/edit-task-input.js +20 -0
- package/dist/src/tui/components/edit-task-input.js.map +1 -0
- package/dist/src/tui/components/footer.d.ts +12 -0
- package/dist/src/tui/components/footer.d.ts.map +1 -0
- package/dist/src/tui/components/footer.js +41 -0
- package/dist/src/tui/components/footer.js.map +1 -0
- package/dist/src/tui/components/header.d.ts +8 -0
- package/dist/src/tui/components/header.d.ts.map +1 -0
- package/dist/src/tui/components/header.js +20 -0
- package/dist/src/tui/components/header.js.map +1 -0
- package/dist/src/tui/components/human-actions.d.ts +14 -0
- package/dist/src/tui/components/human-actions.d.ts.map +1 -0
- package/dist/src/tui/components/human-actions.js +43 -0
- package/dist/src/tui/components/human-actions.js.map +1 -0
- package/dist/src/tui/components/log-panel.d.ts +10 -0
- package/dist/src/tui/components/log-panel.d.ts.map +1 -0
- package/dist/src/tui/components/log-panel.js +38 -0
- package/dist/src/tui/components/log-panel.js.map +1 -0
- package/dist/src/tui/components/memory-viewer.d.ts +10 -0
- package/dist/src/tui/components/memory-viewer.d.ts.map +1 -0
- package/dist/src/tui/components/memory-viewer.js +44 -0
- package/dist/src/tui/components/memory-viewer.js.map +1 -0
- package/dist/src/tui/components/new-task-input.d.ts +9 -0
- package/dist/src/tui/components/new-task-input.d.ts.map +1 -0
- package/dist/src/tui/components/new-task-input.js +21 -0
- package/dist/src/tui/components/new-task-input.js.map +1 -0
- package/dist/src/tui/components/orchestrator-status.d.ts +9 -0
- package/dist/src/tui/components/orchestrator-status.d.ts.map +1 -0
- package/dist/src/tui/components/orchestrator-status.js +15 -0
- package/dist/src/tui/components/orchestrator-status.js.map +1 -0
- package/dist/src/tui/components/parallelize-banner.d.ts +8 -0
- package/dist/src/tui/components/parallelize-banner.d.ts.map +1 -0
- package/dist/src/tui/components/parallelize-banner.js +9 -0
- package/dist/src/tui/components/parallelize-banner.js.map +1 -0
- package/dist/src/tui/components/progress-bar.d.ts +9 -0
- package/dist/src/tui/components/progress-bar.d.ts.map +1 -0
- package/dist/src/tui/components/progress-bar.js +15 -0
- package/dist/src/tui/components/progress-bar.js.map +1 -0
- package/dist/src/tui/components/review-queue.d.ts +13 -0
- package/dist/src/tui/components/review-queue.d.ts.map +1 -0
- package/dist/src/tui/components/review-queue.js +78 -0
- package/dist/src/tui/components/review-queue.js.map +1 -0
- package/dist/src/tui/components/rich-header.d.ts +11 -0
- package/dist/src/tui/components/rich-header.d.ts.map +1 -0
- package/dist/src/tui/components/rich-header.js +25 -0
- package/dist/src/tui/components/rich-header.js.map +1 -0
- package/dist/src/tui/components/spinner.d.ts +7 -0
- package/dist/src/tui/components/spinner.d.ts.map +1 -0
- package/dist/src/tui/components/spinner.js +8 -0
- package/dist/src/tui/components/spinner.js.map +1 -0
- package/dist/src/tui/components/status-bar.d.ts +23 -0
- package/dist/src/tui/components/status-bar.d.ts.map +1 -0
- package/dist/src/tui/components/status-bar.js +28 -0
- package/dist/src/tui/components/status-bar.js.map +1 -0
- package/dist/src/tui/components/task-queue.d.ts +11 -0
- package/dist/src/tui/components/task-queue.d.ts.map +1 -0
- package/dist/src/tui/components/task-queue.js +30 -0
- package/dist/src/tui/components/task-queue.js.map +1 -0
- package/dist/src/tui/components/team-view.d.ts +13 -0
- package/dist/src/tui/components/team-view.d.ts.map +1 -0
- package/dist/src/tui/components/team-view.js +12 -0
- package/dist/src/tui/components/team-view.js.map +1 -0
- package/dist/src/tui/graph-renderer.d.ts +11 -0
- package/dist/src/tui/graph-renderer.d.ts.map +1 -0
- package/dist/src/tui/graph-renderer.js +296 -0
- package/dist/src/tui/graph-renderer.js.map +1 -0
- package/dist/src/tui/hooks/use-bell.d.ts +21 -0
- package/dist/src/tui/hooks/use-bell.d.ts.map +1 -0
- package/dist/src/tui/hooks/use-bell.js +38 -0
- package/dist/src/tui/hooks/use-bell.js.map +1 -0
- package/dist/src/tui/hooks/use-ci-status.d.ts +16 -0
- package/dist/src/tui/hooks/use-ci-status.d.ts.map +1 -0
- package/dist/src/tui/hooks/use-ci-status.js +97 -0
- package/dist/src/tui/hooks/use-ci-status.js.map +1 -0
- package/dist/src/tui/hooks/use-command-palette.d.ts +37 -0
- package/dist/src/tui/hooks/use-command-palette.d.ts.map +1 -0
- package/dist/src/tui/hooks/use-command-palette.js +108 -0
- package/dist/src/tui/hooks/use-command-palette.js.map +1 -0
- package/dist/src/tui/hooks/use-diff-view.d.ts +16 -0
- package/dist/src/tui/hooks/use-diff-view.d.ts.map +1 -0
- package/dist/src/tui/hooks/use-diff-view.js +75 -0
- package/dist/src/tui/hooks/use-diff-view.js.map +1 -0
- package/dist/src/tui/hooks/use-keyboard.d.ts +3 -0
- package/dist/src/tui/hooks/use-keyboard.d.ts.map +1 -0
- package/dist/src/tui/hooks/use-keyboard.js +70 -0
- package/dist/src/tui/hooks/use-keyboard.js.map +1 -0
- package/dist/src/tui/hooks/use-log-stream.d.ts +25 -0
- package/dist/src/tui/hooks/use-log-stream.d.ts.map +1 -0
- package/dist/src/tui/hooks/use-log-stream.js +83 -0
- package/dist/src/tui/hooks/use-log-stream.js.map +1 -0
- package/dist/src/tui/hooks/use-spinner.d.ts +3 -0
- package/dist/src/tui/hooks/use-spinner.d.ts.map +1 -0
- package/dist/src/tui/hooks/use-spinner.js +13 -0
- package/dist/src/tui/hooks/use-spinner.js.map +1 -0
- package/dist/src/tui/hooks/use-store.d.ts +33 -0
- package/dist/src/tui/hooks/use-store.d.ts.map +1 -0
- package/dist/src/tui/hooks/use-store.js +21 -0
- package/dist/src/tui/hooks/use-store.js.map +1 -0
- package/dist/src/tui/lib/diff-parser.d.ts +24 -0
- package/dist/src/tui/lib/diff-parser.d.ts.map +1 -0
- package/dist/src/tui/lib/diff-parser.js +115 -0
- package/dist/src/tui/lib/diff-parser.js.map +1 -0
- package/dist/src/tui/lib/palette-commands.d.ts +14 -0
- package/dist/src/tui/lib/palette-commands.d.ts.map +1 -0
- package/dist/src/tui/lib/palette-commands.js +101 -0
- package/dist/src/tui/lib/palette-commands.js.map +1 -0
- package/dist/src/tui/tui.d.ts +8 -0
- package/dist/src/tui/tui.d.ts.map +1 -0
- package/dist/src/tui/tui.js +8 -0
- package/dist/src/tui/tui.js.map +1 -0
- package/package.json +66 -0
- package/skills/api-design.md +84 -0
- package/skills/backend-typescript.md +76 -0
- package/skills/data-modeling.md +73 -0
- package/skills/devops-ci.md +82 -0
- package/skills/frontend-design.md +69 -0
- package/skills/observability.md +73 -0
- package/skills/react-nextjs.md +76 -0
- package/skills/refactoring.md +77 -0
- package/skills/security.md +75 -0
- package/skills/testing.md +69 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { useState, useEffect, useRef, useMemo } from 'react';
|
|
2
|
+
import { execFile } from 'child_process';
|
|
3
|
+
export function parsePrUrl(prUrl) {
|
|
4
|
+
const match = prUrl.match(/github\.com\/([^/]+)\/([^/]+)\/pull\/(\d+)/);
|
|
5
|
+
if (!match)
|
|
6
|
+
return null;
|
|
7
|
+
return { owner: match[1], repo: match[2], number: parseInt(match[3], 10) };
|
|
8
|
+
}
|
|
9
|
+
export function deriveStatus(checks) {
|
|
10
|
+
if (checks.length === 0)
|
|
11
|
+
return 'pending';
|
|
12
|
+
const hasFailure = checks.some((c) => c.conclusion === 'FAILURE' ||
|
|
13
|
+
c.conclusion === 'ACTION_REQUIRED' ||
|
|
14
|
+
c.conclusion === 'TIMED_OUT' ||
|
|
15
|
+
c.conclusion === 'CANCELLED');
|
|
16
|
+
if (hasFailure)
|
|
17
|
+
return 'failure';
|
|
18
|
+
const allDone = checks.every((c) => c.conclusion === 'SUCCESS' ||
|
|
19
|
+
c.conclusion === 'NEUTRAL' ||
|
|
20
|
+
c.conclusion === 'SKIPPED');
|
|
21
|
+
if (allDone)
|
|
22
|
+
return 'success';
|
|
23
|
+
return 'pending';
|
|
24
|
+
}
|
|
25
|
+
export function fetchCiForPr(prUrl) {
|
|
26
|
+
return new Promise((resolve) => {
|
|
27
|
+
const pr = parsePrUrl(prUrl);
|
|
28
|
+
if (!pr) {
|
|
29
|
+
resolve('error');
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
execFile('gh', [
|
|
33
|
+
'pr',
|
|
34
|
+
'view',
|
|
35
|
+
String(pr.number),
|
|
36
|
+
'--repo',
|
|
37
|
+
`${pr.owner}/${pr.repo}`,
|
|
38
|
+
'--json',
|
|
39
|
+
'statusCheckRollup',
|
|
40
|
+
], { timeout: 10_000 }, (err, stdout) => {
|
|
41
|
+
if (err) {
|
|
42
|
+
resolve('error');
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
try {
|
|
46
|
+
const data = JSON.parse(stdout);
|
|
47
|
+
const checks = data.statusCheckRollup ?? [];
|
|
48
|
+
resolve(deriveStatus(checks));
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
resolve('error');
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
const DEFAULT_POLL_MS = 30_000;
|
|
57
|
+
export function useCiStatus(tasks, pollIntervalMs = DEFAULT_POLL_MS) {
|
|
58
|
+
const [statuses, setStatuses] = useState(new Map());
|
|
59
|
+
const tasksRef = useRef(tasks);
|
|
60
|
+
tasksRef.current = tasks;
|
|
61
|
+
// Stable key: only re-poll when the set of done-task PR URLs changes
|
|
62
|
+
const prKey = useMemo(() => tasks
|
|
63
|
+
.filter((t) => t.status === 'done' && t.prUrl)
|
|
64
|
+
.map((t) => `${t.id}:${t.prUrl}`)
|
|
65
|
+
.join(','), [tasks]);
|
|
66
|
+
useEffect(() => {
|
|
67
|
+
let cancelled = false;
|
|
68
|
+
async function poll() {
|
|
69
|
+
const prTasks = tasksRef.current.filter((t) => t.status === 'done' && t.prUrl);
|
|
70
|
+
if (prTasks.length === 0) {
|
|
71
|
+
setStatuses(new Map());
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const results = await Promise.allSettled(prTasks.map(async (task) => {
|
|
75
|
+
const status = await fetchCiForPr(task.prUrl);
|
|
76
|
+
return { taskId: task.id, status };
|
|
77
|
+
}));
|
|
78
|
+
if (cancelled)
|
|
79
|
+
return;
|
|
80
|
+
const newMap = new Map();
|
|
81
|
+
for (const result of results) {
|
|
82
|
+
if (result.status === 'fulfilled') {
|
|
83
|
+
newMap.set(result.value.taskId, result.value.status);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
setStatuses(newMap);
|
|
87
|
+
}
|
|
88
|
+
poll();
|
|
89
|
+
const timer = setInterval(poll, pollIntervalMs);
|
|
90
|
+
return () => {
|
|
91
|
+
cancelled = true;
|
|
92
|
+
clearInterval(timer);
|
|
93
|
+
};
|
|
94
|
+
}, [prKey, pollIntervalMs]);
|
|
95
|
+
return statuses;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=use-ci-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-ci-status.js","sourceRoot":"","sources":["../../../../src/tui/hooks/use-ci-status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { Dispatch, SetStateAction } from 'react';
|
|
2
|
+
import type { PaletteCommand } from '../lib/palette-commands.js';
|
|
3
|
+
export interface FuzzyMatch {
|
|
4
|
+
score: number;
|
|
5
|
+
/** Matched character positions within the label string. */
|
|
6
|
+
indices: number[];
|
|
7
|
+
}
|
|
8
|
+
export interface PaletteResult extends PaletteCommand {
|
|
9
|
+
match: FuzzyMatch;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Fuzzy-scores a query against a text string.
|
|
13
|
+
*
|
|
14
|
+
* Returns null when not all query characters appear (in order) in text.
|
|
15
|
+
* Returns a FuzzyMatch with a score and the matched char positions otherwise.
|
|
16
|
+
*
|
|
17
|
+
* Scoring bonuses applied:
|
|
18
|
+
* - +10 per matched character (base)
|
|
19
|
+
* - +5 for each pair of consecutive matched characters
|
|
20
|
+
* - +15 when the first matched character is at position 0
|
|
21
|
+
* - +3 for each matched character that starts a word (preceded by space/dash/underscore)
|
|
22
|
+
* - -0.1 × span (first-to-last match distance) to favour compact matches
|
|
23
|
+
*/
|
|
24
|
+
export declare function fuzzyScore(query: string, text: string): FuzzyMatch | null;
|
|
25
|
+
export interface CommandPaletteState {
|
|
26
|
+
query: string;
|
|
27
|
+
/** Update the search query; also resets selectedIndex to 0. */
|
|
28
|
+
setQuery: (q: string) => void;
|
|
29
|
+
results: PaletteResult[];
|
|
30
|
+
selectedIndex: number;
|
|
31
|
+
setSelectedIndex: Dispatch<SetStateAction<number>>;
|
|
32
|
+
/** Record that a command was used (moves it to front of recency list). */
|
|
33
|
+
recordUsed: (commandId: string) => void;
|
|
34
|
+
recentIds: readonly string[];
|
|
35
|
+
}
|
|
36
|
+
export declare function useCommandPalette(commands: PaletteCommand[]): CommandPaletteState;
|
|
37
|
+
//# sourceMappingURL=use-command-palette.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-command-palette.d.ts","sourceRoot":"","sources":["../../../../src/tui/hooks/use-command-palette.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,aAAc,SAAQ,cAAc;IACnD,KAAK,EAAE,UAAU,CAAC;CACnB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAkDzE;AAID,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IACnD,0EAA0E;IAC1E,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9B;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,mBAAmB,CAuDjF"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { useState, useMemo, useCallback } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Fuzzy-scores a query against a text string.
|
|
4
|
+
*
|
|
5
|
+
* Returns null when not all query characters appear (in order) in text.
|
|
6
|
+
* Returns a FuzzyMatch with a score and the matched char positions otherwise.
|
|
7
|
+
*
|
|
8
|
+
* Scoring bonuses applied:
|
|
9
|
+
* - +10 per matched character (base)
|
|
10
|
+
* - +5 for each pair of consecutive matched characters
|
|
11
|
+
* - +15 when the first matched character is at position 0
|
|
12
|
+
* - +3 for each matched character that starts a word (preceded by space/dash/underscore)
|
|
13
|
+
* - -0.1 × span (first-to-last match distance) to favour compact matches
|
|
14
|
+
*/
|
|
15
|
+
export function fuzzyScore(query, text) {
|
|
16
|
+
if (query === '') {
|
|
17
|
+
return { score: 0, indices: [] };
|
|
18
|
+
}
|
|
19
|
+
const q = query.toLowerCase();
|
|
20
|
+
const t = text.toLowerCase();
|
|
21
|
+
const indices = [];
|
|
22
|
+
let qi = 0;
|
|
23
|
+
for (let ti = 0; ti < t.length && qi < q.length; ti++) {
|
|
24
|
+
if (t[ti] === q[qi]) {
|
|
25
|
+
indices.push(ti);
|
|
26
|
+
qi++;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
if (qi < q.length) {
|
|
30
|
+
return null; // not all query chars found in text
|
|
31
|
+
}
|
|
32
|
+
let score = indices.length * 10;
|
|
33
|
+
// Consecutive match bonus
|
|
34
|
+
for (let i = 1; i < indices.length; i++) {
|
|
35
|
+
if (indices[i] === indices[i - 1] + 1) {
|
|
36
|
+
score += 5;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// Start-of-string bonus
|
|
40
|
+
if (indices[0] === 0) {
|
|
41
|
+
score += 15;
|
|
42
|
+
}
|
|
43
|
+
// Word-boundary bonus
|
|
44
|
+
for (const idx of indices) {
|
|
45
|
+
if (idx > 0) {
|
|
46
|
+
const prev = text[idx - 1];
|
|
47
|
+
if (prev === ' ' || prev === '-' || prev === '_') {
|
|
48
|
+
score += 3;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Span penalty: prefer matches that are clustered together
|
|
53
|
+
const span = indices[indices.length - 1] - indices[0] + 1;
|
|
54
|
+
score -= span * 0.1;
|
|
55
|
+
return { score, indices };
|
|
56
|
+
}
|
|
57
|
+
const MAX_RECENT = 5;
|
|
58
|
+
export function useCommandPalette(commands) {
|
|
59
|
+
const [query, setQueryRaw] = useState('');
|
|
60
|
+
const [selectedIndex, setSelectedIndex] = useState(0);
|
|
61
|
+
const [recentIds, setRecentIds] = useState([]);
|
|
62
|
+
// Wrap setQuery so it also resets the selection cursor
|
|
63
|
+
const setQuery = useCallback((q) => {
|
|
64
|
+
setQueryRaw(q);
|
|
65
|
+
setSelectedIndex(0);
|
|
66
|
+
}, []);
|
|
67
|
+
const results = useMemo(() => {
|
|
68
|
+
const matched = [];
|
|
69
|
+
for (const cmd of commands) {
|
|
70
|
+
const match = fuzzyScore(query, cmd.label);
|
|
71
|
+
if (match !== null) {
|
|
72
|
+
matched.push({ ...cmd, match });
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
matched.sort((a, b) => {
|
|
76
|
+
const ai = recentIds.indexOf(a.id);
|
|
77
|
+
const bi = recentIds.indexOf(b.id);
|
|
78
|
+
// Both recently used: preserve recency order (lower index = more recent)
|
|
79
|
+
if (ai !== -1 && bi !== -1)
|
|
80
|
+
return ai - bi;
|
|
81
|
+
// Only a is recent: promote it
|
|
82
|
+
if (ai !== -1)
|
|
83
|
+
return -1;
|
|
84
|
+
// Only b is recent: promote it
|
|
85
|
+
if (bi !== -1)
|
|
86
|
+
return 1;
|
|
87
|
+
// Neither is recent: rank by fuzzy score descending
|
|
88
|
+
return b.match.score - a.match.score;
|
|
89
|
+
});
|
|
90
|
+
return matched;
|
|
91
|
+
}, [commands, query, recentIds]);
|
|
92
|
+
const recordUsed = useCallback((commandId) => {
|
|
93
|
+
setRecentIds((prev) => {
|
|
94
|
+
const filtered = prev.filter((id) => id !== commandId);
|
|
95
|
+
return [commandId, ...filtered].slice(0, MAX_RECENT);
|
|
96
|
+
});
|
|
97
|
+
}, []);
|
|
98
|
+
return {
|
|
99
|
+
query,
|
|
100
|
+
setQuery,
|
|
101
|
+
results,
|
|
102
|
+
selectedIndex,
|
|
103
|
+
setSelectedIndex,
|
|
104
|
+
recordUsed,
|
|
105
|
+
recentIds,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=use-command-palette.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-command-palette.js","sourceRoot":"","sources":["../../../../src/tui/hooks/use-command-palette.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { DiffFile } from '../lib/diff-parser.js';
|
|
2
|
+
export interface DiffViewState {
|
|
3
|
+
files: DiffFile[];
|
|
4
|
+
loading: boolean;
|
|
5
|
+
error: string | null;
|
|
6
|
+
fileIndex: number;
|
|
7
|
+
hunkIndex: number;
|
|
8
|
+
}
|
|
9
|
+
export interface UseDiffViewResult extends DiffViewState {
|
|
10
|
+
nextFile: () => void;
|
|
11
|
+
prevFile: () => void;
|
|
12
|
+
nextHunk: () => void;
|
|
13
|
+
prevHunk: () => void;
|
|
14
|
+
}
|
|
15
|
+
export declare function useDiffView(worktreePath: string | null, branch: string | null, baseBranch?: string): UseDiffViewResult;
|
|
16
|
+
//# sourceMappingURL=use-diff-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-diff-view.d.ts","sourceRoot":"","sources":["../../../../src/tui/hooks/use-diff-view.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,wBAAgB,WAAW,CACzB,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,UAAU,SAAW,GACpB,iBAAiB,CA2EnB"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { useState, useEffect, useCallback, useRef } from 'react';
|
|
2
|
+
import { simpleGit } from 'simple-git';
|
|
3
|
+
import { parseDiff } from '../lib/diff-parser.js';
|
|
4
|
+
export function useDiffView(worktreePath, branch, baseBranch = 'master') {
|
|
5
|
+
const [files, setFiles] = useState([]);
|
|
6
|
+
const [loading, setLoading] = useState(false);
|
|
7
|
+
const [error, setError] = useState(null);
|
|
8
|
+
const [fileIndex, setFileIndex] = useState(0);
|
|
9
|
+
const [hunkIndex, setHunkIndex] = useState(0);
|
|
10
|
+
const abortRef = useRef(null);
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
if (!worktreePath || !branch) {
|
|
13
|
+
setFiles([]);
|
|
14
|
+
setError(null);
|
|
15
|
+
setLoading(false);
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
// Abort any in-flight fetch
|
|
19
|
+
abortRef.current?.abort();
|
|
20
|
+
const controller = new AbortController();
|
|
21
|
+
abortRef.current = controller;
|
|
22
|
+
setLoading(true);
|
|
23
|
+
setError(null);
|
|
24
|
+
setFileIndex(0);
|
|
25
|
+
setHunkIndex(0);
|
|
26
|
+
const git = simpleGit(worktreePath);
|
|
27
|
+
git
|
|
28
|
+
.raw(['diff', `${baseBranch}...${branch}`])
|
|
29
|
+
.then((raw) => {
|
|
30
|
+
if (controller.signal.aborted)
|
|
31
|
+
return;
|
|
32
|
+
setFiles(parseDiff(raw));
|
|
33
|
+
setLoading(false);
|
|
34
|
+
})
|
|
35
|
+
.catch((err) => {
|
|
36
|
+
if (controller.signal.aborted)
|
|
37
|
+
return;
|
|
38
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
39
|
+
setError(msg);
|
|
40
|
+
setLoading(false);
|
|
41
|
+
});
|
|
42
|
+
return () => {
|
|
43
|
+
controller.abort();
|
|
44
|
+
};
|
|
45
|
+
}, [worktreePath, branch, baseBranch]);
|
|
46
|
+
const nextFile = useCallback(() => {
|
|
47
|
+
if (files.length === 0)
|
|
48
|
+
return;
|
|
49
|
+
setFileIndex((prev) => {
|
|
50
|
+
const next = Math.min(prev + 1, files.length - 1);
|
|
51
|
+
if (next !== prev)
|
|
52
|
+
setHunkIndex(0);
|
|
53
|
+
return next;
|
|
54
|
+
});
|
|
55
|
+
}, [files.length]);
|
|
56
|
+
const prevFile = useCallback(() => {
|
|
57
|
+
setFileIndex((prev) => {
|
|
58
|
+
const next = Math.max(prev - 1, 0);
|
|
59
|
+
if (next !== prev)
|
|
60
|
+
setHunkIndex(0);
|
|
61
|
+
return next;
|
|
62
|
+
});
|
|
63
|
+
}, []);
|
|
64
|
+
const nextHunk = useCallback(() => {
|
|
65
|
+
const currentFile = files[fileIndex];
|
|
66
|
+
if (!currentFile || currentFile.hunks.length === 0)
|
|
67
|
+
return;
|
|
68
|
+
setHunkIndex((prev) => Math.min(prev + 1, currentFile.hunks.length - 1));
|
|
69
|
+
}, [files, fileIndex]);
|
|
70
|
+
const prevHunk = useCallback(() => {
|
|
71
|
+
setHunkIndex((prev) => Math.max(prev - 1, 0));
|
|
72
|
+
}, []);
|
|
73
|
+
return { files, loading, error, fileIndex, hunkIndex, nextFile, prevFile, nextHunk, prevHunk };
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=use-diff-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-diff-view.js","sourceRoot":"","sources":["../../../../src/tui/hooks/use-diff-view.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export type KeyAction = 'new-task' | 'launch' | 'parallelize' | 'kill' | 'delete-task' | 'toggle-review' | 'toggle-feed' | 'cycle-trust' | 'focus-agents' | 'focus-tasks' | 'focus-your-turn' | 'focus-activity' | 'nav-up' | 'nav-down' | 'help' | 'dismiss' | 'approve-once' | 'approve-session' | 'deny' | 'yolo-toggle' | 'open-pr' | 'factory-toggle' | 'decompose' | 'diff' | 'hunk-prev' | 'log' | 'open-log' | 'memory' | 'palette' | 'open-action-pr' | 'resolve-action' | 'action-up' | 'action-down' | 'review-up' | 'review-down' | 'feed-scroll-down' | 'feed-scroll-up' | 'audit' | 'graph';
|
|
2
|
+
export declare function useKeyboard(onAction: (action: KeyAction) => void): void;
|
|
3
|
+
//# sourceMappingURL=use-keyboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-keyboard.d.ts","sourceRoot":"","sources":["../../../../src/tui/hooks/use-keyboard.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GACjB,UAAU,GACV,QAAQ,GACR,aAAa,GACb,MAAM,GACN,aAAa,GACb,eAAe,GACf,aAAa,GACb,aAAa,GACb,cAAc,GACd,aAAa,GACb,iBAAiB,GACjB,gBAAgB,GAChB,QAAQ,GACR,UAAU,GACV,MAAM,GACN,SAAS,GACT,cAAc,GACd,iBAAiB,GACjB,MAAM,GACN,aAAa,GACb,SAAS,GACT,gBAAgB,GAChB,WAAW,GACX,MAAM,GACN,WAAW,GACX,KAAK,GACL,UAAU,GACV,QAAQ,GACR,SAAS,GACT,gBAAgB,GAChB,gBAAgB,GAChB,WAAW,GACX,aAAa,GACb,WAAW,GACX,aAAa,GACb,kBAAkB,GAClB,gBAAgB,GAChB,OAAO,GACP,OAAO,CAAC;AAEZ,wBAAgB,WAAW,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI,GAAG,IAAI,CAmCvE"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { useInput } from 'ink';
|
|
2
|
+
export function useKeyboard(onAction) {
|
|
3
|
+
useInput((input, key) => {
|
|
4
|
+
if (input === '1')
|
|
5
|
+
onAction('approve-once');
|
|
6
|
+
else if (input === '2')
|
|
7
|
+
onAction('approve-session');
|
|
8
|
+
else if (input === '3')
|
|
9
|
+
onAction('deny');
|
|
10
|
+
else if (input === '!')
|
|
11
|
+
onAction('yolo-toggle');
|
|
12
|
+
else if (input === '@')
|
|
13
|
+
onAction('factory-toggle');
|
|
14
|
+
else if (input === 'n')
|
|
15
|
+
onAction('new-task');
|
|
16
|
+
else if (input === 'a')
|
|
17
|
+
onAction('focus-agents');
|
|
18
|
+
else if (input === 't')
|
|
19
|
+
onAction('focus-tasks');
|
|
20
|
+
else if (input === 'w')
|
|
21
|
+
onAction('focus-your-turn');
|
|
22
|
+
else if (input === 'f')
|
|
23
|
+
onAction('toggle-feed');
|
|
24
|
+
else if (input === 'l')
|
|
25
|
+
onAction('launch');
|
|
26
|
+
else if (input === 'x')
|
|
27
|
+
onAction('kill');
|
|
28
|
+
else if (input === 'r')
|
|
29
|
+
onAction('toggle-review');
|
|
30
|
+
else if (input === 'T')
|
|
31
|
+
onAction('cycle-trust');
|
|
32
|
+
else if (input === 'j')
|
|
33
|
+
onAction('nav-down');
|
|
34
|
+
else if (input === 'k')
|
|
35
|
+
onAction('nav-up');
|
|
36
|
+
else if (input === 'J')
|
|
37
|
+
onAction('review-down');
|
|
38
|
+
else if (input === 'K')
|
|
39
|
+
onAction('review-up');
|
|
40
|
+
else if (input === ']')
|
|
41
|
+
onAction('feed-scroll-down');
|
|
42
|
+
else if (input === '[')
|
|
43
|
+
onAction('feed-scroll-up');
|
|
44
|
+
else if (input === 'm')
|
|
45
|
+
onAction('memory');
|
|
46
|
+
else if (input === 'd')
|
|
47
|
+
onAction('diff');
|
|
48
|
+
else if (input === 'p')
|
|
49
|
+
onAction('hunk-prev');
|
|
50
|
+
else if (input === 'g')
|
|
51
|
+
onAction('graph');
|
|
52
|
+
else if (input === 'o')
|
|
53
|
+
onAction('open-log');
|
|
54
|
+
else if (input === 'R')
|
|
55
|
+
onAction('open-action-pr');
|
|
56
|
+
else if (input === 'A')
|
|
57
|
+
onAction('audit');
|
|
58
|
+
else if (input === '?')
|
|
59
|
+
onAction('help');
|
|
60
|
+
else if (input === ':')
|
|
61
|
+
onAction('palette');
|
|
62
|
+
else if (key.delete || key.backspace)
|
|
63
|
+
onAction('delete-task');
|
|
64
|
+
else if (key.return)
|
|
65
|
+
onAction('parallelize');
|
|
66
|
+
else if (key.escape)
|
|
67
|
+
onAction('dismiss');
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=use-keyboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-keyboard.js","sourceRoot":"","sources":["../../../../src/tui/hooks/use-keyboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AA2C/B,MAAM,UAAU,WAAW,CAAC,QAAqC;IAC/D,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;aACvC,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC;aAC/C,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;aACpC,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;aAC3C,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;aAC9C,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;aACxC,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;aAC5C,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;aAC3C,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC;aAC/C,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;aAC3C,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;aACtC,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;aACpC,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;aAC7C,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;aAC3C,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;aACxC,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;aACtC,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;aAC3C,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;aACzC,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC;aAChD,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;aAC9C,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;aACtC,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;aACpC,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;aACzC,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;aACrC,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;aACxC,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;aAC9C,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;aACrC,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;aACpC,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;aACvC,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,SAAS;YAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;aACzD,IAAI,GAAG,CAAC,MAAM;YAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;aACxC,IAAI,GAAG,CAAC,MAAM;YAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface LogLine {
|
|
2
|
+
timestamp: string;
|
|
3
|
+
text: string;
|
|
4
|
+
stream: 'stdout' | 'stderr';
|
|
5
|
+
}
|
|
6
|
+
export declare class LogRingBuffer {
|
|
7
|
+
private capacity;
|
|
8
|
+
private buf;
|
|
9
|
+
private head;
|
|
10
|
+
private size;
|
|
11
|
+
constructor(capacity?: number);
|
|
12
|
+
push(line: LogLine): void;
|
|
13
|
+
getLines(): LogLine[];
|
|
14
|
+
clear(): void;
|
|
15
|
+
}
|
|
16
|
+
export interface LogStreamState {
|
|
17
|
+
lines: LogLine[];
|
|
18
|
+
scrollOffset: number;
|
|
19
|
+
autoScroll: boolean;
|
|
20
|
+
toggleAutoScroll: () => void;
|
|
21
|
+
scrollUp: () => void;
|
|
22
|
+
scrollDown: () => void;
|
|
23
|
+
}
|
|
24
|
+
export declare function useLogStream(getLines: () => LogLine[], intervalMs?: number): LogStreamState;
|
|
25
|
+
//# sourceMappingURL=use-log-stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-log-stream.d.ts","sourceRoot":"","sources":["../../../../src/tui/hooks/use-log-stream.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAC7B;AAGD,qBAAa,aAAa;IAKZ,OAAO,CAAC,QAAQ;IAJ5B,OAAO,CAAC,GAAG,CAA0B;IACrC,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,IAAI,CAAK;gBAEG,QAAQ,SAAM;IAIlC,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAWzB,QAAQ,IAAI,OAAO,EAAE;IASrB,KAAK,IAAI,IAAI;CAId;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAID,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,OAAO,EAAE,EACzB,UAAU,SAAM,GACf,cAAc,CAiDhB"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { useState, useEffect, useCallback } from 'react';
|
|
2
|
+
// Fixed-capacity circular ring buffer for log lines
|
|
3
|
+
export class LogRingBuffer {
|
|
4
|
+
capacity;
|
|
5
|
+
buf;
|
|
6
|
+
head = 0; // index of oldest entry
|
|
7
|
+
size = 0;
|
|
8
|
+
constructor(capacity = 200) {
|
|
9
|
+
this.capacity = capacity;
|
|
10
|
+
this.buf = new Array(capacity);
|
|
11
|
+
}
|
|
12
|
+
push(line) {
|
|
13
|
+
const idx = (this.head + this.size) % this.capacity;
|
|
14
|
+
this.buf[idx] = line;
|
|
15
|
+
if (this.size < this.capacity) {
|
|
16
|
+
this.size++;
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
// Overwrite oldest: advance head
|
|
20
|
+
this.head = (this.head + 1) % this.capacity;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
getLines() {
|
|
24
|
+
const out = [];
|
|
25
|
+
for (let i = 0; i < this.size; i++) {
|
|
26
|
+
const entry = this.buf[(this.head + i) % this.capacity];
|
|
27
|
+
if (entry !== undefined)
|
|
28
|
+
out.push(entry);
|
|
29
|
+
}
|
|
30
|
+
return out;
|
|
31
|
+
}
|
|
32
|
+
clear() {
|
|
33
|
+
this.head = 0;
|
|
34
|
+
this.size = 0;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const VISIBLE_LINES = 20;
|
|
38
|
+
export function useLogStream(getLines, intervalMs = 200) {
|
|
39
|
+
const [lines, setLines] = useState(() => getLines());
|
|
40
|
+
const [scrollOffset, setScrollOffset] = useState(0);
|
|
41
|
+
const [autoScroll, setAutoScroll] = useState(true);
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
const timer = setInterval(() => {
|
|
44
|
+
setLines(getLines());
|
|
45
|
+
}, intervalMs);
|
|
46
|
+
return () => clearInterval(timer);
|
|
47
|
+
}, [getLines, intervalMs]);
|
|
48
|
+
// When autoScroll is enabled, keep offset pinned to tail
|
|
49
|
+
const effectiveOffset = autoScroll
|
|
50
|
+
? Math.max(0, lines.length - VISIBLE_LINES)
|
|
51
|
+
: scrollOffset;
|
|
52
|
+
const toggleAutoScroll = useCallback(() => {
|
|
53
|
+
setAutoScroll((prev) => {
|
|
54
|
+
if (!prev) {
|
|
55
|
+
// Re-enable: jump to end
|
|
56
|
+
setScrollOffset(Math.max(0, lines.length - VISIBLE_LINES));
|
|
57
|
+
}
|
|
58
|
+
return !prev;
|
|
59
|
+
});
|
|
60
|
+
}, [lines.length]);
|
|
61
|
+
const scrollUp = useCallback(() => {
|
|
62
|
+
setAutoScroll(false);
|
|
63
|
+
setScrollOffset((prev) => Math.max(0, prev - 1));
|
|
64
|
+
}, []);
|
|
65
|
+
const scrollDown = useCallback(() => {
|
|
66
|
+
setScrollOffset((prev) => {
|
|
67
|
+
const max = Math.max(0, lines.length - VISIBLE_LINES);
|
|
68
|
+
const next = Math.min(prev + 1, max);
|
|
69
|
+
if (next >= max)
|
|
70
|
+
setAutoScroll(true);
|
|
71
|
+
return next;
|
|
72
|
+
});
|
|
73
|
+
}, [lines.length]);
|
|
74
|
+
return {
|
|
75
|
+
lines,
|
|
76
|
+
scrollOffset: effectiveOffset,
|
|
77
|
+
autoScroll,
|
|
78
|
+
toggleAutoScroll,
|
|
79
|
+
scrollUp,
|
|
80
|
+
scrollDown,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=use-log-stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-log-stream.js","sourceRoot":"","sources":["../../../../src/tui/hooks/use-log-stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-spinner.d.ts","sourceRoot":"","sources":["../../../../src/tui/hooks/use-spinner.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,6DAA8D,CAAC;AAE1F,wBAAgB,UAAU,CAAC,QAAQ,SAAK,GAAG,MAAM,CAWhD"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { useState, useEffect } from 'react';
|
|
2
|
+
export const SPINNER_FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
|
|
3
|
+
export function useSpinner(interval = 80) {
|
|
4
|
+
const [frame, setFrame] = useState(0);
|
|
5
|
+
useEffect(() => {
|
|
6
|
+
const timer = setInterval(() => {
|
|
7
|
+
setFrame((f) => (f + 1) % SPINNER_FRAMES.length);
|
|
8
|
+
}, interval);
|
|
9
|
+
return () => clearInterval(timer);
|
|
10
|
+
}, [interval]);
|
|
11
|
+
return SPINNER_FRAMES[frame];
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=use-spinner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-spinner.js","sourceRoot":"","sources":["../../../../src/tui/hooks/use-spinner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE5C,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAU,CAAC;AAE1F,MAAM,UAAU,UAAU,CAAC,QAAQ,GAAG,EAAE;IACtC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEtC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC7B,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QACnD,CAAC,EAAE,QAAQ,CAAC,CAAC;QACb,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Task } from '../../core/task-store.js';
|
|
2
|
+
import type { AgentSession } from '../../core/agent-session-store.js';
|
|
3
|
+
import type { FileConflict } from '../../core/conflict-detector.js';
|
|
4
|
+
import type { ApprovalRequest } from '../../approval/approval-store.js';
|
|
5
|
+
import type { HumanAction } from '../../core/human-action-store.js';
|
|
6
|
+
import type { OrchestratorState } from '../../core/orchestrator-store.js';
|
|
7
|
+
import type { MergeQueueItem } from '../../core/merge-queue.js';
|
|
8
|
+
export interface TeamMember {
|
|
9
|
+
humanId: string;
|
|
10
|
+
sessions: AgentSession[];
|
|
11
|
+
}
|
|
12
|
+
export interface StoreState {
|
|
13
|
+
tasks: Task[];
|
|
14
|
+
activeSessions: AgentSession[];
|
|
15
|
+
conflicts: FileConflict[];
|
|
16
|
+
parallelBatch: Task[];
|
|
17
|
+
teamMembers: TeamMember[];
|
|
18
|
+
syncStatus: 'connected' | 'disconnected' | 'syncing';
|
|
19
|
+
pendingApprovals: ApprovalRequest[];
|
|
20
|
+
resolvedApprovals: ApprovalRequest[];
|
|
21
|
+
humanActions: HumanAction[];
|
|
22
|
+
orchestratorStates: OrchestratorState[];
|
|
23
|
+
yoloMode: boolean;
|
|
24
|
+
factoryMode: boolean;
|
|
25
|
+
flashMessage: string | null;
|
|
26
|
+
intelligenceEnabled: boolean;
|
|
27
|
+
isCompliance: boolean;
|
|
28
|
+
sandboxEnabled: boolean;
|
|
29
|
+
mergeQueueItems: MergeQueueItem[];
|
|
30
|
+
mergeQueueProcessing: boolean;
|
|
31
|
+
}
|
|
32
|
+
export declare function useStore(getState: () => StoreState, intervalMs?: number): StoreState;
|
|
33
|
+
//# sourceMappingURL=use-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-store.d.ts","sourceRoot":"","sources":["../../../../src/tui/hooks/use-store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEhE,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,cAAc,EAAE,YAAY,EAAE,CAAC;IAC/B,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,aAAa,EAAE,IAAI,EAAE,CAAC;IACtB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,UAAU,EAAE,WAAW,GAAG,cAAc,GAAG,SAAS,CAAC;IACrD,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,iBAAiB,EAAE,eAAe,EAAE,CAAC;IACrC,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;IACxC,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED,wBAAgB,QAAQ,CACtB,QAAQ,EAAE,MAAM,UAAU,EAC1B,UAAU,SAAO,GAChB,UAAU,CAqBZ"}
|