@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,217 @@
1
+ import { isAbsolute, resolve } from "node:path";
2
+ import { isLoopbackHost, parseMonitorProjection, parseMonitorProjections, } from "@mono-agent/agent-contracts";
3
+ import { listTraceSources } from "@mono-agent/observability";
4
+ import { readBoundedOwnerOnlyFile } from "./continuation-store-fs.js";
5
+ import { discoverJobsSource } from "./jobs-command.js";
6
+ import { monitorOperatorToken } from "./monitors-store.js";
7
+ import { PROCESS_JOB_SECRET_FILE } from "./process-jobs-store.js";
8
+ import { tuiEndpointOf } from "./tui-command.js";
9
+ /** Monitor projections carry no output, so a live agent's whole list stays small. */
10
+ const MAX_MONITORS_RESPONSE_BYTES = 1024 * 1024;
11
+ /**
12
+ * Authenticated, loopback-only monitor operator client for one live agent.
13
+ *
14
+ * Deliberately a separate command rather than a `--kind` flag on `jobs`: a
15
+ * monitor and a background job share a state root but nothing else — different
16
+ * states, different counters, different bearer — and one command that renders
17
+ * two unrelated projections reads worse than two that each render one.
18
+ */
19
+ export async function runMonitorsCommand(options) {
20
+ const stdout = options.stdout ?? ((text) => process.stdout.write(text));
21
+ const stderr = options.stderr ?? ((text) => process.stderr.write(text));
22
+ const [action = "list", monitorId, ...extra] = options.positionals;
23
+ if (extra.length > 0 || !validUsage(action, monitorId)) {
24
+ stderr("Usage: mono-agent monitors [list|get <monitor-id>|cancel <monitor-id>] [--agent <label|sourceId>] [--json]\n");
25
+ return 2;
26
+ }
27
+ let source;
28
+ try {
29
+ source = await discoverJobsSource(options);
30
+ }
31
+ catch (error) {
32
+ return writeFailure(stderr, options.json === true, codeOf(error) ?? "agent_unreachable", reasonOf(error));
33
+ }
34
+ const baseUrlValue = tuiEndpointOf(source);
35
+ if (baseUrlValue === undefined) {
36
+ return writeFailure(stderr, options.json === true, "agent_unreachable", "The selected agent has no running operator endpoint.");
37
+ }
38
+ let baseUrl;
39
+ try {
40
+ baseUrl = new URL(baseUrlValue);
41
+ }
42
+ catch {
43
+ return writeFailure(stderr, options.json === true, "agent_unreachable", "The selected agent advertised an invalid operator endpoint.");
44
+ }
45
+ if ((baseUrl.protocol !== "http:" && baseUrl.protocol !== "https:")
46
+ || !isLoopbackHost(baseUrl.hostname)
47
+ || baseUrl.username.length > 0
48
+ || baseUrl.password.length > 0) {
49
+ return writeFailure(stderr, options.json === true, "remote_refused", "Monitor operator commands refuse non-loopback endpoints.");
50
+ }
51
+ let token;
52
+ try {
53
+ const stateDir = monitorStateDir(source);
54
+ if (stateDir === undefined) {
55
+ throw coded("monitor_disabled", "The selected live agent has no monitor controller.");
56
+ }
57
+ token = monitorOperatorToken(await readOwnerSecret(resolve(stateDir, PROCESS_JOB_SECRET_FILE)));
58
+ }
59
+ catch (error) {
60
+ return writeFailure(stderr, options.json === true, codeOf(error) ?? "agent_unreachable", `Monitor operator credentials are unavailable: ${reasonOf(error)}`);
61
+ }
62
+ let response;
63
+ try {
64
+ response = await request(options.fetchImpl ?? fetch, baseUrl.toString().replace(/\/$/u, ""), token, action, monitorId);
65
+ }
66
+ catch (error) {
67
+ return writeFailure(stderr, options.json === true, "agent_unreachable", `Agent is unreachable: ${reasonOf(error)}`);
68
+ }
69
+ let body;
70
+ try {
71
+ body = await readBoundedJson(response);
72
+ }
73
+ catch (error) {
74
+ return writeFailure(stderr, options.json === true, codeOf(error) ?? "monitor_invalid", `Agent returned an invalid monitor response: ${reasonOf(error)}`);
75
+ }
76
+ if (!response.ok) {
77
+ return writeFailure(stderr, options.json === true, errorCode(body) ?? "monitor_invalid", errorMessage(body, response.status));
78
+ }
79
+ try {
80
+ const result = action === "list"
81
+ ? { monitors: parseMonitorProjections(recordOf(body)?.monitors) }
82
+ : parseMonitorProjection(body);
83
+ stdout(options.json === true ? `${JSON.stringify(result, null, 2)}\n` : renderHuman(action, result));
84
+ return 0;
85
+ }
86
+ catch (error) {
87
+ return writeFailure(stderr, options.json === true, "monitor_invalid", `Agent returned an invalid monitor projection: ${reasonOf(error)}`);
88
+ }
89
+ }
90
+ async function request(fetchImpl, baseUrl, token, action, monitorId) {
91
+ const headers = { authorization: `Bearer ${token}` };
92
+ if (action === "list")
93
+ return await fetchImpl(`${baseUrl}/v1/monitors`, { headers, redirect: "error" });
94
+ const path = `${baseUrl}/v1/monitors/${encodeURIComponent(monitorId)}`;
95
+ return await fetchImpl(action === "cancel" ? `${path}/cancel` : path, {
96
+ ...(action === "cancel" ? { method: "POST" } : {}),
97
+ headers,
98
+ redirect: "error",
99
+ });
100
+ }
101
+ function validUsage(action, monitorId) {
102
+ return action === "list"
103
+ ? monitorId === undefined
104
+ : (action === "get" || action === "cancel")
105
+ && monitorId !== undefined
106
+ && monitorId.trim().length > 0
107
+ && monitorId.length <= 256;
108
+ }
109
+ async function readBoundedJson(response) {
110
+ if (response.body === null)
111
+ throw coded("monitor_invalid", "response body is empty");
112
+ const reader = response.body.getReader();
113
+ const chunks = [];
114
+ let total = 0;
115
+ try {
116
+ for (;;) {
117
+ const { done, value } = await reader.read();
118
+ if (done)
119
+ break;
120
+ total += value.byteLength;
121
+ if (total > MAX_MONITORS_RESPONSE_BYTES) {
122
+ throw coded("monitor_response_too_large", `response exceeds ${String(MAX_MONITORS_RESPONSE_BYTES)} bytes`);
123
+ }
124
+ chunks.push(value);
125
+ }
126
+ }
127
+ finally {
128
+ await reader.cancel().catch(() => undefined);
129
+ }
130
+ return JSON.parse(Buffer.concat(chunks.map((chunk) => Buffer.from(chunk)), total).toString("utf8"));
131
+ }
132
+ function renderHuman(action, result) {
133
+ if (action !== "list") {
134
+ const monitor = result;
135
+ return [
136
+ `${monitor.monitorId}: ${monitor.state}${monitor.persistent ? " (persistent)" : ""} ${monitor.description}`,
137
+ `Wake policy: ${monitor.limits.wakeOn}, dedupe ${monitor.limits.dedupe}, minimum interval ${String(monitor.limits.minWakeIntervalMs)} ms`,
138
+ `Suppressed: ${String(monitor.counters.batchesSuppressed)} batches / ${String(monitor.counters.linesSuppressed)} lines`,
139
+ `Wakes: ${String(monitor.counters.followUpWakes)} follow-up / ${String(monitor.counters.steeredWakes)} steered / ${String(monitor.counters.unknownDispositionWakes)} unknown disposition`,
140
+ "",
141
+ ].join("\n");
142
+ }
143
+ const monitors = result.monitors;
144
+ if (monitors.length === 0)
145
+ return "No monitors recorded.\n";
146
+ return [
147
+ "MONITOR STATE SEQ DROPPED SUPPRESSED FOLLOW-UP STEERED UNKNOWN STARTED DESCRIPTION",
148
+ ...monitors.map((monitor) => [
149
+ monitor.monitorId.padEnd(36),
150
+ monitor.state.padEnd(12),
151
+ String(monitor.counters.seq).padEnd(5),
152
+ String(monitor.counters.droppedLines).padEnd(8),
153
+ String(monitor.counters.linesSuppressed).padEnd(11),
154
+ String(monitor.counters.followUpWakes).padEnd(9),
155
+ String(monitor.counters.steeredWakes).padEnd(7),
156
+ String(monitor.counters.unknownDispositionWakes).padEnd(8),
157
+ monitor.timestamps.startedAt.padEnd(24),
158
+ monitor.description,
159
+ ].join(" ")),
160
+ "",
161
+ ].join("\n");
162
+ }
163
+ async function readOwnerSecret(path) {
164
+ const encoded = (await readBoundedOwnerOnlyFile(path, 256, "Monitor operator secret")).trim();
165
+ const secret = Buffer.from(encoded, "base64url");
166
+ if (secret.length !== 32 || secret.toString("base64url") !== encoded) {
167
+ throw new Error("secret contents are invalid");
168
+ }
169
+ return secret;
170
+ }
171
+ /**
172
+ * Monitors share the process-job protected state root, so the live agent
173
+ * advertises exactly one state directory and both operator surfaces read the
174
+ * same owner-private secret file under different HMAC labels.
175
+ */
176
+ function monitorStateDir(source) {
177
+ const channels = recordOf(source.metadata?.channels);
178
+ const tui = recordOf(channels?.tui);
179
+ const monitors = recordOf(tui?.monitors);
180
+ if (monitors === undefined || tui?.kind !== "running")
181
+ return undefined;
182
+ // The monitor service publishes the root it actually opened. Falling back to
183
+ // the process-job entry keeps an older live agent readable, but a monitor
184
+ // controller that is up while process-job publication is degraded must still
185
+ // be operable.
186
+ const value = monitors.stateDir ?? recordOf(tui.processJobs)?.stateDir;
187
+ return typeof value === "string" && isAbsolute(value) && value.length <= 16_384
188
+ ? resolve(value)
189
+ : undefined;
190
+ }
191
+ function writeFailure(stderr, json, code, message) {
192
+ stderr(json ? `${JSON.stringify({ error: { code, message } })}\n` : `${code}: ${message}\n`);
193
+ return 1;
194
+ }
195
+ function coded(code, message) {
196
+ return Object.assign(new Error(message), { code });
197
+ }
198
+ function codeOf(error) {
199
+ return typeof error === "object" && error !== null && typeof error.code === "string"
200
+ ? error.code
201
+ : undefined;
202
+ }
203
+ function reasonOf(error) { return error instanceof Error ? error.message : String(error); }
204
+ function recordOf(value) {
205
+ return typeof value === "object" && value !== null && !Array.isArray(value)
206
+ ? value
207
+ : undefined;
208
+ }
209
+ function errorCode(value) {
210
+ const error = recordOf(recordOf(value)?.error);
211
+ return typeof error?.code === "string" ? error.code : undefined;
212
+ }
213
+ function errorMessage(value, status) {
214
+ const error = recordOf(recordOf(value)?.error);
215
+ return typeof error?.message === "string" ? error.message : `HTTP ${String(status)}`;
216
+ }
217
+ //# sourceMappingURL=monitors-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitors-command.js","sourceRoot":"","sources":["../src/monitors-command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Host-only `monitors` configuration.
3
+ *
4
+ * Monitors are a STREAMING class of the background process-job substrate: they
5
+ * reuse its protected private-state root, its registration proof, its sandbox
6
+ * protection, and its origin binding, and therefore require
7
+ * `processJobs.enabled`. What they do not share is capacity — a persistent watch
8
+ * that held an ordinary background slot would starve real background work — so
9
+ * every limit below is counted independently of `processJobs.*`.
10
+ */
11
+ export declare const MONITORS_DEFAULTS: Readonly<{
12
+ enabled: false;
13
+ maxActive: 8;
14
+ maxActivePerConversation: 2;
15
+ /** Ceiling for a timed monitor; `timeout_ms` may lower it, never raise it. */
16
+ maxRuntimeMs: number;
17
+ /** Ceiling for a `persistent: true` monitor. */
18
+ persistentMaxRuntimeMs: number;
19
+ /** Stdout lines produced within this window are delivered as one batch. */
20
+ coalesceMs: 200;
21
+ maxWakeIntervalMs: 300000;
22
+ maxBatchLines: 200;
23
+ maxBatchBytes: number;
24
+ maxLineBytes: number;
25
+ maxChainDepth: 4;
26
+ rateLimit: Readonly<{
27
+ windowMs: 1000;
28
+ maxLinesPerWindow: 200;
29
+ sustainedWindows: 5;
30
+ }>;
31
+ }>;
32
+ export declare const MONITORS_CAPS: Readonly<{
33
+ maxActive: 32;
34
+ maxActivePerConversation: 8;
35
+ maxRuntimeMs: number;
36
+ persistentMaxRuntimeMs: number;
37
+ coalesceMs: 5000;
38
+ maxWakeIntervalMs: 300000;
39
+ maxBatchLines: 2000;
40
+ maxBatchBytes: number;
41
+ maxLineBytes: number;
42
+ maxChainDepth: 64;
43
+ rateLimit: Readonly<{
44
+ windowMs: 60000;
45
+ maxLinesPerWindow: 20000;
46
+ sustainedWindows: 60;
47
+ }>;
48
+ }>;
49
+ /** Terminal monitors retained only until their single final wake settles. */
50
+ export declare const MONITORS_MAX_TERMINAL_RECORDS = 32;
51
+ export interface MonitorsRateLimitSettings {
52
+ readonly windowMs: number;
53
+ readonly maxLinesPerWindow: number;
54
+ readonly sustainedWindows: number;
55
+ }
56
+ export interface MonitorsSettings {
57
+ readonly configured: boolean;
58
+ readonly enabled: boolean;
59
+ readonly maxActive: number;
60
+ readonly maxActivePerConversation: number;
61
+ readonly maxRuntimeMs: number;
62
+ readonly persistentMaxRuntimeMs: number;
63
+ readonly coalesceMs: number;
64
+ readonly maxWakeIntervalMs: number;
65
+ readonly maxBatchLines: number;
66
+ readonly maxBatchBytes: number;
67
+ readonly maxLineBytes: number;
68
+ readonly maxChainDepth: number;
69
+ readonly rateLimit: MonitorsRateLimitSettings;
70
+ }
71
+ /** Load the host-only monitor block, failing closed on every unknown key. */
72
+ export declare function loadMonitorsSettings(input: {
73
+ readonly configPath: string;
74
+ }): Promise<MonitorsSettings>;
75
+ /** Parse one already-loaded config object; unknown keys fail closed. */
76
+ export declare function parseMonitorsSettings(raw: unknown): MonitorsSettings;
77
+ //# sourceMappingURL=monitors-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitors-config.d.ts","sourceRoot":"","sources":["../src/monitors-config.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB;;;;IAI5B,8EAA8E;;IAE9E,gDAAgD;;IAEhD,2EAA2E;;;;;;;;;;;;EAY3E,CAAC;AAEH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;EAgBxB,CAAC;AAEH,6EAA6E;AAC7E,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAEhD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAC1C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAC;CAC/C;AAmBD,6EAA6E;AAC7E,wBAAsB,oBAAoB,CAAC,KAAK,EAAE;IAChD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAS5B;AAED,wEAAwE;AACxE,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,CAOpE"}
@@ -0,0 +1,150 @@
1
+ import { readFile } from "node:fs/promises";
2
+ /**
3
+ * Host-only `monitors` configuration.
4
+ *
5
+ * Monitors are a STREAMING class of the background process-job substrate: they
6
+ * reuse its protected private-state root, its registration proof, its sandbox
7
+ * protection, and its origin binding, and therefore require
8
+ * `processJobs.enabled`. What they do not share is capacity — a persistent watch
9
+ * that held an ordinary background slot would starve real background work — so
10
+ * every limit below is counted independently of `processJobs.*`.
11
+ */
12
+ export const MONITORS_DEFAULTS = Object.freeze({
13
+ enabled: false,
14
+ maxActive: 8,
15
+ maxActivePerConversation: 2,
16
+ /** Ceiling for a timed monitor; `timeout_ms` may lower it, never raise it. */
17
+ maxRuntimeMs: 60 * 60 * 1_000,
18
+ /** Ceiling for a `persistent: true` monitor. */
19
+ persistentMaxRuntimeMs: 24 * 60 * 60 * 1_000,
20
+ /** Stdout lines produced within this window are delivered as one batch. */
21
+ coalesceMs: 200,
22
+ maxWakeIntervalMs: 300_000,
23
+ maxBatchLines: 200,
24
+ maxBatchBytes: 64 * 1024,
25
+ maxLineBytes: 4 * 1024,
26
+ maxChainDepth: 4,
27
+ rateLimit: Object.freeze({
28
+ windowMs: 1_000,
29
+ maxLinesPerWindow: 200,
30
+ sustainedWindows: 5,
31
+ }),
32
+ });
33
+ export const MONITORS_CAPS = Object.freeze({
34
+ maxActive: 32,
35
+ maxActivePerConversation: 8,
36
+ maxRuntimeMs: 60 * 60 * 1_000,
37
+ persistentMaxRuntimeMs: 24 * 60 * 60 * 1_000,
38
+ coalesceMs: 5_000,
39
+ maxWakeIntervalMs: 300_000,
40
+ maxBatchLines: 2_000,
41
+ maxBatchBytes: 1024 * 1024,
42
+ maxLineBytes: 64 * 1024,
43
+ maxChainDepth: 64,
44
+ rateLimit: Object.freeze({
45
+ windowMs: 60_000,
46
+ maxLinesPerWindow: 20_000,
47
+ sustainedWindows: 60,
48
+ }),
49
+ });
50
+ /** Terminal monitors retained only until their single final wake settles. */
51
+ export const MONITORS_MAX_TERMINAL_RECORDS = 32;
52
+ const MONITORS_KEYS = [
53
+ "enabled",
54
+ "maxActive",
55
+ "maxActivePerConversation",
56
+ "maxRuntimeMs",
57
+ "persistentMaxRuntimeMs",
58
+ "coalesceMs",
59
+ "maxWakeIntervalMs",
60
+ "maxBatchLines",
61
+ "maxBatchBytes",
62
+ "maxLineBytes",
63
+ "maxChainDepth",
64
+ "rateLimit",
65
+ ];
66
+ const RATE_LIMIT_KEYS = ["windowMs", "maxLinesPerWindow", "sustainedWindows"];
67
+ /** Load the host-only monitor block, failing closed on every unknown key. */
68
+ export async function loadMonitorsSettings(input) {
69
+ let raw = {};
70
+ try {
71
+ raw = JSON.parse(await readFile(input.configPath, "utf8"));
72
+ }
73
+ catch {
74
+ // The core loader owns malformed/missing config reporting. This optional
75
+ // host block stays disabled until that loader accepts the file.
76
+ }
77
+ return parseMonitorsSettings(raw);
78
+ }
79
+ /** Parse one already-loaded config object; unknown keys fail closed. */
80
+ export function parseMonitorsSettings(raw) {
81
+ const root = objectOf(raw);
82
+ const value = root.monitors;
83
+ if (value === undefined)
84
+ return resolved(false, {});
85
+ const block = requireObject(value, "monitors");
86
+ rejectUnknownKeys(block, "monitors", MONITORS_KEYS);
87
+ return resolved(true, block);
88
+ }
89
+ function resolved(configured, block) {
90
+ const rateLimitValue = block.rateLimit;
91
+ const rateLimit = rateLimitValue === undefined
92
+ ? {}
93
+ : requireObject(rateLimitValue, "monitors.rateLimit");
94
+ rejectUnknownKeys(rateLimit, "monitors.rateLimit", RATE_LIMIT_KEYS);
95
+ return {
96
+ configured,
97
+ enabled: optionalBoolean(block.enabled, "monitors.enabled") ?? MONITORS_DEFAULTS.enabled,
98
+ maxActive: bounded(block.maxActive, "monitors.maxActive", MONITORS_DEFAULTS.maxActive, MONITORS_CAPS.maxActive),
99
+ maxActivePerConversation: bounded(block.maxActivePerConversation, "monitors.maxActivePerConversation", MONITORS_DEFAULTS.maxActivePerConversation, MONITORS_CAPS.maxActivePerConversation),
100
+ maxRuntimeMs: bounded(block.maxRuntimeMs, "monitors.maxRuntimeMs", MONITORS_DEFAULTS.maxRuntimeMs, MONITORS_CAPS.maxRuntimeMs),
101
+ persistentMaxRuntimeMs: bounded(block.persistentMaxRuntimeMs, "monitors.persistentMaxRuntimeMs", MONITORS_DEFAULTS.persistentMaxRuntimeMs, MONITORS_CAPS.persistentMaxRuntimeMs),
102
+ coalesceMs: bounded(block.coalesceMs, "monitors.coalesceMs", MONITORS_DEFAULTS.coalesceMs, MONITORS_CAPS.coalesceMs),
103
+ maxWakeIntervalMs: bounded(block.maxWakeIntervalMs, "monitors.maxWakeIntervalMs", MONITORS_DEFAULTS.maxWakeIntervalMs, MONITORS_CAPS.maxWakeIntervalMs),
104
+ maxBatchLines: bounded(block.maxBatchLines, "monitors.maxBatchLines", MONITORS_DEFAULTS.maxBatchLines, MONITORS_CAPS.maxBatchLines),
105
+ maxBatchBytes: bounded(block.maxBatchBytes, "monitors.maxBatchBytes", MONITORS_DEFAULTS.maxBatchBytes, MONITORS_CAPS.maxBatchBytes),
106
+ maxLineBytes: bounded(block.maxLineBytes, "monitors.maxLineBytes", MONITORS_DEFAULTS.maxLineBytes, MONITORS_CAPS.maxLineBytes),
107
+ maxChainDepth: bounded(block.maxChainDepth, "monitors.maxChainDepth", MONITORS_DEFAULTS.maxChainDepth, MONITORS_CAPS.maxChainDepth),
108
+ rateLimit: {
109
+ windowMs: bounded(rateLimit.windowMs, "monitors.rateLimit.windowMs", MONITORS_DEFAULTS.rateLimit.windowMs, MONITORS_CAPS.rateLimit.windowMs),
110
+ maxLinesPerWindow: bounded(rateLimit.maxLinesPerWindow, "monitors.rateLimit.maxLinesPerWindow", MONITORS_DEFAULTS.rateLimit.maxLinesPerWindow, MONITORS_CAPS.rateLimit.maxLinesPerWindow),
111
+ sustainedWindows: bounded(rateLimit.sustainedWindows, "monitors.rateLimit.sustainedWindows", MONITORS_DEFAULTS.rateLimit.sustainedWindows, MONITORS_CAPS.rateLimit.sustainedWindows),
112
+ },
113
+ };
114
+ }
115
+ function bounded(value, path, fallback, cap) {
116
+ if (value === undefined)
117
+ return fallback;
118
+ if (!Number.isSafeInteger(value) || Number(value) <= 0) {
119
+ throw new Error(`${path} must be a positive safe integer.`);
120
+ }
121
+ if (Number(value) > cap)
122
+ throw new Error(`${path} cannot exceed ${String(cap)}.`);
123
+ return Number(value);
124
+ }
125
+ function objectOf(value) {
126
+ return typeof value === "object" && value !== null && !Array.isArray(value)
127
+ ? value
128
+ : {};
129
+ }
130
+ function requireObject(value, path) {
131
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
132
+ throw new Error(`${path} must be an object.`);
133
+ }
134
+ return value;
135
+ }
136
+ function optionalBoolean(value, path) {
137
+ if (value === undefined)
138
+ return undefined;
139
+ if (typeof value !== "boolean")
140
+ throw new Error(`${path} must be a boolean.`);
141
+ return value;
142
+ }
143
+ function rejectUnknownKeys(value, path, allowed) {
144
+ const allowedSet = new Set(allowed);
145
+ const unknown = Object.keys(value).filter((key) => !allowedSet.has(key));
146
+ if (unknown.length > 0) {
147
+ throw new Error(`${path} has unknown ${unknown.length === 1 ? "key" : "keys"}: ${unknown.join(", ")}.`);
148
+ }
149
+ }
150
+ //# sourceMappingURL=monitors-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitors-config.js","sourceRoot":"","sources":["../src/monitors-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import { type AgentRequestBase, type AgentResponder, type AgentResponse } from "@mono-agent/agent-contracts";
2
+ import type { MonoAgentAppLogger } from "./channels.js";
3
+ export interface MonitorWakeContext {
4
+ readonly monitorId: string;
5
+ readonly chainDepth: number;
6
+ }
7
+ export type MonitorWakeContextResolution = {
8
+ readonly kind: "none";
9
+ } | {
10
+ readonly kind: "resolved";
11
+ readonly context: MonitorWakeContext;
12
+ } | {
13
+ readonly kind: "missed";
14
+ };
15
+ /**
16
+ * Run a genuine channel turn as a monitor wake.
17
+ *
18
+ * This nests INSIDE the process-job wake context on purpose. Both features raise
19
+ * host-owned turns on the same conversation, and the steering registry admits
20
+ * exactly one active run per conversation: a second, parallel registration would
21
+ * make every steer ambiguous and silently downgrade process-job wakes to a
22
+ * follow-up turn. Sharing it also means a monitor wake inherits the same
23
+ * targeted-run steering and the same unforgeable chain-depth increment, so a
24
+ * monitor started from a wake turn cannot escape `maxChainDepth`.
25
+ */
26
+ export declare function runWithMonitorWakeContext<T>(context: MonitorWakeContext, operation: () => Promise<T>, deliveryKey: string): Promise<T>;
27
+ /**
28
+ * Capture an admitted monitor wake on the request identity that survives the
29
+ * responder-to-harness queue boundary, and suppress a sentinel-only answer.
30
+ *
31
+ * The suppression is the point of this wrapper. A monitor raises turns nobody
32
+ * asked for, so it must be able to conclude "nothing worth saying" without
33
+ * posting anything — but `NOTHING_TO_REPORT` is only honoured by the native
34
+ * cron/webhook notify path, which a channel wake turn does not go through.
35
+ * Blanking the answer here makes the adapters' existing "agent produced no
36
+ * answer" path do the suppressing, without teaching any adapter about monitors.
37
+ */
38
+ export declare function bindMonitorWakeContextToResponder(responder: AgentResponder, options?: {
39
+ readonly logger?: MonoAgentAppLogger;
40
+ }): AgentResponder;
41
+ /**
42
+ * Blank a monitor wake answer that ends with the sentinel. Attachments are
43
+ * dropped with it: a turn that decided it has nothing to say must not still post
44
+ * files. A `narrated-sentinel` is honoured but logged, exactly as the native
45
+ * notify path does, because it means the model wrote prose before the marker.
46
+ */
47
+ export declare function suppressSilentMonitorReply(response: AgentResponse, context: MonitorWakeContext & {
48
+ readonly deliveryKey?: string;
49
+ }, logger?: MonoAgentAppLogger): AgentResponse;
50
+ /**
51
+ * Whether this wake's turn ran and chose silence. Consumed once: the settling
52
+ * wake is the only reader, and a stale key must not make a later batch look
53
+ * delivered.
54
+ */
55
+ export declare function consumeSilentMonitorWake(deliveryKey: string): boolean;
56
+ /** Resolve only an association previously issued by this app-owned seam. */
57
+ export declare function monitorWakeContextForRequest(request: Pick<AgentRequestBase, "metadata">): MonitorWakeContextResolution;
58
+ //# sourceMappingURL=monitors-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitors-context.d.ts","sourceRoot":"","sources":["../src/monitors-context.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGxD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAOD,MAAM,MAAM,4BAA4B,GACpC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAA;CAAE,GACnE;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC;AA0BhC;;;;;;;;;;GAUG;AACH,wBAAsB,yBAAyB,CAAC,CAAC,EAC/C,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,CAAC,CAAC,CAgBZ;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iCAAiC,CAC/C,SAAS,EAAE,cAAc,EACzB,OAAO,GAAE;IAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAA;CAAO,GACrD,cAAc,CA2DhB;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,aAAa,EACvB,OAAO,EAAE,kBAAkB,GAAG;IAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EAC/D,MAAM,CAAC,EAAE,kBAAkB,GAC1B,aAAa,CAYf;AAaD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAErE;AAED,4EAA4E;AAC5E,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,GAC1C,4BAA4B,CAW9B"}