@loompad/cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) hide show
  1. package/ARCHITECTURE.md +211 -0
  2. package/CHANGELOG.md +470 -0
  3. package/LICENSE +21 -0
  4. package/README.md +630 -0
  5. package/dist/adapters/base.d.ts +71 -0
  6. package/dist/adapters/base.js +187 -0
  7. package/dist/adapters/base.js.map +1 -0
  8. package/dist/adapters/bridges/antigravity.d.ts +53 -0
  9. package/dist/adapters/bridges/antigravity.js +106 -0
  10. package/dist/adapters/bridges/antigravity.js.map +1 -0
  11. package/dist/adapters/bridges/cdp.d.ts +82 -0
  12. package/dist/adapters/bridges/cdp.js +222 -0
  13. package/dist/adapters/bridges/cdp.js.map +1 -0
  14. package/dist/adapters/bridges/gui-chat.d.ts +113 -0
  15. package/dist/adapters/bridges/gui-chat.js +498 -0
  16. package/dist/adapters/bridges/gui-chat.js.map +1 -0
  17. package/dist/adapters/bridges/kiro.d.ts +19 -0
  18. package/dist/adapters/bridges/kiro.js +22 -0
  19. package/dist/adapters/bridges/kiro.js.map +1 -0
  20. package/dist/adapters/bridges/profiles.d.ts +82 -0
  21. package/dist/adapters/bridges/profiles.js +125 -0
  22. package/dist/adapters/bridges/profiles.js.map +1 -0
  23. package/dist/adapters/claude-code.d.ts +26 -0
  24. package/dist/adapters/claude-code.js +209 -0
  25. package/dist/adapters/claude-code.js.map +1 -0
  26. package/dist/adapters/codex.d.ts +51 -0
  27. package/dist/adapters/codex.js +291 -0
  28. package/dist/adapters/codex.js.map +1 -0
  29. package/dist/adapters/echo.d.ts +20 -0
  30. package/dist/adapters/echo.js +79 -0
  31. package/dist/adapters/echo.js.map +1 -0
  32. package/dist/adapters/grok.d.ts +61 -0
  33. package/dist/adapters/grok.js +217 -0
  34. package/dist/adapters/grok.js.map +1 -0
  35. package/dist/adapters/index.d.ts +9 -0
  36. package/dist/adapters/index.js +33 -0
  37. package/dist/adapters/index.js.map +1 -0
  38. package/dist/adapters/opencode.d.ts +64 -0
  39. package/dist/adapters/opencode.js +426 -0
  40. package/dist/adapters/opencode.js.map +1 -0
  41. package/dist/cli/common.d.ts +11 -0
  42. package/dist/cli/common.js +40 -0
  43. package/dist/cli/common.js.map +1 -0
  44. package/dist/cli/doctor.d.ts +12 -0
  45. package/dist/cli/doctor.js +181 -0
  46. package/dist/cli/doctor.js.map +1 -0
  47. package/dist/cli/index.d.ts +8 -0
  48. package/dist/cli/index.js +641 -0
  49. package/dist/cli/index.js.map +1 -0
  50. package/dist/cli/tui-model.d.ts +73 -0
  51. package/dist/cli/tui-model.js +312 -0
  52. package/dist/cli/tui-model.js.map +1 -0
  53. package/dist/cli/tui.d.ts +15 -0
  54. package/dist/cli/tui.js +451 -0
  55. package/dist/cli/tui.js.map +1 -0
  56. package/dist/cli/ui.d.ts +10 -0
  57. package/dist/cli/ui.js +135 -0
  58. package/dist/cli/ui.js.map +1 -0
  59. package/dist/core/ades.d.ts +79 -0
  60. package/dist/core/ades.js +130 -0
  61. package/dist/core/ades.js.map +1 -0
  62. package/dist/core/baton.d.ts +37 -0
  63. package/dist/core/baton.js +92 -0
  64. package/dist/core/baton.js.map +1 -0
  65. package/dist/core/brain-extract.d.ts +111 -0
  66. package/dist/core/brain-extract.js +248 -0
  67. package/dist/core/brain-extract.js.map +1 -0
  68. package/dist/core/brain-index.d.ts +128 -0
  69. package/dist/core/brain-index.js +338 -0
  70. package/dist/core/brain-index.js.map +1 -0
  71. package/dist/core/brain.d.ts +214 -0
  72. package/dist/core/brain.js +425 -0
  73. package/dist/core/brain.js.map +1 -0
  74. package/dist/core/claude-cli.d.ts +12 -0
  75. package/dist/core/claude-cli.js +47 -0
  76. package/dist/core/claude-cli.js.map +1 -0
  77. package/dist/core/distill.d.ts +19 -0
  78. package/dist/core/distill.js +88 -0
  79. package/dist/core/distill.js.map +1 -0
  80. package/dist/core/eventlog.d.ts +43 -0
  81. package/dist/core/eventlog.js +211 -0
  82. package/dist/core/eventlog.js.map +1 -0
  83. package/dist/core/git.d.ts +203 -0
  84. package/dist/core/git.js +460 -0
  85. package/dist/core/git.js.map +1 -0
  86. package/dist/core/logbook.d.ts +59 -0
  87. package/dist/core/logbook.js +118 -0
  88. package/dist/core/logbook.js.map +1 -0
  89. package/dist/core/memory.d.ts +34 -0
  90. package/dist/core/memory.js +124 -0
  91. package/dist/core/memory.js.map +1 -0
  92. package/dist/core/notify.d.ts +11 -0
  93. package/dist/core/notify.js +30 -0
  94. package/dist/core/notify.js.map +1 -0
  95. package/dist/core/projection.d.ts +20 -0
  96. package/dist/core/projection.js +96 -0
  97. package/dist/core/projection.js.map +1 -0
  98. package/dist/core/registry.d.ts +76 -0
  99. package/dist/core/registry.js +147 -0
  100. package/dist/core/registry.js.map +1 -0
  101. package/dist/core/router.d.ts +42 -0
  102. package/dist/core/router.js +99 -0
  103. package/dist/core/router.js.map +1 -0
  104. package/dist/core/routes.d.ts +93 -0
  105. package/dist/core/routes.js +399 -0
  106. package/dist/core/routes.js.map +1 -0
  107. package/dist/core/search.d.ts +63 -0
  108. package/dist/core/search.js +0 -0
  109. package/dist/core/search.js.map +1 -0
  110. package/dist/core/setup.d.ts +70 -0
  111. package/dist/core/setup.js +250 -0
  112. package/dist/core/setup.js.map +1 -0
  113. package/dist/core/suggestions.d.ts +15 -0
  114. package/dist/core/suggestions.js +38 -0
  115. package/dist/core/suggestions.js.map +1 -0
  116. package/dist/core/worktree.d.ts +32 -0
  117. package/dist/core/worktree.js +83 -0
  118. package/dist/core/worktree.js.map +1 -0
  119. package/dist/daemon/app-page.d.ts +32 -0
  120. package/dist/daemon/app-page.js +6363 -0
  121. package/dist/daemon/app-page.js.map +1 -0
  122. package/dist/daemon/auth.d.ts +51 -0
  123. package/dist/daemon/auth.js +135 -0
  124. package/dist/daemon/auth.js.map +1 -0
  125. package/dist/daemon/board.d.ts +117 -0
  126. package/dist/daemon/board.js +202 -0
  127. package/dist/daemon/board.js.map +1 -0
  128. package/dist/daemon/brand-icons.d.ts +29 -0
  129. package/dist/daemon/brand-icons.js +44 -0
  130. package/dist/daemon/brand-icons.js.map +1 -0
  131. package/dist/daemon/client.d.ts +127 -0
  132. package/dist/daemon/client.js +237 -0
  133. package/dist/daemon/client.js.map +1 -0
  134. package/dist/daemon/geist-font.d.ts +10 -0
  135. package/dist/daemon/geist-font.js +783 -0
  136. package/dist/daemon/geist-font.js.map +1 -0
  137. package/dist/daemon/guards.d.ts +18 -0
  138. package/dist/daemon/guards.js +40 -0
  139. package/dist/daemon/guards.js.map +1 -0
  140. package/dist/daemon/linear.d.ts +59 -0
  141. package/dist/daemon/linear.js +117 -0
  142. package/dist/daemon/linear.js.map +1 -0
  143. package/dist/daemon/push.d.ts +22 -0
  144. package/dist/daemon/push.js +58 -0
  145. package/dist/daemon/push.js.map +1 -0
  146. package/dist/daemon/runtime.d.ts +299 -0
  147. package/dist/daemon/runtime.js +1016 -0
  148. package/dist/daemon/runtime.js.map +1 -0
  149. package/dist/daemon/server.d.ts +125 -0
  150. package/dist/daemon/server.js +1728 -0
  151. package/dist/daemon/server.js.map +1 -0
  152. package/dist/daemon/tasks.d.ts +153 -0
  153. package/dist/daemon/tasks.js +264 -0
  154. package/dist/daemon/tasks.js.map +1 -0
  155. package/dist/daemon/terminals.d.ts +82 -0
  156. package/dist/daemon/terminals.js +372 -0
  157. package/dist/daemon/terminals.js.map +1 -0
  158. package/dist/index.d.ts +20 -0
  159. package/dist/index.js +20 -0
  160. package/dist/index.js.map +1 -0
  161. package/dist/sdk.d.ts +17 -0
  162. package/dist/sdk.js +17 -0
  163. package/dist/sdk.js.map +1 -0
  164. package/dist/types.d.ts +236 -0
  165. package/dist/types.js +18 -0
  166. package/dist/types.js.map +1 -0
  167. package/docs/SETUP.md +265 -0
  168. package/docs/adapters.md +132 -0
  169. package/docs/design-system.md +245 -0
  170. package/docs/img/board-linear.png +0 -0
  171. package/docs/img/board-projects.png +0 -0
  172. package/docs/img/brain.png +0 -0
  173. package/docs/img/settings.png +0 -0
  174. package/docs/img/workspace.png +0 -0
  175. package/docs/integration-notes.md +76 -0
  176. package/docs/proposals/brain.md +262 -0
  177. package/package.json +84 -0
@@ -0,0 +1,44 @@
1
+ /**
2
+ * ADE brand marks — Claude Code, Antigravity, opencode, Kiro, Codex.
3
+ *
4
+ * GENERATED by scripts/gen-brand-icons.mjs from @lobehub/icons (MIT,
5
+ * github.com/lobehub/lobe-icons). Don't hand-edit; regenerate. The marks are
6
+ * frozen here because the web app has no build step and no CDN — it can't
7
+ * import React components and must work offline on a tailnet. Each logo is the
8
+ * trademark of its owner, used only to identify that agent.
9
+ *
10
+ * It's a sprite, not inline strings: Antigravity and Codex carry internal ids
11
+ * (masks, blur filters, a gradient), so repeating that markup per agent row
12
+ * would duplicate those ids across the document and `url(#id)` would resolve
13
+ * to whichever copy came first. <symbol> defines the art once; <use> draws it.
14
+ */
15
+ /** Agent kinds that have a real mark. Anything else falls back to a monogram. */
16
+ export const BRAND_KINDS = ["claude-code", "antigravity", "opencode", "kiro", "codex", "grok-code"];
17
+ /** Human-readable name per kind, for tooltips and accessible names. */
18
+ export const BRAND_TITLES = {
19
+ "claude-code": "Claude Code",
20
+ "antigravity": "Antigravity",
21
+ "opencode": "opencode",
22
+ "kiro": "Kiro",
23
+ "codex": "Codex",
24
+ "grok-code": "Grok Code"
25
+ };
26
+ /**
27
+ * Injected once per page; every mark is drawn with <use href="#brand-<kind>">.
28
+ *
29
+ * Hidden with position:absolute;width:0;height:0 — NOT display:none. A gradient
30
+ * or filter is a paint server, and a paint server inside a display:none subtree
31
+ * is inert: the browser never lays it out, so any <use> that references it (in
32
+ * another SVG) paints nothing and you get a blank badge. That's exactly what
33
+ * turned Codex's colour swirl into a white square. width:0/height:0 keeps the
34
+ * sprite invisible and out of flow while leaving its paint servers live.
35
+ */
36
+ export const BRAND_SPRITE = `<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" style="position:absolute;width:0;height:0;overflow:hidden">
37
+ <symbol id="brand-claude-code" viewBox="0 0 24 24"><path clip-rule="evenodd" d="M20.998 10.949H24v3.102h-3v3.028h-1.487V20H18v-2.921h-1.487V20H15v-2.921H9V20H7.488v-2.921H6V20H4.487v-2.921H3V14.05H0V10.95h3V5h17.998v5.949zM6 10.949h1.488V8.102H6v2.847zm10.51 0H18V8.102h-1.49v2.847z" fill="#D97757" fill-rule="evenodd"></path></symbol>
38
+ <symbol id="brand-antigravity" viewBox="0 0 24 24"><mask height="23" id="loom-antigravity-0" maskUnits="userSpaceOnUse" width="24" x="0" y="1"><path d="M21.751 22.607c1.34 1.005 3.35.335 1.508-1.508C17.73 15.74 18.904 1 12.037 1 5.17 1 6.342 15.74.815 21.1c-2.01 2.009.167 2.511 1.507 1.506 5.192-3.517 4.857-9.714 9.715-9.714 4.857 0 4.522 6.197 9.714 9.715z" fill="#fff"></path></mask><g mask="url(#loom-antigravity-0)"><g filter="url(#loom-antigravity-1)"><path d="M-1.018-3.992c-.408 3.591 2.686 6.89 6.91 7.37 4.225.48 7.98-2.043 8.387-5.633.408-3.59-2.686-6.89-6.91-7.37-4.225-.479-7.98 2.043-8.387 5.633z" fill="#FFE432"></path></g><g filter="url(#loom-antigravity-2)"><path d="M15.269 7.747c1.058 4.557 5.691 7.374 10.348 6.293 4.657-1.082 7.575-5.653 6.516-10.21-1.058-4.556-5.691-7.374-10.348-6.292-4.657 1.082-7.575 5.653-6.516 10.21z" fill="#FC413D"></path></g><g filter="url(#loom-antigravity-3)"><path d="M-12.443 10.804c1.338 4.703 7.36 7.11 13.453 5.378 6.092-1.733 9.947-6.95 8.61-11.652C8.282-.173 2.26-2.58-3.833-.848-9.925.884-13.78 6.1-12.443 10.804z" fill="#00B95C"></path></g><g filter="url(#loom-antigravity-4)"><path d="M-12.443 10.804c1.338 4.703 7.36 7.11 13.453 5.378 6.092-1.733 9.947-6.95 8.61-11.652C8.282-.173 2.26-2.58-3.833-.848-9.925.884-13.78 6.1-12.443 10.804z" fill="#00B95C"></path></g><g filter="url(#loom-antigravity-5)"><path d="M-7.608 14.703c3.352 3.424 9.126 3.208 12.896-.483 3.77-3.69 4.108-9.459.756-12.883C2.69-2.087-3.083-1.871-6.853 1.82c-3.77 3.69-4.108 9.458-.755 12.883z" fill="#00B95C"></path></g><g filter="url(#loom-antigravity-6)"><path d="M9.932 27.617c1.04 4.482 5.384 7.303 9.7 6.3 4.316-1.002 6.971-5.448 5.93-9.93-1.04-4.483-5.384-7.304-9.7-6.301-4.316 1.002-6.971 5.448-5.93 9.93z" fill="#3186FF"></path></g><g filter="url(#loom-antigravity-7)"><path d="M2.572-8.185C.392-3.329 2.778 2.472 7.9 4.771c5.122 2.3 11.042.227 13.222-4.63 2.18-4.855-.205-10.656-5.327-12.955-5.122-2.3-11.042-.227-13.222 4.63z" fill="#FBBC04"></path></g><g filter="url(#loom-antigravity-8)"><path d="M-3.267 38.686c-5.277-2.072 3.742-19.117 5.984-24.83 2.243-5.712 8.34-8.664 13.616-6.592 5.278 2.071 11.533 13.482 9.29 19.195-2.242 5.713-23.613 14.298-28.89 12.227z" fill="#3186FF"></path></g><g filter="url(#loom-antigravity-9)"><path d="M28.71 17.471c-1.413 1.649-5.1.808-8.236-1.878-3.135-2.687-4.531-6.201-3.118-7.85 1.412-1.649 5.1-.808 8.235 1.878s4.532 6.2 3.119 7.85z" fill="#749BFF"></path></g><g filter="url(#loom-antigravity-10)"><path d="M18.163 9.077c5.81 3.93 12.502 4.19 14.946.577 2.443-3.612-.287-9.727-6.098-13.658-5.81-3.931-12.502-4.19-14.946-.577-2.443 3.612.287 9.727 6.098 13.658z" fill="#FC413D"></path></g><g filter="url(#loom-antigravity-11)"><path d="M-.915 2.684c-1.44 3.473-.97 6.967 1.05 7.804 2.02.837 4.824-1.3 6.264-4.772 1.44-3.473.97-6.967-1.05-7.804-2.02-.837-4.824 1.3-6.264 4.772z" fill="#FFEE48"></path></g></g><defs><filter color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="17.587" id="loom-antigravity-1" width="19.838" x="-3.288" y="-11.917"><feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"></feBlend><feGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="1.117"></feGaussianBlur></filter><filter color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="38.565" id="loom-antigravity-2" width="38.9" x="4.251" y="-13.493"><feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"></feBlend><feGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="5.4"></feGaussianBlur></filter><filter color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="36.517" id="loom-antigravity-3" width="40.955" x="-21.889" y="-10.592"><feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"></feBlend><feGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="4.591"></feGaussianBlur></filter><filter color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="36.517" id="loom-antigravity-4" width="40.955" x="-21.889" y="-10.592"><feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"></feBlend><feGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="4.591"></feGaussianBlur></filter><filter color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="36.595" id="loom-antigravity-5" width="36.632" x="-19.099" y="-10.278"><feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"></feBlend><feGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="4.591"></feGaussianBlur></filter><filter color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="34.087" id="loom-antigravity-6" width="33.533" x=".981" y="8.758"><feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"></feBlend><feGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="4.363"></feGaussianBlur></filter><filter color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="35.276" id="loom-antigravity-7" width="35.978" x="-6.143" y="-21.659"><feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"></feBlend><feGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="3.954"></feGaussianBlur></filter><filter color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="46.523" id="loom-antigravity-8" width="45.114" x="-11.96" y="-.46"><feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"></feBlend><feGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="3.531"></feGaussianBlur></filter><filter color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="24.054" id="loom-antigravity-9" width="25.094" x="10.485" y=".58"><feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"></feBlend><feGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="3.159"></feGaussianBlur></filter><filter color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="30.007" id="loom-antigravity-10" width="33.508" x="5.833" y="-12.467"><feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"></feBlend><feGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="2.669"></feGaussianBlur></filter><filter color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse" height="26.151" id="loom-antigravity-11" width="22.194" x="-8.355" y="-8.876"><feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"></feBlend><feGaussianBlur result="effect1_foregroundBlur_977_115" stdDeviation="3.303"></feGaussianBlur></filter></defs></symbol>
39
+ <symbol id="brand-opencode" viewBox="0 0 24 24"><path d="M16 6H8v12h8V6zm4 16H4V2h16v20z"></path></symbol>
40
+ <symbol id="brand-kiro" viewBox="0 0 24 24"><path d="M18.8 0H5.2A5.2 5.2 0 000 5.2v13.6A5.2 5.2 0 005.2 24h13.6a5.2 5.2 0 005.2-5.2V5.2A5.2 5.2 0 0018.8 0z" fill="#9046FF"></path><path d="M7.97 16.376c-1.644 3.642 1.86 4.556 4.443 2.424.76 2.39 3.608.607 4.631-1.247 2.251-4.084 1.342-8.249 1.108-9.108-1.6-5.859-9.6-5.869-10.976.03-.323 1.033-.328 2.206-.507 3.423-.09.617-.16 1.009-.393 1.655-.139.373-.323.7-.62 1.257-.458.865-.264 2.53 2.101 1.665l.224-.1h-.01l-.001.001z" fill="#fff"></path><path d="M12.722 10.985c-.656 0-.755-.785-.755-1.252 0-.423.074-.756.218-.97a.61.61 0 01.537-.283c.229 0 .428.095.567.289.159.218.243.55.243.964 0 .785-.303 1.252-.805 1.252h-.005zm2.703 0c-.656 0-.755-.785-.755-1.252 0-.423.074-.756.219-.97a.61.61 0 01.536-.283c.229 0 .428.095.567.289.159.218.243.55.243.964 0 .785-.303 1.252-.805 1.252h-.005z" fill="#000"></path></symbol>
41
+ <symbol id="brand-codex" viewBox="0 0 24 24"><path d="M19.503 0H4.496A4.496 4.496 0 000 4.496v15.007A4.496 4.496 0 004.496 24h15.007A4.496 4.496 0 0024 19.503V4.496A4.496 4.496 0 0019.503 0z" fill="#fff"></path><path d="M9.064 3.344a4.578 4.578 0 012.285-.312c1 .115 1.891.54 2.673 1.275.01.01.024.017.037.021a.09.09 0 00.043 0 4.55 4.55 0 013.046.275l.047.022.116.057a4.581 4.581 0 012.188 2.399c.209.51.313 1.041.315 1.595a4.24 4.24 0 01-.134 1.223.123.123 0 00.03.115c.594.607.988 1.33 1.183 2.17.289 1.425-.007 2.71-.887 3.854l-.136.166a4.548 4.548 0 01-2.201 1.388.123.123 0 00-.081.076c-.191.551-.383 1.023-.74 1.494-.9 1.187-2.222 1.846-3.711 1.838-1.187-.006-2.239-.44-3.157-1.302a.107.107 0 00-.105-.024c-.388.125-.78.143-1.204.138a4.441 4.441 0 01-1.945-.466 4.544 4.544 0 01-1.61-1.335c-.152-.202-.303-.392-.414-.617a5.81 5.81 0 01-.37-.961 4.582 4.582 0 01-.014-2.298.124.124 0 00.006-.056.085.085 0 00-.027-.048 4.467 4.467 0 01-1.034-1.651 3.896 3.896 0 01-.251-1.192 5.189 5.189 0 01.141-1.6c.337-1.112.982-1.985 1.933-2.618.212-.141.413-.251.601-.33.215-.089.43-.164.646-.227a.098.098 0 00.065-.066 4.51 4.51 0 01.829-1.615 4.535 4.535 0 011.837-1.388zm3.482 10.565a.637.637 0 000 1.272h3.636a.637.637 0 100-1.272h-3.636zM8.462 9.23a.637.637 0 00-1.106.631l1.272 2.224-1.266 2.136a.636.636 0 101.095.649l1.454-2.455a.636.636 0 00.005-.64L8.462 9.23z" fill="url(#loom-codex-0)"></path><defs><linearGradient id="loom-codex-0" x1="0.5" x2="0.5" y1="0" y2="1"><stop stop-color="#B1A7FF"></stop><stop offset=".5" stop-color="#7A9DFF"></stop><stop offset="1" stop-color="#3941FF"></stop></linearGradient></defs></symbol>
42
+ <symbol id="brand-grok-code" viewBox="0 0 24 24"><path d="M9.27 15.29l7.978-5.897c.391-.29.95-.177 1.137.272.98 2.369.542 5.215-1.41 7.169-1.951 1.954-4.667 2.382-7.149 1.406l-2.711 1.257c3.889 2.661 8.611 2.003 11.562-.953 2.341-2.344 3.066-5.539 2.388-8.42l.006.007c-.983-4.232.242-5.924 2.75-9.383.06-.082.12-.164.179-.248l-3.301 3.305v-.01L9.267 15.292M7.623 16.723c-2.792-2.67-2.31-6.801.071-9.184 1.761-1.763 4.647-2.483 7.166-1.425l2.705-1.25a7.808 7.808 0 00-1.829-1A8.975 8.975 0 005.984 5.83c-2.533 2.536-3.33 6.436-1.962 9.764 1.022 2.487-.653 4.246-2.34 6.022-.599.63-1.199 1.259-1.682 1.925l7.62-6.815"></path></symbol>
43
+ </svg>`;
44
+ //# sourceMappingURL=brand-icons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brand-icons.js","sourceRoot":"","sources":["../../src/daemon/brand-icons.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,iFAAiF;AACjF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,aAAa,EAAC,aAAa,EAAC,UAAU,EAAC,MAAM,EAAC,OAAO,EAAC,WAAW,CAAU,CAAC;AAExG,uEAAuE;AACvE,MAAM,CAAC,MAAM,YAAY,GAA2B;IAClD,aAAa,EAAE,aAAa;IAC5B,aAAa,EAAE,aAAa;IAC5B,UAAU,EAAE,UAAU;IACtB,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,OAAO;IAChB,WAAW,EAAE,WAAW;CACzB,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;OAOrB,CAAC"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Thin daemon client used by every surface (CLI now, app later).
3
+ * Also owns daemon lifecycle: autostart-on-demand, health, shutdown.
4
+ */
5
+ import type { CostSummary, LoomEvent, ProjectStatus, RouteState, RouteStepSpec, UnifiedMemory } from "../types.js";
6
+ import { type DaemonConfig } from "../core/registry.js";
7
+ import type { Memory } from "../core/brain.js";
8
+ import type { BoardData } from "./board.js";
9
+ export declare class DaemonError extends Error {
10
+ readonly status?: number | undefined;
11
+ readonly body?: Record<string, unknown> | undefined;
12
+ constructor(message: string, status?: number | undefined, body?: Record<string, unknown> | undefined);
13
+ }
14
+ export declare class DaemonClient {
15
+ private cfg;
16
+ constructor(cfg: DaemonConfig);
17
+ static fromDisk(): DaemonClient | null;
18
+ get baseUrl(): string;
19
+ private request;
20
+ health(): Promise<{
21
+ ok: boolean;
22
+ }>;
23
+ listProjects(): Promise<{
24
+ projects: ProjectStatus[];
25
+ }>;
26
+ addProject(dir: string, name?: string): Promise<{
27
+ project: {
28
+ id: string;
29
+ };
30
+ }>;
31
+ project(id: string): Promise<{
32
+ project: ProjectStatus;
33
+ }>;
34
+ events(id: string, since?: number, limit?: number): Promise<{
35
+ events: LoomEvent[];
36
+ }>;
37
+ send(id: string, text: string, agentId?: string): Promise<{
38
+ agentId: string;
39
+ }>;
40
+ handoff(id: string, to: string): Promise<{
41
+ from: string | null;
42
+ to: string;
43
+ }>;
44
+ interrupt(id: string): Promise<{
45
+ interrupted: string | null;
46
+ }>;
47
+ decision(id: string, text: string): Promise<{
48
+ event: LoomEvent;
49
+ }>;
50
+ startRoute(id: string, task: string, spec?: string | RouteStepSpec[], opts?: {
51
+ router?: "rules" | "llm";
52
+ maxHops?: number;
53
+ }): Promise<{
54
+ route: RouteState;
55
+ }>;
56
+ routeState(id: string): Promise<{
57
+ route: RouteState | null;
58
+ }>;
59
+ abortRoute(id: string): Promise<{
60
+ route: RouteState;
61
+ }>;
62
+ costs(id: string): Promise<{
63
+ costs: CostSummary;
64
+ }>;
65
+ memory(id: string): Promise<{
66
+ memory: UnifiedMemory;
67
+ }>;
68
+ importMemory(id: string): Promise<{
69
+ imported: number;
70
+ sources: string[];
71
+ }>;
72
+ /** The learned memory units (the brain), newest first, with a kind breakdown. */
73
+ brain(id: string, opts?: {
74
+ kind?: string;
75
+ limit?: number;
76
+ }): Promise<{
77
+ memories: Memory[];
78
+ stats: {
79
+ total: number;
80
+ byKind: Record<string, number>;
81
+ expired: number;
82
+ };
83
+ }>;
84
+ /** The board: cards (yours, agents, issues, PRs) each in one of four columns. */
85
+ board(id: string): Promise<BoardData>;
86
+ tree(id: string): Promise<{
87
+ tree: {
88
+ git: boolean;
89
+ branch?: string;
90
+ files: Array<{
91
+ status: string;
92
+ path: string;
93
+ }>;
94
+ patch: string;
95
+ truncated: boolean;
96
+ };
97
+ }>;
98
+ newPairingToken(): Promise<{
99
+ token: string;
100
+ expiresAt: number;
101
+ url: string;
102
+ }>;
103
+ pairedClients(): Promise<{
104
+ clients: Array<{
105
+ id: string;
106
+ name: string;
107
+ createdAt: number;
108
+ push?: boolean;
109
+ }>;
110
+ }>;
111
+ pushTest(): Promise<{
112
+ sent: number;
113
+ }>;
114
+ revokeClient(clientId: string): Promise<{
115
+ revoked: boolean;
116
+ }>;
117
+ /** Live event stream; returns a close function. */
118
+ subscribe(onEvent: (projectId: string, event: LoomEvent) => void, projectId?: string): () => void;
119
+ }
120
+ /**
121
+ * Get a client for a running daemon, starting one (detached) if needed.
122
+ * A healthy daemon running an OLDER BUILD than this CLI is restarted —
123
+ * stale daemons are the classic "failed to fetch / missing route" cause.
124
+ */
125
+ export declare function ensureDaemon(): Promise<DaemonClient>;
126
+ export declare function daemonRunning(): Promise<DaemonConfig | null>;
127
+ export declare function stopDaemon(): Promise<boolean>;
@@ -0,0 +1,237 @@
1
+ /**
2
+ * Thin daemon client used by every surface (CLI now, app later).
3
+ * Also owns daemon lifecycle: autostart-on-demand, health, shutdown.
4
+ */
5
+ import { spawn } from "node:child_process";
6
+ import { fileURLToPath } from "node:url";
7
+ import WebSocket from "ws";
8
+ import { readDaemonConfig, } from "../core/registry.js";
9
+ import { BUILD_REV } from "./server.js";
10
+ export class DaemonError extends Error {
11
+ status;
12
+ body;
13
+ constructor(message, status, body) {
14
+ super(message);
15
+ this.status = status;
16
+ this.body = body;
17
+ this.name = "DaemonError";
18
+ }
19
+ }
20
+ export class DaemonClient {
21
+ cfg;
22
+ constructor(cfg) {
23
+ this.cfg = cfg;
24
+ }
25
+ static fromDisk() {
26
+ const cfg = readDaemonConfig();
27
+ return cfg ? new DaemonClient(cfg) : null;
28
+ }
29
+ get baseUrl() {
30
+ return `http://${this.cfg.host}:${this.cfg.port}`;
31
+ }
32
+ async request(method, pathName, body) {
33
+ const res = await fetch(`${this.baseUrl}${pathName}`, {
34
+ method,
35
+ headers: {
36
+ authorization: `Bearer ${this.cfg.adminToken}`,
37
+ ...(body ? { "content-type": "application/json" } : {}),
38
+ },
39
+ ...(body ? { body: JSON.stringify(body) } : {}),
40
+ signal: AbortSignal.timeout(30_000),
41
+ });
42
+ const json = (await res.json().catch(() => ({})));
43
+ if (!res.ok) {
44
+ throw new DaemonError(String(json.message ?? json.error ?? `${method} ${pathName} → ${res.status}`), res.status, json);
45
+ }
46
+ return json;
47
+ }
48
+ health() {
49
+ return this.request("GET", "/api/health");
50
+ }
51
+ listProjects() {
52
+ return this.request("GET", "/api/projects");
53
+ }
54
+ addProject(dir, name) {
55
+ return this.request("POST", "/api/projects", { dir, ...(name ? { name } : {}) });
56
+ }
57
+ project(id) {
58
+ return this.request("GET", `/api/projects/${encodeURIComponent(id)}`);
59
+ }
60
+ events(id, since, limit) {
61
+ const params = new URLSearchParams();
62
+ if (since !== undefined)
63
+ params.set("since", String(since));
64
+ if (limit !== undefined)
65
+ params.set("limit", String(limit));
66
+ const qs = params.toString();
67
+ return this.request("GET", `/api/projects/${encodeURIComponent(id)}/events${qs ? `?${qs}` : ""}`);
68
+ }
69
+ send(id, text, agentId) {
70
+ return this.request("POST", `/api/projects/${encodeURIComponent(id)}/messages`, {
71
+ text,
72
+ ...(agentId ? { agentId } : {}),
73
+ });
74
+ }
75
+ handoff(id, to) {
76
+ return this.request("POST", `/api/projects/${encodeURIComponent(id)}/handoff`, { to });
77
+ }
78
+ interrupt(id) {
79
+ return this.request("POST", `/api/projects/${encodeURIComponent(id)}/interrupt`, {});
80
+ }
81
+ decision(id, text) {
82
+ return this.request("POST", `/api/projects/${encodeURIComponent(id)}/decisions`, { text });
83
+ }
84
+ startRoute(id, task, spec, opts = {}) {
85
+ return this.request("POST", `/api/projects/${encodeURIComponent(id)}/route`, {
86
+ task,
87
+ ...(spec !== undefined ? { spec } : {}),
88
+ ...(opts.router ? { router: opts.router } : {}),
89
+ ...(opts.maxHops ? { maxHops: opts.maxHops } : {}),
90
+ });
91
+ }
92
+ routeState(id) {
93
+ return this.request("GET", `/api/projects/${encodeURIComponent(id)}/route`);
94
+ }
95
+ abortRoute(id) {
96
+ return this.request("DELETE", `/api/projects/${encodeURIComponent(id)}/route`);
97
+ }
98
+ costs(id) {
99
+ return this.request("GET", `/api/projects/${encodeURIComponent(id)}/costs`);
100
+ }
101
+ memory(id) {
102
+ return this.request("GET", `/api/projects/${encodeURIComponent(id)}/memory`);
103
+ }
104
+ importMemory(id) {
105
+ return this.request("POST", `/api/projects/${encodeURIComponent(id)}/memory/import`, {});
106
+ }
107
+ /** The learned memory units (the brain), newest first, with a kind breakdown. */
108
+ brain(id, opts = {}) {
109
+ const qs = new URLSearchParams();
110
+ if (opts.kind)
111
+ qs.set("kind", opts.kind);
112
+ if (opts.limit)
113
+ qs.set("limit", String(opts.limit));
114
+ const q = qs.toString();
115
+ return this.request("GET", `/api/projects/${encodeURIComponent(id)}/brain${q ? `?${q}` : ""}`);
116
+ }
117
+ /** The board: cards (yours, agents, issues, PRs) each in one of four columns. */
118
+ board(id) {
119
+ return this.request("GET", `/api/projects/${encodeURIComponent(id)}/board`);
120
+ }
121
+ tree(id) {
122
+ return this.request("GET", `/api/projects/${encodeURIComponent(id)}/tree`);
123
+ }
124
+ newPairingToken() {
125
+ return this.request("POST", "/api/pair/new", {});
126
+ }
127
+ pairedClients() {
128
+ return this.request("GET", "/api/pair/clients");
129
+ }
130
+ pushTest() {
131
+ return this.request("POST", "/api/push/test", {});
132
+ }
133
+ revokeClient(clientId) {
134
+ return this.request("DELETE", `/api/pair/clients/${encodeURIComponent(clientId)}`);
135
+ }
136
+ /** Live event stream; returns a close function. */
137
+ subscribe(onEvent, projectId) {
138
+ const params = new URLSearchParams({ token: this.cfg.adminToken });
139
+ if (projectId)
140
+ params.set("project", projectId);
141
+ const ws = new WebSocket(`ws://${this.cfg.host}:${this.cfg.port}/ws?${params}`);
142
+ ws.on("message", (data) => {
143
+ try {
144
+ const frame = JSON.parse(String(data));
145
+ if (frame.type === "event" && frame.event) {
146
+ onEvent(frame.projectId ?? "", frame.event);
147
+ }
148
+ }
149
+ catch {
150
+ // Ignore malformed frames.
151
+ }
152
+ });
153
+ ws.on("error", () => { });
154
+ return () => ws.close();
155
+ }
156
+ }
157
+ // ---------------------------------------------------------------------------
158
+ // Lifecycle helpers
159
+ // ---------------------------------------------------------------------------
160
+ async function healthProbe(cfg) {
161
+ try {
162
+ const res = await fetch(`http://${cfg.host}:${cfg.port}/api/health`, {
163
+ signal: AbortSignal.timeout(1500),
164
+ });
165
+ if (!res.ok)
166
+ return { ok: false };
167
+ const body = (await res.json().catch(() => ({})));
168
+ return { ok: true, ...(body.rev ? { rev: body.rev } : {}) };
169
+ }
170
+ catch {
171
+ return { ok: false };
172
+ }
173
+ }
174
+ async function healthy(cfg) {
175
+ return (await healthProbe(cfg)).ok;
176
+ }
177
+ /**
178
+ * Get a client for a running daemon, starting one (detached) if needed.
179
+ * A healthy daemon running an OLDER BUILD than this CLI is restarted —
180
+ * stale daemons are the classic "failed to fetch / missing route" cause.
181
+ */
182
+ export async function ensureDaemon() {
183
+ let cfg = readDaemonConfig();
184
+ if (cfg) {
185
+ const probe = await healthProbe(cfg);
186
+ if (probe.ok && probe.rev === BUILD_REV)
187
+ return new DaemonClient(cfg);
188
+ if (probe.ok && probe.rev !== BUILD_REV) {
189
+ // Stale build — restart it in place.
190
+ await stopDaemon();
191
+ const gone = Date.now() + 5000;
192
+ while (Date.now() < gone && (await healthy(cfg))) {
193
+ await new Promise((r) => setTimeout(r, 200));
194
+ }
195
+ }
196
+ }
197
+ const compiled = fileURLToPath(new URL("../cli/index.js", import.meta.url));
198
+ const devSource = fileURLToPath(new URL("../cli/index.ts", import.meta.url));
199
+ const { existsSync } = await import("node:fs");
200
+ // Built install → node dist/cli/index.js; dev checkout → tsx src/cli/index.ts.
201
+ const [entry, extraArgs] = existsSync(compiled)
202
+ ? [compiled, []]
203
+ : [devSource, ["--import", "tsx"]];
204
+ const child = spawn(process.execPath, [...extraArgs, entry, "daemon"], {
205
+ detached: true,
206
+ stdio: "ignore",
207
+ env: process.env,
208
+ });
209
+ child.unref();
210
+ const deadline = Date.now() + 15_000;
211
+ while (Date.now() < deadline) {
212
+ await new Promise((r) => setTimeout(r, 300));
213
+ cfg = readDaemonConfig();
214
+ if (cfg && (await healthy(cfg)))
215
+ return new DaemonClient(cfg);
216
+ }
217
+ throw new Error("could not start the loom daemon (try `loom daemon` in the foreground)");
218
+ }
219
+ export async function daemonRunning() {
220
+ const cfg = readDaemonConfig();
221
+ if (cfg && (await healthy(cfg)))
222
+ return cfg;
223
+ return null;
224
+ }
225
+ export async function stopDaemon() {
226
+ const cfg = readDaemonConfig();
227
+ if (!cfg?.pid)
228
+ return false;
229
+ try {
230
+ process.kill(cfg.pid, "SIGTERM");
231
+ return true;
232
+ }
233
+ catch {
234
+ return false;
235
+ }
236
+ }
237
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/daemon/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Geist Variable (woff2), embedded so the daemon can serve it at
3
+ * /app/fonts/geist.woff2 with zero build steps or CDN calls.
4
+ *
5
+ * Geist is (c) Vercel, licensed under the SIL Open Font License 1.1
6
+ * (https://github.com/vercel/geist-font/blob/main/LICENSE.TXT).
7
+ * The Loom UI adopts the Orca design system (https://github.com/stablyai/orca,
8
+ * MIT) which ships this same face as its UI sans.
9
+ */
10
+ export declare const GEIST_WOFF2: Buffer;