@askexenow/exe-os 0.9.12 → 0.9.13

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 (67) hide show
  1. package/dist/bin/backfill-conversations.js +22 -1
  2. package/dist/bin/backfill-responses.js +22 -1
  3. package/dist/bin/backfill-vectors.js +22 -1
  4. package/dist/bin/cleanup-stale-review-tasks.js +22 -1
  5. package/dist/bin/cli.js +22 -1
  6. package/dist/bin/exe-assign.js +22 -1
  7. package/dist/bin/exe-boot.js +22 -1
  8. package/dist/bin/exe-dispatch.js +22 -1
  9. package/dist/bin/exe-doctor.js +22 -1
  10. package/dist/bin/exe-export-behaviors.js +22 -1
  11. package/dist/bin/exe-forget.js +22 -1
  12. package/dist/bin/exe-gateway.js +22 -1
  13. package/dist/bin/exe-heartbeat.js +22 -1
  14. package/dist/bin/exe-kill.js +22 -1
  15. package/dist/bin/exe-launch-agent.js +22 -1
  16. package/dist/bin/exe-link.js +22 -1
  17. package/dist/bin/exe-pending-messages.js +22 -1
  18. package/dist/bin/exe-pending-notifications.js +22 -1
  19. package/dist/bin/exe-pending-reviews.js +22 -1
  20. package/dist/bin/exe-rename.js +22 -1
  21. package/dist/bin/exe-review.js +22 -1
  22. package/dist/bin/exe-search.js +22 -1
  23. package/dist/bin/exe-session-cleanup.js +22 -1
  24. package/dist/bin/exe-start-codex.js +22 -1
  25. package/dist/bin/exe-start-opencode.js +22 -1
  26. package/dist/bin/exe-status.js +22 -1
  27. package/dist/bin/exe-team.js +22 -1
  28. package/dist/bin/git-sweep.js +22 -1
  29. package/dist/bin/graph-backfill.js +22 -1
  30. package/dist/bin/graph-export.js +22 -1
  31. package/dist/bin/scan-tasks.js +22 -1
  32. package/dist/bin/setup.js +22 -1
  33. package/dist/bin/shard-migrate.js +22 -1
  34. package/dist/bin/wiki-sync.js +22 -1
  35. package/dist/gateway/index.js +22 -1
  36. package/dist/hooks/bug-report-worker.js +22 -1
  37. package/dist/hooks/codex-stop-task-finalizer.js +22 -1
  38. package/dist/hooks/commit-complete.js +22 -1
  39. package/dist/hooks/error-recall.js +22 -1
  40. package/dist/hooks/ingest-worker.js +22 -1
  41. package/dist/hooks/ingest.js +3345 -232
  42. package/dist/hooks/instructions-loaded.js +22 -1
  43. package/dist/hooks/notification.js +22 -1
  44. package/dist/hooks/post-compact.js +22 -1
  45. package/dist/hooks/pre-compact.js +22 -1
  46. package/dist/hooks/pre-tool-use.js +22 -1
  47. package/dist/hooks/prompt-ingest-worker.js +22 -1
  48. package/dist/hooks/prompt-submit.js +1700 -1396
  49. package/dist/hooks/response-ingest-worker.js +22 -1
  50. package/dist/hooks/session-end.js +345 -187
  51. package/dist/hooks/session-start.js +304 -15
  52. package/dist/hooks/stop.js +22 -1
  53. package/dist/hooks/subagent-stop.js +22 -1
  54. package/dist/hooks/summary-worker.js +22 -1
  55. package/dist/index.js +22 -1
  56. package/dist/lib/cloud-sync.js +22 -1
  57. package/dist/lib/database.js +22 -1
  58. package/dist/lib/db.js +22 -1
  59. package/dist/lib/device-registry.js +22 -1
  60. package/dist/lib/exe-daemon.js +22 -1
  61. package/dist/lib/hybrid-search.js +22 -1
  62. package/dist/lib/schedules.js +22 -1
  63. package/dist/lib/store.js +22 -1
  64. package/dist/mcp/server.js +126 -1
  65. package/dist/runtime/index.js +22 -1
  66. package/dist/tui/App.js +22 -1
  67. package/package.json +1 -1
@@ -1742,12 +1742,26 @@ async function ensureSchema() {
1742
1742
  session_name TEXT,
1743
1743
  task_id TEXT,
1744
1744
  project_name TEXT,
1745
- started_at TEXT NOT NULL
1745
+ started_at TEXT NOT NULL,
1746
+ cache_cold_count INTEGER NOT NULL DEFAULT 0
1746
1747
  );
1747
1748
 
1748
1749
  CREATE INDEX IF NOT EXISTS idx_session_agent_map_agent
1749
1750
  ON session_agent_map(agent_id);
1750
1751
  `);
1752
+ await client.executeMultiple(`
1753
+ CREATE TABLE IF NOT EXISTS agent_file_reads (
1754
+ session_uuid TEXT NOT NULL,
1755
+ agent_id TEXT NOT NULL,
1756
+ file_path TEXT NOT NULL,
1757
+ read_at TEXT NOT NULL,
1758
+ commit_hash TEXT,
1759
+ PRIMARY KEY (session_uuid, file_path)
1760
+ );
1761
+
1762
+ CREATE INDEX IF NOT EXISTS idx_agent_file_reads_agent_read_at
1763
+ ON agent_file_reads(agent_id, read_at);
1764
+ `);
1751
1765
  try {
1752
1766
  const mapCount = await client.execute({ sql: `SELECT COUNT(*) as cnt FROM session_agent_map`, args: [] });
1753
1767
  if (Number(mapCount.rows[0]?.cnt ?? 0) === 0) {
@@ -1762,6 +1776,13 @@ async function ensureSchema() {
1762
1776
  }
1763
1777
  } catch {
1764
1778
  }
1779
+ try {
1780
+ await client.execute({
1781
+ sql: `ALTER TABLE session_agent_map ADD COLUMN cache_cold_count INTEGER NOT NULL DEFAULT 0`,
1782
+ args: []
1783
+ });
1784
+ } catch {
1785
+ }
1765
1786
  try {
1766
1787
  await client.execute({
1767
1788
  sql: `ALTER TABLE tasks ADD COLUMN budget_tokens INTEGER`,
@@ -1743,12 +1743,26 @@ async function ensureSchema() {
1743
1743
  session_name TEXT,
1744
1744
  task_id TEXT,
1745
1745
  project_name TEXT,
1746
- started_at TEXT NOT NULL
1746
+ started_at TEXT NOT NULL,
1747
+ cache_cold_count INTEGER NOT NULL DEFAULT 0
1747
1748
  );
1748
1749
 
1749
1750
  CREATE INDEX IF NOT EXISTS idx_session_agent_map_agent
1750
1751
  ON session_agent_map(agent_id);
1751
1752
  `);
1753
+ await client.executeMultiple(`
1754
+ CREATE TABLE IF NOT EXISTS agent_file_reads (
1755
+ session_uuid TEXT NOT NULL,
1756
+ agent_id TEXT NOT NULL,
1757
+ file_path TEXT NOT NULL,
1758
+ read_at TEXT NOT NULL,
1759
+ commit_hash TEXT,
1760
+ PRIMARY KEY (session_uuid, file_path)
1761
+ );
1762
+
1763
+ CREATE INDEX IF NOT EXISTS idx_agent_file_reads_agent_read_at
1764
+ ON agent_file_reads(agent_id, read_at);
1765
+ `);
1752
1766
  try {
1753
1767
  const mapCount = await client.execute({ sql: `SELECT COUNT(*) as cnt FROM session_agent_map`, args: [] });
1754
1768
  if (Number(mapCount.rows[0]?.cnt ?? 0) === 0) {
@@ -1763,6 +1777,13 @@ async function ensureSchema() {
1763
1777
  }
1764
1778
  } catch {
1765
1779
  }
1780
+ try {
1781
+ await client.execute({
1782
+ sql: `ALTER TABLE session_agent_map ADD COLUMN cache_cold_count INTEGER NOT NULL DEFAULT 0`,
1783
+ args: []
1784
+ });
1785
+ } catch {
1786
+ }
1766
1787
  try {
1767
1788
  await client.execute({
1768
1789
  sql: `ALTER TABLE tasks ADD COLUMN budget_tokens INTEGER`,
@@ -1743,12 +1743,26 @@ async function ensureSchema() {
1743
1743
  session_name TEXT,
1744
1744
  task_id TEXT,
1745
1745
  project_name TEXT,
1746
- started_at TEXT NOT NULL
1746
+ started_at TEXT NOT NULL,
1747
+ cache_cold_count INTEGER NOT NULL DEFAULT 0
1747
1748
  );
1748
1749
 
1749
1750
  CREATE INDEX IF NOT EXISTS idx_session_agent_map_agent
1750
1751
  ON session_agent_map(agent_id);
1751
1752
  `);
1753
+ await client.executeMultiple(`
1754
+ CREATE TABLE IF NOT EXISTS agent_file_reads (
1755
+ session_uuid TEXT NOT NULL,
1756
+ agent_id TEXT NOT NULL,
1757
+ file_path TEXT NOT NULL,
1758
+ read_at TEXT NOT NULL,
1759
+ commit_hash TEXT,
1760
+ PRIMARY KEY (session_uuid, file_path)
1761
+ );
1762
+
1763
+ CREATE INDEX IF NOT EXISTS idx_agent_file_reads_agent_read_at
1764
+ ON agent_file_reads(agent_id, read_at);
1765
+ `);
1752
1766
  try {
1753
1767
  const mapCount = await client.execute({ sql: `SELECT COUNT(*) as cnt FROM session_agent_map`, args: [] });
1754
1768
  if (Number(mapCount.rows[0]?.cnt ?? 0) === 0) {
@@ -1763,6 +1777,13 @@ async function ensureSchema() {
1763
1777
  }
1764
1778
  } catch {
1765
1779
  }
1780
+ try {
1781
+ await client.execute({
1782
+ sql: `ALTER TABLE session_agent_map ADD COLUMN cache_cold_count INTEGER NOT NULL DEFAULT 0`,
1783
+ args: []
1784
+ });
1785
+ } catch {
1786
+ }
1766
1787
  try {
1767
1788
  await client.execute({
1768
1789
  sql: `ALTER TABLE tasks ADD COLUMN budget_tokens INTEGER`,
@@ -2236,12 +2236,26 @@ async function ensureSchema() {
2236
2236
  session_name TEXT,
2237
2237
  task_id TEXT,
2238
2238
  project_name TEXT,
2239
- started_at TEXT NOT NULL
2239
+ started_at TEXT NOT NULL,
2240
+ cache_cold_count INTEGER NOT NULL DEFAULT 0
2240
2241
  );
2241
2242
 
2242
2243
  CREATE INDEX IF NOT EXISTS idx_session_agent_map_agent
2243
2244
  ON session_agent_map(agent_id);
2244
2245
  `);
2246
+ await client.executeMultiple(`
2247
+ CREATE TABLE IF NOT EXISTS agent_file_reads (
2248
+ session_uuid TEXT NOT NULL,
2249
+ agent_id TEXT NOT NULL,
2250
+ file_path TEXT NOT NULL,
2251
+ read_at TEXT NOT NULL,
2252
+ commit_hash TEXT,
2253
+ PRIMARY KEY (session_uuid, file_path)
2254
+ );
2255
+
2256
+ CREATE INDEX IF NOT EXISTS idx_agent_file_reads_agent_read_at
2257
+ ON agent_file_reads(agent_id, read_at);
2258
+ `);
2245
2259
  try {
2246
2260
  const mapCount = await client.execute({ sql: `SELECT COUNT(*) as cnt FROM session_agent_map`, args: [] });
2247
2261
  if (Number(mapCount.rows[0]?.cnt ?? 0) === 0) {
@@ -2256,6 +2270,13 @@ async function ensureSchema() {
2256
2270
  }
2257
2271
  } catch {
2258
2272
  }
2273
+ try {
2274
+ await client.execute({
2275
+ sql: `ALTER TABLE session_agent_map ADD COLUMN cache_cold_count INTEGER NOT NULL DEFAULT 0`,
2276
+ args: []
2277
+ });
2278
+ } catch {
2279
+ }
2259
2280
  try {
2260
2281
  await client.execute({
2261
2282
  sql: `ALTER TABLE tasks ADD COLUMN budget_tokens INTEGER`,
@@ -1746,12 +1746,26 @@ async function ensureSchema() {
1746
1746
  session_name TEXT,
1747
1747
  task_id TEXT,
1748
1748
  project_name TEXT,
1749
- started_at TEXT NOT NULL
1749
+ started_at TEXT NOT NULL,
1750
+ cache_cold_count INTEGER NOT NULL DEFAULT 0
1750
1751
  );
1751
1752
 
1752
1753
  CREATE INDEX IF NOT EXISTS idx_session_agent_map_agent
1753
1754
  ON session_agent_map(agent_id);
1754
1755
  `);
1756
+ await client.executeMultiple(`
1757
+ CREATE TABLE IF NOT EXISTS agent_file_reads (
1758
+ session_uuid TEXT NOT NULL,
1759
+ agent_id TEXT NOT NULL,
1760
+ file_path TEXT NOT NULL,
1761
+ read_at TEXT NOT NULL,
1762
+ commit_hash TEXT,
1763
+ PRIMARY KEY (session_uuid, file_path)
1764
+ );
1765
+
1766
+ CREATE INDEX IF NOT EXISTS idx_agent_file_reads_agent_read_at
1767
+ ON agent_file_reads(agent_id, read_at);
1768
+ `);
1755
1769
  try {
1756
1770
  const mapCount = await client.execute({ sql: `SELECT COUNT(*) as cnt FROM session_agent_map`, args: [] });
1757
1771
  if (Number(mapCount.rows[0]?.cnt ?? 0) === 0) {
@@ -1766,6 +1780,13 @@ async function ensureSchema() {
1766
1780
  }
1767
1781
  } catch {
1768
1782
  }
1783
+ try {
1784
+ await client.execute({
1785
+ sql: `ALTER TABLE session_agent_map ADD COLUMN cache_cold_count INTEGER NOT NULL DEFAULT 0`,
1786
+ args: []
1787
+ });
1788
+ } catch {
1789
+ }
1769
1790
  try {
1770
1791
  await client.execute({
1771
1792
  sql: `ALTER TABLE tasks ADD COLUMN budget_tokens INTEGER`,
@@ -1809,12 +1809,26 @@ async function ensureSchema() {
1809
1809
  session_name TEXT,
1810
1810
  task_id TEXT,
1811
1811
  project_name TEXT,
1812
- started_at TEXT NOT NULL
1812
+ started_at TEXT NOT NULL,
1813
+ cache_cold_count INTEGER NOT NULL DEFAULT 0
1813
1814
  );
1814
1815
 
1815
1816
  CREATE INDEX IF NOT EXISTS idx_session_agent_map_agent
1816
1817
  ON session_agent_map(agent_id);
1817
1818
  `);
1819
+ await client.executeMultiple(`
1820
+ CREATE TABLE IF NOT EXISTS agent_file_reads (
1821
+ session_uuid TEXT NOT NULL,
1822
+ agent_id TEXT NOT NULL,
1823
+ file_path TEXT NOT NULL,
1824
+ read_at TEXT NOT NULL,
1825
+ commit_hash TEXT,
1826
+ PRIMARY KEY (session_uuid, file_path)
1827
+ );
1828
+
1829
+ CREATE INDEX IF NOT EXISTS idx_agent_file_reads_agent_read_at
1830
+ ON agent_file_reads(agent_id, read_at);
1831
+ `);
1818
1832
  try {
1819
1833
  const mapCount = await client.execute({ sql: `SELECT COUNT(*) as cnt FROM session_agent_map`, args: [] });
1820
1834
  if (Number(mapCount.rows[0]?.cnt ?? 0) === 0) {
@@ -1829,6 +1843,13 @@ async function ensureSchema() {
1829
1843
  }
1830
1844
  } catch {
1831
1845
  }
1846
+ try {
1847
+ await client.execute({
1848
+ sql: `ALTER TABLE session_agent_map ADD COLUMN cache_cold_count INTEGER NOT NULL DEFAULT 0`,
1849
+ args: []
1850
+ });
1851
+ } catch {
1852
+ }
1832
1853
  try {
1833
1854
  await client.execute({
1834
1855
  sql: `ALTER TABLE tasks ADD COLUMN budget_tokens INTEGER`,
@@ -2535,12 +2535,26 @@ async function ensureSchema() {
2535
2535
  session_name TEXT,
2536
2536
  task_id TEXT,
2537
2537
  project_name TEXT,
2538
- started_at TEXT NOT NULL
2538
+ started_at TEXT NOT NULL,
2539
+ cache_cold_count INTEGER NOT NULL DEFAULT 0
2539
2540
  );
2540
2541
 
2541
2542
  CREATE INDEX IF NOT EXISTS idx_session_agent_map_agent
2542
2543
  ON session_agent_map(agent_id);
2543
2544
  `);
2545
+ await client.executeMultiple(`
2546
+ CREATE TABLE IF NOT EXISTS agent_file_reads (
2547
+ session_uuid TEXT NOT NULL,
2548
+ agent_id TEXT NOT NULL,
2549
+ file_path TEXT NOT NULL,
2550
+ read_at TEXT NOT NULL,
2551
+ commit_hash TEXT,
2552
+ PRIMARY KEY (session_uuid, file_path)
2553
+ );
2554
+
2555
+ CREATE INDEX IF NOT EXISTS idx_agent_file_reads_agent_read_at
2556
+ ON agent_file_reads(agent_id, read_at);
2557
+ `);
2544
2558
  try {
2545
2559
  const mapCount = await client.execute({ sql: `SELECT COUNT(*) as cnt FROM session_agent_map`, args: [] });
2546
2560
  if (Number(mapCount.rows[0]?.cnt ?? 0) === 0) {
@@ -2555,6 +2569,13 @@ async function ensureSchema() {
2555
2569
  }
2556
2570
  } catch {
2557
2571
  }
2572
+ try {
2573
+ await client.execute({
2574
+ sql: `ALTER TABLE session_agent_map ADD COLUMN cache_cold_count INTEGER NOT NULL DEFAULT 0`,
2575
+ args: []
2576
+ });
2577
+ } catch {
2578
+ }
2558
2579
  try {
2559
2580
  await client.execute({
2560
2581
  sql: `ALTER TABLE tasks ADD COLUMN budget_tokens INTEGER`,
@@ -1749,12 +1749,26 @@ async function ensureSchema() {
1749
1749
  session_name TEXT,
1750
1750
  task_id TEXT,
1751
1751
  project_name TEXT,
1752
- started_at TEXT NOT NULL
1752
+ started_at TEXT NOT NULL,
1753
+ cache_cold_count INTEGER NOT NULL DEFAULT 0
1753
1754
  );
1754
1755
 
1755
1756
  CREATE INDEX IF NOT EXISTS idx_session_agent_map_agent
1756
1757
  ON session_agent_map(agent_id);
1757
1758
  `);
1759
+ await client.executeMultiple(`
1760
+ CREATE TABLE IF NOT EXISTS agent_file_reads (
1761
+ session_uuid TEXT NOT NULL,
1762
+ agent_id TEXT NOT NULL,
1763
+ file_path TEXT NOT NULL,
1764
+ read_at TEXT NOT NULL,
1765
+ commit_hash TEXT,
1766
+ PRIMARY KEY (session_uuid, file_path)
1767
+ );
1768
+
1769
+ CREATE INDEX IF NOT EXISTS idx_agent_file_reads_agent_read_at
1770
+ ON agent_file_reads(agent_id, read_at);
1771
+ `);
1758
1772
  try {
1759
1773
  const mapCount = await client.execute({ sql: `SELECT COUNT(*) as cnt FROM session_agent_map`, args: [] });
1760
1774
  if (Number(mapCount.rows[0]?.cnt ?? 0) === 0) {
@@ -1769,6 +1783,13 @@ async function ensureSchema() {
1769
1783
  }
1770
1784
  } catch {
1771
1785
  }
1786
+ try {
1787
+ await client.execute({
1788
+ sql: `ALTER TABLE session_agent_map ADD COLUMN cache_cold_count INTEGER NOT NULL DEFAULT 0`,
1789
+ args: []
1790
+ });
1791
+ } catch {
1792
+ }
1772
1793
  try {
1773
1794
  await client.execute({
1774
1795
  sql: `ALTER TABLE tasks ADD COLUMN budget_tokens INTEGER`,
@@ -1743,12 +1743,26 @@ async function ensureSchema() {
1743
1743
  session_name TEXT,
1744
1744
  task_id TEXT,
1745
1745
  project_name TEXT,
1746
- started_at TEXT NOT NULL
1746
+ started_at TEXT NOT NULL,
1747
+ cache_cold_count INTEGER NOT NULL DEFAULT 0
1747
1748
  );
1748
1749
 
1749
1750
  CREATE INDEX IF NOT EXISTS idx_session_agent_map_agent
1750
1751
  ON session_agent_map(agent_id);
1751
1752
  `);
1753
+ await client.executeMultiple(`
1754
+ CREATE TABLE IF NOT EXISTS agent_file_reads (
1755
+ session_uuid TEXT NOT NULL,
1756
+ agent_id TEXT NOT NULL,
1757
+ file_path TEXT NOT NULL,
1758
+ read_at TEXT NOT NULL,
1759
+ commit_hash TEXT,
1760
+ PRIMARY KEY (session_uuid, file_path)
1761
+ );
1762
+
1763
+ CREATE INDEX IF NOT EXISTS idx_agent_file_reads_agent_read_at
1764
+ ON agent_file_reads(agent_id, read_at);
1765
+ `);
1752
1766
  try {
1753
1767
  const mapCount = await client.execute({ sql: `SELECT COUNT(*) as cnt FROM session_agent_map`, args: [] });
1754
1768
  if (Number(mapCount.rows[0]?.cnt ?? 0) === 0) {
@@ -1763,6 +1777,13 @@ async function ensureSchema() {
1763
1777
  }
1764
1778
  } catch {
1765
1779
  }
1780
+ try {
1781
+ await client.execute({
1782
+ sql: `ALTER TABLE session_agent_map ADD COLUMN cache_cold_count INTEGER NOT NULL DEFAULT 0`,
1783
+ args: []
1784
+ });
1785
+ } catch {
1786
+ }
1766
1787
  try {
1767
1788
  await client.execute({
1768
1789
  sql: `ALTER TABLE tasks ADD COLUMN budget_tokens INTEGER`,
@@ -1754,12 +1754,26 @@ async function ensureSchema() {
1754
1754
  session_name TEXT,
1755
1755
  task_id TEXT,
1756
1756
  project_name TEXT,
1757
- started_at TEXT NOT NULL
1757
+ started_at TEXT NOT NULL,
1758
+ cache_cold_count INTEGER NOT NULL DEFAULT 0
1758
1759
  );
1759
1760
 
1760
1761
  CREATE INDEX IF NOT EXISTS idx_session_agent_map_agent
1761
1762
  ON session_agent_map(agent_id);
1762
1763
  `);
1764
+ await client.executeMultiple(`
1765
+ CREATE TABLE IF NOT EXISTS agent_file_reads (
1766
+ session_uuid TEXT NOT NULL,
1767
+ agent_id TEXT NOT NULL,
1768
+ file_path TEXT NOT NULL,
1769
+ read_at TEXT NOT NULL,
1770
+ commit_hash TEXT,
1771
+ PRIMARY KEY (session_uuid, file_path)
1772
+ );
1773
+
1774
+ CREATE INDEX IF NOT EXISTS idx_agent_file_reads_agent_read_at
1775
+ ON agent_file_reads(agent_id, read_at);
1776
+ `);
1763
1777
  try {
1764
1778
  const mapCount = await client.execute({ sql: `SELECT COUNT(*) as cnt FROM session_agent_map`, args: [] });
1765
1779
  if (Number(mapCount.rows[0]?.cnt ?? 0) === 0) {
@@ -1774,6 +1788,13 @@ async function ensureSchema() {
1774
1788
  }
1775
1789
  } catch {
1776
1790
  }
1791
+ try {
1792
+ await client.execute({
1793
+ sql: `ALTER TABLE session_agent_map ADD COLUMN cache_cold_count INTEGER NOT NULL DEFAULT 0`,
1794
+ args: []
1795
+ });
1796
+ } catch {
1797
+ }
1777
1798
  try {
1778
1799
  await client.execute({
1779
1800
  sql: `ALTER TABLE tasks ADD COLUMN budget_tokens INTEGER`,
@@ -1743,12 +1743,26 @@ async function ensureSchema() {
1743
1743
  session_name TEXT,
1744
1744
  task_id TEXT,
1745
1745
  project_name TEXT,
1746
- started_at TEXT NOT NULL
1746
+ started_at TEXT NOT NULL,
1747
+ cache_cold_count INTEGER NOT NULL DEFAULT 0
1747
1748
  );
1748
1749
 
1749
1750
  CREATE INDEX IF NOT EXISTS idx_session_agent_map_agent
1750
1751
  ON session_agent_map(agent_id);
1751
1752
  `);
1753
+ await client.executeMultiple(`
1754
+ CREATE TABLE IF NOT EXISTS agent_file_reads (
1755
+ session_uuid TEXT NOT NULL,
1756
+ agent_id TEXT NOT NULL,
1757
+ file_path TEXT NOT NULL,
1758
+ read_at TEXT NOT NULL,
1759
+ commit_hash TEXT,
1760
+ PRIMARY KEY (session_uuid, file_path)
1761
+ );
1762
+
1763
+ CREATE INDEX IF NOT EXISTS idx_agent_file_reads_agent_read_at
1764
+ ON agent_file_reads(agent_id, read_at);
1765
+ `);
1752
1766
  try {
1753
1767
  const mapCount = await client.execute({ sql: `SELECT COUNT(*) as cnt FROM session_agent_map`, args: [] });
1754
1768
  if (Number(mapCount.rows[0]?.cnt ?? 0) === 0) {
@@ -1763,6 +1777,13 @@ async function ensureSchema() {
1763
1777
  }
1764
1778
  } catch {
1765
1779
  }
1780
+ try {
1781
+ await client.execute({
1782
+ sql: `ALTER TABLE session_agent_map ADD COLUMN cache_cold_count INTEGER NOT NULL DEFAULT 0`,
1783
+ args: []
1784
+ });
1785
+ } catch {
1786
+ }
1766
1787
  try {
1767
1788
  await client.execute({
1768
1789
  sql: `ALTER TABLE tasks ADD COLUMN budget_tokens INTEGER`,
@@ -2792,12 +2792,26 @@ async function ensureSchema() {
2792
2792
  session_name TEXT,
2793
2793
  task_id TEXT,
2794
2794
  project_name TEXT,
2795
- started_at TEXT NOT NULL
2795
+ started_at TEXT NOT NULL,
2796
+ cache_cold_count INTEGER NOT NULL DEFAULT 0
2796
2797
  );
2797
2798
 
2798
2799
  CREATE INDEX IF NOT EXISTS idx_session_agent_map_agent
2799
2800
  ON session_agent_map(agent_id);
2800
2801
  `);
2802
+ await client.executeMultiple(`
2803
+ CREATE TABLE IF NOT EXISTS agent_file_reads (
2804
+ session_uuid TEXT NOT NULL,
2805
+ agent_id TEXT NOT NULL,
2806
+ file_path TEXT NOT NULL,
2807
+ read_at TEXT NOT NULL,
2808
+ commit_hash TEXT,
2809
+ PRIMARY KEY (session_uuid, file_path)
2810
+ );
2811
+
2812
+ CREATE INDEX IF NOT EXISTS idx_agent_file_reads_agent_read_at
2813
+ ON agent_file_reads(agent_id, read_at);
2814
+ `);
2801
2815
  try {
2802
2816
  const mapCount = await client.execute({ sql: `SELECT COUNT(*) as cnt FROM session_agent_map`, args: [] });
2803
2817
  if (Number(mapCount.rows[0]?.cnt ?? 0) === 0) {
@@ -2812,6 +2826,13 @@ async function ensureSchema() {
2812
2826
  }
2813
2827
  } catch {
2814
2828
  }
2829
+ try {
2830
+ await client.execute({
2831
+ sql: `ALTER TABLE session_agent_map ADD COLUMN cache_cold_count INTEGER NOT NULL DEFAULT 0`,
2832
+ args: []
2833
+ });
2834
+ } catch {
2835
+ }
2815
2836
  try {
2816
2837
  await client.execute({
2817
2838
  sql: `ALTER TABLE tasks ADD COLUMN budget_tokens INTEGER`,
@@ -1732,12 +1732,26 @@ async function ensureSchema() {
1732
1732
  session_name TEXT,
1733
1733
  task_id TEXT,
1734
1734
  project_name TEXT,
1735
- started_at TEXT NOT NULL
1735
+ started_at TEXT NOT NULL,
1736
+ cache_cold_count INTEGER NOT NULL DEFAULT 0
1736
1737
  );
1737
1738
 
1738
1739
  CREATE INDEX IF NOT EXISTS idx_session_agent_map_agent
1739
1740
  ON session_agent_map(agent_id);
1740
1741
  `);
1742
+ await client.executeMultiple(`
1743
+ CREATE TABLE IF NOT EXISTS agent_file_reads (
1744
+ session_uuid TEXT NOT NULL,
1745
+ agent_id TEXT NOT NULL,
1746
+ file_path TEXT NOT NULL,
1747
+ read_at TEXT NOT NULL,
1748
+ commit_hash TEXT,
1749
+ PRIMARY KEY (session_uuid, file_path)
1750
+ );
1751
+
1752
+ CREATE INDEX IF NOT EXISTS idx_agent_file_reads_agent_read_at
1753
+ ON agent_file_reads(agent_id, read_at);
1754
+ `);
1741
1755
  try {
1742
1756
  const mapCount = await client.execute({ sql: `SELECT COUNT(*) as cnt FROM session_agent_map`, args: [] });
1743
1757
  if (Number(mapCount.rows[0]?.cnt ?? 0) === 0) {
@@ -1752,6 +1766,13 @@ async function ensureSchema() {
1752
1766
  }
1753
1767
  } catch {
1754
1768
  }
1769
+ try {
1770
+ await client.execute({
1771
+ sql: `ALTER TABLE session_agent_map ADD COLUMN cache_cold_count INTEGER NOT NULL DEFAULT 0`,
1772
+ args: []
1773
+ });
1774
+ } catch {
1775
+ }
1755
1776
  try {
1756
1777
  await client.execute({
1757
1778
  sql: `ALTER TABLE tasks ADD COLUMN budget_tokens INTEGER`,
@@ -1732,12 +1732,26 @@ async function ensureSchema() {
1732
1732
  session_name TEXT,
1733
1733
  task_id TEXT,
1734
1734
  project_name TEXT,
1735
- started_at TEXT NOT NULL
1735
+ started_at TEXT NOT NULL,
1736
+ cache_cold_count INTEGER NOT NULL DEFAULT 0
1736
1737
  );
1737
1738
 
1738
1739
  CREATE INDEX IF NOT EXISTS idx_session_agent_map_agent
1739
1740
  ON session_agent_map(agent_id);
1740
1741
  `);
1742
+ await client.executeMultiple(`
1743
+ CREATE TABLE IF NOT EXISTS agent_file_reads (
1744
+ session_uuid TEXT NOT NULL,
1745
+ agent_id TEXT NOT NULL,
1746
+ file_path TEXT NOT NULL,
1747
+ read_at TEXT NOT NULL,
1748
+ commit_hash TEXT,
1749
+ PRIMARY KEY (session_uuid, file_path)
1750
+ );
1751
+
1752
+ CREATE INDEX IF NOT EXISTS idx_agent_file_reads_agent_read_at
1753
+ ON agent_file_reads(agent_id, read_at);
1754
+ `);
1741
1755
  try {
1742
1756
  const mapCount = await client.execute({ sql: `SELECT COUNT(*) as cnt FROM session_agent_map`, args: [] });
1743
1757
  if (Number(mapCount.rows[0]?.cnt ?? 0) === 0) {
@@ -1752,6 +1766,13 @@ async function ensureSchema() {
1752
1766
  }
1753
1767
  } catch {
1754
1768
  }
1769
+ try {
1770
+ await client.execute({
1771
+ sql: `ALTER TABLE session_agent_map ADD COLUMN cache_cold_count INTEGER NOT NULL DEFAULT 0`,
1772
+ args: []
1773
+ });
1774
+ } catch {
1775
+ }
1755
1776
  try {
1756
1777
  await client.execute({
1757
1778
  sql: `ALTER TABLE tasks ADD COLUMN budget_tokens INTEGER`,
@@ -2804,12 +2804,26 @@ async function ensureSchema() {
2804
2804
  session_name TEXT,
2805
2805
  task_id TEXT,
2806
2806
  project_name TEXT,
2807
- started_at TEXT NOT NULL
2807
+ started_at TEXT NOT NULL,
2808
+ cache_cold_count INTEGER NOT NULL DEFAULT 0
2808
2809
  );
2809
2810
 
2810
2811
  CREATE INDEX IF NOT EXISTS idx_session_agent_map_agent
2811
2812
  ON session_agent_map(agent_id);
2812
2813
  `);
2814
+ await client.executeMultiple(`
2815
+ CREATE TABLE IF NOT EXISTS agent_file_reads (
2816
+ session_uuid TEXT NOT NULL,
2817
+ agent_id TEXT NOT NULL,
2818
+ file_path TEXT NOT NULL,
2819
+ read_at TEXT NOT NULL,
2820
+ commit_hash TEXT,
2821
+ PRIMARY KEY (session_uuid, file_path)
2822
+ );
2823
+
2824
+ CREATE INDEX IF NOT EXISTS idx_agent_file_reads_agent_read_at
2825
+ ON agent_file_reads(agent_id, read_at);
2826
+ `);
2813
2827
  try {
2814
2828
  const mapCount = await client.execute({ sql: `SELECT COUNT(*) as cnt FROM session_agent_map`, args: [] });
2815
2829
  if (Number(mapCount.rows[0]?.cnt ?? 0) === 0) {
@@ -2824,6 +2838,13 @@ async function ensureSchema() {
2824
2838
  }
2825
2839
  } catch {
2826
2840
  }
2841
+ try {
2842
+ await client.execute({
2843
+ sql: `ALTER TABLE session_agent_map ADD COLUMN cache_cold_count INTEGER NOT NULL DEFAULT 0`,
2844
+ args: []
2845
+ });
2846
+ } catch {
2847
+ }
2827
2848
  try {
2828
2849
  await client.execute({
2829
2850
  sql: `ALTER TABLE tasks ADD COLUMN budget_tokens INTEGER`,
package/dist/bin/setup.js CHANGED
@@ -3539,12 +3539,26 @@ async function ensureSchema() {
3539
3539
  session_name TEXT,
3540
3540
  task_id TEXT,
3541
3541
  project_name TEXT,
3542
- started_at TEXT NOT NULL
3542
+ started_at TEXT NOT NULL,
3543
+ cache_cold_count INTEGER NOT NULL DEFAULT 0
3543
3544
  );
3544
3545
 
3545
3546
  CREATE INDEX IF NOT EXISTS idx_session_agent_map_agent
3546
3547
  ON session_agent_map(agent_id);
3547
3548
  `);
3549
+ await client.executeMultiple(`
3550
+ CREATE TABLE IF NOT EXISTS agent_file_reads (
3551
+ session_uuid TEXT NOT NULL,
3552
+ agent_id TEXT NOT NULL,
3553
+ file_path TEXT NOT NULL,
3554
+ read_at TEXT NOT NULL,
3555
+ commit_hash TEXT,
3556
+ PRIMARY KEY (session_uuid, file_path)
3557
+ );
3558
+
3559
+ CREATE INDEX IF NOT EXISTS idx_agent_file_reads_agent_read_at
3560
+ ON agent_file_reads(agent_id, read_at);
3561
+ `);
3548
3562
  try {
3549
3563
  const mapCount = await client.execute({ sql: `SELECT COUNT(*) as cnt FROM session_agent_map`, args: [] });
3550
3564
  if (Number(mapCount.rows[0]?.cnt ?? 0) === 0) {
@@ -3559,6 +3573,13 @@ async function ensureSchema() {
3559
3573
  }
3560
3574
  } catch {
3561
3575
  }
3576
+ try {
3577
+ await client.execute({
3578
+ sql: `ALTER TABLE session_agent_map ADD COLUMN cache_cold_count INTEGER NOT NULL DEFAULT 0`,
3579
+ args: []
3580
+ });
3581
+ } catch {
3582
+ }
3562
3583
  try {
3563
3584
  await client.execute({
3564
3585
  sql: `ALTER TABLE tasks ADD COLUMN budget_tokens INTEGER`,