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,82 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Task
|
|
3
|
-
description: Core work unit with status flow, labels, executions, and messages
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Task Module
|
|
7
|
-
|
|
8
|
-
**Slug:** `task`
|
|
9
|
-
|
|
10
|
-
## Overview
|
|
11
|
-
|
|
12
|
-
Tasks are the core work unit in Tower, displayed as Kanban cards on the board. Each task moves through 5 status states (TODO, IN_PROGRESS, IN_REVIEW, DONE, CANCELLED) to represent workflow progress, and can be assigned one of 4 priority levels (LOW, MEDIUM, HIGH, CRITICAL). Tasks support custom labels for flexible categorization and can be pinned to stay at the top of their column.
|
|
13
|
-
|
|
14
|
-
When creating a task, you can set a base branch for Git worktree isolation — each task execution then works on an independent branch without affecting the main codebase. Clicking "Execute" on a task spawns a PTY terminal running Claude CLI in that isolated environment. On completion, Tower auto-generates an execution summary and Dreaming insights that capture what was accomplished and learned.
|
|
15
|
-
|
|
16
|
-
## Details
|
|
17
|
-
|
|
18
|
-
- **Status workflow**: Tasks flow through 5 columns on the Kanban board. Dragging a card between columns or using the context menu updates the status.
|
|
19
|
-
- **Priority levels**: LOW, MEDIUM, HIGH, and CRITICAL. Priority badges are visible on task cards for quick scanning.
|
|
20
|
-
- **Labels**: Assigned from the workspace's label pool. Label assignment is a full replacement — pass the complete set of desired labels each time.
|
|
21
|
-
- **Worktree isolation**: When `useWorktree` is enabled and a `baseBranch` is specified, each task execution runs in a separate Git worktree with its own branch.
|
|
22
|
-
- **Execution lifecycle**: Each task can have multiple execution records tracking agent runs, with session IDs for resumption support.
|
|
23
|
-
|
|
24
|
-
## Data Model
|
|
25
|
-
|
|
26
|
-
```
|
|
27
|
-
Task (id, title, description?, status, priority, order)
|
|
28
|
-
├── TaskLabel[] → Label
|
|
29
|
-
├── TaskExecution[]
|
|
30
|
-
└── TaskMessage[]
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
- `status`: `TODO` | `IN_PROGRESS` | `IN_REVIEW` | `DONE` | `CANCELLED`
|
|
34
|
-
- `priority`: `LOW` | `MEDIUM` | `HIGH` | `CRITICAL`
|
|
35
|
-
- `order`: Sorting within Kanban columns (ascending, lower values appear higher)
|
|
36
|
-
- `projectId`: FK to Project, cascade delete
|
|
37
|
-
|
|
38
|
-
## File Reference
|
|
39
|
-
|
|
40
|
-
### Server Actions (`src/actions/task-actions.ts`)
|
|
41
|
-
|
|
42
|
-
| Function | Description |
|
|
43
|
-
|----------|-------------|
|
|
44
|
-
| `createTask({ title, projectId, ... })` | Create task |
|
|
45
|
-
| `updateTask(taskId, data)` | Update task |
|
|
46
|
-
| `updateTaskStatus(taskId, status)` | Status transition |
|
|
47
|
-
| `deleteTask(taskId)` | Delete task |
|
|
48
|
-
| `getProjectTasks(projectId)` | Get all tasks for a project |
|
|
49
|
-
|
|
50
|
-
### Pages
|
|
51
|
-
|
|
52
|
-
| Route | File | Description |
|
|
53
|
-
|-------|------|-------------|
|
|
54
|
-
| `/workspaces/[id]/tasks/[taskId]` | `task-page-client.tsx` | Task detail page |
|
|
55
|
-
|
|
56
|
-
### Components (`src/components/task/`)
|
|
57
|
-
|
|
58
|
-
| Component | Description |
|
|
59
|
-
|-----------|-------------|
|
|
60
|
-
| `task-detail-panel.tsx` | Task metadata panel |
|
|
61
|
-
| `task-terminal.tsx` | Terminal UI |
|
|
62
|
-
| `task-diff-view.tsx` | Git diff view |
|
|
63
|
-
| `task-merge-confirm-dialog.tsx` | Merge confirmation |
|
|
64
|
-
| `code-editor.tsx` | Code editor |
|
|
65
|
-
| `file-tree.tsx` | File tree |
|
|
66
|
-
| `execution-timeline.tsx` | Execution history timeline |
|
|
67
|
-
|
|
68
|
-
### MCP Tools (`src/mcp/tools/task-tools.ts`)
|
|
69
|
-
|
|
70
|
-
- `list_tasks` / `create_task` / `update_task` / `move_task` / `delete_task`
|
|
71
|
-
|
|
72
|
-
### Label Subsystem
|
|
73
|
-
|
|
74
|
-
- Server Actions: `src/actions/label-actions.ts`
|
|
75
|
-
- MCP Tools: `src/mcp/tools/label-tools.ts`
|
|
76
|
-
- `set_task_labels` / `setTaskLabels` perform a full replacement (not a merge)
|
|
77
|
-
|
|
78
|
-
## Constraints
|
|
79
|
-
|
|
80
|
-
- The `order` field controls Kanban sorting; do not break existing ordering when creating tasks
|
|
81
|
-
- Label replacement is a full replacement operation; pass the complete `labelIds` array
|
|
82
|
-
- Deleting a task cascades to its Messages and Executions
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Terminal
|
|
3
|
-
description: PTY terminal system providing independent Claude CLI sessions per task
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Terminal Module
|
|
7
|
-
|
|
8
|
-
**Slug:** `terminal`
|
|
9
|
-
|
|
10
|
-
## Overview
|
|
11
|
-
|
|
12
|
-
Each task gets its own terminal session rendered via xterm.js directly in the browser. Terminal I/O flows in real time over WebSocket with full ANSI rendering — colors, progress bars, cursor movement, and all standard terminal escape sequences are supported. You can type directly into the terminal for interactive keyboard input, enabling live conversation with Claude CLI.
|
|
13
|
-
|
|
14
|
-
When a client disconnects, the session stays alive with auto-keepalive (2 hours while running, 5 minutes after the process exits). Multiple clients can view the same terminal session simultaneously — for example, the task detail page and the Missions monitoring panel can both display the same live terminal output.
|
|
15
|
-
|
|
16
|
-
## Details
|
|
17
|
-
|
|
18
|
-
- **Architecture**: The browser-side xterm.js terminal connects via WebSocket to a Node.js server (`ws-server.ts`), which bridges to a real PTY session managed by node-pty. The `session-store.ts` module keeps an in-memory registry of all active sessions indexed by task ID.
|
|
19
|
-
- **One session per task**: Each task can only have one active PTY session at a time. Starting a new session for a task that already has one will fail.
|
|
20
|
-
- **Concurrency limit**: The maximum number of simultaneous PTY sessions is controlled by the `system.maxConcurrentExecutions` config setting (default 20).
|
|
21
|
-
- **Environment injection**: Every PTY session automatically receives `AI_MANAGER_TASK_ID` and `CALLBACK_URL` environment variables. Additional env vars come from the active CLI Profile.
|
|
22
|
-
- **Internal HTTP bridge**: Since MCP runs as a separate stdio process, it cannot access in-memory PTY sessions directly. Instead, it uses localhost-only HTTP endpoints to read terminal output and send input.
|
|
23
|
-
|
|
24
|
-
## Architecture
|
|
25
|
-
|
|
26
|
-
```
|
|
27
|
-
Client (xterm.js) <-> WebSocket <-> ws-server.ts <-> PTY Session (node-pty)
|
|
28
|
-
|
|
|
29
|
-
session-store.ts
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
## File Reference
|
|
33
|
-
|
|
34
|
-
### Core Library (`src/lib/pty/`)
|
|
35
|
-
|
|
36
|
-
| File | Description |
|
|
37
|
-
|------|-------------|
|
|
38
|
-
| `pty-session.ts` | PTY session management (node-pty wrapper) |
|
|
39
|
-
| `session-store.ts` | In-memory PTY session store, indexed by taskId |
|
|
40
|
-
| `ws-server.ts` | WebSocket server, port configured via `terminal.wsPort` |
|
|
41
|
-
|
|
42
|
-
### API Routes
|
|
43
|
-
|
|
44
|
-
| Route | Method | Description |
|
|
45
|
-
|-------|--------|-------------|
|
|
46
|
-
| `/api/internal/terminal/[taskId]/start` | POST | Start a PTY session |
|
|
47
|
-
| `/api/internal/terminal/[taskId]/buffer` | GET | Get terminal output buffer |
|
|
48
|
-
| `/api/internal/terminal/[taskId]/input` | POST | Send input to terminal |
|
|
49
|
-
|
|
50
|
-
### Server Actions (`src/actions/agent-actions.ts`)
|
|
51
|
-
|
|
52
|
-
| Function | Description |
|
|
53
|
-
|----------|-------------|
|
|
54
|
-
| `startPtyExecution(taskId, prompt)` | Start Claude CLI PTY |
|
|
55
|
-
| `resumePtyExecution(taskId, sessionId)` | Resume session |
|
|
56
|
-
| `stopPtyExecution(taskId)` | Stop session |
|
|
57
|
-
|
|
58
|
-
### Components
|
|
59
|
-
|
|
60
|
-
- `src/components/task/task-terminal.tsx` -- xterm.js terminal UI
|
|
61
|
-
|
|
62
|
-
### MCP Tools (`src/mcp/tools/terminal-tools.ts`)
|
|
63
|
-
|
|
64
|
-
- `get_task_terminal_output` / `send_task_terminal_input` / `get_task_execution_status`
|
|
65
|
-
|
|
66
|
-
## Constraints
|
|
67
|
-
|
|
68
|
-
- Only one active session per taskId
|
|
69
|
-
- Concurrency limit configured via `system.maxConcurrentExecutions` (default 20)
|
|
70
|
-
- Disconnect keepalive: 2h while running / 5min after exit
|
|
71
|
-
- All sessions automatically cleaned up on SIGTERM
|
|
72
|
-
- `AI_MANAGER_TASK_ID` and `CALLBACK_URL` are injected into PTY environment variables
|
|
73
|
-
- Do not modify `process.env`; use `envOverrides` instead
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Workspace
|
|
3
|
-
description: Top-level container for managing projects and labels
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Workspace Module
|
|
7
|
-
|
|
8
|
-
**Slug:** `workspace`
|
|
9
|
-
|
|
10
|
-
## Overview
|
|
11
|
-
|
|
12
|
-
Workspaces are the top-level containers in Tower for organizing teams or project groups. Each workspace has its own label pool that is shared across all projects within it. You can rename workspaces, edit their descriptions, and delete them — deletion cascades to all projects and tasks inside.
|
|
13
|
-
|
|
14
|
-
## Details
|
|
15
|
-
|
|
16
|
-
- **Label pool**: Every workspace maintains a set of custom labels. These labels are available to all tasks across every project in that workspace. Built-in labels (global) are also accessible but cannot be deleted.
|
|
17
|
-
- **Cascade delete**: Removing a workspace permanently deletes all of its projects, tasks, executions, and messages. This operation is irreversible.
|
|
18
|
-
- **Project grouping**: Use workspaces to separate concerns — for example, one workspace per team, per client, or per product line.
|
|
19
|
-
|
|
20
|
-
## Data Model
|
|
21
|
-
|
|
22
|
-
```
|
|
23
|
-
Workspace (id, name, description?)
|
|
24
|
-
├── Project[]
|
|
25
|
-
└── Label[]
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
- `id`: cuid
|
|
29
|
-
- `name`: required
|
|
30
|
-
- `description`: optional
|
|
31
|
-
- Cascade delete: Deleting a Workspace removes all its Projects and Labels
|
|
32
|
-
|
|
33
|
-
## File Reference
|
|
34
|
-
|
|
35
|
-
### Server Actions (`src/actions/workspace-actions.ts`)
|
|
36
|
-
|
|
37
|
-
| Function | Description |
|
|
38
|
-
|----------|-------------|
|
|
39
|
-
| `getWorkspaces()` | List all workspaces |
|
|
40
|
-
| `getWorkspaceById(id)` | Get by ID |
|
|
41
|
-
| `createWorkspace({ name, description? })` | Create |
|
|
42
|
-
| `updateWorkspace(id, data)` | Update |
|
|
43
|
-
| `deleteWorkspace(id)` | Delete (cascade) |
|
|
44
|
-
| `getWorkspacesWithProjects()` | With project list |
|
|
45
|
-
| `getWorkspacesWithRecentTasks(limit?)` | With recent tasks |
|
|
46
|
-
|
|
47
|
-
### Pages
|
|
48
|
-
|
|
49
|
-
| Route | File | Description |
|
|
50
|
-
|-------|------|-------------|
|
|
51
|
-
| `/workspaces` | `src/app/workspaces/page.tsx` | Workspace list |
|
|
52
|
-
| `/workspaces/[id]` | `src/app/workspaces/[workspaceId]/` | Workspace detail (board) |
|
|
53
|
-
|
|
54
|
-
### MCP Tools (`src/mcp/tools/workspace-tools.ts`)
|
|
55
|
-
|
|
56
|
-
- `list_workspaces` / `create_workspace` / `update_workspace` / `delete_workspace`
|
|
57
|
-
|
|
58
|
-
## Constraints
|
|
59
|
-
|
|
60
|
-
- Labels under a Workspace are split into builtin (global) and workspace-scoped
|
|
61
|
-
- Builtin labels cannot be deleted
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
# Git 模块
|
|
2
|
-
|
|
3
|
-
**Slug:** `git`
|
|
4
|
-
|
|
5
|
-
## 概述
|
|
6
|
-
|
|
7
|
-
Git 操作集成,包括仓库克隆、Worktree 隔离、Diff 解析、Merge 操作。
|
|
8
|
-
|
|
9
|
-
## 文件清单
|
|
10
|
-
|
|
11
|
-
### Server Actions (`src/actions/git-actions.ts`)
|
|
12
|
-
|
|
13
|
-
Git 克隆、分支管理等操作。
|
|
14
|
-
|
|
15
|
-
### API Routes
|
|
16
|
-
|
|
17
|
-
| 路由 | 说明 |
|
|
18
|
-
|------|------|
|
|
19
|
-
| `/api/git/route.ts` | Git 操作 API |
|
|
20
|
-
| `/api/tasks/[taskId]/diff/route.ts` | 获取任务 diff |
|
|
21
|
-
| `/api/tasks/[taskId]/merge/route.ts` | 执行 merge |
|
|
22
|
-
|
|
23
|
-
### 核心库
|
|
24
|
-
|
|
25
|
-
| 文件 | 说明 |
|
|
26
|
-
|------|------|
|
|
27
|
-
| `lib/git-url.ts` | Git URL 解析和规范化 |
|
|
28
|
-
| `lib/worktree.ts` | Git worktree 创建和管理 |
|
|
29
|
-
| `lib/diff-parser.ts` | Git diff 解析器 |
|
|
30
|
-
|
|
31
|
-
### 组件
|
|
32
|
-
|
|
33
|
-
| 组件 | 说明 |
|
|
34
|
-
|------|------|
|
|
35
|
-
| `task-diff-view.tsx` | Diff 可视化 |
|
|
36
|
-
| `task-merge-confirm-dialog.tsx` | Merge 确认对话框 |
|
|
37
|
-
|
|
38
|
-
## Worktree 机制
|
|
39
|
-
|
|
40
|
-
- 每个 Task 执行可在独立 worktree 中进行
|
|
41
|
-
- `TaskExecution.worktreePath` / `worktreeBranch` 记录隔离信息
|
|
42
|
-
- 创建任务时通过 `useWorktree` / `baseBranch` 参数控制
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: 架构概览
|
|
3
|
-
description: Tower 系统的分层架构设计
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## 分层架构
|
|
7
|
-
|
|
8
|
-
Tower 采用分层架构设计,从上到下分为:
|
|
9
|
-
|
|
10
|
-
- **UI 层** — Next.js App Router 页面和 React 组件,使用 shadcn 组件库和 TailwindCSS
|
|
11
|
-
- **状态管理层** — Zustand store 管理客户端状态(看板、执行等)
|
|
12
|
-
- **Server Actions 层** — Next.js Server Actions 处理业务逻辑和数据操作
|
|
13
|
-
- **数据访问层** — Prisma ORM 操作 SQLite 数据库
|
|
14
|
-
- **PTY 层** — node-pty 管理终端会话,WebSocket 实时传输 I/O
|
|
15
|
-
- **MCP 层** — MCP Server 通过 stdio 向外部 AI Agent 暴露工具
|
|
16
|
-
|
|
17
|
-
## 核心数据流
|
|
18
|
-
|
|
19
|
-
```
|
|
20
|
-
Workspace → Project → Task → TaskExecution
|
|
21
|
-
↓
|
|
22
|
-
PTY Session (Claude CLI)
|
|
23
|
-
↓
|
|
24
|
-
WebSocket → xterm.js
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
## 架构图
|
|
28
|
-
|
|
29
|
-
详细架构图请参见 [架构图](./diagrams) 页面,包括系统架构、数据模型、任务生命周期、AI 架构和模块依赖关系图。
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: 架构图
|
|
3
|
-
description: Tower 系统架构、数据模型、任务生命周期等可视化图表
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## 系统架构
|
|
7
|
-
|
|
8
|
-
<iframe src="/tower/diagrams/tower-system-architecture.html" width="100%" height="600" style="border: 1px solid #333; border-radius: 8px;" />
|
|
9
|
-
|
|
10
|
-
## 数据模型
|
|
11
|
-
|
|
12
|
-
<iframe src="/tower/diagrams/tower-data-model.html" width="100%" height="600" style="border: 1px solid #333; border-radius: 8px;" />
|
|
13
|
-
|
|
14
|
-
## 任务生命周期
|
|
15
|
-
|
|
16
|
-
<iframe src="/tower/diagrams/tower-task-lifecycle.html" width="100%" height="600" style="border: 1px solid #333; border-radius: 8px;" />
|
|
17
|
-
|
|
18
|
-
## AI 架构
|
|
19
|
-
|
|
20
|
-
<iframe src="/tower/diagrams/tower-ai-architecture.html" width="100%" height="600" style="border: 1px solid #333; border-radius: 8px;" />
|
|
21
|
-
|
|
22
|
-
## 模块依赖
|
|
23
|
-
|
|
24
|
-
<iframe src="/tower/diagrams/tower-module-map.html" width="100%" height="600" style="border: 1px solid #333; border-radius: 8px;" />
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: 快速开始
|
|
3
|
-
description: 安装和运行 Tower 项目的步骤
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## 前置条件
|
|
7
|
-
|
|
8
|
-
- **Node.js** >= 22
|
|
9
|
-
- **pnpm**(包管理器)
|
|
10
|
-
|
|
11
|
-
## 安装步骤
|
|
12
|
-
|
|
13
|
-
### 1. 克隆仓库
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
git clone <repo-url> tower
|
|
17
|
-
cd tower
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
### 2. 安装依赖
|
|
21
|
-
|
|
22
|
-
```bash
|
|
23
|
-
pnpm install
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
### 3. 配置环境变量
|
|
27
|
-
|
|
28
|
-
```bash
|
|
29
|
-
cp .env.example .env
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
根据需要编辑 `.env` 文件,主要配置 `DATABASE_URL`(SQLite 数据库路径)。
|
|
33
|
-
|
|
34
|
-
### 4. 初始化数据库
|
|
35
|
-
|
|
36
|
-
```bash
|
|
37
|
-
# 同步 Prisma schema 到数据库
|
|
38
|
-
pnpm db:push
|
|
39
|
-
|
|
40
|
-
# 导入种子数据
|
|
41
|
-
pnpm db:seed
|
|
42
|
-
|
|
43
|
-
# 创建全文搜索索引
|
|
44
|
-
pnpm db:init-fts
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
### 5. 启动开发服务器
|
|
48
|
-
|
|
49
|
-
```bash
|
|
50
|
-
pnpm dev
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
打开浏览器访问 [http://localhost:3000](http://localhost:3000)。
|
|
54
|
-
|
|
55
|
-
## MCP 集成
|
|
56
|
-
|
|
57
|
-
如需将 Tower 的工具能力暴露给外部 AI Agent,在 MCP 客户端配置中添加:
|
|
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
|
-
将 `<project-root>` 替换为项目的绝对路径。
|
|
71
|
-
|
|
72
|
-
## 常用命令
|
|
73
|
-
|
|
74
|
-
| 命令 | 说明 |
|
|
75
|
-
|------|------|
|
|
76
|
-
| `pnpm dev` | 启动开发服务器(Webpack 模式,node-pty 需要) |
|
|
77
|
-
| `pnpm db:push` | 同步 Prisma schema |
|
|
78
|
-
| `pnpm db:seed` | 导入种子数据 |
|
|
79
|
-
| `pnpm db:init-fts` | 创建全文搜索索引 |
|
|
80
|
-
| `pnpm test:run` | 运行测试 |
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: 介绍
|
|
3
|
-
description: Tower 是什么,核心概念与技术栈总览
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## 什么是 Tower
|
|
7
|
-
|
|
8
|
-
Tower 是一个面向个人开发者的 AI 任务调度平台,将看板管理、终端交互、代码编辑和 MCP 工具链整合在一起,提供统一的任务管理和 AI Agent 协作环境。
|
|
9
|
-
|
|
10
|
-
## 为什么做 Tower
|
|
11
|
-
|
|
12
|
-
AI 改变了开发者的工作方式。以前做项目,你一步步写代码,遇到问题改需求,同步更新代码,节奏是自己掌控的。
|
|
13
|
-
|
|
14
|
-
现在不一样了。AI 接管了大部分编码工作,人的角色从「写代码」变成了「审代码」。项目数量也多了——同时推进几个项目成了常态。
|
|
15
|
-
|
|
16
|
-
问题随之而来:
|
|
17
|
-
|
|
18
|
-
- **频繁打断** — 随时可能插进来一个新任务或修改,打断你当前的思路。刚看完一个 PR,转头去处理另一个项目的 bug,回来已经忘了刚才看到哪了。
|
|
19
|
-
- **上下文丢失** — 一会儿做这个一会儿做那个,某些改动、决策、踩过的坑,没有地方记录,等回过头来已经想不起来了。
|
|
20
|
-
- **无法复盘** — 任务执行过程中产生的对话、代码变更、终端日志散落各处,后续想要回顾、总结、沉淀经验,无从下手。
|
|
21
|
-
|
|
22
|
-
Tower 要解决的就是这件事:**给每个任务一个完整的记录空间**。
|
|
23
|
-
|
|
24
|
-
任务的对话记录、终端日志、代码变更、文件资产、执行摘要——全部自动沉淀在一个地方。你可以随时切换任务而不怕丢失上下文,也可以在任务完成后借助 AI 做复盘分析(Dreaming),把遇到的问题和经验提炼成结构化的知识。
|
|
25
|
-
|
|
26
|
-
后续还会接入个人知识库,让这些沉淀真正可查询、可复用。
|
|
27
|
-
|
|
28
|
-
## 核心概念
|
|
29
|
-
|
|
30
|
-
Tower 的数据模型采用三层层级结构:
|
|
31
|
-
|
|
32
|
-
```
|
|
33
|
-
Workspace → Project → Task
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
- **Workspace(工作区)**:顶层容器,管理项目和标签的命名空间
|
|
37
|
-
- **Project(项目)**:属于某个 Workspace,承载任务和代码仓库,支持普通项目和 Git 项目
|
|
38
|
-
- **Task(任务)**:核心工作单元,通过状态(TODO / IN_PROGRESS / IN_REVIEW / DONE / CANCELLED)在看板列间流转
|
|
39
|
-
|
|
40
|
-
每个 Task 可以关联标签、执行记录和消息,支持 AI Agent 自动执行。
|
|
41
|
-
|
|
42
|
-
## 技术栈
|
|
43
|
-
|
|
44
|
-
| 技术 | 说明 |
|
|
45
|
-
|------|------|
|
|
46
|
-
| **Next.js 16** | App Router,全栈框架 |
|
|
47
|
-
| **TypeScript** | 类型安全 |
|
|
48
|
-
| **SQLite + Prisma** | 轻量数据库 + ORM |
|
|
49
|
-
| **TailwindCSS 4** | 原子化 CSS |
|
|
50
|
-
| **shadcn (base-nova)** | UI 组件库 |
|
|
51
|
-
| **xterm.js + node-pty** | 终端模拟 |
|
|
52
|
-
| **Monaco Editor** | 代码编辑器 |
|
|
53
|
-
| **MCP Protocol** | AI 工具协议 |
|
|
54
|
-
|
|
55
|
-
## 功能总览
|
|
56
|
-
|
|
57
|
-
- **看板管理** — 拖拽排序、标签筛选、优先级管理
|
|
58
|
-
- **AI 终端** — 每个任务独立的 Claude CLI 终端会话
|
|
59
|
-
- **代码编辑** — Monaco Editor 多标签编辑、Git Diff 视图
|
|
60
|
-
- **MCP 工具链** — 24+ 工具供外部 AI Agent 调用
|
|
61
|
-
- **多任务监控** — Missions 面板实时监控多个执行
|
|
62
|
-
- **全局搜索** — 任务、项目、仓库全文搜索
|
|
63
|
-
- **国际化** — 中英文双语支持
|
|
64
|
-
|
|
65
|
-
## 模块文档
|
|
66
|
-
|
|
67
|
-
Tower 由以下 14 个模块组成:
|
|
68
|
-
|
|
69
|
-
| 模块 | 说明 |
|
|
70
|
-
|------|------|
|
|
71
|
-
| [Workspace](../modules/workspace) | 工作区管理 |
|
|
72
|
-
| [Project](../modules/project) | 项目管理 |
|
|
73
|
-
| [Task](../modules/task) | 任务管理 |
|
|
74
|
-
| [Board](../modules/board) | 看板 UI |
|
|
75
|
-
| [Terminal](../modules/terminal) | PTY 终端系统 |
|
|
76
|
-
| [Assistant](../modules/assistant) | AI 助手聊天 |
|
|
77
|
-
| [Missions](../modules/missions) | 多任务监控 |
|
|
78
|
-
| [Search](../modules/search) | 全局搜索 |
|
|
79
|
-
| [Settings](../modules/settings) | 系统配置 |
|
|
80
|
-
| [MCP](../modules/mcp) | MCP Server |
|
|
81
|
-
| [Git](../modules/git) | Git 集成 |
|
|
82
|
-
| [Assets & Notes](../modules/assets-notes) | 资产和笔记 |
|
|
83
|
-
| [AI](../modules/ai) | AI 能力层 |
|
|
84
|
-
| [I18n](../modules/i18n) | 国际化 |
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
# I18n 模块
|
|
2
|
-
|
|
3
|
-
**Slug:** `i18n`
|
|
4
|
-
|
|
5
|
-
## 概述
|
|
6
|
-
|
|
7
|
-
国际化系统,支持中文和英文双语。所有用户可见文本使用 `t("key")` 函数。
|
|
8
|
-
|
|
9
|
-
## 文件清单
|
|
10
|
-
|
|
11
|
-
### 核心库 (`src/lib/i18n/`)
|
|
12
|
-
|
|
13
|
-
i18n 配置和资源管理。
|
|
14
|
-
|
|
15
|
-
### 使用
|
|
16
|
-
|
|
17
|
-
- `src/lib/i18n.tsx` — i18n Provider 和 hook
|
|
18
|
-
|
|
19
|
-
## 规范
|
|
20
|
-
|
|
21
|
-
- 所有用户可见文本必须用 `t("key")` 包裹
|
|
22
|
-
- 同时维护 zh/en 两套翻译
|
|
23
|
-
- Key 命名格式:`模块.功能.描述`
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
layout: home
|
|
3
|
-
hero:
|
|
4
|
-
name: Tower
|
|
5
|
-
text: AI 任务调度平台
|
|
6
|
-
tagline: 看板 + 终端 + 代码编辑器 + MCP 工具链
|
|
7
|
-
image:
|
|
8
|
-
src: /logo.png
|
|
9
|
-
alt: Tower Logo
|
|
10
|
-
actions:
|
|
11
|
-
- theme: brand
|
|
12
|
-
text: 快速开始
|
|
13
|
-
link: /guide/getting-started
|
|
14
|
-
- theme: alt
|
|
15
|
-
text: 模块文档
|
|
16
|
-
link: /modules/workspace
|
|
17
|
-
features:
|
|
18
|
-
- icon: 📋
|
|
19
|
-
title: 看板管理
|
|
20
|
-
details: 拖拽任务卡片,支持置顶、标签、优先级筛选,右键快捷操作
|
|
21
|
-
- icon: 🤖
|
|
22
|
-
title: AI 终端
|
|
23
|
-
details: xterm.js + Claude CLI,实时交互执行任务,自动生成总结与洞察
|
|
24
|
-
- icon: 🔧
|
|
25
|
-
title: MCP 工具链
|
|
26
|
-
details: 24 个 MCP 工具,7 大类别,支持外部 AI Agent 无缝调用
|
|
27
|
-
- icon: ✏️
|
|
28
|
-
title: 代码编辑器
|
|
29
|
-
details: Monaco Editor,多标签编辑,语法高亮,Ctrl+S 保存
|
|
30
|
-
- icon: 📡
|
|
31
|
-
title: Mission Control
|
|
32
|
-
details: 多任务并行监控面板,网格布局,实时终端输出
|
|
33
|
-
- icon: 🔍
|
|
34
|
-
title: 全局搜索
|
|
35
|
-
details: FTS5 全文搜索,覆盖任务、项目、笔记、资产
|
|
36
|
-
---
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
# MCP 模块
|
|
2
|
-
|
|
3
|
-
**Slug:** `mcp`
|
|
4
|
-
|
|
5
|
-
## 概述
|
|
6
|
-
|
|
7
|
-
Model Context Protocol Server,向外部 AI Agent 暴露 Tower 的工具能力。通过 stdio 传输协议运行。
|
|
8
|
-
|
|
9
|
-
## 启动方式
|
|
10
|
-
|
|
11
|
-
```json
|
|
12
|
-
{
|
|
13
|
-
"mcpServers": {
|
|
14
|
-
"tower": {
|
|
15
|
-
"command": "npx",
|
|
16
|
-
"args": ["tsx", "<project-root>/src/mcp/index.ts"]
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
## 文件清单
|
|
23
|
-
|
|
24
|
-
### 核心 (`src/mcp/`)
|
|
25
|
-
|
|
26
|
-
| 文件 | 说明 |
|
|
27
|
-
|------|------|
|
|
28
|
-
| `server.ts` | MCP Server 初始化和配置 |
|
|
29
|
-
| `db.ts` | MCP 专用数据库连接 |
|
|
30
|
-
| `index.ts` | 入口和导出 |
|
|
31
|
-
|
|
32
|
-
### 工具模块 (`src/mcp/tools/`)
|
|
33
|
-
|
|
34
|
-
| 文件 | 工具数 | 说明 |
|
|
35
|
-
|------|--------|------|
|
|
36
|
-
| `workspace-tools.ts` | 4 | Workspace CRUD |
|
|
37
|
-
| `project-tools.ts` | 5 | Project CRUD + identify |
|
|
38
|
-
| `task-tools.ts` | 5 | Task CRUD + move |
|
|
39
|
-
| `label-tools.ts` | 4 | Label CRUD + set_task_labels |
|
|
40
|
-
| `terminal-tools.ts` | 3 | 终端输出/输入/状态 |
|
|
41
|
-
| `search-tools.ts` | 1 | 全局搜索 |
|
|
42
|
-
| `report-tools.ts` | 2 | daily_summary / daily_todo |
|
|
43
|
-
| `note-asset-tools.ts` | — | 笔记和资产管理 |
|
|
44
|
-
|
|
45
|
-
## 内部 HTTP 桥接
|
|
46
|
-
|
|
47
|
-
MCP stdio 进程无法访问内存中的 PTY 会话,通过内部 HTTP 路由桥接:
|
|
48
|
-
- `GET /api/internal/terminal/[taskId]/buffer`
|
|
49
|
-
- `POST /api/internal/terminal/[taskId]/input`
|
|
50
|
-
- localhost 限定
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
# Missions 模块
|
|
2
|
-
|
|
3
|
-
**Slug:** `missions`
|
|
4
|
-
|
|
5
|
-
## 概述
|
|
6
|
-
|
|
7
|
-
多任务监控面板,跨工作区展示所有运行中的 Task 执行,嵌入 xterm.js 终端实时查看。
|
|
8
|
-
|
|
9
|
-
## 功能
|
|
10
|
-
|
|
11
|
-
- 网格布局预设(1×1, 2×1, 3×2, 2×2, 4×2, 3×3),持久化到 localStorage
|
|
12
|
-
- Workspace 过滤下拉框
|
|
13
|
-
- 启动新执行 / 恢复历史会话(Task Picker)
|
|
14
|
-
- 停止执行(卡片移除)/ 自然完成自动移除
|
|
15
|
-
- 拖拽排序(dnd-kit)
|
|
16
|
-
- 4 秒轮询实时更新
|
|
17
|
-
|
|
18
|
-
## 文件清单
|
|
19
|
-
|
|
20
|
-
### 页面
|
|
21
|
-
|
|
22
|
-
| 路由 | 文件 | 说明 |
|
|
23
|
-
|------|------|------|
|
|
24
|
-
| `/missions` | `missions-client.tsx` | Missions 主页面 |
|
|
25
|
-
|
|
26
|
-
### 组件 (`src/components/missions/`)
|
|
27
|
-
|
|
28
|
-
| 组件 | 说明 |
|
|
29
|
-
|------|------|
|
|
30
|
-
| `mission-card.tsx` | 任务执行卡片(含终端) |
|
|
31
|
-
| `grid-preset-picker.tsx` | 网格布局选择器 |
|
|
32
|
-
| `task-picker-dialog.tsx` | 任务选择对话框 |
|
|
33
|
-
|
|
34
|
-
### Server Actions
|
|
35
|
-
|
|
36
|
-
- `getActiveExecutionsAcrossWorkspaces()` — 获取所有 RUNNING 执行
|
|
37
|
-
|
|
38
|
-
### 状态管理 (`src/stores/task-execution-store.ts`)
|
|
39
|
-
|
|
40
|
-
Zustand store,管理活跃执行状态。
|