@askexenow/exe-os 0.9.244 → 0.9.245

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.
@@ -63,12 +63,24 @@ API_ROUTER_KEY=exe_rk_CHANGEME_API_ROUTER_KEY
63
63
  GATEWAY_HTTP_HOST_PORT=3100
64
64
  GATEWAY_WS_HOST_PORT=3101
65
65
 
66
+ # --- Monitoring hub (PocketBase — local per-customer instance) ---
67
+ MONITOR_HUB_IMAGE_TAG=update.askexe.com/askexe/exe-monitor-hub:v0.9.3
68
+ MONITOR_HUB_PORT=8090
69
+ # Bootstrap superuser created on first start. Use your admin email + a strong password.
70
+ # After first boot these values are no longer used (stored in pb_data volume).
71
+ # SECURITY: access /_/ admin panel via SSH tunnel only — it is blocked in the Cloudflare Tunnel.
72
+ # ssh -L 8090:127.0.0.1:8090 <vps> then open http://localhost:8090/_/
73
+ MONITOR_HUB_ADMIN_EMAIL=CHANGEME_ADMIN_EMAIL
74
+ MONITOR_HUB_ADMIN_PASSWORD=CHANGEME_MONITOR_HUB_ADMIN_PASSWORD
75
+
66
76
  # --- Monitoring agent (standard for managed customer VPSs) ---
67
77
  MONITOR_AGENT_IMAGE_TAG=update.askexe.com/askexe/exe-monitor-agent:v0.9.3
78
+ # Reports to the local hub. Auto-populated by `exe-os stack-update` during bootstrap.
68
79
  MONITOR_HUB_URL=http://exe-monitor-hub:8090
69
- # Required: values copied from the local exe-monitor-hub when adding the Hygo/customer system.
70
- MONITOR_AGENT_TOKEN=CHANGEME_MONITOR_AGENT_TOKEN_FROM_MONITOR_HUB
71
- MONITOR_AGENT_KEY=CHANGEME_MONITOR_AGENT_PUBLIC_KEY_FROM_MONITOR_HUB
80
+ # TOKEN and KEY are written automatically by stack-update via /api/register-agent.
81
+ # Leave as CHANGEME — stack-update fills them on first deploy.
82
+ MONITOR_AGENT_TOKEN=CHANGEME_MONITOR_AGENT_TOKEN
83
+ MONITOR_AGENT_KEY=CHANGEME_MONITOR_AGENT_KEY
72
84
  MONITOR_AGENT_LISTEN=:45876
73
85
 
74
86
  # --- AskExe central monitoring hub ---
@@ -79,12 +79,24 @@ ERP_WS_PORT=9069
79
79
  # ERP_SENTRY_DSN=
80
80
  # MONITOR_API_KEY= # shared with gateway error forwarding
81
81
 
82
+ # --- Monitoring hub (PocketBase — local per-customer instance) ---
83
+ MONITOR_HUB_IMAGE_TAG=ghcr.io/askexe/exe-monitor-hub:v0.9.4
84
+ MONITOR_HUB_PORT=8090
85
+ # Bootstrap superuser created on first start. Use your admin email + a strong password.
86
+ # After first boot these values are no longer used (stored in pb_data volume).
87
+ # SECURITY: access /_/ admin panel via SSH tunnel only — it is blocked in the Cloudflare Tunnel.
88
+ # ssh -L 8090:127.0.0.1:8090 <vps> then open http://localhost:8090/_/
89
+ MONITOR_HUB_ADMIN_EMAIL=CHANGEME_ADMIN_EMAIL
90
+ MONITOR_HUB_ADMIN_PASSWORD=CHANGEME_MONITOR_HUB_ADMIN_PASSWORD
91
+
82
92
  # --- Monitoring agent (standard for managed customer VPSs) ---
83
93
  MONITOR_AGENT_IMAGE_TAG=ghcr.io/askexe/exe-monitor-agent:v0.9.4
94
+ # Reports to the local hub. Auto-populated by `exe-os stack-update` during bootstrap.
84
95
  MONITOR_HUB_URL=http://exe-monitor-hub:8090
85
- # Values copied from monitor.askexe.com when adding a new system.
86
- MONITOR_AGENT_TOKEN=CHANGEME_MONITOR_AGENT_TOKEN_FROM_MONITOR_HUB
87
- MONITOR_AGENT_KEY=CHANGEME_MONITOR_AGENT_PUBLIC_KEY_FROM_MONITOR_HUB
96
+ # TOKEN and KEY are written automatically by stack-update via /api/register-agent.
97
+ # Leave as CHANGEME — stack-update fills them on first deploy.
98
+ MONITOR_AGENT_TOKEN=CHANGEME_MONITOR_AGENT_TOKEN
99
+ MONITOR_AGENT_KEY=CHANGEME_MONITOR_AGENT_KEY
88
100
  MONITOR_AGENT_LISTEN=:45876
89
101
 
90
102
  # --- AskExe central monitoring hub auth (AskExe-owned infra only) ---
@@ -162,6 +162,12 @@ services:
162
162
  environment:
163
163
  EXE_MONITOR_ADMIN_TOKEN: ${EXE_MONITOR_ADMIN_TOKEN:-}
164
164
  GOTRUE_URL: http://gotrue:9999
165
+ # Bootstrap superuser on first start — required so the hub is never empty
166
+ # after stack-update. Set these in .env before first deploy.
167
+ # After first boot these values are no longer used (PocketBase persists the
168
+ # superadmin in pb_data). They can be left set in .env for idempotent re-runs.
169
+ PB_ADMIN_EMAIL: ${MONITOR_HUB_ADMIN_EMAIL:-}
170
+ PB_ADMIN_PASSWORD: ${MONITOR_HUB_ADMIN_PASSWORD:-}
165
171
  ports:
166
172
  - "127.0.0.1:${MONITOR_HUB_PORT:-8090}:8090"
167
173
  volumes:
@@ -436,10 +442,19 @@ services:
436
442
  image: ${MONITOR_AGENT_IMAGE_TAG:-ghcr.io/askexe/exe-monitor-agent:v0.9.4}
437
443
  container_name: exe-monitor-agent
438
444
  restart: unless-stopped
445
+ # Depends on hub so pairing can succeed on first boot.
446
+ depends_on:
447
+ exe-monitor-hub:
448
+ condition: service_healthy
439
449
  environment:
450
+ # Reports to the local hub by default. stack-update auto-pairs this agent
451
+ # with the hub via /api/register-agent and writes TOKEN + KEY back to .env.
440
452
  HUB_URL: ${MONITOR_HUB_URL:-http://exe-monitor-hub:8090}
441
- TOKEN: ${MONITOR_AGENT_TOKEN:?MONITOR_AGENT_TOKEN is required create Hygo system in monitor.askexe.com}
442
- KEY: ${MONITOR_AGENT_KEY:?MONITOR_AGENT_KEY is required copy public key from monitor.askexe.com}
453
+ # TOKEN and KEY are written automatically by `exe-os stack-update` during
454
+ # bootstrap. They start empty; the agent retries connecting until the hub
455
+ # is paired. Do NOT make these :? required — the hub must be up first.
456
+ TOKEN: ${MONITOR_AGENT_TOKEN:-}
457
+ KEY: ${MONITOR_AGENT_KEY:-}
443
458
  LISTEN: ${MONITOR_AGENT_LISTEN:-:45876}
444
459
  volumes:
445
460
  - /var/run/docker.sock:/var/run/docker.sock:ro
@@ -124,15 +124,26 @@ export function generateEnv(options: GenerateEnvOptions): string {
124
124
  "# ERP_SENTRY_DSN=",
125
125
  "# MONITOR_API_KEY= # shared with gateway error forwarding",
126
126
  "",
127
- "# --- Monitoring ---",
127
+ "# --- Monitoring hub (PocketBase — local per-customer instance) ---",
128
128
  `MONITOR_HUB_IMAGE_TAG=${MONITOR_HUB_IMAGE_TAG}`,
129
+ "MONITOR_HUB_PORT=8090",
130
+ "# Bootstrap superuser created on first start. Use your admin email + a strong password.",
131
+ "# After first boot these values are no longer used (stored in pb_data volume).",
132
+ "# SECURITY: access /_/ admin panel via SSH tunnel only — it is blocked in the Cloudflare Tunnel.",
133
+ "# ssh -L 8090:127.0.0.1:8090 <vps> then open http://localhost:8090/_/",
134
+ `MONITOR_HUB_ADMIN_EMAIL=admin@${normalizedDomain}`,
135
+ `MONITOR_HUB_ADMIN_PASSWORD=${randomSecret(24)}`,
136
+ "",
137
+ "# --- Monitoring agent (standard for managed customer VPSs) ---",
129
138
  `MONITOR_AGENT_IMAGE_TAG=${MONITOR_AGENT_IMAGE_TAG}`,
130
- `EXE_MONITOR_ADMIN_TOKEN=${randomSecret(RANDOM_SECRET_48)}`,
139
+ "# Reports to the local hub. Auto-populated by `exe-os stack-update` during bootstrap.",
131
140
  `MONITOR_HUB_URL=${DEFAULT_MONITOR_HUB_URL}`,
132
- "MONITOR_AGENT_TOKEN=CHANGEME_MONITOR_AGENT_TOKEN_FROM_MONITOR_HUB",
133
- "MONITOR_AGENT_KEY=CHANGEME_MONITOR_AGENT_PUBLIC_KEY_FROM_MONITOR_HUB",
141
+ "# TOKEN and KEY are written automatically by stack-update via /api/register-agent.",
142
+ "# Leave as CHANGEME — stack-update fills them on first deploy.",
143
+ "MONITOR_AGENT_TOKEN=CHANGEME_MONITOR_AGENT_TOKEN",
144
+ "MONITOR_AGENT_KEY=CHANGEME_MONITOR_AGENT_KEY",
134
145
  `MONITOR_AGENT_LISTEN=${DEFAULT_MONITOR_AGENT_LISTEN}`,
135
- "MONITOR_HUB_PORT=8090",
146
+ `EXE_MONITOR_ADMIN_TOKEN=${randomSecret(RANDOM_SECRET_48)}`,
136
147
  "",
137
148
  "# --- Cloudflare Tunnel ---",
138
149
  "# Token-based tunnel (recommended). Get your token:",
@@ -231,12 +242,24 @@ export function generateExampleEnv(): string {
231
242
  "# ERP_SENTRY_DSN=",
232
243
  "# MONITOR_API_KEY= # shared with gateway error forwarding",
233
244
  "",
245
+ "# --- Monitoring hub (PocketBase — local per-customer instance) ---",
246
+ `MONITOR_HUB_IMAGE_TAG=${MONITOR_HUB_IMAGE_TAG}`,
247
+ "MONITOR_HUB_PORT=8090",
248
+ "# Bootstrap superuser created on first start. Use your admin email + a strong password.",
249
+ "# After first boot these values are no longer used (stored in pb_data volume).",
250
+ "# SECURITY: access /_/ admin panel via SSH tunnel only — it is blocked in the Cloudflare Tunnel.",
251
+ "# ssh -L 8090:127.0.0.1:8090 <vps> then open http://localhost:8090/_/",
252
+ "MONITOR_HUB_ADMIN_EMAIL=CHANGEME_ADMIN_EMAIL",
253
+ "MONITOR_HUB_ADMIN_PASSWORD=CHANGEME_MONITOR_HUB_ADMIN_PASSWORD",
254
+ "",
234
255
  "# --- Monitoring agent (standard for managed customer VPSs) ---",
235
256
  `MONITOR_AGENT_IMAGE_TAG=${MONITOR_AGENT_IMAGE_TAG}`,
257
+ "# Reports to the local hub. Auto-populated by `exe-os stack-update` during bootstrap.",
236
258
  `MONITOR_HUB_URL=${DEFAULT_MONITOR_HUB_URL}`,
237
- "# Values copied from monitor.askexe.com when adding a new system.",
238
- "MONITOR_AGENT_TOKEN=CHANGEME_MONITOR_AGENT_TOKEN_FROM_MONITOR_HUB",
239
- "MONITOR_AGENT_KEY=CHANGEME_MONITOR_AGENT_PUBLIC_KEY_FROM_MONITOR_HUB",
259
+ "# TOKEN and KEY are written automatically by stack-update via /api/register-agent.",
260
+ "# Leave as CHANGEME — stack-update fills them on first deploy.",
261
+ "MONITOR_AGENT_TOKEN=CHANGEME_MONITOR_AGENT_TOKEN",
262
+ "MONITOR_AGENT_KEY=CHANGEME_MONITOR_AGENT_KEY",
240
263
  `MONITOR_AGENT_LISTEN=${DEFAULT_MONITOR_AGENT_LISTEN}`,
241
264
  "",
242
265
  "# --- AskExe central monitoring hub auth (AskExe-owned infra only) ---",
@@ -103,10 +103,13 @@ MONITOR_HUB_IMAGE_TAG=ghcr.io/askexe/exe-monitor-hub:v0.9.4
103
103
  MONITOR_AGENT_IMAGE_TAG=ghcr.io/askexe/exe-monitor-agent:v0.9.4
104
104
  EXE_MONITOR_ADMIN_TOKEN=$(gen 48)
105
105
  MONITOR_HUB_URL=http://exe-monitor-hub:8090
106
+ MONITOR_HUB_PORT=8090
107
+ # Bootstrap superuser — created on first start, stored in pb_data afterwards.
108
+ MONITOR_HUB_ADMIN_EMAIL=admin@${DOMAIN}
109
+ MONITOR_HUB_ADMIN_PASSWORD=$(gen 24)
106
110
  MONITOR_AGENT_TOKEN=CHANGEME_MONITOR_AGENT_TOKEN
107
111
  MONITOR_AGENT_KEY=CHANGEME_MONITOR_AGENT_KEY
108
112
  MONITOR_AGENT_LISTEN=:45876
109
- MONITOR_HUB_PORT=8090
110
113
  # --- R2 (Cloudflare) — shared by media uploads + VPS backups ---
111
114
  R2_MEDIA_BUCKET=CHANGEME_R2_BUCKET
112
115
  R2_MEDIA_ENDPOINT=CHANGEME_https://ACCOUNT_ID.r2.cloudflarestorage.com
@@ -4,7 +4,7 @@ import {
4
4
  } from "../chunk-AQBEG33D.js";
5
5
  import {
6
6
  lightweightSearch
7
- } from "../chunk-DLZYAYVM.js";
7
+ } from "../chunk-2MNLSUC6.js";
8
8
  import "../chunk-222SI7QC.js";
9
9
  import "../chunk-CHCA3ZM2.js";
10
10
  import "../chunk-IZVKWBIP.js";
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  hybridSearch,
4
4
  lightweightSearch
5
- } from "../chunk-DLZYAYVM.js";
5
+ } from "../chunk-2MNLSUC6.js";
6
6
  import {
7
7
  initStore
8
8
  } from "../chunk-222SI7QC.js";
@@ -10,7 +10,7 @@ import {
10
10
  loadStackManifest,
11
11
  patchEnv,
12
12
  runStackUpdate
13
- } from "../chunk-BYCNUKII.js";
13
+ } from "../chunk-OCLP7WP4.js";
14
14
  import {
15
15
  runVerifyStack
16
16
  } from "../chunk-IRHNV4GY.js";
@@ -20,7 +20,7 @@ import {
20
20
  import {
21
21
  logResult,
22
22
  runHealthGate
23
- } from "../chunk-TD5CADZ5.js";
23
+ } from "../chunk-ZYRMTXBF.js";
24
24
  import "../chunk-MOZ2YQ54.js";
25
25
  import "../chunk-VXIMSRTO.js";
26
26
  import "../chunk-LYH5HE24.js";
@@ -8,7 +8,7 @@ import {
8
8
  logResult,
9
9
  main,
10
10
  runHealthGate
11
- } from "../chunk-TD5CADZ5.js";
11
+ } from "../chunk-ZYRMTXBF.js";
12
12
  import "../chunk-MLKGABMK.js";
13
13
  export {
14
14
  checkCRM,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  lightweightSearch
3
- } from "./chunk-DLZYAYVM.js";
3
+ } from "./chunk-2MNLSUC6.js";
4
4
  import "./chunk-222SI7QC.js";
5
5
  import "./chunk-CHCA3ZM2.js";
6
6
  import "./chunk-IZVKWBIP.js";
@@ -288,7 +288,7 @@ async function hybridSearch(queryText, agentId, options) {
288
288
  let rerankerAvailable = false;
289
289
  if (process.env.EXE_IS_DAEMON === "1") {
290
290
  try {
291
- const { isRerankerAvailable } = await import("./reranker-UCPLQZE2.js");
291
+ const { isRerankerAvailable } = await import("./reranker-XHONNVBD.js");
292
292
  rerankerAvailable = isRerankerAvailable();
293
293
  } catch {
294
294
  }
@@ -452,7 +452,7 @@ async function hybridSearch(queryText, agentId, options) {
452
452
  try {
453
453
  let rerankedRecords;
454
454
  if (graphContextMap.size > 0) {
455
- const { rerankWithContext } = await import("./reranker-UCPLQZE2.js");
455
+ const { rerankWithContext } = await import("./reranker-XHONNVBD.js");
456
456
  const candidates = merged.map((m) => ({
457
457
  text: m.raw_text,
458
458
  context: graphContextMap.get(m.id)
@@ -460,7 +460,7 @@ async function hybridSearch(queryText, agentId, options) {
460
460
  const scored = await rerankWithContext(effectiveQuery, candidates, rerankReturnLimit);
461
461
  rerankedRecords = scored.map((s) => merged[s.index]);
462
462
  } else {
463
- const { rerank } = await import("./reranker-UCPLQZE2.js");
463
+ const { rerank } = await import("./reranker-XHONNVBD.js");
464
464
  rerankedRecords = await rerank(effectiveQuery, merged, rerankReturnLimit);
465
465
  }
466
466
  if (rerankedRecords.length > 0) {
@@ -469,7 +469,7 @@ function assertHostReadyForApply(report) {
469
469
  if (!report.composeFileExists) blockers.push("docker-compose.yml is missing and could not be created.");
470
470
  if (!report.envFileExists) blockers.push(".env is missing and could not be created.");
471
471
  if (!report.licensePresent) blockers.push("Exe OS license key is missing. Run `exe-os setup`, `exe-os --activate <key>`, or pass --license-key.");
472
- const hardPlaceholders = report.envRemainingPlaceholders.filter((p) => !/WHATSAPP|API_ROUTER|MONITOR_AGENT|CLOUDFLARE_TUNNEL_TOKEN/.test(p));
472
+ const hardPlaceholders = report.envRemainingPlaceholders.filter((p) => !/WHATSAPP|API_ROUTER|MONITOR_AGENT|MONITOR_HUB_ADMIN|CLOUDFLARE_TUNNEL_TOKEN/.test(p));
473
473
  if (hardPlaceholders.length > 0) blockers.push(`Required .env placeholders remain: ${hardPlaceholders.join(", ")}`);
474
474
  if (blockers.length > 0) throw new Error(`Stack host is not ready:
475
475
  - ${blockers.join("\n- ")}`);
@@ -10,7 +10,7 @@ import {
10
10
  import {
11
11
  isRerankerAvailable,
12
12
  rerankWithScores
13
- } from "./chunk-AHXEU5XB.js";
13
+ } from "./chunk-QHVOFVSL.js";
14
14
  import {
15
15
  getCachedLicenseGate
16
16
  } from "./chunk-2WBBVEIB.js";
@@ -187,7 +187,7 @@ import {
187
187
  import {
188
188
  hybridSearch,
189
189
  recentRecords
190
- } from "./chunk-DLZYAYVM.js";
190
+ } from "./chunk-2MNLSUC6.js";
191
191
  import {
192
192
  attachDocumentMetadata,
193
193
  flushBatch,
@@ -257,6 +257,7 @@ import {
257
257
  getIdentity,
258
258
  isCoordinatorName,
259
259
  isCoordinatorRole,
260
+ isInitialized,
260
261
  listIdentities,
261
262
  loadEmployees,
262
263
  loadEmployeesSync,
@@ -425,6 +426,10 @@ function registerRecallMyMemory(server) {
425
426
  session_scope
426
427
  }) => {
427
428
  try {
429
+ if (!isInitialized()) {
430
+ const { fastDbInit: fastDbInit2 } = await import("./fast-db-init-YSR7RMVZ.js");
431
+ await fastDbInit2();
432
+ }
428
433
  if (!recent && !query) {
429
434
  return {
430
435
  content: [{ type: "text", text: "query is required when recent mode is not enabled." }],
@@ -527,7 +532,16 @@ ${formatted}${federatedNote}`
527
532
  };
528
533
  } catch (err) {
529
534
  const msg = err instanceof Error ? err.message : String(err);
530
- const friendly = msg.includes("SQLITE_BUSY") ? "Memory system is busy \u2014 please retry." : "Failed to search memories. Please retry.";
535
+ let friendly;
536
+ if (msg.includes("SQLITE_BUSY") || msg.includes("database is locked")) {
537
+ friendly = "Memory system is busy \u2014 please retry.";
538
+ } else if (msg.includes("not initialized") || msg.includes("Call initDatabase")) {
539
+ friendly = "Memory system is still starting up \u2014 please retry in a moment.";
540
+ } else if (msg.includes("Daemon not running") || msg.includes("FTS5 corruption")) {
541
+ friendly = "Memory daemon is not running \u2014 please restart the daemon and retry.";
542
+ } else {
543
+ friendly = `Failed to search memories: ${msg}`;
544
+ }
531
545
  return {
532
546
  content: [{ type: "text", text: friendly }],
533
547
  isError: true
@@ -204,7 +204,7 @@ async function main(args) {
204
204
  console.log("[health-gate] Starting rollback...");
205
205
  restorePreDeployBackup();
206
206
  try {
207
- const { rollbackStackUpdate, defaultStackPaths } = await import("./stack-update-7F2E2MBJ.js");
207
+ const { rollbackStackUpdate, defaultStackPaths } = await import("./stack-update-ZBK34WTB.js");
208
208
  const paths = defaultStackPaths();
209
209
  await rollbackStackUpdate({
210
210
  manifestRef: paths.manifestRef,
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  hybridSearch,
6
6
  lightweightSearch
7
- } from "../chunk-DLZYAYVM.js";
7
+ } from "../chunk-2MNLSUC6.js";
8
8
  import {
9
9
  initStore
10
10
  } from "../chunk-222SI7QC.js";
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "version": 1,
3
- "generatedAt": "2026-06-09T11:17:57.737Z",
3
+ "generatedAt": "2026-06-09T11:34:40.567Z",
4
4
  "hashes": {
5
5
  "bug-report-worker.js": "a6039ded4fe88f726e8abee1943ab0b3eb041caadf6b31c62fdf26cc4b44ed15",
6
6
  "codex-stop-task-finalizer.js": "14c012358cec82d3e45631d8fbf680b5801300dbcacfc518f6db5865160fd8f9",
7
7
  "commit-complete.js": "cdff7e603781d8edc7f99586f6042a5a7af69bf1ad54cb22827bfa01228373b0",
8
- "error-recall.js": "340af628634bb2c85a571691e779f92cb2339844653307479de22ddaed94d6f8",
8
+ "error-recall.js": "47c685b1a4ba96c41597b49f19d3af7e022874569231b88fa265cefef3648b52",
9
9
  "exe-heartbeat-hook.js": "83edb81ef4961f2846a07998ac8eaceaa9fb0345fa429fea60f5c30b7943f803",
10
10
  "ingest-worker.js": "141c5a2091320796bca5f8ef1b1243e405808eda945e5aa0a1d5a384eaae141b",
11
11
  "ingest.js": "5705cebcf45dc67b1aa5fca9d42b61591ec66bdab2e6c57852abd3aa8f6c03eb",
@@ -15,9 +15,9 @@
15
15
  "post-tool-combined.js": "0f9db77b099ea6a6863a45521e629fedbf23da48bf71647c42f2d5b3502bfa68",
16
16
  "pre-compact.js": "9aa324537fa703b3db44e3bb03067c9b531e026e7f0362bf40a99c4d617474cb",
17
17
  "pre-tool-use.js": "d219add8c432350b4de26a37f616bba5bd098e35cf0136d80684f57f253dc0bb",
18
- "prompt-submit.js": "2670bb292a3a1ef2b42be9e48784da0e1d119e42c068b1131c04ce4789a454ca",
18
+ "prompt-submit.js": "70bd8885072d7ccaf84929daec753c726be1b0baaa41a5b7aeef4f2b162f7cf3",
19
19
  "session-end.js": "51230f562e9fd1b66a72f04b68a47ed6bb2a20ff9d4435c0ae312581ad7015c4",
20
- "session-start.js": "ae16569cb8bc689105ec5212ba0134ca79c7818d785cc48e887ce76596d6d584",
20
+ "session-start.js": "1aa116305aef5b361c3f221a52bd13a22a22a90b3a41595fd2d190a593c586f4",
21
21
  "stop.js": "585e82b998b280549441640c72ba278625719edc011e6295ac3f5a172fe92a4e",
22
22
  "subagent-stop.js": "854de3a24da865b71945bce5b8d7ddbdb836a5753e8bf6d0c50e05e96455a3ec",
23
23
  "summary-worker.js": "317443adac4012fdcafcb4ec79dac2f9d9abb34a4d0c825761ece3de868bb6a4"
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  hybridSearch,
3
3
  lightweightSearch
4
- } from "../chunk-DLZYAYVM.js";
4
+ } from "../chunk-2MNLSUC6.js";
5
5
  import {
6
6
  initStore
7
7
  } from "../chunk-222SI7QC.js";
@@ -163,7 +163,7 @@ You are **${ag.agentId}** (${ag.agentRole}). Daemon is degraded \u2014 memory un
163
163
  query = `last actions on ${projectName}`;
164
164
  header = "## Resuming Session\nHere's where you left off:";
165
165
  try {
166
- const { buildCatchupBrief } = await import("../catchup-brief-LF5Z6Q6E.js");
166
+ const { buildCatchupBrief } = await import("../catchup-brief-KTDI32BO.js");
167
167
  const brief = await buildCatchupBrief(
168
168
  agentId,
169
169
  projectName,
@@ -777,6 +777,13 @@ var OOM_MARKER_PATH = path3.join(os2.homedir(), ".exe-os", "embedding-oom-marker
777
777
  var MIN_FREE_MEM_BYTES = 2 * 1024 ** 3;
778
778
  var MAX_SMALL_TOTAL_BYTES = 16 * 1024 ** 3;
779
779
  async function loadModel() {
780
+ const forceEmbeddings = process.env.EXE_EMBEDDINGS === "1" || process.env.EXE_EMBEDDINGS === "true";
781
+ if (!forceEmbeddings) {
782
+ process.stderr.write(`[exed] Embeddings OFF by default (FTS+Graph only). Set EXE_EMBEDDINGS=1 to enable.
783
+ `);
784
+ _embeddingsDisabledByDesign = true;
785
+ return;
786
+ }
780
787
  const modelPath = path3.join(MODELS_DIR, MODEL_FILE);
781
788
  if (!existsSync3(modelPath)) {
782
789
  process.stderr.write(`[exed] No model at ${modelPath} \u2014 running without embeddings (VPS mode).
@@ -5,7 +5,7 @@ import {
5
5
  recentRecords,
6
6
  rrfMerge,
7
7
  rrfMergeMulti
8
- } from "../chunk-DLZYAYVM.js";
8
+ } from "../chunk-2MNLSUC6.js";
9
9
  import "../chunk-222SI7QC.js";
10
10
  import "../chunk-CHCA3ZM2.js";
11
11
  import "../chunk-IZVKWBIP.js";
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  registerAllTools
3
- } from "../chunk-YRVW57UW.js";
3
+ } from "../chunk-WAO67AYG.js";
4
4
  import "../chunk-FFLILAG6.js";
5
5
  import "../chunk-557C2IGL.js";
6
6
  import "../chunk-KEZXW3RP.js";
7
7
  import "../chunk-VQAP35DA.js";
8
- import "../chunk-AHXEU5XB.js";
8
+ import "../chunk-QHVOFVSL.js";
9
9
  import "../chunk-2WBBVEIB.js";
10
10
  import "../chunk-VBPC7IC7.js";
11
11
  import "../chunk-U3DUFHOT.js";
@@ -59,7 +59,7 @@ import "../chunk-AQBEG33D.js";
59
59
  import "../chunk-LAOB5BKV.js";
60
60
  import "../chunk-RRHSONV5.js";
61
61
  import "../chunk-7IZWLMTP.js";
62
- import "../chunk-DLZYAYVM.js";
62
+ import "../chunk-2MNLSUC6.js";
63
63
  import "../chunk-222SI7QC.js";
64
64
  import "../chunk-CHCA3ZM2.js";
65
65
  import "../chunk-IZVKWBIP.js";
@@ -3,12 +3,12 @@ import {
3
3
  } from "../chunk-V4TZI6EO.js";
4
4
  import {
5
5
  registerAllTools
6
- } from "../chunk-YRVW57UW.js";
6
+ } from "../chunk-WAO67AYG.js";
7
7
  import "../chunk-FFLILAG6.js";
8
8
  import "../chunk-557C2IGL.js";
9
9
  import "../chunk-KEZXW3RP.js";
10
10
  import "../chunk-VQAP35DA.js";
11
- import "../chunk-AHXEU5XB.js";
11
+ import "../chunk-QHVOFVSL.js";
12
12
  import {
13
13
  initLicenseGate
14
14
  } from "../chunk-2WBBVEIB.js";
@@ -69,7 +69,7 @@ import "../chunk-AQBEG33D.js";
69
69
  import "../chunk-LAOB5BKV.js";
70
70
  import "../chunk-RRHSONV5.js";
71
71
  import "../chunk-7IZWLMTP.js";
72
- import "../chunk-DLZYAYVM.js";
72
+ import "../chunk-2MNLSUC6.js";
73
73
  import {
74
74
  disposeStore,
75
75
  initStore
@@ -5,7 +5,7 @@ import {
5
5
  rerank,
6
6
  rerankWithContext,
7
7
  rerankWithScores
8
- } from "./chunk-AHXEU5XB.js";
8
+ } from "./chunk-QHVOFVSL.js";
9
9
  import "./chunk-VXIMSRTO.js";
10
10
  import "./chunk-LYH5HE24.js";
11
11
  import "./chunk-MLKGABMK.js";
@@ -20,7 +20,7 @@ import {
20
20
  runStackUpdate,
21
21
  verifyReleaseHealth,
22
22
  verifyStackManifestSignature
23
- } from "./chunk-BYCNUKII.js";
23
+ } from "./chunk-OCLP7WP4.js";
24
24
  import "./chunk-MOZ2YQ54.js";
25
25
  import "./chunk-VXIMSRTO.js";
26
26
  import "./chunk-LYH5HE24.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@askexenow/exe-os",
3
- "version": "0.9.244",
3
+ "version": "0.9.245",
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,106 @@
1
1
  {
2
- "current": "0.9.244",
2
+ "current": "0.9.245",
3
3
  "notes": {
4
+ "0.9.245": {
5
+ "version": "0.9.245",
6
+ "date": "2026-06-09",
7
+ "features": [
8
+ "Entity Profile UI — knowledge graph explorer + entity detail view",
9
+ "log MCP session open/close to stderr for docker logs visibility",
10
+ "Graph→PostgreSQL sync timer — automatic SQLite→exe-db projection",
11
+ "project GraphRAG data to PostgreSQL during cloud sync pull",
12
+ "add behavior effectiveness tracking — attribution, conflicts, scoring, load",
13
+ "close the reinforcement loop — dreaming reads investigation data",
14
+ "add reviews to Cloudflare support system — separate from bugs/features",
15
+ "self-improvement auto-merges simple fixes, notifies on failures",
16
+ "automatic investigation record system for debugging cycle tracking",
17
+ "smoke test + Playwright E2E + self-improvement cron",
18
+ "P0 procedures — verify your own fix + confidence decay",
19
+ "boot output as formatted table with box-drawing characters",
20
+ "show auto-fix cycle status in exe-os boot",
21
+ "graceful daemon restart — persist MCP sessions for transparent recovery",
22
+ "default to keyword+graph search, embeddings opt-in",
23
+ "server-side telemetry storage + admin insights endpoint",
24
+ "enrich telemetry payload with usage counters and auto-insights",
25
+ "add telemetry auto-insight computation engine",
26
+ "auto-calibration in dreaming cycle + telemetry integration",
27
+ "first-class time estimation on tasks — auto-tracked, queryable",
28
+ "add agent assertion system — confidence tracking on task lifecycle",
29
+ "auto-run dreaming cycle on session end — zero-touch self-improvement",
30
+ "add dreaming system + structured handoffs to platform procedures",
31
+ "add snapshot + boot to platform procedures and operating procedures",
32
+ "add `exe-os boot --project X` CLI command for project boot verification"
33
+ ],
34
+ "fixes": [
35
+ "embeddings OFF by default for all users — opt-in via EXE_EMBEDDINGS=1",
36
+ "keep generated env templates in sync",
37
+ "bootstrap monitor env and lazy-init recall memory",
38
+ "registry proxy accepts license keys + stack-update reads .env license",
39
+ "stack-release uses defaultBranch per repo (wiki uses master)",
40
+ "prevent stale task intercom prompts",
41
+ "v0.9.241 — 13 more bug fixes (28 total this session)",
42
+ "sync lockfile for Docker build — npm ci --omit=dev works again",
43
+ "keep review notifications session-local and test-safe",
44
+ "CI Dockerfile reference — Dockerfile.exed → Dockerfile.exe-os",
45
+ "v0.9.240 — 15 bug fixes across HYGO, Jack, platform (stack v0.9.15)",
46
+ "keep daemon memory recall FTS bounded",
47
+ "keep daemon cloud sync off CRDT heap path",
48
+ "suppress ENOBUFS in reapers + skip boot-time sync execution",
49
+ "MCP health probe in prompt hook + Docker image build tolerance",
50
+ "plug MCP session memory leak — zombie McpServer instances accumulated",
51
+ "lower RSS watchdog to 1.5/2.5GB + add GC after heavy operations",
52
+ "snapshot crash — daemon fallback + dreaming scope binding",
53
+ "skip duplicate initStore in WS client — prevents 2-8s event loop block",
54
+ "add session scope imports to dreaming, project-boot, telemetry-upload",
55
+ "resolve typecheck errors for npm publish",
56
+ "add setImmediate yields to Graph→PG sync — prevent event loop blocking",
57
+ "convert SQLite short hex IDs to valid UUIDs for PostgreSQL projection",
58
+ "delay initial graph sync tick to 60s + add debug logging",
59
+ "share DB init state between MCP HTTP and timer ticks"
60
+ ],
61
+ "security": [
62
+ "fix shell injection, SSRF, socket leaks, backup validation",
63
+ "bump v0.9.139 — 2 CRITICAL security fixes, 14 bug fixes, 6 features, customer config preservation",
64
+ "fix 2 CRITICAL + 1 HIGH from post-fix audit",
65
+ "validate X-Agent-Role against roster — prevent privilege escalation",
66
+ "release: stack v0.9.8 — security hardening + Hygo bug fixes",
67
+ "add webhook HMAC-SHA256 validation + disable query param auth in prod",
68
+ "pin GitHub Actions to SHAs, update jose to 6.2.3",
69
+ "harden support intake against abuse and data leakage",
70
+ "bump to v0.9.22 — Codex MCP parity + customer bug fixes + security audit remediation",
71
+ "audit: pre-hygo exe-gateway security report",
72
+ "add SECURITY.md — trust document for pre-install security evaluation",
73
+ "fix 4 pricing tier bypass vulnerabilities (audit F1-F4)"
74
+ ],
75
+ "other": [
76
+ "bump v0.9.245",
77
+ "sync v0.9.244 published artifacts",
78
+ "bump v0.9.244",
79
+ "cover registry proxy license auth fallbacks",
80
+ "update release notes for v0.9.243",
81
+ "stack release v0.9.16",
82
+ "bump v0.9.243 for stack release",
83
+ "bump v0.9.242 for stack release",
84
+ "add STACK-RELEASE.md — full release process documentation",
85
+ "claurst competitive analysis — npm distribution + free-tier mode",
86
+ "bump stack.release.json to v0.9.240 for CI image build",
87
+ "update release notes for v0.9.238-239",
88
+ "release: stack v0.9.14 — gateway audit fixes",
89
+ "release: stack v0.9.13 — HYGO deployment readiness",
90
+ "incremental Graph→PG sync — 86K rows → deltas only",
91
+ "batch Graph→PG sync — 500 rows per INSERT instead of row-by-row",
92
+ "consolidate daemon timers into unified orchestration tick (#78)",
93
+ "revise GLiNER — Haiku API now, GLiNER when cost matters",
94
+ "capture GLiNER entity extraction in ARCHITECTURE.md",
95
+ "detailed design system structure + Phase 2 component list",
96
+ "exe-os-design-system — unified design system for all products",
97
+ "GoTrue JWT unified auth architecture — founder directive 2026-06-08",
98
+ "Thread + Graph Discovery architecture — unified knowledge view",
99
+ "move heavy jobs to 9 PM — GraphRAG, skill sweep, backup",
100
+ "Mode 3 Client-Side RAG architecture — memories never leave device"
101
+ ],
102
+ "migration_notes": []
103
+ },
4
104
  "0.9.244": {
5
105
  "version": "0.9.244",
6
106
  "date": "2026-06-09",
@@ -316,22 +416,6 @@
316
416
  "bump to v0.9.237"
317
417
  ],
318
418
  "migration_notes": []
319
- },
320
- "0.9.234": {
321
- "version": "0.9.234",
322
- "date": "2026-06-08",
323
- "features": [],
324
- "fixes": [
325
- "daemon memory leak — 3 fixes prevent 3.5GB growth over 20 hours",
326
- "P0 WAL checkpoint before backup — prevents SQLITE_CORRUPT on large DBs",
327
- "6 launch blockers for July 1 public launch",
328
- "remove duplicate sessionScope filter — corrupted SQL parameter binding"
329
- ],
330
- "security": [],
331
- "other": [
332
- "bump to v0.9.230 — P0 WAL backup corruption fix for Jack"
333
- ],
334
- "migration_notes": []
335
419
  }
336
420
  }
337
421
  }
File without changes