@mono-agent/agent-app 0.20.11 → 0.21.0

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 (369) hide show
  1. package/README.md +260 -98
  2. package/dist/adapter-send-tools.d.ts +3 -2
  3. package/dist/adapter-send-tools.d.ts.map +1 -1
  4. package/dist/adapter-send-tools.js +15 -5
  5. package/dist/adapter-send-tools.js.map +1 -1
  6. package/dist/app-controller-channels.d.ts +6 -0
  7. package/dist/app-controller-channels.d.ts.map +1 -1
  8. package/dist/app-controller-channels.js +29 -2
  9. package/dist/app-controller-channels.js.map +1 -1
  10. package/dist/app-controller-continuation.d.ts.map +1 -1
  11. package/dist/app-controller-continuation.js +2 -3
  12. package/dist/app-controller-continuation.js.map +1 -1
  13. package/dist/app-controller-lifecycle.d.ts +4 -0
  14. package/dist/app-controller-lifecycle.d.ts.map +1 -1
  15. package/dist/app-controller-lifecycle.js +7 -0
  16. package/dist/app-controller-lifecycle.js.map +1 -1
  17. package/dist/app-controller-maintenance.d.ts +3 -1
  18. package/dist/app-controller-maintenance.d.ts.map +1 -1
  19. package/dist/app-controller-maintenance.js +3 -0
  20. package/dist/app-controller-maintenance.js.map +1 -1
  21. package/dist/app-controller-monitors.d.ts +26 -0
  22. package/dist/app-controller-monitors.d.ts.map +1 -0
  23. package/dist/app-controller-monitors.js +127 -0
  24. package/dist/app-controller-monitors.js.map +1 -0
  25. package/dist/app-controller-responder.d.ts +9 -17
  26. package/dist/app-controller-responder.d.ts.map +1 -1
  27. package/dist/app-controller-responder.js +54 -86
  28. package/dist/app-controller-responder.js.map +1 -1
  29. package/dist/app-controller-traceability.d.ts.map +1 -1
  30. package/dist/app-controller-traceability.js +3 -0
  31. package/dist/app-controller-traceability.js.map +1 -1
  32. package/dist/app-controller-types.d.ts +1 -0
  33. package/dist/app-controller-types.d.ts.map +1 -1
  34. package/dist/app-controller-utils.d.ts +1 -5
  35. package/dist/app-controller-utils.d.ts.map +1 -1
  36. package/dist/app-controller-utils.js +4 -21
  37. package/dist/app-controller-utils.js.map +1 -1
  38. package/dist/app-controller.d.ts +26 -10
  39. package/dist/app-controller.d.ts.map +1 -1
  40. package/dist/app-controller.js +39 -1
  41. package/dist/app-controller.js.map +1 -1
  42. package/dist/artifact-retention.js +11 -0
  43. package/dist/artifact-retention.js.map +1 -1
  44. package/dist/background.d.ts +0 -6
  45. package/dist/background.d.ts.map +1 -1
  46. package/dist/background.js +5 -58
  47. package/dist/background.js.map +1 -1
  48. package/dist/channel-drivers/slack.d.ts.map +1 -1
  49. package/dist/channel-drivers/slack.js +18 -0
  50. package/dist/channel-drivers/slack.js.map +1 -1
  51. package/dist/channel-drivers/telegram.d.ts.map +1 -1
  52. package/dist/channel-drivers/telegram.js +26 -0
  53. package/dist/channel-drivers/telegram.js.map +1 -1
  54. package/dist/channel-drivers/tui.d.ts +68 -8
  55. package/dist/channel-drivers/tui.d.ts.map +1 -1
  56. package/dist/channel-drivers/tui.js +407 -89
  57. package/dist/channel-drivers/tui.js.map +1 -1
  58. package/dist/channel-runtime-controls.d.ts +2 -1
  59. package/dist/channel-runtime-controls.d.ts.map +1 -1
  60. package/dist/channel-runtime-controls.js +79 -22
  61. package/dist/channel-runtime-controls.js.map +1 -1
  62. package/dist/cli-args.d.ts +5 -8
  63. package/dist/cli-args.d.ts.map +1 -1
  64. package/dist/cli-args.js +33 -52
  65. package/dist/cli-args.js.map +1 -1
  66. package/dist/cli-background-command.d.ts.map +1 -1
  67. package/dist/cli-background-command.js +4 -0
  68. package/dist/cli-background-command.js.map +1 -1
  69. package/dist/cli-commands.d.ts.map +1 -1
  70. package/dist/cli-commands.js +24 -2
  71. package/dist/cli-commands.js.map +1 -1
  72. package/dist/cli-help.d.ts +26 -0
  73. package/dist/cli-help.d.ts.map +1 -1
  74. package/dist/cli-help.js +58 -53
  75. package/dist/cli-help.js.map +1 -1
  76. package/dist/cli-init-command.d.ts +1 -2
  77. package/dist/cli-init-command.d.ts.map +1 -1
  78. package/dist/cli-init-command.js +31 -71
  79. package/dist/cli-init-command.js.map +1 -1
  80. package/dist/cli-install-skill-command.d.ts.map +1 -1
  81. package/dist/cli-install-skill-command.js +12 -3
  82. package/dist/cli-install-skill-command.js.map +1 -1
  83. package/dist/config-reference.d.ts +1 -0
  84. package/dist/config-reference.d.ts.map +1 -1
  85. package/dist/config-reference.js +217 -60
  86. package/dist/config-reference.js.map +1 -1
  87. package/dist/configured-agent.d.ts +27 -4
  88. package/dist/configured-agent.d.ts.map +1 -1
  89. package/dist/configured-agent.js +159 -112
  90. package/dist/configured-agent.js.map +1 -1
  91. package/dist/conversation-title.d.ts.map +1 -1
  92. package/dist/conversation-title.js +9 -2
  93. package/dist/conversation-title.js.map +1 -1
  94. package/dist/cron-control-store.d.ts.map +1 -1
  95. package/dist/cron-control-store.js +4 -2
  96. package/dist/cron-control-store.js.map +1 -1
  97. package/dist/doctor.d.ts +7 -13
  98. package/dist/doctor.d.ts.map +1 -1
  99. package/dist/doctor.js +406 -770
  100. package/dist/doctor.js.map +1 -1
  101. package/dist/first-run-readiness.d.ts.map +1 -1
  102. package/dist/first-run-readiness.js +0 -6
  103. package/dist/first-run-readiness.js.map +1 -1
  104. package/dist/index.d.ts +2 -0
  105. package/dist/index.d.ts.map +1 -1
  106. package/dist/index.js +1 -0
  107. package/dist/index.js.map +1 -1
  108. package/dist/interaction-bridge.d.ts +3 -3
  109. package/dist/interaction-bridge.d.ts.map +1 -1
  110. package/dist/interaction-bridge.js +27 -10
  111. package/dist/interaction-bridge.js.map +1 -1
  112. package/dist/launchd.d.ts +2 -0
  113. package/dist/launchd.d.ts.map +1 -1
  114. package/dist/launchd.js +3 -0
  115. package/dist/launchd.js.map +1 -1
  116. package/dist/local-tui-session.d.ts +14 -0
  117. package/dist/local-tui-session.d.ts.map +1 -0
  118. package/dist/local-tui-session.js +100 -0
  119. package/dist/local-tui-session.js.map +1 -0
  120. package/dist/mcp-apps.d.ts.map +1 -1
  121. package/dist/mcp-apps.js +3 -0
  122. package/dist/mcp-apps.js.map +1 -1
  123. package/dist/memory-journal.d.ts +53 -0
  124. package/dist/memory-journal.d.ts.map +1 -0
  125. package/dist/memory-journal.js +586 -0
  126. package/dist/memory-journal.js.map +1 -0
  127. package/dist/memory-recall.d.ts.map +1 -1
  128. package/dist/memory-recall.js +16 -2
  129. package/dist/memory-recall.js.map +1 -1
  130. package/dist/memory-remember.d.ts +49 -0
  131. package/dist/memory-remember.d.ts.map +1 -0
  132. package/dist/memory-remember.js +190 -0
  133. package/dist/memory-remember.js.map +1 -0
  134. package/dist/memory-retrieval.d.ts +33 -0
  135. package/dist/memory-retrieval.d.ts.map +1 -1
  136. package/dist/memory-retrieval.js +43 -0
  137. package/dist/memory-retrieval.js.map +1 -1
  138. package/dist/model-effort-capabilities.d.ts +8 -9
  139. package/dist/model-effort-capabilities.d.ts.map +1 -1
  140. package/dist/model-effort-capabilities.js +17 -35
  141. package/dist/model-effort-capabilities.js.map +1 -1
  142. package/dist/modules/base.d.ts +3 -4
  143. package/dist/modules/base.d.ts.map +1 -1
  144. package/dist/modules/base.js +4 -6
  145. package/dist/modules/base.js.map +1 -1
  146. package/dist/modules/catalog.d.ts.map +1 -1
  147. package/dist/modules/catalog.js +11 -9
  148. package/dist/modules/catalog.js.map +1 -1
  149. package/dist/modules/known-tools.d.ts +2 -2
  150. package/dist/modules/known-tools.d.ts.map +1 -1
  151. package/dist/modules/known-tools.js +7 -0
  152. package/dist/modules/known-tools.js.map +1 -1
  153. package/dist/monitor-channel-routing.d.ts +20 -0
  154. package/dist/monitor-channel-routing.d.ts.map +1 -0
  155. package/dist/monitor-channel-routing.js +73 -0
  156. package/dist/monitor-channel-routing.js.map +1 -0
  157. package/dist/monitors-command.d.ts +23 -0
  158. package/dist/monitors-command.d.ts.map +1 -0
  159. package/dist/monitors-command.js +217 -0
  160. package/dist/monitors-command.js.map +1 -0
  161. package/dist/monitors-config.d.ts +77 -0
  162. package/dist/monitors-config.d.ts.map +1 -0
  163. package/dist/monitors-config.js +150 -0
  164. package/dist/monitors-config.js.map +1 -0
  165. package/dist/monitors-context.d.ts +58 -0
  166. package/dist/monitors-context.d.ts.map +1 -0
  167. package/dist/monitors-context.js +194 -0
  168. package/dist/monitors-context.js.map +1 -0
  169. package/dist/monitors-runtime.d.ts +36 -0
  170. package/dist/monitors-runtime.d.ts.map +1 -0
  171. package/dist/monitors-runtime.js +103 -0
  172. package/dist/monitors-runtime.js.map +1 -0
  173. package/dist/monitors-service.d.ts +71 -0
  174. package/dist/monitors-service.d.ts.map +1 -0
  175. package/dist/monitors-service.js +1796 -0
  176. package/dist/monitors-service.js.map +1 -0
  177. package/dist/monitors-store.d.ts +93 -0
  178. package/dist/monitors-store.d.ts.map +1 -0
  179. package/dist/monitors-store.js +313 -0
  180. package/dist/monitors-store.js.map +1 -0
  181. package/dist/notify-destinations.d.ts +3 -2
  182. package/dist/notify-destinations.d.ts.map +1 -1
  183. package/dist/notify-destinations.js +6 -7
  184. package/dist/notify-destinations.js.map +1 -1
  185. package/dist/posted-reply-history.d.ts.map +1 -1
  186. package/dist/posted-reply-history.js +40 -3
  187. package/dist/posted-reply-history.js.map +1 -1
  188. package/dist/proactive-notify.d.ts +20 -1
  189. package/dist/proactive-notify.d.ts.map +1 -1
  190. package/dist/proactive-notify.js +56 -3
  191. package/dist/proactive-notify.js.map +1 -1
  192. package/dist/process-job-channel-routing.js +2 -1
  193. package/dist/process-job-channel-routing.js.map +1 -1
  194. package/dist/process-job-output-tail.d.ts +53 -0
  195. package/dist/process-job-output-tail.d.ts.map +1 -0
  196. package/dist/process-job-output-tail.js +257 -0
  197. package/dist/process-job-output-tail.js.map +1 -0
  198. package/dist/process-jobs-config.d.ts +1 -1
  199. package/dist/process-jobs-config.js +1 -1
  200. package/dist/process-jobs-config.js.map +1 -1
  201. package/dist/process-jobs-context.d.ts +11 -1
  202. package/dist/process-jobs-context.d.ts.map +1 -1
  203. package/dist/process-jobs-context.js +55 -11
  204. package/dist/process-jobs-context.js.map +1 -1
  205. package/dist/process-jobs-protection.js +1 -1
  206. package/dist/process-jobs-protection.js.map +1 -1
  207. package/dist/process-jobs-runtime.d.ts.map +1 -1
  208. package/dist/process-jobs-runtime.js +15 -12
  209. package/dist/process-jobs-runtime.js.map +1 -1
  210. package/dist/process-jobs-service.d.ts.map +1 -1
  211. package/dist/process-jobs-service.js +118 -172
  212. package/dist/process-jobs-service.js.map +1 -1
  213. package/dist/process-jobs-store.d.ts +3 -1
  214. package/dist/process-jobs-store.d.ts.map +1 -1
  215. package/dist/process-jobs-store.js +4 -1
  216. package/dist/process-jobs-store.js.map +1 -1
  217. package/dist/process-output-redaction.d.ts +58 -0
  218. package/dist/process-output-redaction.d.ts.map +1 -0
  219. package/dist/process-output-redaction.js +311 -0
  220. package/dist/process-output-redaction.js.map +1 -0
  221. package/dist/project-skills.d.ts +11 -5
  222. package/dist/project-skills.d.ts.map +1 -1
  223. package/dist/project-skills.js +88 -39
  224. package/dist/project-skills.js.map +1 -1
  225. package/dist/provider-auth-checks.d.ts +27 -0
  226. package/dist/provider-auth-checks.d.ts.map +1 -0
  227. package/dist/provider-auth-checks.js +349 -0
  228. package/dist/provider-auth-checks.js.map +1 -0
  229. package/dist/provider-auth-observations.d.ts +22 -0
  230. package/dist/provider-auth-observations.d.ts.map +1 -0
  231. package/dist/provider-auth-observations.js +139 -0
  232. package/dist/provider-auth-observations.js.map +1 -0
  233. package/dist/provider-auth-operator.d.ts +19 -0
  234. package/dist/provider-auth-operator.d.ts.map +1 -0
  235. package/dist/provider-auth-operator.js +560 -0
  236. package/dist/provider-auth-operator.js.map +1 -0
  237. package/dist/provider-auth-status.d.ts +20 -0
  238. package/dist/provider-auth-status.d.ts.map +1 -0
  239. package/dist/provider-auth-status.js +235 -0
  240. package/dist/provider-auth-status.js.map +1 -0
  241. package/dist/provider-model-catalog.d.ts +95 -0
  242. package/dist/provider-model-catalog.d.ts.map +1 -0
  243. package/dist/provider-model-catalog.js +550 -0
  244. package/dist/provider-model-catalog.js.map +1 -0
  245. package/dist/provider-setup.d.ts +26 -13
  246. package/dist/provider-setup.d.ts.map +1 -1
  247. package/dist/provider-setup.js +106 -130
  248. package/dist/provider-setup.js.map +1 -1
  249. package/dist/readiness-probe-worker.d.ts +1 -2
  250. package/dist/readiness-probe-worker.d.ts.map +1 -1
  251. package/dist/readiness-probe-worker.js +3 -8
  252. package/dist/readiness-probe-worker.js.map +1 -1
  253. package/dist/readiness-probe.d.ts +1 -1
  254. package/dist/readiness-probe.d.ts.map +1 -1
  255. package/dist/readiness-probe.js +3 -33
  256. package/dist/readiness-probe.js.map +1 -1
  257. package/dist/reply-artifacts.d.ts +3 -1
  258. package/dist/reply-artifacts.d.ts.map +1 -1
  259. package/dist/reply-artifacts.js +45 -10
  260. package/dist/reply-artifacts.js.map +1 -1
  261. package/dist/request-model-override.d.ts +14 -37
  262. package/dist/request-model-override.d.ts.map +1 -1
  263. package/dist/request-model-override.js +105 -143
  264. package/dist/request-model-override.js.map +1 -1
  265. package/dist/request-scoped-mcp.d.ts +3 -0
  266. package/dist/request-scoped-mcp.d.ts.map +1 -1
  267. package/dist/request-scoped-mcp.js +1 -1
  268. package/dist/request-scoped-mcp.js.map +1 -1
  269. package/dist/run-history.d.ts.map +1 -1
  270. package/dist/run-history.js +56 -13
  271. package/dist/run-history.js.map +1 -1
  272. package/dist/runtime-option-extensions.d.ts +2 -4
  273. package/dist/runtime-option-extensions.d.ts.map +1 -1
  274. package/dist/runtime-option-extensions.js +4 -8
  275. package/dist/runtime-option-extensions.js.map +1 -1
  276. package/dist/runtime-routes.d.ts +5 -5
  277. package/dist/runtime-routes.d.ts.map +1 -1
  278. package/dist/runtime-routes.js +29 -18
  279. package/dist/runtime-routes.js.map +1 -1
  280. package/dist/sandbox-settings-cleanup.d.ts +15 -0
  281. package/dist/sandbox-settings-cleanup.d.ts.map +1 -0
  282. package/dist/sandbox-settings-cleanup.js +88 -0
  283. package/dist/sandbox-settings-cleanup.js.map +1 -0
  284. package/dist/seen-conversations.d.ts +4 -3
  285. package/dist/seen-conversations.d.ts.map +1 -1
  286. package/dist/seen-conversations.js +6 -5
  287. package/dist/seen-conversations.js.map +1 -1
  288. package/dist/session-history.d.ts +14 -0
  289. package/dist/session-history.d.ts.map +1 -1
  290. package/dist/session-history.js +120 -5
  291. package/dist/session-history.js.map +1 -1
  292. package/dist/systemd-command.d.ts +8 -0
  293. package/dist/systemd-command.d.ts.map +1 -0
  294. package/dist/systemd-command.js +206 -0
  295. package/dist/systemd-command.js.map +1 -0
  296. package/dist/systemd.d.ts +51 -0
  297. package/dist/systemd.d.ts.map +1 -0
  298. package/dist/systemd.js +299 -0
  299. package/dist/systemd.js.map +1 -0
  300. package/dist/tool-output-artifacts.d.ts +4 -0
  301. package/dist/tool-output-artifacts.d.ts.map +1 -0
  302. package/dist/tool-output-artifacts.js +17 -0
  303. package/dist/tool-output-artifacts.js.map +1 -0
  304. package/dist/trigger-overrides.d.ts +6 -0
  305. package/dist/trigger-overrides.d.ts.map +1 -1
  306. package/dist/trigger-overrides.js +36 -4
  307. package/dist/trigger-overrides.js.map +1 -1
  308. package/dist/tui-command.d.ts +0 -45
  309. package/dist/tui-command.d.ts.map +1 -1
  310. package/dist/tui-command.js +27 -264
  311. package/dist/tui-command.js.map +1 -1
  312. package/dist/untrusted-text.d.ts +36 -0
  313. package/dist/untrusted-text.d.ts.map +1 -0
  314. package/dist/untrusted-text.js +150 -0
  315. package/dist/untrusted-text.js.map +1 -0
  316. package/dist/web-command.d.ts +3 -0
  317. package/dist/web-command.d.ts.map +1 -1
  318. package/dist/web-command.js +112 -7
  319. package/dist/web-command.js.map +1 -1
  320. package/dist/web-request-coordinator.d.ts +19 -0
  321. package/dist/web-request-coordinator.d.ts.map +1 -0
  322. package/dist/web-request-coordinator.js +242 -0
  323. package/dist/web-request-coordinator.js.map +1 -0
  324. package/dist/wizard/answers.d.ts +3 -9
  325. package/dist/wizard/answers.d.ts.map +1 -1
  326. package/dist/wizard/answers.js +11 -36
  327. package/dist/wizard/answers.js.map +1 -1
  328. package/dist/wizard/from-flags.d.ts +1 -2
  329. package/dist/wizard/from-flags.d.ts.map +1 -1
  330. package/dist/wizard/from-flags.js +8 -3
  331. package/dist/wizard/from-flags.js.map +1 -1
  332. package/dist/wizard/model-discovery.d.ts +7 -8
  333. package/dist/wizard/model-discovery.d.ts.map +1 -1
  334. package/dist/wizard/model-discovery.js +58 -431
  335. package/dist/wizard/model-discovery.js.map +1 -1
  336. package/dist/wizard/presets.js +2 -2
  337. package/dist/wizard/presets.js.map +1 -1
  338. package/dist/wizard/prompts.d.ts +13 -12
  339. package/dist/wizard/prompts.d.ts.map +1 -1
  340. package/dist/wizard/prompts.js +25 -45
  341. package/dist/wizard/prompts.js.map +1 -1
  342. package/dist/wizard/run.d.ts.map +1 -1
  343. package/dist/wizard/run.js +30 -153
  344. package/dist/wizard/run.js.map +1 -1
  345. package/package.json +18 -18
  346. package/schema/mono-agent.config.schema.json +301 -53
  347. package/skills/mono-agent-composer/SKILL.md +5 -5
  348. package/skills/mono-agent-composer/references/config-blueprint.md +61 -47
  349. package/skills/mono-agent-composer/references/discovery-questions.md +18 -18
  350. package/skills/mono-agent-composer/references/feature-coverage.md +39 -21
  351. package/skills/mono-agent-composer/references/package-map.md +26 -17
  352. package/skills/mono-agent-composer/references/playbooks.md +39 -28
  353. package/skills/mono-agent-composer/references/validation.md +4 -3
  354. package/dist/codex-model-catalog.d.ts +0 -15
  355. package/dist/codex-model-catalog.d.ts.map +0 -1
  356. package/dist/codex-model-catalog.js +0 -220
  357. package/dist/codex-model-catalog.js.map +0 -1
  358. package/dist/configuration-proposal-main.d.ts +0 -3
  359. package/dist/configuration-proposal-main.d.ts.map +0 -1
  360. package/dist/configuration-proposal-main.js +0 -13
  361. package/dist/configuration-proposal-main.js.map +0 -1
  362. package/dist/configuration-proposal-tool.d.ts +0 -33
  363. package/dist/configuration-proposal-tool.d.ts.map +0 -1
  364. package/dist/configuration-proposal-tool.js +0 -188
  365. package/dist/configuration-proposal-tool.js.map +0 -1
  366. package/dist/local-configuration.d.ts +0 -99
  367. package/dist/local-configuration.d.ts.map +0 -1
  368. package/dist/local-configuration.js +0 -1330
  369. package/dist/local-configuration.js.map +0 -1
@@ -0,0 +1,194 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ import { classifyNotifySuppression, } from "@mono-agent/agent-contracts";
3
+ import { runWithProcessJobWakeContext } from "./process-jobs-context.js";
4
+ const wakeContext = new AsyncLocalStorage();
5
+ /**
6
+ * Monitor wakes reuse the process-job delivery-key metadata symbol because the
7
+ * adapters already carry that exact non-JSON key through their queued proactive
8
+ * turns. The key VALUE namespaces the two: a monitor delivery key is always
9
+ * `monitor:<id>:<seq>`, so a lookup here can never resolve a job's flight.
10
+ */
11
+ const HOST_WAKE_DELIVERY_METADATA = Symbol.for("mono-agent.process-job-wake.delivery-key.v1");
12
+ const wakeContextByRequestMetadata = new WeakMap();
13
+ const wakeFlightsByDeliveryKey = new Map();
14
+ /**
15
+ * Wakes whose turn ran and deliberately said nothing.
16
+ *
17
+ * Adapters classify an empty answer as "not delivered", which is right for a
18
+ * proactive notification but wrong for a monitor: the batch WAS consumed, the
19
+ * model simply had nothing worth saying. Without this the host would count a
20
+ * successful silent turn as a lost batch and report a gap that never happened.
21
+ */
22
+ const silentWakeDeliveryKeys = new Set();
23
+ const MAX_SILENT_WAKE_KEYS = 512;
24
+ /**
25
+ * Run a genuine channel turn as a monitor wake.
26
+ *
27
+ * This nests INSIDE the process-job wake context on purpose. Both features raise
28
+ * host-owned turns on the same conversation, and the steering registry admits
29
+ * exactly one active run per conversation: a second, parallel registration would
30
+ * make every steer ambiguous and silently downgrade process-job wakes to a
31
+ * follow-up turn. Sharing it also means a monitor wake inherits the same
32
+ * targeted-run steering and the same unforgeable chain-depth increment, so a
33
+ * monitor started from a wake turn cannot escape `maxChainDepth`.
34
+ */
35
+ export async function runWithMonitorWakeContext(context, operation, deliveryKey) {
36
+ const flight = Object.freeze({ ...context, token: Object.freeze({}), deliveryKey });
37
+ const current = wakeFlightsByDeliveryKey.get(deliveryKey) ?? [];
38
+ wakeFlightsByDeliveryKey.set(deliveryKey, [...current, flight]);
39
+ try {
40
+ return await wakeContext.run(flight, async () => await runWithProcessJobWakeContext({ jobId: context.monitorId, chainDepth: context.chainDepth }, operation, deliveryKey));
41
+ }
42
+ finally {
43
+ const active = wakeFlightsByDeliveryKey.get(deliveryKey) ?? [];
44
+ const remaining = active.filter((candidate) => candidate.token !== flight.token);
45
+ if (remaining.length === 0)
46
+ wakeFlightsByDeliveryKey.delete(deliveryKey);
47
+ else
48
+ wakeFlightsByDeliveryKey.set(deliveryKey, remaining);
49
+ }
50
+ }
51
+ /**
52
+ * Capture an admitted monitor wake on the request identity that survives the
53
+ * responder-to-harness queue boundary, and suppress a sentinel-only answer.
54
+ *
55
+ * The suppression is the point of this wrapper. A monitor raises turns nobody
56
+ * asked for, so it must be able to conclude "nothing worth saying" without
57
+ * posting anything — but `NOTHING_TO_REPORT` is only honoured by the native
58
+ * cron/webhook notify path, which a channel wake turn does not go through.
59
+ * Blanking the answer here makes the adapters' existing "agent produced no
60
+ * answer" path do the suppressing, without teaching any adapter about monitors.
61
+ */
62
+ export function bindMonitorWakeContextToResponder(responder, options = {}) {
63
+ const dispose = responder.dispose;
64
+ const startNewSession = responder.startNewSession;
65
+ return {
66
+ respond: async (request, stream) => {
67
+ const ambient = wakeContext.getStore();
68
+ const deliveryKey = monitorWakeDeliveryKey(request.metadata);
69
+ const flights = deliveryKey === undefined ? [] : wakeFlightsByDeliveryKey.get(deliveryKey) ?? [];
70
+ // HTTP callbacks reconstruct the host-only symbol outside AsyncLocalStorage.
71
+ // A key is authority only while exactly one registered flight owns it.
72
+ const context = deliveryKey === undefined
73
+ ? ambient
74
+ : flights.length === 1 ? flights[0] : undefined;
75
+ let installed;
76
+ if (context !== undefined) {
77
+ if (request.metadata === undefined) {
78
+ throw new Error("A monitor wake request is missing its host-owned request identity.");
79
+ }
80
+ installed = { token: Object.freeze({}), flight: context };
81
+ const current = wakeContextByRequestMetadata.get(request.metadata) ?? [];
82
+ wakeContextByRequestMetadata.set(request.metadata, [...current, installed]);
83
+ }
84
+ try {
85
+ const response = await responder.respond(request, stream);
86
+ return context === undefined
87
+ ? response
88
+ : suppressSilentMonitorReply(response, context, options.logger);
89
+ }
90
+ finally {
91
+ if (installed !== undefined && request.metadata !== undefined) {
92
+ const current = wakeContextByRequestMetadata.get(request.metadata) ?? [];
93
+ const remaining = current.filter((candidate) => candidate.token !== installed.token);
94
+ if (remaining.length === 0)
95
+ wakeContextByRequestMetadata.delete(request.metadata);
96
+ else
97
+ wakeContextByRequestMetadata.set(request.metadata, remaining);
98
+ }
99
+ }
100
+ },
101
+ ...(responder.cancel === undefined ? {} : { cancel: responder.cancel.bind(responder) }),
102
+ ...(responder.liveInputOwnership === undefined ? {} : { liveInputOwnership: responder.liveInputOwnership }),
103
+ ...(responder.offerLiveInput === undefined
104
+ ? {}
105
+ : { offerLiveInput: (request) => responder.offerLiveInput(request) }),
106
+ ...(responder.deliverVerbatim === undefined
107
+ ? {}
108
+ : { deliverVerbatim: responder.deliverVerbatim.bind(responder) }),
109
+ ...(responder.importContext === undefined
110
+ ? {}
111
+ : { importContext: responder.importContext.bind(responder) }),
112
+ ...(responder.openReplyArtifact === undefined
113
+ ? {}
114
+ : { openReplyArtifact: responder.openReplyArtifact.bind(responder) }),
115
+ ...(responder.loadMcpApp === undefined ? {} : { loadMcpApp: responder.loadMcpApp.bind(responder) }),
116
+ ...(responder.requestMcpApp === undefined ? {} : { requestMcpApp: responder.requestMcpApp.bind(responder) }),
117
+ ...(startNewSession === undefined
118
+ ? {}
119
+ : { startNewSession: (conversationId) => startNewSession.call(responder, conversationId) }),
120
+ ...(dispose === undefined ? {} : { dispose: dispose.bind(responder) }),
121
+ };
122
+ }
123
+ /**
124
+ * Blank a monitor wake answer that ends with the sentinel. Attachments are
125
+ * dropped with it: a turn that decided it has nothing to say must not still post
126
+ * files. A `narrated-sentinel` is honoured but logged, exactly as the native
127
+ * notify path does, because it means the model wrote prose before the marker.
128
+ */
129
+ export function suppressSilentMonitorReply(response, context, logger) {
130
+ const suppression = classifyNotifySuppression(response.text);
131
+ if (suppression === "none" || suppression === "empty")
132
+ return response;
133
+ if (suppression === "narrated-sentinel") {
134
+ logger?.warn?.("Monitor wake reply suppressed: the final answer ended with the NOTHING_TO_REPORT sentinel but was not the sentinel alone.", { monitorId: context.monitorId });
135
+ }
136
+ markSilentMonitorWake(context.deliveryKey);
137
+ const { text: _text, parts: _parts, ...rest } = response;
138
+ return { ...rest, text: "" };
139
+ }
140
+ function markSilentMonitorWake(deliveryKey) {
141
+ if (deliveryKey === undefined)
142
+ return;
143
+ // Bounded: a key is consumed by the settling wake, and this cap keeps a
144
+ // pathological run from retaining keys nobody will ever read.
145
+ if (silentWakeDeliveryKeys.size >= MAX_SILENT_WAKE_KEYS) {
146
+ const oldest = silentWakeDeliveryKeys.values().next().value;
147
+ if (oldest !== undefined)
148
+ silentWakeDeliveryKeys.delete(oldest);
149
+ }
150
+ silentWakeDeliveryKeys.add(deliveryKey);
151
+ }
152
+ /**
153
+ * Whether this wake's turn ran and chose silence. Consumed once: the settling
154
+ * wake is the only reader, and a stale key must not make a later batch look
155
+ * delivered.
156
+ */
157
+ export function consumeSilentMonitorWake(deliveryKey) {
158
+ return silentWakeDeliveryKeys.delete(deliveryKey);
159
+ }
160
+ /** Resolve only an association previously issued by this app-owned seam. */
161
+ export function monitorWakeContextForRequest(request) {
162
+ const bindings = request.metadata === undefined
163
+ ? []
164
+ : wakeContextByRequestMetadata.get(request.metadata) ?? [];
165
+ if (bindings.length > 0)
166
+ return resolveFlights(bindings.map((binding) => binding.flight));
167
+ const deliveryKey = monitorWakeDeliveryKey(request.metadata);
168
+ if (deliveryKey === undefined)
169
+ return { kind: "none" };
170
+ const flights = wakeFlightsByDeliveryKey.get(deliveryKey) ?? [];
171
+ // A host-marked wake cannot regain ordinary depth-zero capabilities after expiry.
172
+ if (flights.length === 0)
173
+ return { kind: "missed" };
174
+ return resolveFlights(flights);
175
+ }
176
+ function monitorWakeDeliveryKey(metadata) {
177
+ if (metadata === undefined)
178
+ return undefined;
179
+ try {
180
+ const descriptor = Object.getOwnPropertyDescriptor(metadata, HOST_WAKE_DELIVERY_METADATA);
181
+ const value = descriptor !== undefined && "value" in descriptor ? descriptor.value : undefined;
182
+ return typeof value === "string" && value.startsWith("monitor:") ? value : undefined;
183
+ }
184
+ catch {
185
+ return undefined;
186
+ }
187
+ }
188
+ function resolveFlights(flights) {
189
+ const distinct = [...new Map(flights.map((flight) => [flight.token, flight])).values()];
190
+ return distinct.length === 1
191
+ ? { kind: "resolved", context: Object.freeze({ monitorId: distinct[0].monitorId, chainDepth: distinct[0].chainDepth }) }
192
+ : { kind: "missed" };
193
+ }
194
+ //# sourceMappingURL=monitors-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitors-context.js","sourceRoot":"","sources":["../src/monitors-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { AgentHarnessRuntimeOptionsInput } from "@mono-agent/agent-harness";
2
+ import type { MonoAgentConfig } from "@mono-agent/config";
3
+ import type { ChannelId } from "./channels.js";
4
+ import type { MonitorsServiceHandle } from "./monitors-service.js";
5
+ import type { ProcessJobOriginRecord } from "./process-jobs-store.js";
6
+ import type { RuntimeOptionsExtension } from "./runtime-option-extensions.js";
7
+ /** Channel schemes whose adapters can deliver a monitor wake to an exact conversation. */
8
+ export declare const MONITOR_WAKE_CAPABLE_SCHEMES: ReadonlySet<string>;
9
+ export interface MonitorsRuntimeExtensionOptions {
10
+ readonly next?: RuntimeOptionsExtension;
11
+ /** Optional because monitors stay unavailable when their service cannot open. */
12
+ readonly service: MonitorsServiceHandle | undefined;
13
+ readonly coreConfig: MonoAgentConfig;
14
+ readonly channelId: ChannelId | undefined;
15
+ readonly conversationScheme?: string | undefined;
16
+ readonly routesOnlyPiNative?: (metadata: Record<string, unknown> | undefined) => boolean;
17
+ }
18
+ /** Inject the monitor controller only for a Pi-native, wake-capable, allowed turn. */
19
+ export declare function createMonitorsRuntimeExtension(options: MonitorsRuntimeExtensionOptions): RuntimeOptionsExtension;
20
+ /** Strict host-origin classifier narrowed to schemes that can deliver a wake. */
21
+ export declare function monitorOriginForRequest(input: Pick<AgentHarnessRuntimeOptionsInput, "request" | "runId">, channelId: ChannelId | undefined, conversationScheme?: string): ProcessJobOriginRecord | undefined;
22
+ export interface MonitorsAvailabilityOptions {
23
+ readonly service: MonitorsServiceHandle | undefined;
24
+ readonly coreConfig: MonoAgentConfig;
25
+ readonly channelId: ChannelId | undefined;
26
+ readonly conversationScheme?: string | undefined;
27
+ readonly routesOnlyPiNative?: (metadata: Record<string, unknown> | undefined) => boolean;
28
+ }
29
+ /**
30
+ * The same gate the extension applies, minus the checks that only exist once a
31
+ * run is under way. Exported so prompt guidance and tool availability are
32
+ * decided by one predicate; it errs strict, because telling the model it can
33
+ * watch something it cannot is the worse failure.
34
+ */
35
+ export declare function monitorsAvailableForRequest(input: Pick<AgentHarnessRuntimeOptionsInput, "request" | "runId">, options: MonitorsAvailabilityOptions): boolean;
36
+ //# sourceMappingURL=monitors-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitors-runtime.d.ts","sourceRoot":"","sources":["../src/monitors-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAC;AACjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AASnE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAE9E,0FAA0F;AAC1F,eAAO,MAAM,4BAA4B,EAAE,WAAW,CAAC,MAAM,CAAyC,CAAC;AAEvG,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,IAAI,CAAC,EAAE,uBAAuB,CAAC;IACxC,iFAAiF;IACjF,QAAQ,CAAC,OAAO,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,KAAK,OAAO,CAAC;CAC1F;AAED,sFAAsF;AACtF,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,+BAA+B,GACvC,uBAAuB,CAiDzB;AAED,iFAAiF;AACjF,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,IAAI,CAAC,+BAA+B,EAAE,SAAS,GAAG,OAAO,CAAC,EACjE,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,kBAAkB,CAAC,EAAE,MAAM,GAC1B,sBAAsB,GAAG,SAAS,CAGpC;AAyBD,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,OAAO,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,KAAK,OAAO,CAAC;CAC1F;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,IAAI,CAAC,+BAA+B,EAAE,SAAS,GAAG,OAAO,CAAC,EACjE,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAYT"}
@@ -0,0 +1,103 @@
1
+ import { monitorWakeContextForRequest } from "./monitors-context.js";
2
+ import { processJobOriginForRequest, PROCESS_JOBS_PI_NATIVE_REQUIRED_ERROR, } from "./process-jobs-runtime.js";
3
+ import { processJobSteeringDepth, processJobWakeContextForRequest, } from "./process-jobs-context.js";
4
+ /** Channel schemes whose adapters can deliver a monitor wake to an exact conversation. */
5
+ export const MONITOR_WAKE_CAPABLE_SCHEMES = new Set(["telegram", "slack", "web"]);
6
+ /** Inject the monitor controller only for a Pi-native, wake-capable, allowed turn. */
7
+ export function createMonitorsRuntimeExtension(options) {
8
+ return async (input) => {
9
+ let result;
10
+ try {
11
+ if (options.service !== undefined
12
+ && options.routesOnlyPiNative !== undefined
13
+ && !options.routesOnlyPiNative(input.request.metadata)) {
14
+ throw new Error(`${PROCESS_JOBS_PI_NATIVE_REQUIRED_ERROR} Not every route reachable for this request is Pi-native.`);
15
+ }
16
+ result = options.next === undefined
17
+ ? { runtimeOptions: {}, cleanup: async () => { } }
18
+ : await options.next(input);
19
+ let runtimeOptions = result.runtimeOptions ?? {};
20
+ const service = options.service;
21
+ if (service !== undefined) {
22
+ const origin = monitorOriginForRequest(input, options.channelId, options.conversationScheme);
23
+ // Chain depth comes from whichever host wake raised this turn. Monitor
24
+ // wakes nest inside the process-job wake context, so both resolvers see
25
+ // the same flight and the depth cannot be forged from either side.
26
+ const monitorWake = monitorWakeContextForRequest(input.request);
27
+ const hostWake = processJobWakeContextForRequest(input.request);
28
+ const missed = monitorWake.kind === "missed" || hostWake.kind === "missed";
29
+ const chainDepth = Math.max(monitorWake.kind === "resolved" ? monitorWake.context.chainDepth : 0, hostWake.kind === "resolved" ? hostWake.context.chainDepth : 0);
30
+ // The steering target is registered ONCE per run, by the process-jobs
31
+ // extension. Registering a second one here would make the conversation's
32
+ // active run ambiguous and silently break process-job steering, because
33
+ // that registry admits a steer only when exactly one candidate matches.
34
+ if (monitorsAdmissible(origin, missed, chainDepth, service, options.coreConfig)) {
35
+ runtimeOptions = {
36
+ ...runtimeOptions,
37
+ monitors: service.controller(origin, () => steeringDepth(origin, chainDepth)),
38
+ };
39
+ }
40
+ }
41
+ return { ...result, runtimeOptions };
42
+ }
43
+ catch (error) {
44
+ try {
45
+ await result?.cleanup?.();
46
+ }
47
+ finally {
48
+ await result?.settleCleanup?.();
49
+ }
50
+ throw error;
51
+ }
52
+ };
53
+ }
54
+ /** Strict host-origin classifier narrowed to schemes that can deliver a wake. */
55
+ export function monitorOriginForRequest(input, channelId, conversationScheme) {
56
+ const origin = processJobOriginForRequest(input, channelId, conversationScheme);
57
+ return origin !== undefined && MONITOR_WAKE_CAPABLE_SCHEMES.has(origin.channel) ? origin : undefined;
58
+ }
59
+ function monitorsAdmissible(origin, missedWake, chainDepth, service, coreConfig) {
60
+ return origin !== undefined
61
+ && !missedWake
62
+ && service !== undefined
63
+ && chainDepth < service.settings.maxChainDepth
64
+ && hasAllowedMonitorTools(coreConfig);
65
+ }
66
+ /**
67
+ * Read the live depth from the shared steering registration when this run has
68
+ * one, so a monitor started after a wake was steered into this very turn still
69
+ * sees the raised depth rather than the depth the run began with.
70
+ */
71
+ function steeringDepth(origin, fallback) {
72
+ return Math.max(fallback, processJobSteeringDepth(origin.baseConversationId) ?? fallback);
73
+ }
74
+ /**
75
+ * The same gate the extension applies, minus the checks that only exist once a
76
+ * run is under way. Exported so prompt guidance and tool availability are
77
+ * decided by one predicate; it errs strict, because telling the model it can
78
+ * watch something it cannot is the worse failure.
79
+ */
80
+ export function monitorsAvailableForRequest(input, options) {
81
+ if (options.service === undefined)
82
+ return false;
83
+ if (options.routesOnlyPiNative?.(input.request.metadata) === false)
84
+ return false;
85
+ const origin = monitorOriginForRequest(input, options.channelId, options.conversationScheme);
86
+ const monitorWake = monitorWakeContextForRequest(input.request);
87
+ const hostWake = processJobWakeContextForRequest(input.request);
88
+ const missed = monitorWake.kind === "missed" || hostWake.kind === "missed";
89
+ const chainDepth = Math.max(monitorWake.kind === "resolved" ? monitorWake.context.chainDepth : 0, hostWake.kind === "resolved" ? hostWake.context.chainDepth : 0);
90
+ return monitorsAdmissible(origin, missed, chainDepth, options.service, options.coreConfig);
91
+ }
92
+ /**
93
+ * Both names must be reachable. A Monitor the model cannot stop is a capacity
94
+ * leak it has no way to repair, so denying MonitorStop denies Monitor too.
95
+ */
96
+ function hasAllowedMonitorTools(config) {
97
+ const allowed = config.tools.allowedTools;
98
+ const denied = new Set(config.tools.disallowedTools.map((name) => name.toLowerCase()));
99
+ const allowAll = allowed.some((name) => name === "*");
100
+ return ["Monitor", "MonitorStop"].every((name) => !denied.has(name.toLowerCase())
101
+ && (allowAll || allowed.some((allowedName) => allowedName.toLowerCase() === name.toLowerCase())));
102
+ }
103
+ //# sourceMappingURL=monitors-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitors-runtime.js","sourceRoot":"","sources":["../src/monitors-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import { type MonitorErrorCode, type MonitorProjection, type HostWakeDeliveryResult } from "@mono-agent/agent-contracts";
2
+ import type { MonitorsController } from "@mono-agent/runtime-adapter";
3
+ import { type OwnerPrivateLock } from "./owner-private-lock.js";
4
+ import { type MonitorsSettings } from "./monitors-config.js";
5
+ import { writeMonitorStore } from "./monitors-store.js";
6
+ import { isSameProcessIncarnation, readProcessIncarnation, type ProcessIncarnation } from "./process-incarnation.js";
7
+ import type { ProcessJobOriginRecord } from "./process-jobs-store.js";
8
+ export declare class MonitorServiceError extends Error {
9
+ readonly code: MonitorErrorCode;
10
+ constructor(code: MonitorErrorCode);
11
+ }
12
+ export interface MonitorWakeInput {
13
+ readonly projection: MonitorProjection;
14
+ readonly prompt: string;
15
+ readonly conversationId: string;
16
+ readonly deliveryKey: string;
17
+ readonly chainDepth: number;
18
+ }
19
+ export interface OpenMonitorsServiceOptions {
20
+ /** The already-prepared, protected process-job private-state root. */
21
+ readonly stateDir: string;
22
+ readonly settings: MonitorsSettings;
23
+ readonly wake: (input: MonitorWakeInput) => Promise<HostWakeDeliveryResult>;
24
+ readonly logger?: {
25
+ info?(message: string, details?: Readonly<Record<string, unknown>>): void;
26
+ warn?(message: string, details?: Readonly<Record<string, unknown>>): void;
27
+ };
28
+ readonly now?: () => Date;
29
+ readonly platform?: NodeJS.Platform;
30
+ readonly randomId?: () => string;
31
+ readonly currentIncarnation?: () => Promise<ProcessIncarnation>;
32
+ readonly readIncarnation?: typeof readProcessIncarnation;
33
+ readonly sameIncarnation?: typeof isSameProcessIncarnation;
34
+ readonly signalProcess?: (pid: number, signal: NodeJS.Signals) => void;
35
+ readonly processGroupExists?: (pgid: number) => boolean;
36
+ readonly sleep?: (milliseconds: number) => Promise<void>;
37
+ readonly wakeRearmMs?: number;
38
+ /** Bounded wait for watchers and wakes at shutdown; a test seam, not a knob. */
39
+ readonly shutdownGraceMs?: number;
40
+ /** Test seam for blocking one durable write at an exact lifecycle boundary. */
41
+ readonly writeStore?: typeof writeMonitorStore;
42
+ /** Test seam for pausing inside the serialized wake-admission boundary. */
43
+ readonly beforeWakePreparation?: () => Promise<void>;
44
+ readonly acquireLock?: () => Promise<OwnerPrivateLock | undefined>;
45
+ readonly operatorSecret?: () => Promise<Uint8Array>;
46
+ }
47
+ export interface MonitorsServiceHandle {
48
+ readonly settings: MonitorsSettings;
49
+ /** The protected state root this service actually opened. */
50
+ readonly stateDir: string;
51
+ readonly operatorToken: string;
52
+ controller(origin: ProcessJobOriginRecord, chainDepth: number | (() => number)): MonitorsController;
53
+ list(): Promise<readonly MonitorProjection[]>;
54
+ get(monitorId: string): Promise<MonitorProjection | undefined>;
55
+ cancel(monitorId: string): Promise<MonitorProjection>;
56
+ activateWakes(): Promise<void>;
57
+ stop(): Promise<void>;
58
+ }
59
+ /** Acquire exclusive ownership, recover interrupted watches, and expose one controller. */
60
+ export declare function openMonitorsService(options: OpenMonitorsServiceOptions): Promise<MonitorsServiceHandle>;
61
+ /**
62
+ * The envelope has three jobs the model routinely gets wrong without it: this is
63
+ * not a user message, the fenced text is data and not instruction, and a batch
64
+ * that changes nothing should end the turn silently rather than posting noise.
65
+ */
66
+ export declare function monitorWakePrompt(projection: MonitorProjection, payload: {
67
+ readonly lines: readonly string[];
68
+ readonly terminal: boolean;
69
+ readonly stderrTail: string;
70
+ }): string;
71
+ //# sourceMappingURL=monitors-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitors-service.d.ts","sourceRoot":"","sources":["../src/monitors-service.ts"],"names":[],"mappings":"AAKA,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EAEtB,KAAK,sBAAsB,EAC5B,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAMV,kBAAkB,EACnB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAA2B,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACzF,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EASL,iBAAiB,EAElB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAEL,wBAAwB,EACxB,sBAAsB,EACtB,KAAK,kBAAkB,EACxB,MAAM,0BAA0B,CAAC;AAUlC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAiBtE,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;gBAEpB,IAAI,EAAE,gBAAgB;CAKnC;AAWD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,0BAA0B;IACzC,sEAAsE;IACtE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAC5E,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;QAC1E,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;KAC3E,CAAC;IACF,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IACpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,MAAM,CAAC;IACjC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAChE,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,sBAAsB,CAAC;IACzD,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,wBAAwB,CAAC;IAC3D,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC;IACvE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACxD,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,gFAAgF;IAChF,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,+EAA+E;IAC/E,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,iBAAiB,CAAC;IAC/C,2EAA2E;IAC3E,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAC;IACnE,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;CACrD;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,6DAA6D;IAC7D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,UAAU,CAAC,MAAM,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,kBAAkB,CAAC;IACpG,IAAI,IAAI,OAAO,CAAC,SAAS,iBAAiB,EAAE,CAAC,CAAC;IAC9C,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAAC;IAC/D,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACtD,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAwCD,2FAA2F;AAC3F,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,qBAAqB,CAAC,CAoBhC;AAgpDD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,iBAAiB,EAC7B,OAAO,EAAE;IACP,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B,GACA,MAAM,CA2CR"}