@wootsup/yt-builder-mcp 1.2.0 → 1.4.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 +16 -12
- package/dist/catalog/build-catalog.d.ts +63 -0
- package/dist/catalog/build-catalog.d.ts.map +1 -0
- package/dist/catalog/build-catalog.js +166 -0
- package/dist/catalog/build-catalog.js.map +1 -0
- package/dist/cli/doctor-command.d.ts +21 -0
- package/dist/cli/doctor-command.d.ts.map +1 -0
- package/dist/cli/doctor-command.js +111 -0
- package/dist/cli/doctor-command.js.map +1 -0
- package/dist/cli/invocation-decision.d.ts.map +1 -1
- package/dist/cli/invocation-decision.js +2 -0
- package/dist/cli/invocation-decision.js.map +1 -1
- package/dist/client.d.ts +14 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +9 -0
- package/dist/client.js.map +1 -1
- package/dist/diagnostics/ca-trust.d.ts +16 -0
- package/dist/diagnostics/ca-trust.d.ts.map +1 -0
- package/dist/diagnostics/ca-trust.js +54 -0
- package/dist/diagnostics/ca-trust.js.map +1 -0
- package/dist/diagnostics/diagnose-network-error.d.ts +37 -0
- package/dist/diagnostics/diagnose-network-error.d.ts.map +1 -0
- package/dist/diagnostics/diagnose-network-error.js +158 -0
- package/dist/diagnostics/diagnose-network-error.js.map +1 -0
- package/dist/diagnostics/doctor.d.ts +62 -0
- package/dist/diagnostics/doctor.d.ts.map +1 -0
- package/dist/diagnostics/doctor.js +165 -0
- package/dist/diagnostics/doctor.js.map +1 -0
- package/dist/gateway/advanced-read-tool.d.ts +37 -0
- package/dist/gateway/advanced-read-tool.d.ts.map +1 -0
- package/dist/gateway/advanced-read-tool.js +156 -0
- package/dist/gateway/advanced-read-tool.js.map +1 -0
- package/dist/gateway/advanced-tool/domains.d.ts +18 -3
- package/dist/gateway/advanced-tool/domains.d.ts.map +1 -1
- package/dist/gateway/advanced-tool/domains.js +28 -9
- package/dist/gateway/advanced-tool/domains.js.map +1 -1
- package/dist/gateway/advanced-tool/register.d.ts.map +1 -1
- package/dist/gateway/advanced-tool/register.js +43 -11
- package/dist/gateway/advanced-tool/register.js.map +1 -1
- package/dist/gateway/essentials.d.ts +14 -4
- package/dist/gateway/essentials.d.ts.map +1 -1
- package/dist/gateway/essentials.js +46 -5
- package/dist/gateway/essentials.js.map +1 -1
- package/dist/gateway/test-support.d.ts +2 -2
- package/dist/gateway/test-support.js +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -1
- package/dist/install-skill.d.ts +1 -1
- package/dist/install-skill.js +2 -2
- package/dist/net/extra-headers.d.ts +66 -0
- package/dist/net/extra-headers.d.ts.map +1 -0
- package/dist/net/extra-headers.js +164 -0
- package/dist/net/extra-headers.js.map +1 -0
- package/dist/net/internal-host.d.ts +45 -0
- package/dist/net/internal-host.d.ts.map +1 -0
- package/dist/net/internal-host.js +164 -0
- package/dist/net/internal-host.js.map +1 -0
- package/dist/net/proxy-dispatcher.d.ts +40 -0
- package/dist/net/proxy-dispatcher.d.ts.map +1 -0
- package/dist/net/proxy-dispatcher.js +65 -0
- package/dist/net/proxy-dispatcher.js.map +1 -0
- package/dist/proxy/bridge.d.ts +43 -0
- package/dist/proxy/bridge.d.ts.map +1 -0
- package/dist/proxy/bridge.js +155 -0
- package/dist/proxy/bridge.js.map +1 -0
- package/dist/proxy/mode.d.ts +10 -0
- package/dist/proxy/mode.d.ts.map +1 -0
- package/dist/proxy/mode.js +20 -0
- package/dist/proxy/mode.js.map +1 -0
- package/dist/server.d.ts +5 -3
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +13 -3
- package/dist/server.js.map +1 -1
- package/dist/setup-ca-env.d.ts +40 -0
- package/dist/setup-ca-env.d.ts.map +1 -0
- package/dist/setup-ca-env.js +58 -0
- package/dist/setup-ca-env.js.map +1 -0
- package/dist/setup-ca-reprobe.d.ts +38 -0
- package/dist/setup-ca-reprobe.d.ts.map +1 -0
- package/dist/setup-ca-reprobe.js +68 -0
- package/dist/setup-ca-reprobe.js.map +1 -0
- package/dist/setup-cli.d.ts +37 -2
- package/dist/setup-cli.d.ts.map +1 -1
- package/dist/setup-cli.js +178 -4
- package/dist/setup-cli.js.map +1 -1
- package/dist/setup-npx-spec.d.ts +44 -0
- package/dist/setup-npx-spec.d.ts.map +1 -0
- package/dist/setup-npx-spec.js +66 -0
- package/dist/setup-npx-spec.js.map +1 -0
- package/dist/setup-prompts.d.ts +14 -1
- package/dist/setup-prompts.d.ts.map +1 -1
- package/dist/setup-prompts.js +53 -1
- package/dist/setup-prompts.js.map +1 -1
- package/dist/setup-wizard-defaults.d.ts.map +1 -1
- package/dist/setup-wizard-defaults.js +29 -5
- package/dist/setup-wizard-defaults.js.map +1 -1
- package/dist/setup-wizard-handshake.d.ts +4 -4
- package/dist/setup-wizard-handshake.d.ts.map +1 -1
- package/dist/setup-wizard-handshake.js +46 -12
- package/dist/setup-wizard-handshake.js.map +1 -1
- package/dist/setup-wizard-types.d.ts +81 -0
- package/dist/setup-wizard-types.d.ts.map +1 -1
- package/dist/setup-wizard.d.ts +2 -2
- package/dist/setup-wizard.d.ts.map +1 -1
- package/dist/setup-wizard.js +140 -18
- package/dist/setup-wizard.js.map +1 -1
- package/dist/sites/client-pool.d.ts +8 -1
- package/dist/sites/client-pool.d.ts.map +1 -1
- package/dist/sites/client-pool.js +34 -4
- package/dist/sites/client-pool.js.map +1 -1
- package/dist/sites/registry.d.ts +30 -0
- package/dist/sites/registry.d.ts.map +1 -1
- package/dist/sites/registry.js.map +1 -1
- package/dist/sites/store.d.ts +8 -1
- package/dist/sites/store.d.ts.map +1 -1
- package/dist/sites/store.js +17 -2
- package/dist/sites/store.js.map +1 -1
- package/dist/sites/tools/use-site.d.ts.map +1 -1
- package/dist/sites/tools/use-site.js +26 -6
- package/dist/sites/tools/use-site.js.map +1 -1
- package/dist/tools/bind-guidance.d.ts +80 -0
- package/dist/tools/bind-guidance.d.ts.map +1 -0
- package/dist/tools/bind-guidance.js +95 -0
- package/dist/tools/bind-guidance.js.map +1 -0
- package/dist/tools/elements/builders.d.ts.map +1 -1
- package/dist/tools/elements/builders.js +63 -13
- package/dist/tools/elements/builders.js.map +1 -1
- package/dist/tools/elements/handlers-write.d.ts +19 -2
- package/dist/tools/elements/handlers-write.d.ts.map +1 -1
- package/dist/tools/elements/handlers-write.js +179 -10
- package/dist/tools/elements/handlers-write.js.map +1 -1
- package/dist/tools/elements/handlers.d.ts +8 -2
- package/dist/tools/elements/handlers.d.ts.map +1 -1
- package/dist/tools/elements/handlers.js +76 -28
- package/dist/tools/elements/handlers.js.map +1 -1
- package/dist/tools/elements/layout-hierarchy-rules.d.ts +62 -0
- package/dist/tools/elements/layout-hierarchy-rules.d.ts.map +1 -0
- package/dist/tools/elements/layout-hierarchy-rules.js +154 -0
- package/dist/tools/elements/layout-hierarchy-rules.js.map +1 -0
- package/dist/tools/format/elements-format.d.ts +35 -0
- package/dist/tools/format/elements-format.d.ts.map +1 -1
- package/dist/tools/format/elements-format.js +124 -1
- package/dist/tools/format/elements-format.js.map +1 -1
- package/dist/tools/format/health-format.d.ts +3 -0
- package/dist/tools/format/health-format.d.ts.map +1 -1
- package/dist/tools/format/health-format.js +21 -4
- package/dist/tools/format/health-format.js.map +1 -1
- package/dist/tools/format/inspection-format.d.ts +18 -0
- package/dist/tools/format/inspection-format.d.ts.map +1 -1
- package/dist/tools/format/inspection-format.js +22 -1
- package/dist/tools/format/inspection-format.js.map +1 -1
- package/dist/tools/format/pages-format.d.ts.map +1 -1
- package/dist/tools/format/pages-format.js +7 -0
- package/dist/tools/format/pages-format.js.map +1 -1
- package/dist/tools/format/sources-format.d.ts +8 -0
- package/dist/tools/format/sources-format.d.ts.map +1 -1
- package/dist/tools/format/sources-format.js +10 -0
- package/dist/tools/format/sources-format.js.map +1 -1
- package/dist/tools/health.d.ts.map +1 -1
- package/dist/tools/health.js +56 -0
- package/dist/tools/health.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +4 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/inspection.d.ts +24 -0
- package/dist/tools/inspection.d.ts.map +1 -1
- package/dist/tools/inspection.js +140 -41
- package/dist/tools/inspection.js.map +1 -1
- package/dist/tools/layout-flatten.d.ts +11 -8
- package/dist/tools/layout-flatten.d.ts.map +1 -1
- package/dist/tools/layout-flatten.js +17 -6
- package/dist/tools/layout-flatten.js.map +1 -1
- package/dist/tools/multi-items/builders.d.ts.map +1 -1
- package/dist/tools/multi-items/builders.js +11 -2
- package/dist/tools/multi-items/builders.js.map +1 -1
- package/dist/tools/multi-items/inspect-handler.d.ts +13 -0
- package/dist/tools/multi-items/inspect-handler.d.ts.map +1 -1
- package/dist/tools/multi-items/inspect-handler.js +147 -3
- package/dist/tools/multi-items/inspect-handler.js.map +1 -1
- package/dist/tools/pages/builders.d.ts.map +1 -1
- package/dist/tools/pages/builders.js +153 -39
- package/dist/tools/pages/builders.js.map +1 -1
- package/dist/tools/pages/handlers-read.d.ts +40 -5
- package/dist/tools/pages/handlers-read.d.ts.map +1 -1
- package/dist/tools/pages/handlers-read.js +404 -76
- package/dist/tools/pages/handlers-read.js.map +1 -1
- package/dist/tools/pages/handlers-write.d.ts +95 -1
- package/dist/tools/pages/handlers-write.d.ts.map +1 -1
- package/dist/tools/pages/handlers-write.js +137 -8
- package/dist/tools/pages/handlers-write.js.map +1 -1
- package/dist/tools/pages/index.d.ts +1 -1
- package/dist/tools/pages/index.d.ts.map +1 -1
- package/dist/tools/pages/index.js +1 -1
- package/dist/tools/pages/index.js.map +1 -1
- package/dist/tools/pages/schemas.d.ts +74 -5
- package/dist/tools/pages/schemas.d.ts.map +1 -1
- package/dist/tools/pages/schemas.js +243 -8
- package/dist/tools/pages/schemas.js.map +1 -1
- package/dist/tools/shared-schemas.d.ts +3 -0
- package/dist/tools/shared-schemas.d.ts.map +1 -1
- package/dist/tools/shared-schemas.js +43 -13
- package/dist/tools/shared-schemas.js.map +1 -1
- package/dist/tools/sources/builders.d.ts.map +1 -1
- package/dist/tools/sources/builders.js +93 -10
- package/dist/tools/sources/builders.js.map +1 -1
- package/dist/tools/sources/handlers-bind.d.ts +13 -1
- package/dist/tools/sources/handlers-bind.d.ts.map +1 -1
- package/dist/tools/sources/handlers-bind.js +163 -1
- package/dist/tools/sources/handlers-bind.js.map +1 -1
- package/dist/tools/sources/handlers.d.ts +12 -1
- package/dist/tools/sources/handlers.d.ts.map +1 -1
- package/dist/tools/sources/handlers.js +103 -16
- package/dist/tools/sources/handlers.js.map +1 -1
- package/dist/tools/sparse-fields.d.ts +73 -0
- package/dist/tools/sparse-fields.d.ts.map +1 -1
- package/dist/tools/sparse-fields.js +136 -0
- package/dist/tools/sparse-fields.js.map +1 -1
- package/dist/tools/sublayout/builders.d.ts +23 -0
- package/dist/tools/sublayout/builders.d.ts.map +1 -0
- package/dist/tools/sublayout/builders.js +54 -0
- package/dist/tools/sublayout/builders.js.map +1 -0
- package/dist/tools/sublayout/index.d.ts +13 -0
- package/dist/tools/sublayout/index.d.ts.map +1 -0
- package/dist/tools/sublayout/index.js +13 -0
- package/dist/tools/sublayout/index.js.map +1 -0
- package/dist/tools/sublayout/inspect-sublayout-handler.d.ts +95 -0
- package/dist/tools/sublayout/inspect-sublayout-handler.d.ts.map +1 -0
- package/dist/tools/sublayout/inspect-sublayout-handler.js +181 -0
- package/dist/tools/sublayout/inspect-sublayout-handler.js.map +1 -0
- package/dist/tools/tool-builder/results.d.ts +31 -0
- package/dist/tools/tool-builder/results.d.ts.map +1 -1
- package/dist/tools/tool-builder/results.js +95 -4
- package/dist/tools/tool-builder/results.js.map +1 -1
- package/dist/update/update-check.d.ts +56 -0
- package/dist/update/update-check.d.ts.map +1 -0
- package/dist/update/update-check.js +155 -0
- package/dist/update/update-check.js.map +1 -0
- package/manifest.json +1 -1
- package/package.json +5 -2
- package/skills/yt-builder-mcp/SKILL.md +148 -82
package/dist/setup-wizard.js
CHANGED
|
@@ -14,7 +14,10 @@
|
|
|
14
14
|
* @license MIT
|
|
15
15
|
*/
|
|
16
16
|
import { cancel, log, note, outro, spinner } from '@clack/prompts';
|
|
17
|
+
import { supportsSystemCa } from './diagnostics/ca-trust.js';
|
|
17
18
|
import { SERVER_NAME, SERVER_VERSION } from './server.js';
|
|
19
|
+
import { buildCaEnv } from './setup-ca-env.js';
|
|
20
|
+
import { buildNpxSpec } from './setup-npx-spec.js';
|
|
18
21
|
import { DEFAULT_WIZARD_DEPS, rollbackWrites, } from './setup-wizard-defaults.js';
|
|
19
22
|
// Re-export the public surface so `import { runWizard, WizardDeps } from
|
|
20
23
|
// './setup-wizard.js'` continues to work without touching the split files.
|
|
@@ -28,6 +31,14 @@ export { DEFAULT_WIZARD_DEPS, majorMinor } from './setup-wizard-defaults.js';
|
|
|
28
31
|
// the legacy `yootheme-builder` entry stays dormant (harmless, points
|
|
29
32
|
// at the same npm package).
|
|
30
33
|
const SERVER_KEY = 'yt-builder-mcp';
|
|
34
|
+
/**
|
|
35
|
+
* G-E #6 — the honest outcome message when the operator chose the OS trust store
|
|
36
|
+
* (`--use-system-ca`). Node only consults that store when (re)started with the
|
|
37
|
+
* flag, which the WRITTEN config does but the setup process did NOT — so we can
|
|
38
|
+
* never validate it in-process. We say so plainly instead of reporting a false ❌.
|
|
39
|
+
*/
|
|
40
|
+
const SYSTEM_CA_DEFERRED_MESSAGE = '✅ Configured to use the OS trust store (--use-system-ca) — this takes effect when ' +
|
|
41
|
+
"your AI client next launches the server. The current setup process can't validate it in-process.";
|
|
31
42
|
/**
|
|
32
43
|
* Run the interactive setup wizard. Returns a process exit-code so the
|
|
33
44
|
* outer dispatcher can `process.exit(rc)` cleanly.
|
|
@@ -75,10 +86,24 @@ export async function runWizard(deps = DEFAULT_WIZARD_DEPS) {
|
|
|
75
86
|
log.warn(`Identity probe: ${identity.error ?? 'unknown'} (continuing — older plugins lack this endpoint).`);
|
|
76
87
|
}
|
|
77
88
|
}
|
|
89
|
+
// The CA choice the wizard ends up writing into the env block. Seeded from
|
|
90
|
+
// any non-interactive `--ca` / `--ca=system` answer, then possibly set by
|
|
91
|
+
// the interactive CA prompt (G-D #6) when a probe hits a TLS-trust error.
|
|
92
|
+
let caChoice = {
|
|
93
|
+
...(answers.caCertPath !== undefined ? { caCertPath: answers.caCertPath } : {}),
|
|
94
|
+
...(answers.caMode !== undefined ? { caMode: answers.caMode } : {}),
|
|
95
|
+
};
|
|
96
|
+
const nodeVersion = deps.nodeVersion ?? process.version;
|
|
78
97
|
// 2b. Health probe (no auth).
|
|
79
98
|
const healthSpinner = spinner();
|
|
80
99
|
healthSpinner.start('Probing plugin health…');
|
|
81
|
-
|
|
100
|
+
let health = await deps.probeHealth(answers.wpUrl);
|
|
101
|
+
let auth;
|
|
102
|
+
// Set once the operator picked the OS trust store (--use-system-ca) and the
|
|
103
|
+
// post-CA re-probe failed: the OS store can't be validated in THIS process,
|
|
104
|
+
// so we defer validation to the next server launch instead of treating the
|
|
105
|
+
// (false-negative) failure as a reason to discard the correct config.
|
|
106
|
+
let systemCaDeferred = false;
|
|
82
107
|
if (health.ok) {
|
|
83
108
|
healthSpinner.stop(health.pluginVersion !== undefined
|
|
84
109
|
? `Plugin reachable (v${health.pluginVersion}).`
|
|
@@ -86,24 +111,91 @@ export async function runWizard(deps = DEFAULT_WIZARD_DEPS) {
|
|
|
86
111
|
}
|
|
87
112
|
else {
|
|
88
113
|
healthSpinner.stop('Plugin probe failed.');
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
114
|
+
// G-D #6/#8 — a TLS chain-of-trust failure is the corporate
|
|
115
|
+
// TLS-inspection signature. Offer to self-configure the CA (OS trust
|
|
116
|
+
// store on a supporting Node, or a .pem path), write it into the env
|
|
117
|
+
// block, and RE-PROBE so the operator sees ✅/❌ now instead of a silent
|
|
118
|
+
// first-tool-call timeout. Only when a CA prompt is wired AND none was
|
|
119
|
+
// already supplied non-interactively.
|
|
120
|
+
const caAlreadyChosen = caChoice.caCertPath !== undefined || caChoice.caMode !== undefined;
|
|
121
|
+
if (health.caTrust === true && deps.promptCa !== undefined && !caAlreadyChosen) {
|
|
122
|
+
log.warn(`Corporate TLS-inspection detected: ${health.error ?? 'the TLS certificate could not be verified'}`);
|
|
123
|
+
const systemCaSupported = supportsSystemCa(nodeVersion);
|
|
124
|
+
const picked = await deps.promptCa({ systemCaSupported });
|
|
125
|
+
if (picked === null) {
|
|
126
|
+
cancel('Setup cancelled.');
|
|
127
|
+
return 130;
|
|
128
|
+
}
|
|
129
|
+
if (picked.choice !== 'skip') {
|
|
130
|
+
caChoice =
|
|
131
|
+
picked.choice === 'system'
|
|
132
|
+
? { caMode: 'system' }
|
|
133
|
+
: { caCertPath: picked.path };
|
|
134
|
+
// Re-probe with the CA applied at runtime. When no dedicated
|
|
135
|
+
// re-prober is wired, fall back to the ordinary probes (the
|
|
136
|
+
// choice is still recorded into the env block either way).
|
|
137
|
+
const reSpinner = spinner();
|
|
138
|
+
reSpinner.start('Re-checking the connection with the CA applied…');
|
|
139
|
+
if (deps.applyAndReProbe !== undefined) {
|
|
140
|
+
const re = await deps.applyAndReProbe({ wpUrl: answers.wpUrl, bearer: answers.bearer, choice: picked });
|
|
141
|
+
health = re.health;
|
|
142
|
+
auth = re.auth;
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
health = await deps.probeHealth(answers.wpUrl);
|
|
146
|
+
auth = await deps.probeAuth(answers.wpUrl, answers.bearer);
|
|
147
|
+
}
|
|
148
|
+
// G-E #6 honesty fix: the OS trust store is consulted ONLY when
|
|
149
|
+
// Node is (re)started with --use-system-ca — which the WRITTEN
|
|
150
|
+
// config does, but THIS setup process was not. So an in-process
|
|
151
|
+
// re-probe in system mode is a guaranteed false-negative: a ❌
|
|
152
|
+
// here would (on decline) discard the CORRECT config. Treat a
|
|
153
|
+
// system-mode re-probe failure as "configured, validates at next
|
|
154
|
+
// launch" — write the config and skip the generic/auth/handshake
|
|
155
|
+
// in-process checks (which would hit the same untrusted CA). File
|
|
156
|
+
// (.pem) mode DOES validate in-process (undici Agent trusts the
|
|
157
|
+
// CA), so it keeps the honest ✅/❌ verdict.
|
|
158
|
+
if (picked.choice === 'system' && !health.ok) {
|
|
159
|
+
systemCaDeferred = true;
|
|
160
|
+
reSpinner.stop('OS trust store configured (--use-system-ca).');
|
|
161
|
+
logFn(SYSTEM_CA_DEFERRED_MESSAGE);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
reSpinner.stop(health.ok ? '✅ connected — CA trusted.' : `❌ still failing: ${health.error ?? 'unknown'}`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// If the connection is still down after the (optional) CA step, fall
|
|
169
|
+
// through to the generic continue-anyway decision — UNLESS system-CA was
|
|
170
|
+
// configured, where validation is deferred to next launch and the (false-
|
|
171
|
+
// negative) in-process failure must not discard the config.
|
|
172
|
+
if (!health.ok && !systemCaDeferred) {
|
|
173
|
+
log.error(`Could not reach the plugin: ${health.error ?? 'unknown'}`);
|
|
174
|
+
const cont = await deps.confirmContinue('Continue anyway and write the config? (You can fix this later.)');
|
|
175
|
+
if (!cont) {
|
|
176
|
+
cancel('Setup cancelled.');
|
|
177
|
+
return 2;
|
|
178
|
+
}
|
|
94
179
|
}
|
|
95
180
|
}
|
|
96
|
-
// 3. Auth probe (Bearer).
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
authSpinner.
|
|
181
|
+
// 3. Auth probe (Bearer). Skip when the CA re-probe already produced an
|
|
182
|
+
// auth result (avoids a redundant round-trip on the corporate path), or
|
|
183
|
+
// when system-CA validation is deferred (an in-process auth probe would
|
|
184
|
+
// hit the same untrusted-CA false-negative and discard the config).
|
|
185
|
+
if (auth === undefined && !systemCaDeferred) {
|
|
186
|
+
const authSpinner = spinner();
|
|
187
|
+
authSpinner.start('Verifying Bearer key…');
|
|
188
|
+
auth = await deps.probeAuth(answers.wpUrl, answers.bearer);
|
|
189
|
+
if (auth.ok) {
|
|
190
|
+
authSpinner.stop('Bearer key accepted.');
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
authSpinner.stop('Bearer probe failed.');
|
|
194
|
+
}
|
|
103
195
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
log.warn(`Auth probe failed: ${auth
|
|
196
|
+
const authOk = auth?.ok ?? false;
|
|
197
|
+
if (!authOk && !systemCaDeferred) {
|
|
198
|
+
log.warn(`Auth probe failed: ${auth?.error ?? 'unknown'}`);
|
|
107
199
|
const cont = await deps.confirmContinue('Continue anyway and write the config?');
|
|
108
200
|
if (!cont) {
|
|
109
201
|
cancel('Setup cancelled.');
|
|
@@ -117,13 +209,40 @@ export async function runWizard(deps = DEFAULT_WIZARD_DEPS) {
|
|
|
117
209
|
// YTB_MCP_WP_URL; Wave-7+ servers prefer YTB_MCP_SITE_URL but still
|
|
118
210
|
// honour the legacy alias. The wizard intentionally writes both so a
|
|
119
211
|
// wizard-rendered config never needs editing after an npm upgrade.
|
|
212
|
+
//
|
|
213
|
+
// Slice 3 (proxy flip): YTB_MCP_MODE=proxy makes the Node package a thin
|
|
214
|
+
// stdio<->HTTP proxy to the plugin's own PHP MCP endpoint
|
|
215
|
+
// (${site}/wp-json/yt-builder-mcp/mcp). resolveMode() reads YTB_MCP_SITE_URL
|
|
216
|
+
// + YTB_MCP_BEARER_TOKEN verbatim; the legacy WP_URL key is harmless (read
|
|
217
|
+
// only by the fat loader). Flip YTB_MCP_MODE off to fall back to fat.
|
|
218
|
+
// Corporate TLS-inspection: trust the chosen root CA natively. `buildCaEnv`
|
|
219
|
+
// resolves the right key for the strategy + Node version: a `.pem` path →
|
|
220
|
+
// NODE_EXTRA_CA_CERTS (any Node); OS trust store → NODE_OPTIONS=--use-system-ca
|
|
221
|
+
// (Node ≥ 22.15, else warn to use a .pem). Never disables verification.
|
|
222
|
+
// Pass an empty `currentEnv` so the WRITTEN config's NODE_OPTIONS is a clean
|
|
223
|
+
// `--use-system-ca` for the MCP server's own runtime — not the operator's
|
|
224
|
+
// current shell NODE_OPTIONS (which is irrelevant to the spawned server).
|
|
225
|
+
const caEnv = buildCaEnv(caChoice, nodeVersion, {});
|
|
226
|
+
for (const w of caEnv.warnings)
|
|
227
|
+
log.warn(w);
|
|
228
|
+
// Glöckle gap #15 — pin the npx version when requested (`--pin` /
|
|
229
|
+
// YTB_MCP_VERSION); default is the floating @latest the update-notifier
|
|
230
|
+
// expects. A malformed pin degrades to floating with a warning.
|
|
231
|
+
const npx = buildNpxSpec(SERVER_NAME, answers.versionPin);
|
|
232
|
+
if (npx.error !== undefined)
|
|
233
|
+
log.warn(npx.error);
|
|
234
|
+
if (npx.pinned) {
|
|
235
|
+
log.info(`Pinning the MCP server to ${npx.spec} (air-gapped / reproducible). Re-run setup without --pin to float to the latest.`);
|
|
236
|
+
}
|
|
120
237
|
const serverConfig = {
|
|
121
238
|
command: 'npx',
|
|
122
|
-
args: ['-y',
|
|
239
|
+
args: ['-y', npx.spec],
|
|
123
240
|
env: {
|
|
124
241
|
YTB_MCP_SITE_URL: answers.wpUrl,
|
|
125
242
|
YTB_MCP_WP_URL: answers.wpUrl,
|
|
126
243
|
YTB_MCP_BEARER_TOKEN: answers.bearer,
|
|
244
|
+
YTB_MCP_MODE: 'proxy',
|
|
245
|
+
...caEnv.env,
|
|
127
246
|
},
|
|
128
247
|
};
|
|
129
248
|
const writes = [];
|
|
@@ -167,6 +286,9 @@ export async function runWizard(deps = DEFAULT_WIZARD_DEPS) {
|
|
|
167
286
|
hsSpinner.stop('Handshake OK.');
|
|
168
287
|
}
|
|
169
288
|
}
|
|
289
|
+
else if (systemCaDeferred) {
|
|
290
|
+
log.info('Skipping the live handshake — the OS trust store is validated when the MCP server next launches.');
|
|
291
|
+
}
|
|
170
292
|
else {
|
|
171
293
|
log.warn('Skipping handshake because the Bearer probe failed.');
|
|
172
294
|
}
|
|
@@ -188,7 +310,7 @@ export async function runWizard(deps = DEFAULT_WIZARD_DEPS) {
|
|
|
188
310
|
// Operator just sees the warning + can retry with `add-site`.
|
|
189
311
|
}
|
|
190
312
|
}
|
|
191
|
-
if (writes.every((r) => r.ok) && authOk) {
|
|
313
|
+
if (writes.every((r) => r.ok) && (authOk || systemCaDeferred)) {
|
|
192
314
|
outro('Done — restart your AI client to load the new MCP server.');
|
|
193
315
|
}
|
|
194
316
|
else {
|
package/dist/setup-wizard.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-wizard.js","sourceRoot":"","sources":["../src/setup-wizard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAGnE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EACH,mBAAmB,EACnB,cAAc,GACjB,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"setup-wizard.js","sourceRoot":"","sources":["../src/setup-wizard.ts"],"names":[],"mappings":"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"}
|
|
@@ -100,7 +100,14 @@ export declare class ClientPool {
|
|
|
100
100
|
* `null` = no override (registry default in effect).
|
|
101
101
|
*/
|
|
102
102
|
private activeOverride;
|
|
103
|
-
|
|
103
|
+
/**
|
|
104
|
+
* Corporate extra headers (Glöckle gap #14) attached to EVERY client this
|
|
105
|
+
* pool constructs. Parsed once from `YTB_MCP_EXTRA_HEADERS` (default) or
|
|
106
|
+
* injected by a caller/test. Bearer always wins on collision (enforced in
|
|
107
|
+
* {@link RestClient}).
|
|
108
|
+
*/
|
|
109
|
+
private readonly extraHeaders;
|
|
110
|
+
constructor(_registry: SiteRegistry, secretResolver: SecretResolver, timeoutMs?: number, extraHeaders?: Record<string, string>);
|
|
104
111
|
/**
|
|
105
112
|
* The current runtime active-site override, or `null` when none is
|
|
106
113
|
* set (the registry default is in effect). Read-only peek — does not
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-pool.d.ts","sourceRoot":"","sources":["../../src/sites/client-pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"client-pool.d.ts","sourceRoot":"","sources":["../../src/sites/client-pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;;;;;GAMG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IACzC,SAAgB,IAAI,EAAG,iBAAiB,CAAU;gBAG9C,OAAO,SAG6E;CAK3F;AAED;;;;;GAKG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;aAInB,MAAM,EAAE,MAAM;aACd,SAAS,EAAE,SAAS,MAAM,EAAE;IAJhD,SAAgB,IAAI,EAAG,cAAc,CAAU;gBAG3B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,MAAM,EAAE;CAQnD;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,qBAAa,UAAU;IA4Bf,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS;IA7B9B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;IAEvD;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,cAAc,CAAuB;IAE7C;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAyB;gBAGjC,SAAS,EAAE,YAAY,EACvB,cAAc,EAAE,cAAc,EAC9B,SAAS,GAAE,MAAe,EAC3C,YAAY,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAA+B;IAKtE;;;;OAIG;IACH,YAAY,IAAI,MAAM,GAAG,IAAI;IAI7B;;;;;;;;;;OAUG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAW1C;;;;;;;;;;;;OAYG;IACH,IAAI,QAAQ,IAAI,YAAY,CAE3B;IAED;;;;;;;;;;OAUG;IACG,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAuEvD;;;;;;OAMG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAGnC"}
|
|
@@ -37,6 +37,7 @@
|
|
|
37
37
|
* @license MIT
|
|
38
38
|
*/
|
|
39
39
|
import { RestClient } from '../client.js';
|
|
40
|
+
import { parseExtraHeaders } from '../net/extra-headers.js';
|
|
40
41
|
/**
|
|
41
42
|
* Thrown when `resolve()` is called without a `siteId` AND the
|
|
42
43
|
* registry has no default configured (neither `default_site_id` nor a
|
|
@@ -100,10 +101,18 @@ export class ClientPool {
|
|
|
100
101
|
* `null` = no override (registry default in effect).
|
|
101
102
|
*/
|
|
102
103
|
activeOverride = null;
|
|
103
|
-
|
|
104
|
+
/**
|
|
105
|
+
* Corporate extra headers (Glöckle gap #14) attached to EVERY client this
|
|
106
|
+
* pool constructs. Parsed once from `YTB_MCP_EXTRA_HEADERS` (default) or
|
|
107
|
+
* injected by a caller/test. Bearer always wins on collision (enforced in
|
|
108
|
+
* {@link RestClient}).
|
|
109
|
+
*/
|
|
110
|
+
extraHeaders;
|
|
111
|
+
constructor(_registry, secretResolver, timeoutMs = 15_000, extraHeaders = parseExtraHeaders().headers) {
|
|
104
112
|
this._registry = _registry;
|
|
105
113
|
this.secretResolver = secretResolver;
|
|
106
114
|
this.timeoutMs = timeoutMs;
|
|
115
|
+
this.extraHeaders = extraHeaders;
|
|
107
116
|
}
|
|
108
117
|
/**
|
|
109
118
|
* The current runtime active-site override, or `null` when none is
|
|
@@ -166,9 +175,26 @@ export class ClientPool {
|
|
|
166
175
|
// 1. explicit `siteId` arg (always wins)
|
|
167
176
|
// 2. runtime active-site override (`setActiveSite`)
|
|
168
177
|
// 3. registry default (`defaultSiteId()`)
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
178
|
+
//
|
|
179
|
+
// F178: record WHICH of the three branches won so the envelope
|
|
180
|
+
// wrapper can mark a call as isolated (`explicit`) vs inherited
|
|
181
|
+
// from the shared process-wide default (`active_override` /
|
|
182
|
+
// `registry_default`). `resolvedVia` is derived from the SAME
|
|
183
|
+
// precedence chain — a single source of truth.
|
|
184
|
+
let resolvedVia;
|
|
185
|
+
let id;
|
|
186
|
+
if (siteId !== undefined) {
|
|
187
|
+
id = siteId;
|
|
188
|
+
resolvedVia = 'explicit';
|
|
189
|
+
}
|
|
190
|
+
else if (this.activeOverride !== null) {
|
|
191
|
+
id = this.activeOverride;
|
|
192
|
+
resolvedVia = 'active_override';
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
id = this.registry.defaultSiteId();
|
|
196
|
+
resolvedVia = 'registry_default';
|
|
197
|
+
}
|
|
172
198
|
if (id === null) {
|
|
173
199
|
throw new NoDefaultSiteError();
|
|
174
200
|
}
|
|
@@ -190,6 +216,9 @@ export class ClientPool {
|
|
|
190
216
|
platform,
|
|
191
217
|
bearerToken: bearer.token,
|
|
192
218
|
timeoutMs: this.timeoutMs,
|
|
219
|
+
...(Object.keys(this.extraHeaders).length > 0
|
|
220
|
+
? { extraHeaders: this.extraHeaders }
|
|
221
|
+
: {}),
|
|
193
222
|
});
|
|
194
223
|
this.cache.set(id, client);
|
|
195
224
|
}
|
|
@@ -204,6 +233,7 @@ export class ClientPool {
|
|
|
204
233
|
platform,
|
|
205
234
|
isDefault: entry.is_default,
|
|
206
235
|
bearerSource: entry.bearer_ref !== undefined ? 'op' : 'plain',
|
|
236
|
+
resolvedVia,
|
|
207
237
|
...(entry.label !== undefined ? { label: entry.label } : {}),
|
|
208
238
|
};
|
|
209
239
|
return { client, site: resolved };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-pool.js","sourceRoot":"","sources":["../../src/sites/client-pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"client-pool.js","sourceRoot":"","sources":["../../src/sites/client-pool.ts"],"names":[],"mappings":"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"}
|
package/dist/sites/registry.d.ts
CHANGED
|
@@ -49,6 +49,28 @@ export interface SiteRowT {
|
|
|
49
49
|
label?: string;
|
|
50
50
|
bearer_source: 'plain' | 'op';
|
|
51
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* How a {@link ResolvedSite} was selected by {@link ClientPool.resolve}.
|
|
54
|
+
*
|
|
55
|
+
* F178 (2026-06-12): a stdio MCP server's active-site default is
|
|
56
|
+
* PROCESS-WIDE — two concurrent clients of the SAME server share it, so
|
|
57
|
+
* one client's `yootheme_builder_use_site` switch silently changes which
|
|
58
|
+
* site the OTHER client targets when it omits `site_id`. Recording the
|
|
59
|
+
* resolution source per-call lets the response envelope mark a call as
|
|
60
|
+
* either ISOLATED (`explicit` — the caller passed `site_id`) or
|
|
61
|
+
* INHERITED (`active_override` / `registry_default` — the caller relied
|
|
62
|
+
* on the shared default). The envelope wrapper turns this into a visible
|
|
63
|
+
* `· default` marker + `_meta.resolved_via` so the hazard is surfaced
|
|
64
|
+
* rather than hidden.
|
|
65
|
+
*
|
|
66
|
+
* - `explicit` — an explicit `site_id` argument was supplied.
|
|
67
|
+
* The call is isolated from concurrent switches.
|
|
68
|
+
* - `active_override` — `site_id` was omitted and a runtime
|
|
69
|
+
* `use_site` override was in effect.
|
|
70
|
+
* - `registry_default` — `site_id` was omitted and the registry's
|
|
71
|
+
* configured default was used.
|
|
72
|
+
*/
|
|
73
|
+
export type SiteResolutionSource = 'explicit' | 'active_override' | 'registry_default';
|
|
52
74
|
/**
|
|
53
75
|
* Caller-side projection of a registry entry, with the `Platform`
|
|
54
76
|
* already resolved and the bearer-source flagged for downstream logs.
|
|
@@ -62,6 +84,14 @@ export interface ResolvedSite {
|
|
|
62
84
|
readonly isDefault: boolean;
|
|
63
85
|
readonly label?: string;
|
|
64
86
|
readonly bearerSource: 'plain' | 'op';
|
|
87
|
+
/**
|
|
88
|
+
* F178 — how this site was selected (explicit `site_id` vs the
|
|
89
|
+
* shared process-wide default/override). Optional so legacy test
|
|
90
|
+
* fixtures that synthesise a `ResolvedSite` literal stay valid; when
|
|
91
|
+
* absent the envelope wrapper treats the call as isolated (no
|
|
92
|
+
* default marker, no `resolved_via` noise).
|
|
93
|
+
*/
|
|
94
|
+
readonly resolvedVia?: SiteResolutionSource;
|
|
65
95
|
}
|
|
66
96
|
/**
|
|
67
97
|
* Optional injection point for tests. Production callers should never
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/sites/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EACH,KAAK,QAAQ,EAEb,KAAK,YAAY,EACpB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE1D;;;;;;;;;;GAUG;AACH,MAAM,WAAW,QAAQ;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,iBAAiB,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC3C,aAAa,EAAE,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/C,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,GAAG,IAAI,CAAC;CACjC;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,OAAO,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/sites/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EACH,KAAK,QAAQ,EAEb,KAAK,YAAY,EACpB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE1D;;;;;;;;;;GAUG;AACH,MAAM,WAAW,QAAQ;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,iBAAiB,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC3C,aAAa,EAAE,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/C,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,GAAG,IAAI,CAAC;CACjC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,MAAM,oBAAoB,GAC1B,UAAU,GACV,iBAAiB,GACjB,kBAAkB,CAAC;AAEzB;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,OAAO,GAAG,IAAI,CAAC;IACtC;;;;;;OAMG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,oBAAoB,CAAC;CAC/C;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAChC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAC3B,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,YAAY,KAClB,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC1B;AAED;;;;;GAKG;AACH,qBAAa,YAAY;IAwBjB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAvBzB;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAwC;IAEtE;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmC;IAEjE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAGC;gBAGF,IAAI,EAAE,UAAU,EACjC,IAAI,GAAE,mBAAwB;IAKlC;;;;;;;;OAQG;IACH,aAAa,IAAI,MAAM,GAAG,IAAI;IAY9B;;;;OAIG;IACH,OAAO,IAAI,SAAS,MAAM,EAAE;IAI5B;;;;OAIG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAItC;;;;;;;;OAQG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAyCpD;;;;;;;;OAQG;IACH,cAAc,IAAI,SAAS,QAAQ,EAAE;CAkBxC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/sites/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAEH,mBAAmB,GAEtB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/sites/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/sites/store.d.ts
CHANGED
|
@@ -63,7 +63,14 @@ export declare function emptySitesFile(): SitesFileT;
|
|
|
63
63
|
* Throws {@link SchemaVersionError} for a known-unknown version and
|
|
64
64
|
* {@link SitesFileError} for JSON-parse or Zod-validation failures.
|
|
65
65
|
*/
|
|
66
|
-
|
|
66
|
+
/**
|
|
67
|
+
* F190 (2026-06-12): expand a leading `~` to the user's home directory.
|
|
68
|
+
* Node's fs does NOT do this — a `~/...` path typed into the Claude Desktop
|
|
69
|
+
* DXT settings silently yielded "0 sites" (existsSync false → emptySitesFile).
|
|
70
|
+
* Only `~` and `~/...` are expanded; `~user/...` is left untouched.
|
|
71
|
+
*/
|
|
72
|
+
export declare function expandTilde(p: string): string;
|
|
73
|
+
export declare function loadSitesFile(rawPath: string): Promise<SitesFileT>;
|
|
67
74
|
/**
|
|
68
75
|
* Persist + validate a sites file atomically with chmod 0600.
|
|
69
76
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/sites/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/sites/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAmBH,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzD,uDAAuD;AACvD,qBAAa,cAAe,SAAQ,KAAK;aACQ,KAAK,CAAC,EAAE,OAAO;gBAAhD,OAAO,EAAE,MAAM,EAAkB,KAAK,CAAC,EAAE,OAAO,YAAA;CAI/D;AAED,8EAA8E;AAC9E,qBAAa,kBAAmB,SAAQ,cAAc;aACtB,KAAK,EAAE,OAAO;gBAAd,KAAK,EAAE,OAAO;CAQ7C;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG,aAAa,GAAG,iBAAiB,CAAC;AAEnF,qBAAa,kBAAmB,SAAQ,cAAc;aAE9B,QAAQ,EAAE,iBAAiB;aAC3B,YAAY,EAAE,MAAM;gBADpB,QAAQ,EAAE,iBAAiB,EAC3B,YAAY,EAAE,MAAM,EACpC,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,OAAO;CAKtB;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,UAAU,CAE3C;AAED;;;;;;GAMG;AACH;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAI7C;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAkCxE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAoFjF"}
|
package/dist/sites/store.js
CHANGED
|
@@ -19,7 +19,8 @@
|
|
|
19
19
|
* @license MIT
|
|
20
20
|
*/
|
|
21
21
|
import { chmodSync, closeSync, existsSync, fsyncSync, mkdirSync, openSync, readFileSync, renameSync, unlinkSync, writeSync, } from 'node:fs';
|
|
22
|
-
import {
|
|
22
|
+
import { homedir } from 'node:os';
|
|
23
|
+
import { dirname, join } from 'node:path';
|
|
23
24
|
import lockfile from 'proper-lockfile';
|
|
24
25
|
import { SitesFile } from './schema.js';
|
|
25
26
|
/** Base class for any sites-file IO/format failure. */
|
|
@@ -66,7 +67,21 @@ export function emptySitesFile() {
|
|
|
66
67
|
* Throws {@link SchemaVersionError} for a known-unknown version and
|
|
67
68
|
* {@link SitesFileError} for JSON-parse or Zod-validation failures.
|
|
68
69
|
*/
|
|
69
|
-
|
|
70
|
+
/**
|
|
71
|
+
* F190 (2026-06-12): expand a leading `~` to the user's home directory.
|
|
72
|
+
* Node's fs does NOT do this — a `~/...` path typed into the Claude Desktop
|
|
73
|
+
* DXT settings silently yielded "0 sites" (existsSync false → emptySitesFile).
|
|
74
|
+
* Only `~` and `~/...` are expanded; `~user/...` is left untouched.
|
|
75
|
+
*/
|
|
76
|
+
export function expandTilde(p) {
|
|
77
|
+
if (p === '~')
|
|
78
|
+
return homedir();
|
|
79
|
+
if (p.startsWith('~/'))
|
|
80
|
+
return join(homedir(), p.slice(2));
|
|
81
|
+
return p;
|
|
82
|
+
}
|
|
83
|
+
export async function loadSitesFile(rawPath) {
|
|
84
|
+
const path = expandTilde(rawPath);
|
|
70
85
|
if (!existsSync(path)) {
|
|
71
86
|
return emptySitesFile();
|
|
72
87
|
}
|
package/dist/sites/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/sites/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EACH,SAAS,EACT,SAAS,EACT,UAAU,EACV,SAAS,EACT,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,UAAU,EACV,SAAS,GACZ,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/sites/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-site.d.ts","sourceRoot":"","sources":["../../../src/sites/tools/use-site.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAKH,OAAO,EAKH,KAAK,iBAAiB,EACzB,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"use-site.d.ts","sourceRoot":"","sources":["../../../src/sites/tools/use-site.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAKH,OAAO,EAKH,KAAK,iBAAiB,EACzB,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAwCpD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,iBAAiB,CAyGpE"}
|
|
@@ -56,7 +56,23 @@ const USE_SITE_OUTPUT_SCHEMA = z.object({
|
|
|
56
56
|
.optional(),
|
|
57
57
|
note: z.string().optional(),
|
|
58
58
|
warnings: z.array(z.string()).optional(),
|
|
59
|
+
// F178: every switch echoes the process-wide-default caveat so the
|
|
60
|
+
// agent is reminded that concurrent clients of the same stdio server
|
|
61
|
+
// share this pointer.
|
|
62
|
+
concurrency_warning: z.string().optional(),
|
|
59
63
|
});
|
|
64
|
+
/**
|
|
65
|
+
* F178 — the constant caveat echoed on every `use_site` switch. The
|
|
66
|
+
* active-site default lives in process memory (`ClientPool.activeOverride`)
|
|
67
|
+
* and a single stdio server process is shared by every MCP client that
|
|
68
|
+
* connected to it. So when client A switches, client B's NEXT call that
|
|
69
|
+
* omits `site_id` silently inherits A's choice. The only isolation
|
|
70
|
+
* guarantee is passing `site_id` explicitly per call.
|
|
71
|
+
*/
|
|
72
|
+
const CONCURRENCY_WARNING = 'This sets a PROCESS-WIDE default: every concurrent client sharing this '
|
|
73
|
+
+ 'MCP server process inherits it on calls that omit `site_id`. For '
|
|
74
|
+
+ 'isolation between parallel agents, pass `site_id` explicitly on each '
|
|
75
|
+
+ 'tool call instead of relying on this shared switch.';
|
|
60
76
|
/**
|
|
61
77
|
* Build the Phase 3 `yootheme_builder_use_site` tool.
|
|
62
78
|
*
|
|
@@ -68,12 +84,14 @@ export function buildUseSiteTool(pool) {
|
|
|
68
84
|
return defineTool({
|
|
69
85
|
name: 'yootheme_builder_use_site',
|
|
70
86
|
description: 'Switch the ACTIVE site for this multi-site session. After this call, ' +
|
|
71
|
-
'every tool that omits `site_id` targets the site you picked here
|
|
72
|
-
'
|
|
73
|
-
'pass `
|
|
74
|
-
'
|
|
75
|
-
'
|
|
76
|
-
'
|
|
87
|
+
'every tool that omits `site_id` targets the site you picked here. NOTE: ' +
|
|
88
|
+
'this default is PROCESS-WIDE — concurrent clients sharing this MCP server ' +
|
|
89
|
+
'inherit it; pass `site_id` per call for isolation between parallel agents. ' +
|
|
90
|
+
'Runs a /health + /etag probe by default; pass `probe: false` to switch ' +
|
|
91
|
+
'offline. A degraded site is a soft warning (the switch still happens). ' +
|
|
92
|
+
'`site_id` is REQUIRED. Keywords: switch/change/set active/target site, ' +
|
|
93
|
+
'select installation, use profile. Use yootheme_builder_sites_list first ' +
|
|
94
|
+
'to find IDs.',
|
|
77
95
|
inputSchema: {
|
|
78
96
|
site_id: z
|
|
79
97
|
.string()
|
|
@@ -114,6 +132,7 @@ export function buildUseSiteTool(pool) {
|
|
|
114
132
|
platform: site.platform.kind,
|
|
115
133
|
note: 'Reachability probe skipped (probe=false). The active site ' +
|
|
116
134
|
'is now set but its plugin reachability was not verified.',
|
|
135
|
+
concurrency_warning: CONCURRENCY_WARNING,
|
|
117
136
|
};
|
|
118
137
|
const detail = detailResult(buildUseSiteDetail(payload));
|
|
119
138
|
return withSiteMeta(structuredResult(detail, payload), site);
|
|
@@ -144,6 +163,7 @@ export function buildUseSiteTool(pool) {
|
|
|
144
163
|
? { bearer_error: probeResult.bearer_error }
|
|
145
164
|
: {}),
|
|
146
165
|
},
|
|
166
|
+
concurrency_warning: CONCURRENCY_WARNING,
|
|
147
167
|
...(warnings.length > 0 ? { warnings } : {}),
|
|
148
168
|
};
|
|
149
169
|
const detail = detailResult(buildUseSiteDetail(payload));
|