@askexenow/exe-os 0.9.328 → 0.9.329

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,6 +1,6 @@
1
1
  {
2
2
  "version": 1,
3
- "generatedAt": "2026-07-04T08:01:48.581Z",
3
+ "generatedAt": "2026-07-04T08:36:11.952Z",
4
4
  "hashes": {
5
5
  "bug-report-worker.js": "5207791a48b2f8b4ac049649a4563994b864cbc74b29834bf68d576a17578019",
6
6
  "codex-stop-task-finalizer.js": "54323a41cc86fb2bd909eec14fc9ad5b1408c5bdeb9255cb688e31eeb1db0248",
@@ -9,8 +9,40 @@ import { createClient } from "@libsql/client";
9
9
  var READ_ONLY_RE = /^\s*(SELECT|WITH|EXPLAIN|PRAGMA)\b/i;
10
10
  var FORBIDDEN_PRAGMA_RE = /^\s*PRAGMA\s+(key|rekey|writable_schema|journal_mode\s*=|wal_checkpoint|wal_autocheckpoint\s*=|foreign_keys\s*=)/i;
11
11
  var _client = null;
12
+ var _shuttingDown = false;
13
+ function closeClient() {
14
+ try {
15
+ _client?.close();
16
+ } catch {
17
+ }
18
+ _client = null;
19
+ }
20
+ function exitCleanly() {
21
+ if (_shuttingDown) return;
22
+ _shuttingDown = true;
23
+ closeClient();
24
+ process.exit(0);
25
+ }
26
+ function isClosedIpcError(err) {
27
+ if (!err || typeof err !== "object") return false;
28
+ const nodeErr = err;
29
+ return nodeErr.code === "EPIPE" || nodeErr.code === "ERR_IPC_CHANNEL_CLOSED";
30
+ }
12
31
  function send(msg) {
13
- if (process.send) process.send(msg);
32
+ if (!process.send || !process.connected) {
33
+ exitCleanly();
34
+ return;
35
+ }
36
+ try {
37
+ process.send(msg, (err) => {
38
+ if (err && isClosedIpcError(err)) exitCleanly();
39
+ else if (err) process.stderr.write(`[db-read-worker] IPC send error: ${err.message}
40
+ `);
41
+ });
42
+ } catch (err) {
43
+ if (isClosedIpcError(err)) exitCleanly();
44
+ else throw err;
45
+ }
14
46
  }
15
47
  async function openReadConnection() {
16
48
  const dbPath = process.env.EXE_DB_READ_WORKER_PATH;
@@ -63,12 +95,16 @@ process.on("message", (msg) => {
63
95
  }
64
96
  });
65
97
  function shutdown() {
66
- try {
67
- _client?.close();
68
- } catch {
69
- }
70
- process.exit(0);
98
+ exitCleanly();
71
99
  }
72
100
  process.on("SIGTERM", shutdown);
73
101
  process.on("SIGINT", shutdown);
102
+ process.on("disconnect", shutdown);
103
+ process.on("uncaughtException", (err) => {
104
+ if (isClosedIpcError(err)) {
105
+ exitCleanly();
106
+ return;
107
+ }
108
+ throw err;
109
+ });
74
110
  void openReadConnection();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@askexenow/exe-os",
3
- "version": "0.9.328",
3
+ "version": "0.9.329",
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.328",
2
+ "current": "0.9.329",
3
3
  "notes": {
4
+ "0.9.329": {
5
+ "version": "0.9.329",
6
+ "date": "2026-07-04",
7
+ "features": [],
8
+ "fixes": [
9
+ "make db read worker tolerate parent disconnect"
10
+ ],
11
+ "security": [],
12
+ "other": [
13
+ "release: bump exe-os to 0.9.329",
14
+ "stabilize ci daemon hook coverage"
15
+ ],
16
+ "migration_notes": []
17
+ },
4
18
  "0.9.328": {
5
19
  "version": "0.9.328",
6
20
  "date": "2026-07-04",
@@ -92,29 +106,6 @@
92
106
  "migration_notes": [
93
107
  "Schema auto-migrates to v10 with an additive reminder repair for sentinel completed_at values."
94
108
  ]
95
- },
96
- "0.9.323": {
97
- "version": "0.9.323",
98
- "date": "2026-07-03",
99
- "features": [],
100
- "fixes": [
101
- "Watchdog: self-reloads on new builds, daemon.ready heartbeat liveness, readiness-gated boot grace, 60-120s SIGTERM grace, booting-daemon probe before kickstart -k — ends the daemon kill loop / MCP session loss (bugs f06fa50e, a77bbb7d follow-up)",
102
- "Review nudges: cleanup invalidates notifications/signal files/dedup/queued intercoms; 48h signal TTL sweep; drains revalidate against scoped review count; no more phantom 'employee completed work' (bug 880a3483)",
103
- "Intercom: coordinator sessions never keystroke-injected; input-buffer guard for employees; hook delivers nudges as context (P0 prompt-pollution fix)",
104
- "Tasks: atomic completion write before side effects; durable dispatch journal + replay warnings; dead-coordinator tasks escalate/re-parent; dead-scope rescue; stale-flip nudge suppression (bugs d053f8a8, f20406b1)",
105
- "Retrieval: searchMode=fts keeps selfQueryRouter/graph/reranker pillars (bugs 5d204108/1087e86d); document ingest works via daemon client (bug ab6a46f5)",
106
- "Embeddings: poison backfill rows parked so the flag clears; adaptive CPU backfill; EXE_DISABLE_BACKFILL kill-switch; embed-worker RSS backstop default-ON at 5120MB (bugs ec9d477c/ba661f20/0db188f2)",
107
- "Stack: third-party images tag-pinned + per-pull re-auth (bug af65c007); stable exe-db host port (bug ad645206); CRM_API_TOKEN passthrough + loud bridge warning (bug 0b66164c)",
108
- "Cloud CLI: /health preflight fail-fast + hard timeouts — no more infinite hang (bug 2d2143a3 client half)"
109
- ],
110
- "security": [
111
- "SSO edge validates access tokens against GoTrue via auth_request (was: presence-only bypass, P0 bug 462d3273)",
112
- "Cloudflare templates route auth.<domain> through exe-auth, not raw GoTrue (bug 802661a5)"
113
- ],
114
- "other": [
115
- "CI: per-SHA concurrency on main so release CI runs are never cancelled (bug 252e93ae)"
116
- ],
117
- "migration_notes": []
118
109
  }
119
110
  }
120
111
  }