codesesh 1.0.6 → 1.0.8

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 (64) hide show
  1. package/README.md +1 -1
  2. package/dist/{chunk-COZSWVCH.js → chunk-AGUAXTKC.js} +2 -2
  3. package/dist/{chunk-XQDYKKRC.js → chunk-DHQPM5FF.js} +98 -14
  4. package/dist/chunk-DHQPM5FF.js.map +1 -0
  5. package/dist/{chunk-YZ6XCSVQ.js → chunk-KVTLNX7V.js} +3 -3
  6. package/dist/chunk-KVTLNX7V.js.map +1 -0
  7. package/dist/{chunk-A3MT6L6Z.js → chunk-L4G3LE7I.js} +25 -26
  8. package/dist/chunk-L4G3LE7I.js.map +1 -0
  9. package/dist/{chunk-L3DDWTYV.js → chunk-RBCCNCDO.js} +12 -10
  10. package/dist/chunk-RBCCNCDO.js.map +1 -0
  11. package/dist/{chunk-4QFNZCBR.js → chunk-V3HKVTIO.js} +3 -2
  12. package/dist/chunk-V3HKVTIO.js.map +1 -0
  13. package/dist/{chunk-4ND6AT6W.js → chunk-YLXHGL4S.js} +6 -6
  14. package/dist/chunk-YLXHGL4S.js.map +1 -0
  15. package/dist/{discovery-ADSQARBV.js → discovery-KEZQU6RL.js} +7 -5
  16. package/dist/index.js +42 -16
  17. package/dist/index.js.map +1 -1
  18. package/dist/project-identity-worker.js +4 -4
  19. package/dist/scan-refresh-worker.js +6 -6
  20. package/dist/search-index-worker.js +6 -6
  21. package/dist/session-detail-worker.js +6 -6
  22. package/dist/smart-tag-worker.js +3 -3
  23. package/dist/web/assets/CustomTimeWindowDialog-z5xtqkBF.js +1 -0
  24. package/dist/web/assets/DetailLanding-CpV0jLmT.js +1 -0
  25. package/dist/web/assets/DialogTitle-B8zPwJB8.js +1 -0
  26. package/dist/web/assets/InteractiveReceipt-Bsj37HtN.js +1 -0
  27. package/dist/web/assets/OverviewScreen-B9qZqEQA.js +1 -0
  28. package/dist/web/assets/PrismHighlighter-DWS6Nx_X.js +6 -0
  29. package/dist/web/assets/Projects-oY3KCgS4.js +1 -0
  30. package/dist/web/assets/SearchResultsPanel-BAManMmt.js +1 -0
  31. package/dist/web/assets/SessionDetail-KSgkmLV7.js +53 -0
  32. package/dist/web/assets/SmartTagChips-BMP9pPRw.js +1 -0
  33. package/dist/web/assets/api-CtZGdxlN.js +1 -0
  34. package/dist/web/assets/index-BSLHxV0w.css +1 -0
  35. package/dist/web/assets/index-DNw59Qsn.js +1423 -0
  36. package/dist/web/assets/jsx-runtime-D3jfb0Ew.js +1 -0
  37. package/dist/web/assets/panel-DcOuALYX.js +1 -0
  38. package/dist/web/assets/session-indexes-DKukxoe1.js +4 -0
  39. package/dist/web/assets/translate-CLoII3EO.js +2 -0
  40. package/dist/web/assets/utils-Dk_44zMo.js +1 -0
  41. package/dist/web/index.html +9 -8
  42. package/package.json +2 -2
  43. package/dist/chunk-4ND6AT6W.js.map +0 -1
  44. package/dist/chunk-4QFNZCBR.js.map +0 -1
  45. package/dist/chunk-A3MT6L6Z.js.map +0 -1
  46. package/dist/chunk-L3DDWTYV.js.map +0 -1
  47. package/dist/chunk-XQDYKKRC.js.map +0 -1
  48. package/dist/chunk-YZ6XCSVQ.js.map +0 -1
  49. package/dist/web/assets/CustomTimeWindowDialog-D2bx7uDv.js +0 -1
  50. package/dist/web/assets/InteractiveReceipt-BFpIdno8.js +0 -1
  51. package/dist/web/assets/OverviewScreen-D_KXfiJi.js +0 -1
  52. package/dist/web/assets/PrismHighlighter-BgVkYu_S.js +0 -6
  53. package/dist/web/assets/Projects-CN44UpuR.js +0 -1
  54. package/dist/web/assets/SearchResultsPanel-CWD01v-a.js +0 -1
  55. package/dist/web/assets/SessionDetail-D8taQ6Tl.js +0 -53
  56. package/dist/web/assets/api-B9lJtVbO.js +0 -1
  57. package/dist/web/assets/index-XpolWMY4.js +0 -1423
  58. package/dist/web/assets/index-xbEEMszv.css +0 -1
  59. package/dist/web/assets/jsx-runtime-B-hcVAMW.js +0 -1
  60. package/dist/web/assets/session-indexes-fib48ZKn.js +0 -4
  61. package/dist/web/assets/translate-Dmym1ZDl.js +0 -2
  62. package/dist/web/assets/utils-Bk66u8b3.js +0 -1
  63. /package/dist/{chunk-COZSWVCH.js.map → chunk-AGUAXTKC.js.map} +0 -0
  64. /package/dist/{discovery-ADSQARBV.js.map → discovery-KEZQU6RL.js.map} +0 -0
package/README.md CHANGED
@@ -24,7 +24,7 @@ Your browser will open at `http://localhost:4521` with all your sessions ready t
24
24
  - **Persistent Themes** — Choose light, dark, or system appearance and keep your UI preferences across sessions
25
25
  - **Structured Global Search** — Search titles, messages, tool output, and file paths with filters for agent, project, smart tag, tool, file activity, and cost
26
26
  - **UI languages** — English, Simplified Chinese, and Japanese. Follows your browser language by default; use the language selector in the top toolbar to switch and save your preference. Session content and code stay in their original language.
27
- - **Dashboard & Activity Trends** — See totals, daily activity, agent distribution, model usage, token trends, smart tags, bookmarks, and recent sessions
27
+ - **Dashboard & Activity Trends** — See totals, daily activity, agent distribution, model token shares for the selected date range, token trends, smart tags, bookmarks, and recent sessions
28
28
  - **Project Browse Mode** — Open a dedicated projects view with project-level metrics, sessions, and cross-agent drill-down
29
29
  - **Project & Nested Session Tree** — Group sessions by repository or project identity, while keeping subagent sessions under their parent
30
30
  - **Smart Tags** — Automatically label bugfix, refactoring, feature work, testing, docs, planning, git, build/deploy, and exploration sessions
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  appLogger
4
- } from "./chunk-4QFNZCBR.js";
4
+ } from "./chunk-V3HKVTIO.js";
5
5
 
6
6
  // src/worker-log-drain.ts
7
7
  import { randomUUID } from "crypto";
@@ -86,4 +86,4 @@ export {
86
86
  acknowledgeWorkerLogDrain,
87
87
  terminateWorkerAfterLogDrain
88
88
  };
89
- //# sourceMappingURL=chunk-COZSWVCH.js.map
89
+ //# sourceMappingURL=chunk-AGUAXTKC.js.map
@@ -8,13 +8,13 @@ import {
8
8
  normalizeProjectDirectory,
9
9
  normalizeProjectScopePath,
10
10
  realFs
11
- } from "./chunk-YZ6XCSVQ.js";
11
+ } from "./chunk-KVTLNX7V.js";
12
12
  import {
13
13
  SessionScanError,
14
14
  createAgentScanFailure,
15
15
  createRegisteredAgents,
16
16
  reportAgentScanFailure
17
- } from "./chunk-L3DDWTYV.js";
17
+ } from "./chunk-RBCCNCDO.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-4ND6AT6W.js";
44
+ } from "./chunk-YLXHGL4S.js";
45
45
 
46
- // ../core/dist/chunk-N4DVJ6NZ.mjs
47
- var CACHE_SCHEMA_VERSION = 33;
46
+ // ../core/dist/chunk-SU7BSXP6.mjs
47
+ var CACHE_SCHEMA_VERSION = 34;
48
48
 
49
- // ../core/dist/chunk-GNQUMU2M.mjs
49
+ // ../core/dist/chunk-DEN6EOVG.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),
@@ -1226,6 +1240,11 @@ function recreateProjectGroupsView(db) {
1226
1240
  db.exec("DROP VIEW IF EXISTS project_groups_v");
1227
1241
  createProjectGroupsView(db);
1228
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
+ }
1229
1248
  function runSearchIndexWrite(db, rebuild, write, transaction = "immediate") {
1230
1249
  const execute = () => {
1231
1250
  if (rebuild) {
@@ -2042,6 +2061,7 @@ function ensureCacheSchema(db, dbPath) {
2042
2061
  }
2043
2062
  if (currentVersion === 0 && !hasAnyCacheSchema(db)) {
2044
2063
  createLatestCacheSchema(db);
2064
+ createUserActivityIndex(db);
2045
2065
  createSearchStateIndex(db);
2046
2066
  setCacheSchemaVersion(db);
2047
2067
  runCacheContentMigrations(db);
@@ -2132,10 +2152,20 @@ function ensureCacheSchema(db, dbPath) {
2132
2152
  db2.exec("DROP INDEX IF EXISTS idx_messages_usage_time");
2133
2153
  createMessageUsageIndex(db2);
2134
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
+ }
2135
2164
  }
2136
2165
  ]
2137
2166
  });
2138
2167
  createLatestCacheSchema(db);
2168
+ createUserActivityIndex(db);
2139
2169
  createSearchStateIndex(db);
2140
2170
  const userVersion = getUserVersion(db);
2141
2171
  if (userVersion < CACHE_SCHEMA_VERSION) {
@@ -2499,6 +2529,7 @@ function updateMessageContent(hash, content) {
2499
2529
  updateField(hash, content.partsFormatVersion);
2500
2530
  updateField(hash, content.subagentId);
2501
2531
  updateField(hash, content.nickname);
2532
+ if (content.automated) updateField(hash, "automated");
2502
2533
  }
2503
2534
  function initialMessageCursorDigest(reference) {
2504
2535
  const hash = createHash("sha256");
@@ -2630,9 +2661,10 @@ function prepareSessionMaterializationWriter(db, agentName) {
2630
2661
  content_chain_digest,
2631
2662
  subagent_id,
2632
2663
  nickname,
2664
+ automated,
2633
2665
  content_text,
2634
2666
  tool_metadata_json
2635
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
2667
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
2636
2668
  ON CONFLICT(agent_name, session_id, message_index) DO UPDATE SET
2637
2669
  message_id = excluded.message_id,
2638
2670
  role = excluded.role,
@@ -2650,6 +2682,7 @@ function prepareSessionMaterializationWriter(db, agentName) {
2650
2682
  content_chain_digest = excluded.content_chain_digest,
2651
2683
  subagent_id = excluded.subagent_id,
2652
2684
  nickname = excluded.nickname,
2685
+ automated = excluded.automated,
2653
2686
  content_text = excluded.content_text,
2654
2687
  tool_metadata_json = excluded.tool_metadata_json
2655
2688
  `);
@@ -2704,6 +2737,7 @@ function prepareSessionMaterializationWriter(db, agentName) {
2704
2737
  contentChainDigest,
2705
2738
  message.subagentId ?? null,
2706
2739
  message.nickname ?? null,
2740
+ message.automated ?? 0,
2707
2741
  message.contentText,
2708
2742
  message.toolMetadataJson ?? null
2709
2743
  );
@@ -4063,7 +4097,7 @@ function matchesSessionQueryScope(session, scope) {
4063
4097
  return !scope?.projectScope || matchesProjectScope(session, scope.projectScope);
4064
4098
  }
4065
4099
 
4066
- // ../core/dist/chunk-KTS67TNO.mjs
4100
+ // ../core/dist/chunk-CXKZFUE7.mjs
4067
4101
  import { existsSync as existsSync2, rmSync, unlinkSync } from "fs";
4068
4102
  import { availableParallelism } from "os";
4069
4103
  import { Worker } from "worker_threads";
@@ -4356,7 +4390,8 @@ function readCachedSessionMessageRows(db, agentName, sessionId, startIndex) {
4356
4390
  parts_format_version,
4357
4391
  content_chain_digest,
4358
4392
  subagent_id,
4359
- nickname
4393
+ nickname,
4394
+ automated
4360
4395
  FROM messages
4361
4396
  WHERE agent_name = ? AND session_id = ? AND message_index >= ?
4362
4397
  ORDER BY message_index
@@ -6058,6 +6093,54 @@ function commitDurableSessionPublication(publication, loadSessionData, searchOpt
6058
6093
  reportPublicationStage(detail, "committed", searchOptions);
6059
6094
  return { status: "committed", publicationId, searchIndex };
6060
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
+ }
6061
6144
 
6062
6145
  export {
6063
6146
  closeCacheStorage,
@@ -6108,6 +6191,7 @@ export {
6108
6191
  listCachedProjectGroups,
6109
6192
  listDashboardCostFacts,
6110
6193
  listModelCostDistribution,
6111
- commitDurableSessionPublication
6194
+ commitDurableSessionPublication,
6195
+ listDashboardActiveHours
6112
6196
  };
6113
- //# sourceMappingURL=chunk-XQDYKKRC.js.map
6197
+ //# sourceMappingURL=chunk-DHQPM5FF.js.map