@kairoaisec/cli 0.1.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.
- package/CHANGELOG.md +47 -0
- package/LICENSE +21 -0
- package/README.md +161 -0
- package/dist/api/client.d.ts +128 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +153 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/index.d.ts +7 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +42 -0
- package/dist/api/index.js.map +1 -0
- package/dist/cli.d.ts +5 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +72 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/auth/index.d.ts +3 -0
- package/dist/commands/auth/index.d.ts.map +1 -0
- package/dist/commands/auth/index.js +13 -0
- package/dist/commands/auth/index.js.map +1 -0
- package/dist/commands/auth/login.d.ts +3 -0
- package/dist/commands/auth/login.d.ts.map +1 -0
- package/dist/commands/auth/login.js +174 -0
- package/dist/commands/auth/login.js.map +1 -0
- package/dist/commands/auth/logout.d.ts +3 -0
- package/dist/commands/auth/logout.d.ts.map +1 -0
- package/dist/commands/auth/logout.js +56 -0
- package/dist/commands/auth/logout.js.map +1 -0
- package/dist/commands/auth/whoami.d.ts +3 -0
- package/dist/commands/auth/whoami.d.ts.map +1 -0
- package/dist/commands/auth/whoami.js +110 -0
- package/dist/commands/auth/whoami.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +102 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/project/create.d.ts +3 -0
- package/dist/commands/project/create.d.ts.map +1 -0
- package/dist/commands/project/create.js +146 -0
- package/dist/commands/project/create.js.map +1 -0
- package/dist/commands/project/index.d.ts +3 -0
- package/dist/commands/project/index.d.ts.map +1 -0
- package/dist/commands/project/index.js +14 -0
- package/dist/commands/project/index.js.map +1 -0
- package/dist/commands/project/list.d.ts +3 -0
- package/dist/commands/project/list.d.ts.map +1 -0
- package/dist/commands/project/list.js +116 -0
- package/dist/commands/project/list.js.map +1 -0
- package/dist/commands/project/select.d.ts +3 -0
- package/dist/commands/project/select.d.ts.map +1 -0
- package/dist/commands/project/select.js +147 -0
- package/dist/commands/project/select.js.map +1 -0
- package/dist/commands/scan.d.ts +3 -0
- package/dist/commands/scan.d.ts.map +1 -0
- package/dist/commands/scan.js +401 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/config/index.d.ts +44 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +237 -0
- package/dist/config/index.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/file-discovery.d.ts +17 -0
- package/dist/lib/file-discovery.d.ts.map +1 -0
- package/dist/lib/file-discovery.js +218 -0
- package/dist/lib/file-discovery.js.map +1 -0
- package/dist/lib/patterns.d.ts +18 -0
- package/dist/lib/patterns.d.ts.map +1 -0
- package/dist/lib/patterns.js +187 -0
- package/dist/lib/patterns.js.map +1 -0
- package/dist/lib/sarif.d.ts +61 -0
- package/dist/lib/sarif.d.ts.map +1 -0
- package/dist/lib/sarif.js +169 -0
- package/dist/lib/sarif.js.map +1 -0
- package/dist/lib/scanner.d.ts +43 -0
- package/dist/lib/scanner.d.ts.map +1 -0
- package/dist/lib/scanner.js +163 -0
- package/dist/lib/scanner.js.map +1 -0
- package/dist/lib/slither.d.ts +112 -0
- package/dist/lib/slither.d.ts.map +1 -0
- package/dist/lib/slither.js +463 -0
- package/dist/lib/slither.js.map +1 -0
- package/dist/utils/logger.d.ts +14 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +44 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/spinner.d.ts +15 -0
- package/dist/utils/spinner.d.ts.map +1 -0
- package/dist/utils/spinner.js +55 -0
- package/dist/utils/spinner.js.map +1 -0
- package/dist/utils/validation.d.ts +12 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +79 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createCommand = void 0;
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const logger_1 = require("../../utils/logger");
|
|
9
|
+
const config_1 = require("../../config");
|
|
10
|
+
const api_1 = require("../../api");
|
|
11
|
+
const spinner_1 = require("../../utils/spinner");
|
|
12
|
+
const validation_1 = require("../../utils/validation");
|
|
13
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
14
|
+
exports.createCommand = new commander_1.Command('create')
|
|
15
|
+
.argument('[name]', 'Project name')
|
|
16
|
+
.description('Create a new project')
|
|
17
|
+
.option('-d, --description <description>', 'Project description')
|
|
18
|
+
.option('--select', 'Automatically select this project after creation')
|
|
19
|
+
.option('--json', 'Output as JSON')
|
|
20
|
+
.action(async (name, options) => {
|
|
21
|
+
try {
|
|
22
|
+
// Check authentication
|
|
23
|
+
if (!(await config_1.configManager.isAuthenticated())) {
|
|
24
|
+
logger_1.Logger.error('You must be logged in to create projects');
|
|
25
|
+
logger_1.Logger.info('Use ' + logger_1.Logger.highlight('kairo auth login') + ' to get started');
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
// Get project name from arguments or prompt
|
|
29
|
+
let projectName = name;
|
|
30
|
+
let description = options.description;
|
|
31
|
+
if (!projectName) {
|
|
32
|
+
const answers = await inquirer_1.default.prompt([
|
|
33
|
+
{
|
|
34
|
+
type: 'input',
|
|
35
|
+
name: 'name',
|
|
36
|
+
message: 'Project name:',
|
|
37
|
+
validate: (input) => {
|
|
38
|
+
try {
|
|
39
|
+
(0, validation_1.validateRequired)(input, 'Project name');
|
|
40
|
+
(0, validation_1.validateProjectName)(input);
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
return error instanceof Error ? error.message : 'Invalid project name';
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
]);
|
|
49
|
+
projectName = answers.name;
|
|
50
|
+
}
|
|
51
|
+
if (!description) {
|
|
52
|
+
const answers = await inquirer_1.default.prompt([
|
|
53
|
+
{
|
|
54
|
+
type: 'input',
|
|
55
|
+
name: 'description',
|
|
56
|
+
message: 'Project description (optional):',
|
|
57
|
+
},
|
|
58
|
+
]);
|
|
59
|
+
description = answers.description;
|
|
60
|
+
}
|
|
61
|
+
// Validate project name
|
|
62
|
+
if (!projectName) {
|
|
63
|
+
logger_1.Logger.error('Project name is required');
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
(0, validation_1.validateRequired)(projectName, 'Project name');
|
|
68
|
+
(0, validation_1.validateProjectName)(projectName);
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
logger_1.Logger.error('Invalid project name:', error instanceof Error ? error.message : String(error));
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
const spinner = (0, spinner_1.createSpinner)(`Creating project "${projectName}"...`).start();
|
|
75
|
+
try {
|
|
76
|
+
const client = (0, api_1.getApiClient)();
|
|
77
|
+
const projectData = {
|
|
78
|
+
name: projectName,
|
|
79
|
+
...(description && { description }),
|
|
80
|
+
};
|
|
81
|
+
const result = await client.createProject(projectData);
|
|
82
|
+
const apiProject = result.project;
|
|
83
|
+
spinner.succeed(`Project "${projectName}" created successfully`);
|
|
84
|
+
// Convert to config project format and store locally
|
|
85
|
+
const project = {
|
|
86
|
+
id: apiProject.id,
|
|
87
|
+
name: apiProject.name,
|
|
88
|
+
description: apiProject.description,
|
|
89
|
+
createdAt: apiProject.created_at,
|
|
90
|
+
};
|
|
91
|
+
config_1.configManager.addProject(project);
|
|
92
|
+
// Automatically select if requested
|
|
93
|
+
if (options.select) {
|
|
94
|
+
config_1.configManager.setCurrentProject(project.id);
|
|
95
|
+
logger_1.Logger.info(`Project "${projectName}" selected as current project`);
|
|
96
|
+
}
|
|
97
|
+
if (options.json) {
|
|
98
|
+
console.log(JSON.stringify(project, null, 2));
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
displayProjectInfo(project, Boolean(options.select));
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
spinner.fail('Failed to create project');
|
|
106
|
+
// Handle specific API errors
|
|
107
|
+
if (error instanceof Error) {
|
|
108
|
+
if (error.message.includes('already exists')) {
|
|
109
|
+
logger_1.Logger.error('A project with this name already exists');
|
|
110
|
+
logger_1.Logger.info('Use a different name or list existing projects with ' +
|
|
111
|
+
logger_1.Logger.highlight('kairo project list'));
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
logger_1.Logger.error('Project creation failed:', error.message);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
throw error;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
logger_1.Logger.debug('Project creation error:', error);
|
|
122
|
+
process.exit(1);
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
function displayProjectInfo(project, selected) {
|
|
126
|
+
logger_1.Logger.log('');
|
|
127
|
+
logger_1.Logger.log(logger_1.Logger.bold('✨ Project Created'));
|
|
128
|
+
logger_1.Logger.log(` Name: ${logger_1.Logger.highlight(project.name)}`);
|
|
129
|
+
logger_1.Logger.log(` ID: ${logger_1.Logger.dim(project.id)}`);
|
|
130
|
+
if (project.description) {
|
|
131
|
+
logger_1.Logger.log(` Description: ${project.description}`);
|
|
132
|
+
}
|
|
133
|
+
logger_1.Logger.log(` Created: ${new Date(project.createdAt).toLocaleString()}`);
|
|
134
|
+
if (selected) {
|
|
135
|
+
logger_1.Logger.log(` Status: ${logger_1.Logger.highlight('Current project')}`);
|
|
136
|
+
}
|
|
137
|
+
logger_1.Logger.log('');
|
|
138
|
+
logger_1.Logger.log(logger_1.Logger.bold('Next Steps:'));
|
|
139
|
+
if (!selected) {
|
|
140
|
+
logger_1.Logger.log(` • Select this project: ${logger_1.Logger.highlight(`kairo project select ${project.name}`)}`);
|
|
141
|
+
}
|
|
142
|
+
logger_1.Logger.log(` • Scan contracts: ${logger_1.Logger.highlight('kairo scan ./contracts')}`);
|
|
143
|
+
logger_1.Logger.log(` • View all projects: ${logger_1.Logger.highlight('kairo project list')}`);
|
|
144
|
+
logger_1.Logger.log('');
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/project/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/project/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,cAAc,SAKC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.projectCommand = void 0;
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const create_1 = require("./create");
|
|
6
|
+
const list_1 = require("./list");
|
|
7
|
+
const select_1 = require("./select");
|
|
8
|
+
exports.projectCommand = new commander_1.Command('project')
|
|
9
|
+
.alias('projects')
|
|
10
|
+
.description('Project management commands')
|
|
11
|
+
.addCommand(create_1.createCommand)
|
|
12
|
+
.addCommand(list_1.listCommand)
|
|
13
|
+
.addCommand(select_1.selectCommand);
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/project/index.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AACpC,qCAAyC;AACzC,iCAAqC;AACrC,qCAAyC;AAE5B,QAAA,cAAc,GAAG,IAAI,mBAAO,CAAC,SAAS,CAAC;KACjD,KAAK,CAAC,UAAU,CAAC;KACjB,WAAW,CAAC,6BAA6B,CAAC;KAC1C,UAAU,CAAC,sBAAa,CAAC;KACzB,UAAU,CAAC,kBAAW,CAAC;KACvB,UAAU,CAAC,sBAAa,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/project/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,WAAW,SAuEpB,CAAC"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.listCommand = void 0;
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const logger_1 = require("../../utils/logger");
|
|
6
|
+
const config_1 = require("../../config");
|
|
7
|
+
const api_1 = require("../../api");
|
|
8
|
+
const spinner_1 = require("../../utils/spinner");
|
|
9
|
+
exports.listCommand = new commander_1.Command('list')
|
|
10
|
+
.description('List all projects')
|
|
11
|
+
.option('--json', 'Output as JSON')
|
|
12
|
+
.option('--local-only', 'Show only locally cached projects')
|
|
13
|
+
.action(async (options) => {
|
|
14
|
+
try {
|
|
15
|
+
// Check authentication
|
|
16
|
+
if (!(await config_1.configManager.isAuthenticated())) {
|
|
17
|
+
logger_1.Logger.error('You must be logged in to list projects');
|
|
18
|
+
logger_1.Logger.info('Use ' + logger_1.Logger.highlight('kairo auth login') + ' to get started');
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
let projects = [];
|
|
22
|
+
if (options.localOnly) {
|
|
23
|
+
projects = config_1.configManager.getProjects();
|
|
24
|
+
if (options.json) {
|
|
25
|
+
console.log(JSON.stringify({ projects }, null, 2));
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
const spinner = (0, spinner_1.createSpinner)('Fetching projects...').start();
|
|
31
|
+
try {
|
|
32
|
+
const client = (0, api_1.getApiClient)();
|
|
33
|
+
const result = await client.listProjects();
|
|
34
|
+
const apiProjects = result.projects;
|
|
35
|
+
// Convert API projects to config projects format
|
|
36
|
+
projects = apiProjects.map(p => ({
|
|
37
|
+
id: p.id,
|
|
38
|
+
name: p.name,
|
|
39
|
+
description: p.description,
|
|
40
|
+
createdAt: p.created_at,
|
|
41
|
+
}));
|
|
42
|
+
// Sync with local storage
|
|
43
|
+
config_1.configManager.setProjects(projects);
|
|
44
|
+
spinner.succeed(`Found ${projects.length} project${projects.length !== 1 ? 's' : ''}`);
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
spinner.fail('Failed to fetch projects');
|
|
48
|
+
// Fallback to local projects
|
|
49
|
+
projects = config_1.configManager.getProjects();
|
|
50
|
+
if (projects.length > 0) {
|
|
51
|
+
logger_1.Logger.warn('Using locally cached projects (API unavailable)');
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
throw error;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (options.json) {
|
|
58
|
+
console.log(JSON.stringify({ projects }, null, 2));
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Display projects
|
|
63
|
+
if (projects.length === 0) {
|
|
64
|
+
displayEmptyState();
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
displayProjects(projects);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
logger_1.Logger.error('Failed to list projects:', error instanceof Error ? error.message : String(error));
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
function displayEmptyState() {
|
|
76
|
+
logger_1.Logger.log('');
|
|
77
|
+
logger_1.Logger.log(logger_1.Logger.bold('📁 No projects found'));
|
|
78
|
+
logger_1.Logger.log('');
|
|
79
|
+
logger_1.Logger.log('Get started by creating your first project:');
|
|
80
|
+
logger_1.Logger.log(` ${logger_1.Logger.highlight('kairo project create my-project')}`);
|
|
81
|
+
logger_1.Logger.log('');
|
|
82
|
+
}
|
|
83
|
+
function displayProjects(projects) {
|
|
84
|
+
const currentProject = config_1.configManager.getCurrentProject();
|
|
85
|
+
logger_1.Logger.log('');
|
|
86
|
+
logger_1.Logger.log(logger_1.Logger.bold(`📁 Projects (${projects.length})`));
|
|
87
|
+
logger_1.Logger.log('');
|
|
88
|
+
// Sort projects: current first, then by name
|
|
89
|
+
const sortedProjects = projects.sort((a, b) => {
|
|
90
|
+
if (currentProject?.id === a.id)
|
|
91
|
+
return -1;
|
|
92
|
+
if (currentProject?.id === b.id)
|
|
93
|
+
return 1;
|
|
94
|
+
return a.name.localeCompare(b.name);
|
|
95
|
+
});
|
|
96
|
+
for (const project of sortedProjects) {
|
|
97
|
+
const isCurrent = currentProject?.id === project.id;
|
|
98
|
+
const indicator = isCurrent ? '→' : ' ';
|
|
99
|
+
const nameStyle = isCurrent ? logger_1.Logger.highlight : (s) => s;
|
|
100
|
+
const statusStyle = isCurrent ? logger_1.Logger.highlight : logger_1.Logger.dim;
|
|
101
|
+
logger_1.Logger.log(`${indicator} ${nameStyle(project.name)} ${statusStyle(isCurrent ? '(current)' : '')}`);
|
|
102
|
+
logger_1.Logger.log(` ${logger_1.Logger.dim(project.id)}`);
|
|
103
|
+
if (project.description) {
|
|
104
|
+
logger_1.Logger.log(` ${logger_1.Logger.dim(project.description)}`);
|
|
105
|
+
}
|
|
106
|
+
const createdDate = new Date(project.createdAt).toLocaleDateString();
|
|
107
|
+
logger_1.Logger.log(` ${logger_1.Logger.dim(`Created: ${createdDate}`)}`);
|
|
108
|
+
logger_1.Logger.log('');
|
|
109
|
+
}
|
|
110
|
+
logger_1.Logger.log(logger_1.Logger.bold('Commands:'));
|
|
111
|
+
logger_1.Logger.log(` Select project: ${logger_1.Logger.highlight('kairo project select <name>')}`);
|
|
112
|
+
logger_1.Logger.log(` Create project: ${logger_1.Logger.highlight('kairo project create <name>')}`);
|
|
113
|
+
logger_1.Logger.log(` Scan contracts: ${logger_1.Logger.highlight('kairo scan ./contracts')}`);
|
|
114
|
+
logger_1.Logger.log('');
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/project/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../../src/commands/project/select.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,aAAa,SA2ItB,CAAC"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.selectCommand = void 0;
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const logger_1 = require("../../utils/logger");
|
|
9
|
+
const config_1 = require("../../config");
|
|
10
|
+
const api_1 = require("../../api");
|
|
11
|
+
const spinner_1 = require("../../utils/spinner");
|
|
12
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
13
|
+
exports.selectCommand = new commander_1.Command('select')
|
|
14
|
+
.argument('[name-or-id]', 'Project name or ID to select')
|
|
15
|
+
.description('Select a project as the current active project')
|
|
16
|
+
.option('--json', 'Output as JSON')
|
|
17
|
+
.action(async (nameOrId, options) => {
|
|
18
|
+
try {
|
|
19
|
+
// Check authentication
|
|
20
|
+
if (!(await config_1.configManager.isAuthenticated())) {
|
|
21
|
+
logger_1.Logger.error('You must be logged in to select projects');
|
|
22
|
+
logger_1.Logger.info('Use ' + logger_1.Logger.highlight('kairo auth login') + ' to get started');
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
let projects = [];
|
|
26
|
+
let selectedProject = null;
|
|
27
|
+
// Fetch latest projects
|
|
28
|
+
const spinner = (0, spinner_1.createSpinner)('Fetching projects...').start();
|
|
29
|
+
try {
|
|
30
|
+
const client = (0, api_1.getApiClient)();
|
|
31
|
+
const result = await client.listProjects();
|
|
32
|
+
const apiProjects = result.projects;
|
|
33
|
+
// Convert API projects to config projects format
|
|
34
|
+
projects = apiProjects.map((p) => ({
|
|
35
|
+
id: p.id,
|
|
36
|
+
name: p.name,
|
|
37
|
+
description: p.description,
|
|
38
|
+
createdAt: p.created_at,
|
|
39
|
+
}));
|
|
40
|
+
// Sync with local storage
|
|
41
|
+
config_1.configManager.setProjects(projects);
|
|
42
|
+
spinner.succeed('Projects loaded');
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
spinner.fail('Failed to fetch projects from API');
|
|
46
|
+
// Fallback to local projects
|
|
47
|
+
projects = config_1.configManager.getProjects();
|
|
48
|
+
if (projects.length > 0) {
|
|
49
|
+
logger_1.Logger.warn('Using locally cached projects');
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
logger_1.Logger.error('No projects available. Create a project first with:');
|
|
53
|
+
logger_1.Logger.info(` ${logger_1.Logger.highlight('kairo project create <name>')}`);
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (projects.length === 0) {
|
|
58
|
+
logger_1.Logger.info('No projects found. Create a project first with:');
|
|
59
|
+
logger_1.Logger.info(` ${logger_1.Logger.highlight('kairo project create <name>')}`);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
// If no name/ID provided, prompt user to select
|
|
63
|
+
if (!nameOrId) {
|
|
64
|
+
const currentProject = config_1.configManager.getCurrentProject();
|
|
65
|
+
const choices = projects.map((p) => ({
|
|
66
|
+
name: `${p.name}${currentProject?.id === p.id ? ' (current)' : ''}`,
|
|
67
|
+
value: p.id,
|
|
68
|
+
short: p.name,
|
|
69
|
+
}));
|
|
70
|
+
const answers = await inquirer_1.default.prompt([
|
|
71
|
+
{
|
|
72
|
+
type: 'list',
|
|
73
|
+
name: 'projectId',
|
|
74
|
+
message: 'Select a project:',
|
|
75
|
+
choices,
|
|
76
|
+
pageSize: Math.min(10, projects.length),
|
|
77
|
+
},
|
|
78
|
+
]);
|
|
79
|
+
selectedProject = projects.find((p) => p.id === answers.projectId) || null;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
// Find project by name or ID
|
|
83
|
+
selectedProject =
|
|
84
|
+
projects.find((p) => p.name.toLowerCase() === nameOrId.toLowerCase() || p.id === nameOrId) || null;
|
|
85
|
+
if (!selectedProject) {
|
|
86
|
+
// Try partial name match
|
|
87
|
+
const partialMatches = projects.filter((p) => p.name.toLowerCase().includes(nameOrId.toLowerCase()));
|
|
88
|
+
if (partialMatches.length === 1) {
|
|
89
|
+
selectedProject = partialMatches[0];
|
|
90
|
+
}
|
|
91
|
+
else if (partialMatches.length > 1) {
|
|
92
|
+
logger_1.Logger.error(`Multiple projects match "${nameOrId}":`);
|
|
93
|
+
for (const project of partialMatches) {
|
|
94
|
+
logger_1.Logger.log(` • ${project.name} (${project.id})`);
|
|
95
|
+
}
|
|
96
|
+
logger_1.Logger.info('Please be more specific or use the full project name');
|
|
97
|
+
process.exit(1);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
logger_1.Logger.error(`Project "${nameOrId}" not found`);
|
|
101
|
+
logger_1.Logger.info('Available projects:');
|
|
102
|
+
for (const project of projects) {
|
|
103
|
+
logger_1.Logger.log(` • ${project.name} (${project.id})`);
|
|
104
|
+
}
|
|
105
|
+
logger_1.Logger.info('Use ' + logger_1.Logger.highlight('kairo project list') + ' to see all projects');
|
|
106
|
+
process.exit(1);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (!selectedProject) {
|
|
111
|
+
logger_1.Logger.error('No project selected');
|
|
112
|
+
process.exit(1);
|
|
113
|
+
}
|
|
114
|
+
// Set as current project
|
|
115
|
+
config_1.configManager.setCurrentProject(selectedProject.id);
|
|
116
|
+
if (options.json) {
|
|
117
|
+
console.log(JSON.stringify({
|
|
118
|
+
selected: true,
|
|
119
|
+
project: selectedProject,
|
|
120
|
+
}, null, 2));
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
logger_1.Logger.success(`Project "${selectedProject.name}" selected`);
|
|
124
|
+
displayProjectInfo(selectedProject);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
logger_1.Logger.error('Failed to select project:', error instanceof Error ? error.message : String(error));
|
|
129
|
+
process.exit(1);
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
function displayProjectInfo(project) {
|
|
133
|
+
logger_1.Logger.log('');
|
|
134
|
+
logger_1.Logger.log(logger_1.Logger.bold('📁 Current Project'));
|
|
135
|
+
logger_1.Logger.log(` Name: ${logger_1.Logger.highlight(project.name)}`);
|
|
136
|
+
logger_1.Logger.log(` ID: ${logger_1.Logger.dim(project.id)}`);
|
|
137
|
+
if (project.description) {
|
|
138
|
+
logger_1.Logger.log(` Description: ${project.description}`);
|
|
139
|
+
}
|
|
140
|
+
logger_1.Logger.log(` Created: ${new Date(project.createdAt).toLocaleDateString()}`);
|
|
141
|
+
logger_1.Logger.log('');
|
|
142
|
+
logger_1.Logger.log(logger_1.Logger.bold('Next Steps:'));
|
|
143
|
+
logger_1.Logger.log(` • Scan contracts: ${logger_1.Logger.highlight('kairo scan ./contracts')}`);
|
|
144
|
+
logger_1.Logger.log(` • View project info: ${logger_1.Logger.highlight('kairo whoami')}`);
|
|
145
|
+
logger_1.Logger.log('');
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=select.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.js","sourceRoot":"","sources":["../../../src/commands/project/select.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6BpC,eAAO,MAAM,WAAW,SAiBpB,CAAC"}
|