@askexenow/exe-os 0.9.293 → 0.9.294

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.
@@ -0,0 +1,58 @@
1
+ import {
2
+ MODELS_DIR
3
+ } from "./chunk-R36FAN53.js";
4
+
5
+ // src/lib/reranker.ts
6
+ import path from "path";
7
+ import { existsSync } from "fs";
8
+ var RERANKER_MODEL_FILE = process.env.EXE_RERANK_MODEL_FILE ?? "exe-reranker-v1-q4_k_m.gguf";
9
+ function isRerankerAvailable() {
10
+ return existsSync(path.join(MODELS_DIR, RERANKER_MODEL_FILE));
11
+ }
12
+ function getRerankerModelPath() {
13
+ return path.join(MODELS_DIR, RERANKER_MODEL_FILE);
14
+ }
15
+ async function disposeReranker() {
16
+ }
17
+ async function rerankWithScores(query, texts, topK) {
18
+ if (texts.length === 0) return [];
19
+ const { rerankViaWorker } = await import("./lib/exe-daemon.js");
20
+ const scored = await rerankViaWorker(query, texts, topK);
21
+ return scored.map((s) => ({
22
+ text: texts[s.index] ?? "",
23
+ score: s.score,
24
+ index: s.index
25
+ }));
26
+ }
27
+ async function rerank(query, candidates, topK = 5) {
28
+ if (candidates.length === 0) return [];
29
+ if (candidates.length <= topK) return candidates;
30
+ const scored = await rerankWithScores(
31
+ query,
32
+ candidates.map((c) => c.raw_text),
33
+ topK
34
+ );
35
+ return scored.map((s) => candidates[s.index]);
36
+ }
37
+ async function rerankWithContext(query, candidates, topK) {
38
+ if (candidates.length === 0) return [];
39
+ const formattedTexts = candidates.map(
40
+ (c) => c.context ? `[${c.context}] ${c.text.slice(0, 460)}` : c.text.slice(0, 512)
41
+ );
42
+ const { rerankViaWorker } = await import("./lib/exe-daemon.js");
43
+ const scored = await rerankViaWorker(query, formattedTexts, topK);
44
+ return scored.map((s) => ({
45
+ text: candidates[s.index]?.text ?? "",
46
+ score: s.score,
47
+ index: s.index
48
+ }));
49
+ }
50
+
51
+ export {
52
+ isRerankerAvailable,
53
+ getRerankerModelPath,
54
+ disposeReranker,
55
+ rerankWithScores,
56
+ rerank,
57
+ rerankWithContext
58
+ };
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  hybridSearch,
6
6
  lightweightSearch
7
- } from "../chunk-XCP56OMR.js";
7
+ } from "../chunk-CZYJEUNA.js";
8
8
  import "../chunk-AB4PAQYK.js";
9
9
  import {
10
10
  initStore
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "version": 1,
3
- "generatedAt": "2026-06-18T10:19:22.143Z",
3
+ "generatedAt": "2026-06-18T10:47:33.333Z",
4
4
  "hashes": {
5
5
  "bug-report-worker.js": "07fb8b17e2cabd989cdcd6c0c1253239986915d84a0ebcc18e9ea2ed77232768",
6
6
  "codex-stop-task-finalizer.js": "776b9b0940f84fbe6988ce18212c530f2efa4466a5cd16f3c26dcc508d131504",
7
7
  "commit-complete.js": "13b86aae88b6c9b3a2af69a4a27614d9985a6618cf4341b88125efcf8a6c2c77",
8
- "error-recall.js": "68f7be02396cfd68bd773d4f3c427462fd7a953c1d0bd2707d46cfdf529c226d",
8
+ "error-recall.js": "1f0bd288178070bfd3032f9ad85e93b8b22d022f15de063a2155c071b5a2d2e6",
9
9
  "exe-heartbeat-hook.js": "6320f35e804a95fd3e8c78589d9ebe15798f77f47e13aa0584716df587f8993b",
10
10
  "ingest-worker.js": "b2f04dec1264263a86bf135d05247775ef610533508905448e9061986ba7b6a8",
11
11
  "ingest.js": "640502dc1504ed5927d0f2402b41bff71ed5c5723bd90e100647233f45fa831f",
@@ -15,9 +15,9 @@
15
15
  "post-tool-combined.js": "75e58506808c879ed27d2c00eb978057802f3ed476492761ff709d78a649af89",
16
16
  "pre-compact.js": "13be3eb99049dadd69b5c1273e9601e823dbfba9bf765ba4e4e7f9d8d9ba82af",
17
17
  "pre-tool-use.js": "7c6c46d04a8cb5efe3b534cfff3125134b77e285c70829b53b144458920a881a",
18
- "prompt-submit.js": "66acedd31f6e97ccf2c2193ed9b79fbe5d39511786e6e133c9a0d6b0a5a59694",
18
+ "prompt-submit.js": "43fa601bf34fb341a01d32d64d2e5210c684fdc089ea11e4e1a3b8151a614d4c",
19
19
  "session-end.js": "01c82715b8b8788000a1f9c53e76343f43a201d253ec6cc3f7c4f95817585c1f",
20
- "session-start.js": "b1c76f32c4302d5e7bc6d7af3fa438ca568e0f6439966dcb59109f6c743c0513",
20
+ "session-start.js": "d04ec6883e8a82dc5cb547ef94b673c12101464ef082a184d3c26654bb190ee6",
21
21
  "stop.js": "b7f951cba0952aeda817a903eef679753ee2681c6d7fead919af12e40a95ae0a",
22
22
  "subagent-stop.js": "16b7e250b2080c3e6d794fb03aad77ae911203a09d78cbef3d69dcb8b23ef1d0",
23
23
  "summary-worker.js": "47531021bb645046272eaba1e6c00b3b87fb7d5be6ee1aa516a87d9a0a2c89e7"
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  hybridSearch,
3
3
  lightweightSearch
4
- } from "../chunk-XCP56OMR.js";
4
+ } from "../chunk-CZYJEUNA.js";
5
5
  import "../chunk-AB4PAQYK.js";
6
6
  import {
7
7
  initStore
@@ -180,7 +180,7 @@ You are **${ag.agentId}**. The daemon was degraded at boot \u2014 memory context
180
180
  query = `last actions on ${projectName}`;
181
181
  header = "## Resuming Session\nHere's where you left off:";
182
182
  try {
183
- const { buildCatchupBrief } = await import("../catchup-brief-46O3RLWO.js");
183
+ const { buildCatchupBrief } = await import("../catchup-brief-DTETFZYW.js");
184
184
  const brief = await buildCatchupBrief(
185
185
  agentId,
186
186
  projectName,
@@ -3766,6 +3766,67 @@ function startSkillRefinement() {
3766
3766
  process.stderr.write(`[exed] Skill refinement timer started (every ${SKILL_SWEEP_INTERVAL_MS / 36e5}h)
3767
3767
  `);
3768
3768
  }
3769
+ var STALE_BRANCH_SWEEP_INTERVAL_MS = 60 * 60 * 1e3;
3770
+ var STALE_BRANCH_HOURS = 48;
3771
+ var _staleBranchAlertedToday = /* @__PURE__ */ new Set();
3772
+ function startStaleBranchSweep() {
3773
+ const tick = async () => {
3774
+ fired("stale_branch_sweep");
3775
+ try {
3776
+ const { discoverRepoPaths } = await import("../worktree-sweep-M64OW2MU.js");
3777
+ const { scanUnmergedBranches } = await import("../branch-hygiene-55TKIWAZ.js");
3778
+ const today = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10);
3779
+ for (const k of _staleBranchAlertedToday) {
3780
+ if (!k.endsWith(today)) _staleBranchAlertedToday.delete(k);
3781
+ }
3782
+ let repos = [];
3783
+ try {
3784
+ repos = discoverRepoPaths();
3785
+ } catch {
3786
+ repos = [];
3787
+ }
3788
+ for (const repo of repos) {
3789
+ let scan;
3790
+ try {
3791
+ scan = scanUnmergedBranches(repo, { staleHours: STALE_BRANCH_HOURS });
3792
+ } catch {
3793
+ continue;
3794
+ }
3795
+ if (scan.staleCount <= 0) continue;
3796
+ const repoName = repo.split("/").pop() || repo;
3797
+ const guardKey = `${repoName}:${today}`;
3798
+ if (_staleBranchAlertedToday.has(guardKey)) continue;
3799
+ _staleBranchAlertedToday.add(guardKey);
3800
+ if (!_storeInitialized) continue;
3801
+ const stale = scan.branches.filter((b) => b.ageHours >= STALE_BRANCH_HOURS).slice(0, 5).map((b) => `${b.name} (+${b.ahead} commits, ${(b.ageHours / 24).toFixed(1)}d)`).join("; ");
3802
+ try {
3803
+ const { writeNotification } = await import("../notifications-B2YCZD3T.js");
3804
+ await writeNotification({
3805
+ agentId: "exe",
3806
+ agentRole: "system",
3807
+ event: "error_spike",
3808
+ project: repoName,
3809
+ summary: `${scan.staleCount} unmerged remote branch(es) in ${repoName} are >${STALE_BRANCH_HOURS}h old with unique work \u2014 check before starting new work to avoid redoing it. Oldest: ${stale}. Review with: exe-os git-sweep --dry-run`,
3810
+ sessionScope: null
3811
+ });
3812
+ acted("stale_branch_sweep");
3813
+ process.stderr.write(
3814
+ `[exed] Stale-branch alert: ${scan.staleCount} branch(es) >${STALE_BRANCH_HOURS}h in ${repoName}
3815
+ `
3816
+ );
3817
+ } catch {
3818
+ }
3819
+ }
3820
+ } catch (err) {
3821
+ process.stderr.write(`[exed] Stale-branch sweep error: ${err instanceof Error ? err.message : String(err)}
3822
+ `);
3823
+ }
3824
+ };
3825
+ const timer = setInterval(() => void tick(), STALE_BRANCH_SWEEP_INTERVAL_MS);
3826
+ timer.unref();
3827
+ process.stderr.write(`[exed] Stale-branch sweep timer started (every ${STALE_BRANCH_SWEEP_INTERVAL_MS / 36e5}h, >${STALE_BRANCH_HOURS}h threshold)
3828
+ `);
3829
+ }
3769
3830
  function startGraphExtraction() {
3770
3831
  const tick = async () => {
3771
3832
  fired("graph_extraction");
@@ -5688,6 +5749,7 @@ function startLocalFirstTimers() {
5688
5749
  setTimeout(startAutoUpdateCheck, 3e5);
5689
5750
  setTimeout(() => void traceDaemonTimer("background_job_guardrails_start", () => startBackgroundJobGuardrails()), 6e4);
5690
5751
  setTimeout(startWorktreeReaper, 12e4);
5752
+ setTimeout(startStaleBranchSweep, 2e5);
5691
5753
  setTimeout(startZombieAgentReaper, 25e3);
5692
5754
  setTimeout(() => void traceDaemonTimer("intercom_dedup_cleanup", async () => {
5693
5755
  fired("intercom_dedup_cleanup");
@@ -5,7 +5,7 @@ import {
5
5
  recentRecords,
6
6
  rrfMerge,
7
7
  rrfMergeMulti
8
- } from "../chunk-XCP56OMR.js";
8
+ } from "../chunk-CZYJEUNA.js";
9
9
  import "../chunk-AB4PAQYK.js";
10
10
  import "../chunk-EM5WXY6H.js";
11
11
  import "../chunk-CHCA3ZM2.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  generateStatusBrief
3
- } from "../chunk-I35KAK3E.js";
3
+ } from "../chunk-GM6W3IXQ.js";
4
4
  import "../chunk-MLKGABMK.js";
5
5
  export {
6
6
  generateStatusBrief
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  registerAllTools
3
- } from "../chunk-YQ2R4BLZ.js";
3
+ } from "../chunk-MCTWLMZL.js";
4
4
  import "../chunk-2JE7LJCZ.js";
5
- import "../chunk-2EMOVUJR.js";
6
- import "../chunk-HJBKBEC4.js";
7
5
  import "../chunk-557C2IGL.js";
6
+ import "../chunk-2EMOVUJR.js";
7
+ import "../chunk-MYOBQJFL.js";
8
8
  import "../chunk-IXZ7OTB3.js";
9
9
  import "../chunk-E6ORBQHP.js";
10
10
  import "../chunk-DZJPVLVR.js";
@@ -26,7 +26,7 @@ import "../chunk-UAQZT24C.js";
26
26
  import "../chunk-2LHQ5MGP.js";
27
27
  import "../chunk-B4PYJHIV.js";
28
28
  import "../chunk-D2WYUJHM.js";
29
- import "../chunk-HV7F5CXJ.js";
29
+ import "../chunk-A3OPW276.js";
30
30
  import "../chunk-HMP5VT6A.js";
31
31
  import "../chunk-VRZS4KWF.js";
32
32
  import "../chunk-6QPDD4BI.js";
@@ -35,9 +35,9 @@ import "../chunk-VRFO3H3R.js";
35
35
  import "../chunk-V6R43RSE.js";
36
36
  import "../chunk-3OEVDGIY.js";
37
37
  import "../chunk-CSCRGRZT.js";
38
- import "../chunk-LSTM35QE.js";
39
- import "../chunk-KQ4Z2G24.js";
38
+ import "../chunk-5ALAYSQY.js";
40
39
  import "../chunk-BNJ3YCPD.js";
40
+ import "../chunk-KQ4Z2G24.js";
41
41
  import "../chunk-5ZHIAIDE.js";
42
42
  import "../chunk-SSC7EKY2.js";
43
43
  import "../chunk-IUIVLCAO.js";
@@ -64,7 +64,7 @@ import "../chunk-QAK47LG3.js";
64
64
  import "../chunk-HN2PWLQI.js";
65
65
  import "../chunk-4HDMB2M5.js";
66
66
  import "../chunk-QOZQ2MYZ.js";
67
- import "../chunk-XCP56OMR.js";
67
+ import "../chunk-CZYJEUNA.js";
68
68
  import "../chunk-AB4PAQYK.js";
69
69
  import "../chunk-EM5WXY6H.js";
70
70
  import "../chunk-CHCA3ZM2.js";
@@ -3,11 +3,11 @@ import {
3
3
  } from "../chunk-V4TZI6EO.js";
4
4
  import {
5
5
  registerAllTools
6
- } from "../chunk-YQ2R4BLZ.js";
6
+ } from "../chunk-MCTWLMZL.js";
7
7
  import "../chunk-2JE7LJCZ.js";
8
- import "../chunk-2EMOVUJR.js";
9
- import "../chunk-HJBKBEC4.js";
10
8
  import "../chunk-557C2IGL.js";
9
+ import "../chunk-2EMOVUJR.js";
10
+ import "../chunk-MYOBQJFL.js";
11
11
  import "../chunk-IXZ7OTB3.js";
12
12
  import "../chunk-E6ORBQHP.js";
13
13
  import "../chunk-DZJPVLVR.js";
@@ -34,7 +34,7 @@ import "../chunk-UAQZT24C.js";
34
34
  import "../chunk-2LHQ5MGP.js";
35
35
  import "../chunk-B4PYJHIV.js";
36
36
  import "../chunk-D2WYUJHM.js";
37
- import "../chunk-HV7F5CXJ.js";
37
+ import "../chunk-A3OPW276.js";
38
38
  import "../chunk-HMP5VT6A.js";
39
39
  import "../chunk-VRZS4KWF.js";
40
40
  import "../chunk-6QPDD4BI.js";
@@ -43,9 +43,9 @@ import "../chunk-VRFO3H3R.js";
43
43
  import "../chunk-V6R43RSE.js";
44
44
  import "../chunk-3OEVDGIY.js";
45
45
  import "../chunk-CSCRGRZT.js";
46
- import "../chunk-LSTM35QE.js";
47
- import "../chunk-KQ4Z2G24.js";
46
+ import "../chunk-5ALAYSQY.js";
48
47
  import "../chunk-BNJ3YCPD.js";
48
+ import "../chunk-KQ4Z2G24.js";
49
49
  import "../chunk-5ZHIAIDE.js";
50
50
  import "../chunk-SSC7EKY2.js";
51
51
  import "../chunk-IUIVLCAO.js";
@@ -74,7 +74,7 @@ import "../chunk-QAK47LG3.js";
74
74
  import "../chunk-HN2PWLQI.js";
75
75
  import "../chunk-4HDMB2M5.js";
76
76
  import "../chunk-QOZQ2MYZ.js";
77
- import "../chunk-XCP56OMR.js";
77
+ import "../chunk-CZYJEUNA.js";
78
78
  import "../chunk-AB4PAQYK.js";
79
79
  import {
80
80
  disposeStore,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  registerCreateTask
3
- } from "../../chunk-HV7F5CXJ.js";
3
+ } from "../../chunk-A3OPW276.js";
4
4
  import "../../chunk-HMP5VT6A.js";
5
5
  import "../../chunk-6A56VNVX.js";
6
6
  import "../../chunk-EJ7CWALW.js";
@@ -0,0 +1,19 @@
1
+ import {
2
+ disposeReranker,
3
+ getRerankerModelPath,
4
+ isRerankerAvailable,
5
+ rerank,
6
+ rerankWithContext,
7
+ rerankWithScores
8
+ } from "./chunk-MYOBQJFL.js";
9
+ import "./chunk-R36FAN53.js";
10
+ import "./chunk-LYH5HE24.js";
11
+ import "./chunk-MLKGABMK.js";
12
+ export {
13
+ disposeReranker,
14
+ getRerankerModelPath,
15
+ isRerankerAvailable,
16
+ rerank,
17
+ rerankWithContext,
18
+ rerankWithScores
19
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@askexenow/exe-os",
3
- "version": "0.9.293",
3
+ "version": "0.9.294",
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,93 @@
1
1
  {
2
- "current": "0.9.293",
2
+ "current": "0.9.294",
3
3
  "notes": {
4
+ "0.9.294": {
5
+ "version": "0.9.294",
6
+ "date": "2026-06-18",
7
+ "features": [
8
+ "unmerged-branch visibility (bug e324f244) (#208)",
9
+ "5 P2 features — embed health dashboard, support reconcile, CC updater protection, LKG cache, error correlation IDs",
10
+ "set CC autoUpdatesChannel to stable during install (feat 83552605)",
11
+ "auto-reconcile local files with upstream status (feat 070bc025)",
12
+ "expose embed worker fork status, PID, ready state in daemon health (feat 63c35469)",
13
+ "deploy validation tests — IP collision, manifest parity, image tags, env parity",
14
+ "session_deregister + session_cleanup — force-remove stale sessions (feat 2e55cbe4)",
15
+ "OOM crash-loop backoff — circuit breaker after 3 crashes in 10min (feat 8e976fe0)",
16
+ "Exe Embeddings v1.2 + Graph cross-repo contracts (features 36aa70d0, 9f6b3164)",
17
+ "bump daemon heap cap 2048→4096MB in launchd plist (feat 6ee417ca)",
18
+ "CI/CD Phase 3 — deploy validation + health gate tests + flaky test quarantine",
19
+ "add CI Phase 3 deploy validation — 5 static checks for compose/manifest",
20
+ "surface degradation/health in cloud_status, memory_audit, doctor (2c85e74b)",
21
+ "owner-scoped self-service bug-report updates (7ed54c42)",
22
+ "add image availability + platform verification to deploy gate",
23
+ "'Why did the daemon restart?' telemetry report [3caa55e9]",
24
+ "dark/light/system theme toggle on Exe Foundry Bold tokens [6df56277]",
25
+ "prospective memory as native 5th cognition layer (9261d452)",
26
+ "CPU-steal detection in health tooling (7b9386ad)",
27
+ "host-access consent gate for monitor agent (f7ebb1fa)",
28
+ "GoTrue JWT auth for MCP — exe-os login/logout/whoami",
29
+ "admin backfill endpoint for api_key_hash — fixes all encrypted keys",
30
+ "implement startMonitor for Slack/Discord/Telegram/WhatsApp + SMTP via nodemailer",
31
+ "add dashboard + auth + otel to manifest as control-plane services",
32
+ "CLI service selection + exe-build removal from customer stack"
33
+ ],
34
+ "fixes": [
35
+ "ghost root-cause — UUID on pull + NOT NULL/non-empty schema guard (P0 26688a14)",
36
+ "sync generateExampleEnv with .env.example (ERP final8 + backups/WAL block)",
37
+ "caller-scoped spawn + real dispatch failure surfacing + boot identity/env guards (#202)",
38
+ "atomic+verified launchd registration (correct heap flag) + crash-debris rotation",
39
+ "stop ghost-row generation + bulk-cleanable + sync-safe deletion (P0 8399e330) (#201)",
40
+ "fetch isolation guard + quarantine flaky ws-client/ws-auth tests",
41
+ "4 session/infra bugs — degraded boot, Explore loop, gate message, COO identity guard",
42
+ "update_bug resolves bug by ID against remote admin API (#200)",
43
+ "exe-os auth/SSO/GoTrue (domain-configurable gateway, GoTrue From + SMTP confirm, SSO redirect wiring) (#198)",
44
+ "exe-os core bugs (embed OOM throttle, EXE_EMBEDDINGS plumbing, starvation-aware self-heal, CC native-binary risk) (#197)",
45
+ "update task list identity message assertion to match code",
46
+ "exe-os stack hardening — per-service secrets, off-box backup, WAL/PITR + encrypted volumes, backup-script failure handling, ERP image bump",
47
+ "green main — repair support-status-update + doctor degradations tests",
48
+ "surface real MCP disconnects, intercom failures & consistent daemon status",
49
+ "stop flagging expected stale-env tmux override as MISMATCH",
50
+ "exe-os cloud status hangs and never exits (exit 124)",
51
+ "recover retry-exhausted raw_events instead of dead-lettering forever",
52
+ "wire `exe-os settings` CLI subcommand (was a silent no-op)",
53
+ "task(list) no longer silently returns empty on ambiguous agent identity",
54
+ "wire exe-os healthcheck subcommand",
55
+ "stop scheduling vector backfill when embeddings are off",
56
+ "consolidation auth — accept OAuth token, fail loud on dead layer",
57
+ "label memory count taxonomy so layers reconcile",
58
+ "cap embed backfill retries with persistent dead-letter + per-run failure bound",
59
+ "reclaim orphaned .tmp snapshots + cap daily backups"
60
+ ],
61
+ "security": [],
62
+ "other": [
63
+ "bump v0.9.294 — exe-auth repo + CI/CD on all 8 repos + branch hygiene",
64
+ "pin actions to SHAs, drop stale disabled workflows, fail-closed release gate, manifest signing tool (#207)",
65
+ "bump v0.9.293 — 17 salvaged branches merged",
66
+ "bump v0.9.292 — 24 features shipped, CI/CD Phase 3, 10 bugs fixed",
67
+ "post-deploy health gate tests — verify container health, missing, crash-loop",
68
+ "bump v0.9.291 — 4 new features + CI fix",
69
+ "add health gate coverage — verifyComposeServicesRunning, timeout precedence, rollback preservation",
70
+ "bump v0.9.290 — wave 2 bug fixes (#173-#190)",
71
+ "bump v0.9.289 — 22 bug fixes merged (#150-#171)",
72
+ "bump v0.9.288 — wave 1 features + 114 auth tests + CI fixes",
73
+ "bump v0.9.287 — deploy gate auth fix + exe-erp v0.2.1",
74
+ "bump v0.9.286 — exe-erp final8 in manifest",
75
+ "add cross-service SSO + key rotation + daemon restart tests (35 tests)",
76
+ "45 tests for image validation, ${VAR:-default} resolution, platform checks",
77
+ "add 16 activate fallback chain tests — covers bug 2f5d6166 failure modes",
78
+ "add 18 key rotation tests — dual-key verify, grace, fallback chain",
79
+ "bump v0.9.285 — deploy gate image verification",
80
+ "bump v0.9.284 — otel deploy gate fix",
81
+ "bump v0.9.283 — amd64 digest fix",
82
+ "bump v0.9.282 — daemon image v0.9.281 in manifest",
83
+ "prepare v0.9.281 — 50 bugs fixed, stack 0.9.24 fully deployable",
84
+ "bump v0.9.280 — GoTrue MCP auth, support fixes",
85
+ "bump v0.9.279 — stack v0.9.24, GoTrue support auth, optional services",
86
+ "service ownership matrix — dashboard is AskExe-only, not customer stack",
87
+ "bump version to 0.9.278"
88
+ ],
89
+ "migration_notes": []
90
+ },
4
91
  "0.9.293": {
5
92
  "version": "0.9.293",
6
93
  "date": "2026-06-18",
@@ -348,93 +435,6 @@
348
435
  "route all memory benchmarks through the embed daemon"
349
436
  ],
350
437
  "migration_notes": []
351
- },
352
- "0.9.285": {
353
- "version": "0.9.285",
354
- "date": "2026-06-17",
355
- "features": [
356
- "add image availability + platform verification to deploy gate",
357
- "GoTrue JWT auth for MCP — exe-os login/logout/whoami",
358
- "admin backfill endpoint for api_key_hash — fixes all encrypted keys",
359
- "implement startMonitor for Slack/Discord/Telegram/WhatsApp + SMTP via nodemailer",
360
- "add dashboard + auth + otel to manifest as control-plane services",
361
- "CLI service selection + exe-build removal from customer stack",
362
- "automatic ERP invoice generation on top-up + monthly",
363
- "deploy OTLP collector on VPS",
364
- "real per-model pricing for 40+ models + default → kimi-k2.7-code",
365
- "ERP trigger engine wiring + profile sync via GoTrue user_metadata",
366
- "v0.9.24 manifest — optional services + exe-build removed",
367
- "usage alerts (webhook + email) + email verification /confirm page",
368
- "welcome email, low balance alerts, password reset, Stripe portal",
369
- "wire Stripe checkout → D1 credit_ledger (closes billing loop)",
370
- "add Create Account tab — full sign-up flow on auth.askexe.com",
371
- "add stable/canary/pinned update channels for progressive rollout (45a55727) (#138)",
372
- "discovery hooks — auto-wire MCP tool hints into agent context (2fe666fb) (#136)",
373
- "on-demand document→knowledge-graph concept extraction (1514443a) (#135)",
374
- "agent capability cards — A2A-style JSON manifests (5774904f) (#134)",
375
- "surface retrieval health in cloud_status, memory_audit, mcp_ping (2c85e74b) (#133)",
376
- "executable memories as reflex behavior suggestions (9bd99f2a) (#132)",
377
- "emotional baselines per agent role (dbfbe67f) (#131)",
378
- "split exe-os into server (~200MB) and worker (~1GB) images (#130)",
379
- "out-of-process socket watchdog (c3b287cc) (#129)",
380
- "hot-path session summary — compress last checkpoint into ~200 tokens at boot (edaf4eb3) (#128)"
381
- ],
382
- "fixes": [
383
- "add otel-collector to official image allowlist — unblocks stack-update",
384
- "correct exe-os + exe-auth digests for amd64 in manifest 0.9.24 (bug e0c3b3fb)",
385
- "update exe-os daemon image to v0.9.281 in manifest 0.9.24",
386
- "mcp_ping reports alive when running inside daemon process (bug b5fb9404)",
387
- "add exe-erp-nginx for static assets + remove direct gunicorn port (bug 6776edf0)",
388
- "ERP healthcheck Host header + websocket path for Frappe 17 (bugs 7c905474, 468cc508)",
389
- "rotate signing key to match Worker secret (bug 834ffb70)",
390
- "add exe-auth service to main compose + fix image reference to update.askexe.com",
391
- "align compose default image tags with manifest 0.9.24 (bug 79168bac)",
392
- "isDaemonAlive falls back to socket check when PID file missing (bug b5fb9404)",
393
- "correct exe-erp image tag final7→final3 in manifests 0.9.23 + 0.9.24 (bug ff960d31)",
394
- "create exe_erp login role in init-db.sql (bug 9d452322)",
395
- "CRM_SERVER_URL uses crm. subdomain + add EXE_CRM_ADMIN_EMAIL (bugs 8d20e779, 7debf355)",
396
- "use update.askexe.com for exe-auth image in manifest 0.9.24 (bug 97f2d288)",
397
- "ensure description field is never empty in feature request upstream payload (bug 0a8e16d0)",
398
- "add WSL clip.exe detection to shipped tmux.conf (bug 3396fb26)",
399
- "include node binary dir in exe-os-node shim PATH (bug 71adcb68)",
400
- "add minimum daemon age guard to prevent crash-loop (bug 25faecf3)",
401
- "digest-pin all 0.9.24 images + remove control-plane from customer manifest",
402
- "resolve full UUID before upstream delivery — fixes update_bug/update_feature 400s (bug 31b1d2e3)",
403
- "dual-key JWT verification — accept tokens signed by previous key (bug 2f5d6166)",
404
- "add sync_meta to SQL guard allowlist — fixes cloud sync (bug 9fbbe145)",
405
- "accept digest-only official images in deploy gate",
406
- "prevent empty/duplicate company_procedure rows at the source",
407
- "remove duplicate if-block causing TS build failure"
408
- ],
409
- "security": [],
410
- "other": [
411
- "bump v0.9.285 — deploy gate image verification",
412
- "bump v0.9.284 — otel deploy gate fix",
413
- "bump v0.9.283 — amd64 digest fix",
414
- "bump v0.9.282 — daemon image v0.9.281 in manifest",
415
- "prepare v0.9.281 — 50 bugs fixed, stack 0.9.24 fully deployable",
416
- "bump v0.9.280 — GoTrue MCP auth, support fixes",
417
- "bump v0.9.279 — stack v0.9.24, GoTrue support auth, optional services",
418
- "service ownership matrix — dashboard is AskExe-only, not customer stack",
419
- "bump version to 0.9.278",
420
- "API documentation for wiki.askexe.com (5 pages)",
421
- "consolidate platform procedures from 75 to 46 (37KB from 72KB) (#139)",
422
- "11 new platform procedures for v0.9.278 features",
423
- "document five-layer customization preservation model (a88c354b) (#137)",
424
- "bump version to 0.9.277",
425
- "document_aware retrieval guidance — when and why agents should use it",
426
- "session lifecycle — 3-layer automatic state preservation",
427
- "integrate session closeout, model registry, dreaming into platform procedures",
428
- "route all memory benchmarks through the embed daemon",
429
- "make daemon smoke gate CI-safe under load (#96)",
430
- "release: stack 0.9.23 — exe-gateway v0.9.21 (WhatsApp pipeline fixes)",
431
- "expect Exe Embeddings v1 default modelFile",
432
- "update release-notes.json",
433
- "bump 0.9.275 — bundle stack 0.9.22 manifest for stack-update",
434
- "release: stack 0.9.22 — exe-os v0.9.270, exe-crm v0.9.48, exe-gateway v0.9.18 (digest-pinned)",
435
- "bump 0.9.273 — graph/send_whatsapp/phantom-notif fixes"
436
- ],
437
- "migration_notes": []
438
438
  }
439
439
  }
440
440
  }