promptscout 1.1.0 → 1.3.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 CHANGED
@@ -38,6 +38,12 @@ flowchart LR
38
38
 
39
39
  ### Install
40
40
 
41
+ ```bash
42
+ npm install -g promptscout
43
+ ```
44
+
45
+ Or from source:
46
+
41
47
  ```bash
42
48
  git clone https://github.com/obsfx/promptscout.git
43
49
  cd promptscout
@@ -75,15 +81,21 @@ Or in Claude Code interactive mode:
75
81
 
76
82
  Once installed, every prompt you submit in Claude Code gets enriched with codebase context via the `UserPromptSubmit` hook. The plugin passes your prompt through `promptscout` with `--json-output --no-clipboard` and injects the result as additional context.
77
83
 
84
+ When context is found, the plugin shows a summary notification:
85
+
86
+ ```
87
+ promptscout: enriched context (+5 files) (+3 sections) (+1 definitions)
88
+ ```
89
+
78
90
  If `promptscout` is not installed or fails for any reason, the plugin falls back silently and your original prompt goes through unchanged.
79
91
 
80
92
  ## Model
81
93
 
82
- promptscout uses `Qwen 3 4B` (`Q4_K_M` quantization) running locally via [node-llama-cpp](https://github.com/withcatai/node-llama-cpp). The model runs on CPU by default to avoid GPU memory issues on constrained machines.
94
+ promptscout uses `Qwen 3 4B` (`Q4_K_M` quantization) running locally via [node-llama-cpp](https://github.com/withcatai/node-llama-cpp). The model uses GPU acceleration automatically when available (Metal on macOS, CUDA on Linux).
83
95
 
84
96
  - Size: ~2.5GB (`GGUF Q4_K_M`)
85
97
  - Context: 4096 tokens
86
- - Latency: 7-15s per prompt (CPU, Apple Silicon)
98
+ - Latency: ~2s per prompt (Metal, Apple Silicon)
87
99
  - Purpose: Decides which search tools to call based on your prompt. Does not rewrite your text.
88
100
 
89
101
  ## Tools
@@ -127,6 +139,52 @@ promptscout --json-output "fix the pagination bug"
127
139
  --project-dir <dir> Project root directory
128
140
  ```
129
141
 
142
+ ## Commands
143
+
144
+ ### `promptscout setup`
145
+
146
+ Initialize promptscout and download the default model. Creates the data directory at `~/.promptscout/` and downloads `Qwen 3 4B` (~2.5GB).
147
+
148
+ ```bash
149
+ promptscout setup
150
+ ```
151
+
152
+ ### `promptscout history`
153
+
154
+ View prompt history with paginated table output.
155
+
156
+ ```bash
157
+ # Show history for current directory (default: 10 per page)
158
+ promptscout history
159
+
160
+ # Show all history across directories
161
+ promptscout history -a
162
+
163
+ # Paginate results
164
+ promptscout history -p 2 -n 5
165
+
166
+ # Show full detail of a specific entry
167
+ promptscout history show 42
168
+
169
+ # Clear all history
170
+ promptscout history clear
171
+ ```
172
+
173
+ ### `promptscout system-prompt`
174
+
175
+ View and manage the LLM system prompt that controls how prompts are classified and tools are selected.
176
+
177
+ ```bash
178
+ # View current system prompt and token count
179
+ promptscout system-prompt
180
+
181
+ # Edit in $EDITOR
182
+ promptscout system-prompt edit
183
+
184
+ # Reset to default
185
+ promptscout system-prompt reset
186
+ ```
187
+
130
188
  ## Examples
131
189
 
132
190
  ### Swift project (macOS audio capture tool)
@@ -1,23 +1,38 @@
1
1
  import { confirm } from "@inquirer/prompts";
2
+ import Table from "cli-table3";
2
3
  export function registerHistoryCommand(program, service) {
3
4
  const hist = program.command("history").description("View prompt history");
4
5
  hist
5
6
  .option("-a, --all", "Show history across all directories")
6
- .option("-n, --limit <number>", "Number of entries to show", "20")
7
+ .option("-n, --limit <number>", "Number of entries per page", "10")
8
+ .option("-p, --page <number>", "Page number", "1")
7
9
  .action((opts) => {
8
10
  const limit = parseInt(opts.limit, 10);
9
- const entries = service.list(!!opts.all, limit);
10
- if (entries.length === 0) {
11
+ const page = parseInt(opts.page, 10);
12
+ const offset = (page - 1) * limit;
13
+ const entries = service.list(!!opts.all, limit, offset);
14
+ if (entries.length === 0 && page === 1) {
11
15
  console.log("No history entries found.");
12
16
  if (!opts.all) {
13
17
  console.log("Tip: Use -a to show history from all directories.");
14
18
  }
15
19
  return;
16
20
  }
17
- for (let i = 0; i < entries.length; i++) {
18
- const e = entries[i];
19
- console.log(`│ (${e.id}) (${e.model_name}) ${e.preview}`);
21
+ if (entries.length === 0) {
22
+ console.log(`No entries on page ${page}.`);
23
+ return;
24
+ }
25
+ const table = new Table({
26
+ head: ["#", "Model", "Prompt"],
27
+ colWidths: [6, 22, 60],
28
+ wordWrap: true,
29
+ style: { head: [], border: [] },
30
+ });
31
+ for (const e of entries) {
32
+ table.push([String(e.id), e.model_name, e.preview]);
20
33
  }
34
+ console.log(table.toString());
35
+ console.log(` Page ${page} | ${entries.length} entries | promptscout history -p ${page + 1}`);
21
36
  });
22
37
  hist
23
38
  .command("show <id>")
@@ -28,13 +43,16 @@ export function registerHistoryCommand(program, service) {
28
43
  console.error(`Error: History entry #${id} not found.`);
29
44
  process.exit(1);
30
45
  }
31
- console.log(`(${entry.id})`);
32
- console.log(`│ Date: ${entry.created_at}`);
33
- console.log(`│ Directory: ${entry.directory}`);
34
- console.log(`│ Model: ${entry.model_name || "N/A"}`);
35
- console.log(`│ Raw Input:`);
46
+ const table = new Table({
47
+ style: { head: [], border: [] },
48
+ wordWrap: true,
49
+ colWidths: [14, 74],
50
+ });
51
+ table.push(["ID", String(entry.id)], ["Date", entry.created_at], ["Directory", entry.directory], ["Model", entry.model_name || "N/A"]);
52
+ console.log(table.toString());
53
+ console.log("\nRaw Input:");
36
54
  console.log(entry.raw_input);
37
- console.log(`│ Improved Output:`);
55
+ console.log("\nImproved Output:");
38
56
  console.log(entry.improved_output);
39
57
  });
40
58
  hist
@@ -1 +1 @@
1
- {"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/commands/history.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/commands/history.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@ export declare const MODEL_DOWNLOAD_URI = "hf:Qwen/Qwen3-4B-GGUF:Q4_K_M";
7
7
  export declare const LLM_CONTEXT_SIZE = 4096;
8
8
  export declare const MODEL_HF_URI_KEY = "model_hf_uri";
9
9
  export declare const MODEL_CONTEXT_SIZE_KEY = "model_context_size";
10
- export declare const GPU_LAYERS = 0;
10
+ export declare const GPU_LAYERS: "auto";
11
11
  export declare const RESPONSE_TOKEN_RESERVE = 1024;
12
12
  export declare const HISTORY_PREVIEW_LENGTH = 60;
13
13
  export declare const DEFAULT_HISTORY_LIMIT = 20;
package/dist/constants.js CHANGED
@@ -11,8 +11,8 @@ export const MODEL_DOWNLOAD_URI = "hf:Qwen/Qwen3-4B-GGUF:Q4_K_M";
11
11
  export const LLM_CONTEXT_SIZE = 4096;
12
12
  export const MODEL_HF_URI_KEY = "model_hf_uri";
13
13
  export const MODEL_CONTEXT_SIZE_KEY = "model_context_size";
14
- // CPU-only to avoid Metal OOM on constrained machines
15
- export const GPU_LAYERS = 0;
14
+ // "auto" lets node-llama-cpp offload as many layers as fit in GPU/Metal memory
15
+ export const GPU_LAYERS = "auto";
16
16
  // Tokens reserved for the model's response
17
17
  export const RESPONSE_TOKEN_RESERVE = 1024;
18
18
  export const HISTORY_PREVIEW_LENGTH = 60;
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;AAEvB,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;AACnD,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;AACxD,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAElD,MAAM,CAAC,MAAM,eAAe,GAAG,sBAAsB,CAAC;AACtD,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;AAC7D,MAAM,CAAC,MAAM,kBAAkB,GAAG,8BAA8B,CAAC;AAEjE,OAAO;AACP,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAErC,MAAM,CAAC,MAAM,gBAAgB,GAAG,cAAc,CAAC;AAC/C,MAAM,CAAC,MAAM,sBAAsB,GAAG,oBAAoB,CAAC;AAC3D,sDAAsD;AACtD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC;AAE5B,2CAA2C;AAC3C,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC;AAE3C,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AACzC,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACxC,MAAM,CAAC,MAAM,iBAAiB,GAAG,eAAe,CAAC;AAEjD,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eA4FtB,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;AAEvB,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;AACnD,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;AACxD,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAElD,MAAM,CAAC,MAAM,eAAe,GAAG,sBAAsB,CAAC;AACtD,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;AAC7D,MAAM,CAAC,MAAM,kBAAkB,GAAG,8BAA8B,CAAC;AAEjE,OAAO;AACP,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAErC,MAAM,CAAC,MAAM,gBAAgB,GAAG,cAAc,CAAC;AAC/C,MAAM,CAAC,MAAM,sBAAsB,GAAG,oBAAoB,CAAC;AAC3D,+EAA+E;AAC/E,MAAM,CAAC,MAAM,UAAU,GAAG,MAAe,CAAC;AAE1C,2CAA2C;AAC3C,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC;AAE3C,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AACzC,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACxC,MAAM,CAAC,MAAM,iBAAiB,GAAG,eAAe,CAAC;AAEjD,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eA4FtB,CAAC"}
@@ -9,7 +9,7 @@ export interface HistoryListItem {
9
9
  export declare class HistoryService {
10
10
  private historyRepo;
11
11
  constructor(historyRepo: HistoryRepo);
12
- list(all: boolean, limit: number): HistoryListItem[];
12
+ list(all: boolean, limit: number, offset?: number): HistoryListItem[];
13
13
  findById(id: number): HistoryEntry | undefined;
14
14
  clear(): void;
15
15
  }
@@ -5,9 +5,9 @@ export class HistoryService {
5
5
  constructor(historyRepo) {
6
6
  this.historyRepo = historyRepo;
7
7
  }
8
- list(all, limit) {
8
+ list(all, limit, offset = 0) {
9
9
  const directory = all ? undefined : process.cwd();
10
- const entries = this.historyRepo.list(directory, limit);
10
+ const entries = this.historyRepo.list(directory, limit, offset);
11
11
  return entries.map((e) => ({
12
12
  id: e.id,
13
13
  createdAt: e.created_at,
@@ -1 +1 @@
1
- {"version":3,"file":"history-service.js","sourceRoot":"","sources":["../../src/core/history-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAS5C,MAAM,OAAO,cAAc;IACL;IAApB,YAAoB,WAAwB;QAAxB,gBAAW,GAAX,WAAW,CAAa;IAAG,CAAC;IAEhD,IAAI,CAAC,GAAY,EAAE,KAAa;QAC9B,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACxD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzB,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,SAAS,EAAE,CAAC,CAAC,UAAU;YACvB,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,sBAAsB,CAAC;YACtD,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK;SACpD,CAAC,CAAC,CAAC;IACN,CAAC;IAED,QAAQ,CAAC,EAAU;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;CACF"}
1
+ {"version":3,"file":"history-service.js","sourceRoot":"","sources":["../../src/core/history-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAS5C,MAAM,OAAO,cAAc;IACL;IAApB,YAAoB,WAAwB;QAAxB,gBAAW,GAAX,WAAW,CAAa;IAAG,CAAC;IAEhD,IAAI,CAAC,GAAY,EAAE,KAAa,EAAE,SAAiB,CAAC;QAClD,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAChE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzB,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,SAAS,EAAE,CAAC,CAAC,UAAU;YACvB,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,sBAAsB,CAAC;YACtD,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK;SACpD,CAAC,CAAC,CAAC;IACN,CAAC;IAED,QAAQ,CAAC,EAAU;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;CACF"}
@@ -41,15 +41,14 @@ export class Rewriter {
41
41
  if (calls.length === 0)
42
42
  return rawPrompt;
43
43
  const ig = loadIgnoreFilter(searchDir);
44
- const results = [];
45
- for (const call of calls) {
46
- const param = call.arguments.url ?? call.arguments.query;
47
- onStatus?.(`Called ${call.name}(${param})`);
44
+ onStatus?.(`Running ${calls.length} tool calls`);
45
+ const settled = await Promise.all(calls.map(async (call) => {
48
46
  const result = await executeToolCall(call, searchDir, ig);
49
47
  if (!result || isEmptyResult(result))
50
- continue;
51
- results.push(formatToolResult(call, result));
52
- }
48
+ return null;
49
+ return formatToolResult(call, result);
50
+ }));
51
+ const results = settled.filter((r) => r !== null);
53
52
  if (results.length === 0)
54
53
  return rawPrompt;
55
54
  const outputs = [];
@@ -1 +1 @@
1
- {"version":3,"file":"rewriter.js","sourceRoot":"","sources":["../../src/core/rewriter.ts"],"names":[],"mappings":"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"}
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,gBAAgB,EAChB,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,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;IACzD,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;QAEpC,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,YAAY,GAAG,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;QAC9D,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;YAAE,OAAO,SAAS,CAAC;QAEzC,MAAM,EAAE,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAEvC,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,EAAE,EAAE,CAAC,CAAC;YAC1D,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;YAAE,OAAO,SAAS,CAAC;QAE3C,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,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;CACF"}
@@ -1,5 +1,5 @@
1
1
  import { existsSync } from "node:fs";
2
- import { getLlama, resolveModelFile, LlamaChatSession, LlamaLogLevel, } from "node-llama-cpp";
2
+ import { getLlama, resolveModelFile, LlamaChatSession, LlamaLogLevel, QwenChatWrapper, resolveChatWrapper, } from "node-llama-cpp";
3
3
  import { GPU_LAYERS } from "../constants.js";
4
4
  import { getModelDir } from "./model-manager.js";
5
5
  export async function generate(systemPrompt, userPrompt, hfUri, contextSize, inferenceParams, onToken) {
@@ -17,9 +17,14 @@ export async function generate(systemPrompt, userPrompt, hfUri, contextSize, inf
17
17
  const context = await model.createContext({
18
18
  contextSize,
19
19
  });
20
+ const resolved = resolveChatWrapper(model);
21
+ const chatWrapper = resolved instanceof QwenChatWrapper
22
+ ? new QwenChatWrapper({ thoughts: "discourage" })
23
+ : undefined;
20
24
  const session = new LlamaChatSession({
21
25
  contextSequence: context.getSequence(),
22
26
  systemPrompt,
27
+ chatWrapper,
23
28
  });
24
29
  const abort = new AbortController();
25
30
  const timer = setTimeout(() => abort.abort(), 100_000);
@@ -1 +1 @@
1
- {"version":3,"file":"inference.js","sourceRoot":"","sources":["../../src/llm/inference.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EACL,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,GACd,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,YAAoB,EACpB,UAAkB,EAClB,KAAa,EACb,WAAmB,EACnB,eAAgC,EAChC,OAAgC;IAEhC,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;QACvC,CAAC,CAAC,MAAM,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC;QAC9C,CAAC,CAAC,KAAK,CAAC;IAEV,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACb,sBAAsB,SAAS,2CAA2C,CAC3E,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC;QAClC,SAAS;QACT,SAAS,EAAE,UAAU;KACtB,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC;QACxC,WAAW;KACZ,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC;QACnC,eAAe,EAAE,OAAO,CAAC,WAAW,EAAE;QACtC,YAAY;KACb,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;IACpC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;IAEvD,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE;YAC1C,WAAW,EAAE,eAAe,CAAC,WAAW;YACxC,IAAI,EAAE,eAAe,CAAC,IAAI;YAC1B,IAAI,EAAE,eAAe,CAAC,IAAI;YAC1B,IAAI,EAAE,eAAe,CAAC,IAAI;YAC1B,aAAa,EAAE,eAAe,CAAC,aAAa;YAC5C,oBAAoB,EAAE,IAAI;YAC1B,WAAW,EAAE,OAAO;YACpB,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACxB,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;AACzB,CAAC"}
1
+ {"version":3,"file":"inference.js","sourceRoot":"","sources":["../../src/llm/inference.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EACL,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,YAAoB,EACpB,UAAkB,EAClB,KAAa,EACb,WAAmB,EACnB,eAAgC,EAChC,OAAgC;IAEhC,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;QACvC,CAAC,CAAC,MAAM,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC;QAC9C,CAAC,CAAC,KAAK,CAAC;IAEV,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACb,sBAAsB,SAAS,2CAA2C,CAC3E,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC;QAClC,SAAS;QACT,SAAS,EAAE,UAAU;KACtB,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC;QACxC,WAAW;KACZ,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,WAAW,GAAG,QAAQ,YAAY,eAAe;QACrD,CAAC,CAAC,IAAI,eAAe,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;QACjD,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC;QACnC,eAAe,EAAE,OAAO,CAAC,WAAW,EAAE;QACtC,YAAY;QACZ,WAAW;KACZ,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;IACpC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;IAEvD,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE;YAC1C,WAAW,EAAE,eAAe,CAAC,WAAW;YACxC,IAAI,EAAE,eAAe,CAAC,IAAI;YAC1B,IAAI,EAAE,eAAe,CAAC,IAAI;YAC1B,IAAI,EAAE,eAAe,CAAC,IAAI;YAC1B,aAAa,EAAE,eAAe,CAAC,aAAa;YAC5C,oBAAoB,EAAE,IAAI;YAC1B,WAAW,EAAE,OAAO;YACpB,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACxB,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;AACzB,CAAC"}
@@ -8,12 +8,13 @@ When a user mentions code, files, or technical topics, call the relevant tools.
8
8
  Rules:
9
9
  - Output ONLY a JSON array: [{"name": "tool_name", "arguments": {"param": "value"}}]
10
10
  - Use single keywords for search, not multi-word phrases.
11
- - You may call multiple tools at once.
12
- - Choose the most relevant tools:
11
+ - Call 3-5 tools per request. More context is better. Use different keywords across tools.
12
+ - ALWAYS call file_finder AND at least two of: section_finder, definition_finder, import_tracer, git_history.
13
+ - Use each tool with a DIFFERENT keyword to maximize coverage:
13
14
  - file_finder: discover which files relate to a topic
14
- - section_finder: find specific code lines
15
- - definition_finder: find function, class, type, struct definitions
16
- - import_tracer: find who imports a module
15
+ - section_finder: find specific code lines matching a different keyword
16
+ - definition_finder: find where functions, classes, types are declared
17
+ - import_tracer: find dependency relationships between modules
17
18
  - git_history: find recent commits that changed related code
18
19
  - If the prompt is feedback, observation, or status update (not asking to change code), output exactly: []
19
20
  - Do NOT output anything except the JSON array.`;
@@ -1 +1 @@
1
- {"version":3,"file":"tool-calling.js","sourceRoot":"","sources":["../../../src/llm/prompts/tool-calling.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,sBAAsB,CAAC,QAAmB;IACxD,OAAO;;EAEP,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;;;;;;;;;;;;;;;gDAea,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,MAAM,OAAO,GAAG,MAAM;SACnB,IAAI,EAAE;SACN,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC;SACxC,IAAI,EAAE,CAAC;IAEV,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;QACzC,OAAO,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,iDAAiD;QACjD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC3C,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"tool-calling.js","sourceRoot":"","sources":["../../../src/llm/prompts/tool-calling.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,sBAAsB,CAAC,QAAmB;IACxD,OAAO;;EAEP,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;;;;;;;;;;;;;;;;gDAgBa,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,MAAM,OAAO,GAAG,MAAM;SACnB,IAAI,EAAE;SACN,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC;SACxC,IAAI,EAAE,CAAC;IAEV,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;QACzC,OAAO,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,iDAAiD;QACjD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC3C,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -4,7 +4,7 @@ export declare class HistoryRepo {
4
4
  private db;
5
5
  constructor(db: BetterSQLite3Database);
6
6
  create(entry: Omit<HistoryEntry, "id" | "created_at">): HistoryEntry;
7
- list(directory?: string, limit?: number): HistoryEntry[];
7
+ list(directory?: string, limit?: number, offset?: number): HistoryEntry[];
8
8
  findById(id: number): HistoryEntry | undefined;
9
9
  clear(): void;
10
10
  }
@@ -23,12 +23,13 @@ export class HistoryRepo {
23
23
  .where(eq(history.id, Number(result.lastInsertRowid)))
24
24
  .get();
25
25
  }
26
- list(directory, limit = DEFAULT_HISTORY_LIMIT) {
26
+ list(directory, limit = DEFAULT_HISTORY_LIMIT, offset = 0) {
27
27
  const query = this.db
28
28
  .select()
29
29
  .from(history)
30
30
  .orderBy(desc(history.created_at))
31
- .limit(limit);
31
+ .limit(limit)
32
+ .offset(offset);
32
33
  if (directory) {
33
34
  return query.where(eq(history.directory, directory)).all();
34
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"history-repo.js","sourceRoot":"","sources":["../../src/storage/history-repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,IAAI,EAAO,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,OAAO,WAAW;IACF;IAApB,YAAoB,EAAyB;QAAzB,OAAE,GAAF,EAAE,CAAuB;IAAG,CAAC;IAEjD,MAAM,CAAC,KAA8C;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE;aACnB,MAAM,CAAC,OAAO,CAAC;aACf,MAAM,CAAC;YACN,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,UAAU,EAAE,KAAK,CAAC,UAAU;SAC7B,CAAC;aACD,GAAG,EAAE,CAAC;QAET,OAAO,IAAI,CAAC,EAAE;aACX,MAAM,EAAE;aACR,IAAI,CAAC,OAAO,CAAC;aACb,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;aACrD,GAAG,EAAkB,CAAC;IAC3B,CAAC;IAED,IAAI,CAAC,SAAkB,EAAE,QAAgB,qBAAqB;QAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE;aAClB,MAAM,EAAE;aACR,IAAI,CAAC,OAAO,CAAC;aACb,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;aACjC,KAAK,CAAC,KAAK,CAAC,CAAC;QAEhB,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,EAAoB,CAAC;QAC/E,CAAC;QACD,OAAO,KAAK,CAAC,GAAG,EAAoB,CAAC;IACvC,CAAC;IAED,QAAQ,CAAC,EAAU;QACjB,OAAO,IAAI,CAAC,EAAE;aACX,MAAM,EAAE;aACR,IAAI,CAAC,OAAO,CAAC;aACb,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;aACzB,GAAG,EAA8B,CAAC;IACvC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;IAChC,CAAC;CACF"}
1
+ {"version":3,"file":"history-repo.js","sourceRoot":"","sources":["../../src/storage/history-repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,IAAI,EAAO,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,OAAO,WAAW;IACF;IAApB,YAAoB,EAAyB;QAAzB,OAAE,GAAF,EAAE,CAAuB;IAAG,CAAC;IAEjD,MAAM,CAAC,KAA8C;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE;aACnB,MAAM,CAAC,OAAO,CAAC;aACf,MAAM,CAAC;YACN,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,UAAU,EAAE,KAAK,CAAC,UAAU;SAC7B,CAAC;aACD,GAAG,EAAE,CAAC;QAET,OAAO,IAAI,CAAC,EAAE;aACX,MAAM,EAAE;aACR,IAAI,CAAC,OAAO,CAAC;aACb,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;aACrD,GAAG,EAAkB,CAAC;IAC3B,CAAC;IAED,IAAI,CAAC,SAAkB,EAAE,QAAgB,qBAAqB,EAAE,SAAiB,CAAC;QAChF,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE;aAClB,MAAM,EAAE;aACR,IAAI,CAAC,OAAO,CAAC;aACb,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;aACjC,KAAK,CAAC,KAAK,CAAC;aACZ,MAAM,CAAC,MAAM,CAAC,CAAC;QAElB,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,EAAoB,CAAC;QAC/E,CAAC;QACD,OAAO,KAAK,CAAC,GAAG,EAAoB,CAAC;IACvC,CAAC;IAED,QAAQ,CAAC,EAAU;QACjB,OAAO,IAAI,CAAC,EAAE;aACX,MAAM,EAAE;aACR,IAAI,CAAC,OAAO,CAAC;aACb,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;aACzB,GAAG,EAA8B,CAAC;IACvC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;IAChC,CAAC;CACF"}
@@ -11,6 +11,7 @@ const GIT_TIMEOUT = 5_000;
11
11
  // --exclude-dir: skip dirs that are huge and almost always irrelevant
12
12
  const BASE_GREP_FLAGS = [
13
13
  "-I",
14
+ "-D", "skip",
14
15
  "--exclude-dir", ".git",
15
16
  "--exclude-dir", "node_modules",
16
17
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"search-utils.js","sourceRoot":"","sources":["../../src/tools/search-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search-utils.js","sourceRoot":"","sources":["../../src/tools/search-utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "promptscout",
3
- "version": "1.1.0",
3
+ "version": "1.3.0",
4
4
  "description": "Enrich coding agent prompts with codebase context using a local LLM",
5
5
  "type": "module",
6
6
  "bin": {
@@ -8,7 +8,6 @@
8
8
  },
9
9
  "files": [
10
10
  "dist",
11
- "claude-plugin",
12
11
  "README.md",
13
12
  "LICENSE"
14
13
  ],
@@ -47,6 +46,7 @@
47
46
  "dependencies": {
48
47
  "@inquirer/prompts": "^8.2.0",
49
48
  "better-sqlite3": "^12.6.2",
49
+ "cli-table3": "^0.6.5",
50
50
  "clipboardy": "^5.2.1",
51
51
  "commander": "^14.0.3",
52
52
  "drizzle-orm": "^0.45.1",
@@ -1,5 +0,0 @@
1
- {
2
- "name": "promptscout",
3
- "version": "1.0.0",
4
- "description": "Enriches coding agent prompts with codebase context using a local LLM"
5
- }
@@ -1,16 +0,0 @@
1
- {
2
- "hooks": {
3
- "UserPromptSubmit": [
4
- {
5
- "matcher": "",
6
- "hooks": [
7
- {
8
- "type": "command",
9
- "command": "bash ${CLAUDE_PLUGIN_ROOT}/hooks/scripts/user-prompt-submit.sh",
10
- "timeout": 120
11
- }
12
- ]
13
- }
14
- ]
15
- }
16
- }
@@ -1,47 +0,0 @@
1
- #!/bin/bash
2
- set -euo pipefail
3
-
4
- # Read hook input from stdin
5
- input=$(cat)
6
-
7
- # Extract the user's prompt and project directory
8
- prompt=$(echo "$input" | jq -r '.prompt // empty')
9
- project_dir=$(echo "$input" | jq -r '.cwd // empty')
10
-
11
- if [ -z "$prompt" ]; then
12
- exit 0
13
- fi
14
-
15
- # Check if promptscout CLI is available
16
- if ! command -v promptscout &>/dev/null; then
17
- exit 0
18
- fi
19
-
20
- # Run promptscout with JSON output and no clipboard
21
- # Build CLI arguments
22
- cli_args=(--json-output --no-clipboard)
23
- if [ -n "$project_dir" ]; then
24
- cli_args+=(--project-dir "$project_dir")
25
- fi
26
-
27
- result=$(promptscout "$prompt" "${cli_args[@]}" 2>/dev/null) || {
28
- # Graceful degradation: if CLI fails, let original prompt through
29
- exit 0
30
- }
31
-
32
- # Extract the final improved prompt
33
- improved=$(echo "$result" | jq -r '.final // empty')
34
-
35
- if [ -z "$improved" ]; then
36
- exit 0
37
- fi
38
-
39
- # Inject as additionalContext
40
- cat <<EOF
41
- {
42
- "hookSpecificOutput": {
43
- "hookEventName": "UserPromptSubmit",
44
- "additionalContext": $(echo "$improved" | jq -Rs .)
45
- }
46
- }
47
- EOF