codesesh 1.0.5 → 1.0.7

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 (54) hide show
  1. package/README.md +1 -0
  2. package/dist/{chunk-PAP2Q3WV.js → chunk-DE6UJMOY.js} +2 -2
  3. package/dist/{chunk-YQFEGFWD.js → chunk-EYZ73CYP.js} +2 -2
  4. package/dist/{chunk-NBJJGH5P.js → chunk-QHWSZFRM.js} +118 -74
  5. package/dist/chunk-QHWSZFRM.js.map +1 -0
  6. package/dist/{chunk-WUYSZAYR.js → chunk-SII3M66U.js} +13 -6
  7. package/dist/chunk-SII3M66U.js.map +1 -0
  8. package/dist/{chunk-TS3IWH5U.js → chunk-VVCSQU5B.js} +120 -20
  9. package/dist/chunk-VVCSQU5B.js.map +1 -0
  10. package/dist/{chunk-FCYCBGEL.js → chunk-WIWK7BXS.js} +3 -3
  11. package/dist/{chunk-XKZSX5BM.js → chunk-YEQTRALH.js} +3 -3
  12. package/dist/{discovery-D23RV7FY.js → discovery-4WAEYSTR.js} +7 -5
  13. package/dist/index.js +217 -150
  14. package/dist/index.js.map +1 -1
  15. package/dist/project-identity-worker.js +4 -4
  16. package/dist/scan-refresh-worker.js +6 -6
  17. package/dist/search-index-worker.js +6 -6
  18. package/dist/session-detail-worker.js +6 -6
  19. package/dist/smart-tag-worker.js +3 -3
  20. package/dist/web/assets/CustomTimeWindowDialog-CVURkiVO.js +1 -0
  21. package/dist/web/assets/InteractiveReceipt-DGC-xV7U.js +1 -0
  22. package/dist/web/assets/OverviewScreen-DoXrZ5qp.js +1 -0
  23. package/dist/web/assets/{PrismHighlighter-LWITDffT.js → PrismHighlighter-02695Lmx.js} +1 -1
  24. package/dist/web/assets/Projects-DZiYh6hp.js +1 -0
  25. package/dist/web/assets/SearchResultsPanel-CAQe8Di0.js +1 -0
  26. package/dist/web/assets/SessionDetail-Da8EBygt.js +53 -0
  27. package/dist/web/assets/api-ToidoNW6.js +1 -0
  28. package/dist/web/assets/index-Bl8pbRFj.js +1423 -0
  29. package/dist/web/assets/index-CRI1m3xN.css +1 -0
  30. package/dist/web/assets/session-indexes-D5gps7K8.js +4 -0
  31. package/dist/web/assets/translate-BDFu3ZiK.js +2 -0
  32. package/dist/web/assets/utils-BIZi2up3.js +1 -0
  33. package/dist/web/index.html +7 -7
  34. package/package.json +3 -3
  35. package/dist/chunk-NBJJGH5P.js.map +0 -1
  36. package/dist/chunk-TS3IWH5U.js.map +0 -1
  37. package/dist/chunk-WUYSZAYR.js.map +0 -1
  38. package/dist/web/assets/CustomTimeWindowDialog-C9XTZRm0.js +0 -1
  39. package/dist/web/assets/InteractiveReceipt-Sca1smpv.js +0 -1
  40. package/dist/web/assets/OverviewScreen-Vq6BQR9_.js +0 -1
  41. package/dist/web/assets/Projects-CwicV3Dk.js +0 -1
  42. package/dist/web/assets/SearchResultsPanel-DCO0Ak0c.js +0 -1
  43. package/dist/web/assets/SessionDetail-mdmTQgo1.js +0 -53
  44. package/dist/web/assets/api-CXVT9XcZ.js +0 -1
  45. package/dist/web/assets/contract-BS78VBCV.js +0 -2
  46. package/dist/web/assets/index-C5cyw58A.css +0 -1
  47. package/dist/web/assets/index-H2cT-6c6.js +0 -1423
  48. package/dist/web/assets/session-indexes-yyyWpKLf.js +0 -4
  49. package/dist/web/assets/utils-C7BqyxxV.js +0 -1
  50. /package/dist/{chunk-PAP2Q3WV.js.map → chunk-DE6UJMOY.js.map} +0 -0
  51. /package/dist/{chunk-YQFEGFWD.js.map → chunk-EYZ73CYP.js.map} +0 -0
  52. /package/dist/{chunk-FCYCBGEL.js.map → chunk-WIWK7BXS.js.map} +0 -0
  53. /package/dist/{chunk-XKZSX5BM.js.map → chunk-YEQTRALH.js.map} +0 -0
  54. /package/dist/{discovery-D23RV7FY.js.map → discovery-4WAEYSTR.js.map} +0 -0
@@ -8,13 +8,13 @@ import {
8
8
  normalizeProjectDirectory,
9
9
  normalizeProjectScopePath,
10
10
  realFs
11
- } from "./chunk-XKZSX5BM.js";
11
+ } from "./chunk-YEQTRALH.js";
12
12
  import {
13
13
  SessionScanError,
14
14
  createAgentScanFailure,
15
15
  createRegisteredAgents,
16
16
  reportAgentScanFailure
17
- } from "./chunk-WUYSZAYR.js";
17
+ } from "./chunk-SII3M66U.js";
18
18
  import {
19
19
  SMART_TAG_CLASSIFIER_REVISION,
20
20
  assertIdentifiedSessionHead,
@@ -41,12 +41,12 @@ import {
41
41
  setUserVersion,
42
42
  sortSessionsByActivity,
43
43
  tableExists
44
- } from "./chunk-NBJJGH5P.js";
44
+ } from "./chunk-QHWSZFRM.js";
45
45
 
46
- // ../core/dist/chunk-XGIUX4DD.mjs
47
- var CACHE_SCHEMA_VERSION = 32;
46
+ // ../core/dist/chunk-SU7BSXP6.mjs
47
+ var CACHE_SCHEMA_VERSION = 34;
48
48
 
49
- // ../core/dist/chunk-5XQWZQGH.mjs
49
+ // ../core/dist/chunk-ETPINEFU.mjs
50
50
  import { existsSync } from "fs";
51
51
  import { join } from "path";
52
52
  import { homedir } from "os";
@@ -243,6 +243,15 @@ function discardPublicationStaging(db, publicationId, agentName) {
243
243
  deletePublicationPayloads(db, publicationId, agentName);
244
244
  }
245
245
  var CACHE_CONTENT_MIGRATIONS = [
246
+ {
247
+ key: "pi_automated_messages_v1",
248
+ apply(db) {
249
+ if (!tableExists(db, "sessions") || !tableExists(db, "pending_reindex")) return;
250
+ db.exec(
251
+ "INSERT OR IGNORE INTO pending_reindex(agent_name, session_id) SELECT agent_name, session_id FROM sessions WHERE agent_name = 'pi'"
252
+ );
253
+ }
254
+ },
246
255
  {
247
256
  key: "codex_exec_decode_migrated_v3",
248
257
  apply(db) {
@@ -298,7 +307,8 @@ function messageCursorContentFromCachedRow(row) {
298
307
  partsJson: String(row.parts_json),
299
308
  partsFormatVersion: row.parts_format_version,
300
309
  subagentId: row.subagent_id,
301
- nickname: row.nickname
310
+ nickname: row.nickname,
311
+ automated: row.automated
302
312
  };
303
313
  }
304
314
  function messageCursorContentFromStructuredRecord(record) {
@@ -317,7 +327,8 @@ function messageCursorContentFromStructuredRecord(record) {
317
327
  partsJson: record.partsJson,
318
328
  partsFormatVersion: MESSAGE_PARTS_FORMAT_VERSION,
319
329
  subagentId: record.subagentId,
320
- nickname: record.nickname
330
+ nickname: record.nickname,
331
+ automated: record.automated
321
332
  };
322
333
  }
323
334
  function stringifyOptionalJson(value) {
@@ -575,7 +586,8 @@ function messageMetadataFromBackfillRow(row) {
575
586
  model: row.model ?? null,
576
587
  provider: row.provider ?? null,
577
588
  subagent_id: row.subagent_id ?? void 0,
578
- nickname: row.nickname ?? void 0
589
+ nickname: row.nickname ?? void 0,
590
+ ...row.automated ? { automated: true } : {}
579
591
  };
580
592
  }
581
593
  function messageMetadataFromCachedRow(row) {
@@ -738,6 +750,7 @@ function normalizeMessages(session) {
738
750
  partsJson: JSON.stringify(message.parts),
739
751
  subagentId: message.subagent_id ?? null,
740
752
  nickname: message.nickname ?? null,
753
+ automated: message.automated ? 1 : 0,
741
754
  contentText: buildMessageText(message),
742
755
  toolMetadataJson: toolMetadata.length > 0 ? JSON.stringify(toolMetadata) : null,
743
756
  toolNames: toolNamesFromMessage(message)
@@ -858,6 +871,7 @@ function createSessionTables(db) {
858
871
  content_chain_digest TEXT,
859
872
  subagent_id TEXT,
860
873
  nickname TEXT,
874
+ automated INTEGER NOT NULL DEFAULT 0,
861
875
  content_text TEXT NOT NULL,
862
876
  tool_metadata_json TEXT,
863
877
  PRIMARY KEY (agent_name, session_id, message_index),
@@ -868,7 +882,14 @@ function createSessionTables(db) {
868
882
 
869
883
  CREATE INDEX IF NOT EXISTS idx_messages_session
870
884
  ON messages(agent_name, session_id, message_index);
871
-
885
+ `);
886
+ createMessageUsageIndex(db);
887
+ createSessionModelCostTable(db);
888
+ createSessionCostSummaryTable(db);
889
+ createMessageToolTables(db);
890
+ }
891
+ function createMessageUsageIndex(db) {
892
+ db.exec(`
872
893
  CREATE INDEX IF NOT EXISTS idx_messages_usage_time
873
894
  ON messages(
874
895
  CASE
@@ -876,12 +897,14 @@ function createSessionTables(db) {
876
897
  WHEN time_created > 0 THEN time_created
877
898
  END,
878
899
  agent_name,
879
- session_id
900
+ session_id,
901
+ message_index,
902
+ model,
903
+ tokens_json,
904
+ cost,
905
+ cost_source
880
906
  );
881
907
  `);
882
- createSessionModelCostTable(db);
883
- createSessionCostSummaryTable(db);
884
- createMessageToolTables(db);
885
908
  }
886
909
  function createSessionModelCostTable(db) {
887
910
  db.exec(`
@@ -1217,6 +1240,11 @@ function recreateProjectGroupsView(db) {
1217
1240
  db.exec("DROP VIEW IF EXISTS project_groups_v");
1218
1241
  createProjectGroupsView(db);
1219
1242
  }
1243
+ function createUserActivityIndex(db) {
1244
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_messages_user_activity
1245
+ ON messages(time_created, agent_name, session_id)
1246
+ WHERE role = 'user' AND automated = 0 AND time_created > 0`);
1247
+ }
1220
1248
  function runSearchIndexWrite(db, rebuild, write, transaction = "immediate") {
1221
1249
  const execute = () => {
1222
1250
  if (rebuild) {
@@ -2033,6 +2061,7 @@ function ensureCacheSchema(db, dbPath) {
2033
2061
  }
2034
2062
  if (currentVersion === 0 && !hasAnyCacheSchema(db)) {
2035
2063
  createLatestCacheSchema(db);
2064
+ createUserActivityIndex(db);
2036
2065
  createSearchStateIndex(db);
2037
2066
  setCacheSchemaVersion(db);
2038
2067
  runCacheContentMigrations(db);
@@ -2116,10 +2145,27 @@ function ensureCacheSchema(db, dbPath) {
2116
2145
  { version: 29, migrate: addSessionUsageSummary },
2117
2146
  { version: 30, destructive: true, migrate: dropDerivedSessionSlug },
2118
2147
  { version: 31, migrate: dropDurablePublicationStaging },
2119
- { version: 32, migrate: dropLegacyCacheTables }
2148
+ { version: 32, migrate: dropLegacyCacheTables },
2149
+ {
2150
+ version: 33,
2151
+ migrate(db2) {
2152
+ db2.exec("DROP INDEX IF EXISTS idx_messages_usage_time");
2153
+ createMessageUsageIndex(db2);
2154
+ }
2155
+ },
2156
+ {
2157
+ version: 34,
2158
+ migrate(db2) {
2159
+ if (!columnExists(db2, "messages", "automated")) {
2160
+ db2.exec("ALTER TABLE messages ADD COLUMN automated INTEGER NOT NULL DEFAULT 0");
2161
+ }
2162
+ createUserActivityIndex(db2);
2163
+ }
2164
+ }
2120
2165
  ]
2121
2166
  });
2122
2167
  createLatestCacheSchema(db);
2168
+ createUserActivityIndex(db);
2123
2169
  createSearchStateIndex(db);
2124
2170
  const userVersion = getUserVersion(db);
2125
2171
  if (userVersion < CACHE_SCHEMA_VERSION) {
@@ -2483,6 +2529,7 @@ function updateMessageContent(hash, content) {
2483
2529
  updateField(hash, content.partsFormatVersion);
2484
2530
  updateField(hash, content.subagentId);
2485
2531
  updateField(hash, content.nickname);
2532
+ if (content.automated) updateField(hash, "automated");
2486
2533
  }
2487
2534
  function initialMessageCursorDigest(reference) {
2488
2535
  const hash = createHash("sha256");
@@ -2614,9 +2661,10 @@ function prepareSessionMaterializationWriter(db, agentName) {
2614
2661
  content_chain_digest,
2615
2662
  subagent_id,
2616
2663
  nickname,
2664
+ automated,
2617
2665
  content_text,
2618
2666
  tool_metadata_json
2619
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
2667
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
2620
2668
  ON CONFLICT(agent_name, session_id, message_index) DO UPDATE SET
2621
2669
  message_id = excluded.message_id,
2622
2670
  role = excluded.role,
@@ -2634,6 +2682,7 @@ function prepareSessionMaterializationWriter(db, agentName) {
2634
2682
  content_chain_digest = excluded.content_chain_digest,
2635
2683
  subagent_id = excluded.subagent_id,
2636
2684
  nickname = excluded.nickname,
2685
+ automated = excluded.automated,
2637
2686
  content_text = excluded.content_text,
2638
2687
  tool_metadata_json = excluded.tool_metadata_json
2639
2688
  `);
@@ -2688,6 +2737,7 @@ function prepareSessionMaterializationWriter(db, agentName) {
2688
2737
  contentChainDigest,
2689
2738
  message.subagentId ?? null,
2690
2739
  message.nickname ?? null,
2740
+ message.automated ?? 0,
2691
2741
  message.contentText,
2692
2742
  message.toolMetadataJson ?? null
2693
2743
  );
@@ -4047,7 +4097,7 @@ function matchesSessionQueryScope(session, scope) {
4047
4097
  return !scope?.projectScope || matchesProjectScope(session, scope.projectScope);
4048
4098
  }
4049
4099
 
4050
- // ../core/dist/chunk-7GIJYQP5.mjs
4100
+ // ../core/dist/chunk-COUPH7S3.mjs
4051
4101
  import { existsSync as existsSync2, rmSync, unlinkSync } from "fs";
4052
4102
  import { availableParallelism } from "os";
4053
4103
  import { Worker } from "worker_threads";
@@ -4340,7 +4390,8 @@ function readCachedSessionMessageRows(db, agentName, sessionId, startIndex) {
4340
4390
  parts_format_version,
4341
4391
  content_chain_digest,
4342
4392
  subagent_id,
4343
- nickname
4393
+ nickname,
4394
+ automated
4344
4395
  FROM messages
4345
4396
  WHERE agent_name = ? AND session_id = ? AND message_index >= ?
4346
4397
  ORDER BY message_index
@@ -6042,6 +6093,54 @@ function commitDurableSessionPublication(publication, loadSessionData, searchOpt
6042
6093
  reportPublicationStage(detail, "committed", searchOptions);
6043
6094
  return { status: "committed", publicationId, searchIndex };
6044
6095
  }
6096
+ function listDashboardActiveHours(options, queryScope) {
6097
+ if (!hasCacheStorage()) return null;
6098
+ const formatter = new Intl.DateTimeFormat("en-US", {
6099
+ timeZone: options.timeZone,
6100
+ weekday: "short",
6101
+ hour: "2-digit",
6102
+ hourCycle: "h23"
6103
+ });
6104
+ const weekdays = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
6105
+ const { clauses, params } = buildSessionQueryScopeFilters(queryScope);
6106
+ clauses.push(
6107
+ "s.publication_id IS NULL",
6108
+ "s.parent_agent_name IS NULL AND s.parent_session_id IS NULL",
6109
+ "m.role = 'user' AND m.automated = 0 AND m.time_created > 0",
6110
+ "m.time_created <= ?"
6111
+ );
6112
+ params.push(options.to);
6113
+ if (options.from != null) {
6114
+ clauses.push("m.time_created >= ?");
6115
+ params.push(options.from);
6116
+ }
6117
+ if (options.agent) {
6118
+ clauses.push("s.agent_name = ?");
6119
+ params.push(options.agent);
6120
+ }
6121
+ if (options.projectKind != null || options.projectKey != null) {
6122
+ clauses.push("s.project_identity_kind = ? AND s.project_identity_key = ?");
6123
+ params.push(options.projectKind ?? null, options.projectKey ?? null);
6124
+ }
6125
+ const read = withCacheDbReadOnly((db) => {
6126
+ const counts = Array(84).fill(0);
6127
+ const rows = db.prepare(`
6128
+ SELECT m.time_created FROM messages m INDEXED BY idx_messages_user_activity
6129
+ JOIN sessions s ON s.agent_name = m.agent_name AND s.session_id = m.session_id
6130
+ WHERE ${clauses.join(" AND ")}
6131
+ `).iterate(...params);
6132
+ for (const row of rows) {
6133
+ const time = Number(row.time_created);
6134
+ if (Number.isNaN(new Date(time).getTime())) continue;
6135
+ const parts = formatter.formatToParts(time);
6136
+ const weekday = weekdays.indexOf(parts.find((part) => part.type === "weekday").value);
6137
+ const hour = Number(parts.find((part) => part.type === "hour").value);
6138
+ counts[weekday * 12 + Math.floor(hour / 2)] += 1;
6139
+ }
6140
+ return { timeZone: options.timeZone, counts };
6141
+ });
6142
+ return read.status === "success" ? read.value : null;
6143
+ }
6045
6144
 
6046
6145
  export {
6047
6146
  closeCacheStorage,
@@ -6092,6 +6191,7 @@ export {
6092
6191
  listCachedProjectGroups,
6093
6192
  listDashboardCostFacts,
6094
6193
  listModelCostDistribution,
6095
- commitDurableSessionPublication
6194
+ commitDurableSessionPublication,
6195
+ listDashboardActiveHours
6096
6196
  };
6097
- //# sourceMappingURL=chunk-TS3IWH5U.js.map
6197
+ //# sourceMappingURL=chunk-VVCSQU5B.js.map