@kky42/pievo-server 1.0.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 (197) hide show
  1. package/.output/nitro.json +17 -0
  2. package/.output/public/assets/CodeField-dOzyFQNH.js +34 -0
  3. package/.output/public/assets/LoopView-B4H9QibC.js +55 -0
  4. package/.output/public/assets/Modal-D33gNSgx.js +1 -0
  5. package/.output/public/assets/SignIn-SHuRRyOv.js +1 -0
  6. package/.output/public/assets/actionUi-ChGGALzg.js +1 -0
  7. package/.output/public/assets/app-DElSo_jy.css +2 -0
  8. package/.output/public/assets/artifactView-DFuubXLJ.js +66 -0
  9. package/.output/public/assets/index-DfpTWRSz.js +12 -0
  10. package/.output/public/assets/invite._token-DJtd-XE2.js +1 -0
  11. package/.output/public/assets/invite._token-T8oo4Qtw.js +1 -0
  12. package/.output/public/assets/jsx-runtime-BseJUIpC.js +1 -0
  13. package/.output/public/assets/lifecycleUi-DKkChdnU.js +1 -0
  14. package/.output/public/assets/loopApi-BM2nj71x.js +3 -0
  15. package/.output/public/assets/loops._loopId-B19Jw7jC.js +5 -0
  16. package/.output/public/assets/loops._loopId_.runs._runId-_CflHV38.js +3 -0
  17. package/.output/public/assets/notifyFns-DCubjpRy.js +1 -0
  18. package/.output/public/assets/preload-helper-CKUiEq3b.js +3 -0
  19. package/.output/public/assets/routes-B9tgli5f.js +1 -0
  20. package/.output/public/assets/routes-CTtlM_qt.js +1 -0
  21. package/.output/public/assets/t._teamId-Bm21mngW.js +1 -0
  22. package/.output/public/assets/t._teamId-gR7BVKkR.js +1 -0
  23. package/.output/public/assets/ui-Dp88qUWh.js +1 -0
  24. package/.output/public/assets/useRouter-DsjH8G0p.js +1 -0
  25. package/.output/public/favicon.svg +12 -0
  26. package/.output/public/fonts/GeistPixel-Square.woff2 +0 -0
  27. package/.output/server/_chunks/ssr-renderer.mjs +26 -0
  28. package/.output/server/_libs/@aws-crypto/crc32+[...].mjs +419 -0
  29. package/.output/server/_libs/@aws-sdk/checksums+[...].mjs +10732 -0
  30. package/.output/server/_libs/@aws-sdk/client-s3+[...].mjs +9475 -0
  31. package/.output/server/_libs/@aws-sdk/credential-provider-http+[...].mjs +137 -0
  32. package/.output/server/_libs/@aws-sdk/credential-provider-ini+[...].mjs +440 -0
  33. package/.output/server/_libs/@aws-sdk/credential-provider-process+[...].mjs +62 -0
  34. package/.output/server/_libs/@aws-sdk/credential-provider-sso+[...].mjs +818 -0
  35. package/.output/server/_libs/@aws-sdk/credential-provider-web-identity+[...].mjs +59 -0
  36. package/.output/server/_libs/@base-ui/react+[...].mjs +11125 -0
  37. package/.output/server/_libs/@codemirror/autocomplete+[...].mjs +19713 -0
  38. package/.output/server/_libs/@codemirror/lang-css+[...].mjs +2636 -0
  39. package/.output/server/_libs/@codemirror/lang-html+[...].mjs +2247 -0
  40. package/.output/server/_libs/@codemirror/lang-json+[...].mjs +79 -0
  41. package/.output/server/_libs/@reduxjs/toolkit+[...].mjs +1736 -0
  42. package/.output/server/_libs/@smithy/credential-provider-imds+[...].mjs +342 -0
  43. package/.output/server/_libs/@tanstack/react-router+[...].mjs +14300 -0
  44. package/.output/server/_libs/@uiw/codemirror-extensions-basic-setup+[...].mjs +76 -0
  45. package/.output/server/_libs/atomic-sleep.mjs +27 -0
  46. package/.output/server/_libs/aws-crypto__crc32c.mjs +314 -0
  47. package/.output/server/_libs/aws-sdk__nested-clients.mjs +2671 -0
  48. package/.output/server/_libs/babel__runtime.mjs +30 -0
  49. package/.output/server/_libs/clsx.mjs +16 -0
  50. package/.output/server/_libs/codemirror__commands.mjs +1725 -0
  51. package/.output/server/_libs/codemirror__lint.mjs +565 -0
  52. package/.output/server/_libs/codemirror__search.mjs +1138 -0
  53. package/.output/server/_libs/codemirror__theme-one-dark.mjs +161 -0
  54. package/.output/server/_libs/colorette.mjs +129 -0
  55. package/.output/server/_libs/croner.mjs +735 -0
  56. package/.output/server/_libs/d3-array.mjs +231 -0
  57. package/.output/server/_libs/d3-color.mjs +330 -0
  58. package/.output/server/_libs/d3-format.mjs +252 -0
  59. package/.output/server/_libs/d3-interpolate.mjs +163 -0
  60. package/.output/server/_libs/d3-path.mjs +77 -0
  61. package/.output/server/_libs/d3-scale+[...].mjs +1907 -0
  62. package/.output/server/_libs/d3-shape.mjs +689 -0
  63. package/.output/server/_libs/dateformat.mjs +341 -0
  64. package/.output/server/_libs/decimal.js-light.mjs +884 -0
  65. package/.output/server/_libs/diff.mjs +732 -0
  66. package/.output/server/_libs/dom-serializer+[...].mjs +708 -0
  67. package/.output/server/_libs/domhandler.mjs +461 -0
  68. package/.output/server/_libs/dompurify.mjs +2111 -0
  69. package/.output/server/_libs/domutils.mjs +868 -0
  70. package/.output/server/_libs/drizzle-orm+postgres.mjs +7689 -0
  71. package/.output/server/_libs/electric-sql__pglite.mjs +14674 -0
  72. package/.output/server/_libs/end-of-stream+once+wrappy.mjs +145 -0
  73. package/.output/server/_libs/es-toolkit.mjs +1737 -0
  74. package/.output/server/_libs/eventemitter3.mjs +236 -0
  75. package/.output/server/_libs/fast-copy.mjs +285 -0
  76. package/.output/server/_libs/fast-safe-stringify.mjs +172 -0
  77. package/.output/server/_libs/h3+rou3+srvx.mjs +1201 -0
  78. package/.output/server/_libs/html-dom-parser+htmlparser2.mjs +1560 -0
  79. package/.output/server/_libs/html-react-parser+[...].mjs +1360 -0
  80. package/.output/server/_libs/initdb.wasm +0 -0
  81. package/.output/server/_libs/marked.mjs +1548 -0
  82. package/.output/server/_libs/on-exit-leak-free.mjs +80 -0
  83. package/.output/server/_libs/pglite.data +37667 -8
  84. package/.output/server/_libs/pglite.wasm +0 -0
  85. package/.output/server/_libs/pino+[...].mjs +3196 -0
  86. package/.output/server/_libs/pino-abstract-transport+split2.mjs +194 -0
  87. package/.output/server/_libs/pino-pretty+[...].mjs +1623 -0
  88. package/.output/server/_libs/pinojs__redact.mjs +280 -0
  89. package/.output/server/_libs/react-redux+[...].mjs +205 -0
  90. package/.output/server/_libs/recharts+victory-vendor.mjs +15875 -0
  91. package/.output/server/_libs/tanstack__history.mjs +342 -0
  92. package/.output/server/_libs/ufo.mjs +64 -0
  93. package/.output/server/_libs/uiw__codemirror-themes.mjs +32 -0
  94. package/.output/server/_libs/uiw__react-codemirror.mjs +354 -0
  95. package/.output/server/_runtime.mjs +37 -0
  96. package/.output/server/_ssr/CodeField-tm4rr6G3.mjs +143 -0
  97. package/.output/server/_ssr/DashboardView-CC7htv28.mjs +2795 -0
  98. package/.output/server/_ssr/LoopPlaybook-BXH8mhiX.mjs +2105 -0
  99. package/.output/server/_ssr/LoopView-DCugEbHx.mjs +1106 -0
  100. package/.output/server/_ssr/Modal-DpKZHLZK.mjs +49 -0
  101. package/.output/server/_ssr/SignIn-dTndU6Hw.mjs +67 -0
  102. package/.output/server/_ssr/actionUi-CZbEixbf.mjs +119 -0
  103. package/.output/server/_ssr/adapters-BS8XosjF.mjs +130 -0
  104. package/.output/server/_ssr/artifactFiles-Cagtj7J0.mjs +61 -0
  105. package/.output/server/_ssr/artifactKind-BW0isV8L.mjs +37 -0
  106. package/.output/server/_ssr/artifactView-DS4O22wl.mjs +304 -0
  107. package/.output/server/_ssr/artifacts-DngKyW2u.mjs +2 -0
  108. package/.output/server/_ssr/auth-DY1DuYZd.mjs +38429 -0
  109. package/.output/server/_ssr/boot-BbtG0ImW.mjs +9010 -0
  110. package/.output/server/_ssr/boot-CMHTxQpJ.mjs +2 -0
  111. package/.output/server/_ssr/bun-sqlite-dialect-BW9W1_Ps-CU1Spd6z.mjs +162 -0
  112. package/.output/server/_ssr/core-RrmWoKne.mjs +5 -0
  113. package/.output/server/_ssr/createServerRpc-BD8Xn_0_.mjs +12 -0
  114. package/.output/server/_ssr/d1-sqlite-dialect-BLC8LXE6-DfG7tB8s.mjs +112 -0
  115. package/.output/server/_ssr/db-DWAuZq1o.mjs +2 -0
  116. package/.output/server/_ssr/dist-BIxFFVZg.mjs +342 -0
  117. package/.output/server/_ssr/empty-plugin-adapters-DKUlnwwl.mjs +5 -0
  118. package/.output/server/_ssr/factory-Blq0DYfT.mjs +6903 -0
  119. package/.output/server/_ssr/invite._token-BRCo9LGB.mjs +36 -0
  120. package/.output/server/_ssr/invite._token-DJxGLILJ.mjs +28 -0
  121. package/.output/server/_ssr/invite._token-NewFt27g.mjs +92 -0
  122. package/.output/server/_ssr/kysely-adapter-D3XTe64J.mjs +2 -0
  123. package/.output/server/_ssr/kysely-migration-tables-JkVUjPF_-bPAX9LR_.mjs +19 -0
  124. package/.output/server/_ssr/lifecycleUi-C9lg1r3r.mjs +38 -0
  125. package/.output/server/_ssr/logger-Dw82jNjH.mjs +2 -0
  126. package/.output/server/_ssr/loopApi-BtfkZQYK.mjs +532 -0
  127. package/.output/server/_ssr/loopApi-Cxe8WyOB.mjs +105 -0
  128. package/.output/server/_ssr/loops._loopId-7NQJPB9W.mjs +30 -0
  129. package/.output/server/_ssr/loops._loopId-DhnArGdL.mjs +1635 -0
  130. package/.output/server/_ssr/loops._loopId_.runs._runId-Bvuo2nki.mjs +29 -0
  131. package/.output/server/_ssr/loops._loopId_.runs._runId-Dip5Xk-q.mjs +674 -0
  132. package/.output/server/_ssr/machineFns-Dvr5ICUy.mjs +266 -0
  133. package/.output/server/_ssr/node-sqlite-dialect-DhyOpJTX.mjs +162 -0
  134. package/.output/server/_ssr/notifyFns-BcMRY5kP.mjs +118 -0
  135. package/.output/server/_ssr/notifyFns-Q458pZmE.mjs +580 -0
  136. package/.output/server/_ssr/router-J8KZ30xw.mjs +678 -0
  137. package/.output/server/_ssr/routes-Bcs4T1ox.mjs +28 -0
  138. package/.output/server/_ssr/routes-BoGrcf-b.mjs +43 -0
  139. package/.output/server/_ssr/routes-D4am3Zff.mjs +28 -0
  140. package/.output/server/_ssr/runDiff-CpEFqo7G.mjs +113 -0
  141. package/.output/server/_ssr/ssr.mjs +5837 -0
  142. package/.output/server/_ssr/start-4ifArtKx.mjs +4 -0
  143. package/.output/server/_ssr/store-b3JcQ08F.mjs +2 -0
  144. package/.output/server/_ssr/t._teamId-CeUhzgzT.mjs +32 -0
  145. package/.output/server/_ssr/t._teamId-DR-hQK7o.mjs +47 -0
  146. package/.output/server/_ssr/t._teamId-Dy_McbRt.mjs +31 -0
  147. package/.output/server/_ssr/teamCookie-B7hLOIie.mjs +10 -0
  148. package/.output/server/_ssr/teamFns-BIDnsg2A.mjs +473 -0
  149. package/.output/server/_ssr/teamFns-DA4ovI5g.mjs +33 -0
  150. package/.output/server/_ssr/tokens-ytd60FUt.mjs +2 -0
  151. package/.output/server/_ssr/ui-Dej2qjuS.mjs +267 -0
  152. package/.output/server/_tanstack-start-manifest_v-CVS6c7re.mjs +95 -0
  153. package/.output/server/drizzle/0000_round_marauders.sql +193 -0
  154. package/.output/server/drizzle/0001_naive_silver_fox.sql +25 -0
  155. package/.output/server/drizzle/0002_funny_sage.sql +12 -0
  156. package/.output/server/drizzle/0003_optimal_slapstick.sql +102 -0
  157. package/.output/server/drizzle/0004_remove_grok_agent.sql +5 -0
  158. package/.output/server/drizzle/0005_heavy_gauntlet.sql +8 -0
  159. package/.output/server/drizzle/0006_tranquil_sharon_carter.sql +1 -0
  160. package/.output/server/drizzle/0007_faulty_starbolt.sql +30 -0
  161. package/.output/server/drizzle/0008_durable_lifecycle_evidence.sql +15 -0
  162. package/.output/server/drizzle/meta/0000_snapshot.json +1333 -0
  163. package/.output/server/drizzle/meta/0001_snapshot.json +1498 -0
  164. package/.output/server/drizzle/meta/0002_snapshot.json +1576 -0
  165. package/.output/server/drizzle/meta/0003_snapshot.json +1666 -0
  166. package/.output/server/drizzle/meta/0005_snapshot.json +1666 -0
  167. package/.output/server/drizzle/meta/0006_snapshot.json +1672 -0
  168. package/.output/server/drizzle/meta/0007_snapshot.json +1787 -0
  169. package/.output/server/drizzle/meta/_journal.json +69 -0
  170. package/.output/server/index.mjs +464 -0
  171. package/.output/server/node_modules/tslib/modules/index.js +70 -0
  172. package/.output/server/node_modules/tslib/modules/package.json +3 -0
  173. package/.output/server/node_modules/tslib/package.json +47 -0
  174. package/.output/server/node_modules/tslib/tslib.js +484 -0
  175. package/.output/server/package.json +9 -0
  176. package/LICENSE +21 -0
  177. package/drizzle/0000_round_marauders.sql +193 -0
  178. package/drizzle/0001_naive_silver_fox.sql +25 -0
  179. package/drizzle/0002_funny_sage.sql +12 -0
  180. package/drizzle/0003_optimal_slapstick.sql +102 -0
  181. package/drizzle/0004_remove_grok_agent.sql +5 -0
  182. package/drizzle/0005_heavy_gauntlet.sql +8 -0
  183. package/drizzle/0006_tranquil_sharon_carter.sql +1 -0
  184. package/drizzle/0007_faulty_starbolt.sql +30 -0
  185. package/drizzle/0008_durable_lifecycle_evidence.sql +15 -0
  186. package/drizzle/meta/0000_snapshot.json +1333 -0
  187. package/drizzle/meta/0001_snapshot.json +1498 -0
  188. package/drizzle/meta/0002_snapshot.json +1576 -0
  189. package/drizzle/meta/0003_snapshot.json +1666 -0
  190. package/drizzle/meta/0005_snapshot.json +1666 -0
  191. package/drizzle/meta/0006_snapshot.json +1672 -0
  192. package/drizzle/meta/0007_snapshot.json +1787 -0
  193. package/drizzle/meta/_journal.json +69 -0
  194. package/package.json +84 -0
  195. package/scripts/pievo-server.mjs +390 -0
  196. package/scripts/prestart.mjs +66 -0
  197. package/scripts/server-cli-lib.mjs +451 -0
@@ -0,0 +1,28 @@
1
+ import { C 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-CZbEixbf.mjs";
4
+ //#region node_modules/.nitro/vite/services/ssr/assets/routes-Bcs4T1ox.js
5
+ var import_jsx_runtime = require_jsx_runtime();
6
+ /**
7
+ * The home route. Under the auth gate it is now a THIN redirect to the explicit
8
+ * team URL (`/t/<lastUsed|personal>`) so the dashboard's team lives in the path
9
+ * (bookmarkable, multi-tab). `/` keeps working forever: a signed-out visitor gets
10
+ * the sign-in CTA; open mode (no gate ⇒ a single shared workspace with no team to
11
+ * expose in the URL) renders the dashboard right here, unchanged.
12
+ */
13
+ /** First-load failure screen — a calm retry instead of the router's default
14
+ * error dump. Only the initial loader can land here; the in-page poll is
15
+ * fetch-then-set and keeps stale data on a transient blip. */
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 load the dashboard.",
22
+ detail: String(error),
23
+ onRetry: () => void router.invalidate()
24
+ })
25
+ });
26
+ }
27
+ //#endregion
28
+ export { LoadError as errorComponent };
@@ -0,0 +1,43 @@
1
+ import { c as createFileRoute, p as redirect, s as lazyRouteComponent } from "../_libs/@tanstack/react-router+[...].mjs";
2
+ import { d as getDefaultTeam, g as listTemplates, l as getAuthState } from "./loopApi-Cxe8WyOB.mjs";
3
+ import { a as authClient } from "./LoopPlaybook-BXH8mhiX.mjs";
4
+ import { n as fetchLiveData } from "./DashboardView-CC7htv28.mjs";
5
+ //#region node_modules/.nitro/vite/services/ssr/assets/routes-BoGrcf-b.js
6
+ var $$splitErrorComponentImporter = () => import("./routes-Bcs4T1ox.mjs");
7
+ var $$splitComponentImporter = () => import("./routes-D4am3Zff.mjs");
8
+ /**
9
+ * The home route. Under the auth gate it is now a THIN redirect to the explicit
10
+ * team URL (`/t/<lastUsed|personal>`) so the dashboard's team lives in the path
11
+ * (bookmarkable, multi-tab). `/` keeps working forever: a signed-out visitor gets
12
+ * the sign-in CTA; open mode (no gate ⇒ a single shared workspace with no team to
13
+ * expose in the URL) renders the dashboard right here, unchanged.
14
+ */
15
+ var Route = createFileRoute("/")({
16
+ ssr: false,
17
+ loader: async () => {
18
+ const auth = await getAuthState();
19
+ if (auth.enabled) {
20
+ const { data: session } = await authClient.getSession();
21
+ if (!session) return {
22
+ mode: "signin",
23
+ auth
24
+ };
25
+ throw redirect({
26
+ to: "/t/$teamId",
27
+ params: { teamId: await getDefaultTeam() }
28
+ });
29
+ }
30
+ return {
31
+ mode: "dashboard",
32
+ auth,
33
+ initial: {
34
+ ...await fetchLiveData(),
35
+ templates: await listTemplates()
36
+ }
37
+ };
38
+ },
39
+ component: lazyRouteComponent($$splitComponentImporter, "component"),
40
+ errorComponent: lazyRouteComponent($$splitErrorComponentImporter, "errorComponent")
41
+ });
42
+ //#endregion
43
+ export { Route as t };
@@ -0,0 +1,28 @@
1
+ import { C as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
2
+ import { s as useSession } from "./LoopPlaybook-BXH8mhiX.mjs";
3
+ import { t as SignIn } from "./SignIn-dTndU6Hw.mjs";
4
+ import { t as DashboardView } from "./DashboardView-CC7htv28.mjs";
5
+ import { t as Route } from "./routes-BoGrcf-b.mjs";
6
+ //#region node_modules/.nitro/vite/services/ssr/assets/routes-D4am3Zff.js
7
+ var import_jsx_runtime = require_jsx_runtime();
8
+ /**
9
+ * The home route. Under the auth gate it is now a THIN redirect to the explicit
10
+ * team URL (`/t/<lastUsed|personal>`) so the dashboard's team lives in the path
11
+ * (bookmarkable, multi-tab). `/` keeps working forever: a signed-out visitor gets
12
+ * the sign-in CTA; open mode (no gate ⇒ a single shared workspace with no team to
13
+ * expose in the URL) renders the dashboard right here, unchanged.
14
+ */
15
+ /** First-load failure screen — a calm retry instead of the router's default
16
+ * error dump. Only the initial loader can land here; the in-page poll is
17
+ * fetch-then-set and keeps stale data on a transient blip. */
18
+ /** Open mode renders the dashboard; the gated signed-out case renders SignIn. The
19
+ * gated signed-in case never reaches here (the loader threw a redirect). */
20
+ function Home() {
21
+ const loaded = Route.useLoaderData();
22
+ const { data: session, isPending } = useSession();
23
+ if (loaded?.auth?.enabled && !isPending && !session) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SignIn, {});
24
+ if (loaded?.mode === "signin") return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SignIn, {});
25
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DashboardView, { initial: loaded.initial });
26
+ }
27
+ //#endregion
28
+ export { Home as component };
@@ -0,0 +1,113 @@
1
+ import { Ft as prevRunSnapshot, V as getArtifactSync, et as getRun, tt as getRunSnapshot } from "./boot-BbtG0ImW.mjs";
2
+ import { t as createTwoFilesPatch } from "../_libs/diff.mjs";
3
+ //#region node_modules/.nitro/vite/services/ssr/assets/runDiff-CpEFqo7G.js
4
+ /**
5
+ * Per-run artifact diff (Phase 3). Computed lazily on the SERVER at read time
6
+ * (no stored diffs): load run N's snapshot + the previous run's snapshot and diff
7
+ * the two path → metadata maps. For changed TEXT files we load both blobs and
8
+ * compute a unified line diff with `diff` (jsdiff) — a pure-string library, no
9
+ * process execution, so the server's zero-exec invariant holds. Binary/oversize
10
+ * files emit a size-delta marker only (no inline diff).
11
+ */
12
+ /**
13
+ * Upper bound for computing an inline unified diff. jsdiff is synchronous and
14
+ * roughly O(N*D); on a multi-MB or minified text file it would block the
15
+ * single-process server (which also owns the scheduler) for seconds. Above this
16
+ * a changed text file degrades to the size-delta marker, like binary/oversize.
17
+ */
18
+ var MAX_DIFF_BYTES = 512 * 1024;
19
+ /** A file is text-diffable only when it has stored bytes and isn't binary/oversize. */
20
+ function isText(e) {
21
+ return !!e && !e.binary && !e.oversize && !!e.hash;
22
+ }
23
+ /** Within the inline-diff size cap (unknown size ⇒ allowed). */
24
+ function withinDiffCap(e) {
25
+ return !!e && (e.size == null || e.size <= MAX_DIFF_BYTES);
26
+ }
27
+ /** Decode a snapshot entry's blob to text, or null when bytes are absent. */
28
+ async function textOf(e) {
29
+ if (!e || !e.hash) return null;
30
+ const bytes = await (await getArtifactSync()).readBlob(e.hash);
31
+ return bytes ? bytes.toString("utf8") : null;
32
+ }
33
+ /** Unified diff between two versions of a path (empty string ⇒ added/removed side). */
34
+ function unified(path, oldText, newText) {
35
+ return createTwoFilesPatch(path, path, oldText, newText, "previous run", "this run");
36
+ }
37
+ async function computeRunDiff(runId) {
38
+ const run = await getRun(runId);
39
+ if (!run) return {
40
+ hasSnapshot: false,
41
+ files: []
42
+ };
43
+ const snap = await getRunSnapshot(runId);
44
+ if (!snap) return {
45
+ hasSnapshot: false,
46
+ files: []
47
+ };
48
+ const curr = snap.manifest ?? {};
49
+ const prev = (await prevRunSnapshot(run.loopId, run.ts))?.manifest ?? {};
50
+ const paths = [...new Set([...Object.keys(curr), ...Object.keys(prev)])].sort();
51
+ const files = [];
52
+ for (const path of paths) {
53
+ const c = curr[path];
54
+ const p = prev[path];
55
+ if (c && !p) {
56
+ const text = isText(c);
57
+ const tooLarge = text && !withinDiffCap(c);
58
+ const file = {
59
+ path,
60
+ status: "added",
61
+ binary: !text,
62
+ tooLarge,
63
+ sizeDelta: c.size ?? null
64
+ };
65
+ if (text && !tooLarge) {
66
+ const body = await textOf(c);
67
+ if (body != null) file.diff = unified(path, "", body);
68
+ else file.binary = true;
69
+ }
70
+ files.push(file);
71
+ } else if (!c && p) {
72
+ const text = isText(p);
73
+ const tooLarge = text && !withinDiffCap(p);
74
+ const file = {
75
+ path,
76
+ status: "removed",
77
+ binary: !text,
78
+ tooLarge,
79
+ sizeDelta: p.size != null ? -p.size : null
80
+ };
81
+ if (text && !tooLarge) {
82
+ const body = await textOf(p);
83
+ if (body != null) file.diff = unified(path, body, "");
84
+ else file.binary = true;
85
+ }
86
+ files.push(file);
87
+ } else if (c && p) {
88
+ if (c.hash === p.hash && c.oversize === p.oversize && c.size === p.size) continue;
89
+ const sizeDelta = c.size != null && p.size != null ? c.size - p.size : null;
90
+ const bothText = isText(c) && isText(p);
91
+ const tooLarge = bothText && !(withinDiffCap(c) && withinDiffCap(p));
92
+ const file = {
93
+ path,
94
+ status: "modified",
95
+ binary: !bothText,
96
+ tooLarge,
97
+ sizeDelta
98
+ };
99
+ if (bothText && !tooLarge) {
100
+ const [oldText, newText] = await Promise.all([textOf(p), textOf(c)]);
101
+ if (oldText != null && newText != null) file.diff = unified(path, oldText, newText);
102
+ else file.binary = true;
103
+ }
104
+ files.push(file);
105
+ }
106
+ }
107
+ return {
108
+ hasSnapshot: true,
109
+ files
110
+ };
111
+ }
112
+ //#endregion
113
+ export { computeRunDiff };