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

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 (102) hide show
  1. package/package.json +12 -4
  2. package/.agentic-flow/intelligence.json +0 -17
  3. package/.claude-flow/agents/store.json +0 -16
  4. package/.claude-flow/daemon-state.json +0 -123
  5. package/.claude-flow/daemon-test.log +0 -0
  6. package/.claude-flow/daemon.log +0 -0
  7. package/.claude-flow/daemon2.log +0 -0
  8. package/.claude-flow/daemon3.log +0 -0
  9. package/.claude-flow/hive-mind/state.json +0 -51
  10. package/.claude-flow/metrics/agent-metrics.json +0 -1
  11. package/.claude-flow/metrics/codebase-map.json +0 -11
  12. package/.claude-flow/metrics/consolidation.json +0 -6
  13. package/.claude-flow/metrics/performance.json +0 -87
  14. package/.claude-flow/metrics/security-audit.json +0 -10
  15. package/.claude-flow/metrics/task-metrics.json +0 -10
  16. package/.claude-flow/metrics/test-gaps.json +0 -6
  17. package/__tests__/README.md +0 -140
  18. package/__tests__/TEST_SUMMARY.md +0 -144
  19. package/__tests__/cli.test.ts +0 -558
  20. package/__tests__/commands.test.ts +0 -726
  21. package/__tests__/config-adapter.test.ts +0 -362
  22. package/__tests__/config-loading.test.ts +0 -106
  23. package/__tests__/coverage/.tmp/coverage-0.json +0 -1
  24. package/__tests__/coverage/.tmp/coverage-1.json +0 -1
  25. package/__tests__/coverage/.tmp/coverage-2.json +0 -1
  26. package/__tests__/coverage/.tmp/coverage-3.json +0 -1
  27. package/__tests__/coverage/.tmp/coverage-4.json +0 -1
  28. package/__tests__/coverage/.tmp/coverage-5.json +0 -1
  29. package/__tests__/mcp-client.test.ts +0 -480
  30. package/__tests__/p1-commands.test.ts +0 -1064
  31. package/agents/architect.yaml +0 -11
  32. package/agents/coder.yaml +0 -11
  33. package/agents/reviewer.yaml +0 -10
  34. package/agents/security-architect.yaml +0 -10
  35. package/agents/tester.yaml +0 -10
  36. package/docs/CONFIG_LOADING.md +0 -236
  37. package/docs/IMPLEMENTATION_COMPLETE.md +0 -421
  38. package/docs/MCP_CLIENT_GUIDE.md +0 -620
  39. package/docs/REFACTORING_SUMMARY.md +0 -247
  40. package/scripts/publish.sh +0 -46
  41. package/src/commands/agent.ts +0 -955
  42. package/src/commands/claims.ts +0 -317
  43. package/src/commands/completions.ts +0 -558
  44. package/src/commands/config.ts +0 -452
  45. package/src/commands/daemon.ts +0 -621
  46. package/src/commands/deployment.ts +0 -323
  47. package/src/commands/doctor.ts +0 -382
  48. package/src/commands/embeddings.ts +0 -686
  49. package/src/commands/hive-mind.ts +0 -928
  50. package/src/commands/hooks.ts +0 -2603
  51. package/src/commands/index.ts +0 -154
  52. package/src/commands/init.ts +0 -597
  53. package/src/commands/mcp.ts +0 -753
  54. package/src/commands/memory.ts +0 -1161
  55. package/src/commands/migrate.ts +0 -447
  56. package/src/commands/neural.ts +0 -253
  57. package/src/commands/performance.ts +0 -292
  58. package/src/commands/plugins.ts +0 -316
  59. package/src/commands/process.ts +0 -695
  60. package/src/commands/providers.ts +0 -259
  61. package/src/commands/security.ts +0 -288
  62. package/src/commands/session.ts +0 -891
  63. package/src/commands/start.ts +0 -457
  64. package/src/commands/status.ts +0 -736
  65. package/src/commands/swarm.ts +0 -648
  66. package/src/commands/task.ts +0 -792
  67. package/src/commands/workflow.ts +0 -742
  68. package/src/config-adapter.ts +0 -210
  69. package/src/index.ts +0 -443
  70. package/src/infrastructure/in-memory-repositories.ts +0 -310
  71. package/src/init/claudemd-generator.ts +0 -631
  72. package/src/init/executor.ts +0 -762
  73. package/src/init/helpers-generator.ts +0 -628
  74. package/src/init/index.ts +0 -60
  75. package/src/init/mcp-generator.ts +0 -83
  76. package/src/init/settings-generator.ts +0 -284
  77. package/src/init/statusline-generator.ts +0 -211
  78. package/src/init/types.ts +0 -447
  79. package/src/mcp-client.ts +0 -241
  80. package/src/mcp-server.ts +0 -577
  81. package/src/mcp-tools/agent-tools.ts +0 -466
  82. package/src/mcp-tools/config-tools.ts +0 -370
  83. package/src/mcp-tools/hive-mind-tools.ts +0 -521
  84. package/src/mcp-tools/hooks-tools.ts +0 -1888
  85. package/src/mcp-tools/index.ts +0 -16
  86. package/src/mcp-tools/memory-tools.ts +0 -270
  87. package/src/mcp-tools/session-tools.ts +0 -359
  88. package/src/mcp-tools/swarm-tools.ts +0 -105
  89. package/src/mcp-tools/task-tools.ts +0 -347
  90. package/src/mcp-tools/types.ts +0 -33
  91. package/src/mcp-tools/workflow-tools.ts +0 -573
  92. package/src/output.ts +0 -639
  93. package/src/parser.ts +0 -417
  94. package/src/prompt.ts +0 -619
  95. package/src/services/index.ts +0 -15
  96. package/src/services/worker-daemon.ts +0 -726
  97. package/src/suggest.ts +0 -245
  98. package/src/types.ts +0 -287
  99. package/tmp.json +0 -0
  100. package/tsconfig.json +0 -16
  101. package/tsconfig.tsbuildinfo +0 -1
  102. 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';