@wootsup/mcp 0.1.0-rc.9 → 0.3.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/CHANGELOG.md +148 -83
- package/README.md +36 -32
- package/SECURITY.md +15 -6
- package/dist/auth/keychain.d.ts +27 -1
- package/dist/auth/keychain.js +48 -2
- package/dist/auth/keychain.js.map +1 -1
- package/dist/cli-hint.d.ts +22 -0
- package/dist/cli-hint.js +55 -0
- package/dist/cli-hint.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.js +163 -22
- package/dist/index.js.map +1 -1
- package/dist/install-skill.js +1 -1
- package/dist/modules/apimapper/cache.d.ts +2 -2
- package/dist/modules/apimapper/cache.js +119 -29
- package/dist/modules/apimapper/cache.js.map +1 -1
- package/dist/modules/apimapper/client.d.ts +102 -1
- package/dist/modules/apimapper/client.js +631 -297
- package/dist/modules/apimapper/client.js.map +1 -1
- package/dist/modules/apimapper/connections-format.d.ts +51 -0
- package/dist/modules/apimapper/connections-format.js +261 -0
- package/dist/modules/apimapper/connections-format.js.map +1 -0
- package/dist/modules/apimapper/connections-trim.d.ts +82 -0
- package/dist/modules/apimapper/connections-trim.js +224 -0
- package/dist/modules/apimapper/connections-trim.js.map +1 -0
- package/dist/modules/apimapper/connections.d.ts +14 -2
- package/dist/modules/apimapper/connections.js +612 -153
- package/dist/modules/apimapper/connections.js.map +1 -1
- package/dist/modules/apimapper/credential-sanitizer.d.ts +5 -0
- package/dist/modules/apimapper/credential-sanitizer.js +60 -1
- package/dist/modules/apimapper/credential-sanitizer.js.map +1 -1
- package/dist/modules/apimapper/credentials-format.d.ts +21 -0
- package/dist/modules/apimapper/credentials-format.js +145 -0
- package/dist/modules/apimapper/credentials-format.js.map +1 -0
- package/dist/modules/apimapper/credentials.d.ts +12 -2
- package/dist/modules/apimapper/credentials.js +226 -73
- package/dist/modules/apimapper/credentials.js.map +1 -1
- package/dist/modules/apimapper/diagnose.d.ts +54 -2
- package/dist/modules/apimapper/diagnose.js +213 -12
- package/dist/modules/apimapper/diagnose.js.map +1 -1
- package/dist/modules/apimapper/elicitation.d.ts +54 -0
- package/dist/modules/apimapper/elicitation.js +90 -0
- package/dist/modules/apimapper/elicitation.js.map +1 -0
- package/dist/modules/apimapper/flows-format.d.ts +50 -0
- package/dist/modules/apimapper/flows-format.js +318 -0
- package/dist/modules/apimapper/flows-format.js.map +1 -0
- package/dist/modules/apimapper/flows.d.ts +13 -2
- package/dist/modules/apimapper/flows.js +312 -122
- package/dist/modules/apimapper/flows.js.map +1 -1
- package/dist/modules/apimapper/gateway/advanced-tool.d.ts +9 -0
- package/dist/modules/apimapper/gateway/advanced-tool.js +265 -0
- package/dist/modules/apimapper/gateway/advanced-tool.js.map +1 -0
- package/dist/modules/apimapper/gateway/capturing-server.d.ts +81 -0
- package/dist/modules/apimapper/gateway/capturing-server.js +87 -0
- package/dist/modules/apimapper/gateway/capturing-server.js.map +1 -0
- package/dist/modules/apimapper/gateway/essentials.d.ts +4 -0
- package/dist/modules/apimapper/gateway/essentials.js +35 -0
- package/dist/modules/apimapper/gateway/essentials.js.map +1 -0
- package/dist/modules/apimapper/gateway/test-support.d.ts +17 -0
- package/dist/modules/apimapper/gateway/test-support.js +43 -0
- package/dist/modules/apimapper/gateway/test-support.js.map +1 -0
- package/dist/modules/apimapper/get-skill.d.ts +3 -3
- package/dist/modules/apimapper/get-skill.js +47 -7
- package/dist/modules/apimapper/get-skill.js.map +1 -1
- package/dist/modules/apimapper/graph-builder.js +1 -1
- package/dist/modules/apimapper/graph-builder.js.map +1 -1
- package/dist/modules/apimapper/graph.d.ts +2 -2
- package/dist/modules/apimapper/graph.js +170 -35
- package/dist/modules/apimapper/graph.js.map +1 -1
- package/dist/modules/apimapper/index.d.ts +17 -1
- package/dist/modules/apimapper/index.js +68 -17
- package/dist/modules/apimapper/index.js.map +1 -1
- package/dist/modules/apimapper/inspect.d.ts +3 -2
- package/dist/modules/apimapper/inspect.js +97 -13
- package/dist/modules/apimapper/inspect.js.map +1 -1
- package/dist/modules/apimapper/library.d.ts +2 -2
- package/dist/modules/apimapper/library.js +665 -80
- package/dist/modules/apimapper/library.js.map +1 -1
- package/dist/modules/apimapper/license-format.d.ts +22 -0
- package/dist/modules/apimapper/license-format.js +149 -0
- package/dist/modules/apimapper/license-format.js.map +1 -0
- package/dist/modules/apimapper/license.d.ts +16 -2
- package/dist/modules/apimapper/license.js +62 -38
- package/dist/modules/apimapper/license.js.map +1 -1
- package/dist/modules/apimapper/local-sources.d.ts +2 -2
- package/dist/modules/apimapper/local-sources.js +44 -30
- package/dist/modules/apimapper/local-sources.js.map +1 -1
- package/dist/modules/apimapper/misc.d.ts +30 -2
- package/dist/modules/apimapper/misc.js +114 -49
- package/dist/modules/apimapper/misc.js.map +1 -1
- package/dist/modules/apimapper/node-schema.d.ts +52 -0
- package/dist/modules/apimapper/node-schema.js +70 -2
- package/dist/modules/apimapper/node-schema.js.map +1 -1
- package/dist/modules/apimapper/normalizers.d.ts +1 -0
- package/dist/modules/apimapper/normalizers.js +51 -0
- package/dist/modules/apimapper/normalizers.js.map +1 -1
- package/dist/modules/apimapper/onboarding.d.ts +78 -3
- package/dist/modules/apimapper/onboarding.js +428 -26
- package/dist/modules/apimapper/onboarding.js.map +1 -1
- package/dist/modules/apimapper/read-cache.d.ts +31 -2
- package/dist/modules/apimapper/read-cache.js +20 -6
- package/dist/modules/apimapper/read-cache.js.map +1 -1
- package/dist/modules/apimapper/render/_shared.d.ts +24 -0
- package/dist/modules/apimapper/render/_shared.js +84 -0
- package/dist/modules/apimapper/render/_shared.js.map +1 -0
- package/dist/modules/apimapper/render/dag.d.ts +18 -0
- package/dist/modules/apimapper/render/dag.js +70 -0
- package/dist/modules/apimapper/render/dag.js.map +1 -0
- package/dist/modules/apimapper/render/index.d.ts +2 -0
- package/dist/modules/apimapper/render/index.js +112 -0
- package/dist/modules/apimapper/render/index.js.map +1 -0
- package/dist/modules/apimapper/render/renderers/chart-bar.d.ts +2 -0
- package/dist/modules/apimapper/render/renderers/chart-bar.js +70 -0
- package/dist/modules/apimapper/render/renderers/chart-bar.js.map +1 -0
- package/dist/modules/apimapper/render/renderers/chart-line.d.ts +2 -0
- package/dist/modules/apimapper/render/renderers/chart-line.js +71 -0
- package/dist/modules/apimapper/render/renderers/chart-line.js.map +1 -0
- package/dist/modules/apimapper/render/renderers/diff.d.ts +2 -0
- package/dist/modules/apimapper/render/renderers/diff.js +154 -0
- package/dist/modules/apimapper/render/renderers/diff.js.map +1 -0
- package/dist/modules/apimapper/render/renderers/flow-diagram.d.ts +1 -0
- package/dist/modules/apimapper/render/renderers/flow-diagram.js +180 -0
- package/dist/modules/apimapper/render/renderers/flow-diagram.js.map +1 -0
- package/dist/modules/apimapper/render/renderers/json-tree.d.ts +2 -0
- package/dist/modules/apimapper/render/renderers/json-tree.js +87 -0
- package/dist/modules/apimapper/render/renderers/json-tree.js.map +1 -0
- package/dist/modules/apimapper/render/renderers/schema-diagram.d.ts +2 -0
- package/dist/modules/apimapper/render/renderers/schema-diagram.js +83 -0
- package/dist/modules/apimapper/render/renderers/schema-diagram.js.map +1 -0
- package/dist/modules/apimapper/render/renderers/table.d.ts +2 -0
- package/dist/modules/apimapper/render/renderers/table.js +75 -0
- package/dist/modules/apimapper/render/renderers/table.js.map +1 -0
- package/dist/modules/apimapper/render/schemas.d.ts +23 -0
- package/dist/modules/apimapper/render/schemas.js +56 -0
- package/dist/modules/apimapper/render/schemas.js.map +1 -0
- package/dist/modules/apimapper/render/secret-masking.d.ts +5 -0
- package/dist/modules/apimapper/render/secret-masking.js +51 -0
- package/dist/modules/apimapper/render/secret-masking.js.map +1 -0
- package/dist/modules/apimapper/render/sidecar.d.ts +21 -0
- package/dist/modules/apimapper/render/sidecar.js +66 -0
- package/dist/modules/apimapper/render/sidecar.js.map +1 -0
- package/dist/modules/apimapper/render/token-cap.d.ts +21 -0
- package/dist/modules/apimapper/render/token-cap.js +57 -0
- package/dist/modules/apimapper/render/token-cap.js.map +1 -0
- package/dist/modules/apimapper/schema.d.ts +2 -2
- package/dist/modules/apimapper/schema.js +92 -33
- package/dist/modules/apimapper/schema.js.map +1 -1
- package/dist/modules/apimapper/settings-format.d.ts +23 -0
- package/dist/modules/apimapper/settings-format.js +135 -0
- package/dist/modules/apimapper/settings-format.js.map +1 -0
- package/dist/modules/apimapper/settings.d.ts +2 -2
- package/dist/modules/apimapper/settings.js +100 -42
- package/dist/modules/apimapper/settings.js.map +1 -1
- package/dist/modules/apimapper/sites-tools.d.ts +29 -0
- package/dist/modules/apimapper/sites-tools.js +165 -0
- package/dist/modules/apimapper/sites-tools.js.map +1 -0
- package/dist/modules/apimapper/skill-resources.d.ts +2 -2
- package/dist/modules/apimapper/skill-resources.js.map +1 -1
- package/dist/modules/apimapper/token-baseline.harness.d.ts +91 -0
- package/dist/modules/apimapper/token-baseline.harness.js +291 -0
- package/dist/modules/apimapper/token-baseline.harness.js.map +1 -0
- package/dist/modules/apimapper/tool-result.d.ts +46 -0
- package/dist/modules/apimapper/tool-result.js +63 -0
- package/dist/modules/apimapper/tool-result.js.map +1 -0
- package/dist/modules/apimapper/toolslist-size.d.ts +56 -0
- package/dist/modules/apimapper/toolslist-size.js +192 -0
- package/dist/modules/apimapper/toolslist-size.js.map +1 -0
- package/dist/modules/apimapper/types.d.ts +44 -8
- package/dist/modules/apimapper/types.js +26 -1
- package/dist/modules/apimapper/types.js.map +1 -1
- package/dist/modules/apimapper/use-profile.d.ts +21 -0
- package/dist/modules/apimapper/use-profile.js +56 -2
- package/dist/modules/apimapper/use-profile.js.map +1 -1
- package/dist/modules/apimapper/whitelist-drift.d.ts +85 -0
- package/dist/modules/apimapper/whitelist-drift.js +360 -0
- package/dist/modules/apimapper/whitelist-drift.js.map +1 -0
- package/dist/modules/apimapper/workflows.d.ts +2 -2
- package/dist/modules/apimapper/workflows.js +202 -20
- package/dist/modules/apimapper/workflows.js.map +1 -1
- package/dist/modules/apimapper/yootheme-binding.d.ts +35 -0
- package/dist/modules/apimapper/yootheme-binding.js +186 -0
- package/dist/modules/apimapper/yootheme-binding.js.map +1 -0
- package/dist/platform/index.d.ts +56 -0
- package/dist/platform/index.js +195 -7
- package/dist/platform/index.js.map +1 -1
- package/dist/setup/detect-clients.d.ts +40 -1
- package/dist/setup/detect-clients.js +148 -1
- package/dist/setup/detect-clients.js.map +1 -1
- package/dist/setup/probe-handshake.js +40 -7
- package/dist/setup/probe-handshake.js.map +1 -1
- package/dist/setup/remove-config.d.ts +8 -0
- package/dist/setup/remove-config.js +145 -0
- package/dist/setup/remove-config.js.map +1 -0
- package/dist/setup/uninstall.d.ts +34 -0
- package/dist/setup/uninstall.js +147 -0
- package/dist/setup/uninstall.js.map +1 -0
- package/dist/setup-cli.d.ts +60 -0
- package/dist/setup-cli.js +155 -5
- package/dist/setup-cli.js.map +1 -1
- package/dist/sites/loader.d.ts +41 -0
- package/dist/sites/loader.js +119 -0
- package/dist/sites/loader.js.map +1 -0
- package/dist/sites/schema.d.ts +69 -0
- package/dist/sites/schema.js +71 -0
- package/dist/sites/schema.js.map +1 -0
- package/dist/sites/secret-resolver.d.ts +47 -0
- package/dist/sites/secret-resolver.js +150 -0
- package/dist/sites/secret-resolver.js.map +1 -0
- package/dist/skill-instructions.d.ts +1 -1
- package/dist/skill-instructions.js +5 -0
- package/dist/skill-instructions.js.map +1 -1
- package/dist/transports/stdio.js +4 -4
- package/dist/transports/stdio.js.map +1 -1
- package/dist/uninstall-skill.d.ts +27 -0
- package/dist/uninstall-skill.js +89 -0
- package/dist/uninstall-skill.js.map +1 -0
- package/docs/architecture.md +22 -22
- package/docs/customgraph-internal-migration.md +4 -4
- package/docs/security.md +2 -21
- package/docs/tools.md +40 -12
- package/manifest.json +77 -70
- package/package.json +68 -60
- package/skills/apimapper/SKILL.md +53 -7
- package/skills/apimapper/reference/conditional-style-multi-items.md +114 -0
- package/skills/apimapper/reference/jmespath-pitfalls.md +108 -0
- package/skills/apimapper/reference/joomla.md +1 -1
- package/skills/apimapper/reference/library-template-discovery.md +65 -0
- package/skills/apimapper/reference/merge-two-sources-on-key.md +99 -0
- package/skills/apimapper/reference/render.md +132 -0
- package/skills/apimapper/reference/troubleshooting.md +21 -1
- package/skills/apimapper/reference/yootheme.md +1 -1
- package/dist/auth/oauth-provider.d.ts +0 -68
- package/dist/auth/oauth-provider.js +0 -232
- package/dist/auth/oauth-provider.js.map +0 -1
- package/dist/server-http.d.ts +0 -22
- package/dist/server-http.js +0 -159
- package/dist/server-http.js.map +0 -1
- package/dist/transports/http.d.ts +0 -29
- package/dist/transports/http.js +0 -267
- package/dist/transports/http.js.map +0 -1
|
@@ -13,8 +13,25 @@
|
|
|
13
13
|
// from the aggregated payload. Rules are simple and intentionally narrow —
|
|
14
14
|
// the goal is "show the user a sensible first step", not "complete agent
|
|
15
15
|
// reasoning". When in doubt, suggest nothing.
|
|
16
|
-
|
|
16
|
+
//
|
|
17
|
+
// rc.13 Welle 3 (2026-05-21) — W3.1 heavy-tool migration. The tool output
|
|
18
|
+
// moves from `formatResult(report)` (pretty-printed JSON dump) to
|
|
19
|
+
// `detailResult`: a scalar summary (site / license / counts) renders as
|
|
20
|
+
// `groups`; the verbose nested sections (connection + flow lists, full
|
|
21
|
+
// category breakdown, featured + popular catalog, the anti-iteration hint,
|
|
22
|
+
// suggestions, errors) go into `appendText`. Migration is purely additive —
|
|
23
|
+
// every fact the AI received before is still in the output — and the flat
|
|
24
|
+
// key-value rendering is a token win on the #1 baseline payload.
|
|
25
|
+
// `buildOnboardingReport` itself is unchanged: it stays a pure data
|
|
26
|
+
// assembler so its callers and pin-tests are untouched.
|
|
27
|
+
import { detailResult, errorResult, readOnly, } from "@getimo/mcp-toolkit";
|
|
17
28
|
import { request, WP_BASE } from "./client.js";
|
|
29
|
+
// F-LS-04 (live-smoke 2026-05-20) — the PHP /connections endpoint emits
|
|
30
|
+
// camelCase keys (authType, credentialId). The onboarding allConns list +
|
|
31
|
+
// the expired-OAuth filter both read snake_case (auth_type, credential_id).
|
|
32
|
+
// Without this bridge, every connection in the report appears as auth=none
|
|
33
|
+
// with credential_id=null, and the reconnect-oauth suggestion never fires.
|
|
34
|
+
import { normalizeConnectionFromWire } from "./normalizers.js";
|
|
18
35
|
async function safeRequest(tool, path) {
|
|
19
36
|
try {
|
|
20
37
|
const r = await request(path);
|
|
@@ -31,6 +48,57 @@ async function safeRequest(tool, path) {
|
|
|
31
48
|
};
|
|
32
49
|
}
|
|
33
50
|
}
|
|
51
|
+
// ── Token-validity check (Wave-12 F1, Cold-AI #6) ──────────────────────
|
|
52
|
+
/**
|
|
53
|
+
* Wave-12 F1 (2026-05-31) — decide whether an OAuth credential is *actually*
|
|
54
|
+
* expired in a way that requires the customer to reconnect. This mirrors the
|
|
55
|
+
* canonical PHP-side check in
|
|
56
|
+
* `src/modules/core/src/Credential/CredentialRepository::calculateStatus`.
|
|
57
|
+
*
|
|
58
|
+
* Cold-AI #6 hit a wasted tool-call: `apimapper_onboarding` suggested
|
|
59
|
+
* "Reconnect Google Sheets" for a credential whose access token had expired,
|
|
60
|
+
* BUT whose refresh-token would auto-renew it on next use. The previous
|
|
61
|
+
* heuristic only checked `oauth_token_expires_at < now`, so Google/GitHub
|
|
62
|
+
* (refresh-token providers) were chronically flagged as expired.
|
|
63
|
+
*
|
|
64
|
+
* Canonical precedence:
|
|
65
|
+
*
|
|
66
|
+
* 1. **`status` field (preferred).** PHP `/credentials` computes this with
|
|
67
|
+
* full knowledge of the refresh-token state. Only `'expired'` means a
|
|
68
|
+
* reconnect is required. `'broken'` is a separate UX (Remove & Reconnect)
|
|
69
|
+
* and intentionally NOT covered by this reconnect-oauth suggestion.
|
|
70
|
+
* 2. **`token_hard_expires_at` (legacy + cross-check).** Server emits this
|
|
71
|
+
* ONLY for credentials WITHOUT a refresh-token (e.g. Meta/Instagram).
|
|
72
|
+
* Present + in the past → truly expired. Null/absent → refreshable
|
|
73
|
+
* access-token, do NOT suggest reconnect.
|
|
74
|
+
* 3. **Last-resort fallback.** Pre-status response shape with only
|
|
75
|
+
* `oauth_token_expires_at`: if it's in the past AND no field signals
|
|
76
|
+
* refreshability, suggest reconnect. This preserves the pre-F1 behaviour
|
|
77
|
+
* for older server builds and conservative defaults (a true expiry is
|
|
78
|
+
* better surfaced as a false-positive than silently swallowed).
|
|
79
|
+
*/
|
|
80
|
+
export function isOAuthCredentialExpired(credential, nowMs = Date.now()) {
|
|
81
|
+
// (1) Canonical `status` wins when present.
|
|
82
|
+
const status = typeof credential.status === "string" ? credential.status.toLowerCase() : null;
|
|
83
|
+
if (status) {
|
|
84
|
+
return status === "expired";
|
|
85
|
+
}
|
|
86
|
+
// (2) Hard-expiry field present? It's only set for non-refreshable tokens.
|
|
87
|
+
// `token_hard_expires_at === null` (explicit) signals refreshable → not expired.
|
|
88
|
+
if ("token_hard_expires_at" in credential) {
|
|
89
|
+
const hard = credential.token_hard_expires_at;
|
|
90
|
+
if (hard === null || hard === undefined || hard === "") {
|
|
91
|
+
return false; // refreshable token, server explicitly cleared the hard-expiry
|
|
92
|
+
}
|
|
93
|
+
const t = Date.parse(hard);
|
|
94
|
+
return Number.isFinite(t) && t < nowMs;
|
|
95
|
+
}
|
|
96
|
+
// (3) Last-resort fallback for pre-status server builds.
|
|
97
|
+
if (!credential.oauth_token_expires_at)
|
|
98
|
+
return false;
|
|
99
|
+
const t = Date.parse(credential.oauth_token_expires_at);
|
|
100
|
+
return Number.isFinite(t) && t < nowMs;
|
|
101
|
+
}
|
|
34
102
|
// ── Suggestion rules ───────────────────────────────────────────────────
|
|
35
103
|
/**
|
|
36
104
|
* Pure function — given aggregated state, derive a small list of
|
|
@@ -69,17 +137,84 @@ export function deriveSuggestions(args) {
|
|
|
69
137
|
}
|
|
70
138
|
return out;
|
|
71
139
|
}
|
|
140
|
+
/**
|
|
141
|
+
* rc.10 B (2026-05-19) — Infer the host platform from the configured
|
|
142
|
+
* WP_BASE URL. WordPress installs typically end in `/wp-json/...` or
|
|
143
|
+
* contain `/wordpress/`; Joomla installs expose `option=com_…` or
|
|
144
|
+
* `/administrator/`. We only return `unknown` when neither pattern
|
|
145
|
+
* matches — the AI then has explicit signal that something is off.
|
|
146
|
+
*
|
|
147
|
+
* L-4 (W3F-5): this is the FALLBACK when the live `/identity` call
|
|
148
|
+
* couldn't be reached or returned an unrecognised value. The canonical
|
|
149
|
+
* source of truth is the server-side identity payload (`.platform`),
|
|
150
|
+
* which `buildOnboardingReport` queries first.
|
|
151
|
+
*/
|
|
152
|
+
function detectPlatform(baseUrl) {
|
|
153
|
+
const u = baseUrl.toLowerCase();
|
|
154
|
+
if (/\/wp-json|\/wordpress|wp\-content/.test(u) || /\bwordpress\b/.test(u)) {
|
|
155
|
+
return "wordpress";
|
|
156
|
+
}
|
|
157
|
+
if (/option=com_|\/administrator|\bjoomla\b/.test(u)) {
|
|
158
|
+
return "joomla";
|
|
159
|
+
}
|
|
160
|
+
return "unknown";
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* L-4 (W3F-5): map an `/identity.platform` string to the OnboardingReport
|
|
164
|
+
* enum. Server emits `"wordpress"` / `"joomla"`; anything else is treated
|
|
165
|
+
* as `"unknown"` (the same conservative default the URL heuristic uses).
|
|
166
|
+
*/
|
|
167
|
+
function normaliseIdentityPlatform(raw) {
|
|
168
|
+
if (typeof raw !== "string")
|
|
169
|
+
return null;
|
|
170
|
+
const v = raw.trim().toLowerCase();
|
|
171
|
+
if (v === "wordpress")
|
|
172
|
+
return "wordpress";
|
|
173
|
+
if (v === "joomla")
|
|
174
|
+
return "joomla";
|
|
175
|
+
if (v === "")
|
|
176
|
+
return null;
|
|
177
|
+
return "unknown";
|
|
178
|
+
}
|
|
72
179
|
/**
|
|
73
180
|
* Run the five sub-calls in parallel + assemble an OnboardingReport.
|
|
74
181
|
* Never throws. Sub-call failures land in `errors[]`.
|
|
75
182
|
*/
|
|
76
183
|
export async function buildOnboardingReport() {
|
|
77
|
-
|
|
78
|
-
|
|
184
|
+
// rc.10 B (2026-05-19) — added /library/categories and /library/featured
|
|
185
|
+
// in parallel so a single onboarding call returns the full catalog brief.
|
|
186
|
+
// ~30 ms extra wall-clock (parallel) saves 5-10s of nachgelagerte
|
|
187
|
+
// discovery calls.
|
|
188
|
+
//
|
|
189
|
+
// F-LS-01 (live-smoke 2026-05-20) — removed the apimapper_health parallel
|
|
190
|
+
// call. /wp-json/api-mapper/v1/health does NOT exist on the WP backend
|
|
191
|
+
// (route-list audit: 0 matches; only /connections/health-check and
|
|
192
|
+
// /admin/health-warnings exist). Its only consumer was the
|
|
193
|
+
// plugin_version / api_version derivation, which was already always
|
|
194
|
+
// undefined because of the same 404. Removing the call drops the
|
|
195
|
+
// spurious apimapper_health entry from errors[] so the AI no longer
|
|
196
|
+
// chases a phantom outage on a fresh install.
|
|
197
|
+
// L-4 (W3F-5): `/identity` is included in the parallel batch so the
|
|
198
|
+
// platform string is sourced from the server, not from a URL regex.
|
|
199
|
+
// The endpoint is public on both WordPress and Joomla — even an
|
|
200
|
+
// unauthenticated probe answers — so the call is safe to fire on
|
|
201
|
+
// every onboarding. A failure here drops us back to the legacy URL
|
|
202
|
+
// heuristic via `detectPlatform()`.
|
|
203
|
+
// WP↔Joomla parity fix (2026-06-07) — added /library/catalog to the parallel
|
|
204
|
+
// batch. On a Joomla fresh install /library/categories often rejects and
|
|
205
|
+
// /library/popular is empty, which previously collapsed total_count to 0
|
|
206
|
+
// ("0 templates" in the briefing despite a full catalogue). The catalog
|
|
207
|
+
// endpoint carries the authoritative total, so the count cascade can fall
|
|
208
|
+
// back to it before degrading to the featured/popular list length.
|
|
209
|
+
const [identity, license, connections, flows, popular, featured, categories, catalog] = await Promise.allSettled([
|
|
210
|
+
safeRequest("apimapper_identity", "/identity"),
|
|
79
211
|
safeRequest("apimapper_license_status", "/license"),
|
|
80
212
|
safeRequest("apimapper_connection_list", "/connections"),
|
|
81
213
|
safeRequest("apimapper_flow_list", "/flows"),
|
|
82
214
|
safeRequest("apimapper_library_popular", "/library/popular?limit=5"),
|
|
215
|
+
safeRequest("apimapper_library_featured", "/library/featured?limit=5"),
|
|
216
|
+
safeRequest("apimapper_library_categories", "/library/categories"),
|
|
217
|
+
safeRequest("apimapper_library_catalog", "/library/catalog"),
|
|
83
218
|
]);
|
|
84
219
|
const errors = [];
|
|
85
220
|
// Helper that pulls .value from a settled promise + records any error.
|
|
@@ -95,12 +230,35 @@ export async function buildOnboardingReport() {
|
|
|
95
230
|
}
|
|
96
231
|
return s.value.data;
|
|
97
232
|
};
|
|
98
|
-
|
|
233
|
+
const identityData = take(identity);
|
|
99
234
|
const licenseData = take(license);
|
|
100
235
|
const connData = take(connections);
|
|
101
236
|
const flowData = take(flows);
|
|
102
237
|
const popularData = take(popular);
|
|
103
|
-
const
|
|
238
|
+
const featuredData = take(featured);
|
|
239
|
+
const categoriesData = take(categories);
|
|
240
|
+
const catalogData = take(catalog);
|
|
241
|
+
// L-4 (W3F-5): canonical platform from /identity if present + valid;
|
|
242
|
+
// otherwise fall back to the URL-shape heuristic. The result is the
|
|
243
|
+
// same union the OnboardingReport.site.platform type expects.
|
|
244
|
+
const platformFromIdentity = identityData
|
|
245
|
+
? normaliseIdentityPlatform(identityData.platform)
|
|
246
|
+
: null;
|
|
247
|
+
const sitePlatform = platformFromIdentity ?? detectPlatform(WP_BASE);
|
|
248
|
+
// L-4 follow-up: surface the upstream `plugin_version` so the
|
|
249
|
+
// onboarding report carries it even though we removed the
|
|
250
|
+
// /health-based probe at F-LS-01. /identity returns this field on
|
|
251
|
+
// both platforms.
|
|
252
|
+
const pluginVersionFromIdentity = identityData && typeof identityData.plugin_version === "string"
|
|
253
|
+
? identityData.plugin_version
|
|
254
|
+
: undefined;
|
|
255
|
+
// F-LS-04 — bridge camelCase /connections wire-shape to snake_case so the
|
|
256
|
+
// downstream c.auth_type + c.credential_id reads (both here in the
|
|
257
|
+
// expired-OAuth filter and in the connection-items map below) see the
|
|
258
|
+
// real upstream values instead of undefined.
|
|
259
|
+
const allConns = Array.isArray(connData?.connections)
|
|
260
|
+
? connData.connections.map((c) => normalizeConnectionFromWire(c))
|
|
261
|
+
: [];
|
|
104
262
|
const allFlows = Array.isArray(flowData?.flows) ? flowData.flows : [];
|
|
105
263
|
// F-A6-15: PHP /library/popular returns `connections`; tolerate legacy `items`.
|
|
106
264
|
const popItems = Array.isArray(popularData?.connections)
|
|
@@ -108,6 +266,42 @@ export async function buildOnboardingReport() {
|
|
|
108
266
|
: Array.isArray(popularData?.items)
|
|
109
267
|
? popularData.items
|
|
110
268
|
: [];
|
|
269
|
+
const featuredItems = Array.isArray(featuredData?.connections)
|
|
270
|
+
? featuredData.connections
|
|
271
|
+
: Array.isArray(featuredData?.items)
|
|
272
|
+
? featuredData.items
|
|
273
|
+
: [];
|
|
274
|
+
// rc.10 B — categories shape: {categories: [{id, name, count}, ...]}.
|
|
275
|
+
// When the call fails or shape is unexpected, fall back to an empty list;
|
|
276
|
+
// total_count then falls back to popItems.length so the AI still gets a
|
|
277
|
+
// best-effort number.
|
|
278
|
+
const categoryRows = Array.isArray(categoriesData?.categories)
|
|
279
|
+
? categoriesData.categories.filter((c) => typeof c?.id === "string" && typeof c?.name === "string" && typeof c?.count === "number")
|
|
280
|
+
: [];
|
|
281
|
+
// WP↔Joomla parity fix (2026-06-07) — derive a TRUE catalogue total from the
|
|
282
|
+
// /library/catalog response: the authoritative `total` field if present and
|
|
283
|
+
// positive, else the length of the inner items/connections list (PHP emits
|
|
284
|
+
// `connections`, legacy emits `items`). 0 when the call failed or the
|
|
285
|
+
// catalogue is genuinely empty.
|
|
286
|
+
const catalogItemsLen = Array.isArray(catalogData?.connections)
|
|
287
|
+
? catalogData.connections.length
|
|
288
|
+
: Array.isArray(catalogData?.items)
|
|
289
|
+
? catalogData.items.length
|
|
290
|
+
: 0;
|
|
291
|
+
const catalogTotal = typeof catalogData?.total === "number" && Number.isFinite(catalogData.total) && catalogData.total > 0
|
|
292
|
+
? catalogData.total
|
|
293
|
+
: catalogItemsLen;
|
|
294
|
+
// Count cascade — NEVER read 0 while any source shows templates:
|
|
295
|
+
// 1. categorySum (authoritative when categories load) — wins if > 0
|
|
296
|
+
// 2. catalogTotal (the /library/catalog total) — the Joomla fresh-install
|
|
297
|
+
// rescue, since categories there often reject and popular is empty
|
|
298
|
+
// 3. max(featured, popular) — last-resort floor from the brief lists
|
|
299
|
+
const categorySum = categoryRows.reduce((sum, c) => sum + c.count, 0);
|
|
300
|
+
const libraryTotalCount = categorySum > 0
|
|
301
|
+
? categorySum
|
|
302
|
+
: catalogTotal && catalogTotal > 0
|
|
303
|
+
? catalogTotal
|
|
304
|
+
: Math.max(featuredItems.length, popItems.length);
|
|
111
305
|
// ── Conditional second-stage call: credentials, only if any conn has an oauth creds.
|
|
112
306
|
const oauthCredIds = allConns
|
|
113
307
|
.filter((c) => (c.auth_type || "").startsWith("oauth2") && c.credential_id)
|
|
@@ -121,14 +315,13 @@ export async function buildOnboardingReport() {
|
|
|
121
315
|
else {
|
|
122
316
|
const creds = Array.isArray(credRes.data?.credentials) ? credRes.data.credentials : [];
|
|
123
317
|
const now = Date.now();
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
.map((c) => c.id));
|
|
318
|
+
// Wave-12 F1 (Cold-AI #6, 2026-05-31): delegate to the canonical
|
|
319
|
+
// token-validity check that mirrors `CredentialRepository::calculateStatus`.
|
|
320
|
+
// Refresh-token providers (Google, GitHub, ...) report status='active'
|
|
321
|
+
// even when their short-lived access-token's oauth_token_expires_at is
|
|
322
|
+
// in the past — the previous heuristic flagged them as expired, causing
|
|
323
|
+
// a false-positive reconnect-oauth suggestion.
|
|
324
|
+
expiredOauthCredentialIds = new Set(creds.filter((c) => isOAuthCredentialExpired(c, now)).map((c) => c.id));
|
|
132
325
|
}
|
|
133
326
|
}
|
|
134
327
|
const published = allFlows.filter((f) => f.is_compiled).length;
|
|
@@ -139,21 +332,52 @@ export async function buildOnboardingReport() {
|
|
|
139
332
|
expiredOauthCredentialIds,
|
|
140
333
|
popular: popItems,
|
|
141
334
|
});
|
|
142
|
-
// License:
|
|
335
|
+
// License: the raw /license response is
|
|
336
|
+
// { success, license: { tier, is_valid, expires_at, beta_channel, ... } }
|
|
337
|
+
// — unwrap one level. F-LS-02 (live-smoke 2026-05-20): previously read
|
|
338
|
+
// o.tier / o.status from the OUTER envelope, which never has those
|
|
339
|
+
// fields, so tier/status were always undefined. Status is derived from
|
|
340
|
+
// is_valid:boolean → "valid"/"invalid"; if a future backend version
|
|
341
|
+
// emits a flat shape (no inner license envelope) the same mapper still
|
|
342
|
+
// works because `inner` falls back to `outer`. A legacy `status` string
|
|
343
|
+
// on `inner` wins over the is_valid derivation, so existing wire
|
|
344
|
+
// shapes that emit a precomputed status are still respected.
|
|
143
345
|
const licMap = (() => {
|
|
144
346
|
if (!licenseData || typeof licenseData !== "object")
|
|
145
347
|
return { available: false };
|
|
146
|
-
const
|
|
348
|
+
const outer = licenseData;
|
|
349
|
+
const inner = outer.license && typeof outer.license === "object"
|
|
350
|
+
? outer.license
|
|
351
|
+
: outer; // forward-compat: backend may flatten in future
|
|
352
|
+
const derivedStatus = typeof inner.is_valid === "boolean"
|
|
353
|
+
? inner.is_valid
|
|
354
|
+
? "valid"
|
|
355
|
+
: "invalid"
|
|
356
|
+
: undefined;
|
|
147
357
|
return {
|
|
148
358
|
available: true,
|
|
149
|
-
status: typeof
|
|
150
|
-
tier: typeof
|
|
151
|
-
expires_at: typeof
|
|
152
|
-
beta_channel: typeof
|
|
359
|
+
status: typeof inner.status === "string" ? inner.status : derivedStatus,
|
|
360
|
+
tier: typeof inner.tier === "string" ? inner.tier : undefined,
|
|
361
|
+
expires_at: typeof inner.expires_at === "string" ? inner.expires_at : null,
|
|
362
|
+
beta_channel: typeof inner.beta_channel === "boolean" ? inner.beta_channel : undefined,
|
|
153
363
|
};
|
|
154
364
|
})();
|
|
365
|
+
// rc.10 B — free-text hint that lives ADJACENT to the library data
|
|
366
|
+
// so the LLM reads it in the natural flow. `next_tools[]` arrays are
|
|
367
|
+
// ignored by most agents; prose anchored to numbers is not.
|
|
368
|
+
const libraryHint = `Catalog has ${libraryTotalCount} templates across ${categoryRows.length} categories. ` +
|
|
369
|
+
`Skip pagination and category-iteration: a single library_list({}) call returns the ` +
|
|
370
|
+
`complete catalog. Use the categories list above to filter results client-side rather ` +
|
|
371
|
+
`than calling library_list({category}) per slug.`;
|
|
155
372
|
return {
|
|
156
|
-
site: {
|
|
373
|
+
site: {
|
|
374
|
+
wp_base: WP_BASE,
|
|
375
|
+
platform: sitePlatform,
|
|
376
|
+
// L-4 (W3F-5): plugin_version is now sourced from /identity (which
|
|
377
|
+
// exposes it on both WordPress and Joomla). Undefined when the
|
|
378
|
+
// probe failed or the field was missing.
|
|
379
|
+
...(pluginVersionFromIdentity ? { plugin_version: pluginVersionFromIdentity } : {}),
|
|
380
|
+
},
|
|
157
381
|
license: licMap,
|
|
158
382
|
connections: {
|
|
159
383
|
count: allConns.length,
|
|
@@ -178,29 +402,207 @@ export async function buildOnboardingReport() {
|
|
|
178
402
|
})),
|
|
179
403
|
},
|
|
180
404
|
library: {
|
|
405
|
+
total_count: libraryTotalCount,
|
|
406
|
+
categories: categoryRows,
|
|
407
|
+
featured: featuredItems.slice(0, 5).map((f) => ({
|
|
408
|
+
id: f.id,
|
|
409
|
+
name: f.name,
|
|
410
|
+
category: f.category,
|
|
411
|
+
})),
|
|
181
412
|
popular: popItems.slice(0, 5).map((p) => ({
|
|
182
413
|
id: p.id,
|
|
183
414
|
name: p.name,
|
|
184
415
|
category: p.category,
|
|
185
416
|
})),
|
|
417
|
+
hint: libraryHint,
|
|
186
418
|
},
|
|
187
419
|
suggestions,
|
|
188
420
|
errors,
|
|
189
421
|
};
|
|
190
422
|
}
|
|
423
|
+
// ── structuredContent builder ──────────────────────────────────────────
|
|
424
|
+
/**
|
|
425
|
+
* W3.1 (rc.13 Welle 3) — render an OnboardingReport as a `detailResult`.
|
|
426
|
+
*
|
|
427
|
+
* Onboarding is the largest baseline payload and the #1 token-reduction
|
|
428
|
+
* lever for Welle 3. The migration is purely additive — every fact the AI
|
|
429
|
+
* received under the previous `formatResult(report)` JSON dump is still in
|
|
430
|
+
* the output — but the shape is split for both token-efficiency and Rich
|
|
431
|
+
* Card rendering:
|
|
432
|
+
*
|
|
433
|
+
* - `groups` — the scalar summary: site status, license tier, and the
|
|
434
|
+
* connection / flow / library counts. This is what the Rich Card
|
|
435
|
+
* "detail" component renders, and detailResult flattens it to compact
|
|
436
|
+
* `label: value` lines for the LLM (far cheaper than pretty-printed
|
|
437
|
+
* JSON).
|
|
438
|
+
* - `appendText` — the verbose nested sections (connection list, flow
|
|
439
|
+
* list, full category breakdown, featured + popular catalog, the
|
|
440
|
+
* anti-iteration hint, suggestions, and any sub-call errors). The
|
|
441
|
+
* toolkit documents `appendText` as "appended to the LLM output but
|
|
442
|
+
* NOT shown in the Rich Card" — exactly right for catalog/suggestion
|
|
443
|
+
* detail that would clutter the card yet the AI still needs verbatim.
|
|
444
|
+
*
|
|
445
|
+
* Pure function — no I/O — so the test suite pins it directly.
|
|
446
|
+
*/
|
|
447
|
+
export function buildOnboardingDetail(report) {
|
|
448
|
+
const siteEntries = [
|
|
449
|
+
{ key: "wp_base", label: "Site URL", value: report.site.wp_base, format: "code", copyable: true },
|
|
450
|
+
{ key: "platform", label: "Platform", value: report.site.platform, format: "badge" },
|
|
451
|
+
];
|
|
452
|
+
if (report.site.plugin_version) {
|
|
453
|
+
siteEntries.push({
|
|
454
|
+
key: "plugin_version",
|
|
455
|
+
label: "Plugin version",
|
|
456
|
+
value: report.site.plugin_version,
|
|
457
|
+
});
|
|
458
|
+
}
|
|
459
|
+
if (report.site.api_version) {
|
|
460
|
+
siteEntries.push({
|
|
461
|
+
key: "api_version",
|
|
462
|
+
label: "API version",
|
|
463
|
+
value: report.site.api_version,
|
|
464
|
+
});
|
|
465
|
+
}
|
|
466
|
+
const licenseEntries = report.license.available
|
|
467
|
+
? [
|
|
468
|
+
{ key: "tier", label: "Tier", value: report.license.tier ?? "—", format: "badge" },
|
|
469
|
+
{ key: "status", label: "Status", value: report.license.status ?? "—", format: "status" },
|
|
470
|
+
{ key: "expires_at", label: "Expires", value: report.license.expires_at ?? "—", format: "date" },
|
|
471
|
+
]
|
|
472
|
+
: [{ key: "available", label: "License", value: "unavailable", format: "status" }];
|
|
473
|
+
const countEntries = [
|
|
474
|
+
{ key: "connections", label: "Connections", value: report.connections.count },
|
|
475
|
+
{ key: "flows", label: "Flows", value: report.flows.count },
|
|
476
|
+
{ key: "flows_published", label: "Flows published", value: report.flows.published },
|
|
477
|
+
{ key: "flows_draft", label: "Flows draft", value: report.flows.draft },
|
|
478
|
+
{ key: "library_templates", label: "Library templates", value: report.library.total_count },
|
|
479
|
+
{ key: "library_categories", label: "Library categories", value: report.library.categories.length },
|
|
480
|
+
{ key: "suggestions", label: "Suggested next steps", value: report.suggestions.length },
|
|
481
|
+
{ key: "errors", label: "Sub-call errors", value: report.errors.length },
|
|
482
|
+
];
|
|
483
|
+
const groups = [
|
|
484
|
+
{ label: "Site", entries: siteEntries },
|
|
485
|
+
{ label: "License", entries: licenseEntries },
|
|
486
|
+
{ label: "Counts", entries: countEntries },
|
|
487
|
+
];
|
|
488
|
+
const appendText = buildOnboardingAppendText(report);
|
|
489
|
+
const errorCount = report.errors.length;
|
|
490
|
+
const badge = errorCount > 0
|
|
491
|
+
? { text: `${errorCount} sub-call error${errorCount === 1 ? "" : "s"}`, variant: "warning" }
|
|
492
|
+
: { text: "all checks ok", variant: "success" };
|
|
493
|
+
return detailResult({
|
|
494
|
+
title: "Onboarding briefing",
|
|
495
|
+
subtitle: `${report.site.platform} install — ${report.connections.count} connection(s), ${report.flows.count} flow(s)`,
|
|
496
|
+
badge,
|
|
497
|
+
groups,
|
|
498
|
+
appendText,
|
|
499
|
+
});
|
|
500
|
+
}
|
|
501
|
+
/**
|
|
502
|
+
* W3.1 — assemble the verbose `appendText` block: every nested section the
|
|
503
|
+
* scalar `groups` cannot carry. Anchored to plain prose + line lists so the
|
|
504
|
+
* LLM reads it in natural order. Nothing here is dropped relative to the
|
|
505
|
+
* old JSON dump — only re-shaped from `{...}` to readable lines.
|
|
506
|
+
*/
|
|
507
|
+
function buildOnboardingAppendText(report) {
|
|
508
|
+
const lines = [];
|
|
509
|
+
// Connections detail.
|
|
510
|
+
lines.push(`Connections (${report.connections.count}):`);
|
|
511
|
+
if (report.connections.items.length === 0) {
|
|
512
|
+
lines.push(" (none)");
|
|
513
|
+
}
|
|
514
|
+
else {
|
|
515
|
+
for (const c of report.connections.items) {
|
|
516
|
+
lines.push(` - ${c.name} [id=${c.id}] source=${c.source ?? "—"} auth=${c.auth_type ?? "none"}` +
|
|
517
|
+
(c.credential_id ? ` credential=${c.credential_id}` : ""));
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
// Flows detail.
|
|
521
|
+
lines.push("", `Flows (${report.flows.count}; ${report.flows.published} published, ${report.flows.draft} draft):`);
|
|
522
|
+
if (report.flows.items.length === 0) {
|
|
523
|
+
lines.push(" (none)");
|
|
524
|
+
}
|
|
525
|
+
else {
|
|
526
|
+
for (const f of report.flows.items) {
|
|
527
|
+
lines.push(` - ${f.name} [id=${f.id}] source=${f.source ?? "—"} ` +
|
|
528
|
+
`${f.is_compiled ? "published" : "draft"} nodes=${f.node_count ?? "?"}`);
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
// Library catalog detail.
|
|
532
|
+
lines.push("", `Library: ${report.library.total_count} templates across ${report.library.categories.length} categories.`);
|
|
533
|
+
if (report.library.categories.length > 0) {
|
|
534
|
+
lines.push(" Categories:");
|
|
535
|
+
for (const cat of report.library.categories) {
|
|
536
|
+
lines.push(` - ${cat.name} [id=${cat.id}] (${cat.count})`);
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
if (report.library.featured.length > 0) {
|
|
540
|
+
lines.push(" Featured:");
|
|
541
|
+
for (const f of report.library.featured) {
|
|
542
|
+
lines.push(` - ${f.name} [id=${f.id}] category=${f.category ?? "—"}`);
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
if (report.library.popular.length > 0) {
|
|
546
|
+
lines.push(" Popular:");
|
|
547
|
+
for (const p of report.library.popular) {
|
|
548
|
+
lines.push(` - ${p.name} [id=${p.id}] category=${p.category ?? "—"}`);
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
lines.push(` ${report.library.hint}`);
|
|
552
|
+
// Suggested next steps.
|
|
553
|
+
lines.push("", `Suggested next steps (${report.suggestions.length}):`);
|
|
554
|
+
if (report.suggestions.length === 0) {
|
|
555
|
+
lines.push(" (none)");
|
|
556
|
+
}
|
|
557
|
+
else {
|
|
558
|
+
for (const s of report.suggestions) {
|
|
559
|
+
lines.push(` - [${s.type}] ${s.label}\n → ${s.action}`);
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
// Sub-call errors.
|
|
563
|
+
if (report.errors.length > 0) {
|
|
564
|
+
lines.push("", `Sub-call errors (${report.errors.length}):`);
|
|
565
|
+
for (const e of report.errors) {
|
|
566
|
+
lines.push(` - ${e.tool}: ${e.error}`);
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
return lines.join("\n");
|
|
570
|
+
}
|
|
191
571
|
// ── MCP tool registration ──────────────────────────────────────────────
|
|
192
572
|
export function registerOnboardingTool(server) {
|
|
193
573
|
server.registerTool("apimapper_onboarding", {
|
|
194
574
|
title: "Onboarding Report (Composite)",
|
|
195
|
-
description: "
|
|
196
|
-
"
|
|
197
|
-
"
|
|
575
|
+
description: "ONE-SHOT BRIEFING — run this FIRST when meeting a new install. Aggregates site platform, " +
|
|
576
|
+
"license tier, connections, flows, and a complete library brief (total_count + categories + " +
|
|
577
|
+
"featured + popular + free-text hint) into a single response. After this call you have full " +
|
|
578
|
+
"orientation; do NOT chain apimapper_library_categories or apimapper_library_list to " +
|
|
579
|
+
"rediscover what is already in the report. Tolerates partial failures and never throws." +
|
|
198
580
|
"\n\nExample:\n apimapper_onboarding({})",
|
|
199
581
|
inputSchema: {},
|
|
200
|
-
annotations: readOnly(),
|
|
582
|
+
annotations: readOnly({ title: "Onboarding Walkthrough", openWorld: true }),
|
|
201
583
|
}, async () => {
|
|
202
|
-
|
|
203
|
-
|
|
584
|
+
// DEF-LOW-2 (Wave-B audit, 2026-06-03): buildOnboardingReport is
|
|
585
|
+
// "never-throws by convention" (it tolerates partial sub-call failures
|
|
586
|
+
// and records them in report.errors[]). The SDK catch is the backstop,
|
|
587
|
+
// but a defensive try/catch makes the never-throws contract STRUCTURAL —
|
|
588
|
+
// any unexpected throw becomes a minimal structured error instead of a
|
|
589
|
+
// generic SDK isError.
|
|
590
|
+
try {
|
|
591
|
+
const report = await buildOnboardingReport();
|
|
592
|
+
// W3.1 (rc.13 Welle 3) — detailResult: scalar summary in `groups`,
|
|
593
|
+
// verbose catalog/suggestion/error detail in `appendText`. The flat
|
|
594
|
+
// key-value rendering replaces the pretty-printed JSON dump — a token
|
|
595
|
+
// win on the largest baseline payload, with nothing lost.
|
|
596
|
+
return buildOnboardingDetail(report);
|
|
597
|
+
}
|
|
598
|
+
catch (e) {
|
|
599
|
+
return errorResult({
|
|
600
|
+
message: e instanceof Error ? e.message : String(e),
|
|
601
|
+
code: "onboarding_assembler_failed",
|
|
602
|
+
suggestion: "The onboarding report assembler threw unexpectedly. Run " +
|
|
603
|
+
"apimapper_health to check connectivity + auth, then retry.",
|
|
604
|
+
});
|
|
605
|
+
}
|
|
204
606
|
});
|
|
205
607
|
}
|
|
206
608
|
//# sourceMappingURL=onboarding.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../../../src/modules/apimapper/onboarding.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../../../src/modules/apimapper/onboarding.ts"],"names":[],"mappings":"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"}
|