@sxl-studio/bridge 1.7.1 → 1.7.3

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.
Files changed (197) hide show
  1. package/README.md +342 -16
  2. package/dist/agent-recipes.d.ts +781 -11
  3. package/dist/agent-recipes.js +886 -13
  4. package/dist/agent-recipes.js.map +1 -1
  5. package/dist/agent-runbook.d.ts +50 -0
  6. package/dist/agent-runbook.js +243 -0
  7. package/dist/agent-runbook.js.map +1 -0
  8. package/dist/asset-upload.d.ts +63 -0
  9. package/dist/asset-upload.js +225 -0
  10. package/dist/asset-upload.js.map +1 -0
  11. package/dist/audit-store.d.ts +15 -0
  12. package/dist/audit-store.js +100 -0
  13. package/dist/audit-store.js.map +1 -0
  14. package/dist/audit.d.ts +4 -3
  15. package/dist/audit.js +37 -4
  16. package/dist/audit.js.map +1 -1
  17. package/dist/auth.d.ts +8 -1
  18. package/dist/auth.js +41 -1
  19. package/dist/auth.js.map +1 -1
  20. package/dist/bridge-agent-workflow-validation-cli.d.ts +2 -0
  21. package/dist/bridge-agent-workflow-validation-cli.js +68 -0
  22. package/dist/bridge-agent-workflow-validation-cli.js.map +1 -0
  23. package/dist/bridge-agent-workflow-validation.d.ts +42 -0
  24. package/dist/bridge-agent-workflow-validation.js +170 -0
  25. package/dist/bridge-agent-workflow-validation.js.map +1 -0
  26. package/dist/bridge-contract-audit.d.ts +45 -0
  27. package/dist/bridge-contract-audit.js +345 -0
  28. package/dist/bridge-contract-audit.js.map +1 -0
  29. package/dist/bridge-health-cli.d.ts +2 -0
  30. package/dist/bridge-health-cli.js +115 -0
  31. package/dist/bridge-health-cli.js.map +1 -0
  32. package/dist/bridge-health.d.ts +33 -0
  33. package/dist/bridge-health.js +594 -0
  34. package/dist/bridge-health.js.map +1 -0
  35. package/dist/bridge-live-validation-cli.d.ts +2 -0
  36. package/dist/bridge-live-validation-cli.js +114 -0
  37. package/dist/bridge-live-validation-cli.js.map +1 -0
  38. package/dist/bridge-live-validation.d.ts +39 -0
  39. package/dist/bridge-live-validation.js +1141 -0
  40. package/dist/bridge-live-validation.js.map +1 -0
  41. package/dist/bridge-performance-profile.d.ts +81 -0
  42. package/dist/bridge-performance-profile.js +227 -0
  43. package/dist/bridge-performance-profile.js.map +1 -0
  44. package/dist/bridge-readiness-cli.d.ts +30 -0
  45. package/dist/bridge-readiness-cli.js +242 -0
  46. package/dist/bridge-readiness-cli.js.map +1 -0
  47. package/dist/bridge-runtime-summary.d.ts +50 -0
  48. package/dist/bridge-runtime-summary.js +112 -0
  49. package/dist/bridge-runtime-summary.js.map +1 -0
  50. package/dist/bridge-workflow-smoke-cli.d.ts +2 -0
  51. package/dist/bridge-workflow-smoke-cli.js +126 -0
  52. package/dist/bridge-workflow-smoke-cli.js.map +1 -0
  53. package/dist/bridge-workflow-smoke.d.ts +39 -0
  54. package/dist/bridge-workflow-smoke.js +431 -0
  55. package/dist/bridge-workflow-smoke.js.map +1 -0
  56. package/dist/codeconnect-suggestions.d.ts +74 -0
  57. package/dist/codeconnect-suggestions.js +398 -0
  58. package/dist/codeconnect-suggestions.js.map +1 -0
  59. package/dist/codeconnect-template.d.ts +98 -0
  60. package/dist/codeconnect-template.js +280 -0
  61. package/dist/codeconnect-template.js.map +1 -0
  62. package/dist/command-queue.d.ts +24 -2
  63. package/dist/command-queue.js +295 -25
  64. package/dist/command-queue.js.map +1 -1
  65. package/dist/command-safety.d.ts +13 -0
  66. package/dist/command-safety.js +59 -0
  67. package/dist/command-safety.js.map +1 -0
  68. package/dist/enabled-library-search.d.ts +49 -0
  69. package/dist/enabled-library-search.js +151 -0
  70. package/dist/enabled-library-search.js.map +1 -0
  71. package/dist/figma-mcp-parity.d.ts +49 -0
  72. package/dist/figma-mcp-parity.js +368 -0
  73. package/dist/figma-mcp-parity.js.map +1 -0
  74. package/dist/figma-mcp-skills-parity.d.ts +61 -0
  75. package/dist/figma-mcp-skills-parity.js +434 -0
  76. package/dist/figma-mcp-skills-parity.js.map +1 -0
  77. package/dist/figma-rest-diagnostics.d.ts +50 -0
  78. package/dist/figma-rest-diagnostics.js +314 -0
  79. package/dist/figma-rest-diagnostics.js.map +1 -0
  80. package/dist/figma-rest.d.ts +27 -0
  81. package/dist/figma-rest.js +116 -0
  82. package/dist/figma-rest.js.map +1 -0
  83. package/dist/http-api.d.ts +14 -2
  84. package/dist/http-api.js +323 -17
  85. package/dist/http-api.js.map +1 -1
  86. package/dist/index.js +25 -1
  87. package/dist/index.js.map +1 -1
  88. package/dist/mcp-factory.d.ts +6 -1
  89. package/dist/mcp-factory.js +23 -4
  90. package/dist/mcp-factory.js.map +1 -1
  91. package/dist/mcp-runtime-probe.d.ts +22 -0
  92. package/dist/mcp-runtime-probe.js +777 -0
  93. package/dist/mcp-runtime-probe.js.map +1 -0
  94. package/dist/mcp-server.d.ts +2 -1
  95. package/dist/mcp-server.js +2 -2
  96. package/dist/mcp-server.js.map +1 -1
  97. package/dist/sxl-mcp-instructions.js +97 -25
  98. package/dist/sxl-mcp-instructions.js.map +1 -1
  99. package/dist/tools/audit.d.ts +22 -6
  100. package/dist/tools/audit.js +49 -7
  101. package/dist/tools/audit.js.map +1 -1
  102. package/dist/tools/capability-matrix.d.ts +22 -0
  103. package/dist/tools/capability-matrix.js +38 -0
  104. package/dist/tools/capability-matrix.js.map +1 -0
  105. package/dist/tools/catalogue-bootstrap.d.ts +1 -0
  106. package/dist/tools/catalogue-bootstrap.js +665 -30
  107. package/dist/tools/catalogue-bootstrap.js.map +1 -1
  108. package/dist/tools/code-connect-context.d.ts +3 -0
  109. package/dist/tools/code-connect-context.js +319 -0
  110. package/dist/tools/code-connect-context.js.map +1 -0
  111. package/dist/tools/code-connect-template.d.ts +3 -0
  112. package/dist/tools/code-connect-template.js +111 -0
  113. package/dist/tools/code-connect-template.js.map +1 -0
  114. package/dist/tools/composition.js +13 -28
  115. package/dist/tools/composition.js.map +1 -1
  116. package/dist/tools/compositions-orchestration.d.ts +14 -14
  117. package/dist/tools/compositions-orchestration.js +2 -2
  118. package/dist/tools/compositions-orchestration.js.map +1 -1
  119. package/dist/tools/data.js +839 -27
  120. package/dist/tools/data.js.map +1 -1
  121. package/dist/tools/design-context.d.ts +3 -0
  122. package/dist/tools/design-context.js +197 -0
  123. package/dist/tools/design-context.js.map +1 -0
  124. package/dist/tools/destructive-confirmation.d.ts +10 -0
  125. package/dist/tools/destructive-confirmation.js +22 -0
  126. package/dist/tools/destructive-confirmation.js.map +1 -0
  127. package/dist/tools/diagnostics.js +76 -51
  128. package/dist/tools/diagnostics.js.map +1 -1
  129. package/dist/tools/figma-mcp-design.d.ts +3 -0
  130. package/dist/tools/figma-mcp-design.js +377 -0
  131. package/dist/tools/figma-mcp-design.js.map +1 -0
  132. package/dist/tools/figma-nodes.js +57 -43
  133. package/dist/tools/figma-nodes.js.map +1 -1
  134. package/dist/tools/figma-rc-extended.js +23 -6
  135. package/dist/tools/figma-rc-extended.js.map +1 -1
  136. package/dist/tools/figma-rest.d.ts +39 -0
  137. package/dist/tools/figma-rest.js +279 -0
  138. package/dist/tools/figma-rest.js.map +1 -0
  139. package/dist/tools/git.js +11 -7
  140. package/dist/tools/git.js.map +1 -1
  141. package/dist/tools/large-data.d.ts +14 -0
  142. package/dist/tools/large-data.js +189 -0
  143. package/dist/tools/large-data.js.map +1 -0
  144. package/dist/tools/meta.d.ts +6 -1
  145. package/dist/tools/meta.js +89 -11
  146. package/dist/tools/meta.js.map +1 -1
  147. package/dist/tools/metadata.d.ts +3 -0
  148. package/dist/tools/metadata.js +140 -0
  149. package/dist/tools/metadata.js.map +1 -0
  150. package/dist/tools/mockup.d.ts +15 -156
  151. package/dist/tools/mockup.js +54 -121
  152. package/dist/tools/mockup.js.map +1 -1
  153. package/dist/tools/orchestration.js +73 -45
  154. package/dist/tools/orchestration.js.map +1 -1
  155. package/dist/tools/prompts.d.ts +3 -0
  156. package/dist/tools/prompts.js +219 -0
  157. package/dist/tools/prompts.js.map +1 -0
  158. package/dist/tools/registry.d.ts +19 -1
  159. package/dist/tools/registry.js +4 -4
  160. package/dist/tools/registry.js.map +1 -1
  161. package/dist/tools/resources.d.ts +19 -2
  162. package/dist/tools/resources.js +149 -5
  163. package/dist/tools/resources.js.map +1 -1
  164. package/dist/tools/schema-contracts.d.ts +4763 -0
  165. package/dist/tools/schema-contracts.js +814 -0
  166. package/dist/tools/schema-contracts.js.map +1 -0
  167. package/dist/tools/screenshot.d.ts +3 -0
  168. package/dist/tools/screenshot.js +144 -0
  169. package/dist/tools/screenshot.js.map +1 -0
  170. package/dist/tools/shared.d.ts +11 -1
  171. package/dist/tools/shared.js +55 -2
  172. package/dist/tools/shared.js.map +1 -1
  173. package/dist/tools/styles-orchestration.d.ts +2 -2
  174. package/dist/tools/styles-orchestration.js +13 -5
  175. package/dist/tools/styles-orchestration.js.map +1 -1
  176. package/dist/tools/styles.js +22 -8
  177. package/dist/tools/styles.js.map +1 -1
  178. package/dist/tools/tokens.d.ts +31 -692
  179. package/dist/tools/tokens.js +175 -135
  180. package/dist/tools/tokens.js.map +1 -1
  181. package/dist/tools/variable-defs.d.ts +3 -0
  182. package/dist/tools/variable-defs.js +338 -0
  183. package/dist/tools/variable-defs.js.map +1 -0
  184. package/dist/tools/variables-orchestration.js +13 -5
  185. package/dist/tools/variables-orchestration.js.map +1 -1
  186. package/dist/tools/variables.js +18 -15
  187. package/dist/tools/variables.js.map +1 -1
  188. package/dist/types.d.ts +53 -0
  189. package/dist/ultimate-readiness-audit.d.ts +37 -0
  190. package/dist/ultimate-readiness-audit.js +431 -0
  191. package/dist/ultimate-readiness-audit.js.map +1 -0
  192. package/dist/workflow-planner.d.ts +57 -0
  193. package/dist/workflow-planner.js +464 -0
  194. package/dist/workflow-planner.js.map +1 -0
  195. package/dist/ws-server.js +16 -3
  196. package/dist/ws-server.js.map +1 -1
  197. package/package.json +19 -3
@@ -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,2 @@
1
+ #!/usr/bin/env node
2
+ export declare function runBridgeWorkflowSmokeCli(argv?: string[]): Promise<void>;
@@ -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>;