@askexenow/exe-os 0.9.155 → 0.9.156

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,37 @@
1
+ #!/usr/bin/env bash
2
+ # Automated backup for exe-os stack — runs daily via cron or systemd timer.
3
+ # Backs up: postgres (all databases), gateway auth state, wiki storage.
4
+ set -euo pipefail
5
+
6
+ BACKUP_DIR="${BACKUP_DIR:-/opt/exe-backups}"
7
+ RETENTION_DAYS="${BACKUP_RETENTION_DAYS:-7}"
8
+ DATE=$(date +%Y%m%d-%H%M%S)
9
+ COMPOSE_DIR="$(cd "$(dirname "$0")" && pwd)"
10
+
11
+ mkdir -p "$BACKUP_DIR"
12
+
13
+ echo "[backup] Starting exe-os stack backup ($DATE)"
14
+
15
+ # 1. Postgres dump (all databases)
16
+ echo "[backup] Dumping postgres..."
17
+ docker exec exe-db pg_dumpall -U exe > "$BACKUP_DIR/postgres-$DATE.sql" 2>/dev/null
18
+ gzip "$BACKUP_DIR/postgres-$DATE.sql"
19
+ echo "[backup] Postgres: $(du -h "$BACKUP_DIR/postgres-$DATE.sql.gz" | cut -f1)"
20
+
21
+ # 2. Gateway auth state (Baileys creds)
22
+ echo "[backup] Backing up gateway auth state..."
23
+ docker cp exe-gateway:/data/. "$BACKUP_DIR/gateway-$DATE/" 2>/dev/null || echo "[backup] Gateway backup skipped (not running)"
24
+ tar -czf "$BACKUP_DIR/gateway-$DATE.tar.gz" -C "$BACKUP_DIR" "gateway-$DATE" 2>/dev/null && rm -rf "$BACKUP_DIR/gateway-$DATE"
25
+
26
+ # 3. Wiki storage (uploaded docs)
27
+ echo "[backup] Backing up wiki storage..."
28
+ docker cp exe-wiki:/app/server/storage/. "$BACKUP_DIR/wiki-$DATE/" 2>/dev/null || echo "[backup] Wiki backup skipped"
29
+ tar -czf "$BACKUP_DIR/wiki-$DATE.tar.gz" -C "$BACKUP_DIR" "wiki-$DATE" 2>/dev/null && rm -rf "$BACKUP_DIR/wiki-$DATE"
30
+
31
+ # 4. Retention — delete backups older than N days
32
+ echo "[backup] Cleaning backups older than $RETENTION_DAYS days..."
33
+ find "$BACKUP_DIR" -name "*.gz" -mtime "+$RETENTION_DAYS" -delete 2>/dev/null
34
+ find "$BACKUP_DIR" -name "*.sql" -mtime "+$RETENTION_DAYS" -delete 2>/dev/null
35
+
36
+ echo "[backup] Done. Backups at $BACKUP_DIR:"
37
+ ls -lh "$BACKUP_DIR"/*.gz 2>/dev/null | tail -5
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "Exe OS",
3
+ "logo": null,
4
+ "colors": {
5
+ "primary": "#F5D76E",
6
+ "background": "#0F0E1A",
7
+ "surface": "rgba(245, 215, 110, 0.08)",
8
+ "text": "#f8f5ea",
9
+ "muted": "rgba(248, 245, 234, 0.72)"
10
+ },
11
+ "fonts": {
12
+ "heading": "Epilogue",
13
+ "body": "Manrope",
14
+ "mono": "Space Grotesk"
15
+ },
16
+ "support": {
17
+ "email": "support@askexe.com",
18
+ "url": "https://askexe.com"
19
+ }
20
+ }
@@ -126,6 +126,11 @@ services:
126
126
  API_EXTERNAL_URL: ${GOTRUE_EXTERNAL_URL:-https://auth.askexe.com}
127
127
  GOTRUE_DISABLE_SIGNUP: ${GOTRUE_DISABLE_SIGNUP:-false}
128
128
  GOTRUE_MAILER_AUTOCONFIRM: ${GOTRUE_MAILER_AUTOCONFIRM:-true}
129
+ GOTRUE_SMTP_HOST: ${SMTP_HOST:-}
130
+ GOTRUE_SMTP_PORT: ${SMTP_PORT:-587}
131
+ GOTRUE_SMTP_USER: ${SMTP_USER:-}
132
+ GOTRUE_SMTP_PASS: ${SMTP_PASS:-}
133
+ GOTRUE_SMTP_ADMIN_EMAIL: ${SMTP_FROM:-noreply@askexe.com}
129
134
  ports:
130
135
  - "127.0.0.1:${GOTRUE_HOST_PORT:-9999}:9999"
131
136
  networks:
@@ -173,9 +178,14 @@ services:
173
178
  image: ${CRM_IMAGE_TAG:-ghcr.io/askexe/exe-crm:v0.9.2}
174
179
  container_name: exe-crm
175
180
  restart: unless-stopped
181
+ # Auto-migrate on boot: run database init before starting the app.
182
+ # Twenty CRM won't create tables automatically — this ensures they exist.
183
+ command: ["sh", "-c", "yarn database:init:prod 2>/dev/null || true && node dist/src/main"]
176
184
  depends_on:
177
185
  exe-db:
178
186
  condition: service_healthy
187
+ gotrue:
188
+ condition: service_healthy
179
189
  clickhouse:
180
190
  condition: service_healthy
181
191
  redis:
@@ -261,9 +271,13 @@ services:
261
271
  image: ${WIKI_IMAGE_TAG:-ghcr.io/askexe/exe-wiki:v0.9.2}
262
272
  container_name: exe-wiki
263
273
  restart: unless-stopped
274
+ # Wiki uses Prisma — runs migrate on boot via built-in entrypoint.
275
+ # If tables don't exist, Prisma creates them automatically.
264
276
  depends_on:
265
277
  exe-db:
266
278
  condition: service_healthy
279
+ gotrue:
280
+ condition: service_healthy
267
281
  env_file:
268
282
  - path: .env
269
283
  required: false
@@ -0,0 +1,166 @@
1
+ #!/usr/bin/env bash
2
+ # exe-os stack first-time setup — run once on a fresh VPS.
3
+ # Usage: ./setup.sh --client <name> --domain <domain> [--license <key>]
4
+ set -euo pipefail
5
+
6
+ RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m'
7
+ info() { echo -e "${GREEN}[setup]${NC} $1"; }
8
+ warn() { echo -e "${YELLOW}[setup]${NC} $1"; }
9
+ err() { echo -e "${RED}[setup]${NC} $1" >&2; }
10
+
11
+ # Parse args
12
+ CLIENT="" DOMAIN="" LICENSE=""
13
+ while [[ $# -gt 0 ]]; do
14
+ case $1 in
15
+ --client) CLIENT="$2"; shift 2;;
16
+ --domain) DOMAIN="$2"; shift 2;;
17
+ --license) LICENSE="$2"; shift 2;;
18
+ *) err "Unknown arg: $1"; exit 1;;
19
+ esac
20
+ done
21
+ [[ -z "$CLIENT" || -z "$DOMAIN" ]] && { err "Usage: ./setup.sh --client <name> --domain <domain>"; exit 1; }
22
+
23
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
24
+ cd "$SCRIPT_DIR"
25
+
26
+ # Step 1: Docker + GHCR auth
27
+ info "Step 1: Docker registry authentication"
28
+ if ! docker info >/dev/null 2>&1; then
29
+ err "Docker is not running. Install Docker first: https://docs.docker.com/engine/install/"
30
+ exit 1
31
+ fi
32
+
33
+ if [[ -f .ghcr-token ]]; then
34
+ info "Logging into GHCR with stored token..."
35
+ cat .ghcr-token | docker login ghcr.io -u exe-os-pull --password-stdin 2>/dev/null || true
36
+ elif [[ -n "${GHCR_TOKEN:-}" ]]; then
37
+ info "Logging into GHCR with GHCR_TOKEN env var..."
38
+ echo "$GHCR_TOKEN" | docker login ghcr.io -u exe-os-pull --password-stdin 2>/dev/null || true
39
+ else
40
+ warn "No GHCR token found. Set GHCR_TOKEN env var or create .ghcr-token file."
41
+ warn "Images must be pullable — public or pre-authed."
42
+ fi
43
+
44
+ # Step 2: Generate .env
45
+ info "Step 2: Generating .env file"
46
+ if [[ -f .env ]]; then
47
+ warn ".env already exists — skipping generation. Delete .env to regenerate."
48
+ else
49
+ if command -v node >/dev/null 2>&1; then
50
+ node -e "
51
+ const { generateEnv } = require('../../dist/deploy/compose/generate-env.js');
52
+ console.log(generateEnv({ clientName: '$CLIENT', domain: '$DOMAIN', licenseKey: '${LICENSE:-}' || undefined }));
53
+ " > .env 2>/dev/null || {
54
+ # Fallback: generate inline
55
+ info "Generating secrets inline..."
56
+ gen() { openssl rand -hex "$1"; }
57
+ cat > .env << ENVEOF
58
+ POSTGRES_USER=exe
59
+ POSTGRES_PASSWORD=$(gen 32)
60
+ POSTGRES_DB=exedb
61
+ CLICKHOUSE_DB=default
62
+ CLICKHOUSE_USER=exe
63
+ CLICKHOUSE_PASSWORD=$(gen 32)
64
+ REDIS_PASSWORD=$(gen 32)
65
+ GOTRUE_JWT_SECRET=$(gen 48)
66
+ GOTRUE_SITE_URL=https://crm.${DOMAIN}
67
+ GOTRUE_EXTERNAL_URL=https://auth.${DOMAIN}
68
+ GOTRUE_DISABLE_SIGNUP=false
69
+ GOTRUE_MAILER_AUTOCONFIRM=true
70
+ CRM_IMAGE_TAG=ghcr.io/askexe/exe-crm:v0.9.3
71
+ CRM_SERVER_URL=https://crm.${DOMAIN}
72
+ CRM_APP_SECRET=$(gen 48)
73
+ EXE_CRM_ADMIN_TOKEN=$(gen 48)
74
+ CRM_HOST_PORT=3000
75
+ WIKI_IMAGE_TAG=ghcr.io/askexe/exe-wiki:v0.9.4
76
+ WIKI_DB_SCHEMA=wiki
77
+ WIKI_VECTOR_DB=postgres
78
+ WIKI_AUTH_TOKEN=$(gen 48)
79
+ EXE_WIKI_ADMIN_TOKEN=$(gen 48)
80
+ WIKI_JWT_SECRET=$(gen 48)
81
+ WIKI_SIG_KEY=$(gen 48)
82
+ WIKI_SIG_SALT=$(gen 16)
83
+ WIKI_HOST_PORT=3001
84
+ EXE_OS_IMAGE_TAG=ghcr.io/askexe/exe-os:v0.9.155
85
+ EXED_MCP_TOKEN=$(gen 48)
86
+ EXED_DEVICE_ID=vps-${CLIENT}
87
+ EXE_CLOUD_SYNC_TO_POSTGRES=true
88
+ EXE_LICENSE_KEY=${LICENSE:-CHANGEME_EXE_LICENSE_KEY}
89
+ GATEWAY_IMAGE_TAG=ghcr.io/askexe/exe-gateway:v0.9.3
90
+ EXE_GATEWAY_AUTH_TOKEN=$(gen 48)
91
+ EXE_GATEWAY_WS_RELAY_AUTH_TOKEN=$(gen 48)
92
+ EXE_GATEWAY_WHATSAPP_VERIFY_TOKEN=$(gen 32)
93
+ API_ROUTER_URL=https://gateway.${DOMAIN}
94
+ GATEWAY_HTTP_HOST_PORT=3100
95
+ GATEWAY_WS_HOST_PORT=3101
96
+ MONITOR_HUB_IMAGE_TAG=ghcr.io/askexe/exe-monitor-hub:v0.9.4
97
+ MONITOR_AGENT_IMAGE_TAG=ghcr.io/askexe/exe-monitor-agent:v0.9.4
98
+ EXE_MONITOR_ADMIN_TOKEN=$(gen 48)
99
+ MONITOR_HUB_URL=https://monitor.${DOMAIN}
100
+ MONITOR_AGENT_TOKEN=CHANGEME_MONITOR_AGENT_TOKEN
101
+ MONITOR_AGENT_KEY=CHANGEME_MONITOR_AGENT_KEY
102
+ MONITOR_AGENT_LISTEN=:45876
103
+ MONITOR_HUB_PORT=8090
104
+ ENVEOF
105
+ }
106
+ fi
107
+ info ".env generated with auto-generated secrets"
108
+ fi
109
+
110
+ # Step 3: Cloudflared tunnel config
111
+ info "Step 3: Cloudflare Tunnel setup"
112
+ if [[ ! -f cloudflared/config.yml ]]; then
113
+ if [[ -f cloudflared/config.yml.example ]]; then
114
+ warn "Copy cloudflared/config.yml.example → cloudflared/config.yml"
115
+ warn "Then set TUNNEL_ID and DOMAIN in the config."
116
+ warn "Create tunnel: cloudflared tunnel create exe-${CLIENT}"
117
+ fi
118
+ else
119
+ info "Cloudflared config exists."
120
+ fi
121
+
122
+ # Step 4: Pull images
123
+ info "Step 4: Pulling Docker images..."
124
+ docker compose pull 2>&1 || { err "Image pull failed — check GHCR authentication"; exit 1; }
125
+
126
+ # Step 5: Start stack
127
+ info "Step 5: Starting stack..."
128
+ docker compose up -d 2>&1
129
+
130
+ # Step 6: Wait for health
131
+ info "Step 6: Waiting for services to be healthy..."
132
+ sleep 10
133
+ HEALTHY=0
134
+ for i in $(seq 1 30); do
135
+ COUNT=$(docker ps --filter "health=healthy" --format '{{.Names}}' | wc -l | tr -d ' ')
136
+ TOTAL=$(docker ps --format '{{.Names}}' | wc -l | tr -d ' ')
137
+ echo -ne "\r $COUNT/$TOTAL healthy (attempt $i/30)..."
138
+ if [[ "$COUNT" -ge "$TOTAL" ]]; then HEALTHY=1; break; fi
139
+ sleep 5
140
+ done
141
+ echo ""
142
+ [[ "$HEALTHY" -eq 1 ]] && info "All services healthy!" || warn "Some services not healthy yet — check docker ps"
143
+
144
+ # Step 7: Verify
145
+ info "Step 7: Verification"
146
+ docker ps --format 'table {{.Names}}\t{{.Status}}'
147
+ echo ""
148
+ info "Stack deployed! Next steps:"
149
+ echo " 1. Configure Cloudflare tunnel (if not done)"
150
+ echo " 2. Open https://crm.${DOMAIN} to create admin account"
151
+ echo " 3. Open https://wiki.${DOMAIN} to set up wiki"
152
+ echo " 4. Configure WhatsApp: edit gateway.json, restart gateway, pair at https://gateway.${DOMAIN}/pair/<name>"
153
+ echo " 5. Verify: curl https://crm.${DOMAIN}/healthz && curl https://wiki.${DOMAIN}/api/ping"
154
+
155
+ # Step 8: Firewall — ensure outbound HTTPS is open
156
+ info "Step 8: Checking network connectivity..."
157
+ if curl -s --max-time 5 https://ghcr.io >/dev/null 2>&1; then
158
+ info "Outbound HTTPS working (GHCR reachable)"
159
+ else
160
+ warn "Cannot reach ghcr.io — check firewall/network. Docker pulls will fail."
161
+ fi
162
+ if curl -s --max-time 5 https://api.cloudflare.com >/dev/null 2>&1; then
163
+ info "Cloudflare reachable"
164
+ else
165
+ warn "Cannot reach Cloudflare — tunnel won't work."
166
+ fi
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env bash
2
+ # exe-os stack health check — run anytime to verify all services.
3
+ set -euo pipefail
4
+
5
+ RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m'
6
+
7
+ echo "=== exe-os Stack Health ==="
8
+ echo ""
9
+
10
+ # Container status
11
+ echo "Containers:"
12
+ docker ps --format 'table {{.Names}}\t{{.Status}}' 2>/dev/null
13
+ echo ""
14
+
15
+ # Service health endpoints
16
+ echo "Service Endpoints:"
17
+ DOMAIN="${1:-localhost}"
18
+ check() {
19
+ local name=$1 url=$2
20
+ CODE=$(curl -sk -o /dev/null -w "%{http_code}" --max-time 5 "$url" 2>/dev/null || echo "000")
21
+ if [[ "$CODE" == "200" ]]; then
22
+ echo -e " ${GREEN}✅${NC} $name ($CODE)"
23
+ elif [[ "$CODE" == "401" ]]; then
24
+ echo -e " ${YELLOW}🔒${NC} $name ($CODE — auth required, service is up)"
25
+ else
26
+ echo -e " ${RED}❌${NC} $name ($CODE)"
27
+ fi
28
+ }
29
+
30
+ check "CRM" "http://127.0.0.1:3000/healthz"
31
+ check "Wiki" "http://127.0.0.1:3001/api/ping"
32
+ check "Gateway" "http://127.0.0.1:3100/health"
33
+ check "Monitor" "http://127.0.0.1:8090/api/health"
34
+ check "GoTrue" "http://127.0.0.1:9999/health"
35
+ check "exe-os" "http://127.0.0.1:8765/health"
36
+
37
+ echo ""
38
+
39
+ # Database
40
+ echo "Database:"
41
+ docker exec exe-db psql -U exe -d exedb -c "SELECT schemaname, COUNT(*) as tables FROM pg_tables WHERE schemaname NOT IN ('pg_catalog','information_schema') GROUP BY schemaname ORDER BY schemaname;" 2>/dev/null || echo " ❌ Cannot connect to database"
42
+
43
+ echo ""
44
+
45
+ # Disk/Memory
46
+ echo "Resources:"
47
+ echo " RAM: $(free -h 2>/dev/null | awk '/^Mem:/ {print $3 "/" $2}' || echo 'N/A')"
48
+ echo " Disk: $(df -h / 2>/dev/null | awk 'NR==2 {print $3 "/" $2 " (" $5 " used)"}' || echo 'N/A')"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@askexenow/exe-os",
3
- "version": "0.9.155",
3
+ "version": "0.9.156",
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,109 @@
1
1
  {
2
- "current": "0.9.155",
2
+ "current": "0.9.156",
3
3
  "notes": {
4
+ "0.9.156": {
5
+ "version": "0.9.156",
6
+ "date": "2026-05-28",
7
+ "features": [
8
+ "complete deployment readiness — all 14 second-pass blind spots fixed",
9
+ "production-ready stack — all 15 blind spots fixed",
10
+ "blocked task notification — ping dispatcher immediately on status change",
11
+ "self-improving skills — usage tracking, success counting, and refinement daemon",
12
+ "4 retrieval improvements — query expansion, stop words, contradiction resolution, abstention",
13
+ "competitive roadmap — serverless tier, identity depth, self-improving skills, user modeling",
14
+ "run database migrations before container swap in stack-update",
15
+ "graph auto-extract from ARCHITECTURE.md — regex-based entity/relationship extraction",
16
+ "migrate cloud.askexe.com → api.askexe.com as canonical endpoint",
17
+ "federated recall — code_context + graph fallback when memory results weak",
18
+ "migrate cloud.askexe.com → api.askexe.com across all src/ defaults",
19
+ "rolling restart in stack-update — one service at a time with health verification",
20
+ "DMR benchmark harness + LoCoMo improvements for v0.9.145 evaluation",
21
+ "Windows/WSL support — WezTerm config + WSL detection in setup wizard",
22
+ "queryTaskRows() consolidation — single scoped query path for all task list operations",
23
+ "review signal files — reliable reviewer notification on update_task(done)",
24
+ "Ghostty-native notifications via OSC 9 — no more Script Editor popup",
25
+ "device-scoped behaviors — device_id column + filter in loading",
26
+ "dispatch reliability — 45s boot timeout, dispatch ack signals, agent heartbeat",
27
+ "setup wizard headless mode + daemon health check after restart",
28
+ "device-scoped behaviors — add device_id column + filter on load",
29
+ "gateway prompt injection defense — 3-tier security hardening",
30
+ "add diagnostics(action=\"merge_agent_memories\") for reassigning memories across agent IDs",
31
+ "add task dependency tree visualization (action=dependency_tree)",
32
+ "graceful COO auto-relaunch after context-full exit"
33
+ ],
34
+ "fixes": [
35
+ "add scope import to prompt-submit — gate pass",
36
+ "add writeFileSync import to config.ts",
37
+ "persist cloud endpoint migration to config.json — stop logging on every boot",
38
+ "include memory_type in pushToPostgres metadata — was stripped on sync",
39
+ "add scope import to daemon-orchestration — satisfies customer-readiness gate",
40
+ "skill-refinement.ts — correct writeMemory field names + updateIdentity 3rd arg",
41
+ "make skill lifecycle fields optional on Behavior interface — unblocks publish",
42
+ "session isolation for tmux kill — block cross-scope session kills",
43
+ "session-scope daemon, push, capacity, and cleanup (P0 #7-#13)",
44
+ "add memory_type to crdt-sync MemoryRecord interface — unblocks publish",
45
+ "session-scope daemon, push, capacity, cleanup (P0 #7-#9, #13)",
46
+ "include memory_type in cloud sync push/pull + fix backfill re-sync",
47
+ "session-scope signal file system — prevent cross-session task/review bleed",
48
+ "session-scope notification routing — use row.session_scope over ambient",
49
+ "daemon NEVER guesses session from tmux — header-only routing",
50
+ "3 daemon bugs — context-full TTL override, API watchdog kill-after-3, idle-kill verify",
51
+ "federated recall always searches code_context + graph — count threshold was useless",
52
+ "make cross-repo guardrail task-aware — allow multi-repo work when task scope permits",
53
+ "ONE postgres — replace crm-postgres with exe-db across entire stack",
54
+ "smart session-scoping gate + last boot cleanup leak + triage_bug docs",
55
+ "add shipped_version to support triage + clean platform procedures",
56
+ "close remaining session-scoping findings from Bob's audit",
57
+ "close 3 more session-scoping leaks from Bob's audit (LEAK-4, LEAK-7, LEAK-8)",
58
+ "diagnostics check_update ENOENT + healthcheck timeout",
59
+ "close 8 session-scoping leaks — daemon ALS trust + review cleanup + close-task + inbox"
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
+ "rename memory schema → graph across codebase",
77
+ "unified access control — admin token + GoTrue across all services",
78
+ "capture data pipeline spec — raw → filter → wiki + CRM projection",
79
+ "bump to v0.9.149 — task lifecycle simplification + review notification fix",
80
+ "capture gateway connection observability requirements (2026-05-28)",
81
+ "bump to v0.9.146 for publish",
82
+ "Windows support architecture — WezTerm + WSL decision (2026-05-27)",
83
+ "Merge branch 'tom4-work' — device-scoped behaviors + push-notification fix",
84
+ "bump to v0.9.145 for publish",
85
+ "revert: keep workflow files unchanged — GitHub OAuth blocks workflow scope",
86
+ "stage remaining Yoshi fixes — features + bug cleanup",
87
+ "add tests for daemon restart orchestrator module",
88
+ "publish v0.9.144 — ESM require() fix + reliable task signals + OAuth 2.1",
89
+ "add MCP tool tests for message, cloud-sync, and file-copy",
90
+ "add coverage for send_message, cloud_sync, file_copy MCP tools (Track A)",
91
+ "Recover MCP sessions after daemon restart",
92
+ "publish v0.9.143 — all fixes live",
93
+ "publish v0.9.142",
94
+ "publish v0.9.141",
95
+ "ops: journalctl rotation + certbot expiry alerting",
96
+ "revert: daemon heap back to 33% of RAM — no artificial cap",
97
+ "v0.9.140 publish + heap cap 4GB (was 33% unbounded)",
98
+ "PG-1 cross-repo entity federation design document",
99
+ "add lint step + automated npm publish workflow",
100
+ "audit: scoped SQL + package budget + TUI vendored + TODO classification"
101
+ ],
102
+ "migration_notes": [
103
+ "If daemon goes down, agents will now fail instead of silently",
104
+ "exe-daemon.ts kills old embed.pid process and cleans up"
105
+ ]
106
+ },
4
107
  "0.9.155": {
5
108
  "version": "0.9.155",
6
109
  "date": "2026-05-28",
@@ -412,109 +515,6 @@
412
515
  "If daemon goes down, agents will now fail instead of silently",
413
516
  "exe-daemon.ts kills old embed.pid process and cleans up"
414
517
  ]
415
- },
416
- "0.9.144": {
417
- "version": "0.9.144",
418
- "date": "2026-05-26",
419
- "features": [
420
- "close_task auto-merges PR + pulls main + builds + prunes + respawns",
421
- "auto-respawn Tom after close_task if more tasks queued",
422
- "message WAL fallback — messages survive daemon downtime",
423
- "entity type hierarchy — subtypes with rollup queries (PG-2)",
424
- "temporal validity windows for graph queries (PG-3)",
425
- "backup restore CLI + restoreBackup function",
426
- "ESLint setup + dependency hygiene + any type reduction",
427
- "config(action=\"hire\") MCP tool — COO can hire employees directly",
428
- "GM (General Manager) role template + hiring guidance",
429
- "merge gate warning in close_task — catches unmerged PRs",
430
- "behavior hygiene — platform procedure + COO identity + company procedure",
431
- "MCP auto-reconnect to daemon — survives deploy restarts transparently",
432
- "event-driven notifications — stop polling managers, let task state drive everything",
433
- "MCP disconnect tracker + daemon observability",
434
- "MCP lifecycle logging to file — FULL transparency on every disconnect",
435
- "automatic P0 bug fixing — daemon auto-dispatch + GitHub Actions fallback",
436
- "enforce worktrees for engineer sessions — prevent direct main commits",
437
- "multi-device coordination — routing, handoff, device status",
438
- "hook tamper protection — SHA-256 manifest + verification before spawn",
439
- "governed collaborative memory — visibility tags + write governance",
440
- "cache-sharing protocol — pub/sub memory bus for inter-agent sharing",
441
- "multi-modal memory — media attachments on memories",
442
- "comprehensive \"last 20%\" integration tests + audit_trail read path",
443
- "wire memory poisoning defense into writeMemory() pipeline",
444
- "memory poisoning defense — trust levels, anomaly detection, quarantine"
445
- ],
446
- "fixes": [
447
- "remove unused test imports blocking publish",
448
- "resolve all typecheck errors — await-in-sync + type mismatches",
449
- "remaining require() → ESM imports in daemon (db-backup, intercom, shutdown)",
450
- "eliminate CJS require() from ESM daemon + reliable task signal delivery",
451
- "migrate critical writeFileSync to atomicWrite — prevent corruption on crash (Track C)",
452
- "security hardening — SQL injection lint + TUI input sanitize + MCP rate limiter (Track D)",
453
- "clear public launch readiness blockers",
454
- "prune old worktree on close_task before respawning fresh",
455
- "exe-launch-agent resolves multi-instance names — tom2/tom3 no longer rejected",
456
- "worktree isolation for all runtimes + token budget enforcement + atomic memory versioning",
457
- "cross-device sync dedup — cooldown key prevents duplicate pushes",
458
- "merge gate checks branch name not git author — was silently passing",
459
- "resume_employee uses autoInstance — spawns tom2/tom3 for parallel",
460
- "security hardening — fail-closed behavior auth gates",
461
- "send_message intercom uses force:true — bypass 5-min debounce",
462
- "global session cap 10→50 — match MCP session cap",
463
- "/exe-call ALWAYS fires + tmux send-keys blocked for ALL agents",
464
- "SIGTERM graceful shutdown — remove process.exit(0) from initMetrics",
465
- "stale task escalation — surface alive-but-stalled agents to COO",
466
- "cloud sync upsert + entity type hierarchy + temporal validity + file_copy security",
467
- "daemon memory leak + duplicate watchdog + HTTP body limit + WAL flush",
468
- "heap pressure alarm was false positive — compared heapUsed/heapTotal instead of heapUsed/heapLimit",
469
- "strengthen scoped SQL audit — cover UPDATE/INSERT, expand exemptions",
470
- "hard block tmux send-keys for non-coordinator agents",
471
- "MCP disconnect procedure — explicitly block tmux send-keys workaround"
472
- ],
473
- "security": [
474
- "fix shell injection, SSRF, socket leaks, backup validation",
475
- "bump v0.9.139 — 2 CRITICAL security fixes, 14 bug fixes, 6 features, customer config preservation",
476
- "fix 2 CRITICAL + 1 HIGH from post-fix audit",
477
- "validate X-Agent-Role against roster — prevent privilege escalation",
478
- "release: stack v0.9.8 — security hardening + Hygo bug fixes",
479
- "add webhook HMAC-SHA256 validation + disable query param auth in prod",
480
- "pin GitHub Actions to SHAs, update jose to 6.2.3",
481
- "harden support intake against abuse and data leakage",
482
- "bump to v0.9.22 — Codex MCP parity + customer bug fixes + security audit remediation",
483
- "audit: pre-hygo exe-gateway security report",
484
- "add SECURITY.md — trust document for pre-install security evaluation",
485
- "fix 4 pricing tier bypass vulnerabilities (audit F1-F4)"
486
- ],
487
- "other": [
488
- "publish v0.9.144 — ESM require() fix + reliable task signals + OAuth 2.1",
489
- "add coverage for send_message, cloud_sync, file_copy MCP tools (Track A)",
490
- "Recover MCP sessions after daemon restart",
491
- "publish v0.9.143 — all fixes live",
492
- "publish v0.9.142",
493
- "publish v0.9.141",
494
- "ops: journalctl rotation + certbot expiry alerting",
495
- "revert: daemon heap back to 33% of RAM — no artificial cap",
496
- "v0.9.140 publish + heap cap 4GB (was 33% unbounded)",
497
- "PG-1 cross-repo entity federation design document",
498
- "add lint step + automated npm publish workflow",
499
- "audit: scoped SQL + package budget + TUI vendored + TODO classification",
500
- "add full readiness audit evidence",
501
- "roadmap: Cross-Repo Ontology — Palantir-level graph (PG-1 through PG-10)",
502
- "capture mcp restart self-healing roadmap",
503
- "Enforce chain of command task review parity",
504
- "document raw SQL fallback in orchestrator auto-approve path",
505
- "Finalize orchestration rollout fixes",
506
- "Scope device governance task queries",
507
- "bump v0.9.138 — 7 critical bug fixes, 10 features, 16 commits",
508
- "bump v0.9.137 — Memanto typed schema, push notifications, lazy consolidation",
509
- "bump v0.9.136 — daemon OOM fix, process monitor, auto-notify reviewer",
510
- "bump v0.9.135 — code debt cleanup, 28 new tests, full observability",
511
- "Codex MCP regression tests (18) + DB singleton integration tests (10)",
512
- "release notes for v0.9.134"
513
- ],
514
- "migration_notes": [
515
- "If daemon goes down, agents will now fail instead of silently",
516
- "exe-daemon.ts kills old embed.pid process and cleans up"
517
- ]
518
518
  }
519
519
  }
520
520
  }