@claude-flow/cli 3.0.0-alpha.13 → 3.0.0-alpha.15

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 (106) hide show
  1. package/dist/src/commands/doctor.d.ts.map +1 -1
  2. package/dist/src/commands/doctor.js +75 -2
  3. package/dist/src/commands/doctor.js.map +1 -1
  4. package/dist/tsconfig.tsbuildinfo +1 -1
  5. package/package.json +12 -4
  6. package/.agentic-flow/intelligence.json +0 -17
  7. package/.claude-flow/agents/store.json +0 -16
  8. package/.claude-flow/daemon-state.json +0 -123
  9. package/.claude-flow/daemon-test.log +0 -0
  10. package/.claude-flow/daemon.log +0 -0
  11. package/.claude-flow/daemon2.log +0 -0
  12. package/.claude-flow/daemon3.log +0 -0
  13. package/.claude-flow/hive-mind/state.json +0 -51
  14. package/.claude-flow/metrics/agent-metrics.json +0 -1
  15. package/.claude-flow/metrics/codebase-map.json +0 -11
  16. package/.claude-flow/metrics/consolidation.json +0 -6
  17. package/.claude-flow/metrics/performance.json +0 -87
  18. package/.claude-flow/metrics/security-audit.json +0 -10
  19. package/.claude-flow/metrics/task-metrics.json +0 -10
  20. package/.claude-flow/metrics/test-gaps.json +0 -6
  21. package/__tests__/README.md +0 -140
  22. package/__tests__/TEST_SUMMARY.md +0 -144
  23. package/__tests__/cli.test.ts +0 -558
  24. package/__tests__/commands.test.ts +0 -726
  25. package/__tests__/config-adapter.test.ts +0 -362
  26. package/__tests__/config-loading.test.ts +0 -106
  27. package/__tests__/coverage/.tmp/coverage-0.json +0 -1
  28. package/__tests__/coverage/.tmp/coverage-1.json +0 -1
  29. package/__tests__/coverage/.tmp/coverage-2.json +0 -1
  30. package/__tests__/coverage/.tmp/coverage-3.json +0 -1
  31. package/__tests__/coverage/.tmp/coverage-4.json +0 -1
  32. package/__tests__/coverage/.tmp/coverage-5.json +0 -1
  33. package/__tests__/mcp-client.test.ts +0 -480
  34. package/__tests__/p1-commands.test.ts +0 -1064
  35. package/agents/architect.yaml +0 -11
  36. package/agents/coder.yaml +0 -11
  37. package/agents/reviewer.yaml +0 -10
  38. package/agents/security-architect.yaml +0 -10
  39. package/agents/tester.yaml +0 -10
  40. package/docs/CONFIG_LOADING.md +0 -236
  41. package/docs/IMPLEMENTATION_COMPLETE.md +0 -421
  42. package/docs/MCP_CLIENT_GUIDE.md +0 -620
  43. package/docs/REFACTORING_SUMMARY.md +0 -247
  44. package/scripts/publish.sh +0 -46
  45. package/src/commands/agent.ts +0 -955
  46. package/src/commands/claims.ts +0 -317
  47. package/src/commands/completions.ts +0 -558
  48. package/src/commands/config.ts +0 -452
  49. package/src/commands/daemon.ts +0 -621
  50. package/src/commands/deployment.ts +0 -323
  51. package/src/commands/doctor.ts +0 -382
  52. package/src/commands/embeddings.ts +0 -686
  53. package/src/commands/hive-mind.ts +0 -928
  54. package/src/commands/hooks.ts +0 -2603
  55. package/src/commands/index.ts +0 -154
  56. package/src/commands/init.ts +0 -597
  57. package/src/commands/mcp.ts +0 -753
  58. package/src/commands/memory.ts +0 -1161
  59. package/src/commands/migrate.ts +0 -447
  60. package/src/commands/neural.ts +0 -253
  61. package/src/commands/performance.ts +0 -292
  62. package/src/commands/plugins.ts +0 -316
  63. package/src/commands/process.ts +0 -695
  64. package/src/commands/providers.ts +0 -259
  65. package/src/commands/security.ts +0 -288
  66. package/src/commands/session.ts +0 -891
  67. package/src/commands/start.ts +0 -457
  68. package/src/commands/status.ts +0 -736
  69. package/src/commands/swarm.ts +0 -648
  70. package/src/commands/task.ts +0 -792
  71. package/src/commands/workflow.ts +0 -742
  72. package/src/config-adapter.ts +0 -210
  73. package/src/index.ts +0 -443
  74. package/src/infrastructure/in-memory-repositories.ts +0 -310
  75. package/src/init/claudemd-generator.ts +0 -631
  76. package/src/init/executor.ts +0 -762
  77. package/src/init/helpers-generator.ts +0 -628
  78. package/src/init/index.ts +0 -60
  79. package/src/init/mcp-generator.ts +0 -83
  80. package/src/init/settings-generator.ts +0 -284
  81. package/src/init/statusline-generator.ts +0 -211
  82. package/src/init/types.ts +0 -447
  83. package/src/mcp-client.ts +0 -241
  84. package/src/mcp-server.ts +0 -577
  85. package/src/mcp-tools/agent-tools.ts +0 -466
  86. package/src/mcp-tools/config-tools.ts +0 -370
  87. package/src/mcp-tools/hive-mind-tools.ts +0 -521
  88. package/src/mcp-tools/hooks-tools.ts +0 -1888
  89. package/src/mcp-tools/index.ts +0 -16
  90. package/src/mcp-tools/memory-tools.ts +0 -270
  91. package/src/mcp-tools/session-tools.ts +0 -359
  92. package/src/mcp-tools/swarm-tools.ts +0 -105
  93. package/src/mcp-tools/task-tools.ts +0 -347
  94. package/src/mcp-tools/types.ts +0 -33
  95. package/src/mcp-tools/workflow-tools.ts +0 -573
  96. package/src/output.ts +0 -639
  97. package/src/parser.ts +0 -417
  98. package/src/prompt.ts +0 -619
  99. package/src/services/index.ts +0 -15
  100. package/src/services/worker-daemon.ts +0 -726
  101. package/src/suggest.ts +0 -245
  102. package/src/types.ts +0 -287
  103. package/tmp.json +0 -0
  104. package/tsconfig.json +0 -16
  105. package/tsconfig.tsbuildinfo +0 -1
  106. package/vitest.config.ts +0 -13
@@ -1,628 +0,0 @@
1
- /**
2
- * Helpers Generator
3
- * Creates utility scripts in .claude/helpers/
4
- */
5
-
6
- import type { InitOptions } from './types.js';
7
- import { generateStatuslineScript, generateStatuslineHook } from './statusline-generator.js';
8
-
9
- /**
10
- * Generate pre-commit hook script
11
- */
12
- export function generatePreCommitHook(): string {
13
- return `#!/bin/bash
14
- # Claude Flow Pre-Commit Hook
15
- # Validates code quality before commit
16
-
17
- set -e
18
-
19
- echo "🔍 Running Claude Flow pre-commit checks..."
20
-
21
- # Get staged files
22
- STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM)
23
-
24
- # Run validation for each staged file
25
- for FILE in $STAGED_FILES; do
26
- if [[ "$FILE" =~ \\.(ts|js|tsx|jsx)$ ]]; then
27
- echo " Validating: $FILE"
28
- npx @claude-flow/cli hooks pre-edit --file "$FILE" --validate-syntax 2>/dev/null || true
29
- fi
30
- done
31
-
32
- # Run tests if available
33
- if [ -f "package.json" ] && grep -q '"test"' package.json; then
34
- echo "🧪 Running tests..."
35
- npm test --if-present 2>/dev/null || echo " Tests skipped or failed"
36
- fi
37
-
38
- echo "✅ Pre-commit checks complete"
39
- `;
40
- }
41
-
42
- /**
43
- * Generate post-commit hook script
44
- */
45
- export function generatePostCommitHook(): string {
46
- return `#!/bin/bash
47
- # Claude Flow Post-Commit Hook
48
- # Records commit metrics and trains patterns
49
-
50
- COMMIT_HASH=$(git rev-parse HEAD)
51
- COMMIT_MSG=$(git log -1 --pretty=%B)
52
-
53
- echo "📊 Recording commit metrics..."
54
-
55
- # Notify claude-flow of commit
56
- npx @claude-flow/cli hooks notify \\
57
- --message "Commit: $COMMIT_MSG" \\
58
- --level info \\
59
- --metadata '{"hash": "'$COMMIT_HASH'"}' 2>/dev/null || true
60
-
61
- echo "✅ Commit recorded"
62
- `;
63
- }
64
-
65
- /**
66
- * Generate session manager script
67
- */
68
- export function generateSessionManager(): string {
69
- return `#!/usr/bin/env node
70
- /**
71
- * Claude Flow Session Manager
72
- * Handles session lifecycle: start, restore, end
73
- */
74
-
75
- const fs = require('fs');
76
- const path = require('path');
77
-
78
- const SESSION_DIR = path.join(process.cwd(), '.claude-flow', 'sessions');
79
- const SESSION_FILE = path.join(SESSION_DIR, 'current.json');
80
-
81
- const commands = {
82
- start: () => {
83
- const sessionId = \`session-\${Date.now()}\`;
84
- const session = {
85
- id: sessionId,
86
- startedAt: new Date().toISOString(),
87
- cwd: process.cwd(),
88
- context: {},
89
- metrics: {
90
- edits: 0,
91
- commands: 0,
92
- tasks: 0,
93
- errors: 0,
94
- },
95
- };
96
-
97
- fs.mkdirSync(SESSION_DIR, { recursive: true });
98
- fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));
99
-
100
- console.log(\`Session started: \${sessionId}\`);
101
- return session;
102
- },
103
-
104
- restore: () => {
105
- if (!fs.existsSync(SESSION_FILE)) {
106
- console.log('No session to restore');
107
- return null;
108
- }
109
-
110
- const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
111
- session.restoredAt = new Date().toISOString();
112
- fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));
113
-
114
- console.log(\`Session restored: \${session.id}\`);
115
- return session;
116
- },
117
-
118
- end: () => {
119
- if (!fs.existsSync(SESSION_FILE)) {
120
- console.log('No active session');
121
- return null;
122
- }
123
-
124
- const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
125
- session.endedAt = new Date().toISOString();
126
- session.duration = Date.now() - new Date(session.startedAt).getTime();
127
-
128
- // Archive session
129
- const archivePath = path.join(SESSION_DIR, \`\${session.id}.json\`);
130
- fs.writeFileSync(archivePath, JSON.stringify(session, null, 2));
131
- fs.unlinkSync(SESSION_FILE);
132
-
133
- console.log(\`Session ended: \${session.id}\`);
134
- console.log(\`Duration: \${Math.round(session.duration / 1000 / 60)} minutes\`);
135
- console.log(\`Metrics: \${JSON.stringify(session.metrics)}\`);
136
-
137
- return session;
138
- },
139
-
140
- status: () => {
141
- if (!fs.existsSync(SESSION_FILE)) {
142
- console.log('No active session');
143
- return null;
144
- }
145
-
146
- const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
147
- const duration = Date.now() - new Date(session.startedAt).getTime();
148
-
149
- console.log(\`Session: \${session.id}\`);
150
- console.log(\`Started: \${session.startedAt}\`);
151
- console.log(\`Duration: \${Math.round(duration / 1000 / 60)} minutes\`);
152
- console.log(\`Metrics: \${JSON.stringify(session.metrics)}\`);
153
-
154
- return session;
155
- },
156
-
157
- update: (key, value) => {
158
- if (!fs.existsSync(SESSION_FILE)) {
159
- console.log('No active session');
160
- return null;
161
- }
162
-
163
- const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
164
- session.context[key] = value;
165
- session.updatedAt = new Date().toISOString();
166
- fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));
167
-
168
- return session;
169
- },
170
-
171
- metric: (name) => {
172
- if (!fs.existsSync(SESSION_FILE)) {
173
- return null;
174
- }
175
-
176
- const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
177
- if (session.metrics[name] !== undefined) {
178
- session.metrics[name]++;
179
- fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));
180
- }
181
-
182
- return session;
183
- },
184
- };
185
-
186
- // CLI
187
- const [,, command, ...args] = process.argv;
188
-
189
- if (command && commands[command]) {
190
- commands[command](...args);
191
- } else {
192
- console.log('Usage: session.js <start|restore|end|status|update|metric> [args]');
193
- }
194
-
195
- module.exports = commands;
196
- `;
197
- }
198
-
199
- /**
200
- * Generate agent router script
201
- */
202
- export function generateAgentRouter(): string {
203
- return `#!/usr/bin/env node
204
- /**
205
- * Claude Flow Agent Router
206
- * Routes tasks to optimal agents based on learned patterns
207
- */
208
-
209
- const AGENT_CAPABILITIES = {
210
- coder: ['code-generation', 'refactoring', 'debugging', 'implementation'],
211
- tester: ['unit-testing', 'integration-testing', 'coverage', 'test-generation'],
212
- reviewer: ['code-review', 'security-audit', 'quality-check', 'best-practices'],
213
- researcher: ['web-search', 'documentation', 'analysis', 'summarization'],
214
- architect: ['system-design', 'architecture', 'patterns', 'scalability'],
215
- 'backend-dev': ['api', 'database', 'server', 'authentication'],
216
- 'frontend-dev': ['ui', 'react', 'css', 'components'],
217
- devops: ['ci-cd', 'docker', 'deployment', 'infrastructure'],
218
- };
219
-
220
- const TASK_PATTERNS = {
221
- // Code patterns
222
- 'implement|create|build|add|write code': 'coder',
223
- 'test|spec|coverage|unit test|integration': 'tester',
224
- 'review|audit|check|validate|security': 'reviewer',
225
- 'research|find|search|documentation|explore': 'researcher',
226
- 'design|architect|structure|plan': 'architect',
227
-
228
- // Domain patterns
229
- 'api|endpoint|server|backend|database': 'backend-dev',
230
- 'ui|frontend|component|react|css|style': 'frontend-dev',
231
- 'deploy|docker|ci|cd|pipeline|infrastructure': 'devops',
232
- };
233
-
234
- function routeTask(task) {
235
- const taskLower = task.toLowerCase();
236
-
237
- // Check patterns
238
- for (const [pattern, agent] of Object.entries(TASK_PATTERNS)) {
239
- const regex = new RegExp(pattern, 'i');
240
- if (regex.test(taskLower)) {
241
- return {
242
- agent,
243
- confidence: 0.8,
244
- reason: \`Matched pattern: \${pattern}\`,
245
- };
246
- }
247
- }
248
-
249
- // Default to coder for unknown tasks
250
- return {
251
- agent: 'coder',
252
- confidence: 0.5,
253
- reason: 'Default routing - no specific pattern matched',
254
- };
255
- }
256
-
257
- // CLI
258
- const task = process.argv.slice(2).join(' ');
259
-
260
- if (task) {
261
- const result = routeTask(task);
262
- console.log(JSON.stringify(result, null, 2));
263
- } else {
264
- console.log('Usage: router.js <task description>');
265
- console.log('\\nAvailable agents:', Object.keys(AGENT_CAPABILITIES).join(', '));
266
- }
267
-
268
- module.exports = { routeTask, AGENT_CAPABILITIES, TASK_PATTERNS };
269
- `;
270
- }
271
-
272
- /**
273
- * Generate memory helper script
274
- */
275
- export function generateMemoryHelper(): string {
276
- return `#!/usr/bin/env node
277
- /**
278
- * Claude Flow Memory Helper
279
- * Simple key-value memory for cross-session context
280
- */
281
-
282
- const fs = require('fs');
283
- const path = require('path');
284
-
285
- const MEMORY_DIR = path.join(process.cwd(), '.claude-flow', 'data');
286
- const MEMORY_FILE = path.join(MEMORY_DIR, 'memory.json');
287
-
288
- function loadMemory() {
289
- try {
290
- if (fs.existsSync(MEMORY_FILE)) {
291
- return JSON.parse(fs.readFileSync(MEMORY_FILE, 'utf-8'));
292
- }
293
- } catch (e) {
294
- // Ignore
295
- }
296
- return {};
297
- }
298
-
299
- function saveMemory(memory) {
300
- fs.mkdirSync(MEMORY_DIR, { recursive: true });
301
- fs.writeFileSync(MEMORY_FILE, JSON.stringify(memory, null, 2));
302
- }
303
-
304
- const commands = {
305
- get: (key) => {
306
- const memory = loadMemory();
307
- const value = key ? memory[key] : memory;
308
- console.log(JSON.stringify(value, null, 2));
309
- return value;
310
- },
311
-
312
- set: (key, value) => {
313
- if (!key) {
314
- console.error('Key required');
315
- return;
316
- }
317
- const memory = loadMemory();
318
- memory[key] = value;
319
- memory._updated = new Date().toISOString();
320
- saveMemory(memory);
321
- console.log(\`Set: \${key}\`);
322
- },
323
-
324
- delete: (key) => {
325
- if (!key) {
326
- console.error('Key required');
327
- return;
328
- }
329
- const memory = loadMemory();
330
- delete memory[key];
331
- saveMemory(memory);
332
- console.log(\`Deleted: \${key}\`);
333
- },
334
-
335
- clear: () => {
336
- saveMemory({});
337
- console.log('Memory cleared');
338
- },
339
-
340
- keys: () => {
341
- const memory = loadMemory();
342
- const keys = Object.keys(memory).filter(k => !k.startsWith('_'));
343
- console.log(keys.join('\\n'));
344
- return keys;
345
- },
346
- };
347
-
348
- // CLI
349
- const [,, command, key, ...valueParts] = process.argv;
350
- const value = valueParts.join(' ');
351
-
352
- if (command && commands[command]) {
353
- commands[command](key, value);
354
- } else {
355
- console.log('Usage: memory.js <get|set|delete|clear|keys> [key] [value]');
356
- }
357
-
358
- module.exports = commands;
359
- `;
360
- }
361
-
362
- /**
363
- * Generate Windows PowerShell daemon manager
364
- */
365
- export function generateWindowsDaemonManager(): string {
366
- return `# Claude Flow V3 Daemon Manager for Windows
367
- # PowerShell script for managing background processes
368
-
369
- param(
370
- [Parameter(Position=0)]
371
- [ValidateSet('start', 'stop', 'status', 'restart')]
372
- [string]$Action = 'status'
373
- )
374
-
375
- $ErrorActionPreference = 'SilentlyContinue'
376
- $ClaudeFlowDir = Join-Path $PWD '.claude-flow'
377
- $PidDir = Join-Path $ClaudeFlowDir 'pids'
378
-
379
- # Ensure directories exist
380
- if (-not (Test-Path $PidDir)) {
381
- New-Item -ItemType Directory -Path $PidDir -Force | Out-Null
382
- }
383
-
384
- function Get-DaemonStatus {
385
- param([string]$Name, [string]$PidFile)
386
-
387
- if (Test-Path $PidFile) {
388
- $pid = Get-Content $PidFile
389
- $process = Get-Process -Id $pid -ErrorAction SilentlyContinue
390
- if ($process) {
391
- return @{ Running = $true; Pid = $pid }
392
- }
393
- }
394
- return @{ Running = $false; Pid = $null }
395
- }
396
-
397
- function Start-SwarmMonitor {
398
- $pidFile = Join-Path $PidDir 'swarm-monitor.pid'
399
- $status = Get-DaemonStatus -Name 'swarm-monitor' -PidFile $pidFile
400
-
401
- if ($status.Running) {
402
- Write-Host "Swarm monitor already running (PID: $($status.Pid))" -ForegroundColor Yellow
403
- return
404
- }
405
-
406
- Write-Host "Starting swarm monitor..." -ForegroundColor Cyan
407
- $process = Start-Process -FilePath 'node' -ArgumentList @(
408
- '-e',
409
- 'setInterval(() => { require("fs").writeFileSync(".claude-flow/metrics/swarm-activity.json", JSON.stringify({swarm:{active:true,agent_count:0},timestamp:Date.now()})) }, 5000)'
410
- ) -PassThru -WindowStyle Hidden
411
-
412
- $process.Id | Out-File $pidFile
413
- Write-Host "Swarm monitor started (PID: $($process.Id))" -ForegroundColor Green
414
- }
415
-
416
- function Stop-SwarmMonitor {
417
- $pidFile = Join-Path $PidDir 'swarm-monitor.pid'
418
- $status = Get-DaemonStatus -Name 'swarm-monitor' -PidFile $pidFile
419
-
420
- if (-not $status.Running) {
421
- Write-Host "Swarm monitor not running" -ForegroundColor Yellow
422
- return
423
- }
424
-
425
- Stop-Process -Id $status.Pid -Force
426
- Remove-Item $pidFile -Force
427
- Write-Host "Swarm monitor stopped" -ForegroundColor Green
428
- }
429
-
430
- function Show-Status {
431
- Write-Host ""
432
- Write-Host "Claude Flow V3 Daemon Status" -ForegroundColor Cyan
433
- Write-Host "=============================" -ForegroundColor Cyan
434
-
435
- $swarmPid = Join-Path $PidDir 'swarm-monitor.pid'
436
- $swarmStatus = Get-DaemonStatus -Name 'swarm-monitor' -PidFile $swarmPid
437
-
438
- if ($swarmStatus.Running) {
439
- Write-Host " Swarm Monitor: RUNNING (PID: $($swarmStatus.Pid))" -ForegroundColor Green
440
- } else {
441
- Write-Host " Swarm Monitor: STOPPED" -ForegroundColor Red
442
- }
443
- Write-Host ""
444
- }
445
-
446
- switch ($Action) {
447
- 'start' {
448
- Start-SwarmMonitor
449
- Show-Status
450
- }
451
- 'stop' {
452
- Stop-SwarmMonitor
453
- Show-Status
454
- }
455
- 'restart' {
456
- Stop-SwarmMonitor
457
- Start-Sleep -Seconds 1
458
- Start-SwarmMonitor
459
- Show-Status
460
- }
461
- 'status' {
462
- Show-Status
463
- }
464
- }
465
- `;
466
- }
467
-
468
- /**
469
- * Generate Windows batch file wrapper
470
- */
471
- export function generateWindowsBatchWrapper(): string {
472
- return `@echo off
473
- REM Claude Flow V3 - Windows Batch Wrapper
474
- REM Routes to PowerShell daemon manager
475
-
476
- PowerShell -ExecutionPolicy Bypass -File "%~dp0daemon-manager.ps1" %*
477
- `;
478
- }
479
-
480
- /**
481
- * Generate cross-platform session manager
482
- */
483
- export function generateCrossPlatformSessionManager(): string {
484
- return `#!/usr/bin/env node
485
- /**
486
- * Claude Flow Cross-Platform Session Manager
487
- * Works on Windows, macOS, and Linux
488
- */
489
-
490
- const fs = require('fs');
491
- const path = require('path');
492
- const os = require('os');
493
-
494
- // Platform-specific paths
495
- const platform = os.platform();
496
- const homeDir = os.homedir();
497
-
498
- // Get data directory based on platform
499
- function getDataDir() {
500
- const localDir = path.join(process.cwd(), '.claude-flow', 'sessions');
501
- if (fs.existsSync(path.dirname(localDir))) {
502
- return localDir;
503
- }
504
-
505
- switch (platform) {
506
- case 'win32':
507
- return path.join(process.env.APPDATA || homeDir, 'claude-flow', 'sessions');
508
- case 'darwin':
509
- return path.join(homeDir, 'Library', 'Application Support', 'claude-flow', 'sessions');
510
- default:
511
- return path.join(homeDir, '.claude-flow', 'sessions');
512
- }
513
- }
514
-
515
- const SESSION_DIR = getDataDir();
516
- const SESSION_FILE = path.join(SESSION_DIR, 'current.json');
517
-
518
- // Ensure directory exists
519
- function ensureDir(dir) {
520
- if (!fs.existsSync(dir)) {
521
- fs.mkdirSync(dir, { recursive: true });
522
- }
523
- }
524
-
525
- const commands = {
526
- start: () => {
527
- ensureDir(SESSION_DIR);
528
- const sessionId = \`session-\${Date.now()}\`;
529
- const session = {
530
- id: sessionId,
531
- startedAt: new Date().toISOString(),
532
- platform: platform,
533
- cwd: process.cwd(),
534
- context: {},
535
- metrics: { edits: 0, commands: 0, tasks: 0, errors: 0 }
536
- };
537
- fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));
538
- console.log(\`Session started: \${sessionId}\`);
539
- return session;
540
- },
541
-
542
- restore: () => {
543
- if (!fs.existsSync(SESSION_FILE)) {
544
- console.log('No session to restore');
545
- return null;
546
- }
547
- const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
548
- session.restoredAt = new Date().toISOString();
549
- fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));
550
- console.log(\`Session restored: \${session.id}\`);
551
- return session;
552
- },
553
-
554
- end: () => {
555
- if (!fs.existsSync(SESSION_FILE)) {
556
- console.log('No active session');
557
- return null;
558
- }
559
- const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
560
- session.endedAt = new Date().toISOString();
561
- session.duration = Date.now() - new Date(session.startedAt).getTime();
562
-
563
- const archivePath = path.join(SESSION_DIR, \`\${session.id}.json\`);
564
- fs.writeFileSync(archivePath, JSON.stringify(session, null, 2));
565
- fs.unlinkSync(SESSION_FILE);
566
-
567
- console.log(\`Session ended: \${session.id}\`);
568
- console.log(\`Duration: \${Math.round(session.duration / 1000 / 60)} minutes\`);
569
- return session;
570
- },
571
-
572
- status: () => {
573
- if (!fs.existsSync(SESSION_FILE)) {
574
- console.log('No active session');
575
- return null;
576
- }
577
- const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
578
- const duration = Date.now() - new Date(session.startedAt).getTime();
579
- console.log(\`Session: \${session.id}\`);
580
- console.log(\`Platform: \${session.platform}\`);
581
- console.log(\`Started: \${session.startedAt}\`);
582
- console.log(\`Duration: \${Math.round(duration / 1000 / 60)} minutes\`);
583
- return session;
584
- }
585
- };
586
-
587
- // CLI
588
- const [,, command, ...args] = process.argv;
589
- if (command && commands[command]) {
590
- commands[command](...args);
591
- } else {
592
- console.log('Usage: session.js <start|restore|end|status>');
593
- console.log(\`Platform: \${platform}\`);
594
- console.log(\`Data dir: \${SESSION_DIR}\`);
595
- }
596
-
597
- module.exports = commands;
598
- `;
599
- }
600
-
601
- /**
602
- * Generate all helper files
603
- */
604
- export function generateHelpers(options: InitOptions): Record<string, string> {
605
- const helpers: Record<string, string> = {};
606
-
607
- if (options.components.helpers) {
608
- // Unix/macOS shell scripts
609
- helpers['pre-commit'] = generatePreCommitHook();
610
- helpers['post-commit'] = generatePostCommitHook();
611
-
612
- // Cross-platform Node.js scripts
613
- helpers['session.js'] = generateCrossPlatformSessionManager();
614
- helpers['router.js'] = generateAgentRouter();
615
- helpers['memory.js'] = generateMemoryHelper();
616
-
617
- // Windows-specific scripts
618
- helpers['daemon-manager.ps1'] = generateWindowsDaemonManager();
619
- helpers['daemon-manager.cmd'] = generateWindowsBatchWrapper();
620
- }
621
-
622
- if (options.components.statusline) {
623
- helpers['statusline.js'] = generateStatuslineScript(options);
624
- helpers['statusline-hook.sh'] = generateStatuslineHook(options);
625
- }
626
-
627
- return helpers;
628
- }
package/src/init/index.ts DELETED
@@ -1,60 +0,0 @@
1
- /**
2
- * V3 Init Module
3
- * Comprehensive initialization system for Claude Code integration
4
- */
5
-
6
- // Types
7
- export {
8
- type InitOptions,
9
- type InitComponents,
10
- type InitResult,
11
- type HooksConfig,
12
- type SkillsConfig,
13
- type CommandsConfig,
14
- type AgentsConfig,
15
- type StatuslineConfig,
16
- type MCPConfig,
17
- type RuntimeConfig,
18
- type PlatformInfo,
19
- DEFAULT_INIT_OPTIONS,
20
- MINIMAL_INIT_OPTIONS,
21
- FULL_INIT_OPTIONS,
22
- detectPlatform,
23
- } from './types.js';
24
-
25
- // Generators
26
- export {
27
- generateSettings,
28
- generateSettingsJson,
29
- } from './settings-generator.js';
30
-
31
- export {
32
- generateMCPConfig,
33
- generateMCPJson,
34
- generateMCPCommands,
35
- } from './mcp-generator.js';
36
-
37
- export {
38
- generateStatuslineScript,
39
- generateStatuslineHook,
40
- } from './statusline-generator.js';
41
-
42
- export {
43
- generatePreCommitHook,
44
- generatePostCommitHook,
45
- generateSessionManager,
46
- generateAgentRouter,
47
- generateMemoryHelper,
48
- generateHelpers,
49
- generateWindowsDaemonManager,
50
- generateWindowsBatchWrapper,
51
- generateCrossPlatformSessionManager,
52
- } from './helpers-generator.js';
53
-
54
- export {
55
- generateClaudeMd,
56
- generateMinimalClaudeMd,
57
- } from './claudemd-generator.js';
58
-
59
- // Main executor
60
- export { executeInit, default } from './executor.js';