@mono-agent/agent-app 0.6.2 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +259 -19
- package/dist/account-home.d.ts +6 -0
- package/dist/account-home.d.ts.map +1 -0
- package/dist/account-home.js +9 -0
- package/dist/account-home.js.map +1 -0
- package/dist/adapter-send-proxy.d.ts +18 -0
- package/dist/adapter-send-proxy.d.ts.map +1 -0
- package/dist/adapter-send-proxy.js +229 -0
- package/dist/adapter-send-proxy.js.map +1 -0
- package/dist/adapter-send-tools-main.js +62 -4
- package/dist/adapter-send-tools-main.js.map +1 -1
- package/dist/adapter-send-tools.d.ts +33 -6
- package/dist/adapter-send-tools.d.ts.map +1 -1
- package/dist/adapter-send-tools.js +485 -87
- package/dist/adapter-send-tools.js.map +1 -1
- package/dist/app-config.d.ts +3 -1
- package/dist/app-config.d.ts.map +1 -1
- package/dist/app-config.js +16 -5
- package/dist/app-config.js.map +1 -1
- package/dist/app.d.ts +27 -0
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +761 -147
- package/dist/app.js.map +1 -1
- package/dist/background-environment.d.ts +16 -0
- package/dist/background-environment.d.ts.map +1 -0
- package/dist/background-environment.js +68 -0
- package/dist/background-environment.js.map +1 -0
- package/dist/background-runtime.d.ts +62 -0
- package/dist/background-runtime.d.ts.map +1 -0
- package/dist/background-runtime.js +1115 -0
- package/dist/background-runtime.js.map +1 -0
- package/dist/background-snapshot-key.d.ts +13 -0
- package/dist/background-snapshot-key.d.ts.map +1 -0
- package/dist/background-snapshot-key.js +194 -0
- package/dist/background-snapshot-key.js.map +1 -0
- package/dist/background-snapshot.d.ts +96 -0
- package/dist/background-snapshot.d.ts.map +1 -0
- package/dist/background-snapshot.js +450 -0
- package/dist/background-snapshot.js.map +1 -0
- package/dist/background-worker-lease.d.ts +39 -0
- package/dist/background-worker-lease.d.ts.map +1 -0
- package/dist/background-worker-lease.js +356 -0
- package/dist/background-worker-lease.js.map +1 -0
- package/dist/background.d.ts +74 -2
- package/dist/background.d.ts.map +1 -1
- package/dist/background.js +815 -73
- package/dist/background.js.map +1 -1
- package/dist/broadcast-recorder.d.ts.map +1 -1
- package/dist/broadcast-recorder.js +24 -2
- package/dist/broadcast-recorder.js.map +1 -1
- package/dist/channel-plugins.d.ts +2 -0
- package/dist/channel-plugins.d.ts.map +1 -1
- package/dist/channel-plugins.js +8 -0
- package/dist/channel-plugins.js.map +1 -1
- package/dist/channels.d.ts +10 -0
- package/dist/channels.d.ts.map +1 -1
- package/dist/channels.js +87 -9
- package/dist/channels.js.map +1 -1
- package/dist/cli.d.ts +86 -4
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +2421 -143
- package/dist/cli.js.map +1 -1
- package/dist/config-reference.d.ts.map +1 -1
- package/dist/config-reference.js +448 -6
- package/dist/config-reference.js.map +1 -1
- package/dist/configuration-proposal-main.d.ts +3 -0
- package/dist/configuration-proposal-main.d.ts.map +1 -0
- package/dist/configuration-proposal-main.js +13 -0
- package/dist/configuration-proposal-main.js.map +1 -0
- package/dist/configuration-proposal-tool.d.ts +33 -0
- package/dist/configuration-proposal-tool.d.ts.map +1 -0
- package/dist/configuration-proposal-tool.js +188 -0
- package/dist/configuration-proposal-tool.js.map +1 -0
- package/dist/configured-agent.d.ts +16 -0
- package/dist/configured-agent.d.ts.map +1 -1
- package/dist/configured-agent.js +165 -18
- package/dist/configured-agent.js.map +1 -1
- package/dist/consumer-contract.d.ts +3 -0
- package/dist/consumer-contract.d.ts.map +1 -1
- package/dist/consumer-contract.js +44 -1
- package/dist/consumer-contract.js.map +1 -1
- package/dist/continuation-command.d.ts +15 -0
- package/dist/continuation-command.d.ts.map +1 -0
- package/dist/continuation-command.js +170 -0
- package/dist/continuation-command.js.map +1 -0
- package/dist/continuation-config.d.ts +25 -0
- package/dist/continuation-config.d.ts.map +1 -0
- package/dist/continuation-config.js +236 -0
- package/dist/continuation-config.js.map +1 -0
- package/dist/continuation-service.d.ts +99 -0
- package/dist/continuation-service.d.ts.map +1 -0
- package/dist/continuation-service.js +1313 -0
- package/dist/continuation-service.js.map +1 -0
- package/dist/continuation-store.d.ts +104 -0
- package/dist/continuation-store.d.ts.map +1 -0
- package/dist/continuation-store.js +688 -0
- package/dist/continuation-store.js.map +1 -0
- package/dist/continuations.d.ts +167 -0
- package/dist/continuations.d.ts.map +1 -0
- package/dist/continuations.js +71 -0
- package/dist/continuations.js.map +1 -0
- package/dist/doctor.d.ts +29 -5
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +1611 -116
- package/dist/doctor.js.map +1 -1
- package/dist/first-run-managed-memory.d.ts +39 -0
- package/dist/first-run-managed-memory.d.ts.map +1 -0
- package/dist/first-run-managed-memory.js +584 -0
- package/dist/first-run-managed-memory.js.map +1 -0
- package/dist/first-run-readiness.d.ts +111 -0
- package/dist/first-run-readiness.d.ts.map +1 -0
- package/dist/first-run-readiness.js +728 -0
- package/dist/first-run-readiness.js.map +1 -0
- package/dist/index.d.ts +17 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +95 -3
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +1218 -24
- package/dist/init.js.map +1 -1
- package/dist/interaction-bridge.d.ts +25 -1
- package/dist/interaction-bridge.d.ts.map +1 -1
- package/dist/interaction-bridge.js +281 -19
- package/dist/interaction-bridge.js.map +1 -1
- package/dist/launchd.d.ts +16 -6
- package/dist/launchd.d.ts.map +1 -1
- package/dist/launchd.js +30 -15
- package/dist/launchd.js.map +1 -1
- package/dist/local-configuration.d.ts +99 -0
- package/dist/local-configuration.d.ts.map +1 -0
- package/dist/local-configuration.js +1299 -0
- package/dist/local-configuration.js.map +1 -0
- package/dist/managed-runtime-packages.d.ts +9 -0
- package/dist/managed-runtime-packages.d.ts.map +1 -0
- package/dist/managed-runtime-packages.js +56 -0
- package/dist/managed-runtime-packages.js.map +1 -0
- package/dist/memory-command.d.ts +4 -0
- package/dist/memory-command.d.ts.map +1 -1
- package/dist/memory-command.js +751 -27
- package/dist/memory-command.js.map +1 -1
- package/dist/memory-embedding-service.d.ts +33 -0
- package/dist/memory-embedding-service.d.ts.map +1 -0
- package/dist/memory-embedding-service.js +207 -0
- package/dist/memory-embedding-service.js.map +1 -0
- package/dist/memory-recall.d.ts +43 -14
- package/dist/memory-recall.d.ts.map +1 -1
- package/dist/memory-recall.js +103 -33
- package/dist/memory-recall.js.map +1 -1
- package/dist/memory-retrieval.d.ts +66 -0
- package/dist/memory-retrieval.d.ts.map +1 -0
- package/dist/memory-retrieval.js +332 -0
- package/dist/memory-retrieval.js.map +1 -0
- package/dist/modules/base.d.ts +6 -5
- package/dist/modules/base.d.ts.map +1 -1
- package/dist/modules/base.js +11 -7
- package/dist/modules/base.js.map +1 -1
- package/dist/modules/catalog.d.ts.map +1 -1
- package/dist/modules/catalog.js +141 -25
- package/dist/modules/catalog.js.map +1 -1
- package/dist/modules/index.d.ts +2 -2
- package/dist/modules/index.d.ts.map +1 -1
- package/dist/modules/index.js +1 -1
- package/dist/modules/index.js.map +1 -1
- package/dist/modules/known-tools.d.ts +3 -0
- package/dist/modules/known-tools.d.ts.map +1 -1
- package/dist/modules/known-tools.js +11 -1
- package/dist/modules/known-tools.js.map +1 -1
- package/dist/modules/types.d.ts +20 -6
- package/dist/modules/types.d.ts.map +1 -1
- package/dist/modules/types.js.map +1 -1
- package/dist/notify-runtime.d.ts +26 -0
- package/dist/notify-runtime.d.ts.map +1 -0
- package/dist/notify-runtime.js +27 -0
- package/dist/notify-runtime.js.map +1 -0
- package/dist/notify-tool.d.ts +51 -0
- package/dist/notify-tool.d.ts.map +1 -0
- package/dist/notify-tool.js +182 -0
- package/dist/notify-tool.js.map +1 -0
- package/dist/package-version.d.ts +3 -0
- package/dist/package-version.d.ts.map +1 -0
- package/dist/package-version.js +14 -0
- package/dist/package-version.js.map +1 -0
- package/dist/pi-auth-store-inspection.d.ts +21 -0
- package/dist/pi-auth-store-inspection.d.ts.map +1 -0
- package/dist/pi-auth-store-inspection.js +120 -0
- package/dist/pi-auth-store-inspection.js.map +1 -0
- package/dist/pi-oauth-login-main.d.ts +3 -0
- package/dist/pi-oauth-login-main.d.ts.map +1 -0
- package/dist/pi-oauth-login-main.js +14 -0
- package/dist/pi-oauth-login-main.js.map +1 -0
- package/dist/pi-oauth-login.d.ts +22 -0
- package/dist/pi-oauth-login.d.ts.map +1 -0
- package/dist/pi-oauth-login.js +79 -0
- package/dist/pi-oauth-login.js.map +1 -0
- package/dist/proactive-notify.d.ts +2 -0
- package/dist/proactive-notify.d.ts.map +1 -1
- package/dist/proactive-notify.js +1 -0
- package/dist/proactive-notify.js.map +1 -1
- package/dist/process-incarnation.d.ts +23 -0
- package/dist/process-incarnation.d.ts.map +1 -0
- package/dist/process-incarnation.js +208 -0
- package/dist/process-incarnation.js.map +1 -0
- package/dist/project-skills.d.ts +40 -0
- package/dist/project-skills.d.ts.map +1 -0
- package/dist/project-skills.js +573 -0
- package/dist/project-skills.js.map +1 -0
- package/dist/provider-setup.d.ts +117 -2
- package/dist/provider-setup.d.ts.map +1 -1
- package/dist/provider-setup.js +1505 -49
- package/dist/provider-setup.js.map +1 -1
- package/dist/readiness-probe-worker.d.ts +12 -0
- package/dist/readiness-probe-worker.d.ts.map +1 -0
- package/dist/readiness-probe-worker.js +276 -0
- package/dist/readiness-probe-worker.js.map +1 -0
- package/dist/readiness-probe.d.ts +100 -0
- package/dist/readiness-probe.d.ts.map +1 -0
- package/dist/readiness-probe.js +780 -0
- package/dist/readiness-probe.js.map +1 -0
- package/dist/recipes/base.d.ts +15 -0
- package/dist/recipes/base.d.ts.map +1 -0
- package/dist/recipes/base.js +51 -0
- package/dist/recipes/base.js.map +1 -0
- package/dist/recipes/catalog.d.ts +4 -0
- package/dist/recipes/catalog.d.ts.map +1 -0
- package/dist/recipes/catalog.js +525 -0
- package/dist/recipes/catalog.js.map +1 -0
- package/dist/recipes/index.d.ts +11 -0
- package/dist/recipes/index.d.ts.map +1 -0
- package/dist/recipes/index.js +14 -0
- package/dist/recipes/index.js.map +1 -0
- package/dist/recipes/types.d.ts +70 -0
- package/dist/recipes/types.d.ts.map +1 -0
- package/dist/recipes/types.js +15 -0
- package/dist/recipes/types.js.map +1 -0
- package/dist/request-model-override.d.ts +43 -1
- package/dist/request-model-override.d.ts.map +1 -1
- package/dist/request-model-override.js +178 -19
- package/dist/request-model-override.js.map +1 -1
- package/dist/run-history.d.ts +32 -0
- package/dist/run-history.d.ts.map +1 -0
- package/dist/run-history.js +859 -0
- package/dist/run-history.js.map +1 -0
- package/dist/runs-health.d.ts.map +1 -1
- package/dist/runs-health.js +12 -4
- package/dist/runs-health.js.map +1 -1
- package/dist/runtime-option-extensions.d.ts +14 -0
- package/dist/runtime-option-extensions.d.ts.map +1 -0
- package/dist/runtime-option-extensions.js +98 -0
- package/dist/runtime-option-extensions.js.map +1 -0
- package/dist/runtime-routes.d.ts +9 -0
- package/dist/runtime-routes.d.ts.map +1 -0
- package/dist/runtime-routes.js +13 -0
- package/dist/runtime-routes.js.map +1 -0
- package/dist/sandbox-manager.d.ts +86 -0
- package/dist/sandbox-manager.d.ts.map +1 -0
- package/dist/sandbox-manager.js +1402 -0
- package/dist/sandbox-manager.js.map +1 -0
- package/dist/setup.d.ts +29 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +97 -0
- package/dist/setup.js.map +1 -0
- package/dist/supermemory-plugin.d.ts +56 -0
- package/dist/supermemory-plugin.d.ts.map +1 -0
- package/dist/supermemory-plugin.js +142 -0
- package/dist/supermemory-plugin.js.map +1 -0
- package/dist/tui-command.d.ts +56 -0
- package/dist/tui-command.d.ts.map +1 -1
- package/dist/tui-command.js +305 -31
- package/dist/tui-command.js.map +1 -1
- package/dist/web-command.d.ts +8 -0
- package/dist/web-command.d.ts.map +1 -1
- package/dist/web-command.js +174 -17
- package/dist/web-command.js.map +1 -1
- package/dist/wizard/answers.d.ts +31 -4
- package/dist/wizard/answers.d.ts.map +1 -1
- package/dist/wizard/answers.js +141 -29
- package/dist/wizard/answers.js.map +1 -1
- package/dist/wizard/from-flags.d.ts +7 -0
- package/dist/wizard/from-flags.d.ts.map +1 -1
- package/dist/wizard/from-flags.js +36 -2
- package/dist/wizard/from-flags.js.map +1 -1
- package/dist/wizard/index.d.ts +4 -4
- package/dist/wizard/index.d.ts.map +1 -1
- package/dist/wizard/index.js +2 -2
- package/dist/wizard/index.js.map +1 -1
- package/dist/wizard/model-discovery.d.ts +33 -2
- package/dist/wizard/model-discovery.d.ts.map +1 -1
- package/dist/wizard/model-discovery.js +826 -108
- package/dist/wizard/model-discovery.js.map +1 -1
- package/dist/wizard/presets.d.ts +1 -1
- package/dist/wizard/presets.d.ts.map +1 -1
- package/dist/wizard/presets.js +7 -12
- package/dist/wizard/presets.js.map +1 -1
- package/dist/wizard/prompts.d.ts +56 -9
- package/dist/wizard/prompts.d.ts.map +1 -1
- package/dist/wizard/prompts.js +172 -20
- package/dist/wizard/prompts.js.map +1 -1
- package/dist/wizard/run.d.ts +59 -3
- package/dist/wizard/run.d.ts.map +1 -1
- package/dist/wizard/run.js +1290 -191
- package/dist/wizard/run.js.map +1 -1
- package/package.json +21 -16
- package/resources/srt/package-lock.json +66 -0
- package/resources/srt/package.json +9 -0
- package/schema/mono-agent.config.schema.json +587 -20
- package/skills/mono-agent-composer/SKILL.md +6 -6
- package/skills/mono-agent-composer/references/config-blueprint.md +11 -10
- package/skills/mono-agent-composer/references/discovery-questions.md +33 -18
- package/skills/mono-agent-composer/references/feature-coverage.md +14 -12
- package/skills/mono-agent-composer/references/package-map.md +2 -2
- package/skills/mono-agent-composer/references/playbooks.md +8 -7
- package/skills/mono-agent-composer/references/validation.md +3 -3
package/dist/web-command.js
CHANGED
|
@@ -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
|
|
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
|
|
45
|
-
|
|
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(
|
|
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)(
|
|
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
|
|
65
|
-
*
|
|
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
|
-
|
|
81
|
-
|
|
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.
|
|
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.
|
|
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();
|
package/dist/web-command.js.map
CHANGED
|
@@ -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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"}
|
package/dist/wizard/answers.d.ts
CHANGED
|
@@ -1,15 +1,30 @@
|
|
|
1
|
-
import type
|
|
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
|
-
|
|
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 runtime/LLM reference that generic provider setup must account for.
|
|
72
|
+
* Managed-memory embeddings deliberately stay out of this Pi-model-shaped
|
|
73
|
+
* list: the guided wizard and readiness gate use the configured service root
|
|
74
|
+
* and embedding-native discovery/probe contract instead.
|
|
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,
|
|
1
|
+
{"version":3,"file":"answers.d.ts","sourceRoot":"","sources":["../../src/wizard/answers.ts"],"names":[],"mappings":"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"}
|
package/dist/wizard/answers.js
CHANGED
|
@@ -1,7 +1,56 @@
|
|
|
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
|
-
|
|
4
|
-
|
|
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 runtime/LLM reference that generic provider setup must account for.
|
|
7
|
+
* Managed-memory embeddings deliberately stay out of this Pi-model-shaped
|
|
8
|
+
* list: the guided wizard and readiness gate use the configured service root
|
|
9
|
+
* and embedding-native discovery/probe contract instead.
|
|
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
|
+
return refs;
|
|
37
|
+
}
|
|
38
|
+
/** Convert a local memory service into the model-ref shape understood by setup. */
|
|
39
|
+
function localServiceModelRef(provider, model) {
|
|
40
|
+
return typeof model === "string" && model.length > 0 ? `pi:${provider}:${model}` : undefined;
|
|
41
|
+
}
|
|
42
|
+
/** True when a referenced backend requires credentials rather than a local service. */
|
|
43
|
+
function modelRefNeedsCredentials(modelRef) {
|
|
44
|
+
return modelRef.startsWith("codex:")
|
|
45
|
+
|| modelRef.startsWith("claude:")
|
|
46
|
+
|| (modelRef.startsWith("pi:") && !/^pi:(?:ollama|lmstudio):/u.test(modelRef));
|
|
47
|
+
}
|
|
48
|
+
/** Tools ordered canonically: runtime built-ins, app-owned tools, then adapter send tools. */
|
|
49
|
+
const ORDERED_TOOL_NAMES = [
|
|
50
|
+
...BUILTIN_TOOL_NAMES,
|
|
51
|
+
...APP_TOOL_NAMES,
|
|
52
|
+
...ADAPTER_SEND_TOOL_NAMES,
|
|
53
|
+
];
|
|
5
54
|
const ZERO_TOOLS_WARNING = "Zero tools selected — the agent will be chat-only: it cannot read files, run commands, or send proactive messages.";
|
|
6
55
|
/**
|
|
7
56
|
* The module ids selected by these answers, in composer order: auto-derived
|
|
@@ -10,7 +59,7 @@ const ZERO_TOOLS_WARNING = "Zero tools selected — the agent will be chat-only:
|
|
|
10
59
|
*/
|
|
11
60
|
function selectedModuleIds(answers) {
|
|
12
61
|
const ids = [];
|
|
13
|
-
const modelRefs = [answers.model, ...answers.
|
|
62
|
+
const modelRefs = [answers.model, ...effectiveFallbacks(answers).map((fallback) => fallback.model)];
|
|
14
63
|
if (modelRefs.some((model) => /^pi:ollama:/u.test(model))) {
|
|
15
64
|
ids.push("provider:ollama");
|
|
16
65
|
}
|
|
@@ -61,8 +110,8 @@ const MEMORY_RECALL_TOOL = "MemoryRecall";
|
|
|
61
110
|
/**
|
|
62
111
|
* True when the selected memory tier auto-provisions the read-only `MemoryRecall`
|
|
63
112
|
* tool (its fragment sets `memory.recallTool.enabled`). Derived from the catalog so
|
|
64
|
-
* it never drifts from the memory modules themselves — journal/bujo/supermemory
|
|
65
|
-
*
|
|
113
|
+
* it never drifts from the memory modules themselves — lite/journal/bujo/supermemory
|
|
114
|
+
* all do (Lite is FTS-only).
|
|
66
115
|
*/
|
|
67
116
|
function memoryProvisionsRecall(memoryId) {
|
|
68
117
|
if (memoryId === undefined) {
|
|
@@ -79,12 +128,12 @@ function memoryProvisionsRecall(memoryId) {
|
|
|
79
128
|
* The tools this agent auto-provisions regardless of `tools.allowedTools` — the
|
|
80
129
|
* "always on" set the wizard surfaces so the operator understands they are NOT gated
|
|
81
130
|
* 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
|
|
131
|
+
* recall (lite/journal/bujo/supermemory). `ReadSkill` (skills configured) and MCP-server
|
|
83
132
|
* tools are also always-on when present, but the basic wizard authors neither, so they
|
|
84
133
|
* never appear here.
|
|
85
134
|
*/
|
|
86
135
|
export function alwaysOnTools(answers) {
|
|
87
|
-
const tools = [];
|
|
136
|
+
const tools = ["ReadSkill"];
|
|
88
137
|
if (memoryProvisionsRecall(answers.memory)) {
|
|
89
138
|
tools.push(MEMORY_RECALL_TOOL);
|
|
90
139
|
}
|
|
@@ -92,7 +141,8 @@ export function alwaysOnTools(answers) {
|
|
|
92
141
|
}
|
|
93
142
|
const BASE_ANSWERS = {
|
|
94
143
|
model: DEFAULT_MODEL,
|
|
95
|
-
|
|
144
|
+
fallbacks: [],
|
|
145
|
+
routeSafety: "uniform",
|
|
96
146
|
channels: ["channel:webhook"],
|
|
97
147
|
// `memory` is intentionally omitted (no memory section) — with
|
|
98
148
|
// exactOptionalPropertyTypes an optional key must be absent, not `undefined`.
|
|
@@ -109,9 +159,53 @@ const BASE_ANSWERS = {
|
|
|
109
159
|
* verbatim: `["*"]`, a specific list, or `[]` (the chat-only case).
|
|
110
160
|
*/
|
|
111
161
|
export function defaultAnswers(overrides) {
|
|
112
|
-
const
|
|
162
|
+
const { fallbacks: canonicalFallbacks, fallbackModels: legacyFallbackModels, ...otherOverrides } = overrides ?? {};
|
|
163
|
+
const merged = { ...BASE_ANSWERS, ...otherOverrides };
|
|
164
|
+
const fallbacks = canonicalFallbacks !== undefined
|
|
165
|
+
? canonicalFallbacks.map((fallback) => ({ ...fallback }))
|
|
166
|
+
: (legacyFallbackModels ?? []).map((model) => ({
|
|
167
|
+
model,
|
|
168
|
+
...(merged.effort === undefined ? {} : { effort: merged.effort }),
|
|
169
|
+
}));
|
|
113
170
|
const allowedTools = overrides?.allowedTools ?? [ALLOW_ALL_TOOLS];
|
|
114
|
-
return {
|
|
171
|
+
return {
|
|
172
|
+
...merged,
|
|
173
|
+
fallbacks,
|
|
174
|
+
// Keep a legacy input visible only when that compatibility surface was
|
|
175
|
+
// actually used. New wizard/canonical callers carry structured routes only.
|
|
176
|
+
...(legacyFallbackModels === undefined
|
|
177
|
+
? {}
|
|
178
|
+
: { fallbackModels: [...legacyFallbackModels] }),
|
|
179
|
+
allowedTools,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
/** Canonicalize old answer objects at the single composition boundary. */
|
|
183
|
+
export function effectiveFallbacks(answers) {
|
|
184
|
+
const canonical = answers.fallbacks ?? [];
|
|
185
|
+
if (canonical.length > 0 || (answers.fallbackModels?.length ?? 0) === 0) {
|
|
186
|
+
return canonical;
|
|
187
|
+
}
|
|
188
|
+
return (answers.fallbackModels ?? []).map((model) => ({
|
|
189
|
+
model,
|
|
190
|
+
...(answers.effort === undefined ? {} : { effort: answers.effort }),
|
|
191
|
+
}));
|
|
192
|
+
}
|
|
193
|
+
/** Folder basenames become readable public identities without affecting paths. */
|
|
194
|
+
export function humanizeAgentName(dirBasename) {
|
|
195
|
+
const words = dirBasename
|
|
196
|
+
.trim()
|
|
197
|
+
.replace(/[-_]+/gu, " ")
|
|
198
|
+
.replace(/\s+/gu, " ")
|
|
199
|
+
.split(" ")
|
|
200
|
+
.filter(Boolean);
|
|
201
|
+
const name = words
|
|
202
|
+
.map((word) => {
|
|
203
|
+
const [first = "", ...rest] = Array.from(word);
|
|
204
|
+
return `${first.toLocaleUpperCase()}${rest.join("")}`;
|
|
205
|
+
})
|
|
206
|
+
.join(" ");
|
|
207
|
+
const fallback = name.length > 0 ? name : "Mono Agent";
|
|
208
|
+
return Array.from(fallback).slice(0, MAX_AGENT_NAME_LENGTH).join("").trimEnd();
|
|
115
209
|
}
|
|
116
210
|
/** Overrides for one module: the shared model plus its non-secret input values. */
|
|
117
211
|
export function moduleOverrides(module, answers) {
|
|
@@ -167,18 +261,16 @@ function applyFragment(config, fragment) {
|
|
|
167
261
|
*/
|
|
168
262
|
export function composeWizardPlan(answers, ctx) {
|
|
169
263
|
const modules = selectedModules(answers);
|
|
264
|
+
const agentName = answers.name?.trim() || humanizeAgentName(ctx.dirBasename);
|
|
265
|
+
const fallbacks = effectiveFallbacks(answers);
|
|
170
266
|
const config = {
|
|
171
|
-
...baseConfig(ctx, answers.model, answers.
|
|
267
|
+
...baseConfig(ctx, agentName, answers.model, fallbacks, answers.routeSafety, answers.effort),
|
|
172
268
|
};
|
|
173
|
-
const files = [];
|
|
269
|
+
const files = [...managedProjectSkillFiles()];
|
|
174
270
|
const secrets = [];
|
|
175
271
|
const envLines = [];
|
|
176
272
|
const validateExpectations = [{ sectionId: "runtime", mustBe: "ok" }];
|
|
177
|
-
let providerOllamaSelected = false;
|
|
178
273
|
for (const module of modules) {
|
|
179
|
-
if (module.id === "provider:ollama") {
|
|
180
|
-
providerOllamaSelected = true;
|
|
181
|
-
}
|
|
182
274
|
const values = resolveModuleInputs(module, moduleOverrides(module, answers));
|
|
183
275
|
applyFragment(config, module.configFragment(values));
|
|
184
276
|
for (const line of module.envExampleLines?.(values) ?? []) {
|
|
@@ -188,12 +280,13 @@ export function composeWizardPlan(answers, ctx) {
|
|
|
188
280
|
files.push(file);
|
|
189
281
|
}
|
|
190
282
|
for (const input of module.inputs) {
|
|
191
|
-
if (input.secret === true
|
|
283
|
+
if (input.secret === true) {
|
|
192
284
|
secrets.push({
|
|
193
285
|
moduleId: module.id,
|
|
194
286
|
label: input.label,
|
|
195
287
|
envVar: input.envVar,
|
|
196
288
|
description: input.description,
|
|
289
|
+
required: input.required === true,
|
|
197
290
|
});
|
|
198
291
|
}
|
|
199
292
|
}
|
|
@@ -206,27 +299,46 @@ export function composeWizardPlan(answers, ctx) {
|
|
|
206
299
|
allowedTools: [...answers.allowedTools],
|
|
207
300
|
disallowedTools: [],
|
|
208
301
|
};
|
|
209
|
-
|
|
210
|
-
// provider is present AND memory embeddings actually target ollama.
|
|
211
|
-
const memory = config.memory;
|
|
212
|
-
if (providerOllamaSelected && memory?.embeddings !== undefined && memory.embeddings.provider === "ollama") {
|
|
213
|
-
config.memory = {
|
|
214
|
-
...memory,
|
|
215
|
-
embeddings: { ...memory.embeddings, endpoint: "http://localhost:11434" },
|
|
216
|
-
};
|
|
217
|
-
}
|
|
302
|
+
applyDefaultA2AAgentName(config, agentName);
|
|
218
303
|
const configJson = monoAgentConfigWithSchema(config);
|
|
219
304
|
const envExample = envLines.length > 0 ? `${envLines.join("\n")}\n` : undefined;
|
|
220
305
|
const warnings = answers.allowedTools.length === 0 ? [ZERO_TOOLS_WARNING] : [];
|
|
221
|
-
|
|
306
|
+
const planWithoutExpectations = {
|
|
222
307
|
configJson,
|
|
223
308
|
...(envExample === undefined ? {} : { envExample }),
|
|
224
309
|
files,
|
|
225
310
|
secrets,
|
|
226
311
|
selectedModules: modules,
|
|
227
|
-
validateExpectations:
|
|
312
|
+
validateExpectations: [],
|
|
228
313
|
warnings,
|
|
229
314
|
};
|
|
315
|
+
if (referencedSetupModelRefs(planWithoutExpectations).some(modelRefNeedsCredentials)) {
|
|
316
|
+
validateExpectations.push({
|
|
317
|
+
sectionId: "credentials",
|
|
318
|
+
mustBe: "ok",
|
|
319
|
+
note: "Authenticate every configured cloud model before describing the agent as ready.",
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
return {
|
|
323
|
+
...planWithoutExpectations,
|
|
324
|
+
validateExpectations: dedupeExpectations(validateExpectations),
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
/** Use the public identity for generated A2A metadata without changing explicit user config. */
|
|
328
|
+
function applyDefaultA2AAgentName(config, agentName) {
|
|
329
|
+
const channels = config.channels;
|
|
330
|
+
for (const plugin of channels?.plugins ?? []) {
|
|
331
|
+
if (typeof plugin !== "object" || plugin === null)
|
|
332
|
+
continue;
|
|
333
|
+
const entry = plugin;
|
|
334
|
+
if (entry.package !== "@mono-agent/a2a-adapter" || typeof entry.config !== "object" || entry.config === null)
|
|
335
|
+
continue;
|
|
336
|
+
const pluginConfig = entry.config;
|
|
337
|
+
const agent = typeof pluginConfig.agent === "object" && pluginConfig.agent !== null
|
|
338
|
+
? pluginConfig.agent
|
|
339
|
+
: {};
|
|
340
|
+
pluginConfig.agent = { ...agent, name: agentName };
|
|
341
|
+
}
|
|
230
342
|
}
|
|
231
343
|
/** Dedupe validate expectations by `sectionId`, keeping the first occurrence. */
|
|
232
344
|
function dedupeExpectations(expectations) {
|