@mono-agent/agent-app 0.20.14 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (262) hide show
  1. package/README.md +227 -80
  2. package/dist/adapter-send-tools.d.ts +3 -2
  3. package/dist/adapter-send-tools.d.ts.map +1 -1
  4. package/dist/adapter-send-tools.js +15 -5
  5. package/dist/adapter-send-tools.js.map +1 -1
  6. package/dist/app-controller-channels.d.ts +2 -0
  7. package/dist/app-controller-channels.d.ts.map +1 -1
  8. package/dist/app-controller-channels.js +10 -1
  9. package/dist/app-controller-channels.js.map +1 -1
  10. package/dist/app-controller-maintenance.d.ts +3 -1
  11. package/dist/app-controller-maintenance.d.ts.map +1 -1
  12. package/dist/app-controller-maintenance.js +3 -0
  13. package/dist/app-controller-maintenance.js.map +1 -1
  14. package/dist/app-controller-responder.d.ts +2 -0
  15. package/dist/app-controller-responder.d.ts.map +1 -1
  16. package/dist/app-controller-responder.js +21 -17
  17. package/dist/app-controller-responder.js.map +1 -1
  18. package/dist/app-controller-traceability.d.ts.map +1 -1
  19. package/dist/app-controller-traceability.js +3 -0
  20. package/dist/app-controller-traceability.js.map +1 -1
  21. package/dist/app-controller-types.d.ts +1 -0
  22. package/dist/app-controller-types.d.ts.map +1 -1
  23. package/dist/app-controller.d.ts +2 -0
  24. package/dist/app-controller.d.ts.map +1 -1
  25. package/dist/app-controller.js +3 -0
  26. package/dist/app-controller.js.map +1 -1
  27. package/dist/artifact-retention.js +11 -0
  28. package/dist/artifact-retention.js.map +1 -1
  29. package/dist/background.d.ts +0 -6
  30. package/dist/background.d.ts.map +1 -1
  31. package/dist/background.js +5 -58
  32. package/dist/background.js.map +1 -1
  33. package/dist/channel-drivers/tui.d.ts +2 -2
  34. package/dist/channel-drivers/tui.d.ts.map +1 -1
  35. package/dist/channel-drivers/tui.js +27 -8
  36. package/dist/channel-drivers/tui.js.map +1 -1
  37. package/dist/cli-args.d.ts +4 -5
  38. package/dist/cli-args.d.ts.map +1 -1
  39. package/dist/cli-args.js +20 -19
  40. package/dist/cli-args.js.map +1 -1
  41. package/dist/cli-background-command.d.ts.map +1 -1
  42. package/dist/cli-background-command.js +4 -0
  43. package/dist/cli-background-command.js.map +1 -1
  44. package/dist/cli-commands.d.ts.map +1 -1
  45. package/dist/cli-commands.js +13 -2
  46. package/dist/cli-commands.js.map +1 -1
  47. package/dist/cli-help.d.ts.map +1 -1
  48. package/dist/cli-help.js +33 -19
  49. package/dist/cli-help.js.map +1 -1
  50. package/dist/cli-init-command.d.ts.map +1 -1
  51. package/dist/cli-init-command.js +26 -22
  52. package/dist/cli-init-command.js.map +1 -1
  53. package/dist/cli-install-skill-command.d.ts.map +1 -1
  54. package/dist/cli-install-skill-command.js +12 -3
  55. package/dist/cli-install-skill-command.js.map +1 -1
  56. package/dist/config-reference.d.ts +1 -0
  57. package/dist/config-reference.d.ts.map +1 -1
  58. package/dist/config-reference.js +66 -10
  59. package/dist/config-reference.js.map +1 -1
  60. package/dist/configured-agent.d.ts +9 -1
  61. package/dist/configured-agent.d.ts.map +1 -1
  62. package/dist/configured-agent.js +95 -29
  63. package/dist/configured-agent.js.map +1 -1
  64. package/dist/cron-control-store.d.ts.map +1 -1
  65. package/dist/cron-control-store.js +4 -2
  66. package/dist/cron-control-store.js.map +1 -1
  67. package/dist/doctor.d.ts.map +1 -1
  68. package/dist/doctor.js +215 -45
  69. package/dist/doctor.js.map +1 -1
  70. package/dist/index.d.ts +2 -0
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +1 -0
  73. package/dist/index.js.map +1 -1
  74. package/dist/interaction-bridge.d.ts +3 -3
  75. package/dist/interaction-bridge.d.ts.map +1 -1
  76. package/dist/interaction-bridge.js +27 -10
  77. package/dist/interaction-bridge.js.map +1 -1
  78. package/dist/launchd.d.ts +2 -0
  79. package/dist/launchd.d.ts.map +1 -1
  80. package/dist/launchd.js +3 -0
  81. package/dist/launchd.js.map +1 -1
  82. package/dist/local-tui-session.d.ts +14 -0
  83. package/dist/local-tui-session.d.ts.map +1 -0
  84. package/dist/local-tui-session.js +100 -0
  85. package/dist/local-tui-session.js.map +1 -0
  86. package/dist/mcp-apps.d.ts.map +1 -1
  87. package/dist/mcp-apps.js +3 -0
  88. package/dist/mcp-apps.js.map +1 -1
  89. package/dist/memory-journal.d.ts +53 -0
  90. package/dist/memory-journal.d.ts.map +1 -0
  91. package/dist/memory-journal.js +586 -0
  92. package/dist/memory-journal.js.map +1 -0
  93. package/dist/memory-recall.d.ts.map +1 -1
  94. package/dist/memory-recall.js +16 -2
  95. package/dist/memory-recall.js.map +1 -1
  96. package/dist/memory-retrieval.d.ts +9 -0
  97. package/dist/memory-retrieval.d.ts.map +1 -1
  98. package/dist/memory-retrieval.js +20 -0
  99. package/dist/memory-retrieval.js.map +1 -1
  100. package/dist/modules/base.js +1 -1
  101. package/dist/modules/base.js.map +1 -1
  102. package/dist/modules/known-tools.d.ts +1 -1
  103. package/dist/modules/known-tools.d.ts.map +1 -1
  104. package/dist/modules/known-tools.js +1 -0
  105. package/dist/modules/known-tools.js.map +1 -1
  106. package/dist/monitors-command.js +12 -2
  107. package/dist/monitors-command.js.map +1 -1
  108. package/dist/monitors-config.d.ts +4 -1
  109. package/dist/monitors-config.d.ts.map +1 -1
  110. package/dist/monitors-config.js +5 -1
  111. package/dist/monitors-config.js.map +1 -1
  112. package/dist/monitors-context.d.ts.map +1 -1
  113. package/dist/monitors-context.js +14 -2
  114. package/dist/monitors-context.js.map +1 -1
  115. package/dist/monitors-service.d.ts +2 -2
  116. package/dist/monitors-service.d.ts.map +1 -1
  117. package/dist/monitors-service.js +227 -96
  118. package/dist/monitors-service.js.map +1 -1
  119. package/dist/monitors-store.d.ts +11 -1
  120. package/dist/monitors-store.d.ts.map +1 -1
  121. package/dist/monitors-store.js +36 -6
  122. package/dist/monitors-store.js.map +1 -1
  123. package/dist/notify-destinations.d.ts +3 -2
  124. package/dist/notify-destinations.d.ts.map +1 -1
  125. package/dist/notify-destinations.js +6 -7
  126. package/dist/notify-destinations.js.map +1 -1
  127. package/dist/posted-reply-history.d.ts.map +1 -1
  128. package/dist/posted-reply-history.js +40 -3
  129. package/dist/posted-reply-history.js.map +1 -1
  130. package/dist/proactive-notify.d.ts +20 -1
  131. package/dist/proactive-notify.d.ts.map +1 -1
  132. package/dist/proactive-notify.js +56 -3
  133. package/dist/proactive-notify.js.map +1 -1
  134. package/dist/process-job-channel-routing.js +2 -1
  135. package/dist/process-job-channel-routing.js.map +1 -1
  136. package/dist/process-job-output-tail.d.ts +53 -0
  137. package/dist/process-job-output-tail.d.ts.map +1 -0
  138. package/dist/process-job-output-tail.js +257 -0
  139. package/dist/process-job-output-tail.js.map +1 -0
  140. package/dist/process-jobs-config.d.ts +1 -1
  141. package/dist/process-jobs-config.js +1 -1
  142. package/dist/process-jobs-config.js.map +1 -1
  143. package/dist/process-jobs-context.d.ts +3 -1
  144. package/dist/process-jobs-context.d.ts.map +1 -1
  145. package/dist/process-jobs-context.js +44 -11
  146. package/dist/process-jobs-context.js.map +1 -1
  147. package/dist/process-jobs-runtime.d.ts.map +1 -1
  148. package/dist/process-jobs-runtime.js +14 -0
  149. package/dist/process-jobs-runtime.js.map +1 -1
  150. package/dist/process-jobs-service.d.ts.map +1 -1
  151. package/dist/process-jobs-service.js +115 -23
  152. package/dist/process-jobs-service.js.map +1 -1
  153. package/dist/process-jobs-store.d.ts +3 -1
  154. package/dist/process-jobs-store.d.ts.map +1 -1
  155. package/dist/process-jobs-store.js +4 -1
  156. package/dist/process-jobs-store.js.map +1 -1
  157. package/dist/process-output-redaction.d.ts +26 -1
  158. package/dist/process-output-redaction.d.ts.map +1 -1
  159. package/dist/process-output-redaction.js +164 -2
  160. package/dist/process-output-redaction.js.map +1 -1
  161. package/dist/project-skills.d.ts +11 -5
  162. package/dist/project-skills.d.ts.map +1 -1
  163. package/dist/project-skills.js +88 -39
  164. package/dist/project-skills.js.map +1 -1
  165. package/dist/provider-auth-checks.d.ts +27 -0
  166. package/dist/provider-auth-checks.d.ts.map +1 -0
  167. package/dist/provider-auth-checks.js +349 -0
  168. package/dist/provider-auth-checks.js.map +1 -0
  169. package/dist/provider-auth-observations.d.ts +22 -0
  170. package/dist/provider-auth-observations.d.ts.map +1 -0
  171. package/dist/provider-auth-observations.js +139 -0
  172. package/dist/provider-auth-observations.js.map +1 -0
  173. package/dist/provider-auth-operator.d.ts +19 -0
  174. package/dist/provider-auth-operator.d.ts.map +1 -0
  175. package/dist/provider-auth-operator.js +560 -0
  176. package/dist/provider-auth-operator.js.map +1 -0
  177. package/dist/provider-auth-status.d.ts +20 -0
  178. package/dist/provider-auth-status.d.ts.map +1 -0
  179. package/dist/provider-auth-status.js +235 -0
  180. package/dist/provider-auth-status.js.map +1 -0
  181. package/dist/provider-model-catalog.d.ts +17 -0
  182. package/dist/provider-model-catalog.d.ts.map +1 -1
  183. package/dist/provider-model-catalog.js +113 -2
  184. package/dist/provider-model-catalog.js.map +1 -1
  185. package/dist/provider-setup.d.ts +22 -0
  186. package/dist/provider-setup.d.ts.map +1 -1
  187. package/dist/provider-setup.js +101 -15
  188. package/dist/provider-setup.js.map +1 -1
  189. package/dist/reply-artifacts.d.ts +3 -1
  190. package/dist/reply-artifacts.d.ts.map +1 -1
  191. package/dist/reply-artifacts.js +45 -10
  192. package/dist/reply-artifacts.js.map +1 -1
  193. package/dist/request-model-override.d.ts +11 -2
  194. package/dist/request-model-override.d.ts.map +1 -1
  195. package/dist/request-model-override.js +51 -1
  196. package/dist/request-model-override.js.map +1 -1
  197. package/dist/request-scoped-mcp.d.ts +3 -0
  198. package/dist/request-scoped-mcp.d.ts.map +1 -1
  199. package/dist/request-scoped-mcp.js +1 -1
  200. package/dist/request-scoped-mcp.js.map +1 -1
  201. package/dist/run-history.d.ts.map +1 -1
  202. package/dist/run-history.js +56 -13
  203. package/dist/run-history.js.map +1 -1
  204. package/dist/seen-conversations.d.ts +4 -3
  205. package/dist/seen-conversations.d.ts.map +1 -1
  206. package/dist/seen-conversations.js +6 -5
  207. package/dist/seen-conversations.js.map +1 -1
  208. package/dist/session-history.d.ts +14 -0
  209. package/dist/session-history.d.ts.map +1 -1
  210. package/dist/session-history.js +120 -5
  211. package/dist/session-history.js.map +1 -1
  212. package/dist/systemd-command.d.ts +8 -0
  213. package/dist/systemd-command.d.ts.map +1 -0
  214. package/dist/systemd-command.js +206 -0
  215. package/dist/systemd-command.js.map +1 -0
  216. package/dist/systemd.d.ts +51 -0
  217. package/dist/systemd.d.ts.map +1 -0
  218. package/dist/systemd.js +299 -0
  219. package/dist/systemd.js.map +1 -0
  220. package/dist/tool-output-artifacts.d.ts +4 -0
  221. package/dist/tool-output-artifacts.d.ts.map +1 -0
  222. package/dist/tool-output-artifacts.js +17 -0
  223. package/dist/tool-output-artifacts.js.map +1 -0
  224. package/dist/tui-command.d.ts +0 -45
  225. package/dist/tui-command.d.ts.map +1 -1
  226. package/dist/tui-command.js +27 -264
  227. package/dist/tui-command.js.map +1 -1
  228. package/dist/untrusted-text.js +2 -2
  229. package/dist/web-command.d.ts +3 -0
  230. package/dist/web-command.d.ts.map +1 -1
  231. package/dist/web-command.js +112 -7
  232. package/dist/web-command.js.map +1 -1
  233. package/dist/web-request-coordinator.d.ts +19 -0
  234. package/dist/web-request-coordinator.d.ts.map +1 -0
  235. package/dist/web-request-coordinator.js +242 -0
  236. package/dist/web-request-coordinator.js.map +1 -0
  237. package/dist/wizard/prompts.d.ts.map +1 -1
  238. package/dist/wizard/prompts.js +1 -0
  239. package/dist/wizard/prompts.js.map +1 -1
  240. package/dist/wizard/run.js +1 -1
  241. package/dist/wizard/run.js.map +1 -1
  242. package/package.json +18 -18
  243. package/schema/mono-agent.config.schema.json +120 -8
  244. package/skills/mono-agent-composer/SKILL.md +4 -4
  245. package/skills/mono-agent-composer/references/config-blueprint.md +18 -7
  246. package/skills/mono-agent-composer/references/discovery-questions.md +10 -5
  247. package/skills/mono-agent-composer/references/feature-coverage.md +30 -14
  248. package/skills/mono-agent-composer/references/package-map.md +6 -3
  249. package/skills/mono-agent-composer/references/playbooks.md +20 -5
  250. package/skills/mono-agent-composer/references/validation.md +4 -3
  251. package/dist/configuration-proposal-main.d.ts +0 -3
  252. package/dist/configuration-proposal-main.d.ts.map +0 -1
  253. package/dist/configuration-proposal-main.js +0 -13
  254. package/dist/configuration-proposal-main.js.map +0 -1
  255. package/dist/configuration-proposal-tool.d.ts +0 -33
  256. package/dist/configuration-proposal-tool.d.ts.map +0 -1
  257. package/dist/configuration-proposal-tool.js +0 -180
  258. package/dist/configuration-proposal-tool.js.map +0 -1
  259. package/dist/local-configuration.d.ts +0 -99
  260. package/dist/local-configuration.d.ts.map +0 -1
  261. package/dist/local-configuration.js +0 -1302
  262. package/dist/local-configuration.js.map +0 -1
@@ -0,0 +1,299 @@
1
+ import { execFile, spawn } from "node:child_process";
2
+ import { createHash, randomUUID } from "node:crypto";
3
+ import { lstat, mkdir, readFile, realpath, rename, unlink, writeFile } from "node:fs/promises";
4
+ import { homedir } from "node:os";
5
+ import { dirname, isAbsolute, join } from "node:path";
6
+ import { promisify } from "node:util";
7
+ import { acquireFilesystemLifecycleLock } from "./launchd-lifecycle-lock.js";
8
+ const MARKER = "# mono-agent systemd user service v1 ";
9
+ export const SYSTEMD_WEB_IDENTITY = "web";
10
+ export class SystemdUserManagerUnavailableError extends Error {
11
+ name = "SystemdUserManagerUnavailableError";
12
+ }
13
+ export function isSystemdUserManagerUnavailable(error) {
14
+ return error instanceof SystemdUserManagerUnavailableError;
15
+ }
16
+ export function systemdUnitName(identity) {
17
+ return identity === SYSTEMD_WEB_IDENTITY ? "mono-agent-web.service"
18
+ : `mono-agent-${createHash("sha256").update(identity).digest("hex").slice(0, 24)}.service`;
19
+ }
20
+ export function systemdUnitPath(identity, deps = {}) {
21
+ const root = deps.configDir ?? (deps.homeDir === undefined ? process.env.XDG_CONFIG_HOME : undefined) ?? join(deps.homeDir ?? homedir(), ".config");
22
+ if (!isAbsolute(root))
23
+ throw new Error("XDG_CONFIG_HOME must be absolute.");
24
+ return join(root, "systemd", "user", systemdUnitName(identity));
25
+ }
26
+ /** systemd syntax is not shell syntax: quote whitespace, disable specifiers and dollar expansion. */
27
+ function quote(value, exec = false) {
28
+ if (/[\x00-\x1f\x7f]/u.test(value))
29
+ throw new Error("Service values must not contain control characters.");
30
+ const escaped = value.replaceAll("\\", "\\\\").replaceAll('"', '\\"').replaceAll("%", "%%");
31
+ return `"${exec ? escaped.replaceAll("$", () => "$$") : escaped}"`;
32
+ }
33
+ export function renderSystemdUnit(definition) {
34
+ if (!isAbsolute(definition.cwd) || !isAbsolute(definition.argv[0] ?? "")) {
35
+ throw new Error("Service working directory and executable must be absolute.");
36
+ }
37
+ if (definition.cwd.trim() !== definition.cwd || /[\x00-\x1f\x7f"\\]/u.test(definition.cwd)) {
38
+ throw new Error("Service working directory must not contain quotes, backslashes, control characters, or edge whitespace.");
39
+ }
40
+ return [
41
+ MARKER + Buffer.from(JSON.stringify(definition)).toString("base64"),
42
+ "[Unit]", "Description=Mono-agent (dev, unmanaged runtime)", "StartLimitIntervalSec=60", "StartLimitBurst=5", "",
43
+ "[Service]", "Type=exec", `WorkingDirectory=${definition.cwd.replaceAll("%", "%%")}`,
44
+ `ExecStart=${definition.argv.map((arg) => quote(arg, true)).join(" ")}`,
45
+ ...Object.entries(definition.environment).sort(([a], [b]) => a.localeCompare(b)).map(([name, value]) => {
46
+ if (!/^[A-Za-z_][A-Za-z0-9_]*$/u.test(name))
47
+ throw new Error("Invalid service environment name.");
48
+ return `Environment=${quote(`${name}=${value}`)}`;
49
+ }),
50
+ "Restart=on-failure", "RestartSec=5", "TimeoutStopSec=60", "KillMode=mixed", "UMask=0077",
51
+ "StandardOutput=journal", "StandardError=journal", "", "[Install]", "WantedBy=default.target", "",
52
+ ].join("\n");
53
+ }
54
+ export async function runSystemdTool(command, args) {
55
+ try {
56
+ const result = await promisify(execFile)(command, [...args], { timeout: 90_000, maxBuffer: 1024 * 1024, env: { ...process.env, LC_ALL: "C" } });
57
+ return { code: 0, ...result };
58
+ }
59
+ catch (error) {
60
+ const failure = error;
61
+ return { code: typeof failure.code === "number" ? failure.code : 1, stdout: failure.stdout ?? "", stderr: failure.stderr || failure.message || "Command failed" };
62
+ }
63
+ }
64
+ async function checked(args, deps) {
65
+ const result = await (deps.run ?? runSystemdTool)("systemctl", ["--user", ...args]);
66
+ if (result.code !== 0)
67
+ throw new Error(`systemctl --user ${args[0]} failed: ${result.stderr.trim() || result.stdout.trim()}. A running systemd user manager is required.`);
68
+ return result;
69
+ }
70
+ export async function inspectSystemd(identity, deps = {}) {
71
+ const result = await (deps.run ?? runSystemdTool)("systemctl", ["--user", "show", systemdUnitName(identity),
72
+ "--property=LoadState,ActiveState,SubState,MainPID,ExecMainStartTimestamp,UnitFileState,FragmentPath"]);
73
+ const properties = Object.fromEntries(result.stdout.trim().split("\n").map((line) => {
74
+ const index = line.indexOf("=");
75
+ return [line.slice(0, index), line.slice(index + 1)];
76
+ }));
77
+ if (result.code !== 0 && properties.LoadState !== "not-found") {
78
+ const detail = result.stderr.trim() || "systemctl failed";
79
+ const message = `Cannot inspect systemd user service: ${detail}`;
80
+ if (/Failed to connect to bus|System has not been booted with systemd|No medium found|(?:spawn|systemctl).*ENOENT/iu.test(detail)) {
81
+ throw new SystemdUserManagerUnavailableError(message);
82
+ }
83
+ throw new Error(message);
84
+ }
85
+ if (!properties.LoadState || !properties.ActiveState)
86
+ throw new Error("systemctl returned an incomplete service record.");
87
+ const pid = Number(properties.MainPID ?? "0");
88
+ if (!Number.isSafeInteger(pid) || pid < 0)
89
+ throw new Error("systemctl returned an invalid PID.");
90
+ return {
91
+ loadState: properties.LoadState, activeState: properties.ActiveState, subState: properties.SubState ?? "unknown",
92
+ pid, startedAt: properties.ExecMainStartTimestamp ?? "", enabled: properties.UnitFileState === "enabled",
93
+ fragmentPath: properties.FragmentPath ?? "",
94
+ };
95
+ }
96
+ async function ownedFile(path) {
97
+ try {
98
+ const info = await lstat(path);
99
+ if (!info.isFile() || info.isSymbolicLink() || info.nlink !== 1 || info.uid !== process.getuid?.() || (info.mode & 0o022) !== 0) {
100
+ throw new Error(`Refusing unsafe service file ${path}.`);
101
+ }
102
+ return await readFile(path, "utf8");
103
+ }
104
+ catch (error) {
105
+ if (error.code === "ENOENT")
106
+ return undefined;
107
+ throw error;
108
+ }
109
+ }
110
+ function parseSystemdDefinition(value) {
111
+ if (value === null || typeof value !== "object" || Array.isArray(value))
112
+ return undefined;
113
+ const record = value;
114
+ if (typeof record.identity !== "string" || typeof record.cwd !== "string"
115
+ || !Array.isArray(record.argv) || record.argv.length === 0 || !record.argv.every((arg) => typeof arg === "string")
116
+ || record.environment === null || typeof record.environment !== "object" || Array.isArray(record.environment)
117
+ || !Object.values(record.environment).every((entry) => typeof entry === "string"))
118
+ return undefined;
119
+ return {
120
+ identity: record.identity,
121
+ cwd: record.cwd,
122
+ argv: record.argv,
123
+ environment: record.environment,
124
+ };
125
+ }
126
+ async function readOwnedSystemdUnit(identity, deps) {
127
+ const contents = await ownedFile(systemdUnitPath(identity, deps));
128
+ if (contents === undefined)
129
+ return undefined;
130
+ try {
131
+ const first = contents.split("\n", 1)[0];
132
+ if (!first.startsWith(MARKER))
133
+ throw new Error("missing ownership marker");
134
+ const definition = parseSystemdDefinition(JSON.parse(Buffer.from(first.slice(MARKER.length), "base64").toString("utf8")));
135
+ if (definition?.identity !== identity)
136
+ throw new Error("invalid unit identity");
137
+ return { definition, contents };
138
+ }
139
+ catch {
140
+ throw new Error(`Refusing to replace or remove an unrecognized service file: ${systemdUnitPath(identity, deps)}.`);
141
+ }
142
+ }
143
+ export async function readSystemdDefinition(identity, deps = {}) {
144
+ return (await readOwnedSystemdUnit(identity, deps))?.definition;
145
+ }
146
+ function sameSystemdDefinition(left, right) {
147
+ if (left.identity !== right.identity || left.cwd !== right.cwd || left.argv.length !== right.argv.length
148
+ || left.argv.some((value, index) => value !== right.argv[index]))
149
+ return false;
150
+ const leftEnvironment = Object.entries(left.environment).sort(([a], [b]) => a.localeCompare(b));
151
+ const rightEnvironment = Object.entries(right.environment).sort(([a], [b]) => a.localeCompare(b));
152
+ return leftEnvironment.length === rightEnvironment.length
153
+ && leftEnvironment.every(([name, value], index) => name === rightEnvironment[index]?.[0] && value === rightEnvironment[index]?.[1]);
154
+ }
155
+ async function ensureDirectory(path) {
156
+ try {
157
+ await mkdir(path, { mode: 0o700 });
158
+ }
159
+ catch (error) {
160
+ if (error.code !== "EEXIST")
161
+ throw error;
162
+ }
163
+ const info = await lstat(path);
164
+ if (!info.isDirectory() || info.isSymbolicLink() || info.uid !== process.getuid?.() || (info.mode & 0o022) !== 0) {
165
+ throw new Error(`Refusing unsafe service directory ${path}.`);
166
+ }
167
+ }
168
+ async function publish(path, contents) {
169
+ const root = dirname(dirname(dirname(path)));
170
+ for (const dir of [root, dirname(dirname(path)), dirname(path)])
171
+ await ensureDirectory(dir);
172
+ const temporary = `${path}.${process.pid}.${randomUUID()}.tmp`;
173
+ try {
174
+ await writeFile(temporary, contents, { mode: 0o600, flag: "wx" });
175
+ await rename(temporary, path);
176
+ }
177
+ finally {
178
+ await unlink(temporary).catch((error) => { if (error.code !== "ENOENT")
179
+ throw error; });
180
+ }
181
+ }
182
+ export async function withSystemdLock(identity, deps, action) {
183
+ const root = join(deps.homeDir ?? homedir(), ".mono-agent");
184
+ await ensureDirectory(root);
185
+ const release = await acquireFilesystemLifecycleLock({ label: systemdUnitName(identity), paths: {
186
+ logDir: join(root, "logs"), plistPath: systemdUnitPath(identity, deps), stdoutPath: "", stderrPath: "", launchAgentsDir: dirname(systemdUnitPath(identity, deps)),
187
+ } });
188
+ if (!release)
189
+ throw new Error("Another lifecycle command is active for this service.");
190
+ try {
191
+ return await action();
192
+ }
193
+ finally {
194
+ await release();
195
+ }
196
+ }
197
+ async function assertFragment(identity, service, deps) {
198
+ if (service.fragmentPath && service.fragmentPath !== systemdUnitPath(identity, deps)
199
+ && await realpath(service.fragmentPath) !== await realpath(systemdUnitPath(identity, deps))) {
200
+ throw new Error(`Refusing foreign unit ${service.fragmentPath}.`);
201
+ }
202
+ }
203
+ export async function stopSystemd(identity, deps = {}) {
204
+ const definition = await readSystemdDefinition(identity, deps);
205
+ const service = await inspectSystemd(identity, deps);
206
+ await assertFragment(identity, service, deps);
207
+ if (!definition) {
208
+ if (service.loadState !== "not-found")
209
+ throw new Error("Service exists without an owned unit; refusing to stop it.");
210
+ return;
211
+ }
212
+ await checked(["disable", "--now", systemdUnitName(identity)], deps);
213
+ const stopped = await inspectSystemd(identity, deps);
214
+ if (stopped.pid !== 0 || !["inactive", "failed"].includes(stopped.activeState))
215
+ throw new Error("Service did not stop; its unit was retained.");
216
+ await unlink(systemdUnitPath(identity, deps));
217
+ await checked(["daemon-reload"], deps);
218
+ }
219
+ export async function startSystemd(definition, restart, ready, deps = {}) {
220
+ const identity = definition.identity;
221
+ const previousUnit = await readOwnedSystemdUnit(identity, deps);
222
+ const previous = previousUnit?.definition;
223
+ const priorService = await inspectSystemd(identity, deps);
224
+ await assertFragment(identity, priorService, deps);
225
+ if (!previous && priorService.loadState !== "not-found")
226
+ throw new Error("Service exists without an owned unit; refusing to replace it.");
227
+ const contents = renderSystemdUnit(definition);
228
+ if (!restart && priorService.activeState === "active") {
229
+ if (!previous || !sameSystemdDefinition(previous, definition))
230
+ throw new Error("Service configuration changed; use restart to apply it.");
231
+ if (!await ready(priorService))
232
+ throw new Error("Service is running but has not reported ready; inspect status and logs.");
233
+ return;
234
+ }
235
+ let published = false;
236
+ try {
237
+ await publish(systemdUnitPath(identity, deps), contents);
238
+ published = true;
239
+ await checked(["daemon-reload"], deps);
240
+ await checked(["enable", systemdUnitName(identity)], deps);
241
+ await checked([restart ? "restart" : "start", systemdUnitName(identity)], deps);
242
+ const now = deps.now ?? Date.now;
243
+ const deadline = now() + 30_000;
244
+ for (;;) {
245
+ const service = await inspectSystemd(identity, deps);
246
+ if (service.activeState === "active" && service.pid > 0 && await ready(service))
247
+ break;
248
+ if (service.activeState === "failed" || now() >= deadline)
249
+ throw new Error("Service did not report ready; inspect journal logs.");
250
+ await (deps.sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms))))(200);
251
+ }
252
+ }
253
+ catch (error) {
254
+ if (!published)
255
+ throw error;
256
+ try {
257
+ const failedService = await inspectSystemd(identity, deps);
258
+ if (failedService.pid > 0 || !["inactive", "failed"].includes(failedService.activeState)) {
259
+ await checked(["stop", systemdUnitName(identity)], deps);
260
+ }
261
+ const stopped = await inspectSystemd(identity, deps);
262
+ if (stopped.pid !== 0 || !["inactive", "failed"].includes(stopped.activeState))
263
+ throw new Error("Replacement worker is still running.");
264
+ if (previousUnit)
265
+ await publish(systemdUnitPath(identity, deps), previousUnit.contents);
266
+ else {
267
+ await checked(["disable", systemdUnitName(identity)], deps);
268
+ await unlink(systemdUnitPath(identity, deps));
269
+ }
270
+ await checked(["daemon-reload"], deps);
271
+ if (previous) {
272
+ await checked([priorService.enabled ? "enable" : "disable", systemdUnitName(identity)], deps);
273
+ if (priorService.activeState === "active")
274
+ await checked(["start", systemdUnitName(identity)], deps);
275
+ }
276
+ }
277
+ catch (rollback) {
278
+ throw new Error(`${String(error)}; rollback failed: ${String(rollback)}`);
279
+ }
280
+ throw error;
281
+ }
282
+ const linger = await (deps.run ?? runSystemdTool)("loginctl", ["show-user", String(process.getuid?.()), "--property=Linger", "--value"]);
283
+ if (linger.code !== 0 || linger.stdout.trim() !== "yes") {
284
+ (deps.stderr ?? process.stderr).write("Boot persistence is not confirmed. Run `loginctl enable-linger` for this user to keep services running after logout.\n");
285
+ }
286
+ }
287
+ export async function systemdLogs(identity, follow, lines, deps = {}) {
288
+ if (!Number.isSafeInteger(lines) || lines < 0)
289
+ throw new Error("Log lines must be a nonnegative integer.");
290
+ const args = ["--user", "--unit", systemdUnitName(identity), "--no-pager", "--lines", String(lines), ...(follow ? ["--follow"] : [])];
291
+ if (deps.journal)
292
+ return await deps.journal(args);
293
+ return await new Promise((resolve) => {
294
+ const child = spawn("journalctl", args, { stdio: "inherit" });
295
+ child.on("error", () => resolve(127));
296
+ child.on("close", (code) => resolve(code ?? 1));
297
+ });
298
+ }
299
+ //# sourceMappingURL=systemd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"systemd.js","sourceRoot":"","sources":["../src/systemd.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { RuntimeOptionsExtension } from "./runtime-option-extensions.js";
2
+ /** Attach the configured app's artifact sink after every caller-owned extension. */
3
+ export declare function createToolOutputArtifactsRuntimeExtension(next: RuntimeOptionsExtension | undefined, artifactRoot: string): RuntimeOptionsExtension;
4
+ //# sourceMappingURL=tool-output-artifacts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-output-artifacts.d.ts","sourceRoot":"","sources":["../src/tool-output-artifacts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAE9E,oFAAoF;AACpF,wBAAgB,yCAAyC,CACvD,IAAI,EAAE,uBAAuB,GAAG,SAAS,EACzC,YAAY,EAAE,MAAM,GACnB,uBAAuB,CAazB"}
@@ -0,0 +1,17 @@
1
+ import { createToolHistoryArtifactSink } from "@mono-agent/agent-harness";
2
+ /** Attach the configured app's artifact sink after every caller-owned extension. */
3
+ export function createToolOutputArtifactsRuntimeExtension(next, artifactRoot) {
4
+ return async (input) => {
5
+ const result = next === undefined
6
+ ? { runtimeOptions: {} }
7
+ : await next(input);
8
+ return {
9
+ ...result,
10
+ runtimeOptions: {
11
+ ...(result.runtimeOptions ?? {}),
12
+ persistArtifact: createToolHistoryArtifactSink({ artifactRoot, runId: input.runId }),
13
+ },
14
+ };
15
+ };
16
+ }
17
+ //# sourceMappingURL=tool-output-artifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-output-artifacts.js","sourceRoot":"","sources":["../src/tool-output-artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAI1E,oFAAoF;AACpF,MAAM,UAAU,yCAAyC,CACvD,IAAyC,EACzC,YAAoB;IAEpB,OAAO,KAAK,EAAE,KAAK,EAAE,EAAE;QACrB,MAAM,MAAM,GAAG,IAAI,KAAK,SAAS;YAC/B,CAAC,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE;YACxB,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,OAAO;YACL,GAAG,MAAM;YACT,cAAc,EAAE;gBACd,GAAG,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC;gBAChC,eAAe,EAAE,6BAA6B,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;aACrF;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -1,20 +1,15 @@
1
1
  import { listTraceSources } from "@mono-agent/observability";
2
2
  import type { TraceSourceListItem } from "@mono-agent/observability";
3
- import type { BackgroundSnapshot } from "./background-snapshot.js";
4
3
  export interface RunTuiOptions {
5
4
  readonly configPath: string;
6
5
  readonly cwd: string;
7
6
  readonly env: Record<string, string | undefined>;
8
- /** Explicit dotenv path baked into managed background restarts. */
9
- readonly envFile?: string;
10
7
  /** --agent: connect to this label or sourceId directly. */
11
8
  readonly agent?: string;
12
9
  /** --conversation: conversation id to chat under (default tui-<sourceId>). */
13
10
  readonly conversationId?: string;
14
11
  /** Build the current folder's responder in this process instead of discovering a service. */
15
12
  readonly local?: boolean;
16
- /** Attach to the managed background agent in a dedicated self-configuration session. */
17
- readonly configure?: boolean;
18
13
  }
19
14
  /** Test seams: discovery + TUI boot are injectable. */
20
15
  export interface RunTuiDeps {
@@ -29,7 +24,6 @@ export interface RunTuiDeps {
29
24
  readonly stderr?: {
30
25
  write(text: string): void;
31
26
  };
32
- readonly platform?: NodeJS.Platform;
33
27
  readonly createLocalSession?: (options: {
34
28
  readonly cwd: string;
35
29
  readonly configPath: string;
@@ -39,39 +33,6 @@ export interface RunTuiDeps {
39
33
  readonly title: string;
40
34
  dispose(): Promise<void>;
41
35
  }>;
42
- readonly createRemoteConfigurationSession?: (options: {
43
- readonly cwd: string;
44
- readonly configPath: string;
45
- readonly env: Record<string, string | undefined>;
46
- readonly envFile?: string;
47
- readonly restartBackground: (expectedSnapshot: BackgroundSnapshot) => Promise<{
48
- readonly ok: true;
49
- readonly connection: {
50
- readonly baseUrl: string;
51
- readonly apiKey?: string;
52
- };
53
- } | {
54
- readonly ok: false;
55
- readonly message: string;
56
- }>;
57
- }) => Promise<{
58
- readonly configuration: unknown;
59
- dispose(): Promise<void>;
60
- }>;
61
- readonly restartBackground?: (expectedSnapshot: BackgroundSnapshot, environment: Readonly<Record<string, string | undefined>>) => Promise<{
62
- readonly ok: true;
63
- readonly connection: {
64
- readonly baseUrl: string;
65
- readonly apiKey?: string;
66
- };
67
- } | {
68
- readonly ok: false;
69
- readonly message: string;
70
- }>;
71
- /** Re-prove launchd ownership, exact durable inputs, and TUI reachability before granting configuration authority. */
72
- readonly verifyConfigurationSource?: (source: TraceSourceListItem, environment: Readonly<Record<string, string | undefined>>) => Promise<TraceSourceListItem | undefined>;
73
- /** Reconstruct the exact dotenv-plus-operational environment used by the managed worker. */
74
- readonly loadConfigurationEnvironment?: () => Promise<Record<string, string>>;
75
36
  }
76
37
  export type TuiLaunchPlan = {
77
38
  readonly kind: "none";
@@ -103,10 +64,4 @@ export declare function tuiEndpointOf(source: TraceSourceListItem): string | und
103
64
  * ~/.mono-agent/trace-sources.
104
65
  */
105
66
  export declare function runTui(options: RunTuiOptions, deps?: RunTuiDeps): Promise<number>;
106
- /**
107
- * Attest the configuration target against the one environment reconstructed
108
- * before discovery. Re-reading dotenv here could prove a different worker
109
- * input than the environment later used for authentication and restart.
110
- */
111
- export declare function captureManagedConfigurationAttachSnapshot(target: Pick<RunTuiOptions, "cwd" | "configPath" | "envFile">, environment: Readonly<Record<string, string | undefined>>): Promise<BackgroundSnapshot>;
112
67
  //# sourceMappingURL=tui-command.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tui-command.d.ts","sourceRoot":"","sources":["../src/tui-command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tui-command.d.ts","sourceRoot":"","sources":["../src/tui-command.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAwC,MAAM,2BAA2B,CAAC;AACnG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAKrE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACjD,2DAA2D;IAC3D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,8EAA8E;IAC9E,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,6FAA6F;IAC7F,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,uDAAuD;AACvD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,gBAAgB,CAAC;IAC/C,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC;QAAE,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC,CAAC;IACtG,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE;QAAE,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAChD,QAAQ,CAAC,MAAM,CAAC,EAAE;QAAE,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAChD,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE;QACtC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;KAClD,KAAK,OAAO,CAAC;QACZ,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;QAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;KAC1B,CAAC,CAAC;CACJ;AAED,MAAM,MAAM,aAAa,GACrB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAA;CAAE,GAClE;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,mBAAmB,EAAE,CAAA;CAAE,CAAC;AAElF;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,SAAS,mBAAmB,EAAE,EACvC,YAAY,EAAE,SAAS,MAAM,EAAE,EAC/B,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,aAAa,CAiCf;AAED,6EAA6E;AAC7E,wBAAgB,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,GAAG,SAAS,CAe7E;AAED;;;;;GAKG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,GAAE,UAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAgI3F"}