musubi-sdd 5.0.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 +164 -145
  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 +247 -125
  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 +83 -80
  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 +53 -44
  87. package/src/monitoring/incident-manager.js +123 -103
  88. package/src/monitoring/index.js +144 -134
  89. package/src/monitoring/observability.js +82 -59
  90. package/src/monitoring/quality-dashboard.js +51 -39
  91. package/src/monitoring/release-manager.js +70 -50
  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,10 +1,10 @@
1
1
  /**
2
2
  * MUSUBI Function Tool
3
- *
3
+ *
4
4
  * Provides decorator-style function registration and automatic
5
5
  * schema generation from JSDoc comments. Inspired by OpenAI
6
6
  * Agents SDK function tool patterns.
7
- *
7
+ *
8
8
  * @module agents/function-tool
9
9
  */
10
10
 
@@ -29,18 +29,18 @@
29
29
  * Map JavaScript types to JSON Schema types
30
30
  */
31
31
  const TYPE_MAP = {
32
- 'string': 'string',
33
- 'number': 'number',
34
- 'integer': 'integer',
35
- 'boolean': 'boolean',
36
- 'object': 'object',
37
- 'array': 'array',
38
- 'any': 'object',
39
- 'null': 'null',
40
- 'undefined': 'null',
41
- 'function': 'object',
42
- 'symbol': 'string',
43
- 'bigint': 'integer'
32
+ string: 'string',
33
+ number: 'number',
34
+ integer: 'integer',
35
+ boolean: 'boolean',
36
+ object: 'object',
37
+ array: 'array',
38
+ any: 'object',
39
+ null: 'null',
40
+ undefined: 'null',
41
+ function: 'object',
42
+ symbol: 'string',
43
+ bigint: 'integer',
44
44
  };
45
45
 
46
46
  /**
@@ -52,18 +52,18 @@ function parseJSDoc(jsdoc) {
52
52
  if (!jsdoc) {
53
53
  return { description: '', params: [], returns: null };
54
54
  }
55
-
55
+
56
56
  const lines = jsdoc.split('\n').map(l => l.replace(/^\s*\*\s?/, '').trim());
57
57
  const result = {
58
58
  description: '',
59
59
  params: [],
60
60
  returns: null,
61
- example: null
61
+ example: null,
62
62
  };
63
-
63
+
64
64
  let currentSection = 'description';
65
65
  let descriptionLines = [];
66
-
66
+
67
67
  for (const line of lines) {
68
68
  if (line.startsWith('@param')) {
69
69
  currentSection = 'param';
@@ -74,7 +74,7 @@ function parseJSDoc(jsdoc) {
74
74
  name,
75
75
  type: type.toLowerCase(),
76
76
  required: !optional,
77
- description: description || ''
77
+ description: description || '',
78
78
  });
79
79
  }
80
80
  } else if (line.startsWith('@returns') || line.startsWith('@return')) {
@@ -83,7 +83,7 @@ function parseJSDoc(jsdoc) {
83
83
  if (match) {
84
84
  result.returns = {
85
85
  type: match[1].toLowerCase(),
86
- description: match[2] || ''
86
+ description: match[2] || '',
87
87
  };
88
88
  }
89
89
  } else if (line.startsWith('@example')) {
@@ -97,7 +97,7 @@ function parseJSDoc(jsdoc) {
97
97
  result.example += (result.example ? '\n' : '') + line;
98
98
  }
99
99
  }
100
-
100
+
101
101
  result.description = descriptionLines.join(' ').trim();
102
102
  return result;
103
103
  }
@@ -110,44 +110,44 @@ function parseJSDoc(jsdoc) {
110
110
  function paramsToSchema(params) {
111
111
  const properties = {};
112
112
  const required = [];
113
-
113
+
114
114
  for (const param of params) {
115
115
  const schemaType = TYPE_MAP[param.type] || 'string';
116
-
116
+
117
117
  properties[param.name] = {
118
118
  type: schemaType,
119
- description: param.description || `Parameter: ${param.name}`
119
+ description: param.description || `Parameter: ${param.name}`,
120
120
  };
121
-
121
+
122
122
  // Handle union types (e.g., "string|number")
123
123
  if (param.type.includes('|')) {
124
124
  const types = param.type.split('|').map(t => TYPE_MAP[t.trim()] || 'string');
125
125
  properties[param.name] = {
126
126
  anyOf: types.map(t => ({ type: t })),
127
- description: param.description
127
+ description: param.description,
128
128
  };
129
129
  }
130
-
130
+
131
131
  // Handle array types (e.g., "string[]")
132
132
  if (param.type.endsWith('[]')) {
133
133
  const itemType = TYPE_MAP[param.type.slice(0, -2)] || 'string';
134
134
  properties[param.name] = {
135
135
  type: 'array',
136
136
  items: { type: itemType },
137
- description: param.description
137
+ description: param.description,
138
138
  };
139
139
  }
140
-
140
+
141
141
  if (param.required) {
142
142
  required.push(param.name);
143
143
  }
144
144
  }
145
-
145
+
146
146
  return {
147
147
  type: 'object',
148
148
  properties,
149
149
  required: required.length > 0 ? required : undefined,
150
- additionalProperties: false
150
+ additionalProperties: false,
151
151
  };
152
152
  }
153
153
 
@@ -160,10 +160,10 @@ function paramsToSchema(params) {
160
160
  function functionTool(fn, options = {}) {
161
161
  const fnStr = fn.toString();
162
162
  const name = options.name || fn.name || 'anonymous_tool';
163
-
163
+
164
164
  // Try to extract JSDoc comment
165
165
  let jsdocInfo = { description: '', params: [], returns: null };
166
-
166
+
167
167
  // Check if function has __jsdoc property (from decorator)
168
168
  if (fn.__jsdoc) {
169
169
  jsdocInfo = parseJSDoc(fn.__jsdoc);
@@ -174,43 +174,49 @@ function functionTool(fn, options = {}) {
174
174
  jsdocInfo = parseJSDoc(jsdocMatch[0]);
175
175
  }
176
176
  }
177
-
177
+
178
178
  // Build parameter schema
179
179
  let parameters = options.parameters;
180
-
180
+
181
181
  if (!parameters && jsdocInfo.params.length > 0) {
182
182
  parameters = paramsToSchema(jsdocInfo.params);
183
183
  }
184
-
184
+
185
185
  if (!parameters) {
186
186
  // Try to infer from function parameters
187
187
  const paramMatch = fnStr.match(/\(([^)]*)\)/);
188
188
  if (paramMatch) {
189
189
  const paramNames = paramMatch[1]
190
190
  .split(',')
191
- .map(p => p.trim().replace(/=.*$/, '').replace(/\{.*\}/, '').trim())
191
+ .map(p =>
192
+ p
193
+ .trim()
194
+ .replace(/=.*$/, '')
195
+ .replace(/\{.*\}/, '')
196
+ .trim()
197
+ )
192
198
  .filter(p => p && p !== '');
193
-
199
+
194
200
  if (paramNames.length > 0) {
195
201
  parameters = {
196
202
  type: 'object',
197
203
  properties: Object.fromEntries(
198
204
  paramNames.map(name => [name, { type: 'string', description: `Parameter: ${name}` }])
199
205
  ),
200
- required: paramNames
206
+ required: paramNames,
201
207
  };
202
208
  }
203
209
  }
204
210
  }
205
-
211
+
206
212
  // Default empty schema
207
213
  parameters = parameters || { type: 'object', properties: {} };
208
-
214
+
209
215
  return {
210
216
  name,
211
217
  description: options.description || jsdocInfo.description || `Function: ${name}`,
212
218
  parameters,
213
- handler: async (args) => {
219
+ handler: async args => {
214
220
  // Call the original function with arguments
215
221
  if (typeof args === 'object' && !Array.isArray(args)) {
216
222
  // Pass as keyword arguments if possible
@@ -223,19 +229,19 @@ function functionTool(fn, options = {}) {
223
229
  return await fn(args);
224
230
  },
225
231
  __original: fn,
226
- __jsdocInfo: jsdocInfo
232
+ __jsdocInfo: jsdocInfo,
227
233
  };
228
234
  }
229
235
 
230
236
  /**
231
237
  * Decorator-style wrapper for creating function tools
232
238
  * Use with: const tool = asTool(myFunction, { description: '...' })
233
- *
239
+ *
234
240
  * @param {FunctionToolOptions} [options]
235
241
  * @returns {Function} Decorator function
236
242
  */
237
243
  function asTool(options = {}) {
238
- return function(fn) {
244
+ return function (fn) {
239
245
  return functionTool(fn, options);
240
246
  };
241
247
  }
@@ -259,7 +265,7 @@ function functionTools(functions, options = {}) {
259
265
  * @returns {Function} Decorator
260
266
  */
261
267
  function withJSDoc(jsdoc) {
262
- return function(fn) {
268
+ return function (fn) {
263
269
  fn.__jsdoc = jsdoc;
264
270
  return fn;
265
271
  };
@@ -276,7 +282,7 @@ const SchemaBuilder = {
276
282
  string(options = {}) {
277
283
  return { type: 'string', ...options };
278
284
  },
279
-
285
+
280
286
  /**
281
287
  * Create a number schema
282
288
  * @param {Object} [options]
@@ -284,7 +290,7 @@ const SchemaBuilder = {
284
290
  number(options = {}) {
285
291
  return { type: 'number', ...options };
286
292
  },
287
-
293
+
288
294
  /**
289
295
  * Create an integer schema
290
296
  * @param {Object} [options]
@@ -292,7 +298,7 @@ const SchemaBuilder = {
292
298
  integer(options = {}) {
293
299
  return { type: 'integer', ...options };
294
300
  },
295
-
301
+
296
302
  /**
297
303
  * Create a boolean schema
298
304
  * @param {Object} [options]
@@ -300,7 +306,7 @@ const SchemaBuilder = {
300
306
  boolean(options = {}) {
301
307
  return { type: 'boolean', ...options };
302
308
  },
303
-
309
+
304
310
  /**
305
311
  * Create an array schema
306
312
  * @param {Object} itemSchema - Schema for array items
@@ -309,7 +315,7 @@ const SchemaBuilder = {
309
315
  array(itemSchema, options = {}) {
310
316
  return { type: 'array', items: itemSchema, ...options };
311
317
  },
312
-
318
+
313
319
  /**
314
320
  * Create an object schema
315
321
  * @param {Object} properties - Property schemas
@@ -322,10 +328,10 @@ const SchemaBuilder = {
322
328
  properties,
323
329
  required: required.length > 0 ? required : undefined,
324
330
  additionalProperties: options.additionalProperties ?? false,
325
- ...options
331
+ ...options,
326
332
  };
327
333
  },
328
-
334
+
329
335
  /**
330
336
  * Create an enum schema
331
337
  * @param {Array} values - Allowed values
@@ -334,7 +340,7 @@ const SchemaBuilder = {
334
340
  enum(values, options = {}) {
335
341
  return { type: 'string', enum: values, ...options };
336
342
  },
337
-
343
+
338
344
  /**
339
345
  * Create a oneOf schema
340
346
  * @param {Array} schemas - Possible schemas
@@ -342,14 +348,14 @@ const SchemaBuilder = {
342
348
  oneOf(schemas) {
343
349
  return { oneOf: schemas };
344
350
  },
345
-
351
+
346
352
  /**
347
353
  * Create an anyOf schema
348
354
  * @param {Array} schemas - Possible schemas
349
355
  */
350
356
  anyOf(schemas) {
351
357
  return { anyOf: schemas };
352
- }
358
+ },
353
359
  };
354
360
 
355
361
  /**
@@ -360,7 +366,7 @@ const SchemaBuilder = {
360
366
  */
361
367
  function validateArgs(args, schema) {
362
368
  const errors = [];
363
-
369
+
364
370
  if (schema.type === 'object' && schema.properties) {
365
371
  // Check required properties
366
372
  if (schema.required) {
@@ -370,7 +376,7 @@ function validateArgs(args, schema) {
370
376
  }
371
377
  }
372
378
  }
373
-
379
+
374
380
  // Type check each property
375
381
  for (const [name, value] of Object.entries(args)) {
376
382
  const propSchema = schema.properties[name];
@@ -378,7 +384,7 @@ function validateArgs(args, schema) {
378
384
  errors.push(`Unknown parameter: ${name}`);
379
385
  continue;
380
386
  }
381
-
387
+
382
388
  if (propSchema) {
383
389
  const typeError = validateType(value, propSchema, name);
384
390
  if (typeError) {
@@ -387,10 +393,10 @@ function validateArgs(args, schema) {
387
393
  }
388
394
  }
389
395
  }
390
-
396
+
391
397
  return {
392
398
  valid: errors.length === 0,
393
- errors
399
+ errors,
394
400
  };
395
401
  }
396
402
 
@@ -404,7 +410,7 @@ function validateArgs(args, schema) {
404
410
  function validateType(value, schema, name) {
405
411
  const expectedType = schema.type;
406
412
  const actualType = Array.isArray(value) ? 'array' : typeof value;
407
-
413
+
408
414
  if (expectedType && actualType !== expectedType) {
409
415
  // Allow number for integer
410
416
  if (expectedType === 'integer' && typeof value === 'number' && Number.isInteger(value)) {
@@ -412,11 +418,11 @@ function validateType(value, schema, name) {
412
418
  }
413
419
  return `Parameter '${name}' expected ${expectedType}, got ${actualType}`;
414
420
  }
415
-
421
+
416
422
  if (schema.enum && !schema.enum.includes(value)) {
417
423
  return `Parameter '${name}' must be one of: ${schema.enum.join(', ')}`;
418
424
  }
419
-
425
+
420
426
  return null;
421
427
  }
422
428
 
@@ -428,5 +434,5 @@ module.exports = {
428
434
  parseJSDoc,
429
435
  paramsToSchema,
430
436
  SchemaBuilder,
431
- validateArgs
437
+ validateArgs,
432
438
  };
@@ -1,9 +1,9 @@
1
1
  /**
2
2
  * MUSUBI Agents Module
3
- *
3
+ *
4
4
  * Exports agent-related functionality including Agent Loop,
5
5
  * Function Tools, Schema Generation, and Agent Registry.
6
- *
6
+ *
7
7
  * @module agents
8
8
  */
9
9
 
@@ -16,7 +16,7 @@ const {
16
16
  parseJSDoc,
17
17
  paramsToSchema,
18
18
  SchemaBuilder,
19
- validateArgs
19
+ validateArgs,
20
20
  } = require('./function-tool');
21
21
  const { SchemaGenerator, createSchemaGenerator } = require('./schema-generator');
22
22
  const agentDefinitions = require('./registry');
@@ -25,7 +25,7 @@ module.exports = {
25
25
  // Agent Loop
26
26
  AgentLoop,
27
27
  createMockLLMProvider,
28
-
28
+
29
29
  // Function Tools
30
30
  functionTool,
31
31
  functionTools,
@@ -35,11 +35,11 @@ module.exports = {
35
35
  paramsToSchema,
36
36
  SchemaBuilder,
37
37
  validateArgs,
38
-
38
+
39
39
  // Schema Generator
40
40
  SchemaGenerator,
41
41
  createSchemaGenerator,
42
-
42
+
43
43
  // Agent Registry
44
- agentDefinitions
44
+ agentDefinitions,
45
45
  };