@askexenow/exe-os 0.9.114 → 0.9.116

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 (79) hide show
  1. package/dist/bin/agentic-ontology-backfill.js +13 -1
  2. package/dist/bin/agentic-reflection-backfill.js +13 -1
  3. package/dist/bin/agentic-semantic-label.js +13 -1
  4. package/dist/bin/backfill-conversations.js +13 -1
  5. package/dist/bin/backfill-responses.js +13 -1
  6. package/dist/bin/backfill-vectors.js +13 -1
  7. package/dist/bin/bulk-sync-postgres.js +13 -1
  8. package/dist/bin/cleanup-stale-review-tasks.js +465 -107
  9. package/dist/bin/cli.js +348 -43
  10. package/dist/bin/exe-assign.js +13 -1
  11. package/dist/bin/exe-boot.js +233 -42
  12. package/dist/bin/exe-cloud.js +13 -1
  13. package/dist/bin/exe-dispatch.js +346 -41
  14. package/dist/bin/exe-doctor.js +28 -2
  15. package/dist/bin/exe-export-behaviors.js +14 -1
  16. package/dist/bin/exe-forget.js +13 -1
  17. package/dist/bin/exe-gateway.js +346 -41
  18. package/dist/bin/exe-heartbeat.js +466 -107
  19. package/dist/bin/exe-kill.js +13 -1
  20. package/dist/bin/exe-launch-agent.js +14 -1
  21. package/dist/bin/exe-pending-messages.js +445 -87
  22. package/dist/bin/exe-pending-notifications.js +445 -87
  23. package/dist/bin/exe-pending-reviews.js +445 -87
  24. package/dist/bin/exe-rename.js +13 -1
  25. package/dist/bin/exe-review.js +13 -1
  26. package/dist/bin/exe-search.js +14 -1
  27. package/dist/bin/exe-session-cleanup.js +346 -41
  28. package/dist/bin/exe-settings.js +12 -0
  29. package/dist/bin/exe-start-codex.js +14 -1
  30. package/dist/bin/exe-start-opencode.js +14 -1
  31. package/dist/bin/exe-status.js +455 -108
  32. package/dist/bin/exe-support.js +12 -0
  33. package/dist/bin/exe-team.js +13 -1
  34. package/dist/bin/git-sweep.js +346 -41
  35. package/dist/bin/graph-backfill.js +13 -1
  36. package/dist/bin/graph-export.js +13 -1
  37. package/dist/bin/intercom-check.js +253 -41
  38. package/dist/bin/scan-tasks.js +346 -41
  39. package/dist/bin/setup.js +14 -1
  40. package/dist/bin/shard-migrate.js +13 -1
  41. package/dist/gateway/index.js +346 -41
  42. package/dist/hooks/bug-report-worker.js +346 -41
  43. package/dist/hooks/codex-stop-task-finalizer.js +308 -29
  44. package/dist/hooks/commit-complete.js +346 -41
  45. package/dist/hooks/error-recall.js +14 -1
  46. package/dist/hooks/ingest.js +361 -42
  47. package/dist/hooks/instructions-loaded.js +13 -1
  48. package/dist/hooks/notification.js +13 -1
  49. package/dist/hooks/post-compact.js +419 -64
  50. package/dist/hooks/post-tool-combined.js +496 -140
  51. package/dist/hooks/pre-compact.js +346 -41
  52. package/dist/hooks/pre-tool-use.js +50 -5
  53. package/dist/hooks/prompt-submit.js +346 -41
  54. package/dist/hooks/session-end.js +156 -41
  55. package/dist/hooks/session-start.js +51 -5
  56. package/dist/hooks/stop.js +413 -64
  57. package/dist/hooks/subagent-stop.js +412 -64
  58. package/dist/hooks/summary-worker.js +426 -115
  59. package/dist/index.js +346 -41
  60. package/dist/lib/cloud-sync.js +1 -1
  61. package/dist/lib/config.js +13 -0
  62. package/dist/lib/embedder.js +13 -0
  63. package/dist/lib/exe-daemon.js +382 -47
  64. package/dist/lib/hybrid-search.js +14 -1
  65. package/dist/lib/keychain.js +1 -1
  66. package/dist/lib/messaging.js +426 -77
  67. package/dist/lib/schedules.js +13 -1
  68. package/dist/lib/skill-learning.js +13 -0
  69. package/dist/lib/store.js +13 -1
  70. package/dist/lib/tasks.js +345 -40
  71. package/dist/lib/tmux-routing.js +345 -40
  72. package/dist/mcp/server.js +362 -43
  73. package/dist/mcp/tools/create-task.js +345 -40
  74. package/dist/mcp/tools/list-tasks.js +422 -60
  75. package/dist/mcp/tools/send-message.js +426 -77
  76. package/dist/mcp/tools/update-task.js +345 -40
  77. package/dist/runtime/index.js +346 -41
  78. package/dist/tui/App.js +348 -43
  79. package/package.json +1 -1
@@ -193,6 +193,17 @@ function normalizeOrchestration(raw) {
193
193
  const userOrg = raw.orchestration ?? {};
194
194
  raw.orchestration = { ...defaultOrg, ...userOrg };
195
195
  }
196
+ function normalizeCloudEndpoint(raw) {
197
+ const cloud = raw.cloud;
198
+ if (!cloud?.endpoint) return;
199
+ const ep = String(cloud.endpoint);
200
+ if (ep === "https://askexe.com/cloud" || ep === "https://askexe.com/cloud/") {
201
+ cloud.endpoint = "https://cloud.askexe.com";
202
+ process.stderr.write(
203
+ "[config] Auto-migrated cloud endpoint: askexe.com/cloud \u2192 cloud.askexe.com\n"
204
+ );
205
+ }
206
+ }
196
207
  async function loadConfig() {
197
208
  const dir = process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? EXE_AI_DIR;
198
209
  await ensurePrivateDir(dir);
@@ -218,6 +229,7 @@ async function loadConfig() {
218
229
  normalizeSessionLifecycle(migratedCfg);
219
230
  normalizeAutoUpdate(migratedCfg);
220
231
  normalizeOrchestration(migratedCfg);
232
+ normalizeCloudEndpoint(migratedCfg);
221
233
  const config = { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db"), ...migratedCfg };
222
234
  if (config.dbPath.startsWith("~")) {
223
235
  config.dbPath = config.dbPath.replace(/^~/, os.homedir());
@@ -4667,7 +4679,7 @@ async function getMasterKey() {
4667
4679
  b64Value = content;
4668
4680
  }
4669
4681
  const key = Buffer.from(b64Value, "base64");
4670
- if (!content.startsWith(ENCRYPTED_PREFIX) && isRootOnlyTrustedServerKeyFile(keyPath)) {
4682
+ if (isRootOnlyTrustedServerKeyFile(keyPath)) {
4671
4683
  return key;
4672
4684
  }
4673
4685
  const migrated = macKeychainSet(b64Value) || linuxSecretSet(b64Value);
@@ -193,6 +193,17 @@ function normalizeOrchestration(raw) {
193
193
  const userOrg = raw.orchestration ?? {};
194
194
  raw.orchestration = { ...defaultOrg, ...userOrg };
195
195
  }
196
+ function normalizeCloudEndpoint(raw) {
197
+ const cloud = raw.cloud;
198
+ if (!cloud?.endpoint) return;
199
+ const ep = String(cloud.endpoint);
200
+ if (ep === "https://askexe.com/cloud" || ep === "https://askexe.com/cloud/") {
201
+ cloud.endpoint = "https://cloud.askexe.com";
202
+ process.stderr.write(
203
+ "[config] Auto-migrated cloud endpoint: askexe.com/cloud \u2192 cloud.askexe.com\n"
204
+ );
205
+ }
206
+ }
196
207
  async function loadConfig() {
197
208
  const dir = process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? EXE_AI_DIR;
198
209
  await ensurePrivateDir(dir);
@@ -218,6 +229,7 @@ async function loadConfig() {
218
229
  normalizeSessionLifecycle(migratedCfg);
219
230
  normalizeAutoUpdate(migratedCfg);
220
231
  normalizeOrchestration(migratedCfg);
232
+ normalizeCloudEndpoint(migratedCfg);
221
233
  const config = { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db"), ...migratedCfg };
222
234
  if (config.dbPath.startsWith("~")) {
223
235
  config.dbPath = config.dbPath.replace(/^~/, os.homedir());
@@ -4240,7 +4252,7 @@ async function getMasterKey() {
4240
4252
  b64Value = content;
4241
4253
  }
4242
4254
  const key = Buffer.from(b64Value, "base64");
4243
- if (!content.startsWith(ENCRYPTED_PREFIX) && isRootOnlyTrustedServerKeyFile(keyPath)) {
4255
+ if (isRootOnlyTrustedServerKeyFile(keyPath)) {
4244
4256
  return key;
4245
4257
  }
4246
4258
  const migrated = macKeychainSet(b64Value) || linuxSecretSet(b64Value);
@@ -193,6 +193,17 @@ function normalizeOrchestration(raw) {
193
193
  const userOrg = raw.orchestration ?? {};
194
194
  raw.orchestration = { ...defaultOrg, ...userOrg };
195
195
  }
196
+ function normalizeCloudEndpoint(raw) {
197
+ const cloud = raw.cloud;
198
+ if (!cloud?.endpoint) return;
199
+ const ep = String(cloud.endpoint);
200
+ if (ep === "https://askexe.com/cloud" || ep === "https://askexe.com/cloud/") {
201
+ cloud.endpoint = "https://cloud.askexe.com";
202
+ process.stderr.write(
203
+ "[config] Auto-migrated cloud endpoint: askexe.com/cloud \u2192 cloud.askexe.com\n"
204
+ );
205
+ }
206
+ }
196
207
  async function loadConfig() {
197
208
  const dir = process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? EXE_AI_DIR;
198
209
  await ensurePrivateDir(dir);
@@ -218,6 +229,7 @@ async function loadConfig() {
218
229
  normalizeSessionLifecycle(migratedCfg);
219
230
  normalizeAutoUpdate(migratedCfg);
220
231
  normalizeOrchestration(migratedCfg);
232
+ normalizeCloudEndpoint(migratedCfg);
221
233
  const config = { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db"), ...migratedCfg };
222
234
  if (config.dbPath.startsWith("~")) {
223
235
  config.dbPath = config.dbPath.replace(/^~/, os.homedir());
@@ -4364,7 +4376,7 @@ async function getMasterKey() {
4364
4376
  b64Value = content;
4365
4377
  }
4366
4378
  const key = Buffer.from(b64Value, "base64");
4367
- if (!content.startsWith(ENCRYPTED_PREFIX) && isRootOnlyTrustedServerKeyFile(keyPath)) {
4379
+ if (isRootOnlyTrustedServerKeyFile(keyPath)) {
4368
4380
  return key;
4369
4381
  }
4370
4382
  const migrated = macKeychainSet(b64Value) || linuxSecretSet(b64Value);
@@ -193,6 +193,17 @@ function normalizeOrchestration(raw) {
193
193
  const userOrg = raw.orchestration ?? {};
194
194
  raw.orchestration = { ...defaultOrg, ...userOrg };
195
195
  }
196
+ function normalizeCloudEndpoint(raw) {
197
+ const cloud = raw.cloud;
198
+ if (!cloud?.endpoint) return;
199
+ const ep = String(cloud.endpoint);
200
+ if (ep === "https://askexe.com/cloud" || ep === "https://askexe.com/cloud/") {
201
+ cloud.endpoint = "https://cloud.askexe.com";
202
+ process.stderr.write(
203
+ "[config] Auto-migrated cloud endpoint: askexe.com/cloud \u2192 cloud.askexe.com\n"
204
+ );
205
+ }
206
+ }
196
207
  async function loadConfig() {
197
208
  const dir = process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? EXE_AI_DIR;
198
209
  await ensurePrivateDir(dir);
@@ -218,6 +229,7 @@ async function loadConfig() {
218
229
  normalizeSessionLifecycle(migratedCfg);
219
230
  normalizeAutoUpdate(migratedCfg);
220
231
  normalizeOrchestration(migratedCfg);
232
+ normalizeCloudEndpoint(migratedCfg);
221
233
  const config = { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db"), ...migratedCfg };
222
234
  if (config.dbPath.startsWith("~")) {
223
235
  config.dbPath = config.dbPath.replace(/^~/, os.homedir());
@@ -4816,7 +4828,7 @@ async function getMasterKey() {
4816
4828
  b64Value = content;
4817
4829
  }
4818
4830
  const key = Buffer.from(b64Value, "base64");
4819
- if (!content.startsWith(ENCRYPTED_PREFIX) && isRootOnlyTrustedServerKeyFile(keyPath)) {
4831
+ if (isRootOnlyTrustedServerKeyFile(keyPath)) {
4820
4832
  return key;
4821
4833
  }
4822
4834
  const migrated = macKeychainSet(b64Value) || linuxSecretSet(b64Value);
@@ -193,6 +193,17 @@ function normalizeOrchestration(raw) {
193
193
  const userOrg = raw.orchestration ?? {};
194
194
  raw.orchestration = { ...defaultOrg, ...userOrg };
195
195
  }
196
+ function normalizeCloudEndpoint(raw) {
197
+ const cloud = raw.cloud;
198
+ if (!cloud?.endpoint) return;
199
+ const ep = String(cloud.endpoint);
200
+ if (ep === "https://askexe.com/cloud" || ep === "https://askexe.com/cloud/") {
201
+ cloud.endpoint = "https://cloud.askexe.com";
202
+ process.stderr.write(
203
+ "[config] Auto-migrated cloud endpoint: askexe.com/cloud \u2192 cloud.askexe.com\n"
204
+ );
205
+ }
206
+ }
196
207
  async function loadConfig() {
197
208
  const dir = process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? EXE_AI_DIR;
198
209
  await ensurePrivateDir(dir);
@@ -218,6 +229,7 @@ async function loadConfig() {
218
229
  normalizeSessionLifecycle(migratedCfg);
219
230
  normalizeAutoUpdate(migratedCfg);
220
231
  normalizeOrchestration(migratedCfg);
232
+ normalizeCloudEndpoint(migratedCfg);
221
233
  const config = { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db"), ...migratedCfg };
222
234
  if (config.dbPath.startsWith("~")) {
223
235
  config.dbPath = config.dbPath.replace(/^~/, os.homedir());
@@ -4815,7 +4827,7 @@ async function getMasterKey() {
4815
4827
  b64Value = content;
4816
4828
  }
4817
4829
  const key = Buffer.from(b64Value, "base64");
4818
- if (!content.startsWith(ENCRYPTED_PREFIX) && isRootOnlyTrustedServerKeyFile(keyPath)) {
4830
+ if (isRootOnlyTrustedServerKeyFile(keyPath)) {
4819
4831
  return key;
4820
4832
  }
4821
4833
  const migrated = macKeychainSet(b64Value) || linuxSecretSet(b64Value);
@@ -193,6 +193,17 @@ function normalizeOrchestration(raw) {
193
193
  const userOrg = raw.orchestration ?? {};
194
194
  raw.orchestration = { ...defaultOrg, ...userOrg };
195
195
  }
196
+ function normalizeCloudEndpoint(raw) {
197
+ const cloud = raw.cloud;
198
+ if (!cloud?.endpoint) return;
199
+ const ep = String(cloud.endpoint);
200
+ if (ep === "https://askexe.com/cloud" || ep === "https://askexe.com/cloud/") {
201
+ cloud.endpoint = "https://cloud.askexe.com";
202
+ process.stderr.write(
203
+ "[config] Auto-migrated cloud endpoint: askexe.com/cloud \u2192 cloud.askexe.com\n"
204
+ );
205
+ }
206
+ }
196
207
  async function loadConfig() {
197
208
  const dir = process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? EXE_AI_DIR;
198
209
  await ensurePrivateDir(dir);
@@ -218,6 +229,7 @@ async function loadConfig() {
218
229
  normalizeSessionLifecycle(migratedCfg);
219
230
  normalizeAutoUpdate(migratedCfg);
220
231
  normalizeOrchestration(migratedCfg);
232
+ normalizeCloudEndpoint(migratedCfg);
221
233
  const config = { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db"), ...migratedCfg };
222
234
  if (config.dbPath.startsWith("~")) {
223
235
  config.dbPath = config.dbPath.replace(/^~/, os.homedir());
@@ -4362,7 +4374,7 @@ async function getMasterKey() {
4362
4374
  b64Value = content;
4363
4375
  }
4364
4376
  const key = Buffer.from(b64Value, "base64");
4365
- if (!content.startsWith(ENCRYPTED_PREFIX) && isRootOnlyTrustedServerKeyFile(keyPath)) {
4377
+ if (isRootOnlyTrustedServerKeyFile(keyPath)) {
4366
4378
  return key;
4367
4379
  }
4368
4380
  const migrated = macKeychainSet(b64Value) || linuxSecretSet(b64Value);
@@ -193,6 +193,17 @@ function normalizeOrchestration(raw) {
193
193
  const userOrg = raw.orchestration ?? {};
194
194
  raw.orchestration = { ...defaultOrg, ...userOrg };
195
195
  }
196
+ function normalizeCloudEndpoint(raw) {
197
+ const cloud = raw.cloud;
198
+ if (!cloud?.endpoint) return;
199
+ const ep = String(cloud.endpoint);
200
+ if (ep === "https://askexe.com/cloud" || ep === "https://askexe.com/cloud/") {
201
+ cloud.endpoint = "https://cloud.askexe.com";
202
+ process.stderr.write(
203
+ "[config] Auto-migrated cloud endpoint: askexe.com/cloud \u2192 cloud.askexe.com\n"
204
+ );
205
+ }
206
+ }
196
207
  async function loadConfig() {
197
208
  const dir = process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? EXE_AI_DIR;
198
209
  await ensurePrivateDir(dir);
@@ -218,6 +229,7 @@ async function loadConfig() {
218
229
  normalizeSessionLifecycle(migratedCfg);
219
230
  normalizeAutoUpdate(migratedCfg);
220
231
  normalizeOrchestration(migratedCfg);
232
+ normalizeCloudEndpoint(migratedCfg);
221
233
  const config = { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db"), ...migratedCfg };
222
234
  if (config.dbPath.startsWith("~")) {
223
235
  config.dbPath = config.dbPath.replace(/^~/, os.homedir());
@@ -3378,7 +3390,7 @@ async function getMasterKey() {
3378
3390
  b64Value = content;
3379
3391
  }
3380
3392
  const key = Buffer.from(b64Value, "base64");
3381
- if (!content.startsWith(ENCRYPTED_PREFIX) && isRootOnlyTrustedServerKeyFile(keyPath)) {
3393
+ if (isRootOnlyTrustedServerKeyFile(keyPath)) {
3382
3394
  return key;
3383
3395
  }
3384
3396
  const migrated = macKeychainSet(b64Value) || linuxSecretSet(b64Value);