@askexenow/exe-os 0.9.32 → 0.9.34

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 (75) hide show
  1. package/dist/bin/backfill-conversations.js +18 -2
  2. package/dist/bin/backfill-responses.js +18 -2
  3. package/dist/bin/backfill-vectors.js +18 -2
  4. package/dist/bin/cleanup-stale-review-tasks.js +18 -2
  5. package/dist/bin/cli.js +43 -11
  6. package/dist/bin/exe-assign.js +18 -2
  7. package/dist/bin/exe-boot.js +32 -10
  8. package/dist/bin/exe-cloud.js +3 -3
  9. package/dist/bin/exe-dispatch.js +21 -4
  10. package/dist/bin/exe-doctor.js +45 -21
  11. package/dist/bin/exe-export-behaviors.js +18 -2
  12. package/dist/bin/exe-forget.js +27 -8
  13. package/dist/bin/exe-gateway.js +21 -4
  14. package/dist/bin/exe-heartbeat.js +18 -2
  15. package/dist/bin/exe-kill.js +18 -2
  16. package/dist/bin/exe-launch-agent.js +34 -2
  17. package/dist/bin/exe-link.js +20 -5
  18. package/dist/bin/exe-pending-messages.js +18 -2
  19. package/dist/bin/exe-pending-notifications.js +18 -2
  20. package/dist/bin/exe-pending-reviews.js +18 -2
  21. package/dist/bin/exe-rename.js +18 -2
  22. package/dist/bin/exe-review.js +18 -2
  23. package/dist/bin/exe-search.js +18 -2
  24. package/dist/bin/exe-session-cleanup.js +21 -4
  25. package/dist/bin/exe-settings.js +1 -1
  26. package/dist/bin/exe-start-codex.js +42 -7
  27. package/dist/bin/exe-start-opencode.js +34 -2
  28. package/dist/bin/exe-status.js +18 -2
  29. package/dist/bin/exe-team.js +18 -2
  30. package/dist/bin/git-sweep.js +21 -4
  31. package/dist/bin/graph-backfill.js +18 -2
  32. package/dist/bin/graph-export.js +18 -2
  33. package/dist/bin/intercom-check.js +21 -4
  34. package/dist/bin/scan-tasks.js +21 -4
  35. package/dist/bin/setup.js +24 -9
  36. package/dist/bin/shard-migrate.js +18 -2
  37. package/dist/gateway/index.js +21 -4
  38. package/dist/hooks/bug-report-worker.js +21 -4
  39. package/dist/hooks/codex-stop-task-finalizer.js +21 -4
  40. package/dist/hooks/commit-complete.js +21 -4
  41. package/dist/hooks/error-recall.js +27 -2
  42. package/dist/hooks/exe-heartbeat-hook.js +9 -0
  43. package/dist/hooks/ingest.js +27 -2
  44. package/dist/hooks/instructions-loaded.js +27 -2
  45. package/dist/hooks/notification.js +27 -2
  46. package/dist/hooks/post-compact.js +30 -3
  47. package/dist/hooks/post-tool-combined.js +34 -2
  48. package/dist/hooks/pre-compact.js +33 -5
  49. package/dist/hooks/pre-tool-use.js +30 -3
  50. package/dist/hooks/prompt-submit.js +33 -5
  51. package/dist/hooks/session-end.js +33 -5
  52. package/dist/hooks/session-start.js +34 -2
  53. package/dist/hooks/stop.js +30 -3
  54. package/dist/hooks/subagent-stop.js +30 -3
  55. package/dist/hooks/summary-worker.js +22 -7
  56. package/dist/index.js +21 -4
  57. package/dist/lib/cloud-sync.js +20 -5
  58. package/dist/lib/database.js +17 -1
  59. package/dist/lib/db.js +17 -1
  60. package/dist/lib/device-registry.js +18 -2
  61. package/dist/lib/exe-daemon.js +20243 -6717
  62. package/dist/lib/hybrid-search.js +18 -2
  63. package/dist/lib/schedules.js +18 -2
  64. package/dist/lib/store.js +18 -2
  65. package/dist/lib/tasks.js +3 -2
  66. package/dist/lib/tmux-routing.js +3 -2
  67. package/dist/mcp/server.js +213 -167
  68. package/dist/mcp/tools/create-task.js +15 -3
  69. package/dist/mcp/tools/deactivate-behavior.js +9 -0
  70. package/dist/mcp/tools/list-tasks.js +12 -1
  71. package/dist/mcp/tools/send-message.js +12 -1
  72. package/dist/mcp/tools/update-task.js +19 -2
  73. package/dist/runtime/index.js +21 -4
  74. package/dist/tui/App.js +21 -4
  75. package/package.json +1 -1
@@ -1649,6 +1649,7 @@ var init_db_daemon_client = __esm({
1649
1649
  // src/lib/database.ts
1650
1650
  var database_exports = {};
1651
1651
  __export(database_exports, {
1652
+ SOFT_DELETE_RETENTION_DAYS: () => SOFT_DELETE_RETENTION_DAYS,
1652
1653
  disposeDatabase: () => disposeDatabase,
1653
1654
  disposeTurso: () => disposeTurso,
1654
1655
  ensureSchema: () => ensureSchema,
@@ -1805,10 +1806,17 @@ async function ensureSchema() {
1805
1806
  INSERT INTO memories_fts(memories_fts, rowid, raw_text) VALUES('delete', old.rowid, old.raw_text);
1806
1807
  END;
1807
1808
 
1808
- CREATE TRIGGER IF NOT EXISTS memories_fts_au AFTER UPDATE ON memories BEGIN
1809
+ CREATE TRIGGER IF NOT EXISTS memories_fts_au AFTER UPDATE ON memories
1810
+ WHEN new.status IS NULL OR new.status != 'deleted' BEGIN
1809
1811
  INSERT INTO memories_fts(memories_fts, rowid, raw_text) VALUES('delete', old.rowid, old.raw_text);
1810
1812
  INSERT INTO memories_fts(rowid, raw_text) VALUES (new.rowid, new.raw_text);
1811
1813
  END;
1814
+
1815
+ -- Soft-delete trigger: remove from FTS when status changes to 'deleted'
1816
+ CREATE TRIGGER IF NOT EXISTS memories_fts_soft_delete AFTER UPDATE ON memories
1817
+ WHEN new.status = 'deleted' AND (old.status IS NULL OR old.status != 'deleted') BEGIN
1818
+ INSERT INTO memories_fts(memories_fts, rowid, raw_text) VALUES('delete', old.rowid, old.raw_text);
1819
+ END;
1812
1820
  `);
1813
1821
  await client.executeMultiple(`
1814
1822
  CREATE TABLE IF NOT EXISTS sync_meta (
@@ -2211,6 +2219,13 @@ async function ensureSchema() {
2211
2219
  });
2212
2220
  } catch {
2213
2221
  }
2222
+ try {
2223
+ await client.execute({
2224
+ sql: `ALTER TABLE memories ADD COLUMN deleted_at TEXT`,
2225
+ args: []
2226
+ });
2227
+ } catch {
2228
+ }
2214
2229
  try {
2215
2230
  await client.execute({
2216
2231
  sql: `ALTER TABLE memories ADD COLUMN confidence REAL DEFAULT 0.7`,
@@ -2747,7 +2762,7 @@ async function disposeDatabase() {
2747
2762
  _resilientClient = null;
2748
2763
  }
2749
2764
  }
2750
- var _client, _resilientClient, _walCheckpointTimer, _daemonClient, _adapterClient, initTurso, disposeTurso;
2765
+ var _client, _resilientClient, _walCheckpointTimer, _daemonClient, _adapterClient, initTurso, SOFT_DELETE_RETENTION_DAYS, disposeTurso;
2751
2766
  var init_database = __esm({
2752
2767
  "src/lib/database.ts"() {
2753
2768
  "use strict";
@@ -2761,6 +2776,7 @@ var init_database = __esm({
2761
2776
  _daemonClient = null;
2762
2777
  _adapterClient = null;
2763
2778
  initTurso = initDatabase;
2779
+ SOFT_DELETE_RETENTION_DAYS = 7;
2764
2780
  disposeTurso = disposeDatabase;
2765
2781
  }
2766
2782
  });
@@ -1445,6 +1445,7 @@ var init_db_daemon_client = __esm({
1445
1445
  // src/lib/database.ts
1446
1446
  var database_exports = {};
1447
1447
  __export(database_exports, {
1448
+ SOFT_DELETE_RETENTION_DAYS: () => SOFT_DELETE_RETENTION_DAYS,
1448
1449
  disposeDatabase: () => disposeDatabase,
1449
1450
  disposeTurso: () => disposeTurso,
1450
1451
  ensureSchema: () => ensureSchema,
@@ -1601,10 +1602,17 @@ async function ensureSchema() {
1601
1602
  INSERT INTO memories_fts(memories_fts, rowid, raw_text) VALUES('delete', old.rowid, old.raw_text);
1602
1603
  END;
1603
1604
 
1604
- CREATE TRIGGER IF NOT EXISTS memories_fts_au AFTER UPDATE ON memories BEGIN
1605
+ CREATE TRIGGER IF NOT EXISTS memories_fts_au AFTER UPDATE ON memories
1606
+ WHEN new.status IS NULL OR new.status != 'deleted' BEGIN
1605
1607
  INSERT INTO memories_fts(memories_fts, rowid, raw_text) VALUES('delete', old.rowid, old.raw_text);
1606
1608
  INSERT INTO memories_fts(rowid, raw_text) VALUES (new.rowid, new.raw_text);
1607
1609
  END;
1610
+
1611
+ -- Soft-delete trigger: remove from FTS when status changes to 'deleted'
1612
+ CREATE TRIGGER IF NOT EXISTS memories_fts_soft_delete AFTER UPDATE ON memories
1613
+ WHEN new.status = 'deleted' AND (old.status IS NULL OR old.status != 'deleted') BEGIN
1614
+ INSERT INTO memories_fts(memories_fts, rowid, raw_text) VALUES('delete', old.rowid, old.raw_text);
1615
+ END;
1608
1616
  `);
1609
1617
  await client.executeMultiple(`
1610
1618
  CREATE TABLE IF NOT EXISTS sync_meta (
@@ -2007,6 +2015,13 @@ async function ensureSchema() {
2007
2015
  });
2008
2016
  } catch {
2009
2017
  }
2018
+ try {
2019
+ await client.execute({
2020
+ sql: `ALTER TABLE memories ADD COLUMN deleted_at TEXT`,
2021
+ args: []
2022
+ });
2023
+ } catch {
2024
+ }
2010
2025
  try {
2011
2026
  await client.execute({
2012
2027
  sql: `ALTER TABLE memories ADD COLUMN confidence REAL DEFAULT 0.7`,
@@ -2543,7 +2558,7 @@ async function disposeDatabase() {
2543
2558
  _resilientClient = null;
2544
2559
  }
2545
2560
  }
2546
- var _client, _resilientClient, _walCheckpointTimer, _daemonClient, _adapterClient, initTurso, disposeTurso;
2561
+ var _client, _resilientClient, _walCheckpointTimer, _daemonClient, _adapterClient, initTurso, SOFT_DELETE_RETENTION_DAYS, disposeTurso;
2547
2562
  var init_database = __esm({
2548
2563
  "src/lib/database.ts"() {
2549
2564
  "use strict";
@@ -2557,6 +2572,7 @@ var init_database = __esm({
2557
2572
  _daemonClient = null;
2558
2573
  _adapterClient = null;
2559
2574
  initTurso = initDatabase;
2575
+ SOFT_DELETE_RETENTION_DAYS = 7;
2560
2576
  disposeTurso = disposeDatabase;
2561
2577
  }
2562
2578
  });
package/dist/lib/store.js CHANGED
@@ -1445,6 +1445,7 @@ var init_db_daemon_client = __esm({
1445
1445
  // src/lib/database.ts
1446
1446
  var database_exports = {};
1447
1447
  __export(database_exports, {
1448
+ SOFT_DELETE_RETENTION_DAYS: () => SOFT_DELETE_RETENTION_DAYS,
1448
1449
  disposeDatabase: () => disposeDatabase,
1449
1450
  disposeTurso: () => disposeTurso,
1450
1451
  ensureSchema: () => ensureSchema,
@@ -1601,10 +1602,17 @@ async function ensureSchema() {
1601
1602
  INSERT INTO memories_fts(memories_fts, rowid, raw_text) VALUES('delete', old.rowid, old.raw_text);
1602
1603
  END;
1603
1604
 
1604
- CREATE TRIGGER IF NOT EXISTS memories_fts_au AFTER UPDATE ON memories BEGIN
1605
+ CREATE TRIGGER IF NOT EXISTS memories_fts_au AFTER UPDATE ON memories
1606
+ WHEN new.status IS NULL OR new.status != 'deleted' BEGIN
1605
1607
  INSERT INTO memories_fts(memories_fts, rowid, raw_text) VALUES('delete', old.rowid, old.raw_text);
1606
1608
  INSERT INTO memories_fts(rowid, raw_text) VALUES (new.rowid, new.raw_text);
1607
1609
  END;
1610
+
1611
+ -- Soft-delete trigger: remove from FTS when status changes to 'deleted'
1612
+ CREATE TRIGGER IF NOT EXISTS memories_fts_soft_delete AFTER UPDATE ON memories
1613
+ WHEN new.status = 'deleted' AND (old.status IS NULL OR old.status != 'deleted') BEGIN
1614
+ INSERT INTO memories_fts(memories_fts, rowid, raw_text) VALUES('delete', old.rowid, old.raw_text);
1615
+ END;
1608
1616
  `);
1609
1617
  await client.executeMultiple(`
1610
1618
  CREATE TABLE IF NOT EXISTS sync_meta (
@@ -2007,6 +2015,13 @@ async function ensureSchema() {
2007
2015
  });
2008
2016
  } catch {
2009
2017
  }
2018
+ try {
2019
+ await client.execute({
2020
+ sql: `ALTER TABLE memories ADD COLUMN deleted_at TEXT`,
2021
+ args: []
2022
+ });
2023
+ } catch {
2024
+ }
2010
2025
  try {
2011
2026
  await client.execute({
2012
2027
  sql: `ALTER TABLE memories ADD COLUMN confidence REAL DEFAULT 0.7`,
@@ -2543,7 +2558,7 @@ async function disposeDatabase() {
2543
2558
  _resilientClient = null;
2544
2559
  }
2545
2560
  }
2546
- var _client, _resilientClient, _walCheckpointTimer, _daemonClient, _adapterClient, initTurso, disposeTurso;
2561
+ var _client, _resilientClient, _walCheckpointTimer, _daemonClient, _adapterClient, initTurso, SOFT_DELETE_RETENTION_DAYS, disposeTurso;
2547
2562
  var init_database = __esm({
2548
2563
  "src/lib/database.ts"() {
2549
2564
  "use strict";
@@ -2557,6 +2572,7 @@ var init_database = __esm({
2557
2572
  _daemonClient = null;
2558
2573
  _adapterClient = null;
2559
2574
  initTurso = initDatabase;
2575
+ SOFT_DELETE_RETENTION_DAYS = 7;
2560
2576
  disposeTurso = disposeDatabase;
2561
2577
  }
2562
2578
  });
package/dist/lib/tasks.js CHANGED
@@ -4420,9 +4420,10 @@ async function updateTask(input) {
4420
4420
  args: [assignedAgent]
4421
4421
  });
4422
4422
  } else if (input.status === "cancelled") {
4423
+ const now2 = (/* @__PURE__ */ new Date()).toISOString();
4423
4424
  await draftClient.execute({
4424
- sql: `DELETE FROM memories WHERE agent_id = ? AND draft = 1`,
4425
- args: [assignedAgent]
4425
+ sql: `UPDATE memories SET status = 'deleted', deleted_at = ? WHERE agent_id = ? AND draft = 1`,
4426
+ args: [now2, assignedAgent]
4426
4427
  });
4427
4428
  }
4428
4429
  } catch {
@@ -3325,9 +3325,10 @@ async function updateTask(input) {
3325
3325
  args: [assignedAgent]
3326
3326
  });
3327
3327
  } else if (input.status === "cancelled") {
3328
+ const now2 = (/* @__PURE__ */ new Date()).toISOString();
3328
3329
  await draftClient.execute({
3329
- sql: `DELETE FROM memories WHERE agent_id = ? AND draft = 1`,
3330
- args: [assignedAgent]
3330
+ sql: `UPDATE memories SET status = 'deleted', deleted_at = ? WHERE agent_id = ? AND draft = 1`,
3331
+ args: [now2, assignedAgent]
3331
3332
  });
3332
3333
  }
3333
3334
  } catch {