promptscout 1.4.0 → 1.5.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/README.md +67 -0
- package/dist/commands/templates.d.ts +3 -0
- package/dist/commands/templates.js +62 -0
- package/dist/commands/templates.js.map +1 -0
- package/dist/core/orchestrator.d.ts +3 -1
- package/dist/core/orchestrator.js +7 -3
- package/dist/core/orchestrator.js.map +1 -1
- package/dist/core/rewriter.d.ts +4 -1
- package/dist/core/rewriter.js +16 -6
- package/dist/core/rewriter.js.map +1 -1
- package/dist/core/template-service.d.ts +14 -0
- package/dist/core/template-service.js +57 -0
- package/dist/core/template-service.js.map +1 -0
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/storage/database.js +12 -0
- package/dist/storage/database.js.map +1 -1
- package/dist/storage/schema.d.ts +83 -0
- package/dist/storage/schema.js +6 -0
- package/dist/storage/schema.js.map +1 -1
- package/dist/storage/template-repo.d.ts +15 -0
- package/dist/storage/template-repo.js +36 -0
- package/dist/storage/template-repo.js.map +1 -0
- package/dist/tools/implementations.js +17 -6
- package/dist/tools/implementations.js.map +1 -1
- package/dist/types.d.ts +6 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,6 +4,9 @@ A CLI tool that enriches your coding agent prompts with codebase context using a
|
|
|
4
4
|
|
|
5
5
|
**Designed as a Claude Code plugin.** It hooks into your prompt submission flow and adds codebase context before Claude sees it.
|
|
6
6
|
|
|
7
|
+
<img width="1715" height="1230" alt="CleanShot 2026-02-13 at 02 49 39" src="https://github.com/user-attachments/assets/d37eba7d-8697-4a2a-b231-b4217b90692e" />
|
|
8
|
+
|
|
9
|
+
|
|
7
10
|
## Motivation
|
|
8
11
|
|
|
9
12
|
When you ask a coding agent like Claude Code, Cursor, or Copilot to work on your codebase, the agent spends time and tokens discovering which files matter. It greps, reads, explores, all on your dime.
|
|
@@ -178,6 +181,70 @@ promptscout history show 42
|
|
|
178
181
|
promptscout history clear
|
|
179
182
|
```
|
|
180
183
|
|
|
184
|
+
## Templates
|
|
185
|
+
|
|
186
|
+
promptscout supports per-directory prompt templates. A template wraps your enriched prompt with custom instructions using the `<@prompt>` placeholder.
|
|
187
|
+
|
|
188
|
+
### Example template
|
|
189
|
+
|
|
190
|
+
```
|
|
191
|
+
You are an expert developer working on a React Native project.
|
|
192
|
+
Always prefer functional components and hooks.
|
|
193
|
+
|
|
194
|
+
<@prompt>
|
|
195
|
+
|
|
196
|
+
Follow the project's ESLint rules and use TypeScript strictly.
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
When you run `promptscout "fix the navigation bug"`, the output becomes:
|
|
200
|
+
|
|
201
|
+
```
|
|
202
|
+
You are an expert developer working on a React Native project.
|
|
203
|
+
Always prefer functional components and hooks.
|
|
204
|
+
|
|
205
|
+
fix the navigation bug
|
|
206
|
+
|
|
207
|
+
Context from codebase:
|
|
208
|
+
<file_finder query="navigation">
|
|
209
|
+
...
|
|
210
|
+
</file_finder>
|
|
211
|
+
|
|
212
|
+
Follow the project's ESLint rules and use TypeScript strictly.
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### Managing templates
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
# Create or edit a template for the current directory (opens $EDITOR)
|
|
219
|
+
promptscout template edit
|
|
220
|
+
|
|
221
|
+
# Create or edit a template for a specific directory
|
|
222
|
+
promptscout template edit -d /path/to/project
|
|
223
|
+
|
|
224
|
+
# View the template for a directory
|
|
225
|
+
promptscout template show -d /path/to/project
|
|
226
|
+
|
|
227
|
+
# Delete a template
|
|
228
|
+
promptscout template delete -d /path/to/project
|
|
229
|
+
|
|
230
|
+
# List all templates
|
|
231
|
+
promptscout template list
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
Templates are stored in the promptscout database (`~/.promptscout/promptscout.db`), not in your project files.
|
|
235
|
+
|
|
236
|
+
### Directory resolution
|
|
237
|
+
|
|
238
|
+
Templates use nearest-ancestor matching. If you set a template for `/projects/monorepo`, it also applies when running from `/projects/monorepo/packages/api` or any subdirectory, unless that subdirectory has its own template.
|
|
239
|
+
|
|
240
|
+
### Claude Code plugin
|
|
241
|
+
|
|
242
|
+
When the Claude Code plugin detects a template was used, it shows an indicator in the status message:
|
|
243
|
+
|
|
244
|
+
```
|
|
245
|
+
promptscout: (template used) enriched context (+5 files) (+3 sections)
|
|
246
|
+
```
|
|
247
|
+
|
|
181
248
|
## Examples
|
|
182
249
|
|
|
183
250
|
### Swift project (macOS audio capture tool)
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
export function registerTemplateCommand(program, templateService) {
|
|
2
|
+
const tmpl = program
|
|
3
|
+
.command("template")
|
|
4
|
+
.description("Manage per-directory prompt templates");
|
|
5
|
+
// promptscout template edit [-d <dir>]
|
|
6
|
+
tmpl
|
|
7
|
+
.command("edit")
|
|
8
|
+
.option("-d, --dir <dir>", "Target directory", process.cwd())
|
|
9
|
+
.action((opts) => {
|
|
10
|
+
const dir = opts.dir;
|
|
11
|
+
const saved = templateService.edit(dir);
|
|
12
|
+
if (saved) {
|
|
13
|
+
console.log(`Template saved for ${dir}`);
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
console.log("Template not saved (empty content).");
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
// promptscout template show [-d <dir>]
|
|
20
|
+
tmpl
|
|
21
|
+
.command("show")
|
|
22
|
+
.option("-d, --dir <dir>", "Target directory", process.cwd())
|
|
23
|
+
.action((opts) => {
|
|
24
|
+
const dir = opts.dir;
|
|
25
|
+
const content = templateService.get(dir);
|
|
26
|
+
if (content) {
|
|
27
|
+
console.log(content);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
console.log(`No template found for ${dir}`);
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
// promptscout template delete [-d <dir>]
|
|
34
|
+
tmpl
|
|
35
|
+
.command("delete")
|
|
36
|
+
.option("-d, --dir <dir>", "Target directory", process.cwd())
|
|
37
|
+
.action((opts) => {
|
|
38
|
+
const dir = opts.dir;
|
|
39
|
+
const deleted = templateService.delete(dir);
|
|
40
|
+
if (deleted) {
|
|
41
|
+
console.log(`Template deleted for ${dir}`);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
console.log(`No template found for ${dir}`);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
// promptscout template list
|
|
48
|
+
tmpl
|
|
49
|
+
.command("list")
|
|
50
|
+
.action(() => {
|
|
51
|
+
const entries = templateService.list();
|
|
52
|
+
if (entries.length === 0) {
|
|
53
|
+
console.log("No templates defined.");
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
for (const entry of entries) {
|
|
57
|
+
const preview = entry.content.split("\n")[0]?.slice(0, 60) ?? "";
|
|
58
|
+
console.log(` ${entry.directory} ${preview}...`);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/commands/templates.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,uBAAuB,CACrC,OAAgB,EAChB,eAAgC;IAEhC,MAAM,IAAI,GAAG,OAAO;SACjB,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,uCAAuC,CAAC,CAAC;IAExD,uCAAuC;IACvC,IAAI;SACD,OAAO,CAAC,MAAM,CAAC;SACf,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SAC5D,MAAM,CAAC,CAAC,IAA6B,EAAE,EAAE;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAa,CAAC;QAC/B,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,sBAAsB,GAAG,EAAE,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;QACrD,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,uCAAuC;IACvC,IAAI;SACD,OAAO,CAAC,MAAM,CAAC;SACf,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SAC5D,MAAM,CAAC,CAAC,IAA6B,EAAE,EAAE;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAa,CAAC;QAC/B,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,yCAAyC;IACzC,IAAI;SACD,OAAO,CAAC,QAAQ,CAAC;SACjB,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SAC5D,MAAM,CAAC,CAAC,IAA6B,EAAE,EAAE;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAa,CAAC;QAC/B,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5C,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,4BAA4B;IAC5B,IAAI;SACD,OAAO,CAAC,MAAM,CAAC;SACf,MAAM,CAAC,GAAG,EAAE;QACX,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC;QACvC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,SAAS,KAAK,OAAO,KAAK,CAAC,CAAC;QACrD,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import type { ProcessOptions } from "../types.js";
|
|
2
2
|
import type { HistoryRepo } from "../storage/history-repo.js";
|
|
3
3
|
import type { Rewriter } from "./rewriter.js";
|
|
4
|
+
import type { TemplateService } from "./template-service.js";
|
|
4
5
|
export declare class Orchestrator {
|
|
5
6
|
private historyRepo;
|
|
6
7
|
private rewriter;
|
|
7
|
-
|
|
8
|
+
private templateService;
|
|
9
|
+
constructor(historyRepo: HistoryRepo, rewriter: Rewriter, templateService: TemplateService);
|
|
8
10
|
processPrompt(options: ProcessOptions): Promise<{
|
|
9
11
|
improved: string;
|
|
10
12
|
}>;
|
|
@@ -4,21 +4,25 @@ import ora from "ora";
|
|
|
4
4
|
export class Orchestrator {
|
|
5
5
|
historyRepo;
|
|
6
6
|
rewriter;
|
|
7
|
-
|
|
7
|
+
templateService;
|
|
8
|
+
constructor(historyRepo, rewriter, templateService) {
|
|
8
9
|
this.historyRepo = historyRepo;
|
|
9
10
|
this.rewriter = rewriter;
|
|
11
|
+
this.templateService = templateService;
|
|
10
12
|
}
|
|
11
13
|
async processPrompt(options) {
|
|
12
14
|
const { rawPrompt, dryRun, outputFile, jsonOutput, noClipboard, projectDir, } = options;
|
|
15
|
+
const searchDir = projectDir ?? process.cwd();
|
|
16
|
+
const template = this.templateService.resolve(searchDir);
|
|
13
17
|
const spinner = jsonOutput ? null : ora().start();
|
|
14
18
|
const onStatus = spinner
|
|
15
19
|
? (message) => { spinner.text = message; }
|
|
16
20
|
: undefined;
|
|
17
|
-
const improved = await this.rewriter.rewrite(rawPrompt, projectDir, onStatus);
|
|
21
|
+
const { text: improved, templateUsed } = await this.rewriter.rewrite(rawPrompt, projectDir, onStatus, template);
|
|
18
22
|
spinner?.stop();
|
|
19
23
|
console.log("");
|
|
20
24
|
if (jsonOutput) {
|
|
21
|
-
console.log(JSON.stringify({ improved }));
|
|
25
|
+
console.log(JSON.stringify({ improved, templateUsed }));
|
|
22
26
|
}
|
|
23
27
|
else {
|
|
24
28
|
console.log(improved);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/core/orchestrator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/core/orchestrator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,MAAM,OAAO,YAAY;IAEb;IACA;IACA;IAHV,YACU,WAAwB,EACxB,QAAkB,EAClB,eAAgC;QAFhC,gBAAW,GAAX,WAAW,CAAa;QACxB,aAAQ,GAAR,QAAQ,CAAU;QAClB,oBAAe,GAAf,eAAe,CAAiB;IACvC,CAAC;IAEJ,KAAK,CAAC,aAAa,CAAC,OAAuB;QAGzC,MAAM,EACJ,SAAS,EACT,MAAM,EACN,UAAU,EACV,UAAU,EACV,WAAW,EACX,UAAU,GACX,GAAG,OAAO,CAAC;QAEZ,MAAM,SAAS,GAAG,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAEzD,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,OAAO;YACtB,CAAC,CAAC,CAAC,OAAe,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;YAClD,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAEhH,OAAO,EAAE,IAAI,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;QAED,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,EAAE,QAAQ,EAAE,CAAC;QACtB,CAAC;QAED,IAAI,UAAU,EAAE,CAAC;YACf,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;YAC/C,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YACtB,SAAS,EAAE,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE;YACtC,SAAS,EAAE,SAAS;YACpB,eAAe,EAAE,QAAQ;YACzB,YAAY,EAAE,QAAQ;YACtB,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;SACxC,CAAC,CAAC;QAEH,OAAO,EAAE,QAAQ,EAAE,CAAC;IACtB,CAAC;CACF"}
|
package/dist/core/rewriter.d.ts
CHANGED
|
@@ -3,5 +3,8 @@ export declare class Rewriter {
|
|
|
3
3
|
private configRepo;
|
|
4
4
|
constructor(configRepo: ConfigRepo);
|
|
5
5
|
getModelUri(): string;
|
|
6
|
-
rewrite(rawPrompt: string, projectDir?: string, onStatus?: (message: string) => void): Promise<
|
|
6
|
+
rewrite(rawPrompt: string, projectDir?: string, onStatus?: (message: string) => void, template?: string): Promise<{
|
|
7
|
+
text: string;
|
|
8
|
+
templateUsed: boolean;
|
|
9
|
+
}>;
|
|
7
10
|
}
|
package/dist/core/rewriter.js
CHANGED
|
@@ -30,7 +30,7 @@ export class Rewriter {
|
|
|
30
30
|
getModelUri() {
|
|
31
31
|
return this.configRepo.getModelHfUri();
|
|
32
32
|
}
|
|
33
|
-
async rewrite(rawPrompt, projectDir, onStatus) {
|
|
33
|
+
async rewrite(rawPrompt, projectDir, onStatus, template) {
|
|
34
34
|
const hfUri = this.configRepo.getModelHfUri();
|
|
35
35
|
const contextSize = this.configRepo.getModelContextSize();
|
|
36
36
|
const searchDir = projectDir ?? process.cwd();
|
|
@@ -39,8 +39,11 @@ export class Rewriter {
|
|
|
39
39
|
const systemPrompt = buildToolCallingPrompt(tree);
|
|
40
40
|
const raw = await generate(systemPrompt, rawPrompt, hfUri, contextSize, TOOL_CALLING_PARAMS);
|
|
41
41
|
const calls = parseToolCalls(raw);
|
|
42
|
-
if (calls.length === 0)
|
|
43
|
-
|
|
42
|
+
if (calls.length === 0) {
|
|
43
|
+
if (template)
|
|
44
|
+
return { text: template.replace("<@prompt>", rawPrompt), templateUsed: true };
|
|
45
|
+
return { text: rawPrompt, templateUsed: false };
|
|
46
|
+
}
|
|
44
47
|
onStatus?.(`Running ${calls.length} tool calls`);
|
|
45
48
|
const settled = await Promise.all(calls.map(async (call) => {
|
|
46
49
|
const result = await executeToolCall(call, searchDir);
|
|
@@ -49,13 +52,20 @@ export class Rewriter {
|
|
|
49
52
|
return formatToolResult(call, result);
|
|
50
53
|
}));
|
|
51
54
|
const results = settled.filter((r) => r !== null);
|
|
52
|
-
if (results.length === 0)
|
|
53
|
-
|
|
55
|
+
if (results.length === 0) {
|
|
56
|
+
if (template)
|
|
57
|
+
return { text: template.replace("<@prompt>", rawPrompt), templateUsed: true };
|
|
58
|
+
return { text: rawPrompt, templateUsed: false };
|
|
59
|
+
}
|
|
54
60
|
const outputs = [];
|
|
55
61
|
outputs.push(rawPrompt);
|
|
56
62
|
outputs.push("Context from codebase:");
|
|
57
63
|
outputs.push(results.join("\n\n"));
|
|
58
|
-
|
|
64
|
+
const assembled = outputs.join("\n\n");
|
|
65
|
+
if (template) {
|
|
66
|
+
return { text: template.replace("<@prompt>", assembled), templateUsed: true };
|
|
67
|
+
}
|
|
68
|
+
return { text: assembled, templateUsed: false };
|
|
59
69
|
}
|
|
60
70
|
}
|
|
61
71
|
//# sourceMappingURL=rewriter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rewriter.js","sourceRoot":"","sources":["../../src/core/rewriter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EACL,sBAAsB,EACtB,cAAc,GACf,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAEL,eAAe,EACf,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,mBAAmB,GAAoB;IAC3C,WAAW,EAAE,GAAG;IAChB,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,GAAG;IACT,aAAa,EAAE;QACb,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,GAAG;QACZ,gBAAgB,EAAE,GAAG;QACrB,eAAe,EAAE,GAAG;QACpB,eAAe,EAAE,KAAK;KACvB;CACF,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;AAE7D,SAAS,aAAa,CAAC,MAAc;IACnC,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAc,EAAE,MAAc;IACtD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;IACnC,OAAO,IAAI,IAAI,CAAC,IAAI,WAAW,KAAK,OAAO,MAAM,OAAO,IAAI,CAAC,IAAI,GAAG,CAAC;AACvE,CAAC;AAED,MAAM,OAAO,QAAQ;IACC;IAApB,YAAoB,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;IAAI,CAAC;IAE/C,WAAW;QACT,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,OAAO,CACX,SAAiB,EACjB,UAAmB,EACnB,QAAoC;
|
|
1
|
+
{"version":3,"file":"rewriter.js","sourceRoot":"","sources":["../../src/core/rewriter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EACL,sBAAsB,EACtB,cAAc,GACf,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAEL,eAAe,EACf,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,mBAAmB,GAAoB;IAC3C,WAAW,EAAE,GAAG;IAChB,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,GAAG;IACT,aAAa,EAAE;QACb,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,GAAG;QACZ,gBAAgB,EAAE,GAAG;QACrB,eAAe,EAAE,GAAG;QACpB,eAAe,EAAE,KAAK;KACvB;CACF,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;AAE7D,SAAS,aAAa,CAAC,MAAc;IACnC,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAc,EAAE,MAAc;IACtD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;IACnC,OAAO,IAAI,IAAI,CAAC,IAAI,WAAW,KAAK,OAAO,MAAM,OAAO,IAAI,CAAC,IAAI,GAAG,CAAC;AACvE,CAAC;AAED,MAAM,OAAO,QAAQ;IACC;IAApB,YAAoB,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;IAAI,CAAC;IAE/C,WAAW;QACT,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,OAAO,CACX,SAAiB,EACjB,UAAmB,EACnB,QAAoC,EACpC,QAAiB;QAEjB,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;QAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC;QAC1D,MAAM,SAAS,GAAG,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAE9C,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAC;QAEzB,MAAM,IAAI,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,YAAY,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,GAAG,GAAG,MAAM,QAAQ,CACxB,YAAY,EACZ,SAAS,EACT,KAAK,EACL,WAAW,EACX,mBAAmB,CACpB,CAAC;QAEF,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,IAAI,QAAQ;gBAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;YAC5F,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;QAClD,CAAC;QAED,QAAQ,EAAE,CAAC,WAAW,KAAK,CAAC,MAAM,aAAa,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACvB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACtD,IAAI,CAAC,MAAM,IAAI,aAAa,CAAC,MAAM,CAAC;gBAAE,OAAO,IAAI,CAAC;YAClD,OAAO,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACxC,CAAC,CAAC,CACH,CAAC;QACF,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QAE/D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,QAAQ;gBAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;YAC5F,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;QAClD,CAAC;QAED,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAEnC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEvC,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;QAChF,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;IAClD,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { TemplateRepo } from "../storage/template-repo.js";
|
|
2
|
+
export declare class TemplateService {
|
|
3
|
+
private templateRepo;
|
|
4
|
+
constructor(templateRepo: TemplateRepo);
|
|
5
|
+
edit(directory: string): boolean;
|
|
6
|
+
delete(directory: string): boolean;
|
|
7
|
+
get(directory: string): string | undefined;
|
|
8
|
+
list(): {
|
|
9
|
+
directory: string;
|
|
10
|
+
content: string;
|
|
11
|
+
}[];
|
|
12
|
+
resolve(directory: string): string | undefined;
|
|
13
|
+
apply(template: string, content: string): string;
|
|
14
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { resolve, dirname, join } from "node:path";
|
|
2
|
+
import { writeFileSync, readFileSync, unlinkSync } from "node:fs";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { execFileSync } from "node:child_process";
|
|
5
|
+
const PLACEHOLDER = "<@prompt>";
|
|
6
|
+
export class TemplateService {
|
|
7
|
+
templateRepo;
|
|
8
|
+
constructor(templateRepo) {
|
|
9
|
+
this.templateRepo = templateRepo;
|
|
10
|
+
}
|
|
11
|
+
edit(directory) {
|
|
12
|
+
const absDir = resolve(directory);
|
|
13
|
+
const existing = this.templateRepo.get(absDir);
|
|
14
|
+
const editor = process.env.EDITOR || process.env.VISUAL || "vi";
|
|
15
|
+
const tmpFile = join(tmpdir(), `promptscout-template-${Date.now()}.txt`);
|
|
16
|
+
writeFileSync(tmpFile, existing?.content ?? `\n${PLACEHOLDER}\n\n`, "utf-8");
|
|
17
|
+
try {
|
|
18
|
+
execFileSync(editor, [tmpFile], { stdio: "inherit" });
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
unlinkSync(tmpFile);
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
const content = readFileSync(tmpFile, "utf-8");
|
|
25
|
+
unlinkSync(tmpFile);
|
|
26
|
+
if (!content.trim())
|
|
27
|
+
return false;
|
|
28
|
+
this.templateRepo.upsert(absDir, content);
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
delete(directory) {
|
|
32
|
+
return this.templateRepo.delete(resolve(directory));
|
|
33
|
+
}
|
|
34
|
+
get(directory) {
|
|
35
|
+
return this.templateRepo.get(resolve(directory))?.content;
|
|
36
|
+
}
|
|
37
|
+
list() {
|
|
38
|
+
return this.templateRepo.list();
|
|
39
|
+
}
|
|
40
|
+
resolve(directory) {
|
|
41
|
+
let current = resolve(directory);
|
|
42
|
+
const root = resolve("/");
|
|
43
|
+
while (true) {
|
|
44
|
+
const entry = this.templateRepo.get(current);
|
|
45
|
+
if (entry)
|
|
46
|
+
return entry.content;
|
|
47
|
+
if (current === root)
|
|
48
|
+
break;
|
|
49
|
+
current = dirname(current);
|
|
50
|
+
}
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
apply(template, content) {
|
|
54
|
+
return template.replace(PLACEHOLDER, content);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=template-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-service.js","sourceRoot":"","sources":["../../src/core/template-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,MAAM,WAAW,GAAG,WAAW,CAAC;AAEhC,MAAM,OAAO,eAAe;IACN;IAApB,YAAoB,YAA0B;QAA1B,iBAAY,GAAZ,YAAY,CAAc;IAAG,CAAC;IAElD,IAAI,CAAC,SAAiB;QACpB,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC;QAChE,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,wBAAwB,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAEzE,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,IAAI,KAAK,WAAW,MAAM,EAAE,OAAO,CAAC,CAAC;QAE7E,IAAI,CAAC;YACH,YAAY,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,UAAU,CAAC,OAAO,CAAC,CAAC;YACpB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/C,UAAU,CAAC,OAAO,CAAC,CAAC;QAEpB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YAAE,OAAO,KAAK,CAAC;QAElC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,SAAiB;QACtB,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,GAAG,CAAC,SAAiB;QACnB,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC;IAC5D,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC;IAED,OAAO,CAAC,SAAiB;QACvB,IAAI,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1B,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC7C,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAC,OAAO,CAAC;YAChC,IAAI,OAAO,KAAK,IAAI;gBAAE,MAAM;YAC5B,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,QAAgB,EAAE,OAAe;QACrC,OAAO,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;CACF"}
|
package/dist/index.js
CHANGED
|
@@ -12,6 +12,9 @@ import { HistoryService } from "./core/history-service.js";
|
|
|
12
12
|
import { registerSetupCommand } from "./commands/setup.js";
|
|
13
13
|
import { registerRewriteCommand } from "./commands/rewrite.js";
|
|
14
14
|
import { registerHistoryCommand } from "./commands/history.js";
|
|
15
|
+
import { TemplateRepo } from "./storage/template-repo.js";
|
|
16
|
+
import { TemplateService } from "./core/template-service.js";
|
|
17
|
+
import { registerTemplateCommand } from "./commands/templates.js";
|
|
15
18
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
16
19
|
const pkg = JSON.parse(readFileSync(join(__dirname, "..", "package.json"), "utf-8"));
|
|
17
20
|
const program = new Command();
|
|
@@ -24,14 +27,17 @@ const db = getDrizzle();
|
|
|
24
27
|
// 2. Repositories
|
|
25
28
|
const historyRepo = new HistoryRepo(db);
|
|
26
29
|
const configRepo = new ConfigRepo(db);
|
|
30
|
+
const templateRepo = new TemplateRepo(db);
|
|
27
31
|
// 3. Services
|
|
28
32
|
const rewriter = new Rewriter(configRepo);
|
|
29
|
-
const
|
|
33
|
+
const templateService = new TemplateService(templateRepo);
|
|
34
|
+
const orchestrator = new Orchestrator(historyRepo, rewriter, templateService);
|
|
30
35
|
const historyService = new HistoryService(historyRepo);
|
|
31
36
|
// 4. Commands
|
|
32
37
|
registerSetupCommand(program);
|
|
33
38
|
registerRewriteCommand(program, orchestrator);
|
|
34
39
|
registerHistoryCommand(program, historyService);
|
|
40
|
+
registerTemplateCommand(program, templateService);
|
|
35
41
|
async function main() {
|
|
36
42
|
try {
|
|
37
43
|
await program.parseAsync(process.argv);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/storage/database.js
CHANGED
|
@@ -30,6 +30,18 @@ function migrate(database) {
|
|
|
30
30
|
PRAGMA user_version = 2;
|
|
31
31
|
`);
|
|
32
32
|
}
|
|
33
|
+
if (version < 3) {
|
|
34
|
+
database.exec(`
|
|
35
|
+
CREATE TABLE IF NOT EXISTS templates (
|
|
36
|
+
directory TEXT PRIMARY KEY,
|
|
37
|
+
content TEXT NOT NULL,
|
|
38
|
+
created_at TEXT DEFAULT (datetime('now')),
|
|
39
|
+
updated_at TEXT DEFAULT (datetime('now'))
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
PRAGMA user_version = 3;
|
|
43
|
+
`);
|
|
44
|
+
}
|
|
33
45
|
}
|
|
34
46
|
export function getDatabase() {
|
|
35
47
|
if (db)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/storage/database.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,IAAI,EAAE,GAA6B,IAAI,CAAC;AACxC,IAAI,SAAS,GAAiC,IAAI,CAAC;AAEnD,SAAS,OAAO,CAAC,QAA2B;IAC1C,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAW,CAAC;IAE5E,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,QAAQ,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;KAgBb,CAAC,CAAC;IACL,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,QAAQ,CAAC,IAAI,CAAC;;;KAGb,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAElB,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1B,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,CAAC;IACZ,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IAChC,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC;IAC7B,SAAS,GAAG,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACxC,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/storage/database.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,IAAI,EAAE,GAA6B,IAAI,CAAC;AACxC,IAAI,SAAS,GAAiC,IAAI,CAAC;AAEnD,SAAS,OAAO,CAAC,QAA2B;IAC1C,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAW,CAAC;IAE5E,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,QAAQ,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;KAgBb,CAAC,CAAC;IACL,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,QAAQ,CAAC,IAAI,CAAC;;;KAGb,CAAC,CAAC;IACL,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,QAAQ,CAAC,IAAI,CAAC;;;;;;;;;KASb,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAElB,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1B,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,CAAC;IACZ,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IAChC,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC;IAC7B,SAAS,GAAG,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACxC,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
package/dist/storage/schema.d.ts
CHANGED
|
@@ -181,3 +181,86 @@ export declare const config: import("drizzle-orm/sqlite-core").SQLiteTableWithCo
|
|
|
181
181
|
};
|
|
182
182
|
dialect: "sqlite";
|
|
183
183
|
}>;
|
|
184
|
+
export declare const templates: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
|
|
185
|
+
name: "templates";
|
|
186
|
+
schema: undefined;
|
|
187
|
+
columns: {
|
|
188
|
+
directory: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
189
|
+
name: "directory";
|
|
190
|
+
tableName: "templates";
|
|
191
|
+
dataType: "string";
|
|
192
|
+
columnType: "SQLiteText";
|
|
193
|
+
data: string;
|
|
194
|
+
driverParam: string;
|
|
195
|
+
notNull: true;
|
|
196
|
+
hasDefault: false;
|
|
197
|
+
isPrimaryKey: true;
|
|
198
|
+
isAutoincrement: false;
|
|
199
|
+
hasRuntimeDefault: false;
|
|
200
|
+
enumValues: [string, ...string[]];
|
|
201
|
+
baseColumn: never;
|
|
202
|
+
identity: undefined;
|
|
203
|
+
generated: undefined;
|
|
204
|
+
}, {}, {
|
|
205
|
+
length: number | undefined;
|
|
206
|
+
}>;
|
|
207
|
+
content: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
208
|
+
name: "content";
|
|
209
|
+
tableName: "templates";
|
|
210
|
+
dataType: "string";
|
|
211
|
+
columnType: "SQLiteText";
|
|
212
|
+
data: string;
|
|
213
|
+
driverParam: string;
|
|
214
|
+
notNull: true;
|
|
215
|
+
hasDefault: false;
|
|
216
|
+
isPrimaryKey: false;
|
|
217
|
+
isAutoincrement: false;
|
|
218
|
+
hasRuntimeDefault: false;
|
|
219
|
+
enumValues: [string, ...string[]];
|
|
220
|
+
baseColumn: never;
|
|
221
|
+
identity: undefined;
|
|
222
|
+
generated: undefined;
|
|
223
|
+
}, {}, {
|
|
224
|
+
length: number | undefined;
|
|
225
|
+
}>;
|
|
226
|
+
created_at: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
227
|
+
name: "created_at";
|
|
228
|
+
tableName: "templates";
|
|
229
|
+
dataType: "string";
|
|
230
|
+
columnType: "SQLiteText";
|
|
231
|
+
data: string;
|
|
232
|
+
driverParam: string;
|
|
233
|
+
notNull: false;
|
|
234
|
+
hasDefault: true;
|
|
235
|
+
isPrimaryKey: false;
|
|
236
|
+
isAutoincrement: false;
|
|
237
|
+
hasRuntimeDefault: false;
|
|
238
|
+
enumValues: [string, ...string[]];
|
|
239
|
+
baseColumn: never;
|
|
240
|
+
identity: undefined;
|
|
241
|
+
generated: undefined;
|
|
242
|
+
}, {}, {
|
|
243
|
+
length: number | undefined;
|
|
244
|
+
}>;
|
|
245
|
+
updated_at: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
246
|
+
name: "updated_at";
|
|
247
|
+
tableName: "templates";
|
|
248
|
+
dataType: "string";
|
|
249
|
+
columnType: "SQLiteText";
|
|
250
|
+
data: string;
|
|
251
|
+
driverParam: string;
|
|
252
|
+
notNull: false;
|
|
253
|
+
hasDefault: true;
|
|
254
|
+
isPrimaryKey: false;
|
|
255
|
+
isAutoincrement: false;
|
|
256
|
+
hasRuntimeDefault: false;
|
|
257
|
+
enumValues: [string, ...string[]];
|
|
258
|
+
baseColumn: never;
|
|
259
|
+
identity: undefined;
|
|
260
|
+
generated: undefined;
|
|
261
|
+
}, {}, {
|
|
262
|
+
length: number | undefined;
|
|
263
|
+
}>;
|
|
264
|
+
};
|
|
265
|
+
dialect: "sqlite";
|
|
266
|
+
}>;
|
package/dist/storage/schema.js
CHANGED
|
@@ -13,4 +13,10 @@ export const config = sqliteTable("config", {
|
|
|
13
13
|
key: text("key").primaryKey(),
|
|
14
14
|
value: text("value").notNull(),
|
|
15
15
|
});
|
|
16
|
+
export const templates = sqliteTable("templates", {
|
|
17
|
+
directory: text("directory").primaryKey(),
|
|
18
|
+
content: text("content").notNull(),
|
|
19
|
+
created_at: text("created_at").default(sql `(datetime('now'))`),
|
|
20
|
+
updated_at: text("updated_at").default(sql `(datetime('now'))`),
|
|
21
|
+
});
|
|
16
22
|
//# sourceMappingURL=schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/storage/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC,MAAM,CAAC,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,EAAE;IAC5C,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IACrD,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE;IACtC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE;IACtC,eAAe,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,OAAO,EAAE;IAClD,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE;IAC5C,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC;IAC9B,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,GAAG,CAAA,mBAAmB,CAAC;CAC/D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,EAAE;IAC1C,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE;IAC7B,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE;CAC/B,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/storage/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC,MAAM,CAAC,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,EAAE;IAC5C,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IACrD,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE;IACtC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE;IACtC,eAAe,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,OAAO,EAAE;IAClD,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE;IAC5C,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC;IAC9B,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,GAAG,CAAA,mBAAmB,CAAC;CAC/D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,EAAE;IAC1C,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE;IAC7B,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE;CAC/B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAC,WAAW,EAAE;IAChD,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,UAAU,EAAE;IACzC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE;IAClC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,GAAG,CAAA,mBAAmB,CAAC;IAC9D,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,GAAG,CAAA,mBAAmB,CAAC;CAC/D,CAAC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { BetterSQLite3Database } from "drizzle-orm/better-sqlite3";
|
|
2
|
+
export declare class TemplateRepo {
|
|
3
|
+
private db;
|
|
4
|
+
constructor(db: BetterSQLite3Database);
|
|
5
|
+
get(directory: string): {
|
|
6
|
+
directory: string;
|
|
7
|
+
content: string;
|
|
8
|
+
} | undefined;
|
|
9
|
+
upsert(directory: string, content: string): void;
|
|
10
|
+
delete(directory: string): boolean;
|
|
11
|
+
list(): {
|
|
12
|
+
directory: string;
|
|
13
|
+
content: string;
|
|
14
|
+
}[];
|
|
15
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { eq } from "drizzle-orm";
|
|
2
|
+
import { templates } from "./schema.js";
|
|
3
|
+
export class TemplateRepo {
|
|
4
|
+
db;
|
|
5
|
+
constructor(db) {
|
|
6
|
+
this.db = db;
|
|
7
|
+
}
|
|
8
|
+
get(directory) {
|
|
9
|
+
return this.db
|
|
10
|
+
.select()
|
|
11
|
+
.from(templates)
|
|
12
|
+
.where(eq(templates.directory, directory))
|
|
13
|
+
.get();
|
|
14
|
+
}
|
|
15
|
+
upsert(directory, content) {
|
|
16
|
+
this.db
|
|
17
|
+
.insert(templates)
|
|
18
|
+
.values({ directory, content })
|
|
19
|
+
.onConflictDoUpdate({
|
|
20
|
+
target: templates.directory,
|
|
21
|
+
set: { content, updated_at: new Date().toISOString() },
|
|
22
|
+
})
|
|
23
|
+
.run();
|
|
24
|
+
}
|
|
25
|
+
delete(directory) {
|
|
26
|
+
const result = this.db
|
|
27
|
+
.delete(templates)
|
|
28
|
+
.where(eq(templates.directory, directory))
|
|
29
|
+
.run();
|
|
30
|
+
return result.changes > 0;
|
|
31
|
+
}
|
|
32
|
+
list() {
|
|
33
|
+
return this.db.select().from(templates).all();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=template-repo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-repo.js","sourceRoot":"","sources":["../../src/storage/template-repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEjC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,OAAO,YAAY;IACH;IAApB,YAAoB,EAAyB;QAAzB,OAAE,GAAF,EAAE,CAAuB;IAAG,CAAC;IAEjD,GAAG,CAAC,SAAiB;QACnB,OAAO,IAAI,CAAC,EAAE;aACX,MAAM,EAAE;aACR,IAAI,CAAC,SAAS,CAAC;aACf,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;aACzC,GAAG,EAAE,CAAC;IACX,CAAC;IAED,MAAM,CAAC,SAAiB,EAAE,OAAe;QACvC,IAAI,CAAC,EAAE;aACJ,MAAM,CAAC,SAAS,CAAC;aACjB,MAAM,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;aAC9B,kBAAkB,CAAC;YAClB,MAAM,EAAE,SAAS,CAAC,SAAS;YAC3B,GAAG,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE;SACvD,CAAC;aACD,GAAG,EAAE,CAAC;IACX,CAAC;IAED,MAAM,CAAC,SAAiB;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE;aACnB,MAAM,CAAC,SAAS,CAAC;aACjB,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;aACzC,GAAG,EAAE,CAAC;QACT,OAAO,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC;IAChD,CAAC;CACF"}
|
|
@@ -2,6 +2,7 @@ import { escapeRegex, stripDirPrefix, rgSync, gitSync, } from "./search-utils.js
|
|
|
2
2
|
const MAX_FILES = 10;
|
|
3
3
|
const MAX_LINES = 20;
|
|
4
4
|
const MAX_COMMITS = 10;
|
|
5
|
+
const MD_PENALTY = 0.5;
|
|
5
6
|
// Multi-language definition patterns:
|
|
6
7
|
// JS/TS: export, function, class, interface, type, const, enum
|
|
7
8
|
// Python: def, class, async def
|
|
@@ -20,6 +21,8 @@ function scoreFilePath(filePath, lowerQuery) {
|
|
|
20
21
|
score += 3;
|
|
21
22
|
else if (lower.includes(lowerQuery))
|
|
22
23
|
score += 1;
|
|
24
|
+
if (basename.endsWith(".md"))
|
|
25
|
+
score *= MD_PENALTY;
|
|
23
26
|
return score;
|
|
24
27
|
}
|
|
25
28
|
export function fileFinder(query, dir) {
|
|
@@ -53,24 +56,32 @@ export function definitionFinder(query, dir) {
|
|
|
53
56
|
if (!output)
|
|
54
57
|
return "No definitions found.";
|
|
55
58
|
const lowerQuery = query.toLowerCase();
|
|
56
|
-
const
|
|
59
|
+
const scored = output
|
|
57
60
|
.split("\n")
|
|
58
61
|
.filter(Boolean)
|
|
59
62
|
.filter((line) => line.toLowerCase().includes(lowerQuery))
|
|
63
|
+
.map((l) => ({ line: stripDirPrefix(l, dir), score: scoreFilePath(l, lowerQuery) }))
|
|
64
|
+
.sort((a, b) => b.score - a.score)
|
|
60
65
|
.slice(0, MAX_LINES);
|
|
61
|
-
if (
|
|
66
|
+
if (scored.length === 0)
|
|
62
67
|
return "No matching definitions found.";
|
|
63
|
-
return
|
|
68
|
+
return scored.map((s) => s.line).join("\n");
|
|
64
69
|
}
|
|
65
70
|
export function importTracer(query, dir) {
|
|
66
71
|
const escaped = escapeRegex(query);
|
|
67
72
|
const output = rgSync(["-n", `(import|from|require|include|use).*${escaped}`], dir);
|
|
68
73
|
if (!output)
|
|
69
74
|
return "No matching imports found.";
|
|
70
|
-
const
|
|
71
|
-
|
|
75
|
+
const lowerQuery = query.toLowerCase();
|
|
76
|
+
const scored = output
|
|
77
|
+
.split("\n")
|
|
78
|
+
.filter(Boolean)
|
|
79
|
+
.map((l) => ({ line: stripDirPrefix(l, dir), score: scoreFilePath(l, lowerQuery) }))
|
|
80
|
+
.sort((a, b) => b.score - a.score)
|
|
81
|
+
.slice(0, MAX_LINES);
|
|
82
|
+
if (scored.length === 0)
|
|
72
83
|
return "No matching imports found.";
|
|
73
|
-
return
|
|
84
|
+
return scored.map((s) => s.line).join("\n");
|
|
74
85
|
}
|
|
75
86
|
export function gitHistory(query, dir) {
|
|
76
87
|
const output = gitSync(["log", "--format=>> %h %s", "--name-only", "-n", String(MAX_COMMITS), "-S", query], dir);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"implementations.js","sourceRoot":"","sources":["../../src/tools/implementations.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,cAAc,EACd,MAAM,EACN,OAAO,GACR,MAAM,mBAAmB,CAAC;AAE3B,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,WAAW,GAAG,EAAE,CAAC;AAEvB,sCAAsC;AACtC,+DAA+D;AAC/D,gCAAgC;AAChC,6BAA6B;AAC7B,mFAAmF;AACnF,6CAA6C;AAC7C,2BAA2B;AAC3B,8DAA8D;AAC9D,MAAM,kBAAkB,GACtB,mDAAmD;IACnD,qGAAqG,CAAC;AAExG,SAAS,aAAa,CAAC,QAAgB,EAAE,UAAkB;IACzD,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IAC9C,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,+BAA+B;IAC9C,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,KAAK,IAAI,CAAC,CAAC;SACzC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,KAAK,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"implementations.js","sourceRoot":"","sources":["../../src/tools/implementations.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -11,6 +11,12 @@ export interface ConfigEntry {
|
|
|
11
11
|
key: string;
|
|
12
12
|
value: string;
|
|
13
13
|
}
|
|
14
|
+
export interface TemplateEntry {
|
|
15
|
+
directory: string;
|
|
16
|
+
content: string;
|
|
17
|
+
created_at: string;
|
|
18
|
+
updated_at: string;
|
|
19
|
+
}
|
|
14
20
|
export interface InferenceParams {
|
|
15
21
|
temperature: number;
|
|
16
22
|
topP: number;
|