@askexenow/exe-os 0.9.244 → 0.9.246

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 (151) hide show
  1. package/deploy/compose/.env.customer.example +15 -3
  2. package/deploy/compose/.env.example +15 -3
  3. package/deploy/compose/docker-compose.yml +17 -2
  4. package/deploy/compose/generate-env.ts +31 -8
  5. package/deploy/compose/setup.sh +4 -1
  6. package/dist/{backfill-metadata-DFTIGPXP.js → backfill-metadata-YPCH2VDT.js} +1 -1
  7. package/dist/bin/agentic-ontology-backfill.js +1 -1
  8. package/dist/bin/agentic-reflection-backfill.js +1 -1
  9. package/dist/bin/agentic-semantic-label.js +1 -1
  10. package/dist/bin/backfill-conversations.js +1 -1
  11. package/dist/bin/backfill-responses.js +1 -1
  12. package/dist/bin/backfill-vectors.js +2 -2
  13. package/dist/bin/bulk-sync-postgres.js +1 -1
  14. package/dist/bin/cleanup-stale-review-tasks.js +2 -2
  15. package/dist/bin/cli.js +5 -5
  16. package/dist/bin/exe-assign.js +1 -1
  17. package/dist/bin/exe-boot.js +3 -3
  18. package/dist/bin/exe-dispatch.js +2 -2
  19. package/dist/bin/exe-doctor.js +1 -1
  20. package/dist/bin/exe-export-behaviors.js +2 -2
  21. package/dist/bin/exe-forget.js +3 -3
  22. package/dist/bin/exe-gateway.js +5 -5
  23. package/dist/bin/exe-heartbeat.js +2 -2
  24. package/dist/bin/exe-kill.js +3 -3
  25. package/dist/bin/exe-launch-agent.js +3 -3
  26. package/dist/bin/exe-pending-messages.js +3 -3
  27. package/dist/bin/exe-pending-notifications.js +2 -2
  28. package/dist/bin/exe-pending-reviews.js +2 -2
  29. package/dist/bin/exe-review.js +3 -3
  30. package/dist/bin/exe-search.js +2 -2
  31. package/dist/bin/exe-session-cleanup.js +5 -5
  32. package/dist/bin/exe-start-codex.js +1 -1
  33. package/dist/bin/exe-start-opencode.js +1 -1
  34. package/dist/bin/exe-status.js +3 -3
  35. package/dist/bin/exe-team.js +1 -1
  36. package/dist/bin/git-sweep.js +2 -2
  37. package/dist/bin/graph-backfill.js +1 -1
  38. package/dist/bin/graph-export.js +2 -2
  39. package/dist/bin/import-history.js +2 -2
  40. package/dist/bin/intercom-check.js +3 -3
  41. package/dist/bin/mcp-sessions.js +2 -2
  42. package/dist/bin/orchestration-metrics.js +1 -1
  43. package/dist/bin/pre-publish.js +5 -1
  44. package/dist/bin/scan-tasks.js +2 -2
  45. package/dist/bin/shard-migrate.js +1 -1
  46. package/dist/bin/stack-update.js +11 -3
  47. package/dist/bin/vps-health-gate.js +1 -1
  48. package/dist/{capacity-monitor-4CSBC7AP.js → capacity-monitor-MX24P5JT.js} +2 -2
  49. package/dist/{catchup-brief-LF5Z6Q6E.js → catchup-brief-Z6Z32E6A.js} +3 -3
  50. package/dist/{chunk-KEZXW3RP.js → chunk-4LJIFVLX.js} +1 -1
  51. package/dist/{chunk-F7JLZXHC.js → chunk-66AQSKG7.js} +14 -4
  52. package/dist/{chunk-DGBGIXCC.js → chunk-6BRFIYYW.js} +1 -1
  53. package/dist/{chunk-NBY6R37W.js → chunk-A7UWQXYD.js} +4 -4
  54. package/dist/{chunk-HOGTZLVU.js → chunk-AJAEUU76.js} +2 -2
  55. package/dist/{chunk-LAOB5BKV.js → chunk-AYPCH26U.js} +1 -1
  56. package/dist/{chunk-NEYQAEYU.js → chunk-CC4RTOVL.js} +2 -2
  57. package/dist/{chunk-GHT4REOS.js → chunk-EK3VNK35.js} +1 -1
  58. package/dist/{chunk-6JAGJN77.js → chunk-FHQSMTU4.js} +1 -1
  59. package/dist/{chunk-V2GZMY6O.js → chunk-GO2O5J42.js} +1 -1
  60. package/dist/{chunk-KLQI7QY4.js → chunk-HBIO3RKF.js} +2 -2
  61. package/dist/{chunk-DR5BGWFR.js → chunk-IPWA6HOZ.js} +1 -1
  62. package/dist/{chunk-TD5CADZ5.js → chunk-JFVITKXI.js} +1 -1
  63. package/dist/{chunk-VQAP35DA.js → chunk-JHR3MR3S.js} +3 -3
  64. package/dist/{chunk-YRVW57UW.js → chunk-JO6EILLF.js} +45 -31
  65. package/dist/{chunk-LSFHEMVI.js → chunk-K423J5RE.js} +3 -3
  66. package/dist/{chunk-BYCNUKII.js → chunk-KOCQAMAM.js} +2 -2
  67. package/dist/{chunk-CPXGLSIL.js → chunk-LROJFFSZ.js} +1 -1
  68. package/dist/{chunk-HANG6NLF.js → chunk-LZR2MD6I.js} +1 -1
  69. package/dist/{chunk-LQSFP2BV.js → chunk-P7GRGLNV.js} +1 -1
  70. package/dist/{chunk-PI6V23GF.js → chunk-QVJ5FNBI.js} +1 -1
  71. package/dist/{chunk-RYDHEWYY.js → chunk-QZIOX5KX.js} +2 -2
  72. package/dist/{chunk-OWQ3CCYJ.js → chunk-RCDV3PYU.js} +1 -1
  73. package/dist/{chunk-NRVV4Y5V.js → chunk-RY3RVDBK.js} +2 -2
  74. package/dist/{chunk-3V53HH5T.js → chunk-UWGJ3ZLP.js} +2 -2
  75. package/dist/{chunk-QUNKPR6Y.js → chunk-VNBYL5HB.js} +3 -3
  76. package/dist/{chunk-J7V7LPPX.js → chunk-VUTIP75I.js} +2 -2
  77. package/dist/{chunk-DLZYAYVM.js → chunk-XGJ5QYBU.js} +4 -4
  78. package/dist/{chunk-CWITU7DW.js → chunk-ZGTV62EE.js} +1 -1
  79. package/dist/{crm-webhook-WK3PYJJK.js → crm-webhook-YUFMGYQ4.js} +2 -2
  80. package/dist/{cto-delegation-gate-5JZORQIT.js → cto-delegation-gate-R7Y6DK4U.js} +1 -1
  81. package/dist/{daemon-orchestration-BJ3T5MMF.js → daemon-orchestration-FR3LV4G3.js} +4 -4
  82. package/dist/{dreaming-BOSBDRI3.js → dreaming-2KKKDADN.js} +2 -2
  83. package/dist/{exe-export-7N5PBCMK.js → exe-export-M2VOFX25.js} +1 -1
  84. package/dist/{exe-import-YOOE7S3H.js → exe-import-2SKHXCJX.js} +1 -1
  85. package/dist/{exe-snapshot-ODUCFW7G.js → exe-snapshot-YSVZSTRN.js} +3 -3
  86. package/dist/{fast-db-init-YSR7RMVZ.js → fast-db-init-ODXXUTSD.js} +1 -1
  87. package/dist/gateway/index.js +6 -6
  88. package/dist/{git-task-sweep-L3U3T5HM.js → git-task-sweep-XTWQO64K.js} +2 -2
  89. package/dist/hooks/bug-report-worker.js +4 -4
  90. package/dist/hooks/codex-stop-task-finalizer.js +4 -4
  91. package/dist/hooks/commit-complete.js +4 -4
  92. package/dist/hooks/error-recall.js +2 -2
  93. package/dist/hooks/ingest.js +2 -2
  94. package/dist/hooks/instructions-loaded.js +1 -1
  95. package/dist/hooks/manifest.json +18 -18
  96. package/dist/hooks/notification.js +1 -1
  97. package/dist/hooks/post-compact.js +2 -2
  98. package/dist/hooks/post-tool-combined.js +2 -2
  99. package/dist/hooks/pre-compact.js +3 -3
  100. package/dist/hooks/pre-tool-use.js +6 -6
  101. package/dist/hooks/prompt-submit.js +8 -8
  102. package/dist/hooks/session-end.js +5 -5
  103. package/dist/hooks/session-start.js +5 -5
  104. package/dist/hooks/stop.js +5 -5
  105. package/dist/hooks/subagent-stop.js +2 -2
  106. package/dist/hooks/summary-worker.js +5 -5
  107. package/dist/index.js +9 -9
  108. package/dist/lib/consolidation.js +2 -2
  109. package/dist/lib/exe-daemon.js +196 -103
  110. package/dist/lib/hybrid-search.js +2 -2
  111. package/dist/lib/messaging.js +2 -2
  112. package/dist/lib/schedules.js +2 -2
  113. package/dist/lib/store.js +1 -1
  114. package/dist/lib/tasks.js +3 -3
  115. package/dist/lib/tmux-routing.js +1 -1
  116. package/dist/mcp/register-tools.js +24 -24
  117. package/dist/mcp/server.js +25 -25
  118. package/dist/mcp/tools/create-task.js +4 -4
  119. package/dist/mcp/tools/list-tasks.js +4 -4
  120. package/dist/mcp/tools/send-message.js +3 -3
  121. package/dist/mcp/tools/update-task.js +4 -4
  122. package/dist/{notifications-P3XQZDTH.js → notifications-Q7ZBG2CR.js} +1 -1
  123. package/dist/{orchestrator-VIXTY4E4.js → orchestrator-PZ322OZT.js} +2 -2
  124. package/dist/{pipeline-router-S5PE5U6B.js → pipeline-router-TUMTOJUC.js} +1 -1
  125. package/dist/{reranker-UCPLQZE2.js → reranker-VEXZ2QP4.js} +1 -1
  126. package/dist/{review-polling-P2MWEXLR.js → review-polling-PHS23C5B.js} +2 -2
  127. package/dist/runtime/index.js +3 -3
  128. package/dist/{session-events-5CD66R6U.js → session-events-XVWTYBYG.js} +2 -2
  129. package/dist/{session-scope-VMIPAZU7.js → session-scope-PUMBI74U.js} +1 -1
  130. package/dist/{stack-update-7F2E2MBJ.js → stack-update-F4CQWMGV.js} +1 -1
  131. package/dist/{task-enforcement-XQL77PZH.js → task-enforcement-WAMGSZ4S.js} +1 -1
  132. package/dist/{task-scope-R3XKBIHL.js → task-scope-AE6U7XGY.js} +1 -1
  133. package/dist/{tasks-crud-DQOG2NPG.js → tasks-crud-6GYPBGJP.js} +1 -1
  134. package/dist/{tasks-notify-4EQYG52H.js → tasks-notify-PMDNAHGC.js} +2 -2
  135. package/dist/{tasks-review-XPFJ4DSJ.js → tasks-review-KRZ3UF5X.js} +1 -1
  136. package/dist/{telemetry-upload-OT5B5HUY.js → telemetry-upload-NJ33742S.js} +1 -1
  137. package/dist/tui/App.js +7 -7
  138. package/dist/{tui-data-UEV2QOR3.js → tui-data-WTWJLP57.js} +1 -1
  139. package/dist/{worker-gate-PRCKA23W.js → worker-gate-MSTTXGOE.js} +1 -1
  140. package/dist/{workflow-engine-7X6LLH3M.js → workflow-engine-BRQHDTN7.js} +2 -2
  141. package/package.json +1 -1
  142. package/release-notes.json +201 -33
  143. /package/dist/{chunk-222SI7QC.js → chunk-5IQBMR2V.js} +0 -0
  144. /package/dist/{chunk-NWBHL5PI.js → chunk-EVBXUKAU.js} +0 -0
  145. /package/dist/{chunk-AQBEG33D.js → chunk-HSWOCMNX.js} +0 -0
  146. /package/dist/{chunk-A4K2ZT6N.js → chunk-MG6JXDAT.js} +0 -0
  147. /package/dist/{chunk-AHXEU5XB.js → chunk-PXK2SQRS.js} +0 -0
  148. /package/dist/{chunk-B7JGEDVE.js → chunk-UED2CGZ3.js} +0 -0
  149. /package/dist/{core-memory-4KAIKQRQ.js → core-memory-TXVA3CVH.js} +0 -0
  150. /package/dist/{exe-key-GXJSTCX2.js → exe-key-LKNPA5SQ.js} +0 -0
  151. /package/dist/{skill-refinement-NRG4WWRW.js → skill-refinement-D3ZYCYS4.js} +0 -0
@@ -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
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  disposeStore,
4
4
  initStore
5
- } from "./chunk-222SI7QC.js";
5
+ } from "./chunk-5IQBMR2V.js";
6
6
  import "./chunk-CHCA3ZM2.js";
7
7
  import "./chunk-IZVKWBIP.js";
8
8
  import "./chunk-Y25OJWOQ.js";
@@ -9,7 +9,7 @@ import {
9
9
  import {
10
10
  disposeStore,
11
11
  initStore
12
- } from "../chunk-222SI7QC.js";
12
+ } from "../chunk-5IQBMR2V.js";
13
13
  import "../chunk-CHCA3ZM2.js";
14
14
  import "../chunk-IZVKWBIP.js";
15
15
  import "../chunk-Y25OJWOQ.js";
@@ -8,7 +8,7 @@ import {
8
8
  } from "../chunk-Z7VDUS6L.js";
9
9
  import {
10
10
  initStore
11
- } from "../chunk-222SI7QC.js";
11
+ } from "../chunk-5IQBMR2V.js";
12
12
  import "../chunk-CHCA3ZM2.js";
13
13
  import "../chunk-IZVKWBIP.js";
14
14
  import "../chunk-Y25OJWOQ.js";
@@ -10,7 +10,7 @@ import {
10
10
  } from "../chunk-Z7VDUS6L.js";
11
11
  import {
12
12
  initStore
13
- } from "../chunk-222SI7QC.js";
13
+ } from "../chunk-5IQBMR2V.js";
14
14
  import "../chunk-CHCA3ZM2.js";
15
15
  import "../chunk-IZVKWBIP.js";
16
16
  import "../chunk-Y25OJWOQ.js";
@@ -8,7 +8,7 @@ import {
8
8
  flushBatch,
9
9
  initStore,
10
10
  writeMemory
11
- } from "../chunk-222SI7QC.js";
11
+ } from "../chunk-5IQBMR2V.js";
12
12
  import "../chunk-CHCA3ZM2.js";
13
13
  import "../chunk-IZVKWBIP.js";
14
14
  import "../chunk-Y25OJWOQ.js";
@@ -8,7 +8,7 @@ import {
8
8
  flushBatch,
9
9
  initStore,
10
10
  writeMemory
11
- } from "../chunk-222SI7QC.js";
11
+ } from "../chunk-5IQBMR2V.js";
12
12
  import "../chunk-CHCA3ZM2.js";
13
13
  import "../chunk-IZVKWBIP.js";
14
14
  import "../chunk-Y25OJWOQ.js";
@@ -8,7 +8,7 @@ import {
8
8
  registerWorkerPid,
9
9
  releaseBackfillLock,
10
10
  tryAcquireBackfillLock
11
- } from "../chunk-LAOB5BKV.js";
11
+ } from "../chunk-AYPCH26U.js";
12
12
  import {
13
13
  connectEmbedDaemon,
14
14
  embedViaClient
@@ -17,7 +17,7 @@ import "../chunk-7IZWLMTP.js";
17
17
  import {
18
18
  initStore,
19
19
  vectorToBlob
20
- } from "../chunk-222SI7QC.js";
20
+ } from "../chunk-5IQBMR2V.js";
21
21
  import "../chunk-CHCA3ZM2.js";
22
22
  import "../chunk-IZVKWBIP.js";
23
23
  import "../chunk-Y25OJWOQ.js";
@@ -7,7 +7,7 @@ import "../chunk-HOKOOBDL.js";
7
7
  import {
8
8
  disposeStore,
9
9
  initStore
10
- } from "../chunk-222SI7QC.js";
10
+ } from "../chunk-5IQBMR2V.js";
11
11
  import "../chunk-CHCA3ZM2.js";
12
12
  import "../chunk-IZVKWBIP.js";
13
13
  import "../chunk-Y25OJWOQ.js";
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  fastDbInit
4
- } from "../chunk-AQBEG33D.js";
4
+ } from "../chunk-HSWOCMNX.js";
5
5
  import {
6
6
  sessionScopeFilter
7
- } from "../chunk-F7JLZXHC.js";
7
+ } from "../chunk-66AQSKG7.js";
8
8
  import "../chunk-ZKFPHJIJ.js";
9
9
  import "../chunk-5CHYEKMH.js";
10
10
  import "../chunk-4JERP7NT.js";
package/dist/bin/cli.js CHANGED
@@ -152,7 +152,7 @@ if (args.includes("--global")) {
152
152
  process.exit(1);
153
153
  }
154
154
  } else if (args[0] === "key") {
155
- const { main: runKey } = await import("../exe-key-GXJSTCX2.js");
155
+ const { main: runKey } = await import("../exe-key-LKNPA5SQ.js");
156
156
  await runKey(args.slice(1));
157
157
  } else if (args[0] === "link") {
158
158
  console.error("`exe-os link` has been removed from the customer command surface.");
@@ -195,7 +195,7 @@ if (args.includes("--global")) {
195
195
  process.exit(1);
196
196
  }
197
197
  } else if (args[0] === "backfill-metadata") {
198
- const { backfillMetadata } = await import("../backfill-metadata-DFTIGPXP.js");
198
+ const { backfillMetadata } = await import("../backfill-metadata-YPCH2VDT.js");
199
199
  let batchSize = 50;
200
200
  let limit = 0;
201
201
  let dryRun = false;
@@ -226,10 +226,10 @@ if (args.includes("--global")) {
226
226
  process.exit(1);
227
227
  }
228
228
  } else if (args[0] === "export") {
229
- const { runExeExport } = await import("../exe-export-7N5PBCMK.js");
229
+ const { runExeExport } = await import("../exe-export-M2VOFX25.js");
230
230
  await runExeExport(args.slice(1));
231
231
  } else if (args[0] === "import") {
232
- const { runExeImport } = await import("../exe-import-YOOE7S3H.js");
232
+ const { runExeImport } = await import("../exe-import-2SKHXCJX.js");
233
233
  await runExeImport(args.slice(1));
234
234
  } else if (args[0] === "import-history") {
235
235
  const { runImportHistory } = await import("./import-history.js");
@@ -383,7 +383,7 @@ Post-deploy verification \u2014 8 runtime checks after stack-update.
383
383
  `);
384
384
  process.exit(report.failed > 0 ? 1 : 0);
385
385
  } else if (args[0] === "snapshot") {
386
- const { main: runSnapshot } = await import("../exe-snapshot-ODUCFW7G.js");
386
+ const { main: runSnapshot } = await import("../exe-snapshot-YSVZSTRN.js");
387
387
  await runSnapshot(args.slice(1));
388
388
  } else if (args[0] === "boot") {
389
389
  const { projectBoot, parseBootArgs } = await import("../project-boot-4ZL2W7DN.js");
@@ -9,7 +9,7 @@ import {
9
9
  initStore,
10
10
  searchMemories,
11
11
  writeMemory
12
- } from "../chunk-222SI7QC.js";
12
+ } from "../chunk-5IQBMR2V.js";
13
13
  import "../chunk-CHCA3ZM2.js";
14
14
  import "../chunk-IZVKWBIP.js";
15
15
  import "../chunk-Y25OJWOQ.js";
@@ -10,7 +10,7 @@ import "../chunk-NVZR7T4E.js";
10
10
  import "../chunk-K77WC6HA.js";
11
11
  import {
12
12
  initStore
13
- } from "../chunk-222SI7QC.js";
13
+ } from "../chunk-5IQBMR2V.js";
14
14
  import "../chunk-CHCA3ZM2.js";
15
15
  import "../chunk-IZVKWBIP.js";
16
16
  import {
@@ -28,7 +28,7 @@ import {
28
28
  resolveExeSession,
29
29
  sessionScopeFilter,
30
30
  updateTaskStatus
31
- } from "../chunk-F7JLZXHC.js";
31
+ } from "../chunk-66AQSKG7.js";
32
32
  import "../chunk-ZKFPHJIJ.js";
33
33
  import "../chunk-5CHYEKMH.js";
34
34
  import "../chunk-4JERP7NT.js";
@@ -931,7 +931,7 @@ async function boot(options) {
931
931
  };
932
932
  if (nullCount > 0) {
933
933
  try {
934
- const { tryAcquireWorkerSlot, registerWorkerPid } = await import("../worker-gate-PRCKA23W.js");
934
+ const { tryAcquireWorkerSlot, registerWorkerPid } = await import("../worker-gate-MSTTXGOE.js");
935
935
  if (!tryAcquireWorkerSlot()) {
936
936
  process.stderr.write("[exe-boot] Backfill needed but worker gate full \u2014 skipping\n");
937
937
  } else {
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  fastDbInit
4
- } from "../chunk-AQBEG33D.js";
4
+ } from "../chunk-HSWOCMNX.js";
5
5
  import {
6
6
  createTaskCore,
7
7
  ensureEmployee,
8
8
  resolveExeSession
9
- } from "../chunk-F7JLZXHC.js";
9
+ } from "../chunk-66AQSKG7.js";
10
10
  import "../chunk-ZKFPHJIJ.js";
11
11
  import "../chunk-5CHYEKMH.js";
12
12
  import "../chunk-4JERP7NT.js";
@@ -20,7 +20,7 @@ import {
20
20
  parseFlags,
21
21
  runAudit,
22
22
  splitAtSentences
23
- } from "../chunk-NEYQAEYU.js";
23
+ } from "../chunk-CC4RTOVL.js";
24
24
  import "../chunk-L3TB7CC3.js";
25
25
  import "../chunk-6Y4B3QF6.js";
26
26
  import "../chunk-MLKGABMK.js";
@@ -5,10 +5,10 @@ import {
5
5
  import "../chunk-ONAQAL3O.js";
6
6
  import {
7
7
  fastDbInit
8
- } from "../chunk-AQBEG33D.js";
8
+ } from "../chunk-HSWOCMNX.js";
9
9
  import {
10
10
  disposeStore
11
- } from "../chunk-222SI7QC.js";
11
+ } from "../chunk-5IQBMR2V.js";
12
12
  import "../chunk-CHCA3ZM2.js";
13
13
  import "../chunk-IZVKWBIP.js";
14
14
  import "../chunk-Y25OJWOQ.js";
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  fastDbInit
4
- } from "../chunk-AQBEG33D.js";
4
+ } from "../chunk-HSWOCMNX.js";
5
5
  import {
6
6
  lightweightSearch
7
- } from "../chunk-DLZYAYVM.js";
8
- import "../chunk-222SI7QC.js";
7
+ } from "../chunk-XGJ5QYBU.js";
8
+ import "../chunk-5IQBMR2V.js";
9
9
  import "../chunk-CHCA3ZM2.js";
10
10
  import "../chunk-IZVKWBIP.js";
11
11
  import "../chunk-Y25OJWOQ.js";
@@ -2,10 +2,10 @@
2
2
  import {
3
3
  BotRegistry,
4
4
  Gateway
5
- } from "../chunk-NRVV4Y5V.js";
6
- import "../chunk-V2GZMY6O.js";
7
- import "../chunk-A4K2ZT6N.js";
8
- import "../chunk-B7JGEDVE.js";
5
+ } from "../chunk-RY3RVDBK.js";
6
+ import "../chunk-GO2O5J42.js";
7
+ import "../chunk-MG6JXDAT.js";
8
+ import "../chunk-UED2CGZ3.js";
9
9
  import "../chunk-ONKIWA3R.js";
10
10
  import "../chunk-MP2AFCGL.js";
11
11
  import {
@@ -1102,7 +1102,7 @@ async function main() {
1102
1102
  console.log("[exe-gateway] Generic webhook adapter registered");
1103
1103
  }
1104
1104
  {
1105
- const { createCRMWebhookHandler } = await import("../crm-webhook-WK3PYJJK.js");
1105
+ const { createCRMWebhookHandler } = await import("../crm-webhook-YUFMGYQ4.js");
1106
1106
  const handler = createCRMWebhookHandler();
1107
1107
  server.onPlatform("crm", handler);
1108
1108
  console.log("[exe-gateway] CRM webhook adapter registered");
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  fastDbInit
4
- } from "../chunk-AQBEG33D.js";
4
+ } from "../chunk-HSWOCMNX.js";
5
5
  import {
6
6
  isExeSession,
7
7
  listPendingReviews,
8
8
  strictSessionScopeFilter
9
- } from "../chunk-F7JLZXHC.js";
9
+ } from "../chunk-66AQSKG7.js";
10
10
  import "../chunk-ZKFPHJIJ.js";
11
11
  import "../chunk-5CHYEKMH.js";
12
12
  import "../chunk-4JERP7NT.js";
@@ -4,17 +4,17 @@ import {
4
4
  } from "../chunk-VRIMTCX2.js";
5
5
  import {
6
6
  fastDbInit
7
- } from "../chunk-AQBEG33D.js";
7
+ } from "../chunk-HSWOCMNX.js";
8
8
  import {
9
9
  disposeStore,
10
10
  flushBatch
11
- } from "../chunk-222SI7QC.js";
11
+ } from "../chunk-5IQBMR2V.js";
12
12
  import "../chunk-CHCA3ZM2.js";
13
13
  import "../chunk-IZVKWBIP.js";
14
14
  import "../chunk-Y25OJWOQ.js";
15
15
  import {
16
16
  extractRootExe
17
- } from "../chunk-F7JLZXHC.js";
17
+ } from "../chunk-66AQSKG7.js";
18
18
  import "../chunk-ZKFPHJIJ.js";
19
19
  import "../chunk-5CHYEKMH.js";
20
20
  import "../chunk-4JERP7NT.js";
@@ -10,10 +10,10 @@ import "../chunk-K77WC6HA.js";
10
10
  import "../chunk-ONAQAL3O.js";
11
11
  import {
12
12
  fastDbInit
13
- } from "../chunk-AQBEG33D.js";
13
+ } from "../chunk-HSWOCMNX.js";
14
14
  import {
15
15
  disposeStore
16
- } from "../chunk-222SI7QC.js";
16
+ } from "../chunk-5IQBMR2V.js";
17
17
  import "../chunk-CHCA3ZM2.js";
18
18
  import "../chunk-IZVKWBIP.js";
19
19
  import "../chunk-Y25OJWOQ.js";
@@ -22,7 +22,7 @@ import {
22
22
  PROVIDER_TABLE,
23
23
  _resetCcAgentSupportCache,
24
24
  claudeSupportsAgentFlag
25
- } from "../chunk-F7JLZXHC.js";
25
+ } from "../chunk-66AQSKG7.js";
26
26
  import "../chunk-ZKFPHJIJ.js";
27
27
  import "../chunk-5CHYEKMH.js";
28
28
  import "../chunk-4JERP7NT.js";
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  getPendingMessages,
3
3
  markRead
4
- } from "../chunk-DGBGIXCC.js";
4
+ } from "../chunk-6BRFIYYW.js";
5
5
  import {
6
6
  fastDbInit
7
- } from "../chunk-AQBEG33D.js";
8
- import "../chunk-F7JLZXHC.js";
7
+ } from "../chunk-HSWOCMNX.js";
8
+ import "../chunk-66AQSKG7.js";
9
9
  import "../chunk-ZKFPHJIJ.js";
10
10
  import "../chunk-5CHYEKMH.js";
11
11
  import "../chunk-4JERP7NT.js";
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  fastDbInit
4
- } from "../chunk-AQBEG33D.js";
4
+ } from "../chunk-HSWOCMNX.js";
5
5
  import {
6
6
  markAsRead,
7
7
  readUnreadNotifications,
8
8
  resolveExeSession
9
- } from "../chunk-F7JLZXHC.js";
9
+ } from "../chunk-66AQSKG7.js";
10
10
  import "../chunk-ZKFPHJIJ.js";
11
11
  import "../chunk-5CHYEKMH.js";
12
12
  import "../chunk-4JERP7NT.js";
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  fastDbInit
4
- } from "../chunk-AQBEG33D.js";
4
+ } from "../chunk-HSWOCMNX.js";
5
5
  import {
6
6
  cleanupOrphanedReviews,
7
7
  extractRootExe,
@@ -9,7 +9,7 @@ import {
9
9
  isExeSession,
10
10
  isStale,
11
11
  listPendingReviews
12
- } from "../chunk-F7JLZXHC.js";
12
+ } from "../chunk-66AQSKG7.js";
13
13
  import "../chunk-ZKFPHJIJ.js";
14
14
  import "../chunk-5CHYEKMH.js";
15
15
  import "../chunk-4JERP7NT.js";
@@ -1,18 +1,18 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  fastDbInit
4
- } from "../chunk-AQBEG33D.js";
4
+ } from "../chunk-HSWOCMNX.js";
5
5
  import {
6
6
  flushBatch,
7
7
  writeMemory
8
- } from "../chunk-222SI7QC.js";
8
+ } from "../chunk-5IQBMR2V.js";
9
9
  import "../chunk-CHCA3ZM2.js";
10
10
  import "../chunk-IZVKWBIP.js";
11
11
  import "../chunk-Y25OJWOQ.js";
12
12
  import {
13
13
  getCurrentSessionScope,
14
14
  strictSessionScopeFilter
15
- } from "../chunk-F7JLZXHC.js";
15
+ } from "../chunk-66AQSKG7.js";
16
16
  import "../chunk-ZKFPHJIJ.js";
17
17
  import "../chunk-5CHYEKMH.js";
18
18
  import "../chunk-4JERP7NT.js";
@@ -2,10 +2,10 @@
2
2
  import {
3
3
  hybridSearch,
4
4
  lightweightSearch
5
- } from "../chunk-DLZYAYVM.js";
5
+ } from "../chunk-XGJ5QYBU.js";
6
6
  import {
7
7
  initStore
8
- } from "../chunk-222SI7QC.js";
8
+ } from "../chunk-5IQBMR2V.js";
9
9
  import "../chunk-CHCA3ZM2.js";
10
10
  import "../chunk-IZVKWBIP.js";
11
11
  import "../chunk-Y25OJWOQ.js";
@@ -3,14 +3,14 @@ import {
3
3
  flushBatch,
4
4
  initStore,
5
5
  writeMemory
6
- } from "../chunk-222SI7QC.js";
6
+ } from "../chunk-5IQBMR2V.js";
7
7
  import "../chunk-CHCA3ZM2.js";
8
8
  import "../chunk-IZVKWBIP.js";
9
9
  import "../chunk-Y25OJWOQ.js";
10
10
  import {
11
11
  sessionScopeFilter,
12
12
  updateTaskStatus
13
- } from "../chunk-F7JLZXHC.js";
13
+ } from "../chunk-66AQSKG7.js";
14
14
  import "../chunk-ZKFPHJIJ.js";
15
15
  import "../chunk-5CHYEKMH.js";
16
16
  import "../chunk-4JERP7NT.js";
@@ -141,7 +141,7 @@ try {
141
141
  `
142
142
  );
143
143
  try {
144
- const { createReviewForCompletedTask } = await import("../tasks-review-XPFJ4DSJ.js");
144
+ const { createReviewForCompletedTask } = await import("../tasks-review-KRZ3UF5X.js");
145
145
  await createReviewForCompletedTask(
146
146
  {
147
147
  id: String(dt.id),
@@ -178,7 +178,7 @@ try {
178
178
  if (result.rows.length === 0) process.exit(0);
179
179
  let commits = [];
180
180
  try {
181
- const { getRecentCommits } = await import("../git-task-sweep-L3U3T5HM.js");
181
+ const { getRecentCommits } = await import("../git-task-sweep-XTWQO64K.js");
182
182
  commits = getRecentCommits(30);
183
183
  } catch {
184
184
  }
@@ -191,7 +191,7 @@ try {
191
191
  const context = row.context ? String(row.context) : void 0;
192
192
  if (commits.length > 0) {
193
193
  try {
194
- const { findBestMatch } = await import("../git-task-sweep-L3U3T5HM.js");
194
+ const { findBestMatch } = await import("../git-task-sweep-XTWQO64K.js");
195
195
  const match = findBestMatch({ id: taskId, title, context }, commits);
196
196
  if (match) {
197
197
  try {
@@ -6,7 +6,7 @@ import "../chunk-ONAQAL3O.js";
6
6
  import {
7
7
  disposeStore,
8
8
  initStore
9
- } from "../chunk-222SI7QC.js";
9
+ } from "../chunk-5IQBMR2V.js";
10
10
  import "../chunk-CHCA3ZM2.js";
11
11
  import "../chunk-IZVKWBIP.js";
12
12
  import "../chunk-Y25OJWOQ.js";
@@ -6,7 +6,7 @@ import "../chunk-ONAQAL3O.js";
6
6
  import {
7
7
  disposeStore,
8
8
  initStore
9
- } from "../chunk-222SI7QC.js";
9
+ } from "../chunk-5IQBMR2V.js";
10
10
  import "../chunk-CHCA3ZM2.js";
11
11
  import "../chunk-IZVKWBIP.js";
12
12
  import "../chunk-Y25OJWOQ.js";