@askexenow/exe-os 0.9.280 → 0.9.281

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 (436) hide show
  1. package/deploy/compose/.env.customer.example +1 -1
  2. package/deploy/compose/.env.default +2 -1
  3. package/deploy/compose/.env.example +1 -1
  4. package/deploy/compose/docker-compose.yml +74 -13
  5. package/deploy/compose/erp-nginx/nginx.conf +52 -0
  6. package/deploy/compose/generate-env.ts +1 -1
  7. package/deploy/compose/init-db.sql +13 -2
  8. package/deploy/stack-manifests/v0.9.json +11 -31
  9. package/dist/active-agent-6ZBHGHXF.js +26 -0
  10. package/dist/active-agent-E23SCYER.js +27 -0
  11. package/dist/active-agent-KMZT44S4.js +26 -0
  12. package/dist/active-agent-LFFTVROM.js +27 -0
  13. package/dist/agentic-ontology-PCZB5HV5.js +25 -0
  14. package/dist/agentic-ontology-PGGJN2ES.js +25 -0
  15. package/dist/assets/tmux.conf +2 -0
  16. package/dist/backfill-metadata-KQ4FEVUR.js +599 -0
  17. package/dist/backfill-metadata-Y3YWCHKJ.js +599 -0
  18. package/dist/behaviors-H4DZECKL.js +39 -0
  19. package/dist/behaviors-WIUTIJF6.js +39 -0
  20. package/dist/bin/agentic-ontology-backfill.js +5 -5
  21. package/dist/bin/agentic-reflection-backfill.js +6 -6
  22. package/dist/bin/agentic-semantic-label.js +5 -5
  23. package/dist/bin/backfill-conversations.js +4 -4
  24. package/dist/bin/backfill-responses.js +4 -4
  25. package/dist/bin/backfill-vectors.js +5 -5
  26. package/dist/bin/bulk-sync-postgres.js +7 -7
  27. package/dist/bin/cc-doctor.js +4 -4
  28. package/dist/bin/cleanup-stale-review-tasks.js +10 -10
  29. package/dist/bin/cli.js +15 -15
  30. package/dist/bin/exe-agent-config.js +2 -2
  31. package/dist/bin/exe-agent.js +4 -4
  32. package/dist/bin/exe-assign.js +5 -5
  33. package/dist/bin/exe-boot.js +17 -17
  34. package/dist/bin/exe-call.js +4 -4
  35. package/dist/bin/exe-cloud.js +5 -5
  36. package/dist/bin/exe-dispatch.js +10 -10
  37. package/dist/bin/exe-doctor.js +1 -1
  38. package/dist/bin/exe-export-behaviors.js +7 -7
  39. package/dist/bin/exe-forget.js +6 -6
  40. package/dist/bin/exe-gateway.js +7 -7
  41. package/dist/bin/exe-healthcheck.js +4 -4
  42. package/dist/bin/exe-heartbeat.js +10 -10
  43. package/dist/bin/exe-kill.js +13 -13
  44. package/dist/bin/exe-launch-agent.js +17 -17
  45. package/dist/bin/exe-new-employee.js +7 -7
  46. package/dist/bin/exe-pending-messages.js +11 -11
  47. package/dist/bin/exe-pending-notifications.js +10 -10
  48. package/dist/bin/exe-pending-reviews.js +10 -10
  49. package/dist/bin/exe-rename.js +4 -4
  50. package/dist/bin/exe-review.js +12 -12
  51. package/dist/bin/exe-search.js +5 -5
  52. package/dist/bin/exe-session-cleanup.js +15 -15
  53. package/dist/bin/exe-settings.js +5 -5
  54. package/dist/bin/exe-start-codex.js +11 -11
  55. package/dist/bin/exe-start-opencode.js +8 -8
  56. package/dist/bin/exe-status.js +11 -11
  57. package/dist/bin/exe-support.js +2 -2
  58. package/dist/bin/exe-team.js +3 -3
  59. package/dist/bin/exe-watchdog.js +17 -2
  60. package/dist/bin/git-sweep.js +11 -11
  61. package/dist/bin/graph-backfill.js +4 -4
  62. package/dist/bin/graph-export.js +5 -5
  63. package/dist/bin/import-history.js +7 -7
  64. package/dist/bin/install.js +8 -7
  65. package/dist/bin/intercom-check.js +4 -4
  66. package/dist/bin/mcp-sessions.js +2 -2
  67. package/dist/bin/orchestration-metrics.js +4 -4
  68. package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
  69. package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
  70. package/dist/bin/scan-tasks.js +10 -10
  71. package/dist/bin/setup.js +1 -1
  72. package/dist/bin/shard-migrate.js +4 -4
  73. package/dist/bin/stack-update.js +3 -3
  74. package/dist/bin/vps-health-gate.js +1 -1
  75. package/dist/capability-cards-F22XWGLB.js +88 -0
  76. package/dist/capability-cards-KCKITXXZ.js +88 -0
  77. package/dist/capacity-monitor-CHXGKVEO.js +50 -0
  78. package/dist/capacity-monitor-L3M5KB6T.js +50 -0
  79. package/dist/catchup-brief-BVZANLRZ.js +154 -0
  80. package/dist/catchup-brief-LDUGMC7S.js +154 -0
  81. package/dist/catchup-brief-NZDLL7SA.js +154 -0
  82. package/dist/catchup-brief-OOIXVGBA.js +154 -0
  83. package/dist/catchup-brief-UPXHDYTB.js +154 -0
  84. package/dist/chunk-2BI3FQKL.js +1876 -0
  85. package/dist/chunk-2CJUQGHH.js +362 -0
  86. package/dist/chunk-2EVYBMBJ.js +128 -0
  87. package/dist/chunk-2NQOZOXG.js +2113 -0
  88. package/dist/chunk-2QK5E3LB.js +128 -0
  89. package/dist/chunk-2VTCG4ZU.js +1352 -0
  90. package/dist/chunk-2YGI36DV.js +1119 -0
  91. package/dist/chunk-32BQN2QN.js +185 -0
  92. package/dist/chunk-33JMO4UV.js +157 -0
  93. package/dist/chunk-3DZAYLXY.js +377 -0
  94. package/dist/chunk-3MGBE7GR.js +76 -0
  95. package/dist/chunk-3MTV4FJL.js +271 -0
  96. package/dist/chunk-3NN7VQ27.js +1352 -0
  97. package/dist/chunk-4533HNOG.js +70 -0
  98. package/dist/chunk-456UW3MT.js +731 -0
  99. package/dist/chunk-4AU56XV2.js +58 -0
  100. package/dist/chunk-4MRP6EBR.js +280 -0
  101. package/dist/chunk-4MRWW52U.js +14219 -0
  102. package/dist/chunk-4WWECNAY.js +50 -0
  103. package/dist/chunk-4ZJDDR6L.js +171 -0
  104. package/dist/chunk-522EOPM6.js +382 -0
  105. package/dist/chunk-52UDAVZE.js +3208 -0
  106. package/dist/chunk-5FAMUB4X.js +204 -0
  107. package/dist/chunk-5PGZJQUI.js +58 -0
  108. package/dist/chunk-67TZJXNZ.js +262 -0
  109. package/dist/chunk-6FEZ7GN2.js +123 -0
  110. package/dist/chunk-6MOGND7S.js +14219 -0
  111. package/dist/chunk-6TRSVY7L.js +181 -0
  112. package/dist/chunk-6WCS7ZNK.js +85 -0
  113. package/dist/chunk-6WRYDREW.js +539 -0
  114. package/dist/chunk-72UA2FB3.js +181 -0
  115. package/dist/chunk-77DMFEOL.js +30 -0
  116. package/dist/chunk-7COXVQ5W.js +214 -0
  117. package/dist/chunk-7HLWBYH7.js +60 -0
  118. package/dist/chunk-ALSTZCWT.js +204 -0
  119. package/dist/chunk-ARUTDXZX.js +280 -0
  120. package/dist/chunk-AU47B4QY.js +129 -0
  121. package/dist/chunk-AXOREWVL.js +836 -0
  122. package/dist/chunk-B5MNC54V.js +127 -0
  123. package/dist/chunk-B74VSMKX.js +1350 -0
  124. package/dist/chunk-BHWLH44J.js +362 -0
  125. package/dist/chunk-BUPZ3HD2.js +85 -0
  126. package/dist/chunk-BWVLMA53.js +2113 -0
  127. package/dist/chunk-C5WLBKMJ.js +50 -0
  128. package/dist/chunk-C62T6R2A.js +97 -0
  129. package/dist/chunk-CV5KBAIK.js +33 -0
  130. package/dist/chunk-DAYSDWXA.js +1068 -0
  131. package/dist/chunk-DI4URIUB.js +227 -0
  132. package/dist/chunk-DNTCYFJ6.js +76 -0
  133. package/dist/chunk-DPDRRS7T.js +103 -0
  134. package/dist/chunk-DT3EV6CW.js +103 -0
  135. package/dist/chunk-DX45HDWY.js +1076 -0
  136. package/dist/chunk-E72BD6MG.js +284 -0
  137. package/dist/chunk-EAPUSVKS.js +375 -0
  138. package/dist/chunk-EFUANRRT.js +85 -0
  139. package/dist/chunk-EG2SCT5R.js +1352 -0
  140. package/dist/chunk-EJD2JU77.js +58 -0
  141. package/dist/chunk-EMXYUAVP.js +81 -0
  142. package/dist/chunk-ENM2TAAM.js +14219 -0
  143. package/dist/chunk-EPDRTPVP.js +1876 -0
  144. package/dist/chunk-EW6XDHID.js +221 -0
  145. package/dist/chunk-EYEGSAWZ.js +1094 -0
  146. package/dist/chunk-F6L33PAQ.js +231 -0
  147. package/dist/chunk-FC2SCTVE.js +38 -0
  148. package/dist/chunk-FSRKIZGZ.js +630 -0
  149. package/dist/chunk-FTG7I5CB.js +81 -0
  150. package/dist/chunk-GVFRLWX7.js +30 -0
  151. package/dist/chunk-H3XMZOWW.js +1119 -0
  152. package/dist/chunk-HAKXE6LN.js +123 -0
  153. package/dist/chunk-HLP3ZDTW.js +448 -0
  154. package/dist/chunk-HOYWKQAA.js +510 -0
  155. package/dist/chunk-HWDD64IW.js +712 -0
  156. package/dist/chunk-HWMCULHY.js +127 -0
  157. package/dist/chunk-HZZHRZPK.js +210 -0
  158. package/dist/chunk-ICRWTYNW.js +103 -0
  159. package/dist/chunk-J5MWPC33.js +167 -0
  160. package/dist/chunk-JBXANNNB.js +70 -0
  161. package/dist/chunk-JPBMIYWF.js +1352 -0
  162. package/dist/chunk-JY6EXBFI.js +373 -0
  163. package/dist/chunk-JZLIBXI7.js +14219 -0
  164. package/dist/chunk-JZPTKXJ6.js +668 -0
  165. package/dist/chunk-KEYMA4ZP.js +510 -0
  166. package/dist/chunk-KHGNN6GL.js +2078 -0
  167. package/dist/chunk-KVLB2PD6.js +97 -0
  168. package/dist/chunk-L3YBRBKL.js +1076 -0
  169. package/dist/chunk-L7VZ32NA.js +89 -0
  170. package/dist/chunk-LEHLADW4.js +221 -0
  171. package/dist/chunk-LPD4HILQ.js +262 -0
  172. package/dist/chunk-LSJ3ADDI.js +51 -0
  173. package/dist/chunk-LUMS2MAS.js +58 -0
  174. package/dist/chunk-LV4SEC6C.js +394 -0
  175. package/dist/chunk-LXXBEI4A.js +284 -0
  176. package/dist/chunk-M4NPCAIH.js +456 -0
  177. package/dist/chunk-MFJ62LQ5.js +157 -0
  178. package/dist/chunk-MGEZNKOD.js +836 -0
  179. package/dist/chunk-MJ7X5IBW.js +227 -0
  180. package/dist/chunk-MLGRWCY4.js +54 -0
  181. package/dist/chunk-MQZX57IY.js +348 -0
  182. package/dist/chunk-MY7MFF6J.js +103 -0
  183. package/dist/chunk-MYA2X5OY.js +185 -0
  184. package/dist/chunk-MYEABW5Z.js +630 -0
  185. package/dist/chunk-MZ2TDCAL.js +402 -0
  186. package/dist/chunk-NF3FRB7Z.js +271 -0
  187. package/dist/chunk-NXYIFEPV.js +539 -0
  188. package/dist/chunk-O2GVE5B5.js +58 -0
  189. package/dist/chunk-O5GUCDR2.js +456 -0
  190. package/dist/chunk-OBZNRECA.js +128 -0
  191. package/dist/chunk-OMZ2RLJG.js +214 -0
  192. package/dist/chunk-ORDHJRWN.js +299 -0
  193. package/dist/chunk-OSPIJMCD.js +210 -0
  194. package/dist/chunk-OUGWEH4J.js +240 -0
  195. package/dist/chunk-OV5MJQGC.js +1876 -0
  196. package/dist/chunk-PC635OAG.js +4318 -0
  197. package/dist/chunk-PH46R4J6.js +348 -0
  198. package/dist/chunk-PJP2EP7P.js +394 -0
  199. package/dist/chunk-PODFWH3V.js +333 -0
  200. package/dist/chunk-PPWH3SHR.js +1068 -0
  201. package/dist/chunk-PWPJK7KB.js +4318 -0
  202. package/dist/chunk-PXONZVG4.js +377 -0
  203. package/dist/chunk-QAOGJRZD.js +369 -0
  204. package/dist/chunk-QC3LAEI7.js +197 -0
  205. package/dist/chunk-QDWQDUWI.js +668 -0
  206. package/dist/chunk-QKJFD6BH.js +1350 -0
  207. package/dist/chunk-QNYVJGFM.js +345 -0
  208. package/dist/chunk-QQF3XGQ5.js +14219 -0
  209. package/dist/chunk-QRPFQNI3.js +150 -0
  210. package/dist/chunk-QSSU5XWD.js +731 -0
  211. package/dist/chunk-QXZAGVAV.js +2078 -0
  212. package/dist/chunk-RA54MW64.js +244 -0
  213. package/dist/chunk-RF7PUWXI.js +197 -0
  214. package/dist/chunk-S3INDYSO.js +244 -0
  215. package/dist/chunk-SLQVTHH5.js +369 -0
  216. package/dist/chunk-SY2B74KL.js +345 -0
  217. package/dist/chunk-T6QPXXXW.js +712 -0
  218. package/dist/chunk-TO5M5YCT.js +41 -0
  219. package/dist/chunk-TQ4VXUAF.js +129 -0
  220. package/dist/chunk-UAB7RQC4.js +41 -0
  221. package/dist/chunk-UMEIBDYW.js +97 -0
  222. package/dist/chunk-UXW5TB7Y.js +240 -0
  223. package/dist/chunk-VB2N5WOX.js +150 -0
  224. package/dist/chunk-VLZEMRG3.js +167 -0
  225. package/dist/chunk-VM3V6VK7.js +230 -0
  226. package/dist/chunk-VMCGKBHB.js +1352 -0
  227. package/dist/chunk-VNIYZAR5.js +128 -0
  228. package/dist/chunk-VYV4KOD2.js +85 -0
  229. package/dist/chunk-W4SRJBAT.js +171 -0
  230. package/dist/chunk-W5W3LZ3Q.js +54 -0
  231. package/dist/chunk-WDNZEOM3.js +38 -0
  232. package/dist/chunk-WUKEXVOR.js +3208 -0
  233. package/dist/chunk-X3Z35Q6L.js +373 -0
  234. package/dist/chunk-X4VOU6BQ.js +382 -0
  235. package/dist/chunk-X6EEVSVG.js +290 -0
  236. package/dist/chunk-XFHGWGNB.js +1094 -0
  237. package/dist/chunk-XKOLRWYA.js +33 -0
  238. package/dist/chunk-XMMIL3UD.js +402 -0
  239. package/dist/chunk-XWILC6VA.js +290 -0
  240. package/dist/chunk-Y4OQCX4C.js +97 -0
  241. package/dist/chunk-Y67VYYOA.js +231 -0
  242. package/dist/chunk-YGQCQTQH.js +230 -0
  243. package/dist/chunk-YGWFBN5A.js +299 -0
  244. package/dist/chunk-YMKUXZIG.js +379 -0
  245. package/dist/chunk-YOMLMT7E.js +230 -0
  246. package/dist/chunk-YPESIZOB.js +14219 -0
  247. package/dist/chunk-Z2CGCIU2.js +89 -0
  248. package/dist/chunk-ZLAWNHQR.js +448 -0
  249. package/dist/chunk-ZME5UQSN.js +333 -0
  250. package/dist/co-activation-NUEQYXE5.js +73 -0
  251. package/dist/co-activation-ZG5HLBCZ.js +73 -0
  252. package/dist/co-occurrence-7S5KWQB2.js +94 -0
  253. package/dist/co-occurrence-X5SWDXT2.js +94 -0
  254. package/dist/core-memory-GOPBRGGZ.js +110 -0
  255. package/dist/core-memory-XLCU6L5M.js +110 -0
  256. package/dist/crdt-sync-EPKHPGRZ.js +33 -0
  257. package/dist/crdt-sync-UIQJ5U7T.js +33 -0
  258. package/dist/crm-webhook-MKN23JNU.js +10 -0
  259. package/dist/crm-webhook-SM63BPXO.js +10 -0
  260. package/dist/cto-delegation-gate-PQY5TOVZ.js +279 -0
  261. package/dist/cto-delegation-gate-V5VVUR3G.js +279 -0
  262. package/dist/daemon-orchestration-C7AAS67Q.js +138 -0
  263. package/dist/daemon-orchestration-OBCAJB2H.js +138 -0
  264. package/dist/db-backup-F7VP4QRH.js +33 -0
  265. package/dist/db-backup-KVYC57W7.js +33 -0
  266. package/dist/doc-graph-extractor-H2ETEINP.js +132 -0
  267. package/dist/doc-graph-extractor-PCUZEYCH.js +132 -0
  268. package/dist/dreaming-4OZXSLE3.js +33 -0
  269. package/dist/dreaming-Z2RYEYNT.js +33 -0
  270. package/dist/exe-drift-GEWNIK7A.js +69 -0
  271. package/dist/exe-drift-XCGH7AFO.js +69 -0
  272. package/dist/exe-export-7DKAU5IP.js +75 -0
  273. package/dist/exe-export-BCHH6OE6.js +75 -0
  274. package/dist/exe-import-PDRIZVYF.js +78 -0
  275. package/dist/exe-import-ZCKUDFKL.js +78 -0
  276. package/dist/exe-key-FUWLLI3U.js +580 -0
  277. package/dist/exe-key-RKKNVUMP.js +580 -0
  278. package/dist/exe-snapshot-G4I5FQMK.js +337 -0
  279. package/dist/exe-snapshot-GWU7QTZK.js +337 -0
  280. package/dist/fast-db-init-6QG6YQNT.js +7 -0
  281. package/dist/fast-db-init-X2QDQUA4.js +7 -0
  282. package/dist/founder-context-TOMNUBGJ.js +96 -0
  283. package/dist/founder-context-UU3V6MAS.js +96 -0
  284. package/dist/gateway/index.js +8 -8
  285. package/dist/git-staleness-FEPFMZKF.js +111 -0
  286. package/dist/git-staleness-HYVYLCW3.js +111 -0
  287. package/dist/git-task-sweep-IRV52JIM.js +41 -0
  288. package/dist/git-task-sweep-T6BSM3GS.js +41 -0
  289. package/dist/global-procedures-3AURRMKO.js +21 -0
  290. package/dist/global-procedures-JPCYBZYC.js +21 -0
  291. package/dist/graph-auto-extract-OC3AOSMW.js +182 -0
  292. package/dist/graph-auto-extract-PVDYEJBY.js +182 -0
  293. package/dist/hooks/bug-report-worker.js +12 -12
  294. package/dist/hooks/codex-stop-task-finalizer.js +12 -12
  295. package/dist/hooks/commit-complete.js +12 -12
  296. package/dist/hooks/error-recall.js +6 -6
  297. package/dist/hooks/exe-heartbeat-hook.js +3 -3
  298. package/dist/hooks/ingest.js +6 -6
  299. package/dist/hooks/instructions-loaded.js +4 -4
  300. package/dist/hooks/manifest.json +19 -19
  301. package/dist/hooks/notification.js +4 -4
  302. package/dist/hooks/post-compact.js +11 -11
  303. package/dist/hooks/post-tool-combined.js +5 -5
  304. package/dist/hooks/pre-compact.js +12 -12
  305. package/dist/hooks/pre-tool-use.js +15 -15
  306. package/dist/hooks/prompt-submit.js +22 -22
  307. package/dist/hooks/session-end.js +16 -16
  308. package/dist/hooks/session-start.js +10 -10
  309. package/dist/hooks/stop.js +15 -15
  310. package/dist/hooks/subagent-stop.js +11 -11
  311. package/dist/hooks/summary-worker.js +15 -15
  312. package/dist/index.js +18 -18
  313. package/dist/installer-72XXLBRP.js +39 -0
  314. package/dist/installer-HDXG2BZN.js +343 -0
  315. package/dist/installer-JALMKPCS.js +297 -0
  316. package/dist/installer-Q46SNNLU.js +39 -0
  317. package/dist/installer-W7PIPRCX.js +343 -0
  318. package/dist/installer-Z7WQEOS7.js +297 -0
  319. package/dist/lib/cloud-sync.js +5 -5
  320. package/dist/lib/consolidation.js +5 -5
  321. package/dist/lib/database.js +2 -2
  322. package/dist/lib/db.js +2 -2
  323. package/dist/lib/employee-templates.js +4 -4
  324. package/dist/lib/employees.js +2 -2
  325. package/dist/lib/exe-daemon.js +45 -41
  326. package/dist/lib/hybrid-search.js +5 -5
  327. package/dist/lib/identity.js +2 -2
  328. package/dist/lib/license.js +1 -1
  329. package/dist/lib/messaging.js +10 -10
  330. package/dist/lib/reminders.js +3 -3
  331. package/dist/lib/schedules.js +5 -5
  332. package/dist/lib/session-registry.js +4 -4
  333. package/dist/lib/skill-learning.js +6 -6
  334. package/dist/lib/store.js +4 -4
  335. package/dist/lib/task-router.js +3 -3
  336. package/dist/lib/tasks.js +11 -11
  337. package/dist/lib/tmux-routing.js +9 -9
  338. package/dist/lib/token-spend.js +3 -3
  339. package/dist/license-gate-7JZCHOAG.js +14 -0
  340. package/dist/license-gate-OP4SKL4P.js +14 -0
  341. package/dist/mcp/register-tools.js +58 -58
  342. package/dist/mcp/server.js +59 -59
  343. package/dist/mcp/tools/complete-reminder.js +4 -4
  344. package/dist/mcp/tools/create-reminder.js +4 -4
  345. package/dist/mcp/tools/create-task.js +13 -13
  346. package/dist/mcp/tools/deactivate-behavior.js +7 -7
  347. package/dist/mcp/tools/list-reminders.js +4 -4
  348. package/dist/mcp/tools/list-tasks.js +13 -13
  349. package/dist/mcp/tools/send-message.js +12 -12
  350. package/dist/mcp/tools/update-task.js +12 -12
  351. package/dist/mcp-health-VULNT722.js +17 -0
  352. package/dist/mcp-health-WDOB6XUB.js +19 -0
  353. package/dist/mcp-http-config-2OZ7N74D.js +28 -0
  354. package/dist/mcp-http-config-4VXA5K73.js +28 -0
  355. package/dist/memory-cards-2K6QRZU6.js +179 -0
  356. package/dist/memory-cards-KSJF5OH2.js +179 -0
  357. package/dist/memory-graph-extractor-IJD5HWYT.js +21 -0
  358. package/dist/memory-graph-extractor-O4GAXOK5.js +21 -0
  359. package/dist/memory-poisoning-defense-2JRPWT5V.js +223 -0
  360. package/dist/memory-poisoning-defense-DH4A25NU.js +223 -0
  361. package/dist/memory-reflection-ISY2BBDB.js +243 -0
  362. package/dist/memory-reflection-Z5AQRR6H.js +243 -0
  363. package/dist/notifications-2VSWK2UJ.js +46 -0
  364. package/dist/notifications-4S253VQM.js +46 -0
  365. package/dist/oauth-server-D7D4574D.js +437 -0
  366. package/dist/oauth-server-MACN54SJ.js +437 -0
  367. package/dist/orchestration-events-BGP5RYQI.js +26 -0
  368. package/dist/orchestration-events-MDXUEVRZ.js +26 -0
  369. package/dist/orchestrator-DHK7RSSH.js +34 -0
  370. package/dist/orchestrator-R75WHQVA.js +34 -0
  371. package/dist/pipeline-router-4WUKQQEC.js +14 -0
  372. package/dist/pipeline-router-GWB2XK2Q.js +14 -0
  373. package/dist/plan-limits-NNJRAESF.js +27 -0
  374. package/dist/plan-limits-YTQW4UR4.js +27 -0
  375. package/dist/project-boot-46GZJTEX.js +299 -0
  376. package/dist/project-boot-PPHBBGIF.js +299 -0
  377. package/dist/projection-worker-UPAWXI7P.js +1034 -0
  378. package/dist/projection-worker-ZIKDYBW5.js +1034 -0
  379. package/dist/reranker-5ZBP2RRN.js +19 -0
  380. package/dist/reranker-E2MQIMJL.js +19 -0
  381. package/dist/reranker-GLSDJT3V.js +19 -0
  382. package/dist/reranker-LBBXWNOD.js +19 -0
  383. package/dist/reranker-XZ2EF4OH.js +19 -0
  384. package/dist/retrieval-health-JYRKPSII.js +7 -0
  385. package/dist/retrieval-health-OUV25J6S.js +7 -0
  386. package/dist/retrieval-health-U73JUAZL.js +7 -0
  387. package/dist/retrieval-health-WSZ7TYFF.js +7 -0
  388. package/dist/review-polling-62JV55ZT.js +125 -0
  389. package/dist/review-polling-CJXLWFWK.js +125 -0
  390. package/dist/runtime/index.js +12 -12
  391. package/dist/session-events-2ADD54VI.js +37 -0
  392. package/dist/session-events-QIJVBSKS.js +37 -0
  393. package/dist/session-kill-telemetry-HS6HD2YE.js +30 -0
  394. package/dist/session-kill-telemetry-MRT5FVSM.js +30 -0
  395. package/dist/session-scope-7ICYPC33.js +87 -0
  396. package/dist/session-scope-KMXD6EE6.js +87 -0
  397. package/dist/setup-wizard-B6GIT7YC.js +12 -0
  398. package/dist/setup-wizard-JUIJ4UZO.js +12 -0
  399. package/dist/skill-refinement-HIOX4VMC.js +158 -0
  400. package/dist/skill-refinement-T7JXRYUW.js +158 -0
  401. package/dist/stack-update-5KE6BZKQ.js +74 -0
  402. package/dist/stack-update-OP2RHP7N.js +74 -0
  403. package/dist/stack-update-VGCWDJEE.js +74 -0
  404. package/dist/steward-gate-L22WE3SY.js +14 -0
  405. package/dist/steward-gate-YKD2LUWN.js +14 -0
  406. package/dist/task-enforcement-5AOKXTY4.js +439 -0
  407. package/dist/task-enforcement-VO3YEGIO.js +439 -0
  408. package/dist/task-scope-YV2WPKRD.js +36 -0
  409. package/dist/task-scope-ZSXDZBRE.js +36 -0
  410. package/dist/tasks-crud-C6KADACT.js +78 -0
  411. package/dist/tasks-crud-NV6JEWGL.js +78 -0
  412. package/dist/tasks-notify-E22HSN6O.js +39 -0
  413. package/dist/tasks-notify-RPSEQ4WV.js +39 -0
  414. package/dist/tasks-review-V4ZLXOAZ.js +48 -0
  415. package/dist/tasks-review-ZVRI73JE.js +48 -0
  416. package/dist/telemetry-upload-LXUH7SKI.js +740 -0
  417. package/dist/telemetry-upload-TCDAZTUQ.js +740 -0
  418. package/dist/token-budget-OFBEZJTA.js +85 -0
  419. package/dist/token-budget-WAN57V6S.js +85 -0
  420. package/dist/tool-telemetry-UA3N32PK.js +17 -0
  421. package/dist/tool-telemetry-XXZJ35RR.js +17 -0
  422. package/dist/tui/App.js +17 -17
  423. package/dist/tui-data-46QLCJUE.js +259 -0
  424. package/dist/tui-data-ZDB7BLP2.js +259 -0
  425. package/dist/wiki-acl-HHSIBPF3.js +111 -0
  426. package/dist/wiki-acl-O65GZ2ZF.js +111 -0
  427. package/dist/worker-gate-27I4GAEZ.js +21 -0
  428. package/dist/worker-gate-DXU4HEPY.js +21 -0
  429. package/dist/workflow-engine-63EOEJ5Q.js +28 -0
  430. package/dist/workflow-engine-C6F2RMPN.js +28 -0
  431. package/dist/worktree-SFKKOMFD.js +27 -0
  432. package/dist/worktree-SVCE3S7X.js +27 -0
  433. package/dist/worktree-sweep-S3JHJTVP.js +20 -0
  434. package/dist/worktree-sweep-U3TIQ7WL.js +20 -0
  435. package/package.json +1 -1
  436. package/release-notes.json +88 -26
@@ -0,0 +1,402 @@
1
+ import {
2
+ entityId,
3
+ normalizeEntityName
4
+ } from "./chunk-I7GRBEFS.js";
5
+ import {
6
+ getClient
7
+ } from "./chunk-WUKEXVOR.js";
8
+
9
+ // src/lib/memory-graph-extractor.ts
10
+ function relationshipId(sourceId, targetId, relType) {
11
+ return `rel:${sourceId}:${relType}:${targetId}`;
12
+ }
13
+ var FILE_EXT_PATTERN = /(?:^|\s|['"`(])([a-zA-Z0-9_./-]+\.(?:ts|js|tsx|jsx|json|md|py|rs|go|toml|yaml|yml|css|html|sql|sh|bash|zsh|env|conf|cfg|xml|csv|lock))\b/g;
14
+ var PATH_PATTERN = /(?:^|\s|['"`(])((?:src|lib|bin|dist|tests?|__tests__|node_modules|\.?\w+)\/[a-zA-Z0-9_./-]+)/g;
15
+ function extractFilePaths(text) {
16
+ const paths = /* @__PURE__ */ new Set();
17
+ let match;
18
+ FILE_EXT_PATTERN.lastIndex = 0;
19
+ while ((match = FILE_EXT_PATTERN.exec(text)) !== null) {
20
+ const p = match[1].trim();
21
+ if (p.length >= 3 && p.length <= 200 && !p.startsWith("http")) {
22
+ paths.add(p);
23
+ }
24
+ }
25
+ PATH_PATTERN.lastIndex = 0;
26
+ while ((match = PATH_PATTERN.exec(text)) !== null) {
27
+ const p = match[1].trim();
28
+ if (p.length >= 5 && p.length <= 200 && !p.startsWith("http") && p.includes("/")) {
29
+ paths.add(p);
30
+ }
31
+ }
32
+ return Array.from(paths).slice(0, 20);
33
+ }
34
+ var ERROR_PATTERNS = [
35
+ /\b(Error|TypeError|ReferenceError|SyntaxError|RangeError):\s*(.{10,80})/g,
36
+ /\b(ERR_[A-Z_]+)/g,
37
+ /\b(ENOENT|EACCES|EPERM|ECONNREFUSED|ETIMEDOUT|SQLITE_BUSY)\b/g,
38
+ /\bfailed\s+(?:to\s+)?(\w+(?:\s+\w+){0,3})/gi
39
+ ];
40
+ function extractErrors(text) {
41
+ const errors = /* @__PURE__ */ new Set();
42
+ for (const pattern of ERROR_PATTERNS) {
43
+ pattern.lastIndex = 0;
44
+ let match;
45
+ while ((match = pattern.exec(text)) !== null) {
46
+ const err = (match[1] ?? match[0]).trim();
47
+ if (err.length >= 3 && err.length <= 100) {
48
+ errors.add(err);
49
+ }
50
+ }
51
+ if (errors.size >= 5) break;
52
+ }
53
+ return Array.from(errors).slice(0, 5);
54
+ }
55
+ var CONCEPT_PATTERNS = [
56
+ // Exe OS architecture
57
+ [/\b(?:GraphRAG|graph[\s-]?rag)\b/gi, "GraphRAG"],
58
+ [/\b(?:cloud[\s-]?sync|cloud backup)\b/gi, "cloud-sync"],
59
+ [/\b(?:three[\s-]?layer cognition|3[\s-]?layer cognition|cognition layers?)\b/gi, "three-layer-cognition"],
60
+ [/\b(?:working[\s-]?memory|runtime[\s-]?scratchpad)\b/gi, "working-memory"],
61
+ [/\b(?:checkpoint[\s/]?resume|crash[\s-]?recovery)\b/gi, "checkpoint-resume"],
62
+ [/\b(?:fan[\s-]?out[\s/]?fan[\s-]?in|barrier[\s-]?primitive)\b/gi, "fan-out-fan-in"],
63
+ [/\b(?:entity[\s-]?extraction|entity[\s-]?resolution)\b/gi, "entity-extraction"],
64
+ [/\b(?:alias[\s-]?resolution|entity[\s-]?aliases?)\b/gi, "alias-resolution"],
65
+ [/\b(?:daemon[\s-]?orchestration|daemon[\s-]?tick)\b/gi, "daemon-orchestration"],
66
+ [/\b(?:capacity[\s-]?monitor|context[\s-]?capacity)\b/gi, "capacity-monitor"],
67
+ [/\b(?:idle[\s-]?nudge|idle[\s-]?detection)\b/gi, "idle-nudge"],
68
+ [/\b(?:session[\s-]?scoping|session[\s-]?isolation)\b/gi, "session-scoping"],
69
+ [/\b(?:task[\s-]?enforcement|task[\s-]?lifecycle)\b/gi, "task-lifecycle"],
70
+ [/\b(?:intercom|tmux[\s-]?send[\s-]?keys)\b/gi, "intercom"],
71
+ [/\b(?:memory[\s-]?sovereignty|E2EE|local[\s-]?first)\b/gi, "memory-sovereignty"],
72
+ [/\b(?:MCP[\s-]?server|MCP[\s-]?tool|model[\s-]?context[\s-]?protocol)\b/gi, "MCP"],
73
+ [/\b(?:domain[\s-]?shard|shard[\s-]?manager)\b/gi, "domain-sharding"],
74
+ [/\b(?:co[\s-]?occurrence[\s-]?edge|co[\s-]?occurrence)\b/gi, "co-occurrence"],
75
+ [/\b(?:stack[\s-]?update|stack[\s-]?manifest)\b/gi, "stack-update"],
76
+ [/\b(?:license[\s-]?validation|license[\s-]?check)\b/gi, "licensing"],
77
+ // Infrastructure
78
+ [/\b(?:white[\s-]?label|agency[\s-]?mode)\b/gi, "white-label"],
79
+ [/\b(?:AGPL|AGPL[\s-]?3)\b/g, "AGPL-license"],
80
+ [/\b(?:SQLCipher)\b/g, "SQLCipher"],
81
+ [/\b(?:pgvector)\b/g, "pgvector"],
82
+ [/\b(?:Cloudflare[\s-]?Workers?)\b/gi, "cloudflare-workers"]
83
+ ];
84
+ function extractConcepts(text) {
85
+ const concepts = /* @__PURE__ */ new Set();
86
+ for (const [pattern, canonical] of CONCEPT_PATTERNS) {
87
+ pattern.lastIndex = 0;
88
+ if (pattern.test(text)) {
89
+ concepts.add(canonical);
90
+ }
91
+ if (concepts.size >= 10) break;
92
+ }
93
+ return Array.from(concepts);
94
+ }
95
+ var IDENTIFIER_PATTERN = /\b([a-z][a-zA-Z0-9]{3,30}[A-Z][a-zA-Z0-9]{0,30}|[A-Z][a-zA-Z0-9]{2,30})\b/g;
96
+ var COMMON_WORDS = /* @__PURE__ */ new Set([
97
+ "Error",
98
+ "String",
99
+ "Number",
100
+ "Boolean",
101
+ "Object",
102
+ "Array",
103
+ "Promise",
104
+ "Buffer",
105
+ "Event",
106
+ "Date",
107
+ "Math",
108
+ "JSON",
109
+ "RegExp",
110
+ "Symbol",
111
+ "NULL",
112
+ "TRUE",
113
+ "FALSE",
114
+ "undefined",
115
+ "NaN",
116
+ "This",
117
+ "That",
118
+ "Each",
119
+ "Some",
120
+ "Every",
121
+ "Many"
122
+ ]);
123
+ function extractIdentifiers(text) {
124
+ const counts = /* @__PURE__ */ new Map();
125
+ IDENTIFIER_PATTERN.lastIndex = 0;
126
+ let match;
127
+ while ((match = IDENTIFIER_PATTERN.exec(text)) !== null) {
128
+ const id = match[1];
129
+ if (!COMMON_WORDS.has(id) && id.length >= 4) {
130
+ counts.set(id, (counts.get(id) ?? 0) + 1);
131
+ }
132
+ }
133
+ return Array.from(counts.entries()).filter(([, count]) => count >= 2).map(([name]) => name).slice(0, 10);
134
+ }
135
+ function parseListLine(text, label) {
136
+ const re = new RegExp(`^${label}:\\s*(.+)$`, "im");
137
+ const match = text.match(re);
138
+ if (!match?.[1]) return [];
139
+ return match[1].split(",").map((part) => part.trim()).filter((part) => part.length >= 2 && part.length <= 180).slice(0, 30);
140
+ }
141
+ function parseScalarLine(text, label) {
142
+ const re = new RegExp(`^${label}:\\s*(.+)$`, "im");
143
+ const match = text.match(re);
144
+ return match?.[1]?.trim() ?? null;
145
+ }
146
+ function parseDecisionLines(text) {
147
+ const decisions = [];
148
+ const block = text.match(/^Decisions:\s*\n([\s\S]*?)(?:\n\n|^Patterns:|^Promoted behaviors:|$)/im)?.[1];
149
+ if (!block) return decisions;
150
+ for (const line of block.split("\n")) {
151
+ const decision = line.replace(/^\s*[-*]\s*/, "").trim();
152
+ if (decision.length >= 8 && decision.length <= 180) {
153
+ decisions.push(decision);
154
+ }
155
+ if (decisions.length >= 12) break;
156
+ }
157
+ return decisions;
158
+ }
159
+ function appendSessionSnapshotGraph(memoryText, agentId, projectName, entities, relationships) {
160
+ if (!/^SESSION SNAPSHOT\b/m.test(memoryText)) return;
161
+ const sessionId = parseScalarLine(memoryText, "Snapshot ID") ?? "snapshot-cli";
162
+ const snapshotProject = parseScalarLine(memoryText, "Project") ?? projectName;
163
+ const keyEntities = parseListLine(memoryText, "Key entities");
164
+ const files = parseListLine(memoryText, "Files changed");
165
+ const decisions = parseDecisionLines(memoryText);
166
+ entities.push({ name: sessionId, type: "session" });
167
+ relationships.push({
168
+ source: agentId,
169
+ sourceType: "agent",
170
+ target: sessionId,
171
+ targetType: "session",
172
+ type: "captured_snapshot"
173
+ });
174
+ if (snapshotProject && snapshotProject !== "unknown") {
175
+ entities.push({ name: snapshotProject, type: "project" });
176
+ relationships.push({
177
+ source: sessionId,
178
+ sourceType: "session",
179
+ target: snapshotProject,
180
+ targetType: "project",
181
+ type: "snapshot_of"
182
+ });
183
+ }
184
+ for (const entity of keyEntities) {
185
+ entities.push({ name: entity, type: "concept" });
186
+ relationships.push({
187
+ source: sessionId,
188
+ sourceType: "session",
189
+ target: entity,
190
+ targetType: "concept",
191
+ type: "mentions"
192
+ });
193
+ }
194
+ for (const file of files) {
195
+ entities.push({ name: file, type: "file" });
196
+ relationships.push({
197
+ source: sessionId,
198
+ sourceType: "session",
199
+ target: file,
200
+ targetType: "file",
201
+ type: "touched_file"
202
+ });
203
+ }
204
+ for (const decision of decisions) {
205
+ entities.push({ name: decision, type: "decision" });
206
+ relationships.push({
207
+ source: sessionId,
208
+ sourceType: "session",
209
+ target: decision,
210
+ targetType: "decision",
211
+ type: "recorded_decision"
212
+ });
213
+ if (snapshotProject && snapshotProject !== "unknown") {
214
+ relationships.push({
215
+ source: decision,
216
+ sourceType: "decision",
217
+ target: snapshotProject,
218
+ targetType: "project",
219
+ type: "decision_for"
220
+ });
221
+ }
222
+ }
223
+ }
224
+ function extractMemoryGraph(memoryText, agentId, projectName, toolName) {
225
+ const entities = [];
226
+ const relationships = [];
227
+ entities.push({ name: agentId, type: "agent" });
228
+ if (projectName && projectName !== "unknown") {
229
+ entities.push({ name: projectName, type: "project" });
230
+ relationships.push({
231
+ source: agentId,
232
+ sourceType: "agent",
233
+ target: projectName,
234
+ targetType: "project",
235
+ type: "works_on"
236
+ });
237
+ }
238
+ if (toolName && toolName !== "manual" && toolName !== "unknown") {
239
+ entities.push({ name: toolName, type: "tool" });
240
+ relationships.push({
241
+ source: agentId,
242
+ sourceType: "agent",
243
+ target: toolName,
244
+ targetType: "tool",
245
+ type: "used_tool"
246
+ });
247
+ }
248
+ const filePaths = extractFilePaths(memoryText);
249
+ for (const fp of filePaths) {
250
+ entities.push({ name: fp, type: "file" });
251
+ relationships.push({
252
+ source: agentId,
253
+ sourceType: "agent",
254
+ target: fp,
255
+ targetType: "file",
256
+ type: "modified"
257
+ });
258
+ if (projectName && projectName !== "unknown") {
259
+ relationships.push({
260
+ source: fp,
261
+ sourceType: "file",
262
+ target: projectName,
263
+ targetType: "project",
264
+ type: "belongs_to"
265
+ });
266
+ }
267
+ }
268
+ const errors = extractErrors(memoryText);
269
+ for (const err of errors) {
270
+ entities.push({ name: err, type: "error" });
271
+ relationships.push({
272
+ source: agentId,
273
+ sourceType: "agent",
274
+ target: err,
275
+ targetType: "error",
276
+ type: "encountered"
277
+ });
278
+ }
279
+ const identifiers = extractIdentifiers(memoryText);
280
+ for (const id of identifiers) {
281
+ entities.push({ name: id, type: "function" });
282
+ if (filePaths.length > 0) {
283
+ relationships.push({
284
+ source: filePaths[0],
285
+ sourceType: "file",
286
+ target: id,
287
+ targetType: "function",
288
+ type: "contains"
289
+ });
290
+ }
291
+ }
292
+ const concepts = extractConcepts(memoryText);
293
+ for (const concept of concepts) {
294
+ entities.push({ name: concept, type: "concept" });
295
+ if (projectName && projectName !== "unknown") {
296
+ relationships.push({
297
+ source: concept,
298
+ sourceType: "concept",
299
+ target: projectName,
300
+ targetType: "project",
301
+ type: "related_to"
302
+ });
303
+ }
304
+ }
305
+ appendSessionSnapshotGraph(memoryText, agentId, projectName, entities, relationships);
306
+ return { entities, relationships };
307
+ }
308
+ async function resolveEntityAlias(client, name, originalId) {
309
+ try {
310
+ const normalized = normalizeEntityName(name);
311
+ const result = await client.execute({
312
+ sql: "SELECT canonical_entity_id FROM entity_aliases WHERE alias = ?",
313
+ args: [normalized]
314
+ });
315
+ if (result.rows.length > 0) {
316
+ return String(result.rows[0].canonical_entity_id);
317
+ }
318
+ } catch {
319
+ }
320
+ return originalId;
321
+ }
322
+ async function upsertMemoryGraph(result, memoryId) {
323
+ const client = getClient();
324
+ const now = (/* @__PURE__ */ new Date()).toISOString();
325
+ const actualEntityIds = /* @__PURE__ */ new Map();
326
+ for (const e of result.entities) {
327
+ const normalizedName = normalizeEntityName(e.name);
328
+ const normalizedType = e.type.toLowerCase();
329
+ const rawId = entityId(normalizedName, normalizedType);
330
+ const id = await resolveEntityAlias(client, e.name, rawId);
331
+ await client.execute({
332
+ sql: `INSERT INTO entities (id, name, type, first_seen, last_seen, properties)
333
+ VALUES (?, ?, ?, ?, ?, '{}')
334
+ ON CONFLICT(name, type) DO UPDATE SET last_seen = ?`,
335
+ args: [id, normalizedName, normalizedType, now, now, now]
336
+ });
337
+ const actual = await client.execute({
338
+ sql: "SELECT id FROM entities WHERE LOWER(name) = LOWER(?) AND type = ? LIMIT 1",
339
+ args: [normalizedName, normalizedType]
340
+ });
341
+ const actualId = actual.rows[0]?.id ? String(actual.rows[0].id) : id;
342
+ actualEntityIds.set(`${normalizedType}:${normalizedName}`, actualId);
343
+ await client.execute({
344
+ sql: `INSERT OR IGNORE INTO entity_memories (entity_id, memory_id)
345
+ VALUES (?, ?)`,
346
+ args: [actualId, memoryId]
347
+ });
348
+ }
349
+ try {
350
+ const { createCoOccurrenceEdges } = await import("./co-occurrence-7S5KWQB2.js");
351
+ await createCoOccurrenceEdges(result.entities, memoryId);
352
+ } catch {
353
+ }
354
+ for (const r of result.relationships) {
355
+ const sourceType = r.sourceType.toLowerCase();
356
+ const targetType = r.targetType.toLowerCase();
357
+ const sourceName = normalizeEntityName(r.source);
358
+ const targetName = normalizeEntityName(r.target);
359
+ const sourceId = actualEntityIds.get(`${sourceType}:${sourceName}`) ?? entityId(sourceName, sourceType);
360
+ const targetId = actualEntityIds.get(`${targetType}:${targetName}`) ?? entityId(targetName, targetType);
361
+ if (sourceId === targetId) continue;
362
+ const relId = relationshipId(sourceId, targetId, r.type);
363
+ await client.execute({
364
+ sql: `INSERT INTO relationships (id, source_entity_id, target_entity_id, type, weight, timestamp, properties)
365
+ VALUES (?, ?, ?, ?, 1.0, ?, '{}')
366
+ ON CONFLICT(source_entity_id, target_entity_id, type) DO UPDATE SET
367
+ weight = MIN(weight + 0.1, 10.0),
368
+ timestamp = ?`,
369
+ args: [relId, sourceId, targetId, r.type, now, now]
370
+ });
371
+ }
372
+ }
373
+ async function extractGraphForBatch(batch) {
374
+ for (const row of batch) {
375
+ try {
376
+ const graphResult = extractMemoryGraph(
377
+ row.raw_text,
378
+ row.agent_id,
379
+ row.project_name,
380
+ row.tool_name
381
+ );
382
+ if (graphResult.entities.length > 0) {
383
+ await upsertMemoryGraph(graphResult, row.id);
384
+ }
385
+ try {
386
+ const client = getClient();
387
+ await client.execute({
388
+ sql: `UPDATE memories SET graph_extracted = 1 WHERE id = ?`,
389
+ args: [row.id]
390
+ });
391
+ } catch {
392
+ }
393
+ } catch {
394
+ }
395
+ }
396
+ }
397
+
398
+ export {
399
+ extractMemoryGraph,
400
+ upsertMemoryGraph,
401
+ extractGraphForBatch
402
+ };
@@ -0,0 +1,271 @@
1
+ import {
2
+ vectorToSqlLiteral
3
+ } from "./chunk-MGEZNKOD.js";
4
+ import {
5
+ blobToVector
6
+ } from "./chunk-OTVEIJUQ.js";
7
+ import {
8
+ getClient
9
+ } from "./chunk-52UDAVZE.js";
10
+
11
+ // src/lib/behaviors.ts
12
+ import crypto from "crypto";
13
+ function formatReflexContent(trigger, action) {
14
+ return `\u26A1 REFLEX: When ${trigger} \u2192 ${action}. Decide whether to act.`;
15
+ }
16
+ function isReflexBehavior(behavior) {
17
+ return behavior.domain === "reflex";
18
+ }
19
+ async function storeReflexBehavior(opts) {
20
+ const content = formatReflexContent(opts.trigger, opts.action);
21
+ return storeBehavior({
22
+ agentId: opts.agentId,
23
+ content,
24
+ domain: "reflex",
25
+ projectName: opts.projectName,
26
+ priority: "p0",
27
+ // Always injected — impossible to miss
28
+ deviceScoped: opts.deviceScoped ?? false
29
+ });
30
+ }
31
+ async function storeBehavior(opts) {
32
+ try {
33
+ const { loadEmployeesSync, baseAgentName } = await import("./lib/employees.js");
34
+ const roster = loadEmployeesSync();
35
+ if (roster.length > 0) {
36
+ const base = baseAgentName(opts.agentId, roster);
37
+ if (!roster.some((e) => e.name === opts.agentId || e.name === base)) {
38
+ process.stderr.write(
39
+ `[behaviors] WARNING: Agent "${opts.agentId}" not found in roster. Storing behavior anyway \u2014 may be orphaned.
40
+ `
41
+ );
42
+ }
43
+ }
44
+ } catch {
45
+ }
46
+ const client = getClient();
47
+ const id = crypto.randomUUID();
48
+ const now = (/* @__PURE__ */ new Date()).toISOString();
49
+ const duplicate = await client.execute({
50
+ sql: `SELECT id FROM behaviors
51
+ WHERE agent_id = ?
52
+ AND COALESCE(domain, '') = COALESCE(?, '')
53
+ AND COALESCE(project_name, '') = COALESCE(?, '')
54
+ AND active = 1
55
+ AND lower(trim(content)) = lower(trim(?))
56
+ ORDER BY updated_at DESC
57
+ LIMIT 1`,
58
+ args: [opts.agentId, opts.domain ?? null, opts.projectName ?? null, opts.content]
59
+ });
60
+ const existingId = duplicate.rows[0]?.id;
61
+ if (existingId) return String(existingId);
62
+ let vector = null;
63
+ if (!process.env.VITEST) {
64
+ try {
65
+ const { embed } = await import("./lib/embedder.js");
66
+ const vec = await embed(opts.content);
67
+ vector = new Float32Array(vec);
68
+ } catch {
69
+ }
70
+ }
71
+ let createdByDevice = null;
72
+ try {
73
+ const { loadDeviceId } = await import("./lib/license.js");
74
+ createdByDevice = loadDeviceId() ?? null;
75
+ } catch {
76
+ }
77
+ const createdByAgent = process.env.AGENT_ID ?? null;
78
+ const sourceSessionId = process.env.CLAUDE_SESSION_ID ?? process.env.SESSION_ID ?? null;
79
+ let deviceId = null;
80
+ if (opts.deviceScoped) {
81
+ try {
82
+ const { loadDeviceId } = await import("./lib/license.js");
83
+ deviceId = loadDeviceId() ?? null;
84
+ } catch {
85
+ }
86
+ }
87
+ await client.execute({
88
+ sql: `INSERT INTO behaviors (id, agent_id, project_name, domain, priority, content, active, created_at, updated_at, vector, created_by_agent, created_by_device, source_session_id, device_id)
89
+ VALUES (?, ?, ?, ?, ?, ?, 1, ?, ?, ?, ?, ?, ?, ?)`,
90
+ args: [id, opts.agentId, opts.projectName ?? null, opts.domain ?? null, opts.priority ?? "p1", opts.content, now, now, vector ? vectorToSqlLiteral(vector) : null, createdByAgent, createdByDevice, sourceSessionId, deviceId]
91
+ });
92
+ return id;
93
+ }
94
+ async function listBehaviors(agentId, projectName, limit = 30) {
95
+ const client = getClient();
96
+ let currentDeviceId = null;
97
+ try {
98
+ const { loadDeviceId } = await import("./lib/license.js");
99
+ currentDeviceId = loadDeviceId() ?? null;
100
+ } catch {
101
+ }
102
+ const result = await client.execute({
103
+ sql: `SELECT id, agent_id, project_name, domain, priority, content, active, created_at, updated_at, vector, created_by_agent, created_by_device, source_session_id, device_id
104
+ FROM behaviors
105
+ WHERE agent_id = ? AND active = 1
106
+ AND (project_name IS NULL OR project_name = ?)
107
+ AND (device_id IS NULL OR device_id = ?)
108
+ ORDER BY
109
+ CASE WHEN priority = 'p0' THEN 0
110
+ WHEN priority = 'p1' THEN 1
111
+ ELSE 2 END,
112
+ CASE
113
+ WHEN lower(coalesce(domain, '')) IN ('identity', 'title', 'role') THEN 0
114
+ WHEN lower(content) LIKE '%identity%' THEN 0
115
+ WHEN lower(content) LIKE '%title%' THEN 0
116
+ WHEN lower(content) LIKE '%who are you%' THEN 0
117
+ ELSE 1
118
+ END,
119
+ updated_at DESC
120
+ LIMIT ?`,
121
+ args: [agentId, projectName ?? "", currentDeviceId ?? "", limit]
122
+ });
123
+ return result.rows.map((r) => ({
124
+ id: String(r.id),
125
+ agent_id: String(r.agent_id),
126
+ project_name: r.project_name ? String(r.project_name) : null,
127
+ domain: r.domain ? String(r.domain) : null,
128
+ priority: String(r.priority || "p1"),
129
+ content: String(r.content),
130
+ active: Number(r.active),
131
+ created_at: String(r.created_at),
132
+ updated_at: String(r.updated_at),
133
+ vector: r.vector ? blobToVector(r.vector) : null,
134
+ created_by_agent: r.created_by_agent ? String(r.created_by_agent) : null,
135
+ created_by_device: r.created_by_device ? String(r.created_by_device) : null,
136
+ source_session_id: r.source_session_id ? String(r.source_session_id) : null,
137
+ device_id: r.device_id ? String(r.device_id) : null
138
+ }));
139
+ }
140
+ async function listBehaviorsByDomain(agentId, domain) {
141
+ const client = getClient();
142
+ const result = await client.execute({
143
+ sql: `SELECT id, agent_id, project_name, domain, priority, content, active, created_at, updated_at, vector
144
+ FROM behaviors
145
+ WHERE agent_id = ? AND domain = ? AND active = 1`,
146
+ args: [agentId, domain]
147
+ });
148
+ return result.rows.map((r) => ({
149
+ id: String(r.id),
150
+ agent_id: String(r.agent_id),
151
+ project_name: r.project_name ? String(r.project_name) : null,
152
+ domain: r.domain ? String(r.domain) : null,
153
+ priority: String(r.priority || "p1"),
154
+ content: String(r.content),
155
+ active: Number(r.active),
156
+ created_at: String(r.created_at),
157
+ updated_at: String(r.updated_at),
158
+ vector: r.vector ? blobToVector(r.vector) : null,
159
+ created_by_agent: r.created_by_agent ? String(r.created_by_agent) : null,
160
+ created_by_device: r.created_by_device ? String(r.created_by_device) : null,
161
+ source_session_id: r.source_session_id ? String(r.source_session_id) : null,
162
+ device_id: r.device_id ? String(r.device_id) : null
163
+ }));
164
+ }
165
+ async function listBehaviorsSince(agentId, sinceIso, projectName, limit = 15) {
166
+ const client = getClient();
167
+ let currentDeviceId = null;
168
+ try {
169
+ const { loadDeviceId } = await import("./lib/license.js");
170
+ currentDeviceId = loadDeviceId() ?? null;
171
+ } catch {
172
+ }
173
+ const result = await client.execute({
174
+ sql: `SELECT id, agent_id, project_name, domain, priority, content, active, created_at, updated_at, vector, created_by_agent, created_by_device, source_session_id, device_id
175
+ FROM behaviors
176
+ WHERE agent_id = ? AND active = 1
177
+ AND (project_name IS NULL OR project_name = ?)
178
+ AND (device_id IS NULL OR device_id = ?)
179
+ AND (created_at > ? OR updated_at > ?)
180
+ ORDER BY
181
+ CASE WHEN priority = 'p0' THEN 0
182
+ WHEN priority = 'p1' THEN 1
183
+ ELSE 2 END,
184
+ updated_at DESC
185
+ LIMIT ?`,
186
+ args: [agentId, projectName ?? "", currentDeviceId ?? "", sinceIso, sinceIso, limit]
187
+ });
188
+ return result.rows.map((r) => ({
189
+ id: String(r.id),
190
+ agent_id: String(r.agent_id),
191
+ project_name: r.project_name ? String(r.project_name) : null,
192
+ domain: r.domain ? String(r.domain) : null,
193
+ priority: String(r.priority || "p1"),
194
+ content: String(r.content),
195
+ active: Number(r.active),
196
+ created_at: String(r.created_at),
197
+ updated_at: String(r.updated_at),
198
+ vector: r.vector ? blobToVector(r.vector) : null,
199
+ created_by_agent: r.created_by_agent ? String(r.created_by_agent) : null,
200
+ created_by_device: r.created_by_device ? String(r.created_by_device) : null,
201
+ source_session_id: r.source_session_id ? String(r.source_session_id) : null,
202
+ device_id: r.device_id ? String(r.device_id) : null
203
+ }));
204
+ }
205
+ async function listSharedSkills(currentAgentId, projectName, limit = 30) {
206
+ const client = getClient();
207
+ let currentDeviceId = null;
208
+ try {
209
+ const { loadDeviceId } = await import("./lib/license.js");
210
+ currentDeviceId = loadDeviceId() ?? null;
211
+ } catch {
212
+ }
213
+ const result = await client.execute({
214
+ sql: `SELECT id, agent_id, project_name, domain, priority, content, active, created_at, updated_at, vector, created_by_agent, created_by_device, source_session_id, device_id
215
+ FROM behaviors
216
+ WHERE domain = 'skill' AND active = 1
217
+ AND (project_name IS NULL OR project_name = ?)
218
+ AND (device_id IS NULL OR device_id = ?)
219
+ ORDER BY
220
+ CASE WHEN agent_id = ? THEN 0 ELSE 1 END,
221
+ updated_at DESC
222
+ LIMIT ?`,
223
+ args: [projectName ?? "", currentDeviceId ?? "", currentAgentId, limit]
224
+ });
225
+ return result.rows.map((r) => ({
226
+ id: String(r.id),
227
+ agent_id: String(r.agent_id),
228
+ project_name: r.project_name ? String(r.project_name) : null,
229
+ domain: r.domain ? String(r.domain) : null,
230
+ priority: String(r.priority || "p1"),
231
+ content: String(r.content),
232
+ active: Number(r.active),
233
+ created_at: String(r.created_at),
234
+ updated_at: String(r.updated_at),
235
+ vector: r.vector ? blobToVector(r.vector) : null,
236
+ created_by_agent: r.created_by_agent ? String(r.created_by_agent) : null,
237
+ created_by_device: r.created_by_device ? String(r.created_by_device) : null,
238
+ source_session_id: r.source_session_id ? String(r.source_session_id) : null,
239
+ device_id: r.device_id ? String(r.device_id) : null,
240
+ shared: String(r.agent_id) !== currentAgentId
241
+ }));
242
+ }
243
+ async function deactivateBehavior(id) {
244
+ const client = getClient();
245
+ const result = await client.execute({
246
+ sql: `UPDATE behaviors SET active = 0, updated_at = ? WHERE id = ? AND active = 1`,
247
+ args: [(/* @__PURE__ */ new Date()).toISOString(), id]
248
+ });
249
+ return (result.rowsAffected ?? 0) > 0;
250
+ }
251
+ async function reactivateBehavior(id) {
252
+ const client = getClient();
253
+ const result = await client.execute({
254
+ sql: `UPDATE behaviors SET active = 1, updated_at = ? WHERE id = ? AND active = 0`,
255
+ args: [(/* @__PURE__ */ new Date()).toISOString(), id]
256
+ });
257
+ return (result.rowsAffected ?? 0) > 0;
258
+ }
259
+
260
+ export {
261
+ formatReflexContent,
262
+ isReflexBehavior,
263
+ storeReflexBehavior,
264
+ storeBehavior,
265
+ listBehaviors,
266
+ listBehaviorsByDomain,
267
+ listBehaviorsSince,
268
+ listSharedSkills,
269
+ deactivateBehavior,
270
+ reactivateBehavior
271
+ };