tower-studio 0.1.2 → 0.1.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/bin/tower.mjs +5 -15
- package/next.config.ts +1 -8
- package/package.json +10 -11
- package/prisma/dev.db +0 -0
- package/public/vs/_commonjsHelpers-CT9FvmAN.js +1 -0
- package/public/vs/abap-D-t0cyap.js +1 -0
- package/public/vs/apex-CcIm7xu6.js +1 -0
- package/public/vs/assets/css.worker-HnVq6Ewq.js +93 -0
- package/public/vs/assets/editor.worker-Be8ye1pW.js +26 -0
- package/public/vs/assets/html.worker-B51mlPHg.js +470 -0
- package/public/vs/assets/json.worker-DKiEKt88.js +58 -0
- package/public/vs/assets/ts.worker-CMbG-7ft.js +67731 -0
- package/public/vs/azcli-BA0tQDCg.js +1 -0
- package/public/vs/basic-languages/monaco.contribution.js +1 -0
- package/public/vs/bat-C397hTD6.js +1 -0
- package/public/vs/bicep-DF5aW17k.js +2 -0
- package/public/vs/cameligo-plsz8qhj.js +1 -0
- package/public/vs/clojure-Y2auQMzK.js +1 -0
- package/public/vs/coffee-Bu45yuWE.js +1 -0
- package/public/vs/cpp-CkKPQIni.js +1 -0
- package/public/vs/csharp-CX28MZyh.js +1 -0
- package/public/vs/csp-D8uWnyxW.js +1 -0
- package/public/vs/css-CaeNmE3S.js +3 -0
- package/public/vs/cssMode-CjiAH6dQ.js +1 -0
- package/public/vs/cypher-DVThT8BS.js +1 -0
- package/public/vs/dart-CmGfCvrO.js +1 -0
- package/public/vs/dockerfile-CZqqYdch.js +1 -0
- package/public/vs/ecl-30fUercY.js +1 -0
- package/public/vs/editor/editor.main.css +1 -0
- package/public/vs/editor/editor.main.js +5 -0
- package/public/vs/editor.api-CalNCsUg.js +903 -0
- package/public/vs/elixir-xjPaIfzF.js +1 -0
- package/public/vs/flow9-DqtmStfK.js +1 -0
- package/public/vs/freemarker2-Cz_sV6Md.js +3 -0
- package/public/vs/fsharp-BOMdg4U1.js +1 -0
- package/public/vs/go-D_hbi-Jt.js +1 -0
- package/public/vs/graphql-CKUU4kLG.js +1 -0
- package/public/vs/handlebars-OwglfO-1.js +1 -0
- package/public/vs/hcl-DTaboeZW.js +1 -0
- package/public/vs/html-Pa1xEWsY.js +1 -0
- package/public/vs/htmlMode-Bz67EXwp.js +1 -0
- package/public/vs/ini-CsNwO04R.js +1 -0
- package/public/vs/java-CI4ZMsH9.js +1 -0
- package/public/vs/javascript-PczUCGdz.js +1 -0
- package/public/vs/jsonMode-DULH5oaX.js +7 -0
- package/public/vs/julia-BwzEvaQw.js +1 -0
- package/public/vs/kotlin-IUYPiTV8.js +1 -0
- package/public/vs/language/css/monaco.contribution.js +1 -0
- package/public/vs/language/html/monaco.contribution.js +1 -0
- package/public/vs/language/json/monaco.contribution.js +1 -0
- package/public/vs/language/typescript/monaco.contribution.js +1 -0
- package/public/vs/less-C0eDYdqa.js +2 -0
- package/public/vs/lexon-iON-Kj97.js +1 -0
- package/public/vs/liquid-DqKjdPGy.js +1 -0
- package/public/vs/loader.js +1368 -0
- package/public/vs/lspLanguageFeatures-kM9O9rjY.js +4 -0
- package/public/vs/lua-DtygF91M.js +1 -0
- package/public/vs/m3-CsR4AuFi.js +1 -0
- package/public/vs/markdown-C_rD0bIw.js +1 -0
- package/public/vs/mdx-DEWtB1K5.js +1 -0
- package/public/vs/mips-CiYP61RB.js +1 -0
- package/public/vs/monaco.contribution-D2OdxNBt.js +1 -0
- package/public/vs/monaco.contribution-DO3azKX8.js +1 -0
- package/public/vs/monaco.contribution-EcChJV6a.js +1 -0
- package/public/vs/monaco.contribution-qLAYrEOP.js +1 -0
- package/public/vs/msdax-C38-sJlp.js +1 -0
- package/public/vs/mysql-CdtbpvbG.js +1 -0
- package/public/vs/nls.messages-loader.js +1 -0
- package/public/vs/nls.messages.cs.js.js +17 -0
- package/public/vs/nls.messages.de.js.js +17 -0
- package/public/vs/nls.messages.es.js.js +17 -0
- package/public/vs/nls.messages.fr.js.js +15 -0
- package/public/vs/nls.messages.it.js.js +15 -0
- package/public/vs/nls.messages.ja.js.js +17 -0
- package/public/vs/nls.messages.js.js +10 -0
- package/public/vs/nls.messages.ko.js.js +25 -0
- package/public/vs/nls.messages.pl.js.js +17 -0
- package/public/vs/nls.messages.pt-br.js.js +6 -0
- package/public/vs/nls.messages.ru.js.js +17 -0
- package/public/vs/nls.messages.tr.js.js +15 -0
- package/public/vs/nls.messages.zh-cn.js.js +17 -0
- package/public/vs/nls.messages.zh-tw.js.js +15 -0
- package/public/vs/objective-c-CntZFaHX.js +1 -0
- package/public/vs/pascal-r6kuqfl_.js +1 -0
- package/public/vs/pascaligo-BiXoTmXh.js +1 -0
- package/public/vs/perl-DABw_TcH.js +1 -0
- package/public/vs/pgsql-me_jFXeX.js +1 -0
- package/public/vs/php-D_kh-9LK.js +1 -0
- package/public/vs/pla-VfZjczW0.js +1 -0
- package/public/vs/postiats-BBSzz8Pk.js +1 -0
- package/public/vs/powerquery-Dt-g_2cc.js +1 -0
- package/public/vs/powershell-B-7ap1zc.js +1 -0
- package/public/vs/protobuf-BmtuEB1A.js +2 -0
- package/public/vs/pug-BRpRNeEb.js +1 -0
- package/public/vs/python-Cr0UkIbn.js +1 -0
- package/public/vs/qsharp-BzsFaUU9.js +1 -0
- package/public/vs/r-f8dDdrp4.js +1 -0
- package/public/vs/razor-BYAHOTkz.js +1 -0
- package/public/vs/redis-fvZQY4PI.js +1 -0
- package/public/vs/redshift-45Et0LQi.js +1 -0
- package/public/vs/restructuredtext-C7UUFKFD.js +1 -0
- package/public/vs/ruby-CZO8zYTz.js +1 -0
- package/public/vs/rust-Bfetafyc.js +1 -0
- package/public/vs/sb-3GYllVck.js +1 -0
- package/public/vs/scala-foMgrKo1.js +1 -0
- package/public/vs/scheme-CHdMtr7p.js +1 -0
- package/public/vs/scss-C1cmLt9V.js +3 -0
- package/public/vs/shell-ClXCKCEW.js +1 -0
- package/public/vs/solidity-MZ6ExpPy.js +1 -0
- package/public/vs/sophia-DWkuSsPQ.js +1 -0
- package/public/vs/sparql-AUGFYSyk.js +1 -0
- package/public/vs/sql-32GpJSV2.js +1 -0
- package/public/vs/st-CuDFIVZ_.js +1 -0
- package/public/vs/swift-n-2HociN.js +3 -0
- package/public/vs/systemverilog-Ch4vA8Yt.js +1 -0
- package/public/vs/tcl-D74tq1nH.js +1 -0
- package/public/vs/tsMode-CZz1Umrk.js +11 -0
- package/public/vs/twig-C6taOxMV.js +1 -0
- package/public/vs/typescript-DfOrAzoV.js +1 -0
- package/public/vs/typespec-D-PIh9Xw.js +1 -0
- package/public/vs/vb-Dyb2648j.js +1 -0
- package/public/vs/wgsl-BhLXMOR0.js +298 -0
- package/public/vs/workers-DcJshg-q.js +1 -0
- package/public/vs/xml-CdsdnY8S.js +1 -0
- package/public/vs/yaml-DYGvmE88.js +1 -0
- package/src/actions/__tests__/agent-actions-username.test.ts +30 -0
- package/src/actions/__tests__/asset-actions.test.ts +251 -0
- package/src/actions/__tests__/assistant-actions.test.ts +20 -0
- package/src/actions/__tests__/cli-profile-actions.test.ts +243 -0
- package/src/actions/__tests__/label-actions.test.ts +187 -0
- package/src/actions/__tests__/note-actions.test.ts +237 -0
- package/src/actions/__tests__/onboarding-actions.test.ts +265 -0
- package/src/actions/__tests__/project-actions.test.ts +179 -0
- package/src/actions/__tests__/prompt-actions.test.ts +213 -0
- package/src/actions/__tests__/report-actions.test.ts +246 -0
- package/src/actions/__tests__/search-code-actions.test.ts +308 -0
- package/src/actions/__tests__/task-actions-overview.test.ts +58 -0
- package/src/actions/__tests__/task-actions-pin.test.ts +79 -0
- package/src/actions/__tests__/workspace-actions.test.ts +256 -0
- package/src/components/layout/__tests__/top-bar-username.test.tsx +24 -0
- package/src/components/onboarding/__tests__/onboarding-wizard.test.tsx +185 -0
- package/src/hooks/__tests__/sse-event-reducer.test.ts +263 -0
- package/src/hooks/__tests__/use-assistant-chat.test.ts +34 -0
- package/src/hooks/__tests__/use-image-upload.test.ts +443 -0
- package/src/lib/__tests__/assistant-message-converter.test.ts +162 -0
- package/src/lib/__tests__/assistant-sessions.test.ts +253 -0
- package/src/lib/__tests__/build-multimodal-prompt.test.ts +173 -0
- package/src/lib/__tests__/config-reader.test.ts +75 -0
- package/src/lib/__tests__/diff-parser.test.ts +212 -0
- package/src/lib/__tests__/execution-summary.test.ts +237 -0
- package/src/lib/__tests__/file-serve.test.ts +178 -0
- package/src/lib/__tests__/file-utils.test.ts +177 -0
- package/src/lib/__tests__/internal-api-guard.test.ts +151 -0
- package/src/lib/__tests__/logger.test.ts +181 -0
- package/src/lib/__tests__/platform.test.ts +566 -0
- package/src/lib/__tests__/reveal-route-security.test.ts +65 -0
- package/src/lib/__tests__/schemas.test.ts +377 -0
- package/src/lib/__tests__/terminal-link-provider.test.ts +160 -0
- package/src/lib/__tests__/upload-route-security.test.ts +120 -0
- package/src/lib/ai/__tests__/capability-resolver.test.ts +71 -0
- package/src/lib/ai/__tests__/claude-cli-adapter.test.ts +103 -0
- package/src/lib/ai/__tests__/provider-registry.test.ts +74 -0
- package/src/lib/pty/__tests__/ws-server-assistant.test.ts +7 -0
- package/.next/standalone/tower/.claude/rules/process-lifecycle.md +0 -31
- package/.next/standalone/tower/.claude/rules/security.md +0 -29
- package/.next/standalone/tower/.claude/rules/ui.md +0 -105
- package/.next/standalone/tower/AGENTS.md +0 -325
- package/.next/standalone/tower/CHANGELOG.md +0 -63
- package/.next/standalone/tower/CLAUDE.md +0 -33
- package/.next/standalone/tower/LICENSE +0 -21
- package/.next/standalone/tower/README.md +0 -214
- package/.next/standalone/tower/README.zh.md +0 -212
- package/.next/standalone/tower/bin/tower.mjs +0 -180
- package/.next/standalone/tower/docs/README.md +0 -51
- package/.next/standalone/tower/docs/ai/README.md +0 -91
- package/.next/standalone/tower/docs/ai/cli-abstraction-design.md +0 -398
- package/.next/standalone/tower/docs/ai/cli-abstraction-plan.md +0 -1345
- package/.next/standalone/tower/docs/assets-notes/README.md +0 -41
- package/.next/standalone/tower/docs/assistant/README.md +0 -48
- package/.next/standalone/tower/docs/board/README.md +0 -36
- package/.next/standalone/tower/docs/diagrams/tower-ai-architecture-en.html +0 -259
- package/.next/standalone/tower/docs/diagrams/tower-ai-architecture.html +0 -259
- package/.next/standalone/tower/docs/diagrams/tower-data-model-en.html +0 -344
- package/.next/standalone/tower/docs/diagrams/tower-data-model.html +0 -344
- package/.next/standalone/tower/docs/diagrams/tower-module-map-en.html +0 -176
- package/.next/standalone/tower/docs/diagrams/tower-module-map.html +0 -176
- package/.next/standalone/tower/docs/diagrams/tower-system-architecture-en.html +0 -336
- package/.next/standalone/tower/docs/diagrams/tower-system-architecture.html +0 -336
- package/.next/standalone/tower/docs/diagrams/tower-task-lifecycle-en.html +0 -251
- package/.next/standalone/tower/docs/diagrams/tower-task-lifecycle.html +0 -251
- package/.next/standalone/tower/docs/en/guide/architecture.md +0 -79
- package/.next/standalone/tower/docs/en/guide/diagrams.md +0 -24
- package/.next/standalone/tower/docs/en/guide/getting-started.md +0 -80
- package/.next/standalone/tower/docs/en/guide/introduction.md +0 -84
- package/.next/standalone/tower/docs/en/index.md +0 -36
- package/.next/standalone/tower/docs/en/modules/ai.md +0 -110
- package/.next/standalone/tower/docs/en/modules/assets-notes.md +0 -56
- package/.next/standalone/tower/docs/en/modules/assistant.md +0 -63
- package/.next/standalone/tower/docs/en/modules/board.md +0 -44
- package/.next/standalone/tower/docs/en/modules/git.md +0 -55
- package/.next/standalone/tower/docs/en/modules/i18n.md +0 -35
- package/.next/standalone/tower/docs/en/modules/mcp.md +0 -62
- package/.next/standalone/tower/docs/en/modules/missions.md +0 -47
- package/.next/standalone/tower/docs/en/modules/project.md +0 -57
- package/.next/standalone/tower/docs/en/modules/search.md +0 -49
- package/.next/standalone/tower/docs/en/modules/settings.md +0 -63
- package/.next/standalone/tower/docs/en/modules/task.md +0 -82
- package/.next/standalone/tower/docs/en/modules/terminal.md +0 -73
- package/.next/standalone/tower/docs/en/modules/workspace.md +0 -61
- package/.next/standalone/tower/docs/git/README.md +0 -42
- package/.next/standalone/tower/docs/guide/architecture.md +0 -29
- package/.next/standalone/tower/docs/guide/diagrams.md +0 -24
- package/.next/standalone/tower/docs/guide/getting-started.md +0 -80
- package/.next/standalone/tower/docs/guide/introduction.md +0 -84
- package/.next/standalone/tower/docs/i18n/README.md +0 -23
- package/.next/standalone/tower/docs/index.md +0 -36
- package/.next/standalone/tower/docs/mcp/README.md +0 -50
- package/.next/standalone/tower/docs/missions/README.md +0 -40
- package/.next/standalone/tower/docs/modules/ai.md +0 -104
- package/.next/standalone/tower/docs/modules/assets-notes.md +0 -68
- package/.next/standalone/tower/docs/modules/assistant.md +0 -74
- package/.next/standalone/tower/docs/modules/board.md +0 -56
- package/.next/standalone/tower/docs/modules/git.md +0 -61
- package/.next/standalone/tower/docs/modules/i18n.md +0 -38
- package/.next/standalone/tower/docs/modules/mcp.md +0 -68
- package/.next/standalone/tower/docs/modules/missions.md +0 -54
- package/.next/standalone/tower/docs/modules/project.md +0 -65
- package/.next/standalone/tower/docs/modules/search.md +0 -57
- package/.next/standalone/tower/docs/modules/settings.md +0 -72
- package/.next/standalone/tower/docs/modules/task.md +0 -82
- package/.next/standalone/tower/docs/modules/terminal.md +0 -70
- package/.next/standalone/tower/docs/modules/workspace.md +0 -68
- package/.next/standalone/tower/docs/package.json +0 -11
- package/.next/standalone/tower/docs/pnpm-lock.yaml +0 -1620
- package/.next/standalone/tower/docs/postcss.config.mjs +0 -2
- package/.next/standalone/tower/docs/project/README.md +0 -45
- package/.next/standalone/tower/docs/public/banner.png +0 -0
- package/.next/standalone/tower/docs/public/diagrams/tower-ai-architecture-en.html +0 -259
- package/.next/standalone/tower/docs/public/diagrams/tower-ai-architecture.html +0 -259
- package/.next/standalone/tower/docs/public/diagrams/tower-data-model-en.html +0 -344
- package/.next/standalone/tower/docs/public/diagrams/tower-data-model.html +0 -344
- package/.next/standalone/tower/docs/public/diagrams/tower-module-map-en.html +0 -176
- package/.next/standalone/tower/docs/public/diagrams/tower-module-map.html +0 -176
- package/.next/standalone/tower/docs/public/diagrams/tower-system-architecture-en.html +0 -336
- package/.next/standalone/tower/docs/public/diagrams/tower-system-architecture.html +0 -336
- package/.next/standalone/tower/docs/public/diagrams/tower-task-lifecycle-en.html +0 -251
- package/.next/standalone/tower/docs/public/diagrams/tower-task-lifecycle.html +0 -251
- package/.next/standalone/tower/docs/search/README.md +0 -37
- package/.next/standalone/tower/docs/settings/README.md +0 -43
- package/.next/standalone/tower/docs/task/README.md +0 -67
- package/.next/standalone/tower/docs/terminal/README.md +0 -58
- package/.next/standalone/tower/docs/workspace/README.md +0 -50
- package/.next/standalone/tower/docs/zh/guide/architecture.md +0 -29
- package/.next/standalone/tower/docs/zh/guide/diagrams.md +0 -24
- package/.next/standalone/tower/docs/zh/guide/getting-started.md +0 -80
- package/.next/standalone/tower/docs/zh/guide/introduction.md +0 -66
- package/.next/standalone/tower/docs/zh/index.md +0 -23
- package/.next/standalone/tower/docs/zh/modules/ai.md +0 -104
- package/.next/standalone/tower/docs/zh/modules/assets-notes.md +0 -68
- package/.next/standalone/tower/docs/zh/modules/assistant.md +0 -74
- package/.next/standalone/tower/docs/zh/modules/board.md +0 -56
- package/.next/standalone/tower/docs/zh/modules/git.md +0 -61
- package/.next/standalone/tower/docs/zh/modules/i18n.md +0 -38
- package/.next/standalone/tower/docs/zh/modules/mcp.md +0 -68
- package/.next/standalone/tower/docs/zh/modules/missions.md +0 -54
- package/.next/standalone/tower/docs/zh/modules/project.md +0 -65
- package/.next/standalone/tower/docs/zh/modules/search.md +0 -57
- package/.next/standalone/tower/docs/zh/modules/settings.md +0 -72
- package/.next/standalone/tower/docs/zh/modules/task.md +0 -82
- package/.next/standalone/tower/docs/zh/modules/terminal.md +0 -70
- package/.next/standalone/tower/docs/zh/modules/workspace.md +0 -68
- package/.next/standalone/tower/eslint.config.mjs +0 -18
- package/.next/standalone/tower/next.config.ts +0 -15
- package/.next/standalone/tower/package.json +0 -117
- package/.next/standalone/tower/playwright.config.ts +0 -28
- package/.next/standalone/tower/pnpm-lock.yaml +0 -10524
- package/.next/standalone/tower/pnpm-workspace.yaml +0 -6
- package/.next/standalone/tower/prisma/init-fts.ts +0 -23
- package/.next/standalone/tower/prisma/schema.prisma +0 -290
- package/.next/standalone/tower/prompts/backend-developer.md +0 -20
- package/.next/standalone/tower/prompts/code-reviewer.md +0 -19
- package/.next/standalone/tower/prompts/frontend-developer.md +0 -20
- package/.next/standalone/tower/prompts/product-manager.md +0 -16
- package/.next/standalone/tower/public/banner.jpg +0 -0
- package/.next/standalone/tower/public/logo.png +0 -0
- package/.next/standalone/tower/scripts/copy-monaco.js +0 -27
- package/.next/standalone/tower/scripts/init-db.ts +0 -74
- package/.next/standalone/tower/scripts/migrate-data.ts +0 -102
- package/.next/standalone/tower/server.js +0 -38
- package/.next/standalone/tower/src/app/favicon.ico +0 -0
- package/.next/standalone/tower/src/mcp/db.ts +0 -11
- package/.next/standalone/tower/src/mcp/index.ts +0 -15
- package/.next/standalone/tower/src/mcp/server.ts +0 -52
- package/.next/standalone/tower/src/mcp/tools/knowledge-tools.ts +0 -100
- package/.next/standalone/tower/src/mcp/tools/label-tools.ts +0 -70
- package/.next/standalone/tower/src/mcp/tools/note-asset-tools.ts +0 -271
- package/.next/standalone/tower/src/mcp/tools/project-tools.ts +0 -79
- package/.next/standalone/tower/src/mcp/tools/report-tools.ts +0 -214
- package/.next/standalone/tower/src/mcp/tools/search-tools.ts +0 -32
- package/.next/standalone/tower/src/mcp/tools/task-tools.ts +0 -250
- package/.next/standalone/tower/src/mcp/tools/terminal-tools.ts +0 -154
- package/.next/standalone/tower/src/mcp/tools/workspace-tools.ts +0 -73
- package/.next/standalone/tower/tests/e2e/chat-flow.spec.ts +0 -249
- package/.next/standalone/tower/tests/e2e/notes-assets.spec.ts +0 -287
- package/.next/standalone/tower/tests/e2e/search.spec.ts +0 -186
- package/.next/standalone/tower/tests/e2e/settings-flow.spec.ts +0 -250
- package/.next/standalone/tower/tests/e2e/settings.spec.ts +0 -261
- package/.next/standalone/tower/tests/e2e/smoke.spec.ts +0 -317
- package/.next/standalone/tower/tests/e2e/task-flow.spec.ts +0 -287
- package/.next/standalone/tower/tests/e2e/workbench.spec.ts +0 -307
- package/.next/standalone/tower/tests/setup.ts +0 -15
- package/.next/standalone/tower/tests/unit/actions/agent-actions.test.ts +0 -157
- package/.next/standalone/tower/tests/unit/actions/config-actions.test.ts +0 -170
- package/.next/standalone/tower/tests/unit/actions/file-actions.test.ts +0 -283
- package/.next/standalone/tower/tests/unit/actions/git-actions.test.ts +0 -34
- package/.next/standalone/tower/tests/unit/actions/preview-actions.test.ts +0 -177
- package/.next/standalone/tower/tests/unit/actions/search-actions.test.ts +0 -358
- package/.next/standalone/tower/tests/unit/actions/task-actions.test.ts +0 -173
- package/.next/standalone/tower/tests/unit/api/diff-route.test.ts +0 -9
- package/.next/standalone/tower/tests/unit/api/file-serving.test.ts +0 -88
- package/.next/standalone/tower/tests/unit/api/merge-route.test.ts +0 -9
- package/.next/standalone/tower/tests/unit/api/stream-persist-result.test.ts +0 -7
- package/.next/standalone/tower/tests/unit/api/stream-send-back.test.ts +0 -7
- package/.next/standalone/tower/tests/unit/components/asset-item.test.tsx +0 -105
- package/.next/standalone/tower/tests/unit/components/asset-list.test.tsx +0 -51
- package/.next/standalone/tower/tests/unit/components/assets/asset-upload.test.tsx +0 -70
- package/.next/standalone/tower/tests/unit/components/board-stats.test.tsx +0 -32
- package/.next/standalone/tower/tests/unit/components/category-filter.test.tsx +0 -58
- package/.next/standalone/tower/tests/unit/components/cli-adapter-tester.test.tsx +0 -160
- package/.next/standalone/tower/tests/unit/components/create-task-dialog.test.tsx +0 -162
- package/.next/standalone/tower/tests/unit/components/file-tree.test.tsx +0 -172
- package/.next/standalone/tower/tests/unit/components/note-card.test.tsx +0 -71
- package/.next/standalone/tower/tests/unit/components/note-editor.test.tsx +0 -39
- package/.next/standalone/tower/tests/unit/components/prompts-config.test.tsx +0 -200
- package/.next/standalone/tower/tests/unit/components/search-dialog.test.tsx +0 -223
- package/.next/standalone/tower/tests/unit/components/system-config.test.tsx +0 -32
- package/.next/standalone/tower/tests/unit/hooks/hook-registration.test.ts +0 -89
- package/.next/standalone/tower/tests/unit/hooks/stop-hook.test.ts +0 -108
- package/.next/standalone/tower/tests/unit/lib/asset-actions.test.ts +0 -257
- package/.next/standalone/tower/tests/unit/lib/file-utils.test.ts +0 -102
- package/.next/standalone/tower/tests/unit/lib/fs-security.test.ts +0 -34
- package/.next/standalone/tower/tests/unit/lib/fts.test.ts +0 -214
- package/.next/standalone/tower/tests/unit/lib/git-url.test.ts +0 -258
- package/.next/standalone/tower/tests/unit/lib/instrumentation.test.ts +0 -86
- package/.next/standalone/tower/tests/unit/lib/local-path-to-api-url.test.ts +0 -40
- package/.next/standalone/tower/tests/unit/lib/mime-magic.test.ts +0 -95
- package/.next/standalone/tower/tests/unit/lib/note-actions.test.ts +0 -296
- package/.next/standalone/tower/tests/unit/lib/preview-process-manager.test.ts +0 -107
- package/.next/standalone/tower/tests/unit/lib/process-manager.test.ts +0 -10
- package/.next/standalone/tower/tests/unit/lib/pty-session.test.ts +0 -171
- package/.next/standalone/tower/tests/unit/lib/search.test.ts +0 -289
- package/.next/standalone/tower/tests/unit/lib/session-store.test.ts +0 -111
- package/.next/standalone/tower/tests/unit/lib/utils.test.ts +0 -33
- package/.next/standalone/tower/tests/unit/lib/worktree.test.ts +0 -190
- package/.next/standalone/tower/tests/unit/mcp/identify-project.test.ts +0 -217
- package/.next/standalone/tower/tests/unit/mcp/manage-assets.test.ts +0 -199
- package/.next/standalone/tower/tests/unit/mcp/manage-notes.test.ts +0 -304
- package/.next/standalone/tower/tests/unit/mcp/search-tools.test.ts +0 -186
- package/.next/standalone/tower/tests/unit/missions-merge.test.ts +0 -43
- package/.next/standalone/tower/tower-studio-0.1.1.tgz +0 -0
- package/.next/standalone/tower/tsconfig.json +0 -34
- package/.next/standalone/tower/vitest.config.ts +0 -17
- package/.next/static/a6HR9cTK7s4aKfE5dWzjz/_buildManifest.js +0 -11
- package/.next/static/a6HR9cTK7s4aKfE5dWzjz/_clientMiddlewareManifest.js +0 -1
- package/.next/static/a6HR9cTK7s4aKfE5dWzjz/_ssgManifest.js +0 -1
- package/.next/static/chunks/00z-g3x93ngvn.js +0 -1
- package/.next/static/chunks/024pdsc27tjdd.js +0 -5
- package/.next/static/chunks/02dd83gbiv778.js +0 -1
- package/.next/static/chunks/03e.4ymu.j5wl.js +0 -1
- package/.next/static/chunks/03~yq9q893hmn.js +0 -1
- package/.next/static/chunks/05-b9qqm3av9~.js +0 -1
- package/.next/static/chunks/05~v02mkan5z..js +0 -1
- package/.next/static/chunks/0abtpeymj-58i.js +0 -1
- package/.next/static/chunks/0b6us7uq72u-d.js +0 -1
- package/.next/static/chunks/0drgc-oztq6o-.css +0 -1
- package/.next/static/chunks/0eaa2lmymh2fx.js +0 -1
- package/.next/static/chunks/0gb82g.6g90mn.js +0 -1
- package/.next/static/chunks/0gnm22yv~f54b.js +0 -1
- package/.next/static/chunks/0j9qriqni_r1..js +0 -2
- package/.next/static/chunks/0k.u8sxy~e469.js +0 -4
- package/.next/static/chunks/0lnhjf2a~jaco.js +0 -83
- package/.next/static/chunks/0lvd52mjiit6s.js +0 -1
- package/.next/static/chunks/0mq0uqbbbb1~2.js +0 -1
- package/.next/static/chunks/0neevhl_o1ozu.css +0 -2
- package/.next/static/chunks/0omj~p3uxkic-.js +0 -1
- package/.next/static/chunks/0t-gr6j-c65qb.js +0 -1
- package/.next/static/chunks/0t16ai99uv4j3.js +0 -1
- package/.next/static/chunks/0tcl81ybuob5i.js +0 -1
- package/.next/static/chunks/0uqimvsni_op~.js +0 -1
- package/.next/static/chunks/0wt3kws~_yr8z.js +0 -1
- package/.next/static/chunks/0xzdu87n_for1.js +0 -5
- package/.next/static/chunks/0y0tdl.rl6v1u.js +0 -1
- package/.next/static/chunks/0z2bzovqhl2f5.js +0 -1
- package/.next/static/chunks/0z4y0x1ifgy.e.js +0 -1
- package/.next/static/chunks/0z7bwntvfhxzi.js +0 -12
- package/.next/static/chunks/102ijqpvi0z-d.js +0 -1
- package/.next/static/chunks/10n23t.1hpb-1.js +0 -1
- package/.next/static/chunks/11_e3-j5gzbj4.js +0 -1
- package/.next/static/chunks/14.ims4y7osot.js +0 -1
- package/.next/static/chunks/14xzmrt5ly6gq.js +0 -31
- package/.next/static/chunks/151wr~6x8aclx.js +0 -1
- package/.next/static/chunks/169po6_~f3-d5.js +0 -1
- package/.next/static/chunks/16w-ap~msrwpj.js +0 -1
- package/.next/static/chunks/176n7f13ve~a9.js +0 -1
- package/.next/static/chunks/17oc2l.ekcs8b.css +0 -1
- package/.next/static/chunks/turbopack-0wjmrsi.z32s0.js +0 -1
- package/.next/static/media/4fa387ec64143e14-s.0q3udbd2bu5yp.woff2 +0 -0
- package/.next/static/media/7178b3e590c64307-s.11.cyxs5p-0z~.woff2 +0 -0
- package/.next/static/media/797e433ab948586e-s.p.0.q-h669a_dqa.woff2 +0 -0
- package/.next/static/media/8a480f0b521d4e75-s.06d3mdzz5bre_.woff2 +0 -0
- package/.next/static/media/apple-icon.16aocl-s-v2qz.png +0 -0
- package/.next/static/media/bbc41e54d2fcbd21-s.0gw~uztddq1df.woff2 +0 -0
- package/.next/static/media/caa3a2e1cccd8315-s.p.16t1db8_9y2o~.woff2 +0 -0
- package/.next/static/media/favicon.0y2d6j9cou~8p.ico +0 -0
- package/.next/static/media/icon0.0a6mkq6meyird.svg +0 -1
- package/.next/static/media/icon1.04ux133882seb.png +0 -0
- /package/{.next/standalone/tower/components.json → components.json} +0 -0
- /package/{.next/standalone/tower/postcss.config.mjs → postcss.config.mjs} +0 -0
- /package/{.next/standalone/tower/prisma → prisma}/prisma/dev.db +0 -0
- /package/{.next/standalone/tower/prisma → prisma}/seed.ts +0 -0
- /package/{.next/standalone/tower/docs/public → public}/banner.jpg +0 -0
- /package/{.next/standalone/tower/docs/public → public}/logo.png +0 -0
- /package/{.next/standalone/tower/public → public}/web-app-manifest-192x192.png +0 -0
- /package/{.next/standalone/tower/public → public}/web-app-manifest-512x512.png +0 -0
- /package/{.next/standalone/tower/scripts → scripts}/init-tower.ts +0 -0
- /package/{.next/standalone/tower/scripts → scripts}/post-tool-hook.js +0 -0
- /package/{.next/standalone/tower/scripts → scripts}/session-start-hook.js +0 -0
- /package/{.next/standalone/tower/scripts → scripts}/stop-hook.js +0 -0
- /package/{.next/standalone/tower/skills → skills}/tower/SKILL.md +0 -0
- /package/{.next/standalone/tower/src → src}/actions/agent-actions.ts +0 -0
- /package/{.next/standalone/tower/src → src}/actions/agent-config-actions.ts +0 -0
- /package/{.next/standalone/tower/src → src}/actions/ai-config-actions.ts +0 -0
- /package/{.next/standalone/tower/src → src}/actions/asset-actions.ts +0 -0
- /package/{.next/standalone/tower/src → src}/actions/assistant-actions.ts +0 -0
- /package/{.next/standalone/tower/src → src}/actions/cli-profile-actions.ts +0 -0
- /package/{.next/standalone/tower/src → src}/actions/config-actions.ts +0 -0
- /package/{.next/standalone/tower/src → src}/actions/file-actions.ts +0 -0
- /package/{.next/standalone/tower/src → src}/actions/git-actions.ts +0 -0
- /package/{.next/standalone/tower/src → src}/actions/label-actions.ts +0 -0
- /package/{.next/standalone/tower/src → src}/actions/note-actions.ts +0 -0
- /package/{.next/standalone/tower/src → src}/actions/onboarding-actions.ts +0 -0
- /package/{.next/standalone/tower/src → src}/actions/preview-actions.ts +0 -0
- /package/{.next/standalone/tower/src → src}/actions/project-actions.ts +0 -0
- /package/{.next/standalone/tower/src → src}/actions/prompt-actions.ts +0 -0
- /package/{.next/standalone/tower/src → src}/actions/report-actions.ts +0 -0
- /package/{.next/standalone/tower/src → src}/actions/search-actions.ts +0 -0
- /package/{.next/standalone/tower/src → src}/actions/search-code-actions.ts +0 -0
- /package/{.next/standalone/tower/src → src}/actions/task-actions.ts +0 -0
- /package/{.next/standalone/tower/src → src}/actions/workspace-actions.ts +0 -0
- /package/{.next/standalone/tower/src → src}/app/api/adapters/test/route.ts +0 -0
- /package/{.next/standalone/tower/src → src}/app/api/browse-fs/route.ts +0 -0
- /package/{.next/standalone/tower/src → src}/app/api/files/assets/[projectId]/[filename]/route.ts +0 -0
- /package/{.next/standalone/tower/src → src}/app/api/git/route.ts +0 -0
- /package/{.next/standalone/tower/src → src}/app/api/internal/assets/[projectId]/[filename]/route.ts +0 -0
- /package/{.next/standalone/tower/src → src}/app/api/internal/assets/reveal/route.ts +0 -0
- /package/{.next/standalone/tower/src → src}/app/api/internal/assistant/chat/route.ts +0 -0
- /package/{.next/standalone/tower/src → src}/app/api/internal/assistant/images/route.ts +0 -0
- /package/{.next/standalone/tower/src → src}/app/api/internal/assistant/route.ts +0 -0
- /package/{.next/standalone/tower/src → src}/app/api/internal/assistant/sessions/route.ts +0 -0
- /package/{.next/standalone/tower/src → src}/app/api/internal/cache/[...segments]/route.ts +0 -0
- /package/{.next/standalone/tower/src → src}/app/api/internal/hooks/install/route.ts +0 -0
- /package/{.next/standalone/tower/src → src}/app/api/internal/hooks/session/route.ts +0 -0
- /package/{.next/standalone/tower/src → src}/app/api/internal/hooks/stop/route.ts +0 -0
- /package/{.next/standalone/tower/src → src}/app/api/internal/hooks/upload/route.ts +0 -0
- /package/{.next/standalone/tower/src → src}/app/api/internal/notifications/pending/route.ts +0 -0
- /package/{.next/standalone/tower/src → src}/app/api/internal/terminal/[taskId]/buffer/route.ts +0 -0
- /package/{.next/standalone/tower/src → src}/app/api/internal/terminal/[taskId]/input/route.ts +0 -0
- /package/{.next/standalone/tower/src → src}/app/api/internal/terminal/[taskId]/start/route.ts +0 -0
- /package/{.next/standalone/tower/src → src}/app/api/tasks/[taskId]/diff/route.ts +0 -0
- /package/{.next/standalone/tower/src → src}/app/api/tasks/[taskId]/merge/route.ts +0 -0
- /package/{.next/standalone/tower/src → src}/app/apple-icon.png +0 -0
- /package/{.next/standalone/tower/docs/public → src/app}/favicon.ico +0 -0
- /package/{.next/standalone/tower/src → src}/app/globals.css +0 -0
- /package/{.next/standalone/tower/src → src}/app/icon0.svg +0 -0
- /package/{.next/standalone/tower/src → src}/app/icon1.png +0 -0
- /package/{.next/standalone/tower/src → src}/app/layout.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/app/manifest.json +0 -0
- /package/{.next/standalone/tower/src → src}/app/missions/missions-client.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/app/missions/page.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/app/onboarding/page.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/app/page.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/app/settings/page.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/app/workspaces/[workspaceId]/archive/archive-page-client.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/app/workspaces/[workspaceId]/archive/page.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/app/workspaces/[workspaceId]/assets/assets-page-client.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/app/workspaces/[workspaceId]/assets/page.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/app/workspaces/[workspaceId]/board-page-client.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/app/workspaces/[workspaceId]/notes/notes-page-client.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/app/workspaces/[workspaceId]/notes/page.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/app/workspaces/[workspaceId]/page.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/app/workspaces/[workspaceId]/projects/[projectId]/page.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/app/workspaces/[workspaceId]/tasks/[taskId]/page.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/app/workspaces/[workspaceId]/tasks/[taskId]/task-page-client.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/app/workspaces/page.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/assets/asset-item.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/assets/asset-list.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/assets/asset-upload.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/assets/image-lightbox.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/assets/text-preview-dialog.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/assistant/assistant-chat-bubble.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/assistant/assistant-chat.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/assistant/assistant-panel.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/assistant/assistant-provider.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/assistant/image-preview-modal.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/assistant/image-thumbnail-strip.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/board/board-column.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/board/board-filters.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/board/board-stats.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/board/column-tasks-dialog.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/board/create-task-dialog.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/board/kanban-board.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/board/project-tabs.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/board/task-card-context-menu.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/board/task-card.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/layout/app-sidebar.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/layout/folder-browser-dialog.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/layout/layout-client.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/layout/search-dialog.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/layout/sub-page-nav.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/layout/top-bar.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/missions/grid-layout-presets.ts +0 -0
- /package/{.next/standalone/tower/src → src}/components/missions/grid-preset-picker.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/missions/merge-missions.ts +0 -0
- /package/{.next/standalone/tower/src → src}/components/missions/mission-card.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/missions/task-picker-dialog.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/notes/category-filter.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/notes/note-card.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/notes/note-editor.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/notes/note-list.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/notifications/notification-permission-banner.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/notifications/use-notification-listener.ts +0 -0
- /package/{.next/standalone/tower/src → src}/components/onboarding/guided-tour.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/onboarding/onboarding-wizard.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/onboarding/wizard-step-cli.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/onboarding/wizard-step-username.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/project/create-project-dialog.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/project/import-project-dialog.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/providers/theme-provider.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/repository/create-branch-dialog.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/repository/git-changes-panel.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/repository/git-log-panel.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/repository/git-stash-panel.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/repository/repo-sidebar.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/settings/cli-adapter-tester.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/settings/settings-page.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/task/code-editor.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/task/code-search.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/task/diff-editor.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/task/editor-git-panel.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/task/editor-tabs.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/task/execution-timeline.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/task/file-tree-context-menu.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/task/file-tree-node.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/task/file-tree.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/task/preview-panel.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/task/task-detail-panel.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/task/task-diff-view.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/task/task-file-changes.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/task/task-merge-confirm-dialog.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/task/task-metadata.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/task/task-notes-panel.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/task/task-overview-drawer.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/task/task-terminal.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/task/terminal-portal.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/task/types.ts +0 -0
- /package/{.next/standalone/tower/src → src}/components/ui/avatar.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/ui/badge.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/ui/button.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/ui/card.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/ui/command.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/ui/dialog.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/ui/dropdown-menu.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/ui/empty-state.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/ui/error-boundary.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/ui/input-group.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/ui/input.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/ui/label.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/ui/popover.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/ui/scroll-area.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/ui/segmented-control.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/ui/select.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/ui/separator.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/ui/sheet.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/ui/sonner.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/ui/switch.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/ui/tabs.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/ui/textarea.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/ui/toast.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/components/ui/tooltip.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/hooks/sse-event-reducer.ts +0 -0
- /package/{.next/standalone/tower/src → src}/hooks/use-assistant-chat.ts +0 -0
- /package/{.next/standalone/tower/src → src}/hooks/use-image-upload.ts +0 -0
- /package/{.next/standalone/tower/src → src}/instrumentation.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/ai/adapters/cli/claude-cli-adapter.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/ai/capability-resolver.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/ai/provider-registry.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/ai/providers/claude.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/ai/providers/index.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/ai/types.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/assistant-constants.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/assistant-message-converter.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/assistant-sessions.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/build-multimodal-prompt.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/claude-session.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/cli-test.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/config-defaults.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/config-reader.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/constants.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/db.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/diff-parser.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/execution-summary.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/file-serve-client.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/file-serve.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/file-utils.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/fs-security.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/fts.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/git-api.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/git-url.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/i18n/en.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/i18n/types.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/i18n/zh.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/i18n.tsx +0 -0
- /package/{.next/standalone/tower/src → src}/lib/init-tower.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/instrumentation-tasks.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/internal-api-guard.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/logger.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/mime-magic.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/platform.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/preview-process.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/pty/pty-session.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/pty/session-store.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/pty/ws-server.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/schemas.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/search.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/terminal-link-provider.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/tower-dir.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/utils.ts +0 -0
- /package/{.next/standalone/tower/src → src}/lib/worktree.ts +0 -0
- /package/{.next/standalone/tower/src → src}/stores/board-store.ts +0 -0
- /package/{.next/standalone/tower/src → src}/stores/task-execution-store.ts +0 -0
- /package/{.next/standalone/tower/src → src}/types/index.ts +0 -0
|
@@ -1,251 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="zh-CN">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
-
<title>Tower Task Lifecycle</title>
|
|
7
|
-
<style>
|
|
8
|
-
@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@300;400;500;600;700&display=swap');
|
|
9
|
-
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
10
|
-
body {
|
|
11
|
-
background: #020617;
|
|
12
|
-
font-family: 'JetBrains Mono', monospace;
|
|
13
|
-
display: flex;
|
|
14
|
-
justify-content: center;
|
|
15
|
-
align-items: center;
|
|
16
|
-
min-height: 100vh;
|
|
17
|
-
padding: 2rem;
|
|
18
|
-
}
|
|
19
|
-
svg { max-width: 1000px; width: 100%; height: auto; }
|
|
20
|
-
</style>
|
|
21
|
-
</head>
|
|
22
|
-
<body>
|
|
23
|
-
<svg viewBox="0 0 1000 880" xmlns="http://www.w3.org/2000/svg">
|
|
24
|
-
<defs>
|
|
25
|
-
<!-- Grid pattern -->
|
|
26
|
-
<pattern id="grid" width="40" height="40" patternUnits="userSpaceOnUse">
|
|
27
|
-
<path d="M 40 0 L 0 0 0 40" fill="none" stroke="rgba(148,163,184,0.06)" stroke-width="0.5"/>
|
|
28
|
-
</pattern>
|
|
29
|
-
<!-- Arrow markers -->
|
|
30
|
-
<marker id="arrow-emerald" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse">
|
|
31
|
-
<path d="M 0 0 L 10 5 L 0 10 z" fill="#34d399"/>
|
|
32
|
-
</marker>
|
|
33
|
-
<marker id="arrow-rose" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse">
|
|
34
|
-
<path d="M 0 0 L 10 5 L 0 10 z" fill="#fb7185"/>
|
|
35
|
-
</marker>
|
|
36
|
-
<marker id="arrow-orange" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse">
|
|
37
|
-
<path d="M 0 0 L 10 5 L 0 10 z" fill="#fb923c"/>
|
|
38
|
-
</marker>
|
|
39
|
-
<marker id="arrow-amber" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse">
|
|
40
|
-
<path d="M 0 0 L 10 5 L 0 10 z" fill="#fbbf24"/>
|
|
41
|
-
</marker>
|
|
42
|
-
<marker id="arrow-slate" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse">
|
|
43
|
-
<path d="M 0 0 L 10 5 L 0 10 z" fill="#94a3b8"/>
|
|
44
|
-
</marker>
|
|
45
|
-
<!-- Glow filters -->
|
|
46
|
-
<filter id="glow-emerald" x="-20%" y="-20%" width="140%" height="140%">
|
|
47
|
-
<feGaussianBlur stdDeviation="3" result="blur"/>
|
|
48
|
-
<feFlood flood-color="#34d399" flood-opacity="0.15" result="color"/>
|
|
49
|
-
<feComposite in="color" in2="blur" operator="in" result="glow"/>
|
|
50
|
-
<feMerge><feMergeNode in="glow"/><feMergeNode in="SourceGraphic"/></feMerge>
|
|
51
|
-
</filter>
|
|
52
|
-
<filter id="glow-amber" x="-20%" y="-20%" width="140%" height="140%">
|
|
53
|
-
<feGaussianBlur stdDeviation="3" result="blur"/>
|
|
54
|
-
<feFlood flood-color="#fbbf24" flood-opacity="0.15" result="color"/>
|
|
55
|
-
<feComposite in="color" in2="blur" operator="in" result="glow"/>
|
|
56
|
-
<feMerge><feMergeNode in="glow"/><feMergeNode in="SourceGraphic"/></feMerge>
|
|
57
|
-
</filter>
|
|
58
|
-
<filter id="glow-cyan" x="-20%" y="-20%" width="140%" height="140%">
|
|
59
|
-
<feGaussianBlur stdDeviation="3" result="blur"/>
|
|
60
|
-
<feFlood flood-color="#22d3ee" flood-opacity="0.15" result="color"/>
|
|
61
|
-
<feComposite in="color" in2="blur" operator="in" result="glow"/>
|
|
62
|
-
<feMerge><feMergeNode in="glow"/><feMergeNode in="SourceGraphic"/></feMerge>
|
|
63
|
-
</filter>
|
|
64
|
-
<filter id="glow-orange" x="-20%" y="-20%" width="140%" height="140%">
|
|
65
|
-
<feGaussianBlur stdDeviation="3" result="blur"/>
|
|
66
|
-
<feFlood flood-color="#fb923c" flood-opacity="0.15" result="color"/>
|
|
67
|
-
<feComposite in="color" in2="blur" operator="in" result="glow"/>
|
|
68
|
-
<feMerge><feMergeNode in="glow"/><feMergeNode in="SourceGraphic"/></feMerge>
|
|
69
|
-
</filter>
|
|
70
|
-
</defs>
|
|
71
|
-
|
|
72
|
-
<!-- Background -->
|
|
73
|
-
<rect width="1000" height="880" fill="#020617"/>
|
|
74
|
-
<rect width="1000" height="880" fill="url(#grid)"/>
|
|
75
|
-
|
|
76
|
-
<!-- ============================== -->
|
|
77
|
-
<!-- STEP 1: 创建任务 (y=30) -->
|
|
78
|
-
<!-- ============================== -->
|
|
79
|
-
<rect x="350" y="30" width="300" height="52" rx="26" fill="rgba(8,145,178,0.2)" stroke="#22d3ee" stroke-width="1.5" filter="url(#glow-cyan)"/>
|
|
80
|
-
<text x="500" y="52" text-anchor="middle" fill="#22d3ee" font-family="JetBrains Mono" font-size="14" font-weight="600">创建任务 (TODO)</text>
|
|
81
|
-
<text x="500" y="70" text-anchor="middle" fill="rgba(148,163,184,0.7)" font-family="JetBrains Mono" font-size="9">标题 / 描述 / 优先级 / 标签 / baseBranch</text>
|
|
82
|
-
|
|
83
|
-
<!-- Arrow: Step 1 → Step 2 -->
|
|
84
|
-
<rect x="490" y="82" width="20" height="18" fill="#020617"/>
|
|
85
|
-
<line x1="500" y1="82" x2="500" y2="104" stroke="#34d399" stroke-width="1.5" marker-end="url(#arrow-emerald)"/>
|
|
86
|
-
<rect x="508" y="86" width="70" height="12" fill="#020617"/>
|
|
87
|
-
<text x="512" y="96" fill="#34d399" font-family="JetBrains Mono" font-size="9" font-weight="500">点击「执行」</text>
|
|
88
|
-
|
|
89
|
-
<!-- ============================== -->
|
|
90
|
-
<!-- STEP 2: startPtyExecution() -->
|
|
91
|
-
<!-- ============================== -->
|
|
92
|
-
<rect x="310" y="108" width="380" height="130" rx="8" fill="rgba(6,78,59,0.4)" stroke="#34d399" stroke-width="1.5" filter="url(#glow-emerald)"/>
|
|
93
|
-
<text x="500" y="130" text-anchor="middle" fill="#34d399" font-family="JetBrains Mono" font-size="13" font-weight="700">startPtyExecution()</text>
|
|
94
|
-
<line x1="330" y1="140" x2="670" y2="140" stroke="rgba(52,211,153,0.2)" stroke-width="1"/>
|
|
95
|
-
<!-- Detail items -->
|
|
96
|
-
<circle cx="335" cy="157" r="2.5" fill="#34d399"/>
|
|
97
|
-
<text x="345" y="160" fill="#cbd5e1" font-family="JetBrains Mono" font-size="10">创建 TaskExecution (PENDING → RUNNING)</text>
|
|
98
|
-
<circle cx="335" cy="175" r="2.5" fill="#34d399"/>
|
|
99
|
-
<text x="345" y="178" fill="#cbd5e1" font-family="JetBrains Mono" font-size="10">Task: TODO → IN_PROGRESS</text>
|
|
100
|
-
<circle cx="335" cy="193" r="2.5" fill="#34d399"/>
|
|
101
|
-
<text x="345" y="196" fill="#cbd5e1" font-family="JetBrains Mono" font-size="10">创建 Git Worktree (如有 baseBranch)</text>
|
|
102
|
-
<circle cx="335" cy="211" r="2.5" fill="#34d399"/>
|
|
103
|
-
<text x="345" y="214" fill="#cbd5e1" font-family="JetBrains Mono" font-size="10">加载 CliProfile · 注入 TOWER_TASK_ID</text>
|
|
104
|
-
<circle cx="335" cy="229" r="2.5" fill="#34d399"/>
|
|
105
|
-
<text x="345" y="232" fill="#cbd5e1" font-family="JetBrains Mono" font-size="10">创建 PTY 会话 (session-store)</text>
|
|
106
|
-
|
|
107
|
-
<!-- Arrow: Step 2 → Step 3 -->
|
|
108
|
-
<rect x="490" y="238" width="20" height="22" fill="#020617"/>
|
|
109
|
-
<line x1="500" y1="238" x2="500" y2="264" stroke="#34d399" stroke-width="1.5" marker-end="url(#arrow-emerald)"/>
|
|
110
|
-
|
|
111
|
-
<!-- ============================== -->
|
|
112
|
-
<!-- STEP 3: 运行中 (IN_PROGRESS) -->
|
|
113
|
-
<!-- ============================== -->
|
|
114
|
-
<rect x="310" y="268" width="380" height="120" rx="8" fill="rgba(76,29,149,0.25)" stroke="#a78bfa" stroke-width="1.5"/>
|
|
115
|
-
<!-- Status badge -->
|
|
116
|
-
<rect x="420" y="276" width="160" height="20" rx="10" fill="rgba(52,211,153,0.15)" stroke="#34d399" stroke-width="1"/>
|
|
117
|
-
<text x="500" y="290" text-anchor="middle" fill="#34d399" font-family="JetBrains Mono" font-size="10" font-weight="600">运行中 (IN_PROGRESS)</text>
|
|
118
|
-
<line x1="330" y1="302" x2="670" y2="302" stroke="rgba(167,139,250,0.2)" stroke-width="1"/>
|
|
119
|
-
<!-- Detail items -->
|
|
120
|
-
<circle cx="335" cy="319" r="2.5" fill="#a78bfa"/>
|
|
121
|
-
<text x="345" y="322" fill="#cbd5e1" font-family="JetBrains Mono" font-size="10">Claude CLI 在终端运行 · 用户可交互输入</text>
|
|
122
|
-
<circle cx="335" cy="337" r="2.5" fill="#a78bfa"/>
|
|
123
|
-
<text x="345" y="340" fill="#cbd5e1" font-family="JetBrains Mono" font-size="10">WebSocket 中继 I/O → xterm.js 实时显示</text>
|
|
124
|
-
<circle cx="335" cy="355" r="2.5" fill="#a78bfa"/>
|
|
125
|
-
<text x="345" y="358" fill="#cbd5e1" font-family="JetBrains Mono" font-size="10">SessionStart Hook → 上报 sessionId</text>
|
|
126
|
-
<circle cx="335" cy="373" r="2.5" fill="#a78bfa"/>
|
|
127
|
-
<text x="345" y="376" fill="#cbd5e1" font-family="JetBrains Mono" font-size="10">PostToolUse Hook → 捕获文件变更</text>
|
|
128
|
-
|
|
129
|
-
<!-- Arrow: Step 3 → Step 4 -->
|
|
130
|
-
<rect x="490" y="388" width="20" height="22" fill="#020617"/>
|
|
131
|
-
<line x1="500" y1="388" x2="500" y2="414" stroke="#fbbf24" stroke-width="1.5" marker-end="url(#arrow-amber)"/>
|
|
132
|
-
|
|
133
|
-
<!-- ============================== -->
|
|
134
|
-
<!-- STEP 4: Decision Diamond -->
|
|
135
|
-
<!-- ============================== -->
|
|
136
|
-
<g filter="url(#glow-amber)">
|
|
137
|
-
<polygon points="500,418 590,468 500,518 410,468" fill="rgba(120,53,15,0.3)" stroke="#fbbf24" stroke-width="1.5"/>
|
|
138
|
-
</g>
|
|
139
|
-
<text x="500" y="462" text-anchor="middle" fill="#fbbf24" font-family="JetBrains Mono" font-size="13" font-weight="600">exitCode?</text>
|
|
140
|
-
<text x="500" y="478" text-anchor="middle" fill="rgba(251,191,36,0.6)" font-family="JetBrains Mono" font-size="9">进程退出</text>
|
|
141
|
-
|
|
142
|
-
<!-- Left arrow: != 0 retry → back to Step 3 -->
|
|
143
|
-
<rect x="290" y="458" width="116" height="20" fill="#020617"/>
|
|
144
|
-
<line x1="410" y1="468" x2="296" y2="468" stroke="#fb7185" stroke-width="1.5" marker-end="url(#arrow-rose)"/>
|
|
145
|
-
<text x="340" y="462" text-anchor="middle" fill="#fb7185" font-family="JetBrains Mono" font-size="9" font-weight="500">!= 0 重试</text>
|
|
146
|
-
<!-- Up from left to Step 3 -->
|
|
147
|
-
<line x1="296" y1="468" x2="296" y2="328" stroke="#fb7185" stroke-width="1.5"/>
|
|
148
|
-
<line x1="296" y1="328" x2="306" y2="328" stroke="#fb7185" stroke-width="1.5" marker-end="url(#arrow-rose)"/>
|
|
149
|
-
|
|
150
|
-
<!-- Right arrow: == 0 success → Step 5 -->
|
|
151
|
-
<rect x="594" y="458" width="116" height="20" fill="#020617"/>
|
|
152
|
-
<line x1="590" y1="468" x2="700" y2="468" stroke="#34d399" stroke-width="1.5"/>
|
|
153
|
-
<text x="650" y="462" text-anchor="middle" fill="#34d399" font-family="JetBrains Mono" font-size="9" font-weight="500">== 0 成功</text>
|
|
154
|
-
<!-- Down from right then back to center for Step 5 -->
|
|
155
|
-
<line x1="700" y1="468" x2="700" y2="540" stroke="#34d399" stroke-width="1.5"/>
|
|
156
|
-
<line x1="700" y1="540" x2="504" y2="540" stroke="#34d399" stroke-width="1.5" marker-end="url(#arrow-emerald)"/>
|
|
157
|
-
|
|
158
|
-
<!-- ============================== -->
|
|
159
|
-
<!-- STEP 5: 评审阶段 (IN_REVIEW) -->
|
|
160
|
-
<!-- ============================== -->
|
|
161
|
-
<rect x="310" y="530" width="380" height="90" rx="8" fill="rgba(76,29,149,0.25)" stroke="#c4b5fd" stroke-width="1.5"/>
|
|
162
|
-
<!-- Status badge -->
|
|
163
|
-
<rect x="410" y="538" width="180" height="20" rx="10" fill="rgba(139,92,246,0.2)" stroke="#a78bfa" stroke-width="1"/>
|
|
164
|
-
<text x="500" y="552" text-anchor="middle" fill="#c4b5fd" font-family="JetBrains Mono" font-size="10" font-weight="600">评审阶段 (IN_REVIEW)</text>
|
|
165
|
-
<line x1="330" y1="564" x2="670" y2="564" stroke="rgba(196,181,253,0.2)" stroke-width="1"/>
|
|
166
|
-
<circle cx="335" cy="580" r="2.5" fill="#c4b5fd"/>
|
|
167
|
-
<text x="345" y="583" fill="#cbd5e1" font-family="JetBrains Mono" font-size="10">生成小总结 + Dreaming 洞察</text>
|
|
168
|
-
<circle cx="335" cy="598" r="2.5" fill="#c4b5fd"/>
|
|
169
|
-
<text x="345" y="601" fill="#cbd5e1" font-family="JetBrains Mono" font-size="10">查看 Diff (worktree vs base branch)</text>
|
|
170
|
-
|
|
171
|
-
<!-- Exit Down: 合并 → DONE -->
|
|
172
|
-
<rect x="490" y="620" width="20" height="22" fill="#020617"/>
|
|
173
|
-
<line x1="500" y1="620" x2="500" y2="646" stroke="#34d399" stroke-width="1.5" marker-end="url(#arrow-emerald)"/>
|
|
174
|
-
<rect x="400" y="650" width="200" height="40" rx="20" fill="rgba(6,78,59,0.4)" stroke="#34d399" stroke-width="1.5" filter="url(#glow-emerald)"/>
|
|
175
|
-
<text x="500" y="668" text-anchor="middle" fill="#34d399" font-family="JetBrains Mono" font-size="11" font-weight="600">DONE ✓</text>
|
|
176
|
-
<text x="500" y="682" text-anchor="middle" fill="rgba(52,211,153,0.6)" font-family="JetBrains Mono" font-size="8">合并 · 清理 Worktree</text>
|
|
177
|
-
|
|
178
|
-
<!-- Exit Left: 重新执行 → loops to Step 2 -->
|
|
179
|
-
<rect x="218" y="565" width="88" height="16" fill="#020617"/>
|
|
180
|
-
<line x1="310" y1="575" x2="232" y2="575" stroke="#fb923c" stroke-width="1.5" stroke-dasharray="5,3"/>
|
|
181
|
-
<text x="268" y="571" text-anchor="middle" fill="#fb923c" font-family="JetBrains Mono" font-size="8" font-weight="500">重新执行</text>
|
|
182
|
-
<line x1="232" y1="575" x2="232" y2="173" stroke="#fb923c" stroke-width="1.5" stroke-dasharray="5,3"/>
|
|
183
|
-
<line x1="232" y1="173" x2="306" y2="173" stroke="#fb923c" stroke-width="1.5" stroke-dasharray="5,3" marker-end="url(#arrow-orange)"/>
|
|
184
|
-
|
|
185
|
-
<!-- Exit Right: CANCELLED -->
|
|
186
|
-
<rect x="694" y="565" width="80" height="16" fill="#020617"/>
|
|
187
|
-
<line x1="690" y1="575" x2="740" y2="575" stroke="#fb7185" stroke-width="1.5" marker-end="url(#arrow-rose)"/>
|
|
188
|
-
<rect x="744" y="555" width="120" height="40" rx="20" fill="rgba(159,18,57,0.3)" stroke="#fb7185" stroke-width="1.5"/>
|
|
189
|
-
<text x="804" y="579" text-anchor="middle" fill="#fb7185" font-family="JetBrains Mono" font-size="11" font-weight="600">CANCELLED</text>
|
|
190
|
-
|
|
191
|
-
<!-- ============================== -->
|
|
192
|
-
<!-- SIDE PANEL: 恢复执行 (left) -->
|
|
193
|
-
<!-- ============================== -->
|
|
194
|
-
<rect x="50" y="290" width="195" height="70" rx="6" fill="rgba(120,53,15,0.15)" stroke="#fb923c" stroke-width="1.5" stroke-dasharray="6,3" filter="url(#glow-orange)"/>
|
|
195
|
-
<text x="148" y="312" text-anchor="middle" fill="#fb923c" font-family="JetBrains Mono" font-size="11" font-weight="600">恢复执行</text>
|
|
196
|
-
<text x="148" y="330" text-anchor="middle" fill="rgba(251,146,60,0.7)" font-family="JetBrains Mono" font-size="9">--resume sessionId</text>
|
|
197
|
-
<text x="148" y="346" text-anchor="middle" fill="rgba(251,146,60,0.7)" font-family="JetBrains Mono" font-size="9">--continue (最近会话)</text>
|
|
198
|
-
<!-- Arrow right into Step 3 -->
|
|
199
|
-
<line x1="245" y1="328" x2="306" y2="328" stroke="#fb923c" stroke-width="1.5" stroke-dasharray="5,3" marker-end="url(#arrow-orange)"/>
|
|
200
|
-
|
|
201
|
-
<!-- ============================== -->
|
|
202
|
-
<!-- LEGEND (bottom-right) -->
|
|
203
|
-
<!-- ============================== -->
|
|
204
|
-
<!-- Card 1: 执行流程 -->
|
|
205
|
-
<rect x="50" y="720" width="280" height="55" rx="6" fill="rgba(30,41,59,0.5)" stroke="rgba(52,211,153,0.3)" stroke-width="1"/>
|
|
206
|
-
<circle cx="68" cy="738" r="5" fill="#34d399"/>
|
|
207
|
-
<text x="80" y="742" fill="#34d399" font-family="JetBrains Mono" font-size="10" font-weight="600">执行流程</text>
|
|
208
|
-
<text x="68" y="762" fill="rgba(203,213,225,0.6)" font-family="JetBrains Mono" font-size="8">创建→执行→运行→退出→评审→完成</text>
|
|
209
|
-
|
|
210
|
-
<!-- Card 2: 自动化 -->
|
|
211
|
-
<rect x="360" y="720" width="280" height="55" rx="6" fill="rgba(30,41,59,0.5)" stroke="rgba(251,191,36,0.3)" stroke-width="1"/>
|
|
212
|
-
<circle cx="378" cy="738" r="5" fill="#fbbf24"/>
|
|
213
|
-
<text x="390" y="742" fill="#fbbf24" font-family="JetBrains Mono" font-size="10" font-weight="600">自动化</text>
|
|
214
|
-
<text x="378" y="756" fill="rgba(203,213,225,0.6)" font-family="JetBrains Mono" font-size="8">Worktree 自动创建</text>
|
|
215
|
-
<text x="378" y="768" fill="rgba(203,213,225,0.6)" font-family="JetBrains Mono" font-size="8">环境变量注入 · Hook 捕获 sessionId</text>
|
|
216
|
-
|
|
217
|
-
<!-- Card 3: 恢复机制 -->
|
|
218
|
-
<rect x="670" y="720" width="280" height="55" rx="6" fill="rgba(30,41,59,0.5)" stroke="rgba(251,146,60,0.3)" stroke-width="1"/>
|
|
219
|
-
<circle cx="688" cy="738" r="5" fill="#fb923c"/>
|
|
220
|
-
<text x="700" y="742" fill="#fb923c" font-family="JetBrains Mono" font-size="10" font-weight="600">恢复机制</text>
|
|
221
|
-
<text x="688" y="756" fill="rgba(203,213,225,0.6)" font-family="JetBrains Mono" font-size="8">--resume 恢复指定会话</text>
|
|
222
|
-
<text x="688" y="768" fill="rgba(203,213,225,0.6)" font-family="JetBrains Mono" font-size="8">--continue 继续最近会话</text>
|
|
223
|
-
|
|
224
|
-
<!-- ============================== -->
|
|
225
|
-
<!-- STATUS BADGES ROW -->
|
|
226
|
-
<!-- ============================== -->
|
|
227
|
-
<rect x="170" y="800" width="660" height="24" rx="12" fill="rgba(30,41,59,0.3)" stroke="rgba(148,163,184,0.1)" stroke-width="1"/>
|
|
228
|
-
<!-- TODO -->
|
|
229
|
-
<circle cx="230" cy="812" r="4" fill="#22d3ee"/>
|
|
230
|
-
<text x="240" y="816" fill="#22d3ee" font-family="JetBrains Mono" font-size="9" font-weight="500">TODO</text>
|
|
231
|
-
<!-- IN_PROGRESS -->
|
|
232
|
-
<circle cx="320" cy="812" r="4" fill="#34d399"/>
|
|
233
|
-
<text x="330" y="816" fill="#34d399" font-family="JetBrains Mono" font-size="9" font-weight="500">IN_PROGRESS</text>
|
|
234
|
-
<!-- IN_REVIEW -->
|
|
235
|
-
<circle cx="460" cy="812" r="4" fill="#a78bfa"/>
|
|
236
|
-
<text x="470" y="816" fill="#a78bfa" font-family="JetBrains Mono" font-size="9" font-weight="500">IN_REVIEW</text>
|
|
237
|
-
<!-- DONE -->
|
|
238
|
-
<circle cx="580" cy="812" r="4" fill="#34d399"/>
|
|
239
|
-
<text x="590" y="816" fill="#34d399" font-family="JetBrains Mono" font-size="9" font-weight="500">DONE</text>
|
|
240
|
-
<!-- CANCELLED -->
|
|
241
|
-
<circle cx="650" cy="812" r="4" fill="#fb7185"/>
|
|
242
|
-
<text x="660" y="816" fill="#fb7185" font-family="JetBrains Mono" font-size="9" font-weight="500">CANCELLED</text>
|
|
243
|
-
|
|
244
|
-
<!-- ============================== -->
|
|
245
|
-
<!-- FOOTER -->
|
|
246
|
-
<!-- ============================== -->
|
|
247
|
-
<text x="500" y="858" text-anchor="middle" fill="rgba(148,163,184,0.35)" font-family="JetBrains Mono" font-size="10">Tower Task Lifecycle · 5 Status States</text>
|
|
248
|
-
|
|
249
|
-
</svg>
|
|
250
|
-
</body>
|
|
251
|
-
</html>
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Architecture
|
|
3
|
-
description: Tower system architecture and design overview
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## System Overview
|
|
7
|
-
|
|
8
|
-
Tower is built on Next.js 16 with the App Router pattern, using a full-stack architecture where the frontend and backend coexist in a single codebase.
|
|
9
|
-
|
|
10
|
-
## Data Architecture
|
|
11
|
-
|
|
12
|
-
```
|
|
13
|
-
Workspace (id, name, description?)
|
|
14
|
-
├── Project[] (id, name, alias?, description?, type, gitUrl?, localPath?)
|
|
15
|
-
│ └── Task[] (id, title, description?, status, priority, order)
|
|
16
|
-
│ ├── TaskLabel[] → Label
|
|
17
|
-
│ ├── TaskExecution[]
|
|
18
|
-
│ └── TaskMessage[]
|
|
19
|
-
└── Label[] (id, name, color, isBuiltin)
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
- **Cascade deletes**: Deleting a Workspace removes all its Projects; deleting a Project removes all its Tasks
|
|
23
|
-
- **SQLite + Prisma**: Lightweight single-file database with WAL mode and busy_timeout=5000
|
|
24
|
-
|
|
25
|
-
## Runtime Architecture
|
|
26
|
-
|
|
27
|
-
```
|
|
28
|
-
Browser (Next.js App)
|
|
29
|
-
├── Server Actions (src/actions/)
|
|
30
|
-
├── API Routes (src/app/api/)
|
|
31
|
-
├── WebSocket Client (xterm.js)
|
|
32
|
-
│
|
|
33
|
-
Next.js Server
|
|
34
|
-
├── Prisma ORM → SQLite
|
|
35
|
-
├── PTY Session Store (in-memory, keyed by taskId)
|
|
36
|
-
├── WebSocket Server (ws-server.ts, port 3001)
|
|
37
|
-
└── MCP Server (stdio transport)
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
## Key Subsystems
|
|
41
|
-
|
|
42
|
-
### PTY Terminal System
|
|
43
|
-
|
|
44
|
-
Each task gets an independent PTY session running Claude CLI. Communication flows through WebSocket for real-time terminal I/O:
|
|
45
|
-
|
|
46
|
-
```
|
|
47
|
-
Client (xterm.js) ←→ WebSocket ←→ ws-server.ts ←→ PTY Session (node-pty)
|
|
48
|
-
↕
|
|
49
|
-
session-store.ts
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
### MCP Server
|
|
53
|
-
|
|
54
|
-
Exposes 24+ tools via the Model Context Protocol, allowing external AI agents to manage workspaces, projects, tasks, and interact with running terminals. Runs as a stdio transport process.
|
|
55
|
-
|
|
56
|
-
### Internal HTTP Bridge
|
|
57
|
-
|
|
58
|
-
MCP stdio processes cannot access in-memory PTY sessions directly. Internal HTTP routes bridge this gap:
|
|
59
|
-
- `GET /api/internal/terminal/[taskId]/buffer` -- Read terminal output
|
|
60
|
-
- `POST /api/internal/terminal/[taskId]/input` -- Send terminal input
|
|
61
|
-
- Restricted to localhost only
|
|
62
|
-
|
|
63
|
-
## Module Dependency Overview
|
|
64
|
-
|
|
65
|
-
Tower is composed of 14 modules:
|
|
66
|
-
|
|
67
|
-
| Layer | Modules |
|
|
68
|
-
|-------|---------|
|
|
69
|
-
| **UI** | Board, Missions, Assistant, Search, Settings |
|
|
70
|
-
| **Core** | Workspace, Project, Task, Terminal |
|
|
71
|
-
| **Integration** | MCP, Git, AI, Assets & Notes |
|
|
72
|
-
| **Cross-cutting** | I18n |
|
|
73
|
-
|
|
74
|
-
## Process Lifecycle
|
|
75
|
-
|
|
76
|
-
- **PTY Sessions**: One active session per task, 2h keepalive while running, 5min after exit, SIGTERM cleanup
|
|
77
|
-
- **WebSocket**: Batched sender flushed on close, polling timer cleared on error
|
|
78
|
-
- **Database**: Prisma `$disconnect()` on SIGTERM/SIGINT
|
|
79
|
-
- **Timers**: All `setTimeout`/`setInterval` cleared in cleanup handlers
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Diagrams
|
|
3
|
-
description: Interactive architecture and design diagrams for Tower
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## System Architecture
|
|
7
|
-
|
|
8
|
-
<iframe src="/tower/diagrams/tower-system-architecture.html" width="100%" height="600" style="border: 1px solid var(--vp-c-border); border-radius: 8px;" />
|
|
9
|
-
|
|
10
|
-
## Data Model
|
|
11
|
-
|
|
12
|
-
<iframe src="/tower/diagrams/tower-data-model.html" width="100%" height="600" style="border: 1px solid var(--vp-c-border); border-radius: 8px;" />
|
|
13
|
-
|
|
14
|
-
## Task Lifecycle
|
|
15
|
-
|
|
16
|
-
<iframe src="/tower/diagrams/tower-task-lifecycle.html" width="100%" height="600" style="border: 1px solid var(--vp-c-border); border-radius: 8px;" />
|
|
17
|
-
|
|
18
|
-
## AI Architecture
|
|
19
|
-
|
|
20
|
-
<iframe src="/tower/diagrams/tower-ai-architecture.html" width="100%" height="600" style="border: 1px solid var(--vp-c-border); border-radius: 8px;" />
|
|
21
|
-
|
|
22
|
-
## Module Dependencies
|
|
23
|
-
|
|
24
|
-
<iframe src="/tower/diagrams/tower-module-deps.html" width="100%" height="600" style="border: 1px solid var(--vp-c-border); border-radius: 8px;" />
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Getting Started
|
|
3
|
-
description: Steps to install and run the Tower project
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## Prerequisites
|
|
7
|
-
|
|
8
|
-
- **Node.js** >= 22
|
|
9
|
-
- **pnpm** (package manager)
|
|
10
|
-
|
|
11
|
-
## Installation
|
|
12
|
-
|
|
13
|
-
### 1. Clone the Repository
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
git clone <repo-url> tower
|
|
17
|
-
cd tower
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
### 2. Install Dependencies
|
|
21
|
-
|
|
22
|
-
```bash
|
|
23
|
-
pnpm install
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
### 3. Configure Environment Variables
|
|
27
|
-
|
|
28
|
-
```bash
|
|
29
|
-
cp .env.example .env
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
Edit the `.env` file as needed. The main configuration is `DATABASE_URL` (SQLite database path).
|
|
33
|
-
|
|
34
|
-
### 4. Initialize the Database
|
|
35
|
-
|
|
36
|
-
```bash
|
|
37
|
-
# Sync Prisma schema to the database
|
|
38
|
-
pnpm db:push
|
|
39
|
-
|
|
40
|
-
# Import seed data
|
|
41
|
-
pnpm db:seed
|
|
42
|
-
|
|
43
|
-
# Create full-text search index
|
|
44
|
-
pnpm db:init-fts
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
### 5. Start the Development Server
|
|
48
|
-
|
|
49
|
-
```bash
|
|
50
|
-
pnpm dev
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
Open your browser and visit [http://localhost:3000](http://localhost:3000).
|
|
54
|
-
|
|
55
|
-
## MCP Integration
|
|
56
|
-
|
|
57
|
-
To expose Tower's tool capabilities to external AI agents, add the following to your MCP client configuration:
|
|
58
|
-
|
|
59
|
-
```json
|
|
60
|
-
{
|
|
61
|
-
"mcpServers": {
|
|
62
|
-
"tower": {
|
|
63
|
-
"command": "npx",
|
|
64
|
-
"args": ["tsx", "<project-root>/src/mcp/index.ts"]
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
Replace `<project-root>` with the absolute path to the project.
|
|
71
|
-
|
|
72
|
-
## Common Commands
|
|
73
|
-
|
|
74
|
-
| Command | Description |
|
|
75
|
-
|---------|-------------|
|
|
76
|
-
| `pnpm dev` | Start development server (Webpack mode, required for node-pty) |
|
|
77
|
-
| `pnpm db:push` | Sync Prisma schema |
|
|
78
|
-
| `pnpm db:seed` | Import seed data |
|
|
79
|
-
| `pnpm db:init-fts` | Create full-text search index |
|
|
80
|
-
| `pnpm test:run` | Run tests |
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Introduction
|
|
3
|
-
description: What Tower is, core concepts, and tech stack overview
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## What is Tower
|
|
7
|
-
|
|
8
|
-
Tower is an AI task orchestration platform for individual developers. It integrates Kanban board management, terminal interaction, code editing, and an MCP toolchain into a unified environment for task management and AI agent collaboration.
|
|
9
|
-
|
|
10
|
-
## Why Tower
|
|
11
|
-
|
|
12
|
-
AI has changed how developers work. Before, you'd write code step by step, adjust requirements when issues came up, and keep everything in sync at your own pace.
|
|
13
|
-
|
|
14
|
-
That's no longer the case. AI now handles most of the coding, and your role has shifted from *writing code* to *reviewing code*. You're also juggling more projects than ever — running several in parallel has become the norm.
|
|
15
|
-
|
|
16
|
-
This creates real problems:
|
|
17
|
-
|
|
18
|
-
- **Constant interruptions** — A new task or change request can drop in at any moment, breaking your train of thought. You finish reviewing a PR, switch to debug something in another project, and by the time you're back, you've lost your place.
|
|
19
|
-
- **Lost context** — Bouncing between tasks means decisions, changes, and lessons learned slip through the cracks. There's nowhere to capture them, and by the time you need them again, they're gone.
|
|
20
|
-
- **No way to review** — Conversations, code changes, terminal logs — they're scattered everywhere. When you want to look back, summarize, or extract lessons from a completed task, there's nothing to work with.
|
|
21
|
-
|
|
22
|
-
Tower exists to fix this: **give every task a complete record**.
|
|
23
|
-
|
|
24
|
-
Conversations, terminal logs, code diffs, file assets, execution summaries — everything is automatically captured in one place. You can switch between tasks without losing context, and once a task is done, use AI-powered review (Dreaming) to distill problems and insights into structured knowledge.
|
|
25
|
-
|
|
26
|
-
Down the road, this feeds into a personal knowledge base — making everything searchable and reusable.
|
|
27
|
-
|
|
28
|
-
## Core Concepts
|
|
29
|
-
|
|
30
|
-
Tower's data model follows a three-level hierarchy:
|
|
31
|
-
|
|
32
|
-
```
|
|
33
|
-
Workspace → Project → Task
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
- **Workspace**: Top-level container that manages the namespace for projects and labels
|
|
37
|
-
- **Project**: Belongs to a Workspace, holds tasks and code repositories. Supports both regular and Git-based projects
|
|
38
|
-
- **Task**: The core work unit that flows across Kanban columns via status (TODO / IN_PROGRESS / IN_REVIEW / DONE / CANCELLED)
|
|
39
|
-
|
|
40
|
-
Each Task can be associated with labels, execution records, and messages, with support for automated AI agent execution.
|
|
41
|
-
|
|
42
|
-
## Tech Stack
|
|
43
|
-
|
|
44
|
-
| Technology | Description |
|
|
45
|
-
|------------|-------------|
|
|
46
|
-
| **Next.js 16** | App Router, full-stack framework |
|
|
47
|
-
| **TypeScript** | Type safety |
|
|
48
|
-
| **SQLite + Prisma** | Lightweight database + ORM |
|
|
49
|
-
| **TailwindCSS 4** | Utility-first CSS |
|
|
50
|
-
| **shadcn (base-nova)** | UI component library |
|
|
51
|
-
| **xterm.js + node-pty** | Terminal emulation |
|
|
52
|
-
| **Monaco Editor** | Code editor |
|
|
53
|
-
| **MCP Protocol** | AI tool protocol |
|
|
54
|
-
|
|
55
|
-
## Feature Overview
|
|
56
|
-
|
|
57
|
-
- **Kanban Board** -- Drag-and-drop sorting, label filtering, priority management
|
|
58
|
-
- **AI Terminal** -- Independent Claude CLI terminal session per task
|
|
59
|
-
- **Code Editing** -- Monaco Editor with multi-tab editing and Git diff view
|
|
60
|
-
- **MCP Toolchain** -- 24+ tools for external AI agent integration
|
|
61
|
-
- **Multi-task Monitoring** -- Missions panel for real-time monitoring of multiple executions
|
|
62
|
-
- **Global Search** -- Full-text search across tasks, projects, and repositories
|
|
63
|
-
- **Internationalization** -- Chinese and English bilingual support
|
|
64
|
-
|
|
65
|
-
## Module Documentation
|
|
66
|
-
|
|
67
|
-
Tower consists of the following 14 modules:
|
|
68
|
-
|
|
69
|
-
| Module | Description |
|
|
70
|
-
|--------|-------------|
|
|
71
|
-
| [Workspace](../modules/workspace) | Workspace management |
|
|
72
|
-
| [Project](../modules/project) | Project management |
|
|
73
|
-
| [Task](../modules/task) | Task management |
|
|
74
|
-
| [Board](../modules/board) | Kanban UI |
|
|
75
|
-
| [Terminal](../modules/terminal) | PTY terminal system |
|
|
76
|
-
| [Assistant](../modules/assistant) | AI assistant chat |
|
|
77
|
-
| [Missions](../modules/missions) | Multi-task monitoring |
|
|
78
|
-
| [Search](../modules/search) | Global search |
|
|
79
|
-
| [Settings](../modules/settings) | System configuration |
|
|
80
|
-
| [MCP](../modules/mcp) | MCP Server |
|
|
81
|
-
| [Git](../modules/git) | Git integration |
|
|
82
|
-
| [Assets & Notes](../modules/assets-notes) | Assets and notes |
|
|
83
|
-
| [AI](../modules/ai) | AI capability layer |
|
|
84
|
-
| [I18n](../modules/i18n) | Internationalization |
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
layout: home
|
|
3
|
-
hero:
|
|
4
|
-
name: Tower
|
|
5
|
-
text: AI Task Orchestration Platform
|
|
6
|
-
tagline: Kanban + Terminal + Code Editor + MCP Toolchain
|
|
7
|
-
image:
|
|
8
|
-
src: /logo.png
|
|
9
|
-
alt: Tower Logo
|
|
10
|
-
actions:
|
|
11
|
-
- theme: brand
|
|
12
|
-
text: Get Started
|
|
13
|
-
link: /en/guide/getting-started
|
|
14
|
-
- theme: alt
|
|
15
|
-
text: Modules
|
|
16
|
-
link: /en/modules/workspace
|
|
17
|
-
features:
|
|
18
|
-
- icon: 📋
|
|
19
|
-
title: Kanban Board
|
|
20
|
-
details: Drag-and-drop task cards with pinning, labels, priority filters, and context menus
|
|
21
|
-
- icon: 🤖
|
|
22
|
-
title: AI Terminal
|
|
23
|
-
details: xterm.js + Claude CLI for real-time interactive execution with auto-generated summaries
|
|
24
|
-
- icon: 🔧
|
|
25
|
-
title: MCP Toolchain
|
|
26
|
-
details: 24 MCP tools across 7 categories for seamless external AI agent integration
|
|
27
|
-
- icon: ✏️
|
|
28
|
-
title: Code Editor
|
|
29
|
-
details: Monaco Editor with multi-tab editing, syntax highlighting, and Ctrl+S save
|
|
30
|
-
- icon: 📡
|
|
31
|
-
title: Mission Control
|
|
32
|
-
details: Multi-task parallel monitoring dashboard with grid layouts and live terminal output
|
|
33
|
-
- icon: 🔍
|
|
34
|
-
title: Global Search
|
|
35
|
-
details: FTS5 full-text search across tasks, projects, notes, and assets
|
|
36
|
-
---
|