@stackwright-pro/mcp 0.2.0-alpha.115 → 0.2.0-alpha.118

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/dist/server.js CHANGED
@@ -1314,7 +1314,7 @@ function answersToManifestFormat(answers, questions) {
1314
1314
  return qHeader.startsWith(headerLower.split("-")[0]);
1315
1315
  });
1316
1316
  if (matched) {
1317
- result[matched.id] = answer.selected_options[0] || "";
1317
+ result[matched.id] = answer.selected_options.length > 1 ? answer.selected_options : answer.selected_options[0] || "";
1318
1318
  }
1319
1319
  continue;
1320
1320
  }
@@ -1786,7 +1786,10 @@ function handleSavePhaseAnswers(input) {
1786
1786
  }
1787
1787
  } else {
1788
1788
  answers = Object.fromEntries(
1789
- input.rawAnswers.map((a) => [a.question_header, a.selected_options[0] ?? ""])
1789
+ input.rawAnswers.map((a) => [
1790
+ a.question_header,
1791
+ a.selected_options.length > 1 ? a.selected_options : a.selected_options[0] ?? ""
1792
+ ])
1790
1793
  );
1791
1794
  }
1792
1795
  const payload = {
@@ -4347,6 +4350,12 @@ function handleWritePhaseQuestions(input) {
4347
4350
  isError: true
4348
4351
  };
4349
4352
  }
4353
+ if (AUTO_EXECUTE_PHASES.has(phase)) {
4354
+ return {
4355
+ text: JSON.stringify({ success: true, phase, questionCount: 0, autoExecute: true }),
4356
+ isError: false
4357
+ };
4358
+ }
4350
4359
  try {
4351
4360
  const questions = parseLLMQuestionsResponse(responseText);
4352
4361
  let requiredPackages = {
@@ -7129,7 +7138,7 @@ var _checksums = /* @__PURE__ */ new Map([
7129
7138
  ],
7130
7139
  [
7131
7140
  "stackwright-pro-form-wizard-otter.json",
7132
- "941bb11b767530460f96fdd08af638b3ede9f7a1ae6f19de04b7d81c95cc62ad"
7141
+ "7d958f2873cb80955ba5453837b67bee427f8399868979f59fecebe380a35ab9"
7133
7142
  ],
7134
7143
  [
7135
7144
  "stackwright-pro-geo-otter.json",
@@ -8359,10 +8368,20 @@ var WriteWorkflowContainerPageInputSchema = import_zod21.z.object({
8359
8368
  * Union of required roles across all steps in the workflow YAML.
8360
8369
  * Consumed by auth-reconcile to build protectedRoutes.
8361
8370
  * Must be non-empty — workflow pages are always auth-protected.
8371
+ *
8372
+ * ⚠️ MUST be a JSON array of strings: ["ROLE_A", "ROLE_B"].
8373
+ * Do NOT pass a YAML bracket string "[ROLE_A, ROLE_B]",
8374
+ * a JSON-encoded string "[\"ROLE_A\", \"ROLE_B\"]",
8375
+ * or a comma-separated string "ROLE_A,ROLE_B" — all are rejected.
8376
+ *
8377
+ * Regression guard (swp-zfa9): 3-of-4 workflow-otter fan-outs crashed on
8378
+ * runs 12-15 because the LLM passed a JSON-encoded string instead of an array.
8362
8379
  */
8363
8380
  requiredRoles: import_zod21.z.array(import_zod21.z.string().min(1)).min(1, {
8364
- message: "requiredRoles must have at least one role \u2014 workflow pages are always auth-protected"
8365
- }),
8381
+ message: 'requiredRoles must have at least one role \u2014 workflow pages are always auth-protected. Pass a JSON array: ["ROLE_A", "ROLE_B"] \u2014 NOT a string or CSV.'
8382
+ }).describe(
8383
+ 'JSON array of role strings. Example: ["ESF8_COORDINATOR", "HOSPITAL_EM"]. Must be a real JSON array \u2014 NOT a stringified array, YAML bracket sequence, or CSV string.'
8384
+ ),
8366
8385
  /**
8367
8386
  * Persistence key for workflow state (localStorage slot).
8368
8387
  * Defaults to `workflow-<workflowId>` when omitted.
@@ -8456,7 +8475,11 @@ function registerWriteWorkflowContainerPageTool(server2) {
8456
8475
  " - meta.authRequired: true, meta.requiredRoles: <your input>",
8457
8476
  " - One workflow_wizard content item binding workflowFile + workflowId",
8458
8477
  "",
8459
- "requiredRoles: supply the UNION of required roles from all steps in your workflow YAML.",
8478
+ "requiredRoles: MUST be a JSON array of strings (the union of all step auth.required_roles).",
8479
+ ' CORRECT: ["ESF8_COORDINATOR", "HOSPITAL_EM", "EMS_DISPATCHER"]',
8480
+ ' WRONG: "[\\"ESF8_COORDINATOR\\", \\"HOSPITAL_EM\\"]" (string containing JSON)',
8481
+ ' WRONG: "ESF8_COORDINATOR,HOSPITAL_EM" (comma-separated string)',
8482
+ ' WRONG: "[ESF8_COORDINATOR, HOSPITAL_EM]" (YAML bracket notation)',
8460
8483
  'pageSlug: convention is "workflows/<workflowId>" \u2014 must start with "workflows/".'
8461
8484
  ].join("\n"),
8462
8485
  WriteWorkflowContainerPageInputSchema.shape,
@@ -9604,7 +9627,7 @@ var package_default = {
9604
9627
  "@stackwright-pro/pulse": "workspace:*",
9605
9628
  "@stackwright-pro/telemetry": "workspace:*",
9606
9629
  "@stackwright-pro/types": "workspace:*",
9607
- "@stackwright/mcp": "0.6.0-alpha.2",
9630
+ "@stackwright/mcp": "0.6.0-alpha.5",
9608
9631
  "@types/js-yaml": "^4.0.9",
9609
9632
  "js-yaml": "^4.2.0",
9610
9633
  "proper-lockfile": "^4.1.2",
@@ -9626,7 +9649,7 @@ var package_default = {
9626
9649
  "test:coverage": "vitest run --coverage"
9627
9650
  },
9628
9651
  name: "@stackwright-pro/mcp",
9629
- version: "0.2.0-alpha.115",
9652
+ version: "0.2.0-alpha.118",
9630
9653
  description: "MCP tools for Stackwright Pro - Data Explorer, Security, ISR, and Dashboard generation",
9631
9654
  license: "SEE LICENSE IN LICENSE",
9632
9655
  main: "./dist/server.js",