@askexenow/exe-os 0.9.292 → 0.9.293

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 (404) hide show
  1. package/deploy/compose/generate-env.ts +27 -1
  2. package/dist/active-agent-OEJKODGY.js +27 -0
  3. package/dist/active-agent-PFZAEMJA.js +28 -0
  4. package/dist/active-agent-USK4RVP5.js +28 -0
  5. package/dist/active-agent-XEZTZEV7.js +27 -0
  6. package/dist/agentic-ontology-46PBPTLE.js +25 -0
  7. package/dist/agentic-ontology-WTXI6RLB.js +25 -0
  8. package/dist/assets/com.askexe.exed.plist +70 -0
  9. package/dist/backfill-metadata-IYP2QGGD.js +600 -0
  10. package/dist/backfill-metadata-S523IKKJ.js +600 -0
  11. package/dist/behaviors-GPCWN3RL.js +46 -0
  12. package/dist/behaviors-UYEYYVIH.js +46 -0
  13. package/dist/bin/agentic-ontology-backfill.js +5 -5
  14. package/dist/bin/agentic-reflection-backfill.js +6 -6
  15. package/dist/bin/agentic-semantic-label.js +5 -5
  16. package/dist/bin/backfill-conversations.js +6 -6
  17. package/dist/bin/backfill-responses.js +6 -6
  18. package/dist/bin/backfill-vectors.js +8 -8
  19. package/dist/bin/bulk-sync-postgres.js +7 -6
  20. package/dist/bin/cc-doctor.js +4 -4
  21. package/dist/bin/cleanup-stale-review-tasks.js +11 -11
  22. package/dist/bin/cli.js +16 -16
  23. package/dist/bin/deferred-daemon-restart.js +1 -1
  24. package/dist/bin/exe-agent-config.js +2 -2
  25. package/dist/bin/exe-agent.js +4 -4
  26. package/dist/bin/exe-assign.js +8 -8
  27. package/dist/bin/exe-boot.js +38 -18
  28. package/dist/bin/exe-call.js +4 -4
  29. package/dist/bin/exe-cloud.js +11 -4
  30. package/dist/bin/exe-dispatch.js +11 -11
  31. package/dist/bin/exe-doctor.js +2 -2
  32. package/dist/bin/exe-export-behaviors.js +7 -7
  33. package/dist/bin/exe-forget.js +6 -6
  34. package/dist/bin/exe-gateway.js +7 -7
  35. package/dist/bin/exe-healthcheck.js +4 -4
  36. package/dist/bin/exe-heartbeat.js +11 -11
  37. package/dist/bin/exe-kill.js +14 -14
  38. package/dist/bin/exe-launch-agent.js +36 -18
  39. package/dist/bin/exe-new-employee.js +6 -6
  40. package/dist/bin/exe-pending-messages.js +12 -12
  41. package/dist/bin/exe-pending-notifications.js +11 -11
  42. package/dist/bin/exe-pending-reviews.js +11 -11
  43. package/dist/bin/exe-rename.js +4 -4
  44. package/dist/bin/exe-review.js +13 -13
  45. package/dist/bin/exe-search.js +5 -5
  46. package/dist/bin/exe-session-cleanup.js +16 -16
  47. package/dist/bin/exe-settings.js +12 -4
  48. package/dist/bin/exe-start-codex.js +11 -11
  49. package/dist/bin/exe-start-opencode.js +8 -8
  50. package/dist/bin/exe-status.js +12 -12
  51. package/dist/bin/exe-team.js +3 -3
  52. package/dist/bin/git-sweep.js +12 -12
  53. package/dist/bin/graph-backfill.js +4 -4
  54. package/dist/bin/graph-export.js +5 -5
  55. package/dist/bin/import-history.js +7 -7
  56. package/dist/bin/install-launchd.js +46 -10
  57. package/dist/bin/install.js +8 -8
  58. package/dist/bin/intercom-check.js +4 -4
  59. package/dist/bin/mcp-sessions.js +2 -2
  60. package/dist/bin/orchestration-metrics.js +4 -4
  61. package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
  62. package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
  63. package/dist/bin/scan-tasks.js +11 -11
  64. package/dist/bin/setup.js +1 -1
  65. package/dist/bin/shard-migrate.js +4 -4
  66. package/dist/capability-cards-7XF2UW3Z.js +89 -0
  67. package/dist/capability-cards-DME6OMOK.js +89 -0
  68. package/dist/capacity-monitor-7SKMXRIK.js +51 -0
  69. package/dist/capacity-monitor-MNEA6FMY.js +51 -0
  70. package/dist/catchup-brief-46O3RLWO.js +175 -0
  71. package/dist/catchup-brief-EPEKZKRA.js +175 -0
  72. package/dist/chunk-2EMOVUJR.js +128 -0
  73. package/dist/chunk-2JE7LJCZ.js +240 -0
  74. package/dist/chunk-2LHQ5MGP.js +377 -0
  75. package/dist/chunk-2ZXMXFGH.js +4380 -0
  76. package/dist/chunk-3KIMGEFL.js +54 -0
  77. package/dist/chunk-3PY5PK75.js +14533 -0
  78. package/dist/chunk-3SDAK22H.js +538 -0
  79. package/dist/chunk-4CEGPB6F.js +240 -0
  80. package/dist/chunk-4HDMB2M5.js +574 -0
  81. package/dist/chunk-4KCLWBF6.js +197 -0
  82. package/dist/chunk-4WZ55DSC.js +381 -0
  83. package/dist/chunk-5QX4LHOF.js +668 -0
  84. package/dist/chunk-5RSGWGYP.js +1119 -0
  85. package/dist/chunk-5SWY4J5G.js +284 -0
  86. package/dist/chunk-5ZHIAIDE.js +424 -0
  87. package/dist/chunk-5ZKD5ZVT.js +33 -0
  88. package/dist/chunk-67X246EI.js +424 -0
  89. package/dist/chunk-6A56VNVX.js +448 -0
  90. package/dist/chunk-6EEBG6WU.js +345 -0
  91. package/dist/chunk-6EI5U2KJ.js +171 -0
  92. package/dist/chunk-6G4JWZPF.js +128 -0
  93. package/dist/chunk-6GTLJHAG.js +150 -0
  94. package/dist/chunk-6LDZPC2H.js +1079 -0
  95. package/dist/chunk-6PNCZTKV.js +1119 -0
  96. package/dist/chunk-6QPDD4BI.js +123 -0
  97. package/dist/chunk-6ZMLJ6ZQ.js +2129 -0
  98. package/dist/chunk-72O5EJ52.js +204 -0
  99. package/dist/chunk-737NSJT4.js +553 -0
  100. package/dist/chunk-7P5TUGTL.js +456 -0
  101. package/dist/chunk-7XDF7BZQ.js +192 -0
  102. package/dist/chunk-ALYNEMIH.js +150 -0
  103. package/dist/chunk-B4PYJHIV.js +402 -0
  104. package/dist/chunk-B5ZCGIYB.js +630 -0
  105. package/dist/chunk-BE3T47CS.js +97 -0
  106. package/dist/chunk-BNJ3YCPD.js +192 -0
  107. package/dist/chunk-BUBYDG7Q.js +1079 -0
  108. package/dist/chunk-CSCRGRZT.js +345 -0
  109. package/dist/chunk-CY4S3HMG.js +30 -0
  110. package/dist/chunk-D2WYUJHM.js +50 -0
  111. package/dist/chunk-D3X64YSB.js +377 -0
  112. package/dist/chunk-D6TPR4BN.js +204 -0
  113. package/dist/chunk-DDI57ILJ.js +38 -0
  114. package/dist/chunk-DQBHY3Q4.js +210 -0
  115. package/dist/chunk-DVFHAY2J.js +630 -0
  116. package/dist/chunk-DWCR5GGG.js +128 -0
  117. package/dist/chunk-DZJPVLVR.js +2078 -0
  118. package/dist/chunk-E45SQG7C.js +280 -0
  119. package/dist/chunk-EJ7CWALW.js +244 -0
  120. package/dist/chunk-EM5WXY6H.js +836 -0
  121. package/dist/chunk-EOVVOUXC.js +381 -0
  122. package/dist/chunk-EVV55PHP.js +331 -0
  123. package/dist/chunk-F4FMIWEL.js +214 -0
  124. package/dist/chunk-F5GLICUP.js +85 -0
  125. package/dist/chunk-F5WN7EQ2.js +333 -0
  126. package/dist/chunk-FVXYTNSI.js +123 -0
  127. package/dist/chunk-FXD5LXRD.js +8 -0
  128. package/dist/chunk-G53LIPLG.js +76 -0
  129. package/dist/chunk-GEJAUWIZ.js +1350 -0
  130. package/dist/chunk-GJDYAXUL.js +227 -0
  131. package/dist/chunk-GJS7CJRC.js +129 -0
  132. package/dist/chunk-GTVP4QTZ.js +362 -0
  133. package/dist/chunk-HG7Z7JHX.js +85 -0
  134. package/dist/chunk-HH3MBGMJ.js +70 -0
  135. package/dist/chunk-HJBKBEC4.js +58 -0
  136. package/dist/chunk-HKSTWZ22.js +456 -0
  137. package/dist/chunk-HMP5VT6A.js +118 -0
  138. package/dist/chunk-HN2PWLQI.js +167 -0
  139. package/dist/chunk-HN3HGFBL.js +20 -0
  140. package/dist/chunk-HREBA7BJ.js +290 -0
  141. package/dist/chunk-HV7F5CXJ.js +553 -0
  142. package/dist/chunk-HWXIMSB7.js +30 -0
  143. package/dist/chunk-HWY5ROLO.js +129 -0
  144. package/dist/chunk-IDJCLLJF.js +3298 -0
  145. package/dist/chunk-IPMGAQGC.js +290 -0
  146. package/dist/chunk-IRT55NLF.js +382 -0
  147. package/dist/chunk-IXZ7OTB3.js +159 -0
  148. package/dist/chunk-J7JVMFKR.js +262 -0
  149. package/dist/chunk-JABYHL7R.js +171 -0
  150. package/dist/chunk-JE2ICRS5.js +197 -0
  151. package/dist/chunk-JLH273CW.js +70 -0
  152. package/dist/chunk-JPTT22PI.js +54 -0
  153. package/dist/chunk-JVT6ONVZ.js +731 -0
  154. package/dist/chunk-KJEG2OQN.js +1350 -0
  155. package/dist/chunk-LSASGUNP.js +85 -0
  156. package/dist/chunk-LSTM35QE.js +1186 -0
  157. package/dist/chunk-LZEWGBU2.js +97 -0
  158. package/dist/chunk-M2IOPGVR.js +731 -0
  159. package/dist/chunk-MBININJN.js +2078 -0
  160. package/dist/chunk-MJ2MCLZH.js +402 -0
  161. package/dist/chunk-MX63V4YD.js +38 -0
  162. package/dist/chunk-N7TWCWY5.js +128 -0
  163. package/dist/chunk-NAKIQODV.js +331 -0
  164. package/dist/chunk-NMJSZ5FC.js +185 -0
  165. package/dist/chunk-NXCJWGAF.js +836 -0
  166. package/dist/chunk-OLJTE7LW.js +157 -0
  167. package/dist/chunk-OPDX7KTW.js +167 -0
  168. package/dist/chunk-OXM62MI7.js +221 -0
  169. package/dist/chunk-PC53GP5N.js +55 -0
  170. package/dist/chunk-PMMQFOER.js +81 -0
  171. package/dist/chunk-PVVG22J4.js +735 -0
  172. package/dist/chunk-Q326CKO3.js +377 -0
  173. package/dist/chunk-QAK47LG3.js +81 -0
  174. package/dist/chunk-QAWSQ5LG.js +157 -0
  175. package/dist/chunk-QLPHEY7D.js +668 -0
  176. package/dist/chunk-QV4CHWME.js +97 -0
  177. package/dist/chunk-QY46R3SB.js +348 -0
  178. package/dist/chunk-RAERYWCL.js +299 -0
  179. package/dist/chunk-RT5NXMH2.js +284 -0
  180. package/dist/chunk-RUUIZJSU.js +127 -0
  181. package/dist/chunk-S3PNZLTN.js +50 -0
  182. package/dist/chunk-S6WSWJBL.js +362 -0
  183. package/dist/chunk-STOZKLK6.js +1352 -0
  184. package/dist/chunk-SZCJI4TR.js +735 -0
  185. package/dist/chunk-T3FMPQOR.js +85 -0
  186. package/dist/chunk-T6EKR34W.js +58 -0
  187. package/dist/chunk-TKIOFYNW.js +1186 -0
  188. package/dist/chunk-TM2GZWIT.js +3313 -0
  189. package/dist/chunk-TWFTSIAI.js +4380 -0
  190. package/dist/chunk-U7BFATN7.js +538 -0
  191. package/dist/chunk-UAQZT24C.js +181 -0
  192. package/dist/chunk-UFHBNXGV.js +333 -0
  193. package/dist/chunk-UVN3LWCL.js +214 -0
  194. package/dist/chunk-UVRS32RJ.js +97 -0
  195. package/dist/chunk-V6R43RSE.js +227 -0
  196. package/dist/chunk-VHMVQUCR.js +448 -0
  197. package/dist/chunk-VK7NRMIW.js +2133 -0
  198. package/dist/chunk-VRFO3H3R.js +76 -0
  199. package/dist/chunk-VRZS4KWF.js +122 -0
  200. package/dist/chunk-WOXY76VV.js +33 -0
  201. package/dist/chunk-X6VOKECC.js +348 -0
  202. package/dist/chunk-XADXYWPE.js +280 -0
  203. package/dist/chunk-XCP56OMR.js +1352 -0
  204. package/dist/chunk-XDH5XB72.js +262 -0
  205. package/dist/chunk-XFPSFPVD.js +1094 -0
  206. package/dist/chunk-XOT6CVJA.js +244 -0
  207. package/dist/chunk-XWRIBBYP.js +210 -0
  208. package/dist/chunk-XWVCURC2.js +181 -0
  209. package/dist/chunk-YA6SJFNN.js +221 -0
  210. package/dist/chunk-YDMUHYCP.js +127 -0
  211. package/dist/chunk-YKQQ4UTG.js +382 -0
  212. package/dist/chunk-YNORJIBH.js +208 -0
  213. package/dist/chunk-YQ2R4BLZ.js +14533 -0
  214. package/dist/chunk-YUIT7Z7I.js +299 -0
  215. package/dist/chunk-ZD6EJ7LY.js +604 -0
  216. package/dist/chunk-ZHHBVPOX.js +1094 -0
  217. package/dist/chunk-ZNY54QWW.js +377 -0
  218. package/dist/chunk-ZVABYVSP.js +122 -0
  219. package/dist/chunk-ZVDYPSJH.js +94 -0
  220. package/dist/chunk-ZXNQ7GRU.js +185 -0
  221. package/dist/co-activation-ACVH2TL4.js +74 -0
  222. package/dist/co-activation-EJ63SDWZ.js +74 -0
  223. package/dist/co-occurrence-VKJWYROE.js +95 -0
  224. package/dist/co-occurrence-X2M3ASN4.js +95 -0
  225. package/dist/code-context-index-5EFZGRML.js +30 -0
  226. package/dist/core-memory-G3AEM4FY.js +110 -0
  227. package/dist/core-memory-GOI4WKP5.js +110 -0
  228. package/dist/crdt-sync-QXBHJ5GL.js +33 -0
  229. package/dist/crdt-sync-WX6YMYZS.js +33 -0
  230. package/dist/crm-webhook-EEL2F5TM.js +10 -0
  231. package/dist/crm-webhook-OYNQH4RZ.js +10 -0
  232. package/dist/cto-delegation-gate-RP4XBAZZ.js +280 -0
  233. package/dist/cto-delegation-gate-XOD3NAJS.js +280 -0
  234. package/dist/daemon-orchestration-33R5DNF2.js +139 -0
  235. package/dist/daemon-orchestration-EEPWOFMX.js +139 -0
  236. package/dist/db-backup-T4OALIZH.js +41 -0
  237. package/dist/db-backup-U5TNET7Z.js +41 -0
  238. package/dist/dispatch-ack-4S44HBWB.js +15 -0
  239. package/dist/doc-graph-extractor-O5EADZ3H.js +133 -0
  240. package/dist/doc-graph-extractor-SFMDR2SB.js +133 -0
  241. package/dist/dreaming-IXYC3FUN.js +34 -0
  242. package/dist/dreaming-ODYGZEIV.js +34 -0
  243. package/dist/entity-boost-XBGZKDJZ.js +375 -0
  244. package/dist/exe-drift-BKAGZUO2.js +70 -0
  245. package/dist/exe-drift-N7QYRQX7.js +70 -0
  246. package/dist/exe-export-AQZ3ZPSJ.js +77 -0
  247. package/dist/exe-export-QQGWWVZC.js +77 -0
  248. package/dist/exe-import-EVEGB2O4.js +80 -0
  249. package/dist/exe-import-RPL3RSZ2.js +80 -0
  250. package/dist/exe-key-5FYKRZOH.js +673 -0
  251. package/dist/exe-key-Y256JM3G.js +673 -0
  252. package/dist/exe-snapshot-AUJQ53Z7.js +338 -0
  253. package/dist/exe-snapshot-CSJDVWXM.js +338 -0
  254. package/dist/fast-db-init-57YCVJQP.js +7 -0
  255. package/dist/fast-db-init-VU4FDPGX.js +7 -0
  256. package/dist/gateway/index.js +8 -8
  257. package/dist/git-staleness-CR46BFAY.js +112 -0
  258. package/dist/git-staleness-H4NWNDJ5.js +112 -0
  259. package/dist/git-task-sweep-F7ASO7CZ.js +42 -0
  260. package/dist/git-task-sweep-XSPCOBUY.js +42 -0
  261. package/dist/global-procedures-7FDCJNWI.js +22 -0
  262. package/dist/global-procedures-GX7V5L76.js +22 -0
  263. package/dist/graph-auto-extract-JI3VW5KY.js +183 -0
  264. package/dist/graph-auto-extract-KFNHAHBK.js +183 -0
  265. package/dist/hooks/bug-report-worker.js +13 -13
  266. package/dist/hooks/codex-stop-task-finalizer.js +13 -13
  267. package/dist/hooks/commit-complete.js +13 -13
  268. package/dist/hooks/error-recall.js +6 -6
  269. package/dist/hooks/exe-heartbeat-hook.js +3 -3
  270. package/dist/hooks/ingest-worker.js +3 -3
  271. package/dist/hooks/ingest.js +6 -6
  272. package/dist/hooks/instructions-loaded.js +4 -4
  273. package/dist/hooks/manifest.json +20 -20
  274. package/dist/hooks/notification.js +4 -4
  275. package/dist/hooks/post-compact.js +12 -12
  276. package/dist/hooks/post-tool-combined.js +6 -6
  277. package/dist/hooks/pre-compact.js +16 -16
  278. package/dist/hooks/pre-tool-use.js +17 -17
  279. package/dist/hooks/prompt-submit.js +25 -25
  280. package/dist/hooks/session-end.js +23 -21
  281. package/dist/hooks/session-start.js +12 -12
  282. package/dist/hooks/stop.js +19 -19
  283. package/dist/hooks/subagent-stop.js +43 -13
  284. package/dist/hooks/summary-worker.js +19 -19
  285. package/dist/index.js +19 -19
  286. package/dist/installer-6PMCIZQZ.js +298 -0
  287. package/dist/installer-7ET5M2DD.js +344 -0
  288. package/dist/installer-K7BYY3XC.js +344 -0
  289. package/dist/installer-U6W7TQZU.js +40 -0
  290. package/dist/installer-UL4HFVPT.js +298 -0
  291. package/dist/installer-XMQRESAT.js +40 -0
  292. package/dist/lib/cloud-sync.js +12 -4
  293. package/dist/lib/consolidation.js +5 -5
  294. package/dist/lib/database.js +2 -2
  295. package/dist/lib/db-daemon-client.js +2 -2
  296. package/dist/lib/db.js +2 -2
  297. package/dist/lib/embedder.js +3 -3
  298. package/dist/lib/employee-templates.js +4 -4
  299. package/dist/lib/employees.js +2 -2
  300. package/dist/lib/exe-daemon-client.js +2 -2
  301. package/dist/lib/exe-daemon.js +50 -39
  302. package/dist/lib/hybrid-search.js +5 -5
  303. package/dist/lib/identity.js +2 -2
  304. package/dist/lib/messaging.js +11 -11
  305. package/dist/lib/reminders.js +3 -3
  306. package/dist/lib/schedules.js +5 -5
  307. package/dist/lib/session-registry.js +4 -4
  308. package/dist/lib/skill-learning.js +6 -6
  309. package/dist/lib/store.js +4 -4
  310. package/dist/lib/task-router.js +3 -3
  311. package/dist/lib/tasks.js +12 -12
  312. package/dist/lib/tmux-routing.js +10 -10
  313. package/dist/lib/tmux-transport.js +2 -1
  314. package/dist/lib/token-spend.js +3 -3
  315. package/dist/lib/transport.js +3 -2
  316. package/dist/mcp/register-tools.js +62 -62
  317. package/dist/mcp/server.js +63 -63
  318. package/dist/mcp/tools/complete-reminder.js +4 -4
  319. package/dist/mcp/tools/create-reminder.js +4 -4
  320. package/dist/mcp/tools/create-task.js +15 -15
  321. package/dist/mcp/tools/deactivate-behavior.js +7 -7
  322. package/dist/mcp/tools/list-reminders.js +4 -4
  323. package/dist/mcp/tools/list-tasks.js +14 -14
  324. package/dist/mcp/tools/send-message.js +13 -13
  325. package/dist/mcp/tools/update-task.js +13 -13
  326. package/dist/mcp-http-config-JZPO4B6K.js +29 -0
  327. package/dist/mcp-http-config-L6TEBZOW.js +29 -0
  328. package/dist/memory-cards-EIA3YLFA.js +180 -0
  329. package/dist/memory-cards-MDZGVJWJ.js +180 -0
  330. package/dist/memory-graph-extractor-BMZBK2LX.js +22 -0
  331. package/dist/memory-graph-extractor-U2Q7MTBZ.js +22 -0
  332. package/dist/memory-poisoning-defense-ORWGA4KK.js +224 -0
  333. package/dist/memory-poisoning-defense-ZY5P2OOG.js +224 -0
  334. package/dist/memory-queue-client-A2PMQVEU.js +16 -0
  335. package/dist/memory-reflection-35NUYL3Z.js +244 -0
  336. package/dist/memory-reflection-NHOC2FGF.js +244 -0
  337. package/dist/message-queue-client-L5VZ44IN.js +92 -0
  338. package/dist/notifications-7GGXNR42.js +47 -0
  339. package/dist/notifications-B2YCZD3T.js +47 -0
  340. package/dist/orchestration-events-7EQJF377.js +27 -0
  341. package/dist/orchestration-events-VJTAOA2R.js +27 -0
  342. package/dist/orchestrator-IAU2Y3K3.js +35 -0
  343. package/dist/orchestrator-YOM5D5EJ.js +35 -0
  344. package/dist/pipeline-router-ITQDOV2B.js +15 -0
  345. package/dist/pipeline-router-VYFAS3ZX.js +15 -0
  346. package/dist/plan-limits-OJQINDD3.js +28 -0
  347. package/dist/plan-limits-UWVCNA67.js +28 -0
  348. package/dist/project-boot-GSLIQJVS.js +299 -0
  349. package/dist/project-boot-NRU7RRED.js +299 -0
  350. package/dist/projection-worker-SKLKJJFA.js +1084 -0
  351. package/dist/projection-worker-XVOLBYQC.js +1084 -0
  352. package/dist/prospective-memory-JOKZL7QJ.js +232 -0
  353. package/dist/prospective-memory-WQSB2IPD.js +232 -0
  354. package/dist/reranker-5HJXM4K5.js +19 -0
  355. package/dist/reranker-Q7KD2VDL.js +19 -0
  356. package/dist/retrieval-health-BAKZOWX7.js +11 -0
  357. package/dist/retrieval-health-LXDMWIAZ.js +11 -0
  358. package/dist/review-polling-GBRSJ7X5.js +126 -0
  359. package/dist/review-polling-YDS35QTO.js +126 -0
  360. package/dist/runtime/index.js +13 -13
  361. package/dist/session-events-EJID2CZE.js +38 -0
  362. package/dist/session-events-UPXPYEA3.js +38 -0
  363. package/dist/session-kill-telemetry-7FP74BIM.js +31 -0
  364. package/dist/session-kill-telemetry-XLMNOBBQ.js +31 -0
  365. package/dist/session-scope-QCN23H6B.js +88 -0
  366. package/dist/session-scope-ZR2W2EDF.js +88 -0
  367. package/dist/setup-wizard-7H4CE5UL.js +12 -0
  368. package/dist/setup-wizard-MR3XA4BC.js +12 -0
  369. package/dist/skill-refinement-6UK4P4UQ.js +159 -0
  370. package/dist/skill-refinement-RYBLDKDP.js +159 -0
  371. package/dist/steward-gate-PSF4JQUC.js +15 -0
  372. package/dist/steward-gate-U2HQZ4LX.js +15 -0
  373. package/dist/task-enforcement-NL6WPS3T.js +506 -0
  374. package/dist/task-enforcement-RYWTWHQJ.js +506 -0
  375. package/dist/task-scope-43TBGXSP.js +37 -0
  376. package/dist/task-scope-BR4ZJLQT.js +37 -0
  377. package/dist/tasks-crud-AQLUDVES.js +79 -0
  378. package/dist/tasks-crud-LWTHIDHF.js +79 -0
  379. package/dist/tasks-notify-PZQMVQHI.js +40 -0
  380. package/dist/tasks-notify-U4QZ2FGV.js +40 -0
  381. package/dist/tasks-review-E3LQRBNB.js +49 -0
  382. package/dist/tasks-review-NIGU6K3L.js +49 -0
  383. package/dist/telemetry-upload-PQLC5A4D.js +741 -0
  384. package/dist/telemetry-upload-QOYSUDDH.js +741 -0
  385. package/dist/token-budget-OJGWYISJ.js +86 -0
  386. package/dist/token-budget-VMQLMHSU.js +86 -0
  387. package/dist/tool-capability-index-4M3BFQTU.js +10 -0
  388. package/dist/tool-telemetry-4YD2E6UU.js +17 -0
  389. package/dist/tool-telemetry-662N3S5Q.js +17 -0
  390. package/dist/tui/App.js +18 -18
  391. package/dist/tui-data-IIGF5XRY.js +260 -0
  392. package/dist/tui-data-W4INCXEA.js +260 -0
  393. package/dist/wiki-acl-KXXMRMIM.js +111 -0
  394. package/dist/wiki-acl-XSRBJSBD.js +111 -0
  395. package/dist/worker-gate-7GMM23JY.js +21 -0
  396. package/dist/worker-gate-F6LY67TM.js +21 -0
  397. package/dist/workflow-engine-G4JTWI5N.js +28 -0
  398. package/dist/workflow-engine-UHOVTA5Q.js +28 -0
  399. package/dist/worktree-OJMZ4RG4.js +28 -0
  400. package/dist/worktree-ZLF4MX6T.js +28 -0
  401. package/dist/worktree-sweep-5Z6V7MNJ.js +21 -0
  402. package/dist/worktree-sweep-M64OW2MU.js +21 -0
  403. package/package.json +2 -2
  404. package/release-notes.json +14 -14
@@ -0,0 +1,76 @@
1
+ import {
2
+ fastDbInit
3
+ } from "./chunk-QAK47LG3.js";
4
+ import {
5
+ sessionScopeFilter
6
+ } from "./chunk-2ZXMXFGH.js";
7
+ import {
8
+ formatStatusAll,
9
+ formatStatusDeep,
10
+ getEmployeeStatuses,
11
+ inTmux
12
+ } from "./chunk-SSTLTIF3.js";
13
+ import {
14
+ getClient,
15
+ isCoordinatorRole,
16
+ loadEmployees
17
+ } from "./chunk-TM2GZWIT.js";
18
+ import {
19
+ isMainModule
20
+ } from "./chunk-6Y4B3QF6.js";
21
+
22
+ // src/bin/exe-status.ts
23
+ async function status(targetEmployee) {
24
+ if (!inTmux()) {
25
+ return "Not in a tmux session. Start tmux first: tmux new-session -s work";
26
+ }
27
+ const employees = await loadEmployees();
28
+ const names = employees.filter((e) => !isCoordinatorRole(e.role)).map((e) => e.name);
29
+ const roles = new Map(employees.map((e) => [e.name, e.role ?? ""]));
30
+ await fastDbInit();
31
+ const client = getClient();
32
+ const taskMap = /* @__PURE__ */ new Map();
33
+ try {
34
+ const esScope = sessionScopeFilter();
35
+ const result = await client.execute({
36
+ sql: `SELECT assigned_to, title, priority FROM tasks
37
+ WHERE status = 'in_progress'${esScope.sql}
38
+ ORDER BY priority ASC, created_at ASC`,
39
+ args: [...esScope.args]
40
+ });
41
+ for (const row of result.rows) {
42
+ const assignee = String(row.assigned_to);
43
+ if (!taskMap.has(assignee)) {
44
+ taskMap.set(assignee, {
45
+ title: String(row.title),
46
+ priority: String(row.priority)
47
+ });
48
+ }
49
+ }
50
+ } catch {
51
+ }
52
+ if (targetEmployee) {
53
+ if (!names.includes(targetEmployee)) {
54
+ return `Employee "${targetEmployee}" not found. Available: ${names.join(", ")}`;
55
+ }
56
+ const statuses2 = getEmployeeStatuses([targetEmployee]);
57
+ const s = statuses2[0];
58
+ return formatStatusDeep(s, taskMap.get(targetEmployee), roles.get(targetEmployee) ?? "");
59
+ }
60
+ const statuses = getEmployeeStatuses(names);
61
+ return formatStatusAll(statuses, taskMap, roles);
62
+ }
63
+ if (isMainModule(import.meta.url)) {
64
+ const target = process.argv[2];
65
+ status(target).then((output) => {
66
+ process.stdout.write(output + "\n");
67
+ }).catch((err) => {
68
+ process.stderr.write(`Error: ${err instanceof Error ? err.message : String(err)}
69
+ `);
70
+ process.exit(1);
71
+ });
72
+ }
73
+
74
+ export {
75
+ status
76
+ };
@@ -0,0 +1,122 @@
1
+ import {
2
+ getActiveAgent
3
+ } from "./chunk-NMJSZ5FC.js";
4
+ import {
5
+ listTasks
6
+ } from "./chunk-2ZXMXFGH.js";
7
+ import {
8
+ getAgentContext
9
+ } from "./chunk-GJV3WDWM.js";
10
+ import {
11
+ isCoordinatorName
12
+ } from "./chunk-TM2GZWIT.js";
13
+
14
+ // src/mcp/tools/list-tasks.ts
15
+ import { z } from "zod";
16
+ function registerListTasks(server) {
17
+ server.registerTool(
18
+ "list_tasks",
19
+ {
20
+ title: "List Tasks",
21
+ description: "Query tasks by assignee, status, project, or priority. Defaults to current project. Pass project_name='all' for all projects. When querying your own tasks, project filter is skipped automatically.",
22
+ inputSchema: {
23
+ assigned_to: z.string().optional().describe("Filter by employee name"),
24
+ status: z.enum(["open", "in_progress", "done", "needs_review", "blocked", "cancelled", "closed"]).optional().describe("Filter by status. Default: active tasks only (excludes closed/cancelled)"),
25
+ project_name: z.string().optional().describe("Project name. Defaults to current project. Pass 'all' for all projects."),
26
+ priority: z.enum(["p0", "p1", "p2"]).optional().describe("Filter by priority"),
27
+ cross_session: z.boolean().optional().describe("When true, return tasks from ALL coordinator sessions (read-only). Default: false.")
28
+ }
29
+ },
30
+ async ({ assigned_to, status, project_name, priority, cross_session }) => {
31
+ try {
32
+ const { agentId } = getActiveAgent();
33
+ const isReviewQueue = status === "needs_review";
34
+ const shouldDefaultToOwnQueue = !assigned_to && !isReviewQueue && !isCoordinatorName(agentId);
35
+ const effectiveAssignedTo = assigned_to ?? (shouldDefaultToOwnQueue ? agentId : void 0);
36
+ const effectiveReviewer = !assigned_to && isReviewQueue ? agentId : void 0;
37
+ const isOwnQuery = effectiveAssignedTo === agentId;
38
+ const callerSession = getAgentContext()?.sessionHint || process.env.EXE_SESSION_NAME || process.env.EXE_SESSION || null;
39
+ const resolvedProject = project_name && project_name !== "all" ? project_name : null;
40
+ const effectiveCrossSession = cross_session === true;
41
+ const identityAmbiguous = !callerSession && (agentId === "default" || !agentId);
42
+ let tasks = await listTasks({
43
+ assignedTo: effectiveAssignedTo,
44
+ reviewer: effectiveReviewer,
45
+ status,
46
+ projectName: resolvedProject,
47
+ priority,
48
+ crossSession: effectiveCrossSession,
49
+ isOwnQuery: !!isOwnQuery,
50
+ callerSession
51
+ });
52
+ let recoveredCrossSession = false;
53
+ if (tasks.length === 0 && identityAmbiguous && !effectiveCrossSession) {
54
+ const crossTasks = await listTasks({
55
+ // Drop the own-queue assignee default — identity is unreliable here.
56
+ assignedTo: assigned_to,
57
+ reviewer: effectiveReviewer,
58
+ status,
59
+ projectName: resolvedProject,
60
+ priority,
61
+ crossSession: true,
62
+ isOwnQuery: false,
63
+ callerSession: null
64
+ });
65
+ if (crossTasks.length > 0) {
66
+ tasks = crossTasks;
67
+ recoveredCrossSession = true;
68
+ }
69
+ }
70
+ if (tasks.length === 0) {
71
+ if (identityAmbiguous) {
72
+ return {
73
+ content: [
74
+ {
75
+ type: "text",
76
+ text: "Could not resolve your session identity (multiple coordinator sessions are live and no per-session MCP header was provided). Task scoping is unreliable, and a cross-session read also returned no rows. If you expect tasks to exist, retry with cross_session=true and an explicit project_name='all', or configure a per-session MCP header (X-Exe-Session). Treat this as 'unknown', NOT 'empty'."
77
+ }
78
+ ],
79
+ isError: true
80
+ };
81
+ }
82
+ return {
83
+ content: [{ type: "text", text: "No tasks found." }]
84
+ };
85
+ }
86
+ const lines = tasks.map((t) => {
87
+ const cpIndicator = t.checkpointCount && t.checkpointCount > 0 ? ` [cp:${t.checkpointCount}]` : "";
88
+ let budgetNote = "";
89
+ if (t.budgetTokens !== null) {
90
+ const pct = Math.round(t.tokensUsed / t.budgetTokens * 100);
91
+ budgetNote = ` [${t.tokensUsed}/${t.budgetTokens} tokens, ${pct}%]`;
92
+ }
93
+ const shortId = t.id.slice(0, 8);
94
+ const showSession = cross_session || recoveredCrossSession;
95
+ const sessionNote = showSession && t.sessionScope ? ` [session:${t.sessionScope}]` : "";
96
+ return `- [${t.priority.toUpperCase()}] ${t.title} (${t.projectName}) \u2014 ${t.status}${cpIndicator}${budgetNote}${sessionNote} \u2192 ${t.assignedTo} [id:${shortId}]`;
97
+ });
98
+ const header = recoveredCrossSession ? `WARNING: session identity was ambiguous (multiple coordinator sessions, no per-session MCP header) \u2014 showing tasks ACROSS ALL sessions. Configure a per-session X-Exe-Session header for scoped results.
99
+ ${tasks.length} task(s) (cross-session):` : `${tasks.length} task(s):`;
100
+ return {
101
+ content: [
102
+ {
103
+ type: "text",
104
+ text: `${header}
105
+ ${lines.join("\n")}`
106
+ }
107
+ ]
108
+ };
109
+ } catch (err) {
110
+ const msg = err instanceof Error ? err.message : String(err);
111
+ return {
112
+ content: [{ type: "text", text: `Failed to list tasks: ${msg}` }],
113
+ isError: true
114
+ };
115
+ }
116
+ }
117
+ );
118
+ }
119
+
120
+ export {
121
+ registerListTasks
122
+ };
@@ -0,0 +1,33 @@
1
+ import {
2
+ completeReminder
3
+ } from "./chunk-XWVCURC2.js";
4
+
5
+ // src/mcp/tools/complete-reminder.ts
6
+ import { z } from "zod";
7
+ function registerCompleteReminder(server) {
8
+ server.registerTool(
9
+ "complete_reminder",
10
+ {
11
+ title: "Complete Reminder",
12
+ description: "Mark a reminder as done. Accepts UUID or text substring.",
13
+ inputSchema: {
14
+ reminder_id: z.string().describe("Reminder UUID or text substring to match")
15
+ }
16
+ },
17
+ async ({ reminder_id }) => {
18
+ const reminder = await completeReminder(reminder_id);
19
+ if (!reminder) {
20
+ return {
21
+ content: [{ type: "text", text: `No active reminder matching "${reminder_id}".` }]
22
+ };
23
+ }
24
+ return {
25
+ content: [{ type: "text", text: `Reminder completed: "${reminder.text}"` }]
26
+ };
27
+ }
28
+ );
29
+ }
30
+
31
+ export {
32
+ registerCompleteReminder
33
+ };
@@ -0,0 +1,348 @@
1
+ import {
2
+ getIdentity,
3
+ loadEmployeesSync
4
+ } from "./chunk-TM2GZWIT.js";
5
+
6
+ // src/lib/drift-probes.ts
7
+ var DRIFT_THRESHOLD = 80;
8
+ async function getRecentMemories(agentId, limit) {
9
+ try {
10
+ const { getClient, isInitialized } = await import("./lib/database.js");
11
+ if (!isInitialized()) return { count: 0, texts: [] };
12
+ const client = getClient();
13
+ const result = await client.execute({
14
+ sql: `SELECT text FROM memories WHERE agent_id = ? ORDER BY created_at DESC LIMIT ?`,
15
+ args: [agentId, limit]
16
+ });
17
+ const texts = result.rows.map((r) => String(r.text ?? ""));
18
+ return { count: texts.length, texts };
19
+ } catch {
20
+ return { count: 0, texts: [] };
21
+ }
22
+ }
23
+ async function getDecisionCount(agentId) {
24
+ try {
25
+ const { getClient, isInitialized } = await import("./lib/database.js");
26
+ if (!isInitialized()) return 0;
27
+ const client = getClient();
28
+ const result = await client.execute({
29
+ sql: `SELECT COUNT(*) as cnt FROM memories WHERE agent_id = ? AND memory_type = 'decision'`,
30
+ args: [agentId]
31
+ });
32
+ return Number(result.rows[0]?.cnt ?? 0);
33
+ } catch {
34
+ return 0;
35
+ }
36
+ }
37
+ function probeContinuity(ctx) {
38
+ const memCount = ctx.recentMemoryCount;
39
+ let score;
40
+ let detail;
41
+ if (memCount >= 20) {
42
+ score = 95;
43
+ detail = `${memCount} recent memories \u2014 strong continuity`;
44
+ } else if (memCount >= 10) {
45
+ score = 85;
46
+ detail = `${memCount} recent memories \u2014 adequate continuity`;
47
+ } else if (memCount >= 3) {
48
+ score = 70;
49
+ detail = `${memCount} recent memories \u2014 limited continuity`;
50
+ } else if (memCount >= 1) {
51
+ score = 50;
52
+ detail = `${memCount} recent memories \u2014 weak continuity`;
53
+ } else {
54
+ score = 30;
55
+ detail = "No recent memories \u2014 agent may lack session context";
56
+ }
57
+ if (ctx.storedDecisionCount > 0) {
58
+ score = Math.min(100, score + 5);
59
+ detail += ` (+${ctx.storedDecisionCount} decisions)`;
60
+ }
61
+ return { axis: "continuity", score, detail };
62
+ }
63
+ function probeConsistency(ctx) {
64
+ if (!ctx.identityBody || ctx.recentMemoryTexts.length === 0) {
65
+ return {
66
+ axis: "consistency",
67
+ score: ctx.identityBody ? 80 : 50,
68
+ detail: ctx.identityBody ? "No memories to check against identity" : "No identity file \u2014 cannot assess consistency"
69
+ };
70
+ }
71
+ const identityTerms = extractKeyTerms(ctx.identityBody);
72
+ if (identityTerms.length === 0) {
73
+ return { axis: "consistency", score: 75, detail: "Identity has no extractable key terms" };
74
+ }
75
+ const memoryText = ctx.recentMemoryTexts.join(" ").toLowerCase();
76
+ let matched = 0;
77
+ for (const term of identityTerms) {
78
+ if (memoryText.includes(term.toLowerCase())) matched++;
79
+ }
80
+ const ratio = matched / identityTerms.length;
81
+ const score = Math.round(50 + ratio * 50);
82
+ const detail = `${matched}/${identityTerms.length} identity terms found in recent memories`;
83
+ return { axis: "consistency", score, detail };
84
+ }
85
+ function probeRoleFidelity(ctx) {
86
+ const flags = [];
87
+ if (!ctx.identityBody) {
88
+ return {
89
+ axis: "role-fidelity",
90
+ score: 40,
91
+ detail: `No identity file for ${ctx.agent.name}`
92
+ };
93
+ }
94
+ let score = 100;
95
+ const identityLower = ctx.identityBody.toLowerCase();
96
+ const rosterRole = ctx.agent.role.toLowerCase();
97
+ if (!identityLower.includes(rosterRole)) {
98
+ score -= 15;
99
+ flags.push(`Identity does not mention role "${ctx.agent.role}"`);
100
+ }
101
+ if (!identityLower.includes(ctx.agent.name.toLowerCase())) {
102
+ score -= 10;
103
+ flags.push(`Identity does not mention agent name "${ctx.agent.name}"`);
104
+ }
105
+ const hasScopeBoundary = identityLower.includes("do not") || identityLower.includes("don't") || identityLower.includes("not your") || identityLower.includes("outside your") || identityLower.includes("you do not");
106
+ if (!hasScopeBoundary) {
107
+ score -= 10;
108
+ flags.push("Identity lacks explicit scope boundaries (what NOT to do)");
109
+ }
110
+ if (ctx.agent.systemPrompt) {
111
+ const promptTerms = extractKeyTerms(ctx.agent.systemPrompt);
112
+ const identityText = ctx.identityBody.toLowerCase();
113
+ let promptMatched = 0;
114
+ for (const term of promptTerms.slice(0, 20)) {
115
+ if (identityText.includes(term.toLowerCase())) promptMatched++;
116
+ }
117
+ const promptRatio = promptTerms.length > 0 ? promptMatched / Math.min(promptTerms.length, 20) : 1;
118
+ if (promptRatio < 0.3) {
119
+ score -= 15;
120
+ flags.push("Identity content diverges significantly from roster systemPrompt");
121
+ }
122
+ }
123
+ if (ctx.recentMemoryTexts.length > 5) {
124
+ const roleKeywords = extractRoleKeywords(ctx.agent.role);
125
+ const memoryText = ctx.recentMemoryTexts.join(" ").toLowerCase();
126
+ let domainHits = 0;
127
+ for (const kw of roleKeywords) {
128
+ if (memoryText.includes(kw)) domainHits++;
129
+ }
130
+ const domainRatio = roleKeywords.length > 0 ? domainHits / roleKeywords.length : 1;
131
+ if (domainRatio < 0.2) {
132
+ score -= 10;
133
+ flags.push(`Recent work shows little overlap with ${ctx.agent.role} domain keywords`);
134
+ }
135
+ }
136
+ score = Math.max(0, Math.min(100, score));
137
+ const detail = flags.length > 0 ? flags.join("; ") : "Identity aligns with roster definition";
138
+ return { axis: "role-fidelity", score, detail };
139
+ }
140
+ function probeWorldModel(ctx) {
141
+ if (!ctx.identityBody) {
142
+ return {
143
+ axis: "world-model",
144
+ score: 50,
145
+ detail: "No identity file \u2014 cannot assess org awareness"
146
+ };
147
+ }
148
+ const identityLower = ctx.identityBody.toLowerCase();
149
+ const flags = [];
150
+ let score = 100;
151
+ const otherAgents = ctx.allEmployees.filter((e) => e.name !== ctx.agent.name);
152
+ let mentionedAgents = 0;
153
+ for (const other of otherAgents) {
154
+ if (identityLower.includes(other.name.toLowerCase())) mentionedAgents++;
155
+ }
156
+ if (otherAgents.length > 0) {
157
+ const mentionRatio = mentionedAgents / otherAgents.length;
158
+ if (mentionRatio < 0.3) {
159
+ score -= 15;
160
+ flags.push(`Identity mentions ${mentionedAgents}/${otherAgents.length} team members`);
161
+ }
162
+ }
163
+ const hasReportingChain = identityLower.includes("report") || identityLower.includes("manager") || identityLower.includes("coo") || identityLower.includes("coordinator");
164
+ if (!hasReportingChain) {
165
+ score -= 10;
166
+ flags.push("Identity does not reference reporting chain");
167
+ }
168
+ const orgTerms = ["exe-os", "exe-wiki", "exe-crm", "askexe"];
169
+ let orgMentions = 0;
170
+ for (const term of orgTerms) {
171
+ if (identityLower.includes(term)) orgMentions++;
172
+ }
173
+ if (orgMentions === 0) {
174
+ score -= 5;
175
+ flags.push("Identity does not reference any org products");
176
+ }
177
+ score = Math.max(0, Math.min(100, score));
178
+ const detail = flags.length > 0 ? flags.join("; ") : "Identity reflects org structure";
179
+ return { axis: "world-model", score, detail };
180
+ }
181
+ function extractKeyTerms(text) {
182
+ const stopwords = /* @__PURE__ */ new Set([
183
+ "the",
184
+ "and",
185
+ "for",
186
+ "are",
187
+ "but",
188
+ "not",
189
+ "you",
190
+ "all",
191
+ "any",
192
+ "can",
193
+ "had",
194
+ "her",
195
+ "was",
196
+ "one",
197
+ "our",
198
+ "out",
199
+ "has",
200
+ "his",
201
+ "how",
202
+ "its",
203
+ "may",
204
+ "new",
205
+ "now",
206
+ "old",
207
+ "see",
208
+ "way",
209
+ "who",
210
+ "did",
211
+ "get",
212
+ "got",
213
+ "let",
214
+ "say",
215
+ "she",
216
+ "too",
217
+ "use",
218
+ "with",
219
+ "this",
220
+ "that",
221
+ "from",
222
+ "they",
223
+ "been",
224
+ "have",
225
+ "will",
226
+ "your",
227
+ "what",
228
+ "when",
229
+ "make",
230
+ "like",
231
+ "just",
232
+ "over",
233
+ "such",
234
+ "take",
235
+ "than",
236
+ "them",
237
+ "very",
238
+ "some",
239
+ "could",
240
+ "into",
241
+ "then",
242
+ "more",
243
+ "also",
244
+ "after",
245
+ "should",
246
+ "would",
247
+ "about",
248
+ "their",
249
+ "which",
250
+ "these",
251
+ "other",
252
+ "every",
253
+ "does",
254
+ "being",
255
+ "those",
256
+ "never",
257
+ "before",
258
+ "through"
259
+ ]);
260
+ const words = text.replace(/[^\w\s-]/g, " ").split(/\s+/).filter((w) => w.length > 3 && !stopwords.has(w.toLowerCase()));
261
+ return [...new Set(words.map((w) => w.toLowerCase()))].slice(0, 50);
262
+ }
263
+ function extractRoleKeywords(role) {
264
+ const roleKeywordMap = {
265
+ "coo": ["coordinate", "review", "status", "team", "task", "priority", "dispatch"],
266
+ "cto": ["architecture", "code", "technical", "system", "design", "review", "security"],
267
+ "cmo": ["marketing", "brand", "content", "design", "seo", "social", "campaign"],
268
+ "principal engineer": ["code", "implement", "test", "fix", "feature", "refactor", "build"],
269
+ "staff code reviewer": ["review", "code", "quality", "issue", "fix", "pattern"],
270
+ "content production specialist": ["video", "image", "render", "content", "produce", "media"],
271
+ "ai product lead": ["competitive", "analysis", "feature", "product", "research", "repo"]
272
+ };
273
+ const normalized = role.toLowerCase();
274
+ return roleKeywordMap[normalized] ?? normalized.split(/\s+/).filter((w) => w.length > 2);
275
+ }
276
+ async function runDriftProbes(options = {}) {
277
+ const employees = loadEmployeesSync();
278
+ const targetAgents = options.agentId ? employees.filter((e) => e.name === options.agentId) : employees;
279
+ if (targetAgents.length === 0) {
280
+ return [];
281
+ }
282
+ const axes = options.axes ?? ["continuity", "consistency", "role-fidelity", "world-model"];
283
+ const results = [];
284
+ for (const agent of targetAgents) {
285
+ const identity = getIdentity(agent.name);
286
+ const { count: memCount, texts: memTexts } = await getRecentMemories(agent.name, 50);
287
+ const decisionCount = await getDecisionCount(agent.name);
288
+ const ctx = {
289
+ agent,
290
+ identityBody: identity?.body ?? null,
291
+ identityRole: identity?.frontmatter.role ?? null,
292
+ recentMemoryCount: memCount,
293
+ recentMemoryTexts: memTexts,
294
+ storedDecisionCount: decisionCount,
295
+ allEmployees: employees
296
+ };
297
+ const probes = [];
298
+ const probeFns = {
299
+ continuity: probeContinuity,
300
+ consistency: probeConsistency,
301
+ "role-fidelity": probeRoleFidelity,
302
+ "world-model": probeWorldModel
303
+ };
304
+ for (const axis of axes) {
305
+ probes.push(probeFns[axis](ctx));
306
+ }
307
+ const scores = {
308
+ continuity: 0,
309
+ consistency: 0,
310
+ "role-fidelity": 0,
311
+ "world-model": 0
312
+ };
313
+ for (const probe of probes) {
314
+ scores[probe.axis] = probe.score;
315
+ }
316
+ const weights = {
317
+ continuity: 0.2,
318
+ consistency: 0.2,
319
+ "role-fidelity": 0.35,
320
+ "world-model": 0.25
321
+ };
322
+ let weightedSum = 0;
323
+ let weightTotal = 0;
324
+ for (const axis of axes) {
325
+ weightedSum += scores[axis] * weights[axis];
326
+ weightTotal += weights[axis];
327
+ }
328
+ const overall = Math.round(weightTotal > 0 ? weightedSum / weightTotal : 0);
329
+ const flags = [];
330
+ for (const probe of probes) {
331
+ if (probe.score < DRIFT_THRESHOLD) {
332
+ flags.push(`${probe.axis} at ${probe.score}% \u2014 ${probe.detail}`);
333
+ }
334
+ }
335
+ results.push({
336
+ agent: agent.name,
337
+ scores,
338
+ overall,
339
+ drifting: flags.length > 0,
340
+ flags
341
+ });
342
+ }
343
+ return results;
344
+ }
345
+
346
+ export {
347
+ runDriftProbes
348
+ };