@mono-agent/agent-app 0.19.0 → 0.20.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 (303) hide show
  1. package/README.md +304 -32
  2. package/dist/acp-bridge.d.ts.map +1 -1
  3. package/dist/acp-bridge.js +113 -54
  4. package/dist/acp-bridge.js.map +1 -1
  5. package/dist/acp-session-store.d.ts +12 -0
  6. package/dist/acp-session-store.d.ts.map +1 -0
  7. package/dist/acp-session-store.js +74 -0
  8. package/dist/acp-session-store.js.map +1 -0
  9. package/dist/agent-artifact-paths.d.ts +8 -0
  10. package/dist/agent-artifact-paths.d.ts.map +1 -0
  11. package/dist/agent-artifact-paths.js +11 -0
  12. package/dist/agent-artifact-paths.js.map +1 -0
  13. package/dist/agent-root-coordinator.d.ts +101 -0
  14. package/dist/agent-root-coordinator.d.ts.map +1 -0
  15. package/dist/agent-root-coordinator.js +470 -0
  16. package/dist/agent-root-coordinator.js.map +1 -0
  17. package/dist/app-controller-channels.d.ts +11 -1
  18. package/dist/app-controller-channels.d.ts.map +1 -1
  19. package/dist/app-controller-channels.js +145 -20
  20. package/dist/app-controller-channels.js.map +1 -1
  21. package/dist/app-controller-continuation.d.ts +2 -0
  22. package/dist/app-controller-continuation.d.ts.map +1 -1
  23. package/dist/app-controller-continuation.js.map +1 -1
  24. package/dist/app-controller-lifecycle.d.ts +5 -0
  25. package/dist/app-controller-lifecycle.d.ts.map +1 -1
  26. package/dist/app-controller-lifecycle.js +24 -5
  27. package/dist/app-controller-lifecycle.js.map +1 -1
  28. package/dist/app-controller-maintenance.d.ts +2 -0
  29. package/dist/app-controller-maintenance.d.ts.map +1 -1
  30. package/dist/app-controller-maintenance.js +32 -2
  31. package/dist/app-controller-maintenance.js.map +1 -1
  32. package/dist/app-controller-process-jobs.d.ts +46 -0
  33. package/dist/app-controller-process-jobs.d.ts.map +1 -0
  34. package/dist/app-controller-process-jobs.js +281 -0
  35. package/dist/app-controller-process-jobs.js.map +1 -0
  36. package/dist/app-controller-responder.d.ts +15 -0
  37. package/dist/app-controller-responder.d.ts.map +1 -1
  38. package/dist/app-controller-responder.js +146 -12
  39. package/dist/app-controller-responder.js.map +1 -1
  40. package/dist/app-controller-traceability.d.ts +6 -0
  41. package/dist/app-controller-traceability.d.ts.map +1 -1
  42. package/dist/app-controller-traceability.js +10 -0
  43. package/dist/app-controller-traceability.js.map +1 -1
  44. package/dist/app-controller-utils.d.ts +8 -0
  45. package/dist/app-controller-utils.d.ts.map +1 -1
  46. package/dist/app-controller-utils.js +24 -1
  47. package/dist/app-controller-utils.js.map +1 -1
  48. package/dist/app-controller.d.ts +40 -1
  49. package/dist/app-controller.d.ts.map +1 -1
  50. package/dist/app-controller.js +124 -39
  51. package/dist/app-controller.js.map +1 -1
  52. package/dist/background-log-maintenance.d.ts +85 -2
  53. package/dist/background-log-maintenance.d.ts.map +1 -1
  54. package/dist/background-log-maintenance.js +407 -136
  55. package/dist/background-log-maintenance.js.map +1 -1
  56. package/dist/background-runtime.d.ts.map +1 -1
  57. package/dist/background-runtime.js +22 -41
  58. package/dist/background-runtime.js.map +1 -1
  59. package/dist/background.d.ts +18 -26
  60. package/dist/background.d.ts.map +1 -1
  61. package/dist/background.js +83 -138
  62. package/dist/background.js.map +1 -1
  63. package/dist/channel-drivers/cron.d.ts +12 -1
  64. package/dist/channel-drivers/cron.d.ts.map +1 -1
  65. package/dist/channel-drivers/cron.js +121 -18
  66. package/dist/channel-drivers/cron.js.map +1 -1
  67. package/dist/channel-drivers/native-notify.d.ts +3 -0
  68. package/dist/channel-drivers/native-notify.d.ts.map +1 -1
  69. package/dist/channel-drivers/native-notify.js +2 -1
  70. package/dist/channel-drivers/native-notify.js.map +1 -1
  71. package/dist/channel-drivers/slack.d.ts.map +1 -1
  72. package/dist/channel-drivers/slack.js +41 -4
  73. package/dist/channel-drivers/slack.js.map +1 -1
  74. package/dist/channel-drivers/telegram.d.ts.map +1 -1
  75. package/dist/channel-drivers/telegram.js +46 -3
  76. package/dist/channel-drivers/telegram.js.map +1 -1
  77. package/dist/channel-drivers/tui.d.ts +13 -2
  78. package/dist/channel-drivers/tui.d.ts.map +1 -1
  79. package/dist/channel-drivers/tui.js +112 -3
  80. package/dist/channel-drivers/tui.js.map +1 -1
  81. package/dist/channels.d.ts +1 -1
  82. package/dist/channels.d.ts.map +1 -1
  83. package/dist/channels.js +4 -2
  84. package/dist/channels.js.map +1 -1
  85. package/dist/cli-args.d.ts +15 -1
  86. package/dist/cli-args.d.ts.map +1 -1
  87. package/dist/cli-args.js +82 -12
  88. package/dist/cli-args.js.map +1 -1
  89. package/dist/cli-background-command.d.ts +9 -2
  90. package/dist/cli-background-command.d.ts.map +1 -1
  91. package/dist/cli-background-command.js +174 -66
  92. package/dist/cli-background-command.js.map +1 -1
  93. package/dist/cli-commands.d.ts.map +1 -1
  94. package/dist/cli-commands.js +50 -12
  95. package/dist/cli-commands.js.map +1 -1
  96. package/dist/cli-help.d.ts.map +1 -1
  97. package/dist/cli-help.js +21 -1
  98. package/dist/cli-help.js.map +1 -1
  99. package/dist/config-reference.d.ts.map +1 -1
  100. package/dist/config-reference.js +99 -2
  101. package/dist/config-reference.js.map +1 -1
  102. package/dist/configured-agent.d.ts +44 -3
  103. package/dist/configured-agent.d.ts.map +1 -1
  104. package/dist/configured-agent.js +805 -156
  105. package/dist/configured-agent.js.map +1 -1
  106. package/dist/conversation-state-roots.d.ts +59 -0
  107. package/dist/conversation-state-roots.d.ts.map +1 -0
  108. package/dist/conversation-state-roots.js +248 -0
  109. package/dist/conversation-state-roots.js.map +1 -0
  110. package/dist/cron-control-store.d.ts +91 -0
  111. package/dist/cron-control-store.d.ts.map +1 -0
  112. package/dist/cron-control-store.js +1251 -0
  113. package/dist/cron-control-store.js.map +1 -0
  114. package/dist/cron-operator-service.d.ts +54 -0
  115. package/dist/cron-operator-service.d.ts.map +1 -0
  116. package/dist/cron-operator-service.js +352 -0
  117. package/dist/cron-operator-service.js.map +1 -0
  118. package/dist/doctor-session-history.d.ts +9 -0
  119. package/dist/doctor-session-history.d.ts.map +1 -0
  120. package/dist/doctor-session-history.js +313 -0
  121. package/dist/doctor-session-history.js.map +1 -0
  122. package/dist/doctor.d.ts +2 -1
  123. package/dist/doctor.d.ts.map +1 -1
  124. package/dist/doctor.js +320 -9
  125. package/dist/doctor.js.map +1 -1
  126. package/dist/index.d.ts +4 -0
  127. package/dist/index.d.ts.map +1 -1
  128. package/dist/index.js +2 -0
  129. package/dist/index.js.map +1 -1
  130. package/dist/interaction-bridge.d.ts +1 -0
  131. package/dist/interaction-bridge.d.ts.map +1 -1
  132. package/dist/interaction-bridge.js +54 -6
  133. package/dist/interaction-bridge.js.map +1 -1
  134. package/dist/jobs-command.d.ts +17 -0
  135. package/dist/jobs-command.d.ts.map +1 -0
  136. package/dist/jobs-command.js +207 -0
  137. package/dist/jobs-command.js.map +1 -0
  138. package/dist/launchd-lifecycle-lock.d.ts +36 -0
  139. package/dist/launchd-lifecycle-lock.d.ts.map +1 -0
  140. package/dist/launchd-lifecycle-lock.js +124 -0
  141. package/dist/launchd-lifecycle-lock.js.map +1 -0
  142. package/dist/launchd-log-monitor-status.d.ts +7 -0
  143. package/dist/launchd-log-monitor-status.d.ts.map +1 -0
  144. package/dist/launchd-log-monitor-status.js +224 -0
  145. package/dist/launchd-log-monitor-status.js.map +1 -0
  146. package/dist/launchd-logs.d.ts +9 -1
  147. package/dist/launchd-logs.d.ts.map +1 -1
  148. package/dist/launchd-logs.js +69 -16
  149. package/dist/launchd-logs.js.map +1 -1
  150. package/dist/launchd-maintenance-command.d.ts +10 -0
  151. package/dist/launchd-maintenance-command.d.ts.map +1 -0
  152. package/dist/launchd-maintenance-command.js +2 -0
  153. package/dist/launchd-maintenance-command.js.map +1 -0
  154. package/dist/launchd-maintenance-entry.d.ts +30 -0
  155. package/dist/launchd-maintenance-entry.d.ts.map +1 -0
  156. package/dist/launchd-maintenance-entry.js +206 -0
  157. package/dist/launchd-maintenance-entry.js.map +1 -0
  158. package/dist/launchd-maintenance-gate.d.ts +28 -0
  159. package/dist/launchd-maintenance-gate.d.ts.map +1 -0
  160. package/dist/launchd-maintenance-gate.js +80 -0
  161. package/dist/launchd-maintenance-gate.js.map +1 -0
  162. package/dist/launchd-private-files.d.ts +3 -0
  163. package/dist/launchd-private-files.d.ts.map +1 -0
  164. package/dist/launchd-private-files.js +58 -0
  165. package/dist/launchd-private-files.js.map +1 -0
  166. package/dist/launchd.d.ts +56 -2
  167. package/dist/launchd.d.ts.map +1 -1
  168. package/dist/launchd.js +210 -5
  169. package/dist/launchd.js.map +1 -1
  170. package/dist/local-configuration.d.ts.map +1 -1
  171. package/dist/local-configuration.js +33 -7
  172. package/dist/local-configuration.js.map +1 -1
  173. package/dist/managed-launchd-maintenance-environment.d.ts +3 -0
  174. package/dist/managed-launchd-maintenance-environment.d.ts.map +1 -0
  175. package/dist/managed-launchd-maintenance-environment.js +12 -0
  176. package/dist/managed-launchd-maintenance-environment.js.map +1 -0
  177. package/dist/managed-runtime-launch-proof.d.ts +11 -0
  178. package/dist/managed-runtime-launch-proof.d.ts.map +1 -0
  179. package/dist/managed-runtime-launch-proof.js +59 -0
  180. package/dist/managed-runtime-launch-proof.js.map +1 -0
  181. package/dist/managed-runtime-maintenance-entry.d.ts +10 -0
  182. package/dist/managed-runtime-maintenance-entry.d.ts.map +1 -0
  183. package/dist/managed-runtime-maintenance-entry.js +244 -0
  184. package/dist/managed-runtime-maintenance-entry.js.map +1 -0
  185. package/dist/managed-web-logs.d.ts +29 -11
  186. package/dist/managed-web-logs.d.ts.map +1 -1
  187. package/dist/managed-web-logs.js +244 -121
  188. package/dist/managed-web-logs.js.map +1 -1
  189. package/dist/managed-web-maintenance-environment.d.ts +6 -0
  190. package/dist/managed-web-maintenance-environment.d.ts.map +1 -0
  191. package/dist/managed-web-maintenance-environment.js +19 -0
  192. package/dist/managed-web-maintenance-environment.js.map +1 -0
  193. package/dist/mcp-apps.d.ts +37 -0
  194. package/dist/mcp-apps.d.ts.map +1 -0
  195. package/dist/mcp-apps.js +1753 -0
  196. package/dist/mcp-apps.js.map +1 -0
  197. package/dist/memory-command.d.ts +12 -0
  198. package/dist/memory-command.d.ts.map +1 -1
  199. package/dist/memory-command.js +510 -1
  200. package/dist/memory-command.js.map +1 -1
  201. package/dist/modules/known-tools.d.ts +1 -1
  202. package/dist/modules/known-tools.d.ts.map +1 -1
  203. package/dist/modules/known-tools.js +2 -0
  204. package/dist/modules/known-tools.js.map +1 -1
  205. package/dist/posted-reply-history.d.ts.map +1 -1
  206. package/dist/posted-reply-history.js +12 -0
  207. package/dist/posted-reply-history.js.map +1 -1
  208. package/dist/proactive-notify.d.ts +4 -1
  209. package/dist/proactive-notify.d.ts.map +1 -1
  210. package/dist/proactive-notify.js +43 -5
  211. package/dist/proactive-notify.js.map +1 -1
  212. package/dist/process-jobs-config.d.ts +82 -0
  213. package/dist/process-jobs-config.d.ts.map +1 -0
  214. package/dist/process-jobs-config.js +423 -0
  215. package/dist/process-jobs-config.js.map +1 -0
  216. package/dist/process-jobs-context.d.ts +24 -0
  217. package/dist/process-jobs-context.d.ts.map +1 -0
  218. package/dist/process-jobs-context.js +135 -0
  219. package/dist/process-jobs-context.js.map +1 -0
  220. package/dist/process-jobs-root-registry.d.ts +115 -0
  221. package/dist/process-jobs-root-registry.d.ts.map +1 -0
  222. package/dist/process-jobs-root-registry.js +978 -0
  223. package/dist/process-jobs-root-registry.js.map +1 -0
  224. package/dist/process-jobs-runtime.d.ts +35 -0
  225. package/dist/process-jobs-runtime.d.ts.map +1 -0
  226. package/dist/process-jobs-runtime.js +177 -0
  227. package/dist/process-jobs-runtime.js.map +1 -0
  228. package/dist/process-jobs-service.d.ts +70 -0
  229. package/dist/process-jobs-service.d.ts.map +1 -0
  230. package/dist/process-jobs-service.js +1989 -0
  231. package/dist/process-jobs-service.js.map +1 -0
  232. package/dist/process-jobs-store.d.ts +151 -0
  233. package/dist/process-jobs-store.d.ts.map +1 -0
  234. package/dist/process-jobs-store.js +1290 -0
  235. package/dist/process-jobs-store.js.map +1 -0
  236. package/dist/reply-artifacts.d.ts +65 -0
  237. package/dist/reply-artifacts.d.ts.map +1 -0
  238. package/dist/reply-artifacts.js +1147 -0
  239. package/dist/reply-artifacts.js.map +1 -0
  240. package/dist/reply-part-budget.d.ts +16 -0
  241. package/dist/reply-part-budget.d.ts.map +1 -0
  242. package/dist/reply-part-budget.js +57 -0
  243. package/dist/reply-part-budget.js.map +1 -0
  244. package/dist/request-model-override.d.ts +19 -0
  245. package/dist/request-model-override.d.ts.map +1 -1
  246. package/dist/request-model-override.js +54 -1
  247. package/dist/request-model-override.js.map +1 -1
  248. package/dist/request-scoped-mcp.d.ts +31 -0
  249. package/dist/request-scoped-mcp.d.ts.map +1 -0
  250. package/dist/request-scoped-mcp.js +197 -0
  251. package/dist/request-scoped-mcp.js.map +1 -0
  252. package/dist/run-history.d.ts.map +1 -1
  253. package/dist/run-history.js +50 -254
  254. package/dist/run-history.js.map +1 -1
  255. package/dist/runtime-option-extensions.d.ts +21 -0
  256. package/dist/runtime-option-extensions.d.ts.map +1 -1
  257. package/dist/runtime-option-extensions.js +53 -0
  258. package/dist/runtime-option-extensions.js.map +1 -1
  259. package/dist/secure-file-replace.d.ts +3 -0
  260. package/dist/secure-file-replace.d.ts.map +1 -1
  261. package/dist/secure-file-replace.js +31 -7
  262. package/dist/secure-file-replace.js.map +1 -1
  263. package/dist/session-history.d.ts +146 -0
  264. package/dist/session-history.d.ts.map +1 -0
  265. package/dist/session-history.js +347 -0
  266. package/dist/session-history.js.map +1 -0
  267. package/dist/sessions.d.ts +45 -2
  268. package/dist/sessions.d.ts.map +1 -1
  269. package/dist/sessions.js +849 -30
  270. package/dist/sessions.js.map +1 -1
  271. package/dist/web-command.d.ts +12 -11
  272. package/dist/web-command.d.ts.map +1 -1
  273. package/dist/web-command.js +554 -80
  274. package/dist/web-command.js.map +1 -1
  275. package/dist/web-log-maintenance-command.d.ts +7 -0
  276. package/dist/web-log-maintenance-command.d.ts.map +1 -0
  277. package/dist/web-log-maintenance-command.js +21 -0
  278. package/dist/web-log-maintenance-command.js.map +1 -0
  279. package/dist/web-log-maintenance-status.d.ts +26 -0
  280. package/dist/web-log-maintenance-status.d.ts.map +1 -0
  281. package/dist/web-log-maintenance-status.js +171 -0
  282. package/dist/web-log-maintenance-status.js.map +1 -0
  283. package/dist/web-log-maintenance.d.ts +32 -0
  284. package/dist/web-log-maintenance.d.ts.map +1 -0
  285. package/dist/web-log-maintenance.js +163 -0
  286. package/dist/web-log-maintenance.js.map +1 -0
  287. package/dist/web-maintenance-paths.d.ts +12 -0
  288. package/dist/web-maintenance-paths.d.ts.map +1 -0
  289. package/dist/web-maintenance-paths.js +24 -0
  290. package/dist/web-maintenance-paths.js.map +1 -0
  291. package/dist/wizard/prompts.d.ts.map +1 -1
  292. package/dist/wizard/prompts.js +1 -0
  293. package/dist/wizard/prompts.js.map +1 -1
  294. package/dist/wizard/run.js +1 -1
  295. package/dist/wizard/run.js.map +1 -1
  296. package/package.json +15 -15
  297. package/schema/mono-agent.config.schema.json +102 -1
  298. package/skills/mono-agent-composer/references/config-blueprint.md +26 -2
  299. package/skills/mono-agent-composer/references/discovery-questions.md +2 -2
  300. package/skills/mono-agent-composer/references/feature-coverage.md +6 -4
  301. package/skills/mono-agent-composer/references/package-map.md +19 -3
  302. package/skills/mono-agent-composer/references/playbooks.md +3 -3
  303. package/skills/mono-agent-composer/references/validation.md +4 -2
@@ -4,7 +4,8 @@
4
4
  * recognized plugin destination can still fail closed as unsupported. This is
5
5
  * intentionally wider than the webhook callback list: WhatsApp is recognized
6
6
  * here, but its plugin driver does not expose a native notify hook yet.
7
- * cron/webhook/openai-api/a2a are request-driven, not push destinations.
7
+ * web/cron/webhook/openai-api/a2a are request-driven, not ordinary push
8
+ * destinations. Process-job web lifecycle routing is handled explicitly below.
8
9
  */
9
10
  const PUSH_CHANNEL_BY_SCHEME = {
10
11
  telegram: "telegram",
@@ -29,7 +30,16 @@ export function channelIdForConversation(conversationId) {
29
30
  * succeeded), so the caller can report the outcome to the model.
30
31
  */
31
32
  export async function routeProactiveNotification(input) {
32
- const channelId = channelIdForConversation(input.conversationId);
33
+ const webProcessJobChannel = processJobWebChannel(input);
34
+ if (input.processJob?.origin.channel === "web" && webProcessJobChannel === undefined) {
35
+ return {
36
+ delivered: false,
37
+ code: "process_job_origin_mismatch",
38
+ reason: "The process-job origin does not match the web destination.",
39
+ retryable: false,
40
+ };
41
+ }
42
+ const channelId = webProcessJobChannel ?? channelIdForConversation(input.conversationId);
33
43
  if (channelId === undefined) {
34
44
  input.logger?.warn?.("Proactive notification skipped: unrecognized destination.", {
35
45
  conversationId: input.conversationId,
@@ -37,9 +47,23 @@ export async function routeProactiveNotification(input) {
37
47
  return { delivered: false, reason: "unrecognized destination conversationId" };
38
48
  }
39
49
  const channel = input.running.get(channelId);
40
- if (channel?.notify === undefined) {
41
- input.logger?.warn?.("Proactive notification skipped: destination channel is not running or does not support delivery.", { conversationId: input.conversationId, channelId });
42
- return { delivered: false, reason: `${channelId} channel is not running or does not support proactive delivery` };
50
+ if (channel === undefined) {
51
+ input.logger?.warn?.("Proactive notification skipped: destination channel is not running.", { conversationId: input.conversationId, channelId });
52
+ return {
53
+ delivered: false,
54
+ code: "destination_channel_unavailable",
55
+ reason: `${channelId} channel is not running`,
56
+ retryable: true,
57
+ };
58
+ }
59
+ if (channel.notify === undefined) {
60
+ input.logger?.warn?.("Proactive notification skipped: destination channel does not support delivery.", { conversationId: input.conversationId, channelId });
61
+ return {
62
+ delivered: false,
63
+ code: "destination_channel_unsupported",
64
+ reason: `${channelId} channel does not support proactive delivery`,
65
+ retryable: false,
66
+ };
43
67
  }
44
68
  try {
45
69
  return await channel.notify({
@@ -47,6 +71,8 @@ export async function routeProactiveNotification(input) {
47
71
  text: input.text,
48
72
  ...(input.verbatim === undefined ? {} : { verbatim: input.verbatim }),
49
73
  ...(input.deliveryKey === undefined ? {} : { deliveryKey: input.deliveryKey }),
74
+ ...(input.deliveryContext === undefined ? {} : { deliveryContext: input.deliveryContext }),
75
+ ...(input.processJob === undefined ? {} : { processJob: input.processJob }),
50
76
  });
51
77
  }
52
78
  catch (error) {
@@ -59,6 +85,18 @@ export async function routeProactiveNotification(input) {
59
85
  return { delivered: false, reason };
60
86
  }
61
87
  }
88
+ function processJobWebChannel(input) {
89
+ const origin = input.processJob?.origin;
90
+ return origin?.channel === "web"
91
+ && baseConversationId(origin.conversationId) === input.conversationId
92
+ && input.conversationId.startsWith("web:")
93
+ && input.conversationId !== "web:new"
94
+ ? "tui"
95
+ : undefined;
96
+ }
97
+ function baseConversationId(conversationId) {
98
+ return conversationId.split("#", 1)[0] ?? conversationId;
99
+ }
62
100
  function reasonOf(error) {
63
101
  return error instanceof Error ? error.message : String(error);
64
102
  }
@@ -1 +1 @@
1
- {"version":3,"file":"proactive-notify.js","sourceRoot":"","sources":["../src/proactive-notify.ts"],"names":[],"mappings":"AAQA;;;;;;;GAOG;AACH,MAAM,sBAAsB,GAAuC;IACjE,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,UAAU;CACrB,CAAC;AAEF,mHAAmH;AACnH,MAAM,UAAU,wBAAwB,CAAC,cAAsB;IAC7D,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACf,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,sBAAsB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AAChE,CAAC;AAqBD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,KAA2B;IAC1E,MAAM,SAAS,GAAG,wBAAwB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACjE,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,2DAA2D,EAAE;YAChF,cAAc,EAAE,KAAK,CAAC,cAAc;SACrC,CAAC,CAAC;QACH,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,yCAAyC,EAAE,CAAC;IACjF,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7C,IAAI,OAAO,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;QAClC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,CAClB,kGAAkG,EAClG,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,SAAS,EAAE,CACpD,CAAC;QACF,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,gEAAgE,EAAE,CAAC;IACpH,CAAC;IACD,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,MAAM,CAAC;YAC1B,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrE,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;SAC/E,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/B,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,kEAAkE,EAAE;YACvF,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,SAAS;YACT,MAAM;SACP,CAAC,CAAC;QACH,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACtC,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC"}
1
+ {"version":3,"file":"proactive-notify.js","sourceRoot":"","sources":["../src/proactive-notify.ts"],"names":[],"mappings":"AAYA;;;;;;;;GAQG;AACH,MAAM,sBAAsB,GAAuC;IACjE,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,UAAU;CACrB,CAAC;AAEF,mHAAmH;AACnH,MAAM,UAAU,wBAAwB,CAAC,cAAsB;IAC7D,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACf,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,sBAAsB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AAChE,CAAC;AAwBD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,KAA2B;IAC1E,MAAM,oBAAoB,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACzD,IAAI,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,KAAK,KAAK,IAAI,oBAAoB,KAAK,SAAS,EAAE,CAAC;QACrF,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,IAAI,EAAE,6BAA6B;YACnC,MAAM,EAAE,4DAA4D;YACpE,SAAS,EAAE,KAAK;SACjB,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,oBAAoB,IAAI,wBAAwB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACzF,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,2DAA2D,EAAE;YAChF,cAAc,EAAE,KAAK,CAAC,cAAc;SACrC,CAAC,CAAC;QACH,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,yCAAyC,EAAE,CAAC;IACjF,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,CAClB,qEAAqE,EACrE,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,SAAS,EAAE,CACpD,CAAC;QACF,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,IAAI,EAAE,iCAAiC;YACvC,MAAM,EAAE,GAAG,SAAS,yBAAyB;YAC7C,SAAS,EAAE,IAAI;SAChB,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACjC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,CAClB,gFAAgF,EAChF,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,SAAS,EAAE,CACpD,CAAC;QACF,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,IAAI,EAAE,iCAAiC;YACvC,MAAM,EAAE,GAAG,SAAS,8CAA8C;YAClE,SAAS,EAAE,KAAK;SACjB,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,MAAM,CAAC;YAC1B,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrE,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;YAC9E,GAAG,CAAC,KAAK,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC;YAC1F,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;SAC5E,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/B,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,kEAAkE,EAAE;YACvF,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,SAAS;YACT,MAAM;SACP,CAAC,CAAC;QACH,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACtC,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,KAA2B;IACvD,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC;IACxC,OAAO,MAAM,EAAE,OAAO,KAAK,KAAK;WAC3B,kBAAkB,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,KAAK,CAAC,cAAc;WAClE,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC;WACvC,KAAK,CAAC,cAAc,KAAK,SAAS;QACrC,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CAAC,cAAsB;IAChD,OAAO,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC;AAC3D,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC"}
@@ -0,0 +1,82 @@
1
+ import { type ConversationStatePurgePlan } from "./conversation-state-roots.js";
2
+ export declare const PROCESS_JOBS_DEFAULTS: Readonly<{
3
+ enabled: false;
4
+ stateDir: ".mono-agent/process-jobs";
5
+ maxConcurrent: 4;
6
+ maxActivePerConversation: 2;
7
+ maxQueued: 8;
8
+ maxRuntimeMs: number;
9
+ maxQueueAgeMs: number;
10
+ maxOutputBytes: number;
11
+ previewChars: 2000;
12
+ maxChainDepth: 4;
13
+ retention: Readonly<{
14
+ maxRecords: 1000;
15
+ maxAgeMs: number;
16
+ artifactMaxBytes: number;
17
+ }>;
18
+ }>;
19
+ export declare const PROCESS_JOBS_CAPS: Readonly<{
20
+ maxConcurrent: 32;
21
+ maxActivePerConversation: 8;
22
+ maxQueued: 64;
23
+ maxRuntimeMs: number;
24
+ maxQueueAgeMs: number;
25
+ maxOutputBytes: number;
26
+ previewChars: 8000;
27
+ maxChainDepth: 8;
28
+ retention: Readonly<{
29
+ maxRecords: 10000;
30
+ maxAgeMs: number;
31
+ artifactMaxBytes: number;
32
+ }>;
33
+ }>;
34
+ export interface ProcessJobsSettings {
35
+ readonly configured: boolean;
36
+ readonly enabled: boolean;
37
+ readonly stateDir: string;
38
+ readonly maxConcurrent: number;
39
+ readonly maxActivePerConversation: number;
40
+ readonly maxQueued: number;
41
+ readonly maxRuntimeMs: number;
42
+ readonly maxQueueAgeMs: number;
43
+ readonly maxOutputBytes: number;
44
+ readonly previewChars: number;
45
+ readonly maxChainDepth: number;
46
+ readonly retention: {
47
+ readonly maxRecords: number;
48
+ readonly maxAgeMs: number;
49
+ readonly artifactMaxBytes: number;
50
+ };
51
+ }
52
+ export interface LoadProcessJobsSettingsOptions {
53
+ /** The exact destructive-root plan already attested by clear-sessions preflight. */
54
+ readonly purgePlan?: ConversationStatePurgePlan;
55
+ /** Check an unconfigured default state root only when destructive reset is imminent. */
56
+ readonly validateDormantStateRoot?: boolean;
57
+ /** One exact config/environment generation shared by destructive preflight. */
58
+ readonly snapshot?: ProcessJobsConfigSnapshot;
59
+ }
60
+ export interface ProcessJobsConfigSnapshot {
61
+ readonly path: string;
62
+ readonly json: Readonly<Record<string, unknown>>;
63
+ readonly digest: string;
64
+ readonly fingerprint: string;
65
+ readonly missing: boolean;
66
+ readonly env: Readonly<Record<string, string | undefined>>;
67
+ }
68
+ /** Resolve only the workspace needed by destructive registry validation. */
69
+ export declare function resolveProcessJobsRegistryWorkspace(snapshot: ProcessJobsConfigSnapshot, cwd: string): string;
70
+ /** Read one strict, bounded, no-follow config generation for destructive preflight. */
71
+ export declare function readProcessJobsConfigSnapshot(input: {
72
+ readonly configPath: string;
73
+ readonly env?: Record<string, string | undefined>;
74
+ }): Promise<ProcessJobsConfigSnapshot>;
75
+ export declare function assertProcessJobsConfigSnapshotUnchanged(expected: ProcessJobsConfigSnapshot): Promise<void>;
76
+ /** Load the host-only process-job block and fail closed on every unknown key. */
77
+ export declare function loadProcessJobsSettings(input: {
78
+ readonly cwd: string;
79
+ readonly configPath: string;
80
+ readonly env?: Record<string, string | undefined>;
81
+ }, options?: LoadProcessJobsSettingsOptions): Promise<ProcessJobsSettings>;
82
+ //# sourceMappingURL=process-jobs-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-jobs-config.d.ts","sourceRoot":"","sources":["../src/process-jobs-config.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,KAAK,0BAA0B,EAEhC,MAAM,+BAA+B,CAAC;AAEvC,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;EAgBhC,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;EAc5B,CAAC;AAEH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE;QAClB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;KACnC,CAAC;CACH;AAED,MAAM,WAAW,8BAA8B;IAC7C,oFAAoF;IACpF,QAAQ,CAAC,SAAS,CAAC,EAAE,0BAA0B,CAAC;IAChD,wFAAwF;IACxF,QAAQ,CAAC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAC5C,+EAA+E;IAC/E,QAAQ,CAAC,QAAQ,CAAC,EAAE,yBAAyB,CAAC;CAC/C;AAID,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACjD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;CAC5D;AAED,4EAA4E;AAC5E,wBAAgB,mCAAmC,CACjD,QAAQ,EAAE,yBAAyB,EACnC,GAAG,EAAE,MAAM,GACV,MAAM,CAyBR;AAED,uFAAuF;AACvF,wBAAsB,6BAA6B,CAAC,KAAK,EAAE;IACzD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CACnD,GAAG,OAAO,CAAC,yBAAyB,CAAC,CA0ErC;AAED,wBAAsB,wCAAwC,CAC5D,QAAQ,EAAE,yBAAyB,GAClC,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED,iFAAiF;AACjF,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CACnD,EAAE,OAAO,GAAE,8BAAmC,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA8B7E"}
@@ -0,0 +1,423 @@
1
+ import { createHash } from "node:crypto";
2
+ import { constants as fsConstants } from "node:fs";
3
+ import { lstat, open, readFile, realpath } from "node:fs/promises";
4
+ import { basename, dirname, isAbsolute, relative, resolve, sep } from "node:path";
5
+ import { MonoAgentConfigError } from "@mono-agent/config";
6
+ import { conversationStatePurgePlanEntries, resolveConversationStatePurgeRoots, } from "./conversation-state-roots.js";
7
+ export const PROCESS_JOBS_DEFAULTS = Object.freeze({
8
+ enabled: false,
9
+ stateDir: ".mono-agent/process-jobs",
10
+ maxConcurrent: 4,
11
+ maxActivePerConversation: 2,
12
+ maxQueued: 8,
13
+ maxRuntimeMs: 30 * 60 * 1_000,
14
+ maxQueueAgeMs: 5 * 60 * 1_000,
15
+ maxOutputBytes: 1024 * 1024,
16
+ previewChars: 2_000,
17
+ maxChainDepth: 4,
18
+ retention: Object.freeze({
19
+ maxRecords: 1_000,
20
+ maxAgeMs: 7 * 24 * 60 * 60 * 1_000,
21
+ artifactMaxBytes: 256 * 1024 * 1024,
22
+ }),
23
+ });
24
+ export const PROCESS_JOBS_CAPS = Object.freeze({
25
+ maxConcurrent: 32,
26
+ maxActivePerConversation: 8,
27
+ maxQueued: 64,
28
+ maxRuntimeMs: 24 * 60 * 60 * 1_000,
29
+ maxQueueAgeMs: 60 * 60 * 1_000,
30
+ maxOutputBytes: 8 * 1024 * 1024,
31
+ previewChars: 8_000,
32
+ maxChainDepth: 8,
33
+ retention: Object.freeze({
34
+ maxRecords: 10_000,
35
+ maxAgeMs: 30 * 24 * 60 * 60 * 1_000,
36
+ artifactMaxBytes: 1024 * 1024 * 1024,
37
+ }),
38
+ });
39
+ const MAX_DESTRUCTIVE_CONFIG_BYTES = 1024 * 1024;
40
+ /** Resolve only the workspace needed by destructive registry validation. */
41
+ export function resolveProcessJobsRegistryWorkspace(snapshot, cwd) {
42
+ const runtime = snapshot.json.runtime;
43
+ if (runtime !== undefined
44
+ && (typeof runtime !== "object" || runtime === null || Array.isArray(runtime))) {
45
+ throw new MonoAgentConfigError("invalid_json", "runtime must be an object.", { path: "runtime" });
46
+ }
47
+ const configured = runtime === undefined
48
+ ? undefined
49
+ : runtime.workspace;
50
+ if (configured !== undefined && typeof configured !== "string") {
51
+ throw new MonoAgentConfigError("invalid_json", "runtime.workspace must be a string.", { path: "runtime.workspace" });
52
+ }
53
+ // An explicitly supplied environment value wins even when blank; the core
54
+ // loader normalizes that case back to cwd instead of falling through to JSON.
55
+ const selected = snapshot.env.MONO_AGENT_WORKSPACE !== undefined
56
+ ? snapshot.env.MONO_AGENT_WORKSPACE
57
+ : configured;
58
+ const normalized = selected?.trim();
59
+ return normalized === undefined || normalized.length === 0
60
+ ? resolve(cwd)
61
+ : resolve(cwd, normalized);
62
+ }
63
+ /** Read one strict, bounded, no-follow config generation for destructive preflight. */
64
+ export async function readProcessJobsConfigSnapshot(input) {
65
+ const path = resolve(input.configPath);
66
+ let handle;
67
+ try {
68
+ handle = await open(path, fsConstants.O_RDONLY | (fsConstants.O_NOFOLLOW ?? 0) | (fsConstants.O_NONBLOCK ?? 0));
69
+ }
70
+ catch (error) {
71
+ if (isErrno(error, "ENOENT")) {
72
+ try {
73
+ await lstat(path);
74
+ }
75
+ catch (secondError) {
76
+ if (isErrno(secondError, "ENOENT")) {
77
+ return {
78
+ path,
79
+ json: Object.freeze({}),
80
+ digest: "",
81
+ fingerprint: "missing",
82
+ missing: true,
83
+ env: Object.freeze({ ...(input.env ?? {}) }),
84
+ };
85
+ }
86
+ throw secondError;
87
+ }
88
+ throw new Error("restart --clear-sessions config appeared while absence was validated.");
89
+ }
90
+ if (isErrno(error, "ELOOP") || isErrno(error, "EMLINK")) {
91
+ throw new Error("restart --clear-sessions config must not be a symbolic link.");
92
+ }
93
+ throw error;
94
+ }
95
+ try {
96
+ const before = await handle.stat({ bigint: true });
97
+ assertConfigFile(before);
98
+ if (before.size > BigInt(MAX_DESTRUCTIVE_CONFIG_BYTES)) {
99
+ throw new Error(`restart --clear-sessions config exceeds ${String(MAX_DESTRUCTIVE_CONFIG_BYTES)} bytes.`);
100
+ }
101
+ const bytes = await handle.readFile();
102
+ const after = await handle.stat({ bigint: true });
103
+ const named = await lstat(path, { bigint: true });
104
+ assertConfigFile(after);
105
+ assertConfigFile(named);
106
+ if (!sameConfigFile(before, after) || !sameConfigFile(after, named)
107
+ || bytes.byteLength !== Number(after.size)) {
108
+ throw new Error("restart --clear-sessions config changed while it was read.");
109
+ }
110
+ let contents;
111
+ try {
112
+ contents = new TextDecoder("utf-8", { fatal: true }).decode(bytes);
113
+ }
114
+ catch {
115
+ throw new Error("restart --clear-sessions config is not valid UTF-8.");
116
+ }
117
+ let parsed;
118
+ try {
119
+ parsed = JSON.parse(contents);
120
+ }
121
+ catch (error) {
122
+ throw new Error("restart --clear-sessions config is not valid JSON.", { cause: error });
123
+ }
124
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
125
+ throw new Error("restart --clear-sessions config must contain one JSON object.");
126
+ }
127
+ const digest = createHash("sha256").update(bytes).digest("hex");
128
+ return {
129
+ path,
130
+ json: parsed,
131
+ digest,
132
+ fingerprint: configFingerprint(after, digest),
133
+ missing: false,
134
+ env: Object.freeze({ ...(input.env ?? {}) }),
135
+ };
136
+ }
137
+ finally {
138
+ await handle.close();
139
+ }
140
+ }
141
+ export async function assertProcessJobsConfigSnapshotUnchanged(expected) {
142
+ let current;
143
+ try {
144
+ current = await readProcessJobsConfigSnapshot({
145
+ configPath: expected.path,
146
+ env: { ...expected.env },
147
+ });
148
+ }
149
+ catch (error) {
150
+ throw new Error("restart --clear-sessions config changed after validation; no conversation state was deleted.", { cause: error });
151
+ }
152
+ if (current.missing !== expected.missing
153
+ || current.digest !== expected.digest
154
+ || current.fingerprint !== expected.fingerprint) {
155
+ throw new Error("restart --clear-sessions config changed after validation; no conversation state was deleted.");
156
+ }
157
+ }
158
+ /** Load the host-only process-job block and fail closed on every unknown key. */
159
+ export async function loadProcessJobsSettings(input, options = {}) {
160
+ let raw = {};
161
+ if (options.snapshot !== undefined) {
162
+ raw = options.snapshot.json;
163
+ }
164
+ else {
165
+ try {
166
+ raw = JSON.parse(await readFile(input.configPath, "utf8"));
167
+ }
168
+ catch {
169
+ // The core loader owns malformed/missing config reporting. This optional
170
+ // host block remains disabled until that loader accepts the file.
171
+ }
172
+ }
173
+ const root = objectOf(raw);
174
+ const value = root.processJobs;
175
+ if (value === undefined)
176
+ return await resolvedSettings(input, false, {}, options);
177
+ const block = requireObject(value, "processJobs");
178
+ rejectUnknownKeys(block, "processJobs", [
179
+ "enabled",
180
+ "stateDir",
181
+ "maxConcurrent",
182
+ "maxActivePerConversation",
183
+ "maxQueued",
184
+ "maxRuntimeMs",
185
+ "maxQueueAgeMs",
186
+ "maxOutputBytes",
187
+ "previewChars",
188
+ "maxChainDepth",
189
+ "retention",
190
+ ]);
191
+ return await resolvedSettings(input, true, block, options);
192
+ }
193
+ async function resolvedSettings(input, configured, block, options) {
194
+ const enabled = optionalBoolean(block.enabled, "processJobs.enabled") ?? PROCESS_JOBS_DEFAULTS.enabled;
195
+ const rawStateDir = optionalString(block.stateDir, "processJobs.stateDir") ?? PROCESS_JOBS_DEFAULTS.stateDir;
196
+ if (isAbsolute(rawStateDir)) {
197
+ throw new Error("processJobs.stateDir must be relative to the agent root.");
198
+ }
199
+ const agentRoot = await realpath(resolve(input.cwd)).catch(() => resolve(input.cwd));
200
+ const stateDir = resolve(agentRoot, rawStateDir);
201
+ const escaped = relative(agentRoot, stateDir);
202
+ if (escaped.length === 0) {
203
+ throw new Error("processJobs.stateDir must be a child directory of the agent root.");
204
+ }
205
+ if (escaped === ".." || escaped.startsWith(`..${sep}`) || isAbsolute(escaped)) {
206
+ throw new Error("processJobs.stateDir must stay inside the agent root.");
207
+ }
208
+ const validateStateDir = configured
209
+ || (options.validateDormantStateRoot === true && await pathExists(stateDir));
210
+ if (validateStateDir) {
211
+ await assertStateDirOutsideConversationPurgeRoots(stateDir, {
212
+ cwd: input.cwd,
213
+ configPath: input.configPath,
214
+ env: input.env ?? {},
215
+ }, options.purgePlan);
216
+ }
217
+ const retentionValue = block.retention;
218
+ const retention = retentionValue === undefined
219
+ ? {}
220
+ : requireObject(retentionValue, "processJobs.retention");
221
+ rejectUnknownKeys(retention, "processJobs.retention", ["maxRecords", "maxAgeMs", "artifactMaxBytes"]);
222
+ return {
223
+ configured,
224
+ enabled,
225
+ stateDir,
226
+ maxConcurrent: bounded(block.maxConcurrent, "processJobs.maxConcurrent", PROCESS_JOBS_DEFAULTS.maxConcurrent, PROCESS_JOBS_CAPS.maxConcurrent),
227
+ maxActivePerConversation: bounded(block.maxActivePerConversation, "processJobs.maxActivePerConversation", PROCESS_JOBS_DEFAULTS.maxActivePerConversation, PROCESS_JOBS_CAPS.maxActivePerConversation),
228
+ maxQueued: bounded(block.maxQueued, "processJobs.maxQueued", PROCESS_JOBS_DEFAULTS.maxQueued, PROCESS_JOBS_CAPS.maxQueued),
229
+ maxRuntimeMs: bounded(block.maxRuntimeMs, "processJobs.maxRuntimeMs", PROCESS_JOBS_DEFAULTS.maxRuntimeMs, PROCESS_JOBS_CAPS.maxRuntimeMs),
230
+ maxQueueAgeMs: bounded(block.maxQueueAgeMs, "processJobs.maxQueueAgeMs", PROCESS_JOBS_DEFAULTS.maxQueueAgeMs, PROCESS_JOBS_CAPS.maxQueueAgeMs),
231
+ maxOutputBytes: bounded(block.maxOutputBytes, "processJobs.maxOutputBytes", PROCESS_JOBS_DEFAULTS.maxOutputBytes, PROCESS_JOBS_CAPS.maxOutputBytes),
232
+ previewChars: bounded(block.previewChars, "processJobs.previewChars", PROCESS_JOBS_DEFAULTS.previewChars, PROCESS_JOBS_CAPS.previewChars),
233
+ maxChainDepth: bounded(block.maxChainDepth, "processJobs.maxChainDepth", PROCESS_JOBS_DEFAULTS.maxChainDepth, PROCESS_JOBS_CAPS.maxChainDepth),
234
+ retention: {
235
+ maxRecords: bounded(retention.maxRecords, "processJobs.retention.maxRecords", PROCESS_JOBS_DEFAULTS.retention.maxRecords, PROCESS_JOBS_CAPS.retention.maxRecords),
236
+ maxAgeMs: bounded(retention.maxAgeMs, "processJobs.retention.maxAgeMs", PROCESS_JOBS_DEFAULTS.retention.maxAgeMs, PROCESS_JOBS_CAPS.retention.maxAgeMs),
237
+ artifactMaxBytes: bounded(retention.artifactMaxBytes, "processJobs.retention.artifactMaxBytes", PROCESS_JOBS_DEFAULTS.retention.artifactMaxBytes, PROCESS_JOBS_CAPS.retention.artifactMaxBytes),
238
+ },
239
+ };
240
+ }
241
+ async function assertStateDirOutsideConversationPurgeRoots(stateDir, input, purgePlan) {
242
+ const canonicalStateDir = await canonicalConfigPath(stateDir, "processJobs.stateDir");
243
+ const purgeRoots = purgePlan === undefined
244
+ ? await configuredPurgeRoots(input)
245
+ : conversationStatePurgePlanEntries(purgePlan).map((root) => ({
246
+ kind: root.kind,
247
+ path: root.path,
248
+ canonicalPath: root.canonicalPath,
249
+ }));
250
+ for (const purgeRoot of purgeRoots) {
251
+ const canonicalPurgeRoot = purgeRoot.canonicalPath;
252
+ if (!pathsContainEachOther(canonicalStateDir, canonicalPurgeRoot))
253
+ continue;
254
+ const message = `processJobs.stateDir must be disjoint from the restart --clear-sessions ${purgeRoot.kind} purge root; neither path may contain the other.`;
255
+ throw new MonoAgentConfigError("invalid_json", message, {
256
+ path: "processJobs.stateDir",
257
+ reason: message,
258
+ stateDir: canonicalStateDir,
259
+ purgeRoot: canonicalPurgeRoot,
260
+ purgeRootKind: purgeRoot.kind,
261
+ });
262
+ }
263
+ }
264
+ async function configuredPurgeRoots(input) {
265
+ const roots = await resolveConversationStatePurgeRoots(input);
266
+ const values = [
267
+ ...(roots.sessions === undefined ? [] : [{
268
+ kind: "Pi provider sessions",
269
+ path: roots.sessions,
270
+ }]),
271
+ { kind: "durable session/tool history", path: roots.history },
272
+ { kind: "ACP sessions", path: roots.acpSessions },
273
+ ];
274
+ return await Promise.all(values.map(async (root) => ({
275
+ kind: root.kind,
276
+ path: root.path,
277
+ canonicalPath: await canonicalConfigPath(root.path, `restart --clear-sessions ${root.kind} purge root`),
278
+ })));
279
+ }
280
+ async function canonicalConfigPath(path, label) {
281
+ let cursor = resolve(path);
282
+ const missingSuffix = [];
283
+ while (true) {
284
+ try {
285
+ const canonicalPrefix = await realpath(cursor);
286
+ return resolve(canonicalPrefix, ...missingSuffix);
287
+ }
288
+ catch (error) {
289
+ if (!isErrno(error, "ENOENT")) {
290
+ const reason = error instanceof Error ? error.message : String(error);
291
+ const message = `${label} could not be canonicalized: ${reason}`;
292
+ throw new MonoAgentConfigError("invalid_json", message, {
293
+ path: "processJobs.stateDir",
294
+ reason: message,
295
+ });
296
+ }
297
+ try {
298
+ await lstat(cursor);
299
+ const message = `${label} exists but could not be canonicalized.`;
300
+ throw new MonoAgentConfigError("invalid_json", message, {
301
+ path: "processJobs.stateDir",
302
+ reason: message,
303
+ });
304
+ }
305
+ catch (lstatError) {
306
+ if (lstatError instanceof MonoAgentConfigError)
307
+ throw lstatError;
308
+ if (!isErrno(lstatError, "ENOENT")) {
309
+ const reason = lstatError instanceof Error ? lstatError.message : String(lstatError);
310
+ const message = `${label} could not be inspected while canonicalizing it: ${reason}`;
311
+ throw new MonoAgentConfigError("invalid_json", message, {
312
+ path: "processJobs.stateDir",
313
+ reason: message,
314
+ });
315
+ }
316
+ }
317
+ const parent = dirname(cursor);
318
+ if (parent === cursor) {
319
+ const message = `${label} could not be canonicalized because no existing ancestor was found.`;
320
+ throw new MonoAgentConfigError("invalid_json", message, {
321
+ path: "processJobs.stateDir",
322
+ reason: message,
323
+ });
324
+ }
325
+ missingSuffix.unshift(basename(cursor));
326
+ cursor = parent;
327
+ }
328
+ }
329
+ }
330
+ function pathsContainEachOther(first, second) {
331
+ return pathContains(first, second) || pathContains(second, first);
332
+ }
333
+ function pathContains(parent, child) {
334
+ const candidate = relative(parent, child);
335
+ return candidate.length === 0
336
+ || (candidate !== ".." && !candidate.startsWith(`..${sep}`) && !isAbsolute(candidate));
337
+ }
338
+ function bounded(value, path, fallback, cap) {
339
+ if (value === undefined)
340
+ return fallback;
341
+ if (!Number.isSafeInteger(value) || Number(value) <= 0) {
342
+ throw new Error(`${path} must be a positive safe integer.`);
343
+ }
344
+ if (Number(value) > cap)
345
+ throw new Error(`${path} cannot exceed ${String(cap)}.`);
346
+ return Number(value);
347
+ }
348
+ function objectOf(value) {
349
+ return typeof value === "object" && value !== null && !Array.isArray(value)
350
+ ? value
351
+ : {};
352
+ }
353
+ function requireObject(value, path) {
354
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
355
+ throw new Error(`${path} must be an object.`);
356
+ }
357
+ return value;
358
+ }
359
+ function optionalString(value, path) {
360
+ if (value === undefined)
361
+ return undefined;
362
+ if (typeof value !== "string" || value.trim().length === 0) {
363
+ throw new Error(`${path} must be a non-empty string.`);
364
+ }
365
+ return value.trim();
366
+ }
367
+ function optionalBoolean(value, path) {
368
+ if (value === undefined)
369
+ return undefined;
370
+ if (typeof value !== "boolean")
371
+ throw new Error(`${path} must be a boolean.`);
372
+ return value;
373
+ }
374
+ function rejectUnknownKeys(value, path, allowed) {
375
+ const allowedSet = new Set(allowed);
376
+ const unknown = Object.keys(value).filter((key) => !allowedSet.has(key));
377
+ if (unknown.length > 0) {
378
+ throw new Error(`${path} has unknown ${unknown.length === 1 ? "key" : "keys"}: ${unknown.join(", ")}.`);
379
+ }
380
+ }
381
+ function isErrno(error, code) {
382
+ return typeof error === "object" && error !== null && "code" in error && error.code === code;
383
+ }
384
+ async function pathExists(path) {
385
+ try {
386
+ await lstat(path);
387
+ return true;
388
+ }
389
+ catch (error) {
390
+ if (isErrno(error, "ENOENT"))
391
+ return false;
392
+ throw error;
393
+ }
394
+ }
395
+ function assertConfigFile(details) {
396
+ if (!details.isFile() || details.isSymbolicLink() || details.nlink !== 1n) {
397
+ throw new Error("restart --clear-sessions config must be one regular file with one link.");
398
+ }
399
+ }
400
+ function sameConfigFile(left, right) {
401
+ return left.dev === right.dev
402
+ && left.ino === right.ino
403
+ && left.size === right.size
404
+ && left.mtimeNs === right.mtimeNs
405
+ && left.ctimeNs === right.ctimeNs
406
+ && left.mode === right.mode
407
+ && left.uid === right.uid
408
+ && left.nlink === right.nlink;
409
+ }
410
+ function configFingerprint(details, digest) {
411
+ return [
412
+ details.dev,
413
+ details.ino,
414
+ details.size,
415
+ details.mtimeNs,
416
+ details.ctimeNs,
417
+ details.mode,
418
+ details.uid,
419
+ details.nlink,
420
+ digest,
421
+ ].join(":");
422
+ }
423
+ //# sourceMappingURL=process-jobs-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-jobs-config.js","sourceRoot":"","sources":["../src/process-jobs-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { AgentRequestBase, AgentResponder } from "@mono-agent/agent-contracts";
2
+ export interface ProcessJobWakeContext {
3
+ readonly jobId: string;
4
+ readonly chainDepth: number;
5
+ }
6
+ export type ProcessJobWakeContextResolution = {
7
+ readonly kind: "none";
8
+ } | {
9
+ readonly kind: "resolved";
10
+ readonly context: ProcessJobWakeContext;
11
+ } | {
12
+ readonly kind: "missed";
13
+ };
14
+ /** Run a genuine channel turn with host-owned fan-out depth attached out of band. */
15
+ export declare function runWithProcessJobWakeContext<T>(context: ProcessJobWakeContext, operation: () => Promise<T>, deliveryKey: string): Promise<T>;
16
+ /**
17
+ * Capture an admitted host wake on the exact request identity that survives
18
+ * the responder-to-harness queue boundary. The association remains outside
19
+ * public/string metadata, prompts, history, traces, and serialized payloads.
20
+ */
21
+ export declare function bindProcessJobWakeContextToResponder(responder: AgentResponder): AgentResponder;
22
+ /** Resolve only an association previously issued by the app-owned responder seam. */
23
+ export declare function processJobWakeContextForRequest(request: Pick<AgentRequestBase, "metadata">): ProcessJobWakeContextResolution;
24
+ //# sourceMappingURL=process-jobs-context.d.ts.map