@crouton-kit/crouter 0.3.27 → 0.3.29

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 (343) hide show
  1. package/dist/build-root.js +4 -2
  2. package/dist/builtin-memory/crouter-development/marketplaces.md +7 -6
  3. package/dist/builtin-memory/crouter-development/personas/base-prompt.md +1 -1
  4. package/dist/builtin-memory/crouter-development/personas/orchestrator-prompt.md +1 -1
  5. package/dist/builtin-memory/crouter-development/personas.md +1 -1
  6. package/dist/builtin-memory/crouter-development/plugins.md +20 -18
  7. package/dist/builtin-memory/design.md +1 -1
  8. package/dist/builtin-memory/development.md +1 -1
  9. package/dist/builtin-memory/internal/INDEX.md +1 -1
  10. package/dist/builtin-memory/internal/examples/INDEX.md +1 -1
  11. package/dist/builtin-memory/internal/examples/imessage-assistant.md +2 -2
  12. package/dist/builtin-memory/internal/nodes-and-canvas.md +1 -1
  13. package/dist/builtin-memory/internal/storage-tiers.md +1 -1
  14. package/dist/builtin-memory/planning.md +1 -1
  15. package/dist/builtin-memory/spec.md +6 -4
  16. package/dist/builtin-personas/orchestration-kernel.md +4 -5
  17. package/dist/builtin-personas/runtime-base.md +8 -4
  18. package/dist/builtin-personas/spec/PERSONA.md +8 -4
  19. package/dist/builtin-personas/spec/orchestrator.md +5 -3
  20. package/dist/builtin-personas/spec/requirements/PERSONA.md +10 -0
  21. package/dist/builtin-views/canvas/core.mjs +586 -0
  22. package/dist/builtin-views/canvas/text.mjs +58 -0
  23. package/dist/builtin-views/canvas/tui.mjs +165 -0
  24. package/dist/builtin-views/canvas/web.jsx +120 -0
  25. package/dist/builtin-views/git-pr/core.mjs +673 -0
  26. package/dist/builtin-views/git-pr/text.mjs +84 -0
  27. package/dist/builtin-views/git-pr/tui.mjs +302 -0
  28. package/dist/builtin-views/git-pr/web.jsx +216 -0
  29. package/dist/builtin-views/inbox/_lib/render.mjs +1 -3
  30. package/dist/builtin-views/inbox/core.mjs +1273 -0
  31. package/dist/builtin-views/inbox/text.mjs +73 -0
  32. package/dist/builtin-views/inbox/tui.mjs +312 -0
  33. package/dist/builtin-views/inbox/web.jsx +188 -0
  34. package/dist/builtin-views/linkedin/core.mjs +906 -0
  35. package/dist/builtin-views/linkedin/text.mjs +69 -0
  36. package/dist/builtin-views/linkedin/tui.mjs +427 -0
  37. package/dist/builtin-views/linkedin/web.jsx +206 -0
  38. package/dist/builtin-views/workspace-sidebar/core.mjs +621 -0
  39. package/dist/builtin-views/workspace-sidebar/text.mjs +53 -0
  40. package/dist/builtin-views/workspace-sidebar/tui.mjs +142 -0
  41. package/dist/builtin-views/workspace-sidebar/web.jsx +109 -0
  42. package/dist/cli.js +3 -3
  43. package/dist/clients/attach/__tests__/action-parity.test.js +48 -0
  44. package/dist/clients/attach/__tests__/clipboard-image.test.js +76 -0
  45. package/dist/clients/attach/__tests__/editor-newline.test.js +57 -0
  46. package/dist/clients/attach/__tests__/git-info.test.js +31 -0
  47. package/dist/clients/attach/__tests__/onrequest-wired.test.js +20 -0
  48. package/dist/clients/attach/__tests__/reconnect-giveup.test.js +30 -0
  49. package/dist/clients/attach/__tests__/slash-quit-copy.test.js +42 -0
  50. package/dist/clients/attach/__tests__/titled-editor.test.d.ts +1 -0
  51. package/dist/clients/attach/__tests__/titled-editor.test.js +39 -0
  52. package/dist/clients/attach/attach-cmd.js +445 -41
  53. package/dist/clients/attach/auth-pickers.d.ts +9 -0
  54. package/dist/clients/attach/auth-pickers.js +194 -0
  55. package/dist/clients/attach/canvas-panels.d.ts +12 -0
  56. package/dist/clients/attach/canvas-panels.js +78 -0
  57. package/dist/clients/attach/chat-view.d.ts +27 -2
  58. package/dist/clients/attach/chat-view.js +98 -9
  59. package/dist/clients/attach/clipboard-image.d.ts +47 -8
  60. package/dist/clients/attach/clipboard-image.js +150 -26
  61. package/dist/clients/attach/clipboard-text.d.ts +3 -0
  62. package/dist/clients/attach/clipboard-text.js +39 -0
  63. package/dist/clients/attach/config-load.d.ts +54 -7
  64. package/dist/clients/attach/config-load.js +99 -3
  65. package/dist/clients/attach/context-message.d.ts +12 -0
  66. package/dist/clients/attach/context-message.js +72 -0
  67. package/dist/clients/attach/git-info.d.ts +20 -0
  68. package/dist/clients/attach/git-info.js +44 -0
  69. package/dist/clients/attach/graph-overlay.d.ts +43 -0
  70. package/dist/clients/attach/graph-overlay.js +306 -0
  71. package/dist/clients/attach/input-controller.d.ts +81 -13
  72. package/dist/clients/attach/input-controller.js +307 -67
  73. package/dist/clients/attach/pickers.d.ts +58 -0
  74. package/dist/clients/attach/pickers.js +171 -0
  75. package/dist/clients/attach/slash-commands.d.ts +44 -1
  76. package/dist/clients/attach/slash-commands.js +250 -27
  77. package/dist/clients/attach/titled-editor.d.ts +33 -0
  78. package/dist/clients/attach/titled-editor.js +84 -0
  79. package/dist/clients/attach/view-socket.d.ts +37 -2
  80. package/dist/clients/attach/view-socket.js +131 -7
  81. package/dist/clients/web/dev-server.d.ts +7 -0
  82. package/dist/clients/web/dev-server.js +59 -0
  83. package/dist/clients/web/events.d.ts +14 -0
  84. package/dist/clients/web/events.js +151 -0
  85. package/dist/clients/web/server.d.ts +18 -0
  86. package/dist/clients/web/server.js +450 -0
  87. package/dist/clients/web/web-cmd.d.ts +2 -0
  88. package/dist/clients/web/web-cmd.js +120 -0
  89. package/dist/commands/canvas.js +1 -2
  90. package/dist/commands/chord.js +1 -1
  91. package/dist/commands/dashboard.js +5 -1
  92. package/dist/commands/human/prompts.js +3 -3
  93. package/dist/commands/human/queue.d.ts +17 -0
  94. package/dist/commands/human/queue.js +111 -4
  95. package/dist/commands/memory/__tests__/lint-schema.test.js +27 -4
  96. package/dist/commands/memory/lint.d.ts +5 -4
  97. package/dist/commands/memory/lint.js +23 -7
  98. package/dist/commands/memory/read.js +2 -2
  99. package/dist/commands/memory/shared.d.ts +7 -1
  100. package/dist/commands/memory/shared.js +18 -3
  101. package/dist/commands/memory/write.js +20 -7
  102. package/dist/commands/memory.js +4 -4
  103. package/dist/commands/node.d.ts +1 -1
  104. package/dist/commands/node.js +64 -65
  105. package/dist/commands/pkg.js +1 -2
  106. package/dist/commands/revive.js +11 -3
  107. package/dist/commands/sys/feedback.d.ts +1 -0
  108. package/dist/commands/sys/feedback.js +163 -0
  109. package/dist/commands/sys/sync.d.ts +1 -0
  110. package/dist/commands/sys/sync.js +187 -0
  111. package/dist/commands/sys.js +4 -2
  112. package/dist/commands/view-cycle.js +2 -2
  113. package/dist/commands/view-list.js +8 -8
  114. package/dist/commands/view-new.js +21 -17
  115. package/dist/commands/view-pick.js +1 -1
  116. package/dist/commands/view-run.js +35 -14
  117. package/dist/commands/view.js +8 -6
  118. package/dist/commands/workspace.d.ts +2 -0
  119. package/dist/commands/workspace.js +161 -0
  120. package/dist/core/__tests__/broker-double-spawn.test.d.ts +1 -0
  121. package/dist/core/__tests__/broker-double-spawn.test.js +143 -0
  122. package/dist/core/__tests__/broker-fork-seam.test.d.ts +1 -0
  123. package/dist/core/__tests__/broker-fork-seam.test.js +102 -0
  124. package/dist/core/__tests__/broker-sdk-wiring.test.js +2 -0
  125. package/dist/core/__tests__/broker-snapshot-history.test.d.ts +1 -0
  126. package/dist/core/__tests__/broker-snapshot-history.test.js +105 -0
  127. package/dist/core/__tests__/child-death-wake.test.js +56 -111
  128. package/dist/core/__tests__/close.test.js +14 -20
  129. package/dist/core/__tests__/context-intro.test.js +19 -19
  130. package/dist/core/__tests__/daemon-boot.test.js +30 -23
  131. package/dist/core/__tests__/draw-style.test.js +1 -1
  132. package/dist/core/__tests__/error-stall-recycle.test.d.ts +1 -0
  133. package/dist/core/__tests__/error-stall-recycle.test.js +141 -0
  134. package/dist/core/__tests__/fixtures/fake-engine.d.ts +24 -1
  135. package/dist/core/__tests__/fixtures/fake-engine.js +32 -2
  136. package/dist/core/__tests__/fixtures/fake-pi-host.js +2 -2
  137. package/dist/core/__tests__/focuses.test.js +25 -13
  138. package/dist/core/__tests__/fork.test.js +22 -5
  139. package/dist/core/__tests__/full/broker-control-preempt.test.d.ts +1 -0
  140. package/dist/core/__tests__/full/broker-control-preempt.test.js +61 -0
  141. package/dist/core/__tests__/full/broker-model-changed-broadcast.test.d.ts +1 -0
  142. package/dist/core/__tests__/full/broker-model-changed-broadcast.test.js +57 -0
  143. package/dist/core/__tests__/full/broker-navigate-tree-rewelcome.test.d.ts +1 -0
  144. package/dist/core/__tests__/full/broker-navigate-tree-rewelcome.test.js +80 -0
  145. package/dist/core/__tests__/full/broker-pane-resolution.test.js +90 -0
  146. package/dist/core/__tests__/full/cascade-close.test.js +22 -8
  147. package/dist/core/__tests__/full/detach-focus.test.js +66 -169
  148. package/dist/core/__tests__/helpers/harness.d.ts +6 -9
  149. package/dist/core/__tests__/helpers/harness.js +19 -36
  150. package/dist/core/__tests__/human-node-not-supervised.test.d.ts +1 -0
  151. package/dist/core/__tests__/human-node-not-supervised.test.js +83 -0
  152. package/dist/core/__tests__/human-stranded-deliver.test.d.ts +1 -0
  153. package/dist/core/__tests__/human-stranded-deliver.test.js +108 -0
  154. package/dist/core/__tests__/lifecycle.test.js +1 -19
  155. package/dist/core/__tests__/live-mutation-verbs.test.js +5 -5
  156. package/dist/core/__tests__/memory-resolver.test.js +1 -1
  157. package/dist/core/__tests__/on-read-dedup-resume.test.d.ts +1 -0
  158. package/dist/core/__tests__/on-read-dedup-resume.test.js +81 -0
  159. package/dist/core/__tests__/refresh-stall-recycle.test.d.ts +1 -0
  160. package/dist/core/__tests__/refresh-stall-recycle.test.js +88 -0
  161. package/dist/core/__tests__/relaunch-root.test.d.ts +1 -0
  162. package/dist/core/__tests__/relaunch-root.test.js +114 -0
  163. package/dist/core/__tests__/reset.test.js +19 -79
  164. package/dist/core/__tests__/steer-note.test.js +9 -7
  165. package/dist/core/__tests__/tmux-surface.test.js +13 -7
  166. package/dist/core/bootstrap.d.ts +0 -3
  167. package/dist/core/bootstrap.js +1 -143
  168. package/dist/core/canvas/browse/__tests__/model.test.js +86 -1
  169. package/dist/core/canvas/browse/__tests__/render.test.js +2 -1
  170. package/dist/core/canvas/browse/app.js +131 -8
  171. package/dist/core/canvas/browse/model.d.ts +23 -5
  172. package/dist/core/canvas/browse/model.js +68 -13
  173. package/dist/core/canvas/browse/render.d.ts +7 -1
  174. package/dist/core/canvas/browse/render.js +178 -47
  175. package/dist/core/canvas/canvas.js +1 -1
  176. package/dist/core/canvas/focuses.d.ts +4 -4
  177. package/dist/core/canvas/focuses.js +7 -7
  178. package/dist/core/canvas/nav-model.d.ts +162 -0
  179. package/dist/core/canvas/nav-model.js +487 -0
  180. package/dist/core/canvas/paths.d.ts +7 -0
  181. package/dist/core/canvas/paths.js +9 -0
  182. package/dist/core/canvas/render.d.ts +68 -9
  183. package/dist/core/canvas/render.js +195 -61
  184. package/dist/core/canvas/types.d.ts +16 -23
  185. package/dist/core/config.js +1 -4
  186. package/dist/core/memory-resolver.js +43 -5
  187. package/dist/core/runtime/bearings.d.ts +1 -1
  188. package/dist/core/runtime/bearings.js +8 -8
  189. package/dist/core/runtime/branded-host.d.ts +16 -0
  190. package/dist/core/runtime/branded-host.js +127 -0
  191. package/dist/core/runtime/broker-protocol.d.ts +212 -6
  192. package/dist/core/runtime/broker-sdk.d.ts +0 -12
  193. package/dist/core/runtime/broker-sdk.js +77 -6
  194. package/dist/core/runtime/broker.d.ts +5 -1
  195. package/dist/core/runtime/broker.js +520 -59
  196. package/dist/core/runtime/close.d.ts +12 -2
  197. package/dist/core/runtime/close.js +37 -16
  198. package/dist/core/runtime/front-door.js +14 -7
  199. package/dist/core/runtime/host.d.ts +14 -34
  200. package/dist/core/runtime/host.js +14 -50
  201. package/dist/core/runtime/launch.d.ts +12 -9
  202. package/dist/core/runtime/launch.js +27 -15
  203. package/dist/core/runtime/lifecycle.d.ts +1 -1
  204. package/dist/core/runtime/lifecycle.js +15 -19
  205. package/dist/core/runtime/nodes.d.ts +0 -55
  206. package/dist/core/runtime/nodes.js +6 -74
  207. package/dist/core/runtime/placement.d.ts +91 -334
  208. package/dist/core/runtime/placement.js +262 -828
  209. package/dist/core/runtime/promote.d.ts +2 -0
  210. package/dist/core/runtime/promote.js +24 -6
  211. package/dist/core/runtime/recap.d.ts +8 -0
  212. package/dist/core/runtime/recap.js +107 -0
  213. package/dist/core/runtime/recycle.js +25 -61
  214. package/dist/core/runtime/reset.d.ts +43 -37
  215. package/dist/core/runtime/reset.js +131 -218
  216. package/dist/core/runtime/revive.d.ts +9 -29
  217. package/dist/core/runtime/revive.js +45 -135
  218. package/dist/core/runtime/spawn.d.ts +15 -11
  219. package/dist/core/runtime/spawn.js +168 -136
  220. package/dist/core/runtime/surface-bg.d.ts +11 -0
  221. package/dist/core/runtime/surface-bg.js +68 -0
  222. package/dist/core/runtime/tmux.d.ts +15 -43
  223. package/dist/core/runtime/tmux.js +38 -80
  224. package/dist/core/scope.d.ts +1 -2
  225. package/dist/core/scope.js +1 -5
  226. package/dist/core/skill-sync/__tests__/dry-run-wrote-count.test.d.ts +1 -0
  227. package/dist/core/skill-sync/__tests__/dry-run-wrote-count.test.js +57 -0
  228. package/dist/core/skill-sync/builtins.d.ts +42 -0
  229. package/dist/core/skill-sync/builtins.js +112 -0
  230. package/dist/core/skill-sync/claude-plugins.d.ts +23 -0
  231. package/dist/core/skill-sync/claude-plugins.js +71 -0
  232. package/dist/core/skill-sync/engine.d.ts +42 -0
  233. package/dist/core/skill-sync/engine.js +633 -0
  234. package/dist/core/skill-sync/export.d.ts +23 -0
  235. package/dist/core/skill-sync/export.js +86 -0
  236. package/dist/core/skill-sync/manifest.d.ts +64 -0
  237. package/dist/core/skill-sync/manifest.js +181 -0
  238. package/dist/core/skill-sync/profile.d.ts +76 -0
  239. package/dist/core/skill-sync/profile.js +173 -0
  240. package/dist/core/skill-sync/snapshot.d.ts +57 -0
  241. package/dist/core/skill-sync/snapshot.js +120 -0
  242. package/dist/core/spawn.d.ts +14 -0
  243. package/dist/core/spawn.js +29 -9
  244. package/dist/core/substrate/index.d.ts +2 -2
  245. package/dist/core/substrate/index.js +7 -7
  246. package/dist/core/substrate/injected-store.d.ts +10 -0
  247. package/dist/core/substrate/injected-store.js +55 -0
  248. package/dist/core/substrate/on-read.js +68 -6
  249. package/dist/core/substrate/render.d.ts +8 -11
  250. package/dist/core/substrate/render.js +29 -43
  251. package/dist/core/substrate/schema.d.ts +16 -11
  252. package/dist/core/substrate/schema.js +32 -31
  253. package/dist/core/tui/host.d.ts +12 -4
  254. package/dist/core/tui/host.js +280 -149
  255. package/dist/core/view/bridge.d.ts +10 -0
  256. package/dist/core/view/bridge.js +31 -0
  257. package/dist/core/view/chrome.d.ts +9 -0
  258. package/dist/core/view/chrome.js +22 -0
  259. package/dist/core/view/contract.d.ts +171 -0
  260. package/dist/core/view/contract.js +23 -0
  261. package/dist/core/view/loader.d.ts +31 -0
  262. package/dist/core/view/loader.js +188 -0
  263. package/dist/core/view/transport-local.d.ts +7 -0
  264. package/dist/core/view/transport-local.js +70 -0
  265. package/dist/core/view/transport.d.ts +4 -0
  266. package/dist/core/view/transport.js +15 -0
  267. package/dist/daemon/crtrd.d.ts +38 -27
  268. package/dist/daemon/crtrd.js +303 -376
  269. package/dist/daemon/manage.js +6 -1
  270. package/dist/index.js +1 -1
  271. package/dist/pi-extensions/__tests__/canvas-stophook-agentend.test.js +28 -20
  272. package/dist/pi-extensions/canvas-context-intro.js +4 -4
  273. package/dist/pi-extensions/canvas-doc-substrate.js +29 -20
  274. package/dist/pi-extensions/canvas-nav.js +35 -385
  275. package/dist/pi-extensions/canvas-recap.d.ts +37 -0
  276. package/dist/pi-extensions/canvas-recap.js +236 -0
  277. package/dist/pi-extensions/canvas-resume.js +2 -1
  278. package/dist/pi-extensions/canvas-stophook.d.ts +15 -13
  279. package/dist/pi-extensions/canvas-stophook.js +119 -103
  280. package/dist/pi-extensions/canvas-view.js +2 -1
  281. package/dist/pi-extensions/widget-order-bus.d.ts +6 -0
  282. package/dist/pi-extensions/widget-order-bus.js +34 -0
  283. package/dist/prompts/view.d.ts +2 -2
  284. package/dist/prompts/view.js +145 -73
  285. package/dist/types.d.ts +1 -6
  286. package/dist/types.js +1 -3
  287. package/dist/web/ViewChrome.d.ts +7 -0
  288. package/dist/web/ViewChrome.js +28 -0
  289. package/dist/web/ViewPane.d.ts +39 -0
  290. package/dist/web/ViewPane.js +48 -0
  291. package/dist/web/index.d.ts +6 -0
  292. package/dist/web/index.js +16 -0
  293. package/dist/web/runtime.d.ts +39 -0
  294. package/dist/web/runtime.js +133 -0
  295. package/dist/web/states.d.ts +24 -0
  296. package/dist/web/states.js +24 -0
  297. package/dist/web/transport-http.d.ts +5 -0
  298. package/dist/web/transport-http.js +28 -0
  299. package/dist/web-client/assets/index-BUvQb4hR.css +2 -0
  300. package/dist/web-client/assets/index-ClLQXYAE.js +10 -0
  301. package/dist/web-client/index.html +13 -0
  302. package/package.json +20 -6
  303. package/dist/builtin-views/canvas/client.mjs +0 -303
  304. package/dist/builtin-views/canvas/view.mjs +0 -576
  305. package/dist/builtin-views/git-pr/client.mjs +0 -440
  306. package/dist/builtin-views/git-pr/view.mjs +0 -675
  307. package/dist/builtin-views/inbox/sources/gmail.mjs +0 -965
  308. package/dist/builtin-views/inbox/sources/linkedin.mjs +0 -427
  309. package/dist/builtin-views/inbox/view.mjs +0 -889
  310. package/dist/builtin-views/linkedin/client.mjs +0 -610
  311. package/dist/builtin-views/linkedin/view.mjs +0 -1171
  312. package/dist/commands/pkg/bridge.d.ts +0 -1
  313. package/dist/commands/pkg/bridge.js +0 -137
  314. package/dist/commands/skill/author.d.ts +0 -3
  315. package/dist/commands/skill/author.js +0 -140
  316. package/dist/commands/skill/shared.d.ts +0 -3
  317. package/dist/commands/skill/shared.js +0 -19
  318. package/dist/commands/skill.d.ts +0 -2
  319. package/dist/commands/skill.js +0 -21
  320. package/dist/commands/tmux-spread.d.ts +0 -2
  321. package/dist/commands/tmux-spread.js +0 -144
  322. package/dist/core/__tests__/full/daemon-liveness-pane.full.test.js +0 -292
  323. package/dist/core/__tests__/full/placement-focus.test.js +0 -309
  324. package/dist/core/__tests__/full/placement-reconcile.test.js +0 -212
  325. package/dist/core/__tests__/full/placement-revive.test.js +0 -238
  326. package/dist/core/__tests__/full/placement-teardown.test.js +0 -221
  327. package/dist/core/__tests__/home-session.test.js +0 -186
  328. package/dist/core/__tests__/relaunch.test.js +0 -335
  329. package/dist/core/bridge-map.d.ts +0 -19
  330. package/dist/core/bridge-map.js +0 -73
  331. package/dist/core/tui/contract.d.ts +0 -83
  332. package/dist/core/tui/contract.js +0 -8
  333. package/dist/core/tui/loader.d.ts +0 -16
  334. package/dist/core/tui/loader.js +0 -94
  335. package/dist/prompts/skill.d.ts +0 -2
  336. package/dist/prompts/skill.js +0 -650
  337. /package/dist/{core/__tests__/full/daemon-liveness-pane.full.test.d.ts → clients/attach/__tests__/action-parity.test.d.ts} +0 -0
  338. /package/dist/{core/__tests__/full/placement-focus.test.d.ts → clients/attach/__tests__/clipboard-image.test.d.ts} +0 -0
  339. /package/dist/{core/__tests__/full/placement-reconcile.test.d.ts → clients/attach/__tests__/editor-newline.test.d.ts} +0 -0
  340. /package/dist/{core/__tests__/full/placement-revive.test.d.ts → clients/attach/__tests__/git-info.test.d.ts} +0 -0
  341. /package/dist/{core/__tests__/full/placement-teardown.test.d.ts → clients/attach/__tests__/onrequest-wired.test.d.ts} +0 -0
  342. /package/dist/{core/__tests__/home-session.test.d.ts → clients/attach/__tests__/reconnect-giveup.test.d.ts} +0 -0
  343. /package/dist/{core/__tests__/relaunch.test.d.ts → clients/attach/__tests__/slash-quit-copy.test.d.ts} +0 -0
@@ -0,0 +1,13 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <title>crouter</title>
7
+ <script type="module" crossorigin src="/assets/index-ClLQXYAE.js"></script>
8
+ <link rel="stylesheet" crossorigin href="/assets/index-BUvQb4hR.css">
9
+ </head>
10
+ <body>
11
+ <div id="root"></div>
12
+ </body>
13
+ </html>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crouton-kit/crouter",
3
- "version": "0.3.27",
3
+ "version": "0.3.29",
4
4
  "description": "crtr — fast access to skills, plugins, and marketplaces",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -17,6 +17,10 @@
17
17
  },
18
18
  "./cli": {
19
19
  "import": "./dist/cli.js"
20
+ },
21
+ "./web": {
22
+ "import": "./dist/web/index.js",
23
+ "types": "./dist/web/index.d.ts"
20
24
  }
21
25
  },
22
26
  "files": [
@@ -24,12 +28,12 @@
24
28
  "bin"
25
29
  ],
26
30
  "scripts": {
27
- "build": "rm -rf dist && tsc && cp -R src/builtin-personas dist/builtin-personas && cp -R src/builtin-views dist/builtin-views && cp -R src/builtin-memory dist/builtin-memory",
31
+ "build": "rm -rf dist && tsc && cp -R src/builtin-personas dist/builtin-personas && cp -R src/builtin-views dist/builtin-views && cp -R src/builtin-memory dist/builtin-memory && vite build --config src/clients/web/web-client/vite.config.ts",
28
32
  "dev": "tsx src/cli.ts",
29
33
  "link": "npm link",
30
34
  "prepublishOnly": "npm run build",
31
35
  "test": "node --import tsx/esm --test 'src/**/__tests__/*.test.ts'",
32
- "test:full": "node --import tsx/esm --test 'src/**/__tests__/**/*.test.ts'"
36
+ "test:full": "node --import tsx/esm --test-concurrency=4 --test 'src/**/__tests__/**/*.test.ts'"
33
37
  },
34
38
  "repository": {
35
39
  "type": "git",
@@ -37,16 +41,26 @@
37
41
  },
38
42
  "license": "MIT",
39
43
  "dependencies": {
40
- "@crouton-kit/humanloop": "^0.3.17",
44
+ "@crouton-kit/humanloop": "^0.3.18",
41
45
  "@earendil-works/pi-ai": "^0.79.0",
42
- "@earendil-works/pi-coding-agent": "^0.79.0",
43
- "@earendil-works/pi-tui": "^0.79.0",
46
+ "@earendil-works/pi-coding-agent": "^0.79.1",
47
+ "@earendil-works/pi-tui": "^0.79.1",
48
+ "@tailwindcss/vite": "^4.3.0",
49
+ "@vitejs/plugin-react": "^6.0.2",
44
50
  "commander": "^13.0.0",
45
51
  "cron-parser": "5.5.0",
52
+ "react": "^19.2.7",
53
+ "react-dom": "^19.2.7",
54
+ "tailwindcss": "^4.3.0",
55
+ "vite": "^8.0.16",
56
+ "ws": "^8.21.0",
46
57
  "yaml": "^2.9.0"
47
58
  },
48
59
  "devDependencies": {
49
60
  "@types/node": "^22.0.0",
61
+ "@types/react": "^19.2.17",
62
+ "@types/react-dom": "^19.2.3",
63
+ "@types/ws": "^8.18.1",
50
64
  "tsx": "^4.0.0",
51
65
  "typescript": "^5.7.0"
52
66
  }
@@ -1,303 +0,0 @@
1
- // @ts-check
2
- /**
3
- * Canvas data layer for the crtr `canvas` view (the monitor archetype).
4
- *
5
- * Self-contained ESM, Node-builtins-only. Imports NOTHING from crtr so it ships
6
- * verbatim (`cp -R src/builtin-views dist/builtin-views`) and is dynamically
7
- * `import()`ed by the view at runtime where there is no TS toolchain.
8
- *
9
- * It shells the `crtr` binary itself — exactly as the LinkedIn view shells
10
- * `capture`. Two read-only `--json` leaves give the whole graph:
11
- * - `crtr node inspect list --json` → every node row, incl. `parent` (so the
12
- * view rebuilds the forest) + `lifecycle`.
13
- * - `crtr canvas attention list --json` → which nodes have pending human asks
14
- * (the "blocked on a human" signal).
15
- * Both are read-only (query canvas.db) and exit 0. No `--json` affordance was
16
- * missing — every command we need already emits machine-readable JSON.
17
- *
18
- * NOTHING here throws. Every exported function returns a `Result<T>`; failures
19
- * surface as a typed `ClientError` so the view renders guidance, not a crash.
20
- *
21
- * NOTE on the crtr help-gate: that gate is a pi-side `bash` tool-call
22
- * interceptor — it inspects the AGENT's command string. A `crtr` spawned from
23
- * inside the view host (a grandchild of `node dist/cli.js view run`) is not a
24
- * tool call pi can see, so these shell-outs are never gated.
25
- *
26
- * @module canvas/client
27
- */
28
-
29
- import { execFile } from 'node:child_process';
30
- import { existsSync } from 'node:fs';
31
- import { fileURLToPath } from 'node:url';
32
- import { dirname, join } from 'node:path';
33
-
34
- // ── Types ────────────────────────────────────────────────────────────────────
35
-
36
- /**
37
- * One canvas node, flattened from `node inspect list --json`.
38
- * @typedef {Object} CanvasNode
39
- * @property {string} nodeId Full node id (`<time>-<hash>`).
40
- * @property {string} name Display name.
41
- * @property {string} kind Node kind (general/developer/explore/human/…).
42
- * @property {string} mode base | orchestrator.
43
- * @property {string} lifecycle resident | terminal.
44
- * @property {string} status active | idle | done | dead | canceled.
45
- * @property {string|null} parent Spawn/subscription parent id (null ⇒ a forest root).
46
- * @property {string} created ISO 8601 birth timestamp (drives child ordering).
47
- */
48
-
49
- /**
50
- * One cwd with pending human asks, from `canvas attention list --json`. The
51
- * `nodeId` is the cwd's representative node — the node the attention system
52
- * points at.
53
- * @typedef {Object} AttentionItem
54
- * @property {string} nodeId
55
- * @property {string} name
56
- * @property {string} cwd
57
- * @property {number} count Pending ask count.
58
- */
59
-
60
- /**
61
- * Typed failure. `kind` drives the guidance banner the view shows.
62
- * @typedef {{kind:'crtr-missing', message:string}
63
- * | {kind:'crtr-failed', message:string}
64
- * | {kind:'parse', message:string}
65
- * | {kind:'error', message:string}} ClientError
66
- */
67
-
68
- /**
69
- * Never-throw return contract.
70
- * @template T
71
- * @typedef {{ok:true, data:T} | {ok:false, error:ClientError}} Result
72
- */
73
-
74
- // ── Result helpers ───────────────────────────────────────────────────────────
75
-
76
- /** @template T @param {T} data @returns {Result<T>} */
77
- function ok(data) {
78
- return { ok: true, data };
79
- }
80
-
81
- /** @param {ClientError} error @returns {{ok:false, error:ClientError}} */
82
- function fail(error) {
83
- return { ok: false, error };
84
- }
85
-
86
- // ── Locating the `crtr` binary ───────────────────────────────────────────────
87
-
88
- /**
89
- * One candidate way to invoke crtr: a binary plus any fixed prefix args.
90
- * @typedef {Object} Candidate
91
- * @property {string} bin
92
- * @property {string[]} prefix
93
- */
94
-
95
- /**
96
- * Candidates, in order: explicit override → PATH `crtr` → PATH `crouter` → the
97
- * dev fallback `node <dist/cli.js>` resolved relative to THIS file (which, when
98
- * shipped, lives at `dist/builtin-views/canvas/client.mjs`, so `../../cli.js` is
99
- * `dist/cli.js`). We try the next only when a candidate fails to spawn (ENOENT);
100
- * a candidate that spawns and exits nonzero is authoritative.
101
- * @returns {Candidate[]}
102
- */
103
- function crtrCandidates() {
104
- /** @type {Candidate[]} */
105
- const out = [];
106
- if (process.env.CRTR_BIN) out.push({ bin: process.env.CRTR_BIN, prefix: [] });
107
- out.push({ bin: 'crtr', prefix: [] });
108
- out.push({ bin: 'crouter', prefix: [] });
109
- try {
110
- const here = dirname(fileURLToPath(import.meta.url)); // …/dist/builtin-views/canvas
111
- const cli = join(here, '..', '..', 'cli.js'); // …/dist/cli.js
112
- if (existsSync(cli)) out.push({ bin: process.execPath, prefix: [cli] });
113
- } catch {
114
- /* import.meta.url unavailable — skip the dev fallback */
115
- }
116
- return out;
117
- }
118
-
119
- // ── Process runner (never throws) ────────────────────────────────────────────
120
-
121
- /**
122
- * @typedef {Object} RunResult
123
- * @property {boolean} spawned False ⇒ no candidate binary could be spawned.
124
- * @property {number} exitCode Process exit code (0 on success; -1 if not spawned).
125
- * @property {string} stdout
126
- * @property {string} stderr
127
- */
128
-
129
- /**
130
- * Run one candidate. Resolves (never rejects). ENOENT ⇒ `spawned:false` so the
131
- * caller can try the next candidate.
132
- * @param {Candidate} c
133
- * @param {string[]} argv
134
- * @returns {Promise<RunResult>}
135
- */
136
- function runOnce(c, argv) {
137
- return new Promise((resolve) => {
138
- execFile(
139
- c.bin,
140
- [...c.prefix, ...argv],
141
- { maxBuffer: 64 * 1024 * 1024, encoding: 'utf8' },
142
- (err, stdout, stderr) => {
143
- const out = typeof stdout === 'string' ? stdout : '';
144
- const errOut = typeof stderr === 'string' ? stderr : '';
145
- if (err && /** @type {any} */ (err).code === 'ENOENT') {
146
- resolve({ spawned: false, exitCode: -1, stdout: out, stderr: errOut });
147
- return;
148
- }
149
- const code = err
150
- ? typeof /** @type {any} */ (err).code === 'number'
151
- ? /** @type {any} */ (err).code
152
- : 1
153
- : 0;
154
- resolve({ spawned: true, exitCode: code, stdout: out, stderr: errOut });
155
- }
156
- );
157
- });
158
- }
159
-
160
- /**
161
- * Run `crtr` with the given argv, walking candidates until one spawns.
162
- * @param {string[]} argv
163
- * @returns {Promise<RunResult>}
164
- */
165
- async function runCrtr(argv) {
166
- /** @type {RunResult} */
167
- let last = { spawned: false, exitCode: -1, stdout: '', stderr: '' };
168
- for (const c of crtrCandidates()) {
169
- last = await runOnce(c, argv);
170
- if (last.spawned) return last;
171
- }
172
- return last; // never spawned
173
- }
174
-
175
- /** @returns {ClientError} */
176
- function crtrMissingError() {
177
- return {
178
- kind: 'crtr-missing',
179
- message:
180
- "crtr not found — tried CRTR_BIN, PATH 'crtr'/'crouter', and the local cli.js. " +
181
- 'Install crtr or set CRTR_BIN.',
182
- };
183
- }
184
-
185
- /**
186
- * Pull a human message out of crtr stderr: prefer the last `ERROR:` line, else
187
- * the last non-empty line, else a generic fallback.
188
- * @param {string} stderr
189
- * @returns {string}
190
- */
191
- function extractMessage(stderr) {
192
- const lines = String(stderr || '')
193
- .split(/\r?\n/)
194
- .map((l) => l.trim())
195
- .filter(Boolean);
196
- for (let i = lines.length - 1; i >= 0; i--) {
197
- if (/^ERROR:/i.test(lines[i])) return lines[i].replace(/^ERROR:\s*/i, '').trim();
198
- }
199
- if (lines.length) return lines[lines.length - 1];
200
- return 'crtr command failed';
201
- }
202
-
203
- /**
204
- * Map a failed crtr invocation to a typed {@link ClientError}.
205
- * @param {string} stderr
206
- * @returns {ClientError}
207
- */
208
- function classifyError(stderr) {
209
- const s = String(stderr || '');
210
- if (/help-gate:\s*blocked/i.test(s)) {
211
- return { kind: 'error', message: 'crtr help-gate blocked the call (run the command with -h once).' };
212
- }
213
- return { kind: 'crtr-failed', message: extractMessage(s) };
214
- }
215
-
216
- /**
217
- * Run a crtr `--json` leaf and parse stdout as JSON.
218
- * @param {string[]} argv
219
- * @returns {Promise<Result<any>>}
220
- */
221
- async function runJson(argv) {
222
- const r = await runCrtr(argv);
223
- if (!r.spawned) return fail(crtrMissingError());
224
- if (r.exitCode !== 0) return fail(classifyError(r.stderr || r.stdout));
225
- const out = String(r.stdout || '').trim();
226
- if (out === '') return ok(null);
227
- try {
228
- return ok(JSON.parse(out));
229
- } catch {
230
- return fail({ kind: 'parse', message: `could not parse \`crtr ${argv.join(' ')}\` output as JSON` });
231
- }
232
- }
233
-
234
- // ── Field mappers ────────────────────────────────────────────────────────────
235
-
236
- /** @param {unknown} v @returns {string} */
237
- function str(v) {
238
- return v == null ? '' : String(v);
239
- }
240
-
241
- /** @param {any} n @returns {CanvasNode} */
242
- function toNode(n) {
243
- const o = n || {};
244
- return {
245
- nodeId: str(o.node_id),
246
- name: str(o.name) || '(unnamed)',
247
- kind: str(o.kind) || '?',
248
- mode: str(o.mode) || '?',
249
- lifecycle: str(o.lifecycle) || '?',
250
- status: str(o.status) || '?',
251
- parent: o.parent ? str(o.parent) : null,
252
- created: str(o.created),
253
- };
254
- }
255
-
256
- /** @param {any} i @returns {AttentionItem} */
257
- function toAttention(i) {
258
- const o = i || {};
259
- return {
260
- nodeId: str(o.node_id),
261
- name: str(o.name),
262
- cwd: str(o.cwd),
263
- count: typeof o.count === 'number' ? o.count : 0,
264
- };
265
- }
266
-
267
- // ── Public API ───────────────────────────────────────────────────────────────
268
-
269
- /**
270
- * Every node on the canvas (all statuses). The view rebuilds the forest from the
271
- * `parent` edges and filters to active trees itself.
272
- * @returns {Promise<Result<CanvasNode[]>>}
273
- */
274
- export async function fetchNodes() {
275
- const r = await runJson(['node', 'inspect', 'list', '--json']);
276
- if (!r.ok) return r;
277
- const arr = r.data && Array.isArray(r.data.nodes) ? r.data.nodes : [];
278
- return ok(arr.map(toNode));
279
- }
280
-
281
- /**
282
- * Pending human asks across the canvas (the "blocked on a human" signal).
283
- * @returns {Promise<Result<{items:AttentionItem[], total:number}>>}
284
- */
285
- export async function fetchAttention() {
286
- const r = await runJson(['canvas', 'attention', 'list', '--json']);
287
- if (!r.ok) return r;
288
- const items = r.data && Array.isArray(r.data.items) ? r.data.items : [];
289
- const total = r.data && typeof r.data.total === 'number' ? r.data.total : 0;
290
- return ok({ items: items.map(toAttention), total });
291
- }
292
-
293
- /**
294
- * Introspection helper (not used at runtime): the exact crtr commands this
295
- * client shells, so the shape can be eyeballed without a live canvas.
296
- * @returns {Record<string,string>}
297
- */
298
- export function describeCommands() {
299
- return {
300
- fetchNodes: 'crtr node inspect list --json',
301
- fetchAttention: 'crtr canvas attention list --json',
302
- };
303
- }