From 63ebbb0c7d59e8f32edc088dbd70206fbde0a102 Mon Sep 17 00:00:00 2001 From: Kurt Overmier Date: Sat, 11 Apr 2026 09:31:18 -0500 Subject: [PATCH] fix(cli,blast): accept ea_ key prefix + exclude .claude/ from graph scan MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - login.ts: add ea_ to VALID_PREFIXES alongside sb_live_/sb_test_. Keys minted by edge-auth use ea_ (edge-auth is the SoT for ecosystem auth). Runtime already accepts ea_ — only the login validator was stale. - blast/index.ts: add .claude to DEFAULT_IGNORE_DIRS. Claude Code worktrees live under .claude/worktrees/agent-*/ and are bit-identical copies of the canonical tree; they pollute hotFiles with ghost duplicates and inflate fileCount. Closes #98, #94. Co-Authored-By: Claude Opus 4.6 (1M context) --- packages/blast/src/index.ts | 1 + packages/cli/src/commands/login.ts | 12 ++++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/blast/src/index.ts b/packages/blast/src/index.ts index 3793fc4..ef55821 100644 --- a/packages/blast/src/index.ts +++ b/packages/blast/src/index.ts @@ -76,6 +76,7 @@ const DEFAULT_IGNORE_DIRS = new Set([ '.cache', 'coverage', '.wrangler', + '.claude', ]); // Matches: import X from '...', import { X } from '...', import '...', export ... from '...', require('...') diff --git a/packages/cli/src/commands/login.ts b/packages/cli/src/commands/login.ts index 79154e7..e11a6fc 100644 --- a/packages/cli/src/commands/login.ts +++ b/packages/cli/src/commands/login.ts @@ -29,16 +29,20 @@ export async function loginCommand(options: CLIOptions, args: string[]): Promise } else { console.log('Not logged in.'); console.log(''); - console.log('Usage: charter login --key sb_live_xxx'); + console.log('Usage: charter login --key ea_xxx'); + console.log(' charter login --key sb_live_xxx'); console.log(' charter login --key sb_test_xxx'); console.log(''); - console.log('Get your API key from the Stackbilt dashboard.'); + console.log('Get your API key from auth.stackbilt.dev (ea_) or the Stackbilt dashboard (sb_).'); } return EXIT_CODE.SUCCESS; } - if (!key.startsWith('sb_live_') && !key.startsWith('sb_test_')) { - throw new CLIError('Invalid API key format. Keys must start with sb_live_ or sb_test_.'); + const VALID_PREFIXES = ['ea_', 'sb_live_', 'sb_test_']; + if (!VALID_PREFIXES.some((p) => key.startsWith(p))) { + throw new CLIError( + `Invalid API key format. Keys must start with one of: ${VALID_PREFIXES.join(', ')}.` + ); } const baseUrl = getFlag(args, '--url');