@claude-flow/cli 3.38.4 → 3.38.5

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "manifest": {
3
- "version": "3.38.4",
3
+ "version": "3.38.5",
4
4
  "files": {
5
5
  "auto-memory-hook.mjs": "85fe05c757421c52137c0bc8545a0896bab6b4714538c2a11d1d0835bfcc8c1c",
6
6
  "hook-handler.cjs": "dae295fb9ae2626b89899c19a20cc911541af82b52d2eeb9b214d618b96e9a86",
@@ -8,6 +8,6 @@
8
8
  "statusline.cjs": "0457fe53f8cd2c56458ff178392536a5868efd1a573665fa43bc01d2d95ca677"
9
9
  }
10
10
  },
11
- "signature": "pebcqTgxAwqxE5P2CeHtJGeddXdUluZcIkdlIrCo9NAjkNEFTiwV/PUltPtEvyYQ5uYu1AaZjbT/2qz3/YIhAg==",
11
+ "signature": "aNZkK2xmrSn4xS5GEZ42BMV56uqQorOY8jt/3cxHbCUt1D2Vi8Ewz31d4vrm8pDUR1wTtkUKj148o8saoUaxAg==",
12
12
  "algorithm": "ed25519"
13
13
  }
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "generation": 4,
4
- "generatedAt": "2026-08-12T18:43:20.202Z",
5
- "gitSha": "d41af6e4",
4
+ "generatedAt": "2026-08-12T19:44:54.526Z",
5
+ "gitSha": "7715eb5e",
6
6
  "catalog": {
7
7
  "agents": 164,
8
8
  "tools": 397,
@@ -170,7 +170,14 @@ const scanCommand = {
170
170
  if (scanType === 'all' || scanType === 'code') {
171
171
  spinner.setText('Scanning for hardcoded secrets...');
172
172
  const secretPatterns = [
173
- { pattern: /['"](?:sk-|sk_live_|sk_test_)[a-zA-Z0-9]{20,}['"]/g, type: 'API Key (Stripe/OpenAI)' },
173
+ // #2931: was `['"](?:sk-|...)...{20,}['"]` the 20-char floor
174
+ // missed shorter-but-real keys like `sk-1234567890abcdef` (16
175
+ // chars), and the quote-adjacency anchor required a quote
176
+ // literally next to the prefix, missing the extremely common
177
+ // `Authorization: "Bearer sk_live_..."` shape where the quote
178
+ // sits next to "Bearer", not the key. Lookaround boundaries
179
+ // match the prefix wherever it appears as a standalone token.
180
+ { pattern: /(?<![a-zA-Z0-9_])(?:sk-|sk_live_|sk_test_)[a-zA-Z0-9]{10,}(?![a-zA-Z0-9_])/g, type: 'API Key (Stripe/OpenAI)' },
174
181
  { pattern: /['"]AKIA[A-Z0-9]{16}['"]/g, type: 'AWS Access Key' },
175
182
  { pattern: /['"]ghp_[a-zA-Z0-9]{36}['"]/g, type: 'GitHub Token' },
176
183
  { pattern: /['"]xox[baprs]-[a-zA-Z0-9-]+['"]/g, type: 'Slack Token' },
@@ -789,7 +796,7 @@ const secretsCommand = {
789
796
  { pattern: /eyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}/g, type: 'JWT Token', risk: 'High', action: 'Remove from source' },
790
797
  { pattern: /-----BEGIN (?:RSA|EC|DSA|OPENSSH) PRIVATE KEY-----/g, type: 'Private Key', risk: 'Critical', action: 'Remove and regenerate' },
791
798
  { pattern: /(?:mongodb|postgres|mysql|redis):\/\/[^\s'"]+/g, type: 'Connection String', risk: 'High', action: 'Use env variable' },
792
- { pattern: /['"](?:sk-|sk_live_|sk_test_)[a-zA-Z0-9]{20,}['"]/g, type: 'API Key (Stripe/OpenAI)', risk: 'Critical', action: 'Rotate immediately' },
799
+ { pattern: /(?<![a-zA-Z0-9_])(?:sk-|sk_live_|sk_test_)[a-zA-Z0-9]{10,}(?![a-zA-Z0-9_])/g, type: 'API Key (Stripe/OpenAI)', risk: 'Critical', action: 'Rotate immediately' },
793
800
  { pattern: /['"]xox[baprs]-[a-zA-Z0-9-]+['"]/g, type: 'Slack Token', risk: 'High', action: 'Revoke and rotate' },
794
801
  { pattern: /[a-zA-Z0-9_-]*(?:api[_-]?key|secret[_-]?key|auth[_-]?token|access[_-]?token|private[_-]?key)\s*[:=]\s*['"][^'"]{8,}['"]/gi, type: 'Generic Secret/API Key', risk: 'High', action: 'Use env variable' },
795
802
  { pattern: /(?:password|passwd|pwd)\s*[:=]\s*['"][^'"]{8,}['"]/gi, type: 'Hardcoded Password', risk: 'High', action: 'Use secrets manager' },
@@ -391,9 +391,16 @@ export const githubTools = [
391
391
  const store = loadGitHubStore();
392
392
  const action = input.action || 'list';
393
393
  const gh = hasGhCli();
394
+ // #2963 — owner/repo were validated but never passed to `gh`, so `gh`
395
+ // silently resolved the target repo from the cwd's git remote instead
396
+ // of the caller-specified one. `gh` accepts `--repo owner/repo` on
397
+ // every issue subcommand used here.
398
+ const owner = input.owner;
399
+ const repo = input.repo;
400
+ const repoArgs = owner && repo ? ['--repo', `${owner}/${repo}`] : [];
394
401
  if (action === 'list') {
395
402
  if (gh) {
396
- const raw = run('gh issue list --state all --limit 20 --json number,title,state,labels,createdAt');
403
+ const raw = runArgv('gh', ['issue', 'list', '--state', 'all', '--limit', '20', '--json', 'number,title,state,labels,createdAt', ...repoArgs]);
397
404
  if (raw) {
398
405
  try {
399
406
  const issues = JSON.parse(raw);
@@ -413,7 +420,7 @@ export const githubTools = [
413
420
  // outside [A-Za-z0-9 _\-./] and caps each label at 64 chars.
414
421
  const labels = sanitizeLabels(input.labels) ?? [];
415
422
  if (gh) {
416
- const argv = ['issue', 'create', '--title', title, '--body', body];
423
+ const argv = ['issue', 'create', '--title', title, '--body', body, ...repoArgs];
417
424
  if (labels.length > 0) {
418
425
  argv.push('--label', labels.join(','));
419
426
  }
@@ -442,7 +449,7 @@ export const githubTools = [
442
449
  argv.push('--add-label', labels.join(','));
443
450
  }
444
451
  if (argv.length > 3) {
445
- const result = runArgv('gh', argv);
452
+ const result = runArgv('gh', [...argv, ...repoArgs]);
446
453
  if (result !== null)
447
454
  return { success: true, _real: true, action: 'updated', issueNumber };
448
455
  }
@@ -463,7 +470,7 @@ export const githubTools = [
463
470
  if (action === 'close') {
464
471
  const issueNumber = toPositiveInt(input.issueNumber);
465
472
  if (gh && issueNumber) {
466
- const result = runArgv('gh', ['issue', 'close', String(issueNumber)]);
473
+ const result = runArgv('gh', ['issue', 'close', String(issueNumber), ...repoArgs]);
467
474
  if (result !== null)
468
475
  return { success: true, _real: true, action: 'closed', issueNumber, closedAt: new Date().toISOString() };
469
476
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@claude-flow/cli",
3
- "version": "3.38.4",
3
+ "version": "3.38.5",
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",