@helmai/cli 1.0.3 → 1.0.4
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/dist/commands/init.d.ts +5 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +126 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/inject.d.ts.map +1 -1
- package/dist/commands/inject.js +53 -4
- package/dist/commands/inject.js.map +1 -1
- package/dist/commands/save.d.ts +1 -0
- package/dist/commands/save.d.ts.map +1 -1
- package/dist/commands/save.js +17 -4
- package/dist/commands/save.js.map +1 -1
- package/dist/commands/sync.d.ts +6 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +116 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/index.js +12 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/api.d.ts +29 -0
- package/dist/lib/api.d.ts.map +1 -1
- package/dist/lib/api.js +4 -0
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/hooks.d.ts.map +1 -1
- package/dist/lib/hooks.js +31 -16
- package/dist/lib/hooks.js.map +1 -1
- package/dist/lib/knowledge.d.ts +6 -0
- package/dist/lib/knowledge.d.ts.map +1 -1
- package/dist/lib/knowledge.js +105 -1
- package/dist/lib/knowledge.js.map +1 -1
- package/dist/lib/local-rules.d.ts +7 -0
- package/dist/lib/local-rules.d.ts.map +1 -1
- package/dist/lib/local-rules.js +142 -15
- package/dist/lib/local-rules.js.map +1 -1
- package/dist/lib/session.d.ts +12 -0
- package/dist/lib/session.d.ts.map +1 -0
- package/dist/lib/session.js +94 -0
- package/dist/lib/session.js.map +1 -0
- package/package.json +1 -1
package/dist/lib/api.d.ts
CHANGED
|
@@ -15,4 +15,33 @@ export declare function me(): Promise<{
|
|
|
15
15
|
slug: string;
|
|
16
16
|
};
|
|
17
17
|
}>;
|
|
18
|
+
export interface SyncResponse {
|
|
19
|
+
organization: {
|
|
20
|
+
ulid: string;
|
|
21
|
+
name: string;
|
|
22
|
+
slug: string;
|
|
23
|
+
};
|
|
24
|
+
projects: Array<{
|
|
25
|
+
ulid: string;
|
|
26
|
+
name: string;
|
|
27
|
+
slug: string;
|
|
28
|
+
stack: string[] | null;
|
|
29
|
+
}>;
|
|
30
|
+
rules: Array<{
|
|
31
|
+
ulid: string;
|
|
32
|
+
title: string;
|
|
33
|
+
description: string | null;
|
|
34
|
+
project_id: number | null;
|
|
35
|
+
priority: number;
|
|
36
|
+
sections: Array<{
|
|
37
|
+
identifier: string;
|
|
38
|
+
title: string;
|
|
39
|
+
keywords: string[];
|
|
40
|
+
content: string;
|
|
41
|
+
position: number;
|
|
42
|
+
}>;
|
|
43
|
+
}>;
|
|
44
|
+
synced_at: string;
|
|
45
|
+
}
|
|
46
|
+
export declare function sync(): Promise<SyncResponse>;
|
|
18
47
|
//# sourceMappingURL=api.d.ts.map
|
package/dist/lib/api.d.ts.map
CHANGED
|
@@ -1 +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;AAsDrB,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"}
|
|
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;AAsDrB,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;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IACtF,KAAK,EAAE,KAAK,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,KAAK,CAAC;YACd,UAAU,EAAE,MAAM,CAAC;YACnB,KAAK,EAAE,MAAM,CAAC;YACd,QAAQ,EAAE,MAAM,EAAE,CAAC;YACnB,OAAO,EAAE,MAAM,CAAC;YAChB,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC,CAAC;KACJ,CAAC,CAAC;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC,CAElD"}
|
package/dist/lib/api.js
CHANGED
|
@@ -5,6 +5,7 @@ exports.login = login;
|
|
|
5
5
|
exports.inject = inject;
|
|
6
6
|
exports.capture = capture;
|
|
7
7
|
exports.me = me;
|
|
8
|
+
exports.sync = sync;
|
|
8
9
|
const config_js_1 = require("./config.js");
|
|
9
10
|
async function request(endpoint, options = {}, useAuth = true) {
|
|
10
11
|
const apiUrl = (0, config_js_1.getApiUrl)();
|
|
@@ -71,4 +72,7 @@ async function capture(data) {
|
|
|
71
72
|
async function me() {
|
|
72
73
|
return request('/me');
|
|
73
74
|
}
|
|
75
|
+
async function sync() {
|
|
76
|
+
return request('/sync');
|
|
77
|
+
}
|
|
74
78
|
//# sourceMappingURL=api.js.map
|
package/dist/lib/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":";;AA6DA,4BAcC;AAED,sBAQC;AAED,wBAKC;AAED,0BAKC;AAED,gBAEC;
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/hooks.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/lib/hooks.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/lib/hooks.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AA8BvC,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAU5E;AA6ID,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAoC9E"}
|
package/dist/lib/hooks.js
CHANGED
|
@@ -66,31 +66,42 @@ function installClaudeCodeHooks(home) {
|
|
|
66
66
|
settings = {};
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
|
+
// Remove old-format hooks if present
|
|
70
|
+
if (settings.hooks) {
|
|
71
|
+
delete settings.hooks['user-prompt-submit'];
|
|
72
|
+
delete settings.hooks['assistant-response'];
|
|
73
|
+
}
|
|
69
74
|
// Initialize hooks if needed
|
|
70
75
|
if (!settings.hooks) {
|
|
71
76
|
settings.hooks = {};
|
|
72
77
|
}
|
|
73
|
-
if (!settings.hooks
|
|
74
|
-
settings.hooks
|
|
78
|
+
if (!settings.hooks.UserPromptSubmit) {
|
|
79
|
+
settings.hooks.UserPromptSubmit = [];
|
|
75
80
|
}
|
|
76
|
-
if (!settings.hooks
|
|
77
|
-
settings.hooks
|
|
81
|
+
if (!settings.hooks.Stop) {
|
|
82
|
+
settings.hooks.Stop = [];
|
|
78
83
|
}
|
|
79
84
|
// Check if helm hooks already exist
|
|
80
|
-
const hasInjectHook = settings.hooks
|
|
81
|
-
const hasCaptureHook = settings.hooks
|
|
85
|
+
const hasInjectHook = settings.hooks.UserPromptSubmit.some(entry => entry.hooks?.some(h => h.command.includes('helm inject')));
|
|
86
|
+
const hasCaptureHook = settings.hooks.Stop.some(entry => entry.hooks?.some(h => h.command.includes('helm capture')));
|
|
82
87
|
// Add inject hook if not present
|
|
83
88
|
if (!hasInjectHook) {
|
|
84
|
-
settings.hooks
|
|
85
|
-
|
|
86
|
-
|
|
89
|
+
settings.hooks.UserPromptSubmit.push({
|
|
90
|
+
hooks: [{
|
|
91
|
+
type: 'command',
|
|
92
|
+
command: 'helm inject',
|
|
93
|
+
timeout: 3,
|
|
94
|
+
}],
|
|
87
95
|
});
|
|
88
96
|
}
|
|
89
97
|
// Add capture hook if not present
|
|
90
98
|
if (!hasCaptureHook) {
|
|
91
|
-
settings.hooks
|
|
92
|
-
|
|
93
|
-
|
|
99
|
+
settings.hooks.Stop.push({
|
|
100
|
+
hooks: [{
|
|
101
|
+
type: 'command',
|
|
102
|
+
command: 'helm capture',
|
|
103
|
+
timeout: 3,
|
|
104
|
+
}],
|
|
94
105
|
});
|
|
95
106
|
}
|
|
96
107
|
// Write settings
|
|
@@ -161,12 +172,16 @@ function uninstallHooks(ide) {
|
|
|
161
172
|
try {
|
|
162
173
|
const settings = JSON.parse(fs.readFileSync(settingsPath, 'utf-8'));
|
|
163
174
|
if (settings.hooks) {
|
|
164
|
-
|
|
165
|
-
|
|
175
|
+
// Remove new-format hooks
|
|
176
|
+
if (settings.hooks.UserPromptSubmit) {
|
|
177
|
+
settings.hooks.UserPromptSubmit = settings.hooks.UserPromptSubmit.filter(entry => !entry.hooks?.some(h => h.command.includes('helm')));
|
|
166
178
|
}
|
|
167
|
-
if (settings.hooks
|
|
168
|
-
settings.hooks
|
|
179
|
+
if (settings.hooks.Stop) {
|
|
180
|
+
settings.hooks.Stop = settings.hooks.Stop.filter(entry => !entry.hooks?.some(h => h.command.includes('helm')));
|
|
169
181
|
}
|
|
182
|
+
// Clean up old-format hooks if still present
|
|
183
|
+
delete settings.hooks['user-prompt-submit'];
|
|
184
|
+
delete settings.hooks['assistant-response'];
|
|
170
185
|
}
|
|
171
186
|
fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2));
|
|
172
187
|
return { success: true, message: 'Claude Code hooks removed' };
|
package/dist/lib/hooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/lib/hooks.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/lib/hooks.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCA,oCAUC;AA6ID,wCAoCC;AA5ND,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AA+BzB,SAAgB,YAAY,CAAC,GAAQ;IACnC,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAE1B,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;QAC1B,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;SAAM,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,gBAAgB,GAAG,EAAE,EAAE,CAAC;AAC5D,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAY;IAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IAE3D,kCAAkC;IAClC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,uCAAuC;IACvC,IAAI,QAAQ,GAAmB,EAAE,CAAC;IAClC,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAmB,CAAC;QAClF,CAAC;QAAC,MAAM,CAAC;YACP,6BAA6B;YAC7B,QAAQ,GAAG,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAED,qCAAqC;IACrC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnB,OAAQ,QAAQ,CAAC,KAAiC,CAAC,oBAAoB,CAAC,CAAC;QACzE,OAAQ,QAAQ,CAAC,KAAiC,CAAC,oBAAoB,CAAC,CAAC;IAC3E,CAAC;IAED,6BAA6B;IAC7B,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACpB,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;IACtB,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;QACrC,QAAQ,CAAC,KAAK,CAAC,gBAAgB,GAAG,EAAE,CAAC;IACvC,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACzB,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC;IAC3B,CAAC;IAED,oCAAoC;IACpC,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CACxD,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CACnE,CAAC;IACF,MAAM,cAAc,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAC7C,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CACpE,CAAC;IAEF,iCAAiC;IACjC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC;YACnC,KAAK,EAAE,CAAC;oBACN,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,aAAa;oBACtB,OAAO,EAAE,CAAC;iBACX,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IAED,kCAAkC;IAClC,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YACvB,KAAK,EAAE,CAAC;oBACN,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,cAAc;oBACvB,OAAO,EAAE,CAAC;iBACX,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IAED,iBAAiB;IACjB,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAElE,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,kCAAkC,YAAY,EAAE;KAC1D,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY;IACtC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IAErD,kCAAkC;IAClC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,oCAAoC;IACpC,IAAI,KAAK,GAAgB,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACnD,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAgB,CAAC;QACzE,CAAC;QAAC,MAAM,CAAC;YACP,6BAA6B;YAC7B,KAAK,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QACpC,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACjB,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;IACnB,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC;QACpC,KAAK,CAAC,KAAK,CAAC,kBAAkB,GAAG,EAAE,CAAC;IACtC,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QAC/B,KAAK,CAAC,KAAK,CAAC,aAAa,GAAG,EAAE,CAAC;IACjC,CAAC;IAED,oCAAoC;IACpC,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CACvD,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CACvC,CAAC;IACF,MAAM,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CACnD,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CACxC,CAAC;IAEF,2BAA2B;IAC3B,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC;YAClC,OAAO,EAAE,6BAA6B;YACtC,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC;YAC7B,OAAO,EAAE,8BAA8B;YACvC,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;IACL,CAAC;IAED,cAAc;IACd,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAE5D,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,6BAA6B,SAAS,EAAE;KAClD,CAAC;AACJ,CAAC;AAED,SAAgB,cAAc,CAAC,GAAQ;IACrC,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAE1B,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;QAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;QACjE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,+BAA+B,EAAE,CAAC;QACrE,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAmB,CAAC;YACtF,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACnB,0BAA0B;gBAC1B,IAAI,QAAQ,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;oBACpC,QAAQ,CAAC,KAAK,CAAC,gBAAgB,GAAG,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CACtE,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAC7D,CAAC;gBACJ,CAAC;gBACD,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;oBACxB,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAC9C,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAC7D,CAAC;gBACJ,CAAC;gBAED,6CAA6C;gBAC7C,OAAQ,QAAQ,CAAC,KAAiC,CAAC,oBAAoB,CAAC,CAAC;gBACzE,OAAQ,QAAQ,CAAC,KAAiC,CAAC,oBAAoB,CAAC,CAAC;YAC3E,CAAC;YACD,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAClE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,2BAA2B,EAAE,CAAC;QACjE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,2BAA2B,CAAC,EAAE,EAAE,CAAC;QACrE,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,gBAAgB,GAAG,EAAE,EAAE,CAAC;AAC5D,CAAC"}
|
package/dist/lib/knowledge.d.ts
CHANGED
|
@@ -11,5 +11,11 @@ export declare function saveKnowledgeEntry(input: {
|
|
|
11
11
|
content: string;
|
|
12
12
|
tags?: string[];
|
|
13
13
|
}): KnowledgeEntry;
|
|
14
|
+
export declare function loadProjectKnowledge(cwd: string): KnowledgeEntry[];
|
|
15
|
+
export declare function saveProjectKnowledgeEntry(cwd: string, input: {
|
|
16
|
+
title: string;
|
|
17
|
+
content: string;
|
|
18
|
+
tags?: string[];
|
|
19
|
+
}): KnowledgeEntry;
|
|
14
20
|
export declare function selectRelevantKnowledge(prompt: string, entries: KnowledgeEntry[], maxEntries?: number): KnowledgeEntry[];
|
|
15
21
|
//# sourceMappingURL=knowledge.d.ts.map
|
|
@@ -1 +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;
|
|
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;AAaD,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;AAkCD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,EAAE,CAgClE;AAED,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GACzD,cAAc,CAyChB;AA4BD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,UAAU,SAAI,GAAG,cAAc,EAAE,CAOnH"}
|
package/dist/lib/knowledge.js
CHANGED
|
@@ -35,6 +35,8 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.loadKnowledge = loadKnowledge;
|
|
37
37
|
exports.saveKnowledgeEntry = saveKnowledgeEntry;
|
|
38
|
+
exports.loadProjectKnowledge = loadProjectKnowledge;
|
|
39
|
+
exports.saveProjectKnowledgeEntry = saveProjectKnowledgeEntry;
|
|
38
40
|
exports.selectRelevantKnowledge = selectRelevantKnowledge;
|
|
39
41
|
const fs = __importStar(require("fs"));
|
|
40
42
|
const path = __importStar(require("path"));
|
|
@@ -47,6 +49,7 @@ function ensureHelmDir() {
|
|
|
47
49
|
fs.mkdirSync(HELM_DIR, { recursive: true });
|
|
48
50
|
}
|
|
49
51
|
}
|
|
52
|
+
// --- Global knowledge (legacy ~/.helm/knowledge.json) ---
|
|
50
53
|
function loadKnowledge() {
|
|
51
54
|
if (!fs.existsSync(KNOWLEDGE_FILE))
|
|
52
55
|
return [];
|
|
@@ -79,6 +82,108 @@ function saveKnowledgeEntry(input) {
|
|
|
79
82
|
}
|
|
80
83
|
return entry;
|
|
81
84
|
}
|
|
85
|
+
// --- Project-scoped knowledge (.helm/knowledge/*.md) ---
|
|
86
|
+
const FRONTMATTER_RE = /^---\n([\s\S]*?)\n---\n([\s\S]*)$/;
|
|
87
|
+
function parseYamlFrontmatter(raw) {
|
|
88
|
+
const match = raw.match(FRONTMATTER_RE);
|
|
89
|
+
if (!match)
|
|
90
|
+
return null;
|
|
91
|
+
const frontmatter = match[1];
|
|
92
|
+
const content = match[2].trim();
|
|
93
|
+
let title = '';
|
|
94
|
+
let tags = [];
|
|
95
|
+
let created = '';
|
|
96
|
+
for (const line of frontmatter.split('\n')) {
|
|
97
|
+
const [key, ...rest] = line.split(':');
|
|
98
|
+
const value = rest.join(':').trim();
|
|
99
|
+
if (key.trim() === 'title')
|
|
100
|
+
title = value.replace(/^["']|["']$/g, '');
|
|
101
|
+
if (key.trim() === 'tags') {
|
|
102
|
+
tags = value
|
|
103
|
+
.replace(/^\[|\]$/g, '')
|
|
104
|
+
.split(',')
|
|
105
|
+
.map(t => t.trim().replace(/^["']|["']$/g, '').toLowerCase())
|
|
106
|
+
.filter(Boolean);
|
|
107
|
+
}
|
|
108
|
+
if (key.trim() === 'created')
|
|
109
|
+
created = value;
|
|
110
|
+
}
|
|
111
|
+
return { title, tags, created, content };
|
|
112
|
+
}
|
|
113
|
+
function loadProjectKnowledge(cwd) {
|
|
114
|
+
const knowledgeDir = path.join(cwd, '.helm', 'knowledge');
|
|
115
|
+
if (!fs.existsSync(knowledgeDir))
|
|
116
|
+
return [];
|
|
117
|
+
const entries = [];
|
|
118
|
+
try {
|
|
119
|
+
const files = fs.readdirSync(knowledgeDir).filter(f => f.endsWith('.md'));
|
|
120
|
+
for (const file of files) {
|
|
121
|
+
try {
|
|
122
|
+
const raw = fs.readFileSync(path.join(knowledgeDir, file), 'utf-8');
|
|
123
|
+
const parsed = parseYamlFrontmatter(raw);
|
|
124
|
+
if (parsed && parsed.content) {
|
|
125
|
+
entries.push({
|
|
126
|
+
id: path.basename(file, '.md'),
|
|
127
|
+
title: parsed.title || path.basename(file, '.md'),
|
|
128
|
+
content: parsed.content,
|
|
129
|
+
tags: parsed.tags,
|
|
130
|
+
createdAt: parsed.created || '',
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
// Skip malformed files
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
return [];
|
|
141
|
+
}
|
|
142
|
+
return entries;
|
|
143
|
+
}
|
|
144
|
+
function saveProjectKnowledgeEntry(cwd, input) {
|
|
145
|
+
const knowledgeDir = path.join(cwd, '.helm', 'knowledge');
|
|
146
|
+
if (!fs.existsSync(knowledgeDir)) {
|
|
147
|
+
fs.mkdirSync(knowledgeDir, { recursive: true });
|
|
148
|
+
}
|
|
149
|
+
const id = slugifyFilename(input.title.trim());
|
|
150
|
+
const tags = (input.tags ?? []).map(t => t.trim().toLowerCase()).filter(Boolean);
|
|
151
|
+
const created = new Date().toISOString();
|
|
152
|
+
const entry = {
|
|
153
|
+
id,
|
|
154
|
+
title: input.title.trim(),
|
|
155
|
+
content: input.content.trim(),
|
|
156
|
+
tags,
|
|
157
|
+
createdAt: created,
|
|
158
|
+
};
|
|
159
|
+
const frontmatter = [
|
|
160
|
+
'---',
|
|
161
|
+
`title: "${entry.title}"`,
|
|
162
|
+
`tags: [${tags.map(t => `"${t}"`).join(', ')}]`,
|
|
163
|
+
`created: ${created}`,
|
|
164
|
+
'---',
|
|
165
|
+
'',
|
|
166
|
+
entry.content,
|
|
167
|
+
].join('\n');
|
|
168
|
+
const filePath = path.join(knowledgeDir, `${id}.md`);
|
|
169
|
+
// Avoid overwriting — append suffix if file exists
|
|
170
|
+
let finalPath = filePath;
|
|
171
|
+
let counter = 1;
|
|
172
|
+
while (fs.existsSync(finalPath)) {
|
|
173
|
+
finalPath = path.join(knowledgeDir, `${id}-${counter}.md`);
|
|
174
|
+
counter++;
|
|
175
|
+
}
|
|
176
|
+
fs.writeFileSync(finalPath, frontmatter);
|
|
177
|
+
return entry;
|
|
178
|
+
}
|
|
179
|
+
function slugifyFilename(text) {
|
|
180
|
+
return text
|
|
181
|
+
.toLowerCase()
|
|
182
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
183
|
+
.replace(/^-+|-+$/g, '')
|
|
184
|
+
.slice(0, 60);
|
|
185
|
+
}
|
|
186
|
+
// --- Scoring (shared between global and project knowledge) ---
|
|
82
187
|
function scoreText(prompt, entry) {
|
|
83
188
|
const p = prompt.toLowerCase();
|
|
84
189
|
let score = 0;
|
|
@@ -88,7 +193,6 @@ function scoreText(prompt, entry) {
|
|
|
88
193
|
if (p.includes(t))
|
|
89
194
|
score += 2;
|
|
90
195
|
}
|
|
91
|
-
// Token-ish match on words from title (cheap heuristic)
|
|
92
196
|
for (const w of entry.title.toLowerCase().split(/\s+/).filter(Boolean)) {
|
|
93
197
|
if (w.length < 4)
|
|
94
198
|
continue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knowledge.js","sourceRoot":"","sources":["../../src/lib/knowledge.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"knowledge.js","sourceRoot":"","sources":["../../src/lib/knowledge.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,sCASC;AAED,gDAoBC;AAkCD,oDAgCC;AAED,8DA4CC;AA4BD,0DAOC;AA1MD,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AACzB,mCAAoC;AAUpC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;AAClD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;AAE7D,SAAS,aAAa;IACpB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,2DAA2D;AAE3D,SAAgB,aAAa;IAC3B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC;QAAE,OAAO,EAAE,CAAC;IAC9C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAqB,CAAC;QACnD,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAgB,kBAAkB,CAAC,KAA0D;IAC3F,aAAa,EAAE,CAAC;IAChB,MAAM,KAAK,GAAmB;QAC5B,EAAE,EAAE,IAAA,mBAAU,GAAE;QAChB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE;QACzB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;QAC7B,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QACzE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;IAEF,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;IAC5B,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACnB,EAAE,CAAC,aAAa,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/D,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;IAChB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,0DAA0D;AAE1D,MAAM,cAAc,GAAG,mCAAmC,CAAC;AAE3D,SAAS,oBAAoB,CAAC,GAAW;IACvC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAEhC,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,IAAI,IAAI,GAAa,EAAE,CAAC;IACxB,IAAI,OAAO,GAAG,EAAE,CAAC;IAEjB,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3C,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACpC,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,OAAO;YAAE,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QACtE,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;YAC1B,IAAI,GAAG,KAAK;iBACT,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;iBACvB,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;iBAC5D,MAAM,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,SAAS;YAAE,OAAO,GAAG,KAAK,CAAC;IAChD,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC3C,CAAC;AAED,SAAgB,oBAAoB,CAAC,GAAW;IAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAC1D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,EAAE,CAAC;IAE5C,MAAM,OAAO,GAAqB,EAAE,CAAC;IAErC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAE1E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;gBACpE,MAAM,MAAM,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;gBAEzC,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBAC7B,OAAO,CAAC,IAAI,CAAC;wBACX,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;wBAC9B,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;wBACjD,OAAO,EAAE,MAAM,CAAC,OAAO;wBACvB,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,SAAS,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;qBAChC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,uBAAuB;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAgB,yBAAyB,CACvC,GAAW,EACX,KAA0D;IAE1D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAC1D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjF,MAAM,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAEzC,MAAM,KAAK,GAAmB;QAC5B,EAAE;QACF,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE;QACzB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;QAC7B,IAAI;QACJ,SAAS,EAAE,OAAO;KACnB,CAAC;IAEF,MAAM,WAAW,GAAG;QAClB,KAAK;QACL,WAAW,KAAK,CAAC,KAAK,GAAG;QACzB,UAAU,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;QAC/C,YAAY,OAAO,EAAE;QACrB,KAAK;QACL,EAAE;QACF,KAAK,CAAC,OAAO;KACd,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IAErD,mDAAmD;IACnD,IAAI,SAAS,GAAG,QAAQ,CAAC;IACzB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,OAAO,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,IAAI,OAAO,KAAK,CAAC,CAAC;QAC3D,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAEzC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,OAAO,IAAI;SACR,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,gEAAgE;AAEhE,SAAS,SAAS,CAAC,MAAc,EAAE,KAAqB;IACtD,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IAC/B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAAE,KAAK,IAAI,CAAC,CAAC;IACtD,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,KAAK,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACvE,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QAC3B,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,KAAK,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,uBAAuB,CAAC,MAAc,EAAE,OAAyB,EAAE,UAAU,GAAG,CAAC;IAC/F,OAAO,OAAO;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;SAC9C,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;SACxB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;SACjC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC;SACpB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC"}
|
|
@@ -5,6 +5,13 @@ export interface RuleSection {
|
|
|
5
5
|
}
|
|
6
6
|
export declare function findRulesFile(cwd: string): string | null;
|
|
7
7
|
export declare function parseRuleSections(markdown: string): RuleSection[];
|
|
8
|
+
/**
|
|
9
|
+
* Score a section's relevance to the prompt using weighted matching:
|
|
10
|
+
* - Exact keyword match in prompt: 3 points
|
|
11
|
+
* - Synonym of a keyword found in prompt: 2 points
|
|
12
|
+
* - Content word overlap (4+ char words): 1 point
|
|
13
|
+
*/
|
|
14
|
+
export declare function scoreSectionRelevance(prompt: string, section: RuleSection): number;
|
|
8
15
|
export declare function scoreKeywords(haystack: string, keywords: string[]): number;
|
|
9
16
|
export declare function selectRelevantSections(prompt: string, sections: RuleSection[], maxSections?: number): RuleSection[];
|
|
10
17
|
//# sourceMappingURL=local-rules.d.ts.map
|
|
@@ -1 +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;
|
|
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;AA8BD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiBxD;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE,CAMjE;AAqHD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,MAAM,CA4ClF;AAGD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAE1E;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,WAAW,SAAI,GAAG,WAAW,EAAE,CAW9G"}
|
package/dist/lib/local-rules.js
CHANGED
|
@@ -35,11 +35,38 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.findRulesFile = findRulesFile;
|
|
37
37
|
exports.parseRuleSections = parseRuleSections;
|
|
38
|
+
exports.scoreSectionRelevance = scoreSectionRelevance;
|
|
38
39
|
exports.scoreKeywords = scoreKeywords;
|
|
39
40
|
exports.selectRelevantSections = selectRelevantSections;
|
|
40
41
|
const fs = __importStar(require("fs"));
|
|
41
42
|
const path = __importStar(require("path"));
|
|
42
43
|
const SECTION_MARKER_RE = /<!--\s*helm:section:([a-zA-Z0-9_-]+)(?:\s+keywords:([^>]+?))?\s*-->/g;
|
|
44
|
+
const HEADING_RE = /^##\s+(.+)$/;
|
|
45
|
+
// Synonym map: primary keyword → related terms that should partially match
|
|
46
|
+
const SYNONYM_MAP = {
|
|
47
|
+
test: ['tests', 'testing', 'spec', 'tdd', 'pest', 'coverage', 'phpunit', 'vitest', 'jest'],
|
|
48
|
+
api: ['endpoint', 'route', 'controller', 'rest', 'resource'],
|
|
49
|
+
auth: ['authentication', 'authorization', 'login', 'register', 'guard', 'policy', 'permission'],
|
|
50
|
+
database: ['migration', 'model', 'eloquent', 'query', 'schema', 'seed', 'factory'],
|
|
51
|
+
frontend: ['react', 'vue', 'inertia', 'component', 'ui', 'tailwind', 'css', 'blade'],
|
|
52
|
+
deploy: ['deployment', 'ci', 'cd', 'pipeline', 'docker', 'production'],
|
|
53
|
+
queue: ['job', 'dispatch', 'worker', 'async'],
|
|
54
|
+
error: ['exception', 'bug', 'fix', 'debug', 'issue'],
|
|
55
|
+
refactor: ['cleanup', 'improve', 'restructure', 'simplify', 'optimize'],
|
|
56
|
+
cache: ['caching', 'redis', 'memcached', 'store'],
|
|
57
|
+
};
|
|
58
|
+
// Build reverse lookup: synonym → primary keyword
|
|
59
|
+
const REVERSE_SYNONYMS = {};
|
|
60
|
+
for (const [primary, synonyms] of Object.entries(SYNONYM_MAP)) {
|
|
61
|
+
for (const syn of synonyms) {
|
|
62
|
+
if (!REVERSE_SYNONYMS[syn])
|
|
63
|
+
REVERSE_SYNONYMS[syn] = [];
|
|
64
|
+
REVERSE_SYNONYMS[syn].push(primary);
|
|
65
|
+
}
|
|
66
|
+
// Primary is also its own synonym
|
|
67
|
+
if (!REVERSE_SYNONYMS[primary])
|
|
68
|
+
REVERSE_SYNONYMS[primary] = [];
|
|
69
|
+
}
|
|
43
70
|
function findRulesFile(cwd) {
|
|
44
71
|
const helmRules = path.join(cwd, '.helm', 'rules.md');
|
|
45
72
|
if (fs.existsSync(helmRules))
|
|
@@ -59,13 +86,17 @@ function findRulesFile(cwd) {
|
|
|
59
86
|
return null;
|
|
60
87
|
}
|
|
61
88
|
function parseRuleSections(markdown) {
|
|
89
|
+
const sections = parseMarkedSections(markdown);
|
|
90
|
+
if (sections.length > 0)
|
|
91
|
+
return sections;
|
|
92
|
+
// Fallback: split by ## headings when no helm:section markers exist
|
|
93
|
+
return parseHeadingSections(markdown);
|
|
94
|
+
}
|
|
95
|
+
function parseMarkedSections(markdown) {
|
|
62
96
|
const sections = [];
|
|
63
97
|
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.
|
|
98
|
+
if (matches.length === 0)
|
|
67
99
|
return [];
|
|
68
|
-
}
|
|
69
100
|
for (let i = 0; i < matches.length; i++) {
|
|
70
101
|
const m = matches[i];
|
|
71
102
|
const id = (m[1] || '').trim();
|
|
@@ -84,9 +115,69 @@ function parseRuleSections(markdown) {
|
|
|
84
115
|
}
|
|
85
116
|
return sections;
|
|
86
117
|
}
|
|
118
|
+
function parseHeadingSections(markdown) {
|
|
119
|
+
const lines = markdown.split(/\r?\n/);
|
|
120
|
+
const sections = [];
|
|
121
|
+
let currentHeading = '';
|
|
122
|
+
let currentLines = [];
|
|
123
|
+
for (const line of lines) {
|
|
124
|
+
const headingMatch = line.match(HEADING_RE);
|
|
125
|
+
if (headingMatch) {
|
|
126
|
+
// Flush previous section
|
|
127
|
+
if (currentHeading && currentLines.length > 0) {
|
|
128
|
+
const content = currentLines.join('\n').trim();
|
|
129
|
+
if (content) {
|
|
130
|
+
sections.push({
|
|
131
|
+
id: slugify(currentHeading),
|
|
132
|
+
keywords: deriveKeywords(currentHeading),
|
|
133
|
+
content,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
currentHeading = headingMatch[1].trim();
|
|
138
|
+
currentLines = [];
|
|
139
|
+
}
|
|
140
|
+
else if (currentHeading) {
|
|
141
|
+
currentLines.push(line);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// Flush last section
|
|
145
|
+
if (currentHeading && currentLines.length > 0) {
|
|
146
|
+
const content = currentLines.join('\n').trim();
|
|
147
|
+
if (content) {
|
|
148
|
+
sections.push({
|
|
149
|
+
id: slugify(currentHeading),
|
|
150
|
+
keywords: deriveKeywords(currentHeading),
|
|
151
|
+
content,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return sections;
|
|
156
|
+
}
|
|
157
|
+
function slugify(text) {
|
|
158
|
+
return text
|
|
159
|
+
.toLowerCase()
|
|
160
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
161
|
+
.replace(/^-+|-+$/g, '');
|
|
162
|
+
}
|
|
163
|
+
function deriveKeywords(heading) {
|
|
164
|
+
const words = heading
|
|
165
|
+
.toLowerCase()
|
|
166
|
+
.split(/[\s/&,]+/)
|
|
167
|
+
.map(w => w.replace(/[^a-z0-9]/g, ''))
|
|
168
|
+
.filter(w => w.length >= 2);
|
|
169
|
+
// Expand with synonyms from the map
|
|
170
|
+
const expanded = new Set(words);
|
|
171
|
+
for (const word of words) {
|
|
172
|
+
if (SYNONYM_MAP[word]) {
|
|
173
|
+
for (const syn of SYNONYM_MAP[word]) {
|
|
174
|
+
expanded.add(syn);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return [...expanded];
|
|
179
|
+
}
|
|
87
180
|
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
181
|
const lines = input.split(/\r?\n/);
|
|
91
182
|
while (lines.length > 0) {
|
|
92
183
|
const last = lines[lines.length - 1];
|
|
@@ -102,27 +193,63 @@ function stripTrailingHeadings(input) {
|
|
|
102
193
|
}
|
|
103
194
|
return lines.join('\n');
|
|
104
195
|
}
|
|
105
|
-
|
|
106
|
-
|
|
196
|
+
/**
|
|
197
|
+
* Score a section's relevance to the prompt using weighted matching:
|
|
198
|
+
* - Exact keyword match in prompt: 3 points
|
|
199
|
+
* - Synonym of a keyword found in prompt: 2 points
|
|
200
|
+
* - Content word overlap (4+ char words): 1 point
|
|
201
|
+
*/
|
|
202
|
+
function scoreSectionRelevance(prompt, section) {
|
|
203
|
+
const promptLower = prompt.toLowerCase();
|
|
204
|
+
const promptWords = new Set(promptLower.split(/\s+/).filter(w => w.length >= 4));
|
|
107
205
|
let score = 0;
|
|
108
|
-
|
|
109
|
-
|
|
206
|
+
const counted = new Set();
|
|
207
|
+
for (const kw of section.keywords) {
|
|
208
|
+
if (!kw || counted.has(kw))
|
|
209
|
+
continue;
|
|
210
|
+
counted.add(kw);
|
|
211
|
+
// Exact keyword match: 3 points
|
|
212
|
+
if (promptLower.includes(kw)) {
|
|
213
|
+
score += 3;
|
|
110
214
|
continue;
|
|
111
|
-
|
|
112
|
-
|
|
215
|
+
}
|
|
216
|
+
// Synonym match: check if any synonym of this keyword appears in prompt
|
|
217
|
+
const synonyms = SYNONYM_MAP[kw] || [];
|
|
218
|
+
const reversePrimaries = REVERSE_SYNONYMS[kw] || [];
|
|
219
|
+
const allRelated = [...synonyms, ...reversePrimaries];
|
|
220
|
+
let synonymFound = false;
|
|
221
|
+
for (const syn of allRelated) {
|
|
222
|
+
if (promptLower.includes(syn)) {
|
|
223
|
+
score += 2;
|
|
224
|
+
synonymFound = true;
|
|
225
|
+
break;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
if (!synonymFound) {
|
|
229
|
+
// Content word overlap: check if keyword appears as a word fragment
|
|
230
|
+
for (const pw of promptWords) {
|
|
231
|
+
if (pw.includes(kw) || kw.includes(pw)) {
|
|
232
|
+
score += 1;
|
|
233
|
+
break;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
113
237
|
}
|
|
114
238
|
return score;
|
|
115
239
|
}
|
|
240
|
+
// Keep the old function name as alias for backward compat
|
|
241
|
+
function scoreKeywords(haystack, keywords) {
|
|
242
|
+
return scoreSectionRelevance(haystack, { id: '', keywords, content: '' });
|
|
243
|
+
}
|
|
116
244
|
function selectRelevantSections(prompt, sections, maxSections = 3) {
|
|
117
|
-
// If a doc had no keywords, it will score 0; allow 1 fallback section.
|
|
118
245
|
const scored = sections
|
|
119
|
-
.map(s => ({ s, score: s.keywords.length ?
|
|
246
|
+
.map(s => ({ s, score: s.keywords.length ? scoreSectionRelevance(prompt, s) : 0 }))
|
|
120
247
|
.filter(x => x.s.content.trim().length > 0)
|
|
121
248
|
.sort((a, b) => b.score - a.score);
|
|
122
249
|
const positives = scored.filter(x => x.score > 0).map(x => x.s);
|
|
123
250
|
if (positives.length > 0)
|
|
124
251
|
return positives.slice(0, maxSections);
|
|
125
|
-
// Fallback: include first section
|
|
252
|
+
// Fallback: include first section if nothing matches.
|
|
126
253
|
return scored.slice(0, 1).map(x => x.s);
|
|
127
254
|
}
|
|
128
255
|
//# sourceMappingURL=local-rules.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-rules.js","sourceRoot":"","sources":["../../src/lib/local-rules.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"local-rules.js","sourceRoot":"","sources":["../../src/lib/local-rules.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface SessionState {
|
|
2
|
+
session_id: string;
|
|
3
|
+
branch: string | null;
|
|
4
|
+
last_prompt_at: string;
|
|
5
|
+
prompt_count: number;
|
|
6
|
+
inject_count: number;
|
|
7
|
+
last_nudge_at?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function getOrCreateSession(cwd: string, branch: string | null): string;
|
|
10
|
+
export declare function getSessionState(cwd: string): SessionState | null;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/lib/session.ts"],"names":[],"mappings":"AAIA,UAAU,YAAY;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AA0BD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CA8B7E;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAEhE"}
|