sensorium-mcp 3.1.2 → 3.1.3-board.10

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 (625) hide show
  1. package/Install-Sensorium.ps1 +257 -43
  2. package/README.md +2 -0
  3. package/dist/board/api/api.js +84 -0
  4. package/dist/board/api/api.test.ts +23 -0
  5. package/dist/board/api/client.js +113 -0
  6. package/dist/board/components/BottomNav.js +32 -0
  7. package/dist/board/components/Card.js +78 -0
  8. package/dist/board/components/Combobox.js +79 -0
  9. package/dist/board/components/CommentComposer.js +29 -0
  10. package/dist/board/components/CommentList.js +42 -0
  11. package/dist/board/components/DirTreePicker.js +128 -0
  12. package/dist/board/components/Dropdown.js +67 -0
  13. package/dist/board/components/Lane.js +47 -0
  14. package/dist/board/components/PriorityChip.js +20 -0
  15. package/dist/board/components/ProfileSummary.js +89 -0
  16. package/dist/board/components/StateBanner.js +24 -0
  17. package/dist/board/components/StatusChip.js +26 -0
  18. package/dist/board/components/rateLimit.js +32 -0
  19. package/dist/board/components/rateLimit.test.ts +16 -0
  20. package/dist/board/components/time.js +14 -0
  21. package/dist/board/config.js +56 -0
  22. package/dist/board/index.html +18 -0
  23. package/dist/board/main.js +37 -0
  24. package/dist/board/mock/api.mock.js +491 -0
  25. package/dist/board/mock/api.mock.test.ts +460 -0
  26. package/dist/board/mock/fixtures.js +512 -0
  27. package/dist/board/schema/policy.js +261 -0
  28. package/dist/board/state/recur.js +24 -0
  29. package/dist/board/state/recur.test.ts +24 -0
  30. package/dist/board/state/useBoard.js +161 -0
  31. package/dist/board/state/useBuilder.js +357 -0
  32. package/dist/board/state/useBuilder.test.ts +468 -0
  33. package/dist/board/state/useCard.js +193 -0
  34. package/dist/board/state/useCard.test.ts +435 -0
  35. package/dist/board/state/useDirBrowser.js +23 -0
  36. package/dist/board/styles/board.css +2885 -0
  37. package/dist/board/styles/tokens.css +72 -0
  38. package/dist/board/vendor/vue.esm-browser.js +9 -0
  39. package/dist/board/views/App.js +61 -0
  40. package/dist/board/views/BoardView.js +153 -0
  41. package/dist/board/views/BuilderView.js +582 -0
  42. package/dist/board/views/CardView.js +382 -0
  43. package/dist/board/views/SettingsView.js +152 -0
  44. package/dist/config/agent-settings.d.ts +11 -0
  45. package/dist/config/agent-settings.d.ts.map +1 -1
  46. package/dist/config/agent-settings.js +79 -0
  47. package/dist/config/agent-settings.js.map +1 -1
  48. package/dist/config/detail-grant.d.ts +7 -16
  49. package/dist/config/detail-grant.d.ts.map +1 -1
  50. package/dist/config/detail-grant.js +12 -35
  51. package/dist/config/detail-grant.js.map +1 -1
  52. package/dist/config/index.d.ts +2 -0
  53. package/dist/config/index.d.ts.map +1 -1
  54. package/dist/config/index.js +17 -0
  55. package/dist/config/index.js.map +1 -1
  56. package/dist/config/mcp-settings.d.ts +7 -1
  57. package/dist/config/mcp-settings.d.ts.map +1 -1
  58. package/dist/config/mcp-settings.js +9 -0
  59. package/dist/config/mcp-settings.js.map +1 -1
  60. package/dist/config/misc-settings.d.ts +22 -1
  61. package/dist/config/misc-settings.d.ts.map +1 -1
  62. package/dist/config/misc-settings.js +93 -3
  63. package/dist/config/misc-settings.js.map +1 -1
  64. package/dist/config/operator-grant.d.ts +9 -0
  65. package/dist/config/operator-grant.d.ts.map +1 -0
  66. package/dist/config/operator-grant.js +24 -0
  67. package/dist/config/operator-grant.js.map +1 -0
  68. package/dist/config/voice-grant.d.ts +10 -0
  69. package/dist/config/voice-grant.d.ts.map +1 -0
  70. package/dist/config/voice-grant.js +18 -0
  71. package/dist/config/voice-grant.js.map +1 -0
  72. package/dist/dashboard/board-static.d.ts +22 -0
  73. package/dist/dashboard/board-static.d.ts.map +1 -0
  74. package/dist/dashboard/board-static.js +130 -0
  75. package/dist/dashboard/board-static.js.map +1 -0
  76. package/dist/dashboard/presets.d.ts +1 -1
  77. package/dist/dashboard/presets.d.ts.map +1 -1
  78. package/dist/dashboard/presets.js +1 -1
  79. package/dist/dashboard/presets.js.map +1 -1
  80. package/dist/dashboard/routes/agent-templates.d.ts.map +1 -1
  81. package/dist/dashboard/routes/agent-templates.js +6 -9
  82. package/dist/dashboard/routes/agent-templates.js.map +1 -1
  83. package/dist/dashboard/routes/board-body.d.ts +8 -0
  84. package/dist/dashboard/routes/board-body.d.ts.map +1 -0
  85. package/dist/dashboard/routes/board-body.js +20 -0
  86. package/dist/dashboard/routes/board-body.js.map +1 -0
  87. package/dist/dashboard/routes/board-dir-listing.d.ts +70 -0
  88. package/dist/dashboard/routes/board-dir-listing.d.ts.map +1 -0
  89. package/dist/dashboard/routes/board-dir-listing.js +192 -0
  90. package/dist/dashboard/routes/board-dir-listing.js.map +1 -0
  91. package/dist/dashboard/routes/board-lane-groups.d.ts +6 -0
  92. package/dist/dashboard/routes/board-lane-groups.d.ts.map +1 -0
  93. package/dist/dashboard/routes/board-lane-groups.js +52 -0
  94. package/dist/dashboard/routes/board-lane-groups.js.map +1 -0
  95. package/dist/dashboard/routes/board-policy.d.ts +224 -0
  96. package/dist/dashboard/routes/board-policy.d.ts.map +1 -0
  97. package/dist/dashboard/routes/board-policy.js +214 -0
  98. package/dist/dashboard/routes/board-policy.js.map +1 -0
  99. package/dist/dashboard/routes/board-profile-parse.d.ts +32 -0
  100. package/dist/dashboard/routes/board-profile-parse.d.ts.map +1 -0
  101. package/dist/dashboard/routes/board-profile-parse.js +338 -0
  102. package/dist/dashboard/routes/board-profile-parse.js.map +1 -0
  103. package/dist/dashboard/routes/board.d.ts +90 -0
  104. package/dist/dashboard/routes/board.d.ts.map +1 -0
  105. package/dist/dashboard/routes/board.js +721 -0
  106. package/dist/dashboard/routes/board.js.map +1 -0
  107. package/dist/dashboard/routes/codex.d.ts +14 -0
  108. package/dist/dashboard/routes/codex.d.ts.map +1 -0
  109. package/dist/dashboard/routes/codex.js +92 -0
  110. package/dist/dashboard/routes/codex.js.map +1 -0
  111. package/dist/dashboard/routes/prompts.d.ts +2 -2
  112. package/dist/dashboard/routes/prompts.d.ts.map +1 -1
  113. package/dist/dashboard/routes/prompts.js +2 -2
  114. package/dist/dashboard/routes/prompts.js.map +1 -1
  115. package/dist/dashboard/routes/settings.d.ts +2 -0
  116. package/dist/dashboard/routes/settings.d.ts.map +1 -1
  117. package/dist/dashboard/routes/settings.js +24 -1
  118. package/dist/dashboard/routes/settings.js.map +1 -1
  119. package/dist/dashboard/routes/skills.d.ts +7 -1
  120. package/dist/dashboard/routes/skills.d.ts.map +1 -1
  121. package/dist/dashboard/routes/skills.js +6 -6
  122. package/dist/dashboard/routes/skills.js.map +1 -1
  123. package/dist/dashboard/routes/snapshots.d.ts +2 -1
  124. package/dist/dashboard/routes/snapshots.d.ts.map +1 -1
  125. package/dist/dashboard/routes/snapshots.js +24 -18
  126. package/dist/dashboard/routes/snapshots.js.map +1 -1
  127. package/dist/dashboard/routes/templates.js +5 -5
  128. package/dist/dashboard/routes/templates.js.map +1 -1
  129. package/dist/dashboard/routes/threads-create.d.ts +17 -0
  130. package/dist/dashboard/routes/threads-create.d.ts.map +1 -1
  131. package/dist/dashboard/routes/threads-create.js +32 -10
  132. package/dist/dashboard/routes/threads-create.js.map +1 -1
  133. package/dist/dashboard/routes/threads-helpers.d.ts +11 -2
  134. package/dist/dashboard/routes/threads-helpers.d.ts.map +1 -1
  135. package/dist/dashboard/routes/threads-helpers.js +20 -3
  136. package/dist/dashboard/routes/threads-helpers.js.map +1 -1
  137. package/dist/dashboard/routes/threads-read.d.ts +16 -4
  138. package/dist/dashboard/routes/threads-read.d.ts.map +1 -1
  139. package/dist/dashboard/routes/threads-read.js +61 -55
  140. package/dist/dashboard/routes/threads-read.js.map +1 -1
  141. package/dist/dashboard/routes/threads.d.ts +2 -2
  142. package/dist/dashboard/routes/threads.d.ts.map +1 -1
  143. package/dist/dashboard/routes/threads.js +143 -29
  144. package/dist/dashboard/routes/threads.js.map +1 -1
  145. package/dist/dashboard/routes/types.d.ts +6 -0
  146. package/dist/dashboard/routes/types.d.ts.map +1 -1
  147. package/dist/dashboard/routes/types.js.map +1 -1
  148. package/dist/dashboard/routes.d.ts +2 -2
  149. package/dist/dashboard/routes.d.ts.map +1 -1
  150. package/dist/dashboard/routes.js +85 -7
  151. package/dist/dashboard/routes.js.map +1 -1
  152. package/dist/dashboard/spa.html +15 -12
  153. package/dist/data/board/board-schema.d.ts +29 -0
  154. package/dist/data/board/board-schema.d.ts.map +1 -0
  155. package/dist/data/board/board-schema.js +202 -0
  156. package/dist/data/board/board-schema.js.map +1 -0
  157. package/dist/data/board/board-types.d.ts +175 -0
  158. package/dist/data/board/board-types.d.ts.map +1 -0
  159. package/dist/data/board/board-types.js +9 -0
  160. package/dist/data/board/board-types.js.map +1 -0
  161. package/dist/data/board/card.repository.d.ts +137 -0
  162. package/dist/data/board/card.repository.d.ts.map +1 -0
  163. package/dist/data/board/card.repository.js +470 -0
  164. package/dist/data/board/card.repository.js.map +1 -0
  165. package/dist/data/board/comment.repository.d.ts +14 -0
  166. package/dist/data/board/comment.repository.d.ts.map +1 -0
  167. package/dist/data/board/comment.repository.js +42 -0
  168. package/dist/data/board/comment.repository.js.map +1 -0
  169. package/dist/data/board/lane-group.repository.d.ts +19 -0
  170. package/dist/data/board/lane-group.repository.d.ts.map +1 -0
  171. package/dist/data/board/lane-group.repository.js +66 -0
  172. package/dist/data/board/lane-group.repository.js.map +1 -0
  173. package/dist/data/board/profile-defaults.d.ts +17 -0
  174. package/dist/data/board/profile-defaults.d.ts.map +1 -0
  175. package/dist/data/board/profile-defaults.js +107 -0
  176. package/dist/data/board/profile-defaults.js.map +1 -0
  177. package/dist/data/interfaces.d.ts +1 -0
  178. package/dist/data/interfaces.d.ts.map +1 -1
  179. package/dist/data/memory/bootstrap.d.ts +1 -8
  180. package/dist/data/memory/bootstrap.d.ts.map +1 -1
  181. package/dist/data/memory/bootstrap.js +27 -37
  182. package/dist/data/memory/bootstrap.js.map +1 -1
  183. package/dist/data/memory/consolidation.d.ts +9 -31
  184. package/dist/data/memory/consolidation.d.ts.map +1 -1
  185. package/dist/data/memory/consolidation.js +22 -32
  186. package/dist/data/memory/consolidation.js.map +1 -1
  187. package/dist/data/memory/db-maintenance.d.ts +54 -0
  188. package/dist/data/memory/db-maintenance.d.ts.map +1 -0
  189. package/dist/data/memory/db-maintenance.js +81 -0
  190. package/dist/data/memory/db-maintenance.js.map +1 -0
  191. package/dist/data/memory/episodes.d.ts +2 -1
  192. package/dist/data/memory/episodes.d.ts.map +1 -1
  193. package/dist/data/memory/episodes.js +5 -1
  194. package/dist/data/memory/episodes.js.map +1 -1
  195. package/dist/data/memory/index.d.ts +0 -4
  196. package/dist/data/memory/index.d.ts.map +1 -1
  197. package/dist/data/memory/index.js +0 -4
  198. package/dist/data/memory/index.js.map +1 -1
  199. package/dist/data/memory/key-knowledge.d.ts +51 -0
  200. package/dist/data/memory/key-knowledge.d.ts.map +1 -0
  201. package/dist/data/memory/key-knowledge.js +128 -0
  202. package/dist/data/memory/key-knowledge.js.map +1 -0
  203. package/dist/data/memory/migration-runner.d.ts +1 -1
  204. package/dist/data/memory/migration-runner.d.ts.map +1 -1
  205. package/dist/data/memory/migration-runner.js +407 -1
  206. package/dist/data/memory/migration-runner.js.map +1 -1
  207. package/dist/data/memory/narrative-lint.d.ts +2 -2
  208. package/dist/data/memory/narrative-lint.d.ts.map +1 -1
  209. package/dist/data/memory/narrative-lint.js +23 -13
  210. package/dist/data/memory/narrative-lint.js.map +1 -1
  211. package/dist/data/memory/narrative-resolutions.d.ts +9 -2
  212. package/dist/data/memory/narrative-resolutions.d.ts.map +1 -1
  213. package/dist/data/memory/narrative-resolutions.js +9 -8
  214. package/dist/data/memory/narrative-resolutions.js.map +1 -1
  215. package/dist/data/memory/narrative-sources.d.ts +1 -1
  216. package/dist/data/memory/narrative-sources.d.ts.map +1 -1
  217. package/dist/data/memory/narrative-sources.js +8 -3
  218. package/dist/data/memory/narrative-sources.js.map +1 -1
  219. package/dist/data/memory/narrative-store.d.ts +24 -0
  220. package/dist/data/memory/narrative-store.d.ts.map +1 -1
  221. package/dist/data/memory/narrative-store.js +73 -35
  222. package/dist/data/memory/narrative-store.js.map +1 -1
  223. package/dist/data/memory/narrative.d.ts.map +1 -1
  224. package/dist/data/memory/narrative.js +47 -29
  225. package/dist/data/memory/narrative.js.map +1 -1
  226. package/dist/data/memory/note-archival.d.ts +1 -1
  227. package/dist/data/memory/note-archival.d.ts.map +1 -1
  228. package/dist/data/memory/note-archival.js +7 -3
  229. package/dist/data/memory/note-archival.js.map +1 -1
  230. package/dist/data/memory/note-embeddings.d.ts +7 -0
  231. package/dist/data/memory/note-embeddings.d.ts.map +1 -1
  232. package/dist/data/memory/note-embeddings.js +6 -2
  233. package/dist/data/memory/note-embeddings.js.map +1 -1
  234. package/dist/data/memory/passive-notice.repository.d.ts +70 -0
  235. package/dist/data/memory/passive-notice.repository.d.ts.map +1 -0
  236. package/dist/data/memory/passive-notice.repository.js +85 -0
  237. package/dist/data/memory/passive-notice.repository.js.map +1 -0
  238. package/dist/data/memory/schema-ddl.d.ts +120 -1
  239. package/dist/data/memory/schema-ddl.d.ts.map +1 -1
  240. package/dist/data/memory/schema-ddl.js +171 -4
  241. package/dist/data/memory/schema-ddl.js.map +1 -1
  242. package/dist/data/memory/schema-guard.d.ts.map +1 -1
  243. package/dist/data/memory/schema-guard.js +5 -41
  244. package/dist/data/memory/schema-guard.js.map +1 -1
  245. package/dist/data/memory/schema.d.ts.map +1 -1
  246. package/dist/data/memory/schema.js +10 -34
  247. package/dist/data/memory/schema.js.map +1 -1
  248. package/dist/data/memory/semantic-notes.d.ts +13 -8
  249. package/dist/data/memory/semantic-notes.d.ts.map +1 -1
  250. package/dist/data/memory/semantic-notes.js +12 -17
  251. package/dist/data/memory/semantic-notes.js.map +1 -1
  252. package/dist/data/memory/thread-registry.d.ts +330 -15
  253. package/dist/data/memory/thread-registry.d.ts.map +1 -1
  254. package/dist/data/memory/thread-registry.js +523 -67
  255. package/dist/data/memory/thread-registry.js.map +1 -1
  256. package/dist/data/memory/utils.d.ts +6 -0
  257. package/dist/data/memory/utils.d.ts.map +1 -1
  258. package/dist/data/memory/utils.js +13 -0
  259. package/dist/data/memory/utils.js.map +1 -1
  260. package/dist/data/memory/worker-lifecycle.repository.d.ts +308 -0
  261. package/dist/data/memory/worker-lifecycle.repository.d.ts.map +1 -0
  262. package/dist/data/memory/worker-lifecycle.repository.js +428 -0
  263. package/dist/data/memory/worker-lifecycle.repository.js.map +1 -0
  264. package/dist/data/optional.d.ts +16 -0
  265. package/dist/data/optional.d.ts.map +1 -0
  266. package/dist/data/optional.js +47 -0
  267. package/dist/data/optional.js.map +1 -0
  268. package/dist/index.js +156 -24
  269. package/dist/index.js.map +1 -1
  270. package/dist/integrations/openai/speech.d.ts.map +1 -1
  271. package/dist/integrations/openai/speech.js +52 -19
  272. package/dist/integrations/openai/speech.js.map +1 -1
  273. package/dist/integrations/openai/video.d.ts +1 -1
  274. package/dist/integrations/openai/video.d.ts.map +1 -1
  275. package/dist/integrations/openai/video.js +13 -8
  276. package/dist/integrations/openai/video.js.map +1 -1
  277. package/dist/integrations/telegram/types.d.ts +11 -0
  278. package/dist/integrations/telegram/types.d.ts.map +1 -1
  279. package/dist/lib/http-retry.d.ts +91 -0
  280. package/dist/lib/http-retry.d.ts.map +1 -0
  281. package/dist/lib/http-retry.js +177 -0
  282. package/dist/lib/http-retry.js.map +1 -0
  283. package/dist/lib/mcp-http-port.d.ts +12 -0
  284. package/dist/lib/mcp-http-port.d.ts.map +1 -0
  285. package/dist/lib/mcp-http-port.js +19 -0
  286. package/dist/lib/mcp-http-port.js.map +1 -0
  287. package/dist/lib/paths.d.ts +29 -4
  288. package/dist/lib/paths.d.ts.map +1 -1
  289. package/dist/lib/paths.js +31 -4
  290. package/dist/lib/paths.js.map +1 -1
  291. package/dist/lib/types.d.ts +2 -0
  292. package/dist/lib/types.d.ts.map +1 -1
  293. package/dist/lib/usage-metering/pricing.js +1 -1
  294. package/dist/lib/usage-metering/pricing.js.map +1 -1
  295. package/dist/lib/usage-metering/sink.d.ts +4 -0
  296. package/dist/lib/usage-metering/sink.d.ts.map +1 -1
  297. package/dist/lib/usage-metering/sink.js +6 -4
  298. package/dist/lib/usage-metering/sink.js.map +1 -1
  299. package/dist/lib/utils.d.ts +31 -0
  300. package/dist/lib/utils.d.ts.map +1 -1
  301. package/dist/lib/utils.js +49 -0
  302. package/dist/lib/utils.js.map +1 -1
  303. package/dist/llm/prompts/narrative.d.ts.map +1 -1
  304. package/dist/llm/prompts/narrative.js +27 -86
  305. package/dist/llm/prompts/narrative.js.map +1 -1
  306. package/dist/log-parsing/log-events.d.ts +38 -0
  307. package/dist/log-parsing/log-events.d.ts.map +1 -0
  308. package/dist/log-parsing/log-events.js +2 -0
  309. package/dist/log-parsing/log-events.js.map +1 -0
  310. package/dist/log-parsing/parser-registry.d.ts +4 -0
  311. package/dist/log-parsing/parser-registry.d.ts.map +1 -0
  312. package/dist/log-parsing/parser-registry.js +18 -0
  313. package/dist/log-parsing/parser-registry.js.map +1 -0
  314. package/dist/log-parsing/parsers/claude.d.ts +6 -0
  315. package/dist/log-parsing/parsers/claude.d.ts.map +1 -0
  316. package/dist/log-parsing/parsers/claude.js +100 -0
  317. package/dist/log-parsing/parsers/claude.js.map +1 -0
  318. package/dist/log-parsing/parsers/codex.d.ts +6 -0
  319. package/dist/log-parsing/parsers/codex.d.ts.map +1 -0
  320. package/dist/log-parsing/parsers/codex.js +116 -0
  321. package/dist/log-parsing/parsers/codex.js.map +1 -0
  322. package/dist/log-parsing/parsers/copilot.d.ts +6 -0
  323. package/dist/log-parsing/parsers/copilot.d.ts.map +1 -0
  324. package/dist/log-parsing/parsers/copilot.js +65 -0
  325. package/dist/log-parsing/parsers/copilot.js.map +1 -0
  326. package/dist/log-parsing/parsers/json-lines.d.ts +9 -0
  327. package/dist/log-parsing/parsers/json-lines.d.ts.map +1 -0
  328. package/dist/log-parsing/parsers/json-lines.js +25 -0
  329. package/dist/log-parsing/parsers/json-lines.js.map +1 -0
  330. package/dist/log-parsing/render.d.ts +33 -0
  331. package/dist/log-parsing/render.d.ts.map +1 -0
  332. package/dist/log-parsing/render.js +113 -0
  333. package/dist/log-parsing/render.js.map +1 -0
  334. package/dist/log-parsing/text.d.ts +8 -0
  335. package/dist/log-parsing/text.d.ts.map +1 -0
  336. package/dist/log-parsing/text.js +20 -0
  337. package/dist/log-parsing/text.js.map +1 -0
  338. package/dist/server/http-server.d.ts +8 -1
  339. package/dist/server/http-server.d.ts.map +1 -1
  340. package/dist/server/http-server.js +41 -19
  341. package/dist/server/http-server.js.map +1 -1
  342. package/dist/server/port-holder.d.ts +94 -0
  343. package/dist/server/port-holder.d.ts.map +1 -0
  344. package/dist/server/port-holder.js +122 -0
  345. package/dist/server/port-holder.js.map +1 -0
  346. package/dist/services/agent-spawn.service.d.ts +50 -5
  347. package/dist/services/agent-spawn.service.d.ts.map +1 -1
  348. package/dist/services/agent-spawn.service.js +59 -66
  349. package/dist/services/agent-spawn.service.js.map +1 -1
  350. package/dist/services/background-runner.d.ts +0 -1
  351. package/dist/services/background-runner.d.ts.map +1 -1
  352. package/dist/services/background-runner.js +0 -58
  353. package/dist/services/background-runner.js.map +1 -1
  354. package/dist/services/board/board-signals.d.ts +45 -0
  355. package/dist/services/board/board-signals.d.ts.map +1 -0
  356. package/dist/services/board/board-signals.js +170 -0
  357. package/dist/services/board/board-signals.js.map +1 -0
  358. package/dist/services/board/card-briefing.d.ts +24 -0
  359. package/dist/services/board/card-briefing.d.ts.map +1 -0
  360. package/dist/services/board/card-briefing.js +132 -0
  361. package/dist/services/board/card-briefing.js.map +1 -0
  362. package/dist/services/board/card-diagnostics.d.ts +25 -0
  363. package/dist/services/board/card-diagnostics.d.ts.map +1 -0
  364. package/dist/services/board/card-diagnostics.js +50 -0
  365. package/dist/services/board/card-diagnostics.js.map +1 -0
  366. package/dist/services/board/live-root-thread.d.ts +8 -0
  367. package/dist/services/board/live-root-thread.d.ts.map +1 -0
  368. package/dist/services/board/live-root-thread.js +2 -0
  369. package/dist/services/board/live-root-thread.js.map +1 -0
  370. package/dist/services/board/orchestrator.service.d.ts +119 -0
  371. package/dist/services/board/orchestrator.service.d.ts.map +1 -0
  372. package/dist/services/board/orchestrator.service.js +387 -0
  373. package/dist/services/board/orchestrator.service.js.map +1 -0
  374. package/dist/services/board/release-worker.d.ts +43 -0
  375. package/dist/services/board/release-worker.d.ts.map +1 -0
  376. package/dist/services/board/release-worker.js +96 -0
  377. package/dist/services/board/release-worker.js.map +1 -0
  378. package/dist/services/board/report-capture.d.ts +94 -0
  379. package/dist/services/board/report-capture.d.ts.map +1 -0
  380. package/dist/services/board/report-capture.js +398 -0
  381. package/dist/services/board/report-capture.js.map +1 -0
  382. package/dist/services/board/worker-spawn.d.ts +89 -0
  383. package/dist/services/board/worker-spawn.d.ts.map +1 -0
  384. package/dist/services/board/worker-spawn.js +177 -0
  385. package/dist/services/board/worker-spawn.js.map +1 -0
  386. package/dist/services/board/worktree.d.ts +45 -0
  387. package/dist/services/board/worktree.d.ts.map +1 -0
  388. package/dist/services/board/worktree.js +183 -0
  389. package/dist/services/board/worktree.js.map +1 -0
  390. package/dist/services/broker-client.d.ts +84 -2
  391. package/dist/services/broker-client.d.ts.map +1 -1
  392. package/dist/services/broker-client.js +72 -6
  393. package/dist/services/broker-client.js.map +1 -1
  394. package/dist/services/claude-spawn.service.d.ts +5 -0
  395. package/dist/services/claude-spawn.service.d.ts.map +1 -1
  396. package/dist/services/claude-spawn.service.js +37 -21
  397. package/dist/services/claude-spawn.service.js.map +1 -1
  398. package/dist/services/codex-spawn.service.d.ts +8 -3
  399. package/dist/services/codex-spawn.service.d.ts.map +1 -1
  400. package/dist/services/codex-spawn.service.js +84 -67
  401. package/dist/services/codex-spawn.service.js.map +1 -1
  402. package/dist/services/consolidation.service.d.ts.map +1 -1
  403. package/dist/services/consolidation.service.js +5 -49
  404. package/dist/services/consolidation.service.js.map +1 -1
  405. package/dist/services/copilot-spawn.service.d.ts +1 -1
  406. package/dist/services/copilot-spawn.service.d.ts.map +1 -1
  407. package/dist/services/copilot-spawn.service.js +10 -5
  408. package/dist/services/copilot-spawn.service.js.map +1 -1
  409. package/dist/services/daily-session.d.ts +24 -11
  410. package/dist/services/daily-session.d.ts.map +1 -1
  411. package/dist/services/daily-session.js +113 -33
  412. package/dist/services/daily-session.js.map +1 -1
  413. package/dist/services/death-alert.service.d.ts +55 -0
  414. package/dist/services/death-alert.service.d.ts.map +1 -0
  415. package/dist/services/death-alert.service.js +64 -0
  416. package/dist/services/death-alert.service.js.map +1 -0
  417. package/dist/services/dispatcher/broker.d.ts +66 -0
  418. package/dist/services/dispatcher/broker.d.ts.map +1 -1
  419. package/dist/services/dispatcher/broker.js +60 -52
  420. package/dist/services/dispatcher/broker.js.map +1 -1
  421. package/dist/services/dispatcher/poller.d.ts.map +1 -1
  422. package/dist/services/dispatcher/poller.js +31 -24
  423. package/dist/services/dispatcher/poller.js.map +1 -1
  424. package/dist/services/http-retry.d.ts +1 -90
  425. package/dist/services/http-retry.d.ts.map +1 -1
  426. package/dist/services/http-retry.js +1 -176
  427. package/dist/services/http-retry.js.map +1 -1
  428. package/dist/services/intent.d.ts +15 -1
  429. package/dist/services/intent.d.ts.map +1 -1
  430. package/dist/services/intent.js +39 -27
  431. package/dist/services/intent.js.map +1 -1
  432. package/dist/services/keeper.service.d.ts +76 -3
  433. package/dist/services/keeper.service.d.ts.map +1 -1
  434. package/dist/services/keeper.service.js +112 -35
  435. package/dist/services/keeper.service.js.map +1 -1
  436. package/dist/services/mcp-config.service.d.ts.map +1 -1
  437. package/dist/services/mcp-config.service.js +14 -1
  438. package/dist/services/mcp-config.service.js.map +1 -1
  439. package/dist/services/memory-briefing.service.d.ts +1 -1
  440. package/dist/services/memory-briefing.service.d.ts.map +1 -1
  441. package/dist/services/memory-briefing.service.js +28 -73
  442. package/dist/services/memory-briefing.service.js.map +1 -1
  443. package/dist/services/passive-notice.service.d.ts +56 -0
  444. package/dist/services/passive-notice.service.d.ts.map +1 -0
  445. package/dist/services/passive-notice.service.js +92 -0
  446. package/dist/services/passive-notice.service.js.map +1 -0
  447. package/dist/services/predefined-prompts.d.ts +11 -0
  448. package/dist/services/predefined-prompts.d.ts.map +1 -0
  449. package/dist/services/predefined-prompts.js +25 -0
  450. package/dist/services/predefined-prompts.js.map +1 -0
  451. package/dist/services/process.service.d.ts +111 -27
  452. package/dist/services/process.service.d.ts.map +1 -1
  453. package/dist/services/process.service.js +245 -173
  454. package/dist/services/process.service.js.map +1 -1
  455. package/dist/services/spawn-common.d.ts +281 -5
  456. package/dist/services/spawn-common.d.ts.map +1 -1
  457. package/dist/services/spawn-common.js +884 -188
  458. package/dist/services/spawn-common.js.map +1 -1
  459. package/dist/services/spawn-exit-watcher.d.ts +45 -35
  460. package/dist/services/spawn-exit-watcher.d.ts.map +1 -1
  461. package/dist/services/spawn-exit-watcher.js +120 -100
  462. package/dist/services/spawn-exit-watcher.js.map +1 -1
  463. package/dist/services/telegram.d.ts +31 -8
  464. package/dist/services/telegram.d.ts.map +1 -1
  465. package/dist/services/telegram.js +58 -26
  466. package/dist/services/telegram.js.map +1 -1
  467. package/dist/services/thread-health.service.d.ts +8 -0
  468. package/dist/services/thread-health.service.d.ts.map +1 -1
  469. package/dist/services/thread-health.service.js +14 -10
  470. package/dist/services/thread-health.service.js.map +1 -1
  471. package/dist/services/thread-lifecycle.service.d.ts +17 -1
  472. package/dist/services/thread-lifecycle.service.d.ts.map +1 -1
  473. package/dist/services/thread-lifecycle.service.js +47 -6
  474. package/dist/services/thread-lifecycle.service.js.map +1 -1
  475. package/dist/services/thread-log-reader.d.ts +81 -0
  476. package/dist/services/thread-log-reader.d.ts.map +1 -0
  477. package/dist/services/thread-log-reader.js +141 -0
  478. package/dist/services/thread-log-reader.js.map +1 -0
  479. package/dist/services/thread-purge.service.d.ts +200 -0
  480. package/dist/services/thread-purge.service.d.ts.map +1 -0
  481. package/dist/services/thread-purge.service.js +644 -0
  482. package/dist/services/thread-purge.service.js.map +1 -0
  483. package/dist/services/topic.service.d.ts +44 -2
  484. package/dist/services/topic.service.d.ts.map +1 -1
  485. package/dist/services/topic.service.js +74 -13
  486. package/dist/services/topic.service.js.map +1 -1
  487. package/dist/services/usage/usage-inbox-notifier.d.ts +50 -0
  488. package/dist/services/usage/usage-inbox-notifier.d.ts.map +1 -0
  489. package/dist/services/usage/usage-inbox-notifier.js +118 -0
  490. package/dist/services/usage/usage-inbox-notifier.js.map +1 -0
  491. package/dist/services/usage/usage-poller.service.d.ts +41 -0
  492. package/dist/services/usage/usage-poller.service.d.ts.map +1 -0
  493. package/dist/services/usage/usage-poller.service.js +67 -0
  494. package/dist/services/usage/usage-poller.service.js.map +1 -0
  495. package/dist/services/usage/usage-snapshot-provider.d.ts +40 -0
  496. package/dist/services/usage/usage-snapshot-provider.d.ts.map +1 -0
  497. package/dist/services/usage/usage-snapshot-provider.js +89 -0
  498. package/dist/services/usage/usage-snapshot-provider.js.map +1 -0
  499. package/dist/services/usage/usage-types.d.ts +28 -0
  500. package/dist/services/usage/usage-types.d.ts.map +1 -0
  501. package/dist/services/usage/usage-types.js +14 -0
  502. package/dist/services/usage/usage-types.js.map +1 -0
  503. package/dist/services/worker-birth.d.ts +154 -0
  504. package/dist/services/worker-birth.d.ts.map +1 -0
  505. package/dist/services/worker-birth.js +274 -0
  506. package/dist/services/worker-birth.js.map +1 -0
  507. package/dist/services/worker-cleanup.service.d.ts +242 -19
  508. package/dist/services/worker-cleanup.service.d.ts.map +1 -1
  509. package/dist/services/worker-cleanup.service.js +893 -355
  510. package/dist/services/worker-cleanup.service.js.map +1 -1
  511. package/dist/services/worker-lifecycle-executor.d.ts +42 -0
  512. package/dist/services/worker-lifecycle-executor.d.ts.map +1 -0
  513. package/dist/services/worker-lifecycle-executor.js +63 -0
  514. package/dist/services/worker-lifecycle-executor.js.map +1 -0
  515. package/dist/services/worker-single-use.d.ts +92 -0
  516. package/dist/services/worker-single-use.d.ts.map +1 -0
  517. package/dist/services/worker-single-use.js +155 -0
  518. package/dist/services/worker-single-use.js.map +1 -0
  519. package/dist/sessions/mcp-registry.d.ts +33 -2
  520. package/dist/sessions/mcp-registry.d.ts.map +1 -1
  521. package/dist/sessions/mcp-registry.js +153 -30
  522. package/dist/sessions/mcp-registry.js.map +1 -1
  523. package/dist/test-bootstrap.d.ts +19 -12
  524. package/dist/test-bootstrap.d.ts.map +1 -1
  525. package/dist/test-bootstrap.js +69 -21
  526. package/dist/test-bootstrap.js.map +1 -1
  527. package/dist/test-tripwire.test-support.d.ts +75 -0
  528. package/dist/test-tripwire.test-support.d.ts.map +1 -0
  529. package/dist/test-tripwire.test-support.js +353 -0
  530. package/dist/test-tripwire.test-support.js.map +1 -0
  531. package/dist/tools/defs/memory-defs.d.ts.map +1 -1
  532. package/dist/tools/defs/memory-defs.js +12 -4
  533. package/dist/tools/defs/memory-defs.js.map +1 -1
  534. package/dist/tools/defs/session-defs.d.ts.map +1 -1
  535. package/dist/tools/defs/session-defs.js +26 -10
  536. package/dist/tools/defs/session-defs.js.map +1 -1
  537. package/dist/tools/defs/utility-defs.js +1 -1
  538. package/dist/tools/defs/utility-defs.js.map +1 -1
  539. package/dist/tools/delegate-tool.d.ts +81 -1
  540. package/dist/tools/delegate-tool.d.ts.map +1 -1
  541. package/dist/tools/delegate-tool.js +840 -219
  542. package/dist/tools/delegate-tool.js.map +1 -1
  543. package/dist/tools/memory-tools.d.ts.map +1 -1
  544. package/dist/tools/memory-tools.js +66 -9
  545. package/dist/tools/memory-tools.js.map +1 -1
  546. package/dist/tools/response-builders.d.ts.map +1 -1
  547. package/dist/tools/response-builders.js +12 -8
  548. package/dist/tools/response-builders.js.map +1 -1
  549. package/dist/tools/session-tools.d.ts.map +1 -1
  550. package/dist/tools/session-tools.js +3 -32
  551. package/dist/tools/session-tools.js.map +1 -1
  552. package/dist/tools/skill-tools.js +1 -1
  553. package/dist/tools/skill-tools.js.map +1 -1
  554. package/dist/tools/start-session-tool.d.ts.map +1 -1
  555. package/dist/tools/start-session-tool.js +66 -20
  556. package/dist/tools/start-session-tool.js.map +1 -1
  557. package/dist/tools/utility-tools.d.ts.map +1 -1
  558. package/dist/tools/utility-tools.js +38 -3
  559. package/dist/tools/utility-tools.js.map +1 -1
  560. package/dist/tools/wait/auto-forward.d.ts.map +1 -1
  561. package/dist/tools/wait/auto-forward.js +8 -3
  562. package/dist/tools/wait/auto-forward.js.map +1 -1
  563. package/dist/tools/wait/consolidation-strategy.d.ts +42 -0
  564. package/dist/tools/wait/consolidation-strategy.d.ts.map +1 -0
  565. package/dist/tools/wait/consolidation-strategy.js +50 -0
  566. package/dist/tools/wait/consolidation-strategy.js.map +1 -0
  567. package/dist/tools/wait/drive-handler.d.ts +5 -7
  568. package/dist/tools/wait/drive-handler.d.ts.map +1 -1
  569. package/dist/tools/wait/drive-handler.js +45 -59
  570. package/dist/tools/wait/drive-handler.js.map +1 -1
  571. package/dist/tools/wait/media-processor.d.ts.map +1 -1
  572. package/dist/tools/wait/media-processor.js +8 -4
  573. package/dist/tools/wait/media-processor.js.map +1 -1
  574. package/dist/tools/wait/message-delivery.d.ts +9 -6
  575. package/dist/tools/wait/message-delivery.d.ts.map +1 -1
  576. package/dist/tools/wait/message-delivery.js +77 -58
  577. package/dist/tools/wait/message-delivery.js.map +1 -1
  578. package/dist/tools/wait/message-processing.d.ts.map +1 -1
  579. package/dist/tools/wait/message-processing.js +2 -1
  580. package/dist/tools/wait/message-processing.js.map +1 -1
  581. package/dist/tools/wait/poll-loop.d.ts.map +1 -1
  582. package/dist/tools/wait/poll-loop.js +339 -239
  583. package/dist/tools/wait/poll-loop.js.map +1 -1
  584. package/package.json +4 -3
  585. package/templates/azure-devops-securevault.default.md +20 -6
  586. package/templates/board-quality-checklist.default.md +121 -0
  587. package/templates/buildless-vue-preview.default.md +47 -0
  588. package/templates/expert-code-review.default.md +12 -0
  589. package/templates/handoff.default.md +41 -18
  590. package/templates/increment-pr-pipeline.default.md +79 -0
  591. package/templates/swarm.default.md +1 -0
  592. package/templates/worker-autonomous.default.md +1 -0
  593. package/templates/worker-delegate.default.md +1 -0
  594. package/dist/dashboard/log-parser.d.ts +0 -65
  595. package/dist/dashboard/log-parser.d.ts.map +0 -1
  596. package/dist/dashboard/log-parser.js +0 -219
  597. package/dist/dashboard/log-parser.js.map +0 -1
  598. package/dist/data/memory/reflection-dedup.d.ts +0 -17
  599. package/dist/data/memory/reflection-dedup.d.ts.map +0 -1
  600. package/dist/data/memory/reflection-dedup.js +0 -55
  601. package/dist/data/memory/reflection-dedup.js.map +0 -1
  602. package/dist/data/memory/reflection-gates.d.ts +0 -40
  603. package/dist/data/memory/reflection-gates.d.ts.map +0 -1
  604. package/dist/data/memory/reflection-gates.js +0 -220
  605. package/dist/data/memory/reflection-gates.js.map +0 -1
  606. package/dist/data/memory/reflection-sources.d.ts +0 -13
  607. package/dist/data/memory/reflection-sources.d.ts.map +0 -1
  608. package/dist/data/memory/reflection-sources.js +0 -115
  609. package/dist/data/memory/reflection-sources.js.map +0 -1
  610. package/dist/data/memory/reflection.d.ts +0 -43
  611. package/dist/data/memory/reflection.d.ts.map +0 -1
  612. package/dist/data/memory/reflection.js +0 -329
  613. package/dist/data/memory/reflection.js.map +0 -1
  614. package/dist/llm/prompts/reflection.d.ts +0 -6
  615. package/dist/llm/prompts/reflection.d.ts.map +0 -1
  616. package/dist/llm/prompts/reflection.js +0 -77
  617. package/dist/llm/prompts/reflection.js.map +0 -1
  618. package/dist/services/memory-pruning.service.d.ts +0 -12
  619. package/dist/services/memory-pruning.service.d.ts.map +0 -1
  620. package/dist/services/memory-pruning.service.js +0 -179
  621. package/dist/services/memory-pruning.service.js.map +0 -1
  622. package/templates/daily-review.default.md +0 -26
  623. package/templates/fire-and-forget.default.md +0 -76
  624. package/templates/offload.default.md +0 -33
  625. package/templates/sensorium-repair.default.md +0 -114
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Card tile — ✅ EDITABLE. Pure: `card` + `laneName` in, `open` out.
3
+ * Dispatch design: floating dark card — title, then chip row with priority,
4
+ * live worker pulse / blocked / archived. A decision_needed card gets a distinct
5
+ * badge plus a waiting-age cue so a stalled decision is obvious at a glance.
6
+ */
7
+
8
+ import StatusChip from "./StatusChip.js";
9
+ import PriorityChip from "./PriorityChip.js";
10
+ import { proactiveLimitKind, providerLabel, retryLabel } from "./rateLimit.js";
11
+ import { humanMins, minsSince } from "./time.js";
12
+
13
+ export default {
14
+ name: "Card",
15
+ components: { StatusChip, PriorityChip },
16
+ props: {
17
+ card: { type: Object, required: true },
18
+ laneName: { type: Function, default: () => "Ungrouped" },
19
+ limitedProviders: { type: Array, default: () => [] },
20
+ },
21
+ emits: ["open"],
22
+ setup(props, { emit }) {
23
+ function elapsed() {
24
+ if (!props.card.startedAt) return "";
25
+ return humanMins(minsSince(props.card.startedAt));
26
+ }
27
+ function rlText() {
28
+ const p = providerLabel(props.card.rateLimitProvider);
29
+ return (p ? p + " · " : "") + retryLabel(props.card);
30
+ }
31
+ function proactiveProvider() {
32
+ return providerLabel(props.card.profile?.agentType);
33
+ }
34
+ function proactiveKind() {
35
+ return proactiveLimitKind(props.card, props.limitedProviders);
36
+ }
37
+ /** How long this card has been waiting on the operator. */
38
+ function waiting() {
39
+ const c = props.card;
40
+ if (c.status !== "decision_needed") return null;
41
+ const mins = minsSince(c.updatedAt || c.finishedAt || c.startedAt || c.createdAt);
42
+ return { text: humanMins(mins), stale: mins >= 480 };
43
+ }
44
+ return { emit, elapsed, proactiveKind, proactiveProvider, rlText, waiting };
45
+ },
46
+ template: `
47
+ <article class="card" role="listitem" tabindex="0"
48
+ :class="{ 'card--decision': card.status === 'decision_needed' }"
49
+ @click="emit('open', card)"
50
+ @keydown.enter="emit('open', card)">
51
+ <div v-if="waiting()" class="card__decision" :class="{ 'is-stale': waiting().stale }">
52
+ <span class="card__decision-label">
53
+ <span class="dot dot--pulse"></span>NEEDS YOU
54
+ </span>
55
+ <span class="card__decision-age">waiting {{ waiting().text }}</span>
56
+ </div>
57
+ <h3 class="card__title">{{ card.title }}</h3>
58
+ <p v-if="card.description" class="card__desc">{{ card.description }}</p>
59
+ <div v-if="card.status === 'rate_limited'" class="card__rl">
60
+ <svg viewBox="0 0 12 12" width="11" height="11" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" aria-hidden="true"><circle cx="6" cy="6" r="4.6"></circle><path d="M6 3.6V6l1.8 1.2"></path></svg>
61
+ <span>rate limited · {{ rlText() }}</span>
62
+ </div>
63
+ <div v-if="proactiveKind()" class="card__rl">
64
+ <StatusChip status="rate_limited" :kind="proactiveKind()" />
65
+ <span v-if="proactiveProvider()">{{ proactiveProvider() }}</span>
66
+ </div>
67
+ <div class="card__foot">
68
+ <PriorityChip :priority="card.priority" />
69
+ <span v-if="card.status === 'in_progress'" class="chip chip--live">
70
+ <span class="dot dot--pulse"></span>working<template v-if="card.startedAt"> · {{ elapsed() }}</template>
71
+ </span>
72
+ <span v-else-if="card.blockedReason" class="chip chip--warn">blocked</span>
73
+ <span v-if="card.archivedAt" class="chip chip--muted">archived</span>
74
+ <span class="card__lane">{{ laneName(card.laneGroupId) }}</span>
75
+ </div>
76
+ </article>
77
+ `,
78
+ };
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Combobox — ✅ EDITABLE. Editable dropdown: free-text input + curated
3
+ * suggestions (optionally grouped). Pure: modelValue in, update:modelValue out.
4
+ * `groups`: [{ label|null, options: string[] }] — label null renders flat.
5
+ * The user may pick a suggestion OR type any value.
6
+ */
7
+
8
+ import { computed, onMounted, onUnmounted, ref } from "../vendor/vue.esm-browser.js";
9
+
10
+ export default {
11
+ name: "Combobox",
12
+ props: {
13
+ modelValue: { type: String, default: "" },
14
+ groups: { type: Array, default: () => [] },
15
+ placeholder: { type: String, default: "" },
16
+ disabled: { type: Boolean, default: false },
17
+ },
18
+ emits: ["update:modelValue"],
19
+ setup(props, { emit }) {
20
+ const open = ref(false);
21
+ const rootEl = ref(null);
22
+ const filtered = computed(() => {
23
+ const q = (props.modelValue || "").trim().toLowerCase();
24
+ const out = [];
25
+ for (const g of props.groups) {
26
+ const opts = q ? g.options.filter((o) => o.toLowerCase().includes(q)) : g.options;
27
+ if (opts.length) out.push({ label: g.label || null, options: opts });
28
+ }
29
+ return out;
30
+ });
31
+ function onInput(e) {
32
+ emit("update:modelValue", e.target.value);
33
+ open.value = true;
34
+ }
35
+ function pick(o) {
36
+ emit("update:modelValue", o);
37
+ open.value = false;
38
+ }
39
+ function onDoc(e) {
40
+ if (rootEl.value && !rootEl.value.contains(e.target)) open.value = false;
41
+ }
42
+ function onKey(e) {
43
+ if (e.key === "Escape") open.value = false;
44
+ }
45
+ onMounted(() => {
46
+ document.addEventListener("click", onDoc, true);
47
+ document.addEventListener("keydown", onKey);
48
+ });
49
+ onUnmounted(() => {
50
+ document.removeEventListener("click", onDoc, true);
51
+ document.removeEventListener("keydown", onKey);
52
+ });
53
+ return { open, rootEl, filtered, onInput, pick };
54
+ },
55
+ template: `
56
+ <div class="dropdown combobox" ref="rootEl">
57
+ <div class="combobox__wrap">
58
+ <input class="input combobox__input" :value="modelValue" :placeholder="placeholder"
59
+ role="combobox" :aria-expanded="open" aria-autocomplete="list" :disabled="disabled"
60
+ @input="onInput" @focus="open = true" />
61
+ <button type="button" class="combobox__toggle" :class="{ 'is-open': open }" :disabled="disabled"
62
+ aria-label="Show suggestions" tabindex="-1" @click="open = !open">▾</button>
63
+ </div>
64
+ <ul v-if="open && filtered.length" class="dropdown__menu" role="listbox">
65
+ <template v-for="g in filtered" :key="g.label || '_'">
66
+ <li v-if="g.label" class="combobox__group" role="presentation">{{ g.label }}</li>
67
+ <li v-for="o in g.options" :key="o">
68
+ <button type="button" class="dropdown__opt" role="option"
69
+ :aria-selected="o === modelValue" :class="{ 'is-selected': o === modelValue }"
70
+ @click="pick(o)">
71
+ <span class="dropdown__optlabel">{{ o }}</span>
72
+ <span v-if="o === modelValue" class="dropdown__check">✓</span>
73
+ </button>
74
+ </li>
75
+ </template>
76
+ </ul>
77
+ </div>
78
+ `,
79
+ };
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Comment composer — ✅ EDITABLE. Pure: emits `submit(text)`; clears on send.
3
+ */
4
+
5
+ import { ref } from "../vendor/vue.esm-browser.js";
6
+
7
+ export default {
8
+ name: "CommentComposer",
9
+ props: {
10
+ busy: { type: Boolean, default: false },
11
+ },
12
+ emits: ["submit"],
13
+ setup(props, { emit }) {
14
+ const text = ref("");
15
+ function send() {
16
+ const t = text.value.trim();
17
+ if (!t) return;
18
+ emit("submit", t);
19
+ text.value = "";
20
+ }
21
+ return { text, send };
22
+ },
23
+ template: `
24
+ <form class="composer" @submit.prevent="send">
25
+ <textarea class="input input--area" v-model="text" rows="2" placeholder="Add a comment…"></textarea>
26
+ <button class="btn btn--primary" type="submit" :disabled="!text.trim() || busy">{{ busy ? 'Sending…' : 'Comment' }}</button>
27
+ </form>
28
+ `,
29
+ };
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Comment history — ✅ EDITABLE. Pure: `comments` in.
3
+ * Dispatch design: activity feed — avatar tile + floating bubble per entry.
4
+ */
5
+
6
+ const AVATARS = { worker: "⚙", operator: "Y", board: "◆" };
7
+
8
+ export default {
9
+ name: "CommentList",
10
+ props: { comments: { type: Array, default: () => [] } },
11
+ setup() {
12
+ function when(iso) {
13
+ try {
14
+ return new Date(iso).toLocaleString();
15
+ } catch {
16
+ return iso;
17
+ }
18
+ }
19
+ function avatar(author) {
20
+ return AVATARS[author] || "•";
21
+ }
22
+ return { when, avatar };
23
+ },
24
+ template: `
25
+ <ul class="comments">
26
+ <li v-for="c in comments" :key="c.id" class="comment" :class="'comment--' + c.author">
27
+ <span class="comment__avatar" aria-hidden="true">{{ avatar(c.author) }}</span>
28
+ <div class="comment__bubble">
29
+ <div class="comment__meta">
30
+ <span class="comment__author">{{ c.author }}</span>
31
+ <time class="comment__time">{{ when(c.createdAt) }}</time>
32
+ </div>
33
+ <p class="comment__body">{{ c.content }}</p>
34
+ </div>
35
+ </li>
36
+ <li v-if="!comments.length" class="comment comment--empty">
37
+ <span class="comment__empty-title">No activity yet</span>
38
+ <span class="comment__empty-note">Worker updates, decisions and your notes all land here.</span>
39
+ </li>
40
+ </ul>
41
+ `,
42
+ };
@@ -0,0 +1,128 @@
1
+ /**
2
+ * DirTreePicker — ✅ EDITABLE. Modal browser for picking an absolute directory
3
+ * on the HOST machine (the browser's own dialog only yields a folder name).
4
+ *
5
+ * Pure presentational: it never fetches. One filesystem level is loaded at a
6
+ * time through the async `load(path)` prop (path "" → volume roots), which the
7
+ * parent wires to the data seam (state/useDirBrowser.js → api.listDir). The
8
+ * chosen absolute path leaves via `select`.
9
+ */
10
+
11
+ import { computed, ref, watch, onMounted, onUnmounted } from "../vendor/vue.esm-browser.js";
12
+
13
+ export default {
14
+ name: "DirTreePicker",
15
+ props: {
16
+ open: { type: Boolean, default: false },
17
+ /** async (path: string) => { path, parent, entries: [{ name, path }] } */
18
+ load: { type: Function, required: true },
19
+ value: { type: String, default: "" },
20
+ recent: { type: Array, default: () => [] },
21
+ },
22
+ emits: ["close", "select"],
23
+ setup(props, { emit }) {
24
+ // Breadcrumb chain of entered folders ([] = roots view).
25
+ const stack = ref([]);
26
+ const items = ref([]); // entries of the current level
27
+ const loading = ref(false);
28
+ const error = ref("");
29
+
30
+ const current = computed(() => stack.value[stack.value.length - 1] || null);
31
+
32
+ // Sequence guard: rapid breadcrumb/row clicks fire overlapping loads; only
33
+ // the newest may write, so a slow earlier response can't overwrite the level.
34
+ let loadSeq = 0;
35
+ async function loadLevel(path) {
36
+ const seq = ++loadSeq;
37
+ loading.value = true;
38
+ error.value = "";
39
+ try {
40
+ const listing = await props.load(path || "");
41
+ if (seq !== loadSeq) return;
42
+ items.value = (listing && listing.entries) || [];
43
+ } catch (e) {
44
+ if (seq !== loadSeq) return;
45
+ error.value = (e && e.message) || String(e);
46
+ items.value = [];
47
+ } finally {
48
+ if (seq === loadSeq) loading.value = false;
49
+ }
50
+ }
51
+
52
+ watch(
53
+ () => props.open,
54
+ (open) => {
55
+ if (!open) return;
56
+ stack.value = []; // always reopen at the roots
57
+ loadLevel("");
58
+ },
59
+ );
60
+
61
+ function enter(node) {
62
+ stack.value = [...stack.value, node];
63
+ loadLevel(node.path);
64
+ }
65
+ function jumpTo(i) {
66
+ // i = -1 → roots view; i = index in stack → that folder.
67
+ stack.value = stack.value.slice(0, i + 1);
68
+ loadLevel(i < 0 ? "" : stack.value[i].path);
69
+ }
70
+ function confirm() {
71
+ if (current.value) emit("select", current.value.path);
72
+ }
73
+ function onKey(e) {
74
+ if (e.key === "Escape" && props.open) emit("close");
75
+ }
76
+ onMounted(() => document.addEventListener("keydown", onKey));
77
+ onUnmounted(() => document.removeEventListener("keydown", onKey));
78
+
79
+ return { stack, current, items, loading, error, enter, jumpTo, confirm };
80
+ },
81
+ template: `
82
+ <div v-if="open" class="dtp-overlay" @click.self="$emit('close')">
83
+ <div class="dtp" role="dialog" aria-modal="true" aria-label="Choose working directory">
84
+ <header class="dtp__head">
85
+ <h3 class="dtp__title">Choose working directory</h3>
86
+ <button type="button" class="btn btn--ghost dtp__close" aria-label="Close" @click="$emit('close')">✕</button>
87
+ </header>
88
+
89
+ <nav class="dtp__crumbs" aria-label="Current location">
90
+ <button type="button" class="dtp__crumb dtp__crumb--root" :class="{ 'is-here': !current }" @click="jumpTo(-1)">HOST</button>
91
+ <template v-for="(n, i) in stack" :key="n.path">
92
+ <span class="dtp__crumbsep" aria-hidden="true">›</span>
93
+ <button type="button" class="dtp__crumb" :class="{ 'is-here': i === stack.length - 1 }" @click="jumpTo(i)">{{ n.name }}</button>
94
+ </template>
95
+ </nav>
96
+
97
+ <ul class="dtp__list" role="listbox">
98
+ <li v-if="loading" class="dtp__empty">Loading…</li>
99
+ <li v-else-if="error" class="dtp__empty dtp__empty--error">{{ error }}</li>
100
+ <template v-else>
101
+ <li v-for="n in items" :key="n.path">
102
+ <button type="button" class="dtp__row" @click="enter(n)">
103
+ <svg class="dtp__rowicon" viewBox="0 0 16 16" width="15" height="15" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M1.8 4.5c0-.7.6-1.3 1.3-1.3h3l1.4 1.5h5.4c.7 0 1.3.6 1.3 1.3v6c0 .7-.6 1.3-1.3 1.3H3.1c-.7 0-1.3-.6-1.3-1.3v-7.5z"/></svg>
104
+ <span class="dtp__rowname">{{ n.name }}</span>
105
+ <span class="dtp__rowchev" aria-hidden="true">›</span>
106
+ </button>
107
+ </li>
108
+ <li v-if="!items.length" class="dtp__empty">No subfolders</li>
109
+ </template>
110
+ </ul>
111
+
112
+ <div v-if="recent.length" class="dtp__recent">
113
+ <span class="dtp__recentlabel mono-label">RECENT</span>
114
+ <button v-for="p in recent" :key="p" type="button" class="dtp__recentchip"
115
+ :class="{ 'is-on': value === p }" @click="$emit('select', p)">{{ p }}</button>
116
+ </div>
117
+
118
+ <footer class="dtp__foot">
119
+ <span class="dtp__path" :class="{ 'is-empty': !current }">{{ current ? current.path : 'Navigate to a folder' }}</span>
120
+ <div class="dtp__actions">
121
+ <button type="button" class="btn btn--ghost" @click="$emit('close')">Cancel</button>
122
+ <button type="button" class="btn btn--primary" :disabled="!current" @click="confirm">Use this folder</button>
123
+ </div>
124
+ </footer>
125
+ </div>
126
+ </div>
127
+ `,
128
+ };
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Custom dropdown — ✅ EDITABLE. Replaces native <select> (default styles are
3
+ * not overridable cross-platform). Pure: modelValue in, update:modelValue out.
4
+ * Options: array of strings or {value,label}.
5
+ */
6
+
7
+ import { computed, onMounted, onUnmounted, ref } from "../vendor/vue.esm-browser.js";
8
+
9
+ export default {
10
+ name: "Dropdown",
11
+ props: {
12
+ modelValue: { default: null },
13
+ options: { type: Array, default: () => [] },
14
+ placeholder: { type: String, default: "Select…" },
15
+ disabled: { type: Boolean, default: false },
16
+ },
17
+ emits: ["update:modelValue"],
18
+ setup(props, { emit }) {
19
+ const open = ref(false);
20
+ const rootEl = ref(null);
21
+ const norm = computed(() =>
22
+ props.options.map((o) => (o && typeof o === "object" ? o : { value: o, label: String(o) }))
23
+ );
24
+ const current = computed(() => norm.value.find((o) => o.value === props.modelValue));
25
+ function pick(o) {
26
+ emit("update:modelValue", o.value);
27
+ open.value = false;
28
+ }
29
+ function onDoc(e) {
30
+ if (rootEl.value && !rootEl.value.contains(e.target)) open.value = false;
31
+ }
32
+ function onKey(e) {
33
+ if (e.key === "Escape") open.value = false;
34
+ }
35
+ onMounted(() => {
36
+ document.addEventListener("click", onDoc, true);
37
+ document.addEventListener("keydown", onKey);
38
+ });
39
+ onUnmounted(() => {
40
+ document.removeEventListener("click", onDoc, true);
41
+ document.removeEventListener("keydown", onKey);
42
+ });
43
+ return { open, rootEl, norm, current, pick };
44
+ },
45
+ template: `
46
+ <div class="dropdown" ref="rootEl">
47
+ <button type="button" class="dropdown__btn" :class="{ 'is-open': open }" :disabled="disabled"
48
+ aria-haspopup="listbox" :aria-expanded="open" @click="open = !open">
49
+ <span class="dropdown__value" :class="{ 'is-placeholder': !current }">
50
+ {{ current ? current.label : placeholder }}
51
+ </span>
52
+ <span class="dropdown__chevron" aria-hidden="true">▾</span>
53
+ </button>
54
+ <ul v-if="open" class="dropdown__menu" role="listbox">
55
+ <li v-for="o in norm" :key="String(o.value)">
56
+ <button type="button" class="dropdown__opt" role="option"
57
+ :aria-selected="o.value === modelValue"
58
+ :class="{ 'is-selected': o.value === modelValue }"
59
+ @click="pick(o)">
60
+ <span class="dropdown__optlabel">{{ o.label }}</span>
61
+ <span v-if="o.value === modelValue" class="dropdown__check">✓</span>
62
+ </button>
63
+ </li>
64
+ </ul>
65
+ </div>
66
+ `,
67
+ };
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Kanban column — ✅ EDITABLE. Pure: title/status/cards/laneName in, `open` out.
3
+ * Dispatch design: transparent column, colored status dot + name + count pill.
4
+ */
5
+
6
+ import Card from "./Card.js";
7
+ import { computed } from "../vendor/vue.esm-browser.js";
8
+
9
+ export default {
10
+ name: "Lane",
11
+ components: { Card },
12
+ props: {
13
+ title: { type: String, required: true },
14
+ status: { type: String, required: true },
15
+ cards: { type: Array, default: () => [] },
16
+ laneName: { type: Function, default: () => "Ungrouped" },
17
+ limitedProviders: { type: Array, default: () => [] },
18
+ },
19
+ emits: ["open"],
20
+ setup(props, { emit }) {
21
+ const rateLimited = computed(() => props.cards.filter((c) => c.status === "rate_limited").length);
22
+ return { emit, rateLimited };
23
+ },
24
+ template: `
25
+ <section class="lane" :class="'lane--' + status" role="listitem">
26
+ <header class="lane__head">
27
+ <span class="lane__dot"></span>
28
+ <h2 class="lane__title">{{ title }}</h2>
29
+ <span v-if="rateLimited" class="lane__rl" :title="rateLimited + ' card(s) waiting on a provider rate limit'">
30
+ <svg viewBox="0 0 12 12" width="10" height="10" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" aria-hidden="true"><circle cx="6" cy="6" r="4.6"></circle><path d="M6 3.6V6l1.8 1.2"></path></svg>{{ rateLimited }}
31
+ </span>
32
+ <span class="lane__count">{{ cards.length }}</span>
33
+ </header>
34
+ <div class="lane__body">
35
+ <Card
36
+ v-for="c in cards"
37
+ :key="c.cardId"
38
+ :card="c"
39
+ :lane-name="laneName"
40
+ :limited-providers="limitedProviders"
41
+ @open="emit('open', $event)"
42
+ />
43
+ <div v-if="!cards.length" class="lane__empty" aria-hidden="true"></div>
44
+ </div>
45
+ </section>
46
+ `,
47
+ };
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Priority chip — ✅ EDITABLE. Pure: `priority` (int) in.
3
+ * Higher int = higher urgency (matches dispatch ORDER BY priority DESC).
4
+ * Labels are P0–P3 with **P0 = most urgent**, so the label is the INVERSE of the
5
+ * stored integer: int 3 → P0, int 0 → P3. Label + colour only — the integer and
6
+ * every sort/filter path stay untouched.
7
+ */
8
+
9
+ /** Indexed by the stored integer. */
10
+ const LABELS = ["P3", "P2", "P1", "P0"];
11
+
12
+ export default {
13
+ name: "PriorityChip",
14
+ props: { priority: { type: Number, default: 0 } },
15
+ setup(props) {
16
+ const level = () => Math.max(0, Math.min(3, props.priority));
17
+ return { level, LABELS };
18
+ },
19
+ template: `<span class="chip chip--prio" :class="'chip--prio-' + level()">{{ LABELS[level()] }}</span>`,
20
+ };
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Execution-plan summary — ✅ EDITABLE. Pure: `profile` in.
3
+ *
4
+ * Reads the real seam shape (api/contract.d.ts ExecutionProfile plus the fields
5
+ * state/useBuilder.js writes: model, autonomy, prDraft, prProvider). Renders the
6
+ * plan as labelled rows — only rows with data appear, so the panel never invents
7
+ * a plan the card does not have. Phases are NOT part of ExecutionProfile and are
8
+ * not persisted anywhere yet, so they are deliberately absent.
9
+ */
10
+
11
+ import { computed } from "../vendor/vue.esm-browser.js";
12
+
13
+ const CI_LABELS = { github: "GitHub Actions", azure: "Azure Pipelines", none: "none" };
14
+
15
+ /** "on"/"off" flag pills for a group of booleans. */
16
+ function flags(profile, spec) {
17
+ const out = [];
18
+ for (const [key, label] of spec) {
19
+ if (profile[key] === undefined) continue;
20
+ out.push({ label, on: !!profile[key] });
21
+ }
22
+ return out;
23
+ }
24
+
25
+ export default {
26
+ name: "ProfileSummary",
27
+ props: { profile: { type: Object, default: () => ({}) } },
28
+ setup(props) {
29
+ const p = computed(() => props.profile || {});
30
+
31
+ const agent = computed(() => {
32
+ const out = [];
33
+ if (p.value.agentType) out.push(p.value.agentType);
34
+ if (p.value.model) out.push(p.value.model);
35
+ return out.join(" · ");
36
+ });
37
+
38
+ const rows = computed(() => {
39
+ const v = p.value;
40
+ const list = [];
41
+ if (agent.value) list.push({ key: "agent", label: "AGENT", text: agent.value, strong: true });
42
+ if (v.autonomy) list.push({ key: "autonomy", label: "AUTONOMY", text: v.autonomy });
43
+ if (v.repository) list.push({ key: "repo", label: "REPOSITORY", text: v.repository, mono: true });
44
+
45
+ const code = flags(v, [["worktree", "worktree"], ["createBranch", "branch"], ["push", "push"]]);
46
+ if (code.length) list.push({ key: "code", label: "CODE", flags: code });
47
+
48
+ const verify = flags(v, [["runTests", "tests"], ["build", "build"]]);
49
+ if (v.ciCheck && v.ciCheck !== "none") verify.push({ label: CI_LABELS[v.ciCheck] || v.ciCheck, on: true });
50
+ if (verify.length) list.push({ key: "verify", label: "VERIFY", flags: verify });
51
+
52
+ const review = flags(v, [["expertReview", "expert review"], ["operatorReview", "operator review"]]);
53
+ if (v.reviewAgentType) review.push({ label: "by " + v.reviewAgentType, on: true });
54
+ if (review.length) list.push({ key: "review", label: "REVIEW", flags: review });
55
+
56
+ if (v.openPr !== undefined) {
57
+ const pr = [{ label: v.openPr ? "open PR" : "no PR", on: !!v.openPr }];
58
+ if (v.openPr) {
59
+ if (v.prDraft !== undefined) pr.push({ label: v.prDraft ? "draft" : "ready for review", on: true });
60
+ if (v.prProvider) pr.push({ label: v.prProvider, on: true });
61
+ }
62
+ list.push({ key: "pr", label: "PULL REQUEST", flags: pr });
63
+ }
64
+
65
+ if (Array.isArray(v.skills) && v.skills.length) {
66
+ list.push({ key: "skills", label: "SKILLS", flags: v.skills.map((s) => ({ label: s, on: true })) });
67
+ }
68
+ return list;
69
+ });
70
+
71
+ return { rows };
72
+ },
73
+ template: `
74
+ <div class="plan">
75
+ <dl v-if="rows.length" class="plan__rows">
76
+ <div v-for="r in rows" :key="r.key" class="plan__row">
77
+ <dt class="plan__label">{{ r.label }}</dt>
78
+ <dd class="plan__value">
79
+ <span v-if="r.text" class="plan__text" :class="{ 'plan__text--strong': r.strong, 'plan__text--mono': r.mono }">{{ r.text }}</span>
80
+ <span v-if="r.flags" class="plan__flags">
81
+ <span v-for="(f, i) in r.flags" :key="i" class="plan__flag" :class="f.on ? 'is-on' : 'is-off'">{{ f.label }}</span>
82
+ </span>
83
+ </dd>
84
+ </div>
85
+ </dl>
86
+ <p v-else class="plan__empty">No execution plan on this card — the worker runs the lane default.</p>
87
+ </div>
88
+ `,
89
+ };
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Loading / error banner — ✅ EDITABLE. Pure: `loading`/`error` in, `retry` out.
3
+ */
4
+
5
+ export default {
6
+ name: "StateBanner",
7
+ props: {
8
+ loading: { type: Boolean, default: false },
9
+ error: { type: [String, null], default: null },
10
+ retryable: { type: Boolean, default: true },
11
+ },
12
+ emits: ["retry"],
13
+ setup(props, { emit }) {
14
+ return { emit };
15
+ },
16
+ template: `
17
+ <div v-if="error" class="notice notice--error">
18
+ <svg viewBox="0 0 16 16" width="15" height="15" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" aria-hidden="true" style="flex:none"><circle cx="8" cy="8" r="6.2"></circle><path d="M8 4.8V8.6M8 11.2v.1"></path></svg>
19
+ <span class="notice__msg">{{ error }}</span>
20
+ <button v-if="retryable" class="btn btn--ghost btn--sm" type="button" @click="emit('retry')">Retry</button>
21
+ </div>
22
+ <div v-else-if="loading" class="notice notice--info"><span class="spinner" aria-hidden="true"></span>Loading…</div>
23
+ `,
24
+ };
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Status chip — ✅ EDITABLE. Pure: `status` in.
3
+ * Dispatch design: tinted pill in the status accent color.
4
+ */
5
+
6
+ const LABELS = {
7
+ backlog: "Backlog",
8
+ in_progress: "In progress",
9
+ decision_needed: "Decision needed",
10
+ blocked: "Blocked",
11
+ done: "Done",
12
+ rate_limited: "Rate limited",
13
+ usage_quota_exceeded: "usage quota exceeded",
14
+ };
15
+
16
+ export default {
17
+ name: "StatusChip",
18
+ props: {
19
+ status: { type: String, required: true },
20
+ kind: { type: String, default: "" },
21
+ },
22
+ setup(props) {
23
+ return { LABELS };
24
+ },
25
+ template: `<span class="chip chip--status" :class="'chip--status-' + status">{{ LABELS[kind] || LABELS[status] || kind || status }}</span>`,
26
+ };