loopable-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 (133) hide show
  1. package/.output/nitro.json +17 -0
  2. package/.output/public/apple-touch-icon.png +0 -0
  3. package/.output/public/assets/_connectorId-BWjYn5tm.js +1 -0
  4. package/.output/public/assets/_loopId-Ds4RkyEc.js +1 -0
  5. package/.output/public/assets/_taskId-BOzICXDf.js +1 -0
  6. package/.output/public/assets/alert-Bn9-Zm0l.js +1 -0
  7. package/.output/public/assets/arrow-left-BF9juV9T.js +1 -0
  8. package/.output/public/assets/arrow-right-CzqvnOY1.js +1 -0
  9. package/.output/public/assets/button-HCY6DCY-.js +1 -0
  10. package/.output/public/assets/connection-status-CYZB8kLy.js +1 -0
  11. package/.output/public/assets/connector-icon-BZ_MUJV_.js +1 -0
  12. package/.output/public/assets/connectors-BvzttfSu.js +1 -0
  13. package/.output/public/assets/connectors-DdJNwRN_.js +1 -0
  14. package/.output/public/assets/external-link-D46X-bXa.js +1 -0
  15. package/.output/public/assets/gaps-D-I6xiDc.js +1 -0
  16. package/.output/public/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  17. package/.output/public/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  18. package/.output/public/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  19. package/.output/public/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  20. package/.output/public/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  21. package/.output/public/assets/inbox-BUUu9xxE.js +1 -0
  22. package/.output/public/assets/index-ztzex0FN.js +10 -0
  23. package/.output/public/assets/loader-CcBl2u8m.js +1 -0
  24. package/.output/public/assets/loop-form-dB3CLcZb.js +1 -0
  25. package/.output/public/assets/loops-DRunQrxL.js +1 -0
  26. package/.output/public/assets/loops-oSdqMd29.js +1 -0
  27. package/.output/public/assets/manifests-DNMqf7Vi.js +7 -0
  28. package/.output/public/assets/new-uyFxVjuB.js +1 -0
  29. package/.output/public/assets/preload-helper-ORbuV86A.js +3 -0
  30. package/.output/public/assets/runners-DSU3r5Ww.js +1 -0
  31. package/.output/public/assets/setting-fields-ixkpdBb-.js +3 -0
  32. package/.output/public/assets/styles-DZL5V1o7.css +2 -0
  33. package/.output/public/assets/switch-d5ummmHY.js +1 -0
  34. package/.output/public/assets/task-list-BpOStt9v.js +1 -0
  35. package/.output/public/assets/tasks-B8MsKgic.js +1 -0
  36. package/.output/public/assets/trash-2-D6u6NpzO.js +1 -0
  37. package/.output/public/favicon.svg +9 -0
  38. package/.output/server/_chunks/ssr-renderer.mjs +26 -0
  39. package/.output/server/_connectorId-8nb5yOzG.mjs +421 -0
  40. package/.output/server/_libs/@base-ui/react+[...].mjs +12841 -0
  41. package/.output/server/_libs/@tanstack/react-router+[...].mjs +14349 -0
  42. package/.output/server/_libs/class-variance-authority+clsx.mjs +69 -0
  43. package/.output/server/_libs/dijkstrajs.mjs +118 -0
  44. package/.output/server/_libs/drizzle-orm.mjs +4349 -0
  45. package/.output/server/_libs/h3+rou3+srvx.mjs +1361 -0
  46. package/.output/server/_libs/lucide-react.mjs +911 -0
  47. package/.output/server/_libs/next-themes.mjs +53 -0
  48. package/.output/server/_libs/pngjs.mjs +1680 -0
  49. package/.output/server/_libs/qrcode.mjs +2583 -0
  50. package/.output/server/_libs/sonner.mjs +955 -0
  51. package/.output/server/_libs/tailwind-merge.mjs +3380 -0
  52. package/.output/server/_libs/tanstack__history.mjs +341 -0
  53. package/.output/server/_libs/ufo.mjs +64 -0
  54. package/.output/server/_loopId-BsUL1SeL.mjs +272 -0
  55. package/.output/server/_runtime.mjs +35 -0
  56. package/.output/server/_ssr/access-zIl15o8y.mjs +42 -0
  57. package/.output/server/_ssr/agents-Btql102J.mjs +657 -0
  58. package/.output/server/_ssr/agents-DAOZPgO2.mjs +76 -0
  59. package/.output/server/_ssr/alert-NEiOCTOl.mjs +37 -0
  60. package/.output/server/_ssr/callback-CUINvl7M.mjs +62 -0
  61. package/.output/server/_ssr/client-CKkOfh-s.mjs +335 -0
  62. package/.output/server/_ssr/connection-status-Bi5peUAk.mjs +31 -0
  63. package/.output/server/_ssr/connections-qnw2GVlP.mjs +2542 -0
  64. package/.output/server/_ssr/connector-icon-DZXQLLFo.mjs +37 -0
  65. package/.output/server/_ssr/connectors-BHNwuIMj.mjs +106 -0
  66. package/.output/server/_ssr/connectors-C28g0i4c.mjs +83 -0
  67. package/.output/server/_ssr/createServerRpc-DPDrnFdH.mjs +12 -0
  68. package/.output/server/_ssr/empty-plugin-adapters-BJ4m9L8g.mjs +5 -0
  69. package/.output/server/_ssr/gaps-RAFSXLZf.mjs +53 -0
  70. package/.output/server/_ssr/inbox-k5zHergU.mjs +35 -0
  71. package/.output/server/_ssr/loop-form-DlObSewZ.mjs +412 -0
  72. package/.output/server/_ssr/loops-APFcP0y6.mjs +311 -0
  73. package/.output/server/_ssr/loops-xt2Bn7_q.mjs +222 -0
  74. package/.output/server/_ssr/new-DfKyd2Wa.mjs +169 -0
  75. package/.output/server/_ssr/router-3WmpE5b_.mjs +1553 -0
  76. package/.output/server/_ssr/runners-By-mwc3F.mjs +32 -0
  77. package/.output/server/_ssr/runners-DI_NxpHC.mjs +116 -0
  78. package/.output/server/_ssr/runners-DtXs4Q8a.mjs +106 -0
  79. package/.output/server/_ssr/secrets-Hqti-niS.mjs +199 -0
  80. package/.output/server/_ssr/setting-fields-8vKFj4df.mjs +92 -0
  81. package/.output/server/_ssr/ssr.mjs +6605 -0
  82. package/.output/server/_ssr/start-Bdc2GJUI.mjs +51 -0
  83. package/.output/server/_ssr/switch-ReNglgH6.mjs +18 -0
  84. package/.output/server/_ssr/task-list-CUITIqkb.mjs +186 -0
  85. package/.output/server/_ssr/tasks-SAjNovX6.mjs +110 -0
  86. package/.output/server/_ssr/tasks-vcoodp_D.mjs +533 -0
  87. package/.output/server/_tanstack-start-manifest_v-C0cP5F0M.mjs +125 -0
  88. package/.output/server/_taskId-CXS3lod0.mjs +249 -0
  89. package/.output/server/index.mjs +541 -0
  90. package/README.md +81 -0
  91. package/dist/cli.mjs +165 -0
  92. package/dist/dispatcher.mjs +9871 -0
  93. package/dist/runner.mjs +657 -0
  94. package/drizzle/0000_cold_demogoblin.sql +29 -0
  95. package/drizzle/0001_fancy_blonde_phantom.sql +13 -0
  96. package/drizzle/0002_spooky_smiling_tiger.sql +16 -0
  97. package/drizzle/0003_small_golden_guardian.sql +25 -0
  98. package/drizzle/0004_wonderful_thunderbolts.sql +39 -0
  99. package/drizzle/0005_named_workflows.sql +7 -0
  100. package/drizzle/0006_signals.sql +18 -0
  101. package/drizzle/0007_review_comments.sql +1 -0
  102. package/drizzle/0008_held_signals.sql +1 -0
  103. package/drizzle/0009_work_item_ref.sql +58 -0
  104. package/drizzle/0010_signal_payload.sql +2 -0
  105. package/drizzle/0011_rule_poll_cursor.sql +1 -0
  106. package/drizzle/0012_loops.sql +63 -0
  107. package/drizzle/0013_loop_owns_action_and_prompt.sql +154 -0
  108. package/drizzle/0014_loop_poll_every.sql +4 -0
  109. package/drizzle/0015_machines.sql +10 -0
  110. package/drizzle/0016_task_machine.sql +1 -0
  111. package/drizzle/0017_loop_machine.sql +1 -0
  112. package/drizzle/0018_runners.sql +1 -0
  113. package/drizzle/0019_task_runner.sql +1 -0
  114. package/drizzle/0020_loop_runner.sql +1 -0
  115. package/drizzle/0021_drop_runner_kind.sql +1 -0
  116. package/drizzle/0022_drop_loop_runner.sql +1 -0
  117. package/drizzle/0023_shared_host.sql +6 -0
  118. package/drizzle/meta/0000_snapshot.json +206 -0
  119. package/drizzle/meta/0001_snapshot.json +284 -0
  120. package/drizzle/meta/0002_snapshot.json +390 -0
  121. package/drizzle/meta/0003_snapshot.json +566 -0
  122. package/drizzle/meta/0004_snapshot.json +633 -0
  123. package/drizzle/meta/0005_snapshot.json +626 -0
  124. package/drizzle/meta/0006_snapshot.json +752 -0
  125. package/drizzle/meta/0007_snapshot.json +759 -0
  126. package/drizzle/meta/0008_snapshot.json +766 -0
  127. package/drizzle/meta/0009_snapshot.json +752 -0
  128. package/drizzle/meta/0010_snapshot.json +766 -0
  129. package/drizzle/meta/0011_snapshot.json +773 -0
  130. package/drizzle/meta/0012_snapshot.json +773 -0
  131. package/drizzle/meta/0013_snapshot.json +817 -0
  132. package/drizzle/meta/_journal.json +174 -0
  133. package/package.json +88 -0
package/dist/cli.mjs ADDED
@@ -0,0 +1,165 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/cli.ts
4
+ import { spawn } from "node:child_process";
5
+ import { existsSync } from "node:fs";
6
+ import { dirname, join } from "node:path";
7
+ import { createInterface } from "node:readline";
8
+ import { fileURLToPath } from "node:url";
9
+ var here = dirname(fileURLToPath(import.meta.url));
10
+ var fromSource = here.endsWith("/src");
11
+ var root = join(here, "..");
12
+ var node = process.execPath;
13
+ function usage() {
14
+ return `Usage:
15
+ loopable start [--host 127.0.0.1] [--port 4321]
16
+ App and Dispatcher (production build).
17
+
18
+ loopable runner [--url URL] [--token TOKEN]
19
+ Join this machine as a runner. URL and token also come from
20
+ LOOPABLE_URL and LOOPABLE_RUNNER_TOKEN.
21
+
22
+ loopable dispatcher
23
+ Dispatcher only.
24
+ `;
25
+ }
26
+ function fail(message) {
27
+ process.stderr.write(`${message}
28
+ `);
29
+ process.exit(1);
30
+ }
31
+ function parse(argv) {
32
+ const flags = {
33
+ host: process.env.HOST ?? "127.0.0.1",
34
+ port: process.env.PORT ?? "4321"
35
+ };
36
+ const rest = [];
37
+ for (let i = 0; i < argv.length; i++) {
38
+ const arg = argv[i];
39
+ const next = () => {
40
+ const value = argv[++i];
41
+ if (!value) fail(`${arg} needs a value.`);
42
+ return value;
43
+ };
44
+ if (arg === "-h" || arg === "--help") return { command: "help", flags };
45
+ if (arg === "--host") flags.host = next();
46
+ else if (arg === "--port") flags.port = next();
47
+ else if (arg === "--url") flags.url = next();
48
+ else if (arg === "--token") flags.token = next();
49
+ else if (arg.startsWith("-")) fail(`Unknown flag: ${arg}`);
50
+ else rest.push(arg);
51
+ }
52
+ return { command: rest[0] ?? "help", flags };
53
+ }
54
+ function prefixLines(label, stream, write) {
55
+ createInterface({ input: stream }).on("line", (line) => write(`[${label}] ${line}
56
+ `));
57
+ }
58
+ function run(label, file, args, env = {}) {
59
+ const child = spawn(file, args, {
60
+ cwd: root,
61
+ env: { ...process.env, ...env },
62
+ stdio: ["ignore", "pipe", "pipe"]
63
+ });
64
+ if (child.stdout) prefixLines(label, child.stdout, (line) => process.stdout.write(line));
65
+ if (child.stderr) prefixLines(label, child.stderr, (line) => process.stderr.write(line));
66
+ return child;
67
+ }
68
+ function stop(children) {
69
+ for (const child of children) {
70
+ if (child.pid && !child.killed) child.kill("SIGTERM");
71
+ }
72
+ }
73
+ async function supervise(children) {
74
+ const shutdown = () => stop(children);
75
+ process.on("SIGINT", shutdown);
76
+ process.on("SIGTERM", shutdown);
77
+ const code = await new Promise((resolve) => {
78
+ let settled = false;
79
+ for (const child of children) {
80
+ child.on("exit", (exitCode, signal) => {
81
+ if (settled) return;
82
+ settled = true;
83
+ stop(children);
84
+ if (signal) resolve(0);
85
+ else resolve(exitCode ?? 1);
86
+ });
87
+ }
88
+ });
89
+ process.exit(code);
90
+ }
91
+ function appEntry() {
92
+ const entry = join(root, ".output/server/index.mjs");
93
+ if (!existsSync(entry)) fail("App build missing. From a checkout run: pnpm build");
94
+ return entry;
95
+ }
96
+ function pickEntry(kind) {
97
+ const source = join(root, `src/${kind}/main.ts`);
98
+ const bundled = join(root, `dist/${kind}.mjs`);
99
+ if (fromSource && existsSync(source)) return source;
100
+ if (existsSync(bundled)) return bundled;
101
+ if (existsSync(source)) return source;
102
+ fail(`${kind} build missing. From a checkout run: pnpm build`);
103
+ }
104
+ function nodeArgs(entry) {
105
+ return entry.endsWith(".ts") ? ["--experimental-strip-types", entry] : [entry];
106
+ }
107
+ function dispatcher() {
108
+ return run("dispatcher", node, nodeArgs(pickEntry("dispatcher")), {
109
+ PORT: "",
110
+ LOOPABLE_DISPATCHER_PORT: ""
111
+ });
112
+ }
113
+ async function waitFor(child) {
114
+ return await new Promise((resolve) => {
115
+ child.on("exit", (code, signal) => resolve(signal ? 0 : code ?? 1));
116
+ });
117
+ }
118
+ async function main() {
119
+ const { command, flags } = parse(process.argv.slice(2));
120
+ if (command === "help") {
121
+ process.stdout.write(usage());
122
+ return;
123
+ }
124
+ if (command === "runner") {
125
+ if (flags.url) process.env.LOOPABLE_URL = flags.url;
126
+ if (flags.token) process.env.LOOPABLE_RUNNER_TOKEN = flags.token;
127
+ process.exit(
128
+ await waitFor(
129
+ spawn(node, nodeArgs(pickEntry("runner")), {
130
+ cwd: root,
131
+ env: process.env,
132
+ stdio: "inherit"
133
+ })
134
+ )
135
+ );
136
+ }
137
+ if (command === "dispatcher") {
138
+ process.exit(
139
+ await waitFor(
140
+ spawn(node, nodeArgs(pickEntry("dispatcher")), {
141
+ cwd: root,
142
+ env: { ...process.env, PORT: "", LOOPABLE_DISPATCHER_PORT: "" },
143
+ stdio: "inherit"
144
+ })
145
+ )
146
+ );
147
+ }
148
+ if (command === "start") {
149
+ await supervise([
150
+ run("app", node, [appEntry()], {
151
+ PORT: flags.port,
152
+ HOST: flags.host,
153
+ NITRO_PORT: flags.port,
154
+ NITRO_HOST: flags.host,
155
+ LOOPABLE_SKIP_MIGRATE: "1"
156
+ }),
157
+ dispatcher()
158
+ ]);
159
+ return;
160
+ }
161
+ fail(`Unknown command: ${command}
162
+
163
+ ${usage()}`);
164
+ }
165
+ await main();