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.
Files changed (641) hide show
  1. package/bin/tower.mjs +5 -15
  2. package/next.config.ts +1 -8
  3. package/package.json +10 -11
  4. package/prisma/dev.db +0 -0
  5. package/public/vs/_commonjsHelpers-CT9FvmAN.js +1 -0
  6. package/public/vs/abap-D-t0cyap.js +1 -0
  7. package/public/vs/apex-CcIm7xu6.js +1 -0
  8. package/public/vs/assets/css.worker-HnVq6Ewq.js +93 -0
  9. package/public/vs/assets/editor.worker-Be8ye1pW.js +26 -0
  10. package/public/vs/assets/html.worker-B51mlPHg.js +470 -0
  11. package/public/vs/assets/json.worker-DKiEKt88.js +58 -0
  12. package/public/vs/assets/ts.worker-CMbG-7ft.js +67731 -0
  13. package/public/vs/azcli-BA0tQDCg.js +1 -0
  14. package/public/vs/basic-languages/monaco.contribution.js +1 -0
  15. package/public/vs/bat-C397hTD6.js +1 -0
  16. package/public/vs/bicep-DF5aW17k.js +2 -0
  17. package/public/vs/cameligo-plsz8qhj.js +1 -0
  18. package/public/vs/clojure-Y2auQMzK.js +1 -0
  19. package/public/vs/coffee-Bu45yuWE.js +1 -0
  20. package/public/vs/cpp-CkKPQIni.js +1 -0
  21. package/public/vs/csharp-CX28MZyh.js +1 -0
  22. package/public/vs/csp-D8uWnyxW.js +1 -0
  23. package/public/vs/css-CaeNmE3S.js +3 -0
  24. package/public/vs/cssMode-CjiAH6dQ.js +1 -0
  25. package/public/vs/cypher-DVThT8BS.js +1 -0
  26. package/public/vs/dart-CmGfCvrO.js +1 -0
  27. package/public/vs/dockerfile-CZqqYdch.js +1 -0
  28. package/public/vs/ecl-30fUercY.js +1 -0
  29. package/public/vs/editor/editor.main.css +1 -0
  30. package/public/vs/editor/editor.main.js +5 -0
  31. package/public/vs/editor.api-CalNCsUg.js +903 -0
  32. package/public/vs/elixir-xjPaIfzF.js +1 -0
  33. package/public/vs/flow9-DqtmStfK.js +1 -0
  34. package/public/vs/freemarker2-Cz_sV6Md.js +3 -0
  35. package/public/vs/fsharp-BOMdg4U1.js +1 -0
  36. package/public/vs/go-D_hbi-Jt.js +1 -0
  37. package/public/vs/graphql-CKUU4kLG.js +1 -0
  38. package/public/vs/handlebars-OwglfO-1.js +1 -0
  39. package/public/vs/hcl-DTaboeZW.js +1 -0
  40. package/public/vs/html-Pa1xEWsY.js +1 -0
  41. package/public/vs/htmlMode-Bz67EXwp.js +1 -0
  42. package/public/vs/ini-CsNwO04R.js +1 -0
  43. package/public/vs/java-CI4ZMsH9.js +1 -0
  44. package/public/vs/javascript-PczUCGdz.js +1 -0
  45. package/public/vs/jsonMode-DULH5oaX.js +7 -0
  46. package/public/vs/julia-BwzEvaQw.js +1 -0
  47. package/public/vs/kotlin-IUYPiTV8.js +1 -0
  48. package/public/vs/language/css/monaco.contribution.js +1 -0
  49. package/public/vs/language/html/monaco.contribution.js +1 -0
  50. package/public/vs/language/json/monaco.contribution.js +1 -0
  51. package/public/vs/language/typescript/monaco.contribution.js +1 -0
  52. package/public/vs/less-C0eDYdqa.js +2 -0
  53. package/public/vs/lexon-iON-Kj97.js +1 -0
  54. package/public/vs/liquid-DqKjdPGy.js +1 -0
  55. package/public/vs/loader.js +1368 -0
  56. package/public/vs/lspLanguageFeatures-kM9O9rjY.js +4 -0
  57. package/public/vs/lua-DtygF91M.js +1 -0
  58. package/public/vs/m3-CsR4AuFi.js +1 -0
  59. package/public/vs/markdown-C_rD0bIw.js +1 -0
  60. package/public/vs/mdx-DEWtB1K5.js +1 -0
  61. package/public/vs/mips-CiYP61RB.js +1 -0
  62. package/public/vs/monaco.contribution-D2OdxNBt.js +1 -0
  63. package/public/vs/monaco.contribution-DO3azKX8.js +1 -0
  64. package/public/vs/monaco.contribution-EcChJV6a.js +1 -0
  65. package/public/vs/monaco.contribution-qLAYrEOP.js +1 -0
  66. package/public/vs/msdax-C38-sJlp.js +1 -0
  67. package/public/vs/mysql-CdtbpvbG.js +1 -0
  68. package/public/vs/nls.messages-loader.js +1 -0
  69. package/public/vs/nls.messages.cs.js.js +17 -0
  70. package/public/vs/nls.messages.de.js.js +17 -0
  71. package/public/vs/nls.messages.es.js.js +17 -0
  72. package/public/vs/nls.messages.fr.js.js +15 -0
  73. package/public/vs/nls.messages.it.js.js +15 -0
  74. package/public/vs/nls.messages.ja.js.js +17 -0
  75. package/public/vs/nls.messages.js.js +10 -0
  76. package/public/vs/nls.messages.ko.js.js +25 -0
  77. package/public/vs/nls.messages.pl.js.js +17 -0
  78. package/public/vs/nls.messages.pt-br.js.js +6 -0
  79. package/public/vs/nls.messages.ru.js.js +17 -0
  80. package/public/vs/nls.messages.tr.js.js +15 -0
  81. package/public/vs/nls.messages.zh-cn.js.js +17 -0
  82. package/public/vs/nls.messages.zh-tw.js.js +15 -0
  83. package/public/vs/objective-c-CntZFaHX.js +1 -0
  84. package/public/vs/pascal-r6kuqfl_.js +1 -0
  85. package/public/vs/pascaligo-BiXoTmXh.js +1 -0
  86. package/public/vs/perl-DABw_TcH.js +1 -0
  87. package/public/vs/pgsql-me_jFXeX.js +1 -0
  88. package/public/vs/php-D_kh-9LK.js +1 -0
  89. package/public/vs/pla-VfZjczW0.js +1 -0
  90. package/public/vs/postiats-BBSzz8Pk.js +1 -0
  91. package/public/vs/powerquery-Dt-g_2cc.js +1 -0
  92. package/public/vs/powershell-B-7ap1zc.js +1 -0
  93. package/public/vs/protobuf-BmtuEB1A.js +2 -0
  94. package/public/vs/pug-BRpRNeEb.js +1 -0
  95. package/public/vs/python-Cr0UkIbn.js +1 -0
  96. package/public/vs/qsharp-BzsFaUU9.js +1 -0
  97. package/public/vs/r-f8dDdrp4.js +1 -0
  98. package/public/vs/razor-BYAHOTkz.js +1 -0
  99. package/public/vs/redis-fvZQY4PI.js +1 -0
  100. package/public/vs/redshift-45Et0LQi.js +1 -0
  101. package/public/vs/restructuredtext-C7UUFKFD.js +1 -0
  102. package/public/vs/ruby-CZO8zYTz.js +1 -0
  103. package/public/vs/rust-Bfetafyc.js +1 -0
  104. package/public/vs/sb-3GYllVck.js +1 -0
  105. package/public/vs/scala-foMgrKo1.js +1 -0
  106. package/public/vs/scheme-CHdMtr7p.js +1 -0
  107. package/public/vs/scss-C1cmLt9V.js +3 -0
  108. package/public/vs/shell-ClXCKCEW.js +1 -0
  109. package/public/vs/solidity-MZ6ExpPy.js +1 -0
  110. package/public/vs/sophia-DWkuSsPQ.js +1 -0
  111. package/public/vs/sparql-AUGFYSyk.js +1 -0
  112. package/public/vs/sql-32GpJSV2.js +1 -0
  113. package/public/vs/st-CuDFIVZ_.js +1 -0
  114. package/public/vs/swift-n-2HociN.js +3 -0
  115. package/public/vs/systemverilog-Ch4vA8Yt.js +1 -0
  116. package/public/vs/tcl-D74tq1nH.js +1 -0
  117. package/public/vs/tsMode-CZz1Umrk.js +11 -0
  118. package/public/vs/twig-C6taOxMV.js +1 -0
  119. package/public/vs/typescript-DfOrAzoV.js +1 -0
  120. package/public/vs/typespec-D-PIh9Xw.js +1 -0
  121. package/public/vs/vb-Dyb2648j.js +1 -0
  122. package/public/vs/wgsl-BhLXMOR0.js +298 -0
  123. package/public/vs/workers-DcJshg-q.js +1 -0
  124. package/public/vs/xml-CdsdnY8S.js +1 -0
  125. package/public/vs/yaml-DYGvmE88.js +1 -0
  126. package/src/actions/__tests__/agent-actions-username.test.ts +30 -0
  127. package/src/actions/__tests__/asset-actions.test.ts +251 -0
  128. package/src/actions/__tests__/assistant-actions.test.ts +20 -0
  129. package/src/actions/__tests__/cli-profile-actions.test.ts +243 -0
  130. package/src/actions/__tests__/label-actions.test.ts +187 -0
  131. package/src/actions/__tests__/note-actions.test.ts +237 -0
  132. package/src/actions/__tests__/onboarding-actions.test.ts +265 -0
  133. package/src/actions/__tests__/project-actions.test.ts +179 -0
  134. package/src/actions/__tests__/prompt-actions.test.ts +213 -0
  135. package/src/actions/__tests__/report-actions.test.ts +246 -0
  136. package/src/actions/__tests__/search-code-actions.test.ts +308 -0
  137. package/src/actions/__tests__/task-actions-overview.test.ts +58 -0
  138. package/src/actions/__tests__/task-actions-pin.test.ts +79 -0
  139. package/src/actions/__tests__/workspace-actions.test.ts +256 -0
  140. package/src/components/layout/__tests__/top-bar-username.test.tsx +24 -0
  141. package/src/components/onboarding/__tests__/onboarding-wizard.test.tsx +185 -0
  142. package/src/hooks/__tests__/sse-event-reducer.test.ts +263 -0
  143. package/src/hooks/__tests__/use-assistant-chat.test.ts +34 -0
  144. package/src/hooks/__tests__/use-image-upload.test.ts +443 -0
  145. package/src/lib/__tests__/assistant-message-converter.test.ts +162 -0
  146. package/src/lib/__tests__/assistant-sessions.test.ts +253 -0
  147. package/src/lib/__tests__/build-multimodal-prompt.test.ts +173 -0
  148. package/src/lib/__tests__/config-reader.test.ts +75 -0
  149. package/src/lib/__tests__/diff-parser.test.ts +212 -0
  150. package/src/lib/__tests__/execution-summary.test.ts +237 -0
  151. package/src/lib/__tests__/file-serve.test.ts +178 -0
  152. package/src/lib/__tests__/file-utils.test.ts +177 -0
  153. package/src/lib/__tests__/internal-api-guard.test.ts +151 -0
  154. package/src/lib/__tests__/logger.test.ts +181 -0
  155. package/src/lib/__tests__/platform.test.ts +566 -0
  156. package/src/lib/__tests__/reveal-route-security.test.ts +65 -0
  157. package/src/lib/__tests__/schemas.test.ts +377 -0
  158. package/src/lib/__tests__/terminal-link-provider.test.ts +160 -0
  159. package/src/lib/__tests__/upload-route-security.test.ts +120 -0
  160. package/src/lib/ai/__tests__/capability-resolver.test.ts +71 -0
  161. package/src/lib/ai/__tests__/claude-cli-adapter.test.ts +103 -0
  162. package/src/lib/ai/__tests__/provider-registry.test.ts +74 -0
  163. package/src/lib/pty/__tests__/ws-server-assistant.test.ts +7 -0
  164. package/.next/standalone/tower/.claude/rules/process-lifecycle.md +0 -31
  165. package/.next/standalone/tower/.claude/rules/security.md +0 -29
  166. package/.next/standalone/tower/.claude/rules/ui.md +0 -105
  167. package/.next/standalone/tower/AGENTS.md +0 -325
  168. package/.next/standalone/tower/CHANGELOG.md +0 -63
  169. package/.next/standalone/tower/CLAUDE.md +0 -33
  170. package/.next/standalone/tower/LICENSE +0 -21
  171. package/.next/standalone/tower/README.md +0 -214
  172. package/.next/standalone/tower/README.zh.md +0 -212
  173. package/.next/standalone/tower/bin/tower.mjs +0 -180
  174. package/.next/standalone/tower/docs/README.md +0 -51
  175. package/.next/standalone/tower/docs/ai/README.md +0 -91
  176. package/.next/standalone/tower/docs/ai/cli-abstraction-design.md +0 -398
  177. package/.next/standalone/tower/docs/ai/cli-abstraction-plan.md +0 -1345
  178. package/.next/standalone/tower/docs/assets-notes/README.md +0 -41
  179. package/.next/standalone/tower/docs/assistant/README.md +0 -48
  180. package/.next/standalone/tower/docs/board/README.md +0 -36
  181. package/.next/standalone/tower/docs/diagrams/tower-ai-architecture-en.html +0 -259
  182. package/.next/standalone/tower/docs/diagrams/tower-ai-architecture.html +0 -259
  183. package/.next/standalone/tower/docs/diagrams/tower-data-model-en.html +0 -344
  184. package/.next/standalone/tower/docs/diagrams/tower-data-model.html +0 -344
  185. package/.next/standalone/tower/docs/diagrams/tower-module-map-en.html +0 -176
  186. package/.next/standalone/tower/docs/diagrams/tower-module-map.html +0 -176
  187. package/.next/standalone/tower/docs/diagrams/tower-system-architecture-en.html +0 -336
  188. package/.next/standalone/tower/docs/diagrams/tower-system-architecture.html +0 -336
  189. package/.next/standalone/tower/docs/diagrams/tower-task-lifecycle-en.html +0 -251
  190. package/.next/standalone/tower/docs/diagrams/tower-task-lifecycle.html +0 -251
  191. package/.next/standalone/tower/docs/en/guide/architecture.md +0 -79
  192. package/.next/standalone/tower/docs/en/guide/diagrams.md +0 -24
  193. package/.next/standalone/tower/docs/en/guide/getting-started.md +0 -80
  194. package/.next/standalone/tower/docs/en/guide/introduction.md +0 -84
  195. package/.next/standalone/tower/docs/en/index.md +0 -36
  196. package/.next/standalone/tower/docs/en/modules/ai.md +0 -110
  197. package/.next/standalone/tower/docs/en/modules/assets-notes.md +0 -56
  198. package/.next/standalone/tower/docs/en/modules/assistant.md +0 -63
  199. package/.next/standalone/tower/docs/en/modules/board.md +0 -44
  200. package/.next/standalone/tower/docs/en/modules/git.md +0 -55
  201. package/.next/standalone/tower/docs/en/modules/i18n.md +0 -35
  202. package/.next/standalone/tower/docs/en/modules/mcp.md +0 -62
  203. package/.next/standalone/tower/docs/en/modules/missions.md +0 -47
  204. package/.next/standalone/tower/docs/en/modules/project.md +0 -57
  205. package/.next/standalone/tower/docs/en/modules/search.md +0 -49
  206. package/.next/standalone/tower/docs/en/modules/settings.md +0 -63
  207. package/.next/standalone/tower/docs/en/modules/task.md +0 -82
  208. package/.next/standalone/tower/docs/en/modules/terminal.md +0 -73
  209. package/.next/standalone/tower/docs/en/modules/workspace.md +0 -61
  210. package/.next/standalone/tower/docs/git/README.md +0 -42
  211. package/.next/standalone/tower/docs/guide/architecture.md +0 -29
  212. package/.next/standalone/tower/docs/guide/diagrams.md +0 -24
  213. package/.next/standalone/tower/docs/guide/getting-started.md +0 -80
  214. package/.next/standalone/tower/docs/guide/introduction.md +0 -84
  215. package/.next/standalone/tower/docs/i18n/README.md +0 -23
  216. package/.next/standalone/tower/docs/index.md +0 -36
  217. package/.next/standalone/tower/docs/mcp/README.md +0 -50
  218. package/.next/standalone/tower/docs/missions/README.md +0 -40
  219. package/.next/standalone/tower/docs/modules/ai.md +0 -104
  220. package/.next/standalone/tower/docs/modules/assets-notes.md +0 -68
  221. package/.next/standalone/tower/docs/modules/assistant.md +0 -74
  222. package/.next/standalone/tower/docs/modules/board.md +0 -56
  223. package/.next/standalone/tower/docs/modules/git.md +0 -61
  224. package/.next/standalone/tower/docs/modules/i18n.md +0 -38
  225. package/.next/standalone/tower/docs/modules/mcp.md +0 -68
  226. package/.next/standalone/tower/docs/modules/missions.md +0 -54
  227. package/.next/standalone/tower/docs/modules/project.md +0 -65
  228. package/.next/standalone/tower/docs/modules/search.md +0 -57
  229. package/.next/standalone/tower/docs/modules/settings.md +0 -72
  230. package/.next/standalone/tower/docs/modules/task.md +0 -82
  231. package/.next/standalone/tower/docs/modules/terminal.md +0 -70
  232. package/.next/standalone/tower/docs/modules/workspace.md +0 -68
  233. package/.next/standalone/tower/docs/package.json +0 -11
  234. package/.next/standalone/tower/docs/pnpm-lock.yaml +0 -1620
  235. package/.next/standalone/tower/docs/postcss.config.mjs +0 -2
  236. package/.next/standalone/tower/docs/project/README.md +0 -45
  237. package/.next/standalone/tower/docs/public/banner.png +0 -0
  238. package/.next/standalone/tower/docs/public/diagrams/tower-ai-architecture-en.html +0 -259
  239. package/.next/standalone/tower/docs/public/diagrams/tower-ai-architecture.html +0 -259
  240. package/.next/standalone/tower/docs/public/diagrams/tower-data-model-en.html +0 -344
  241. package/.next/standalone/tower/docs/public/diagrams/tower-data-model.html +0 -344
  242. package/.next/standalone/tower/docs/public/diagrams/tower-module-map-en.html +0 -176
  243. package/.next/standalone/tower/docs/public/diagrams/tower-module-map.html +0 -176
  244. package/.next/standalone/tower/docs/public/diagrams/tower-system-architecture-en.html +0 -336
  245. package/.next/standalone/tower/docs/public/diagrams/tower-system-architecture.html +0 -336
  246. package/.next/standalone/tower/docs/public/diagrams/tower-task-lifecycle-en.html +0 -251
  247. package/.next/standalone/tower/docs/public/diagrams/tower-task-lifecycle.html +0 -251
  248. package/.next/standalone/tower/docs/search/README.md +0 -37
  249. package/.next/standalone/tower/docs/settings/README.md +0 -43
  250. package/.next/standalone/tower/docs/task/README.md +0 -67
  251. package/.next/standalone/tower/docs/terminal/README.md +0 -58
  252. package/.next/standalone/tower/docs/workspace/README.md +0 -50
  253. package/.next/standalone/tower/docs/zh/guide/architecture.md +0 -29
  254. package/.next/standalone/tower/docs/zh/guide/diagrams.md +0 -24
  255. package/.next/standalone/tower/docs/zh/guide/getting-started.md +0 -80
  256. package/.next/standalone/tower/docs/zh/guide/introduction.md +0 -66
  257. package/.next/standalone/tower/docs/zh/index.md +0 -23
  258. package/.next/standalone/tower/docs/zh/modules/ai.md +0 -104
  259. package/.next/standalone/tower/docs/zh/modules/assets-notes.md +0 -68
  260. package/.next/standalone/tower/docs/zh/modules/assistant.md +0 -74
  261. package/.next/standalone/tower/docs/zh/modules/board.md +0 -56
  262. package/.next/standalone/tower/docs/zh/modules/git.md +0 -61
  263. package/.next/standalone/tower/docs/zh/modules/i18n.md +0 -38
  264. package/.next/standalone/tower/docs/zh/modules/mcp.md +0 -68
  265. package/.next/standalone/tower/docs/zh/modules/missions.md +0 -54
  266. package/.next/standalone/tower/docs/zh/modules/project.md +0 -65
  267. package/.next/standalone/tower/docs/zh/modules/search.md +0 -57
  268. package/.next/standalone/tower/docs/zh/modules/settings.md +0 -72
  269. package/.next/standalone/tower/docs/zh/modules/task.md +0 -82
  270. package/.next/standalone/tower/docs/zh/modules/terminal.md +0 -70
  271. package/.next/standalone/tower/docs/zh/modules/workspace.md +0 -68
  272. package/.next/standalone/tower/eslint.config.mjs +0 -18
  273. package/.next/standalone/tower/next.config.ts +0 -15
  274. package/.next/standalone/tower/package.json +0 -117
  275. package/.next/standalone/tower/playwright.config.ts +0 -28
  276. package/.next/standalone/tower/pnpm-lock.yaml +0 -10524
  277. package/.next/standalone/tower/pnpm-workspace.yaml +0 -6
  278. package/.next/standalone/tower/prisma/init-fts.ts +0 -23
  279. package/.next/standalone/tower/prisma/schema.prisma +0 -290
  280. package/.next/standalone/tower/prompts/backend-developer.md +0 -20
  281. package/.next/standalone/tower/prompts/code-reviewer.md +0 -19
  282. package/.next/standalone/tower/prompts/frontend-developer.md +0 -20
  283. package/.next/standalone/tower/prompts/product-manager.md +0 -16
  284. package/.next/standalone/tower/public/banner.jpg +0 -0
  285. package/.next/standalone/tower/public/logo.png +0 -0
  286. package/.next/standalone/tower/scripts/copy-monaco.js +0 -27
  287. package/.next/standalone/tower/scripts/init-db.ts +0 -74
  288. package/.next/standalone/tower/scripts/migrate-data.ts +0 -102
  289. package/.next/standalone/tower/server.js +0 -38
  290. package/.next/standalone/tower/src/app/favicon.ico +0 -0
  291. package/.next/standalone/tower/src/mcp/db.ts +0 -11
  292. package/.next/standalone/tower/src/mcp/index.ts +0 -15
  293. package/.next/standalone/tower/src/mcp/server.ts +0 -52
  294. package/.next/standalone/tower/src/mcp/tools/knowledge-tools.ts +0 -100
  295. package/.next/standalone/tower/src/mcp/tools/label-tools.ts +0 -70
  296. package/.next/standalone/tower/src/mcp/tools/note-asset-tools.ts +0 -271
  297. package/.next/standalone/tower/src/mcp/tools/project-tools.ts +0 -79
  298. package/.next/standalone/tower/src/mcp/tools/report-tools.ts +0 -214
  299. package/.next/standalone/tower/src/mcp/tools/search-tools.ts +0 -32
  300. package/.next/standalone/tower/src/mcp/tools/task-tools.ts +0 -250
  301. package/.next/standalone/tower/src/mcp/tools/terminal-tools.ts +0 -154
  302. package/.next/standalone/tower/src/mcp/tools/workspace-tools.ts +0 -73
  303. package/.next/standalone/tower/tests/e2e/chat-flow.spec.ts +0 -249
  304. package/.next/standalone/tower/tests/e2e/notes-assets.spec.ts +0 -287
  305. package/.next/standalone/tower/tests/e2e/search.spec.ts +0 -186
  306. package/.next/standalone/tower/tests/e2e/settings-flow.spec.ts +0 -250
  307. package/.next/standalone/tower/tests/e2e/settings.spec.ts +0 -261
  308. package/.next/standalone/tower/tests/e2e/smoke.spec.ts +0 -317
  309. package/.next/standalone/tower/tests/e2e/task-flow.spec.ts +0 -287
  310. package/.next/standalone/tower/tests/e2e/workbench.spec.ts +0 -307
  311. package/.next/standalone/tower/tests/setup.ts +0 -15
  312. package/.next/standalone/tower/tests/unit/actions/agent-actions.test.ts +0 -157
  313. package/.next/standalone/tower/tests/unit/actions/config-actions.test.ts +0 -170
  314. package/.next/standalone/tower/tests/unit/actions/file-actions.test.ts +0 -283
  315. package/.next/standalone/tower/tests/unit/actions/git-actions.test.ts +0 -34
  316. package/.next/standalone/tower/tests/unit/actions/preview-actions.test.ts +0 -177
  317. package/.next/standalone/tower/tests/unit/actions/search-actions.test.ts +0 -358
  318. package/.next/standalone/tower/tests/unit/actions/task-actions.test.ts +0 -173
  319. package/.next/standalone/tower/tests/unit/api/diff-route.test.ts +0 -9
  320. package/.next/standalone/tower/tests/unit/api/file-serving.test.ts +0 -88
  321. package/.next/standalone/tower/tests/unit/api/merge-route.test.ts +0 -9
  322. package/.next/standalone/tower/tests/unit/api/stream-persist-result.test.ts +0 -7
  323. package/.next/standalone/tower/tests/unit/api/stream-send-back.test.ts +0 -7
  324. package/.next/standalone/tower/tests/unit/components/asset-item.test.tsx +0 -105
  325. package/.next/standalone/tower/tests/unit/components/asset-list.test.tsx +0 -51
  326. package/.next/standalone/tower/tests/unit/components/assets/asset-upload.test.tsx +0 -70
  327. package/.next/standalone/tower/tests/unit/components/board-stats.test.tsx +0 -32
  328. package/.next/standalone/tower/tests/unit/components/category-filter.test.tsx +0 -58
  329. package/.next/standalone/tower/tests/unit/components/cli-adapter-tester.test.tsx +0 -160
  330. package/.next/standalone/tower/tests/unit/components/create-task-dialog.test.tsx +0 -162
  331. package/.next/standalone/tower/tests/unit/components/file-tree.test.tsx +0 -172
  332. package/.next/standalone/tower/tests/unit/components/note-card.test.tsx +0 -71
  333. package/.next/standalone/tower/tests/unit/components/note-editor.test.tsx +0 -39
  334. package/.next/standalone/tower/tests/unit/components/prompts-config.test.tsx +0 -200
  335. package/.next/standalone/tower/tests/unit/components/search-dialog.test.tsx +0 -223
  336. package/.next/standalone/tower/tests/unit/components/system-config.test.tsx +0 -32
  337. package/.next/standalone/tower/tests/unit/hooks/hook-registration.test.ts +0 -89
  338. package/.next/standalone/tower/tests/unit/hooks/stop-hook.test.ts +0 -108
  339. package/.next/standalone/tower/tests/unit/lib/asset-actions.test.ts +0 -257
  340. package/.next/standalone/tower/tests/unit/lib/file-utils.test.ts +0 -102
  341. package/.next/standalone/tower/tests/unit/lib/fs-security.test.ts +0 -34
  342. package/.next/standalone/tower/tests/unit/lib/fts.test.ts +0 -214
  343. package/.next/standalone/tower/tests/unit/lib/git-url.test.ts +0 -258
  344. package/.next/standalone/tower/tests/unit/lib/instrumentation.test.ts +0 -86
  345. package/.next/standalone/tower/tests/unit/lib/local-path-to-api-url.test.ts +0 -40
  346. package/.next/standalone/tower/tests/unit/lib/mime-magic.test.ts +0 -95
  347. package/.next/standalone/tower/tests/unit/lib/note-actions.test.ts +0 -296
  348. package/.next/standalone/tower/tests/unit/lib/preview-process-manager.test.ts +0 -107
  349. package/.next/standalone/tower/tests/unit/lib/process-manager.test.ts +0 -10
  350. package/.next/standalone/tower/tests/unit/lib/pty-session.test.ts +0 -171
  351. package/.next/standalone/tower/tests/unit/lib/search.test.ts +0 -289
  352. package/.next/standalone/tower/tests/unit/lib/session-store.test.ts +0 -111
  353. package/.next/standalone/tower/tests/unit/lib/utils.test.ts +0 -33
  354. package/.next/standalone/tower/tests/unit/lib/worktree.test.ts +0 -190
  355. package/.next/standalone/tower/tests/unit/mcp/identify-project.test.ts +0 -217
  356. package/.next/standalone/tower/tests/unit/mcp/manage-assets.test.ts +0 -199
  357. package/.next/standalone/tower/tests/unit/mcp/manage-notes.test.ts +0 -304
  358. package/.next/standalone/tower/tests/unit/mcp/search-tools.test.ts +0 -186
  359. package/.next/standalone/tower/tests/unit/missions-merge.test.ts +0 -43
  360. package/.next/standalone/tower/tower-studio-0.1.1.tgz +0 -0
  361. package/.next/standalone/tower/tsconfig.json +0 -34
  362. package/.next/standalone/tower/vitest.config.ts +0 -17
  363. package/.next/static/a6HR9cTK7s4aKfE5dWzjz/_buildManifest.js +0 -11
  364. package/.next/static/a6HR9cTK7s4aKfE5dWzjz/_clientMiddlewareManifest.js +0 -1
  365. package/.next/static/a6HR9cTK7s4aKfE5dWzjz/_ssgManifest.js +0 -1
  366. package/.next/static/chunks/00z-g3x93ngvn.js +0 -1
  367. package/.next/static/chunks/024pdsc27tjdd.js +0 -5
  368. package/.next/static/chunks/02dd83gbiv778.js +0 -1
  369. package/.next/static/chunks/03e.4ymu.j5wl.js +0 -1
  370. package/.next/static/chunks/03~yq9q893hmn.js +0 -1
  371. package/.next/static/chunks/05-b9qqm3av9~.js +0 -1
  372. package/.next/static/chunks/05~v02mkan5z..js +0 -1
  373. package/.next/static/chunks/0abtpeymj-58i.js +0 -1
  374. package/.next/static/chunks/0b6us7uq72u-d.js +0 -1
  375. package/.next/static/chunks/0drgc-oztq6o-.css +0 -1
  376. package/.next/static/chunks/0eaa2lmymh2fx.js +0 -1
  377. package/.next/static/chunks/0gb82g.6g90mn.js +0 -1
  378. package/.next/static/chunks/0gnm22yv~f54b.js +0 -1
  379. package/.next/static/chunks/0j9qriqni_r1..js +0 -2
  380. package/.next/static/chunks/0k.u8sxy~e469.js +0 -4
  381. package/.next/static/chunks/0lnhjf2a~jaco.js +0 -83
  382. package/.next/static/chunks/0lvd52mjiit6s.js +0 -1
  383. package/.next/static/chunks/0mq0uqbbbb1~2.js +0 -1
  384. package/.next/static/chunks/0neevhl_o1ozu.css +0 -2
  385. package/.next/static/chunks/0omj~p3uxkic-.js +0 -1
  386. package/.next/static/chunks/0t-gr6j-c65qb.js +0 -1
  387. package/.next/static/chunks/0t16ai99uv4j3.js +0 -1
  388. package/.next/static/chunks/0tcl81ybuob5i.js +0 -1
  389. package/.next/static/chunks/0uqimvsni_op~.js +0 -1
  390. package/.next/static/chunks/0wt3kws~_yr8z.js +0 -1
  391. package/.next/static/chunks/0xzdu87n_for1.js +0 -5
  392. package/.next/static/chunks/0y0tdl.rl6v1u.js +0 -1
  393. package/.next/static/chunks/0z2bzovqhl2f5.js +0 -1
  394. package/.next/static/chunks/0z4y0x1ifgy.e.js +0 -1
  395. package/.next/static/chunks/0z7bwntvfhxzi.js +0 -12
  396. package/.next/static/chunks/102ijqpvi0z-d.js +0 -1
  397. package/.next/static/chunks/10n23t.1hpb-1.js +0 -1
  398. package/.next/static/chunks/11_e3-j5gzbj4.js +0 -1
  399. package/.next/static/chunks/14.ims4y7osot.js +0 -1
  400. package/.next/static/chunks/14xzmrt5ly6gq.js +0 -31
  401. package/.next/static/chunks/151wr~6x8aclx.js +0 -1
  402. package/.next/static/chunks/169po6_~f3-d5.js +0 -1
  403. package/.next/static/chunks/16w-ap~msrwpj.js +0 -1
  404. package/.next/static/chunks/176n7f13ve~a9.js +0 -1
  405. package/.next/static/chunks/17oc2l.ekcs8b.css +0 -1
  406. package/.next/static/chunks/turbopack-0wjmrsi.z32s0.js +0 -1
  407. package/.next/static/media/4fa387ec64143e14-s.0q3udbd2bu5yp.woff2 +0 -0
  408. package/.next/static/media/7178b3e590c64307-s.11.cyxs5p-0z~.woff2 +0 -0
  409. package/.next/static/media/797e433ab948586e-s.p.0.q-h669a_dqa.woff2 +0 -0
  410. package/.next/static/media/8a480f0b521d4e75-s.06d3mdzz5bre_.woff2 +0 -0
  411. package/.next/static/media/apple-icon.16aocl-s-v2qz.png +0 -0
  412. package/.next/static/media/bbc41e54d2fcbd21-s.0gw~uztddq1df.woff2 +0 -0
  413. package/.next/static/media/caa3a2e1cccd8315-s.p.16t1db8_9y2o~.woff2 +0 -0
  414. package/.next/static/media/favicon.0y2d6j9cou~8p.ico +0 -0
  415. package/.next/static/media/icon0.0a6mkq6meyird.svg +0 -1
  416. package/.next/static/media/icon1.04ux133882seb.png +0 -0
  417. /package/{.next/standalone/tower/components.json → components.json} +0 -0
  418. /package/{.next/standalone/tower/postcss.config.mjs → postcss.config.mjs} +0 -0
  419. /package/{.next/standalone/tower/prisma → prisma}/prisma/dev.db +0 -0
  420. /package/{.next/standalone/tower/prisma → prisma}/seed.ts +0 -0
  421. /package/{.next/standalone/tower/docs/public → public}/banner.jpg +0 -0
  422. /package/{.next/standalone/tower/docs/public → public}/logo.png +0 -0
  423. /package/{.next/standalone/tower/public → public}/web-app-manifest-192x192.png +0 -0
  424. /package/{.next/standalone/tower/public → public}/web-app-manifest-512x512.png +0 -0
  425. /package/{.next/standalone/tower/scripts → scripts}/init-tower.ts +0 -0
  426. /package/{.next/standalone/tower/scripts → scripts}/post-tool-hook.js +0 -0
  427. /package/{.next/standalone/tower/scripts → scripts}/session-start-hook.js +0 -0
  428. /package/{.next/standalone/tower/scripts → scripts}/stop-hook.js +0 -0
  429. /package/{.next/standalone/tower/skills → skills}/tower/SKILL.md +0 -0
  430. /package/{.next/standalone/tower/src → src}/actions/agent-actions.ts +0 -0
  431. /package/{.next/standalone/tower/src → src}/actions/agent-config-actions.ts +0 -0
  432. /package/{.next/standalone/tower/src → src}/actions/ai-config-actions.ts +0 -0
  433. /package/{.next/standalone/tower/src → src}/actions/asset-actions.ts +0 -0
  434. /package/{.next/standalone/tower/src → src}/actions/assistant-actions.ts +0 -0
  435. /package/{.next/standalone/tower/src → src}/actions/cli-profile-actions.ts +0 -0
  436. /package/{.next/standalone/tower/src → src}/actions/config-actions.ts +0 -0
  437. /package/{.next/standalone/tower/src → src}/actions/file-actions.ts +0 -0
  438. /package/{.next/standalone/tower/src → src}/actions/git-actions.ts +0 -0
  439. /package/{.next/standalone/tower/src → src}/actions/label-actions.ts +0 -0
  440. /package/{.next/standalone/tower/src → src}/actions/note-actions.ts +0 -0
  441. /package/{.next/standalone/tower/src → src}/actions/onboarding-actions.ts +0 -0
  442. /package/{.next/standalone/tower/src → src}/actions/preview-actions.ts +0 -0
  443. /package/{.next/standalone/tower/src → src}/actions/project-actions.ts +0 -0
  444. /package/{.next/standalone/tower/src → src}/actions/prompt-actions.ts +0 -0
  445. /package/{.next/standalone/tower/src → src}/actions/report-actions.ts +0 -0
  446. /package/{.next/standalone/tower/src → src}/actions/search-actions.ts +0 -0
  447. /package/{.next/standalone/tower/src → src}/actions/search-code-actions.ts +0 -0
  448. /package/{.next/standalone/tower/src → src}/actions/task-actions.ts +0 -0
  449. /package/{.next/standalone/tower/src → src}/actions/workspace-actions.ts +0 -0
  450. /package/{.next/standalone/tower/src → src}/app/api/adapters/test/route.ts +0 -0
  451. /package/{.next/standalone/tower/src → src}/app/api/browse-fs/route.ts +0 -0
  452. /package/{.next/standalone/tower/src → src}/app/api/files/assets/[projectId]/[filename]/route.ts +0 -0
  453. /package/{.next/standalone/tower/src → src}/app/api/git/route.ts +0 -0
  454. /package/{.next/standalone/tower/src → src}/app/api/internal/assets/[projectId]/[filename]/route.ts +0 -0
  455. /package/{.next/standalone/tower/src → src}/app/api/internal/assets/reveal/route.ts +0 -0
  456. /package/{.next/standalone/tower/src → src}/app/api/internal/assistant/chat/route.ts +0 -0
  457. /package/{.next/standalone/tower/src → src}/app/api/internal/assistant/images/route.ts +0 -0
  458. /package/{.next/standalone/tower/src → src}/app/api/internal/assistant/route.ts +0 -0
  459. /package/{.next/standalone/tower/src → src}/app/api/internal/assistant/sessions/route.ts +0 -0
  460. /package/{.next/standalone/tower/src → src}/app/api/internal/cache/[...segments]/route.ts +0 -0
  461. /package/{.next/standalone/tower/src → src}/app/api/internal/hooks/install/route.ts +0 -0
  462. /package/{.next/standalone/tower/src → src}/app/api/internal/hooks/session/route.ts +0 -0
  463. /package/{.next/standalone/tower/src → src}/app/api/internal/hooks/stop/route.ts +0 -0
  464. /package/{.next/standalone/tower/src → src}/app/api/internal/hooks/upload/route.ts +0 -0
  465. /package/{.next/standalone/tower/src → src}/app/api/internal/notifications/pending/route.ts +0 -0
  466. /package/{.next/standalone/tower/src → src}/app/api/internal/terminal/[taskId]/buffer/route.ts +0 -0
  467. /package/{.next/standalone/tower/src → src}/app/api/internal/terminal/[taskId]/input/route.ts +0 -0
  468. /package/{.next/standalone/tower/src → src}/app/api/internal/terminal/[taskId]/start/route.ts +0 -0
  469. /package/{.next/standalone/tower/src → src}/app/api/tasks/[taskId]/diff/route.ts +0 -0
  470. /package/{.next/standalone/tower/src → src}/app/api/tasks/[taskId]/merge/route.ts +0 -0
  471. /package/{.next/standalone/tower/src → src}/app/apple-icon.png +0 -0
  472. /package/{.next/standalone/tower/docs/public → src/app}/favicon.ico +0 -0
  473. /package/{.next/standalone/tower/src → src}/app/globals.css +0 -0
  474. /package/{.next/standalone/tower/src → src}/app/icon0.svg +0 -0
  475. /package/{.next/standalone/tower/src → src}/app/icon1.png +0 -0
  476. /package/{.next/standalone/tower/src → src}/app/layout.tsx +0 -0
  477. /package/{.next/standalone/tower/src → src}/app/manifest.json +0 -0
  478. /package/{.next/standalone/tower/src → src}/app/missions/missions-client.tsx +0 -0
  479. /package/{.next/standalone/tower/src → src}/app/missions/page.tsx +0 -0
  480. /package/{.next/standalone/tower/src → src}/app/onboarding/page.tsx +0 -0
  481. /package/{.next/standalone/tower/src → src}/app/page.tsx +0 -0
  482. /package/{.next/standalone/tower/src → src}/app/settings/page.tsx +0 -0
  483. /package/{.next/standalone/tower/src → src}/app/workspaces/[workspaceId]/archive/archive-page-client.tsx +0 -0
  484. /package/{.next/standalone/tower/src → src}/app/workspaces/[workspaceId]/archive/page.tsx +0 -0
  485. /package/{.next/standalone/tower/src → src}/app/workspaces/[workspaceId]/assets/assets-page-client.tsx +0 -0
  486. /package/{.next/standalone/tower/src → src}/app/workspaces/[workspaceId]/assets/page.tsx +0 -0
  487. /package/{.next/standalone/tower/src → src}/app/workspaces/[workspaceId]/board-page-client.tsx +0 -0
  488. /package/{.next/standalone/tower/src → src}/app/workspaces/[workspaceId]/notes/notes-page-client.tsx +0 -0
  489. /package/{.next/standalone/tower/src → src}/app/workspaces/[workspaceId]/notes/page.tsx +0 -0
  490. /package/{.next/standalone/tower/src → src}/app/workspaces/[workspaceId]/page.tsx +0 -0
  491. /package/{.next/standalone/tower/src → src}/app/workspaces/[workspaceId]/projects/[projectId]/page.tsx +0 -0
  492. /package/{.next/standalone/tower/src → src}/app/workspaces/[workspaceId]/tasks/[taskId]/page.tsx +0 -0
  493. /package/{.next/standalone/tower/src → src}/app/workspaces/[workspaceId]/tasks/[taskId]/task-page-client.tsx +0 -0
  494. /package/{.next/standalone/tower/src → src}/app/workspaces/page.tsx +0 -0
  495. /package/{.next/standalone/tower/src → src}/components/assets/asset-item.tsx +0 -0
  496. /package/{.next/standalone/tower/src → src}/components/assets/asset-list.tsx +0 -0
  497. /package/{.next/standalone/tower/src → src}/components/assets/asset-upload.tsx +0 -0
  498. /package/{.next/standalone/tower/src → src}/components/assets/image-lightbox.tsx +0 -0
  499. /package/{.next/standalone/tower/src → src}/components/assets/text-preview-dialog.tsx +0 -0
  500. /package/{.next/standalone/tower/src → src}/components/assistant/assistant-chat-bubble.tsx +0 -0
  501. /package/{.next/standalone/tower/src → src}/components/assistant/assistant-chat.tsx +0 -0
  502. /package/{.next/standalone/tower/src → src}/components/assistant/assistant-panel.tsx +0 -0
  503. /package/{.next/standalone/tower/src → src}/components/assistant/assistant-provider.tsx +0 -0
  504. /package/{.next/standalone/tower/src → src}/components/assistant/image-preview-modal.tsx +0 -0
  505. /package/{.next/standalone/tower/src → src}/components/assistant/image-thumbnail-strip.tsx +0 -0
  506. /package/{.next/standalone/tower/src → src}/components/board/board-column.tsx +0 -0
  507. /package/{.next/standalone/tower/src → src}/components/board/board-filters.tsx +0 -0
  508. /package/{.next/standalone/tower/src → src}/components/board/board-stats.tsx +0 -0
  509. /package/{.next/standalone/tower/src → src}/components/board/column-tasks-dialog.tsx +0 -0
  510. /package/{.next/standalone/tower/src → src}/components/board/create-task-dialog.tsx +0 -0
  511. /package/{.next/standalone/tower/src → src}/components/board/kanban-board.tsx +0 -0
  512. /package/{.next/standalone/tower/src → src}/components/board/project-tabs.tsx +0 -0
  513. /package/{.next/standalone/tower/src → src}/components/board/task-card-context-menu.tsx +0 -0
  514. /package/{.next/standalone/tower/src → src}/components/board/task-card.tsx +0 -0
  515. /package/{.next/standalone/tower/src → src}/components/layout/app-sidebar.tsx +0 -0
  516. /package/{.next/standalone/tower/src → src}/components/layout/folder-browser-dialog.tsx +0 -0
  517. /package/{.next/standalone/tower/src → src}/components/layout/layout-client.tsx +0 -0
  518. /package/{.next/standalone/tower/src → src}/components/layout/search-dialog.tsx +0 -0
  519. /package/{.next/standalone/tower/src → src}/components/layout/sub-page-nav.tsx +0 -0
  520. /package/{.next/standalone/tower/src → src}/components/layout/top-bar.tsx +0 -0
  521. /package/{.next/standalone/tower/src → src}/components/missions/grid-layout-presets.ts +0 -0
  522. /package/{.next/standalone/tower/src → src}/components/missions/grid-preset-picker.tsx +0 -0
  523. /package/{.next/standalone/tower/src → src}/components/missions/merge-missions.ts +0 -0
  524. /package/{.next/standalone/tower/src → src}/components/missions/mission-card.tsx +0 -0
  525. /package/{.next/standalone/tower/src → src}/components/missions/task-picker-dialog.tsx +0 -0
  526. /package/{.next/standalone/tower/src → src}/components/notes/category-filter.tsx +0 -0
  527. /package/{.next/standalone/tower/src → src}/components/notes/note-card.tsx +0 -0
  528. /package/{.next/standalone/tower/src → src}/components/notes/note-editor.tsx +0 -0
  529. /package/{.next/standalone/tower/src → src}/components/notes/note-list.tsx +0 -0
  530. /package/{.next/standalone/tower/src → src}/components/notifications/notification-permission-banner.tsx +0 -0
  531. /package/{.next/standalone/tower/src → src}/components/notifications/use-notification-listener.ts +0 -0
  532. /package/{.next/standalone/tower/src → src}/components/onboarding/guided-tour.tsx +0 -0
  533. /package/{.next/standalone/tower/src → src}/components/onboarding/onboarding-wizard.tsx +0 -0
  534. /package/{.next/standalone/tower/src → src}/components/onboarding/wizard-step-cli.tsx +0 -0
  535. /package/{.next/standalone/tower/src → src}/components/onboarding/wizard-step-username.tsx +0 -0
  536. /package/{.next/standalone/tower/src → src}/components/project/create-project-dialog.tsx +0 -0
  537. /package/{.next/standalone/tower/src → src}/components/project/import-project-dialog.tsx +0 -0
  538. /package/{.next/standalone/tower/src → src}/components/providers/theme-provider.tsx +0 -0
  539. /package/{.next/standalone/tower/src → src}/components/repository/create-branch-dialog.tsx +0 -0
  540. /package/{.next/standalone/tower/src → src}/components/repository/git-changes-panel.tsx +0 -0
  541. /package/{.next/standalone/tower/src → src}/components/repository/git-log-panel.tsx +0 -0
  542. /package/{.next/standalone/tower/src → src}/components/repository/git-stash-panel.tsx +0 -0
  543. /package/{.next/standalone/tower/src → src}/components/repository/repo-sidebar.tsx +0 -0
  544. /package/{.next/standalone/tower/src → src}/components/settings/cli-adapter-tester.tsx +0 -0
  545. /package/{.next/standalone/tower/src → src}/components/settings/settings-page.tsx +0 -0
  546. /package/{.next/standalone/tower/src → src}/components/task/code-editor.tsx +0 -0
  547. /package/{.next/standalone/tower/src → src}/components/task/code-search.tsx +0 -0
  548. /package/{.next/standalone/tower/src → src}/components/task/diff-editor.tsx +0 -0
  549. /package/{.next/standalone/tower/src → src}/components/task/editor-git-panel.tsx +0 -0
  550. /package/{.next/standalone/tower/src → src}/components/task/editor-tabs.tsx +0 -0
  551. /package/{.next/standalone/tower/src → src}/components/task/execution-timeline.tsx +0 -0
  552. /package/{.next/standalone/tower/src → src}/components/task/file-tree-context-menu.tsx +0 -0
  553. /package/{.next/standalone/tower/src → src}/components/task/file-tree-node.tsx +0 -0
  554. /package/{.next/standalone/tower/src → src}/components/task/file-tree.tsx +0 -0
  555. /package/{.next/standalone/tower/src → src}/components/task/preview-panel.tsx +0 -0
  556. /package/{.next/standalone/tower/src → src}/components/task/task-detail-panel.tsx +0 -0
  557. /package/{.next/standalone/tower/src → src}/components/task/task-diff-view.tsx +0 -0
  558. /package/{.next/standalone/tower/src → src}/components/task/task-file-changes.tsx +0 -0
  559. /package/{.next/standalone/tower/src → src}/components/task/task-merge-confirm-dialog.tsx +0 -0
  560. /package/{.next/standalone/tower/src → src}/components/task/task-metadata.tsx +0 -0
  561. /package/{.next/standalone/tower/src → src}/components/task/task-notes-panel.tsx +0 -0
  562. /package/{.next/standalone/tower/src → src}/components/task/task-overview-drawer.tsx +0 -0
  563. /package/{.next/standalone/tower/src → src}/components/task/task-terminal.tsx +0 -0
  564. /package/{.next/standalone/tower/src → src}/components/task/terminal-portal.tsx +0 -0
  565. /package/{.next/standalone/tower/src → src}/components/task/types.ts +0 -0
  566. /package/{.next/standalone/tower/src → src}/components/ui/avatar.tsx +0 -0
  567. /package/{.next/standalone/tower/src → src}/components/ui/badge.tsx +0 -0
  568. /package/{.next/standalone/tower/src → src}/components/ui/button.tsx +0 -0
  569. /package/{.next/standalone/tower/src → src}/components/ui/card.tsx +0 -0
  570. /package/{.next/standalone/tower/src → src}/components/ui/command.tsx +0 -0
  571. /package/{.next/standalone/tower/src → src}/components/ui/dialog.tsx +0 -0
  572. /package/{.next/standalone/tower/src → src}/components/ui/dropdown-menu.tsx +0 -0
  573. /package/{.next/standalone/tower/src → src}/components/ui/empty-state.tsx +0 -0
  574. /package/{.next/standalone/tower/src → src}/components/ui/error-boundary.tsx +0 -0
  575. /package/{.next/standalone/tower/src → src}/components/ui/input-group.tsx +0 -0
  576. /package/{.next/standalone/tower/src → src}/components/ui/input.tsx +0 -0
  577. /package/{.next/standalone/tower/src → src}/components/ui/label.tsx +0 -0
  578. /package/{.next/standalone/tower/src → src}/components/ui/popover.tsx +0 -0
  579. /package/{.next/standalone/tower/src → src}/components/ui/scroll-area.tsx +0 -0
  580. /package/{.next/standalone/tower/src → src}/components/ui/segmented-control.tsx +0 -0
  581. /package/{.next/standalone/tower/src → src}/components/ui/select.tsx +0 -0
  582. /package/{.next/standalone/tower/src → src}/components/ui/separator.tsx +0 -0
  583. /package/{.next/standalone/tower/src → src}/components/ui/sheet.tsx +0 -0
  584. /package/{.next/standalone/tower/src → src}/components/ui/sonner.tsx +0 -0
  585. /package/{.next/standalone/tower/src → src}/components/ui/switch.tsx +0 -0
  586. /package/{.next/standalone/tower/src → src}/components/ui/tabs.tsx +0 -0
  587. /package/{.next/standalone/tower/src → src}/components/ui/textarea.tsx +0 -0
  588. /package/{.next/standalone/tower/src → src}/components/ui/toast.tsx +0 -0
  589. /package/{.next/standalone/tower/src → src}/components/ui/tooltip.tsx +0 -0
  590. /package/{.next/standalone/tower/src → src}/hooks/sse-event-reducer.ts +0 -0
  591. /package/{.next/standalone/tower/src → src}/hooks/use-assistant-chat.ts +0 -0
  592. /package/{.next/standalone/tower/src → src}/hooks/use-image-upload.ts +0 -0
  593. /package/{.next/standalone/tower/src → src}/instrumentation.ts +0 -0
  594. /package/{.next/standalone/tower/src → src}/lib/ai/adapters/cli/claude-cli-adapter.ts +0 -0
  595. /package/{.next/standalone/tower/src → src}/lib/ai/capability-resolver.ts +0 -0
  596. /package/{.next/standalone/tower/src → src}/lib/ai/provider-registry.ts +0 -0
  597. /package/{.next/standalone/tower/src → src}/lib/ai/providers/claude.ts +0 -0
  598. /package/{.next/standalone/tower/src → src}/lib/ai/providers/index.ts +0 -0
  599. /package/{.next/standalone/tower/src → src}/lib/ai/types.ts +0 -0
  600. /package/{.next/standalone/tower/src → src}/lib/assistant-constants.ts +0 -0
  601. /package/{.next/standalone/tower/src → src}/lib/assistant-message-converter.ts +0 -0
  602. /package/{.next/standalone/tower/src → src}/lib/assistant-sessions.ts +0 -0
  603. /package/{.next/standalone/tower/src → src}/lib/build-multimodal-prompt.ts +0 -0
  604. /package/{.next/standalone/tower/src → src}/lib/claude-session.ts +0 -0
  605. /package/{.next/standalone/tower/src → src}/lib/cli-test.ts +0 -0
  606. /package/{.next/standalone/tower/src → src}/lib/config-defaults.ts +0 -0
  607. /package/{.next/standalone/tower/src → src}/lib/config-reader.ts +0 -0
  608. /package/{.next/standalone/tower/src → src}/lib/constants.ts +0 -0
  609. /package/{.next/standalone/tower/src → src}/lib/db.ts +0 -0
  610. /package/{.next/standalone/tower/src → src}/lib/diff-parser.ts +0 -0
  611. /package/{.next/standalone/tower/src → src}/lib/execution-summary.ts +0 -0
  612. /package/{.next/standalone/tower/src → src}/lib/file-serve-client.ts +0 -0
  613. /package/{.next/standalone/tower/src → src}/lib/file-serve.ts +0 -0
  614. /package/{.next/standalone/tower/src → src}/lib/file-utils.ts +0 -0
  615. /package/{.next/standalone/tower/src → src}/lib/fs-security.ts +0 -0
  616. /package/{.next/standalone/tower/src → src}/lib/fts.ts +0 -0
  617. /package/{.next/standalone/tower/src → src}/lib/git-api.ts +0 -0
  618. /package/{.next/standalone/tower/src → src}/lib/git-url.ts +0 -0
  619. /package/{.next/standalone/tower/src → src}/lib/i18n/en.ts +0 -0
  620. /package/{.next/standalone/tower/src → src}/lib/i18n/types.ts +0 -0
  621. /package/{.next/standalone/tower/src → src}/lib/i18n/zh.ts +0 -0
  622. /package/{.next/standalone/tower/src → src}/lib/i18n.tsx +0 -0
  623. /package/{.next/standalone/tower/src → src}/lib/init-tower.ts +0 -0
  624. /package/{.next/standalone/tower/src → src}/lib/instrumentation-tasks.ts +0 -0
  625. /package/{.next/standalone/tower/src → src}/lib/internal-api-guard.ts +0 -0
  626. /package/{.next/standalone/tower/src → src}/lib/logger.ts +0 -0
  627. /package/{.next/standalone/tower/src → src}/lib/mime-magic.ts +0 -0
  628. /package/{.next/standalone/tower/src → src}/lib/platform.ts +0 -0
  629. /package/{.next/standalone/tower/src → src}/lib/preview-process.ts +0 -0
  630. /package/{.next/standalone/tower/src → src}/lib/pty/pty-session.ts +0 -0
  631. /package/{.next/standalone/tower/src → src}/lib/pty/session-store.ts +0 -0
  632. /package/{.next/standalone/tower/src → src}/lib/pty/ws-server.ts +0 -0
  633. /package/{.next/standalone/tower/src → src}/lib/schemas.ts +0 -0
  634. /package/{.next/standalone/tower/src → src}/lib/search.ts +0 -0
  635. /package/{.next/standalone/tower/src → src}/lib/terminal-link-provider.ts +0 -0
  636. /package/{.next/standalone/tower/src → src}/lib/tower-dir.ts +0 -0
  637. /package/{.next/standalone/tower/src → src}/lib/utils.ts +0 -0
  638. /package/{.next/standalone/tower/src → src}/lib/worktree.ts +0 -0
  639. /package/{.next/standalone/tower/src → src}/stores/board-store.ts +0 -0
  640. /package/{.next/standalone/tower/src → src}/stores/task-execution-store.ts +0 -0
  641. /package/{.next/standalone/tower/src → src}/types/index.ts +0 -0
@@ -1,325 +0,0 @@
1
- <!-- BEGIN:nextjs-agent-rules -->
2
- # This is NOT the Next.js you know
3
-
4
- This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in `node_modules/next/dist/docs/` before writing any code. Heed deprecation notices.
5
- <!-- END:nextjs-agent-rules -->
6
-
7
- # currentDate
8
- Today's date is 2026-04-13.
9
-
10
- ---
11
-
12
- # Tower — Agent Reference
13
-
14
- ## Project Overview
15
-
16
- Tower is an AI task management platform with a Kanban board UI. The core hierarchy is:
17
-
18
- ```
19
- Workspace → Projects → Tasks
20
- ```
21
-
22
- Workspaces are top-level containers. Each workspace holds multiple Projects and a shared set of Labels. Projects hold Tasks. Tasks are displayed as Kanban cards grouped by status.
23
-
24
- ---
25
-
26
- ## Modules
27
-
28
- System modules for GSD phase scoping. Use the **Slug** as the commit scope (e.g. `feat(terminal-08.01): ...`).
29
-
30
- | Module | Slug | Description |
31
- |--------|------|-------------|
32
- | Workspace | `workspace` | 工作区 CRUD、标签管理 |
33
- | Project | `project` | 项目 CRUD、导入、git 仓库、描述生成 |
34
- | Task | `task` | 任务 CRUD、状态流转、Label、详情页 |
35
- | Board | `board` | 看板 UI、拖拽排序、筛选统计、置顶 |
36
- | Terminal | `terminal` | PTY 会话、WebSocket、xterm.js、CLI Profile |
37
- | Assistant | `assistant` | AI 助手聊天、SSE 流式、多模态 |
38
- | Missions | `missions` | 多任务监控面板、网格布局 |
39
- | Search | `search` | 全局搜索、代码搜索、FTS |
40
- | Settings | `settings` | 系统配置、CLI Profile、Agent 配置 |
41
- | MCP | `mcp` | MCP Server、23 个工具、stdio 传输 |
42
- | Git | `git` | Git 操作、Worktree、Diff、Merge |
43
- | Assets & Notes | `assets` | 项目资产上传、笔记系统 |
44
- | AI | `ai` | Claude SDK、CLI Adapter、执行总结、Prompt 管理 |
45
- | I18n | `i18n` | 国际化、zh/en 双语 |
46
-
47
- Detailed module documentation: [`docs/`](docs/README.md)
48
-
49
- ---
50
-
51
- ## Data Model
52
-
53
- ### Hierarchy
54
-
55
- ```
56
- Workspace (id, name, description?)
57
- ├── Project[] (id, name, alias?, description?, type, gitUrl?, localPath?)
58
- │ └── Task[] (id, title, description?, status, priority, order)
59
- │ ├── TaskLabel[] → Label
60
- │ ├── TaskExecution[]
61
- │ └── TaskMessage[]
62
- └── Label[] (id, name, color, isBuiltin)
63
- ```
64
-
65
- ### Models
66
-
67
- **Workspace**
68
- - `id` (cuid), `name`, `description?`
69
- - Has many: `projects`, `labels`
70
-
71
- **Project**
72
- - `id` (cuid), `name`, `alias?`, `description?`
73
- - `type`: `NORMAL` | `GIT` — derived from whether `gitUrl` is set
74
- - `gitUrl?`, `localPath?`
75
- - `workspaceId` (FK → Workspace, cascade delete)
76
- - Has many: `tasks`, `repositories`
77
-
78
- **Task**
79
- - `id` (cuid), `title`, `description?`
80
- - `status`: `TODO` | `IN_PROGRESS` | `IN_REVIEW` | `DONE` | `CANCELLED` (default: `TODO`)
81
- - `priority`: `LOW` | `MEDIUM` | `HIGH` | `CRITICAL` (default: `MEDIUM`)
82
- - `order`: integer used for Kanban column ordering (ascending = top)
83
- - `projectId` (FK → Project, cascade delete)
84
- - Has many: `labels` (via TaskLabel), `executions`, `messages`
85
-
86
- **Label**
87
- - `id` (cuid), `name`, `color` (hex, default `#94a3b8`)
88
- - `workspaceId?` — null for builtin labels
89
- - `isBuiltin`: builtin labels are global and cannot be deleted
90
-
91
- **TaskExecution**
92
- - `id` (cuid), `taskId`, `agent` (default `CLAUDE_CODE`), `config?`
93
- - `status`: `PENDING` | `RUNNING` | `PAUSED` | `COMPLETED` | `FAILED`
94
- - `branch?`, `startedAt?`, `endedAt?`
95
- - `sessionId?` — Claude CLI session ID for resume support
96
- - `worktreePath?`, `worktreeBranch?` — git worktree isolation
97
- - `callbackUrl?` — external orchestrator callback URL
98
-
99
- **CliProfile**
100
- - `id` (cuid), `command` (default `claude`), `baseArgs` (JSON string array), `envVars` (JSON object)
101
- - `isDefault`: boolean — only one default profile allowed
102
- - Controls which CLI binary and arguments are used for PTY spawning
103
-
104
- **TaskMessage**
105
- - `id` (cuid), `taskId`, `executionId?`
106
- - `role`: `USER` | `ASSISTANT` | `SYSTEM`
107
- - `content`, `metadata?`
108
-
109
- **Repository**
110
- - `id` (cuid), `name`, `path`, `branch` (default `main`)
111
- - `projectId` (FK → Project, cascade delete)
112
-
113
- **AgentConfig**
114
- - `id` (cuid), `agent`, `configName`, `appendPrompt?`, `settings?`, `isDefault`
115
- - Unique constraint on `(agent, configName)`
116
-
117
- ---
118
-
119
- ## MCP Server
120
-
121
- To expose Tower tools to an AI agent via MCP, add the following to your MCP client configuration:
122
-
123
- ```json
124
- {
125
- "mcpServers": {
126
- "tower": {
127
- "command": "npx",
128
- "args": ["tsx", "<project-root>/src/mcp/index.ts"]
129
- }
130
- }
131
- }
132
- ```
133
-
134
- Replace `<project-root>` with the absolute path to this repository.
135
-
136
- ---
137
-
138
- ## Available MCP Tools
139
-
140
- 23 tools across 7 categories.
141
-
142
- ### Workspace Tools (`src/mcp/tools/workspace-tools.ts`)
143
-
144
- | Tool | Description | Key Params |
145
- |------|-------------|------------|
146
- | `list_workspaces` | List all workspaces ordered by last updated; includes project count | — |
147
- | `create_workspace` | Create a new workspace | `name`, `description?` |
148
- | `update_workspace` | Update name and/or description | `workspaceId`, `name?`, `description?` |
149
- | `delete_workspace` | Delete workspace (cascades to projects and tasks) | `workspaceId` |
150
-
151
- ### Project Tools (`src/mcp/tools/project-tools.ts`)
152
-
153
- | Tool | Description | Key Params |
154
- |------|-------------|------------|
155
- | `list_projects` | List projects in a workspace; includes task and repository counts | `workspaceId` |
156
- | `create_project` | Create a project; type auto-set to GIT if gitUrl provided | `workspaceId`, `name`, `gitUrl?`, `localPath?` |
157
- | `update_project` | Update name, localPath, and/or description | `projectId`, `name?`, `localPath?`, `description?` |
158
- | `delete_project` | Delete a project (cascades to tasks) | `projectId` |
159
-
160
- ### Task Tools (`src/mcp/tools/task-tools.ts`)
161
-
162
- | Tool | Description | Key Params |
163
- |------|-------------|------------|
164
- | `list_tasks` | List tasks in a project, ordered by `order` then `createdAt`; includes labels | `projectId`, `status?` |
165
- | `create_task` | Create a task with optional labels | `projectId`, `title`, `description?`, `priority?`, `status?`, `labelIds?`, `useWorktree?`, `baseBranch?`, `autoStart?`, `references?` |
166
- | `update_task` | Update title, description, priority, and/or labels (replaces all labels) | `taskId`, `title?`, `description?`, `priority?`, `labelIds?` |
167
- | `move_task` | Move task to a different status column | `taskId`, `status` |
168
- | `delete_task` | Delete a task | `taskId` |
169
-
170
- ### Label Tools (`src/mcp/tools/label-tools.ts`)
171
-
172
- | Tool | Description | Key Params |
173
- |------|-------------|------------|
174
- | `list_labels` | List all labels for a workspace (builtin + workspace-specific) | `workspaceId` |
175
- | `create_label` | Create a custom label for a workspace | `workspaceId`, `name`, `color` |
176
- | `delete_label` | Delete a label by ID | `labelId` |
177
- | `set_task_labels` | Replace all labels on a task | `taskId`, `labelIds` |
178
-
179
- ### Search Tools (`src/mcp/tools/search-tools.ts`)
180
-
181
- | Tool | Description | Key Params |
182
- |------|-------------|------------|
183
- | `search` | Search tasks, projects, or repositories by query string | `query`, `category?` (`task`\|`project`\|`repository`) |
184
-
185
- ### Terminal Tools (`src/mcp/tools/terminal-tools.ts`)
186
-
187
- | Tool | Description | Key Params |
188
- |------|-------------|------------|
189
- | `get_task_terminal_output` | Get recent terminal output lines from a running task's PTY session | `taskId`, `lines?` (default 50, max 500) |
190
- | `send_task_terminal_input` | Send text input to a running task's PTY terminal (include `\n` for Enter) | `taskId`, `text` |
191
- | `get_task_execution_status` | Get execution status (running/idle/exited) with output snippet | `taskId` |
192
-
193
- ### Report Tools (`src/mcp/tools/report-tools.ts`)
194
-
195
- | Tool | Description | Key Params |
196
- |------|-------------|------------|
197
- | `daily_summary` | Today's work summary — completed tasks, in-progress tasks with last chat summary, grouped by workspace → project | `date?` (YYYY-MM-DD) |
198
- | `daily_todo` | All pending tasks (TODO/IN_PROGRESS/IN_REVIEW), sorted by priority severity | `workspaceId?`, `projectId?`, `status?`, `priority?` |
199
-
200
- ---
201
-
202
- ## Server Actions
203
-
204
- For AI working directly in the Next.js codebase, use these server actions (all in `src/actions/`).
205
-
206
- ### `workspace-actions.ts`
207
-
208
- | Function | Signature |
209
- |----------|-----------|
210
- | `getWorkspaces` | `() → Workspace[]` |
211
- | `getWorkspaceById` | `(id) → Workspace \| null` |
212
- | `createWorkspace` | `({ name, description? }) → Workspace` |
213
- | `updateWorkspace` | `(id, { name?, description? }) → Workspace` |
214
- | `deleteWorkspace` | `(id) → void` |
215
- | `createProject` | `({ name, alias?, description?, gitUrl?, localPath?, workspaceId }) → Project` |
216
- | `updateProject` | `(id, { name?, alias?, description?, localPath? }) → Project` |
217
- | `deleteProject` | `(id) → void` |
218
- | `getProjectByLocalPath` | `(localPath) → Project \| null` |
219
- | `getRecentLocalProjects` | `(limit?) → Project[]` |
220
- | `getWorkspacesWithProjects` | `() → { id, name, projects: { id, name, alias }[] }[]` |
221
- | `getWorkspacesWithRecentTasks` | `(limit?) → { id, name, projects: { id, name, alias, tasks: Task[], _count }[] }[]` — includes recent tasks per project with last sessionId for resume |
222
-
223
- ### `task-actions.ts`
224
-
225
- | Function | Signature |
226
- |----------|-----------|
227
- | `createTask` | `({ title, description?, projectId, priority?, status?, labelIds? }) → Task` |
228
- | `updateTask` | `(taskId, { title?, description?, priority?, labelIds? }) → Task` |
229
- | `updateTaskStatus` | `(taskId, status) → Task` |
230
- | `deleteTask` | `(taskId) → void` |
231
- | `getProjectTasks` | `(projectId) → Task[]` |
232
-
233
- ### `label-actions.ts`
234
-
235
- | Function | Signature |
236
- |----------|-----------|
237
- | `getLabelsForWorkspace` | `(workspaceId) → Label[]` |
238
- | `createLabel` | `({ name, color, workspaceId }) → Label` |
239
- | `deleteLabel` | `(id) → void` |
240
- | `setTaskLabels` | `(taskId, labelIds) → void` |
241
- | `getTaskLabels` | `(taskId) → Label[]` |
242
-
243
- ### `search-actions.ts`
244
-
245
- | Function | Signature |
246
- |----------|-----------|
247
- | `globalSearch` | `(query, category?) → SearchResult[]` |
248
-
249
- ### `report-actions.ts`
250
-
251
- | Function | Signature |
252
- |----------|-----------|
253
- | `getDailySummary` | `(dateStr?) → DailySummaryResult` — tasks with activity on given date, grouped by workspace/project |
254
- | `getDailyTodo` | `(filters?) → DailyTodoResult` — pending tasks, filterable by workspace/project/status/priority |
255
-
256
- ### `agent-actions.ts`
257
-
258
- | Function | Signature |
259
- |----------|-----------|
260
- | `sendTaskMessage` | `(taskId, content) → { userMessage, assistantMessage }` |
261
- | `getTaskMessages` | `(taskId) → TaskMessage[]` |
262
- | `startTaskExecution` | `(taskId, agent?) → TaskExecution` — also sets task status to IN_PROGRESS |
263
- | `stopTaskExecution` | `(executionId) → TaskExecution` — sets status to COMPLETED |
264
- | `stopPtyExecution` | `(taskId) → void` — stops the PTY session for a task |
265
- | `getTaskExecutions` | `(taskId) → TaskExecution[]` |
266
- | `startPtyExecution` | `(taskId, prompt) → { executionId, worktreePath }` — spawns Claude CLI in PTY with CliProfile settings |
267
- | `resumePtyExecution` | `(taskId, previousSessionId) → { executionId, worktreePath }` — resumes a previous Claude CLI session |
268
- | `getActiveExecutionsAcrossWorkspaces` | `() → ActiveExecutionInfo[]` — all RUNNING executions with workspace/project/task metadata |
269
-
270
- ---
271
-
272
- ## Constraints
273
-
274
- - **Cascade deletes**: Deleting a Workspace deletes all its Projects; deleting a Project deletes all its Tasks; deleting a Task deletes its Messages and Executions.
275
- - **Builtin labels**: Labels with `isBuiltin: true` are global (no `workspaceId`). Do not delete them — enforce this check before calling `deleteLabel`.
276
- - **Task order**: The `order` field controls Kanban card position within a status column. Lower values appear higher. Always preserve existing order values when creating tasks unless explicitly reordering.
277
- - **Project type**: `type` is derived from `gitUrl` — always `GIT` when `gitUrl` is set, `NORMAL` otherwise. Do not set type independently.
278
- - **Label replacement**: `set_task_labels` / `setTaskLabels` / `update_task` with `labelIds` all perform a full replace, not a merge. Pass the complete desired set.
279
- - **PTY sessions**: Keyed by `taskId` — one active session per task. Use `startPtyExecution` to create, `resumePtyExecution` to resume with a `sessionId`, `stopPtyExecution` to kill.
280
- - **CliProfile**: Only one default profile (`isDefault: true`). `baseArgs` and `envVars` are JSON strings — parse before use.
281
- - **Environment injection**: `AI_MANAGER_TASK_ID` and `CALLBACK_URL` are injected into every PTY session environment. Never mutate `process.env` — use `envOverrides`.
282
- - **Internal HTTP bridge**: `/api/internal/terminal/[taskId]/buffer` (GET) and `/api/internal/terminal/[taskId]/input` (POST) — localhost-only routes for cross-process PTY access. MCP tools use these since MCP stdio processes cannot share in-memory PTY sessions.
283
-
284
- ---
285
-
286
- ## Mission Control
287
-
288
- **Route:** `/missions` — multi-task monitoring dashboard across all workspaces.
289
-
290
- **Capabilities:**
291
- - View all RUNNING task executions with embedded xterm.js terminals
292
- - Grid layout presets (1×1, 2×1, 3×2, 2×2, 4×2, 3×3) persisted in localStorage
293
- - Workspace filter dropdown to narrow visible tasks
294
- - Launch new task execution or resume previous session from Task Picker
295
- - Stop execution (card removed) / auto-remove on natural completion
296
- - Drag-and-drop card reordering via dnd-kit
297
- - 4-second polling for live updates
298
-
299
- **For external orchestrators (OpenClaw/Paperclip):**
300
-
301
- To dispatch and monitor tasks programmatically, use MCP tools in this workflow:
302
-
303
- 1. **Create task:** `create_task` → get `taskId`
304
- 2. **Start execution:** Call `startPtyExecution(taskId, prompt)` via server action (or use the internal HTTP bridge)
305
- 3. **Monitor:** `get_task_execution_status` for high-level status, `get_task_terminal_output` for live output
306
- 4. **Send input:** `send_task_terminal_input` to interact with the running Claude CLI
307
- 5. **Check completion:** Poll `get_task_execution_status` — `terminalStatus: "exited"` means done
308
- 6. **Resume if needed:** `resumePtyExecution(taskId, sessionId)` to continue a previous session
309
-
310
- **ActiveExecutionInfo type** (returned by `getActiveExecutionsAcrossWorkspaces`):
311
- ```typescript
312
- {
313
- executionId: string;
314
- taskId: string;
315
- taskTitle: string;
316
- projectId: string;
317
- projectName: string;
318
- projectAlias: string | null;
319
- projectLocalPath: string | null;
320
- workspaceId: string;
321
- workspaceName: string;
322
- worktreePath: string | null;
323
- startedAt: string | null; // ISO string
324
- }
325
- ```
@@ -1,63 +0,0 @@
1
- # [0.1.0](/compare/v1.0.0...v0.1.0) (2026-03-26)
2
-
3
-
4
- ### Bug Fixes
5
-
6
- * address code review CRITICAL and HIGH issues 0cd6ac9
7
- * address remaining code review issues (H-4, M-2/4/6/7) a8fcb92
8
-
9
-
10
- ### Features
11
-
12
- * add adapter execution engine with Claude Code support 0d1e66e
13
- * add MCP Server with 18 CRUD tools, AGENTS.md, and SKILL.md 93dd85e
14
- # [0.1.0](/compare/v1.0.0...v0.1.0) (2026-03-26)
15
-
16
- # [1.0.0](/compare/9e77b515af277ff8d2b82bba73b491b7e79cdaa2...v1.0.0) (2026-03-26)
17
-
18
-
19
- ### Bug Fixes
20
-
21
- * add router.refresh after all server actions, fix task detail messages ca00627
22
- * board height, project tabs, priority buttons, repo sidebar styling abf4a73
23
- * improve contrast and readability across dark theme 8ef2182
24
- * make all buttons functional with toast feedback and proper state 8a85ef0
25
- * move language toggle from sidebar footer to top-bar header 69b84c6
26
- * position search dialog at 10vh from top 437cf51
27
- * prevent unicode escaping of Chinese text, use dialog for workspace edit 5dcce57
28
- * project creation working, search dialog with Cmd+K, sidebar clip 7a0e0dd
29
- * project creation, sidebar clip, search dialog with multi-type 82d1299
30
- * project tab border-b-2 on all states to prevent layout shift 8f63e16
31
- * replace branch lists with searchable dropdown selectors d4beebc
32
- * separate sidebar navigation from dropdown menu, add E2E tests ed485bf
33
- * unify button colors to amber, fix kanban top border clipping 455fff6
34
- * wire message sending, task editing, and board interactions 62c6211
35
- * wire sidebar navigation, settings link, and new project dialog 1717334
36
-
37
-
38
- ### Features
39
-
40
- * 6 UI improvements 9083dd7
41
- * add agent runner, SSE streaming, and execution server actions b775e4f
42
- * add app layout with purple sidebar and top bar ab49cb3
43
- * add kanban board components with drag-and-drop cb7c0d2
44
- * add seed data and utility helpers with tests e8e557c
45
- * add settings page with AI Tools configuration 5779870
46
- * add task detail panel with conversation UI c849d9e
47
- * apply Midnight Studio theme to right panels 2de04fb
48
- * collapsible sidebar with icon selection and dialog creation 0a5c8b5, closes #1
49
- * complete kanban board page with filters, actions, and task creation b53a996
50
- * create branch dialog with name, base branch selector, and description 013409e
51
- * define database schema with Prisma models and types 4de5025
52
- * full git integration in right sidebar f2435c7
53
- * full label system - create/assign/display labels on tasks with workspace management c440527
54
- * full workspace CRUD with create/rename/delete in sidebar 98dbdd0
55
- * i18n zh/en support with language toggle, tooltips on collapsed sidebar 894c243
56
- * initial commit 9e77b51
57
- * labels + project edit + UI improvements d5a8633
58
- * local folder browser for project path selection 0b3f7c8
59
- * project CRUD, task edit dialog, and search functionality 92ccbc6
60
- * project details sidebar, enhanced creation dialog, remove ws tabs, fix collapsed clipping 3e0b3bb
61
- * project details, enhanced creation, labels schema, sidebar cleanup 3a2a360
62
- * unified project creation with git URL auto-mapping and clone support d395bf2
63
- * visual redesign — Midnight Studio dark theme 71a6444
@@ -1,33 +0,0 @@
1
- # Tower
2
-
3
- AI 任务调度平台 — 看板 + 终端 + 代码编辑器 + MCP 工具链。
4
-
5
- **Tech:** Next.js 16 / TypeScript / SQLite (Prisma) / TailwindCSS 4 / shadcn (base-nova)
6
-
7
- ## Quick Reference
8
-
9
- ```bash
10
- pnpm dev # 启动(Webpack 模式,node-pty 需要)
11
- pnpm db:push # 同步 schema
12
- pnpm db:seed # 种子数据
13
- pnpm db:init-fts # 全文搜索索引
14
- pnpm test:run # 测试
15
- ```
16
-
17
- ## Architecture
18
-
19
- ```
20
- Workspace → Project → Task → Execution
21
- ```
22
-
23
- - 数据模型和 API 参考见 @AGENTS.md
24
- - UI 规范见 `.claude/rules/ui.md`(组件尺寸、Select、Toast、Loading、i18n)
25
- - 安全规则见 `.claude/rules/security.md`(输入校验、环境注入、API 防护)
26
- - 进程生命周期见 `.claude/rules/process-lifecycle.md`(PTY、Preview、WS、定时器)
27
-
28
- ## Key Conventions
29
-
30
- - 国际化:所有用户可见文本用 `t("key")`,zh/en 双语
31
- - Next.js 15+ 异步 params:`const { id } = await params`
32
- - App Router routes:`export const runtime = "nodejs"` + `export const dynamic = "force-dynamic"`
33
- - 数据库:SQLite 单文件,Prisma ORM,配置在 `.env` 的 `DATABASE_URL`
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 jp-liu
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
@@ -1,214 +0,0 @@
1
- <p align="center">
2
- <img src="public/banner.jpg" width="100%" alt="Tower" />
3
- </p>
4
-
5
- <p align="center">
6
- AI Task Orchestration Platform
7
- </p>
8
- <p align="center">
9
- <b>English</b> | <a href="./README.zh.md">中文</a>
10
- </p>
11
-
12
- An AI task orchestration platform — manage, dispatch, and execute AI-assisted development tasks through a visual Kanban board.
13
-
14
- Integrates terminal, code editor, file tree, live preview, and MCP toolchain into an all-in-one AI development workflow assistant for individual developers.
15
-
16
- ## Quick Start
17
-
18
- ### Requirements
19
-
20
- - Node.js >= 22
21
- - pnpm (recommended)
22
-
23
- ### Installation
24
-
25
- ```bash
26
- git clone <repo-url>
27
- cd tower
28
- pnpm install
29
-
30
- # Configure environment
31
- cp .env.example .env
32
- # Uses SQLite by default — no extra setup needed
33
-
34
- # Initialize database
35
- pnpm db:push
36
- pnpm db:seed
37
- pnpm db:init-fts
38
-
39
- # Start dev server
40
- pnpm dev
41
- ```
42
-
43
- Open http://localhost:3000 in your browser.
44
-
45
- ### Production Build
46
-
47
- ```bash
48
- pnpm build
49
- pnpm start
50
- ```
51
-
52
- ## Core Concepts
53
-
54
- ```
55
- Workspace
56
- ├── Project
57
- │ └── Task
58
- │ ├── Label
59
- │ ├── Execution
60
- │ └── Message
61
- └── Label (shared)
62
- ```
63
-
64
- - **Workspace** — Top-level container for projects and shared labels
65
- - **Project** — Linked to a Git repo and/or local path; type is NORMAL or GIT
66
- - **Task** — Work item displayed as a Kanban card grouped by status
67
-
68
- ## Features
69
-
70
- ### Kanban Board
71
-
72
- - Drag-and-drop task cards between columns (TODO → IN_PROGRESS → IN_REVIEW → DONE)
73
- - Right-click context menu: change status, launch execution, view details
74
- - Search box for fuzzy matching task titles and descriptions
75
- - Priority levels: LOW / MEDIUM / HIGH / CRITICAL
76
- - Custom labels with color
77
-
78
- ### Task Workbench
79
-
80
- The task detail page has a terminal panel on the left and a three-tab workspace on the right:
81
-
82
- #### Terminal
83
-
84
- - Browser terminal powered by xterm.js + node-pty
85
- - Full ANSI rendering (colors, progress bars, cursor movement)
86
- - Click "Execute" to launch Claude CLI with live output
87
- - Interactive keyboard input — chat with Claude directly
88
- - Auto-synced terminal dimensions
89
- - Reconnect without losing the session
90
-
91
- #### File Browser (Files)
92
-
93
- - Tree view of the worktree directory structure
94
- - Automatic gitignore filtering
95
- - Git status badges (M/A/D)
96
- - Context menu: create file/folder, rename, delete
97
- - Auto-refresh during execution
98
-
99
- #### Code Editor
100
-
101
- - Monaco Editor (same engine as VS Code)
102
- - Syntax highlighting: TypeScript, JavaScript, Python, JSON, YAML, CSS, HTML, Markdown, Prisma
103
- - Multi-tab editing with Ctrl+S save
104
- - Dirty dot indicator for unsaved files
105
- - Theme follows dark/light mode
106
-
107
- #### Changes
108
-
109
- - Diff view of the task branch against the base branch
110
- - Merge confirmation workflow
111
-
112
- #### Preview
113
-
114
- - Launch a frontend dev server (e.g. `npm run dev`)
115
- - Embedded iframe preview
116
- - Auto-detected preview URL based on command pattern
117
- - Auto-refresh on file save
118
- - Auto-stops dev server when leaving the page
119
-
120
- ### Task Execution Lifecycle
121
-
122
- ```
123
- Create task → Click Execute → TODO auto-transitions to IN_PROGRESS
124
- → Claude CLI runs in terminal → Completes (exit 0) → IN_REVIEW
125
- → Manual review → Pass → DONE / Fail → re-execute
126
- ```
127
-
128
- - Automatically creates a Git worktree on execution (if baseBranch is set)
129
- - Sends Feishu notification on completion (when configured)
130
- - On failure, task stays IN_PROGRESS for retry
131
-
132
- ### Project Management
133
-
134
- - Selecting a local folder auto-detects Git remote and fills in gitUrl
135
- - Project types: FRONTEND / BACKEND (controls preview availability)
136
- - Git Path Mapping rules: auto-resolve local paths by host + owner
137
-
138
- ### Settings
139
-
140
- | Category | Options |
141
- |----------|---------|
142
- | General | Theme (dark/light/system), Language (zh/en), Default terminal app |
143
- | Terminal | WebSocket port, Idle timeout |
144
- | System | Upload limits, Concurrency, Git timeout, Search parameters |
145
- | CLI Profile | CLI command, Args, Environment variables |
146
- | Prompts | Custom agent prompt templates |
147
- | Agent | Agent configuration management |
148
- | Git Rules | Path mapping rules (host/owner → local path) |
149
-
150
- ### Internationalization
151
-
152
- Supports Chinese and English. Switch in Settings.
153
-
154
- ## MCP Integration
155
-
156
- Tower exposes an MCP Server for external AI agents:
157
-
158
- ```json
159
- {
160
- "mcpServers": {
161
- "tower": {
162
- "command": "npx",
163
- "args": ["tsx", "<project-root>/src/mcp/index.ts"]
164
- }
165
- }
166
- }
167
- ```
168
-
169
- ### Available Tools (24)
170
-
171
- | Category | Tools |
172
- |----------|-------|
173
- | Workspace | list_workspaces, create_workspace, update_workspace, delete_workspace |
174
- | Project | list_projects, create_project, update_project, delete_project |
175
- | Task | list_tasks, create_task, update_task, delete_task, move_task |
176
- | Label | list_labels, create_label, delete_label, set_task_labels |
177
- | Search | search (global search across tasks/projects/repos) |
178
- | Terminal | get_task_terminal_output, send_task_terminal_input, get_task_execution_status |
179
- | Knowledge | identify_project |
180
- | Notes/Assets | manage_notes, manage_assets |
181
-
182
- ## Development Commands
183
-
184
- ```bash
185
- pnpm dev # Start dev server (Webpack mode — required for node-pty)
186
- pnpm build # Production build
187
- pnpm test # Run tests (watch mode)
188
- pnpm test:run # Run tests (single run)
189
- pnpm db:push # Sync Prisma schema to database
190
- pnpm db:seed # Seed initial data
191
- pnpm db:studio # Open Prisma Studio (database GUI)
192
- pnpm db:init-fts # Initialize full-text search index
193
- pnpm mcp # Start MCP Server (standalone process)
194
- ```
195
-
196
- ## Tech Stack
197
-
198
- - **Framework**: Next.js 16 (App Router)
199
- - **Language**: TypeScript
200
- - **Database**: SQLite (Prisma ORM)
201
- - **Terminal**: node-pty + xterm.js + WebSocket
202
- - **Editor**: Monaco Editor
203
- - **Styling**: TailwindCSS 4
204
- - **Drag & Drop**: dnd-kit
205
- - **Testing**: Vitest
206
-
207
- ## Environment Variables
208
-
209
- | Variable | Description | Default |
210
- |----------|-------------|---------|
211
- | DATABASE_URL | Database connection string | `file:./prisma/dev.db` (SQLite) |
212
- | PORT | Server port | 3000 |
213
-
214
- <!-- Internal notes (TODO, pitfalls) moved to .notes/ (gitignored) -->