spiracha 1.1.1 → 1.1.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.
@@ -1631,6 +1631,15 @@ var buildBatchExportBaseName = (threads) => {
1631
1631
  var buildUniqueArchivePath = (exportDir, exportBaseName) => {
1632
1632
  return path.join(exportDir, `${exportBaseName}-${randomUUID()}.zip`);
1633
1633
  };
1634
+ var buildUniqueBatchEntryBaseName = (baseName, threadId, usedBaseNames) => {
1635
+ if (!usedBaseNames.has(baseName)) {
1636
+ usedBaseNames.add(baseName);
1637
+ return baseName;
1638
+ }
1639
+ const collisionSafeBaseName = `${baseName}-${threadId}`;
1640
+ usedBaseNames.add(collisionSafeBaseName);
1641
+ return collisionSafeBaseName;
1642
+ };
1634
1643
  var toDownloadOptions = (input) => {
1635
1644
  return {
1636
1645
  cwdFilter: null,
@@ -1829,6 +1838,7 @@ var renderCodexThreadsDownload = async (input) => {
1829
1838
  const exportBaseName = buildBatchExportBaseName(threads);
1830
1839
  const bundleDirectory = await createExportWorkspace(exportDir, exportBaseName);
1831
1840
  const zipPath = buildUniqueArchivePath(exportDir, exportBaseName);
1841
+ const usedBatchEntryBaseNames = /* @__PURE__ */ new Set();
1832
1842
  logExportEvent("info", "batch_start", {
1833
1843
  exportBaseName,
1834
1844
  selectedThreadCount: threadIds.length,
@@ -1838,12 +1848,19 @@ var renderCodexThreadsDownload = async (input) => {
1838
1848
  try {
1839
1849
  for (const entry of browseEntries) {
1840
1850
  const rolloutSnapshotBefore = await getRolloutSnapshot(entry.thread.rollout_path);
1841
- const relativeFileName = `${buildExportBaseName(entry.thread)}.${input.outputFormat === "md" ? "md" : "txt"}`;
1851
+ const singleBaseName = buildExportBaseName(entry.thread);
1852
+ const uniqueBaseName = buildUniqueBatchEntryBaseName(singleBaseName, entry.thread.id, usedBatchEntryBaseNames);
1853
+ const relativeFileName = `${uniqueBaseName}.${input.outputFormat === "md" ? "md" : "txt"}`;
1842
1854
  const savedPath = path.join(bundleDirectory, relativeFileName);
1843
1855
  const transform = (text) => input.pathDisplaySettings ? applyPathTransforms(text, {
1844
1856
  ...input.pathDisplaySettings,
1845
1857
  projectPath: entry.thread.cwd
1846
1858
  }) : text;
1859
+ if (uniqueBaseName !== singleBaseName) logExportEvent("warn", "batch_entry_name_collision", {
1860
+ resolvedFileName: relativeFileName,
1861
+ singleBaseName,
1862
+ threadId: entry.thread.id
1863
+ });
1847
1864
  if (!await writeSessionFileExport({
1848
1865
  fallbackReason: null,
1849
1866
  outputRelativePath: relativeFileName,
@@ -3498,47 +3498,47 @@ async function getStartManifest(matchedRoutes) {
3498
3498
  var manifest = {
3499
3499
  "0814663c3bdc58135f97d210d145ef0be5ca54ef9a5f1e3030be9b1bfc901e30": {
3500
3500
  functionName: "exportThreadFn_createServerFn_handler",
3501
- importer: () => import("./assets/codex-server-BFZq2Y2O.js")
3501
+ importer: () => import("./assets/codex-server-C01sv0JJ.js")
3502
3502
  },
3503
3503
  "164ee82cdd565ed96591a64312f0f7bd961040baf066a89d9f5636330d11360b": {
3504
3504
  functionName: "deleteProjectFn_createServerFn_handler",
3505
- importer: () => import("./assets/codex-server-BFZq2Y2O.js")
3505
+ importer: () => import("./assets/codex-server-C01sv0JJ.js")
3506
3506
  },
3507
3507
  "29727b7ad5b8fe42e83817376653e064d9fe8888799f056b2e59296b3396568b": {
3508
3508
  functionName: "deleteThreadFn_createServerFn_handler",
3509
- importer: () => import("./assets/codex-server-BFZq2Y2O.js")
3509
+ importer: () => import("./assets/codex-server-C01sv0JJ.js")
3510
3510
  },
3511
3511
  "4712520da0f07bbd1f0907e5a162fe518516ff4caca3fd23876cc65539d87d7a": {
3512
3512
  functionName: "getAnalyticsFn_createServerFn_handler",
3513
- importer: () => import("./assets/codex-server-BFZq2Y2O.js")
3513
+ importer: () => import("./assets/codex-server-C01sv0JJ.js")
3514
3514
  },
3515
3515
  "59fb2cb4d60c8e7d47e0afcc914ee6f9d9f4bf076c8e66eab1693066753655b3": {
3516
3516
  functionName: "listProjectThreadsFn_createServerFn_handler",
3517
- importer: () => import("./assets/codex-server-BFZq2Y2O.js")
3517
+ importer: () => import("./assets/codex-server-C01sv0JJ.js")
3518
3518
  },
3519
3519
  "5da27045f7e28ded6353bc16aace284af7ef1b4010ef04d0186a6feadb466497": {
3520
3520
  functionName: "getThreadTranscriptFn_createServerFn_handler",
3521
- importer: () => import("./assets/codex-server-BFZq2Y2O.js")
3521
+ importer: () => import("./assets/codex-server-C01sv0JJ.js")
3522
3522
  },
3523
3523
  "72991e2b6e0adbf8d63bb8b139dad88a00b77b7030ec28ceac36c3cce7846b4c": {
3524
3524
  functionName: "getThreadSnapshotFn_createServerFn_handler",
3525
- importer: () => import("./assets/codex-server-BFZq2Y2O.js")
3525
+ importer: () => import("./assets/codex-server-C01sv0JJ.js")
3526
3526
  },
3527
3527
  "792690638a3b10035a5b7368c3d98bdc70cbfe1e36a4aa5f45b1c49b8b1025b0": {
3528
3528
  functionName: "getDashboardSummaryFn_createServerFn_handler",
3529
- importer: () => import("./assets/codex-server-BFZq2Y2O.js")
3529
+ importer: () => import("./assets/codex-server-C01sv0JJ.js")
3530
3530
  },
3531
3531
  "96aa60bf7dd9b5bde415bcf3ad6f6955a975eecd9aa0516cf401cc39bebebe6c": {
3532
3532
  functionName: "deleteThreadsFn_createServerFn_handler",
3533
- importer: () => import("./assets/codex-server-BFZq2Y2O.js")
3533
+ importer: () => import("./assets/codex-server-C01sv0JJ.js")
3534
3534
  },
3535
3535
  "b4e15c006e9a277470958bb008f89b5b0acc7256109581de44cf17d587d174a5": {
3536
3536
  functionName: "exportThreadsFn_createServerFn_handler",
3537
- importer: () => import("./assets/codex-server-BFZq2Y2O.js")
3537
+ importer: () => import("./assets/codex-server-C01sv0JJ.js")
3538
3538
  },
3539
3539
  "ccefccb816ba13508f23db4e31067b3403e750225257592d3ae11071ffc3fd6f": {
3540
3540
  functionName: "listProjectsFn_createServerFn_handler",
3541
- importer: () => import("./assets/codex-server-BFZq2Y2O.js")
3541
+ importer: () => import("./assets/codex-server-C01sv0JJ.js")
3542
3542
  }
3543
3543
  };
3544
3544
  async function getServerFnById(id, access) {
package/package.json CHANGED
@@ -109,7 +109,7 @@
109
109
  "ui:preview": "bun run --cwd apps/ui preview"
110
110
  },
111
111
  "type": "module",
112
- "version": "1.1.1",
112
+ "version": "1.1.2",
113
113
  "workspaces": [
114
114
  "apps/*"
115
115
  ]
@@ -79,6 +79,17 @@ const buildUniqueArchivePath = (exportDir: string, exportBaseName: string) => {
79
79
  return path.join(exportDir, `${exportBaseName}-${randomUUID()}.zip`);
80
80
  };
81
81
 
82
+ const buildUniqueBatchEntryBaseName = (baseName: string, threadId: string, usedBaseNames: Set<string>): string => {
83
+ if (!usedBaseNames.has(baseName)) {
84
+ usedBaseNames.add(baseName);
85
+ return baseName;
86
+ }
87
+
88
+ const collisionSafeBaseName = `${baseName}-${threadId}`;
89
+ usedBaseNames.add(collisionSafeBaseName);
90
+ return collisionSafeBaseName;
91
+ };
92
+
82
93
  type RolloutSnapshot = {
83
94
  mtimeMs: number;
84
95
  sizeBytes: number;
@@ -340,6 +351,7 @@ export const renderCodexThreadsDownload = async (
340
351
  const exportBaseName = buildBatchExportBaseName(threads);
341
352
  const bundleDirectory = await createExportWorkspace(exportDir, exportBaseName);
342
353
  const zipPath = buildUniqueArchivePath(exportDir, exportBaseName);
354
+ const usedBatchEntryBaseNames = new Set<string>();
343
355
 
344
356
  logExportEvent('info', 'batch_start', {
345
357
  exportBaseName,
@@ -352,8 +364,13 @@ export const renderCodexThreadsDownload = async (
352
364
  for (const entry of browseEntries) {
353
365
  const rolloutSnapshotBefore = await getRolloutSnapshot(entry.thread.rollout_path);
354
366
  const singleBaseName = buildExportBaseName(entry.thread);
367
+ const uniqueBaseName = buildUniqueBatchEntryBaseName(
368
+ singleBaseName,
369
+ entry.thread.id,
370
+ usedBatchEntryBaseNames,
371
+ );
355
372
  const extension = input.outputFormat === 'md' ? 'md' : 'txt';
356
- const relativeFileName = `${singleBaseName}.${extension}`;
373
+ const relativeFileName = `${uniqueBaseName}.${extension}`;
357
374
  const savedPath = path.join(bundleDirectory, relativeFileName);
358
375
  const transform = (text: string) =>
359
376
  input.pathDisplaySettings
@@ -363,6 +380,14 @@ export const renderCodexThreadsDownload = async (
363
380
  })
364
381
  : text;
365
382
 
383
+ if (uniqueBaseName !== singleBaseName) {
384
+ logExportEvent('warn', 'batch_entry_name_collision', {
385
+ resolvedFileName: relativeFileName,
386
+ singleBaseName,
387
+ threadId: entry.thread.id,
388
+ });
389
+ }
390
+
366
391
  const saved = await writeSessionFileExport(
367
392
  {
368
393
  fallbackReason: null,