@braingrid/cli 0.0.7 → 0.0.8
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.
- package/CHANGELOG.md +13 -0
- package/README.md +12 -12
- package/dist/.build-info.json +1 -1
- package/dist/build-config.d.ts +5 -0
- package/dist/build-config.d.ts.map +1 -1
- package/dist/build-config.js +5 -0
- package/dist/build-config.js.map +1 -1
- package/dist/handlers/update.handlers.d.ts.map +1 -1
- package/dist/handlers/update.handlers.js +4 -11
- package/dist/handlers/update.handlers.js.map +1 -1
- package/dist/utils/cli-tools.d.ts.map +1 -1
- package/dist/utils/cli-tools.js +76 -3
- package/dist/utils/cli-tools.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,19 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.0.8] - 2025-10-03
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
- Claude Code detection in `braingrid status` command with 3-tier detection strategy
|
|
12
|
+
- Priority 1: Check `~/.claude/local/claude` (after `claude migrate-installer`)
|
|
13
|
+
- Priority 2: Try executing `claude --version` (shell alias detection)
|
|
14
|
+
- Priority 3: Check PATH with `which claude`
|
|
15
|
+
- Based on GitHub's spec-kit implementation pattern
|
|
16
|
+
- Added comprehensive test coverage for all detection methods
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
- README comment alignment in usage sections for better readability
|
|
20
|
+
|
|
8
21
|
## [0.0.7] - 2025-10-03
|
|
9
22
|
|
|
10
23
|
### Added
|
package/README.md
CHANGED
|
@@ -72,9 +72,9 @@ BrainGrid CLI uses a resource-oriented command structure: `braingrid <resource>
|
|
|
72
72
|
### Authentication Commands
|
|
73
73
|
|
|
74
74
|
```bash
|
|
75
|
-
braingrid login
|
|
76
|
-
braingrid logout
|
|
77
|
-
braingrid whoami
|
|
75
|
+
braingrid login # Authenticate with BrainGrid (OAuth2 PKCE flow)
|
|
76
|
+
braingrid logout # Sign out and clear credentials
|
|
77
|
+
braingrid whoami # Show current user information
|
|
78
78
|
```
|
|
79
79
|
|
|
80
80
|
### Initialization
|
|
@@ -82,10 +82,10 @@ braingrid whoami # Show current user information
|
|
|
82
82
|
Initialize your repository with a BrainGrid project:
|
|
83
83
|
|
|
84
84
|
```bash
|
|
85
|
-
braingrid init
|
|
86
|
-
braingrid init --project PROJ-123
|
|
87
|
-
braingrid init --wizard
|
|
88
|
-
braingrid init --force
|
|
85
|
+
braingrid init # Auto-detects project from git remote (owner/name)
|
|
86
|
+
braingrid init --project PROJ-123 # Manually specify project by ID (short ID or UUID)
|
|
87
|
+
braingrid init --wizard # Run interactive wizard with confirmation prompt
|
|
88
|
+
braingrid init --force # Force reinitialization if already initialized
|
|
89
89
|
braingrid init --project PROJ-123 --force # Manually specify and force reinitialization
|
|
90
90
|
```
|
|
91
91
|
|
|
@@ -145,9 +145,9 @@ braingrid task create -r PROJ-123/REQ-456 --title "Task Title"
|
|
|
145
145
|
### Informational Commands
|
|
146
146
|
|
|
147
147
|
```bash
|
|
148
|
-
braingrid status
|
|
149
|
-
braingrid --version
|
|
150
|
-
braingrid --help
|
|
148
|
+
braingrid status # Show CLI status (authentication, git repo, configuration)
|
|
149
|
+
braingrid --version # Show CLI version
|
|
150
|
+
braingrid --help # Show help information
|
|
151
151
|
```
|
|
152
152
|
|
|
153
153
|
---
|
|
@@ -157,8 +157,8 @@ braingrid --help # Show help information
|
|
|
157
157
|
Update to the latest version:
|
|
158
158
|
|
|
159
159
|
```bash
|
|
160
|
-
braingrid update
|
|
161
|
-
braingrid update --check
|
|
160
|
+
braingrid update # Update to the latest version
|
|
161
|
+
braingrid update --check # Check for updates without installing
|
|
162
162
|
```
|
|
163
163
|
|
|
164
164
|
---
|
package/dist/.build-info.json
CHANGED
package/dist/build-config.d.ts
CHANGED
|
@@ -4,6 +4,11 @@
|
|
|
4
4
|
* - 'development': Allows NODE_ENV to override URLs (for local development)
|
|
5
5
|
*/
|
|
6
6
|
export declare const BUILD_ENV: 'production' | 'development';
|
|
7
|
+
/**
|
|
8
|
+
* CLI_VERSION is set at build time from package.json
|
|
9
|
+
* Used for update checks and version display
|
|
10
|
+
*/
|
|
11
|
+
export declare const CLI_VERSION = "development";
|
|
7
12
|
/**
|
|
8
13
|
* Production configuration
|
|
9
14
|
* Used when BUILD_ENV === 'production' (npm published package)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-config.d.ts","sourceRoot":"","sources":["../src/build-config.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,eAAO,MAAM,SAAS,EAAE,YAAY,GAAG,aAA6B,CAAC;AAErE;;;GAGG;AACH,eAAO,MAAM,iBAAiB;;;;CAIpB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;CAIrB,CAAC"}
|
|
1
|
+
{"version":3,"file":"build-config.d.ts","sourceRoot":"","sources":["../src/build-config.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,eAAO,MAAM,SAAS,EAAE,YAAY,GAAG,aAA6B,CAAC;AAErE;;;GAGG;AACH,eAAO,MAAM,WAAW,gBAAgB,CAAC;AAEzC;;;GAGG;AACH,eAAO,MAAM,iBAAiB;;;;CAIpB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;CAIrB,CAAC"}
|
package/dist/build-config.js
CHANGED
|
@@ -6,6 +6,11 @@
|
|
|
6
6
|
* - 'development': Allows NODE_ENV to override URLs (for local development)
|
|
7
7
|
*/
|
|
8
8
|
export const BUILD_ENV = 'production';
|
|
9
|
+
/**
|
|
10
|
+
* CLI_VERSION is set at build time from package.json
|
|
11
|
+
* Used for update checks and version display
|
|
12
|
+
*/
|
|
13
|
+
export const CLI_VERSION = '0.0.8';
|
|
9
14
|
/**
|
|
10
15
|
* Production configuration
|
|
11
16
|
* Used when BUILD_ENV === 'production' (npm published package)
|
package/dist/build-config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-config.js","sourceRoot":"","sources":["../src/build-config.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,qDAAqD;AAErD;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAiC,aAAa,CAAC;AAErE;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAChC,MAAM,EAAE,0BAA0B;IAClC,aAAa,EAAE,0CAA0C;IACzD,cAAc,EAAE,mCAAmC;CAC1C,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IACjC,MAAM,EAAE,8BAA8B;IACtC,aAAa,EAAE,qDAAqD;IACpE,cAAc,EAAE,mCAAmC;CAC1C,CAAC"}
|
|
1
|
+
{"version":3,"file":"build-config.js","sourceRoot":"","sources":["../src/build-config.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,qDAAqD;AAErD;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAiC,aAAa,CAAC;AAErE;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;AAEzC;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAChC,MAAM,EAAE,0BAA0B;IAClC,aAAa,EAAE,0CAA0C;IACzD,cAAc,EAAE,mCAAmC;CAC1C,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IACjC,MAAM,EAAE,8BAA8B;IACtC,aAAa,EAAE,qDAAqD;IACpE,cAAc,EAAE,mCAAmC;CAC1C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.handlers.d.ts","sourceRoot":"","sources":["../../src/handlers/update.handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"update.handlers.d.ts","sourceRoot":"","sources":["../../src/handlers/update.handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA+ChD;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAwEpF"}
|
|
@@ -10,22 +10,15 @@ import chalk from 'chalk';
|
|
|
10
10
|
import axios from 'axios';
|
|
11
11
|
import { detectPackageManager, executeUpdate, getUpdateCommand } from '../utils/package-manager.js';
|
|
12
12
|
import { formatError } from '../utils/error-formatter.js';
|
|
13
|
+
import { CLI_VERSION } from '../build-config.js';
|
|
13
14
|
const PACKAGE_NAME = '@braingrid/cli';
|
|
14
15
|
const NPM_REGISTRY_URL = `https://registry.npmjs.org/${PACKAGE_NAME}`;
|
|
15
16
|
/**
|
|
16
|
-
* Get the current version of the CLI from
|
|
17
|
+
* Get the current version of the CLI from build config
|
|
18
|
+
* Version is injected at build time from package.json
|
|
17
19
|
*/
|
|
18
20
|
function getCurrentVersion() {
|
|
19
|
-
|
|
20
|
-
// Note: In production, this will be bundled and the version will be hardcoded
|
|
21
|
-
try {
|
|
22
|
-
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
23
|
-
const packageJson = require('../../package.json');
|
|
24
|
-
return packageJson.version;
|
|
25
|
-
}
|
|
26
|
-
catch {
|
|
27
|
-
return 'unknown';
|
|
28
|
-
}
|
|
21
|
+
return CLI_VERSION;
|
|
29
22
|
}
|
|
30
23
|
/**
|
|
31
24
|
* Get the latest version from npm registry
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.handlers.js","sourceRoot":"","sources":["../../src/handlers/update.handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpG,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"update.handlers.js","sourceRoot":"","sources":["../../src/handlers/update.handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-tools.d.ts","sourceRoot":"","sources":["../../src/utils/cli-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"cli-tools.d.ts","sourceRoot":"","sources":["../../src/utils/cli-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAcH,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AA6FD;;;GAGG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAYtE;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAClC,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,MAAoB,EACjC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,GACxC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiBxB;AA6CD;;;GAGG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAarE"}
|
package/dist/utils/cli-tools.js
CHANGED
|
@@ -8,7 +8,69 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { exec } from 'child_process';
|
|
10
10
|
import { promisify } from 'util';
|
|
11
|
+
import { access, constants } from 'fs/promises';
|
|
12
|
+
import { homedir } from 'os';
|
|
13
|
+
import { join } from 'path';
|
|
11
14
|
const execAsync = promisify(exec);
|
|
15
|
+
// Claude Code local installation path after migrate-installer
|
|
16
|
+
// See: https://github.com/github/spec-kit/issues/123
|
|
17
|
+
const CLAUDE_LOCAL_PATH = join(homedir(), '.claude', 'local', 'claude');
|
|
18
|
+
/**
|
|
19
|
+
* Check if Claude Code is installed
|
|
20
|
+
* Special handling for Claude CLI after `claude migrate-installer`
|
|
21
|
+
*
|
|
22
|
+
* The migrate-installer command moves the Claude Code executable from PATH
|
|
23
|
+
* to ~/.claude/local/claude, so standard PATH checks fail.
|
|
24
|
+
*
|
|
25
|
+
* Detection priority:
|
|
26
|
+
* 1. Check ~/.claude/local/claude (after migrate-installer)
|
|
27
|
+
* 2. Try executing `claude --version` (may work via shell alias)
|
|
28
|
+
* 3. Check PATH with `which claude`
|
|
29
|
+
*/
|
|
30
|
+
async function checkClaudeInstalled() {
|
|
31
|
+
// Priority 1: Check ~/.claude/local/claude (after migrate-installer)
|
|
32
|
+
try {
|
|
33
|
+
await access(CLAUDE_LOCAL_PATH, constants.X_OK);
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// Fall through to next check
|
|
38
|
+
}
|
|
39
|
+
// Priority 2: Try executing claude --version (may work via shell alias)
|
|
40
|
+
try {
|
|
41
|
+
await execAsync('claude --version 2>&1', { timeout: 2000 });
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
// Fall through to PATH check
|
|
46
|
+
}
|
|
47
|
+
// Priority 3: Check PATH with which
|
|
48
|
+
return isCliInstalled('claude');
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Get Claude Code version
|
|
52
|
+
* Tries local path first, then falls back to standard version check
|
|
53
|
+
*/
|
|
54
|
+
async function getClaudeVersion() {
|
|
55
|
+
// Try local path first
|
|
56
|
+
try {
|
|
57
|
+
await access(CLAUDE_LOCAL_PATH, constants.X_OK);
|
|
58
|
+
const result = await execAsync(`"${CLAUDE_LOCAL_PATH}" --version 2>&1`, {
|
|
59
|
+
timeout: 2000,
|
|
60
|
+
});
|
|
61
|
+
const output = result.stdout || result.stderr;
|
|
62
|
+
const match = output.match(/([\d.]+)/);
|
|
63
|
+
return match ? match[1] : null;
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// Fall through to regular version check
|
|
67
|
+
}
|
|
68
|
+
// Fall back to regular claude command
|
|
69
|
+
return getCliVersion('claude', '--version', output => {
|
|
70
|
+
const match = output.match(/([\d.]+)/);
|
|
71
|
+
return match ? match[1] : null;
|
|
72
|
+
});
|
|
73
|
+
}
|
|
12
74
|
const CLI_TOOLS = [
|
|
13
75
|
{
|
|
14
76
|
name: 'GitHub CLI',
|
|
@@ -22,6 +84,8 @@ const CLI_TOOLS = [
|
|
|
22
84
|
{
|
|
23
85
|
name: 'Claude Code',
|
|
24
86
|
command: 'claude',
|
|
87
|
+
specialCheck: checkClaudeInstalled,
|
|
88
|
+
specialVersionCheck: getClaudeVersion,
|
|
25
89
|
versionFlag: '--version',
|
|
26
90
|
versionParser: output => {
|
|
27
91
|
// Output format: "2.0.1 (Claude Code)"
|
|
@@ -73,7 +137,10 @@ export async function getCliVersion(command, versionFlag = '--version', parser)
|
|
|
73
137
|
* Check a single CLI tool (installed status and version)
|
|
74
138
|
*/
|
|
75
139
|
async function checkCliTool(config) {
|
|
76
|
-
|
|
140
|
+
// Use special check if provided, otherwise use standard check
|
|
141
|
+
const installed = config.specialCheck
|
|
142
|
+
? await config.specialCheck()
|
|
143
|
+
: await isCliInstalled(config.command);
|
|
77
144
|
if (!installed) {
|
|
78
145
|
return {
|
|
79
146
|
name: config.name,
|
|
@@ -81,9 +148,15 @@ async function checkCliTool(config) {
|
|
|
81
148
|
installed: false,
|
|
82
149
|
};
|
|
83
150
|
}
|
|
84
|
-
// Try to get version
|
|
151
|
+
// Try to get version - use special version check if provided
|
|
85
152
|
let version;
|
|
86
|
-
if (config.
|
|
153
|
+
if (config.specialVersionCheck) {
|
|
154
|
+
const versionStr = await config.specialVersionCheck();
|
|
155
|
+
if (versionStr) {
|
|
156
|
+
version = versionStr;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
else if (config.versionFlag) {
|
|
87
160
|
const versionStr = await getCliVersion(config.command, config.versionFlag, config.versionParser);
|
|
88
161
|
if (versionStr) {
|
|
89
162
|
version = versionStr;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-tools.js","sourceRoot":"","sources":["../../src/utils/cli-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"cli-tools.js","sourceRoot":"","sources":["../../src/utils/cli-tools.ts"],"names":[],"mappings":"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"}
|