@helmai/cli 1.0.0 → 1.0.2

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.
@@ -1 +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"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAWA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CA8FjD"}
@@ -42,6 +42,8 @@ const inquirer_1 = __importDefault(require("inquirer"));
42
42
  const ora_1 = __importDefault(require("ora"));
43
43
  const api = __importStar(require("../lib/api.js"));
44
44
  const config_js_1 = require("../lib/config.js");
45
+ const fs = __importStar(require("fs"));
46
+ const path = __importStar(require("path"));
45
47
  const detect_js_1 = require("../lib/detect.js");
46
48
  const hooks_js_1 = require("../lib/hooks.js");
47
49
  async function initCommand() {
@@ -73,24 +75,43 @@ async function initCommand() {
73
75
  return;
74
76
  }
75
77
  }
76
- // Step 3: Authentication
77
- console.log(chalk_1.default.cyan('\nšŸ”‘ Connect to Helm:\n'));
78
- const { authChoice } = await inquirer_1.default.prompt([
78
+ // Step 3: Choose mode
79
+ console.log(chalk_1.default.cyan('\n🧠 Choose mode:\n'));
80
+ const { mode } = await inquirer_1.default.prompt([
79
81
  {
80
82
  type: 'list',
81
- name: 'authChoice',
82
- message: 'How would you like to connect?',
83
+ name: 'mode',
84
+ message: 'How do you want to run Helm?',
83
85
  choices: [
84
- { name: 'Create new account', value: 'register' },
85
- { name: 'I have a Helm account', value: 'login' },
86
+ { name: 'Local-only (recommended for beta) — no account required', value: 'local' },
87
+ { name: 'Connect to Helm Cloud (requires account)', value: 'cloud' },
86
88
  ],
89
+ default: 'local',
87
90
  },
88
91
  ]);
89
- if (authChoice === 'register') {
90
- await handleRegister();
92
+ if (mode === 'cloud') {
93
+ console.log(chalk_1.default.cyan('\nšŸ”‘ Connect to Helm:\n'));
94
+ const { authChoice } = await inquirer_1.default.prompt([
95
+ {
96
+ type: 'list',
97
+ name: 'authChoice',
98
+ message: 'How would you like to connect?',
99
+ choices: [
100
+ { name: 'Create new account', value: 'register' },
101
+ { name: 'I have a Helm account', value: 'login' },
102
+ ],
103
+ },
104
+ ]);
105
+ if (authChoice === 'register') {
106
+ await handleRegister();
107
+ }
108
+ else {
109
+ await handleLogin();
110
+ }
91
111
  }
92
112
  else {
93
- await handleLogin();
113
+ console.log(chalk_1.default.green('āœ“ Local-only mode enabled'));
114
+ await ensureProjectRulesTemplate(process.cwd());
94
115
  }
95
116
  // Step 4: Setup hooks
96
117
  await setupHooks(detectedIDEs);
@@ -185,6 +206,17 @@ async function handleLogin() {
185
206
  process.exit(1);
186
207
  }
187
208
  }
209
+ async function ensureProjectRulesTemplate(cwd) {
210
+ const helmDir = path.join(cwd, '.helm');
211
+ const rulesPath = path.join(helmDir, 'rules.md');
212
+ if (!fs.existsSync(helmDir)) {
213
+ fs.mkdirSync(helmDir, { recursive: true });
214
+ }
215
+ if (!fs.existsSync(rulesPath)) {
216
+ const template = `# Helm Rules (Local Beta)\n\nAdd section markers so Helm can inject only what matches the prompt.\n\n## Testing\n<!-- helm:section:testing keywords:test,tests,pest,coverage -->\n- Use the existing test patterns in this repo.\n- Prefer factories.\n\n## API\n<!-- helm:section:api keywords:api,endpoint,controller,route -->\n- Keep endpoints versioned (e.g. /api/v1).\n\n## Frontend\n<!-- helm:section:frontend keywords:react,inertia,component,ui,tailwind -->\n- Prefer existing components/patterns.\n`;
217
+ fs.writeFileSync(rulesPath, template);
218
+ }
219
+ }
188
220
  async function setupHooks(detectedIDEs) {
189
221
  if (detectedIDEs.length === 0) {
190
222
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  interface InjectOptions {
2
2
  format?: 'claude' | 'cursor';
3
+ local?: boolean;
3
4
  }
4
5
  export declare function injectCommand(options: InjectOptions): Promise<void>;
5
6
  export {};
@@ -1 +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"}
1
+ {"version":3,"file":"inject.d.ts","sourceRoot":"","sources":["../../src/commands/inject.ts"],"names":[],"mappings":"AAQA,UAAU,aAAa;IACrB,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA+CzE"}
@@ -38,25 +38,27 @@ const api = __importStar(require("../lib/api.js"));
38
38
  const config_js_1 = require("../lib/config.js");
39
39
  const detect_js_1 = require("../lib/detect.js");
40
40
  const crypto_1 = require("crypto");
41
+ const fs = __importStar(require("fs"));
42
+ const local_rules_js_1 = require("../lib/local-rules.js");
43
+ const knowledge_js_1 = require("../lib/knowledge.js");
41
44
  async function injectCommand(options) {
42
- // Read prompt from stdin
43
45
  let prompt = '';
44
- // Check if there's input on stdin
45
46
  if (!process.stdin.isTTY) {
46
47
  prompt = await readStdin();
47
48
  }
48
49
  if (!prompt) {
49
- // No input, nothing to do
50
50
  process.exit(0);
51
51
  }
52
+ const cwd = process.cwd();
53
+ // Local-only mode is the beta default: if not authenticated (or user forces it), we still inject using local rules + knowledge.
52
54
  const credentials = (0, config_js_1.loadCredentials)();
53
- if (!credentials) {
54
- // No credentials, pass through unchanged
55
- console.log(prompt);
56
- process.exit(0);
55
+ const forceLocal = Boolean(options.local) || !credentials;
56
+ if (forceLocal) {
57
+ const enhanced = buildLocalEnhancedPrompt({ cwd, prompt });
58
+ console.log(enhanced);
59
+ return;
57
60
  }
58
61
  try {
59
- const cwd = process.cwd();
60
62
  const stack = (0, detect_js_1.detectStack)(cwd);
61
63
  const branch = (0, detect_js_1.getCurrentBranch)(cwd);
62
64
  const result = await api.inject({
@@ -68,17 +70,50 @@ async function injectCommand(options) {
68
70
  branch: branch || undefined,
69
71
  },
70
72
  });
71
- // Store prompt_id for capture command
72
73
  if (result.prompt_id) {
73
74
  process.env.HELM_LAST_PROMPT_ID = result.prompt_id;
74
75
  }
75
- // Output enhanced prompt
76
76
  console.log(result.enhanced_prompt);
77
77
  }
78
78
  catch {
79
- // On error, pass through original prompt
80
- console.log(prompt);
79
+ // fallback to local injection rather than passthrough
80
+ const enhanced = buildLocalEnhancedPrompt({ cwd, prompt });
81
+ console.log(enhanced);
82
+ }
83
+ }
84
+ function buildLocalEnhancedPrompt(input) {
85
+ const rulesFile = (0, local_rules_js_1.findRulesFile)(input.cwd);
86
+ let sectionsText = '';
87
+ if (rulesFile) {
88
+ try {
89
+ const raw = fs.readFileSync(rulesFile, 'utf-8');
90
+ const sections = (0, local_rules_js_1.parseRuleSections)(raw);
91
+ const relevant = (0, local_rules_js_1.selectRelevantSections)(input.prompt, sections, 4);
92
+ if (relevant.length > 0) {
93
+ sectionsText = relevant
94
+ .map(s => `### ${s.id}\n${s.content.trim()}`)
95
+ .join('\n\n');
96
+ }
97
+ }
98
+ catch {
99
+ // ignore
100
+ }
101
+ }
102
+ const knowledge = (0, knowledge_js_1.selectRelevantKnowledge)(input.prompt, (0, knowledge_js_1.loadKnowledge)(), 3);
103
+ const knowledgeText = knowledge
104
+ .map(k => `### ${k.title}${k.tags.length ? ` (tags: ${k.tags.join(', ')})` : ''}\n${k.content.trim()}`)
105
+ .join('\n\n');
106
+ const blocks = [];
107
+ if (sectionsText) {
108
+ blocks.push(`## Rules\n${sectionsText}`);
109
+ }
110
+ if (knowledgeText) {
111
+ blocks.push(`## Knowledge\n${knowledgeText}`);
112
+ }
113
+ if (blocks.length === 0) {
114
+ return input.prompt;
81
115
  }
116
+ return `<helm>\n${blocks.join('\n\n')}\n</helm>\n\n${input.prompt}`;
82
117
  }
83
118
  async function readStdin() {
84
119
  return new Promise((resolve) => {
@@ -1 +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"}
1
+ {"version":3,"file":"inject.js","sourceRoot":"","sources":["../../src/commands/inject.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ interface SaveOptions {
2
+ tags?: string;
3
+ }
4
+ export declare function saveCommand(titleArg: string | undefined, options: SaveOptions): Promise<void>;
5
+ export {};
6
+ //# sourceMappingURL=save.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../../src/commands/save.ts"],"names":[],"mappings":"AAIA,UAAU,WAAW;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA4CnG"}
@@ -0,0 +1,66 @@
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.saveCommand = saveCommand;
7
+ const inquirer_1 = __importDefault(require("inquirer"));
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const knowledge_js_1 = require("../lib/knowledge.js");
10
+ async function saveCommand(titleArg, options) {
11
+ let title = titleArg?.trim() ?? '';
12
+ // Prefer stdin content when piped
13
+ let content = '';
14
+ if (!process.stdin.isTTY) {
15
+ content = await readStdin();
16
+ }
17
+ if (!title) {
18
+ const a = await inquirer_1.default.prompt([
19
+ {
20
+ type: 'input',
21
+ name: 'title',
22
+ message: 'Title:',
23
+ validate: (input) => input.trim().length > 0 || 'Title is required',
24
+ },
25
+ ]);
26
+ title = a.title.trim();
27
+ }
28
+ if (!content) {
29
+ const a = await inquirer_1.default.prompt([
30
+ {
31
+ type: 'editor',
32
+ name: 'content',
33
+ message: 'Paste your knowledge snippet (will open editor):',
34
+ validate: (input) => input.trim().length > 0 || 'Content is required',
35
+ },
36
+ ]);
37
+ content = a.content.trim();
38
+ }
39
+ const tags = (options.tags ?? '')
40
+ .split(',')
41
+ .map(t => t.trim())
42
+ .filter(Boolean);
43
+ const entry = (0, knowledge_js_1.saveKnowledgeEntry)({ title, content, tags });
44
+ console.log(chalk_1.default.green(`\nāœ“ Saved knowledge: ${entry.title}`));
45
+ if (entry.tags.length) {
46
+ console.log(chalk_1.default.gray(` tags: ${entry.tags.join(', ')}`));
47
+ }
48
+ console.log('');
49
+ }
50
+ async function readStdin() {
51
+ return new Promise((resolve) => {
52
+ let data = '';
53
+ process.stdin.setEncoding('utf8');
54
+ process.stdin.on('readable', () => {
55
+ let chunk;
56
+ while ((chunk = process.stdin.read()) !== null) {
57
+ data += chunk;
58
+ }
59
+ });
60
+ process.stdin.on('end', () => {
61
+ resolve(data.trim());
62
+ });
63
+ setTimeout(() => resolve(data.trim()), 2000);
64
+ });
65
+ }
66
+ //# sourceMappingURL=save.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save.js","sourceRoot":"","sources":["../../src/commands/save.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -5,6 +5,7 @@ const commander_1 = require("commander");
5
5
  const init_js_1 = require("./commands/init.js");
6
6
  const inject_js_1 = require("./commands/inject.js");
7
7
  const capture_js_1 = require("./commands/capture.js");
8
+ const save_js_1 = require("./commands/save.js");
8
9
  const program = new commander_1.Command();
9
10
  program
10
11
  .name('helm')
@@ -20,6 +21,7 @@ program
20
21
  .command('inject')
21
22
  .description('Inject context into a prompt (used by IDE hooks)')
22
23
  .option('--format <format>', 'Output format (claude, cursor)', 'claude')
24
+ .option('--local', 'Force local-only injection (no network)', false)
23
25
  .action(async (options) => {
24
26
  await (0, inject_js_1.injectCommand)(options);
25
27
  });
@@ -30,6 +32,14 @@ program
30
32
  .action(async (options) => {
31
33
  await (0, capture_js_1.captureCommand)(options);
32
34
  });
35
+ program
36
+ .command('save')
37
+ .description('Save a knowledge snippet for later injection')
38
+ .argument('[title]', 'Title for this snippet')
39
+ .option('--tags <tags>', 'Comma-separated tags')
40
+ .action(async (title, options) => {
41
+ await (0, save_js_1.saveCommand)(title, options);
42
+ });
33
43
  program
34
44
  .command('status')
35
45
  .description('Show current Helm configuration')
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -84,7 +84,7 @@ function getApiUrl() {
84
84
  return credentials.api_url;
85
85
  }
86
86
  // Default to production
87
- return 'https://helmai.dev';
87
+ return 'https://tryhelm.ai';
88
88
  }
89
89
  function saveConfig(config) {
90
90
  ensureHelmDir();
@@ -0,0 +1,15 @@
1
+ export interface KnowledgeEntry {
2
+ id: string;
3
+ title: string;
4
+ content: string;
5
+ tags: string[];
6
+ createdAt: string;
7
+ }
8
+ export declare function loadKnowledge(): KnowledgeEntry[];
9
+ export declare function saveKnowledgeEntry(input: {
10
+ title: string;
11
+ content: string;
12
+ tags?: string[];
13
+ }): KnowledgeEntry;
14
+ export declare function selectRelevantKnowledge(prompt: string, entries: KnowledgeEntry[], maxEntries?: number): KnowledgeEntry[];
15
+ //# sourceMappingURL=knowledge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../../src/lib/knowledge.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAWD,wBAAgB,aAAa,IAAI,cAAc,EAAE,CAShD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,cAAc,CAoB7G;AAmBD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,UAAU,SAAI,GAAG,cAAc,EAAE,CAOnH"}
@@ -0,0 +1,108 @@
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.loadKnowledge = loadKnowledge;
37
+ exports.saveKnowledgeEntry = saveKnowledgeEntry;
38
+ exports.selectRelevantKnowledge = selectRelevantKnowledge;
39
+ const fs = __importStar(require("fs"));
40
+ const path = __importStar(require("path"));
41
+ const os = __importStar(require("os"));
42
+ const crypto_1 = require("crypto");
43
+ const HELM_DIR = path.join(os.homedir(), '.helm');
44
+ const KNOWLEDGE_FILE = path.join(HELM_DIR, 'knowledge.json');
45
+ function ensureHelmDir() {
46
+ if (!fs.existsSync(HELM_DIR)) {
47
+ fs.mkdirSync(HELM_DIR, { recursive: true });
48
+ }
49
+ }
50
+ function loadKnowledge() {
51
+ if (!fs.existsSync(KNOWLEDGE_FILE))
52
+ return [];
53
+ try {
54
+ const raw = fs.readFileSync(KNOWLEDGE_FILE, 'utf-8');
55
+ const parsed = JSON.parse(raw);
56
+ return Array.isArray(parsed) ? parsed : [];
57
+ }
58
+ catch {
59
+ return [];
60
+ }
61
+ }
62
+ function saveKnowledgeEntry(input) {
63
+ ensureHelmDir();
64
+ const entry = {
65
+ id: (0, crypto_1.randomUUID)(),
66
+ title: input.title.trim(),
67
+ content: input.content.trim(),
68
+ tags: (input.tags ?? []).map(t => t.trim().toLowerCase()).filter(Boolean),
69
+ createdAt: new Date().toISOString(),
70
+ };
71
+ const all = loadKnowledge();
72
+ all.unshift(entry);
73
+ fs.writeFileSync(KNOWLEDGE_FILE, JSON.stringify(all, null, 2));
74
+ try {
75
+ fs.chmodSync(KNOWLEDGE_FILE, 0o600);
76
+ }
77
+ catch {
78
+ // best-effort
79
+ }
80
+ return entry;
81
+ }
82
+ function scoreText(prompt, entry) {
83
+ const p = prompt.toLowerCase();
84
+ let score = 0;
85
+ if (p.includes(entry.title.toLowerCase()))
86
+ score += 3;
87
+ for (const t of entry.tags) {
88
+ if (p.includes(t))
89
+ score += 2;
90
+ }
91
+ // Token-ish match on words from title (cheap heuristic)
92
+ for (const w of entry.title.toLowerCase().split(/\s+/).filter(Boolean)) {
93
+ if (w.length < 4)
94
+ continue;
95
+ if (p.includes(w))
96
+ score += 1;
97
+ }
98
+ return score;
99
+ }
100
+ function selectRelevantKnowledge(prompt, entries, maxEntries = 3) {
101
+ return entries
102
+ .map(e => ({ e, score: scoreText(prompt, e) }))
103
+ .filter(x => x.score > 0)
104
+ .sort((a, b) => b.score - a.score)
105
+ .slice(0, maxEntries)
106
+ .map(x => x.e);
107
+ }
108
+ //# sourceMappingURL=knowledge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge.js","sourceRoot":"","sources":["../../src/lib/knowledge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface RuleSection {
2
+ id: string;
3
+ keywords: string[];
4
+ content: string;
5
+ }
6
+ export declare function findRulesFile(cwd: string): string | null;
7
+ export declare function parseRuleSections(markdown: string): RuleSection[];
8
+ export declare function scoreKeywords(haystack: string, keywords: string[]): number;
9
+ export declare function selectRelevantSections(prompt: string, sections: RuleSection[], maxSections?: number): RuleSection[];
10
+ //# sourceMappingURL=local-rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-rules.d.ts","sourceRoot":"","sources":["../../src/lib/local-rules.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAID,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiBxD;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE,CA+BjE;AAqBD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAQ1E;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,WAAW,SAAI,GAAG,WAAW,EAAE,CAY9G"}
@@ -0,0 +1,128 @@
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.findRulesFile = findRulesFile;
37
+ exports.parseRuleSections = parseRuleSections;
38
+ exports.scoreKeywords = scoreKeywords;
39
+ exports.selectRelevantSections = selectRelevantSections;
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ const SECTION_MARKER_RE = /<!--\s*helm:section:([a-zA-Z0-9_-]+)(?:\s+keywords:([^>]+?))?\s*-->/g;
43
+ function findRulesFile(cwd) {
44
+ const helmRules = path.join(cwd, '.helm', 'rules.md');
45
+ if (fs.existsSync(helmRules))
46
+ return helmRules;
47
+ const claude = path.join(cwd, 'CLAUDE.md');
48
+ if (fs.existsSync(claude))
49
+ return claude;
50
+ const cursor = path.join(cwd, '.cursorrules');
51
+ if (fs.existsSync(cursor))
52
+ return cursor;
53
+ const agents = path.join(cwd, 'AGENTS.md');
54
+ if (fs.existsSync(agents))
55
+ return agents;
56
+ const readme = path.join(cwd, 'README.md');
57
+ if (fs.existsSync(readme))
58
+ return readme;
59
+ return null;
60
+ }
61
+ function parseRuleSections(markdown) {
62
+ const sections = [];
63
+ const matches = [...markdown.matchAll(SECTION_MARKER_RE)];
64
+ if (matches.length === 0) {
65
+ // No explicit sections found. In beta/local mode we prefer to inject nothing
66
+ // rather than dumping an entire doc into the prompt.
67
+ return [];
68
+ }
69
+ for (let i = 0; i < matches.length; i++) {
70
+ const m = matches[i];
71
+ const id = (m[1] || '').trim();
72
+ const keywordRaw = (m[2] || '').trim();
73
+ const start = (m.index ?? 0) + m[0].length;
74
+ const end = i + 1 < matches.length ? (matches[i + 1].index ?? markdown.length) : markdown.length;
75
+ let content = markdown.slice(start, end);
76
+ content = stripTrailingHeadings(content).trim();
77
+ const keywords = keywordRaw
78
+ ? keywordRaw
79
+ .split(',')
80
+ .map(k => k.trim().toLowerCase())
81
+ .filter(Boolean)
82
+ : [];
83
+ sections.push({ id, keywords, content });
84
+ }
85
+ return sections;
86
+ }
87
+ function stripTrailingHeadings(input) {
88
+ // If the next section's markdown heading is included at the end of this slice,
89
+ // drop it to avoid injecting headings for non-matching sections.
90
+ const lines = input.split(/\r?\n/);
91
+ while (lines.length > 0) {
92
+ const last = lines[lines.length - 1];
93
+ if (last.trim() === '') {
94
+ lines.pop();
95
+ continue;
96
+ }
97
+ if (/^#{1,6}\s+/.test(last.trim())) {
98
+ lines.pop();
99
+ continue;
100
+ }
101
+ break;
102
+ }
103
+ return lines.join('\n');
104
+ }
105
+ function scoreKeywords(haystack, keywords) {
106
+ const text = haystack.toLowerCase();
107
+ let score = 0;
108
+ for (const kw of keywords) {
109
+ if (!kw)
110
+ continue;
111
+ if (text.includes(kw.toLowerCase()))
112
+ score += 1;
113
+ }
114
+ return score;
115
+ }
116
+ function selectRelevantSections(prompt, sections, maxSections = 3) {
117
+ // If a doc had no keywords, it will score 0; allow 1 fallback section.
118
+ const scored = sections
119
+ .map(s => ({ s, score: s.keywords.length ? scoreKeywords(prompt, s.keywords) : 0 }))
120
+ .filter(x => x.s.content.trim().length > 0)
121
+ .sort((a, b) => b.score - a.score);
122
+ const positives = scored.filter(x => x.score > 0).map(x => x.s);
123
+ if (positives.length > 0)
124
+ return positives.slice(0, maxSections);
125
+ // Fallback: include first section (smallest doc) if nothing matches.
126
+ return scored.slice(0, 1).map(x => x.s);
127
+ }
128
+ //# sourceMappingURL=local-rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-rules.js","sourceRoot":"","sources":["../../src/lib/local-rules.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@helmai/cli",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "Helm CLI - Intelligent context injection for AI coding assistants",
5
5
  "main": "dist/index.js",
6
6
  "bin": {