@sxl-studio/bridge 1.7.2 → 1.8.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 +342 -16
- package/dist/agent-recipes.d.ts +781 -11
- package/dist/agent-recipes.js +886 -13
- package/dist/agent-recipes.js.map +1 -1
- package/dist/agent-runbook.d.ts +50 -0
- package/dist/agent-runbook.js +243 -0
- package/dist/agent-runbook.js.map +1 -0
- package/dist/asset-upload.d.ts +63 -0
- package/dist/asset-upload.js +225 -0
- package/dist/asset-upload.js.map +1 -0
- package/dist/audit-store.d.ts +15 -0
- package/dist/audit-store.js +100 -0
- package/dist/audit-store.js.map +1 -0
- package/dist/audit.d.ts +4 -3
- package/dist/audit.js +37 -4
- package/dist/audit.js.map +1 -1
- package/dist/auth.d.ts +8 -1
- package/dist/auth.js +41 -1
- package/dist/auth.js.map +1 -1
- package/dist/bridge-agent-workflow-validation-cli.d.ts +2 -0
- package/dist/bridge-agent-workflow-validation-cli.js +68 -0
- package/dist/bridge-agent-workflow-validation-cli.js.map +1 -0
- package/dist/bridge-agent-workflow-validation.d.ts +42 -0
- package/dist/bridge-agent-workflow-validation.js +170 -0
- package/dist/bridge-agent-workflow-validation.js.map +1 -0
- package/dist/bridge-contract-audit.d.ts +45 -0
- package/dist/bridge-contract-audit.js +345 -0
- package/dist/bridge-contract-audit.js.map +1 -0
- package/dist/bridge-health-cli.d.ts +2 -0
- package/dist/bridge-health-cli.js +115 -0
- package/dist/bridge-health-cli.js.map +1 -0
- package/dist/bridge-health.d.ts +33 -0
- package/dist/bridge-health.js +594 -0
- package/dist/bridge-health.js.map +1 -0
- package/dist/bridge-live-validation-cli.d.ts +2 -0
- package/dist/bridge-live-validation-cli.js +114 -0
- package/dist/bridge-live-validation-cli.js.map +1 -0
- package/dist/bridge-live-validation.d.ts +39 -0
- package/dist/bridge-live-validation.js +1141 -0
- package/dist/bridge-live-validation.js.map +1 -0
- package/dist/bridge-performance-profile.d.ts +81 -0
- package/dist/bridge-performance-profile.js +227 -0
- package/dist/bridge-performance-profile.js.map +1 -0
- package/dist/bridge-readiness-cli.d.ts +30 -0
- package/dist/bridge-readiness-cli.js +242 -0
- package/dist/bridge-readiness-cli.js.map +1 -0
- package/dist/bridge-runtime-summary.d.ts +50 -0
- package/dist/bridge-runtime-summary.js +112 -0
- package/dist/bridge-runtime-summary.js.map +1 -0
- package/dist/bridge-workflow-smoke-cli.d.ts +2 -0
- package/dist/bridge-workflow-smoke-cli.js +126 -0
- package/dist/bridge-workflow-smoke-cli.js.map +1 -0
- package/dist/bridge-workflow-smoke.d.ts +39 -0
- package/dist/bridge-workflow-smoke.js +431 -0
- package/dist/bridge-workflow-smoke.js.map +1 -0
- package/dist/codeconnect-suggestions.d.ts +74 -0
- package/dist/codeconnect-suggestions.js +398 -0
- package/dist/codeconnect-suggestions.js.map +1 -0
- package/dist/codeconnect-template.d.ts +98 -0
- package/dist/codeconnect-template.js +280 -0
- package/dist/codeconnect-template.js.map +1 -0
- package/dist/command-queue.d.ts +11 -1
- package/dist/command-queue.js +200 -1
- package/dist/command-queue.js.map +1 -1
- package/dist/command-safety.d.ts +13 -0
- package/dist/command-safety.js +59 -0
- package/dist/command-safety.js.map +1 -0
- package/dist/enabled-library-search.d.ts +49 -0
- package/dist/enabled-library-search.js +151 -0
- package/dist/enabled-library-search.js.map +1 -0
- package/dist/figma-mcp-parity.d.ts +49 -0
- package/dist/figma-mcp-parity.js +368 -0
- package/dist/figma-mcp-parity.js.map +1 -0
- package/dist/figma-mcp-skills-parity.d.ts +61 -0
- package/dist/figma-mcp-skills-parity.js +434 -0
- package/dist/figma-mcp-skills-parity.js.map +1 -0
- package/dist/figma-rest-diagnostics.d.ts +50 -0
- package/dist/figma-rest-diagnostics.js +314 -0
- package/dist/figma-rest-diagnostics.js.map +1 -0
- package/dist/figma-rest.d.ts +27 -0
- package/dist/figma-rest.js +116 -0
- package/dist/figma-rest.js.map +1 -0
- package/dist/http-api.d.ts +16 -2
- package/dist/http-api.js +329 -17
- package/dist/http-api.js.map +1 -1
- package/dist/index.js +25 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp-factory.d.ts +6 -1
- package/dist/mcp-factory.js +23 -4
- package/dist/mcp-factory.js.map +1 -1
- package/dist/mcp-runtime-probe.d.ts +22 -0
- package/dist/mcp-runtime-probe.js +777 -0
- package/dist/mcp-runtime-probe.js.map +1 -0
- package/dist/mcp-server.d.ts +2 -1
- package/dist/mcp-server.js +2 -2
- package/dist/mcp-server.js.map +1 -1
- package/dist/sxl-mcp-instructions.js +99 -26
- package/dist/sxl-mcp-instructions.js.map +1 -1
- package/dist/tools/audit.d.ts +22 -6
- package/dist/tools/audit.js +49 -7
- package/dist/tools/audit.js.map +1 -1
- package/dist/tools/capability-matrix.d.ts +22 -0
- package/dist/tools/capability-matrix.js +38 -0
- package/dist/tools/capability-matrix.js.map +1 -0
- package/dist/tools/catalogue-bootstrap.d.ts +1 -0
- package/dist/tools/catalogue-bootstrap.js +665 -30
- package/dist/tools/catalogue-bootstrap.js.map +1 -1
- package/dist/tools/code-connect-context.d.ts +3 -0
- package/dist/tools/code-connect-context.js +319 -0
- package/dist/tools/code-connect-context.js.map +1 -0
- package/dist/tools/code-connect-template.d.ts +3 -0
- package/dist/tools/code-connect-template.js +111 -0
- package/dist/tools/code-connect-template.js.map +1 -0
- package/dist/tools/composition.js +15 -30
- package/dist/tools/composition.js.map +1 -1
- package/dist/tools/compositions-orchestration.d.ts +14 -14
- package/dist/tools/compositions-orchestration.js +2 -2
- package/dist/tools/compositions-orchestration.js.map +1 -1
- package/dist/tools/data.js +839 -27
- package/dist/tools/data.js.map +1 -1
- package/dist/tools/design-context.d.ts +3 -0
- package/dist/tools/design-context.js +197 -0
- package/dist/tools/design-context.js.map +1 -0
- package/dist/tools/destructive-confirmation.d.ts +10 -0
- package/dist/tools/destructive-confirmation.js +25 -0
- package/dist/tools/destructive-confirmation.js.map +1 -0
- package/dist/tools/diagnostics.js +76 -51
- package/dist/tools/diagnostics.js.map +1 -1
- package/dist/tools/figma-mcp-design.d.ts +3 -0
- package/dist/tools/figma-mcp-design.js +377 -0
- package/dist/tools/figma-mcp-design.js.map +1 -0
- package/dist/tools/figma-nodes.js +57 -43
- package/dist/tools/figma-nodes.js.map +1 -1
- package/dist/tools/figma-rc-extended.js +23 -6
- package/dist/tools/figma-rc-extended.js.map +1 -1
- package/dist/tools/figma-rest.d.ts +39 -0
- package/dist/tools/figma-rest.js +279 -0
- package/dist/tools/figma-rest.js.map +1 -0
- package/dist/tools/git.js +11 -7
- package/dist/tools/git.js.map +1 -1
- package/dist/tools/large-data.d.ts +14 -0
- package/dist/tools/large-data.js +189 -0
- package/dist/tools/large-data.js.map +1 -0
- package/dist/tools/meta.d.ts +6 -1
- package/dist/tools/meta.js +89 -11
- package/dist/tools/meta.js.map +1 -1
- package/dist/tools/metadata.d.ts +3 -0
- package/dist/tools/metadata.js +140 -0
- package/dist/tools/metadata.js.map +1 -0
- package/dist/tools/mockup.d.ts +15 -156
- package/dist/tools/mockup.js +54 -121
- package/dist/tools/mockup.js.map +1 -1
- package/dist/tools/orchestration.js +75 -47
- package/dist/tools/orchestration.js.map +1 -1
- package/dist/tools/prompts.d.ts +3 -0
- package/dist/tools/prompts.js +219 -0
- package/dist/tools/prompts.js.map +1 -0
- package/dist/tools/registry.d.ts +19 -1
- package/dist/tools/registry.js +4 -4
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/resources.d.ts +19 -2
- package/dist/tools/resources.js +149 -5
- package/dist/tools/resources.js.map +1 -1
- package/dist/tools/schema-contracts.d.ts +4763 -0
- package/dist/tools/schema-contracts.js +814 -0
- package/dist/tools/schema-contracts.js.map +1 -0
- package/dist/tools/screenshot.d.ts +3 -0
- package/dist/tools/screenshot.js +144 -0
- package/dist/tools/screenshot.js.map +1 -0
- package/dist/tools/shared.d.ts +11 -1
- package/dist/tools/shared.js +55 -2
- package/dist/tools/shared.js.map +1 -1
- package/dist/tools/styles-orchestration.d.ts +2 -2
- package/dist/tools/styles-orchestration.js +13 -5
- package/dist/tools/styles-orchestration.js.map +1 -1
- package/dist/tools/styles.js +22 -8
- package/dist/tools/styles.js.map +1 -1
- package/dist/tools/tokens.d.ts +31 -692
- package/dist/tools/tokens.js +175 -135
- package/dist/tools/tokens.js.map +1 -1
- package/dist/tools/variable-defs.d.ts +3 -0
- package/dist/tools/variable-defs.js +338 -0
- package/dist/tools/variable-defs.js.map +1 -0
- package/dist/tools/variables-orchestration.js +13 -5
- package/dist/tools/variables-orchestration.js.map +1 -1
- package/dist/tools/variables.js +18 -15
- package/dist/tools/variables.js.map +1 -1
- package/dist/types.d.ts +53 -0
- package/dist/ultimate-readiness-audit.d.ts +37 -0
- package/dist/ultimate-readiness-audit.js +431 -0
- package/dist/ultimate-readiness-audit.js.map +1 -0
- package/dist/workflow-planner.d.ts +57 -0
- package/dist/workflow-planner.js +464 -0
- package/dist/workflow-planner.js.map +1 -0
- package/dist/workspace-blob-store.d.ts +6 -0
- package/dist/workspace-blob-store.js +9 -0
- package/dist/workspace-blob-store.js.map +1 -1
- package/dist/workspace-path-http.d.ts +24 -0
- package/dist/workspace-path-http.js +146 -0
- package/dist/workspace-path-http.js.map +1 -0
- package/dist/ws-server.js +16 -3
- package/dist/ws-server.js.map +1 -1
- package/package.json +21 -2
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { pathToFileURL } from "node:url";
|
|
3
|
+
import { runBridgeHealthCheck } from "./bridge-health.js";
|
|
4
|
+
import { runBridgeLiveValidation } from "./bridge-live-validation.js";
|
|
5
|
+
import { buildUltimateReadinessAudit } from "./ultimate-readiness-audit.js";
|
|
6
|
+
function usage() {
|
|
7
|
+
return [
|
|
8
|
+
"Usage: sxl-bridge-readiness [--json] [--fail-on-warn] [--runtime] [--require-live] [--url <baseUrl>] [--auth-token <token>] [--timeout-ms <ms>] [--suite baseline|all] [--write-canary] [--cleanup]",
|
|
9
|
+
"",
|
|
10
|
+
"Runs the local Ultimate Bridge requirement-by-requirement readiness audit.",
|
|
11
|
+
"WARN exits successfully by default but should be reviewed before release; explicit companion/future scope is reported separately.",
|
|
12
|
+
"Use --runtime to add running Bridge HTTP/MCP proof. Use --require-live to fail unless a connected SXL Studio plugin passes live validation.",
|
|
13
|
+
].join("\n");
|
|
14
|
+
}
|
|
15
|
+
function parseArgs(argv) {
|
|
16
|
+
const args = {
|
|
17
|
+
json: false,
|
|
18
|
+
failOnWarn: false,
|
|
19
|
+
runtime: false,
|
|
20
|
+
requireLive: false,
|
|
21
|
+
writeCanary: false,
|
|
22
|
+
cleanup: false,
|
|
23
|
+
};
|
|
24
|
+
for (let i = 0; i < argv.length; i += 1) {
|
|
25
|
+
const arg = argv[i];
|
|
26
|
+
if (arg === "--help" || arg === "-h") {
|
|
27
|
+
console.log(usage());
|
|
28
|
+
process.exit(0);
|
|
29
|
+
}
|
|
30
|
+
if (arg === "--json") {
|
|
31
|
+
args.json = true;
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
if (arg === "--fail-on-warn") {
|
|
35
|
+
args.failOnWarn = true;
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
if (arg === "--runtime") {
|
|
39
|
+
args.runtime = true;
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
if (arg === "--require-live") {
|
|
43
|
+
args.runtime = true;
|
|
44
|
+
args.requireLive = true;
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
if (arg === "--write-canary") {
|
|
48
|
+
args.runtime = true;
|
|
49
|
+
args.requireLive = true;
|
|
50
|
+
args.writeCanary = true;
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
if (arg === "--cleanup") {
|
|
54
|
+
args.cleanup = true;
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if (arg === "--url") {
|
|
58
|
+
args.runtime = true;
|
|
59
|
+
args.baseUrl = argv[i + 1];
|
|
60
|
+
i += 1;
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
if (arg === "--auth-token") {
|
|
64
|
+
args.authToken = argv[i + 1];
|
|
65
|
+
i += 1;
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
if (arg === "--timeout-ms") {
|
|
69
|
+
const value = Number.parseInt(argv[i + 1] ?? "", 10);
|
|
70
|
+
if (!Number.isFinite(value) || value <= 0) {
|
|
71
|
+
throw new Error("--timeout-ms must be a positive integer.");
|
|
72
|
+
}
|
|
73
|
+
args.timeoutMs = value;
|
|
74
|
+
i += 1;
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
if (arg === "--suite") {
|
|
78
|
+
const value = argv[i + 1];
|
|
79
|
+
if (value !== "baseline" && value !== "all") {
|
|
80
|
+
throw new Error("--suite must be baseline or all.");
|
|
81
|
+
}
|
|
82
|
+
args.runtime = true;
|
|
83
|
+
args.requireLive = true;
|
|
84
|
+
args.suite = value;
|
|
85
|
+
i += 1;
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
throw new Error(`Unknown argument: ${arg}`);
|
|
89
|
+
}
|
|
90
|
+
if (args.cleanup && !args.writeCanary) {
|
|
91
|
+
throw new Error("--cleanup requires --write-canary.");
|
|
92
|
+
}
|
|
93
|
+
return args;
|
|
94
|
+
}
|
|
95
|
+
function combineStatus(statuses) {
|
|
96
|
+
if (statuses.includes("fail"))
|
|
97
|
+
return "fail";
|
|
98
|
+
if (statuses.includes("warn"))
|
|
99
|
+
return "warn";
|
|
100
|
+
return "pass";
|
|
101
|
+
}
|
|
102
|
+
function runtimePluginConnected(report) {
|
|
103
|
+
return report.checks.some((check) => check.name === "runtime.status" && check.details?.["pluginConnected"] === true);
|
|
104
|
+
}
|
|
105
|
+
function runtimeLiveStatus(args) {
|
|
106
|
+
if (args.liveValidation)
|
|
107
|
+
return args.liveValidation.status;
|
|
108
|
+
if (args.requireLive)
|
|
109
|
+
return "fail";
|
|
110
|
+
return runtimePluginConnected(args.health) ? "not-requested" : "not-connected";
|
|
111
|
+
}
|
|
112
|
+
export async function buildReadinessCliReport(options = {}) {
|
|
113
|
+
const audit = buildUltimateReadinessAudit();
|
|
114
|
+
const statuses = [audit.status];
|
|
115
|
+
let runtime;
|
|
116
|
+
if (options.runtime === true) {
|
|
117
|
+
const health = await runBridgeHealthCheck({
|
|
118
|
+
runtime: true,
|
|
119
|
+
baseUrl: options.baseUrl,
|
|
120
|
+
authToken: options.authToken,
|
|
121
|
+
timeoutMs: options.timeoutMs,
|
|
122
|
+
requirePlugin: options.requireLive === true,
|
|
123
|
+
fetchImpl: options.fetchImpl,
|
|
124
|
+
});
|
|
125
|
+
statuses.push(health.status);
|
|
126
|
+
const shouldRunLive = options.requireLive === true || runtimePluginConnected(health);
|
|
127
|
+
const liveValidation = shouldRunLive
|
|
128
|
+
? await runBridgeLiveValidation({
|
|
129
|
+
baseUrl: options.baseUrl,
|
|
130
|
+
authToken: options.authToken,
|
|
131
|
+
timeoutMs: options.timeoutMs,
|
|
132
|
+
suite: options.suite,
|
|
133
|
+
writeCanary: options.writeCanary,
|
|
134
|
+
cleanup: options.cleanup,
|
|
135
|
+
fetchImpl: options.fetchImpl,
|
|
136
|
+
})
|
|
137
|
+
: undefined;
|
|
138
|
+
if (liveValidation)
|
|
139
|
+
statuses.push(liveValidation.status);
|
|
140
|
+
if (options.requireLive === true && !liveValidation)
|
|
141
|
+
statuses.push("fail");
|
|
142
|
+
if (options.requireLive !== true && !liveValidation && !runtimePluginConnected(health))
|
|
143
|
+
statuses.push("warn");
|
|
144
|
+
runtime = {
|
|
145
|
+
health,
|
|
146
|
+
liveValidation,
|
|
147
|
+
liveRequired: options.requireLive === true,
|
|
148
|
+
liveStatus: runtimeLiveStatus({ health, liveValidation, requireLive: options.requireLive === true }),
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
const status = combineStatus(statuses);
|
|
152
|
+
return {
|
|
153
|
+
ok: status !== "fail",
|
|
154
|
+
status,
|
|
155
|
+
audit,
|
|
156
|
+
runtime,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
export function renderReadinessText(audit) {
|
|
160
|
+
const lines = [];
|
|
161
|
+
lines.push(`SXL Bridge ultimate readiness: ${audit.status.toUpperCase()}`);
|
|
162
|
+
lines.push(`Requirements: ${audit.summary.pass} pass, ${audit.summary.warn} warn, ${audit.summary.fail} fail`);
|
|
163
|
+
lines.push(`Surface: ${audit.summary.toolCount} tools, ${audit.summary.recipeCount} recipes, ${audit.summary.schemaCount} schemas, ${audit.summary.promptCount} prompts`);
|
|
164
|
+
lines.push(`Figma MCP: ${audit.summary.officialFigmaMcpTools} tools, ${audit.summary.officialFigmaMcpSkills} skills, ${audit.summary.companionFigmaMcpTools} companion tools, ${audit.summary.companionFigmaMcpSkills} companion skills`);
|
|
165
|
+
lines.push("");
|
|
166
|
+
for (const requirement of audit.requirements) {
|
|
167
|
+
lines.push(`- ${requirement.status.toUpperCase()} ${requirement.id}: ${requirement.title}`);
|
|
168
|
+
if (requirement.missing.length > 0) {
|
|
169
|
+
lines.push(` missing: ${requirement.missing.join(", ")}`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
if (audit.scope.companion.length > 0) {
|
|
173
|
+
lines.push("");
|
|
174
|
+
lines.push(`Companion Figma MCP scope: ${audit.scope.companion.join(", ")}`);
|
|
175
|
+
}
|
|
176
|
+
if (audit.scope.future.length > 0) {
|
|
177
|
+
lines.push(`Future/unsupported scope: ${audit.scope.future.join(", ")}`);
|
|
178
|
+
}
|
|
179
|
+
return lines.join("\n");
|
|
180
|
+
}
|
|
181
|
+
export function renderReadinessReportText(report) {
|
|
182
|
+
const lines = [renderReadinessText(report.audit)];
|
|
183
|
+
if (report.runtime) {
|
|
184
|
+
lines.push("");
|
|
185
|
+
lines.push("Runtime proof:");
|
|
186
|
+
lines.push(`- Bridge HTTP/MCP health: ${report.runtime.health.status.toUpperCase()}`);
|
|
187
|
+
lines.push(`- Live Figma E2E: ${report.runtime.liveStatus.toUpperCase()}`);
|
|
188
|
+
if (report.runtime.health.findings.length > 0) {
|
|
189
|
+
lines.push(" Health findings:");
|
|
190
|
+
for (const finding of report.runtime.health.findings.slice(0, 5)) {
|
|
191
|
+
const endpoint = finding.endpoint ? ` ${finding.endpoint}` : "";
|
|
192
|
+
lines.push(` - ${finding.severity.toUpperCase()} ${finding.code}${endpoint}: ${finding.message}`);
|
|
193
|
+
}
|
|
194
|
+
if (report.runtime.health.findings.length > 5) {
|
|
195
|
+
lines.push(` - ... ${report.runtime.health.findings.length - 5} more`);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
if (report.runtime.liveStatus === "not-connected") {
|
|
199
|
+
lines.push(" Remote Connect plugin session is not connected; live Figma workflows are not proven.");
|
|
200
|
+
}
|
|
201
|
+
if (report.runtime.liveRequired && report.runtime.liveStatus === "fail") {
|
|
202
|
+
lines.push(" Required live validation failed. Open the SXL Studio plugin, enable Remote Connect, then rerun this command.");
|
|
203
|
+
}
|
|
204
|
+
if (report.runtime.liveValidation) {
|
|
205
|
+
lines.push(` suite=${report.runtime.liveValidation.suite}, writeCanary=${report.runtime.liveValidation.writeCanary}, cleanup=${report.runtime.liveValidation.cleanup}`);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
lines.push("");
|
|
209
|
+
lines.push(`Overall readiness: ${report.status.toUpperCase()}`);
|
|
210
|
+
return lines.join("\n");
|
|
211
|
+
}
|
|
212
|
+
export async function runBridgeReadinessCli(argv = process.argv.slice(2)) {
|
|
213
|
+
const args = parseArgs(argv);
|
|
214
|
+
const report = await buildReadinessCliReport({
|
|
215
|
+
runtime: args.runtime,
|
|
216
|
+
requireLive: args.requireLive,
|
|
217
|
+
baseUrl: args.baseUrl,
|
|
218
|
+
authToken: args.authToken,
|
|
219
|
+
timeoutMs: args.timeoutMs,
|
|
220
|
+
suite: args.suite,
|
|
221
|
+
writeCanary: args.writeCanary,
|
|
222
|
+
cleanup: args.cleanup,
|
|
223
|
+
});
|
|
224
|
+
if (args.json) {
|
|
225
|
+
console.log(JSON.stringify(args.runtime ? report : report.audit, null, 2));
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
console.log(args.runtime ? renderReadinessReportText(report) : renderReadinessText(report.audit));
|
|
229
|
+
}
|
|
230
|
+
const shouldFail = !report.ok || (args.failOnWarn && report.status === "warn");
|
|
231
|
+
process.exit(shouldFail ? 1 : 0);
|
|
232
|
+
}
|
|
233
|
+
const isCliEntry = process.argv[1] !== undefined && import.meta.url === pathToFileURL(process.argv[1]).href;
|
|
234
|
+
if (isCliEntry) {
|
|
235
|
+
runBridgeReadinessCli().catch((error) => {
|
|
236
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
237
|
+
console.error("");
|
|
238
|
+
console.error(usage());
|
|
239
|
+
process.exit(2);
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
//# sourceMappingURL=bridge-readiness-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge-readiness-cli.js","sourceRoot":"","sources":["../src/bridge-readiness-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { CommandQueue } from "./command-queue.js";
|
|
2
|
+
import type { CommandQueueSnapshot, SessionInfo } from "./types.js";
|
|
3
|
+
export type BridgeRuntimeSummary = {
|
|
4
|
+
ok: boolean;
|
|
5
|
+
status: "pass" | "warn" | "fail";
|
|
6
|
+
version: 1;
|
|
7
|
+
bridgeVersion: string;
|
|
8
|
+
generatedAt: string;
|
|
9
|
+
transport: {
|
|
10
|
+
httpPort: number | null;
|
|
11
|
+
mcpStreamableHttp: string | null;
|
|
12
|
+
authEnabled: boolean;
|
|
13
|
+
};
|
|
14
|
+
plugin: {
|
|
15
|
+
connected: boolean;
|
|
16
|
+
pluginName: string | null;
|
|
17
|
+
connectedForMs: number | null;
|
|
18
|
+
lastHeartbeatAgeMs: number | null;
|
|
19
|
+
};
|
|
20
|
+
queue: {
|
|
21
|
+
idle: boolean;
|
|
22
|
+
current: CommandQueueSnapshot["current"];
|
|
23
|
+
queuedCount: number;
|
|
24
|
+
immediateCount: number;
|
|
25
|
+
maxAgeMs: number;
|
|
26
|
+
};
|
|
27
|
+
recent: {
|
|
28
|
+
events: {
|
|
29
|
+
count: number;
|
|
30
|
+
failures: number;
|
|
31
|
+
timeouts: number;
|
|
32
|
+
pluginEvents: number;
|
|
33
|
+
slowEvents: number;
|
|
34
|
+
};
|
|
35
|
+
audit: {
|
|
36
|
+
count: number;
|
|
37
|
+
failures: number;
|
|
38
|
+
slowCommands: number;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
recommendations: string[];
|
|
42
|
+
};
|
|
43
|
+
export type BridgeRuntimeSummaryOptions = {
|
|
44
|
+
queue: CommandQueue;
|
|
45
|
+
sessionInfo?: SessionInfo;
|
|
46
|
+
bridgePort?: number;
|
|
47
|
+
auditLimit?: number;
|
|
48
|
+
now?: number;
|
|
49
|
+
};
|
|
50
|
+
export declare function buildBridgeRuntimeSummary(options: BridgeRuntimeSummaryOptions): BridgeRuntimeSummary;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { getAuditSnapshot } from "./audit.js";
|
|
2
|
+
import { isAuthEnabled } from "./auth.js";
|
|
3
|
+
import { getBridgePackageVersion } from "./bridge-version.js";
|
|
4
|
+
const SLOW_EVENT_MS = 30_000;
|
|
5
|
+
const SLOW_AUDIT_MS = 60_000;
|
|
6
|
+
function maxCommandAge(snapshot) {
|
|
7
|
+
const ages = [
|
|
8
|
+
snapshot.current?.ageMs ?? 0,
|
|
9
|
+
...snapshot.queued.map((item) => item.ageMs),
|
|
10
|
+
...snapshot.immediate.map((item) => item.ageMs),
|
|
11
|
+
];
|
|
12
|
+
return Math.max(0, ...ages);
|
|
13
|
+
}
|
|
14
|
+
function eventStats(events) {
|
|
15
|
+
return {
|
|
16
|
+
count: events.length,
|
|
17
|
+
failures: events.filter((event) => event.status === "failed").length,
|
|
18
|
+
timeouts: events.filter((event) => event.status === "timeout").length,
|
|
19
|
+
pluginEvents: events.filter((event) => event.source === "plugin").length,
|
|
20
|
+
slowEvents: events.filter((event) => (event.durationMs ?? 0) >= SLOW_EVENT_MS).length,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function auditStats(limit) {
|
|
24
|
+
const entries = getAuditSnapshot(limit);
|
|
25
|
+
return {
|
|
26
|
+
count: entries.length,
|
|
27
|
+
failures: entries.filter((entry) => entry.status !== "completed").length,
|
|
28
|
+
slowCommands: entries.filter((entry) => (entry.durationMs ?? 0) >= SLOW_AUDIT_MS).length,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function recommendations(args) {
|
|
32
|
+
const result = new Set();
|
|
33
|
+
if (!args.pluginConnected) {
|
|
34
|
+
result.add("Open SXL Studio plugin Remote Connect before running plugin-routed canvas, token, composition, data, or audit tools.");
|
|
35
|
+
if (args.bridgePort !== null) {
|
|
36
|
+
result.add(`Set the plugin Remote Connect port to ${args.bridgePort} if Bridge is not using the default port.`);
|
|
37
|
+
}
|
|
38
|
+
if (args.authEnabled) {
|
|
39
|
+
result.add("Bridge auth is enabled; enter the same BRIDGE_AUTH_TOKEN in the plugin Remote Connect overlay token field.");
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (args.current) {
|
|
43
|
+
result.add(`Wait for current command "${args.current.commandType}" to finish or inspect /api/events before queueing heavy writes.`);
|
|
44
|
+
}
|
|
45
|
+
if (args.queuedCount > 0) {
|
|
46
|
+
result.add("Bridge serializes plugin commands; keep workflows batched and avoid submitting duplicate long-running writes.");
|
|
47
|
+
}
|
|
48
|
+
if (args.failures > 0 || args.timeouts > 0) {
|
|
49
|
+
result.add("Inspect get_bridge_audit_log and /api/events for recent failures before retrying.");
|
|
50
|
+
}
|
|
51
|
+
if (args.slowCommands > 0) {
|
|
52
|
+
result.add("Use summary/paginated response modes and dry-run gates before large workflows.");
|
|
53
|
+
}
|
|
54
|
+
return Array.from(result);
|
|
55
|
+
}
|
|
56
|
+
export function buildBridgeRuntimeSummary(options) {
|
|
57
|
+
const now = options.now ?? Date.now();
|
|
58
|
+
const bridgePort = options.bridgePort ?? Number.parseInt(process.env["BRIDGE_PORT"] ?? "", 10);
|
|
59
|
+
const port = Number.isFinite(bridgePort) ? bridgePort : null;
|
|
60
|
+
const snapshot = options.queue.getSnapshot(now);
|
|
61
|
+
const events = options.queue.getEventsSnapshot({ limit: 100 });
|
|
62
|
+
const eventSummary = eventStats(events);
|
|
63
|
+
const auditSummary = auditStats(options.auditLimit ?? 50);
|
|
64
|
+
const session = options.sessionInfo;
|
|
65
|
+
const pluginConnected = session?.connected === true;
|
|
66
|
+
const queuedCount = snapshot.queued.length;
|
|
67
|
+
const immediateCount = snapshot.immediate.length;
|
|
68
|
+
const recs = recommendations({
|
|
69
|
+
pluginConnected,
|
|
70
|
+
authEnabled: isAuthEnabled(),
|
|
71
|
+
bridgePort: port,
|
|
72
|
+
queuedCount,
|
|
73
|
+
current: snapshot.current,
|
|
74
|
+
failures: eventSummary.failures + auditSummary.failures,
|
|
75
|
+
timeouts: eventSummary.timeouts,
|
|
76
|
+
slowCommands: eventSummary.slowEvents + auditSummary.slowCommands,
|
|
77
|
+
});
|
|
78
|
+
const status = !pluginConnected || queuedCount > 0 || snapshot.current || eventSummary.failures > 0 || eventSummary.timeouts > 0
|
|
79
|
+
? "warn"
|
|
80
|
+
: "pass";
|
|
81
|
+
return {
|
|
82
|
+
ok: true,
|
|
83
|
+
status,
|
|
84
|
+
version: 1,
|
|
85
|
+
bridgeVersion: getBridgePackageVersion(),
|
|
86
|
+
generatedAt: new Date(now).toISOString(),
|
|
87
|
+
transport: {
|
|
88
|
+
httpPort: port,
|
|
89
|
+
mcpStreamableHttp: port ? `http://127.0.0.1:${port}/mcp` : null,
|
|
90
|
+
authEnabled: isAuthEnabled(),
|
|
91
|
+
},
|
|
92
|
+
plugin: {
|
|
93
|
+
connected: pluginConnected,
|
|
94
|
+
pluginName: session?.pluginName ?? null,
|
|
95
|
+
connectedForMs: session?.connectedAt ? Math.max(0, now - session.connectedAt) : null,
|
|
96
|
+
lastHeartbeatAgeMs: session?.lastHeartbeat ? Math.max(0, now - session.lastHeartbeat) : null,
|
|
97
|
+
},
|
|
98
|
+
queue: {
|
|
99
|
+
idle: !snapshot.current && queuedCount === 0 && immediateCount === 0,
|
|
100
|
+
current: snapshot.current,
|
|
101
|
+
queuedCount,
|
|
102
|
+
immediateCount,
|
|
103
|
+
maxAgeMs: maxCommandAge(snapshot),
|
|
104
|
+
},
|
|
105
|
+
recent: {
|
|
106
|
+
events: eventSummary,
|
|
107
|
+
audit: auditSummary,
|
|
108
|
+
},
|
|
109
|
+
recommendations: recs,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=bridge-runtime-summary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge-runtime-summary.js","sourceRoot":"","sources":["../src/bridge-runtime-summary.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { pathToFileURL } from "node:url";
|
|
3
|
+
import { runBridgeWorkflowSmoke } from "./bridge-workflow-smoke.js";
|
|
4
|
+
function usage() {
|
|
5
|
+
return [
|
|
6
|
+
"Usage: sxl-bridge-smoke [--url <baseUrl>] [--auth-token <token>] [--timeout-ms <ms>] [--component-query <text>] [--component-prefix <prefix>] [--component-limit <n>] [--apply] [--cleanup] [--json]",
|
|
7
|
+
"",
|
|
8
|
+
"Default mode is non-destructive: status -> get_plugin_status -> find_components -> build_mockup dryRun.",
|
|
9
|
+
"Use --apply only when you intentionally want to create the smoke frame in the active Figma file.",
|
|
10
|
+
"Use --apply --cleanup to delete the smoke frame after verifying creation.",
|
|
11
|
+
].join("\n");
|
|
12
|
+
}
|
|
13
|
+
function parseArgs(argv) {
|
|
14
|
+
const args = { apply: false, cleanup: false, json: false };
|
|
15
|
+
for (let i = 0; i < argv.length; i += 1) {
|
|
16
|
+
const arg = argv[i];
|
|
17
|
+
if (arg === "--help" || arg === "-h") {
|
|
18
|
+
console.log(usage());
|
|
19
|
+
process.exit(0);
|
|
20
|
+
}
|
|
21
|
+
if (arg === "--apply") {
|
|
22
|
+
args.apply = true;
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
if (arg === "--cleanup") {
|
|
26
|
+
args.cleanup = true;
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
if (arg === "--json") {
|
|
30
|
+
args.json = true;
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
if (arg === "--url") {
|
|
34
|
+
args.baseUrl = argv[i + 1];
|
|
35
|
+
i += 1;
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
if (arg === "--auth-token") {
|
|
39
|
+
args.authToken = argv[i + 1];
|
|
40
|
+
i += 1;
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
if (arg === "--timeout-ms") {
|
|
44
|
+
const value = Number.parseInt(argv[i + 1] ?? "", 10);
|
|
45
|
+
if (!Number.isFinite(value) || value <= 0) {
|
|
46
|
+
throw new Error("--timeout-ms must be a positive integer.");
|
|
47
|
+
}
|
|
48
|
+
args.timeoutMs = value;
|
|
49
|
+
i += 1;
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
if (arg === "--component-query") {
|
|
53
|
+
args.componentQuery = argv[i + 1];
|
|
54
|
+
i += 1;
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if (arg === "--component-prefix") {
|
|
58
|
+
args.componentPrefix = argv[i + 1];
|
|
59
|
+
i += 1;
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
if (arg === "--component-limit") {
|
|
63
|
+
const value = Number.parseInt(argv[i + 1] ?? "", 10);
|
|
64
|
+
if (!Number.isFinite(value) || value <= 0) {
|
|
65
|
+
throw new Error("--component-limit must be a positive integer.");
|
|
66
|
+
}
|
|
67
|
+
args.componentLimit = value;
|
|
68
|
+
i += 1;
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
throw new Error(`Unknown argument: ${arg}`);
|
|
72
|
+
}
|
|
73
|
+
return args;
|
|
74
|
+
}
|
|
75
|
+
function renderText(report) {
|
|
76
|
+
const lines = [];
|
|
77
|
+
const mode = report.apply ? report.cleanup ? "apply+cleanup" : "apply" : "dry-run";
|
|
78
|
+
lines.push(`SXL Bridge workflow smoke: ${report.status.toUpperCase()} (${mode})`);
|
|
79
|
+
lines.push(`Version: ${report.bridgeVersion}`);
|
|
80
|
+
lines.push(`Base URL: ${report.baseUrl}`);
|
|
81
|
+
lines.push("");
|
|
82
|
+
for (const step of report.steps) {
|
|
83
|
+
const command = step.commandType ? ` [${step.commandType}]` : "";
|
|
84
|
+
const timing = typeof step.durationMs === "number" ? ` ${step.durationMs}ms` : "";
|
|
85
|
+
lines.push(`- ${step.status.toUpperCase()} ${step.name}${command}${timing}`);
|
|
86
|
+
}
|
|
87
|
+
if (report.findings.length > 0) {
|
|
88
|
+
lines.push("");
|
|
89
|
+
lines.push("Findings:");
|
|
90
|
+
for (const finding of report.findings) {
|
|
91
|
+
const step = finding.step ? ` ${finding.step}` : "";
|
|
92
|
+
lines.push(`- ${finding.severity.toUpperCase()} ${finding.code}${step}: ${finding.message}`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return lines.join("\n");
|
|
96
|
+
}
|
|
97
|
+
export async function runBridgeWorkflowSmokeCli(argv = process.argv.slice(2)) {
|
|
98
|
+
const args = parseArgs(argv);
|
|
99
|
+
const report = await runBridgeWorkflowSmoke({
|
|
100
|
+
baseUrl: args.baseUrl,
|
|
101
|
+
authToken: args.authToken,
|
|
102
|
+
timeoutMs: args.timeoutMs,
|
|
103
|
+
apply: args.apply,
|
|
104
|
+
cleanup: args.cleanup,
|
|
105
|
+
componentQuery: args.componentQuery,
|
|
106
|
+
componentPrefix: args.componentPrefix,
|
|
107
|
+
componentLimit: args.componentLimit,
|
|
108
|
+
});
|
|
109
|
+
if (args.json) {
|
|
110
|
+
console.log(JSON.stringify(report, null, 2));
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
console.log(renderText(report));
|
|
114
|
+
}
|
|
115
|
+
process.exit(report.ok ? 0 : 1);
|
|
116
|
+
}
|
|
117
|
+
const isCliEntry = process.argv[1] !== undefined && import.meta.url === pathToFileURL(process.argv[1]).href;
|
|
118
|
+
if (isCliEntry) {
|
|
119
|
+
runBridgeWorkflowSmokeCli().catch((error) => {
|
|
120
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
121
|
+
console.error("");
|
|
122
|
+
console.error(usage());
|
|
123
|
+
process.exit(2);
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=bridge-workflow-smoke-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge-workflow-smoke-cli.js","sourceRoot":"","sources":["../src/bridge-workflow-smoke-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export type BridgeWorkflowSmokeSeverity = "error" | "warning" | "info";
|
|
2
|
+
export type BridgeWorkflowSmokeFinding = {
|
|
3
|
+
severity: BridgeWorkflowSmokeSeverity;
|
|
4
|
+
code: string;
|
|
5
|
+
message: string;
|
|
6
|
+
step?: string;
|
|
7
|
+
};
|
|
8
|
+
export type BridgeWorkflowSmokeStep = {
|
|
9
|
+
name: string;
|
|
10
|
+
commandType?: string;
|
|
11
|
+
ok: boolean;
|
|
12
|
+
status: "pass" | "warn" | "fail";
|
|
13
|
+
durationMs?: number;
|
|
14
|
+
details?: Record<string, unknown>;
|
|
15
|
+
};
|
|
16
|
+
export type BridgeWorkflowSmokeReport = {
|
|
17
|
+
ok: boolean;
|
|
18
|
+
status: "pass" | "warn" | "fail";
|
|
19
|
+
version: 1;
|
|
20
|
+
bridgeVersion: string;
|
|
21
|
+
generatedAt: string;
|
|
22
|
+
baseUrl: string;
|
|
23
|
+
apply: boolean;
|
|
24
|
+
cleanup: boolean;
|
|
25
|
+
steps: BridgeWorkflowSmokeStep[];
|
|
26
|
+
findings: BridgeWorkflowSmokeFinding[];
|
|
27
|
+
};
|
|
28
|
+
export type BridgeWorkflowSmokeOptions = {
|
|
29
|
+
baseUrl?: string;
|
|
30
|
+
authToken?: string;
|
|
31
|
+
timeoutMs?: number;
|
|
32
|
+
apply?: boolean;
|
|
33
|
+
cleanup?: boolean;
|
|
34
|
+
componentQuery?: string;
|
|
35
|
+
componentPrefix?: string;
|
|
36
|
+
componentLimit?: number;
|
|
37
|
+
fetchImpl?: typeof fetch;
|
|
38
|
+
};
|
|
39
|
+
export declare function runBridgeWorkflowSmoke(options?: BridgeWorkflowSmokeOptions): Promise<BridgeWorkflowSmokeReport>;
|