@proletariat/cli 0.3.93 → 0.3.95

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 (546) hide show
  1. package/dist/commands/action/create.d.ts +1 -1
  2. package/dist/commands/action/delete.d.ts +1 -1
  3. package/dist/commands/action/index.d.ts +1 -1
  4. package/dist/commands/action/list.d.ts +1 -1
  5. package/dist/commands/action/run.d.ts +1 -1
  6. package/dist/commands/action/show.d.ts +1 -1
  7. package/dist/commands/action/update.d.ts +1 -1
  8. package/dist/commands/agent/cleanup.d.ts +3 -4
  9. package/dist/commands/agent/cleanup.js +5 -4
  10. package/dist/commands/agent/cleanup.js.map +1 -1
  11. package/dist/commands/agent/gc.d.ts +3 -4
  12. package/dist/commands/agent/gc.js +5 -4
  13. package/dist/commands/agent/gc.js.map +1 -1
  14. package/dist/commands/agent/index.d.ts +3 -4
  15. package/dist/commands/agent/index.js +5 -4
  16. package/dist/commands/agent/index.js.map +1 -1
  17. package/dist/commands/agent/list.d.ts +3 -4
  18. package/dist/commands/agent/list.js +5 -4
  19. package/dist/commands/agent/list.js.map +1 -1
  20. package/dist/commands/agent/login.d.ts +1 -1
  21. package/dist/commands/agent/rebuild.d.ts +1 -1
  22. package/dist/commands/agent/remove.d.ts +3 -4
  23. package/dist/commands/agent/remove.js +5 -4
  24. package/dist/commands/agent/remove.js.map +1 -1
  25. package/dist/commands/agent/restart.d.ts +1 -1
  26. package/dist/commands/agent/shell.d.ts +1 -1
  27. package/dist/commands/agent/staff/index.d.ts +3 -4
  28. package/dist/commands/agent/staff/index.js +5 -4
  29. package/dist/commands/agent/staff/index.js.map +1 -1
  30. package/dist/commands/agent/staff/remove.d.ts +3 -4
  31. package/dist/commands/agent/staff/remove.js +5 -4
  32. package/dist/commands/agent/staff/remove.js.map +1 -1
  33. package/dist/commands/agent/status.d.ts +3 -4
  34. package/dist/commands/agent/status.js +5 -4
  35. package/dist/commands/agent/status.js.map +1 -1
  36. package/dist/commands/agent/visit.d.ts +3 -4
  37. package/dist/commands/agent/visit.js +5 -4
  38. package/dist/commands/agent/visit.js.map +1 -1
  39. package/dist/commands/asana/import.d.ts +1 -1
  40. package/dist/commands/branch/create.d.ts +1 -1
  41. package/dist/commands/branch/create.js +1 -12
  42. package/dist/commands/branch/create.js.map +1 -1
  43. package/dist/commands/branch/index.d.ts +1 -1
  44. package/dist/commands/branch/list.d.ts +3 -4
  45. package/dist/commands/branch/list.js +5 -4
  46. package/dist/commands/branch/list.js.map +1 -1
  47. package/dist/commands/branch/validate.d.ts +3 -4
  48. package/dist/commands/branch/validate.js +6 -5
  49. package/dist/commands/branch/validate.js.map +1 -1
  50. package/dist/commands/branch/where.d.ts +3 -4
  51. package/dist/commands/branch/where.js +5 -4
  52. package/dist/commands/branch/where.js.map +1 -1
  53. package/dist/commands/commit.js +1 -1
  54. package/dist/commands/commit.js.map +1 -1
  55. package/dist/commands/config/index.js +2 -2
  56. package/dist/commands/config/index.js.map +1 -1
  57. package/dist/commands/db/backup.d.ts +16 -0
  58. package/dist/commands/db/backup.js +125 -0
  59. package/dist/commands/db/backup.js.map +1 -0
  60. package/dist/commands/db/repair.js +8 -11
  61. package/dist/commands/db/repair.js.map +1 -1
  62. package/dist/commands/diet.d.ts +1 -1
  63. package/dist/commands/docker/index.js +2 -0
  64. package/dist/commands/docker/index.js.map +1 -1
  65. package/dist/commands/docker/rebuild-cache.d.ts +12 -0
  66. package/dist/commands/docker/rebuild-cache.js +144 -0
  67. package/dist/commands/docker/rebuild-cache.js.map +1 -0
  68. package/dist/commands/execution/config.d.ts +3 -4
  69. package/dist/commands/execution/config.js +5 -4
  70. package/dist/commands/execution/config.js.map +1 -1
  71. package/dist/commands/execution/index.d.ts +3 -4
  72. package/dist/commands/execution/index.js +5 -4
  73. package/dist/commands/execution/index.js.map +1 -1
  74. package/dist/commands/execution/list.d.ts +3 -4
  75. package/dist/commands/execution/list.js +5 -4
  76. package/dist/commands/execution/list.js.map +1 -1
  77. package/dist/commands/execution/logs.d.ts +3 -4
  78. package/dist/commands/execution/logs.js +5 -4
  79. package/dist/commands/execution/logs.js.map +1 -1
  80. package/dist/commands/execution/stop.d.ts +3 -4
  81. package/dist/commands/execution/stop.js +5 -4
  82. package/dist/commands/execution/stop.js.map +1 -1
  83. package/dist/commands/execution/view.d.ts +3 -4
  84. package/dist/commands/execution/view.js +5 -4
  85. package/dist/commands/execution/view.js.map +1 -1
  86. package/dist/commands/hook/export.d.ts +3 -4
  87. package/dist/commands/hook/export.js +5 -4
  88. package/dist/commands/hook/export.js.map +1 -1
  89. package/dist/commands/hook/fire.d.ts +3 -4
  90. package/dist/commands/hook/fire.js +5 -4
  91. package/dist/commands/hook/fire.js.map +1 -1
  92. package/dist/commands/hook/index.d.ts +1 -1
  93. package/dist/commands/hook/list.d.ts +3 -4
  94. package/dist/commands/hook/list.js +5 -4
  95. package/dist/commands/hook/list.js.map +1 -1
  96. package/dist/commands/hook/preset.d.ts +3 -4
  97. package/dist/commands/hook/preset.js +5 -4
  98. package/dist/commands/hook/preset.js.map +1 -1
  99. package/dist/commands/linear/auth.d.ts +1 -1
  100. package/dist/commands/linear/connect.d.ts +1 -1
  101. package/dist/commands/linear/import.d.ts +1 -1
  102. package/dist/commands/linear/status.d.ts +1 -1
  103. package/dist/commands/linear/sync.d.ts +1 -1
  104. package/dist/commands/mcp-server.d.ts +8 -2
  105. package/dist/commands/mcp-server.js +15 -28
  106. package/dist/commands/mcp-server.js.map +1 -1
  107. package/dist/commands/monday/connect.d.ts +1 -1
  108. package/dist/commands/monday/sync.d.ts +1 -1
  109. package/dist/commands/orchestrate/index.d.ts +3 -4
  110. package/dist/commands/orchestrate/index.js +5 -4
  111. package/dist/commands/orchestrate/index.js.map +1 -1
  112. package/dist/commands/orchestrator/index.d.ts +3 -4
  113. package/dist/commands/orchestrator/index.js +5 -4
  114. package/dist/commands/orchestrator/index.js.map +1 -1
  115. package/dist/commands/orchestrator/start.d.ts +3 -3
  116. package/dist/commands/orchestrator/start.js +38 -40
  117. package/dist/commands/orchestrator/start.js.map +1 -1
  118. package/dist/commands/pr/checks.d.ts +3 -4
  119. package/dist/commands/pr/checks.js +5 -4
  120. package/dist/commands/pr/checks.js.map +1 -1
  121. package/dist/commands/pr/close.d.ts +1 -1
  122. package/dist/commands/pr/create.d.ts +1 -1
  123. package/dist/commands/pr/index.d.ts +1 -1
  124. package/dist/commands/pr/link.d.ts +1 -1
  125. package/dist/commands/pr/list.d.ts +1 -1
  126. package/dist/commands/pr/merge.d.ts +1 -1
  127. package/dist/commands/pr/status.d.ts +1 -1
  128. package/dist/commands/pull.d.ts +1 -1
  129. package/dist/commands/repo/add.d.ts +3 -4
  130. package/dist/commands/repo/add.js +5 -4
  131. package/dist/commands/repo/add.js.map +1 -1
  132. package/dist/commands/repo/create.d.ts +3 -4
  133. package/dist/commands/repo/create.js +5 -4
  134. package/dist/commands/repo/create.js.map +1 -1
  135. package/dist/commands/repo/fix-remotes.d.ts +3 -4
  136. package/dist/commands/repo/fix-remotes.js +5 -4
  137. package/dist/commands/repo/fix-remotes.js.map +1 -1
  138. package/dist/commands/repo/index.d.ts +3 -4
  139. package/dist/commands/repo/index.js +5 -4
  140. package/dist/commands/repo/index.js.map +1 -1
  141. package/dist/commands/repo/list.d.ts +3 -4
  142. package/dist/commands/repo/list.js +5 -4
  143. package/dist/commands/repo/list.js.map +1 -1
  144. package/dist/commands/repo/remove.d.ts +1 -1
  145. package/dist/commands/repo/view.d.ts +1 -1
  146. package/dist/commands/session/attach.d.ts +1 -1
  147. package/dist/commands/session/cleanup.d.ts +3 -4
  148. package/dist/commands/session/cleanup.js +5 -4
  149. package/dist/commands/session/cleanup.js.map +1 -1
  150. package/dist/commands/session/create.d.ts +3 -4
  151. package/dist/commands/session/create.js +5 -4
  152. package/dist/commands/session/create.js.map +1 -1
  153. package/dist/commands/session/exec.d.ts +3 -4
  154. package/dist/commands/session/exec.js +5 -4
  155. package/dist/commands/session/exec.js.map +1 -1
  156. package/dist/commands/session/health.d.ts +1 -1
  157. package/dist/commands/session/health.js +18 -0
  158. package/dist/commands/session/health.js.map +1 -1
  159. package/dist/commands/session/index.d.ts +3 -4
  160. package/dist/commands/session/index.js +9 -4
  161. package/dist/commands/session/index.js.map +1 -1
  162. package/dist/commands/session/inspect.d.ts +3 -4
  163. package/dist/commands/session/inspect.js +5 -4
  164. package/dist/commands/session/inspect.js.map +1 -1
  165. package/dist/commands/session/list.d.ts +3 -4
  166. package/dist/commands/session/list.js +19 -5
  167. package/dist/commands/session/list.js.map +1 -1
  168. package/dist/commands/session/peek.d.ts +1 -1
  169. package/dist/commands/session/prune.d.ts +3 -4
  170. package/dist/commands/session/prune.js +5 -4
  171. package/dist/commands/session/prune.js.map +1 -1
  172. package/dist/commands/session/report.d.ts +25 -5
  173. package/dist/commands/session/report.js +201 -5
  174. package/dist/commands/session/report.js.map +1 -1
  175. package/dist/commands/session/restart.d.ts +3 -4
  176. package/dist/commands/session/restart.js +5 -4
  177. package/dist/commands/session/restart.js.map +1 -1
  178. package/dist/commands/session/watch.d.ts +17 -0
  179. package/dist/commands/session/watch.js +139 -0
  180. package/dist/commands/session/watch.js.map +1 -0
  181. package/dist/commands/shortcut/connect.d.ts +1 -1
  182. package/dist/commands/support/logs.d.ts +1 -1
  183. package/dist/commands/ticket/create.d.ts +1 -1
  184. package/dist/commands/ticket/delete.d.ts +1 -1
  185. package/dist/commands/ticket/edit.d.ts +1 -1
  186. package/dist/commands/ticket/index.d.ts +3 -4
  187. package/dist/commands/ticket/index.js +11 -40
  188. package/dist/commands/ticket/index.js.map +1 -1
  189. package/dist/commands/ticket/list.d.ts +1 -1
  190. package/dist/commands/ticket/move.d.ts +1 -1
  191. package/dist/commands/ticket/show.d.ts +8 -7
  192. package/dist/commands/ticket/show.js +101 -8
  193. package/dist/commands/ticket/show.js.map +1 -1
  194. package/dist/commands/ticket/update.d.ts +1 -1
  195. package/dist/commands/trello/configure.d.ts +1 -1
  196. package/dist/commands/trello/import.d.ts +1 -1
  197. package/dist/commands/trello/sync.d.ts +1 -1
  198. package/dist/commands/{dashboard/index.d.ts → web.d.ts} +10 -4
  199. package/dist/commands/web.js +82 -0
  200. package/dist/commands/web.js.map +1 -0
  201. package/dist/commands/work/asana.d.ts +1 -1
  202. package/dist/commands/work/complete.d.ts +1 -1
  203. package/dist/commands/work/groom.d.ts +1 -1
  204. package/dist/commands/work/hooks/add.d.ts +3 -4
  205. package/dist/commands/work/hooks/add.js +5 -4
  206. package/dist/commands/work/hooks/add.js.map +1 -1
  207. package/dist/commands/work/hooks/index.d.ts +1 -1
  208. package/dist/commands/work/hooks/list.d.ts +3 -4
  209. package/dist/commands/work/hooks/list.js +5 -4
  210. package/dist/commands/work/hooks/list.js.map +1 -1
  211. package/dist/commands/work/hooks/remove.d.ts +1 -1
  212. package/dist/commands/work/hooks/toggle.d.ts +3 -4
  213. package/dist/commands/work/hooks/toggle.js +5 -4
  214. package/dist/commands/work/hooks/toggle.js.map +1 -1
  215. package/dist/commands/work/implement.d.ts +1 -1
  216. package/dist/commands/work/index.d.ts +1 -1
  217. package/dist/commands/work/jira.d.ts +1 -1
  218. package/dist/commands/work/linear.d.ts +1 -1
  219. package/dist/commands/work/peek.d.ts +3 -4
  220. package/dist/commands/work/peek.js +5 -4
  221. package/dist/commands/work/peek.js.map +1 -1
  222. package/dist/commands/{ticket/cancel.d.ts → work/propose.d.ts} +11 -5
  223. package/dist/commands/work/propose.js +57 -0
  224. package/dist/commands/work/propose.js.map +1 -0
  225. package/dist/commands/work/ready.d.ts +1 -1
  226. package/dist/commands/work/ready.js +2 -2
  227. package/dist/commands/work/ready.js.map +1 -1
  228. package/dist/commands/work/rebase.d.ts +2 -2
  229. package/dist/commands/work/rebase.js +52 -49
  230. package/dist/commands/work/rebase.js.map +1 -1
  231. package/dist/commands/work/resolve.d.ts +1 -1
  232. package/dist/commands/work/review.d.ts +1 -1
  233. package/dist/commands/work/ship.d.ts +7 -1
  234. package/dist/commands/work/ship.js +217 -48
  235. package/dist/commands/work/ship.js.map +1 -1
  236. package/dist/commands/work/shortcut.d.ts +1 -1
  237. package/dist/commands/work/source/set.d.ts +1 -1
  238. package/dist/commands/work/source.d.ts +1 -1
  239. package/dist/commands/work/spawn.d.ts +1 -1
  240. package/dist/commands/work/start.d.ts +1 -1
  241. package/dist/commands/work/start.js +3 -6
  242. package/dist/commands/work/start.js.map +1 -1
  243. package/dist/commands/work/status.d.ts +1 -1
  244. package/dist/commands/work/stop.d.ts +3 -4
  245. package/dist/commands/work/stop.js +5 -4
  246. package/dist/commands/work/stop.js.map +1 -1
  247. package/dist/commands/work/watch.d.ts +1 -1
  248. package/dist/hooks/init.js +12 -2
  249. package/dist/hooks/init.js.map +1 -1
  250. package/dist/lib/asana/config.js +13 -7
  251. package/dist/lib/asana/config.js.map +1 -1
  252. package/dist/lib/branch/index.d.ts +6 -5
  253. package/dist/lib/branch/index.js +8 -13
  254. package/dist/lib/branch/index.js.map +1 -1
  255. package/dist/lib/clickup/client.d.ts +92 -0
  256. package/dist/lib/clickup/client.js +150 -0
  257. package/dist/lib/clickup/client.js.map +1 -0
  258. package/dist/lib/clickup/config.d.ts +41 -0
  259. package/dist/lib/clickup/config.js +104 -0
  260. package/dist/lib/clickup/config.js.map +1 -0
  261. package/dist/lib/clickup/index.d.ts +4 -0
  262. package/dist/lib/clickup/index.js +4 -0
  263. package/dist/lib/clickup/index.js.map +1 -0
  264. package/dist/lib/clickup/types.d.ts +104 -0
  265. package/dist/lib/clickup/types.js +34 -0
  266. package/dist/lib/clickup/types.js.map +1 -0
  267. package/dist/lib/dashboard/html.d.ts +2 -1
  268. package/dist/lib/dashboard/html.js +150 -522
  269. package/dist/lib/dashboard/html.js.map +1 -1
  270. package/dist/lib/database/credential-store.d.ts +64 -0
  271. package/dist/lib/database/credential-store.js +306 -0
  272. package/dist/lib/database/credential-store.js.map +1 -0
  273. package/dist/lib/database/db-safety.d.ts +48 -9
  274. package/dist/lib/database/db-safety.js +308 -43
  275. package/dist/lib/database/db-safety.js.map +1 -1
  276. package/dist/lib/database/index.d.ts +2 -1
  277. package/dist/lib/database/index.js +3 -1
  278. package/dist/lib/database/index.js.map +1 -1
  279. package/dist/lib/database/pmo-bootstrap.d.ts +7 -0
  280. package/dist/lib/database/pmo-bootstrap.js +45 -20
  281. package/dist/lib/database/pmo-bootstrap.js.map +1 -1
  282. package/dist/lib/database/workspace.js +7 -1
  283. package/dist/lib/database/workspace.js.map +1 -1
  284. package/dist/lib/execution/devcontainer.js +51 -0
  285. package/dist/lib/execution/devcontainer.js.map +1 -1
  286. package/dist/lib/execution/runners/docker-management.d.ts +23 -0
  287. package/dist/lib/execution/runners/docker-management.js +99 -7
  288. package/dist/lib/execution/runners/docker-management.js.map +1 -1
  289. package/dist/lib/execution/runners/docker.js +8 -0
  290. package/dist/lib/execution/runners/docker.js.map +1 -1
  291. package/dist/lib/execution/runners/prompt-builder.js +9 -6
  292. package/dist/lib/execution/runners/prompt-builder.js.map +1 -1
  293. package/dist/lib/execution/session-utils.d.ts +4 -0
  294. package/dist/lib/execution/session-utils.js +34 -24
  295. package/dist/lib/execution/session-utils.js.map +1 -1
  296. package/dist/lib/execution/spawner.js +2 -4
  297. package/dist/lib/execution/spawner.js.map +1 -1
  298. package/dist/lib/execution/storage.d.ts +29 -1
  299. package/dist/lib/execution/storage.js +77 -0
  300. package/dist/lib/execution/storage.js.map +1 -1
  301. package/dist/lib/execution/types.d.ts +17 -6
  302. package/dist/lib/execution/types.js +11 -8
  303. package/dist/lib/execution/types.js.map +1 -1
  304. package/dist/lib/external-issues/types.d.ts +3 -3
  305. package/dist/lib/external-issues/types.js +1 -1
  306. package/dist/lib/external-issues/types.js.map +1 -1
  307. package/dist/lib/jira/config.js +10 -4
  308. package/dist/lib/jira/config.js.map +1 -1
  309. package/dist/lib/linear/config.js +13 -8
  310. package/dist/lib/linear/config.js.map +1 -1
  311. package/dist/lib/machine-config.d.ts +8 -0
  312. package/dist/lib/machine-config.js +37 -0
  313. package/dist/lib/machine-config.js.map +1 -1
  314. package/dist/lib/mcp/generator.d.ts +26 -0
  315. package/dist/lib/mcp/generator.js +219 -0
  316. package/dist/lib/mcp/generator.js.map +1 -0
  317. package/dist/lib/mcp/index.d.ts +1 -0
  318. package/dist/lib/mcp/index.js +1 -0
  319. package/dist/lib/mcp/index.js.map +1 -1
  320. package/dist/lib/mcp/tools/index.d.ts +0 -11
  321. package/dist/lib/mcp/tools/index.js +0 -11
  322. package/dist/lib/mcp/tools/index.js.map +1 -1
  323. package/dist/lib/mcp/tools/overrides/index.d.ts +23 -0
  324. package/dist/lib/mcp/tools/overrides/index.js +30 -0
  325. package/dist/lib/mcp/tools/overrides/index.js.map +1 -0
  326. package/dist/lib/mcp/tools/overrides/tmux.d.ts +11 -0
  327. package/dist/lib/mcp/tools/overrides/tmux.js +184 -0
  328. package/dist/lib/mcp/tools/overrides/tmux.js.map +1 -0
  329. package/dist/lib/mcp/tools/overrides/work-start.d.ts +12 -0
  330. package/dist/lib/mcp/tools/overrides/work-start.js +108 -0
  331. package/dist/lib/mcp/tools/overrides/work-start.js.map +1 -0
  332. package/dist/lib/mcp/tools/ticket.js +10 -48
  333. package/dist/lib/mcp/tools/ticket.js.map +1 -1
  334. package/dist/lib/monday/config.js +11 -5
  335. package/dist/lib/monday/config.js.map +1 -1
  336. package/dist/lib/orchestrate/poller.d.ts +1 -1
  337. package/dist/lib/orchestrate/poller.js +1 -1
  338. package/dist/lib/pmo/base-command.d.ts +20 -152
  339. package/dist/lib/pmo/base-command.js +32 -198
  340. package/dist/lib/pmo/base-command.js.map +1 -1
  341. package/dist/lib/pmo/index.d.ts +1 -0
  342. package/dist/lib/pmo/index.js +3 -0
  343. package/dist/lib/pmo/index.js.map +1 -1
  344. package/dist/lib/pmo/storage/base.d.ts +0 -18
  345. package/dist/lib/pmo/storage/base.js +5 -234
  346. package/dist/lib/pmo/storage/base.js.map +1 -1
  347. package/dist/lib/pmo/storage/index.d.ts +1 -76
  348. package/dist/lib/pmo/storage/index.js +1 -215
  349. package/dist/lib/pmo/storage/index.js.map +1 -1
  350. package/dist/lib/pmo/storage/tickets.d.ts +2 -2
  351. package/dist/lib/pmo/storage/tickets.js +4 -34
  352. package/dist/lib/pmo/storage/tickets.js.map +1 -1
  353. package/dist/lib/pmo/types.d.ts +0 -37
  354. package/dist/lib/providers/clickup-provider.d.ts +28 -0
  355. package/dist/lib/providers/clickup-provider.js +353 -0
  356. package/dist/lib/providers/clickup-provider.js.map +1 -0
  357. package/dist/lib/providers/index.d.ts +1 -0
  358. package/dist/lib/providers/index.js +1 -0
  359. package/dist/lib/providers/index.js.map +1 -1
  360. package/dist/lib/providers/resolver.d.ts +1 -1
  361. package/dist/lib/providers/resolver.js +32 -5
  362. package/dist/lib/providers/resolver.js.map +1 -1
  363. package/dist/lib/providers/trello-provider.d.ts +28 -0
  364. package/dist/lib/providers/trello-provider.js +381 -0
  365. package/dist/lib/providers/trello-provider.js.map +1 -0
  366. package/dist/lib/providers/types.d.ts +1 -1
  367. package/dist/lib/runners/claude-code-runner.js +13 -4
  368. package/dist/lib/runners/claude-code-runner.js.map +1 -1
  369. package/dist/lib/runtime-command.d.ts +219 -0
  370. package/dist/lib/runtime-command.js +320 -0
  371. package/dist/lib/runtime-command.js.map +1 -0
  372. package/dist/lib/session/heartbeat.d.ts +45 -0
  373. package/dist/lib/session/heartbeat.js +150 -0
  374. package/dist/lib/session/heartbeat.js.map +1 -0
  375. package/dist/lib/session/index.d.ts +7 -0
  376. package/dist/lib/session/index.js +8 -0
  377. package/dist/lib/session/index.js.map +1 -0
  378. package/dist/lib/session/watcher.d.ts +79 -0
  379. package/dist/lib/session/watcher.js +142 -0
  380. package/dist/lib/session/watcher.js.map +1 -0
  381. package/dist/lib/shipping/auto-merge.d.ts +57 -0
  382. package/dist/lib/shipping/auto-merge.js +311 -0
  383. package/dist/lib/shipping/auto-merge.js.map +1 -0
  384. package/dist/lib/shipping/github.d.ts +68 -0
  385. package/dist/lib/shipping/github.js +217 -0
  386. package/dist/lib/shipping/github.js.map +1 -0
  387. package/dist/lib/shipping/index.d.ts +13 -0
  388. package/dist/lib/shipping/index.js +11 -0
  389. package/dist/lib/shipping/index.js.map +1 -0
  390. package/dist/lib/shipping/rebase.d.ts +35 -0
  391. package/dist/lib/shipping/rebase.js +107 -0
  392. package/dist/lib/shipping/rebase.js.map +1 -0
  393. package/dist/lib/shipping/types.d.ts +181 -0
  394. package/dist/lib/shipping/types.js +9 -0
  395. package/dist/lib/shipping/types.js.map +1 -0
  396. package/dist/lib/shortcut/config.js +13 -7
  397. package/dist/lib/shortcut/config.js.map +1 -1
  398. package/dist/lib/trello/client.d.ts +1 -0
  399. package/dist/lib/trello/client.js +6 -0
  400. package/dist/lib/trello/client.js.map +1 -1
  401. package/dist/lib/trello/config.js +17 -12
  402. package/dist/lib/trello/config.js.map +1 -1
  403. package/dist/lib/work-lifecycle/events.d.ts +1 -1
  404. package/dist/lib/work-source/config.d.ts +1 -1
  405. package/dist/lib/work-source/config.js +11 -1
  406. package/dist/lib/work-source/config.js.map +1 -1
  407. package/dist/lib/work-source/provider-sources.js +6 -1
  408. package/dist/lib/work-source/provider-sources.js.map +1 -1
  409. package/oclif.manifest.json +3810 -5723
  410. package/package.json +8 -8
  411. package/dist/commands/board/index.d.ts +0 -21
  412. package/dist/commands/board/index.js +0 -263
  413. package/dist/commands/board/index.js.map +0 -1
  414. package/dist/commands/board/view.d.ts +0 -15
  415. package/dist/commands/board/view.js +0 -137
  416. package/dist/commands/board/view.js.map +0 -1
  417. package/dist/commands/board/watch.d.ts +0 -15
  418. package/dist/commands/board/watch.js +0 -59
  419. package/dist/commands/board/watch.js.map +0 -1
  420. package/dist/commands/dashboard/index.js +0 -117
  421. package/dist/commands/dashboard/index.js.map +0 -1
  422. package/dist/commands/dashboard.d.ts +0 -38
  423. package/dist/commands/dashboard.js +0 -353
  424. package/dist/commands/dashboard.js.map +0 -1
  425. package/dist/commands/pmo/init.d.ts +0 -28
  426. package/dist/commands/pmo/init.js +0 -410
  427. package/dist/commands/pmo/init.js.map +0 -1
  428. package/dist/commands/project/archive.d.ts +0 -18
  429. package/dist/commands/project/archive.js +0 -79
  430. package/dist/commands/project/archive.js.map +0 -1
  431. package/dist/commands/project/create.d.ts +0 -24
  432. package/dist/commands/project/create.js +0 -191
  433. package/dist/commands/project/create.js.map +0 -1
  434. package/dist/commands/project/delete.d.ts +0 -18
  435. package/dist/commands/project/delete.js +0 -115
  436. package/dist/commands/project/delete.js.map +0 -1
  437. package/dist/commands/project/index.d.ts +0 -14
  438. package/dist/commands/project/index.js +0 -60
  439. package/dist/commands/project/index.js.map +0 -1
  440. package/dist/commands/project/list.d.ts +0 -16
  441. package/dist/commands/project/list.js +0 -115
  442. package/dist/commands/project/list.js.map +0 -1
  443. package/dist/commands/project/spec.d.ts +0 -19
  444. package/dist/commands/project/spec.js +0 -218
  445. package/dist/commands/project/spec.js.map +0 -1
  446. package/dist/commands/project/unarchive.d.ts +0 -17
  447. package/dist/commands/project/unarchive.js +0 -55
  448. package/dist/commands/project/unarchive.js.map +0 -1
  449. package/dist/commands/project/update.d.ts +0 -19
  450. package/dist/commands/project/update.js +0 -161
  451. package/dist/commands/project/update.js.map +0 -1
  452. package/dist/commands/project/view.d.ts +0 -17
  453. package/dist/commands/project/view.js +0 -107
  454. package/dist/commands/project/view.js.map +0 -1
  455. package/dist/commands/ticket/bulk.d.ts +0 -14
  456. package/dist/commands/ticket/bulk.js +0 -141
  457. package/dist/commands/ticket/bulk.js.map +0 -1
  458. package/dist/commands/ticket/cancel.js +0 -206
  459. package/dist/commands/ticket/cancel.js.map +0 -1
  460. package/dist/commands/ticket/category.d.ts +0 -15
  461. package/dist/commands/ticket/category.js +0 -64
  462. package/dist/commands/ticket/category.js.map +0 -1
  463. package/dist/commands/ticket/complete.d.ts +0 -17
  464. package/dist/commands/ticket/complete.js +0 -193
  465. package/dist/commands/ticket/complete.js.map +0 -1
  466. package/dist/commands/ticket/epic.d.ts +0 -21
  467. package/dist/commands/ticket/epic.js +0 -306
  468. package/dist/commands/ticket/epic.js.map +0 -1
  469. package/dist/commands/ticket/link/block.d.ts +0 -15
  470. package/dist/commands/ticket/link/block.js +0 -96
  471. package/dist/commands/ticket/link/block.js.map +0 -1
  472. package/dist/commands/ticket/link/duplicates.d.ts +0 -15
  473. package/dist/commands/ticket/link/duplicates.js +0 -96
  474. package/dist/commands/ticket/link/duplicates.js.map +0 -1
  475. package/dist/commands/ticket/link/index.d.ts +0 -14
  476. package/dist/commands/ticket/link/index.js +0 -99
  477. package/dist/commands/ticket/link/index.js.map +0 -1
  478. package/dist/commands/ticket/link/relates.d.ts +0 -15
  479. package/dist/commands/ticket/link/relates.js +0 -96
  480. package/dist/commands/ticket/link/relates.js.map +0 -1
  481. package/dist/commands/ticket/project.d.ts +0 -19
  482. package/dist/commands/ticket/project.js +0 -257
  483. package/dist/commands/ticket/project.js.map +0 -1
  484. package/dist/commands/ticket/reassign.d.ts +0 -20
  485. package/dist/commands/ticket/reassign.js +0 -340
  486. package/dist/commands/ticket/reassign.js.map +0 -1
  487. package/dist/commands/ticket/resolve.d.ts +0 -68
  488. package/dist/commands/ticket/resolve.js +0 -306
  489. package/dist/commands/ticket/resolve.js.map +0 -1
  490. package/dist/commands/ticket/spec.d.ts +0 -19
  491. package/dist/commands/ticket/spec.js +0 -260
  492. package/dist/commands/ticket/spec.js.map +0 -1
  493. package/dist/commands/ticket/status.d.ts +0 -14
  494. package/dist/commands/ticket/status.js +0 -84
  495. package/dist/commands/ticket/status.js.map +0 -1
  496. package/dist/commands/ticket/view.d.ts +0 -14
  497. package/dist/commands/ticket/view.js +0 -113
  498. package/dist/commands/ticket/view.js.map +0 -1
  499. package/dist/lib/mcp/tools/board.d.ts +0 -6
  500. package/dist/lib/mcp/tools/board.js +0 -190
  501. package/dist/lib/mcp/tools/board.js.map +0 -1
  502. package/dist/lib/mcp/tools/category.d.ts +0 -6
  503. package/dist/lib/mcp/tools/category.js +0 -85
  504. package/dist/lib/mcp/tools/category.js.map +0 -1
  505. package/dist/lib/mcp/tools/epic.d.ts +0 -6
  506. package/dist/lib/mcp/tools/epic.js +0 -184
  507. package/dist/lib/mcp/tools/epic.js.map +0 -1
  508. package/dist/lib/mcp/tools/label.d.ts +0 -6
  509. package/dist/lib/mcp/tools/label.js +0 -339
  510. package/dist/lib/mcp/tools/label.js.map +0 -1
  511. package/dist/lib/mcp/tools/phase.d.ts +0 -6
  512. package/dist/lib/mcp/tools/phase.js +0 -132
  513. package/dist/lib/mcp/tools/phase.js.map +0 -1
  514. package/dist/lib/mcp/tools/project.d.ts +0 -6
  515. package/dist/lib/mcp/tools/project.js +0 -197
  516. package/dist/lib/mcp/tools/project.js.map +0 -1
  517. package/dist/lib/mcp/tools/roadmap.d.ts +0 -6
  518. package/dist/lib/mcp/tools/roadmap.js +0 -124
  519. package/dist/lib/mcp/tools/roadmap.js.map +0 -1
  520. package/dist/lib/mcp/tools/status.d.ts +0 -6
  521. package/dist/lib/mcp/tools/status.js +0 -110
  522. package/dist/lib/mcp/tools/status.js.map +0 -1
  523. package/dist/lib/mcp/tools/template.d.ts +0 -6
  524. package/dist/lib/mcp/tools/template.js +0 -108
  525. package/dist/lib/mcp/tools/template.js.map +0 -1
  526. package/dist/lib/mcp/tools/view.d.ts +0 -6
  527. package/dist/lib/mcp/tools/view.js +0 -77
  528. package/dist/lib/mcp/tools/view.js.map +0 -1
  529. package/dist/lib/mcp/tools/workflow.d.ts +0 -6
  530. package/dist/lib/mcp/tools/workflow.js +0 -96
  531. package/dist/lib/mcp/tools/workflow.js.map +0 -1
  532. package/dist/lib/pmo/storage/categories.d.ts +0 -50
  533. package/dist/lib/pmo/storage/categories.js +0 -206
  534. package/dist/lib/pmo/storage/categories.js.map +0 -1
  535. package/dist/lib/pmo/storage/labels.d.ts +0 -55
  536. package/dist/lib/pmo/storage/labels.js +0 -347
  537. package/dist/lib/pmo/storage/labels.js.map +0 -1
  538. package/dist/lib/pmo/storage/phases.d.ts +0 -65
  539. package/dist/lib/pmo/storage/phases.js +0 -393
  540. package/dist/lib/pmo/storage/phases.js.map +0 -1
  541. package/dist/lib/pmo/storage/roadmaps.d.ts +0 -64
  542. package/dist/lib/pmo/storage/roadmaps.js +0 -373
  543. package/dist/lib/pmo/storage/roadmaps.js.map +0 -1
  544. package/dist/lib/pmo/storage/views.d.ts +0 -57
  545. package/dist/lib/pmo/storage/views.js +0 -456
  546. package/dist/lib/pmo/storage/views.js.map +0 -1
@@ -2,513 +2,121 @@
2
2
  * Dashboard HTML Template
3
3
  *
4
4
  * Returns a complete self-contained HTML page for the web dashboard.
5
- * Dark theme, responsive layout with kanban board, agents, sessions, and PRs.
5
+ * Styled to match the proletariat marketing site Switzer font,
6
+ * JetBrains Mono, pink-600 accents, clean white cards, Tailwind CDN.
6
7
  */
7
- function escapeHtml(str) {
8
- return str
9
- .replace(/&/g, '&')
10
- .replace(/</g, '&lt;')
11
- .replace(/>/g, '&gt;')
12
- .replace(/"/g, '&quot;')
13
- .replace(/'/g, '&#039;');
14
- }
15
8
  export function getDashboardHTML(port) {
16
9
  return `<!DOCTYPE html>
17
- <html lang="en">
10
+ <html lang="en" class="antialiased">
18
11
  <head>
19
12
  <meta charset="UTF-8">
20
13
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
21
14
  <title>prlt dashboard</title>
22
- <style>
23
- * { margin: 0; padding: 0; box-sizing: border-box; }
24
-
25
- :root {
26
- --bg: #0d1117;
27
- --bg-secondary: #161b22;
28
- --bg-tertiary: #21262d;
29
- --border: #30363d;
30
- --text: #e6edf3;
31
- --text-muted: #8b949e;
32
- --accent: #58a6ff;
33
- --green: #3fb950;
34
- --red: #f85149;
35
- --yellow: #d29922;
36
- --orange: #db6d28;
37
- --purple: #bc8cff;
38
- --pink: #f778ba;
39
- }
40
-
41
- body {
42
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
43
- background: var(--bg);
44
- color: var(--text);
45
- line-height: 1.5;
46
- min-height: 100vh;
47
- }
48
-
49
- /* Header */
50
- .header {
51
- background: var(--bg-secondary);
52
- border-bottom: 1px solid var(--border);
53
- padding: 12px 24px;
54
- display: flex;
55
- align-items: center;
56
- justify-content: space-between;
57
- position: sticky;
58
- top: 0;
59
- z-index: 100;
60
- }
61
-
62
- .header-left {
63
- display: flex;
64
- align-items: center;
65
- gap: 12px;
66
- }
67
-
68
- .header h1 {
69
- font-size: 16px;
70
- font-weight: 600;
71
- color: var(--text);
72
- }
73
-
74
- .header h1 span {
75
- color: var(--accent);
76
- }
77
-
78
- .project-name {
79
- font-size: 13px;
80
- color: var(--text-muted);
81
- padding: 2px 8px;
82
- background: var(--bg-tertiary);
83
- border-radius: 4px;
84
- }
85
-
86
- .header-right {
87
- display: flex;
88
- align-items: center;
89
- gap: 12px;
90
- font-size: 12px;
91
- color: var(--text-muted);
92
- }
93
-
94
- .status-dot {
95
- width: 8px;
96
- height: 8px;
97
- border-radius: 50%;
98
- display: inline-block;
99
- }
100
-
101
- .status-dot.connected { background: var(--green); }
102
- .status-dot.disconnected { background: var(--red); }
103
-
104
- /* Main layout */
105
- .main {
106
- padding: 24px;
107
- max-width: 1600px;
108
- margin: 0 auto;
109
- }
110
-
111
- .section {
112
- margin-bottom: 32px;
113
- }
114
-
115
- .section-header {
116
- display: flex;
117
- align-items: center;
118
- gap: 8px;
119
- margin-bottom: 12px;
120
- font-size: 14px;
121
- font-weight: 600;
122
- color: var(--text-muted);
123
- text-transform: uppercase;
124
- letter-spacing: 0.5px;
125
- }
126
-
127
- .section-header .count {
128
- font-size: 11px;
129
- background: var(--bg-tertiary);
130
- color: var(--text-muted);
131
- padding: 1px 6px;
132
- border-radius: 10px;
133
- font-weight: 500;
134
- }
135
-
136
- /* Kanban Board */
137
- .kanban {
138
- display: flex;
139
- gap: 12px;
140
- overflow-x: auto;
141
- padding-bottom: 8px;
142
- }
143
-
144
- .kanban-column {
145
- min-width: 240px;
146
- max-width: 300px;
147
- flex: 1;
148
- background: var(--bg-secondary);
149
- border: 1px solid var(--border);
150
- border-radius: 8px;
151
- display: flex;
152
- flex-direction: column;
153
- max-height: 500px;
154
- }
155
-
156
- .kanban-column-header {
157
- padding: 10px 12px;
158
- border-bottom: 1px solid var(--border);
159
- font-size: 13px;
160
- font-weight: 600;
161
- display: flex;
162
- justify-content: space-between;
163
- align-items: center;
164
- flex-shrink: 0;
165
- }
166
-
167
- .kanban-column-header .ticket-count {
168
- font-size: 11px;
169
- color: var(--text-muted);
170
- background: var(--bg-tertiary);
171
- padding: 1px 6px;
172
- border-radius: 10px;
173
- }
174
-
175
- .kanban-column-body {
176
- padding: 8px;
177
- overflow-y: auto;
178
- flex: 1;
179
- }
180
-
181
- .ticket-card {
182
- background: var(--bg-tertiary);
183
- border: 1px solid var(--border);
184
- border-radius: 6px;
185
- padding: 10px 12px;
186
- margin-bottom: 6px;
187
- cursor: default;
188
- transition: border-color 0.15s;
189
- }
190
-
191
- .ticket-card:hover {
192
- border-color: var(--accent);
193
- }
194
-
195
- .ticket-id {
196
- font-size: 11px;
197
- font-weight: 600;
198
- color: var(--accent);
199
- font-family: 'SF Mono', SFMono-Regular, Consolas, monospace;
200
- }
201
-
202
- .ticket-title {
203
- font-size: 13px;
204
- margin-top: 4px;
205
- line-height: 1.4;
206
- }
207
-
208
- .ticket-meta {
209
- display: flex;
210
- gap: 6px;
211
- margin-top: 6px;
212
- flex-wrap: wrap;
213
- }
214
-
215
- .badge {
216
- font-size: 10px;
217
- padding: 1px 6px;
218
- border-radius: 10px;
219
- font-weight: 500;
220
- }
221
-
222
- .badge-priority { background: #1f1d2e; }
223
- .badge-priority.P0 { color: var(--red); border: 1px solid var(--red); }
224
- .badge-priority.P1 { color: var(--orange); border: 1px solid var(--orange); }
225
- .badge-priority.P2 { color: var(--yellow); border: 1px solid var(--yellow); }
226
- .badge-priority.P3 { color: var(--text-muted); border: 1px solid var(--border); }
227
-
228
- .badge-category {
229
- color: var(--purple);
230
- border: 1px solid rgba(188, 140, 255, 0.3);
231
- }
232
-
233
- .badge-assignee {
234
- color: var(--pink);
235
- border: 1px solid rgba(247, 120, 186, 0.3);
236
- }
237
-
238
- .badge-label {
239
- color: var(--text-muted);
240
- border: 1px solid var(--border);
241
- }
242
-
243
- /* Agent Cards */
244
- .agent-grid {
245
- display: grid;
246
- grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
247
- gap: 12px;
248
- }
249
-
250
- .agent-card {
251
- background: var(--bg-secondary);
252
- border: 1px solid var(--border);
253
- border-radius: 8px;
254
- padding: 14px 16px;
255
- transition: border-color 0.15s;
256
- }
257
-
258
- .agent-card:hover {
259
- border-color: var(--accent);
260
- }
261
-
262
- .agent-card.active {
263
- border-left: 3px solid var(--green);
264
- }
265
-
266
- .agent-card.idle {
267
- border-left: 3px solid var(--text-muted);
268
- }
269
-
270
- .agent-name {
271
- font-size: 14px;
272
- font-weight: 600;
273
- display: flex;
274
- align-items: center;
275
- gap: 6px;
276
- }
277
-
278
- .agent-status-indicator {
279
- width: 8px;
280
- height: 8px;
281
- border-radius: 50%;
282
- }
283
-
284
- .agent-status-indicator.active { background: var(--green); }
285
- .agent-status-indicator.idle { background: var(--text-muted); }
286
-
287
- .agent-detail {
288
- font-size: 12px;
289
- color: var(--text-muted);
290
- margin-top: 6px;
291
- }
292
-
293
- .agent-tickets {
294
- display: flex;
295
- gap: 4px;
296
- flex-wrap: wrap;
297
- margin-top: 8px;
298
- }
299
-
300
- .agent-ticket-badge {
301
- font-size: 10px;
302
- font-family: 'SF Mono', SFMono-Regular, Consolas, monospace;
303
- color: var(--accent);
304
- background: rgba(88, 166, 255, 0.1);
305
- border: 1px solid rgba(88, 166, 255, 0.2);
306
- padding: 1px 6px;
307
- border-radius: 4px;
308
- }
309
-
310
- /* Sessions Table */
311
- .table-wrapper {
312
- background: var(--bg-secondary);
313
- border: 1px solid var(--border);
314
- border-radius: 8px;
315
- overflow: hidden;
316
- }
317
-
318
- table {
319
- width: 100%;
320
- border-collapse: collapse;
321
- }
322
-
323
- th {
324
- text-align: left;
325
- padding: 10px 14px;
326
- font-size: 11px;
327
- font-weight: 600;
328
- color: var(--text-muted);
329
- text-transform: uppercase;
330
- letter-spacing: 0.5px;
331
- border-bottom: 1px solid var(--border);
332
- background: var(--bg-secondary);
333
- }
334
-
335
- td {
336
- padding: 10px 14px;
337
- font-size: 13px;
338
- border-bottom: 1px solid var(--border);
339
- }
340
-
341
- tr:last-child td {
342
- border-bottom: none;
343
- }
344
-
345
- tr:hover td {
346
- background: var(--bg-tertiary);
347
- }
348
-
349
- .session-id {
350
- font-family: 'SF Mono', SFMono-Regular, Consolas, monospace;
351
- font-size: 12px;
352
- color: var(--text-muted);
353
- }
354
-
355
- .status-badge {
356
- font-size: 11px;
357
- padding: 2px 8px;
358
- border-radius: 10px;
359
- font-weight: 500;
360
- }
361
-
362
- .status-badge.running { background: rgba(63, 185, 80, 0.15); color: var(--green); }
363
- .status-badge.starting { background: rgba(210, 153, 34, 0.15); color: var(--yellow); }
364
- .status-badge.orphan { background: rgba(219, 109, 40, 0.15); color: var(--orange); }
365
-
366
- /* PR List */
367
- .pr-list {
368
- display: flex;
369
- flex-direction: column;
370
- gap: 6px;
371
- }
372
-
373
- .pr-item {
374
- background: var(--bg-secondary);
375
- border: 1px solid var(--border);
376
- border-radius: 8px;
377
- padding: 12px 16px;
378
- display: flex;
379
- align-items: center;
380
- gap: 12px;
381
- transition: border-color 0.15s;
382
- }
383
-
384
- .pr-item:hover {
385
- border-color: var(--accent);
386
- }
387
-
388
- .pr-number {
389
- font-family: 'SF Mono', SFMono-Regular, Consolas, monospace;
390
- font-size: 13px;
391
- color: var(--accent);
392
- font-weight: 600;
393
- min-width: 50px;
394
- }
395
-
396
- .pr-title {
397
- flex: 1;
398
- font-size: 13px;
399
- }
400
-
401
- .pr-branch {
402
- font-size: 11px;
403
- font-family: 'SF Mono', SFMono-Regular, Consolas, monospace;
404
- color: var(--text-muted);
405
- background: var(--bg-tertiary);
406
- padding: 2px 8px;
407
- border-radius: 4px;
408
- max-width: 250px;
409
- overflow: hidden;
410
- text-overflow: ellipsis;
411
- white-space: nowrap;
412
- }
413
-
414
- .ci-badge {
415
- font-size: 11px;
416
- padding: 2px 8px;
417
- border-radius: 10px;
418
- font-weight: 500;
419
- white-space: nowrap;
420
- }
421
-
422
- .ci-badge.success { background: rgba(63, 185, 80, 0.15); color: var(--green); }
423
- .ci-badge.failure { background: rgba(248, 81, 73, 0.15); color: var(--red); }
424
- .ci-badge.pending { background: rgba(210, 153, 34, 0.15); color: var(--yellow); }
425
- .ci-badge.unknown { background: var(--bg-tertiary); color: var(--text-muted); }
426
-
427
- .draft-badge {
428
- font-size: 10px;
429
- padding: 1px 6px;
430
- border-radius: 10px;
431
- background: var(--bg-tertiary);
432
- color: var(--text-muted);
433
- border: 1px solid var(--border);
434
- }
435
-
436
- /* Empty state */
437
- .empty-state {
438
- text-align: center;
439
- padding: 32px;
440
- color: var(--text-muted);
441
- font-size: 13px;
442
- }
443
-
444
- /* Link styling */
445
- a {
446
- color: var(--accent);
447
- text-decoration: none;
448
- }
449
-
450
- a:hover {
451
- text-decoration: underline;
15
+ <script src="https://cdn.tailwindcss.com"></script>
16
+ <link rel="stylesheet" href="https://api.fontshare.com/css?f[]=switzer@400,500,600,700&display=swap">
17
+ <link rel="preconnect" href="https://fonts.googleapis.com">
18
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
19
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&display=swap">
20
+ <script>
21
+ tailwind.config = {
22
+ theme: {
23
+ extend: {
24
+ fontFamily: {
25
+ sans: ['Switzer', 'system-ui', 'sans-serif'],
26
+ mono: ['JetBrains Mono', 'monospace'],
27
+ },
28
+ colors: {
29
+ pink: {
30
+ 600: '#D15052',
31
+ },
32
+ gray: {
33
+ 750: '#2a2a2e',
34
+ },
35
+ },
36
+ },
37
+ },
452
38
  }
453
-
39
+ </script>
40
+ <style>
454
41
  /* Scrollbar */
455
- ::-webkit-scrollbar { width: 6px; height: 6px; }
42
+ ::-webkit-scrollbar { width: 5px; height: 5px; }
456
43
  ::-webkit-scrollbar-track { background: transparent; }
457
- ::-webkit-scrollbar-thumb { background: var(--border); border-radius: 3px; }
458
- ::-webkit-scrollbar-thumb:hover { background: var(--text-muted); }
44
+ ::-webkit-scrollbar-thumb { background: #d1d5db; border-radius: 3px; }
45
+ ::-webkit-scrollbar-thumb:hover { background: #9ca3af; }
459
46
  </style>
460
47
  </head>
461
- <body>
462
- <div class="header">
463
- <div class="header-left">
464
- <h1><span>prlt</span> dashboard</h1>
465
- <span class="project-name" id="project-name">loading...</span>
466
- </div>
467
- <div class="header-right">
468
- <span class="status-dot disconnected" id="status-dot"></span>
469
- <span id="status-text">Connecting...</span>
470
- <span id="last-updated"></span>
48
+ <body class="bg-white text-gray-950 font-sans min-h-screen">
49
+
50
+ <!-- Header -->
51
+ <header class="sticky top-0 z-50 bg-white/80 backdrop-blur-md border-b border-gray-200">
52
+ <div class="max-w-7xl mx-auto px-6 py-4 flex items-center justify-between">
53
+ <div class="flex items-center gap-4">
54
+ <h1 class="text-lg font-semibold tracking-tight text-gray-950">
55
+ <span class="text-pink-600">prlt</span> dashboard
56
+ </h1>
57
+ <span id="project-name" class="font-mono text-xs uppercase tracking-widest text-gray-500 bg-gray-100 px-3 py-1 rounded-full">loading...</span>
58
+ </div>
59
+ <div class="flex items-center gap-3 text-xs text-gray-400">
60
+ <span id="status-dot" class="w-2 h-2 rounded-full bg-gray-300"></span>
61
+ <span id="status-text">Connecting...</span>
62
+ <span id="last-updated" class="text-gray-400"></span>
63
+ </div>
471
64
  </div>
472
- </div>
65
+ </header>
66
+
67
+ <!-- Main -->
68
+ <main class="max-w-7xl mx-auto px-6 py-8 space-y-10">
473
69
 
474
- <div class="main">
475
70
  <!-- Board Section -->
476
- <div class="section" id="board-section">
477
- <div class="section-header">Board <span class="count" id="board-count">0</span></div>
478
- <div class="kanban" id="kanban"></div>
479
- </div>
71
+ <section id="board-section">
72
+ <div class="flex items-center gap-3 mb-4">
73
+ <h2 class="font-mono text-xs uppercase tracking-widest text-gray-500">Board</h2>
74
+ <span id="board-count" class="font-mono text-xs text-gray-400 bg-gray-100 px-2 py-0.5 rounded-full">0</span>
75
+ </div>
76
+ <div id="kanban" class="flex gap-3 overflow-x-auto pb-2"></div>
77
+ </section>
480
78
 
481
79
  <!-- Agents Section -->
482
- <div class="section" id="agents-section">
483
- <div class="section-header">Agents <span class="count" id="agents-count">0</span></div>
484
- <div class="agent-grid" id="agents-grid"></div>
485
- </div>
80
+ <section id="agents-section">
81
+ <div class="flex items-center gap-3 mb-4">
82
+ <h2 class="font-mono text-xs uppercase tracking-widest text-gray-500">Agents</h2>
83
+ <span id="agents-count" class="font-mono text-xs text-gray-400 bg-gray-100 px-2 py-0.5 rounded-full">0</span>
84
+ </div>
85
+ <div id="agents-grid" class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-3"></div>
86
+ </section>
486
87
 
487
88
  <!-- Sessions Section -->
488
- <div class="section" id="sessions-section">
489
- <div class="section-header">Sessions <span class="count" id="sessions-count">0</span></div>
490
- <div class="table-wrapper">
491
- <table>
89
+ <section id="sessions-section">
90
+ <div class="flex items-center gap-3 mb-4">
91
+ <h2 class="font-mono text-xs uppercase tracking-widest text-gray-500">Sessions</h2>
92
+ <span id="sessions-count" class="font-mono text-xs text-gray-400 bg-gray-100 px-2 py-0.5 rounded-full">0</span>
93
+ </div>
94
+ <div class="bg-white rounded-2xl shadow-sm ring-1 ring-gray-200 overflow-hidden">
95
+ <table class="w-full">
492
96
  <thead>
493
- <tr>
494
- <th>Session</th>
495
- <th>Ticket</th>
496
- <th>Agent</th>
497
- <th>Environment</th>
498
- <th>Status</th>
97
+ <tr class="border-b border-gray-100">
98
+ <th class="text-left px-4 py-3 font-mono text-xs uppercase tracking-widest text-gray-400 font-medium">Session</th>
99
+ <th class="text-left px-4 py-3 font-mono text-xs uppercase tracking-widest text-gray-400 font-medium">Ticket</th>
100
+ <th class="text-left px-4 py-3 font-mono text-xs uppercase tracking-widest text-gray-400 font-medium">Agent</th>
101
+ <th class="text-left px-4 py-3 font-mono text-xs uppercase tracking-widest text-gray-400 font-medium">Environment</th>
102
+ <th class="text-left px-4 py-3 font-mono text-xs uppercase tracking-widest text-gray-400 font-medium">Status</th>
499
103
  </tr>
500
104
  </thead>
501
105
  <tbody id="sessions-body"></tbody>
502
106
  </table>
503
107
  </div>
504
- </div>
108
+ </section>
505
109
 
506
110
  <!-- PRs Section -->
507
- <div class="section" id="prs-section">
508
- <div class="section-header">Pull Requests <span class="count" id="prs-count">0</span></div>
509
- <div class="pr-list" id="pr-list"></div>
510
- </div>
511
- </div>
111
+ <section id="prs-section">
112
+ <div class="flex items-center gap-3 mb-4">
113
+ <h2 class="font-mono text-xs uppercase tracking-widest text-gray-500">Pull Requests</h2>
114
+ <span id="prs-count" class="font-mono text-xs text-gray-400 bg-gray-100 px-2 py-0.5 rounded-full">0</span>
115
+ </div>
116
+ <div id="pr-list" class="space-y-2"></div>
117
+ </section>
118
+
119
+ </main>
512
120
 
513
121
  <script>
514
122
  // Escape helper
@@ -519,6 +127,17 @@ export function getDashboardHTML(port) {
519
127
  return d.innerHTML;
520
128
  }
521
129
 
130
+ // Priority colors
131
+ function priorityClasses(p) {
132
+ switch (p) {
133
+ case 'P0': return 'text-red-600 ring-red-200 bg-red-50';
134
+ case 'P1': return 'text-orange-600 ring-orange-200 bg-orange-50';
135
+ case 'P2': return 'text-yellow-600 ring-yellow-200 bg-yellow-50';
136
+ case 'P3': return 'text-gray-500 ring-gray-200 bg-gray-50';
137
+ default: return 'text-gray-500 ring-gray-200 bg-gray-50';
138
+ }
139
+ }
140
+
522
141
  // Render functions
523
142
  function renderBoard(board) {
524
143
  const kanban = document.getElementById('kanban');
@@ -528,28 +147,28 @@ export function getDashboardHTML(port) {
528
147
  document.getElementById('board-count').textContent = totalTickets;
529
148
 
530
149
  if (cols.length === 0) {
531
- kanban.innerHTML = '<div class="empty-state">No board data</div>';
150
+ kanban.innerHTML = '<p class="text-sm text-gray-400 py-8 text-center w-full">No board data</p>';
532
151
  return;
533
152
  }
534
153
 
535
154
  kanban.innerHTML = cols.map(col => {
536
155
  const tickets = col.tickets || [];
537
- return '<div class="kanban-column">' +
538
- '<div class="kanban-column-header">' +
539
- '<span>' + esc(col.name) + '</span>' +
540
- '<span class="ticket-count">' + tickets.length + '</span>' +
156
+ return '<div class="min-w-[240px] max-w-[300px] flex-1 bg-white rounded-2xl shadow-sm ring-1 ring-gray-200 flex flex-col max-h-[500px]">' +
157
+ '<div class="px-4 py-3 border-b border-gray-100 flex justify-between items-center flex-shrink-0">' +
158
+ '<span class="text-sm font-medium text-gray-950">' + esc(col.name) + '</span>' +
159
+ '<span class="font-mono text-xs text-gray-400 bg-gray-100 px-2 py-0.5 rounded-full">' + tickets.length + '</span>' +
541
160
  '</div>' +
542
- '<div class="kanban-column-body">' +
161
+ '<div class="p-2 overflow-y-auto flex-1 space-y-1.5">' +
543
162
  (tickets.length === 0 ? '' : tickets.map(t => {
544
163
  let meta = '';
545
- if (t.priority) meta += '<span class="badge badge-priority ' + esc(t.priority) + '">' + esc(t.priority) + '</span>';
546
- if (t.category) meta += '<span class="badge badge-category">' + esc(t.category) + '</span>';
547
- if (t.assignee) meta += '<span class="badge badge-assignee">' + esc(t.assignee) + '</span>';
548
- (t.labels || []).forEach(l => { meta += '<span class="badge badge-label">' + esc(l) + '</span>'; });
549
- return '<div class="ticket-card">' +
550
- '<div class="ticket-id">' + esc(t.id) + '</div>' +
551
- '<div class="ticket-title">' + esc(t.title) + '</div>' +
552
- (meta ? '<div class="ticket-meta">' + meta + '</div>' : '') +
164
+ if (t.priority) meta += '<span class="inline-flex text-[10px] font-mono font-medium px-1.5 py-0.5 rounded-lg ring-1 ' + priorityClasses(t.priority) + '">' + esc(t.priority) + '</span>';
165
+ if (t.category) meta += '<span class="inline-flex text-[10px] font-mono font-medium px-1.5 py-0.5 rounded-lg ring-1 ring-purple-200 text-purple-600 bg-purple-50">' + esc(t.category) + '</span>';
166
+ if (t.assignee) meta += '<span class="inline-flex text-[10px] font-mono font-medium px-1.5 py-0.5 rounded-lg ring-1 ring-pink-600/20 text-pink-600 bg-pink-50">' + esc(t.assignee) + '</span>';
167
+ (t.labels || []).forEach(l => { meta += '<span class="inline-flex text-[10px] font-mono font-medium px-1.5 py-0.5 rounded-lg ring-1 ring-gray-200 text-gray-500 bg-gray-50">' + esc(l) + '</span>'; });
168
+ return '<div class="bg-gray-50 rounded-xl p-3 transition-all hover:ring-1 hover:ring-pink-600/30 cursor-default">' +
169
+ '<div class="font-mono text-[11px] font-semibold text-pink-600">' + esc(t.id) + '</div>' +
170
+ '<div class="text-sm text-gray-950 mt-1 leading-snug">' + esc(t.title) + '</div>' +
171
+ (meta ? '<div class="flex gap-1.5 mt-2 flex-wrap">' + meta + '</div>' : '') +
553
172
  '</div>';
554
173
  }).join('')) +
555
174
  '</div>' +
@@ -562,25 +181,26 @@ export function getDashboardHTML(port) {
562
181
  document.getElementById('agents-count').textContent = agents.length;
563
182
 
564
183
  if (agents.length === 0) {
565
- grid.innerHTML = '<div class="empty-state">No agents found</div>';
184
+ grid.innerHTML = '<p class="text-sm text-gray-400 py-8 text-center col-span-full">No agents found</p>';
566
185
  return;
567
186
  }
568
187
 
569
188
  grid.innerHTML = agents.map(a => {
570
189
  const isActive = a.hasActiveSessions;
571
- const cls = isActive ? 'active' : 'idle';
190
+ const borderClass = isActive ? 'border-l-[3px] border-l-green-400' : 'border-l-[3px] border-l-gray-300';
191
+ const dotClass = isActive ? 'bg-green-400' : 'bg-gray-300';
572
192
  let tickets = '';
573
193
  if (a.assignedTickets.length > 0) {
574
- tickets = '<div class="agent-tickets">' +
575
- a.assignedTickets.map(t => '<span class="agent-ticket-badge">' + esc(t) + '</span>').join('') +
194
+ tickets = '<div class="flex gap-1.5 flex-wrap mt-3">' +
195
+ a.assignedTickets.map(t => '<span class="font-mono text-[10px] font-medium text-pink-600 bg-pink-50 ring-1 ring-pink-600/20 px-2 py-0.5 rounded-lg">' + esc(t) + '</span>').join('') +
576
196
  '</div>';
577
197
  }
578
- return '<div class="agent-card ' + cls + '">' +
579
- '<div class="agent-name">' +
580
- '<span class="agent-status-indicator ' + cls + '"></span>' +
581
- esc(a.name) +
198
+ return '<div class="bg-white rounded-2xl shadow-sm ring-1 ring-gray-200 p-4 transition-all hover:ring-pink-600/30 ' + borderClass + '">' +
199
+ '<div class="flex items-center gap-2">' +
200
+ '<span class="w-2 h-2 rounded-full flex-shrink-0 ' + dotClass + '"></span>' +
201
+ '<span class="text-sm font-semibold text-gray-950">' + esc(a.name) + '</span>' +
582
202
  '</div>' +
583
- (a.branch ? '<div class="agent-detail">' + esc(a.branch) + '</div>' : '') +
203
+ (a.branch ? '<div class="font-mono text-xs text-gray-400 mt-1.5 truncate">' + esc(a.branch) + '</div>' : '') +
584
204
  tickets +
585
205
  '</div>';
586
206
  }).join('');
@@ -591,18 +211,22 @@ export function getDashboardHTML(port) {
591
211
  document.getElementById('sessions-count').textContent = sessions.length;
592
212
 
593
213
  if (sessions.length === 0) {
594
- body.innerHTML = '<tr><td colspan="5" class="empty-state">No active sessions</td></tr>';
214
+ body.innerHTML = '<tr><td colspan="5" class="text-sm text-gray-400 text-center py-8">No active sessions</td></tr>';
595
215
  return;
596
216
  }
597
217
 
598
218
  body.innerHTML = sessions.map(s => {
599
- const envIcon = s.environment === 'container' ? '&#x1F433;' : '&#x1F4BB;';
600
- return '<tr>' +
601
- '<td class="session-id">' + esc(s.sessionId) + '</td>' +
602
- '<td>' + esc(s.ticketId) + '</td>' +
603
- '<td>' + esc(s.agentName) + '</td>' +
604
- '<td>' + envIcon + ' ' + esc(s.environment) + '</td>' +
605
- '<td><span class="status-badge ' + esc(s.status) + '">' + esc(s.status) + '</span></td>' +
219
+ const envLabel = s.environment === 'container' ? 'container' : 'host';
220
+ let statusCls = 'text-gray-500 bg-gray-50 ring-gray-200';
221
+ if (s.status === 'running') statusCls = 'text-green-600 bg-green-50 ring-green-200';
222
+ else if (s.status === 'starting') statusCls = 'text-yellow-600 bg-yellow-50 ring-yellow-200';
223
+ else if (s.status === 'orphan') statusCls = 'text-orange-600 bg-orange-50 ring-orange-200';
224
+ return '<tr class="border-b border-gray-50 hover:bg-gray-50/50 transition-colors">' +
225
+ '<td class="px-4 py-3 font-mono text-xs text-gray-400">' + esc(s.sessionId) + '</td>' +
226
+ '<td class="px-4 py-3 font-mono text-xs font-medium text-pink-600">' + esc(s.ticketId) + '</td>' +
227
+ '<td class="px-4 py-3 text-sm text-gray-950">' + esc(s.agentName) + '</td>' +
228
+ '<td class="px-4 py-3"><span class="font-mono text-[10px] uppercase tracking-widest text-gray-400">' + esc(envLabel) + '</span></td>' +
229
+ '<td class="px-4 py-3"><span class="font-mono text-[10px] font-medium px-2 py-0.5 rounded-full ring-1 ' + statusCls + '">' + esc(s.status) + '</span></td>' +
606
230
  '</tr>';
607
231
  }).join('');
608
232
  }
@@ -612,19 +236,23 @@ export function getDashboardHTML(port) {
612
236
  document.getElementById('prs-count').textContent = prs.length;
613
237
 
614
238
  if (prs.length === 0) {
615
- list.innerHTML = '<div class="empty-state">No open pull requests</div>';
239
+ list.innerHTML = '<p class="text-sm text-gray-400 py-8 text-center">No open pull requests</p>';
616
240
  return;
617
241
  }
618
242
 
619
243
  list.innerHTML = prs.map(pr => {
620
244
  const ciClass = pr.ciStatus || 'unknown';
621
- const ciLabel = { success: 'CI passed', failure: 'CI failed', pending: 'CI running', unknown: 'CI unknown' }[ciClass] || 'CI unknown';
622
- return '<div class="pr-item">' +
623
- '<span class="pr-number"><a href="' + esc(pr.url) + '" target="_blank">#' + pr.number + '</a></span>' +
624
- '<span class="pr-title">' + esc(pr.title) + '</span>' +
625
- (pr.isDraft ? '<span class="draft-badge">draft</span>' : '') +
626
- '<span class="pr-branch">' + esc(pr.headBranch) + '</span>' +
627
- '<span class="ci-badge ' + ciClass + '">' + ciLabel + '</span>' +
245
+ let ciCls = 'text-gray-500 bg-gray-50 ring-gray-200';
246
+ let ciLabel = 'unknown';
247
+ if (ciClass === 'success') { ciCls = 'text-green-600 bg-green-50 ring-green-200'; ciLabel = 'passed'; }
248
+ else if (ciClass === 'failure') { ciCls = 'text-red-600 bg-red-50 ring-red-200'; ciLabel = 'failed'; }
249
+ else if (ciClass === 'pending') { ciCls = 'text-yellow-600 bg-yellow-50 ring-yellow-200'; ciLabel = 'running'; }
250
+ return '<div class="bg-white rounded-2xl shadow-sm ring-1 ring-gray-200 px-5 py-3.5 flex items-center gap-4 transition-all hover:ring-pink-600/30">' +
251
+ '<a href="' + esc(pr.url) + '" target="_blank" class="font-mono text-sm font-semibold text-pink-600 hover:underline min-w-[50px]">#' + pr.number + '</a>' +
252
+ '<span class="text-sm text-gray-950 flex-1">' + esc(pr.title) + '</span>' +
253
+ (pr.isDraft ? '<span class="font-mono text-[10px] uppercase tracking-widest text-gray-400 ring-1 ring-gray-200 px-2 py-0.5 rounded-full">draft</span>' : '') +
254
+ '<span class="font-mono text-[10px] text-gray-400 bg-gray-100 px-2 py-0.5 rounded-lg max-w-[220px] truncate">' + esc(pr.headBranch) + '</span>' +
255
+ '<span class="font-mono text-[10px] font-medium px-2 py-0.5 rounded-full ring-1 whitespace-nowrap ' + ciCls + '">' + ciLabel + '</span>' +
628
256
  '</div>';
629
257
  }).join('');
630
258
  }
@@ -632,7 +260,7 @@ export function getDashboardHTML(port) {
632
260
  function renderAll(data) {
633
261
  document.getElementById('project-name').textContent = data.projectName || data.projectId;
634
262
  const ts = new Date(data.timestamp);
635
- document.getElementById('last-updated').textContent = 'Updated ' + ts.toLocaleTimeString();
263
+ document.getElementById('last-updated').textContent = ts.toLocaleTimeString();
636
264
  renderBoard(data.board);
637
265
  renderAgents(data.agents);
638
266
  renderSessions(data.sessions);
@@ -653,7 +281,7 @@ export function getDashboardHTML(port) {
653
281
  const es = new EventSource('/api/events');
654
282
 
655
283
  es.onopen = () => {
656
- dot.className = 'status-dot connected';
284
+ dot.className = 'w-2 h-2 rounded-full bg-green-400';
657
285
  statusText.textContent = 'Live';
658
286
  };
659
287
 
@@ -667,7 +295,7 @@ export function getDashboardHTML(port) {
667
295
  };
668
296
 
669
297
  es.onerror = () => {
670
- dot.className = 'status-dot disconnected';
298
+ dot.className = 'w-2 h-2 rounded-full bg-red-400';
671
299
  statusText.textContent = 'Reconnecting...';
672
300
  es.close();
673
301
  setTimeout(connectSSE, 3000);