moflo 4.8.21 → 4.8.23
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/.claude/agents/browser/browser-agent.yaml +182 -182
- package/.claude/agents/core/coder.md +265 -265
- package/.claude/agents/core/planner.md +167 -167
- package/.claude/agents/core/researcher.md +189 -189
- package/.claude/agents/core/reviewer.md +325 -325
- package/.claude/agents/core/tester.md +318 -318
- package/.claude/agents/database-specialist.yaml +21 -21
- package/.claude/agents/dual-mode/codex-coordinator.md +224 -224
- package/.claude/agents/dual-mode/codex-worker.md +211 -211
- package/.claude/agents/dual-mode/dual-orchestrator.md +291 -291
- package/.claude/agents/github/code-review-swarm.md +537 -537
- package/.claude/agents/github/github-modes.md +172 -172
- package/.claude/agents/github/issue-tracker.md +318 -318
- package/.claude/agents/github/multi-repo-swarm.md +552 -552
- package/.claude/agents/github/pr-manager.md +190 -190
- package/.claude/agents/github/project-board-sync.md +508 -508
- package/.claude/agents/github/release-manager.md +366 -366
- package/.claude/agents/github/release-swarm.md +582 -582
- package/.claude/agents/github/repo-architect.md +397 -397
- package/.claude/agents/github/swarm-issue.md +572 -572
- package/.claude/agents/github/swarm-pr.md +427 -427
- package/.claude/agents/github/sync-coordinator.md +451 -451
- package/.claude/agents/github/workflow-automation.md +634 -634
- package/.claude/agents/goal/code-goal-planner.md +445 -445
- package/.claude/agents/hive-mind/collective-intelligence-coordinator.md +129 -129
- package/.claude/agents/hive-mind/queen-coordinator.md +202 -202
- package/.claude/agents/hive-mind/scout-explorer.md +241 -241
- package/.claude/agents/hive-mind/swarm-memory-manager.md +192 -192
- package/.claude/agents/hive-mind/worker-specialist.md +216 -216
- package/.claude/agents/index.yaml +17 -17
- package/.claude/agents/neural/safla-neural.md +73 -73
- package/.claude/agents/project-coordinator.yaml +15 -15
- package/.claude/agents/python-specialist.yaml +21 -21
- package/.claude/agents/reasoning/goal-planner.md +72 -72
- package/.claude/agents/security-auditor.yaml +20 -20
- package/.claude/agents/swarm/adaptive-coordinator.md +395 -395
- package/.claude/agents/swarm/hierarchical-coordinator.md +326 -326
- package/.claude/agents/swarm/mesh-coordinator.md +391 -391
- package/.claude/agents/templates/migration-plan.md +745 -745
- package/.claude/agents/typescript-specialist.yaml +21 -21
- package/.claude/checkpoints/1767754460.json +8 -8
- package/.claude/commands/agents/agent-spawning.md +28 -28
- package/.claude/commands/github/github-modes.md +146 -146
- package/.claude/commands/github/github-swarm.md +121 -121
- package/.claude/commands/github/issue-tracker.md +291 -291
- package/.claude/commands/github/pr-manager.md +169 -169
- package/.claude/commands/github/release-manager.md +337 -337
- package/.claude/commands/github/repo-architect.md +366 -366
- package/.claude/commands/github/sync-coordinator.md +300 -300
- package/.claude/commands/memory/neural.md +47 -47
- package/.claude/commands/sparc/analyzer.md +51 -51
- package/.claude/commands/sparc/architect.md +53 -53
- package/.claude/commands/sparc/ask.md +97 -97
- package/.claude/commands/sparc/batch-executor.md +54 -54
- package/.claude/commands/sparc/code.md +89 -89
- package/.claude/commands/sparc/coder.md +54 -54
- package/.claude/commands/sparc/debug.md +83 -83
- package/.claude/commands/sparc/debugger.md +54 -54
- package/.claude/commands/sparc/designer.md +53 -53
- package/.claude/commands/sparc/devops.md +109 -109
- package/.claude/commands/sparc/docs-writer.md +80 -80
- package/.claude/commands/sparc/documenter.md +54 -54
- package/.claude/commands/sparc/innovator.md +54 -54
- package/.claude/commands/sparc/integration.md +83 -83
- package/.claude/commands/sparc/mcp.md +117 -117
- package/.claude/commands/sparc/memory-manager.md +54 -54
- package/.claude/commands/sparc/optimizer.md +54 -54
- package/.claude/commands/sparc/orchestrator.md +131 -131
- package/.claude/commands/sparc/post-deployment-monitoring-mode.md +83 -83
- package/.claude/commands/sparc/refinement-optimization-mode.md +83 -83
- package/.claude/commands/sparc/researcher.md +54 -54
- package/.claude/commands/sparc/reviewer.md +54 -54
- package/.claude/commands/sparc/security-review.md +80 -80
- package/.claude/commands/sparc/sparc-modes.md +174 -174
- package/.claude/commands/sparc/sparc.md +111 -111
- package/.claude/commands/sparc/spec-pseudocode.md +80 -80
- package/.claude/commands/sparc/supabase-admin.md +348 -348
- package/.claude/commands/sparc/swarm-coordinator.md +54 -54
- package/.claude/commands/sparc/tdd.md +54 -54
- package/.claude/commands/sparc/tester.md +54 -54
- package/.claude/commands/sparc/tutorial.md +79 -79
- package/.claude/commands/sparc/workflow-manager.md +54 -54
- package/.claude/commands/sparc.md +166 -166
- package/.claude/commands/swarm/analysis.md +95 -95
- package/.claude/commands/swarm/development.md +96 -96
- package/.claude/commands/swarm/examples.md +168 -168
- package/.claude/commands/swarm/maintenance.md +102 -102
- package/.claude/commands/swarm/optimization.md +117 -117
- package/.claude/commands/swarm/research.md +136 -136
- package/.claude/commands/swarm/testing.md +131 -131
- package/.claude/commands/workflows/development.md +77 -77
- package/.claude/commands/workflows/research.md +62 -62
- package/.claude/guidance/moflo-bootstrap.md +126 -126
- package/.claude/guidance/shipped/agent-bootstrap.md +126 -126
- package/.claude/guidance/shipped/guidance-memory-strategy.md +262 -262
- package/.claude/guidance/shipped/memory-strategy.md +204 -204
- package/.claude/guidance/shipped/moflo.md +668 -653
- package/.claude/guidance/shipped/task-swarm-integration.md +441 -441
- package/.claude/helpers/intelligence.cjs +207 -207
- package/.claude/helpers/statusline.cjs +851 -851
- package/.claude/settings.local.json +18 -0
- package/.claude/skills/fl/SKILL.md +583 -583
- package/.claude/skills/flo/SKILL.md +583 -583
- package/.claude/skills/github-code-review/SKILL.md +1140 -1140
- package/.claude/skills/github-multi-repo/SKILL.md +874 -874
- package/.claude/skills/github-project-management/SKILL.md +1277 -1277
- package/.claude/skills/github-release-management/SKILL.md +1081 -1081
- package/.claude/skills/github-workflow-automation/SKILL.md +1065 -1065
- package/.claude/skills/hive-mind-advanced/SKILL.md +712 -712
- package/.claude/skills/hooks-automation/SKILL.md +1201 -1201
- package/.claude/skills/performance-analysis/SKILL.md +563 -563
- package/.claude/skills/sparc-methodology/SKILL.md +1115 -1115
- package/.claude/skills/swarm-advanced/SKILL.md +973 -973
- package/.claude/workflow-state.json +4 -4
- package/LICENSE +21 -21
- package/README.md +698 -685
- package/bin/cli.js +0 -0
- package/bin/gate-hook.mjs +50 -50
- package/bin/gate.cjs +138 -138
- package/bin/generate-code-map.mjs +775 -775
- package/bin/hook-handler.cjs +83 -83
- package/bin/hooks.mjs +656 -656
- package/bin/index-guidance.mjs +892 -892
- package/bin/index-tests.mjs +709 -709
- package/bin/lib/process-manager.mjs +243 -243
- package/bin/lib/registry-cleanup.cjs +41 -41
- package/bin/prompt-hook.mjs +72 -72
- package/bin/semantic-search.mjs +472 -472
- package/bin/session-start-launcher.mjs +238 -238
- package/bin/setup-project.mjs +250 -250
- package/package.json +123 -123
- package/src/@claude-flow/cli/README.md +452 -452
- package/src/@claude-flow/cli/bin/cli.js +180 -180
- package/src/@claude-flow/cli/bin/preinstall.cjs +2 -2
- package/src/@claude-flow/cli/dist/src/commands/completions.js +409 -409
- package/src/@claude-flow/cli/dist/src/commands/doctor.js +18 -2
- package/src/@claude-flow/cli/dist/src/commands/embeddings.js +25 -25
- package/src/@claude-flow/cli/dist/src/commands/github.js +61 -61
- package/src/@claude-flow/cli/dist/src/commands/hive-mind.js +90 -90
- package/src/@claude-flow/cli/dist/src/commands/hooks.js +9 -9
- package/src/@claude-flow/cli/dist/src/commands/init.js +3 -8
- package/src/@claude-flow/cli/dist/src/commands/ruvector/import.js +14 -14
- package/src/@claude-flow/cli/dist/src/commands/ruvector/setup.js +624 -624
- package/src/@claude-flow/cli/dist/src/config/moflo-config.d.ts +3 -0
- package/src/@claude-flow/cli/dist/src/config/moflo-config.js +101 -91
- package/src/@claude-flow/cli/dist/src/index.d.ts +5 -0
- package/src/@claude-flow/cli/dist/src/index.js +44 -0
- package/src/@claude-flow/cli/dist/src/init/claudemd-generator.d.ts +29 -29
- package/src/@claude-flow/cli/dist/src/init/claudemd-generator.js +43 -43
- package/src/@claude-flow/cli/dist/src/init/executor.js +453 -453
- package/src/@claude-flow/cli/dist/src/init/helpers-generator.js +482 -482
- package/src/@claude-flow/cli/dist/src/init/moflo-init.d.ts +30 -30
- package/src/@claude-flow/cli/dist/src/init/moflo-init.js +140 -140
- package/src/@claude-flow/cli/dist/src/init/statusline-generator.js +876 -876
- package/src/@claude-flow/cli/dist/src/memory/memory-initializer.js +371 -371
- package/src/@claude-flow/cli/dist/src/runtime/headless.js +28 -28
- package/src/@claude-flow/cli/dist/src/services/container-worker-pool.d.ts +197 -0
- package/src/@claude-flow/cli/dist/src/services/container-worker-pool.js +584 -0
- package/src/@claude-flow/cli/dist/src/services/daemon-lock.d.ts +14 -0
- package/src/@claude-flow/cli/dist/src/services/daemon-lock.js +1 -1
- package/src/@claude-flow/cli/dist/src/services/headless-worker-executor.js +84 -84
- package/src/@claude-flow/cli/package.json +1 -1
- package/src/@claude-flow/guidance/README.md +1195 -1195
- package/src/@claude-flow/guidance/package.json +198 -198
- package/src/@claude-flow/memory/README.md +587 -587
- package/src/@claude-flow/memory/dist/agentdb-backend.js +26 -26
- package/src/@claude-flow/memory/dist/auto-memory-bridge.test.js +27 -27
- package/src/@claude-flow/memory/dist/hybrid-backend.d.ts +245 -0
- package/src/@claude-flow/memory/dist/hybrid-backend.js +569 -0
- package/src/@claude-flow/memory/dist/hybrid-backend.test.d.ts +8 -0
- package/src/@claude-flow/memory/dist/hybrid-backend.test.js +320 -0
- package/src/@claude-flow/memory/dist/sqlite-backend.d.ts +121 -0
- package/src/@claude-flow/memory/dist/sqlite-backend.js +572 -0
- package/src/@claude-flow/memory/dist/sqljs-backend.js +26 -26
- package/src/@claude-flow/memory/package.json +44 -44
- package/src/@claude-flow/shared/README.md +323 -323
- package/src/@claude-flow/shared/dist/events/event-store.js +31 -31
- package/src/README.md +493 -493
|
@@ -1,180 +1,180 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* @claude-flow/cli - CLI Entry Point
|
|
4
|
-
*
|
|
5
|
-
* Claude Flow V3 Command Line Interface
|
|
6
|
-
*
|
|
7
|
-
* Auto-detects MCP mode when stdin is piped and no args provided.
|
|
8
|
-
* This allows: echo '{"jsonrpc":"2.0",...}' | npx @claude-flow/cli
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
// Suppress agentic-flow's agentdb-runtime-patch warning. The patch targets
|
|
12
|
-
// agentdb v1.x (dist/controllers/) but v3+ uses dist/src/controllers/ and
|
|
13
|
-
// already ships with correct .js extensions — the patch is unnecessary.
|
|
14
|
-
process.env.SKIP_AGENTDB_PATCH ??= '1';
|
|
15
|
-
|
|
16
|
-
import { randomUUID } from 'crypto';
|
|
17
|
-
|
|
18
|
-
// Check if we should run in MCP server mode
|
|
19
|
-
// Conditions:
|
|
20
|
-
// 1. stdin is being piped AND no CLI arguments provided (auto-detect)
|
|
21
|
-
// 2. stdin is being piped AND args are "mcp start" (explicit, e.g. npx claude-flow@alpha mcp start)
|
|
22
|
-
const cliArgs = process.argv.slice(2);
|
|
23
|
-
const isExplicitMCP = cliArgs.length >= 1 && cliArgs[0] === 'mcp' && (cliArgs.length === 1 || cliArgs[1] === 'start');
|
|
24
|
-
const isMCPMode = !process.stdin.isTTY && (process.argv.length === 2 || isExplicitMCP);
|
|
25
|
-
|
|
26
|
-
if (isMCPMode) {
|
|
27
|
-
// Run MCP server mode
|
|
28
|
-
const { listMCPTools, callMCPTool, hasTool } = await import('../dist/src/mcp-client.js');
|
|
29
|
-
|
|
30
|
-
// Read version from the root moflo package.json dynamically
|
|
31
|
-
const { readFileSync } = await import('fs');
|
|
32
|
-
const { dirname: _dirname, join: _join } = await import('path');
|
|
33
|
-
const { fileURLToPath: _fileURLToPath } = await import('url');
|
|
34
|
-
let VERSION = '4.6.2';
|
|
35
|
-
try {
|
|
36
|
-
const _thisDir = _dirname(_fileURLToPath(import.meta.url));
|
|
37
|
-
// Walk up to find root moflo package.json
|
|
38
|
-
let _dir = _thisDir;
|
|
39
|
-
for (;;) {
|
|
40
|
-
const _candidate = _join(_dir, 'package.json');
|
|
41
|
-
try {
|
|
42
|
-
const _pkg = JSON.parse(readFileSync(_candidate, 'utf8'));
|
|
43
|
-
if (_pkg.name === 'moflo' && _pkg.version) { VERSION = _pkg.version; break; }
|
|
44
|
-
} catch {}
|
|
45
|
-
const _parent = _dirname(_dir);
|
|
46
|
-
if (_parent === _dir) break;
|
|
47
|
-
_dir = _parent;
|
|
48
|
-
}
|
|
49
|
-
} catch {}
|
|
50
|
-
const sessionId = `mcp-${Date.now()}-${randomUUID().slice(0, 8)}`;
|
|
51
|
-
|
|
52
|
-
console.error(
|
|
53
|
-
`[${new Date().toISOString()}] INFO [claude-flow-mcp] (${sessionId}) Starting in stdio mode`
|
|
54
|
-
);
|
|
55
|
-
|
|
56
|
-
let buffer = '';
|
|
57
|
-
process.stdin.setEncoding('utf8');
|
|
58
|
-
process.stdin.on('data', async (chunk) => {
|
|
59
|
-
buffer += chunk;
|
|
60
|
-
let lines = buffer.split('\n');
|
|
61
|
-
buffer = lines.pop() || '';
|
|
62
|
-
|
|
63
|
-
for (const line of lines) {
|
|
64
|
-
if (line.trim()) {
|
|
65
|
-
try {
|
|
66
|
-
const message = JSON.parse(line);
|
|
67
|
-
const response = await handleMessage(message);
|
|
68
|
-
if (response) {
|
|
69
|
-
console.log(JSON.stringify(response));
|
|
70
|
-
}
|
|
71
|
-
} catch (error) {
|
|
72
|
-
console.log(JSON.stringify({
|
|
73
|
-
jsonrpc: '2.0',
|
|
74
|
-
id: null,
|
|
75
|
-
error: { code: -32700, message: 'Parse error' },
|
|
76
|
-
}));
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
process.stdin.on('end', () => {
|
|
83
|
-
process.exit(0);
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
async function handleMessage(message) {
|
|
87
|
-
if (!message.method) {
|
|
88
|
-
return {
|
|
89
|
-
jsonrpc: '2.0',
|
|
90
|
-
id: message.id,
|
|
91
|
-
error: { code: -32600, message: 'Invalid Request: missing method' },
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
const params = message.params || {};
|
|
96
|
-
|
|
97
|
-
switch (message.method) {
|
|
98
|
-
case 'initialize':
|
|
99
|
-
return {
|
|
100
|
-
jsonrpc: '2.0',
|
|
101
|
-
id: message.id,
|
|
102
|
-
result: {
|
|
103
|
-
protocolVersion: '2024-11-05',
|
|
104
|
-
serverInfo: { name: 'moflo', version: VERSION },
|
|
105
|
-
capabilities: {
|
|
106
|
-
tools: { listChanged: true },
|
|
107
|
-
resources: { subscribe: true, listChanged: true },
|
|
108
|
-
},
|
|
109
|
-
},
|
|
110
|
-
};
|
|
111
|
-
|
|
112
|
-
case 'tools/list': {
|
|
113
|
-
const tools = listMCPTools();
|
|
114
|
-
return {
|
|
115
|
-
jsonrpc: '2.0',
|
|
116
|
-
id: message.id,
|
|
117
|
-
result: {
|
|
118
|
-
tools: tools.map(tool => ({
|
|
119
|
-
name: tool.name,
|
|
120
|
-
description: tool.description,
|
|
121
|
-
inputSchema: tool.inputSchema,
|
|
122
|
-
})),
|
|
123
|
-
},
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
case 'tools/call': {
|
|
128
|
-
const toolName = params.name;
|
|
129
|
-
const toolParams = params.arguments || {};
|
|
130
|
-
|
|
131
|
-
if (!hasTool(toolName)) {
|
|
132
|
-
return {
|
|
133
|
-
jsonrpc: '2.0',
|
|
134
|
-
id: message.id,
|
|
135
|
-
error: { code: -32601, message: `Tool not found: ${toolName}` },
|
|
136
|
-
};
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
try {
|
|
140
|
-
const result = await callMCPTool(toolName, toolParams, { sessionId });
|
|
141
|
-
return {
|
|
142
|
-
jsonrpc: '2.0',
|
|
143
|
-
id: message.id,
|
|
144
|
-
result: { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] },
|
|
145
|
-
};
|
|
146
|
-
} catch (error) {
|
|
147
|
-
return {
|
|
148
|
-
jsonrpc: '2.0',
|
|
149
|
-
id: message.id,
|
|
150
|
-
error: {
|
|
151
|
-
code: -32603,
|
|
152
|
-
message: error instanceof Error ? error.message : 'Tool execution failed',
|
|
153
|
-
},
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
case 'notifications/initialized':
|
|
159
|
-
return null;
|
|
160
|
-
|
|
161
|
-
case 'ping':
|
|
162
|
-
return { jsonrpc: '2.0', id: message.id, result: {} };
|
|
163
|
-
|
|
164
|
-
default:
|
|
165
|
-
return {
|
|
166
|
-
jsonrpc: '2.0',
|
|
167
|
-
id: message.id,
|
|
168
|
-
error: { code: -32601, message: `Method not found: ${message.method}` },
|
|
169
|
-
};
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
} else {
|
|
173
|
-
// Run normal CLI mode
|
|
174
|
-
const { CLI } = await import('../dist/src/index.js');
|
|
175
|
-
const cli = new CLI();
|
|
176
|
-
cli.run().catch((error) => {
|
|
177
|
-
console.error('Fatal error:', error.message);
|
|
178
|
-
process.exit(1);
|
|
179
|
-
});
|
|
180
|
-
}
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* @claude-flow/cli - CLI Entry Point
|
|
4
|
+
*
|
|
5
|
+
* Claude Flow V3 Command Line Interface
|
|
6
|
+
*
|
|
7
|
+
* Auto-detects MCP mode when stdin is piped and no args provided.
|
|
8
|
+
* This allows: echo '{"jsonrpc":"2.0",...}' | npx @claude-flow/cli
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
// Suppress agentic-flow's agentdb-runtime-patch warning. The patch targets
|
|
12
|
+
// agentdb v1.x (dist/controllers/) but v3+ uses dist/src/controllers/ and
|
|
13
|
+
// already ships with correct .js extensions — the patch is unnecessary.
|
|
14
|
+
process.env.SKIP_AGENTDB_PATCH ??= '1';
|
|
15
|
+
|
|
16
|
+
import { randomUUID } from 'crypto';
|
|
17
|
+
|
|
18
|
+
// Check if we should run in MCP server mode
|
|
19
|
+
// Conditions:
|
|
20
|
+
// 1. stdin is being piped AND no CLI arguments provided (auto-detect)
|
|
21
|
+
// 2. stdin is being piped AND args are "mcp start" (explicit, e.g. npx claude-flow@alpha mcp start)
|
|
22
|
+
const cliArgs = process.argv.slice(2);
|
|
23
|
+
const isExplicitMCP = cliArgs.length >= 1 && cliArgs[0] === 'mcp' && (cliArgs.length === 1 || cliArgs[1] === 'start');
|
|
24
|
+
const isMCPMode = !process.stdin.isTTY && (process.argv.length === 2 || isExplicitMCP);
|
|
25
|
+
|
|
26
|
+
if (isMCPMode) {
|
|
27
|
+
// Run MCP server mode
|
|
28
|
+
const { listMCPTools, callMCPTool, hasTool } = await import('../dist/src/mcp-client.js');
|
|
29
|
+
|
|
30
|
+
// Read version from the root moflo package.json dynamically
|
|
31
|
+
const { readFileSync } = await import('fs');
|
|
32
|
+
const { dirname: _dirname, join: _join } = await import('path');
|
|
33
|
+
const { fileURLToPath: _fileURLToPath } = await import('url');
|
|
34
|
+
let VERSION = '4.6.2';
|
|
35
|
+
try {
|
|
36
|
+
const _thisDir = _dirname(_fileURLToPath(import.meta.url));
|
|
37
|
+
// Walk up to find root moflo package.json
|
|
38
|
+
let _dir = _thisDir;
|
|
39
|
+
for (;;) {
|
|
40
|
+
const _candidate = _join(_dir, 'package.json');
|
|
41
|
+
try {
|
|
42
|
+
const _pkg = JSON.parse(readFileSync(_candidate, 'utf8'));
|
|
43
|
+
if (_pkg.name === 'moflo' && _pkg.version) { VERSION = _pkg.version; break; }
|
|
44
|
+
} catch {}
|
|
45
|
+
const _parent = _dirname(_dir);
|
|
46
|
+
if (_parent === _dir) break;
|
|
47
|
+
_dir = _parent;
|
|
48
|
+
}
|
|
49
|
+
} catch {}
|
|
50
|
+
const sessionId = `mcp-${Date.now()}-${randomUUID().slice(0, 8)}`;
|
|
51
|
+
|
|
52
|
+
console.error(
|
|
53
|
+
`[${new Date().toISOString()}] INFO [claude-flow-mcp] (${sessionId}) Starting in stdio mode`
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
let buffer = '';
|
|
57
|
+
process.stdin.setEncoding('utf8');
|
|
58
|
+
process.stdin.on('data', async (chunk) => {
|
|
59
|
+
buffer += chunk;
|
|
60
|
+
let lines = buffer.split('\n');
|
|
61
|
+
buffer = lines.pop() || '';
|
|
62
|
+
|
|
63
|
+
for (const line of lines) {
|
|
64
|
+
if (line.trim()) {
|
|
65
|
+
try {
|
|
66
|
+
const message = JSON.parse(line);
|
|
67
|
+
const response = await handleMessage(message);
|
|
68
|
+
if (response) {
|
|
69
|
+
console.log(JSON.stringify(response));
|
|
70
|
+
}
|
|
71
|
+
} catch (error) {
|
|
72
|
+
console.log(JSON.stringify({
|
|
73
|
+
jsonrpc: '2.0',
|
|
74
|
+
id: null,
|
|
75
|
+
error: { code: -32700, message: 'Parse error' },
|
|
76
|
+
}));
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
process.stdin.on('end', () => {
|
|
83
|
+
process.exit(0);
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
async function handleMessage(message) {
|
|
87
|
+
if (!message.method) {
|
|
88
|
+
return {
|
|
89
|
+
jsonrpc: '2.0',
|
|
90
|
+
id: message.id,
|
|
91
|
+
error: { code: -32600, message: 'Invalid Request: missing method' },
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const params = message.params || {};
|
|
96
|
+
|
|
97
|
+
switch (message.method) {
|
|
98
|
+
case 'initialize':
|
|
99
|
+
return {
|
|
100
|
+
jsonrpc: '2.0',
|
|
101
|
+
id: message.id,
|
|
102
|
+
result: {
|
|
103
|
+
protocolVersion: '2024-11-05',
|
|
104
|
+
serverInfo: { name: 'moflo', version: VERSION },
|
|
105
|
+
capabilities: {
|
|
106
|
+
tools: { listChanged: true },
|
|
107
|
+
resources: { subscribe: true, listChanged: true },
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
case 'tools/list': {
|
|
113
|
+
const tools = listMCPTools();
|
|
114
|
+
return {
|
|
115
|
+
jsonrpc: '2.0',
|
|
116
|
+
id: message.id,
|
|
117
|
+
result: {
|
|
118
|
+
tools: tools.map(tool => ({
|
|
119
|
+
name: tool.name,
|
|
120
|
+
description: tool.description,
|
|
121
|
+
inputSchema: tool.inputSchema,
|
|
122
|
+
})),
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
case 'tools/call': {
|
|
128
|
+
const toolName = params.name;
|
|
129
|
+
const toolParams = params.arguments || {};
|
|
130
|
+
|
|
131
|
+
if (!hasTool(toolName)) {
|
|
132
|
+
return {
|
|
133
|
+
jsonrpc: '2.0',
|
|
134
|
+
id: message.id,
|
|
135
|
+
error: { code: -32601, message: `Tool not found: ${toolName}` },
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
try {
|
|
140
|
+
const result = await callMCPTool(toolName, toolParams, { sessionId });
|
|
141
|
+
return {
|
|
142
|
+
jsonrpc: '2.0',
|
|
143
|
+
id: message.id,
|
|
144
|
+
result: { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] },
|
|
145
|
+
};
|
|
146
|
+
} catch (error) {
|
|
147
|
+
return {
|
|
148
|
+
jsonrpc: '2.0',
|
|
149
|
+
id: message.id,
|
|
150
|
+
error: {
|
|
151
|
+
code: -32603,
|
|
152
|
+
message: error instanceof Error ? error.message : 'Tool execution failed',
|
|
153
|
+
},
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
case 'notifications/initialized':
|
|
159
|
+
return null;
|
|
160
|
+
|
|
161
|
+
case 'ping':
|
|
162
|
+
return { jsonrpc: '2.0', id: message.id, result: {} };
|
|
163
|
+
|
|
164
|
+
default:
|
|
165
|
+
return {
|
|
166
|
+
jsonrpc: '2.0',
|
|
167
|
+
id: message.id,
|
|
168
|
+
error: { code: -32601, message: `Method not found: ${message.method}` },
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
} else {
|
|
173
|
+
// Run normal CLI mode
|
|
174
|
+
const { CLI } = await import('../dist/src/index.js');
|
|
175
|
+
const cli = new CLI();
|
|
176
|
+
cli.run().catch((error) => {
|
|
177
|
+
console.error('Fatal error:', error.message);
|
|
178
|
+
process.exit(1);
|
|
179
|
+
});
|
|
180
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
// Preinstall hook — no-op (cache repair removed in 3.1.0-alpha.53)
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Preinstall hook — no-op (cache repair removed in 3.1.0-alpha.53)
|