@askexenow/exe-os 0.9.21 → 0.9.22

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 (60) hide show
  1. package/dist/bin/backfill-conversations.js +17 -4
  2. package/dist/bin/backfill-responses.js +17 -4
  3. package/dist/bin/backfill-vectors.js +2 -2
  4. package/dist/bin/cleanup-stale-review-tasks.js +17 -4
  5. package/dist/bin/cli.js +378 -171
  6. package/dist/bin/exe-assign.js +17 -4
  7. package/dist/bin/exe-boot.js +2 -2
  8. package/dist/bin/exe-dispatch.js +17 -4
  9. package/dist/bin/exe-doctor.js +2 -2
  10. package/dist/bin/exe-export-behaviors.js +17 -4
  11. package/dist/bin/exe-forget.js +17 -4
  12. package/dist/bin/exe-gateway.js +17 -4
  13. package/dist/bin/exe-heartbeat.js +17 -4
  14. package/dist/bin/exe-kill.js +17 -4
  15. package/dist/bin/exe-launch-agent.js +17 -4
  16. package/dist/bin/exe-pending-messages.js +17 -4
  17. package/dist/bin/exe-pending-notifications.js +17 -4
  18. package/dist/bin/exe-pending-reviews.js +17 -4
  19. package/dist/bin/exe-review.js +17 -4
  20. package/dist/bin/exe-search.js +23 -8
  21. package/dist/bin/exe-session-cleanup.js +17 -4
  22. package/dist/bin/exe-start-codex.js +209 -32
  23. package/dist/bin/exe-start-opencode.js +17 -4
  24. package/dist/bin/exe-status.js +17 -4
  25. package/dist/bin/exe-team.js +17 -4
  26. package/dist/bin/git-sweep.js +17 -4
  27. package/dist/bin/graph-backfill.js +17 -4
  28. package/dist/bin/graph-export.js +17 -4
  29. package/dist/bin/install.js +42 -0
  30. package/dist/bin/intercom-check.js +17 -4
  31. package/dist/bin/scan-tasks.js +17 -4
  32. package/dist/bin/shard-migrate.js +17 -4
  33. package/dist/bin/update.js +187 -42
  34. package/dist/gateway/index.js +17 -4
  35. package/dist/hooks/bug-report-worker.js +793 -150
  36. package/dist/hooks/codex-stop-task-finalizer.js +3020 -2375
  37. package/dist/hooks/commit-complete.js +156 -6
  38. package/dist/hooks/error-recall.js +23 -8
  39. package/dist/hooks/ingest.js +17 -4
  40. package/dist/hooks/instructions-loaded.js +17 -4
  41. package/dist/hooks/notification.js +17 -4
  42. package/dist/hooks/post-compact.js +17 -4
  43. package/dist/hooks/post-tool-combined.js +23 -8
  44. package/dist/hooks/pre-compact.js +156 -8
  45. package/dist/hooks/pre-tool-use.js +21 -12
  46. package/dist/hooks/prompt-submit.js +23 -8
  47. package/dist/hooks/session-end.js +156 -8
  48. package/dist/hooks/session-start.js +23 -8
  49. package/dist/hooks/stop.js +306 -9
  50. package/dist/hooks/subagent-stop.js +306 -9
  51. package/dist/hooks/summary-worker.js +2 -2
  52. package/dist/index.js +17 -4
  53. package/dist/lib/exe-daemon.js +17 -4
  54. package/dist/lib/hybrid-search.js +23 -8
  55. package/dist/lib/schedules.js +2 -2
  56. package/dist/lib/store.js +17 -4
  57. package/dist/mcp/server.js +36 -10
  58. package/dist/runtime/index.js +17 -4
  59. package/dist/tui/App.js +17 -4
  60. package/package.json +1 -1
@@ -2736,8 +2736,8 @@ function getShardClient(projectName) {
2736
2736
  throw new Error("Shard manager not initialized. Call initShardManager() first.");
2737
2737
  }
2738
2738
  const safeName = projectName.replace(/[^a-zA-Z0-9_-]/g, "_");
2739
- if (!safeName) {
2740
- throw new Error(`Invalid project name for shard: "${projectName}"`);
2739
+ if (!safeName || safeName === "unknown") {
2740
+ throw new Error(`Invalid project name for shard: "${projectName}" (resolved to "${safeName}")`);
2741
2741
  }
2742
2742
  const cached = _shards.get(safeName);
2743
2743
  if (cached) {
@@ -3713,19 +3713,32 @@ async function flushBatch() {
3713
3713
  const { isShardingEnabled: isShardingEnabled2, getReadyShardClient: getReadyShardClient2 } = await Promise.resolve().then(() => (init_shard_manager(), shard_manager_exports));
3714
3714
  if (isShardingEnabled2()) {
3715
3715
  const byProject = /* @__PURE__ */ new Map();
3716
+ let skippedUnknown = 0;
3716
3717
  for (const row of batch) {
3717
- const proj = row.project_name || "unknown";
3718
+ const proj = row.project_name?.trim();
3719
+ if (!proj) {
3720
+ skippedUnknown++;
3721
+ continue;
3722
+ }
3718
3723
  if (!byProject.has(proj)) byProject.set(proj, []);
3719
3724
  byProject.get(proj).push(row);
3720
3725
  }
3726
+ if (skippedUnknown > 0) {
3727
+ process.stderr.write(
3728
+ `[store] Shard skip: ${skippedUnknown} record(s) with empty project_name (kept in main DB only)
3729
+ `
3730
+ );
3731
+ }
3721
3732
  for (const [project, rows] of byProject) {
3722
3733
  try {
3723
3734
  const shardClient = await getReadyShardClient2(project);
3724
3735
  const shardStmts = rows.map(buildStmt);
3725
3736
  await shardClient.batch(shardStmts, "write");
3726
3737
  } catch (err) {
3738
+ const fullError = err instanceof Error ? `${err.name}: ${err.message}${err.stack ? `
3739
+ ${err.stack.split("\n").slice(1, 3).join("\n")}` : ""}` : String(err);
3727
3740
  process.stderr.write(
3728
- `[store] Shard write failed for ${project}: ${err instanceof Error ? err.message : String(err)}
3741
+ `[store] Shard write failed for ${project} (${rows.length} records): ${fullError}
3729
3742
  `
3730
3743
  );
3731
3744
  }
@@ -2736,8 +2736,8 @@ function getShardClient(projectName) {
2736
2736
  throw new Error("Shard manager not initialized. Call initShardManager() first.");
2737
2737
  }
2738
2738
  const safeName = projectName.replace(/[^a-zA-Z0-9_-]/g, "_");
2739
- if (!safeName) {
2740
- throw new Error(`Invalid project name for shard: "${projectName}"`);
2739
+ if (!safeName || safeName === "unknown") {
2740
+ throw new Error(`Invalid project name for shard: "${projectName}" (resolved to "${safeName}")`);
2741
2741
  }
2742
2742
  const cached = _shards.get(safeName);
2743
2743
  if (cached) {
@@ -3712,19 +3712,32 @@ async function flushBatch() {
3712
3712
  const { isShardingEnabled: isShardingEnabled2, getReadyShardClient: getReadyShardClient2 } = await Promise.resolve().then(() => (init_shard_manager(), shard_manager_exports));
3713
3713
  if (isShardingEnabled2()) {
3714
3714
  const byProject = /* @__PURE__ */ new Map();
3715
+ let skippedUnknown = 0;
3715
3716
  for (const row of batch) {
3716
- const proj = row.project_name || "unknown";
3717
+ const proj = row.project_name?.trim();
3718
+ if (!proj) {
3719
+ skippedUnknown++;
3720
+ continue;
3721
+ }
3717
3722
  if (!byProject.has(proj)) byProject.set(proj, []);
3718
3723
  byProject.get(proj).push(row);
3719
3724
  }
3725
+ if (skippedUnknown > 0) {
3726
+ process.stderr.write(
3727
+ `[store] Shard skip: ${skippedUnknown} record(s) with empty project_name (kept in main DB only)
3728
+ `
3729
+ );
3730
+ }
3720
3731
  for (const [project, rows] of byProject) {
3721
3732
  try {
3722
3733
  const shardClient = await getReadyShardClient2(project);
3723
3734
  const shardStmts = rows.map(buildStmt);
3724
3735
  await shardClient.batch(shardStmts, "write");
3725
3736
  } catch (err) {
3737
+ const fullError = err instanceof Error ? `${err.name}: ${err.message}${err.stack ? `
3738
+ ${err.stack.split("\n").slice(1, 3).join("\n")}` : ""}` : String(err);
3726
3739
  process.stderr.write(
3727
- `[store] Shard write failed for ${project}: ${err instanceof Error ? err.message : String(err)}
3740
+ `[store] Shard write failed for ${project} (${rows.length} records): ${fullError}
3728
3741
  `
3729
3742
  );
3730
3743
  }
@@ -2732,8 +2732,8 @@ function getShardClient(projectName) {
2732
2732
  throw new Error("Shard manager not initialized. Call initShardManager() first.");
2733
2733
  }
2734
2734
  const safeName = projectName.replace(/[^a-zA-Z0-9_-]/g, "_");
2735
- if (!safeName) {
2736
- throw new Error(`Invalid project name for shard: "${projectName}"`);
2735
+ if (!safeName || safeName === "unknown") {
2736
+ throw new Error(`Invalid project name for shard: "${projectName}" (resolved to "${safeName}")`);
2737
2737
  }
2738
2738
  const cached = _shards.get(safeName);
2739
2739
  if (cached) {
@@ -2934,8 +2934,8 @@ function getShardClient(projectName) {
2934
2934
  throw new Error("Shard manager not initialized. Call initShardManager() first.");
2935
2935
  }
2936
2936
  const safeName = projectName.replace(/[^a-zA-Z0-9_-]/g, "_");
2937
- if (!safeName) {
2938
- throw new Error(`Invalid project name for shard: "${projectName}"`);
2937
+ if (!safeName || safeName === "unknown") {
2938
+ throw new Error(`Invalid project name for shard: "${projectName}" (resolved to "${safeName}")`);
2939
2939
  }
2940
2940
  const cached = _shards.get(safeName);
2941
2941
  if (cached) {
@@ -3804,19 +3804,32 @@ async function flushBatch() {
3804
3804
  const { isShardingEnabled: isShardingEnabled2, getReadyShardClient: getReadyShardClient2 } = await Promise.resolve().then(() => (init_shard_manager(), shard_manager_exports));
3805
3805
  if (isShardingEnabled2()) {
3806
3806
  const byProject = /* @__PURE__ */ new Map();
3807
+ let skippedUnknown = 0;
3807
3808
  for (const row of batch) {
3808
- const proj = row.project_name || "unknown";
3809
+ const proj = row.project_name?.trim();
3810
+ if (!proj) {
3811
+ skippedUnknown++;
3812
+ continue;
3813
+ }
3809
3814
  if (!byProject.has(proj)) byProject.set(proj, []);
3810
3815
  byProject.get(proj).push(row);
3811
3816
  }
3817
+ if (skippedUnknown > 0) {
3818
+ process.stderr.write(
3819
+ `[store] Shard skip: ${skippedUnknown} record(s) with empty project_name (kept in main DB only)
3820
+ `
3821
+ );
3822
+ }
3812
3823
  for (const [project, rows] of byProject) {
3813
3824
  try {
3814
3825
  const shardClient = await getReadyShardClient2(project);
3815
3826
  const shardStmts = rows.map(buildStmt);
3816
3827
  await shardClient.batch(shardStmts, "write");
3817
3828
  } catch (err) {
3829
+ const fullError = err instanceof Error ? `${err.name}: ${err.message}${err.stack ? `
3830
+ ${err.stack.split("\n").slice(1, 3).join("\n")}` : ""}` : String(err);
3818
3831
  process.stderr.write(
3819
- `[store] Shard write failed for ${project}: ${err instanceof Error ? err.message : String(err)}
3832
+ `[store] Shard write failed for ${project} (${rows.length} records): ${fullError}
3820
3833
  `
3821
3834
  );
3822
3835
  }