@mono-agent/agent-app 0.15.2 → 0.15.3

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 (41) hide show
  1. package/dist/broadcast-recorder.d.ts +27 -0
  2. package/dist/broadcast-recorder.d.ts.map +1 -0
  3. package/dist/broadcast-recorder.js +104 -0
  4. package/dist/broadcast-recorder.js.map +1 -0
  5. package/dist/channel-drivers/live.d.ts +12 -0
  6. package/dist/channel-drivers/live.d.ts.map +1 -0
  7. package/dist/channel-drivers/live.js +48 -0
  8. package/dist/channel-drivers/live.js.map +1 -0
  9. package/dist/notify-runtime.d.ts +26 -0
  10. package/dist/notify-runtime.d.ts.map +1 -0
  11. package/dist/notify-runtime.js +27 -0
  12. package/dist/notify-runtime.js.map +1 -0
  13. package/dist/notify-tool.d.ts +51 -0
  14. package/dist/notify-tool.d.ts.map +1 -0
  15. package/dist/notify-tool.js +182 -0
  16. package/dist/notify-tool.js.map +1 -0
  17. package/dist/recipes/base.d.ts +15 -0
  18. package/dist/recipes/base.d.ts.map +1 -0
  19. package/dist/recipes/base.js +51 -0
  20. package/dist/recipes/base.js.map +1 -0
  21. package/dist/recipes/catalog.d.ts +4 -0
  22. package/dist/recipes/catalog.d.ts.map +1 -0
  23. package/dist/recipes/catalog.js +525 -0
  24. package/dist/recipes/catalog.js.map +1 -0
  25. package/dist/recipes/index.d.ts +11 -0
  26. package/dist/recipes/index.d.ts.map +1 -0
  27. package/dist/recipes/index.js +14 -0
  28. package/dist/recipes/index.js.map +1 -0
  29. package/dist/recipes/types.d.ts +70 -0
  30. package/dist/recipes/types.d.ts.map +1 -0
  31. package/dist/recipes/types.js +15 -0
  32. package/dist/recipes/types.js.map +1 -0
  33. package/dist/sessions-command.d.ts +53 -0
  34. package/dist/sessions-command.d.ts.map +1 -0
  35. package/dist/sessions-command.js +309 -0
  36. package/dist/sessions-command.js.map +1 -0
  37. package/dist/setup.d.ts +29 -0
  38. package/dist/setup.d.ts.map +1 -0
  39. package/dist/setup.js +97 -0
  40. package/dist/setup.js.map +1 -0
  41. package/package.json +15 -15
@@ -0,0 +1,15 @@
1
+ /** Resolve declared input defaults, then layer CLI overrides on top. */
2
+ export function resolveRecipeInputs(recipe, overrides = {}) {
3
+ const values = {};
4
+ for (const input of recipe.inputs) {
5
+ values[input.id] = overrides[input.id] ?? input.default;
6
+ }
7
+ // Preserve overrides that don't correspond to a declared input (forward-compat).
8
+ for (const [key, value] of Object.entries(overrides)) {
9
+ if (!(key in values)) {
10
+ values[key] = value;
11
+ }
12
+ }
13
+ return values;
14
+ }
15
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/recipes/types.ts"],"names":[],"mappings":"AA0EA,wEAAwE;AACxE,MAAM,UAAU,mBAAmB,CACjC,MAAmB,EACnB,YAA+B,EAAE;IAEjC,MAAM,MAAM,GAAuC,EAAE,CAAC;IACtD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC;IAC1D,CAAC;IACD,iFAAiF;IACjF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACrD,IAAI,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC;YACrB,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { startSessionWebServer } from "@mono-agent/session-web";
2
+ import type { SessionWebServerHandle } from "@mono-agent/session-web";
3
+ export declare const DEFAULT_SESSIONS_PORT = 4599;
4
+ export interface RunSessionsOptions {
5
+ readonly configPath: string;
6
+ readonly cwd: string;
7
+ readonly env: Record<string, string | undefined>;
8
+ /** --host: bind address (default 127.0.0.1). */
9
+ readonly host?: string;
10
+ /** --port: bind port (default 4599). */
11
+ readonly port?: number;
12
+ /** --no-open: suppress the browser launch (default: open). */
13
+ readonly open?: boolean;
14
+ /** --allow-non-loopback: bind a non-loopback host (refused by default). */
15
+ readonly allowNonLoopback?: boolean;
16
+ /** --show-auth-url: reveal a configured token only in an interactive terminal. */
17
+ readonly showAuthUrl?: boolean;
18
+ /** --include-memory: show memory-maintenance runs in the web operator surface. */
19
+ readonly includeMemory?: boolean;
20
+ /**
21
+ * --max-runs: per-instance cap on the in-memory live-fold working set (and the
22
+ * initial snapshot size). Disk paging remains the full history source, so this
23
+ * only bounds memory; it does not limit how far "Load older" can reach.
24
+ */
25
+ readonly maxRunsPerInstance?: number;
26
+ }
27
+ /** Test seams: server boot, browser open, and the shutdown wait are injectable. */
28
+ export interface RunSessionsDeps {
29
+ readonly startServer?: typeof startSessionWebServer;
30
+ readonly openUrl?: (url: string) => void;
31
+ readonly waitForShutdown?: () => Promise<void>;
32
+ readonly onReady?: (handle: SessionWebServerHandle) => void;
33
+ readonly stdout?: {
34
+ write(text: string): void;
35
+ };
36
+ readonly stderr?: {
37
+ write(text: string): void;
38
+ };
39
+ readonly interactive?: boolean;
40
+ readonly discoverNetworkAddresses?: () => readonly WebNetworkAddress[];
41
+ }
42
+ export interface WebNetworkAddress {
43
+ readonly address: string;
44
+ readonly kind: "lan" | "tailscale";
45
+ }
46
+ /**
47
+ * `mono-agent sessions`: discover every running agent on this machine (trace-source
48
+ * registry, the same mechanism as `mono-agent tui`) and serve the read-only
49
+ * Session Recorder PWA that visualises their runs live. Unlike `tui`, it shows
50
+ * ALL instances at once and needs no TTY — it runs until interrupted.
51
+ */
52
+ export declare function runSessions(options: RunSessionsOptions, deps?: RunSessionsDeps): Promise<number>;
53
+ //# sourceMappingURL=sessions-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions-command.d.ts","sourceRoot":"","sources":["../src/sessions-command.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAYtE,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAG1C,MAAM,WAAW,kBAAkB;IACjC,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,gDAAgD;IAChD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,wCAAwC;IACxC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,8DAA8D;IAC9D,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,2EAA2E;IAC3E,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IACpC,kFAAkF;IAClF,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,kFAAkF;IAClF,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CACtC;AAED,mFAAmF;AACnF,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,qBAAqB,CAAC;IACpD,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,sBAAsB,KAAK,IAAI,CAAC;IAC5D,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,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,wBAAwB,CAAC,EAAE,MAAM,SAAS,iBAAiB,EAAE,CAAC;CACxE;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,WAAW,CAAC;CACpC;AAOD;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,EAAE,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAkF1G"}
@@ -0,0 +1,309 @@
1
+ import { networkInterfaces } from "node:os";
2
+ import { resolve } from "node:path";
3
+ import { pruneTraceSources } from "@mono-agent/observability";
4
+ import { startSessionWebServer } from "@mono-agent/session-web";
5
+ import { generateBearerToken, hostForUrl, isLoopbackHost, isWildcardHost, normalizeHostForBind, normalizeOptionalString, } from "@mono-agent/agent-contracts";
6
+ import { resolveAppTraceRegistryDir, resolveGlobalTraceRegistryDir } from "./app-config.js";
7
+ export const DEFAULT_SESSIONS_PORT = 4599;
8
+ const WEB_AUTH_TOKEN_ENV = "MONO_AGENT_WEB_AUTH_TOKEN";
9
+ /**
10
+ * `mono-agent sessions`: discover every running agent on this machine (trace-source
11
+ * registry, the same mechanism as `mono-agent tui`) and serve the read-only
12
+ * Session Recorder PWA that visualises their runs live. Unlike `tui`, it shows
13
+ * ALL instances at once and needs no TTY — it runs until interrupted.
14
+ */
15
+ export async function runSessions(options, deps = {}) {
16
+ const stdout = deps.stdout ?? process.stdout;
17
+ const stderr = deps.stderr ?? process.stderr;
18
+ const configuredRegistryDir = await resolveAppTraceRegistryDir({
19
+ env: options.env,
20
+ cwd: options.cwd,
21
+ configPath: options.configPath,
22
+ });
23
+ const globalRegistryDir = resolveGlobalTraceRegistryDir(options.env);
24
+ const registryDirs = dedupePaths([configuredRegistryDir, globalRegistryDir]);
25
+ await Promise.all(registryDirs.map((registryDir) => pruneTraceSources({ registryDir })));
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;
35
+ const port = options.port ?? DEFAULT_SESSIONS_PORT;
36
+ const startServer = deps.startServer ?? startSessionWebServer;
37
+ let handle;
38
+ try {
39
+ handle = await startServer({
40
+ registryDirs,
41
+ env: options.env,
42
+ ...(options.host === undefined ? {} : { host: options.host }),
43
+ port,
44
+ ...(options.allowNonLoopback === undefined ? {} : { allowNonLoopback: options.allowNonLoopback }),
45
+ ...(authToken === undefined ? {} : { authToken }),
46
+ ...(options.includeMemory === undefined ? {} : { includeMemory: options.includeMemory }),
47
+ ...(options.maxRunsPerInstance === undefined ? {} : { maxRunsPerInstance: options.maxRunsPerInstance }),
48
+ });
49
+ }
50
+ catch (error) {
51
+ stderr.write(`mono-agent sessions failed to start: ${error instanceof Error ? error.message : String(error)}\n`);
52
+ return 1;
53
+ }
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
+ }
72
+ stdout.write(`Watching ${registryDirs.length} registr${registryDirs.length === 1 ? "y" : "ies"} for agents. Press Ctrl-C to stop.\n`);
73
+ stdout.write(`${reverseProxyHint(primaryUrl)}\n`);
74
+ stdout.write(`${reachabilityHint(handle.url, handle.boundAddress)}\n`);
75
+ if ((options.open ?? true) && authToken === undefined) {
76
+ try {
77
+ (deps.openUrl ?? openInBrowser)(primaryUrl);
78
+ }
79
+ catch {
80
+ // Best-effort: a headless host without a browser is fine — the URL is printed.
81
+ }
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
+ }
86
+ deps.onReady?.(handle);
87
+ await (deps.waitForShutdown ?? waitForSignal)();
88
+ await handle.stop();
89
+ stdout.write("mono-agent sessions stopped.\n");
90
+ return 0;
91
+ }
92
+ /**
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.
95
+ */
96
+ function reachabilityHint(url, boundAddress) {
97
+ let port = "";
98
+ let host = "";
99
+ try {
100
+ const parsed = new URL(url);
101
+ port = parsed.port;
102
+ host = parsed.hostname;
103
+ }
104
+ catch {
105
+ /* leave blank */
106
+ }
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.";
110
+ }
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>"}).`;
112
+ }
113
+ function reverseProxyHint(url) {
114
+ let target = url;
115
+ try {
116
+ const parsed = new URL(url);
117
+ parsed.username = "";
118
+ parsed.password = "";
119
+ parsed.search = "";
120
+ parsed.hash = "";
121
+ target = parsed.toString();
122
+ }
123
+ catch {
124
+ /* use the original URL */
125
+ }
126
+ return `Reverse proxies should target ${target} (default port ${DEFAULT_SESSIONS_PORT}; override with --port).`;
127
+ }
128
+ function requiresServerAuth(host) {
129
+ return host !== undefined && !isLoopbackHost(host);
130
+ }
131
+ function withAuthToken(url, token) {
132
+ const parsed = new URL(url);
133
+ const fragment = new URLSearchParams(parsed.hash.startsWith("#") ? parsed.hash.slice(1) : parsed.hash);
134
+ fragment.set("token", token);
135
+ parsed.hash = fragment.toString();
136
+ return parsed.toString();
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 sessions → ${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
+ }
265
+ /** Resolve + dedupe registry dirs, preserving precedence order. */
266
+ function dedupePaths(dirs) {
267
+ const seen = new Set();
268
+ const out = [];
269
+ for (const dir of dirs) {
270
+ const resolved = resolve(dir);
271
+ if (!seen.has(resolved)) {
272
+ seen.add(resolved);
273
+ out.push(resolved);
274
+ }
275
+ }
276
+ return out;
277
+ }
278
+ /** Resolve once SIGINT/SIGTERM arrives — the foreground command's stop signal. */
279
+ function waitForSignal() {
280
+ return new Promise((resolvePromise) => {
281
+ const onSignal = () => {
282
+ process.off("SIGINT", onSignal);
283
+ process.off("SIGTERM", onSignal);
284
+ resolvePromise();
285
+ };
286
+ process.once("SIGINT", onSignal);
287
+ process.once("SIGTERM", onSignal);
288
+ });
289
+ }
290
+ /** Best-effort OS browser launch. Never throws into the caller's happy path. */
291
+ function openInBrowser(url) {
292
+ void (async () => {
293
+ try {
294
+ const { spawn } = await import("node:child_process");
295
+ const platform = process.platform;
296
+ const command = platform === "darwin" ? "open" : platform === "win32" ? "cmd" : "xdg-open";
297
+ const args = platform === "win32" ? ["/c", "start", "", url] : [url];
298
+ const child = spawn(command, args, { stdio: "ignore", detached: true });
299
+ child.on("error", () => {
300
+ /* no browser available — the URL was printed */
301
+ });
302
+ child.unref();
303
+ }
304
+ catch {
305
+ /* ignore */
306
+ }
307
+ })();
308
+ }
309
+ //# sourceMappingURL=sessions-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions-command.js","sourceRoot":"","sources":["../src/sessions-command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { WithChannel } from "./init.js";
2
+ import type { AgentRecipe, RecipeInputValues } from "./recipes/index.js";
3
+ export interface SetupPromptSource {
4
+ question(prompt: string): Promise<string>;
5
+ }
6
+ export interface SecretChecklistItem {
7
+ readonly id: string;
8
+ readonly label: string;
9
+ readonly description: string;
10
+ readonly envVar?: string;
11
+ }
12
+ export interface CollectSetupOptions {
13
+ readonly prompt: SetupPromptSource;
14
+ readonly recipe?: AgentRecipe;
15
+ readonly model?: string;
16
+ readonly fallbackModels?: readonly string[];
17
+ readonly withChannels?: readonly WithChannel[];
18
+ readonly recipes?: readonly AgentRecipe[];
19
+ }
20
+ export interface CollectedSetupOptions {
21
+ readonly recipe: AgentRecipe;
22
+ readonly recipeInputs: RecipeInputValues;
23
+ readonly fallbackModels: readonly string[];
24
+ readonly withChannels: readonly WithChannel[];
25
+ readonly secrets: readonly SecretChecklistItem[];
26
+ }
27
+ export declare function collectSetupOptions(options: CollectSetupOptions): Promise<CollectedSetupOptions>;
28
+ export declare function renderSetupRecipeMenu(recipes?: readonly AgentRecipe[]): string;
29
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAe,MAAM,oBAAoB,CAAC;AAEtF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IAC/C,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;CAC3C;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;IACzC,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,YAAY,EAAE,SAAS,WAAW,EAAE,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE,SAAS,mBAAmB,EAAE,CAAC;CAClD;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAwBtG;AAED,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,SAAS,WAAW,EAAmB,GAAG,MAAM,CAO9F"}
package/dist/setup.js ADDED
@@ -0,0 +1,97 @@
1
+ import { WITH_CHANNELS } from "./init.js";
2
+ import { RECIPE_CATALOG } from "./recipes/index.js";
3
+ export async function collectSetupOptions(options) {
4
+ const recipes = options.recipes ?? RECIPE_CATALOG;
5
+ const recipe = options.recipe ?? await promptForRecipe(options.prompt, recipes);
6
+ const recipeInputs = {};
7
+ const secrets = [];
8
+ for (const input of recipe.inputs) {
9
+ if (input.secret === true) {
10
+ secrets.push(secretChecklistItem(input));
11
+ continue;
12
+ }
13
+ const defaultValue = input.id === "model" && options.model !== undefined ? options.model : input.default;
14
+ const answer = await options.prompt.question(inputPrompt(input, defaultValue));
15
+ const value = answer.trim();
16
+ if (value.length > 0) {
17
+ recipeInputs[input.id] = value;
18
+ }
19
+ else if (defaultValue !== undefined) {
20
+ recipeInputs[input.id] = defaultValue;
21
+ }
22
+ }
23
+ const fallbackModels = await promptForFallbackModels(options.prompt, options.fallbackModels ?? []);
24
+ const withChannels = await promptForWithChannels(options.prompt, options.withChannels ?? []);
25
+ return { recipe, recipeInputs, fallbackModels, withChannels, secrets };
26
+ }
27
+ export function renderSetupRecipeMenu(recipes = RECIPE_CATALOG) {
28
+ return recipes
29
+ .map((recipe, index) => {
30
+ const tags = recipe.tags.length === 0 ? "" : ` (${recipe.tags.join(", ")})`;
31
+ return `${index + 1}. ${recipe.id} [risk: ${recipe.riskLevel}] - ${recipe.title}${tags}`;
32
+ })
33
+ .join("\n");
34
+ }
35
+ function inputPrompt(input, defaultValue) {
36
+ const suffix = defaultValue === undefined ? "" : ` [${defaultValue}]`;
37
+ return `${input.label}${suffix}\n${input.description}\n> `;
38
+ }
39
+ function secretChecklistItem(input) {
40
+ return {
41
+ id: input.id,
42
+ label: input.label,
43
+ description: input.description,
44
+ ...(input.envVar === undefined ? {} : { envVar: input.envVar }),
45
+ };
46
+ }
47
+ async function promptForRecipe(prompt, recipes) {
48
+ if (recipes.length === 0) {
49
+ throw new Error("No setup recipes are available.");
50
+ }
51
+ for (;;) {
52
+ const answer = await prompt.question(`Choose a recipe:\n${renderSetupRecipeMenu(recipes)}\nRecipe [1]: `);
53
+ const selected = parseRecipeChoice(answer, recipes);
54
+ if (selected !== undefined) {
55
+ return selected;
56
+ }
57
+ }
58
+ }
59
+ function parseRecipeChoice(answer, recipes) {
60
+ const value = answer.trim();
61
+ if (value.length === 0) {
62
+ return recipes[0];
63
+ }
64
+ const index = Number(value);
65
+ if (Number.isInteger(index) && index >= 1 && index <= recipes.length) {
66
+ return recipes[index - 1];
67
+ }
68
+ return recipes.find((recipe) => recipe.id === value);
69
+ }
70
+ async function promptForWithChannels(prompt, defaults) {
71
+ const defaultText = defaults.length === 0 ? "none" : defaults.join(",");
72
+ for (;;) {
73
+ const answer = await prompt.question(`Enable add-on channels (${WITH_CHANNELS.join(", ")}) [${defaultText}]: `);
74
+ const raw = answer.trim();
75
+ if (raw.length === 0) {
76
+ return defaults;
77
+ }
78
+ const parsed = raw.split(",").map((entry) => entry.trim()).filter((entry) => entry.length > 0);
79
+ const invalid = parsed.filter((entry) => !WITH_CHANNELS.includes(entry));
80
+ if (invalid.length === 0) {
81
+ return parsed;
82
+ }
83
+ }
84
+ }
85
+ async function promptForFallbackModels(prompt, defaults) {
86
+ const defaultText = defaults.length === 0 ? "none" : defaults.join(",");
87
+ const answer = await prompt.question(`Fallback models, comma-separated [${defaultText}]: `);
88
+ const raw = answer.trim();
89
+ if (raw.length === 0) {
90
+ return defaults;
91
+ }
92
+ if (raw.toLowerCase() === "none") {
93
+ return [];
94
+ }
95
+ return raw.split(",").map((entry) => entry.trim()).filter((entry) => entry.length > 0);
96
+ }
97
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mono-agent/agent-app",
3
- "version": "0.15.2",
3
+ "version": "0.15.3",
4
4
  "description": "Config-first mono-agent host: builds a responder and starts every configured communication channel and traceability from one mono-agent.config.json.",
5
5
  "type": "module",
6
6
  "license": "GPL-3.0-only",
@@ -37,20 +37,20 @@
37
37
  "@clack/prompts": "^1.7.0",
38
38
  "@earendil-works/pi-ai": "0.80.6",
39
39
  "@modelcontextprotocol/sdk": "^1.29.0",
40
- "@mono-agent/agent-contracts": "0.15.2",
41
- "@mono-agent/agent-harness": "0.15.2",
42
- "@mono-agent/config": "0.15.2",
43
- "@mono-agent/cron-adapter": "0.15.2",
44
- "@mono-agent/operator-adapter": "0.15.2",
45
- "@mono-agent/memory": "0.15.2",
46
- "@mono-agent/observability": "0.15.2",
47
- "@mono-agent/openai-api-adapter": "0.15.2",
48
- "@mono-agent/runtime-adapter": "0.15.2",
49
- "@mono-agent/slack-adapter": "0.15.2",
50
- "@mono-agent/telegram-adapter": "0.15.2",
51
- "@mono-agent/tui": "0.15.2",
52
- "@mono-agent/web": "0.15.2",
53
- "@mono-agent/webhook-adapter": "0.15.2",
40
+ "@mono-agent/agent-contracts": "0.15.3",
41
+ "@mono-agent/agent-harness": "0.15.3",
42
+ "@mono-agent/config": "0.15.3",
43
+ "@mono-agent/cron-adapter": "0.15.3",
44
+ "@mono-agent/operator-adapter": "0.15.3",
45
+ "@mono-agent/memory": "0.15.3",
46
+ "@mono-agent/observability": "0.15.3",
47
+ "@mono-agent/openai-api-adapter": "0.15.3",
48
+ "@mono-agent/runtime-adapter": "0.15.3",
49
+ "@mono-agent/slack-adapter": "0.15.3",
50
+ "@mono-agent/telegram-adapter": "0.15.3",
51
+ "@mono-agent/tui": "0.15.3",
52
+ "@mono-agent/web": "0.15.3",
53
+ "@mono-agent/webhook-adapter": "0.15.3",
54
54
  "undici": "8.7.0",
55
55
  "zod": "^4.4.3"
56
56
  },