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.
- package/README.md +53 -1
- package/dist/ai/anthropic.d.ts +2 -3
- package/dist/ai/anthropic.d.ts.map +1 -1
- package/dist/ai/anthropic.js +5 -15
- package/dist/ai/anthropic.js.map +1 -1
- package/dist/ai/gemini.d.ts +3 -3
- package/dist/ai/gemini.d.ts.map +1 -1
- package/dist/ai/gemini.js +9 -20
- package/dist/ai/gemini.js.map +1 -1
- package/dist/ai/ollama.d.ts +7 -3
- package/dist/ai/ollama.d.ts.map +1 -1
- package/dist/ai/ollama.js +27 -17
- package/dist/ai/ollama.js.map +1 -1
- package/dist/ai/openai.d.ts +2 -3
- package/dist/ai/openai.d.ts.map +1 -1
- package/dist/ai/openai.js +7 -15
- package/dist/ai/openai.js.map +1 -1
- package/dist/ai/provider.d.ts +17 -8
- package/dist/ai/provider.d.ts.map +1 -1
- package/dist/ai/provider.js +16 -0
- package/dist/ai/provider.js.map +1 -1
- package/dist/bench/cases.d.ts +5 -0
- package/dist/bench/cases.d.ts.map +1 -1
- package/dist/bench/cases.js +47 -0
- package/dist/bench/cases.js.map +1 -1
- package/dist/commands/bench.d.ts +2 -1
- package/dist/commands/bench.d.ts.map +1 -1
- package/dist/commands/bench.js +13 -5
- package/dist/commands/bench.js.map +1 -1
- package/dist/commands/review.d.ts.map +1 -1
- package/dist/commands/review.js +25 -3
- package/dist/commands/review.js.map +1 -1
- package/dist/core/review/agent.d.ts +58 -0
- package/dist/core/review/agent.d.ts.map +1 -0
- package/dist/core/review/agent.js +225 -0
- package/dist/core/review/agent.js.map +1 -0
- package/dist/core/review/report.d.ts +2 -2
- package/dist/core/review/report.d.ts.map +1 -1
- package/dist/core/review/report.js +4 -2
- package/dist/core/review/report.js.map +1 -1
- package/dist/core/review/run.d.ts +11 -2
- package/dist/core/review/run.d.ts.map +1 -1
- package/dist/core/review/run.js +12 -4
- package/dist/core/review/run.js.map +1 -1
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/ui/App.d.ts +11 -3
- package/dist/ui/App.d.ts.map +1 -1
- package/dist/ui/App.js +20 -6
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/Keeper.d.ts +18 -0
- package/dist/ui/Keeper.d.ts.map +1 -0
- package/dist/ui/Keeper.js +45 -0
- package/dist/ui/Keeper.js.map +1 -0
- package/dist/ui/keeper-term.d.ts +33 -0
- package/dist/ui/keeper-term.d.ts.map +1 -0
- package/dist/ui/keeper-term.js +104 -0
- package/dist/ui/keeper-term.js.map +1 -0
- package/dist/ui/keeper.d.ts +60 -0
- package/dist/ui/keeper.d.ts.map +1 -0
- package/dist/ui/keeper.js +167 -0
- package/dist/ui/keeper.js.map +1 -0
- package/dist/ui/session.d.ts +3 -0
- package/dist/ui/session.d.ts.map +1 -1
- package/dist/ui/session.js +32 -7
- package/dist/ui/session.js.map +1 -1
- 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
|
|
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,
|
|
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
|
|
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
|
|
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"}
|
package/dist/core/review/run.js
CHANGED
|
@@ -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
|
-
|
|
26
|
-
|
|
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;
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/core/review/run.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -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":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.js.map
CHANGED
|
@@ -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;
|
|
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
|
package/dist/ui/App.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
-
|
|
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 (
|
|
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(
|
|
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
|
package/dist/ui/App.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/ui/App.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,OAAO,EAAoB,MAAM,eAAe,CAAC;
|
|
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"}
|