@kky42/pievo-server 2.3.0 → 2.4.2

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 (199) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/MachinesModal-CSbnrUER.js +1 -0
  3. package/.output/public/assets/SignIn-0Tjqs-Ma.js +1 -0
  4. package/.output/public/assets/actionUi-DpwGIGpw.js +1 -0
  5. package/.output/public/assets/app-CaZpuwOS.css +2 -0
  6. package/.output/public/assets/index-CaS_SmDq.js +10 -0
  7. package/.output/public/assets/invite._token-Btg_0aLp.js +1 -0
  8. package/.output/public/assets/invite._token-KMD2JAgE.js +1 -0
  9. package/.output/public/assets/lifecycleUi-C7dwHtbw.js +1 -0
  10. package/.output/public/assets/loops._loopId-D5usF3DO.js +67 -0
  11. package/.output/public/assets/loops._loopId_.runs._runId-DRCgXaCq.js +3 -0
  12. package/.output/public/assets/preload-helper-DsxECZIS.js +5 -0
  13. package/.output/public/assets/routes-CtFgwdgW.js +1 -0
  14. package/.output/public/assets/routes-LDbnnQ3f.js +1 -0
  15. package/.output/public/assets/t._teamId-D41xcbsF.js +1 -0
  16. package/.output/public/assets/t._teamId-DUena1pV.js +1 -0
  17. package/.output/public/assets/ui-Do4gqMyP.js +1 -0
  18. package/.output/server/_libs/@base-ui/react+[...].mjs +4130 -4130
  19. package/.output/server/_libs/@tanstack/react-router+[...].mjs +1 -1
  20. package/.output/server/_libs/drizzle-orm+postgres.mjs +28 -1
  21. package/.output/server/_ssr/DashboardView-C2LdV6J0.mjs +914 -0
  22. package/.output/server/_ssr/{notifyFns-DuPR1zd7.mjs → MachinesModal-BjkcVjjx.mjs} +55 -35
  23. package/.output/server/_ssr/{SignIn-RmpWm9uy.mjs → SignIn-DEGrvJvb.mjs} +10 -24
  24. package/.output/server/_ssr/SocialLinks-Cm4H8pUJ.mjs +1044 -0
  25. package/.output/server/_ssr/{actionUi-BN55TNYE.mjs → actionUi-DJBWuNwr.mjs} +3 -3
  26. package/.output/server/_ssr/{artifactFiles-BCaIIrrT.mjs → artifactFiles-DtpRidFZ.mjs} +7 -8
  27. package/.output/server/_ssr/{artifactKind-BW0isV8L.mjs → artifactKind-FBYbgSuf.mjs} +27 -2
  28. package/.output/server/_ssr/artifacts-BR3jj0NC.mjs +2 -0
  29. package/.output/server/_ssr/{auth-30Z4lV1w.mjs → auth-C0zoZCGe.mjs} +16 -19
  30. package/.output/server/_ssr/boot-CdOO4xOo.mjs +2 -0
  31. package/.output/server/_ssr/{boot-3BNKujyp.mjs → boot-sNlIkoLe.mjs} +1331 -3927
  32. package/.output/server/_ssr/{bun-sqlite-dialect-BW9W1_Ps-_7tfuNRi.mjs → bun-sqlite-dialect-BW9W1_Ps-DmlZWqO7.mjs} +2 -2
  33. package/.output/server/_ssr/{d1-sqlite-dialect-BLC8LXE6-ucDUbeBk.mjs → d1-sqlite-dialect-BLC8LXE6-CCNzqZwZ.mjs} +2 -2
  34. package/.output/server/_ssr/db-CwLD-5w1.mjs +2 -0
  35. package/.output/server/_ssr/{dist-Cd6nlLlO.mjs → dist-B3SxDOpW.mjs} +2 -2
  36. package/.output/server/_ssr/{factory-CWWwV7XZ.mjs → factory-Dv3Zopis.mjs} +2 -2
  37. package/.output/server/_ssr/invite._token-CJ6-H-s3.mjs +20 -0
  38. package/.output/server/_ssr/{invite._token-SdWXemIc.mjs → invite._token-dLKDJKVs.mjs} +9 -17
  39. package/.output/server/_ssr/{invite._token-BKlz0R2f.mjs → invite._token-l1SjouDz.mjs} +6 -15
  40. package/.output/server/_ssr/{kysely-adapter-C8iS51DB.mjs → kysely-adapter-nL7WKSgw.mjs} +1 -1
  41. package/.output/server/_ssr/{lifecycleUi-DgBQAYzp.mjs → lifecycleUi-Dad3hvhm.mjs} +11 -11
  42. package/.output/server/_ssr/logger-B8m8F1Qu.mjs +2 -0
  43. package/.output/server/_ssr/loopApi-BKyFB4KM.mjs +342 -0
  44. package/.output/server/_ssr/{adapters-BoLkOf1T.mjs → loopProjection-B8a829ij.mjs} +25 -55
  45. package/.output/server/_ssr/loops._loopId-DS16Phmq.mjs +1271 -0
  46. package/.output/server/_ssr/{loops._loopId_.runs._runId-PUGBrD5q.mjs → loops._loopId_.runs._runId-BEJI6iK5.mjs} +23 -74
  47. package/.output/server/_ssr/{loops._loopId_.runs._runId-Ymy4lwee.mjs → loops._loopId_.runs._runId-CduETLqH.mjs} +4 -5
  48. package/.output/server/_ssr/{machineFns-BZ9puxDt.mjs → machineFns-ByMsgG12.mjs} +3 -5
  49. package/.output/server/_ssr/{node-sqlite-dialect-D_3JmkMo.mjs → node-sqlite-dialect-CjNineno.mjs} +2 -2
  50. package/.output/server/_ssr/router-CXyrnvx-.mjs +565 -0
  51. package/.output/server/_ssr/{routes-ClZEdsnB.mjs → routes-BulNEUEE.mjs} +6 -10
  52. package/.output/server/_ssr/{routes-ComqHvCL.mjs → routes-DD94baie.mjs} +3 -3
  53. package/.output/server/_ssr/{routes-D5jJJ-30.mjs → routes-Wjexi35W.mjs} +6 -6
  54. package/.output/server/_ssr/runDiff-Ba8Lg1vg.mjs +2 -0
  55. package/.output/server/_ssr/ssr.mjs +60 -100
  56. package/.output/server/_ssr/store-Cujtg2QE.mjs +2 -0
  57. package/.output/server/_ssr/{t._teamId-BgHV_KFP.mjs → t._teamId-1CreIlPV.mjs} +7 -11
  58. package/.output/server/_ssr/{t._teamId-DDERNgfn.mjs → t._teamId-Bd6-zZsy.mjs} +4 -4
  59. package/.output/server/_ssr/{t._teamId-DRJvKHZn.mjs → t._teamId-COuMKQ4r.mjs} +7 -7
  60. package/.output/server/_ssr/{teamFns-Bp81UO-x.mjs → teamFns-H438WnZC.mjs} +12 -30
  61. package/.output/server/_ssr/{teamFns-bm82twd5.mjs → teamFns-j2JKjorZ.mjs} +2 -2
  62. package/.output/server/_ssr/tokens-DgG_Syq3.mjs +2 -0
  63. package/.output/server/_ssr/{ui-Ww2tTM2u.mjs → ui-D5KWstlb.mjs} +26 -48
  64. package/.output/server/{_tanstack-start-manifest_v-DwKENYCN.mjs → _tanstack-start-manifest_v-3H7yBKLz.mjs} +25 -35
  65. package/{drizzle/0000_round_marauders.sql → .output/server/drizzle/0000_baseline.sql} +102 -44
  66. package/.output/server/drizzle/meta/_journal.json +3 -115
  67. package/.output/server/index.mjs +83 -132
  68. package/{.output/server/drizzle/0000_round_marauders.sql → drizzle/0000_baseline.sql} +102 -44
  69. package/drizzle/meta/_journal.json +3 -115
  70. package/package.json +2 -11
  71. package/scripts/pievo-server.mjs +3 -1
  72. package/scripts/server-cli-lib.mjs +23 -16
  73. package/.output/public/assets/CodeField-dOzyFQNH.js +0 -34
  74. package/.output/public/assets/LoopView-DjVHUyrR.js +0 -59
  75. package/.output/public/assets/Modal-CCRvx959.js +0 -1
  76. package/.output/public/assets/SignIn-Qxw5zDFq.js +0 -1
  77. package/.output/public/assets/actionUi-CXxhzYe2.js +0 -1
  78. package/.output/public/assets/app-D1cij_NJ.css +0 -2
  79. package/.output/public/assets/artifactView-Cd5wWPil.js +0 -66
  80. package/.output/public/assets/index-BRN_CQ8U.js +0 -12
  81. package/.output/public/assets/invite._token-BIxr8DlP.js +0 -1
  82. package/.output/public/assets/invite._token-j2BTCeG1.js +0 -1
  83. package/.output/public/assets/jsx-runtime-BseJUIpC.js +0 -1
  84. package/.output/public/assets/lifecycleUi-Qy_8beQK.js +0 -1
  85. package/.output/public/assets/loopApi-CT1mMhlb.js +0 -3
  86. package/.output/public/assets/loops._loopId-BRBQzioy.js +0 -4
  87. package/.output/public/assets/loops._loopId_.runs._runId-CMnOJkem.js +0 -3
  88. package/.output/public/assets/notifyFns-DYD4EKaG.js +0 -1
  89. package/.output/public/assets/preload-helper-DFkkpP6W.js +0 -3
  90. package/.output/public/assets/routes-3nuEJGdo.js +0 -1
  91. package/.output/public/assets/routes-DORLim-C.js +0 -1
  92. package/.output/public/assets/t._teamId-F5f4K8kd.js +0 -1
  93. package/.output/public/assets/t._teamId-XfE_S1Fo.js +0 -1
  94. package/.output/public/assets/ui-Dhsx6SW0.js +0 -1
  95. package/.output/public/assets/useRouter-DsjH8G0p.js +0 -1
  96. package/.output/server/_libs/@codemirror/autocomplete+[...].mjs +0 -19713
  97. package/.output/server/_libs/@codemirror/lang-css+[...].mjs +0 -2636
  98. package/.output/server/_libs/@codemirror/lang-html+[...].mjs +0 -2247
  99. package/.output/server/_libs/@codemirror/lang-json+[...].mjs +0 -79
  100. package/.output/server/_libs/@reduxjs/toolkit+[...].mjs +0 -1736
  101. package/.output/server/_libs/@uiw/codemirror-extensions-basic-setup+[...].mjs +0 -76
  102. package/.output/server/_libs/babel__runtime.mjs +0 -30
  103. package/.output/server/_libs/clsx.mjs +0 -16
  104. package/.output/server/_libs/codemirror__commands.mjs +0 -1725
  105. package/.output/server/_libs/codemirror__lint.mjs +0 -565
  106. package/.output/server/_libs/codemirror__search.mjs +0 -1138
  107. package/.output/server/_libs/codemirror__theme-one-dark.mjs +0 -161
  108. package/.output/server/_libs/d3-array.mjs +0 -231
  109. package/.output/server/_libs/d3-color.mjs +0 -330
  110. package/.output/server/_libs/d3-format.mjs +0 -252
  111. package/.output/server/_libs/d3-interpolate.mjs +0 -163
  112. package/.output/server/_libs/d3-path.mjs +0 -77
  113. package/.output/server/_libs/d3-scale+[...].mjs +0 -1907
  114. package/.output/server/_libs/d3-shape.mjs +0 -818
  115. package/.output/server/_libs/decimal.js-light.mjs +0 -884
  116. package/.output/server/_libs/dom-serializer+[...].mjs +0 -708
  117. package/.output/server/_libs/domhandler.mjs +0 -461
  118. package/.output/server/_libs/domutils.mjs +0 -868
  119. package/.output/server/_libs/es-toolkit.mjs +0 -1737
  120. package/.output/server/_libs/eventemitter3.mjs +0 -236
  121. package/.output/server/_libs/html-dom-parser+htmlparser2.mjs +0 -1560
  122. package/.output/server/_libs/html-react-parser+[...].mjs +0 -1360
  123. package/.output/server/_libs/react-is.mjs +0 -48
  124. package/.output/server/_libs/react-redux+[...].mjs +0 -205
  125. package/.output/server/_libs/recharts+victory-vendor.mjs +0 -17303
  126. package/.output/server/_libs/uiw__codemirror-themes.mjs +0 -32
  127. package/.output/server/_libs/uiw__react-codemirror.mjs +0 -354
  128. package/.output/server/_ssr/CodeField-B7oOmmwH.mjs +0 -143
  129. package/.output/server/_ssr/DashboardView-BF7PciP7.mjs +0 -2736
  130. package/.output/server/_ssr/LoopPlaybook-DC7QVvPY.mjs +0 -2105
  131. package/.output/server/_ssr/LoopView-DwSrm9Ja.mjs +0 -1300
  132. package/.output/server/_ssr/Modal-MaCG52Pv.mjs +0 -49
  133. package/.output/server/_ssr/artifactView-iuPsp5aa.mjs +0 -304
  134. package/.output/server/_ssr/artifacts-jQ-bfdhI.mjs +0 -2
  135. package/.output/server/_ssr/boot-CsEFT53K.mjs +0 -2
  136. package/.output/server/_ssr/db-CXownd1H.mjs +0 -2
  137. package/.output/server/_ssr/invite._token-CWl6kipD.mjs +0 -28
  138. package/.output/server/_ssr/logger-Gy-47z3k.mjs +0 -2
  139. package/.output/server/_ssr/loopApi-8_KgBapr.mjs +0 -109
  140. package/.output/server/_ssr/loopApi-ABi9SgWS.mjs +0 -564
  141. package/.output/server/_ssr/loops._loopId-SON_t43g.mjs +0 -30
  142. package/.output/server/_ssr/loops._loopId-p1KWsvMM.mjs +0 -1477
  143. package/.output/server/_ssr/notifyFns-BUCePuF3.mjs +0 -118
  144. package/.output/server/_ssr/router-Czxvra6l.mjs +0 -685
  145. package/.output/server/_ssr/runDiff--qLtU4FI.mjs +0 -2
  146. package/.output/server/_ssr/store-40eVzW1S.mjs +0 -2
  147. package/.output/server/_ssr/tokens-CbfoRC_s.mjs +0 -2
  148. package/.output/server/drizzle/0001_naive_silver_fox.sql +0 -25
  149. package/.output/server/drizzle/0002_funny_sage.sql +0 -12
  150. package/.output/server/drizzle/0003_optimal_slapstick.sql +0 -102
  151. package/.output/server/drizzle/0004_remove_grok_agent.sql +0 -5
  152. package/.output/server/drizzle/0005_heavy_gauntlet.sql +0 -8
  153. package/.output/server/drizzle/0006_tranquil_sharon_carter.sql +0 -1
  154. package/.output/server/drizzle/0007_faulty_starbolt.sql +0 -30
  155. package/.output/server/drizzle/0008_durable_lifecycle_evidence.sql +0 -15
  156. package/.output/server/drizzle/0009_ordinary_electro.sql +0 -1
  157. package/.output/server/drizzle/0010_workable_rage.sql +0 -14
  158. package/.output/server/drizzle/0011_steep_marvel_zombies.sql +0 -3
  159. package/.output/server/drizzle/0012_blocked_run_status.sql +0 -12
  160. package/.output/server/drizzle/0013_drop_run_outcome.sql +0 -2
  161. package/.output/server/drizzle/0014_luxuriant_scrambler.sql +0 -5
  162. package/.output/server/drizzle/0015_run_history_foundation.sql +0 -43
  163. package/.output/server/drizzle/0016_plural_machine_runs.sql +0 -4
  164. package/.output/server/drizzle/meta/0000_snapshot.json +0 -1333
  165. package/.output/server/drizzle/meta/0001_snapshot.json +0 -1498
  166. package/.output/server/drizzle/meta/0002_snapshot.json +0 -1576
  167. package/.output/server/drizzle/meta/0003_snapshot.json +0 -1666
  168. package/.output/server/drizzle/meta/0005_snapshot.json +0 -1666
  169. package/.output/server/drizzle/meta/0006_snapshot.json +0 -1672
  170. package/.output/server/drizzle/meta/0007_snapshot.json +0 -1787
  171. package/.output/server/drizzle/meta/0009_snapshot.json +0 -1793
  172. package/.output/server/drizzle/meta/0010_snapshot.json +0 -1891
  173. package/.output/server/drizzle/meta/0011_snapshot.json +0 -1872
  174. package/drizzle/0001_naive_silver_fox.sql +0 -25
  175. package/drizzle/0002_funny_sage.sql +0 -12
  176. package/drizzle/0003_optimal_slapstick.sql +0 -102
  177. package/drizzle/0004_remove_grok_agent.sql +0 -5
  178. package/drizzle/0005_heavy_gauntlet.sql +0 -8
  179. package/drizzle/0006_tranquil_sharon_carter.sql +0 -1
  180. package/drizzle/0007_faulty_starbolt.sql +0 -30
  181. package/drizzle/0008_durable_lifecycle_evidence.sql +0 -15
  182. package/drizzle/0009_ordinary_electro.sql +0 -1
  183. package/drizzle/0010_workable_rage.sql +0 -14
  184. package/drizzle/0011_steep_marvel_zombies.sql +0 -3
  185. package/drizzle/0012_blocked_run_status.sql +0 -12
  186. package/drizzle/0013_drop_run_outcome.sql +0 -2
  187. package/drizzle/0014_luxuriant_scrambler.sql +0 -5
  188. package/drizzle/0015_run_history_foundation.sql +0 -43
  189. package/drizzle/0016_plural_machine_runs.sql +0 -4
  190. package/drizzle/meta/0000_snapshot.json +0 -1333
  191. package/drizzle/meta/0001_snapshot.json +0 -1498
  192. package/drizzle/meta/0002_snapshot.json +0 -1576
  193. package/drizzle/meta/0003_snapshot.json +0 -1666
  194. package/drizzle/meta/0005_snapshot.json +0 -1666
  195. package/drizzle/meta/0006_snapshot.json +0 -1672
  196. package/drizzle/meta/0007_snapshot.json +0 -1787
  197. package/drizzle/meta/0009_snapshot.json +0 -1793
  198. package/drizzle/meta/0010_snapshot.json +0 -1891
  199. package/drizzle/meta/0011_snapshot.json +0 -1872
@@ -1,49 +0,0 @@
1
- import { c as DialogRoot, d as DialogClose, f as DialogBackdrop, g as require_jsx_runtime, l as DialogPortal, s as DialogTitle, u as DialogPopup } from "../_libs/@base-ui/react+[...].mjs";
2
- import { O as sectionHeadCls } from "./ui-Ww2tTM2u.mjs";
3
- //#region node_modules/.nitro/vite/services/ssr/assets/Modal-MaCG52Pv.js
4
- var import_jsx_runtime = require_jsx_runtime();
5
- /** Shared modal shell — Base UI Dialog handles focus trap, Esc, scroll lock.
6
- * Content-height, optically centered — sized for the small form/compose dialogs
7
- * (the old `detail`/`wide` variants died with the modal-era job/run views). */
8
- function Modal({ open, onClose, children, wide = false }) {
9
- const pos = `-translate-y-1/2 max-h-[calc(100dvh-4rem)] ${wide ? "top-1/2 max-w-[62rem]" : "top-[46%] max-w-160"}`;
10
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DialogRoot, {
11
- open,
12
- onOpenChange: (o) => !o && onClose(),
13
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(DialogPortal, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(DialogBackdrop, { className: "fixed inset-0 z-[900] bg-black/25 backdrop-blur-[8px] transition-opacity duration-200 data-[ending-style]:opacity-0 data-[starting-style]:opacity-0 dark:bg-black/45" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DialogPopup, {
14
- className: `glass-strong fixed left-1/2 z-[901] w-full -translate-x-1/2 overflow-auto rounded-sheet px-[26px] pb-7 pt-6 outline-none transition-opacity duration-200 data-[ending-style]:opacity-0 data-[starting-style]:opacity-0 ${pos}`,
15
- children
16
- })] })
17
- });
18
- }
19
- function ModalHead({ title, sub }) {
20
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
21
- className: "flex items-start justify-between gap-3",
22
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(DialogTitle, {
23
- className: "text-[20px] font-semibold tracking-[-0.015em] text-display",
24
- children: title
25
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DialogClose, {
26
- "aria-label": "Close",
27
- className: "-mr-1 shrink-0 cursor-pointer rounded-full border-none bg-transparent px-1.5 py-0.5 text-[15px] leading-none text-disabled transition-colors hover:text-display focus-visible:text-display focus-visible:outline-none",
28
- children: "✕"
29
- })]
30
- }), sub != null && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
31
- className: "mt-1.5 text-meta text-secondary",
32
- children: sub
33
- })] });
34
- }
35
- /**
36
- * Section divider heading - sentence case, hierarchy from weight + color.
37
- * `action` drops an optional control (e.g. Copy) flush-right on the divider.
38
- */
39
- function ModalSection({ children, action }) {
40
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
41
- className: "mb-2.5 mt-6 flex items-end justify-between gap-3 border-b border-hairline pb-1.5",
42
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", {
43
- className: sectionHeadCls,
44
- children
45
- }), action]
46
- });
47
- }
48
- //#endregion
49
- export { ModalHead as n, ModalSection as r, Modal as t };
@@ -1,304 +0,0 @@
1
- import { o as __toESM } from "../_runtime.mjs";
2
- import { g as require_jsx_runtime, h as require_react } from "../_libs/@base-ui/react+[...].mjs";
3
- import { o as getArtifact } from "./loopApi-8_KgBapr.mjs";
4
- import { t as artifactKind } from "./artifactKind-BW0isV8L.mjs";
5
- import { t as purify } from "../_libs/dompurify.mjs";
6
- import { t as g } from "../_libs/marked.mjs";
7
- //#region node_modules/.nitro/vite/services/ssr/assets/artifactView-iuPsp5aa.js
8
- var import_react = /* @__PURE__ */ __toESM(require_react());
9
- var import_jsx_runtime = require_jsx_runtime();
10
- /** Download URL for one artifact - the path is segment-encoded so a nested path
11
- * (`data/raw.json`) round-trips and can't be mistaken for extra route segments. */
12
- function downloadHref(loopId, path) {
13
- const enc = path.split("/").map(encodeURIComponent).join("/");
14
- return `/api/artifact/${encodeURIComponent(loopId)}/${enc}`;
15
- }
16
- /** Inline render URL for an image artifact - the same bytes as `downloadHref`
17
- * but served with the real image content-type + `inline` disposition (see the
18
- * route). Used as an <img> src; never for a document the browser navigates to. */
19
- function inlineHref(loopId, path) {
20
- return `${downloadHref(loopId, path)}?view=inline`;
21
- }
22
- /**
23
- * Shared markdown → sanitized HTML pipeline: marked (GFM) → DOMPurify (an
24
- * allowlisted prose subset, NO script/handlers). ONE sanitizer config for every
25
- * markdown surface (including the Files viewer's `TaskFileView`) so the allowlist
26
- * can't drift between them. Render the output under
27
- * the `.taskmd` styles.
28
- */
29
- var MD_SANITIZE = {
30
- ALLOWED_TAGS: [
31
- "h1",
32
- "h2",
33
- "h3",
34
- "h4",
35
- "h5",
36
- "h6",
37
- "p",
38
- "br",
39
- "hr",
40
- "strong",
41
- "b",
42
- "em",
43
- "i",
44
- "del",
45
- "s",
46
- "code",
47
- "pre",
48
- "blockquote",
49
- "ul",
50
- "ol",
51
- "li",
52
- "a",
53
- "span",
54
- "table",
55
- "thead",
56
- "tbody",
57
- "tr",
58
- "th",
59
- "td",
60
- "img"
61
- ],
62
- ALLOWED_ATTR: [
63
- "href",
64
- "title",
65
- "target",
66
- "rel",
67
- "src",
68
- "alt"
69
- ]
70
- };
71
- /** Markdown string → sanitized HTML string (safe for dangerouslySetInnerHTML). */
72
- function renderMarkdown(content) {
73
- return purify.sanitize(g.parse(content, {
74
- async: false,
75
- gfm: true
76
- }), MD_SANITIZE);
77
- }
78
- /**
79
- * Renders markdown (a loop's task file, or any `.md` artifact) as a calm,
80
- * formatted document instead of a raw mono dump. Pipeline: the shared
81
- * `renderMarkdown` (marked GFM → DOMPurify allowlist) → `.taskmd` styles.
82
- * Bare prose only — the host (the unified Files viewer) owns the surface,
83
- * padding cadence, and scroll.
84
- */
85
- function TaskFileView({ content }) {
86
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
87
- className: "taskmd px-5 py-4",
88
- dangerouslySetInnerHTML: { __html: (0, import_react.useMemo)(() => renderMarkdown(content), [content]) }
89
- });
90
- }
91
- /**
92
- * Shared pieces of the artifact content viewer - one source for the Files
93
- * panel's detail pane AND the dashboard artifact primitives (`<loop-embed>`,
94
- * `<loop-calendar>`'s and `<loop-kanban>`'s detail), so the caption strip, the
95
- * binary/oversize copy, and the type-appropriate render can't drift between
96
- * surfaces.
97
- *
98
- * Display types (see `lib/artifactKind`):
99
- * - HTML → a STRICT sandboxed iframe (`sandbox="allow-scripts"`, deliberately
100
- * NO `allow-same-origin`): user-machine-synced markup renders richly
101
- * but in an opaque origin, so its scripts can't read the app's
102
- * cookies/session or reach `parent` - stored-XSS is contained by
103
- * design. A Preview/Source toggle exposes the raw markup too.
104
- * - image → an <img> pointed at the hardened inline route (`inlineHref`); the
105
- * bytes are NEVER inlined into the app DOM (SVG is scriptable, so it
106
- * rides as an image, which does not execute embedded scripts).
107
- * - markdown → the shared markdown pipeline (Preview) with a raw Source toggle.
108
- * - text → monospace source.
109
- * Everything keeps a Download fallback; an oversize (metadata-only) artifact has
110
- * no synced bytes to render, so it says so rather than showing an empty pane.
111
- */
112
- var isMarkdown = (path) => artifactKind(path) === "markdown";
113
- /** A small monospace caption strip above a file's content (path · meta [· action]). */
114
- function ViewerHead({ path, meta, action }) {
115
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
116
- className: "sticky top-0 z-10 flex flex-wrap items-center gap-x-2 gap-y-1 border-b border-hairline bg-surface px-5 py-2.5",
117
- children: [
118
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
119
- className: "break-all font-mono text-label text-primary",
120
- children: path
121
- }),
122
- meta && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
123
- className: "font-mono text-caption text-disabled",
124
- children: ["· ", meta]
125
- }),
126
- action && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
127
- className: "ml-auto shrink-0",
128
- children: action
129
- })
130
- ]
131
- });
132
- }
133
- /** The binary / oversize body - download affordance or the metadata-only note. */
134
- function BinaryNotice({ loopId, path, oversize }) {
135
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
136
- className: "px-5 py-8 text-body text-secondary",
137
- children: oversize ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
138
- className: "text-disabled",
139
- children: "Too large to preview - stored as metadata only (no synced bytes)."
140
- }) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
141
- "Binary file - not previewable.",
142
- " ",
143
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", {
144
- href: downloadHref(loopId, path),
145
- download: true,
146
- className: "text-interactive underline underline-offset-2 transition-colors hover:text-display",
147
- children: "Download"
148
- })
149
- ] })
150
- });
151
- }
152
- /** The viewer's action strip: a Preview/Source toggle (renderable types only)
153
- * plus an always-present Download. Sits just under the content head. */
154
- function ViewerActions({ loopId, path, mode, onMode, showToggle }) {
155
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
156
- className: "flex items-center gap-2 border-b border-hairline bg-surface px-5 py-1.5",
157
- children: [showToggle && mode && onMode && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
158
- className: "inline-flex overflow-hidden rounded-control border border-hairline",
159
- children: ["preview", "source"].map((m) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
160
- type: "button",
161
- onClick: () => onMode(m),
162
- className: `cursor-pointer border-none px-2.5 py-0.5 text-caption font-medium transition-colors ${mode === m ? "bg-raised text-display" : "bg-transparent text-secondary hover:text-display"}`,
163
- children: m === "preview" ? "Preview" : "Source"
164
- }, m))
165
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", {
166
- href: downloadHref(loopId, path),
167
- download: true,
168
- className: "ml-auto shrink-0 text-caption font-medium text-interactive underline underline-offset-2 transition-colors hover:text-display",
169
- children: "Download ↓"
170
- })]
171
- });
172
- }
173
- /**
174
- * Rendered HTML in a STRICT sandbox. `sandbox="allow-scripts"` WITHOUT
175
- * `allow-same-origin` is the load-bearing isolation: the frame gets an opaque
176
- * origin, so document.cookie is empty, storage is inaccessible, and `parent`
177
- * access throws a cross-origin SecurityError - synced markup can render (styles
178
- * + its own scripts run) yet can't touch the app's session or DOM. `srcDoc`
179
- * keeps the bytes off any navigable app-origin URL. Bounded height with internal
180
- * scroll; a white backdrop matches what report HTML expects regardless of theme.
181
- */
182
- function HtmlPreview({ html }) {
183
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("iframe", {
184
- title: "Rendered HTML artifact (sandboxed)",
185
- srcDoc: html,
186
- sandbox: "allow-scripts",
187
- referrerPolicy: "no-referrer",
188
- className: "h-[min(70vh,620px)] w-full border-0 bg-white"
189
- });
190
- }
191
- /** An image artifact, rendered from the hardened inline route (never inlined
192
- * into the app DOM). Falls back to a download prompt if the bytes won't load. */
193
- function ImageView({ loopId, file }) {
194
- const [failed, setFailed] = (0, import_react.useState)(false);
195
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
196
- className: "min-w-0",
197
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ViewerActions, {
198
- loopId,
199
- path: file.path,
200
- showToggle: false
201
- }), failed ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
202
- className: "px-5 py-8 text-body text-secondary",
203
- children: [
204
- "Couldn't load this image.",
205
- " ",
206
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", {
207
- href: downloadHref(loopId, file.path),
208
- download: true,
209
- className: "text-interactive underline underline-offset-2 transition-colors hover:text-display",
210
- children: "Download"
211
- }),
212
- " ",
213
- "instead."
214
- ]
215
- }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
216
- className: "flex justify-center overflow-auto px-5 py-6",
217
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
218
- src: inlineHref(loopId, file.path),
219
- alt: file.path,
220
- onError: () => setFailed(true),
221
- className: "max-w-full rounded-control border border-hairline bg-white object-contain"
222
- })
223
- })]
224
- });
225
- }
226
- /** A text-bearing artifact (html / markdown / plain text): fetch the bytes, then
227
- * render per its kind with a Preview/Source toggle (html + markdown) + download. */
228
- function TextArtifactView({ loopId, file, kind }) {
229
- const [loaded, setLoaded] = (0, import_react.useState)({ loading: true });
230
- const [mode, setMode] = (0, import_react.useState)("preview");
231
- (0, import_react.useEffect)(() => {
232
- let alive = true;
233
- setLoaded({ loading: true });
234
- getArtifact({ data: {
235
- loopId,
236
- path: file.path
237
- } }).then((c) => alive && setLoaded(c)).catch((e) => alive && setLoaded({ error: String(e) }));
238
- return () => {
239
- alive = false;
240
- };
241
- }, [
242
- loopId,
243
- file.path,
244
- file.updatedAt
245
- ]);
246
- if ("loading" in loaded) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
247
- className: "px-5 py-6 text-body text-disabled",
248
- children: "Loading…"
249
- });
250
- if ("binary" in loaded) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BinaryNotice, {
251
- loopId,
252
- path: file.path,
253
- oversize: loaded.oversize
254
- });
255
- if ("error" in loaded) return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
256
- className: "px-5 py-6 text-body text-accent",
257
- children: ["Couldn't load this file - ", loaded.error]
258
- });
259
- const text = loaded.text || "(empty file)";
260
- const renderable = kind === "html" || kind === "markdown";
261
- const showSource = !renderable || mode === "source";
262
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
263
- className: "min-w-0",
264
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ViewerActions, {
265
- loopId,
266
- path: file.path,
267
- mode,
268
- onMode: setMode,
269
- showToggle: renderable
270
- }), kind === "html" && !showSource ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(HtmlPreview, { html: loaded.text || "" }) : kind === "markdown" && !showSource ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TaskFileView, { content: text }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("pre", {
271
- className: "m-0 overflow-x-auto whitespace-pre-wrap px-5 py-4 font-mono text-label leading-relaxed text-secondary",
272
- children: text
273
- })]
274
- });
275
- }
276
- /**
277
- * One artifact's content body, dispatched by display kind (see `artifactKind`).
278
- * Oversize → metadata-only note (no bytes); image → hardened <img>; other binary
279
- * → download; text-bearing → the fetch-and-render viewer.
280
- */
281
- function ArtifactBody({ loopId, file }) {
282
- const kind = artifactKind(file.path);
283
- if (file.oversize) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BinaryNotice, {
284
- loopId,
285
- path: file.path,
286
- oversize: true
287
- });
288
- if (kind === "image") return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ImageView, {
289
- loopId,
290
- file
291
- }, `${file.path}:${file.updatedAt ?? ""}`);
292
- if (file.binary) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BinaryNotice, {
293
- loopId,
294
- path: file.path,
295
- oversize: false
296
- });
297
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TextArtifactView, {
298
- loopId,
299
- file,
300
- kind
301
- }, file.path);
302
- }
303
- //#endregion
304
- export { isMarkdown as i, TaskFileView as n, ViewerHead as r, ArtifactBody as t };
@@ -1,2 +0,0 @@
1
- import { i as BLOB_CAP, p as SYNC_BODY_CAP } from "./boot-3BNKujyp.mjs";
2
- export { BLOB_CAP, SYNC_BODY_CAP };
@@ -1,2 +0,0 @@
1
- import { G as getArtifactSync, Y as getCliGateway, Z as getGateway } from "./boot-3BNKujyp.mjs";
2
- export { getArtifactSync, getCliGateway, getGateway };
@@ -1,2 +0,0 @@
1
- import { N as db } from "./boot-3BNKujyp.mjs";
2
- export { db };
@@ -1,28 +0,0 @@
1
- import { g as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
2
- import { f as useRouter } from "../_libs/@tanstack/react-router+[...].mjs";
3
- import { r as LoadErrorCard } from "./actionUi-BN55TNYE.mjs";
4
- //#region node_modules/.nitro/vite/services/ssr/assets/invite._token-CWl6kipD.js
5
- var import_jsx_runtime = require_jsx_runtime();
6
- /**
7
- * Invite-link redeem (`/invite/<token>`, design §4 option B). The recipient opens
8
- * the link the owner shared; if signed out (under the gate) they hit the normal
9
- * gated GitHub sign-in and return here — the invite NEVER bypasses the login
10
- * allowlist (decision 3), it only grants membership once they already have an
11
- * account. On redeem we navigate to the team's dashboard.
12
- *
13
- * Open mode has no identities, so an invite is meaningless there — it renders a
14
- * calm explanation rather than a broken redeem.
15
- */
16
- function LoadError({ error }) {
17
- const router = useRouter();
18
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("main", {
19
- className: "mx-auto max-w-[1180px] px-8 pt-12",
20
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(LoadErrorCard, {
21
- title: "Couldn't open this invite.",
22
- detail: String(error),
23
- onRetry: () => void router.invalidate()
24
- })
25
- });
26
- }
27
- //#endregion
28
- export { LoadError as errorComponent };
@@ -1,2 +0,0 @@
1
- import { Mt as logger } from "./boot-3BNKujyp.mjs";
2
- export { logger };
@@ -1,109 +0,0 @@
1
- import { n as createServerFn, r as getServerFnById, t as TSS_SERVER_FUNCTION } from "./ssr.mjs";
2
- //#region node_modules/.nitro/vite/services/ssr/assets/loopApi-8_KgBapr.js
3
- var createSsrRpc = (functionId) => {
4
- const url = "/_serverFn/" + functionId;
5
- const serverFnMeta = { id: functionId };
6
- const fn = async (...args) => {
7
- return (await getServerFnById(functionId, { origin: "server" }))(...args);
8
- };
9
- return Object.assign(fn, {
10
- url,
11
- serverFnMeta,
12
- [TSS_SERVER_FUNCTION]: true
13
- });
14
- };
15
- /**
16
- * Server functions backing the dashboard. They run server-side (createServerFn
17
- * → RPC) and call the IN-PROCESS scheduler + store directly — the scheduler
18
- * lives in this same TanStack process (booted on first call via ensureServer).
19
- * The machine-facing endpoints (poll / agent-api / report) are sibling server
20
- * routes in this same process, so one process owns the single scheduler.
21
- *
22
- * Shared workspace (v1): no per-user filtering — every signed-in user sees all
23
- * loops/machines. `userId` is creator attribution only.
24
- */
25
- /**
26
- * Resolve a loop and authorize the request against its owner. Returns the loop,
27
- * or undefined when it's missing OR (gate on) owned by a different user — callers
28
- * treat both as "not found" so existence never leaks across users.
29
- */
30
- /** Whether the auth gate is active (a GitHub OAuth app is configured). */
31
- var getAuthState = createServerFn({ method: "GET" }).handler(createSsrRpc("b8119d5fe6ca1ed9f609702aa2133b5ac5337030c0bdcf92dc7eba889d6bd2e6"));
32
- /**
33
- * Client config. `pievoCli` is the CLI invocation prefix the skill + connect
34
- * dialog use for every verb (`daemon start`, `new`, …) — defaults to the globally
35
- * installed `pievo`. Set PIEVO_CLI locally to a runnable command that points at the in-repo
36
- * daemon, e.g. `tsx /abs/packages/daemon/src/cli.ts` or
37
- * `node /abs/packages/daemon/dist/cli.js`, so loops created from THIS server tell
38
- * Claude Code to run your local code instead of the registry build.
39
- */
40
- var getConfig = createServerFn({ method: "GET" }).handler(createSsrRpc("cbb6a1b09b309459bbba3dc3851ae85fc468658b3cda77e22b6c6f3e28b65af4"));
41
- /** GET — the teams this user may view (for the header switcher) + the active
42
- * selection. A user gets only their memberships (usually one ⇒ no dropdown).
43
- * Open mode ⇒ empty. An explicit `teamId` (the `/t/<id>` route) pins the active
44
- * selection for THIS request — so the switcher highlights the tab's own team,
45
- * not the cookie's. */
46
- var listMyTeams = createServerFn({ method: "GET" }).validator((teamId) => teamId).handler(createSsrRpc("0fe12e769203c42f432a927b9cbf13a967a0f9db567b61843598f734afb4f5c6"));
47
- /** GET — whether the caller may view the given dashboard team (`/t/<id>` loader
48
- * gate). Enumeration-safe: a team the caller isn't a member of returns false, so
49
- * the loader throws the same generic not-found as a missing loop — never
50
- * confirming the team exists. Open mode ⇒ always true (single shared workspace). */
51
- var canViewTeam = createServerFn({ method: "GET" }).validator((teamId) => teamId).handler(createSsrRpc("7cc22b3a0f6b1c4c73463c3401e981ad42caf6487b479b738ee5aeacb11710da"));
52
- /** GET — the caller's default dashboard team as an id: the last-used cookie,
53
- * validated, else the personal team. Backs the `/` → `/t/<id>` redirect. */
54
- var getDefaultTeam = createServerFn({ method: "GET" }).handler(createSsrRpc("dc0ec955d0d53a150a3e9a4673f98f3509cfb4bd411c512079ae4e94c561b70c"));
55
- /** GET — the signed-in user's loops as compact summaries (newest first).
56
- * Gate on ⇒ only the given/active team's loops; open mode ⇒ the full shared list.
57
- * An explicit `teamId` (the `/t/<id>` route) scopes this request independent of
58
- * the cookie, so different tabs on /t/A and /t/B list different teams at once. */
59
- var listJobs = createServerFn({ method: "GET" }).validator((teamId) => teamId).handler(createSsrRpc("5a11dda4e2d3b0b097890c35ad7d447ff7245721b2ddc7f08787402446ef0919"));
60
- /** GET — full detail (job + summary + reversed runs). */
61
- var getJobDetail = createServerFn({ method: "GET" }).validator((id) => id).handler(createSsrRpc("0411aadd2c067b141180921284fb90f371fdeaf031baae51ae289b596e909da8"));
62
- /** GET — one older page of a loop's runs (cursor = `beforeTs`), for the card
63
- * timeline's lazy "+N" paging. Chronological (oldest-first), capped. */
64
- var loadOlderRuns = createServerFn({ method: "GET" }).validator((d) => d).handler(createSsrRpc("85fdf73d4fee43aed762f93c5d47d33200fbff39e2d082647dc921f610d32698"));
65
- /** GET — the latest 100 successful exec rows needed by dashboard charts. This is a
66
- * compact, authorized read: role filtering happens before the fixed limit, and
67
- * messages/provider telemetry never ride the response. */
68
- var getChartRuns = createServerFn({ method: "GET" }).validator((d) => d).handler(createSsrRpc("bdf2cf0a884a9dccf99323b84675f048164a726f8347a2b6578a4ed1a350712e"));
69
- /** GET — the loop's current live-synced files (metadata only; path-sorted). */
70
- var getArtifacts = createServerFn({ method: "GET" }).validator((d) => d).handler(createSsrRpc("b18bbec3d06dfc77714e1e527dfb9172fd7575a64a6c0d6e73ba6dc658dccf0d"));
71
- /** GET — one artifact's content: decoded text, or a binary/oversize marker the
72
- * UI turns into a download link (bytes stream from the /api/artifact route). */
73
- var getArtifact = createServerFn({ method: "GET" }).validator((d) => d).handler(createSsrRpc("ed10d5fe79208e5e0e4e18e4a17b18d7f7db4dd16204c00c3ac90c4644668841"));
74
- /** GET — a run's per-file diff vs the previous run (Phase 3). Lazy by runId like
75
- * computed on the server at read time (no stored diffs). Old runs
76
- * with no snapshot return `hasSnapshot: false` for the degrade copy. */
77
- var getRunDiff = createServerFn({ method: "GET" }).validator((d) => d).handler(createSsrRpc("08c28b892712a1b491b120b74c7dcb81761988d31ccea60216d1807b73c1182c"));
78
- var listTemplates = createServerFn({ method: "GET" }).handler(createSsrRpc("3155d050a38c0e160018b462404acd048bfbed9e15166920b4bba09ed72ba817"));
79
- var patchJob = createServerFn({ method: "POST" }).validator((d) => d).handler(createSsrRpc("606503961026f5ed240adadfdee20ac0af65ac9dbb67209257ff1fdb9c642324"));
80
- /** Dedicated lifecycle operations. Dashboard callers never synthesize these
81
- * transitions with patchJob: each delegates to the loop-locked store operation. */
82
- var pauseJob = createServerFn({ method: "POST" }).validator((id) => id).handler(createSsrRpc("4c664fb177d6aae868b6baeab69348cff67d74d905cc6cf779c43cb37139b0aa"));
83
- var startJob = createServerFn({ method: "POST" }).validator((id) => id).handler(createSsrRpc("7732cf412e02d47d9ac3933f09510503ea08428df967d44267ba47bea10d4cc4"));
84
- var stopJob = createServerFn({ method: "POST" }).validator((id) => id).handler(createSsrRpc("934749369c5760593935c24bfa6f2041d3e82ea02fb7a13dfa7fd32940ac395d"));
85
- /** Delete is one confirmed operation. Reachable machines get the graceful
86
- * Stop-and-wait path; a machine already offline at click time cannot acknowledge
87
- * Stop, so retire its execution authority and remove server data immediately.
88
- * Local files are never touched by either path. */
89
- var deleteJob = createServerFn({ method: "POST" }).validator((id) => id).handler(createSsrRpc("c3ccf6ce71809a0cdaf481b15b5fdc5db3a453a508e5841a62034cb1915a7f92"));
90
- createServerFn({ method: "POST" }).validator((d) => d).handler(createSsrRpc("0cb2218861830aae4338b814b3819e15100942beab970bc4c188f88b8cb6bc7e"));
91
- var runJob = createServerFn({ method: "POST" }).validator((id) => id).handler(createSsrRpc("0c9031f2f6a9ac0b1c60075833169755ef1815324918d1426c966ac8db563798"));
92
- var evolveJob = createServerFn({ method: "POST" }).validator((id) => id).handler(createSsrRpc("8a11b8d76ad42203a4bf128db0b8e0f2d6c947300dbee7a51498418404f211cd"));
93
- /** Agent-first steer: durably queue an owner instruction. A pending steer is
94
- * updated in place; a steer already running gets one follow-up. */
95
- var requestSteer = createServerFn({ method: "POST" }).validator((d) => d).handler(createSsrRpc("38b831a8de4883e3d877f2169eaebde5864a2f256b1c5c790fa669702968cff9"));
96
- /** Dedicated Stop-run operation. Pending work cancels immediately; running work
97
- * records intent and stays Running until the daemon reports its actual result. */
98
- var stopRun = createServerFn({ method: "POST" }).validator((id) => id).handler(createSsrRpc("6850ba403da9dec5aff45794eb52636ca540ddec2d9e59f5c75ccbb852bfeacb"));
99
- /**
100
- * Mint a fresh claim token for a New-loop dialog. It's shown in the paste
101
- * snippet and used by Claude Code as (a) this machine's device token if the
102
- * machine is new, and (b) the loop's `claim` so the dialog can correlate the
103
- * created loop. No machine row is created here — the daemon self-registers.
104
- */
105
- var mintClaim = createServerFn({ method: "POST" }).validator((teamId) => teamId).handler(createSsrRpc("4646f52fb09b83c9c9cef34836f3c9d03416423c879d9e5ceffcafd9a71ecba6"));
106
- /** Poll a claim while the New-loop dialog waits for Claude Code to create the loop. */
107
- var claimStatus = createServerFn({ method: "GET" }).validator((token) => token).handler(createSsrRpc("4b0db7d6c8f25383a3526598cb0c1881db6cf413e451e9478687c05666461347"));
108
- //#endregion
109
- export { startJob as C, runJob as S, stopRun as T, loadOlderRuns as _, evolveJob as a, pauseJob as b, getAuthState as c, getDefaultTeam as d, getJobDetail as f, listTemplates as g, listMyTeams as h, deleteJob as i, getChartRuns as l, listJobs as m, claimStatus as n, getArtifact as o, getRunDiff as p, createSsrRpc as r, getArtifacts as s, canViewTeam as t, getConfig as u, mintClaim as v, stopJob as w, requestSteer as x, patchJob as y };