ownkey 1.3.0 → 1.4.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.
Files changed (68) hide show
  1. package/README.md +53 -1
  2. package/dist/ai/anthropic.d.ts +2 -3
  3. package/dist/ai/anthropic.d.ts.map +1 -1
  4. package/dist/ai/anthropic.js +5 -15
  5. package/dist/ai/anthropic.js.map +1 -1
  6. package/dist/ai/gemini.d.ts +3 -3
  7. package/dist/ai/gemini.d.ts.map +1 -1
  8. package/dist/ai/gemini.js +9 -20
  9. package/dist/ai/gemini.js.map +1 -1
  10. package/dist/ai/ollama.d.ts +7 -3
  11. package/dist/ai/ollama.d.ts.map +1 -1
  12. package/dist/ai/ollama.js +27 -17
  13. package/dist/ai/ollama.js.map +1 -1
  14. package/dist/ai/openai.d.ts +2 -3
  15. package/dist/ai/openai.d.ts.map +1 -1
  16. package/dist/ai/openai.js +7 -15
  17. package/dist/ai/openai.js.map +1 -1
  18. package/dist/ai/provider.d.ts +17 -8
  19. package/dist/ai/provider.d.ts.map +1 -1
  20. package/dist/ai/provider.js +16 -0
  21. package/dist/ai/provider.js.map +1 -1
  22. package/dist/bench/cases.d.ts +5 -0
  23. package/dist/bench/cases.d.ts.map +1 -1
  24. package/dist/bench/cases.js +47 -0
  25. package/dist/bench/cases.js.map +1 -1
  26. package/dist/commands/bench.d.ts +2 -1
  27. package/dist/commands/bench.d.ts.map +1 -1
  28. package/dist/commands/bench.js +13 -5
  29. package/dist/commands/bench.js.map +1 -1
  30. package/dist/commands/review.d.ts.map +1 -1
  31. package/dist/commands/review.js +25 -3
  32. package/dist/commands/review.js.map +1 -1
  33. package/dist/core/review/agent.d.ts +58 -0
  34. package/dist/core/review/agent.d.ts.map +1 -0
  35. package/dist/core/review/agent.js +225 -0
  36. package/dist/core/review/agent.js.map +1 -0
  37. package/dist/core/review/report.d.ts +2 -2
  38. package/dist/core/review/report.d.ts.map +1 -1
  39. package/dist/core/review/report.js +4 -2
  40. package/dist/core/review/report.js.map +1 -1
  41. package/dist/core/review/run.d.ts +11 -2
  42. package/dist/core/review/run.d.ts.map +1 -1
  43. package/dist/core/review/run.js +12 -4
  44. package/dist/core/review/run.js.map +1 -1
  45. package/dist/types/index.d.ts +2 -0
  46. package/dist/types/index.d.ts.map +1 -1
  47. package/dist/types/index.js.map +1 -1
  48. package/dist/ui/App.d.ts +11 -3
  49. package/dist/ui/App.d.ts.map +1 -1
  50. package/dist/ui/App.js +20 -6
  51. package/dist/ui/App.js.map +1 -1
  52. package/dist/ui/Keeper.d.ts +18 -0
  53. package/dist/ui/Keeper.d.ts.map +1 -0
  54. package/dist/ui/Keeper.js +45 -0
  55. package/dist/ui/Keeper.js.map +1 -0
  56. package/dist/ui/keeper-term.d.ts +33 -0
  57. package/dist/ui/keeper-term.d.ts.map +1 -0
  58. package/dist/ui/keeper-term.js +104 -0
  59. package/dist/ui/keeper-term.js.map +1 -0
  60. package/dist/ui/keeper.d.ts +60 -0
  61. package/dist/ui/keeper.d.ts.map +1 -0
  62. package/dist/ui/keeper.js +167 -0
  63. package/dist/ui/keeper.js.map +1 -0
  64. package/dist/ui/session.d.ts +3 -0
  65. package/dist/ui/session.d.ts.map +1 -1
  66. package/dist/ui/session.js +32 -7
  67. package/dist/ui/session.js.map +1 -1
  68. package/package.json +1 -1
@@ -0,0 +1,225 @@
1
+ import { existsSync, readFileSync, statSync } from 'fs';
2
+ import { join, normalize } from 'path';
3
+ import { AIProvider } from '../../ai/provider.js';
4
+ import { readForReview } from './git.js';
5
+ const READ_MAX_LINES = 300;
6
+ const SEARCH_MAX_MATCHES = 40;
7
+ const SEARCH_MAX_FILE_BYTES = 512 * 1024;
8
+ const LIST_MAX = 200;
9
+ const ROUND_MAX_CHARS = 24_000;
10
+ export function agentSystemPrompt(base) {
11
+ return `${base}
12
+
13
+ ## Working as an agent
14
+
15
+ Before you report anything, investigate. You can call read-only tools on the repository to confirm a suspected
16
+ problem: open the definition of a function the change calls, find its other callers, check how a value is
17
+ validated elsewhere, look at tests. Only report issues you have confirmed or that are certain from the code shown.
18
+ Do not report a bug that the surrounding code already handles.
19
+
20
+ Every reply must be exactly one JSON object and nothing else. Either call tools:
21
+
22
+ {"calls": [
23
+ {"tool": "read_file", "path": "src/db.ts", "start": 1, "end": 120},
24
+ {"tool": "search", "pattern": "getUser\\\\(", "path": "src"},
25
+ {"tool": "list_files", "path": "src/routes"}
26
+ ]}
27
+
28
+ or finish with your findings (an empty list is a valid answer):
29
+
30
+ {"findings": [ ...suggestions in the output format above... ]}
31
+
32
+ Tools:
33
+ - read_file: lines of a file with line numbers (at most ${READ_MAX_LINES} lines per call). "start" and "end" are optional.
34
+ - search: regular expression search across the repository, returns "path:line: text" (at most ${SEARCH_MAX_MATCHES} matches). "path" optionally limits it to a folder or file.
35
+ - list_files: files under a folder ("path" optional).
36
+
37
+ Use at most a few calls per reply and only the ones you need. Paths are relative to the repository root.
38
+ Files ignored by .gitignore or .ownkeyignore are not available.`;
39
+ }
40
+ /** Pull the tool calls out of a parsed reply, in any of the shapes models tend to use. */
41
+ export function readCalls(parsed) {
42
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))
43
+ return null;
44
+ const list = parsed.calls ?? parsed.tools ?? parsed.tool_calls;
45
+ if (Array.isArray(list))
46
+ return list.filter((c) => c && typeof c === 'object');
47
+ if (typeof parsed.tool === 'string' || typeof parsed.name === 'string')
48
+ return [parsed];
49
+ return null;
50
+ }
51
+ /** Findings from a parsed reply, or null when the reply is not a final answer. */
52
+ export function readFindings(parsed) {
53
+ if (Array.isArray(parsed))
54
+ return parsed;
55
+ if (parsed && typeof parsed === 'object') {
56
+ if (Array.isArray(parsed.findings))
57
+ return parsed.findings;
58
+ if (Array.isArray(parsed.suggestions))
59
+ return parsed.suggestions;
60
+ }
61
+ return null;
62
+ }
63
+ /** Read-only view of the repository the agent may look at: only files the scanner allows. */
64
+ export class RepoTools {
65
+ root;
66
+ scope;
67
+ changed;
68
+ allowed;
69
+ constructor(root, scope, allowedFiles, changed) {
70
+ this.root = root;
71
+ this.scope = scope;
72
+ this.changed = changed;
73
+ this.allowed = [...allowedFiles].map((f) => f.replace(/\\/g, '/')).sort();
74
+ }
75
+ clean(path) {
76
+ const p = normalize(String(path ?? '').trim())
77
+ .replace(/\\/g, '/')
78
+ .replace(/^\.\//, '')
79
+ .replace(/\/+$/, '');
80
+ return p === '.' ? '' : p;
81
+ }
82
+ content(file) {
83
+ // Changed files are read as the version under review (e.g. the staged copy)
84
+ if (this.changed.has(file))
85
+ return readForReview(this.root, this.scope, file);
86
+ return readFileSync(join(this.root, file), 'utf-8');
87
+ }
88
+ readFile(path, start, end) {
89
+ const file = this.clean(path);
90
+ if (!this.allowed.includes(file)) {
91
+ const near = this.allowed.filter((f) => f.endsWith('/' + file.split('/').pop())).slice(0, 3);
92
+ return `Error: ${file || '(no path)'} is not an available file.` + (near.length ? ` Did you mean: ${near.join(', ')}?` : '');
93
+ }
94
+ const lines = this.content(file).split('\n');
95
+ if (lines.length > 1 && lines[lines.length - 1] === '')
96
+ lines.pop();
97
+ const from = Math.max(1, Number(start) || 1);
98
+ const to = Math.min(lines.length, Number(end) || from + READ_MAX_LINES - 1, from + READ_MAX_LINES - 1);
99
+ const body = lines
100
+ .slice(from - 1, to)
101
+ .map((l, i) => `${String(from + i).padStart(5)} ${l}`)
102
+ .join('\n');
103
+ const more = to < lines.length ? `\n... (${lines.length} lines total; ask for start=${to + 1} to read more)` : '';
104
+ return `${file} lines ${from}-${to}:\n${body}${more}`;
105
+ }
106
+ search(pattern, path) {
107
+ const raw = String(pattern ?? '');
108
+ if (!raw)
109
+ return 'Error: search needs a "pattern".';
110
+ let re;
111
+ try {
112
+ re = new RegExp(raw);
113
+ }
114
+ catch {
115
+ re = new RegExp(raw.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'));
116
+ }
117
+ const prefix = this.clean(path);
118
+ const out = [];
119
+ for (const file of this.allowed) {
120
+ if (prefix && file !== prefix && !file.startsWith(prefix + '/'))
121
+ continue;
122
+ const abs = join(this.root, file);
123
+ if (!this.changed.has(file) && (!existsSync(abs) || statSync(abs).size > SEARCH_MAX_FILE_BYTES))
124
+ continue;
125
+ const lines = this.content(file).split('\n');
126
+ for (let i = 0; i < lines.length; i++) {
127
+ if (re.test(lines[i])) {
128
+ out.push(`${file}:${i + 1}: ${lines[i].trim().slice(0, 200)}`);
129
+ if (out.length >= SEARCH_MAX_MATCHES)
130
+ return out.join('\n') + `\n... (stopped at ${SEARCH_MAX_MATCHES} matches; narrow the pattern or path)`;
131
+ }
132
+ }
133
+ }
134
+ return out.length ? out.join('\n') : `No matches for /${raw}/${prefix ? ` in ${prefix}` : ''}.`;
135
+ }
136
+ listFiles(path) {
137
+ const prefix = this.clean(path);
138
+ const files = this.allowed.filter((f) => !prefix || f.startsWith(prefix + '/'));
139
+ if (!files.length)
140
+ return `No files under ${prefix || 'the repository root'}.`;
141
+ const shown = files.slice(0, LIST_MAX).join('\n');
142
+ return files.length > LIST_MAX ? `${shown}\n... (${files.length} files; list a subfolder)` : shown;
143
+ }
144
+ run(call) {
145
+ const tool = String(call.tool ?? call.name ?? '');
146
+ const args = (call.args && typeof call.args === 'object' ? call.args : call);
147
+ switch (tool) {
148
+ case 'read_file': {
149
+ const label = `read ${this.clean(args.path)}${args.start || args.end ? `:${args.start ?? 1}-${args.end ?? ''}` : ''}`;
150
+ return { step: { tool, label }, output: this.readFile(args.path, args.start, args.end) };
151
+ }
152
+ case 'search': {
153
+ const where = this.clean(args.path);
154
+ return { step: { tool, label: `search /${String(args.pattern ?? '')}/${where ? ` in ${where}` : ''}` }, output: this.search(args.pattern, args.path) };
155
+ }
156
+ case 'list_files':
157
+ return { step: { tool, label: `list ${this.clean(args.path) || '.'}` }, output: this.listFiles(args.path) };
158
+ default:
159
+ return { step: { tool: 'list_files', label: `unknown tool ${tool}` }, output: `Error: unknown tool "${tool}". Use read_file, search or list_files.` };
160
+ }
161
+ }
162
+ }
163
+ /**
164
+ * Agentic review: the model sees the changed files and the patch, then investigates the repository with
165
+ * read-only tools before it answers. Works with every provider through plain JSON turns, no native tool API.
166
+ */
167
+ export async function runAgentReview(provider, context, tools, options = {}) {
168
+ const maxSteps = options.maxSteps ?? 6;
169
+ const maxCalls = options.maxCallsPerStep ?? 4;
170
+ const system = agentSystemPrompt(provider.getSystemPrompt());
171
+ const messages = [
172
+ {
173
+ role: 'user',
174
+ content: provider.buildUserPrompt(context) +
175
+ '\n\nInvestigate with tools if anything needs confirming, then reply with {"findings": [...]}. Reply with one JSON object only.',
176
+ },
177
+ ];
178
+ const steps = [];
179
+ let nudged = false;
180
+ for (let round = 0;; round++) {
181
+ const reply = await provider.chat(system, messages);
182
+ const parsed = AIProvider.extractJson(reply);
183
+ const findings = readFindings(parsed);
184
+ if (findings)
185
+ return { suggestions: provider.parseSuggestions(JSON.stringify(findings)), steps };
186
+ const calls = readCalls(parsed);
187
+ if (!calls || calls.length === 0) {
188
+ if (nudged)
189
+ return { suggestions: provider.parseSuggestions(reply), steps };
190
+ nudged = true;
191
+ messages.push({ role: 'assistant', content: reply });
192
+ messages.push({ role: 'user', content: 'That was not a valid reply. Reply with exactly one JSON object: {"calls": [...]} or {"findings": [...]}.' });
193
+ continue;
194
+ }
195
+ if (round > maxSteps) {
196
+ throw new Error('The model kept calling tools instead of answering. Try a larger model, or run with --quick for a single-pass review.');
197
+ }
198
+ messages.push({ role: 'assistant', content: reply });
199
+ if (round >= maxSteps) {
200
+ messages.push({ role: 'user', content: 'No more tool calls are available. Reply now with {"findings": [...]} based on what you have seen.' });
201
+ continue;
202
+ }
203
+ const results = [];
204
+ let used = 0;
205
+ for (const call of calls.slice(0, maxCalls)) {
206
+ const { step, output } = tools.run(call);
207
+ steps.push(step);
208
+ options.onStep?.(step);
209
+ const room = ROUND_MAX_CHARS - used;
210
+ if (room <= 200) {
211
+ results.push(`[${step.label}] skipped: output budget for this reply is used up.`);
212
+ continue;
213
+ }
214
+ const clipped = output.length > room ? output.slice(0, room) + '\n... (truncated)' : output;
215
+ used += clipped.length;
216
+ results.push(`[${step.label}]\n${clipped}`);
217
+ }
218
+ if (calls.length > maxCalls)
219
+ results.push(`Only the first ${maxCalls} calls were run.`);
220
+ const left = maxSteps - round - 1;
221
+ results.push(left > 0 ? `${left} tool round(s) left.` : 'That was the last tool round. Reply next with {"findings": [...]}.');
222
+ messages.push({ role: 'user', content: results.join('\n\n') });
223
+ }
224
+ }
225
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../src/core/review/agent.ts"],"names":[],"mappings":"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"}
@@ -4,8 +4,8 @@ export interface Finding extends Suggestion {
4
4
  line: number;
5
5
  }
6
6
  /**
7
- * Best line to anchor a finding on: the first added line of its diff, else the first
8
- * changed line of its file in the review, else line 1.
7
+ * Best line to anchor a finding on: the line the model named, else the first added line
8
+ * of its diff, else the first changed line of its file in the review, else line 1.
9
9
  */
10
10
  export declare function anchorLine(s: Suggestion, changed?: Array<[number, number]>): number;
11
11
  export declare function sortFindings(findings: Finding[]): Finding[];
@@ -1 +1 @@
1
- {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/core/review/report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEjE,MAAM,WAAW,OAAQ,SAAQ,UAAU;IACvC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CAChB;AAID;;;GAGG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAgBnF;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAO3D;AAQD,yFAAyF;AACzF,wBAAgB,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAoCpE;AAED,iEAAiE;AACjE,wBAAgB,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CA0BzF"}
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/core/review/report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEjE,MAAM,WAAW,OAAQ,SAAQ,UAAU;IACvC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CAChB;AAID;;;GAGG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAiBnF;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAO3D;AAQD,yFAAyF;AACzF,wBAAgB,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAoCpE;AAED,iEAAiE;AACjE,wBAAgB,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CA0BzF"}
@@ -1,9 +1,11 @@
1
1
  const SEVERITY_ORDER = ['critical', 'high', 'medium', 'low', 'info'];
2
2
  /**
3
- * Best line to anchor a finding on: the first added line of its diff, else the first
4
- * changed line of its file in the review, else line 1.
3
+ * Best line to anchor a finding on: the line the model named, else the first added line
4
+ * of its diff, else the first changed line of its file in the review, else line 1.
5
5
  */
6
6
  export function anchorLine(s, changed) {
7
+ if (s.line && s.line > 0)
8
+ return s.line;
7
9
  if (s.diff) {
8
10
  let newLine = 0;
9
11
  for (const raw of s.diff.split('\n')) {
@@ -1 +1 @@
1
- {"version":3,"file":"report.js","sourceRoot":"","sources":["../../../src/core/review/report.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../../src/core/review/report.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { type ChangeSet, type ReviewScope } from './git.js';
2
2
  import type { AIProvider } from '../../ai/provider.js';
3
+ import { type AgentStep } from './agent.js';
3
4
  import type { FileMetadata, Suggestion } from '../../types/index.js';
4
5
  export interface ReviewTarget {
5
6
  changes: ChangeSet;
@@ -12,9 +13,17 @@ export interface ReviewTarget {
12
13
  }
13
14
  /** Work out which changed files to review, honouring .gitignore/.ownkeyignore, size and binary rules. */
14
15
  export declare function prepareReview(root: string, scope: ReviewScope, maxFiles?: number): Promise<ReviewTarget>;
16
+ export interface AnalyzeOptions {
17
+ /** Single request with no tools, as in 1.3 and earlier (default false: agentic review) */
18
+ quick?: boolean;
19
+ /** Tool rounds the agent may use (default 6) */
20
+ maxSteps?: number;
21
+ onStep?: (step: AgentStep) => void;
22
+ }
15
23
  /**
16
- * Send the selected files (in full, for context) and the patch (as focus) to the model.
24
+ * Send the selected files (in full, for context) and the patch (as focus) to the model. By default the model
25
+ * then investigates the rest of the repository with read-only tools before answering.
17
26
  * Returns suggestions on the selected files only, with normalized paths.
18
27
  */
19
- export declare function analyzeChanges(root: string, scope: ReviewScope, target: ReviewTarget, provider: AIProvider): Promise<Suggestion[]>;
28
+ export declare function analyzeChanges(root: string, scope: ReviewScope, target: ReviewTarget, provider: AIProvider, options?: AnalyzeOptions): Promise<Suggestion[]>;
20
29
  //# sourceMappingURL=run.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/core/review/run.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiC,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAC3F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAA4B,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE/F,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,SAAS,CAAC;IACnB,uDAAuD;IACvD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,wEAAwE;IACxE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,6CAA6C;IAC7C,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACvC;AAED,yGAAyG;AACzG,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,SAAK,GAAG,OAAO,CAAC,YAAY,CAAC,CAO1G;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAgBxI"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/core/review/run.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiC,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAC3F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,KAAK,EAA4B,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE/F,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,SAAS,CAAC;IACnB,uDAAuD;IACvD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,wEAAwE;IACxE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,6CAA6C;IAC7C,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACvC;AAED,yGAAyG;AACzG,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,SAAK,GAAG,OAAO,CAAC,YAAY,CAAC,CAO1G;AAED,MAAM,WAAW,cAAc;IAC3B,0FAA0F;IAC1F,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;CACtC;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAqBtK"}
@@ -1,6 +1,7 @@
1
1
  import { basename } from 'path';
2
2
  import { FileScanner } from '../scanner.js';
3
3
  import { collectChanges, readForReview } from './git.js';
4
+ import { RepoTools, runAgentReview } from './agent.js';
4
5
  /** Work out which changed files to review, honouring .gitignore/.ownkeyignore, size and binary rules. */
5
6
  export async function prepareReview(root, scope, maxFiles = 25) {
6
7
  const changes = collectChanges(root, scope);
@@ -11,10 +12,11 @@ export async function prepareReview(root, scope, maxFiles = 25) {
11
12
  return { changes, reviewable, selected: reviewable.slice(0, maxFiles), metadata };
12
13
  }
13
14
  /**
14
- * Send the selected files (in full, for context) and the patch (as focus) to the model.
15
+ * Send the selected files (in full, for context) and the patch (as focus) to the model. By default the model
16
+ * then investigates the rest of the repository with read-only tools before answering.
15
17
  * Returns suggestions on the selected files only, with normalized paths.
16
18
  */
17
- export async function analyzeChanges(root, scope, target, provider) {
19
+ export async function analyzeChanges(root, scope, target, provider, options = {}) {
18
20
  const contents = target.selected.map((f) => ({ ...target.metadata.get(f), content: readForReview(root, scope, f) }));
19
21
  const context = {
20
22
  files: contents,
@@ -22,8 +24,14 @@ export async function analyzeChanges(root, scope, target, provider) {
22
24
  reviewPatch: target.changes.patch,
23
25
  };
24
26
  const raw = [];
25
- for await (const s of provider.analyze(context))
26
- raw.push(s);
27
+ if (options.quick) {
28
+ for await (const s of provider.analyze(context))
29
+ raw.push(s);
30
+ }
31
+ else {
32
+ const tools = new RepoTools(root, scope, target.metadata.keys(), new Set(target.changes.files));
33
+ raw.push(...(await runAgentReview(provider, context, tools, { maxSteps: options.maxSteps, onStep: options.onStep })).suggestions);
34
+ }
27
35
  const inScope = new Set(target.selected);
28
36
  return raw
29
37
  .map((s) => ({ ...s, filePath: s.filePath.replace(/\\/g, '/').replace(/^\.\//, '') }))
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/core/review/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,aAAa,EAAoC,MAAM,UAAU,CAAC;AAc3F,yGAAyG;AACzG,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAY,EAAE,KAAkB,EAAE,QAAQ,GAAG,EAAE;IAC/E,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAU,CAAC,CAAC,CAAC;IACrG,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;AACtF,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY,EAAE,KAAkB,EAAE,MAAoB,EAAE,QAAoB;IAC7G,MAAM,QAAQ,GAAkB,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAE,EAAE,OAAO,EAAE,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAErI,MAAM,OAAO,GAAgB;QACzB,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,EAAE;QACjF,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK;KACpC,CAAC;IAEF,MAAM,GAAG,GAAiB,EAAE,CAAC;IAC7B,IAAI,KAAK,EAAE,MAAM,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE7D,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACzC,OAAO,GAAG;SACL,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;SACrF,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/core/review/run.ts"],"names":[],"mappings":"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"}
@@ -72,6 +72,8 @@ export interface Suggestion {
72
72
  diff: string;
73
73
  filePath: string;
74
74
  rationale: string;
75
+ /** 1-based line in the file the finding is about, when the model gives one */
76
+ line?: number;
75
77
  tags?: Record<string, any>;
76
78
  }
77
79
  export interface AnalyzeOptions {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;AAEhE,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEtE,eAAO,MAAM,YAAY,EAAE,UAAU,EAAgD,CAAC;AAEtF,MAAM,MAAM,cAAc,GACpB,KAAK,GACL,UAAU,GACV,aAAa,GACb,UAAU,GACV,OAAO,GACP,cAAc,GACd,MAAM,GACN,eAAe,CAAC;AAEtB,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;AAEvE,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE3D,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;AAGjE,MAAM,WAAW,MAAM;IACnB,qFAAqF;IACrF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oFAAoF;IACpF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2DAA2D;IAC3D,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,SAAS,EAAE;QACP,MAAM,CAAC,EAAE;YACL,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,qEAAqE;YACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;SACrB,CAAC;QACF,SAAS,CAAC,EAAE;YACR,KAAK,CAAC,EAAE,MAAM,CAAC;SAClB,CAAC;QACF,MAAM,CAAC,EAAE;YACL,KAAK,CAAC,EAAE,MAAM,CAAC;SAClB,CAAC;QACF,MAAM,CAAC,EAAE;YACL,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,KAAK,CAAC,EAAE,MAAM,CAAC;SAClB,CAAC;KACL,CAAC;IACF,cAAc,CAAC,EAAE,UAAU,CAAC;IAC5B,QAAQ,EAAE;QACN,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,QAAQ,CAAC;KACtB,CAAC;CACL;AAGD,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,IAAI,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAY,SAAQ,YAAY;IAC7C,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACvB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACtB;AAGD,MAAM,WAAW,WAAW;IACxB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,WAAW,EAAE,eAAe,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+FAA+F;IAC/F,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAGD,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAChC,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IACpF,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CACtC;AAGD,MAAM,WAAW,OAAO;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,GAAG;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,IAAI,CAAC;IAChB,UAAU,CAAC,EAAE,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,gBAAiB,SAAQ,UAAU;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,IAAI,CAAC;CACjB;AAGD,MAAM,WAAW,UAAU;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;CACnB;AAGD,MAAM,WAAW,UAAU;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CAChB;AAGD,qBAAa,WAAY,SAAQ,KAAK;IAGvB,IAAI,EAAE,MAAM;IACZ,OAAO,CAAC,EAAE,GAAG;gBAFpB,OAAO,EAAE,MAAM,EACR,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,GAAG,YAAA;CAK3B;AAED,qBAAa,WAAY,SAAQ,WAAW;gBAC5B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG;CAI7C;AAED,qBAAa,aAAc,SAAQ,WAAW;gBAC9B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG;CAI7C;AAED,qBAAa,eAAgB,SAAQ,WAAW;gBAChC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG;CAI7C;AAED,qBAAa,SAAU,SAAQ,WAAW;gBAC1B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG;CAI7C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AAMvC,MAAM,CAAC,MAAM,YAAY,GAAiB,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAsKtF,cAAc;AACd,MAAM,OAAO,WAAY,SAAQ,KAAK;IAGvB;IACA;IAHX,YACI,OAAe,EACR,IAAY,EACZ,OAAa;QAEpB,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,SAAI,GAAJ,IAAI,CAAQ;QACZ,YAAO,GAAP,OAAO,CAAM;QAGpB,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC9B,CAAC;CACJ;AAED,MAAM,OAAO,WAAY,SAAQ,WAAW;IACxC,YAAY,OAAe,EAAE,OAAa;QACtC,KAAK,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC9B,CAAC;CACJ;AAED,MAAM,OAAO,aAAc,SAAQ,WAAW;IAC1C,YAAY,OAAe,EAAE,OAAa;QACtC,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAChC,CAAC;CACJ;AAED,MAAM,OAAO,eAAgB,SAAQ,WAAW;IAC5C,YAAY,OAAe,EAAE,OAAa;QACtC,KAAK,CAAC,OAAO,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAClC,CAAC;CACJ;AAED,MAAM,OAAO,SAAU,SAAQ,WAAW;IACtC,YAAY,OAAe,EAAE,OAAa;QACtC,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC5B,CAAC;CACJ"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AAMvC,MAAM,CAAC,MAAM,YAAY,GAAiB,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAwKtF,cAAc;AACd,MAAM,OAAO,WAAY,SAAQ,KAAK;IAGvB;IACA;IAHX,YACI,OAAe,EACR,IAAY,EACZ,OAAa;QAEpB,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,SAAI,GAAJ,IAAI,CAAQ;QACZ,YAAO,GAAP,OAAO,CAAM;QAGpB,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC9B,CAAC;CACJ;AAED,MAAM,OAAO,WAAY,SAAQ,WAAW;IACxC,YAAY,OAAe,EAAE,OAAa;QACtC,KAAK,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC9B,CAAC;CACJ;AAED,MAAM,OAAO,aAAc,SAAQ,WAAW;IAC1C,YAAY,OAAe,EAAE,OAAa;QACtC,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAChC,CAAC;CACJ;AAED,MAAM,OAAO,eAAgB,SAAQ,WAAW;IAC5C,YAAY,OAAe,EAAE,OAAa;QACtC,KAAK,CAAC,OAAO,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAClC,CAAC;CACJ;AAED,MAAM,OAAO,SAAU,SAAQ,WAAW;IACtC,YAAY,OAAe,EAAE,OAAa;QACtC,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC5B,CAAC;CACJ"}
package/dist/ui/App.d.ts CHANGED
@@ -1,17 +1,25 @@
1
1
  import { type CommandInfo } from './complete.js';
2
2
  import type { SessionInfo } from './context.js';
3
+ import { type KeeperMood } from './keeper.js';
3
4
  export interface PromptProps {
4
5
  info: SessionInfo;
5
6
  commands: CommandInfo[];
6
7
  history: string[];
7
8
  /** Called once with the submitted line, or null when the user leaves */
8
9
  onDone: (line: string | null) => void;
10
+ /** Show the welcome banner above this prompt (the first one in a session) */
11
+ banner?: string;
12
+ /** How the last command went, which Keeper wears at this prompt */
13
+ mood?: KeeperMood;
9
14
  }
10
- export declare function Banner({ version }: {
15
+ export declare function Banner({ version, still }: {
11
16
  version: string;
17
+ still?: boolean;
12
18
  }): import("react").JSX.Element;
13
- export declare function Header({ info }: {
19
+ export declare function Header({ info, mood, keeper }: {
14
20
  info: SessionInfo;
21
+ mood?: KeeperMood;
22
+ keeper?: boolean;
15
23
  }): import("react").JSX.Element;
16
- export declare function Prompt({ info, commands, history, onDone }: PromptProps): import("react").JSX.Element;
24
+ export declare function Prompt({ info, commands, history, onDone, banner, mood }: PromptProps): import("react").JSX.Element;
17
25
  //# sourceMappingURL=App.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/ui/App.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA4B,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,wEAAwE;IACxE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CACzC;AAID,wBAAgB,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,+BAatD;AAED,wBAAgB,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,+BAmBrD;AAED,wBAAgB,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,WAAW,+BA+GtE"}
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/ui/App.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA4B,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,EAA+C,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAE3F,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,wEAAwE;IACxE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACtC,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,IAAI,CAAC,EAAE,UAAU,CAAC;CACrB;AAID,wBAAgB,MAAM,CAAC,EAAE,OAAO,EAAE,KAAa,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,+BAyCtF;AAED,wBAAgB,MAAM,CAAC,EAAE,IAAI,EAAE,IAAa,EAAE,MAAa,EAAE,EAAE;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,CAAC,EAAE,UAAU,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,+BAyBxH;AAED,wBAAgB,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,WAAW,+BAuHpF"}
package/dist/ui/App.js CHANGED
@@ -2,18 +2,30 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEffect, useState } from 'react';
3
3
  import { Box, Text, useApp, useInput } from 'ink';
4
4
  import { applySuggestion, suggest } from './complete.js';
5
+ import { Keeper, useTerminalSize } from './Keeper.js';
6
+ import { KEEPER_BREAKPOINTS, keeperShown, keeperSize } from './keeper.js';
5
7
  const ORANGE = '#ff5a1f';
6
- export function Banner({ version }) {
7
- return (_jsxs(Box, { borderStyle: "round", borderColor: ORANGE, paddingX: 1, flexDirection: "column", marginBottom: 1, children: [_jsxs(Text, { children: [_jsx(Text, { color: ORANGE, bold: true, children: "\u25C6 OwnKey" }), _jsxs(Text, { dimColor: true, children: [" ", version] }), _jsx(Text, { children: " local-first AI code review on your own keys" })] }), _jsx(Text, { dimColor: true, children: "Type any command without the ownkey prefix. Tab completes, \u2191\u2193 history, help lists everything." })] }));
8
+ export function Banner({ version, still = false }) {
9
+ const { columns, rows } = useTerminalSize();
10
+ const size = keeperShown() ? keeperSize(columns, rows) : 'none';
11
+ const title = (_jsxs(Text, { children: [_jsx(Text, { color: ORANGE, bold: true, children: "OwnKey" }), _jsxs(Text, { dimColor: true, children: [" ", version] })] }));
12
+ const tagline = _jsx(Text, { children: "Local-first AI code review on your own keys." });
13
+ const hint = _jsx(Text, { dimColor: true, children: "Type any command without the ownkey prefix. Tab completes, \u2191\u2193 history, help lists everything." });
14
+ if (size === 'full' || size === 'compact') {
15
+ return (_jsxs(Box, { flexDirection: "row", marginBottom: 1, children: [_jsx(Keeper, { size: size, still: still }), _jsxs(Box, { flexDirection: "column", marginLeft: 2, justifyContent: "center", flexShrink: 1, children: [title, tagline, _jsx(Text, { children: " " }), hint] })] }));
16
+ }
17
+ return (_jsxs(Box, { borderStyle: "round", borderColor: ORANGE, paddingX: 1, flexDirection: "column", marginBottom: 1, children: [_jsxs(Box, { children: [size === 'inline' ? (_jsx(Box, { marginRight: 1, children: _jsx(Keeper, { size: "inline", still: still }) })) : null, title] }), tagline, hint] }));
8
18
  }
9
- export function Header({ info }) {
19
+ export function Header({ info, mood = 'idle', keeper = true }) {
20
+ const { columns } = useTerminalSize();
10
21
  const where = [info.folder, info.branch, info.changed === undefined ? undefined : info.changed === 0 ? 'clean' : `${info.changed} changed`]
11
22
  .filter(Boolean)
12
23
  .join(' · ');
13
- return (_jsx(Box, { flexDirection: "column", children: _jsxs(Text, { children: [_jsx(Text, { bold: true, children: where }), _jsx(Text, { dimColor: true, children: " \u00B7 " }), info.provider ? (_jsxs(Text, { color: "cyan", children: [info.provider, " / ", info.model] })) : (_jsx(Text, { color: "yellow", children: "No model yet. Type config to set one up." }))] }) }));
24
+ return (_jsxs(Box, { flexDirection: "row", children: [keeper && keeperShown() && columns >= KEEPER_BREAKPOINTS.compact ? (_jsx(Box, { marginRight: 1, children: _jsx(Keeper, { size: "inline", mood: mood }) })) : null, _jsxs(Text, { children: [_jsx(Text, { bold: true, children: where }), _jsx(Text, { dimColor: true, children: " \u00B7 " }), info.provider ? (_jsxs(Text, { color: "cyan", children: [info.provider, " / ", info.model] })) : (_jsx(Text, { color: "yellow", children: "No model yet. Type config to set one up." }))] })] }));
14
25
  }
15
- export function Prompt({ info, commands, history, onDone }) {
26
+ export function Prompt({ info, commands, history, onDone, banner, mood }) {
16
27
  const { exit } = useApp();
28
+ const { columns } = useTerminalSize();
17
29
  const [value, setValue] = useState('');
18
30
  const [cursor, setCursor] = useState(0);
19
31
  const [histIndex, setHistIndex] = useState(history.length);
@@ -101,9 +113,11 @@ export function Prompt({ info, commands, history, onDone }) {
101
113
  finish(next);
102
114
  }
103
115
  });
116
+ // Narrow terminals get a tighter label column; descriptions truncate rather than wrap
117
+ const labelWidth = columns < 60 ? Math.min(14, Math.max(...suggestions.map((x) => x.label.length), 4) + 2) : 22;
104
118
  const before = value.slice(0, cursor);
105
119
  const at = value[cursor] ?? ' ';
106
120
  const after = value.slice(cursor + 1);
107
- return (_jsxs(Box, { flexDirection: "column", children: [!finished ? _jsx(Header, { info: info }) : null, _jsxs(Text, { children: [_jsxs(Text, { color: ORANGE, bold: true, children: ["\u203A", ' '] }), _jsx(Text, { children: before }), finished ? _jsx(Text, { children: at === ' ' ? '' : at }) : _jsx(Text, { inverse: true, children: at }), _jsx(Text, { children: after })] }), !finished && suggestions.length > 0 ? (_jsx(Box, { flexDirection: "column", marginLeft: 2, children: suggestions.map((s, i) => (_jsxs(Text, { children: [_jsx(Text, { color: i === sel ? ORANGE : undefined, bold: i === sel, children: s.label.padEnd(22) }), _jsx(Text, { dimColor: true, children: s.description })] }, s.label))) })) : null, !finished ? _jsx(Text, { dimColor: true, children: " Tab complete \u00B7 \u2191\u2193 history \u00B7 help \u00B7 Ctrl+D exit" }) : null] }));
121
+ return (_jsxs(Box, { flexDirection: "column", children: [banner ? _jsx(Banner, { version: banner, still: finished }) : null, !finished ? _jsx(Header, { info: info, mood: mood, keeper: !banner }) : null, _jsxs(Text, { children: [_jsxs(Text, { color: ORANGE, bold: true, children: ["\u203A", ' '] }), _jsx(Text, { children: before }), finished ? _jsx(Text, { children: at === ' ' ? '' : at }) : _jsx(Text, { inverse: true, children: at }), _jsx(Text, { children: after })] }), !finished && suggestions.length > 0 ? (_jsx(Box, { flexDirection: "column", marginLeft: 2, children: suggestions.map((s, i) => (_jsxs(Text, { wrap: "truncate-end", children: [_jsx(Text, { color: i === sel ? ORANGE : undefined, bold: i === sel, children: s.label.padEnd(labelWidth) }), _jsx(Text, { dimColor: true, children: s.description })] }, s.label))) })) : null, !finished ? (_jsx(Text, { dimColor: true, wrap: "truncate-end", children: ' Tab complete · ↑↓ history · help · Ctrl+D exit' })) : null] }));
108
122
  }
109
123
  //# sourceMappingURL=App.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/ui/App.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/ui/App.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { type KeeperMood, type KeeperSize } from './keeper.js';
2
+ /** Terminal width and height, kept current as the window is resized. */
3
+ export declare function useTerminalSize(): {
4
+ columns: number;
5
+ rows: number;
6
+ };
7
+ /** A tick counter at Keeper's frame rate, or a still 0 where motion is off. */
8
+ export declare function useKeeperTick(active?: boolean): number;
9
+ export interface KeeperProps {
10
+ mood?: KeeperMood;
11
+ /** Force a size; by default it follows the terminal width */
12
+ size?: KeeperSize;
13
+ /** Stop animating (for example once a prompt is submitted), keeping the last frame */
14
+ still?: boolean;
15
+ }
16
+ /** Keeper as an Ink element: moves with its mood, resizes with the terminal. */
17
+ export declare function Keeper({ mood, size, still }: KeeperProps): import("react").JSX.Element | null;
18
+ //# sourceMappingURL=Keeper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Keeper.d.ts","sourceRoot":"","sources":["../../src/ui/Keeper.tsx"],"names":[],"mappings":"AAEA,OAAO,EAQH,KAAK,UAAU,EACf,KAAK,UAAU,EAClB,MAAM,aAAa,CAAC;AAErB,wEAAwE;AACxE,wBAAgB,eAAe,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAanE;AAED,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,MAAM,UAAO,GAAG,MAAM,CAUnD;AAED,MAAM,WAAW,WAAW;IACxB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,6DAA6D;IAC7D,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,sFAAsF;IACtF,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,gFAAgF;AAChF,wBAAgB,MAAM,CAAC,EAAE,IAAa,EAAE,IAAI,EAAE,KAAa,EAAE,EAAE,WAAW,sCA+BzE"}