loopable-cli 0.1.0 → 0.2.1

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 (101) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/_connectorId-CkygNLny.js +1 -0
  3. package/.output/public/assets/_loopId-Cshlc5Ja.js +1 -0
  4. package/.output/public/assets/_taskId-BKDIJ_Fg.js +1 -0
  5. package/.output/public/assets/alert-BT2EVMJP.js +1 -0
  6. package/.output/public/assets/arrow-left-CWUZt6k2.js +1 -0
  7. package/.output/public/assets/arrow-right-dy_oOg_c.js +1 -0
  8. package/.output/public/assets/connection-status-DCqqmY_6.js +1 -0
  9. package/.output/public/assets/connector-icon-BUoK6Cru.js +1 -0
  10. package/.output/public/assets/connectors-CeLBtEtg.js +1 -0
  11. package/.output/public/assets/{external-link-D46X-bXa.js → external-link-DC11orFA.js} +1 -1
  12. package/.output/public/assets/gaps-BtFoD7mF.js +1 -0
  13. package/.output/public/assets/inbox-BYNjkNDJ.js +1 -0
  14. package/.output/public/assets/index-0yP3Jn_G.js +18 -0
  15. package/.output/public/assets/{loader-CcBl2u8m.js → loader-B4Epchm_.js} +1 -1
  16. package/.output/public/assets/loop-form-DnSJNc1k.js +1 -0
  17. package/.output/public/assets/loops-1CvbqO6m.js +1 -0
  18. package/.output/public/assets/new-m5NlqYQT.js +1 -0
  19. package/.output/public/assets/play-DD4xQgvi.js +1 -0
  20. package/.output/public/assets/preload-helper-CfdAYKD7.js +3 -0
  21. package/.output/public/assets/refresh-cw-C3xBnKfy.js +1 -0
  22. package/.output/public/assets/rolldown-runtime-CbXtAM7H.js +1 -0
  23. package/.output/public/assets/runners-D8QVl-Y6.js +1 -0
  24. package/.output/public/assets/select-Cppu-hti.js +1 -0
  25. package/.output/public/assets/setting-fields-bJ_gTG7Q.js +3 -0
  26. package/.output/public/assets/styles-ClTGaXU0.css +2 -0
  27. package/.output/public/assets/switch-hRIbNGOj.js +1 -0
  28. package/.output/public/assets/task-list-BAxjcVgr.js +1 -0
  29. package/.output/public/assets/textarea-Fyuzi6Vp.js +1 -0
  30. package/.output/public/assets/{trash-2-D6u6NpzO.js → trash-2-BXZzBsoV.js} +1 -1
  31. package/.output/public/assets/useValueChanged-VVyq4hb9.js +1 -0
  32. package/.output/server/{_connectorId-8nb5yOzG.mjs → _connectorId-C9yydJrC.mjs} +92 -11
  33. package/.output/server/_libs/@base-ui/react+[...].mjs +427 -427
  34. package/.output/server/{_loopId-BsUL1SeL.mjs → _loopId-B0VG-eBC.mjs} +44 -15
  35. package/.output/server/_ssr/{callback-CUINvl7M.mjs → access-DTttr563.mjs} +39 -5
  36. package/.output/server/_ssr/{agents-DAOZPgO2.mjs → agents-C7B6RJ6-.mjs} +3 -3
  37. package/.output/server/_ssr/{agents-Btql102J.mjs → agents-DG643yoJ.mjs} +4 -4
  38. package/.output/server/_ssr/{alert-NEiOCTOl.mjs → alert-DQvzE7bu.mjs} +1 -1
  39. package/.output/server/_ssr/{client-CKkOfh-s.mjs → client-BtVRVhQ2.mjs} +4 -2
  40. package/.output/server/_ssr/{connection-status-Bi5peUAk.mjs → connection-status-BZr3Y-IC.mjs} +2 -2
  41. package/.output/server/_ssr/{connections-qnw2GVlP.mjs → connections-Df-aDpfJ.mjs} +816 -17
  42. package/.output/server/_ssr/connector-icon-WvxwZ5TF.mjs +56 -0
  43. package/.output/server/_ssr/{connectors-BHNwuIMj.mjs → connectors-BU0IiRge.mjs} +7 -6
  44. package/.output/server/_ssr/{connectors-C28g0i4c.mjs → connectors-e0mf2pMs.mjs} +14 -3
  45. package/.output/server/_ssr/{gaps-RAFSXLZf.mjs → gaps-Cz76ZicM.mjs} +6 -6
  46. package/.output/server/_ssr/inbox-CAUBa1I3.mjs +114 -0
  47. package/.output/server/_ssr/{loop-form-DlObSewZ.mjs → loop-form-FqSaXiHl.mjs} +8 -7
  48. package/.output/server/_ssr/{loops-APFcP0y6.mjs → loops-D8WuK7Ke.mjs} +200 -7
  49. package/.output/server/_ssr/{loops-xt2Bn7_q.mjs → loops-Dqoebe8q.mjs} +8 -8
  50. package/.output/server/_ssr/{new-DfKyd2Wa.mjs → new-bBsVaWD6.mjs} +5 -5
  51. package/.output/server/_ssr/{router-3WmpE5b_.mjs → router-54IDWTVz.mjs} +68 -62
  52. package/.output/server/_ssr/{runners-By-mwc3F.mjs → runners-Cj6z9Mqh.mjs} +26 -3
  53. package/.output/server/_ssr/{runners-DtXs4Q8a.mjs → runners-D2UAdLyj.mjs} +3 -3
  54. package/.output/server/_ssr/{runners-DI_NxpHC.mjs → runners-DGWaVvWi.mjs} +4 -4
  55. package/.output/server/_ssr/{secrets-Hqti-niS.mjs → secrets-CRnpwGBh.mjs} +2 -2
  56. package/.output/server/_ssr/{setting-fields-8vKFj4df.mjs → setting-fields-DzBlslan.mjs} +6 -13
  57. package/.output/server/_ssr/ssr.mjs +45 -33
  58. package/.output/server/_ssr/{start-Bdc2GJUI.mjs → start-Vq3Oan3v.mjs} +3 -4
  59. package/.output/server/_ssr/{switch-ReNglgH6.mjs → switch-1pnd_bPJ.mjs} +2 -2
  60. package/.output/server/_ssr/{task-list-CUITIqkb.mjs → task-list-_qgBS9LU.mjs} +9 -8
  61. package/.output/server/_ssr/{tasks-vcoodp_D.mjs → tasks-BDqznm57.mjs} +98 -8
  62. package/.output/server/_ssr/{tasks-SAjNovX6.mjs → tasks-Qtml5TlK.mjs} +15 -6
  63. package/.output/server/_ssr/textarea-CHJTKtsJ.mjs +14 -0
  64. package/.output/server/{_tanstack-start-manifest_v-C0cP5F0M.mjs → _tanstack-start-manifest_v-CvheE7ZF.mjs} +54 -48
  65. package/.output/server/{_taskId-CXS3lod0.mjs → _taskId-V4QLBO2N.mjs} +17 -10
  66. package/.output/server/index.mjs +173 -166
  67. package/README.md +26 -21
  68. package/dist/cli.mjs +7146 -16
  69. package/dist/dispatcher.mjs +844 -33
  70. package/drizzle/0024_prompt_tasks.sql +44 -0
  71. package/drizzle/meta/_journal.json +7 -0
  72. package/package.json +21 -17
  73. package/.output/public/assets/_connectorId-BWjYn5tm.js +0 -1
  74. package/.output/public/assets/_loopId-Ds4RkyEc.js +0 -1
  75. package/.output/public/assets/_taskId-BOzICXDf.js +0 -1
  76. package/.output/public/assets/alert-Bn9-Zm0l.js +0 -1
  77. package/.output/public/assets/arrow-left-BF9juV9T.js +0 -1
  78. package/.output/public/assets/arrow-right-CzqvnOY1.js +0 -1
  79. package/.output/public/assets/button-HCY6DCY-.js +0 -1
  80. package/.output/public/assets/connection-status-CYZB8kLy.js +0 -1
  81. package/.output/public/assets/connector-icon-BZ_MUJV_.js +0 -1
  82. package/.output/public/assets/connectors-BvzttfSu.js +0 -1
  83. package/.output/public/assets/connectors-DdJNwRN_.js +0 -1
  84. package/.output/public/assets/gaps-D-I6xiDc.js +0 -1
  85. package/.output/public/assets/inbox-BUUu9xxE.js +0 -1
  86. package/.output/public/assets/index-ztzex0FN.js +0 -10
  87. package/.output/public/assets/loop-form-dB3CLcZb.js +0 -1
  88. package/.output/public/assets/loops-DRunQrxL.js +0 -1
  89. package/.output/public/assets/loops-oSdqMd29.js +0 -1
  90. package/.output/public/assets/manifests-DNMqf7Vi.js +0 -7
  91. package/.output/public/assets/new-uyFxVjuB.js +0 -1
  92. package/.output/public/assets/preload-helper-ORbuV86A.js +0 -3
  93. package/.output/public/assets/runners-DSU3r5Ww.js +0 -1
  94. package/.output/public/assets/setting-fields-ixkpdBb-.js +0 -3
  95. package/.output/public/assets/styles-DZL5V1o7.css +0 -2
  96. package/.output/public/assets/switch-d5ummmHY.js +0 -1
  97. package/.output/public/assets/task-list-BpOStt9v.js +0 -1
  98. package/.output/public/assets/tasks-B8MsKgic.js +0 -1
  99. package/.output/server/_ssr/access-zIl15o8y.mjs +0 -42
  100. package/.output/server/_ssr/connector-icon-DZXQLLFo.mjs +0 -37
  101. package/.output/server/_ssr/inbox-k5zHergU.mjs +0 -35
@@ -1,18 +1,17 @@
1
1
  import { i as __toESM } from "../_runtime.mjs";
2
- import { A as DialogRoot, B as mergeProps, C as TooltipArrow, D as TooltipTrigger$1, E as TooltipPortal, F as DialogBackdrop, I as Separator, L as Input, M as DialogPopup, N as DialogDescription, O as TooltipRoot, P as DialogClose, R as Button, S as SelectRoot, T as TooltipPositioner, U as require_jsx_runtime, W as require_react, _ as SelectPositioner, b as SelectValue$1, d as SelectScrollDownArrow, f as SelectItemText, g as SelectPopup, h as SelectList, j as DialogPortal, k as DialogTitle, m as SelectItem$1, p as SelectItemIndicator, u as SelectScrollUpArrow, v as SelectPortal, w as TooltipPopup, x as SelectTrigger$1, y as SelectIcon, z as useRender } from "../_libs/@base-ui/react+[...].mjs";
2
+ import { A as DialogRoot, B as mergeProps, C as TooltipArrow, D as TooltipTrigger$1, E as TooltipPortal, F as DialogBackdrop, I as Separator, L as Input, M as DialogPopup, N as DialogDescription, O as TooltipRoot, P as DialogClose, R as useRender, S as SelectRoot, T as TooltipPositioner, U as require_jsx_runtime, W as require_react, _ as SelectPositioner, b as SelectValue$1, d as SelectScrollDownArrow, f as SelectItemText, g as SelectPopup, h as SelectList, j as DialogPortal, k as DialogTitle, m as SelectItem$1, p as SelectItemIndicator, u as SelectScrollUpArrow, v as SelectPortal, w as TooltipPopup, x as SelectTrigger$1, y as SelectIcon, z as Button } from "../_libs/@base-ui/react+[...].mjs";
3
3
  import { a as useRouterState, c as Outlet, d as createRootRoute, f as Link, g as notFound, h as redirect, i as HeadContent, l as lazyRouteComponent, m as useRouter, r as Scripts, s as createRouter, u as createFileRoute } from "../_libs/@tanstack/react-router+[...].mjs";
4
4
  import { i as getServerFnById, n as createServerFn, r as TSS_SERVER_FUNCTION } from "./ssr.mjs";
5
5
  import { n as clsx, t as cva } from "../_libs/class-variance-authority+clsx.mjs";
6
6
  import { t as twMerge } from "../_libs/tailwind-merge.mjs";
7
7
  import { _ as or, d as and, f as eq, g as lte, m as isNull } from "../_libs/drizzle-orm.mjs";
8
- import { d as runDir, g as tasks, s as db, t as __exportAll, u as rowsChanged } from "./client-CKkOfh-s.mjs";
9
- import { n as isHosted } from "./secrets-Hqti-niS.mjs";
10
- import { a as connectorManifest, f as saveAuthorizedConnection, m as takeAuthAttempt, o as connectorRuntime, p as startAuthAttempt } from "./connections-qnw2GVlP.mjs";
11
- import { n as callbackUrl, t as appOrigin } from "./callback-CUINvl7M.mjs";
12
- import { t as AGENT_MANIFESTS } from "./agents-Btql102J.mjs";
13
- import { r as bearer } from "./access-zIl15o8y.mjs";
14
- import { a as heartbeatRunner, d as runnerIdForToken, i as getRunner, o as isRunnerOnline, s as joinRunner } from "./runners-DtXs4Q8a.mjs";
15
- import { a as jobForTask, d as updateTask, o as jobRequiresHost, t as absorbAgentOutput, u as taskRow } from "./tasks-vcoodp_D.mjs";
8
+ import { d as runDir, g as tasks, s as db, t as __exportAll, u as rowsChanged } from "./client-BtVRVhQ2.mjs";
9
+ import { n as isHosted } from "./secrets-CRnpwGBh.mjs";
10
+ import { h as takeAuthAttempt, m as startAuthAttempt, o as connectorManifest, p as saveAuthorizedConnection, s as connectorRuntime } from "./connections-Df-aDpfJ.mjs";
11
+ import { a as callbackUrl, i as bearer, n as appOrigin } from "./access-DTttr563.mjs";
12
+ import { t as AGENT_MANIFESTS } from "./agents-DG643yoJ.mjs";
13
+ import { a as heartbeatRunner, d as runnerIdForToken, i as getRunner, o as isRunnerOnline, s as joinRunner } from "./runners-D2UAdLyj.mjs";
14
+ import { c as jobRequiresHost, m as updateTask, p as taskRow, s as jobForTask, t as absorbAgentOutput } from "./tasks-BDqznm57.mjs";
16
15
  import { F as Check, I as Bot, M as CircleAlert, N as ChevronUp, O as CirclePlay, P as ChevronDown, _ as LoaderCircle, a as Terminal, d as Plug, h as MousePointerClick, j as CircleCheck, k as CirclePause, m as OctagonX, n as Workflow, o as Settings, p as PanelLeft, r as TriangleAlert, s as Server, t as X, v as Info, y as Inbox } from "../_libs/lucide-react.mjs";
17
16
  import { n as toast, t as Toaster } from "../_libs/sonner.mjs";
18
17
  import { t as z } from "../_libs/next-themes.mjs";
@@ -20,12 +19,49 @@ import { randomBytes } from "node:crypto";
20
19
  import { appendFileSync, existsSync } from "node:fs";
21
20
  import { join } from "node:path";
22
21
  import { hostname } from "node:os";
23
- //#region node_modules/.nitro/vite/services/ssr/assets/card-IpIuKJC_.js
22
+ //#region node_modules/.nitro/vite/services/ssr/assets/card-vAtU-sOo.js
24
23
  var import_react = /* @__PURE__ */ __toESM(require_react());
25
24
  var import_jsx_runtime = require_jsx_runtime();
26
25
  function cn(...inputs) {
27
26
  return twMerge(clsx(inputs));
28
27
  }
28
+ var buttonVariants = cva("group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
29
+ variants: {
30
+ variant: {
31
+ default: "bg-primary text-primary-foreground hover:bg-primary/80",
32
+ outline: "border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
33
+ secondary: "bg-secondary text-secondary-foreground hover:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)] aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
34
+ ghost: "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",
35
+ destructive: "bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",
36
+ link: "text-primary underline-offset-4 hover:underline"
37
+ },
38
+ size: {
39
+ default: "h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
40
+ xs: "h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",
41
+ sm: "h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",
42
+ lg: "h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
43
+ icon: "size-8",
44
+ "icon-xs": "size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3",
45
+ "icon-sm": "size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg",
46
+ "icon-lg": "size-9"
47
+ }
48
+ },
49
+ defaultVariants: {
50
+ variant: "default",
51
+ size: "default"
52
+ }
53
+ });
54
+ function Button$1({ className, variant = "default", size = "default", ...props }) {
55
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Button, {
56
+ "data-slot": "button",
57
+ className: cn(buttonVariants({
58
+ variant,
59
+ size,
60
+ className
61
+ })),
62
+ ...props
63
+ });
64
+ }
29
65
  var createSsrRpc = (functionId) => {
30
66
  const url = "/_serverFn/" + functionId;
31
67
  const serverFnMeta = { id: functionId };
@@ -90,7 +126,7 @@ function CardContent({ className, ...props }) {
90
126
  });
91
127
  }
92
128
  //#endregion
93
- //#region node_modules/.nitro/vite/services/ssr/assets/connectors-vIoacH6V.js
129
+ //#region node_modules/.nitro/vite/services/ssr/assets/connectors-D95Rzky0.js
94
130
  /**
95
131
  * Readiness and connections for every connector in the registry. Manifests are
96
132
  * imported directly by the client, so they are deliberately not sent again.
@@ -107,22 +143,28 @@ var beginQrLogin = createServerFn({ method: "POST" }).inputValidator((data) => d
107
143
  * confirmed login is saved here and the page is told only that it worked.
108
144
  */
109
145
  var continueQrLogin = createServerFn({ method: "POST" }).inputValidator((data) => data).handler(createSsrRpc("43b97e3644ad73286fe5de3e99134bff099e1a8704f1ae91fe643d419eceba73"));
146
+ /**
147
+ * A secret pasted in the UI. Stored here; the page is told only the account
148
+ * label, never the token back.
149
+ */
150
+ var connectWithToken = createServerFn({ method: "POST" }).inputValidator((data) => data).handler(createSsrRpc("fbf19a0d12b4046a23a8a41e106a79443b174cf1cad922b029e23fb4679b20db"));
110
151
  var disconnectConnection = createServerFn({ method: "POST" }).inputValidator((data) => data).handler(createSsrRpc("f94f0787ce6704ea24f18add66832e0367a0feb9a690d8ad6454abec5e5df193"));
111
152
  var verifyConnection = createServerFn({ method: "POST" }).inputValidator((data) => data).handler(createSsrRpc("f9ade3084971078ee9f2bc16fcdcdfb5a8d66a0f9b634803bb611287c14e21d7"));
112
153
  var saveConnectionSettings = createServerFn({ method: "POST" }).inputValidator((data) => data).handler(createSsrRpc("18bae5deb2a19571893f0067e374e537f16d6774f9b4e04f9b7349360f6f8fdc"));
113
154
  //#endregion
114
- //#region node_modules/.nitro/vite/services/ssr/assets/tasks-rgWCNdRw.js
155
+ //#region node_modules/.nitro/vite/services/ssr/assets/tasks-DXjXqmnW.js
115
156
  var getInbox = createServerFn({ method: "GET" }).handler(createSsrRpc("48bc32df9d6f69f45df8dfbc6e798e1f99152dbd4b4ed65b149fa2612c65e687"));
116
157
  var getLoopTasks = createServerFn({ method: "GET" }).inputValidator((data) => data).handler(createSsrRpc("3f938fac3e5ec1631e700a2fdd4790e78abbefeb732ecfbbe6864cc19f0d5aac"));
117
158
  var getTaskById = createServerFn({ method: "GET" }).inputValidator((data) => data).handler(createSsrRpc("0033ef7c619c027b1428a722dff188d315ed335645afcb1033528630b7c95e88"));
118
159
  var getTaskLog = createServerFn({ method: "GET" }).inputValidator((data) => data).handler(createSsrRpc("81f567724371f0d6f24e636906e2e9ea5b7384422ac583c86a1050fb838664ce"));
160
+ var runPrompt = createServerFn({ method: "POST" }).inputValidator((data) => data).handler(createSsrRpc("bef559b165754b06d6d5cf7c6dccde3d5a6a326462430c621eb131f78665d6e1"));
119
161
  var runLoopNow = createServerFn({ method: "POST" }).inputValidator((data) => data).handler(createSsrRpc("7258ce5fc6f23acf3aab039ecd4acdb006d42b2ddbf3ab8629b4000e101b51dc"));
120
162
  var stopTask = createServerFn({ method: "POST" }).inputValidator((data) => data).handler(createSsrRpc("a57f49c322cc5afa2996e4a5777fa533fd963755d614d4a14eb32e51fb198d9d"));
121
163
  /** Whether the dispatcher is up, and how hard it is allowed to pull. */
122
164
  var getDispatcherState = createServerFn({ method: "GET" }).handler(createSsrRpc("921b049ebafe3c6fb5206fbe3e2100608d3333b944e18385e57da62a28233bc6"));
123
165
  var pauseDispatcher = createServerFn({ method: "POST" }).inputValidator((data) => data).handler(createSsrRpc("0fa144f67263a4a51c51e8baf134a15b89c0afdf9b92b64660520a5bce247eec"));
124
166
  //#endregion
125
- //#region node_modules/.nitro/vite/services/ssr/assets/loops-BBQDw1Mh.js
167
+ //#region node_modules/.nitro/vite/services/ssr/assets/loops-Cds9PIF2.js
126
168
  /**
127
169
  * Saving is both making and changing, told apart by whether there is an id.
128
170
  * A loop chosen and not yet saved has none, and nothing on the server knew
@@ -138,8 +180,9 @@ var removeLoop = createServerFn({ method: "POST" }).inputValidator((data) => dat
138
180
  var reorderLoop = createServerFn({ method: "POST" }).inputValidator((data) => data).handler(createSsrRpc("7d7d5f80a4f0d2b3bb659d7dc2a91ea5983880648b9d1aa24356e7340505930f"));
139
181
  var getLoopPollState = createServerFn({ method: "GET" }).inputValidator((data) => data).handler(createSsrRpc("4fd3855e3e9ed954e102071a55b98d91651c9b1e353161f7223768ed6f2b8c28"));
140
182
  var runLoopBacklog = createServerFn({ method: "POST" }).inputValidator((data) => data).handler(createSsrRpc("65494cbfd06143dbd9a012808fbba21163d9902e387869503fb8b68b0674902b"));
183
+ var lookLoopNow = createServerFn({ method: "POST" }).inputValidator((data) => data).handler(createSsrRpc("965ff21ee2f1e1f5a1cb78d50570cbad6f58ccdbdcc7955f02f816a9c0684f8e"));
141
184
  //#endregion
142
- //#region node_modules/.nitro/vite/services/ssr/assets/router-3WmpE5b_.js
185
+ //#region node_modules/.nitro/vite/services/ssr/assets/router-54IDWTVz.js
143
186
  /**
144
187
  * Loopable's mark: something going round, and the thing it goes round for.
145
188
  *
@@ -182,43 +225,6 @@ function LoopableMark({ className }) {
182
225
  ]
183
226
  });
184
227
  }
185
- var buttonVariants = cva("group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
186
- variants: {
187
- variant: {
188
- default: "bg-primary text-primary-foreground hover:bg-primary/80",
189
- outline: "border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
190
- secondary: "bg-secondary text-secondary-foreground hover:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)] aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
191
- ghost: "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",
192
- destructive: "bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",
193
- link: "text-primary underline-offset-4 hover:underline"
194
- },
195
- size: {
196
- default: "h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
197
- xs: "h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",
198
- sm: "h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",
199
- lg: "h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
200
- icon: "size-8",
201
- "icon-xs": "size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3",
202
- "icon-sm": "size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg",
203
- "icon-lg": "size-9"
204
- }
205
- },
206
- defaultVariants: {
207
- variant: "default",
208
- size: "default"
209
- }
210
- });
211
- function Button$1({ className, variant = "default", size = "default", ...props }) {
212
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Button, {
213
- "data-slot": "button",
214
- className: cn(buttonVariants({
215
- variant,
216
- size,
217
- className
218
- })),
219
- ...props
220
- });
221
- }
222
228
  /**
223
229
  * The dispatcher can stop between two page loads and nothing on a page would
224
230
  * change, so this asks rather than waiting to be told.
@@ -776,7 +782,7 @@ var Toaster$1 = ({ ...props }) => {
776
782
  ...props
777
783
  });
778
784
  };
779
- var styles_default = "/assets/styles-DZL5V1o7.css";
785
+ var styles_default = "/assets/styles-ClTGaXU0.css";
780
786
  var Route$18 = createRootRoute({
781
787
  head: () => ({
782
788
  meta: [
@@ -1147,7 +1153,7 @@ function AgentRow({ manifest, view }) {
1147
1153
  ]
1148
1154
  }) : null] });
1149
1155
  }
1150
- var $$splitComponentImporter$7 = () => import("./connectors-BHNwuIMj.mjs");
1156
+ var $$splitComponentImporter$7 = () => import("./connectors-BU0IiRge.mjs");
1151
1157
  var Route$15 = createFileRoute("/connectors/")({
1152
1158
  validateSearch: (search) => {
1153
1159
  const result = {};
@@ -1158,7 +1164,7 @@ var Route$15 = createFileRoute("/connectors/")({
1158
1164
  loader: () => getConnectorOverview(),
1159
1165
  component: lazyRouteComponent($$splitComponentImporter$7, "component")
1160
1166
  });
1161
- var $$splitComponentImporter$6 = () => import("../_connectorId-8nb5yOzG.mjs");
1167
+ var $$splitComponentImporter$6 = () => import("../_connectorId-C9yydJrC.mjs");
1162
1168
  var Route$14 = createFileRoute("/connectors/$connectorId")({
1163
1169
  loader: async ({ params }) => {
1164
1170
  if (!connectorManifest(params.connectorId)) throw notFound();
@@ -1168,12 +1174,12 @@ var Route$14 = createFileRoute("/connectors/$connectorId")({
1168
1174
  },
1169
1175
  component: lazyRouteComponent($$splitComponentImporter$6, "component")
1170
1176
  });
1171
- var $$splitComponentImporter$5 = () => import("./inbox-k5zHergU.mjs");
1177
+ var $$splitComponentImporter$5 = () => import("./inbox-CAUBa1I3.mjs");
1172
1178
  var Route$13 = createFileRoute("/inbox/")({
1173
- loader: async () => ({ tasks: await getInbox() }),
1179
+ loader: () => getInbox(),
1174
1180
  component: lazyRouteComponent($$splitComponentImporter$5, "component")
1175
1181
  });
1176
- var $$splitComponentImporter$4 = () => import("../_taskId-CXS3lod0.mjs");
1182
+ var $$splitComponentImporter$4 = () => import("../_taskId-V4QLBO2N.mjs");
1177
1183
  var Route$12 = createFileRoute("/inbox/$taskId")({
1178
1184
  loader: async ({ params }) => {
1179
1185
  const task = await getTaskById({ data: { id: params.taskId } });
@@ -1200,7 +1206,7 @@ var Route$12 = createFileRoute("/inbox/$taskId")({
1200
1206
  * sees it when it next renews its claim, which is why the button says it has
1201
1207
  * been asked for rather than pretending it is already done.
1202
1208
  */
1203
- var $$splitComponentImporter$3 = () => import("./loops-xt2Bn7_q.mjs");
1209
+ var $$splitComponentImporter$3 = () => import("./loops-Dqoebe8q.mjs");
1204
1210
  var Route$11 = createFileRoute("/loops/")({
1205
1211
  loader: () => getLoopsPage(),
1206
1212
  component: lazyRouteComponent($$splitComponentImporter$3, "component")
@@ -1211,7 +1217,7 @@ var Route$11 = createFileRoute("/loops/")({
1211
1217
  * may have been pointed somewhere else since it was made, and the card is the
1212
1218
  * one place someone scanning a list would notice.
1213
1219
  */
1214
- var $$splitComponentImporter$2 = () => import("../_loopId-BsUL1SeL.mjs");
1220
+ var $$splitComponentImporter$2 = () => import("../_loopId-B0VG-eBC.mjs");
1215
1221
  var Route$10 = createFileRoute("/loops/$loopId")({
1216
1222
  loader: async ({ params }) => {
1217
1223
  const loop = await getLoopById({ data: { id: params.loopId } });
@@ -1234,7 +1240,7 @@ var Route$10 = createFileRoute("/loops/$loopId")({
1234
1240
  * signal to arrive is a slow way to do it. Dry run means that shaping leaves
1235
1241
  * no marks on a real repository.
1236
1242
  */
1237
- var $$splitComponentImporter$1 = () => import("./new-DfKyd2Wa.mjs");
1243
+ var $$splitComponentImporter$1 = () => import("./new-bBsVaWD6.mjs");
1238
1244
  var Route$9 = createFileRoute("/loops/new")({
1239
1245
  validateSearch: (search) => {
1240
1246
  const result = {};
@@ -1264,7 +1270,7 @@ var Route$8 = createFileRoute("/machines/")({ beforeLoad: () => {
1264
1270
  var getRunnersPage = createServerFn({ method: "GET" }).handler(createSsrRpc("45dbbb612763589268984d236edcd17f5868ecf716df9625bfa46e7fec691f4e"));
1265
1271
  var rotateRunnerJoinToken = createServerFn({ method: "POST" }).handler(createSsrRpc("b4f7a66e1bb69cc14ab84d8f5dc7f85119c9a9b1d065a6b4e51dd0ba84c3f60c"));
1266
1272
  var removeRunner = createServerFn({ method: "POST" }).inputValidator((data) => data).handler(createSsrRpc("611491b32d9583ccaae637ddf9fb2f842ff75994f50513ecd8273e305e889eb8"));
1267
- var $$splitComponentImporter = () => import("./runners-DI_NxpHC.mjs");
1273
+ var $$splitComponentImporter = () => import("./runners-DGWaVvWi.mjs");
1268
1274
  var Route$7 = createFileRoute("/runners/")({
1269
1275
  loader: () => getRunnersPage(),
1270
1276
  component: lazyRouteComponent($$splitComponentImporter, "component")
@@ -1550,4 +1556,4 @@ function getRouter() {
1550
1556
  });
1551
1557
  }
1552
1558
  //#endregion
1553
- export { stopTask as A, CardTitle as B, Button$1 as C, saveLoop as D, runLoopBacklog as E, verifyConnection as F, Badge as I, Card as L, continueQrLogin as M, disconnectConnection as N, toggleLoop as O, saveConnectionSettings as P, CardContent as R, Input$1 as S, reorderLoop as T, cn as V, SelectItem as _, Route$9 as a, Label as b, Route$12 as c, Route$15 as d, useLiveRefresh as f, SelectContent as g, Select$1 as h, rotateRunnerJoinToken as i, beginQrLogin as j, runLoopNow as k, Route$13 as l, isTaskActive as m, Route$7 as n, Route$10 as o, useLiveTasks as p, removeRunner as r, Route$11 as s, router_exports as t, Route$14 as u, SelectTrigger as v, removeLoop as w, Separator$1 as x, SelectValue as y, CardHeader as z };
1559
+ export { runPrompt as A, Card as B, lookLoopNow as C, saveLoop as D, runLoopBacklog as E, disconnectConnection as F, CardHeader as H, saveConnectionSettings as I, verifyConnection as L, beginQrLogin as M, connectWithToken as N, toggleLoop as O, continueQrLogin as P, Badge as R, Input$1 as S, reorderLoop as T, CardTitle as U, CardContent as V, cn as W, SelectItem as _, Route$9 as a, Label as b, Route$12 as c, Route$15 as d, useLiveRefresh as f, SelectContent as g, Select$1 as h, rotateRunnerJoinToken as i, stopTask as j, runLoopNow as k, Route$13 as l, isTaskActive as m, Route$7 as n, Route$10 as o, useLiveTasks as p, removeRunner as r, Route$11 as s, router_exports as t, Route$14 as u, SelectTrigger as v, removeLoop as w, Separator$1 as x, SelectValue as y, Button$1 as z };
@@ -1,8 +1,31 @@
1
1
  import { n as createServerFn } from "./ssr.mjs";
2
- import { i as loopableOrigin } from "./callback-CUINvl7M.mjs";
3
- import { c as listRunners, n as forgetRunner, r as getJoinToken, u as rotateJoinToken } from "./runners-DtXs4Q8a.mjs";
2
+ import { c as listRunners, n as forgetRunner, r as getJoinToken, u as rotateJoinToken } from "./runners-D2UAdLyj.mjs";
4
3
  import { t as createServerRpc } from "./createServerRpc-DPDrnFdH.mjs";
5
- //#region node_modules/.nitro/vite/services/ssr/assets/runners-By-mwc3F.js
4
+ import { networkInterfaces } from "node:os";
5
+ //#region node_modules/.nitro/vite/services/ssr/assets/runners-Cj6z9Mqh.js
6
+ function configuredOrigin() {
7
+ return process.env.LOOPABLE_BASE_URL?.replace(/\/$/, "") || null;
8
+ }
9
+ /** First non-internal IPv4, preferring typical LAN ranges. */
10
+ function lanIPv4(nics = networkInterfaces()) {
11
+ const found = [];
12
+ for (const addrs of Object.values(nics)) for (const addr of addrs ?? []) {
13
+ if (addr.internal) continue;
14
+ if (!["IPv4", "4"].includes(String(addr.family))) continue;
15
+ found.push(addr.address);
16
+ }
17
+ return found.find((ip) => ip.startsWith("192.168.")) ?? found.find((ip) => ip.startsWith("10.")) ?? found.find((ip) => {
18
+ const b = Number(ip.split(".")[1]);
19
+ return ip.startsWith("172.") && b >= 16 && b <= 31;
20
+ }) ?? found[0] ?? null;
21
+ }
22
+ /** Where runners should address this Loopable. A LAN IP when one exists. */
23
+ function loopableOrigin(nics = networkInterfaces()) {
24
+ const configured = configuredOrigin();
25
+ if (configured) return configured;
26
+ const port = process.env.PORT ?? process.env.NITRO_PORT ?? "4321";
27
+ return `http://${lanIPv4(nics) ?? "127.0.0.1"}:${port}`;
28
+ }
6
29
  var getRunnersPage_createServerFn_handler = createServerRpc({
7
30
  id: "45dbbb612763589268984d236edcd17f5868ecf716df9625bfa46e7fec691f4e",
8
31
  name: "getRunnersPage",
@@ -1,9 +1,9 @@
1
1
  import { f as eq } from "../_libs/drizzle-orm.mjs";
2
- import { f as runners, g as tasks, s as db } from "./client-CKkOfh-s.mjs";
3
- import { a as runnerTokenKey, o as secretStore, r as joinTokenKey } from "./secrets-Hqti-niS.mjs";
2
+ import { f as runners, g as tasks, s as db } from "./client-BtVRVhQ2.mjs";
3
+ import { a as runnerTokenKey, o as secretStore, r as joinTokenKey } from "./secrets-CRnpwGBh.mjs";
4
4
  import { randomBytes, randomUUID } from "node:crypto";
5
5
  import { hostname } from "node:os";
6
- //#region node_modules/.nitro/vite/services/ssr/assets/runners-DtXs4Q8a.js
6
+ //#region node_modules/.nitro/vite/services/ssr/assets/runners-D2UAdLyj.js
7
7
  var ONLINE_MS = 45e3;
8
8
  function isRunnerOnline(row, now = Date.now()) {
9
9
  if (row.status !== "online") return false;
@@ -2,9 +2,9 @@ import { U as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
2
2
  import { m as useRouter } from "../_libs/@tanstack/react-router+[...].mjs";
3
3
  import { s as Server } from "../_libs/lucide-react.mjs";
4
4
  import { n as toast } from "../_libs/sonner.mjs";
5
- import { C as Button$1, I as Badge, L as Card, R as CardContent, f as useLiveRefresh, i as rotateRunnerJoinToken, n as Route$7, r as removeRunner, z as CardHeader } from "./router-3WmpE5b_.mjs";
6
- import { n as AlertDescription, t as Alert } from "./alert-NEiOCTOl.mjs";
7
- //#region node_modules/.nitro/vite/services/ssr/assets/runners-DI_NxpHC.js
5
+ import { B as Card, H as CardHeader, R as Badge, V as CardContent, f as useLiveRefresh, i as rotateRunnerJoinToken, n as Route$7, r as removeRunner, z as Button$1 } from "./router-54IDWTVz.mjs";
6
+ import { n as AlertDescription, t as Alert } from "./alert-DQvzE7bu.mjs";
7
+ //#region node_modules/.nitro/vite/services/ssr/assets/runners-DGWaVvWi.js
8
8
  var import_jsx_runtime = require_jsx_runtime();
9
9
  function inventoryLines(runner) {
10
10
  if (runner.inventory.length === 0) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
@@ -44,7 +44,7 @@ function RunnersPage() {
44
44
  className: "text-xs",
45
45
  children: "npm install -g loopable-cli"
46
46
  }),
47
- "), sign in a coding agent on that host, then start a runner with this token."
47
+ "), sign in a coding agent on that host, then start a runner. Use this LAN IP so other machines can reach the App."
48
48
  ]
49
49
  }),
50
50
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("pre", {
@@ -1,9 +1,9 @@
1
1
  import { f as eq } from "../_libs/drizzle-orm.mjs";
2
- import { m as secrets, o as dataDir, p as secretNamespace, s as db } from "./client-CKkOfh-s.mjs";
2
+ import { m as secrets, o as dataDir, p as secretNamespace, s as db } from "./client-BtVRVhQ2.mjs";
3
3
  import { chmodSync, existsSync, readFileSync, rmSync, writeFileSync } from "node:fs";
4
4
  import { join } from "node:path";
5
5
  import { execFileSync } from "node:child_process";
6
- //#region node_modules/.nitro/vite/services/ssr/assets/secrets-Hqti-niS.js
6
+ //#region node_modules/.nitro/vite/services/ssr/assets/secrets-CRnpwGBh.js
7
7
  /**
8
8
  * Hosted Loopable shares a network database between the App Worker and the
9
9
  * Dispatcher. A local laptop still uses a file, and needs none of this.
@@ -1,16 +1,9 @@
1
- import "../_runtime.mjs";
2
- import { U as require_jsx_runtime, W as require_react } from "../_libs/@base-ui/react+[...].mjs";
3
- import { S as Input$1, V as cn, _ as SelectItem, b as Label, g as SelectContent, h as Select$1, v as SelectTrigger, y as SelectValue } from "./router-3WmpE5b_.mjs";
4
- import { t as Switch$1 } from "./switch-ReNglgH6.mjs";
5
- require_react();
1
+ import { U as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
2
+ import { S as Input$1, _ as SelectItem, b as Label, g as SelectContent, h as Select$1, v as SelectTrigger, y as SelectValue } from "./router-54IDWTVz.mjs";
3
+ import { t as Switch$1 } from "./switch-1pnd_bPJ.mjs";
4
+ import { t as Textarea } from "./textarea-CHJTKtsJ.mjs";
5
+ //#region node_modules/.nitro/vite/services/ssr/assets/setting-fields-DzBlslan.js
6
6
  var import_jsx_runtime = require_jsx_runtime();
7
- function Textarea({ className, ...props }) {
8
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("textarea", {
9
- "data-slot": "textarea",
10
- className: cn("flex field-sizing-content min-h-16 w-full rounded-lg border border-input bg-transparent px-2.5 py-2 text-base transition-colors outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40", className),
11
- ...props
12
- });
13
- }
14
7
  /**
15
8
  * One renderer for anything a connector declares as a field, so connection
16
9
  * settings and loop conditions can never drift apart visually.
@@ -89,4 +82,4 @@ function SettingFieldInputs({ fields, values, onChange, idPrefix = "" }) {
89
82
  }) });
90
83
  }
91
84
  //#endregion
92
- export { Textarea as n, initialFieldValues as r, SettingFieldInputs as t };
85
+ export { initialFieldValues as n, SettingFieldInputs as t };
@@ -4107,7 +4107,7 @@ var defaultSerovalPlugins = [
4107
4107
  * the dev styles URL for route-scoped CSS collection.
4108
4108
  */
4109
4109
  async function getStartManifest(matchedRoutes) {
4110
- const { tsrStartManifest } = await import("../_tanstack-start-manifest_v-C0cP5F0M.mjs");
4110
+ const { tsrStartManifest } = await import("../_tanstack-start-manifest_v-CvheE7ZF.mjs");
4111
4111
  const startManifest = tsrStartManifest();
4112
4112
  let routes = startManifest.routes;
4113
4113
  routes[rootRouteId];
@@ -4129,123 +4129,135 @@ async function getStartManifest(matchedRoutes) {
4129
4129
  var manifest = {
4130
4130
  "0033ef7c619c027b1428a722dff188d315ed335645afcb1033528630b7c95e88": {
4131
4131
  functionName: "getTaskById_createServerFn_handler",
4132
- importer: () => import("./tasks-SAjNovX6.mjs")
4132
+ importer: () => import("./tasks-Qtml5TlK.mjs")
4133
4133
  },
4134
4134
  "0e209afb63fad4a95a5cfeaf4831610f23673145cbf5b8054765d79804a62d31": {
4135
4135
  functionName: "getConnectorOverview_createServerFn_handler",
4136
- importer: () => import("./connectors-C28g0i4c.mjs")
4136
+ importer: () => import("./connectors-e0mf2pMs.mjs")
4137
4137
  },
4138
4138
  "0fa144f67263a4a51c51e8baf134a15b89c0afdf9b92b64660520a5bce247eec": {
4139
4139
  functionName: "pauseDispatcher_createServerFn_handler",
4140
- importer: () => import("./tasks-SAjNovX6.mjs")
4140
+ importer: () => import("./tasks-Qtml5TlK.mjs")
4141
4141
  },
4142
4142
  "143ea51f7421d9eebec9ad31c2df8eed5aa2e5d8035473dbfad39913fd7d54c0": {
4143
4143
  functionName: "chooseDefaultAgent_createServerFn_handler",
4144
- importer: () => import("./agents-DAOZPgO2.mjs")
4144
+ importer: () => import("./agents-C7B6RJ6-.mjs")
4145
4145
  },
4146
4146
  "18bae5deb2a19571893f0067e374e537f16d6774f9b4e04f9b7349360f6f8fdc": {
4147
4147
  functionName: "saveConnectionSettings_createServerFn_handler",
4148
- importer: () => import("./connectors-C28g0i4c.mjs")
4148
+ importer: () => import("./connectors-e0mf2pMs.mjs")
4149
4149
  },
4150
4150
  "3f938fac3e5ec1631e700a2fdd4790e78abbefeb732ecfbbe6864cc19f0d5aac": {
4151
4151
  functionName: "getLoopTasks_createServerFn_handler",
4152
- importer: () => import("./tasks-SAjNovX6.mjs")
4152
+ importer: () => import("./tasks-Qtml5TlK.mjs")
4153
4153
  },
4154
4154
  "3fc8a7de98be979f9820a4f5a0ca2e234ed8a7df8e692abb8c4437765474eca0": {
4155
4155
  functionName: "toggleLoop_createServerFn_handler",
4156
- importer: () => import("./loops-APFcP0y6.mjs")
4156
+ importer: () => import("./loops-D8WuK7Ke.mjs")
4157
4157
  },
4158
4158
  "43b97e3644ad73286fe5de3e99134bff099e1a8704f1ae91fe643d419eceba73": {
4159
4159
  functionName: "continueQrLogin_createServerFn_handler",
4160
- importer: () => import("./connectors-C28g0i4c.mjs")
4160
+ importer: () => import("./connectors-e0mf2pMs.mjs")
4161
4161
  },
4162
4162
  "45dbbb612763589268984d236edcd17f5868ecf716df9625bfa46e7fec691f4e": {
4163
4163
  functionName: "getRunnersPage_createServerFn_handler",
4164
- importer: () => import("./runners-By-mwc3F.mjs")
4164
+ importer: () => import("./runners-Cj6z9Mqh.mjs")
4165
4165
  },
4166
4166
  "48bc32df9d6f69f45df8dfbc6e798e1f99152dbd4b4ed65b149fa2612c65e687": {
4167
4167
  functionName: "getInbox_createServerFn_handler",
4168
- importer: () => import("./tasks-SAjNovX6.mjs")
4168
+ importer: () => import("./tasks-Qtml5TlK.mjs")
4169
4169
  },
4170
4170
  "4fd3855e3e9ed954e102071a55b98d91651c9b1e353161f7223768ed6f2b8c28": {
4171
4171
  functionName: "getLoopPollState_createServerFn_handler",
4172
- importer: () => import("./loops-APFcP0y6.mjs")
4172
+ importer: () => import("./loops-D8WuK7Ke.mjs")
4173
4173
  },
4174
4174
  "611491b32d9583ccaae637ddf9fb2f842ff75994f50513ecd8273e305e889eb8": {
4175
4175
  functionName: "removeRunner_createServerFn_handler",
4176
- importer: () => import("./runners-By-mwc3F.mjs")
4176
+ importer: () => import("./runners-Cj6z9Mqh.mjs")
4177
4177
  },
4178
4178
  "65494cbfd06143dbd9a012808fbba21163d9902e387869503fb8b68b0674902b": {
4179
4179
  functionName: "runLoopBacklog_createServerFn_handler",
4180
- importer: () => import("./loops-APFcP0y6.mjs")
4180
+ importer: () => import("./loops-D8WuK7Ke.mjs")
4181
4181
  },
4182
4182
  "6d5a90e9ec4ebf70d8e2ac4aff960533a5e68d21b289033cc7e0751d00554c93": {
4183
4183
  functionName: "getLoopsPage_createServerFn_handler",
4184
- importer: () => import("./loops-APFcP0y6.mjs")
4184
+ importer: () => import("./loops-D8WuK7Ke.mjs")
4185
4185
  },
4186
4186
  "7258ce5fc6f23acf3aab039ecd4acdb006d42b2ddbf3ab8629b4000e101b51dc": {
4187
4187
  functionName: "runLoopNow_createServerFn_handler",
4188
- importer: () => import("./tasks-SAjNovX6.mjs")
4188
+ importer: () => import("./tasks-Qtml5TlK.mjs")
4189
4189
  },
4190
4190
  "794964d675b97edaa881ab5cb209225ef0a4507e3d2771d6577658a058e7621f": {
4191
4191
  functionName: "beginQrLogin_createServerFn_handler",
4192
- importer: () => import("./connectors-C28g0i4c.mjs")
4192
+ importer: () => import("./connectors-e0mf2pMs.mjs")
4193
4193
  },
4194
4194
  "7d7d5f80a4f0d2b3bb659d7dc2a91ea5983880648b9d1aa24356e7340505930f": {
4195
4195
  functionName: "reorderLoop_createServerFn_handler",
4196
- importer: () => import("./loops-APFcP0y6.mjs")
4196
+ importer: () => import("./loops-D8WuK7Ke.mjs")
4197
4197
  },
4198
4198
  "80883b912a5a0aba2aa583b505e4e289d765a3f7fbb793a97692f439e7f960ba": {
4199
4199
  functionName: "saveAgent_createServerFn_handler",
4200
- importer: () => import("./agents-DAOZPgO2.mjs")
4200
+ importer: () => import("./agents-C7B6RJ6-.mjs")
4201
4201
  },
4202
4202
  "81a1af559b2a373901872aa9f9a6546f2f3bda8157d81c21a36ba0d1d337613b": {
4203
4203
  functionName: "getLoopById_createServerFn_handler",
4204
- importer: () => import("./loops-APFcP0y6.mjs")
4204
+ importer: () => import("./loops-D8WuK7Ke.mjs")
4205
4205
  },
4206
4206
  "81f567724371f0d6f24e636906e2e9ea5b7384422ac583c86a1050fb838664ce": {
4207
4207
  functionName: "getTaskLog_createServerFn_handler",
4208
- importer: () => import("./tasks-SAjNovX6.mjs")
4208
+ importer: () => import("./tasks-Qtml5TlK.mjs")
4209
4209
  },
4210
4210
  "921b049ebafe3c6fb5206fbe3e2100608d3333b944e18385e57da62a28233bc6": {
4211
4211
  functionName: "getDispatcherState_createServerFn_handler",
4212
- importer: () => import("./tasks-SAjNovX6.mjs")
4212
+ importer: () => import("./tasks-Qtml5TlK.mjs")
4213
+ },
4214
+ "965ff21ee2f1e1f5a1cb78d50570cbad6f58ccdbdcc7955f02f816a9c0684f8e": {
4215
+ functionName: "lookLoopNow_createServerFn_handler",
4216
+ importer: () => import("./loops-D8WuK7Ke.mjs")
4213
4217
  },
4214
4218
  "997d2dd097598c44811fe97def167b79d33e4349c51e783058da648e860c7c1f": {
4215
4219
  functionName: "getLoopReadiness_createServerFn_handler",
4216
- importer: () => import("./loops-APFcP0y6.mjs")
4220
+ importer: () => import("./loops-D8WuK7Ke.mjs")
4217
4221
  },
4218
4222
  "a57f49c322cc5afa2996e4a5777fa533fd963755d614d4a14eb32e51fb198d9d": {
4219
4223
  functionName: "stopTask_createServerFn_handler",
4220
- importer: () => import("./tasks-SAjNovX6.mjs")
4224
+ importer: () => import("./tasks-Qtml5TlK.mjs")
4221
4225
  },
4222
4226
  "b0878f841b35f46b5f2dc9cbd71c5be5895ae1b8903b3b24c24dfcf86291d3e4": {
4223
4227
  functionName: "runAgentTest_createServerFn_handler",
4224
- importer: () => import("./agents-DAOZPgO2.mjs")
4228
+ importer: () => import("./agents-C7B6RJ6-.mjs")
4225
4229
  },
4226
4230
  "b4f7a66e1bb69cc14ab84d8f5dc7f85119c9a9b1d065a6b4e51dd0ba84c3f60c": {
4227
4231
  functionName: "rotateRunnerJoinToken_createServerFn_handler",
4228
- importer: () => import("./runners-By-mwc3F.mjs")
4232
+ importer: () => import("./runners-Cj6z9Mqh.mjs")
4229
4233
  },
4230
4234
  "b5a89ca2d07f4ccf2827b5132ca52e7c7a42d584e702b0ab3963b2d5763c35b0": {
4231
4235
  functionName: "removeLoop_createServerFn_handler",
4232
- importer: () => import("./loops-APFcP0y6.mjs")
4236
+ importer: () => import("./loops-D8WuK7Ke.mjs")
4233
4237
  },
4234
4238
  "bde588e9b0b81a4ee619a63872d6b8b76e22db006c7a3c4351bcd56e5f76bbed": {
4235
4239
  functionName: "getAgentsPage_createServerFn_handler",
4236
- importer: () => import("./agents-DAOZPgO2.mjs")
4240
+ importer: () => import("./agents-C7B6RJ6-.mjs")
4241
+ },
4242
+ "bef559b165754b06d6d5cf7c6dccde3d5a6a326462430c621eb131f78665d6e1": {
4243
+ functionName: "runPrompt_createServerFn_handler",
4244
+ importer: () => import("./tasks-Qtml5TlK.mjs")
4237
4245
  },
4238
4246
  "e91fc2fd51633c7ca9184fea4beb66fe775ed0b4e6323111a4690da916a78b00": {
4239
4247
  functionName: "saveLoop_createServerFn_handler",
4240
- importer: () => import("./loops-APFcP0y6.mjs")
4248
+ importer: () => import("./loops-D8WuK7Ke.mjs")
4241
4249
  },
4242
4250
  "f94f0787ce6704ea24f18add66832e0367a0feb9a690d8ad6454abec5e5df193": {
4243
4251
  functionName: "disconnectConnection_createServerFn_handler",
4244
- importer: () => import("./connectors-C28g0i4c.mjs")
4252
+ importer: () => import("./connectors-e0mf2pMs.mjs")
4245
4253
  },
4246
4254
  "f9ade3084971078ee9f2bc16fcdcdfb5a8d66a0f9b634803bb611287c14e21d7": {
4247
4255
  functionName: "verifyConnection_createServerFn_handler",
4248
- importer: () => import("./connectors-C28g0i4c.mjs")
4256
+ importer: () => import("./connectors-e0mf2pMs.mjs")
4257
+ },
4258
+ "fbf19a0d12b4046a23a8a41e106a79443b174cf1cad922b029e23fb4679b20db": {
4259
+ functionName: "connectWithToken_createServerFn_handler",
4260
+ importer: () => import("./connectors-e0mf2pMs.mjs")
4249
4261
  }
4250
4262
  };
4251
4263
  async function getServerFnById(id, access) {
@@ -6156,8 +6168,8 @@ var getBaseManifest = getProdBaseManifest;
6156
6168
  var createEarlyHintsForRequest = createEarlyHintsCollector;
6157
6169
  async function loadEntries() {
6158
6170
  const [routerEntry, startEntry, pluginAdapters] = await Promise.all([
6159
- import("./router-3WmpE5b_.mjs").then((n) => n.t),
6160
- import("./start-Bdc2GJUI.mjs"),
6171
+ import("./router-54IDWTVz.mjs").then((n) => n.t),
6172
+ import("./start-Vq3Oan3v.mjs"),
6161
6173
  import("./empty-plugin-adapters-BJ4m9L8g.mjs")
6162
6174
  ]);
6163
6175
  return {
@@ -1,8 +1,7 @@
1
1
  import { t as createMiddleware } from "./ssr.mjs";
2
- import { l as migrateIfNeeded } from "./client-CKkOfh-s.mjs";
3
- import { r as isLoopbackHost } from "./callback-CUINvl7M.mjs";
4
- import { a as readAppToken, i as isPublicApiPath, n as assertAppAccess, t as appAccessCookie } from "./access-zIl15o8y.mjs";
5
- //#region node_modules/.nitro/vite/services/ssr/assets/start-Bdc2GJUI.js
2
+ import { l as migrateIfNeeded } from "./client-BtVRVhQ2.mjs";
3
+ import { c as readAppToken, o as isLoopbackHost, r as assertAppAccess, s as isPublicApiPath, t as appAccessCookie } from "./access-DTttr563.mjs";
4
+ //#region node_modules/.nitro/vite/services/ssr/assets/start-Vq3Oan3v.js
6
5
  function dedupeSerializationAdapters(deduped, serializationAdapters) {
7
6
  for (let i = 0, len = serializationAdapters.length; i < len; i++) {
8
7
  const current = serializationAdapters[i];
@@ -1,6 +1,6 @@
1
1
  import { U as require_jsx_runtime, c as SwitchThumb, l as SwitchRoot } from "../_libs/@base-ui/react+[...].mjs";
2
- import { V as cn } from "./router-3WmpE5b_.mjs";
3
- //#region node_modules/.nitro/vite/services/ssr/assets/switch-ReNglgH6.js
2
+ import { W as cn } from "./router-54IDWTVz.mjs";
3
+ //#region node_modules/.nitro/vite/services/ssr/assets/switch-1pnd_bPJ.js
4
4
  var import_jsx_runtime = require_jsx_runtime();
5
5
  function Switch$1({ className, size = "default", ...props }) {
6
6
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SwitchRoot, {