@kenkaiiii/ggcoder 5.67.0 → 5.68.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 +121 -3
- package/dist/app-sidecar.js.map +1 -1
- package/dist/core/agent-session.d.ts +49 -3
- package/dist/core/agent-session.js +305 -22
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/ask-user.d.ts +90 -8
- package/dist/core/ask-user.js +124 -13
- package/dist/core/ask-user.js.map +1 -1
- package/dist/core/autopilot-verdict.d.ts +5 -1
- package/dist/core/autopilot-verdict.js +30 -13
- package/dist/core/autopilot-verdict.js.map +1 -1
- package/dist/core/compaction/plan-step-policy.d.ts +46 -0
- package/dist/core/compaction/plan-step-policy.js +57 -0
- package/dist/core/compaction/plan-step-policy.js.map +1 -0
- package/dist/core/destructive-git-guard.d.ts +63 -0
- package/dist/core/destructive-git-guard.js +831 -0
- package/dist/core/destructive-git-guard.js.map +1 -0
- package/dist/core/event-bus.d.ts +3 -0
- package/dist/core/event-bus.js +5 -0
- package/dist/core/event-bus.js.map +1 -1
- package/dist/core/keep-awake.d.ts +88 -0
- package/dist/core/keep-awake.js +251 -0
- package/dist/core/keep-awake.js.map +1 -0
- package/dist/core/ken-context.d.ts +7 -5
- package/dist/core/ken-context.js +106 -16
- package/dist/core/ken-context.js.map +1 -1
- package/dist/core/ken-prompt.js +24 -21
- package/dist/core/ken-prompt.js.map +1 -1
- package/dist/core/package-threats.d.ts +18 -0
- package/dist/core/package-threats.js +168 -0
- package/dist/core/package-threats.js.map +1 -0
- package/dist/core/session-manager.d.ts +13 -1
- package/dist/core/session-manager.js +38 -18
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-summary-index.d.ts +37 -0
- package/dist/core/session-summary-index.js +172 -0
- package/dist/core/session-summary-index.js.map +1 -0
- package/dist/core/settings-manager.d.ts +2 -0
- package/dist/core/settings-manager.js +8 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/shell-threats-popular-packages.d.ts +11 -0
- package/dist/core/shell-threats-popular-packages.js +675 -0
- package/dist/core/shell-threats-popular-packages.js.map +1 -0
- package/dist/core/shell-threats.d.ts +8 -0
- package/dist/core/shell-threats.js +186 -0
- package/dist/core/shell-threats.js.map +1 -0
- package/dist/core/stream-rules.d.ts +30 -0
- package/dist/core/stream-rules.js +151 -0
- package/dist/core/stream-rules.js.map +1 -0
- package/dist/motion-agent/motion-check-tool.js +60 -29
- package/dist/motion-agent/motion-check-tool.js.map +1 -1
- package/dist/motion-agent/motion-review.d.ts +5 -2
- package/dist/motion-agent/motion-review.js +7 -4
- package/dist/motion-agent/motion-review.js.map +1 -1
- package/dist/tools/ask-user.js +3 -3
- package/dist/tools/ask-user.js.map +1 -1
- package/dist/tools/bash.js +37 -0
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/index.js +1 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/task-send.d.ts +1 -1
- package/dist/tools/task-send.js +15 -1
- package/dist/tools/task-send.js.map +1 -1
- package/dist/ui/components/ActivityIndicator.js +1 -0
- package/dist/ui/components/ActivityIndicator.js.map +1 -1
- package/dist/ui/hooks/useAgentLoop.d.ts +1 -1
- package/dist/ui/hooks/useAgentLoop.js.map +1 -1
- package/package.json +4 -4
package/dist/core/ken-context.js
CHANGED
|
@@ -11,6 +11,10 @@ const MESSAGE_CHAR_CAP = 1500;
|
|
|
11
11
|
const ORIGINAL_REQUEST_CAP = 4000;
|
|
12
12
|
/** Extra context preserves older user decisions, not old tool/assistant chatter. */
|
|
13
13
|
const EARLIER_REQUESTS_CAP = 8000;
|
|
14
|
+
/** Max paths listed in an autopilot digest's changed-files section. */
|
|
15
|
+
const CHANGED_FILES_LIMIT = 40;
|
|
16
|
+
/** Tools whose successful calls change the file named by their `file_path`. */
|
|
17
|
+
const FILE_CHANGING_TOOLS = new Set(["edit", "write"]);
|
|
14
18
|
/** Label for a user-role message that was actually injected by Autopilot Ken.
|
|
15
19
|
* Without it, multi-round cycles render Ken's own fix prompts as `**User:**`
|
|
16
20
|
* and he starts reviewing against his own last prompt instead of the user's
|
|
@@ -132,6 +136,81 @@ function renderMessage(msg, opts) {
|
|
|
132
136
|
}
|
|
133
137
|
return null;
|
|
134
138
|
}
|
|
139
|
+
/** Paths named by successful edit/write calls, sorted. Failed calls changed
|
|
140
|
+
* nothing, so they are left out. */
|
|
141
|
+
function collectChangedFiles(messages) {
|
|
142
|
+
const failed = new Set();
|
|
143
|
+
for (const m of messages) {
|
|
144
|
+
if (m.role !== "tool")
|
|
145
|
+
continue;
|
|
146
|
+
for (const tr of m.content)
|
|
147
|
+
if (tr.isError)
|
|
148
|
+
failed.add(tr.toolCallId);
|
|
149
|
+
}
|
|
150
|
+
const files = new Set();
|
|
151
|
+
for (const m of messages) {
|
|
152
|
+
if (m.role !== "assistant" || typeof m.content === "string")
|
|
153
|
+
continue;
|
|
154
|
+
for (const p of m.content) {
|
|
155
|
+
if (p.type !== "tool_call" || !FILE_CHANGING_TOOLS.has(p.name) || failed.has(p.id))
|
|
156
|
+
continue;
|
|
157
|
+
const filePath = p.args.file_path;
|
|
158
|
+
if (typeof filePath === "string" && filePath.trim())
|
|
159
|
+
files.add(filePath.trim());
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return [...files].sort();
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* The autopilot reviewer only sees a truncated tail of the transcript, so on a
|
|
166
|
+
* long turn early edits scroll out. List every file the turn changed so he can
|
|
167
|
+
* read them himself. The turn starts at the last human message carrying the
|
|
168
|
+
* original request; when that message is gone (compacted mid-turn, or the
|
|
169
|
+
* session was reset to implement an approved plan), every retained message
|
|
170
|
+
* belongs to the turn, and the section says so.
|
|
171
|
+
*/
|
|
172
|
+
function renderChangedFiles(messages, originalRequest, opts) {
|
|
173
|
+
let start = -1;
|
|
174
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
175
|
+
const m = messages[i];
|
|
176
|
+
if (m.role !== "user" || (m.provenance && m.provenance.source !== "human"))
|
|
177
|
+
continue;
|
|
178
|
+
// Ken's own fix prompts may quote the request; they don't start the turn.
|
|
179
|
+
const text = userText(m);
|
|
180
|
+
if (!isInjected(text, opts) && text.includes(originalRequest)) {
|
|
181
|
+
start = i;
|
|
182
|
+
break;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
const files = collectChangedFiles(messages.slice(Math.max(start, 0)));
|
|
186
|
+
// No section rather than "(none)": shell commands and subagents change files
|
|
187
|
+
// without edit/write calls, and an empty list must not read as "no work done".
|
|
188
|
+
if (files.length === 0)
|
|
189
|
+
return null;
|
|
190
|
+
const scope = start >= 0
|
|
191
|
+
? "since the original request"
|
|
192
|
+
: "across the retained transcript (the original request message was compacted or reset away)";
|
|
193
|
+
const listed = files.slice(0, CHANGED_FILES_LIMIT).map((f) => `- ${cap(f, 200)}`);
|
|
194
|
+
if (files.length > CHANGED_FILES_LIMIT) {
|
|
195
|
+
listed.push(`- […${files.length - CHANGED_FILES_LIMIT} more files]`);
|
|
196
|
+
}
|
|
197
|
+
return ("## Files changed by the work under review\n" +
|
|
198
|
+
`Successful edit/write calls ${scope}. Shell commands and subagents can change files too, so this list may be incomplete. ` +
|
|
199
|
+
"Read these with your tools when the truncated activity above does not show enough to judge.\n" +
|
|
200
|
+
listed.join("\n"));
|
|
201
|
+
}
|
|
202
|
+
const CHAT_FRAMING = {
|
|
203
|
+
intro: "## Who you are\nYou are Ken Kai, mentoring the user inside GG Coder. Your persona is in your system prompt. Below is what GG Coder and the user are working on.",
|
|
204
|
+
buildingHeading: "## What they're building",
|
|
205
|
+
questionHeading: "## They just asked you",
|
|
206
|
+
changedFiles: false,
|
|
207
|
+
};
|
|
208
|
+
const AUTOPILOT_FRAMING = {
|
|
209
|
+
intro: "## Your role\nYou are Ken Kai in autopilot, reviewing GG Coder's just-finished turn. No user is in this conversation; a machine parses your reply. Below is the work under review.",
|
|
210
|
+
buildingHeading: "## Project",
|
|
211
|
+
questionHeading: "## Your task",
|
|
212
|
+
changedFiles: true,
|
|
213
|
+
};
|
|
135
214
|
/**
|
|
136
215
|
* Fixed instruction fed into the digest's `question` slot in autopilot mode.
|
|
137
216
|
* Autopilot Ken doesn't answer a user — he reviews the just-finished GG Coder
|
|
@@ -142,8 +221,10 @@ function renderMessage(msg, opts) {
|
|
|
142
221
|
export const AUTOPILOT_REVIEW_INSTRUCTION = "GG Coder just finished a turn. Review its work against the user's original " +
|
|
143
222
|
"ask and genuine user corrections (including retained earlier decisions; the 'Original user request' section pins the current turn). Lines labeled 'Ken " +
|
|
144
223
|
"autopilot (injected)' are your own earlier fix prompts, NOT user asks. " +
|
|
145
|
-
"
|
|
146
|
-
"
|
|
224
|
+
"The activity above is truncated; when it does not show enough to judge a change, read the " +
|
|
225
|
+
"changed files yourself. " +
|
|
226
|
+
"Reply with your verdict ONLY: the first line must be the verdict keyword (PROMPT, " +
|
|
227
|
+
"ALL_CLEAR, IGNORE, or HUMAN), with the payload after. If GG Coder ended by " +
|
|
147
228
|
"asking the user a question or presenting options, use HUMAN only when the " +
|
|
148
229
|
"answer requires an actual user-level decision: intent, preference, missing " +
|
|
149
230
|
"product requirement, credential/secret, external access, budget/cost, or " +
|
|
@@ -152,12 +233,13 @@ export const AUTOPILOT_REVIEW_INSTRUCTION = "GG Coder just finished a turn. Revi
|
|
|
152
233
|
"safe for GG Coder to do without new information, use PROMPT with the next " +
|
|
153
234
|
"concrete follow-up instead. No greetings, no mentorship prose.";
|
|
154
235
|
/**
|
|
155
|
-
* Build the autopilot-review digest:
|
|
156
|
-
*
|
|
157
|
-
*
|
|
236
|
+
* Build the autopilot-review digest: the normal Ken digest with autopilot
|
|
237
|
+
* framing (no user, a changed-files list) and the fixed
|
|
238
|
+
* {@link AUTOPILOT_REVIEW_INSTRUCTION} as the trailing task, so Ken reviews the
|
|
239
|
+
* transcript instead of answering a user. Pure — no I/O.
|
|
158
240
|
*/
|
|
159
241
|
export function buildKenAutopilotContext(input) {
|
|
160
|
-
return
|
|
242
|
+
return renderDigest({ ...input, question: AUTOPILOT_REVIEW_INSTRUCTION }, AUTOPILOT_FRAMING);
|
|
161
243
|
}
|
|
162
244
|
/** Max chars of the inlined plan markdown in a plan-review digest. Plans are
|
|
163
245
|
* hand-written markdown, rarely near this; the cap only guards against a
|
|
@@ -172,7 +254,7 @@ const PLAN_CONTENT_CAP = 8000;
|
|
|
172
254
|
*/
|
|
173
255
|
export const AUTOPILOT_PLAN_REVIEW_INSTRUCTION = "GG Coder submitted an implementation plan (the 'Plan under review' section " +
|
|
174
256
|
"above). You are the reviewer — there is no user in the loop. Reply with " +
|
|
175
|
-
"your verdict ONLY
|
|
257
|
+
"your verdict ONLY. The first line must be the verdict keyword: ALL_CLEAR (approve — the " +
|
|
176
258
|
"plan is sound and implementation starts immediately), PROMPT + feedback " +
|
|
177
259
|
"(send it back for revision), or HUMAN + reason (a real product/destructive " +
|
|
178
260
|
"decision only the user can make). Never IGNORE a plan. No greetings, no " +
|
|
@@ -187,21 +269,25 @@ export const AUTOPILOT_PLAN_REVIEW_INSTRUCTION = "GG Coder submitted an implemen
|
|
|
187
269
|
*/
|
|
188
270
|
export function buildKenAutopilotPlanContext(input) {
|
|
189
271
|
const { planContent, ...rest } = input;
|
|
190
|
-
const digest =
|
|
272
|
+
const digest = renderDigest({ ...rest, question: AUTOPILOT_PLAN_REVIEW_INSTRUCTION }, AUTOPILOT_FRAMING);
|
|
191
273
|
const planSection = `## Plan under review\n${capContext(planContent.trim(), PLAN_CONTENT_CAP, "plan")}`;
|
|
192
|
-
// Insert the plan section right before the
|
|
193
|
-
//
|
|
194
|
-
const marker =
|
|
274
|
+
// Insert the plan section right before the trailing task section (always
|
|
275
|
+
// the last one renderDigest appends).
|
|
276
|
+
const marker = `\n\n${AUTOPILOT_FRAMING.questionHeading}\n`;
|
|
195
277
|
const idx = digest.lastIndexOf(marker);
|
|
196
278
|
if (idx === -1)
|
|
197
279
|
return `${digest}\n\n${planSection}`;
|
|
198
280
|
return `${digest.slice(0, idx)}\n\n${planSection}${digest.slice(idx)}`;
|
|
199
281
|
}
|
|
200
282
|
/**
|
|
201
|
-
* Build Ken's full context digest string
|
|
202
|
-
* inputs (project context, git, messages) and
|
|
283
|
+
* Build Ken's full context digest string for an `@Ken` chat question. Pure — no
|
|
284
|
+
* I/O. The sidecar gathers the inputs (project context, git, messages) and
|
|
285
|
+
* calls this.
|
|
203
286
|
*/
|
|
204
287
|
export function buildKenDigest(input) {
|
|
288
|
+
return renderDigest(input, CHAT_FRAMING);
|
|
289
|
+
}
|
|
290
|
+
function renderDigest(input, framing) {
|
|
205
291
|
const recentLimit = input.recentLimit ?? KEN_RECENT_MESSAGE_LIMIT;
|
|
206
292
|
const platform = input.platform ?? process.platform;
|
|
207
293
|
// Find the latest compaction summary; everything newer is "recent activity".
|
|
@@ -230,10 +316,10 @@ export function buildKenDigest(input) {
|
|
|
230
316
|
.map((m) => renderMessage(m, renderOpts))
|
|
231
317
|
.filter((l) => l !== null);
|
|
232
318
|
const sections = [];
|
|
233
|
-
sections.push(
|
|
319
|
+
sections.push(framing.intro);
|
|
234
320
|
const building = [];
|
|
235
321
|
building.push(`- Working directory: ${input.cwd}`, `- Platform: ${platform}`, `- Git branch: ${input.gitBranch ?? "(not a git repo / unknown)"}`);
|
|
236
|
-
sections.push(
|
|
322
|
+
sections.push(`${framing.buildingHeading}\n${building.join("\n")}`);
|
|
237
323
|
if (summaryText) {
|
|
238
324
|
sections.push(`## Story so far\nCompacted conversation summary (not new user authorization):\n${capContext(summaryText, 4000, "conversation summary")}`);
|
|
239
325
|
}
|
|
@@ -278,6 +364,10 @@ export function buildKenDigest(input) {
|
|
|
278
364
|
earlier.reverse().join("\n\n"));
|
|
279
365
|
}
|
|
280
366
|
sections.push(`## Recent activity (GG Coder and user)\n${renderedRecent.length > 0 ? renderedRecent.join("\n\n") : "(no conversation yet)"}`);
|
|
367
|
+
const request = input.originalRequest?.trim();
|
|
368
|
+
const changedFiles = framing.changedFiles && request ? renderChangedFiles(afterSummary, request, renderOpts) : null;
|
|
369
|
+
if (changedFiles)
|
|
370
|
+
sections.push(changedFiles);
|
|
281
371
|
const verificationEvidence = (input.verificationEvidence ?? collectVerificationEvidence(afterSummary)).slice(-12);
|
|
282
372
|
if (verificationEvidence.length > 0 || input.verificationEvidence !== undefined) {
|
|
283
373
|
const rows = verificationEvidence.map((evidence) => `- ${evidence.status.toUpperCase()}: \`${cap(evidence.command, 180)}\` — ${evidence.reason}`);
|
|
@@ -292,7 +382,7 @@ export function buildKenDigest(input) {
|
|
|
292
382
|
: "") +
|
|
293
383
|
rows.join("\n"));
|
|
294
384
|
}
|
|
295
|
-
sections.push(
|
|
385
|
+
sections.push(`${framing.questionHeading}\n${input.question.trim()}`);
|
|
296
386
|
return sections.join("\n\n");
|
|
297
387
|
}
|
|
298
388
|
//# sourceMappingURL=ken-context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ken-context.js","sourceRoot":"","sources":["../../src/core/ken-context.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ken-context.js","sourceRoot":"","sources":["../../src/core/ken-context.ts"],"names":[],"mappings":"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"}
|
package/dist/core/ken-prompt.js
CHANGED
|
@@ -102,8 +102,8 @@ function renderIdentity() {
|
|
|
102
102
|
`mentor inside the app. You are NOT the coding agent. GG Coder does the actual ` +
|
|
103
103
|
`work in the repo. You watch what it and the user are doing and you tell them ` +
|
|
104
104
|
`what to do next and why.\n\n` +
|
|
105
|
-
`You teach the un-fucked way to vibe code: one
|
|
106
|
-
`right, verified working before moving on. Blunt, casual, no corporate hedging, ` +
|
|
105
|
+
`You teach the un-fucked way to vibe code: one coherent unit of work at a time, ` +
|
|
106
|
+
`done right, verified working before moving on. Blunt, casual, no corporate hedging, ` +
|
|
107
107
|
`no "it depends" non-answers. Pick the move and say it.`);
|
|
108
108
|
}
|
|
109
109
|
function renderEdge() {
|
|
@@ -215,9 +215,9 @@ function renderOutputContract() {
|
|
|
215
215
|
`Format: wrap every recommended prompt in a fenced code block whose language is ` +
|
|
216
216
|
`the word ${KEN_PROMPT_FENCE} (three backticks, then ${KEN_PROMPT_FENCE}, then ` +
|
|
217
217
|
`the prompt body). The app renders that block as a "Send to GG Coder" button, ` +
|
|
218
|
-
`so the format is load-bearing. Each prompt is
|
|
219
|
-
`
|
|
220
|
-
`raw code to paste. One
|
|
218
|
+
`so the format is load-bearing. Each prompt is a few lines, or a short bullet ` +
|
|
219
|
+
`list when it batches related fixes: terminology-correct instructions that say ` +
|
|
220
|
+
`what to do and why, never raw code to paste. One coherent unit of work. Prefer prompts that tell GG Coder ` +
|
|
221
221
|
`to set things up itself (install deps, wire config, screenshot to self-check) ` +
|
|
222
222
|
`over making the user do manual work the agent could do.\n\n` +
|
|
223
223
|
`Not every message needs a prompt, and you decide that by feel. When the user ` +
|
|
@@ -234,16 +234,17 @@ function renderAutopilotContract() {
|
|
|
234
234
|
`what changed. In chat mode you drop a one-line reason before a prompt — NOT ` +
|
|
235
235
|
`here. There is no audience for a why. Never justify your verdict anywhere in ` +
|
|
236
236
|
`the reply; the only place a reason may exist is INSIDE a PROMPT body, and only ` +
|
|
237
|
-
`when GG Coder itself needs it to do the job.
|
|
238
|
-
`below, the parser reads the FIRST line ` +
|
|
237
|
+
`when GG Coder itself needs it to do the job. The parser reads the FIRST line ` +
|
|
239
238
|
`of your reply — anything before the keyword (a recap, an opinion, "Looks ` +
|
|
240
239
|
`good.") is treated as garbage and the whole turn silently falls back to a ` +
|
|
241
|
-
`HUMAN stop, which is worse than saying nothing.
|
|
242
|
-
`
|
|
243
|
-
`first line = keyword, nothing before it
|
|
244
|
-
`PROMPT\n<a runnable GG Coder prompt
|
|
245
|
-
`
|
|
240
|
+
`HUMAN stop, which is worse than saying nothing. The very first character of ` +
|
|
241
|
+
`your reply must be the keyword. Output exactly one verdict in this format, ` +
|
|
242
|
+
`first line = keyword, nothing before it:\n\n` +
|
|
243
|
+
`PROMPT\n<a runnable GG Coder prompt: a few lines, or a short bullet list when ` +
|
|
244
|
+
`batching related fixes; terminology-correct, says what to do, includes a why ` +
|
|
245
|
+
`only if GG Coder needs it to do the work>\n\n` +
|
|
246
246
|
`ALL_CLEAR\n\n` +
|
|
247
|
+
`ALL_CLEAR CORPUS_UNVERIFIED\n\n` +
|
|
247
248
|
`IGNORE\n\n` +
|
|
248
249
|
`HUMAN\n<one short line: why a human decision is needed>\n\n` +
|
|
249
250
|
`WRONG — reasoning before the keyword kills the whole cycle:\n` +
|
|
@@ -253,11 +254,12 @@ function renderAutopilotContract() {
|
|
|
253
254
|
`"PROMPT\nGuard AgentSession.compact() on this.opts.transient — it currently ` +
|
|
254
255
|
`persists transient sessions to disk. Add a test proving no session file is ` +
|
|
255
256
|
`created."\n\n` +
|
|
256
|
-
`
|
|
257
|
-
`
|
|
258
|
-
`
|
|
259
|
-
`
|
|
260
|
-
`Those still require PROMPT to fix, or
|
|
257
|
+
`ALL_CLEAR CORPUS_UNVERIFIED is for otherwise approved work ONLY, when a relevant ` +
|
|
258
|
+
`corpus comparison was attempted but unavailable or declined. Put the flag on the ` +
|
|
259
|
+
`verdict line itself; it records a separate user-visible warning. Never append ` +
|
|
260
|
+
`prose to ALL_CLEAR; it is discarded. The flag covers ONLY corpus availability, ` +
|
|
261
|
+
`never failed or missing verification. Those still require PROMPT to fix, or ` +
|
|
262
|
+
`HUMAN if blocked by access/decisions.\n\n` +
|
|
261
263
|
`Rules:\n` +
|
|
262
264
|
`- IGNORE first: was this turn even real work? Small talk ("hi", "thanks", ` +
|
|
263
265
|
`"nice"), a plain question that got answered with no code touched, an ack, or a ` +
|
|
@@ -271,7 +273,8 @@ function renderAutopilotContract() {
|
|
|
271
273
|
`nitpicks and "could be nicer" improvements are NOT blockers — ship it.\n` +
|
|
272
274
|
`- PROMPT only when something real is wrong or unfinished: a failing/absent ` +
|
|
273
275
|
`test, a broken build, a requirement from the original ask left undone, an ` +
|
|
274
|
-
`obvious bug.
|
|
276
|
+
`obvious bug. You get only a few correction rounds, so one PROMPT carries every ` +
|
|
277
|
+
`known in-scope gap. The prompt body should tell GG Coder to fix it AND prove it ` +
|
|
275
278
|
`(run the test, screenshot the UI) — you can't run anything yourself.\n` +
|
|
276
279
|
`- For shell verification, trust only PASSED rows in the harness-classified ` +
|
|
277
280
|
`verification evidence section. FAILED or REJECTED rows and model-authored ` +
|
|
@@ -309,9 +312,9 @@ function renderAutopilotContract() {
|
|
|
309
312
|
`Every wasted tool call costs tokens.\n` +
|
|
310
313
|
`- Never wrap the verdict in prose or a code fence, and never add commentary ` +
|
|
311
314
|
`before OR after the keyword line (no recap of what you found, no "Looks good", ` +
|
|
312
|
-
`no explanation of the verdict). The keyword line
|
|
313
|
-
`
|
|
314
|
-
`nothing more.`);
|
|
315
|
+
`no explanation of the verdict). The keyword line (with its optional ` +
|
|
316
|
+
`CORPUS_UNVERIFIED flag) is your entire reply for ALL_CLEAR and IGNORE; PROMPT ` +
|
|
317
|
+
`and HUMAN take only the payload described above, nothing more.`);
|
|
315
318
|
}
|
|
316
319
|
function renderUiTaste() {
|
|
317
320
|
return (`## UI: evidence over imitation\n\n` +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ken-prompt.js","sourceRoot":"","sources":["../../src/core/ken-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D;mFACmF;AACnF,MAAM,CAAC,MAAM,gBAAgB,GAAG,QAAQ,CAAC;AAEzC;;;iFAGiF;AACjF,MAAM,eAAe,GAAG,mBAAmB,CAAC;AAE5C;mFACmF;AACnF,SAAS,wBAAwB;IAC/B,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/D,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IACjC,OAAO,GAAG,eAAe,mBAAmB,GAAG,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;AACrE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,GAAW;IACpD,OAAO;QACL,cAAc,EAAE;QAChB,UAAU,EAAE;QACZ,yBAAyB,EAAE;QAC3B,eAAe,EAAE;QACjB,WAAW,EAAE;QACb,YAAY,EAAE;QACd,oBAAoB,EAAE;QACtB,aAAa,EAAE;QACf,gBAAgB,EAAE;QAClB,WAAW,EAAE;QACb,iBAAiB,EAAE;QACnB,MAAM,oBAAoB,CAAC,GAAG,CAAC;QAC/B,6EAA6E;QAC7E,sEAAsE;QACtE,wBAAwB,EAAE;KAC3B;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,GAAW;IAC7D,OAAO;QACL,cAAc,EAAE;QAChB,yBAAyB,EAAE;QAC3B,eAAe,EAAE;QACjB,WAAW,EAAE;QACb,YAAY,EAAE;QACd,aAAa,EAAE;QACf,gBAAgB,EAAE;QAClB,uBAAuB,EAAE;QACzB,MAAM,oBAAoB,CAAC,GAAG,CAAC;QAC/B,8EAA8E;QAC9E,wBAAwB,EAAE;KAC3B;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC;AAED;;;gFAGgF;AAChF,KAAK,UAAU,oBAAoB,CAAC,GAAW;IAC7C,MAAM,KAAK,GAAG,MAAM,qBAAqB,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAc,CAAC,CAAC;IAC3E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,OAAO,yBAAyB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;AACvD,CAAC;AAED,SAAS,cAAc;IACrB,OAAO,CACL,+EAA+E;QAC/E,gFAAgF;QAChF,+EAA+E;QAC/E,8BAA8B;QAC9B,
|
|
1
|
+
{"version":3,"file":"ken-prompt.js","sourceRoot":"","sources":["../../src/core/ken-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D;mFACmF;AACnF,MAAM,CAAC,MAAM,gBAAgB,GAAG,QAAQ,CAAC;AAEzC;;;iFAGiF;AACjF,MAAM,eAAe,GAAG,mBAAmB,CAAC;AAE5C;mFACmF;AACnF,SAAS,wBAAwB;IAC/B,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/D,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IACjC,OAAO,GAAG,eAAe,mBAAmB,GAAG,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;AACrE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,GAAW;IACpD,OAAO;QACL,cAAc,EAAE;QAChB,UAAU,EAAE;QACZ,yBAAyB,EAAE;QAC3B,eAAe,EAAE;QACjB,WAAW,EAAE;QACb,YAAY,EAAE;QACd,oBAAoB,EAAE;QACtB,aAAa,EAAE;QACf,gBAAgB,EAAE;QAClB,WAAW,EAAE;QACb,iBAAiB,EAAE;QACnB,MAAM,oBAAoB,CAAC,GAAG,CAAC;QAC/B,6EAA6E;QAC7E,sEAAsE;QACtE,wBAAwB,EAAE;KAC3B;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,GAAW;IAC7D,OAAO;QACL,cAAc,EAAE;QAChB,yBAAyB,EAAE;QAC3B,eAAe,EAAE;QACjB,WAAW,EAAE;QACb,YAAY,EAAE;QACd,aAAa,EAAE;QACf,gBAAgB,EAAE;QAClB,uBAAuB,EAAE;QACzB,MAAM,oBAAoB,CAAC,GAAG,CAAC;QAC/B,8EAA8E;QAC9E,wBAAwB,EAAE;KAC3B;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC;AAED;;;gFAGgF;AAChF,KAAK,UAAU,oBAAoB,CAAC,GAAW;IAC7C,MAAM,KAAK,GAAG,MAAM,qBAAqB,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAc,CAAC,CAAC;IAC3E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,OAAO,yBAAyB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;AACvD,CAAC;AAED,SAAS,cAAc;IACrB,OAAO,CACL,+EAA+E;QAC/E,gFAAgF;QAChF,+EAA+E;QAC/E,8BAA8B;QAC9B,iFAAiF;QACjF,sFAAsF;QACtF,wDAAwD,CACzD,CAAC;AACJ,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,CACL,kBAAkB;QAClB,iFAAiF;QACjF,8EAA8E;QAC9E,kFAAkF;QAClF,oDAAoD;QACpD,+EAA+E;QAC/E,kFAAkF;QAClF,6EAA6E;QAC7E,+EAA+E;QAC/E,kFAAkF;QAClF,+EAA+E;QAC/E,0CAA0C;QAC1C,2EAA2E;QAC3E,wEAAwE;QACxE,oCAAoC,CACrC,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB;IAChC,OAAO,CACL,6BAA6B;QAC7B,gFAAgF;QAChF,8EAA8E;QAC9E,sCAAsC;QACtC,mFAAmF;QACnF,gFAAgF;QAChF,iFAAiF;QACjF,sBAAsB;QACtB,gFAAgF;QAChF,+EAA+E;QAC/E,iEAAiE;QACjE,gFAAgF;QAChF,gFAAgF;QAChF,gFAAgF;QAChF,gCAAgC;QAChC,iFAAiF;QACjF,8EAA8E;QAC9E,iFAAiF;QACjF,+CAA+C;QAC/C,4EAA4E;QAC5E,iFAAiF;QACjF,iFAAiF;QACjF,iEAAiE;QACjE,2EAA2E;QAC3E,kFAAkF;QAClF,iFAAiF;QACjF,yEAAyE;QACzE,0CAA0C,CAC3C,CAAC;AACJ,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,CACL,6BAA6B;QAC7B,yFAAyF;QACzF,qFAAqF;QACrF,yFAAyF;QACzF,mFAAmF;QACnF,sFAAsF;QACtF,sFAAsF;QACtF,uFAAuF;QACvF,wEAAwE;QACxE,qFAAqF;QACrF,kFAAkF;QAClF,sFAAsF;QACtF,mFAAmF;QACnF,6FAA6F;QAC7F,uFAAuF;QACvF,0FAA0F;QAC1F,sFAAsF;QACtF,sFAAsF;QACtF,wFAAwF;QACxF,sFAAsF;QACtF,mFAAmF;QACnF,yFAAyF;QACzF,2EAA2E,CAC5E,CAAC;AACJ,CAAC;AAED,SAAS,WAAW;IAClB,OAAO,CACL,kCAAkC;QAClC,gFAAgF;QAChF,gFAAgF;QAChF,8EAA8E;QAC9E,iFAAiF;QACjF,8CAA8C;QAC9C,gFAAgF;QAChF,2EAA2E;QAC3E,uEAAuE;QACvE,iFAAiF;QACjF,wEAAwE;QACxE,mFAAmF;QACnF,iFAAiF;QACjF,iFAAiF;QACjF,kFAAkF;QAClF,8EAA8E;QAC9E,oBAAoB,CACrB,CAAC;AACJ,CAAC;AAED,SAAS,YAAY;IACnB,OAAO,CACL,eAAe;QACf,kFAAkF;QAClF,qFAAqF;QACrF,mFAAmF;QACnF,iFAAiF;QACjF,oFAAoF;QACpF,sFAAsF;QACtF,wEAAwE,CACzE,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB;IAC3B,OAAO,CACL,6BAA6B;QAC7B,iFAAiF;QACjF,4EAA4E;QAC5E,2CAA2C;QAC3C,iFAAiF;QACjF,YAAY,gBAAgB,2BAA2B,gBAAgB,SAAS;QAChF,+EAA+E;QAC/E,+EAA+E;QAC/E,gFAAgF;QAChF,4GAA4G;QAC5G,gFAAgF;QAChF,6DAA6D;QAC7D,+EAA+E;QAC/E,+EAA+E;QAC/E,+EAA+E;QAC/E,iFAAiF;QACjF,gCAAgC,CACjC,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB;IAC9B,OAAO,CACL,qCAAqC;QACrC,gFAAgF;QAChF,gFAAgF;QAChF,oFAAoF;QACpF,8EAA8E;QAC9E,+EAA+E;QAC/E,iFAAiF;QACjF,+EAA+E;QAC/E,2EAA2E;QAC3E,4EAA4E;QAC5E,8EAA8E;QAC9E,6EAA6E;QAC7E,8CAA8C;QAC9C,gFAAgF;QAChF,+EAA+E;QAC/E,+CAA+C;QAC/C,eAAe;QACf,iCAAiC;QACjC,YAAY;QACZ,6DAA6D;QAC7D,+DAA+D;QAC/D,0EAA0E;QAC1E,kDAAkD;QAClD,+EAA+E;QAC/E,8EAA8E;QAC9E,6EAA6E;QAC7E,eAAe;QACf,mFAAmF;QACnF,mFAAmF;QACnF,gFAAgF;QAChF,iFAAiF;QACjF,8EAA8E;QAC9E,2CAA2C;QAC3C,UAAU;QACV,4EAA4E;QAC5E,iFAAiF;QACjF,gFAAgF;QAChF,iFAAiF;QACjF,8EAA8E;QAC9E,qDAAqD;QACrD,yFAAyF;QACzF,+EAA+E;QAC/E,8EAA8E;QAC9E,0EAA0E;QAC1E,6EAA6E;QAC7E,4EAA4E;QAC5E,iFAAiF;QACjF,kFAAkF;QAClF,wEAAwE;QACxE,6EAA6E;QAC7E,4EAA4E;QAC5E,6CAA6C;QAC7C,gFAAgF;QAChF,wEAAwE;QACxE,2EAA2E;QAC3E,qEAAqE;QACrE,0EAA0E;QAC1E,2EAA2E;QAC3E,4EAA4E;QAC5E,4EAA4E;QAC5E,oFAAoF;QACpF,sFAAsF;QACtF,mFAAmF;QACnF,wEAAwE;QACxE,wEAAwE;QACxE,2EAA2E;QAC3E,wEAAwE;QACxE,wEAAwE;QACxE,qEAAqE;QACrE,0EAA0E;QAC1E,4EAA4E;QAC5E,wEAAwE;QACxE,2EAA2E;QAC3E,wEAAwE;QACxE,mEAAmE;QACnE,2EAA2E;QAC3E,SAAS;QACT,6EAA6E;QAC7E,uFAAuF;QACvF,+DAA+D;QAC/D,sFAAsF;QACtF,iFAAiF;QACjF,wCAAwC;QACxC,8EAA8E;QAC9E,iFAAiF;QACjF,sEAAsE;QACtE,gFAAgF;QAChF,gEAAgE,CACjE,CAAC;AACJ,CAAC;AAED,SAAS,aAAa;IACpB,OAAO,CACL,oCAAoC;QACpC,8FAA8F;QAC9F,mIAAmI;QACnI,iMAAiM;QACjM,mOAAmO;QACnO,mHAAmH,CACpH,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO,CACL,mBAAmB;QACnB,oFAAoF;QACpF,iFAAiF;QACjF,uFAAuF;QACvF,mGAAmG;QACnG,gGAAgG;QAChG,0FAA0F;QAC1F,qFAAqF;QACrF,uFAAuF;QACvF,gGAAgG;QAChG,wFAAwF;QACxF,qFAAqF;QACrF,6DAA6D,CAC9D,CAAC;AACJ,CAAC;AAED,SAAS,WAAW;IAClB,OAAO,CACL,cAAc;QACd,+EAA+E;QAC/E,kFAAkF;QAClF,mDAAmD;QACnD,4EAA4E;QAC5E,iFAAiF;QACjF,8EAA8E;QAC9E,WAAW;QACX,iFAAiF;QACjF,+EAA+E;QAC/E,mBAAmB,CACpB,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO,CACL,qBAAqB;QACrB,+EAA+E;QAC/E,kFAAkF;QAClF,kGAAkG;QAClG,iEAAiE;QACjE,kEAAkE,CACnE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ShellThreat } from "./shell-threats.js";
|
|
2
|
+
export type PackageEcosystem = "npm" | "PyPI";
|
|
3
|
+
export interface PackageRef {
|
|
4
|
+
ecosystem: PackageEcosystem;
|
|
5
|
+
name: string;
|
|
6
|
+
}
|
|
7
|
+
export interface PackageCheckOptions {
|
|
8
|
+
fetch?: typeof fetch;
|
|
9
|
+
signal?: AbortSignal;
|
|
10
|
+
}
|
|
11
|
+
/** Packages named by install commands in `command`. Local paths/URLs are skipped. */
|
|
12
|
+
export declare function parsePackageInstalls(command: string): PackageRef[];
|
|
13
|
+
/** Optimal-string-alignment Damerau-Levenshtein distance. */
|
|
14
|
+
export declare function damerauLevenshtein(a: string, b: string): number;
|
|
15
|
+
/** Typosquat warnings (local) and known-malware blocks (OSV, fail-open). */
|
|
16
|
+
export declare function checkPackageInstall(command: string, options?: PackageCheckOptions): Promise<ShellThreat[]>;
|
|
17
|
+
/** Test hook: forget cached OSV answers. */
|
|
18
|
+
export declare function clearPackageThreatCache(): void;
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package-install threat checks: typosquat detection against popular package
|
|
3
|
+
* names (local) and known-malicious packages via OSV (network, fail-open).
|
|
4
|
+
*/
|
|
5
|
+
import { log } from "./logger.js";
|
|
6
|
+
import { POPULAR_NPM_PACKAGES, POPULAR_PYPI_PACKAGES } from "./shell-threats-popular-packages.js";
|
|
7
|
+
const OSV_URL = "https://api.osv.dev/v1/querybatch";
|
|
8
|
+
const OSV_TIMEOUT_MS = 3_000;
|
|
9
|
+
const NPM_INSTALL = new Set(["add", "install", "i"]);
|
|
10
|
+
const osvCache = new Map();
|
|
11
|
+
/** Strip a version/range/extras suffix: `react@18`, `@a/b@1`, `requests==2.0`, `x[extra]`. */
|
|
12
|
+
function bareName(spec, ecosystem) {
|
|
13
|
+
if (ecosystem === "npm") {
|
|
14
|
+
const at = spec.indexOf("@", 1);
|
|
15
|
+
const name = at === -1 ? spec : spec.slice(0, at);
|
|
16
|
+
return /^(?:@[a-z0-9._-]+\/)?[a-z0-9._-]+$/i.test(name) ? name.toLowerCase() : null;
|
|
17
|
+
}
|
|
18
|
+
const name = spec.split(/[[=<>!~;@\s]/)[0] ?? "";
|
|
19
|
+
return /^[a-z0-9][a-z0-9._-]*$/i.test(name) ? name.toLowerCase().replace(/[._]/g, "-") : null;
|
|
20
|
+
}
|
|
21
|
+
/** Packages named by install commands in `command`. Local paths/URLs are skipped. */
|
|
22
|
+
export function parsePackageInstalls(command) {
|
|
23
|
+
const refs = [];
|
|
24
|
+
for (const segment of command.split(/(?:&&|\|\||[;|\n])/)) {
|
|
25
|
+
const tokens = segment
|
|
26
|
+
.trim()
|
|
27
|
+
.split(/\s+/)
|
|
28
|
+
.map((t) => t.replace(/^['"]|['"]$/g, ""))
|
|
29
|
+
.filter((t) => t.length > 0);
|
|
30
|
+
if (tokens[0] === "sudo")
|
|
31
|
+
tokens.shift();
|
|
32
|
+
const [program, sub, ...rest] = tokens;
|
|
33
|
+
let ecosystem = null;
|
|
34
|
+
let args = [];
|
|
35
|
+
if (program === "npx" && sub !== undefined) {
|
|
36
|
+
ecosystem = "npm";
|
|
37
|
+
args = [sub, ...rest].filter((a) => !a.startsWith("-")).slice(0, 1);
|
|
38
|
+
}
|
|
39
|
+
else if ((program === "npm" || program === "pnpm" || program === "yarn" || program === "bun") &&
|
|
40
|
+
sub !== undefined &&
|
|
41
|
+
NPM_INSTALL.has(sub)) {
|
|
42
|
+
ecosystem = "npm";
|
|
43
|
+
args = rest;
|
|
44
|
+
}
|
|
45
|
+
else if ((program === "pip" || program === "pip3") && sub === "install") {
|
|
46
|
+
ecosystem = "PyPI";
|
|
47
|
+
args = rest;
|
|
48
|
+
}
|
|
49
|
+
else if (program === "uv" && sub === "pip" && rest[0] === "install") {
|
|
50
|
+
ecosystem = "PyPI";
|
|
51
|
+
args = rest.slice(1);
|
|
52
|
+
}
|
|
53
|
+
if (!ecosystem)
|
|
54
|
+
continue;
|
|
55
|
+
let skipNext = false;
|
|
56
|
+
for (const arg of args) {
|
|
57
|
+
if (skipNext) {
|
|
58
|
+
skipNext = false;
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
// Options that take a value (`-r requirements.txt`, `--registry x`).
|
|
62
|
+
if (/^(?:-r|-c|-e|--requirement|--constraint|--editable|--registry|-i|--index-url)$/.test(arg)) {
|
|
63
|
+
skipNext = true;
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
if (arg.startsWith("-") || /[/\\:]/.test(arg.replace(/^@[^/]+\//, "")))
|
|
67
|
+
continue;
|
|
68
|
+
const name = bareName(arg, ecosystem);
|
|
69
|
+
if (name)
|
|
70
|
+
refs.push({ ecosystem, name });
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return refs;
|
|
74
|
+
}
|
|
75
|
+
/** Optimal-string-alignment Damerau-Levenshtein distance. */
|
|
76
|
+
export function damerauLevenshtein(a, b) {
|
|
77
|
+
const d = Array.from({ length: a.length + 1 }, (_, i) => Array.from({ length: b.length + 1 }, (_, j) => (i === 0 ? j : j === 0 ? i : 0)));
|
|
78
|
+
const at = (i, j) => d[i]?.[j] ?? Number.POSITIVE_INFINITY;
|
|
79
|
+
for (let i = 1; i <= a.length; i++) {
|
|
80
|
+
const row = d[i];
|
|
81
|
+
if (!row)
|
|
82
|
+
continue;
|
|
83
|
+
for (let j = 1; j <= b.length; j++) {
|
|
84
|
+
const cost = a[i - 1] === b[j - 1] ? 0 : 1;
|
|
85
|
+
let v = Math.min(at(i - 1, j) + 1, at(i, j - 1) + 1, at(i - 1, j - 1) + cost);
|
|
86
|
+
if (i > 1 && j > 1 && a[i - 1] === b[j - 2] && a[i - 2] === b[j - 1]) {
|
|
87
|
+
v = Math.min(v, at(i - 2, j - 2) + 1);
|
|
88
|
+
}
|
|
89
|
+
row[j] = v;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return at(a.length, b.length);
|
|
93
|
+
}
|
|
94
|
+
function typosquatOf(ref) {
|
|
95
|
+
const popular = ref.ecosystem === "npm" ? POPULAR_NPM_PACKAGES : POPULAR_PYPI_PACKAGES;
|
|
96
|
+
if (popular.includes(ref.name))
|
|
97
|
+
return null;
|
|
98
|
+
return (popular.find((p) => Math.abs(p.length - ref.name.length) <= 1 && damerauLevenshtein(p, ref.name) === 1) ?? null);
|
|
99
|
+
}
|
|
100
|
+
async function malwareIds(refs, options) {
|
|
101
|
+
const key = (r) => `${r.ecosystem}:${r.name}`;
|
|
102
|
+
const pending = refs.filter((r) => !osvCache.has(key(r)));
|
|
103
|
+
if (pending.length > 0) {
|
|
104
|
+
const doFetch = options.fetch ?? fetch;
|
|
105
|
+
const signals = [AbortSignal.timeout(OSV_TIMEOUT_MS)];
|
|
106
|
+
if (options.signal)
|
|
107
|
+
signals.push(options.signal);
|
|
108
|
+
try {
|
|
109
|
+
const res = await doFetch(OSV_URL, {
|
|
110
|
+
method: "POST",
|
|
111
|
+
headers: { "content-type": "application/json" },
|
|
112
|
+
body: JSON.stringify({
|
|
113
|
+
queries: pending.map((r) => ({ package: { ecosystem: r.ecosystem, name: r.name } })),
|
|
114
|
+
}),
|
|
115
|
+
signal: AbortSignal.any(signals),
|
|
116
|
+
});
|
|
117
|
+
if (!res.ok)
|
|
118
|
+
throw new Error(`OSV HTTP ${res.status}`);
|
|
119
|
+
const body = (await res.json());
|
|
120
|
+
pending.forEach((r, i) => {
|
|
121
|
+
const ids = (body.results?.[i]?.vulns ?? [])
|
|
122
|
+
.map((v) => v.id ?? "")
|
|
123
|
+
.filter((id) => id.startsWith("MAL-"));
|
|
124
|
+
osvCache.set(key(r), ids);
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
catch (err) {
|
|
128
|
+
log("WARN", "shell-threats", `OSV lookup failed, allowing install: ${String(err)}`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
const out = new Map();
|
|
132
|
+
for (const r of refs) {
|
|
133
|
+
const ids = osvCache.get(key(r));
|
|
134
|
+
if (ids && ids.length > 0)
|
|
135
|
+
out.set(r.name, ids);
|
|
136
|
+
}
|
|
137
|
+
return out;
|
|
138
|
+
}
|
|
139
|
+
/** Typosquat warnings (local) and known-malware blocks (OSV, fail-open). */
|
|
140
|
+
export async function checkPackageInstall(command, options = {}) {
|
|
141
|
+
const refs = parsePackageInstalls(command);
|
|
142
|
+
if (refs.length === 0)
|
|
143
|
+
return [];
|
|
144
|
+
const threats = [];
|
|
145
|
+
for (const ref of refs) {
|
|
146
|
+
const intended = typosquatOf(ref);
|
|
147
|
+
if (intended) {
|
|
148
|
+
threats.push({
|
|
149
|
+
rule: "typosquat",
|
|
150
|
+
severity: "warn",
|
|
151
|
+
detail: `${ref.ecosystem} package "${ref.name}" is one edit away from popular "${intended}" — did you mean ${intended}?`,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
for (const [name, ids] of await malwareIds(refs, options)) {
|
|
156
|
+
threats.push({
|
|
157
|
+
rule: "malicious-package",
|
|
158
|
+
severity: "block",
|
|
159
|
+
detail: `package "${name}" is flagged as malware by OSV (${ids.join(", ")})`,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
return threats;
|
|
163
|
+
}
|
|
164
|
+
/** Test hook: forget cached OSV answers. */
|
|
165
|
+
export function clearPackageThreatCache() {
|
|
166
|
+
osvCache.clear();
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=package-threats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-threats.js","sourceRoot":"","sources":["../../src/core/package-threats.ts"],"names":[],"mappings":"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"}
|
|
@@ -261,6 +261,8 @@ export declare class SessionManager {
|
|
|
261
261
|
private warnedPersistCodes;
|
|
262
262
|
/** Session files whose tail this process already checked (see {@link sealTornTail}). */
|
|
263
263
|
private sealedTails;
|
|
264
|
+
/** Fingerprint-checked summary caches, one per storage directory. */
|
|
265
|
+
private summaryIndexes;
|
|
264
266
|
/** Called once per error code when session persistence fails (e.g. ENOSPC). */
|
|
265
267
|
onPersistError?: (error: NodeJS.ErrnoException) => void;
|
|
266
268
|
constructor(sessionsDir: string);
|
|
@@ -310,7 +312,10 @@ export declare class SessionManager {
|
|
|
310
312
|
registerActivePath(sessionPath: string): void;
|
|
311
313
|
unregisterActivePath(sessionPath: string): void;
|
|
312
314
|
private protectedSessionBases;
|
|
313
|
-
load(sessionPath: string
|
|
315
|
+
load(sessionPath: string, options?: {
|
|
316
|
+
/** Caller already ran {@link resolveCanonicalSession}; skip the repeat scan. */
|
|
317
|
+
canonical?: boolean;
|
|
318
|
+
}): Promise<{
|
|
314
319
|
header: SessionHeader;
|
|
315
320
|
entries: SessionEntry[];
|
|
316
321
|
path: string;
|
|
@@ -332,6 +337,13 @@ export declare class SessionManager {
|
|
|
332
337
|
private loadPhysicalCheckpoint;
|
|
333
338
|
private readSessionInfo;
|
|
334
339
|
private sessionCandidates;
|
|
340
|
+
/**
|
|
341
|
+
* Summaries of every session in one directory, served from the persisted
|
|
342
|
+
* fingerprint index so only changed files are re-read.
|
|
343
|
+
*/
|
|
344
|
+
private indexedSummaries;
|
|
345
|
+
/** {@link indexedSummaries} across several directories, flattened. */
|
|
346
|
+
private indexedSummariesIn;
|
|
335
347
|
/**
|
|
336
348
|
* Read just enough of a session file to summarize it.
|
|
337
349
|
*
|