@askexenow/exe-os 0.9.37 → 0.9.39

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 (73) hide show
  1. package/deploy/stack-manifests/v0.9.json +55 -0
  2. package/dist/bin/backfill-conversations.js +36 -9
  3. package/dist/bin/backfill-responses.js +36 -9
  4. package/dist/bin/backfill-vectors.js +36 -9
  5. package/dist/bin/cleanup-stale-review-tasks.js +37 -10
  6. package/dist/bin/cli.js +624 -204
  7. package/dist/bin/exe-agent.js +13 -5
  8. package/dist/bin/exe-assign.js +36 -9
  9. package/dist/bin/exe-boot.js +50 -20
  10. package/dist/bin/exe-call.js +134 -342
  11. package/dist/bin/exe-dispatch.js +36 -9
  12. package/dist/bin/exe-doctor.js +39 -12
  13. package/dist/bin/exe-export-behaviors.js +38 -11
  14. package/dist/bin/exe-forget.js +36 -9
  15. package/dist/bin/exe-gateway.js +64 -15
  16. package/dist/bin/exe-heartbeat.js +37 -10
  17. package/dist/bin/exe-kill.js +36 -9
  18. package/dist/bin/exe-launch-agent.js +287 -1081
  19. package/dist/bin/exe-new-employee.js +100 -14
  20. package/dist/bin/exe-pending-messages.js +36 -9
  21. package/dist/bin/exe-pending-notifications.js +36 -9
  22. package/dist/bin/exe-pending-reviews.js +36 -9
  23. package/dist/bin/exe-rename.js +1780 -204
  24. package/dist/bin/exe-review.js +36 -9
  25. package/dist/bin/exe-search.js +38 -11
  26. package/dist/bin/exe-session-cleanup.js +38 -11
  27. package/dist/bin/exe-start-codex.js +38 -11
  28. package/dist/bin/exe-start-opencode.js +38 -11
  29. package/dist/bin/exe-status.js +37 -10
  30. package/dist/bin/exe-team.js +36 -9
  31. package/dist/bin/git-sweep.js +36 -9
  32. package/dist/bin/graph-backfill.js +36 -9
  33. package/dist/bin/graph-export.js +36 -9
  34. package/dist/bin/install.js +70 -3
  35. package/dist/bin/intercom-check.js +38 -11
  36. package/dist/bin/scan-tasks.js +36 -9
  37. package/dist/bin/setup.js +20 -19
  38. package/dist/bin/shard-migrate.js +36 -9
  39. package/dist/bin/stack-update.js +308 -0
  40. package/dist/gateway/index.js +62 -13
  41. package/dist/hooks/bug-report-worker.js +40 -12
  42. package/dist/hooks/codex-stop-task-finalizer.js +38 -11
  43. package/dist/hooks/commit-complete.js +36 -9
  44. package/dist/hooks/error-recall.js +38 -11
  45. package/dist/hooks/ingest.js +38 -10
  46. package/dist/hooks/instructions-loaded.js +44 -12
  47. package/dist/hooks/notification.js +36 -9
  48. package/dist/hooks/post-compact.js +36 -9
  49. package/dist/hooks/post-tool-combined.js +39 -12
  50. package/dist/hooks/pre-compact.js +37 -10
  51. package/dist/hooks/pre-tool-use.js +38 -10
  52. package/dist/hooks/prompt-submit.js +43 -15
  53. package/dist/hooks/session-end.js +37 -10
  54. package/dist/hooks/session-start.js +49 -16
  55. package/dist/hooks/stop.js +37 -10
  56. package/dist/hooks/subagent-stop.js +36 -9
  57. package/dist/hooks/summary-worker.js +45 -18
  58. package/dist/index.js +60 -11
  59. package/dist/lib/consolidation.js +2 -1
  60. package/dist/lib/employee-templates.js +4 -3
  61. package/dist/lib/employees.js +2 -1
  62. package/dist/lib/exe-daemon.js +11229 -10537
  63. package/dist/lib/hybrid-search.js +38 -11
  64. package/dist/lib/identity.js +8 -3
  65. package/dist/lib/schedules.js +36 -9
  66. package/dist/lib/store.js +36 -9
  67. package/dist/mcp/server.js +6873 -6249
  68. package/dist/mcp/tools/create-task.js +10 -4
  69. package/dist/runtime/index.js +36 -9
  70. package/dist/tui/App.js +42 -13
  71. package/package.json +4 -1
  72. package/stack.release.json +31 -0
  73. package/stack.release.schema.json +31 -0
@@ -3250,7 +3250,7 @@ __export(shard_manager_exports, {
3250
3250
  shardExists: () => shardExists
3251
3251
  });
3252
3252
  import path7 from "path";
3253
- import { existsSync as existsSync7, mkdirSync as mkdirSync2, readdirSync } from "fs";
3253
+ import { existsSync as existsSync7, mkdirSync as mkdirSync2, readdirSync, renameSync as renameSync3, statSync as statSync2 } from "fs";
3254
3254
  import { createClient as createClient2 } from "@libsql/client";
3255
3255
  function initShardManager(encryptionKey) {
3256
3256
  _encryptionKey = encryptionKey;
@@ -3272,7 +3272,7 @@ function getShardClient(projectName) {
3272
3272
  if (!_encryptionKey) {
3273
3273
  throw new Error("Shard manager not initialized. Call initShardManager() first.");
3274
3274
  }
3275
- const safeName = projectName.replace(/[^a-zA-Z0-9_-]/g, "_");
3275
+ const safeName = safeShardName(projectName);
3276
3276
  if (!safeName || safeName === "unknown") {
3277
3277
  throw new Error(`Invalid project name for shard: "${projectName}" (resolved to "${safeName}")`);
3278
3278
  }
@@ -3294,9 +3294,12 @@ function getShardClient(projectName) {
3294
3294
  return client;
3295
3295
  }
3296
3296
  function shardExists(projectName) {
3297
- const safeName = projectName.replace(/[^a-zA-Z0-9_-]/g, "_");
3297
+ const safeName = safeShardName(projectName);
3298
3298
  return existsSync7(path7.join(SHARDS_DIR, `${safeName}.db`));
3299
3299
  }
3300
+ function safeShardName(projectName) {
3301
+ return projectName.replace(/[^a-zA-Z0-9_-]/g, "_");
3302
+ }
3300
3303
  function listShards() {
3301
3304
  if (!existsSync7(SHARDS_DIR)) return [];
3302
3305
  return readdirSync(SHARDS_DIR).filter((f) => f.endsWith(".db")).map((f) => f.replace(".db", ""));
@@ -3390,7 +3393,8 @@ async function ensureShardSchema(client) {
3390
3393
  "ALTER TABLE memories ADD COLUMN token_cost REAL",
3391
3394
  "ALTER TABLE memories ADD COLUMN audience TEXT",
3392
3395
  "ALTER TABLE memories ADD COLUMN language_type TEXT",
3393
- "ALTER TABLE memories ADD COLUMN parent_memory_id TEXT"
3396
+ "ALTER TABLE memories ADD COLUMN parent_memory_id TEXT",
3397
+ "ALTER TABLE memories ADD COLUMN deleted_at TEXT"
3394
3398
  ]) {
3395
3399
  try {
3396
3400
  await client.execute(col);
@@ -3486,9 +3490,32 @@ async function ensureShardSchema(client) {
3486
3490
  }
3487
3491
  }
3488
3492
  async function getReadyShardClient(projectName) {
3489
- const client = getShardClient(projectName);
3490
- await ensureShardSchema(client);
3491
- return client;
3493
+ const safeName = safeShardName(projectName);
3494
+ let client = getShardClient(projectName);
3495
+ try {
3496
+ await ensureShardSchema(client);
3497
+ return client;
3498
+ } catch (err) {
3499
+ const message = err instanceof Error ? err.message : String(err);
3500
+ if (!/SQLITE_NOTADB|file is not a database/i.test(message)) throw err;
3501
+ client.close();
3502
+ _shards.delete(safeName);
3503
+ _shardLastAccess.delete(safeName);
3504
+ const dbPath = path7.join(SHARDS_DIR, `${safeName}.db`);
3505
+ if (existsSync7(dbPath)) {
3506
+ const stat = statSync2(dbPath);
3507
+ const stamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-");
3508
+ const archivedPath = path7.join(SHARDS_DIR, `${safeName}.db.broken-${stamp}`);
3509
+ renameSync3(dbPath, archivedPath);
3510
+ process.stderr.write(
3511
+ `[shard-manager] Archived unreadable shard ${safeName}: ${archivedPath} (${stat.size} bytes, mtime ${stat.mtime.toISOString()})
3512
+ `
3513
+ );
3514
+ }
3515
+ client = getShardClient(projectName);
3516
+ await ensureShardSchema(client);
3517
+ return client;
3518
+ }
3492
3519
  }
3493
3520
  function evictLRU() {
3494
3521
  let oldest = null;
@@ -3709,7 +3736,7 @@ var init_platform_procedures = __esm({
3709
3736
  title: "MCP tools \u2014 wiki, documents, and content",
3710
3737
  domain: "tool-use",
3711
3738
  priority: "p1",
3712
- content: "create_wiki_page: create a wiki page in exe-wiki. list_wiki_pages: browse wiki pages. get_wiki_page: read a wiki page. update_wiki_page: edit a wiki page. ingest_document: import a file (PDF, MD, etc.) into memory as chunks. list_documents: browse ingested documents by workspace. purge_document: remove a document and its memory chunks. set_document_importance: adjust chunk importance scores. rerank_documents: re-score document relevance for a query."
3739
+ content: "wiki: read/list wiki pages only. Direct wiki write tools are removed; wiki updates flow through raw-data ingestion/projection into the curated wiki store. Legacy aliases: list_wiki_pages/get_wiki_page. crm: read/list/get CRM records from exe-db. raw_data: read capped raw landing-pad events from exe-db with payload opt-in. ingest_document: import a file (PDF, MD, etc.) into memory as chunks. list_documents: browse ingested documents by workspace. purge_document: remove a document and its memory chunks. set_document_importance: adjust chunk importance scores. rerank_documents: re-score document relevance for a query."
3713
3740
  },
3714
3741
  {
3715
3742
  title: "MCP tools \u2014 system, operations, and admin",
@@ -3727,7 +3754,7 @@ var init_platform_procedures = __esm({
3727
3754
  title: "MCP tools \u2014 advanced (triggers, skills, orchestration)",
3728
3755
  domain: "tool-use",
3729
3756
  priority: "p1",
3730
- content: "create_trigger: set up a scheduled recurring agent job (cron). list_triggers: view active triggers. load_skill: load a slash-command skill dynamically. apply_starter_pack: import a pre-built behavior + identity pack for a role. export_orchestration: export full org state (tasks, behaviors, identities) as portable JSON. import_orchestration: import org state into a new instance. deploy_client: deploy a customer client instance. query_company_brain: unified RAG query across all company knowledge. create_reminder: set a text reminder (shown in boot brief). list_reminders: view pending reminders. complete_reminder: mark a reminder done. global_procedure: manage Layer 0 procedures (actions: store, list, deactivate). Legacy aliases: store_global_procedure, list_global_procedures, deactivate_global_procedure."
3757
+ content: "create_trigger: set up a scheduled recurring agent job (cron). list_triggers: view active triggers. load_skill: load a slash-command skill dynamically. apply_starter_pack: import a pre-built behavior + identity pack for a role. export_orchestration: export full org state (tasks, behaviors, identities) as portable JSON. import_orchestration: import org state into a new instance. deploy_client: deploy a customer client instance. query_company_brain: unified RAG query across all company knowledge. create_reminder: set a text reminder (shown in boot brief). list_reminders: view pending reminders. complete_reminder: mark a reminder done. global_procedure: manage customer-owned company procedures (Layer 0; actions: store, list, deactivate). Legacy aliases: store_global_procedure, list_global_procedures, deactivate_global_procedure."
3731
3758
  }
3732
3759
  ];
3733
3760
  PLATFORM_PROCEDURE_TITLES = new Set(