koneck 2.67.0 → 2.69.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/dist/cycle.d.ts +107 -0
- package/dist/cycle.d.ts.map +1 -0
- package/dist/cycle.js +136 -0
- package/dist/cycle.js.map +1 -0
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +63 -0
- package/dist/engine.js.map +1 -1
- package/dist/ink-chat.d.ts.map +1 -1
- package/dist/ink-chat.js +98 -9
- package/dist/ink-chat.js.map +1 -1
- package/dist/mention-resolve.d.ts +64 -0
- package/dist/mention-resolve.d.ts.map +1 -0
- package/dist/mention-resolve.js +139 -0
- package/dist/mention-resolve.js.map +1 -0
- package/dist/types.d.ts +11 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/web/api.d.ts.map +1 -1
- package/dist/web/api.js +63 -0
- package/dist/web/api.js.map +1 -1
- package/dist/web/events.d.ts +13 -0
- package/dist/web/events.d.ts.map +1 -1
- package/dist/web/events.js.map +1 -1
- package/dist/web/mention-signals.d.ts +41 -0
- package/dist/web/mention-signals.d.ts.map +1 -0
- package/dist/web/mention-signals.js +117 -0
- package/dist/web/mention-signals.js.map +1 -0
- package/dist/web/mention.d.ts +121 -0
- package/dist/web/mention.d.ts.map +1 -0
- package/dist/web/mention.js +211 -0
- package/dist/web/mention.js.map +1 -0
- package/dist/web/sessions.d.ts.map +1 -1
- package/dist/web/sessions.js +25 -2
- package/dist/web/sessions.js.map +1 -1
- package/dist/web/ui-client.d.ts.map +1 -1
- package/dist/web/ui-client.js +270 -1
- package/dist/web/ui-client.js.map +1 -1
- package/dist/web/ui-css.d.ts.map +1 -1
- package/dist/web/ui-css.js +39 -0
- package/dist/web/ui-css.js.map +1 -1
- package/dist/web/ui.d.ts.map +1 -1
- package/dist/web/ui.js +9 -0
- package/dist/web/ui.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turning `@path` in a message into the file itself.
|
|
3
|
+
*
|
|
4
|
+
* Referencing a file has to mean something by the time the model reads the message. Two ways to make
|
|
5
|
+
* it mean something:
|
|
6
|
+
*
|
|
7
|
+
* - leave the path in the text and let the model call `read_files` — cheap, and costs a round trip;
|
|
8
|
+
* - put the content in the message — one turn, and spends the tokens whether they were needed.
|
|
9
|
+
*
|
|
10
|
+
* KONECK does the second, and the picker shows what it will cost before the reference is made, which
|
|
11
|
+
* is what makes the choice a choice rather than a surprise. The number beside the filename in the
|
|
12
|
+
* dropdown is this. Nothing here decides on anybody's behalf that a file is too large to include:
|
|
13
|
+
* the size is stated up front and the person picking is the one who knows whether it is worth it.
|
|
14
|
+
*
|
|
15
|
+
* A directory becomes its listing rather than its contents, which is not a limit but a different
|
|
16
|
+
* thing being asked for — `@src` means "here is what is in src", and twenty files pasted end to end
|
|
17
|
+
* is not that.
|
|
18
|
+
*/
|
|
19
|
+
/** One thing the message referred to, and what came of looking for it. */
|
|
20
|
+
export interface Resolved {
|
|
21
|
+
/** As written, without the @. */
|
|
22
|
+
ref: string;
|
|
23
|
+
kind: 'file' | 'dir' | 'missing' | 'binary' | 'unreadable';
|
|
24
|
+
/** The text to give the model: the file, or the listing. */
|
|
25
|
+
content?: string;
|
|
26
|
+
/** Why nothing was included, when nothing was. */
|
|
27
|
+
note?: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The references in a draft.
|
|
31
|
+
*
|
|
32
|
+
* `@` counts only at a word boundary, matching the picker's own rule, so an email address and an npm
|
|
33
|
+
* scope in a sentence are left alone. Trailing punctuation is dropped because people write "look at
|
|
34
|
+
* @src/engine.ts, it's the loop" and the comma is not part of the name.
|
|
35
|
+
*/
|
|
36
|
+
export declare function referencesIn(text: string): string[];
|
|
37
|
+
/**
|
|
38
|
+
* How many lines a body actually has.
|
|
39
|
+
*
|
|
40
|
+
* Splitting on the newline and taking the length counts one too many for any file that ends in one,
|
|
41
|
+
* which is nearly all of them: "one\ntwo\n" splits into three pieces and is two lines. It said
|
|
42
|
+
* 3 lines for a 2-line file until a test insisted on the number.
|
|
43
|
+
*/
|
|
44
|
+
export declare function linesIn(content: string): number;
|
|
45
|
+
/**
|
|
46
|
+
* Reads one reference.
|
|
47
|
+
*
|
|
48
|
+
* A reference that does not resolve is reported rather than dropped: silently ignoring `@src/engien.ts`
|
|
49
|
+
* leaves somebody wondering why the model never mentioned the file they attached, and a one-line
|
|
50
|
+
* "no such path" in the message answers that immediately.
|
|
51
|
+
*/
|
|
52
|
+
export declare function resolveOne(cwd: string, ref: string): Promise<Resolved>;
|
|
53
|
+
/**
|
|
54
|
+
* The message with everything it referred to attached beneath it.
|
|
55
|
+
*
|
|
56
|
+
* Beneath rather than inline, so the sentence a person wrote stays the sentence the model reads
|
|
57
|
+
* first. The blocks are fenced with a name and a line count because a model given eight hundred
|
|
58
|
+
* unlabelled lines cannot cite where anything came from.
|
|
59
|
+
*/
|
|
60
|
+
export declare function attachReferences(cwd: string, text: string): Promise<{
|
|
61
|
+
text: string;
|
|
62
|
+
attached: Resolved[];
|
|
63
|
+
}>;
|
|
64
|
+
//# sourceMappingURL=mention-resolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mention-resolve.d.ts","sourceRoot":"","sources":["../src/mention-resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,0EAA0E;AAC1E,MAAM,WAAW,QAAQ;IACvB,iCAAiC;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,GAAG,QAAQ,GAAG,YAAY,CAAC;IAC3D,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAanD;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAG/C;AAQD;;;;;;GAMG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAsC5E;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,EAAE,CAAC;CACtB,CAAC,CAyBD"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turning `@path` in a message into the file itself.
|
|
3
|
+
*
|
|
4
|
+
* Referencing a file has to mean something by the time the model reads the message. Two ways to make
|
|
5
|
+
* it mean something:
|
|
6
|
+
*
|
|
7
|
+
* - leave the path in the text and let the model call `read_files` — cheap, and costs a round trip;
|
|
8
|
+
* - put the content in the message — one turn, and spends the tokens whether they were needed.
|
|
9
|
+
*
|
|
10
|
+
* KONECK does the second, and the picker shows what it will cost before the reference is made, which
|
|
11
|
+
* is what makes the choice a choice rather than a surprise. The number beside the filename in the
|
|
12
|
+
* dropdown is this. Nothing here decides on anybody's behalf that a file is too large to include:
|
|
13
|
+
* the size is stated up front and the person picking is the one who knows whether it is worth it.
|
|
14
|
+
*
|
|
15
|
+
* A directory becomes its listing rather than its contents, which is not a limit but a different
|
|
16
|
+
* thing being asked for — `@src` means "here is what is in src", and twenty files pasted end to end
|
|
17
|
+
* is not that.
|
|
18
|
+
*/
|
|
19
|
+
import path from 'path';
|
|
20
|
+
import { readFile, readdir, stat } from 'fs/promises';
|
|
21
|
+
/**
|
|
22
|
+
* The references in a draft.
|
|
23
|
+
*
|
|
24
|
+
* `@` counts only at a word boundary, matching the picker's own rule, so an email address and an npm
|
|
25
|
+
* scope in a sentence are left alone. Trailing punctuation is dropped because people write "look at
|
|
26
|
+
* @src/engine.ts, it's the loop" and the comma is not part of the name.
|
|
27
|
+
*/
|
|
28
|
+
export function referencesIn(text) {
|
|
29
|
+
const out = [];
|
|
30
|
+
const seen = new Set();
|
|
31
|
+
const pattern = /(^|[\s(["'])@([^\s"'()[\]]+)/g;
|
|
32
|
+
let match;
|
|
33
|
+
while ((match = pattern.exec(text)) !== null) {
|
|
34
|
+
const ref = match[2].replace(/[.,;:!?]+$/, '');
|
|
35
|
+
if (ref === '' || ref.startsWith('@'))
|
|
36
|
+
continue;
|
|
37
|
+
if (seen.has(ref))
|
|
38
|
+
continue;
|
|
39
|
+
seen.add(ref);
|
|
40
|
+
out.push(ref);
|
|
41
|
+
}
|
|
42
|
+
return out;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* How many lines a body actually has.
|
|
46
|
+
*
|
|
47
|
+
* Splitting on the newline and taking the length counts one too many for any file that ends in one,
|
|
48
|
+
* which is nearly all of them: "one\ntwo\n" splits into three pieces and is two lines. It said
|
|
49
|
+
* 3 lines for a 2-line file until a test insisted on the number.
|
|
50
|
+
*/
|
|
51
|
+
export function linesIn(content) {
|
|
52
|
+
const body = content.replace(/\s+$/, '');
|
|
53
|
+
return body === '' ? 0 : body.split('\n').length;
|
|
54
|
+
}
|
|
55
|
+
/** True when a buffer holds bytes no prompt should carry. */
|
|
56
|
+
function looksBinary(buffer) {
|
|
57
|
+
// A NUL in the first few kilobytes is the standard test and the one git itself uses.
|
|
58
|
+
return buffer.subarray(0, 8000).includes(0);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Reads one reference.
|
|
62
|
+
*
|
|
63
|
+
* A reference that does not resolve is reported rather than dropped: silently ignoring `@src/engien.ts`
|
|
64
|
+
* leaves somebody wondering why the model never mentioned the file they attached, and a one-line
|
|
65
|
+
* "no such path" in the message answers that immediately.
|
|
66
|
+
*/
|
|
67
|
+
export async function resolveOne(cwd, ref) {
|
|
68
|
+
const full = path.resolve(cwd, ref);
|
|
69
|
+
// A reference is to something in the project. Anything outside it is not a mistake worth guessing
|
|
70
|
+
// at, and following it would turn a filename in a chat box into a way to read /etc.
|
|
71
|
+
const relative = path.relative(path.resolve(cwd), full);
|
|
72
|
+
if (relative.startsWith('..') || path.isAbsolute(relative)) {
|
|
73
|
+
return { ref, kind: 'missing', note: 'outside the project folder' };
|
|
74
|
+
}
|
|
75
|
+
let info;
|
|
76
|
+
try {
|
|
77
|
+
info = await stat(full);
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return { ref, kind: 'missing', note: 'no such file or folder in this project' };
|
|
81
|
+
}
|
|
82
|
+
if (info.isDirectory()) {
|
|
83
|
+
try {
|
|
84
|
+
const entries = await readdir(full, { withFileTypes: true });
|
|
85
|
+
const listed = entries
|
|
86
|
+
.filter(e => !e.name.startsWith('.'))
|
|
87
|
+
.map(e => (e.isDirectory() ? e.name + '/' : e.name))
|
|
88
|
+
.sort();
|
|
89
|
+
return { ref, kind: 'dir', content: listed.join('\n') };
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return { ref, kind: 'unreadable', note: 'the folder could not be read' };
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
try {
|
|
96
|
+
const buffer = await readFile(full);
|
|
97
|
+
if (looksBinary(buffer)) {
|
|
98
|
+
return { ref, kind: 'binary', note: 'a binary file, ' + buffer.length + ' bytes' };
|
|
99
|
+
}
|
|
100
|
+
return { ref, kind: 'file', content: buffer.toString('utf8') };
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
return { ref, kind: 'unreadable', note: 'the file could not be read' };
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* The message with everything it referred to attached beneath it.
|
|
108
|
+
*
|
|
109
|
+
* Beneath rather than inline, so the sentence a person wrote stays the sentence the model reads
|
|
110
|
+
* first. The blocks are fenced with a name and a line count because a model given eight hundred
|
|
111
|
+
* unlabelled lines cannot cite where anything came from.
|
|
112
|
+
*/
|
|
113
|
+
export async function attachReferences(cwd, text) {
|
|
114
|
+
const refs = referencesIn(text);
|
|
115
|
+
if (refs.length === 0)
|
|
116
|
+
return { text, attached: [] };
|
|
117
|
+
const attached = await Promise.all(refs.map(ref => resolveOne(cwd, ref)));
|
|
118
|
+
const useful = attached.filter(a => a.kind === 'file' || a.kind === 'dir');
|
|
119
|
+
const problems = attached.filter(a => a.kind !== 'file' && a.kind !== 'dir');
|
|
120
|
+
if (useful.length === 0 && problems.length === 0)
|
|
121
|
+
return { text, attached };
|
|
122
|
+
const parts = [text.trimEnd()];
|
|
123
|
+
if (useful.length > 0) {
|
|
124
|
+
parts.push('', 'Referenced with @ in the message above:');
|
|
125
|
+
for (const item of useful) {
|
|
126
|
+
const body = (item.content ?? '').replace(/\s+$/, '');
|
|
127
|
+
const lines = linesIn(body);
|
|
128
|
+
const label = item.kind === 'dir'
|
|
129
|
+
? '@' + item.ref + '/ — folder listing, ' + lines + ' entries'
|
|
130
|
+
: '@' + item.ref + ' — ' + lines + ' lines';
|
|
131
|
+
parts.push('', '<<< ' + label, body, '>>> end ' + item.ref);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
for (const problem of problems) {
|
|
135
|
+
parts.push('', 'Note: @' + problem.ref + ' could not be attached — ' + (problem.note ?? 'unknown'));
|
|
136
|
+
}
|
|
137
|
+
return { text: parts.join('\n'), attached };
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=mention-resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mention-resolve.js","sourceRoot":"","sources":["../src/mention-resolve.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -172,6 +172,17 @@ export interface AgentConfig {
|
|
|
172
172
|
requests: number;
|
|
173
173
|
tokens: number;
|
|
174
174
|
}) => void;
|
|
175
|
+
/**
|
|
176
|
+
* Told when the run appears to be circling: a small set of actions repeated with nothing written.
|
|
177
|
+
*
|
|
178
|
+
* A warning and never a stop. Calibrated on four real sessions, in which a long run that finished
|
|
179
|
+
* properly was more repetitive than the cycle phase of one that wasted twenty million tokens — a
|
|
180
|
+
* signal that thin can point something out, but must not end somebody's work.
|
|
181
|
+
*/
|
|
182
|
+
onCircling?: (said: string, churn: {
|
|
183
|
+
distinct: number;
|
|
184
|
+
repeats: number;
|
|
185
|
+
}) => void;
|
|
175
186
|
/**
|
|
176
187
|
* Frames received on the current stream before any content has arrived.
|
|
177
188
|
*
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/web/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/web/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AASH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/web/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AASH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AA0B/C,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAYrC,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oFAAoF;IACpF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AA6BD,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,wBAAsB,QAAQ,CAC5B,YAAY,EAAE,WAAW,EAAE,OAAO,GAAE,UAAe,GAClD,OAAO,CAAC,SAAS,CAAC,CAk8CpB"}
|
package/dist/web/api.js
CHANGED
|
@@ -27,11 +27,22 @@ import { listPast, readPast } from './history.js';
|
|
|
27
27
|
import { summarise as summariseTrajectory } from '../trajectory.js';
|
|
28
28
|
import { listDir, viewFile } from './files.js';
|
|
29
29
|
import { searchSessions, searchAllWorkspaces } from './search.js';
|
|
30
|
+
import { listWorkspaceEntries } from '../workspace-files.js';
|
|
31
|
+
import { rankMentions, describeCandidates, shortReason } from './mention.js';
|
|
32
|
+
import { gatherSignals } from './mention-signals.js';
|
|
30
33
|
import { trustedWorkspaces, isWorkspaceTrusted, trustWorkspace } from '../workspace-trust.js';
|
|
31
34
|
import { MODES } from '../permissions.js';
|
|
32
35
|
import { checkpoints, makeCheckpoint, checkpointPreview, restoreCheckpoint, gate, health, settings, writeSetting, projectContext, writeInstructions, runWebRefactor, REFACTOR_SHAPES, mcpServers } from './capabilities.js';
|
|
33
36
|
export const DEFAULT_WEB_PORT = 4300;
|
|
34
37
|
const LOOPBACK = '127.0.0.1';
|
|
38
|
+
/**
|
|
39
|
+
* How long the `@` picker's listing and signals stay usable.
|
|
40
|
+
*
|
|
41
|
+
* Short, because it exists to survive a burst of keystrokes rather than to be a cache in any real
|
|
42
|
+
* sense — and the dropdown opening refreshes it regardless, which is the moment staleness would be
|
|
43
|
+
* noticed.
|
|
44
|
+
*/
|
|
45
|
+
const MENTION_CACHE_MS = 15_000;
|
|
35
46
|
function tokenMatches(expected, given) {
|
|
36
47
|
if (!given)
|
|
37
48
|
return false;
|
|
@@ -86,6 +97,14 @@ export async function startWeb(baseConfigIn, options = {}) {
|
|
|
86
97
|
* add to that list would be exactly the escalation the prompt exists to prevent.
|
|
87
98
|
*/
|
|
88
99
|
let workspace = baseConfig.cwd;
|
|
100
|
+
/*
|
|
101
|
+
* What the `@` picker holds between keystrokes.
|
|
102
|
+
*
|
|
103
|
+
* Refreshed whenever the dropdown opens, so a file created a second ago is there, and otherwise
|
|
104
|
+
* held for long enough that typing a filename is not thousands of directory reads. Invalidated by
|
|
105
|
+
* key rather than cleared, because the workspace and the session both change what belongs in it.
|
|
106
|
+
*/
|
|
107
|
+
let mentionCache = null;
|
|
89
108
|
/** Makes each uploaded filename unique without a clock collision. */
|
|
90
109
|
let uploadCounter = 0;
|
|
91
110
|
const registry = new SessionRegistry();
|
|
@@ -403,6 +422,50 @@ export async function startWeb(baseConfigIn, options = {}) {
|
|
|
403
422
|
return json(res, 200, { tokens: null, tooLong: true });
|
|
404
423
|
return json(res, 200, { tokens: highlightTokens(text.split('\n'), String(body.path ?? 'x.txt')) });
|
|
405
424
|
}
|
|
425
|
+
/*
|
|
426
|
+
* The candidates for an `@` in the composer.
|
|
427
|
+
*
|
|
428
|
+
* Two things are cached, for different reasons. The workspace listing is a directory walk over
|
|
429
|
+
* thousands of paths and cannot happen per keystroke. The signals — git, the ledger, the
|
|
430
|
+
* session's own history — are three more reads that would turn typing into waiting. Both are
|
|
431
|
+
* held briefly and refreshed when the dropdown opens, which is the moment somebody would
|
|
432
|
+
* notice a file they just created being missing.
|
|
433
|
+
*
|
|
434
|
+
* The ranking itself runs on every request rather than in the browser. It has to: the browser
|
|
435
|
+
* has no ledger, no git and no trajectory, and shipping all three to it so it could sort forty
|
|
436
|
+
* filenames would cost more than the sort.
|
|
437
|
+
*/
|
|
438
|
+
if (route === '/api/mention' && req.method === 'GET') {
|
|
439
|
+
if (!mayRead)
|
|
440
|
+
return json(res, 401, { error: 'token required' });
|
|
441
|
+
const q = url.searchParams.get('q') ?? '';
|
|
442
|
+
const opening = url.searchParams.get('fresh') === '1';
|
|
443
|
+
const sessionId = url.searchParams.get('session') ?? '';
|
|
444
|
+
const cacheKey = workspace + '\u0000' + sessionId;
|
|
445
|
+
const now = Date.now();
|
|
446
|
+
const stale = !mentionCache
|
|
447
|
+
|| mentionCache.key !== cacheKey
|
|
448
|
+
|| opening
|
|
449
|
+
|| now - mentionCache.at > MENTION_CACHE_MS;
|
|
450
|
+
if (stale) {
|
|
451
|
+
const events = sessionId ? (registry.get(sessionId)?.trajectory() ?? []) : [];
|
|
452
|
+
const [entries, signals] = await Promise.all([
|
|
453
|
+
listWorkspaceEntries(workspace).catch(() => []),
|
|
454
|
+
gatherSignals(workspace, events).catch(() => ({})),
|
|
455
|
+
]);
|
|
456
|
+
mentionCache = { key: cacheKey, at: now, entries, signals };
|
|
457
|
+
}
|
|
458
|
+
const held = mentionCache;
|
|
459
|
+
const ranked = rankMentions(held.entries, q, held.signals);
|
|
460
|
+
const candidates = await describeCandidates(workspace, ranked);
|
|
461
|
+
return json(res, 200, {
|
|
462
|
+
query: q,
|
|
463
|
+
total: held.entries.length,
|
|
464
|
+
// The short forms come from here rather than from the client, so the browser and the
|
|
465
|
+
// terminal cannot end up calling the same signal two different things.
|
|
466
|
+
candidates: candidates.map(c => ({ ...c, shorts: c.because.map(shortReason) })),
|
|
467
|
+
});
|
|
468
|
+
}
|
|
406
469
|
if (route === '/api/search' && req.method === 'GET') {
|
|
407
470
|
if (!mayRead)
|
|
408
471
|
return json(res, 401, { error: 'token required' });
|