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.
- package/README.ja.md +106 -48
- package/README.md +110 -32
- package/bin/musubi-analyze.js +74 -67
- package/bin/musubi-browser.js +27 -26
- package/bin/musubi-change.js +48 -47
- package/bin/musubi-checkpoint.js +10 -7
- package/bin/musubi-convert.js +25 -25
- package/bin/musubi-costs.js +27 -10
- package/bin/musubi-gui.js +52 -46
- package/bin/musubi-init.js +1952 -10
- package/bin/musubi-orchestrate.js +327 -239
- package/bin/musubi-remember.js +69 -56
- package/bin/musubi-resolve.js +53 -45
- package/bin/musubi-trace.js +51 -22
- package/bin/musubi-validate.js +39 -30
- package/bin/musubi-workflow.js +33 -34
- package/bin/musubi.js +39 -2
- package/package.json +1 -1
- package/src/agents/agent-loop.js +94 -95
- package/src/agents/agentic/code-generator.js +119 -109
- package/src/agents/agentic/code-reviewer.js +105 -108
- package/src/agents/agentic/index.js +4 -4
- package/src/agents/browser/action-executor.js +13 -13
- package/src/agents/browser/ai-comparator.js +11 -10
- package/src/agents/browser/context-manager.js +6 -6
- package/src/agents/browser/index.js +5 -5
- package/src/agents/browser/nl-parser.js +31 -46
- package/src/agents/browser/screenshot.js +2 -2
- package/src/agents/browser/test-generator.js +6 -4
- package/src/agents/function-tool.js +71 -65
- package/src/agents/index.js +7 -7
- package/src/agents/schema-generator.js +98 -94
- package/src/analyzers/ast-extractor.js +164 -145
- package/src/analyzers/codegraph-auto-update.js +858 -0
- package/src/analyzers/complexity-analyzer.js +536 -0
- package/src/analyzers/context-optimizer.js +247 -125
- package/src/analyzers/impact-analyzer.js +1 -1
- package/src/analyzers/large-project-analyzer.js +766 -0
- package/src/analyzers/repository-map.js +83 -80
- package/src/analyzers/security-analyzer.js +19 -11
- package/src/analyzers/stuck-detector.js +19 -17
- package/src/converters/index.js +78 -57
- package/src/converters/ir/types.js +12 -12
- package/src/converters/parsers/musubi-parser.js +134 -126
- package/src/converters/parsers/openapi-parser.js +70 -53
- package/src/converters/parsers/speckit-parser.js +239 -175
- package/src/converters/writers/musubi-writer.js +123 -118
- package/src/converters/writers/speckit-writer.js +124 -113
- package/src/generators/rust-migration-generator.js +512 -0
- package/src/gui/public/index.html +1365 -1211
- package/src/gui/server.js +41 -40
- package/src/gui/services/file-watcher.js +23 -8
- package/src/gui/services/project-scanner.js +26 -20
- package/src/gui/services/replanning-service.js +27 -23
- package/src/gui/services/traceability-service.js +8 -8
- package/src/gui/services/workflow-service.js +14 -7
- package/src/index.js +151 -0
- package/src/integrations/cicd.js +90 -104
- package/src/integrations/codegraph-mcp.js +643 -0
- package/src/integrations/documentation.js +142 -103
- package/src/integrations/examples.js +95 -80
- package/src/integrations/github-client.js +17 -17
- package/src/integrations/index.js +5 -5
- package/src/integrations/mcp/index.js +21 -21
- package/src/integrations/mcp/mcp-context-provider.js +76 -78
- package/src/integrations/mcp/mcp-discovery.js +74 -72
- package/src/integrations/mcp/mcp-tool-registry.js +99 -94
- package/src/integrations/mcp-connector.js +70 -66
- package/src/integrations/platforms.js +50 -49
- package/src/integrations/tool-discovery.js +37 -31
- package/src/llm-providers/anthropic-provider.js +11 -11
- package/src/llm-providers/base-provider.js +16 -18
- package/src/llm-providers/copilot-provider.js +22 -19
- package/src/llm-providers/index.js +26 -25
- package/src/llm-providers/ollama-provider.js +11 -11
- package/src/llm-providers/openai-provider.js +12 -12
- package/src/managers/agent-memory.js +36 -24
- package/src/managers/checkpoint-manager.js +4 -8
- package/src/managers/delta-spec.js +19 -19
- package/src/managers/index.js +13 -4
- package/src/managers/memory-condenser.js +35 -45
- package/src/managers/repo-skill-manager.js +57 -31
- package/src/managers/skill-loader.js +25 -22
- package/src/managers/skill-tools.js +36 -72
- package/src/managers/workflow.js +30 -22
- package/src/monitoring/cost-tracker.js +53 -44
- package/src/monitoring/incident-manager.js +123 -103
- package/src/monitoring/index.js +144 -134
- package/src/monitoring/observability.js +82 -59
- package/src/monitoring/quality-dashboard.js +51 -39
- package/src/monitoring/release-manager.js +70 -50
- package/src/orchestration/agent-skill-binding.js +39 -47
- package/src/orchestration/error-handler.js +65 -107
- package/src/orchestration/guardrails/base-guardrail.js +26 -24
- package/src/orchestration/guardrails/guardrail-rules.js +50 -64
- package/src/orchestration/guardrails/index.js +5 -5
- package/src/orchestration/guardrails/input-guardrail.js +58 -45
- package/src/orchestration/guardrails/output-guardrail.js +104 -81
- package/src/orchestration/guardrails/safety-check.js +79 -79
- package/src/orchestration/index.js +38 -55
- package/src/orchestration/mcp-tool-adapters.js +96 -99
- package/src/orchestration/orchestration-engine.js +21 -21
- package/src/orchestration/pattern-registry.js +60 -45
- package/src/orchestration/patterns/auto.js +34 -47
- package/src/orchestration/patterns/group-chat.js +59 -65
- package/src/orchestration/patterns/handoff.js +67 -65
- package/src/orchestration/patterns/human-in-loop.js +51 -72
- package/src/orchestration/patterns/nested.js +25 -40
- package/src/orchestration/patterns/sequential.js +35 -34
- package/src/orchestration/patterns/swarm.js +63 -56
- package/src/orchestration/patterns/triage.js +150 -109
- package/src/orchestration/reasoning/index.js +9 -9
- package/src/orchestration/reasoning/planning-engine.js +143 -140
- package/src/orchestration/reasoning/reasoning-engine.js +206 -144
- package/src/orchestration/reasoning/self-correction.js +121 -128
- package/src/orchestration/replanning/adaptive-goal-modifier.js +107 -112
- package/src/orchestration/replanning/alternative-generator.js +37 -42
- package/src/orchestration/replanning/config.js +63 -59
- package/src/orchestration/replanning/goal-progress-tracker.js +98 -100
- package/src/orchestration/replanning/index.js +24 -20
- package/src/orchestration/replanning/plan-evaluator.js +49 -50
- package/src/orchestration/replanning/plan-monitor.js +32 -28
- package/src/orchestration/replanning/proactive-path-optimizer.js +175 -178
- package/src/orchestration/replanning/replan-history.js +33 -26
- package/src/orchestration/replanning/replanning-engine.js +106 -108
- package/src/orchestration/skill-executor.js +107 -109
- package/src/orchestration/skill-registry.js +85 -89
- package/src/orchestration/workflow-examples.js +228 -231
- package/src/orchestration/workflow-executor.js +65 -68
- package/src/orchestration/workflow-orchestrator.js +72 -73
- package/src/phase4-integration.js +47 -40
- package/src/phase5-integration.js +89 -30
- package/src/reporters/coverage-report.js +82 -30
- package/src/reporters/hierarchical-reporter.js +498 -0
- package/src/reporters/traceability-matrix-report.js +29 -20
- package/src/resolvers/issue-resolver.js +43 -31
- package/src/steering/advanced-validation.js +133 -124
- package/src/steering/auto-updater.js +60 -73
- package/src/steering/index.js +6 -6
- package/src/steering/quality-metrics.js +41 -35
- package/src/steering/steering-auto-update.js +83 -86
- package/src/steering/steering-validator.js +98 -106
- package/src/steering/template-constraints.js +53 -54
- package/src/templates/agents/claude-code/CLAUDE.md +32 -32
- package/src/templates/agents/claude-code/skills/agent-assistant/SKILL.md +13 -5
- package/src/templates/agents/claude-code/skills/ai-ml-engineer/mlops-guide.md +23 -23
- package/src/templates/agents/claude-code/skills/ai-ml-engineer/model-card-template.md +60 -41
- package/src/templates/agents/claude-code/skills/api-designer/api-patterns.md +27 -19
- package/src/templates/agents/claude-code/skills/api-designer/openapi-template.md +11 -7
- package/src/templates/agents/claude-code/skills/bug-hunter/SKILL.md +4 -3
- package/src/templates/agents/claude-code/skills/bug-hunter/root-cause-analysis.md +37 -15
- package/src/templates/agents/claude-code/skills/change-impact-analyzer/dependency-graph-patterns.md +36 -42
- package/src/templates/agents/claude-code/skills/change-impact-analyzer/impact-analysis-template.md +69 -60
- package/src/templates/agents/claude-code/skills/cloud-architect/aws-patterns.md +31 -38
- package/src/templates/agents/claude-code/skills/cloud-architect/azure-patterns.md +28 -23
- package/src/templates/agents/claude-code/skills/code-reviewer/SKILL.md +61 -0
- package/src/templates/agents/claude-code/skills/code-reviewer/best-practices.md +27 -0
- package/src/templates/agents/claude-code/skills/code-reviewer/review-checklist.md +29 -10
- package/src/templates/agents/claude-code/skills/code-reviewer/review-standards.md +29 -24
- package/src/templates/agents/claude-code/skills/constitution-enforcer/SKILL.md +8 -6
- package/src/templates/agents/claude-code/skills/constitution-enforcer/constitutional-articles.md +62 -26
- package/src/templates/agents/claude-code/skills/constitution-enforcer/phase-minus-one-gates.md +35 -16
- package/src/templates/agents/claude-code/skills/database-administrator/backup-recovery.md +27 -17
- package/src/templates/agents/claude-code/skills/database-administrator/tuning-guide.md +25 -20
- package/src/templates/agents/claude-code/skills/database-schema-designer/schema-patterns.md +39 -22
- package/src/templates/agents/claude-code/skills/devops-engineer/ci-cd-templates.md +25 -22
- package/src/templates/agents/claude-code/skills/issue-resolver/SKILL.md +24 -21
- package/src/templates/agents/claude-code/skills/orchestrator/SKILL.md +148 -63
- package/src/templates/agents/claude-code/skills/orchestrator/patterns.md +35 -16
- package/src/templates/agents/claude-code/skills/orchestrator/selection-matrix.md +69 -64
- package/src/templates/agents/claude-code/skills/performance-engineer/optimization-playbook.md +47 -47
- package/src/templates/agents/claude-code/skills/performance-optimizer/SKILL.md +69 -0
- package/src/templates/agents/claude-code/skills/performance-optimizer/benchmark-template.md +63 -45
- package/src/templates/agents/claude-code/skills/performance-optimizer/optimization-patterns.md +33 -35
- package/src/templates/agents/claude-code/skills/project-manager/SKILL.md +7 -6
- package/src/templates/agents/claude-code/skills/project-manager/agile-ceremonies.md +47 -28
- package/src/templates/agents/claude-code/skills/project-manager/project-templates.md +94 -78
- package/src/templates/agents/claude-code/skills/quality-assurance/SKILL.md +20 -17
- package/src/templates/agents/claude-code/skills/quality-assurance/qa-plan-template.md +63 -49
- package/src/templates/agents/claude-code/skills/release-coordinator/SKILL.md +5 -5
- package/src/templates/agents/claude-code/skills/release-coordinator/feature-flag-guide.md +30 -26
- package/src/templates/agents/claude-code/skills/release-coordinator/release-plan-template.md +67 -35
- package/src/templates/agents/claude-code/skills/requirements-analyst/ears-format.md +54 -42
- package/src/templates/agents/claude-code/skills/requirements-analyst/validation-rules.md +36 -33
- package/src/templates/agents/claude-code/skills/security-auditor/SKILL.md +77 -19
- package/src/templates/agents/claude-code/skills/security-auditor/audit-checklists.md +24 -24
- package/src/templates/agents/claude-code/skills/security-auditor/owasp-top-10.md +61 -20
- package/src/templates/agents/claude-code/skills/security-auditor/vulnerability-patterns.md +43 -11
- package/src/templates/agents/claude-code/skills/site-reliability-engineer/SKILL.md +1 -0
- package/src/templates/agents/claude-code/skills/site-reliability-engineer/incident-response-template.md +55 -25
- package/src/templates/agents/claude-code/skills/site-reliability-engineer/observability-patterns.md +78 -68
- package/src/templates/agents/claude-code/skills/site-reliability-engineer/slo-sli-guide.md +73 -53
- package/src/templates/agents/claude-code/skills/software-developer/solid-principles.md +83 -37
- package/src/templates/agents/claude-code/skills/software-developer/test-first-workflow.md +38 -31
- package/src/templates/agents/claude-code/skills/steering/SKILL.md +1 -0
- package/src/templates/agents/claude-code/skills/steering/auto-update-rules.md +31 -0
- package/src/templates/agents/claude-code/skills/system-architect/adr-template.md +25 -7
- package/src/templates/agents/claude-code/skills/system-architect/c4-model-guide.md +74 -61
- package/src/templates/agents/claude-code/skills/technical-writer/doc-templates/documentation-templates.md +70 -52
- package/src/templates/agents/claude-code/skills/test-engineer/SKILL.md +2 -0
- package/src/templates/agents/claude-code/skills/test-engineer/ears-test-mapping.md +75 -71
- package/src/templates/agents/claude-code/skills/test-engineer/test-types.md +85 -63
- package/src/templates/agents/claude-code/skills/traceability-auditor/coverage-matrix-template.md +39 -36
- package/src/templates/agents/claude-code/skills/traceability-auditor/gap-detection-rules.md +22 -17
- package/src/templates/agents/claude-code/skills/ui-ux-designer/SKILL.md +1 -0
- package/src/templates/agents/claude-code/skills/ui-ux-designer/accessibility-guidelines.md +49 -75
- package/src/templates/agents/claude-code/skills/ui-ux-designer/design-system-components.md +71 -59
- package/src/templates/agents/codex/AGENTS.md +74 -42
- package/src/templates/agents/cursor/AGENTS.md +74 -42
- package/src/templates/agents/gemini-cli/GEMINI.md +74 -42
- package/src/templates/agents/github-copilot/AGENTS.md +83 -51
- package/src/templates/agents/qwen-code/QWEN.md +74 -42
- package/src/templates/agents/windsurf/AGENTS.md +74 -42
- package/src/templates/architectures/README.md +41 -0
- package/src/templates/architectures/clean-architecture/README.md +113 -0
- package/src/templates/architectures/event-driven/README.md +162 -0
- package/src/templates/architectures/hexagonal/README.md +130 -0
- package/src/templates/index.js +6 -1
- package/src/templates/locale-manager.js +16 -16
- package/src/templates/shared/delta-spec-template.md +20 -13
- package/src/templates/shared/github-actions/musubi-issue-resolver.yml +5 -5
- package/src/templates/shared/github-actions/musubi-security-check.yml +3 -3
- package/src/templates/shared/github-actions/musubi-validate.yml +4 -4
- package/src/templates/shared/steering/structure.md +95 -0
- package/src/templates/skills/browser-agent.md +21 -16
- package/src/templates/skills/web-gui.md +8 -0
- package/src/templates/template-constraints.js +50 -53
- package/src/validators/advanced-validation.js +30 -36
- package/src/validators/constitutional-validator.js +77 -73
- package/src/validators/critic-system.js +49 -59
- package/src/validators/delta-format.js +59 -55
- 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
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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 =>
|
|
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
|
|
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
|
};
|
package/src/agents/index.js
CHANGED
|
@@ -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
|
};
|