musubi-sdd 5.1.0 → 5.6.1

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,7 +1,7 @@
1
1
  /**
2
2
  * ErrorHandler - Comprehensive error handling patterns
3
3
  * Sprint 3.5: Advanced Workflows
4
- *
4
+ *
5
5
  * Provides:
6
6
  * - Error classification and categorization
7
7
  * - Recovery strategies
@@ -19,7 +19,7 @@ const ErrorSeverity = {
19
19
  LOW: 'low',
20
20
  MEDIUM: 'medium',
21
21
  HIGH: 'high',
22
- CRITICAL: 'critical'
22
+ CRITICAL: 'critical',
23
23
  };
24
24
 
25
25
  /**
@@ -38,7 +38,7 @@ const ErrorCategory = {
38
38
  EXTERNAL_SERVICE: 'external-service',
39
39
  CONFIGURATION: 'configuration',
40
40
  USER_INPUT: 'user-input',
41
- UNKNOWN: 'unknown'
41
+ UNKNOWN: 'unknown',
42
42
  };
43
43
 
44
44
  /**
@@ -47,7 +47,7 @@ const ErrorCategory = {
47
47
  const CircuitState = {
48
48
  CLOSED: 'closed',
49
49
  OPEN: 'open',
50
- HALF_OPEN: 'half-open'
50
+ HALF_OPEN: 'half-open',
51
51
  };
52
52
 
53
53
  /**
@@ -80,7 +80,7 @@ class WorkflowError extends Error {
80
80
  context: this.context,
81
81
  timestamp: this.timestamp,
82
82
  suggestions: this.suggestions,
83
- stack: this.stack
83
+ stack: this.stack,
84
84
  };
85
85
  }
86
86
  }
@@ -106,32 +106,22 @@ class ErrorClassifier {
106
106
  /ENOTFOUND/i,
107
107
  /network/i,
108
108
  /connection failed/i,
109
- /socket hang up/i
110
- ]
109
+ /socket hang up/i,
110
+ ],
111
111
  },
112
112
  // Timeout errors
113
113
  {
114
114
  category: ErrorCategory.TIMEOUT,
115
115
  severity: ErrorSeverity.MEDIUM,
116
116
  retryable: true,
117
- patterns: [
118
- /timeout/i,
119
- /ETIMEDOUT/i,
120
- /timed out/i,
121
- /deadline exceeded/i
122
- ]
117
+ patterns: [/timeout/i, /ETIMEDOUT/i, /timed out/i, /deadline exceeded/i],
123
118
  },
124
119
  // Rate limit errors
125
120
  {
126
121
  category: ErrorCategory.RATE_LIMIT,
127
122
  severity: ErrorSeverity.LOW,
128
123
  retryable: true,
129
- patterns: [
130
- /rate limit/i,
131
- /too many requests/i,
132
- /429/,
133
- /throttl/i
134
- ]
124
+ patterns: [/rate limit/i, /too many requests/i, /429/, /throttl/i],
135
125
  },
136
126
  // Authentication errors
137
127
  {
@@ -143,71 +133,44 @@ class ErrorClassifier {
143
133
  /authentication failed/i,
144
134
  /invalid token/i,
145
135
  /401/,
146
- /not authenticated/i
147
- ]
136
+ /not authenticated/i,
137
+ ],
148
138
  },
149
139
  // Authorization errors
150
140
  {
151
141
  category: ErrorCategory.AUTHORIZATION,
152
142
  severity: ErrorSeverity.HIGH,
153
143
  retryable: false,
154
- patterns: [
155
- /forbidden/i,
156
- /access denied/i,
157
- /permission denied/i,
158
- /403/,
159
- /not authorized/i
160
- ]
144
+ patterns: [/forbidden/i, /access denied/i, /permission denied/i, /403/, /not authorized/i],
161
145
  },
162
146
  // Resource not found
163
147
  {
164
148
  category: ErrorCategory.RESOURCE_NOT_FOUND,
165
149
  severity: ErrorSeverity.MEDIUM,
166
150
  retryable: false,
167
- patterns: [
168
- /not found/i,
169
- /404/,
170
- /does not exist/i,
171
- /no such/i
172
- ]
151
+ patterns: [/not found/i, /404/, /does not exist/i, /no such/i],
173
152
  },
174
153
  // Validation errors
175
154
  {
176
155
  category: ErrorCategory.VALIDATION,
177
156
  severity: ErrorSeverity.LOW,
178
157
  retryable: false,
179
- patterns: [
180
- /validation/i,
181
- /invalid/i,
182
- /required field/i,
183
- /must be/i,
184
- /expected/i
185
- ]
158
+ patterns: [/validation/i, /invalid/i, /required field/i, /must be/i, /expected/i],
186
159
  },
187
160
  // Conflict errors
188
161
  {
189
162
  category: ErrorCategory.CONFLICT,
190
163
  severity: ErrorSeverity.MEDIUM,
191
164
  retryable: false,
192
- patterns: [
193
- /conflict/i,
194
- /already exists/i,
195
- /duplicate/i,
196
- /409/
197
- ]
165
+ patterns: [/conflict/i, /already exists/i, /duplicate/i, /409/],
198
166
  },
199
167
  // Configuration errors
200
168
  {
201
169
  category: ErrorCategory.CONFIGURATION,
202
170
  severity: ErrorSeverity.HIGH,
203
171
  retryable: false,
204
- patterns: [
205
- /configuration/i,
206
- /config/i,
207
- /missing setting/i,
208
- /not configured/i
209
- ]
210
- }
172
+ patterns: [/configuration/i, /config/i, /missing setting/i, /not configured/i],
173
+ },
211
174
  ];
212
175
  }
213
176
 
@@ -216,7 +179,7 @@ class ErrorClassifier {
216
179
  */
217
180
  classify(error) {
218
181
  const errorString = `${error.message} ${error.code || ''} ${error.name || ''}`;
219
-
182
+
220
183
  for (const pattern of this.patterns) {
221
184
  for (const regex of pattern.patterns) {
222
185
  if (regex.test(errorString)) {
@@ -224,7 +187,7 @@ class ErrorClassifier {
224
187
  category: pattern.category,
225
188
  severity: pattern.severity,
226
189
  retryable: pattern.retryable,
227
- recoverable: pattern.severity !== ErrorSeverity.CRITICAL
190
+ recoverable: pattern.severity !== ErrorSeverity.CRITICAL,
228
191
  };
229
192
  }
230
193
  }
@@ -234,7 +197,7 @@ class ErrorClassifier {
234
197
  category: ErrorCategory.UNKNOWN,
235
198
  severity: ErrorSeverity.MEDIUM,
236
199
  retryable: false,
237
- recoverable: true
200
+ recoverable: true,
238
201
  };
239
202
  }
240
203
 
@@ -247,7 +210,7 @@ class ErrorClassifier {
247
210
  }
248
211
 
249
212
  const classification = this.classify(error);
250
-
213
+
251
214
  return new WorkflowError(error.message, {
252
215
  code: error.code || 'UNKNOWN_ERROR',
253
216
  category: classification.category,
@@ -255,7 +218,7 @@ class ErrorClassifier {
255
218
  retryable: classification.retryable,
256
219
  recoverable: classification.recoverable,
257
220
  cause: error,
258
- context: { originalName: error.name }
221
+ context: { originalName: error.name },
259
222
  });
260
223
  }
261
224
 
@@ -300,7 +263,7 @@ class CircuitBreaker extends EventEmitter {
300
263
  category: ErrorCategory.EXTERNAL_SERVICE,
301
264
  severity: ErrorSeverity.HIGH,
302
265
  retryable: true,
303
- context: { circuitName: this.name }
266
+ context: { circuitName: this.name },
304
267
  });
305
268
  }
306
269
  }
@@ -311,7 +274,7 @@ class CircuitBreaker extends EventEmitter {
311
274
  code: 'CIRCUIT_HALF_OPEN_LIMIT',
312
275
  category: ErrorCategory.EXTERNAL_SERVICE,
313
276
  severity: ErrorSeverity.MEDIUM,
314
- retryable: true
277
+ retryable: true,
315
278
  });
316
279
  }
317
280
  this.halfOpenCalls++;
@@ -329,7 +292,7 @@ class CircuitBreaker extends EventEmitter {
329
292
 
330
293
  _onSuccess() {
331
294
  this.failures = 0;
332
-
295
+
333
296
  if (this.state === CircuitState.HALF_OPEN) {
334
297
  this.successes++;
335
298
  if (this.successes >= this.successThreshold) {
@@ -342,7 +305,7 @@ class CircuitBreaker extends EventEmitter {
342
305
  this.failures++;
343
306
  this.lastFailureTime = Date.now();
344
307
  this.successes = 0;
345
-
308
+
346
309
  if (this.state === CircuitState.HALF_OPEN) {
347
310
  this._transitionTo(CircuitState.OPEN);
348
311
  } else if (this.failures >= this.failureThreshold) {
@@ -355,7 +318,7 @@ class CircuitBreaker extends EventEmitter {
355
318
  _transitionTo(newState) {
356
319
  const oldState = this.state;
357
320
  this.state = newState;
358
-
321
+
359
322
  if (newState === CircuitState.CLOSED) {
360
323
  this.failures = 0;
361
324
  this.successes = 0;
@@ -372,7 +335,7 @@ class CircuitBreaker extends EventEmitter {
372
335
  state: this.state,
373
336
  failures: this.failures,
374
337
  successes: this.successes,
375
- lastFailureTime: this.lastFailureTime
338
+ lastFailureTime: this.lastFailureTime,
376
339
  };
377
340
  }
378
341
 
@@ -396,17 +359,16 @@ class ErrorAggregator {
396
359
  * Add an error to the aggregator
397
360
  */
398
361
  add(error, context = {}) {
399
- const enhanced = error instanceof WorkflowError ? error :
400
- new ErrorClassifier().enhance(error);
362
+ const enhanced = error instanceof WorkflowError ? error : new ErrorClassifier().enhance(error);
401
363
 
402
364
  const entry = {
403
365
  error: enhanced.toJSON(),
404
366
  context,
405
- timestamp: new Date().toISOString()
367
+ timestamp: new Date().toISOString(),
406
368
  };
407
369
 
408
370
  this.errors.push(entry);
409
-
371
+
410
372
  // Trim if necessary
411
373
  if (this.errors.length > this.maxErrors) {
412
374
  this.errors = this.errors.slice(-this.maxErrors);
@@ -433,7 +395,7 @@ class ErrorAggregator {
433
395
  bySeverity: Object.fromEntries(this.severityCounts),
434
396
  recentErrors: this.errors.slice(-10),
435
397
  mostCommonCategory: this._getMostCommon(this.categoryCounts),
436
- criticalCount: this.severityCounts.get(ErrorSeverity.CRITICAL) || 0
398
+ criticalCount: this.severityCounts.get(ErrorSeverity.CRITICAL) || 0,
437
399
  };
438
400
  }
439
401
 
@@ -484,24 +446,24 @@ class ErrorAggregator {
484
446
  */
485
447
  generateReport() {
486
448
  const stats = this.getStats();
487
-
449
+
488
450
  return {
489
451
  summary: {
490
452
  total: stats.totalErrors,
491
453
  critical: stats.criticalCount,
492
- mostCommonCategory: stats.mostCommonCategory
454
+ mostCommonCategory: stats.mostCommonCategory,
493
455
  },
494
456
  breakdown: {
495
457
  byCategory: stats.byCategory,
496
- bySeverity: stats.bySeverity
458
+ bySeverity: stats.bySeverity,
497
459
  },
498
460
  recentErrors: stats.recentErrors.map(e => ({
499
461
  message: e.error.message,
500
462
  category: e.error.category,
501
463
  severity: e.error.severity,
502
- timestamp: e.timestamp
464
+ timestamp: e.timestamp,
503
465
  })),
504
- recommendations: this._generateRecommendations(stats)
466
+ recommendations: this._generateRecommendations(stats),
505
467
  };
506
468
  }
507
469
 
@@ -511,7 +473,7 @@ class ErrorAggregator {
511
473
  if (stats.criticalCount > 0) {
512
474
  recommendations.push({
513
475
  priority: 'high',
514
- message: `${stats.criticalCount} critical errors require immediate attention`
476
+ message: `${stats.criticalCount} critical errors require immediate attention`,
515
477
  });
516
478
  }
517
479
 
@@ -519,7 +481,7 @@ class ErrorAggregator {
519
481
  if (networkErrors > 5) {
520
482
  recommendations.push({
521
483
  priority: 'medium',
522
- message: 'Multiple network errors detected. Check connectivity and service availability.'
484
+ message: 'Multiple network errors detected. Check connectivity and service availability.',
523
485
  });
524
486
  }
525
487
 
@@ -527,7 +489,7 @@ class ErrorAggregator {
527
489
  if (authErrors > 0) {
528
490
  recommendations.push({
529
491
  priority: 'high',
530
- message: 'Authentication errors detected. Verify credentials and tokens.'
492
+ message: 'Authentication errors detected. Verify credentials and tokens.',
531
493
  });
532
494
  }
533
495
 
@@ -535,7 +497,8 @@ class ErrorAggregator {
535
497
  if (rateLimitErrors > 3) {
536
498
  recommendations.push({
537
499
  priority: 'medium',
538
- message: 'Rate limiting detected. Consider implementing backoff or reducing request frequency.'
500
+ message:
501
+ 'Rate limiting detected. Consider implementing backoff or reducing request frequency.',
539
502
  });
540
503
  }
541
504
 
@@ -560,34 +523,33 @@ class GracefulDegradation {
560
523
  fn: fallbackFn,
561
524
  ttl: options.ttl || 60000, // 1 minute default cache
562
525
  lastResult: null,
563
- lastResultTime: null
526
+ lastResultTime: null,
564
527
  });
565
528
  }
566
529
 
567
530
  /**
568
531
  * Execute with graceful degradation
569
532
  */
570
- async execute(serviceName, primaryFn, options = {}) {
533
+ async execute(serviceName, primaryFn, _options = {}) {
571
534
  try {
572
535
  const result = await primaryFn();
573
-
536
+
574
537
  // Service recovered
575
538
  if (this.degradedServices.has(serviceName)) {
576
539
  this.degradedServices.delete(serviceName);
577
540
  }
578
-
541
+
579
542
  // Cache successful result for fallback
580
543
  const fallback = this.fallbacks.get(serviceName);
581
544
  if (fallback) {
582
545
  fallback.lastResult = result;
583
546
  fallback.lastResultTime = Date.now();
584
547
  }
585
-
548
+
586
549
  return { result, degraded: false };
587
-
588
550
  } catch (error) {
589
551
  const fallback = this.fallbacks.get(serviceName);
590
-
552
+
591
553
  if (!fallback) {
592
554
  throw error;
593
555
  }
@@ -595,13 +557,12 @@ class GracefulDegradation {
595
557
  this.degradedServices.add(serviceName);
596
558
 
597
559
  // Try cached result first
598
- if (fallback.lastResult &&
599
- (Date.now() - fallback.lastResultTime) < fallback.ttl) {
560
+ if (fallback.lastResult && Date.now() - fallback.lastResultTime < fallback.ttl) {
600
561
  return {
601
562
  result: fallback.lastResult,
602
563
  degraded: true,
603
564
  source: 'cache',
604
- error: error.message
565
+ error: error.message,
605
566
  };
606
567
  }
607
568
 
@@ -612,7 +573,7 @@ class GracefulDegradation {
612
573
  result: fallbackResult,
613
574
  degraded: true,
614
575
  source: 'fallback',
615
- error: error.message
576
+ error: error.message,
616
577
  };
617
578
  } catch (fallbackError) {
618
579
  // Both primary and fallback failed
@@ -624,8 +585,8 @@ class GracefulDegradation {
624
585
  context: {
625
586
  serviceName,
626
587
  primaryError: error.message,
627
- fallbackError: fallbackError.message
628
- }
588
+ fallbackError: fallbackError.message,
589
+ },
629
590
  });
630
591
  }
631
592
  }
@@ -660,7 +621,7 @@ class ErrorHandler extends EventEmitter {
660
621
  maxRetries: 3,
661
622
  backoffMs: 1000,
662
623
  backoffMultiplier: 2,
663
- maxBackoffMs: 30000
624
+ maxBackoffMs: 30000,
664
625
  };
665
626
  }
666
627
 
@@ -670,7 +631,7 @@ class ErrorHandler extends EventEmitter {
670
631
  getCircuitBreaker(serviceName, options = {}) {
671
632
  if (!this.circuitBreakers.has(serviceName)) {
672
633
  const breaker = new CircuitBreaker({ name: serviceName, ...options });
673
- breaker.on('state-change', (event) => {
634
+ breaker.on('state-change', event => {
674
635
  this.emit('circuit-state-change', { service: serviceName, ...event });
675
636
  });
676
637
  this.circuitBreakers.set(serviceName, breaker);
@@ -684,10 +645,10 @@ class ErrorHandler extends EventEmitter {
684
645
  handle(error, context = {}) {
685
646
  // Classify and enhance error
686
647
  const enhanced = this.classifier.enhance(error);
687
-
648
+
688
649
  // Add to aggregator
689
650
  this.aggregator.add(enhanced, context);
690
-
651
+
691
652
  // Emit error event
692
653
  this.emit('error', { error: enhanced, context });
693
654
 
@@ -698,7 +659,7 @@ class ErrorHandler extends EventEmitter {
698
659
  return {
699
660
  error: enhanced,
700
661
  handled: true,
701
- suggestions: this._getSuggestions(enhanced)
662
+ suggestions: this._getSuggestions(enhanced),
702
663
  };
703
664
  }
704
665
 
@@ -707,7 +668,7 @@ class ErrorHandler extends EventEmitter {
707
668
  message: error.message,
708
669
  category: error.category,
709
670
  severity: error.severity,
710
- context: { ...error.context, ...context }
671
+ context: { ...error.context, ...context },
711
672
  };
712
673
 
713
674
  switch (error.severity) {
@@ -778,18 +739,15 @@ class ErrorHandler extends EventEmitter {
778
739
  throw enhanced;
779
740
  }
780
741
 
781
- this.emit('retry', {
782
- attempt: attempt + 1,
742
+ this.emit('retry', {
743
+ attempt: attempt + 1,
783
744
  maxRetries: policy.maxRetries,
784
745
  backoffMs: currentBackoff,
785
- error: enhanced.message
746
+ error: enhanced.message,
786
747
  });
787
748
 
788
749
  await this._sleep(currentBackoff);
789
- currentBackoff = Math.min(
790
- currentBackoff * policy.backoffMultiplier,
791
- policy.maxBackoffMs
792
- );
750
+ currentBackoff = Math.min(currentBackoff * policy.backoffMultiplier, policy.maxBackoffMs);
793
751
  }
794
752
  }
795
753
 
@@ -805,7 +763,7 @@ class ErrorHandler extends EventEmitter {
805
763
  circuitBreakers: Object.fromEntries(
806
764
  [...this.circuitBreakers].map(([name, breaker]) => [name, breaker.getState()])
807
765
  ),
808
- degradedServices: this.degradation.getDegradedServices()
766
+ degradedServices: this.degradation.getDegradedServices(),
809
767
  };
810
768
  }
811
769
 
@@ -823,5 +781,5 @@ module.exports = {
823
781
  WorkflowError,
824
782
  ErrorSeverity,
825
783
  ErrorCategory,
826
- CircuitState
784
+ CircuitState,
827
785
  };
@@ -1,9 +1,9 @@
1
1
  /**
2
2
  * @fileoverview Base Guardrail class for MUSUBI Orchestration
3
- *
3
+ *
4
4
  * Guardrails provide safety checks for agent inputs and outputs.
5
5
  * Inspired by OpenAI Agents SDK guardrails pattern.
6
- *
6
+ *
7
7
  * @module orchestration/guardrails/base-guardrail
8
8
  * @version 3.9.0
9
9
  */
@@ -77,7 +77,7 @@ class BaseGuardrail {
77
77
  this.failFast = config.failFast || false;
78
78
  this.defaultSeverity = config.severity || 'error';
79
79
  this.options = config.options || {};
80
-
80
+
81
81
  // Tripwire: if true, throws exception on failure instead of returning result
82
82
  this.tripwireEnabled = config.tripwireEnabled || false;
83
83
  }
@@ -89,7 +89,7 @@ class BaseGuardrail {
89
89
  * @param {Object} [context] - Execution context
90
90
  * @returns {Promise<GuardrailResult>}
91
91
  */
92
- async check(input, context = {}) {
92
+ async check(input, _context = {}) {
93
93
  throw new Error('Subclasses must implement check() method');
94
94
  }
95
95
 
@@ -105,12 +105,12 @@ class BaseGuardrail {
105
105
  }
106
106
 
107
107
  const startTime = Date.now();
108
-
108
+
109
109
  try {
110
110
  const result = await this.check(input, context);
111
111
  result.executionTimeMs = Date.now() - startTime;
112
112
  result.guardrailName = this.name;
113
-
113
+
114
114
  // Handle tripwire
115
115
  if (this.tripwireEnabled && !result.passed) {
116
116
  throw new GuardrailTripwireException(
@@ -118,22 +118,24 @@ class BaseGuardrail {
118
118
  result
119
119
  );
120
120
  }
121
-
121
+
122
122
  return result;
123
123
  } catch (error) {
124
124
  if (error instanceof GuardrailTripwireException) {
125
125
  throw error; // Re-throw tripwire exceptions
126
126
  }
127
-
127
+
128
128
  // Wrap unexpected errors
129
129
  return this.createResult(
130
130
  false,
131
- [{
132
- code: 'GUARDRAIL_ERROR',
133
- message: error.message,
134
- severity: 'error',
135
- context: { errorName: error.name, stack: error.stack }
136
- }],
131
+ [
132
+ {
133
+ code: 'GUARDRAIL_ERROR',
134
+ message: error.message,
135
+ severity: 'error',
136
+ context: { errorName: error.name, stack: error.stack },
137
+ },
138
+ ],
137
139
  `Guardrail execution failed: ${error.message}`,
138
140
  Date.now() - startTime
139
141
  );
@@ -157,7 +159,7 @@ class BaseGuardrail {
157
159
  message,
158
160
  violations,
159
161
  metadata,
160
- executionTimeMs
162
+ executionTimeMs,
161
163
  };
162
164
  }
163
165
 
@@ -175,7 +177,7 @@ class BaseGuardrail {
175
177
  code,
176
178
  message,
177
179
  severity: severity || this.defaultSeverity,
178
- context
180
+ context,
179
181
  };
180
182
  }
181
183
 
@@ -218,7 +220,7 @@ class BaseGuardrail {
218
220
  enabled: this.enabled,
219
221
  failFast: this.failFast,
220
222
  tripwireEnabled: this.tripwireEnabled,
221
- defaultSeverity: this.defaultSeverity
223
+ defaultSeverity: this.defaultSeverity,
222
224
  };
223
225
  }
224
226
  }
@@ -278,16 +280,16 @@ class GuardrailChain {
278
280
  if (this.parallel) {
279
281
  // Parallel execution with optional early termination
280
282
  const promises = this.guardrails.map(g => g.run(input, context));
281
-
283
+
282
284
  if (this.stopOnFirstFailure) {
283
285
  // Use Promise.race pattern for early termination
284
286
  const settledResults = await Promise.allSettled(promises);
285
-
287
+
286
288
  for (const settled of settledResults) {
287
289
  if (settled.status === 'fulfilled') {
288
290
  const result = settled.value;
289
291
  results.push(result);
290
-
292
+
291
293
  if (!result.passed) {
292
294
  overallPassed = false;
293
295
  allViolations.push(...result.violations);
@@ -312,11 +314,11 @@ class GuardrailChain {
312
314
  for (const guardrail of this.guardrails) {
313
315
  const result = await guardrail.run(input, context);
314
316
  results.push(result);
315
-
317
+
316
318
  if (!result.passed) {
317
319
  overallPassed = false;
318
320
  allViolations.push(...result.violations);
319
-
321
+
320
322
  if (this.stopOnFirstFailure) {
321
323
  break;
322
324
  }
@@ -331,7 +333,7 @@ class GuardrailChain {
331
333
  violations: allViolations,
332
334
  guardrailCount: this.guardrails.length,
333
335
  executedCount: results.length,
334
- executionTimeMs: Date.now() - startTime
336
+ executionTimeMs: Date.now() - startTime,
335
337
  };
336
338
  }
337
339
 
@@ -354,5 +356,5 @@ class GuardrailChain {
354
356
  module.exports = {
355
357
  BaseGuardrail,
356
358
  GuardrailChain,
357
- GuardrailTripwireException
359
+ GuardrailTripwireException,
358
360
  };