@askexenow/exe-os 0.9.296 → 0.9.298

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 (256) hide show
  1. package/deploy/compose/.env.customer.example +6 -1
  2. package/deploy/compose/.env.example +6 -1
  3. package/deploy/compose/docker-compose.yml +24 -5
  4. package/deploy/compose/generate-env.ts +20 -2
  5. package/deploy/compose/setup.sh +10 -1
  6. package/deploy/stack-manifests/v0.9.json +1 -1
  7. package/dist/active-agent-3JXJQ2GZ.js +27 -0
  8. package/dist/active-agent-XK54VI3S.js +28 -0
  9. package/dist/agentic-ontology-BPJOT2H2.js +25 -0
  10. package/dist/backfill-metadata-OTLLYTX4.js +600 -0
  11. package/dist/behaviors-BGEUHF7D.js +46 -0
  12. package/dist/bin/agentic-ontology-backfill.js +5 -5
  13. package/dist/bin/agentic-reflection-backfill.js +6 -6
  14. package/dist/bin/agentic-semantic-label.js +5 -5
  15. package/dist/bin/backfill-conversations.js +4 -4
  16. package/dist/bin/backfill-responses.js +4 -4
  17. package/dist/bin/backfill-vectors.js +5 -5
  18. package/dist/bin/bulk-sync-postgres.js +7 -7
  19. package/dist/bin/cc-doctor.js +5 -4
  20. package/dist/bin/cleanup-stale-review-tasks.js +9 -9
  21. package/dist/bin/cli.js +15 -15
  22. package/dist/bin/exe-agent-config.js +2 -2
  23. package/dist/bin/exe-agent.js +13 -13
  24. package/dist/bin/exe-assign.js +5 -5
  25. package/dist/bin/exe-boot.js +32 -17
  26. package/dist/bin/exe-call.js +4 -4
  27. package/dist/bin/exe-cloud.js +7 -7
  28. package/dist/bin/exe-dispatch.js +9 -9
  29. package/dist/bin/exe-doctor.js +2 -2
  30. package/dist/bin/exe-export-behaviors.js +7 -7
  31. package/dist/bin/exe-forget.js +6 -6
  32. package/dist/bin/exe-gateway.js +7 -7
  33. package/dist/bin/exe-healthcheck.js +5 -4
  34. package/dist/bin/exe-heartbeat.js +9 -9
  35. package/dist/bin/exe-kill.js +12 -12
  36. package/dist/bin/exe-launch-agent.js +25 -16
  37. package/dist/bin/exe-new-employee.js +6 -6
  38. package/dist/bin/exe-pending-messages.js +10 -10
  39. package/dist/bin/exe-pending-notifications.js +9 -9
  40. package/dist/bin/exe-pending-reviews.js +9 -9
  41. package/dist/bin/exe-rename.js +4 -4
  42. package/dist/bin/exe-review.js +11 -11
  43. package/dist/bin/exe-search.js +5 -5
  44. package/dist/bin/exe-session-cleanup.js +14 -14
  45. package/dist/bin/exe-settings.js +8 -8
  46. package/dist/bin/exe-start-codex.js +11 -11
  47. package/dist/bin/exe-start-opencode.js +8 -8
  48. package/dist/bin/exe-status.js +10 -10
  49. package/dist/bin/exe-team.js +3 -3
  50. package/dist/bin/git-sweep.js +10 -10
  51. package/dist/bin/graph-backfill.js +4 -4
  52. package/dist/bin/graph-export.js +5 -5
  53. package/dist/bin/import-history.js +7 -7
  54. package/dist/bin/install-launchd.js +10 -124
  55. package/dist/bin/install.js +21 -12
  56. package/dist/bin/intercom-check.js +4 -4
  57. package/dist/bin/mcp-sessions.js +2 -2
  58. package/dist/bin/orchestration-metrics.js +4 -4
  59. package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
  60. package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
  61. package/dist/bin/scan-tasks.js +9 -9
  62. package/dist/bin/setup.js +1 -1
  63. package/dist/bin/shard-migrate.js +4 -4
  64. package/dist/bin/stack-update.js +27 -3
  65. package/dist/capability-cards-KR7BOS2H.js +89 -0
  66. package/dist/capacity-monitor-CQFYTU45.js +51 -0
  67. package/dist/catchup-brief-HNT2CYJQ.js +175 -0
  68. package/dist/cc-binary-detect-4B25R3TO.js +15 -0
  69. package/dist/chunk-2DQIQXHX.js +204 -0
  70. package/dist/chunk-2DWYR2LJ.js +395 -0
  71. package/dist/chunk-2MSLUPJA.js +70 -0
  72. package/dist/chunk-2P5KBHJH.js +362 -0
  73. package/dist/chunk-2QGG6GG3.js +4388 -0
  74. package/dist/chunk-2XR6OX3M.js +181 -0
  75. package/dist/chunk-3REXR56D.js +98 -0
  76. package/dist/chunk-4FEZF2HJ.js +184 -0
  77. package/dist/chunk-54PQ35JV.js +244 -0
  78. package/dist/chunk-5ALR7GCX.js +33 -0
  79. package/dist/chunk-5GJ5MHC3.js +1094 -0
  80. package/dist/chunk-5IIJUSVD.js +240 -0
  81. package/dist/chunk-5XM7CTLK.js +199 -0
  82. package/dist/chunk-6GQMQJE2.js +331 -0
  83. package/dist/chunk-7C4K7HSF.js +262 -0
  84. package/dist/chunk-AAFTYJ5R.js +185 -0
  85. package/dist/chunk-ANIZN35L.js +284 -0
  86. package/dist/chunk-AOXVDJ7W.js +150 -0
  87. package/dist/chunk-AR3HN5SA.js +76 -0
  88. package/dist/chunk-BFFM7FF4.js +214 -0
  89. package/dist/chunk-CVJYNRYF.js +50 -0
  90. package/dist/chunk-CXEY5CE2.js +81 -0
  91. package/dist/chunk-CY4IRJ2I.js +381 -0
  92. package/dist/chunk-DBNTPP7Q.js +1079 -0
  93. package/dist/chunk-DTLYO26W.js +402 -0
  94. package/dist/chunk-EESPF5VS.js +1350 -0
  95. package/dist/chunk-EN4D3BCA.js +2135 -0
  96. package/dist/chunk-EYDBWKYI.js +304 -0
  97. package/dist/chunk-FCSS3YHS.js +348 -0
  98. package/dist/chunk-G4VSF4DA.js +630 -0
  99. package/dist/chunk-GEF6EHCW.js +197 -0
  100. package/dist/chunk-GXDV35ZN.js +735 -0
  101. package/dist/chunk-HJWT6TFU.js +97 -0
  102. package/dist/chunk-HQD3IPZA.js +14597 -0
  103. package/dist/chunk-I3IW6AAX.js +3342 -0
  104. package/dist/chunk-I4JYP7CK.js +535 -0
  105. package/dist/chunk-J2VWNIYC.js +167 -0
  106. package/dist/chunk-JK5OLEM6.js +227 -0
  107. package/dist/chunk-JVMP77TZ.js +1186 -0
  108. package/dist/chunk-KJ5DAVIP.js +122 -0
  109. package/dist/chunk-KPP2AYJV.js +333 -0
  110. package/dist/chunk-L2WWAOQF.js +455 -0
  111. package/dist/chunk-L3STXXCO.js +731 -0
  112. package/dist/chunk-LMX434DW.js +38 -0
  113. package/dist/chunk-LP4NNUZN.js +58 -0
  114. package/dist/chunk-MN7Q23PF.js +157 -0
  115. package/dist/chunk-O4QLYWMC.js +668 -0
  116. package/dist/chunk-OP5W524C.js +85 -0
  117. package/dist/chunk-OQ336FHE.js +836 -0
  118. package/dist/chunk-P7WAPK6X.js +54 -0
  119. package/dist/chunk-PLM4JJHE.js +128 -0
  120. package/dist/chunk-POTMDICN.js +1352 -0
  121. package/dist/chunk-POZYABJT.js +567 -0
  122. package/dist/chunk-PQG2IQNN.js +280 -0
  123. package/dist/chunk-PUGKVPCC.js +210 -0
  124. package/dist/chunk-QE6AI57N.js +1158 -0
  125. package/dist/chunk-QNCZDDVW.js +448 -0
  126. package/dist/chunk-QZIYE2QV.js +456 -0
  127. package/dist/chunk-RXOHALES.js +345 -0
  128. package/dist/chunk-SGUSCL3H.js +129 -0
  129. package/dist/chunk-SWOGQD57.js +85 -0
  130. package/dist/chunk-SZLIO4SL.js +128 -0
  131. package/dist/chunk-T2USDSC2.js +221 -0
  132. package/dist/chunk-UKE7MZVO.js +382 -0
  133. package/dist/chunk-VSRJPOZD.js +290 -0
  134. package/dist/chunk-WCQ3Y5LB.js +2162 -0
  135. package/dist/chunk-WHBT6M3P.js +30 -0
  136. package/dist/chunk-WR6ANODF.js +57 -0
  137. package/dist/chunk-X7ADWEZ7.js +171 -0
  138. package/dist/chunk-Y4QZXMCD.js +123 -0
  139. package/dist/chunk-Y4WA4CUW.js +377 -0
  140. package/dist/chunk-YUOUHUAJ.js +127 -0
  141. package/dist/chunk-YXC3OWWW.js +128 -0
  142. package/dist/co-activation-EN7HT734.js +74 -0
  143. package/dist/co-occurrence-TRPHUCSC.js +95 -0
  144. package/dist/core-memory-TVMGLIJ7.js +110 -0
  145. package/dist/crdt-sync-WOMERQIS.js +33 -0
  146. package/dist/crm-webhook-Q5Z74FDJ.js +10 -0
  147. package/dist/cto-delegation-gate-NEMNMLXB.js +280 -0
  148. package/dist/daemon-orchestration-RYDUCL24.js +143 -0
  149. package/dist/db-backup-Z3E3LHZK.js +43 -0
  150. package/dist/doc-graph-extractor-TSCKGSB5.js +133 -0
  151. package/dist/dreaming-42LRG6AO.js +34 -0
  152. package/dist/exe-drift-SJ6OTCQV.js +70 -0
  153. package/dist/exe-export-SRDDONTU.js +77 -0
  154. package/dist/exe-import-PWHXRFLN.js +80 -0
  155. package/dist/exe-key-GH6ITI5C.js +673 -0
  156. package/dist/exe-snapshot-RVLH5PJZ.js +338 -0
  157. package/dist/fast-db-init-CM4XPET2.js +7 -0
  158. package/dist/gateway/index.js +14 -14
  159. package/dist/git-staleness-7EFCUGT2.js +112 -0
  160. package/dist/git-task-sweep-6DR24G3Y.js +42 -0
  161. package/dist/global-procedures-NXLOLU7Y.js +22 -0
  162. package/dist/graph-auto-extract-5F3PLBCK.js +183 -0
  163. package/dist/hooks/bug-report-worker.js +11 -11
  164. package/dist/hooks/codex-stop-task-finalizer.js +11 -11
  165. package/dist/hooks/commit-complete.js +11 -11
  166. package/dist/hooks/error-recall.js +10 -7
  167. package/dist/hooks/exe-heartbeat-hook.js +3 -3
  168. package/dist/hooks/ingest.js +6 -6
  169. package/dist/hooks/instructions-loaded.js +4 -4
  170. package/dist/hooks/manifest.json +19 -19
  171. package/dist/hooks/notification.js +4 -4
  172. package/dist/hooks/post-compact.js +10 -10
  173. package/dist/hooks/post-tool-combined.js +5 -5
  174. package/dist/hooks/pre-compact.js +11 -11
  175. package/dist/hooks/pre-tool-use.js +14 -14
  176. package/dist/hooks/prompt-submit.js +26 -22
  177. package/dist/hooks/session-end.js +15 -15
  178. package/dist/hooks/session-start.js +12 -12
  179. package/dist/hooks/stop.js +14 -14
  180. package/dist/hooks/subagent-stop.js +10 -10
  181. package/dist/hooks/summary-worker.js +14 -14
  182. package/dist/index.js +19 -19
  183. package/dist/installer-5WBAZKSI.js +344 -0
  184. package/dist/installer-ENK2QYTC.js +298 -0
  185. package/dist/installer-TUO7KCRN.js +40 -0
  186. package/dist/lib/cloud-sync.js +7 -7
  187. package/dist/lib/consolidation.js +5 -5
  188. package/dist/lib/database.js +4 -2
  189. package/dist/lib/db-read-worker-client.js +121 -0
  190. package/dist/lib/db-read-worker.js +73 -0
  191. package/dist/lib/db.js +4 -2
  192. package/dist/lib/employee-templates.js +4 -4
  193. package/dist/lib/employees.js +2 -2
  194. package/dist/lib/exe-daemon.js +110 -87
  195. package/dist/lib/hybrid-search.js +5 -5
  196. package/dist/lib/identity.js +2 -2
  197. package/dist/lib/messaging.js +9 -9
  198. package/dist/lib/reminders.js +3 -3
  199. package/dist/lib/schedules.js +5 -5
  200. package/dist/lib/session-registry.js +4 -4
  201. package/dist/lib/skill-learning.js +6 -6
  202. package/dist/lib/store.js +4 -4
  203. package/dist/lib/task-router.js +3 -3
  204. package/dist/lib/tasks.js +10 -10
  205. package/dist/lib/tmux-routing.js +8 -8
  206. package/dist/lib/token-spend.js +3 -3
  207. package/dist/mcp/register-tools.js +56 -55
  208. package/dist/mcp/server.js +58 -57
  209. package/dist/mcp/tools/complete-reminder.js +4 -4
  210. package/dist/mcp/tools/create-reminder.js +4 -4
  211. package/dist/mcp/tools/create-task.js +12 -12
  212. package/dist/mcp/tools/deactivate-behavior.js +7 -7
  213. package/dist/mcp/tools/list-reminders.js +4 -4
  214. package/dist/mcp/tools/list-tasks.js +12 -12
  215. package/dist/mcp/tools/send-message.js +11 -11
  216. package/dist/mcp/tools/update-task.js +11 -11
  217. package/dist/mcp-http-config-FA6LWCTD.js +31 -0
  218. package/dist/memory-cards-4QRWCJ54.js +180 -0
  219. package/dist/memory-graph-extractor-HCS4XTQK.js +22 -0
  220. package/dist/memory-poisoning-defense-7I4LY4VL.js +224 -0
  221. package/dist/memory-reflection-ZSSO6RFR.js +244 -0
  222. package/dist/notifications-VQJCTOMC.js +47 -0
  223. package/dist/orchestration-events-UFRQWTRS.js +27 -0
  224. package/dist/orchestrator-ZSSTRMDC.js +35 -0
  225. package/dist/pipeline-router-U7WWUVKV.js +15 -0
  226. package/dist/plan-limits-KVFTHSQU.js +28 -0
  227. package/dist/project-boot-KOGUVIQ4.js +299 -0
  228. package/dist/projection-worker-OMUSXRHO.js +1084 -0
  229. package/dist/prospective-memory-PC72YWLY.js +232 -0
  230. package/dist/reranker-E3MOR2MC.js +19 -0
  231. package/dist/retrieval-health-OEHPZH65.js +12 -0
  232. package/dist/review-polling-4GWZSSSQ.js +126 -0
  233. package/dist/runtime/index.js +11 -11
  234. package/dist/session-events-A3L5KUHB.js +38 -0
  235. package/dist/session-kill-telemetry-UFJY57N2.js +31 -0
  236. package/dist/session-scope-5MT6U7CR.js +88 -0
  237. package/dist/setup-wizard-NZE2I7M5.js +12 -0
  238. package/dist/skill-refinement-Q6USTB35.js +159 -0
  239. package/dist/steward-gate-XOYAMKNY.js +15 -0
  240. package/dist/task-enforcement-MQ4TKLAN.js +506 -0
  241. package/dist/task-scope-AWFGZWPM.js +37 -0
  242. package/dist/tasks-crud-LMPAYXKS.js +79 -0
  243. package/dist/tasks-notify-6DZOY3MH.js +40 -0
  244. package/dist/tasks-review-TMBMXNUJ.js +49 -0
  245. package/dist/telemetry-upload-C2PKRA26.js +741 -0
  246. package/dist/token-budget-HOOQPFKR.js +86 -0
  247. package/dist/tool-telemetry-EJVBIKOS.js +17 -0
  248. package/dist/tui/App.js +16 -16
  249. package/dist/tui-data-6HIDQFN7.js +260 -0
  250. package/dist/wiki-acl-DOBVII5N.js +111 -0
  251. package/dist/worker-gate-ZH5PK25Z.js +21 -0
  252. package/dist/workflow-engine-SGU6WUWF.js +28 -0
  253. package/dist/worktree-NRQVJ2M4.js +28 -0
  254. package/dist/worktree-sweep-FBEHEPZO.js +21 -0
  255. package/package.json +1 -1
  256. package/release-notes.json +88 -88
@@ -45,10 +45,10 @@ async function collectSessions() {
45
45
  const registryMap = new Map(registry.map((r) => [r.windowName, r]));
46
46
  const taskMap = /* @__PURE__ */ new Map();
47
47
  try {
48
- const { fastDbInit } = await import("../fast-db-init-F3TDD5VV.js");
48
+ const { fastDbInit } = await import("../fast-db-init-CM4XPET2.js");
49
49
  await fastDbInit();
50
50
  const { getClient } = await import("../lib/database.js");
51
- const { sessionScopeFilter } = await import("../task-scope-CVK6ISCZ.js");
51
+ const { sessionScopeFilter } = await import("../task-scope-AWFGZWPM.js");
52
52
  const client = getClient();
53
53
  const scope = sessionScopeFilter();
54
54
  const result = await client.execute({
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  fastDbInit
4
- } from "../chunk-KA26YTNU.js";
4
+ } from "../chunk-CXEY5CE2.js";
5
5
  import {
6
6
  formatOrchestrationMetrics,
7
7
  getOrchestrationMetrics
8
- } from "../chunk-NLZHVIOP.js";
9
- import "../chunk-WUKHLCBE.js";
8
+ } from "../chunk-G4VSF4DA.js";
9
+ import "../chunk-I3IW6AAX.js";
10
10
  import "../chunk-2I23RPSI.js";
11
- import "../chunk-2E43UXRH.js";
11
+ import "../chunk-2DWYR2LJ.js";
12
12
  import "../chunk-PNQDP3OA.js";
13
13
  import "../chunk-7HLWBYH7.js";
14
14
  import "../chunk-FXU7JOXK.js";
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  buildReflectionCheckpoint
4
- } from "../chunk-P6MUA4QU.js";
5
- import "../chunk-465PQFTH.js";
4
+ } from "../chunk-MN7Q23PF.js";
5
+ import "../chunk-7C4K7HSF.js";
6
6
  import {
7
7
  pgSslConfig
8
8
  } from "../chunk-EQSQ4HBW.js";
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  inferSemanticLabel,
4
4
  stableId
5
- } from "../chunk-465PQFTH.js";
5
+ } from "../chunk-7C4K7HSF.js";
6
6
  import {
7
7
  pgSslConfig
8
8
  } from "../chunk-EQSQ4HBW.js";
@@ -1,29 +1,29 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  queryTaskRows
4
- } from "../chunk-K5ZO532Q.js";
5
- import "../chunk-JVHHXRFY.js";
4
+ } from "../chunk-2QGG6GG3.js";
5
+ import "../chunk-PQG2IQNN.js";
6
6
  import "../chunk-4JERP7NT.js";
7
7
  import "../chunk-4FVVJ7ME.js";
8
- import "../chunk-Y3PMNUM5.js";
8
+ import "../chunk-EYDBWKYI.js";
9
9
  import "../chunk-KOO3J5PV.js";
10
10
  import "../chunk-22TVSRQQ.js";
11
11
  import "../chunk-SSTLTIF3.js";
12
- import "../chunk-NLZHVIOP.js";
12
+ import "../chunk-G4VSF4DA.js";
13
13
  import "../chunk-QRTJNSKU.js";
14
14
  import "../chunk-NGP6LSV2.js";
15
- import "../chunk-5CCXU2AW.js";
15
+ import "../chunk-SGUSCL3H.js";
16
16
  import {
17
17
  getSessionRuntime
18
18
  } from "../chunk-CVYC6DUW.js";
19
19
  import "../chunk-OPU3NYOO.js";
20
20
  import "../chunk-GJV3WDWM.js";
21
21
  import "../chunk-MP2AFCGL.js";
22
- import "../chunk-N7I2A667.js";
22
+ import "../chunk-2MSLUPJA.js";
23
23
  import "../chunk-HYZV25LY.js";
24
- import "../chunk-WUKHLCBE.js";
24
+ import "../chunk-I3IW6AAX.js";
25
25
  import "../chunk-2I23RPSI.js";
26
- import "../chunk-2E43UXRH.js";
26
+ import "../chunk-2DWYR2LJ.js";
27
27
  import "../chunk-PNQDP3OA.js";
28
28
  import "../chunk-7HLWBYH7.js";
29
29
  import "../chunk-FXU7JOXK.js";
@@ -76,7 +76,7 @@ function checkMcpHealth() {
76
76
  }
77
77
  }
78
78
  async function scanFromDb(agentId, tmuxSession, projectName) {
79
- const { fastDbInit } = await import("../fast-db-init-F3TDD5VV.js");
79
+ const { fastDbInit } = await import("../fast-db-init-CM4XPET2.js");
80
80
  try {
81
81
  await fastDbInit();
82
82
  } catch (err) {
package/dist/bin/setup.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runSetupWizard
4
- } from "../chunk-LSVFDVNY.js";
4
+ } from "../chunk-QE6AI57N.js";
5
5
  import "../chunk-Z42MXYWW.js";
6
6
  import "../chunk-R36FAN53.js";
7
7
  import "../chunk-LYH5HE24.js";
@@ -8,17 +8,17 @@ import {
8
8
  import {
9
9
  disposeStore,
10
10
  initStore
11
- } from "../chunk-VRRAE5JX.js";
11
+ } from "../chunk-OQ336FHE.js";
12
12
  import "../chunk-CHCA3ZM2.js";
13
13
  import "../chunk-OTVEIJUQ.js";
14
- import "../chunk-C2SBESBO.js";
14
+ import "../chunk-PUGKVPCC.js";
15
15
  import "../chunk-Y25OJWOQ.js";
16
16
  import "../chunk-MP2AFCGL.js";
17
17
  import {
18
18
  getClient
19
- } from "../chunk-WUKHLCBE.js";
19
+ } from "../chunk-I3IW6AAX.js";
20
20
  import "../chunk-2I23RPSI.js";
21
- import "../chunk-2E43UXRH.js";
21
+ import "../chunk-2DWYR2LJ.js";
22
22
  import "../chunk-PNQDP3OA.js";
23
23
  import "../chunk-7HLWBYH7.js";
24
24
  import "../chunk-FXU7JOXK.js";
@@ -372,6 +372,7 @@ function parseArgs(args) {
372
372
  noBootstrap: false,
373
373
  skipHardening: false,
374
374
  verifyManifestSignature: true,
375
+ requireManifestSignature: process.env.EXE_STACK_REQUIRE_SIGNATURE === "1" || process.env.EXE_STACK_REQUIRE_SIGNATURE === "true",
375
376
  cleanupVolumes: false
376
377
  };
377
378
  for (let i = 0; i < args.length; i++) {
@@ -431,6 +432,7 @@ function parseArgs(args) {
431
432
  else if (arg === "--skip-hardening") opts.skipHardening = true;
432
433
  else if (arg === "--cleanup-volumes") opts.cleanupVolumes = true;
433
434
  else if (arg === "--no-verify-manifest-signature") opts.verifyManifestSignature = false;
435
+ else if (arg === "--require-manifest-signature") opts.requireManifestSignature = true;
434
436
  else if (arg === "--dry-run") opts.dryRun = true;
435
437
  else if (arg === "--verify-images") opts.verifyImages = true;
436
438
  else if (arg === "--check") opts.check = true;
@@ -497,6 +499,9 @@ Options:
497
499
  --skip-hardening Skip post-deploy host hardening (UFW firewall + SSH config)
498
500
  --cleanup-volumes Detect and remove orphaned Docker volumes after a successful update
499
501
  --no-verify-manifest-signature Explicitly allow unsigned stack manifests (break-glass only)
502
+ --require-manifest-signature Strict: fail unless EXE_STACK_PUBLIC_KEY is configured and the
503
+ manifest signature is valid (default is opt-in: warn + proceed when
504
+ no key is configured). Also enabled via EXE_STACK_REQUIRE_SIGNATURE=1
500
505
  -y, --yes Non-interactive confirmation
501
506
  `);
502
507
  }
@@ -675,9 +680,13 @@ async function main(args = process.argv.slice(2)) {
675
680
  printHostReport(hostReport);
676
681
  if (!opts.check && !opts.dryRun) assertHostReadyForApply(hostReport);
677
682
  }
678
- if (opts.verifyManifestSignature && !opts.manifestPublicKey) {
679
- throw new Error("Stack manifest signature verification is required. Set EXE_STACK_PUBLIC_KEY/EXE_STACK_PUBLIC_KEY_FILE or pass --no-verify-manifest-signature explicitly.");
680
- }
683
+ const sigPolicy = resolveManifestSignaturePolicy({
684
+ verifyManifestSignature: opts.verifyManifestSignature,
685
+ requireManifestSignature: opts.requireManifestSignature,
686
+ hasPublicKey: !!opts.manifestPublicKey
687
+ });
688
+ if (sigPolicy.action === "throw") throw new Error(sigPolicy.message);
689
+ if (sigPolicy.action === "warn") console.warn(sigPolicy.message);
681
690
  const manifest = await loadStackManifest(
682
691
  opts.manifestRef,
683
692
  void 0,
@@ -869,6 +878,20 @@ function existsForCli(filePath) {
869
878
  return false;
870
879
  }
871
880
  }
881
+ function resolveManifestSignaturePolicy(input) {
882
+ if (!input.verifyManifestSignature) return { action: "proceed", message: "" };
883
+ if (input.hasPublicKey) return { action: "proceed", message: "" };
884
+ if (input.requireManifestSignature) {
885
+ return {
886
+ action: "throw",
887
+ message: "Stack manifest signature verification is required (strict mode: EXE_STACK_REQUIRE_SIGNATURE/--require-manifest-signature). Set EXE_STACK_PUBLIC_KEY/EXE_STACK_PUBLIC_KEY_FILE or pass --no-verify-manifest-signature explicitly."
888
+ };
889
+ }
890
+ return {
891
+ action: "warn",
892
+ message: "\u26A0\uFE0F Stack manifest signature NOT verified \u2014 no EXE_STACK_PUBLIC_KEY/EXE_STACK_PUBLIC_KEY_FILE configured. Proceeding. To enforce, configure a public key (or set EXE_STACK_REQUIRE_SIGNATURE=1 / pass --require-manifest-signature)."
893
+ };
894
+ }
872
895
  if (isMainModule(import.meta.url) && (process.argv[1] ?? "").includes("stack-update")) {
873
896
  main().catch((err) => {
874
897
  const message = err instanceof Error ? err.message : String(err);
@@ -889,5 +912,6 @@ ${border}`);
889
912
  }
890
913
  export {
891
914
  parseArgs as parseStackUpdateArgs,
915
+ resolveManifestSignaturePolicy,
892
916
  main as runStackUpdateCli
893
917
  };
@@ -0,0 +1,89 @@
1
+ import {
2
+ getIdentity,
3
+ loadEmployeesSync
4
+ } from "./chunk-I3IW6AAX.js";
5
+ import "./chunk-2I23RPSI.js";
6
+ import "./chunk-2DWYR2LJ.js";
7
+ import {
8
+ getRoleCapabilities
9
+ } from "./chunk-PNQDP3OA.js";
10
+ import "./chunk-7HLWBYH7.js";
11
+ import "./chunk-FXU7JOXK.js";
12
+ import "./chunk-R36FAN53.js";
13
+ import "./chunk-LYH5HE24.js";
14
+ import "./chunk-MLKGABMK.js";
15
+
16
+ // src/lib/capability-cards.ts
17
+ function extractActions(identityBody) {
18
+ const actions = /* @__PURE__ */ new Set();
19
+ const boldMatches = identityBody.matchAll(/\*\*(\w[\w_]*)\*\*/g);
20
+ for (const m of boldMatches) {
21
+ const name = m[1];
22
+ if (name.length > 2 && !["The", "Non", "What", "How", "Why", "You", "Every", "Your"].includes(name)) {
23
+ actions.add(name);
24
+ }
25
+ }
26
+ return [...actions].sort();
27
+ }
28
+ function getCapabilityCard(agentId) {
29
+ const identity = getIdentity(agentId);
30
+ const role = identity?.frontmatter.role ?? "unknown";
31
+ const title = identity?.frontmatter.title ?? "Unknown";
32
+ const capabilities = getRoleCapabilities(role);
33
+ if (!identity && !capabilities) return null;
34
+ const availableActions = identity ? extractActions(identity.body) : [];
35
+ return {
36
+ agentId,
37
+ role,
38
+ title,
39
+ domains: capabilities?.domains ?? [],
40
+ tools: capabilities?.tools ?? [],
41
+ canDelegate: capabilities?.canDelegate ?? false,
42
+ canReview: capabilities?.canReview ?? false,
43
+ maxComplexity: capabilities?.maxComplexity ?? "low",
44
+ availableActions
45
+ };
46
+ }
47
+ function getAllCapabilityCards() {
48
+ const employees = loadEmployeesSync();
49
+ const cards = [];
50
+ for (const emp of employees) {
51
+ const card = getCapabilityCard(emp.name);
52
+ if (card) cards.push(card);
53
+ }
54
+ return cards;
55
+ }
56
+ function findAgentForTask(taskDescription, cards) {
57
+ const allCards = cards ?? getAllCapabilityCards();
58
+ if (allCards.length === 0) return [];
59
+ const words = new Set(
60
+ taskDescription.toLowerCase().replace(/[^a-z0-9\s-]/g, "").split(/\s+/).filter((w) => w.length > 2)
61
+ );
62
+ const scored = [];
63
+ for (const card of allCards) {
64
+ let score = 0;
65
+ for (const domain of card.domains) {
66
+ const domainWords = domain.toLowerCase().split("-");
67
+ for (const dw of domainWords) {
68
+ if (words.has(dw)) score += 3;
69
+ }
70
+ }
71
+ for (const tool of card.tools) {
72
+ const toolWords = tool.toLowerCase().split(/[_-]/);
73
+ for (const tw of toolWords) {
74
+ if (words.has(tw)) score += 2;
75
+ }
76
+ }
77
+ const roleWords = card.role.toLowerCase().split("-");
78
+ for (const rw of roleWords) {
79
+ if (words.has(rw)) score += 1;
80
+ }
81
+ if (score > 0) scored.push({ card, score });
82
+ }
83
+ return scored.sort((a, b) => b.score - a.score).map((s) => s.card);
84
+ }
85
+ export {
86
+ findAgentForTask,
87
+ getAllCapabilityCards,
88
+ getCapabilityCard
89
+ };
@@ -0,0 +1,51 @@
1
+ import {
2
+ CTX_FLOOR_PERCENT,
3
+ _resetLastRelaunchCache,
4
+ _resetPendingCapacityKills,
5
+ confirmCapacityKill,
6
+ createOrRefreshResumeTask,
7
+ extractContextPercent,
8
+ isAtCapacity,
9
+ isWithinRelaunchCooldown,
10
+ pollCapacityDead
11
+ } from "./chunk-2P5KBHJH.js";
12
+ import "./chunk-Y4QZXMCD.js";
13
+ import "./chunk-2QGG6GG3.js";
14
+ import "./chunk-PQG2IQNN.js";
15
+ import "./chunk-4JERP7NT.js";
16
+ import "./chunk-4FVVJ7ME.js";
17
+ import "./chunk-EYDBWKYI.js";
18
+ import "./chunk-KOO3J5PV.js";
19
+ import "./chunk-22TVSRQQ.js";
20
+ import "./chunk-SSTLTIF3.js";
21
+ import "./chunk-G4VSF4DA.js";
22
+ import "./chunk-QRTJNSKU.js";
23
+ import "./chunk-NGP6LSV2.js";
24
+ import "./chunk-SGUSCL3H.js";
25
+ import "./chunk-CVYC6DUW.js";
26
+ import "./chunk-OPU3NYOO.js";
27
+ import "./chunk-GJV3WDWM.js";
28
+ import "./chunk-MP2AFCGL.js";
29
+ import "./chunk-2MSLUPJA.js";
30
+ import "./chunk-HYZV25LY.js";
31
+ import "./chunk-I3IW6AAX.js";
32
+ import "./chunk-2I23RPSI.js";
33
+ import "./chunk-2DWYR2LJ.js";
34
+ import "./chunk-PNQDP3OA.js";
35
+ import "./chunk-7HLWBYH7.js";
36
+ import "./chunk-FXU7JOXK.js";
37
+ import "./chunk-YTKVJJSU.js";
38
+ import "./chunk-R36FAN53.js";
39
+ import "./chunk-LYH5HE24.js";
40
+ import "./chunk-MLKGABMK.js";
41
+ export {
42
+ CTX_FLOOR_PERCENT,
43
+ _resetLastRelaunchCache,
44
+ _resetPendingCapacityKills,
45
+ confirmCapacityKill,
46
+ createOrRefreshResumeTask,
47
+ extractContextPercent,
48
+ isAtCapacity,
49
+ isWithinRelaunchCooldown,
50
+ pollCapacityDead
51
+ };
@@ -0,0 +1,175 @@
1
+ import {
2
+ lightweightSearch
3
+ } from "./chunk-POTMDICN.js";
4
+ import "./chunk-AB4PAQYK.js";
5
+ import "./chunk-OQ336FHE.js";
6
+ import "./chunk-CHCA3ZM2.js";
7
+ import "./chunk-OTVEIJUQ.js";
8
+ import "./chunk-PUGKVPCC.js";
9
+ import "./chunk-Y25OJWOQ.js";
10
+ import {
11
+ sessionScopeFilter,
12
+ strictSessionScopeFilter
13
+ } from "./chunk-2QGG6GG3.js";
14
+ import "./chunk-PQG2IQNN.js";
15
+ import "./chunk-4JERP7NT.js";
16
+ import "./chunk-4FVVJ7ME.js";
17
+ import "./chunk-EYDBWKYI.js";
18
+ import "./chunk-KOO3J5PV.js";
19
+ import "./chunk-22TVSRQQ.js";
20
+ import "./chunk-SSTLTIF3.js";
21
+ import "./chunk-G4VSF4DA.js";
22
+ import "./chunk-QRTJNSKU.js";
23
+ import "./chunk-NGP6LSV2.js";
24
+ import "./chunk-SGUSCL3H.js";
25
+ import "./chunk-CVYC6DUW.js";
26
+ import "./chunk-OPU3NYOO.js";
27
+ import "./chunk-GJV3WDWM.js";
28
+ import "./chunk-MP2AFCGL.js";
29
+ import "./chunk-2MSLUPJA.js";
30
+ import "./chunk-HYZV25LY.js";
31
+ import {
32
+ getClient
33
+ } from "./chunk-I3IW6AAX.js";
34
+ import "./chunk-2I23RPSI.js";
35
+ import "./chunk-2DWYR2LJ.js";
36
+ import "./chunk-PNQDP3OA.js";
37
+ import "./chunk-7HLWBYH7.js";
38
+ import "./chunk-FXU7JOXK.js";
39
+ import "./chunk-Z42MXYWW.js";
40
+ import "./chunk-YTKVJJSU.js";
41
+ import "./chunk-R36FAN53.js";
42
+ import "./chunk-LYH5HE24.js";
43
+ import "./chunk-MLKGABMK.js";
44
+
45
+ // src/lib/catchup-brief.ts
46
+ import { execSync } from "child_process";
47
+ var HEADER = "## Catchup Brief\nHere's what happened while you were offline:";
48
+ var DEFAULT_LOOKBACK_MS = 60 * 60 * 1e3;
49
+ var MAX_BRIEF_CHARS = 2e3;
50
+ var MAX_CHECKPOINT_CHARS = 500;
51
+ var MAX_MESSAGE_CHARS = 100;
52
+ function clipText(text, maxChars) {
53
+ if (text.length <= maxChars) return text;
54
+ if (maxChars <= 1) return "\u2026";
55
+ return `${text.slice(0, maxChars - 1).trimEnd()}\u2026`;
56
+ }
57
+ function clampSections(header, sections, maxChars) {
58
+ const bounded = [];
59
+ let remaining = Math.max(0, maxChars - header.length);
60
+ for (const section of sections) {
61
+ const separatorChars = 2;
62
+ if (remaining <= separatorChars) break;
63
+ remaining -= separatorChars;
64
+ if (section.length <= remaining) {
65
+ bounded.push(section);
66
+ remaining -= section.length;
67
+ continue;
68
+ }
69
+ const clipped = clipText(section, remaining);
70
+ if (clipped.trim().length > 0) bounded.push(clipped);
71
+ break;
72
+ }
73
+ return bounded;
74
+ }
75
+ async function buildCatchupBrief(agentId, projectName, cwd, sessionScope) {
76
+ const sections = [];
77
+ let lastTimestamp = new Date(Date.now() - DEFAULT_LOOKBACK_MS).toISOString();
78
+ try {
79
+ const checkpointMemories = await lightweightSearch(
80
+ "CONTEXT CHECKPOINT",
81
+ agentId,
82
+ { projectName, limit: 1 }
83
+ );
84
+ const checkpoint = checkpointMemories[0];
85
+ if (checkpoint?.timestamp) {
86
+ lastTimestamp = checkpoint.timestamp;
87
+ }
88
+ if (checkpoint?.raw_text) {
89
+ sections.push(
90
+ `### Last Checkpoint
91
+ ${clipText(checkpoint.raw_text, MAX_CHECKPOINT_CHARS)}`
92
+ );
93
+ }
94
+ } catch {
95
+ }
96
+ try {
97
+ const gitLog = execSync(
98
+ `git log --oneline --since=${JSON.stringify(lastTimestamp)} --format="%h %an: %s" | head -10`,
99
+ { cwd, timeout: 3e3, encoding: "utf-8" }
100
+ ).trim();
101
+ if (gitLog) {
102
+ sections.push(`### Git Activity Since You Left
103
+ \`\`\`
104
+ ${gitLog}
105
+ \`\`\``);
106
+ }
107
+ } catch {
108
+ }
109
+ try {
110
+ const client = getClient();
111
+ const taskScope = sessionScopeFilter(sessionScope);
112
+ const taskChanges = await client.execute({
113
+ sql: `SELECT title, status, priority FROM tasks
114
+ WHERE assigned_to = ? AND project_name = ?
115
+ AND updated_at > ? AND status IN ('open', 'in_progress')${taskScope.sql}
116
+ ORDER BY priority ASC, updated_at DESC LIMIT 5`,
117
+ args: [agentId, projectName, lastTimestamp, ...taskScope.args]
118
+ });
119
+ if (taskChanges.rows.length > 0) {
120
+ const taskLines = taskChanges.rows.map((row) => {
121
+ const record = row;
122
+ return `- [${String(record.priority).toUpperCase()}] ${String(record.title)} (${String(record.status)})`;
123
+ }).join("\n");
124
+ sections.push(`### Your Task Queue
125
+ ${taskLines}`);
126
+ }
127
+ } catch {
128
+ }
129
+ try {
130
+ const client = getClient();
131
+ const messageScope = strictSessionScopeFilter(sessionScope);
132
+ const messages = await client.execute({
133
+ sql: `SELECT from_agent, content, created_at FROM messages
134
+ WHERE target_agent = ? AND status = 'pending'${messageScope.sql}
135
+ ORDER BY created_at DESC LIMIT 3`,
136
+ args: [agentId, ...messageScope.args]
137
+ });
138
+ if (messages.rows.length > 0) {
139
+ const msgLines = messages.rows.map((row) => {
140
+ const record = row;
141
+ return `- From ${String(record.from_agent)}: ${clipText(String(record.content ?? ""), MAX_MESSAGE_CHARS)}`;
142
+ }).join("\n");
143
+ sections.push(`### Unread Messages
144
+ ${msgLines}`);
145
+ }
146
+ } catch {
147
+ }
148
+ try {
149
+ const { getPendingProspective, markSurfaced } = await import("./prospective-memory-PC72YWLY.js");
150
+ const due = await getPendingProspective(agentId, { projectName, limit: 5 });
151
+ if (due.length > 0) {
152
+ const now = Date.now();
153
+ const lines = due.map((item) => {
154
+ const overdue = item.dueDate != null && new Date(item.dueDate).getTime() < now;
155
+ const when = item.dueDate ? `due ${item.dueDate}${overdue ? " \u2014 OVERDUE" : ""}` : "someday";
156
+ const recur = item.recurrence !== "once" ? `, ${item.recurrence}` : "";
157
+ return `- [P${item.priority}] ${clipText(item.content, MAX_CHECKPOINT_CHARS)} (${when}${recur})`;
158
+ });
159
+ sections.push(`### Reminders Due (Prospective Memory)
160
+ ${lines.join("\n")}`);
161
+ try {
162
+ await markSurfaced(due.map((d) => d.id));
163
+ } catch {
164
+ }
165
+ }
166
+ } catch {
167
+ }
168
+ return {
169
+ header: HEADER,
170
+ sections: clampSections(HEADER, sections, MAX_BRIEF_CHARS)
171
+ };
172
+ }
173
+ export {
174
+ buildCatchupBrief
175
+ };
@@ -0,0 +1,15 @@
1
+ import {
2
+ CC_NATIVE_ONLY_CUTOFF,
3
+ CC_SAFE_PINNED_VERSION,
4
+ ccNativeBinaryWarningLine,
5
+ compareSemver,
6
+ detectCcNativeBinary
7
+ } from "./chunk-3REXR56D.js";
8
+ import "./chunk-MLKGABMK.js";
9
+ export {
10
+ CC_NATIVE_ONLY_CUTOFF,
11
+ CC_SAFE_PINNED_VERSION,
12
+ ccNativeBinaryWarningLine,
13
+ compareSemver,
14
+ detectCcNativeBinary
15
+ };