@mono-agent/agent-app 0.11.2 → 0.11.4

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 (374) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +222 -26
  3. package/dist/adapter-send-tools-main.js +7 -1
  4. package/dist/adapter-send-tools-main.js.map +1 -1
  5. package/dist/adapter-send-tools.d.ts +19 -1
  6. package/dist/adapter-send-tools.d.ts.map +1 -1
  7. package/dist/adapter-send-tools.js +127 -13
  8. package/dist/adapter-send-tools.js.map +1 -1
  9. package/dist/app-config.d.ts.map +1 -1
  10. package/dist/app-config.js +15 -2
  11. package/dist/app-config.js.map +1 -1
  12. package/dist/app-controller-channels.d.ts +8 -0
  13. package/dist/app-controller-channels.d.ts.map +1 -0
  14. package/dist/app-controller-channels.js +207 -0
  15. package/dist/app-controller-channels.js.map +1 -0
  16. package/dist/app-controller-continuation.d.ts +26 -0
  17. package/dist/app-controller-continuation.d.ts.map +1 -0
  18. package/dist/app-controller-continuation.js +198 -0
  19. package/dist/app-controller-continuation.js.map +1 -0
  20. package/dist/app-controller-lifecycle.d.ts +6 -0
  21. package/dist/app-controller-lifecycle.d.ts.map +1 -0
  22. package/dist/app-controller-lifecycle.js +81 -0
  23. package/dist/app-controller-lifecycle.js.map +1 -0
  24. package/dist/app-controller-maintenance.d.ts +13 -0
  25. package/dist/app-controller-maintenance.d.ts.map +1 -0
  26. package/dist/app-controller-maintenance.js +180 -0
  27. package/dist/app-controller-maintenance.js.map +1 -0
  28. package/dist/app-controller-memory-health.d.ts +12 -0
  29. package/dist/app-controller-memory-health.d.ts.map +1 -0
  30. package/dist/app-controller-memory-health.js +160 -0
  31. package/dist/app-controller-memory-health.js.map +1 -0
  32. package/dist/app-controller-memory.d.ts +9 -0
  33. package/dist/app-controller-memory.d.ts.map +1 -0
  34. package/dist/app-controller-memory.js +83 -0
  35. package/dist/app-controller-memory.js.map +1 -0
  36. package/dist/app-controller-responder.d.ts +20 -0
  37. package/dist/app-controller-responder.d.ts.map +1 -0
  38. package/dist/app-controller-responder.js +246 -0
  39. package/dist/app-controller-responder.js.map +1 -0
  40. package/dist/app-controller-traceability.d.ts +25 -0
  41. package/dist/app-controller-traceability.d.ts.map +1 -0
  42. package/dist/app-controller-traceability.js +418 -0
  43. package/dist/app-controller-traceability.js.map +1 -0
  44. package/dist/app-controller-utils.d.ts +38 -0
  45. package/dist/app-controller-utils.d.ts.map +1 -0
  46. package/dist/app-controller-utils.js +185 -0
  47. package/dist/app-controller-utils.js.map +1 -0
  48. package/dist/app-controller.d.ts +400 -0
  49. package/dist/app-controller.d.ts.map +1 -0
  50. package/dist/app-controller.js +336 -0
  51. package/dist/app-controller.js.map +1 -0
  52. package/dist/app.d.ts +7 -115
  53. package/dist/app.d.ts.map +1 -1
  54. package/dist/app.js +6 -1912
  55. package/dist/app.js.map +1 -1
  56. package/dist/artifact-retention.d.ts +4 -0
  57. package/dist/artifact-retention.d.ts.map +1 -1
  58. package/dist/artifact-retention.js +38 -0
  59. package/dist/artifact-retention.js.map +1 -1
  60. package/dist/backfill.d.ts +3 -1
  61. package/dist/backfill.d.ts.map +1 -1
  62. package/dist/backfill.js +5 -1
  63. package/dist/backfill.js.map +1 -1
  64. package/dist/background-runtime.d.ts +27 -0
  65. package/dist/background-runtime.d.ts.map +1 -1
  66. package/dist/background-runtime.js +383 -205
  67. package/dist/background-runtime.js.map +1 -1
  68. package/dist/background-worker-lease.d.ts.map +1 -1
  69. package/dist/background-worker-lease.js +41 -241
  70. package/dist/background-worker-lease.js.map +1 -1
  71. package/dist/background.d.ts +31 -9
  72. package/dist/background.d.ts.map +1 -1
  73. package/dist/background.js +543 -272
  74. package/dist/background.js.map +1 -1
  75. package/dist/channel-drivers/cron.d.ts +11 -0
  76. package/dist/channel-drivers/cron.d.ts.map +1 -0
  77. package/dist/channel-drivers/cron.js +168 -0
  78. package/dist/channel-drivers/cron.js.map +1 -0
  79. package/dist/channel-drivers/live.d.ts +11 -0
  80. package/dist/channel-drivers/live.d.ts.map +1 -0
  81. package/dist/channel-drivers/live.js +47 -0
  82. package/dist/channel-drivers/live.js.map +1 -0
  83. package/dist/channel-drivers/native-notify.d.ts +27 -0
  84. package/dist/channel-drivers/native-notify.d.ts.map +1 -0
  85. package/dist/channel-drivers/native-notify.js +94 -0
  86. package/dist/channel-drivers/native-notify.js.map +1 -0
  87. package/dist/channel-drivers/openai-api.d.ts +7 -0
  88. package/dist/channel-drivers/openai-api.d.ts.map +1 -0
  89. package/dist/channel-drivers/openai-api.js +63 -0
  90. package/dist/channel-drivers/openai-api.js.map +1 -0
  91. package/dist/channel-drivers/shared.d.ts +4 -0
  92. package/dist/channel-drivers/shared.d.ts.map +1 -0
  93. package/dist/channel-drivers/shared.js +5 -0
  94. package/dist/channel-drivers/shared.js.map +1 -0
  95. package/dist/channel-drivers/slack.d.ts +14 -0
  96. package/dist/channel-drivers/slack.d.ts.map +1 -0
  97. package/dist/channel-drivers/slack.js +227 -0
  98. package/dist/channel-drivers/slack.js.map +1 -0
  99. package/dist/channel-drivers/telegram.d.ts +11 -0
  100. package/dist/channel-drivers/telegram.d.ts.map +1 -0
  101. package/dist/channel-drivers/telegram.js +244 -0
  102. package/dist/channel-drivers/telegram.js.map +1 -0
  103. package/dist/channel-drivers/tui.d.ts +15 -0
  104. package/dist/channel-drivers/tui.d.ts.map +1 -0
  105. package/dist/channel-drivers/tui.js +108 -0
  106. package/dist/channel-drivers/tui.js.map +1 -0
  107. package/dist/channel-drivers/webhook.d.ts +7 -0
  108. package/dist/channel-drivers/webhook.d.ts.map +1 -0
  109. package/dist/channel-drivers/webhook.js +115 -0
  110. package/dist/channel-drivers/webhook.js.map +1 -0
  111. package/dist/channels.d.ts +21 -81
  112. package/dist/channels.d.ts.map +1 -1
  113. package/dist/channels.js +11 -1174
  114. package/dist/channels.js.map +1 -1
  115. package/dist/cli-args.d.ts +121 -0
  116. package/dist/cli-args.d.ts.map +1 -0
  117. package/dist/cli-args.js +532 -0
  118. package/dist/cli-args.js.map +1 -0
  119. package/dist/cli-background-command.d.ts +59 -0
  120. package/dist/cli-background-command.d.ts.map +1 -0
  121. package/dist/cli-background-command.js +475 -0
  122. package/dist/cli-background-command.js.map +1 -0
  123. package/dist/cli-cancellation.d.ts +6 -0
  124. package/dist/cli-cancellation.d.ts.map +1 -0
  125. package/dist/cli-cancellation.js +23 -0
  126. package/dist/cli-cancellation.js.map +1 -0
  127. package/dist/cli-commands.d.ts +12 -0
  128. package/dist/cli-commands.d.ts.map +1 -0
  129. package/dist/cli-commands.js +306 -0
  130. package/dist/cli-commands.js.map +1 -0
  131. package/dist/cli-help.d.ts +11 -0
  132. package/dist/cli-help.d.ts.map +1 -0
  133. package/dist/cli-help.js +262 -0
  134. package/dist/cli-help.js.map +1 -0
  135. package/dist/cli-init-command.d.ts +60 -0
  136. package/dist/cli-init-command.d.ts.map +1 -0
  137. package/dist/cli-init-command.js +1910 -0
  138. package/dist/cli-init-command.js.map +1 -0
  139. package/dist/cli-install-skill-command.d.ts +3 -0
  140. package/dist/cli-install-skill-command.d.ts.map +1 -0
  141. package/dist/cli-install-skill-command.js +51 -0
  142. package/dist/cli-install-skill-command.js.map +1 -0
  143. package/dist/cli-sandbox-command.d.ts +10 -0
  144. package/dist/cli-sandbox-command.d.ts.map +1 -0
  145. package/dist/cli-sandbox-command.js +100 -0
  146. package/dist/cli-sandbox-command.js.map +1 -0
  147. package/dist/cli-validate-config-command.d.ts +36 -0
  148. package/dist/cli-validate-config-command.d.ts.map +1 -0
  149. package/dist/cli-validate-config-command.js +317 -0
  150. package/dist/cli-validate-config-command.js.map +1 -0
  151. package/dist/cli.d.ts +6 -248
  152. package/dist/cli.d.ts.map +1 -1
  153. package/dist/cli.js +6 -3792
  154. package/dist/cli.js.map +1 -1
  155. package/dist/config-reference.d.ts +2 -1
  156. package/dist/config-reference.d.ts.map +1 -1
  157. package/dist/config-reference.js +34 -8
  158. package/dist/config-reference.js.map +1 -1
  159. package/dist/configured-agent.d.ts +23 -0
  160. package/dist/configured-agent.d.ts.map +1 -1
  161. package/dist/configured-agent.js +92 -13
  162. package/dist/configured-agent.js.map +1 -1
  163. package/dist/continuation-dispatch-worker.d.ts +21 -0
  164. package/dist/continuation-dispatch-worker.d.ts.map +1 -0
  165. package/dist/continuation-dispatch-worker.js +425 -0
  166. package/dist/continuation-dispatch-worker.js.map +1 -0
  167. package/dist/continuation-http-routes.d.ts +15 -0
  168. package/dist/continuation-http-routes.d.ts.map +1 -0
  169. package/dist/continuation-http-routes.js +265 -0
  170. package/dist/continuation-http-routes.js.map +1 -0
  171. package/dist/continuation-operator-api.d.ts +18 -0
  172. package/dist/continuation-operator-api.d.ts.map +1 -0
  173. package/dist/continuation-operator-api.js +164 -0
  174. package/dist/continuation-operator-api.js.map +1 -0
  175. package/dist/continuation-origin-store.d.ts +19 -0
  176. package/dist/continuation-origin-store.d.ts.map +1 -0
  177. package/dist/continuation-origin-store.js +273 -0
  178. package/dist/continuation-origin-store.js.map +1 -0
  179. package/dist/continuation-service-errors.d.ts +18 -0
  180. package/dist/continuation-service-errors.d.ts.map +1 -0
  181. package/dist/continuation-service-errors.js +35 -0
  182. package/dist/continuation-service-errors.js.map +1 -0
  183. package/dist/continuation-service-helpers.d.ts +39 -0
  184. package/dist/continuation-service-helpers.d.ts.map +1 -0
  185. package/dist/continuation-service-helpers.js +308 -0
  186. package/dist/continuation-service-helpers.js.map +1 -0
  187. package/dist/continuation-service-origin.d.ts +55 -0
  188. package/dist/continuation-service-origin.d.ts.map +1 -0
  189. package/dist/continuation-service-origin.js +325 -0
  190. package/dist/continuation-service-origin.js.map +1 -0
  191. package/dist/continuation-service-types.d.ts +110 -0
  192. package/dist/continuation-service-types.d.ts.map +1 -0
  193. package/dist/continuation-service-types.js +11 -0
  194. package/dist/continuation-service-types.js.map +1 -0
  195. package/dist/continuation-service.d.ts +4 -97
  196. package/dist/continuation-service.d.ts.map +1 -1
  197. package/dist/continuation-service.js +9 -1525
  198. package/dist/continuation-service.js.map +1 -1
  199. package/dist/continuation-store-fs.d.ts +15 -0
  200. package/dist/continuation-store-fs.d.ts.map +1 -0
  201. package/dist/continuation-store-fs.js +247 -0
  202. package/dist/continuation-store-fs.js.map +1 -0
  203. package/dist/continuation-store-policy.d.ts +21 -0
  204. package/dist/continuation-store-policy.d.ts.map +1 -0
  205. package/dist/continuation-store-policy.js +278 -0
  206. package/dist/continuation-store-policy.js.map +1 -0
  207. package/dist/continuation-store-records.d.ts +9 -0
  208. package/dist/continuation-store-records.d.ts.map +1 -0
  209. package/dist/continuation-store-records.js +221 -0
  210. package/dist/continuation-store-records.js.map +1 -0
  211. package/dist/continuation-store-types.d.ts +173 -0
  212. package/dist/continuation-store-types.d.ts.map +1 -0
  213. package/dist/continuation-store-types.js +26 -0
  214. package/dist/continuation-store-types.js.map +1 -0
  215. package/dist/continuation-store.d.ts +4 -138
  216. package/dist/continuation-store.d.ts.map +1 -1
  217. package/dist/continuation-store.js +145 -1049
  218. package/dist/continuation-store.js.map +1 -1
  219. package/dist/doctor.d.ts +10 -5
  220. package/dist/doctor.d.ts.map +1 -1
  221. package/dist/doctor.js +629 -58
  222. package/dist/doctor.js.map +1 -1
  223. package/dist/init.d.ts +2 -0
  224. package/dist/init.d.ts.map +1 -1
  225. package/dist/init.js +92 -239
  226. package/dist/init.js.map +1 -1
  227. package/dist/interaction-bridge.d.ts +19 -0
  228. package/dist/interaction-bridge.d.ts.map +1 -1
  229. package/dist/interaction-bridge.js +130 -0
  230. package/dist/interaction-bridge.js.map +1 -1
  231. package/dist/launchd-logs.d.ts +91 -0
  232. package/dist/launchd-logs.d.ts.map +1 -0
  233. package/dist/launchd-logs.js +1499 -0
  234. package/dist/launchd-logs.js.map +1 -0
  235. package/dist/launchd.d.ts +27 -0
  236. package/dist/launchd.d.ts.map +1 -1
  237. package/dist/launchd.js +89 -10
  238. package/dist/launchd.js.map +1 -1
  239. package/dist/memory-command.d.ts +2 -0
  240. package/dist/memory-command.d.ts.map +1 -1
  241. package/dist/memory-command.js +161 -48
  242. package/dist/memory-command.js.map +1 -1
  243. package/dist/memory-recall-settings.d.ts +64 -0
  244. package/dist/memory-recall-settings.d.ts.map +1 -0
  245. package/dist/memory-recall-settings.js +51 -0
  246. package/dist/memory-recall-settings.js.map +1 -0
  247. package/dist/memory-recall.d.ts +7 -95
  248. package/dist/memory-recall.d.ts.map +1 -1
  249. package/dist/memory-recall.js +8 -143
  250. package/dist/memory-recall.js.map +1 -1
  251. package/dist/memory-rituals.d.ts +3 -3
  252. package/dist/memory-rituals.d.ts.map +1 -1
  253. package/dist/memory-rituals.js +16 -111
  254. package/dist/memory-rituals.js.map +1 -1
  255. package/dist/modules/catalog.js +2 -2
  256. package/dist/modules/catalog.js.map +1 -1
  257. package/dist/modules/known-tools.d.ts +8 -6
  258. package/dist/modules/known-tools.d.ts.map +1 -1
  259. package/dist/modules/known-tools.js +8 -6
  260. package/dist/modules/known-tools.js.map +1 -1
  261. package/dist/notify-destinations.d.ts +5 -0
  262. package/dist/notify-destinations.d.ts.map +1 -1
  263. package/dist/notify-destinations.js +7 -1
  264. package/dist/notify-destinations.js.map +1 -1
  265. package/dist/owner-private-lock.d.ts +95 -0
  266. package/dist/owner-private-lock.d.ts.map +1 -0
  267. package/dist/owner-private-lock.js +566 -0
  268. package/dist/owner-private-lock.js.map +1 -0
  269. package/dist/pi-oauth-login.d.ts +2 -0
  270. package/dist/pi-oauth-login.d.ts.map +1 -1
  271. package/dist/pi-oauth-login.js +39 -5
  272. package/dist/pi-oauth-login.js.map +1 -1
  273. package/dist/posted-message-index.d.ts +35 -16
  274. package/dist/posted-message-index.d.ts.map +1 -1
  275. package/dist/posted-message-index.js +1068 -52
  276. package/dist/posted-message-index.js.map +1 -1
  277. package/dist/posted-reply-history.d.ts +17 -0
  278. package/dist/posted-reply-history.d.ts.map +1 -0
  279. package/dist/posted-reply-history.js +169 -0
  280. package/dist/posted-reply-history.js.map +1 -0
  281. package/dist/proactive-notify.d.ts.map +1 -1
  282. package/dist/proactive-notify.js +6 -4
  283. package/dist/proactive-notify.js.map +1 -1
  284. package/dist/project-skills.d.ts +4 -0
  285. package/dist/project-skills.d.ts.map +1 -1
  286. package/dist/project-skills.js +99 -130
  287. package/dist/project-skills.js.map +1 -1
  288. package/dist/provider-setup.d.ts +0 -1
  289. package/dist/provider-setup.d.ts.map +1 -1
  290. package/dist/provider-setup.js +0 -3
  291. package/dist/provider-setup.js.map +1 -1
  292. package/dist/readiness-probe-worker.d.ts +61 -1
  293. package/dist/readiness-probe-worker.d.ts.map +1 -1
  294. package/dist/readiness-probe-worker.js +54 -58
  295. package/dist/readiness-probe-worker.js.map +1 -1
  296. package/dist/readiness-probe.d.ts +6 -9
  297. package/dist/readiness-probe.d.ts.map +1 -1
  298. package/dist/readiness-probe.js +30 -56
  299. package/dist/readiness-probe.js.map +1 -1
  300. package/dist/redact-secrets.d.ts +15 -0
  301. package/dist/redact-secrets.d.ts.map +1 -0
  302. package/dist/redact-secrets.js +65 -0
  303. package/dist/redact-secrets.js.map +1 -0
  304. package/dist/run-history.js +34 -24
  305. package/dist/run-history.js.map +1 -1
  306. package/dist/runtime-provenance.d.ts +8 -0
  307. package/dist/runtime-provenance.d.ts.map +1 -0
  308. package/dist/runtime-provenance.js +225 -0
  309. package/dist/runtime-provenance.js.map +1 -0
  310. package/dist/sandbox-manager.d.ts +4 -1
  311. package/dist/sandbox-manager.d.ts.map +1 -1
  312. package/dist/sandbox-manager.js +114 -273
  313. package/dist/sandbox-manager.js.map +1 -1
  314. package/dist/secure-file-replace.d.ts +49 -0
  315. package/dist/secure-file-replace.d.ts.map +1 -0
  316. package/dist/secure-file-replace.js +270 -0
  317. package/dist/secure-file-replace.js.map +1 -0
  318. package/dist/seen-conversations.d.ts +32 -5
  319. package/dist/seen-conversations.d.ts.map +1 -1
  320. package/dist/seen-conversations.js +145 -15
  321. package/dist/seen-conversations.js.map +1 -1
  322. package/dist/sessions.d.ts +20 -0
  323. package/dist/sessions.d.ts.map +1 -1
  324. package/dist/sessions.js +41 -6
  325. package/dist/sessions.js.map +1 -1
  326. package/dist/wizard/index.d.ts +2 -2
  327. package/dist/wizard/index.d.ts.map +1 -1
  328. package/dist/wizard/index.js +1 -1
  329. package/dist/wizard/index.js.map +1 -1
  330. package/dist/wizard/presets.d.ts +2 -1
  331. package/dist/wizard/presets.d.ts.map +1 -1
  332. package/dist/wizard/presets.js +2 -1
  333. package/dist/wizard/presets.js.map +1 -1
  334. package/dist/wizard/run.d.ts +0 -26
  335. package/dist/wizard/run.d.ts.map +1 -1
  336. package/dist/wizard/run.js +0 -53
  337. package/dist/wizard/run.js.map +1 -1
  338. package/package.json +22 -17
  339. package/schema/mono-agent.config.schema.json +45 -10
  340. package/skills/mono-agent-composer/SKILL.md +3 -3
  341. package/skills/mono-agent-composer/references/config-blueprint.md +123 -29
  342. package/skills/mono-agent-composer/references/discovery-questions.md +10 -8
  343. package/skills/mono-agent-composer/references/feature-coverage.md +90 -76
  344. package/skills/mono-agent-composer/references/package-map.md +6 -4
  345. package/skills/mono-agent-composer/references/playbooks.md +48 -27
  346. package/skills/mono-agent-composer/references/validation.md +16 -3
  347. package/dist/notify-runtime.d.ts +0 -26
  348. package/dist/notify-runtime.d.ts.map +0 -1
  349. package/dist/notify-runtime.js +0 -27
  350. package/dist/notify-runtime.js.map +0 -1
  351. package/dist/notify-tool.d.ts +0 -51
  352. package/dist/notify-tool.d.ts.map +0 -1
  353. package/dist/notify-tool.js +0 -182
  354. package/dist/notify-tool.js.map +0 -1
  355. package/dist/recipes/base.d.ts +0 -15
  356. package/dist/recipes/base.d.ts.map +0 -1
  357. package/dist/recipes/base.js +0 -51
  358. package/dist/recipes/base.js.map +0 -1
  359. package/dist/recipes/catalog.d.ts +0 -4
  360. package/dist/recipes/catalog.d.ts.map +0 -1
  361. package/dist/recipes/catalog.js +0 -525
  362. package/dist/recipes/catalog.js.map +0 -1
  363. package/dist/recipes/index.d.ts +0 -11
  364. package/dist/recipes/index.d.ts.map +0 -1
  365. package/dist/recipes/index.js +0 -14
  366. package/dist/recipes/index.js.map +0 -1
  367. package/dist/recipes/types.d.ts +0 -70
  368. package/dist/recipes/types.d.ts.map +0 -1
  369. package/dist/recipes/types.js +0 -15
  370. package/dist/recipes/types.js.map +0 -1
  371. package/dist/setup.d.ts +0 -29
  372. package/dist/setup.d.ts.map +0 -1
  373. package/dist/setup.js +0 -97
  374. package/dist/setup.js.map +0 -1
@@ -0,0 +1,198 @@
1
+ import { isAppCoreConfigError, loadAppCoreConfig } from "./app-config.js";
2
+ import { isAdapterSendToolAllowed, resolveAdapterSendToolsSettings, } from "./adapter-send-tools.js";
3
+ import { loadInteractionSettings, startInteractionBridge } from "./interaction-bridge.js";
4
+ import { loadContinuationSettings } from "./continuation-config.js";
5
+ import { ContinuationSynthesisUnavailableError, startContinuationService } from "./continuation-service.js";
6
+ import { channelIdForConversation } from "./proactive-notify.js";
7
+ import { continuationSynthesisPrompt, isActionableContinuationPayload, isPermanentDeliveryReason, normalizeContinuationOrigin, reasonOf, runtimeRouteContainsDirectOpenCode, } from "./app-controller-utils.js";
8
+ export function ensureInteractionBridge(controller, coreConfig) {
9
+ controller.interactionBridgeStart ??= (async () => {
10
+ const directOpenCodeRoute = runtimeRouteContainsDirectOpenCode(coreConfig);
11
+ const settings = await loadInteractionSettings({ env: controller.env, configPath: controller.configReadPath });
12
+ const askUserAllowed = !directOpenCodeRoute && isAdapterSendToolAllowed("AskUser", {
13
+ allowedTools: coreConfig.tools.allowedTools,
14
+ disallowedTools: coreConfig.tools.disallowedTools,
15
+ });
16
+ const telegramAskAllowed = !directOpenCodeRoute && isAdapterSendToolAllowed("TelegramAskButtons", {
17
+ allowedTools: coreConfig.tools.allowedTools,
18
+ disallowedTools: coreConfig.tools.disallowedTools,
19
+ });
20
+ const adapterSendSettings = await resolveAdapterSendToolsSettings({
21
+ env: controller.env,
22
+ cwd: controller.cwd,
23
+ configPath: controller.configReadPath,
24
+ }, {
25
+ allowedTools: coreConfig.tools.allowedTools,
26
+ disallowedTools: coreConfig.tools.disallowedTools,
27
+ suppressInteractionTools: true,
28
+ ...(controller.logger === undefined ? {} : { logger: controller.logger }),
29
+ });
30
+ const deliveryHistoryNeeded = adapterSendSettings?.slack !== undefined
31
+ || adapterSendSettings?.telegram?.tools.send === true;
32
+ const scopedProgressNeeded = settings.progressEnabled
33
+ && (coreConfig.tools.mcpRequestContextServers?.length ?? 0) > 0;
34
+ if (!askUserAllowed && !telegramAskAllowed && !deliveryHistoryNeeded && !scopedProgressNeeded && !settings.configured) {
35
+ return undefined;
36
+ }
37
+ try {
38
+ const bridge = await startInteractionBridge({
39
+ host: settings.host,
40
+ port: settings.port,
41
+ askTimeoutMs: settings.askTimeoutMs,
42
+ recordDeliveryHistory: async (input) => await recordContinuationHistory(controller, input.conversationId, input.text, input.idempotencyKey),
43
+ ...(controller.logger === undefined ? {} : { logger: controller.logger }),
44
+ });
45
+ controller.interactionBridge = bridge;
46
+ controller.logger?.info?.("Interaction bridge started.", { url: bridge.url });
47
+ return bridge;
48
+ }
49
+ catch (error) {
50
+ controller.logger?.warn?.("Interaction bridge failed to start; AskUser, adapter history, and tool progress are unavailable.", {
51
+ reason: reasonOf(error),
52
+ });
53
+ return undefined;
54
+ }
55
+ })();
56
+ return controller.interactionBridgeStart;
57
+ }
58
+ export async function stopInteractionBridge(controller) {
59
+ const bridge = controller.interactionBridge;
60
+ controller.interactionBridge = undefined;
61
+ controller.interactionBridgeStart = undefined;
62
+ await bridge?.stop().catch(() => undefined);
63
+ }
64
+ export function ensureContinuationService(controller, coreConfig) {
65
+ controller.continuationServiceStart ??= (async () => {
66
+ const settings = await loadContinuationSettings({ cwd: controller.cwd, configPath: controller.configReadPath, env: controller.env });
67
+ const needed = settings.configured || (coreConfig.tools.continuationServers?.length ?? 0) > 0;
68
+ if (!needed) {
69
+ return undefined;
70
+ }
71
+ if (!settings.enabled) {
72
+ throw new Error("Continuation service is disabled while continuation functionality is configured.");
73
+ }
74
+ try {
75
+ const service = await startContinuationService({
76
+ cwd: controller.cwd,
77
+ stateDir: settings.stateDir,
78
+ host: settings.host,
79
+ port: settings.port,
80
+ namedRoutes: settings.namedRoutes,
81
+ detachedServices: settings.detachedServices,
82
+ retention: settings.retention,
83
+ limits: settings.limits,
84
+ synthesisPreflight: (input) => controller.continuationSynthesisAvailability(input),
85
+ synthesize: async (input) => await controller.synthesizeContinuation(input),
86
+ deliver: async (input) => await controller.deliverContinuation(input.conversationId, input.text, input.deliveryKey),
87
+ recordHistory: async (input) => await controller.recordContinuationHistory(input.conversationId, input.text, input.deliveryKey),
88
+ ...(controller.logger === undefined ? {} : { logger: controller.logger }),
89
+ });
90
+ controller.continuationService = service;
91
+ controller.logger?.info?.("Durable continuation service started.", { url: service.url });
92
+ return service;
93
+ }
94
+ catch (error) {
95
+ controller.logger?.error?.("Durable continuation service failed to start.", { reason: reasonOf(error) });
96
+ throw error;
97
+ }
98
+ })();
99
+ return controller.continuationServiceStart;
100
+ }
101
+ export async function startContinuationServiceIfConfigured(controller, reason) {
102
+ if (controller.stopped)
103
+ return;
104
+ let coreConfig;
105
+ try {
106
+ coreConfig = await loadAppCoreConfig({ env: controller.env, cwd: controller.cwd, configPath: controller.configReadPath });
107
+ }
108
+ catch (error) {
109
+ if (isAppCoreConfigError(error)) {
110
+ controller.logger?.debug?.("Continuation service is waiting for valid core configuration.", { reason });
111
+ return;
112
+ }
113
+ throw error;
114
+ }
115
+ await controller.ensureContinuationService(coreConfig);
116
+ controller.logger?.debug?.("Continuation service configuration evaluated.", { reason });
117
+ }
118
+ export async function stopContinuationService(controller) {
119
+ const service = controller.continuationService;
120
+ controller.continuationService = undefined;
121
+ controller.continuationServiceStart = undefined;
122
+ await service?.stop().catch(() => undefined);
123
+ }
124
+ export function requireContinuationService(controller) {
125
+ if (controller.continuationService === undefined)
126
+ throw new Error("Durable continuation service is not running.");
127
+ return controller.continuationService;
128
+ }
129
+ export async function synthesizeContinuation(controller, input) {
130
+ const conversationId = input.replyToConversationId ?? normalizeContinuationOrigin(input.originConversationId);
131
+ const channelId = channelIdForConversation(conversationId);
132
+ const channel = channelId === undefined ? undefined : controller.running.get(channelId);
133
+ if (channel?.synthesizeContinuation === undefined) {
134
+ // This is a lifecycle/readiness miss before the responder is invoked, so
135
+ // the durable service may safely requeue without consuming a model attempt.
136
+ throw new ContinuationSynthesisUnavailableError("destination_channel_unavailable", `Destination channel is not ready to synthesize durable continuations: ${channelId ?? "unknown"}.`, 1_000);
137
+ }
138
+ const result = await channel.synthesizeContinuation({
139
+ continuationId: input.continuationId,
140
+ originRunId: input.originRunId,
141
+ ...(input.historyBoundary === undefined ? {} : { historyBoundary: input.historyBoundary }),
142
+ originContextPolicy: input.originContextPolicy,
143
+ ...(input.originContext === undefined ? {} : { originContext: input.originContext }),
144
+ originConversationId: input.originConversationId,
145
+ replyToConversationId: conversationId,
146
+ prompt: continuationSynthesisPrompt(input.payload, input.mode),
147
+ });
148
+ if (result.kind === "unavailable") {
149
+ throw new ContinuationSynthesisUnavailableError(result.code, result.reason, result.retryAfterMs);
150
+ }
151
+ const text = result.text;
152
+ const actionable = input.mode === "notify_if_actionable" ? isActionableContinuationPayload(input.payload) : undefined;
153
+ return { text, ...(actionable === undefined ? {} : { actionable }) };
154
+ }
155
+ export function continuationSynthesisAvailability(controller, input) {
156
+ const conversationId = input.replyToConversationId ?? normalizeContinuationOrigin(input.originConversationId);
157
+ const channelId = channelIdForConversation(conversationId);
158
+ const channel = channelId === undefined ? undefined : controller.running.get(channelId);
159
+ if (channel?.synthesizeContinuation !== undefined)
160
+ return { ready: true };
161
+ return {
162
+ ready: false,
163
+ code: "destination_channel_unavailable",
164
+ reason: `Destination channel is not ready to synthesize durable continuations: ${channelId ?? "unknown"}.`,
165
+ retryAfterMs: 1_000,
166
+ };
167
+ }
168
+ export async function deliverContinuation(controller, conversationId, text, deliveryKey) {
169
+ const result = await controller.notifyDestination(conversationId, text, { verbatim: true, deliveryKey });
170
+ if (result.delivered) {
171
+ return {
172
+ kind: "delivered",
173
+ code: "delivered",
174
+ ...(result.deliveryId === undefined ? {} : { deliveryId: result.deliveryId }),
175
+ ...(result.channelId === undefined ? {} : { channelId: result.channelId }),
176
+ ...(result.historyRecorded === undefined ? {} : { historyRecorded: result.historyRecorded }),
177
+ ...(result.historyRecorded !== false || result.historyErrorCode === undefined
178
+ ? {}
179
+ : { historyErrorCode: result.historyErrorCode }),
180
+ };
181
+ }
182
+ const reason = result.reason ?? "Native continuation delivery failed.";
183
+ const code = result.code ?? "delivery_failed";
184
+ if (result.ambiguous === true)
185
+ return { kind: "unknown", code, reason };
186
+ if (result.retryable === false || isPermanentDeliveryReason(reason))
187
+ return { kind: "permanent", code, reason };
188
+ return { kind: "retryable", code, reason };
189
+ }
190
+ export async function recordContinuationHistory(controller, conversationId, text, deliveryKey) {
191
+ const channelId = channelIdForConversation(conversationId);
192
+ const channel = channelId === undefined ? undefined : controller.running.get(channelId);
193
+ if (channel?.recordContinuationHistory === undefined) {
194
+ return { recorded: false, code: "history_record_channel_unavailable" };
195
+ }
196
+ return await channel.recordContinuationHistory({ conversationId, text, deliveryKey });
197
+ }
198
+ //# sourceMappingURL=app-controller-continuation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-controller-continuation.js","sourceRoot":"","sources":["../src/app-controller-continuation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { ChannelId, ChannelStatus } from "./channels.js";
2
+ import type { ConfigApplyResult, MonoAgentAppController } from "./app-controller.js";
3
+ export declare function applyConfigChange(controller: MonoAgentAppController, reason: string): Promise<ConfigApplyResult>;
4
+ export declare function startChannelIfConfigured(controller: MonoAgentAppController, id: ChannelId, reason: string): Promise<ChannelStatus>;
5
+ export declare function stop(controller: MonoAgentAppController): Promise<void>;
6
+ //# sourceMappingURL=app-controller-lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-controller-lifecycle.d.ts","sourceRoot":"","sources":["../src/app-controller-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAErF,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAyCtH;AAED,wBAAsB,wBAAwB,CAAC,UAAU,EAAE,sBAAsB,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAqBxI;AAED,wBAAsB,IAAI,CAAC,UAAU,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB5E"}
@@ -0,0 +1,81 @@
1
+ export async function applyConfigChange(controller, reason) {
2
+ const run = async () => {
3
+ if (controller.stopped) {
4
+ return {
5
+ kind: "failed",
6
+ message: "Mono agent app has already stopped.",
7
+ transports: [],
8
+ };
9
+ }
10
+ // Freeze periodic memory work before any channel/store teardown. A probe
11
+ // that already entered is generation-fenced and is deliberately not
12
+ // awaited, so config reload cannot hang behind native/filesystem work.
13
+ controller.invalidateMemoryHealthRefresh();
14
+ for (const driver of controller.drivers) {
15
+ await controller.stopChannel(driver.id, `${reason}:reload`);
16
+ }
17
+ await controller.stopContinuationService();
18
+ // Tool policy/runtime-family changes must re-evaluate implicit AskUser.
19
+ // Clearing the cached promise also prevents stale bridge env from a Pi
20
+ // config leaking into a reloaded direct-OpenCode responder.
21
+ await controller.stopInteractionBridge();
22
+ controller.stopMemoryRituals();
23
+ controller.stopArtifactRetentionScheduler();
24
+ await controller.resetSharedMemory();
25
+ await controller.stopTraceSource(`${reason}:reload`);
26
+ await controller.refreshSandboxStatus(reason);
27
+ await controller.startTraceability(reason);
28
+ await controller.startExporters(reason);
29
+ await controller.startContinuationServiceIfConfigured(reason);
30
+ await Promise.all(controller.drivers.map((driver) => controller.startChannelIfConfigured(driver.id, reason)));
31
+ await controller.startMemoryRitualsIfConfigured(reason);
32
+ await controller.refreshMemoryHealthAfterLifecycle(`${reason}:complete`);
33
+ return controller.applyResult();
34
+ };
35
+ const next = controller.configApplyTail.then(run, run);
36
+ controller.configApplyTail = next.then(() => undefined, () => undefined);
37
+ return await next;
38
+ }
39
+ export async function startChannelIfConfigured(controller, id, reason) {
40
+ const driver = controller.driversById.get(id);
41
+ if (driver === undefined || controller.stopped) {
42
+ return controller.channelStatus(id);
43
+ }
44
+ if (controller.running.has(id)) {
45
+ await controller.refreshTraceSource(reason);
46
+ return controller.channelStatus(id);
47
+ }
48
+ const inFlight = controller.startsInFlight.get(id);
49
+ if (inFlight !== undefined) {
50
+ return await inFlight;
51
+ }
52
+ const start = controller.startChannel(driver, reason).finally(() => {
53
+ controller.startsInFlight.delete(id);
54
+ });
55
+ controller.startsInFlight.set(id, start);
56
+ const status = await start;
57
+ await controller.refreshTraceSource(reason);
58
+ return status;
59
+ }
60
+ export async function stop(controller) {
61
+ if (controller.stopped) {
62
+ return;
63
+ }
64
+ controller.stopped = true;
65
+ // Stop the periodic audit before the first teardown await. Already-entered
66
+ // computation is generation-fenced and must never delay shutdown.
67
+ controller.invalidateMemoryHealthRefresh();
68
+ for (const driver of controller.drivers) {
69
+ await controller.stopChannel(driver.id, "stop");
70
+ }
71
+ await controller.stopContinuationService();
72
+ await controller.stopInteractionBridge();
73
+ controller.stopMemoryRituals();
74
+ controller.stopArtifactRetentionScheduler();
75
+ await controller.resetSharedMemory();
76
+ await controller.stopTraceSource("stop");
77
+ for (const runtime of controller.activeRuntimes.splice(0)) {
78
+ await runtime.disposeAllSessions?.().catch(() => undefined);
79
+ }
80
+ }
81
+ //# sourceMappingURL=app-controller-lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-controller-lifecycle.js","sourceRoot":"","sources":["../src/app-controller-lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { NotifyDeliveryResult } from "./proactive-notify.js";
2
+ import type { NotifyDestination } from "./notify-destinations.js";
3
+ import type { MonoAgentAppController } from "./app-controller.js";
4
+ export declare function startMemoryRitualsIfConfigured(controller: MonoAgentAppController, reason: string): Promise<void>;
5
+ export declare function stopMemoryRituals(controller: MonoAgentAppController): void;
6
+ export declare function restartArtifactRetentionScheduler(controller: MonoAgentAppController, artifactDir: string, reason: string): void;
7
+ export declare function stopArtifactRetentionScheduler(controller: MonoAgentAppController): void;
8
+ export declare function notifyDestination(controller: MonoAgentAppController, conversationId: string, text: string, options?: {
9
+ readonly verbatim?: boolean;
10
+ readonly deliveryKey?: string;
11
+ }): Promise<NotifyDeliveryResult>;
12
+ export declare function listNotifyDestinations(controller: MonoAgentAppController): Promise<readonly NotifyDestination[]>;
13
+ //# sourceMappingURL=app-controller-maintenance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-controller-maintenance.d.ts","sourceRoot":"","sources":["../src/app-controller-maintenance.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAIlE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAElE,wBAAsB,8BAA8B,CAAC,UAAU,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmEtH;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,sBAAsB,GAAG,IAAI,CAe1E;AAED,wBAAgB,iCAAiC,CAAC,UAAU,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAmD/H;AAED,wBAAgB,8BAA8B,CAAC,UAAU,EAAE,sBAAsB,GAAG,IAAI,CAgBvF;AAED,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,sBAAsB,EAClC,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACvE,OAAO,CAAC,oBAAoB,CAAC,CAe/B;AAED,wBAAsB,sBAAsB,CAAC,UAAU,EAAE,sBAAsB,GAAG,OAAO,CAAC,SAAS,iBAAiB,EAAE,CAAC,CAWtH"}
@@ -0,0 +1,180 @@
1
+ import { DEFAULT_MEMORY_FORGET_BACKUP_MAX_AGE_DAYS, DEFAULT_MEMORY_FORGET_BACKUP_MAX_COUNT, } from "@mono-agent/memory/bujo";
2
+ import { loadAppCoreConfig, resolveAppArtifactDir } from "./app-config.js";
3
+ import { createConfiguredAgentRuntime } from "./configured-agent.js";
4
+ import { routeProactiveNotification } from "./proactive-notify.js";
5
+ import { startMemoryRituals } from "./memory-rituals.js";
6
+ import { startArtifactRetentionScheduler } from "./artifact-retention.js";
7
+ import { resolveNotifyDestinations } from "./notify-destinations.js";
8
+ import { reasonOf } from "./app-controller-utils.js";
9
+ export async function startMemoryRitualsIfConfigured(controller, reason) {
10
+ if (controller.stopped) {
11
+ return;
12
+ }
13
+ let coreConfig;
14
+ try {
15
+ const input = { env: controller.env, cwd: controller.cwd, configPath: controller.configReadPath };
16
+ coreConfig = await loadAppCoreConfig(input);
17
+ controller.rememberSelectedSkills(coreConfig);
18
+ }
19
+ catch {
20
+ // Config not ready yet — consolidation will start on the next applyConfigChange.
21
+ return;
22
+ }
23
+ if (coreConfig.memory?.mode !== "bujo") {
24
+ return;
25
+ }
26
+ const runtime = controller.runtime ?? createConfiguredAgentRuntime({
27
+ config: coreConfig,
28
+ ...(controller.sandboxEngine === undefined ? {} : { sandboxEngine: controller.sandboxEngine }),
29
+ });
30
+ if (!controller.activeRuntimes.includes(runtime)) {
31
+ controller.activeRuntimes.push(runtime);
32
+ }
33
+ const store = await controller.memoryStore(coreConfig);
34
+ // Duck-type: only bujo-tier BujoMemoryStore has consolidate().
35
+ // Cast through unknown to bypass the MemoryStore contract's type mismatch.
36
+ const storeAsAny = store;
37
+ if (store === undefined ||
38
+ typeof storeAsAny["consolidate"] !== "function" ||
39
+ typeof storeAsAny["tier"] !== "function") {
40
+ controller.logger?.info?.("Memory consolidation scheduler skipped — store does not support consolidate().", { reason });
41
+ return;
42
+ }
43
+ const bujoStore = store;
44
+ // `memory.mode` is "bujo", but the store derives the runtime tier from its options: without a
45
+ // `memory.llm` it downgrades to "journal", where startMemoryRituals is a no-op. Don't claim the
46
+ // scheduler started in that case — log an accurate skip instead.
47
+ const tier = bujoStore.tier();
48
+ if (tier !== "bujo") {
49
+ controller.logger?.info?.("Memory consolidation scheduler skipped — configured bujo mode resolved to the journal tier because memory.llm is missing.", { reason, tier });
50
+ return;
51
+ }
52
+ controller.memoryRituals = startMemoryRituals({
53
+ store: bujoStore,
54
+ ...(coreConfig.memory.consolidation !== undefined && { consolidation: coreConfig.memory.consolidation }),
55
+ ...(controller.logger !== undefined && {
56
+ logger: {
57
+ info: (m) => controller.logger?.info?.(m),
58
+ warn: (m) => controller.logger?.warn?.(m),
59
+ },
60
+ }),
61
+ });
62
+ controller.logger?.info?.("Memory consolidation scheduler started.", { reason, mode: "bujo" });
63
+ }
64
+ export function stopMemoryRituals(controller) {
65
+ const rituals = controller.memoryRituals;
66
+ if (rituals === undefined) {
67
+ return;
68
+ }
69
+ controller.memoryRituals = undefined;
70
+ try {
71
+ rituals.stop();
72
+ }
73
+ catch (error) {
74
+ controller.logger?.warn?.("Memory consolidation scheduler did not stop cleanly.", {
75
+ reason: reasonOf(error),
76
+ });
77
+ return;
78
+ }
79
+ controller.logger?.info?.("Memory consolidation scheduler stopped.");
80
+ }
81
+ export function restartArtifactRetentionScheduler(controller, artifactDir, reason) {
82
+ controller.stopArtifactRetentionScheduler();
83
+ const generation = ++controller.artifactRetentionGeneration;
84
+ void (async () => {
85
+ let coreConfig;
86
+ try {
87
+ const input = { env: controller.env, cwd: controller.cwd, configPath: controller.configReadPath };
88
+ coreConfig = await loadAppCoreConfig(input);
89
+ controller.rememberSelectedSkills(coreConfig);
90
+ }
91
+ catch (error) {
92
+ controller.logger?.warn?.("Artifact retention scheduler skipped until core config loads.", { reason: reasonOf(error) });
93
+ void controller.reconcileStaleRunsOnce(artifactDir);
94
+ return;
95
+ }
96
+ if (controller.stopped || generation !== controller.artifactRetentionGeneration) {
97
+ return;
98
+ }
99
+ controller.artifactRetentionScheduler = startArtifactRetentionScheduler({
100
+ artifactDir,
101
+ retention: coreConfig.artifacts.retention,
102
+ memoryRetention: coreConfig.artifacts.memoryRetention,
103
+ ...(coreConfig.memory === undefined || coreConfig.memory.backend === "supermemory"
104
+ ? {}
105
+ : { memoryRoot: coreConfig.memory.path }),
106
+ ...(controller.logger === undefined ? {} : { logger: controller.logger }),
107
+ beforeFirstRun: () => controller.reconcileStaleRunsOnce(artifactDir),
108
+ });
109
+ controller.logger?.info?.("Artifact retention scheduler started.", {
110
+ reason,
111
+ artifactDir,
112
+ agent: {
113
+ maxAgeDays: coreConfig.artifacts.retention.maxAgeDays,
114
+ maxCount: coreConfig.artifacts.retention.maxCount,
115
+ dryRun: coreConfig.artifacts.retention.dryRun,
116
+ },
117
+ memory: {
118
+ maxAgeDays: coreConfig.artifacts.memoryRetention.maxAgeDays,
119
+ maxCount: coreConfig.artifacts.memoryRetention.maxCount,
120
+ dryRun: coreConfig.artifacts.memoryRetention.dryRun,
121
+ },
122
+ forgetBackups: coreConfig.memory === undefined || coreConfig.memory.backend === "supermemory"
123
+ ? { enabled: false }
124
+ : {
125
+ enabled: true,
126
+ memoryRoot: coreConfig.memory.path,
127
+ maxAgeDays: DEFAULT_MEMORY_FORGET_BACKUP_MAX_AGE_DAYS,
128
+ maxCount: DEFAULT_MEMORY_FORGET_BACKUP_MAX_COUNT,
129
+ dryRun: coreConfig.artifacts.memoryRetention.dryRun,
130
+ },
131
+ });
132
+ })();
133
+ }
134
+ export function stopArtifactRetentionScheduler(controller) {
135
+ controller.artifactRetentionGeneration += 1;
136
+ const scheduler = controller.artifactRetentionScheduler;
137
+ if (scheduler === undefined) {
138
+ return;
139
+ }
140
+ controller.artifactRetentionScheduler = undefined;
141
+ try {
142
+ scheduler.stop();
143
+ }
144
+ catch (error) {
145
+ controller.logger?.warn?.("Artifact retention scheduler did not stop cleanly.", {
146
+ reason: reasonOf(error),
147
+ });
148
+ return;
149
+ }
150
+ controller.logger?.info?.("Artifact retention scheduler stopped.");
151
+ }
152
+ export async function notifyDestination(controller, conversationId, text, options) {
153
+ const result = await routeProactiveNotification({
154
+ conversationId,
155
+ text,
156
+ running: controller.running,
157
+ ...(options?.verbatim === undefined ? {} : { verbatim: options.verbatim }),
158
+ ...(options?.deliveryKey === undefined ? {} : { deliveryKey: options.deliveryKey }),
159
+ ...(controller.logger === undefined ? {} : { logger: controller.logger }),
160
+ });
161
+ // Make the delivery outcome inspectable (the failure cases already warn inside
162
+ // the router / channel hooks; log the success path too so a notify is auditable).
163
+ if (result.delivered) {
164
+ controller.logger?.info?.("Proactive notification delivered.", { conversationId });
165
+ }
166
+ return result;
167
+ }
168
+ export async function listNotifyDestinations(controller) {
169
+ const input = { env: controller.env, cwd: controller.cwd, configPath: controller.configReadPath };
170
+ const artifactDir = await resolveAppArtifactDir(input);
171
+ const seenDestinations = await controller.seenNotifyDestinations.list(artifactDir);
172
+ return await resolveNotifyDestinations({
173
+ input,
174
+ artifactDir,
175
+ seenDestinations,
176
+ isRunning: (id) => controller.running.has(id),
177
+ ...(controller.logger === undefined ? {} : { logger: controller.logger }),
178
+ });
179
+ }
180
+ //# sourceMappingURL=app-controller-maintenance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-controller-maintenance.js","sourceRoot":"","sources":["../src/app-controller-maintenance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { TraceSourceMemoryHealth } from "@mono-agent/observability";
2
+ import type { MonoAgentAppController } from "./app-controller.js";
3
+ export declare function refreshMemoryHealthSnapshot(controller: MonoAgentAppController, reason: string, lifecycleForce?: boolean): Promise<TraceSourceMemoryHealth>;
4
+ export declare function computeMemoryHealth(controller: MonoAgentAppController): Promise<TraceSourceMemoryHealth>;
5
+ export declare function startMemoryHealthRefreshLoop(controller: MonoAgentAppController, intervalMs: number): void;
6
+ export declare function scheduleMemoryHealthRefresh(controller: MonoAgentAppController, delayOverrideMs?: number): void;
7
+ export declare function recordMemoryHealthCompletion(controller: MonoAgentAppController, generation: number): void;
8
+ export declare function refreshMemoryHealthOnTimer(controller: MonoAgentAppController): void;
9
+ export declare function refreshMemoryHealthAfterLifecycle(controller: MonoAgentAppController, reason: string): Promise<void>;
10
+ export declare function clearMemoryHealthRefreshTimer(controller: MonoAgentAppController): void;
11
+ export declare function invalidateMemoryHealthRefresh(controller: MonoAgentAppController): void;
12
+ //# sourceMappingURL=app-controller-memory-health.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-controller-memory-health.d.ts","sourceRoot":"","sources":["../src/app-controller-memory-health.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAQzE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAIlE,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,UAAQ,GAAG,OAAO,CAAC,uBAAuB,CAAC,CA4CxJ;AAED,wBAAsB,mBAAmB,CAAC,UAAU,EAAE,sBAAsB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAqC9G;AAED,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAIzG;AAED,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,sBAAsB,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAY9G;AAED,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAOzG;AAED,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,sBAAsB,GAAG,IAAI,CAcnF;AAED,wBAAsB,iCAAiC,CAAC,UAAU,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUzH;AAED,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,sBAAsB,GAAG,IAAI,CAKtF;AAED,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,sBAAsB,GAAG,IAAI,CAOtF"}