claude-flow 3.5.83 → 3.6.0

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.
@@ -64,15 +64,6 @@ const startCommand = {
64
64
  config.resourceThresholds = thresholds;
65
65
  }
66
66
  }
67
- // Detect Claude Code runtime — suggest native alternatives
68
- if (!isDaemonProcess && (process.env.CLAUDE_CODE || !process.stdin.isTTY)) {
69
- if (!quiet) {
70
- output.printInfo('[NATIVE_AVAILABLE] Running inside Claude Code. Consider using:');
71
- output.writeln(' /loop "Run workers" — for in-session periodic execution');
72
- output.writeln(' CronCreate — for persistent background workers');
73
- output.writeln(' Proceeding with daemon start as fallback...');
74
- }
75
- }
76
67
  // Check if background daemon already running (skip if we ARE the daemon process)
77
68
  if (!isDaemonProcess) {
78
69
  const bgPid = getBackgroundDaemonPid(projectRoot);
@@ -637,49 +628,6 @@ const enableCommand = {
637
628
  }
638
629
  },
639
630
  };
640
- // Schedule subcommand - suggest native Claude Code alternatives for persistent scheduling
641
- const scheduleCommand = {
642
- name: 'schedule',
643
- description: 'Schedule a worker for periodic execution (suggests native Claude Code primitives)',
644
- options: [
645
- { name: 'worker', short: 'w', type: 'string', description: 'Worker type to schedule', required: true },
646
- { name: 'interval', short: 'i', type: 'string', description: 'Interval in minutes (e.g. 15)', required: true },
647
- ],
648
- examples: [
649
- { command: 'claude-flow daemon schedule -w audit -i 30', description: 'Schedule audit worker every 30 minutes' },
650
- { command: 'claude-flow daemon schedule -w map -i 5', description: 'Schedule map worker every 5 minutes' },
651
- ],
652
- action: async (ctx) => {
653
- const worker = ctx.flags.worker;
654
- const intervalStr = ctx.flags.interval;
655
- if (!worker) {
656
- output.printError('Worker type is required. Use --worker or -w flag.');
657
- return { success: false, exitCode: 1 };
658
- }
659
- if (!intervalStr) {
660
- output.printError('Interval is required. Use --interval or -i flag.');
661
- return { success: false, exitCode: 1 };
662
- }
663
- const minutes = parseInt(intervalStr, 10);
664
- if (isNaN(minutes) || minutes < 1 || minutes > 1440) {
665
- output.printError('Interval must be a number between 1 and 1440 (minutes).');
666
- return { success: false, exitCode: 1 };
667
- }
668
- // Convert minutes to cron expression
669
- const cronExpr = minutes < 60
670
- ? `*/${minutes} * * * *`
671
- : `0 */${Math.floor(minutes / 60)} * * *`;
672
- output.writeln();
673
- output.printBox([
674
- `[CRON_SUGGESTION] To schedule this worker persistently:`,
675
- `CronCreate("${worker}-worker", "${cronExpr}", "Run npx @claude-flow/cli hooks worker dispatch --trigger ${worker}")`,
676
- ``,
677
- `For in-session periodic execution, use:`,
678
- `/loop "Run ${worker} worker" (auto-paced with cache-aware delays)`,
679
- ].join('\n'), 'Schedule Worker');
680
- return { success: true };
681
- },
682
- };
683
631
  // Helper functions for time formatting
684
632
  function formatTimeAgo(date) {
685
633
  const seconds = Math.floor((Date.now() - date.getTime()) / 1000);
@@ -713,7 +661,6 @@ export const daemonCommand = {
713
661
  statusCommand,
714
662
  triggerCommand,
715
663
  enableCommand,
716
- scheduleCommand,
717
664
  ],
718
665
  options: [],
719
666
  examples: [
@@ -752,12 +699,11 @@ export const daemonCommand = {
752
699
  output.writeln();
753
700
  output.writeln(output.bold('Subcommands'));
754
701
  output.printList([
755
- `${output.highlight('start')} - Start the daemon`,
756
- `${output.highlight('stop')} - Stop the daemon`,
757
- `${output.highlight('status')} - Show daemon status`,
758
- `${output.highlight('trigger')} - Manually run a worker`,
759
- `${output.highlight('enable')} - Enable/disable a worker`,
760
- `${output.highlight('schedule')} - Schedule periodic worker execution`,
702
+ `${output.highlight('start')} - Start the daemon`,
703
+ `${output.highlight('stop')} - Stop the daemon`,
704
+ `${output.highlight('status')} - Show daemon status`,
705
+ `${output.highlight('trigger')} - Manually run a worker`,
706
+ `${output.highlight('enable')} - Enable/disable a worker`,
761
707
  ]);
762
708
  output.writeln();
763
709
  output.writeln('Run "claude-flow daemon <subcommand> --help" for details');
@@ -5,7 +5,6 @@
5
5
  import { output } from '../output.js';
6
6
  import { select, confirm } from '../prompt.js';
7
7
  import { callMCPTool, MCPClientError } from '../mcp-client.js';
8
- import { createRunId, emitEvent } from '../services/event-stream.js';
9
8
  import * as fs from 'fs';
10
9
  import * as path from 'path';
11
10
  // Get dynamic swarm status from memory/session files
@@ -525,72 +524,14 @@ const startCommand = {
525
524
  return { success: true, data: executionState };
526
525
  }
527
526
  };
528
- // Shared polling loop used by `status --stream` and `watch`
529
- function startStatusPoll(swarmId, runId, includeHealth) {
530
- let prev = '';
531
- const tick = () => {
532
- const s = getSwarmStatus(swarmId);
533
- const key = JSON.stringify(s);
534
- if (key !== prev) {
535
- prev = key;
536
- emitEvent({
537
- runId,
538
- event: 'swarm_status',
539
- agents: s.agents.total,
540
- active: s.agents.active,
541
- completed: s.tasks.completed,
542
- pending: s.tasks.pending,
543
- inProgress: s.tasks.inProgress,
544
- progress: s.progress,
545
- status: s.status,
546
- });
547
- }
548
- if (includeHealth) {
549
- emitEvent({
550
- runId,
551
- event: 'swarm_health',
552
- memoryOk: s.hasActiveSwarm,
553
- agentsTotal: s.agents.total,
554
- agentsActive: s.agents.active,
555
- successRate: s.metrics.successRate,
556
- avgResponseTime: s.metrics.avgResponseTime,
557
- elapsedTime: s.metrics.elapsedTime,
558
- });
559
- }
560
- };
561
- // Emit once immediately, then every 2 s
562
- tick();
563
- const timer = setInterval(tick, 2000);
564
- const stop = () => { clearInterval(timer); };
565
- return { stop };
566
- }
567
527
  // Swarm status
568
528
  const statusCommand = {
569
529
  name: 'status',
570
- description: 'Show swarm status. Use --stream for live NDJSON output (pairs with Claude Code Monitor tool)',
571
- options: [
572
- {
573
- name: 'stream',
574
- description: 'Continuously emit NDJSON status events to stdout (use with Claude Code Monitor tool for live updates)',
575
- type: 'boolean',
576
- default: false
577
- }
578
- ],
530
+ description: 'Show swarm status',
579
531
  action: async (ctx) => {
580
532
  const swarmId = ctx.args[0];
581
533
  // Get dynamic status from actual swarm state files
582
534
  const status = getSwarmStatus(swarmId);
583
- // --stream: enter NDJSON polling mode instead of one-shot output
584
- if (ctx.flags.stream) {
585
- const runId = createRunId();
586
- const { stop } = startStatusPoll(swarmId, runId, false);
587
- await new Promise((resolve) => {
588
- const onSig = () => { stop(); resolve(); };
589
- process.once('SIGINT', onSig);
590
- process.once('SIGTERM', onSig);
591
- });
592
- return { success: true };
593
- }
594
535
  if (ctx.flags.format === 'json') {
595
536
  output.printJson(status);
596
537
  return { success: true, data: status };
@@ -856,48 +797,11 @@ const coordinateCommand = {
856
797
  return { success: true, data: { agents: v3Agents, count: agentCount } };
857
798
  }
858
799
  };
859
- // Watch swarm (NDJSON event stream)
860
- const watchCommand = {
861
- name: 'watch',
862
- description: 'Stream live swarm status as NDJSON events to stdout',
863
- options: [
864
- {
865
- name: 'health',
866
- description: 'Include periodic health-metric events',
867
- type: 'boolean',
868
- default: false
869
- }
870
- ],
871
- examples: [
872
- { command: 'claude-flow swarm watch', description: 'Stream NDJSON status events' },
873
- { command: 'claude-flow swarm watch --health', description: 'Include health metrics' }
874
- ],
875
- action: async (ctx) => {
876
- const swarmId = ctx.args[0];
877
- const includeHealth = ctx.flags.health;
878
- const runId = createRunId();
879
- emitEvent({
880
- runId,
881
- event: 'watch_start',
882
- swarmId: swarmId ?? null,
883
- health: includeHealth,
884
- });
885
- const { stop } = startStatusPoll(swarmId, runId, includeHealth);
886
- // Block until SIGINT / SIGTERM, then clean up
887
- await new Promise((resolve) => {
888
- const onSig = () => { stop(); resolve(); };
889
- process.once('SIGINT', onSig);
890
- process.once('SIGTERM', onSig);
891
- });
892
- emitEvent({ runId, event: 'watch_stop' });
893
- return { success: true };
894
- }
895
- };
896
800
  // Main swarm command
897
801
  export const swarmCommand = {
898
802
  name: 'swarm',
899
803
  description: 'Swarm coordination commands',
900
- subcommands: [initCommand, startCommand, statusCommand, stopCommand, scaleCommand, coordinateCommand, watchCommand],
804
+ subcommands: [initCommand, startCommand, statusCommand, stopCommand, scaleCommand, coordinateCommand],
901
805
  options: [],
902
806
  examples: [
903
807
  { command: 'claude-flow swarm init --v3-mode', description: 'Initialize V3 swarm' },
@@ -914,11 +818,10 @@ export const swarmCommand = {
914
818
  output.printList([
915
819
  `${output.highlight('init')} - Initialize a new swarm`,
916
820
  `${output.highlight('start')} - Start swarm execution`,
917
- `${output.highlight('status')} - Show swarm status (--stream for live NDJSON)`,
821
+ `${output.highlight('status')} - Show swarm status`,
918
822
  `${output.highlight('stop')} - Stop swarm execution`,
919
823
  `${output.highlight('scale')} - Scale swarm agent count`,
920
- `${output.highlight('coordinate')} - V3 15-agent coordination`,
921
- `${output.highlight('watch')} - Stream live NDJSON status events`
824
+ `${output.highlight('coordinate')} - V3 15-agent coordination`
922
825
  ]);
923
826
  return { success: true };
924
827
  }
@@ -394,22 +394,6 @@ ToolSearch("hive consensus") → hive-mind_consensus, hive-mind_status
394
394
  ToolSearch("+aidefence") → aidefence_scan, aidefence_is_safe, aidefence_has_pii
395
395
  \`\`\``;
396
396
  }
397
- function nativeCapabilities() {
398
- return `## Native Claude Code Capabilities (PREFER OVER MCP) — ADR-091
399
-
400
- When running inside Claude Code, ALWAYS prefer native tools over MCP equivalents:
401
-
402
- | Need | Use This | Not This |
403
- |------|----------|----------|
404
- | Periodic tasks | \`/loop\` with ScheduleWakeup (delay <270s for cache) | \`daemon start\` |
405
- | Live monitoring | \`Monitor("npx @claude-flow/cli swarm watch --stream")\` | Polling \`swarm status\` |
406
- | Background workers | \`CronCreate("audit", "*/15 * * * *", "...")\` | \`daemon start --background\` |
407
- | Agent isolation | \`Task({ ..., isolation: "worktree" })\` | Shared worktree |
408
- | Multi-agent comms | \`TeamCreate\` + \`SendMessage\` | Memory namespace coordination |
409
- | Cross-session | \`PushNotification\` + \`RemoteTrigger\` | No equivalent |
410
-
411
- MCP tool responses include hints: \`[LOOP_SUGGESTION]\`, \`[MONITOR_AVAILABLE]\`, \`[CRON_SUGGESTION]\`, \`[TEAM_SUGGESTION]\`, \`[WORKTREE_SUGGESTION]\` — follow them. In CI/headless, Ruflo falls back to daemon mode automatically.`;
412
- }
413
397
  function setupAndBoundary() {
414
398
  return `## Quick Setup
415
399
 
@@ -438,7 +422,6 @@ npx @claude-flow/cli@latest doctor --fix
438
422
  const TEMPLATE_SECTIONS = {
439
423
  minimal: [
440
424
  behavioralRules,
441
- (_opts) => nativeCapabilities(),
442
425
  fileOrganization,
443
426
  projectArchitecture,
444
427
  (_opts) => buildAndTest(),
@@ -451,7 +434,6 @@ const TEMPLATE_SECTIONS = {
451
434
  ],
452
435
  standard: [
453
436
  behavioralRules,
454
- (_opts) => nativeCapabilities(),
455
437
  fileOrganization,
456
438
  projectArchitecture,
457
439
  (_opts) => buildAndTest(),
@@ -468,7 +450,6 @@ const TEMPLATE_SECTIONS = {
468
450
  ],
469
451
  full: [
470
452
  behavioralRules,
471
- (_opts) => nativeCapabilities(),
472
453
  fileOrganization,
473
454
  projectArchitecture,
474
455
  (_opts) => buildAndTest(),
@@ -490,7 +471,6 @@ const TEMPLATE_SECTIONS = {
490
471
  ],
491
472
  security: [
492
473
  behavioralRules,
493
- (_opts) => nativeCapabilities(),
494
474
  fileOrganization,
495
475
  projectArchitecture,
496
476
  (_opts) => buildAndTest(),
@@ -506,7 +486,6 @@ const TEMPLATE_SECTIONS = {
506
486
  ],
507
487
  performance: [
508
488
  behavioralRules,
509
- (_opts) => nativeCapabilities(),
510
489
  fileOrganization,
511
490
  projectArchitecture,
512
491
  (_opts) => buildAndTest(),
@@ -211,13 +211,6 @@ export const agentTools = [
211
211
  else if (routingResult.tier) {
212
212
  response.tier = routingResult.tier;
213
213
  }
214
- // ADR-091 Phase 1: Native Claude Code capability suggestions
215
- response.nativeIntegration = {
216
- taskSuggestion: '[AGENT_NATIVE] For better isolation, spawn this agent via Claude Code Task tool: Task({ prompt: "...", subagent_type: "' + (input.agentType || 'coder') + '", isolation: "worktree" })',
217
- isolationNote: agentType === 'coder' || agentType === 'reviewer'
218
- ? '[WORKTREE_SUGGESTION] This agent type modifies files. Use isolation: "worktree" to prevent conflicts.'
219
- : undefined,
220
- };
221
214
  return response;
222
215
  },
223
216
  },
@@ -284,10 +277,6 @@ export const agentTools = [
284
277
  createdAt: agent.createdAt,
285
278
  domain: agent.domain,
286
279
  lastResult: agent.lastResult || null,
287
- // ADR-091 Phase 1: Native Claude Code capability suggestions
288
- nativeIntegration: {
289
- monitorSuggestion: '[MONITOR_AVAILABLE] For live agent updates: Monitor("npx @claude-flow/cli agent logs --stream")',
290
- },
291
280
  };
292
281
  }
293
282
  return {
@@ -2,7 +2,7 @@
2
2
  * Analyze MCP Tools
3
3
  * Provides diff analysis and classification via MCP protocol
4
4
  */
5
- import { validateIdentifier, validatePath } from './validate-input.js';
5
+ import { validateGitRef, validatePath } from './validate-input.js';
6
6
  import { analyzeDiff, assessFileRisk, assessOverallRisk, classifyDiff, suggestReviewers, getGitDiffNumstat, } from '../ruvector/diff-classifier.js';
7
7
  /**
8
8
  * Diff Analysis Tool
@@ -40,7 +40,7 @@ export const analyzeDiffTool = {
40
40
  },
41
41
  handler: async (params) => {
42
42
  if (params.ref) {
43
- const vRef = validateIdentifier(params.ref, 'ref');
43
+ const vRef = validateGitRef(params.ref, 'ref');
44
44
  if (!vRef.valid)
45
45
  return { error: true, message: vRef.error, ref: params.ref };
46
46
  }
@@ -100,7 +100,7 @@ export const diffRiskTool = {
100
100
  },
101
101
  handler: async (params) => {
102
102
  if (params.ref) {
103
- const vRef = validateIdentifier(params.ref, 'ref');
103
+ const vRef = validateGitRef(params.ref, 'ref');
104
104
  if (!vRef.valid)
105
105
  return { error: true, message: vRef.error, ref: params.ref };
106
106
  }
@@ -145,7 +145,7 @@ export const diffClassifyTool = {
145
145
  },
146
146
  handler: async (params) => {
147
147
  if (params.ref) {
148
- const vRef = validateIdentifier(params.ref, 'ref');
148
+ const vRef = validateGitRef(params.ref, 'ref');
149
149
  if (!vRef.valid)
150
150
  return { error: true, message: vRef.error, ref: params.ref };
151
151
  }
@@ -194,7 +194,7 @@ export const diffReviewersTool = {
194
194
  },
195
195
  handler: async (params) => {
196
196
  if (params.ref) {
197
- const vRef = validateIdentifier(params.ref, 'ref');
197
+ const vRef = validateGitRef(params.ref, 'ref');
198
198
  if (!vRef.valid)
199
199
  return { error: true, message: vRef.error, ref: params.ref };
200
200
  }
@@ -295,7 +295,7 @@ export const diffStatsTool = {
295
295
  },
296
296
  handler: async (params) => {
297
297
  if (params.ref) {
298
- const vRef = validateIdentifier(params.ref, 'ref');
298
+ const vRef = validateGitRef(params.ref, 'ref');
299
299
  if (!vRef.valid)
300
300
  return { error: true, message: vRef.error, ref: params.ref };
301
301
  }
@@ -1743,9 +1743,6 @@ export const hooksSessionStart = {
1743
1743
  tasksRestored: sessionMemory?.restoredPatterns || 0,
1744
1744
  memoryRestored: sessionMemory?.restoredPatterns || 0,
1745
1745
  } : null,
1746
- nativeCapabilities: {
1747
- note: 'Claude Code native capabilities detected. Prefer /loop over daemon start, Monitor over polling, CronCreate over background processes.',
1748
- },
1749
1746
  };
1750
1747
  },
1751
1748
  };
@@ -3354,12 +3351,6 @@ export const hooksWorkerDispatch = {
3354
3351
  background,
3355
3352
  note: background ? 'Worker scheduled. Use hooks_worker-status to check progress. Start the daemon (daemon start) for real background execution.' : undefined,
3356
3353
  timestamp: new Date().toISOString(),
3357
- nativeIntegration: {
3358
- loopSuggestion: `[LOOP_SUGGESTION] This worker would benefit from /loop for periodic execution.\nRecommended: /loop "${trigger} worker"\nInterval: 270s (stays within cache window)`,
3359
- suggestedDelay: 270,
3360
- loopPrompt: `Run ${trigger} worker and check results`,
3361
- cronSuggestion: `[CRON_SUGGESTION] For persistent background execution: CronCreate("${trigger}-worker", "*/15 * * * *", "Run ${trigger} worker")`,
3362
- },
3363
3354
  };
3364
3355
  },
3365
3356
  };
@@ -3417,9 +3408,6 @@ export const hooksWorkerStatus = {
3417
3408
  completed: workers.filter(w => w.status === 'completed').length,
3418
3409
  failed: workers.filter(w => w.status === 'failed').length,
3419
3410
  },
3420
- nativeIntegration: {
3421
- monitorSuggestion: '[MONITOR_AVAILABLE] For live worker updates: Monitor("npx @claude-flow/cli hooks worker list --stream")',
3422
- },
3423
3411
  };
3424
3412
  },
3425
3413
  };
@@ -109,10 +109,6 @@ export const swarmTools = [
109
109
  initializedAt: now,
110
110
  config: swarmState.config,
111
111
  persisted: true,
112
- nativeIntegration: {
113
- teamSuggestion: '[TEAM_SUGGESTION] Create a Claude Code team for this swarm: TeamCreate({ team_name: "' + (input.name || 'swarm') + '", description: "Ruflo swarm coordination" })',
114
- worktreeNote: '[WORKTREE_SUGGESTION] Spawn file-modifying agents with isolation: "worktree" to prevent conflicts',
115
- },
116
112
  };
117
113
  },
118
114
  },
@@ -172,9 +168,6 @@ export const swarmTools = [
172
168
  createdAt: latest.createdAt,
173
169
  updatedAt: latest.updatedAt,
174
170
  totalSwarms: swarmIds.length,
175
- nativeIntegration: {
176
- monitorSuggestion: '[MONITOR_AVAILABLE] For live swarm updates: Monitor("npx @claude-flow/cli swarm watch --stream")',
177
- },
178
171
  };
179
172
  },
180
173
  },
@@ -319,9 +312,6 @@ export const swarmTools = [
319
312
  agentCount: target.agents.length,
320
313
  checks,
321
314
  checkedAt: new Date().toISOString(),
322
- nativeIntegration: {
323
- monitorSuggestion: '[MONITOR_AVAILABLE] For continuous health monitoring: Monitor("npx @claude-flow/cli swarm watch --stream --health")',
324
- },
325
315
  };
326
316
  },
327
317
  },
@@ -90,10 +90,6 @@ export const taskTools = [
90
90
  createdAt: task.createdAt,
91
91
  assignedTo: task.assignedTo,
92
92
  tags: task.tags,
93
- // ADR-091 Phase 1: Native Claude Code capability suggestions
94
- nativeIntegration: {
95
- nativeTaskNote: '[TASK_NATIVE] Claude Code has a native task system. Consider TaskCreate({ subject: "...", description: "..." }) for shared visibility across agents.',
96
- },
97
93
  };
98
94
  },
99
95
  },
@@ -250,10 +246,6 @@ export const taskTools = [
250
246
  status: task.status,
251
247
  completedAt: task.completedAt,
252
248
  result: task.result,
253
- // ADR-091 Phase 1: Native Claude Code capability suggestions
254
- nativeIntegration: {
255
- notifySuggestion: '[NOTIFY_SUGGESTION] For tasks spanning sessions, use PushNotification to alert when complete.',
256
- },
257
249
  };
258
250
  }
259
251
  return {
@@ -16,6 +16,11 @@ export interface ValidationResult {
16
16
  * Rejects shell metacharacters and path traversal.
17
17
  */
18
18
  export declare function validateIdentifier(value: unknown, label: string): ValidationResult;
19
+ /**
20
+ * Validate a git ref (HEAD~1, main..feature, commit hashes, etc.).
21
+ * Allows ~, ^, and / which are standard git revision selectors.
22
+ */
23
+ export declare function validateGitRef(value: unknown, label: string): ValidationResult;
19
24
  /**
20
25
  * Validate a file path (prevents traversal and shell injection).
21
26
  */
@@ -10,6 +10,7 @@
10
10
  const SHELL_META = /[;&|`$(){}[\]<>!#\\]/;
11
11
  const PATH_TRAVERSAL = /\.\.[/\\]/;
12
12
  const IDENTIFIER_RE = /^[a-zA-Z0-9_][a-zA-Z0-9_\-.:]{0,127}$/;
13
+ const GIT_REF_RE = /^[a-zA-Z0-9_][a-zA-Z0-9_\-.:~^/]{0,255}$/;
13
14
  /**
14
15
  * Validate an identifier (agent ID, agent type, namespace, key, etc.)
15
16
  * Rejects shell metacharacters and path traversal.
@@ -32,6 +33,25 @@ export function validateIdentifier(value, label) {
32
33
  }
33
34
  return { valid: true, sanitized: value };
34
35
  }
36
+ /**
37
+ * Validate a git ref (HEAD~1, main..feature, commit hashes, etc.).
38
+ * Allows ~, ^, and / which are standard git revision selectors.
39
+ */
40
+ export function validateGitRef(value, label) {
41
+ if (typeof value !== 'string' || value.length === 0) {
42
+ return { valid: false, sanitized: '', error: `${label} must be a non-empty string` };
43
+ }
44
+ if (value.length > 256) {
45
+ return { valid: false, sanitized: '', error: `${label} exceeds 256 characters` };
46
+ }
47
+ if (SHELL_META.test(value)) {
48
+ return { valid: false, sanitized: '', error: `${label} contains disallowed characters` };
49
+ }
50
+ if (!GIT_REF_RE.test(value)) {
51
+ return { valid: false, sanitized: '', error: `${label} contains invalid characters (allowed: alphanumeric, _, -, ., :, ~, ^, /)` };
52
+ }
53
+ return { valid: true, sanitized: value };
54
+ }
35
55
  /**
36
56
  * Validate a file path (prevents traversal and shell injection).
37
57
  */
@@ -6,9 +6,6 @@ export { WorkerDaemon, getDaemon, startDaemon, stopDaemon, type WorkerType, } fr
6
6
  export { HeadlessWorkerExecutor, HEADLESS_WORKER_TYPES, HEADLESS_WORKER_CONFIGS, LOCAL_WORKER_TYPES, LOCAL_WORKER_CONFIGS, ALL_WORKER_CONFIGS, isHeadlessWorker, isLocalWorker, getModelId, getWorkerConfig, type HeadlessWorkerType, type LocalWorkerType, type HeadlessWorkerConfig, type HeadlessExecutionResult, type HeadlessExecutorConfig, type HeadlessOptions, type PoolStatus, type SandboxMode, type ModelType, type OutputFormat, type ExecutionMode, type WorkerPriority, type WorkerConfig, } from './headless-worker-executor.js';
7
7
  export { ContainerWorkerPool, type ContainerInfo, type ContainerPoolConfig, type ContainerExecutionOptions, type ContainerPoolStatus, type ContainerState, } from './container-worker-pool.js';
8
8
  export { WorkerQueue, type QueueTask, type WorkerQueueConfig, type QueueStats, type WorkerRegistration, type TaskStatus, } from './worker-queue.js';
9
- export { createRunId, emitEvent, createEventEmitter, type StreamEvent, } from './event-stream.js';
10
- export { detectCapabilities, getRuntimeTier, getCacheWarmDelay, type RuntimeCapabilities, type RuntimeTier, } from './runtime-capabilities.js';
11
- export { runLoopWorker, type LoopWorkerResult, } from './loop-worker-runner.js';
12
9
  export type { default as WorkerDaemonType, DaemonConfig } from './worker-daemon.js';
13
10
  export type { default as HeadlessWorkerExecutorType } from './headless-worker-executor.js';
14
11
  export type { default as ContainerWorkerPoolType } from './container-worker-pool.js';
@@ -8,10 +8,4 @@ export { HeadlessWorkerExecutor, HEADLESS_WORKER_TYPES, HEADLESS_WORKER_CONFIGS,
8
8
  export { ContainerWorkerPool, } from './container-worker-pool.js';
9
9
  // Worker Queue (Phase 4)
10
10
  export { WorkerQueue, } from './worker-queue.js';
11
- // Event Stream (ADR-091)
12
- export { createRunId, emitEvent, createEventEmitter, } from './event-stream.js';
13
- // Runtime Capabilities (ADR-091)
14
- export { detectCapabilities, getRuntimeTier, getCacheWarmDelay, } from './runtime-capabilities.js';
15
- // Loop Worker Runner (ADR-091 Phase 2)
16
- export { runLoopWorker, } from './loop-worker-runner.js';
17
11
  //# sourceMappingURL=index.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@claude-flow/cli",
3
- "version": "3.5.83",
3
+ "version": "3.6.0",
4
4
  "type": "module",
5
5
  "description": "Ruflo CLI - Enterprise AI agent orchestration with 60+ specialized agents, swarm coordination, MCP server, self-learning hooks, and vector memory for Claude Code",
6
6
  "main": "dist/src/index.js",