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.
- package/.output/nitro.json +1 -1
- package/.output/public/assets/_connectorId-CDCuSgpN.js +1 -0
- package/.output/public/assets/_loopId-DOnIsVTW.js +1 -0
- package/.output/public/assets/_taskId-BO5MZnlZ.js +1 -0
- package/.output/public/assets/agents-CBozi7oi.js +1 -0
- package/.output/public/assets/alert-Bn_wjgTX.js +1 -0
- package/.output/public/assets/button-K3ypIhAZ.js +1 -0
- package/.output/public/assets/card-DiVnaTIE.js +1 -0
- package/.output/public/assets/chevron-right-BrctLtFK.js +1 -0
- package/.output/public/assets/connection-status-DKWelvLO.js +1 -0
- package/.output/public/assets/connector-icon-CEbdE71G.js +1 -0
- package/.output/public/assets/connectors-JyX3IzJj.js +1 -0
- package/.output/public/assets/gaps-PjmcbaWo.js +1 -0
- package/.output/public/assets/inbox-CujRR0Cz.js +1 -0
- package/.output/public/assets/index-C9SQ_Baq.js +16 -0
- package/.output/public/assets/loop-form-Dw3cuTzw.js +1 -0
- package/.output/public/assets/loops-DcEfZa2_.js +1 -0
- package/.output/public/assets/manifests-yJpevyye.js +1 -0
- package/.output/public/assets/new-CwsnNuRW.js +1 -0
- package/.output/public/assets/page-bvnfRMum.js +1 -0
- package/.output/public/assets/play-yHLs4DjK.js +1 -0
- package/.output/public/assets/plus-Ber25lrU.js +1 -0
- package/.output/public/assets/preload-helper-BoU_7EQC.js +3 -0
- package/.output/public/assets/refresh-cw-BzSY7M8I.js +1 -0
- package/.output/public/assets/rotate-ccw-DLv9EfCX.js +1 -0
- package/.output/public/assets/runners-DzX-RU3i.js +2 -0
- package/.output/public/assets/select-C9grIFwG.js +1 -0
- package/.output/public/assets/setting-fields-DUc3npgh.js +3 -0
- package/.output/public/assets/styles-B9B98zLk.css +2 -0
- package/.output/public/assets/switch-DwABVI6d.js +1 -0
- package/.output/public/assets/task-list-Ddk8-qt7.js +1 -0
- package/.output/public/assets/textarea-Ds-gIYUQ.js +1 -0
- package/.output/public/assets/time-goBWd-5J.js +1 -0
- package/.output/public/assets/use-live-tasks-DZNNuECy.js +1 -0
- package/.output/public/assets/useCompositeListItem-P4Nmmn7j.js +1 -0
- package/.output/public/assets/usePositioner-B7i9Ejzh.js +1 -0
- package/.output/server/_chunks/ssr-renderer.mjs +1 -1
- package/.output/server/_connectorId-COuQN02a.mjs +512 -0
- package/.output/server/_libs/@base-ui/react+[...].mjs +1410 -804
- package/.output/server/_libs/@tanstack/react-router+[...].mjs +1 -1
- package/.output/server/_libs/lucide-react.mjs +93 -84
- package/.output/server/_libs/next-themes.mjs +1 -1
- package/.output/server/_libs/sonner.mjs +1 -1
- package/.output/server/_loopId-CZh6_Yhr.mjs +310 -0
- package/.output/server/_ssr/{callback-D20cVD2w.mjs → access-DTttr563.mjs} +37 -20
- package/.output/server/_ssr/{agents-CrUmIQpi.mjs → agents-B_qo1gpL.mjs} +196 -7
- package/.output/server/_ssr/{agents-Dms_6TBF.mjs → agents-Bz10gz_m.mjs} +8 -8
- package/.output/server/_ssr/agents-CjbOUp3Z.mjs +206 -0
- package/.output/server/_ssr/{alert-DQvzE7bu.mjs → alert-C2WBWfzo.mjs} +2 -2
- package/.output/server/_ssr/card-r1cV-PCN.mjs +36 -0
- package/.output/server/_ssr/{client-BtVRVhQ2.mjs → client-Dk3SD8Il.mjs} +5 -1
- package/.output/server/_ssr/connection-status-BogAL-Fj.mjs +32 -0
- package/.output/server/_ssr/{connections-ypex3qUd.mjs → connections-Cqvb6Gw2.mjs} +1109 -263
- package/.output/server/_ssr/connector-icon-DrhVbhs6.mjs +190 -0
- package/.output/server/_ssr/connectors-BfS5tQKr.mjs +81 -0
- package/.output/server/_ssr/{connectors-BZly0yGF.mjs → connectors-DJI-rzPU.mjs} +21 -10
- package/.output/server/_ssr/{createServerRpc-DPDrnFdH.mjs → createServerRpc-DDrp2nLT.mjs} +2 -2
- package/.output/server/_ssr/{gaps-D2Zh8sEo.mjs → gaps-CcvHiLcj.mjs} +18 -10
- package/.output/server/_ssr/inbox-D1ef761v.mjs +178 -0
- package/.output/server/_ssr/loop-form-DWwOR05R.mjs +346 -0
- package/.output/server/_ssr/{loops-Og_G3KyZ.mjs → loops-6WhUe_lc.mjs} +228 -25
- package/.output/server/_ssr/loops-DHPjzG-t.mjs +217 -0
- package/.output/server/_ssr/new-ChKBdcXJ.mjs +245 -0
- package/.output/server/_ssr/page-DZVxKvdn.mjs +120 -0
- package/.output/server/_ssr/{router-BbrBz36P.mjs → router-DdwREiOf.mjs} +167 -489
- package/.output/server/_ssr/runners-CK9Cx9fS.mjs +217 -0
- package/.output/server/_ssr/runners-CrznFPHt.mjs +140 -0
- package/.output/server/_ssr/runners-W-pgo5yo.mjs +55 -0
- package/.output/server/_ssr/{secrets-CRnpwGBh.mjs → secrets-CV5scFlt.mjs} +2 -2
- package/.output/server/_ssr/select-BtndHhHb.mjs +76 -0
- package/.output/server/_ssr/{setting-fields-mpXfGftI.mjs → setting-fields-LNgywAW7.mjs} +25 -20
- package/.output/server/_ssr/ssr.mjs +49 -40
- package/.output/server/_ssr/{start-BgTj-h_C.mjs → start-C_j-e4vF.mjs} +10 -6
- package/.output/server/_ssr/{switch-1pnd_bPJ.mjs → switch-odxNO_S4.mjs} +3 -3
- package/.output/server/_ssr/task-list-Dnmq_WeE.mjs +150 -0
- package/.output/server/_ssr/{tasks-LIi-W4cy.mjs → tasks-D-kXLgVP.mjs} +13 -13
- package/.output/server/_ssr/{tasks-B_QmDFVs.mjs → tasks-D7aUvA33.mjs} +55 -17
- package/.output/server/_ssr/{textarea-CHJTKtsJ.mjs → textarea-D2c_vTIC.mjs} +2 -2
- package/.output/server/_ssr/time-Cy8TZP0Z.mjs +13 -0
- package/.output/server/_ssr/use-live-tasks-BzhTkEOL.mjs +40 -0
- package/.output/server/_tanstack-start-manifest_v-2HUdn-2E.mjs +166 -0
- package/.output/server/_taskId-D3KkNJW1.mjs +263 -0
- package/.output/server/index.mjs +204 -162
- package/README.md +54 -19
- package/dist/cli.mjs +185 -67
- package/dist/dispatcher.mjs +1443 -277
- package/dist/runner.mjs +333 -46
- package/drizzle/0025_prompt_tasks_done.sql +2 -0
- package/drizzle/0026_guidance_into_prompt.sql +3 -0
- package/drizzle/0027_relative_folders.sql +5 -0
- package/drizzle/0028_runner_version.sql +5 -0
- package/drizzle/meta/_journal.json +29 -1
- package/package.json +23 -17
- package/.output/public/assets/_connectorId-m67WbiJ8.js +0 -1
- package/.output/public/assets/_loopId-Bf4K5sdd.js +0 -1
- package/.output/public/assets/_taskId-eCKkcVOx.js +0 -1
- package/.output/public/assets/alert-BT2EVMJP.js +0 -1
- package/.output/public/assets/arrow-left-CWUZt6k2.js +0 -1
- package/.output/public/assets/arrow-right-dy_oOg_c.js +0 -1
- package/.output/public/assets/connection-status-DCqqmY_6.js +0 -1
- package/.output/public/assets/connector-icon-qGpNsPgH.js +0 -1
- package/.output/public/assets/connectors-DxXlc9zF.js +0 -1
- package/.output/public/assets/external-link-DC11orFA.js +0 -1
- package/.output/public/assets/gaps-CoTA-PzA.js +0 -1
- package/.output/public/assets/inbox-CLEXUXCI.js +0 -1
- package/.output/public/assets/index-Cndsw84p.js +0 -16
- package/.output/public/assets/loader-B4Epchm_.js +0 -1
- package/.output/public/assets/loop-form-BvizlZdR.js +0 -1
- package/.output/public/assets/loops-Dbe_mf5T.js +0 -1
- package/.output/public/assets/new-DPEaXKAY.js +0 -1
- package/.output/public/assets/play-DD4xQgvi.js +0 -1
- package/.output/public/assets/preload-helper-CfdAYKD7.js +0 -3
- package/.output/public/assets/rolldown-runtime-CbXtAM7H.js +0 -1
- package/.output/public/assets/runners-BVBggS5B.js +0 -1
- package/.output/public/assets/select-Cppu-hti.js +0 -1
- package/.output/public/assets/setting-fields-BT1naVJX.js +0 -3
- package/.output/public/assets/styles-D3sonCfX.css +0 -2
- package/.output/public/assets/switch-hRIbNGOj.js +0 -1
- package/.output/public/assets/task-list-CrptnI1N.js +0 -1
- package/.output/public/assets/textarea-Fyuzi6Vp.js +0 -1
- package/.output/public/assets/trash-2-BXZzBsoV.js +0 -1
- package/.output/public/assets/useValueChanged-VVyq4hb9.js +0 -1
- package/.output/server/_connectorId-DcSnoRjk.mjs +0 -421
- package/.output/server/_loopId-G_TAkYtS.mjs +0 -272
- package/.output/server/_ssr/access-B7TcOZ7F.mjs +0 -42
- package/.output/server/_ssr/connection-status-BZr3Y-IC.mjs +0 -31
- package/.output/server/_ssr/connector-icon-CFrrHjzR.mjs +0 -37
- package/.output/server/_ssr/connectors-4yzKb0KG.mjs +0 -106
- package/.output/server/_ssr/inbox-C2VBGLa5.mjs +0 -114
- package/.output/server/_ssr/loop-form-D-U-kU4k.mjs +0 -413
- package/.output/server/_ssr/loops-D0XJ8eBb.mjs +0 -222
- package/.output/server/_ssr/new-CajvgIog.mjs +0 -169
- package/.output/server/_ssr/runners-B_WuF8UJ.mjs +0 -32
- package/.output/server/_ssr/runners-D-0_lfiq.mjs +0 -106
- package/.output/server/_ssr/runners-zqF_zbEc.mjs +0 -116
- package/.output/server/_ssr/task-list-BnQJ94Dk.mjs +0 -187
- package/.output/server/_tanstack-start-manifest_v-BCHAazE8.mjs +0 -129
- package/.output/server/_taskId-CIv0ajIx.mjs +0 -256
package/.output/server/index.mjs
CHANGED
|
@@ -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-
|
|
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-
|
|
24
|
+
"mtime": "2026-10-05T23:18:14.326Z",
|
|
25
25
|
"size": 435,
|
|
26
26
|
"path": "../public/favicon.svg"
|
|
27
27
|
},
|
|
28
|
-
"/assets/
|
|
28
|
+
"/assets/_connectorId-CDCuSgpN.js": {
|
|
29
29
|
"type": "text/javascript; charset=utf-8",
|
|
30
|
-
"etag": "\"
|
|
31
|
-
"mtime": "2026-
|
|
32
|
-
"size":
|
|
33
|
-
"path": "../public/assets/
|
|
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/
|
|
35
|
+
"/assets/_taskId-BO5MZnlZ.js": {
|
|
36
36
|
"type": "text/javascript; charset=utf-8",
|
|
37
|
-
"etag": "\"
|
|
38
|
-
"mtime": "2026-
|
|
39
|
-
"size":
|
|
40
|
-
"path": "../public/assets/
|
|
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/
|
|
42
|
+
"/assets/agents-CBozi7oi.js": {
|
|
43
43
|
"type": "text/javascript; charset=utf-8",
|
|
44
|
-
"etag": "\"
|
|
45
|
-
"mtime": "2026-
|
|
46
|
-
"size":
|
|
47
|
-
"path": "../public/assets/
|
|
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/
|
|
49
|
+
"/assets/alert-Bn_wjgTX.js": {
|
|
50
50
|
"type": "text/javascript; charset=utf-8",
|
|
51
|
-
"etag": "\"
|
|
52
|
-
"mtime": "2026-
|
|
53
|
-
"size":
|
|
54
|
-
"path": "../public/assets/
|
|
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/
|
|
56
|
+
"/assets/_loopId-DOnIsVTW.js": {
|
|
57
57
|
"type": "text/javascript; charset=utf-8",
|
|
58
|
-
"etag": "\"
|
|
59
|
-
"mtime": "2026-
|
|
60
|
-
"size":
|
|
61
|
-
"path": "../public/assets/
|
|
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/
|
|
63
|
+
"/assets/button-K3ypIhAZ.js": {
|
|
64
64
|
"type": "text/javascript; charset=utf-8",
|
|
65
|
-
"etag": "\"
|
|
66
|
-
"mtime": "2026-
|
|
67
|
-
"size":
|
|
68
|
-
"path": "../public/assets/
|
|
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/
|
|
70
|
+
"/assets/card-DiVnaTIE.js": {
|
|
71
71
|
"type": "text/javascript; charset=utf-8",
|
|
72
|
-
"etag": "\"
|
|
73
|
-
"mtime": "2026-
|
|
74
|
-
"size":
|
|
75
|
-
"path": "../public/assets/
|
|
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/
|
|
77
|
+
"/assets/chevron-right-BrctLtFK.js": {
|
|
78
78
|
"type": "text/javascript; charset=utf-8",
|
|
79
|
-
"etag": "\"
|
|
80
|
-
"mtime": "2026-
|
|
81
|
-
"size":
|
|
82
|
-
"path": "../public/assets/
|
|
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-
|
|
84
|
+
"/assets/connector-icon-CEbdE71G.js": {
|
|
85
85
|
"type": "text/javascript; charset=utf-8",
|
|
86
|
-
"etag": "\"
|
|
87
|
-
"mtime": "2026-
|
|
88
|
-
"size":
|
|
89
|
-
"path": "../public/assets/connector-icon-
|
|
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/
|
|
91
|
+
"/assets/gaps-PjmcbaWo.js": {
|
|
92
92
|
"type": "text/javascript; charset=utf-8",
|
|
93
|
-
"etag": "\"
|
|
94
|
-
"mtime": "2026-
|
|
95
|
-
"size":
|
|
96
|
-
"path": "../public/assets/
|
|
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/
|
|
98
|
+
"/assets/connectors-JyX3IzJj.js": {
|
|
99
99
|
"type": "text/javascript; charset=utf-8",
|
|
100
|
-
"etag": "\"
|
|
101
|
-
"mtime": "2026-
|
|
102
|
-
"size":
|
|
103
|
-
"path": "../public/assets/
|
|
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-
|
|
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-
|
|
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-
|
|
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/
|
|
127
|
-
"type": "
|
|
128
|
-
"etag": "\"
|
|
129
|
-
"mtime": "2026-
|
|
130
|
-
"size":
|
|
131
|
-
"path": "../public/assets/
|
|
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/
|
|
147
|
+
"/assets/loop-form-Dw3cuTzw.js": {
|
|
134
148
|
"type": "text/javascript; charset=utf-8",
|
|
135
|
-
"etag": "\"
|
|
136
|
-
"mtime": "2026-
|
|
137
|
-
"size":
|
|
138
|
-
"path": "../public/assets/
|
|
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/
|
|
154
|
+
"/assets/index-C9SQ_Baq.js": {
|
|
141
155
|
"type": "text/javascript; charset=utf-8",
|
|
142
|
-
"etag": "\"
|
|
143
|
-
"mtime": "2026-
|
|
144
|
-
"size":
|
|
145
|
-
"path": "../public/assets/
|
|
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/
|
|
161
|
+
"/assets/loops-DcEfZa2_.js": {
|
|
148
162
|
"type": "text/javascript; charset=utf-8",
|
|
149
|
-
"etag": "\"
|
|
150
|
-
"mtime": "2026-
|
|
151
|
-
"size":
|
|
152
|
-
"path": "../public/assets/
|
|
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/
|
|
155
|
-
"type": "
|
|
156
|
-
"etag": "\"
|
|
157
|
-
"mtime": "2026-
|
|
158
|
-
"size":
|
|
159
|
-
"path": "../public/assets/
|
|
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/
|
|
182
|
+
"/assets/new-CwsnNuRW.js": {
|
|
162
183
|
"type": "text/javascript; charset=utf-8",
|
|
163
|
-
"etag": "\"
|
|
164
|
-
"mtime": "2026-
|
|
165
|
-
"size":
|
|
166
|
-
"path": "../public/assets/
|
|
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/
|
|
189
|
+
"/assets/page-bvnfRMum.js": {
|
|
169
190
|
"type": "text/javascript; charset=utf-8",
|
|
170
|
-
"etag": "\"
|
|
171
|
-
"mtime": "2026-
|
|
172
|
-
"size":
|
|
173
|
-
"path": "../public/assets/
|
|
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/
|
|
196
|
+
"/assets/plus-Ber25lrU.js": {
|
|
176
197
|
"type": "text/javascript; charset=utf-8",
|
|
177
|
-
"etag": "\"
|
|
178
|
-
"mtime": "2026-
|
|
179
|
-
"size":
|
|
180
|
-
"path": "../public/assets/
|
|
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-
|
|
203
|
+
"/assets/play-yHLs4DjK.js": {
|
|
183
204
|
"type": "text/javascript; charset=utf-8",
|
|
184
|
-
"etag": "\"bc-
|
|
185
|
-
"mtime": "2026-
|
|
205
|
+
"etag": "\"bc-EP4b/5OALd5znWpm5fnSSbR8bB8\"",
|
|
206
|
+
"mtime": "2026-10-05T23:18:13.857Z",
|
|
186
207
|
"size": 188,
|
|
187
|
-
"path": "../public/assets/play-
|
|
208
|
+
"path": "../public/assets/play-yHLs4DjK.js"
|
|
188
209
|
},
|
|
189
|
-
"/assets/preload-helper-
|
|
210
|
+
"/assets/preload-helper-BoU_7EQC.js": {
|
|
190
211
|
"type": "text/javascript; charset=utf-8",
|
|
191
|
-
"etag": "\"
|
|
192
|
-
"mtime": "2026-
|
|
193
|
-
"size":
|
|
194
|
-
"path": "../public/assets/preload-helper-
|
|
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/
|
|
217
|
+
"/assets/refresh-cw-BzSY7M8I.js": {
|
|
197
218
|
"type": "text/javascript; charset=utf-8",
|
|
198
|
-
"etag": "\"
|
|
199
|
-
"mtime": "2026-
|
|
200
|
-
"size":
|
|
201
|
-
"path": "../public/assets/
|
|
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/
|
|
224
|
+
"/assets/rotate-ccw-DLv9EfCX.js": {
|
|
204
225
|
"type": "text/javascript; charset=utf-8",
|
|
205
|
-
"etag": "\"
|
|
206
|
-
"mtime": "2026-
|
|
207
|
-
"size":
|
|
208
|
-
"path": "../public/assets/
|
|
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/
|
|
231
|
+
"/assets/runners-DzX-RU3i.js": {
|
|
211
232
|
"type": "text/javascript; charset=utf-8",
|
|
212
|
-
"etag": "\"
|
|
213
|
-
"mtime": "2026-
|
|
214
|
-
"size":
|
|
215
|
-
"path": "../public/assets/
|
|
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/
|
|
238
|
+
"/assets/select-C9grIFwG.js": {
|
|
218
239
|
"type": "text/javascript; charset=utf-8",
|
|
219
|
-
"etag": "\"
|
|
220
|
-
"mtime": "2026-
|
|
221
|
-
"size":
|
|
222
|
-
"path": "../public/assets/
|
|
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/
|
|
225
|
-
"type": "text/
|
|
226
|
-
"etag": "\"
|
|
227
|
-
"mtime": "2026-
|
|
228
|
-
"size":
|
|
229
|
-
"path": "../public/assets/
|
|
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/
|
|
259
|
+
"/assets/task-list-Ddk8-qt7.js": {
|
|
232
260
|
"type": "text/javascript; charset=utf-8",
|
|
233
|
-
"etag": "\"
|
|
234
|
-
"mtime": "2026-
|
|
235
|
-
"size":
|
|
236
|
-
"path": "../public/assets/
|
|
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/
|
|
266
|
+
"/assets/textarea-Ds-gIYUQ.js": {
|
|
239
267
|
"type": "text/javascript; charset=utf-8",
|
|
240
|
-
"etag": "\"
|
|
241
|
-
"mtime": "2026-
|
|
242
|
-
"size":
|
|
243
|
-
"path": "../public/assets/
|
|
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/
|
|
273
|
+
"/assets/time-goBWd-5J.js": {
|
|
246
274
|
"type": "text/javascript; charset=utf-8",
|
|
247
|
-
"etag": "\"
|
|
248
|
-
"mtime": "2026-
|
|
249
|
-
"size":
|
|
250
|
-
"path": "../public/assets/
|
|
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/
|
|
280
|
+
"/assets/use-live-tasks-DZNNuECy.js": {
|
|
253
281
|
"type": "text/javascript; charset=utf-8",
|
|
254
|
-
"etag": "\"
|
|
255
|
-
"mtime": "2026-
|
|
256
|
-
"size":
|
|
257
|
-
"path": "../public/assets/
|
|
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/
|
|
287
|
+
"/assets/useCompositeListItem-P4Nmmn7j.js": {
|
|
260
288
|
"type": "text/javascript; charset=utf-8",
|
|
261
|
-
"etag": "\"
|
|
262
|
-
"mtime": "2026-
|
|
263
|
-
"size":
|
|
264
|
-
"path": "../public/assets/
|
|
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
|
-
|
|
3
|
+
Your team’s own agent. It runs on your machine, and you decide what it can do.
|
|
4
4
|
|
|
5
|
-
|
|
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
|
-
|
|
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
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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,
|
|
29
|
-
| **Runner** |
|
|
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
|
-
|
|
52
|
+
## Run it
|
|
32
53
|
|
|
33
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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) |
|