@aion0/forge 0.6.0 → 0.6.3
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/.forge/agent-context.json +3 -3
- package/.forge/mcp.json +1 -1
- package/RELEASE_NOTES.md +7 -4
- package/bin/forge-server.mjs +33 -33
- package/components/SettingsModal.tsx +2 -2
- package/components/TerminalLauncher.tsx +3 -1
- package/components/WorkspaceView.tsx +18 -10
- package/lib/agents/index.ts +44 -6
- package/lib/agents/types.ts +1 -1
- package/lib/help-docs/01-settings.md +2 -2
- package/lib/help-docs/10-troubleshooting.md +10 -2
- package/lib/terminal-standalone.ts +58 -36
- package/lib/workspace/orchestrator.ts +1 -0
- package/package.json +1 -1
- package/reviewer/.forge/agent-context.json +6 -0
- package/.forge/memory/graph.json +0 -1
- package/.forge/memory/knowledge.json +0 -18
- package/.forge/memory/meta.json +0 -7
- package/.forge/migration/endpoints.json +0 -1
- package/.forge/worktrees/pipeline-0a33c50d/CLAUDE.md +0 -86
- package/.forge/worktrees/pipeline-0a33c50d/README.md +0 -136
- package/.forge/worktrees/pipeline-0a33c50d/RELEASE_NOTES.md +0 -11
- package/.forge/worktrees/pipeline-0a33c50d/app/api/agents/route.ts +0 -17
- package/.forge/worktrees/pipeline-0a33c50d/app/api/auth/[...nextauth]/route.ts +0 -3
- package/.forge/worktrees/pipeline-0a33c50d/app/api/auth/verify/route.ts +0 -46
- package/.forge/worktrees/pipeline-0a33c50d/app/api/claude/[id]/route.ts +0 -31
- package/.forge/worktrees/pipeline-0a33c50d/app/api/claude/[id]/stream/route.ts +0 -63
- package/.forge/worktrees/pipeline-0a33c50d/app/api/claude/route.ts +0 -28
- package/.forge/worktrees/pipeline-0a33c50d/app/api/claude-sessions/[projectName]/entries/route.ts +0 -23
- package/.forge/worktrees/pipeline-0a33c50d/app/api/claude-sessions/[projectName]/live/route.ts +0 -72
- package/.forge/worktrees/pipeline-0a33c50d/app/api/claude-sessions/[projectName]/route.ts +0 -37
- package/.forge/worktrees/pipeline-0a33c50d/app/api/claude-sessions/sync/route.ts +0 -17
- package/.forge/worktrees/pipeline-0a33c50d/app/api/claude-templates/route.ts +0 -145
- package/.forge/worktrees/pipeline-0a33c50d/app/api/code/route.ts +0 -299
- package/.forge/worktrees/pipeline-0a33c50d/app/api/delivery/[id]/route.ts +0 -62
- package/.forge/worktrees/pipeline-0a33c50d/app/api/delivery/route.ts +0 -40
- package/.forge/worktrees/pipeline-0a33c50d/app/api/detect-cli/route.ts +0 -46
- package/.forge/worktrees/pipeline-0a33c50d/app/api/docs/route.ts +0 -176
- package/.forge/worktrees/pipeline-0a33c50d/app/api/docs/sessions/route.ts +0 -54
- package/.forge/worktrees/pipeline-0a33c50d/app/api/favorites/route.ts +0 -26
- package/.forge/worktrees/pipeline-0a33c50d/app/api/flows/route.ts +0 -6
- package/.forge/worktrees/pipeline-0a33c50d/app/api/flows/run/route.ts +0 -19
- package/.forge/worktrees/pipeline-0a33c50d/app/api/git/route.ts +0 -149
- package/.forge/worktrees/pipeline-0a33c50d/app/api/help/route.ts +0 -84
- package/.forge/worktrees/pipeline-0a33c50d/app/api/issue-scanner/route.ts +0 -116
- package/.forge/worktrees/pipeline-0a33c50d/app/api/logs/route.ts +0 -100
- package/.forge/worktrees/pipeline-0a33c50d/app/api/mobile-chat/route.ts +0 -115
- package/.forge/worktrees/pipeline-0a33c50d/app/api/monitor/route.ts +0 -74
- package/.forge/worktrees/pipeline-0a33c50d/app/api/notifications/route.ts +0 -42
- package/.forge/worktrees/pipeline-0a33c50d/app/api/notify/test/route.ts +0 -33
- package/.forge/worktrees/pipeline-0a33c50d/app/api/online/route.ts +0 -40
- package/.forge/worktrees/pipeline-0a33c50d/app/api/pipelines/[id]/route.ts +0 -41
- package/.forge/worktrees/pipeline-0a33c50d/app/api/pipelines/route.ts +0 -90
- package/.forge/worktrees/pipeline-0a33c50d/app/api/plugins/route.ts +0 -75
- package/.forge/worktrees/pipeline-0a33c50d/app/api/preview/[...path]/route.ts +0 -64
- package/.forge/worktrees/pipeline-0a33c50d/app/api/preview/route.ts +0 -156
- package/.forge/worktrees/pipeline-0a33c50d/app/api/project-pipelines/route.ts +0 -91
- package/.forge/worktrees/pipeline-0a33c50d/app/api/project-sessions/route.ts +0 -61
- package/.forge/worktrees/pipeline-0a33c50d/app/api/projects/route.ts +0 -26
- package/.forge/worktrees/pipeline-0a33c50d/app/api/sessions/[id]/chat/route.ts +0 -64
- package/.forge/worktrees/pipeline-0a33c50d/app/api/sessions/[id]/messages/route.ts +0 -9
- package/.forge/worktrees/pipeline-0a33c50d/app/api/sessions/[id]/route.ts +0 -17
- package/.forge/worktrees/pipeline-0a33c50d/app/api/sessions/route.ts +0 -20
- package/.forge/worktrees/pipeline-0a33c50d/app/api/settings/route.ts +0 -64
- package/.forge/worktrees/pipeline-0a33c50d/app/api/skills/local/route.ts +0 -228
- package/.forge/worktrees/pipeline-0a33c50d/app/api/skills/route.ts +0 -182
- package/.forge/worktrees/pipeline-0a33c50d/app/api/smith-templates/route.ts +0 -81
- package/.forge/worktrees/pipeline-0a33c50d/app/api/status/route.ts +0 -12
- package/.forge/worktrees/pipeline-0a33c50d/app/api/tabs/route.ts +0 -25
- package/.forge/worktrees/pipeline-0a33c50d/app/api/tasks/[id]/route.ts +0 -51
- package/.forge/worktrees/pipeline-0a33c50d/app/api/tasks/[id]/stream/route.ts +0 -77
- package/.forge/worktrees/pipeline-0a33c50d/app/api/tasks/link/route.ts +0 -37
- package/.forge/worktrees/pipeline-0a33c50d/app/api/tasks/route.ts +0 -44
- package/.forge/worktrees/pipeline-0a33c50d/app/api/tasks/session/route.ts +0 -14
- package/.forge/worktrees/pipeline-0a33c50d/app/api/telegram/route.ts +0 -23
- package/.forge/worktrees/pipeline-0a33c50d/app/api/templates/route.ts +0 -6
- package/.forge/worktrees/pipeline-0a33c50d/app/api/terminal-bell/route.ts +0 -35
- package/.forge/worktrees/pipeline-0a33c50d/app/api/terminal-cwd/route.ts +0 -19
- package/.forge/worktrees/pipeline-0a33c50d/app/api/terminal-state/route.ts +0 -15
- package/.forge/worktrees/pipeline-0a33c50d/app/api/tunnel/route.ts +0 -26
- package/.forge/worktrees/pipeline-0a33c50d/app/api/upgrade/route.ts +0 -43
- package/.forge/worktrees/pipeline-0a33c50d/app/api/usage/route.ts +0 -20
- package/.forge/worktrees/pipeline-0a33c50d/app/api/version/route.ts +0 -78
- package/.forge/worktrees/pipeline-0a33c50d/app/api/watchers/route.ts +0 -33
- package/.forge/worktrees/pipeline-0a33c50d/app/api/workspace/[id]/agents/route.ts +0 -35
- package/.forge/worktrees/pipeline-0a33c50d/app/api/workspace/[id]/memory/route.ts +0 -23
- package/.forge/worktrees/pipeline-0a33c50d/app/api/workspace/[id]/smith/route.ts +0 -22
- package/.forge/worktrees/pipeline-0a33c50d/app/api/workspace/[id]/stream/route.ts +0 -28
- package/.forge/worktrees/pipeline-0a33c50d/app/api/workspace/route.ts +0 -100
- package/.forge/worktrees/pipeline-0a33c50d/app/global-error.tsx +0 -21
- package/.forge/worktrees/pipeline-0a33c50d/app/globals.css +0 -52
- package/.forge/worktrees/pipeline-0a33c50d/app/icon.ico +0 -0
- package/.forge/worktrees/pipeline-0a33c50d/app/icon.png +0 -0
- package/.forge/worktrees/pipeline-0a33c50d/app/icon.svg +0 -106
- package/.forge/worktrees/pipeline-0a33c50d/app/layout.tsx +0 -17
- package/.forge/worktrees/pipeline-0a33c50d/app/login/LoginForm.tsx +0 -96
- package/.forge/worktrees/pipeline-0a33c50d/app/login/page.tsx +0 -10
- package/.forge/worktrees/pipeline-0a33c50d/app/mobile/page.tsx +0 -9
- package/.forge/worktrees/pipeline-0a33c50d/app/page.tsx +0 -21
- package/.forge/worktrees/pipeline-0a33c50d/bin/forge-server.mjs +0 -484
- package/.forge/worktrees/pipeline-0a33c50d/check-forge-status.sh +0 -71
- package/.forge/worktrees/pipeline-0a33c50d/cli/mw.ts +0 -579
- package/.forge/worktrees/pipeline-0a33c50d/components/BrowserPanel.tsx +0 -175
- package/.forge/worktrees/pipeline-0a33c50d/components/ChatPanel.tsx +0 -191
- package/.forge/worktrees/pipeline-0a33c50d/components/ClaudeTerminal.tsx +0 -267
- package/.forge/worktrees/pipeline-0a33c50d/components/CodeViewer.tsx +0 -787
- package/.forge/worktrees/pipeline-0a33c50d/components/ConversationEditor.tsx +0 -411
- package/.forge/worktrees/pipeline-0a33c50d/components/ConversationGraphView.tsx +0 -347
- package/.forge/worktrees/pipeline-0a33c50d/components/ConversationTerminalView.tsx +0 -303
- package/.forge/worktrees/pipeline-0a33c50d/components/Dashboard.tsx +0 -807
- package/.forge/worktrees/pipeline-0a33c50d/components/DashboardWrapper.tsx +0 -9
- package/.forge/worktrees/pipeline-0a33c50d/components/DeliveryFlowEditor.tsx +0 -491
- package/.forge/worktrees/pipeline-0a33c50d/components/DeliveryList.tsx +0 -230
- package/.forge/worktrees/pipeline-0a33c50d/components/DeliveryWorkspace.tsx +0 -589
- package/.forge/worktrees/pipeline-0a33c50d/components/DocTerminal.tsx +0 -187
- package/.forge/worktrees/pipeline-0a33c50d/components/DocsViewer.tsx +0 -574
- package/.forge/worktrees/pipeline-0a33c50d/components/HelpDialog.tsx +0 -169
- package/.forge/worktrees/pipeline-0a33c50d/components/HelpTerminal.tsx +0 -141
- package/.forge/worktrees/pipeline-0a33c50d/components/InlinePipelineView.tsx +0 -111
- package/.forge/worktrees/pipeline-0a33c50d/components/LogViewer.tsx +0 -194
- package/.forge/worktrees/pipeline-0a33c50d/components/MarkdownContent.tsx +0 -73
- package/.forge/worktrees/pipeline-0a33c50d/components/MobileView.tsx +0 -385
- package/.forge/worktrees/pipeline-0a33c50d/components/MonitorPanel.tsx +0 -122
- package/.forge/worktrees/pipeline-0a33c50d/components/NewSessionModal.tsx +0 -93
- package/.forge/worktrees/pipeline-0a33c50d/components/NewTaskModal.tsx +0 -492
- package/.forge/worktrees/pipeline-0a33c50d/components/PipelineEditor.tsx +0 -570
- package/.forge/worktrees/pipeline-0a33c50d/components/PipelineView.tsx +0 -1018
- package/.forge/worktrees/pipeline-0a33c50d/components/PluginsPanel.tsx +0 -472
- package/.forge/worktrees/pipeline-0a33c50d/components/ProjectDetail.tsx +0 -1618
- package/.forge/worktrees/pipeline-0a33c50d/components/ProjectList.tsx +0 -108
- package/.forge/worktrees/pipeline-0a33c50d/components/ProjectManager.tsx +0 -401
- package/.forge/worktrees/pipeline-0a33c50d/components/SessionList.tsx +0 -74
- package/.forge/worktrees/pipeline-0a33c50d/components/SessionView.tsx +0 -726
- package/.forge/worktrees/pipeline-0a33c50d/components/SettingsModal.tsx +0 -1647
- package/.forge/worktrees/pipeline-0a33c50d/components/SkillsPanel.tsx +0 -969
- package/.forge/worktrees/pipeline-0a33c50d/components/StatusBar.tsx +0 -99
- package/.forge/worktrees/pipeline-0a33c50d/components/TabBar.tsx +0 -46
- package/.forge/worktrees/pipeline-0a33c50d/components/TaskBoard.tsx +0 -113
- package/.forge/worktrees/pipeline-0a33c50d/components/TaskDetail.tsx +0 -372
- package/.forge/worktrees/pipeline-0a33c50d/components/TerminalLauncher.tsx +0 -398
- package/.forge/worktrees/pipeline-0a33c50d/components/TunnelToggle.tsx +0 -206
- package/.forge/worktrees/pipeline-0a33c50d/components/UsagePanel.tsx +0 -207
- package/.forge/worktrees/pipeline-0a33c50d/components/WebTerminal.tsx +0 -1683
- package/.forge/worktrees/pipeline-0a33c50d/components/WorkspaceTree.tsx +0 -221
- package/.forge/worktrees/pipeline-0a33c50d/components/WorkspaceView.tsx +0 -4048
- package/.forge/worktrees/pipeline-0a33c50d/dev-test.sh +0 -5
- package/.forge/worktrees/pipeline-0a33c50d/docs/Forge_Memory_Layer_Design.docx +0 -0
- package/.forge/worktrees/pipeline-0a33c50d/docs/Forge_Strategy_Research_2026.docx +0 -0
- package/.forge/worktrees/pipeline-0a33c50d/docs/LOCAL-DEPLOY.md +0 -144
- package/.forge/worktrees/pipeline-0a33c50d/docs/roadmap-multi-agent-workflow.md +0 -330
- package/.forge/worktrees/pipeline-0a33c50d/forge-logo.png +0 -0
- package/.forge/worktrees/pipeline-0a33c50d/forge-logo.svg +0 -106
- package/.forge/worktrees/pipeline-0a33c50d/hooks/useSidebarResize.ts +0 -52
- package/.forge/worktrees/pipeline-0a33c50d/install.sh +0 -29
- package/.forge/worktrees/pipeline-0a33c50d/instrumentation.ts +0 -35
- package/.forge/worktrees/pipeline-0a33c50d/lib/agents/claude-adapter.ts +0 -104
- package/.forge/worktrees/pipeline-0a33c50d/lib/agents/generic-adapter.ts +0 -64
- package/.forge/worktrees/pipeline-0a33c50d/lib/agents/index.ts +0 -245
- package/.forge/worktrees/pipeline-0a33c50d/lib/agents/types.ts +0 -70
- package/.forge/worktrees/pipeline-0a33c50d/lib/artifacts.ts +0 -106
- package/.forge/worktrees/pipeline-0a33c50d/lib/auth.ts +0 -62
- package/.forge/worktrees/pipeline-0a33c50d/lib/builtin-plugins/docker.yaml +0 -70
- package/.forge/worktrees/pipeline-0a33c50d/lib/builtin-plugins/http.yaml +0 -66
- package/.forge/worktrees/pipeline-0a33c50d/lib/builtin-plugins/jenkins.yaml +0 -92
- package/.forge/worktrees/pipeline-0a33c50d/lib/builtin-plugins/llm-vision.yaml +0 -85
- package/.forge/worktrees/pipeline-0a33c50d/lib/builtin-plugins/playwright.yaml +0 -111
- package/.forge/worktrees/pipeline-0a33c50d/lib/builtin-plugins/shell-command.yaml +0 -60
- package/.forge/worktrees/pipeline-0a33c50d/lib/builtin-plugins/slack.yaml +0 -48
- package/.forge/worktrees/pipeline-0a33c50d/lib/builtin-plugins/webhook.yaml +0 -56
- package/.forge/worktrees/pipeline-0a33c50d/lib/claude-process.ts +0 -352
- package/.forge/worktrees/pipeline-0a33c50d/lib/claude-sessions.ts +0 -266
- package/.forge/worktrees/pipeline-0a33c50d/lib/claude-templates.ts +0 -227
- package/.forge/worktrees/pipeline-0a33c50d/lib/cloudflared.ts +0 -424
- package/.forge/worktrees/pipeline-0a33c50d/lib/crypto.ts +0 -67
- package/.forge/worktrees/pipeline-0a33c50d/lib/delivery.ts +0 -787
- package/.forge/worktrees/pipeline-0a33c50d/lib/dirs.ts +0 -99
- package/.forge/worktrees/pipeline-0a33c50d/lib/flows.ts +0 -86
- package/.forge/worktrees/pipeline-0a33c50d/lib/forge-mcp-server.ts +0 -717
- package/.forge/worktrees/pipeline-0a33c50d/lib/forge-skills/forge-inbox.md +0 -38
- package/.forge/worktrees/pipeline-0a33c50d/lib/forge-skills/forge-send.md +0 -47
- package/.forge/worktrees/pipeline-0a33c50d/lib/forge-skills/forge-status.md +0 -32
- package/.forge/worktrees/pipeline-0a33c50d/lib/forge-skills/forge-workspace-sync.md +0 -37
- package/.forge/worktrees/pipeline-0a33c50d/lib/help-docs/00-overview.md +0 -40
- package/.forge/worktrees/pipeline-0a33c50d/lib/help-docs/01-settings.md +0 -194
- package/.forge/worktrees/pipeline-0a33c50d/lib/help-docs/02-telegram.md +0 -41
- package/.forge/worktrees/pipeline-0a33c50d/lib/help-docs/03-tunnel.md +0 -31
- package/.forge/worktrees/pipeline-0a33c50d/lib/help-docs/04-tasks.md +0 -52
- package/.forge/worktrees/pipeline-0a33c50d/lib/help-docs/05-pipelines.md +0 -460
- package/.forge/worktrees/pipeline-0a33c50d/lib/help-docs/06-skills.md +0 -43
- package/.forge/worktrees/pipeline-0a33c50d/lib/help-docs/07-projects.md +0 -73
- package/.forge/worktrees/pipeline-0a33c50d/lib/help-docs/08-rules.md +0 -53
- package/.forge/worktrees/pipeline-0a33c50d/lib/help-docs/09-issue-autofix.md +0 -55
- package/.forge/worktrees/pipeline-0a33c50d/lib/help-docs/10-troubleshooting.md +0 -89
- package/.forge/worktrees/pipeline-0a33c50d/lib/help-docs/11-workspace.md +0 -810
- package/.forge/worktrees/pipeline-0a33c50d/lib/help-docs/CLAUDE.md +0 -62
- package/.forge/worktrees/pipeline-0a33c50d/lib/init.ts +0 -266
- package/.forge/worktrees/pipeline-0a33c50d/lib/issue-scanner.ts +0 -298
- package/.forge/worktrees/pipeline-0a33c50d/lib/logger.ts +0 -79
- package/.forge/worktrees/pipeline-0a33c50d/lib/notifications.ts +0 -75
- package/.forge/worktrees/pipeline-0a33c50d/lib/notify.ts +0 -108
- package/.forge/worktrees/pipeline-0a33c50d/lib/password.ts +0 -97
- package/.forge/worktrees/pipeline-0a33c50d/lib/pipeline-scheduler.ts +0 -373
- package/.forge/worktrees/pipeline-0a33c50d/lib/pipeline.ts +0 -1438
- package/.forge/worktrees/pipeline-0a33c50d/lib/plugins/executor.ts +0 -347
- package/.forge/worktrees/pipeline-0a33c50d/lib/plugins/registry.ts +0 -228
- package/.forge/worktrees/pipeline-0a33c50d/lib/plugins/types.ts +0 -103
- package/.forge/worktrees/pipeline-0a33c50d/lib/project-sessions.ts +0 -53
- package/.forge/worktrees/pipeline-0a33c50d/lib/projects.ts +0 -86
- package/.forge/worktrees/pipeline-0a33c50d/lib/session-manager.ts +0 -156
- package/.forge/worktrees/pipeline-0a33c50d/lib/session-utils.ts +0 -53
- package/.forge/worktrees/pipeline-0a33c50d/lib/session-watcher.ts +0 -345
- package/.forge/worktrees/pipeline-0a33c50d/lib/settings.ts +0 -195
- package/.forge/worktrees/pipeline-0a33c50d/lib/skills.ts +0 -458
- package/.forge/worktrees/pipeline-0a33c50d/lib/task-manager.ts +0 -949
- package/.forge/worktrees/pipeline-0a33c50d/lib/telegram-bot.ts +0 -1477
- package/.forge/worktrees/pipeline-0a33c50d/lib/telegram-standalone.ts +0 -83
- package/.forge/worktrees/pipeline-0a33c50d/lib/terminal-server.ts +0 -70
- package/.forge/worktrees/pipeline-0a33c50d/lib/terminal-standalone.ts +0 -421
- package/.forge/worktrees/pipeline-0a33c50d/lib/usage-scanner.ts +0 -249
- package/.forge/worktrees/pipeline-0a33c50d/lib/workspace/__tests__/state-machine.test.ts +0 -388
- package/.forge/worktrees/pipeline-0a33c50d/lib/workspace/__tests__/workspace.test.ts +0 -311
- package/.forge/worktrees/pipeline-0a33c50d/lib/workspace/agent-bus.ts +0 -416
- package/.forge/worktrees/pipeline-0a33c50d/lib/workspace/agent-worker.ts +0 -655
- package/.forge/worktrees/pipeline-0a33c50d/lib/workspace/backends/api-backend.ts +0 -262
- package/.forge/worktrees/pipeline-0a33c50d/lib/workspace/backends/cli-backend.ts +0 -491
- package/.forge/worktrees/pipeline-0a33c50d/lib/workspace/index.ts +0 -82
- package/.forge/worktrees/pipeline-0a33c50d/lib/workspace/manager.ts +0 -136
- package/.forge/worktrees/pipeline-0a33c50d/lib/workspace/orchestrator.ts +0 -3400
- package/.forge/worktrees/pipeline-0a33c50d/lib/workspace/persistence.ts +0 -309
- package/.forge/worktrees/pipeline-0a33c50d/lib/workspace/presets.ts +0 -649
- package/.forge/worktrees/pipeline-0a33c50d/lib/workspace/requests.ts +0 -287
- package/.forge/worktrees/pipeline-0a33c50d/lib/workspace/session-monitor.ts +0 -240
- package/.forge/worktrees/pipeline-0a33c50d/lib/workspace/skill-installer.ts +0 -275
- package/.forge/worktrees/pipeline-0a33c50d/lib/workspace/smith-memory.ts +0 -498
- package/.forge/worktrees/pipeline-0a33c50d/lib/workspace/types.ts +0 -241
- package/.forge/worktrees/pipeline-0a33c50d/lib/workspace/watch-manager.ts +0 -560
- package/.forge/worktrees/pipeline-0a33c50d/lib/workspace-standalone.ts +0 -911
- package/.forge/worktrees/pipeline-0a33c50d/middleware.ts +0 -51
- package/.forge/worktrees/pipeline-0a33c50d/next.config.ts +0 -26
- package/.forge/worktrees/pipeline-0a33c50d/package.json +0 -74
- package/.forge/worktrees/pipeline-0a33c50d/pnpm-lock.yaml +0 -3719
- package/.forge/worktrees/pipeline-0a33c50d/pnpm-workspace.yaml +0 -1
- package/.forge/worktrees/pipeline-0a33c50d/postcss.config.mjs +0 -7
- package/.forge/worktrees/pipeline-0a33c50d/publish.sh +0 -133
- package/.forge/worktrees/pipeline-0a33c50d/scripts/bench/README.md +0 -66
- package/.forge/worktrees/pipeline-0a33c50d/scripts/bench/results/.gitignore +0 -2
- package/.forge/worktrees/pipeline-0a33c50d/scripts/bench/run.ts +0 -635
- package/.forge/worktrees/pipeline-0a33c50d/scripts/bench/tasks/01-text-utils/task.md +0 -26
- package/.forge/worktrees/pipeline-0a33c50d/scripts/bench/tasks/01-text-utils/validator.sh +0 -46
- package/.forge/worktrees/pipeline-0a33c50d/scripts/bench/tasks/02-pagination/setup.sh +0 -19
- package/.forge/worktrees/pipeline-0a33c50d/scripts/bench/tasks/02-pagination/task.md +0 -48
- package/.forge/worktrees/pipeline-0a33c50d/scripts/bench/tasks/02-pagination/validator.sh +0 -69
- package/.forge/worktrees/pipeline-0a33c50d/scripts/bench/tasks/03-bug-fix/setup.sh +0 -82
- package/.forge/worktrees/pipeline-0a33c50d/scripts/bench/tasks/03-bug-fix/task.md +0 -30
- package/.forge/worktrees/pipeline-0a33c50d/scripts/bench/tasks/03-bug-fix/validator.sh +0 -29
- package/.forge/worktrees/pipeline-0a33c50d/scripts/verify-usage.ts +0 -178
- package/.forge/worktrees/pipeline-0a33c50d/src/config/index.ts +0 -129
- package/.forge/worktrees/pipeline-0a33c50d/src/core/db/database.ts +0 -259
- package/.forge/worktrees/pipeline-0a33c50d/src/core/memory/strategy.ts +0 -32
- package/.forge/worktrees/pipeline-0a33c50d/src/core/providers/chat.ts +0 -65
- package/.forge/worktrees/pipeline-0a33c50d/src/core/providers/registry.ts +0 -60
- package/.forge/worktrees/pipeline-0a33c50d/src/core/session/manager.ts +0 -190
- package/.forge/worktrees/pipeline-0a33c50d/src/types/index.ts +0 -129
- package/.forge/worktrees/pipeline-0a33c50d/start.sh +0 -31
- package/.forge/worktrees/pipeline-0a33c50d/templates/smith-lead.json +0 -45
- package/.forge/worktrees/pipeline-0a33c50d/tsconfig.json +0 -42
- package/.forge/worktrees/pipeline-2ba01c10/CLAUDE.md +0 -86
- package/.forge/worktrees/pipeline-2ba01c10/README.md +0 -136
- package/.forge/worktrees/pipeline-2ba01c10/RELEASE_NOTES.md +0 -11
- package/.forge/worktrees/pipeline-2ba01c10/app/api/agents/route.ts +0 -17
- package/.forge/worktrees/pipeline-2ba01c10/app/api/auth/[...nextauth]/route.ts +0 -3
- package/.forge/worktrees/pipeline-2ba01c10/app/api/auth/verify/route.ts +0 -46
- package/.forge/worktrees/pipeline-2ba01c10/app/api/claude/[id]/route.ts +0 -31
- package/.forge/worktrees/pipeline-2ba01c10/app/api/claude/[id]/stream/route.ts +0 -63
- package/.forge/worktrees/pipeline-2ba01c10/app/api/claude/route.ts +0 -28
- package/.forge/worktrees/pipeline-2ba01c10/app/api/claude-sessions/[projectName]/entries/route.ts +0 -23
- package/.forge/worktrees/pipeline-2ba01c10/app/api/claude-sessions/[projectName]/live/route.ts +0 -72
- package/.forge/worktrees/pipeline-2ba01c10/app/api/claude-sessions/[projectName]/route.ts +0 -37
- package/.forge/worktrees/pipeline-2ba01c10/app/api/claude-sessions/sync/route.ts +0 -17
- package/.forge/worktrees/pipeline-2ba01c10/app/api/claude-templates/route.ts +0 -145
- package/.forge/worktrees/pipeline-2ba01c10/app/api/code/route.ts +0 -299
- package/.forge/worktrees/pipeline-2ba01c10/app/api/delivery/[id]/route.ts +0 -62
- package/.forge/worktrees/pipeline-2ba01c10/app/api/delivery/route.ts +0 -40
- package/.forge/worktrees/pipeline-2ba01c10/app/api/detect-cli/route.ts +0 -46
- package/.forge/worktrees/pipeline-2ba01c10/app/api/docs/route.ts +0 -176
- package/.forge/worktrees/pipeline-2ba01c10/app/api/docs/sessions/route.ts +0 -54
- package/.forge/worktrees/pipeline-2ba01c10/app/api/favorites/route.ts +0 -26
- package/.forge/worktrees/pipeline-2ba01c10/app/api/flows/route.ts +0 -6
- package/.forge/worktrees/pipeline-2ba01c10/app/api/flows/run/route.ts +0 -19
- package/.forge/worktrees/pipeline-2ba01c10/app/api/git/route.ts +0 -149
- package/.forge/worktrees/pipeline-2ba01c10/app/api/help/route.ts +0 -84
- package/.forge/worktrees/pipeline-2ba01c10/app/api/issue-scanner/route.ts +0 -116
- package/.forge/worktrees/pipeline-2ba01c10/app/api/logs/route.ts +0 -100
- package/.forge/worktrees/pipeline-2ba01c10/app/api/mobile-chat/route.ts +0 -115
- package/.forge/worktrees/pipeline-2ba01c10/app/api/monitor/route.ts +0 -74
- package/.forge/worktrees/pipeline-2ba01c10/app/api/notifications/route.ts +0 -42
- package/.forge/worktrees/pipeline-2ba01c10/app/api/notify/test/route.ts +0 -33
- package/.forge/worktrees/pipeline-2ba01c10/app/api/online/route.ts +0 -40
- package/.forge/worktrees/pipeline-2ba01c10/app/api/pipelines/[id]/route.ts +0 -41
- package/.forge/worktrees/pipeline-2ba01c10/app/api/pipelines/route.ts +0 -90
- package/.forge/worktrees/pipeline-2ba01c10/app/api/plugins/route.ts +0 -75
- package/.forge/worktrees/pipeline-2ba01c10/app/api/preview/[...path]/route.ts +0 -64
- package/.forge/worktrees/pipeline-2ba01c10/app/api/preview/route.ts +0 -156
- package/.forge/worktrees/pipeline-2ba01c10/app/api/project-pipelines/route.ts +0 -91
- package/.forge/worktrees/pipeline-2ba01c10/app/api/project-sessions/route.ts +0 -61
- package/.forge/worktrees/pipeline-2ba01c10/app/api/projects/route.ts +0 -26
- package/.forge/worktrees/pipeline-2ba01c10/app/api/sessions/[id]/chat/route.ts +0 -64
- package/.forge/worktrees/pipeline-2ba01c10/app/api/sessions/[id]/messages/route.ts +0 -9
- package/.forge/worktrees/pipeline-2ba01c10/app/api/sessions/[id]/route.ts +0 -17
- package/.forge/worktrees/pipeline-2ba01c10/app/api/sessions/route.ts +0 -20
- package/.forge/worktrees/pipeline-2ba01c10/app/api/settings/route.ts +0 -64
- package/.forge/worktrees/pipeline-2ba01c10/app/api/skills/local/route.ts +0 -228
- package/.forge/worktrees/pipeline-2ba01c10/app/api/skills/route.ts +0 -182
- package/.forge/worktrees/pipeline-2ba01c10/app/api/smith-templates/route.ts +0 -81
- package/.forge/worktrees/pipeline-2ba01c10/app/api/status/route.ts +0 -12
- package/.forge/worktrees/pipeline-2ba01c10/app/api/tabs/route.ts +0 -25
- package/.forge/worktrees/pipeline-2ba01c10/app/api/tasks/[id]/route.ts +0 -51
- package/.forge/worktrees/pipeline-2ba01c10/app/api/tasks/[id]/stream/route.ts +0 -77
- package/.forge/worktrees/pipeline-2ba01c10/app/api/tasks/link/route.ts +0 -37
- package/.forge/worktrees/pipeline-2ba01c10/app/api/tasks/route.ts +0 -44
- package/.forge/worktrees/pipeline-2ba01c10/app/api/tasks/session/route.ts +0 -14
- package/.forge/worktrees/pipeline-2ba01c10/app/api/telegram/route.ts +0 -23
- package/.forge/worktrees/pipeline-2ba01c10/app/api/templates/route.ts +0 -6
- package/.forge/worktrees/pipeline-2ba01c10/app/api/terminal-bell/route.ts +0 -35
- package/.forge/worktrees/pipeline-2ba01c10/app/api/terminal-cwd/route.ts +0 -19
- package/.forge/worktrees/pipeline-2ba01c10/app/api/terminal-state/route.ts +0 -15
- package/.forge/worktrees/pipeline-2ba01c10/app/api/tunnel/route.ts +0 -26
- package/.forge/worktrees/pipeline-2ba01c10/app/api/upgrade/route.ts +0 -43
- package/.forge/worktrees/pipeline-2ba01c10/app/api/usage/route.ts +0 -20
- package/.forge/worktrees/pipeline-2ba01c10/app/api/version/route.ts +0 -78
- package/.forge/worktrees/pipeline-2ba01c10/app/api/watchers/route.ts +0 -33
- package/.forge/worktrees/pipeline-2ba01c10/app/api/workspace/[id]/agents/route.ts +0 -35
- package/.forge/worktrees/pipeline-2ba01c10/app/api/workspace/[id]/memory/route.ts +0 -23
- package/.forge/worktrees/pipeline-2ba01c10/app/api/workspace/[id]/smith/route.ts +0 -22
- package/.forge/worktrees/pipeline-2ba01c10/app/api/workspace/[id]/stream/route.ts +0 -28
- package/.forge/worktrees/pipeline-2ba01c10/app/api/workspace/route.ts +0 -100
- package/.forge/worktrees/pipeline-2ba01c10/app/global-error.tsx +0 -21
- package/.forge/worktrees/pipeline-2ba01c10/app/globals.css +0 -52
- package/.forge/worktrees/pipeline-2ba01c10/app/icon.ico +0 -0
- package/.forge/worktrees/pipeline-2ba01c10/app/icon.png +0 -0
- package/.forge/worktrees/pipeline-2ba01c10/app/icon.svg +0 -106
- package/.forge/worktrees/pipeline-2ba01c10/app/layout.tsx +0 -17
- package/.forge/worktrees/pipeline-2ba01c10/app/login/LoginForm.tsx +0 -96
- package/.forge/worktrees/pipeline-2ba01c10/app/login/page.tsx +0 -10
- package/.forge/worktrees/pipeline-2ba01c10/app/mobile/page.tsx +0 -9
- package/.forge/worktrees/pipeline-2ba01c10/app/page.tsx +0 -21
- package/.forge/worktrees/pipeline-2ba01c10/bin/forge-server.mjs +0 -484
- package/.forge/worktrees/pipeline-2ba01c10/check-forge-status.sh +0 -71
- package/.forge/worktrees/pipeline-2ba01c10/cli/mw.ts +0 -579
- package/.forge/worktrees/pipeline-2ba01c10/components/BrowserPanel.tsx +0 -175
- package/.forge/worktrees/pipeline-2ba01c10/components/ChatPanel.tsx +0 -191
- package/.forge/worktrees/pipeline-2ba01c10/components/ClaudeTerminal.tsx +0 -267
- package/.forge/worktrees/pipeline-2ba01c10/components/CodeViewer.tsx +0 -787
- package/.forge/worktrees/pipeline-2ba01c10/components/ConversationEditor.tsx +0 -411
- package/.forge/worktrees/pipeline-2ba01c10/components/ConversationGraphView.tsx +0 -347
- package/.forge/worktrees/pipeline-2ba01c10/components/ConversationTerminalView.tsx +0 -303
- package/.forge/worktrees/pipeline-2ba01c10/components/Dashboard.tsx +0 -807
- package/.forge/worktrees/pipeline-2ba01c10/components/DashboardWrapper.tsx +0 -9
- package/.forge/worktrees/pipeline-2ba01c10/components/DeliveryFlowEditor.tsx +0 -491
- package/.forge/worktrees/pipeline-2ba01c10/components/DeliveryList.tsx +0 -230
- package/.forge/worktrees/pipeline-2ba01c10/components/DeliveryWorkspace.tsx +0 -589
- package/.forge/worktrees/pipeline-2ba01c10/components/DocTerminal.tsx +0 -187
- package/.forge/worktrees/pipeline-2ba01c10/components/DocsViewer.tsx +0 -574
- package/.forge/worktrees/pipeline-2ba01c10/components/HelpDialog.tsx +0 -169
- package/.forge/worktrees/pipeline-2ba01c10/components/HelpTerminal.tsx +0 -141
- package/.forge/worktrees/pipeline-2ba01c10/components/InlinePipelineView.tsx +0 -111
- package/.forge/worktrees/pipeline-2ba01c10/components/LogViewer.tsx +0 -194
- package/.forge/worktrees/pipeline-2ba01c10/components/MarkdownContent.tsx +0 -73
- package/.forge/worktrees/pipeline-2ba01c10/components/MobileView.tsx +0 -385
- package/.forge/worktrees/pipeline-2ba01c10/components/MonitorPanel.tsx +0 -122
- package/.forge/worktrees/pipeline-2ba01c10/components/NewSessionModal.tsx +0 -93
- package/.forge/worktrees/pipeline-2ba01c10/components/NewTaskModal.tsx +0 -492
- package/.forge/worktrees/pipeline-2ba01c10/components/PipelineEditor.tsx +0 -570
- package/.forge/worktrees/pipeline-2ba01c10/components/PipelineView.tsx +0 -1018
- package/.forge/worktrees/pipeline-2ba01c10/components/PluginsPanel.tsx +0 -472
- package/.forge/worktrees/pipeline-2ba01c10/components/ProjectDetail.tsx +0 -1618
- package/.forge/worktrees/pipeline-2ba01c10/components/ProjectList.tsx +0 -108
- package/.forge/worktrees/pipeline-2ba01c10/components/ProjectManager.tsx +0 -401
- package/.forge/worktrees/pipeline-2ba01c10/components/SessionList.tsx +0 -74
- package/.forge/worktrees/pipeline-2ba01c10/components/SessionView.tsx +0 -726
- package/.forge/worktrees/pipeline-2ba01c10/components/SettingsModal.tsx +0 -1647
- package/.forge/worktrees/pipeline-2ba01c10/components/SkillsPanel.tsx +0 -969
- package/.forge/worktrees/pipeline-2ba01c10/components/StatusBar.tsx +0 -99
- package/.forge/worktrees/pipeline-2ba01c10/components/TabBar.tsx +0 -46
- package/.forge/worktrees/pipeline-2ba01c10/components/TaskBoard.tsx +0 -113
- package/.forge/worktrees/pipeline-2ba01c10/components/TaskDetail.tsx +0 -372
- package/.forge/worktrees/pipeline-2ba01c10/components/TerminalLauncher.tsx +0 -398
- package/.forge/worktrees/pipeline-2ba01c10/components/TunnelToggle.tsx +0 -206
- package/.forge/worktrees/pipeline-2ba01c10/components/UsagePanel.tsx +0 -207
- package/.forge/worktrees/pipeline-2ba01c10/components/WebTerminal.tsx +0 -1683
- package/.forge/worktrees/pipeline-2ba01c10/components/WorkspaceTree.tsx +0 -221
- package/.forge/worktrees/pipeline-2ba01c10/components/WorkspaceView.tsx +0 -4048
- package/.forge/worktrees/pipeline-2ba01c10/dev-test.sh +0 -5
- package/.forge/worktrees/pipeline-2ba01c10/docs/Forge_Memory_Layer_Design.docx +0 -0
- package/.forge/worktrees/pipeline-2ba01c10/docs/Forge_Strategy_Research_2026.docx +0 -0
- package/.forge/worktrees/pipeline-2ba01c10/docs/LOCAL-DEPLOY.md +0 -144
- package/.forge/worktrees/pipeline-2ba01c10/docs/roadmap-multi-agent-workflow.md +0 -330
- package/.forge/worktrees/pipeline-2ba01c10/forge-logo.png +0 -0
- package/.forge/worktrees/pipeline-2ba01c10/forge-logo.svg +0 -106
- package/.forge/worktrees/pipeline-2ba01c10/hooks/useSidebarResize.ts +0 -52
- package/.forge/worktrees/pipeline-2ba01c10/install.sh +0 -29
- package/.forge/worktrees/pipeline-2ba01c10/instrumentation.ts +0 -35
- package/.forge/worktrees/pipeline-2ba01c10/lib/agents/claude-adapter.ts +0 -104
- package/.forge/worktrees/pipeline-2ba01c10/lib/agents/generic-adapter.ts +0 -64
- package/.forge/worktrees/pipeline-2ba01c10/lib/agents/index.ts +0 -245
- package/.forge/worktrees/pipeline-2ba01c10/lib/agents/types.ts +0 -70
- package/.forge/worktrees/pipeline-2ba01c10/lib/artifacts.ts +0 -106
- package/.forge/worktrees/pipeline-2ba01c10/lib/auth.ts +0 -62
- package/.forge/worktrees/pipeline-2ba01c10/lib/builtin-plugins/docker.yaml +0 -70
- package/.forge/worktrees/pipeline-2ba01c10/lib/builtin-plugins/http.yaml +0 -66
- package/.forge/worktrees/pipeline-2ba01c10/lib/builtin-plugins/jenkins.yaml +0 -92
- package/.forge/worktrees/pipeline-2ba01c10/lib/builtin-plugins/llm-vision.yaml +0 -85
- package/.forge/worktrees/pipeline-2ba01c10/lib/builtin-plugins/playwright.yaml +0 -111
- package/.forge/worktrees/pipeline-2ba01c10/lib/builtin-plugins/shell-command.yaml +0 -60
- package/.forge/worktrees/pipeline-2ba01c10/lib/builtin-plugins/slack.yaml +0 -48
- package/.forge/worktrees/pipeline-2ba01c10/lib/builtin-plugins/webhook.yaml +0 -56
- package/.forge/worktrees/pipeline-2ba01c10/lib/claude-process.ts +0 -352
- package/.forge/worktrees/pipeline-2ba01c10/lib/claude-sessions.ts +0 -266
- package/.forge/worktrees/pipeline-2ba01c10/lib/claude-templates.ts +0 -227
- package/.forge/worktrees/pipeline-2ba01c10/lib/cloudflared.ts +0 -424
- package/.forge/worktrees/pipeline-2ba01c10/lib/crypto.ts +0 -67
- package/.forge/worktrees/pipeline-2ba01c10/lib/delivery.ts +0 -787
- package/.forge/worktrees/pipeline-2ba01c10/lib/dirs.ts +0 -99
- package/.forge/worktrees/pipeline-2ba01c10/lib/flows.ts +0 -86
- package/.forge/worktrees/pipeline-2ba01c10/lib/forge-mcp-server.ts +0 -717
- package/.forge/worktrees/pipeline-2ba01c10/lib/forge-skills/forge-inbox.md +0 -38
- package/.forge/worktrees/pipeline-2ba01c10/lib/forge-skills/forge-send.md +0 -47
- package/.forge/worktrees/pipeline-2ba01c10/lib/forge-skills/forge-status.md +0 -32
- package/.forge/worktrees/pipeline-2ba01c10/lib/forge-skills/forge-workspace-sync.md +0 -37
- package/.forge/worktrees/pipeline-2ba01c10/lib/help-docs/00-overview.md +0 -40
- package/.forge/worktrees/pipeline-2ba01c10/lib/help-docs/01-settings.md +0 -194
- package/.forge/worktrees/pipeline-2ba01c10/lib/help-docs/02-telegram.md +0 -41
- package/.forge/worktrees/pipeline-2ba01c10/lib/help-docs/03-tunnel.md +0 -31
- package/.forge/worktrees/pipeline-2ba01c10/lib/help-docs/04-tasks.md +0 -52
- package/.forge/worktrees/pipeline-2ba01c10/lib/help-docs/05-pipelines.md +0 -460
- package/.forge/worktrees/pipeline-2ba01c10/lib/help-docs/06-skills.md +0 -43
- package/.forge/worktrees/pipeline-2ba01c10/lib/help-docs/07-projects.md +0 -73
- package/.forge/worktrees/pipeline-2ba01c10/lib/help-docs/08-rules.md +0 -53
- package/.forge/worktrees/pipeline-2ba01c10/lib/help-docs/09-issue-autofix.md +0 -55
- package/.forge/worktrees/pipeline-2ba01c10/lib/help-docs/10-troubleshooting.md +0 -89
- package/.forge/worktrees/pipeline-2ba01c10/lib/help-docs/11-workspace.md +0 -810
- package/.forge/worktrees/pipeline-2ba01c10/lib/help-docs/CLAUDE.md +0 -62
- package/.forge/worktrees/pipeline-2ba01c10/lib/init.ts +0 -266
- package/.forge/worktrees/pipeline-2ba01c10/lib/issue-scanner.ts +0 -298
- package/.forge/worktrees/pipeline-2ba01c10/lib/logger.ts +0 -79
- package/.forge/worktrees/pipeline-2ba01c10/lib/notifications.ts +0 -75
- package/.forge/worktrees/pipeline-2ba01c10/lib/notify.ts +0 -108
- package/.forge/worktrees/pipeline-2ba01c10/lib/password.ts +0 -97
- package/.forge/worktrees/pipeline-2ba01c10/lib/pipeline-scheduler.ts +0 -373
- package/.forge/worktrees/pipeline-2ba01c10/lib/pipeline.ts +0 -1438
- package/.forge/worktrees/pipeline-2ba01c10/lib/plugins/executor.ts +0 -347
- package/.forge/worktrees/pipeline-2ba01c10/lib/plugins/registry.ts +0 -228
- package/.forge/worktrees/pipeline-2ba01c10/lib/plugins/types.ts +0 -103
- package/.forge/worktrees/pipeline-2ba01c10/lib/project-sessions.ts +0 -53
- package/.forge/worktrees/pipeline-2ba01c10/lib/projects.ts +0 -86
- package/.forge/worktrees/pipeline-2ba01c10/lib/session-manager.ts +0 -156
- package/.forge/worktrees/pipeline-2ba01c10/lib/session-utils.ts +0 -53
- package/.forge/worktrees/pipeline-2ba01c10/lib/session-watcher.ts +0 -345
- package/.forge/worktrees/pipeline-2ba01c10/lib/settings.ts +0 -195
- package/.forge/worktrees/pipeline-2ba01c10/lib/skills.ts +0 -458
- package/.forge/worktrees/pipeline-2ba01c10/lib/task-manager.ts +0 -949
- package/.forge/worktrees/pipeline-2ba01c10/lib/telegram-bot.ts +0 -1477
- package/.forge/worktrees/pipeline-2ba01c10/lib/telegram-standalone.ts +0 -83
- package/.forge/worktrees/pipeline-2ba01c10/lib/terminal-server.ts +0 -70
- package/.forge/worktrees/pipeline-2ba01c10/lib/terminal-standalone.ts +0 -421
- package/.forge/worktrees/pipeline-2ba01c10/lib/usage-scanner.ts +0 -249
- package/.forge/worktrees/pipeline-2ba01c10/lib/workspace/__tests__/state-machine.test.ts +0 -388
- package/.forge/worktrees/pipeline-2ba01c10/lib/workspace/__tests__/workspace.test.ts +0 -311
- package/.forge/worktrees/pipeline-2ba01c10/lib/workspace/agent-bus.ts +0 -416
- package/.forge/worktrees/pipeline-2ba01c10/lib/workspace/agent-worker.ts +0 -655
- package/.forge/worktrees/pipeline-2ba01c10/lib/workspace/backends/api-backend.ts +0 -262
- package/.forge/worktrees/pipeline-2ba01c10/lib/workspace/backends/cli-backend.ts +0 -491
- package/.forge/worktrees/pipeline-2ba01c10/lib/workspace/index.ts +0 -82
- package/.forge/worktrees/pipeline-2ba01c10/lib/workspace/manager.ts +0 -136
- package/.forge/worktrees/pipeline-2ba01c10/lib/workspace/orchestrator.ts +0 -3400
- package/.forge/worktrees/pipeline-2ba01c10/lib/workspace/persistence.ts +0 -309
- package/.forge/worktrees/pipeline-2ba01c10/lib/workspace/presets.ts +0 -649
- package/.forge/worktrees/pipeline-2ba01c10/lib/workspace/requests.ts +0 -287
- package/.forge/worktrees/pipeline-2ba01c10/lib/workspace/session-monitor.ts +0 -240
- package/.forge/worktrees/pipeline-2ba01c10/lib/workspace/skill-installer.ts +0 -275
- package/.forge/worktrees/pipeline-2ba01c10/lib/workspace/smith-memory.ts +0 -498
- package/.forge/worktrees/pipeline-2ba01c10/lib/workspace/types.ts +0 -241
- package/.forge/worktrees/pipeline-2ba01c10/lib/workspace/watch-manager.ts +0 -560
- package/.forge/worktrees/pipeline-2ba01c10/lib/workspace-standalone.ts +0 -911
- package/.forge/worktrees/pipeline-2ba01c10/middleware.ts +0 -51
- package/.forge/worktrees/pipeline-2ba01c10/next.config.ts +0 -26
- package/.forge/worktrees/pipeline-2ba01c10/package.json +0 -74
- package/.forge/worktrees/pipeline-2ba01c10/pnpm-lock.yaml +0 -3719
- package/.forge/worktrees/pipeline-2ba01c10/pnpm-workspace.yaml +0 -1
- package/.forge/worktrees/pipeline-2ba01c10/postcss.config.mjs +0 -7
- package/.forge/worktrees/pipeline-2ba01c10/publish.sh +0 -133
- package/.forge/worktrees/pipeline-2ba01c10/scripts/bench/README.md +0 -66
- package/.forge/worktrees/pipeline-2ba01c10/scripts/bench/results/.gitignore +0 -2
- package/.forge/worktrees/pipeline-2ba01c10/scripts/bench/run.ts +0 -635
- package/.forge/worktrees/pipeline-2ba01c10/scripts/bench/tasks/01-text-utils/task.md +0 -26
- package/.forge/worktrees/pipeline-2ba01c10/scripts/bench/tasks/01-text-utils/validator.sh +0 -46
- package/.forge/worktrees/pipeline-2ba01c10/scripts/bench/tasks/02-pagination/setup.sh +0 -19
- package/.forge/worktrees/pipeline-2ba01c10/scripts/bench/tasks/02-pagination/task.md +0 -48
- package/.forge/worktrees/pipeline-2ba01c10/scripts/bench/tasks/02-pagination/validator.sh +0 -69
- package/.forge/worktrees/pipeline-2ba01c10/scripts/bench/tasks/03-bug-fix/setup.sh +0 -82
- package/.forge/worktrees/pipeline-2ba01c10/scripts/bench/tasks/03-bug-fix/task.md +0 -30
- package/.forge/worktrees/pipeline-2ba01c10/scripts/bench/tasks/03-bug-fix/validator.sh +0 -29
- package/.forge/worktrees/pipeline-2ba01c10/scripts/verify-usage.ts +0 -178
- package/.forge/worktrees/pipeline-2ba01c10/src/config/index.ts +0 -129
- package/.forge/worktrees/pipeline-2ba01c10/src/core/db/database.ts +0 -259
- package/.forge/worktrees/pipeline-2ba01c10/src/core/memory/strategy.ts +0 -32
- package/.forge/worktrees/pipeline-2ba01c10/src/core/providers/chat.ts +0 -65
- package/.forge/worktrees/pipeline-2ba01c10/src/core/providers/registry.ts +0 -60
- package/.forge/worktrees/pipeline-2ba01c10/src/core/session/manager.ts +0 -190
- package/.forge/worktrees/pipeline-2ba01c10/src/types/index.ts +0 -129
- package/.forge/worktrees/pipeline-2ba01c10/start.sh +0 -31
- package/.forge/worktrees/pipeline-2ba01c10/templates/smith-lead.json +0 -45
- package/.forge/worktrees/pipeline-2ba01c10/tsconfig.json +0 -42
- package/.forge/worktrees/pipeline-3156a8b3/CLAUDE.md +0 -86
- package/.forge/worktrees/pipeline-3156a8b3/README.md +0 -136
- package/.forge/worktrees/pipeline-3156a8b3/RELEASE_NOTES.md +0 -11
- package/.forge/worktrees/pipeline-3156a8b3/app/api/agents/route.ts +0 -17
- package/.forge/worktrees/pipeline-3156a8b3/app/api/auth/[...nextauth]/route.ts +0 -3
- package/.forge/worktrees/pipeline-3156a8b3/app/api/auth/verify/route.ts +0 -46
- package/.forge/worktrees/pipeline-3156a8b3/app/api/claude/[id]/route.ts +0 -31
- package/.forge/worktrees/pipeline-3156a8b3/app/api/claude/[id]/stream/route.ts +0 -63
- package/.forge/worktrees/pipeline-3156a8b3/app/api/claude/route.ts +0 -28
- package/.forge/worktrees/pipeline-3156a8b3/app/api/claude-sessions/[projectName]/entries/route.ts +0 -23
- package/.forge/worktrees/pipeline-3156a8b3/app/api/claude-sessions/[projectName]/live/route.ts +0 -72
- package/.forge/worktrees/pipeline-3156a8b3/app/api/claude-sessions/[projectName]/route.ts +0 -37
- package/.forge/worktrees/pipeline-3156a8b3/app/api/claude-sessions/sync/route.ts +0 -17
- package/.forge/worktrees/pipeline-3156a8b3/app/api/claude-templates/route.ts +0 -145
- package/.forge/worktrees/pipeline-3156a8b3/app/api/code/route.ts +0 -299
- package/.forge/worktrees/pipeline-3156a8b3/app/api/delivery/[id]/route.ts +0 -62
- package/.forge/worktrees/pipeline-3156a8b3/app/api/delivery/route.ts +0 -40
- package/.forge/worktrees/pipeline-3156a8b3/app/api/detect-cli/route.ts +0 -46
- package/.forge/worktrees/pipeline-3156a8b3/app/api/docs/route.ts +0 -176
- package/.forge/worktrees/pipeline-3156a8b3/app/api/docs/sessions/route.ts +0 -54
- package/.forge/worktrees/pipeline-3156a8b3/app/api/favorites/route.ts +0 -26
- package/.forge/worktrees/pipeline-3156a8b3/app/api/flows/route.ts +0 -6
- package/.forge/worktrees/pipeline-3156a8b3/app/api/flows/run/route.ts +0 -19
- package/.forge/worktrees/pipeline-3156a8b3/app/api/git/route.ts +0 -149
- package/.forge/worktrees/pipeline-3156a8b3/app/api/help/route.ts +0 -84
- package/.forge/worktrees/pipeline-3156a8b3/app/api/issue-scanner/route.ts +0 -116
- package/.forge/worktrees/pipeline-3156a8b3/app/api/logs/route.ts +0 -100
- package/.forge/worktrees/pipeline-3156a8b3/app/api/mobile-chat/route.ts +0 -115
- package/.forge/worktrees/pipeline-3156a8b3/app/api/monitor/route.ts +0 -74
- package/.forge/worktrees/pipeline-3156a8b3/app/api/notifications/route.ts +0 -42
- package/.forge/worktrees/pipeline-3156a8b3/app/api/notify/test/route.ts +0 -33
- package/.forge/worktrees/pipeline-3156a8b3/app/api/online/route.ts +0 -40
- package/.forge/worktrees/pipeline-3156a8b3/app/api/pipelines/[id]/route.ts +0 -41
- package/.forge/worktrees/pipeline-3156a8b3/app/api/pipelines/route.ts +0 -90
- package/.forge/worktrees/pipeline-3156a8b3/app/api/plugins/route.ts +0 -75
- package/.forge/worktrees/pipeline-3156a8b3/app/api/preview/[...path]/route.ts +0 -64
- package/.forge/worktrees/pipeline-3156a8b3/app/api/preview/route.ts +0 -156
- package/.forge/worktrees/pipeline-3156a8b3/app/api/project-pipelines/route.ts +0 -91
- package/.forge/worktrees/pipeline-3156a8b3/app/api/project-sessions/route.ts +0 -61
- package/.forge/worktrees/pipeline-3156a8b3/app/api/projects/route.ts +0 -26
- package/.forge/worktrees/pipeline-3156a8b3/app/api/sessions/[id]/chat/route.ts +0 -64
- package/.forge/worktrees/pipeline-3156a8b3/app/api/sessions/[id]/messages/route.ts +0 -9
- package/.forge/worktrees/pipeline-3156a8b3/app/api/sessions/[id]/route.ts +0 -17
- package/.forge/worktrees/pipeline-3156a8b3/app/api/sessions/route.ts +0 -20
- package/.forge/worktrees/pipeline-3156a8b3/app/api/settings/route.ts +0 -64
- package/.forge/worktrees/pipeline-3156a8b3/app/api/skills/local/route.ts +0 -228
- package/.forge/worktrees/pipeline-3156a8b3/app/api/skills/route.ts +0 -182
- package/.forge/worktrees/pipeline-3156a8b3/app/api/smith-templates/route.ts +0 -81
- package/.forge/worktrees/pipeline-3156a8b3/app/api/status/route.ts +0 -12
- package/.forge/worktrees/pipeline-3156a8b3/app/api/tabs/route.ts +0 -25
- package/.forge/worktrees/pipeline-3156a8b3/app/api/tasks/[id]/route.ts +0 -51
- package/.forge/worktrees/pipeline-3156a8b3/app/api/tasks/[id]/stream/route.ts +0 -77
- package/.forge/worktrees/pipeline-3156a8b3/app/api/tasks/link/route.ts +0 -37
- package/.forge/worktrees/pipeline-3156a8b3/app/api/tasks/route.ts +0 -44
- package/.forge/worktrees/pipeline-3156a8b3/app/api/tasks/session/route.ts +0 -14
- package/.forge/worktrees/pipeline-3156a8b3/app/api/telegram/route.ts +0 -23
- package/.forge/worktrees/pipeline-3156a8b3/app/api/templates/route.ts +0 -6
- package/.forge/worktrees/pipeline-3156a8b3/app/api/terminal-bell/route.ts +0 -35
- package/.forge/worktrees/pipeline-3156a8b3/app/api/terminal-cwd/route.ts +0 -19
- package/.forge/worktrees/pipeline-3156a8b3/app/api/terminal-state/route.ts +0 -15
- package/.forge/worktrees/pipeline-3156a8b3/app/api/tunnel/route.ts +0 -26
- package/.forge/worktrees/pipeline-3156a8b3/app/api/upgrade/route.ts +0 -43
- package/.forge/worktrees/pipeline-3156a8b3/app/api/usage/route.ts +0 -20
- package/.forge/worktrees/pipeline-3156a8b3/app/api/version/route.ts +0 -78
- package/.forge/worktrees/pipeline-3156a8b3/app/api/watchers/route.ts +0 -33
- package/.forge/worktrees/pipeline-3156a8b3/app/api/workspace/[id]/agents/route.ts +0 -35
- package/.forge/worktrees/pipeline-3156a8b3/app/api/workspace/[id]/memory/route.ts +0 -23
- package/.forge/worktrees/pipeline-3156a8b3/app/api/workspace/[id]/smith/route.ts +0 -22
- package/.forge/worktrees/pipeline-3156a8b3/app/api/workspace/[id]/stream/route.ts +0 -28
- package/.forge/worktrees/pipeline-3156a8b3/app/api/workspace/route.ts +0 -100
- package/.forge/worktrees/pipeline-3156a8b3/app/global-error.tsx +0 -21
- package/.forge/worktrees/pipeline-3156a8b3/app/globals.css +0 -52
- package/.forge/worktrees/pipeline-3156a8b3/app/icon.ico +0 -0
- package/.forge/worktrees/pipeline-3156a8b3/app/icon.png +0 -0
- package/.forge/worktrees/pipeline-3156a8b3/app/icon.svg +0 -106
- package/.forge/worktrees/pipeline-3156a8b3/app/layout.tsx +0 -17
- package/.forge/worktrees/pipeline-3156a8b3/app/login/LoginForm.tsx +0 -96
- package/.forge/worktrees/pipeline-3156a8b3/app/login/page.tsx +0 -10
- package/.forge/worktrees/pipeline-3156a8b3/app/mobile/page.tsx +0 -9
- package/.forge/worktrees/pipeline-3156a8b3/app/page.tsx +0 -21
- package/.forge/worktrees/pipeline-3156a8b3/bin/forge-server.mjs +0 -484
- package/.forge/worktrees/pipeline-3156a8b3/check-forge-status.sh +0 -71
- package/.forge/worktrees/pipeline-3156a8b3/cli/mw.ts +0 -579
- package/.forge/worktrees/pipeline-3156a8b3/components/BrowserPanel.tsx +0 -175
- package/.forge/worktrees/pipeline-3156a8b3/components/ChatPanel.tsx +0 -191
- package/.forge/worktrees/pipeline-3156a8b3/components/ClaudeTerminal.tsx +0 -267
- package/.forge/worktrees/pipeline-3156a8b3/components/CodeViewer.tsx +0 -787
- package/.forge/worktrees/pipeline-3156a8b3/components/ConversationEditor.tsx +0 -411
- package/.forge/worktrees/pipeline-3156a8b3/components/ConversationGraphView.tsx +0 -347
- package/.forge/worktrees/pipeline-3156a8b3/components/ConversationTerminalView.tsx +0 -303
- package/.forge/worktrees/pipeline-3156a8b3/components/Dashboard.tsx +0 -807
- package/.forge/worktrees/pipeline-3156a8b3/components/DashboardWrapper.tsx +0 -9
- package/.forge/worktrees/pipeline-3156a8b3/components/DeliveryFlowEditor.tsx +0 -491
- package/.forge/worktrees/pipeline-3156a8b3/components/DeliveryList.tsx +0 -230
- package/.forge/worktrees/pipeline-3156a8b3/components/DeliveryWorkspace.tsx +0 -589
- package/.forge/worktrees/pipeline-3156a8b3/components/DocTerminal.tsx +0 -187
- package/.forge/worktrees/pipeline-3156a8b3/components/DocsViewer.tsx +0 -574
- package/.forge/worktrees/pipeline-3156a8b3/components/HelpDialog.tsx +0 -169
- package/.forge/worktrees/pipeline-3156a8b3/components/HelpTerminal.tsx +0 -141
- package/.forge/worktrees/pipeline-3156a8b3/components/InlinePipelineView.tsx +0 -111
- package/.forge/worktrees/pipeline-3156a8b3/components/LogViewer.tsx +0 -194
- package/.forge/worktrees/pipeline-3156a8b3/components/MarkdownContent.tsx +0 -73
- package/.forge/worktrees/pipeline-3156a8b3/components/MobileView.tsx +0 -385
- package/.forge/worktrees/pipeline-3156a8b3/components/MonitorPanel.tsx +0 -122
- package/.forge/worktrees/pipeline-3156a8b3/components/NewSessionModal.tsx +0 -93
- package/.forge/worktrees/pipeline-3156a8b3/components/NewTaskModal.tsx +0 -492
- package/.forge/worktrees/pipeline-3156a8b3/components/PipelineEditor.tsx +0 -570
- package/.forge/worktrees/pipeline-3156a8b3/components/PipelineView.tsx +0 -1018
- package/.forge/worktrees/pipeline-3156a8b3/components/PluginsPanel.tsx +0 -472
- package/.forge/worktrees/pipeline-3156a8b3/components/ProjectDetail.tsx +0 -1618
- package/.forge/worktrees/pipeline-3156a8b3/components/ProjectList.tsx +0 -108
- package/.forge/worktrees/pipeline-3156a8b3/components/ProjectManager.tsx +0 -401
- package/.forge/worktrees/pipeline-3156a8b3/components/SessionList.tsx +0 -74
- package/.forge/worktrees/pipeline-3156a8b3/components/SessionView.tsx +0 -726
- package/.forge/worktrees/pipeline-3156a8b3/components/SettingsModal.tsx +0 -1647
- package/.forge/worktrees/pipeline-3156a8b3/components/SkillsPanel.tsx +0 -969
- package/.forge/worktrees/pipeline-3156a8b3/components/StatusBar.tsx +0 -99
- package/.forge/worktrees/pipeline-3156a8b3/components/TabBar.tsx +0 -46
- package/.forge/worktrees/pipeline-3156a8b3/components/TaskBoard.tsx +0 -113
- package/.forge/worktrees/pipeline-3156a8b3/components/TaskDetail.tsx +0 -372
- package/.forge/worktrees/pipeline-3156a8b3/components/TerminalLauncher.tsx +0 -398
- package/.forge/worktrees/pipeline-3156a8b3/components/TunnelToggle.tsx +0 -206
- package/.forge/worktrees/pipeline-3156a8b3/components/UsagePanel.tsx +0 -207
- package/.forge/worktrees/pipeline-3156a8b3/components/WebTerminal.tsx +0 -1683
- package/.forge/worktrees/pipeline-3156a8b3/components/WorkspaceTree.tsx +0 -221
- package/.forge/worktrees/pipeline-3156a8b3/components/WorkspaceView.tsx +0 -4048
- package/.forge/worktrees/pipeline-3156a8b3/dev-test.sh +0 -5
- package/.forge/worktrees/pipeline-3156a8b3/docs/Forge_Memory_Layer_Design.docx +0 -0
- package/.forge/worktrees/pipeline-3156a8b3/docs/Forge_Strategy_Research_2026.docx +0 -0
- package/.forge/worktrees/pipeline-3156a8b3/docs/LOCAL-DEPLOY.md +0 -144
- package/.forge/worktrees/pipeline-3156a8b3/docs/roadmap-multi-agent-workflow.md +0 -330
- package/.forge/worktrees/pipeline-3156a8b3/forge-logo.png +0 -0
- package/.forge/worktrees/pipeline-3156a8b3/forge-logo.svg +0 -106
- package/.forge/worktrees/pipeline-3156a8b3/hooks/useSidebarResize.ts +0 -52
- package/.forge/worktrees/pipeline-3156a8b3/install.sh +0 -29
- package/.forge/worktrees/pipeline-3156a8b3/instrumentation.ts +0 -35
- package/.forge/worktrees/pipeline-3156a8b3/lib/agents/claude-adapter.ts +0 -104
- package/.forge/worktrees/pipeline-3156a8b3/lib/agents/generic-adapter.ts +0 -64
- package/.forge/worktrees/pipeline-3156a8b3/lib/agents/index.ts +0 -245
- package/.forge/worktrees/pipeline-3156a8b3/lib/agents/types.ts +0 -70
- package/.forge/worktrees/pipeline-3156a8b3/lib/artifacts.ts +0 -106
- package/.forge/worktrees/pipeline-3156a8b3/lib/auth.ts +0 -62
- package/.forge/worktrees/pipeline-3156a8b3/lib/builtin-plugins/docker.yaml +0 -70
- package/.forge/worktrees/pipeline-3156a8b3/lib/builtin-plugins/http.yaml +0 -66
- package/.forge/worktrees/pipeline-3156a8b3/lib/builtin-plugins/jenkins.yaml +0 -92
- package/.forge/worktrees/pipeline-3156a8b3/lib/builtin-plugins/llm-vision.yaml +0 -85
- package/.forge/worktrees/pipeline-3156a8b3/lib/builtin-plugins/playwright.yaml +0 -111
- package/.forge/worktrees/pipeline-3156a8b3/lib/builtin-plugins/shell-command.yaml +0 -60
- package/.forge/worktrees/pipeline-3156a8b3/lib/builtin-plugins/slack.yaml +0 -48
- package/.forge/worktrees/pipeline-3156a8b3/lib/builtin-plugins/webhook.yaml +0 -56
- package/.forge/worktrees/pipeline-3156a8b3/lib/claude-process.ts +0 -351
- package/.forge/worktrees/pipeline-3156a8b3/lib/claude-sessions.ts +0 -266
- package/.forge/worktrees/pipeline-3156a8b3/lib/claude-templates.ts +0 -227
- package/.forge/worktrees/pipeline-3156a8b3/lib/cloudflared.ts +0 -424
- package/.forge/worktrees/pipeline-3156a8b3/lib/crypto.ts +0 -67
- package/.forge/worktrees/pipeline-3156a8b3/lib/delivery.ts +0 -787
- package/.forge/worktrees/pipeline-3156a8b3/lib/dirs.ts +0 -99
- package/.forge/worktrees/pipeline-3156a8b3/lib/flows.ts +0 -86
- package/.forge/worktrees/pipeline-3156a8b3/lib/forge-mcp-server.ts +0 -717
- package/.forge/worktrees/pipeline-3156a8b3/lib/forge-skills/forge-inbox.md +0 -38
- package/.forge/worktrees/pipeline-3156a8b3/lib/forge-skills/forge-send.md +0 -47
- package/.forge/worktrees/pipeline-3156a8b3/lib/forge-skills/forge-status.md +0 -32
- package/.forge/worktrees/pipeline-3156a8b3/lib/forge-skills/forge-workspace-sync.md +0 -37
- package/.forge/worktrees/pipeline-3156a8b3/lib/help-docs/00-overview.md +0 -40
- package/.forge/worktrees/pipeline-3156a8b3/lib/help-docs/01-settings.md +0 -194
- package/.forge/worktrees/pipeline-3156a8b3/lib/help-docs/02-telegram.md +0 -41
- package/.forge/worktrees/pipeline-3156a8b3/lib/help-docs/03-tunnel.md +0 -31
- package/.forge/worktrees/pipeline-3156a8b3/lib/help-docs/04-tasks.md +0 -52
- package/.forge/worktrees/pipeline-3156a8b3/lib/help-docs/05-pipelines.md +0 -460
- package/.forge/worktrees/pipeline-3156a8b3/lib/help-docs/06-skills.md +0 -43
- package/.forge/worktrees/pipeline-3156a8b3/lib/help-docs/07-projects.md +0 -73
- package/.forge/worktrees/pipeline-3156a8b3/lib/help-docs/08-rules.md +0 -53
- package/.forge/worktrees/pipeline-3156a8b3/lib/help-docs/09-issue-autofix.md +0 -55
- package/.forge/worktrees/pipeline-3156a8b3/lib/help-docs/10-troubleshooting.md +0 -89
- package/.forge/worktrees/pipeline-3156a8b3/lib/help-docs/11-workspace.md +0 -810
- package/.forge/worktrees/pipeline-3156a8b3/lib/help-docs/CLAUDE.md +0 -62
- package/.forge/worktrees/pipeline-3156a8b3/lib/init.ts +0 -266
- package/.forge/worktrees/pipeline-3156a8b3/lib/issue-scanner.ts +0 -298
- package/.forge/worktrees/pipeline-3156a8b3/lib/logger.ts +0 -79
- package/.forge/worktrees/pipeline-3156a8b3/lib/notifications.ts +0 -75
- package/.forge/worktrees/pipeline-3156a8b3/lib/notify.ts +0 -108
- package/.forge/worktrees/pipeline-3156a8b3/lib/password.ts +0 -97
- package/.forge/worktrees/pipeline-3156a8b3/lib/pipeline-scheduler.ts +0 -373
- package/.forge/worktrees/pipeline-3156a8b3/lib/pipeline.ts +0 -1441
- package/.forge/worktrees/pipeline-3156a8b3/lib/plugins/executor.ts +0 -347
- package/.forge/worktrees/pipeline-3156a8b3/lib/plugins/registry.ts +0 -228
- package/.forge/worktrees/pipeline-3156a8b3/lib/plugins/types.ts +0 -103
- package/.forge/worktrees/pipeline-3156a8b3/lib/project-sessions.ts +0 -53
- package/.forge/worktrees/pipeline-3156a8b3/lib/projects.ts +0 -86
- package/.forge/worktrees/pipeline-3156a8b3/lib/session-manager.ts +0 -156
- package/.forge/worktrees/pipeline-3156a8b3/lib/session-utils.ts +0 -53
- package/.forge/worktrees/pipeline-3156a8b3/lib/session-watcher.ts +0 -345
- package/.forge/worktrees/pipeline-3156a8b3/lib/settings.ts +0 -195
- package/.forge/worktrees/pipeline-3156a8b3/lib/skills.ts +0 -458
- package/.forge/worktrees/pipeline-3156a8b3/lib/task-manager.ts +0 -949
- package/.forge/worktrees/pipeline-3156a8b3/lib/telegram-bot.ts +0 -1477
- package/.forge/worktrees/pipeline-3156a8b3/lib/telegram-standalone.ts +0 -83
- package/.forge/worktrees/pipeline-3156a8b3/lib/terminal-server.ts +0 -70
- package/.forge/worktrees/pipeline-3156a8b3/lib/terminal-standalone.ts +0 -421
- package/.forge/worktrees/pipeline-3156a8b3/lib/usage-scanner.ts +0 -249
- package/.forge/worktrees/pipeline-3156a8b3/lib/workspace/__tests__/state-machine.test.ts +0 -388
- package/.forge/worktrees/pipeline-3156a8b3/lib/workspace/__tests__/workspace.test.ts +0 -311
- package/.forge/worktrees/pipeline-3156a8b3/lib/workspace/agent-bus.ts +0 -416
- package/.forge/worktrees/pipeline-3156a8b3/lib/workspace/agent-worker.ts +0 -655
- package/.forge/worktrees/pipeline-3156a8b3/lib/workspace/backends/api-backend.ts +0 -262
- package/.forge/worktrees/pipeline-3156a8b3/lib/workspace/backends/cli-backend.ts +0 -491
- package/.forge/worktrees/pipeline-3156a8b3/lib/workspace/index.ts +0 -82
- package/.forge/worktrees/pipeline-3156a8b3/lib/workspace/manager.ts +0 -136
- package/.forge/worktrees/pipeline-3156a8b3/lib/workspace/orchestrator.ts +0 -3400
- package/.forge/worktrees/pipeline-3156a8b3/lib/workspace/persistence.ts +0 -309
- package/.forge/worktrees/pipeline-3156a8b3/lib/workspace/presets.ts +0 -649
- package/.forge/worktrees/pipeline-3156a8b3/lib/workspace/requests.ts +0 -287
- package/.forge/worktrees/pipeline-3156a8b3/lib/workspace/session-monitor.ts +0 -240
- package/.forge/worktrees/pipeline-3156a8b3/lib/workspace/skill-installer.ts +0 -275
- package/.forge/worktrees/pipeline-3156a8b3/lib/workspace/smith-memory.ts +0 -498
- package/.forge/worktrees/pipeline-3156a8b3/lib/workspace/types.ts +0 -241
- package/.forge/worktrees/pipeline-3156a8b3/lib/workspace/watch-manager.ts +0 -560
- package/.forge/worktrees/pipeline-3156a8b3/lib/workspace-standalone.ts +0 -911
- package/.forge/worktrees/pipeline-3156a8b3/middleware.ts +0 -51
- package/.forge/worktrees/pipeline-3156a8b3/next.config.ts +0 -26
- package/.forge/worktrees/pipeline-3156a8b3/package.json +0 -74
- package/.forge/worktrees/pipeline-3156a8b3/pnpm-lock.yaml +0 -3719
- package/.forge/worktrees/pipeline-3156a8b3/pnpm-workspace.yaml +0 -1
- package/.forge/worktrees/pipeline-3156a8b3/postcss.config.mjs +0 -7
- package/.forge/worktrees/pipeline-3156a8b3/publish.sh +0 -133
- package/.forge/worktrees/pipeline-3156a8b3/scripts/bench/README.md +0 -66
- package/.forge/worktrees/pipeline-3156a8b3/scripts/bench/results/.gitignore +0 -2
- package/.forge/worktrees/pipeline-3156a8b3/scripts/bench/run.ts +0 -635
- package/.forge/worktrees/pipeline-3156a8b3/scripts/bench/tasks/01-text-utils/task.md +0 -26
- package/.forge/worktrees/pipeline-3156a8b3/scripts/bench/tasks/01-text-utils/validator.sh +0 -46
- package/.forge/worktrees/pipeline-3156a8b3/scripts/bench/tasks/02-pagination/setup.sh +0 -19
- package/.forge/worktrees/pipeline-3156a8b3/scripts/bench/tasks/02-pagination/task.md +0 -48
- package/.forge/worktrees/pipeline-3156a8b3/scripts/bench/tasks/02-pagination/validator.sh +0 -69
- package/.forge/worktrees/pipeline-3156a8b3/scripts/bench/tasks/03-bug-fix/setup.sh +0 -82
- package/.forge/worktrees/pipeline-3156a8b3/scripts/bench/tasks/03-bug-fix/task.md +0 -30
- package/.forge/worktrees/pipeline-3156a8b3/scripts/bench/tasks/03-bug-fix/validator.sh +0 -29
- package/.forge/worktrees/pipeline-3156a8b3/scripts/verify-usage.ts +0 -178
- package/.forge/worktrees/pipeline-3156a8b3/src/config/index.ts +0 -129
- package/.forge/worktrees/pipeline-3156a8b3/src/core/db/database.ts +0 -259
- package/.forge/worktrees/pipeline-3156a8b3/src/core/memory/strategy.ts +0 -32
- package/.forge/worktrees/pipeline-3156a8b3/src/core/providers/chat.ts +0 -65
- package/.forge/worktrees/pipeline-3156a8b3/src/core/providers/registry.ts +0 -60
- package/.forge/worktrees/pipeline-3156a8b3/src/core/session/manager.ts +0 -190
- package/.forge/worktrees/pipeline-3156a8b3/src/types/index.ts +0 -129
- package/.forge/worktrees/pipeline-3156a8b3/start.sh +0 -31
- package/.forge/worktrees/pipeline-3156a8b3/templates/smith-lead.json +0 -45
- package/.forge/worktrees/pipeline-3156a8b3/tsconfig.json +0 -42
- package/.forge/worktrees/pipeline-316c6574/CLAUDE.md +0 -86
- package/.forge/worktrees/pipeline-316c6574/README.md +0 -136
- package/.forge/worktrees/pipeline-316c6574/RELEASE_NOTES.md +0 -11
- package/.forge/worktrees/pipeline-316c6574/app/api/agents/route.ts +0 -17
- package/.forge/worktrees/pipeline-316c6574/app/api/auth/[...nextauth]/route.ts +0 -3
- package/.forge/worktrees/pipeline-316c6574/app/api/auth/verify/route.ts +0 -46
- package/.forge/worktrees/pipeline-316c6574/app/api/claude/[id]/route.ts +0 -31
- package/.forge/worktrees/pipeline-316c6574/app/api/claude/[id]/stream/route.ts +0 -63
- package/.forge/worktrees/pipeline-316c6574/app/api/claude/route.ts +0 -28
- package/.forge/worktrees/pipeline-316c6574/app/api/claude-sessions/[projectName]/entries/route.ts +0 -23
- package/.forge/worktrees/pipeline-316c6574/app/api/claude-sessions/[projectName]/live/route.ts +0 -72
- package/.forge/worktrees/pipeline-316c6574/app/api/claude-sessions/[projectName]/route.ts +0 -37
- package/.forge/worktrees/pipeline-316c6574/app/api/claude-sessions/sync/route.ts +0 -17
- package/.forge/worktrees/pipeline-316c6574/app/api/claude-templates/route.ts +0 -145
- package/.forge/worktrees/pipeline-316c6574/app/api/code/route.ts +0 -299
- package/.forge/worktrees/pipeline-316c6574/app/api/delivery/[id]/route.ts +0 -62
- package/.forge/worktrees/pipeline-316c6574/app/api/delivery/route.ts +0 -40
- package/.forge/worktrees/pipeline-316c6574/app/api/detect-cli/route.ts +0 -46
- package/.forge/worktrees/pipeline-316c6574/app/api/docs/route.ts +0 -176
- package/.forge/worktrees/pipeline-316c6574/app/api/docs/sessions/route.ts +0 -54
- package/.forge/worktrees/pipeline-316c6574/app/api/favorites/route.ts +0 -26
- package/.forge/worktrees/pipeline-316c6574/app/api/flows/route.ts +0 -6
- package/.forge/worktrees/pipeline-316c6574/app/api/flows/run/route.ts +0 -19
- package/.forge/worktrees/pipeline-316c6574/app/api/git/route.ts +0 -149
- package/.forge/worktrees/pipeline-316c6574/app/api/help/route.ts +0 -84
- package/.forge/worktrees/pipeline-316c6574/app/api/issue-scanner/route.ts +0 -116
- package/.forge/worktrees/pipeline-316c6574/app/api/logs/route.ts +0 -100
- package/.forge/worktrees/pipeline-316c6574/app/api/mobile-chat/route.ts +0 -115
- package/.forge/worktrees/pipeline-316c6574/app/api/monitor/route.ts +0 -74
- package/.forge/worktrees/pipeline-316c6574/app/api/notifications/route.ts +0 -42
- package/.forge/worktrees/pipeline-316c6574/app/api/notify/test/route.ts +0 -33
- package/.forge/worktrees/pipeline-316c6574/app/api/online/route.ts +0 -40
- package/.forge/worktrees/pipeline-316c6574/app/api/pipelines/[id]/route.ts +0 -41
- package/.forge/worktrees/pipeline-316c6574/app/api/pipelines/route.ts +0 -90
- package/.forge/worktrees/pipeline-316c6574/app/api/plugins/route.ts +0 -75
- package/.forge/worktrees/pipeline-316c6574/app/api/preview/[...path]/route.ts +0 -64
- package/.forge/worktrees/pipeline-316c6574/app/api/preview/route.ts +0 -156
- package/.forge/worktrees/pipeline-316c6574/app/api/project-pipelines/route.ts +0 -91
- package/.forge/worktrees/pipeline-316c6574/app/api/project-sessions/route.ts +0 -61
- package/.forge/worktrees/pipeline-316c6574/app/api/projects/route.ts +0 -26
- package/.forge/worktrees/pipeline-316c6574/app/api/sessions/[id]/chat/route.ts +0 -64
- package/.forge/worktrees/pipeline-316c6574/app/api/sessions/[id]/messages/route.ts +0 -9
- package/.forge/worktrees/pipeline-316c6574/app/api/sessions/[id]/route.ts +0 -17
- package/.forge/worktrees/pipeline-316c6574/app/api/sessions/route.ts +0 -20
- package/.forge/worktrees/pipeline-316c6574/app/api/settings/route.ts +0 -64
- package/.forge/worktrees/pipeline-316c6574/app/api/skills/local/route.ts +0 -228
- package/.forge/worktrees/pipeline-316c6574/app/api/skills/route.ts +0 -182
- package/.forge/worktrees/pipeline-316c6574/app/api/smith-templates/route.ts +0 -81
- package/.forge/worktrees/pipeline-316c6574/app/api/status/route.ts +0 -12
- package/.forge/worktrees/pipeline-316c6574/app/api/tabs/route.ts +0 -25
- package/.forge/worktrees/pipeline-316c6574/app/api/tasks/[id]/route.ts +0 -51
- package/.forge/worktrees/pipeline-316c6574/app/api/tasks/[id]/stream/route.ts +0 -77
- package/.forge/worktrees/pipeline-316c6574/app/api/tasks/link/route.ts +0 -37
- package/.forge/worktrees/pipeline-316c6574/app/api/tasks/route.ts +0 -44
- package/.forge/worktrees/pipeline-316c6574/app/api/tasks/session/route.ts +0 -14
- package/.forge/worktrees/pipeline-316c6574/app/api/telegram/route.ts +0 -23
- package/.forge/worktrees/pipeline-316c6574/app/api/templates/route.ts +0 -6
- package/.forge/worktrees/pipeline-316c6574/app/api/terminal-bell/route.ts +0 -35
- package/.forge/worktrees/pipeline-316c6574/app/api/terminal-cwd/route.ts +0 -19
- package/.forge/worktrees/pipeline-316c6574/app/api/terminal-state/route.ts +0 -15
- package/.forge/worktrees/pipeline-316c6574/app/api/tunnel/route.ts +0 -26
- package/.forge/worktrees/pipeline-316c6574/app/api/upgrade/route.ts +0 -43
- package/.forge/worktrees/pipeline-316c6574/app/api/usage/route.ts +0 -20
- package/.forge/worktrees/pipeline-316c6574/app/api/version/route.ts +0 -78
- package/.forge/worktrees/pipeline-316c6574/app/api/watchers/route.ts +0 -33
- package/.forge/worktrees/pipeline-316c6574/app/api/workspace/[id]/agents/route.ts +0 -35
- package/.forge/worktrees/pipeline-316c6574/app/api/workspace/[id]/memory/route.ts +0 -23
- package/.forge/worktrees/pipeline-316c6574/app/api/workspace/[id]/smith/route.ts +0 -22
- package/.forge/worktrees/pipeline-316c6574/app/api/workspace/[id]/stream/route.ts +0 -28
- package/.forge/worktrees/pipeline-316c6574/app/api/workspace/route.ts +0 -100
- package/.forge/worktrees/pipeline-316c6574/app/global-error.tsx +0 -21
- package/.forge/worktrees/pipeline-316c6574/app/globals.css +0 -52
- package/.forge/worktrees/pipeline-316c6574/app/icon.ico +0 -0
- package/.forge/worktrees/pipeline-316c6574/app/icon.png +0 -0
- package/.forge/worktrees/pipeline-316c6574/app/icon.svg +0 -106
- package/.forge/worktrees/pipeline-316c6574/app/layout.tsx +0 -17
- package/.forge/worktrees/pipeline-316c6574/app/login/LoginForm.tsx +0 -96
- package/.forge/worktrees/pipeline-316c6574/app/login/page.tsx +0 -10
- package/.forge/worktrees/pipeline-316c6574/app/mobile/page.tsx +0 -9
- package/.forge/worktrees/pipeline-316c6574/app/page.tsx +0 -21
- package/.forge/worktrees/pipeline-316c6574/bin/forge-server.mjs +0 -484
- package/.forge/worktrees/pipeline-316c6574/check-forge-status.sh +0 -71
- package/.forge/worktrees/pipeline-316c6574/cli/mw.ts +0 -579
- package/.forge/worktrees/pipeline-316c6574/components/BrowserPanel.tsx +0 -175
- package/.forge/worktrees/pipeline-316c6574/components/ChatPanel.tsx +0 -191
- package/.forge/worktrees/pipeline-316c6574/components/ClaudeTerminal.tsx +0 -267
- package/.forge/worktrees/pipeline-316c6574/components/CodeViewer.tsx +0 -787
- package/.forge/worktrees/pipeline-316c6574/components/ConversationEditor.tsx +0 -411
- package/.forge/worktrees/pipeline-316c6574/components/ConversationGraphView.tsx +0 -347
- package/.forge/worktrees/pipeline-316c6574/components/ConversationTerminalView.tsx +0 -303
- package/.forge/worktrees/pipeline-316c6574/components/Dashboard.tsx +0 -807
- package/.forge/worktrees/pipeline-316c6574/components/DashboardWrapper.tsx +0 -9
- package/.forge/worktrees/pipeline-316c6574/components/DeliveryFlowEditor.tsx +0 -491
- package/.forge/worktrees/pipeline-316c6574/components/DeliveryList.tsx +0 -230
- package/.forge/worktrees/pipeline-316c6574/components/DeliveryWorkspace.tsx +0 -589
- package/.forge/worktrees/pipeline-316c6574/components/DocTerminal.tsx +0 -187
- package/.forge/worktrees/pipeline-316c6574/components/DocsViewer.tsx +0 -574
- package/.forge/worktrees/pipeline-316c6574/components/HelpDialog.tsx +0 -169
- package/.forge/worktrees/pipeline-316c6574/components/HelpTerminal.tsx +0 -141
- package/.forge/worktrees/pipeline-316c6574/components/InlinePipelineView.tsx +0 -111
- package/.forge/worktrees/pipeline-316c6574/components/LogViewer.tsx +0 -194
- package/.forge/worktrees/pipeline-316c6574/components/MarkdownContent.tsx +0 -73
- package/.forge/worktrees/pipeline-316c6574/components/MobileView.tsx +0 -385
- package/.forge/worktrees/pipeline-316c6574/components/MonitorPanel.tsx +0 -122
- package/.forge/worktrees/pipeline-316c6574/components/NewSessionModal.tsx +0 -93
- package/.forge/worktrees/pipeline-316c6574/components/NewTaskModal.tsx +0 -492
- package/.forge/worktrees/pipeline-316c6574/components/PipelineEditor.tsx +0 -570
- package/.forge/worktrees/pipeline-316c6574/components/PipelineView.tsx +0 -1018
- package/.forge/worktrees/pipeline-316c6574/components/PluginsPanel.tsx +0 -472
- package/.forge/worktrees/pipeline-316c6574/components/ProjectDetail.tsx +0 -1618
- package/.forge/worktrees/pipeline-316c6574/components/ProjectList.tsx +0 -108
- package/.forge/worktrees/pipeline-316c6574/components/ProjectManager.tsx +0 -401
- package/.forge/worktrees/pipeline-316c6574/components/SessionList.tsx +0 -74
- package/.forge/worktrees/pipeline-316c6574/components/SessionView.tsx +0 -726
- package/.forge/worktrees/pipeline-316c6574/components/SettingsModal.tsx +0 -1647
- package/.forge/worktrees/pipeline-316c6574/components/SkillsPanel.tsx +0 -969
- package/.forge/worktrees/pipeline-316c6574/components/StatusBar.tsx +0 -99
- package/.forge/worktrees/pipeline-316c6574/components/TabBar.tsx +0 -46
- package/.forge/worktrees/pipeline-316c6574/components/TaskBoard.tsx +0 -113
- package/.forge/worktrees/pipeline-316c6574/components/TaskDetail.tsx +0 -372
- package/.forge/worktrees/pipeline-316c6574/components/TerminalLauncher.tsx +0 -398
- package/.forge/worktrees/pipeline-316c6574/components/TunnelToggle.tsx +0 -206
- package/.forge/worktrees/pipeline-316c6574/components/UsagePanel.tsx +0 -207
- package/.forge/worktrees/pipeline-316c6574/components/WebTerminal.tsx +0 -1683
- package/.forge/worktrees/pipeline-316c6574/components/WorkspaceTree.tsx +0 -221
- package/.forge/worktrees/pipeline-316c6574/components/WorkspaceView.tsx +0 -4048
- package/.forge/worktrees/pipeline-316c6574/dev-test.sh +0 -5
- package/.forge/worktrees/pipeline-316c6574/docs/Forge_Memory_Layer_Design.docx +0 -0
- package/.forge/worktrees/pipeline-316c6574/docs/Forge_Strategy_Research_2026.docx +0 -0
- package/.forge/worktrees/pipeline-316c6574/docs/LOCAL-DEPLOY.md +0 -144
- package/.forge/worktrees/pipeline-316c6574/docs/roadmap-multi-agent-workflow.md +0 -330
- package/.forge/worktrees/pipeline-316c6574/forge-logo.png +0 -0
- package/.forge/worktrees/pipeline-316c6574/forge-logo.svg +0 -106
- package/.forge/worktrees/pipeline-316c6574/hooks/useSidebarResize.ts +0 -52
- package/.forge/worktrees/pipeline-316c6574/install.sh +0 -29
- package/.forge/worktrees/pipeline-316c6574/instrumentation.ts +0 -35
- package/.forge/worktrees/pipeline-316c6574/lib/agents/claude-adapter.ts +0 -104
- package/.forge/worktrees/pipeline-316c6574/lib/agents/generic-adapter.ts +0 -64
- package/.forge/worktrees/pipeline-316c6574/lib/agents/index.ts +0 -245
- package/.forge/worktrees/pipeline-316c6574/lib/agents/types.ts +0 -70
- package/.forge/worktrees/pipeline-316c6574/lib/artifacts.ts +0 -106
- package/.forge/worktrees/pipeline-316c6574/lib/auth.ts +0 -62
- package/.forge/worktrees/pipeline-316c6574/lib/builtin-plugins/docker.yaml +0 -70
- package/.forge/worktrees/pipeline-316c6574/lib/builtin-plugins/http.yaml +0 -66
- package/.forge/worktrees/pipeline-316c6574/lib/builtin-plugins/jenkins.yaml +0 -92
- package/.forge/worktrees/pipeline-316c6574/lib/builtin-plugins/llm-vision.yaml +0 -85
- package/.forge/worktrees/pipeline-316c6574/lib/builtin-plugins/playwright.yaml +0 -111
- package/.forge/worktrees/pipeline-316c6574/lib/builtin-plugins/shell-command.yaml +0 -60
- package/.forge/worktrees/pipeline-316c6574/lib/builtin-plugins/slack.yaml +0 -48
- package/.forge/worktrees/pipeline-316c6574/lib/builtin-plugins/webhook.yaml +0 -56
- package/.forge/worktrees/pipeline-316c6574/lib/claude-process.ts +0 -361
- package/.forge/worktrees/pipeline-316c6574/lib/claude-sessions.ts +0 -266
- package/.forge/worktrees/pipeline-316c6574/lib/claude-templates.ts +0 -227
- package/.forge/worktrees/pipeline-316c6574/lib/cloudflared.ts +0 -424
- package/.forge/worktrees/pipeline-316c6574/lib/crypto.ts +0 -67
- package/.forge/worktrees/pipeline-316c6574/lib/delivery.ts +0 -787
- package/.forge/worktrees/pipeline-316c6574/lib/dirs.ts +0 -99
- package/.forge/worktrees/pipeline-316c6574/lib/flows.ts +0 -86
- package/.forge/worktrees/pipeline-316c6574/lib/forge-mcp-server.ts +0 -717
- package/.forge/worktrees/pipeline-316c6574/lib/forge-skills/forge-inbox.md +0 -38
- package/.forge/worktrees/pipeline-316c6574/lib/forge-skills/forge-send.md +0 -47
- package/.forge/worktrees/pipeline-316c6574/lib/forge-skills/forge-status.md +0 -32
- package/.forge/worktrees/pipeline-316c6574/lib/forge-skills/forge-workspace-sync.md +0 -37
- package/.forge/worktrees/pipeline-316c6574/lib/help-docs/00-overview.md +0 -40
- package/.forge/worktrees/pipeline-316c6574/lib/help-docs/01-settings.md +0 -194
- package/.forge/worktrees/pipeline-316c6574/lib/help-docs/02-telegram.md +0 -41
- package/.forge/worktrees/pipeline-316c6574/lib/help-docs/03-tunnel.md +0 -31
- package/.forge/worktrees/pipeline-316c6574/lib/help-docs/04-tasks.md +0 -52
- package/.forge/worktrees/pipeline-316c6574/lib/help-docs/05-pipelines.md +0 -460
- package/.forge/worktrees/pipeline-316c6574/lib/help-docs/06-skills.md +0 -43
- package/.forge/worktrees/pipeline-316c6574/lib/help-docs/07-projects.md +0 -73
- package/.forge/worktrees/pipeline-316c6574/lib/help-docs/08-rules.md +0 -53
- package/.forge/worktrees/pipeline-316c6574/lib/help-docs/09-issue-autofix.md +0 -55
- package/.forge/worktrees/pipeline-316c6574/lib/help-docs/10-troubleshooting.md +0 -89
- package/.forge/worktrees/pipeline-316c6574/lib/help-docs/11-workspace.md +0 -810
- package/.forge/worktrees/pipeline-316c6574/lib/help-docs/CLAUDE.md +0 -62
- package/.forge/worktrees/pipeline-316c6574/lib/init.ts +0 -266
- package/.forge/worktrees/pipeline-316c6574/lib/issue-scanner.ts +0 -298
- package/.forge/worktrees/pipeline-316c6574/lib/logger.ts +0 -79
- package/.forge/worktrees/pipeline-316c6574/lib/notifications.ts +0 -75
- package/.forge/worktrees/pipeline-316c6574/lib/notify.ts +0 -108
- package/.forge/worktrees/pipeline-316c6574/lib/password.ts +0 -97
- package/.forge/worktrees/pipeline-316c6574/lib/pipeline-scheduler.ts +0 -373
- package/.forge/worktrees/pipeline-316c6574/lib/pipeline.ts +0 -1441
- package/.forge/worktrees/pipeline-316c6574/lib/plugins/executor.ts +0 -347
- package/.forge/worktrees/pipeline-316c6574/lib/plugins/registry.ts +0 -228
- package/.forge/worktrees/pipeline-316c6574/lib/plugins/types.ts +0 -103
- package/.forge/worktrees/pipeline-316c6574/lib/project-sessions.ts +0 -53
- package/.forge/worktrees/pipeline-316c6574/lib/projects.ts +0 -86
- package/.forge/worktrees/pipeline-316c6574/lib/session-manager.ts +0 -156
- package/.forge/worktrees/pipeline-316c6574/lib/session-utils.ts +0 -53
- package/.forge/worktrees/pipeline-316c6574/lib/session-watcher.ts +0 -345
- package/.forge/worktrees/pipeline-316c6574/lib/settings.ts +0 -195
- package/.forge/worktrees/pipeline-316c6574/lib/skills.ts +0 -458
- package/.forge/worktrees/pipeline-316c6574/lib/task-manager.ts +0 -949
- package/.forge/worktrees/pipeline-316c6574/lib/telegram-bot.ts +0 -1477
- package/.forge/worktrees/pipeline-316c6574/lib/telegram-standalone.ts +0 -83
- package/.forge/worktrees/pipeline-316c6574/lib/terminal-server.ts +0 -70
- package/.forge/worktrees/pipeline-316c6574/lib/terminal-standalone.ts +0 -421
- package/.forge/worktrees/pipeline-316c6574/lib/usage-scanner.ts +0 -249
- package/.forge/worktrees/pipeline-316c6574/lib/workspace/__tests__/state-machine.test.ts +0 -388
- package/.forge/worktrees/pipeline-316c6574/lib/workspace/__tests__/workspace.test.ts +0 -311
- package/.forge/worktrees/pipeline-316c6574/lib/workspace/agent-bus.ts +0 -416
- package/.forge/worktrees/pipeline-316c6574/lib/workspace/agent-worker.ts +0 -655
- package/.forge/worktrees/pipeline-316c6574/lib/workspace/backends/api-backend.ts +0 -262
- package/.forge/worktrees/pipeline-316c6574/lib/workspace/backends/cli-backend.ts +0 -491
- package/.forge/worktrees/pipeline-316c6574/lib/workspace/index.ts +0 -82
- package/.forge/worktrees/pipeline-316c6574/lib/workspace/manager.ts +0 -136
- package/.forge/worktrees/pipeline-316c6574/lib/workspace/orchestrator.ts +0 -3400
- package/.forge/worktrees/pipeline-316c6574/lib/workspace/persistence.ts +0 -309
- package/.forge/worktrees/pipeline-316c6574/lib/workspace/presets.ts +0 -649
- package/.forge/worktrees/pipeline-316c6574/lib/workspace/requests.ts +0 -287
- package/.forge/worktrees/pipeline-316c6574/lib/workspace/session-monitor.ts +0 -240
- package/.forge/worktrees/pipeline-316c6574/lib/workspace/skill-installer.ts +0 -275
- package/.forge/worktrees/pipeline-316c6574/lib/workspace/smith-memory.ts +0 -498
- package/.forge/worktrees/pipeline-316c6574/lib/workspace/types.ts +0 -241
- package/.forge/worktrees/pipeline-316c6574/lib/workspace/watch-manager.ts +0 -560
- package/.forge/worktrees/pipeline-316c6574/lib/workspace-standalone.ts +0 -911
- package/.forge/worktrees/pipeline-316c6574/middleware.ts +0 -51
- package/.forge/worktrees/pipeline-316c6574/next.config.ts +0 -26
- package/.forge/worktrees/pipeline-316c6574/package.json +0 -74
- package/.forge/worktrees/pipeline-316c6574/pnpm-lock.yaml +0 -3719
- package/.forge/worktrees/pipeline-316c6574/pnpm-workspace.yaml +0 -1
- package/.forge/worktrees/pipeline-316c6574/postcss.config.mjs +0 -7
- package/.forge/worktrees/pipeline-316c6574/publish.sh +0 -133
- package/.forge/worktrees/pipeline-316c6574/scripts/bench/README.md +0 -66
- package/.forge/worktrees/pipeline-316c6574/scripts/bench/results/.gitignore +0 -2
- package/.forge/worktrees/pipeline-316c6574/scripts/bench/run.ts +0 -635
- package/.forge/worktrees/pipeline-316c6574/scripts/bench/tasks/01-text-utils/task.md +0 -26
- package/.forge/worktrees/pipeline-316c6574/scripts/bench/tasks/01-text-utils/validator.sh +0 -46
- package/.forge/worktrees/pipeline-316c6574/scripts/bench/tasks/02-pagination/setup.sh +0 -19
- package/.forge/worktrees/pipeline-316c6574/scripts/bench/tasks/02-pagination/task.md +0 -48
- package/.forge/worktrees/pipeline-316c6574/scripts/bench/tasks/02-pagination/validator.sh +0 -69
- package/.forge/worktrees/pipeline-316c6574/scripts/bench/tasks/03-bug-fix/setup.sh +0 -82
- package/.forge/worktrees/pipeline-316c6574/scripts/bench/tasks/03-bug-fix/task.md +0 -30
- package/.forge/worktrees/pipeline-316c6574/scripts/bench/tasks/03-bug-fix/validator.sh +0 -29
- package/.forge/worktrees/pipeline-316c6574/scripts/verify-usage.ts +0 -178
- package/.forge/worktrees/pipeline-316c6574/src/config/index.ts +0 -129
- package/.forge/worktrees/pipeline-316c6574/src/core/db/database.ts +0 -259
- package/.forge/worktrees/pipeline-316c6574/src/core/memory/strategy.ts +0 -32
- package/.forge/worktrees/pipeline-316c6574/src/core/providers/chat.ts +0 -65
- package/.forge/worktrees/pipeline-316c6574/src/core/providers/registry.ts +0 -60
- package/.forge/worktrees/pipeline-316c6574/src/core/session/manager.ts +0 -190
- package/.forge/worktrees/pipeline-316c6574/src/types/index.ts +0 -129
- package/.forge/worktrees/pipeline-316c6574/start.sh +0 -31
- package/.forge/worktrees/pipeline-316c6574/templates/smith-lead.json +0 -45
- package/.forge/worktrees/pipeline-316c6574/tsconfig.json +0 -42
- package/.forge/worktrees/pipeline-44a94121/CLAUDE.md +0 -86
- package/.forge/worktrees/pipeline-44a94121/README.md +0 -136
- package/.forge/worktrees/pipeline-44a94121/RELEASE_NOTES.md +0 -11
- package/.forge/worktrees/pipeline-44a94121/app/api/agents/route.ts +0 -17
- package/.forge/worktrees/pipeline-44a94121/app/api/auth/[...nextauth]/route.ts +0 -3
- package/.forge/worktrees/pipeline-44a94121/app/api/auth/verify/route.ts +0 -46
- package/.forge/worktrees/pipeline-44a94121/app/api/claude/[id]/route.ts +0 -31
- package/.forge/worktrees/pipeline-44a94121/app/api/claude/[id]/stream/route.ts +0 -63
- package/.forge/worktrees/pipeline-44a94121/app/api/claude/route.ts +0 -28
- package/.forge/worktrees/pipeline-44a94121/app/api/claude-sessions/[projectName]/entries/route.ts +0 -23
- package/.forge/worktrees/pipeline-44a94121/app/api/claude-sessions/[projectName]/live/route.ts +0 -72
- package/.forge/worktrees/pipeline-44a94121/app/api/claude-sessions/[projectName]/route.ts +0 -37
- package/.forge/worktrees/pipeline-44a94121/app/api/claude-sessions/sync/route.ts +0 -17
- package/.forge/worktrees/pipeline-44a94121/app/api/claude-templates/route.ts +0 -145
- package/.forge/worktrees/pipeline-44a94121/app/api/code/route.ts +0 -299
- package/.forge/worktrees/pipeline-44a94121/app/api/delivery/[id]/route.ts +0 -62
- package/.forge/worktrees/pipeline-44a94121/app/api/delivery/route.ts +0 -40
- package/.forge/worktrees/pipeline-44a94121/app/api/detect-cli/route.ts +0 -46
- package/.forge/worktrees/pipeline-44a94121/app/api/docs/route.ts +0 -176
- package/.forge/worktrees/pipeline-44a94121/app/api/docs/sessions/route.ts +0 -54
- package/.forge/worktrees/pipeline-44a94121/app/api/favorites/route.ts +0 -26
- package/.forge/worktrees/pipeline-44a94121/app/api/flows/route.ts +0 -6
- package/.forge/worktrees/pipeline-44a94121/app/api/flows/run/route.ts +0 -19
- package/.forge/worktrees/pipeline-44a94121/app/api/git/route.ts +0 -149
- package/.forge/worktrees/pipeline-44a94121/app/api/help/route.ts +0 -84
- package/.forge/worktrees/pipeline-44a94121/app/api/issue-scanner/route.ts +0 -116
- package/.forge/worktrees/pipeline-44a94121/app/api/logs/route.ts +0 -100
- package/.forge/worktrees/pipeline-44a94121/app/api/mobile-chat/route.ts +0 -115
- package/.forge/worktrees/pipeline-44a94121/app/api/monitor/route.ts +0 -74
- package/.forge/worktrees/pipeline-44a94121/app/api/notifications/route.ts +0 -42
- package/.forge/worktrees/pipeline-44a94121/app/api/notify/test/route.ts +0 -33
- package/.forge/worktrees/pipeline-44a94121/app/api/online/route.ts +0 -40
- package/.forge/worktrees/pipeline-44a94121/app/api/pipelines/[id]/route.ts +0 -41
- package/.forge/worktrees/pipeline-44a94121/app/api/pipelines/route.ts +0 -90
- package/.forge/worktrees/pipeline-44a94121/app/api/plugins/route.ts +0 -75
- package/.forge/worktrees/pipeline-44a94121/app/api/preview/[...path]/route.ts +0 -64
- package/.forge/worktrees/pipeline-44a94121/app/api/preview/route.ts +0 -156
- package/.forge/worktrees/pipeline-44a94121/app/api/project-pipelines/route.ts +0 -91
- package/.forge/worktrees/pipeline-44a94121/app/api/project-sessions/route.ts +0 -61
- package/.forge/worktrees/pipeline-44a94121/app/api/projects/route.ts +0 -26
- package/.forge/worktrees/pipeline-44a94121/app/api/sessions/[id]/chat/route.ts +0 -64
- package/.forge/worktrees/pipeline-44a94121/app/api/sessions/[id]/messages/route.ts +0 -9
- package/.forge/worktrees/pipeline-44a94121/app/api/sessions/[id]/route.ts +0 -17
- package/.forge/worktrees/pipeline-44a94121/app/api/sessions/route.ts +0 -20
- package/.forge/worktrees/pipeline-44a94121/app/api/settings/route.ts +0 -64
- package/.forge/worktrees/pipeline-44a94121/app/api/skills/local/route.ts +0 -228
- package/.forge/worktrees/pipeline-44a94121/app/api/skills/route.ts +0 -182
- package/.forge/worktrees/pipeline-44a94121/app/api/smith-templates/route.ts +0 -81
- package/.forge/worktrees/pipeline-44a94121/app/api/status/route.ts +0 -12
- package/.forge/worktrees/pipeline-44a94121/app/api/tabs/route.ts +0 -25
- package/.forge/worktrees/pipeline-44a94121/app/api/tasks/[id]/route.ts +0 -51
- package/.forge/worktrees/pipeline-44a94121/app/api/tasks/[id]/stream/route.ts +0 -77
- package/.forge/worktrees/pipeline-44a94121/app/api/tasks/link/route.ts +0 -37
- package/.forge/worktrees/pipeline-44a94121/app/api/tasks/route.ts +0 -44
- package/.forge/worktrees/pipeline-44a94121/app/api/tasks/session/route.ts +0 -14
- package/.forge/worktrees/pipeline-44a94121/app/api/telegram/route.ts +0 -23
- package/.forge/worktrees/pipeline-44a94121/app/api/templates/route.ts +0 -6
- package/.forge/worktrees/pipeline-44a94121/app/api/terminal-bell/route.ts +0 -35
- package/.forge/worktrees/pipeline-44a94121/app/api/terminal-cwd/route.ts +0 -19
- package/.forge/worktrees/pipeline-44a94121/app/api/terminal-state/route.ts +0 -15
- package/.forge/worktrees/pipeline-44a94121/app/api/tunnel/route.ts +0 -26
- package/.forge/worktrees/pipeline-44a94121/app/api/upgrade/route.ts +0 -43
- package/.forge/worktrees/pipeline-44a94121/app/api/usage/route.ts +0 -20
- package/.forge/worktrees/pipeline-44a94121/app/api/version/route.ts +0 -78
- package/.forge/worktrees/pipeline-44a94121/app/api/watchers/route.ts +0 -33
- package/.forge/worktrees/pipeline-44a94121/app/api/workspace/[id]/agents/route.ts +0 -35
- package/.forge/worktrees/pipeline-44a94121/app/api/workspace/[id]/memory/route.ts +0 -23
- package/.forge/worktrees/pipeline-44a94121/app/api/workspace/[id]/smith/route.ts +0 -22
- package/.forge/worktrees/pipeline-44a94121/app/api/workspace/[id]/stream/route.ts +0 -28
- package/.forge/worktrees/pipeline-44a94121/app/api/workspace/route.ts +0 -100
- package/.forge/worktrees/pipeline-44a94121/app/global-error.tsx +0 -21
- package/.forge/worktrees/pipeline-44a94121/app/globals.css +0 -52
- package/.forge/worktrees/pipeline-44a94121/app/icon.ico +0 -0
- package/.forge/worktrees/pipeline-44a94121/app/icon.png +0 -0
- package/.forge/worktrees/pipeline-44a94121/app/icon.svg +0 -106
- package/.forge/worktrees/pipeline-44a94121/app/layout.tsx +0 -17
- package/.forge/worktrees/pipeline-44a94121/app/login/LoginForm.tsx +0 -96
- package/.forge/worktrees/pipeline-44a94121/app/login/page.tsx +0 -10
- package/.forge/worktrees/pipeline-44a94121/app/mobile/page.tsx +0 -9
- package/.forge/worktrees/pipeline-44a94121/app/page.tsx +0 -21
- package/.forge/worktrees/pipeline-44a94121/bin/forge-server.mjs +0 -484
- package/.forge/worktrees/pipeline-44a94121/check-forge-status.sh +0 -71
- package/.forge/worktrees/pipeline-44a94121/cli/mw.ts +0 -579
- package/.forge/worktrees/pipeline-44a94121/components/BrowserPanel.tsx +0 -175
- package/.forge/worktrees/pipeline-44a94121/components/ChatPanel.tsx +0 -191
- package/.forge/worktrees/pipeline-44a94121/components/ClaudeTerminal.tsx +0 -267
- package/.forge/worktrees/pipeline-44a94121/components/CodeViewer.tsx +0 -787
- package/.forge/worktrees/pipeline-44a94121/components/ConversationEditor.tsx +0 -411
- package/.forge/worktrees/pipeline-44a94121/components/ConversationGraphView.tsx +0 -347
- package/.forge/worktrees/pipeline-44a94121/components/ConversationTerminalView.tsx +0 -303
- package/.forge/worktrees/pipeline-44a94121/components/Dashboard.tsx +0 -807
- package/.forge/worktrees/pipeline-44a94121/components/DashboardWrapper.tsx +0 -9
- package/.forge/worktrees/pipeline-44a94121/components/DeliveryFlowEditor.tsx +0 -491
- package/.forge/worktrees/pipeline-44a94121/components/DeliveryList.tsx +0 -230
- package/.forge/worktrees/pipeline-44a94121/components/DeliveryWorkspace.tsx +0 -589
- package/.forge/worktrees/pipeline-44a94121/components/DocTerminal.tsx +0 -187
- package/.forge/worktrees/pipeline-44a94121/components/DocsViewer.tsx +0 -574
- package/.forge/worktrees/pipeline-44a94121/components/HelpDialog.tsx +0 -169
- package/.forge/worktrees/pipeline-44a94121/components/HelpTerminal.tsx +0 -141
- package/.forge/worktrees/pipeline-44a94121/components/InlinePipelineView.tsx +0 -111
- package/.forge/worktrees/pipeline-44a94121/components/LogViewer.tsx +0 -194
- package/.forge/worktrees/pipeline-44a94121/components/MarkdownContent.tsx +0 -73
- package/.forge/worktrees/pipeline-44a94121/components/MobileView.tsx +0 -385
- package/.forge/worktrees/pipeline-44a94121/components/MonitorPanel.tsx +0 -122
- package/.forge/worktrees/pipeline-44a94121/components/NewSessionModal.tsx +0 -93
- package/.forge/worktrees/pipeline-44a94121/components/NewTaskModal.tsx +0 -492
- package/.forge/worktrees/pipeline-44a94121/components/PipelineEditor.tsx +0 -570
- package/.forge/worktrees/pipeline-44a94121/components/PipelineView.tsx +0 -1018
- package/.forge/worktrees/pipeline-44a94121/components/PluginsPanel.tsx +0 -472
- package/.forge/worktrees/pipeline-44a94121/components/ProjectDetail.tsx +0 -1618
- package/.forge/worktrees/pipeline-44a94121/components/ProjectList.tsx +0 -108
- package/.forge/worktrees/pipeline-44a94121/components/ProjectManager.tsx +0 -401
- package/.forge/worktrees/pipeline-44a94121/components/SessionList.tsx +0 -74
- package/.forge/worktrees/pipeline-44a94121/components/SessionView.tsx +0 -726
- package/.forge/worktrees/pipeline-44a94121/components/SettingsModal.tsx +0 -1647
- package/.forge/worktrees/pipeline-44a94121/components/SkillsPanel.tsx +0 -969
- package/.forge/worktrees/pipeline-44a94121/components/StatusBar.tsx +0 -99
- package/.forge/worktrees/pipeline-44a94121/components/TabBar.tsx +0 -46
- package/.forge/worktrees/pipeline-44a94121/components/TaskBoard.tsx +0 -113
- package/.forge/worktrees/pipeline-44a94121/components/TaskDetail.tsx +0 -372
- package/.forge/worktrees/pipeline-44a94121/components/TerminalLauncher.tsx +0 -398
- package/.forge/worktrees/pipeline-44a94121/components/TunnelToggle.tsx +0 -206
- package/.forge/worktrees/pipeline-44a94121/components/UsagePanel.tsx +0 -207
- package/.forge/worktrees/pipeline-44a94121/components/WebTerminal.tsx +0 -1683
- package/.forge/worktrees/pipeline-44a94121/components/WorkspaceTree.tsx +0 -221
- package/.forge/worktrees/pipeline-44a94121/components/WorkspaceView.tsx +0 -4048
- package/.forge/worktrees/pipeline-44a94121/dev-test.sh +0 -5
- package/.forge/worktrees/pipeline-44a94121/docs/Forge_Memory_Layer_Design.docx +0 -0
- package/.forge/worktrees/pipeline-44a94121/docs/Forge_Strategy_Research_2026.docx +0 -0
- package/.forge/worktrees/pipeline-44a94121/docs/LOCAL-DEPLOY.md +0 -144
- package/.forge/worktrees/pipeline-44a94121/docs/roadmap-multi-agent-workflow.md +0 -330
- package/.forge/worktrees/pipeline-44a94121/forge-logo.png +0 -0
- package/.forge/worktrees/pipeline-44a94121/forge-logo.svg +0 -106
- package/.forge/worktrees/pipeline-44a94121/hooks/useSidebarResize.ts +0 -52
- package/.forge/worktrees/pipeline-44a94121/install.sh +0 -29
- package/.forge/worktrees/pipeline-44a94121/instrumentation.ts +0 -35
- package/.forge/worktrees/pipeline-44a94121/lib/agents/claude-adapter.ts +0 -104
- package/.forge/worktrees/pipeline-44a94121/lib/agents/generic-adapter.ts +0 -64
- package/.forge/worktrees/pipeline-44a94121/lib/agents/index.ts +0 -245
- package/.forge/worktrees/pipeline-44a94121/lib/agents/types.ts +0 -70
- package/.forge/worktrees/pipeline-44a94121/lib/artifacts.ts +0 -106
- package/.forge/worktrees/pipeline-44a94121/lib/auth.ts +0 -62
- package/.forge/worktrees/pipeline-44a94121/lib/builtin-plugins/docker.yaml +0 -70
- package/.forge/worktrees/pipeline-44a94121/lib/builtin-plugins/http.yaml +0 -66
- package/.forge/worktrees/pipeline-44a94121/lib/builtin-plugins/jenkins.yaml +0 -92
- package/.forge/worktrees/pipeline-44a94121/lib/builtin-plugins/llm-vision.yaml +0 -85
- package/.forge/worktrees/pipeline-44a94121/lib/builtin-plugins/playwright.yaml +0 -111
- package/.forge/worktrees/pipeline-44a94121/lib/builtin-plugins/shell-command.yaml +0 -60
- package/.forge/worktrees/pipeline-44a94121/lib/builtin-plugins/slack.yaml +0 -48
- package/.forge/worktrees/pipeline-44a94121/lib/builtin-plugins/webhook.yaml +0 -56
- package/.forge/worktrees/pipeline-44a94121/lib/claude-process.ts +0 -351
- package/.forge/worktrees/pipeline-44a94121/lib/claude-sessions.ts +0 -266
- package/.forge/worktrees/pipeline-44a94121/lib/claude-templates.ts +0 -227
- package/.forge/worktrees/pipeline-44a94121/lib/cloudflared.ts +0 -424
- package/.forge/worktrees/pipeline-44a94121/lib/crypto.ts +0 -67
- package/.forge/worktrees/pipeline-44a94121/lib/delivery.ts +0 -787
- package/.forge/worktrees/pipeline-44a94121/lib/dirs.ts +0 -99
- package/.forge/worktrees/pipeline-44a94121/lib/flows.ts +0 -86
- package/.forge/worktrees/pipeline-44a94121/lib/forge-mcp-server.ts +0 -717
- package/.forge/worktrees/pipeline-44a94121/lib/forge-skills/forge-inbox.md +0 -38
- package/.forge/worktrees/pipeline-44a94121/lib/forge-skills/forge-send.md +0 -47
- package/.forge/worktrees/pipeline-44a94121/lib/forge-skills/forge-status.md +0 -32
- package/.forge/worktrees/pipeline-44a94121/lib/forge-skills/forge-workspace-sync.md +0 -37
- package/.forge/worktrees/pipeline-44a94121/lib/help-docs/00-overview.md +0 -40
- package/.forge/worktrees/pipeline-44a94121/lib/help-docs/01-settings.md +0 -194
- package/.forge/worktrees/pipeline-44a94121/lib/help-docs/02-telegram.md +0 -41
- package/.forge/worktrees/pipeline-44a94121/lib/help-docs/03-tunnel.md +0 -31
- package/.forge/worktrees/pipeline-44a94121/lib/help-docs/04-tasks.md +0 -52
- package/.forge/worktrees/pipeline-44a94121/lib/help-docs/05-pipelines.md +0 -460
- package/.forge/worktrees/pipeline-44a94121/lib/help-docs/06-skills.md +0 -43
- package/.forge/worktrees/pipeline-44a94121/lib/help-docs/07-projects.md +0 -73
- package/.forge/worktrees/pipeline-44a94121/lib/help-docs/08-rules.md +0 -53
- package/.forge/worktrees/pipeline-44a94121/lib/help-docs/09-issue-autofix.md +0 -55
- package/.forge/worktrees/pipeline-44a94121/lib/help-docs/10-troubleshooting.md +0 -89
- package/.forge/worktrees/pipeline-44a94121/lib/help-docs/11-workspace.md +0 -810
- package/.forge/worktrees/pipeline-44a94121/lib/help-docs/CLAUDE.md +0 -62
- package/.forge/worktrees/pipeline-44a94121/lib/init.ts +0 -266
- package/.forge/worktrees/pipeline-44a94121/lib/issue-scanner.ts +0 -298
- package/.forge/worktrees/pipeline-44a94121/lib/logger.ts +0 -79
- package/.forge/worktrees/pipeline-44a94121/lib/notifications.ts +0 -75
- package/.forge/worktrees/pipeline-44a94121/lib/notify.ts +0 -108
- package/.forge/worktrees/pipeline-44a94121/lib/password.ts +0 -97
- package/.forge/worktrees/pipeline-44a94121/lib/pipeline-scheduler.ts +0 -373
- package/.forge/worktrees/pipeline-44a94121/lib/pipeline.ts +0 -1441
- package/.forge/worktrees/pipeline-44a94121/lib/plugins/executor.ts +0 -347
- package/.forge/worktrees/pipeline-44a94121/lib/plugins/registry.ts +0 -228
- package/.forge/worktrees/pipeline-44a94121/lib/plugins/types.ts +0 -103
- package/.forge/worktrees/pipeline-44a94121/lib/project-sessions.ts +0 -53
- package/.forge/worktrees/pipeline-44a94121/lib/projects.ts +0 -86
- package/.forge/worktrees/pipeline-44a94121/lib/session-manager.ts +0 -156
- package/.forge/worktrees/pipeline-44a94121/lib/session-utils.ts +0 -53
- package/.forge/worktrees/pipeline-44a94121/lib/session-watcher.ts +0 -345
- package/.forge/worktrees/pipeline-44a94121/lib/settings.ts +0 -195
- package/.forge/worktrees/pipeline-44a94121/lib/skills.ts +0 -458
- package/.forge/worktrees/pipeline-44a94121/lib/task-manager.ts +0 -949
- package/.forge/worktrees/pipeline-44a94121/lib/telegram-bot.ts +0 -1477
- package/.forge/worktrees/pipeline-44a94121/lib/telegram-standalone.ts +0 -83
- package/.forge/worktrees/pipeline-44a94121/lib/terminal-server.ts +0 -70
- package/.forge/worktrees/pipeline-44a94121/lib/terminal-standalone.ts +0 -421
- package/.forge/worktrees/pipeline-44a94121/lib/usage-scanner.ts +0 -249
- package/.forge/worktrees/pipeline-44a94121/lib/workspace/__tests__/state-machine.test.ts +0 -388
- package/.forge/worktrees/pipeline-44a94121/lib/workspace/__tests__/workspace.test.ts +0 -311
- package/.forge/worktrees/pipeline-44a94121/lib/workspace/agent-bus.ts +0 -416
- package/.forge/worktrees/pipeline-44a94121/lib/workspace/agent-worker.ts +0 -655
- package/.forge/worktrees/pipeline-44a94121/lib/workspace/backends/api-backend.ts +0 -262
- package/.forge/worktrees/pipeline-44a94121/lib/workspace/backends/cli-backend.ts +0 -491
- package/.forge/worktrees/pipeline-44a94121/lib/workspace/index.ts +0 -82
- package/.forge/worktrees/pipeline-44a94121/lib/workspace/manager.ts +0 -136
- package/.forge/worktrees/pipeline-44a94121/lib/workspace/orchestrator.ts +0 -3400
- package/.forge/worktrees/pipeline-44a94121/lib/workspace/persistence.ts +0 -309
- package/.forge/worktrees/pipeline-44a94121/lib/workspace/presets.ts +0 -649
- package/.forge/worktrees/pipeline-44a94121/lib/workspace/requests.ts +0 -287
- package/.forge/worktrees/pipeline-44a94121/lib/workspace/session-monitor.ts +0 -240
- package/.forge/worktrees/pipeline-44a94121/lib/workspace/skill-installer.ts +0 -275
- package/.forge/worktrees/pipeline-44a94121/lib/workspace/smith-memory.ts +0 -498
- package/.forge/worktrees/pipeline-44a94121/lib/workspace/types.ts +0 -241
- package/.forge/worktrees/pipeline-44a94121/lib/workspace/watch-manager.ts +0 -560
- package/.forge/worktrees/pipeline-44a94121/lib/workspace-standalone.ts +0 -911
- package/.forge/worktrees/pipeline-44a94121/middleware.ts +0 -51
- package/.forge/worktrees/pipeline-44a94121/next.config.ts +0 -26
- package/.forge/worktrees/pipeline-44a94121/package.json +0 -74
- package/.forge/worktrees/pipeline-44a94121/pnpm-lock.yaml +0 -3719
- package/.forge/worktrees/pipeline-44a94121/pnpm-workspace.yaml +0 -1
- package/.forge/worktrees/pipeline-44a94121/postcss.config.mjs +0 -7
- package/.forge/worktrees/pipeline-44a94121/publish.sh +0 -133
- package/.forge/worktrees/pipeline-44a94121/scripts/bench/README.md +0 -66
- package/.forge/worktrees/pipeline-44a94121/scripts/bench/results/.gitignore +0 -2
- package/.forge/worktrees/pipeline-44a94121/scripts/bench/run.ts +0 -635
- package/.forge/worktrees/pipeline-44a94121/scripts/bench/tasks/01-text-utils/task.md +0 -26
- package/.forge/worktrees/pipeline-44a94121/scripts/bench/tasks/01-text-utils/validator.sh +0 -46
- package/.forge/worktrees/pipeline-44a94121/scripts/bench/tasks/02-pagination/setup.sh +0 -19
- package/.forge/worktrees/pipeline-44a94121/scripts/bench/tasks/02-pagination/task.md +0 -48
- package/.forge/worktrees/pipeline-44a94121/scripts/bench/tasks/02-pagination/validator.sh +0 -69
- package/.forge/worktrees/pipeline-44a94121/scripts/bench/tasks/03-bug-fix/setup.sh +0 -82
- package/.forge/worktrees/pipeline-44a94121/scripts/bench/tasks/03-bug-fix/task.md +0 -30
- package/.forge/worktrees/pipeline-44a94121/scripts/bench/tasks/03-bug-fix/validator.sh +0 -29
- package/.forge/worktrees/pipeline-44a94121/scripts/verify-usage.ts +0 -178
- package/.forge/worktrees/pipeline-44a94121/src/config/index.ts +0 -129
- package/.forge/worktrees/pipeline-44a94121/src/core/db/database.ts +0 -259
- package/.forge/worktrees/pipeline-44a94121/src/core/memory/strategy.ts +0 -32
- package/.forge/worktrees/pipeline-44a94121/src/core/providers/chat.ts +0 -65
- package/.forge/worktrees/pipeline-44a94121/src/core/providers/registry.ts +0 -60
- package/.forge/worktrees/pipeline-44a94121/src/core/session/manager.ts +0 -190
- package/.forge/worktrees/pipeline-44a94121/src/types/index.ts +0 -129
- package/.forge/worktrees/pipeline-44a94121/start.sh +0 -31
- package/.forge/worktrees/pipeline-44a94121/templates/smith-lead.json +0 -45
- package/.forge/worktrees/pipeline-44a94121/tsconfig.json +0 -42
- package/.forge/worktrees/pipeline-4dd8dc2d/CLAUDE.md +0 -86
- package/.forge/worktrees/pipeline-4dd8dc2d/README.md +0 -136
- package/.forge/worktrees/pipeline-4dd8dc2d/RELEASE_NOTES.md +0 -36
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/agents/route.ts +0 -17
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/auth/[...nextauth]/route.ts +0 -3
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/auth/verify/route.ts +0 -46
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/claude/[id]/route.ts +0 -31
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/claude/[id]/stream/route.ts +0 -63
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/claude/route.ts +0 -28
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/claude-sessions/[projectName]/entries/route.ts +0 -23
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/claude-sessions/[projectName]/live/route.ts +0 -72
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/claude-sessions/[projectName]/route.ts +0 -37
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/claude-sessions/sync/route.ts +0 -17
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/claude-templates/route.ts +0 -145
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/code/route.ts +0 -299
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/delivery/[id]/route.ts +0 -62
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/delivery/route.ts +0 -40
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/detect-cli/route.ts +0 -46
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/docs/route.ts +0 -176
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/docs/sessions/route.ts +0 -54
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/favorites/route.ts +0 -26
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/flows/route.ts +0 -6
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/flows/run/route.ts +0 -19
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/git/route.ts +0 -149
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/help/route.ts +0 -84
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/issue-scanner/route.ts +0 -116
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/logs/route.ts +0 -100
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/mobile-chat/route.ts +0 -115
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/monitor/route.ts +0 -74
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/notifications/route.ts +0 -42
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/notify/test/route.ts +0 -33
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/online/route.ts +0 -40
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/pipelines/[id]/route.ts +0 -41
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/pipelines/route.ts +0 -90
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/plugins/route.ts +0 -75
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/preview/[...path]/route.ts +0 -64
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/preview/route.ts +0 -156
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/project-pipelines/route.ts +0 -91
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/project-sessions/route.ts +0 -61
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/projects/route.ts +0 -26
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/sessions/[id]/chat/route.ts +0 -64
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/sessions/[id]/messages/route.ts +0 -9
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/sessions/[id]/route.ts +0 -17
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/sessions/route.ts +0 -20
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/settings/route.ts +0 -64
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/skills/local/route.ts +0 -228
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/skills/route.ts +0 -182
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/smith-templates/route.ts +0 -81
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/status/route.ts +0 -12
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/tabs/route.ts +0 -25
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/tasks/[id]/route.ts +0 -51
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/tasks/[id]/stream/route.ts +0 -77
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/tasks/link/route.ts +0 -37
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/tasks/route.ts +0 -44
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/tasks/session/route.ts +0 -14
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/telegram/route.ts +0 -23
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/templates/route.ts +0 -6
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/terminal-bell/route.ts +0 -39
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/terminal-cwd/route.ts +0 -19
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/terminal-state/route.ts +0 -15
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/tunnel/route.ts +0 -26
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/upgrade/route.ts +0 -43
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/usage/route.ts +0 -20
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/version/route.ts +0 -78
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/watchers/route.ts +0 -33
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/workspace/[id]/agents/route.ts +0 -35
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/workspace/[id]/memory/route.ts +0 -23
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/workspace/[id]/smith/route.ts +0 -22
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/workspace/[id]/stream/route.ts +0 -31
- package/.forge/worktrees/pipeline-4dd8dc2d/app/api/workspace/route.ts +0 -79
- package/.forge/worktrees/pipeline-4dd8dc2d/app/global-error.tsx +0 -21
- package/.forge/worktrees/pipeline-4dd8dc2d/app/globals.css +0 -52
- package/.forge/worktrees/pipeline-4dd8dc2d/app/icon.ico +0 -0
- package/.forge/worktrees/pipeline-4dd8dc2d/app/icon.png +0 -0
- package/.forge/worktrees/pipeline-4dd8dc2d/app/icon.svg +0 -106
- package/.forge/worktrees/pipeline-4dd8dc2d/app/layout.tsx +0 -17
- package/.forge/worktrees/pipeline-4dd8dc2d/app/login/LoginForm.tsx +0 -96
- package/.forge/worktrees/pipeline-4dd8dc2d/app/login/page.tsx +0 -10
- package/.forge/worktrees/pipeline-4dd8dc2d/app/mobile/page.tsx +0 -10
- package/.forge/worktrees/pipeline-4dd8dc2d/app/page.tsx +0 -22
- package/.forge/worktrees/pipeline-4dd8dc2d/bin/forge-server.mjs +0 -484
- package/.forge/worktrees/pipeline-4dd8dc2d/check-forge-status.sh +0 -71
- package/.forge/worktrees/pipeline-4dd8dc2d/cli/mw.ts +0 -579
- package/.forge/worktrees/pipeline-4dd8dc2d/components/BrowserPanel.tsx +0 -175
- package/.forge/worktrees/pipeline-4dd8dc2d/components/ChatPanel.tsx +0 -191
- package/.forge/worktrees/pipeline-4dd8dc2d/components/ClaudeTerminal.tsx +0 -267
- package/.forge/worktrees/pipeline-4dd8dc2d/components/CodeViewer.tsx +0 -787
- package/.forge/worktrees/pipeline-4dd8dc2d/components/ConversationEditor.tsx +0 -411
- package/.forge/worktrees/pipeline-4dd8dc2d/components/ConversationGraphView.tsx +0 -347
- package/.forge/worktrees/pipeline-4dd8dc2d/components/ConversationTerminalView.tsx +0 -303
- package/.forge/worktrees/pipeline-4dd8dc2d/components/Dashboard.tsx +0 -807
- package/.forge/worktrees/pipeline-4dd8dc2d/components/DashboardWrapper.tsx +0 -9
- package/.forge/worktrees/pipeline-4dd8dc2d/components/DeliveryFlowEditor.tsx +0 -491
- package/.forge/worktrees/pipeline-4dd8dc2d/components/DeliveryList.tsx +0 -230
- package/.forge/worktrees/pipeline-4dd8dc2d/components/DeliveryWorkspace.tsx +0 -589
- package/.forge/worktrees/pipeline-4dd8dc2d/components/DocTerminal.tsx +0 -187
- package/.forge/worktrees/pipeline-4dd8dc2d/components/DocsViewer.tsx +0 -574
- package/.forge/worktrees/pipeline-4dd8dc2d/components/HelpDialog.tsx +0 -169
- package/.forge/worktrees/pipeline-4dd8dc2d/components/HelpTerminal.tsx +0 -141
- package/.forge/worktrees/pipeline-4dd8dc2d/components/InlinePipelineView.tsx +0 -111
- package/.forge/worktrees/pipeline-4dd8dc2d/components/LogViewer.tsx +0 -194
- package/.forge/worktrees/pipeline-4dd8dc2d/components/MarkdownContent.tsx +0 -73
- package/.forge/worktrees/pipeline-4dd8dc2d/components/MobileView.tsx +0 -385
- package/.forge/worktrees/pipeline-4dd8dc2d/components/MonitorPanel.tsx +0 -122
- package/.forge/worktrees/pipeline-4dd8dc2d/components/NewSessionModal.tsx +0 -93
- package/.forge/worktrees/pipeline-4dd8dc2d/components/NewTaskModal.tsx +0 -492
- package/.forge/worktrees/pipeline-4dd8dc2d/components/PipelineEditor.tsx +0 -570
- package/.forge/worktrees/pipeline-4dd8dc2d/components/PipelineView.tsx +0 -1018
- package/.forge/worktrees/pipeline-4dd8dc2d/components/PluginsPanel.tsx +0 -472
- package/.forge/worktrees/pipeline-4dd8dc2d/components/ProjectDetail.tsx +0 -1618
- package/.forge/worktrees/pipeline-4dd8dc2d/components/ProjectList.tsx +0 -108
- package/.forge/worktrees/pipeline-4dd8dc2d/components/ProjectManager.tsx +0 -401
- package/.forge/worktrees/pipeline-4dd8dc2d/components/SessionList.tsx +0 -74
- package/.forge/worktrees/pipeline-4dd8dc2d/components/SessionView.tsx +0 -726
- package/.forge/worktrees/pipeline-4dd8dc2d/components/SettingsModal.tsx +0 -1647
- package/.forge/worktrees/pipeline-4dd8dc2d/components/SkillsPanel.tsx +0 -969
- package/.forge/worktrees/pipeline-4dd8dc2d/components/StatusBar.tsx +0 -99
- package/.forge/worktrees/pipeline-4dd8dc2d/components/TabBar.tsx +0 -46
- package/.forge/worktrees/pipeline-4dd8dc2d/components/TaskBoard.tsx +0 -113
- package/.forge/worktrees/pipeline-4dd8dc2d/components/TaskDetail.tsx +0 -372
- package/.forge/worktrees/pipeline-4dd8dc2d/components/TerminalLauncher.tsx +0 -398
- package/.forge/worktrees/pipeline-4dd8dc2d/components/TunnelToggle.tsx +0 -206
- package/.forge/worktrees/pipeline-4dd8dc2d/components/UsagePanel.tsx +0 -207
- package/.forge/worktrees/pipeline-4dd8dc2d/components/WebTerminal.tsx +0 -1743
- package/.forge/worktrees/pipeline-4dd8dc2d/components/WorkspaceTree.tsx +0 -221
- package/.forge/worktrees/pipeline-4dd8dc2d/components/WorkspaceView.tsx +0 -4048
- package/.forge/worktrees/pipeline-4dd8dc2d/dev-test.sh +0 -5
- package/.forge/worktrees/pipeline-4dd8dc2d/docs/Forge_Memory_Layer_Design.docx +0 -0
- package/.forge/worktrees/pipeline-4dd8dc2d/docs/Forge_Strategy_Research_2026.docx +0 -0
- package/.forge/worktrees/pipeline-4dd8dc2d/docs/LOCAL-DEPLOY.md +0 -144
- package/.forge/worktrees/pipeline-4dd8dc2d/docs/roadmap-multi-agent-workflow.md +0 -330
- package/.forge/worktrees/pipeline-4dd8dc2d/forge-logo.png +0 -0
- package/.forge/worktrees/pipeline-4dd8dc2d/forge-logo.svg +0 -106
- package/.forge/worktrees/pipeline-4dd8dc2d/hooks/useSidebarResize.ts +0 -52
- package/.forge/worktrees/pipeline-4dd8dc2d/install.sh +0 -29
- package/.forge/worktrees/pipeline-4dd8dc2d/instrumentation.ts +0 -35
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/agents/claude-adapter.ts +0 -104
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/agents/generic-adapter.ts +0 -64
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/agents/index.ts +0 -245
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/agents/types.ts +0 -70
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/artifacts.ts +0 -106
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/auth.ts +0 -62
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/builtin-plugins/docker.yaml +0 -70
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/builtin-plugins/http.yaml +0 -66
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/builtin-plugins/jenkins.yaml +0 -92
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/builtin-plugins/llm-vision.yaml +0 -85
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/builtin-plugins/playwright.yaml +0 -111
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/builtin-plugins/shell-command.yaml +0 -60
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/builtin-plugins/slack.yaml +0 -48
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/builtin-plugins/webhook.yaml +0 -56
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/claude-process.ts +0 -361
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/claude-sessions.ts +0 -266
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/claude-templates.ts +0 -227
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/cloudflared.ts +0 -424
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/crypto.ts +0 -67
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/delivery.ts +0 -787
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/dirs.ts +0 -99
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/flows.ts +0 -86
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/forge-mcp-server.ts +0 -732
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/forge-skills/forge-inbox.md +0 -38
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/forge-skills/forge-send.md +0 -47
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/forge-skills/forge-status.md +0 -32
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/forge-skills/forge-workspace-sync.md +0 -37
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/help-docs/00-overview.md +0 -40
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/help-docs/01-settings.md +0 -194
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/help-docs/02-telegram.md +0 -41
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/help-docs/03-tunnel.md +0 -31
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/help-docs/04-tasks.md +0 -52
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/help-docs/05-pipelines.md +0 -460
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/help-docs/06-skills.md +0 -43
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/help-docs/07-projects.md +0 -73
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/help-docs/08-rules.md +0 -53
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/help-docs/09-issue-autofix.md +0 -55
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/help-docs/10-troubleshooting.md +0 -89
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/help-docs/11-workspace.md +0 -810
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/help-docs/CLAUDE.md +0 -62
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/init.ts +0 -266
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/issue-scanner.ts +0 -298
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/logger.ts +0 -79
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/notifications.ts +0 -75
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/notify.ts +0 -108
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/password.ts +0 -97
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/pipeline-scheduler.ts +0 -373
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/pipeline.ts +0 -1565
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/plugins/executor.ts +0 -347
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/plugins/registry.ts +0 -228
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/plugins/types.ts +0 -103
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/project-sessions.ts +0 -53
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/projects.ts +0 -86
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/session-manager.ts +0 -156
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/session-utils.ts +0 -53
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/session-watcher.ts +0 -345
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/settings.ts +0 -195
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/skills.ts +0 -458
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/task-manager.ts +0 -951
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/telegram-bot.ts +0 -1477
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/telegram-standalone.ts +0 -83
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/terminal-server.ts +0 -70
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/terminal-standalone.ts +0 -438
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/usage-scanner.ts +0 -249
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace/__tests__/state-machine.test.ts +0 -388
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace/__tests__/workspace.test.ts +0 -311
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace/agent-bus.ts +0 -416
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace/agent-worker.ts +0 -655
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace/backends/api-backend.ts +0 -262
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace/backends/cli-backend.ts +0 -491
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace/index.ts +0 -84
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace/manager.ts +0 -136
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace/orchestrator.ts +0 -3415
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace/persistence.ts +0 -309
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace/presets.ts +0 -649
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace/requests.ts +0 -287
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace/session-monitor.ts +0 -240
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace/skill-installer.ts +0 -275
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace/smith-memory.ts +0 -498
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace/types.ts +0 -241
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace/watch-manager.ts +0 -560
- package/.forge/worktrees/pipeline-4dd8dc2d/lib/workspace-standalone.ts +0 -978
- package/.forge/worktrees/pipeline-4dd8dc2d/middleware.ts +0 -51
- package/.forge/worktrees/pipeline-4dd8dc2d/next.config.ts +0 -26
- package/.forge/worktrees/pipeline-4dd8dc2d/package.json +0 -74
- package/.forge/worktrees/pipeline-4dd8dc2d/pnpm-lock.yaml +0 -3719
- package/.forge/worktrees/pipeline-4dd8dc2d/pnpm-workspace.yaml +0 -1
- package/.forge/worktrees/pipeline-4dd8dc2d/postcss.config.mjs +0 -7
- package/.forge/worktrees/pipeline-4dd8dc2d/publish.sh +0 -133
- package/.forge/worktrees/pipeline-4dd8dc2d/scripts/bench/README.md +0 -66
- package/.forge/worktrees/pipeline-4dd8dc2d/scripts/bench/results/.gitignore +0 -2
- package/.forge/worktrees/pipeline-4dd8dc2d/scripts/bench/run.ts +0 -635
- package/.forge/worktrees/pipeline-4dd8dc2d/scripts/bench/tasks/01-text-utils/task.md +0 -26
- package/.forge/worktrees/pipeline-4dd8dc2d/scripts/bench/tasks/01-text-utils/validator.sh +0 -46
- package/.forge/worktrees/pipeline-4dd8dc2d/scripts/bench/tasks/02-pagination/setup.sh +0 -19
- package/.forge/worktrees/pipeline-4dd8dc2d/scripts/bench/tasks/02-pagination/task.md +0 -48
- package/.forge/worktrees/pipeline-4dd8dc2d/scripts/bench/tasks/02-pagination/validator.sh +0 -69
- package/.forge/worktrees/pipeline-4dd8dc2d/scripts/bench/tasks/03-bug-fix/setup.sh +0 -82
- package/.forge/worktrees/pipeline-4dd8dc2d/scripts/bench/tasks/03-bug-fix/task.md +0 -30
- package/.forge/worktrees/pipeline-4dd8dc2d/scripts/bench/tasks/03-bug-fix/validator.sh +0 -29
- package/.forge/worktrees/pipeline-4dd8dc2d/scripts/verify-usage.ts +0 -178
- package/.forge/worktrees/pipeline-4dd8dc2d/src/config/index.ts +0 -129
- package/.forge/worktrees/pipeline-4dd8dc2d/src/core/db/database.ts +0 -259
- package/.forge/worktrees/pipeline-4dd8dc2d/src/core/memory/strategy.ts +0 -32
- package/.forge/worktrees/pipeline-4dd8dc2d/src/core/providers/chat.ts +0 -65
- package/.forge/worktrees/pipeline-4dd8dc2d/src/core/providers/registry.ts +0 -60
- package/.forge/worktrees/pipeline-4dd8dc2d/src/core/session/manager.ts +0 -190
- package/.forge/worktrees/pipeline-4dd8dc2d/src/types/index.ts +0 -129
- package/.forge/worktrees/pipeline-4dd8dc2d/start.sh +0 -32
- package/.forge/worktrees/pipeline-4dd8dc2d/templates/smith-lead.json +0 -45
- package/.forge/worktrees/pipeline-4dd8dc2d/tsconfig.json +0 -42
- package/.forge/worktrees/pipeline-d1757a50/CLAUDE.md +0 -86
- package/.forge/worktrees/pipeline-d1757a50/README.md +0 -136
- package/.forge/worktrees/pipeline-d1757a50/RELEASE_NOTES.md +0 -11
- package/.forge/worktrees/pipeline-d1757a50/app/api/agents/route.ts +0 -17
- package/.forge/worktrees/pipeline-d1757a50/app/api/auth/[...nextauth]/route.ts +0 -3
- package/.forge/worktrees/pipeline-d1757a50/app/api/auth/verify/route.ts +0 -46
- package/.forge/worktrees/pipeline-d1757a50/app/api/claude/[id]/route.ts +0 -31
- package/.forge/worktrees/pipeline-d1757a50/app/api/claude/[id]/stream/route.ts +0 -63
- package/.forge/worktrees/pipeline-d1757a50/app/api/claude/route.ts +0 -28
- package/.forge/worktrees/pipeline-d1757a50/app/api/claude-sessions/[projectName]/entries/route.ts +0 -23
- package/.forge/worktrees/pipeline-d1757a50/app/api/claude-sessions/[projectName]/live/route.ts +0 -72
- package/.forge/worktrees/pipeline-d1757a50/app/api/claude-sessions/[projectName]/route.ts +0 -37
- package/.forge/worktrees/pipeline-d1757a50/app/api/claude-sessions/sync/route.ts +0 -17
- package/.forge/worktrees/pipeline-d1757a50/app/api/claude-templates/route.ts +0 -145
- package/.forge/worktrees/pipeline-d1757a50/app/api/code/route.ts +0 -299
- package/.forge/worktrees/pipeline-d1757a50/app/api/delivery/[id]/route.ts +0 -62
- package/.forge/worktrees/pipeline-d1757a50/app/api/delivery/route.ts +0 -40
- package/.forge/worktrees/pipeline-d1757a50/app/api/detect-cli/route.ts +0 -46
- package/.forge/worktrees/pipeline-d1757a50/app/api/docs/route.ts +0 -176
- package/.forge/worktrees/pipeline-d1757a50/app/api/docs/sessions/route.ts +0 -54
- package/.forge/worktrees/pipeline-d1757a50/app/api/favorites/route.ts +0 -26
- package/.forge/worktrees/pipeline-d1757a50/app/api/flows/route.ts +0 -6
- package/.forge/worktrees/pipeline-d1757a50/app/api/flows/run/route.ts +0 -19
- package/.forge/worktrees/pipeline-d1757a50/app/api/git/route.ts +0 -149
- package/.forge/worktrees/pipeline-d1757a50/app/api/help/route.ts +0 -84
- package/.forge/worktrees/pipeline-d1757a50/app/api/issue-scanner/route.ts +0 -116
- package/.forge/worktrees/pipeline-d1757a50/app/api/logs/route.ts +0 -100
- package/.forge/worktrees/pipeline-d1757a50/app/api/mobile-chat/route.ts +0 -115
- package/.forge/worktrees/pipeline-d1757a50/app/api/monitor/route.ts +0 -74
- package/.forge/worktrees/pipeline-d1757a50/app/api/notifications/route.ts +0 -42
- package/.forge/worktrees/pipeline-d1757a50/app/api/notify/test/route.ts +0 -33
- package/.forge/worktrees/pipeline-d1757a50/app/api/online/route.ts +0 -40
- package/.forge/worktrees/pipeline-d1757a50/app/api/pipelines/[id]/route.ts +0 -41
- package/.forge/worktrees/pipeline-d1757a50/app/api/pipelines/route.ts +0 -90
- package/.forge/worktrees/pipeline-d1757a50/app/api/plugins/route.ts +0 -75
- package/.forge/worktrees/pipeline-d1757a50/app/api/preview/[...path]/route.ts +0 -64
- package/.forge/worktrees/pipeline-d1757a50/app/api/preview/route.ts +0 -156
- package/.forge/worktrees/pipeline-d1757a50/app/api/project-pipelines/route.ts +0 -91
- package/.forge/worktrees/pipeline-d1757a50/app/api/project-sessions/route.ts +0 -61
- package/.forge/worktrees/pipeline-d1757a50/app/api/projects/route.ts +0 -26
- package/.forge/worktrees/pipeline-d1757a50/app/api/sessions/[id]/chat/route.ts +0 -64
- package/.forge/worktrees/pipeline-d1757a50/app/api/sessions/[id]/messages/route.ts +0 -9
- package/.forge/worktrees/pipeline-d1757a50/app/api/sessions/[id]/route.ts +0 -17
- package/.forge/worktrees/pipeline-d1757a50/app/api/sessions/route.ts +0 -20
- package/.forge/worktrees/pipeline-d1757a50/app/api/settings/route.ts +0 -64
- package/.forge/worktrees/pipeline-d1757a50/app/api/skills/local/route.ts +0 -228
- package/.forge/worktrees/pipeline-d1757a50/app/api/skills/route.ts +0 -182
- package/.forge/worktrees/pipeline-d1757a50/app/api/smith-templates/route.ts +0 -81
- package/.forge/worktrees/pipeline-d1757a50/app/api/status/route.ts +0 -12
- package/.forge/worktrees/pipeline-d1757a50/app/api/tabs/route.ts +0 -25
- package/.forge/worktrees/pipeline-d1757a50/app/api/tasks/[id]/route.ts +0 -51
- package/.forge/worktrees/pipeline-d1757a50/app/api/tasks/[id]/stream/route.ts +0 -77
- package/.forge/worktrees/pipeline-d1757a50/app/api/tasks/link/route.ts +0 -37
- package/.forge/worktrees/pipeline-d1757a50/app/api/tasks/route.ts +0 -44
- package/.forge/worktrees/pipeline-d1757a50/app/api/tasks/session/route.ts +0 -14
- package/.forge/worktrees/pipeline-d1757a50/app/api/telegram/route.ts +0 -23
- package/.forge/worktrees/pipeline-d1757a50/app/api/templates/route.ts +0 -6
- package/.forge/worktrees/pipeline-d1757a50/app/api/terminal-bell/route.ts +0 -35
- package/.forge/worktrees/pipeline-d1757a50/app/api/terminal-cwd/route.ts +0 -19
- package/.forge/worktrees/pipeline-d1757a50/app/api/terminal-state/route.ts +0 -15
- package/.forge/worktrees/pipeline-d1757a50/app/api/tunnel/route.ts +0 -26
- package/.forge/worktrees/pipeline-d1757a50/app/api/upgrade/route.ts +0 -43
- package/.forge/worktrees/pipeline-d1757a50/app/api/usage/route.ts +0 -20
- package/.forge/worktrees/pipeline-d1757a50/app/api/version/route.ts +0 -78
- package/.forge/worktrees/pipeline-d1757a50/app/api/watchers/route.ts +0 -33
- package/.forge/worktrees/pipeline-d1757a50/app/api/workspace/[id]/agents/route.ts +0 -35
- package/.forge/worktrees/pipeline-d1757a50/app/api/workspace/[id]/memory/route.ts +0 -23
- package/.forge/worktrees/pipeline-d1757a50/app/api/workspace/[id]/smith/route.ts +0 -22
- package/.forge/worktrees/pipeline-d1757a50/app/api/workspace/[id]/stream/route.ts +0 -28
- package/.forge/worktrees/pipeline-d1757a50/app/api/workspace/route.ts +0 -100
- package/.forge/worktrees/pipeline-d1757a50/app/global-error.tsx +0 -21
- package/.forge/worktrees/pipeline-d1757a50/app/globals.css +0 -52
- package/.forge/worktrees/pipeline-d1757a50/app/icon.ico +0 -0
- package/.forge/worktrees/pipeline-d1757a50/app/icon.png +0 -0
- package/.forge/worktrees/pipeline-d1757a50/app/icon.svg +0 -106
- package/.forge/worktrees/pipeline-d1757a50/app/layout.tsx +0 -17
- package/.forge/worktrees/pipeline-d1757a50/app/login/LoginForm.tsx +0 -96
- package/.forge/worktrees/pipeline-d1757a50/app/login/page.tsx +0 -10
- package/.forge/worktrees/pipeline-d1757a50/app/mobile/page.tsx +0 -9
- package/.forge/worktrees/pipeline-d1757a50/app/page.tsx +0 -21
- package/.forge/worktrees/pipeline-d1757a50/bin/forge-server.mjs +0 -484
- package/.forge/worktrees/pipeline-d1757a50/check-forge-status.sh +0 -71
- package/.forge/worktrees/pipeline-d1757a50/cli/mw.ts +0 -579
- package/.forge/worktrees/pipeline-d1757a50/components/BrowserPanel.tsx +0 -175
- package/.forge/worktrees/pipeline-d1757a50/components/ChatPanel.tsx +0 -191
- package/.forge/worktrees/pipeline-d1757a50/components/ClaudeTerminal.tsx +0 -267
- package/.forge/worktrees/pipeline-d1757a50/components/CodeViewer.tsx +0 -787
- package/.forge/worktrees/pipeline-d1757a50/components/ConversationEditor.tsx +0 -411
- package/.forge/worktrees/pipeline-d1757a50/components/ConversationGraphView.tsx +0 -347
- package/.forge/worktrees/pipeline-d1757a50/components/ConversationTerminalView.tsx +0 -303
- package/.forge/worktrees/pipeline-d1757a50/components/Dashboard.tsx +0 -807
- package/.forge/worktrees/pipeline-d1757a50/components/DashboardWrapper.tsx +0 -9
- package/.forge/worktrees/pipeline-d1757a50/components/DeliveryFlowEditor.tsx +0 -491
- package/.forge/worktrees/pipeline-d1757a50/components/DeliveryList.tsx +0 -230
- package/.forge/worktrees/pipeline-d1757a50/components/DeliveryWorkspace.tsx +0 -589
- package/.forge/worktrees/pipeline-d1757a50/components/DocTerminal.tsx +0 -187
- package/.forge/worktrees/pipeline-d1757a50/components/DocsViewer.tsx +0 -574
- package/.forge/worktrees/pipeline-d1757a50/components/HelpDialog.tsx +0 -169
- package/.forge/worktrees/pipeline-d1757a50/components/HelpTerminal.tsx +0 -141
- package/.forge/worktrees/pipeline-d1757a50/components/InlinePipelineView.tsx +0 -111
- package/.forge/worktrees/pipeline-d1757a50/components/LogViewer.tsx +0 -194
- package/.forge/worktrees/pipeline-d1757a50/components/MarkdownContent.tsx +0 -73
- package/.forge/worktrees/pipeline-d1757a50/components/MobileView.tsx +0 -385
- package/.forge/worktrees/pipeline-d1757a50/components/MonitorPanel.tsx +0 -122
- package/.forge/worktrees/pipeline-d1757a50/components/NewSessionModal.tsx +0 -93
- package/.forge/worktrees/pipeline-d1757a50/components/NewTaskModal.tsx +0 -492
- package/.forge/worktrees/pipeline-d1757a50/components/PipelineEditor.tsx +0 -570
- package/.forge/worktrees/pipeline-d1757a50/components/PipelineView.tsx +0 -1018
- package/.forge/worktrees/pipeline-d1757a50/components/PluginsPanel.tsx +0 -472
- package/.forge/worktrees/pipeline-d1757a50/components/ProjectDetail.tsx +0 -1618
- package/.forge/worktrees/pipeline-d1757a50/components/ProjectList.tsx +0 -108
- package/.forge/worktrees/pipeline-d1757a50/components/ProjectManager.tsx +0 -401
- package/.forge/worktrees/pipeline-d1757a50/components/SessionList.tsx +0 -74
- package/.forge/worktrees/pipeline-d1757a50/components/SessionView.tsx +0 -726
- package/.forge/worktrees/pipeline-d1757a50/components/SettingsModal.tsx +0 -1647
- package/.forge/worktrees/pipeline-d1757a50/components/SkillsPanel.tsx +0 -969
- package/.forge/worktrees/pipeline-d1757a50/components/StatusBar.tsx +0 -99
- package/.forge/worktrees/pipeline-d1757a50/components/TabBar.tsx +0 -46
- package/.forge/worktrees/pipeline-d1757a50/components/TaskBoard.tsx +0 -113
- package/.forge/worktrees/pipeline-d1757a50/components/TaskDetail.tsx +0 -372
- package/.forge/worktrees/pipeline-d1757a50/components/TerminalLauncher.tsx +0 -398
- package/.forge/worktrees/pipeline-d1757a50/components/TunnelToggle.tsx +0 -206
- package/.forge/worktrees/pipeline-d1757a50/components/UsagePanel.tsx +0 -207
- package/.forge/worktrees/pipeline-d1757a50/components/WebTerminal.tsx +0 -1683
- package/.forge/worktrees/pipeline-d1757a50/components/WorkspaceTree.tsx +0 -221
- package/.forge/worktrees/pipeline-d1757a50/components/WorkspaceView.tsx +0 -4048
- package/.forge/worktrees/pipeline-d1757a50/dev-test.sh +0 -5
- package/.forge/worktrees/pipeline-d1757a50/docs/Forge_Memory_Layer_Design.docx +0 -0
- package/.forge/worktrees/pipeline-d1757a50/docs/Forge_Strategy_Research_2026.docx +0 -0
- package/.forge/worktrees/pipeline-d1757a50/docs/LOCAL-DEPLOY.md +0 -144
- package/.forge/worktrees/pipeline-d1757a50/docs/roadmap-multi-agent-workflow.md +0 -330
- package/.forge/worktrees/pipeline-d1757a50/forge-logo.png +0 -0
- package/.forge/worktrees/pipeline-d1757a50/forge-logo.svg +0 -106
- package/.forge/worktrees/pipeline-d1757a50/hooks/useSidebarResize.ts +0 -52
- package/.forge/worktrees/pipeline-d1757a50/install.sh +0 -29
- package/.forge/worktrees/pipeline-d1757a50/instrumentation.ts +0 -35
- package/.forge/worktrees/pipeline-d1757a50/lib/agents/claude-adapter.ts +0 -104
- package/.forge/worktrees/pipeline-d1757a50/lib/agents/generic-adapter.ts +0 -64
- package/.forge/worktrees/pipeline-d1757a50/lib/agents/index.ts +0 -245
- package/.forge/worktrees/pipeline-d1757a50/lib/agents/types.ts +0 -70
- package/.forge/worktrees/pipeline-d1757a50/lib/artifacts.ts +0 -106
- package/.forge/worktrees/pipeline-d1757a50/lib/auth.ts +0 -62
- package/.forge/worktrees/pipeline-d1757a50/lib/builtin-plugins/docker.yaml +0 -70
- package/.forge/worktrees/pipeline-d1757a50/lib/builtin-plugins/http.yaml +0 -66
- package/.forge/worktrees/pipeline-d1757a50/lib/builtin-plugins/jenkins.yaml +0 -92
- package/.forge/worktrees/pipeline-d1757a50/lib/builtin-plugins/llm-vision.yaml +0 -85
- package/.forge/worktrees/pipeline-d1757a50/lib/builtin-plugins/playwright.yaml +0 -111
- package/.forge/worktrees/pipeline-d1757a50/lib/builtin-plugins/shell-command.yaml +0 -60
- package/.forge/worktrees/pipeline-d1757a50/lib/builtin-plugins/slack.yaml +0 -48
- package/.forge/worktrees/pipeline-d1757a50/lib/builtin-plugins/webhook.yaml +0 -56
- package/.forge/worktrees/pipeline-d1757a50/lib/claude-process.ts +0 -361
- package/.forge/worktrees/pipeline-d1757a50/lib/claude-sessions.ts +0 -266
- package/.forge/worktrees/pipeline-d1757a50/lib/claude-templates.ts +0 -227
- package/.forge/worktrees/pipeline-d1757a50/lib/cloudflared.ts +0 -424
- package/.forge/worktrees/pipeline-d1757a50/lib/crypto.ts +0 -67
- package/.forge/worktrees/pipeline-d1757a50/lib/delivery.ts +0 -787
- package/.forge/worktrees/pipeline-d1757a50/lib/dirs.ts +0 -99
- package/.forge/worktrees/pipeline-d1757a50/lib/flows.ts +0 -86
- package/.forge/worktrees/pipeline-d1757a50/lib/forge-mcp-server.ts +0 -717
- package/.forge/worktrees/pipeline-d1757a50/lib/forge-skills/forge-inbox.md +0 -38
- package/.forge/worktrees/pipeline-d1757a50/lib/forge-skills/forge-send.md +0 -47
- package/.forge/worktrees/pipeline-d1757a50/lib/forge-skills/forge-status.md +0 -32
- package/.forge/worktrees/pipeline-d1757a50/lib/forge-skills/forge-workspace-sync.md +0 -37
- package/.forge/worktrees/pipeline-d1757a50/lib/help-docs/00-overview.md +0 -40
- package/.forge/worktrees/pipeline-d1757a50/lib/help-docs/01-settings.md +0 -194
- package/.forge/worktrees/pipeline-d1757a50/lib/help-docs/02-telegram.md +0 -41
- package/.forge/worktrees/pipeline-d1757a50/lib/help-docs/03-tunnel.md +0 -31
- package/.forge/worktrees/pipeline-d1757a50/lib/help-docs/04-tasks.md +0 -52
- package/.forge/worktrees/pipeline-d1757a50/lib/help-docs/05-pipelines.md +0 -460
- package/.forge/worktrees/pipeline-d1757a50/lib/help-docs/06-skills.md +0 -43
- package/.forge/worktrees/pipeline-d1757a50/lib/help-docs/07-projects.md +0 -73
- package/.forge/worktrees/pipeline-d1757a50/lib/help-docs/08-rules.md +0 -53
- package/.forge/worktrees/pipeline-d1757a50/lib/help-docs/09-issue-autofix.md +0 -55
- package/.forge/worktrees/pipeline-d1757a50/lib/help-docs/10-troubleshooting.md +0 -89
- package/.forge/worktrees/pipeline-d1757a50/lib/help-docs/11-workspace.md +0 -810
- package/.forge/worktrees/pipeline-d1757a50/lib/help-docs/CLAUDE.md +0 -62
- package/.forge/worktrees/pipeline-d1757a50/lib/init.ts +0 -266
- package/.forge/worktrees/pipeline-d1757a50/lib/issue-scanner.ts +0 -298
- package/.forge/worktrees/pipeline-d1757a50/lib/logger.ts +0 -79
- package/.forge/worktrees/pipeline-d1757a50/lib/notifications.ts +0 -75
- package/.forge/worktrees/pipeline-d1757a50/lib/notify.ts +0 -108
- package/.forge/worktrees/pipeline-d1757a50/lib/password.ts +0 -97
- package/.forge/worktrees/pipeline-d1757a50/lib/pipeline-scheduler.ts +0 -373
- package/.forge/worktrees/pipeline-d1757a50/lib/pipeline.ts +0 -1441
- package/.forge/worktrees/pipeline-d1757a50/lib/plugins/executor.ts +0 -347
- package/.forge/worktrees/pipeline-d1757a50/lib/plugins/registry.ts +0 -228
- package/.forge/worktrees/pipeline-d1757a50/lib/plugins/types.ts +0 -103
- package/.forge/worktrees/pipeline-d1757a50/lib/project-sessions.ts +0 -53
- package/.forge/worktrees/pipeline-d1757a50/lib/projects.ts +0 -86
- package/.forge/worktrees/pipeline-d1757a50/lib/session-manager.ts +0 -156
- package/.forge/worktrees/pipeline-d1757a50/lib/session-utils.ts +0 -53
- package/.forge/worktrees/pipeline-d1757a50/lib/session-watcher.ts +0 -345
- package/.forge/worktrees/pipeline-d1757a50/lib/settings.ts +0 -195
- package/.forge/worktrees/pipeline-d1757a50/lib/skills.ts +0 -458
- package/.forge/worktrees/pipeline-d1757a50/lib/task-manager.ts +0 -949
- package/.forge/worktrees/pipeline-d1757a50/lib/telegram-bot.ts +0 -1477
- package/.forge/worktrees/pipeline-d1757a50/lib/telegram-standalone.ts +0 -83
- package/.forge/worktrees/pipeline-d1757a50/lib/terminal-server.ts +0 -70
- package/.forge/worktrees/pipeline-d1757a50/lib/terminal-standalone.ts +0 -421
- package/.forge/worktrees/pipeline-d1757a50/lib/usage-scanner.ts +0 -249
- package/.forge/worktrees/pipeline-d1757a50/lib/workspace/__tests__/state-machine.test.ts +0 -388
- package/.forge/worktrees/pipeline-d1757a50/lib/workspace/__tests__/workspace.test.ts +0 -311
- package/.forge/worktrees/pipeline-d1757a50/lib/workspace/agent-bus.ts +0 -416
- package/.forge/worktrees/pipeline-d1757a50/lib/workspace/agent-worker.ts +0 -655
- package/.forge/worktrees/pipeline-d1757a50/lib/workspace/backends/api-backend.ts +0 -262
- package/.forge/worktrees/pipeline-d1757a50/lib/workspace/backends/cli-backend.ts +0 -491
- package/.forge/worktrees/pipeline-d1757a50/lib/workspace/index.ts +0 -82
- package/.forge/worktrees/pipeline-d1757a50/lib/workspace/manager.ts +0 -136
- package/.forge/worktrees/pipeline-d1757a50/lib/workspace/orchestrator.ts +0 -3400
- package/.forge/worktrees/pipeline-d1757a50/lib/workspace/persistence.ts +0 -309
- package/.forge/worktrees/pipeline-d1757a50/lib/workspace/presets.ts +0 -649
- package/.forge/worktrees/pipeline-d1757a50/lib/workspace/requests.ts +0 -287
- package/.forge/worktrees/pipeline-d1757a50/lib/workspace/session-monitor.ts +0 -240
- package/.forge/worktrees/pipeline-d1757a50/lib/workspace/skill-installer.ts +0 -275
- package/.forge/worktrees/pipeline-d1757a50/lib/workspace/smith-memory.ts +0 -498
- package/.forge/worktrees/pipeline-d1757a50/lib/workspace/types.ts +0 -241
- package/.forge/worktrees/pipeline-d1757a50/lib/workspace/watch-manager.ts +0 -560
- package/.forge/worktrees/pipeline-d1757a50/lib/workspace-standalone.ts +0 -911
- package/.forge/worktrees/pipeline-d1757a50/middleware.ts +0 -51
- package/.forge/worktrees/pipeline-d1757a50/next.config.ts +0 -26
- package/.forge/worktrees/pipeline-d1757a50/package.json +0 -74
- package/.forge/worktrees/pipeline-d1757a50/pnpm-lock.yaml +0 -3719
- package/.forge/worktrees/pipeline-d1757a50/pnpm-workspace.yaml +0 -1
- package/.forge/worktrees/pipeline-d1757a50/postcss.config.mjs +0 -7
- package/.forge/worktrees/pipeline-d1757a50/publish.sh +0 -133
- package/.forge/worktrees/pipeline-d1757a50/scripts/bench/README.md +0 -66
- package/.forge/worktrees/pipeline-d1757a50/scripts/bench/results/.gitignore +0 -2
- package/.forge/worktrees/pipeline-d1757a50/scripts/bench/run.ts +0 -635
- package/.forge/worktrees/pipeline-d1757a50/scripts/bench/tasks/01-text-utils/task.md +0 -26
- package/.forge/worktrees/pipeline-d1757a50/scripts/bench/tasks/01-text-utils/validator.sh +0 -46
- package/.forge/worktrees/pipeline-d1757a50/scripts/bench/tasks/02-pagination/setup.sh +0 -19
- package/.forge/worktrees/pipeline-d1757a50/scripts/bench/tasks/02-pagination/task.md +0 -48
- package/.forge/worktrees/pipeline-d1757a50/scripts/bench/tasks/02-pagination/validator.sh +0 -69
- package/.forge/worktrees/pipeline-d1757a50/scripts/bench/tasks/03-bug-fix/setup.sh +0 -82
- package/.forge/worktrees/pipeline-d1757a50/scripts/bench/tasks/03-bug-fix/task.md +0 -30
- package/.forge/worktrees/pipeline-d1757a50/scripts/bench/tasks/03-bug-fix/validator.sh +0 -29
- package/.forge/worktrees/pipeline-d1757a50/scripts/verify-usage.ts +0 -178
- package/.forge/worktrees/pipeline-d1757a50/src/config/index.ts +0 -129
- package/.forge/worktrees/pipeline-d1757a50/src/core/db/database.ts +0 -259
- package/.forge/worktrees/pipeline-d1757a50/src/core/memory/strategy.ts +0 -32
- package/.forge/worktrees/pipeline-d1757a50/src/core/providers/chat.ts +0 -65
- package/.forge/worktrees/pipeline-d1757a50/src/core/providers/registry.ts +0 -60
- package/.forge/worktrees/pipeline-d1757a50/src/core/session/manager.ts +0 -190
- package/.forge/worktrees/pipeline-d1757a50/src/types/index.ts +0 -129
- package/.forge/worktrees/pipeline-d1757a50/start.sh +0 -31
- package/.forge/worktrees/pipeline-d1757a50/templates/smith-lead.json +0 -45
- package/.forge/worktrees/pipeline-d1757a50/tsconfig.json +0 -42
- package/.forge/worktrees/pipeline-d59c2fe2/CLAUDE.md +0 -86
- package/.forge/worktrees/pipeline-d59c2fe2/README.md +0 -136
- package/.forge/worktrees/pipeline-d59c2fe2/RELEASE_NOTES.md +0 -11
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/agents/route.ts +0 -17
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/auth/[...nextauth]/route.ts +0 -3
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/auth/verify/route.ts +0 -46
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/claude/[id]/route.ts +0 -31
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/claude/[id]/stream/route.ts +0 -63
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/claude/route.ts +0 -28
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/claude-sessions/[projectName]/entries/route.ts +0 -23
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/claude-sessions/[projectName]/live/route.ts +0 -72
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/claude-sessions/[projectName]/route.ts +0 -37
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/claude-sessions/sync/route.ts +0 -17
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/claude-templates/route.ts +0 -145
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/code/route.ts +0 -299
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/delivery/[id]/route.ts +0 -62
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/delivery/route.ts +0 -40
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/detect-cli/route.ts +0 -46
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/docs/route.ts +0 -176
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/docs/sessions/route.ts +0 -54
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/favorites/route.ts +0 -26
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/flows/route.ts +0 -6
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/flows/run/route.ts +0 -19
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/git/route.ts +0 -149
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/help/route.ts +0 -84
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/issue-scanner/route.ts +0 -116
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/logs/route.ts +0 -100
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/mobile-chat/route.ts +0 -115
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/monitor/route.ts +0 -74
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/notifications/route.ts +0 -42
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/notify/test/route.ts +0 -33
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/online/route.ts +0 -40
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/pipelines/[id]/route.ts +0 -41
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/pipelines/route.ts +0 -90
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/plugins/route.ts +0 -75
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/preview/[...path]/route.ts +0 -64
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/preview/route.ts +0 -156
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/project-pipelines/route.ts +0 -91
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/project-sessions/route.ts +0 -61
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/projects/route.ts +0 -26
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/sessions/[id]/chat/route.ts +0 -64
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/sessions/[id]/messages/route.ts +0 -9
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/sessions/[id]/route.ts +0 -17
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/sessions/route.ts +0 -20
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/settings/route.ts +0 -64
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/skills/local/route.ts +0 -228
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/skills/route.ts +0 -182
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/smith-templates/route.ts +0 -81
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/status/route.ts +0 -12
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/tabs/route.ts +0 -25
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/tasks/[id]/route.ts +0 -51
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/tasks/[id]/stream/route.ts +0 -77
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/tasks/link/route.ts +0 -37
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/tasks/route.ts +0 -44
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/tasks/session/route.ts +0 -14
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/telegram/route.ts +0 -23
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/templates/route.ts +0 -6
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/terminal-bell/route.ts +0 -35
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/terminal-cwd/route.ts +0 -19
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/terminal-state/route.ts +0 -15
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/tunnel/route.ts +0 -26
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/upgrade/route.ts +0 -43
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/usage/route.ts +0 -20
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/version/route.ts +0 -78
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/watchers/route.ts +0 -33
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/workspace/[id]/agents/route.ts +0 -35
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/workspace/[id]/memory/route.ts +0 -23
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/workspace/[id]/smith/route.ts +0 -22
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/workspace/[id]/stream/route.ts +0 -28
- package/.forge/worktrees/pipeline-d59c2fe2/app/api/workspace/route.ts +0 -100
- package/.forge/worktrees/pipeline-d59c2fe2/app/global-error.tsx +0 -21
- package/.forge/worktrees/pipeline-d59c2fe2/app/globals.css +0 -52
- package/.forge/worktrees/pipeline-d59c2fe2/app/icon.ico +0 -0
- package/.forge/worktrees/pipeline-d59c2fe2/app/icon.png +0 -0
- package/.forge/worktrees/pipeline-d59c2fe2/app/icon.svg +0 -106
- package/.forge/worktrees/pipeline-d59c2fe2/app/layout.tsx +0 -17
- package/.forge/worktrees/pipeline-d59c2fe2/app/login/LoginForm.tsx +0 -96
- package/.forge/worktrees/pipeline-d59c2fe2/app/login/page.tsx +0 -10
- package/.forge/worktrees/pipeline-d59c2fe2/app/mobile/page.tsx +0 -9
- package/.forge/worktrees/pipeline-d59c2fe2/app/page.tsx +0 -21
- package/.forge/worktrees/pipeline-d59c2fe2/bin/forge-server.mjs +0 -484
- package/.forge/worktrees/pipeline-d59c2fe2/check-forge-status.sh +0 -71
- package/.forge/worktrees/pipeline-d59c2fe2/cli/mw.ts +0 -579
- package/.forge/worktrees/pipeline-d59c2fe2/components/BrowserPanel.tsx +0 -175
- package/.forge/worktrees/pipeline-d59c2fe2/components/ChatPanel.tsx +0 -191
- package/.forge/worktrees/pipeline-d59c2fe2/components/ClaudeTerminal.tsx +0 -267
- package/.forge/worktrees/pipeline-d59c2fe2/components/CodeViewer.tsx +0 -787
- package/.forge/worktrees/pipeline-d59c2fe2/components/ConversationEditor.tsx +0 -411
- package/.forge/worktrees/pipeline-d59c2fe2/components/ConversationGraphView.tsx +0 -347
- package/.forge/worktrees/pipeline-d59c2fe2/components/ConversationTerminalView.tsx +0 -303
- package/.forge/worktrees/pipeline-d59c2fe2/components/Dashboard.tsx +0 -807
- package/.forge/worktrees/pipeline-d59c2fe2/components/DashboardWrapper.tsx +0 -9
- package/.forge/worktrees/pipeline-d59c2fe2/components/DeliveryFlowEditor.tsx +0 -491
- package/.forge/worktrees/pipeline-d59c2fe2/components/DeliveryList.tsx +0 -230
- package/.forge/worktrees/pipeline-d59c2fe2/components/DeliveryWorkspace.tsx +0 -589
- package/.forge/worktrees/pipeline-d59c2fe2/components/DocTerminal.tsx +0 -187
- package/.forge/worktrees/pipeline-d59c2fe2/components/DocsViewer.tsx +0 -574
- package/.forge/worktrees/pipeline-d59c2fe2/components/HelpDialog.tsx +0 -169
- package/.forge/worktrees/pipeline-d59c2fe2/components/HelpTerminal.tsx +0 -141
- package/.forge/worktrees/pipeline-d59c2fe2/components/InlinePipelineView.tsx +0 -111
- package/.forge/worktrees/pipeline-d59c2fe2/components/LogViewer.tsx +0 -194
- package/.forge/worktrees/pipeline-d59c2fe2/components/MarkdownContent.tsx +0 -73
- package/.forge/worktrees/pipeline-d59c2fe2/components/MobileView.tsx +0 -385
- package/.forge/worktrees/pipeline-d59c2fe2/components/MonitorPanel.tsx +0 -122
- package/.forge/worktrees/pipeline-d59c2fe2/components/NewSessionModal.tsx +0 -93
- package/.forge/worktrees/pipeline-d59c2fe2/components/NewTaskModal.tsx +0 -492
- package/.forge/worktrees/pipeline-d59c2fe2/components/PipelineEditor.tsx +0 -570
- package/.forge/worktrees/pipeline-d59c2fe2/components/PipelineView.tsx +0 -1018
- package/.forge/worktrees/pipeline-d59c2fe2/components/PluginsPanel.tsx +0 -472
- package/.forge/worktrees/pipeline-d59c2fe2/components/ProjectDetail.tsx +0 -1618
- package/.forge/worktrees/pipeline-d59c2fe2/components/ProjectList.tsx +0 -108
- package/.forge/worktrees/pipeline-d59c2fe2/components/ProjectManager.tsx +0 -401
- package/.forge/worktrees/pipeline-d59c2fe2/components/SessionList.tsx +0 -74
- package/.forge/worktrees/pipeline-d59c2fe2/components/SessionView.tsx +0 -726
- package/.forge/worktrees/pipeline-d59c2fe2/components/SettingsModal.tsx +0 -1647
- package/.forge/worktrees/pipeline-d59c2fe2/components/SkillsPanel.tsx +0 -969
- package/.forge/worktrees/pipeline-d59c2fe2/components/StatusBar.tsx +0 -99
- package/.forge/worktrees/pipeline-d59c2fe2/components/TabBar.tsx +0 -46
- package/.forge/worktrees/pipeline-d59c2fe2/components/TaskBoard.tsx +0 -113
- package/.forge/worktrees/pipeline-d59c2fe2/components/TaskDetail.tsx +0 -372
- package/.forge/worktrees/pipeline-d59c2fe2/components/TerminalLauncher.tsx +0 -398
- package/.forge/worktrees/pipeline-d59c2fe2/components/TunnelToggle.tsx +0 -206
- package/.forge/worktrees/pipeline-d59c2fe2/components/UsagePanel.tsx +0 -207
- package/.forge/worktrees/pipeline-d59c2fe2/components/WebTerminal.tsx +0 -1683
- package/.forge/worktrees/pipeline-d59c2fe2/components/WorkspaceTree.tsx +0 -221
- package/.forge/worktrees/pipeline-d59c2fe2/components/WorkspaceView.tsx +0 -4048
- package/.forge/worktrees/pipeline-d59c2fe2/dev-test.sh +0 -5
- package/.forge/worktrees/pipeline-d59c2fe2/docs/Forge_Memory_Layer_Design.docx +0 -0
- package/.forge/worktrees/pipeline-d59c2fe2/docs/Forge_Strategy_Research_2026.docx +0 -0
- package/.forge/worktrees/pipeline-d59c2fe2/docs/LOCAL-DEPLOY.md +0 -144
- package/.forge/worktrees/pipeline-d59c2fe2/docs/roadmap-multi-agent-workflow.md +0 -330
- package/.forge/worktrees/pipeline-d59c2fe2/forge-logo.png +0 -0
- package/.forge/worktrees/pipeline-d59c2fe2/forge-logo.svg +0 -106
- package/.forge/worktrees/pipeline-d59c2fe2/hooks/useSidebarResize.ts +0 -52
- package/.forge/worktrees/pipeline-d59c2fe2/install.sh +0 -29
- package/.forge/worktrees/pipeline-d59c2fe2/instrumentation.ts +0 -35
- package/.forge/worktrees/pipeline-d59c2fe2/lib/agents/claude-adapter.ts +0 -104
- package/.forge/worktrees/pipeline-d59c2fe2/lib/agents/generic-adapter.ts +0 -64
- package/.forge/worktrees/pipeline-d59c2fe2/lib/agents/index.ts +0 -245
- package/.forge/worktrees/pipeline-d59c2fe2/lib/agents/types.ts +0 -70
- package/.forge/worktrees/pipeline-d59c2fe2/lib/artifacts.ts +0 -106
- package/.forge/worktrees/pipeline-d59c2fe2/lib/auth.ts +0 -62
- package/.forge/worktrees/pipeline-d59c2fe2/lib/builtin-plugins/docker.yaml +0 -70
- package/.forge/worktrees/pipeline-d59c2fe2/lib/builtin-plugins/http.yaml +0 -66
- package/.forge/worktrees/pipeline-d59c2fe2/lib/builtin-plugins/jenkins.yaml +0 -92
- package/.forge/worktrees/pipeline-d59c2fe2/lib/builtin-plugins/llm-vision.yaml +0 -85
- package/.forge/worktrees/pipeline-d59c2fe2/lib/builtin-plugins/playwright.yaml +0 -111
- package/.forge/worktrees/pipeline-d59c2fe2/lib/builtin-plugins/shell-command.yaml +0 -60
- package/.forge/worktrees/pipeline-d59c2fe2/lib/builtin-plugins/slack.yaml +0 -48
- package/.forge/worktrees/pipeline-d59c2fe2/lib/builtin-plugins/webhook.yaml +0 -56
- package/.forge/worktrees/pipeline-d59c2fe2/lib/claude-process.ts +0 -361
- package/.forge/worktrees/pipeline-d59c2fe2/lib/claude-sessions.ts +0 -266
- package/.forge/worktrees/pipeline-d59c2fe2/lib/claude-templates.ts +0 -227
- package/.forge/worktrees/pipeline-d59c2fe2/lib/cloudflared.ts +0 -424
- package/.forge/worktrees/pipeline-d59c2fe2/lib/crypto.ts +0 -67
- package/.forge/worktrees/pipeline-d59c2fe2/lib/delivery.ts +0 -787
- package/.forge/worktrees/pipeline-d59c2fe2/lib/dirs.ts +0 -99
- package/.forge/worktrees/pipeline-d59c2fe2/lib/flows.ts +0 -86
- package/.forge/worktrees/pipeline-d59c2fe2/lib/forge-mcp-server.ts +0 -717
- package/.forge/worktrees/pipeline-d59c2fe2/lib/forge-skills/forge-inbox.md +0 -38
- package/.forge/worktrees/pipeline-d59c2fe2/lib/forge-skills/forge-send.md +0 -47
- package/.forge/worktrees/pipeline-d59c2fe2/lib/forge-skills/forge-status.md +0 -32
- package/.forge/worktrees/pipeline-d59c2fe2/lib/forge-skills/forge-workspace-sync.md +0 -37
- package/.forge/worktrees/pipeline-d59c2fe2/lib/help-docs/00-overview.md +0 -40
- package/.forge/worktrees/pipeline-d59c2fe2/lib/help-docs/01-settings.md +0 -194
- package/.forge/worktrees/pipeline-d59c2fe2/lib/help-docs/02-telegram.md +0 -41
- package/.forge/worktrees/pipeline-d59c2fe2/lib/help-docs/03-tunnel.md +0 -31
- package/.forge/worktrees/pipeline-d59c2fe2/lib/help-docs/04-tasks.md +0 -52
- package/.forge/worktrees/pipeline-d59c2fe2/lib/help-docs/05-pipelines.md +0 -460
- package/.forge/worktrees/pipeline-d59c2fe2/lib/help-docs/06-skills.md +0 -43
- package/.forge/worktrees/pipeline-d59c2fe2/lib/help-docs/07-projects.md +0 -73
- package/.forge/worktrees/pipeline-d59c2fe2/lib/help-docs/08-rules.md +0 -53
- package/.forge/worktrees/pipeline-d59c2fe2/lib/help-docs/09-issue-autofix.md +0 -55
- package/.forge/worktrees/pipeline-d59c2fe2/lib/help-docs/10-troubleshooting.md +0 -89
- package/.forge/worktrees/pipeline-d59c2fe2/lib/help-docs/11-workspace.md +0 -810
- package/.forge/worktrees/pipeline-d59c2fe2/lib/help-docs/CLAUDE.md +0 -62
- package/.forge/worktrees/pipeline-d59c2fe2/lib/init.ts +0 -266
- package/.forge/worktrees/pipeline-d59c2fe2/lib/issue-scanner.ts +0 -298
- package/.forge/worktrees/pipeline-d59c2fe2/lib/logger.ts +0 -79
- package/.forge/worktrees/pipeline-d59c2fe2/lib/notifications.ts +0 -75
- package/.forge/worktrees/pipeline-d59c2fe2/lib/notify.ts +0 -108
- package/.forge/worktrees/pipeline-d59c2fe2/lib/password.ts +0 -97
- package/.forge/worktrees/pipeline-d59c2fe2/lib/pipeline-scheduler.ts +0 -373
- package/.forge/worktrees/pipeline-d59c2fe2/lib/pipeline.ts +0 -1441
- package/.forge/worktrees/pipeline-d59c2fe2/lib/plugins/executor.ts +0 -347
- package/.forge/worktrees/pipeline-d59c2fe2/lib/plugins/registry.ts +0 -228
- package/.forge/worktrees/pipeline-d59c2fe2/lib/plugins/types.ts +0 -103
- package/.forge/worktrees/pipeline-d59c2fe2/lib/project-sessions.ts +0 -53
- package/.forge/worktrees/pipeline-d59c2fe2/lib/projects.ts +0 -86
- package/.forge/worktrees/pipeline-d59c2fe2/lib/session-manager.ts +0 -156
- package/.forge/worktrees/pipeline-d59c2fe2/lib/session-utils.ts +0 -53
- package/.forge/worktrees/pipeline-d59c2fe2/lib/session-watcher.ts +0 -345
- package/.forge/worktrees/pipeline-d59c2fe2/lib/settings.ts +0 -195
- package/.forge/worktrees/pipeline-d59c2fe2/lib/skills.ts +0 -458
- package/.forge/worktrees/pipeline-d59c2fe2/lib/task-manager.ts +0 -949
- package/.forge/worktrees/pipeline-d59c2fe2/lib/telegram-bot.ts +0 -1477
- package/.forge/worktrees/pipeline-d59c2fe2/lib/telegram-standalone.ts +0 -83
- package/.forge/worktrees/pipeline-d59c2fe2/lib/terminal-server.ts +0 -70
- package/.forge/worktrees/pipeline-d59c2fe2/lib/terminal-standalone.ts +0 -421
- package/.forge/worktrees/pipeline-d59c2fe2/lib/usage-scanner.ts +0 -249
- package/.forge/worktrees/pipeline-d59c2fe2/lib/workspace/__tests__/state-machine.test.ts +0 -388
- package/.forge/worktrees/pipeline-d59c2fe2/lib/workspace/__tests__/workspace.test.ts +0 -311
- package/.forge/worktrees/pipeline-d59c2fe2/lib/workspace/agent-bus.ts +0 -416
- package/.forge/worktrees/pipeline-d59c2fe2/lib/workspace/agent-worker.ts +0 -655
- package/.forge/worktrees/pipeline-d59c2fe2/lib/workspace/backends/api-backend.ts +0 -262
- package/.forge/worktrees/pipeline-d59c2fe2/lib/workspace/backends/cli-backend.ts +0 -491
- package/.forge/worktrees/pipeline-d59c2fe2/lib/workspace/index.ts +0 -82
- package/.forge/worktrees/pipeline-d59c2fe2/lib/workspace/manager.ts +0 -136
- package/.forge/worktrees/pipeline-d59c2fe2/lib/workspace/orchestrator.ts +0 -3400
- package/.forge/worktrees/pipeline-d59c2fe2/lib/workspace/persistence.ts +0 -309
- package/.forge/worktrees/pipeline-d59c2fe2/lib/workspace/presets.ts +0 -649
- package/.forge/worktrees/pipeline-d59c2fe2/lib/workspace/requests.ts +0 -287
- package/.forge/worktrees/pipeline-d59c2fe2/lib/workspace/session-monitor.ts +0 -240
- package/.forge/worktrees/pipeline-d59c2fe2/lib/workspace/skill-installer.ts +0 -275
- package/.forge/worktrees/pipeline-d59c2fe2/lib/workspace/smith-memory.ts +0 -498
- package/.forge/worktrees/pipeline-d59c2fe2/lib/workspace/types.ts +0 -241
- package/.forge/worktrees/pipeline-d59c2fe2/lib/workspace/watch-manager.ts +0 -560
- package/.forge/worktrees/pipeline-d59c2fe2/lib/workspace-standalone.ts +0 -911
- package/.forge/worktrees/pipeline-d59c2fe2/middleware.ts +0 -51
- package/.forge/worktrees/pipeline-d59c2fe2/next.config.ts +0 -26
- package/.forge/worktrees/pipeline-d59c2fe2/package.json +0 -74
- package/.forge/worktrees/pipeline-d59c2fe2/pnpm-lock.yaml +0 -3719
- package/.forge/worktrees/pipeline-d59c2fe2/pnpm-workspace.yaml +0 -1
- package/.forge/worktrees/pipeline-d59c2fe2/postcss.config.mjs +0 -7
- package/.forge/worktrees/pipeline-d59c2fe2/publish.sh +0 -133
- package/.forge/worktrees/pipeline-d59c2fe2/scripts/bench/README.md +0 -66
- package/.forge/worktrees/pipeline-d59c2fe2/scripts/bench/results/.gitignore +0 -2
- package/.forge/worktrees/pipeline-d59c2fe2/scripts/bench/run.ts +0 -635
- package/.forge/worktrees/pipeline-d59c2fe2/scripts/bench/tasks/01-text-utils/task.md +0 -26
- package/.forge/worktrees/pipeline-d59c2fe2/scripts/bench/tasks/01-text-utils/validator.sh +0 -46
- package/.forge/worktrees/pipeline-d59c2fe2/scripts/bench/tasks/02-pagination/setup.sh +0 -19
- package/.forge/worktrees/pipeline-d59c2fe2/scripts/bench/tasks/02-pagination/task.md +0 -48
- package/.forge/worktrees/pipeline-d59c2fe2/scripts/bench/tasks/02-pagination/validator.sh +0 -69
- package/.forge/worktrees/pipeline-d59c2fe2/scripts/bench/tasks/03-bug-fix/setup.sh +0 -82
- package/.forge/worktrees/pipeline-d59c2fe2/scripts/bench/tasks/03-bug-fix/task.md +0 -30
- package/.forge/worktrees/pipeline-d59c2fe2/scripts/bench/tasks/03-bug-fix/validator.sh +0 -29
- package/.forge/worktrees/pipeline-d59c2fe2/scripts/verify-usage.ts +0 -178
- package/.forge/worktrees/pipeline-d59c2fe2/src/config/index.ts +0 -129
- package/.forge/worktrees/pipeline-d59c2fe2/src/core/db/database.ts +0 -259
- package/.forge/worktrees/pipeline-d59c2fe2/src/core/memory/strategy.ts +0 -32
- package/.forge/worktrees/pipeline-d59c2fe2/src/core/providers/chat.ts +0 -65
- package/.forge/worktrees/pipeline-d59c2fe2/src/core/providers/registry.ts +0 -60
- package/.forge/worktrees/pipeline-d59c2fe2/src/core/session/manager.ts +0 -190
- package/.forge/worktrees/pipeline-d59c2fe2/src/types/index.ts +0 -129
- package/.forge/worktrees/pipeline-d59c2fe2/start.sh +0 -31
- package/.forge/worktrees/pipeline-d59c2fe2/templates/smith-lead.json +0 -45
- package/.forge/worktrees/pipeline-d59c2fe2/tsconfig.json +0 -42
- package/.forge/worktrees/pipeline-d6a6ef23/CLAUDE.md +0 -86
- package/.forge/worktrees/pipeline-d6a6ef23/README.md +0 -136
- package/.forge/worktrees/pipeline-d6a6ef23/RELEASE_NOTES.md +0 -11
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/agents/route.ts +0 -17
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/auth/[...nextauth]/route.ts +0 -3
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/auth/verify/route.ts +0 -46
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/claude/[id]/route.ts +0 -31
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/claude/[id]/stream/route.ts +0 -63
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/claude/route.ts +0 -28
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/claude-sessions/[projectName]/entries/route.ts +0 -23
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/claude-sessions/[projectName]/live/route.ts +0 -72
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/claude-sessions/[projectName]/route.ts +0 -37
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/claude-sessions/sync/route.ts +0 -17
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/claude-templates/route.ts +0 -145
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/code/route.ts +0 -299
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/delivery/[id]/route.ts +0 -62
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/delivery/route.ts +0 -40
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/detect-cli/route.ts +0 -46
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/docs/route.ts +0 -176
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/docs/sessions/route.ts +0 -54
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/favorites/route.ts +0 -26
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/flows/route.ts +0 -6
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/flows/run/route.ts +0 -19
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/git/route.ts +0 -149
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/help/route.ts +0 -84
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/issue-scanner/route.ts +0 -116
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/logs/route.ts +0 -100
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/mobile-chat/route.ts +0 -115
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/monitor/route.ts +0 -74
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/notifications/route.ts +0 -42
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/notify/test/route.ts +0 -33
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/online/route.ts +0 -40
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/pipelines/[id]/route.ts +0 -41
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/pipelines/route.ts +0 -90
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/plugins/route.ts +0 -75
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/preview/[...path]/route.ts +0 -64
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/preview/route.ts +0 -156
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/project-pipelines/route.ts +0 -91
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/project-sessions/route.ts +0 -61
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/projects/route.ts +0 -26
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/sessions/[id]/chat/route.ts +0 -64
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/sessions/[id]/messages/route.ts +0 -9
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/sessions/[id]/route.ts +0 -17
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/sessions/route.ts +0 -20
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/settings/route.ts +0 -64
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/skills/local/route.ts +0 -228
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/skills/route.ts +0 -182
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/smith-templates/route.ts +0 -81
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/status/route.ts +0 -12
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/tabs/route.ts +0 -25
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/tasks/[id]/route.ts +0 -51
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/tasks/[id]/stream/route.ts +0 -77
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/tasks/link/route.ts +0 -37
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/tasks/route.ts +0 -44
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/tasks/session/route.ts +0 -14
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/telegram/route.ts +0 -23
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/templates/route.ts +0 -6
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/terminal-bell/route.ts +0 -35
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/terminal-cwd/route.ts +0 -19
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/terminal-state/route.ts +0 -15
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/tunnel/route.ts +0 -26
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/upgrade/route.ts +0 -43
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/usage/route.ts +0 -20
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/version/route.ts +0 -78
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/watchers/route.ts +0 -33
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/workspace/[id]/agents/route.ts +0 -35
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/workspace/[id]/memory/route.ts +0 -23
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/workspace/[id]/smith/route.ts +0 -22
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/workspace/[id]/stream/route.ts +0 -28
- package/.forge/worktrees/pipeline-d6a6ef23/app/api/workspace/route.ts +0 -100
- package/.forge/worktrees/pipeline-d6a6ef23/app/global-error.tsx +0 -21
- package/.forge/worktrees/pipeline-d6a6ef23/app/globals.css +0 -52
- package/.forge/worktrees/pipeline-d6a6ef23/app/icon.ico +0 -0
- package/.forge/worktrees/pipeline-d6a6ef23/app/icon.png +0 -0
- package/.forge/worktrees/pipeline-d6a6ef23/app/icon.svg +0 -106
- package/.forge/worktrees/pipeline-d6a6ef23/app/layout.tsx +0 -17
- package/.forge/worktrees/pipeline-d6a6ef23/app/login/LoginForm.tsx +0 -96
- package/.forge/worktrees/pipeline-d6a6ef23/app/login/page.tsx +0 -10
- package/.forge/worktrees/pipeline-d6a6ef23/app/mobile/page.tsx +0 -9
- package/.forge/worktrees/pipeline-d6a6ef23/app/page.tsx +0 -21
- package/.forge/worktrees/pipeline-d6a6ef23/bin/forge-server.mjs +0 -484
- package/.forge/worktrees/pipeline-d6a6ef23/check-forge-status.sh +0 -71
- package/.forge/worktrees/pipeline-d6a6ef23/cli/mw.ts +0 -579
- package/.forge/worktrees/pipeline-d6a6ef23/components/BrowserPanel.tsx +0 -175
- package/.forge/worktrees/pipeline-d6a6ef23/components/ChatPanel.tsx +0 -191
- package/.forge/worktrees/pipeline-d6a6ef23/components/ClaudeTerminal.tsx +0 -267
- package/.forge/worktrees/pipeline-d6a6ef23/components/CodeViewer.tsx +0 -787
- package/.forge/worktrees/pipeline-d6a6ef23/components/ConversationEditor.tsx +0 -411
- package/.forge/worktrees/pipeline-d6a6ef23/components/ConversationGraphView.tsx +0 -347
- package/.forge/worktrees/pipeline-d6a6ef23/components/ConversationTerminalView.tsx +0 -303
- package/.forge/worktrees/pipeline-d6a6ef23/components/Dashboard.tsx +0 -807
- package/.forge/worktrees/pipeline-d6a6ef23/components/DashboardWrapper.tsx +0 -9
- package/.forge/worktrees/pipeline-d6a6ef23/components/DeliveryFlowEditor.tsx +0 -491
- package/.forge/worktrees/pipeline-d6a6ef23/components/DeliveryList.tsx +0 -230
- package/.forge/worktrees/pipeline-d6a6ef23/components/DeliveryWorkspace.tsx +0 -589
- package/.forge/worktrees/pipeline-d6a6ef23/components/DocTerminal.tsx +0 -187
- package/.forge/worktrees/pipeline-d6a6ef23/components/DocsViewer.tsx +0 -574
- package/.forge/worktrees/pipeline-d6a6ef23/components/HelpDialog.tsx +0 -169
- package/.forge/worktrees/pipeline-d6a6ef23/components/HelpTerminal.tsx +0 -141
- package/.forge/worktrees/pipeline-d6a6ef23/components/InlinePipelineView.tsx +0 -111
- package/.forge/worktrees/pipeline-d6a6ef23/components/LogViewer.tsx +0 -194
- package/.forge/worktrees/pipeline-d6a6ef23/components/MarkdownContent.tsx +0 -73
- package/.forge/worktrees/pipeline-d6a6ef23/components/MobileView.tsx +0 -385
- package/.forge/worktrees/pipeline-d6a6ef23/components/MonitorPanel.tsx +0 -122
- package/.forge/worktrees/pipeline-d6a6ef23/components/NewSessionModal.tsx +0 -93
- package/.forge/worktrees/pipeline-d6a6ef23/components/NewTaskModal.tsx +0 -492
- package/.forge/worktrees/pipeline-d6a6ef23/components/PipelineEditor.tsx +0 -570
- package/.forge/worktrees/pipeline-d6a6ef23/components/PipelineView.tsx +0 -1018
- package/.forge/worktrees/pipeline-d6a6ef23/components/PluginsPanel.tsx +0 -472
- package/.forge/worktrees/pipeline-d6a6ef23/components/ProjectDetail.tsx +0 -1618
- package/.forge/worktrees/pipeline-d6a6ef23/components/ProjectList.tsx +0 -108
- package/.forge/worktrees/pipeline-d6a6ef23/components/ProjectManager.tsx +0 -401
- package/.forge/worktrees/pipeline-d6a6ef23/components/SessionList.tsx +0 -74
- package/.forge/worktrees/pipeline-d6a6ef23/components/SessionView.tsx +0 -726
- package/.forge/worktrees/pipeline-d6a6ef23/components/SettingsModal.tsx +0 -1647
- package/.forge/worktrees/pipeline-d6a6ef23/components/SkillsPanel.tsx +0 -969
- package/.forge/worktrees/pipeline-d6a6ef23/components/StatusBar.tsx +0 -99
- package/.forge/worktrees/pipeline-d6a6ef23/components/TabBar.tsx +0 -46
- package/.forge/worktrees/pipeline-d6a6ef23/components/TaskBoard.tsx +0 -113
- package/.forge/worktrees/pipeline-d6a6ef23/components/TaskDetail.tsx +0 -372
- package/.forge/worktrees/pipeline-d6a6ef23/components/TerminalLauncher.tsx +0 -398
- package/.forge/worktrees/pipeline-d6a6ef23/components/TunnelToggle.tsx +0 -206
- package/.forge/worktrees/pipeline-d6a6ef23/components/UsagePanel.tsx +0 -207
- package/.forge/worktrees/pipeline-d6a6ef23/components/WebTerminal.tsx +0 -1683
- package/.forge/worktrees/pipeline-d6a6ef23/components/WorkspaceTree.tsx +0 -221
- package/.forge/worktrees/pipeline-d6a6ef23/components/WorkspaceView.tsx +0 -4048
- package/.forge/worktrees/pipeline-d6a6ef23/dev-test.sh +0 -5
- package/.forge/worktrees/pipeline-d6a6ef23/docs/Forge_Memory_Layer_Design.docx +0 -0
- package/.forge/worktrees/pipeline-d6a6ef23/docs/Forge_Strategy_Research_2026.docx +0 -0
- package/.forge/worktrees/pipeline-d6a6ef23/docs/LOCAL-DEPLOY.md +0 -144
- package/.forge/worktrees/pipeline-d6a6ef23/docs/roadmap-multi-agent-workflow.md +0 -330
- package/.forge/worktrees/pipeline-d6a6ef23/forge-logo.png +0 -0
- package/.forge/worktrees/pipeline-d6a6ef23/forge-logo.svg +0 -106
- package/.forge/worktrees/pipeline-d6a6ef23/hooks/useSidebarResize.ts +0 -52
- package/.forge/worktrees/pipeline-d6a6ef23/install.sh +0 -29
- package/.forge/worktrees/pipeline-d6a6ef23/instrumentation.ts +0 -35
- package/.forge/worktrees/pipeline-d6a6ef23/lib/agents/claude-adapter.ts +0 -104
- package/.forge/worktrees/pipeline-d6a6ef23/lib/agents/generic-adapter.ts +0 -64
- package/.forge/worktrees/pipeline-d6a6ef23/lib/agents/index.ts +0 -245
- package/.forge/worktrees/pipeline-d6a6ef23/lib/agents/types.ts +0 -70
- package/.forge/worktrees/pipeline-d6a6ef23/lib/artifacts.ts +0 -106
- package/.forge/worktrees/pipeline-d6a6ef23/lib/auth.ts +0 -62
- package/.forge/worktrees/pipeline-d6a6ef23/lib/builtin-plugins/docker.yaml +0 -70
- package/.forge/worktrees/pipeline-d6a6ef23/lib/builtin-plugins/http.yaml +0 -66
- package/.forge/worktrees/pipeline-d6a6ef23/lib/builtin-plugins/jenkins.yaml +0 -92
- package/.forge/worktrees/pipeline-d6a6ef23/lib/builtin-plugins/llm-vision.yaml +0 -85
- package/.forge/worktrees/pipeline-d6a6ef23/lib/builtin-plugins/playwright.yaml +0 -111
- package/.forge/worktrees/pipeline-d6a6ef23/lib/builtin-plugins/shell-command.yaml +0 -60
- package/.forge/worktrees/pipeline-d6a6ef23/lib/builtin-plugins/slack.yaml +0 -48
- package/.forge/worktrees/pipeline-d6a6ef23/lib/builtin-plugins/webhook.yaml +0 -56
- package/.forge/worktrees/pipeline-d6a6ef23/lib/claude-process.ts +0 -352
- package/.forge/worktrees/pipeline-d6a6ef23/lib/claude-sessions.ts +0 -266
- package/.forge/worktrees/pipeline-d6a6ef23/lib/claude-templates.ts +0 -227
- package/.forge/worktrees/pipeline-d6a6ef23/lib/cloudflared.ts +0 -424
- package/.forge/worktrees/pipeline-d6a6ef23/lib/crypto.ts +0 -67
- package/.forge/worktrees/pipeline-d6a6ef23/lib/delivery.ts +0 -787
- package/.forge/worktrees/pipeline-d6a6ef23/lib/dirs.ts +0 -99
- package/.forge/worktrees/pipeline-d6a6ef23/lib/flows.ts +0 -86
- package/.forge/worktrees/pipeline-d6a6ef23/lib/forge-mcp-server.ts +0 -717
- package/.forge/worktrees/pipeline-d6a6ef23/lib/forge-skills/forge-inbox.md +0 -38
- package/.forge/worktrees/pipeline-d6a6ef23/lib/forge-skills/forge-send.md +0 -47
- package/.forge/worktrees/pipeline-d6a6ef23/lib/forge-skills/forge-status.md +0 -32
- package/.forge/worktrees/pipeline-d6a6ef23/lib/forge-skills/forge-workspace-sync.md +0 -37
- package/.forge/worktrees/pipeline-d6a6ef23/lib/help-docs/00-overview.md +0 -40
- package/.forge/worktrees/pipeline-d6a6ef23/lib/help-docs/01-settings.md +0 -194
- package/.forge/worktrees/pipeline-d6a6ef23/lib/help-docs/02-telegram.md +0 -41
- package/.forge/worktrees/pipeline-d6a6ef23/lib/help-docs/03-tunnel.md +0 -31
- package/.forge/worktrees/pipeline-d6a6ef23/lib/help-docs/04-tasks.md +0 -52
- package/.forge/worktrees/pipeline-d6a6ef23/lib/help-docs/05-pipelines.md +0 -460
- package/.forge/worktrees/pipeline-d6a6ef23/lib/help-docs/06-skills.md +0 -43
- package/.forge/worktrees/pipeline-d6a6ef23/lib/help-docs/07-projects.md +0 -73
- package/.forge/worktrees/pipeline-d6a6ef23/lib/help-docs/08-rules.md +0 -53
- package/.forge/worktrees/pipeline-d6a6ef23/lib/help-docs/09-issue-autofix.md +0 -55
- package/.forge/worktrees/pipeline-d6a6ef23/lib/help-docs/10-troubleshooting.md +0 -89
- package/.forge/worktrees/pipeline-d6a6ef23/lib/help-docs/11-workspace.md +0 -810
- package/.forge/worktrees/pipeline-d6a6ef23/lib/help-docs/CLAUDE.md +0 -62
- package/.forge/worktrees/pipeline-d6a6ef23/lib/init.ts +0 -266
- package/.forge/worktrees/pipeline-d6a6ef23/lib/issue-scanner.ts +0 -298
- package/.forge/worktrees/pipeline-d6a6ef23/lib/logger.ts +0 -79
- package/.forge/worktrees/pipeline-d6a6ef23/lib/notifications.ts +0 -75
- package/.forge/worktrees/pipeline-d6a6ef23/lib/notify.ts +0 -108
- package/.forge/worktrees/pipeline-d6a6ef23/lib/password.ts +0 -97
- package/.forge/worktrees/pipeline-d6a6ef23/lib/pipeline-scheduler.ts +0 -373
- package/.forge/worktrees/pipeline-d6a6ef23/lib/pipeline.ts +0 -1438
- package/.forge/worktrees/pipeline-d6a6ef23/lib/plugins/executor.ts +0 -347
- package/.forge/worktrees/pipeline-d6a6ef23/lib/plugins/registry.ts +0 -228
- package/.forge/worktrees/pipeline-d6a6ef23/lib/plugins/types.ts +0 -103
- package/.forge/worktrees/pipeline-d6a6ef23/lib/project-sessions.ts +0 -53
- package/.forge/worktrees/pipeline-d6a6ef23/lib/projects.ts +0 -86
- package/.forge/worktrees/pipeline-d6a6ef23/lib/session-manager.ts +0 -156
- package/.forge/worktrees/pipeline-d6a6ef23/lib/session-utils.ts +0 -53
- package/.forge/worktrees/pipeline-d6a6ef23/lib/session-watcher.ts +0 -345
- package/.forge/worktrees/pipeline-d6a6ef23/lib/settings.ts +0 -195
- package/.forge/worktrees/pipeline-d6a6ef23/lib/skills.ts +0 -458
- package/.forge/worktrees/pipeline-d6a6ef23/lib/task-manager.ts +0 -949
- package/.forge/worktrees/pipeline-d6a6ef23/lib/telegram-bot.ts +0 -1477
- package/.forge/worktrees/pipeline-d6a6ef23/lib/telegram-standalone.ts +0 -83
- package/.forge/worktrees/pipeline-d6a6ef23/lib/terminal-server.ts +0 -70
- package/.forge/worktrees/pipeline-d6a6ef23/lib/terminal-standalone.ts +0 -421
- package/.forge/worktrees/pipeline-d6a6ef23/lib/usage-scanner.ts +0 -249
- package/.forge/worktrees/pipeline-d6a6ef23/lib/workspace/__tests__/state-machine.test.ts +0 -388
- package/.forge/worktrees/pipeline-d6a6ef23/lib/workspace/__tests__/workspace.test.ts +0 -311
- package/.forge/worktrees/pipeline-d6a6ef23/lib/workspace/agent-bus.ts +0 -416
- package/.forge/worktrees/pipeline-d6a6ef23/lib/workspace/agent-worker.ts +0 -655
- package/.forge/worktrees/pipeline-d6a6ef23/lib/workspace/backends/api-backend.ts +0 -262
- package/.forge/worktrees/pipeline-d6a6ef23/lib/workspace/backends/cli-backend.ts +0 -491
- package/.forge/worktrees/pipeline-d6a6ef23/lib/workspace/index.ts +0 -82
- package/.forge/worktrees/pipeline-d6a6ef23/lib/workspace/manager.ts +0 -136
- package/.forge/worktrees/pipeline-d6a6ef23/lib/workspace/orchestrator.ts +0 -3400
- package/.forge/worktrees/pipeline-d6a6ef23/lib/workspace/persistence.ts +0 -309
- package/.forge/worktrees/pipeline-d6a6ef23/lib/workspace/presets.ts +0 -649
- package/.forge/worktrees/pipeline-d6a6ef23/lib/workspace/requests.ts +0 -287
- package/.forge/worktrees/pipeline-d6a6ef23/lib/workspace/session-monitor.ts +0 -240
- package/.forge/worktrees/pipeline-d6a6ef23/lib/workspace/skill-installer.ts +0 -275
- package/.forge/worktrees/pipeline-d6a6ef23/lib/workspace/smith-memory.ts +0 -498
- package/.forge/worktrees/pipeline-d6a6ef23/lib/workspace/types.ts +0 -241
- package/.forge/worktrees/pipeline-d6a6ef23/lib/workspace/watch-manager.ts +0 -560
- package/.forge/worktrees/pipeline-d6a6ef23/lib/workspace-standalone.ts +0 -911
- package/.forge/worktrees/pipeline-d6a6ef23/middleware.ts +0 -51
- package/.forge/worktrees/pipeline-d6a6ef23/next.config.ts +0 -26
- package/.forge/worktrees/pipeline-d6a6ef23/package.json +0 -74
- package/.forge/worktrees/pipeline-d6a6ef23/pnpm-lock.yaml +0 -3719
- package/.forge/worktrees/pipeline-d6a6ef23/pnpm-workspace.yaml +0 -1
- package/.forge/worktrees/pipeline-d6a6ef23/postcss.config.mjs +0 -7
- package/.forge/worktrees/pipeline-d6a6ef23/publish.sh +0 -133
- package/.forge/worktrees/pipeline-d6a6ef23/scripts/bench/README.md +0 -66
- package/.forge/worktrees/pipeline-d6a6ef23/scripts/bench/results/.gitignore +0 -2
- package/.forge/worktrees/pipeline-d6a6ef23/scripts/bench/run.ts +0 -635
- package/.forge/worktrees/pipeline-d6a6ef23/scripts/bench/tasks/01-text-utils/task.md +0 -26
- package/.forge/worktrees/pipeline-d6a6ef23/scripts/bench/tasks/01-text-utils/validator.sh +0 -46
- package/.forge/worktrees/pipeline-d6a6ef23/scripts/bench/tasks/02-pagination/setup.sh +0 -19
- package/.forge/worktrees/pipeline-d6a6ef23/scripts/bench/tasks/02-pagination/task.md +0 -48
- package/.forge/worktrees/pipeline-d6a6ef23/scripts/bench/tasks/02-pagination/validator.sh +0 -69
- package/.forge/worktrees/pipeline-d6a6ef23/scripts/bench/tasks/03-bug-fix/setup.sh +0 -82
- package/.forge/worktrees/pipeline-d6a6ef23/scripts/bench/tasks/03-bug-fix/task.md +0 -30
- package/.forge/worktrees/pipeline-d6a6ef23/scripts/bench/tasks/03-bug-fix/validator.sh +0 -29
- package/.forge/worktrees/pipeline-d6a6ef23/scripts/verify-usage.ts +0 -178
- package/.forge/worktrees/pipeline-d6a6ef23/src/config/index.ts +0 -129
- package/.forge/worktrees/pipeline-d6a6ef23/src/core/db/database.ts +0 -259
- package/.forge/worktrees/pipeline-d6a6ef23/src/core/memory/strategy.ts +0 -32
- package/.forge/worktrees/pipeline-d6a6ef23/src/core/providers/chat.ts +0 -65
- package/.forge/worktrees/pipeline-d6a6ef23/src/core/providers/registry.ts +0 -60
- package/.forge/worktrees/pipeline-d6a6ef23/src/core/session/manager.ts +0 -190
- package/.forge/worktrees/pipeline-d6a6ef23/src/types/index.ts +0 -129
- package/.forge/worktrees/pipeline-d6a6ef23/start.sh +0 -31
- package/.forge/worktrees/pipeline-d6a6ef23/templates/smith-lead.json +0 -45
- package/.forge/worktrees/pipeline-d6a6ef23/tsconfig.json +0 -42
- package/.forge/worktrees/pipeline-e7f78b7a/CLAUDE.md +0 -86
- package/.forge/worktrees/pipeline-e7f78b7a/README.md +0 -136
- package/.forge/worktrees/pipeline-e7f78b7a/RELEASE_NOTES.md +0 -11
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/agents/route.ts +0 -17
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/auth/[...nextauth]/route.ts +0 -3
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/auth/verify/route.ts +0 -46
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/claude/[id]/route.ts +0 -31
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/claude/[id]/stream/route.ts +0 -63
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/claude/route.ts +0 -28
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/claude-sessions/[projectName]/entries/route.ts +0 -23
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/claude-sessions/[projectName]/live/route.ts +0 -72
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/claude-sessions/[projectName]/route.ts +0 -37
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/claude-sessions/sync/route.ts +0 -17
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/claude-templates/route.ts +0 -145
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/code/route.ts +0 -299
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/delivery/[id]/route.ts +0 -62
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/delivery/route.ts +0 -40
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/detect-cli/route.ts +0 -46
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/docs/route.ts +0 -176
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/docs/sessions/route.ts +0 -54
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/favorites/route.ts +0 -26
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/flows/route.ts +0 -6
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/flows/run/route.ts +0 -19
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/git/route.ts +0 -149
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/help/route.ts +0 -84
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/issue-scanner/route.ts +0 -116
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/logs/route.ts +0 -100
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/mobile-chat/route.ts +0 -115
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/monitor/route.ts +0 -74
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/notifications/route.ts +0 -42
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/notify/test/route.ts +0 -33
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/online/route.ts +0 -40
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/pipelines/[id]/route.ts +0 -41
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/pipelines/route.ts +0 -90
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/plugins/route.ts +0 -75
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/preview/[...path]/route.ts +0 -64
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/preview/route.ts +0 -156
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/project-pipelines/route.ts +0 -91
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/project-sessions/route.ts +0 -61
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/projects/route.ts +0 -26
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/sessions/[id]/chat/route.ts +0 -64
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/sessions/[id]/messages/route.ts +0 -9
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/sessions/[id]/route.ts +0 -17
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/sessions/route.ts +0 -20
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/settings/route.ts +0 -64
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/skills/local/route.ts +0 -228
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/skills/route.ts +0 -182
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/smith-templates/route.ts +0 -81
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/status/route.ts +0 -12
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/tabs/route.ts +0 -25
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/tasks/[id]/route.ts +0 -51
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/tasks/[id]/stream/route.ts +0 -77
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/tasks/link/route.ts +0 -37
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/tasks/route.ts +0 -44
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/tasks/session/route.ts +0 -14
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/telegram/route.ts +0 -23
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/templates/route.ts +0 -6
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/terminal-bell/route.ts +0 -35
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/terminal-cwd/route.ts +0 -19
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/terminal-state/route.ts +0 -15
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/tunnel/route.ts +0 -26
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/upgrade/route.ts +0 -43
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/usage/route.ts +0 -20
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/version/route.ts +0 -78
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/watchers/route.ts +0 -33
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/workspace/[id]/agents/route.ts +0 -35
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/workspace/[id]/memory/route.ts +0 -23
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/workspace/[id]/smith/route.ts +0 -22
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/workspace/[id]/stream/route.ts +0 -28
- package/.forge/worktrees/pipeline-e7f78b7a/app/api/workspace/route.ts +0 -100
- package/.forge/worktrees/pipeline-e7f78b7a/app/global-error.tsx +0 -21
- package/.forge/worktrees/pipeline-e7f78b7a/app/globals.css +0 -52
- package/.forge/worktrees/pipeline-e7f78b7a/app/icon.ico +0 -0
- package/.forge/worktrees/pipeline-e7f78b7a/app/icon.png +0 -0
- package/.forge/worktrees/pipeline-e7f78b7a/app/icon.svg +0 -106
- package/.forge/worktrees/pipeline-e7f78b7a/app/layout.tsx +0 -17
- package/.forge/worktrees/pipeline-e7f78b7a/app/login/LoginForm.tsx +0 -96
- package/.forge/worktrees/pipeline-e7f78b7a/app/login/page.tsx +0 -10
- package/.forge/worktrees/pipeline-e7f78b7a/app/mobile/page.tsx +0 -9
- package/.forge/worktrees/pipeline-e7f78b7a/app/page.tsx +0 -21
- package/.forge/worktrees/pipeline-e7f78b7a/bin/forge-server.mjs +0 -484
- package/.forge/worktrees/pipeline-e7f78b7a/check-forge-status.sh +0 -71
- package/.forge/worktrees/pipeline-e7f78b7a/cli/mw.ts +0 -579
- package/.forge/worktrees/pipeline-e7f78b7a/components/BrowserPanel.tsx +0 -175
- package/.forge/worktrees/pipeline-e7f78b7a/components/ChatPanel.tsx +0 -191
- package/.forge/worktrees/pipeline-e7f78b7a/components/ClaudeTerminal.tsx +0 -267
- package/.forge/worktrees/pipeline-e7f78b7a/components/CodeViewer.tsx +0 -787
- package/.forge/worktrees/pipeline-e7f78b7a/components/ConversationEditor.tsx +0 -411
- package/.forge/worktrees/pipeline-e7f78b7a/components/ConversationGraphView.tsx +0 -347
- package/.forge/worktrees/pipeline-e7f78b7a/components/ConversationTerminalView.tsx +0 -303
- package/.forge/worktrees/pipeline-e7f78b7a/components/Dashboard.tsx +0 -807
- package/.forge/worktrees/pipeline-e7f78b7a/components/DashboardWrapper.tsx +0 -9
- package/.forge/worktrees/pipeline-e7f78b7a/components/DeliveryFlowEditor.tsx +0 -491
- package/.forge/worktrees/pipeline-e7f78b7a/components/DeliveryList.tsx +0 -230
- package/.forge/worktrees/pipeline-e7f78b7a/components/DeliveryWorkspace.tsx +0 -589
- package/.forge/worktrees/pipeline-e7f78b7a/components/DocTerminal.tsx +0 -187
- package/.forge/worktrees/pipeline-e7f78b7a/components/DocsViewer.tsx +0 -574
- package/.forge/worktrees/pipeline-e7f78b7a/components/HelpDialog.tsx +0 -169
- package/.forge/worktrees/pipeline-e7f78b7a/components/HelpTerminal.tsx +0 -141
- package/.forge/worktrees/pipeline-e7f78b7a/components/InlinePipelineView.tsx +0 -111
- package/.forge/worktrees/pipeline-e7f78b7a/components/LogViewer.tsx +0 -194
- package/.forge/worktrees/pipeline-e7f78b7a/components/MarkdownContent.tsx +0 -73
- package/.forge/worktrees/pipeline-e7f78b7a/components/MobileView.tsx +0 -385
- package/.forge/worktrees/pipeline-e7f78b7a/components/MonitorPanel.tsx +0 -122
- package/.forge/worktrees/pipeline-e7f78b7a/components/NewSessionModal.tsx +0 -93
- package/.forge/worktrees/pipeline-e7f78b7a/components/NewTaskModal.tsx +0 -492
- package/.forge/worktrees/pipeline-e7f78b7a/components/PipelineEditor.tsx +0 -570
- package/.forge/worktrees/pipeline-e7f78b7a/components/PipelineView.tsx +0 -1018
- package/.forge/worktrees/pipeline-e7f78b7a/components/PluginsPanel.tsx +0 -472
- package/.forge/worktrees/pipeline-e7f78b7a/components/ProjectDetail.tsx +0 -1618
- package/.forge/worktrees/pipeline-e7f78b7a/components/ProjectList.tsx +0 -108
- package/.forge/worktrees/pipeline-e7f78b7a/components/ProjectManager.tsx +0 -401
- package/.forge/worktrees/pipeline-e7f78b7a/components/SessionList.tsx +0 -74
- package/.forge/worktrees/pipeline-e7f78b7a/components/SessionView.tsx +0 -726
- package/.forge/worktrees/pipeline-e7f78b7a/components/SettingsModal.tsx +0 -1647
- package/.forge/worktrees/pipeline-e7f78b7a/components/SkillsPanel.tsx +0 -969
- package/.forge/worktrees/pipeline-e7f78b7a/components/StatusBar.tsx +0 -99
- package/.forge/worktrees/pipeline-e7f78b7a/components/TabBar.tsx +0 -46
- package/.forge/worktrees/pipeline-e7f78b7a/components/TaskBoard.tsx +0 -113
- package/.forge/worktrees/pipeline-e7f78b7a/components/TaskDetail.tsx +0 -372
- package/.forge/worktrees/pipeline-e7f78b7a/components/TerminalLauncher.tsx +0 -398
- package/.forge/worktrees/pipeline-e7f78b7a/components/TunnelToggle.tsx +0 -206
- package/.forge/worktrees/pipeline-e7f78b7a/components/UsagePanel.tsx +0 -207
- package/.forge/worktrees/pipeline-e7f78b7a/components/WebTerminal.tsx +0 -1683
- package/.forge/worktrees/pipeline-e7f78b7a/components/WorkspaceTree.tsx +0 -221
- package/.forge/worktrees/pipeline-e7f78b7a/components/WorkspaceView.tsx +0 -4048
- package/.forge/worktrees/pipeline-e7f78b7a/dev-test.sh +0 -5
- package/.forge/worktrees/pipeline-e7f78b7a/docs/Forge_Memory_Layer_Design.docx +0 -0
- package/.forge/worktrees/pipeline-e7f78b7a/docs/Forge_Strategy_Research_2026.docx +0 -0
- package/.forge/worktrees/pipeline-e7f78b7a/docs/LOCAL-DEPLOY.md +0 -144
- package/.forge/worktrees/pipeline-e7f78b7a/docs/roadmap-multi-agent-workflow.md +0 -330
- package/.forge/worktrees/pipeline-e7f78b7a/forge-logo.png +0 -0
- package/.forge/worktrees/pipeline-e7f78b7a/forge-logo.svg +0 -106
- package/.forge/worktrees/pipeline-e7f78b7a/hooks/useSidebarResize.ts +0 -52
- package/.forge/worktrees/pipeline-e7f78b7a/install.sh +0 -29
- package/.forge/worktrees/pipeline-e7f78b7a/instrumentation.ts +0 -35
- package/.forge/worktrees/pipeline-e7f78b7a/lib/agents/claude-adapter.ts +0 -104
- package/.forge/worktrees/pipeline-e7f78b7a/lib/agents/generic-adapter.ts +0 -64
- package/.forge/worktrees/pipeline-e7f78b7a/lib/agents/index.ts +0 -245
- package/.forge/worktrees/pipeline-e7f78b7a/lib/agents/types.ts +0 -70
- package/.forge/worktrees/pipeline-e7f78b7a/lib/artifacts.ts +0 -106
- package/.forge/worktrees/pipeline-e7f78b7a/lib/auth.ts +0 -62
- package/.forge/worktrees/pipeline-e7f78b7a/lib/builtin-plugins/docker.yaml +0 -70
- package/.forge/worktrees/pipeline-e7f78b7a/lib/builtin-plugins/http.yaml +0 -66
- package/.forge/worktrees/pipeline-e7f78b7a/lib/builtin-plugins/jenkins.yaml +0 -92
- package/.forge/worktrees/pipeline-e7f78b7a/lib/builtin-plugins/llm-vision.yaml +0 -85
- package/.forge/worktrees/pipeline-e7f78b7a/lib/builtin-plugins/playwright.yaml +0 -111
- package/.forge/worktrees/pipeline-e7f78b7a/lib/builtin-plugins/shell-command.yaml +0 -60
- package/.forge/worktrees/pipeline-e7f78b7a/lib/builtin-plugins/slack.yaml +0 -48
- package/.forge/worktrees/pipeline-e7f78b7a/lib/builtin-plugins/webhook.yaml +0 -56
- package/.forge/worktrees/pipeline-e7f78b7a/lib/claude-process.ts +0 -352
- package/.forge/worktrees/pipeline-e7f78b7a/lib/claude-sessions.ts +0 -266
- package/.forge/worktrees/pipeline-e7f78b7a/lib/claude-templates.ts +0 -227
- package/.forge/worktrees/pipeline-e7f78b7a/lib/cloudflared.ts +0 -424
- package/.forge/worktrees/pipeline-e7f78b7a/lib/crypto.ts +0 -67
- package/.forge/worktrees/pipeline-e7f78b7a/lib/delivery.ts +0 -787
- package/.forge/worktrees/pipeline-e7f78b7a/lib/dirs.ts +0 -99
- package/.forge/worktrees/pipeline-e7f78b7a/lib/flows.ts +0 -86
- package/.forge/worktrees/pipeline-e7f78b7a/lib/forge-mcp-server.ts +0 -717
- package/.forge/worktrees/pipeline-e7f78b7a/lib/forge-skills/forge-inbox.md +0 -38
- package/.forge/worktrees/pipeline-e7f78b7a/lib/forge-skills/forge-send.md +0 -47
- package/.forge/worktrees/pipeline-e7f78b7a/lib/forge-skills/forge-status.md +0 -32
- package/.forge/worktrees/pipeline-e7f78b7a/lib/forge-skills/forge-workspace-sync.md +0 -37
- package/.forge/worktrees/pipeline-e7f78b7a/lib/help-docs/00-overview.md +0 -40
- package/.forge/worktrees/pipeline-e7f78b7a/lib/help-docs/01-settings.md +0 -194
- package/.forge/worktrees/pipeline-e7f78b7a/lib/help-docs/02-telegram.md +0 -41
- package/.forge/worktrees/pipeline-e7f78b7a/lib/help-docs/03-tunnel.md +0 -31
- package/.forge/worktrees/pipeline-e7f78b7a/lib/help-docs/04-tasks.md +0 -52
- package/.forge/worktrees/pipeline-e7f78b7a/lib/help-docs/05-pipelines.md +0 -460
- package/.forge/worktrees/pipeline-e7f78b7a/lib/help-docs/06-skills.md +0 -43
- package/.forge/worktrees/pipeline-e7f78b7a/lib/help-docs/07-projects.md +0 -73
- package/.forge/worktrees/pipeline-e7f78b7a/lib/help-docs/08-rules.md +0 -53
- package/.forge/worktrees/pipeline-e7f78b7a/lib/help-docs/09-issue-autofix.md +0 -55
- package/.forge/worktrees/pipeline-e7f78b7a/lib/help-docs/10-troubleshooting.md +0 -89
- package/.forge/worktrees/pipeline-e7f78b7a/lib/help-docs/11-workspace.md +0 -810
- package/.forge/worktrees/pipeline-e7f78b7a/lib/help-docs/CLAUDE.md +0 -62
- package/.forge/worktrees/pipeline-e7f78b7a/lib/init.ts +0 -266
- package/.forge/worktrees/pipeline-e7f78b7a/lib/issue-scanner.ts +0 -298
- package/.forge/worktrees/pipeline-e7f78b7a/lib/logger.ts +0 -79
- package/.forge/worktrees/pipeline-e7f78b7a/lib/notifications.ts +0 -75
- package/.forge/worktrees/pipeline-e7f78b7a/lib/notify.ts +0 -108
- package/.forge/worktrees/pipeline-e7f78b7a/lib/password.ts +0 -97
- package/.forge/worktrees/pipeline-e7f78b7a/lib/pipeline-scheduler.ts +0 -373
- package/.forge/worktrees/pipeline-e7f78b7a/lib/pipeline.ts +0 -1441
- package/.forge/worktrees/pipeline-e7f78b7a/lib/plugins/executor.ts +0 -347
- package/.forge/worktrees/pipeline-e7f78b7a/lib/plugins/registry.ts +0 -228
- package/.forge/worktrees/pipeline-e7f78b7a/lib/plugins/types.ts +0 -103
- package/.forge/worktrees/pipeline-e7f78b7a/lib/project-sessions.ts +0 -53
- package/.forge/worktrees/pipeline-e7f78b7a/lib/projects.ts +0 -86
- package/.forge/worktrees/pipeline-e7f78b7a/lib/session-manager.ts +0 -156
- package/.forge/worktrees/pipeline-e7f78b7a/lib/session-utils.ts +0 -53
- package/.forge/worktrees/pipeline-e7f78b7a/lib/session-watcher.ts +0 -345
- package/.forge/worktrees/pipeline-e7f78b7a/lib/settings.ts +0 -195
- package/.forge/worktrees/pipeline-e7f78b7a/lib/skills.ts +0 -458
- package/.forge/worktrees/pipeline-e7f78b7a/lib/task-manager.ts +0 -949
- package/.forge/worktrees/pipeline-e7f78b7a/lib/telegram-bot.ts +0 -1477
- package/.forge/worktrees/pipeline-e7f78b7a/lib/telegram-standalone.ts +0 -83
- package/.forge/worktrees/pipeline-e7f78b7a/lib/terminal-server.ts +0 -70
- package/.forge/worktrees/pipeline-e7f78b7a/lib/terminal-standalone.ts +0 -421
- package/.forge/worktrees/pipeline-e7f78b7a/lib/usage-scanner.ts +0 -249
- package/.forge/worktrees/pipeline-e7f78b7a/lib/workspace/__tests__/state-machine.test.ts +0 -388
- package/.forge/worktrees/pipeline-e7f78b7a/lib/workspace/__tests__/workspace.test.ts +0 -311
- package/.forge/worktrees/pipeline-e7f78b7a/lib/workspace/agent-bus.ts +0 -416
- package/.forge/worktrees/pipeline-e7f78b7a/lib/workspace/agent-worker.ts +0 -655
- package/.forge/worktrees/pipeline-e7f78b7a/lib/workspace/backends/api-backend.ts +0 -262
- package/.forge/worktrees/pipeline-e7f78b7a/lib/workspace/backends/cli-backend.ts +0 -491
- package/.forge/worktrees/pipeline-e7f78b7a/lib/workspace/index.ts +0 -82
- package/.forge/worktrees/pipeline-e7f78b7a/lib/workspace/manager.ts +0 -136
- package/.forge/worktrees/pipeline-e7f78b7a/lib/workspace/orchestrator.ts +0 -3400
- package/.forge/worktrees/pipeline-e7f78b7a/lib/workspace/persistence.ts +0 -309
- package/.forge/worktrees/pipeline-e7f78b7a/lib/workspace/presets.ts +0 -649
- package/.forge/worktrees/pipeline-e7f78b7a/lib/workspace/requests.ts +0 -287
- package/.forge/worktrees/pipeline-e7f78b7a/lib/workspace/session-monitor.ts +0 -240
- package/.forge/worktrees/pipeline-e7f78b7a/lib/workspace/skill-installer.ts +0 -275
- package/.forge/worktrees/pipeline-e7f78b7a/lib/workspace/smith-memory.ts +0 -498
- package/.forge/worktrees/pipeline-e7f78b7a/lib/workspace/types.ts +0 -241
- package/.forge/worktrees/pipeline-e7f78b7a/lib/workspace/watch-manager.ts +0 -560
- package/.forge/worktrees/pipeline-e7f78b7a/lib/workspace-standalone.ts +0 -911
- package/.forge/worktrees/pipeline-e7f78b7a/middleware.ts +0 -51
- package/.forge/worktrees/pipeline-e7f78b7a/next.config.ts +0 -26
- package/.forge/worktrees/pipeline-e7f78b7a/package.json +0 -74
- package/.forge/worktrees/pipeline-e7f78b7a/pnpm-lock.yaml +0 -3719
- package/.forge/worktrees/pipeline-e7f78b7a/pnpm-workspace.yaml +0 -1
- package/.forge/worktrees/pipeline-e7f78b7a/postcss.config.mjs +0 -7
- package/.forge/worktrees/pipeline-e7f78b7a/publish.sh +0 -133
- package/.forge/worktrees/pipeline-e7f78b7a/scripts/bench/README.md +0 -66
- package/.forge/worktrees/pipeline-e7f78b7a/scripts/bench/results/.gitignore +0 -2
- package/.forge/worktrees/pipeline-e7f78b7a/scripts/bench/run.ts +0 -635
- package/.forge/worktrees/pipeline-e7f78b7a/scripts/bench/tasks/01-text-utils/task.md +0 -26
- package/.forge/worktrees/pipeline-e7f78b7a/scripts/bench/tasks/01-text-utils/validator.sh +0 -46
- package/.forge/worktrees/pipeline-e7f78b7a/scripts/bench/tasks/02-pagination/setup.sh +0 -19
- package/.forge/worktrees/pipeline-e7f78b7a/scripts/bench/tasks/02-pagination/task.md +0 -48
- package/.forge/worktrees/pipeline-e7f78b7a/scripts/bench/tasks/02-pagination/validator.sh +0 -69
- package/.forge/worktrees/pipeline-e7f78b7a/scripts/bench/tasks/03-bug-fix/setup.sh +0 -82
- package/.forge/worktrees/pipeline-e7f78b7a/scripts/bench/tasks/03-bug-fix/task.md +0 -30
- package/.forge/worktrees/pipeline-e7f78b7a/scripts/bench/tasks/03-bug-fix/validator.sh +0 -29
- package/.forge/worktrees/pipeline-e7f78b7a/scripts/verify-usage.ts +0 -178
- package/.forge/worktrees/pipeline-e7f78b7a/src/config/index.ts +0 -129
- package/.forge/worktrees/pipeline-e7f78b7a/src/core/db/database.ts +0 -259
- package/.forge/worktrees/pipeline-e7f78b7a/src/core/memory/strategy.ts +0 -32
- package/.forge/worktrees/pipeline-e7f78b7a/src/core/providers/chat.ts +0 -65
- package/.forge/worktrees/pipeline-e7f78b7a/src/core/providers/registry.ts +0 -60
- package/.forge/worktrees/pipeline-e7f78b7a/src/core/session/manager.ts +0 -190
- package/.forge/worktrees/pipeline-e7f78b7a/src/types/index.ts +0 -129
- package/.forge/worktrees/pipeline-e7f78b7a/start.sh +0 -31
- package/.forge/worktrees/pipeline-e7f78b7a/templates/smith-lead.json +0 -45
- package/.forge/worktrees/pipeline-e7f78b7a/tsconfig.json +0 -42
- package/.forge/worktrees/pipeline-e97c13c7/CLAUDE.md +0 -86
- package/.forge/worktrees/pipeline-e97c13c7/README.md +0 -136
- package/.forge/worktrees/pipeline-e97c13c7/RELEASE_NOTES.md +0 -11
- package/.forge/worktrees/pipeline-e97c13c7/app/api/agents/route.ts +0 -17
- package/.forge/worktrees/pipeline-e97c13c7/app/api/auth/[...nextauth]/route.ts +0 -3
- package/.forge/worktrees/pipeline-e97c13c7/app/api/auth/verify/route.ts +0 -46
- package/.forge/worktrees/pipeline-e97c13c7/app/api/claude/[id]/route.ts +0 -31
- package/.forge/worktrees/pipeline-e97c13c7/app/api/claude/[id]/stream/route.ts +0 -63
- package/.forge/worktrees/pipeline-e97c13c7/app/api/claude/route.ts +0 -28
- package/.forge/worktrees/pipeline-e97c13c7/app/api/claude-sessions/[projectName]/entries/route.ts +0 -23
- package/.forge/worktrees/pipeline-e97c13c7/app/api/claude-sessions/[projectName]/live/route.ts +0 -72
- package/.forge/worktrees/pipeline-e97c13c7/app/api/claude-sessions/[projectName]/route.ts +0 -37
- package/.forge/worktrees/pipeline-e97c13c7/app/api/claude-sessions/sync/route.ts +0 -17
- package/.forge/worktrees/pipeline-e97c13c7/app/api/claude-templates/route.ts +0 -145
- package/.forge/worktrees/pipeline-e97c13c7/app/api/code/route.ts +0 -299
- package/.forge/worktrees/pipeline-e97c13c7/app/api/delivery/[id]/route.ts +0 -62
- package/.forge/worktrees/pipeline-e97c13c7/app/api/delivery/route.ts +0 -40
- package/.forge/worktrees/pipeline-e97c13c7/app/api/detect-cli/route.ts +0 -46
- package/.forge/worktrees/pipeline-e97c13c7/app/api/docs/route.ts +0 -176
- package/.forge/worktrees/pipeline-e97c13c7/app/api/docs/sessions/route.ts +0 -54
- package/.forge/worktrees/pipeline-e97c13c7/app/api/favorites/route.ts +0 -26
- package/.forge/worktrees/pipeline-e97c13c7/app/api/flows/route.ts +0 -6
- package/.forge/worktrees/pipeline-e97c13c7/app/api/flows/run/route.ts +0 -19
- package/.forge/worktrees/pipeline-e97c13c7/app/api/git/route.ts +0 -149
- package/.forge/worktrees/pipeline-e97c13c7/app/api/help/route.ts +0 -84
- package/.forge/worktrees/pipeline-e97c13c7/app/api/issue-scanner/route.ts +0 -116
- package/.forge/worktrees/pipeline-e97c13c7/app/api/logs/route.ts +0 -100
- package/.forge/worktrees/pipeline-e97c13c7/app/api/mobile-chat/route.ts +0 -115
- package/.forge/worktrees/pipeline-e97c13c7/app/api/monitor/route.ts +0 -74
- package/.forge/worktrees/pipeline-e97c13c7/app/api/notifications/route.ts +0 -42
- package/.forge/worktrees/pipeline-e97c13c7/app/api/notify/test/route.ts +0 -33
- package/.forge/worktrees/pipeline-e97c13c7/app/api/online/route.ts +0 -40
- package/.forge/worktrees/pipeline-e97c13c7/app/api/pipelines/[id]/route.ts +0 -41
- package/.forge/worktrees/pipeline-e97c13c7/app/api/pipelines/route.ts +0 -90
- package/.forge/worktrees/pipeline-e97c13c7/app/api/plugins/route.ts +0 -75
- package/.forge/worktrees/pipeline-e97c13c7/app/api/preview/[...path]/route.ts +0 -64
- package/.forge/worktrees/pipeline-e97c13c7/app/api/preview/route.ts +0 -156
- package/.forge/worktrees/pipeline-e97c13c7/app/api/project-pipelines/route.ts +0 -91
- package/.forge/worktrees/pipeline-e97c13c7/app/api/project-sessions/route.ts +0 -61
- package/.forge/worktrees/pipeline-e97c13c7/app/api/projects/route.ts +0 -26
- package/.forge/worktrees/pipeline-e97c13c7/app/api/sessions/[id]/chat/route.ts +0 -64
- package/.forge/worktrees/pipeline-e97c13c7/app/api/sessions/[id]/messages/route.ts +0 -9
- package/.forge/worktrees/pipeline-e97c13c7/app/api/sessions/[id]/route.ts +0 -17
- package/.forge/worktrees/pipeline-e97c13c7/app/api/sessions/route.ts +0 -20
- package/.forge/worktrees/pipeline-e97c13c7/app/api/settings/route.ts +0 -64
- package/.forge/worktrees/pipeline-e97c13c7/app/api/skills/local/route.ts +0 -228
- package/.forge/worktrees/pipeline-e97c13c7/app/api/skills/route.ts +0 -182
- package/.forge/worktrees/pipeline-e97c13c7/app/api/smith-templates/route.ts +0 -81
- package/.forge/worktrees/pipeline-e97c13c7/app/api/status/route.ts +0 -12
- package/.forge/worktrees/pipeline-e97c13c7/app/api/tabs/route.ts +0 -25
- package/.forge/worktrees/pipeline-e97c13c7/app/api/tasks/[id]/route.ts +0 -51
- package/.forge/worktrees/pipeline-e97c13c7/app/api/tasks/[id]/stream/route.ts +0 -77
- package/.forge/worktrees/pipeline-e97c13c7/app/api/tasks/link/route.ts +0 -37
- package/.forge/worktrees/pipeline-e97c13c7/app/api/tasks/route.ts +0 -44
- package/.forge/worktrees/pipeline-e97c13c7/app/api/tasks/session/route.ts +0 -14
- package/.forge/worktrees/pipeline-e97c13c7/app/api/telegram/route.ts +0 -23
- package/.forge/worktrees/pipeline-e97c13c7/app/api/templates/route.ts +0 -6
- package/.forge/worktrees/pipeline-e97c13c7/app/api/terminal-bell/route.ts +0 -35
- package/.forge/worktrees/pipeline-e97c13c7/app/api/terminal-cwd/route.ts +0 -19
- package/.forge/worktrees/pipeline-e97c13c7/app/api/terminal-state/route.ts +0 -15
- package/.forge/worktrees/pipeline-e97c13c7/app/api/tunnel/route.ts +0 -26
- package/.forge/worktrees/pipeline-e97c13c7/app/api/upgrade/route.ts +0 -43
- package/.forge/worktrees/pipeline-e97c13c7/app/api/usage/route.ts +0 -20
- package/.forge/worktrees/pipeline-e97c13c7/app/api/version/route.ts +0 -78
- package/.forge/worktrees/pipeline-e97c13c7/app/api/watchers/route.ts +0 -33
- package/.forge/worktrees/pipeline-e97c13c7/app/api/workspace/[id]/agents/route.ts +0 -35
- package/.forge/worktrees/pipeline-e97c13c7/app/api/workspace/[id]/memory/route.ts +0 -23
- package/.forge/worktrees/pipeline-e97c13c7/app/api/workspace/[id]/smith/route.ts +0 -22
- package/.forge/worktrees/pipeline-e97c13c7/app/api/workspace/[id]/stream/route.ts +0 -28
- package/.forge/worktrees/pipeline-e97c13c7/app/api/workspace/route.ts +0 -100
- package/.forge/worktrees/pipeline-e97c13c7/app/global-error.tsx +0 -21
- package/.forge/worktrees/pipeline-e97c13c7/app/globals.css +0 -52
- package/.forge/worktrees/pipeline-e97c13c7/app/icon.ico +0 -0
- package/.forge/worktrees/pipeline-e97c13c7/app/icon.png +0 -0
- package/.forge/worktrees/pipeline-e97c13c7/app/icon.svg +0 -106
- package/.forge/worktrees/pipeline-e97c13c7/app/layout.tsx +0 -17
- package/.forge/worktrees/pipeline-e97c13c7/app/login/LoginForm.tsx +0 -96
- package/.forge/worktrees/pipeline-e97c13c7/app/login/page.tsx +0 -10
- package/.forge/worktrees/pipeline-e97c13c7/app/mobile/page.tsx +0 -9
- package/.forge/worktrees/pipeline-e97c13c7/app/page.tsx +0 -21
- package/.forge/worktrees/pipeline-e97c13c7/bin/forge-server.mjs +0 -484
- package/.forge/worktrees/pipeline-e97c13c7/check-forge-status.sh +0 -71
- package/.forge/worktrees/pipeline-e97c13c7/cli/mw.ts +0 -579
- package/.forge/worktrees/pipeline-e97c13c7/components/BrowserPanel.tsx +0 -175
- package/.forge/worktrees/pipeline-e97c13c7/components/ChatPanel.tsx +0 -191
- package/.forge/worktrees/pipeline-e97c13c7/components/ClaudeTerminal.tsx +0 -267
- package/.forge/worktrees/pipeline-e97c13c7/components/CodeViewer.tsx +0 -787
- package/.forge/worktrees/pipeline-e97c13c7/components/ConversationEditor.tsx +0 -411
- package/.forge/worktrees/pipeline-e97c13c7/components/ConversationGraphView.tsx +0 -347
- package/.forge/worktrees/pipeline-e97c13c7/components/ConversationTerminalView.tsx +0 -303
- package/.forge/worktrees/pipeline-e97c13c7/components/Dashboard.tsx +0 -807
- package/.forge/worktrees/pipeline-e97c13c7/components/DashboardWrapper.tsx +0 -9
- package/.forge/worktrees/pipeline-e97c13c7/components/DeliveryFlowEditor.tsx +0 -491
- package/.forge/worktrees/pipeline-e97c13c7/components/DeliveryList.tsx +0 -230
- package/.forge/worktrees/pipeline-e97c13c7/components/DeliveryWorkspace.tsx +0 -589
- package/.forge/worktrees/pipeline-e97c13c7/components/DocTerminal.tsx +0 -187
- package/.forge/worktrees/pipeline-e97c13c7/components/DocsViewer.tsx +0 -574
- package/.forge/worktrees/pipeline-e97c13c7/components/HelpDialog.tsx +0 -169
- package/.forge/worktrees/pipeline-e97c13c7/components/HelpTerminal.tsx +0 -141
- package/.forge/worktrees/pipeline-e97c13c7/components/InlinePipelineView.tsx +0 -111
- package/.forge/worktrees/pipeline-e97c13c7/components/LogViewer.tsx +0 -194
- package/.forge/worktrees/pipeline-e97c13c7/components/MarkdownContent.tsx +0 -73
- package/.forge/worktrees/pipeline-e97c13c7/components/MobileView.tsx +0 -385
- package/.forge/worktrees/pipeline-e97c13c7/components/MonitorPanel.tsx +0 -122
- package/.forge/worktrees/pipeline-e97c13c7/components/NewSessionModal.tsx +0 -93
- package/.forge/worktrees/pipeline-e97c13c7/components/NewTaskModal.tsx +0 -492
- package/.forge/worktrees/pipeline-e97c13c7/components/PipelineEditor.tsx +0 -570
- package/.forge/worktrees/pipeline-e97c13c7/components/PipelineView.tsx +0 -1018
- package/.forge/worktrees/pipeline-e97c13c7/components/PluginsPanel.tsx +0 -472
- package/.forge/worktrees/pipeline-e97c13c7/components/ProjectDetail.tsx +0 -1618
- package/.forge/worktrees/pipeline-e97c13c7/components/ProjectList.tsx +0 -108
- package/.forge/worktrees/pipeline-e97c13c7/components/ProjectManager.tsx +0 -401
- package/.forge/worktrees/pipeline-e97c13c7/components/SessionList.tsx +0 -74
- package/.forge/worktrees/pipeline-e97c13c7/components/SessionView.tsx +0 -726
- package/.forge/worktrees/pipeline-e97c13c7/components/SettingsModal.tsx +0 -1647
- package/.forge/worktrees/pipeline-e97c13c7/components/SkillsPanel.tsx +0 -969
- package/.forge/worktrees/pipeline-e97c13c7/components/StatusBar.tsx +0 -99
- package/.forge/worktrees/pipeline-e97c13c7/components/TabBar.tsx +0 -46
- package/.forge/worktrees/pipeline-e97c13c7/components/TaskBoard.tsx +0 -113
- package/.forge/worktrees/pipeline-e97c13c7/components/TaskDetail.tsx +0 -372
- package/.forge/worktrees/pipeline-e97c13c7/components/TerminalLauncher.tsx +0 -398
- package/.forge/worktrees/pipeline-e97c13c7/components/TunnelToggle.tsx +0 -206
- package/.forge/worktrees/pipeline-e97c13c7/components/UsagePanel.tsx +0 -207
- package/.forge/worktrees/pipeline-e97c13c7/components/WebTerminal.tsx +0 -1683
- package/.forge/worktrees/pipeline-e97c13c7/components/WorkspaceTree.tsx +0 -221
- package/.forge/worktrees/pipeline-e97c13c7/components/WorkspaceView.tsx +0 -4048
- package/.forge/worktrees/pipeline-e97c13c7/dev-test.sh +0 -5
- package/.forge/worktrees/pipeline-e97c13c7/docs/Forge_Memory_Layer_Design.docx +0 -0
- package/.forge/worktrees/pipeline-e97c13c7/docs/Forge_Strategy_Research_2026.docx +0 -0
- package/.forge/worktrees/pipeline-e97c13c7/docs/LOCAL-DEPLOY.md +0 -144
- package/.forge/worktrees/pipeline-e97c13c7/docs/roadmap-multi-agent-workflow.md +0 -330
- package/.forge/worktrees/pipeline-e97c13c7/forge-logo.png +0 -0
- package/.forge/worktrees/pipeline-e97c13c7/forge-logo.svg +0 -106
- package/.forge/worktrees/pipeline-e97c13c7/hooks/useSidebarResize.ts +0 -52
- package/.forge/worktrees/pipeline-e97c13c7/install.sh +0 -29
- package/.forge/worktrees/pipeline-e97c13c7/instrumentation.ts +0 -35
- package/.forge/worktrees/pipeline-e97c13c7/lib/agents/claude-adapter.ts +0 -104
- package/.forge/worktrees/pipeline-e97c13c7/lib/agents/generic-adapter.ts +0 -64
- package/.forge/worktrees/pipeline-e97c13c7/lib/agents/index.ts +0 -245
- package/.forge/worktrees/pipeline-e97c13c7/lib/agents/types.ts +0 -70
- package/.forge/worktrees/pipeline-e97c13c7/lib/artifacts.ts +0 -106
- package/.forge/worktrees/pipeline-e97c13c7/lib/auth.ts +0 -62
- package/.forge/worktrees/pipeline-e97c13c7/lib/builtin-plugins/docker.yaml +0 -70
- package/.forge/worktrees/pipeline-e97c13c7/lib/builtin-plugins/http.yaml +0 -66
- package/.forge/worktrees/pipeline-e97c13c7/lib/builtin-plugins/jenkins.yaml +0 -92
- package/.forge/worktrees/pipeline-e97c13c7/lib/builtin-plugins/llm-vision.yaml +0 -85
- package/.forge/worktrees/pipeline-e97c13c7/lib/builtin-plugins/playwright.yaml +0 -111
- package/.forge/worktrees/pipeline-e97c13c7/lib/builtin-plugins/shell-command.yaml +0 -60
- package/.forge/worktrees/pipeline-e97c13c7/lib/builtin-plugins/slack.yaml +0 -48
- package/.forge/worktrees/pipeline-e97c13c7/lib/builtin-plugins/webhook.yaml +0 -56
- package/.forge/worktrees/pipeline-e97c13c7/lib/claude-process.ts +0 -352
- package/.forge/worktrees/pipeline-e97c13c7/lib/claude-sessions.ts +0 -266
- package/.forge/worktrees/pipeline-e97c13c7/lib/claude-templates.ts +0 -227
- package/.forge/worktrees/pipeline-e97c13c7/lib/cloudflared.ts +0 -424
- package/.forge/worktrees/pipeline-e97c13c7/lib/crypto.ts +0 -67
- package/.forge/worktrees/pipeline-e97c13c7/lib/delivery.ts +0 -787
- package/.forge/worktrees/pipeline-e97c13c7/lib/dirs.ts +0 -99
- package/.forge/worktrees/pipeline-e97c13c7/lib/flows.ts +0 -86
- package/.forge/worktrees/pipeline-e97c13c7/lib/forge-mcp-server.ts +0 -717
- package/.forge/worktrees/pipeline-e97c13c7/lib/forge-skills/forge-inbox.md +0 -38
- package/.forge/worktrees/pipeline-e97c13c7/lib/forge-skills/forge-send.md +0 -47
- package/.forge/worktrees/pipeline-e97c13c7/lib/forge-skills/forge-status.md +0 -32
- package/.forge/worktrees/pipeline-e97c13c7/lib/forge-skills/forge-workspace-sync.md +0 -37
- package/.forge/worktrees/pipeline-e97c13c7/lib/help-docs/00-overview.md +0 -40
- package/.forge/worktrees/pipeline-e97c13c7/lib/help-docs/01-settings.md +0 -194
- package/.forge/worktrees/pipeline-e97c13c7/lib/help-docs/02-telegram.md +0 -41
- package/.forge/worktrees/pipeline-e97c13c7/lib/help-docs/03-tunnel.md +0 -31
- package/.forge/worktrees/pipeline-e97c13c7/lib/help-docs/04-tasks.md +0 -52
- package/.forge/worktrees/pipeline-e97c13c7/lib/help-docs/05-pipelines.md +0 -460
- package/.forge/worktrees/pipeline-e97c13c7/lib/help-docs/06-skills.md +0 -43
- package/.forge/worktrees/pipeline-e97c13c7/lib/help-docs/07-projects.md +0 -73
- package/.forge/worktrees/pipeline-e97c13c7/lib/help-docs/08-rules.md +0 -53
- package/.forge/worktrees/pipeline-e97c13c7/lib/help-docs/09-issue-autofix.md +0 -55
- package/.forge/worktrees/pipeline-e97c13c7/lib/help-docs/10-troubleshooting.md +0 -89
- package/.forge/worktrees/pipeline-e97c13c7/lib/help-docs/11-workspace.md +0 -810
- package/.forge/worktrees/pipeline-e97c13c7/lib/help-docs/CLAUDE.md +0 -62
- package/.forge/worktrees/pipeline-e97c13c7/lib/init.ts +0 -266
- package/.forge/worktrees/pipeline-e97c13c7/lib/issue-scanner.ts +0 -298
- package/.forge/worktrees/pipeline-e97c13c7/lib/logger.ts +0 -79
- package/.forge/worktrees/pipeline-e97c13c7/lib/notifications.ts +0 -75
- package/.forge/worktrees/pipeline-e97c13c7/lib/notify.ts +0 -108
- package/.forge/worktrees/pipeline-e97c13c7/lib/password.ts +0 -97
- package/.forge/worktrees/pipeline-e97c13c7/lib/pipeline-scheduler.ts +0 -373
- package/.forge/worktrees/pipeline-e97c13c7/lib/pipeline.ts +0 -1438
- package/.forge/worktrees/pipeline-e97c13c7/lib/plugins/executor.ts +0 -347
- package/.forge/worktrees/pipeline-e97c13c7/lib/plugins/registry.ts +0 -228
- package/.forge/worktrees/pipeline-e97c13c7/lib/plugins/types.ts +0 -103
- package/.forge/worktrees/pipeline-e97c13c7/lib/project-sessions.ts +0 -53
- package/.forge/worktrees/pipeline-e97c13c7/lib/projects.ts +0 -86
- package/.forge/worktrees/pipeline-e97c13c7/lib/session-manager.ts +0 -156
- package/.forge/worktrees/pipeline-e97c13c7/lib/session-utils.ts +0 -53
- package/.forge/worktrees/pipeline-e97c13c7/lib/session-watcher.ts +0 -345
- package/.forge/worktrees/pipeline-e97c13c7/lib/settings.ts +0 -195
- package/.forge/worktrees/pipeline-e97c13c7/lib/skills.ts +0 -458
- package/.forge/worktrees/pipeline-e97c13c7/lib/task-manager.ts +0 -949
- package/.forge/worktrees/pipeline-e97c13c7/lib/telegram-bot.ts +0 -1477
- package/.forge/worktrees/pipeline-e97c13c7/lib/telegram-standalone.ts +0 -83
- package/.forge/worktrees/pipeline-e97c13c7/lib/terminal-server.ts +0 -70
- package/.forge/worktrees/pipeline-e97c13c7/lib/terminal-standalone.ts +0 -421
- package/.forge/worktrees/pipeline-e97c13c7/lib/usage-scanner.ts +0 -249
- package/.forge/worktrees/pipeline-e97c13c7/lib/workspace/__tests__/state-machine.test.ts +0 -388
- package/.forge/worktrees/pipeline-e97c13c7/lib/workspace/__tests__/workspace.test.ts +0 -311
- package/.forge/worktrees/pipeline-e97c13c7/lib/workspace/agent-bus.ts +0 -416
- package/.forge/worktrees/pipeline-e97c13c7/lib/workspace/agent-worker.ts +0 -655
- package/.forge/worktrees/pipeline-e97c13c7/lib/workspace/backends/api-backend.ts +0 -262
- package/.forge/worktrees/pipeline-e97c13c7/lib/workspace/backends/cli-backend.ts +0 -491
- package/.forge/worktrees/pipeline-e97c13c7/lib/workspace/index.ts +0 -82
- package/.forge/worktrees/pipeline-e97c13c7/lib/workspace/manager.ts +0 -136
- package/.forge/worktrees/pipeline-e97c13c7/lib/workspace/orchestrator.ts +0 -3400
- package/.forge/worktrees/pipeline-e97c13c7/lib/workspace/persistence.ts +0 -309
- package/.forge/worktrees/pipeline-e97c13c7/lib/workspace/presets.ts +0 -649
- package/.forge/worktrees/pipeline-e97c13c7/lib/workspace/requests.ts +0 -287
- package/.forge/worktrees/pipeline-e97c13c7/lib/workspace/session-monitor.ts +0 -240
- package/.forge/worktrees/pipeline-e97c13c7/lib/workspace/skill-installer.ts +0 -275
- package/.forge/worktrees/pipeline-e97c13c7/lib/workspace/smith-memory.ts +0 -498
- package/.forge/worktrees/pipeline-e97c13c7/lib/workspace/types.ts +0 -241
- package/.forge/worktrees/pipeline-e97c13c7/lib/workspace/watch-manager.ts +0 -560
- package/.forge/worktrees/pipeline-e97c13c7/lib/workspace-standalone.ts +0 -911
- package/.forge/worktrees/pipeline-e97c13c7/middleware.ts +0 -51
- package/.forge/worktrees/pipeline-e97c13c7/next.config.ts +0 -26
- package/.forge/worktrees/pipeline-e97c13c7/package.json +0 -74
- package/.forge/worktrees/pipeline-e97c13c7/pnpm-lock.yaml +0 -3719
- package/.forge/worktrees/pipeline-e97c13c7/pnpm-workspace.yaml +0 -1
- package/.forge/worktrees/pipeline-e97c13c7/postcss.config.mjs +0 -7
- package/.forge/worktrees/pipeline-e97c13c7/publish.sh +0 -133
- package/.forge/worktrees/pipeline-e97c13c7/scripts/bench/README.md +0 -66
- package/.forge/worktrees/pipeline-e97c13c7/scripts/bench/results/.gitignore +0 -2
- package/.forge/worktrees/pipeline-e97c13c7/scripts/bench/run.ts +0 -635
- package/.forge/worktrees/pipeline-e97c13c7/scripts/bench/tasks/01-text-utils/task.md +0 -26
- package/.forge/worktrees/pipeline-e97c13c7/scripts/bench/tasks/01-text-utils/validator.sh +0 -46
- package/.forge/worktrees/pipeline-e97c13c7/scripts/bench/tasks/02-pagination/setup.sh +0 -19
- package/.forge/worktrees/pipeline-e97c13c7/scripts/bench/tasks/02-pagination/task.md +0 -48
- package/.forge/worktrees/pipeline-e97c13c7/scripts/bench/tasks/02-pagination/validator.sh +0 -69
- package/.forge/worktrees/pipeline-e97c13c7/scripts/bench/tasks/03-bug-fix/setup.sh +0 -82
- package/.forge/worktrees/pipeline-e97c13c7/scripts/bench/tasks/03-bug-fix/task.md +0 -30
- package/.forge/worktrees/pipeline-e97c13c7/scripts/bench/tasks/03-bug-fix/validator.sh +0 -29
- package/.forge/worktrees/pipeline-e97c13c7/scripts/verify-usage.ts +0 -178
- package/.forge/worktrees/pipeline-e97c13c7/src/config/index.ts +0 -129
- package/.forge/worktrees/pipeline-e97c13c7/src/core/db/database.ts +0 -259
- package/.forge/worktrees/pipeline-e97c13c7/src/core/memory/strategy.ts +0 -32
- package/.forge/worktrees/pipeline-e97c13c7/src/core/providers/chat.ts +0 -65
- package/.forge/worktrees/pipeline-e97c13c7/src/core/providers/registry.ts +0 -60
- package/.forge/worktrees/pipeline-e97c13c7/src/core/session/manager.ts +0 -190
- package/.forge/worktrees/pipeline-e97c13c7/src/types/index.ts +0 -129
- package/.forge/worktrees/pipeline-e97c13c7/start.sh +0 -31
- package/.forge/worktrees/pipeline-e97c13c7/templates/smith-lead.json +0 -45
- package/.forge/worktrees/pipeline-e97c13c7/tsconfig.json +0 -42
- package/.forge/worktrees/pipeline-ecd7cb0f/CLAUDE.md +0 -86
- package/.forge/worktrees/pipeline-ecd7cb0f/README.md +0 -136
- package/.forge/worktrees/pipeline-ecd7cb0f/RELEASE_NOTES.md +0 -11
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/agents/route.ts +0 -17
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/auth/[...nextauth]/route.ts +0 -3
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/auth/verify/route.ts +0 -46
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/claude/[id]/route.ts +0 -31
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/claude/[id]/stream/route.ts +0 -63
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/claude/route.ts +0 -28
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/claude-sessions/[projectName]/entries/route.ts +0 -23
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/claude-sessions/[projectName]/live/route.ts +0 -72
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/claude-sessions/[projectName]/route.ts +0 -37
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/claude-sessions/sync/route.ts +0 -17
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/claude-templates/route.ts +0 -145
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/code/route.ts +0 -299
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/delivery/[id]/route.ts +0 -62
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/delivery/route.ts +0 -40
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/detect-cli/route.ts +0 -46
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/docs/route.ts +0 -176
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/docs/sessions/route.ts +0 -54
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/favorites/route.ts +0 -26
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/flows/route.ts +0 -6
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/flows/run/route.ts +0 -19
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/git/route.ts +0 -149
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/help/route.ts +0 -84
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/issue-scanner/route.ts +0 -116
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/logs/route.ts +0 -100
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/mobile-chat/route.ts +0 -115
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/monitor/route.ts +0 -74
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/notifications/route.ts +0 -42
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/notify/test/route.ts +0 -33
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/online/route.ts +0 -40
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/pipelines/[id]/route.ts +0 -41
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/pipelines/route.ts +0 -90
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/plugins/route.ts +0 -75
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/preview/[...path]/route.ts +0 -64
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/preview/route.ts +0 -156
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/project-pipelines/route.ts +0 -91
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/project-sessions/route.ts +0 -61
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/projects/route.ts +0 -26
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/sessions/[id]/chat/route.ts +0 -64
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/sessions/[id]/messages/route.ts +0 -9
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/sessions/[id]/route.ts +0 -17
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/sessions/route.ts +0 -20
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/settings/route.ts +0 -64
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/skills/local/route.ts +0 -228
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/skills/route.ts +0 -182
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/smith-templates/route.ts +0 -81
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/status/route.ts +0 -12
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/tabs/route.ts +0 -25
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/tasks/[id]/route.ts +0 -51
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/tasks/[id]/stream/route.ts +0 -77
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/tasks/link/route.ts +0 -37
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/tasks/route.ts +0 -44
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/tasks/session/route.ts +0 -14
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/telegram/route.ts +0 -23
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/templates/route.ts +0 -6
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/terminal-bell/route.ts +0 -35
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/terminal-cwd/route.ts +0 -19
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/terminal-state/route.ts +0 -15
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/tunnel/route.ts +0 -26
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/upgrade/route.ts +0 -43
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/usage/route.ts +0 -20
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/version/route.ts +0 -78
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/watchers/route.ts +0 -33
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/workspace/[id]/agents/route.ts +0 -35
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/workspace/[id]/memory/route.ts +0 -23
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/workspace/[id]/smith/route.ts +0 -22
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/workspace/[id]/stream/route.ts +0 -28
- package/.forge/worktrees/pipeline-ecd7cb0f/app/api/workspace/route.ts +0 -100
- package/.forge/worktrees/pipeline-ecd7cb0f/app/global-error.tsx +0 -21
- package/.forge/worktrees/pipeline-ecd7cb0f/app/globals.css +0 -52
- package/.forge/worktrees/pipeline-ecd7cb0f/app/icon.ico +0 -0
- package/.forge/worktrees/pipeline-ecd7cb0f/app/icon.png +0 -0
- package/.forge/worktrees/pipeline-ecd7cb0f/app/icon.svg +0 -106
- package/.forge/worktrees/pipeline-ecd7cb0f/app/layout.tsx +0 -17
- package/.forge/worktrees/pipeline-ecd7cb0f/app/login/LoginForm.tsx +0 -96
- package/.forge/worktrees/pipeline-ecd7cb0f/app/login/page.tsx +0 -10
- package/.forge/worktrees/pipeline-ecd7cb0f/app/mobile/page.tsx +0 -9
- package/.forge/worktrees/pipeline-ecd7cb0f/app/page.tsx +0 -21
- package/.forge/worktrees/pipeline-ecd7cb0f/bin/forge-server.mjs +0 -484
- package/.forge/worktrees/pipeline-ecd7cb0f/check-forge-status.sh +0 -71
- package/.forge/worktrees/pipeline-ecd7cb0f/cli/mw.ts +0 -579
- package/.forge/worktrees/pipeline-ecd7cb0f/components/BrowserPanel.tsx +0 -175
- package/.forge/worktrees/pipeline-ecd7cb0f/components/ChatPanel.tsx +0 -191
- package/.forge/worktrees/pipeline-ecd7cb0f/components/ClaudeTerminal.tsx +0 -267
- package/.forge/worktrees/pipeline-ecd7cb0f/components/CodeViewer.tsx +0 -787
- package/.forge/worktrees/pipeline-ecd7cb0f/components/ConversationEditor.tsx +0 -411
- package/.forge/worktrees/pipeline-ecd7cb0f/components/ConversationGraphView.tsx +0 -347
- package/.forge/worktrees/pipeline-ecd7cb0f/components/ConversationTerminalView.tsx +0 -303
- package/.forge/worktrees/pipeline-ecd7cb0f/components/Dashboard.tsx +0 -807
- package/.forge/worktrees/pipeline-ecd7cb0f/components/DashboardWrapper.tsx +0 -9
- package/.forge/worktrees/pipeline-ecd7cb0f/components/DeliveryFlowEditor.tsx +0 -491
- package/.forge/worktrees/pipeline-ecd7cb0f/components/DeliveryList.tsx +0 -230
- package/.forge/worktrees/pipeline-ecd7cb0f/components/DeliveryWorkspace.tsx +0 -589
- package/.forge/worktrees/pipeline-ecd7cb0f/components/DocTerminal.tsx +0 -187
- package/.forge/worktrees/pipeline-ecd7cb0f/components/DocsViewer.tsx +0 -574
- package/.forge/worktrees/pipeline-ecd7cb0f/components/HelpDialog.tsx +0 -169
- package/.forge/worktrees/pipeline-ecd7cb0f/components/HelpTerminal.tsx +0 -141
- package/.forge/worktrees/pipeline-ecd7cb0f/components/InlinePipelineView.tsx +0 -111
- package/.forge/worktrees/pipeline-ecd7cb0f/components/LogViewer.tsx +0 -194
- package/.forge/worktrees/pipeline-ecd7cb0f/components/MarkdownContent.tsx +0 -73
- package/.forge/worktrees/pipeline-ecd7cb0f/components/MobileView.tsx +0 -385
- package/.forge/worktrees/pipeline-ecd7cb0f/components/MonitorPanel.tsx +0 -122
- package/.forge/worktrees/pipeline-ecd7cb0f/components/NewSessionModal.tsx +0 -93
- package/.forge/worktrees/pipeline-ecd7cb0f/components/NewTaskModal.tsx +0 -492
- package/.forge/worktrees/pipeline-ecd7cb0f/components/PipelineEditor.tsx +0 -570
- package/.forge/worktrees/pipeline-ecd7cb0f/components/PipelineView.tsx +0 -1018
- package/.forge/worktrees/pipeline-ecd7cb0f/components/PluginsPanel.tsx +0 -472
- package/.forge/worktrees/pipeline-ecd7cb0f/components/ProjectDetail.tsx +0 -1618
- package/.forge/worktrees/pipeline-ecd7cb0f/components/ProjectList.tsx +0 -108
- package/.forge/worktrees/pipeline-ecd7cb0f/components/ProjectManager.tsx +0 -401
- package/.forge/worktrees/pipeline-ecd7cb0f/components/SessionList.tsx +0 -74
- package/.forge/worktrees/pipeline-ecd7cb0f/components/SessionView.tsx +0 -726
- package/.forge/worktrees/pipeline-ecd7cb0f/components/SettingsModal.tsx +0 -1647
- package/.forge/worktrees/pipeline-ecd7cb0f/components/SkillsPanel.tsx +0 -969
- package/.forge/worktrees/pipeline-ecd7cb0f/components/StatusBar.tsx +0 -99
- package/.forge/worktrees/pipeline-ecd7cb0f/components/TabBar.tsx +0 -46
- package/.forge/worktrees/pipeline-ecd7cb0f/components/TaskBoard.tsx +0 -113
- package/.forge/worktrees/pipeline-ecd7cb0f/components/TaskDetail.tsx +0 -372
- package/.forge/worktrees/pipeline-ecd7cb0f/components/TerminalLauncher.tsx +0 -398
- package/.forge/worktrees/pipeline-ecd7cb0f/components/TunnelToggle.tsx +0 -206
- package/.forge/worktrees/pipeline-ecd7cb0f/components/UsagePanel.tsx +0 -207
- package/.forge/worktrees/pipeline-ecd7cb0f/components/WebTerminal.tsx +0 -1683
- package/.forge/worktrees/pipeline-ecd7cb0f/components/WorkspaceTree.tsx +0 -221
- package/.forge/worktrees/pipeline-ecd7cb0f/components/WorkspaceView.tsx +0 -4048
- package/.forge/worktrees/pipeline-ecd7cb0f/dev-test.sh +0 -5
- package/.forge/worktrees/pipeline-ecd7cb0f/docs/Forge_Memory_Layer_Design.docx +0 -0
- package/.forge/worktrees/pipeline-ecd7cb0f/docs/Forge_Strategy_Research_2026.docx +0 -0
- package/.forge/worktrees/pipeline-ecd7cb0f/docs/LOCAL-DEPLOY.md +0 -144
- package/.forge/worktrees/pipeline-ecd7cb0f/docs/roadmap-multi-agent-workflow.md +0 -330
- package/.forge/worktrees/pipeline-ecd7cb0f/forge-logo.png +0 -0
- package/.forge/worktrees/pipeline-ecd7cb0f/forge-logo.svg +0 -106
- package/.forge/worktrees/pipeline-ecd7cb0f/hooks/useSidebarResize.ts +0 -52
- package/.forge/worktrees/pipeline-ecd7cb0f/install.sh +0 -29
- package/.forge/worktrees/pipeline-ecd7cb0f/instrumentation.ts +0 -35
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/agents/claude-adapter.ts +0 -104
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/agents/generic-adapter.ts +0 -64
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/agents/index.ts +0 -245
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/agents/types.ts +0 -70
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/artifacts.ts +0 -106
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/auth.ts +0 -62
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/builtin-plugins/docker.yaml +0 -70
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/builtin-plugins/http.yaml +0 -66
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/builtin-plugins/jenkins.yaml +0 -92
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/builtin-plugins/llm-vision.yaml +0 -85
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/builtin-plugins/playwright.yaml +0 -111
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/builtin-plugins/shell-command.yaml +0 -60
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/builtin-plugins/slack.yaml +0 -48
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/builtin-plugins/webhook.yaml +0 -56
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/claude-process.ts +0 -352
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/claude-sessions.ts +0 -266
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/claude-templates.ts +0 -227
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/cloudflared.ts +0 -424
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/crypto.ts +0 -67
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/delivery.ts +0 -787
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/dirs.ts +0 -99
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/flows.ts +0 -86
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/forge-mcp-server.ts +0 -717
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/forge-skills/forge-inbox.md +0 -38
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/forge-skills/forge-send.md +0 -47
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/forge-skills/forge-status.md +0 -32
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/forge-skills/forge-workspace-sync.md +0 -37
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/help-docs/00-overview.md +0 -40
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/help-docs/01-settings.md +0 -194
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/help-docs/02-telegram.md +0 -41
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/help-docs/03-tunnel.md +0 -31
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/help-docs/04-tasks.md +0 -52
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/help-docs/05-pipelines.md +0 -460
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/help-docs/06-skills.md +0 -43
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/help-docs/07-projects.md +0 -73
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/help-docs/08-rules.md +0 -53
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/help-docs/09-issue-autofix.md +0 -55
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/help-docs/10-troubleshooting.md +0 -89
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/help-docs/11-workspace.md +0 -810
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/help-docs/CLAUDE.md +0 -62
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/init.ts +0 -266
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/issue-scanner.ts +0 -298
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/logger.ts +0 -79
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/notifications.ts +0 -75
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/notify.ts +0 -108
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/password.ts +0 -97
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/pipeline-scheduler.ts +0 -373
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/pipeline.ts +0 -1441
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/plugins/executor.ts +0 -347
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/plugins/registry.ts +0 -228
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/plugins/types.ts +0 -103
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/project-sessions.ts +0 -53
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/projects.ts +0 -86
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/session-manager.ts +0 -156
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/session-utils.ts +0 -53
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/session-watcher.ts +0 -345
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/settings.ts +0 -195
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/skills.ts +0 -458
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/task-manager.ts +0 -949
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/telegram-bot.ts +0 -1477
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/telegram-standalone.ts +0 -83
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/terminal-server.ts +0 -70
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/terminal-standalone.ts +0 -421
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/usage-scanner.ts +0 -249
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/workspace/__tests__/state-machine.test.ts +0 -388
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/workspace/__tests__/workspace.test.ts +0 -311
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/workspace/agent-bus.ts +0 -416
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/workspace/agent-worker.ts +0 -655
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/workspace/backends/api-backend.ts +0 -262
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/workspace/backends/cli-backend.ts +0 -491
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/workspace/index.ts +0 -82
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/workspace/manager.ts +0 -136
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/workspace/orchestrator.ts +0 -3400
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/workspace/persistence.ts +0 -309
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/workspace/presets.ts +0 -649
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/workspace/requests.ts +0 -287
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/workspace/session-monitor.ts +0 -240
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/workspace/skill-installer.ts +0 -275
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/workspace/smith-memory.ts +0 -498
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/workspace/types.ts +0 -241
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/workspace/watch-manager.ts +0 -560
- package/.forge/worktrees/pipeline-ecd7cb0f/lib/workspace-standalone.ts +0 -911
- package/.forge/worktrees/pipeline-ecd7cb0f/middleware.ts +0 -51
- package/.forge/worktrees/pipeline-ecd7cb0f/next.config.ts +0 -26
- package/.forge/worktrees/pipeline-ecd7cb0f/package.json +0 -74
- package/.forge/worktrees/pipeline-ecd7cb0f/pnpm-lock.yaml +0 -3719
- package/.forge/worktrees/pipeline-ecd7cb0f/pnpm-workspace.yaml +0 -1
- package/.forge/worktrees/pipeline-ecd7cb0f/postcss.config.mjs +0 -7
- package/.forge/worktrees/pipeline-ecd7cb0f/publish.sh +0 -133
- package/.forge/worktrees/pipeline-ecd7cb0f/scripts/bench/README.md +0 -66
- package/.forge/worktrees/pipeline-ecd7cb0f/scripts/bench/results/.gitignore +0 -2
- package/.forge/worktrees/pipeline-ecd7cb0f/scripts/bench/run.ts +0 -635
- package/.forge/worktrees/pipeline-ecd7cb0f/scripts/bench/tasks/01-text-utils/task.md +0 -26
- package/.forge/worktrees/pipeline-ecd7cb0f/scripts/bench/tasks/01-text-utils/validator.sh +0 -46
- package/.forge/worktrees/pipeline-ecd7cb0f/scripts/bench/tasks/02-pagination/setup.sh +0 -19
- package/.forge/worktrees/pipeline-ecd7cb0f/scripts/bench/tasks/02-pagination/task.md +0 -48
- package/.forge/worktrees/pipeline-ecd7cb0f/scripts/bench/tasks/02-pagination/validator.sh +0 -69
- package/.forge/worktrees/pipeline-ecd7cb0f/scripts/bench/tasks/03-bug-fix/setup.sh +0 -82
- package/.forge/worktrees/pipeline-ecd7cb0f/scripts/bench/tasks/03-bug-fix/task.md +0 -30
- package/.forge/worktrees/pipeline-ecd7cb0f/scripts/bench/tasks/03-bug-fix/validator.sh +0 -29
- package/.forge/worktrees/pipeline-ecd7cb0f/scripts/verify-usage.ts +0 -178
- package/.forge/worktrees/pipeline-ecd7cb0f/src/config/index.ts +0 -129
- package/.forge/worktrees/pipeline-ecd7cb0f/src/core/db/database.ts +0 -259
- package/.forge/worktrees/pipeline-ecd7cb0f/src/core/memory/strategy.ts +0 -32
- package/.forge/worktrees/pipeline-ecd7cb0f/src/core/providers/chat.ts +0 -65
- package/.forge/worktrees/pipeline-ecd7cb0f/src/core/providers/registry.ts +0 -60
- package/.forge/worktrees/pipeline-ecd7cb0f/src/core/session/manager.ts +0 -190
- package/.forge/worktrees/pipeline-ecd7cb0f/src/types/index.ts +0 -129
- package/.forge/worktrees/pipeline-ecd7cb0f/start.sh +0 -31
- package/.forge/worktrees/pipeline-ecd7cb0f/templates/smith-lead.json +0 -45
- package/.forge/worktrees/pipeline-ecd7cb0f/tsconfig.json +0 -42
- package/qa/.forge/agent-context.json +0 -6
- package/qa/.forge/mcp.json +0 -8
|
@@ -1,1683 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import { useState, useEffect, useRef, useCallback, memo, useImperativeHandle, forwardRef } from 'react';
|
|
4
|
-
import { TerminalSessionPickerLazy, fetchProjectSessions } from './TerminalLauncher';
|
|
5
|
-
import { Terminal } from '@xterm/xterm';
|
|
6
|
-
import { FitAddon } from '@xterm/addon-fit';
|
|
7
|
-
import { WebglAddon } from '@xterm/addon-webgl';
|
|
8
|
-
import { Unicode11Addon } from '@xterm/addon-unicode11';
|
|
9
|
-
import { SearchAddon } from '@xterm/addon-search';
|
|
10
|
-
import '@xterm/xterm/css/xterm.css';
|
|
11
|
-
|
|
12
|
-
// ─── Imperative API for parent components ────────────────────
|
|
13
|
-
|
|
14
|
-
export interface WebTerminalHandle {
|
|
15
|
-
openSessionInTerminal: (sessionId: string, projectPath: string) => void;
|
|
16
|
-
openProjectTerminal: (projectPath: string, projectName: string, agentId?: string, resumeMode?: boolean, sessionId?: string, profileEnv?: Record<string, string>) => void;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export interface WebTerminalProps {
|
|
20
|
-
onActiveSession?: (sessionName: string | null) => void;
|
|
21
|
-
onCodeOpenChange?: (open: boolean) => void;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
// ─── Types ───────────────────────────────────────────────────
|
|
25
|
-
|
|
26
|
-
interface TmuxSession {
|
|
27
|
-
name: string;
|
|
28
|
-
created: string;
|
|
29
|
-
attached: boolean;
|
|
30
|
-
windows: number;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
type SplitNode =
|
|
34
|
-
| { type: 'terminal'; id: number; sessionName?: string; projectPath?: string }
|
|
35
|
-
| { type: 'split'; id: number; direction: 'horizontal' | 'vertical'; ratio: number; first: SplitNode; second: SplitNode };
|
|
36
|
-
|
|
37
|
-
interface TabState {
|
|
38
|
-
id: number;
|
|
39
|
-
label: string;
|
|
40
|
-
tree: SplitNode;
|
|
41
|
-
ratios: Record<number, number>;
|
|
42
|
-
activeId: number;
|
|
43
|
-
projectPath?: string;
|
|
44
|
-
bellEnabled?: boolean;
|
|
45
|
-
agent?: string; // agent ID (e.g., 'claude', 'codex', 'aider')
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
// ─── Layout persistence ──────────────────────────────────────
|
|
49
|
-
|
|
50
|
-
function getWsUrl() {
|
|
51
|
-
if (typeof window === 'undefined') return `ws://localhost:${parseInt(process.env.TERMINAL_PORT || '8404')}`;
|
|
52
|
-
const wsProtocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
|
|
53
|
-
const wsHost = window.location.hostname;
|
|
54
|
-
// When accessed via tunnel or non-localhost, use the Next.js proxy path
|
|
55
|
-
if (wsHost !== 'localhost' && wsHost !== '127.0.0.1') {
|
|
56
|
-
return `${wsProtocol}//${window.location.host}/terminal-ws`;
|
|
57
|
-
}
|
|
58
|
-
// Terminal port = web port + 1
|
|
59
|
-
const webPort = parseInt(window.location.port) || 8403;
|
|
60
|
-
return `${wsProtocol}//${wsHost}:${webPort + 1}`;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/** Load shared terminal state via API (always available, doesn't depend on terminal WebSocket server) */
|
|
64
|
-
async function loadSharedState(): Promise<{ tabs: TabState[]; activeTabId: number; sessionLabels: Record<string, string> } | null> {
|
|
65
|
-
try {
|
|
66
|
-
const res = await fetch('/api/terminal-state');
|
|
67
|
-
if (!res.ok) return null;
|
|
68
|
-
const d = await res.json();
|
|
69
|
-
if (d && Array.isArray(d.tabs) && d.tabs.length > 0 && typeof d.activeTabId === 'number') {
|
|
70
|
-
return { tabs: d.tabs, activeTabId: d.activeTabId, sessionLabels: d.sessionLabels || {} };
|
|
71
|
-
}
|
|
72
|
-
return null;
|
|
73
|
-
} catch {
|
|
74
|
-
return null;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/** Save shared terminal state to server (fire-and-forget) */
|
|
79
|
-
function saveSharedState(tabs: TabState[], activeTabId: number, sessionLabels: Record<string, string>) {
|
|
80
|
-
try {
|
|
81
|
-
const ws = new WebSocket(getWsUrl());
|
|
82
|
-
ws.onopen = () => {
|
|
83
|
-
ws.send(JSON.stringify({ type: 'save-state', data: { tabs, activeTabId, sessionLabels } }));
|
|
84
|
-
setTimeout(() => ws.close(), 200);
|
|
85
|
-
};
|
|
86
|
-
ws.onerror = () => ws.close();
|
|
87
|
-
} catch {}
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
// ─── Split tree helpers ──────────────────────────────────────
|
|
91
|
-
|
|
92
|
-
let nextId = 1;
|
|
93
|
-
|
|
94
|
-
function initNextId(tree: SplitNode) {
|
|
95
|
-
if (tree.type === 'terminal') {
|
|
96
|
-
nextId = Math.max(nextId, tree.id + 1);
|
|
97
|
-
} else {
|
|
98
|
-
nextId = Math.max(nextId, tree.id + 1);
|
|
99
|
-
initNextId(tree.first);
|
|
100
|
-
initNextId(tree.second);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
function initNextIdFromTabs(tabs: TabState[]) {
|
|
105
|
-
for (const tab of tabs) {
|
|
106
|
-
nextId = Math.max(nextId, tab.id + 1);
|
|
107
|
-
initNextId(tab.tree);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
function makeTerminal(sessionName?: string, projectPath?: string): SplitNode {
|
|
112
|
-
return { type: 'terminal', id: nextId++, sessionName, projectPath };
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
function makeSplit(direction: 'horizontal' | 'vertical', first: SplitNode, second: SplitNode): SplitNode {
|
|
116
|
-
return { type: 'split', id: nextId++, direction, ratio: 0.5, first, second };
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
function splitNodeById(tree: SplitNode, targetId: number, direction: 'horizontal' | 'vertical'): SplitNode {
|
|
120
|
-
if (tree.type === 'terminal') {
|
|
121
|
-
if (tree.id === targetId) return makeSplit(direction, tree, makeTerminal());
|
|
122
|
-
return tree;
|
|
123
|
-
}
|
|
124
|
-
return { ...tree, first: splitNodeById(tree.first, targetId, direction), second: splitNodeById(tree.second, targetId, direction) };
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
function removeNodeById(tree: SplitNode, targetId: number): SplitNode | null {
|
|
128
|
-
if (tree.type === 'terminal') return tree.id === targetId ? null : tree;
|
|
129
|
-
if (tree.first.type === 'terminal' && tree.first.id === targetId) return tree.second;
|
|
130
|
-
if (tree.second.type === 'terminal' && tree.second.id === targetId) return tree.first;
|
|
131
|
-
const f = removeNodeById(tree.first, targetId);
|
|
132
|
-
if (f !== tree.first) return f ? { ...tree, first: f } : tree.second;
|
|
133
|
-
const s = removeNodeById(tree.second, targetId);
|
|
134
|
-
if (s !== tree.second) return s ? { ...tree, second: s } : tree.first;
|
|
135
|
-
return tree;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
function updateSessionName(tree: SplitNode, targetId: number, sessionName: string): SplitNode {
|
|
139
|
-
if (tree.type === 'terminal') {
|
|
140
|
-
return tree.id === targetId ? { ...tree, sessionName } : tree;
|
|
141
|
-
}
|
|
142
|
-
return { ...tree, first: updateSessionName(tree.first, targetId, sessionName), second: updateSessionName(tree.second, targetId, sessionName) };
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
function countTerminals(tree: SplitNode): number {
|
|
146
|
-
if (tree.type === 'terminal') return 1;
|
|
147
|
-
return countTerminals(tree.first) + countTerminals(tree.second);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
function firstTerminalId(n: SplitNode): number {
|
|
151
|
-
return n.type === 'terminal' ? n.id : firstTerminalId(n.first);
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
function collectPaneIds(tree: SplitNode): number[] {
|
|
155
|
-
if (tree.type === 'terminal') return [tree.id];
|
|
156
|
-
return [...collectPaneIds(tree.first), ...collectPaneIds(tree.second)];
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
function collectSessionNames(tree: SplitNode): string[] {
|
|
160
|
-
if (tree.type === 'terminal') return tree.sessionName ? [tree.sessionName] : [];
|
|
161
|
-
return [...collectSessionNames(tree.first), ...collectSessionNames(tree.second)];
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
function collectAllSessionNames(tabs: TabState[]): string[] {
|
|
165
|
-
return tabs.flatMap(t => collectSessionNames(t.tree));
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
// ─── Pending commands for new terminal panes ────────────────
|
|
169
|
-
|
|
170
|
-
const pendingCommands = new Map<number, string>();
|
|
171
|
-
|
|
172
|
-
// ─── Bell notification tracking ─────────────────────────────
|
|
173
|
-
|
|
174
|
-
const bellEnabledPanes = new Set<number>();
|
|
175
|
-
const bellPaneLabels = new Map<number, string>();
|
|
176
|
-
const bellLastFired = new Map<string, number>(); // tabLabel -> timestamp
|
|
177
|
-
const BELL_COOLDOWN = 120000; // 2min cooldown between bells
|
|
178
|
-
|
|
179
|
-
function fireBellNotification(paneId: number) {
|
|
180
|
-
const label = bellPaneLabels.get(paneId) || 'Terminal';
|
|
181
|
-
const now = Date.now();
|
|
182
|
-
const last = bellLastFired.get(label) || 0;
|
|
183
|
-
if (now - last < BELL_COOLDOWN) return;
|
|
184
|
-
bellLastFired.set(label, now);
|
|
185
|
-
|
|
186
|
-
// Browser notification
|
|
187
|
-
if (typeof Notification !== 'undefined' && Notification.permission === 'granted') {
|
|
188
|
-
new Notification('Forge — Terminal Idle', { body: `"${label}" appears to have finished.`, icon: '/icon.png' });
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
// Telegram + in-app via API
|
|
192
|
-
fetch('/api/terminal-bell', {
|
|
193
|
-
method: 'POST',
|
|
194
|
-
headers: { 'Content-Type': 'application/json' },
|
|
195
|
-
body: JSON.stringify({ tabLabel: label }),
|
|
196
|
-
}).catch(() => {});
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
// ─── Global drag lock — suppress terminal fit() during split drag ──
|
|
200
|
-
|
|
201
|
-
let globalDragging = false;
|
|
202
|
-
|
|
203
|
-
// ─── Main component ─────────────────────────────────────────
|
|
204
|
-
|
|
205
|
-
const WebTerminal = forwardRef<WebTerminalHandle, WebTerminalProps>(function WebTerminal({ onActiveSession, onCodeOpenChange }, ref) {
|
|
206
|
-
const [tabs, setTabs] = useState<TabState[]>(() => {
|
|
207
|
-
const tree = makeTerminal();
|
|
208
|
-
return [{ id: nextId++, label: 'Terminal 1', tree, ratios: {}, activeId: firstTerminalId(tree) }];
|
|
209
|
-
});
|
|
210
|
-
const [activeTabId, setActiveTabId] = useState(() => tabs[0]?.id || 1);
|
|
211
|
-
const [hydrated, setHydrated] = useState(false);
|
|
212
|
-
const stateLoadedRef = useRef(false);
|
|
213
|
-
const [tmuxSessions, setTmuxSessions] = useState<TmuxSession[]>([]);
|
|
214
|
-
const [showSessionPicker, setShowSessionPicker] = useState(false);
|
|
215
|
-
const [editingTabId, setEditingTabId] = useState<number | null>(null);
|
|
216
|
-
const [editingLabel, setEditingLabel] = useState('');
|
|
217
|
-
const [closeConfirm, setCloseConfirm] = useState<{ tabId: number; sessions: string[] } | null>(null);
|
|
218
|
-
const sessionLabelsRef = useRef<Record<string, string>>({});
|
|
219
|
-
const dragTabRef = useRef<number | null>(null);
|
|
220
|
-
const [refreshKeys, setRefreshKeys] = useState<Record<number, number>>({});
|
|
221
|
-
const [tabCodeOpen, setTabCodeOpen] = useState<Record<number, boolean>>({});
|
|
222
|
-
const [showNewTabModal, setShowNewTabModal] = useState(false);
|
|
223
|
-
const [vibePickerInfo, setVibePickerInfo] = useState<{ projectPath: string; projectName: string; agentId: string; profileEnv?: Record<string, string>; supportsSession: boolean; currentSessionId: string | null } | null>(null);
|
|
224
|
-
const [projectRoots, setProjectRoots] = useState<string[]>([]);
|
|
225
|
-
const [allProjects, setAllProjects] = useState<{ name: string; path: string; root: string }[]>([]);
|
|
226
|
-
const [skipPermissions, setSkipPermissions] = useState(false);
|
|
227
|
-
const [expandedRoot, setExpandedRoot] = useState<string | null>(null);
|
|
228
|
-
const [availableAgents, setAvailableAgents] = useState<{ id: string; name: string; detected?: boolean }[]>([]);
|
|
229
|
-
const [selectedAgent, setSelectedAgent] = useState<string>('');
|
|
230
|
-
const [defaultAgentId, setDefaultAgentId] = useState('claude');
|
|
231
|
-
|
|
232
|
-
// Restore shared state from server after mount
|
|
233
|
-
useEffect(() => {
|
|
234
|
-
// Fetch settings for skipPermissions
|
|
235
|
-
fetch('/api/settings').then(r => r.json())
|
|
236
|
-
.then((s: any) => { if (s.skipPermissions) setSkipPermissions(true); })
|
|
237
|
-
.catch(() => {});
|
|
238
|
-
// Load state + projects together, then patch missing projectPath
|
|
239
|
-
Promise.all([
|
|
240
|
-
loadSharedState(),
|
|
241
|
-
fetch('/api/projects').then(r => r.json()).catch(() => []),
|
|
242
|
-
]).then(([saved, projects]) => {
|
|
243
|
-
const projList: { name: string; path: string; root: string }[] = Array.isArray(projects) ? projects : [];
|
|
244
|
-
setAllProjects(projList);
|
|
245
|
-
setProjectRoots([...new Set(projList.map(p => p.root))]);
|
|
246
|
-
|
|
247
|
-
if (saved && saved.tabs.length > 0) {
|
|
248
|
-
initNextIdFromTabs(saved.tabs);
|
|
249
|
-
// Patch missing projectPath by matching tab label to project name
|
|
250
|
-
for (const tab of saved.tabs) {
|
|
251
|
-
if (!tab.projectPath) {
|
|
252
|
-
const match = projList.find(p => p.name.toLowerCase() === tab.label.toLowerCase());
|
|
253
|
-
if (match) {
|
|
254
|
-
tab.projectPath = match.path;
|
|
255
|
-
// Also patch tree node
|
|
256
|
-
if (tab.tree.type === 'terminal') tab.tree.projectPath = match.path;
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
setTabs(saved.tabs);
|
|
261
|
-
setActiveTabId(saved.activeTabId);
|
|
262
|
-
sessionLabelsRef.current = saved.sessionLabels || {};
|
|
263
|
-
stateLoadedRef.current = true;
|
|
264
|
-
}
|
|
265
|
-
setHydrated(true);
|
|
266
|
-
});
|
|
267
|
-
}, []);
|
|
268
|
-
|
|
269
|
-
// Persist to server on changes (debounced, only after hydration)
|
|
270
|
-
const saveTimerRef = useRef(0);
|
|
271
|
-
useEffect(() => {
|
|
272
|
-
if (!hydrated) return;
|
|
273
|
-
// Collect all active session names from current tabs
|
|
274
|
-
const activeSessionNames = new Set<string>();
|
|
275
|
-
for (const tab of tabs) {
|
|
276
|
-
for (const sn of collectSessionNames(tab.tree)) {
|
|
277
|
-
activeSessionNames.add(sn);
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
// Only keep labels for active sessions (clean up stale entries)
|
|
281
|
-
const labels: Record<string, string> = {};
|
|
282
|
-
for (const sn of activeSessionNames) {
|
|
283
|
-
labels[sn] = sessionLabelsRef.current[sn] || '';
|
|
284
|
-
}
|
|
285
|
-
for (const tab of tabs) {
|
|
286
|
-
for (const sn of collectSessionNames(tab.tree)) {
|
|
287
|
-
labels[sn] = tab.label;
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
sessionLabelsRef.current = labels;
|
|
291
|
-
// Debounced save to server
|
|
292
|
-
clearTimeout(saveTimerRef.current);
|
|
293
|
-
saveTimerRef.current = window.setTimeout(() => {
|
|
294
|
-
saveSharedState(tabs, activeTabId, labels);
|
|
295
|
-
}, 500);
|
|
296
|
-
}, [tabs, activeTabId, hydrated]);
|
|
297
|
-
|
|
298
|
-
const activeTab = tabs.find(t => t.id === activeTabId) || tabs[0];
|
|
299
|
-
|
|
300
|
-
// Notify parent when active terminal session or code state changes
|
|
301
|
-
useEffect(() => {
|
|
302
|
-
if (!activeTab) return;
|
|
303
|
-
if (onActiveSession) {
|
|
304
|
-
const sessions = collectSessionNames(activeTab.tree);
|
|
305
|
-
onActiveSession(sessions[0] || null);
|
|
306
|
-
}
|
|
307
|
-
if (onCodeOpenChange) {
|
|
308
|
-
onCodeOpenChange(tabCodeOpen[activeTab.id] ?? false);
|
|
309
|
-
}
|
|
310
|
-
}, [activeTabId, activeTab, onActiveSession, onCodeOpenChange, tabCodeOpen]);
|
|
311
|
-
|
|
312
|
-
// ─── Imperative handle for parent ─────────────────────
|
|
313
|
-
|
|
314
|
-
useImperativeHandle(ref, () => ({
|
|
315
|
-
async openSessionInTerminal(sessionId: string, projectPath: string) {
|
|
316
|
-
const tree = makeTerminal(undefined, projectPath);
|
|
317
|
-
const paneId = firstTerminalId(tree);
|
|
318
|
-
const sf = skipPermissions ? ' --dangerously-skip-permissions' : '';
|
|
319
|
-
let mcpFlag = '';
|
|
320
|
-
try { const { getMcpFlag } = await import('@/lib/session-utils'); mcpFlag = await getMcpFlag(projectPath); } catch {}
|
|
321
|
-
const cmd = `cd "${projectPath}" && claude --resume ${sessionId}${sf}${mcpFlag}\n`;
|
|
322
|
-
pendingCommands.set(paneId, cmd);
|
|
323
|
-
const projectName = projectPath.split('/').pop() || 'Terminal';
|
|
324
|
-
const newTab: TabState = {
|
|
325
|
-
id: nextId++,
|
|
326
|
-
label: projectName,
|
|
327
|
-
tree,
|
|
328
|
-
ratios: {},
|
|
329
|
-
activeId: paneId,
|
|
330
|
-
projectPath,
|
|
331
|
-
};
|
|
332
|
-
setTabs(prev => [...prev, newTab]);
|
|
333
|
-
setTimeout(() => setActiveTabId(newTab.id), 0);
|
|
334
|
-
},
|
|
335
|
-
async openProjectTerminal(projectPath: string, projectName: string, agentId?: string, resumeMode?: boolean, sessionId?: string, profileEnv?: Record<string, string>) {
|
|
336
|
-
const agent = agentId || 'claude';
|
|
337
|
-
|
|
338
|
-
// Resolve agent info via API — get correct cliCmd, cliType, supportsSession
|
|
339
|
-
let agentCmd = 'claude';
|
|
340
|
-
let supportsSession = true;
|
|
341
|
-
let agentSkipFlag = '';
|
|
342
|
-
try {
|
|
343
|
-
const resolveRes = await fetch(`/api/agents?resolve=${encodeURIComponent(agent)}`);
|
|
344
|
-
const info = await resolveRes.json();
|
|
345
|
-
agentCmd = info.cliCmd || 'claude';
|
|
346
|
-
supportsSession = info.supportsSession ?? true;
|
|
347
|
-
// Merge profile env if not already provided
|
|
348
|
-
if (!profileEnv && (info.env || info.model)) {
|
|
349
|
-
const pe: Record<string, string> = { ...(info.env || {}) };
|
|
350
|
-
if (info.model) pe.CLAUDE_MODEL = info.model;
|
|
351
|
-
profileEnv = pe;
|
|
352
|
-
}
|
|
353
|
-
// Get skip-permissions flag from agent config
|
|
354
|
-
const agentsRes = await fetch('/api/agents');
|
|
355
|
-
const agentsData = await agentsRes.json();
|
|
356
|
-
const agentConfig = (agentsData.agents || []).find((a: any) => a.id === agent);
|
|
357
|
-
agentSkipFlag = agentConfig?.skipPermissionsFlag || '';
|
|
358
|
-
} catch {}
|
|
359
|
-
|
|
360
|
-
// Resume flag: explicit sessionId > fixedSession > -c (only for session-capable agents)
|
|
361
|
-
let resumeFlag = '';
|
|
362
|
-
if (supportsSession) {
|
|
363
|
-
if (sessionId) resumeFlag = ` --resume ${sessionId}`;
|
|
364
|
-
else if (resumeMode) resumeFlag = ' -c';
|
|
365
|
-
// Override with fixedSession if no explicit sessionId
|
|
366
|
-
if (!sessionId && projectPath) {
|
|
367
|
-
try {
|
|
368
|
-
const { resolveFixedSession } = await import('@/lib/session-utils');
|
|
369
|
-
const fixedId = await resolveFixedSession(projectPath);
|
|
370
|
-
if (fixedId) resumeFlag = ` --resume ${fixedId}`;
|
|
371
|
-
} catch {}
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
// Model flag from profile
|
|
376
|
-
const modelFlag = profileEnv?.CLAUDE_MODEL ? ` --model ${profileEnv.CLAUDE_MODEL}` : '';
|
|
377
|
-
|
|
378
|
-
// Build env exports from profile (exclude CLAUDE_MODEL — passed via --model)
|
|
379
|
-
const envExports = profileEnv
|
|
380
|
-
? Object.entries(profileEnv)
|
|
381
|
-
.filter(([k]) => k !== 'CLAUDE_MODEL')
|
|
382
|
-
.map(([k, v]) => `export ${k}="${v}"`)
|
|
383
|
-
.join(' && ')
|
|
384
|
-
: '';
|
|
385
|
-
const envPrefix = envExports ? envExports + ' && ' : '';
|
|
386
|
-
|
|
387
|
-
// Skip-permissions flag
|
|
388
|
-
let sf = '';
|
|
389
|
-
if (skipPermissions) {
|
|
390
|
-
sf = agentSkipFlag ? ` ${agentSkipFlag}` : (agentCmd === 'claude' ? ' --dangerously-skip-permissions' : '');
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
// MCP config for claude-code agents
|
|
394
|
-
let mcpFlag = '';
|
|
395
|
-
if (agentCmd === 'claude' && projectPath) {
|
|
396
|
-
try { const { getMcpFlag } = await import('@/lib/session-utils'); mcpFlag = await getMcpFlag(projectPath); } catch {}
|
|
397
|
-
}
|
|
398
|
-
|
|
399
|
-
let targetTabId: number | null = null;
|
|
400
|
-
|
|
401
|
-
setTabs(prev => {
|
|
402
|
-
// Reuse existing tab only if same project AND same agent
|
|
403
|
-
const existing = prev.find(t => t.projectPath === projectPath && (!t.agent || t.agent === agent));
|
|
404
|
-
if (existing) {
|
|
405
|
-
targetTabId = existing.id;
|
|
406
|
-
return prev;
|
|
407
|
-
}
|
|
408
|
-
const tree = makeTerminal(undefined, projectPath);
|
|
409
|
-
const paneId = firstTerminalId(tree);
|
|
410
|
-
pendingCommands.set(paneId, `${envPrefix}cd "${projectPath}" && ${agentCmd}${resumeFlag}${modelFlag}${sf}${mcpFlag}\n`);
|
|
411
|
-
const newTab: TabState = {
|
|
412
|
-
id: nextId++,
|
|
413
|
-
label: agent !== 'claude' ? `${projectName} (${agentCmd})` : projectName,
|
|
414
|
-
tree,
|
|
415
|
-
ratios: {},
|
|
416
|
-
activeId: paneId,
|
|
417
|
-
projectPath,
|
|
418
|
-
agent,
|
|
419
|
-
};
|
|
420
|
-
targetTabId = newTab.id;
|
|
421
|
-
return [...prev, newTab];
|
|
422
|
-
});
|
|
423
|
-
|
|
424
|
-
// Set active tab after React processes the state update
|
|
425
|
-
setTimeout(() => {
|
|
426
|
-
if (targetTabId !== null) setActiveTabId(targetTabId);
|
|
427
|
-
}, 0);
|
|
428
|
-
},
|
|
429
|
-
}), [skipPermissions]);
|
|
430
|
-
|
|
431
|
-
// ─── Tab operations ───────────────────────────────────
|
|
432
|
-
|
|
433
|
-
const addTab = useCallback((projectPath?: string) => {
|
|
434
|
-
const tree = makeTerminal(undefined, projectPath);
|
|
435
|
-
const tabNum = tabs.length + 1;
|
|
436
|
-
const label = projectPath ? projectPath.split('/').pop() || `Terminal ${tabNum}` : `Terminal ${tabNum}`;
|
|
437
|
-
const newTab: TabState = { id: nextId++, label, tree, ratios: {}, activeId: firstTerminalId(tree), projectPath };
|
|
438
|
-
setTabs(prev => [...prev, newTab]);
|
|
439
|
-
setActiveTabId(newTab.id);
|
|
440
|
-
}, [tabs.length]);
|
|
441
|
-
|
|
442
|
-
const removeTab = useCallback((tabId: number) => {
|
|
443
|
-
setTabs(prev => {
|
|
444
|
-
if (prev.length <= 1) return prev;
|
|
445
|
-
const filtered = prev.filter(t => t.id !== tabId);
|
|
446
|
-
// Also fix activeTabId if needed
|
|
447
|
-
setActiveTabId(curActive => {
|
|
448
|
-
if (curActive === tabId) {
|
|
449
|
-
const idx = prev.findIndex(t => t.id === tabId);
|
|
450
|
-
const next = prev[idx - 1] || prev[idx + 1];
|
|
451
|
-
return next?.id || prev[0]?.id || 0;
|
|
452
|
-
}
|
|
453
|
-
return curActive;
|
|
454
|
-
});
|
|
455
|
-
return filtered;
|
|
456
|
-
});
|
|
457
|
-
}, []);
|
|
458
|
-
|
|
459
|
-
const closeTab = useCallback((tabId: number) => {
|
|
460
|
-
setTabs(prev => {
|
|
461
|
-
const tab = prev.find(t => t.id === tabId);
|
|
462
|
-
if (!tab) return prev;
|
|
463
|
-
const sessions = collectSessionNames(tab.tree);
|
|
464
|
-
if (sessions.length > 0) {
|
|
465
|
-
setCloseConfirm({ tabId, sessions });
|
|
466
|
-
return prev; // don't remove yet, show dialog
|
|
467
|
-
}
|
|
468
|
-
// No sessions, just close directly
|
|
469
|
-
if (prev.length <= 1) return prev;
|
|
470
|
-
const filtered = prev.filter(t => t.id !== tabId);
|
|
471
|
-
setActiveTabId(curActive => {
|
|
472
|
-
if (curActive === tabId) {
|
|
473
|
-
const idx = prev.findIndex(t => t.id === tabId);
|
|
474
|
-
const next = prev[idx - 1] || prev[idx + 1];
|
|
475
|
-
return next?.id || prev[0]?.id || 0;
|
|
476
|
-
}
|
|
477
|
-
return curActive;
|
|
478
|
-
});
|
|
479
|
-
return filtered;
|
|
480
|
-
});
|
|
481
|
-
}, []);
|
|
482
|
-
|
|
483
|
-
const closeTabWithAction = useCallback((action: 'detach' | 'kill') => {
|
|
484
|
-
if (!closeConfirm) return;
|
|
485
|
-
const { tabId, sessions } = closeConfirm;
|
|
486
|
-
if (action === 'kill') {
|
|
487
|
-
for (const sn of sessions) {
|
|
488
|
-
const ws = new WebSocket(getWsUrl());
|
|
489
|
-
ws.onopen = () => {
|
|
490
|
-
ws.send(JSON.stringify({ type: 'kill', sessionName: sn }));
|
|
491
|
-
setTimeout(() => ws.close(), 500);
|
|
492
|
-
};
|
|
493
|
-
}
|
|
494
|
-
}
|
|
495
|
-
removeTab(tabId);
|
|
496
|
-
setCloseConfirm(null);
|
|
497
|
-
}, [closeConfirm, removeTab]);
|
|
498
|
-
|
|
499
|
-
const moveTab = useCallback((fromId: number, toId: number) => {
|
|
500
|
-
if (fromId === toId) return;
|
|
501
|
-
setTabs(prev => {
|
|
502
|
-
const fromIdx = prev.findIndex(t => t.id === fromId);
|
|
503
|
-
const toIdx = prev.findIndex(t => t.id === toId);
|
|
504
|
-
if (fromIdx < 0 || toIdx < 0) return prev;
|
|
505
|
-
const next = [...prev];
|
|
506
|
-
const [moved] = next.splice(fromIdx, 1);
|
|
507
|
-
next.splice(toIdx, 0, moved);
|
|
508
|
-
return next;
|
|
509
|
-
});
|
|
510
|
-
}, []);
|
|
511
|
-
|
|
512
|
-
const renameTab = useCallback((tabId: number, newLabel: string) => {
|
|
513
|
-
const label = newLabel.trim();
|
|
514
|
-
if (!label) return;
|
|
515
|
-
setTabs(prev => {
|
|
516
|
-
const tab = prev.find(t => t.id === tabId);
|
|
517
|
-
if (tab) {
|
|
518
|
-
const sessions = collectSessionNames(tab.tree);
|
|
519
|
-
for (const sn of sessions) {
|
|
520
|
-
sessionLabelsRef.current[sn] = label;
|
|
521
|
-
}
|
|
522
|
-
}
|
|
523
|
-
return prev.map(t => t.id === tabId ? { ...t, label } : t);
|
|
524
|
-
});
|
|
525
|
-
setEditingTabId(null);
|
|
526
|
-
}, []);
|
|
527
|
-
|
|
528
|
-
// ─── Update active tab's state ─────────────────────────
|
|
529
|
-
|
|
530
|
-
const updateActiveTab = useCallback((updater: (tab: TabState) => TabState) => {
|
|
531
|
-
setTabs(prev => prev.map(t => t.id === activeTabId ? updater(t) : t));
|
|
532
|
-
}, [activeTabId]);
|
|
533
|
-
|
|
534
|
-
const onSessionConnected = useCallback((paneId: number, sessionName: string) => {
|
|
535
|
-
stateLoadedRef.current = true; // Allow saving once a session is connected
|
|
536
|
-
setTabs(prev => prev.map(t => ({
|
|
537
|
-
...t,
|
|
538
|
-
tree: updateSessionName(t.tree, paneId, sessionName),
|
|
539
|
-
})));
|
|
540
|
-
}, []);
|
|
541
|
-
|
|
542
|
-
const refreshSessions = useCallback(() => {
|
|
543
|
-
// Use a short-lived WS to list sessions, with abort guard
|
|
544
|
-
let closed = false;
|
|
545
|
-
const ws = new WebSocket(getWsUrl());
|
|
546
|
-
const timeout = setTimeout(() => { closed = true; ws.close(); }, 3000);
|
|
547
|
-
ws.onopen = () => {
|
|
548
|
-
if (closed) return;
|
|
549
|
-
ws.send(JSON.stringify({ type: 'list' }));
|
|
550
|
-
};
|
|
551
|
-
ws.onmessage = (e) => {
|
|
552
|
-
clearTimeout(timeout);
|
|
553
|
-
try {
|
|
554
|
-
const msg = JSON.parse(e.data);
|
|
555
|
-
if (msg.type === 'sessions') setTmuxSessions(msg.sessions);
|
|
556
|
-
} catch {}
|
|
557
|
-
ws.close();
|
|
558
|
-
};
|
|
559
|
-
ws.onerror = () => { clearTimeout(timeout); ws.close(); };
|
|
560
|
-
}, []);
|
|
561
|
-
|
|
562
|
-
const onSplit = useCallback((dir: 'horizontal' | 'vertical') => {
|
|
563
|
-
if (!activeTab) return;
|
|
564
|
-
updateActiveTab(t => ({ ...t, tree: splitNodeById(t.tree, t.activeId, dir) }));
|
|
565
|
-
}, [activeTab, updateActiveTab]);
|
|
566
|
-
|
|
567
|
-
const onClosePane = useCallback(() => {
|
|
568
|
-
if (!activeTab) return;
|
|
569
|
-
updateActiveTab(t => {
|
|
570
|
-
if (countTerminals(t.tree) <= 1) return t;
|
|
571
|
-
const newTree = removeNodeById(t.tree, t.activeId) || t.tree;
|
|
572
|
-
return { ...t, tree: newTree, activeId: firstTerminalId(newTree) };
|
|
573
|
-
});
|
|
574
|
-
}, [activeTab, updateActiveTab]);
|
|
575
|
-
|
|
576
|
-
const closePaneById = useCallback((id: number) => {
|
|
577
|
-
updateActiveTab(t => {
|
|
578
|
-
if (countTerminals(t.tree) <= 1) return t;
|
|
579
|
-
const newTree = removeNodeById(t.tree, id) || t.tree;
|
|
580
|
-
const newActiveId = t.activeId === id ? firstTerminalId(newTree) : t.activeId;
|
|
581
|
-
return { ...t, tree: newTree, activeId: newActiveId };
|
|
582
|
-
});
|
|
583
|
-
}, [updateActiveTab]);
|
|
584
|
-
|
|
585
|
-
const setActiveId = useCallback((id: number) => {
|
|
586
|
-
updateActiveTab(t => ({ ...t, activeId: id }));
|
|
587
|
-
}, [updateActiveTab]);
|
|
588
|
-
|
|
589
|
-
const setRatios = useCallback((updater: React.SetStateAction<Record<number, number>>) => {
|
|
590
|
-
updateActiveTab(t => ({
|
|
591
|
-
...t,
|
|
592
|
-
ratios: typeof updater === 'function' ? updater(t.ratios) : updater,
|
|
593
|
-
}));
|
|
594
|
-
}, [updateActiveTab]);
|
|
595
|
-
|
|
596
|
-
const usedSessions = collectAllSessionNames(tabs);
|
|
597
|
-
|
|
598
|
-
// Toggle bell for a tab
|
|
599
|
-
const toggleBell = useCallback((tabId: number) => {
|
|
600
|
-
if (typeof Notification !== 'undefined' && Notification.permission === 'default') {
|
|
601
|
-
Notification.requestPermission();
|
|
602
|
-
}
|
|
603
|
-
setTabs(prev => prev.map(t => t.id === tabId ? { ...t, bellEnabled: !t.bellEnabled } : t));
|
|
604
|
-
}, []);
|
|
605
|
-
|
|
606
|
-
// Sync bell state to module-level sets for MemoTerminalPane to read
|
|
607
|
-
useEffect(() => {
|
|
608
|
-
bellEnabledPanes.clear();
|
|
609
|
-
bellPaneLabels.clear();
|
|
610
|
-
for (const tab of tabs) {
|
|
611
|
-
if (tab.bellEnabled) {
|
|
612
|
-
const paneIds = collectPaneIds(tab.tree);
|
|
613
|
-
for (const id of paneIds) {
|
|
614
|
-
bellEnabledPanes.add(id);
|
|
615
|
-
bellPaneLabels.set(id, tab.label);
|
|
616
|
-
}
|
|
617
|
-
}
|
|
618
|
-
}
|
|
619
|
-
}, [tabs]);
|
|
620
|
-
|
|
621
|
-
// Auto-refresh tmux sessions periodically to show detached count
|
|
622
|
-
useEffect(() => {
|
|
623
|
-
if (!hydrated) return;
|
|
624
|
-
refreshSessions();
|
|
625
|
-
const timer = setInterval(refreshSessions, 10000);
|
|
626
|
-
return () => clearInterval(timer);
|
|
627
|
-
}, [hydrated, refreshSessions]);
|
|
628
|
-
|
|
629
|
-
const detachedCount = tmuxSessions.filter(s => !usedSessions.includes(s.name)).length;
|
|
630
|
-
|
|
631
|
-
return (
|
|
632
|
-
<div className="h-full w-full flex-1 flex flex-col bg-[var(--term-bg)] overflow-hidden">
|
|
633
|
-
{/* Tab bar + toolbar */}
|
|
634
|
-
<div className="flex items-center bg-[var(--term-bar)] border-b border-[var(--term-border)] shrink-0">
|
|
635
|
-
{/* Tabs */}
|
|
636
|
-
<div className="flex items-center overflow-x-auto">
|
|
637
|
-
{tabs.map(tab => (
|
|
638
|
-
<div
|
|
639
|
-
key={tab.id}
|
|
640
|
-
draggable={editingTabId !== tab.id}
|
|
641
|
-
onDragStart={(e) => {
|
|
642
|
-
dragTabRef.current = tab.id;
|
|
643
|
-
e.dataTransfer.effectAllowed = 'move';
|
|
644
|
-
// Make drag image semi-transparent
|
|
645
|
-
if (e.currentTarget instanceof HTMLElement) {
|
|
646
|
-
e.dataTransfer.setDragImage(e.currentTarget, 0, 0);
|
|
647
|
-
}
|
|
648
|
-
}}
|
|
649
|
-
onDragOver={(e) => {
|
|
650
|
-
e.preventDefault();
|
|
651
|
-
e.dataTransfer.dropEffect = 'move';
|
|
652
|
-
}}
|
|
653
|
-
onDrop={(e) => {
|
|
654
|
-
e.preventDefault();
|
|
655
|
-
if (dragTabRef.current !== null) {
|
|
656
|
-
moveTab(dragTabRef.current, tab.id);
|
|
657
|
-
dragTabRef.current = null;
|
|
658
|
-
}
|
|
659
|
-
}}
|
|
660
|
-
onDragEnd={() => { dragTabRef.current = null; }}
|
|
661
|
-
className={`flex items-center gap-1 px-3 py-1 text-[11px] cursor-pointer border-r border-[var(--term-border)] select-none ${
|
|
662
|
-
tab.id === activeTabId
|
|
663
|
-
? 'bg-[var(--term-bg)] text-white'
|
|
664
|
-
: 'text-gray-500 hover:text-gray-300 hover:bg-[var(--term-bg)]/50'
|
|
665
|
-
}`}
|
|
666
|
-
onClick={() => setActiveTabId(tab.id)}
|
|
667
|
-
>
|
|
668
|
-
{editingTabId === tab.id ? (
|
|
669
|
-
<input
|
|
670
|
-
autoFocus
|
|
671
|
-
value={editingLabel}
|
|
672
|
-
onChange={(e) => setEditingLabel(e.target.value)}
|
|
673
|
-
onBlur={() => renameTab(tab.id, editingLabel)}
|
|
674
|
-
onKeyDown={(e) => {
|
|
675
|
-
if (e.key === 'Enter') renameTab(tab.id, editingLabel);
|
|
676
|
-
if (e.key === 'Escape') setEditingTabId(null);
|
|
677
|
-
}}
|
|
678
|
-
onClick={(e) => e.stopPropagation()}
|
|
679
|
-
className="bg-transparent border border-[var(--term-border)] rounded px-1 text-[11px] text-white outline-none w-20"
|
|
680
|
-
/>
|
|
681
|
-
) : (
|
|
682
|
-
<span
|
|
683
|
-
className="truncate max-w-[100px]"
|
|
684
|
-
onDoubleClick={(e) => {
|
|
685
|
-
e.stopPropagation();
|
|
686
|
-
setEditingTabId(tab.id);
|
|
687
|
-
setEditingLabel(tab.label);
|
|
688
|
-
}}
|
|
689
|
-
>
|
|
690
|
-
{tab.label}
|
|
691
|
-
</span>
|
|
692
|
-
)}
|
|
693
|
-
{tab.agent && tab.agent !== 'claude' && (
|
|
694
|
-
<span className="text-[8px] text-[var(--accent)] ml-0.5">{tab.agent}</span>
|
|
695
|
-
)}
|
|
696
|
-
<button
|
|
697
|
-
onClick={(e) => { e.stopPropagation(); toggleBell(tab.id); }}
|
|
698
|
-
className={`text-[10px] ml-1 ${tab.bellEnabled ? 'text-yellow-400' : 'text-gray-600 hover:text-gray-400'}`}
|
|
699
|
-
title={tab.bellEnabled ? 'Disable notification' : 'Enable notification when idle'}
|
|
700
|
-
>{tab.bellEnabled ? '🔔' : '🔕'}</button>
|
|
701
|
-
{tabs.length > 1 && (
|
|
702
|
-
<button
|
|
703
|
-
onClick={(e) => { e.stopPropagation(); closeTab(tab.id); }}
|
|
704
|
-
className="text-[9px] text-gray-600 hover:text-red-400 ml-1"
|
|
705
|
-
>
|
|
706
|
-
x
|
|
707
|
-
</button>
|
|
708
|
-
)}
|
|
709
|
-
</div>
|
|
710
|
-
))}
|
|
711
|
-
<button
|
|
712
|
-
onClick={() => {
|
|
713
|
-
setShowNewTabModal(true);
|
|
714
|
-
setSelectedAgent('');
|
|
715
|
-
// Refresh projects + agents when opening modal
|
|
716
|
-
fetch('/api/projects').then(r => r.json())
|
|
717
|
-
.then((p: { name: string; path: string; root: string }[]) => {
|
|
718
|
-
if (!Array.isArray(p)) return;
|
|
719
|
-
setAllProjects(p);
|
|
720
|
-
setProjectRoots([...new Set(p.map(proj => proj.root))]);
|
|
721
|
-
})
|
|
722
|
-
.catch(() => {});
|
|
723
|
-
fetch('/api/agents').then(r => r.json())
|
|
724
|
-
.then(data => {
|
|
725
|
-
setAvailableAgents((data.agents || []).filter((a: any) => a.enabled));
|
|
726
|
-
setDefaultAgentId(data.defaultAgent || 'claude');
|
|
727
|
-
})
|
|
728
|
-
.catch(() => {});
|
|
729
|
-
}}
|
|
730
|
-
className="px-2 py-1 text-[11px] text-gray-500 hover:text-white hover:bg-[var(--term-border)]"
|
|
731
|
-
title="New tab"
|
|
732
|
-
>
|
|
733
|
-
+
|
|
734
|
-
</button>
|
|
735
|
-
</div>
|
|
736
|
-
|
|
737
|
-
{/* Toolbar */}
|
|
738
|
-
<div className="flex items-center gap-1 px-2 ml-auto">
|
|
739
|
-
<span className="text-[9px] text-gray-600 mr-2">Shift+drag to copy</span>
|
|
740
|
-
<button onClick={() => onSplit('vertical')} className="text-[10px] px-2 py-0.5 text-gray-400 hover:text-white hover:bg-[var(--term-border)] rounded">
|
|
741
|
-
Split Right
|
|
742
|
-
</button>
|
|
743
|
-
<button onClick={() => onSplit('horizontal')} className="text-[10px] px-2 py-0.5 text-gray-400 hover:text-white hover:bg-[var(--term-border)] rounded">
|
|
744
|
-
Split Down
|
|
745
|
-
</button>
|
|
746
|
-
<button
|
|
747
|
-
onClick={() => { refreshSessions(); setShowSessionPicker(v => !v); }}
|
|
748
|
-
className={`text-[10px] px-2 py-0.5 rounded relative ${showSessionPicker ? 'text-white bg-[#7c5bf0]/30' : 'text-gray-400 hover:text-white hover:bg-[var(--term-border)]'}`}
|
|
749
|
-
>
|
|
750
|
-
Sessions
|
|
751
|
-
{detachedCount > 0 && (
|
|
752
|
-
<span className="ml-1 inline-flex items-center justify-center min-w-[14px] h-[14px] rounded-full bg-yellow-500/80 text-[8px] text-black font-bold px-1">
|
|
753
|
-
{detachedCount}
|
|
754
|
-
</span>
|
|
755
|
-
)}
|
|
756
|
-
</button>
|
|
757
|
-
<button
|
|
758
|
-
onClick={() => {
|
|
759
|
-
if (!activeTab) return;
|
|
760
|
-
setRefreshKeys(prev => ({ ...prev, [activeTab.activeId]: (prev[activeTab.activeId] || 0) + 1 }));
|
|
761
|
-
}}
|
|
762
|
-
className="text-[11px] px-3 py-1 text-black bg-yellow-400 hover:bg-yellow-300 rounded font-bold"
|
|
763
|
-
title="Refresh terminal (fix garbled display)"
|
|
764
|
-
>
|
|
765
|
-
Refresh
|
|
766
|
-
</button>
|
|
767
|
-
{onCodeOpenChange && activeTab && (
|
|
768
|
-
<button
|
|
769
|
-
onClick={() => {
|
|
770
|
-
const current = tabCodeOpen[activeTab.id] ?? false;
|
|
771
|
-
const next = !current;
|
|
772
|
-
setTabCodeOpen(prev => ({ ...prev, [activeTab.id]: next }));
|
|
773
|
-
onCodeOpenChange(next);
|
|
774
|
-
}}
|
|
775
|
-
className={`text-[11px] px-3 py-1 rounded font-bold ${(tabCodeOpen[activeTab.id] ?? false) ? 'text-white bg-red-500 hover:bg-red-400' : 'text-red-400 border border-red-500 hover:bg-red-500 hover:text-white'}`}
|
|
776
|
-
title={(tabCodeOpen[activeTab.id] ?? false) ? 'Hide code panel' : 'Show code panel'}
|
|
777
|
-
>
|
|
778
|
-
Code
|
|
779
|
-
</button>
|
|
780
|
-
)}
|
|
781
|
-
</div>
|
|
782
|
-
</div>
|
|
783
|
-
|
|
784
|
-
{/* Session management panel */}
|
|
785
|
-
{showSessionPicker && (
|
|
786
|
-
<div className="bg-[var(--term-bar)] border-b border-[var(--term-border)] px-3 py-2 shrink-0 max-h-48 overflow-y-auto">
|
|
787
|
-
<div className="flex items-center justify-between mb-2">
|
|
788
|
-
<span className="text-[10px] text-gray-400 font-semibold uppercase">Tmux Sessions</span>
|
|
789
|
-
<button
|
|
790
|
-
onClick={refreshSessions}
|
|
791
|
-
className="text-[9px] text-gray-500 hover:text-white"
|
|
792
|
-
>
|
|
793
|
-
Refresh
|
|
794
|
-
</button>
|
|
795
|
-
</div>
|
|
796
|
-
{tmuxSessions.length === 0 ? (
|
|
797
|
-
<p className="text-[10px] text-gray-500">No persistent sessions. New terminals auto-create tmux sessions.</p>
|
|
798
|
-
) : (
|
|
799
|
-
<table className="w-full text-[10px]">
|
|
800
|
-
<thead>
|
|
801
|
-
<tr className="text-gray-500 text-left border-b border-[var(--term-border)]">
|
|
802
|
-
<th className="py-1 pr-3 font-medium">Session</th>
|
|
803
|
-
<th className="py-1 pr-3 font-medium">Created</th>
|
|
804
|
-
<th className="py-1 pr-3 font-medium">Status</th>
|
|
805
|
-
<th className="py-1 font-medium text-right">Actions</th>
|
|
806
|
-
</tr>
|
|
807
|
-
</thead>
|
|
808
|
-
<tbody>
|
|
809
|
-
{tmuxSessions.map(s => {
|
|
810
|
-
const inUse = usedSessions.includes(s.name);
|
|
811
|
-
const savedLabel = sessionLabelsRef.current[s.name];
|
|
812
|
-
return (
|
|
813
|
-
<tr key={s.name} className="border-b border-[var(--term-border)]/50 hover:bg-[var(--term-bg)]">
|
|
814
|
-
<td className="py-1.5 pr-3 text-gray-300">
|
|
815
|
-
{savedLabel ? (
|
|
816
|
-
<><span>{savedLabel}</span> <span className="font-mono text-gray-600 text-[9px]">{s.name.replace('mw-', '')}</span></>
|
|
817
|
-
) : (
|
|
818
|
-
<span className="font-mono">{s.name.replace('mw-', '')}</span>
|
|
819
|
-
)}
|
|
820
|
-
</td>
|
|
821
|
-
<td className="py-1.5 pr-3 text-gray-500">{new Date(s.created).toLocaleString()}</td>
|
|
822
|
-
<td className="py-1.5 pr-3">
|
|
823
|
-
{inUse ? (
|
|
824
|
-
<span className="text-green-400">● connected</span>
|
|
825
|
-
) : (
|
|
826
|
-
<span className="text-yellow-500">○ detached</span>
|
|
827
|
-
)}
|
|
828
|
-
</td>
|
|
829
|
-
<td className="py-1.5 text-right space-x-2">
|
|
830
|
-
{!inUse && (
|
|
831
|
-
<button
|
|
832
|
-
onClick={() => {
|
|
833
|
-
// Open in a new tab, restore saved label if available
|
|
834
|
-
const tree = makeTerminal(s.name);
|
|
835
|
-
const label = sessionLabelsRef.current[s.name] || s.name.replace('mw-', '');
|
|
836
|
-
const newTab: TabState = { id: nextId++, label, tree, ratios: {}, activeId: firstTerminalId(tree) };
|
|
837
|
-
setTabs(prev => [...prev, newTab]);
|
|
838
|
-
setActiveTabId(newTab.id);
|
|
839
|
-
setShowSessionPicker(false);
|
|
840
|
-
}}
|
|
841
|
-
className="text-[#7c5bf0] hover:text-white"
|
|
842
|
-
>
|
|
843
|
-
Attach
|
|
844
|
-
</button>
|
|
845
|
-
)}
|
|
846
|
-
<button
|
|
847
|
-
onClick={() => {
|
|
848
|
-
if (!confirm(`Kill session ${s.name}?`)) return;
|
|
849
|
-
const ws = new WebSocket(getWsUrl());
|
|
850
|
-
ws.onopen = () => {
|
|
851
|
-
ws.send(JSON.stringify({ type: 'kill', sessionName: s.name }));
|
|
852
|
-
setTimeout(() => { ws.close(); refreshSessions(); }, 500);
|
|
853
|
-
};
|
|
854
|
-
}}
|
|
855
|
-
className="text-red-400/60 hover:text-red-400"
|
|
856
|
-
>
|
|
857
|
-
Kill
|
|
858
|
-
</button>
|
|
859
|
-
</td>
|
|
860
|
-
</tr>
|
|
861
|
-
);
|
|
862
|
-
})}
|
|
863
|
-
</tbody>
|
|
864
|
-
</table>
|
|
865
|
-
)}
|
|
866
|
-
</div>
|
|
867
|
-
)}
|
|
868
|
-
|
|
869
|
-
{/* New tab modal */}
|
|
870
|
-
{showNewTabModal && (
|
|
871
|
-
<div className="fixed inset-0 z-50 flex items-center justify-center bg-black/50" onClick={() => { setShowNewTabModal(false); setExpandedRoot(null); }}>
|
|
872
|
-
<div className="bg-[var(--term-bg)] border border-[var(--term-border)] rounded-lg shadow-xl w-[350px] max-h-[70vh] flex flex-col" onClick={e => e.stopPropagation()}>
|
|
873
|
-
<div className="px-4 py-3 border-b border-[var(--term-border)]">
|
|
874
|
-
<h3 className="text-sm font-semibold text-white">New Tab</h3>
|
|
875
|
-
</div>
|
|
876
|
-
<div className="flex-1 overflow-y-auto p-2">
|
|
877
|
-
{/* Plain terminal */}
|
|
878
|
-
<button
|
|
879
|
-
onClick={() => { addTab(); setShowNewTabModal(false); setExpandedRoot(null); }}
|
|
880
|
-
className="w-full text-left px-3 py-2 rounded hover:bg-[var(--term-border)] text-[12px] text-gray-300 flex items-center gap-2"
|
|
881
|
-
>
|
|
882
|
-
<span className="text-gray-500">▸</span> Terminal (no agent)
|
|
883
|
-
</button>
|
|
884
|
-
|
|
885
|
-
{/* Project roots */}
|
|
886
|
-
{projectRoots.length > 0 && (
|
|
887
|
-
<div className="mt-2 pt-2 border-t border-[var(--term-border)]">
|
|
888
|
-
<div className="px-3 py-1 text-[9px] text-gray-500 uppercase">Agent in Project</div>
|
|
889
|
-
{projectRoots.map(root => {
|
|
890
|
-
const rootName = root.split('/').pop() || root;
|
|
891
|
-
const isExpanded = expandedRoot === root;
|
|
892
|
-
const rootProjects = allProjects.filter(p => p.root === root);
|
|
893
|
-
return (
|
|
894
|
-
<div key={root}>
|
|
895
|
-
<button
|
|
896
|
-
onClick={() => setExpandedRoot(isExpanded ? null : root)}
|
|
897
|
-
className="w-full text-left px-3 py-2 rounded hover:bg-[var(--term-border)] text-[12px] text-gray-300 flex items-center gap-2"
|
|
898
|
-
>
|
|
899
|
-
<span className="text-gray-500 text-[10px] w-3">{isExpanded ? '▾' : '▸'}</span>
|
|
900
|
-
<span>{rootName}</span>
|
|
901
|
-
<span className="text-[9px] text-gray-600 ml-auto">{rootProjects.length}</span>
|
|
902
|
-
</button>
|
|
903
|
-
{isExpanded && (
|
|
904
|
-
<div className="ml-4">
|
|
905
|
-
{rootProjects.map(p => (
|
|
906
|
-
<div key={p.path} className="flex items-center gap-1 px-3 py-1.5 rounded hover:bg-[var(--term-border)]/50 text-[11px]" title={p.path}>
|
|
907
|
-
<span className="text-gray-600 text-[10px]">↳</span>
|
|
908
|
-
<span className="text-gray-300 truncate">{p.name}</span>
|
|
909
|
-
<AgentButtons
|
|
910
|
-
agents={availableAgents}
|
|
911
|
-
defaultAgentId={defaultAgentId}
|
|
912
|
-
onSelect={async (a) => {
|
|
913
|
-
setShowNewTabModal(false); setExpandedRoot(null);
|
|
914
|
-
try {
|
|
915
|
-
const resolveRes = await fetch(`/api/agents?resolve=${encodeURIComponent(a.id)}`);
|
|
916
|
-
const info = await resolveRes.json();
|
|
917
|
-
const profileEnv: Record<string, string> = { ...(info.env || {}) };
|
|
918
|
-
if (info.model) profileEnv.CLAUDE_MODEL = info.model;
|
|
919
|
-
let currentSessionId: string | null = null;
|
|
920
|
-
if (info.supportsSession) {
|
|
921
|
-
try {
|
|
922
|
-
const { resolveFixedSession } = await import('@/lib/session-utils');
|
|
923
|
-
currentSessionId = await resolveFixedSession(p.path) || null;
|
|
924
|
-
} catch {}
|
|
925
|
-
}
|
|
926
|
-
setVibePickerInfo({
|
|
927
|
-
projectPath: p.path, projectName: p.name, agentId: a.id,
|
|
928
|
-
profileEnv: Object.keys(profileEnv).length > 0 ? profileEnv : undefined,
|
|
929
|
-
supportsSession: info.supportsSession ?? true,
|
|
930
|
-
currentSessionId,
|
|
931
|
-
});
|
|
932
|
-
} catch {
|
|
933
|
-
// Fallback: open directly without picker
|
|
934
|
-
window.dispatchEvent(new CustomEvent('forge:open-terminal', {
|
|
935
|
-
detail: { projectPath: p.path, projectName: p.name, agentId: a.id },
|
|
936
|
-
}));
|
|
937
|
-
}
|
|
938
|
-
}}
|
|
939
|
-
/>
|
|
940
|
-
</div>
|
|
941
|
-
))}
|
|
942
|
-
{rootProjects.length === 0 && (
|
|
943
|
-
<div className="px-3 py-1.5 text-[10px] text-gray-600">No projects</div>
|
|
944
|
-
)}
|
|
945
|
-
</div>
|
|
946
|
-
)}
|
|
947
|
-
</div>
|
|
948
|
-
);
|
|
949
|
-
})}
|
|
950
|
-
</div>
|
|
951
|
-
)}
|
|
952
|
-
</div>
|
|
953
|
-
<div className="px-4 py-2 border-t border-[var(--term-border)]">
|
|
954
|
-
<button
|
|
955
|
-
onClick={() => { setShowNewTabModal(false); setExpandedRoot(null); }}
|
|
956
|
-
className="w-full text-center text-[11px] text-gray-500 hover:text-gray-300 py-1"
|
|
957
|
-
>
|
|
958
|
-
Cancel
|
|
959
|
-
</button>
|
|
960
|
-
</div>
|
|
961
|
-
</div>
|
|
962
|
-
</div>
|
|
963
|
-
)}
|
|
964
|
-
|
|
965
|
-
{/* Close confirmation dialog */}
|
|
966
|
-
{closeConfirm && (
|
|
967
|
-
<div className="fixed inset-0 z-50 flex items-center justify-center bg-black/50" onClick={() => setCloseConfirm(null)}>
|
|
968
|
-
<div className="bg-[var(--term-bg)] border border-[var(--term-border)] rounded-lg p-4 shadow-xl max-w-sm" onClick={(e) => e.stopPropagation()}>
|
|
969
|
-
<h3 className="text-sm font-semibold text-white mb-2">Close Tab</h3>
|
|
970
|
-
<p className="text-xs text-gray-400 mb-1">
|
|
971
|
-
This tab has {closeConfirm.sessions.length} active session{closeConfirm.sessions.length > 1 ? 's' : ''}:
|
|
972
|
-
</p>
|
|
973
|
-
<div className="text-[10px] text-gray-500 font-mono mb-3 space-y-0.5">
|
|
974
|
-
{closeConfirm.sessions.map(s => (
|
|
975
|
-
<div key={s}>• {s.replace('mw-', '')}</div>
|
|
976
|
-
))}
|
|
977
|
-
</div>
|
|
978
|
-
<div className="flex gap-2">
|
|
979
|
-
<button
|
|
980
|
-
onClick={() => closeTabWithAction('detach')}
|
|
981
|
-
className="flex-1 px-3 py-1.5 text-[11px] rounded bg-[#2a2a4a] text-gray-300 hover:bg-[#3a3a5a] hover:text-white"
|
|
982
|
-
>
|
|
983
|
-
Hide Tab
|
|
984
|
-
<span className="block text-[9px] text-gray-500 mt-0.5">Session keeps running</span>
|
|
985
|
-
</button>
|
|
986
|
-
<button
|
|
987
|
-
onClick={() => closeTabWithAction('kill')}
|
|
988
|
-
className="flex-1 px-3 py-1.5 text-[11px] rounded bg-red-500/20 text-red-400 hover:bg-red-500/30"
|
|
989
|
-
>
|
|
990
|
-
Kill Session
|
|
991
|
-
<span className="block text-[9px] text-red-400/60 mt-0.5">Permanently close</span>
|
|
992
|
-
</button>
|
|
993
|
-
</div>
|
|
994
|
-
<button
|
|
995
|
-
onClick={() => setCloseConfirm(null)}
|
|
996
|
-
className="w-full mt-2 px-3 py-1 text-[10px] text-gray-500 hover:text-gray-300"
|
|
997
|
-
>
|
|
998
|
-
Cancel
|
|
999
|
-
</button>
|
|
1000
|
-
</div>
|
|
1001
|
-
</div>
|
|
1002
|
-
)}
|
|
1003
|
-
|
|
1004
|
-
{/* VibeCoding Terminal Session Picker */}
|
|
1005
|
-
{vibePickerInfo && (
|
|
1006
|
-
<TerminalSessionPickerLazy
|
|
1007
|
-
agentLabel={vibePickerInfo.projectName}
|
|
1008
|
-
currentSessionId={vibePickerInfo.currentSessionId}
|
|
1009
|
-
supportsSession={vibePickerInfo.supportsSession}
|
|
1010
|
-
fetchSessions={() => fetchProjectSessions(vibePickerInfo.projectName)}
|
|
1011
|
-
onSelect={(sel) => {
|
|
1012
|
-
const info = vibePickerInfo;
|
|
1013
|
-
setVibePickerInfo(null);
|
|
1014
|
-
const detail: any = { projectPath: info.projectPath, projectName: info.projectName, agentId: info.agentId, profileEnv: info.profileEnv };
|
|
1015
|
-
if (sel.mode !== 'new') { detail.resumeMode = true; detail.sessionId = sel.sessionId; }
|
|
1016
|
-
window.dispatchEvent(new CustomEvent('forge:open-terminal', { detail }));
|
|
1017
|
-
}}
|
|
1018
|
-
onCancel={() => setVibePickerInfo(null)}
|
|
1019
|
-
/>
|
|
1020
|
-
)}
|
|
1021
|
-
|
|
1022
|
-
{/* Terminal panes — render all tabs, hide inactive */}
|
|
1023
|
-
{tabs.map(tab => (
|
|
1024
|
-
<div key={tab.id} className={`flex-1 min-h-0 ${tab.id === activeTabId ? '' : 'hidden'}`}>
|
|
1025
|
-
<PaneRenderer
|
|
1026
|
-
node={tab.tree}
|
|
1027
|
-
activeId={tab.activeId}
|
|
1028
|
-
onFocus={tab.id === activeTabId ? setActiveId : () => {}}
|
|
1029
|
-
ratios={tab.ratios}
|
|
1030
|
-
setRatios={tab.id === activeTabId ? setRatios : () => {}}
|
|
1031
|
-
onSessionConnected={onSessionConnected}
|
|
1032
|
-
refreshKeys={refreshKeys}
|
|
1033
|
-
skipPermissions={skipPermissions}
|
|
1034
|
-
canClose={countTerminals(tab.tree) > 1}
|
|
1035
|
-
onClosePane={tab.id === activeTabId ? closePaneById : undefined}
|
|
1036
|
-
/>
|
|
1037
|
-
</div>
|
|
1038
|
-
))}
|
|
1039
|
-
</div>
|
|
1040
|
-
);
|
|
1041
|
-
});
|
|
1042
|
-
|
|
1043
|
-
export default WebTerminal;
|
|
1044
|
-
|
|
1045
|
-
// ─── Pane renderer ───────────────────────────────────────────
|
|
1046
|
-
|
|
1047
|
-
// ─── Agent shortcut buttons (inline with project name) ──────
|
|
1048
|
-
|
|
1049
|
-
function AgentButtons({ agents, defaultAgentId, onSelect }: {
|
|
1050
|
-
agents: { id: string; name: string; detected?: boolean }[];
|
|
1051
|
-
defaultAgentId: string;
|
|
1052
|
-
onSelect: (agent: { id: string; name: string }) => void;
|
|
1053
|
-
}) {
|
|
1054
|
-
const [showMore, setShowMore] = useState(false);
|
|
1055
|
-
const MAX_INLINE = 3;
|
|
1056
|
-
|
|
1057
|
-
const getAbbr = (id: string) =>
|
|
1058
|
-
id === 'claude' ? 'C' : id === 'codex' ? 'X' : id === 'aider' ? 'A' : id.charAt(0).toUpperCase();
|
|
1059
|
-
|
|
1060
|
-
const btnClass = (id: string, detected?: boolean) => {
|
|
1061
|
-
if (detected === false) return 'w-5 h-5 flex items-center justify-center rounded text-[9px] font-bold bg-gray-800/50 text-gray-600 cursor-not-allowed';
|
|
1062
|
-
if (id === defaultAgentId) return 'w-5 h-5 flex items-center justify-center rounded text-[9px] font-bold bg-green-500/30 text-green-400 hover:bg-green-500 hover:text-white';
|
|
1063
|
-
return 'w-5 h-5 flex items-center justify-center rounded text-[9px] font-bold bg-green-900/30 text-green-300/70 hover:bg-green-700/50 hover:text-green-200';
|
|
1064
|
-
};
|
|
1065
|
-
|
|
1066
|
-
const inline = agents.slice(0, MAX_INLINE);
|
|
1067
|
-
const overflow = agents.slice(MAX_INLINE);
|
|
1068
|
-
|
|
1069
|
-
return (
|
|
1070
|
-
<div className="flex items-center gap-0.5 ml-auto shrink-0 relative">
|
|
1071
|
-
{inline.map(a => (
|
|
1072
|
-
<button
|
|
1073
|
-
key={a.id}
|
|
1074
|
-
title={a.detected === false ? `${a.name} (not installed)` : `Open with ${a.name}`}
|
|
1075
|
-
onClick={() => { if (a.detected !== false) onSelect(a); }}
|
|
1076
|
-
className={btnClass(a.id, a.detected)}
|
|
1077
|
-
>
|
|
1078
|
-
{getAbbr(a.id)}
|
|
1079
|
-
</button>
|
|
1080
|
-
))}
|
|
1081
|
-
{overflow.length > 0 && (
|
|
1082
|
-
<>
|
|
1083
|
-
<button
|
|
1084
|
-
title="More agents"
|
|
1085
|
-
onClick={(e) => { e.stopPropagation(); setShowMore(v => !v); }}
|
|
1086
|
-
className="w-5 h-5 flex items-center justify-center rounded text-[9px] bg-gray-700/50 text-gray-400 hover:bg-gray-600 hover:text-white"
|
|
1087
|
-
>…</button>
|
|
1088
|
-
{showMore && (
|
|
1089
|
-
<>
|
|
1090
|
-
<div className="fixed inset-0 z-40" onClick={() => setShowMore(false)} />
|
|
1091
|
-
<div className="absolute right-0 top-6 z-50 bg-[var(--term-bg)] border border-[var(--term-border)] rounded shadow-lg py-1 min-w-[120px]">
|
|
1092
|
-
{overflow.map(a => (
|
|
1093
|
-
<button
|
|
1094
|
-
key={a.id}
|
|
1095
|
-
onClick={() => { if (a.detected !== false) { setShowMore(false); onSelect(a); } }}
|
|
1096
|
-
className={`w-full text-left px-3 py-1 text-[10px] flex items-center gap-2 ${a.detected === false ? 'text-gray-600 cursor-not-allowed' : 'text-gray-300 hover:bg-[var(--term-border)]'}`}
|
|
1097
|
-
>
|
|
1098
|
-
<span className={btnClass(a.id, a.detected) + ' w-4 h-4 text-[8px]'}>{getAbbr(a.id)}</span>
|
|
1099
|
-
{a.name} {a.detected === false ? '(not installed)' : ''}
|
|
1100
|
-
</button>
|
|
1101
|
-
))}
|
|
1102
|
-
</div>
|
|
1103
|
-
</>
|
|
1104
|
-
)}
|
|
1105
|
-
</>
|
|
1106
|
-
)}
|
|
1107
|
-
</div>
|
|
1108
|
-
);
|
|
1109
|
-
}
|
|
1110
|
-
|
|
1111
|
-
function PaneRenderer({
|
|
1112
|
-
node, activeId, onFocus, ratios, setRatios, onSessionConnected, refreshKeys, skipPermissions, canClose, onClosePane,
|
|
1113
|
-
}: {
|
|
1114
|
-
node: SplitNode;
|
|
1115
|
-
activeId: number;
|
|
1116
|
-
onFocus: (id: number) => void;
|
|
1117
|
-
ratios: Record<number, number>;
|
|
1118
|
-
setRatios: React.Dispatch<React.SetStateAction<Record<number, number>>>;
|
|
1119
|
-
onSessionConnected: (paneId: number, sessionName: string) => void;
|
|
1120
|
-
refreshKeys: Record<number, number>;
|
|
1121
|
-
skipPermissions?: boolean;
|
|
1122
|
-
canClose?: boolean;
|
|
1123
|
-
onClosePane?: (id: number) => void;
|
|
1124
|
-
}) {
|
|
1125
|
-
if (node.type === 'terminal') {
|
|
1126
|
-
return (
|
|
1127
|
-
<div className={`h-full w-full relative group/pane ${activeId === node.id ? 'ring-1 ring-[#7c5bf0]/50 ring-inset' : ''}`} onMouseDown={() => onFocus(node.id)}>
|
|
1128
|
-
<MemoTerminalPane key={`${node.id}-${refreshKeys[node.id] || 0}`} id={node.id} sessionName={node.sessionName} projectPath={node.projectPath} skipPermissions={skipPermissions} onSessionConnected={onSessionConnected} />
|
|
1129
|
-
{canClose && onClosePane && (
|
|
1130
|
-
<button
|
|
1131
|
-
onClick={(e) => { e.stopPropagation(); if (confirm('Close this pane?')) onClosePane(node.id); }}
|
|
1132
|
-
className="absolute top-1.5 right-1.5 z-10 w-6 h-6 flex items-center justify-center rounded bg-red-500/80 text-white hover:bg-red-500 opacity-0 group-hover/pane:opacity-100 transition-opacity text-xs font-bold shadow"
|
|
1133
|
-
title="Close this pane"
|
|
1134
|
-
>✕</button>
|
|
1135
|
-
)}
|
|
1136
|
-
</div>
|
|
1137
|
-
);
|
|
1138
|
-
}
|
|
1139
|
-
|
|
1140
|
-
const ratio = ratios[node.id] ?? node.ratio;
|
|
1141
|
-
|
|
1142
|
-
return (
|
|
1143
|
-
<DraggableSplit splitId={node.id} direction={node.direction} ratio={ratio} setRatios={setRatios}>
|
|
1144
|
-
<PaneRenderer node={node.first} activeId={activeId} onFocus={onFocus} ratios={ratios} setRatios={setRatios} onSessionConnected={onSessionConnected} refreshKeys={refreshKeys} skipPermissions={skipPermissions} canClose={canClose} onClosePane={onClosePane} />
|
|
1145
|
-
<PaneRenderer node={node.second} activeId={activeId} onFocus={onFocus} ratios={ratios} setRatios={setRatios} onSessionConnected={onSessionConnected} refreshKeys={refreshKeys} skipPermissions={skipPermissions} canClose={canClose} onClosePane={onClosePane} />
|
|
1146
|
-
</DraggableSplit>
|
|
1147
|
-
);
|
|
1148
|
-
}
|
|
1149
|
-
|
|
1150
|
-
// ─── Draggable split — uses pointer capture for reliable drag ─
|
|
1151
|
-
|
|
1152
|
-
function DraggableSplit({
|
|
1153
|
-
splitId, direction, ratio, setRatios, children,
|
|
1154
|
-
}: {
|
|
1155
|
-
splitId: number;
|
|
1156
|
-
direction: 'horizontal' | 'vertical';
|
|
1157
|
-
ratio: number;
|
|
1158
|
-
setRatios: React.Dispatch<React.SetStateAction<Record<number, number>>>;
|
|
1159
|
-
children: [React.ReactNode, React.ReactNode];
|
|
1160
|
-
}) {
|
|
1161
|
-
const containerRef = useRef<HTMLDivElement>(null);
|
|
1162
|
-
const firstRef = useRef<HTMLDivElement>(null);
|
|
1163
|
-
const secondRef = useRef<HTMLDivElement>(null);
|
|
1164
|
-
const dividerRef = useRef<HTMLDivElement>(null);
|
|
1165
|
-
const draggingRef = useRef(false);
|
|
1166
|
-
const ratioRef = useRef(ratio);
|
|
1167
|
-
const isVert = direction === 'vertical';
|
|
1168
|
-
|
|
1169
|
-
// Keep ref in sync — avoid re-registering listeners on every ratio change
|
|
1170
|
-
ratioRef.current = ratio;
|
|
1171
|
-
|
|
1172
|
-
// Apply ratio to DOM (only when not dragging — drag updates imperatively)
|
|
1173
|
-
useEffect(() => {
|
|
1174
|
-
if (draggingRef.current) return;
|
|
1175
|
-
if (!firstRef.current || !secondRef.current) return;
|
|
1176
|
-
const prop = isVert ? 'width' : 'height';
|
|
1177
|
-
firstRef.current.style[prop] = `calc(${ratio * 100}% - 4px)`;
|
|
1178
|
-
secondRef.current.style[prop] = `calc(${(1 - ratio) * 100}% - 4px)`;
|
|
1179
|
-
}, [ratio, isVert]);
|
|
1180
|
-
|
|
1181
|
-
// Pointer capture drag — registered once, uses refs
|
|
1182
|
-
useEffect(() => {
|
|
1183
|
-
const divider = dividerRef.current;
|
|
1184
|
-
const container = containerRef.current;
|
|
1185
|
-
const first = firstRef.current;
|
|
1186
|
-
const second = secondRef.current;
|
|
1187
|
-
if (!divider || !container || !first || !second) return;
|
|
1188
|
-
|
|
1189
|
-
const vertical = isVert;
|
|
1190
|
-
const prop = vertical ? 'width' : 'height';
|
|
1191
|
-
let lastRatio = ratioRef.current;
|
|
1192
|
-
|
|
1193
|
-
const onPointerDown = (e: PointerEvent) => {
|
|
1194
|
-
e.preventDefault();
|
|
1195
|
-
e.stopPropagation();
|
|
1196
|
-
divider.setPointerCapture(e.pointerId);
|
|
1197
|
-
draggingRef.current = true;
|
|
1198
|
-
globalDragging = true;
|
|
1199
|
-
lastRatio = ratioRef.current;
|
|
1200
|
-
document.body.style.cursor = vertical ? 'col-resize' : 'row-resize';
|
|
1201
|
-
document.body.style.userSelect = 'none';
|
|
1202
|
-
};
|
|
1203
|
-
|
|
1204
|
-
const onPointerMove = (e: PointerEvent) => {
|
|
1205
|
-
if (!draggingRef.current) return;
|
|
1206
|
-
const rect = container.getBoundingClientRect();
|
|
1207
|
-
let r = vertical
|
|
1208
|
-
? (e.clientX - rect.left) / rect.width
|
|
1209
|
-
: (e.clientY - rect.top) / rect.height;
|
|
1210
|
-
r = Math.max(0.1, Math.min(0.9, r));
|
|
1211
|
-
lastRatio = r;
|
|
1212
|
-
// Imperative DOM update — no React re-render during drag
|
|
1213
|
-
first.style[prop] = `calc(${r * 100}% - 4px)`;
|
|
1214
|
-
second.style[prop] = `calc(${(1 - r) * 100}% - 4px)`;
|
|
1215
|
-
};
|
|
1216
|
-
|
|
1217
|
-
const onPointerUp = () => {
|
|
1218
|
-
if (!draggingRef.current) return;
|
|
1219
|
-
draggingRef.current = false;
|
|
1220
|
-
globalDragging = false;
|
|
1221
|
-
document.body.style.cursor = '';
|
|
1222
|
-
document.body.style.userSelect = '';
|
|
1223
|
-
// Commit final ratio to React state (single re-render)
|
|
1224
|
-
setRatios(prev => ({ ...prev, [splitId]: lastRatio }));
|
|
1225
|
-
// Trigger a global resize so all terminals fit() once after drag ends
|
|
1226
|
-
window.dispatchEvent(new Event('terminal-drag-end'));
|
|
1227
|
-
};
|
|
1228
|
-
|
|
1229
|
-
divider.addEventListener('pointerdown', onPointerDown);
|
|
1230
|
-
divider.addEventListener('pointermove', onPointerMove);
|
|
1231
|
-
divider.addEventListener('pointerup', onPointerUp);
|
|
1232
|
-
divider.addEventListener('lostpointercapture', onPointerUp);
|
|
1233
|
-
|
|
1234
|
-
return () => {
|
|
1235
|
-
divider.removeEventListener('pointerdown', onPointerDown);
|
|
1236
|
-
divider.removeEventListener('pointermove', onPointerMove);
|
|
1237
|
-
divider.removeEventListener('pointerup', onPointerUp);
|
|
1238
|
-
divider.removeEventListener('lostpointercapture', onPointerUp);
|
|
1239
|
-
};
|
|
1240
|
-
// Only re-register if direction or splitId changes (not on every ratio change)
|
|
1241
|
-
}, [isVert, splitId, setRatios]);
|
|
1242
|
-
|
|
1243
|
-
return (
|
|
1244
|
-
<div ref={containerRef} className="h-full w-full" style={{ display: 'flex', flexDirection: isVert ? 'row' : 'column' }}>
|
|
1245
|
-
<div ref={firstRef} style={{ minWidth: 0, minHeight: 0, overflow: 'hidden', [isVert ? 'width' : 'height']: `calc(${ratio * 100}% - 4px)` }}>
|
|
1246
|
-
{children[0]}
|
|
1247
|
-
</div>
|
|
1248
|
-
<div
|
|
1249
|
-
ref={dividerRef}
|
|
1250
|
-
className={`shrink-0 ${isVert ? 'w-2 cursor-col-resize' : 'h-2 cursor-row-resize'} bg-[#2a2a4a] hover:bg-[#7c5bf0] active:bg-[#7c5bf0] transition-colors`}
|
|
1251
|
-
style={{ touchAction: 'none', zIndex: 10 }}
|
|
1252
|
-
/>
|
|
1253
|
-
<div ref={secondRef} style={{ minWidth: 0, minHeight: 0, overflow: 'hidden', [isVert ? 'width' : 'height']: `calc(${(1 - ratio) * 100}% - 4px)` }}>
|
|
1254
|
-
{children[1]}
|
|
1255
|
-
</div>
|
|
1256
|
-
</div>
|
|
1257
|
-
);
|
|
1258
|
-
}
|
|
1259
|
-
|
|
1260
|
-
// ─── Terminal pane with tmux session support ──────────────────
|
|
1261
|
-
|
|
1262
|
-
const MemoTerminalPane = memo(function TerminalPane({
|
|
1263
|
-
id,
|
|
1264
|
-
sessionName,
|
|
1265
|
-
projectPath,
|
|
1266
|
-
skipPermissions,
|
|
1267
|
-
onSessionConnected,
|
|
1268
|
-
}: {
|
|
1269
|
-
id: number;
|
|
1270
|
-
sessionName?: string;
|
|
1271
|
-
projectPath?: string;
|
|
1272
|
-
skipPermissions?: boolean;
|
|
1273
|
-
onSessionConnected: (paneId: number, sessionName: string) => void;
|
|
1274
|
-
}) {
|
|
1275
|
-
const containerRef = useRef<HTMLDivElement>(null);
|
|
1276
|
-
const searchInputRef = useRef<HTMLInputElement>(null);
|
|
1277
|
-
const searchAddonRef = useRef<SearchAddon | null>(null);
|
|
1278
|
-
const [showSearch, setShowSearch] = useState(false);
|
|
1279
|
-
const [searchQuery, setSearchQuery] = useState('');
|
|
1280
|
-
const sessionNameRef = useRef(sessionName);
|
|
1281
|
-
sessionNameRef.current = sessionName;
|
|
1282
|
-
const projectPathRef = useRef(projectPath);
|
|
1283
|
-
const skipPermRef = useRef(skipPermissions);
|
|
1284
|
-
skipPermRef.current = skipPermissions;
|
|
1285
|
-
projectPathRef.current = projectPath;
|
|
1286
|
-
|
|
1287
|
-
useEffect(() => {
|
|
1288
|
-
if (!containerRef.current) return;
|
|
1289
|
-
|
|
1290
|
-
let disposed = false; // guard against post-cleanup writes (React Strict Mode)
|
|
1291
|
-
let bellArmed = false; // armed after user presses Enter
|
|
1292
|
-
let bellNewBytes = 0;
|
|
1293
|
-
let bellIdleTimer = 0;
|
|
1294
|
-
let bellArmedAt = 0; // timestamp when armed
|
|
1295
|
-
|
|
1296
|
-
// Read terminal theme from CSS variables
|
|
1297
|
-
const cs = getComputedStyle(document.documentElement);
|
|
1298
|
-
const tv = (name: string) => cs.getPropertyValue(name).trim();
|
|
1299
|
-
const termBg = tv('--term-bg') || '#1a1a2e';
|
|
1300
|
-
const termFg = tv('--term-fg') || '#e0e0e0';
|
|
1301
|
-
const termCursor = tv('--term-cursor') || '#7c5bf0';
|
|
1302
|
-
const isLight = document.documentElement.getAttribute('data-theme') === 'light';
|
|
1303
|
-
|
|
1304
|
-
const term = new Terminal({
|
|
1305
|
-
allowProposedApi: true,
|
|
1306
|
-
cursorBlink: true,
|
|
1307
|
-
fontSize: 13,
|
|
1308
|
-
fontFamily: 'Menlo, Monaco, "Courier New", monospace',
|
|
1309
|
-
scrollback: 10000,
|
|
1310
|
-
logger: { trace: () => {}, debug: () => {}, info: () => {}, warn: () => {}, error: () => {} },
|
|
1311
|
-
theme: isLight ? {
|
|
1312
|
-
background: termBg,
|
|
1313
|
-
foreground: termFg,
|
|
1314
|
-
cursor: termCursor,
|
|
1315
|
-
selectionBackground: termCursor + '44',
|
|
1316
|
-
black: '#1a1a1a',
|
|
1317
|
-
red: '#d32f2f',
|
|
1318
|
-
green: '#388e3c',
|
|
1319
|
-
yellow: '#f57f17',
|
|
1320
|
-
blue: '#1976d2',
|
|
1321
|
-
magenta: '#7b1fa2',
|
|
1322
|
-
cyan: '#0097a7',
|
|
1323
|
-
white: '#424242',
|
|
1324
|
-
brightBlack: '#757575',
|
|
1325
|
-
brightRed: '#e53935',
|
|
1326
|
-
brightGreen: '#43a047',
|
|
1327
|
-
brightYellow: '#f9a825',
|
|
1328
|
-
brightBlue: '#1e88e5',
|
|
1329
|
-
brightMagenta: '#8e24aa',
|
|
1330
|
-
brightCyan: '#00acc1',
|
|
1331
|
-
brightWhite: '#1a1a1a',
|
|
1332
|
-
} : {
|
|
1333
|
-
background: termBg,
|
|
1334
|
-
foreground: termFg,
|
|
1335
|
-
cursor: termCursor,
|
|
1336
|
-
selectionBackground: termCursor + '66',
|
|
1337
|
-
black: '#1a1a2e',
|
|
1338
|
-
red: '#ff6b6b',
|
|
1339
|
-
green: '#69db7c',
|
|
1340
|
-
yellow: '#ffd43b',
|
|
1341
|
-
blue: '#7c5bf0',
|
|
1342
|
-
magenta: '#da77f2',
|
|
1343
|
-
cyan: '#66d9ef',
|
|
1344
|
-
white: '#e0e0e0',
|
|
1345
|
-
brightBlack: '#555',
|
|
1346
|
-
brightRed: '#ff8787',
|
|
1347
|
-
brightGreen: '#8ce99a',
|
|
1348
|
-
brightYellow: '#ffe066',
|
|
1349
|
-
brightBlue: '#9775fa',
|
|
1350
|
-
brightMagenta: '#e599f7',
|
|
1351
|
-
brightCyan: '#99e9f2',
|
|
1352
|
-
brightWhite: '#ffffff',
|
|
1353
|
-
},
|
|
1354
|
-
});
|
|
1355
|
-
|
|
1356
|
-
const fit = new FitAddon();
|
|
1357
|
-
term.loadAddon(fit);
|
|
1358
|
-
|
|
1359
|
-
// Wait for container to be visible and have stable dimensions before opening
|
|
1360
|
-
let initDone = false;
|
|
1361
|
-
const el = containerRef.current;
|
|
1362
|
-
|
|
1363
|
-
function initTerminal() {
|
|
1364
|
-
if (initDone || disposed || !el) return;
|
|
1365
|
-
// Don't init if inside a hidden tab or too small
|
|
1366
|
-
if (el.closest('.hidden') || el.offsetWidth < 50 || el.offsetHeight < 30) return;
|
|
1367
|
-
initDone = true;
|
|
1368
|
-
term.open(el);
|
|
1369
|
-
// WebGL: GPU-accelerated rendering with canvas fallback
|
|
1370
|
-
try {
|
|
1371
|
-
const webgl = new WebglAddon();
|
|
1372
|
-
webgl.onContextLoss(() => webgl.dispose());
|
|
1373
|
-
term.loadAddon(webgl);
|
|
1374
|
-
} catch {}
|
|
1375
|
-
// Unicode 11: correct width for CJK characters
|
|
1376
|
-
try {
|
|
1377
|
-
const unicode11 = new Unicode11Addon();
|
|
1378
|
-
term.loadAddon(unicode11);
|
|
1379
|
-
term.unicode.activeVersion = '11';
|
|
1380
|
-
} catch {}
|
|
1381
|
-
// Search: Ctrl/Cmd+F to find text in terminal buffer
|
|
1382
|
-
try {
|
|
1383
|
-
const search = new SearchAddon();
|
|
1384
|
-
term.loadAddon(search);
|
|
1385
|
-
searchAddonRef.current = search;
|
|
1386
|
-
} catch {}
|
|
1387
|
-
try { fit.fit(); } catch {}
|
|
1388
|
-
connect();
|
|
1389
|
-
}
|
|
1390
|
-
|
|
1391
|
-
// Try immediately, then observe for visibility changes
|
|
1392
|
-
requestAnimationFrame(() => {
|
|
1393
|
-
if (disposed) return;
|
|
1394
|
-
initTerminal();
|
|
1395
|
-
});
|
|
1396
|
-
|
|
1397
|
-
// If not visible yet (hidden tab), use IntersectionObserver to detect when it becomes visible
|
|
1398
|
-
const visObserver = new IntersectionObserver((entries) => {
|
|
1399
|
-
if (entries[0]?.isIntersecting) {
|
|
1400
|
-
initTerminal();
|
|
1401
|
-
}
|
|
1402
|
-
});
|
|
1403
|
-
visObserver.observe(el);
|
|
1404
|
-
|
|
1405
|
-
// ── WebSocket with auto-reconnect ──
|
|
1406
|
-
|
|
1407
|
-
const wsUrl = getWsUrl();
|
|
1408
|
-
let ws: WebSocket | null = null;
|
|
1409
|
-
let reconnectTimer = 0;
|
|
1410
|
-
let connectedSession: string | null = null;
|
|
1411
|
-
let createRetries = 0;
|
|
1412
|
-
const MAX_CREATE_RETRIES = 2;
|
|
1413
|
-
let reconnectAttempts = 0;
|
|
1414
|
-
let isNewlyCreated = false;
|
|
1415
|
-
|
|
1416
|
-
function connect() {
|
|
1417
|
-
if (disposed) return;
|
|
1418
|
-
const socket = new WebSocket(wsUrl);
|
|
1419
|
-
ws = socket;
|
|
1420
|
-
|
|
1421
|
-
socket.onopen = () => {
|
|
1422
|
-
if (disposed) { socket.close(); return; }
|
|
1423
|
-
if (socket.readyState !== WebSocket.OPEN) return;
|
|
1424
|
-
const cols = term.cols;
|
|
1425
|
-
const rows = term.rows;
|
|
1426
|
-
|
|
1427
|
-
if (connectedSession) {
|
|
1428
|
-
// Reconnect to the same session
|
|
1429
|
-
socket.send(JSON.stringify({ type: 'attach', sessionName: connectedSession, cols, rows }));
|
|
1430
|
-
} else {
|
|
1431
|
-
const sn = sessionNameRef.current;
|
|
1432
|
-
if (sn) {
|
|
1433
|
-
socket.send(JSON.stringify({ type: 'attach', sessionName: sn, cols, rows }));
|
|
1434
|
-
} else if (createRetries < MAX_CREATE_RETRIES) {
|
|
1435
|
-
createRetries++;
|
|
1436
|
-
isNewlyCreated = true;
|
|
1437
|
-
socket.send(JSON.stringify({ type: 'create', cols, rows }));
|
|
1438
|
-
} else {
|
|
1439
|
-
term.write('\r\n\x1b[91m[failed to create session — check server logs]\x1b[0m\r\n');
|
|
1440
|
-
}
|
|
1441
|
-
}
|
|
1442
|
-
};
|
|
1443
|
-
|
|
1444
|
-
ws.onmessage = (event) => {
|
|
1445
|
-
if (disposed || !initDone) return;
|
|
1446
|
-
try {
|
|
1447
|
-
const msg = JSON.parse(event.data);
|
|
1448
|
-
if (msg.type === 'output') {
|
|
1449
|
-
try { term.write(msg.data); } catch {};
|
|
1450
|
-
// Bell: detect claude completion
|
|
1451
|
-
// Bell: idle detection after user submits prompt
|
|
1452
|
-
if (bellEnabledPanes.has(id) && bellArmed) {
|
|
1453
|
-
bellNewBytes += (msg.data as string).length;
|
|
1454
|
-
clearTimeout(bellIdleTimer);
|
|
1455
|
-
if (bellNewBytes > 2000) {
|
|
1456
|
-
// 10s idle = claude finished
|
|
1457
|
-
bellIdleTimer = window.setTimeout(() => {
|
|
1458
|
-
bellArmed = false;
|
|
1459
|
-
fireBellNotification(id);
|
|
1460
|
-
}, 10000);
|
|
1461
|
-
// Fallback: if 90s since armed with activity, force fire
|
|
1462
|
-
if (Date.now() - bellArmedAt > 90000) {
|
|
1463
|
-
bellArmed = false;
|
|
1464
|
-
clearTimeout(bellIdleTimer);
|
|
1465
|
-
fireBellNotification(id);
|
|
1466
|
-
}
|
|
1467
|
-
}
|
|
1468
|
-
}
|
|
1469
|
-
} else if (msg.type === 'connected') {
|
|
1470
|
-
connectedSession = msg.sessionName;
|
|
1471
|
-
createRetries = 0;
|
|
1472
|
-
reconnectAttempts = 0;
|
|
1473
|
-
onSessionConnected(id, msg.sessionName);
|
|
1474
|
-
// Auto-run claude for project tabs (only if no pendingCommand already set)
|
|
1475
|
-
if (isNewlyCreated && projectPathRef.current && !pendingCommands.has(id)) {
|
|
1476
|
-
isNewlyCreated = false;
|
|
1477
|
-
const pp = projectPathRef.current;
|
|
1478
|
-
import('@/lib/session-utils').then(({ resolveFixedSession, buildResumeFlag, getMcpFlag }) => {
|
|
1479
|
-
Promise.all([resolveFixedSession(pp), getMcpFlag(pp)]).then(([fixedId, mcpFlag]) => {
|
|
1480
|
-
const resumeFlag = buildResumeFlag(fixedId, true);
|
|
1481
|
-
const skipFlag = skipPermRef.current ? ' --dangerously-skip-permissions' : '';
|
|
1482
|
-
setTimeout(() => {
|
|
1483
|
-
if (!disposed && ws?.readyState === WebSocket.OPEN) {
|
|
1484
|
-
ws.send(JSON.stringify({ type: 'input', data: `cd "${pp}" && claude${resumeFlag}${skipFlag}${mcpFlag}\n` }));
|
|
1485
|
-
}
|
|
1486
|
-
}, 300);
|
|
1487
|
-
});
|
|
1488
|
-
});
|
|
1489
|
-
}
|
|
1490
|
-
isNewlyCreated = false;
|
|
1491
|
-
// Force tmux to redraw by toggling size, then send reset
|
|
1492
|
-
setTimeout(() => {
|
|
1493
|
-
if (disposed || ws?.readyState !== WebSocket.OPEN) return;
|
|
1494
|
-
const c = term.cols, r = term.rows;
|
|
1495
|
-
ws!.send(JSON.stringify({ type: 'resize', cols: c - 1, rows: r }));
|
|
1496
|
-
setTimeout(() => {
|
|
1497
|
-
if (disposed || ws?.readyState !== WebSocket.OPEN) return;
|
|
1498
|
-
ws!.send(JSON.stringify({ type: 'resize', cols: c, rows: r }));
|
|
1499
|
-
}, 50);
|
|
1500
|
-
}, 100);
|
|
1501
|
-
const cmd = pendingCommands.get(id);
|
|
1502
|
-
if (cmd) {
|
|
1503
|
-
pendingCommands.delete(id);
|
|
1504
|
-
setTimeout(() => {
|
|
1505
|
-
if (!disposed && ws?.readyState === WebSocket.OPEN) {
|
|
1506
|
-
ws.send(JSON.stringify({ type: 'input', data: cmd }));
|
|
1507
|
-
}
|
|
1508
|
-
}, 500);
|
|
1509
|
-
}
|
|
1510
|
-
} else if (msg.type === 'error') {
|
|
1511
|
-
// Session no longer exists — auto-create a new one
|
|
1512
|
-
if (!connectedSession && msg.message?.includes('no longer exists') && createRetries < MAX_CREATE_RETRIES) {
|
|
1513
|
-
createRetries++;
|
|
1514
|
-
isNewlyCreated = true;
|
|
1515
|
-
term.write(`\r\n\x1b[93m[${msg.message} — creating new session...]\x1b[0m\r\n`);
|
|
1516
|
-
if (socket.readyState === WebSocket.OPEN) {
|
|
1517
|
-
socket.send(JSON.stringify({ type: 'create', cols: term.cols, rows: term.rows }));
|
|
1518
|
-
}
|
|
1519
|
-
} else {
|
|
1520
|
-
term.write(`\r\n\x1b[93m[${msg.message || 'error'}]\x1b[0m\r\n`);
|
|
1521
|
-
}
|
|
1522
|
-
} else if (msg.type === 'exit') {
|
|
1523
|
-
term.write('\r\n\x1b[90m[session ended]\x1b[0m\r\n');
|
|
1524
|
-
}
|
|
1525
|
-
} catch {}
|
|
1526
|
-
};
|
|
1527
|
-
|
|
1528
|
-
ws.onclose = () => {
|
|
1529
|
-
if (disposed) return;
|
|
1530
|
-
reconnectAttempts++;
|
|
1531
|
-
// Exponential backoff: 2s, 4s, 8s, ... max 30s
|
|
1532
|
-
const delay = Math.min(2000 * Math.pow(2, reconnectAttempts - 1), 30000);
|
|
1533
|
-
term.write(`\r\n\x1b[90m[disconnected — reconnecting in ${delay / 1000}s...]\x1b[0m\r\n`);
|
|
1534
|
-
reconnectTimer = window.setTimeout(connect, delay);
|
|
1535
|
-
};
|
|
1536
|
-
|
|
1537
|
-
ws.onerror = () => {
|
|
1538
|
-
// onclose will fire after this, triggering reconnect
|
|
1539
|
-
};
|
|
1540
|
-
}
|
|
1541
|
-
|
|
1542
|
-
// NOTE: connect() is called inside initTerminal() — do NOT call it here.
|
|
1543
|
-
// Calling it both here and in initTerminal() causes duplicate WebSocket
|
|
1544
|
-
// connections to the same tmux session, resulting in doubled output.
|
|
1545
|
-
|
|
1546
|
-
term.attachCustomKeyEventHandler((event: KeyboardEvent) => {
|
|
1547
|
-
if ((event.ctrlKey || event.metaKey) && event.key === 'f' && event.type === 'keydown') {
|
|
1548
|
-
setShowSearch(true);
|
|
1549
|
-
setTimeout(() => searchInputRef.current?.focus(), 0);
|
|
1550
|
-
return false;
|
|
1551
|
-
}
|
|
1552
|
-
if (event.key === 'Escape' && event.type === 'keydown') {
|
|
1553
|
-
setShowSearch(false);
|
|
1554
|
-
searchAddonRef.current?.clearDecorations();
|
|
1555
|
-
}
|
|
1556
|
-
return true;
|
|
1557
|
-
});
|
|
1558
|
-
|
|
1559
|
-
term.onData((data) => {
|
|
1560
|
-
if (ws?.readyState === WebSocket.OPEN) ws.send(JSON.stringify({ type: 'input', data }));
|
|
1561
|
-
// Arm bell on Enter (user submitted a new prompt)
|
|
1562
|
-
if (data === '\r' || data === '\n') {
|
|
1563
|
-
bellArmed = true;
|
|
1564
|
-
bellNewBytes = 0;
|
|
1565
|
-
bellArmedAt = Date.now();
|
|
1566
|
-
clearTimeout(bellIdleTimer);
|
|
1567
|
-
}
|
|
1568
|
-
});
|
|
1569
|
-
|
|
1570
|
-
// ── Resize handling ──
|
|
1571
|
-
|
|
1572
|
-
let resizeTimer = 0;
|
|
1573
|
-
let lastW = 0;
|
|
1574
|
-
let lastH = 0;
|
|
1575
|
-
|
|
1576
|
-
const doFit = () => {
|
|
1577
|
-
if (disposed) return;
|
|
1578
|
-
const el = containerRef.current;
|
|
1579
|
-
if (!el || el.offsetWidth === 0 || el.offsetHeight === 0) return;
|
|
1580
|
-
// Skip if container is inside a hidden tab (prevents wrong resize)
|
|
1581
|
-
if (el.closest('.hidden')) return;
|
|
1582
|
-
// Skip unreasonably small sizes — xterm crashes if rows/cols go below 2
|
|
1583
|
-
if (el.offsetWidth < 100 || el.offsetHeight < 50) return;
|
|
1584
|
-
const w = el.offsetWidth;
|
|
1585
|
-
const h = el.offsetHeight;
|
|
1586
|
-
if (w === lastW && h === lastH) return;
|
|
1587
|
-
lastW = w;
|
|
1588
|
-
lastH = h;
|
|
1589
|
-
try {
|
|
1590
|
-
fit.fit();
|
|
1591
|
-
// Skip if xterm computed unreasonable dimensions
|
|
1592
|
-
if (term.cols < 2 || term.rows < 2) return;
|
|
1593
|
-
if (ws?.readyState === WebSocket.OPEN) {
|
|
1594
|
-
ws.send(JSON.stringify({ type: 'resize', cols: term.cols, rows: term.rows }));
|
|
1595
|
-
}
|
|
1596
|
-
} catch {}
|
|
1597
|
-
};
|
|
1598
|
-
|
|
1599
|
-
const handleResize = () => {
|
|
1600
|
-
if (globalDragging) return;
|
|
1601
|
-
clearTimeout(resizeTimer);
|
|
1602
|
-
resizeTimer = window.setTimeout(doFit, 150);
|
|
1603
|
-
};
|
|
1604
|
-
|
|
1605
|
-
const onDragEnd = () => {
|
|
1606
|
-
clearTimeout(resizeTimer);
|
|
1607
|
-
resizeTimer = window.setTimeout(doFit, 50);
|
|
1608
|
-
};
|
|
1609
|
-
window.addEventListener('terminal-drag-end', onDragEnd);
|
|
1610
|
-
|
|
1611
|
-
const resizeObserver = new ResizeObserver(() => {
|
|
1612
|
-
if (!initDone) { initTerminal(); return; }
|
|
1613
|
-
handleResize();
|
|
1614
|
-
});
|
|
1615
|
-
resizeObserver.observe(containerRef.current);
|
|
1616
|
-
|
|
1617
|
-
// ── Cleanup ──
|
|
1618
|
-
|
|
1619
|
-
const mountTime = Date.now();
|
|
1620
|
-
|
|
1621
|
-
return () => {
|
|
1622
|
-
disposed = true;
|
|
1623
|
-
visObserver.disconnect();
|
|
1624
|
-
clearTimeout(resizeTimer);
|
|
1625
|
-
clearTimeout(reconnectTimer);
|
|
1626
|
-
window.removeEventListener('terminal-drag-end', onDragEnd);
|
|
1627
|
-
resizeObserver.disconnect();
|
|
1628
|
-
// Strict Mode cleanup: if disposed within 2s of mount and we created a
|
|
1629
|
-
// new session (not attaching), kill the orphaned tmux session
|
|
1630
|
-
const isStrictModeCleanup = Date.now() - mountTime < 2000;
|
|
1631
|
-
const isNewSession = !sessionNameRef.current && connectedSession;
|
|
1632
|
-
if (ws) {
|
|
1633
|
-
if (isStrictModeCleanup && isNewSession && ws.readyState === WebSocket.OPEN) {
|
|
1634
|
-
ws.send(JSON.stringify({ type: 'kill', sessionName: connectedSession }));
|
|
1635
|
-
}
|
|
1636
|
-
ws.onclose = null;
|
|
1637
|
-
ws.close();
|
|
1638
|
-
}
|
|
1639
|
-
term.dispose();
|
|
1640
|
-
};
|
|
1641
|
-
}, [id, onSessionConnected]);
|
|
1642
|
-
|
|
1643
|
-
return (
|
|
1644
|
-
<div className="relative h-full w-full">
|
|
1645
|
-
<div ref={containerRef} className="h-full w-full" />
|
|
1646
|
-
{showSearch && (
|
|
1647
|
-
<div className="absolute top-1 right-2 flex items-center gap-1 px-2 py-1 rounded border border-[var(--term-border)] shadow-lg z-10"
|
|
1648
|
-
style={{ background: 'var(--term-bg, #1a1b26)' }}
|
|
1649
|
-
onClick={e => e.stopPropagation()}>
|
|
1650
|
-
<input
|
|
1651
|
-
ref={searchInputRef}
|
|
1652
|
-
type="text"
|
|
1653
|
-
value={searchQuery}
|
|
1654
|
-
onChange={e => {
|
|
1655
|
-
setSearchQuery(e.target.value);
|
|
1656
|
-
if (e.target.value) searchAddonRef.current?.findNext(e.target.value, { regex: false, caseSensitive: false, decorations: { matchOverviewRuler: '#888', activeMatchColorOverviewRuler: '#ff0' } });
|
|
1657
|
-
else searchAddonRef.current?.clearDecorations();
|
|
1658
|
-
}}
|
|
1659
|
-
onKeyDown={e => {
|
|
1660
|
-
if (e.key === 'Enter') {
|
|
1661
|
-
if (e.shiftKey) searchAddonRef.current?.findPrevious(searchQuery, { regex: false, caseSensitive: false, decorations: { matchOverviewRuler: '#888', activeMatchColorOverviewRuler: '#ff0' } });
|
|
1662
|
-
else searchAddonRef.current?.findNext(searchQuery, { regex: false, caseSensitive: false, decorations: { matchOverviewRuler: '#888', activeMatchColorOverviewRuler: '#ff0' } });
|
|
1663
|
-
}
|
|
1664
|
-
if (e.key === 'Escape') {
|
|
1665
|
-
setShowSearch(false);
|
|
1666
|
-
searchAddonRef.current?.clearDecorations();
|
|
1667
|
-
}
|
|
1668
|
-
}}
|
|
1669
|
-
placeholder="Search..."
|
|
1670
|
-
className="bg-transparent text-[11px] text-[var(--term-fg,#c0caf5)] outline-none w-32 placeholder-gray-600"
|
|
1671
|
-
autoFocus
|
|
1672
|
-
/>
|
|
1673
|
-
<button onClick={() => searchAddonRef.current?.findPrevious(searchQuery, { regex: false, caseSensitive: false, decorations: { matchOverviewRuler: '#888', activeMatchColorOverviewRuler: '#ff0' } })}
|
|
1674
|
-
className="text-[10px] text-gray-500 hover:text-gray-300 px-1" title="Previous (Shift+Enter)">▲</button>
|
|
1675
|
-
<button onClick={() => searchAddonRef.current?.findNext(searchQuery, { regex: false, caseSensitive: false, decorations: { matchOverviewRuler: '#888', activeMatchColorOverviewRuler: '#ff0' } })}
|
|
1676
|
-
className="text-[10px] text-gray-500 hover:text-gray-300 px-1" title="Next (Enter)">▼</button>
|
|
1677
|
-
<button onClick={() => { setShowSearch(false); searchAddonRef.current?.clearDecorations(); }}
|
|
1678
|
-
className="text-[10px] text-gray-500 hover:text-gray-300 px-1" title="Close (Esc)">✕</button>
|
|
1679
|
-
</div>
|
|
1680
|
-
)}
|
|
1681
|
-
</div>
|
|
1682
|
-
);
|
|
1683
|
-
});
|