@wootsup/mcp 0.1.0-rc.9 → 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 +71 -5
- 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 +126 -4
- 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
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
// src/modules/apimapper/license-format.ts — W3.1 structuredContent helpers
|
|
2
|
+
//
|
|
3
|
+
// rc.13 Welle 3 (2026-05-20) — extracted from license.ts when the migration
|
|
4
|
+
// to the toolkit's structuredContent builders added the detail builder for
|
|
5
|
+
// license_status.
|
|
6
|
+
//
|
|
7
|
+
// - license_status → detailResult (display="detail").
|
|
8
|
+
// - IA-10 (W3.9): an actionable "Next steps" group.
|
|
9
|
+
//
|
|
10
|
+
// SECURITY: license.ts handles the customer's license KEY. detailResult
|
|
11
|
+
// serializes its payload into `_meta.ui.payload`, so a raw key reaching the
|
|
12
|
+
// builder would leak into the Rich Card. `maskLicenseKey()` runs BEFORE the
|
|
13
|
+
// builder and is the single redaction point — only a short non-secret prefix
|
|
14
|
+
// + length-bracket survives. No builder here ever receives the full key.
|
|
15
|
+
import { detailResult, } from "@getimo/mcp-toolkit";
|
|
16
|
+
/**
|
|
17
|
+
* Mask a license key for display. Keeps only a short, non-secret leading
|
|
18
|
+
* fragment so the user can recognise *which* key is active, then replaces
|
|
19
|
+
* the secret body with a fixed redaction marker. The full key is NEVER
|
|
20
|
+
* returned. An empty/short value returns a plain redaction marker.
|
|
21
|
+
*
|
|
22
|
+
* Examples:
|
|
23
|
+
* "AM-PRO-SECRET12345-DEADBEEF99" → "AM-PRO…•••• (28 chars)"
|
|
24
|
+
* "short" → "•••• (redacted)"
|
|
25
|
+
*/
|
|
26
|
+
export function maskLicenseKey(key) {
|
|
27
|
+
if (typeof key !== "string" || key.length === 0)
|
|
28
|
+
return "—";
|
|
29
|
+
// Reveal at most the first 6 chars and only when the key is long enough
|
|
30
|
+
// that the prefix is not the whole secret.
|
|
31
|
+
if (key.length <= 8)
|
|
32
|
+
return "•••• (redacted)";
|
|
33
|
+
const prefix = key.slice(0, 6);
|
|
34
|
+
return `${prefix}…•••• (${key.length} chars)`;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Build a structured detail view for license_status.
|
|
38
|
+
*
|
|
39
|
+
* SECURITY: `lic.license_key`, if present, is routed through
|
|
40
|
+
* `maskLicenseKey()` — the full key value never reaches a DetailEntry, so it
|
|
41
|
+
* cannot land in the content text OR `_meta.ui.payload`.
|
|
42
|
+
*
|
|
43
|
+
* IA-10: a dedicated "Next steps" group carries the license follow-up calls.
|
|
44
|
+
*/
|
|
45
|
+
export function buildLicenseDetail(lic) {
|
|
46
|
+
const str = (v) => typeof v === "string"
|
|
47
|
+
? v
|
|
48
|
+
: typeof v === "number" || typeof v === "boolean"
|
|
49
|
+
? String(v)
|
|
50
|
+
: null;
|
|
51
|
+
const identityAll = [
|
|
52
|
+
{ key: "tier", label: "Tier", value: str(lic.tier) ?? "—", format: "badge" },
|
|
53
|
+
{
|
|
54
|
+
key: "is_valid",
|
|
55
|
+
label: "Valid",
|
|
56
|
+
value: typeof lic.is_valid === "boolean" ? lic.is_valid : null,
|
|
57
|
+
format: "boolean",
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
// SECURITY: masked — the full license key never reaches this entry.
|
|
61
|
+
key: "license_key",
|
|
62
|
+
label: "License key",
|
|
63
|
+
value: lic.license_key !== undefined ? maskLicenseKey(lic.license_key) : null,
|
|
64
|
+
format: "code",
|
|
65
|
+
},
|
|
66
|
+
];
|
|
67
|
+
const identity = identityAll.filter((e) => e.value !== null);
|
|
68
|
+
const validityAll = [
|
|
69
|
+
{
|
|
70
|
+
key: "expires_at",
|
|
71
|
+
label: "Expires",
|
|
72
|
+
value: lic.expires_at === null ? "never" : str(lic.expires_at),
|
|
73
|
+
format: "date",
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
key: "days_remaining",
|
|
77
|
+
label: "Days remaining",
|
|
78
|
+
value: lic.days_remaining === null
|
|
79
|
+
? "n/a"
|
|
80
|
+
: typeof lic.days_remaining === "number"
|
|
81
|
+
? lic.days_remaining
|
|
82
|
+
: null,
|
|
83
|
+
},
|
|
84
|
+
];
|
|
85
|
+
const validity = validityAll.filter((e) => e.value !== null);
|
|
86
|
+
const channelAll = [
|
|
87
|
+
{
|
|
88
|
+
key: "beta_channel",
|
|
89
|
+
label: "Beta channel",
|
|
90
|
+
value: typeof lic.beta_channel === "boolean" ? lic.beta_channel : null,
|
|
91
|
+
format: "boolean",
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
key: "is_early_access",
|
|
95
|
+
label: "Early access",
|
|
96
|
+
value: typeof lic.is_early_access === "boolean" ? lic.is_early_access : null,
|
|
97
|
+
format: "boolean",
|
|
98
|
+
},
|
|
99
|
+
];
|
|
100
|
+
const channel = channelAll.filter((e) => e.value !== null);
|
|
101
|
+
const groups = [{ label: "License", entries: identity }];
|
|
102
|
+
if (validity.length > 0)
|
|
103
|
+
groups.push({ label: "Validity", entries: validity });
|
|
104
|
+
// Always show the channel group so the LLM can read beta-channel state even
|
|
105
|
+
// when both flags are absent (defaults surfaced as a hint instead).
|
|
106
|
+
groups.push({
|
|
107
|
+
label: "Release channel",
|
|
108
|
+
entries: channel.length > 0
|
|
109
|
+
? channel
|
|
110
|
+
: [
|
|
111
|
+
{
|
|
112
|
+
key: "beta_channel",
|
|
113
|
+
label: "Beta channel",
|
|
114
|
+
value: "unknown (call apimapper_license_revalidate)",
|
|
115
|
+
},
|
|
116
|
+
],
|
|
117
|
+
});
|
|
118
|
+
groups.push({
|
|
119
|
+
// IA-10 (W3.9): actionable next steps in a dedicated group.
|
|
120
|
+
label: "Next steps",
|
|
121
|
+
entries: [
|
|
122
|
+
{
|
|
123
|
+
key: "revalidate",
|
|
124
|
+
label: "Revalidate",
|
|
125
|
+
value: "apimapper_license_revalidate() — force a fresh validation round-trip to the license server",
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
key: "beta",
|
|
129
|
+
label: "Beta channel",
|
|
130
|
+
value: "apimapper_license_beta_channel({ enabled }) — opt in/out of beta releases",
|
|
131
|
+
},
|
|
132
|
+
],
|
|
133
|
+
});
|
|
134
|
+
return detailResult({
|
|
135
|
+
title: lic.tier ? `${lic.tier} license` : "License status",
|
|
136
|
+
subtitle: lic.is_valid === true
|
|
137
|
+
? "valid"
|
|
138
|
+
: lic.is_valid === false
|
|
139
|
+
? "invalid"
|
|
140
|
+
: undefined,
|
|
141
|
+
badge: lic.is_valid === true
|
|
142
|
+
? { text: "valid", variant: "success" }
|
|
143
|
+
: lic.is_valid === false
|
|
144
|
+
? { text: "invalid", variant: "destructive" }
|
|
145
|
+
: { text: "license", variant: "secondary" },
|
|
146
|
+
groups,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=license-format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"license-format.js","sourceRoot":"","sources":["../../../src/modules/apimapper/license-format.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,EAAE;AACF,4EAA4E;AAC5E,2EAA2E;AAC3E,kBAAkB;AAClB,EAAE;AACF,wDAAwD;AACxD,sDAAsD;AACtD,EAAE;AACF,wEAAwE;AACxE,4EAA4E;AAC5E,4EAA4E;AAC5E,6EAA6E;AAC7E,yEAAyE;AACzE,OAAO,EACL,YAAY,GAGb,MAAM,qBAAqB,CAAC;AAG7B;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAAC,GAAuB;IACpD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAC5D,wEAAwE;IACxE,2CAA2C;IAC3C,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,iBAAiB,CAAC;IAC9C,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/B,OAAO,GAAG,MAAM,UAAU,GAAG,CAAC,MAAM,SAAS,CAAC;AAChD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAkB;IACnD,MAAM,GAAG,GAAG,CAAC,CAAU,EAAiB,EAAE,CACxC,OAAO,CAAC,KAAK,QAAQ;QACnB,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,SAAS;YAC/C,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YACX,CAAC,CAAC,IAAI,CAAC;IAEb,MAAM,WAAW,GAAkB;QACjC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;QAC5E;YACE,GAAG,EAAE,UAAU;YACf,KAAK,EAAE,OAAO;YACd,KAAK,EAAE,OAAO,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;YAC9D,MAAM,EAAE,SAAS;SAClB;QACD;YACE,oEAAoE;YACpE,GAAG,EAAE,aAAa;YAClB,KAAK,EAAE,aAAa;YACpB,KAAK,EAAE,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI;YAC7E,MAAM,EAAE,MAAM;SACf;KACF,CAAC;IACF,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;IAE7D,MAAM,WAAW,GAAkB;QACjC;YACE,GAAG,EAAE,YAAY;YACjB,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC;YAC9D,MAAM,EAAE,MAAM;SACf;QACD;YACE,GAAG,EAAE,gBAAgB;YACrB,KAAK,EAAE,gBAAgB;YACvB,KAAK,EACH,GAAG,CAAC,cAAc,KAAK,IAAI;gBACzB,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,OAAO,GAAG,CAAC,cAAc,KAAK,QAAQ;oBACtC,CAAC,CAAC,GAAG,CAAC,cAAc;oBACpB,CAAC,CAAC,IAAI;SACb;KACF,CAAC;IACF,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;IAE7D,MAAM,UAAU,GAAkB;QAChC;YACE,GAAG,EAAE,cAAc;YACnB,KAAK,EAAE,cAAc;YACrB,KAAK,EAAE,OAAO,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI;YACtE,MAAM,EAAE,SAAS;SAClB;QACD;YACE,GAAG,EAAE,iBAAiB;YACtB,KAAK,EAAE,cAAc;YACrB,KAAK,EAAE,OAAO,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI;YAC5E,MAAM,EAAE,SAAS;SAClB;KACF,CAAC;IACF,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;IAE3D,MAAM,MAAM,GAAkB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IACxE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC/E,4EAA4E;IAC5E,oEAAoE;IACpE,MAAM,CAAC,IAAI,CAAC;QACV,KAAK,EAAE,iBAAiB;QACxB,OAAO,EACL,OAAO,CAAC,MAAM,GAAG,CAAC;YAChB,CAAC,CAAC,OAAO;YACT,CAAC,CAAC;gBACE;oBACE,GAAG,EAAE,cAAc;oBACnB,KAAK,EAAE,cAAc;oBACrB,KAAK,EAAE,6CAA6C;iBACrD;aACF;KACR,CAAC,CAAC;IACH,MAAM,CAAC,IAAI,CAAC;QACV,4DAA4D;QAC5D,KAAK,EAAE,YAAY;QACnB,OAAO,EAAE;YACP;gBACE,GAAG,EAAE,YAAY;gBACjB,KAAK,EAAE,YAAY;gBACnB,KAAK,EACH,4FAA4F;aAC/F;YACD;gBACE,GAAG,EAAE,MAAM;gBACX,KAAK,EAAE,cAAc;gBACrB,KAAK,EACH,2EAA2E;aAC9E;SACF;KACF,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC;QAClB,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,gBAAgB;QAC1D,QAAQ,EACN,GAAG,CAAC,QAAQ,KAAK,IAAI;YACnB,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,GAAG,CAAC,QAAQ,KAAK,KAAK;gBACtB,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,SAAS;QACjB,KAAK,EACH,GAAG,CAAC,QAAQ,KAAK,IAAI;YACnB,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE;YACvC,CAAC,CAAC,GAAG,CAAC,QAAQ,KAAK,KAAK;gBACtB,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE;gBAC7C,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE;QACjD,MAAM;KACP,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ToolRegistrar } from "./gateway/capturing-server.js";
|
|
2
2
|
/**
|
|
3
3
|
* Mapped license shape surfaced to MCP callers.
|
|
4
4
|
*
|
|
@@ -22,4 +22,18 @@ export interface MappedLicense {
|
|
|
22
22
|
is_early_access?: boolean;
|
|
23
23
|
discord_user_id?: string | null;
|
|
24
24
|
}
|
|
25
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Secret-safe variant of {@link mapLicense}: returns the same mapped shape,
|
|
27
|
+
* but with `license_key` routed through {@link maskLicenseKey} (the single
|
|
28
|
+
* redaction point shared with the detailResult builder).
|
|
29
|
+
*
|
|
30
|
+
* SECURITY (F-5.1, Pass-1 consolidation): the 4 mutating license tools
|
|
31
|
+
* (activate/deactivate/revalidate/refresh) spread the mapped license into a
|
|
32
|
+
* formatResult payload. Spreading raw `mapLicense(...)` leaked the full key
|
|
33
|
+
* into `content[0].text` (LLM channel) and any structured payload — through
|
|
34
|
+
* the gateway (`apimapper_advanced`) these tools are reachable, so the leak
|
|
35
|
+
* is the same severity as a log leak. Every call-site that surfaces the
|
|
36
|
+
* mapped license to a tool result MUST use this helper, not raw `mapLicense`.
|
|
37
|
+
*/
|
|
38
|
+
export declare function mapLicenseSafe(d: unknown): MappedLicense;
|
|
39
|
+
export declare function registerLicenseTools(server: ToolRegistrar): void;
|
|
@@ -1,7 +1,29 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { formatResult,
|
|
2
|
+
import { formatResult, errorResult, readOnly, mutating, destructive, } from "@getimo/mcp-toolkit";
|
|
3
3
|
import { request, hintFor } from "./client.js";
|
|
4
4
|
import { unwrapEntity } from "./envelope.js";
|
|
5
|
+
import { buildLicenseDetail, maskLicenseKey } from "./license-format.js";
|
|
6
|
+
/**
|
|
7
|
+
* Secret-safe variant of {@link mapLicense}: returns the same mapped shape,
|
|
8
|
+
* but with `license_key` routed through {@link maskLicenseKey} (the single
|
|
9
|
+
* redaction point shared with the detailResult builder).
|
|
10
|
+
*
|
|
11
|
+
* SECURITY (F-5.1, Pass-1 consolidation): the 4 mutating license tools
|
|
12
|
+
* (activate/deactivate/revalidate/refresh) spread the mapped license into a
|
|
13
|
+
* formatResult payload. Spreading raw `mapLicense(...)` leaked the full key
|
|
14
|
+
* into `content[0].text` (LLM channel) and any structured payload — through
|
|
15
|
+
* the gateway (`apimapper_advanced`) these tools are reachable, so the leak
|
|
16
|
+
* is the same severity as a log leak. Every call-site that surfaces the
|
|
17
|
+
* mapped license to a tool result MUST use this helper, not raw `mapLicense`.
|
|
18
|
+
*/
|
|
19
|
+
export function mapLicenseSafe(d) {
|
|
20
|
+
const m = mapLicense(d);
|
|
21
|
+
// Preserve the field's presence (so consumers can still detect "license
|
|
22
|
+
// key set") while replacing the secret body with the shared mask.
|
|
23
|
+
if (m.license_key !== undefined)
|
|
24
|
+
m.license_key = maskLicenseKey(m.license_key);
|
|
25
|
+
return m;
|
|
26
|
+
}
|
|
5
27
|
function mapLicense(d) {
|
|
6
28
|
if (!d || typeof d !== "object")
|
|
7
29
|
return {};
|
|
@@ -38,17 +60,23 @@ export function registerLicenseTools(server) {
|
|
|
38
60
|
description: "Fetch the current license tier, expiry, beta-channel state, and feature flags." +
|
|
39
61
|
"\n\nExample:\n apimapper_license_status({})",
|
|
40
62
|
inputSchema: {},
|
|
41
|
-
annotations: readOnly(),
|
|
63
|
+
annotations: readOnly({ title: "Get License Status", openWorld: true }),
|
|
42
64
|
}, async () => {
|
|
43
65
|
const r = await request("/license");
|
|
44
66
|
if (!r.success) {
|
|
45
|
-
return
|
|
67
|
+
return errorResult({
|
|
68
|
+
message: r.error ?? "license status failed",
|
|
69
|
+
code: r.errorCode ?? (r.status ? String(r.status) : undefined),
|
|
70
|
+
suggestion: hintFor(r.errorCode),
|
|
71
|
+
details: {},
|
|
72
|
+
});
|
|
46
73
|
}
|
|
47
74
|
// PHP nests license blob under `license` (LicenseHandler::getStatus).
|
|
48
75
|
// Audit: F-A4-06.
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
76
|
+
// W3.1 — detailResult: grouped key-value detail for the Rich Card.
|
|
77
|
+
// SECURITY: buildLicenseDetail masks the license_key before any
|
|
78
|
+
// DetailEntry is constructed — the full key never reaches the payload.
|
|
79
|
+
return buildLicenseDetail(mapLicense(unwrapEntity(r.data, "license") ?? r.data));
|
|
52
80
|
});
|
|
53
81
|
// ── apimapper_license_activate ─────────────────────────────────────
|
|
54
82
|
server.registerTool("apimapper_license_activate", {
|
|
@@ -59,23 +87,26 @@ export function registerLicenseTools(server) {
|
|
|
59
87
|
license_key: z.string().min(8).describe('License key (e.g., "AM-XXXX-XXXX-XXXX-XXXX")'),
|
|
60
88
|
email: z.string().email().optional().describe("Account email associated with the key"),
|
|
61
89
|
},
|
|
62
|
-
|
|
90
|
+
// W1.26 (IA-1): license activation is idempotent — calling with the same
|
|
91
|
+
// key yields the same activated state, no duplicate license rows. The
|
|
92
|
+
// matching deactivate is destructive(); activate is its mutating() inverse.
|
|
93
|
+
annotations: mutating({ title: "Activate License", openWorld: true }),
|
|
63
94
|
}, async ({ license_key, email }) => {
|
|
64
95
|
const r = await request("/license/activate", { method: "POST", body: JSON.stringify({ license_key, email }) }, { unwrapInnerSuccess: true });
|
|
65
96
|
if (!r.success) {
|
|
66
|
-
return
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
payloadFailed: r.payloadFailed,
|
|
71
|
-
context: { email },
|
|
72
|
-
hint: r.payloadFailed
|
|
97
|
+
return errorResult({
|
|
98
|
+
message: r.error ?? "license activation failed",
|
|
99
|
+
code: r.errorCode ?? (r.status ? String(r.status) : undefined),
|
|
100
|
+
suggestion: r.payloadFailed
|
|
73
101
|
? "License-server rejected the key. Verify the key + email pairing and activation slots."
|
|
74
102
|
: hintFor(r.errorCode),
|
|
75
|
-
|
|
103
|
+
details: { email, payloadFailed: r.payloadFailed },
|
|
104
|
+
});
|
|
76
105
|
}
|
|
77
106
|
// Audit: F-A4-06.
|
|
78
|
-
|
|
107
|
+
// SECURITY F-5.1: mapLicenseSafe masks `license_key` before the spread
|
|
108
|
+
// so the full key cannot reach `content[0].text` or any structured payload.
|
|
109
|
+
return formatResult({ activated: true, ...mapLicenseSafe(unwrapEntity(r.data, "license") ?? r.data) }, false, { maxChars: 2500 });
|
|
79
110
|
});
|
|
80
111
|
// ── apimapper_license_deactivate ───────────────────────────────────
|
|
81
112
|
server.registerTool("apimapper_license_deactivate", {
|
|
@@ -88,7 +119,7 @@ export function registerLicenseTools(server) {
|
|
|
88
119
|
.default(false)
|
|
89
120
|
.describe("Must be true to execute. Ask user for confirmation first."),
|
|
90
121
|
},
|
|
91
|
-
annotations: destructive(),
|
|
122
|
+
annotations: destructive({ title: "Deactivate License", openWorld: true }),
|
|
92
123
|
}, async ({ confirm }) => {
|
|
93
124
|
if (!confirm) {
|
|
94
125
|
return formatResult({
|
|
@@ -100,11 +131,17 @@ export function registerLicenseTools(server) {
|
|
|
100
131
|
}
|
|
101
132
|
const r = await request("/license/deactivate", { method: "POST" });
|
|
102
133
|
if (!r.success) {
|
|
103
|
-
return
|
|
134
|
+
return errorResult({
|
|
135
|
+
message: r.error ?? "license deactivation failed",
|
|
136
|
+
code: r.errorCode ?? (r.status ? String(r.status) : undefined),
|
|
137
|
+
suggestion: hintFor(r.errorCode),
|
|
138
|
+
details: {},
|
|
139
|
+
});
|
|
104
140
|
}
|
|
105
141
|
// Audit: F-A4-06 partial — deactivate may or may not surface a license
|
|
106
142
|
// blob; unwrap defensively.
|
|
107
|
-
|
|
143
|
+
// SECURITY F-5.1: mapLicenseSafe masks `license_key` before the spread.
|
|
144
|
+
return formatResult({ deactivated: true, ...mapLicenseSafe(unwrapEntity(r.data, "license") ?? r.data) }, false, { maxChars: 2000 });
|
|
108
145
|
});
|
|
109
146
|
// ── apimapper_license_revalidate ───────────────────────────────────
|
|
110
147
|
server.registerTool("apimapper_license_revalidate", {
|
|
@@ -112,21 +149,20 @@ export function registerLicenseTools(server) {
|
|
|
112
149
|
description: "Force a fresh validation call to the license server (network round-trip)." +
|
|
113
150
|
"\n\nExample:\n apimapper_license_revalidate({})",
|
|
114
151
|
inputSchema: {},
|
|
115
|
-
annotations: mutating(),
|
|
152
|
+
annotations: mutating({ title: "Revalidate License", openWorld: true }),
|
|
116
153
|
}, async () => {
|
|
117
154
|
const r = await request("/license/revalidate", { method: "POST" }, { unwrapInnerSuccess: true });
|
|
118
155
|
if (!r.success) {
|
|
119
|
-
return
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
payloadFailed: r.payloadFailed,
|
|
124
|
-
|
|
125
|
-
hint: hintFor(r.errorCode),
|
|
126
|
-
}, true);
|
|
156
|
+
return errorResult({
|
|
157
|
+
message: r.error ?? "license revalidation failed",
|
|
158
|
+
code: r.errorCode ?? (r.status ? String(r.status) : undefined),
|
|
159
|
+
suggestion: hintFor(r.errorCode),
|
|
160
|
+
details: { payloadFailed: r.payloadFailed },
|
|
161
|
+
});
|
|
127
162
|
}
|
|
128
163
|
// Audit: F-A4-06.
|
|
129
|
-
|
|
164
|
+
// SECURITY F-5.1: mapLicenseSafe masks `license_key` before the spread.
|
|
165
|
+
return formatResult({ revalidated: true, ...mapLicenseSafe(unwrapEntity(r.data, "license") ?? r.data) }, false, { maxChars: 2500 });
|
|
130
166
|
});
|
|
131
167
|
// ── apimapper_license_refresh ──────────────────────────────────────
|
|
132
168
|
server.registerTool("apimapper_license_refresh", {
|
|
@@ -135,14 +171,20 @@ export function registerLicenseTools(server) {
|
|
|
135
171
|
"Use after manually editing the license_key field." +
|
|
136
172
|
"\n\nExample:\n apimapper_license_refresh({})",
|
|
137
173
|
inputSchema: {},
|
|
138
|
-
annotations: mutating(),
|
|
174
|
+
annotations: mutating({ title: "Refresh License", openWorld: true }),
|
|
139
175
|
}, async () => {
|
|
140
176
|
const r = await request("/license/refresh", { method: "POST" });
|
|
141
177
|
if (!r.success) {
|
|
142
|
-
return
|
|
178
|
+
return errorResult({
|
|
179
|
+
message: r.error ?? "license refresh failed",
|
|
180
|
+
code: r.errorCode ?? (r.status ? String(r.status) : undefined),
|
|
181
|
+
suggestion: hintFor(r.errorCode),
|
|
182
|
+
details: {},
|
|
183
|
+
});
|
|
143
184
|
}
|
|
144
185
|
// Audit: F-A4-06.
|
|
145
|
-
|
|
186
|
+
// SECURITY F-5.1: mapLicenseSafe masks `license_key` before the spread.
|
|
187
|
+
return formatResult({ refreshed: true, ...mapLicenseSafe(unwrapEntity(r.data, "license") ?? r.data) }, false, { maxChars: 2500 });
|
|
146
188
|
});
|
|
147
189
|
// ── apimapper_license_beta_channel ─────────────────────────────────
|
|
148
190
|
server.registerTool("apimapper_license_beta_channel", {
|
|
@@ -152,19 +194,25 @@ export function registerLicenseTools(server) {
|
|
|
152
194
|
inputSchema: {
|
|
153
195
|
enabled: z.boolean().describe("true to opt-in to beta releases, false to revert to stable"),
|
|
154
196
|
},
|
|
155
|
-
annotations: mutating(),
|
|
197
|
+
annotations: mutating({ title: "Toggle Beta Channel", openWorld: true }),
|
|
156
198
|
}, async ({ enabled }) => {
|
|
157
199
|
const r = await request("/license/beta-channel", {
|
|
158
200
|
method: "POST",
|
|
159
201
|
body: JSON.stringify({ enabled }),
|
|
160
202
|
});
|
|
161
203
|
if (!r.success) {
|
|
162
|
-
return
|
|
204
|
+
return errorResult({
|
|
205
|
+
message: r.error ?? "beta channel toggle failed",
|
|
206
|
+
code: r.errorCode ?? (r.status ? String(r.status) : undefined),
|
|
207
|
+
suggestion: hintFor(r.errorCode),
|
|
208
|
+
details: { enabled },
|
|
209
|
+
});
|
|
163
210
|
}
|
|
164
211
|
// PHP toggleBetaChannel returns flat {beta_channel, message} — no
|
|
165
|
-
// 'license' key here, so we read
|
|
166
|
-
// F-A4-07 (anomalous shape, works by happenstance).
|
|
167
|
-
|
|
212
|
+
// 'license' key here, so we read mapLicenseSafe() at the top level.
|
|
213
|
+
// Audit: F-A4-07 (anomalous shape, works by happenstance).
|
|
214
|
+
// SECURITY F-5.1: mapLicenseSafe masks `license_key` before the spread.
|
|
215
|
+
return formatResult({ updated: true, beta_channel: enabled, ...mapLicenseSafe(r.data) }, false, { maxChars: 2500 });
|
|
168
216
|
});
|
|
169
217
|
}
|
|
170
218
|
//# sourceMappingURL=license.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"license.js","sourceRoot":"","sources":["../../../src/modules/apimapper/license.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,YAAY,EACZ,
|
|
1
|
+
{"version":3,"file":"license.js","sourceRoot":"","sources":["../../../src/modules/apimapper/license.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare function registerLocalSourceTools(server:
|
|
1
|
+
import type { ToolRegistrar } from "./gateway/capturing-server.js";
|
|
2
|
+
export declare function registerLocalSourceTools(server: ToolRegistrar): void;
|
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { formatResult, readOnly } from "@getimo/mcp-toolkit";
|
|
2
|
+
import { formatResult, errorResult, readOnly } from "@getimo/mcp-toolkit";
|
|
3
3
|
import { request, hintFor } from "./client.js";
|
|
4
4
|
import { encodePathPreservingSlashes } from "./normalizers.js";
|
|
5
|
+
// rc.13 Welle 3 (2026-05-20) — error branches upgraded to the toolkit's
|
|
6
|
+
// errorResult builder. Object-passthrough judgment (W3.1 note 2): every
|
|
7
|
+
// local-source SUCCESS payload is arbitrary-shape data with NO stable column
|
|
8
|
+
// or field schema — local_source_types returns provider-defined type
|
|
9
|
+
// descriptors, local_source_query returns WP posts / Joomla articles with
|
|
10
|
+
// per-content-type field sets, local_source_schema / local_source_filter_options
|
|
11
|
+
// return free-form schema/option objects. Forcing any onto tableResult /
|
|
12
|
+
// detailResult would mean inventing a column/field map that drifts the moment
|
|
13
|
+
// a content type adds a field. So all four KEEP formatResult on success; only
|
|
14
|
+
// the ERROR branch upgrades to errorResult (display="error", isError:true).
|
|
5
15
|
export function registerLocalSourceTools(server) {
|
|
6
16
|
// ── apimapper_local_source_types ───────────────────────────────────
|
|
7
17
|
server.registerTool("apimapper_local_source_types", {
|
|
@@ -10,11 +20,16 @@ export function registerLocalSourceTools(server) {
|
|
|
10
20
|
"Local sources don't need a connection — they query WP/Joomla internal data." +
|
|
11
21
|
"\n\nExample:\n apimapper_local_source_types({})",
|
|
12
22
|
inputSchema: {},
|
|
13
|
-
annotations: readOnly(),
|
|
23
|
+
annotations: readOnly({ title: "List Local Source Types", openWorld: true }),
|
|
14
24
|
}, async () => {
|
|
15
25
|
const r = await request("/local-sources/types");
|
|
16
26
|
if (!r.success) {
|
|
17
|
-
return
|
|
27
|
+
return errorResult({
|
|
28
|
+
message: r.error ?? "local source types failed",
|
|
29
|
+
code: r.errorCode ?? (r.status ? String(r.status) : undefined),
|
|
30
|
+
suggestion: hintFor(r.errorCode),
|
|
31
|
+
details: {},
|
|
32
|
+
});
|
|
18
33
|
}
|
|
19
34
|
const types = Array.isArray(r.data?.types) ? r.data.types : [];
|
|
20
35
|
return formatResult({ count: types.length, types }, false, { maxChars: 4000 });
|
|
@@ -34,11 +49,16 @@ export function registerLocalSourceTools(server) {
|
|
|
34
49
|
.regex(/^[a-z]+\/[a-z0-9_-]+$/, "Must be in the form 'platform/type', e.g., 'wordpress/posts'")
|
|
35
50
|
.describe('Local source type id in "platform/type" form (e.g., "wordpress/posts", "joomla/articles"). Use apimapper_local_source_types.'),
|
|
36
51
|
},
|
|
37
|
-
annotations: readOnly(),
|
|
52
|
+
annotations: readOnly({ title: "Get Local Source Schema", openWorld: true }),
|
|
38
53
|
}, async ({ type_id }) => {
|
|
39
54
|
const r = await request(`/local-sources/schema/${encodePathPreservingSlashes(type_id)}`);
|
|
40
55
|
if (!r.success) {
|
|
41
|
-
return
|
|
56
|
+
return errorResult({
|
|
57
|
+
message: r.error ?? "local source schema failed",
|
|
58
|
+
code: r.errorCode ?? (r.status ? String(r.status) : undefined),
|
|
59
|
+
suggestion: hintFor(r.errorCode),
|
|
60
|
+
details: { type_id },
|
|
61
|
+
});
|
|
42
62
|
}
|
|
43
63
|
return formatResult(r.data ?? {}, false, { maxChars: 4000 });
|
|
44
64
|
});
|
|
@@ -57,26 +77,30 @@ export function registerLocalSourceTools(server) {
|
|
|
57
77
|
.regex(/^[a-z_]+$/, "Must be lowercase with underscores")
|
|
58
78
|
.describe('Filter field name (e.g., "category", "tag", "author")'),
|
|
59
79
|
},
|
|
60
|
-
annotations: readOnly(),
|
|
80
|
+
annotations: readOnly({ title: "Get Local Source Filter Options", openWorld: true }),
|
|
61
81
|
}, async ({ type_id, filter_name }) => {
|
|
62
82
|
const r = await request(`/local-sources/filter-options/${encodePathPreservingSlashes(type_id)}/${encodeURIComponent(filter_name)}`);
|
|
63
83
|
if (!r.success) {
|
|
64
|
-
return
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}, true);
|
|
84
|
+
return errorResult({
|
|
85
|
+
message: r.error ?? "local source filter options failed",
|
|
86
|
+
code: r.errorCode ?? (r.status ? String(r.status) : undefined),
|
|
87
|
+
suggestion: hintFor(r.errorCode),
|
|
88
|
+
details: { type_id, filter_name },
|
|
89
|
+
});
|
|
71
90
|
}
|
|
72
91
|
return formatResult(r.data ?? {}, false, { maxChars: 4000 });
|
|
73
92
|
});
|
|
74
93
|
// ── apimapper_local_source_query ───────────────────────────────────
|
|
75
94
|
server.registerTool("apimapper_local_source_query", {
|
|
76
95
|
title: "Query Local Source Data",
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
96
|
+
// rc.10 A7 (2026-05-19) — anti-thrash for AI agents: the `offset`
|
|
97
|
+
// parameter exists for UI pagers; AI agents should prefer a larger
|
|
98
|
+
// `limit` over offset-loops because most installs fit in one page.
|
|
99
|
+
description: "Execute a query against a local source (WP posts/pages, Joomla articles, etc.) and return " +
|
|
100
|
+
"the matching items in one call. Body uses camelCase `contentType` (FlowExecutor node-data " +
|
|
101
|
+
"convention). For AI agents: prefer a higher `limit` (up to 500) over iterating with " +
|
|
102
|
+
"`offset` — most installs fit comfortably in a single page." +
|
|
103
|
+
"\n\nExample:\n apimapper_local_source_query({ contentType: 'wordpress/posts', limit: 100 })",
|
|
80
104
|
inputSchema: {
|
|
81
105
|
content_type: z
|
|
82
106
|
.string()
|
|
@@ -86,12 +110,12 @@ export function registerLocalSourceTools(server) {
|
|
|
86
110
|
.record(z.string(), z.unknown())
|
|
87
111
|
.optional()
|
|
88
112
|
.describe('Filter values (e.g., {"category":"news","status":"publish"})'),
|
|
89
|
-
limit: z.number().min(1).max(500).default(50).describe("Max items (1-500)"),
|
|
90
|
-
offset: z.number().min(0).default(0).describe("Offset for pagination"),
|
|
113
|
+
limit: z.number().min(1).max(500).default(50).describe("Max items (1-500). Prefer a single larger limit over offset-iteration — most installs fit in one page."),
|
|
114
|
+
offset: z.number().min(0).default(0).describe("Offset for pagination. Intended for UI pagers; AI agents should prefer a larger `limit` instead of offset-loops because the data set is bounded and a single call returns the result."),
|
|
91
115
|
orderby: z.string().optional().describe('Order field (e.g., "date","title")'),
|
|
92
116
|
order: z.enum(["asc", "desc"]).default("desc").describe("Order direction"),
|
|
93
117
|
},
|
|
94
|
-
annotations: readOnly(),
|
|
118
|
+
annotations: readOnly({ title: "Query Local Source", openWorld: true }),
|
|
95
119
|
}, async ({ content_type, filters, limit, offset, orderby, order }) => {
|
|
96
120
|
const body = {
|
|
97
121
|
contentType: content_type, // camelCase wire-format key
|
|
@@ -106,20 +130,24 @@ export function registerLocalSourceTools(server) {
|
|
|
106
130
|
const r = await request("/local-sources/query", { method: "POST", body: JSON.stringify(body) });
|
|
107
131
|
if (!r.success) {
|
|
108
132
|
// F-A5-02: on 403 feature-gate response the PHP body carries
|
|
109
|
-
// `error_code` + `upgrade` hints — surface them to the agent
|
|
110
|
-
// can route the user to the upgrade flow
|
|
133
|
+
// `error_code` + `upgrade` hints — surface them to the agent (in the
|
|
134
|
+
// errorResult details) so it can route the user to the upgrade flow
|
|
135
|
+
// instead of a generic error.
|
|
111
136
|
const dataObj = r.data && typeof r.data === "object"
|
|
112
137
|
? r.data
|
|
113
138
|
: {};
|
|
114
|
-
return
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
139
|
+
return errorResult({
|
|
140
|
+
message: r.error ?? "local source query failed",
|
|
141
|
+
code: r.errorCode ?? (r.status ? String(r.status) : undefined),
|
|
142
|
+
suggestion: hintFor(r.errorCode),
|
|
143
|
+
details: {
|
|
144
|
+
content_type,
|
|
145
|
+
limit,
|
|
146
|
+
offset,
|
|
147
|
+
error_code: typeof dataObj.error_code === "string" ? dataObj.error_code : undefined,
|
|
148
|
+
upgrade: dataObj.upgrade,
|
|
149
|
+
},
|
|
150
|
+
});
|
|
123
151
|
}
|
|
124
152
|
const items = Array.isArray(r.data?.items) ? r.data.items : [];
|
|
125
153
|
return formatResult({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-sources.js","sourceRoot":"","sources":["../../../src/modules/apimapper/local-sources.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"local-sources.js","sourceRoot":"","sources":["../../../src/modules/apimapper/local-sources.ts"],"names":[],"mappings":"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"}
|