codesesh 1.0.3 → 1.0.5

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 (66) hide show
  1. package/README.md +22 -14
  2. package/dist/chunk-FCYCBGEL.js +670 -0
  3. package/dist/chunk-FCYCBGEL.js.map +1 -0
  4. package/dist/chunk-NBJJGH5P.js +2053 -0
  5. package/dist/chunk-NBJJGH5P.js.map +1 -0
  6. package/dist/chunk-PAP2Q3WV.js +1271 -0
  7. package/dist/chunk-PAP2Q3WV.js.map +1 -0
  8. package/dist/chunk-QH2HOXJH.js +2 -0
  9. package/dist/chunk-TS3IWH5U.js +6097 -0
  10. package/dist/chunk-TS3IWH5U.js.map +1 -0
  11. package/dist/chunk-WUYSZAYR.js +8383 -0
  12. package/dist/chunk-WUYSZAYR.js.map +1 -0
  13. package/dist/chunk-XKZSX5BM.js +327 -0
  14. package/dist/chunk-XKZSX5BM.js.map +1 -0
  15. package/dist/chunk-YQFEGFWD.js +89 -0
  16. package/dist/chunk-YQFEGFWD.js.map +1 -0
  17. package/dist/discovery-D23RV7FY.js +108 -0
  18. package/dist/discovery-D23RV7FY.js.map +1 -0
  19. package/dist/index.js +2986 -1514
  20. package/dist/index.js.map +1 -1
  21. package/dist/project-identity-worker.js +4 -2
  22. package/dist/project-identity-worker.js.map +1 -1
  23. package/dist/scan-refresh-worker.js +129 -138
  24. package/dist/scan-refresh-worker.js.map +1 -1
  25. package/dist/search-index-worker.js +36 -12
  26. package/dist/search-index-worker.js.map +1 -1
  27. package/dist/session-detail-worker.js +79 -0
  28. package/dist/session-detail-worker.js.map +1 -0
  29. package/dist/smart-tag-worker.js +8 -5
  30. package/dist/smart-tag-worker.js.map +1 -1
  31. package/dist/web/assets/CustomTimeWindowDialog-C9XTZRm0.js +1 -0
  32. package/dist/web/assets/InteractiveReceipt-Sca1smpv.js +1 -0
  33. package/dist/web/assets/OverviewScreen-Vq6BQR9_.js +1 -0
  34. package/dist/web/assets/{PrismHighlighter-BZkkX0AU.js → PrismHighlighter-LWITDffT.js} +2 -2
  35. package/dist/web/assets/Projects-CwicV3Dk.js +1 -0
  36. package/dist/web/assets/SearchResultsPanel-DCO0Ak0c.js +1 -0
  37. package/dist/web/assets/SessionDetail-mdmTQgo1.js +53 -0
  38. package/dist/web/assets/api-CXVT9XcZ.js +1 -0
  39. package/dist/web/assets/contract-BS78VBCV.js +2 -0
  40. package/dist/web/assets/{index-3UfOiTBO.css → index-C5cyw58A.css} +1 -1
  41. package/dist/web/assets/index-H2cT-6c6.js +1423 -0
  42. package/dist/web/assets/{session-indexes-BPhf1X2P.js → session-indexes-yyyWpKLf.js} +2 -2
  43. package/dist/web/assets/utils-C7BqyxxV.js +1 -0
  44. package/dist/web/index.html +7 -11
  45. package/package.json +4 -10
  46. package/dist/chunk-PSHZZITB.js +0 -17307
  47. package/dist/chunk-PSHZZITB.js.map +0 -1
  48. package/dist/chunk-WAKW5OPS.js +0 -241
  49. package/dist/chunk-WAKW5OPS.js.map +0 -1
  50. package/dist/dist-RHDY2EZX.js +0 -173
  51. package/dist/web/assets/ErrorBoundary-DIwwrdlw.js +0 -1
  52. package/dist/web/assets/InteractiveReceipt-DmNBDVms.js +0 -1
  53. package/dist/web/assets/OverviewScreen-B5JekBLC.js +0 -1
  54. package/dist/web/assets/Projects-Bj6ma2k2.js +0 -1
  55. package/dist/web/assets/SearchFilterBar-B9VrUbym.js +0 -1
  56. package/dist/web/assets/SearchResultsPanel-C1cuuOKq.js +0 -1
  57. package/dist/web/assets/SessionDetail-Dc2CQ3hH.js +0 -54
  58. package/dist/web/assets/SmartTagChips-ux6idUGJ.js +0 -1
  59. package/dist/web/assets/agents-BkRP_ww3.js +0 -1
  60. package/dist/web/assets/code-metrics-UYFsCC7E.js +0 -1
  61. package/dist/web/assets/contract-DXvltqJG.js +0 -1
  62. package/dist/web/assets/index-DBMiEd61.js +0 -1410
  63. package/dist/web/assets/panel-CLnL4kMN.js +0 -1
  64. package/dist/web/assets/session-title-DdtlxtlR.js +0 -1
  65. package/dist/web/assets/utils-BKqufGdv.js +0 -1
  66. /package/dist/{dist-RHDY2EZX.js.map → chunk-QH2HOXJH.js.map} +0 -0
@@ -1,16 +1,25 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ acknowledgeWorkerLogDrain
4
+ } from "./chunk-YQFEGFWD.js";
5
+ import "./chunk-QH2HOXJH.js";
2
6
  import {
3
7
  appLogger
4
- } from "./chunk-WAKW5OPS.js";
8
+ } from "./chunk-PAP2Q3WV.js";
5
9
  import {
6
10
  commitDurableSessionPublication,
7
- createRegisteredAgents,
8
11
  markAgentCacheInitialized,
9
12
  sessionDetailVersion,
10
13
  syncSessionSearchIndex,
11
- syncSessionSearchIndexChanges,
14
+ syncSessionSearchIndexChanges
15
+ } from "./chunk-TS3IWH5U.js";
16
+ import "./chunk-XKZSX5BM.js";
17
+ import {
18
+ createRegisteredAgents
19
+ } from "./chunk-WUYSZAYR.js";
20
+ import {
12
21
  synchronizePricingGeneration
13
- } from "./chunk-PSHZZITB.js";
22
+ } from "./chunk-NBJJGH5P.js";
14
23
 
15
24
  // src/search-index-worker.ts
16
25
  import { randomUUID } from "crypto";
@@ -71,7 +80,7 @@ function runJob(job, agent) {
71
80
  ...job.publicationId ? { publicationId: job.publicationId } : {}
72
81
  },
73
82
  (sessionId) => agent.getSessionData(sessionId),
74
- job.searchIndexOptions
83
+ publicationSearchIndexOptions(job)
75
84
  );
76
85
  if (publication.status === "rolled-back") return publication;
77
86
  postSyncResult(job.context, publication.searchIndex);
@@ -89,7 +98,7 @@ function runJob(job, agent) {
89
98
  ...job.publicationId ? { publicationId: job.publicationId } : {}
90
99
  },
91
100
  (sessionId) => agent.getSessionData(sessionId),
92
- job.searchIndexOptions
101
+ publicationSearchIndexOptions(job)
93
102
  );
94
103
  if (publication.status === "rolled-back") return publication;
95
104
  const result2 = publication.searchIndex;
@@ -114,6 +123,18 @@ function runJob(job, agent) {
114
123
  postSyncResult(job.context, result);
115
124
  return null;
116
125
  }
126
+ function publicationSearchIndexOptions(job) {
127
+ return {
128
+ ...job.searchIndexOptions,
129
+ onPublicationStage: (stage) => {
130
+ parentPort?.postMessage({
131
+ type: "publication-progress",
132
+ agentName: job.agentName,
133
+ stage
134
+ });
135
+ }
136
+ };
137
+ }
117
138
  function postSyncResult(context, result) {
118
139
  parentPort?.postMessage({
119
140
  type: "sync-result",
@@ -158,9 +179,7 @@ function runBatch(request) {
158
179
  failedAgents.add(job.agentName);
159
180
  continue;
160
181
  }
161
- if (agent.setSessionMetaMap) {
162
- agent.setSessionMetaMap(new Map(Object.entries(job.meta)));
163
- }
182
+ agent.restoreSessionCacheMeta(job.meta);
164
183
  const failure = runJob(job, agent);
165
184
  if (failure) {
166
185
  reportPersistFailure(job, failure);
@@ -176,8 +195,13 @@ function runBatch(request) {
176
195
  failedAgents: [...failedAgents]
177
196
  });
178
197
  }
179
- parentPort?.on("message", (message) => {
180
- if (message.type === "run") runBatch(message);
198
+ var workerPort = parentPort;
199
+ workerPort?.on("message", (message) => {
200
+ if (acknowledgeWorkerLogDrain(workerPort, message)) return;
201
+ if (message.type === "run") {
202
+ appLogger.restoreContext(message.logContext ?? {}, () => runBatch(message));
203
+ }
181
204
  });
182
- runBatch(workerData);
205
+ var initialRequest = workerData;
206
+ appLogger.restoreContext(initialRequest.logContext ?? {}, () => runBatch(initialRequest));
183
207
  //# sourceMappingURL=search-index-worker.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/search-index-worker.ts"],"sourcesContent":["import \"./diagnostics-bridge.js\";\nimport { randomUUID } from \"node:crypto\";\nimport { parentPort, workerData } from \"node:worker_threads\";\nimport {\n commitDurableSessionPublication,\n createRegisteredAgents,\n markAgentCacheInitialized,\n sessionDetailVersion,\n synchronizePricingGeneration,\n syncSessionSearchIndex,\n syncSessionSearchIndexChanges,\n type SearchIndexSyncResult,\n type SearchIndexSyncOptions,\n type SessionCacheMeta,\n type PersistedSessionHeadChange,\n type SessionHead,\n type SessionSnapshotCompleteness,\n type DurableSessionPublicationFailureStage,\n} from \"@codesesh/core\";\nimport { appLogger } from \"./logging.js\";\n\nexport type SearchIndexPersistStage = DurableSessionPublicationFailureStage;\n\nexport type SearchIndexWorkerMessage =\n | {\n type: \"sync-result\";\n context: string;\n result: SearchIndexSyncResult | null;\n }\n | {\n type: \"persist-failed\";\n context: string;\n stage: SearchIndexPersistStage;\n publicationId: string;\n agentName: string;\n sessions: number;\n /** True when the job carries a durable publication whose staged state must be rolled back. */\n fatal: boolean;\n }\n | {\n type: \"done\";\n context: string;\n durationMs: number;\n sessions: number;\n failedAgents: string[];\n };\n\nexport type SearchIndexWorkerJob =\n | {\n kind: \"full\";\n context: string;\n agentName: string;\n sessions: SessionHead[];\n meta: Record<string, SessionCacheMeta>;\n completeness: SessionSnapshotCompleteness;\n removedSessionIds: string[];\n publicationId?: string;\n saveCache?: boolean;\n searchIndexOptions?: SearchIndexSyncOptions;\n }\n | {\n kind: \"changes\";\n context: string;\n agentName: string;\n changes: PersistedSessionHeadChange[];\n removedSessionIds: string[];\n meta: Record<string, SessionCacheMeta>;\n publicationId?: string;\n searchIndexOptions?: SearchIndexSyncOptions;\n }\n | {\n kind: \"maintenance\";\n context: string;\n agentName: string;\n changes: PersistedSessionHeadChange[];\n removedSessionIds: string[];\n meta: Record<string, SessionCacheMeta>;\n searchIndexOptions?: SearchIndexSyncOptions;\n };\n\nexport interface SearchIndexWorkerRunRequest {\n type: \"run\";\n pricingGenerationId: number;\n jobs?: SearchIndexWorkerJob[];\n context: string;\n agentNames?: string[];\n sessionsByAgent?: Record<string, SessionHead[]>;\n metaByAgent?: Record<string, Record<string, SessionCacheMeta>>;\n}\n\ntype WorkerAgent = ReturnType<typeof createRegisteredAgents>[number];\n\nfunction jobSessionCount(job: SearchIndexWorkerJob): number {\n return job.kind === \"full\" ? job.sessions.length : job.changes.length;\n}\n\nfunction searchIndexOptions(job: SearchIndexWorkerJob): SearchIndexSyncOptions {\n return {\n ...job.searchIndexOptions,\n ...(job.kind === \"full\"\n ? { completeness: job.completeness, removedSessionIds: job.removedSessionIds }\n : {}),\n detailVersions: Object.fromEntries(\n Object.entries(job.meta).map(([sessionId, meta]) => [sessionId, sessionDetailVersion(meta)]),\n ),\n };\n}\n\n/**\n * Reports a persistence failure so the batch is rejected instead of settling as\n * `done`; the caller keeps its previously published snapshot and can retry.\n */\nfunction reportPersistFailure(\n job: SearchIndexWorkerJob,\n failure: { stage: SearchIndexPersistStage; publicationId: string },\n): void {\n appLogger.error(\"search_index.persist_failed\", {\n context: job.context,\n stage: failure.stage,\n agent: job.agentName,\n sessions: jobSessionCount(job),\n publication_id: failure.publicationId,\n });\n parentPort?.postMessage({\n type: \"persist-failed\",\n context: job.context,\n stage: failure.stage,\n publicationId: failure.publicationId,\n agentName: job.agentName,\n sessions: jobSessionCount(job),\n fatal: jobIsDurablePublication(job),\n } satisfies SearchIndexWorkerMessage);\n}\n\nfunction runJob(\n job: SearchIndexWorkerJob,\n agent: WorkerAgent,\n): { stage: SearchIndexPersistStage; publicationId: string } | null {\n if (job.kind === \"maintenance\") {\n const result = syncSessionSearchIndexChanges(\n job.agentName,\n job.changes,\n job.removedSessionIds,\n (sessionId) => agent.getSessionData(sessionId),\n searchIndexOptions(job),\n );\n if (!result) {\n return { stage: \"search_index\", publicationId: randomUUID() };\n }\n postSyncResult(job.context, result);\n return null;\n }\n\n if (job.kind === \"changes\") {\n const publication = commitDurableSessionPublication(\n {\n kind: \"changes\",\n agentName: job.agentName,\n changes: job.changes,\n removedSessionIds: job.removedSessionIds,\n meta: job.meta,\n ...(job.publicationId ? { publicationId: job.publicationId } : {}),\n },\n (sessionId) => agent.getSessionData(sessionId),\n job.searchIndexOptions,\n );\n if (publication.status === \"rolled-back\") return publication;\n postSyncResult(job.context, publication.searchIndex);\n return null;\n }\n\n if (job.saveCache) {\n const publication = commitDurableSessionPublication(\n {\n kind: \"snapshot\",\n agentName: job.agentName,\n sessions: job.sessions,\n meta: job.meta,\n completeness: job.completeness,\n removedSessionIds: job.removedSessionIds,\n ...(job.publicationId ? { publicationId: job.publicationId } : {}),\n },\n (sessionId) => agent.getSessionData(sessionId),\n job.searchIndexOptions,\n );\n if (publication.status === \"rolled-back\") return publication;\n const result = publication.searchIndex;\n // Head cache init is decoupled from search-index completeness (CS-73): a\n // session that fails to load must not permanently block future incremental scans.\n markAgentCacheInitialized(job.agentName);\n if (result.skipped > 0) {\n appLogger.warn(\"search_index.sync_incomplete\", {\n agent: job.agentName,\n skipped: result.skipped,\n });\n }\n postSyncResult(job.context, result);\n return null;\n }\n\n const publicationId = job.publicationId ?? randomUUID();\n const result = syncSessionSearchIndex(\n job.agentName,\n job.sessions,\n (sessionId) => agent.getSessionData(sessionId),\n searchIndexOptions(job),\n );\n if (!result) return { stage: \"search_index\", publicationId };\n postSyncResult(job.context, result);\n return null;\n}\n\nfunction postSyncResult(context: string, result: SearchIndexSyncResult): void {\n parentPort?.postMessage({\n type: \"sync-result\",\n context,\n result,\n } satisfies SearchIndexWorkerMessage);\n}\n\nlet pricingGenerationId: number | null = null;\n\nfunction jobIsDurablePublication(job: SearchIndexWorkerJob): boolean {\n return job.kind !== \"maintenance\" && job.publicationId != null;\n}\n\nfunction jobsFromRequest(request: SearchIndexWorkerRunRequest): SearchIndexWorkerJob[] {\n if (request.jobs) return request.jobs;\n return (request.agentNames ?? []).map((agentName): SearchIndexWorkerJob => ({\n kind: \"full\",\n context: request.context,\n agentName,\n sessions: request.sessionsByAgent?.[agentName] ?? [],\n meta: request.metaByAgent?.[agentName] ?? {},\n completeness: \"complete\",\n removedSessionIds: [],\n }));\n}\n\nfunction runBatch(request: SearchIndexWorkerRunRequest): void {\n const startedAt = performance.now();\n if (pricingGenerationId !== request.pricingGenerationId) {\n synchronizePricingGeneration(request.pricingGenerationId);\n pricingGenerationId = request.pricingGenerationId;\n }\n const agents = createRegisteredAgents();\n const jobs = jobsFromRequest(request);\n\n const failedAgents = new Set<string>();\n for (const job of jobs) {\n // Later chunks for an agent whose earlier job failed would commit on top\n // of unknown state; other agents' jobs are independent and keep going.\n if (failedAgents.has(job.agentName)) continue;\n const agent = agents.find((item) => item.name === job.agentName);\n if (!agent) {\n reportPersistFailure(job, {\n stage: \"prepare\",\n publicationId:\n job.kind === \"maintenance\" ? randomUUID() : (job.publicationId ?? randomUUID()),\n });\n // A session publication must reject the whole batch so its staged\n // state gets rolled back by the caller.\n if (jobIsDurablePublication(job)) return;\n failedAgents.add(job.agentName);\n continue;\n }\n\n if (agent.setSessionMetaMap) {\n agent.setSessionMetaMap(new Map(Object.entries(job.meta)));\n }\n\n const failure = runJob(job, agent);\n if (failure) {\n reportPersistFailure(job, failure);\n if (jobIsDurablePublication(job)) return;\n failedAgents.add(job.agentName);\n }\n }\n\n parentPort?.postMessage({\n type: \"done\",\n context: request.context,\n durationMs: performance.now() - startedAt,\n sessions: jobs.reduce((total, job) => total + jobSessionCount(job), 0),\n failedAgents: [...failedAgents],\n } satisfies SearchIndexWorkerMessage);\n}\n\nparentPort?.on(\"message\", (message: SearchIndexWorkerRunRequest) => {\n if (message.type === \"run\") runBatch(message);\n});\nrunBatch(workerData as SearchIndexWorkerRunRequest);\n"],"mappings":";;;;;;;;;;;;;;;AACA,SAAS,kBAAkB;AAC3B,SAAS,YAAY,kBAAkB;AA0FvC,SAAS,gBAAgB,KAAmC;AAC1D,SAAO,IAAI,SAAS,SAAS,IAAI,SAAS,SAAS,IAAI,QAAQ;AACjE;AAEA,SAAS,mBAAmB,KAAmD;AAC7E,SAAO;AAAA,IACL,GAAG,IAAI;AAAA,IACP,GAAI,IAAI,SAAS,SACb,EAAE,cAAc,IAAI,cAAc,mBAAmB,IAAI,kBAAkB,IAC3E,CAAC;AAAA,IACL,gBAAgB,OAAO;AAAA,MACrB,OAAO,QAAQ,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,qBAAqB,IAAI,CAAC,CAAC;AAAA,IAC7F;AAAA,EACF;AACF;AAMA,SAAS,qBACP,KACA,SACM;AACN,YAAU,MAAM,+BAA+B;AAAA,IAC7C,SAAS,IAAI;AAAA,IACb,OAAO,QAAQ;AAAA,IACf,OAAO,IAAI;AAAA,IACX,UAAU,gBAAgB,GAAG;AAAA,IAC7B,gBAAgB,QAAQ;AAAA,EAC1B,CAAC;AACD,cAAY,YAAY;AAAA,IACtB,MAAM;AAAA,IACN,SAAS,IAAI;AAAA,IACb,OAAO,QAAQ;AAAA,IACf,eAAe,QAAQ;AAAA,IACvB,WAAW,IAAI;AAAA,IACf,UAAU,gBAAgB,GAAG;AAAA,IAC7B,OAAO,wBAAwB,GAAG;AAAA,EACpC,CAAoC;AACtC;AAEA,SAAS,OACP,KACA,OACkE;AAClE,MAAI,IAAI,SAAS,eAAe;AAC9B,UAAMA,UAAS;AAAA,MACb,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,CAAC,cAAc,MAAM,eAAe,SAAS;AAAA,MAC7C,mBAAmB,GAAG;AAAA,IACxB;AACA,QAAI,CAACA,SAAQ;AACX,aAAO,EAAE,OAAO,gBAAgB,eAAe,WAAW,EAAE;AAAA,IAC9D;AACA,mBAAe,IAAI,SAASA,OAAM;AAClC,WAAO;AAAA,EACT;AAEA,MAAI,IAAI,SAAS,WAAW;AAC1B,UAAM,cAAc;AAAA,MAClB;AAAA,QACE,MAAM;AAAA,QACN,WAAW,IAAI;AAAA,QACf,SAAS,IAAI;AAAA,QACb,mBAAmB,IAAI;AAAA,QACvB,MAAM,IAAI;AAAA,QACV,GAAI,IAAI,gBAAgB,EAAE,eAAe,IAAI,cAAc,IAAI,CAAC;AAAA,MAClE;AAAA,MACA,CAAC,cAAc,MAAM,eAAe,SAAS;AAAA,MAC7C,IAAI;AAAA,IACN;AACA,QAAI,YAAY,WAAW,cAAe,QAAO;AACjD,mBAAe,IAAI,SAAS,YAAY,WAAW;AACnD,WAAO;AAAA,EACT;AAEA,MAAI,IAAI,WAAW;AACjB,UAAM,cAAc;AAAA,MAClB;AAAA,QACE,MAAM;AAAA,QACN,WAAW,IAAI;AAAA,QACf,UAAU,IAAI;AAAA,QACd,MAAM,IAAI;AAAA,QACV,cAAc,IAAI;AAAA,QAClB,mBAAmB,IAAI;AAAA,QACvB,GAAI,IAAI,gBAAgB,EAAE,eAAe,IAAI,cAAc,IAAI,CAAC;AAAA,MAClE;AAAA,MACA,CAAC,cAAc,MAAM,eAAe,SAAS;AAAA,MAC7C,IAAI;AAAA,IACN;AACA,QAAI,YAAY,WAAW,cAAe,QAAO;AACjD,UAAMA,UAAS,YAAY;AAG3B,8BAA0B,IAAI,SAAS;AACvC,QAAIA,QAAO,UAAU,GAAG;AACtB,gBAAU,KAAK,gCAAgC;AAAA,QAC7C,OAAO,IAAI;AAAA,QACX,SAASA,QAAO;AAAA,MAClB,CAAC;AAAA,IACH;AACA,mBAAe,IAAI,SAASA,OAAM;AAClC,WAAO;AAAA,EACT;AAEA,QAAM,gBAAgB,IAAI,iBAAiB,WAAW;AACtD,QAAM,SAAS;AAAA,IACb,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,CAAC,cAAc,MAAM,eAAe,SAAS;AAAA,IAC7C,mBAAmB,GAAG;AAAA,EACxB;AACA,MAAI,CAAC,OAAQ,QAAO,EAAE,OAAO,gBAAgB,cAAc;AAC3D,iBAAe,IAAI,SAAS,MAAM;AAClC,SAAO;AACT;AAEA,SAAS,eAAe,SAAiB,QAAqC;AAC5E,cAAY,YAAY;AAAA,IACtB,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACF,CAAoC;AACtC;AAEA,IAAI,sBAAqC;AAEzC,SAAS,wBAAwB,KAAoC;AACnE,SAAO,IAAI,SAAS,iBAAiB,IAAI,iBAAiB;AAC5D;AAEA,SAAS,gBAAgB,SAA8D;AACrF,MAAI,QAAQ,KAAM,QAAO,QAAQ;AACjC,UAAQ,QAAQ,cAAc,CAAC,GAAG,IAAI,CAAC,eAAqC;AAAA,IAC1E,MAAM;AAAA,IACN,SAAS,QAAQ;AAAA,IACjB;AAAA,IACA,UAAU,QAAQ,kBAAkB,SAAS,KAAK,CAAC;AAAA,IACnD,MAAM,QAAQ,cAAc,SAAS,KAAK,CAAC;AAAA,IAC3C,cAAc;AAAA,IACd,mBAAmB,CAAC;AAAA,EACtB,EAAE;AACJ;AAEA,SAAS,SAAS,SAA4C;AAC5D,QAAM,YAAY,YAAY,IAAI;AAClC,MAAI,wBAAwB,QAAQ,qBAAqB;AACvD,iCAA6B,QAAQ,mBAAmB;AACxD,0BAAsB,QAAQ;AAAA,EAChC;AACA,QAAM,SAAS,uBAAuB;AACtC,QAAM,OAAO,gBAAgB,OAAO;AAEpC,QAAM,eAAe,oBAAI,IAAY;AACrC,aAAW,OAAO,MAAM;AAGtB,QAAI,aAAa,IAAI,IAAI,SAAS,EAAG;AACrC,UAAM,QAAQ,OAAO,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,SAAS;AAC/D,QAAI,CAAC,OAAO;AACV,2BAAqB,KAAK;AAAA,QACxB,OAAO;AAAA,QACP,eACE,IAAI,SAAS,gBAAgB,WAAW,IAAK,IAAI,iBAAiB,WAAW;AAAA,MACjF,CAAC;AAGD,UAAI,wBAAwB,GAAG,EAAG;AAClC,mBAAa,IAAI,IAAI,SAAS;AAC9B;AAAA,IACF;AAEA,QAAI,MAAM,mBAAmB;AAC3B,YAAM,kBAAkB,IAAI,IAAI,OAAO,QAAQ,IAAI,IAAI,CAAC,CAAC;AAAA,IAC3D;AAEA,UAAM,UAAU,OAAO,KAAK,KAAK;AACjC,QAAI,SAAS;AACX,2BAAqB,KAAK,OAAO;AACjC,UAAI,wBAAwB,GAAG,EAAG;AAClC,mBAAa,IAAI,IAAI,SAAS;AAAA,IAChC;AAAA,EACF;AAEA,cAAY,YAAY;AAAA,IACtB,MAAM;AAAA,IACN,SAAS,QAAQ;AAAA,IACjB,YAAY,YAAY,IAAI,IAAI;AAAA,IAChC,UAAU,KAAK,OAAO,CAAC,OAAO,QAAQ,QAAQ,gBAAgB,GAAG,GAAG,CAAC;AAAA,IACrE,cAAc,CAAC,GAAG,YAAY;AAAA,EAChC,CAAoC;AACtC;AAEA,YAAY,GAAG,WAAW,CAAC,YAAyC;AAClE,MAAI,QAAQ,SAAS,MAAO,UAAS,OAAO;AAC9C,CAAC;AACD,SAAS,UAAyC;","names":["result"]}
1
+ {"version":3,"sources":["../src/search-index-worker.ts"],"sourcesContent":["import \"./diagnostics-bridge.js\";\nimport { randomUUID } from \"node:crypto\";\nimport { parentPort, workerData } from \"node:worker_threads\";\nimport {\n commitDurableSessionPublication,\n markAgentCacheInitialized,\n sessionDetailVersion,\n syncSessionSearchIndex,\n syncSessionSearchIndexChanges,\n type IdentifiedSessionHead,\n type SearchIndexSyncResult,\n type SearchIndexSyncOptions,\n type SearchIndexPublicationStage,\n type PersistedSessionHeadChange,\n type SessionSnapshotCompleteness,\n type DurableSessionPublicationFailureStage,\n} from \"@codesesh/core/runtime/discovery\";\nimport { createRegisteredAgents, type SessionCacheMeta } from \"@codesesh/core/runtime/agents\";\nimport { synchronizePricingGeneration } from \"@codesesh/core/runtime/pricing\";\nimport { appLogger, type LogContext } from \"./logging.js\";\nimport { acknowledgeWorkerLogDrain } from \"./worker-log-drain.js\";\n\nexport type SearchIndexPersistStage = DurableSessionPublicationFailureStage;\n\nexport interface SearchIndexPublicationProgress {\n agentName: string;\n stage: SearchIndexPublicationStage;\n}\n\nexport type SearchIndexWorkerOptions = Omit<SearchIndexSyncOptions, \"onPublicationStage\">;\n\nexport type SearchIndexWorkerMessage =\n | {\n type: \"sync-result\";\n context: string;\n result: SearchIndexSyncResult | null;\n }\n | {\n type: \"persist-failed\";\n context: string;\n stage: SearchIndexPersistStage;\n publicationId: string;\n agentName: string;\n sessions: number;\n /** True when the job carries a durable publication whose staged state must be rolled back. */\n fatal: boolean;\n }\n | ({ type: \"publication-progress\" } & SearchIndexPublicationProgress)\n | {\n type: \"done\";\n context: string;\n durationMs: number;\n sessions: number;\n failedAgents: string[];\n };\n\nexport type SearchIndexWorkerJob =\n | {\n kind: \"full\";\n context: string;\n agentName: string;\n sessions: IdentifiedSessionHead[];\n meta: Record<string, SessionCacheMeta>;\n completeness: SessionSnapshotCompleteness;\n removedSessionIds: string[];\n publicationId?: string;\n saveCache?: boolean;\n searchIndexOptions?: SearchIndexWorkerOptions;\n }\n | {\n kind: \"changes\";\n context: string;\n agentName: string;\n changes: PersistedSessionHeadChange<IdentifiedSessionHead>[];\n removedSessionIds: string[];\n meta: Record<string, SessionCacheMeta>;\n publicationId?: string;\n searchIndexOptions?: SearchIndexWorkerOptions;\n }\n | {\n kind: \"maintenance\";\n context: string;\n agentName: string;\n changes: PersistedSessionHeadChange<IdentifiedSessionHead>[];\n removedSessionIds: string[];\n meta: Record<string, SessionCacheMeta>;\n searchIndexOptions?: SearchIndexWorkerOptions;\n };\n\nexport interface SearchIndexWorkerRunRequest {\n type: \"run\";\n pricingGenerationId: number;\n logContext?: LogContext;\n jobs?: SearchIndexWorkerJob[];\n context: string;\n agentNames?: string[];\n sessionsByAgent?: Record<string, IdentifiedSessionHead[]>;\n metaByAgent?: Record<string, Record<string, SessionCacheMeta>>;\n}\n\ntype WorkerAgent = ReturnType<typeof createRegisteredAgents>[number];\n\nfunction jobSessionCount(job: SearchIndexWorkerJob): number {\n return job.kind === \"full\" ? job.sessions.length : job.changes.length;\n}\n\nfunction searchIndexOptions(job: SearchIndexWorkerJob): SearchIndexSyncOptions {\n return {\n ...job.searchIndexOptions,\n ...(job.kind === \"full\"\n ? { completeness: job.completeness, removedSessionIds: job.removedSessionIds }\n : {}),\n detailVersions: Object.fromEntries(\n Object.entries(job.meta).map(([sessionId, meta]) => [sessionId, sessionDetailVersion(meta)]),\n ),\n };\n}\n\n/**\n * Reports a persistence failure so the batch is rejected instead of settling as\n * `done`; the caller keeps its previously published snapshot and can retry.\n */\nfunction reportPersistFailure(\n job: SearchIndexWorkerJob,\n failure: { stage: SearchIndexPersistStage; publicationId: string },\n): void {\n appLogger.error(\"search_index.persist_failed\", {\n context: job.context,\n stage: failure.stage,\n agent: job.agentName,\n sessions: jobSessionCount(job),\n publication_id: failure.publicationId,\n });\n parentPort?.postMessage({\n type: \"persist-failed\",\n context: job.context,\n stage: failure.stage,\n publicationId: failure.publicationId,\n agentName: job.agentName,\n sessions: jobSessionCount(job),\n fatal: jobIsDurablePublication(job),\n } satisfies SearchIndexWorkerMessage);\n}\n\nfunction runJob(\n job: SearchIndexWorkerJob,\n agent: WorkerAgent,\n): { stage: SearchIndexPersistStage; publicationId: string } | null {\n if (job.kind === \"maintenance\") {\n const result = syncSessionSearchIndexChanges(\n job.agentName,\n job.changes,\n job.removedSessionIds,\n (sessionId) => agent.getSessionData(sessionId),\n searchIndexOptions(job),\n );\n if (!result) {\n return { stage: \"search_index\", publicationId: randomUUID() };\n }\n postSyncResult(job.context, result);\n return null;\n }\n\n if (job.kind === \"changes\") {\n const publication = commitDurableSessionPublication(\n {\n kind: \"changes\",\n agentName: job.agentName,\n changes: job.changes,\n removedSessionIds: job.removedSessionIds,\n meta: job.meta,\n ...(job.publicationId ? { publicationId: job.publicationId } : {}),\n },\n (sessionId) => agent.getSessionData(sessionId),\n publicationSearchIndexOptions(job),\n );\n if (publication.status === \"rolled-back\") return publication;\n postSyncResult(job.context, publication.searchIndex);\n return null;\n }\n\n if (job.saveCache) {\n const publication = commitDurableSessionPublication(\n {\n kind: \"snapshot\",\n agentName: job.agentName,\n sessions: job.sessions,\n meta: job.meta,\n completeness: job.completeness,\n removedSessionIds: job.removedSessionIds,\n ...(job.publicationId ? { publicationId: job.publicationId } : {}),\n },\n (sessionId) => agent.getSessionData(sessionId),\n publicationSearchIndexOptions(job),\n );\n if (publication.status === \"rolled-back\") return publication;\n const result = publication.searchIndex;\n // Head cache init is decoupled from search-index completeness (CS-73): a\n // session that fails to load must not permanently block future incremental scans.\n markAgentCacheInitialized(job.agentName);\n if (result.skipped > 0) {\n appLogger.warn(\"search_index.sync_incomplete\", {\n agent: job.agentName,\n skipped: result.skipped,\n });\n }\n postSyncResult(job.context, result);\n return null;\n }\n\n const publicationId = job.publicationId ?? randomUUID();\n const result = syncSessionSearchIndex(\n job.agentName,\n job.sessions,\n (sessionId) => agent.getSessionData(sessionId),\n searchIndexOptions(job),\n );\n if (!result) return { stage: \"search_index\", publicationId };\n postSyncResult(job.context, result);\n return null;\n}\n\nfunction publicationSearchIndexOptions(job: SearchIndexWorkerJob): SearchIndexSyncOptions {\n return {\n ...job.searchIndexOptions,\n onPublicationStage: (stage) => {\n parentPort?.postMessage({\n type: \"publication-progress\",\n agentName: job.agentName,\n stage,\n } satisfies SearchIndexWorkerMessage);\n },\n };\n}\n\nfunction postSyncResult(context: string, result: SearchIndexSyncResult): void {\n parentPort?.postMessage({\n type: \"sync-result\",\n context,\n result,\n } satisfies SearchIndexWorkerMessage);\n}\n\nlet pricingGenerationId: number | null = null;\n\nfunction jobIsDurablePublication(job: SearchIndexWorkerJob): boolean {\n return job.kind !== \"maintenance\" && job.publicationId != null;\n}\n\nfunction jobsFromRequest(request: SearchIndexWorkerRunRequest): SearchIndexWorkerJob[] {\n if (request.jobs) return request.jobs;\n return (request.agentNames ?? []).map((agentName): SearchIndexWorkerJob => ({\n kind: \"full\",\n context: request.context,\n agentName,\n sessions: request.sessionsByAgent?.[agentName] ?? [],\n meta: request.metaByAgent?.[agentName] ?? {},\n completeness: \"complete\",\n removedSessionIds: [],\n }));\n}\n\nfunction runBatch(request: SearchIndexWorkerRunRequest): void {\n const startedAt = performance.now();\n if (pricingGenerationId !== request.pricingGenerationId) {\n synchronizePricingGeneration(request.pricingGenerationId);\n pricingGenerationId = request.pricingGenerationId;\n }\n const agents = createRegisteredAgents();\n const jobs = jobsFromRequest(request);\n\n const failedAgents = new Set<string>();\n for (const job of jobs) {\n // Later chunks for an agent whose earlier job failed would commit on top\n // of unknown state; other agents' jobs are independent and keep going.\n if (failedAgents.has(job.agentName)) continue;\n const agent = agents.find((item) => item.name === job.agentName);\n if (!agent) {\n reportPersistFailure(job, {\n stage: \"prepare\",\n publicationId:\n job.kind === \"maintenance\" ? randomUUID() : (job.publicationId ?? randomUUID()),\n });\n // A session publication must reject the whole batch so its staged\n // state gets rolled back by the caller.\n if (jobIsDurablePublication(job)) return;\n failedAgents.add(job.agentName);\n continue;\n }\n\n agent.restoreSessionCacheMeta(job.meta);\n\n const failure = runJob(job, agent);\n if (failure) {\n reportPersistFailure(job, failure);\n if (jobIsDurablePublication(job)) return;\n failedAgents.add(job.agentName);\n }\n }\n\n parentPort?.postMessage({\n type: \"done\",\n context: request.context,\n durationMs: performance.now() - startedAt,\n sessions: jobs.reduce((total, job) => total + jobSessionCount(job), 0),\n failedAgents: [...failedAgents],\n } satisfies SearchIndexWorkerMessage);\n}\n\nconst workerPort = parentPort;\nworkerPort?.on(\"message\", (message: SearchIndexWorkerRunRequest) => {\n if (acknowledgeWorkerLogDrain(workerPort, message)) return;\n if (message.type === \"run\") {\n appLogger.restoreContext(message.logContext ?? {}, () => runBatch(message));\n }\n});\nconst initialRequest = workerData as SearchIndexWorkerRunRequest;\nappLogger.restoreContext(initialRequest.logContext ?? {}, () => runBatch(initialRequest));\n"],"mappings":"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","names":["result"]}
@@ -0,0 +1,79 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ acknowledgeWorkerLogDrain
4
+ } from "./chunk-YQFEGFWD.js";
5
+ import "./chunk-QH2HOXJH.js";
6
+ import {
7
+ appLogger
8
+ } from "./chunk-PAP2Q3WV.js";
9
+ import {
10
+ closeCacheStorage,
11
+ materializeSessionDetailResponse
12
+ } from "./chunk-TS3IWH5U.js";
13
+ import "./chunk-XKZSX5BM.js";
14
+ import {
15
+ createRegisteredAgents
16
+ } from "./chunk-WUYSZAYR.js";
17
+ import {
18
+ synchronizePricingGeneration
19
+ } from "./chunk-NBJJGH5P.js";
20
+
21
+ // src/session-detail-worker.ts
22
+ import { parentPort, workerData } from "worker_threads";
23
+ var workerPort = parentPort;
24
+ workerPort?.on("message", (message) => {
25
+ acknowledgeWorkerLogDrain(workerPort, message);
26
+ });
27
+ var request = workerData;
28
+ var terminalMessage = appLogger.restoreContext(
29
+ request.logContext ?? {},
30
+ () => {
31
+ try {
32
+ synchronizePricingGeneration(request.pricingGenerationId);
33
+ const agent = createRegisteredAgents().find(
34
+ (item) => item.name === request.reference.agentName
35
+ );
36
+ const sessions = request.head ? [request.head] : [];
37
+ agent?.restoreSessionCacheMeta(request.meta);
38
+ const result = materializeSessionDetailResponse(
39
+ {
40
+ agents: agent ? [agent] : [],
41
+ sessions,
42
+ byAgent: { [request.reference.agentName]: sessions }
43
+ },
44
+ request.reference,
45
+ { messageCursor: request.messageCursor }
46
+ );
47
+ if (result.status === "found") {
48
+ const { messages, ...data } = result.data;
49
+ return {
50
+ type: "result",
51
+ result: {
52
+ status: "found-json",
53
+ data,
54
+ messages: messages.map((message) => JSON.stringify(message)),
55
+ messageCount: messages.length,
56
+ sentMessageCount: messages.length
57
+ }
58
+ };
59
+ }
60
+ return {
61
+ type: "result",
62
+ result: result.status === "found-json" ? { ...result, messages: [...result.messages] } : result
63
+ };
64
+ } catch (error) {
65
+ return {
66
+ type: "error",
67
+ error: error instanceof Error ? error.message : String(error)
68
+ };
69
+ } finally {
70
+ try {
71
+ closeCacheStorage();
72
+ } catch (error) {
73
+ appLogger.error("session_detail.worker.close_failed", { error });
74
+ }
75
+ }
76
+ }
77
+ );
78
+ parentPort?.postMessage(terminalMessage);
79
+ //# sourceMappingURL=session-detail-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/session-detail-worker.ts"],"sourcesContent":["import \"./diagnostics-bridge.js\";\nimport { parentPort, workerData } from \"node:worker_threads\";\nimport { createRegisteredAgents, type SessionCacheMeta } from \"@codesesh/core/runtime/agents\";\nimport {\n closeCacheStorage,\n materializeSessionDetailResponse,\n type IdentifiedSessionHead,\n type SessionDetailResponseResult,\n type SessionReference,\n} from \"@codesesh/core/runtime/discovery\";\nimport { synchronizePricingGeneration } from \"@codesesh/core/runtime/pricing\";\nimport { appLogger, type LogContext } from \"./logging.js\";\nimport { acknowledgeWorkerLogDrain } from \"./worker-log-drain.js\";\n\nexport interface SessionDetailWorkerRequest {\n reference: SessionReference;\n head?: IdentifiedSessionHead;\n meta: Record<string, SessionCacheMeta>;\n messageCursor?: string;\n pricingGenerationId: number;\n logContext?: LogContext;\n}\n\nexport type SessionDetailWorkerMessage =\n | { type: \"result\"; result: SessionDetailResponseResult }\n | { type: \"error\"; error: string };\n\nconst workerPort = parentPort;\nworkerPort?.on(\"message\", (message: unknown) => {\n acknowledgeWorkerLogDrain(workerPort, message);\n});\n\nconst request = workerData as SessionDetailWorkerRequest;\nconst terminalMessage = appLogger.restoreContext(\n request.logContext ?? {},\n (): SessionDetailWorkerMessage => {\n try {\n synchronizePricingGeneration(request.pricingGenerationId);\n const agent = createRegisteredAgents().find(\n (item) => item.name === request.reference.agentName,\n );\n const sessions = request.head ? [request.head] : [];\n agent?.restoreSessionCacheMeta(request.meta);\n const result = materializeSessionDetailResponse(\n {\n agents: agent ? [agent] : [],\n sessions,\n byAgent: { [request.reference.agentName]: sessions },\n },\n request.reference,\n { messageCursor: request.messageCursor },\n );\n if (result.status === \"found\") {\n const { messages, ...data } = result.data;\n return {\n type: \"result\",\n result: {\n status: \"found-json\",\n data,\n messages: messages.map((message) => JSON.stringify(message)),\n messageCount: messages.length,\n sentMessageCount: messages.length,\n },\n };\n }\n return {\n type: \"result\",\n result:\n result.status === \"found-json\" ? { ...result, messages: [...result.messages] } : result,\n };\n } catch (error) {\n return {\n type: \"error\",\n error: error instanceof Error ? error.message : String(error),\n };\n } finally {\n try {\n closeCacheStorage();\n } catch (error) {\n appLogger.error(\"session_detail.worker.close_failed\", { error });\n }\n }\n },\n);\nparentPort?.postMessage(terminalMessage);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AACA,SAAS,YAAY,kBAAkB;AA0BvC,IAAM,aAAa;AACnB,YAAY,GAAG,WAAW,CAAC,YAAqB;AAC9C,4BAA0B,YAAY,OAAO;AAC/C,CAAC;AAED,IAAM,UAAU;AAChB,IAAM,kBAAkB,UAAU;AAAA,EAChC,QAAQ,cAAc,CAAC;AAAA,EACvB,MAAkC;AAChC,QAAI;AACF,mCAA6B,QAAQ,mBAAmB;AACxD,YAAM,QAAQ,uBAAuB,EAAE;AAAA,QACrC,CAAC,SAAS,KAAK,SAAS,QAAQ,UAAU;AAAA,MAC5C;AACA,YAAM,WAAW,QAAQ,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC;AAClD,aAAO,wBAAwB,QAAQ,IAAI;AAC3C,YAAM,SAAS;AAAA,QACb;AAAA,UACE,QAAQ,QAAQ,CAAC,KAAK,IAAI,CAAC;AAAA,UAC3B;AAAA,UACA,SAAS,EAAE,CAAC,QAAQ,UAAU,SAAS,GAAG,SAAS;AAAA,QACrD;AAAA,QACA,QAAQ;AAAA,QACR,EAAE,eAAe,QAAQ,cAAc;AAAA,MACzC;AACA,UAAI,OAAO,WAAW,SAAS;AAC7B,cAAM,EAAE,UAAU,GAAG,KAAK,IAAI,OAAO;AACrC,eAAO;AAAA,UACL,MAAM;AAAA,UACN,QAAQ;AAAA,YACN,QAAQ;AAAA,YACR;AAAA,YACA,UAAU,SAAS,IAAI,CAAC,YAAY,KAAK,UAAU,OAAO,CAAC;AAAA,YAC3D,cAAc,SAAS;AAAA,YACvB,kBAAkB,SAAS;AAAA,UAC7B;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,QACL,MAAM;AAAA,QACN,QACE,OAAO,WAAW,eAAe,EAAE,GAAG,QAAQ,UAAU,CAAC,GAAG,OAAO,QAAQ,EAAE,IAAI;AAAA,MACrF;AAAA,IACF,SAAS,OAAO;AACd,aAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,MAC9D;AAAA,IACF,UAAE;AACA,UAAI;AACF,0BAAkB;AAAA,MACpB,SAAS,OAAO;AACd,kBAAU,MAAM,sCAAsC,EAAE,MAAM,CAAC;AAAA,MACjE;AAAA,IACF;AAAA,EACF;AACF;AACA,YAAY,YAAY,eAAe;","names":[]}
@@ -1,11 +1,14 @@
1
1
  #!/usr/bin/env node
2
- import "./chunk-WAKW5OPS.js";
2
+ import "./chunk-QH2HOXJH.js";
3
+ import "./chunk-PAP2Q3WV.js";
4
+ import {
5
+ createRegisteredAgents
6
+ } from "./chunk-WUYSZAYR.js";
3
7
  import {
4
8
  classifySessionTags,
5
- createRegisteredAgents,
6
9
  getSmartTagSourceTimestamp,
7
10
  synchronizePricingGeneration
8
- } from "./chunk-PSHZZITB.js";
11
+ } from "./chunk-NBJJGH5P.js";
9
12
 
10
13
  // src/smart-tag-worker.ts
11
14
  import { parentPort, workerData } from "worker_threads";
@@ -14,8 +17,8 @@ synchronizePricingGeneration(data.pricingGenerationId);
14
17
  var agents = createRegisteredAgents();
15
18
  var agent = agents.find((a) => a.name === data.agentName);
16
19
  var results = [];
17
- if (agent && agent.setSessionMetaMap) {
18
- agent.setSessionMetaMap(new Map(Object.entries(data.meta)));
20
+ if (agent) {
21
+ agent.restoreSessionCacheMeta(data.meta);
19
22
  for (const sessionId of data.sessionIds) {
20
23
  try {
21
24
  const sessionData = agent.getSessionData(sessionId);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/smart-tag-worker.ts"],"sourcesContent":["import \"./diagnostics-bridge.js\";\nimport { parentPort, workerData } from \"node:worker_threads\";\nimport {\n createRegisteredAgents,\n classifySessionTags,\n getSmartTagSourceTimestamp,\n synchronizePricingGeneration,\n type SessionCacheMeta,\n} from \"@codesesh/core\";\n\ninterface SmartTagWorkerData {\n pricingGenerationId: number;\n agentName: string;\n sessionIds: string[];\n meta: Record<string, Record<string, unknown>>;\n}\n\ninterface SmartTagWorkerResult {\n id: string;\n tags?: ReturnType<typeof classifySessionTags>;\n sourceUpdatedAt?: number;\n error?: string;\n}\n\nconst data = workerData as SmartTagWorkerData;\nsynchronizePricingGeneration(data.pricingGenerationId);\nconst agents = createRegisteredAgents();\nconst agent = agents.find((a) => a.name === data.agentName);\nconst results: SmartTagWorkerResult[] = [];\n\nif (agent && agent.setSessionMetaMap) {\n agent.setSessionMetaMap(new Map(Object.entries(data.meta)) as Map<string, SessionCacheMeta>);\n\n for (const sessionId of data.sessionIds) {\n try {\n const sessionData = agent.getSessionData(sessionId);\n results.push({\n id: sessionId,\n tags: classifySessionTags(sessionData),\n sourceUpdatedAt: getSmartTagSourceTimestamp(sessionData),\n });\n } catch (error) {\n results.push({\n id: sessionId,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n}\n\nparentPort?.postMessage(results);\n"],"mappings":";;;;;;;;;;AACA,SAAS,YAAY,kBAAkB;AAuBvC,IAAM,OAAO;AACb,6BAA6B,KAAK,mBAAmB;AACrD,IAAM,SAAS,uBAAuB;AACtC,IAAM,QAAQ,OAAO,KAAK,CAAC,MAAM,EAAE,SAAS,KAAK,SAAS;AAC1D,IAAM,UAAkC,CAAC;AAEzC,IAAI,SAAS,MAAM,mBAAmB;AACpC,QAAM,kBAAkB,IAAI,IAAI,OAAO,QAAQ,KAAK,IAAI,CAAC,CAAkC;AAE3F,aAAW,aAAa,KAAK,YAAY;AACvC,QAAI;AACF,YAAM,cAAc,MAAM,eAAe,SAAS;AAClD,cAAQ,KAAK;AAAA,QACX,IAAI;AAAA,QACJ,MAAM,oBAAoB,WAAW;AAAA,QACrC,iBAAiB,2BAA2B,WAAW;AAAA,MACzD,CAAC;AAAA,IACH,SAAS,OAAO;AACd,cAAQ,KAAK;AAAA,QACX,IAAI;AAAA,QACJ,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,MAC9D,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,YAAY,YAAY,OAAO;","names":[]}
1
+ {"version":3,"sources":["../src/smart-tag-worker.ts"],"sourcesContent":["import \"./diagnostics-bridge.js\";\nimport { parentPort, workerData } from \"node:worker_threads\";\nimport { createRegisteredAgents, type SessionCacheMeta } from \"@codesesh/core/runtime/agents\";\nimport {\n classifySessionTags,\n getSmartTagSourceTimestamp,\n} from \"@codesesh/core/runtime/diagnostics\";\nimport { synchronizePricingGeneration } from \"@codesesh/core/runtime/pricing\";\n\ninterface SmartTagWorkerData {\n pricingGenerationId: number;\n agentName: string;\n sessionIds: string[];\n meta: Record<string, SessionCacheMeta>;\n}\n\ninterface SmartTagWorkerResult {\n id: string;\n tags?: ReturnType<typeof classifySessionTags>;\n sourceUpdatedAt?: number;\n error?: string;\n}\n\nconst data = workerData as SmartTagWorkerData;\nsynchronizePricingGeneration(data.pricingGenerationId);\nconst agents = createRegisteredAgents();\nconst agent = agents.find((a) => a.name === data.agentName);\nconst results: SmartTagWorkerResult[] = [];\n\nif (agent) {\n agent.restoreSessionCacheMeta(data.meta);\n\n for (const sessionId of data.sessionIds) {\n try {\n const sessionData = agent.getSessionData(sessionId);\n results.push({\n id: sessionId,\n tags: classifySessionTags(sessionData),\n sourceUpdatedAt: getSmartTagSourceTimestamp(sessionData),\n });\n } catch (error) {\n results.push({\n id: sessionId,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n}\n\nparentPort?.postMessage(results);\n"],"mappings":";;;;;;;;;;;;;AACA,SAAS,YAAY,kBAAkB;AAsBvC,IAAM,OAAO;AACb,6BAA6B,KAAK,mBAAmB;AACrD,IAAM,SAAS,uBAAuB;AACtC,IAAM,QAAQ,OAAO,KAAK,CAAC,MAAM,EAAE,SAAS,KAAK,SAAS;AAC1D,IAAM,UAAkC,CAAC;AAEzC,IAAI,OAAO;AACT,QAAM,wBAAwB,KAAK,IAAI;AAEvC,aAAW,aAAa,KAAK,YAAY;AACvC,QAAI;AACF,YAAM,cAAc,MAAM,eAAe,SAAS;AAClD,cAAQ,KAAK;AAAA,QACX,IAAI;AAAA,QACJ,MAAM,oBAAoB,WAAW;AAAA,QACrC,iBAAiB,2BAA2B,WAAW;AAAA,MACzD,CAAC;AAAA,IACH,SAAS,OAAO;AACd,cAAQ,KAAK;AAAA,QACX,IAAI;AAAA,QACJ,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,MAC9D,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,YAAY,YAAY,OAAO;","names":[]}
@@ -0,0 +1 @@
1
+ import{a as e,n as t,t as n}from"./jsx-runtime-B-hcVAMW.js";import{Kt as r,On as i,t as a,v as o,w as s,x as c,y as l}from"./utils-C7BqyxxV.js";import{o as u}from"./api-CXVT9XcZ.js";var d=e(t(),1),f=n(),p=d.createContext(void 0),m=e=>{let t=d.useContext(p);if(e)return e;if(!t)throw Error(`No QueryClient set, use QueryClientProvider to set one`);return t},h=({client:e,children:t})=>(d.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),(0,f.jsx)(p.Provider,{value:e,children:t})),g={setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:e=>clearTimeout(e),setInterval:(e,t)=>setInterval(e,t),clearInterval:e=>clearInterval(e)},_=new class{#e=g;setTimeoutProvider(e){this.#e=e}setTimeout(e,t){return this.#e.setTimeout(e,t)}clearTimeout(e){this.#e.clearTimeout(e)}setInterval(e,t){return this.#e.setInterval(e,t)}clearInterval(e){this.#e.clearInterval(e)}};function v(e){setTimeout(e,0)}var y=typeof window>`u`||`Deno`in globalThis;function b(){}function ee(e,t){return typeof e==`function`?e(t):e}function x(e){return typeof e==`number`&&e>=0&&e!==1/0}function S(e,t){return Math.max(e+(t||0)-Date.now(),0)}function C(e,t){return typeof e==`function`?e(t):e}function w(e,t){return typeof e==`function`?e(t):e}function te(e,t){let{type:n=`all`,exact:r,fetchStatus:i,predicate:a,queryKey:o,stale:s}=e;if(o){if(r){if(t.queryHash!==T(o,t.options))return!1}else if(!D(t.queryKey,o))return!1}if(n!==`all`){let e=t.isActive();if(n===`active`&&!e||n===`inactive`&&e)return!1}return!(typeof s==`boolean`&&t.isStale()!==s||i&&i!==t.state.fetchStatus||a&&!a(t))}function ne(e,t){let{exact:n,status:r,predicate:i,mutationKey:a}=e;if(a){if(!t.options.mutationKey)return!1;if(n){if(E(t.options.mutationKey)!==E(a))return!1}else if(!D(t.options.mutationKey,a))return!1}return!(r&&t.state.status!==r||i&&!i(t))}function T(e,t){return(t?.queryKeyHashFn||E)(e)}function E(e){return JSON.stringify(e,(e,t)=>j(t)?Object.keys(t).sort().reduce((e,n)=>(e[n]=t[n],e),{}):t)}function D(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(e&&t&&typeof e==`object`&&typeof t==`object`){if(Array.isArray(e)&&Array.isArray(t)){for(let n=0;n<t.length;n++)if(!D(e[n],t[n]))return!1;return!0}let n=Object.keys(t);for(let r of n)if(!D(e[r],t[r]))return!1;return!0}return!1}var re=Object.prototype.hasOwnProperty;function O(e,t,n=0){if(e===t)return e;if(n>500)return t;let r=A(e)&&A(t);if(!r&&!(j(e)&&j(t)))return t;let i=(r?e:Object.keys(e)).length,a=r?t:Object.keys(t),o=a.length,s=r?Array(o):{},c=0;for(let l=0;l<o;l++){let o=r?l:a[l],u=e[o],d=t[o];if(u===d){s[o]=u,(r?l<i:re.call(e,o))&&c++;continue}if(u===null||d===null||typeof u!=`object`||typeof d!=`object`){s[o]=d;continue}let f=O(u,d,n+1);s[o]=f,f===u&&c++}return i===o&&c===i?e:s}function k(e,t){if(!t||Object.keys(e).length!==Object.keys(t).length)return!1;for(let n in e)if(e[n]!==t[n])return!1;return!0}function A(e){return Array.isArray(e)&&e.length===Object.keys(e).length}function j(e){if(!M(e))return!1;let t=e.constructor;if(t===void 0)return!0;let n=t.prototype;return!(!M(n)||!n.hasOwnProperty(`isPrototypeOf`)||Object.getPrototypeOf(e)!==Object.prototype)}function M(e){return Object.prototype.toString.call(e)===`[object Object]`}function ie(e){return new Promise(t=>{_.setTimeout(t,e)})}function N(e,t,n){return typeof n.structuralSharing==`function`?n.structuralSharing(e,t):n.structuralSharing===!1?t:O(e,t)}function ae(e){return e}function oe(e,t,n=0){let r=[...e,t];return n&&r.length>n?r.slice(1):r}function se(e,t,n=0){let r=[t,...e];return n&&r.length>n?r.slice(0,-1):r}var P=Symbol();function ce(e,t){return!e.queryFn&&t?.initialPromise?()=>t.initialPromise:!e.queryFn||e.queryFn===P?()=>Promise.reject(Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}function F(e,t){return typeof e==`function`?e(...t):!!e}function le(e,t,n){let r=!1,i;return Object.defineProperty(e,"signal",{enumerable:!0,get:()=>(i??=t(),r?i:(r=!0,i.aborted?n():i.addEventListener(`abort`,n,{once:!0}),i))}),e}var I=(()=>{let e=()=>y;return{isServer(){return e()},setIsServer(t){e=t}}})(),L=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},R=new class extends L{#e;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<`u`&&window.addEventListener){let t=()=>e();return window.addEventListener(`visibilitychange`,t,!1),()=>{window.removeEventListener(`visibilitychange`,t)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(e=>{typeof e==`boolean`?this.setFocused(e):this.onFocus()})}setFocused(e){this.#e!==e&&(this.#e=e,this.onFocus())}onFocus(){let e=this.isFocused();this.listeners.forEach(t=>{t(e)})}isFocused(){return typeof this.#e==`boolean`?this.#e:globalThis.document?.visibilityState!==`hidden`}},ue=v;function de(){let e=[],t=0,n=e=>{e()},r=e=>{e()},i=ue,a=r=>{t?e.push(r):i(()=>{n(r)})},o=()=>{let t=e;e=[],t.length&&i(()=>{r(()=>{t.forEach(e=>{n(e)})})})};return{batch:e=>{let n;t++;try{n=e()}finally{t--,t||o()}return n},batchCalls:e=>(...t)=>{a(()=>{e(...t)})},schedule:a,setNotifyFunction:e=>{n=e},setBatchNotifyFunction:e=>{r=e},setScheduler:e=>{i=e}}}var z=de(),B=new class extends L{#e=!0;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<`u`&&window.addEventListener){let t=()=>e(!0),n=()=>e(!1);return window.addEventListener(`online`,t,!1),window.addEventListener(`offline`,n,!1),()=>{window.removeEventListener(`online`,t),window.removeEventListener(`offline`,n)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(this.setOnline.bind(this))}setOnline(e){this.#e!==e&&(this.#e=e,this.listeners.forEach(t=>{t(e)}))}isOnline(){return this.#e}};function fe(e){return Math.min(1e3*2**e,3e4)}function V(e){return(e??`online`)!==`online`||B.isOnline()}var H=class extends Error{constructor(e){super(`CancelledError`),this.revert=e?.revert,this.silent=e?.silent}};function U(e){let t=!1,n=0,r,i=`pending`,a,o,s=new Promise((e,t)=>{a=e,o=t});s.catch(b);let c=()=>i!==`pending`,l=t=>{if(!c()){let n=new H(t);h(n),e.onCancel?.(n)}},u=()=>{t=!0},d=()=>{t=!1},f=()=>R.isFocused()&&(e.networkMode===`always`||B.isOnline())&&e.canRun(),p=()=>V(e.networkMode)&&e.canRun(),m=e=>{c()||(r?.(),i=`resolved`,a(e))},h=e=>{c()||(r?.(),i=`rejected`,o(e))},g=()=>new Promise(t=>{r=e=>{(c()||f())&&t(e)},e.onPause?.()}).then(()=>{r=void 0,c()||e.onContinue?.()}),_=()=>{if(c())return;let r,i=n===0?e.initialPromise:void 0;try{r=i??e.fn()}catch(e){r=Promise.reject(e)}Promise.resolve(r).then(m).catch(r=>{if(c())return;let i=e.retry??(I.isServer()?0:3),a=e.retryDelay??fe,o=typeof a==`function`?a(n,r):a,s=i===!0||typeof i==`number`&&n<i||typeof i==`function`&&i(n,r);if(t||!s){h(r);return}n++,e.onFail?.(n,r),ie(o).then(()=>f()?void 0:g()).then(()=>{t?h(r):_()})})};return{promise:s,status:()=>i,cancel:l,continue:()=>(r?.(),s),cancelRetry:u,continueRetry:d,canStart:p,start:()=>(p()?_():g().then(_),s)}}var W=class{#e;destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),x(this.gcTime)&&(this.#e=_.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(I.isServer()?1/0:3e5))}clearGcTimeout(){this.#e!==void 0&&(_.clearTimeout(this.#e),this.#e=void 0)}};function pe(e){return{onFetch:(t,n)=>{let r=t.options,i=t.fetchOptions?.meta?.fetchMore?.direction,a=t.state.data?.pages||[],o=t.state.data?.pageParams||[],s={pages:[],pageParams:[]},c=0,l=async()=>{let n=!1,l=e=>{le(e,()=>t.signal,()=>n=!0)},u=ce(t.options,t.fetchOptions),d=async(e,r,i)=>{if(n)return Promise.reject(t.signal.reason);if(r==null&&e.pages.length)return Promise.resolve(e);let a=(()=>{let e={client:t.client,queryKey:t.queryKey,pageParam:r,direction:i?`backward`:`forward`,meta:t.options.meta};return l(e),e})(),o=await u(a),{maxPages:s}=t.options,c=i?se:oe;return{pages:c(e.pages,o,s),pageParams:c(e.pageParams,r,s)}};if(i&&a.length){let e=i===`backward`,t=e?me:G,n={pages:a,pageParams:o};s=await d(n,t(r,n),e)}else{let t=e??a.length;do{let e=c===0?o[0]??r.initialPageParam:G(r,s);if(c>0&&e==null)break;s=await d(s,e),c++}while(c<t)}return s};t.fetchFn=t.options.persister?()=>t.options.persister?.(l,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},n):l}}}function G(e,{pages:t,pageParams:n}){let r=t.length-1;return t.length>0?e.getNextPageParam(t[r],t,n[r],n):void 0}function me(e,{pages:t,pageParams:n}){return t.length>0?e.getPreviousPageParam?.(t[0],t,n[0],n):void 0}var he=class extends W{#e;#t;#n;#r;#i;#a;#o;#s;constructor(e){super(),this.#s=!1,this.#o=e.defaultOptions,this.setOptions(e.options),this.observers=[],this.#i=e.client,this.#r=this.#i.getQueryCache(),this.queryKey=e.queryKey,this.queryHash=e.queryHash,this.#t=J(this.options),this.state=e.state??this.#t,this.scheduleGc()}get meta(){return this.options.meta}get queryType(){return this.#e}get promise(){return this.#a?.promise}setOptions(e){if(this.options={...this.#o,...e},e?._type&&(this.#e=e._type),this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){let e=J(this.options);e.data!==void 0&&(this.setState(q(e.data,e.dataUpdatedAt)),this.#t=e)}}optionalRemove(){!this.observers.length&&this.state.fetchStatus===`idle`&&this.#r.remove(this)}setData(e,t){let n=N(this.state.data,e,this.options);return this.#l({data:n,type:`success`,dataUpdatedAt:t?.updatedAt,manual:t?.manual}),n}setState(e){this.#l({type:`setState`,state:e})}cancel(e){let t=this.#a?.promise;return this.#a?.cancel(e),t?t.then(b).catch(b):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}get resetState(){return this.#t}reset(){this.destroy(),this.setState(this.resetState)}isActive(){return this.observers.some(e=>w(e.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===P||!this.isFetched()}isFetched(){return this.state.dataUpdateCount+this.state.errorUpdateCount>0}isStatic(){return this.getObserversCount()>0&&this.observers.some(e=>C(e.options.staleTime,this)===`static`)}isStale(){return this.getObserversCount()>0?this.observers.some(e=>e.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(e=0){return this.state.data===void 0?!0:e===`static`?!1:this.state.isInvalidated?!0:!S(this.state.dataUpdatedAt,e)}onFocus(){this.observers.find(e=>e.shouldFetchOnWindowFocus())?.refetch({cancelRefetch:!1}),this.#a?.continue()}onOnline(){this.observers.find(e=>e.shouldFetchOnReconnect())?.refetch({cancelRefetch:!1}),this.#a?.continue()}addObserver(e){this.observers.includes(e)||(this.observers.push(e),this.clearGcTimeout(),this.#r.notify({type:`observerAdded`,query:this,observer:e}))}removeObserver(e){let t=this.observers.indexOf(e);t!==-1&&(this.observers.splice(t,1),this.observers.length||(this.#a&&(this.#s||this.#c()?this.#a.cancel({revert:!0}):this.#a.cancelRetry()),this.scheduleGc()),this.#r.notify({type:`observerRemoved`,query:this,observer:e}))}getObserversCount(){return this.observers.length}#c(){return this.state.fetchStatus===`paused`&&this.state.status===`pending`}invalidate(){this.state.isInvalidated||this.#l({type:`invalidate`})}async fetch(e,t){if(this.state.fetchStatus!==`idle`&&this.#a?.status()!==`rejected`){if(this.state.data!==void 0&&t?.cancelRefetch)this.cancel({silent:!0});else if(this.#a)return this.#a.continueRetry(),this.#a.promise}if(e&&this.setOptions(e),!this.options.queryFn){let e=this.observers.find(e=>e.options.queryFn);e&&this.setOptions(e.options)}let n=new AbortController,r=e=>{Object.defineProperty(e,"signal",{enumerable:!0,get:()=>(this.#s=!0,n.signal)})},i=()=>{let e=ce(this.options,t),n=(()=>{let e={client:this.#i,queryKey:this.queryKey,meta:this.meta};return r(e),e})();return this.#s=!1,this.options.persister?this.options.persister(e,n,this):e(n)},a=(()=>{let e={fetchOptions:t,options:this.options,queryKey:this.queryKey,client:this.#i,state:this.state,fetchFn:i};return r(e),e})();(this.#e===`infinite`?pe(this.options.pages):this.options.behavior)?.onFetch(a,this),this.#n=this.state,(this.state.fetchStatus===`idle`||this.state.fetchMeta!==a.fetchOptions?.meta)&&this.#l({type:`fetch`,meta:a.fetchOptions?.meta});let o=this.#a=U({initialPromise:t?.initialPromise,fn:a.fetchFn,onCancel:e=>{e instanceof H&&e.revert&&this.setState({...this.#n,fetchStatus:`idle`}),n.abort()},onFail:(e,t)=>{this.#l({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#l({type:`pause`})},onContinue:()=>{this.#l({type:`continue`})},retry:a.options.retry,retryDelay:a.options.retryDelay,networkMode:a.options.networkMode,canRun:()=>!0});try{let e=await o.start();if(e===void 0)throw Error(`${this.queryHash} data is undefined`);return this.setData(e),this.#r.config.onSuccess?.(e,this),this.#r.config.onSettled?.(e,this.state.error,this),e}catch(e){if(e instanceof H){if(e.silent)return this.#a.promise;if(e.revert){if(this.state.data===void 0)throw e;return this.state.data}}throw this.#l({type:`error`,error:e}),this.#r.config.onError?.(e,this),this.#r.config.onSettled?.(this.state.data,e,this),e}finally{this.#a===o&&(this.#a=void 0),this.scheduleGc()}}#l(e){let t=t=>{switch(e.type){case`failed`:return{...t,fetchFailureCount:e.failureCount,fetchFailureReason:e.error};case`pause`:return{...t,fetchStatus:`paused`};case`continue`:return{...t,fetchStatus:`fetching`};case`fetch`:return{...t,...K(t.data,this.options),fetchMeta:e.meta??null};case`success`:let n={...t,...q(e.data,e.dataUpdatedAt),dataUpdateCount:t.dataUpdateCount+1,...!e.manual&&{fetchStatus:`idle`,fetchFailureCount:0,fetchFailureReason:null}};return this.#n=e.manual?n:void 0,n;case`error`:let r=e.error;return{...t,error:r,errorUpdateCount:t.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:t.fetchFailureCount+1,fetchFailureReason:r,fetchStatus:`idle`,status:`error`,isInvalidated:!0};case`invalidate`:return{...t,isInvalidated:!0};case`setState`:return{...t,...e.state}}};this.state=t(this.state),z.batch(()=>{this.observers.slice().forEach(e=>{e.onQueryUpdate()}),this.#r.notify({query:this,type:`updated`,action:e})})}};function K(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:V(t.networkMode)?`fetching`:`paused`,...e===void 0&&{error:null,status:`pending`}}}function q(e,t){return{data:e,dataUpdatedAt:t??Date.now(),error:null,isInvalidated:!1,status:`success`}}function J(e){let t=typeof e.initialData==`function`?e.initialData():e.initialData,n=t!==void 0,r=n?typeof e.initialDataUpdatedAt==`function`?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:n?r??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:n?`success`:`pending`,fetchStatus:`idle`}}var ge=class extends L{#e;#t=void 0;#n=void 0;#r=void 0;#i;#a;#o;#s;#c;#l;#u;#d;#f;#p=new Set;constructor(e,t){super(),this.options=t,this.#e=e,this.#o=null,this.bindMethods(),this.setOptions(t)}bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(this.#t.addObserver(this),Y(this.#t,this.options)?this.#m():this.updateResult(),this.#v())}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return X(this.#t,this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return X(this.#t,this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,this.#y(),this.#b(),this.#t.removeObserver(this)}setOptions(e){let t=this.options,n=this.#t;if(this.options=this.#e.defaultQueryOptions(e),this.options.enabled!==void 0&&typeof this.options.enabled!=`boolean`&&typeof this.options.enabled!=`function`&&typeof w(this.options.enabled,this.#t)!=`boolean`)throw Error(`Expected enabled to be a boolean or a callback that returns a boolean`);this.#x(),this.#t.setOptions(this.options),t._defaulted&&!k(this.options,t)&&this.#e.getQueryCache().notify({type:`observerOptionsUpdated`,query:this.#t,observer:this});let r=this.hasListeners();r&&ve(this.#t,n,this.options,t)&&this.#m(),this.updateResult(),r&&(this.#t!==n||w(this.options.enabled,this.#t)!==w(t.enabled,this.#t)||C(this.options.staleTime,this.#t)!==C(t.staleTime,this.#t))&&this.#h();let i=this.#g();r&&(this.#t!==n||w(this.options.enabled,this.#t)!==w(t.enabled,this.#t)||i!==this.#f)&&this.#_(i)}getOptimisticResult(e){let t=this.#e.getQueryCache().build(this.#e,e),n=this.createResult(t,e);return ye(this,n)&&(this.#r=n,this.#a=this.options,this.#i=this.#t.state),n}getCurrentResult(){return this.#r}trackResult(e,t){return new Proxy(e,{get:(e,n)=>(this.trackProp(n),t?.(n),Reflect.get(e,n))})}trackProp(e){this.#p.add(e)}getCurrentQuery(){return this.#t}refetch({...e}={}){return this.fetch({...e})}fetchOptimistic(e){let t=this.#e.defaultQueryOptions(e),n=this.#e.getQueryCache().build(this.#e,t),r=()=>{},i,a=new Promise(e=>{i=e,r=this.#e.getQueryCache().subscribe(i=>{i.type===`updated`&&i.query.queryHash===n.queryHash&&n.state.data!==void 0&&(r(),e(this.createResult(n,t)))})});return Promise.race([n.fetch().then(()=>{let e=this.createResult(n,t);return i?.(e),e}).finally(()=>{r()}),a])}fetch(e){return this.#m({...e,cancelRefetch:e.cancelRefetch??!0}).then(()=>(this.updateResult(),this.#r))}#m(e){this.#x();let t=this.#t.fetch(this.options,e);return e?.throwOnError||(t=t.catch(b)),t}#h(){this.#y();let e=C(this.options.staleTime,this.#t);if(I.isServer()||this.#r.isStale||!x(e))return;let t=S(this.#r.dataUpdatedAt,e)+1;this.#u=_.setTimeout(()=>{this.#r.isStale||this.updateResult()},t)}#g(){return(typeof this.options.refetchInterval==`function`?this.options.refetchInterval(this.#t):this.options.refetchInterval)??!1}#_(e){this.#b(),this.#f=e,!(I.isServer()||w(this.options.enabled,this.#t)===!1||!x(this.#f)||this.#f===0)&&(this.#d=_.setInterval(()=>{(this.options.refetchIntervalInBackground||R.isFocused())&&this.#m()},this.#f))}#v(){this.#h(),this.#_(this.#g())}#y(){this.#u!==void 0&&(_.clearTimeout(this.#u),this.#u=void 0)}#b(){this.#d!==void 0&&(_.clearInterval(this.#d),this.#d=void 0)}createResult(e,t){let n=this.#t,r=this.options,i=this.#r,a=this.#i,o=this.#a,s=e===n?this.#n:e.state,{state:c}=e,l={...c},u=!1,d;if(t._optimisticResults){let i=this.hasListeners(),a=!i&&Y(e,t),o=i&&ve(e,n,t,r);(a||o)&&(l={...l,...K(c.data,e.options)}),t._optimisticResults===`isRestoring`&&(l.fetchStatus=`idle`)}let{error:f,errorUpdatedAt:p,status:m}=l;d=l.data;let h=!1;if(t.placeholderData!==void 0&&d===void 0&&m===`pending`){let e;i?.isPlaceholderData&&t.placeholderData===o?.placeholderData?(e=i.data,h=!0):e=typeof t.placeholderData==`function`?t.placeholderData(this.#l?.state.data,this.#l):t.placeholderData,e!==void 0&&(m=`success`,d=N(i?.data,e,t),u=!0)}if(t.select&&d!==void 0&&!h){if(i&&d===a?.data&&t.select===this.#s)d=this.#c;else try{this.#s=t.select,d=t.select(d),d=N(i?.data,d,t),this.#c=d,this.#o=null}catch(e){this.#o=e}}else d===void 0&&(this.#o=null);this.#o&&(f=this.#o,d=this.#c,p=Date.now(),m=`error`,u=!1);let g=l.fetchStatus===`fetching`,_=m===`pending`,v=m===`error`,y=_&&g,b=d!==void 0;return{status:m,fetchStatus:l.fetchStatus,isPending:_,isSuccess:m===`success`,isError:v,isInitialLoading:y,isLoading:y,data:d,dataUpdatedAt:l.dataUpdatedAt,error:f,errorUpdatedAt:p,failureCount:l.fetchFailureCount,failureReason:l.fetchFailureReason,errorUpdateCount:l.errorUpdateCount,isFetched:e.isFetched(),isFetchedAfterMount:l.dataUpdateCount>s.dataUpdateCount||l.errorUpdateCount>s.errorUpdateCount,isFetching:g,isRefetching:g&&!_,isLoadingError:v&&!b,isPaused:l.fetchStatus===`paused`,isPlaceholderData:u,isRefetchError:v&&b,isStale:Z(e,t),refetch:this.refetch,isEnabled:w(t.enabled,e)!==!1}}updateResult(){let e=this.#r,t=this.createResult(this.#t,this.options);this.#i=this.#t.state,this.#a=this.options,this.#i.data!==void 0&&(this.#l=this.#t),!k(t,e)&&(this.#r=t,this.#S({listeners:(()=>{if(!e)return!0;let{notifyOnChangeProps:t}=this.options,n=typeof t==`function`?t():t;if(n===`all`||!n&&!this.#p.size)return!0;let r=new Set(n??this.#p);return this.options.throwOnError&&r.add(`error`),Object.keys(this.#r).some(t=>{let n=t;return this.#r[n]!==e[n]&&r.has(n)})})()}))}#x(){let e=this.#e.getQueryCache().build(this.#e,this.options);if(e===this.#t)return;let t=this.#t;this.#t=e,this.#n=e.state,this.hasListeners()&&(t?.removeObserver(this),e.addObserver(this))}onQueryUpdate(){this.updateResult(),this.hasListeners()&&this.#v()}#S(e){z.batch(()=>{e.listeners&&this.listeners.forEach(e=>{e(this.#r)}),this.#e.getQueryCache().notify({query:this.#t,type:`observerResultsUpdated`})})}};function _e(e,t){return w(t.enabled,e)!==!1&&e.state.data===void 0&&(e.state.status!==`error`||w(t.retryOnMount,e)!==!1)}function Y(e,t){return _e(e,t)||e.state.data!==void 0&&X(e,t,t.refetchOnMount)}function X(e,t,n){if(w(t.enabled,e)!==!1&&C(t.staleTime,e)!==`static`){let r=typeof n==`function`?n(e):n;return r===`always`||r!==!1&&Z(e,t)}return!1}function ve(e,t,n,r){return(e!==t||w(r.enabled,e)===!1)&&(!n.suspense||e.state.status!==`error`)&&Z(e,n)}function Z(e,t){return w(t.enabled,e)!==!1&&e.isStaleByTime(C(t.staleTime,e))}function ye(e,t){return!k(e.getCurrentResult(),t)}var be=d.createContext(!1),xe=()=>d.useContext(be);be.Provider;function Se(){let e=!1;return{clearReset:()=>{e=!1},reset:()=>{e=!0},isReset:()=>e}}var Ce=d.createContext(Se()),we=()=>d.useContext(Ce),Te=(e,t,n)=>{let r=n?.state.error&&typeof e.throwOnError==`function`?F(e.throwOnError,[n.state.error,n]):e.throwOnError;(e.suspense||r)&&(t.isReset()||(e.retryOnMount=!1))},Ee=e=>{d.useEffect(()=>{e.clearReset()},[e])},De=({result:e,errorResetBoundary:t,throwOnError:n,query:r,suspense:i})=>e.isError&&!t.isReset()&&!e.isFetching&&r&&(i&&e.data===void 0||F(n,[e.error,r])),Oe=e=>{if(e.suspense){let t=1e3,n=e=>e===`static`?e:Math.max(e??t,t),r=e.staleTime;e.staleTime=typeof r==`function`?(...e)=>n(r(...e)):n(r),typeof e.gcTime==`number`&&(e.gcTime=Math.max(e.gcTime,t))}},ke=(e,t)=>e?.suspense&&t.isPending,Ae=(e,t,n)=>t.fetchOptimistic(e).catch(()=>{n.clearReset()});function je(e,t,n){let r=xe(),i=we(),a=m(n),o=a.defaultQueryOptions(e),s=a.getQueryCache().get(o.queryHash),c=e.subscribed!==!1;o._optimisticResults=r?`isRestoring`:c?`optimistic`:void 0,Oe(o),Te(o,i,s),Ee(i);let[l]=d.useState(()=>new t(a,o)),u=l.getOptimisticResult(o),f=!r&&c;if(d.useSyncExternalStore(d.useCallback(e=>{let t=f?l.subscribe(z.batchCalls(e)):b;return l.updateResult(),t},[l,f]),()=>l.getCurrentResult(),()=>l.getCurrentResult()),d.useEffect(()=>{l.setOptions(o)},[o,l]),ke(o,u))throw Ae(o,l,i);if(De({result:u,errorResetBoundary:i,throwOnError:o.throwOnError,query:s,suspense:o.suspense}))throw u.error;return o.notifyOnChangeProps?u:l.trackResult(u)}function Me(e,t){return je(e,ge,t)}function Ne(e){return e}function Q(e){return{days:e.days,from:e.from,to:e.to}}function Pe(e){return{...e.project?{project:e.project}:{},...e.agent?{agent:e.agent}:{}}}var Fe={bookmarks:[`bookmarks`],config:[`config`],dashboards:[`dashboard`],dashboard:(e,t)=>[`dashboard`,Q(e),Pe(t)],agentCatalogs:[`agent-catalog`],agentCatalog:e=>[`agent-catalog`,Q(e)],projects:[`projects`],projectWindow:e=>[`projects`,Q(e)],projectPage:(e,t)=>[`projects`,Q(e),`page`,t??null],projectDetail:(e,t)=>[`projects`,Q(e),`detail`,t],search:(e,t)=>[`search`,e,t],searches:[`search`],sessionDetails:[`session-detail`],sessionDetail:(e,t)=>[`session-detail`,e,t],sessionProjections:[`session-projection`],sessionProjection:e=>[`session-projection`,Q(e)]},Ie=2e3;function Le(e,t){return Ne({queryKey:Fe.dashboard(e,t),staleTime:Ie,queryFn:async({signal:n})=>{try{return await u(e,t,{signal:n})}catch(e){throw n.aborted||console.error(`Failed to load dashboard:`,e),e}}})}var Re=(0,d.createContext)(`light`),ze=`(prefers-color-scheme: dark)`;function Be(){return typeof window>`u`||typeof window.matchMedia!=`function`?!1:window.matchMedia(ze).matches}function Ve(e){let[t,n]=(0,d.useState)(Be);(0,d.useEffect)(()=>{if(typeof window>`u`||typeof window.matchMedia!=`function`)return;let e=window.matchMedia(ze),t=e=>n(e.matches);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]);let r=e===`system`?t?`dark`:`light`:e;return(0,d.useEffect)(()=>{document.documentElement.classList.toggle(`dark`,r===`dark`)},[r]),r}function He({title:e,message:t,onRetry:n,className:r=``}){return(0,f.jsxs)(`div`,{role:`alert`,className:`rounded-sm border border-[var(--console-error-border)] bg-[var(--console-error-bg)] p-4 text-[var(--console-error)] ${r}`,children:[(0,f.jsx)(`p`,{className:`text-sm font-medium`,children:e}),(0,f.jsx)(`p`,{className:`console-mono mt-1 break-words text-[11px]`,children:t}),(0,f.jsx)(`button`,{type:`button`,onClick:n,className:`console-mono mt-3 rounded-sm border border-[var(--console-error-border)] bg-[var(--console-surface)] px-2.5 py-1 text-[11px] font-semibold motion-hover hover:bg-[var(--console-error-bg)] focus-visible:ring-2 focus-visible:ring-[var(--brand)] focus-visible:outline-none`,children:`Retry`})]})}function Ue({className:e,children:t,...n}){return(0,f.jsx)(`section`,{className:a(`rounded-lg border border-[var(--console-border)] bg-[var(--console-surface)] shadow-[var(--shadow-raised)]`,e),...n,children:t})}function We({title:e,meta:t,action:n}){return(0,f.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,f.jsx)(`h3`,{className:`console-display min-w-0 truncate text-[15px] font-semibold text-[var(--console-text)]`,children:e}),(0,f.jsxs)(`div`,{className:`ml-auto flex shrink-0 items-center gap-3`,children:[t===void 0?null:(0,f.jsx)(`span`,{className:`console-mono text-[10.5px] text-[var(--console-muted)]`,children:t}),n]})]})}function Ge(e){let t=e.sourceFailureCount;return[t==null?null:`${t} source${t===1?``:`s`} failed`,e.sourceFailureSummary].filter(e=>e!=null).join(` · `)}function Ke(e){return(e.sourceFailureCount??0)>0||e.sourceFailureSummary!=null}function $(e){let t=new Date(e);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,`0`)}-${String(t.getDate()).padStart(2,`0`)}`}function qe(e){if(!e)return null;let{from:t,to:n,days:r}=e.window;if(r===0||t==null)return`All time`;let i=$(t),a=$(n??Date.now());return r?`Last ${r}d · ${i} → ${a}`:`${i} → ${a}`}function Je(e,t,n){return t?e?`Searching for "${e}"`:`Loading recent sessions`:e?`${n} matches for "${e}"`:`${n} recent sessions`}function Ye(e){if(!e)return null;if(e.backfill?.active){let t=e.backfill.currentAgent,n=e.backfill.pendingAgents.length,r=e.backfill.progress,i=(r?.phase==null||r.phase===`scanning`||r.phase===`finalizing`)&&r?.total&&r.processed!=null?` · ${r.processed}/${r.total}`:``,a=r?.phase===`publish-queued`?`Full-history publication queued`:r?.phase===`committing`?`Committing full-history publication`:r?.phase===`indexing`?`Writing full-history search index`:r?.phase===`publishing`?`Preparing full-history publication`:r?.phase===`finalizing`?`Finalizing full-history metadata`:`Scanning full session history`;return t?`${a} · ${t}${i}${n>0?` · ${n} history scan queued`:``}`:`${a}${i}`}if(e.backfill?.failedAgents.length)return`Full-history refresh failed · ${e.backfill.failedAgents.join(`, `)}`;let t=Object.values(e.agentStatuses??{}).find(e=>e.status===`failed`);if(t)return`Session refresh failed · ${t.agentName}${t.error?` · ${t.error}`:``}`;if(e.active){let t=e.completedAgents.length,n=e.totalAgents,r=e.scanningAgents[0],i=r?e.agentStatuses[r]:null,a=(i?.status===`scanning`||i?.status===`finalizing`)&&i.total&&i.processed!=null?` · ${i.processed}/${i.total}`:``,o=n>0?r?` · ${r}${a} · ${t}/${n} agents ready`:` · ${t}/${n} agents ready`:``,s=i?.status===`publish-queued`?`Session publication queued`:i?.status===`finalizing`?`Finalizing session metadata`:i?.status===`publishing`||i?.status===`indexing`||e.phase===`publishing`||e.phase===`indexing`?`Publishing session updates`:`Checking for new or changed sessions`;return e.phase===`initializing`?`Initializing recent sessions${o}`:e.phase===`publishing`||e.phase===`indexing`?`${s}${o}`:n>0?r?`${s} · ${r}${a} · ${t}/${n} agents ready`:`Checking for new or changed sessions · ${t}/${n} agents ready`:`Checking for new or changed sessions`}let n=Object.entries(e.backfill?.partialAgents??{}).find(([,e])=>e.completeness===`partial`&&Ke(e));if(n){let[e,t]=n,r=Ge(t);return`Full-history refresh completed with partial data · ${e}${r?` · ${r}`:``}`}let r=Object.values(e.agentStatuses??{}).find(e=>e.status===`complete`&&e.completeness===`partial`&&Ke(e));if(r){let e=Ge(r);return`Session refresh completed with partial data · ${r.agentName}${e?` · ${e}`:``}`}if(e.searchIndexMaintenance?.active){let t=e.searchIndexMaintenance.currentAgent,n=e.searchIndexMaintenance.remaining;return`Updating search index in background${t?` · ${t}`:``}${n==null?``:` · ${n} remaining`}`}return e.searchIndexMaintenance?.failedAgents.length?`Background search index maintenance paused · ${e.searchIndexMaintenance.failedAgents.join(`, `)}`:null}function Xe({open:e,onOpenChange:t,window:n,customFrom:r,customTo:i,onSelectCustom:a}){let o=r??(n?.from==null?``:$(n.from)),s=i??(n?.to==null?null:$(n.to));return(0,f.jsx)(l,{open:e,onOpenChange:t,children:e?(0,f.jsx)(Ze,{initialFrom:o,initialTo:s,onOpenChange:t,onSelectCustom:a}):null})}function Ze({initialFrom:e,initialTo:t,onOpenChange:n,onSelectCustom:a}){let[l,u]=(0,d.useState)(e),[p,m]=(0,d.useState)(()=>t??$(Date.now()));return(0,f.jsxs)(c,{children:[(0,f.jsx)(i,{className:`motion-backdrop fixed inset-0 z-50 bg-[var(--scrim)]`}),(0,f.jsxs)(s,{className:`motion-modal fixed top-1/2 left-1/2 z-50 w-[calc(100%-2rem)] max-w-sm -translate-x-1/2 -translate-y-1/2 rounded-lg border border-[var(--console-border)] bg-[var(--console-surface)] p-5 shadow-[var(--shadow-overlay)] outline-none`,children:[(0,f.jsx)(o,{className:`console-mono text-sm font-semibold text-[var(--console-text)]`,children:`Custom time range`}),(0,f.jsx)(`p`,{className:`mt-1 text-xs text-[var(--console-muted)]`,children:`Both dates are included.`}),(0,f.jsxs)(`div`,{className:`mt-4 grid grid-cols-2 gap-3`,children:[(0,f.jsxs)(`label`,{className:`console-mono text-[11px] uppercase tracking-wide text-[var(--console-muted)]`,children:[`From`,(0,f.jsx)(`input`,{type:`date`,value:l,max:p||void 0,onChange:e=>u(e.target.value),className:`mt-1.5 w-full rounded-sm border border-[var(--console-border-strong)] bg-[var(--console-surface)] px-2 py-2 text-xs normal-case tracking-normal text-[var(--console-text)] outline-none focus:border-[var(--brand)] focus:ring-2 focus:ring-[var(--brand)]/25`})]}),(0,f.jsxs)(`label`,{className:`console-mono text-[11px] uppercase tracking-wide text-[var(--console-muted)]`,children:[`To`,(0,f.jsx)(`input`,{type:`date`,value:p,min:l||void 0,onChange:e=>m(e.target.value),className:`mt-1.5 w-full rounded-sm border border-[var(--console-border-strong)] bg-[var(--console-surface)] px-2 py-2 text-xs normal-case tracking-normal text-[var(--console-text)] outline-none focus:border-[var(--brand)] focus:ring-2 focus:ring-[var(--brand)]/25`})]})]}),(0,f.jsxs)(`div`,{className:`mt-5 flex justify-end gap-2`,children:[(0,f.jsx)(r,{className:`rounded-sm border border-[var(--console-border)] px-3 py-1.5 text-xs text-[var(--console-text)] hover:bg-[var(--console-surface-muted)]`,children:`Cancel`}),(0,f.jsx)(`button`,{type:`button`,disabled:!l||!p||l>p,onClick:()=>{a(l,p),n(!1)},className:`rounded-sm border border-[var(--console-accent)] bg-[var(--console-accent)] px-3 py-1.5 text-xs text-[var(--console-accent-fg)] hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-40`,children:`Apply range`})]})]})]})}export{O as A,E as C,te as D,ne as E,h as F,m as I,k as M,F as N,b as O,P,ee as S,ae as T,U as _,Ue as a,R as b,Re as c,Le as d,Fe as f,W as g,he as h,qe as i,C as j,D as k,Ve as l,Me as m,Ye as n,We as o,Ne as p,Je as r,He as s,Xe as t,Ie as u,B as v,T as w,L as x,z as y};
@@ -0,0 +1 @@
1
+ import{a as e,n as t,t as n}from"./jsx-runtime-B-hcVAMW.js";import{x as r}from"./contract-BS78VBCV.js";import{H as i}from"./index-H2cT-6c6.js";var a=e(t(),1);function o(e,t){return t===0||e-t>=15.666666666666668}function s(e,t,n){return!e&&t<=.12?n+1:0}function c(e,t){return e?0:t+1}function l(){let e=typeof document>`u`?void 0:document.fonts;return e?e.ready.then(()=>void 0):Promise.resolve()}function u(e,t,n){return e>=2&&(t>=8||n>=300)}function d(e,t){return!e||Math.abs(e.receiptWidth-t.receiptWidth)>.5||Math.abs(e.receiptHeight-t.receiptHeight)>.5||Math.abs(e.startX-t.startX)>.5||Math.abs(e.startY-t.startY)>.5}var f=18,p=42,m=5,h=270,g=500,_=2,v=.035;function y(e){let t=window.getComputedStyle(e),n=(e,n)=>t.getPropertyValue(e).trim()||n;return{paperTop:n(`--console-surface`,`white`),paperBottom:n(`--console-surface-sunken`,`whitesmoke`),ink:n(`--console-text`,`black`),inkMuted:n(`--console-text-secondary`,`dimgray`),line:n(`--console-border-strong`,`silver`),shadow:n(`--scrim`,`gray`)}}function ee(e){return window.getComputedStyle(e).getPropertyValue(`--font-mono`).trim()||`monospace`}function b(e){return Math.round(e??0).toLocaleString(`en-US`)}function x(e){return`$${(e??0).toFixed(4)}`}function S(e){return new Date(e).toLocaleString(`en-US`,{month:`short`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`})}function C(e){let t=2166136261;for(let n=0;n<e.length;n+=1)t^=e.charCodeAt(n),t=Math.imul(t,16777619);return t>>>0}function w(e){let t=e||1;return()=>(t=Math.imul(t^t>>>15,1|t),t^=t+Math.imul(t^t>>>7,61|t),((t^t>>>14)>>>0)/4294967296)}function T(e,t,n,r,i){let a=t.toUpperCase(),o=n.toUpperCase();e.fillText(a,18,r),e.fillText(o,i-18-e.measureText(o).width,r)}function E(e,t,n){if(e.measureText(t).width<=n)return t;let r=t;for(;r.length>1&&e.measureText(`${r}...`).width>n;)r=r.slice(0,-1);return`${r}...`}function D(e,t,n,r){let i=t.toUpperCase().split(/\s+/).filter(Boolean),a=[],o=``;for(let t of i){let i=o?`${o} ${t}`:t;if(e.measureText(i).width<=n){o=i;continue}if(o?(a.push(o),o=t):(a.push(E(e,t,n)),o=``),a.length===r)break}return a.length<r&&o&&a.push(o),a.length>0&&a.length===r&&(a[a.length-1]=E(e,a[a.length-1]??``,n)),a.slice(0,r)}function te(e,t,n){let r=document.createElement(`canvas`);r.width=h*_,r.height=g*_;let i=r.getContext(`2d`);if(!i)return r;i.scale(_,_);let a=e=>`${e} ${n}`,o=i.createLinearGradient(0,0,h,g);o.addColorStop(0,t.paperTop),o.addColorStop(1,t.paperBottom),i.fillStyle=o,i.fillRect(0,0,h,g);let s=w(C(e.id));i.fillStyle=t.ink;for(let e=0;e<1200;e+=1)i.globalAlpha=v*(.12+s()*.14),i.fillRect(s()*h,s()*g,.7,.7);i.globalAlpha=1,i.fillStyle=t.ink,i.font=a(`700 18px`),i.textAlign=`center`,i.fillText(`CODESESH MART`,h/2,34),i.fillStyle=t.inkMuted,i.font=a(`11px`),i.fillText(E(i,e.subtitle.toUpperCase(),234),h/2,51),i.strokeStyle=t.line,i.lineWidth=1,i.setLineDash([4,4]),i.beginPath(),i.moveTo(18,66),i.lineTo(252,66),i.stroke(),i.setLineDash([]),i.textAlign=`left`,i.fillStyle=t.ink,i.font=a(`11px`),T(i,`Agent`,e.agent,88,h),T(i,`Updated`,S(e.updatedAt),104,h),T(i,`Session`,`#${e.id.slice(0,8)}`,120,h),i.setLineDash([2,3]),i.beginPath(),i.moveTo(18,140),i.lineTo(252,140),i.stroke(),i.setLineDash([]),i.font=a(`700 12px`),i.fillText(`SESSION TOC RECEIPT LIST`,18,163),i.font=a(`11px`);let c=185;for(let t of e.items){let e=b(t.count);i.fillText(E(i,t.label,168),18,c),i.fillText(e,252-i.measureText(e).width,c),c+=17}return i.strokeStyle=t.line,i.lineWidth=1.5,i.beginPath(),i.moveTo(18,c+5),i.lineTo(252,c+5),i.stroke(),c+=26,T(i,`Input tokens`,b(e.inputTokens),c,h),c+=16,T(i,`Output tokens`,b(e.outputTokens),c,h),c+=16,T(i,`Messages`,b(e.messageCount),c,h),c+=22,i.font=a(`700 13px`),T(i,`TOTAL COST`,x(e.totalCost),c,h),i.strokeStyle=t.line,i.setLineDash([4,4]),i.beginPath(),i.moveTo(18,c+18),i.lineTo(252,c+18),i.stroke(),i.setLineDash([]),i.font=a(`10px`),i.textAlign=`center`,i.fillStyle=t.inkMuted,D(i,e.title,234,2).forEach((e,t)=>{i.fillText(e,h/2,c+38+t*13)}),r}function O(e,t){return e*f+t}function k(e){let{receiptWidth:t,receiptHeight:n,startX:r,startY:i}=e,a=t/17,o=n/41,s=[],c=[];for(let e=0;e<p;e+=1)for(let t=0;t<f;t+=1){let n=r+t*a,c=i+e*o;s.push({x:n,y:c,oldX:n,oldY:c,fixedX:e===0?n:null,fixedY:e===0?c:null})}let l=(e,t,n)=>{let r=s[e],i=s[t];!r||!i||c.push({a:e,b:t,length:Math.hypot(i.x-r.x,i.y-r.y),stiffness:n})};for(let e=0;e<p;e+=1)for(let t=0;t<f;t+=1){let n=O(e,t);t<17&&l(n,O(e,t+1),.98),e<41&&l(n,O(e+1,t),.92),e<41&&t<17&&(l(n,O(e+1,t+1),.46),l(O(e+1,t),O(e,t+1),.46)),t<16&&l(n,O(e,t+2),.35),e<40&&l(n,O(e+2,t),.28)}return{particles:s,constraints:c,receiptWidth:t,receiptHeight:n}}function ne(e,t){let n=t.receiptWidth/17;for(let r=0;r<f;r+=1){let i=e[r];i&&(i.fixedX=t.startX+r*n,i.fixedY=t.startY)}}function A(e){for(let t=0;t<f;t+=1){let n=e[t];!n||n.fixedX==null||n.fixedY==null||(n.x=n.fixedX,n.y=n.fixedY,n.oldX=n.fixedX,n.oldY=n.fixedY)}}function re(e,t){let n=e[t.a],r=e[t.b];if(!n||!r)return;let i=r.x-n.x,a=r.y-n.y,o=Math.hypot(i,a);if(o<1e-4)return;let s=(o-t.length)/o*t.stiffness,c=n.fixedX!=null&&n.fixedY!=null,l=r.fixedX!=null&&r.fixedY!=null,u=c?0:l?1:.5,d=l?0:c?1:.5,f=i*s,p=a*s;c||(n.x+=f*u,n.y+=p*u),l||(r.x-=f*d,r.y-=p*d)}function ie(e,t,n,r,i,a){let o=r[O(i,a)],s=r[O(i,a+1)],c=r[O(i+1,a)],l=r[O(i+1,a+1)];if(!o||!s||!c||!l)return;let u=a/17*t.width,d=i/41*t.height,f=t.width/17,p=t.height/41;e.save(),e.beginPath(),e.moveTo(o.x,o.y),e.lineTo(s.x,s.y),e.lineTo(l.x,l.y),e.lineTo(c.x,c.y),e.closePath(),e.clip(),e.transform((s.x-o.x)/f,(s.y-o.y)/f,(c.x-o.x)/p,(c.y-o.y)/p,o.x,o.y),e.drawImage(t,u,d,f+1,p+1,0,0,f+1,p+1),e.restore();let m=Math.atan2(s.y-o.y,s.x-o.x),h=Math.hypot(c.x-o.x,c.y-o.y)/(g/41),_=Math.sin(m)*.08+(h-1)*.16;Math.abs(_)<.01||(e.save(),e.beginPath(),e.moveTo(o.x,o.y),e.lineTo(s.x,s.y),e.lineTo(l.x,l.y),e.lineTo(c.x,c.y),e.closePath(),e.globalAlpha=Math.abs(_),e.fillStyle=_>0?n.paperTop:n.shadow,e.fill(),e.restore())}function ae(e,t,n){let r=null,i=44;for(let a=f;a<e.length;a+=1){let o=e[a];if(!o)continue;let s=Math.hypot(o.x-t,o.y-n);s<i&&(i=s,r=a)}return r}function oe(e){let t=0;for(let n=f;n<e.length;n+=1){let r=e[n];r&&(t=Math.max(t,Math.hypot(r.x-r.oldX,r.y-r.oldY)))}return t}function j({canvas:e,anchor:t,hitSurface:n,payload:r,minWidthQuery:i}){let a=e.getContext(`2d`,{alpha:!0});if(!a)return null;let p=r,_={id:null,x:0,y:0,prevX:0,prevY:0,vx:0,vy:0,grabbedIndex:null},v=null,b=!1,x=0,S=0,C=0,w=k({receiptWidth:h,receiptHeight:g,startX:0,startY:32}),T=performance.now(),E=null,D=0,O=0,j=0,M=0,N=!1,P=!1,F=window.matchMedia(i),I=window.matchMedia(`(prefers-reduced-motion: reduce)`),L=()=>v!=null&&F.matches&&document.visibilityState===`visible`,R=()=>{let e=y(t);v={texture:te(p,e,ee(t)),palette:e}},z=()=>{let e=t.getBoundingClientRect(),n=Math.max(280,e.width||320),r=Math.min(h,n-34);return{receiptWidth:r,receiptHeight:Math.min(g,Math.max(320,C-42)),startX:(n-r)/2,startY:32}},B=t=>{N!==t&&(N=t,e.style.visibility=t?`visible`:`hidden`,n.style.visibility=t&&!I.matches?`visible`:`hidden`)},V=()=>{P=!1,x&&=(window.cancelAnimationFrame(x),0),B(!1)},H=(e,t=performance.now())=>{w=k(e),E=e,T=t},U=()=>{let n=window.devicePixelRatio||1,r=t.getBoundingClientRect();S=Math.max(1,r.width),C=Math.max(1,r.height),e.width=Math.floor(S*n),e.height=Math.floor(C*n),a.setTransform(n,0,0,n,0,0),D=0,O=0,j=0,M=0,B(!1),H(z()),L()&&W()},W=()=>{P||!L()||(P=!0,x=window.requestAnimationFrame(Z))},G=()=>{L()?U():V()},K=e=>{let n=t.getBoundingClientRect();return{x:e.clientX-n.left,y:e.clientY-n.top}},q=e=>{if(e.button!==0||I.matches)return;let t=K(e),r=ae(w.particles,t.x,t.y);r!=null&&(e.preventDefault(),n.setPointerCapture(e.pointerId),_.id=e.pointerId,_.x=t.x,_.y=t.y,_.prevX=t.x,_.prevY=t.y,_.vx=0,_.vy=0,_.grabbedIndex=r,O=0,j=0,W())},J=e=>{if(_.id!==e.pointerId)return;let t=K(e);_.vx=t.x-_.prevX,_.vy=t.y-_.prevY,_.prevX=t.x,_.prevY=t.y,_.x=t.x,_.y=t.y},Y=e=>{if(_.id!==e.pointerId)return;let t=_.grabbedIndex==null?null:w.particles[_.grabbedIndex];t&&(t.oldX=t.x-_.vx*.9,t.oldY=t.y-_.vy*.9),_.id=null,_.grabbedIndex=null},se=e=>{let t=(e-T)/1e3;for(let e=f;e<w.particles.length;e+=1){let n=w.particles[e];if(!n)continue;let r=(n.x-n.oldX)*.985,i=(n.y-n.oldY)*.985;n.oldX=n.x,n.oldY=n.y,n.x+=r+Math.sin(t*1.7+e*.19)*.018,n.y+=i+.22}let n=_.grabbedIndex==null?null:w.particles[_.grabbedIndex];n&&(n.x+=(_.x-n.x)*.72,n.y+=(_.y-n.y)*.72)},ce=()=>{for(let e=0;e<m;e+=1){A(w.particles);for(let e of w.constraints)re(w.particles,e)}A(w.particles)},le=()=>{let e=1/0,t=1/0,r=-1/0,i=-1/0;for(let n of w.particles)e=Math.min(e,n.x),t=Math.min(t,n.y),r=Math.max(r,n.x),i=Math.max(i,n.y);n.style.transform=`translate3d(${e-20}px, ${t-20}px, 0)`,n.style.width=`${r-e+40}px`,n.style.height=`${i-t+40}px`},ue=e=>{let t=w.particles[0],n=w.particles[17],r=w.particles[755],i=w.particles[738];!t||!n||!r||!i||(a.save(),a.shadowColor=e.shadow,a.shadowBlur=24,a.shadowOffsetY=16,a.fillStyle=e.shadow,a.beginPath(),a.moveTo(t.x,t.y),a.lineTo(n.x,n.y),a.lineTo(r.x,r.y),a.lineTo(i.x,i.y),a.closePath(),a.fill(),a.restore())},de=e=>{let t=w.particles[0],n=w.particles[17];!t||!n||(a.save(),a.strokeStyle=e.ink,a.lineWidth=4,a.lineCap=`round`,a.beginPath(),a.moveTo(t.x-10,t.y-3),a.lineTo(n.x+10,n.y-3),a.stroke(),a.strokeStyle=e.paperTop,a.lineWidth=1,a.beginPath(),a.moveTo(t.x-8,t.y-5),a.lineTo(n.x+8,n.y-5),a.stroke(),a.restore())},X=()=>{if(v){a.clearRect(0,0,S,C),ue(v.palette);for(let e=0;e<41;e+=1)for(let t=0;t<17;t+=1)ie(a,v.texture,v.palette,w.particles,e,t);de(v.palette),le()}},Z=e=>{if(!P)return;if(!L()){V();return}if(!o(e,M)){x=window.requestAnimationFrame(Z);return}M=e;let t=z();d(E,t)&&_.id==null?(D=0,B(!1),H(t,e)):(D+=1,E=t),ne(w.particles,t),I.matches||(se(e),ce()),X();let n=_.id!=null;O=s(n,oe(w.particles),O),j=c(n,j);let r=I.matches;if((r||D>=2)&&B(!0),r||u(D,O,j)){r||(H(t,e),X()),P=!1,x=0;return}x=window.requestAnimationFrame(Z)};B(!1),l().then(()=>{b||(R(),G())});let Q=new ResizeObserver(U);Q.observe(t);let $=new MutationObserver(()=>{R(),X()});return $.observe(document.documentElement,{attributes:!0,attributeFilter:[`class`]}),F.addEventListener(`change`,G),I.addEventListener(`change`,G),document.addEventListener(`visibilitychange`,G),window.addEventListener(`resize`,G),n.addEventListener(`pointerdown`,q),n.addEventListener(`pointermove`,J),n.addEventListener(`pointerup`,Y),n.addEventListener(`pointercancel`,Y),{updatePayload(e){p=e,!(b||!v)&&(R(),X())},destroy(){b||(b=!0,V(),Q.disconnect(),$.disconnect(),F.removeEventListener(`change`,G),I.removeEventListener(`change`,G),document.removeEventListener(`visibilitychange`,G),window.removeEventListener(`resize`,G),n.removeEventListener(`pointerdown`,q),n.removeEventListener(`pointermove`,J),n.removeEventListener(`pointerup`,Y),n.removeEventListener(`pointercancel`,Y))}}}var M=n();function N(e){let t=[{label:`User`,count:e.counts.user},{label:`Agent Responses`,count:e.counts.agent_message},{label:`Thinking`,count:e.counts.thinking},{label:`Plans`,count:e.counts.plan},{label:`Tools`,count:e.counts.tools_all}].filter(e=>e.count>0),n=e.tools.map(e=>({label:e.label,count:e.count})),r=Math.max(0,9-t.length),i=n.length>r?n.slice(0,Math.max(0,r-1)):n,a=n.slice(i.length).reduce((e,t)=>e+t.count,0);return a>0&&i.push({label:`Other tools`,count:a}),[...t,...i].slice(0,9)}function P(e){return!e||e.length===0?`SESSION ACTIVITY RECEIPT`:e.join(` / `)}function F(e,t){return{id:e.reference.sessionId,title:i(e)||`Untitled session`,agent:r(e),updatedAt:e.time_updated??e.time_created,subtitle:P(e.smart_tags),inputTokens:e.stats.total_input_tokens??0,outputTokens:e.stats.total_output_tokens??0,messageCount:e.stats.message_count??0,totalCost:e.stats.total_cost??0,items:N(t)}}function I({session:e,toc:t,minWidthQuery:n=`(min-width: 1025px)`}){let r=(0,a.useRef)(null),i=(0,a.useRef)(null),o=(0,a.useRef)(null),s=(0,a.useRef)(null),c=(0,a.useMemo)(()=>F(e,t),[e,t]),l=(0,a.useRef)(c);return(0,a.useLayoutEffect)(()=>{let e=r.current,t=i.current,a=o.current;if(!e||!t||!a)return;let c=j({canvas:e,anchor:t,hitSurface:a,payload:l.current,minWidthQuery:n});return s.current=c,()=>{c?.destroy(),s.current===c&&(s.current=null)}},[n]),(0,a.useLayoutEffect)(()=>{l.current=c,s.current?.updatePayload(c)},[c]),(0,M.jsxs)(`div`,{ref:i,className:`relative h-[calc(100dvh-5.5rem)] min-h-[420px]`,children:[(0,M.jsx)(`canvas`,{ref:r,className:`invisible pointer-events-none absolute inset-0 z-[61] block h-full w-full touch-none`,"aria-hidden":`true`}),(0,M.jsx)(`div`,{ref:o,className:`invisible absolute left-0 top-0 z-[62] cursor-grab touch-none active:cursor-grabbing`,"aria-label":`Interactive thermal receipt with Verlet paper simulation`})]})}export{I as InteractiveReceipt};
@@ -0,0 +1 @@
1
+ import{a as e,n as t,t as n}from"./jsx-runtime-B-hcVAMW.js";import{_ as r,f as i,g as a,i as o,n as s,o as c,p as l,s as u,t as d,u as f}from"./utils-C7BqyxxV.js";import{a as p,c as m,d as h,m as g,o as _,s as v,t as y}from"./CustomTimeWindowDialog-C9XTZRm0.js";var b=e(t(),1);function x(e,t){let n=e!==null,r=g({...h(e??{},t),enabled:n}),i=r.refetch,a=(0,b.useCallback)(async()=>{await i()},[i]);return{dashboard:n?r.data??null:null,loading:n&&r.isPending,error:n&&r.isError?r.error instanceof Error?r.error.message:`Unable to load dashboard.`:null,retry:a}}var S=Math.PI*2;function C(e){return e<0?0:e>1?1:e}function w(e){let t=C(e);return t*t*(3-2*t)}function T(e,t){let n=Math.imul(Math.round(e*16)^2654435769,2246822507);return n=Math.imul(n^n>>>13^Math.round(t*16),3266489909),((n^n>>>16)>>>0)/4294967296}function E(e,t,n){return w((Math.sin(e*.09+n)+Math.sin(t*.075-n*.83)+Math.sin((e+t)*.045+n*1.31)+2)/4)}function ee(e){if(e<=0)return 1;let t=10**Math.floor(Math.log10(e)),n=e/t;return(n<=1?1:n<=2?2:n<=5?5:10)*t}var D=/^var\((--[\w-]+)\)$/;function O(e,t){let n=D.exec(t)?.[1];return n&&e.getPropertyValue(n).trim()||t}function k(e,t){let n=/^#([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(e)?.[1];if(!n)return e;let r=n.length===3?n.replace(/./g,e=>e+e):n,i=parseInt(r,16);return`rgba(${i>>16&255}, ${i>>8&255}, ${i&255}, ${t})`}var A=50;function j(){let e=!1,t=null,n=0,r=0,i=()=>{n&&cancelAnimationFrame(n),r&&window.clearTimeout(r),n=0,r=0},a=()=>{!e||t===null||n||(r&&=(window.clearTimeout(r),0),n=requestAnimationFrame(s))},o=()=>{!e||t===null||r||n||(r=window.setTimeout(()=>{r=0,a()},A))};function s(r){if(n=0,!e||t===null)return;let i=t(r);i===`active`?a():i===`idle`&&o()}return{api:{requestFrame:a,setFrameHandler:e=>{t=e,e===null?i():a()}},setEnabled:t=>{e!==t&&(e=t,e?a():i())}}}function M(e,t){let[n]=(0,b.useState)(j);return(0,b.useEffect)(()=>{let r=e.current;if(!r||t){n.setEnabled(!1);return}let i=!0,a=document.visibilityState===`visible`,o=()=>n.setEnabled(i&&a),s=()=>{a=document.visibilityState===`visible`,o()},c=typeof IntersectionObserver>`u`?null:new IntersectionObserver(([e])=>{i=e?.isIntersecting??!1,o()});return c?.observe(r),document.addEventListener(`visibilitychange`,s),o(),()=>{n.setEnabled(!1),c?.disconnect(),document.removeEventListener(`visibilitychange`,s)}},[n,t,e]),n.api}var N=2,P=5,te=8,ne=7,re=620,ie=.05,ae=.8,oe=.0018,se=.3,ce=.48,le={barRatio:.62,barMax:76,bandGap:4,minBand:6};function ue(e,t,n){let r=Math.max(1,t-1),i=Math.min(ie,ae/r),a=1-(t-1)*i;return 1-(1-C((n-e*i)/a))**3}function de(e,{values:t,axisMax:n,colors:r,highlight:i,hovered:a,layout:o,reducedMotion:s}){let c=(0,b.useContext)(m),l=M(e,s),u=r.join(`\0`),d=(0,b.useRef)({values:t,axisMax:n,hovered:a,layout:o}),f=(0,b.useRef)(new Map),p=(0,b.useRef)(new Map),h=(0,b.useRef)({startedAt:0,running:!1}),g=(0,b.useRef)({w:0,h:0}),_=(0,b.useRef)(()=>{});return(0,b.useEffect)(()=>{d.current={values:t,axisMax:n,hovered:a,layout:o},s?_.current():l.requestFrame()},[n,l,a,o,s,t]),(0,b.useEffect)(()=>{p.current=new Map(f.current),s?(h.current.running=!1,_.current()):(h.current={startedAt:performance.now(),running:!0},l.requestFrame())},[n,l,s,t]),(0,b.useEffect)(()=>{let t=e.current,n=t?.parentElement,r=t?.getContext(`2d`);if(!t||!n||!r)return;let a=getComputedStyle(t),o=(u?u.split(`\0`):[]).map(e=>O(a,e)),c=O(a,i),m=()=>{let e=n.clientWidth,i=n.clientHeight;if(!e||!i)return;let a=Math.min(N,window.devicePixelRatio||1);t.width=Math.round(e*a),t.height=Math.round(i*a),t.style.width=`${e}px`,t.style.height=`${i}px`,r.setTransform(a,0,0,a,0,0),g.current={w:e,h:i}},v=0,y=(e,t,n)=>{if(!h.current.running)return 1;let r=C((n-h.current.startedAt)/re);return r>=1&&(h.current.running=!1),ue(e,t,r)},b=(e,t,n,i,a,o,s,c,l,u,d)=>{let f=[l?te:P,l?te:P,u?ne:P,u?ne:P],p=()=>{r.beginPath(),r.roundRect(e,t,n,i,f)};r.save(),p(),r.clip(),r.globalAlpha=s,r.fillStyle=a;let m=c?.5:.36,h=Math.min(d,i)/2;r.beginPath();for(let a=e+d/2;a<e+n;a+=d)for(let e=t+h;e<t+i;e+=d){let n=w(1-(e-t)/i),o=E(a,e,v),s=d*(m+.34*n+.26*o)*(.8+.4*T(a,e));r.rect(a-s/2,e-s/2,s,s)}r.fill(),r.restore(),c&&(r.save(),p(),r.strokeStyle=o,r.lineWidth=1.75,r.shadowColor=o,r.shadowBlur=10,r.stroke(),r.restore())},x=e=>{v=e*oe;let{w:t,h:n}=g.current;if(!t||!n)return;let i=d.current;if(r.clearRect(0,0,t,n),!i.values.length||i.axisMax<=0){h.current.running=!1;return}let{barRatio:a,barMax:s,bandGap:l,minBand:u}=i.layout,m=i.values.length,_=t/m,x=Math.min(_*a,s),S=Math.max(3,Math.round(t/200)),C=n/i.axisMax,w=i.hovered;i.values.forEach((t,r)=>{let i=y(r,m,e),a=r*_+(_-x)/2,s=n;t.forEach((e,n)=>{let d=`${r}:${n}`,m=e>0?Math.max(u,e*C):0,h=p.current.get(d)??0,g=h+(m-h)*i;f.current.set(d,g);let _=w?.column===r&&w.band===n,v=w==null?1:w.column===r?w.band===null||_?1:ce:se;g>0&&b(a,s-g,x,g,o[n]??o[0]??c,c,v,_,n===t.length-1,n===0,S),s-=g+l})})};_.current=()=>{m(),x(performance.now())},l.setFrameHandler(e=>(x(e),h.current.running?`active`:d.current.hovered===null?`stop`:`idle`)),m();let S=new ResizeObserver(()=>{m(),s?x(performance.now()):l.requestFrame()});return S.observe(n),s&&x(performance.now()),()=>{l.setFrameHandler(null),S.disconnect()}},[e,u,l,i,s,c]),{hitTest:(t,n)=>{let r=e.current,{w:i,h:a}=g.current;if(!r||!i)return null;let o=r.getBoundingClientRect(),s=(t-o.left)/o.width*i,c=(n-o.top)/o.height*a,{values:l,layout:u}=d.current,p=l.length,m=i/p,h=Math.floor(s/m);if(h<0||h>=p)return null;let _=Math.min(m*u.barRatio,u.barMax),v=h*m+(m-_)/2;if(s<v||s>v+_)return{column:h,band:null};let y=a;for(let e=0;e<l[h].length;e++){let t=f.current.get(`${h}:${e}`)??0;if(t>0&&c<=y&&c>=y-t)return{column:h,band:e};y-=t+u.bandGap}return{column:h,band:null}}}}var fe=`(prefers-reduced-motion: reduce)`;function F(){let[e,t]=(0,b.useState)(()=>globalThis.matchMedia?.(fe).matches??!1);return(0,b.useEffect)(()=>{let e=globalThis.matchMedia?.(fe);if(!e)return;let n=()=>t(e.matches);return n(),e.addEventListener(`change`,n),()=>e.removeEventListener(`change`,n)},[]),e}var I=n();function pe(e,t,n){return e===`ArrowLeft`?Math.max(0,t-1):e===`ArrowRight`?Math.min(n,t+1):e===`Home`?0:e===`End`?n:null}function me({label:e,itemLabels:t,activeIndex:n,onActiveIndexChange:r,layout:i}){let a=(0,b.useRef)([]),[o,s]=(0,b.useState)(0),c=t.length-1,l=Math.min(o,Math.max(0,c)),u=(e,t)=>{if(e.key===`Escape`){e.preventDefault(),r(null);return}let n=pe(e.key,t,c);n!==null&&(e.preventDefault(),s(n),a.current[n]?.focus())};return(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`div`,{role:`listbox`,"aria-label":e,"aria-orientation":`horizontal`,className:d(`pointer-events-none absolute inset-0 z-[1]`,i===`columns`?`flex`:null),onBlur:e=>{e.currentTarget.contains(e.relatedTarget)||r(null)},children:t.map((e,t)=>(0,I.jsx)(`div`,{ref:e=>{a.current[t]=e},role:`option`,"aria-label":e,"aria-selected":n===t,tabIndex:t===l?0:-1,className:d(`pointer-events-none focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-[var(--brand)]`,i===`columns`?`h-full min-w-0 flex-1 rounded-sm`:`absolute inset-0 rounded-full`),onFocus:()=>{s(t),r(t)},onKeyDown:e=>u(e,t)},t))}),(0,I.jsx)(`span`,{role:`status`,"aria-live":`polite`,"aria-atomic":`true`,className:`sr-only`,children:n===null?``:t[n]})]})}var he=[1,.75,.5,.25,0];function ge(e,t){return e===t||e!==null&&t!==null&&e.column===t.column&&e.band===t.band}function L({values:e,axisMax:t,colors:n,highlight:r=`var(--brand)`,hovered:i,onHover:a,layout:o,height:s,formatTick:c,ariaLabel:l,itemLabels:u,className:f}){let p=(0,b.useRef)(null),m=(0,b.useRef)(i),h=F(),{hitTest:g}=de(p,{values:e,axisMax:t,colors:n,highlight:r,hovered:i,layout:{...le,...o},reducedMotion:h});(0,b.useEffect)(()=>{m.current=i},[i]);let _=e=>{ge(m.current,e)||(m.current=e,a(e))};return(0,I.jsxs)(`div`,{className:d(`flex`,f),children:[c?(0,I.jsx)(`div`,{className:`relative shrink-0`,style:{height:s,width:38},"aria-hidden":!0,children:he.map(e=>(0,I.jsx)(`span`,{className:`console-mono absolute right-2 -translate-y-1/2 text-[9.5px] whitespace-nowrap text-[var(--console-muted)]`,style:{top:`${(1-e)*100}%`},children:c(t*e)},e))}):null,(0,I.jsxs)(`div`,{className:`chart-hatch relative min-w-0 flex-1 touch-none`,style:{height:s},onPointerMove:e=>_(g(e.clientX,e.clientY)),onPointerLeave:()=>_(null),children:[he.map(e=>(0,I.jsx)(`span`,{"aria-hidden":!0,className:d(`pointer-events-none absolute inset-x-0`,e===0?`h-px bg-[var(--console-border-strong)]`:`border-t border-dashed border-[var(--console-border)]`),style:{top:`${(1-e)*100}%`}},e)),(0,I.jsx)(`canvas`,{ref:p,"aria-hidden":!0,className:`absolute inset-0 block`}),(0,I.jsx)(me,{label:l,itemLabels:u,activeIndex:i?.column??null,onActiveIndexChange:e=>_(e===null?null:{column:e,band:null}),layout:`columns`})]})]})}var R=6,_e=118,ve={barRatio:.52,barMax:34,bandGap:0,minBand:4},ye=[`var(--brand)`];function be({perAgent:e}){let[t,n]=(0,b.useState)(null),{byCost:r,visible:i,values:o,axisMax:c,itemLabels:l}=(0,b.useMemo)(()=>{let t=e.some(e=>e.cost>0),n=e=>t?e.cost:e.sessions,r=[...e].sort((e,t)=>n(t)-n(e)).slice(0,R),i=r.map(e=>[n(e)]),o=r.map(e=>t?`${e.displayName}: ${a(e.cost)}, ${u(e.sessions)} sessions`:`${e.displayName}: ${u(e.sessions)} sessions`);return{byCost:t,visible:r,values:i,axisMax:Math.max(...i.flat(),0),itemLabels:o}},[e]);return(0,I.jsxs)(p,{role:`region`,"aria-label":`Agents`,className:`p-4`,children:[(0,I.jsx)(_,{title:`Agents`,meta:`${r?`by cost`:`by sessions`} · ${e.length} total`}),i.length===0?(0,I.jsx)(`p`,{className:`console-mono mt-3 text-[11px] text-[var(--console-muted)]`,children:`No data`}):(0,I.jsxs)(`div`,{className:`mt-[14px]`,children:[(0,I.jsx)(L,{values:o,axisMax:c,colors:ye,hovered:t,onHover:n,layout:ve,height:_e,ariaLabel:`Agent distribution chart`,itemLabels:l}),(0,I.jsx)(`div`,{className:`mt-2 grid`,style:{gridTemplateColumns:`repeat(${i.length}, minmax(0, 1fr))`},children:i.map((e,n)=>(0,I.jsxs)(`div`,{"data-testid":`overview-agent-row`,className:`flex min-w-0 flex-col items-center gap-[5px]`,children:[(0,I.jsx)(`span`,{className:`flex size-[18px] items-center justify-center rounded-sm border border-[var(--console-border)] bg-[var(--console-surface-muted)]`,children:(0,I.jsx)(s,{icon:e.icon,iconColored:e.iconColored,alt:e.displayName,className:`size-[10px]`})}),(0,I.jsx)(`span`,{className:d(`console-mono max-w-full truncate text-[9.5px]`,t?.column===n?`text-[var(--console-text)]`:`text-[var(--console-muted)]`),children:e.displayName}),(0,I.jsx)(`span`,{className:`console-mono text-[9.5px] text-[var(--console-text)]`,children:r?a(e.cost):u(e.sessions)}),r?(0,I.jsx)(`span`,{className:`console-mono text-[9.5px] text-[var(--console-muted)]`,children:u(e.sessions)}):null]},e.name))})]}),e.length>R?(0,I.jsxs)(`p`,{className:`console-mono mt-3 text-[10.5px] text-[var(--console-muted)]`,children:[`+ `,e.length-R,` more`]}):null]})}var z=200,B=100,V=100,H=86,U=55,xe=-Math.PI/2,Se=.07,Ce=6,W=4.6,we=2,Te=.0018,Ee=500,G=6,De=.72,Oe=.3,ke=(()=>{let e=[];for(let t=14;t<=186;t+=W)for(let n=14;n<=186;n+=W){let r=t-B,i=n-V,a=Math.hypot(r,i);a<50.4||a>90.6||e.push({x:t,y:n,angle:Math.atan2(i,r),fullness:.62+.38*w((a-U)/31),jitter:T(t,n)})}return e})();function Ae(e,{a0:t,a1:n}){let r=n-t,i=Math.min(Ce,31*.45,U*r*.45),a=i/H,o=i/U,s=(e,t)=>[B+Math.cos(t)*e,V+Math.sin(t)*e],[c,l]=s(H,t+a);e.beginPath(),e.moveTo(c,l),e.arc(B,V,H,t+a,n-a),e.arcTo(...s(H,n),...s(U,n),i),e.arcTo(...s(U,n),...s(U,n-o),i),e.arc(B,V,U,n-o,t+o,!0),e.arcTo(...s(U,t),...s(H,t),i),e.arcTo(...s(H,t),c,l,i),e.closePath()}function je(e){let t=xe;return e.map(e=>{let n=e*S,r={a0:t+Se/2,a1:t+n-Se/2};return t+=n,r})}function Me(e,{shares:t,colors:n,hovered:r,reducedMotion:i}){let a=(0,b.useContext)(m),o=M(e,i),s=n.join(`\0`),c=(0,b.useRef)(r),l=(0,b.useRef)({displayed:t.slice(),from:t.slice(),target:t.slice(),startedAt:0,running:!1}),u=(0,b.useRef)(je(t)),d=(0,b.useRef)(()=>{});return(0,b.useEffect)(()=>{let e=l.current;e.from=e.displayed.slice(),e.target=t.slice(),i?(e.displayed=t.slice(),e.running=!1,d.current()):(e.startedAt=performance.now(),e.running=!0,o.requestFrame())},[o,i,t]),(0,b.useEffect)(()=>{c.current=r,i?d.current():o.requestFrame()},[o,r,i]),(0,b.useEffect)(()=>{let t=e.current,n=t?.parentElement,r=t?.getContext(`2d`);if(!t||!n||!r)return;let a=getComputedStyle(t),f=(s?s.split(`\0`):[]).map(e=>O(a,e)),p=1,m=()=>{let e=n.clientWidth;if(!e)return;let r=Math.min(we,window.devicePixelRatio||1);t.width=Math.ceil(e*r),t.height=Math.ceil(e*r),t.style.width=`${e}px`,t.style.height=`${e}px`,p=e/z*r},h=0,g=e=>{let t=l.current;if(!t.running)return;let n=C((e-t.startedAt)/Ee),r=1-2**(-10*n);t.displayed=t.target.map((e,n)=>{let i=t.from[n]??0;return i+(e-i)*r}),n>=1&&(t.displayed=t.target.slice(),t.running=!1)},_=(e,t,n,i)=>{if(t.a1-t.a0<=.004)return;if(r.save(),n){let n=(t.a0+t.a1)/2;r.translate(Math.cos(n)*G,Math.sin(n)*G),r.shadowColor=k(e,.55),r.shadowBlur=5}Ae(r,t),r.clip(),r.globalAlpha=i?n?1:Oe*De:De,r.fillStyle=e;let a=n?.46:.34,o=t.a0-.06,s=t.a1+.06;r.beginPath();for(let e of ke){let t=e.angle;for(;t<o;)t+=S;for(;t>=o+S;)t-=S;if(t>s)continue;let n=E(e.x,e.y,h),i=W*(a+.36*e.fullness+.26*n)*(.78+.42*e.jitter);r.rect(e.x-i/2,e.y-i/2,i,i)}r.fill(),r.restore()},v=e=>{h=e*Te,r.setTransform(p,0,0,p,0,0),r.clearRect(0,0,z,z);let t=je(l.current.displayed);u.current=t;let n=c.current,i=n!==null;t.forEach((e,t)=>{t!==n&&_(f[t]??f[0]??``,e,!1,i)});let a=n===null?void 0:t[n];a&&_(f[n]??``,a,!0,!0)};d.current=()=>{m(),v(performance.now())},o.setFrameHandler(e=>(g(e),v(e),l.current.running?`active`:c.current===null?`stop`:`idle`)),m();let y=new ResizeObserver(()=>{m(),i?v(performance.now()):o.requestFrame()});return y.observe(n),i&&v(performance.now()),()=>{o.setFrameHandler(null),y.disconnect()}},[e,s,o,i,a]),{hitTest:(t,n)=>{let r=e.current;if(!r)return null;let i=r.getBoundingClientRect();if(!i.width)return null;let a=(t-i.left)/i.width*z-B,o=(n-i.top)/i.height*z-V,s=Math.hypot(a,o);if(s<U||s>H)return null;let c=Math.atan2(o,a);for(let e=0;e<u.current.length;e++){let{a0:t,a1:n}=u.current[e],r=c;for(;r<t;)r+=S;for(;r>=t+S;)r-=S;if(r<=n)return e}return null}}}function Ne({shares:e,colors:t,hovered:n,onHover:r,size:i,ariaLabel:a,itemLabels:o,children:s}){let c=(0,b.useRef)(null),{hitTest:l}=Me(c,{shares:e,colors:t,hovered:n,reducedMotion:F()});return(0,I.jsxs)(`div`,{className:`relative shrink-0 touch-none`,style:{width:i,height:i},onPointerMove:e=>r(l(e.clientX,e.clientY)),onPointerLeave:()=>r(null),children:[(0,I.jsx)(`canvas`,{ref:c,"aria-hidden":!0,className:`block size-full`}),(0,I.jsx)(`div`,{className:`pointer-events-none absolute inset-0 flex flex-col items-center justify-center`,children:s}),(0,I.jsx)(me,{label:a,itemLabels:o,activeIndex:n,onActiveIndexChange:r,layout:`surface`})]})}var Pe=5,Fe=142,Ie=.01;function Le(e){return e!==null&&e.some(e=>e.cost>0)}function Re(e,t){let n=[...e].sort((e,t)=>t.cost-e.cost).slice(0,Pe),i=n.map((e,t)=>({key:e.model,label:e.model,value:e.cost,color:`var(--chart-${t+1})`,display:r(e.cost)})),a=t-n.reduce((e,t)=>e+t.cost,0);return t>0&&a>t*Ie&&i.push({key:`__remainder`,label:`Other`,value:a,color:`var(--console-border-strong)`,display:r(a)}),i}function ze(e){return[...e].sort((e,t)=>t.tokens-e.tokens).slice(0,Pe).map((e,t)=>({key:e.model,label:e.model,value:e.tokens,color:`var(--chart-${t+1})`,display:o(e.tokens)}))}function Be({modelCost:e,modelDistribution:t,totals:n}){let[s,c]=(0,b.useState)(null),{byCost:l,entries:u}=(0,b.useMemo)(()=>{let r=Le(e);return{byCost:r,entries:r?Re(e,n.cost):ze(t)}},[e,t,n.cost]),f=u.reduce((e,t)=>e+t.value,0),m=(0,b.useMemo)(()=>u.map(e=>f>0?e.value/f:1/u.length),[u,f]),h=l?`Cost by Model`:`Models`,g=u.map(e=>`${e.label}: ${i(f>0?e.value/f:0)}, ${e.display}`);return(0,I.jsxs)(p,{role:`region`,"aria-label":h,className:`p-4`,children:[(0,I.jsx)(_,{title:h,meta:l?`by cost`:`by tokens`}),u.length===0?(0,I.jsx)(`p`,{className:`console-mono mt-3 text-[11px] text-[var(--console-muted)]`,children:`No model data`}):(0,I.jsxs)(`div`,{className:`mt-[14px] flex items-center gap-[18px]`,children:[(0,I.jsxs)(Ne,{shares:m,colors:u.map(e=>e.color),hovered:s,onHover:c,size:Fe,ariaLabel:`${h} chart`,itemLabels:g,children:[(0,I.jsx)(`span`,{className:`console-mono text-[16px] font-semibold text-[var(--console-text)]`,children:l?r(n.cost):o(n.tokens)}),(0,I.jsx)(`span`,{className:`console-mono mt-0.5 text-[9px] text-[var(--console-muted)]`,children:l?`total cost`:`total tokens`})]}),(0,I.jsx)(`ul`,{className:`flex min-w-0 flex-1 flex-col gap-[7px]`,children:u.map((e,t)=>(0,I.jsxs)(`li`,{className:d(`flex min-w-0 items-center gap-2 transition-opacity`,s!==null&&s!==t?`opacity-45`:null),onPointerEnter:()=>c(t),onPointerLeave:()=>c(null),children:[(0,I.jsx)(`span`,{className:`size-2 shrink-0 rounded-[2px]`,style:{background:e.color},"aria-hidden":!0}),(0,I.jsx)(`span`,{className:`console-mono min-w-0 flex-1 truncate text-[10.5px] text-[var(--console-text)]`,children:e.label}),(0,I.jsx)(`span`,{className:`console-mono w-[34px] shrink-0 text-right text-[10.5px] text-[var(--console-muted)]`,children:i(f>0?e.value/f:0)}),(0,I.jsx)(`span`,{className:`console-mono w-[54px] shrink-0 text-right text-[10.5px] text-[var(--console-text)]`,children:e.display})]},e.key))})]}),(0,I.jsx)(`p`,{className:`console-mono mt-3 border-t border-dashed border-[var(--console-border)] pt-3 text-[10.5px] text-[var(--console-muted)]`,children:l?(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`span`,{className:`mr-1.5 rounded-sm bg-[var(--brand-soft)] px-1.5 py-0.5 text-[var(--brand)]`,children:`Estimated`}),a(n.costEstimated),` from model unit price,`,` `,a(n.costRecorded),` from agent records`]}):`Per-model cost needs the message cache, which is unavailable here; showing token share instead.`})]})}var Ve=[{value:`7d`,label:`7d`},{value:`30d`,label:`30d`},{value:`90d`,label:`90d`},{value:`all`,label:`All`},{value:`custom`,label:`Custom`}],K=`__all__`;function He({agent:e,onAgentChange:t,agentCatalog:n,scopeCounts:r,window:i,rangePreset:a,onRangeChange:o,onSelectCustom:s}){let[c,l]=(0,b.useState)(!1);return(0,I.jsxs)(I.Fragment,{children:[(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[t?(0,I.jsxs)(`select`,{"aria-label":`Filter by agent`,value:e??K,onChange:e=>t(e.target.value===K?void 0:e.target.value),className:`console-mono max-w-[220px] rounded-sm border border-[var(--console-border)] bg-[var(--console-surface)] px-2 py-1.5 text-xs text-[var(--console-text)] focus-visible:ring-2 focus-visible:ring-[var(--brand)] focus-visible:outline-none`,children:[(0,I.jsx)(`option`,{value:K,children:`All agents`}),n.active.map(e=>(0,I.jsx)(`option`,{value:e.name.toLowerCase(),children:e.displayName},e.name))]}):null,r?(0,I.jsxs)(`span`,{className:`console-mono text-[11px] text-[var(--console-muted)]`,children:[r.projects,` projects · `,r.agents,` agents in scope`]}):null,(0,I.jsx)(`div`,{className:`ml-auto flex items-center gap-1.5`,children:Ve.map(e=>{let t=e.value===a;return(0,I.jsx)(`button`,{type:`button`,"aria-pressed":t,onClick:()=>{e.value===`custom`?l(!0):o(e.value)},className:d(`console-mono motion-hover rounded-full border px-[13px] py-[5px] text-[11px] focus-visible:ring-2 focus-visible:ring-[var(--brand)] focus-visible:outline-none`,t?`border-[var(--brand)] bg-[var(--brand)] text-[var(--brand-fg)]`:`border-[var(--console-border)] bg-[var(--console-surface)] text-[var(--console-muted)]`),children:e.label},e.value)})})]}),(0,I.jsx)(y,{open:c,onOpenChange:l,window:i,onSelectCustom:s})]})}function Ue(e){return e.toFixed(1)}var We={neutral:`text-[var(--console-muted)]`,warning:`text-[var(--brand)]`,positive:`text-[var(--positive)]`};function q({label:e,value:t,trend:n,trendTone:r=`neutral`,hint:i,emphasis:a=!1}){return(0,I.jsxs)(p,{className:d(`px-4 py-[14px]`,a?`border-[var(--brand-line)]`:null),children:[(0,I.jsx)(`p`,{className:`console-eyebrow`,children:e}),(0,I.jsx)(`p`,{className:d(`console-mono mt-[9px] text-[27px] font-semibold tracking-[-0.02em]`,a?`text-[var(--brand)]`:`text-[var(--console-text)]`),children:t}),(0,I.jsxs)(`div`,{className:`mt-[7px] flex items-center gap-[7px]`,children:[n===void 0?null:(0,I.jsx)(`span`,{"data-testid":`overview-kpi-trend`,className:d(`console-mono text-[10.5px]`,We[r]),children:n}),i===void 0?null:(0,I.jsx)(`span`,{className:`console-mono truncate text-[10.5px] text-[var(--console-muted)]`,children:i})]})]})}function Ge(e){return e.costEstimated===0?`All recorded by agents`:e.costEstimated===e.cost&&e.cost>0?`All estimated from unit price`:`${a(e.costEstimated)} estimated`}function Ke(e){let t=[e.latestActivityProject,e.latestActivityAgent].filter(e=>!!e);return t.length>0?t.join(` · `):void 0}function qe({totals:e,rangeDays:t}){let n=e.previous,r=(e,t)=>t===void 0?null:c(e,t),s=r(e.sessions,n?.sessions),d=r(e.messages,n?.messages),f=r(e.tokens,n?.tokens),p=r(e.cost,n?.cost),m=n?.cost!==void 0&&e.cost>n.cost;return(0,I.jsxs)(`div`,{className:`grid grid-cols-2 gap-3 md:grid-cols-3 xl:grid-cols-5`,children:[(0,I.jsx)(q,{label:`Sessions`,value:u(e.sessions),trend:s??void 0,hint:t?`${Ue(e.sessions/t)}/day`:void 0}),(0,I.jsx)(q,{label:`Messages`,value:u(e.messages),trend:d??void 0,hint:e.sessions>0?`${Ue(e.messages/e.sessions)}/session`:void 0}),(0,I.jsx)(q,{label:`Tokens`,value:o(e.tokens),trend:f??void 0,hint:`Cache hit ${i(e.cacheReadTokens/e.tokens)}`}),(0,I.jsx)(q,{label:`Cost`,value:a(e.cost),trend:p??void 0,trendTone:m?`warning`:`positive`,hint:Ge(e),emphasis:!0}),(0,I.jsx)(q,{label:`Last activity`,value:e.latestActivity===void 0?`No activity`:l(e.latestActivity),trend:e.latestActivity===void 0?void 0:`●`,trendTone:`positive`,hint:e.latestActivity===void 0?void 0:Ke(e)})]})}var Je=[0,1,2,3,4];function J({className:e}){return(0,I.jsx)(`span`,{className:`skeleton-shimmer block rounded-sm ${e}`})}function Y({bodyClassName:e}){return(0,I.jsxs)(p,{className:`p-4`,children:[(0,I.jsx)(J,{className:`h-[15px] w-28`}),(0,I.jsx)(J,{className:`mt-3 ${e}`})]})}function Ye(){return(0,I.jsxs)(`div`,{className:`space-y-4`,"aria-hidden":!0,"data-testid":`overview-skeleton`,children:[(0,I.jsx)(`div`,{className:`grid grid-cols-2 gap-3 md:grid-cols-3 xl:grid-cols-5`,children:Je.map(e=>(0,I.jsxs)(p,{className:`px-4 py-[14px]`,children:[(0,I.jsx)(J,{className:`h-[10px] w-16`}),(0,I.jsx)(J,{className:`mt-[9px] h-[27px] w-24`}),(0,I.jsx)(J,{className:`mt-[7px] h-[11px] w-20`})]},e))}),(0,I.jsxs)(p,{className:`p-4`,children:[(0,I.jsx)(J,{className:`h-[15px] w-28`}),(0,I.jsx)(J,{className:`mt-[14px] h-[168px] w-full`})]}),(0,I.jsxs)(`div`,{className:`grid gap-4 lg:grid-cols-[1.45fr_1fr]`,children:[(0,I.jsx)(Y,{bodyClassName:`h-[248px] w-full`}),(0,I.jsxs)(`div`,{className:`grid content-start gap-4`,children:[(0,I.jsx)(Y,{bodyClassName:`h-[116px] w-full`}),(0,I.jsx)(Y,{bodyClassName:`h-[100px] w-full`})]})]})]})}var Xe=.16;function Ze(e){return e*e*(3-2*e)}function Qe(e,t,n){return e<t?t:e>n?n:e}function X(e,t=new Float32Array(512)){let n=e.length;if(n===0)return t.fill(0),t;for(let r=0;r<512;r++){let i=Qe(r/511*n-.5,0,n-1),a=Math.min(n-2,Math.floor(i));if(a<0){t[r]=e[0];continue}let o=Ze(i-a);t[r]=e[a]*(1-o)+e[a+1]*o}return t}function $e(e,t){let n=Qe(t,0,1)*511,r=Math.min(510,Math.floor(n)),i=n-r;return e[r]*(1-i)+e[r+1]*i}function et(e,t){return 1-(t>0?Math.min(1,e/t):0)*.84}var tt=2,nt=460,rt=180,Z=32,it=.06,at=.24,ot=/oklch\(\s*([\d.]+)\s+([\d.]+)\s+([\d.]+)/;function st(e){let t=Math.imul(e^2654435769,2246822507);return t=Math.imul(t^t>>>13,3266489909),((t^t>>>16)>>>0)/4294967296}function ct(e,t){let n=ot.exec(e),r=ot.exec(t);if(!n||!r)return Array.from({length:33},()=>t);let[i,a,o]=[Number(n[1]),Number(n[2]),Number(n[3])],[s,c,l]=[Number(r[1]),Number(r[2]),Number(r[3])];return Array.from({length:33},(e,t)=>{let n=t/Z,r=i+(s-i)*n,u=a+(c-a)*n,d=o+(l-o)*n;return`oklch(${r.toFixed(3)} ${u.toFixed(3)} ${d.toFixed(1)})`})}function lt(e,{values:t,max:n,reducedMotion:r}){let i=(0,b.useContext)(m),a=M(e,r),o=(0,b.useRef)({from:X(t),to:X(t),current:X(t),fromMax:n,toMax:n,currentMax:n,startedAt:0,duration:0}),s=(0,b.useRef)(null),c=(0,b.useRef)(()=>{}),l=(0,b.useRef)({x:-1e4,y:-1e4,smoothX:-1e4,smoothY:-1e4,speed:0,inside:!1});(0,b.useEffect)(()=>{let e=o.current;e.from.set(e.current),e.fromMax=e.currentMax,X(t,e.to),e.toMax=n,e.startedAt=performance.now(),e.duration=r?0:nt,r?c.current():a.requestFrame()},[a,n,r,t]),(0,b.useEffect)(()=>{let t=e.current,n=t?.parentElement,i=t?.getContext(`2d`);if(!t||!n||!i)return;let u=l.current,d=getComputedStyle(t),f=d.getPropertyValue(`--tile-rest`).trim(),p=ct(d.getPropertyValue(`--tile-wash`).trim(),d.getPropertyValue(`--tile-ink`).trim()),m=()=>{let e=n.clientWidth,r=n.clientHeight;if(!e||!r)return;let a=n.getBoundingClientRect(),o=Math.min(tt,window.devicePixelRatio||1);t.width=Math.round(e*o),t.height=Math.round(r*o),t.style.width=`${e}px`,t.style.height=`${r}px`,i.setTransform(o,0,0,o,0,0),i.imageSmoothingEnabled=!1;let c=Math.max(3,Math.round(e/rt)),l=Math.ceil(e/c),u=Math.ceil(r/c),d=l*u,f=new Uint8Array(d);for(let e=0;e<d;e++)f[e]=+(st(e)<it);s.current={cell:c,cols:l,rows:u,width:e,height:r,left:a.left,top:a.top,step:1/o,glow:new Float32Array(d),spark:f}},h=e=>{let t=o.current,n=t.duration>0?Math.min(1,(e-t.startedAt)/t.duration):1;for(let e=0;e<512;e++)t.current[e]=t.from[e]+(t.to[e]-t.from[e])*n;return t.currentMax=t.fromMax+(t.toMax-t.fromMax)*n,n>=1&&(t.duration=0),n<1},g=e=>{let t=l.current,n=t.smoothX,r=t.smoothY,i=1-.72**e;t.smoothX+=(t.x-n)*i,t.smoothY+=(t.y-r)*i,t.speed=Math.hypot(t.smoothX-n,t.smoothY-r)},_=(e,t=1)=>{let n=s.current;if(!n)return!1;let a=o.current,{cell:c,cols:u,rows:d,width:m,height:h,step:g,glow:_,spark:v}=n,y=e=>Math.round(e/g)*g,b=Math.max(g,y(c*.34)),x=y((c-b)/2);i.clearRect(0,0,m,h),i.fillStyle=f;for(let e=0;e<u;e++){let t=e*c+x;for(let e=0;e<d;e++)i.fillRect(t,e*c+x,b,b)}let S=l.current,C=h*(at+Math.min(1,S.speed/25)*.26),w=!r&&S.inside,T=1-.78**t,E=1-.95**t,ee=e*.0018,D=-1,O=!1;for(let t=0;t<u;t++){let n=u>1?(t+.5)/u:.5,o=et($e(a.current,n),a.currentMax),s=Math.max(.001,1-o),l=t*c,m=l+c/2;for(let n=0;n<d;n++){let a=t*d+n,u=n*c,b=(u+c/2)/h,x=0;b>=o&&(x=1-.55*((b-o)/s));let k=_[a];if(w){let e=Math.hypot(m-S.smoothX,u+c/2-S.smoothY),t=e<C?1-e/C:0;k+=(t-k)*(t>k?T:E),_[a]=k}else k>0&&(k*=1-E,_[a]=k<.002?0:k);_[a]>0&&(O=!0);let A=Math.min(1,x+k*.5);if(A<=.02)continue;let j=A;r||(j*=1+.07*Math.sin(b*Math.PI*3-ee),v[a]&&k>.02&&(j*=1+.25*k*Math.sin(e*.012+a)),j=Math.min(1,j));let M=Math.max(g,y(c*(.28+.42*A))),N=y((c-M)/2),P=Math.round(j*Z);P!==D&&(D=P,i.fillStyle=p[D]??p[Z]??f),i.fillRect(l+N,u+N,M,M)}}return O},v=()=>{m(),h(performance.now()),_(performance.now())};c.current=v;let y=e=>{let t=s.current;if(!t)return;let r=l.current;if(!r.inside){let e=n.getBoundingClientRect();t.left=e.left,t.top=e.top}r.x=e.clientX-t.left,r.y=e.clientY-t.top,r.inside||(r.smoothX=r.x,r.smoothY=r.y),r.inside=!0,a.requestFrame()},b=()=>{l.current.inside=!1,a.requestFrame()},x=0;a.setFrameHandler(e=>{let t=x===0?1:Math.min(3,(e-x)/(1e3/60));x=e;let n=h(e);g(t);let r=_(e,t);return n?`active`:l.current.inside||r?`idle`:(x=0,`stop`)}),m();let S=new ResizeObserver(()=>{m(),r?(h(performance.now()),_(performance.now())):a.requestFrame()});return S.observe(n),r?v():(n.addEventListener(`pointermove`,y,{passive:!0}),n.addEventListener(`pointerleave`,b)),()=>{a.setFrameHandler(null),S.disconnect(),n.removeEventListener(`pointermove`,y),n.removeEventListener(`pointerleave`,b),u.inside=!1}},[e,a,r,i])}var ut=[1,.66,.33,0],dt=e=>`${(1-e*(1-Xe))*100}%`,ft=(e,t)=>(e+.5)/t*100;function pt({values:e,max:t,labels:n,formatValue:r}){let[i,a]=(0,b.useState)(null),o=(0,b.useRef)(null),s=F(),c=t=>{let n=o.current?.getBoundingClientRect();if(!n?.width)return;let r=(t-n.left)/n.width,i=Math.round(r*e.length-.5);a(Math.min(e.length-1,Math.max(0,i)))},l=i!==null,u=i??0,f=e[u]??0,p=s?void 0:`left 260ms ease-out, top 260ms ease-out`;return(0,I.jsxs)(`div`,{ref:o,className:`absolute inset-0 cursor-crosshair touch-none`,onPointerMove:e=>c(e.clientX),onPointerLeave:()=>a(null),children:[(0,I.jsx)(`span`,{className:d(`pointer-events-none absolute inset-y-0 w-px -translate-x-1/2 bg-[var(--brand-line)] transition-opacity duration-150`,l?`opacity-100`:`opacity-0`),style:{left:`${ft(u,e.length)}%`,transition:p}}),(0,I.jsxs)(`div`,{className:d(`pointer-events-none absolute size-0 transition-opacity duration-150`,l?`opacity-100`:`opacity-0`),style:{left:`${ft(u,e.length)}%`,top:`${et(f,t)*100}%`,transition:p},children:[(0,I.jsx)(`span`,{className:`absolute size-[9px] -translate-x-1/2 -translate-y-1/2 rounded-full bg-[var(--brand)] ring-2 ring-[var(--console-surface)]`}),(0,I.jsxs)(`span`,{className:`console-mono absolute bottom-3 flex -translate-x-1/2 items-baseline gap-1.5 rounded-md border border-[var(--console-border)] bg-[var(--console-surface)] px-2 py-1 whitespace-nowrap shadow-[var(--shadow-overlay)]`,children:[(0,I.jsx)(`span`,{className:`text-[10px] text-[var(--console-muted)]`,children:n[u]}),(0,I.jsx)(`span`,{className:`text-[12px] font-semibold text-[var(--console-text)]`,children:r(f)})]})]})]})}function mt({values:e,max:t,labels:n,height:r,formatValue:i,formatTick:a,className:o}){let s=(0,b.useRef)(null);return lt(s,{values:e,max:t,reducedMotion:F()}),(0,I.jsxs)(`div`,{className:d(`flex`,o),"aria-hidden":!0,children:[a?(0,I.jsx)(`div`,{className:`relative shrink-0`,style:{height:r,width:38},children:ut.map(e=>(0,I.jsx)(`span`,{className:`console-mono absolute right-2 -translate-y-1/2 text-[9.5px] whitespace-nowrap text-[var(--console-muted)]`,style:{top:dt(e)},children:a(t*e)},e))}):null,(0,I.jsxs)(`div`,{className:`chart-hatch relative min-w-0 flex-1`,style:{height:r},children:[ut.map(e=>(0,I.jsx)(`span`,{className:d(`pointer-events-none absolute inset-x-0`,e===0?`h-px bg-[var(--console-border-strong)]`:`border-t border-dashed border-[var(--console-border)]`),style:{top:dt(e)}},e)),(0,I.jsx)(`canvas`,{ref:s,className:`absolute inset-0 block`}),e.length>0?(0,I.jsx)(pt,{values:e,max:t,labels:n,formatValue:i}):null]})]})}var ht=168,gt=132,_t=6,vt={barRatio:.86,barMax:46,bandGap:2,minBand:3},Q=[{key:`input`,label:`Input`,color:`var(--token-input)`},{key:`output`,label:`Output`,color:`var(--token-output)`},{key:`cache_read`,label:`Cache read`,color:`var(--token-cache-read)`},{key:`cache_create`,label:`Cache write`,color:`var(--token-cache-write)`}],yt=Q.map(e=>e.color);function bt(e){return e>=1e3?`$${o(e)}`:`$${Math.round(e)}`}function $(e){return e.input+e.output+e.cache_read+e.cache_create}function xt(e){return`${f(e.date)}: ${o($(e))} tokens, ${a(e.cost)}, ${u(e.sessions)} sessions, ${u(e.messages)} messages, input ${o(e.input)}, output ${o(e.output)}, cache read ${o(e.cache_read)}, cache write ${o(e.cache_create)}`}function St({daily:e}){let t=(0,b.useMemo)(()=>e.map(e=>e.cost),[e]),n=(0,b.useMemo)(()=>e.map(e=>f(e.date)),[e]),r=t.reduce((e,t)=>e+t,0),i=t.reduce((e,t)=>Math.max(e,t),0);return i<=0?null:(0,I.jsxs)(I.Fragment,{children:[(0,I.jsxs)(`div`,{className:`mt-[14px] flex items-baseline justify-between border-t border-dashed border-[var(--console-border)] pt-[11px]`,children:[(0,I.jsx)(`span`,{className:`console-mono text-[10.5px] text-[var(--console-text)]`,children:`Daily cost`}),(0,I.jsxs)(`span`,{className:`console-mono text-[10px] text-[var(--console-muted)]`,children:[`Peak `,a(i),` · Avg `,a(r/e.length),` · Total `,a(r)]})]}),(0,I.jsx)(mt,{values:t,max:i,labels:n,height:gt,formatValue:a,formatTick:bt,className:`mt-[7px]`})]})}function Ct({bucket:e,index:t,count:n}){return(0,I.jsxs)(`div`,{className:d(`console-mono pointer-events-none absolute top-2 z-10 rounded-md border border-[var(--console-border)] bg-[var(--console-surface)] px-2.5 py-2 text-[10.5px] whitespace-nowrap text-[var(--console-text)] shadow-[var(--shadow-overlay)]`,t>=n*.75?`-translate-x-full`:`-translate-x-1/2`),style:{left:`${(t+.5)/n*100}%`},children:[(0,I.jsx)(`div`,{children:f(e.date)}),(0,I.jsxs)(`div`,{children:[o($(e)),` tok ·`,` `,(0,I.jsx)(`span`,{className:`text-[var(--brand)]`,children:a(e.cost)})]}),(0,I.jsxs)(`div`,{children:[u(e.sessions),` sessions · `,u(e.messages),` messages`]}),(0,I.jsxs)(`div`,{className:`text-[var(--console-muted)]`,children:[`In `,o(e.input),` · Out `,o(e.output),` · Read`,` `,o(e.cache_read),` · Write `,o(e.cache_create)]})]})}function wt({daily:e}){let[t,n]=(0,b.useState)(null),r=(0,b.useMemo)(()=>e.map(e=>Q.map(t=>e[t.key])),[e]),i=(0,b.useMemo)(()=>e.map(xt),[e]),a=(0,b.useMemo)(()=>ee(e.reduce((e,t)=>Math.max(e,$(t)),0)),[e]),s=t===null?void 0:e[t.column];return(0,I.jsxs)(`div`,{className:`relative mt-[14px]`,children:[(0,I.jsx)(L,{values:r,axisMax:a,colors:yt,hovered:t,onHover:n,layout:vt,height:ht,formatTick:o,ariaLabel:`Daily usage chart`,itemLabels:i}),s&&t?(0,I.jsx)(`div`,{className:`absolute inset-x-0 top-0`,style:{left:38},children:(0,I.jsx)(Ct,{bucket:s,index:t.column,count:e.length})}):null]})}function Tt({daily:e}){let t=e[0],n=e[e.length-1],r=t&&n?` · ${f(t.date)} → ${f(n.date)}`:``,i=Math.max(1,Math.ceil(e.length/_t));return(0,I.jsxs)(p,{role:`region`,"aria-label":`Daily usage`,className:`p-4`,children:[(0,I.jsx)(_,{title:`Daily usage`,action:(0,I.jsx)(`div`,{className:`console-mono flex flex-wrap items-center gap-x-3 gap-y-1 text-[10px] text-[var(--console-muted)]`,children:Q.map(e=>(0,I.jsxs)(`span`,{"data-testid":`overview-legend-token`,className:`flex items-center gap-1`,children:[(0,I.jsx)(`span`,{className:`size-2 rounded-[2px]`,style:{background:e.color},"aria-hidden":!0}),e.label]},e.key))})}),(0,I.jsxs)(`p`,{className:`console-mono mt-1 text-[10.5px] text-[var(--console-muted)]`,children:[`Stacked bars = token mix · Area below = daily cost`,r]}),e.length===0?(0,I.jsx)(`p`,{className:`console-mono mt-[14px] text-[11px] text-[var(--console-muted)]`,children:`No usage data`}):(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(wt,{daily:e}),(0,I.jsx)(St,{daily:e}),(0,I.jsx)(`div`,{style:{paddingLeft:38},children:(0,I.jsx)(`div`,{className:`console-mono mt-2 flex text-[10px] text-[var(--console-muted)]`,children:e.map((t,n)=>(0,I.jsx)(`span`,{className:`flex-1 text-center`,children:n%i===0||n===e.length-1?f(t.date):``},t.date))})})]}),(0,I.jsxs)(`table`,{className:`sr-only`,"aria-label":`Daily usage data`,children:[(0,I.jsx)(`thead`,{children:(0,I.jsxs)(`tr`,{children:[(0,I.jsx)(`th`,{children:`Date`}),(0,I.jsx)(`th`,{children:`Sessions`}),(0,I.jsx)(`th`,{children:`Messages`}),(0,I.jsx)(`th`,{children:`Tokens`}),(0,I.jsx)(`th`,{children:`Cost`})]})}),(0,I.jsx)(`tbody`,{children:e.map(e=>(0,I.jsxs)(`tr`,{children:[(0,I.jsx)(`td`,{children:f(e.date)}),(0,I.jsx)(`td`,{children:u(e.sessions)}),(0,I.jsx)(`td`,{children:u(e.messages)}),(0,I.jsx)(`td`,{children:u($(e))}),(0,I.jsx)(`td`,{children:a(e.cost)})]},e.date))})]})]})}function Et({project:e,agent:t,onAgentChange:n,window:r,agentCatalog:i,rangePreset:a,onRangeChange:o,onSelectCustom:s}){let[c,l]=(0,b.useState)(void 0),u=n?t:c,{dashboard:d,error:f,retry:p}=x(r,{project:e,agent:u});return(0,I.jsxs)(`div`,{"data-testid":`dashboard`,className:`mx-auto max-w-6xl space-y-4`,children:[(0,I.jsx)(He,{agent:u,onAgentChange:n?void 0:l,agentCatalog:i,scopeCounts:d?.scopeCounts,window:r,rangePreset:a,onRangeChange:o,onSelectCustom:s}),f?(0,I.jsx)(v,{title:`Couldn't load the dashboard.`,message:f,onRetry:()=>void p()}):null,d?(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(qe,{totals:d.totals,rangeDays:d.window.days}),(0,I.jsx)(Tt,{daily:d.dailyActivity}),(0,I.jsxs)(`div`,{className:`grid gap-4 lg:grid-cols-2`,children:[(0,I.jsx)(be,{perAgent:d.perAgent}),(0,I.jsx)(Be,{modelCost:d.modelCost,modelDistribution:d.modelDistribution,totals:d.totals})]})]}):f?null:(0,I.jsx)(Ye,{})]})}export{Et as OverviewScreen};