@kenkaiiii/ggcoder 5.30.3 → 5.32.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/app-sidecar.js +40 -0
- package/dist/app-sidecar.js.map +1 -1
- package/dist/core/agent-session-compaction.test.js +36 -1
- package/dist/core/agent-session-compaction.test.js.map +1 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +41 -12
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/compaction/compactor.d.ts +10 -0
- package/dist/core/compaction/compactor.d.ts.map +1 -1
- package/dist/core/compaction/compactor.js +31 -2
- package/dist/core/compaction/compactor.js.map +1 -1
- package/dist/core/compaction/compactor.test.js +32 -0
- package/dist/core/compaction/compactor.test.js.map +1 -1
- package/dist/core/compaction/query-aware-selector.d.ts +33 -0
- package/dist/core/compaction/query-aware-selector.d.ts.map +1 -0
- package/dist/core/compaction/query-aware-selector.js +202 -0
- package/dist/core/compaction/query-aware-selector.js.map +1 -0
- package/dist/core/compaction/query-aware-selector.test.d.ts +2 -0
- package/dist/core/compaction/query-aware-selector.test.d.ts.map +1 -0
- package/dist/core/compaction/query-aware-selector.test.js +96 -0
- package/dist/core/compaction/query-aware-selector.test.js.map +1 -0
- package/dist/core/event-bus.d.ts +6 -0
- package/dist/core/event-bus.d.ts.map +1 -1
- package/dist/core/event-bus.js.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +28 -8
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/plugin-bundles.d.ts +23 -0
- package/dist/core/extensions/plugin-bundles.d.ts.map +1 -0
- package/dist/core/extensions/plugin-bundles.js +228 -0
- package/dist/core/extensions/plugin-bundles.js.map +1 -0
- package/dist/core/extensions/plugin-bundles.test.d.ts +2 -0
- package/dist/core/extensions/plugin-bundles.test.d.ts.map +1 -0
- package/dist/core/extensions/plugin-bundles.test.js +110 -0
- package/dist/core/extensions/plugin-bundles.test.js.map +1 -0
- package/dist/core/ken-context.d.ts.map +1 -1
- package/dist/core/ken-context.js +8 -0
- package/dist/core/ken-context.js.map +1 -1
- package/dist/core/ken-context.test.js +40 -0
- package/dist/core/ken-context.test.js.map +1 -1
- package/dist/core/ken-prompt.js +3 -0
- package/dist/core/ken-prompt.js.map +1 -1
- package/dist/core/ken-prompt.test.js +5 -0
- package/dist/core/ken-prompt.test.js.map +1 -1
- package/dist/core/persistent-shell.d.ts +3 -2
- package/dist/core/persistent-shell.d.ts.map +1 -1
- package/dist/core/persistent-shell.js +6 -2
- package/dist/core/persistent-shell.js.map +1 -1
- package/dist/core/process-manager.d.ts +2 -1
- package/dist/core/process-manager.d.ts.map +1 -1
- package/dist/core/process-manager.js +2 -2
- package/dist/core/process-manager.js.map +1 -1
- package/dist/core/sandbox-domains.d.ts +14 -0
- package/dist/core/sandbox-domains.d.ts.map +1 -0
- package/dist/core/sandbox-domains.js +76 -0
- package/dist/core/sandbox-domains.js.map +1 -0
- package/dist/core/sandbox-feedback.d.ts +22 -0
- package/dist/core/sandbox-feedback.d.ts.map +1 -0
- package/dist/core/sandbox-feedback.js +69 -0
- package/dist/core/sandbox-feedback.js.map +1 -0
- package/dist/core/sandbox-feedback.test.d.ts +2 -0
- package/dist/core/sandbox-feedback.test.d.ts.map +1 -0
- package/dist/core/sandbox-feedback.test.js +32 -0
- package/dist/core/sandbox-feedback.test.js.map +1 -0
- package/dist/core/sandbox.d.ts +91 -0
- package/dist/core/sandbox.d.ts.map +1 -0
- package/dist/core/sandbox.js +254 -0
- package/dist/core/sandbox.js.map +1 -0
- package/dist/core/sandbox.test.d.ts +2 -0
- package/dist/core/sandbox.test.d.ts.map +1 -0
- package/dist/core/sandbox.test.js +157 -0
- package/dist/core/sandbox.test.js.map +1 -0
- package/dist/core/settings-manager.d.ts +5 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +20 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/verification-evidence.d.ts +17 -0
- package/dist/core/verification-evidence.d.ts.map +1 -0
- package/dist/core/verification-evidence.js +283 -0
- package/dist/core/verification-evidence.js.map +1 -0
- package/dist/core/verification-evidence.test.d.ts +2 -0
- package/dist/core/verification-evidence.test.d.ts.map +1 -0
- package/dist/core/verification-evidence.test.js +103 -0
- package/dist/core/verification-evidence.test.js.map +1 -0
- package/dist/modes/acp-mode.d.ts +13 -0
- package/dist/modes/acp-mode.d.ts.map +1 -1
- package/dist/modes/acp-mode.js +101 -0
- package/dist/modes/acp-mode.js.map +1 -1
- package/dist/modes/acp-mode.test.js +80 -9
- package/dist/modes/acp-mode.test.js.map +1 -1
- package/dist/tools/bash.d.ts +2 -1
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +54 -16
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +1 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/read-only-bash.d.ts +3 -0
- package/dist/tools/read-only-bash.d.ts.map +1 -1
- package/dist/tools/read-only-bash.js +7 -9
- package/dist/tools/read-only-bash.js.map +1 -1
- package/package.json +6 -5
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { estimateMessageTokens } from "./token-estimator.js";
|
|
2
|
+
const STOP_WORDS = new Set([
|
|
3
|
+
"about",
|
|
4
|
+
"after",
|
|
5
|
+
"again",
|
|
6
|
+
"also",
|
|
7
|
+
"and",
|
|
8
|
+
"are",
|
|
9
|
+
"but",
|
|
10
|
+
"can",
|
|
11
|
+
"continue",
|
|
12
|
+
"could",
|
|
13
|
+
"does",
|
|
14
|
+
"for",
|
|
15
|
+
"from",
|
|
16
|
+
"have",
|
|
17
|
+
"implement",
|
|
18
|
+
"into",
|
|
19
|
+
"item",
|
|
20
|
+
"just",
|
|
21
|
+
"next",
|
|
22
|
+
"please",
|
|
23
|
+
"should",
|
|
24
|
+
"that",
|
|
25
|
+
"the",
|
|
26
|
+
"then",
|
|
27
|
+
"this",
|
|
28
|
+
"was",
|
|
29
|
+
"what",
|
|
30
|
+
"when",
|
|
31
|
+
"where",
|
|
32
|
+
"which",
|
|
33
|
+
"with",
|
|
34
|
+
"would",
|
|
35
|
+
"you",
|
|
36
|
+
"your",
|
|
37
|
+
]);
|
|
38
|
+
function messageText(message) {
|
|
39
|
+
if (typeof message.content === "string")
|
|
40
|
+
return message.content;
|
|
41
|
+
if (!Array.isArray(message.content))
|
|
42
|
+
return "";
|
|
43
|
+
const chunks = [];
|
|
44
|
+
for (const part of message.content) {
|
|
45
|
+
if (part.type === "tool_call") {
|
|
46
|
+
chunks.push(part.name, JSON.stringify(part.args));
|
|
47
|
+
}
|
|
48
|
+
else if (part.type === "tool_result") {
|
|
49
|
+
if (typeof part.content === "string")
|
|
50
|
+
chunks.push(part.content);
|
|
51
|
+
else
|
|
52
|
+
chunks.push(...part.content.filter((block) => block.type === "text").map((block) => block.text));
|
|
53
|
+
}
|
|
54
|
+
else if ("text" in part && typeof part.text === "string") {
|
|
55
|
+
chunks.push(part.text);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return chunks.join("\n");
|
|
59
|
+
}
|
|
60
|
+
export function tokenizeRetrievalText(text) {
|
|
61
|
+
const matches = text.toLowerCase().match(/[\p{L}\p{N}_./:@-]{2,}/gu) ?? [];
|
|
62
|
+
return matches
|
|
63
|
+
.map((token) => token.replace(/^[./:@-]+|[.,:;!?]+$/g, ""))
|
|
64
|
+
.filter((token) => token.length >= 2 && !STOP_WORDS.has(token));
|
|
65
|
+
}
|
|
66
|
+
/** Latest genuine human request; runtime continuation/control messages never become the query. */
|
|
67
|
+
export function findLatestHumanQuery(messages) {
|
|
68
|
+
for (let index = messages.length - 1; index >= 0; index--) {
|
|
69
|
+
const message = messages[index];
|
|
70
|
+
if (message.role !== "user")
|
|
71
|
+
continue;
|
|
72
|
+
if (message.provenance && message.provenance.source !== "human")
|
|
73
|
+
continue;
|
|
74
|
+
const text = messageText(message).trim();
|
|
75
|
+
if (text && !text.startsWith("[Runtime fact:"))
|
|
76
|
+
return text;
|
|
77
|
+
}
|
|
78
|
+
return "";
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Deterministic lexical retriever. Rare identifiers, file paths and exact terms
|
|
82
|
+
* naturally receive more weight through inverse document frequency.
|
|
83
|
+
*/
|
|
84
|
+
export const rankMessagesByQuery = (messages, query) => {
|
|
85
|
+
const queryTerms = [...new Set(tokenizeRetrievalText(query))];
|
|
86
|
+
if (queryTerms.length === 0)
|
|
87
|
+
return [];
|
|
88
|
+
const documentTerms = messages.map((message) => new Set(tokenizeRetrievalText(messageText(message))));
|
|
89
|
+
const documentFrequency = new Map();
|
|
90
|
+
for (const terms of documentTerms) {
|
|
91
|
+
for (const term of queryTerms) {
|
|
92
|
+
if (terms.has(term))
|
|
93
|
+
documentFrequency.set(term, (documentFrequency.get(term) ?? 0) + 1);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const baseScores = messages.map((message, index) => {
|
|
97
|
+
let score = 0;
|
|
98
|
+
for (const term of queryTerms) {
|
|
99
|
+
if (!documentTerms[index].has(term))
|
|
100
|
+
continue;
|
|
101
|
+
const frequency = documentFrequency.get(term) ?? 0;
|
|
102
|
+
const inverseFrequency = Math.log((messages.length + 1) / (frequency + 1)) + 1;
|
|
103
|
+
const entityBoost = /[./_:@-]/.test(term) || term.length >= 8 ? 2 : 1;
|
|
104
|
+
score += inverseFrequency * entityBoost;
|
|
105
|
+
}
|
|
106
|
+
if (score > 0 && message.role === "user")
|
|
107
|
+
score += 0.5;
|
|
108
|
+
return score;
|
|
109
|
+
});
|
|
110
|
+
// Carry a smaller score to neighboring turns so selected evidence keeps the
|
|
111
|
+
// question/answer or tool-result dependency that gives it meaning.
|
|
112
|
+
const scores = [...baseScores];
|
|
113
|
+
for (let index = 0; index < baseScores.length; index++) {
|
|
114
|
+
if (baseScores[index] <= 0)
|
|
115
|
+
continue;
|
|
116
|
+
if (index > 0)
|
|
117
|
+
scores[index - 1] = Math.max(scores[index - 1], baseScores[index] * 0.25);
|
|
118
|
+
if (index + 1 < scores.length) {
|
|
119
|
+
scores[index + 1] = Math.max(scores[index + 1], baseScores[index] * 0.25);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return scores
|
|
123
|
+
.map((score, index) => ({ index, score }))
|
|
124
|
+
.filter(({ score }) => score > 0)
|
|
125
|
+
.sort((left, right) => right.score - left.score || right.index - left.index);
|
|
126
|
+
};
|
|
127
|
+
function fallbackResult(messages, tokenBudget, fallback, fallbackReason, queryTerms) {
|
|
128
|
+
const selected = fallback(messages, tokenBudget);
|
|
129
|
+
return {
|
|
130
|
+
messages: selected,
|
|
131
|
+
strategy: "fallback",
|
|
132
|
+
selectedTokens: selected.reduce((sum, message) => sum + estimateMessageTokens(message), 0),
|
|
133
|
+
droppedMessages: messages.length - selected.length,
|
|
134
|
+
queryTerms,
|
|
135
|
+
fallbackReason,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Select query-relevant context under a hard token budget. Retrieval is
|
|
140
|
+
* replaceable; invalid output or exceptions deterministically use the existing
|
|
141
|
+
* recency selector instead of breaking compaction.
|
|
142
|
+
*/
|
|
143
|
+
export function selectQueryAwareContext(messages, query, tokenBudget, options) {
|
|
144
|
+
const normalizedBudget = Math.max(0, Math.floor(tokenBudget));
|
|
145
|
+
const queryTerms = new Set(tokenizeRetrievalText(query)).size;
|
|
146
|
+
if (queryTerms === 0) {
|
|
147
|
+
return fallbackResult(messages, normalizedBudget, options.fallback, "empty_query", queryTerms);
|
|
148
|
+
}
|
|
149
|
+
let ranking;
|
|
150
|
+
try {
|
|
151
|
+
ranking = (options.retrieve ?? rankMessagesByQuery)(messages, query);
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
return fallbackResult(messages, normalizedBudget, options.fallback, "retrieval_failed", queryTerms);
|
|
155
|
+
}
|
|
156
|
+
const seen = new Set();
|
|
157
|
+
for (const { index, score } of ranking) {
|
|
158
|
+
const invalid = !Number.isInteger(index) ||
|
|
159
|
+
index < 0 ||
|
|
160
|
+
index >= messages.length ||
|
|
161
|
+
!Number.isFinite(score) ||
|
|
162
|
+
score <= 0 ||
|
|
163
|
+
seen.has(index);
|
|
164
|
+
if (invalid) {
|
|
165
|
+
return fallbackResult(messages, normalizedBudget, options.fallback, "invalid_ranking", queryTerms);
|
|
166
|
+
}
|
|
167
|
+
seen.add(index);
|
|
168
|
+
}
|
|
169
|
+
if (ranking.length === 0) {
|
|
170
|
+
return fallbackResult(messages, normalizedBudget, options.fallback, "no_relevant_messages", queryTerms);
|
|
171
|
+
}
|
|
172
|
+
const selected = new Set();
|
|
173
|
+
let selectedTokens = 0;
|
|
174
|
+
const trySelect = (index) => {
|
|
175
|
+
if (selected.has(index))
|
|
176
|
+
return;
|
|
177
|
+
const tokens = estimateMessageTokens(messages[index]);
|
|
178
|
+
if (selectedTokens + tokens > normalizedBudget)
|
|
179
|
+
return;
|
|
180
|
+
selected.add(index);
|
|
181
|
+
selectedTokens += tokens;
|
|
182
|
+
};
|
|
183
|
+
// Preserve the original goal when it fits, matching the existing selector's
|
|
184
|
+
// pinning behavior before relevance gets the remaining budget.
|
|
185
|
+
const earliestUser = messages.findIndex((message) => message.role === "user");
|
|
186
|
+
if (earliestUser >= 0)
|
|
187
|
+
trySelect(earliestUser);
|
|
188
|
+
for (const candidate of ranking)
|
|
189
|
+
trySelect(candidate.index);
|
|
190
|
+
// Spend unused budget on recent context, preserving deterministic behavior
|
|
191
|
+
// when relevance alone does not fill the window.
|
|
192
|
+
for (let index = messages.length - 1; index >= 0; index--)
|
|
193
|
+
trySelect(index);
|
|
194
|
+
return {
|
|
195
|
+
messages: messages.filter((_message, index) => selected.has(index)),
|
|
196
|
+
strategy: "query_aware",
|
|
197
|
+
selectedTokens,
|
|
198
|
+
droppedMessages: messages.length - selected.size,
|
|
199
|
+
queryTerms,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=query-aware-selector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-aware-selector.js","sourceRoot":"","sources":["../../../src/core/compaction/query-aware-selector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-aware-selector.test.d.ts","sourceRoot":"","sources":["../../../src/core/compaction/query-aware-selector.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { selectMessagesInBudget } from "./compactor.js";
|
|
3
|
+
import { estimateConversationTokens } from "./token-estimator.js";
|
|
4
|
+
import { findLatestHumanQuery, selectQueryAwareContext } from "./query-aware-selector.js";
|
|
5
|
+
function message(role, content) {
|
|
6
|
+
return { role, content };
|
|
7
|
+
}
|
|
8
|
+
describe("selectQueryAwareContext", () => {
|
|
9
|
+
it("keeps older evidence relevant to the latest request ahead of unrelated recent context", () => {
|
|
10
|
+
const messages = [
|
|
11
|
+
message("user", "Build the account settings flow."),
|
|
12
|
+
message("assistant", "AuthService validates the OAuth callback verifier in src/auth/callback.ts."),
|
|
13
|
+
message("assistant", "Adjusted unrelated dashboard colors and spacing."),
|
|
14
|
+
message("user", "Fix the OAuth callback verifier mismatch in AuthService."),
|
|
15
|
+
];
|
|
16
|
+
const budget = estimateConversationTokens([messages[0], messages[1], messages[3]]);
|
|
17
|
+
const result = selectQueryAwareContext(messages, "Fix the OAuth callback verifier mismatch in AuthService.", budget, { fallback: selectMessagesInBudget });
|
|
18
|
+
expect(result.strategy).toBe("query_aware");
|
|
19
|
+
expect(result.messages).toEqual([messages[0], messages[1], messages[3]]);
|
|
20
|
+
expect(result.messages).not.toContain(messages[2]);
|
|
21
|
+
});
|
|
22
|
+
it("never exceeds the hard token budget", () => {
|
|
23
|
+
const messages = [
|
|
24
|
+
message("user", `Original request ${"a".repeat(1_000)}`),
|
|
25
|
+
message("assistant", `OAuth callback evidence ${"b".repeat(1_000)}`),
|
|
26
|
+
message("assistant", `OAuth verifier definition ${"c".repeat(1_000)}`),
|
|
27
|
+
message("user", "Investigate the OAuth verifier."),
|
|
28
|
+
];
|
|
29
|
+
const budget = 320;
|
|
30
|
+
const result = selectQueryAwareContext(messages, "Investigate the OAuth verifier.", budget, {
|
|
31
|
+
fallback: selectMessagesInBudget,
|
|
32
|
+
});
|
|
33
|
+
expect(result.selectedTokens).toBeLessThanOrEqual(budget);
|
|
34
|
+
expect(estimateConversationTokens(result.messages)).toBeLessThanOrEqual(budget);
|
|
35
|
+
});
|
|
36
|
+
it("uses the existing selector deterministically when the query has no signal", () => {
|
|
37
|
+
const messages = [
|
|
38
|
+
message("user", "first"),
|
|
39
|
+
message("assistant", "middle"),
|
|
40
|
+
message("user", "latest"),
|
|
41
|
+
];
|
|
42
|
+
const fallback = vi.fn(selectMessagesInBudget);
|
|
43
|
+
const first = selectQueryAwareContext(messages, "please continue", 100, { fallback });
|
|
44
|
+
const second = selectQueryAwareContext(messages, "please continue", 100, { fallback });
|
|
45
|
+
expect(first).toEqual(second);
|
|
46
|
+
expect(first).toMatchObject({ strategy: "fallback", fallbackReason: "empty_query" });
|
|
47
|
+
expect(first.messages).toEqual(selectMessagesInBudget(messages, 100));
|
|
48
|
+
expect(fallback).toHaveBeenCalledTimes(2);
|
|
49
|
+
});
|
|
50
|
+
it("falls back without throwing when retrieval fails or returns invalid rankings", () => {
|
|
51
|
+
const messages = [
|
|
52
|
+
message("user", "Original OAuth request"),
|
|
53
|
+
message("assistant", "OAuth implementation evidence"),
|
|
54
|
+
message("user", "Fix OAuth verifier"),
|
|
55
|
+
];
|
|
56
|
+
const expected = selectMessagesInBudget(messages, 100);
|
|
57
|
+
const failed = selectQueryAwareContext(messages, "Fix OAuth verifier", 100, {
|
|
58
|
+
fallback: selectMessagesInBudget,
|
|
59
|
+
retrieve: () => {
|
|
60
|
+
throw new Error("retriever unavailable");
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
const invalid = selectQueryAwareContext(messages, "Fix OAuth verifier", 100, {
|
|
64
|
+
fallback: selectMessagesInBudget,
|
|
65
|
+
retrieve: () => [{ index: 99, score: 1 }],
|
|
66
|
+
});
|
|
67
|
+
expect(failed).toMatchObject({
|
|
68
|
+
strategy: "fallback",
|
|
69
|
+
fallbackReason: "retrieval_failed",
|
|
70
|
+
messages: expected,
|
|
71
|
+
});
|
|
72
|
+
expect(invalid).toMatchObject({
|
|
73
|
+
strategy: "fallback",
|
|
74
|
+
fallbackReason: "invalid_ranking",
|
|
75
|
+
messages: expected,
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
describe("findLatestHumanQuery", () => {
|
|
80
|
+
it("ignores runtime continuation messages", () => {
|
|
81
|
+
const messages = [
|
|
82
|
+
{
|
|
83
|
+
role: "user",
|
|
84
|
+
content: "Fix the OAuth verifier",
|
|
85
|
+
provenance: { source: "human", kind: "prompt", visibility: "transcript" },
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
role: "user",
|
|
89
|
+
content: "Continue after compaction",
|
|
90
|
+
provenance: { source: "runtime", kind: "continuation", visibility: "hidden" },
|
|
91
|
+
},
|
|
92
|
+
];
|
|
93
|
+
expect(findLatestHumanQuery(messages)).toBe("Fix the OAuth verifier");
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
//# sourceMappingURL=query-aware-selector.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-aware-selector.test.js","sourceRoot":"","sources":["../../../src/core/compaction/query-aware-selector.test.ts"],"names":[],"mappings":"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"}
|
package/dist/core/event-bus.d.ts
CHANGED
|
@@ -102,6 +102,12 @@ export interface BusEventMap {
|
|
|
102
102
|
compacted: boolean;
|
|
103
103
|
originalCount: number;
|
|
104
104
|
newCount: number;
|
|
105
|
+
selectionStrategy?: "query_aware" | "fallback";
|
|
106
|
+
selectedMessages?: number;
|
|
107
|
+
selectedTokens?: number;
|
|
108
|
+
droppedMessages?: number;
|
|
109
|
+
queryTerms?: number;
|
|
110
|
+
selectionFallback?: string;
|
|
105
111
|
};
|
|
106
112
|
branch_created: {
|
|
107
113
|
leafId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../../src/core/event-bus.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../../src/core/event-bus.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-bus.js","sourceRoot":"","sources":["../../src/core/event-bus.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"event-bus.js","sourceRoot":"","sources":["../../src/core/event-bus.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAoB,MAAM,YAAY,CAAC;AAGhF,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAmB;IAE3B,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAuD9E,SAAS,IAAI,SAAS,EAAE;IAIlB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;CAUrC"}
|
|
@@ -1,24 +1,44 @@
|
|
|
1
1
|
import fs from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
|
+
import { pathToFileURL } from "node:url";
|
|
4
|
+
import { readPluginManifest, validatePluginPath } from "./plugin-bundles.js";
|
|
3
5
|
export class ExtensionLoader {
|
|
4
6
|
loaded = [];
|
|
5
7
|
async loadAll(extensionsDir, context) {
|
|
6
|
-
let
|
|
8
|
+
let entries;
|
|
7
9
|
try {
|
|
8
|
-
|
|
10
|
+
entries = await fs.readdir(extensionsDir, { withFileTypes: true });
|
|
9
11
|
}
|
|
10
12
|
catch {
|
|
11
13
|
return;
|
|
12
14
|
}
|
|
13
|
-
for (const
|
|
14
|
-
|
|
15
|
+
for (const entry of entries.sort((left, right) => left.name.localeCompare(right.name))) {
|
|
16
|
+
let filePath = null;
|
|
17
|
+
if (entry.isFile() && entry.name.endsWith(".js")) {
|
|
18
|
+
// Backward-compatible flat extension format.
|
|
19
|
+
filePath = path.join(extensionsDir, entry.name);
|
|
20
|
+
}
|
|
21
|
+
else if (entry.isDirectory() && !entry.name.startsWith(".")) {
|
|
22
|
+
try {
|
|
23
|
+
const pluginDir = path.join(extensionsDir, entry.name);
|
|
24
|
+
const manifest = await readPluginManifest(pluginDir);
|
|
25
|
+
if (manifest.id !== entry.name) {
|
|
26
|
+
throw new Error("Plugin id must match its install directory");
|
|
27
|
+
}
|
|
28
|
+
const entryPath = validatePluginPath(manifest.entry);
|
|
29
|
+
filePath = path.join(pluginDir, ...entryPath.split("/"));
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
console.error(`Failed to validate plugin ${entry.name}: ${err instanceof Error ? err.message : String(err)}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (!filePath)
|
|
15
36
|
continue;
|
|
16
|
-
const filePath = path.join(extensionsDir, file);
|
|
17
37
|
try {
|
|
18
|
-
const mod = await import(filePath);
|
|
38
|
+
const mod = await import(pathToFileURL(filePath).href);
|
|
19
39
|
const factory = typeof mod.default === "function" ? mod.default : mod.createExtension;
|
|
20
40
|
if (typeof factory !== "function") {
|
|
21
|
-
console.error(`Extension ${
|
|
41
|
+
console.error(`Extension ${entry.name}: no default export or createExtension function`);
|
|
22
42
|
continue;
|
|
23
43
|
}
|
|
24
44
|
const extension = factory();
|
|
@@ -26,7 +46,7 @@ export class ExtensionLoader {
|
|
|
26
46
|
this.loaded.push(extension);
|
|
27
47
|
}
|
|
28
48
|
catch (err) {
|
|
29
|
-
console.error(`Failed to load extension ${
|
|
49
|
+
console.error(`Failed to load extension ${entry.name}: ${err instanceof Error ? err.message : String(err)}`);
|
|
30
50
|
}
|
|
31
51
|
}
|
|
32
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/core/extensions/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/core/extensions/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE7E,MAAM,OAAO,eAAe;IAClB,MAAM,GAAgB,EAAE,CAAC;IAEjC,KAAK,CAAC,OAAO,CAAC,aAAqB,EAAE,OAAyB;QAC5D,IAAI,OAAO,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACrE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACvF,IAAI,QAAQ,GAAkB,IAAI,CAAC;YACnC,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjD,6CAA6C;gBAC7C,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAClD,CAAC;iBAAM,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9D,IAAI,CAAC;oBACH,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;oBACvD,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,SAAS,CAAC,CAAC;oBACrD,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;wBAC/B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;oBAChE,CAAC;oBACD,MAAM,SAAS,GAAG,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBACrD,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC3D,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,KAAK,CACX,6BAA6B,KAAK,CAAC,IAAI,KACrC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CACjD,EAAE,CACH,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,IAAI,CAAC,QAAQ;gBAAE,SAAS;YAExB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;gBACvD,MAAM,OAAO,GACX,OAAO,GAAG,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC;gBAExE,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;oBAClC,OAAO,CAAC,KAAK,CAAC,aAAa,KAAK,CAAC,IAAI,iDAAiD,CAAC,CAAC;oBACxF,SAAS;gBACX,CAAC;gBAED,MAAM,SAAS,GAAG,OAAO,EAAE,CAAC;gBAC5B,MAAM,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAClC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CACX,4BAA4B,KAAK,CAAC,IAAI,KACpC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CACjD,EAAE,CACH,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,SAAS;QACP,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC;YAC3B,CAAC;YAAC,MAAM,CAAC;gBACP,6BAA6B;YAC/B,CAAC;QACH,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;CACF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const PluginManifestSchema: z.ZodObject<{
|
|
3
|
+
schemaVersion: z.ZodLiteral<1>;
|
|
4
|
+
id: z.ZodString;
|
|
5
|
+
name: z.ZodString;
|
|
6
|
+
version: z.ZodString;
|
|
7
|
+
entry: z.ZodString;
|
|
8
|
+
description: z.ZodOptional<z.ZodString>;
|
|
9
|
+
commands: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
10
|
+
}, z.core.$strict>;
|
|
11
|
+
export type PluginManifest = z.infer<typeof PluginManifestSchema>;
|
|
12
|
+
export interface InstalledPlugin extends PluginManifest {
|
|
13
|
+
installPath: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function validatePluginPath(candidate: string): string;
|
|
16
|
+
export declare function readPluginManifest(pluginDir: string): Promise<PluginManifest>;
|
|
17
|
+
/** Pack a plugin directory into one deterministic, portable .ggplugin JSON artifact. */
|
|
18
|
+
export declare function packPlugin(sourceDir: string, outputFile: string): Promise<PluginManifest>;
|
|
19
|
+
/** Install atomically; an invalid bundle never damages the currently installed version. */
|
|
20
|
+
export declare function installPlugin(bundleFile: string, extensionsDir: string): Promise<InstalledPlugin>;
|
|
21
|
+
export declare function listInstalledPlugins(extensionsDir: string): Promise<InstalledPlugin[]>;
|
|
22
|
+
export declare function removePlugin(id: string, extensionsDir: string): Promise<void>;
|
|
23
|
+
//# sourceMappingURL=plugin-bundles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-bundles.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/plugin-bundles.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAexB,eAAO,MAAM,oBAAoB;;;;;;;;kBAUtB,CAAC;AAEZ,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAqBlE,MAAM,WAAW,eAAgB,SAAQ,cAAc;IACrD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAiB5D;AA0CD,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAGnF;AAED,wFAAwF;AACxF,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAoB/F;AAqCD,2FAA2F;AAC3F,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,eAAe,CAAC,CAgC1B;AAED,wBAAsB,oBAAoB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAqB5F;AAED,wBAAsB,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGnF"}
|