@langadventurellc/task-trellis-mcp 1.4.0 → 2.0.0

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 (311) hide show
  1. package/README.md +47 -2
  2. package/dist/__tests__/e2e/autoPrune.e2e.test.js +49 -87
  3. package/dist/__tests__/e2e/autoPrune.e2e.test.js.map +1 -1
  4. package/dist/__tests__/e2e/configuration/commandLineArgs.e2e.test.js +8 -79
  5. package/dist/__tests__/e2e/configuration/commandLineArgs.e2e.test.js.map +1 -1
  6. package/dist/__tests__/e2e/crud/createObject.e2e.test.js +0 -5
  7. package/dist/__tests__/e2e/crud/createObject.e2e.test.js.map +1 -1
  8. package/dist/__tests__/e2e/crud/deleteObject.e2e.test.js +0 -5
  9. package/dist/__tests__/e2e/crud/deleteObject.e2e.test.js.map +1 -1
  10. package/dist/__tests__/e2e/crud/fileValidation.e2e.test.js +0 -4
  11. package/dist/__tests__/e2e/crud/fileValidation.e2e.test.js.map +1 -1
  12. package/dist/__tests__/e2e/crud/getObject.e2e.test.js +3 -8
  13. package/dist/__tests__/e2e/crud/getObject.e2e.test.js.map +1 -1
  14. package/dist/__tests__/e2e/crud/listObjects.e2e.test.js +1 -6
  15. package/dist/__tests__/e2e/crud/listObjects.e2e.test.js.map +1 -1
  16. package/dist/__tests__/e2e/crud/updateObject.e2e.test.js +0 -5
  17. package/dist/__tests__/e2e/crud/updateObject.e2e.test.js.map +1 -1
  18. package/dist/__tests__/e2e/hierarchicalPrerequisites.e2e.test.js +0 -4
  19. package/dist/__tests__/e2e/hierarchicalPrerequisites.e2e.test.js.map +1 -1
  20. package/dist/__tests__/e2e/infrastructure/client.e2e.test.js +0 -20
  21. package/dist/__tests__/e2e/infrastructure/client.e2e.test.js.map +1 -1
  22. package/dist/__tests__/e2e/utils/createObjectFile.d.ts.map +1 -1
  23. package/dist/__tests__/e2e/utils/createObjectFile.js +4 -1
  24. package/dist/__tests__/e2e/utils/createObjectFile.js.map +1 -1
  25. package/dist/__tests__/e2e/utils/fileExists.d.ts.map +1 -1
  26. package/dist/__tests__/e2e/utils/fileExists.js +3 -1
  27. package/dist/__tests__/e2e/utils/fileExists.js.map +1 -1
  28. package/dist/__tests__/e2e/utils/folderExists.d.ts +1 -1
  29. package/dist/__tests__/e2e/utils/folderExists.d.ts.map +1 -1
  30. package/dist/__tests__/e2e/utils/folderExists.js +4 -2
  31. package/dist/__tests__/e2e/utils/folderExists.js.map +1 -1
  32. package/dist/__tests__/e2e/utils/mcpTestClient.d.ts.map +1 -1
  33. package/dist/__tests__/e2e/utils/mcpTestClient.js +2 -7
  34. package/dist/__tests__/e2e/utils/mcpTestClient.js.map +1 -1
  35. package/dist/__tests__/e2e/utils/readObjectFile.d.ts.map +1 -1
  36. package/dist/__tests__/e2e/utils/readObjectFile.js +3 -1
  37. package/dist/__tests__/e2e/utils/readObjectFile.js.map +1 -1
  38. package/dist/__tests__/e2e/utils/serverProcess.d.ts.map +1 -1
  39. package/dist/__tests__/e2e/utils/serverProcess.js +2 -8
  40. package/dist/__tests__/e2e/utils/serverProcess.js.map +1 -1
  41. package/dist/__tests__/e2e/utils/testEnvironment.d.ts +5 -1
  42. package/dist/__tests__/e2e/utils/testEnvironment.d.ts.map +1 -1
  43. package/dist/__tests__/e2e/utils/testEnvironment.js +31 -9
  44. package/dist/__tests__/e2e/utils/testEnvironment.js.map +1 -1
  45. package/dist/__tests__/e2e/workflow/appendLog.e2e.test.js +0 -4
  46. package/dist/__tests__/e2e/workflow/appendLog.e2e.test.js.map +1 -1
  47. package/dist/__tests__/e2e/workflow/appendModifiedFiles.e2e.test.js +0 -4
  48. package/dist/__tests__/e2e/workflow/appendModifiedFiles.e2e.test.js.map +1 -1
  49. package/dist/__tests__/e2e/workflow/claimTask.e2e.test.js +0 -4
  50. package/dist/__tests__/e2e/workflow/claimTask.e2e.test.js.map +1 -1
  51. package/dist/__tests__/e2e/workflow/completeTask.e2e.test.js +0 -8
  52. package/dist/__tests__/e2e/workflow/completeTask.e2e.test.js.map +1 -1
  53. package/dist/__tests__/e2e/workflow/getNextAvailableIssue.e2e.test.js +0 -4
  54. package/dist/__tests__/e2e/workflow/getNextAvailableIssue.e2e.test.js.map +1 -1
  55. package/dist/__tests__/e2e/workflow/prerequisites.e2e.test.js +0 -4
  56. package/dist/__tests__/e2e/workflow/prerequisites.e2e.test.js.map +1 -1
  57. package/dist/__tests__/e2e/workflow/taskLifecycle.e2e.test.js +0 -4
  58. package/dist/__tests__/e2e/workflow/taskLifecycle.e2e.test.js.map +1 -1
  59. package/dist/configuration/ServerConfig.d.ts +1 -4
  60. package/dist/configuration/ServerConfig.d.ts.map +1 -1
  61. package/dist/configuration/__tests__/resolveDataDir.test.d.ts +2 -0
  62. package/dist/configuration/__tests__/resolveDataDir.test.d.ts.map +1 -0
  63. package/dist/configuration/__tests__/resolveDataDir.test.js +78 -0
  64. package/dist/configuration/__tests__/resolveDataDir.test.js.map +1 -0
  65. package/dist/configuration/index.d.ts +3 -0
  66. package/dist/configuration/index.d.ts.map +1 -1
  67. package/dist/configuration/index.js +3 -0
  68. package/dist/configuration/index.js.map +1 -1
  69. package/dist/configuration/resolveDataDir.d.ts +3 -0
  70. package/dist/configuration/resolveDataDir.d.ts.map +1 -0
  71. package/dist/configuration/resolveDataDir.js +10 -0
  72. package/dist/configuration/resolveDataDir.js.map +1 -0
  73. package/dist/configuration/resolveProjectKey.d.ts +3 -0
  74. package/dist/configuration/resolveProjectKey.d.ts.map +1 -0
  75. package/dist/configuration/resolveProjectKey.js +13 -0
  76. package/dist/configuration/resolveProjectKey.js.map +1 -0
  77. package/dist/configuration/resolveProjectLabel.d.ts +3 -0
  78. package/dist/configuration/resolveProjectLabel.d.ts.map +1 -0
  79. package/dist/configuration/resolveProjectLabel.js +24 -0
  80. package/dist/configuration/resolveProjectLabel.js.map +1 -0
  81. package/dist/http/__tests__/deleteHandlers.test.d.ts +2 -0
  82. package/dist/http/__tests__/deleteHandlers.test.d.ts.map +1 -0
  83. package/dist/http/__tests__/deleteHandlers.test.js +162 -0
  84. package/dist/http/__tests__/deleteHandlers.test.js.map +1 -0
  85. package/dist/http/__tests__/editCreateHandlers.test.d.ts +2 -0
  86. package/dist/http/__tests__/editCreateHandlers.test.d.ts.map +1 -0
  87. package/dist/http/__tests__/editCreateHandlers.test.js +394 -0
  88. package/dist/http/__tests__/editCreateHandlers.test.js.map +1 -0
  89. package/dist/http/__tests__/escapeHtml.test.d.ts +2 -0
  90. package/dist/http/__tests__/escapeHtml.test.d.ts.map +1 -0
  91. package/dist/http/__tests__/escapeHtml.test.js +9 -0
  92. package/dist/http/__tests__/escapeHtml.test.js.map +1 -0
  93. package/dist/http/__tests__/landingPage.test.d.ts +2 -0
  94. package/dist/http/__tests__/landingPage.test.d.ts.map +1 -0
  95. package/dist/http/__tests__/landingPage.test.js +65 -0
  96. package/dist/http/__tests__/landingPage.test.js.map +1 -0
  97. package/dist/http/__tests__/projectTreePage.test.d.ts +2 -0
  98. package/dist/http/__tests__/projectTreePage.test.d.ts.map +1 -0
  99. package/dist/http/__tests__/projectTreePage.test.js +348 -0
  100. package/dist/http/__tests__/projectTreePage.test.js.map +1 -0
  101. package/dist/http/__tests__/router.test.d.ts +2 -0
  102. package/dist/http/__tests__/router.test.d.ts.map +1 -0
  103. package/dist/http/__tests__/router.test.js +88 -0
  104. package/dist/http/__tests__/router.test.js.map +1 -0
  105. package/dist/http/appShell.d.ts +3 -0
  106. package/dist/http/appShell.d.ts.map +1 -0
  107. package/dist/http/appShell.js +99 -0
  108. package/dist/http/appShell.js.map +1 -0
  109. package/dist/http/escapeHtml.d.ts +3 -0
  110. package/dist/http/escapeHtml.d.ts.map +1 -0
  111. package/dist/http/escapeHtml.js +13 -0
  112. package/dist/http/escapeHtml.js.map +1 -0
  113. package/dist/http/htmx.min.js +3524 -0
  114. package/dist/http/index.d.ts +3 -0
  115. package/dist/http/index.d.ts.map +1 -0
  116. package/dist/http/index.js +42 -0
  117. package/dist/http/index.js.map +1 -0
  118. package/dist/http/landingPage.d.ts +4 -0
  119. package/dist/http/landingPage.d.ts.map +1 -0
  120. package/dist/http/landingPage.js +87 -0
  121. package/dist/http/landingPage.js.map +1 -0
  122. package/dist/http/partial.d.ts +3 -0
  123. package/dist/http/partial.d.ts.map +1 -0
  124. package/dist/http/partial.js +8 -0
  125. package/dist/http/partial.js.map +1 -0
  126. package/dist/http/projectTreePage/computeInitialOpenSet.d.ts +4 -0
  127. package/dist/http/projectTreePage/computeInitialOpenSet.d.ts.map +1 -0
  128. package/dist/http/projectTreePage/computeInitialOpenSet.js +20 -0
  129. package/dist/http/projectTreePage/computeInitialOpenSet.js.map +1 -0
  130. package/dist/http/projectTreePage/createChildFormHandler.d.ts +4 -0
  131. package/dist/http/projectTreePage/createChildFormHandler.d.ts.map +1 -0
  132. package/dist/http/projectTreePage/createChildFormHandler.js +27 -0
  133. package/dist/http/projectTreePage/createChildFormHandler.js.map +1 -0
  134. package/dist/http/projectTreePage/createChildSubmitHandler.d.ts +4 -0
  135. package/dist/http/projectTreePage/createChildSubmitHandler.d.ts.map +1 -0
  136. package/dist/http/projectTreePage/createChildSubmitHandler.js +67 -0
  137. package/dist/http/projectTreePage/createChildSubmitHandler.js.map +1 -0
  138. package/dist/http/projectTreePage/createTopFormHandler.d.ts +4 -0
  139. package/dist/http/projectTreePage/createTopFormHandler.d.ts.map +1 -0
  140. package/dist/http/projectTreePage/createTopFormHandler.js +11 -0
  141. package/dist/http/projectTreePage/createTopFormHandler.js.map +1 -0
  142. package/dist/http/projectTreePage/createTopSubmitHandler.d.ts +4 -0
  143. package/dist/http/projectTreePage/createTopSubmitHandler.d.ts.map +1 -0
  144. package/dist/http/projectTreePage/createTopSubmitHandler.js +74 -0
  145. package/dist/http/projectTreePage/createTopSubmitHandler.js.map +1 -0
  146. package/dist/http/projectTreePage/deleteFormHandler.d.ts +4 -0
  147. package/dist/http/projectTreePage/deleteFormHandler.d.ts.map +1 -0
  148. package/dist/http/projectTreePage/deleteFormHandler.js +27 -0
  149. package/dist/http/projectTreePage/deleteFormHandler.js.map +1 -0
  150. package/dist/http/projectTreePage/deleteSubmitHandler.d.ts +4 -0
  151. package/dist/http/projectTreePage/deleteSubmitHandler.d.ts.map +1 -0
  152. package/dist/http/projectTreePage/deleteSubmitHandler.js +32 -0
  153. package/dist/http/projectTreePage/deleteSubmitHandler.js.map +1 -0
  154. package/dist/http/projectTreePage/deriveChildType.d.ts +4 -0
  155. package/dist/http/projectTreePage/deriveChildType.d.ts.map +1 -0
  156. package/dist/http/projectTreePage/deriveChildType.js +14 -0
  157. package/dist/http/projectTreePage/deriveChildType.js.map +1 -0
  158. package/dist/http/projectTreePage/detailViewHandler.d.ts +4 -0
  159. package/dist/http/projectTreePage/detailViewHandler.d.ts.map +1 -0
  160. package/dist/http/projectTreePage/detailViewHandler.js +20 -0
  161. package/dist/http/projectTreePage/detailViewHandler.js.map +1 -0
  162. package/dist/http/projectTreePage/editFormHandler.d.ts +4 -0
  163. package/dist/http/projectTreePage/editFormHandler.d.ts.map +1 -0
  164. package/dist/http/projectTreePage/editFormHandler.js +26 -0
  165. package/dist/http/projectTreePage/editFormHandler.js.map +1 -0
  166. package/dist/http/projectTreePage/editSubmitHandler.d.ts +4 -0
  167. package/dist/http/projectTreePage/editSubmitHandler.d.ts.map +1 -0
  168. package/dist/http/projectTreePage/editSubmitHandler.js +61 -0
  169. package/dist/http/projectTreePage/editSubmitHandler.js.map +1 -0
  170. package/dist/http/projectTreePage/index.d.ts +12 -0
  171. package/dist/http/projectTreePage/index.d.ts.map +1 -0
  172. package/dist/http/projectTreePage/index.js +26 -0
  173. package/dist/http/projectTreePage/index.js.map +1 -0
  174. package/dist/http/projectTreePage/makeRepo.d.ts +5 -0
  175. package/dist/http/projectTreePage/makeRepo.d.ts.map +1 -0
  176. package/dist/http/projectTreePage/makeRepo.js +18 -0
  177. package/dist/http/projectTreePage/makeRepo.js.map +1 -0
  178. package/dist/http/projectTreePage/metaBar.d.ts +4 -0
  179. package/dist/http/projectTreePage/metaBar.d.ts.map +1 -0
  180. package/dist/http/projectTreePage/metaBar.js +15 -0
  181. package/dist/http/projectTreePage/metaBar.js.map +1 -0
  182. package/dist/http/projectTreePage/parsePrereqs.d.ts +3 -0
  183. package/dist/http/projectTreePage/parsePrereqs.d.ts.map +1 -0
  184. package/dist/http/projectTreePage/parsePrereqs.js +11 -0
  185. package/dist/http/projectTreePage/parsePrereqs.js.map +1 -0
  186. package/dist/http/projectTreePage/priorityCssClass.d.ts +3 -0
  187. package/dist/http/projectTreePage/priorityCssClass.d.ts.map +1 -0
  188. package/dist/http/projectTreePage/priorityCssClass.js +8 -0
  189. package/dist/http/projectTreePage/priorityCssClass.js.map +1 -0
  190. package/dist/http/projectTreePage/priorityRadios.d.ts +3 -0
  191. package/dist/http/projectTreePage/priorityRadios.d.ts.map +1 -0
  192. package/dist/http/projectTreePage/priorityRadios.js +20 -0
  193. package/dist/http/projectTreePage/priorityRadios.js.map +1 -0
  194. package/dist/http/projectTreePage/projectTreeHandler.d.ts +4 -0
  195. package/dist/http/projectTreePage/projectTreeHandler.d.ts.map +1 -0
  196. package/dist/http/projectTreePage/projectTreeHandler.js +74 -0
  197. package/dist/http/projectTreePage/projectTreeHandler.js.map +1 -0
  198. package/dist/http/projectTreePage/renderCreateChildForm.d.ts +12 -0
  199. package/dist/http/projectTreePage/renderCreateChildForm.d.ts.map +1 -0
  200. package/dist/http/projectTreePage/renderCreateChildForm.js +60 -0
  201. package/dist/http/projectTreePage/renderCreateChildForm.js.map +1 -0
  202. package/dist/http/projectTreePage/renderCreateTopForm.d.ts +12 -0
  203. package/dist/http/projectTreePage/renderCreateTopForm.d.ts.map +1 -0
  204. package/dist/http/projectTreePage/renderCreateTopForm.js +74 -0
  205. package/dist/http/projectTreePage/renderCreateTopForm.js.map +1 -0
  206. package/dist/http/projectTreePage/renderDeleteModal.d.ts +4 -0
  207. package/dist/http/projectTreePage/renderDeleteModal.d.ts.map +1 -0
  208. package/dist/http/projectTreePage/renderDeleteModal.js +49 -0
  209. package/dist/http/projectTreePage/renderDeleteModal.js.map +1 -0
  210. package/dist/http/projectTreePage/renderDetailView.d.ts +5 -0
  211. package/dist/http/projectTreePage/renderDetailView.d.ts.map +1 -0
  212. package/dist/http/projectTreePage/renderDetailView.js +121 -0
  213. package/dist/http/projectTreePage/renderDetailView.js.map +1 -0
  214. package/dist/http/projectTreePage/renderEditForm.d.ts +12 -0
  215. package/dist/http/projectTreePage/renderEditForm.d.ts.map +1 -0
  216. package/dist/http/projectTreePage/renderEditForm.js +61 -0
  217. package/dist/http/projectTreePage/renderEditForm.js.map +1 -0
  218. package/dist/http/projectTreePage/renderFlatFragment.d.ts +4 -0
  219. package/dist/http/projectTreePage/renderFlatFragment.d.ts.map +1 -0
  220. package/dist/http/projectTreePage/renderFlatFragment.js +12 -0
  221. package/dist/http/projectTreePage/renderFlatFragment.js.map +1 -0
  222. package/dist/http/projectTreePage/renderTreeFragment.d.ts +4 -0
  223. package/dist/http/projectTreePage/renderTreeFragment.d.ts.map +1 -0
  224. package/dist/http/projectTreePage/renderTreeFragment.js +31 -0
  225. package/dist/http/projectTreePage/renderTreeFragment.js.map +1 -0
  226. package/dist/http/projectTreePage/searchHandler.d.ts +4 -0
  227. package/dist/http/projectTreePage/searchHandler.d.ts.map +1 -0
  228. package/dist/http/projectTreePage/searchHandler.js +29 -0
  229. package/dist/http/projectTreePage/searchHandler.js.map +1 -0
  230. package/dist/http/projectTreePage/statusCssClass.d.ts +3 -0
  231. package/dist/http/projectTreePage/statusCssClass.d.ts.map +1 -0
  232. package/dist/http/projectTreePage/statusCssClass.js +12 -0
  233. package/dist/http/projectTreePage/statusCssClass.js.map +1 -0
  234. package/dist/http/projectTreePage/statusLabels.d.ts +3 -0
  235. package/dist/http/projectTreePage/statusLabels.d.ts.map +1 -0
  236. package/dist/http/projectTreePage/statusLabels.js +12 -0
  237. package/dist/http/projectTreePage/statusLabels.js.map +1 -0
  238. package/dist/http/projectTreePage/statusRadios.d.ts +3 -0
  239. package/dist/http/projectTreePage/statusRadios.d.ts.map +1 -0
  240. package/dist/http/projectTreePage/statusRadios.js +15 -0
  241. package/dist/http/projectTreePage/statusRadios.js.map +1 -0
  242. package/dist/http/projectTreePage/treeRow.d.ts +9 -0
  243. package/dist/http/projectTreePage/treeRow.d.ts.map +1 -0
  244. package/dist/http/projectTreePage/treeRow.js +21 -0
  245. package/dist/http/projectTreePage/treeRow.js.map +1 -0
  246. package/dist/http/projectTreePage/typeLabel.d.ts +3 -0
  247. package/dist/http/projectTreePage/typeLabel.d.ts.map +1 -0
  248. package/dist/http/projectTreePage/typeLabel.js +8 -0
  249. package/dist/http/projectTreePage/typeLabel.js.map +1 -0
  250. package/dist/http/readFormBody.d.ts +4 -0
  251. package/dist/http/readFormBody.d.ts.map +1 -0
  252. package/dist/http/readFormBody.js +26 -0
  253. package/dist/http/readFormBody.js.map +1 -0
  254. package/dist/http/router.d.ts +11 -0
  255. package/dist/http/router.d.ts.map +1 -0
  256. package/dist/http/router.js +61 -0
  257. package/dist/http/router.js.map +1 -0
  258. package/dist/http/styles.css +1300 -0
  259. package/dist/httpServer.d.ts +3 -0
  260. package/dist/httpServer.d.ts.map +1 -0
  261. package/dist/httpServer.js +14 -0
  262. package/dist/httpServer.js.map +1 -0
  263. package/dist/repositories/local/LocalRepository.d.ts.map +1 -1
  264. package/dist/repositories/local/LocalRepository.js +2 -3
  265. package/dist/repositories/local/LocalRepository.js.map +1 -1
  266. package/dist/repositories/local/__tests__/writeProjectMeta.test.d.ts +2 -0
  267. package/dist/repositories/local/__tests__/writeProjectMeta.test.d.ts.map +1 -0
  268. package/dist/repositories/local/__tests__/writeProjectMeta.test.js +34 -0
  269. package/dist/repositories/local/__tests__/writeProjectMeta.test.js.map +1 -0
  270. package/dist/repositories/local/deleteObjectById.d.ts.map +1 -1
  271. package/dist/repositories/local/deleteObjectById.js +0 -1
  272. package/dist/repositories/local/deleteObjectById.js.map +1 -1
  273. package/dist/repositories/local/writeProjectMeta.d.ts +3 -0
  274. package/dist/repositories/local/writeProjectMeta.d.ts.map +1 -0
  275. package/dist/repositories/local/writeProjectMeta.js +20 -0
  276. package/dist/repositories/local/writeProjectMeta.js.map +1 -0
  277. package/dist/server.js +50 -64
  278. package/dist/server.js.map +1 -1
  279. package/dist/services/local/__tests__/completeTask.test.js +0 -3
  280. package/dist/services/local/__tests__/completeTask.test.js.map +1 -1
  281. package/dist/services/local/__tests__/updateObject.test.js +0 -6
  282. package/dist/services/local/__tests__/updateObject.test.js.map +1 -1
  283. package/dist/tools/__tests__/completeTaskTool.test.js +0 -2
  284. package/dist/tools/__tests__/completeTaskTool.test.js.map +1 -1
  285. package/dist/tools/__tests__/updateObjectTool.test.js +0 -2
  286. package/dist/tools/__tests__/updateObjectTool.test.js.map +1 -1
  287. package/dist/tools/index.d.ts +0 -1
  288. package/dist/tools/index.d.ts.map +1 -1
  289. package/dist/tools/index.js +1 -4
  290. package/dist/tools/index.js.map +1 -1
  291. package/package.json +1 -1
  292. package/dist/__tests__/e2e/configuration/activation.e2e.test.d.ts +0 -2
  293. package/dist/__tests__/e2e/configuration/activation.e2e.test.d.ts.map +0 -1
  294. package/dist/__tests__/e2e/configuration/activation.e2e.test.js +0 -130
  295. package/dist/__tests__/e2e/configuration/activation.e2e.test.js.map +0 -1
  296. package/dist/__tests__/e2e/configuration/directorySetup.e2e.test.d.ts +0 -2
  297. package/dist/__tests__/e2e/configuration/directorySetup.e2e.test.d.ts.map +0 -1
  298. package/dist/__tests__/e2e/configuration/directorySetup.e2e.test.js +0 -262
  299. package/dist/__tests__/e2e/configuration/directorySetup.e2e.test.js.map +0 -1
  300. package/dist/__tests__/e2e/configuration/invalidConfig.e2e.test.d.ts +0 -2
  301. package/dist/__tests__/e2e/configuration/invalidConfig.e2e.test.d.ts.map +0 -1
  302. package/dist/__tests__/e2e/configuration/invalidConfig.e2e.test.js +0 -243
  303. package/dist/__tests__/e2e/configuration/invalidConfig.e2e.test.js.map +0 -1
  304. package/dist/__tests__/e2e/configuration/preActivation.e2e.test.d.ts +0 -2
  305. package/dist/__tests__/e2e/configuration/preActivation.e2e.test.d.ts.map +0 -1
  306. package/dist/__tests__/e2e/configuration/preActivation.e2e.test.js +0 -123
  307. package/dist/__tests__/e2e/configuration/preActivation.e2e.test.js.map +0 -1
  308. package/dist/tools/activateTool.d.ts +0 -38
  309. package/dist/tools/activateTool.d.ts.map +0 -1
  310. package/dist/tools/activateTool.js +0 -82
  311. package/dist/tools/activateTool.js.map +0 -1
@@ -0,0 +1,1300 @@
1
+ /* ============================================
2
+ Task Trellis — Design tokens & styles
3
+ Single-file CSS, no framework.
4
+ ============================================ */
5
+
6
+ :root {
7
+ /* --- Color: neutral cool gray scale --- */
8
+ --gray-0: #ffffff;
9
+ --gray-50: #fafafb;
10
+ --gray-100: #f4f5f7;
11
+ --gray-150: #eceef2;
12
+ --gray-200: #e3e5eb;
13
+ --gray-300: #d2d5dd;
14
+ --gray-400: #a4a9b5;
15
+ --gray-500: #7a8092;
16
+ --gray-600: #555b6b;
17
+ --gray-700: #3a3f4c;
18
+ --gray-800: #23262f;
19
+ --gray-900: #13151b;
20
+
21
+ /* --- Accent (single, restrained indigo) --- */
22
+ --accent: #5b5fe0;
23
+ --accent-hover: #4a4ecc;
24
+ --accent-tint: #eef0ff;
25
+ --accent-border: #c7cafc;
26
+
27
+ /* --- Status colors (subtle; body + dot only) --- */
28
+ --status-draft: #8a8fa0;
29
+ --status-draft-bg: #eef0f3;
30
+ --status-open: #3b82a8;
31
+ --status-open-bg: #e6f1f8;
32
+ --status-progress: #b47717;
33
+ --status-progress-bg: #fbf2dc;
34
+ --status-done: #2e8757;
35
+ --status-done-bg: #e3f3ea;
36
+ --status-wontdo: #8a8fa0;
37
+ --status-wontdo-bg: #f0f1f4;
38
+
39
+ /* --- Priority colors --- */
40
+ --prio-high: #c73e3e;
41
+ --prio-high-bg: #fbe9e9;
42
+ --prio-med: #6b7280;
43
+ --prio-med-bg: #eef0f3;
44
+ --prio-low: #8a8fa0;
45
+ --prio-low-bg: #f3f4f7;
46
+
47
+ /* --- Danger --- */
48
+ --danger: #c73e3e;
49
+ --danger-hover: #a92e2e;
50
+ --danger-tint: #fdecec;
51
+
52
+ /* --- Semantic --- */
53
+ --bg: var(--gray-50);
54
+ --bg-panel: var(--gray-0);
55
+ --bg-sidebar: var(--gray-50);
56
+ --bg-sunken: var(--gray-100);
57
+ --border: var(--gray-200);
58
+ --border-strong: var(--gray-300);
59
+ --text: var(--gray-900);
60
+ --text-muted: var(--gray-600);
61
+ --text-subtle: var(--gray-500);
62
+
63
+ /* --- Type --- */
64
+ --font-sans: ui-sans-serif, -apple-system, "Segoe UI", system-ui, sans-serif;
65
+ --font-mono:
66
+ ui-monospace, "SF Mono", "JetBrains Mono", Menlo, Consolas, monospace;
67
+
68
+ --text-xs: 11px;
69
+ --text-sm: 12.5px;
70
+ --text-md: 13.5px;
71
+ --text-lg: 15px;
72
+ --text-xl: 19px;
73
+ --text-2xl: 22px;
74
+
75
+ /* --- Space --- */
76
+ --sp-1: 4px;
77
+ --sp-2: 8px;
78
+ --sp-3: 12px;
79
+ --sp-4: 16px;
80
+ --sp-5: 20px;
81
+ --sp-6: 24px;
82
+ --sp-8: 32px;
83
+
84
+ --radius-sm: 4px;
85
+ --radius: 6px;
86
+ --radius-lg: 8px;
87
+
88
+ --shadow-sm: 0 1px 2px rgba(15, 17, 25, 0.04);
89
+ --shadow-md:
90
+ 0 4px 16px rgba(15, 17, 25, 0.08), 0 2px 4px rgba(15, 17, 25, 0.04);
91
+ --shadow-lg:
92
+ 0 20px 40px rgba(15, 17, 25, 0.18), 0 4px 12px rgba(15, 17, 25, 0.08);
93
+ }
94
+
95
+ /* ============================================
96
+ Dark theme
97
+ ============================================ */
98
+ [data-theme="dark"] {
99
+ --gray-0: #0d0f14;
100
+ --gray-50: #10131a;
101
+ --gray-100: #171a22;
102
+ --gray-150: #1c2029;
103
+ --gray-200: #232834;
104
+ --gray-300: #2e3441;
105
+ --gray-400: #4a5163;
106
+ --gray-500: #6b7284;
107
+ --gray-600: #99a0b0;
108
+ --gray-700: #c2c7d2;
109
+ --gray-800: #e0e3ea;
110
+ --gray-900: #f2f4f8;
111
+
112
+ --accent: #7a7ef0;
113
+ --accent-hover: #8e92f5;
114
+ --accent-tint: #1d1f38;
115
+ --accent-border: #3a3d6b;
116
+
117
+ --status-draft: #8890a0;
118
+ --status-draft-bg: #1d2029;
119
+ --status-open: #5ba7d1;
120
+ --status-open-bg: #142634;
121
+ --status-progress: #d9a147;
122
+ --status-progress-bg: #2a2014;
123
+ --status-done: #55b47f;
124
+ --status-done-bg: #132a1e;
125
+ --status-wontdo: #6b7284;
126
+ --status-wontdo-bg: #1a1d26;
127
+
128
+ --prio-high: #e06969;
129
+ --prio-high-bg: #2a1818;
130
+ --prio-med: #99a0b0;
131
+ --prio-med-bg: #1d2029;
132
+ --prio-low: #6b7284;
133
+ --prio-low-bg: #171a22;
134
+
135
+ --danger: #e06969;
136
+ --danger-hover: #eb7e7e;
137
+ --danger-tint: #2a1818;
138
+
139
+ --bg: #0d0f14;
140
+ --bg-panel: #12151c;
141
+ --bg-sidebar: #0f1218;
142
+ --bg-sunken: #171a22;
143
+ --border: #232834;
144
+ --border-strong: #2e3441;
145
+ --text: var(--gray-900);
146
+ --text-muted: var(--gray-700);
147
+ --text-subtle: var(--gray-500);
148
+
149
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
150
+ --shadow-md: 0 4px 16px rgba(0, 0, 0, 0.4), 0 2px 4px rgba(0, 0, 0, 0.3);
151
+ --shadow-lg: 0 20px 40px rgba(0, 0, 0, 0.6), 0 4px 12px rgba(0, 0, 0, 0.4);
152
+
153
+ color-scheme: dark;
154
+ }
155
+ [data-theme="dark"] .modal-backdrop {
156
+ background: rgba(0, 0, 0, 0.55);
157
+ }
158
+ [data-theme="dark"] .modal .warn {
159
+ background: #2a220d;
160
+ border-color: #4a3a14;
161
+ color: #e8c987;
162
+ }
163
+ [data-theme="dark"] .prose code {
164
+ background: #252a36;
165
+ }
166
+
167
+ /* ============================================
168
+ Reset & base
169
+ ============================================ */
170
+ *,
171
+ *::before,
172
+ *::after {
173
+ box-sizing: border-box;
174
+ }
175
+ html,
176
+ body {
177
+ margin: 0;
178
+ padding: 0;
179
+ height: 100%;
180
+ }
181
+ body {
182
+ font-family: var(--font-sans);
183
+ font-size: var(--text-md);
184
+ line-height: 1.5;
185
+ color: var(--text);
186
+ background: var(--bg);
187
+ -webkit-font-smoothing: antialiased;
188
+ text-rendering: optimizeLegibility;
189
+ }
190
+ button {
191
+ font: inherit;
192
+ color: inherit;
193
+ cursor: pointer;
194
+ }
195
+ input,
196
+ textarea,
197
+ select {
198
+ font: inherit;
199
+ color: inherit;
200
+ }
201
+ a {
202
+ color: inherit;
203
+ }
204
+
205
+ /* ============================================
206
+ App shell
207
+ ============================================ */
208
+ .app {
209
+ display: grid;
210
+ grid-template-columns: 360px 1fr;
211
+ height: 100vh;
212
+ min-height: 0;
213
+ }
214
+
215
+ /* ============================================
216
+ Sidebar (issue tree)
217
+ ============================================ */
218
+ .sidebar {
219
+ background: var(--bg-sidebar);
220
+ border-right: 1px solid var(--border);
221
+ display: flex;
222
+ flex-direction: column;
223
+ min-height: 0;
224
+ }
225
+ .sidebar-header {
226
+ display: flex;
227
+ align-items: center;
228
+ justify-content: space-between;
229
+ padding: var(--sp-4) var(--sp-4) var(--sp-3);
230
+ gap: var(--sp-2);
231
+ }
232
+ .brand {
233
+ display: flex;
234
+ align-items: center;
235
+ gap: var(--sp-2);
236
+ }
237
+ .brand-mark {
238
+ width: 20px;
239
+ height: 20px;
240
+ border-radius: 5px;
241
+ background: var(--accent);
242
+ display: grid;
243
+ place-items: center;
244
+ color: white;
245
+ font-size: 11px;
246
+ font-weight: 700;
247
+ letter-spacing: -0.02em;
248
+ font-family: var(--font-mono);
249
+ }
250
+ .brand-name {
251
+ font-size: var(--text-md);
252
+ font-weight: 600;
253
+ letter-spacing: -0.01em;
254
+ }
255
+ .brand-repo {
256
+ font-family: var(--font-mono);
257
+ font-size: var(--text-xs);
258
+ color: var(--text-subtle);
259
+ margin-left: var(--sp-1);
260
+ }
261
+ .icon-btn {
262
+ appearance: none;
263
+ background: transparent;
264
+ border: 1px solid transparent;
265
+ border-radius: var(--radius-sm);
266
+ width: 26px;
267
+ height: 26px;
268
+ display: grid;
269
+ place-items: center;
270
+ color: var(--text-muted);
271
+ transition:
272
+ background 0.12s,
273
+ color 0.12s,
274
+ border-color 0.12s;
275
+ }
276
+ .icon-btn:hover {
277
+ background: var(--gray-150);
278
+ color: var(--text);
279
+ }
280
+ .icon-btn svg {
281
+ width: 15px;
282
+ height: 15px;
283
+ }
284
+
285
+ .search {
286
+ position: relative;
287
+ padding: 0 var(--sp-4) var(--sp-3);
288
+ }
289
+ .search input {
290
+ width: 100%;
291
+ padding: 6px 10px 6px 28px;
292
+ border: 1px solid var(--border);
293
+ border-radius: var(--radius);
294
+ background: var(--bg-panel);
295
+ font-size: var(--text-sm);
296
+ color: var(--text);
297
+ outline: none;
298
+ transition:
299
+ border-color 0.12s,
300
+ box-shadow 0.12s;
301
+ }
302
+ .search input::placeholder {
303
+ color: var(--text-subtle);
304
+ }
305
+ .search input:focus {
306
+ border-color: var(--accent);
307
+ box-shadow: 0 0 0 3px var(--accent-tint);
308
+ }
309
+ .search svg {
310
+ position: absolute;
311
+ left: calc(var(--sp-4) + 9px);
312
+ top: 50%;
313
+ transform: translateY(calc(-50% - var(--sp-3) / 2 + 1px));
314
+ width: 13px;
315
+ height: 13px;
316
+ color: var(--text-subtle);
317
+ pointer-events: none;
318
+ }
319
+ .search kbd {
320
+ position: absolute;
321
+ right: calc(var(--sp-4) + 8px);
322
+ top: 50%;
323
+ transform: translateY(calc(-50% - var(--sp-3) / 2 + 1px));
324
+ font-family: var(--font-mono);
325
+ font-size: 10px;
326
+ color: var(--text-subtle);
327
+ background: var(--gray-100);
328
+ border: 1px solid var(--border);
329
+ padding: 1px 5px;
330
+ border-radius: 3px;
331
+ line-height: 1.4;
332
+ }
333
+
334
+ .tree-meta {
335
+ display: flex;
336
+ align-items: center;
337
+ gap: var(--sp-2);
338
+ padding: 0 var(--sp-4) var(--sp-2);
339
+ font-size: var(--text-xs);
340
+ color: var(--text-subtle);
341
+ }
342
+ .tree-meta .dot {
343
+ width: 4px;
344
+ height: 4px;
345
+ border-radius: 50%;
346
+ background: var(--border-strong);
347
+ }
348
+ .tree-meta strong {
349
+ color: var(--text-muted);
350
+ font-weight: 500;
351
+ }
352
+
353
+ .tree {
354
+ flex: 1;
355
+ overflow-y: auto;
356
+ padding: var(--sp-1) var(--sp-2) var(--sp-5);
357
+ }
358
+
359
+ /* ----- tree rows ----- */
360
+ .row[hidden] {
361
+ display: none;
362
+ }
363
+ .row {
364
+ --indent: 0px;
365
+ display: grid;
366
+ grid-template-columns: 18px 14px 1fr auto;
367
+ align-items: center;
368
+ gap: var(--sp-2);
369
+ padding: 5px var(--sp-2) 5px calc(var(--sp-2) + var(--indent));
370
+ border-radius: var(--radius-sm);
371
+ font-size: var(--text-sm);
372
+ color: var(--text);
373
+ cursor: pointer;
374
+ user-select: none;
375
+ position: relative;
376
+ border-left: 2px solid transparent;
377
+ margin-left: -2px;
378
+ line-height: 1.3;
379
+ }
380
+ .row:hover {
381
+ background: var(--gray-100);
382
+ }
383
+ .row.selected {
384
+ background: var(--accent-tint);
385
+ border-left-color: var(--accent);
386
+ }
387
+ .row.selected .row-title {
388
+ color: var(--gray-900);
389
+ font-weight: 500;
390
+ }
391
+ .row .chev {
392
+ width: 14px;
393
+ height: 14px;
394
+ display: grid;
395
+ place-items: center;
396
+ color: var(--text-subtle);
397
+ transition: transform 0.12s;
398
+ }
399
+ .row .chev.hidden {
400
+ visibility: hidden;
401
+ }
402
+ .row.open .chev {
403
+ transform: rotate(90deg);
404
+ }
405
+ .row .chev svg {
406
+ width: 10px;
407
+ height: 10px;
408
+ }
409
+ .row .kind {
410
+ font-family: var(--font-mono);
411
+ font-size: 10px;
412
+ font-weight: 600;
413
+ color: var(--text-subtle);
414
+ letter-spacing: 0.02em;
415
+ text-transform: uppercase;
416
+ text-align: center;
417
+ }
418
+ .row .row-title {
419
+ white-space: nowrap;
420
+ overflow: hidden;
421
+ text-overflow: ellipsis;
422
+ color: var(--text);
423
+ }
424
+ .row .row-meta {
425
+ display: inline-flex;
426
+ gap: var(--sp-1);
427
+ align-items: center;
428
+ flex-shrink: 0;
429
+ }
430
+
431
+ /* status dot inline in tree */
432
+ .sdot {
433
+ width: 7px;
434
+ height: 7px;
435
+ border-radius: 50%;
436
+ display: inline-block;
437
+ flex-shrink: 0;
438
+ }
439
+ .sdot.draft {
440
+ background: var(--status-draft);
441
+ opacity: 0.5;
442
+ }
443
+ .sdot.open {
444
+ background: var(--status-open);
445
+ }
446
+ .sdot.progress {
447
+ background: var(--status-progress);
448
+ }
449
+ .sdot.done {
450
+ background: var(--status-done);
451
+ }
452
+ .sdot.wontdo {
453
+ background: var(--status-wontdo);
454
+ opacity: 0.4;
455
+ }
456
+
457
+ .pbar {
458
+ width: 3px;
459
+ height: 10px;
460
+ border-radius: 1px;
461
+ background: var(--gray-300);
462
+ display: inline-block;
463
+ flex-shrink: 0;
464
+ margin-left: 2px;
465
+ }
466
+ .pbar.high {
467
+ background: var(--prio-high);
468
+ }
469
+ .pbar.med {
470
+ background: var(--gray-400);
471
+ }
472
+ .pbar.low {
473
+ background: var(--gray-300);
474
+ }
475
+
476
+ /* ============================================
477
+ Main pane
478
+ ============================================ */
479
+ .main {
480
+ display: flex;
481
+ flex-direction: column;
482
+ min-width: 0;
483
+ min-height: 0;
484
+ background: var(--bg-panel);
485
+ }
486
+
487
+ .detail {
488
+ flex: 1;
489
+ overflow-y: auto;
490
+ padding: var(--sp-6) var(--sp-8) var(--sp-8);
491
+ max-width: 860px;
492
+ width: 100%;
493
+ }
494
+
495
+ .crumbs {
496
+ display: flex;
497
+ align-items: center;
498
+ gap: var(--sp-1);
499
+ font-size: var(--text-xs);
500
+ color: var(--text-subtle);
501
+ font-family: var(--font-mono);
502
+ margin-bottom: var(--sp-5);
503
+ flex-wrap: wrap;
504
+ }
505
+ .crumbs a {
506
+ text-decoration: none;
507
+ padding: 2px 6px;
508
+ border-radius: 3px;
509
+ color: var(--text-subtle);
510
+ transition:
511
+ background 0.1s,
512
+ color 0.1s;
513
+ }
514
+ .crumbs a:hover {
515
+ background: var(--gray-100);
516
+ color: var(--text);
517
+ }
518
+ .crumbs .sep {
519
+ color: var(--gray-300);
520
+ padding: 0 2px;
521
+ }
522
+ .crumbs .current {
523
+ color: var(--text-muted);
524
+ padding: 2px 6px;
525
+ }
526
+
527
+ .title-row {
528
+ display: flex;
529
+ align-items: flex-start;
530
+ justify-content: space-between;
531
+ gap: var(--sp-4);
532
+ margin-bottom: var(--sp-4);
533
+ }
534
+ .title {
535
+ font-size: var(--text-2xl);
536
+ font-weight: 600;
537
+ letter-spacing: -0.015em;
538
+ line-height: 1.25;
539
+ color: var(--text);
540
+ margin: 0;
541
+ flex: 1;
542
+ }
543
+ .actions {
544
+ display: flex;
545
+ gap: var(--sp-2);
546
+ flex-shrink: 0;
547
+ }
548
+
549
+ /* ----- Buttons ----- */
550
+ .btn {
551
+ display: inline-flex;
552
+ align-items: center;
553
+ gap: 6px;
554
+ padding: 5px 11px;
555
+ background: var(--bg-panel);
556
+ border: 1px solid var(--border-strong);
557
+ border-radius: var(--radius);
558
+ font-size: var(--text-sm);
559
+ color: var(--text);
560
+ transition:
561
+ background 0.12s,
562
+ border-color 0.12s,
563
+ color 0.12s;
564
+ white-space: nowrap;
565
+ font-weight: 500;
566
+ box-shadow: var(--shadow-sm);
567
+ }
568
+ .btn:hover {
569
+ background: var(--gray-100);
570
+ border-color: var(--gray-400);
571
+ }
572
+ .btn svg {
573
+ width: 13px;
574
+ height: 13px;
575
+ }
576
+ .btn.primary {
577
+ background: var(--accent);
578
+ color: white;
579
+ border-color: var(--accent);
580
+ box-shadow: var(--shadow-sm);
581
+ }
582
+ .btn.primary:hover {
583
+ background: var(--accent-hover);
584
+ border-color: var(--accent-hover);
585
+ }
586
+ .btn.danger {
587
+ color: var(--danger);
588
+ border-color: var(--gray-300);
589
+ }
590
+ .btn.danger:hover {
591
+ background: var(--danger-tint);
592
+ border-color: var(--danger);
593
+ }
594
+ .btn.danger-solid {
595
+ background: var(--danger);
596
+ color: white;
597
+ border-color: var(--danger);
598
+ }
599
+ .btn.danger-solid:hover {
600
+ background: var(--danger-hover);
601
+ border-color: var(--danger-hover);
602
+ }
603
+ .btn.ghost {
604
+ border-color: transparent;
605
+ background: transparent;
606
+ box-shadow: none;
607
+ color: var(--text-muted);
608
+ }
609
+ .btn.ghost:hover {
610
+ background: var(--gray-100);
611
+ color: var(--text);
612
+ }
613
+
614
+ /* ----- Badges ----- */
615
+ .badges {
616
+ display: flex;
617
+ gap: 6px;
618
+ margin-bottom: var(--sp-6);
619
+ flex-wrap: wrap;
620
+ align-items: center;
621
+ }
622
+ .badge {
623
+ display: inline-flex;
624
+ align-items: center;
625
+ gap: 5px;
626
+ padding: 2px 8px;
627
+ border-radius: 10px;
628
+ font-size: var(--text-xs);
629
+ font-weight: 500;
630
+ line-height: 1.5;
631
+ white-space: nowrap;
632
+ }
633
+ .badge.kind {
634
+ background: var(--gray-100);
635
+ color: var(--text-muted);
636
+ font-family: var(--font-mono);
637
+ font-size: 10px;
638
+ letter-spacing: 0.04em;
639
+ text-transform: uppercase;
640
+ font-weight: 600;
641
+ padding: 2px 7px;
642
+ }
643
+ .badge.status-draft {
644
+ background: var(--status-draft-bg);
645
+ color: var(--status-draft);
646
+ }
647
+ .badge.status-open {
648
+ background: var(--status-open-bg);
649
+ color: var(--status-open);
650
+ }
651
+ .badge.status-progress {
652
+ background: var(--status-progress-bg);
653
+ color: var(--status-progress);
654
+ }
655
+ .badge.status-done {
656
+ background: var(--status-done-bg);
657
+ color: var(--status-done);
658
+ }
659
+ .badge.status-wontdo {
660
+ background: var(--status-wontdo-bg);
661
+ color: var(--status-wontdo);
662
+ }
663
+
664
+ .badge.priority {
665
+ font-weight: 500;
666
+ }
667
+ .badge.priority.high {
668
+ background: var(--prio-high-bg);
669
+ color: var(--prio-high);
670
+ }
671
+ .badge.priority.med {
672
+ background: var(--prio-med-bg);
673
+ color: var(--prio-med);
674
+ }
675
+ .badge.priority.low {
676
+ background: var(--prio-low-bg);
677
+ color: var(--prio-low);
678
+ }
679
+
680
+ .badge .mini-dot {
681
+ width: 6px;
682
+ height: 6px;
683
+ border-radius: 50%;
684
+ background: currentColor;
685
+ }
686
+
687
+ .id-chip {
688
+ display: inline-flex;
689
+ align-items: center;
690
+ gap: 4px;
691
+ font-family: var(--font-mono);
692
+ font-size: 10px;
693
+ color: var(--text-subtle);
694
+ padding: 2px 6px;
695
+ border: 1px solid var(--border);
696
+ border-radius: 3px;
697
+ background: var(--gray-50);
698
+ margin-left: 2px;
699
+ }
700
+ .id-chip:hover {
701
+ background: var(--gray-100);
702
+ color: var(--text);
703
+ }
704
+
705
+ /* ----- Field blocks ----- */
706
+ .field-group {
707
+ margin-bottom: var(--sp-6);
708
+ }
709
+ .field-label {
710
+ font-size: 10px;
711
+ font-weight: 600;
712
+ letter-spacing: 0.06em;
713
+ text-transform: uppercase;
714
+ color: var(--text-subtle);
715
+ margin-bottom: var(--sp-2);
716
+ }
717
+ .field-value {
718
+ color: var(--text);
719
+ font-size: var(--text-md);
720
+ }
721
+ .field-value.muted {
722
+ color: var(--text-subtle);
723
+ font-style: italic;
724
+ font-size: var(--text-sm);
725
+ }
726
+
727
+ /* Description body (markdown-ish) */
728
+ .prose {
729
+ background: var(--bg-sunken);
730
+ border: 1px solid var(--border);
731
+ border-radius: var(--radius);
732
+ padding: var(--sp-4) var(--sp-5);
733
+ font-size: var(--text-md);
734
+ line-height: 1.6;
735
+ color: var(--gray-800);
736
+ white-space: pre-wrap;
737
+ }
738
+ .prose code {
739
+ font-family: var(--font-mono);
740
+ font-size: 0.9em;
741
+ background: var(--gray-200);
742
+ padding: 1px 5px;
743
+ border-radius: 3px;
744
+ }
745
+ .prose h3 {
746
+ margin: 0 0 6px;
747
+ font-size: var(--text-md);
748
+ font-weight: 600;
749
+ }
750
+ .prose ul {
751
+ margin: 0;
752
+ padding-left: 18px;
753
+ }
754
+ .prose p {
755
+ margin: 0 0 10px;
756
+ }
757
+ .prose p:last-child {
758
+ margin-bottom: 0;
759
+ }
760
+
761
+ /* Prereq + log lists */
762
+ .prereq-list,
763
+ .log-list {
764
+ list-style: none;
765
+ margin: 0;
766
+ padding: 0;
767
+ border: 1px solid var(--border);
768
+ border-radius: var(--radius);
769
+ overflow: hidden;
770
+ }
771
+ .prereq-list li,
772
+ .log-list li {
773
+ display: flex;
774
+ align-items: center;
775
+ gap: var(--sp-3);
776
+ padding: 8px var(--sp-4);
777
+ border-bottom: 1px solid var(--border);
778
+ font-size: var(--text-sm);
779
+ }
780
+ .prereq-list li:last-child,
781
+ .log-list li:last-child {
782
+ border-bottom: none;
783
+ }
784
+ .prereq-list .id {
785
+ font-family: var(--font-mono);
786
+ font-size: 11px;
787
+ color: var(--text-subtle);
788
+ background: var(--gray-100);
789
+ padding: 1px 5px;
790
+ border-radius: 3px;
791
+ }
792
+ .prereq-list .name {
793
+ color: var(--text);
794
+ flex: 1;
795
+ }
796
+
797
+ .log-list li {
798
+ align-items: flex-start;
799
+ padding: 10px var(--sp-4);
800
+ gap: var(--sp-4);
801
+ }
802
+ .log-list .ts {
803
+ font-family: var(--font-mono);
804
+ font-size: 11px;
805
+ color: var(--text-subtle);
806
+ white-space: nowrap;
807
+ padding-top: 1px;
808
+ min-width: 92px;
809
+ }
810
+ .log-list .entry {
811
+ color: var(--text);
812
+ flex: 1;
813
+ }
814
+
815
+ .empty {
816
+ color: var(--text-subtle);
817
+ font-size: var(--text-sm);
818
+ font-style: italic;
819
+ }
820
+
821
+ /* ============================================
822
+ Edit form
823
+ ============================================ */
824
+ .form-card {
825
+ background: var(--bg-panel);
826
+ border: 1px solid var(--border);
827
+ border-radius: var(--radius-lg);
828
+ padding: var(--sp-5) var(--sp-6);
829
+ margin-bottom: var(--sp-4);
830
+ }
831
+ .form-header {
832
+ display: flex;
833
+ align-items: baseline;
834
+ gap: var(--sp-3);
835
+ margin-bottom: var(--sp-5);
836
+ padding-bottom: var(--sp-4);
837
+ border-bottom: 1px solid var(--border);
838
+ }
839
+ .form-header h2 {
840
+ font-size: var(--text-lg);
841
+ margin: 0;
842
+ font-weight: 600;
843
+ letter-spacing: -0.01em;
844
+ }
845
+ .form-header .dim {
846
+ font-family: var(--font-mono);
847
+ font-size: 11px;
848
+ color: var(--text-subtle);
849
+ }
850
+
851
+ .form-grid {
852
+ display: grid;
853
+ gap: var(--sp-5);
854
+ }
855
+ .form-row {
856
+ display: grid;
857
+ grid-template-columns: 1fr 1fr;
858
+ gap: var(--sp-4);
859
+ }
860
+
861
+ .fld label {
862
+ display: block;
863
+ font-size: 10px;
864
+ font-weight: 600;
865
+ letter-spacing: 0.06em;
866
+ text-transform: uppercase;
867
+ color: var(--text-subtle);
868
+ margin-bottom: 5px;
869
+ }
870
+ .fld input[type="text"],
871
+ .fld textarea,
872
+ .fld select {
873
+ width: 100%;
874
+ padding: 7px 10px;
875
+ border: 1px solid var(--border-strong);
876
+ border-radius: var(--radius);
877
+ background: var(--bg-panel);
878
+ font-size: var(--text-md);
879
+ color: var(--text);
880
+ outline: none;
881
+ transition:
882
+ border-color 0.12s,
883
+ box-shadow 0.12s;
884
+ font-family: var(--font-sans);
885
+ }
886
+ .fld textarea {
887
+ min-height: 160px;
888
+ resize: vertical;
889
+ font-family: var(--font-mono);
890
+ font-size: var(--text-sm);
891
+ line-height: 1.55;
892
+ }
893
+ .fld input:focus,
894
+ .fld textarea:focus,
895
+ .fld select:focus {
896
+ border-color: var(--accent);
897
+ box-shadow: 0 0 0 3px var(--accent-tint);
898
+ }
899
+ .fld .hint {
900
+ font-size: 11px;
901
+ color: var(--text-subtle);
902
+ margin-top: 4px;
903
+ }
904
+
905
+ /* Segmented control (status / priority) */
906
+ .seg {
907
+ display: inline-flex;
908
+ background: var(--gray-100);
909
+ border: 1px solid var(--border);
910
+ border-radius: var(--radius);
911
+ padding: 2px;
912
+ gap: 2px;
913
+ }
914
+ .seg input {
915
+ position: absolute;
916
+ opacity: 0;
917
+ pointer-events: none;
918
+ }
919
+ .seg label {
920
+ all: unset;
921
+ padding: 4px 10px;
922
+ border-radius: 4px;
923
+ font-size: var(--text-sm);
924
+ color: var(--text-muted);
925
+ cursor: pointer;
926
+ transition:
927
+ background 0.1s,
928
+ color 0.1s;
929
+ display: inline-flex;
930
+ align-items: center;
931
+ gap: 5px;
932
+ text-transform: none;
933
+ letter-spacing: 0;
934
+ font-weight: 500;
935
+ }
936
+ .seg label:hover {
937
+ color: var(--text);
938
+ }
939
+ .seg input:checked + label {
940
+ background: var(--bg-panel);
941
+ color: var(--text);
942
+ box-shadow: var(--shadow-sm);
943
+ }
944
+
945
+ /* Prereq chips (in edit form) */
946
+ .chips {
947
+ display: flex;
948
+ flex-wrap: wrap;
949
+ gap: 6px;
950
+ padding: 6px;
951
+ border: 1px solid var(--border-strong);
952
+ border-radius: var(--radius);
953
+ min-height: 36px;
954
+ align-items: center;
955
+ background: var(--bg-panel);
956
+ }
957
+ .chip {
958
+ display: inline-flex;
959
+ align-items: center;
960
+ gap: 5px;
961
+ background: var(--gray-100);
962
+ border: 1px solid var(--border);
963
+ border-radius: 4px;
964
+ padding: 2px 4px 2px 8px;
965
+ font-size: var(--text-xs);
966
+ font-family: var(--font-mono);
967
+ color: var(--text);
968
+ }
969
+ .chip button {
970
+ all: unset;
971
+ color: var(--text-subtle);
972
+ cursor: pointer;
973
+ padding: 0 3px;
974
+ border-radius: 2px;
975
+ line-height: 1;
976
+ }
977
+ .chip button:hover {
978
+ background: var(--gray-200);
979
+ color: var(--text);
980
+ }
981
+ .chips input {
982
+ all: unset;
983
+ flex: 1;
984
+ min-width: 120px;
985
+ padding: 4px 6px;
986
+ font-size: var(--text-sm);
987
+ color: var(--text);
988
+ }
989
+ .chips input::placeholder {
990
+ color: var(--text-subtle);
991
+ }
992
+
993
+ .form-footer {
994
+ display: flex;
995
+ justify-content: space-between;
996
+ align-items: center;
997
+ margin-top: var(--sp-6);
998
+ padding-top: var(--sp-4);
999
+ border-top: 1px solid var(--border);
1000
+ }
1001
+ .form-footer .left {
1002
+ color: var(--text-subtle);
1003
+ font-size: var(--text-xs);
1004
+ display: flex;
1005
+ gap: var(--sp-2);
1006
+ align-items: center;
1007
+ }
1008
+ .form-footer .left kbd {
1009
+ font-family: var(--font-mono);
1010
+ font-size: 10px;
1011
+ background: var(--gray-100);
1012
+ border: 1px solid var(--border);
1013
+ padding: 1px 5px;
1014
+ border-radius: 3px;
1015
+ }
1016
+ .form-footer .right {
1017
+ display: flex;
1018
+ gap: var(--sp-2);
1019
+ }
1020
+
1021
+ /* ============================================
1022
+ Modal (delete confirm)
1023
+ ============================================ */
1024
+ .modal-backdrop[hidden] {
1025
+ display: none;
1026
+ }
1027
+ .modal-backdrop {
1028
+ position: fixed;
1029
+ inset: 0;
1030
+ background: rgba(19, 21, 27, 0.35);
1031
+ display: grid;
1032
+ place-items: center;
1033
+ z-index: 10;
1034
+ padding: var(--sp-4);
1035
+ backdrop-filter: blur(2px);
1036
+ animation: fadein 0.14s ease-out;
1037
+ }
1038
+ .modal {
1039
+ background: var(--bg-panel);
1040
+ border-radius: var(--radius-lg);
1041
+ box-shadow: var(--shadow-lg);
1042
+ width: 100%;
1043
+ max-width: 440px;
1044
+ padding: var(--sp-6);
1045
+ animation: pop 0.14s ease-out;
1046
+ }
1047
+ @keyframes fadein {
1048
+ from {
1049
+ opacity: 0;
1050
+ }
1051
+ to {
1052
+ opacity: 1;
1053
+ }
1054
+ }
1055
+ @keyframes pop {
1056
+ from {
1057
+ opacity: 0;
1058
+ transform: translateY(4px) scale(0.98);
1059
+ }
1060
+ to {
1061
+ opacity: 1;
1062
+ transform: none;
1063
+ }
1064
+ }
1065
+
1066
+ .modal .icon-circle {
1067
+ width: 36px;
1068
+ height: 36px;
1069
+ border-radius: 50%;
1070
+ background: var(--danger-tint);
1071
+ color: var(--danger);
1072
+ display: grid;
1073
+ place-items: center;
1074
+ margin-bottom: var(--sp-4);
1075
+ }
1076
+ .modal .icon-circle svg {
1077
+ width: 18px;
1078
+ height: 18px;
1079
+ }
1080
+ .modal h3 {
1081
+ margin: 0 0 6px;
1082
+ font-size: var(--text-lg);
1083
+ font-weight: 600;
1084
+ letter-spacing: -0.01em;
1085
+ }
1086
+ .modal p {
1087
+ margin: 0 0 var(--sp-4);
1088
+ color: var(--text-muted);
1089
+ font-size: var(--text-md);
1090
+ line-height: 1.55;
1091
+ }
1092
+ .modal .target {
1093
+ padding: var(--sp-3) var(--sp-4);
1094
+ background: var(--bg-sunken);
1095
+ border: 1px solid var(--border);
1096
+ border-radius: var(--radius);
1097
+ margin-bottom: var(--sp-5);
1098
+ display: flex;
1099
+ flex-direction: column;
1100
+ gap: 3px;
1101
+ }
1102
+ .modal .target .t-title {
1103
+ font-weight: 500;
1104
+ font-size: var(--text-md);
1105
+ }
1106
+ .modal .target .t-meta {
1107
+ font-family: var(--font-mono);
1108
+ font-size: 11px;
1109
+ color: var(--text-subtle);
1110
+ display: flex;
1111
+ gap: var(--sp-2);
1112
+ }
1113
+ .modal .warn {
1114
+ padding: var(--sp-3) var(--sp-4);
1115
+ background: #fffaf1;
1116
+ border: 1px solid #f1dfa7;
1117
+ border-radius: var(--radius);
1118
+ color: #754b0a;
1119
+ font-size: var(--text-sm);
1120
+ margin-bottom: var(--sp-5);
1121
+ display: flex;
1122
+ gap: var(--sp-2);
1123
+ align-items: flex-start;
1124
+ }
1125
+ .modal .warn svg {
1126
+ width: 14px;
1127
+ height: 14px;
1128
+ flex-shrink: 0;
1129
+ margin-top: 2px;
1130
+ }
1131
+ .modal .footer {
1132
+ display: flex;
1133
+ justify-content: flex-end;
1134
+ gap: var(--sp-2);
1135
+ }
1136
+
1137
+ /* ============================================
1138
+ Landing page (project index)
1139
+ ============================================ */
1140
+ .landing {
1141
+ min-height: 100vh;
1142
+ display: flex;
1143
+ flex-direction: column;
1144
+ }
1145
+ .landing-header {
1146
+ display: flex;
1147
+ align-items: center;
1148
+ justify-content: space-between;
1149
+ padding: var(--sp-4) var(--sp-6);
1150
+ border-bottom: 1px solid var(--border);
1151
+ background: var(--bg-panel);
1152
+ }
1153
+ .landing-body {
1154
+ width: 100%;
1155
+ max-width: 820px;
1156
+ margin: 0 auto;
1157
+ padding: var(--sp-8) var(--sp-6);
1158
+ flex: 1;
1159
+ }
1160
+ .landing-title {
1161
+ font-size: var(--text-2xl);
1162
+ font-weight: 600;
1163
+ letter-spacing: -0.015em;
1164
+ line-height: 1.25;
1165
+ margin: 0 0 var(--sp-6);
1166
+ color: var(--text);
1167
+ }
1168
+ .project-list {
1169
+ display: grid;
1170
+ gap: var(--sp-3);
1171
+ }
1172
+ .project-card {
1173
+ display: flex;
1174
+ align-items: center;
1175
+ justify-content: space-between;
1176
+ gap: var(--sp-4);
1177
+ padding: var(--sp-4) var(--sp-5);
1178
+ background: var(--bg-panel);
1179
+ border: 1px solid var(--border);
1180
+ border-radius: var(--radius-lg);
1181
+ text-decoration: none;
1182
+ color: inherit;
1183
+ box-shadow: var(--shadow-sm);
1184
+ transition:
1185
+ background 0.12s,
1186
+ border-color 0.12s,
1187
+ box-shadow 0.12s;
1188
+ }
1189
+ .project-card:hover {
1190
+ background: var(--accent-tint);
1191
+ border-color: var(--accent-border);
1192
+ box-shadow: var(--shadow-md);
1193
+ }
1194
+ .project-card-head {
1195
+ display: flex;
1196
+ flex-direction: column;
1197
+ gap: 2px;
1198
+ min-width: 0;
1199
+ flex: 1;
1200
+ }
1201
+ .project-card-label {
1202
+ font-size: var(--text-lg);
1203
+ font-weight: 600;
1204
+ letter-spacing: -0.01em;
1205
+ color: var(--text);
1206
+ white-space: nowrap;
1207
+ overflow: hidden;
1208
+ text-overflow: ellipsis;
1209
+ }
1210
+ .project-card-key {
1211
+ font-family: var(--font-mono);
1212
+ font-size: var(--text-xs);
1213
+ color: var(--text-subtle);
1214
+ white-space: nowrap;
1215
+ overflow: hidden;
1216
+ text-overflow: ellipsis;
1217
+ }
1218
+ .project-card-stats {
1219
+ display: flex;
1220
+ gap: 6px;
1221
+ flex-shrink: 0;
1222
+ flex-wrap: wrap;
1223
+ justify-content: flex-end;
1224
+ }
1225
+ .landing-empty {
1226
+ padding: var(--sp-8) var(--sp-6);
1227
+ text-align: center;
1228
+ background: var(--bg-panel);
1229
+ border: 1px solid var(--border);
1230
+ border-radius: var(--radius-lg);
1231
+ color: var(--text-muted);
1232
+ }
1233
+ .landing-empty code {
1234
+ font-family: var(--font-mono);
1235
+ font-size: var(--text-sm);
1236
+ background: var(--bg-sunken);
1237
+ border: 1px solid var(--border);
1238
+ padding: 2px 6px;
1239
+ border-radius: 3px;
1240
+ color: var(--text);
1241
+ }
1242
+
1243
+ /* ============================================
1244
+ Tweaks panel
1245
+ ============================================ */
1246
+ .tweaks {
1247
+ position: fixed;
1248
+ right: 16px;
1249
+ bottom: 16px;
1250
+ width: 220px;
1251
+ background: var(--bg-panel);
1252
+ border: 1px solid var(--border-strong);
1253
+ border-radius: var(--radius-lg);
1254
+ box-shadow: var(--shadow-md);
1255
+ padding: var(--sp-3) var(--sp-4);
1256
+ font-size: var(--text-sm);
1257
+ z-index: 20;
1258
+ display: none;
1259
+ }
1260
+ .tweaks.visible {
1261
+ display: block;
1262
+ }
1263
+ .tweaks h4 {
1264
+ margin: 0 0 var(--sp-2);
1265
+ font-size: 11px;
1266
+ font-weight: 600;
1267
+ letter-spacing: 0.06em;
1268
+ text-transform: uppercase;
1269
+ color: var(--text-subtle);
1270
+ }
1271
+ .tweaks .group {
1272
+ display: grid;
1273
+ gap: 3px;
1274
+ margin-bottom: var(--sp-3);
1275
+ }
1276
+ .tweaks button {
1277
+ all: unset;
1278
+ padding: 5px 8px;
1279
+ border-radius: 4px;
1280
+ font-size: var(--text-sm);
1281
+ color: var(--text);
1282
+ cursor: pointer;
1283
+ display: flex;
1284
+ align-items: center;
1285
+ gap: var(--sp-2);
1286
+ }
1287
+ .tweaks button:hover {
1288
+ background: var(--gray-100);
1289
+ }
1290
+ .tweaks button.active {
1291
+ background: var(--accent-tint);
1292
+ color: var(--accent);
1293
+ font-weight: 500;
1294
+ }
1295
+ .tweaks button .k {
1296
+ font-family: var(--font-mono);
1297
+ font-size: 10px;
1298
+ color: var(--text-subtle);
1299
+ margin-left: auto;
1300
+ }