@mono-agent/agent-app 0.6.2 → 0.9.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 (313) hide show
  1. package/README.md +259 -19
  2. package/dist/account-home.d.ts +6 -0
  3. package/dist/account-home.d.ts.map +1 -0
  4. package/dist/account-home.js +9 -0
  5. package/dist/account-home.js.map +1 -0
  6. package/dist/adapter-send-proxy.d.ts +18 -0
  7. package/dist/adapter-send-proxy.d.ts.map +1 -0
  8. package/dist/adapter-send-proxy.js +229 -0
  9. package/dist/adapter-send-proxy.js.map +1 -0
  10. package/dist/adapter-send-tools-main.js +62 -4
  11. package/dist/adapter-send-tools-main.js.map +1 -1
  12. package/dist/adapter-send-tools.d.ts +33 -6
  13. package/dist/adapter-send-tools.d.ts.map +1 -1
  14. package/dist/adapter-send-tools.js +485 -87
  15. package/dist/adapter-send-tools.js.map +1 -1
  16. package/dist/app-config.d.ts +3 -1
  17. package/dist/app-config.d.ts.map +1 -1
  18. package/dist/app-config.js +16 -5
  19. package/dist/app-config.js.map +1 -1
  20. package/dist/app.d.ts +27 -0
  21. package/dist/app.d.ts.map +1 -1
  22. package/dist/app.js +761 -147
  23. package/dist/app.js.map +1 -1
  24. package/dist/background-environment.d.ts +16 -0
  25. package/dist/background-environment.d.ts.map +1 -0
  26. package/dist/background-environment.js +68 -0
  27. package/dist/background-environment.js.map +1 -0
  28. package/dist/background-runtime.d.ts +62 -0
  29. package/dist/background-runtime.d.ts.map +1 -0
  30. package/dist/background-runtime.js +1115 -0
  31. package/dist/background-runtime.js.map +1 -0
  32. package/dist/background-snapshot-key.d.ts +13 -0
  33. package/dist/background-snapshot-key.d.ts.map +1 -0
  34. package/dist/background-snapshot-key.js +194 -0
  35. package/dist/background-snapshot-key.js.map +1 -0
  36. package/dist/background-snapshot.d.ts +96 -0
  37. package/dist/background-snapshot.d.ts.map +1 -0
  38. package/dist/background-snapshot.js +450 -0
  39. package/dist/background-snapshot.js.map +1 -0
  40. package/dist/background-worker-lease.d.ts +39 -0
  41. package/dist/background-worker-lease.d.ts.map +1 -0
  42. package/dist/background-worker-lease.js +356 -0
  43. package/dist/background-worker-lease.js.map +1 -0
  44. package/dist/background.d.ts +74 -2
  45. package/dist/background.d.ts.map +1 -1
  46. package/dist/background.js +815 -73
  47. package/dist/background.js.map +1 -1
  48. package/dist/broadcast-recorder.d.ts.map +1 -1
  49. package/dist/broadcast-recorder.js +24 -2
  50. package/dist/broadcast-recorder.js.map +1 -1
  51. package/dist/channel-plugins.d.ts +2 -0
  52. package/dist/channel-plugins.d.ts.map +1 -1
  53. package/dist/channel-plugins.js +8 -0
  54. package/dist/channel-plugins.js.map +1 -1
  55. package/dist/channels.d.ts +10 -0
  56. package/dist/channels.d.ts.map +1 -1
  57. package/dist/channels.js +87 -9
  58. package/dist/channels.js.map +1 -1
  59. package/dist/cli.d.ts +86 -4
  60. package/dist/cli.d.ts.map +1 -1
  61. package/dist/cli.js +2421 -143
  62. package/dist/cli.js.map +1 -1
  63. package/dist/config-reference.d.ts.map +1 -1
  64. package/dist/config-reference.js +448 -6
  65. package/dist/config-reference.js.map +1 -1
  66. package/dist/configuration-proposal-main.d.ts +3 -0
  67. package/dist/configuration-proposal-main.d.ts.map +1 -0
  68. package/dist/configuration-proposal-main.js +13 -0
  69. package/dist/configuration-proposal-main.js.map +1 -0
  70. package/dist/configuration-proposal-tool.d.ts +33 -0
  71. package/dist/configuration-proposal-tool.d.ts.map +1 -0
  72. package/dist/configuration-proposal-tool.js +188 -0
  73. package/dist/configuration-proposal-tool.js.map +1 -0
  74. package/dist/configured-agent.d.ts +16 -0
  75. package/dist/configured-agent.d.ts.map +1 -1
  76. package/dist/configured-agent.js +165 -18
  77. package/dist/configured-agent.js.map +1 -1
  78. package/dist/consumer-contract.d.ts +3 -0
  79. package/dist/consumer-contract.d.ts.map +1 -1
  80. package/dist/consumer-contract.js +44 -1
  81. package/dist/consumer-contract.js.map +1 -1
  82. package/dist/continuation-command.d.ts +15 -0
  83. package/dist/continuation-command.d.ts.map +1 -0
  84. package/dist/continuation-command.js +170 -0
  85. package/dist/continuation-command.js.map +1 -0
  86. package/dist/continuation-config.d.ts +25 -0
  87. package/dist/continuation-config.d.ts.map +1 -0
  88. package/dist/continuation-config.js +236 -0
  89. package/dist/continuation-config.js.map +1 -0
  90. package/dist/continuation-service.d.ts +99 -0
  91. package/dist/continuation-service.d.ts.map +1 -0
  92. package/dist/continuation-service.js +1313 -0
  93. package/dist/continuation-service.js.map +1 -0
  94. package/dist/continuation-store.d.ts +104 -0
  95. package/dist/continuation-store.d.ts.map +1 -0
  96. package/dist/continuation-store.js +688 -0
  97. package/dist/continuation-store.js.map +1 -0
  98. package/dist/continuations.d.ts +167 -0
  99. package/dist/continuations.d.ts.map +1 -0
  100. package/dist/continuations.js +71 -0
  101. package/dist/continuations.js.map +1 -0
  102. package/dist/doctor.d.ts +29 -5
  103. package/dist/doctor.d.ts.map +1 -1
  104. package/dist/doctor.js +1611 -116
  105. package/dist/doctor.js.map +1 -1
  106. package/dist/first-run-managed-memory.d.ts +39 -0
  107. package/dist/first-run-managed-memory.d.ts.map +1 -0
  108. package/dist/first-run-managed-memory.js +584 -0
  109. package/dist/first-run-managed-memory.js.map +1 -0
  110. package/dist/first-run-readiness.d.ts +111 -0
  111. package/dist/first-run-readiness.d.ts.map +1 -0
  112. package/dist/first-run-readiness.js +728 -0
  113. package/dist/first-run-readiness.js.map +1 -0
  114. package/dist/index.d.ts +17 -3
  115. package/dist/index.d.ts.map +1 -1
  116. package/dist/index.js +8 -1
  117. package/dist/index.js.map +1 -1
  118. package/dist/init.d.ts +95 -3
  119. package/dist/init.d.ts.map +1 -1
  120. package/dist/init.js +1218 -24
  121. package/dist/init.js.map +1 -1
  122. package/dist/interaction-bridge.d.ts +25 -1
  123. package/dist/interaction-bridge.d.ts.map +1 -1
  124. package/dist/interaction-bridge.js +281 -19
  125. package/dist/interaction-bridge.js.map +1 -1
  126. package/dist/launchd.d.ts +16 -6
  127. package/dist/launchd.d.ts.map +1 -1
  128. package/dist/launchd.js +30 -15
  129. package/dist/launchd.js.map +1 -1
  130. package/dist/local-configuration.d.ts +99 -0
  131. package/dist/local-configuration.d.ts.map +1 -0
  132. package/dist/local-configuration.js +1299 -0
  133. package/dist/local-configuration.js.map +1 -0
  134. package/dist/managed-runtime-packages.d.ts +9 -0
  135. package/dist/managed-runtime-packages.d.ts.map +1 -0
  136. package/dist/managed-runtime-packages.js +56 -0
  137. package/dist/managed-runtime-packages.js.map +1 -0
  138. package/dist/memory-command.d.ts +4 -0
  139. package/dist/memory-command.d.ts.map +1 -1
  140. package/dist/memory-command.js +751 -27
  141. package/dist/memory-command.js.map +1 -1
  142. package/dist/memory-embedding-service.d.ts +33 -0
  143. package/dist/memory-embedding-service.d.ts.map +1 -0
  144. package/dist/memory-embedding-service.js +207 -0
  145. package/dist/memory-embedding-service.js.map +1 -0
  146. package/dist/memory-recall.d.ts +43 -14
  147. package/dist/memory-recall.d.ts.map +1 -1
  148. package/dist/memory-recall.js +103 -33
  149. package/dist/memory-recall.js.map +1 -1
  150. package/dist/memory-retrieval.d.ts +66 -0
  151. package/dist/memory-retrieval.d.ts.map +1 -0
  152. package/dist/memory-retrieval.js +332 -0
  153. package/dist/memory-retrieval.js.map +1 -0
  154. package/dist/modules/base.d.ts +6 -5
  155. package/dist/modules/base.d.ts.map +1 -1
  156. package/dist/modules/base.js +11 -7
  157. package/dist/modules/base.js.map +1 -1
  158. package/dist/modules/catalog.d.ts.map +1 -1
  159. package/dist/modules/catalog.js +141 -25
  160. package/dist/modules/catalog.js.map +1 -1
  161. package/dist/modules/index.d.ts +2 -2
  162. package/dist/modules/index.d.ts.map +1 -1
  163. package/dist/modules/index.js +1 -1
  164. package/dist/modules/index.js.map +1 -1
  165. package/dist/modules/known-tools.d.ts +3 -0
  166. package/dist/modules/known-tools.d.ts.map +1 -1
  167. package/dist/modules/known-tools.js +11 -1
  168. package/dist/modules/known-tools.js.map +1 -1
  169. package/dist/modules/types.d.ts +20 -6
  170. package/dist/modules/types.d.ts.map +1 -1
  171. package/dist/modules/types.js.map +1 -1
  172. package/dist/notify-runtime.d.ts +26 -0
  173. package/dist/notify-runtime.d.ts.map +1 -0
  174. package/dist/notify-runtime.js +27 -0
  175. package/dist/notify-runtime.js.map +1 -0
  176. package/dist/notify-tool.d.ts +51 -0
  177. package/dist/notify-tool.d.ts.map +1 -0
  178. package/dist/notify-tool.js +182 -0
  179. package/dist/notify-tool.js.map +1 -0
  180. package/dist/package-version.d.ts +3 -0
  181. package/dist/package-version.d.ts.map +1 -0
  182. package/dist/package-version.js +14 -0
  183. package/dist/package-version.js.map +1 -0
  184. package/dist/pi-auth-store-inspection.d.ts +21 -0
  185. package/dist/pi-auth-store-inspection.d.ts.map +1 -0
  186. package/dist/pi-auth-store-inspection.js +120 -0
  187. package/dist/pi-auth-store-inspection.js.map +1 -0
  188. package/dist/pi-oauth-login-main.d.ts +3 -0
  189. package/dist/pi-oauth-login-main.d.ts.map +1 -0
  190. package/dist/pi-oauth-login-main.js +14 -0
  191. package/dist/pi-oauth-login-main.js.map +1 -0
  192. package/dist/pi-oauth-login.d.ts +22 -0
  193. package/dist/pi-oauth-login.d.ts.map +1 -0
  194. package/dist/pi-oauth-login.js +79 -0
  195. package/dist/pi-oauth-login.js.map +1 -0
  196. package/dist/proactive-notify.d.ts +2 -0
  197. package/dist/proactive-notify.d.ts.map +1 -1
  198. package/dist/proactive-notify.js +1 -0
  199. package/dist/proactive-notify.js.map +1 -1
  200. package/dist/process-incarnation.d.ts +23 -0
  201. package/dist/process-incarnation.d.ts.map +1 -0
  202. package/dist/process-incarnation.js +208 -0
  203. package/dist/process-incarnation.js.map +1 -0
  204. package/dist/project-skills.d.ts +40 -0
  205. package/dist/project-skills.d.ts.map +1 -0
  206. package/dist/project-skills.js +573 -0
  207. package/dist/project-skills.js.map +1 -0
  208. package/dist/provider-setup.d.ts +117 -2
  209. package/dist/provider-setup.d.ts.map +1 -1
  210. package/dist/provider-setup.js +1505 -49
  211. package/dist/provider-setup.js.map +1 -1
  212. package/dist/readiness-probe-worker.d.ts +12 -0
  213. package/dist/readiness-probe-worker.d.ts.map +1 -0
  214. package/dist/readiness-probe-worker.js +276 -0
  215. package/dist/readiness-probe-worker.js.map +1 -0
  216. package/dist/readiness-probe.d.ts +100 -0
  217. package/dist/readiness-probe.d.ts.map +1 -0
  218. package/dist/readiness-probe.js +780 -0
  219. package/dist/readiness-probe.js.map +1 -0
  220. package/dist/recipes/base.d.ts +15 -0
  221. package/dist/recipes/base.d.ts.map +1 -0
  222. package/dist/recipes/base.js +51 -0
  223. package/dist/recipes/base.js.map +1 -0
  224. package/dist/recipes/catalog.d.ts +4 -0
  225. package/dist/recipes/catalog.d.ts.map +1 -0
  226. package/dist/recipes/catalog.js +525 -0
  227. package/dist/recipes/catalog.js.map +1 -0
  228. package/dist/recipes/index.d.ts +11 -0
  229. package/dist/recipes/index.d.ts.map +1 -0
  230. package/dist/recipes/index.js +14 -0
  231. package/dist/recipes/index.js.map +1 -0
  232. package/dist/recipes/types.d.ts +70 -0
  233. package/dist/recipes/types.d.ts.map +1 -0
  234. package/dist/recipes/types.js +15 -0
  235. package/dist/recipes/types.js.map +1 -0
  236. package/dist/request-model-override.d.ts +43 -1
  237. package/dist/request-model-override.d.ts.map +1 -1
  238. package/dist/request-model-override.js +178 -19
  239. package/dist/request-model-override.js.map +1 -1
  240. package/dist/run-history.d.ts +32 -0
  241. package/dist/run-history.d.ts.map +1 -0
  242. package/dist/run-history.js +859 -0
  243. package/dist/run-history.js.map +1 -0
  244. package/dist/runs-health.d.ts.map +1 -1
  245. package/dist/runs-health.js +12 -4
  246. package/dist/runs-health.js.map +1 -1
  247. package/dist/runtime-option-extensions.d.ts +14 -0
  248. package/dist/runtime-option-extensions.d.ts.map +1 -0
  249. package/dist/runtime-option-extensions.js +98 -0
  250. package/dist/runtime-option-extensions.js.map +1 -0
  251. package/dist/runtime-routes.d.ts +9 -0
  252. package/dist/runtime-routes.d.ts.map +1 -0
  253. package/dist/runtime-routes.js +13 -0
  254. package/dist/runtime-routes.js.map +1 -0
  255. package/dist/sandbox-manager.d.ts +86 -0
  256. package/dist/sandbox-manager.d.ts.map +1 -0
  257. package/dist/sandbox-manager.js +1402 -0
  258. package/dist/sandbox-manager.js.map +1 -0
  259. package/dist/setup.d.ts +29 -0
  260. package/dist/setup.d.ts.map +1 -0
  261. package/dist/setup.js +97 -0
  262. package/dist/setup.js.map +1 -0
  263. package/dist/supermemory-plugin.d.ts +56 -0
  264. package/dist/supermemory-plugin.d.ts.map +1 -0
  265. package/dist/supermemory-plugin.js +142 -0
  266. package/dist/supermemory-plugin.js.map +1 -0
  267. package/dist/tui-command.d.ts +56 -0
  268. package/dist/tui-command.d.ts.map +1 -1
  269. package/dist/tui-command.js +305 -31
  270. package/dist/tui-command.js.map +1 -1
  271. package/dist/web-command.d.ts +8 -0
  272. package/dist/web-command.d.ts.map +1 -1
  273. package/dist/web-command.js +174 -17
  274. package/dist/web-command.js.map +1 -1
  275. package/dist/wizard/answers.d.ts +31 -4
  276. package/dist/wizard/answers.d.ts.map +1 -1
  277. package/dist/wizard/answers.js +141 -29
  278. package/dist/wizard/answers.js.map +1 -1
  279. package/dist/wizard/from-flags.d.ts +7 -0
  280. package/dist/wizard/from-flags.d.ts.map +1 -1
  281. package/dist/wizard/from-flags.js +36 -2
  282. package/dist/wizard/from-flags.js.map +1 -1
  283. package/dist/wizard/index.d.ts +4 -4
  284. package/dist/wizard/index.d.ts.map +1 -1
  285. package/dist/wizard/index.js +2 -2
  286. package/dist/wizard/index.js.map +1 -1
  287. package/dist/wizard/model-discovery.d.ts +33 -2
  288. package/dist/wizard/model-discovery.d.ts.map +1 -1
  289. package/dist/wizard/model-discovery.js +826 -108
  290. package/dist/wizard/model-discovery.js.map +1 -1
  291. package/dist/wizard/presets.d.ts +1 -1
  292. package/dist/wizard/presets.d.ts.map +1 -1
  293. package/dist/wizard/presets.js +7 -12
  294. package/dist/wizard/presets.js.map +1 -1
  295. package/dist/wizard/prompts.d.ts +56 -9
  296. package/dist/wizard/prompts.d.ts.map +1 -1
  297. package/dist/wizard/prompts.js +172 -20
  298. package/dist/wizard/prompts.js.map +1 -1
  299. package/dist/wizard/run.d.ts +59 -3
  300. package/dist/wizard/run.d.ts.map +1 -1
  301. package/dist/wizard/run.js +1290 -191
  302. package/dist/wizard/run.js.map +1 -1
  303. package/package.json +21 -16
  304. package/resources/srt/package-lock.json +66 -0
  305. package/resources/srt/package.json +9 -0
  306. package/schema/mono-agent.config.schema.json +587 -20
  307. package/skills/mono-agent-composer/SKILL.md +6 -6
  308. package/skills/mono-agent-composer/references/config-blueprint.md +11 -10
  309. package/skills/mono-agent-composer/references/discovery-questions.md +33 -18
  310. package/skills/mono-agent-composer/references/feature-coverage.md +14 -12
  311. package/skills/mono-agent-composer/references/package-map.md +2 -2
  312. package/skills/mono-agent-composer/references/playbooks.md +8 -7
  313. package/skills/mono-agent-composer/references/validation.md +3 -3
@@ -0,0 +1,170 @@
1
+ import { lstat, readFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { loadAppCoreConfig } from "./app-config.js";
4
+ import { loadContinuationSettings } from "./continuation-config.js";
5
+ import { continuationOperatorToken } from "./continuation-service.js";
6
+ /** Authenticated operator client. It never opens or rewrites the state ledger directly. */
7
+ export async function runContinuationCommand(options) {
8
+ const stdout = options.stdout ?? ((text) => process.stdout.write(text));
9
+ const stderr = options.stderr ?? ((text) => process.stderr.write(text));
10
+ let settings;
11
+ let continuationServers;
12
+ try {
13
+ const [resolvedSettings, coreConfig] = await Promise.all([
14
+ loadContinuationSettings({
15
+ cwd: options.cwd,
16
+ configPath: options.configPath,
17
+ env: options.env,
18
+ }),
19
+ loadAppCoreConfig({
20
+ cwd: options.cwd,
21
+ configPath: options.configPath,
22
+ env: options.env,
23
+ }),
24
+ ]);
25
+ settings = resolvedSettings;
26
+ continuationServers = coreConfig.tools.continuationServers;
27
+ }
28
+ catch (error) {
29
+ stderr(`Continuation configuration error: ${reasonOf(error)}\n`);
30
+ return 1;
31
+ }
32
+ if (!settings.configured && (continuationServers?.length ?? 0) === 0) {
33
+ stderr("Continuations are not configured in mono-agent.config.json.\n");
34
+ return 1;
35
+ }
36
+ let token;
37
+ try {
38
+ token = continuationOperatorToken(await readOwnerSecret(join(settings.stateDir, "continuation-secret")));
39
+ }
40
+ catch (error) {
41
+ stderr(`Continuation operator credentials are unavailable: ${reasonOf(error)}\n`);
42
+ return 1;
43
+ }
44
+ const [action = "list", id, resolution, deliveryId, ...extra] = options.positionals;
45
+ const invalidPage = (options.limit !== undefined || options.cursor !== undefined) && action !== "list";
46
+ const invalidLimit = options.limit !== undefined
47
+ && (!Number.isSafeInteger(options.limit) || options.limit < 1 || options.limit > 500);
48
+ const invalidCursor = options.cursor !== undefined
49
+ && (options.cursor.length === 0 || options.cursor.length > 512);
50
+ if (extra.length > 0 || invalidPage || invalidLimit || invalidCursor || !validUsage(action, id, resolution)) {
51
+ stderr("Usage: mono-agent continuations [list [--limit <n>] [--cursor <opaque>]|health|retry <id>|cancel <id>|resolve <id> delivered|not-delivered|dead-lettered [delivery-id]] [--json]\n");
52
+ return 2;
53
+ }
54
+ const baseUrl = `http://${formatHost(settings.host)}:${String(settings.port)}`;
55
+ const fetchImpl = options.fetchImpl ?? fetch;
56
+ try {
57
+ const response = await request(fetchImpl, baseUrl, token, action, id, resolution, deliveryId, options.limit, options.cursor);
58
+ const body = await response.json();
59
+ if (!response.ok) {
60
+ stderr(`Continuation command failed (${String(response.status)}): ${errorMessage(body)}\n`);
61
+ return 1;
62
+ }
63
+ if (options.json === true) {
64
+ stdout(`${JSON.stringify(body, null, 2)}\n`);
65
+ return 0;
66
+ }
67
+ stdout(renderHuman(action, body));
68
+ return 0;
69
+ }
70
+ catch (error) {
71
+ stderr(`Continuation service is unavailable at ${baseUrl}: ${reasonOf(error)}\n`);
72
+ return 1;
73
+ }
74
+ }
75
+ async function request(fetchImpl, baseUrl, token, action, id, resolution, deliveryId, limit, cursor) {
76
+ const headers = { authorization: `Bearer ${token}`, "content-type": "application/json" };
77
+ if (action === "list") {
78
+ const url = new URL(`${baseUrl}/v1/operator/continuations`);
79
+ if (limit !== undefined)
80
+ url.searchParams.set("limit", String(limit));
81
+ if (cursor !== undefined)
82
+ url.searchParams.set("cursor", cursor);
83
+ return await fetchImpl(url, { headers });
84
+ }
85
+ if (action === "health")
86
+ return await fetchImpl(`${baseUrl}/v1/operator/health`, { headers });
87
+ if (action === "retry" || action === "cancel") {
88
+ return await fetchImpl(`${baseUrl}/v1/operator/continuations/${encodeURIComponent(id)}/${action}`, {
89
+ method: "POST",
90
+ headers,
91
+ body: "{}",
92
+ });
93
+ }
94
+ const kind = resolution === "not-delivered"
95
+ ? "not_delivered"
96
+ : resolution === "dead-lettered"
97
+ ? "dead_lettered"
98
+ : "delivered";
99
+ return await fetchImpl(`${baseUrl}/v1/operator/continuations/${encodeURIComponent(id)}/resolve`, {
100
+ method: "POST",
101
+ headers,
102
+ body: JSON.stringify({ kind, ...(kind === "delivered" && deliveryId !== undefined ? { deliveryId } : {}) }),
103
+ });
104
+ }
105
+ function validUsage(action, id, resolution) {
106
+ if (action === "list" || action === "health")
107
+ return id === undefined && resolution === undefined;
108
+ if (action === "retry" || action === "cancel")
109
+ return id !== undefined && resolution === undefined;
110
+ if (action !== "resolve" || id === undefined)
111
+ return false;
112
+ return resolution === "delivered" || resolution === "not-delivered" || resolution === "dead-lettered";
113
+ }
114
+ function renderHuman(action, body) {
115
+ if (action === "list") {
116
+ const continuations = isObject(body) && Array.isArray(body.continuations)
117
+ ? body.continuations
118
+ : [];
119
+ if (continuations.length === 0)
120
+ return "No continuations recorded.\n";
121
+ const nextCursor = isObject(body) && typeof body.nextCursor === "string" ? body.nextCursor : undefined;
122
+ return [
123
+ "CONTINUATION STATE MODE UPDATED",
124
+ ...continuations.map((item) => [
125
+ item.continuationId.padEnd(38),
126
+ item.state.padEnd(19),
127
+ item.mode.padEnd(21),
128
+ item.updatedAt,
129
+ ].join(" ")),
130
+ ...(nextCursor === undefined
131
+ ? []
132
+ : [`More records are available. Continue with: mono-agent continuations list --cursor ${nextCursor}`]),
133
+ "",
134
+ ].join("\n");
135
+ }
136
+ if (action === "health") {
137
+ const health = body;
138
+ return `Continuation health: ${health.status}; pending=${String(health.pending)} due=${String(health.due)} delivery_unknown=${String(health.counts?.delivery_unknown ?? 0)} dead_lettered=${String(health.counts?.dead_lettered ?? 0)} history_degraded=${String(health.storage?.historyDegraded ?? 0)}\n`;
139
+ }
140
+ const status = body;
141
+ return `${status.continuationId}: ${status.state}${status.receipt?.deliveryId === undefined ? "" : ` (${status.receipt.deliveryId})`}\n`;
142
+ }
143
+ async function readOwnerSecret(path) {
144
+ const info = await lstat(path);
145
+ if (!info.isFile() || info.isSymbolicLink())
146
+ throw new Error("secret path is not a regular file");
147
+ if (typeof process.getuid === "function" && info.uid !== process.getuid())
148
+ throw new Error("secret is not owned by the current user");
149
+ if (process.platform !== "win32" && (info.mode & 0o077) !== 0)
150
+ throw new Error("secret permissions are not owner-only");
151
+ const secret = Buffer.from((await readFile(path, "utf8")).trim(), "base64url");
152
+ if (secret.length !== 32)
153
+ throw new Error("secret contents are invalid");
154
+ return secret;
155
+ }
156
+ function formatHost(host) {
157
+ return host.includes(":") && !host.startsWith("[") ? `[${host}]` : host;
158
+ }
159
+ function errorMessage(body) {
160
+ if (!isObject(body) || !isObject(body.error) || typeof body.error.message !== "string")
161
+ return "unknown error";
162
+ return body.error.message;
163
+ }
164
+ function isObject(value) {
165
+ return typeof value === "object" && value !== null && !Array.isArray(value);
166
+ }
167
+ function reasonOf(error) {
168
+ return error instanceof Error ? error.message : String(error);
169
+ }
170
+ //# sourceMappingURL=continuation-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"continuation-command.js","sourceRoot":"","sources":["../src/continuation-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAgBtE,2FAA2F;AAC3F,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,OAAsC;IACjF,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAChF,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAChF,IAAI,QAAQ,CAAC;IACb,IAAI,mBAAkD,CAAC;IACvD,IAAI,CAAC;QACH,MAAM,CAAC,gBAAgB,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACvD,wBAAwB,CAAC;gBACvB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,GAAG,EAAE,OAAO,CAAC,GAAG;aACjB,CAAC;YACF,iBAAiB,CAAC;gBAChB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,GAAG,EAAE,OAAO,CAAC,GAAG;aACjB,CAAC;SACH,CAAC,CAAC;QACH,QAAQ,GAAG,gBAAgB,CAAC;QAC5B,mBAAmB,GAAG,UAAU,CAAC,KAAK,CAAC,mBAAmB,CAAC;IAC7D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,qCAAqC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjE,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,CAAC,mBAAmB,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QACrE,MAAM,CAAC,+DAA+D,CAAC,CAAC;QACxE,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,KAAa,CAAC;IAClB,IAAI,CAAC;QACH,KAAK,GAAG,yBAAyB,CAAC,MAAM,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC3G,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,sDAAsD,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClF,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IACpF,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,IAAI,MAAM,KAAK,MAAM,CAAC;IACvG,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,KAAK,SAAS;WAC3C,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,GAAG,CAAC,IAAI,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;IACxF,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,KAAK,SAAS;WAC7C,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;IAClE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,IAAI,YAAY,IAAI,aAAa,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,CAAC;QAC5G,MAAM,CAAC,oLAAoL,CAAC,CAAC;QAC7L,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,OAAO,GAAG,UAAU,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IAC/E,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC;IAC7C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAC5B,SAAS,EACT,OAAO,EACP,KAAK,EACL,MAAM,EACN,EAAE,EACF,UAAU,EACV,UAAU,EACV,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,MAAM,CACf,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAa,CAAC;QAC9C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,CAAC,gCAAgC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5F,OAAO,CAAC,CAAC;QACX,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAC7C,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QAClC,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,0CAA0C,OAAO,KAAK,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClF,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,KAAK,UAAU,OAAO,CACpB,SAAuB,EACvB,OAAe,EACf,KAAa,EACb,MAAc,EACd,EAAW,EACX,UAAmB,EACnB,UAAmB,EACnB,KAAc,EACd,MAAe;IAEf,MAAM,OAAO,GAAG,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;IACzF,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,OAAO,4BAA4B,CAAC,CAAC;QAC5D,IAAI,KAAK,KAAK,SAAS;YAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACtE,IAAI,MAAM,KAAK,SAAS;YAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACjE,OAAO,MAAM,SAAS,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,SAAS,CAAC,GAAG,OAAO,qBAAqB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAC9F,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC9C,OAAO,MAAM,SAAS,CAAC,GAAG,OAAO,8BAA8B,kBAAkB,CAAC,EAAY,CAAC,IAAI,MAAM,EAAE,EAAE;YAC3G,MAAM,EAAE,MAAM;YACd,OAAO;YACP,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;IACL,CAAC;IACD,MAAM,IAAI,GAAG,UAAU,KAAK,eAAe;QACzC,CAAC,CAAC,eAAe;QACjB,CAAC,CAAC,UAAU,KAAK,eAAe;YAC9B,CAAC,CAAC,eAAe;YACjB,CAAC,CAAC,WAAW,CAAC;IAClB,OAAO,MAAM,SAAS,CAAC,GAAG,OAAO,8BAA8B,kBAAkB,CAAC,EAAY,CAAC,UAAU,EAAE;QACzG,MAAM,EAAE,MAAM;QACd,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;KAC5G,CAAC,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CAAC,MAAc,EAAE,EAAsB,EAAE,UAA8B;IACxF,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,QAAQ;QAAE,OAAO,EAAE,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS,CAAC;IAClG,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,QAAQ;QAAE,OAAO,EAAE,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS,CAAC;IACnG,IAAI,MAAM,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC3D,OAAO,UAAU,KAAK,WAAW,IAAI,UAAU,KAAK,eAAe,IAAI,UAAU,KAAK,eAAe,CAAC;AACxG,CAAC;AAED,SAAS,WAAW,CAAC,MAAc,EAAE,IAAa;IAChD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC;YACvE,CAAC,CAAC,IAAI,CAAC,aAA6C;YACpD,CAAC,CAAC,EAAE,CAAC;QACP,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,8BAA8B,CAAC;QACtE,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;QACvG,OAAO;YACL,0FAA0F;YAC1F,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC7B,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC9B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;gBACrB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpB,IAAI,CAAC,SAAS;aACf,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACZ,GAAG,CAAC,UAAU,KAAK,SAAS;gBAC1B,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,CAAC,qFAAqF,UAAU,EAAE,CAAC,CAAC;YACxG,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IACD,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,IAAkC,CAAC;QAClD,OAAO,wBAAwB,MAAM,CAAC,MAAM,aAAa,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,IAAI,CAAC,CAAC,kBAAkB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,IAAI,CAAC,CAAC,qBAAqB,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,eAAe,IAAI,CAAC,CAAC,IAAI,CAAC;IAC7S,CAAC;IACD,MAAM,MAAM,GAAG,IAAkC,CAAC;IAClD,OAAO,GAAG,MAAM,CAAC,cAAc,KAAK,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,EAAE,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;AAC3I,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,IAAY;IACzC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAClG,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,UAAU,IAAI,IAAI,CAAC,GAAG,KAAK,OAAO,CAAC,MAAM,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IACtI,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IACxH,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,WAAW,CAAC,CAAC;IAC/E,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACzE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1E,CAAC;AAED,SAAS,YAAY,CAAC,IAAa;IACjC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,eAAe,CAAC;IAC/G,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;AAC5B,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,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,25 @@
1
+ import { type ContinuationLimits, type NamedContinuationRoute } from "./continuations.js";
2
+ import type { ContinuationRetentionOptions } from "./continuation-store.js";
3
+ /** Fixed by default so persisted callback/status URLs survive app restarts. */
4
+ export declare const DEFAULT_CONTINUATION_SERVICE_PORT = 4319;
5
+ export interface ContinuationSettings {
6
+ readonly configured: boolean;
7
+ readonly enabled: boolean;
8
+ readonly host: string;
9
+ readonly port: number;
10
+ readonly stateDir: string;
11
+ readonly namedRoutes: Readonly<Record<string, NamedContinuationRoute>>;
12
+ readonly detachedServices: Readonly<Record<string, string>>;
13
+ readonly retention: ContinuationRetentionOptions;
14
+ readonly limits: ContinuationLimits;
15
+ }
16
+ /**
17
+ * Host-only continuation settings. Detached bearers are referenced by env name
18
+ * so no secret is placed in mono-agent.config.json.
19
+ */
20
+ export declare function loadContinuationSettings(input: {
21
+ readonly cwd: string;
22
+ readonly configPath: string;
23
+ readonly env: Record<string, string | undefined>;
24
+ }): Promise<ContinuationSettings>;
25
+ //# sourceMappingURL=continuation-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"continuation-config.d.ts","sourceRoot":"","sources":["../src/continuation-config.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AAE5E,+EAA+E;AAC/E,eAAO,MAAM,iCAAiC,OAAO,CAAC;AAEtD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC,CAAC;IACvE,QAAQ,CAAC,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5D,QAAQ,CAAC,SAAS,EAAE,4BAA4B,CAAC;IACjD,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;CACrC;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAAC,KAAK,EAAE;IACpD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAClD,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAiDhC"}
@@ -0,0 +1,236 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { resolve } from "node:path";
3
+ import { DEFAULT_CONTINUATION_LIMITS, } from "./continuations.js";
4
+ /** Fixed by default so persisted callback/status URLs survive app restarts. */
5
+ export const DEFAULT_CONTINUATION_SERVICE_PORT = 4319;
6
+ /**
7
+ * Host-only continuation settings. Detached bearers are referenced by env name
8
+ * so no secret is placed in mono-agent.config.json.
9
+ */
10
+ export async function loadContinuationSettings(input) {
11
+ let raw = {};
12
+ try {
13
+ raw = JSON.parse(await readFile(input.configPath, "utf8"));
14
+ }
15
+ catch {
16
+ // The core config loader reports malformed/missing configuration. This
17
+ // optional host block simply remains unconfigured here.
18
+ }
19
+ const root = objectOf(raw);
20
+ const blockValue = root.continuations;
21
+ if (blockValue === undefined) {
22
+ return {
23
+ configured: false,
24
+ enabled: true,
25
+ host: "127.0.0.1",
26
+ port: DEFAULT_CONTINUATION_SERVICE_PORT,
27
+ stateDir: resolve(input.cwd, ".mono-agent", "continuations"),
28
+ namedRoutes: {},
29
+ detachedServices: {},
30
+ retention: {},
31
+ limits: DEFAULT_CONTINUATION_LIMITS,
32
+ };
33
+ }
34
+ const block = requireObject(blockValue, "continuations");
35
+ rejectUnknownKeys(block, "continuations", ["enabled", "host", "port", "stateDir", "namedRoutes", "detachedServices", "retention", "limits"]);
36
+ const enabled = optionalBoolean(block.enabled, "continuations.enabled") ?? true;
37
+ const host = optionalString(block.host, "continuations.host") ?? "127.0.0.1";
38
+ if (host !== "127.0.0.1" && host !== "::1" && host !== "localhost") {
39
+ throw new Error("continuations.host must be a loopback host (127.0.0.1, ::1, or localhost).");
40
+ }
41
+ const port = optionalInteger(block.port, "continuations.port") ?? DEFAULT_CONTINUATION_SERVICE_PORT;
42
+ if (port < 1 || port > 65_535)
43
+ throw new Error("continuations.port must be between 1 and 65535.");
44
+ const stateDirValue = optionalString(block.stateDir, "continuations.stateDir");
45
+ const stateDir = resolve(input.cwd, stateDirValue ?? ".mono-agent/continuations");
46
+ const namedRoutes = parseNamedRoutes(block.namedRoutes);
47
+ const detachedServices = parseDetachedServices(block.detachedServices, input.env);
48
+ const retention = parseRetention(block.retention);
49
+ const limits = parseLimits(block.limits);
50
+ return {
51
+ configured: true,
52
+ enabled,
53
+ host,
54
+ port,
55
+ stateDir,
56
+ namedRoutes,
57
+ detachedServices,
58
+ retention,
59
+ limits,
60
+ };
61
+ }
62
+ function parseLimits(value) {
63
+ if (value === undefined)
64
+ return DEFAULT_CONTINUATION_LIMITS;
65
+ const object = requireObject(value, "continuations.limits");
66
+ rejectUnknownKeys(object, "continuations.limits", [
67
+ "maxActiveRecords",
68
+ "maxActivePerOrigin",
69
+ "maxConcurrent",
70
+ "synthesisTimeoutMs",
71
+ "deliveryTimeoutMs",
72
+ "operatorPageSize",
73
+ ]);
74
+ const maxActiveRecords = optionalPositiveInteger(object.maxActiveRecords, "continuations.limits.maxActiveRecords")
75
+ ?? DEFAULT_CONTINUATION_LIMITS.maxActiveRecords;
76
+ const limits = {
77
+ maxActiveRecords,
78
+ maxActivePerOrigin: optionalPositiveInteger(object.maxActivePerOrigin, "continuations.limits.maxActivePerOrigin")
79
+ ?? Math.min(DEFAULT_CONTINUATION_LIMITS.maxActivePerOrigin, maxActiveRecords),
80
+ maxConcurrent: optionalPositiveInteger(object.maxConcurrent, "continuations.limits.maxConcurrent")
81
+ ?? DEFAULT_CONTINUATION_LIMITS.maxConcurrent,
82
+ synthesisTimeoutMs: optionalPositiveInteger(object.synthesisTimeoutMs, "continuations.limits.synthesisTimeoutMs")
83
+ ?? DEFAULT_CONTINUATION_LIMITS.synthesisTimeoutMs,
84
+ deliveryTimeoutMs: optionalPositiveInteger(object.deliveryTimeoutMs, "continuations.limits.deliveryTimeoutMs")
85
+ ?? DEFAULT_CONTINUATION_LIMITS.deliveryTimeoutMs,
86
+ operatorPageSize: optionalPositiveInteger(object.operatorPageSize, "continuations.limits.operatorPageSize")
87
+ ?? DEFAULT_CONTINUATION_LIMITS.operatorPageSize,
88
+ };
89
+ if (limits.maxActiveRecords > 1_000_000)
90
+ throw new Error("continuations.limits.maxActiveRecords cannot exceed 1000000.");
91
+ if (limits.maxActivePerOrigin > limits.maxActiveRecords) {
92
+ throw new Error("continuations.limits.maxActivePerOrigin cannot exceed maxActiveRecords.");
93
+ }
94
+ if (limits.maxConcurrent > 256)
95
+ throw new Error("continuations.limits.maxConcurrent cannot exceed 256.");
96
+ if (limits.synthesisTimeoutMs > 86_400_000 || limits.deliveryTimeoutMs > 86_400_000) {
97
+ throw new Error("continuations operation timeouts cannot exceed 24 hours.");
98
+ }
99
+ if (limits.operatorPageSize > 500)
100
+ throw new Error("continuations.limits.operatorPageSize cannot exceed 500.");
101
+ return limits;
102
+ }
103
+ function parseRetention(value) {
104
+ if (value === undefined)
105
+ return {};
106
+ const object = requireObject(value, "continuations.retention");
107
+ rejectUnknownKeys(object, "continuations.retention", [
108
+ "terminalMaxRecords",
109
+ "terminalMaxAgeMs",
110
+ "capturedTextMaxRecords",
111
+ "capturedTextMaxAgeMs",
112
+ ]);
113
+ const terminalMaxRecords = optionalNonNegativeInteger(object.terminalMaxRecords, "continuations.retention.terminalMaxRecords");
114
+ const terminalMaxAgeMs = optionalNonNegativeInteger(object.terminalMaxAgeMs, "continuations.retention.terminalMaxAgeMs");
115
+ const capturedTextMaxRecords = optionalNonNegativeInteger(object.capturedTextMaxRecords, "continuations.retention.capturedTextMaxRecords");
116
+ const capturedTextMaxAgeMs = optionalNonNegativeInteger(object.capturedTextMaxAgeMs, "continuations.retention.capturedTextMaxAgeMs");
117
+ return {
118
+ ...(terminalMaxRecords === undefined ? {} : { terminalMaxRecords }),
119
+ ...(terminalMaxAgeMs === undefined ? {} : { terminalMaxAgeMs }),
120
+ ...(capturedTextMaxRecords === undefined ? {} : { capturedTextMaxRecords }),
121
+ ...(capturedTextMaxAgeMs === undefined ? {} : { capturedTextMaxAgeMs }),
122
+ };
123
+ }
124
+ function parseNamedRoutes(value) {
125
+ if (value === undefined)
126
+ return {};
127
+ const object = requireObject(value, "continuations.namedRoutes");
128
+ const routes = {};
129
+ for (const [name, routeValue] of Object.entries(object)) {
130
+ if (name.trim().length === 0 || name.length > 128) {
131
+ throw new Error("continuations.namedRoutes keys must be 1-128 characters.");
132
+ }
133
+ const route = requireObject(routeValue, `continuations.namedRoutes.${name}`);
134
+ rejectUnknownKeys(route, `continuations.namedRoutes.${name}`, ["mode", "conversationId"]);
135
+ const mode = route.mode;
136
+ if (mode !== "notify_if_actionable" && mode !== "silent" && mode !== "capture") {
137
+ throw new Error(`continuations.namedRoutes.${name}.mode must be notify_if_actionable, silent, or capture.`);
138
+ }
139
+ const conversationId = optionalString(route.conversationId, `continuations.namedRoutes.${name}.conversationId`);
140
+ if ((mode === "notify_if_actionable" || mode === "capture") && conversationId === undefined) {
141
+ throw new Error(`continuations.namedRoutes.${name}.conversationId is required for mode ${mode}.`);
142
+ }
143
+ if (mode === "silent" && conversationId !== undefined) {
144
+ throw new Error(`continuations.namedRoutes.${name}.conversationId is forbidden for mode silent.`);
145
+ }
146
+ routes[name] = {
147
+ mode,
148
+ ...(conversationId === undefined ? {} : { conversationId }),
149
+ };
150
+ }
151
+ return routes;
152
+ }
153
+ function parseDetachedServices(value, env) {
154
+ if (value === undefined)
155
+ return {};
156
+ if (!Array.isArray(value))
157
+ throw new Error("continuations.detachedServices must be an array.");
158
+ const services = {};
159
+ for (const [index, serviceValue] of value.entries()) {
160
+ const service = requireObject(serviceValue, `continuations.detachedServices[${String(index)}]`);
161
+ rejectUnknownKeys(service, `continuations.detachedServices[${String(index)}]`, ["name", "tokenEnv"]);
162
+ const name = requiredString(service.name, `continuations.detachedServices[${String(index)}].name`);
163
+ if (name.length > 128) {
164
+ throw new Error(`continuations.detachedServices[${String(index)}].name must be at most 128 characters.`);
165
+ }
166
+ const tokenEnv = requiredString(service.tokenEnv, `continuations.detachedServices[${String(index)}].tokenEnv`);
167
+ if (!/^[A-Z_][A-Z0-9_]*$/u.test(tokenEnv)) {
168
+ throw new Error(`continuations.detachedServices[${String(index)}].tokenEnv must name an environment variable.`);
169
+ }
170
+ if (services[name] !== undefined)
171
+ throw new Error(`Duplicate detached continuation service: ${name}.`);
172
+ const token = env[tokenEnv]?.trim();
173
+ if (token === undefined || token.length < 16) {
174
+ throw new Error(`Detached continuation service ${name} requires ${tokenEnv} (at least 16 characters).`);
175
+ }
176
+ services[name] = token;
177
+ }
178
+ return services;
179
+ }
180
+ function objectOf(value) {
181
+ return typeof value === "object" && value !== null && !Array.isArray(value)
182
+ ? value
183
+ : {};
184
+ }
185
+ function requireObject(value, path) {
186
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
187
+ throw new Error(`${path} must be an object.`);
188
+ }
189
+ return value;
190
+ }
191
+ function requiredString(value, path) {
192
+ if (typeof value !== "string" || value.trim().length === 0)
193
+ throw new Error(`${path} must be a non-empty string.`);
194
+ return value.trim();
195
+ }
196
+ function optionalString(value, path) {
197
+ if (value === undefined)
198
+ return undefined;
199
+ return requiredString(value, path);
200
+ }
201
+ function optionalInteger(value, path) {
202
+ if (value === undefined)
203
+ return undefined;
204
+ if (typeof value !== "number" || !Number.isInteger(value))
205
+ throw new Error(`${path} must be an integer.`);
206
+ return value;
207
+ }
208
+ function optionalNonNegativeInteger(value, path) {
209
+ const integer = optionalInteger(value, path);
210
+ if (integer !== undefined && (!Number.isSafeInteger(integer) || integer < 0)) {
211
+ throw new Error(`${path} must be a non-negative safe integer.`);
212
+ }
213
+ return integer;
214
+ }
215
+ function optionalPositiveInteger(value, path) {
216
+ const integer = optionalInteger(value, path);
217
+ if (integer !== undefined && (!Number.isSafeInteger(integer) || integer <= 0)) {
218
+ throw new Error(`${path} must be a positive safe integer.`);
219
+ }
220
+ return integer;
221
+ }
222
+ function optionalBoolean(value, path) {
223
+ if (value === undefined)
224
+ return undefined;
225
+ if (typeof value !== "boolean")
226
+ throw new Error(`${path} must be a boolean.`);
227
+ return value;
228
+ }
229
+ function rejectUnknownKeys(value, path, allowed) {
230
+ const allowedSet = new Set(allowed);
231
+ const unknown = Object.keys(value).filter((key) => !allowedSet.has(key));
232
+ if (unknown.length > 0) {
233
+ throw new Error(`${path} has unknown ${unknown.length === 1 ? "key" : "keys"}: ${unknown.join(", ")}.`);
234
+ }
235
+ }
236
+ //# sourceMappingURL=continuation-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"continuation-config.js","sourceRoot":"","sources":["../src/continuation-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,99 @@
1
+ import { type ContinuationRetentionOptions } from "./continuation-store.js";
2
+ import { type ContinuationClaimCapability, type ContinuationHealthSnapshot, type ContinuationHistoryRecordInput, type ContinuationHistoryRecordResult, type ContinuationLimits, type ContinuationNativeDeliveryInput, type ContinuationNativeDeliveryResult, type ContinuationStatusSnapshot, type ContinuationSynthesisInput, type ContinuationSynthesisResult, type IssueContinuationCapabilityInput, type NamedContinuationRoute } from "./continuations.js";
3
+ export interface ContinuationServiceLogger {
4
+ debug?(message: string, metadata?: Record<string, unknown>): void;
5
+ info?(message: string, metadata?: Record<string, unknown>): void;
6
+ warn?(message: string, metadata?: Record<string, unknown>): void;
7
+ error?(message: string, metadata?: Record<string, unknown>): void;
8
+ }
9
+ export interface ContinuationServiceOptions {
10
+ /** Defaults to `<cwd>/.mono-agent/continuations`. */
11
+ readonly stateDir?: string;
12
+ readonly cwd?: string;
13
+ readonly host?: string;
14
+ readonly port?: number;
15
+ readonly namedRoutes?: Readonly<Record<string, NamedContinuationRoute>>;
16
+ /** Service name -> bearer. Values remain memory-only and are never logged. */
17
+ readonly detachedServices?: Readonly<Record<string, string>>;
18
+ /** Bounded terminal tombstone and captured-text retention policy. */
19
+ readonly retention?: ContinuationRetentionOptions;
20
+ /**
21
+ * Host readiness check performed before a synthesis attempt is consumed.
22
+ * Use it for channel/responder lifecycle availability, never model health.
23
+ */
24
+ readonly synthesisPreflight?: (input: ContinuationSynthesisInput) => Promise<ContinuationSynthesisAvailability> | ContinuationSynthesisAvailability;
25
+ readonly synthesize: (input: ContinuationSynthesisInput) => Promise<ContinuationSynthesisResult>;
26
+ readonly deliver: (input: ContinuationNativeDeliveryInput) => Promise<ContinuationNativeDeliveryResult>;
27
+ /** History-only commit. It must never post to the native channel. */
28
+ readonly recordHistory?: (input: ContinuationHistoryRecordInput) => Promise<ContinuationHistoryRecordResult>;
29
+ readonly limits?: Partial<ContinuationLimits>;
30
+ readonly maxResultBytes?: number;
31
+ readonly maxDeadlineMs?: number;
32
+ readonly leaseMs?: number;
33
+ readonly workerIntervalMs?: number;
34
+ readonly autoProcess?: boolean;
35
+ readonly now?: () => Date;
36
+ readonly logger?: ContinuationServiceLogger;
37
+ }
38
+ export type ContinuationSynthesisAvailability = {
39
+ readonly ready: true;
40
+ } | {
41
+ readonly ready: false;
42
+ readonly code: string;
43
+ readonly reason: string;
44
+ readonly retryAfterMs?: number;
45
+ };
46
+ /**
47
+ * Trusted host signal for the narrow race where readiness disappears after
48
+ * preflight but before the model call begins. It is safe to requeue because the
49
+ * host must throw it before invoking the responder/model.
50
+ */
51
+ export declare class ContinuationSynthesisUnavailableError extends Error {
52
+ readonly code: string;
53
+ readonly retryAfterMs: number | undefined;
54
+ constructor(code: string, message: string, retryAfterMs?: number);
55
+ }
56
+ export interface ContinuationServiceHandle {
57
+ readonly url: string;
58
+ /** Ephemeral owner/operator bearer for local operator endpoints. */
59
+ readonly operatorToken: string;
60
+ /** Core harness issuer interface. */
61
+ issueContinuationClaimCapability(input: {
62
+ readonly runId: string;
63
+ readonly serverName: string;
64
+ readonly conversationId: string;
65
+ readonly replyTo?: {
66
+ readonly conversationId: string;
67
+ };
68
+ readonly historyBoundary?: string;
69
+ }): ContinuationClaimCapability;
70
+ /** Extended host surface used for non-default modes. */
71
+ issueRunClaimCapability(input: IssueContinuationCapabilityInput): ContinuationClaimCapability;
72
+ status(id: string): Promise<ContinuationStatusSnapshot | undefined>;
73
+ list(): Promise<readonly ContinuationStatusSnapshot[]>;
74
+ health(): Promise<ContinuationHealthSnapshot>;
75
+ processDue(limit?: number): Promise<number>;
76
+ retry(id: string, options?: {
77
+ readonly allowUnknown?: boolean;
78
+ }): Promise<ContinuationStatusSnapshot>;
79
+ cancel(id: string): Promise<ContinuationStatusSnapshot>;
80
+ resolveUnknown(id: string, outcome: {
81
+ readonly kind: "delivered";
82
+ readonly deliveryId?: string;
83
+ } | {
84
+ readonly kind: "not_delivered";
85
+ } | {
86
+ readonly kind: "dead_lettered";
87
+ }): Promise<ContinuationStatusSnapshot>;
88
+ capturedText(id: string): Promise<string | undefined>;
89
+ stop(): Promise<void>;
90
+ }
91
+ export declare class ContinuationProtocolError extends Error {
92
+ readonly status: number;
93
+ readonly code: string;
94
+ constructor(status: number, code: string, message: string);
95
+ }
96
+ export declare function startContinuationService(options: ContinuationServiceOptions): Promise<ContinuationServiceHandle>;
97
+ /** Derive the restart-stable local operator capability from the owner-only service secret. */
98
+ export declare function continuationOperatorToken(secret: Uint8Array): string;
99
+ //# sourceMappingURL=continuation-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"continuation-service.d.ts","sourceRoot":"","sources":["../src/continuation-service.ts"],"names":[],"mappings":"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"}