@sparkleideas/cli 3.1.0-alpha.20 → 3.1.0-alpha.21
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/dist/src/commands/benchmark.js +2 -2
- package/dist/src/commands/claims.js +1 -1
- package/dist/src/commands/config.js +1 -1
- package/dist/src/commands/daemon.js +5 -5
- package/dist/src/commands/deployment.js +5 -5
- package/dist/src/commands/doctor.js +5 -5
- package/dist/src/commands/embeddings.js +3 -3
- package/dist/src/commands/guidance.js +1 -1
- package/dist/src/commands/hooks.js +11 -11
- package/dist/src/commands/init.js +11 -11
- package/dist/src/commands/migrate.js +7 -7
- package/dist/src/commands/neural.js +3 -3
- package/dist/src/commands/process.js +4 -4
- package/dist/src/commands/progress.js +1 -1
- package/dist/src/commands/start.js +4 -4
- package/dist/src/commands/status.js +1 -1
- package/dist/src/config-adapter.js +2 -2
- package/dist/src/init/executor.js +41 -41
- package/dist/src/init/helpers-generator.js +10 -10
- package/dist/src/init/statusline-generator.js +16 -16
- package/dist/src/init/types.d.ts +2 -2
- package/dist/src/mcp-tools/agent-tools.js +1 -1
- package/dist/src/mcp-tools/claims-tools.js +1 -1
- package/dist/src/mcp-tools/config-tools.js +1 -1
- package/dist/src/mcp-tools/coordination-tools.js +1 -1
- package/dist/src/mcp-tools/daa-tools.js +1 -1
- package/dist/src/mcp-tools/embeddings-tools.js +1 -1
- package/dist/src/mcp-tools/github-tools.js +1 -1
- package/dist/src/mcp-tools/hive-mind-tools.js +3 -3
- package/dist/src/mcp-tools/hooks-tools.js +1 -1
- package/dist/src/mcp-tools/memory-tools.js +1 -1
- package/dist/src/mcp-tools/neural-tools.js +1 -1
- package/dist/src/mcp-tools/performance-tools.js +1 -1
- package/dist/src/mcp-tools/progress-tools.js +1 -1
- package/dist/src/mcp-tools/session-tools.js +1 -1
- package/dist/src/mcp-tools/system-tools.js +2 -2
- package/dist/src/mcp-tools/task-tools.js +1 -1
- package/dist/src/mcp-tools/terminal-tools.js +1 -1
- package/dist/src/mcp-tools/workflow-tools.js +1 -1
- package/dist/src/memory/intelligence.js +5 -5
- package/dist/src/memory/memory-bridge.js +2 -2
- package/dist/src/memory/memory-initializer.js +1 -1
- package/dist/src/plugins/manager.js +2 -2
- package/dist/src/plugins/store/discovery.js +1 -1
- package/dist/src/services/claim-service.js +1 -1
- package/dist/src/services/container-worker-pool.js +2 -2
- package/dist/src/services/headless-worker-executor.js +2 -2
- package/dist/src/services/worker-daemon.js +14 -14
- package/dist/src/transfer/store/registry.js +1 -1
- package/dist/src/update/executor.js +1 -1
- package/dist/src/update/rate-limiter.js +1 -1
- package/package.json +1 -1
|
@@ -45,7 +45,7 @@ const pretrainCommand = {
|
|
|
45
45
|
}
|
|
46
46
|
// Save to file if requested
|
|
47
47
|
if (saveFile) {
|
|
48
|
-
const resultsDir = join(process.cwd(), '
|
|
48
|
+
const resultsDir = join(process.cwd(), '.claude-flow', 'benchmarks');
|
|
49
49
|
if (!existsSync(resultsDir)) {
|
|
50
50
|
mkdirSync(resultsDir, { recursive: true });
|
|
51
51
|
}
|
|
@@ -404,7 +404,7 @@ const allCommand = {
|
|
|
404
404
|
// Save if requested
|
|
405
405
|
const saveFile = ctx.flags.save;
|
|
406
406
|
if (saveFile) {
|
|
407
|
-
const resultsDir = join(process.cwd(), '
|
|
407
|
+
const resultsDir = join(process.cwd(), '.claude-flow', 'benchmarks');
|
|
408
408
|
if (!existsSync(resultsDir)) {
|
|
409
409
|
mkdirSync(resultsDir, { recursive: true });
|
|
410
410
|
}
|
|
@@ -78,7 +78,7 @@ const checkCommand = {
|
|
|
78
78
|
try {
|
|
79
79
|
// Check for claims config file
|
|
80
80
|
const claimsConfigPaths = [
|
|
81
|
-
path.resolve('
|
|
81
|
+
path.resolve('.claude-flow/claims.json'),
|
|
82
82
|
path.resolve('@sparkleideas/claude-flow.claims.json'),
|
|
83
83
|
path.resolve(process.env.HOME || '~', '.config/claude-flow/claims.json'),
|
|
84
84
|
];
|
|
@@ -70,7 +70,7 @@ const initCommand = {
|
|
|
70
70
|
]
|
|
71
71
|
};
|
|
72
72
|
output.writeln(output.dim(' Creating @sparkleideas/claude-flow.config.json...'));
|
|
73
|
-
output.writeln(output.dim(' Creating
|
|
73
|
+
output.writeln(output.dim(' Creating .claude-flow/ directory...'));
|
|
74
74
|
if (sparc) {
|
|
75
75
|
output.writeln(output.dim(' Initializing SPARC methodology...'));
|
|
76
76
|
output.writeln(output.dim(' Creating SPARC workflow files...'));
|
|
@@ -47,7 +47,7 @@ const startCommand = {
|
|
|
47
47
|
}
|
|
48
48
|
// Foreground mode: run in current process (blocks terminal)
|
|
49
49
|
try {
|
|
50
|
-
const stateDir = join(projectRoot, '
|
|
50
|
+
const stateDir = join(projectRoot, '.claude-flow');
|
|
51
51
|
const pidFile = join(stateDir, 'daemon.pid');
|
|
52
52
|
// Ensure state directory exists
|
|
53
53
|
if (!fs.existsSync(stateDir)) {
|
|
@@ -146,7 +146,7 @@ function validatePath(path, label) {
|
|
|
146
146
|
throw new Error(`${label} contains shell metacharacters`);
|
|
147
147
|
}
|
|
148
148
|
// Prevent path traversal outside expected directories
|
|
149
|
-
if (!resolved.includes('
|
|
149
|
+
if (!resolved.includes('.claude-flow') && !resolved.includes('bin')) {
|
|
150
150
|
// Allow only paths within project structure
|
|
151
151
|
const cwd = process.cwd();
|
|
152
152
|
if (!resolved.startsWith(cwd)) {
|
|
@@ -161,7 +161,7 @@ async function startBackgroundDaemon(projectRoot, quiet) {
|
|
|
161
161
|
// Validate and resolve project root
|
|
162
162
|
const resolvedRoot = resolve(projectRoot);
|
|
163
163
|
validatePath(resolvedRoot, 'Project root');
|
|
164
|
-
const stateDir = join(resolvedRoot, '
|
|
164
|
+
const stateDir = join(resolvedRoot, '.claude-flow');
|
|
165
165
|
const pidFile = join(stateDir, 'daemon.pid');
|
|
166
166
|
const logFile = join(stateDir, 'daemon.log');
|
|
167
167
|
// Validate all paths
|
|
@@ -262,7 +262,7 @@ const stopCommand = {
|
|
|
262
262
|
* Kill background daemon process using PID file
|
|
263
263
|
*/
|
|
264
264
|
async function killBackgroundDaemon(projectRoot) {
|
|
265
|
-
const pidFile = join(projectRoot, '
|
|
265
|
+
const pidFile = join(projectRoot, '.claude-flow', 'daemon.pid');
|
|
266
266
|
if (!fs.existsSync(pidFile)) {
|
|
267
267
|
return false;
|
|
268
268
|
}
|
|
@@ -311,7 +311,7 @@ async function killBackgroundDaemon(projectRoot) {
|
|
|
311
311
|
* Get PID of background daemon from PID file
|
|
312
312
|
*/
|
|
313
313
|
function getBackgroundDaemonPid(projectRoot) {
|
|
314
|
-
const pidFile = join(projectRoot, '
|
|
314
|
+
const pidFile = join(projectRoot, '.claude-flow', 'daemon.pid');
|
|
315
315
|
if (!fs.existsSync(pidFile)) {
|
|
316
316
|
return null;
|
|
317
317
|
}
|
|
@@ -52,7 +52,7 @@ const deployCommand = {
|
|
|
52
52
|
`Version: ${version}`,
|
|
53
53
|
`Status: ${output.success('Deployed')}`,
|
|
54
54
|
``,
|
|
55
|
-
`URL: https://${env === 'prod' ? 'api' : env}
|
|
55
|
+
`URL: https://${env === 'prod' ? 'api' : env}.claude-flow.io`,
|
|
56
56
|
`Deployed at: ${new Date().toISOString()}`,
|
|
57
57
|
`Duration: 12.4s`,
|
|
58
58
|
].join('\n'), 'Deployment Complete');
|
|
@@ -197,10 +197,10 @@ const environmentsCommand = {
|
|
|
197
197
|
{ key: 'protected', header: 'Protected', width: 12 },
|
|
198
198
|
],
|
|
199
199
|
data: [
|
|
200
|
-
{ name: 'production', url: 'https://api
|
|
201
|
-
{ name: 'staging', url: 'https://staging
|
|
202
|
-
{ name: 'development', url: 'https://dev
|
|
203
|
-
{ name: 'preview/*', url: 'https://pr
|
|
200
|
+
{ name: 'production', url: 'https://api.claude-flow.io', auto: output.error('No'), protected: output.success('Yes') },
|
|
201
|
+
{ name: 'staging', url: 'https://staging.claude-flow.io', auto: output.success('Yes'), protected: output.error('No') },
|
|
202
|
+
{ name: 'development', url: 'https://dev.claude-flow.io', auto: output.success('Yes'), protected: output.error('No') },
|
|
203
|
+
{ name: 'preview/*', url: 'https://pr-*.claude-flow.io', auto: output.success('Yes'), protected: output.error('No') },
|
|
204
204
|
],
|
|
205
205
|
});
|
|
206
206
|
return { success: true };
|
|
@@ -60,9 +60,9 @@ async function checkNpmVersion() {
|
|
|
60
60
|
// Check config file
|
|
61
61
|
async function checkConfigFile() {
|
|
62
62
|
const configPaths = [
|
|
63
|
-
'
|
|
63
|
+
'.claude-flow/config.json',
|
|
64
64
|
'@sparkleideas/claude-flow.config.json',
|
|
65
|
-
'
|
|
65
|
+
'.claude-flow.json'
|
|
66
66
|
];
|
|
67
67
|
for (const configPath of configPaths) {
|
|
68
68
|
if (existsSync(configPath)) {
|
|
@@ -81,7 +81,7 @@ async function checkConfigFile() {
|
|
|
81
81
|
// Check daemon status
|
|
82
82
|
async function checkDaemonStatus() {
|
|
83
83
|
try {
|
|
84
|
-
const pidFile = '
|
|
84
|
+
const pidFile = '.claude-flow/daemon.pid';
|
|
85
85
|
if (existsSync(pidFile)) {
|
|
86
86
|
const pid = readFileSync(pidFile, 'utf8').trim();
|
|
87
87
|
try {
|
|
@@ -89,7 +89,7 @@ async function checkDaemonStatus() {
|
|
|
89
89
|
return { name: 'Daemon Status', status: 'pass', message: `Running (PID: ${pid})` };
|
|
90
90
|
}
|
|
91
91
|
catch {
|
|
92
|
-
return { name: 'Daemon Status', status: 'warn', message: 'Stale PID file', fix: 'rm
|
|
92
|
+
return { name: 'Daemon Status', status: 'warn', message: 'Stale PID file', fix: 'rm .claude-flow/daemon.pid && @sparkleideas/claude-flow daemon start' };
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
95
|
return { name: 'Daemon Status', status: 'warn', message: 'Not running', fix: '@sparkleideas/claude-flow daemon start' };
|
|
@@ -101,7 +101,7 @@ async function checkDaemonStatus() {
|
|
|
101
101
|
// Check memory database
|
|
102
102
|
async function checkMemoryDatabase() {
|
|
103
103
|
const dbPaths = [
|
|
104
|
-
'
|
|
104
|
+
'.claude-flow/memory.db',
|
|
105
105
|
'.swarm/memory.db',
|
|
106
106
|
'data/memory.db'
|
|
107
107
|
];
|
|
@@ -605,7 +605,7 @@ const initCommand = {
|
|
|
605
605
|
const fs = await import('fs');
|
|
606
606
|
const path = await import('path');
|
|
607
607
|
// Create directories
|
|
608
|
-
const configDir = path.join(process.cwd(), '
|
|
608
|
+
const configDir = path.join(process.cwd(), '.claude-flow');
|
|
609
609
|
const modelDir = path.join(configDir, 'models');
|
|
610
610
|
const configPath = path.join(configDir, 'embeddings.json');
|
|
611
611
|
// Check for existing config
|
|
@@ -969,7 +969,7 @@ const neuralCommand = {
|
|
|
969
969
|
// Check if embeddings config exists
|
|
970
970
|
const fs = await import('fs');
|
|
971
971
|
const path = await import('path');
|
|
972
|
-
const configPath = path.join(process.cwd(), '
|
|
972
|
+
const configPath = path.join(process.cwd(), '.claude-flow', 'embeddings.json');
|
|
973
973
|
if (!fs.existsSync(configPath)) {
|
|
974
974
|
output.printWarning('Embeddings not initialized');
|
|
975
975
|
output.printInfo('Run "embeddings init" first to configure ONNX model');
|
|
@@ -1082,7 +1082,7 @@ const neuralCommand = {
|
|
|
1082
1082
|
output.printInfo('Run with --init to enable neural substrate');
|
|
1083
1083
|
}
|
|
1084
1084
|
else {
|
|
1085
|
-
output.writeln(output.dim('Configuration:
|
|
1085
|
+
output.writeln(output.dim('Configuration: .claude-flow/embeddings.json'));
|
|
1086
1086
|
output.writeln(output.dim('Next: Use "hooks pretrain" to train patterns'));
|
|
1087
1087
|
}
|
|
1088
1088
|
return { success: true, data: { config: neuralConfig, feature } };
|
|
@@ -268,7 +268,7 @@ const statusCommand = {
|
|
|
268
268
|
const statusData = {
|
|
269
269
|
rootGuidance: rootExists ? 'found' : 'not found',
|
|
270
270
|
localOverlay: localExists ? 'found' : 'not configured',
|
|
271
|
-
dataDir: existsSync('
|
|
271
|
+
dataDir: existsSync('./.claude-flow/guidance') ? 'exists' : 'not created',
|
|
272
272
|
};
|
|
273
273
|
if (jsonOutput) {
|
|
274
274
|
output.writeln(JSON.stringify(statusData, null, 2));
|
|
@@ -2492,7 +2492,7 @@ const progressHookCommand = {
|
|
|
2492
2492
|
}
|
|
2493
2493
|
output.writeln();
|
|
2494
2494
|
output.printSuccess(`Progress synced: ${result.progress}%`);
|
|
2495
|
-
output.writeln(output.dim(` Persisted to
|
|
2495
|
+
output.writeln(output.dim(` Persisted to .claude-flow/metrics/v3-progress.json`));
|
|
2496
2496
|
output.writeln(output.dim(` Last updated: ${result.lastUpdated}`));
|
|
2497
2497
|
return { success: true, data: result };
|
|
2498
2498
|
}
|
|
@@ -2749,8 +2749,8 @@ const statuslineCommand = {
|
|
|
2749
2749
|
let intelligencePct = 0;
|
|
2750
2750
|
// 1. Check learning.json for REAL intelligence metrics first
|
|
2751
2751
|
const learningJsonPaths = [
|
|
2752
|
-
path.join(process.cwd(), '
|
|
2753
|
-
path.join(process.cwd(), '.claude', '
|
|
2752
|
+
path.join(process.cwd(), '.claude-flow', 'learning.json'),
|
|
2753
|
+
path.join(process.cwd(), '.claude', '.claude-flow', 'learning.json'),
|
|
2754
2754
|
path.join(process.cwd(), '.swarm', 'learning.json'),
|
|
2755
2755
|
];
|
|
2756
2756
|
for (const lPath of learningJsonPaths) {
|
|
@@ -2777,7 +2777,7 @@ const statuslineCommand = {
|
|
|
2777
2777
|
// Check for key project files/dirs
|
|
2778
2778
|
if (fs.existsSync(path.join(process.cwd(), '.claude')))
|
|
2779
2779
|
maturityScore += 15;
|
|
2780
|
-
if (fs.existsSync(path.join(process.cwd(), '
|
|
2780
|
+
if (fs.existsSync(path.join(process.cwd(), '.claude-flow')))
|
|
2781
2781
|
maturityScore += 15;
|
|
2782
2782
|
if (fs.existsSync(path.join(process.cwd(), 'CLAUDE.md')))
|
|
2783
2783
|
maturityScore += 10;
|
|
@@ -2893,12 +2893,12 @@ const statuslineCommand = {
|
|
|
2893
2893
|
// Check for direct database files first
|
|
2894
2894
|
const dbPaths = [
|
|
2895
2895
|
path.join(process.cwd(), '.swarm', 'memory.db'),
|
|
2896
|
-
path.join(process.cwd(), '
|
|
2896
|
+
path.join(process.cwd(), '.claude-flow', 'memory.db'),
|
|
2897
2897
|
path.join(process.cwd(), '.claude', 'memory.db'),
|
|
2898
2898
|
path.join(process.cwd(), 'data', 'memory.db'),
|
|
2899
2899
|
path.join(process.cwd(), 'memory.db'),
|
|
2900
|
-
path.join(process.cwd(), '
|
|
2901
|
-
path.join(process.cwd(), '
|
|
2900
|
+
path.join(process.cwd(), '.agentdb', 'memory.db'),
|
|
2901
|
+
path.join(process.cwd(), '.claude-flow', 'memory', '@sparkleideas/agentdb.db'),
|
|
2902
2902
|
];
|
|
2903
2903
|
for (const dbPath of dbPaths) {
|
|
2904
2904
|
if (fs.existsSync(dbPath)) {
|
|
@@ -2915,10 +2915,10 @@ const statuslineCommand = {
|
|
|
2915
2915
|
// Check for AgentDB directories if no direct db found
|
|
2916
2916
|
if (agentdbStats.vectorCount === 0) {
|
|
2917
2917
|
const agentdbDirs = [
|
|
2918
|
-
path.join(process.cwd(), '
|
|
2918
|
+
path.join(process.cwd(), '.claude-flow', '@sparkleideas/agentdb'),
|
|
2919
2919
|
path.join(process.cwd(), '.swarm', '@sparkleideas/agentdb'),
|
|
2920
2920
|
path.join(process.cwd(), 'data', '@sparkleideas/agentdb'),
|
|
2921
|
-
path.join(process.cwd(), '
|
|
2921
|
+
path.join(process.cwd(), '.agentdb'),
|
|
2922
2922
|
];
|
|
2923
2923
|
for (const dir of agentdbDirs) {
|
|
2924
2924
|
if (fs.existsSync(dir)) {
|
|
@@ -2942,7 +2942,7 @@ const statuslineCommand = {
|
|
|
2942
2942
|
}
|
|
2943
2943
|
// Check for HNSW index files
|
|
2944
2944
|
const hnswPaths = [
|
|
2945
|
-
path.join(process.cwd(), '
|
|
2945
|
+
path.join(process.cwd(), '.claude-flow', 'hnsw'),
|
|
2946
2946
|
path.join(process.cwd(), '.swarm', 'hnsw'),
|
|
2947
2947
|
path.join(process.cwd(), 'data', 'hnsw'),
|
|
2948
2948
|
];
|
|
@@ -2963,7 +2963,7 @@ const statuslineCommand = {
|
|
|
2963
2963
|
}
|
|
2964
2964
|
}
|
|
2965
2965
|
// Check for vectors.json file
|
|
2966
|
-
const vectorsPath = path.join(process.cwd(), '
|
|
2966
|
+
const vectorsPath = path.join(process.cwd(), '.claude-flow', 'vectors.json');
|
|
2967
2967
|
if (fs.existsSync(vectorsPath) && agentdbStats.vectorCount === 0) {
|
|
2968
2968
|
try {
|
|
2969
2969
|
const data = JSON.parse(fs.readFileSync(vectorsPath, 'utf-8'));
|
|
@@ -131,7 +131,7 @@ async function initCodexAction(ctx, options) {
|
|
|
131
131
|
// Check if project is already initialized
|
|
132
132
|
function isInitialized(cwd) {
|
|
133
133
|
const claudePath = path.join(cwd, '.claude', 'settings.json');
|
|
134
|
-
const claudeFlowPath = path.join(cwd, '
|
|
134
|
+
const claudeFlowPath = path.join(cwd, '.claude-flow', 'config.yaml');
|
|
135
135
|
return {
|
|
136
136
|
claude: fs.existsSync(claudePath),
|
|
137
137
|
claudeFlow: fs.existsSync(claudeFlowPath),
|
|
@@ -159,7 +159,7 @@ const initAction = async (ctx) => {
|
|
|
159
159
|
if (initialized.claude)
|
|
160
160
|
output.printInfo(' Found: .claude/settings.json');
|
|
161
161
|
if (initialized.claudeFlow)
|
|
162
|
-
output.printInfo(' Found:
|
|
162
|
+
output.printInfo(' Found: .claude-flow/config.yaml');
|
|
163
163
|
output.printInfo('Use --force to reinitialize');
|
|
164
164
|
if (ctx.interactive) {
|
|
165
165
|
const proceed = await confirm({
|
|
@@ -245,10 +245,10 @@ const initAction = async (ctx) => {
|
|
|
245
245
|
}
|
|
246
246
|
if (options.components.runtime) {
|
|
247
247
|
output.printBox([
|
|
248
|
-
`Config:
|
|
249
|
-
`Data:
|
|
250
|
-
`Logs:
|
|
251
|
-
`Sessions:
|
|
248
|
+
`Config: .claude-flow/config.yaml`,
|
|
249
|
+
`Data: .claude-flow/data/`,
|
|
250
|
+
`Logs: .claude-flow/logs/`,
|
|
251
|
+
`Sessions: .claude-flow/sessions/`,
|
|
252
252
|
].join('\n'), 'V3 Runtime');
|
|
253
253
|
output.writeln();
|
|
254
254
|
}
|
|
@@ -399,7 +399,7 @@ const wizardCommand = {
|
|
|
399
399
|
{ value: 'helpers', label: 'Helpers', hint: 'Utility scripts in .claude/helpers/', selected: true },
|
|
400
400
|
{ value: 'statusline', label: 'Statusline', hint: 'Shell statusline integration', selected: false },
|
|
401
401
|
{ value: 'mcp', label: 'MCP', hint: '.mcp.json for MCP server configuration', selected: true },
|
|
402
|
-
{ value: 'runtime', label: 'Runtime', hint: '
|
|
402
|
+
{ value: 'runtime', label: 'Runtime', hint: '.claude-flow/ directory for V3 runtime', selected: true },
|
|
403
403
|
],
|
|
404
404
|
});
|
|
405
405
|
options.components.claudeMd = components.includes('claudeMd');
|
|
@@ -424,7 +424,7 @@ const wizardCommand = {
|
|
|
424
424
|
],
|
|
425
425
|
});
|
|
426
426
|
options.skills.core = skillSets.includes('core');
|
|
427
|
-
options.skills
|
|
427
|
+
options.skills.agentdb = skillSets.includes('@sparkleideas/agentdb');
|
|
428
428
|
options.skills.github = skillSets.includes('github');
|
|
429
429
|
options.skills.flowNexus = skillSets.includes('flowNexus');
|
|
430
430
|
options.skills.v3 = skillSets.includes('v3');
|
|
@@ -604,7 +604,7 @@ const checkCommand = {
|
|
|
604
604
|
claudeFlow: initialized.claudeFlow,
|
|
605
605
|
paths: {
|
|
606
606
|
claudeSettings: initialized.claude ? path.join(ctx.cwd, '.claude', 'settings.json') : null,
|
|
607
|
-
claudeFlowConfig: initialized.claudeFlow ? path.join(ctx.cwd, '
|
|
607
|
+
claudeFlowConfig: initialized.claudeFlow ? path.join(ctx.cwd, '.claude-flow', 'config.yaml') : null,
|
|
608
608
|
},
|
|
609
609
|
};
|
|
610
610
|
if (ctx.flags.format === 'json') {
|
|
@@ -617,7 +617,7 @@ const checkCommand = {
|
|
|
617
617
|
output.printInfo(` Claude Code: .claude/settings.json`);
|
|
618
618
|
}
|
|
619
619
|
if (initialized.claudeFlow) {
|
|
620
|
-
output.printInfo(` V3 Runtime:
|
|
620
|
+
output.printInfo(` V3 Runtime: .claude-flow/config.yaml`);
|
|
621
621
|
}
|
|
622
622
|
}
|
|
623
623
|
else {
|
|
@@ -657,7 +657,7 @@ const skillsCommand = {
|
|
|
657
657
|
skills: {
|
|
658
658
|
all: ctx.flags.all,
|
|
659
659
|
core: ctx.flags.core,
|
|
660
|
-
@sparkleideas/agentdb: ctx.flags
|
|
660
|
+
@sparkleideas/agentdb: ctx.flags.agentdb,
|
|
661
661
|
github: ctx.flags.github,
|
|
662
662
|
flowNexus: false,
|
|
663
663
|
browser: false,
|
|
@@ -25,8 +25,8 @@ const statusCommand = {
|
|
|
25
25
|
migrationState: 'partial',
|
|
26
26
|
components: [
|
|
27
27
|
{ name: 'Configuration', status: 'migrated', v2Path: './claude-flow.json', v3Path: './claude-flow.config.json' },
|
|
28
|
-
{ name: 'Memory Data', status: 'pending', v2Path: '
|
|
29
|
-
{ name: 'Agent Configs', status: 'pending', v2Path: '
|
|
28
|
+
{ name: 'Memory Data', status: 'pending', v2Path: './.claude-flow/memory', v3Path: './data/memory' },
|
|
29
|
+
{ name: 'Agent Configs', status: 'pending', v2Path: './.claude-flow/agents', v3Path: './v3/agents' },
|
|
30
30
|
{ name: 'Hooks', status: 'pending', v2Path: './src/hooks', v3Path: './v3/hooks' },
|
|
31
31
|
{ name: 'Workflows', status: 'not-required', v2Path: 'N/A', v3Path: 'N/A' },
|
|
32
32
|
{ name: 'Embeddings', status: 'pending', v2Path: 'OpenAI/TF.js', v3Path: 'ONNX + Hyperbolic' }
|
|
@@ -295,7 +295,7 @@ const breakingCommand = {
|
|
|
295
295
|
changes: [
|
|
296
296
|
{ change: 'Backend option changed', from: 'memory: { type }', to: 'memory: { backend }' },
|
|
297
297
|
{ change: 'HNSW enabled by default', from: 'Manual opt-in', to: 'Auto-enabled' },
|
|
298
|
-
{ change: 'Storage path changed', from: '
|
|
298
|
+
{ change: 'Storage path changed', from: '.claude-flow/memory', to: 'data/memory' }
|
|
299
299
|
]
|
|
300
300
|
},
|
|
301
301
|
{
|
|
@@ -396,11 +396,11 @@ function formatMigrationStatus(status) {
|
|
|
396
396
|
function getMigrationSteps(target) {
|
|
397
397
|
const allSteps = [
|
|
398
398
|
{ name: 'Configuration Files', description: 'Migrate config schema to V3 format', source: './claude-flow.json', dest: './claude-flow.config.json' },
|
|
399
|
-
{ name: 'Memory Backend', description: 'Upgrade to hybrid backend with AgentDB', source: '
|
|
400
|
-
{ name: 'Agent Definitions', description: 'Convert agent configs to V3 format', source: '
|
|
399
|
+
{ name: 'Memory Backend', description: 'Upgrade to hybrid backend with AgentDB', source: './.claude-flow/memory', dest: './data/memory' },
|
|
400
|
+
{ name: 'Agent Definitions', description: 'Convert agent configs to V3 format', source: './.claude-flow/agents', dest: './v3/agents' },
|
|
401
401
|
{ name: 'Hook Registry', description: 'Migrate hooks to V3 hook system', source: './src/hooks', dest: './v3/hooks' },
|
|
402
|
-
{ name: 'Workflow Definitions', description: 'Convert workflows to event-sourced format', source: '
|
|
403
|
-
{ name: 'Embeddings System', description: 'Migrate to ONNX with hyperbolic (Poincaré ball)', source: 'OpenAI/TF.js embeddings', dest: '
|
|
402
|
+
{ name: 'Workflow Definitions', description: 'Convert workflows to event-sourced format', source: './.claude-flow/workflows', dest: './data/workflows' },
|
|
403
|
+
{ name: 'Embeddings System', description: 'Migrate to ONNX with hyperbolic (Poincaré ball)', source: 'OpenAI/TF.js embeddings', dest: '.claude-flow/embeddings.json' }
|
|
404
404
|
];
|
|
405
405
|
if (target === 'all')
|
|
406
406
|
return allSteps;
|
|
@@ -673,7 +673,7 @@ const optimizeCommand = {
|
|
|
673
673
|
const patterns = await getAllPatterns();
|
|
674
674
|
const stats = getIntelligenceStats();
|
|
675
675
|
// Get actual pattern storage size
|
|
676
|
-
const patternDir = path.join(process.cwd(), '
|
|
676
|
+
const patternDir = path.join(process.cwd(), '.claude-flow', 'neural');
|
|
677
677
|
let beforeSize = 0;
|
|
678
678
|
try {
|
|
679
679
|
const patternFile = path.join(patternDir, 'patterns.json');
|
|
@@ -849,7 +849,7 @@ const exportCommand = {
|
|
|
849
849
|
},
|
|
850
850
|
};
|
|
851
851
|
// Load patterns from local storage
|
|
852
|
-
const memoryDir = path.join(process.cwd(), '
|
|
852
|
+
const memoryDir = path.join(process.cwd(), '.claude-flow', 'memory');
|
|
853
853
|
const patternsFile = path.join(memoryDir, 'patterns.json');
|
|
854
854
|
if (fs.existsSync(patternsFile)) {
|
|
855
855
|
const patterns = JSON.parse(fs.readFileSync(patternsFile, 'utf8'));
|
|
@@ -1242,7 +1242,7 @@ const importCommand = {
|
|
|
1242
1242
|
output.writeln(output.warning(`Filtered ${patterns.length - validPatterns.length} suspicious patterns`));
|
|
1243
1243
|
}
|
|
1244
1244
|
// Save to local memory
|
|
1245
|
-
const memoryDir = path.join(process.cwd(), '
|
|
1245
|
+
const memoryDir = path.join(process.cwd(), '.claude-flow', 'memory');
|
|
1246
1246
|
if (!fs.existsSync(memoryDir)) {
|
|
1247
1247
|
fs.mkdirSync(memoryDir, { recursive: true });
|
|
1248
1248
|
}
|
|
@@ -62,13 +62,13 @@ const daemonCommand = {
|
|
|
62
62
|
name: 'pid-file',
|
|
63
63
|
type: 'string',
|
|
64
64
|
description: 'PID file location',
|
|
65
|
-
default: '
|
|
65
|
+
default: '.claude-flow/daemon.pid',
|
|
66
66
|
},
|
|
67
67
|
{
|
|
68
68
|
name: 'log-file',
|
|
69
69
|
type: 'string',
|
|
70
70
|
description: 'Log file location',
|
|
71
|
-
default: '
|
|
71
|
+
default: '.claude-flow/daemon.log',
|
|
72
72
|
},
|
|
73
73
|
{
|
|
74
74
|
name: 'detach',
|
|
@@ -86,8 +86,8 @@ const daemonCommand = {
|
|
|
86
86
|
action: async (ctx) => {
|
|
87
87
|
const action = ctx.flags?.action || 'status';
|
|
88
88
|
const port = ctx.flags?.port || 3847;
|
|
89
|
-
const pidFile = ctx.flags?.['pid-file'] || '
|
|
90
|
-
const logFile = ctx.flags?.['log-file'] || '
|
|
89
|
+
const pidFile = ctx.flags?.['pid-file'] || '.claude-flow/daemon.pid';
|
|
90
|
+
const logFile = ctx.flags?.['log-file'] || '.claude-flow/daemon.log';
|
|
91
91
|
const detach = ctx.flags?.detach !== false;
|
|
92
92
|
// Check existing daemon state from PID file
|
|
93
93
|
const existingDaemon = readPidFile(pidFile);
|
|
@@ -93,7 +93,7 @@ const syncCommand = {
|
|
|
93
93
|
}
|
|
94
94
|
output.writeln();
|
|
95
95
|
output.printSuccess(`Progress synced: ${result.progress}%`);
|
|
96
|
-
output.writeln(output.dim(` Persisted to
|
|
96
|
+
output.writeln(output.dim(` Persisted to .claude-flow/metrics/v3-progress.json`));
|
|
97
97
|
output.writeln(output.dim(` Last updated: ${result.lastUpdated}`));
|
|
98
98
|
return { success: true, data: result };
|
|
99
99
|
}
|
|
@@ -13,7 +13,7 @@ const DEFAULT_TOPOLOGY = 'hierarchical-mesh';
|
|
|
13
13
|
const DEFAULT_MAX_AGENTS = 15;
|
|
14
14
|
// Check if project is initialized
|
|
15
15
|
function isInitialized(cwd) {
|
|
16
|
-
const configPath = path.join(cwd, '
|
|
16
|
+
const configPath = path.join(cwd, '.claude-flow', 'config.yaml');
|
|
17
17
|
return fs.existsSync(configPath);
|
|
18
18
|
}
|
|
19
19
|
// Simple YAML parser for config (basic implementation)
|
|
@@ -69,7 +69,7 @@ function parseSimpleYaml(content) {
|
|
|
69
69
|
}
|
|
70
70
|
// Load configuration
|
|
71
71
|
function loadConfig(cwd) {
|
|
72
|
-
const configPath = path.join(cwd, '
|
|
72
|
+
const configPath = path.join(cwd, '.claude-flow', 'config.yaml');
|
|
73
73
|
if (!fs.existsSync(configPath))
|
|
74
74
|
return null;
|
|
75
75
|
try {
|
|
@@ -175,7 +175,7 @@ const startAction = async (ctx) => {
|
|
|
175
175
|
output.writeln();
|
|
176
176
|
output.printInfo('Running in daemon mode. Use "@sparkleideas/claude-flow stop" to stop.');
|
|
177
177
|
// Store PID for daemon management
|
|
178
|
-
const daemonPidPath = path.join(cwd, '
|
|
178
|
+
const daemonPidPath = path.join(cwd, '.claude-flow', 'daemon.pid');
|
|
179
179
|
fs.writeFileSync(daemonPidPath, String(process.pid));
|
|
180
180
|
// Detach from parent process for true daemon behavior
|
|
181
181
|
if (process.platform !== 'win32') {
|
|
@@ -289,7 +289,7 @@ const stopCommand = {
|
|
|
289
289
|
spinner.fail('Swarm was not running');
|
|
290
290
|
}
|
|
291
291
|
// Clean up daemon PID
|
|
292
|
-
const daemonPidPath = path.join(ctx.cwd, '
|
|
292
|
+
const daemonPidPath = path.join(ctx.cwd, '.claude-flow', 'daemon.pid');
|
|
293
293
|
if (fs.existsSync(daemonPidPath)) {
|
|
294
294
|
fs.unlinkSync(daemonPidPath);
|
|
295
295
|
}
|
|
@@ -34,7 +34,7 @@ function getProcessMemoryUsage() {
|
|
|
34
34
|
}
|
|
35
35
|
// Check if project is initialized
|
|
36
36
|
function isInitialized(cwd) {
|
|
37
|
-
const configPath = path.join(cwd, '
|
|
37
|
+
const configPath = path.join(cwd, '.claude-flow', 'config.yaml');
|
|
38
38
|
return fs.existsSync(configPath);
|
|
39
39
|
}
|
|
40
40
|
// Format uptime
|
|
@@ -30,8 +30,8 @@ export function systemConfigToV3Config(systemConfig) {
|
|
|
30
30
|
backend: normalizeMemoryBackend(systemConfig.memory?.type),
|
|
31
31
|
persistPath: systemConfig.memory?.path || './data/memory',
|
|
32
32
|
cacheSize: systemConfig.memory?.maxSize ?? 1000000,
|
|
33
|
-
enableHNSW: systemConfig.memory
|
|
34
|
-
vectorDimension: systemConfig.memory
|
|
33
|
+
enableHNSW: systemConfig.memory?.agentdb?.indexType === 'hnsw',
|
|
34
|
+
vectorDimension: systemConfig.memory?.agentdb?.dimensions ?? 1536,
|
|
35
35
|
},
|
|
36
36
|
// MCP configuration
|
|
37
37
|
mcp: {
|