@helmai/cli 1.0.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/bin/helm.js +3 -0
- package/dist/commands/capture.d.ts +6 -0
- package/dist/commands/capture.d.ts.map +1 -0
- package/dist/commands/capture.js +148 -0
- package/dist/commands/capture.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +220 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/inject.d.ts +6 -0
- package/dist/commands/inject.d.ts.map +1 -0
- package/dist/commands/inject.js +102 -0
- package/dist/commands/inject.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +79 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api.d.ts +18 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +66 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/config.d.ts +13 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +105 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/detect.d.ts +5 -0
- package/dist/lib/detect.d.ts.map +1 -0
- package/dist/lib/detect.js +143 -0
- package/dist/lib/detect.js.map +1 -0
- package/dist/lib/hooks.d.ts +10 -0
- package/dist/lib/hooks.d.ts.map +1 -0
- package/dist/lib/hooks.js +180 -0
- package/dist/lib/hooks.js.map +1 -0
- package/dist/types.d.ts +82 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +44 -0
package/bin/helm.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../src/commands/capture.ts"],"names":[],"mappings":"AAGA,UAAU,cAAc;IACtB,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAC9B;AAQD,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA0C3E"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.captureCommand = captureCommand;
|
|
37
|
+
const api = __importStar(require("../lib/api.js"));
|
|
38
|
+
const config_js_1 = require("../lib/config.js");
|
|
39
|
+
async function captureCommand(options) {
|
|
40
|
+
// Read response from stdin
|
|
41
|
+
let response = '';
|
|
42
|
+
if (!process.stdin.isTTY) {
|
|
43
|
+
response = await readStdin();
|
|
44
|
+
}
|
|
45
|
+
if (!response) {
|
|
46
|
+
process.exit(0);
|
|
47
|
+
}
|
|
48
|
+
const credentials = (0, config_js_1.loadCredentials)();
|
|
49
|
+
if (!credentials) {
|
|
50
|
+
// No credentials, just exit silently
|
|
51
|
+
process.exit(0);
|
|
52
|
+
}
|
|
53
|
+
// Get the prompt ID from environment or try to find it
|
|
54
|
+
const promptId = process.env.HELM_LAST_PROMPT_ID;
|
|
55
|
+
if (!promptId) {
|
|
56
|
+
// No prompt ID, can't capture
|
|
57
|
+
process.exit(0);
|
|
58
|
+
}
|
|
59
|
+
try {
|
|
60
|
+
const codeBlocks = extractCodeBlocks(response);
|
|
61
|
+
if (codeBlocks.length === 0) {
|
|
62
|
+
// No code blocks to capture
|
|
63
|
+
process.exit(0);
|
|
64
|
+
}
|
|
65
|
+
await api.capture({
|
|
66
|
+
prompt_id: promptId,
|
|
67
|
+
code_blocks: codeBlocks,
|
|
68
|
+
raw_response: response.length < 50000 ? response : null, // Don't store huge responses
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
// Silently fail - don't interrupt user flow
|
|
73
|
+
process.exit(0);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function extractCodeBlocks(text) {
|
|
77
|
+
const codeBlocks = [];
|
|
78
|
+
// Match markdown code blocks: ```language\ncode\n```
|
|
79
|
+
const codeBlockRegex = /```(\w*)\n([\s\S]*?)```/g;
|
|
80
|
+
let match;
|
|
81
|
+
while ((match = codeBlockRegex.exec(text)) !== null) {
|
|
82
|
+
const language = match[1] || 'text';
|
|
83
|
+
const content = match[2].trim();
|
|
84
|
+
if (content.length > 0) {
|
|
85
|
+
// Try to extract file hint from content or surrounding context
|
|
86
|
+
const fileHint = extractFileHint(text, match.index, language);
|
|
87
|
+
codeBlocks.push({
|
|
88
|
+
language,
|
|
89
|
+
content,
|
|
90
|
+
file_hint: fileHint,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return codeBlocks;
|
|
95
|
+
}
|
|
96
|
+
function extractFileHint(text, codeBlockStart, language) {
|
|
97
|
+
// Look for file paths in the text before the code block
|
|
98
|
+
const textBefore = text.substring(Math.max(0, codeBlockStart - 200), codeBlockStart);
|
|
99
|
+
// Common patterns for file references
|
|
100
|
+
const patterns = [
|
|
101
|
+
// "file: path/to/file.ext"
|
|
102
|
+
/(?:file|path):\s*[`"]?([^\s`"]+\.\w+)[`"]?/i,
|
|
103
|
+
// "`path/to/file.ext`"
|
|
104
|
+
/`([a-zA-Z0-9_\-/.]+\.\w+)`/,
|
|
105
|
+
// "in path/to/file.ext"
|
|
106
|
+
/\bin\s+[`"]?([a-zA-Z0-9_\-/.]+\.\w+)[`"]?/i,
|
|
107
|
+
// "Create path/to/file.ext"
|
|
108
|
+
/(?:create|edit|update|modify)\s+[`"]?([a-zA-Z0-9_\-/.]+\.\w+)[`"]?/i,
|
|
109
|
+
];
|
|
110
|
+
for (const pattern of patterns) {
|
|
111
|
+
const match = textBefore.match(pattern);
|
|
112
|
+
if (match) {
|
|
113
|
+
return match[1];
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// Try to infer from language
|
|
117
|
+
const languageExtensions = {
|
|
118
|
+
php: '.php',
|
|
119
|
+
typescript: '.ts',
|
|
120
|
+
javascript: '.js',
|
|
121
|
+
python: '.py',
|
|
122
|
+
rust: '.rs',
|
|
123
|
+
go: '.go',
|
|
124
|
+
ruby: '.rb',
|
|
125
|
+
};
|
|
126
|
+
// Can't determine file hint
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
async function readStdin() {
|
|
130
|
+
return new Promise((resolve) => {
|
|
131
|
+
let data = '';
|
|
132
|
+
process.stdin.setEncoding('utf8');
|
|
133
|
+
process.stdin.on('readable', () => {
|
|
134
|
+
let chunk;
|
|
135
|
+
while ((chunk = process.stdin.read()) !== null) {
|
|
136
|
+
data += chunk;
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
process.stdin.on('end', () => {
|
|
140
|
+
resolve(data);
|
|
141
|
+
});
|
|
142
|
+
// Set a timeout in case stdin never closes
|
|
143
|
+
setTimeout(() => {
|
|
144
|
+
resolve(data);
|
|
145
|
+
}, 2000);
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=capture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/commands/capture.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AASA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CA0EjD"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.initCommand = initCommand;
|
|
40
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
41
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
42
|
+
const ora_1 = __importDefault(require("ora"));
|
|
43
|
+
const api = __importStar(require("../lib/api.js"));
|
|
44
|
+
const config_js_1 = require("../lib/config.js");
|
|
45
|
+
const detect_js_1 = require("../lib/detect.js");
|
|
46
|
+
const hooks_js_1 = require("../lib/hooks.js");
|
|
47
|
+
async function initCommand() {
|
|
48
|
+
console.log(chalk_1.default.cyan('\nš Welcome to Helm!\n'));
|
|
49
|
+
// Step 1: Detect IDEs
|
|
50
|
+
const spinner = (0, ora_1.default)('Detecting AI coding assistants...').start();
|
|
51
|
+
const ides = (0, detect_js_1.detectIDEs)();
|
|
52
|
+
const detectedIDEs = ides.filter(ide => ide.detected);
|
|
53
|
+
spinner.succeed(`Found ${detectedIDEs.length} IDE(s)`);
|
|
54
|
+
for (const ide of detectedIDEs) {
|
|
55
|
+
console.log(chalk_1.default.green(` ā ${ide.displayName}`));
|
|
56
|
+
}
|
|
57
|
+
if (detectedIDEs.length === 0) {
|
|
58
|
+
console.log(chalk_1.default.yellow(' No supported IDEs detected. You can still use Helm via the CLI.'));
|
|
59
|
+
}
|
|
60
|
+
// Step 2: Check for existing credentials
|
|
61
|
+
const existingCredentials = (0, config_js_1.loadCredentials)();
|
|
62
|
+
if (existingCredentials) {
|
|
63
|
+
const { useExisting } = await inquirer_1.default.prompt([
|
|
64
|
+
{
|
|
65
|
+
type: 'confirm',
|
|
66
|
+
name: 'useExisting',
|
|
67
|
+
message: 'Found existing Helm credentials. Use them?',
|
|
68
|
+
default: true,
|
|
69
|
+
},
|
|
70
|
+
]);
|
|
71
|
+
if (useExisting) {
|
|
72
|
+
await verifyAndSetupHooks(detectedIDEs);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Step 3: Authentication
|
|
77
|
+
console.log(chalk_1.default.cyan('\nš Connect to Helm:\n'));
|
|
78
|
+
const { authChoice } = await inquirer_1.default.prompt([
|
|
79
|
+
{
|
|
80
|
+
type: 'list',
|
|
81
|
+
name: 'authChoice',
|
|
82
|
+
message: 'How would you like to connect?',
|
|
83
|
+
choices: [
|
|
84
|
+
{ name: 'Create new account', value: 'register' },
|
|
85
|
+
{ name: 'I have a Helm account', value: 'login' },
|
|
86
|
+
],
|
|
87
|
+
},
|
|
88
|
+
]);
|
|
89
|
+
if (authChoice === 'register') {
|
|
90
|
+
await handleRegister();
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
await handleLogin();
|
|
94
|
+
}
|
|
95
|
+
// Step 4: Setup hooks
|
|
96
|
+
await setupHooks(detectedIDEs);
|
|
97
|
+
// Step 5: Scan repo
|
|
98
|
+
console.log(chalk_1.default.cyan('\nš Scanning repository...\n'));
|
|
99
|
+
const stack = (0, detect_js_1.detectStack)();
|
|
100
|
+
if (stack.length > 0) {
|
|
101
|
+
console.log(' Detected:');
|
|
102
|
+
for (const s of stack) {
|
|
103
|
+
console.log(chalk_1.default.green(` ⢠${s}`));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
console.log(chalk_1.default.yellow(' No specific stack detected'));
|
|
108
|
+
}
|
|
109
|
+
// Done!
|
|
110
|
+
console.log(chalk_1.default.green('\nā
Helm is ready!'));
|
|
111
|
+
console.log(chalk_1.default.gray(' Your prompts now include intelligent context.\n'));
|
|
112
|
+
}
|
|
113
|
+
async function handleRegister() {
|
|
114
|
+
const answers = await inquirer_1.default.prompt([
|
|
115
|
+
{
|
|
116
|
+
type: 'input',
|
|
117
|
+
name: 'name',
|
|
118
|
+
message: 'Your name:',
|
|
119
|
+
validate: (input) => input.length > 0 || 'Name is required',
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
type: 'input',
|
|
123
|
+
name: 'email',
|
|
124
|
+
message: 'Email:',
|
|
125
|
+
validate: (input) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(input) || 'Please enter a valid email',
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
type: 'password',
|
|
129
|
+
name: 'password',
|
|
130
|
+
message: 'Password:',
|
|
131
|
+
mask: '*',
|
|
132
|
+
validate: (input) => input.length >= 8 || 'Password must be at least 8 characters',
|
|
133
|
+
},
|
|
134
|
+
]);
|
|
135
|
+
const spinner = (0, ora_1.default)('Creating your account...').start();
|
|
136
|
+
try {
|
|
137
|
+
const result = await api.register(answers.name, answers.email, answers.password);
|
|
138
|
+
const credentials = {
|
|
139
|
+
api_key: result.api_key,
|
|
140
|
+
organization_id: result.organization.id,
|
|
141
|
+
user_id: result.user.id,
|
|
142
|
+
api_url: (0, config_js_1.getApiUrl)(),
|
|
143
|
+
};
|
|
144
|
+
(0, config_js_1.saveCredentials)(credentials);
|
|
145
|
+
spinner.succeed('Account created!');
|
|
146
|
+
console.log(chalk_1.default.green(` Organization: ${result.organization.name}`));
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
spinner.fail('Failed to create account');
|
|
150
|
+
console.log(chalk_1.default.red(` ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
151
|
+
process.exit(1);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
async function handleLogin() {
|
|
155
|
+
const answers = await inquirer_1.default.prompt([
|
|
156
|
+
{
|
|
157
|
+
type: 'input',
|
|
158
|
+
name: 'email',
|
|
159
|
+
message: 'Email:',
|
|
160
|
+
validate: (input) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(input) || 'Please enter a valid email',
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
type: 'password',
|
|
164
|
+
name: 'password',
|
|
165
|
+
message: 'Password:',
|
|
166
|
+
mask: '*',
|
|
167
|
+
},
|
|
168
|
+
]);
|
|
169
|
+
const spinner = (0, ora_1.default)('Logging in...').start();
|
|
170
|
+
try {
|
|
171
|
+
const result = await api.login(answers.email, answers.password);
|
|
172
|
+
const credentials = {
|
|
173
|
+
api_key: result.api_key,
|
|
174
|
+
organization_id: result.organization.id,
|
|
175
|
+
user_id: result.user.id,
|
|
176
|
+
api_url: (0, config_js_1.getApiUrl)(),
|
|
177
|
+
};
|
|
178
|
+
(0, config_js_1.saveCredentials)(credentials);
|
|
179
|
+
spinner.succeed('Logged in!');
|
|
180
|
+
console.log(chalk_1.default.green(` Organization: ${result.organization.name}`));
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
spinner.fail('Failed to log in');
|
|
184
|
+
console.log(chalk_1.default.red(` ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
185
|
+
process.exit(1);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
async function setupHooks(detectedIDEs) {
|
|
189
|
+
if (detectedIDEs.length === 0) {
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
console.log(chalk_1.default.cyan('\nš§ Setting up IDE hooks...\n'));
|
|
193
|
+
for (const ide of detectedIDEs) {
|
|
194
|
+
const result = (0, hooks_js_1.installHooks)(ide.name);
|
|
195
|
+
if (result.success) {
|
|
196
|
+
console.log(chalk_1.default.green(` ā ${ide.displayName} hooks installed`));
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
console.log(chalk_1.default.yellow(` ā ${ide.displayName}: ${result.message}`));
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
async function verifyAndSetupHooks(detectedIDEs) {
|
|
204
|
+
const spinner = (0, ora_1.default)('Verifying credentials...').start();
|
|
205
|
+
try {
|
|
206
|
+
const result = await api.me();
|
|
207
|
+
spinner.succeed(`Connected as ${result.user.name}`);
|
|
208
|
+
console.log(chalk_1.default.green(` Organization: ${result.organization.name}`));
|
|
209
|
+
await setupHooks(detectedIDEs);
|
|
210
|
+
console.log(chalk_1.default.green('\nā
Helm is ready!'));
|
|
211
|
+
console.log(chalk_1.default.gray(' Your prompts now include intelligent context.\n'));
|
|
212
|
+
}
|
|
213
|
+
catch (error) {
|
|
214
|
+
spinner.fail('Failed to verify credentials');
|
|
215
|
+
console.log(chalk_1.default.red(` ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
216
|
+
console.log(chalk_1.default.yellow(' Run `helm init` again to re-authenticate.\n'));
|
|
217
|
+
process.exit(1);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject.d.ts","sourceRoot":"","sources":["../../src/commands/inject.ts"],"names":[],"mappings":"AAKA,UAAU,aAAa;IACrB,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAC9B;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA+CzE"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.injectCommand = injectCommand;
|
|
37
|
+
const api = __importStar(require("../lib/api.js"));
|
|
38
|
+
const config_js_1 = require("../lib/config.js");
|
|
39
|
+
const detect_js_1 = require("../lib/detect.js");
|
|
40
|
+
const crypto_1 = require("crypto");
|
|
41
|
+
async function injectCommand(options) {
|
|
42
|
+
// Read prompt from stdin
|
|
43
|
+
let prompt = '';
|
|
44
|
+
// Check if there's input on stdin
|
|
45
|
+
if (!process.stdin.isTTY) {
|
|
46
|
+
prompt = await readStdin();
|
|
47
|
+
}
|
|
48
|
+
if (!prompt) {
|
|
49
|
+
// No input, nothing to do
|
|
50
|
+
process.exit(0);
|
|
51
|
+
}
|
|
52
|
+
const credentials = (0, config_js_1.loadCredentials)();
|
|
53
|
+
if (!credentials) {
|
|
54
|
+
// No credentials, pass through unchanged
|
|
55
|
+
console.log(prompt);
|
|
56
|
+
process.exit(0);
|
|
57
|
+
}
|
|
58
|
+
try {
|
|
59
|
+
const cwd = process.cwd();
|
|
60
|
+
const stack = (0, detect_js_1.detectStack)(cwd);
|
|
61
|
+
const branch = (0, detect_js_1.getCurrentBranch)(cwd);
|
|
62
|
+
const result = await api.inject({
|
|
63
|
+
prompt,
|
|
64
|
+
context: {
|
|
65
|
+
cwd,
|
|
66
|
+
detected_stack: stack,
|
|
67
|
+
session_id: process.env.HELM_SESSION_ID || (0, crypto_1.randomUUID)(),
|
|
68
|
+
branch: branch || undefined,
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
// Store prompt_id for capture command
|
|
72
|
+
if (result.prompt_id) {
|
|
73
|
+
process.env.HELM_LAST_PROMPT_ID = result.prompt_id;
|
|
74
|
+
}
|
|
75
|
+
// Output enhanced prompt
|
|
76
|
+
console.log(result.enhanced_prompt);
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// On error, pass through original prompt
|
|
80
|
+
console.log(prompt);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
async function readStdin() {
|
|
84
|
+
return new Promise((resolve) => {
|
|
85
|
+
let data = '';
|
|
86
|
+
process.stdin.setEncoding('utf8');
|
|
87
|
+
process.stdin.on('readable', () => {
|
|
88
|
+
let chunk;
|
|
89
|
+
while ((chunk = process.stdin.read()) !== null) {
|
|
90
|
+
data += chunk;
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
process.stdin.on('end', () => {
|
|
94
|
+
resolve(data.trim());
|
|
95
|
+
});
|
|
96
|
+
// Set a timeout in case stdin never closes
|
|
97
|
+
setTimeout(() => {
|
|
98
|
+
resolve(data.trim());
|
|
99
|
+
}, 2000);
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=inject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../../src/commands/inject.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,sCA+CC;AAxDD,mDAAqC;AACrC,gDAAmD;AACnD,gDAAiE;AACjE,mCAAoC;AAM7B,KAAK,UAAU,aAAa,CAAC,OAAsB;IACxD,yBAAyB;IACzB,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,kCAAkC;IAClC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;IAC7B,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,0BAA0B;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,WAAW,GAAG,IAAA,2BAAe,GAAE,CAAC;IACtC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,yCAAyC;QACzC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,IAAA,uBAAW,EAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAA,4BAAgB,EAAC,GAAG,CAAC,CAAC;QAErC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC;YAC9B,MAAM;YACN,OAAO,EAAE;gBACP,GAAG;gBACH,cAAc,EAAE,KAAK;gBACrB,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAA,mBAAU,GAAE;gBACvD,MAAM,EAAE,MAAM,IAAI,SAAS;aAC5B;SACF,CAAC,CAAC;QAEH,sCAAsC;QACtC,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,MAAM,CAAC,SAAS,CAAC;QACrD,CAAC;QAED,yBAAyB;QACzB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,yCAAyC;QACzC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS;IACtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,IAAI,GAAG,EAAE,CAAC;QAEd,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAElC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE;YAChC,IAAI,KAAK,CAAC;YACV,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC/C,IAAI,IAAI,KAAK,CAAC;YAChB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YAC3B,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,2CAA2C;QAC3C,UAAU,CAAC,GAAG,EAAE;YACd,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACvB,CAAC,EAAE,IAAI,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const init_js_1 = require("./commands/init.js");
|
|
6
|
+
const inject_js_1 = require("./commands/inject.js");
|
|
7
|
+
const capture_js_1 = require("./commands/capture.js");
|
|
8
|
+
const program = new commander_1.Command();
|
|
9
|
+
program
|
|
10
|
+
.name('helm')
|
|
11
|
+
.description('Intelligent context injection for AI coding assistants')
|
|
12
|
+
.version('0.1.0');
|
|
13
|
+
program
|
|
14
|
+
.command('init')
|
|
15
|
+
.description('Set up Helm in your environment')
|
|
16
|
+
.action(async () => {
|
|
17
|
+
await (0, init_js_1.initCommand)();
|
|
18
|
+
});
|
|
19
|
+
program
|
|
20
|
+
.command('inject')
|
|
21
|
+
.description('Inject context into a prompt (used by IDE hooks)')
|
|
22
|
+
.option('--format <format>', 'Output format (claude, cursor)', 'claude')
|
|
23
|
+
.action(async (options) => {
|
|
24
|
+
await (0, inject_js_1.injectCommand)(options);
|
|
25
|
+
});
|
|
26
|
+
program
|
|
27
|
+
.command('capture')
|
|
28
|
+
.description('Capture AI response (used by IDE hooks)')
|
|
29
|
+
.option('--format <format>', 'Input format (claude, cursor)', 'claude')
|
|
30
|
+
.action(async (options) => {
|
|
31
|
+
await (0, capture_js_1.captureCommand)(options);
|
|
32
|
+
});
|
|
33
|
+
program
|
|
34
|
+
.command('status')
|
|
35
|
+
.description('Show current Helm configuration')
|
|
36
|
+
.action(async () => {
|
|
37
|
+
const { loadCredentials } = await import('./lib/config.js');
|
|
38
|
+
const { detectIDEs, detectStack } = await import('./lib/detect.js');
|
|
39
|
+
const chalk = (await import('chalk')).default;
|
|
40
|
+
const credentials = loadCredentials();
|
|
41
|
+
console.log(chalk.cyan('\nš§ Helm Status\n'));
|
|
42
|
+
if (credentials) {
|
|
43
|
+
console.log(chalk.green('ā Authenticated'));
|
|
44
|
+
console.log(` Organization ID: ${credentials.organization_id}`);
|
|
45
|
+
console.log(` API URL: ${credentials.api_url}`);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
console.log(chalk.yellow('ā Not authenticated'));
|
|
49
|
+
console.log(' Run `helm init` to get started');
|
|
50
|
+
}
|
|
51
|
+
console.log(chalk.cyan('\nš± IDEs:\n'));
|
|
52
|
+
const ides = detectIDEs();
|
|
53
|
+
for (const ide of ides) {
|
|
54
|
+
const status = ide.detected ? chalk.green('ā') : chalk.gray('ā');
|
|
55
|
+
console.log(` ${status} ${ide.displayName}`);
|
|
56
|
+
}
|
|
57
|
+
console.log(chalk.cyan('\nš Current Directory Stack:\n'));
|
|
58
|
+
const stack = detectStack();
|
|
59
|
+
if (stack.length > 0) {
|
|
60
|
+
for (const s of stack) {
|
|
61
|
+
console.log(chalk.green(` ⢠${s}`));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
console.log(chalk.gray(' No specific stack detected'));
|
|
66
|
+
}
|
|
67
|
+
console.log('');
|
|
68
|
+
});
|
|
69
|
+
program
|
|
70
|
+
.command('logout')
|
|
71
|
+
.description('Clear Helm credentials')
|
|
72
|
+
.action(async () => {
|
|
73
|
+
const { clearCredentials } = await import('./lib/config.js');
|
|
74
|
+
const chalk = (await import('chalk')).default;
|
|
75
|
+
clearCredentials();
|
|
76
|
+
console.log(chalk.green('\nā Logged out successfully\n'));
|
|
77
|
+
});
|
|
78
|
+
program.parse();
|
|
79
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { RegisterResponse, LoginResponse, InjectRequest, InjectResponse, CaptureRequest, CaptureResponse } from '../types.js';
|
|
2
|
+
export declare function register(name: string, email: string, password: string): Promise<RegisterResponse>;
|
|
3
|
+
export declare function login(email: string, password: string): Promise<LoginResponse>;
|
|
4
|
+
export declare function inject(data: InjectRequest): Promise<InjectResponse>;
|
|
5
|
+
export declare function capture(data: CaptureRequest): Promise<CaptureResponse>;
|
|
6
|
+
export declare function me(): Promise<{
|
|
7
|
+
user: {
|
|
8
|
+
id: string;
|
|
9
|
+
name: string;
|
|
10
|
+
email: string;
|
|
11
|
+
};
|
|
12
|
+
organization: {
|
|
13
|
+
id: string;
|
|
14
|
+
name: string;
|
|
15
|
+
slug: string;
|
|
16
|
+
};
|
|
17
|
+
}>;
|
|
18
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,cAAc,EACd,cAAc,EACd,eAAe,EAChB,MAAM,aAAa,CAAC;AA4CrB,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,CAAC,CAU3B;AAED,wBAAsB,KAAK,CACzB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,aAAa,CAAC,CAKxB;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAKzE;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAK5E;AAED,wBAAsB,EAAE,IAAI,OAAO,CAAC;IAAE,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,YAAY,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC,CAEnJ"}
|