spiracha 1.3.2 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +7 -1
- package/README.md +6 -0
- package/apps/ui/AGENTS.md +8 -0
- package/apps/ui/README.md +10 -3
- package/apps/ui/dist/client/assets/analytics-DK2jdvmI.js +1 -0
- package/apps/ui/dist/client/assets/antigravity-conversations._conversationId-DmD0sN8X.js +7 -0
- package/apps/ui/dist/client/assets/antigravity-conversations._conversationId-KAcXtNxI.js +1 -0
- package/apps/ui/dist/client/assets/antigravity-keychain-panel-BRHVjFAM.js +1 -0
- package/apps/ui/dist/client/assets/antigravity._workspaceKey-ByitGWki.js +1 -0
- package/apps/ui/dist/client/assets/antigravity._workspaceKey-CGV7amas.js +1 -0
- package/apps/ui/dist/client/assets/antigravity.index-DEEkjlZa.js +1 -0
- package/apps/ui/dist/client/assets/antigravity.index-DgW25FEV.js +1 -0
- package/apps/ui/dist/client/assets/badge-DfWvPfKF.js +1 -0
- package/apps/ui/dist/client/assets/checkbox-CdHitXWQ.js +1 -0
- package/apps/ui/dist/client/assets/createServerFn-CgRRVpBH.js +3 -0
- package/apps/ui/dist/client/assets/cursor-threads._composerId-CmBFclK8.js +1 -0
- package/apps/ui/dist/client/assets/cursor-threads._composerId-Ti2gTm63.js +1 -0
- package/apps/ui/dist/client/assets/cursor._workspaceKey-CaAZjGmm.js +1 -0
- package/apps/ui/dist/client/assets/cursor._workspaceKey-DzD_c6j9.js +1 -0
- package/apps/ui/dist/client/assets/cursor.index-CrnMwDCi.js +1 -0
- package/apps/ui/dist/client/assets/cursor.index-PkCFVcl4.js +2 -0
- package/apps/ui/dist/client/assets/{data-table-Cj-v-uyB.js → data-table-Br78_dk3.js} +2 -2
- package/apps/ui/dist/client/assets/delete-confirm-dialog-BHRmyLHr.js +11 -0
- package/apps/ui/dist/client/assets/dist-B9pyYCVU.js +1 -0
- package/apps/ui/dist/client/assets/dist-BhZOxAPP.js +1 -0
- package/apps/ui/dist/client/assets/dist-DvMS2965.js +1 -0
- package/apps/ui/dist/client/assets/download-Bf0QJKD3.js +1 -0
- package/apps/ui/dist/client/assets/dropdown-menu-Dy5cLzTy.js +1 -0
- package/apps/ui/dist/client/assets/es2015-BkCWttyM.js +41 -0
- package/apps/ui/dist/client/assets/export-dialog-C86SYHJn.js +1 -0
- package/apps/ui/dist/client/assets/formatters-BM9kB7ed.js +1 -0
- package/apps/ui/dist/client/assets/index-CPvAP-jk.js +149 -0
- package/apps/ui/dist/client/assets/jsx-runtime-DGeXAQPT.js +1 -0
- package/apps/ui/dist/client/assets/metric-card-Dplm0ZiM.js +1 -0
- package/apps/ui/dist/client/assets/page-header-Cwa3p6Tl.js +1 -0
- package/apps/ui/dist/client/assets/projects._project-Ckf6muWZ.js +1 -0
- package/apps/ui/dist/client/assets/projects._project-DSDwH4NF.js +1 -0
- package/apps/ui/dist/client/assets/projects.index-DEfhWqa8.js +1 -0
- package/apps/ui/dist/client/assets/projects.index-V5ibNZII.js +3 -0
- package/apps/ui/dist/client/assets/react-dom-DL96Jor4.js +1 -0
- package/apps/ui/dist/client/assets/refresh-ccw-BgKjOiA6.js +1 -0
- package/apps/ui/dist/client/assets/reload-error-panel-AHqu0akK.js +1 -0
- package/apps/ui/dist/client/assets/routes-Df2tgpyd.js +1 -0
- package/apps/ui/dist/client/assets/scroll-text-fM0sMOB3.js +1 -0
- package/apps/ui/dist/client/assets/select-Bf2GwfPR.js +1 -0
- package/apps/ui/dist/client/assets/settings-5VQIzME0.js +1 -0
- package/apps/ui/dist/client/assets/sqlite-error-B6uZjUe8.js +1 -0
- package/apps/ui/dist/client/assets/styles-BhRkXgwB.css +1 -0
- package/apps/ui/dist/client/assets/tabs-OO4VU5KR.js +7 -0
- package/apps/ui/dist/client/assets/text-filter-DVAZySUS.js +2 -0
- package/apps/ui/dist/client/assets/threads._threadId-BB9tTsV4.js +1 -0
- package/apps/ui/dist/client/assets/threads._threadId-BgDhFj2I.js +1 -0
- package/apps/ui/dist/client/assets/useMutation-CC_B7uy5.js +1 -0
- package/apps/ui/dist/client/assets/useQuery-C5By6WKU.js +1 -0
- package/apps/ui/dist/server/assets/_tanstack-start-manifest_v-CRW2kqj0.js +232 -0
- package/apps/ui/dist/server/assets/analytics-CYP_LT5Y.js +16 -0
- package/apps/ui/dist/server/assets/{analytics-CBNOYZwJ.js → analytics-CtpOMVMO.js} +13 -6
- package/apps/ui/dist/server/assets/antigravity-conversations._conversationId-BtexWY-K.js +613 -0
- package/apps/ui/dist/server/assets/{antigravity-conversations._conversationId-BIdYNy68.js → antigravity-conversations._conversationId-zMrR6v6R.js} +2 -2
- package/apps/ui/dist/server/assets/{antigravity-db-D9gW1D8G.js → antigravity-db-Bh8_U9uw.js} +11 -7
- package/apps/ui/dist/server/assets/{antigravity-keychain-panel-DcLyBBwd.js → antigravity-keychain-panel-CC7FLmAK.js} +1 -1
- package/apps/ui/dist/server/assets/{antigravity-queries-CgQhlQ7J.js → antigravity-queries-CGrJO9Vr.js} +6 -6
- package/apps/ui/dist/server/assets/{antigravity-server-DFUx4Khk.js → antigravity-server-CHRjVFqN.js} +11 -11
- package/apps/ui/dist/server/assets/{antigravity._workspaceKey-DnSlSC-C.js → antigravity._workspaceKey-B0QeYUOh.js} +2 -2
- package/apps/ui/dist/server/assets/{antigravity._workspaceKey-D42ixtzp.js → antigravity._workspaceKey-C3kP-qyN.js} +5 -5
- package/apps/ui/dist/server/assets/{antigravity.index-DZVT-cac.js → antigravity.index-CPCYkqCi.js} +2 -2
- package/apps/ui/dist/server/assets/{codex-queries-eOJGfHQj.js → codex-queries-CtgeZ7VL.js} +16 -14
- package/apps/ui/dist/server/assets/{codex-server-nrETIF--.js → codex-server-CNXSJuc2.js} +105 -120
- package/apps/ui/dist/server/assets/concurrency-VXtYvlGh.js +18 -0
- package/apps/ui/dist/server/assets/{createServerRpc-BtXIw2iP.js → createServerRpc-CF_DEwnm.js} +1 -1
- package/apps/ui/dist/server/assets/{createSsrRpc-COf5Zuye.js → createSsrRpc-C754NPki.js} +1 -1
- package/apps/ui/dist/server/assets/{cursor-db-B7agkAvM.js → cursor-db-cYZEU3WQ.js} +194 -7
- package/apps/ui/dist/server/assets/{cursor-queries-BMhuJeUO.js → cursor-queries-NCIM0Nat.js} +13 -11
- package/apps/ui/dist/server/assets/{cursor-recovery-9bJLs7vG.js → cursor-recovery-nq-kR62j.js} +1 -1
- package/apps/ui/dist/server/assets/{cursor-server-BgylIFgn.js → cursor-server-C3q7hrp-.js} +70 -41
- package/apps/ui/dist/server/assets/{cursor-threads._composerId-DXffY_CK.js → cursor-threads._composerId-BPJFWfJj.js} +2 -2
- package/apps/ui/dist/server/assets/cursor-threads._composerId-BkMMTQ3v.js +582 -0
- package/apps/ui/dist/server/assets/{cursor._workspaceKey-BP2J1x_x.js → cursor._workspaceKey-C5PdTaKB.js} +2 -2
- package/apps/ui/dist/server/assets/{cursor._workspaceKey-BQd0e-Pd.js → cursor._workspaceKey-Ckj7apKI.js} +11 -9
- package/apps/ui/dist/server/assets/{cursor.index-CQVxtCm8.js → cursor.index-DkWT-mxw.js} +2 -2
- package/apps/ui/dist/server/assets/{delete-confirm-dialog-PCD7S0_M.js → delete-confirm-dialog-BcBNCxWB.js} +5 -1
- package/apps/ui/dist/server/assets/empty-plugin-adapters-B3lHh1La.js +5 -0
- package/apps/ui/dist/server/assets/{export-dialog-DaPlOGFT.js → export-dialog-BItjWgkZ.js} +53 -11
- package/apps/ui/dist/server/assets/{projects._project-DUN3iWfg.js → projects._project-Bpbc3C-L.js} +5 -3
- package/apps/ui/dist/server/assets/{projects._project-Dim9Y0kD.js → projects._project-CvZho6EQ.js} +42 -12
- package/apps/ui/dist/server/assets/{projects.index-DjSQK5dm.js → projects.index-BkLiF2FF.js} +21 -7
- package/apps/ui/dist/server/assets/projects.index-DesYXwfi.js +14 -0
- package/apps/ui/dist/server/assets/route-search-ts4W9MJ9.js +38 -0
- package/apps/ui/dist/server/assets/{router-DrDgc-LD.js → router-6m-ihwqA.js} +78 -62
- package/apps/ui/dist/server/assets/{routes-B-GlEe2C.js → routes-Bsact1uB.js} +2 -2
- package/apps/ui/dist/server/assets/{routes-CNHAUMwo.js → routes-BzkJgq4W.js} +2 -2
- package/apps/ui/dist/server/assets/start-CI_0bSiY.js +4 -0
- package/apps/ui/dist/server/assets/tabs-CGA13IZM.js +502 -0
- package/apps/ui/dist/server/assets/{threads._threadId-CJzm4KrZ.js → threads._threadId-Bs0yuqO9.js} +2 -2
- package/apps/ui/dist/server/assets/threads._threadId-D2GYkVn6.js +639 -0
- package/apps/ui/dist/server/assets/ui-export-files-BHLX9bhN.js +83 -0
- package/apps/ui/dist/server/server.js +340 -218
- package/package.json +9 -9
- package/src/lib/antigravity-db.ts +20 -13
- package/src/lib/codex-analytics.ts +118 -18
- package/src/lib/codex-browser-db.ts +1 -25
- package/src/lib/codex-browser-export.ts +9 -69
- package/src/lib/cursor-db.ts +318 -7
- package/src/lib/cursor-exporter.ts +2 -2
- package/src/lib/ui-cache.ts +14 -1
- package/src/spiracha.ts +20 -1
- package/apps/ui/dist/client/assets/analytics-B_hYz65v.js +0 -1
- package/apps/ui/dist/client/assets/antigravity-conversations._conversationId-qiyygB7e.js +0 -1
- package/apps/ui/dist/client/assets/antigravity-conversations._conversationId-z1SQC2Kg.js +0 -1
- package/apps/ui/dist/client/assets/antigravity-keychain-panel-dYuRWtCf.js +0 -1
- package/apps/ui/dist/client/assets/antigravity._workspaceKey-CliqUr7o.js +0 -1
- package/apps/ui/dist/client/assets/antigravity._workspaceKey-CnoBzyX6.js +0 -1
- package/apps/ui/dist/client/assets/antigravity.index-CakfZz_E.js +0 -1
- package/apps/ui/dist/client/assets/antigravity.index-DY7M1KhG.js +0 -1
- package/apps/ui/dist/client/assets/badge-aHE9ETVe.js +0 -1
- package/apps/ui/dist/client/assets/checkbox-DN3XnJaA.js +0 -1
- package/apps/ui/dist/client/assets/cursor-threads._composerId-BMQyx8qG.js +0 -1
- package/apps/ui/dist/client/assets/cursor-threads._composerId-BTlaA-tV.js +0 -1
- package/apps/ui/dist/client/assets/cursor._workspaceKey-CrgrfevV.js +0 -1
- package/apps/ui/dist/client/assets/cursor._workspaceKey-bYS2syGL.js +0 -1
- package/apps/ui/dist/client/assets/cursor.index-CTqZMPYU.js +0 -1
- package/apps/ui/dist/client/assets/cursor.index-Clsz4E_e.js +0 -2
- package/apps/ui/dist/client/assets/delete-confirm-dialog-DTpzBiNK.js +0 -11
- package/apps/ui/dist/client/assets/dist-BNAn99Pu.js +0 -1
- package/apps/ui/dist/client/assets/download-P3Rp23Ad.js +0 -1
- package/apps/ui/dist/client/assets/dropdown-menu-3qB5j9nt.js +0 -1
- package/apps/ui/dist/client/assets/es2015-Dwm_turD.js +0 -41
- package/apps/ui/dist/client/assets/export-dialog-CazdrASq.js +0 -1
- package/apps/ui/dist/client/assets/formatters-BdnWuM1z.js +0 -1
- package/apps/ui/dist/client/assets/index-BVFnfS78.js +0 -22
- package/apps/ui/dist/client/assets/json-panel-DLkS30sQ.js +0 -1
- package/apps/ui/dist/client/assets/metadata-section-jnIkB7dB.js +0 -1
- package/apps/ui/dist/client/assets/metric-card-CBZuWLzQ.js +0 -1
- package/apps/ui/dist/client/assets/page-header-CnD21cPn.js +0 -1
- package/apps/ui/dist/client/assets/projects._project-BLszwvYL.js +0 -1
- package/apps/ui/dist/client/assets/projects._project-DvLxYbvk.js +0 -1
- package/apps/ui/dist/client/assets/projects.index-COn8woBR.js +0 -1
- package/apps/ui/dist/client/assets/projects.index-DYs98skV.js +0 -3
- package/apps/ui/dist/client/assets/refresh-ccw-BDrYXjtD.js +0 -1
- package/apps/ui/dist/client/assets/reload-error-panel-DLAg0AW2.js +0 -1
- package/apps/ui/dist/client/assets/routes-BtF5-coe.js +0 -1
- package/apps/ui/dist/client/assets/scroll-text-CqaFm9by.js +0 -1
- package/apps/ui/dist/client/assets/select-DbnpwqL6.js +0 -1
- package/apps/ui/dist/client/assets/settings-CGX3VleN.js +0 -1
- package/apps/ui/dist/client/assets/styles-Ch0r3kMZ.css +0 -1
- package/apps/ui/dist/client/assets/text-document-panel-DPleOmmq.js +0 -1
- package/apps/ui/dist/client/assets/text-filter-7M6wRo-t.js +0 -2
- package/apps/ui/dist/client/assets/threads._threadId-D5w76IB-.js +0 -7
- package/apps/ui/dist/client/assets/threads._threadId-Dx85sI9P.js +0 -1
- package/apps/ui/dist/client/assets/useMutation-MZ3Hr9h9.js +0 -1
- package/apps/ui/dist/client/assets/useQuery-Cb4V0AT0.js +0 -1
- package/apps/ui/dist/server/assets/__23tanstack-start-plugin-adapters-BzCA6dXo.js +0 -5
- package/apps/ui/dist/server/assets/_tanstack-start-manifest_v-CBbkUXw6.js +0 -227
- package/apps/ui/dist/server/assets/antigravity-conversations._conversationId-B9Rm4EXh.js +0 -212
- package/apps/ui/dist/server/assets/cursor-threads._composerId-BsxFKzoJ.js +0 -218
- package/apps/ui/dist/server/assets/json-panel-RYsxWFae.js +0 -16
- package/apps/ui/dist/server/assets/metadata-section-D6Lbc7D6.js +0 -54
- package/apps/ui/dist/server/assets/start-HeKLHD9b.js +0 -4
- package/apps/ui/dist/server/assets/text-document-panel-D8JbQWAn.js +0 -23
- package/apps/ui/dist/server/assets/threads._threadId-DODTYddm.js +0 -1052
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { t as createServerFn } from "../server.js";
|
|
2
|
-
import { t as createServerRpc } from "./createServerRpc-
|
|
3
|
-
import { t as isRetryableSqliteError } from "./sqlite-error-LZDrnxdd.js";
|
|
2
|
+
import { t as createServerRpc } from "./createServerRpc-CF_DEwnm.js";
|
|
4
3
|
import { a as cleanInlineTitle, c as formatInlineLiteral, d as readJsonlObjects, h as renderSection, i as cleanExtractedText, l as formatModelLabel, m as renderMetadataBlock, n as asObject, o as createExportWriteStream, p as renderDocumentTitle, r as asString, s as finalizeExportWriteStream, t as asNumber, u as getPortablePathBasename } from "./shared-CPRNYIql.js";
|
|
4
|
+
import { t as mapWithConcurrency } from "./concurrency-VXtYvlGh.js";
|
|
5
|
+
import { t as isRetryableSqliteError } from "./sqlite-error-LZDrnxdd.js";
|
|
5
6
|
import { t as applyPathTransforms } from "./path-transforms-DL2IwtYd.js";
|
|
7
|
+
import { a as sanitizeExportFileName, n as ensureUiExportDir, o as zipExportDirectory, r as getExportMimeType, s as zipExportFile, t as buildUiExportDownloadUrl } from "./ui-export-files-BHLX9bhN.js";
|
|
6
8
|
import { finished } from "node:stream/promises";
|
|
7
9
|
import { z } from "zod";
|
|
8
10
|
import { Database } from "bun:sqlite";
|
|
@@ -373,6 +375,16 @@ var toCachePath = (key) => {
|
|
|
373
375
|
var hashCacheKeyParts = (...parts) => {
|
|
374
376
|
return createHash("sha1").update(parts.join("|")).digest("hex");
|
|
375
377
|
};
|
|
378
|
+
var hashCacheKeyPartsIterable = (parts) => {
|
|
379
|
+
const hash = createHash("sha1");
|
|
380
|
+
for (const part of parts) {
|
|
381
|
+
hash.update(String(part.length));
|
|
382
|
+
hash.update(":");
|
|
383
|
+
hash.update(part);
|
|
384
|
+
hash.update(";");
|
|
385
|
+
}
|
|
386
|
+
return hash.digest("hex");
|
|
387
|
+
};
|
|
376
388
|
var getFileFingerprint = async (filePath) => {
|
|
377
389
|
const metadata = await stat(filePath);
|
|
378
390
|
return `${filePath}:${metadata.size}:${metadata.mtimeMs}`;
|
|
@@ -390,7 +402,8 @@ var getCachedJson = async (key) => {
|
|
|
390
402
|
return null;
|
|
391
403
|
}
|
|
392
404
|
if (parsed && typeof parsed === "object" && "version" in parsed && parsed.version === CACHE_ENVELOPE_VERSION && "value" in parsed) return parsed.value;
|
|
393
|
-
|
|
405
|
+
await rm(filePath, { force: true });
|
|
406
|
+
return null;
|
|
394
407
|
};
|
|
395
408
|
var setCachedJson = async (key, value) => {
|
|
396
409
|
await ensureCacheDir();
|
|
@@ -492,20 +505,6 @@ var isPromiseLike = (value) => {
|
|
|
492
505
|
if (typeof value !== "object" && typeof value !== "function" || value === null) return false;
|
|
493
506
|
return "then" in value && typeof value.then === "function";
|
|
494
507
|
};
|
|
495
|
-
var mapWithConcurrency = async (values, limit, mapper) => {
|
|
496
|
-
const results = new Array(values.length);
|
|
497
|
-
let nextIndex = 0;
|
|
498
|
-
const worker = async () => {
|
|
499
|
-
while (true) {
|
|
500
|
-
const currentIndex = nextIndex;
|
|
501
|
-
nextIndex += 1;
|
|
502
|
-
if (currentIndex >= values.length) return;
|
|
503
|
-
results[currentIndex] = await mapper(values[currentIndex], currentIndex);
|
|
504
|
-
}
|
|
505
|
-
};
|
|
506
|
-
await Promise.all(Array.from({ length: Math.min(limit, values.length) }, () => worker()));
|
|
507
|
-
return results;
|
|
508
|
-
};
|
|
509
508
|
var openReadonlyDb = (dbPath, busyTimeoutMs) => {
|
|
510
509
|
const db = new Database(dbPath, { readonly: true });
|
|
511
510
|
try {
|
|
@@ -833,8 +832,11 @@ var listScopedThreads = (dbPath, projectName) => {
|
|
|
833
832
|
var invalidateCodexUiCaches = async () => {
|
|
834
833
|
await invalidateCacheByPrefix("analytics-", "thread-");
|
|
835
834
|
};
|
|
836
|
-
|
|
837
|
-
|
|
835
|
+
var resolveAnalyticsTranscriptConcurrency = (configuredValue = process.env.SPIRACHA_ANALYTICS_TRANSCRIPT_CONCURRENCY) => {
|
|
836
|
+
const parsed = Number(configuredValue);
|
|
837
|
+
if (!Number.isInteger(parsed) || parsed < 1) return 8;
|
|
838
|
+
return parsed;
|
|
839
|
+
};
|
|
838
840
|
var roundToTwoDecimals = (value) => {
|
|
839
841
|
return Number(value.toFixed(2));
|
|
840
842
|
};
|
|
@@ -870,20 +872,68 @@ var buildModelsByTokens = (threads) => {
|
|
|
870
872
|
return left.model.localeCompare(right.model);
|
|
871
873
|
});
|
|
872
874
|
};
|
|
873
|
-
var
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
875
|
+
var timestampSignature = (thread) => {
|
|
876
|
+
return String(thread.updated_at_ms ?? thread.updated_at * 1e3);
|
|
877
|
+
};
|
|
878
|
+
var threadMetadataCacheKeyParts = (thread) => [
|
|
879
|
+
thread.id,
|
|
880
|
+
thread.rollout_path,
|
|
881
|
+
timestampSignature(thread),
|
|
882
|
+
String(thread.created_at_ms ?? thread.created_at * 1e3),
|
|
883
|
+
String(thread.tokens_used),
|
|
884
|
+
String(thread.archived),
|
|
885
|
+
String(thread.archived_at ?? ""),
|
|
886
|
+
thread.cwd,
|
|
887
|
+
thread.model ?? "",
|
|
888
|
+
thread.model_provider,
|
|
889
|
+
thread.cli_version,
|
|
890
|
+
thread.title,
|
|
891
|
+
thread.preview
|
|
892
|
+
];
|
|
893
|
+
var buildCodexAnalyticsCacheKey = (dbPath, threads, project) => {
|
|
894
|
+
return `analytics-${hashCacheKeyPartsIterable((function* () {
|
|
895
|
+
yield "v2";
|
|
896
|
+
yield dbPath;
|
|
897
|
+
yield project ?? "all";
|
|
898
|
+
yield String(threads.length);
|
|
899
|
+
for (const thread of threads) yield* threadMetadataCacheKeyParts(thread);
|
|
900
|
+
})())}`;
|
|
901
|
+
};
|
|
902
|
+
var buildThreadAnalyticsCacheKey = (thread) => {
|
|
903
|
+
return `thread-analytics-${hashCacheKeyParts("v1", ...threadMetadataCacheKeyParts(thread))}`;
|
|
904
|
+
};
|
|
905
|
+
var parseThreadAnalyticsFile = async (sessionFile) => {
|
|
906
|
+
const toolNames = [];
|
|
907
|
+
let hasWebSearch = false;
|
|
908
|
+
for await (const parsed of readJsonlObjects(sessionFile)) {
|
|
909
|
+
if (parsed.type !== "response_item") continue;
|
|
910
|
+
const payload = asObject(parsed.payload);
|
|
911
|
+
if (!payload) continue;
|
|
912
|
+
const payloadType = asString(payload.type);
|
|
913
|
+
if (payloadType === "function_call") {
|
|
914
|
+
toolNames.push(asString(payload.name) ?? "unknown");
|
|
915
|
+
continue;
|
|
916
|
+
}
|
|
917
|
+
if (payloadType === "web_search_call" || payloadType === "web_search_end") hasWebSearch = true;
|
|
918
|
+
}
|
|
919
|
+
return {
|
|
920
|
+
hasWebSearch,
|
|
921
|
+
toolNames
|
|
922
|
+
};
|
|
923
|
+
};
|
|
924
|
+
var getCachedThreadAnalytics = async (thread) => {
|
|
925
|
+
return withCachedJson(buildThreadAnalyticsCacheKey(thread), () => parseThreadAnalyticsFile(thread.rollout_path));
|
|
877
926
|
};
|
|
878
|
-
var
|
|
927
|
+
var computeCodexAnalyticsFromThreads = async (threads, options = {}) => {
|
|
879
928
|
const totalTokens = threads.reduce((sum, thread) => sum + thread.tokens_used, 0);
|
|
880
929
|
const projectNames = new Set(threads.map((thread) => getPortablePathBasename(thread.cwd)).filter(Boolean));
|
|
881
930
|
const toolUsage = /* @__PURE__ */ new Map();
|
|
882
|
-
const transcripts = await Promise.all(threads.map((thread) => getCachedParsedCodexTranscript(thread.rollout_path)));
|
|
883
931
|
let threadsWithWebSearch = 0;
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
932
|
+
const loadThreadAnalytics = options.loadThreadAnalytics ?? getCachedThreadAnalytics;
|
|
933
|
+
const threadAnalytics = await mapWithConcurrency(threads, options.transcriptConcurrency ?? resolveAnalyticsTranscriptConcurrency(), (thread) => loadThreadAnalytics(thread));
|
|
934
|
+
for (const analytics of threadAnalytics) {
|
|
935
|
+
if (analytics.hasWebSearch) threadsWithWebSearch += 1;
|
|
936
|
+
for (const toolName of analytics.toolNames) incrementCount(toolUsage, toolName);
|
|
887
937
|
}
|
|
888
938
|
return {
|
|
889
939
|
modelsByTokens: buildModelsByTokens(threads),
|
|
@@ -904,7 +954,7 @@ var computeCodexAnalytics = async (threads) => {
|
|
|
904
954
|
};
|
|
905
955
|
var getCodexAnalytics = async (input) => {
|
|
906
956
|
const threads = listScopedThreads(input.dbPath, input.project);
|
|
907
|
-
return withCachedJson(
|
|
957
|
+
return withCachedJson(buildCodexAnalyticsCacheKey(input.dbPath, threads, input.project), async () => computeCodexAnalyticsFromThreads(threads, { transcriptConcurrency: input.transcriptConcurrency }));
|
|
908
958
|
};
|
|
909
959
|
//#endregion
|
|
910
960
|
//#region ../../src/lib/codex-exporter-db.ts
|
|
@@ -1388,47 +1438,20 @@ var extractContentPart = (value) => {
|
|
|
1388
1438
|
if (type === "input_image") return "[Image attached]";
|
|
1389
1439
|
return text ?? "";
|
|
1390
1440
|
};
|
|
1391
|
-
var UI_EXPORT_URL_PREFIX = "/__exports/";
|
|
1392
|
-
var DEFAULT_UI_EXPORT_DIR = path.join(os.tmpdir(), "spiracha-ui-exports");
|
|
1393
|
-
var DEFAULT_EXPORT_MAX_AGE_MS = 1440 * 60 * 1e3;
|
|
1394
|
-
var getUiExportDir = () => {
|
|
1395
|
-
return process.env["SPIRACHA_UI_EXPORT_DIR"]?.trim() || DEFAULT_UI_EXPORT_DIR;
|
|
1396
|
-
};
|
|
1397
|
-
var ensureUiExportDir = async () => {
|
|
1398
|
-
const exportDir = getUiExportDir();
|
|
1399
|
-
await mkdir(exportDir, { recursive: true });
|
|
1400
|
-
await purgeStaleUiExports(exportDir);
|
|
1401
|
-
return exportDir;
|
|
1402
|
-
};
|
|
1403
|
-
var buildUiExportDownloadUrl = (filePath) => {
|
|
1404
|
-
return `${UI_EXPORT_URL_PREFIX}${encodeURIComponent(path.basename(filePath))}`;
|
|
1405
|
-
};
|
|
1406
|
-
var purgeStaleUiExports = async (exportDir = getUiExportDir(), maxAgeMs = DEFAULT_EXPORT_MAX_AGE_MS) => {
|
|
1407
|
-
const entries = await readdir(exportDir, { withFileTypes: true });
|
|
1408
|
-
const cutoff = Date.now() - maxAgeMs;
|
|
1409
|
-
await Promise.all(entries.filter((entry) => entry.isFile()).map(async (entry) => {
|
|
1410
|
-
const filePath = path.join(exportDir, entry.name);
|
|
1411
|
-
if ((await stat(filePath)).mtimeMs >= cutoff) return;
|
|
1412
|
-
await rm(filePath, { force: true });
|
|
1413
|
-
}));
|
|
1414
|
-
};
|
|
1415
1441
|
//#endregion
|
|
1416
1442
|
//#region ../../src/lib/codex-browser-export.ts
|
|
1417
1443
|
var LARGE_BROWSER_EXPORT_THRESHOLD_BYTES = 128 * 1024 * 1024;
|
|
1418
|
-
var toSanitizedFileName = (value) => {
|
|
1419
|
-
return value.replace(/[<>:"/\\|?*\u0000-\u001f]/gu, " ").replace(/\.\.+/gu, " ").replace(/\s+/gu, " ").trim();
|
|
1420
|
-
};
|
|
1421
1444
|
var formatReadableExportDate = (value) => {
|
|
1422
1445
|
const date = new Date(value);
|
|
1423
1446
|
return `${date.getUTCFullYear()}-${String(date.getUTCMonth() + 1).padStart(2, "0")}-${String(date.getUTCDate()).padStart(2, "0")}-${String(date.getUTCHours()).padStart(2, "0")}${String(date.getUTCMinutes()).padStart(2, "0")}`;
|
|
1424
1447
|
};
|
|
1425
1448
|
var buildExportBaseName = (thread) => {
|
|
1426
|
-
return `${
|
|
1449
|
+
return `${sanitizeExportFileName(getPortablePathBasename(thread.cwd) || "thread") || "thread"}-${formatReadableExportDate(thread.updated_at_ms ?? thread.updated_at * 1e3)}-${thread.id.slice(0, 8)}`;
|
|
1427
1450
|
};
|
|
1428
1451
|
var buildBatchExportBaseName = (threads) => {
|
|
1429
1452
|
const firstThread = threads[0];
|
|
1430
1453
|
if (!firstThread) throw new Error("No threads selected for export");
|
|
1431
|
-
return `${
|
|
1454
|
+
return `${sanitizeExportFileName(getPortablePathBasename(firstThread.cwd) || "threads") || "threads"}-${formatReadableExportDate(Math.max(...threads.map((thread) => thread.updated_at_ms ?? thread.updated_at * 1e3)))}-threads-${threads.length}`;
|
|
1432
1455
|
};
|
|
1433
1456
|
var buildUniqueArchivePath = (exportDir, exportBaseName) => {
|
|
1434
1457
|
return path.join(exportDir, `${exportBaseName}-${randomUUID()}.zip`);
|
|
@@ -1457,9 +1480,6 @@ var toDownloadOptions = (input) => {
|
|
|
1457
1480
|
threadIds: [input.threadId]
|
|
1458
1481
|
};
|
|
1459
1482
|
};
|
|
1460
|
-
var getMimeType = (outputFormat) => {
|
|
1461
|
-
return outputFormat === "md" ? "text/markdown; charset=utf-8" : "text/plain; charset=utf-8";
|
|
1462
|
-
};
|
|
1463
1483
|
var resolvePublicExportDir = async (publicExportDir) => {
|
|
1464
1484
|
if (publicExportDir) {
|
|
1465
1485
|
await ensureDirectory(publicExportDir);
|
|
@@ -1483,14 +1503,13 @@ var getRolloutSnapshot = async (rolloutPath) => {
|
|
|
1483
1503
|
var logExportEvent = (level, event, details) => {
|
|
1484
1504
|
console[level](`[spiracha:export] ${event}`, details);
|
|
1485
1505
|
};
|
|
1486
|
-
var logRolloutChangeIfDetected = (threadId,
|
|
1506
|
+
var logRolloutChangeIfDetected = (threadId, beforeSnapshot, afterSnapshot) => {
|
|
1487
1507
|
if (beforeSnapshot.mtimeMs === afterSnapshot.mtimeMs && beforeSnapshot.sizeBytes === afterSnapshot.sizeBytes) return;
|
|
1488
1508
|
logExportEvent("warn", "rollout_changed_during_export", {
|
|
1489
1509
|
afterMtimeMs: afterSnapshot.mtimeMs,
|
|
1490
1510
|
afterSizeBytes: afterSnapshot.sizeBytes,
|
|
1491
1511
|
beforeMtimeMs: beforeSnapshot.mtimeMs,
|
|
1492
1512
|
beforeSizeBytes: beforeSnapshot.sizeBytes,
|
|
1493
|
-
rolloutPath,
|
|
1494
1513
|
threadId
|
|
1495
1514
|
});
|
|
1496
1515
|
};
|
|
@@ -1507,50 +1526,13 @@ var cleanupExportWorkspace = async (workspacePath) => {
|
|
|
1507
1526
|
});
|
|
1508
1527
|
}
|
|
1509
1528
|
};
|
|
1510
|
-
var zipExportFile = async (sourcePath, zipPath) => {
|
|
1511
|
-
const proc = Bun.spawn([
|
|
1512
|
-
"zip",
|
|
1513
|
-
"-9",
|
|
1514
|
-
"-j",
|
|
1515
|
-
zipPath,
|
|
1516
|
-
sourcePath
|
|
1517
|
-
], {
|
|
1518
|
-
stderr: "pipe",
|
|
1519
|
-
stdout: "pipe"
|
|
1520
|
-
});
|
|
1521
|
-
const [stdoutText, stderrText, exitCode] = await Promise.all([
|
|
1522
|
-
new Response(proc.stdout).text(),
|
|
1523
|
-
new Response(proc.stderr).text(),
|
|
1524
|
-
proc.exited
|
|
1525
|
-
]);
|
|
1526
|
-
if (exitCode !== 0) throw new Error(`zip failed (${exitCode}): ${(stderrText || stdoutText).trim()}`);
|
|
1527
|
-
};
|
|
1528
|
-
var zipExportDirectory = async (sourceDirectory, zipPath) => {
|
|
1529
|
-
const proc = Bun.spawn([
|
|
1530
|
-
"zip",
|
|
1531
|
-
"-9",
|
|
1532
|
-
"-r",
|
|
1533
|
-
zipPath,
|
|
1534
|
-
"."
|
|
1535
|
-
], {
|
|
1536
|
-
cwd: sourceDirectory,
|
|
1537
|
-
stderr: "pipe",
|
|
1538
|
-
stdout: "pipe"
|
|
1539
|
-
});
|
|
1540
|
-
const [stdoutText, stderrText, exitCode] = await Promise.all([
|
|
1541
|
-
new Response(proc.stdout).text(),
|
|
1542
|
-
new Response(proc.stderr).text(),
|
|
1543
|
-
proc.exited
|
|
1544
|
-
]);
|
|
1545
|
-
if (exitCode !== 0) throw new Error(`zip failed (${exitCode}): ${(stderrText || stdoutText).trim()}`);
|
|
1546
|
-
};
|
|
1547
1529
|
var renderCodexThreadDownload = async (input) => {
|
|
1548
1530
|
const startedAt = Date.now();
|
|
1549
1531
|
const browseData = getThreadBrowseData(input.dbPath, input.threadId);
|
|
1550
1532
|
const extension = input.outputFormat === "md" ? "md" : "txt";
|
|
1551
1533
|
const fileBaseName = buildExportBaseName(browseData.thread);
|
|
1552
1534
|
const fileName = `${fileBaseName}.${extension}`;
|
|
1553
|
-
const mimeType =
|
|
1535
|
+
const mimeType = getExportMimeType(input.outputFormat);
|
|
1554
1536
|
const transform = (text) => input.pathDisplaySettings ? applyPathTransforms(text, {
|
|
1555
1537
|
...input.pathDisplaySettings,
|
|
1556
1538
|
projectPath: browseData.thread.cwd
|
|
@@ -1558,12 +1540,11 @@ var renderCodexThreadDownload = async (input) => {
|
|
|
1558
1540
|
const rolloutSnapshotBefore = await getRolloutSnapshot(browseData.thread.rollout_path);
|
|
1559
1541
|
logExportEvent("info", "single_start", {
|
|
1560
1542
|
fileName,
|
|
1561
|
-
rolloutPath: browseData.thread.rollout_path,
|
|
1562
1543
|
sizeBytes: rolloutSnapshotBefore.sizeBytes,
|
|
1563
1544
|
threadId: input.threadId
|
|
1564
1545
|
});
|
|
1565
1546
|
try {
|
|
1566
|
-
if (rolloutSnapshotBefore.sizeBytes > (input.largeExportThresholdBytes ?? LARGE_BROWSER_EXPORT_THRESHOLD_BYTES)) {
|
|
1547
|
+
if (input.zipArchive || rolloutSnapshotBefore.sizeBytes > (input.largeExportThresholdBytes ?? LARGE_BROWSER_EXPORT_THRESHOLD_BYTES)) {
|
|
1567
1548
|
const exportBaseName = fileBaseName;
|
|
1568
1549
|
const exportDir = await resolvePublicExportDir(input.publicExportDir);
|
|
1569
1550
|
const workspaceDir = await createExportWorkspace(exportDir, exportBaseName);
|
|
@@ -1582,7 +1563,7 @@ var renderCodexThreadDownload = async (input) => {
|
|
|
1582
1563
|
await cleanupExportWorkspace(workspaceDir);
|
|
1583
1564
|
}
|
|
1584
1565
|
const rolloutSnapshotAfter = await getRolloutSnapshot(browseData.thread.rollout_path);
|
|
1585
|
-
logRolloutChangeIfDetected(input.threadId,
|
|
1566
|
+
logRolloutChangeIfDetected(input.threadId, rolloutSnapshotBefore, rolloutSnapshotAfter);
|
|
1586
1567
|
const zipStat = await Bun.file(zipPath).stat();
|
|
1587
1568
|
logExportEvent("info", "single_zip_ready", {
|
|
1588
1569
|
downloadUrl: buildUiExportDownloadUrl(zipPath),
|
|
@@ -1608,7 +1589,7 @@ var renderCodexThreadDownload = async (input) => {
|
|
|
1608
1589
|
}, toDownloadOptions(input));
|
|
1609
1590
|
if (!content) throw new Error(`Thread ${input.threadId} produced no exportable content`);
|
|
1610
1591
|
const rolloutSnapshotAfter = await getRolloutSnapshot(browseData.thread.rollout_path);
|
|
1611
|
-
logRolloutChangeIfDetected(input.threadId,
|
|
1592
|
+
logRolloutChangeIfDetected(input.threadId, rolloutSnapshotBefore, rolloutSnapshotAfter);
|
|
1612
1593
|
logExportEvent("info", "single_inline_ready", {
|
|
1613
1594
|
durationMs: Date.now() - startedAt,
|
|
1614
1595
|
fileName,
|
|
@@ -1677,7 +1658,7 @@ var renderCodexThreadsDownload = async (input) => {
|
|
|
1677
1658
|
threadIds: [entry.thread.id]
|
|
1678
1659
|
}, savedPath, transform)) throw new Error(`Thread ${entry.thread.id} produced no exportable content`);
|
|
1679
1660
|
const rolloutSnapshotAfter = await getRolloutSnapshot(entry.thread.rollout_path);
|
|
1680
|
-
logRolloutChangeIfDetected(entry.thread.id,
|
|
1661
|
+
logRolloutChangeIfDetected(entry.thread.id, rolloutSnapshotBefore, rolloutSnapshotAfter);
|
|
1681
1662
|
}
|
|
1682
1663
|
await zipExportDirectory(bundleDirectory, zipPath);
|
|
1683
1664
|
} catch (error) {
|
|
@@ -1863,7 +1844,8 @@ var exportSchema = z.object({
|
|
|
1863
1844
|
includeTools: z.boolean(),
|
|
1864
1845
|
outputFormat: z.enum(["md", "txt"]),
|
|
1865
1846
|
redactUsername: z.boolean(),
|
|
1866
|
-
threadId: z.string().min(1)
|
|
1847
|
+
threadId: z.string().min(1),
|
|
1848
|
+
zipArchive: z.boolean().default(false)
|
|
1867
1849
|
});
|
|
1868
1850
|
var exportThreadsSchema = z.object({
|
|
1869
1851
|
convertToProjectRoot: z.boolean(),
|
|
@@ -1872,7 +1854,8 @@ var exportThreadsSchema = z.object({
|
|
|
1872
1854
|
includeTools: z.boolean(),
|
|
1873
1855
|
outputFormat: z.enum(["md", "txt"]),
|
|
1874
1856
|
redactUsername: z.boolean(),
|
|
1875
|
-
threadIds: z.array(z.string().min(1)).min(1)
|
|
1857
|
+
threadIds: z.array(z.string().min(1)).min(1),
|
|
1858
|
+
zipArchive: z.boolean().default(true)
|
|
1876
1859
|
});
|
|
1877
1860
|
var getDbPath = () => process.env.SPIRACHA_CODEX_DB?.trim() || resolveCodexThreadDbPath();
|
|
1878
1861
|
var isMissingFileError = (error) => {
|
|
@@ -1899,7 +1882,7 @@ var listProjectThreadsFn_createServerFn_handler = createServerRpc({
|
|
|
1899
1882
|
name: "listProjectThreadsFn",
|
|
1900
1883
|
filename: "src/lib/codex-server.ts"
|
|
1901
1884
|
}, (opts) => listProjectThreadsFn.__executeServer(opts));
|
|
1902
|
-
var listProjectThreadsFn = createServerFn({ method: "GET" }).
|
|
1885
|
+
var listProjectThreadsFn = createServerFn({ method: "GET" }).validator(projectSchema).handler(listProjectThreadsFn_createServerFn_handler, async ({ data }) => {
|
|
1903
1886
|
return listProjectThreads(getDbPath(), data.project);
|
|
1904
1887
|
});
|
|
1905
1888
|
var getThreadSnapshotFn_createServerFn_handler = createServerRpc({
|
|
@@ -1907,7 +1890,7 @@ var getThreadSnapshotFn_createServerFn_handler = createServerRpc({
|
|
|
1907
1890
|
name: "getThreadSnapshotFn",
|
|
1908
1891
|
filename: "src/lib/codex-server.ts"
|
|
1909
1892
|
}, (opts) => getThreadSnapshotFn.__executeServer(opts));
|
|
1910
|
-
var getThreadSnapshotFn = createServerFn({ method: "GET" }).
|
|
1893
|
+
var getThreadSnapshotFn = createServerFn({ method: "GET" }).validator(threadSchema).handler(getThreadSnapshotFn_createServerFn_handler, async ({ data }) => {
|
|
1911
1894
|
const browseData = getThreadBrowseData(getDbPath(), data.threadId);
|
|
1912
1895
|
const rollout = await getThreadRolloutLoadState(browseData.thread.rollout_path);
|
|
1913
1896
|
let transcript = null;
|
|
@@ -1931,7 +1914,7 @@ var getThreadTranscriptFn_createServerFn_handler = createServerRpc({
|
|
|
1931
1914
|
name: "getThreadTranscriptFn",
|
|
1932
1915
|
filename: "src/lib/codex-server.ts"
|
|
1933
1916
|
}, (opts) => getThreadTranscriptFn.__executeServer(opts));
|
|
1934
|
-
var getThreadTranscriptFn = createServerFn({ method: "GET" }).
|
|
1917
|
+
var getThreadTranscriptFn = createServerFn({ method: "GET" }).validator(threadSchema).handler(getThreadTranscriptFn_createServerFn_handler, async ({ data }) => {
|
|
1935
1918
|
return getCachedThreadTranscriptPreview(getThreadBrowseData(getDbPath(), data.threadId).thread.rollout_path);
|
|
1936
1919
|
});
|
|
1937
1920
|
var getAnalyticsFn_createServerFn_handler = createServerRpc({
|
|
@@ -1939,7 +1922,7 @@ var getAnalyticsFn_createServerFn_handler = createServerRpc({
|
|
|
1939
1922
|
name: "getAnalyticsFn",
|
|
1940
1923
|
filename: "src/lib/codex-server.ts"
|
|
1941
1924
|
}, (opts) => getAnalyticsFn.__executeServer(opts));
|
|
1942
|
-
var getAnalyticsFn = createServerFn({ method: "GET" }).
|
|
1925
|
+
var getAnalyticsFn = createServerFn({ method: "GET" }).validator(analyticsSchema).handler(getAnalyticsFn_createServerFn_handler, async ({ data }) => {
|
|
1943
1926
|
return getCodexAnalytics({
|
|
1944
1927
|
dbPath: getDbPath(),
|
|
1945
1928
|
project: data.project
|
|
@@ -1950,7 +1933,7 @@ var exportThreadFn_createServerFn_handler = createServerRpc({
|
|
|
1950
1933
|
name: "exportThreadFn",
|
|
1951
1934
|
filename: "src/lib/codex-server.ts"
|
|
1952
1935
|
}, (opts) => exportThreadFn.__executeServer(opts));
|
|
1953
|
-
var exportThreadFn = createServerFn({ method: "POST" }).
|
|
1936
|
+
var exportThreadFn = createServerFn({ method: "POST" }).validator(exportSchema).handler(exportThreadFn_createServerFn_handler, async ({ data }) => {
|
|
1954
1937
|
return renderCodexThreadDownload({
|
|
1955
1938
|
dbPath: getDbPath(),
|
|
1956
1939
|
includeCommentary: data.includeCommentary,
|
|
@@ -1961,7 +1944,8 @@ var exportThreadFn = createServerFn({ method: "POST" }).inputValidator(exportSch
|
|
|
1961
1944
|
convertToProjectRoot: data.convertToProjectRoot,
|
|
1962
1945
|
redactUsername: data.redactUsername
|
|
1963
1946
|
},
|
|
1964
|
-
threadId: data.threadId
|
|
1947
|
+
threadId: data.threadId,
|
|
1948
|
+
zipArchive: data.zipArchive
|
|
1965
1949
|
});
|
|
1966
1950
|
});
|
|
1967
1951
|
var exportThreadsFn_createServerFn_handler = createServerRpc({
|
|
@@ -1969,7 +1953,7 @@ var exportThreadsFn_createServerFn_handler = createServerRpc({
|
|
|
1969
1953
|
name: "exportThreadsFn",
|
|
1970
1954
|
filename: "src/lib/codex-server.ts"
|
|
1971
1955
|
}, (opts) => exportThreadsFn.__executeServer(opts));
|
|
1972
|
-
var exportThreadsFn = createServerFn({ method: "POST" }).
|
|
1956
|
+
var exportThreadsFn = createServerFn({ method: "POST" }).validator(exportThreadsSchema).handler(exportThreadsFn_createServerFn_handler, async ({ data }) => {
|
|
1973
1957
|
return renderCodexThreadsDownload({
|
|
1974
1958
|
dbPath: getDbPath(),
|
|
1975
1959
|
includeCommentary: data.includeCommentary,
|
|
@@ -1980,7 +1964,8 @@ var exportThreadsFn = createServerFn({ method: "POST" }).inputValidator(exportTh
|
|
|
1980
1964
|
convertToProjectRoot: data.convertToProjectRoot,
|
|
1981
1965
|
redactUsername: data.redactUsername
|
|
1982
1966
|
},
|
|
1983
|
-
threadIds: data.threadIds
|
|
1967
|
+
threadIds: data.threadIds,
|
|
1968
|
+
zipArchive: data.zipArchive
|
|
1984
1969
|
});
|
|
1985
1970
|
});
|
|
1986
1971
|
var deleteThreadFn_createServerFn_handler = createServerRpc({
|
|
@@ -1988,7 +1973,7 @@ var deleteThreadFn_createServerFn_handler = createServerRpc({
|
|
|
1988
1973
|
name: "deleteThreadFn",
|
|
1989
1974
|
filename: "src/lib/codex-server.ts"
|
|
1990
1975
|
}, (opts) => deleteThreadFn.__executeServer(opts));
|
|
1991
|
-
var deleteThreadFn = createServerFn({ method: "POST" }).
|
|
1976
|
+
var deleteThreadFn = createServerFn({ method: "POST" }).validator(deleteThreadSchema).handler(deleteThreadFn_createServerFn_handler, async ({ data }) => {
|
|
1992
1977
|
return deleteCodexThread(getDbPath(), data.threadId, { deleteSessionFiles: data.deleteSessionFiles });
|
|
1993
1978
|
});
|
|
1994
1979
|
var deleteThreadsFn_createServerFn_handler = createServerRpc({
|
|
@@ -1996,7 +1981,7 @@ var deleteThreadsFn_createServerFn_handler = createServerRpc({
|
|
|
1996
1981
|
name: "deleteThreadsFn",
|
|
1997
1982
|
filename: "src/lib/codex-server.ts"
|
|
1998
1983
|
}, (opts) => deleteThreadsFn.__executeServer(opts));
|
|
1999
|
-
var deleteThreadsFn = createServerFn({ method: "POST" }).
|
|
1984
|
+
var deleteThreadsFn = createServerFn({ method: "POST" }).validator(deleteThreadsSchema).handler(deleteThreadsFn_createServerFn_handler, async ({ data }) => {
|
|
2000
1985
|
return deleteCodexThreads(getDbPath(), data.threadIds, { deleteSessionFiles: data.deleteSessionFiles });
|
|
2001
1986
|
});
|
|
2002
1987
|
var deleteProjectFn_createServerFn_handler = createServerRpc({
|
|
@@ -2004,7 +1989,7 @@ var deleteProjectFn_createServerFn_handler = createServerRpc({
|
|
|
2004
1989
|
name: "deleteProjectFn",
|
|
2005
1990
|
filename: "src/lib/codex-server.ts"
|
|
2006
1991
|
}, (opts) => deleteProjectFn.__executeServer(opts));
|
|
2007
|
-
var deleteProjectFn = createServerFn({ method: "POST" }).
|
|
1992
|
+
var deleteProjectFn = createServerFn({ method: "POST" }).validator(deleteProjectSchema).handler(deleteProjectFn_createServerFn_handler, async ({ data }) => {
|
|
2008
1993
|
return deleteCodexProject(getDbPath(), data.project, { deleteSessionFiles: data.deleteSessionFiles });
|
|
2009
1994
|
});
|
|
2010
1995
|
var recoverProjectThreadsFn_createServerFn_handler = createServerRpc({
|
|
@@ -2012,7 +1997,7 @@ var recoverProjectThreadsFn_createServerFn_handler = createServerRpc({
|
|
|
2012
1997
|
name: "recoverProjectThreadsFn",
|
|
2013
1998
|
filename: "src/lib/codex-server.ts"
|
|
2014
1999
|
}, (opts) => recoverProjectThreadsFn.__executeServer(opts));
|
|
2015
|
-
var recoverProjectThreadsFn = createServerFn({ method: "POST" }).
|
|
2000
|
+
var recoverProjectThreadsFn = createServerFn({ method: "POST" }).validator(projectSchema).handler(recoverProjectThreadsFn_createServerFn_handler, async ({ data }) => {
|
|
2016
2001
|
return recoverCodexProjectThreads(getDbPath(), data.project);
|
|
2017
2002
|
});
|
|
2018
2003
|
//#endregion
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
//#region ../../src/lib/concurrency.ts
|
|
2
|
+
var mapWithConcurrency = async (values, limit, mapper) => {
|
|
3
|
+
if (values.length === 0) return [];
|
|
4
|
+
const workerLimit = Math.max(1, Number.isFinite(limit) ? Math.floor(limit) : 1);
|
|
5
|
+
const results = new Array(values.length);
|
|
6
|
+
let nextIndex = 0;
|
|
7
|
+
const worker = async () => {
|
|
8
|
+
while (nextIndex < values.length) {
|
|
9
|
+
const currentIndex = nextIndex;
|
|
10
|
+
nextIndex += 1;
|
|
11
|
+
results[currentIndex] = await mapper(values[currentIndex], currentIndex);
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
await Promise.all(Array.from({ length: Math.min(workerLimit, values.length) }, () => worker()));
|
|
15
|
+
return results;
|
|
16
|
+
};
|
|
17
|
+
//#endregion
|
|
18
|
+
export { mapWithConcurrency as t };
|
package/apps/ui/dist/server/assets/{createServerRpc-BtXIw2iP.js → createServerRpc-CF_DEwnm.js}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as TSS_SERVER_FUNCTION } from "../server.js";
|
|
2
|
-
//#region ../../node_modules/.bun/@tanstack+start-server-core@1.169.
|
|
2
|
+
//#region ../../node_modules/.bun/@tanstack+start-server-core@1.169.14/node_modules/@tanstack/start-server-core/dist/esm/createServerRpc.js
|
|
3
3
|
var createServerRpc = (serverFnMeta, splitImportFn) => {
|
|
4
4
|
const url = "/_serverFn/" + serverFnMeta.id;
|
|
5
5
|
return Object.assign(splitImportFn, {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as TSS_SERVER_FUNCTION, r as getServerFnById } from "../server.js";
|
|
2
|
-
//#region ../../node_modules/.bun/@tanstack+start-server-core@1.169.
|
|
2
|
+
//#region ../../node_modules/.bun/@tanstack+start-server-core@1.169.14/node_modules/@tanstack/start-server-core/dist/esm/createSsrRpc.js
|
|
3
3
|
var createSsrRpc = (functionId) => {
|
|
4
4
|
const url = "/_serverFn/" + functionId;
|
|
5
5
|
const serverFnMeta = { id: functionId };
|