@wootsup/mcp 0.1.0-rc.8 → 0.1.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 +7 -7
- package/dist/index.d.ts +19 -0
- package/dist/index.js +72 -6
- package/dist/index.js.map +1 -1
- package/dist/modules/apimapper/cache.d.ts +2 -2
- package/dist/modules/apimapper/cache.js +107 -25
- package/dist/modules/apimapper/cache.js.map +1 -1
- package/dist/modules/apimapper/client.d.ts +40 -0
- package/dist/modules/apimapper/client.js +82 -12
- 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 +447 -143
- package/dist/modules/apimapper/connections.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 +253 -72
- package/dist/modules/apimapper/credentials.js.map +1 -1
- package/dist/modules/apimapper/diagnose.d.ts +54 -2
- package/dist/modules/apimapper/diagnose.js +193 -11
- 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 +325 -118
- 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 +214 -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 +28 -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 +4 -2
- 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 +165 -34
- package/dist/modules/apimapper/graph.js.map +1 -1
- package/dist/modules/apimapper/index.d.ts +17 -1
- package/dist/modules/apimapper/index.js +66 -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 +303 -60
- 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 +85 -37
- 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 +58 -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 +129 -50
- 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 +48 -2
- package/dist/modules/apimapper/onboarding.js +324 -17
- 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 +100 -32
- 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 +101 -40
- package/dist/modules/apimapper/settings.js.map +1 -1
- 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/toolslist-size.d.ts +55 -0
- package/dist/modules/apimapper/toolslist-size.js +190 -0
- package/dist/modules/apimapper/toolslist-size.js.map +1 -0
- package/dist/modules/apimapper/types.d.ts +23 -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/workflows.d.ts +2 -2
- package/dist/modules/apimapper/workflows.js +143 -16
- package/dist/modules/apimapper/workflows.js.map +1 -1
- package/dist/platform/index.js +44 -5
- package/dist/platform/index.js.map +1 -1
- package/dist/setup-cli.d.ts +53 -0
- package/dist/setup-cli.js +135 -6
- package/dist/setup-cli.js.map +1 -1
- package/docs/architecture.md +1 -1
- package/docs/tools.md +1 -1
- package/manifest.json +12 -3
- package/package.json +9 -4
- package/skills/apimapper/SKILL.md +1 -1
- package/skills/apimapper/reference/render.md +132 -0
- package/skills/apimapper/reference/troubleshooting.md +1 -1
- package/skills/apimapper/reference/yootheme.md +1 -1
|
@@ -1,2 +1,30 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare
|
|
1
|
+
import type { ToolRegistrar } from "./gateway/capturing-server.js";
|
|
2
|
+
export declare const UUID4_REGEX: RegExp;
|
|
3
|
+
/**
|
|
4
|
+
* A1-P3-2: Wire-shape for the `POST /feedback` REST response.
|
|
5
|
+
*
|
|
6
|
+
* Mirror of the PHP `@phpstan-type FeedbackResponse` aliases declared in:
|
|
7
|
+
* - WP: src/modules/admin-wordpress/.../FeedbackController.php
|
|
8
|
+
* - Joomla: src/modules/admin-joomla/.../FeedbackAjaxHandler.php
|
|
9
|
+
*
|
|
10
|
+
* All fields except `success` are optional because the PHP layer emits
|
|
11
|
+
* different subsets depending on the path:
|
|
12
|
+
* - 500 webhook-not-configured → `{ success: false, error }`
|
|
13
|
+
* - 400 missing-required-field → `{ success: false, error }`
|
|
14
|
+
* - 200 idempotency-duplicate → `{ success: true, queued, ticket_id, duplicate, idempotency_key }`
|
|
15
|
+
* - 200 fresh-submission → `{ success: true, queued?, ticket_id?, idempotency_key? }`
|
|
16
|
+
*
|
|
17
|
+
* Hoisted out of the inline `request<{...}>(...)` call-site (was at
|
|
18
|
+
* misc.ts:245-249) so the named interface is the single TS counterpart
|
|
19
|
+
* to the PHP @phpstan-type — touching one side without the other now
|
|
20
|
+
* shows up immediately as a cross-stack drift.
|
|
21
|
+
*/
|
|
22
|
+
export interface FeedbackSubmitResponse {
|
|
23
|
+
success: boolean;
|
|
24
|
+
queued?: boolean;
|
|
25
|
+
ticket_id?: string | null;
|
|
26
|
+
duplicate?: boolean;
|
|
27
|
+
idempotency_key?: string;
|
|
28
|
+
error?: string;
|
|
29
|
+
}
|
|
30
|
+
export declare function registerMiscTools(server: ToolRegistrar): void;
|
|
@@ -1,6 +1,36 @@
|
|
|
1
|
+
// src/modules/apimapper/misc.ts — Releases + Brandfetch + Feedback
|
|
2
|
+
//
|
|
3
|
+
// REST surface: GET /releases, POST /releases/download, GET /brandfetch/{domain},
|
|
4
|
+
// POST /feedback.
|
|
5
|
+
// Domain: tail-end of the plugin surface — release listing + download URL,
|
|
6
|
+
// brand SVG proxy, and customer-feedback submission (proxied to Discord webhook).
|
|
7
|
+
// `feedback_submit` uses `unwrapInnerSuccess` because the queue can refuse
|
|
8
|
+
// (rate limit, mis-config) with 200+{success:false}.
|
|
9
|
+
import { randomUUID } from "node:crypto";
|
|
1
10
|
import { z } from "zod";
|
|
2
|
-
import { formatResult,
|
|
11
|
+
import { formatResult, tableResult, detailResult, errorResult, readOnly, mutating, } from "@getimo/mcp-toolkit";
|
|
3
12
|
import { request, hintFor } from "./client.js";
|
|
13
|
+
// rc.13 Welle 3 (2026-05-20) — heavy read tools migrated to the toolkit's
|
|
14
|
+
// structuredContent builders. Migration is purely additive (text `content`
|
|
15
|
+
// block preserved, `_meta.ui` added).
|
|
16
|
+
// - release_list → tableResult (display="data-table").
|
|
17
|
+
// - brandfetch → detailResult (display="detail") — the flat {domain,
|
|
18
|
+
// has_svg, svg_size, hash} object renders as a grouped key-value detail.
|
|
19
|
+
// - release_download / feedback_submit keep their formatResult success
|
|
20
|
+
// payloads (a signed URL / a small confirmation); error branches →
|
|
21
|
+
// errorResult.
|
|
22
|
+
// - all error returns → errorResult (display="error", isError:true).
|
|
23
|
+
// ── release_list table shape ──────────────────────────────────────────
|
|
24
|
+
const RELEASE_COLUMNS = [
|
|
25
|
+
{ key: "version", label: "VERSION", width: 12 },
|
|
26
|
+
{ key: "date", label: "DATE", width: 22 },
|
|
27
|
+
{ key: "breaking", label: "BREAKING", width: 8 },
|
|
28
|
+
{ key: "is_current", label: "CURRENT", width: 7 },
|
|
29
|
+
];
|
|
30
|
+
// RFC 4122 UUID v4 regex (lowercase + uppercase tolerated).
|
|
31
|
+
// Exported so tests can pin both request-body and response-payload formats
|
|
32
|
+
// against the same canonical pattern (single source of truth).
|
|
33
|
+
export const UUID4_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
|
4
34
|
export function registerMiscTools(server) {
|
|
5
35
|
// ── apimapper_release_list ─────────────────────────────────────────
|
|
6
36
|
// F-A6-03: PHP ReleaseHandler returns `{success, current_version, releases}`.
|
|
@@ -14,33 +44,29 @@ export function registerMiscTools(server) {
|
|
|
14
44
|
inputSchema: {
|
|
15
45
|
limit: z.number().min(1).max(50).default(10).describe("Max items (1-50)"),
|
|
16
46
|
},
|
|
17
|
-
annotations: readOnly(),
|
|
47
|
+
annotations: readOnly({ title: "List Releases", openWorld: true }),
|
|
18
48
|
}, async ({ limit }) => {
|
|
19
49
|
const r = await request("/releases");
|
|
20
50
|
if (!r.success) {
|
|
21
|
-
return
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}, true);
|
|
51
|
+
return errorResult({
|
|
52
|
+
message: r.error ?? "release list failed",
|
|
53
|
+
code: r.errorCode ?? (r.status ? String(r.status) : undefined),
|
|
54
|
+
suggestion: hintFor(r.errorCode),
|
|
55
|
+
details: { limit },
|
|
56
|
+
});
|
|
28
57
|
}
|
|
29
58
|
const allReleases = Array.isArray(r.data?.releases) ? r.data.releases : [];
|
|
30
59
|
const releases = allReleases.slice(0, limit);
|
|
31
60
|
const currentVersion = r.data?.current_version ?? "?";
|
|
32
|
-
|
|
61
|
+
// W3.1 — tableResult: ASCII table for the LLM + typed DataTable payload
|
|
62
|
+
// for the Rich Card. IA-10: the footer carries the next-step guidance.
|
|
63
|
+
return tableResult(releases.map((rel) => ({
|
|
33
64
|
version: rel.version ?? "?",
|
|
34
65
|
date: rel.date ?? "—",
|
|
35
66
|
breaking: rel.has_breaking_changes ? "✓" : "✗",
|
|
36
67
|
is_current: rel.version === currentVersion ? "✓" : "",
|
|
37
68
|
})), {
|
|
38
|
-
columns:
|
|
39
|
-
{ key: "version", label: "VERSION", width: 12 },
|
|
40
|
-
{ key: "date", label: "DATE", width: 22 },
|
|
41
|
-
{ key: "breaking", label: "BREAKING", width: 8 },
|
|
42
|
-
{ key: "is_current", label: "CURRENT", width: 7 },
|
|
43
|
-
],
|
|
69
|
+
columns: RELEASE_COLUMNS,
|
|
44
70
|
header: (n) => `${n} releases (current=${currentVersion})`,
|
|
45
71
|
footer: "Use apimapper_release_download to fetch a download URL.",
|
|
46
72
|
});
|
|
@@ -60,32 +86,33 @@ export function registerMiscTools(server) {
|
|
|
60
86
|
.describe('Release version (e.g., "2.0.7")'),
|
|
61
87
|
product: z.enum(["wordpress", "joomla"]).describe("Product variant"),
|
|
62
88
|
},
|
|
63
|
-
|
|
89
|
+
// W1.26 (IA-1): the description already states this is read-only server-side
|
|
90
|
+
// (no state change — generates a signed URL). The annotation now matches.
|
|
91
|
+
annotations: readOnly({ title: "Get Release Download URL", openWorld: true }),
|
|
64
92
|
}, async ({ version, product }) => {
|
|
65
93
|
const r = await request("/releases/download", {
|
|
66
94
|
method: "POST",
|
|
67
95
|
body: JSON.stringify({ version, product }),
|
|
68
96
|
});
|
|
69
97
|
if (!r.success) {
|
|
70
|
-
return
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
}, true);
|
|
98
|
+
return errorResult({
|
|
99
|
+
message: r.error ?? "release download failed",
|
|
100
|
+
code: r.errorCode ?? (r.status ? String(r.status) : undefined),
|
|
101
|
+
suggestion: hintFor(r.errorCode),
|
|
102
|
+
details: { version, product },
|
|
103
|
+
});
|
|
77
104
|
}
|
|
78
105
|
// Defensive read: PHP currently returns flat `{success, download_url}`
|
|
79
106
|
// (post Wave 1B), but older shape wrapped under `data.download_url`.
|
|
80
107
|
// Tolerate either.
|
|
81
108
|
const downloadUrl = r.data?.data?.download_url ?? r.data?.download_url;
|
|
82
109
|
if (!downloadUrl) {
|
|
83
|
-
return
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
110
|
+
return errorResult({
|
|
111
|
+
message: "no download URL returned",
|
|
112
|
+
code: r.status ? String(r.status) : undefined,
|
|
113
|
+
suggestion: "Server returned 200 but no download_url field. Verify version+product combination.",
|
|
114
|
+
details: { version, product },
|
|
115
|
+
});
|
|
89
116
|
}
|
|
90
117
|
return formatResult({
|
|
91
118
|
download_url: downloadUrl,
|
|
@@ -106,22 +133,44 @@ export function registerMiscTools(server) {
|
|
|
106
133
|
inputSchema: {
|
|
107
134
|
domain: z.string().describe('Domain (e.g., "calendly.com", "google.com")'),
|
|
108
135
|
},
|
|
109
|
-
annotations: readOnly(),
|
|
136
|
+
annotations: readOnly({ title: "Brand Fetch", openWorld: true }),
|
|
110
137
|
}, async ({ domain }) => {
|
|
111
138
|
const r = await request(`/brandfetch/${encodeURIComponent(domain)}`);
|
|
112
139
|
if (!r.success) {
|
|
113
|
-
return
|
|
140
|
+
return errorResult({
|
|
141
|
+
message: r.error ?? "brandfetch failed",
|
|
142
|
+
code: r.errorCode ?? (r.status ? String(r.status) : undefined),
|
|
143
|
+
suggestion: hintFor(r.errorCode),
|
|
144
|
+
details: { domain },
|
|
145
|
+
});
|
|
114
146
|
}
|
|
115
147
|
// Defensive read: tolerate both flat (Wave 1B) and wrapped (legacy) shapes.
|
|
116
148
|
const svg = r.data?.data?.svg ?? r.data?.svg;
|
|
117
149
|
const hash = r.data?.data?.hash ?? r.data?.hash;
|
|
118
150
|
const normalisedDomain = r.data?.data?.domain ?? r.data?.domain ?? domain;
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
151
|
+
const hasSvg = Boolean(svg);
|
|
152
|
+
// W3.1 — detailResult: the flat {domain, has_svg, svg_size, hash} object
|
|
153
|
+
// renders as a grouped key-value detail for the Rich Card.
|
|
154
|
+
const entries = [
|
|
155
|
+
{ key: "domain", label: "Domain", value: normalisedDomain, format: "text" },
|
|
156
|
+
{ key: "has_svg", label: "Has SVG", value: hasSvg, format: "boolean" },
|
|
157
|
+
{
|
|
158
|
+
key: "svg_size",
|
|
159
|
+
label: "SVG size (bytes)",
|
|
160
|
+
value: svg ? svg.length : 0,
|
|
161
|
+
},
|
|
162
|
+
];
|
|
163
|
+
if (hash) {
|
|
164
|
+
entries.push({ key: "hash", label: "SRI hash", value: hash, format: "code" });
|
|
165
|
+
}
|
|
166
|
+
return detailResult({
|
|
167
|
+
title: `Brand: ${normalisedDomain}`,
|
|
168
|
+
subtitle: hasSvg ? "SVG logo available" : "no SVG logo",
|
|
169
|
+
badge: hasSvg
|
|
170
|
+
? { text: "svg", variant: "success" }
|
|
171
|
+
: { text: "no svg", variant: "secondary" },
|
|
172
|
+
groups: [{ label: "Logo", entries }],
|
|
173
|
+
});
|
|
125
174
|
});
|
|
126
175
|
// ── apimapper_feedback_submit ──────────────────────────────────────
|
|
127
176
|
// F-A6-13: PHP FeedbackController accepts `type`, `message`, and forwards
|
|
@@ -140,27 +189,57 @@ export function registerMiscTools(server) {
|
|
|
140
189
|
email: z.string().email().optional().describe("Reply email (optional)"),
|
|
141
190
|
attachments: z
|
|
142
191
|
.array(z.string().url())
|
|
192
|
+
.max(5)
|
|
143
193
|
.optional()
|
|
144
|
-
.describe("Optional attachment URLs (e.g., screenshots already uploaded elsewhere)"),
|
|
194
|
+
.describe("Optional attachment URLs (e.g., screenshots already uploaded elsewhere). Max 5."),
|
|
195
|
+
idempotency_key: z
|
|
196
|
+
.string()
|
|
197
|
+
.regex(UUID4_REGEX, "idempotency_key must be a UUID v4")
|
|
198
|
+
.optional()
|
|
199
|
+
.describe("Optional UUID4 idempotency key to prevent duplicate submissions on retry. " +
|
|
200
|
+
"If omitted, the MCP auto-generates one. Server dedupes within 15 minutes."),
|
|
145
201
|
},
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
202
|
+
// W1.26 (IA-1): feedback_submit is idempotent — W1.20 added UUID4 dedupe on
|
|
203
|
+
// the server side (15-min window). Re-submitting the same idempotency_key
|
|
204
|
+
// returns the existing record. mutating() captures "writes + idempotent";
|
|
205
|
+
// creating() implied a new row per call which is no longer true.
|
|
206
|
+
annotations: mutating({ title: "Submit Feedback", openWorld: true }),
|
|
207
|
+
}, async ({ type, subject, message, email, attachments, idempotency_key }) => {
|
|
208
|
+
const key = idempotency_key ?? randomUUID();
|
|
209
|
+
// A1-P3-2: named `FeedbackSubmitResponse` interface — hoisted so it
|
|
210
|
+
// mirrors the PHP @phpstan-type FeedbackResponse alias on both
|
|
211
|
+
// FeedbackController (WP) and FeedbackAjaxHandler (Joomla).
|
|
212
|
+
const r = await request("/feedback", {
|
|
213
|
+
method: "POST",
|
|
214
|
+
body: JSON.stringify({
|
|
215
|
+
type,
|
|
216
|
+
subject,
|
|
217
|
+
message,
|
|
218
|
+
email,
|
|
219
|
+
attachments,
|
|
220
|
+
idempotency_key: key,
|
|
221
|
+
}),
|
|
222
|
+
}, { unwrapInnerSuccess: true });
|
|
149
223
|
if (!r.success) {
|
|
150
|
-
return
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
payloadFailed: r.payloadFailed,
|
|
155
|
-
context: { type, subject_len: subject.length },
|
|
156
|
-
hint: r.payloadFailed
|
|
224
|
+
return errorResult({
|
|
225
|
+
message: r.error ?? "feedback submission failed",
|
|
226
|
+
code: r.errorCode ?? (r.status ? String(r.status) : undefined),
|
|
227
|
+
suggestion: r.payloadFailed
|
|
157
228
|
? "Server accepted the request but the proxy did not deliver it. Reason in error field."
|
|
158
229
|
: hintFor(r.errorCode),
|
|
159
|
-
|
|
230
|
+
details: {
|
|
231
|
+
type,
|
|
232
|
+
subject_len: subject.length,
|
|
233
|
+
idempotency_key: key,
|
|
234
|
+
payloadFailed: r.payloadFailed,
|
|
235
|
+
},
|
|
236
|
+
});
|
|
160
237
|
}
|
|
161
238
|
// unwrapInnerSuccess already caught success:false, so here success is true.
|
|
162
239
|
return formatResult({
|
|
163
240
|
submitted: true,
|
|
241
|
+
idempotency_key: r.data?.idempotency_key ?? key,
|
|
242
|
+
duplicate: r.data?.duplicate ?? false,
|
|
164
243
|
}, false, { maxChars: 2000 });
|
|
165
244
|
});
|
|
166
245
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"misc.js","sourceRoot":"","sources":["../../../src/modules/apimapper/misc.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"misc.js","sourceRoot":"","sources":["../../../src/modules/apimapper/misc.ts"],"names":[],"mappings":"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"}
|
|
@@ -215,3 +215,55 @@ export declare const nodeSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
215
215
|
}, z.core.$loose>;
|
|
216
216
|
}, z.core.$strip>], "type">;
|
|
217
217
|
export type FlowNode = z.infer<typeof nodeSchema>;
|
|
218
|
+
/**
|
|
219
|
+
* Strict edge schema shared by flow_create, graph_preview, and graph_validate.
|
|
220
|
+
*
|
|
221
|
+
* Centralized so the 3 tool registrations have identical shape contracts —
|
|
222
|
+
* preventing silent drift where one site accepts a shape the others reject.
|
|
223
|
+
*
|
|
224
|
+
* Before W1.6 each site used `z.array(z.record(z.string(), z.unknown()))` —
|
|
225
|
+
* arbitrary structures (e.g. `{source: 1, target: null}`) passed validation
|
|
226
|
+
* and then failed at graph-execution with confusing errors.
|
|
227
|
+
*
|
|
228
|
+
* Defense-in-depth: source + target are required non-empty strings;
|
|
229
|
+
* non-string types and empty strings are rejected at the Zod boundary.
|
|
230
|
+
*
|
|
231
|
+
* For merge nodes, targetHandle uses "input-0" / "input-1" convention
|
|
232
|
+
* (zero-indexed by input slot — matches frontend BaseNode.tsx Handle id rendering
|
|
233
|
+
* and the backend DagExecutor tolerant input-slot resolution).
|
|
234
|
+
*/
|
|
235
|
+
export declare const edgeSchema: z.ZodObject<{
|
|
236
|
+
id: z.ZodOptional<z.ZodString>;
|
|
237
|
+
source: z.ZodString;
|
|
238
|
+
target: z.ZodString;
|
|
239
|
+
sourceHandle: z.ZodOptional<z.ZodString>;
|
|
240
|
+
targetHandle: z.ZodOptional<z.ZodString>;
|
|
241
|
+
}, z.core.$strip>;
|
|
242
|
+
export type FlowEdge = z.infer<typeof edgeSchema>;
|
|
243
|
+
/**
|
|
244
|
+
* W1.18 (F-32): case-insensitive substring filter applied in-memory after
|
|
245
|
+
* the upstream list fetch.
|
|
246
|
+
*
|
|
247
|
+
* Shared between `apimapper_flow_list` and `apimapper_connection_list` so
|
|
248
|
+
* the two tools cannot drift on semantics (case-folding, undefined-skip,
|
|
249
|
+
* empty-string behaviour). The min-2-char guard lives on each tool's Zod
|
|
250
|
+
* schema (`z.string().min(2).optional()`) — this helper deliberately does
|
|
251
|
+
* NOT enforce the length here so that direct programmatic callers (e.g.
|
|
252
|
+
* unit tests, internal composers) can still pass a 1-char needle when
|
|
253
|
+
* they really mean it. The wire boundary is the gate; this helper is the
|
|
254
|
+
* pure transform.
|
|
255
|
+
*
|
|
256
|
+
* Contract:
|
|
257
|
+
* - `needle === undefined` → returns the input array unchanged (no filter)
|
|
258
|
+
* - `needle === ""` → returns the input array unchanged (empty
|
|
259
|
+
* haystack-match is meaningless; treat as
|
|
260
|
+
* "no filter applied")
|
|
261
|
+
* - otherwise → returns items whose `name` (lowercased)
|
|
262
|
+
* contains the lowercased needle
|
|
263
|
+
*
|
|
264
|
+
* Generic over `T extends { name?: string }` — accepts both `Flow` and
|
|
265
|
+
* `Connection` shapes without adapter wrappers at the call site.
|
|
266
|
+
*/
|
|
267
|
+
export declare function filterByNameQuery<T extends {
|
|
268
|
+
name?: string;
|
|
269
|
+
}>(items: T[], needle: string | undefined): T[];
|
|
@@ -138,11 +138,11 @@ export const mergeNodeSchema = z
|
|
|
138
138
|
.enum(["concat", "join"])
|
|
139
139
|
.describe("'concat' = stack items from both inputs; 'join' = relational join on key. " +
|
|
140
140
|
"Strategies 'append', 'chronological', etc. are NOT valid here."),
|
|
141
|
-
joinKey: z.string().optional().describe("Field on input-
|
|
141
|
+
joinKey: z.string().optional().describe("Field on input-0 (required if strategy='join')"),
|
|
142
142
|
joinKeyRight: z
|
|
143
143
|
.string()
|
|
144
144
|
.optional()
|
|
145
|
-
.describe("Field on input-
|
|
145
|
+
.describe("Field on input-1 (defaults to joinKey when omitted)"),
|
|
146
146
|
joinType: z
|
|
147
147
|
.enum(["left", "right", "inner", "outer"])
|
|
148
148
|
.optional()
|
|
@@ -215,4 +215,72 @@ export const nodeSchema = z
|
|
|
215
215
|
}),
|
|
216
216
|
])
|
|
217
217
|
.describe("Flow node. Discriminator: `type` ∈ source | local-source | filter | transform | merge | output | output-yootheme | output-shortcode");
|
|
218
|
+
// ── edge ─────────────────────────────────────────────────────────────────
|
|
219
|
+
/**
|
|
220
|
+
* Strict edge schema shared by flow_create, graph_preview, and graph_validate.
|
|
221
|
+
*
|
|
222
|
+
* Centralized so the 3 tool registrations have identical shape contracts —
|
|
223
|
+
* preventing silent drift where one site accepts a shape the others reject.
|
|
224
|
+
*
|
|
225
|
+
* Before W1.6 each site used `z.array(z.record(z.string(), z.unknown()))` —
|
|
226
|
+
* arbitrary structures (e.g. `{source: 1, target: null}`) passed validation
|
|
227
|
+
* and then failed at graph-execution with confusing errors.
|
|
228
|
+
*
|
|
229
|
+
* Defense-in-depth: source + target are required non-empty strings;
|
|
230
|
+
* non-string types and empty strings are rejected at the Zod boundary.
|
|
231
|
+
*
|
|
232
|
+
* For merge nodes, targetHandle uses "input-0" / "input-1" convention
|
|
233
|
+
* (zero-indexed by input slot — matches frontend BaseNode.tsx Handle id rendering
|
|
234
|
+
* and the backend DagExecutor tolerant input-slot resolution).
|
|
235
|
+
*/
|
|
236
|
+
export const edgeSchema = z
|
|
237
|
+
.object({
|
|
238
|
+
id: z.string().min(1).optional().describe("Stable edge identifier (optional)"),
|
|
239
|
+
source: z.string().min(1).describe("Source node id (required, non-empty)"),
|
|
240
|
+
target: z.string().min(1).describe("Target node id (required, non-empty)"),
|
|
241
|
+
sourceHandle: z
|
|
242
|
+
.string()
|
|
243
|
+
.min(1)
|
|
244
|
+
.optional()
|
|
245
|
+
.describe("Source-side handle (e.g., 'out')"),
|
|
246
|
+
targetHandle: z
|
|
247
|
+
.string()
|
|
248
|
+
.min(1)
|
|
249
|
+
.optional()
|
|
250
|
+
.describe('Target-side handle (e.g., "input-0" or "input-1" for merge nodes). ' +
|
|
251
|
+
'Legacy "input-A"/"input-B" still accepted for backward-compat but new ' +
|
|
252
|
+
'flows should use the canonical zero-indexed form.'),
|
|
253
|
+
})
|
|
254
|
+
.describe("Flow edge connecting two nodes. Shape: {id?, source, target, sourceHandle?, targetHandle?}");
|
|
255
|
+
// ── name_query filter helper ─────────────────────────────────────────────
|
|
256
|
+
/**
|
|
257
|
+
* W1.18 (F-32): case-insensitive substring filter applied in-memory after
|
|
258
|
+
* the upstream list fetch.
|
|
259
|
+
*
|
|
260
|
+
* Shared between `apimapper_flow_list` and `apimapper_connection_list` so
|
|
261
|
+
* the two tools cannot drift on semantics (case-folding, undefined-skip,
|
|
262
|
+
* empty-string behaviour). The min-2-char guard lives on each tool's Zod
|
|
263
|
+
* schema (`z.string().min(2).optional()`) — this helper deliberately does
|
|
264
|
+
* NOT enforce the length here so that direct programmatic callers (e.g.
|
|
265
|
+
* unit tests, internal composers) can still pass a 1-char needle when
|
|
266
|
+
* they really mean it. The wire boundary is the gate; this helper is the
|
|
267
|
+
* pure transform.
|
|
268
|
+
*
|
|
269
|
+
* Contract:
|
|
270
|
+
* - `needle === undefined` → returns the input array unchanged (no filter)
|
|
271
|
+
* - `needle === ""` → returns the input array unchanged (empty
|
|
272
|
+
* haystack-match is meaningless; treat as
|
|
273
|
+
* "no filter applied")
|
|
274
|
+
* - otherwise → returns items whose `name` (lowercased)
|
|
275
|
+
* contains the lowercased needle
|
|
276
|
+
*
|
|
277
|
+
* Generic over `T extends { name?: string }` — accepts both `Flow` and
|
|
278
|
+
* `Connection` shapes without adapter wrappers at the call site.
|
|
279
|
+
*/
|
|
280
|
+
export function filterByNameQuery(items, needle) {
|
|
281
|
+
if (!needle)
|
|
282
|
+
return items;
|
|
283
|
+
const lowered = needle.toLowerCase();
|
|
284
|
+
return items.filter((item) => (item.name ?? "").toLowerCase().includes(lowered));
|
|
285
|
+
}
|
|
218
286
|
//# sourceMappingURL=node-schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-schema.js","sourceRoot":"","sources":["../../../src/modules/apimapper/node-schema.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"node-schema.js","sourceRoot":"","sources":["../../../src/modules/apimapper/node-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,3 +11,4 @@ export declare function trimSlashes(s: string): string;
|
|
|
11
11
|
* slash is structural, not a path separator.
|
|
12
12
|
*/
|
|
13
13
|
export declare function encodePathPreservingSlashes(s: string): string;
|
|
14
|
+
export declare function normalizeConnectionFromWire(raw: Record<string, unknown>): Record<string, unknown>;
|
|
@@ -34,4 +34,55 @@ export function encodePathPreservingSlashes(s) {
|
|
|
34
34
|
.map((seg) => encodeURIComponent(seg))
|
|
35
35
|
.join("/");
|
|
36
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Bridge camelCase wire-format keys from the `/connections` REST endpoint to
|
|
39
|
+
* the snake_case shape every consumer (connection_list table, connection_get
|
|
40
|
+
* detail, onboarding report) reads. The PHP backend returns
|
|
41
|
+
* `authType`/`credentialId`/etc. (camelCase) but our domain `Connection` type
|
|
42
|
+
* + every formatter reads `auth_type`/`credential_id` (snake_case). Without
|
|
43
|
+
* this bridge, `c.auth_type` evaluates to `undefined` → every connection in
|
|
44
|
+
* the AI's view appears as `auth=none` / `credential_id=null`, regardless of
|
|
45
|
+
* the real linked credential. F-LS-04 (live-smoke 2026-05-20).
|
|
46
|
+
*
|
|
47
|
+
* Behaviour: maps the 17 known camelCase keys to snake_case. Already-
|
|
48
|
+
* snake-case keys win on collision (forward-compat with future backend
|
|
49
|
+
* versions that may emit snake_case natively). Unknown keys pass through
|
|
50
|
+
* untouched. Idempotent — running this twice produces the same shape.
|
|
51
|
+
*
|
|
52
|
+
* The camelCase keys are intentionally preserved on the output so any
|
|
53
|
+
* consumer that already reads them keeps working; the snake_case keys are
|
|
54
|
+
* added in addition. Both representations are present after normalisation,
|
|
55
|
+
* which makes the function idempotent regardless of how often callers
|
|
56
|
+
* apply it.
|
|
57
|
+
*/
|
|
58
|
+
const CAMEL_TO_SNAKE = [
|
|
59
|
+
["authType", "auth_type"],
|
|
60
|
+
["credentialId", "credential_id"],
|
|
61
|
+
["originId", "origin_id"],
|
|
62
|
+
["originHash", "origin_hash"],
|
|
63
|
+
["itemsPath", "items_path"],
|
|
64
|
+
["cacheTtl", "cache_ttl"],
|
|
65
|
+
["templateId", "template_id"],
|
|
66
|
+
["baseUrl", "base_url"],
|
|
67
|
+
["createdAt", "created_at"],
|
|
68
|
+
["updatedAt", "updated_at"],
|
|
69
|
+
["deletedAt", "deleted_at"],
|
|
70
|
+
["authConfig", "auth_config"],
|
|
71
|
+
["computedFields", "computed_fields"],
|
|
72
|
+
["templateFields", "template_fields"],
|
|
73
|
+
["templateFieldLabels", "template_field_labels"],
|
|
74
|
+
["defaultParams", "default_params"],
|
|
75
|
+
["defaultHeaders", "default_headers"],
|
|
76
|
+
];
|
|
77
|
+
export function normalizeConnectionFromWire(raw) {
|
|
78
|
+
const out = { ...raw };
|
|
79
|
+
for (const [camel, snake] of CAMEL_TO_SNAKE) {
|
|
80
|
+
if (camel in out && !(snake in out)) {
|
|
81
|
+
out[snake] = out[camel];
|
|
82
|
+
}
|
|
83
|
+
// intentionally keep the camelCase key as well — forward-compat for
|
|
84
|
+
// any consumer that already reads it; idempotency holds either way.
|
|
85
|
+
}
|
|
86
|
+
return out;
|
|
87
|
+
}
|
|
37
88
|
//# sourceMappingURL=normalizers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalizers.js","sourceRoot":"","sources":["../../../src/modules/apimapper/normalizers.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,EAAE;AACF,2EAA2E;AAC3E,4EAA4E;AAC5E,yEAAyE;AAIzE,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IACxC,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IACzD,oEAAoE;IACpE,oEAAoE;IACpE,uEAAuE;IACvE,oBAAoB;IACpB,sCAAsC;IACtC,OAAO,CAAC,IAAI,CACV,wDAAwD,KAAK,4BAA4B,CAC1F,CAAC;IACF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,CAAS;IACnC,OAAO,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AACrC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CAAC,CAAS;IACnD,OAAO,CAAC;SACL,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;SACrC,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC"}
|
|
1
|
+
{"version":3,"file":"normalizers.js","sourceRoot":"","sources":["../../../src/modules/apimapper/normalizers.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,EAAE;AACF,2EAA2E;AAC3E,4EAA4E;AAC5E,yEAAyE;AAIzE,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IACxC,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IACzD,oEAAoE;IACpE,oEAAoE;IACpE,uEAAuE;IACvE,oBAAoB;IACpB,sCAAsC;IACtC,OAAO,CAAC,IAAI,CACV,wDAAwD,KAAK,4BAA4B,CAC1F,CAAC;IACF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,CAAS;IACnC,OAAO,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AACrC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CAAC,CAAS;IACnD,OAAO,CAAC;SACL,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;SACrC,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,cAAc,GAA6C;IAC/D,CAAC,UAAU,EAAE,WAAW,CAAC;IACzB,CAAC,cAAc,EAAE,eAAe,CAAC;IACjC,CAAC,UAAU,EAAE,WAAW,CAAC;IACzB,CAAC,YAAY,EAAE,aAAa,CAAC;IAC7B,CAAC,WAAW,EAAE,YAAY,CAAC;IAC3B,CAAC,UAAU,EAAE,WAAW,CAAC;IACzB,CAAC,YAAY,EAAE,aAAa,CAAC;IAC7B,CAAC,SAAS,EAAE,UAAU,CAAC;IACvB,CAAC,WAAW,EAAE,YAAY,CAAC;IAC3B,CAAC,WAAW,EAAE,YAAY,CAAC;IAC3B,CAAC,WAAW,EAAE,YAAY,CAAC;IAC3B,CAAC,YAAY,EAAE,aAAa,CAAC;IAC7B,CAAC,gBAAgB,EAAE,iBAAiB,CAAC;IACrC,CAAC,gBAAgB,EAAE,iBAAiB,CAAC;IACrC,CAAC,qBAAqB,EAAE,uBAAuB,CAAC;IAChD,CAAC,eAAe,EAAE,gBAAgB,CAAC;IACnC,CAAC,gBAAgB,EAAE,iBAAiB,CAAC;CACtC,CAAC;AAEF,MAAM,UAAU,2BAA2B,CACzC,GAA4B;IAE5B,MAAM,GAAG,GAA4B,EAAE,GAAG,GAAG,EAAE,CAAC;IAChD,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,cAAc,EAAE,CAAC;QAC5C,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,EAAE,CAAC;YACpC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QACD,oEAAoE;QACpE,oEAAoE;IACtE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|