pi-ghost-autocomplete 0.3.1 → 0.3.2
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 +101 -6
- package/dist/bench-cli.js +81 -5
- package/dist/bench-cli.js.map +1 -1
- package/dist/bench.d.ts +130 -2
- package/dist/bench.d.ts.map +1 -1
- package/dist/bench.js +285 -4
- package/dist/bench.js.map +1 -1
- package/dist/cache.d.ts +124 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +173 -0
- package/dist/cache.js.map +1 -0
- package/dist/candidate-rerank.d.ts +57 -0
- package/dist/candidate-rerank.d.ts.map +1 -0
- package/dist/candidate-rerank.js +78 -0
- package/dist/candidate-rerank.js.map +1 -0
- package/dist/config.d.ts +43 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +148 -18
- package/dist/config.js.map +1 -1
- package/dist/context-aggregator.d.ts +14 -5
- package/dist/context-aggregator.d.ts.map +1 -1
- package/dist/context-aggregator.js +38 -9
- package/dist/context-aggregator.js.map +1 -1
- package/dist/context-selector.d.ts +128 -0
- package/dist/context-selector.d.ts.map +1 -0
- package/dist/context-selector.js +300 -0
- package/dist/context-selector.js.map +1 -0
- package/dist/cycle-manager.d.ts +102 -0
- package/dist/cycle-manager.d.ts.map +1 -0
- package/dist/cycle-manager.js +168 -0
- package/dist/cycle-manager.js.map +1 -0
- package/dist/edit-history-ring.d.ts +148 -0
- package/dist/edit-history-ring.d.ts.map +1 -0
- package/dist/edit-history-ring.js +262 -0
- package/dist/edit-history-ring.js.map +1 -0
- package/dist/entropy-stop.d.ts +102 -0
- package/dist/entropy-stop.d.ts.map +1 -0
- package/dist/entropy-stop.js +141 -0
- package/dist/entropy-stop.js.map +1 -0
- package/dist/eval-dataset.d.ts +66 -0
- package/dist/eval-dataset.d.ts.map +1 -0
- package/dist/eval-dataset.js +127 -0
- package/dist/eval-dataset.js.map +1 -0
- package/dist/fast-path-engine.d.ts +286 -0
- package/dist/fast-path-engine.d.ts.map +1 -0
- package/dist/fast-path-engine.js +341 -0
- package/dist/fast-path-engine.js.map +1 -0
- package/dist/fuzzy-matcher.d.ts +8 -0
- package/dist/fuzzy-matcher.d.ts.map +1 -1
- package/dist/fuzzy-matcher.js +5 -3
- package/dist/fuzzy-matcher.js.map +1 -1
- package/dist/ghost-editor.d.ts +321 -4
- package/dist/ghost-editor.d.ts.map +1 -1
- package/dist/ghost-editor.js +1190 -144
- package/dist/ghost-editor.js.map +1 -1
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +81 -2
- package/dist/index.js.map +1 -1
- package/dist/keystroke-timer.d.ts +59 -0
- package/dist/keystroke-timer.d.ts.map +1 -0
- package/dist/keystroke-timer.js +94 -0
- package/dist/keystroke-timer.js.map +1 -0
- package/dist/metrics-builder.d.ts +71 -0
- package/dist/metrics-builder.d.ts.map +1 -0
- package/dist/metrics-builder.js +71 -0
- package/dist/metrics-builder.js.map +1 -0
- package/dist/metrics.d.ts +99 -2
- package/dist/metrics.d.ts.map +1 -1
- package/dist/metrics.js +131 -17
- package/dist/metrics.js.map +1 -1
- package/dist/path-matcher.d.ts +9 -0
- package/dist/path-matcher.d.ts.map +1 -1
- package/dist/path-matcher.js +5 -2
- package/dist/path-matcher.js.map +1 -1
- package/dist/profile-store.d.ts +82 -0
- package/dist/profile-store.d.ts.map +1 -0
- package/dist/profile-store.js +199 -0
- package/dist/profile-store.js.map +1 -0
- package/dist/profile.d.ts +185 -0
- package/dist/profile.d.ts.map +1 -0
- package/dist/profile.js +434 -0
- package/dist/profile.js.map +1 -0
- package/dist/providers/cloud-provider.d.ts +10 -1
- package/dist/providers/cloud-provider.d.ts.map +1 -1
- package/dist/providers/cloud-provider.js +71 -14
- package/dist/providers/cloud-provider.js.map +1 -1
- package/dist/providers/local-provider.d.ts +8 -1
- package/dist/providers/local-provider.d.ts.map +1 -1
- package/dist/providers/local-provider.js +15 -3
- package/dist/providers/local-provider.js.map +1 -1
- package/dist/providers/openai-compat-provider.d.ts +11 -1
- package/dist/providers/openai-compat-provider.d.ts.map +1 -1
- package/dist/providers/openai-compat-provider.js +93 -6
- package/dist/providers/openai-compat-provider.js.map +1 -1
- package/dist/providers/openai-completions-runner.d.ts +25 -1
- package/dist/providers/openai-completions-runner.d.ts.map +1 -1
- package/dist/providers/openai-completions-runner.js +109 -14
- package/dist/providers/openai-completions-runner.js.map +1 -1
- package/dist/providers/race.d.ts +58 -1
- package/dist/providers/race.d.ts.map +1 -1
- package/dist/providers/race.js +317 -4
- package/dist/providers/race.js.map +1 -1
- package/dist/providers/truncate.d.ts.map +1 -1
- package/dist/providers/truncate.js +20 -2
- package/dist/providers/truncate.js.map +1 -1
- package/dist/providers/types.d.ts +96 -1
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/types.js +59 -1
- package/dist/providers/types.js.map +1 -1
- package/dist/provisional-manager.d.ts +93 -0
- package/dist/provisional-manager.d.ts.map +1 -0
- package/dist/provisional-manager.js +98 -0
- package/dist/provisional-manager.js.map +1 -0
- package/dist/provisional.d.ts +150 -0
- package/dist/provisional.d.ts.map +1 -0
- package/dist/provisional.js +238 -0
- package/dist/provisional.js.map +1 -0
- package/dist/regret-tracker.d.ts +84 -0
- package/dist/regret-tracker.d.ts.map +1 -0
- package/dist/regret-tracker.js +145 -0
- package/dist/regret-tracker.js.map +1 -0
- package/dist/replay-cli.d.ts +13 -0
- package/dist/replay-cli.d.ts.map +1 -0
- package/dist/replay-cli.js +167 -0
- package/dist/replay-cli.js.map +1 -0
- package/dist/replay.d.ts +107 -0
- package/dist/replay.d.ts.map +1 -0
- package/dist/replay.js +225 -0
- package/dist/replay.js.map +1 -0
- package/dist/reranker.d.ts +181 -0
- package/dist/reranker.d.ts.map +1 -0
- package/dist/reranker.js +324 -0
- package/dist/reranker.js.map +1 -0
- package/dist/session-trie.d.ts +103 -0
- package/dist/session-trie.d.ts.map +1 -0
- package/dist/session-trie.js +280 -0
- package/dist/session-trie.js.map +1 -0
- package/dist/speculative.d.ts +74 -0
- package/dist/speculative.d.ts.map +1 -0
- package/dist/speculative.js +107 -0
- package/dist/speculative.js.map +1 -0
- package/dist/tool-summarize.d.ts +40 -0
- package/dist/tool-summarize.d.ts.map +1 -0
- package/dist/tool-summarize.js +245 -0
- package/dist/tool-summarize.js.map +1 -0
- package/dist/trie-sanitize.d.ts +22 -0
- package/dist/trie-sanitize.d.ts.map +1 -0
- package/dist/trie-sanitize.js +142 -0
- package/dist/trie-sanitize.js.map +1 -0
- package/dist/versions.d.ts +23 -0
- package/dist/versions.d.ts.map +1 -0
- package/dist/versions.js +31 -0
- package/dist/versions.js.map +1 -0
- package/package.json +3 -2
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,23 @@
|
|
|
1
1
|
import type { ExtensionContext } from "@earendil-works/pi-coding-agent";
|
|
2
2
|
import type { AgentMessage } from "@earendil-works/pi-agent-core";
|
|
3
|
+
/**
|
|
4
|
+
* Conversation entry surfaced to ghost providers. `role: "tool"` carries an
|
|
5
|
+
* optional `toolName` for prompt-formatting cues. PRD §M6a.
|
|
6
|
+
*/
|
|
3
7
|
export interface RecentMessage {
|
|
4
|
-
role: "user" | "assistant";
|
|
8
|
+
role: "user" | "assistant" | "tool";
|
|
5
9
|
text: string;
|
|
10
|
+
/** Set when role === "tool". */
|
|
11
|
+
toolName?: string;
|
|
6
12
|
}
|
|
7
13
|
/**
|
|
8
|
-
* Read up to `max` recent
|
|
9
|
-
*
|
|
10
|
-
*
|
|
14
|
+
* Read up to `max` recent messages from the current branch. By default
|
|
15
|
+
* returns user + assistant entries; pass `includeTools: true` to also
|
|
16
|
+
* surface tool calls/results as `role: "tool"` entries with `toolName`
|
|
17
|
+
* populated where available. Returns oldest-first.
|
|
11
18
|
*/
|
|
12
|
-
export declare function getRecentMessages(ctx: ExtensionContext, max: number
|
|
19
|
+
export declare function getRecentMessages(ctx: ExtensionContext, max: number, opts?: {
|
|
20
|
+
includeTools?: boolean;
|
|
21
|
+
}): RecentMessage[];
|
|
13
22
|
export declare function extractText(msg: AgentMessage): string;
|
|
14
23
|
//# sourceMappingURL=context-aggregator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-aggregator.d.ts","sourceRoot":"","sources":["../src/context-aggregator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAgB,MAAM,iCAAiC,CAAC;AACtF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElE,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"context-aggregator.d.ts","sourceRoot":"","sources":["../src/context-aggregator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAgB,MAAM,iCAAiC,CAAC;AACtF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElE;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,gCAAgC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAChC,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,MAAM,EACX,IAAI,GAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAO,GACnC,aAAa,EAAE,CA0BjB;AAmCD,wBAAgB,WAAW,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAYrD"}
|
|
@@ -1,30 +1,59 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Read up to `max` recent
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* Read up to `max` recent messages from the current branch. By default
|
|
3
|
+
* returns user + assistant entries; pass `includeTools: true` to also
|
|
4
|
+
* surface tool calls/results as `role: "tool"` entries with `toolName`
|
|
5
|
+
* populated where available. Returns oldest-first.
|
|
5
6
|
*/
|
|
6
|
-
export function getRecentMessages(ctx, max) {
|
|
7
|
+
export function getRecentMessages(ctx, max, opts = {}) {
|
|
7
8
|
if (max <= 0)
|
|
8
9
|
return [];
|
|
9
10
|
const branch = safeBranch(ctx);
|
|
10
11
|
if (!branch)
|
|
11
12
|
return [];
|
|
13
|
+
const includeTools = opts.includeTools ?? false;
|
|
12
14
|
const out = [];
|
|
13
15
|
for (let i = branch.length - 1; i >= 0 && out.length < max; i--) {
|
|
14
16
|
const entry = branch[i];
|
|
15
17
|
if (!entry || entry.type !== "message")
|
|
16
18
|
continue;
|
|
17
19
|
const role = roleOf(entry.message);
|
|
18
|
-
if (role
|
|
20
|
+
if (role === "user" || role === "assistant") {
|
|
21
|
+
const text = extractText(entry.message);
|
|
22
|
+
if (!text)
|
|
23
|
+
continue;
|
|
24
|
+
out.push({ role, text });
|
|
19
25
|
continue;
|
|
20
|
-
|
|
21
|
-
if (
|
|
22
|
-
|
|
23
|
-
|
|
26
|
+
}
|
|
27
|
+
if (includeTools && role === "tool") {
|
|
28
|
+
const text = extractText(entry.message);
|
|
29
|
+
if (!text)
|
|
30
|
+
continue;
|
|
31
|
+
const toolName = toolNameOf(entry.message);
|
|
32
|
+
out.push(toolName ? { role: "tool", text, toolName } : { role: "tool", text });
|
|
33
|
+
}
|
|
24
34
|
}
|
|
25
35
|
out.reverse();
|
|
26
36
|
return out;
|
|
27
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Best-effort extraction of the tool name from an `AgentMessage`. Tool
|
|
40
|
+
* messages may carry the name on either the message itself or on a
|
|
41
|
+
* tool_use/tool_result content part — handle both shapes.
|
|
42
|
+
*/
|
|
43
|
+
function toolNameOf(msg) {
|
|
44
|
+
if (!msg || typeof msg !== "object")
|
|
45
|
+
return undefined;
|
|
46
|
+
if ("name" in msg && typeof msg.name === "string")
|
|
47
|
+
return msg.name;
|
|
48
|
+
if ("content" in msg && Array.isArray(msg.content)) {
|
|
49
|
+
for (const c of msg.content) {
|
|
50
|
+
if (c && typeof c === "object" && "name" in c && typeof c.name === "string") {
|
|
51
|
+
return c.name;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
28
57
|
function safeBranch(ctx) {
|
|
29
58
|
try {
|
|
30
59
|
return ctx.sessionManager.getBranch();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-aggregator.js","sourceRoot":"","sources":["../src/context-aggregator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"context-aggregator.js","sourceRoot":"","sources":["../src/context-aggregator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Relevance-pruned context selection. See PRD §M6b.
|
|
3
|
+
*
|
|
4
|
+
* Replaces the "last N messages" recency window with a scan-then-select
|
|
5
|
+
* design motivated by ChaI-TeA (RESEARCH §2): models can exploit distant
|
|
6
|
+
* conversation history; a pure recency window blinds the selector to
|
|
7
|
+
* high-IDF distant turns.
|
|
8
|
+
*
|
|
9
|
+
* Pipeline:
|
|
10
|
+
* 1. Scan up to `maxScan` candidates from the branch (newest first).
|
|
11
|
+
* 2. Tokenize each candidate's text (lower-case, drop stopwords).
|
|
12
|
+
* 3. Score each candidate as `0.7 * recencyWeight + 0.3 * bm25Score`,
|
|
13
|
+
* both normalized to [0, 1].
|
|
14
|
+
* 4. Sort by score, take top `maxSelected`, enforce `maxChars` budget by
|
|
15
|
+
* truncating the lowest-recency tail.
|
|
16
|
+
*
|
|
17
|
+
* Pure module: no I/O, no editor state.
|
|
18
|
+
*/
|
|
19
|
+
export declare const DEFAULT_MAX_SCAN = 200;
|
|
20
|
+
export declare const DEFAULT_MAX_SELECTED = 8;
|
|
21
|
+
export declare const DEFAULT_MAX_CHARS = 4000;
|
|
22
|
+
export declare const DEFAULT_BM25_WEIGHT = 0.3;
|
|
23
|
+
/**
|
|
24
|
+
* Enhancement #1: weight on the edit-history token-overlap locality
|
|
25
|
+
* signal. Default 0 (opt-in). When > 0, the score formula becomes:
|
|
26
|
+
* `score = (1 - bm25Weight - editLocalityWeight) * recency
|
|
27
|
+
* + bm25Weight * bm25
|
|
28
|
+
* + editLocalityWeight * editLocality`
|
|
29
|
+
* where `editLocality` is 1 if the candidate text shares any token with
|
|
30
|
+
* `editTokens`, else 0. `bm25Weight + editLocalityWeight` is clamped to
|
|
31
|
+
* 1; recency coefficient gets whatever remains.
|
|
32
|
+
*/
|
|
33
|
+
export declare const DEFAULT_EDIT_LOCALITY_WEIGHT = 0;
|
|
34
|
+
export declare const RECENCY_HALF_LIFE = 4;
|
|
35
|
+
/**
|
|
36
|
+
* Small fixed English stopword list. No language detection — when ghost
|
|
37
|
+
* autocomplete moves to non-English prompts, this set may need expansion
|
|
38
|
+
* or a per-language switch. Until then, the cost of leaving these in is
|
|
39
|
+
* higher than the cost of an English-only set.
|
|
40
|
+
*/
|
|
41
|
+
export declare const STOPWORDS: ReadonlySet<string>;
|
|
42
|
+
export interface ContextCandidate {
|
|
43
|
+
role: "user" | "assistant" | "tool";
|
|
44
|
+
text: string;
|
|
45
|
+
toolName?: string;
|
|
46
|
+
}
|
|
47
|
+
export interface ContextSelectorOpts {
|
|
48
|
+
maxScan?: number;
|
|
49
|
+
maxSelected?: number;
|
|
50
|
+
maxChars?: number;
|
|
51
|
+
/** Weight on BM25 vs recency: score = (1 - w) * recency + w * bm25. */
|
|
52
|
+
bm25Weight?: number;
|
|
53
|
+
/**
|
|
54
|
+
* Enhancement #1: weight on the edit-history token-overlap bonus.
|
|
55
|
+
* Default 0. Requires `editTokens` to have any effect.
|
|
56
|
+
*/
|
|
57
|
+
editLocalityWeight?: number;
|
|
58
|
+
/**
|
|
59
|
+
* Enhancement #1: set of tokens recently added in nearby edits. A
|
|
60
|
+
* candidate whose text contains any of these tokens earns the full
|
|
61
|
+
* `editLocalityWeight` bonus. Missing or empty → no effect.
|
|
62
|
+
*/
|
|
63
|
+
editTokens?: ReadonlySet<string>;
|
|
64
|
+
}
|
|
65
|
+
export interface SelectedContext {
|
|
66
|
+
candidates: ContextCandidate[];
|
|
67
|
+
scannedCount: number;
|
|
68
|
+
selectedCount: number;
|
|
69
|
+
totalChars: number;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Tokenize text into lower-case alphanumeric words, dropping stopwords and
|
|
73
|
+
* single-character noise. Kept intentionally simple — proper tokenization
|
|
74
|
+
* (subword, punctuation handling, code identifiers) would over-fit the
|
|
75
|
+
* v0.5 prompt corpus.
|
|
76
|
+
*
|
|
77
|
+
* Caveat: camelCase identifiers do NOT split. `getRecentMessages` becomes a
|
|
78
|
+
* single token `getrecentmessages`. File paths and snake_case split on the
|
|
79
|
+
* separator characters and tokenize as expected.
|
|
80
|
+
*/
|
|
81
|
+
export declare function tokenize(text: string): string[];
|
|
82
|
+
/**
|
|
83
|
+
* Compute document frequencies over a candidate pool. Used as the corpus
|
|
84
|
+
* for BM25's IDF term.
|
|
85
|
+
*/
|
|
86
|
+
export declare function computeDocFreqs(candidates: ContextCandidate[]): {
|
|
87
|
+
docFreqs: Map<string, number>;
|
|
88
|
+
avgDocLen: number;
|
|
89
|
+
docLens: number[];
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* BM25 score for `queryTokens` against a document. Uses an IDF floor
|
|
93
|
+
* `log(1 + 1/N)` so terms appearing in every candidate still contribute a
|
|
94
|
+
* small positive score instead of zero — PRD §M6b "BM25-on-small-corpus
|
|
95
|
+
* caveat".
|
|
96
|
+
*/
|
|
97
|
+
export declare function bm25Score(queryTokens: string[], docTokens: string[], docFreqs: Map<string, number>, N: number, avgDocLen: number): number;
|
|
98
|
+
/**
|
|
99
|
+
* Exponential recency weight: 1.0 at the newest position, decays e-fold
|
|
100
|
+
* every `RECENCY_HALF_LIFE` positions. `distance` is positions from the
|
|
101
|
+
* newest end of the candidate pool (0 = newest).
|
|
102
|
+
*/
|
|
103
|
+
export declare function recencyWeight(distance: number): number;
|
|
104
|
+
/**
|
|
105
|
+
* Select the most relevant subset of `candidates` for the current prefix.
|
|
106
|
+
* `candidates` should be newest-first (index 0 = newest). Returns selected
|
|
107
|
+
* entries in their original branch order (oldest-first of those selected)
|
|
108
|
+
* for natural prompt rendering.
|
|
109
|
+
*/
|
|
110
|
+
export declare function selectContext(candidates: ContextCandidate[], prefix: string, opts?: ContextSelectorOpts): SelectedContext;
|
|
111
|
+
/**
|
|
112
|
+
* Parse `PI_GHOST_CONTEXT_BM25_WEIGHT`. Returns fallback on bad input or
|
|
113
|
+
* outside [0, 1].
|
|
114
|
+
*/
|
|
115
|
+
export declare function parseBm25WeightEnv(raw: string | undefined): number;
|
|
116
|
+
/**
|
|
117
|
+
* Parse `PI_GHOST_CONTEXT_EDIT_LOCALITY_WEIGHT`. Returns 0 (no-op) on bad
|
|
118
|
+
* input or outside [0, 1]. Enhancement #1.
|
|
119
|
+
*/
|
|
120
|
+
export declare function parseEditLocalityWeightEnv(raw: string | undefined): number;
|
|
121
|
+
/**
|
|
122
|
+
* Build a `ContextSelectorOpts` from the documented env knobs (PRD §M6d).
|
|
123
|
+
* Returns a defaulted opts object. `editTokens` is omitted — the caller
|
|
124
|
+
* must inject the live edit-history token set on each call (env can only
|
|
125
|
+
* configure the weight, not the dynamic data).
|
|
126
|
+
*/
|
|
127
|
+
export declare function readContextEnv(): Omit<Required<ContextSelectorOpts>, "editTokens">;
|
|
128
|
+
//# sourceMappingURL=context-selector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-selector.d.ts","sourceRoot":"","sources":["../src/context-selector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,eAAO,MAAM,iBAAiB,OAAO,CAAC;AACtC,eAAO,MAAM,mBAAmB,MAAM,CAAC;AACvC;;;;;;;;;GASG;AACH,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAC9C,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAKnC;;;;;GAKG;AACH,eAAO,MAAM,SAAS,EAAE,WAAW,CAAC,MAAM,CAexC,CAAC;AAEH,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,UAAU,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,eAAe;IAC/B,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAS/C;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,gBAAgB,EAAE,GAAG;IAChE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CAClB,CAiBA;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CACxB,WAAW,EAAE,MAAM,EAAE,EACrB,SAAS,EAAE,MAAM,EAAE,EACnB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,CAAC,EAAE,MAAM,EACT,SAAS,EAAE,MAAM,GACf,MAAM,CAyBR;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtD;AAeD;;;;;GAKG;AACH,wBAAgB,aAAa,CAC5B,UAAU,EAAE,gBAAgB,EAAE,EAC9B,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,mBAAwB,GAC5B,eAAe,CAiGjB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAKlE;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAK1E;AAUD;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,YAAY,CAAC,CAUlF"}
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Relevance-pruned context selection. See PRD §M6b.
|
|
3
|
+
*
|
|
4
|
+
* Replaces the "last N messages" recency window with a scan-then-select
|
|
5
|
+
* design motivated by ChaI-TeA (RESEARCH §2): models can exploit distant
|
|
6
|
+
* conversation history; a pure recency window blinds the selector to
|
|
7
|
+
* high-IDF distant turns.
|
|
8
|
+
*
|
|
9
|
+
* Pipeline:
|
|
10
|
+
* 1. Scan up to `maxScan` candidates from the branch (newest first).
|
|
11
|
+
* 2. Tokenize each candidate's text (lower-case, drop stopwords).
|
|
12
|
+
* 3. Score each candidate as `0.7 * recencyWeight + 0.3 * bm25Score`,
|
|
13
|
+
* both normalized to [0, 1].
|
|
14
|
+
* 4. Sort by score, take top `maxSelected`, enforce `maxChars` budget by
|
|
15
|
+
* truncating the lowest-recency tail.
|
|
16
|
+
*
|
|
17
|
+
* Pure module: no I/O, no editor state.
|
|
18
|
+
*/
|
|
19
|
+
export const DEFAULT_MAX_SCAN = 200;
|
|
20
|
+
export const DEFAULT_MAX_SELECTED = 8;
|
|
21
|
+
export const DEFAULT_MAX_CHARS = 4000;
|
|
22
|
+
export const DEFAULT_BM25_WEIGHT = 0.3;
|
|
23
|
+
/**
|
|
24
|
+
* Enhancement #1: weight on the edit-history token-overlap locality
|
|
25
|
+
* signal. Default 0 (opt-in). When > 0, the score formula becomes:
|
|
26
|
+
* `score = (1 - bm25Weight - editLocalityWeight) * recency
|
|
27
|
+
* + bm25Weight * bm25
|
|
28
|
+
* + editLocalityWeight * editLocality`
|
|
29
|
+
* where `editLocality` is 1 if the candidate text shares any token with
|
|
30
|
+
* `editTokens`, else 0. `bm25Weight + editLocalityWeight` is clamped to
|
|
31
|
+
* 1; recency coefficient gets whatever remains.
|
|
32
|
+
*/
|
|
33
|
+
export const DEFAULT_EDIT_LOCALITY_WEIGHT = 0;
|
|
34
|
+
export const RECENCY_HALF_LIFE = 4;
|
|
35
|
+
const BM25_K1 = 1.5;
|
|
36
|
+
const BM25_B = 0.75;
|
|
37
|
+
/**
|
|
38
|
+
* Small fixed English stopword list. No language detection — when ghost
|
|
39
|
+
* autocomplete moves to non-English prompts, this set may need expansion
|
|
40
|
+
* or a per-language switch. Until then, the cost of leaving these in is
|
|
41
|
+
* higher than the cost of an English-only set.
|
|
42
|
+
*/
|
|
43
|
+
export const STOPWORDS = new Set([
|
|
44
|
+
"the",
|
|
45
|
+
"a",
|
|
46
|
+
"an",
|
|
47
|
+
"of",
|
|
48
|
+
"and",
|
|
49
|
+
"or",
|
|
50
|
+
"to",
|
|
51
|
+
"in",
|
|
52
|
+
"on",
|
|
53
|
+
"for",
|
|
54
|
+
"is",
|
|
55
|
+
"are",
|
|
56
|
+
"this",
|
|
57
|
+
"that",
|
|
58
|
+
]);
|
|
59
|
+
/**
|
|
60
|
+
* Tokenize text into lower-case alphanumeric words, dropping stopwords and
|
|
61
|
+
* single-character noise. Kept intentionally simple — proper tokenization
|
|
62
|
+
* (subword, punctuation handling, code identifiers) would over-fit the
|
|
63
|
+
* v0.5 prompt corpus.
|
|
64
|
+
*
|
|
65
|
+
* Caveat: camelCase identifiers do NOT split. `getRecentMessages` becomes a
|
|
66
|
+
* single token `getrecentmessages`. File paths and snake_case split on the
|
|
67
|
+
* separator characters and tokenize as expected.
|
|
68
|
+
*/
|
|
69
|
+
export function tokenize(text) {
|
|
70
|
+
const out = [];
|
|
71
|
+
for (const m of text.toLowerCase().matchAll(/[a-z0-9]+/g)) {
|
|
72
|
+
const t = m[0];
|
|
73
|
+
if (t.length < 2)
|
|
74
|
+
continue;
|
|
75
|
+
if (STOPWORDS.has(t))
|
|
76
|
+
continue;
|
|
77
|
+
out.push(t);
|
|
78
|
+
}
|
|
79
|
+
return out;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Compute document frequencies over a candidate pool. Used as the corpus
|
|
83
|
+
* for BM25's IDF term.
|
|
84
|
+
*/
|
|
85
|
+
export function computeDocFreqs(candidates) {
|
|
86
|
+
const docFreqs = new Map();
|
|
87
|
+
const docLens = [];
|
|
88
|
+
let totalLen = 0;
|
|
89
|
+
for (const c of candidates) {
|
|
90
|
+
const tokens = tokenize(c.text);
|
|
91
|
+
docLens.push(tokens.length);
|
|
92
|
+
totalLen += tokens.length;
|
|
93
|
+
const seen = new Set();
|
|
94
|
+
for (const t of tokens) {
|
|
95
|
+
if (seen.has(t))
|
|
96
|
+
continue;
|
|
97
|
+
seen.add(t);
|
|
98
|
+
docFreqs.set(t, (docFreqs.get(t) ?? 0) + 1);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
const avgDocLen = candidates.length > 0 ? totalLen / candidates.length : 0;
|
|
102
|
+
return { docFreqs, avgDocLen, docLens };
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* BM25 score for `queryTokens` against a document. Uses an IDF floor
|
|
106
|
+
* `log(1 + 1/N)` so terms appearing in every candidate still contribute a
|
|
107
|
+
* small positive score instead of zero — PRD §M6b "BM25-on-small-corpus
|
|
108
|
+
* caveat".
|
|
109
|
+
*/
|
|
110
|
+
export function bm25Score(queryTokens, docTokens, docFreqs, N, avgDocLen) {
|
|
111
|
+
if (queryTokens.length === 0 || docTokens.length === 0 || N === 0)
|
|
112
|
+
return 0;
|
|
113
|
+
const docLen = docTokens.length;
|
|
114
|
+
const idfFloor = Math.log(1 + 1 / Math.max(1, N));
|
|
115
|
+
// Term-frequency in the document.
|
|
116
|
+
const tf = new Map();
|
|
117
|
+
for (const t of docTokens)
|
|
118
|
+
tf.set(t, (tf.get(t) ?? 0) + 1);
|
|
119
|
+
let score = 0;
|
|
120
|
+
const seenInQuery = new Set();
|
|
121
|
+
for (const q of queryTokens) {
|
|
122
|
+
if (seenInQuery.has(q))
|
|
123
|
+
continue;
|
|
124
|
+
seenInQuery.add(q);
|
|
125
|
+
const f = tf.get(q);
|
|
126
|
+
if (!f)
|
|
127
|
+
continue;
|
|
128
|
+
const df = docFreqs.get(q) ?? 0;
|
|
129
|
+
// Standard Okapi IDF; clamp at the floor so universal terms still count.
|
|
130
|
+
const idfRaw = Math.log((N - df + 0.5) / (df + 0.5) + 1);
|
|
131
|
+
const idf = Math.max(idfFloor, idfRaw);
|
|
132
|
+
const lenNorm = 1 - BM25_B + BM25_B * (docLen / Math.max(1, avgDocLen));
|
|
133
|
+
const tfNorm = (f * (BM25_K1 + 1)) / (f + BM25_K1 * lenNorm);
|
|
134
|
+
score += idf * tfNorm;
|
|
135
|
+
}
|
|
136
|
+
return score;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Exponential recency weight: 1.0 at the newest position, decays e-fold
|
|
140
|
+
* every `RECENCY_HALF_LIFE` positions. `distance` is positions from the
|
|
141
|
+
* newest end of the candidate pool (0 = newest).
|
|
142
|
+
*/
|
|
143
|
+
export function recencyWeight(distance) {
|
|
144
|
+
return Math.exp(-distance / RECENCY_HALF_LIFE);
|
|
145
|
+
}
|
|
146
|
+
function minMaxNormalize(xs) {
|
|
147
|
+
if (xs.length === 0)
|
|
148
|
+
return [];
|
|
149
|
+
let min = Infinity;
|
|
150
|
+
let max = -Infinity;
|
|
151
|
+
for (const x of xs) {
|
|
152
|
+
if (x < min)
|
|
153
|
+
min = x;
|
|
154
|
+
if (x > max)
|
|
155
|
+
max = x;
|
|
156
|
+
}
|
|
157
|
+
const spread = max - min;
|
|
158
|
+
if (spread < 1e-9)
|
|
159
|
+
return xs.map(() => 0.5);
|
|
160
|
+
return xs.map((x) => (x - min) / spread);
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Select the most relevant subset of `candidates` for the current prefix.
|
|
164
|
+
* `candidates` should be newest-first (index 0 = newest). Returns selected
|
|
165
|
+
* entries in their original branch order (oldest-first of those selected)
|
|
166
|
+
* for natural prompt rendering.
|
|
167
|
+
*/
|
|
168
|
+
export function selectContext(candidates, prefix, opts = {}) {
|
|
169
|
+
const maxScan = Math.max(0, opts.maxScan ?? DEFAULT_MAX_SCAN);
|
|
170
|
+
const maxSelected = Math.max(0, opts.maxSelected ?? DEFAULT_MAX_SELECTED);
|
|
171
|
+
const maxChars = Math.max(0, opts.maxChars ?? DEFAULT_MAX_CHARS);
|
|
172
|
+
const bm25WeightRaw = Math.min(1, Math.max(0, opts.bm25Weight ?? DEFAULT_BM25_WEIGHT));
|
|
173
|
+
const editLocalityWeightRaw = Math.min(1, Math.max(0, opts.editLocalityWeight ?? DEFAULT_EDIT_LOCALITY_WEIGHT));
|
|
174
|
+
// Clamp the sum at 1 so recency coefficient never goes negative. If the
|
|
175
|
+
// caller asks for bm25=0.7 + editLocality=0.5, scale both proportionally.
|
|
176
|
+
const sum = bm25WeightRaw + editLocalityWeightRaw;
|
|
177
|
+
const scale = sum > 1 ? 1 / sum : 1;
|
|
178
|
+
const bm25Weight = bm25WeightRaw * scale;
|
|
179
|
+
const editLocalityWeight = editLocalityWeightRaw * scale;
|
|
180
|
+
const recencyWeightCoef = 1 - bm25Weight - editLocalityWeight;
|
|
181
|
+
// Normalize editTokens to lowercase to align with the selector's tokenize.
|
|
182
|
+
// Edit-history tokens preserve identifier case (code identifiers are
|
|
183
|
+
// case-sensitive); context-selector lowercases (prose tokens). Compare
|
|
184
|
+
// post-normalization so the two spaces meet.
|
|
185
|
+
const editTokens = opts.editTokens
|
|
186
|
+
? new Set(Array.from(opts.editTokens, (t) => t.toLowerCase()))
|
|
187
|
+
: undefined;
|
|
188
|
+
const editLocalityActive = editLocalityWeight > 0 && editTokens && editTokens.size > 0;
|
|
189
|
+
const scanned = candidates.slice(0, maxScan);
|
|
190
|
+
if (scanned.length === 0 || maxSelected === 0) {
|
|
191
|
+
return { candidates: [], scannedCount: 0, selectedCount: 0, totalChars: 0 };
|
|
192
|
+
}
|
|
193
|
+
const queryTokens = tokenize(prefix);
|
|
194
|
+
const { docFreqs, avgDocLen } = computeDocFreqs(scanned);
|
|
195
|
+
// Per-candidate raw scores.
|
|
196
|
+
const recencyRaw = scanned.map((_, i) => recencyWeight(i));
|
|
197
|
+
const docTokens = scanned.map((c) => tokenize(c.text));
|
|
198
|
+
const bm25Raw = docTokens.map((toks) => bm25Score(queryTokens, toks, docFreqs, scanned.length, avgDocLen));
|
|
199
|
+
const editLocalityRaw = editLocalityActive
|
|
200
|
+
? docTokens.map((toks) => (toks.some((t) => editTokens.has(t)) ? 1 : 0))
|
|
201
|
+
: scanned.map(() => 0);
|
|
202
|
+
const recencyNorm = minMaxNormalize(recencyRaw);
|
|
203
|
+
const bm25Norm = minMaxNormalize(bm25Raw);
|
|
204
|
+
// editLocality is already in {0, 1} — skip normalization.
|
|
205
|
+
const combined = scanned.map((c, i) => ({
|
|
206
|
+
candidate: c,
|
|
207
|
+
score: recencyWeightCoef * recencyNorm[i] +
|
|
208
|
+
bm25Weight * bm25Norm[i] +
|
|
209
|
+
editLocalityWeight * editLocalityRaw[i],
|
|
210
|
+
// Carry the newest-first index for ordering selected entries back into
|
|
211
|
+
// chronological order at the end.
|
|
212
|
+
index: i,
|
|
213
|
+
}));
|
|
214
|
+
// Top-N by score; ties broken by recency (lower index = newer).
|
|
215
|
+
combined.sort((a, b) => {
|
|
216
|
+
const ds = b.score - a.score;
|
|
217
|
+
if (Math.abs(ds) > 1e-9)
|
|
218
|
+
return ds;
|
|
219
|
+
return a.index - b.index;
|
|
220
|
+
});
|
|
221
|
+
const topN = combined.slice(0, maxSelected);
|
|
222
|
+
// Char-budget enforcement (PRD §M6b: "drop lowest-recency tail").
|
|
223
|
+
// Sort newest-first then greedily fill — once the budget would be
|
|
224
|
+
// exceeded, stop. This gives priority to newer entries, which matches
|
|
225
|
+
// PRD's "drop lowest-recency tail" intent.
|
|
226
|
+
//
|
|
227
|
+
// Edge case: the very first (newest) entry's `len` may exceed `maxChars`
|
|
228
|
+
// on its own. We still keep it (the alternative is no context at all),
|
|
229
|
+
// even though `totalChars` then exceeds the budget. This is a documented
|
|
230
|
+
// best-effort policy — a future revision could truncate such entries
|
|
231
|
+
// mid-text, but that risks splitting mid-token.
|
|
232
|
+
topN.sort((a, b) => a.index - b.index);
|
|
233
|
+
let totalChars = 0;
|
|
234
|
+
const kept = [];
|
|
235
|
+
for (const c of topN) {
|
|
236
|
+
const len = c.candidate.text.length;
|
|
237
|
+
if (totalChars + len > maxChars && kept.length > 0) {
|
|
238
|
+
break;
|
|
239
|
+
}
|
|
240
|
+
totalChars += len;
|
|
241
|
+
kept.push(c);
|
|
242
|
+
}
|
|
243
|
+
// Render oldest-first for natural prompt rendering (newest at the end).
|
|
244
|
+
kept.sort((a, b) => b.index - a.index);
|
|
245
|
+
return {
|
|
246
|
+
candidates: kept.map((k) => k.candidate),
|
|
247
|
+
scannedCount: scanned.length,
|
|
248
|
+
selectedCount: kept.length,
|
|
249
|
+
totalChars,
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Parse `PI_GHOST_CONTEXT_BM25_WEIGHT`. Returns fallback on bad input or
|
|
254
|
+
* outside [0, 1].
|
|
255
|
+
*/
|
|
256
|
+
export function parseBm25WeightEnv(raw) {
|
|
257
|
+
if (raw === undefined)
|
|
258
|
+
return DEFAULT_BM25_WEIGHT;
|
|
259
|
+
const v = Number(raw);
|
|
260
|
+
if (!Number.isFinite(v) || v < 0 || v > 1)
|
|
261
|
+
return DEFAULT_BM25_WEIGHT;
|
|
262
|
+
return v;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Parse `PI_GHOST_CONTEXT_EDIT_LOCALITY_WEIGHT`. Returns 0 (no-op) on bad
|
|
266
|
+
* input or outside [0, 1]. Enhancement #1.
|
|
267
|
+
*/
|
|
268
|
+
export function parseEditLocalityWeightEnv(raw) {
|
|
269
|
+
if (raw === undefined)
|
|
270
|
+
return DEFAULT_EDIT_LOCALITY_WEIGHT;
|
|
271
|
+
const v = Number(raw);
|
|
272
|
+
if (!Number.isFinite(v) || v < 0 || v > 1)
|
|
273
|
+
return DEFAULT_EDIT_LOCALITY_WEIGHT;
|
|
274
|
+
return v;
|
|
275
|
+
}
|
|
276
|
+
function numEnv(name, fallback, min = 0, max = Number.POSITIVE_INFINITY) {
|
|
277
|
+
const raw = process.env[name];
|
|
278
|
+
if (!raw)
|
|
279
|
+
return fallback;
|
|
280
|
+
const v = Number(raw);
|
|
281
|
+
if (!Number.isFinite(v) || v < min || v > max)
|
|
282
|
+
return fallback;
|
|
283
|
+
return Math.floor(v);
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Build a `ContextSelectorOpts` from the documented env knobs (PRD §M6d).
|
|
287
|
+
* Returns a defaulted opts object. `editTokens` is omitted — the caller
|
|
288
|
+
* must inject the live edit-history token set on each call (env can only
|
|
289
|
+
* configure the weight, not the dynamic data).
|
|
290
|
+
*/
|
|
291
|
+
export function readContextEnv() {
|
|
292
|
+
return {
|
|
293
|
+
maxScan: numEnv("PI_GHOST_CONTEXT_MAX_SCAN", DEFAULT_MAX_SCAN, 0),
|
|
294
|
+
maxSelected: numEnv("PI_GHOST_CONTEXT_MAX_SELECTED", DEFAULT_MAX_SELECTED, 0),
|
|
295
|
+
maxChars: numEnv("PI_GHOST_CONTEXT_MAX_CHARS", DEFAULT_MAX_CHARS, 0),
|
|
296
|
+
bm25Weight: parseBm25WeightEnv(process.env.PI_GHOST_CONTEXT_BM25_WEIGHT),
|
|
297
|
+
editLocalityWeight: parseEditLocalityWeightEnv(process.env.PI_GHOST_CONTEXT_EDIT_LOCALITY_WEIGHT),
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
//# sourceMappingURL=context-selector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-selector.js","sourceRoot":"","sources":["../src/context-selector.ts"],"names":[],"mappings":"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"}
|