@mono-agent/agent-app 0.6.2 → 0.8.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 (211) hide show
  1. package/README.md +210 -19
  2. package/dist/adapter-send-proxy.d.ts +18 -0
  3. package/dist/adapter-send-proxy.d.ts.map +1 -0
  4. package/dist/adapter-send-proxy.js +229 -0
  5. package/dist/adapter-send-proxy.js.map +1 -0
  6. package/dist/adapter-send-tools-main.js +62 -4
  7. package/dist/adapter-send-tools-main.js.map +1 -1
  8. package/dist/adapter-send-tools.d.ts +33 -6
  9. package/dist/adapter-send-tools.d.ts.map +1 -1
  10. package/dist/adapter-send-tools.js +485 -87
  11. package/dist/adapter-send-tools.js.map +1 -1
  12. package/dist/app-config.d.ts.map +1 -1
  13. package/dist/app-config.js +8 -0
  14. package/dist/app-config.js.map +1 -1
  15. package/dist/app.d.ts +2 -0
  16. package/dist/app.d.ts.map +1 -1
  17. package/dist/app.js +528 -135
  18. package/dist/app.js.map +1 -1
  19. package/dist/broadcast-recorder.d.ts.map +1 -1
  20. package/dist/broadcast-recorder.js +24 -2
  21. package/dist/broadcast-recorder.js.map +1 -1
  22. package/dist/channels.d.ts.map +1 -1
  23. package/dist/channels.js +16 -6
  24. package/dist/channels.js.map +1 -1
  25. package/dist/cli.d.ts +76 -4
  26. package/dist/cli.d.ts.map +1 -1
  27. package/dist/cli.js +2102 -102
  28. package/dist/cli.js.map +1 -1
  29. package/dist/config-reference.d.ts.map +1 -1
  30. package/dist/config-reference.js +195 -6
  31. package/dist/config-reference.js.map +1 -1
  32. package/dist/configuration-proposal-main.d.ts +3 -0
  33. package/dist/configuration-proposal-main.d.ts.map +1 -0
  34. package/dist/configuration-proposal-main.js +13 -0
  35. package/dist/configuration-proposal-main.js.map +1 -0
  36. package/dist/configuration-proposal-tool.d.ts +26 -0
  37. package/dist/configuration-proposal-tool.d.ts.map +1 -0
  38. package/dist/configuration-proposal-tool.js +139 -0
  39. package/dist/configuration-proposal-tool.js.map +1 -0
  40. package/dist/configured-agent.d.ts +12 -0
  41. package/dist/configured-agent.d.ts.map +1 -1
  42. package/dist/configured-agent.js +150 -18
  43. package/dist/configured-agent.js.map +1 -1
  44. package/dist/consumer-contract.d.ts +3 -0
  45. package/dist/consumer-contract.d.ts.map +1 -1
  46. package/dist/consumer-contract.js +44 -1
  47. package/dist/consumer-contract.js.map +1 -1
  48. package/dist/doctor.d.ts +27 -5
  49. package/dist/doctor.d.ts.map +1 -1
  50. package/dist/doctor.js +1197 -101
  51. package/dist/doctor.js.map +1 -1
  52. package/dist/first-run-managed-memory.d.ts +39 -0
  53. package/dist/first-run-managed-memory.d.ts.map +1 -0
  54. package/dist/first-run-managed-memory.js +521 -0
  55. package/dist/first-run-managed-memory.js.map +1 -0
  56. package/dist/first-run-readiness.d.ts +111 -0
  57. package/dist/first-run-readiness.d.ts.map +1 -0
  58. package/dist/first-run-readiness.js +757 -0
  59. package/dist/first-run-readiness.js.map +1 -0
  60. package/dist/index.d.ts +8 -3
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js +4 -1
  63. package/dist/index.js.map +1 -1
  64. package/dist/init.d.ts +88 -3
  65. package/dist/init.d.ts.map +1 -1
  66. package/dist/init.js +1212 -23
  67. package/dist/init.js.map +1 -1
  68. package/dist/interaction-bridge.d.ts +25 -1
  69. package/dist/interaction-bridge.d.ts.map +1 -1
  70. package/dist/interaction-bridge.js +281 -19
  71. package/dist/interaction-bridge.js.map +1 -1
  72. package/dist/local-configuration.d.ts +56 -0
  73. package/dist/local-configuration.d.ts.map +1 -0
  74. package/dist/local-configuration.js +914 -0
  75. package/dist/local-configuration.js.map +1 -0
  76. package/dist/memory-command.d.ts +4 -0
  77. package/dist/memory-command.d.ts.map +1 -1
  78. package/dist/memory-command.js +751 -27
  79. package/dist/memory-command.js.map +1 -1
  80. package/dist/memory-recall.d.ts +38 -10
  81. package/dist/memory-recall.d.ts.map +1 -1
  82. package/dist/memory-recall.js +82 -25
  83. package/dist/memory-recall.js.map +1 -1
  84. package/dist/memory-retrieval.d.ts +66 -0
  85. package/dist/memory-retrieval.d.ts.map +1 -0
  86. package/dist/memory-retrieval.js +332 -0
  87. package/dist/memory-retrieval.js.map +1 -0
  88. package/dist/modules/base.d.ts +6 -5
  89. package/dist/modules/base.d.ts.map +1 -1
  90. package/dist/modules/base.js +11 -7
  91. package/dist/modules/base.js.map +1 -1
  92. package/dist/modules/catalog.d.ts.map +1 -1
  93. package/dist/modules/catalog.js +54 -20
  94. package/dist/modules/catalog.js.map +1 -1
  95. package/dist/modules/index.d.ts +2 -2
  96. package/dist/modules/index.d.ts.map +1 -1
  97. package/dist/modules/index.js +1 -1
  98. package/dist/modules/index.js.map +1 -1
  99. package/dist/modules/known-tools.d.ts +3 -0
  100. package/dist/modules/known-tools.d.ts.map +1 -1
  101. package/dist/modules/known-tools.js +11 -1
  102. package/dist/modules/known-tools.js.map +1 -1
  103. package/dist/modules/types.d.ts +20 -6
  104. package/dist/modules/types.d.ts.map +1 -1
  105. package/dist/modules/types.js.map +1 -1
  106. package/dist/package-version.d.ts +3 -0
  107. package/dist/package-version.d.ts.map +1 -0
  108. package/dist/package-version.js +14 -0
  109. package/dist/package-version.js.map +1 -0
  110. package/dist/pi-auth-store-inspection.d.ts +21 -0
  111. package/dist/pi-auth-store-inspection.d.ts.map +1 -0
  112. package/dist/pi-auth-store-inspection.js +120 -0
  113. package/dist/pi-auth-store-inspection.js.map +1 -0
  114. package/dist/pi-oauth-login-main.d.ts +3 -0
  115. package/dist/pi-oauth-login-main.d.ts.map +1 -0
  116. package/dist/pi-oauth-login-main.js +14 -0
  117. package/dist/pi-oauth-login-main.js.map +1 -0
  118. package/dist/pi-oauth-login.d.ts +22 -0
  119. package/dist/pi-oauth-login.d.ts.map +1 -0
  120. package/dist/pi-oauth-login.js +79 -0
  121. package/dist/pi-oauth-login.js.map +1 -0
  122. package/dist/project-skills.d.ts +40 -0
  123. package/dist/project-skills.d.ts.map +1 -0
  124. package/dist/project-skills.js +573 -0
  125. package/dist/project-skills.js.map +1 -0
  126. package/dist/provider-setup.d.ts +117 -2
  127. package/dist/provider-setup.d.ts.map +1 -1
  128. package/dist/provider-setup.js +1505 -49
  129. package/dist/provider-setup.js.map +1 -1
  130. package/dist/readiness-probe-worker.d.ts +12 -0
  131. package/dist/readiness-probe-worker.d.ts.map +1 -0
  132. package/dist/readiness-probe-worker.js +276 -0
  133. package/dist/readiness-probe-worker.js.map +1 -0
  134. package/dist/readiness-probe.d.ts +100 -0
  135. package/dist/readiness-probe.d.ts.map +1 -0
  136. package/dist/readiness-probe.js +780 -0
  137. package/dist/readiness-probe.js.map +1 -0
  138. package/dist/request-model-override.d.ts +43 -1
  139. package/dist/request-model-override.d.ts.map +1 -1
  140. package/dist/request-model-override.js +178 -19
  141. package/dist/request-model-override.js.map +1 -1
  142. package/dist/run-history.d.ts +32 -0
  143. package/dist/run-history.d.ts.map +1 -0
  144. package/dist/run-history.js +859 -0
  145. package/dist/run-history.js.map +1 -0
  146. package/dist/runs-health.d.ts.map +1 -1
  147. package/dist/runs-health.js +12 -4
  148. package/dist/runs-health.js.map +1 -1
  149. package/dist/runtime-option-extensions.d.ts +14 -0
  150. package/dist/runtime-option-extensions.d.ts.map +1 -0
  151. package/dist/runtime-option-extensions.js +98 -0
  152. package/dist/runtime-option-extensions.js.map +1 -0
  153. package/dist/runtime-routes.d.ts +9 -0
  154. package/dist/runtime-routes.d.ts.map +1 -0
  155. package/dist/runtime-routes.js +13 -0
  156. package/dist/runtime-routes.js.map +1 -0
  157. package/dist/sandbox-manager.d.ts +69 -0
  158. package/dist/sandbox-manager.d.ts.map +1 -0
  159. package/dist/sandbox-manager.js +856 -0
  160. package/dist/sandbox-manager.js.map +1 -0
  161. package/dist/supermemory-plugin.d.ts +54 -0
  162. package/dist/supermemory-plugin.d.ts.map +1 -0
  163. package/dist/supermemory-plugin.js +136 -0
  164. package/dist/supermemory-plugin.js.map +1 -0
  165. package/dist/tui-command.d.ts +15 -0
  166. package/dist/tui-command.d.ts.map +1 -1
  167. package/dist/tui-command.js +46 -6
  168. package/dist/tui-command.js.map +1 -1
  169. package/dist/web-command.d.ts +8 -0
  170. package/dist/web-command.d.ts.map +1 -1
  171. package/dist/web-command.js +174 -17
  172. package/dist/web-command.js.map +1 -1
  173. package/dist/wizard/answers.d.ts +31 -4
  174. package/dist/wizard/answers.d.ts.map +1 -1
  175. package/dist/wizard/answers.js +145 -16
  176. package/dist/wizard/answers.js.map +1 -1
  177. package/dist/wizard/from-flags.d.ts +7 -0
  178. package/dist/wizard/from-flags.d.ts.map +1 -1
  179. package/dist/wizard/from-flags.js +36 -2
  180. package/dist/wizard/from-flags.js.map +1 -1
  181. package/dist/wizard/index.d.ts +4 -4
  182. package/dist/wizard/index.d.ts.map +1 -1
  183. package/dist/wizard/index.js +2 -2
  184. package/dist/wizard/index.js.map +1 -1
  185. package/dist/wizard/model-discovery.d.ts +33 -2
  186. package/dist/wizard/model-discovery.d.ts.map +1 -1
  187. package/dist/wizard/model-discovery.js +826 -108
  188. package/dist/wizard/model-discovery.js.map +1 -1
  189. package/dist/wizard/presets.d.ts +1 -1
  190. package/dist/wizard/presets.d.ts.map +1 -1
  191. package/dist/wizard/presets.js +7 -12
  192. package/dist/wizard/presets.js.map +1 -1
  193. package/dist/wizard/prompts.d.ts +56 -9
  194. package/dist/wizard/prompts.d.ts.map +1 -1
  195. package/dist/wizard/prompts.js +172 -20
  196. package/dist/wizard/prompts.js.map +1 -1
  197. package/dist/wizard/run.d.ts +59 -3
  198. package/dist/wizard/run.d.ts.map +1 -1
  199. package/dist/wizard/run.js +1133 -191
  200. package/dist/wizard/run.js.map +1 -1
  201. package/package.json +21 -16
  202. package/resources/srt/package-lock.json +66 -0
  203. package/resources/srt/package.json +9 -0
  204. package/schema/mono-agent.config.schema.json +381 -17
  205. package/skills/mono-agent-composer/SKILL.md +4 -4
  206. package/skills/mono-agent-composer/references/config-blueprint.md +5 -4
  207. package/skills/mono-agent-composer/references/discovery-questions.md +8 -8
  208. package/skills/mono-agent-composer/references/feature-coverage.md +8 -6
  209. package/skills/mono-agent-composer/references/package-map.md +1 -1
  210. package/skills/mono-agent-composer/references/playbooks.md +8 -7
  211. package/skills/mono-agent-composer/references/validation.md +1 -1
@@ -1,9 +1,11 @@
1
+ import { networkInterfaces } from "node:os";
1
2
  import { resolve } from "node:path";
2
3
  import { pruneTraceSources } from "@mono-agent/observability";
3
4
  import { startSessionWebServer } from "@mono-agent/session-web";
4
- import { generateBearerToken, isLoopbackHost } from "@mono-agent/agent-contracts";
5
+ import { generateBearerToken, hostForUrl, isLoopbackHost, isWildcardHost, normalizeHostForBind, normalizeOptionalString, } from "@mono-agent/agent-contracts";
5
6
  import { resolveAppTraceRegistryDir, resolveGlobalTraceRegistryDir } from "./app-config.js";
6
7
  export const DEFAULT_WEB_PORT = 4599;
8
+ const WEB_AUTH_TOKEN_ENV = "MONO_AGENT_WEB_AUTH_TOKEN";
7
9
  /**
8
10
  * `mono-agent web`: discover every running agent on this machine (trace-source
9
11
  * registry, the same mechanism as `mono-agent tui`) and serve the read-only
@@ -21,7 +23,15 @@ export async function runWeb(options, deps = {}) {
21
23
  const globalRegistryDir = resolveGlobalTraceRegistryDir(options.env);
22
24
  const registryDirs = dedupePaths([configuredRegistryDir, globalRegistryDir]);
23
25
  await Promise.all(registryDirs.map((registryDir) => pruneTraceSources({ registryDir })));
24
- const authToken = requiresServerAuth(options.host) ? generateBearerToken() : undefined;
26
+ const authRequired = requiresServerAuth(options.host);
27
+ const interactive = deps.interactive ?? process.stdout.isTTY === true;
28
+ const configuredAuthToken = normalizeOptionalString(options.env.MONO_AGENT_WEB_AUTH_TOKEN);
29
+ if (authRequired && configuredAuthToken === undefined && !interactive) {
30
+ stderr.write(`Non-interactive non-loopback web serving requires ${WEB_AUTH_TOKEN_ENV}; refusing to generate a bearer secret into logs.\n`);
31
+ return 1;
32
+ }
33
+ const authToken = configuredAuthToken ?? (authRequired ? generateBearerToken() : undefined);
34
+ const generatedAuthToken = authToken !== undefined && configuredAuthToken === undefined;
25
35
  const port = options.port ?? DEFAULT_WEB_PORT;
26
36
  const startServer = deps.startServer ?? startSessionWebServer;
27
37
  let handle;
@@ -41,19 +51,38 @@ export async function runWeb(options, deps = {}) {
41
51
  stderr.write(`mono-agent web failed to start: ${error instanceof Error ? error.message : String(error)}\n`);
42
52
  return 1;
43
53
  }
44
- const browserUrl = authToken === undefined ? handle.url : withAuthToken(handle.url, authToken);
45
- stdout.write(`mono-agent web → ${browserUrl}\n`);
54
+ const wildcardBind = isWildcardUrl(handle.url)
55
+ || (handle.boundAddress !== undefined && isWildcardHost(handle.boundAddress));
56
+ const networkAddresses = wildcardBind
57
+ ? bestEffortNetworkAddresses(deps.discoverNetworkAddresses)
58
+ : [];
59
+ const advertisedUrls = resolveAdvertisedUrls(handle.url, networkAddresses, handle.boundAddress);
60
+ const primaryUrl = advertisedUrls[0]?.url ?? handle.url;
61
+ const mayPrintConfiguredToken = configuredAuthToken !== undefined
62
+ && options.showAuthUrl === true
63
+ && interactive;
64
+ const printableToken = generatedAuthToken || mayPrintConfiguredToken ? authToken : undefined;
65
+ printAdvertisedUrls(stdout, advertisedUrls, printableToken);
66
+ if (configuredAuthToken !== undefined && printableToken === undefined) {
67
+ stdout.write(`Authentication: ${WEB_AUTH_TOKEN_ENV} is configured (token redacted).\n`);
68
+ }
69
+ if (configuredAuthToken !== undefined && options.showAuthUrl === true && !mayPrintConfiguredToken) {
70
+ stderr.write("--show-auth-url was ignored because stdout is not an interactive terminal.\n");
71
+ }
46
72
  stdout.write(`Watching ${registryDirs.length} registr${registryDirs.length === 1 ? "y" : "ies"} for agents. Press Ctrl-C to stop.\n`);
47
- stdout.write(`${reverseProxyHint(handle.url)}\n`);
48
- stdout.write(`${reachabilityHint(handle.url)}\n`);
49
- if (options.open ?? true) {
73
+ stdout.write(`${reverseProxyHint(primaryUrl)}\n`);
74
+ stdout.write(`${reachabilityHint(handle.url, handle.boundAddress)}\n`);
75
+ if ((options.open ?? true) && authToken === undefined) {
50
76
  try {
51
- (deps.openUrl ?? openInBrowser)(browserUrl);
77
+ (deps.openUrl ?? openInBrowser)(primaryUrl);
52
78
  }
53
79
  catch {
54
80
  // Best-effort: a headless host without a browser is fine — the URL is printed.
55
81
  }
56
82
  }
83
+ else if ((options.open ?? true) && authToken !== undefined) {
84
+ stdout.write("Browser launch skipped in authenticated mode so the bearer token never enters process arguments.\n");
85
+ }
57
86
  deps.onReady?.(handle);
58
87
  await (deps.waitForShutdown ?? waitForSignal)();
59
88
  await handle.stop();
@@ -61,12 +90,10 @@ export async function runWeb(options, deps = {}) {
61
90
  return 0;
62
91
  }
63
92
  /**
64
- * A one-line hint about who can reach the server and how to expose it over a
65
- * tailnet. Loopback (default) recommend `tailscale serve` (adds HTTPS + a
66
- * MagicDNS name, keeping the PWA installable). Non-loopback → note it is already
67
- * reachable over the LAN/tailnet at this port.
93
+ * A one-line hint about who can reach the server. Direct HTTP never depends on
94
+ * Tailscale Serve; Serve is only an optional HTTPS/PWA-installability layer.
68
95
  */
69
- function reachabilityHint(url) {
96
+ function reachabilityHint(url, boundAddress) {
70
97
  let port = "";
71
98
  let host = "";
72
99
  try {
@@ -77,10 +104,11 @@ function reachabilityHint(url) {
77
104
  catch {
78
105
  /* leave blank */
79
106
  }
80
- if (host.length > 0 && !isLoopbackHost(host)) {
81
- return "Bound non-loopback: reachable over your LAN/Tailnet at this port (use the machine's Tailscale IP or MagicDNS name). For HTTPS + a PWA-installable URL, prefer `tailscale serve` instead.";
107
+ const effectiveHost = boundAddress ?? host;
108
+ if (effectiveHost.length > 0 && !isLoopbackHost(effectiveHost)) {
109
+ return "Bound non-loopback: direct HTTP is available over your LAN/Tailnet at the URLs above. Tailscale Serve is optional and only needed for HTTPS + installable/offline PWA behavior.";
82
110
  }
83
- return `Loopback only. To reach it over Tailscale with HTTPS + your MagicDNS name (keeps the PWA installable): tailscale serve --bg ${port || "<port>"}`;
111
+ return `Loopback only. Re-run with --host 0.0.0.0 --allow-non-loopback for direct LAN/Tailnet HTTP. Tailscale Serve is optional for HTTPS + installable/offline PWA behavior (port ${port || "<port>"}).`;
84
112
  }
85
113
  function reverseProxyHint(url) {
86
114
  let target = url;
@@ -102,9 +130,138 @@ function requiresServerAuth(host) {
102
130
  }
103
131
  function withAuthToken(url, token) {
104
132
  const parsed = new URL(url);
105
- parsed.searchParams.set("token", token);
133
+ const fragment = new URLSearchParams(parsed.hash.startsWith("#") ? parsed.hash.slice(1) : parsed.hash);
134
+ fragment.set("token", token);
135
+ parsed.hash = fragment.toString();
106
136
  return parsed.toString();
107
137
  }
138
+ function printAdvertisedUrls(stdout, urls, authToken) {
139
+ const printable = urls.map((entry) => ({
140
+ ...entry,
141
+ url: authToken === undefined ? entry.url : withAuthToken(entry.url, authToken),
142
+ }));
143
+ const primary = printable[0];
144
+ if (primary === undefined) {
145
+ return;
146
+ }
147
+ stdout.write(`mono-agent web → ${primary.url}\n`);
148
+ for (const entry of printable.slice(1)) {
149
+ stdout.write(`${entry.label.padEnd(9)} → ${entry.url}\n`);
150
+ }
151
+ }
152
+ function resolveAdvertisedUrls(url, networkAddresses, boundAddress) {
153
+ const requestedWildcard = isWildcardUrl(url) ? new URL(url).hostname : undefined;
154
+ const actualWildcard = boundAddress !== undefined && isWildcardHost(boundAddress)
155
+ ? boundAddress
156
+ : undefined;
157
+ if (requestedWildcard === undefined && actualWildcard === undefined) {
158
+ return [{ label: isLoopbackUrl(url) ? "Loopback" : "Web", url }];
159
+ }
160
+ const wildcardHost = requestedWildcard ?? actualWildcard ?? new URL(url).hostname;
161
+ const loopbackHost = loopbackForWildcardHost(wildcardHost);
162
+ const urls = [{ label: "Loopback", url: replaceUrlHost(url, loopbackHost) }];
163
+ for (const entry of networkAddresses) {
164
+ urls.push({
165
+ label: entry.kind === "tailscale" ? "Tailscale" : "LAN",
166
+ url: replaceUrlHost(url, entry.address),
167
+ });
168
+ }
169
+ return urls;
170
+ }
171
+ function loopbackForWildcardHost(host) {
172
+ const normalized = normalizeHostForBind(host).toLowerCase();
173
+ if (normalized === "0.0.0.0") {
174
+ return "127.0.0.1";
175
+ }
176
+ try {
177
+ const canonical = new URL(`http://[${normalized}]/`).hostname.slice(1, -1);
178
+ if (canonical === "::ffff:0:0") {
179
+ return "127.0.0.1";
180
+ }
181
+ }
182
+ catch {
183
+ // isWildcardHost already validated the caller; fall through defensively.
184
+ }
185
+ return "::1";
186
+ }
187
+ function replaceUrlHost(url, host) {
188
+ const parsed = new URL(url);
189
+ parsed.hostname = hostForUrl(host);
190
+ return parsed.toString();
191
+ }
192
+ function isWildcardUrl(url) {
193
+ try {
194
+ const host = new URL(url).hostname;
195
+ return isWildcardHost(host);
196
+ }
197
+ catch {
198
+ return false;
199
+ }
200
+ }
201
+ function isLoopbackUrl(url) {
202
+ try {
203
+ return isLoopbackHost(new URL(url).hostname);
204
+ }
205
+ catch {
206
+ return false;
207
+ }
208
+ }
209
+ function bestEffortNetworkAddresses(injected) {
210
+ try {
211
+ return dedupeNetworkAddresses(injected?.() ?? discoverNetworkAddresses());
212
+ }
213
+ catch {
214
+ return [];
215
+ }
216
+ }
217
+ function discoverNetworkAddresses() {
218
+ const addresses = [];
219
+ for (const interfaces of Object.values(networkInterfaces())) {
220
+ for (const info of interfaces ?? []) {
221
+ if (info.internal || info.family !== "IPv4") {
222
+ continue;
223
+ }
224
+ const kind = classifyIpv4Address(info.address);
225
+ if (kind !== undefined) {
226
+ addresses.push({ address: info.address, kind });
227
+ }
228
+ }
229
+ }
230
+ return addresses;
231
+ }
232
+ function classifyIpv4Address(address) {
233
+ const octets = address.split(".").map((part) => Number.parseInt(part, 10));
234
+ if (octets.length !== 4 || octets.some((part) => !Number.isInteger(part) || part < 0 || part > 255)) {
235
+ return undefined;
236
+ }
237
+ const [first = -1, second = -1] = octets;
238
+ if (first === 100 && second >= 64 && second <= 127) {
239
+ return "tailscale";
240
+ }
241
+ if (first === 10
242
+ || (first === 172 && second >= 16 && second <= 31)
243
+ || (first === 192 && second === 168)) {
244
+ return "lan";
245
+ }
246
+ return undefined;
247
+ }
248
+ function dedupeNetworkAddresses(addresses) {
249
+ const seen = new Set();
250
+ return [...addresses]
251
+ .filter((entry) => {
252
+ if (seen.has(entry.address)) {
253
+ return false;
254
+ }
255
+ seen.add(entry.address);
256
+ return true;
257
+ })
258
+ .sort((left, right) => {
259
+ if (left.kind !== right.kind) {
260
+ return left.kind === "lan" ? -1 : 1;
261
+ }
262
+ return left.address.localeCompare(right.address);
263
+ });
264
+ }
108
265
  /** Resolve + dedupe registry dirs, preserving precedence order. */
109
266
  function dedupePaths(dirs) {
110
267
  const seen = new Set();
@@ -1 +1 @@
1
- {"version":3,"file":"web-command.js","sourceRoot":"","sources":["../src/web-command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"web-command.js","sourceRoot":"","sources":["../src/web-command.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,30 @@
1
- import type { MonoAgentConfigJson } from "@mono-agent/config";
1
+ import { type MonoAgentConfigJson, type RouteSafetyMode } from "@mono-agent/config";
2
2
  import { type CapabilityModule, type GeneratedFile, type ModuleInputValues, type ModuleValidateExpectation } from "../modules/index.js";
3
3
  /**
4
4
  * The complete set of choices the wizard (or a preset) makes. This is the single
5
5
  * input to {@link composeWizardPlan}: everything the composer needs to emit a full
6
6
  * `mono-agent.config.json`, `.env.example`, and follow-up files is derived from it.
7
7
  */
8
+ export interface WizardFallback {
9
+ readonly model: string;
10
+ readonly effort?: string;
11
+ }
8
12
  export interface WizardAnswers {
13
+ /** Public display identity. Omitted only by legacy/programmatic callers. */
14
+ readonly name?: string;
15
+ /** Concise role statement used to generate the initial Identity. */
16
+ readonly purpose?: string;
9
17
  readonly model: string;
10
- readonly fallbackModels: readonly string[];
11
- /** Optional runtime reasoning effort (`runtime.effort`), omitted for default provider behavior. */
18
+ /** Optional primary-route effort; omitted means provider default. */
12
19
  readonly effort?: string;
20
+ /** Canonical ordered fallback routes; omitted effort means provider default. */
21
+ readonly fallbacks: readonly WizardFallback[];
22
+ /**
23
+ * Deprecated compatibility input. {@link defaultAnswers} converts these to
24
+ * canonical routes, inheriting the legacy global effort when it is present.
25
+ */
26
+ readonly fallbackModels?: readonly string[];
27
+ readonly routeSafety: RouteSafetyMode;
13
28
  /** Channel module ids, e.g. `["channel:webhook","channel:telegram"]`. */
14
29
  readonly channels: readonly string[];
15
30
  /** Memory module id, or `undefined` for no memory section. */
@@ -35,6 +50,7 @@ export interface SecretChecklistItem {
35
50
  readonly label: string;
36
51
  readonly envVar: string;
37
52
  readonly description: string;
53
+ readonly required: boolean;
38
54
  }
39
55
  /**
40
56
  * The single artifact of config generation: the JSON to write (with `$schema`),
@@ -51,6 +67,13 @@ export interface WizardPlan {
51
67
  readonly validateExpectations: readonly ModuleValidateExpectation[];
52
68
  readonly warnings: readonly string[];
53
69
  }
70
+ /**
71
+ * Every model/service reference that provider setup must account for. Runtime
72
+ * refs come first, followed by memory-owned refs in execution order. Local
73
+ * memory services use synthetic Pi refs so the existing setup planner can run
74
+ * the matching Ollama/LM Studio preflight without learning a second shape.
75
+ */
76
+ export declare function referencedSetupModelRefs(plan: WizardPlan): readonly string[];
54
77
  /**
55
78
  * The recommended `allowedTools` for these answers: the read-only safe defaults
56
79
  * plus every selected module's `recommendedTools`, deduped and ordered by the
@@ -61,7 +84,7 @@ export declare function recommendedToolSelection(answers: WizardAnswers): readon
61
84
  * The tools this agent auto-provisions regardless of `tools.allowedTools` — the
62
85
  * "always on" set the wizard surfaces so the operator understands they are NOT gated
63
86
  * by the allow-list choice. Today that is `MemoryRecall` when the memory tier enables
64
- * recall (journal/bujo/supermemory). `ReadSkill` (skills configured) and MCP-server
87
+ * recall (lite/journal/bujo/supermemory). `ReadSkill` (skills configured) and MCP-server
65
88
  * tools are also always-on when present, but the basic wizard authors neither, so they
66
89
  * never appear here.
67
90
  */
@@ -74,6 +97,10 @@ export declare function alwaysOnTools(answers: WizardAnswers): readonly string[]
74
97
  * verbatim: `["*"]`, a specific list, or `[]` (the chat-only case).
75
98
  */
76
99
  export declare function defaultAnswers(overrides?: Partial<WizardAnswers>): WizardAnswers;
100
+ /** Canonicalize old answer objects at the single composition boundary. */
101
+ export declare function effectiveFallbacks(answers: WizardAnswers): readonly WizardFallback[];
102
+ /** Folder basenames become readable public identities without affecting paths. */
103
+ export declare function humanizeAgentName(dirBasename: string): string;
77
104
  /** Overrides for one module: the shared model plus its non-secret input values. */
78
105
  export declare function moduleOverrides(module: CapabilityModule, answers: WizardAnswers): Record<string, string | undefined>;
79
106
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"answers.d.ts","sourceRoot":"","sources":["../../src/wizard/answers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,EAKL,KAAK,gBAAgB,EAIrB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAE/B,MAAM,qBAAqB,CAAC;AAE7B;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,mGAAmG;IACnG,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,yEAAyE;IACzE,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,8DAA8D;IAC9D,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,8DAA8D;IAC9D,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,8FAA8F;IAC9F,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;CACpE;AAED,+EAA+E;AAC/E,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,UAAU,EAAE,mBAAmB,CAAC;IACzC,sFAAsF;IACtF,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACjD,QAAQ,CAAC,eAAe,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACtD,QAAQ,CAAC,oBAAoB,EAAE,SAAS,yBAAyB,EAAE,CAAC;IACpE,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAiDD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS,MAAM,EAAE,CAQlF;AAyBD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS,MAAM,EAAE,CAMvE;AAcD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,aAAa,CAIhF;AAED,mFAAmF;AACnF,wBAAgB,eAAe,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAYpH;AAkCD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,cAAc,GAAG,UAAU,CAqEzF"}
1
+ {"version":3,"file":"answers.d.ts","sourceRoot":"","sources":["../../src/wizard/answers.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,60 @@
1
+ import { MAX_AGENT_NAME_LENGTH, } from "@mono-agent/config";
1
2
  import { monoAgentConfigWithSchema } from "../config-reference.js";
2
- import { ADAPTER_SEND_TOOL_NAMES, ALLOW_ALL_TOOLS, baseConfig, BUILTIN_TOOL_NAMES, DEFAULT_MODEL, DEFAULT_SAFE_TOOLS, findModule, resolveModuleInputs, } from "../modules/index.js";
3
- /** Tools ordered canonically: built-ins first, then adapter send tools. */
4
- const ORDERED_TOOL_NAMES = [...BUILTIN_TOOL_NAMES, ...ADAPTER_SEND_TOOL_NAMES];
3
+ import { ADAPTER_SEND_TOOL_NAMES, APP_TOOL_NAMES, ALLOW_ALL_TOOLS, baseConfig, BUILTIN_TOOL_NAMES, DEFAULT_MODEL, DEFAULT_SAFE_TOOLS, findModule, resolveModuleInputs, } from "../modules/index.js";
4
+ import { managedProjectSkillFiles } from "../project-skills.js";
5
+ /**
6
+ * Every model/service reference that provider setup must account for. Runtime
7
+ * refs come first, followed by memory-owned refs in execution order. Local
8
+ * memory services use synthetic Pi refs so the existing setup planner can run
9
+ * the matching Ollama/LM Studio preflight without learning a second shape.
10
+ */
11
+ export function referencedSetupModelRefs(plan) {
12
+ const refs = [];
13
+ const seen = new Set();
14
+ const add = (value) => {
15
+ if (typeof value === "string" && value.length > 0 && !seen.has(value)) {
16
+ seen.add(value);
17
+ refs.push(value);
18
+ }
19
+ };
20
+ add(plan.configJson.runtime?.model);
21
+ for (const fallback of plan.configJson.runtime?.fallbacks ?? []) {
22
+ add(fallback.model);
23
+ }
24
+ // A hand-authored legacy plan can still enter this helper; generated plans
25
+ // always use the canonical structured form.
26
+ for (const fallback of plan.configJson.runtime?.fallbackModels ?? []) {
27
+ add(fallback);
28
+ }
29
+ const memory = plan.configJson.memory;
30
+ if (memory?.llm?.provider === "agent-host") {
31
+ add(memory.llm.model);
32
+ }
33
+ else if (memory?.llm?.provider === "ollama" || memory?.llm?.provider === "lmstudio") {
34
+ add(localServiceModelRef(memory.llm.provider, memory.llm.model));
35
+ }
36
+ const embeddings = memory?.embeddings;
37
+ if (embeddings?.provider === "ollama" || embeddings?.provider === "lmstudio") {
38
+ add(localServiceModelRef(embeddings.provider, embeddings.model));
39
+ }
40
+ return refs;
41
+ }
42
+ /** Convert a local memory service into the model-ref shape understood by setup. */
43
+ function localServiceModelRef(provider, model) {
44
+ return typeof model === "string" && model.length > 0 ? `pi:${provider}:${model}` : undefined;
45
+ }
46
+ /** True when a referenced backend requires credentials rather than a local service. */
47
+ function modelRefNeedsCredentials(modelRef) {
48
+ return modelRef.startsWith("codex:")
49
+ || modelRef.startsWith("claude:")
50
+ || (modelRef.startsWith("pi:") && !/^pi:(?:ollama|lmstudio):/u.test(modelRef));
51
+ }
52
+ /** Tools ordered canonically: runtime built-ins, app-owned tools, then adapter send tools. */
53
+ const ORDERED_TOOL_NAMES = [
54
+ ...BUILTIN_TOOL_NAMES,
55
+ ...APP_TOOL_NAMES,
56
+ ...ADAPTER_SEND_TOOL_NAMES,
57
+ ];
5
58
  const ZERO_TOOLS_WARNING = "Zero tools selected — the agent will be chat-only: it cannot read files, run commands, or send proactive messages.";
6
59
  /**
7
60
  * The module ids selected by these answers, in composer order: auto-derived
@@ -10,7 +63,7 @@ const ZERO_TOOLS_WARNING = "Zero tools selected — the agent will be chat-only:
10
63
  */
11
64
  function selectedModuleIds(answers) {
12
65
  const ids = [];
13
- const modelRefs = [answers.model, ...answers.fallbackModels];
66
+ const modelRefs = [answers.model, ...effectiveFallbacks(answers).map((fallback) => fallback.model)];
14
67
  if (modelRefs.some((model) => /^pi:ollama:/u.test(model))) {
15
68
  ids.push("provider:ollama");
16
69
  }
@@ -61,8 +114,8 @@ const MEMORY_RECALL_TOOL = "MemoryRecall";
61
114
  /**
62
115
  * True when the selected memory tier auto-provisions the read-only `MemoryRecall`
63
116
  * tool (its fragment sets `memory.recallTool.enabled`). Derived from the catalog so
64
- * it never drifts from the memory modules themselves — journal/bujo/supermemory do,
65
- * lite does not.
117
+ * it never drifts from the memory modules themselves — lite/journal/bujo/supermemory
118
+ * all do (Lite is FTS-only).
66
119
  */
67
120
  function memoryProvisionsRecall(memoryId) {
68
121
  if (memoryId === undefined) {
@@ -79,12 +132,12 @@ function memoryProvisionsRecall(memoryId) {
79
132
  * The tools this agent auto-provisions regardless of `tools.allowedTools` — the
80
133
  * "always on" set the wizard surfaces so the operator understands they are NOT gated
81
134
  * by the allow-list choice. Today that is `MemoryRecall` when the memory tier enables
82
- * recall (journal/bujo/supermemory). `ReadSkill` (skills configured) and MCP-server
135
+ * recall (lite/journal/bujo/supermemory). `ReadSkill` (skills configured) and MCP-server
83
136
  * tools are also always-on when present, but the basic wizard authors neither, so they
84
137
  * never appear here.
85
138
  */
86
139
  export function alwaysOnTools(answers) {
87
- const tools = [];
140
+ const tools = ["ReadSkill"];
88
141
  if (memoryProvisionsRecall(answers.memory)) {
89
142
  tools.push(MEMORY_RECALL_TOOL);
90
143
  }
@@ -92,7 +145,8 @@ export function alwaysOnTools(answers) {
92
145
  }
93
146
  const BASE_ANSWERS = {
94
147
  model: DEFAULT_MODEL,
95
- fallbackModels: [],
148
+ fallbacks: [],
149
+ routeSafety: "uniform",
96
150
  channels: ["channel:webhook"],
97
151
  // `memory` is intentionally omitted (no memory section) — with
98
152
  // exactOptionalPropertyTypes an optional key must be absent, not `undefined`.
@@ -109,9 +163,53 @@ const BASE_ANSWERS = {
109
163
  * verbatim: `["*"]`, a specific list, or `[]` (the chat-only case).
110
164
  */
111
165
  export function defaultAnswers(overrides) {
112
- const merged = { ...BASE_ANSWERS, ...overrides };
166
+ const { fallbacks: canonicalFallbacks, fallbackModels: legacyFallbackModels, ...otherOverrides } = overrides ?? {};
167
+ const merged = { ...BASE_ANSWERS, ...otherOverrides };
168
+ const fallbacks = canonicalFallbacks !== undefined
169
+ ? canonicalFallbacks.map((fallback) => ({ ...fallback }))
170
+ : (legacyFallbackModels ?? []).map((model) => ({
171
+ model,
172
+ ...(merged.effort === undefined ? {} : { effort: merged.effort }),
173
+ }));
113
174
  const allowedTools = overrides?.allowedTools ?? [ALLOW_ALL_TOOLS];
114
- return { ...merged, allowedTools };
175
+ return {
176
+ ...merged,
177
+ fallbacks,
178
+ // Keep a legacy input visible only when that compatibility surface was
179
+ // actually used. New wizard/canonical callers carry structured routes only.
180
+ ...(legacyFallbackModels === undefined
181
+ ? {}
182
+ : { fallbackModels: [...legacyFallbackModels] }),
183
+ allowedTools,
184
+ };
185
+ }
186
+ /** Canonicalize old answer objects at the single composition boundary. */
187
+ export function effectiveFallbacks(answers) {
188
+ const canonical = answers.fallbacks ?? [];
189
+ if (canonical.length > 0 || (answers.fallbackModels?.length ?? 0) === 0) {
190
+ return canonical;
191
+ }
192
+ return (answers.fallbackModels ?? []).map((model) => ({
193
+ model,
194
+ ...(answers.effort === undefined ? {} : { effort: answers.effort }),
195
+ }));
196
+ }
197
+ /** Folder basenames become readable public identities without affecting paths. */
198
+ export function humanizeAgentName(dirBasename) {
199
+ const words = dirBasename
200
+ .trim()
201
+ .replace(/[-_]+/gu, " ")
202
+ .replace(/\s+/gu, " ")
203
+ .split(" ")
204
+ .filter(Boolean);
205
+ const name = words
206
+ .map((word) => {
207
+ const [first = "", ...rest] = Array.from(word);
208
+ return `${first.toLocaleUpperCase()}${rest.join("")}`;
209
+ })
210
+ .join(" ");
211
+ const fallback = name.length > 0 ? name : "Mono Agent";
212
+ return Array.from(fallback).slice(0, MAX_AGENT_NAME_LENGTH).join("").trimEnd();
115
213
  }
116
214
  /** Overrides for one module: the shared model plus its non-secret input values. */
117
215
  export function moduleOverrides(module, answers) {
@@ -167,10 +265,12 @@ function applyFragment(config, fragment) {
167
265
  */
168
266
  export function composeWizardPlan(answers, ctx) {
169
267
  const modules = selectedModules(answers);
268
+ const agentName = answers.name?.trim() || humanizeAgentName(ctx.dirBasename);
269
+ const fallbacks = effectiveFallbacks(answers);
170
270
  const config = {
171
- ...baseConfig(ctx, answers.model, answers.fallbackModels, answers.effort),
271
+ ...baseConfig(ctx, agentName, answers.model, fallbacks, answers.routeSafety, answers.effort),
172
272
  };
173
- const files = [];
273
+ const files = [...managedProjectSkillFiles()];
174
274
  const secrets = [];
175
275
  const envLines = [];
176
276
  const validateExpectations = [{ sectionId: "runtime", mustBe: "ok" }];
@@ -188,12 +288,13 @@ export function composeWizardPlan(answers, ctx) {
188
288
  files.push(file);
189
289
  }
190
290
  for (const input of module.inputs) {
191
- if (input.secret === true && input.envVar !== undefined) {
291
+ if (input.secret === true) {
192
292
  secrets.push({
193
293
  moduleId: module.id,
194
294
  label: input.label,
195
295
  envVar: input.envVar,
196
296
  description: input.description,
297
+ required: input.required === true,
197
298
  });
198
299
  }
199
300
  }
@@ -206,6 +307,7 @@ export function composeWizardPlan(answers, ctx) {
206
307
  allowedTools: [...answers.allowedTools],
207
308
  disallowedTools: [],
208
309
  };
310
+ applyDefaultA2AAgentName(config, agentName);
209
311
  // The local-ollama endpoint mirrors the old recipe: only when the ollama
210
312
  // provider is present AND memory embeddings actually target ollama.
211
313
  const memory = config.memory;
@@ -218,15 +320,42 @@ export function composeWizardPlan(answers, ctx) {
218
320
  const configJson = monoAgentConfigWithSchema(config);
219
321
  const envExample = envLines.length > 0 ? `${envLines.join("\n")}\n` : undefined;
220
322
  const warnings = answers.allowedTools.length === 0 ? [ZERO_TOOLS_WARNING] : [];
221
- return {
323
+ const planWithoutExpectations = {
222
324
  configJson,
223
325
  ...(envExample === undefined ? {} : { envExample }),
224
326
  files,
225
327
  secrets,
226
328
  selectedModules: modules,
227
- validateExpectations: dedupeExpectations(validateExpectations),
329
+ validateExpectations: [],
228
330
  warnings,
229
331
  };
332
+ if (referencedSetupModelRefs(planWithoutExpectations).some(modelRefNeedsCredentials)) {
333
+ validateExpectations.push({
334
+ sectionId: "credentials",
335
+ mustBe: "ok",
336
+ note: "Authenticate every configured cloud model before describing the agent as ready.",
337
+ });
338
+ }
339
+ return {
340
+ ...planWithoutExpectations,
341
+ validateExpectations: dedupeExpectations(validateExpectations),
342
+ };
343
+ }
344
+ /** Use the public identity for generated A2A metadata without changing explicit user config. */
345
+ function applyDefaultA2AAgentName(config, agentName) {
346
+ const channels = config.channels;
347
+ for (const plugin of channels?.plugins ?? []) {
348
+ if (typeof plugin !== "object" || plugin === null)
349
+ continue;
350
+ const entry = plugin;
351
+ if (entry.package !== "@mono-agent/a2a-adapter" || typeof entry.config !== "object" || entry.config === null)
352
+ continue;
353
+ const pluginConfig = entry.config;
354
+ const agent = typeof pluginConfig.agent === "object" && pluginConfig.agent !== null
355
+ ? pluginConfig.agent
356
+ : {};
357
+ pluginConfig.agent = { ...agent, name: agentName };
358
+ }
230
359
  }
231
360
  /** Dedupe validate expectations by `sectionId`, keeping the first occurrence. */
232
361
  function dedupeExpectations(expectations) {