@askexenow/exe-os 0.9.330 → 0.9.331

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 (31) hide show
  1. package/dist/bin/cli.js +1 -1
  2. package/dist/bin/deferred-daemon-restart.js +8 -8
  3. package/dist/bin/exe-config-dump.js +0 -0
  4. package/dist/bin/exe-doctor.js +2 -2
  5. package/dist/bin/exe-forget.js +1 -1
  6. package/dist/bin/exe-search.js +1 -1
  7. package/dist/bin/install.js +8 -8
  8. package/dist/{catchup-brief-2V6WXZGD.js → catchup-brief-5ELWS6IF.js} +1 -1
  9. package/dist/{chunk-TKG6LCSQ.js → chunk-BGCJZQGQ.js} +1 -1
  10. package/dist/{chunk-OR7JFLIL.js → chunk-CASOKILE.js} +3 -3
  11. package/dist/{chunk-5IX2ZW6O.js → chunk-E5UHM2KN.js} +107 -0
  12. package/dist/{chunk-QVT4LNHH.js → chunk-IJYBKQDJ.js} +1 -1
  13. package/dist/{chunk-CCDQ6NIZ.js → chunk-OLQYIAOQ.js} +18 -0
  14. package/dist/{chunk-6YONUN6T.js → chunk-TXUSQZLH.js} +11 -1
  15. package/dist/{chunk-U7ORCOJH.js → chunk-W7F3ZBHH.js} +32 -10
  16. package/dist/{exe-key-XV4VACRP.js → exe-key-MGEOBRCI.js} +8 -8
  17. package/dist/hooks/error-recall.js +1 -1
  18. package/dist/hooks/manifest.json +4 -4
  19. package/dist/hooks/prompt-submit.js +1 -1
  20. package/dist/hooks/session-start.js +1 -1
  21. package/dist/lib/hybrid-search.js +1 -1
  22. package/dist/lib/token-spend.js +9 -3
  23. package/dist/mcp/register-tools.js +7 -7
  24. package/dist/mcp/server.js +7 -7
  25. package/dist/mcp/tools/create-task.js +1 -1
  26. package/dist/{reranker-H3TCF74O.js → reranker-WHMDMYZP.js} +1 -1
  27. package/dist/{retrieval-health-3VRJMK47.js → retrieval-health-GFGXNPSN.js} +1 -1
  28. package/dist/tui/App.js +11 -11
  29. package/package.json +1 -1
  30. package/release-notes.json +15 -15
  31. /package/dist/{chunk-KOQ6WZBS.js → chunk-TOEQZTYB.js} +0 -0
package/dist/bin/cli.js CHANGED
@@ -195,7 +195,7 @@ if (args.includes("--global")) {
195
195
  process.exit(1);
196
196
  }
197
197
  } else if (args[0] === "key") {
198
- const { main: runKey } = await import("../exe-key-XV4VACRP.js");
198
+ const { main: runKey } = await import("../exe-key-MGEOBRCI.js");
199
199
  await runKey(args.slice(1));
200
200
  } else if (args[0] === "link") {
201
201
  console.error("`exe-os link` has been removed from the customer command surface.");
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  computeMcpSurfaceHash
4
- } from "../chunk-TKG6LCSQ.js";
4
+ } from "../chunk-BGCJZQGQ.js";
5
5
  import "../chunk-WCGNCH3Q.js";
6
- import "../chunk-U7ORCOJH.js";
6
+ import "../chunk-W7F3ZBHH.js";
7
7
  import "../chunk-557C2IGL.js";
8
8
  import "../chunk-JCBQQIUV.js";
9
9
  import "../chunk-QQCZLNUC.js";
@@ -11,7 +11,7 @@ import "../chunk-CPXFQBBN.js";
11
11
  import "../chunk-W7DHFGCB.js";
12
12
  import "../chunk-ORU5LDIT.js";
13
13
  import "../chunk-O6RMSGXQ.js";
14
- import "../chunk-KOQ6WZBS.js";
14
+ import "../chunk-TOEQZTYB.js";
15
15
  import "../chunk-CRCB5S7I.js";
16
16
  import "../chunk-MTHQR76V.js";
17
17
  import "../chunk-RY7UV6CU.js";
@@ -29,7 +29,7 @@ import "../chunk-5EP4TCZ2.js";
29
29
  import "../chunk-ZWWHEX3Y.js";
30
30
  import "../chunk-IJTCNN5I.js";
31
31
  import "../chunk-UJRZD77V.js";
32
- import "../chunk-CCDQ6NIZ.js";
32
+ import "../chunk-OLQYIAOQ.js";
33
33
  import "../chunk-HMP5VT6A.js";
34
34
  import "../chunk-QXXG2MCZ.js";
35
35
  import "../chunk-MNLSPTWM.js";
@@ -37,7 +37,7 @@ import "../chunk-MTX3FQRR.js";
37
37
  import "../chunk-SPCO7SNH.js";
38
38
  import "../chunk-QAYGX7KA.js";
39
39
  import "../chunk-DDA7IAWM.js";
40
- import "../chunk-5IX2ZW6O.js";
40
+ import "../chunk-E5UHM2KN.js";
41
41
  import "../chunk-3OEVDGIY.js";
42
42
  import "../chunk-5QJFZYDD.js";
43
43
  import "../chunk-67547XFJ.js";
@@ -45,8 +45,8 @@ import "../chunk-X2FHTDIU.js";
45
45
  import "../chunk-SSC7EKY2.js";
46
46
  import "../chunk-N5ACQ7C2.js";
47
47
  import "../chunk-75H4R62K.js";
48
- import "../chunk-QVT4LNHH.js";
49
- import "../chunk-6YONUN6T.js";
48
+ import "../chunk-IJYBKQDJ.js";
49
+ import "../chunk-TXUSQZLH.js";
50
50
  import "../chunk-KQ4Z2G24.js";
51
51
  import "../chunk-L3TB7CC3.js";
52
52
  import "../chunk-FZALT2G7.js";
@@ -74,7 +74,7 @@ import "../chunk-5JILQMRS.js";
74
74
  import "../chunk-YL5S6I3R.js";
75
75
  import "../chunk-NPAGBSEN.js";
76
76
  import "../chunk-MZ2MBZ3E.js";
77
- import "../chunk-OR7JFLIL.js";
77
+ import "../chunk-CASOKILE.js";
78
78
  import "../chunk-AB4PAQYK.js";
79
79
  import "../chunk-KKZPF6YI.js";
80
80
  import "../chunk-CHCA3ZM2.js";
File without changes
@@ -23,8 +23,8 @@ import {
23
23
  runAudit,
24
24
  shouldFixShards,
25
25
  splitAtSentences
26
- } from "../chunk-QVT4LNHH.js";
27
- import "../chunk-6YONUN6T.js";
26
+ } from "../chunk-IJYBKQDJ.js";
27
+ import "../chunk-TXUSQZLH.js";
28
28
  import "../chunk-KQ4Z2G24.js";
29
29
  import "../chunk-L3TB7CC3.js";
30
30
  import "../chunk-VGMACSEV.js";
@@ -4,7 +4,7 @@ import {
4
4
  } from "../chunk-NPAGBSEN.js";
5
5
  import {
6
6
  lightweightSearch
7
- } from "../chunk-OR7JFLIL.js";
7
+ } from "../chunk-CASOKILE.js";
8
8
  import "../chunk-AB4PAQYK.js";
9
9
  import "../chunk-KKZPF6YI.js";
10
10
  import "../chunk-CHCA3ZM2.js";
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  hybridSearch
4
- } from "../chunk-OR7JFLIL.js";
4
+ } from "../chunk-CASOKILE.js";
5
5
  import "../chunk-AB4PAQYK.js";
6
6
  import {
7
7
  initStore
@@ -18,12 +18,12 @@ import {
18
18
  } from "../chunk-KADUJ7PE.js";
19
19
  import {
20
20
  computeMcpSurfaceHash
21
- } from "../chunk-TKG6LCSQ.js";
21
+ } from "../chunk-BGCJZQGQ.js";
22
22
  import {
23
23
  generateSessionWrappers
24
24
  } from "../chunk-CVTWQZOR.js";
25
25
  import "../chunk-WCGNCH3Q.js";
26
- import "../chunk-U7ORCOJH.js";
26
+ import "../chunk-W7F3ZBHH.js";
27
27
  import "../chunk-557C2IGL.js";
28
28
  import "../chunk-JCBQQIUV.js";
29
29
  import "../chunk-QQCZLNUC.js";
@@ -31,7 +31,7 @@ import "../chunk-CPXFQBBN.js";
31
31
  import "../chunk-W7DHFGCB.js";
32
32
  import "../chunk-ORU5LDIT.js";
33
33
  import "../chunk-O6RMSGXQ.js";
34
- import "../chunk-KOQ6WZBS.js";
34
+ import "../chunk-TOEQZTYB.js";
35
35
  import "../chunk-CRCB5S7I.js";
36
36
  import "../chunk-MTHQR76V.js";
37
37
  import "../chunk-RY7UV6CU.js";
@@ -49,7 +49,7 @@ import "../chunk-5EP4TCZ2.js";
49
49
  import "../chunk-ZWWHEX3Y.js";
50
50
  import "../chunk-IJTCNN5I.js";
51
51
  import "../chunk-UJRZD77V.js";
52
- import "../chunk-CCDQ6NIZ.js";
52
+ import "../chunk-OLQYIAOQ.js";
53
53
  import "../chunk-HMP5VT6A.js";
54
54
  import "../chunk-QXXG2MCZ.js";
55
55
  import "../chunk-MNLSPTWM.js";
@@ -57,7 +57,7 @@ import "../chunk-MTX3FQRR.js";
57
57
  import "../chunk-SPCO7SNH.js";
58
58
  import "../chunk-QAYGX7KA.js";
59
59
  import "../chunk-DDA7IAWM.js";
60
- import "../chunk-5IX2ZW6O.js";
60
+ import "../chunk-E5UHM2KN.js";
61
61
  import "../chunk-3OEVDGIY.js";
62
62
  import "../chunk-5QJFZYDD.js";
63
63
  import "../chunk-67547XFJ.js";
@@ -65,8 +65,8 @@ import "../chunk-X2FHTDIU.js";
65
65
  import "../chunk-SSC7EKY2.js";
66
66
  import "../chunk-N5ACQ7C2.js";
67
67
  import "../chunk-75H4R62K.js";
68
- import "../chunk-QVT4LNHH.js";
69
- import "../chunk-6YONUN6T.js";
68
+ import "../chunk-IJYBKQDJ.js";
69
+ import "../chunk-TXUSQZLH.js";
70
70
  import "../chunk-KQ4Z2G24.js";
71
71
  import "../chunk-L3TB7CC3.js";
72
72
  import "../chunk-FZALT2G7.js";
@@ -94,7 +94,7 @@ import "../chunk-5JILQMRS.js";
94
94
  import "../chunk-YL5S6I3R.js";
95
95
  import "../chunk-NPAGBSEN.js";
96
96
  import "../chunk-MZ2MBZ3E.js";
97
- import "../chunk-OR7JFLIL.js";
97
+ import "../chunk-CASOKILE.js";
98
98
  import "../chunk-AB4PAQYK.js";
99
99
  import {
100
100
  resolveEmbeddingsEnabled
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  lightweightSearch
3
- } from "./chunk-OR7JFLIL.js";
3
+ } from "./chunk-CASOKILE.js";
4
4
  import "./chunk-AB4PAQYK.js";
5
5
  import "./chunk-KKZPF6YI.js";
6
6
  import "./chunk-CHCA3ZM2.js";
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-WCGNCH3Q.js";
4
4
  import {
5
5
  registerAllTools
6
- } from "./chunk-U7ORCOJH.js";
6
+ } from "./chunk-W7F3ZBHH.js";
7
7
 
8
8
  // src/mcp/mcp-surface-hash.ts
9
9
  function computeMcpSurfaceHash() {
@@ -359,7 +359,7 @@ async function hybridSearch(queryText, agentId, options) {
359
359
  let rerankerAvailable = false;
360
360
  if (process.env.EXE_IS_DAEMON === "1") {
361
361
  try {
362
- const { isRerankerAvailable } = await import("./reranker-H3TCF74O.js");
362
+ const { isRerankerAvailable } = await import("./reranker-WHMDMYZP.js");
363
363
  rerankerAvailable = isRerankerAvailable();
364
364
  } catch {
365
365
  }
@@ -561,7 +561,7 @@ async function hybridSearch(queryText, agentId, options) {
561
561
  try {
562
562
  let rerankedRecords;
563
563
  if (graphContextMap.size > 0) {
564
- const { rerankWithContext } = await import("./reranker-H3TCF74O.js");
564
+ const { rerankWithContext } = await import("./reranker-WHMDMYZP.js");
565
565
  const candidates = merged.map((m) => ({
566
566
  text: m.raw_text,
567
567
  context: graphContextMap.get(m.id)
@@ -569,7 +569,7 @@ async function hybridSearch(queryText, agentId, options) {
569
569
  const scored = await rerankWithContext(effectiveQuery, candidates, rerankReturnLimit);
570
570
  rerankedRecords = scored.map((s) => merged[s.index]);
571
571
  } else {
572
- const { rerank } = await import("./reranker-H3TCF74O.js");
572
+ const { rerank } = await import("./reranker-WHMDMYZP.js");
573
573
  rerankedRecords = await rerank(effectiveQuery, merged, rerankReturnLimit);
574
574
  }
575
575
  if (rerankedRecords.length > 0) {
@@ -1,6 +1,9 @@
1
1
  import {
2
2
  getClient
3
3
  } from "./chunk-BIM763ML.js";
4
+ import {
5
+ loadConfigSync
6
+ } from "./chunk-7Y5UDEVM.js";
4
7
 
5
8
  // src/lib/token-spend.ts
6
9
  import { readdir, stat } from "fs/promises";
@@ -8,6 +11,107 @@ import { createReadStream } from "fs";
8
11
  import { createInterface } from "readline";
9
12
  import path from "path";
10
13
  import os from "os";
14
+ var DEFAULT_SPEND_WARNING_THRESHOLD = 0.8;
15
+ function asRecord(value) {
16
+ return value && typeof value === "object" && !Array.isArray(value) ? value : null;
17
+ }
18
+ function finitePositiveNumber(value) {
19
+ if (typeof value === "number" && Number.isFinite(value) && value > 0) return value;
20
+ if (typeof value === "string" && value.trim() !== "") {
21
+ const parsed = Number(value);
22
+ if (Number.isFinite(parsed) && parsed > 0) return parsed;
23
+ }
24
+ return null;
25
+ }
26
+ function normalizeWarningThreshold(value) {
27
+ const parsed = finitePositiveNumber(value);
28
+ if (parsed === null) return DEFAULT_SPEND_WARNING_THRESHOLD;
29
+ const ratio = parsed > 1 ? parsed / 100 : parsed;
30
+ return ratio > 0 && ratio <= 1 ? ratio : DEFAULT_SPEND_WARNING_THRESHOLD;
31
+ }
32
+ function firstPositiveNumber(records, keys) {
33
+ for (const { source, record } of records) {
34
+ for (const key of keys) {
35
+ const value = finitePositiveNumber(record[key]);
36
+ if (value !== null) return { value, source: `${source}.${key}` };
37
+ }
38
+ }
39
+ return null;
40
+ }
41
+ function resolveGlobalSpendCapConfig(config, env = process.env) {
42
+ const envCap = finitePositiveNumber(env.EXE_GLOBAL_SPEND_CAP_USD ?? env.EXE_TOKEN_SPEND_CAP_USD ?? env.EXE_SPEND_CAP_USD);
43
+ if (envCap !== null) {
44
+ return {
45
+ capUSD: envCap,
46
+ warningThreshold: normalizeWarningThreshold(
47
+ env.EXE_GLOBAL_SPEND_WARN_THRESHOLD ?? env.EXE_TOKEN_SPEND_WARN_THRESHOLD ?? env.EXE_SPEND_WARN_THRESHOLD
48
+ ),
49
+ source: env.EXE_GLOBAL_SPEND_CAP_USD ? "env.EXE_GLOBAL_SPEND_CAP_USD" : env.EXE_TOKEN_SPEND_CAP_USD ? "env.EXE_TOKEN_SPEND_CAP_USD" : "env.EXE_SPEND_CAP_USD"
50
+ };
51
+ }
52
+ const tokenSpend = asRecord(config.tokenSpend);
53
+ const spend = asRecord(config.spend);
54
+ const records = [
55
+ ...tokenSpend ? [{ source: "config.tokenSpend", record: tokenSpend }] : [],
56
+ ...spend ? [{ source: "config.spend", record: spend }] : [],
57
+ { source: "config", record: config }
58
+ ];
59
+ const cap = firstPositiveNumber(records, [
60
+ "globalCapUSD",
61
+ "globalSpendCapUSD",
62
+ "capUSD",
63
+ "spendCapUSD"
64
+ ]);
65
+ if (!cap) return null;
66
+ const warning = firstPositiveNumber(records, [
67
+ "warningThreshold",
68
+ "warningThresholdPercent",
69
+ "warnAt",
70
+ "warnAtPercent"
71
+ ]);
72
+ return {
73
+ capUSD: cap.value,
74
+ warningThreshold: normalizeWarningThreshold(warning?.value),
75
+ source: cap.source
76
+ };
77
+ }
78
+ function getConfiguredGlobalSpendCap() {
79
+ try {
80
+ return resolveGlobalSpendCapConfig(loadConfigSync());
81
+ } catch {
82
+ return resolveGlobalSpendCapConfig({});
83
+ }
84
+ }
85
+ function evaluateGlobalSpendCap(totalCostUSD, period, config = getConfiguredGlobalSpendCap()) {
86
+ const normalizedCost = Number.isFinite(totalCostUSD) && totalCostUSD > 0 ? totalCostUSD : 0;
87
+ if (!config) {
88
+ return {
89
+ configured: false,
90
+ period,
91
+ capUSD: null,
92
+ totalCostUSD: normalizedCost,
93
+ percentUsed: 0,
94
+ warningThresholdPercent: null,
95
+ status: "unconfigured",
96
+ message: "No global spend cap configured. Set tokenSpend.globalCapUSD in config.json or EXE_GLOBAL_SPEND_CAP_USD to enable spend warnings.",
97
+ source: null
98
+ };
99
+ }
100
+ const percentUsed = Math.round(normalizedCost / config.capUSD * 100);
101
+ const status = normalizedCost >= config.capUSD ? "over_cap" : normalizedCost >= config.capUSD * config.warningThreshold ? "near_cap" : "ok";
102
+ const warningThresholdPercent = Math.round(config.warningThreshold * 100);
103
+ return {
104
+ configured: true,
105
+ period,
106
+ capUSD: config.capUSD,
107
+ totalCostUSD: normalizedCost,
108
+ percentUsed,
109
+ warningThresholdPercent,
110
+ status,
111
+ message: status === "over_cap" ? `Global spend cap exceeded for ${period}: $${normalizedCost.toFixed(2)} / $${config.capUSD.toFixed(2)} (${percentUsed}%).` : status === "near_cap" ? `Global spend is near cap for ${period}: $${normalizedCost.toFixed(2)} / $${config.capUSD.toFixed(2)} (${percentUsed}%, warning at ${warningThresholdPercent}%).` : `Global spend is within cap for ${period}: $${normalizedCost.toFixed(2)} / $${config.capUSD.toFixed(2)} (${percentUsed}%).`,
112
+ source: config.source
113
+ };
114
+ }
11
115
  var MODEL_PRICING = {
12
116
  // Opus 4.5+ ($5/$25 — Anthropic price drop from original Opus 4)
13
117
  "claude-opus-4-7": { input: 5 / 1e6, output: 25 / 1e6, cacheRead: 0.5 / 1e6, cacheWrite: 6.25 / 1e6 },
@@ -223,6 +327,9 @@ function periodToCutoff(period) {
223
327
  }
224
328
 
225
329
  export {
330
+ resolveGlobalSpendCapConfig,
331
+ getConfiguredGlobalSpendCap,
332
+ evaluateGlobalSpendCap,
226
333
  getPricing,
227
334
  getAgentSpend
228
335
  };
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  formatDegradations,
3
3
  getRetrievalHealth
4
- } from "./chunk-6YONUN6T.js";
4
+ } from "./chunk-TXUSQZLH.js";
5
5
  import {
6
6
  buildRestartReport,
7
7
  formatRestartReport
@@ -335,6 +335,24 @@ function registerCreateTask(server) {
335
335
  } catch {
336
336
  }
337
337
  }
338
+ if (!callerRoot && process.env.VITEST !== "true" && process.env.NODE_ENV !== "test") {
339
+ const message = `BLOCKED: create_task resolved no session_scope for project "${project_name}". Refusing to create an unscoped task. Ensure the MCP client sends a non-empty X-Exe-Session header or run from a coordinator session that can be resolved.`;
340
+ process.stderr.write(`[create_task] ${message}
341
+ `);
342
+ recordOrchestrationEventBestEffort({
343
+ eventType: "dispatch.failed",
344
+ source: "create-task.mcp",
345
+ severity: "error",
346
+ agentId: assigned_to,
347
+ projectName: project_name,
348
+ errorCode: "missing_session_scope",
349
+ payload: { priority, callerTmux, callerSource }
350
+ });
351
+ return {
352
+ content: [{ type: "text", text: message }],
353
+ isError: true
354
+ };
355
+ }
338
356
  const effectiveRuntime = spawn_runtime ?? getAgentRuntime(assigned_to).runtime;
339
357
  let effectiveSpawnModel = spawn_model;
340
358
  if (spawn_model) {
@@ -50,6 +50,8 @@ async function getRetrievalHealth() {
50
50
  actualSearchMode = "fts+graph";
51
51
  } else if (embedDaemon === "running") {
52
52
  actualSearchMode = "hybrid (vector+fts+graph)";
53
+ } else if (embedDaemon === "disabled") {
54
+ actualSearchMode = "fts+graph (embeddings disabled by choice)";
53
55
  } else {
54
56
  actualSearchMode = "fts+graph (degraded from hybrid)";
55
57
  }
@@ -117,8 +119,16 @@ async function getRetrievalHealth() {
117
119
  }
118
120
  function computeDegradations(h) {
119
121
  const out = [];
122
+ const isEmbeddingsDisabledByChoice = h.embedDaemon === "disabled" || h.searchMode.actual.includes("disabled by choice");
120
123
  const isRuntimeDowngrade = h.searchMode.actual.includes("degraded");
121
- if (isRuntimeDowngrade) {
124
+ if (isEmbeddingsDisabledByChoice) {
125
+ out.push({
126
+ code: "embeddings_disabled_by_choice",
127
+ severity: "info",
128
+ message: `Vector embeddings are disabled by choice; retrieval is running as "${h.searchMode.actual}"`,
129
+ remediation: "Enable embeddings/searchMode=hybrid only if you want vector retrieval; keyword + graph retrieval remains available."
130
+ });
131
+ } else if (isRuntimeDowngrade) {
122
132
  out.push({
123
133
  code: "retrieval_downgraded",
124
134
  severity: "warn",
@@ -33,7 +33,7 @@ import {
33
33
  import {
34
34
  isRerankerAvailable,
35
35
  rerankWithScores
36
- } from "./chunk-KOQ6WZBS.js";
36
+ } from "./chunk-TOEQZTYB.js";
37
37
  import {
38
38
  getEntityByName,
39
39
  getEntityNeighbors,
@@ -100,7 +100,7 @@ import {
100
100
  } from "./chunk-UJRZD77V.js";
101
101
  import {
102
102
  registerCreateTask
103
- } from "./chunk-CCDQ6NIZ.js";
103
+ } from "./chunk-OLQYIAOQ.js";
104
104
  import {
105
105
  registerListTasks
106
106
  } from "./chunk-QXXG2MCZ.js";
@@ -120,8 +120,9 @@ import {
120
120
  status
121
121
  } from "./chunk-DDA7IAWM.js";
122
122
  import {
123
+ evaluateGlobalSpendCap,
123
124
  getAgentSpend
124
- } from "./chunk-5IX2ZW6O.js";
125
+ } from "./chunk-E5UHM2KN.js";
125
126
  import {
126
127
  exportGraphHTML,
127
128
  generateGraphReport
@@ -140,11 +141,11 @@ import {
140
141
  formatReport,
141
142
  runAudit,
142
143
  shouldFixShards
143
- } from "./chunk-QVT4LNHH.js";
144
+ } from "./chunk-IJYBKQDJ.js";
144
145
  import {
145
146
  formatDegradations,
146
147
  getRetrievalHealth
147
- } from "./chunk-6YONUN6T.js";
148
+ } from "./chunk-TXUSQZLH.js";
148
149
  import {
149
150
  hasFailures,
150
151
  runHealth,
@@ -223,7 +224,7 @@ import {
223
224
  import {
224
225
  hybridSearch,
225
226
  recentRecords
226
- } from "./chunk-OR7JFLIL.js";
227
+ } from "./chunk-CASOKILE.js";
227
228
  import {
228
229
  buildFtsMatch,
229
230
  tokenizeForFts
@@ -6337,6 +6338,18 @@ function registerListEmployees(server) {
6337
6338
 
6338
6339
  // src/mcp/tools/get-agent-spend.ts
6339
6340
  import { z as z50 } from "zod";
6341
+ function renderGlobalSpendCap(status2) {
6342
+ const lines = ["", "## Global Spend Cap"];
6343
+ if (!status2.configured) {
6344
+ lines.push(`\u26A0\uFE0F ${status2.message}`);
6345
+ lines.push(`Current ${status2.period} tracked spend: $${status2.totalCostUSD.toFixed(2)}.`);
6346
+ return lines;
6347
+ }
6348
+ const prefix = status2.status === "over_cap" ? "\u{1F6A8}" : status2.status === "near_cap" ? "\u26A0\uFE0F" : "\u2705";
6349
+ lines.push(`${prefix} ${status2.message}`);
6350
+ lines.push(`Cap source: ${status2.source ?? "unknown"}.`);
6351
+ return lines;
6352
+ }
6340
6353
  function registerGetAgentSpend(server) {
6341
6354
  server.registerTool(
6342
6355
  "get_agent_spend",
@@ -6350,7 +6363,12 @@ function registerGetAgentSpend(server) {
6350
6363
  },
6351
6364
  async ({ period, agent_id }) => {
6352
6365
  try {
6353
- let results = await getAgentSpend(period);
6366
+ const allResults = await getAgentSpend(period);
6367
+ const capStatus = evaluateGlobalSpendCap(
6368
+ allResults.reduce((sum, r) => sum + r.costUSD, 0),
6369
+ period
6370
+ );
6371
+ let results = allResults;
6354
6372
  if (agent_id) {
6355
6373
  results = results.filter((r) => r.agentId === agent_id);
6356
6374
  }
@@ -6359,7 +6377,10 @@ function registerGetAgentSpend(server) {
6359
6377
  content: [
6360
6378
  {
6361
6379
  type: "text",
6362
- text: agent_id ? `No token spend found for agent "${agent_id}" in the last ${period}.` : `No token spend data found for the last ${period}.`
6380
+ text: [
6381
+ agent_id ? `No token spend found for agent "${agent_id}" in the last ${period}.` : `No token spend data found for the last ${period}.`,
6382
+ ...renderGlobalSpendCap(capStatus)
6383
+ ].join("\n")
6363
6384
  }
6364
6385
  ]
6365
6386
  };
@@ -6394,6 +6415,7 @@ function registerGetAgentSpend(server) {
6394
6415
  `| **Total** | **${totalInput.toLocaleString()}** | **${totalOutput.toLocaleString()}** | **${totalCache.toLocaleString()}** | **${totalSessions}** | **$${totalCost.toFixed(2)}** |`
6395
6416
  );
6396
6417
  }
6418
+ lines.push(...renderGlobalSpendCap(capStatus));
6397
6419
  return {
6398
6420
  content: [{ type: "text", text: lines.join("\n") }]
6399
6421
  };
@@ -7220,7 +7242,7 @@ async function cloudStatusText() {
7220
7242
  if (lastReuploadedAt) lines.push(`- Last re-upload: ${lastReuploadedAt}`);
7221
7243
  lines.push("");
7222
7244
  try {
7223
- const { getRetrievalHealth: getRetrievalHealth2, formatDegradations: formatDegradations2 } = await import("./retrieval-health-3VRJMK47.js");
7245
+ const { getRetrievalHealth: getRetrievalHealth2, formatDegradations: formatDegradations2 } = await import("./retrieval-health-GFGXNPSN.js");
7224
7246
  const h = await getRetrievalHealth2();
7225
7247
  lines.push(formatDegradations2(h.degradations, "Health / Degradations"));
7226
7248
  lines.push("");
@@ -13009,7 +13031,7 @@ function registerCliParityTools(server) {
13009
13031
  const out = await runCommand("exe-os", ["cloud", "status"], 45e3);
13010
13032
  let healthSection = "";
13011
13033
  try {
13012
- const { getRetrievalHealth: getRetrievalHealth2, formatDegradations: formatDegradations2 } = await import("./retrieval-health-3VRJMK47.js");
13034
+ const { getRetrievalHealth: getRetrievalHealth2, formatDegradations: formatDegradations2 } = await import("./retrieval-health-GFGXNPSN.js");
13013
13035
  const h = await getRetrievalHealth2();
13014
13036
  const lines = [
13015
13037
  "",
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  computeMcpSurfaceHash
4
- } from "./chunk-TKG6LCSQ.js";
4
+ } from "./chunk-BGCJZQGQ.js";
5
5
  import "./chunk-WCGNCH3Q.js";
6
- import "./chunk-U7ORCOJH.js";
6
+ import "./chunk-W7F3ZBHH.js";
7
7
  import "./chunk-557C2IGL.js";
8
8
  import "./chunk-JCBQQIUV.js";
9
9
  import "./chunk-QQCZLNUC.js";
@@ -11,7 +11,7 @@ import "./chunk-CPXFQBBN.js";
11
11
  import "./chunk-W7DHFGCB.js";
12
12
  import "./chunk-ORU5LDIT.js";
13
13
  import "./chunk-O6RMSGXQ.js";
14
- import "./chunk-KOQ6WZBS.js";
14
+ import "./chunk-TOEQZTYB.js";
15
15
  import "./chunk-CRCB5S7I.js";
16
16
  import "./chunk-MTHQR76V.js";
17
17
  import "./chunk-RY7UV6CU.js";
@@ -29,7 +29,7 @@ import "./chunk-5EP4TCZ2.js";
29
29
  import "./chunk-ZWWHEX3Y.js";
30
30
  import "./chunk-IJTCNN5I.js";
31
31
  import "./chunk-UJRZD77V.js";
32
- import "./chunk-CCDQ6NIZ.js";
32
+ import "./chunk-OLQYIAOQ.js";
33
33
  import "./chunk-HMP5VT6A.js";
34
34
  import "./chunk-QXXG2MCZ.js";
35
35
  import "./chunk-MNLSPTWM.js";
@@ -37,7 +37,7 @@ import "./chunk-MTX3FQRR.js";
37
37
  import "./chunk-SPCO7SNH.js";
38
38
  import "./chunk-QAYGX7KA.js";
39
39
  import "./chunk-DDA7IAWM.js";
40
- import "./chunk-5IX2ZW6O.js";
40
+ import "./chunk-E5UHM2KN.js";
41
41
  import "./chunk-3OEVDGIY.js";
42
42
  import "./chunk-5QJFZYDD.js";
43
43
  import "./chunk-67547XFJ.js";
@@ -45,8 +45,8 @@ import "./chunk-X2FHTDIU.js";
45
45
  import "./chunk-SSC7EKY2.js";
46
46
  import "./chunk-N5ACQ7C2.js";
47
47
  import "./chunk-75H4R62K.js";
48
- import "./chunk-QVT4LNHH.js";
49
- import "./chunk-6YONUN6T.js";
48
+ import "./chunk-IJYBKQDJ.js";
49
+ import "./chunk-TXUSQZLH.js";
50
50
  import "./chunk-KQ4Z2G24.js";
51
51
  import "./chunk-L3TB7CC3.js";
52
52
  import "./chunk-FZALT2G7.js";
@@ -74,7 +74,7 @@ import "./chunk-5JILQMRS.js";
74
74
  import "./chunk-YL5S6I3R.js";
75
75
  import "./chunk-NPAGBSEN.js";
76
76
  import "./chunk-MZ2MBZ3E.js";
77
- import "./chunk-OR7JFLIL.js";
77
+ import "./chunk-CASOKILE.js";
78
78
  import "./chunk-AB4PAQYK.js";
79
79
  import "./chunk-KKZPF6YI.js";
80
80
  import "./chunk-CHCA3ZM2.js";
@@ -5,7 +5,7 @@ import "../chunk-SH45SJQW.js";
5
5
  import {
6
6
  hybridSearch,
7
7
  lightweightSearch
8
- } from "../chunk-OR7JFLIL.js";
8
+ } from "../chunk-CASOKILE.js";
9
9
  import "../chunk-AB4PAQYK.js";
10
10
  import {
11
11
  resolveHookSearchEnabled
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "version": 1,
3
- "generatedAt": "2026-07-04T08:59:41.027Z",
3
+ "generatedAt": "2026-07-04T10:55:40.183Z",
4
4
  "hashes": {
5
5
  "bug-report-worker.js": "36d324b0b6dd37b5ef17bdacd1210eca9e22e5c69fa5d84985e23e3ca05b1655",
6
6
  "codex-stop-task-finalizer.js": "b949bec2ed64df279ac8264b399c1c82afc2ab563ac6253d2f86dd9ff0a473d2",
7
7
  "commit-complete.js": "f08d57bfaf521308e1fe81a831d6f4c194524e066914fc5c5295983616c1c65b",
8
- "error-recall.js": "eeacb83dacafcf4ea5b9f390503dd2c88b029a8e00b652aa2985219cdfa6d571",
8
+ "error-recall.js": "82a9997a4747dd4a0333b04d54975507d7d8eb8584e96a9cdd1ab41d29793abf",
9
9
  "exe-heartbeat-hook.js": "82642ced69749061da2cdf51ad1bd09ec856de8f4b11329a61901ab1295d7037",
10
10
  "ingest-worker.js": "fb42110931002e4078cd2b85ce604ae9205e5c1511601e87ab38bfef6e6ed284",
11
11
  "ingest.js": "62173d5fd6991231a489f60ed73308bb01abfbd0eda9443d50e8840cf4f24518",
@@ -15,9 +15,9 @@
15
15
  "post-tool-combined.js": "77fc04d6fa31cb639169887afecf53ad98bc4f11eeb1fb38fc82ca0705dce190",
16
16
  "pre-compact.js": "2f20d9892dfbd6f5aef08d7411835d6ec68d8e30af97e375f7eeff513fe5162e",
17
17
  "pre-tool-use.js": "2023656f88812545ef58896b4f93d29317d10dcaa7a163d9d1a3745b9e44423c",
18
- "prompt-submit.js": "cc211e322b73f901b9d2d47b78310139b9c6376ed7215604a3b501eff962f2eb",
18
+ "prompt-submit.js": "6f650d0440370647a356d11803d5e90b118107e05b4189944c2477e3312d7deb",
19
19
  "session-end.js": "56cba72a2e9f2b8a3359499d9f41809613a0060c5df5b89d7286b71a8ffd862f",
20
- "session-start.js": "4ac790e4d015a22854813fe292030b66c015bf3af17b18bee6726fb934ce6784",
20
+ "session-start.js": "77208d1ebc70bb5d5aa932dc8b48f468d866e6204606bcae12e5e8b6d1df6c98",
21
21
  "stop.js": "bd88342775e9a7316e103b3c88f4813c7652224466cafb16b8ec9c281c12012e",
22
22
  "subagent-stop.js": "83b0ad1b8750c0e749d7eb9675989475319fccaf16757b71f9ec329e5bfe570a",
23
23
  "summary-worker.js": "9627db9fa9e75055ee992e82fedde1f8cd4de7150fb793cf155256ccfe553235"
@@ -6,7 +6,7 @@ import "../chunk-SH45SJQW.js";
6
6
  import {
7
7
  hybridSearch,
8
8
  lightweightSearch
9
- } from "../chunk-OR7JFLIL.js";
9
+ } from "../chunk-CASOKILE.js";
10
10
  import "../chunk-AB4PAQYK.js";
11
11
  import {
12
12
  resolveHookSearchEnabled
@@ -226,7 +226,7 @@ You are **${ag.agentId}**. The daemon was degraded at boot \u2014 memory context
226
226
  query = `last actions on ${projectName}`;
227
227
  header = "## Resuming Session\nHere's where you left off:";
228
228
  try {
229
- const { buildCatchupBrief } = await import("../catchup-brief-2V6WXZGD.js");
229
+ const { buildCatchupBrief } = await import("../catchup-brief-5ELWS6IF.js");
230
230
  const brief = await buildCatchupBrief(
231
231
  agentId,
232
232
  projectName,
@@ -5,7 +5,7 @@ import {
5
5
  recentRecords,
6
6
  rrfMerge,
7
7
  rrfMergeMulti
8
- } from "../chunk-OR7JFLIL.js";
8
+ } from "../chunk-CASOKILE.js";
9
9
  import "../chunk-AB4PAQYK.js";
10
10
  import "../chunk-KKZPF6YI.js";
11
11
  import "../chunk-CHCA3ZM2.js";
@@ -1,7 +1,10 @@
1
1
  import {
2
+ evaluateGlobalSpendCap,
2
3
  getAgentSpend,
3
- getPricing
4
- } from "../chunk-5IX2ZW6O.js";
4
+ getConfiguredGlobalSpendCap,
5
+ getPricing,
6
+ resolveGlobalSpendCapConfig
7
+ } from "../chunk-E5UHM2KN.js";
5
8
  import "../chunk-BIM763ML.js";
6
9
  import "../chunk-2I23RPSI.js";
7
10
  import "../chunk-INT5PHNK.js";
@@ -13,6 +16,9 @@ import "../chunk-7Y5UDEVM.js";
13
16
  import "../chunk-SHIICYJW.js";
14
17
  import "../chunk-MLKGABMK.js";
15
18
  export {
19
+ evaluateGlobalSpendCap,
16
20
  getAgentSpend,
17
- getPricing
21
+ getConfiguredGlobalSpendCap,
22
+ getPricing,
23
+ resolveGlobalSpendCapConfig
18
24
  };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  registerAllTools
3
- } from "../chunk-U7ORCOJH.js";
3
+ } from "../chunk-W7F3ZBHH.js";
4
4
  import "../chunk-557C2IGL.js";
5
5
  import "../chunk-JCBQQIUV.js";
6
6
  import "../chunk-QQCZLNUC.js";
@@ -8,7 +8,7 @@ import "../chunk-CPXFQBBN.js";
8
8
  import "../chunk-W7DHFGCB.js";
9
9
  import "../chunk-ORU5LDIT.js";
10
10
  import "../chunk-O6RMSGXQ.js";
11
- import "../chunk-KOQ6WZBS.js";
11
+ import "../chunk-TOEQZTYB.js";
12
12
  import "../chunk-CRCB5S7I.js";
13
13
  import "../chunk-MTHQR76V.js";
14
14
  import "../chunk-RY7UV6CU.js";
@@ -26,7 +26,7 @@ import "../chunk-5EP4TCZ2.js";
26
26
  import "../chunk-ZWWHEX3Y.js";
27
27
  import "../chunk-IJTCNN5I.js";
28
28
  import "../chunk-UJRZD77V.js";
29
- import "../chunk-CCDQ6NIZ.js";
29
+ import "../chunk-OLQYIAOQ.js";
30
30
  import "../chunk-HMP5VT6A.js";
31
31
  import "../chunk-QXXG2MCZ.js";
32
32
  import "../chunk-MNLSPTWM.js";
@@ -34,7 +34,7 @@ import "../chunk-MTX3FQRR.js";
34
34
  import "../chunk-SPCO7SNH.js";
35
35
  import "../chunk-QAYGX7KA.js";
36
36
  import "../chunk-DDA7IAWM.js";
37
- import "../chunk-5IX2ZW6O.js";
37
+ import "../chunk-E5UHM2KN.js";
38
38
  import "../chunk-3OEVDGIY.js";
39
39
  import "../chunk-5QJFZYDD.js";
40
40
  import "../chunk-67547XFJ.js";
@@ -42,8 +42,8 @@ import "../chunk-X2FHTDIU.js";
42
42
  import "../chunk-SSC7EKY2.js";
43
43
  import "../chunk-N5ACQ7C2.js";
44
44
  import "../chunk-75H4R62K.js";
45
- import "../chunk-QVT4LNHH.js";
46
- import "../chunk-6YONUN6T.js";
45
+ import "../chunk-IJYBKQDJ.js";
46
+ import "../chunk-TXUSQZLH.js";
47
47
  import "../chunk-KQ4Z2G24.js";
48
48
  import "../chunk-L3TB7CC3.js";
49
49
  import "../chunk-FZALT2G7.js";
@@ -71,7 +71,7 @@ import "../chunk-5JILQMRS.js";
71
71
  import "../chunk-YL5S6I3R.js";
72
72
  import "../chunk-NPAGBSEN.js";
73
73
  import "../chunk-MZ2MBZ3E.js";
74
- import "../chunk-OR7JFLIL.js";
74
+ import "../chunk-CASOKILE.js";
75
75
  import "../chunk-AB4PAQYK.js";
76
76
  import "../chunk-KKZPF6YI.js";
77
77
  import "../chunk-CHCA3ZM2.js";
@@ -10,7 +10,7 @@ import {
10
10
  } from "../chunk-WCGNCH3Q.js";
11
11
  import {
12
12
  registerAllTools
13
- } from "../chunk-U7ORCOJH.js";
13
+ } from "../chunk-W7F3ZBHH.js";
14
14
  import "../chunk-557C2IGL.js";
15
15
  import "../chunk-JCBQQIUV.js";
16
16
  import "../chunk-QQCZLNUC.js";
@@ -18,7 +18,7 @@ import "../chunk-CPXFQBBN.js";
18
18
  import "../chunk-W7DHFGCB.js";
19
19
  import "../chunk-ORU5LDIT.js";
20
20
  import "../chunk-O6RMSGXQ.js";
21
- import "../chunk-KOQ6WZBS.js";
21
+ import "../chunk-TOEQZTYB.js";
22
22
  import "../chunk-CRCB5S7I.js";
23
23
  import "../chunk-MTHQR76V.js";
24
24
  import "../chunk-RY7UV6CU.js";
@@ -41,7 +41,7 @@ import "../chunk-5EP4TCZ2.js";
41
41
  import "../chunk-ZWWHEX3Y.js";
42
42
  import "../chunk-IJTCNN5I.js";
43
43
  import "../chunk-UJRZD77V.js";
44
- import "../chunk-CCDQ6NIZ.js";
44
+ import "../chunk-OLQYIAOQ.js";
45
45
  import "../chunk-HMP5VT6A.js";
46
46
  import "../chunk-QXXG2MCZ.js";
47
47
  import "../chunk-MNLSPTWM.js";
@@ -49,7 +49,7 @@ import "../chunk-MTX3FQRR.js";
49
49
  import "../chunk-SPCO7SNH.js";
50
50
  import "../chunk-QAYGX7KA.js";
51
51
  import "../chunk-DDA7IAWM.js";
52
- import "../chunk-5IX2ZW6O.js";
52
+ import "../chunk-E5UHM2KN.js";
53
53
  import "../chunk-3OEVDGIY.js";
54
54
  import "../chunk-5QJFZYDD.js";
55
55
  import "../chunk-67547XFJ.js";
@@ -57,8 +57,8 @@ import "../chunk-X2FHTDIU.js";
57
57
  import "../chunk-SSC7EKY2.js";
58
58
  import "../chunk-N5ACQ7C2.js";
59
59
  import "../chunk-75H4R62K.js";
60
- import "../chunk-QVT4LNHH.js";
61
- import "../chunk-6YONUN6T.js";
60
+ import "../chunk-IJYBKQDJ.js";
61
+ import "../chunk-TXUSQZLH.js";
62
62
  import "../chunk-KQ4Z2G24.js";
63
63
  import "../chunk-L3TB7CC3.js";
64
64
  import "../chunk-FZALT2G7.js";
@@ -88,7 +88,7 @@ import "../chunk-5JILQMRS.js";
88
88
  import "../chunk-YL5S6I3R.js";
89
89
  import "../chunk-NPAGBSEN.js";
90
90
  import "../chunk-MZ2MBZ3E.js";
91
- import "../chunk-OR7JFLIL.js";
91
+ import "../chunk-CASOKILE.js";
92
92
  import "../chunk-AB4PAQYK.js";
93
93
  import {
94
94
  disposeStore,
@@ -6,7 +6,7 @@ import {
6
6
  journalDispatchIntent,
7
7
  registerCreateTask,
8
8
  updateDispatchJournalEntry
9
- } from "../../chunk-CCDQ6NIZ.js";
9
+ } from "../../chunk-OLQYIAOQ.js";
10
10
  import "../../chunk-HMP5VT6A.js";
11
11
  import "../../chunk-5JILQMRS.js";
12
12
  import "../../chunk-YL5S6I3R.js";
@@ -5,7 +5,7 @@ import {
5
5
  rerank,
6
6
  rerankWithContext,
7
7
  rerankWithScores
8
- } from "./chunk-KOQ6WZBS.js";
8
+ } from "./chunk-TOEQZTYB.js";
9
9
  import "./chunk-7Y5UDEVM.js";
10
10
  import "./chunk-SHIICYJW.js";
11
11
  import "./chunk-MLKGABMK.js";
@@ -2,7 +2,7 @@ import {
2
2
  computeDegradations,
3
3
  formatDegradations,
4
4
  getRetrievalHealth
5
- } from "./chunk-6YONUN6T.js";
5
+ } from "./chunk-TXUSQZLH.js";
6
6
  import "./chunk-VGMACSEV.js";
7
7
  import "./chunk-MLKGABMK.js";
8
8
  export {
package/dist/tui/App.js CHANGED
@@ -64,7 +64,7 @@ import process9 from "process";
64
64
  import process8 from "process";
65
65
  import React6 from "react";
66
66
 
67
- // node_modules/es-toolkit/dist/function/debounce.mjs
67
+ // ../../../Users/exeai/exe-os/node_modules/es-toolkit/dist/function/debounce.mjs
68
68
  function debounce(func, debounceMs, { signal, edges } = {}) {
69
69
  let pendingThis = void 0;
70
70
  let pendingArgs = null;
@@ -126,7 +126,7 @@ function debounce(func, debounceMs, { signal, edges } = {}) {
126
126
  return debounced;
127
127
  }
128
128
 
129
- // node_modules/es-toolkit/dist/compat/function/debounce.mjs
129
+ // ../../../Users/exeai/exe-os/node_modules/es-toolkit/dist/compat/function/debounce.mjs
130
130
  function debounce2(func, debounceMs = 0, options = {}) {
131
131
  if (typeof options !== "object") {
132
132
  options = {};
@@ -170,7 +170,7 @@ function debounce2(func, debounceMs = 0, options = {}) {
170
170
  return debounced;
171
171
  }
172
172
 
173
- // node_modules/es-toolkit/dist/compat/function/throttle.mjs
173
+ // ../../../Users/exeai/exe-os/node_modules/es-toolkit/dist/compat/function/throttle.mjs
174
174
  function throttle(func, throttleMs = 0, options = {}) {
175
175
  const { leading = true, trailing = true } = options;
176
176
  return debounce2(func, throttleMs, {
@@ -184,7 +184,7 @@ function throttle(func, throttleMs = 0, options = {}) {
184
184
  import ansiEscapes3 from "ansi-escapes";
185
185
  import isInCi2 from "is-in-ci";
186
186
 
187
- // node_modules/auto-bind/index.js
187
+ // ../../../Users/exeai/exe-os/node_modules/auto-bind/index.js
188
188
  var getAllProperties = (object) => {
189
189
  const properties = /* @__PURE__ */ new Set();
190
190
  do {
@@ -220,7 +220,7 @@ function autoBind(self, { include, exclude } = {}) {
220
220
  // src/tui/ink/ink.js
221
221
  import signalExit from "signal-exit";
222
222
 
223
- // node_modules/patch-console/dist/index.js
223
+ // ../../../Users/exeai/exe-os/node_modules/patch-console/dist/index.js
224
224
  import { PassThrough } from "stream";
225
225
  var consoleMethods = [
226
226
  "assert",
@@ -269,7 +269,7 @@ var dist_default = patchConsole;
269
269
  // src/tui/ink/ink.js
270
270
  import { LegacyRoot, ConcurrentRoot } from "react-reconciler/constants.js";
271
271
 
272
- // node_modules/yoga-layout/dist/binaries/yoga-wasm-base64-esm.js
272
+ // ../../../Users/exeai/exe-os/node_modules/yoga-layout/dist/binaries/yoga-wasm-base64-esm.js
273
273
  var loadYoga = (() => {
274
274
  var _scriptDir = import.meta.url;
275
275
  return (function(loadYoga2) {
@@ -1500,7 +1500,7 @@ var loadYoga = (() => {
1500
1500
  })();
1501
1501
  var yoga_wasm_base64_esm_default = loadYoga;
1502
1502
 
1503
- // node_modules/yoga-layout/dist/src/generated/YGEnums.js
1503
+ // ../../../Users/exeai/exe-os/node_modules/yoga-layout/dist/src/generated/YGEnums.js
1504
1504
  var Align = /* @__PURE__ */ (function(Align2) {
1505
1505
  Align2[Align2["Auto"] = 0] = "Auto";
1506
1506
  Align2[Align2["FlexStart"] = 1] = "FlexStart";
@@ -1703,7 +1703,7 @@ var constants = {
1703
1703
  };
1704
1704
  var YGEnums_default = constants;
1705
1705
 
1706
- // node_modules/yoga-layout/dist/src/wrapAssembly.js
1706
+ // ../../../Users/exeai/exe-os/node_modules/yoga-layout/dist/src/wrapAssembly.js
1707
1707
  function wrapAssembly(lib) {
1708
1708
  function patch(prototype, name, fn) {
1709
1709
  const original = prototype[name];
@@ -1804,14 +1804,14 @@ function wrapAssembly(lib) {
1804
1804
  };
1805
1805
  }
1806
1806
 
1807
- // node_modules/yoga-layout/dist/src/index.js
1807
+ // ../../../Users/exeai/exe-os/node_modules/yoga-layout/dist/src/index.js
1808
1808
  var Yoga = wrapAssembly(await yoga_wasm_base64_esm_default());
1809
1809
  var src_default = Yoga;
1810
1810
 
1811
1811
  // src/tui/ink/ink.js
1812
1812
  import wrapAnsi2 from "wrap-ansi";
1813
1813
 
1814
- // node_modules/terminal-size/index.js
1814
+ // ../../../Users/exeai/exe-os/node_modules/terminal-size/index.js
1815
1815
  import process2 from "process";
1816
1816
  import { execFileSync } from "child_process";
1817
1817
  import fs from "fs";
@@ -2934,7 +2934,7 @@ var reconciler_default = createReconciler({
2934
2934
  // src/tui/ink/render-node-to-output.js
2935
2935
  import widestLine2 from "widest-line";
2936
2936
 
2937
- // node_modules/indent-string/index.js
2937
+ // ../../../Users/exeai/exe-os/node_modules/indent-string/index.js
2938
2938
  function indentString(string, count = 1, options = {}) {
2939
2939
  const {
2940
2940
  indent = " ",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@askexenow/exe-os",
3
- "version": "0.9.330",
3
+ "version": "0.9.331",
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",
@@ -1,6 +1,20 @@
1
1
  {
2
- "current": "0.9.330",
2
+ "current": "0.9.331",
3
3
  "notes": {
4
+ "0.9.331": {
5
+ "version": "0.9.331",
6
+ "date": "2026-07-04",
7
+ "features": [],
8
+ "fixes": [
9
+ "non-chat/non-build open bug batch"
10
+ ],
11
+ "security": [],
12
+ "other": [
13
+ "release: bump exe-os to 0.9.331 (#324)",
14
+ "add Codex PR review workflow (self-hosted, no App/webhook)"
15
+ ],
16
+ "migration_notes": []
17
+ },
4
18
  "0.9.330": {
5
19
  "version": "0.9.330",
6
20
  "date": "2026-07-04",
@@ -113,20 +127,6 @@
113
127
  ],
114
128
  "other": [],
115
129
  "migration_notes": []
116
- },
117
- "0.9.326": {
118
- "version": "0.9.326",
119
- "date": "2026-07-04",
120
- "features": [],
121
- "fixes": [
122
- "OTel collector now exports traces, metrics, and logs to ClickHouse otel_* tables with explicit credentials/env and clickhouse health dependency (bug aa22ce82)",
123
- "Agent runtime config strips ANSI/style artifacts from model IDs and stores canonical Fable 5 model names (bug 9982d72d)",
124
- "Customer-owned feature shipped/fixed status sync now uses the admin support route when an admin token is configured, so customer boot shipped notifications can fire (bug c4b2ffaf)",
125
- "Daemon boot recovers from a deleted launch cwd and task enforcement treats getcwd/Auto-reconnect-exhausted panes as dead MCP zombies, killing and respawning instead of black-holing dispatch (bug 7ca6b08b)"
126
- ],
127
- "security": [],
128
- "other": [],
129
- "migration_notes": []
130
130
  }
131
131
  }
132
132
  }
File without changes