@askexenow/exe-os 0.9.174 → 0.9.176

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.
@@ -1,4 +1,7 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ GlobTool
4
+ } from "../chunk-KCUYRZSX.js";
2
5
  import {
3
6
  GrepTool
4
7
  } from "../chunk-EIT6J37V.js";
@@ -14,9 +17,6 @@ import {
14
17
  import {
15
18
  FileReadTool
16
19
  } from "../chunk-TMEE7AT7.js";
17
- import {
18
- GlobTool
19
- } from "../chunk-KCUYRZSX.js";
20
20
  import {
21
21
  getSessionPrompt
22
22
  } from "../chunk-GSGT3QI5.js";
@@ -8,6 +8,7 @@ import {
8
8
  auditKeyHealth,
9
9
  auditNullVectors,
10
10
  auditOrphanedProjects,
11
+ auditOutbox,
11
12
  auditShards,
12
13
  auditStats,
13
14
  fixBloated,
@@ -19,7 +20,7 @@ import {
19
20
  parseFlags,
20
21
  runAudit,
21
22
  splitAtSentences
22
- } from "../chunk-SBFTWXG3.js";
23
+ } from "../chunk-Y3OLLO3J.js";
23
24
  import "../chunk-L3TB7CC3.js";
24
25
  import "../chunk-6Y4B3QF6.js";
25
26
  import "../chunk-MLKGABMK.js";
@@ -32,6 +33,7 @@ export {
32
33
  auditKeyHealth,
33
34
  auditNullVectors,
34
35
  auditOrphanedProjects,
36
+ auditOutbox,
35
37
  auditShards,
36
38
  auditStats,
37
39
  fixBloated,
@@ -4,7 +4,7 @@ import {
4
4
  } from "../chunk-BA2ZPGZK.js";
5
5
  import {
6
6
  lightweightSearch
7
- } from "../chunk-WFQH2BOA.js";
7
+ } from "../chunk-AR43F5MV.js";
8
8
  import "../chunk-HFYQQKMV.js";
9
9
  import "../chunk-CHCA3ZM2.js";
10
10
  import "../chunk-DOWW3EIO.js";
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  hybridSearch,
4
4
  lightweightSearch
5
- } from "../chunk-WFQH2BOA.js";
5
+ } from "../chunk-AR43F5MV.js";
6
6
  import {
7
7
  initStore
8
8
  } from "../chunk-HFYQQKMV.js";
@@ -4,7 +4,7 @@ import {
4
4
  main,
5
5
  runHealth,
6
6
  runTest
7
- } from "../chunk-TOB3WKSS.js";
7
+ } from "../chunk-46Q3LLXC.js";
8
8
  import "../chunk-MVMMULOJ.js";
9
9
  import "../chunk-4GXRETYL.js";
10
10
  import "../chunk-LYH5HE24.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  lightweightSearch
3
- } from "./chunk-WFQH2BOA.js";
3
+ } from "./chunk-AR43F5MV.js";
4
4
  import "./chunk-HFYQQKMV.js";
5
5
  import "./chunk-CHCA3ZM2.js";
6
6
  import "./chunk-DOWW3EIO.js";
@@ -262,19 +262,67 @@ function nextForPostFailure(status) {
262
262
  if (status >= 500) return "AskExe support intake is unhealthy server-side. Try again shortly and report the local file path.";
263
263
  return "Run `exe-os support health`; if it passes, send this output to AskExe.";
264
264
  }
265
+ async function runFlush(json) {
266
+ const { flushSupportOutbox } = await import("./support-outbox-KEJ73I3F.js");
267
+ const result = await flushSupportOutbox({ maxPerFlush: 10 });
268
+ if (json) {
269
+ console.log(JSON.stringify(result, null, 2));
270
+ return;
271
+ }
272
+ console.log("\nexe-os support flush\n");
273
+ console.log(` Bug reports sent: ${result.bugsSent}`);
274
+ console.log(` Feature requests sent: ${result.featuresSent}`);
275
+ console.log(` Errors: ${result.errors}`);
276
+ console.log(` Skipped: ${result.skipped}`);
277
+ console.log("");
278
+ const total = result.bugsSent + result.featuresSent;
279
+ if (total > 0) {
280
+ console.log(`Flushed ${total} item(s) to AskExe.`);
281
+ } else if (result.errors > 0) {
282
+ console.log("Nothing sent \u2014 network errors occurred. Retry later.");
283
+ } else {
284
+ console.log("Outbox is empty \u2014 nothing to flush.");
285
+ }
286
+ console.log("");
287
+ }
288
+ async function runStatus(json) {
289
+ const { getOutboxStatus } = await import("./support-outbox-KEJ73I3F.js");
290
+ const status = await getOutboxStatus();
291
+ if (json) {
292
+ console.log(JSON.stringify(status, null, 2));
293
+ return;
294
+ }
295
+ console.log("\nexe-os support status\n");
296
+ const bugs = status.bugReports;
297
+ const features = status.featureRequests;
298
+ console.log(` Bug reports: ${bugs.unsent} unsent / ${bugs.total} total${bugs.oldest ? ` (oldest: ${bugs.oldest.slice(0, 10)})` : ""}`);
299
+ console.log(` Feature requests: ${features.unsent} unsent / ${features.total} total${features.oldest ? ` (oldest: ${features.oldest.slice(0, 10)})` : ""}`);
300
+ console.log("");
301
+ const totalUnsent = bugs.unsent + features.unsent;
302
+ if (totalUnsent > 0) {
303
+ console.log(`${totalUnsent} unsent item(s). Run \`exe-os support flush\` to send manually.`);
304
+ } else {
305
+ console.log("All items sent \u2014 outbox is clear.");
306
+ }
307
+ console.log("");
308
+ }
265
309
  function printHelp() {
266
310
  console.log(`
267
311
  exe-os support
268
312
 
269
- Customer-safe diagnostics for AskExe bug-report intake.
313
+ Customer-safe diagnostics for AskExe support intake.
270
314
 
271
315
  Commands:
272
316
  exe-os support health Check local setup + AskExe support server health
273
317
  exe-os support test --project hygo Send a safe smoke report end-to-end
318
+ exe-os support flush Force-flush unsent bug reports + feature requests
319
+ exe-os support status Show outbox status (unsent counts)
274
320
 
275
321
  What success means:
276
322
  health = this device looks ready
277
323
  test = AskExe received a real report from this device
324
+ flush = all unsent items attempted delivery
325
+ status = visibility into what's queued
278
326
  `);
279
327
  }
280
328
  function output(rows, json, command) {
@@ -6,10 +6,14 @@ import {
6
6
  } from "./chunk-R4IK2YT3.js";
7
7
  import {
8
8
  AUTO_WAKE_MAX_RETRIES
9
- } from "./chunk-VCCIWTWG.js";
9
+ } from "./chunk-PMTE7LF2.js";
10
10
  import {
11
11
  getToolCapabilityIndex
12
12
  } from "./chunk-6BZF3TEG.js";
13
+ import {
14
+ isRerankerAvailable,
15
+ rerankWithScores
16
+ } from "./chunk-WZTQUBIE.js";
13
17
  import {
14
18
  getEntityByName,
15
19
  getEntityNeighbors,
@@ -25,10 +29,6 @@ import {
25
29
  import {
26
30
  listRecentSessionEvents
27
31
  } from "./chunk-KLHNXG7S.js";
28
- import {
29
- isRerankerAvailable,
30
- rerankWithScores
31
- } from "./chunk-WZTQUBIE.js";
32
32
  import {
33
33
  analyzeBlastRadius,
34
34
  buildCodeContextIndex,
@@ -118,7 +118,7 @@ import {
118
118
  import {
119
119
  formatReport,
120
120
  runAudit
121
- } from "./chunk-SBFTWXG3.js";
121
+ } from "./chunk-Y3OLLO3J.js";
122
122
  import {
123
123
  runHealthCheck
124
124
  } from "./chunk-J73N5EJ6.js";
@@ -126,7 +126,7 @@ import {
126
126
  hasFailures,
127
127
  runHealth,
128
128
  runTest
129
- } from "./chunk-TOB3WKSS.js";
129
+ } from "./chunk-46Q3LLXC.js";
130
130
  import {
131
131
  renderClientCOOTemplate
132
132
  } from "./chunk-GSGT3QI5.js";
@@ -183,7 +183,7 @@ import {
183
183
  import {
184
184
  hybridSearch,
185
185
  recentRecords
186
- } from "./chunk-WFQH2BOA.js";
186
+ } from "./chunk-AR43F5MV.js";
187
187
  import {
188
188
  attachDocumentMetadata,
189
189
  flushBatch,
@@ -57,7 +57,7 @@ async function hasOpenTasks(client, agentId, sessionScope) {
57
57
  const scope = sessionScopeFilter(sessionScope);
58
58
  const result = await client.execute({
59
59
  sql: `SELECT 1 FROM tasks
60
- WHERE assigned_to = ? AND status IN ('open', 'in_progress')${scope.sql}
60
+ WHERE assigned_to = ? AND status IN ('open', 'in_progress', 'blocked')${scope.sql}
61
61
  LIMIT 1`,
62
62
  args: [agentId, ...scope.args]
63
63
  });
@@ -618,9 +618,20 @@ async function auditKeyHealth() {
618
618
  return { masterKeyPresent: false, recoveryBackupMarked: false };
619
619
  }
620
620
  }
621
+ async function auditOutbox() {
622
+ try {
623
+ const { getOutboxStatus } = await import("./support-outbox-KEJ73I3F.js");
624
+ return await getOutboxStatus();
625
+ } catch {
626
+ return {
627
+ bugReports: { total: 0, unsent: 0 },
628
+ featureRequests: { total: 0, unsent: 0 }
629
+ };
630
+ }
631
+ }
621
632
  async function runAudit(client, flags) {
622
633
  const runConflicts = flags.conflicts || process.env.EXE_AUDIT_CONFLICTS === "1";
623
- const [stats, nullVectors, duplicates, bloated, fts, orphanedProjects, shards, keyHealth] = await Promise.all([
634
+ const [stats, nullVectors, duplicates, bloated, fts, orphanedProjects, shards, keyHealth, outbox] = await Promise.all([
624
635
  auditStats(client, flags),
625
636
  auditNullVectors(client, flags),
626
637
  auditDuplicates(client, flags),
@@ -628,7 +639,8 @@ async function runAudit(client, flags) {
628
639
  auditFts(client),
629
640
  auditOrphanedProjects(client),
630
641
  auditShards(),
631
- auditKeyHealth()
642
+ auditKeyHealth(),
643
+ auditOutbox()
632
644
  ]);
633
645
  let conflicts;
634
646
  if (runConflicts) {
@@ -649,7 +661,7 @@ async function runAudit(client, flags) {
649
661
  const duplicateCount = duplicates.reduce((sum, d) => sum + d.delete_ids.length, 0);
650
662
  const hookHealth = auditHookHealth();
651
663
  const hookOwnership = auditHookOwnership();
652
- return { stats, nullVectors, duplicates, duplicateCount, bloated, fts, orphanedProjects, conflicts, hookHealth, hookOwnership, shards, keyHealth };
664
+ return { stats, nullVectors, duplicates, duplicateCount, bloated, fts, orphanedProjects, conflicts, hookHealth, hookOwnership, shards, keyHealth, outbox };
653
665
  }
654
666
  function indicator(value, warn) {
655
667
  if (value === 0) return "\u{1F7E2}";
@@ -755,6 +767,13 @@ function formatReport(report, flags) {
755
767
  lines.push(`\u{1F534} Shards: ${fmtNum(sh.unreadable)} unreadable (${names}${sh.unreadableNames.length > 5 ? ", ..." : ""})`);
756
768
  }
757
769
  }
770
+ const ob = report.outbox;
771
+ const unsentTotal = ob.bugReports.unsent + ob.featureRequests.unsent;
772
+ if (unsentTotal === 0) {
773
+ lines.push("\u{1F7E2} Support outbox: all items sent");
774
+ } else {
775
+ lines.push(`\u{1F7E0} Support outbox: ${fmtNum(unsentTotal)} unsent (${ob.bugReports.unsent} bugs, ${ob.featureRequests.unsent} features)`);
776
+ }
758
777
  lines.push("");
759
778
  if (flags.verbose) {
760
779
  if (report.duplicates.length > 0) {
@@ -1028,6 +1047,7 @@ export {
1028
1047
  auditHookOwnership,
1029
1048
  auditShards,
1030
1049
  auditKeyHealth,
1050
+ auditOutbox,
1031
1051
  runAudit,
1032
1052
  formatReport,
1033
1053
  fixNullVectors,
@@ -48,7 +48,7 @@ import {
48
48
  shouldKillIdleSession,
49
49
  shouldKillSession,
50
50
  shouldNudgeEmployee
51
- } from "./chunk-VCCIWTWG.js";
51
+ } from "./chunk-PMTE7LF2.js";
52
52
  import "./chunk-L4VM6PZ7.js";
53
53
  import "./chunk-KM2DOJN5.js";
54
54
  import "./chunk-GA3BI2FI.js";
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  hybridSearch,
6
6
  lightweightSearch
7
- } from "../chunk-WFQH2BOA.js";
7
+ } from "../chunk-AR43F5MV.js";
8
8
  import {
9
9
  initStore
10
10
  } from "../chunk-HFYQQKMV.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  hybridSearch,
3
3
  lightweightSearch
4
- } from "../chunk-WFQH2BOA.js";
4
+ } from "../chunk-AR43F5MV.js";
5
5
  import {
6
6
  initStore
7
7
  } from "../chunk-HFYQQKMV.js";
@@ -135,7 +135,7 @@ You are **${ag.agentId}** (${ag.agentRole}). Daemon is degraded \u2014 memory un
135
135
  query = `last actions on ${projectName}`;
136
136
  header = "## Resuming Session\nHere's where you left off:";
137
137
  try {
138
- const { buildCatchupBrief } = await import("../catchup-brief-KUESSOKQ.js");
138
+ const { buildCatchupBrief } = await import("../catchup-brief-QT2OPLCK.js");
139
139
  const brief = await buildCatchupBrief(
140
140
  agentId,
141
141
  projectName,
@@ -2187,7 +2187,7 @@ function startSessionTTL() {
2187
2187
  if (!await ensureStoreForPolling()) return;
2188
2188
  try {
2189
2189
  const { getClient } = await import("./database.js");
2190
- const { checkSessionTTL, createSessionTTLRealDeps } = await import("../daemon-orchestration-NA3SW3FP.js");
2190
+ const { checkSessionTTL, createSessionTTLRealDeps } = await import("../daemon-orchestration-MIRY7676.js");
2191
2191
  const deps = createSessionTTLRealDeps(getClient);
2192
2192
  const killed = await checkSessionTTL(deps);
2193
2193
  if (killed.length > 0) acted("session_ttl");
@@ -2236,7 +2236,7 @@ function startIdleKill() {
2236
2236
  const cfg = await getCachedConfig();
2237
2237
  if (!cfg) return;
2238
2238
  const { getClient } = await import("./database.js");
2239
- const { pollIdleKill, createIdleKillRealDeps } = await import("../daemon-orchestration-NA3SW3FP.js");
2239
+ const { pollIdleKill, createIdleKillRealDeps } = await import("../daemon-orchestration-MIRY7676.js");
2240
2240
  const deps = createIdleKillRealDeps(
2241
2241
  getClient,
2242
2242
  cfg.sessionLifecycle.idleKillIntercomAckWindowMs
@@ -2793,7 +2793,7 @@ function startOrphanReaper() {
2793
2793
  const tick = async () => {
2794
2794
  fired("orphan_reaper");
2795
2795
  try {
2796
- const { reapOrphanedMcpProcesses, createOrphanReaperRealDeps } = await import("../daemon-orchestration-NA3SW3FP.js");
2796
+ const { reapOrphanedMcpProcesses, createOrphanReaperRealDeps } = await import("../daemon-orchestration-MIRY7676.js");
2797
2797
  const deps = createOrphanReaperRealDeps();
2798
2798
  const reaped = await reapOrphanedMcpProcesses(deps);
2799
2799
  if (reaped.length > 0) acted("orphan_reaper");
@@ -2817,7 +2817,7 @@ function startZombieAgentReaper() {
2817
2817
  const tick = async () => {
2818
2818
  fired("zombie_agent_reaper");
2819
2819
  try {
2820
- const { reapZombieAgentProcesses, createZombieAgentReaperRealDeps } = await import("../daemon-orchestration-NA3SW3FP.js");
2820
+ const { reapZombieAgentProcesses, createZombieAgentReaperRealDeps } = await import("../daemon-orchestration-MIRY7676.js");
2821
2821
  const deps = createZombieAgentReaperRealDeps();
2822
2822
  const reaped = reapZombieAgentProcesses(deps);
2823
2823
  if (reaped.length > 0) acted("zombie_agent_reaper");
@@ -2840,7 +2840,7 @@ function startWorktreeReaper() {
2840
2840
  const tick = async () => {
2841
2841
  fired("worktree_reaper");
2842
2842
  try {
2843
- const { reapOrphanedWorktrees, createWorktreeReaperRealDeps } = await import("../daemon-orchestration-NA3SW3FP.js");
2843
+ const { reapOrphanedWorktrees, createWorktreeReaperRealDeps } = await import("../daemon-orchestration-MIRY7676.js");
2844
2844
  const deps = await createWorktreeReaperRealDeps();
2845
2845
  const result = await reapOrphanedWorktrees(deps);
2846
2846
  if (result.pruned.length > 0) {
@@ -2889,7 +2889,7 @@ function startStuckTaskRelease() {
2889
2889
  if (!await ensureStoreForPolling()) return;
2890
2890
  try {
2891
2891
  const { getClient } = await import("./database.js");
2892
- const { releaseStuckTasks, createStuckTaskRealDeps } = await import("../daemon-orchestration-NA3SW3FP.js");
2892
+ const { releaseStuckTasks, createStuckTaskRealDeps } = await import("../daemon-orchestration-MIRY7676.js");
2893
2893
  const deps = createStuckTaskRealDeps(getClient);
2894
2894
  const released = await releaseStuckTasks(deps);
2895
2895
  if (released.length > 0) {
@@ -5,7 +5,7 @@ import {
5
5
  recentRecords,
6
6
  rrfMerge,
7
7
  rrfMergeMulti
8
- } from "../chunk-WFQH2BOA.js";
8
+ } from "../chunk-AR43F5MV.js";
9
9
  import "../chunk-HFYQQKMV.js";
10
10
  import "../chunk-CHCA3ZM2.js";
11
11
  import "../chunk-DOWW3EIO.js";
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  registerAllTools
3
- } from "../chunk-MVPJEV6U.js";
3
+ } from "../chunk-IDAMUZYR.js";
4
4
  import "../chunk-PLNYW6PA.js";
5
5
  import "../chunk-R4IK2YT3.js";
6
- import "../chunk-VCCIWTWG.js";
6
+ import "../chunk-PMTE7LF2.js";
7
7
  import "../chunk-6BZF3TEG.js";
8
+ import "../chunk-WZTQUBIE.js";
8
9
  import "../chunk-XOVQ43JR.js";
9
10
  import "../chunk-557C2IGL.js";
10
11
  import "../chunk-E6ORBQHP.js";
11
12
  import "../chunk-KLHNXG7S.js";
12
- import "../chunk-WZTQUBIE.js";
13
13
  import "../chunk-PMMPAFGZ.js";
14
14
  import "../chunk-GROYT25I.js";
15
15
  import "../chunk-ZR2ZH5CN.js";
@@ -35,10 +35,10 @@ import "../chunk-46SQTBQW.js";
35
35
  import "../chunk-GP6G6EQI.js";
36
36
  import "../chunk-GUMRIUI5.js";
37
37
  import "../chunk-I7AW4237.js";
38
- import "../chunk-SBFTWXG3.js";
38
+ import "../chunk-Y3OLLO3J.js";
39
39
  import "../chunk-J73N5EJ6.js";
40
40
  import "../chunk-UQICZSRC.js";
41
- import "../chunk-TOB3WKSS.js";
41
+ import "../chunk-46Q3LLXC.js";
42
42
  import "../chunk-GSGT3QI5.js";
43
43
  import "../chunk-3MN7V2SR.js";
44
44
  import "../chunk-LGY2BIOT.js";
@@ -56,7 +56,7 @@ import "../chunk-BA2ZPGZK.js";
56
56
  import "../chunk-2SVJSE6I.js";
57
57
  import "../chunk-D6EK7PYQ.js";
58
58
  import "../chunk-CMFLJNP6.js";
59
- import "../chunk-WFQH2BOA.js";
59
+ import "../chunk-AR43F5MV.js";
60
60
  import "../chunk-HFYQQKMV.js";
61
61
  import "../chunk-CHCA3ZM2.js";
62
62
  import "../chunk-DOWW3EIO.js";
@@ -3,7 +3,7 @@ import {
3
3
  } from "../chunk-V4TZI6EO.js";
4
4
  import {
5
5
  registerAllTools
6
- } from "../chunk-MVPJEV6U.js";
6
+ } from "../chunk-IDAMUZYR.js";
7
7
  import {
8
8
  initLicenseGate
9
9
  } from "../chunk-PLNYW6PA.js";
@@ -11,13 +11,13 @@ import {
11
11
  startToolTelemetryFlush,
12
12
  wrapServerWithTelemetry
13
13
  } from "../chunk-R4IK2YT3.js";
14
- import "../chunk-VCCIWTWG.js";
14
+ import "../chunk-PMTE7LF2.js";
15
15
  import "../chunk-6BZF3TEG.js";
16
+ import "../chunk-WZTQUBIE.js";
16
17
  import "../chunk-XOVQ43JR.js";
17
18
  import "../chunk-557C2IGL.js";
18
19
  import "../chunk-E6ORBQHP.js";
19
20
  import "../chunk-KLHNXG7S.js";
20
- import "../chunk-WZTQUBIE.js";
21
21
  import "../chunk-PMMPAFGZ.js";
22
22
  import "../chunk-GROYT25I.js";
23
23
  import "../chunk-ZR2ZH5CN.js";
@@ -43,10 +43,10 @@ import "../chunk-46SQTBQW.js";
43
43
  import "../chunk-GP6G6EQI.js";
44
44
  import "../chunk-GUMRIUI5.js";
45
45
  import "../chunk-I7AW4237.js";
46
- import "../chunk-SBFTWXG3.js";
46
+ import "../chunk-Y3OLLO3J.js";
47
47
  import "../chunk-J73N5EJ6.js";
48
48
  import "../chunk-UQICZSRC.js";
49
- import "../chunk-TOB3WKSS.js";
49
+ import "../chunk-46Q3LLXC.js";
50
50
  import "../chunk-GSGT3QI5.js";
51
51
  import "../chunk-3MN7V2SR.js";
52
52
  import "../chunk-LGY2BIOT.js";
@@ -66,7 +66,7 @@ import "../chunk-BA2ZPGZK.js";
66
66
  import "../chunk-2SVJSE6I.js";
67
67
  import "../chunk-D6EK7PYQ.js";
68
68
  import "../chunk-CMFLJNP6.js";
69
- import "../chunk-WFQH2BOA.js";
69
+ import "../chunk-AR43F5MV.js";
70
70
  import {
71
71
  disposeStore,
72
72
  initStore
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@askexenow/exe-os",
3
- "version": "0.9.174",
3
+ "version": "0.9.176",
4
4
  "description": "AI employee operating system — persistent memory, task management, and multi-agent coordination for Claude Code.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "type": "module",
File without changes