loopable-cli 0.2.0 → 0.3.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 (138) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/_connectorId-CDCuSgpN.js +1 -0
  3. package/.output/public/assets/_loopId-DOnIsVTW.js +1 -0
  4. package/.output/public/assets/_taskId-BO5MZnlZ.js +1 -0
  5. package/.output/public/assets/agents-CBozi7oi.js +1 -0
  6. package/.output/public/assets/alert-Bn_wjgTX.js +1 -0
  7. package/.output/public/assets/button-K3ypIhAZ.js +1 -0
  8. package/.output/public/assets/card-DiVnaTIE.js +1 -0
  9. package/.output/public/assets/chevron-right-BrctLtFK.js +1 -0
  10. package/.output/public/assets/connection-status-DKWelvLO.js +1 -0
  11. package/.output/public/assets/connector-icon-CEbdE71G.js +1 -0
  12. package/.output/public/assets/connectors-JyX3IzJj.js +1 -0
  13. package/.output/public/assets/gaps-PjmcbaWo.js +1 -0
  14. package/.output/public/assets/inbox-CujRR0Cz.js +1 -0
  15. package/.output/public/assets/index-C9SQ_Baq.js +16 -0
  16. package/.output/public/assets/loop-form-Dw3cuTzw.js +1 -0
  17. package/.output/public/assets/loops-DcEfZa2_.js +1 -0
  18. package/.output/public/assets/manifests-yJpevyye.js +1 -0
  19. package/.output/public/assets/new-CwsnNuRW.js +1 -0
  20. package/.output/public/assets/page-bvnfRMum.js +1 -0
  21. package/.output/public/assets/play-yHLs4DjK.js +1 -0
  22. package/.output/public/assets/plus-Ber25lrU.js +1 -0
  23. package/.output/public/assets/preload-helper-BoU_7EQC.js +3 -0
  24. package/.output/public/assets/refresh-cw-BzSY7M8I.js +1 -0
  25. package/.output/public/assets/rotate-ccw-DLv9EfCX.js +1 -0
  26. package/.output/public/assets/runners-DzX-RU3i.js +2 -0
  27. package/.output/public/assets/select-C9grIFwG.js +1 -0
  28. package/.output/public/assets/setting-fields-DUc3npgh.js +3 -0
  29. package/.output/public/assets/styles-B9B98zLk.css +2 -0
  30. package/.output/public/assets/switch-DwABVI6d.js +1 -0
  31. package/.output/public/assets/task-list-Ddk8-qt7.js +1 -0
  32. package/.output/public/assets/textarea-Ds-gIYUQ.js +1 -0
  33. package/.output/public/assets/time-goBWd-5J.js +1 -0
  34. package/.output/public/assets/use-live-tasks-DZNNuECy.js +1 -0
  35. package/.output/public/assets/useCompositeListItem-P4Nmmn7j.js +1 -0
  36. package/.output/public/assets/usePositioner-B7i9Ejzh.js +1 -0
  37. package/.output/server/_chunks/ssr-renderer.mjs +1 -1
  38. package/.output/server/_connectorId-COuQN02a.mjs +512 -0
  39. package/.output/server/_libs/@base-ui/react+[...].mjs +1410 -804
  40. package/.output/server/_libs/@tanstack/react-router+[...].mjs +1 -1
  41. package/.output/server/_libs/lucide-react.mjs +93 -84
  42. package/.output/server/_libs/next-themes.mjs +1 -1
  43. package/.output/server/_libs/sonner.mjs +1 -1
  44. package/.output/server/_loopId-CZh6_Yhr.mjs +310 -0
  45. package/.output/server/_ssr/{callback-D20cVD2w.mjs → access-DTttr563.mjs} +37 -20
  46. package/.output/server/_ssr/{agents-CrUmIQpi.mjs → agents-B_qo1gpL.mjs} +196 -7
  47. package/.output/server/_ssr/{agents-Dms_6TBF.mjs → agents-Bz10gz_m.mjs} +8 -8
  48. package/.output/server/_ssr/agents-CjbOUp3Z.mjs +206 -0
  49. package/.output/server/_ssr/{alert-DQvzE7bu.mjs → alert-C2WBWfzo.mjs} +2 -2
  50. package/.output/server/_ssr/card-r1cV-PCN.mjs +36 -0
  51. package/.output/server/_ssr/{client-BtVRVhQ2.mjs → client-Dk3SD8Il.mjs} +5 -1
  52. package/.output/server/_ssr/connection-status-BogAL-Fj.mjs +32 -0
  53. package/.output/server/_ssr/{connections-ypex3qUd.mjs → connections-Cqvb6Gw2.mjs} +1109 -263
  54. package/.output/server/_ssr/connector-icon-DrhVbhs6.mjs +190 -0
  55. package/.output/server/_ssr/connectors-BfS5tQKr.mjs +81 -0
  56. package/.output/server/_ssr/{connectors-BZly0yGF.mjs → connectors-DJI-rzPU.mjs} +21 -10
  57. package/.output/server/_ssr/{createServerRpc-DPDrnFdH.mjs → createServerRpc-DDrp2nLT.mjs} +2 -2
  58. package/.output/server/_ssr/{gaps-D2Zh8sEo.mjs → gaps-CcvHiLcj.mjs} +18 -10
  59. package/.output/server/_ssr/inbox-D1ef761v.mjs +178 -0
  60. package/.output/server/_ssr/loop-form-DWwOR05R.mjs +346 -0
  61. package/.output/server/_ssr/{loops-Og_G3KyZ.mjs → loops-6WhUe_lc.mjs} +228 -25
  62. package/.output/server/_ssr/loops-DHPjzG-t.mjs +217 -0
  63. package/.output/server/_ssr/new-ChKBdcXJ.mjs +245 -0
  64. package/.output/server/_ssr/page-DZVxKvdn.mjs +120 -0
  65. package/.output/server/_ssr/{router-BbrBz36P.mjs → router-DdwREiOf.mjs} +167 -489
  66. package/.output/server/_ssr/runners-CK9Cx9fS.mjs +217 -0
  67. package/.output/server/_ssr/runners-CrznFPHt.mjs +140 -0
  68. package/.output/server/_ssr/runners-W-pgo5yo.mjs +55 -0
  69. package/.output/server/_ssr/{secrets-CRnpwGBh.mjs → secrets-CV5scFlt.mjs} +2 -2
  70. package/.output/server/_ssr/select-BtndHhHb.mjs +76 -0
  71. package/.output/server/_ssr/{setting-fields-mpXfGftI.mjs → setting-fields-LNgywAW7.mjs} +25 -20
  72. package/.output/server/_ssr/ssr.mjs +49 -40
  73. package/.output/server/_ssr/{start-BgTj-h_C.mjs → start-C_j-e4vF.mjs} +10 -6
  74. package/.output/server/_ssr/{switch-1pnd_bPJ.mjs → switch-odxNO_S4.mjs} +3 -3
  75. package/.output/server/_ssr/task-list-Dnmq_WeE.mjs +150 -0
  76. package/.output/server/_ssr/{tasks-LIi-W4cy.mjs → tasks-D-kXLgVP.mjs} +13 -13
  77. package/.output/server/_ssr/{tasks-B_QmDFVs.mjs → tasks-D7aUvA33.mjs} +55 -17
  78. package/.output/server/_ssr/{textarea-CHJTKtsJ.mjs → textarea-D2c_vTIC.mjs} +2 -2
  79. package/.output/server/_ssr/time-Cy8TZP0Z.mjs +13 -0
  80. package/.output/server/_ssr/use-live-tasks-BzhTkEOL.mjs +40 -0
  81. package/.output/server/_tanstack-start-manifest_v-2HUdn-2E.mjs +166 -0
  82. package/.output/server/_taskId-D3KkNJW1.mjs +263 -0
  83. package/.output/server/index.mjs +204 -162
  84. package/README.md +54 -19
  85. package/dist/cli.mjs +185 -67
  86. package/dist/dispatcher.mjs +1443 -277
  87. package/dist/runner.mjs +333 -46
  88. package/drizzle/0025_prompt_tasks_done.sql +2 -0
  89. package/drizzle/0026_guidance_into_prompt.sql +3 -0
  90. package/drizzle/0027_relative_folders.sql +5 -0
  91. package/drizzle/0028_runner_version.sql +5 -0
  92. package/drizzle/meta/_journal.json +29 -1
  93. package/package.json +23 -17
  94. package/.output/public/assets/_connectorId-m67WbiJ8.js +0 -1
  95. package/.output/public/assets/_loopId-Bf4K5sdd.js +0 -1
  96. package/.output/public/assets/_taskId-eCKkcVOx.js +0 -1
  97. package/.output/public/assets/alert-BT2EVMJP.js +0 -1
  98. package/.output/public/assets/arrow-left-CWUZt6k2.js +0 -1
  99. package/.output/public/assets/arrow-right-dy_oOg_c.js +0 -1
  100. package/.output/public/assets/connection-status-DCqqmY_6.js +0 -1
  101. package/.output/public/assets/connector-icon-qGpNsPgH.js +0 -1
  102. package/.output/public/assets/connectors-DxXlc9zF.js +0 -1
  103. package/.output/public/assets/external-link-DC11orFA.js +0 -1
  104. package/.output/public/assets/gaps-CoTA-PzA.js +0 -1
  105. package/.output/public/assets/inbox-CLEXUXCI.js +0 -1
  106. package/.output/public/assets/index-Cndsw84p.js +0 -16
  107. package/.output/public/assets/loader-B4Epchm_.js +0 -1
  108. package/.output/public/assets/loop-form-BvizlZdR.js +0 -1
  109. package/.output/public/assets/loops-Dbe_mf5T.js +0 -1
  110. package/.output/public/assets/new-DPEaXKAY.js +0 -1
  111. package/.output/public/assets/play-DD4xQgvi.js +0 -1
  112. package/.output/public/assets/preload-helper-CfdAYKD7.js +0 -3
  113. package/.output/public/assets/rolldown-runtime-CbXtAM7H.js +0 -1
  114. package/.output/public/assets/runners-BVBggS5B.js +0 -1
  115. package/.output/public/assets/select-Cppu-hti.js +0 -1
  116. package/.output/public/assets/setting-fields-BT1naVJX.js +0 -3
  117. package/.output/public/assets/styles-D3sonCfX.css +0 -2
  118. package/.output/public/assets/switch-hRIbNGOj.js +0 -1
  119. package/.output/public/assets/task-list-CrptnI1N.js +0 -1
  120. package/.output/public/assets/textarea-Fyuzi6Vp.js +0 -1
  121. package/.output/public/assets/trash-2-BXZzBsoV.js +0 -1
  122. package/.output/public/assets/useValueChanged-VVyq4hb9.js +0 -1
  123. package/.output/server/_connectorId-DcSnoRjk.mjs +0 -421
  124. package/.output/server/_loopId-G_TAkYtS.mjs +0 -272
  125. package/.output/server/_ssr/access-B7TcOZ7F.mjs +0 -42
  126. package/.output/server/_ssr/connection-status-BZr3Y-IC.mjs +0 -31
  127. package/.output/server/_ssr/connector-icon-CFrrHjzR.mjs +0 -37
  128. package/.output/server/_ssr/connectors-4yzKb0KG.mjs +0 -106
  129. package/.output/server/_ssr/inbox-C2VBGLa5.mjs +0 -114
  130. package/.output/server/_ssr/loop-form-D-U-kU4k.mjs +0 -413
  131. package/.output/server/_ssr/loops-D0XJ8eBb.mjs +0 -222
  132. package/.output/server/_ssr/new-CajvgIog.mjs +0 -169
  133. package/.output/server/_ssr/runners-B_WuF8UJ.mjs +0 -32
  134. package/.output/server/_ssr/runners-D-0_lfiq.mjs +0 -106
  135. package/.output/server/_ssr/runners-zqF_zbEc.mjs +0 -116
  136. package/.output/server/_ssr/task-list-BnQJ94Dk.mjs +0 -187
  137. package/.output/server/_tanstack-start-manifest_v-BCHAazE8.mjs +0 -129
  138. package/.output/server/_taskId-CIv0ajIx.mjs +0 -256
@@ -14,254 +14,296 @@ var public_assets_data_default = {
14
14
  "/apple-touch-icon.png": {
15
15
  "type": "image/png",
16
16
  "etag": "\"6e2-DpcPkINR92ffme+04R4KBRmf4jE\"",
17
- "mtime": "2026-09-18T01:57:05.242Z",
17
+ "mtime": "2026-10-05T23:18:14.326Z",
18
18
  "size": 1762,
19
19
  "path": "../public/apple-touch-icon.png"
20
20
  },
21
21
  "/favicon.svg": {
22
22
  "type": "image/svg+xml",
23
23
  "etag": "\"1b3-uNgdb2Q4nmFEpsmW/cpMJbfKeng\"",
24
- "mtime": "2026-09-18T01:57:05.242Z",
24
+ "mtime": "2026-10-05T23:18:14.326Z",
25
25
  "size": 435,
26
26
  "path": "../public/favicon.svg"
27
27
  },
28
- "/assets/_taskId-eCKkcVOx.js": {
28
+ "/assets/_connectorId-CDCuSgpN.js": {
29
29
  "type": "text/javascript; charset=utf-8",
30
- "etag": "\"19fb-Z2KGDYJ6HLgyI9vP4IN5y+LPE0I\"",
31
- "mtime": "2026-09-18T01:57:04.912Z",
32
- "size": 6651,
33
- "path": "../public/assets/_taskId-eCKkcVOx.js"
30
+ "etag": "\"34a7-IUDgJohPQyOsDHdV/5A7yNMOwkg\"",
31
+ "mtime": "2026-10-05T23:18:13.855Z",
32
+ "size": 13479,
33
+ "path": "../public/assets/_connectorId-CDCuSgpN.js"
34
34
  },
35
- "/assets/_connectorId-m67WbiJ8.js": {
35
+ "/assets/_taskId-BO5MZnlZ.js": {
36
36
  "type": "text/javascript; charset=utf-8",
37
- "etag": "\"3038-B0yGvA3w6xDB3cBG5OwpqN6owIE\"",
38
- "mtime": "2026-09-18T01:57:04.911Z",
39
- "size": 12344,
40
- "path": "../public/assets/_connectorId-m67WbiJ8.js"
37
+ "etag": "\"1a33-wV+WeM638h9ux3vza7mZbQ3kfbM\"",
38
+ "mtime": "2026-10-05T23:18:13.855Z",
39
+ "size": 6707,
40
+ "path": "../public/assets/_taskId-BO5MZnlZ.js"
41
41
  },
42
- "/assets/alert-BT2EVMJP.js": {
42
+ "/assets/agents-CBozi7oi.js": {
43
43
  "type": "text/javascript; charset=utf-8",
44
- "etag": "\"518-O5UdHKN5UMK7ObJJfTGdkF6Ce2Y\"",
45
- "mtime": "2026-09-18T01:57:04.912Z",
46
- "size": 1304,
47
- "path": "../public/assets/alert-BT2EVMJP.js"
44
+ "etag": "\"1345-6elPLC9b7/viDAmycTJHpiCp94o\"",
45
+ "mtime": "2026-10-05T23:18:13.856Z",
46
+ "size": 4933,
47
+ "path": "../public/assets/agents-CBozi7oi.js"
48
48
  },
49
- "/assets/arrow-left-CWUZt6k2.js": {
49
+ "/assets/alert-Bn_wjgTX.js": {
50
50
  "type": "text/javascript; charset=utf-8",
51
- "etag": "\"a3-m5hDdztvA9zAbs7sHlKigsZ1zhI\"",
52
- "mtime": "2026-09-18T01:57:04.912Z",
53
- "size": 163,
54
- "path": "../public/assets/arrow-left-CWUZt6k2.js"
51
+ "etag": "\"512-H3jYu5RonBQQIJvLc8RxomisWcE\"",
52
+ "mtime": "2026-10-05T23:18:13.856Z",
53
+ "size": 1298,
54
+ "path": "../public/assets/alert-Bn_wjgTX.js"
55
55
  },
56
- "/assets/arrow-right-dy_oOg_c.js": {
56
+ "/assets/_loopId-DOnIsVTW.js": {
57
57
  "type": "text/javascript; charset=utf-8",
58
- "etag": "\"a3-7KoKsSsK6/3kMyHB+xQq/+3ZuYI\"",
59
- "mtime": "2026-09-18T01:57:04.912Z",
60
- "size": 163,
61
- "path": "../public/assets/arrow-right-dy_oOg_c.js"
58
+ "etag": "\"195d-GujkwM/vDe23v1OyENClIGhemGI\"",
59
+ "mtime": "2026-10-05T23:18:13.855Z",
60
+ "size": 6493,
61
+ "path": "../public/assets/_loopId-DOnIsVTW.js"
62
62
  },
63
- "/assets/connection-status-DCqqmY_6.js": {
63
+ "/assets/button-K3ypIhAZ.js": {
64
64
  "type": "text/javascript; charset=utf-8",
65
- "etag": "\"17c-sqOdQ5h8t+NrtNGo4gNUn47RJ5U\"",
66
- "mtime": "2026-09-18T01:57:04.912Z",
67
- "size": 380,
68
- "path": "../public/assets/connection-status-DCqqmY_6.js"
65
+ "etag": "\"31ac-a3StExGms0X+9tV2FlRL+mVCiqQ\"",
66
+ "mtime": "2026-10-05T23:18:13.856Z",
67
+ "size": 12716,
68
+ "path": "../public/assets/button-K3ypIhAZ.js"
69
69
  },
70
- "/assets/_loopId-Bf4K5sdd.js": {
70
+ "/assets/card-DiVnaTIE.js": {
71
71
  "type": "text/javascript; charset=utf-8",
72
- "etag": "\"49d5-LFWuAYujZPtlfin5QFhXi9wzM6U\"",
73
- "mtime": "2026-09-18T01:57:04.912Z",
74
- "size": 18901,
75
- "path": "../public/assets/_loopId-Bf4K5sdd.js"
72
+ "etag": "\"51c-MBQ28GRB77i9V3GttyjJCXH5Ho0\"",
73
+ "mtime": "2026-10-05T23:18:13.856Z",
74
+ "size": 1308,
75
+ "path": "../public/assets/card-DiVnaTIE.js"
76
76
  },
77
- "/assets/external-link-DC11orFA.js": {
77
+ "/assets/chevron-right-BrctLtFK.js": {
78
78
  "type": "text/javascript; charset=utf-8",
79
- "etag": "\"f9-Hk5Mt6w6TLri3QHcB8yNexVi7wU\"",
80
- "mtime": "2026-09-18T01:57:04.912Z",
81
- "size": 249,
82
- "path": "../public/assets/external-link-DC11orFA.js"
79
+ "etag": "\"80-7lRbXBo5rsYwR2128RL7e1opGaI\"",
80
+ "mtime": "2026-10-05T23:18:13.856Z",
81
+ "size": 128,
82
+ "path": "../public/assets/chevron-right-BrctLtFK.js"
83
83
  },
84
- "/assets/connector-icon-qGpNsPgH.js": {
84
+ "/assets/connector-icon-CEbdE71G.js": {
85
85
  "type": "text/javascript; charset=utf-8",
86
- "etag": "\"a36-Rylw68kFhEusDW1xHh1q7BKNQnM\"",
87
- "mtime": "2026-09-18T01:57:04.912Z",
88
- "size": 2614,
89
- "path": "../public/assets/connector-icon-qGpNsPgH.js"
86
+ "etag": "\"347c-bZ3czGhdAEymZzQrljxbvZS5zl8\"",
87
+ "mtime": "2026-10-05T23:18:13.856Z",
88
+ "size": 13436,
89
+ "path": "../public/assets/connector-icon-CEbdE71G.js"
90
90
  },
91
- "/assets/connectors-DxXlc9zF.js": {
91
+ "/assets/gaps-PjmcbaWo.js": {
92
92
  "type": "text/javascript; charset=utf-8",
93
- "etag": "\"94c-zF7UvjbwGoHBqmurc1jz9vIUIGc\"",
94
- "mtime": "2026-09-18T01:57:04.912Z",
95
- "size": 2380,
96
- "path": "../public/assets/connectors-DxXlc9zF.js"
93
+ "etag": "\"830-K+Qc8OCw6EFbiRQJb+ZBoEl5FuY\"",
94
+ "mtime": "2026-10-05T23:18:13.856Z",
95
+ "size": 2096,
96
+ "path": "../public/assets/gaps-PjmcbaWo.js"
97
97
  },
98
- "/assets/gaps-CoTA-PzA.js": {
98
+ "/assets/connectors-JyX3IzJj.js": {
99
99
  "type": "text/javascript; charset=utf-8",
100
- "etag": "\"5ac-iGQjB0QT5cfADx9ohYAGXEOQk2c\"",
101
- "mtime": "2026-09-18T01:57:04.912Z",
102
- "size": 1452,
103
- "path": "../public/assets/gaps-CoTA-PzA.js"
100
+ "etag": "\"72c-EVOOaen9vr4EshJ3AlQ7z9aVbsU\"",
101
+ "mtime": "2026-10-05T23:18:13.856Z",
102
+ "size": 1836,
103
+ "path": "../public/assets/connectors-JyX3IzJj.js"
104
104
  },
105
105
  "/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2": {
106
106
  "type": "font/woff2",
107
107
  "etag": "\"1cfc-yYSDXNlt/tTRaj6rJo8ZMqvY7pQ\"",
108
- "mtime": "2026-09-18T01:57:04.913Z",
108
+ "mtime": "2026-10-05T23:18:13.859Z",
109
109
  "size": 7420,
110
110
  "path": "../public/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2"
111
111
  },
112
+ "/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2": {
113
+ "type": "font/woff2",
114
+ "etag": "\"4080-mZu3Z7sOWqglha+kefNbUA9Pp+Q\"",
115
+ "mtime": "2026-10-05T23:18:13.859Z",
116
+ "size": 16512,
117
+ "path": "../public/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2"
118
+ },
112
119
  "/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2": {
113
120
  "type": "font/woff2",
114
121
  "etag": "\"3aec-5kpQSZEtAzzU5kdiuro3Zr2YR54\"",
115
- "mtime": "2026-09-18T01:57:04.913Z",
122
+ "mtime": "2026-10-05T23:18:13.859Z",
116
123
  "size": 15084,
117
124
  "path": "../public/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2"
118
125
  },
126
+ "/assets/geist-latin-wght-normal-BgDaEnEv.woff2": {
127
+ "type": "font/woff2",
128
+ "etag": "\"72d8-9J+D7/6th5UzRxIgoFX9awJv47A\"",
129
+ "mtime": "2026-10-05T23:18:13.859Z",
130
+ "size": 29400,
131
+ "path": "../public/assets/geist-latin-wght-normal-BgDaEnEv.woff2"
132
+ },
119
133
  "/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2": {
120
134
  "type": "font/woff2",
121
135
  "etag": "\"1f44-6MZ7/PEEOeDVF0eHI650KpwKQV8\"",
122
- "mtime": "2026-09-18T01:57:04.914Z",
136
+ "mtime": "2026-10-05T23:18:13.859Z",
123
137
  "size": 8004,
124
138
  "path": "../public/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2"
125
139
  },
126
- "/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2": {
127
- "type": "font/woff2",
128
- "etag": "\"4080-mZu3Z7sOWqglha+kefNbUA9Pp+Q\"",
129
- "mtime": "2026-09-18T01:57:04.914Z",
130
- "size": 16512,
131
- "path": "../public/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2"
140
+ "/assets/inbox-CujRR0Cz.js": {
141
+ "type": "text/javascript; charset=utf-8",
142
+ "etag": "\"1561-8nH4d2WSoexyZjDnmylgJLGOnrg\"",
143
+ "mtime": "2026-10-05T23:18:13.856Z",
144
+ "size": 5473,
145
+ "path": "../public/assets/inbox-CujRR0Cz.js"
132
146
  },
133
- "/assets/loader-B4Epchm_.js": {
147
+ "/assets/loop-form-Dw3cuTzw.js": {
134
148
  "type": "text/javascript; charset=utf-8",
135
- "etag": "\"199-3kmluGVUQQj/qxW5n5mcbXA3Z/0\"",
136
- "mtime": "2026-09-18T01:57:04.912Z",
137
- "size": 409,
138
- "path": "../public/assets/loader-B4Epchm_.js"
149
+ "etag": "\"1be9-3uim5fcKfearkYTAyM2e6kIImtc\"",
150
+ "mtime": "2026-10-05T23:18:13.856Z",
151
+ "size": 7145,
152
+ "path": "../public/assets/loop-form-Dw3cuTzw.js"
139
153
  },
140
- "/assets/loop-form-BvizlZdR.js": {
154
+ "/assets/index-C9SQ_Baq.js": {
141
155
  "type": "text/javascript; charset=utf-8",
142
- "etag": "\"2a3d-th5nQjNmPPTjVpRO45NjOMt9Ctk\"",
143
- "mtime": "2026-09-18T01:57:04.912Z",
144
- "size": 10813,
145
- "path": "../public/assets/loop-form-BvizlZdR.js"
156
+ "etag": "\"4e7bc-N0medteM/sMNhOo4Y8JlWqys26I\"",
157
+ "mtime": "2026-10-05T23:18:13.855Z",
158
+ "size": 321468,
159
+ "path": "../public/assets/index-C9SQ_Baq.js"
146
160
  },
147
- "/assets/inbox-CLEXUXCI.js": {
161
+ "/assets/loops-DcEfZa2_.js": {
148
162
  "type": "text/javascript; charset=utf-8",
149
- "etag": "\"af6-+Y3pLzim7gzbWl3qF1wDqYCvIOI\"",
150
- "mtime": "2026-09-18T01:57:04.912Z",
151
- "size": 2806,
152
- "path": "../public/assets/inbox-CLEXUXCI.js"
163
+ "etag": "\"6a97-zHHr+/aE9xIobsfkVUGfqHaRKNI\"",
164
+ "mtime": "2026-10-05T23:18:13.857Z",
165
+ "size": 27287,
166
+ "path": "../public/assets/loops-DcEfZa2_.js"
153
167
  },
154
- "/assets/geist-latin-wght-normal-BgDaEnEv.woff2": {
155
- "type": "font/woff2",
156
- "etag": "\"72d8-9J+D7/6th5UzRxIgoFX9awJv47A\"",
157
- "mtime": "2026-09-18T01:57:04.914Z",
158
- "size": 29400,
159
- "path": "../public/assets/geist-latin-wght-normal-BgDaEnEv.woff2"
168
+ "/assets/manifests-yJpevyye.js": {
169
+ "type": "text/javascript; charset=utf-8",
170
+ "etag": "\"644-hIvlgVVCDwLCaT/UuMEfAxnzKQM\"",
171
+ "mtime": "2026-10-05T23:18:13.857Z",
172
+ "size": 1604,
173
+ "path": "../public/assets/manifests-yJpevyye.js"
174
+ },
175
+ "/assets/connection-status-DKWelvLO.js": {
176
+ "type": "text/javascript; charset=utf-8",
177
+ "etag": "\"238-Bs8KXkqFT6oO1vHIPQFlTZYFlmk\"",
178
+ "mtime": "2026-10-05T23:18:13.856Z",
179
+ "size": 568,
180
+ "path": "../public/assets/connection-status-DKWelvLO.js"
160
181
  },
161
- "/assets/index-Cndsw84p.js": {
182
+ "/assets/new-CwsnNuRW.js": {
162
183
  "type": "text/javascript; charset=utf-8",
163
- "etag": "\"4f15c-FwR8sodSOPSkc8JjlnY8zhtEYwg\"",
164
- "mtime": "2026-09-18T01:57:04.911Z",
165
- "size": 323932,
166
- "path": "../public/assets/index-Cndsw84p.js"
184
+ "etag": "\"1134-XmQlOHOwPgThXSj2F5c1PklXZLM\"",
185
+ "mtime": "2026-10-05T23:18:13.857Z",
186
+ "size": 4404,
187
+ "path": "../public/assets/new-CwsnNuRW.js"
167
188
  },
168
- "/assets/loops-Dbe_mf5T.js": {
189
+ "/assets/page-bvnfRMum.js": {
169
190
  "type": "text/javascript; charset=utf-8",
170
- "etag": "\"13a2-sLRxrcCS5txEO/d9gR66iYDY9sA\"",
171
- "mtime": "2026-09-18T01:57:04.912Z",
172
- "size": 5026,
173
- "path": "../public/assets/loops-Dbe_mf5T.js"
191
+ "etag": "\"aaf-T29Udqf+EolfmsoUIwdvUJCFOfk\"",
192
+ "mtime": "2026-10-05T23:18:13.857Z",
193
+ "size": 2735,
194
+ "path": "../public/assets/page-bvnfRMum.js"
174
195
  },
175
- "/assets/new-DPEaXKAY.js": {
196
+ "/assets/plus-Ber25lrU.js": {
176
197
  "type": "text/javascript; charset=utf-8",
177
- "etag": "\"ca3-E+1vh2N3bwxNaprUu4qe3PpypEo\"",
178
- "mtime": "2026-09-18T01:57:04.913Z",
179
- "size": 3235,
180
- "path": "../public/assets/new-DPEaXKAY.js"
198
+ "etag": "\"97-lYmBVbASHr4M29XmcRIe+1I6liI\"",
199
+ "mtime": "2026-10-05T23:18:13.857Z",
200
+ "size": 151,
201
+ "path": "../public/assets/plus-Ber25lrU.js"
181
202
  },
182
- "/assets/play-DD4xQgvi.js": {
203
+ "/assets/play-yHLs4DjK.js": {
183
204
  "type": "text/javascript; charset=utf-8",
184
- "etag": "\"bc-alsbjWPSyChVi7eXGM6zPUOzF28\"",
185
- "mtime": "2026-09-18T01:57:04.913Z",
205
+ "etag": "\"bc-EP4b/5OALd5znWpm5fnSSbR8bB8\"",
206
+ "mtime": "2026-10-05T23:18:13.857Z",
186
207
  "size": 188,
187
- "path": "../public/assets/play-DD4xQgvi.js"
208
+ "path": "../public/assets/play-yHLs4DjK.js"
188
209
  },
189
- "/assets/preload-helper-CfdAYKD7.js": {
210
+ "/assets/preload-helper-BoU_7EQC.js": {
190
211
  "type": "text/javascript; charset=utf-8",
191
- "etag": "\"25e66-CtN8yTaaHYxIKlY6y6/HKCvmwm0\"",
192
- "mtime": "2026-09-18T01:57:04.913Z",
193
- "size": 155238,
194
- "path": "../public/assets/preload-helper-CfdAYKD7.js"
212
+ "etag": "\"2242c-LoXQ5+qtY8ryICbzNI0+Qxj6bno\"",
213
+ "mtime": "2026-10-05T23:18:13.857Z",
214
+ "size": 140332,
215
+ "path": "../public/assets/preload-helper-BoU_7EQC.js"
195
216
  },
196
- "/assets/rolldown-runtime-CbXtAM7H.js": {
217
+ "/assets/refresh-cw-BzSY7M8I.js": {
197
218
  "type": "text/javascript; charset=utf-8",
198
- "etag": "\"24d-+aXgvbJ1Wwcp2A8AXKIBByksYC8\"",
199
- "mtime": "2026-09-18T01:57:04.913Z",
200
- "size": 589,
201
- "path": "../public/assets/rolldown-runtime-CbXtAM7H.js"
219
+ "etag": "\"13f-I3Dkiv9XX/MGlLWA828ovRIwMC4\"",
220
+ "mtime": "2026-10-05T23:18:13.857Z",
221
+ "size": 319,
222
+ "path": "../public/assets/refresh-cw-BzSY7M8I.js"
202
223
  },
203
- "/assets/runners-BVBggS5B.js": {
224
+ "/assets/rotate-ccw-DLv9EfCX.js": {
204
225
  "type": "text/javascript; charset=utf-8",
205
- "etag": "\"af4-SEWDdnE8+QpWfX/ex/tT1I43knY\"",
206
- "mtime": "2026-09-18T01:57:04.913Z",
207
- "size": 2804,
208
- "path": "../public/assets/runners-BVBggS5B.js"
226
+ "etag": "\"c6-CbcdYuVzeaBViOg4/X+VvP2nplg\"",
227
+ "mtime": "2026-10-05T23:18:13.857Z",
228
+ "size": 198,
229
+ "path": "../public/assets/rotate-ccw-DLv9EfCX.js"
209
230
  },
210
- "/assets/select-Cppu-hti.js": {
231
+ "/assets/runners-DzX-RU3i.js": {
211
232
  "type": "text/javascript; charset=utf-8",
212
- "etag": "\"1b2f4-3YBJAy4lzk0epih6EODEaDeMaE4\"",
213
- "mtime": "2026-09-18T01:57:04.913Z",
214
- "size": 111348,
215
- "path": "../public/assets/select-Cppu-hti.js"
233
+ "etag": "\"1742-Q2Y5AAhvUchNByx01WIIfC/ai6E\"",
234
+ "mtime": "2026-10-05T23:18:13.857Z",
235
+ "size": 5954,
236
+ "path": "../public/assets/runners-DzX-RU3i.js"
216
237
  },
217
- "/assets/setting-fields-BT1naVJX.js": {
238
+ "/assets/select-C9grIFwG.js": {
218
239
  "type": "text/javascript; charset=utf-8",
219
- "etag": "\"749-SkARcPuYJEMTjRGzy1jJuljGvtM\"",
220
- "mtime": "2026-09-18T01:57:04.913Z",
221
- "size": 1865,
222
- "path": "../public/assets/setting-fields-BT1naVJX.js"
240
+ "etag": "\"732e-HZp3SyT0ZmWyjI2zllLQJZILW1M\"",
241
+ "mtime": "2026-10-05T23:18:13.857Z",
242
+ "size": 29486,
243
+ "path": "../public/assets/select-C9grIFwG.js"
223
244
  },
224
- "/assets/styles-D3sonCfX.css": {
225
- "type": "text/css; charset=utf-8",
226
- "etag": "\"14d2a-lZ7x63AXhmJmu8JxOKzNT0a9hrg\"",
227
- "mtime": "2026-09-18T01:57:04.914Z",
228
- "size": 85290,
229
- "path": "../public/assets/styles-D3sonCfX.css"
245
+ "/assets/setting-fields-DUc3npgh.js": {
246
+ "type": "text/javascript; charset=utf-8",
247
+ "etag": "\"794-brDJ2D0UcVvmb48AT1ryFnjWQBM\"",
248
+ "mtime": "2026-10-05T23:18:13.857Z",
249
+ "size": 1940,
250
+ "path": "../public/assets/setting-fields-DUc3npgh.js"
251
+ },
252
+ "/assets/switch-DwABVI6d.js": {
253
+ "type": "text/javascript; charset=utf-8",
254
+ "etag": "\"116c-TJAih8C1FZSiSYW2bL1Qd2XskPs\"",
255
+ "mtime": "2026-10-05T23:18:13.857Z",
256
+ "size": 4460,
257
+ "path": "../public/assets/switch-DwABVI6d.js"
230
258
  },
231
- "/assets/switch-hRIbNGOj.js": {
259
+ "/assets/task-list-Ddk8-qt7.js": {
232
260
  "type": "text/javascript; charset=utf-8",
233
- "etag": "\"1143-+VR0qSRiJugwgpkRWB7lzVYpJVY\"",
234
- "mtime": "2026-09-18T01:57:04.913Z",
235
- "size": 4419,
236
- "path": "../public/assets/switch-hRIbNGOj.js"
261
+ "etag": "\"e0f-TnV8ubm4ypWKH47a7L7Uzd4z+rI\"",
262
+ "mtime": "2026-10-05T23:18:13.858Z",
263
+ "size": 3599,
264
+ "path": "../public/assets/task-list-Ddk8-qt7.js"
237
265
  },
238
- "/assets/task-list-CrptnI1N.js": {
266
+ "/assets/textarea-Ds-gIYUQ.js": {
239
267
  "type": "text/javascript; charset=utf-8",
240
- "etag": "\"1074-SkNQfO3Mw+7OIztA59crAb0hh2o\"",
241
- "mtime": "2026-09-18T01:57:04.913Z",
242
- "size": 4212,
243
- "path": "../public/assets/task-list-CrptnI1N.js"
268
+ "etag": "\"2de-OaKhfdB5YHyyaJ9a3oWLJDKmwSM\"",
269
+ "mtime": "2026-10-05T23:18:13.858Z",
270
+ "size": 734,
271
+ "path": "../public/assets/textarea-Ds-gIYUQ.js"
244
272
  },
245
- "/assets/textarea-Fyuzi6Vp.js": {
273
+ "/assets/time-goBWd-5J.js": {
246
274
  "type": "text/javascript; charset=utf-8",
247
- "etag": "\"306-vcm/L91/XPEkHVNl2yk2Lp05ZG8\"",
248
- "mtime": "2026-09-18T01:57:04.913Z",
249
- "size": 774,
250
- "path": "../public/assets/textarea-Fyuzi6Vp.js"
275
+ "etag": "\"286-A1da5ebDl49F3Ka1QvAFWPGwcKA\"",
276
+ "mtime": "2026-10-05T23:18:13.858Z",
277
+ "size": 646,
278
+ "path": "../public/assets/time-goBWd-5J.js"
251
279
  },
252
- "/assets/trash-2-BXZzBsoV.js": {
280
+ "/assets/use-live-tasks-DZNNuECy.js": {
253
281
  "type": "text/javascript; charset=utf-8",
254
- "etag": "\"146-hW/6t3H21wnW0twJKNkEJlNp/Gk\"",
255
- "mtime": "2026-09-18T01:57:04.913Z",
256
- "size": 326,
257
- "path": "../public/assets/trash-2-BXZzBsoV.js"
282
+ "etag": "\"189-RbssKqfycr9gIbSnT6sJWOfC8To\"",
283
+ "mtime": "2026-10-05T23:18:13.858Z",
284
+ "size": 393,
285
+ "path": "../public/assets/use-live-tasks-DZNNuECy.js"
258
286
  },
259
- "/assets/useValueChanged-VVyq4hb9.js": {
287
+ "/assets/useCompositeListItem-P4Nmmn7j.js": {
260
288
  "type": "text/javascript; charset=utf-8",
261
- "etag": "\"dd8-Te7VI1t9EEvBsgN9Wq88UqStSY4\"",
262
- "mtime": "2026-09-18T01:57:04.913Z",
263
- "size": 3544,
264
- "path": "../public/assets/useValueChanged-VVyq4hb9.js"
289
+ "etag": "\"3487-ZOGKzNRVZCqBpKT9Wd8cc9fzU60\"",
290
+ "mtime": "2026-10-05T23:18:13.858Z",
291
+ "size": 13447,
292
+ "path": "../public/assets/useCompositeListItem-P4Nmmn7j.js"
293
+ },
294
+ "/assets/usePositioner-B7i9Ejzh.js": {
295
+ "type": "text/javascript; charset=utf-8",
296
+ "etag": "\"117a8-qKQ2o4uz7ZYPDrbozDHhqLWpgQ0\"",
297
+ "mtime": "2026-10-05T23:18:13.858Z",
298
+ "size": 71592,
299
+ "path": "../public/assets/usePositioner-B7i9Ejzh.js"
300
+ },
301
+ "/assets/styles-B9B98zLk.css": {
302
+ "type": "text/css; charset=utf-8",
303
+ "etag": "\"15d07-jnnrpj+FbyGBNVG/zQBwWTCDa9g\"",
304
+ "mtime": "2026-10-05T23:18:13.859Z",
305
+ "size": 89351,
306
+ "path": "../public/assets/styles-B9B98zLk.css"
265
307
  }
266
308
  };
267
309
  //#endregion
package/README.md CHANGED
@@ -1,59 +1,81 @@
1
1
  # Loopable
2
2
 
3
- Loopable watches the tools a team already uses and finishes the work with a coding agent. It picks up a signal, does what the loop says, and writes the result back. Loops run on their own. Every run is recorded.
3
+ Your team’s own agent. It runs on your machine, and you decide what it can do.
4
4
 
5
- Connect GitHub or Gmail, write a loop, leave a runner on. Pull requests get reviewed, mail gets triaged, assigned issues get a draft. You see what happened in the inbox.
5
+ A lot of team work waits on one person: a review request, a question in #oncall, a morning check. Someone has to copy it into their own Codex, and if they are busy, it stops. Hosted team agents help, but they run in a cloud sandbox that cannot reach your internal network, logs, or services.
6
6
 
7
- The words for the parts — loop, workflow, runner, and the rest — are in [docs/concepts.md](docs/concepts.md).
7
+ Loopable is a shared agent for small and mid-size teams.
8
+
9
+ - **Shared.** Work comes in from Slack, Lark, GitHub, or a schedule. A loop says what to do. Nobody has to be there. Every run is recorded in the inbox.
10
+ - **Yours.** Codex, Claude Code, or Cursor Agent runs on a machine the team owns. It reaches what that machine reaches, uses the MCP servers and skills you install, and keeps data in-house.
11
+
12
+ The story is in [docs/narrative.md](docs/narrative.md). The words for the parts — loop, workflow, runner, and the rest — are in [docs/concepts.md](docs/concepts.md).
13
+
14
+ ## Loops you can run today
15
+
16
+ | Comes in from | Loop | Writes back |
17
+ | --- | --- | --- |
18
+ | Any trigger | Custom loop: pick what starts it, write your own prompt | Anywhere below, or Inbox only |
19
+ | Schedule | Do something on a schedule | Inbox, or a Slack, Lark, or GitHub thread |
20
+ | GitHub | Review pull requests | A review, as a comment |
21
+ | GitHub | Reply to issues | A comment on the issue |
22
+ | Slack bot | Do what I ask the Slack bot (@mention or DM) | A reply in the thread |
23
+ | Feishu / Lark bot | Do what I ask the Feishu / Lark bot (@mention in a group) | A reply in the thread |
24
+ | WeChat | Do what I ask the WeChat bot | A reply in the chat |
25
+ | Gmail | Custom loop: “An email arrives” | Anywhere, such as an email back to the same inbox |
26
+
27
+ A loop’s answer can go to any connector that accepts it, so a scheduled check can post to #oncall. To ask an agent something once, use **Ask an agent** in the inbox.
8
28
 
9
29
  ## Architecture
10
30
 
11
31
  Three processes. The agent always runs on a Runner, never on the App or Dispatcher.
12
32
 
13
- ```text
14
- Signal → Loop → Task
15
- → Dispatcher prepares context, picks a Runner
16
- → Runner runs the Agent
17
- → Dispatcher writes back
18
- ```
33
+ <p align="center">
34
+ <img src="docs/architecture.svg" alt="Slack bot, GitHub, and Lark bot into Loopable. A runner pulls the job. Loopable writes back to the same three." width="920" />
35
+ </p>
36
+
37
+ Slack bot, GitHub, and Lark bot send work in. Loopable watches, matches a loop, and queues the job. A Runner pulls it, runs Codex, Claude Code, or Cursor Agent, and Loopable writes the result back.
19
38
 
20
39
  ```text
21
- Loopable ──HTTP── Runner ── Agent CLI
40
+ Loopable ──HTTP pull── Runner ── Agent CLI
22
41
  (App + Dispatcher)
23
42
  ```
24
43
 
25
44
  | Process | Does |
26
45
  | --- | --- |
27
46
  | **App** | UI, HTTP API, OAuth, the interface runners pull from |
28
- | **Dispatcher** | Watches for signals, prepares tasks, writes back |
29
- | **Runner** | Runs the agent CLI |
47
+ | **Dispatcher** | Watches for signals, matches loops, queues jobs, writes back |
48
+ | **Runner** | Pulls a job over HTTP, runs the agent CLI |
49
+
50
+ App and Dispatcher share one database and stay on the same host. Only one Dispatcher may run against that database. Runners join over HTTP from that host or other machines. Extra runners are in [docs/deploy.md](docs/deploy.md).
30
51
 
31
- App and Dispatcher share one database and stay on the same host. Only one Dispatcher may run against that database. Runners join over HTTP: this machine, or others. Extra machines are in [docs/deploy.md](docs/deploy.md).
52
+ ## Run it
32
53
 
33
- ## Use it locally
54
+ The usual setup is one computer that stays on — a Mac in the office is enough. App, Dispatcher, and a Runner all live there. It looks like a spare machine on a desk. For a small team, that is the product.
34
55
 
35
- You need Node 22+ and an agent CLI signed in on the runner host (Codex or Cursor Agent).
56
+ You need Node 22+ and an agent CLI signed in on that machine (Codex, Claude Code, or Cursor Agent).
36
57
 
37
58
  ```bash
38
59
  npm install -g loopable-cli
39
60
  loopable start # App + Dispatcher, bound on all interfaces
40
61
  ```
41
62
 
42
- Open `http://127.0.0.1:4321`. Connect an account. Write a loop. On Runners, copy the join command (LAN IP, not 127.0.0.1):
63
+ On the same computer, open `http://127.0.0.1:4321`. Connect GitHub from that address, signed in as the account your team will send work to (see [GitHub: a shared account](docs/connectors.md#github-a-shared-account)). Write a loop. On Runners, copy the join command and start a runner (this machine is fine):
43
64
 
44
65
  ```bash
66
+ npm install -g loopable-cli # on another machine; already done here
45
67
  loopable runner --url http://<LAN-IP>:4321 --token <from Runners>
46
68
  ```
47
69
 
48
70
  If the dispatcher is not running, the app says so. If no runner has joined, tasks wait.
49
71
 
50
- Connect GitHub from `http://127.0.0.1:4321` on this machine. Extra runners on other machines are in [docs/deploy.md](docs/deploy.md).
51
-
52
72
  State lives in `~/.loopable/`. Credentials stay in the OS keychain.
53
73
 
74
+ Another always-on runner, or opening the UI from a second computer, is in [docs/deploy.md](docs/deploy.md). A company VM is optional later, only if this box is not enough.
75
+
54
76
  ## Develop
55
77
 
56
- This section is only for working on the code. Running Loopable as a product is the CLI above, not pnpm. Dev uses `~/.loopable-dev/` and a separate keychain namespace, so it does not touch the local deploy database.
78
+ This section is only for working on the code. Running Loopable as a product is the CLI above, not pnpm. Dev uses `~/.loopable-dev/` and a separate keychain namespace, so it does not touch the team database.
57
79
 
58
80
  TanStack Start (React + Vite), SQLite, Tailwind. Tests are Vitest.
59
81
 
@@ -68,6 +90,19 @@ pnpm db:studio
68
90
 
69
91
  `pnpm runner` is only for a second machine while `pnpm dev` is already running.
70
92
 
93
+ ### Release
94
+
95
+ CI runs typecheck, tests, and both builds on every pull request and on `main`. To publish `loopable-cli`, merge to `main`, then from a clean, pushed `main`:
96
+
97
+ ```bash
98
+ pnpm release minor --dry-run # every check, nothing changed
99
+ pnpm release minor # or patch, major, or an exact x.y.z
100
+ ```
101
+
102
+ It checks git and npm, runs typecheck, tests, and build, then bumps the version, commits, tags `vX.Y.Z`, publishes, and pushes. Runners on other machines need `npm install -g loopable-cli` too. The site deploys on its own with `pnpm site:deploy`.
103
+
104
+ The public site is `site/` (static HTML, Vite). `pnpm site:dev` to preview. `pnpm site:build` writes `site/dist` for a Cloudflare Worker with assets only. `pnpm site:deploy` when you are ready to publish it.
105
+
71
106
  | Path | Contents |
72
107
  | --- | --- |
73
108
  | `src/connectors/` | One folder per connector: `manifest.ts` (browser-safe) and `runtime.ts` (server) |