musubi-sdd 5.1.0 → 5.6.2

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 (232) hide show
  1. package/README.ja.md +106 -48
  2. package/README.md +110 -32
  3. package/bin/musubi-analyze.js +74 -67
  4. package/bin/musubi-browser.js +27 -26
  5. package/bin/musubi-change.js +48 -47
  6. package/bin/musubi-checkpoint.js +10 -7
  7. package/bin/musubi-convert.js +25 -25
  8. package/bin/musubi-costs.js +27 -10
  9. package/bin/musubi-gui.js +52 -46
  10. package/bin/musubi-init.js +1952 -10
  11. package/bin/musubi-orchestrate.js +327 -239
  12. package/bin/musubi-remember.js +69 -56
  13. package/bin/musubi-resolve.js +53 -45
  14. package/bin/musubi-trace.js +51 -22
  15. package/bin/musubi-validate.js +39 -30
  16. package/bin/musubi-workflow.js +33 -34
  17. package/bin/musubi.js +39 -2
  18. package/package.json +1 -1
  19. package/src/agents/agent-loop.js +94 -95
  20. package/src/agents/agentic/code-generator.js +119 -109
  21. package/src/agents/agentic/code-reviewer.js +105 -108
  22. package/src/agents/agentic/index.js +4 -4
  23. package/src/agents/browser/action-executor.js +13 -13
  24. package/src/agents/browser/ai-comparator.js +11 -10
  25. package/src/agents/browser/context-manager.js +6 -6
  26. package/src/agents/browser/index.js +5 -5
  27. package/src/agents/browser/nl-parser.js +31 -46
  28. package/src/agents/browser/screenshot.js +2 -2
  29. package/src/agents/browser/test-generator.js +6 -4
  30. package/src/agents/function-tool.js +71 -65
  31. package/src/agents/index.js +7 -7
  32. package/src/agents/schema-generator.js +98 -94
  33. package/src/analyzers/ast-extractor.js +158 -146
  34. package/src/analyzers/codegraph-auto-update.js +858 -0
  35. package/src/analyzers/complexity-analyzer.js +536 -0
  36. package/src/analyzers/context-optimizer.js +241 -126
  37. package/src/analyzers/impact-analyzer.js +1 -1
  38. package/src/analyzers/large-project-analyzer.js +766 -0
  39. package/src/analyzers/repository-map.js +77 -81
  40. package/src/analyzers/security-analyzer.js +19 -11
  41. package/src/analyzers/stuck-detector.js +19 -17
  42. package/src/converters/index.js +78 -57
  43. package/src/converters/ir/types.js +12 -12
  44. package/src/converters/parsers/musubi-parser.js +134 -126
  45. package/src/converters/parsers/openapi-parser.js +70 -53
  46. package/src/converters/parsers/speckit-parser.js +239 -175
  47. package/src/converters/writers/musubi-writer.js +123 -118
  48. package/src/converters/writers/speckit-writer.js +124 -113
  49. package/src/generators/rust-migration-generator.js +512 -0
  50. package/src/gui/public/index.html +1365 -1211
  51. package/src/gui/server.js +41 -40
  52. package/src/gui/services/file-watcher.js +23 -8
  53. package/src/gui/services/project-scanner.js +26 -20
  54. package/src/gui/services/replanning-service.js +27 -23
  55. package/src/gui/services/traceability-service.js +8 -8
  56. package/src/gui/services/workflow-service.js +14 -7
  57. package/src/index.js +151 -0
  58. package/src/integrations/cicd.js +90 -104
  59. package/src/integrations/codegraph-mcp.js +643 -0
  60. package/src/integrations/documentation.js +142 -103
  61. package/src/integrations/examples.js +95 -80
  62. package/src/integrations/github-client.js +17 -17
  63. package/src/integrations/index.js +5 -5
  64. package/src/integrations/mcp/index.js +21 -21
  65. package/src/integrations/mcp/mcp-context-provider.js +76 -78
  66. package/src/integrations/mcp/mcp-discovery.js +74 -72
  67. package/src/integrations/mcp/mcp-tool-registry.js +99 -94
  68. package/src/integrations/mcp-connector.js +70 -66
  69. package/src/integrations/platforms.js +50 -49
  70. package/src/integrations/tool-discovery.js +37 -31
  71. package/src/llm-providers/anthropic-provider.js +11 -11
  72. package/src/llm-providers/base-provider.js +16 -18
  73. package/src/llm-providers/copilot-provider.js +22 -19
  74. package/src/llm-providers/index.js +26 -25
  75. package/src/llm-providers/ollama-provider.js +11 -11
  76. package/src/llm-providers/openai-provider.js +12 -12
  77. package/src/managers/agent-memory.js +36 -24
  78. package/src/managers/checkpoint-manager.js +4 -8
  79. package/src/managers/delta-spec.js +19 -19
  80. package/src/managers/index.js +13 -4
  81. package/src/managers/memory-condenser.js +35 -45
  82. package/src/managers/repo-skill-manager.js +57 -31
  83. package/src/managers/skill-loader.js +25 -22
  84. package/src/managers/skill-tools.js +36 -72
  85. package/src/managers/workflow.js +30 -22
  86. package/src/monitoring/cost-tracker.js +48 -46
  87. package/src/monitoring/incident-manager.js +116 -106
  88. package/src/monitoring/index.js +144 -134
  89. package/src/monitoring/observability.js +75 -62
  90. package/src/monitoring/quality-dashboard.js +45 -41
  91. package/src/monitoring/release-manager.js +63 -53
  92. package/src/orchestration/agent-skill-binding.js +39 -47
  93. package/src/orchestration/error-handler.js +65 -107
  94. package/src/orchestration/guardrails/base-guardrail.js +26 -24
  95. package/src/orchestration/guardrails/guardrail-rules.js +50 -64
  96. package/src/orchestration/guardrails/index.js +5 -5
  97. package/src/orchestration/guardrails/input-guardrail.js +58 -45
  98. package/src/orchestration/guardrails/output-guardrail.js +104 -81
  99. package/src/orchestration/guardrails/safety-check.js +79 -79
  100. package/src/orchestration/index.js +38 -55
  101. package/src/orchestration/mcp-tool-adapters.js +96 -99
  102. package/src/orchestration/orchestration-engine.js +21 -21
  103. package/src/orchestration/pattern-registry.js +60 -45
  104. package/src/orchestration/patterns/auto.js +34 -47
  105. package/src/orchestration/patterns/group-chat.js +59 -65
  106. package/src/orchestration/patterns/handoff.js +67 -65
  107. package/src/orchestration/patterns/human-in-loop.js +51 -72
  108. package/src/orchestration/patterns/nested.js +25 -40
  109. package/src/orchestration/patterns/sequential.js +35 -34
  110. package/src/orchestration/patterns/swarm.js +63 -56
  111. package/src/orchestration/patterns/triage.js +150 -109
  112. package/src/orchestration/reasoning/index.js +9 -9
  113. package/src/orchestration/reasoning/planning-engine.js +143 -140
  114. package/src/orchestration/reasoning/reasoning-engine.js +206 -144
  115. package/src/orchestration/reasoning/self-correction.js +121 -128
  116. package/src/orchestration/replanning/adaptive-goal-modifier.js +107 -112
  117. package/src/orchestration/replanning/alternative-generator.js +37 -42
  118. package/src/orchestration/replanning/config.js +63 -59
  119. package/src/orchestration/replanning/goal-progress-tracker.js +98 -100
  120. package/src/orchestration/replanning/index.js +24 -20
  121. package/src/orchestration/replanning/plan-evaluator.js +49 -50
  122. package/src/orchestration/replanning/plan-monitor.js +32 -28
  123. package/src/orchestration/replanning/proactive-path-optimizer.js +175 -178
  124. package/src/orchestration/replanning/replan-history.js +33 -26
  125. package/src/orchestration/replanning/replanning-engine.js +106 -108
  126. package/src/orchestration/skill-executor.js +107 -109
  127. package/src/orchestration/skill-registry.js +85 -89
  128. package/src/orchestration/workflow-examples.js +228 -231
  129. package/src/orchestration/workflow-executor.js +65 -68
  130. package/src/orchestration/workflow-orchestrator.js +72 -73
  131. package/src/phase4-integration.js +47 -40
  132. package/src/phase5-integration.js +89 -30
  133. package/src/reporters/coverage-report.js +82 -30
  134. package/src/reporters/hierarchical-reporter.js +498 -0
  135. package/src/reporters/traceability-matrix-report.js +29 -20
  136. package/src/resolvers/issue-resolver.js +43 -31
  137. package/src/steering/advanced-validation.js +133 -124
  138. package/src/steering/auto-updater.js +60 -73
  139. package/src/steering/index.js +6 -6
  140. package/src/steering/quality-metrics.js +41 -35
  141. package/src/steering/steering-auto-update.js +83 -86
  142. package/src/steering/steering-validator.js +98 -106
  143. package/src/steering/template-constraints.js +53 -54
  144. package/src/templates/agents/claude-code/CLAUDE.md +32 -32
  145. package/src/templates/agents/claude-code/skills/agent-assistant/SKILL.md +13 -5
  146. package/src/templates/agents/claude-code/skills/ai-ml-engineer/mlops-guide.md +23 -23
  147. package/src/templates/agents/claude-code/skills/ai-ml-engineer/model-card-template.md +60 -41
  148. package/src/templates/agents/claude-code/skills/api-designer/api-patterns.md +27 -19
  149. package/src/templates/agents/claude-code/skills/api-designer/openapi-template.md +11 -7
  150. package/src/templates/agents/claude-code/skills/bug-hunter/SKILL.md +4 -3
  151. package/src/templates/agents/claude-code/skills/bug-hunter/root-cause-analysis.md +37 -15
  152. package/src/templates/agents/claude-code/skills/change-impact-analyzer/dependency-graph-patterns.md +36 -42
  153. package/src/templates/agents/claude-code/skills/change-impact-analyzer/impact-analysis-template.md +69 -60
  154. package/src/templates/agents/claude-code/skills/cloud-architect/aws-patterns.md +31 -38
  155. package/src/templates/agents/claude-code/skills/cloud-architect/azure-patterns.md +28 -23
  156. package/src/templates/agents/claude-code/skills/code-reviewer/SKILL.md +61 -0
  157. package/src/templates/agents/claude-code/skills/code-reviewer/best-practices.md +27 -0
  158. package/src/templates/agents/claude-code/skills/code-reviewer/review-checklist.md +29 -10
  159. package/src/templates/agents/claude-code/skills/code-reviewer/review-standards.md +29 -24
  160. package/src/templates/agents/claude-code/skills/constitution-enforcer/SKILL.md +8 -6
  161. package/src/templates/agents/claude-code/skills/constitution-enforcer/constitutional-articles.md +62 -26
  162. package/src/templates/agents/claude-code/skills/constitution-enforcer/phase-minus-one-gates.md +35 -16
  163. package/src/templates/agents/claude-code/skills/database-administrator/backup-recovery.md +27 -17
  164. package/src/templates/agents/claude-code/skills/database-administrator/tuning-guide.md +25 -20
  165. package/src/templates/agents/claude-code/skills/database-schema-designer/schema-patterns.md +39 -22
  166. package/src/templates/agents/claude-code/skills/devops-engineer/ci-cd-templates.md +25 -22
  167. package/src/templates/agents/claude-code/skills/issue-resolver/SKILL.md +24 -21
  168. package/src/templates/agents/claude-code/skills/orchestrator/SKILL.md +148 -63
  169. package/src/templates/agents/claude-code/skills/orchestrator/patterns.md +35 -16
  170. package/src/templates/agents/claude-code/skills/orchestrator/selection-matrix.md +69 -64
  171. package/src/templates/agents/claude-code/skills/performance-engineer/optimization-playbook.md +47 -47
  172. package/src/templates/agents/claude-code/skills/performance-optimizer/SKILL.md +69 -0
  173. package/src/templates/agents/claude-code/skills/performance-optimizer/benchmark-template.md +63 -45
  174. package/src/templates/agents/claude-code/skills/performance-optimizer/optimization-patterns.md +33 -35
  175. package/src/templates/agents/claude-code/skills/project-manager/SKILL.md +7 -6
  176. package/src/templates/agents/claude-code/skills/project-manager/agile-ceremonies.md +47 -28
  177. package/src/templates/agents/claude-code/skills/project-manager/project-templates.md +94 -78
  178. package/src/templates/agents/claude-code/skills/quality-assurance/SKILL.md +20 -17
  179. package/src/templates/agents/claude-code/skills/quality-assurance/qa-plan-template.md +63 -49
  180. package/src/templates/agents/claude-code/skills/release-coordinator/SKILL.md +5 -5
  181. package/src/templates/agents/claude-code/skills/release-coordinator/feature-flag-guide.md +30 -26
  182. package/src/templates/agents/claude-code/skills/release-coordinator/release-plan-template.md +67 -35
  183. package/src/templates/agents/claude-code/skills/requirements-analyst/ears-format.md +54 -42
  184. package/src/templates/agents/claude-code/skills/requirements-analyst/validation-rules.md +36 -33
  185. package/src/templates/agents/claude-code/skills/security-auditor/SKILL.md +77 -19
  186. package/src/templates/agents/claude-code/skills/security-auditor/audit-checklists.md +24 -24
  187. package/src/templates/agents/claude-code/skills/security-auditor/owasp-top-10.md +61 -20
  188. package/src/templates/agents/claude-code/skills/security-auditor/vulnerability-patterns.md +43 -11
  189. package/src/templates/agents/claude-code/skills/site-reliability-engineer/SKILL.md +1 -0
  190. package/src/templates/agents/claude-code/skills/site-reliability-engineer/incident-response-template.md +55 -25
  191. package/src/templates/agents/claude-code/skills/site-reliability-engineer/observability-patterns.md +78 -68
  192. package/src/templates/agents/claude-code/skills/site-reliability-engineer/slo-sli-guide.md +73 -53
  193. package/src/templates/agents/claude-code/skills/software-developer/solid-principles.md +83 -37
  194. package/src/templates/agents/claude-code/skills/software-developer/test-first-workflow.md +38 -31
  195. package/src/templates/agents/claude-code/skills/steering/SKILL.md +1 -0
  196. package/src/templates/agents/claude-code/skills/steering/auto-update-rules.md +31 -0
  197. package/src/templates/agents/claude-code/skills/system-architect/adr-template.md +25 -7
  198. package/src/templates/agents/claude-code/skills/system-architect/c4-model-guide.md +74 -61
  199. package/src/templates/agents/claude-code/skills/technical-writer/doc-templates/documentation-templates.md +70 -52
  200. package/src/templates/agents/claude-code/skills/test-engineer/SKILL.md +2 -0
  201. package/src/templates/agents/claude-code/skills/test-engineer/ears-test-mapping.md +75 -71
  202. package/src/templates/agents/claude-code/skills/test-engineer/test-types.md +85 -63
  203. package/src/templates/agents/claude-code/skills/traceability-auditor/coverage-matrix-template.md +39 -36
  204. package/src/templates/agents/claude-code/skills/traceability-auditor/gap-detection-rules.md +22 -17
  205. package/src/templates/agents/claude-code/skills/ui-ux-designer/SKILL.md +1 -0
  206. package/src/templates/agents/claude-code/skills/ui-ux-designer/accessibility-guidelines.md +49 -75
  207. package/src/templates/agents/claude-code/skills/ui-ux-designer/design-system-components.md +71 -59
  208. package/src/templates/agents/codex/AGENTS.md +74 -42
  209. package/src/templates/agents/cursor/AGENTS.md +74 -42
  210. package/src/templates/agents/gemini-cli/GEMINI.md +74 -42
  211. package/src/templates/agents/github-copilot/AGENTS.md +83 -51
  212. package/src/templates/agents/qwen-code/QWEN.md +74 -42
  213. package/src/templates/agents/windsurf/AGENTS.md +74 -42
  214. package/src/templates/architectures/README.md +41 -0
  215. package/src/templates/architectures/clean-architecture/README.md +113 -0
  216. package/src/templates/architectures/event-driven/README.md +162 -0
  217. package/src/templates/architectures/hexagonal/README.md +130 -0
  218. package/src/templates/index.js +6 -1
  219. package/src/templates/locale-manager.js +16 -16
  220. package/src/templates/shared/delta-spec-template.md +20 -13
  221. package/src/templates/shared/github-actions/musubi-issue-resolver.yml +5 -5
  222. package/src/templates/shared/github-actions/musubi-security-check.yml +3 -3
  223. package/src/templates/shared/github-actions/musubi-validate.yml +4 -4
  224. package/src/templates/shared/steering/structure.md +95 -0
  225. package/src/templates/skills/browser-agent.md +21 -16
  226. package/src/templates/skills/web-gui.md +8 -0
  227. package/src/templates/template-constraints.js +50 -53
  228. package/src/validators/advanced-validation.js +30 -36
  229. package/src/validators/constitutional-validator.js +77 -73
  230. package/src/validators/critic-system.js +49 -59
  231. package/src/validators/delta-format.js +59 -55
  232. package/src/validators/traceability-validator.js +7 -11
@@ -1,9 +1,9 @@
1
1
  /**
2
2
  * @fileoverview Output Guardrail for validating agent outputs
3
- *
3
+ *
4
4
  * OutputGuardrail validates and filters agent outputs before they reach users.
5
5
  * Inspired by OpenAI Agents SDK guardrails pattern.
6
- *
6
+ *
7
7
  * @module orchestration/guardrails/output-guardrail
8
8
  * @version 3.9.0
9
9
  */
@@ -11,7 +11,12 @@
11
11
  'use strict';
12
12
 
13
13
  const { BaseGuardrail } = require('./base-guardrail');
14
- const { RuleBuilder, rules, globalRuleRegistry, SecurityPatterns } = require('./guardrail-rules');
14
+ const {
15
+ RuleBuilder: _RuleBuilder,
16
+ rules,
17
+ globalRuleRegistry,
18
+ SecurityPatterns,
19
+ } = require('./guardrail-rules');
15
20
 
16
21
  /**
17
22
  * Output guardrail configuration
@@ -46,7 +51,7 @@ const SecretPatterns = {
46
51
  TOKEN: /\b(token|bearer|auth)\s*[:=]\s*['"]?[\w.-]{20,}['"]?/gi,
47
52
  AWS_KEY: /\b(AKIA[0-9A-Z]{16})\b/g,
48
53
  PRIVATE_KEY: /-----BEGIN\s+(RSA\s+)?PRIVATE KEY-----/g,
49
- CONNECTION_STRING: /\b(mongodb|mysql|postgres|redis):\/\/[^\s]+/gi
54
+ CONNECTION_STRING: /\b(mongodb|mysql|postgres|redis):\/\/[^\s]+/gi,
50
55
  };
51
56
 
52
57
  /**
@@ -65,7 +70,7 @@ class OutputGuardrail extends BaseGuardrail {
65
70
  failFast: config.failFast,
66
71
  severity: config.severity,
67
72
  tripwireEnabled: config.tripwireEnabled,
68
- options: config.options
73
+ options: config.options,
69
74
  });
70
75
 
71
76
  // Load rules from config, rule set, or default
@@ -84,7 +89,7 @@ class OutputGuardrail extends BaseGuardrail {
84
89
  redactSecrets: true,
85
90
  replacement: '[REDACTED]',
86
91
  customPatterns: [],
87
- ...config.redactOptions
92
+ ...config.redactOptions,
88
93
  };
89
94
 
90
95
  this.enforceTone = config.enforceTone || false;
@@ -111,7 +116,7 @@ class OutputGuardrail extends BaseGuardrail {
111
116
  this.contentPolicies.push({
112
117
  name: policy.name,
113
118
  check: policy.check,
114
- severity: policy.severity || 'error'
119
+ severity: policy.severity || 'error',
115
120
  });
116
121
  return this;
117
122
  }
@@ -128,7 +133,7 @@ class OutputGuardrail extends BaseGuardrail {
128
133
  this.qualityChecks.push({
129
134
  name: check.name,
130
135
  check: check.check,
131
- threshold: check.threshold || 0.5
136
+ threshold: check.threshold || 0.5,
132
137
  });
133
138
  return this;
134
139
  }
@@ -148,12 +153,14 @@ class OutputGuardrail extends BaseGuardrail {
148
153
  try {
149
154
  processedOutput = await this.customTransformer(output, context);
150
155
  } catch (error) {
151
- violations.push(this.createViolation(
152
- 'TRANSFORMER_ERROR',
153
- `Output transformer error: ${error.message}`,
154
- 'error',
155
- { error: error.message }
156
- ));
156
+ violations.push(
157
+ this.createViolation(
158
+ 'TRANSFORMER_ERROR',
159
+ `Output transformer error: ${error.message}`,
160
+ 'error',
161
+ { error: error.message }
162
+ )
163
+ );
157
164
  }
158
165
  }
159
166
 
@@ -162,20 +169,24 @@ class OutputGuardrail extends BaseGuardrail {
162
169
  try {
163
170
  const customResult = await this.customValidator(processedOutput, context);
164
171
  if (customResult === false || (customResult && customResult.passed === false)) {
165
- violations.push(this.createViolation(
166
- 'CUSTOM_VALIDATION_FAILED',
167
- customResult.message || 'Custom validation failed',
168
- 'error',
169
- { custom: true }
170
- ));
172
+ violations.push(
173
+ this.createViolation(
174
+ 'CUSTOM_VALIDATION_FAILED',
175
+ customResult.message || 'Custom validation failed',
176
+ 'error',
177
+ { custom: true }
178
+ )
179
+ );
171
180
  }
172
181
  } catch (error) {
173
- violations.push(this.createViolation(
174
- 'CUSTOM_VALIDATOR_ERROR',
175
- `Custom validator error: ${error.message}`,
176
- 'error',
177
- { error: error.message }
178
- ));
182
+ violations.push(
183
+ this.createViolation(
184
+ 'CUSTOM_VALIDATOR_ERROR',
185
+ `Custom validator error: ${error.message}`,
186
+ 'error',
187
+ { error: error.message }
188
+ )
189
+ );
179
190
  }
180
191
  }
181
192
 
@@ -191,20 +202,24 @@ class OutputGuardrail extends BaseGuardrail {
191
202
  try {
192
203
  const result = await policy.check(contentToValidate, context);
193
204
  if (!result.passed) {
194
- violations.push(this.createViolation(
195
- `POLICY_${policy.name.toUpperCase()}`,
196
- result.message || `Content policy '${policy.name}' violated`,
197
- policy.severity,
198
- { policy: policy.name }
199
- ));
205
+ violations.push(
206
+ this.createViolation(
207
+ `POLICY_${policy.name.toUpperCase()}`,
208
+ result.message || `Content policy '${policy.name}' violated`,
209
+ policy.severity,
210
+ { policy: policy.name }
211
+ )
212
+ );
200
213
  }
201
214
  } catch (error) {
202
- violations.push(this.createViolation(
203
- 'POLICY_ERROR',
204
- `Policy '${policy.name}' error: ${error.message}`,
205
- 'error',
206
- { policy: policy.name, error: error.message }
207
- ));
215
+ violations.push(
216
+ this.createViolation(
217
+ 'POLICY_ERROR',
218
+ `Policy '${policy.name}' error: ${error.message}`,
219
+ 'error',
220
+ { policy: policy.name, error: error.message }
221
+ )
222
+ );
208
223
  }
209
224
  }
210
225
 
@@ -214,23 +229,27 @@ class OutputGuardrail extends BaseGuardrail {
214
229
  try {
215
230
  const result = await qualityCheck.check(contentToValidate, context);
216
231
  qualityScores[qualityCheck.name] = result.score;
217
-
232
+
218
233
  if (result.score < qualityCheck.threshold) {
219
- violations.push(this.createViolation(
220
- `QUALITY_${qualityCheck.name.toUpperCase()}`,
221
- result.message || `Quality check '${qualityCheck.name}' below threshold`,
222
- 'warning',
223
- { check: qualityCheck.name, score: result.score, threshold: qualityCheck.threshold }
224
- ));
234
+ violations.push(
235
+ this.createViolation(
236
+ `QUALITY_${qualityCheck.name.toUpperCase()}`,
237
+ result.message || `Quality check '${qualityCheck.name}' below threshold`,
238
+ 'warning',
239
+ { check: qualityCheck.name, score: result.score, threshold: qualityCheck.threshold }
240
+ )
241
+ );
225
242
  }
226
243
  } catch (error) {
227
244
  // Quality check errors are warnings, not failures
228
- violations.push(this.createViolation(
229
- 'QUALITY_ERROR',
230
- `Quality check '${qualityCheck.name}' error: ${error.message}`,
231
- 'warning',
232
- { check: qualityCheck.name, error: error.message }
233
- ));
245
+ violations.push(
246
+ this.createViolation(
247
+ 'QUALITY_ERROR',
248
+ `Quality check '${qualityCheck.name}' error: ${error.message}`,
249
+ 'warning',
250
+ { check: qualityCheck.name, error: error.message }
251
+ )
252
+ );
234
253
  }
235
254
  }
236
255
 
@@ -250,8 +269,8 @@ class OutputGuardrail extends BaseGuardrail {
250
269
  return this.createResult(
251
270
  passed,
252
271
  violations,
253
- passed
254
- ? 'Output validation passed'
272
+ passed
273
+ ? 'Output validation passed'
255
274
  : `Output validation failed with ${errorViolations.length} error(s)`,
256
275
  0,
257
276
  {
@@ -260,7 +279,7 @@ class OutputGuardrail extends BaseGuardrail {
260
279
  redactionApplied: this.redact,
261
280
  redactionCount: redactions.length,
262
281
  redactions: redactions.length > 0 ? redactions : undefined,
263
- qualityScores: Object.keys(qualityScores).length > 0 ? qualityScores : undefined
282
+ qualityScores: Object.keys(qualityScores).length > 0 ? qualityScores : undefined,
264
283
  }
265
284
  );
266
285
  }
@@ -275,7 +294,7 @@ class OutputGuardrail extends BaseGuardrail {
275
294
  if (typeof output === 'string') {
276
295
  return output;
277
296
  }
278
-
297
+
279
298
  if (typeof output === 'object' && output !== null) {
280
299
  // Look for common output fields
281
300
  if (output.content) return output.content;
@@ -286,10 +305,10 @@ class OutputGuardrail extends BaseGuardrail {
286
305
  if (output.result) {
287
306
  return typeof output.result === 'string' ? output.result : JSON.stringify(output.result);
288
307
  }
289
-
308
+
290
309
  return JSON.stringify(output);
291
310
  }
292
-
311
+
293
312
  return String(output);
294
313
  }
295
314
 
@@ -305,7 +324,7 @@ class OutputGuardrail extends BaseGuardrail {
305
324
  for (const rule of this.rules) {
306
325
  try {
307
326
  const result = await Promise.resolve(rule.check(content));
308
-
327
+
309
328
  let passed = result;
310
329
  let additionalContext = {};
311
330
 
@@ -316,24 +335,28 @@ class OutputGuardrail extends BaseGuardrail {
316
335
  }
317
336
 
318
337
  if (!passed) {
319
- violations.push(this.createViolation(
320
- rule.id.toUpperCase(),
321
- rule.message,
322
- rule.severity || this.defaultSeverity,
323
- { rule: rule.id, ...additionalContext }
324
- ));
338
+ violations.push(
339
+ this.createViolation(
340
+ rule.id.toUpperCase(),
341
+ rule.message,
342
+ rule.severity || this.defaultSeverity,
343
+ { rule: rule.id, ...additionalContext }
344
+ )
345
+ );
325
346
 
326
347
  if (this.failFast) {
327
348
  break;
328
349
  }
329
350
  }
330
351
  } catch (error) {
331
- violations.push(this.createViolation(
332
- 'RULE_ERROR',
333
- `Rule '${rule.id}' execution error: ${error.message}`,
334
- 'error',
335
- { rule: rule.id, error: error.message }
336
- ));
352
+ violations.push(
353
+ this.createViolation(
354
+ 'RULE_ERROR',
355
+ `Rule '${rule.id}' execution error: ${error.message}`,
356
+ 'error',
357
+ { rule: rule.id, error: error.message }
358
+ )
359
+ );
337
360
  }
338
361
  }
339
362
 
@@ -375,7 +398,7 @@ class OutputGuardrail extends BaseGuardrail {
375
398
  { name: 'phone_us', pattern: SecurityPatterns.PHONE_US },
376
399
  { name: 'phone_jp', pattern: SecurityPatterns.PHONE_JP },
377
400
  { name: 'ssn', pattern: SecurityPatterns.SSN },
378
- { name: 'credit_card', pattern: SecurityPatterns.CREDIT_CARD }
401
+ { name: 'credit_card', pattern: SecurityPatterns.CREDIT_CARD },
379
402
  ];
380
403
 
381
404
  for (const { name, pattern } of piiPatterns) {
@@ -424,7 +447,7 @@ class OutputGuardrail extends BaseGuardrail {
424
447
  redactObject(obj) {
425
448
  const allRedactions = [];
426
449
 
427
- const redactValue = (value) => {
450
+ const redactValue = value => {
428
451
  if (typeof value === 'string') {
429
452
  const { content, redactions } = this.redactString(value);
430
453
  allRedactions.push(...redactions);
@@ -459,7 +482,7 @@ class OutputGuardrail extends BaseGuardrail {
459
482
  contentPoliciesCount: this.contentPolicies.length,
460
483
  qualityChecksCount: this.qualityChecks.length,
461
484
  redact: this.redact,
462
- rules: this.rules.map(r => ({ id: r.id, type: r.type, severity: r.severity }))
485
+ rules: this.rules.map(r => ({ id: r.id, type: r.type, severity: r.severity })),
463
486
  };
464
487
  }
465
488
  }
@@ -476,19 +499,19 @@ function createOutputGuardrail(preset = 'safe', overrides = {}) {
476
499
  name: 'SecurityOutputGuardrail',
477
500
  description: 'Security-focused output validation',
478
501
  ruleSet: 'security',
479
- tripwireEnabled: true
502
+ tripwireEnabled: true,
480
503
  },
481
504
  safe: {
482
505
  name: 'SafeOutputGuardrail',
483
506
  description: 'Safe output validation with PII check',
484
- ruleSet: 'agentOutput'
507
+ ruleSet: 'agentOutput',
485
508
  },
486
509
  strict: {
487
510
  name: 'StrictOutputGuardrail',
488
511
  description: 'Strict output validation',
489
512
  ruleSet: 'strictContent',
490
513
  tripwireEnabled: true,
491
- failFast: true
514
+ failFast: true,
492
515
  },
493
516
  redact: {
494
517
  name: 'RedactingOutputGuardrail',
@@ -498,17 +521,17 @@ function createOutputGuardrail(preset = 'safe', overrides = {}) {
498
521
  redactOptions: {
499
522
  redactPII: true,
500
523
  redactSecrets: true,
501
- replacement: '[REDACTED]'
502
- }
503
- }
524
+ replacement: '[REDACTED]',
525
+ },
526
+ },
504
527
  };
505
528
 
506
- const config = { ...presets[preset] || presets.safe, ...overrides };
529
+ const config = { ...(presets[preset] || presets.safe), ...overrides };
507
530
  return new OutputGuardrail(config);
508
531
  }
509
532
 
510
533
  module.exports = {
511
534
  OutputGuardrail,
512
535
  createOutputGuardrail,
513
- SecretPatterns
536
+ SecretPatterns,
514
537
  };