@askexenow/exe-os 0.9.270 → 0.9.272

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 (311) hide show
  1. package/dist/active-agent-BDYXURXQ.js +26 -0
  2. package/dist/active-agent-YWBGAKGU.js +25 -0
  3. package/dist/agentic-ontology-56VHSVS3.js +25 -0
  4. package/dist/backfill-metadata-G46ABBVR.js +597 -0
  5. package/dist/backfill-metadata-VAV27KJK.js +597 -0
  6. package/dist/behaviors-USUTDXVA.js +25 -0
  7. package/dist/bin/agentic-ontology-backfill.js +5 -5
  8. package/dist/bin/agentic-reflection-backfill.js +6 -6
  9. package/dist/bin/agentic-semantic-label.js +5 -5
  10. package/dist/bin/backfill-conversations.js +4 -4
  11. package/dist/bin/backfill-responses.js +4 -4
  12. package/dist/bin/backfill-vectors.js +5 -5
  13. package/dist/bin/bulk-sync-postgres.js +6 -6
  14. package/dist/bin/cc-doctor.js +4 -4
  15. package/dist/bin/cleanup-stale-review-tasks.js +10 -10
  16. package/dist/bin/cli.js +16 -16
  17. package/dist/bin/exe-agent-config.js +3 -3
  18. package/dist/bin/exe-agent.js +4 -4
  19. package/dist/bin/exe-assign.js +5 -5
  20. package/dist/bin/exe-boot.js +17 -17
  21. package/dist/bin/exe-call.js +4 -4
  22. package/dist/bin/exe-cloud.js +4 -4
  23. package/dist/bin/exe-dispatch.js +10 -10
  24. package/dist/bin/exe-doctor.js +1 -1
  25. package/dist/bin/exe-export-behaviors.js +7 -7
  26. package/dist/bin/exe-forget.js +6 -6
  27. package/dist/bin/exe-gateway.js +7 -7
  28. package/dist/bin/exe-healthcheck.js +4 -4
  29. package/dist/bin/exe-heartbeat.js +10 -10
  30. package/dist/bin/exe-kill.js +13 -13
  31. package/dist/bin/exe-launch-agent.js +37 -19
  32. package/dist/bin/exe-new-employee.js +6 -6
  33. package/dist/bin/exe-pending-messages.js +11 -11
  34. package/dist/bin/exe-pending-notifications.js +10 -10
  35. package/dist/bin/exe-pending-reviews.js +10 -10
  36. package/dist/bin/exe-rename.js +4 -4
  37. package/dist/bin/exe-review.js +12 -12
  38. package/dist/bin/exe-search.js +5 -5
  39. package/dist/bin/exe-session-cleanup.js +15 -15
  40. package/dist/bin/exe-settings.js +5 -5
  41. package/dist/bin/exe-start-codex.js +11 -11
  42. package/dist/bin/exe-start-opencode.js +8 -8
  43. package/dist/bin/exe-status.js +11 -11
  44. package/dist/bin/exe-team.js +3 -3
  45. package/dist/bin/git-sweep.js +11 -11
  46. package/dist/bin/graph-backfill.js +4 -4
  47. package/dist/bin/graph-export.js +5 -5
  48. package/dist/bin/import-history.js +7 -7
  49. package/dist/bin/install.js +6 -6
  50. package/dist/bin/intercom-check.js +4 -4
  51. package/dist/bin/mcp-sessions.js +2 -2
  52. package/dist/bin/orchestration-metrics.js +4 -4
  53. package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
  54. package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
  55. package/dist/bin/scan-tasks.js +10 -10
  56. package/dist/bin/setup.js +1 -1
  57. package/dist/bin/shard-migrate.js +4 -4
  58. package/dist/bin/stack-update.js +10 -3
  59. package/dist/bin/vps-health-gate.js +1 -1
  60. package/dist/capacity-monitor-IFVRCIM7.js +49 -0
  61. package/dist/capacity-monitor-Q47GBDSY.js +49 -0
  62. package/dist/catchup-brief-RP4QHXNT.js +151 -0
  63. package/dist/catchup-brief-TKA6TEK4.js +151 -0
  64. package/dist/chunk-23KJ2LXY.js +58 -0
  65. package/dist/chunk-2NQQP3FF.js +630 -0
  66. package/dist/chunk-3FU5I3KV.js +526 -0
  67. package/dist/chunk-46IEEKPU.js +13696 -0
  68. package/dist/chunk-57UAFTO2.js +3958 -0
  69. package/dist/chunk-5AS622MM.js +3958 -0
  70. package/dist/chunk-62DEE65H.js +371 -0
  71. package/dist/chunk-64T6DFSS.js +447 -0
  72. package/dist/chunk-6BWDP63Z.js +197 -0
  73. package/dist/chunk-6GPYL7TX.js +214 -0
  74. package/dist/chunk-6KWLUVFL.js +54 -0
  75. package/dist/chunk-6N5ISWBF.js +1148 -0
  76. package/dist/chunk-6OD7PVMC.js +333 -0
  77. package/dist/chunk-7ET5CYTD.js +382 -0
  78. package/dist/chunk-7IWLKR6N.js +76 -0
  79. package/dist/chunk-7OEUOJL5.js +1021 -0
  80. package/dist/chunk-AIRJTKDK.js +204 -0
  81. package/dist/chunk-ATJ3NXDP.js +244 -0
  82. package/dist/chunk-B5IS7LE4.js +128 -0
  83. package/dist/chunk-BKINEQVI.js +244 -0
  84. package/dist/chunk-BOJV6NI3.js +128 -0
  85. package/dist/chunk-BPHWI6N2.js +284 -0
  86. package/dist/chunk-BXCQWWJP.js +185 -0
  87. package/dist/chunk-BZ6K7AY3.js +50 -0
  88. package/dist/chunk-C54KIFLS.js +214 -0
  89. package/dist/chunk-C6OYEJJI.js +260 -0
  90. package/dist/chunk-CHBHR5W6.js +3556 -0
  91. package/dist/chunk-D2T3272U.js +171 -0
  92. package/dist/chunk-DCHEIVGT.js +221 -0
  93. package/dist/chunk-DHIBLMSP.js +30 -0
  94. package/dist/chunk-E2AF2WYY.js +346 -0
  95. package/dist/chunk-E2KZEZZW.js +1090 -0
  96. package/dist/chunk-E4KWB4WM.js +348 -0
  97. package/dist/chunk-ENU7URWK.js +1073 -0
  98. package/dist/chunk-EZ7KAZMC.js +132 -0
  99. package/dist/chunk-F4FSSHR4.js +1073 -0
  100. package/dist/chunk-FPXU56FG.js +346 -0
  101. package/dist/chunk-FY7HHR5I.js +128 -0
  102. package/dist/chunk-G2S2UMU4.js +159 -0
  103. package/dist/chunk-G33BHQCO.js +70 -0
  104. package/dist/chunk-GJQTL7RX.js +127 -0
  105. package/dist/chunk-GLCKDEM2.js +97 -0
  106. package/dist/chunk-GMA34SXV.js +240 -0
  107. package/dist/chunk-GVAVEBYR.js +2091 -0
  108. package/dist/chunk-HOSJTLBQ.js +513 -0
  109. package/dist/chunk-IBMTSEZC.js +230 -0
  110. package/dist/chunk-IC6HVAS3.js +56 -0
  111. package/dist/chunk-IDFJNO44.js +1051 -0
  112. package/dist/chunk-ILFJMEY5.js +97 -0
  113. package/dist/chunk-ISQAOSL3.js +1921 -0
  114. package/dist/chunk-J6V2DCZK.js +382 -0
  115. package/dist/chunk-JP4CLFLR.js +1148 -0
  116. package/dist/chunk-JTIOZHWG.js +58 -0
  117. package/dist/chunk-KDICWAYV.js +1345 -0
  118. package/dist/chunk-KOBIB6WG.js +159 -0
  119. package/dist/chunk-KQFDDQB6.js +13696 -0
  120. package/dist/chunk-KZNSOHCB.js +280 -0
  121. package/dist/chunk-LVMBYP3C.js +171 -0
  122. package/dist/chunk-M2WQW5NC.js +227 -0
  123. package/dist/chunk-MY6SP5NZ.js +551 -0
  124. package/dist/chunk-N2ACW2ZG.js +363 -0
  125. package/dist/chunk-NSMJDATI.js +495 -0
  126. package/dist/chunk-NSQ5JE23.js +1090 -0
  127. package/dist/chunk-NZL567WG.js +81 -0
  128. package/dist/chunk-O5OMH6LI.js +244 -0
  129. package/dist/chunk-O7YO7E2G.js +1512 -0
  130. package/dist/chunk-OBUV3W7L.js +163 -0
  131. package/dist/chunk-OLDS7LJN.js +495 -0
  132. package/dist/chunk-OO2I22RX.js +38 -0
  133. package/dist/chunk-OPUUT33V.js +447 -0
  134. package/dist/chunk-OT3VMTKB.js +50 -0
  135. package/dist/chunk-P6RVIOVA.js +157 -0
  136. package/dist/chunk-PUA5564C.js +210 -0
  137. package/dist/chunk-PUQLKLQX.js +731 -0
  138. package/dist/chunk-QROKS65G.js +76 -0
  139. package/dist/chunk-R54I2N2T.js +818 -0
  140. package/dist/chunk-RCFYQHUP.js +818 -0
  141. package/dist/chunk-RJTND4YS.js +284 -0
  142. package/dist/chunk-SBLHQMMZ.js +81 -0
  143. package/dist/chunk-SG2ANG5C.js +123 -0
  144. package/dist/chunk-SVFNKSZV.js +333 -0
  145. package/dist/chunk-TAQT2DC7.js +330 -0
  146. package/dist/chunk-TB7HFW7M.js +127 -0
  147. package/dist/chunk-UUKDAIH2.js +731 -0
  148. package/dist/chunk-V6VEFEEH.js +1345 -0
  149. package/dist/chunk-VIO2ALGH.js +290 -0
  150. package/dist/chunk-VKCUSNJW.js +377 -0
  151. package/dist/chunk-VRPPJFIQ.js +1921 -0
  152. package/dist/chunk-WP3PVBBP.js +204 -0
  153. package/dist/chunk-WQEUY7DC.js +129 -0
  154. package/dist/chunk-WXMXUKCA.js +262 -0
  155. package/dist/chunk-X2WBH2IO.js +297 -0
  156. package/dist/chunk-X33TSJNO.js +394 -0
  157. package/dist/chunk-X7MMI2UI.js +89 -0
  158. package/dist/chunk-XG3BQZIK.js +85 -0
  159. package/dist/chunk-XIKBIAOS.js +75 -0
  160. package/dist/chunk-XPEB545Q.js +54 -0
  161. package/dist/chunk-XWH2MLWS.js +330 -0
  162. package/dist/chunk-YH7V73XW.js +89 -0
  163. package/dist/chunk-YMLM5D65.js +135 -0
  164. package/dist/chunk-YNJPRQ6J.js +377 -0
  165. package/dist/chunk-YSNEHBI6.js +551 -0
  166. package/dist/chunk-ZD6BMW2K.js +33 -0
  167. package/dist/chunk-ZKG5IYCG.js +668 -0
  168. package/dist/chunk-ZU4K7ZNX.js +197 -0
  169. package/dist/co-activation-HZMJC34P.js +72 -0
  170. package/dist/co-occurrence-AVYXRV4L.js +74 -0
  171. package/dist/core-memory-NPJCVUMF.js +110 -0
  172. package/dist/core-memory-OKGXL33Z.js +110 -0
  173. package/dist/crdt-sync-ZCH55JNR.js +33 -0
  174. package/dist/crm-webhook-6OMVUUGR.js +10 -0
  175. package/dist/crm-webhook-UCWF3XDB.js +10 -0
  176. package/dist/cto-delegation-gate-JFZFZGC2.js +206 -0
  177. package/dist/cto-delegation-gate-K32M4GVM.js +206 -0
  178. package/dist/daemon-orchestration-2Q7BYOHC.js +135 -0
  179. package/dist/daemon-orchestration-4RJ2CZJL.js +135 -0
  180. package/dist/db-backup-5GA2YFDX.js +33 -0
  181. package/dist/dreaming-I6KXO6E2.js +32 -0
  182. package/dist/dreaming-NJBK5ILR.js +32 -0
  183. package/dist/exe-drift-VSMIMHL4.js +68 -0
  184. package/dist/exe-export-DVHHIA6Y.js +73 -0
  185. package/dist/exe-export-GIVQDENS.js +73 -0
  186. package/dist/exe-import-7N46LSMQ.js +76 -0
  187. package/dist/exe-import-FINYUV5T.js +76 -0
  188. package/dist/exe-key-H45JY44F.js +579 -0
  189. package/dist/exe-key-MAEQGTB7.js +579 -0
  190. package/dist/exe-snapshot-3TEM3BFD.js +164 -0
  191. package/dist/exe-snapshot-HECGUHL3.js +164 -0
  192. package/dist/fast-db-init-3CNTADVO.js +7 -0
  193. package/dist/fast-db-init-HXCS2AP5.js +7 -0
  194. package/dist/gateway/index.js +8 -8
  195. package/dist/git-staleness-YCEBBIVK.js +110 -0
  196. package/dist/git-task-sweep-H34STRNT.js +40 -0
  197. package/dist/git-task-sweep-YL7NLDCK.js +40 -0
  198. package/dist/global-procedures-IHZM6C2K.js +20 -0
  199. package/dist/graph-auto-extract-RZQ3MHP2.js +162 -0
  200. package/dist/hooks/bug-report-worker.js +12 -12
  201. package/dist/hooks/codex-stop-task-finalizer.js +12 -12
  202. package/dist/hooks/commit-complete.js +12 -12
  203. package/dist/hooks/error-recall.js +6 -6
  204. package/dist/hooks/exe-heartbeat-hook.js +3 -3
  205. package/dist/hooks/ingest.js +6 -6
  206. package/dist/hooks/instructions-loaded.js +4 -4
  207. package/dist/hooks/manifest.json +19 -19
  208. package/dist/hooks/notification.js +4 -4
  209. package/dist/hooks/post-compact.js +11 -11
  210. package/dist/hooks/post-tool-combined.js +5 -5
  211. package/dist/hooks/pre-compact.js +12 -12
  212. package/dist/hooks/pre-tool-use.js +15 -15
  213. package/dist/hooks/prompt-submit.js +21 -21
  214. package/dist/hooks/session-end.js +16 -16
  215. package/dist/hooks/session-start.js +10 -10
  216. package/dist/hooks/stop.js +15 -15
  217. package/dist/hooks/subagent-stop.js +11 -11
  218. package/dist/hooks/summary-worker.js +15 -15
  219. package/dist/index.js +18 -18
  220. package/dist/installer-4EW5ZDGD.js +296 -0
  221. package/dist/installer-B2JTQO55.js +38 -0
  222. package/dist/installer-MIL352T7.js +342 -0
  223. package/dist/lib/agent-config.js +9 -3
  224. package/dist/lib/cloud-sync.js +4 -4
  225. package/dist/lib/consolidation.js +5 -5
  226. package/dist/lib/database.js +2 -2
  227. package/dist/lib/db.js +2 -2
  228. package/dist/lib/employee-templates.js +4 -4
  229. package/dist/lib/employees.js +2 -2
  230. package/dist/lib/exe-daemon.js +34 -34
  231. package/dist/lib/hybrid-search.js +5 -5
  232. package/dist/lib/identity.js +2 -2
  233. package/dist/lib/messaging.js +10 -10
  234. package/dist/lib/reminders.js +3 -3
  235. package/dist/lib/schedules.js +5 -5
  236. package/dist/lib/session-registry.js +4 -4
  237. package/dist/lib/skill-learning.js +4 -4
  238. package/dist/lib/store.js +4 -4
  239. package/dist/lib/task-router.js +3 -3
  240. package/dist/lib/tasks.js +11 -11
  241. package/dist/lib/tmux-routing.js +9 -9
  242. package/dist/lib/token-spend.js +3 -3
  243. package/dist/mcp/register-tools.js +54 -54
  244. package/dist/mcp/server.js +55 -55
  245. package/dist/mcp/tools/complete-reminder.js +4 -4
  246. package/dist/mcp/tools/create-reminder.js +4 -4
  247. package/dist/mcp/tools/create-task.js +13 -13
  248. package/dist/mcp/tools/deactivate-behavior.js +5 -5
  249. package/dist/mcp/tools/list-reminders.js +4 -4
  250. package/dist/mcp/tools/list-tasks.js +13 -13
  251. package/dist/mcp/tools/send-message.js +12 -12
  252. package/dist/mcp/tools/update-task.js +12 -12
  253. package/dist/mcp-http-config-OJQR246S.js +27 -0
  254. package/dist/memory-cards-IPULSQFA.js +174 -0
  255. package/dist/memory-graph-extractor-3TZZOKHY.js +17 -0
  256. package/dist/memory-poisoning-defense-SGUGR5YJ.js +225 -0
  257. package/dist/memory-reflection-H3WGCEM6.js +238 -0
  258. package/dist/notifications-VWPO6NJF.js +45 -0
  259. package/dist/notifications-WCSRQN2V.js +45 -0
  260. package/dist/orchestration-events-O5PSDEIO.js +25 -0
  261. package/dist/orchestrator-RAPEJUOI.js +33 -0
  262. package/dist/orchestrator-XPG6LJAI.js +33 -0
  263. package/dist/pipeline-router-5NT6FUC3.js +13 -0
  264. package/dist/pipeline-router-KSUXONDT.js +13 -0
  265. package/dist/plan-limits-53NXLNDQ.js +26 -0
  266. package/dist/project-boot-ITN3FZMM.js +299 -0
  267. package/dist/projection-worker-27XX5M2W.js +964 -0
  268. package/dist/reranker-GU7L2PJX.js +19 -0
  269. package/dist/reranker-TZEXIJAN.js +19 -0
  270. package/dist/review-polling-FA2J2Q5O.js +124 -0
  271. package/dist/review-polling-MLS4BQ3N.js +124 -0
  272. package/dist/runtime/index.js +12 -12
  273. package/dist/session-events-WWGF3B2N.js +36 -0
  274. package/dist/session-events-ZHXXAH6B.js +36 -0
  275. package/dist/session-kill-telemetry-O4TJHHOZ.js +29 -0
  276. package/dist/session-scope-CQXB7VMH.js +86 -0
  277. package/dist/session-scope-HHUMJYF6.js +86 -0
  278. package/dist/setup-wizard-UM2RHSBJ.js +12 -0
  279. package/dist/skill-refinement-MJPOHYD5.js +157 -0
  280. package/dist/skill-refinement-NVUBRK22.js +157 -0
  281. package/dist/stack-release-2KSOYDIV.js +712 -0
  282. package/dist/stack-release-BAPCXMXW.js +713 -0
  283. package/dist/stack-release-W4TWTEZP.js +731 -0
  284. package/dist/stack-update-QQA64STQ.js +52 -0
  285. package/dist/steward-gate-VLE7OCKO.js +13 -0
  286. package/dist/task-enforcement-FUHDL6UR.js +391 -0
  287. package/dist/task-enforcement-QL3K4N3F.js +391 -0
  288. package/dist/task-scope-TZYMB634.js +35 -0
  289. package/dist/task-scope-ZVLUBS4C.js +35 -0
  290. package/dist/tasks-crud-4MSLJWXE.js +77 -0
  291. package/dist/tasks-crud-HIPXKRKX.js +77 -0
  292. package/dist/tasks-notify-7JBUNE7R.js +38 -0
  293. package/dist/tasks-notify-UPIJ3L4O.js +38 -0
  294. package/dist/tasks-review-5SJSFTUB.js +47 -0
  295. package/dist/tasks-review-JHSYBR5I.js +47 -0
  296. package/dist/telemetry-upload-BSGOXGUP.js +739 -0
  297. package/dist/telemetry-upload-LTX3C5HZ.js +739 -0
  298. package/dist/token-budget-2CDWQU3Q.js +84 -0
  299. package/dist/tool-telemetry-7YS7EN7B.js +17 -0
  300. package/dist/tui/App.js +17 -17
  301. package/dist/tui-data-GDGBOS6G.js +258 -0
  302. package/dist/tui-data-VXF2RBVM.js +258 -0
  303. package/dist/wiki-acl-MJIMXRQV.js +111 -0
  304. package/dist/worker-gate-WQGTZOSM.js +21 -0
  305. package/dist/worker-gate-X2YDTKTL.js +21 -0
  306. package/dist/workflow-engine-CYXRZXBM.js +28 -0
  307. package/dist/workflow-engine-KMLAXVA4.js +28 -0
  308. package/dist/worktree-NLSKVRNC.js +26 -0
  309. package/dist/worktree-sweep-44TMEPLE.js +19 -0
  310. package/package.json +1 -1
  311. package/release-notes.json +26 -40
@@ -0,0 +1,258 @@
1
+ import {
2
+ sessionScopeFilter
3
+ } from "./chunk-57UAFTO2.js";
4
+ import "./chunk-SD6UFZRH.js";
5
+ import "./chunk-5CHYEKMH.js";
6
+ import "./chunk-4JERP7NT.js";
7
+ import "./chunk-GQ2XYRG3.js";
8
+ import "./chunk-MVW62NIZ.js";
9
+ import "./chunk-OYNKIAVW.js";
10
+ import "./chunk-CX6GL3ZJ.js";
11
+ import "./chunk-JP45GCVR.js";
12
+ import "./chunk-XJUUWHVN.js";
13
+ import "./chunk-NGP6LSV2.js";
14
+ import "./chunk-7SLLNRR3.js";
15
+ import "./chunk-CVYC6DUW.js";
16
+ import "./chunk-OPU3NYOO.js";
17
+ import "./chunk-GJV3WDWM.js";
18
+ import "./chunk-MP2AFCGL.js";
19
+ import "./chunk-TN45CTOI.js";
20
+ import "./chunk-HYZV25LY.js";
21
+ import {
22
+ getClient
23
+ } from "./chunk-UNCGZXPU.js";
24
+ import "./chunk-2I23RPSI.js";
25
+ import "./chunk-VGYL7CN2.js";
26
+ import "./chunk-FXU7JOXK.js";
27
+ import "./chunk-MOZ2YQ54.js";
28
+ import "./chunk-VXIMSRTO.js";
29
+ import "./chunk-LYH5HE24.js";
30
+ import "./chunk-MLKGABMK.js";
31
+
32
+ // src/lib/tui-data.ts
33
+ async function loadMemoryDashboard(limit) {
34
+ const client = getClient();
35
+ const [countResult, recentResult, agentResult] = await Promise.all([
36
+ client.execute("SELECT COUNT(*) as cnt FROM memories"),
37
+ client.execute({
38
+ sql: "SELECT agent_id, tool_name, project_name, raw_text, timestamp FROM memories ORDER BY timestamp DESC LIMIT ?",
39
+ args: [limit]
40
+ }),
41
+ client.execute("SELECT agent_id, COUNT(*) as cnt FROM memories GROUP BY agent_id ORDER BY cnt DESC")
42
+ ]);
43
+ return {
44
+ total: Number(countResult.rows[0]?.cnt ?? 0),
45
+ recent: recentResult.rows.map((row) => ({
46
+ agentId: String(row.agent_id ?? "unknown"),
47
+ toolName: String(row.tool_name ?? ""),
48
+ projectName: String(row.project_name ?? ""),
49
+ rawText: String(row.raw_text ?? ""),
50
+ timestamp: String(row.timestamp ?? "")
51
+ })),
52
+ byAgent: agentResult.rows.map((row) => ({
53
+ agentId: String(row.agent_id ?? "unknown"),
54
+ count: Number(row.cnt ?? 0)
55
+ }))
56
+ };
57
+ }
58
+ async function loadTeamBadgeCounts() {
59
+ const client = getClient();
60
+ const memoryCounts = /* @__PURE__ */ new Map();
61
+ const memResult = await client.execute("SELECT agent_id, COUNT(*) as cnt FROM memories GROUP BY agent_id");
62
+ for (const row of memResult.rows) {
63
+ memoryCounts.set(String(row.agent_id), Number(row.cnt));
64
+ }
65
+ return memoryCounts;
66
+ }
67
+ async function loadTeamDetailMetrics(employeeNames) {
68
+ const client = getClient();
69
+ const projectsByEmployee = /* @__PURE__ */ new Map();
70
+ const currentTaskByEmployee = /* @__PURE__ */ new Map();
71
+ const scope = sessionScopeFilter();
72
+ for (const employeeName of employeeNames) {
73
+ const [projectResult, taskResult] = await Promise.all([
74
+ client.execute({
75
+ sql: `SELECT DISTINCT project_name,
76
+ MAX(CASE WHEN status = 'in_progress' THEN 1 WHEN status = 'open' THEN 2 ELSE 3 END) as urgency
77
+ FROM tasks
78
+ WHERE assigned_to = ? AND status IN ('open','in_progress','done')${scope.sql}
79
+ GROUP BY project_name
80
+ ORDER BY urgency ASC
81
+ LIMIT 5`,
82
+ args: [employeeName, ...scope.args]
83
+ }),
84
+ client.execute({
85
+ sql: `SELECT title FROM tasks
86
+ WHERE assigned_to = ? AND status = 'in_progress'${scope.sql}
87
+ ORDER BY updated_at DESC
88
+ LIMIT 1`,
89
+ args: [employeeName, ...scope.args]
90
+ })
91
+ ]);
92
+ const projects = projectResult.rows.map((row) => {
93
+ const urgency = Number(row.urgency);
94
+ return {
95
+ name: String(row.project_name),
96
+ status: urgency === 1 ? "active" : urgency === 2 ? "has_tasks" : "idle"
97
+ };
98
+ });
99
+ if (projects.length > 0) projectsByEmployee.set(employeeName, projects);
100
+ if (taskResult.rows.length > 0) {
101
+ currentTaskByEmployee.set(employeeName, String(taskResult.rows[0].title));
102
+ }
103
+ }
104
+ return { projectsByEmployee, currentTaskByEmployee };
105
+ }
106
+ async function loadTeamMetrics(employeeNames) {
107
+ const [memoryCounts, { projectsByEmployee, currentTaskByEmployee }] = await Promise.all([
108
+ loadTeamBadgeCounts(),
109
+ loadTeamDetailMetrics(employeeNames)
110
+ ]);
111
+ return { memoryCounts, projectsByEmployee, currentTaskByEmployee };
112
+ }
113
+ async function loadTaskList() {
114
+ const client = getClient();
115
+ const scope = sessionScopeFilter();
116
+ const result = await client.execute({
117
+ sql: `SELECT id, title, priority, assigned_to, assigned_by, status, project_name, created_at, result
118
+ FROM tasks
119
+ WHERE 1=1${scope.sql}
120
+ ORDER BY
121
+ CASE status WHEN 'in_progress' THEN 0 WHEN 'open' THEN 1 WHEN 'blocked' THEN 2 WHEN 'needs_review' THEN 3 WHEN 'done' THEN 4 ELSE 5 END,
122
+ CASE priority WHEN 'p0' THEN 0 WHEN 'p1' THEN 1 WHEN 'p2' THEN 2 ELSE 3 END,
123
+ created_at DESC`,
124
+ args: [...scope.args]
125
+ });
126
+ return result.rows.map((row) => ({
127
+ id: String(row.id ?? ""),
128
+ title: String(row.title ?? ""),
129
+ priority: String(row.priority ?? "p2").toUpperCase(),
130
+ assignedTo: String(row.assigned_to ?? ""),
131
+ assignedBy: String(row.assigned_by ?? ""),
132
+ status: String(row.status ?? "open"),
133
+ projectName: String(row.project_name ?? ""),
134
+ createdAt: String(row.created_at ?? ""),
135
+ result: String(row.result ?? "")
136
+ }));
137
+ }
138
+ async function searchWikiMemoryRows(query) {
139
+ const client = getClient();
140
+ const result = await client.execute({
141
+ sql: `SELECT id, agent_id, raw_text, timestamp, project_name
142
+ FROM memories
143
+ WHERE raw_text LIKE ? AND COALESCE(status, 'active') = 'active'
144
+ ORDER BY timestamp DESC LIMIT 20`,
145
+ args: [`%${query}%`]
146
+ });
147
+ return result.rows.map((row) => ({
148
+ id: String(row.id),
149
+ agentId: String(row.agent_id),
150
+ rawText: String(row.raw_text),
151
+ timestamp: String(row.timestamp),
152
+ projectName: String(row.project_name ?? "")
153
+ }));
154
+ }
155
+ async function loadEntityProfile(entityName) {
156
+ const client = getClient();
157
+ const { getEntityByName, getRelationships, getEntityTimeline } = await import("./graph-query-UTLL5MKN.js");
158
+ const entity = await getEntityByName(client, entityName);
159
+ if (!entity) return null;
160
+ const [relationships, timelineRaw] = await Promise.all([
161
+ getRelationships(client, entity.id, { direction: "both" }),
162
+ getEntityTimeline(client, entity.id)
163
+ ]);
164
+ const neighbors = relationships.map((r) => {
165
+ const isOutgoing = r.sourceEntityId === entity.id;
166
+ return {
167
+ name: isOutgoing ? r.targetName : r.sourceName,
168
+ type: isOutgoing ? "target" : "source",
169
+ relType: r.type,
170
+ direction: isOutgoing ? "outgoing" : "incoming",
171
+ weight: r.weight,
172
+ confidence: r.confidence
173
+ };
174
+ });
175
+ const timeline = timelineRaw.slice(0, 20).map((t) => {
176
+ const isOutgoing = t.relationship.sourceEntityId === entity.id;
177
+ return {
178
+ timestamp: t.timestamp,
179
+ relType: t.relationship.type,
180
+ partnerName: isOutgoing ? t.relationship.targetName : t.relationship.sourceName,
181
+ direction: isOutgoing ? "outgoing" : "incoming"
182
+ };
183
+ });
184
+ const relationshipTypes = {};
185
+ for (const r of relationships) {
186
+ relationshipTypes[r.type] = (relationshipTypes[r.type] ?? 0) + 1;
187
+ }
188
+ return {
189
+ entity,
190
+ neighbors,
191
+ timeline,
192
+ stats: {
193
+ totalRelationships: relationships.length,
194
+ relationshipTypes
195
+ }
196
+ };
197
+ }
198
+ async function searchEntitiesList(query, limit = 20) {
199
+ const client = getClient();
200
+ const { searchEntities } = await import("./graph-query-UTLL5MKN.js");
201
+ const entities = await searchEntities(client, query, limit);
202
+ if (entities.length === 0) return [];
203
+ const placeholders = entities.map(() => "?").join(",");
204
+ const ids = entities.map((e) => e.id);
205
+ const countResult = await client.execute({
206
+ sql: `SELECT source_entity_id as eid, COUNT(*) as cnt FROM relationships WHERE source_entity_id IN (${placeholders}) AND valid_until IS NULL GROUP BY source_entity_id
207
+ UNION ALL
208
+ SELECT target_entity_id as eid, COUNT(*) as cnt FROM relationships WHERE target_entity_id IN (${placeholders}) AND valid_until IS NULL GROUP BY target_entity_id`,
209
+ args: [...ids, ...ids]
210
+ });
211
+ const countMap = /* @__PURE__ */ new Map();
212
+ for (const row of countResult.rows) {
213
+ const eid = String(row.eid);
214
+ countMap.set(eid, (countMap.get(eid) ?? 0) + Number(row.cnt));
215
+ }
216
+ return entities.map((e) => ({
217
+ id: e.id,
218
+ name: e.name,
219
+ type: e.type,
220
+ lastSeen: e.lastSeen,
221
+ relationshipCount: countMap.get(e.id) ?? 0
222
+ }));
223
+ }
224
+ async function loadHotEntities(limit = 15) {
225
+ const client = getClient();
226
+ const { getHotEntities } = await import("./graph-query-UTLL5MKN.js");
227
+ const since = new Date(Date.now() - 7 * 24 * 60 * 60 * 1e3);
228
+ const hot = await getHotEntities(client, since, limit);
229
+ return hot.map((h) => ({
230
+ id: h.entity.id,
231
+ name: h.entity.name,
232
+ type: h.entity.type,
233
+ lastSeen: h.entity.lastSeen,
234
+ relationshipCount: h.newRelationships
235
+ }));
236
+ }
237
+ async function loadGraphOverview() {
238
+ const client = getClient();
239
+ const { getGraphStats } = await import("./graph-query-UTLL5MKN.js");
240
+ const stats = await getGraphStats(client);
241
+ return {
242
+ totalEntities: stats.entities,
243
+ totalRelationships: stats.relationships,
244
+ entityTypes: stats.types
245
+ };
246
+ }
247
+ export {
248
+ loadEntityProfile,
249
+ loadGraphOverview,
250
+ loadHotEntities,
251
+ loadMemoryDashboard,
252
+ loadTaskList,
253
+ loadTeamBadgeCounts,
254
+ loadTeamDetailMetrics,
255
+ loadTeamMetrics,
256
+ searchEntitiesList,
257
+ searchWikiMemoryRows
258
+ };
@@ -0,0 +1,111 @@
1
+ import "./chunk-MLKGABMK.js";
2
+
3
+ // src/lib/wiki-acl.ts
4
+ async function checkWikiAccess(userId, workspace, requiredLevel = "read") {
5
+ if (!userId) {
6
+ return {
7
+ allowed: requiredLevel === "read",
8
+ actualLevel: "read"
9
+ };
10
+ }
11
+ try {
12
+ const { getClient } = await import("./lib/database.js");
13
+ const client = getClient();
14
+ const result = await client.execute({
15
+ sql: `SELECT access_level FROM wiki_acl WHERE user_id = ? AND workspace = ?`,
16
+ args: [userId, workspace]
17
+ });
18
+ if (result.rows.length > 0) {
19
+ const actualLevel = String(result.rows[0].access_level);
20
+ return {
21
+ allowed: accessLevelSatisfies(actualLevel, requiredLevel),
22
+ actualLevel
23
+ };
24
+ }
25
+ const wildcardResult = await client.execute({
26
+ sql: `SELECT access_level FROM wiki_acl WHERE user_id = ? AND workspace = '*'`,
27
+ args: [userId]
28
+ });
29
+ if (wildcardResult.rows.length > 0) {
30
+ const actualLevel = String(wildcardResult.rows[0].access_level);
31
+ return {
32
+ allowed: accessLevelSatisfies(actualLevel, requiredLevel),
33
+ actualLevel
34
+ };
35
+ }
36
+ return {
37
+ allowed: requiredLevel === "read",
38
+ actualLevel: "read"
39
+ };
40
+ } catch {
41
+ return {
42
+ allowed: requiredLevel === "read",
43
+ actualLevel: "read"
44
+ };
45
+ }
46
+ }
47
+ async function grantWikiAccess(userId, workspace, accessLevel, grantedBy) {
48
+ const { getClient } = await import("./lib/database.js");
49
+ const client = getClient();
50
+ await client.execute({
51
+ sql: `INSERT OR REPLACE INTO wiki_acl (user_id, workspace, access_level, granted_by, created_at)
52
+ VALUES (?, ?, ?, ?, ?)`,
53
+ args: [userId, workspace, accessLevel, grantedBy, (/* @__PURE__ */ new Date()).toISOString()]
54
+ });
55
+ }
56
+ async function revokeWikiAccess(userId, workspace) {
57
+ const { getClient } = await import("./lib/database.js");
58
+ const client = getClient();
59
+ const result = await client.execute({
60
+ sql: `DELETE FROM wiki_acl WHERE user_id = ? AND workspace = ?`,
61
+ args: [userId, workspace]
62
+ });
63
+ return (result.rowsAffected ?? 0) > 0;
64
+ }
65
+ async function listUserWikiAccess(userId) {
66
+ const { getClient } = await import("./lib/database.js");
67
+ const client = getClient();
68
+ const result = await client.execute({
69
+ sql: `SELECT user_id, workspace, access_level, granted_by, created_at
70
+ FROM wiki_acl WHERE user_id = ? ORDER BY workspace`,
71
+ args: [userId]
72
+ });
73
+ return result.rows.map((r) => ({
74
+ userId: String(r.user_id),
75
+ workspace: String(r.workspace),
76
+ accessLevel: String(r.access_level),
77
+ grantedBy: String(r.granted_by),
78
+ createdAt: String(r.created_at)
79
+ }));
80
+ }
81
+ async function listWorkspaceUsers(workspace) {
82
+ const { getClient } = await import("./lib/database.js");
83
+ const client = getClient();
84
+ const result = await client.execute({
85
+ sql: `SELECT user_id, workspace, access_level, granted_by, created_at
86
+ FROM wiki_acl WHERE workspace = ? OR workspace = '*' ORDER BY user_id`,
87
+ args: [workspace]
88
+ });
89
+ return result.rows.map((r) => ({
90
+ userId: String(r.user_id),
91
+ workspace: String(r.workspace),
92
+ accessLevel: String(r.access_level),
93
+ grantedBy: String(r.granted_by),
94
+ createdAt: String(r.created_at)
95
+ }));
96
+ }
97
+ var ACCESS_HIERARCHY = {
98
+ read: 1,
99
+ write: 2,
100
+ admin: 3
101
+ };
102
+ function accessLevelSatisfies(actual, required) {
103
+ return (ACCESS_HIERARCHY[actual] ?? 0) >= (ACCESS_HIERARCHY[required] ?? 0);
104
+ }
105
+ export {
106
+ checkWikiAccess,
107
+ grantWikiAccess,
108
+ listUserWikiAccess,
109
+ listWorkspaceUsers,
110
+ revokeWikiAccess
111
+ };
@@ -0,0 +1,21 @@
1
+ import {
2
+ MAX_CONCURRENT_WORKERS,
3
+ cleanupWorkerPid,
4
+ getTaskAwareCapacity,
5
+ registerWorkerPid,
6
+ releaseBackfillLock,
7
+ tryAcquireBackfillLock,
8
+ tryAcquireWorkerSlot
9
+ } from "./chunk-KOBIB6WG.js";
10
+ import "./chunk-VXIMSRTO.js";
11
+ import "./chunk-LYH5HE24.js";
12
+ import "./chunk-MLKGABMK.js";
13
+ export {
14
+ MAX_CONCURRENT_WORKERS,
15
+ cleanupWorkerPid,
16
+ getTaskAwareCapacity,
17
+ registerWorkerPid,
18
+ releaseBackfillLock,
19
+ tryAcquireBackfillLock,
20
+ tryAcquireWorkerSlot
21
+ };
@@ -0,0 +1,21 @@
1
+ import {
2
+ MAX_CONCURRENT_WORKERS,
3
+ cleanupWorkerPid,
4
+ getTaskAwareCapacity,
5
+ registerWorkerPid,
6
+ releaseBackfillLock,
7
+ tryAcquireBackfillLock,
8
+ tryAcquireWorkerSlot
9
+ } from "./chunk-G2S2UMU4.js";
10
+ import "./chunk-VXIMSRTO.js";
11
+ import "./chunk-LYH5HE24.js";
12
+ import "./chunk-MLKGABMK.js";
13
+ export {
14
+ MAX_CONCURRENT_WORKERS,
15
+ cleanupWorkerPid,
16
+ getTaskAwareCapacity,
17
+ registerWorkerPid,
18
+ releaseBackfillLock,
19
+ tryAcquireBackfillLock,
20
+ tryAcquireWorkerSlot
21
+ };
@@ -0,0 +1,28 @@
1
+ import {
2
+ advanceWorkflow,
3
+ approveWorkflowStep,
4
+ createWorkflowDefinition,
5
+ getWorkflowDefinition,
6
+ getWorkflowInstance,
7
+ listWorkflowDefinitions,
8
+ listWorkflowInstances,
9
+ loadWorkflows,
10
+ persistWorkflows,
11
+ runWorkflow,
12
+ startWorkflow
13
+ } from "./chunk-6OD7PVMC.js";
14
+ import "./chunk-J6V2DCZK.js";
15
+ import "./chunk-MLKGABMK.js";
16
+ export {
17
+ advanceWorkflow,
18
+ approveWorkflowStep,
19
+ createWorkflowDefinition,
20
+ getWorkflowDefinition,
21
+ getWorkflowInstance,
22
+ listWorkflowDefinitions,
23
+ listWorkflowInstances,
24
+ loadWorkflows,
25
+ persistWorkflows,
26
+ runWorkflow,
27
+ startWorkflow
28
+ };
@@ -0,0 +1,28 @@
1
+ import {
2
+ advanceWorkflow,
3
+ approveWorkflowStep,
4
+ createWorkflowDefinition,
5
+ getWorkflowDefinition,
6
+ getWorkflowInstance,
7
+ listWorkflowDefinitions,
8
+ listWorkflowInstances,
9
+ loadWorkflows,
10
+ persistWorkflows,
11
+ runWorkflow,
12
+ startWorkflow
13
+ } from "./chunk-SVFNKSZV.js";
14
+ import "./chunk-7ET5CYTD.js";
15
+ import "./chunk-MLKGABMK.js";
16
+ export {
17
+ advanceWorkflow,
18
+ approveWorkflowStep,
19
+ createWorkflowDefinition,
20
+ getWorkflowDefinition,
21
+ getWorkflowInstance,
22
+ listWorkflowDefinitions,
23
+ listWorkflowInstances,
24
+ loadWorkflows,
25
+ persistWorkflows,
26
+ runWorkflow,
27
+ startWorkflow
28
+ };
@@ -0,0 +1,26 @@
1
+ import {
2
+ cleanupWorktree,
3
+ ensureWorktree,
4
+ getGitRoot,
5
+ getMainRepoRoot,
6
+ isWorktreeDirty,
7
+ worktreeBranch,
8
+ worktreePath
9
+ } from "./chunk-KZNSOHCB.js";
10
+ import "./chunk-2NQQP3FF.js";
11
+ import "./chunk-CHBHR5W6.js";
12
+ import "./chunk-2I23RPSI.js";
13
+ import "./chunk-C6OYEJJI.js";
14
+ import "./chunk-FXU7JOXK.js";
15
+ import "./chunk-VXIMSRTO.js";
16
+ import "./chunk-LYH5HE24.js";
17
+ import "./chunk-MLKGABMK.js";
18
+ export {
19
+ cleanupWorktree,
20
+ ensureWorktree,
21
+ getGitRoot,
22
+ getMainRepoRoot,
23
+ isWorktreeDirty,
24
+ worktreeBranch,
25
+ worktreePath
26
+ };
@@ -0,0 +1,19 @@
1
+ import {
2
+ cleanupAgentWorktree,
3
+ discoverRepoPaths,
4
+ sweepWorktrees
5
+ } from "./chunk-62DEE65H.js";
6
+ import "./chunk-KZNSOHCB.js";
7
+ import "./chunk-2NQQP3FF.js";
8
+ import "./chunk-CHBHR5W6.js";
9
+ import "./chunk-2I23RPSI.js";
10
+ import "./chunk-C6OYEJJI.js";
11
+ import "./chunk-FXU7JOXK.js";
12
+ import "./chunk-VXIMSRTO.js";
13
+ import "./chunk-LYH5HE24.js";
14
+ import "./chunk-MLKGABMK.js";
15
+ export {
16
+ cleanupAgentWorktree,
17
+ discoverRepoPaths,
18
+ sweepWorktrees
19
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@askexenow/exe-os",
3
- "version": "0.9.270",
3
+ "version": "0.9.272",
4
4
  "description": "AI employee operating system — persistent memory, task management, and multi-agent coordination for Claude Code.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "type": "module",
@@ -1,35 +1,36 @@
1
1
  {
2
- "current": "0.9.270",
2
+ "current": "0.9.272",
3
3
  "notes": {
4
- "0.9.270": {
5
- "version": "0.9.270",
4
+ "0.9.272": {
5
+ "version": "0.9.272",
6
6
  "date": "2026-06-11",
7
- "features": [],
7
+ "features": [
8
+ "support service scoped resume"
9
+ ],
8
10
  "fixes": [
9
- "harden MCP zombie gate + stale init-db.sql staging + CRM_GRAPHQL_URL default",
10
- "exe-start PATH resolution + conservative MCP zombie/session recovery",
11
- "stack-update rollback migrations, image pull verification, cloudflared healthcheck",
12
- "Fix remaining exe-os support bugs",
13
- "widen gateway-client waitFor to 15s for loaded 4-core runner",
14
- "bind gateway-client mock WS server to 127.0.0.1 explicitly",
15
- "ephemeral WS port + registry-host-agnostic parity assert",
16
- "make tests robust on persistent self-hosted runner",
17
- "Fix shard founder scope and MCP session TTL",
18
- "Fix session-scoped notifications and RSS smoke gate",
19
- "Fix degraded daemon boot bug paths",
20
- "resource-triggered daemon restarts exit non-zero so launchd relaunches"
11
+ "GHCR verify base64 token, release skips missing repos, claude --model override reaches spawn"
21
12
  ],
22
- "security": [
23
- "Enforce cross-stack UX and security contracts"
13
+ "security": [],
14
+ "other": [
15
+ "Publish Claude Fable model support as 0.9.272",
16
+ "Add Claude Fable model whitelist",
17
+ "Publish stack-update service resume as 0.9.271"
18
+ ],
19
+ "migration_notes": []
20
+ },
21
+ "0.9.271": {
22
+ "version": "0.9.271",
23
+ "date": "2026-06-11",
24
+ "features": [
25
+ "Add stack-update --service for targeted single-service updates",
26
+ "Add stack-update --resume for retrying incomplete service updates"
27
+ ],
28
+ "fixes": [
29
+ "Track per-service stack update status for safer resume and scoped rollback flows"
24
30
  ],
31
+ "security": [],
25
32
  "other": [
26
- "Update memory score history for 0.9.267 publish",
27
- "quarantine gateway-client suite in CI with loud warning — tracked bug",
28
- "retry budget (2) for gateway-client on the shared runner",
29
- "separate vitest invocations for serial files — perf-stress fake timers poison a shared fork",
30
- "daemon-perf-stress joins the serial pass — timing comparisons need a quiet box",
31
- "run gateway-client serially after the parallel suite",
32
- "retrigger"
33
+ "Merge HYGO stack-update service-scoped update feature PR #93"
33
34
  ],
34
35
  "migration_notes": []
35
36
  },
@@ -107,21 +108,6 @@
107
108
  ],
108
109
  "other": [],
109
110
  "migration_notes": []
110
- },
111
- "0.9.266": {
112
- "version": "0.9.266",
113
- "date": "2026-06-10",
114
- "features": [],
115
- "fixes": [
116
- "Fix session-scoped notifications and RSS smoke gate",
117
- "Fix degraded daemon boot bug paths",
118
- "resource-triggered daemon restarts exit non-zero so launchd relaunches"
119
- ],
120
- "security": [
121
- "Enforce cross-stack UX and security contracts"
122
- ],
123
- "other": [],
124
- "migration_notes": []
125
111
  }
126
112
  }
127
113
  }