@braingrid/cli 0.0.5 → 0.0.7
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 +45 -0
- package/README.md +55 -41
- package/dist/.build-info.json +1 -1
- package/dist/cli.js +45 -7
- package/dist/cli.js.map +1 -1
- package/dist/handlers/auth.handlers.d.ts.map +1 -1
- package/dist/handlers/auth.handlers.js +4 -1
- package/dist/handlers/auth.handlers.js.map +1 -1
- package/dist/handlers/index.d.ts +2 -0
- package/dist/handlers/index.d.ts.map +1 -1
- package/dist/handlers/index.js +2 -0
- package/dist/handlers/index.js.map +1 -1
- package/dist/handlers/init.handlers.d.ts +11 -0
- package/dist/handlers/init.handlers.d.ts.map +1 -0
- package/dist/handlers/init.handlers.js +200 -0
- package/dist/handlers/init.handlers.js.map +1 -0
- package/dist/handlers/project.handlers.d.ts +10 -2
- package/dist/handlers/project.handlers.d.ts.map +1 -1
- package/dist/handlers/project.handlers.js +93 -2
- package/dist/handlers/project.handlers.js.map +1 -1
- package/dist/handlers/requirement.handlers.d.ts +2 -2
- package/dist/handlers/requirement.handlers.d.ts.map +1 -1
- package/dist/handlers/requirement.handlers.js +27 -2
- package/dist/handlers/requirement.handlers.js.map +1 -1
- package/dist/handlers/task.handlers.d.ts +2 -2
- package/dist/handlers/task.handlers.d.ts.map +1 -1
- package/dist/handlers/task.handlers.js +38 -3
- package/dist/handlers/task.handlers.js.map +1 -1
- package/dist/handlers/update.handlers.d.ts +16 -0
- package/dist/handlers/update.handlers.d.ts.map +1 -0
- package/dist/handlers/update.handlers.js +126 -0
- package/dist/handlers/update.handlers.js.map +1 -0
- package/dist/services/auth.d.ts +2 -2
- package/dist/services/auth.d.ts.map +1 -1
- package/dist/services/auth.js +2 -1
- package/dist/services/auth.js.map +1 -1
- package/dist/services/project-service.d.ts +2 -0
- package/dist/services/project-service.d.ts.map +1 -1
- package/dist/services/project-service.js +4 -0
- package/dist/services/project-service.js.map +1 -1
- package/dist/types/auth.d.ts +5 -0
- package/dist/types/auth.d.ts.map +1 -1
- package/dist/types/local-project.d.ts +30 -0
- package/dist/types/local-project.d.ts.map +1 -0
- package/dist/types/local-project.js +24 -0
- package/dist/types/local-project.js.map +1 -0
- package/dist/types/project.d.ts +23 -0
- package/dist/types/project.d.ts.map +1 -1
- package/dist/utils/cli-tools.d.ts.map +1 -1
- package/dist/utils/cli-tools.js +6 -19
- package/dist/utils/cli-tools.js.map +1 -1
- package/dist/utils/local-store.d.ts +36 -0
- package/dist/utils/local-store.d.ts.map +1 -0
- package/dist/utils/local-store.js +82 -0
- package/dist/utils/local-store.js.map +1 -0
- package/dist/utils/package-manager.d.ts +31 -0
- package/dist/utils/package-manager.d.ts.map +1 -0
- package/dist/utils/package-manager.js +133 -0
- package/dist/utils/package-manager.js.map +1 -0
- package/package.json +5 -2
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local Project Store
|
|
3
|
+
* Handles reading/writing .braingrid/project.json
|
|
4
|
+
*/
|
|
5
|
+
import fs from 'node:fs';
|
|
6
|
+
import path from 'node:path';
|
|
7
|
+
import { LocalProjectConfigSchema } from '../types/local-project.js';
|
|
8
|
+
const BRAINGRID_DIR = '.braingrid';
|
|
9
|
+
const PROJECT_CONFIG_FILE = 'project.json';
|
|
10
|
+
/**
|
|
11
|
+
* Get the path to the .braingrid directory
|
|
12
|
+
*/
|
|
13
|
+
export function getBraingridDir(cwd = process.cwd()) {
|
|
14
|
+
return path.join(cwd, BRAINGRID_DIR);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Get the path to the project.json file
|
|
18
|
+
*/
|
|
19
|
+
export function getProjectConfigPath(cwd = process.cwd()) {
|
|
20
|
+
return path.join(getBraingridDir(cwd), PROJECT_CONFIG_FILE);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Check if .braingrid/project.json exists
|
|
24
|
+
*/
|
|
25
|
+
export function projectConfigExists(cwd = process.cwd()) {
|
|
26
|
+
return fs.existsSync(getProjectConfigPath(cwd));
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Ensure .braingrid directory exists
|
|
30
|
+
*/
|
|
31
|
+
function ensureBraingridDir(cwd = process.cwd()) {
|
|
32
|
+
const dir = getBraingridDir(cwd);
|
|
33
|
+
if (!fs.existsSync(dir)) {
|
|
34
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Load project configuration from .braingrid/project.json
|
|
39
|
+
* @throws Error if file doesn't exist or is invalid
|
|
40
|
+
*/
|
|
41
|
+
export function loadProjectConfig(cwd = process.cwd()) {
|
|
42
|
+
const configPath = getProjectConfigPath(cwd);
|
|
43
|
+
if (!fs.existsSync(configPath)) {
|
|
44
|
+
throw new Error(`Project not initialized. Run 'braingrid init' to initialize this repository.`);
|
|
45
|
+
}
|
|
46
|
+
const content = fs.readFileSync(configPath, 'utf8');
|
|
47
|
+
const data = JSON.parse(content);
|
|
48
|
+
// Validate with Zod schema
|
|
49
|
+
return LocalProjectConfigSchema.parse(data);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Save project configuration to .braingrid/project.json
|
|
53
|
+
*/
|
|
54
|
+
export function saveProjectConfig(config, cwd = process.cwd()) {
|
|
55
|
+
ensureBraingridDir(cwd);
|
|
56
|
+
const configPath = getProjectConfigPath(cwd);
|
|
57
|
+
const content = JSON.stringify(config, null, 2);
|
|
58
|
+
fs.writeFileSync(configPath, content, 'utf8');
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Delete .braingrid/project.json
|
|
62
|
+
*/
|
|
63
|
+
export function deleteProjectConfig(cwd = process.cwd()) {
|
|
64
|
+
const configPath = getProjectConfigPath(cwd);
|
|
65
|
+
if (fs.existsSync(configPath)) {
|
|
66
|
+
fs.unlinkSync(configPath);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Get the local project ID from .braingrid/project.json
|
|
71
|
+
* Returns the short_id (e.g., PROJ-123) if project.json exists, null otherwise
|
|
72
|
+
*/
|
|
73
|
+
export function getLocalProjectId(cwd = process.cwd()) {
|
|
74
|
+
try {
|
|
75
|
+
const config = loadProjectConfig(cwd);
|
|
76
|
+
return config.project_short_id;
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=local-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-store.js","sourceRoot":"","sources":["../../src/utils/local-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package Manager Detection Utility
|
|
3
|
+
*
|
|
4
|
+
* Detects which package manager (npm, pnpm, yarn) was used to install the CLI
|
|
5
|
+
* by checking global installation directories.
|
|
6
|
+
*/
|
|
7
|
+
export type PackageManager = 'npm' | 'pnpm' | 'yarn';
|
|
8
|
+
interface PackageManagerInfo {
|
|
9
|
+
name: PackageManager;
|
|
10
|
+
installed: boolean;
|
|
11
|
+
hasPackage: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Get information about available package managers and whether they have the CLI installed
|
|
15
|
+
*/
|
|
16
|
+
export declare function getPackageManagerInfo(packageName: string): Promise<PackageManagerInfo[]>;
|
|
17
|
+
/**
|
|
18
|
+
* Detect which package manager was used to install the CLI
|
|
19
|
+
* Returns the detected package manager or prompts the user if detection fails
|
|
20
|
+
*/
|
|
21
|
+
export declare function detectPackageManager(packageName: string): Promise<PackageManager>;
|
|
22
|
+
/**
|
|
23
|
+
* Get the update command for a specific package manager
|
|
24
|
+
*/
|
|
25
|
+
export declare function getUpdateCommand(pm: PackageManager, packageName: string): string;
|
|
26
|
+
/**
|
|
27
|
+
* Execute the update command
|
|
28
|
+
*/
|
|
29
|
+
export declare function executeUpdate(pm: PackageManager, packageName: string): void;
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=package-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-manager.d.ts","sourceRoot":"","sources":["../../src/utils/package-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAErD,UAAU,kBAAkB;IAC3B,IAAI,EAAE,cAAc,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;CACpB;AAyDD;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAW9F;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA+BvF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAYhF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAa3E"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package Manager Detection Utility
|
|
3
|
+
*
|
|
4
|
+
* Detects which package manager (npm, pnpm, yarn) was used to install the CLI
|
|
5
|
+
* by checking global installation directories.
|
|
6
|
+
*/
|
|
7
|
+
import { execSync } from 'child_process';
|
|
8
|
+
import { select } from '@inquirer/prompts';
|
|
9
|
+
/**
|
|
10
|
+
* Check if a package manager is installed on the system
|
|
11
|
+
*/
|
|
12
|
+
function isPackageManagerInstalled(pm) {
|
|
13
|
+
try {
|
|
14
|
+
execSync(`which ${pm}`, { stdio: 'ignore', timeout: 2000 });
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Check if the CLI package is installed globally with a specific package manager
|
|
23
|
+
*/
|
|
24
|
+
function checkGlobalInstallation(pm, packageName) {
|
|
25
|
+
try {
|
|
26
|
+
let command;
|
|
27
|
+
switch (pm) {
|
|
28
|
+
case 'npm': {
|
|
29
|
+
command = `npm list -g ${packageName} 2>&1`;
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
case 'pnpm': {
|
|
33
|
+
command = `pnpm list -g ${packageName} 2>&1`;
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
case 'yarn': {
|
|
37
|
+
command = `yarn global list 2>&1`;
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
const output = execSync(command, {
|
|
42
|
+
encoding: 'utf-8',
|
|
43
|
+
timeout: 5000,
|
|
44
|
+
});
|
|
45
|
+
// For npm and pnpm, check if output contains the package name and not "(empty)"
|
|
46
|
+
if (pm === 'npm' || pm === 'pnpm') {
|
|
47
|
+
return output.includes(packageName) && !output.includes('(empty)');
|
|
48
|
+
}
|
|
49
|
+
// For yarn, check if package is in the list
|
|
50
|
+
if (pm === 'yarn') {
|
|
51
|
+
return output.includes(packageName);
|
|
52
|
+
}
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get information about available package managers and whether they have the CLI installed
|
|
61
|
+
*/
|
|
62
|
+
export async function getPackageManagerInfo(packageName) {
|
|
63
|
+
const packageManagers = ['npm', 'pnpm', 'yarn'];
|
|
64
|
+
return packageManagers.map(pm => {
|
|
65
|
+
const installed = isPackageManagerInstalled(pm);
|
|
66
|
+
return {
|
|
67
|
+
name: pm,
|
|
68
|
+
installed,
|
|
69
|
+
hasPackage: installed ? checkGlobalInstallation(pm, packageName) : false,
|
|
70
|
+
};
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Detect which package manager was used to install the CLI
|
|
75
|
+
* Returns the detected package manager or prompts the user if detection fails
|
|
76
|
+
*/
|
|
77
|
+
export async function detectPackageManager(packageName) {
|
|
78
|
+
const pmInfo = await getPackageManagerInfo(packageName);
|
|
79
|
+
// First, check if any package manager has the package installed
|
|
80
|
+
const installedWith = pmInfo.find(pm => pm.hasPackage);
|
|
81
|
+
if (installedWith) {
|
|
82
|
+
return installedWith.name;
|
|
83
|
+
}
|
|
84
|
+
// If detection failed, check which package managers are available and prompt
|
|
85
|
+
const availablePMs = pmInfo.filter(pm => pm.installed);
|
|
86
|
+
if (availablePMs.length === 0) {
|
|
87
|
+
throw new Error('No package manager found. Please install npm, pnpm, or yarn.');
|
|
88
|
+
}
|
|
89
|
+
if (availablePMs.length === 1) {
|
|
90
|
+
return availablePMs[0].name;
|
|
91
|
+
}
|
|
92
|
+
// Multiple package managers available, prompt user
|
|
93
|
+
const selected = await select({
|
|
94
|
+
message: 'Unable to detect which package manager was used. Please select one:',
|
|
95
|
+
choices: availablePMs.map(pm => ({
|
|
96
|
+
name: pm.name,
|
|
97
|
+
value: pm.name,
|
|
98
|
+
})),
|
|
99
|
+
});
|
|
100
|
+
return selected;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Get the update command for a specific package manager
|
|
104
|
+
*/
|
|
105
|
+
export function getUpdateCommand(pm, packageName) {
|
|
106
|
+
switch (pm) {
|
|
107
|
+
case 'npm': {
|
|
108
|
+
return `npm install -g ${packageName}@latest`;
|
|
109
|
+
}
|
|
110
|
+
case 'pnpm': {
|
|
111
|
+
return `pnpm add -g ${packageName}@latest`;
|
|
112
|
+
}
|
|
113
|
+
case 'yarn': {
|
|
114
|
+
return `yarn global add ${packageName}@latest`;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Execute the update command
|
|
120
|
+
*/
|
|
121
|
+
export function executeUpdate(pm, packageName) {
|
|
122
|
+
const command = getUpdateCommand(pm, packageName);
|
|
123
|
+
try {
|
|
124
|
+
execSync(command, {
|
|
125
|
+
stdio: 'inherit',
|
|
126
|
+
timeout: 120000, // 2 minutes timeout
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
throw new Error(`Failed to update package: ${error instanceof Error ? error.message : String(error)}`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=package-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../src/utils/package-manager.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@braingrid/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.7",
|
|
4
4
|
"description": "BrainGrid - Turn thoughts into AI-ready specs. Command-line interface for spec-driven development.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/cli.js",
|
|
@@ -33,12 +33,14 @@
|
|
|
33
33
|
"CHANGELOG.md"
|
|
34
34
|
],
|
|
35
35
|
"dependencies": {
|
|
36
|
+
"@inquirer/prompts": "^7.8.6",
|
|
36
37
|
"axios": "^1.10.0",
|
|
37
38
|
"chalk": "^5.3.0",
|
|
38
39
|
"commander": "^12.0.0",
|
|
39
40
|
"conf": "13.0.1",
|
|
40
41
|
"node-machine-id": "1.1.12",
|
|
41
|
-
"open": "^10.1.0"
|
|
42
|
+
"open": "^10.1.0",
|
|
43
|
+
"zod": "^4.1.11"
|
|
42
44
|
},
|
|
43
45
|
"devDependencies": {
|
|
44
46
|
"@types/node": "^20.19.1",
|
|
@@ -88,6 +90,7 @@
|
|
|
88
90
|
"test:cli:verbose": "bash scripts/test-cli.sh --verbose",
|
|
89
91
|
"validate:fix": "pnpm lint:fix && pnpm format && pnpm type-check",
|
|
90
92
|
"docs:fetch-openapi": "gh api repos/BrainGridAI/braingrid-app/contents/src/app/api/v1/openapi.yaml | jq -r '.content' | base64 -D > docs/openapi.yaml",
|
|
93
|
+
"docs:sync": "bash scripts/sync-docs-to-braingrid.sh",
|
|
91
94
|
"preversion": "pnpm validate:fix && pnpm test:all",
|
|
92
95
|
"release:patch": "npm version patch && git push && git push --tags",
|
|
93
96
|
"release:minor": "npm version minor && git push && git push --tags",
|