@askexenow/exe-os 0.9.86 → 0.9.88

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 (103) hide show
  1. package/deploy/compose/docker-compose.yml +3 -3
  2. package/dist/bin/age-ontology-load.js +8 -2
  3. package/dist/bin/agentic-ontology-backfill.js +29 -0
  4. package/dist/bin/agentic-reflection-backfill.js +29 -0
  5. package/dist/bin/agentic-semantic-label.js +29 -0
  6. package/dist/bin/backfill-conversations.js +30 -0
  7. package/dist/bin/backfill-responses.js +30 -0
  8. package/dist/bin/backfill-vectors.js +30 -0
  9. package/dist/bin/bulk-sync-postgres.js +47 -1
  10. package/dist/bin/cc-doctor.js +3 -2
  11. package/dist/bin/cleanup-stale-review-tasks.js +30 -0
  12. package/dist/bin/cli.js +357 -19
  13. package/dist/bin/exe-agent.js +19 -0
  14. package/dist/bin/exe-assign.js +30 -0
  15. package/dist/bin/exe-boot.js +157 -4
  16. package/dist/bin/exe-call.js +20 -0
  17. package/dist/bin/exe-cloud.js +156 -3
  18. package/dist/bin/exe-dispatch.js +30 -1
  19. package/dist/bin/exe-doctor.js +30 -0
  20. package/dist/bin/exe-export-behaviors.js +29 -0
  21. package/dist/bin/exe-forget.js +30 -0
  22. package/dist/bin/exe-gateway.js +150 -35
  23. package/dist/bin/exe-healthcheck.js +2 -1
  24. package/dist/bin/exe-heartbeat.js +30 -0
  25. package/dist/bin/exe-kill.js +29 -0
  26. package/dist/bin/exe-launch-agent.js +29 -0
  27. package/dist/bin/exe-new-employee.js +37 -4
  28. package/dist/bin/exe-pending-messages.js +29 -0
  29. package/dist/bin/exe-pending-notifications.js +30 -0
  30. package/dist/bin/exe-pending-reviews.js +30 -0
  31. package/dist/bin/exe-rename.js +30 -0
  32. package/dist/bin/exe-review.js +30 -0
  33. package/dist/bin/exe-search.js +30 -0
  34. package/dist/bin/exe-session-cleanup.js +30 -1
  35. package/dist/bin/exe-settings.js +3 -0
  36. package/dist/bin/exe-start-codex.js +31 -2
  37. package/dist/bin/exe-start-opencode.js +31 -2
  38. package/dist/bin/exe-status.js +30 -0
  39. package/dist/bin/exe-team.js +30 -0
  40. package/dist/bin/git-sweep.js +30 -1
  41. package/dist/bin/graph-backfill.js +29 -0
  42. package/dist/bin/graph-export.js +29 -0
  43. package/dist/bin/graph-layer-benchmark.js +9 -1
  44. package/dist/bin/install.js +9 -0
  45. package/dist/bin/intercom-check.js +31 -1
  46. package/dist/bin/list-providers.js +1 -0
  47. package/dist/bin/postgres-agentic-reflection-backfill.js +7 -1
  48. package/dist/bin/postgres-agentic-semantic-backfill.js +7 -1
  49. package/dist/bin/registry-proxy.js +1 -0
  50. package/dist/bin/scan-tasks.js +31 -1
  51. package/dist/bin/setup.js +165 -9
  52. package/dist/bin/shard-migrate.js +29 -0
  53. package/dist/bin/stack-update.js +24 -7
  54. package/dist/bin/update.js +5 -0
  55. package/dist/gateway/index.js +30 -1
  56. package/dist/hooks/bug-report-worker.js +30 -1
  57. package/dist/hooks/codex-stop-task-finalizer.js +30 -1
  58. package/dist/hooks/commit-complete.js +30 -1
  59. package/dist/hooks/error-recall.js +29 -0
  60. package/dist/hooks/ingest.js +29 -0
  61. package/dist/hooks/instructions-loaded.js +29 -0
  62. package/dist/hooks/notification.js +29 -0
  63. package/dist/hooks/post-compact.js +29 -0
  64. package/dist/hooks/post-tool-combined.js +29 -0
  65. package/dist/hooks/pre-compact.js +30 -1
  66. package/dist/hooks/pre-tool-use.js +29 -0
  67. package/dist/hooks/prompt-submit.js +30 -1
  68. package/dist/hooks/session-end.js +30 -1
  69. package/dist/hooks/session-start.js +29 -0
  70. package/dist/hooks/stop.js +29 -0
  71. package/dist/hooks/subagent-stop.js +29 -0
  72. package/dist/hooks/summary-worker.js +155 -3
  73. package/dist/index.js +30 -1
  74. package/dist/lib/cloud-sync.js +136 -2
  75. package/dist/lib/consolidation.js +1 -0
  76. package/dist/lib/database.js +11 -0
  77. package/dist/lib/db.js +11 -0
  78. package/dist/lib/device-registry.js +11 -0
  79. package/dist/lib/employee-templates.js +19 -0
  80. package/dist/lib/exe-daemon.js +1455 -208
  81. package/dist/lib/hybrid-search.js +29 -0
  82. package/dist/lib/identity-templates.js +6 -2
  83. package/dist/lib/identity.js +1 -0
  84. package/dist/lib/messaging.js +2 -1
  85. package/dist/lib/reminders.js +1 -0
  86. package/dist/lib/schedules.js +29 -0
  87. package/dist/lib/skill-learning.js +1 -0
  88. package/dist/lib/store.js +29 -0
  89. package/dist/lib/tasks.js +2 -1
  90. package/dist/lib/tmux-routing.js +2 -1
  91. package/dist/lib/token-spend.js +1 -0
  92. package/dist/mcp/server.js +1278 -165
  93. package/dist/mcp/tools/complete-reminder.js +1 -0
  94. package/dist/mcp/tools/create-reminder.js +1 -0
  95. package/dist/mcp/tools/create-task.js +8 -3
  96. package/dist/mcp/tools/deactivate-behavior.js +1 -0
  97. package/dist/mcp/tools/list-reminders.js +1 -0
  98. package/dist/mcp/tools/list-tasks.js +1 -0
  99. package/dist/mcp/tools/send-message.js +2 -1
  100. package/dist/mcp/tools/update-task.js +2 -1
  101. package/dist/runtime/index.js +30 -1
  102. package/dist/tui/App.js +30 -1
  103. package/package.json +2 -2
@@ -1745,6 +1745,7 @@ __export(database_exports, {
1745
1745
  isInitialized: () => isInitialized,
1746
1746
  setExternalClient: () => setExternalClient
1747
1747
  });
1748
+ import { chmodSync as chmodSync2 } from "fs";
1748
1749
  import { createClient } from "@libsql/client";
1749
1750
  async function initDatabase(config) {
1750
1751
  if (_walCheckpointTimer) {
@@ -1786,6 +1787,16 @@ async function initDatabase(config) {
1786
1787
  if (process.env.DATABASE_URL && process.env.EXE_USE_POSTGRES === "1") {
1787
1788
  _adapterClient = await createPrismaDbAdapter(_resilientClient);
1788
1789
  }
1790
+ try {
1791
+ chmodSync2(config.dbPath, 384);
1792
+ for (const suffix of ["-wal", "-shm"]) {
1793
+ try {
1794
+ chmodSync2(config.dbPath + suffix, 384);
1795
+ } catch {
1796
+ }
1797
+ }
1798
+ } catch {
1799
+ }
1789
1800
  }
1790
1801
  function isInitialized() {
1791
1802
  return _adapterClient !== null || _client !== null;
@@ -4197,6 +4208,24 @@ var init_platform_procedures = __esm({
4197
4208
  priority: "p0",
4198
4209
  content: "When an agent encounters a suspected Exe OS bug, update breakage, MCP/tool failure, installer issue, memory/orchestration defect, or customer-local patch need, it MUST use create_bug_report. Do this before or alongside any local workaround so the report reaches AskExe support directly via the customer's license. Do NOT ask the founder for permission to file a required bug report. If create_bug_report is deferred/lazy-loaded, load it and call it. If it is unavailable in the live MCP surface, report 'create_bug_report unavailable in this session' and save a local report in exe/output \u2014 never claim the tool does not exist unless the live MCP surface was checked. If upstream delivery fails, call support_test (MCP) and include its result in the local report so AskExe can distinguish customer setup, license provisioning, and server intake issues; only ask the founder to run `exe-os support test` if MCP is disconnected/unavailable. Classify first: upstream_bug = reproducible exe-os/platform defect; customer_customization = identity, behavior, procedure, config, branding, workflow preference that belongs in customer-owned layers; emergency_hotfix = temporary local patch. For upstream bugs/emergency hotfixes include version, repro steps, expected/actual, files changed, workaround, and local diff summary. Avoid permanent platform-code patches unless founder approves; if a hotfix is unavoidable, document it in the bug report and re-check after npm update."
4199
4210
  },
4211
+ {
4212
+ title: "Bug report status check \u2014 surface available fixes on boot",
4213
+ domain: "support",
4214
+ priority: "p1",
4215
+ content: "Once per session (COO boot only, never repeat), call list_my_bug_reports to check if any previously filed bug reports have been fixed by AskExe. If any report has status 'fixed' with a fixed_version, surface it to the founder immediately: '\u{1F527} N bug fix(es) available \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no reports exist or none are fixed, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
4216
+ },
4217
+ {
4218
+ title: "Feature request triage \u2014 upstream feature vs local customization",
4219
+ domain: "support",
4220
+ priority: "p0",
4221
+ content: "When an agent or founder identifies a desired capability that exe-os does not yet provide, the COO (or equivalent coordinator) must decide: is this a local customization (identity, behavior, procedure, config, branding, workflow preference that can be configured in customer-owned layers) or an upstream feature request (a platform capability that requires changes to exe-os code, shipped via npm update)? Local customizations: implement immediately using store_behavior, update_identity, company_procedure, or config changes. Upstream features: use create_feature_request to submit to AskExe. Include use case, business impact, and current workaround. Do NOT ask the founder for permission to file a feature request \u2014 file it proactively when the need is clear."
4222
+ },
4223
+ {
4224
+ title: "Feature request status check \u2014 surface shipped features on boot",
4225
+ domain: "support",
4226
+ priority: "p1",
4227
+ content: "Once per session (COO boot only, never repeat), call list_my_feature_requests to check if any previously filed feature requests have been shipped by AskExe. If any request has status 'shipped' with a shipped_version, surface it to the founder immediately: '\u{1F680} N feature(s) shipped \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no requests exist or none are shipped, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
4228
+ },
4200
4229
  // --- Operations ---
4201
4230
  {
4202
4231
  title: "Managers must supervise deployed workers",
@@ -5817,7 +5846,7 @@ function readQueue() {
5817
5846
  function writeQueue(queue) {
5818
5847
  ensureDir();
5819
5848
  const tmp = `${QUEUE_PATH}.tmp`;
5820
- writeFileSync5(tmp, JSON.stringify(queue, null, 2));
5849
+ writeFileSync5(tmp, JSON.stringify(queue, null, 2), { mode: 384 });
5821
5850
  renameSync4(tmp, QUEUE_PATH);
5822
5851
  }
5823
5852
  function queueIntercom(targetSession, reason) {
@@ -310,6 +310,7 @@ var init_memory = __esm({
310
310
  });
311
311
 
312
312
  // src/lib/database.ts
313
+ import { chmodSync as chmodSync2 } from "fs";
313
314
  import { createClient } from "@libsql/client";
314
315
  var init_database = __esm({
315
316
  "src/lib/database.ts"() {
@@ -440,6 +441,7 @@ import { fileURLToPath } from "url";
440
441
  function isMainModule(importMetaUrl) {
441
442
  if (process.argv[1] == null) return false;
442
443
  if (process.argv[1].includes("mcp/server")) return false;
444
+ if (process.argv[1].includes("exe-daemon")) return false;
443
445
  try {
444
446
  const scriptPath = realpathSync(process.argv[1]);
445
447
  const modulePath = realpathSync(fileURLToPath(importMetaUrl));
@@ -497,6 +499,7 @@ function assertSecureEndpoint(endpoint) {
497
499
  }
498
500
  }
499
501
  var ROSTER_DELETIONS_PATH = path6.join(EXE_AI_DIR, "roster-deletions.json");
502
+ var CODE_CONTEXT_DIR = path6.join(EXE_AI_DIR, "code-context");
500
503
 
501
504
  // src/bin/exe-settings.ts
502
505
  init_agent_config();
@@ -1574,6 +1574,7 @@ __export(database_exports, {
1574
1574
  isInitialized: () => isInitialized,
1575
1575
  setExternalClient: () => setExternalClient
1576
1576
  });
1577
+ import { chmodSync as chmodSync2 } from "fs";
1577
1578
  import { createClient } from "@libsql/client";
1578
1579
  async function initDatabase(config) {
1579
1580
  if (_walCheckpointTimer) {
@@ -1615,6 +1616,16 @@ async function initDatabase(config) {
1615
1616
  if (process.env.DATABASE_URL && process.env.EXE_USE_POSTGRES === "1") {
1616
1617
  _adapterClient = await createPrismaDbAdapter(_resilientClient);
1617
1618
  }
1619
+ try {
1620
+ chmodSync2(config.dbPath, 384);
1621
+ for (const suffix of ["-wal", "-shm"]) {
1622
+ try {
1623
+ chmodSync2(config.dbPath + suffix, 384);
1624
+ } catch {
1625
+ }
1626
+ }
1627
+ } catch {
1628
+ }
1618
1629
  }
1619
1630
  function isInitialized() {
1620
1631
  return _adapterClient !== null || _client !== null;
@@ -3469,6 +3480,24 @@ var init_platform_procedures = __esm({
3469
3480
  priority: "p0",
3470
3481
  content: "When an agent encounters a suspected Exe OS bug, update breakage, MCP/tool failure, installer issue, memory/orchestration defect, or customer-local patch need, it MUST use create_bug_report. Do this before or alongside any local workaround so the report reaches AskExe support directly via the customer's license. Do NOT ask the founder for permission to file a required bug report. If create_bug_report is deferred/lazy-loaded, load it and call it. If it is unavailable in the live MCP surface, report 'create_bug_report unavailable in this session' and save a local report in exe/output \u2014 never claim the tool does not exist unless the live MCP surface was checked. If upstream delivery fails, call support_test (MCP) and include its result in the local report so AskExe can distinguish customer setup, license provisioning, and server intake issues; only ask the founder to run `exe-os support test` if MCP is disconnected/unavailable. Classify first: upstream_bug = reproducible exe-os/platform defect; customer_customization = identity, behavior, procedure, config, branding, workflow preference that belongs in customer-owned layers; emergency_hotfix = temporary local patch. For upstream bugs/emergency hotfixes include version, repro steps, expected/actual, files changed, workaround, and local diff summary. Avoid permanent platform-code patches unless founder approves; if a hotfix is unavoidable, document it in the bug report and re-check after npm update."
3471
3482
  },
3483
+ {
3484
+ title: "Bug report status check \u2014 surface available fixes on boot",
3485
+ domain: "support",
3486
+ priority: "p1",
3487
+ content: "Once per session (COO boot only, never repeat), call list_my_bug_reports to check if any previously filed bug reports have been fixed by AskExe. If any report has status 'fixed' with a fixed_version, surface it to the founder immediately: '\u{1F527} N bug fix(es) available \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no reports exist or none are fixed, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
3488
+ },
3489
+ {
3490
+ title: "Feature request triage \u2014 upstream feature vs local customization",
3491
+ domain: "support",
3492
+ priority: "p0",
3493
+ content: "When an agent or founder identifies a desired capability that exe-os does not yet provide, the COO (or equivalent coordinator) must decide: is this a local customization (identity, behavior, procedure, config, branding, workflow preference that can be configured in customer-owned layers) or an upstream feature request (a platform capability that requires changes to exe-os code, shipped via npm update)? Local customizations: implement immediately using store_behavior, update_identity, company_procedure, or config changes. Upstream features: use create_feature_request to submit to AskExe. Include use case, business impact, and current workaround. Do NOT ask the founder for permission to file a feature request \u2014 file it proactively when the need is clear."
3494
+ },
3495
+ {
3496
+ title: "Feature request status check \u2014 surface shipped features on boot",
3497
+ domain: "support",
3498
+ priority: "p1",
3499
+ content: "Once per session (COO boot only, never repeat), call list_my_feature_requests to check if any previously filed feature requests have been shipped by AskExe. If any request has status 'shipped' with a shipped_version, surface it to the founder immediately: '\u{1F680} N feature(s) shipped \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no requests exist or none are shipped, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
3500
+ },
3472
3501
  // --- Operations ---
3473
3502
  {
3474
3503
  title: "Managers must supervise deployed workers",
@@ -4424,7 +4453,7 @@ var init_preferences = __esm({
4424
4453
  });
4425
4454
 
4426
4455
  // src/adapters/mcp-http-config.ts
4427
- import { chmodSync as chmodSync2, existsSync as existsSync11, mkdirSync as mkdirSync6, readFileSync as readFileSync7, writeFileSync as writeFileSync6 } from "fs";
4456
+ import { chmodSync as chmodSync3, existsSync as existsSync11, mkdirSync as mkdirSync6, readFileSync as readFileSync7, writeFileSync as writeFileSync6 } from "fs";
4428
4457
  import { randomBytes } from "crypto";
4429
4458
  import path12 from "path";
4430
4459
  import os9 from "os";
@@ -4449,7 +4478,7 @@ function readOrCreateDaemonToken(homeDir = os9.homedir()) {
4449
4478
  writeFileSync6(tokenPath, `${token}
4450
4479
  `, "utf-8");
4451
4480
  try {
4452
- chmodSync2(tokenPath, 384);
4481
+ chmodSync3(tokenPath, 384);
4453
4482
  } catch {
4454
4483
  }
4455
4484
  return token;
@@ -1574,6 +1574,7 @@ __export(database_exports, {
1574
1574
  isInitialized: () => isInitialized,
1575
1575
  setExternalClient: () => setExternalClient
1576
1576
  });
1577
+ import { chmodSync as chmodSync2 } from "fs";
1577
1578
  import { createClient } from "@libsql/client";
1578
1579
  async function initDatabase(config) {
1579
1580
  if (_walCheckpointTimer) {
@@ -1615,6 +1616,16 @@ async function initDatabase(config) {
1615
1616
  if (process.env.DATABASE_URL && process.env.EXE_USE_POSTGRES === "1") {
1616
1617
  _adapterClient = await createPrismaDbAdapter(_resilientClient);
1617
1618
  }
1619
+ try {
1620
+ chmodSync2(config.dbPath, 384);
1621
+ for (const suffix of ["-wal", "-shm"]) {
1622
+ try {
1623
+ chmodSync2(config.dbPath + suffix, 384);
1624
+ } catch {
1625
+ }
1626
+ }
1627
+ } catch {
1628
+ }
1618
1629
  }
1619
1630
  function isInitialized() {
1620
1631
  return _adapterClient !== null || _client !== null;
@@ -3469,6 +3480,24 @@ var init_platform_procedures = __esm({
3469
3480
  priority: "p0",
3470
3481
  content: "When an agent encounters a suspected Exe OS bug, update breakage, MCP/tool failure, installer issue, memory/orchestration defect, or customer-local patch need, it MUST use create_bug_report. Do this before or alongside any local workaround so the report reaches AskExe support directly via the customer's license. Do NOT ask the founder for permission to file a required bug report. If create_bug_report is deferred/lazy-loaded, load it and call it. If it is unavailable in the live MCP surface, report 'create_bug_report unavailable in this session' and save a local report in exe/output \u2014 never claim the tool does not exist unless the live MCP surface was checked. If upstream delivery fails, call support_test (MCP) and include its result in the local report so AskExe can distinguish customer setup, license provisioning, and server intake issues; only ask the founder to run `exe-os support test` if MCP is disconnected/unavailable. Classify first: upstream_bug = reproducible exe-os/platform defect; customer_customization = identity, behavior, procedure, config, branding, workflow preference that belongs in customer-owned layers; emergency_hotfix = temporary local patch. For upstream bugs/emergency hotfixes include version, repro steps, expected/actual, files changed, workaround, and local diff summary. Avoid permanent platform-code patches unless founder approves; if a hotfix is unavoidable, document it in the bug report and re-check after npm update."
3471
3482
  },
3483
+ {
3484
+ title: "Bug report status check \u2014 surface available fixes on boot",
3485
+ domain: "support",
3486
+ priority: "p1",
3487
+ content: "Once per session (COO boot only, never repeat), call list_my_bug_reports to check if any previously filed bug reports have been fixed by AskExe. If any report has status 'fixed' with a fixed_version, surface it to the founder immediately: '\u{1F527} N bug fix(es) available \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no reports exist or none are fixed, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
3488
+ },
3489
+ {
3490
+ title: "Feature request triage \u2014 upstream feature vs local customization",
3491
+ domain: "support",
3492
+ priority: "p0",
3493
+ content: "When an agent or founder identifies a desired capability that exe-os does not yet provide, the COO (or equivalent coordinator) must decide: is this a local customization (identity, behavior, procedure, config, branding, workflow preference that can be configured in customer-owned layers) or an upstream feature request (a platform capability that requires changes to exe-os code, shipped via npm update)? Local customizations: implement immediately using store_behavior, update_identity, company_procedure, or config changes. Upstream features: use create_feature_request to submit to AskExe. Include use case, business impact, and current workaround. Do NOT ask the founder for permission to file a feature request \u2014 file it proactively when the need is clear."
3494
+ },
3495
+ {
3496
+ title: "Feature request status check \u2014 surface shipped features on boot",
3497
+ domain: "support",
3498
+ priority: "p1",
3499
+ content: "Once per session (COO boot only, never repeat), call list_my_feature_requests to check if any previously filed feature requests have been shipped by AskExe. If any request has status 'shipped' with a shipped_version, surface it to the founder immediately: '\u{1F680} N feature(s) shipped \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no requests exist or none are shipped, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
3500
+ },
3472
3501
  // --- Operations ---
3473
3502
  {
3474
3503
  title: "Managers must supervise deployed workers",
@@ -4413,7 +4442,7 @@ var init_preferences = __esm({
4413
4442
  });
4414
4443
 
4415
4444
  // src/adapters/mcp-http-config.ts
4416
- import { chmodSync as chmodSync2, existsSync as existsSync11, mkdirSync as mkdirSync6, readFileSync as readFileSync7, writeFileSync as writeFileSync6 } from "fs";
4445
+ import { chmodSync as chmodSync3, existsSync as existsSync11, mkdirSync as mkdirSync6, readFileSync as readFileSync7, writeFileSync as writeFileSync6 } from "fs";
4417
4446
  import { randomBytes } from "crypto";
4418
4447
  import path12 from "path";
4419
4448
  import os9 from "os";
@@ -4438,7 +4467,7 @@ function readOrCreateDaemonToken(homeDir = os9.homedir()) {
4438
4467
  writeFileSync6(tokenPath, `${token}
4439
4468
  `, "utf-8");
4440
4469
  try {
4441
- chmodSync2(tokenPath, 384);
4470
+ chmodSync3(tokenPath, 384);
4442
4471
  } catch {
4443
4472
  }
4444
4473
  return token;
@@ -1724,6 +1724,7 @@ __export(database_exports, {
1724
1724
  isInitialized: () => isInitialized,
1725
1725
  setExternalClient: () => setExternalClient
1726
1726
  });
1727
+ import { chmodSync as chmodSync2 } from "fs";
1727
1728
  import { createClient } from "@libsql/client";
1728
1729
  async function initDatabase(config) {
1729
1730
  if (_walCheckpointTimer) {
@@ -1765,6 +1766,16 @@ async function initDatabase(config) {
1765
1766
  if (process.env.DATABASE_URL && process.env.EXE_USE_POSTGRES === "1") {
1766
1767
  _adapterClient = await createPrismaDbAdapter(_resilientClient);
1767
1768
  }
1769
+ try {
1770
+ chmodSync2(config.dbPath, 384);
1771
+ for (const suffix of ["-wal", "-shm"]) {
1772
+ try {
1773
+ chmodSync2(config.dbPath + suffix, 384);
1774
+ } catch {
1775
+ }
1776
+ }
1777
+ } catch {
1778
+ }
1768
1779
  }
1769
1780
  function isInitialized() {
1770
1781
  return _adapterClient !== null || _client !== null;
@@ -4176,6 +4187,24 @@ var init_platform_procedures = __esm({
4176
4187
  priority: "p0",
4177
4188
  content: "When an agent encounters a suspected Exe OS bug, update breakage, MCP/tool failure, installer issue, memory/orchestration defect, or customer-local patch need, it MUST use create_bug_report. Do this before or alongside any local workaround so the report reaches AskExe support directly via the customer's license. Do NOT ask the founder for permission to file a required bug report. If create_bug_report is deferred/lazy-loaded, load it and call it. If it is unavailable in the live MCP surface, report 'create_bug_report unavailable in this session' and save a local report in exe/output \u2014 never claim the tool does not exist unless the live MCP surface was checked. If upstream delivery fails, call support_test (MCP) and include its result in the local report so AskExe can distinguish customer setup, license provisioning, and server intake issues; only ask the founder to run `exe-os support test` if MCP is disconnected/unavailable. Classify first: upstream_bug = reproducible exe-os/platform defect; customer_customization = identity, behavior, procedure, config, branding, workflow preference that belongs in customer-owned layers; emergency_hotfix = temporary local patch. For upstream bugs/emergency hotfixes include version, repro steps, expected/actual, files changed, workaround, and local diff summary. Avoid permanent platform-code patches unless founder approves; if a hotfix is unavoidable, document it in the bug report and re-check after npm update."
4178
4189
  },
4190
+ {
4191
+ title: "Bug report status check \u2014 surface available fixes on boot",
4192
+ domain: "support",
4193
+ priority: "p1",
4194
+ content: "Once per session (COO boot only, never repeat), call list_my_bug_reports to check if any previously filed bug reports have been fixed by AskExe. If any report has status 'fixed' with a fixed_version, surface it to the founder immediately: '\u{1F527} N bug fix(es) available \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no reports exist or none are fixed, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
4195
+ },
4196
+ {
4197
+ title: "Feature request triage \u2014 upstream feature vs local customization",
4198
+ domain: "support",
4199
+ priority: "p0",
4200
+ content: "When an agent or founder identifies a desired capability that exe-os does not yet provide, the COO (or equivalent coordinator) must decide: is this a local customization (identity, behavior, procedure, config, branding, workflow preference that can be configured in customer-owned layers) or an upstream feature request (a platform capability that requires changes to exe-os code, shipped via npm update)? Local customizations: implement immediately using store_behavior, update_identity, company_procedure, or config changes. Upstream features: use create_feature_request to submit to AskExe. Include use case, business impact, and current workaround. Do NOT ask the founder for permission to file a feature request \u2014 file it proactively when the need is clear."
4201
+ },
4202
+ {
4203
+ title: "Feature request status check \u2014 surface shipped features on boot",
4204
+ domain: "support",
4205
+ priority: "p1",
4206
+ content: "Once per session (COO boot only, never repeat), call list_my_feature_requests to check if any previously filed feature requests have been shipped by AskExe. If any request has status 'shipped' with a shipped_version, surface it to the founder immediately: '\u{1F680} N feature(s) shipped \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no requests exist or none are shipped, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
4207
+ },
4179
4208
  // --- Operations ---
4180
4209
  {
4181
4210
  title: "Managers must supervise deployed workers",
@@ -6138,6 +6167,7 @@ import { fileURLToPath as fileURLToPath2 } from "url";
6138
6167
  function isMainModule(importMetaUrl) {
6139
6168
  if (process.argv[1] == null) return false;
6140
6169
  if (process.argv[1].includes("mcp/server")) return false;
6170
+ if (process.argv[1].includes("exe-daemon")) return false;
6141
6171
  try {
6142
6172
  const scriptPath = realpathSync(process.argv[1]);
6143
6173
  const modulePath = realpathSync(fileURLToPath2(importMetaUrl));
@@ -1713,6 +1713,7 @@ __export(database_exports, {
1713
1713
  isInitialized: () => isInitialized,
1714
1714
  setExternalClient: () => setExternalClient
1715
1715
  });
1716
+ import { chmodSync as chmodSync2 } from "fs";
1716
1717
  import { createClient } from "@libsql/client";
1717
1718
  async function initDatabase(config) {
1718
1719
  if (_walCheckpointTimer) {
@@ -1754,6 +1755,16 @@ async function initDatabase(config) {
1754
1755
  if (process.env.DATABASE_URL && process.env.EXE_USE_POSTGRES === "1") {
1755
1756
  _adapterClient = await createPrismaDbAdapter(_resilientClient);
1756
1757
  }
1758
+ try {
1759
+ chmodSync2(config.dbPath, 384);
1760
+ for (const suffix of ["-wal", "-shm"]) {
1761
+ try {
1762
+ chmodSync2(config.dbPath + suffix, 384);
1763
+ } catch {
1764
+ }
1765
+ }
1766
+ } catch {
1767
+ }
1757
1768
  }
1758
1769
  function isInitialized() {
1759
1770
  return _adapterClient !== null || _client !== null;
@@ -4165,6 +4176,24 @@ var init_platform_procedures = __esm({
4165
4176
  priority: "p0",
4166
4177
  content: "When an agent encounters a suspected Exe OS bug, update breakage, MCP/tool failure, installer issue, memory/orchestration defect, or customer-local patch need, it MUST use create_bug_report. Do this before or alongside any local workaround so the report reaches AskExe support directly via the customer's license. Do NOT ask the founder for permission to file a required bug report. If create_bug_report is deferred/lazy-loaded, load it and call it. If it is unavailable in the live MCP surface, report 'create_bug_report unavailable in this session' and save a local report in exe/output \u2014 never claim the tool does not exist unless the live MCP surface was checked. If upstream delivery fails, call support_test (MCP) and include its result in the local report so AskExe can distinguish customer setup, license provisioning, and server intake issues; only ask the founder to run `exe-os support test` if MCP is disconnected/unavailable. Classify first: upstream_bug = reproducible exe-os/platform defect; customer_customization = identity, behavior, procedure, config, branding, workflow preference that belongs in customer-owned layers; emergency_hotfix = temporary local patch. For upstream bugs/emergency hotfixes include version, repro steps, expected/actual, files changed, workaround, and local diff summary. Avoid permanent platform-code patches unless founder approves; if a hotfix is unavoidable, document it in the bug report and re-check after npm update."
4167
4178
  },
4179
+ {
4180
+ title: "Bug report status check \u2014 surface available fixes on boot",
4181
+ domain: "support",
4182
+ priority: "p1",
4183
+ content: "Once per session (COO boot only, never repeat), call list_my_bug_reports to check if any previously filed bug reports have been fixed by AskExe. If any report has status 'fixed' with a fixed_version, surface it to the founder immediately: '\u{1F527} N bug fix(es) available \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no reports exist or none are fixed, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
4184
+ },
4185
+ {
4186
+ title: "Feature request triage \u2014 upstream feature vs local customization",
4187
+ domain: "support",
4188
+ priority: "p0",
4189
+ content: "When an agent or founder identifies a desired capability that exe-os does not yet provide, the COO (or equivalent coordinator) must decide: is this a local customization (identity, behavior, procedure, config, branding, workflow preference that can be configured in customer-owned layers) or an upstream feature request (a platform capability that requires changes to exe-os code, shipped via npm update)? Local customizations: implement immediately using store_behavior, update_identity, company_procedure, or config changes. Upstream features: use create_feature_request to submit to AskExe. Include use case, business impact, and current workaround. Do NOT ask the founder for permission to file a feature request \u2014 file it proactively when the need is clear."
4190
+ },
4191
+ {
4192
+ title: "Feature request status check \u2014 surface shipped features on boot",
4193
+ domain: "support",
4194
+ priority: "p1",
4195
+ content: "Once per session (COO boot only, never repeat), call list_my_feature_requests to check if any previously filed feature requests have been shipped by AskExe. If any request has status 'shipped' with a shipped_version, surface it to the founder immediately: '\u{1F680} N feature(s) shipped \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no requests exist or none are shipped, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
4196
+ },
4168
4197
  // --- Operations ---
4169
4198
  {
4170
4199
  title: "Managers must supervise deployed workers",
@@ -5479,6 +5508,7 @@ import { fileURLToPath as fileURLToPath2 } from "url";
5479
5508
  function isMainModule(importMetaUrl) {
5480
5509
  if (process.argv[1] == null) return false;
5481
5510
  if (process.argv[1].includes("mcp/server")) return false;
5511
+ if (process.argv[1].includes("exe-daemon")) return false;
5482
5512
  try {
5483
5513
  const scriptPath = realpathSync(process.argv[1]);
5484
5514
  const modulePath = realpathSync(fileURLToPath2(importMetaUrl));
@@ -712,7 +712,7 @@ function readQueue() {
712
712
  function writeQueue(queue) {
713
713
  ensureDir();
714
714
  const tmp = `${QUEUE_PATH}.tmp`;
715
- writeFileSync3(tmp, JSON.stringify(queue, null, 2));
715
+ writeFileSync3(tmp, JSON.stringify(queue, null, 2), { mode: 384 });
716
716
  renameSync2(tmp, QUEUE_PATH);
717
717
  }
718
718
  function queueIntercom(targetSession, reason) {
@@ -2225,6 +2225,7 @@ __export(database_exports, {
2225
2225
  isInitialized: () => isInitialized,
2226
2226
  setExternalClient: () => setExternalClient
2227
2227
  });
2228
+ import { chmodSync as chmodSync2 } from "fs";
2228
2229
  import { createClient } from "@libsql/client";
2229
2230
  async function initDatabase(config) {
2230
2231
  if (_walCheckpointTimer) {
@@ -2266,6 +2267,16 @@ async function initDatabase(config) {
2266
2267
  if (process.env.DATABASE_URL && process.env.EXE_USE_POSTGRES === "1") {
2267
2268
  _adapterClient = await createPrismaDbAdapter(_resilientClient);
2268
2269
  }
2270
+ try {
2271
+ chmodSync2(config.dbPath, 384);
2272
+ for (const suffix of ["-wal", "-shm"]) {
2273
+ try {
2274
+ chmodSync2(config.dbPath + suffix, 384);
2275
+ } catch {
2276
+ }
2277
+ }
2278
+ } catch {
2279
+ }
2269
2280
  }
2270
2281
  function isInitialized() {
2271
2282
  return _adapterClient !== null || _client !== null;
@@ -7870,6 +7881,24 @@ var init_platform_procedures = __esm({
7870
7881
  priority: "p0",
7871
7882
  content: "When an agent encounters a suspected Exe OS bug, update breakage, MCP/tool failure, installer issue, memory/orchestration defect, or customer-local patch need, it MUST use create_bug_report. Do this before or alongside any local workaround so the report reaches AskExe support directly via the customer's license. Do NOT ask the founder for permission to file a required bug report. If create_bug_report is deferred/lazy-loaded, load it and call it. If it is unavailable in the live MCP surface, report 'create_bug_report unavailable in this session' and save a local report in exe/output \u2014 never claim the tool does not exist unless the live MCP surface was checked. If upstream delivery fails, call support_test (MCP) and include its result in the local report so AskExe can distinguish customer setup, license provisioning, and server intake issues; only ask the founder to run `exe-os support test` if MCP is disconnected/unavailable. Classify first: upstream_bug = reproducible exe-os/platform defect; customer_customization = identity, behavior, procedure, config, branding, workflow preference that belongs in customer-owned layers; emergency_hotfix = temporary local patch. For upstream bugs/emergency hotfixes include version, repro steps, expected/actual, files changed, workaround, and local diff summary. Avoid permanent platform-code patches unless founder approves; if a hotfix is unavoidable, document it in the bug report and re-check after npm update."
7872
7883
  },
7884
+ {
7885
+ title: "Bug report status check \u2014 surface available fixes on boot",
7886
+ domain: "support",
7887
+ priority: "p1",
7888
+ content: "Once per session (COO boot only, never repeat), call list_my_bug_reports to check if any previously filed bug reports have been fixed by AskExe. If any report has status 'fixed' with a fixed_version, surface it to the founder immediately: '\u{1F527} N bug fix(es) available \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no reports exist or none are fixed, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
7889
+ },
7890
+ {
7891
+ title: "Feature request triage \u2014 upstream feature vs local customization",
7892
+ domain: "support",
7893
+ priority: "p0",
7894
+ content: "When an agent or founder identifies a desired capability that exe-os does not yet provide, the COO (or equivalent coordinator) must decide: is this a local customization (identity, behavior, procedure, config, branding, workflow preference that can be configured in customer-owned layers) or an upstream feature request (a platform capability that requires changes to exe-os code, shipped via npm update)? Local customizations: implement immediately using store_behavior, update_identity, company_procedure, or config changes. Upstream features: use create_feature_request to submit to AskExe. Include use case, business impact, and current workaround. Do NOT ask the founder for permission to file a feature request \u2014 file it proactively when the need is clear."
7895
+ },
7896
+ {
7897
+ title: "Feature request status check \u2014 surface shipped features on boot",
7898
+ domain: "support",
7899
+ priority: "p1",
7900
+ content: "Once per session (COO boot only, never repeat), call list_my_feature_requests to check if any previously filed feature requests have been shipped by AskExe. If any request has status 'shipped' with a shipped_version, surface it to the founder immediately: '\u{1F680} N feature(s) shipped \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no requests exist or none are shipped, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
7901
+ },
7873
7902
  // --- Operations ---
7874
7903
  {
7875
7904
  title: "Managers must supervise deployed workers",
@@ -1487,6 +1487,7 @@ __export(database_exports, {
1487
1487
  isInitialized: () => isInitialized,
1488
1488
  setExternalClient: () => setExternalClient
1489
1489
  });
1490
+ import { chmodSync as chmodSync2 } from "fs";
1490
1491
  import { createClient } from "@libsql/client";
1491
1492
  async function initDatabase(config) {
1492
1493
  if (_walCheckpointTimer) {
@@ -1528,6 +1529,16 @@ async function initDatabase(config) {
1528
1529
  if (process.env.DATABASE_URL && process.env.EXE_USE_POSTGRES === "1") {
1529
1530
  _adapterClient = await createPrismaDbAdapter(_resilientClient);
1530
1531
  }
1532
+ try {
1533
+ chmodSync2(config.dbPath, 384);
1534
+ for (const suffix of ["-wal", "-shm"]) {
1535
+ try {
1536
+ chmodSync2(config.dbPath + suffix, 384);
1537
+ } catch {
1538
+ }
1539
+ }
1540
+ } catch {
1541
+ }
1531
1542
  }
1532
1543
  function isInitialized() {
1533
1544
  return _adapterClient !== null || _client !== null;
@@ -3382,6 +3393,24 @@ var init_platform_procedures = __esm({
3382
3393
  priority: "p0",
3383
3394
  content: "When an agent encounters a suspected Exe OS bug, update breakage, MCP/tool failure, installer issue, memory/orchestration defect, or customer-local patch need, it MUST use create_bug_report. Do this before or alongside any local workaround so the report reaches AskExe support directly via the customer's license. Do NOT ask the founder for permission to file a required bug report. If create_bug_report is deferred/lazy-loaded, load it and call it. If it is unavailable in the live MCP surface, report 'create_bug_report unavailable in this session' and save a local report in exe/output \u2014 never claim the tool does not exist unless the live MCP surface was checked. If upstream delivery fails, call support_test (MCP) and include its result in the local report so AskExe can distinguish customer setup, license provisioning, and server intake issues; only ask the founder to run `exe-os support test` if MCP is disconnected/unavailable. Classify first: upstream_bug = reproducible exe-os/platform defect; customer_customization = identity, behavior, procedure, config, branding, workflow preference that belongs in customer-owned layers; emergency_hotfix = temporary local patch. For upstream bugs/emergency hotfixes include version, repro steps, expected/actual, files changed, workaround, and local diff summary. Avoid permanent platform-code patches unless founder approves; if a hotfix is unavoidable, document it in the bug report and re-check after npm update."
3384
3395
  },
3396
+ {
3397
+ title: "Bug report status check \u2014 surface available fixes on boot",
3398
+ domain: "support",
3399
+ priority: "p1",
3400
+ content: "Once per session (COO boot only, never repeat), call list_my_bug_reports to check if any previously filed bug reports have been fixed by AskExe. If any report has status 'fixed' with a fixed_version, surface it to the founder immediately: '\u{1F527} N bug fix(es) available \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no reports exist or none are fixed, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
3401
+ },
3402
+ {
3403
+ title: "Feature request triage \u2014 upstream feature vs local customization",
3404
+ domain: "support",
3405
+ priority: "p0",
3406
+ content: "When an agent or founder identifies a desired capability that exe-os does not yet provide, the COO (or equivalent coordinator) must decide: is this a local customization (identity, behavior, procedure, config, branding, workflow preference that can be configured in customer-owned layers) or an upstream feature request (a platform capability that requires changes to exe-os code, shipped via npm update)? Local customizations: implement immediately using store_behavior, update_identity, company_procedure, or config changes. Upstream features: use create_feature_request to submit to AskExe. Include use case, business impact, and current workaround. Do NOT ask the founder for permission to file a feature request \u2014 file it proactively when the need is clear."
3407
+ },
3408
+ {
3409
+ title: "Feature request status check \u2014 surface shipped features on boot",
3410
+ domain: "support",
3411
+ priority: "p1",
3412
+ content: "Once per session (COO boot only, never repeat), call list_my_feature_requests to check if any previously filed feature requests have been shipped by AskExe. If any request has status 'shipped' with a shipped_version, surface it to the founder immediately: '\u{1F680} N feature(s) shipped \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no requests exist or none are shipped, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
3413
+ },
3385
3414
  // --- Operations ---
3386
3415
  {
3387
3416
  title: "Managers must supervise deployed workers",
@@ -1702,6 +1702,7 @@ __export(database_exports, {
1702
1702
  isInitialized: () => isInitialized,
1703
1703
  setExternalClient: () => setExternalClient
1704
1704
  });
1705
+ import { chmodSync as chmodSync2 } from "fs";
1705
1706
  import { createClient } from "@libsql/client";
1706
1707
  async function initDatabase(config) {
1707
1708
  if (_walCheckpointTimer) {
@@ -1743,6 +1744,16 @@ async function initDatabase(config) {
1743
1744
  if (process.env.DATABASE_URL && process.env.EXE_USE_POSTGRES === "1") {
1744
1745
  _adapterClient = await createPrismaDbAdapter(_resilientClient);
1745
1746
  }
1747
+ try {
1748
+ chmodSync2(config.dbPath, 384);
1749
+ for (const suffix of ["-wal", "-shm"]) {
1750
+ try {
1751
+ chmodSync2(config.dbPath + suffix, 384);
1752
+ } catch {
1753
+ }
1754
+ }
1755
+ } catch {
1756
+ }
1746
1757
  }
1747
1758
  function isInitialized() {
1748
1759
  return _adapterClient !== null || _client !== null;
@@ -4154,6 +4165,24 @@ var init_platform_procedures = __esm({
4154
4165
  priority: "p0",
4155
4166
  content: "When an agent encounters a suspected Exe OS bug, update breakage, MCP/tool failure, installer issue, memory/orchestration defect, or customer-local patch need, it MUST use create_bug_report. Do this before or alongside any local workaround so the report reaches AskExe support directly via the customer's license. Do NOT ask the founder for permission to file a required bug report. If create_bug_report is deferred/lazy-loaded, load it and call it. If it is unavailable in the live MCP surface, report 'create_bug_report unavailable in this session' and save a local report in exe/output \u2014 never claim the tool does not exist unless the live MCP surface was checked. If upstream delivery fails, call support_test (MCP) and include its result in the local report so AskExe can distinguish customer setup, license provisioning, and server intake issues; only ask the founder to run `exe-os support test` if MCP is disconnected/unavailable. Classify first: upstream_bug = reproducible exe-os/platform defect; customer_customization = identity, behavior, procedure, config, branding, workflow preference that belongs in customer-owned layers; emergency_hotfix = temporary local patch. For upstream bugs/emergency hotfixes include version, repro steps, expected/actual, files changed, workaround, and local diff summary. Avoid permanent platform-code patches unless founder approves; if a hotfix is unavoidable, document it in the bug report and re-check after npm update."
4156
4167
  },
4168
+ {
4169
+ title: "Bug report status check \u2014 surface available fixes on boot",
4170
+ domain: "support",
4171
+ priority: "p1",
4172
+ content: "Once per session (COO boot only, never repeat), call list_my_bug_reports to check if any previously filed bug reports have been fixed by AskExe. If any report has status 'fixed' with a fixed_version, surface it to the founder immediately: '\u{1F527} N bug fix(es) available \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no reports exist or none are fixed, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
4173
+ },
4174
+ {
4175
+ title: "Feature request triage \u2014 upstream feature vs local customization",
4176
+ domain: "support",
4177
+ priority: "p0",
4178
+ content: "When an agent or founder identifies a desired capability that exe-os does not yet provide, the COO (or equivalent coordinator) must decide: is this a local customization (identity, behavior, procedure, config, branding, workflow preference that can be configured in customer-owned layers) or an upstream feature request (a platform capability that requires changes to exe-os code, shipped via npm update)? Local customizations: implement immediately using store_behavior, update_identity, company_procedure, or config changes. Upstream features: use create_feature_request to submit to AskExe. Include use case, business impact, and current workaround. Do NOT ask the founder for permission to file a feature request \u2014 file it proactively when the need is clear."
4179
+ },
4180
+ {
4181
+ title: "Feature request status check \u2014 surface shipped features on boot",
4182
+ domain: "support",
4183
+ priority: "p1",
4184
+ content: "Once per session (COO boot only, never repeat), call list_my_feature_requests to check if any previously filed feature requests have been shipped by AskExe. If any request has status 'shipped' with a shipped_version, surface it to the founder immediately: '\u{1F680} N feature(s) shipped \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no requests exist or none are shipped, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
4185
+ },
4157
4186
  // --- Operations ---
4158
4187
  {
4159
4188
  title: "Managers must supervise deployed workers",
@@ -2,6 +2,14 @@
2
2
 
3
3
  // src/bin/graph-layer-benchmark.ts
4
4
  import { Client } from "pg";
5
+
6
+ // src/lib/pg-ssl.ts
7
+ function pgSslConfig() {
8
+ if (process.env.EXE_DB_SSL_DISABLED === "true") return {};
9
+ return { ssl: { rejectUnauthorized: process.env.EXE_DB_SSL_ALLOW_SELFSIGNED !== "true" } };
10
+ }
11
+
12
+ // src/bin/graph-layer-benchmark.ts
5
13
  function now() {
6
14
  return Date.now();
7
15
  }
@@ -18,7 +26,7 @@ async function timed(layer, check, fn) {
18
26
  }
19
27
  }
20
28
  async function withPg(url, fn) {
21
- const client = new Client({ connectionString: url });
29
+ const client = new Client({ connectionString: url, ...pgSslConfig() });
22
30
  await client.connect();
23
31
  try {
24
32
  return await fn(client);
@@ -979,6 +979,15 @@ async function registerMcpServer(packageRoot, homeDir = os6.homedir()) {
979
979
  delete claudeJson.mcpServers[MCP_LEGACY_KEY];
980
980
  process.stderr.write("exe-os: migrated MCP server key exe-mem \u2192 exe-os\n");
981
981
  }
982
+ if (claudeJson.projects) {
983
+ for (const [projectPath, projectConfig] of Object.entries(claudeJson.projects)) {
984
+ if (projectConfig.mcpServers?.[MCP_LEGACY_KEY]) {
985
+ delete projectConfig.mcpServers[MCP_LEGACY_KEY];
986
+ process.stderr.write(`exe-os: removed stale project-level exe-mem from ${projectPath}
987
+ `);
988
+ }
989
+ }
990
+ }
982
991
  const currentOs = claudeJson.mcpServers[MCP_PRIMARY_KEY];
983
992
  const osMatches = currentOs && JSON.stringify(currentOs) === JSON.stringify(newEntry);
984
993
  if (osMatches) {
@@ -1811,6 +1811,7 @@ __export(database_exports, {
1811
1811
  isInitialized: () => isInitialized,
1812
1812
  setExternalClient: () => setExternalClient
1813
1813
  });
1814
+ import { chmodSync as chmodSync2 } from "fs";
1814
1815
  import { createClient } from "@libsql/client";
1815
1816
  async function initDatabase(config) {
1816
1817
  if (_walCheckpointTimer) {
@@ -1852,6 +1853,16 @@ async function initDatabase(config) {
1852
1853
  if (process.env.DATABASE_URL && process.env.EXE_USE_POSTGRES === "1") {
1853
1854
  _adapterClient = await createPrismaDbAdapter(_resilientClient);
1854
1855
  }
1856
+ try {
1857
+ chmodSync2(config.dbPath, 384);
1858
+ for (const suffix of ["-wal", "-shm"]) {
1859
+ try {
1860
+ chmodSync2(config.dbPath + suffix, 384);
1861
+ } catch {
1862
+ }
1863
+ }
1864
+ } catch {
1865
+ }
1855
1866
  }
1856
1867
  function isInitialized() {
1857
1868
  return _adapterClient !== null || _client !== null;
@@ -4263,6 +4274,24 @@ var init_platform_procedures = __esm({
4263
4274
  priority: "p0",
4264
4275
  content: "When an agent encounters a suspected Exe OS bug, update breakage, MCP/tool failure, installer issue, memory/orchestration defect, or customer-local patch need, it MUST use create_bug_report. Do this before or alongside any local workaround so the report reaches AskExe support directly via the customer's license. Do NOT ask the founder for permission to file a required bug report. If create_bug_report is deferred/lazy-loaded, load it and call it. If it is unavailable in the live MCP surface, report 'create_bug_report unavailable in this session' and save a local report in exe/output \u2014 never claim the tool does not exist unless the live MCP surface was checked. If upstream delivery fails, call support_test (MCP) and include its result in the local report so AskExe can distinguish customer setup, license provisioning, and server intake issues; only ask the founder to run `exe-os support test` if MCP is disconnected/unavailable. Classify first: upstream_bug = reproducible exe-os/platform defect; customer_customization = identity, behavior, procedure, config, branding, workflow preference that belongs in customer-owned layers; emergency_hotfix = temporary local patch. For upstream bugs/emergency hotfixes include version, repro steps, expected/actual, files changed, workaround, and local diff summary. Avoid permanent platform-code patches unless founder approves; if a hotfix is unavoidable, document it in the bug report and re-check after npm update."
4265
4276
  },
4277
+ {
4278
+ title: "Bug report status check \u2014 surface available fixes on boot",
4279
+ domain: "support",
4280
+ priority: "p1",
4281
+ content: "Once per session (COO boot only, never repeat), call list_my_bug_reports to check if any previously filed bug reports have been fixed by AskExe. If any report has status 'fixed' with a fixed_version, surface it to the founder immediately: '\u{1F527} N bug fix(es) available \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no reports exist or none are fixed, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
4282
+ },
4283
+ {
4284
+ title: "Feature request triage \u2014 upstream feature vs local customization",
4285
+ domain: "support",
4286
+ priority: "p0",
4287
+ content: "When an agent or founder identifies a desired capability that exe-os does not yet provide, the COO (or equivalent coordinator) must decide: is this a local customization (identity, behavior, procedure, config, branding, workflow preference that can be configured in customer-owned layers) or an upstream feature request (a platform capability that requires changes to exe-os code, shipped via npm update)? Local customizations: implement immediately using store_behavior, update_identity, company_procedure, or config changes. Upstream features: use create_feature_request to submit to AskExe. Include use case, business impact, and current workaround. Do NOT ask the founder for permission to file a feature request \u2014 file it proactively when the need is clear."
4288
+ },
4289
+ {
4290
+ title: "Feature request status check \u2014 surface shipped features on boot",
4291
+ domain: "support",
4292
+ priority: "p1",
4293
+ content: "Once per session (COO boot only, never repeat), call list_my_feature_requests to check if any previously filed feature requests have been shipped by AskExe. If any request has status 'shipped' with a shipped_version, surface it to the founder immediately: '\u{1F680} N feature(s) shipped \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no requests exist or none are shipped, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
4294
+ },
4266
4295
  // --- Operations ---
4267
4296
  {
4268
4297
  title: "Managers must supervise deployed workers",
@@ -5967,7 +5996,7 @@ function readQueue() {
5967
5996
  function writeQueue(queue) {
5968
5997
  ensureDir();
5969
5998
  const tmp = `${QUEUE_PATH}.tmp`;
5970
- writeFileSync5(tmp, JSON.stringify(queue, null, 2));
5999
+ writeFileSync5(tmp, JSON.stringify(queue, null, 2), { mode: 384 });
5971
6000
  renameSync4(tmp, QUEUE_PATH);
5972
6001
  }
5973
6002
  function queueIntercom(targetSession, reason) {
@@ -9448,6 +9477,7 @@ import { fileURLToPath as fileURLToPath3 } from "url";
9448
9477
  function isMainModule(importMetaUrl) {
9449
9478
  if (process.argv[1] == null) return false;
9450
9479
  if (process.argv[1].includes("mcp/server")) return false;
9480
+ if (process.argv[1].includes("exe-daemon")) return false;
9451
9481
  try {
9452
9482
  const scriptPath = realpathSync(process.argv[1]);
9453
9483
  const modulePath = realpathSync(fileURLToPath3(importMetaUrl));
@@ -11,6 +11,7 @@ import { fileURLToPath } from "url";
11
11
  function isMainModule(importMetaUrl) {
12
12
  if (process.argv[1] == null) return false;
13
13
  if (process.argv[1].includes("mcp/server")) return false;
14
+ if (process.argv[1].includes("exe-daemon")) return false;
14
15
  try {
15
16
  const scriptPath = realpathSync(process.argv[1]);
16
17
  const modulePath = realpathSync(fileURLToPath(importMetaUrl));