@pentoshi/clai 3.8.19 → 3.8.20
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/agent/compaction-summary.d.ts +1 -1
- package/dist/agent/compaction-summary.js +3 -2
- package/dist/agent/compaction-summary.js.map +1 -1
- package/dist/agent/context-manager.d.ts +29 -2
- package/dist/agent/context-manager.js +125 -17
- package/dist/agent/context-manager.js.map +1 -1
- package/dist/agent/continue-orient.d.ts +39 -0
- package/dist/agent/continue-orient.js +152 -0
- package/dist/agent/continue-orient.js.map +1 -0
- package/dist/agent/runner.js +46 -6
- package/dist/agent/runner.js.map +1 -1
- package/dist/agent/session-state.d.ts +2 -0
- package/dist/agent/session-state.js +9 -3
- package/dist/agent/session-state.js.map +1 -1
- package/dist/agent/stop-summary.d.ts +2 -2
- package/dist/agent/stop-summary.js +23 -4
- package/dist/agent/stop-summary.js.map +1 -1
- package/dist/agent/tool-output-formatting.js +8 -4
- package/dist/agent/tool-output-formatting.js.map +1 -1
- package/dist/app/controllers/session-compact-helper.d.ts +2 -0
- package/dist/app/controllers/session-compact-helper.js +14 -5
- package/dist/app/controllers/session-compact-helper.js.map +1 -1
- package/dist/app/controllers/session-controller.js +6 -1
- package/dist/app/controllers/session-controller.js.map +1 -1
- package/dist/llm/http.js +22 -12
- package/dist/llm/http.js.map +1 -1
- package/dist/prompts/embedded.js +1 -1
- package/dist/prompts/embedded.js.map +1 -1
- package/dist/prompts/system.agent.md +3 -2
- package/dist/tools/definitions.js +9 -2
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/http.d.ts +2 -0
- package/dist/tools/http.js +208 -57
- package/dist/tools/http.js.map +1 -1
- package/dist/tools/registry.js +1 -0
- package/dist/tools/registry.js.map +1 -1
- package/dist/tui-v2/app/App.js +39 -1
- package/dist/tui-v2/app/App.js.map +1 -1
- package/dist/tui-v2/app/commands/picker-commands.js +7 -7
- package/dist/tui-v2/app/commands/picker-commands.js.map +1 -1
- package/dist/tui-v2/bootstrap/start-tui-v2.js +10 -4
- package/dist/tui-v2/bootstrap/start-tui-v2.js.map +1 -1
- package/dist/tui-v2/components/modal/secret-modal.d.ts +3 -1
- package/dist/tui-v2/components/modal/secret-modal.js +110 -18
- package/dist/tui-v2/components/modal/secret-modal.js.map +1 -1
- package/dist/tui-v2/components/toast/toast-anim.d.ts +5 -4
- package/dist/tui-v2/components/toast/toast-anim.js +10 -7
- package/dist/tui-v2/components/toast/toast-anim.js.map +1 -1
- package/dist/tui-v2/components/toast/toast-host.d.ts +9 -3
- package/dist/tui-v2/components/toast/toast-host.js +124 -26
- package/dist/tui-v2/components/toast/toast-host.js.map +1 -1
- package/dist/tui-v2/controllers/overlay-controller.d.ts +6 -0
- package/dist/tui-v2/controllers/overlay-controller.js +25 -0
- package/dist/tui-v2/controllers/overlay-controller.js.map +1 -1
- package/dist/tui-v2/state/transcript-reducer.js +70 -30
- package/dist/tui-v2/state/transcript-reducer.js.map +1 -1
- package/dist/version.generated.d.ts +2 -2
- package/dist/version.generated.js +2 -2
- package/package.json +1 -1
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Prompts and helpers for LLM-based context compaction.
|
|
3
3
|
* The model produces structured continuation memory — not a raw transcript dump.
|
|
4
4
|
*/
|
|
5
|
-
export declare const COMPACTION_SYSTEM_PROMPT = "You are a session-memory compressor for an autonomous coding and security agent.\n\nWrite a dense, accurate CONTINUATION MEMORY for another assistant that will resume this work with no other history.\n\nRules:\n- Fidelity over style. Never invent tool results, file contents, findings, URLs, ports, or completions.\n- Prefer concrete artifacts: absolute paths, commands (short form), exit outcomes, HTTP status, plan task ids/states, job ids, open ports, confirmed vs unconfirmed findings.\n- Omit secrets, API keys, passwords, tokens, and full credential material. Say \"[redacted]\" if present.\n- Omit progress bars, repeated failures, and decorative chatter.\n- Do not wrap the whole answer in markdown code fences.\n- If something is unknown, omit it rather than guessing.\n- PHASE AWARENESS: Temporary UI/mode gates (plan-mode gather-only, \"await accept\", \"do not implement yet\") are HISTORICAL context \u2014 never rewrite them as permanent forever-rules for the resuming agent. Durable user/engagement policy (scope, non-destructive default, stay on remote target when that is the engagement) may still apply.";
|
|
5
|
+
export declare const COMPACTION_SYSTEM_PROMPT = "You are a session-memory compressor for an autonomous coding and security agent.\n\nWrite a dense, accurate CONTINUATION MEMORY for another assistant that will resume this work with no other history.\n\nRules:\n- Fidelity over style. Never invent tool results, file contents, findings, URLs, ports, or completions.\n- Prefer concrete artifacts: absolute paths, commands (short form), exit outcomes, HTTP status, plan task ids/states, job ids, open ports, confirmed vs unconfirmed findings.\n- LENGTH: aim for ~800\u20131500 tokens of dense bullets \u2014 complete short memory beats a long dump that cuts mid-sentence. No full tool transcripts or HTML bodies.\n- Omit secrets, API keys, passwords, tokens, and full credential material. Say \"[redacted]\" if present.\n- Omit progress bars, repeated failures, and decorative chatter.\n- Do not wrap the whole answer in markdown code fences.\n- If something is unknown, omit it rather than guessing.\n- PHASE AWARENESS: Temporary UI/mode gates (plan-mode gather-only, \"await accept\", \"do not implement yet\") are HISTORICAL context \u2014 never rewrite them as permanent forever-rules for the resuming agent. Durable user/engagement policy (scope, non-destructive default, stay on remote target when that is the engagement) may still apply.";
|
|
6
6
|
export interface CompactionPromptParts {
|
|
7
7
|
visualTranscript?: string | undefined;
|
|
8
8
|
messageTranscript: string;
|
|
@@ -9,6 +9,7 @@ Write a dense, accurate CONTINUATION MEMORY for another assistant that will resu
|
|
|
9
9
|
Rules:
|
|
10
10
|
- Fidelity over style. Never invent tool results, file contents, findings, URLs, ports, or completions.
|
|
11
11
|
- Prefer concrete artifacts: absolute paths, commands (short form), exit outcomes, HTTP status, plan task ids/states, job ids, open ports, confirmed vs unconfirmed findings.
|
|
12
|
+
- LENGTH: aim for ~800–1500 tokens of dense bullets — complete short memory beats a long dump that cuts mid-sentence. No full tool transcripts or HTML bodies.
|
|
12
13
|
- Omit secrets, API keys, passwords, tokens, and full credential material. Say "[redacted]" if present.
|
|
13
14
|
- Omit progress bars, repeated failures, and decorative chatter.
|
|
14
15
|
- Do not wrap the whole answer in markdown code fences.
|
|
@@ -29,12 +30,12 @@ export function buildCompactionUserPrompt(parts) {
|
|
|
29
30
|
}
|
|
30
31
|
const sections = [];
|
|
31
32
|
if (planImplement) {
|
|
32
|
-
sections.push("Create a complete but compact HANDOFF MEMORY from PLAN-MODE RESEARCH for an agent that will EXECUTE the accepted plan next.", "The material below was gathered
|
|
33
|
+
sections.push("Create a complete but compact HANDOFF MEMORY from PLAN-MODE RESEARCH for an agent that will EXECUTE the accepted plan next.", "Open with one framing line: this context is from plan mode — the research run that produced the comprehensive detailed plan and tasks the implementer is seeing (ACTIVE PLAN is re-injected separately).", "The material below was gathered under plan mode to design that plan/tasks. The next phase is agent implement — not gather-only.", "The live ACTIVE PLAN (goal/detail/tasks) will be re-injected separately — your job is ACTIONABLE research memory so implement does not re-discover or miss coverage.", "", "Organize under these exact section headings (include a section even if short — write \"none\" only when truly empty):", "## User goals", "## Research evidence (facts from plan-mode tools)", "## Coverage ledger (do not blindly re-do)", "## Confirmed findings", "## Negative / tested-OK results", "## Untested / open classes", "## Artifacts & paths", "## Durable engagement rules (still apply in agent mode)", "## Plan-mode-only notes (historical — not current agent gates)", "## Commands/tools and key results", "## Current state", "## Remaining work (post-accept tasks)", "## Open risks / failures", "", "How to fill sections (agent-performance critical):", "- Research evidence: concrete facts only — hosts/IPs, ports, stack fingerprint, auth surfaces, headers, endpoints, versions. Complete every bullet (never end mid-token like \"DEN\" for DENY).", "- Coverage ledger: what recon/enum is already done enough (e.g. DNS done, top-ports done, OpenAPI harvested) so implement can deepen rather than restart from zero.", "- Confirmed findings: each as severity + one-line evidence + impact/repro if known (F1, F2, … or short titles). If none yet, say so.", "- Negative / tested-OK: things checked and not issues (SSRF guard, CORS locked, etc.) so implement does not re-burn steps.", "- Untested / open classes: authz/IDOR, RBAC, payment, injection, etc. still open — especially anything blocked on credentials.", "- Artifacts & paths: absolute paths to reports, downloads, .map extracts, scan outputs under temp/scratch/.clai/outputs.", "- Durable engagement rules ONLY if they still bind implement (remote target/scope, authorized testing, non-destructive default, do not treat clai workspace as the target, no local dev server for remote assessments).", "- Plan-mode-only notes: gather-only / await-accept / no-exploit-yet gates that applied BEFORE accept — label historical; implementer is past that phase.", "- Commands/tools: high-signal tools used + outcomes (not every progress line). Prefer name + target + result in one line.", "- Remaining work: map to task ids/titles when ACTIVE PLAN is in DURABLE STATE (t1…); note blocked-on-creds clearly.", "- Do NOT invent findings. Do NOT omit confirmed issues that appear in the material. Prefer denser bullets over long prose.", "- Prefer COMPLETE short memory over a long memory that cuts off mid-sentence.");
|
|
33
34
|
}
|
|
34
35
|
else {
|
|
35
36
|
sections.push("Create a complete but compact continuation memory of the session below.", "Treat resumed history and newer turns as one continuous conversation.", "", "Organize under these exact section headings (skip a section only if empty):", "## User goals", "## Decisions and constraints", "## Work completed", "## Commands/tools and results", "## Current state", "## Remaining work", "## Open risks / failures", "", "Preserve: user intentions, decisions, constraints, paths, stack/package manager,", "commands and key results, plan task states, errors and failed approaches,", "servers/jobs still running, and exactly what remains.", "", "PHASE AWARENESS under Decisions and constraints:", "- If earlier turns were plan-mode research, do not elevate gather-only / await-accept / no-implement rules as permanent forever-constraints for agent execution.", "- Durable engagement policy (scope, remote target, non-destructive default) may still be listed as current.", "- Prefer labeling historical plan-mode gates as \"(plan-mode only; superseded after accept)\" when they appear in the material.");
|
|
36
37
|
}
|
|
37
|
-
sections.push("Be concise but specific. No secrets. No fabricated successes.");
|
|
38
|
+
sections.push("Be concise but specific. Target ~800–1500 tokens of memory. Dense bullets over prose. No secrets. No fabricated successes. No full tool dumps.");
|
|
38
39
|
if (durable) {
|
|
39
40
|
sections.push("", "DURABLE STATE (trust this over older chatter):", durable);
|
|
40
41
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compaction-summary.js","sourceRoot":"","sources":["../../src/agent/compaction-summary.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG
|
|
1
|
+
{"version":3,"file":"compaction-summary.js","sourceRoot":"","sources":["../../src/agent/compaction-summary.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,8 +11,23 @@ export declare function estimateMessagesTokens(messages: ChatMessage[]): number;
|
|
|
11
11
|
/**
|
|
12
12
|
* Agent-loop auto-compact threshold (estimated tokens). Shared with `/context`
|
|
13
13
|
* so the reported % of budget matches when auto-compaction fires.
|
|
14
|
+
*
|
|
15
|
+
* 100k (was 150k): thinking models balloon context; implement turns with large
|
|
16
|
+
* tool artifacts hit mid-100k before the old threshold and then fail streams.
|
|
17
|
+
* Earlier compact keeps implement/plan loops healthier without constant /compact.
|
|
18
|
+
*/
|
|
19
|
+
export declare const AUTO_COMPACT_TOKEN_BUDGET = 100000;
|
|
20
|
+
/**
|
|
21
|
+
* Soft post-compact band we *prefer* (includes system prompt ~8k).
|
|
22
|
+
* Achieved by dense memory + progressive soft-trim of oversized dumps only.
|
|
23
|
+
* Never a reject gate, never drops messages/tool pairs to hit the number.
|
|
14
24
|
*/
|
|
15
|
-
export declare const
|
|
25
|
+
export declare const POST_COMPACT_SOFT_GUIDANCE_TOKENS = 16000;
|
|
26
|
+
/** Prefer landing at or under this; still accept if content needs more room. */
|
|
27
|
+
export declare const POST_COMPACT_SOFT_UPPER_BAND_TOKENS = 20000;
|
|
28
|
+
/** Auto-compact: reject empty/near-empty memory after large history (amnesia). */
|
|
29
|
+
export declare const AUTO_COMPACT_STUB_MIN_CHARS = 120;
|
|
30
|
+
export declare const AUTO_COMPACT_STUB_BEFORE_TOKENS = 20000;
|
|
16
31
|
export interface CompactOptions {
|
|
17
32
|
/** Soft budget (tokens). When estimated tokens exceed this, compact. */
|
|
18
33
|
budgetTokens?: number | undefined;
|
|
@@ -43,8 +58,9 @@ export declare const COMPACTION_MEMORY_PREFIX = "Session memory from compacted e
|
|
|
43
58
|
/**
|
|
44
59
|
* Plan-mode research handoff memory (pre-implement compact). Distinct so the
|
|
45
60
|
* agent does not treat plan-mode gather-only history as permanent gates.
|
|
61
|
+
* Explicitly ties this context to the plan/tasks the implementer is seeing.
|
|
46
62
|
*/
|
|
47
|
-
export declare const PLAN_IMPLEMENT_MEMORY_PREFIX = "Session memory from
|
|
63
|
+
export declare const PLAN_IMPLEMENT_MEMORY_PREFIX = "Session memory from PLAN MODE research that was used to build the comprehensive detailed plan and tasks you are seeing now (handoff to agent implement \u2014 gather-only phase is over; execute approved tasks):";
|
|
48
64
|
export declare const MECHANICAL_MEMORY_PREFIX = "Earlier turns in this session, summarized";
|
|
49
65
|
export declare function isCompactionMemoryMessage(message: ChatMessage): boolean;
|
|
50
66
|
/** Prefix used when writing a compacted memory system message. */
|
|
@@ -69,3 +85,14 @@ export declare function compactMessages(messages: ChatMessage[], options?: Compa
|
|
|
69
85
|
* can report the failure and the original messages stay untouched.
|
|
70
86
|
*/
|
|
71
87
|
export declare function compactMessagesWithSummary(messages: ChatMessage[], summarize: (prompt: string) => Promise<string>, options?: CompactOptions, sessionTranscript?: string | undefined): Promise<CompactResult>;
|
|
88
|
+
/**
|
|
89
|
+
* Whether an auto-compact result is safe to apply.
|
|
90
|
+
* Only structural / quality gates — never "afterTokens must be under N".
|
|
91
|
+
*/
|
|
92
|
+
export declare function shouldApplyAutoCompact(input: {
|
|
93
|
+
summarized: boolean;
|
|
94
|
+
summaryBody: string;
|
|
95
|
+
beforeTokens: number;
|
|
96
|
+
afterTokens: number;
|
|
97
|
+
afterMessages: readonly ChatMessage[];
|
|
98
|
+
}): boolean;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { redactSecrets } from "../llm/provider.js";
|
|
2
2
|
import { stripThinking } from "../ui/thinking.js";
|
|
3
|
-
import { expandKeepStartForToolPairs } from "./tool-history.js";
|
|
3
|
+
import { expandKeepStartForToolPairs, hasOrphanToolMessages, } from "./tool-history.js";
|
|
4
4
|
import { buildCompactionUserPrompt, trimTranscriptForCompaction, } from "./compaction-summary.js";
|
|
5
5
|
/**
|
|
6
6
|
* Per-char token estimator. Real tokenization varies by provider, but for
|
|
@@ -26,10 +26,36 @@ export function estimateMessagesTokens(messages) {
|
|
|
26
26
|
/**
|
|
27
27
|
* Agent-loop auto-compact threshold (estimated tokens). Shared with `/context`
|
|
28
28
|
* so the reported % of budget matches when auto-compaction fires.
|
|
29
|
+
*
|
|
30
|
+
* 100k (was 150k): thinking models balloon context; implement turns with large
|
|
31
|
+
* tool artifacts hit mid-100k before the old threshold and then fail streams.
|
|
32
|
+
* Earlier compact keeps implement/plan loops healthier without constant /compact.
|
|
33
|
+
*/
|
|
34
|
+
export const AUTO_COMPACT_TOKEN_BUDGET = 100_000;
|
|
35
|
+
/**
|
|
36
|
+
* Soft post-compact band we *prefer* (includes system prompt ~8k).
|
|
37
|
+
* Achieved by dense memory + progressive soft-trim of oversized dumps only.
|
|
38
|
+
* Never a reject gate, never drops messages/tool pairs to hit the number.
|
|
39
|
+
*/
|
|
40
|
+
export const POST_COMPACT_SOFT_GUIDANCE_TOKENS = 16_000;
|
|
41
|
+
/** Prefer landing at or under this; still accept if content needs more room. */
|
|
42
|
+
export const POST_COMPACT_SOFT_UPPER_BAND_TOKENS = 20_000;
|
|
43
|
+
/**
|
|
44
|
+
* Progressive soft-trim tiers for the kept tail. Start generous; only step
|
|
45
|
+
* tighter if estimate is still above the soft upper band. Never blanks a
|
|
46
|
+
* message or removes tool pairs.
|
|
29
47
|
*/
|
|
30
|
-
|
|
48
|
+
const TAIL_SOFT_TIERS = [
|
|
49
|
+
{ tool: 6_000, assistant: 8_000, user: 8_000 },
|
|
50
|
+
{ tool: 4_000, assistant: 5_000, user: 6_000 },
|
|
51
|
+
{ tool: 2_500, assistant: 3_500, user: 4_000 },
|
|
52
|
+
];
|
|
53
|
+
/** Auto-compact: reject empty/near-empty memory after large history (amnesia). */
|
|
54
|
+
export const AUTO_COMPACT_STUB_MIN_CHARS = 120;
|
|
55
|
+
export const AUTO_COMPACT_STUB_BEFORE_TOKENS = 20_000;
|
|
31
56
|
const DEFAULT_BUDGET_TOKENS = 32_000;
|
|
32
|
-
|
|
57
|
+
/** Default keepRecent for mechanical compact; LLM auto path uses 2 via runner. */
|
|
58
|
+
const DEFAULT_KEEP_RECENT = 2;
|
|
33
59
|
/**
|
|
34
60
|
* Content prefixes that mark a `role:"system"` message as compacted session
|
|
35
61
|
* memory (vs. the main system prompt or transient injected guidance). Exported
|
|
@@ -41,8 +67,9 @@ export const COMPACTION_MEMORY_PREFIX = "Session memory from compacted earlier t
|
|
|
41
67
|
/**
|
|
42
68
|
* Plan-mode research handoff memory (pre-implement compact). Distinct so the
|
|
43
69
|
* agent does not treat plan-mode gather-only history as permanent gates.
|
|
70
|
+
* Explicitly ties this context to the plan/tasks the implementer is seeing.
|
|
44
71
|
*/
|
|
45
|
-
export const PLAN_IMPLEMENT_MEMORY_PREFIX = "Session memory from
|
|
72
|
+
export const PLAN_IMPLEMENT_MEMORY_PREFIX = "Session memory from PLAN MODE research that was used to build the comprehensive detailed plan and tasks you are seeing now (handoff to agent implement — gather-only phase is over; execute approved tasks):";
|
|
46
73
|
export const MECHANICAL_MEMORY_PREFIX = "Earlier turns in this session, summarized";
|
|
47
74
|
export function isCompactionMemoryMessage(message) {
|
|
48
75
|
return (message.role === "system" &&
|
|
@@ -205,20 +232,26 @@ export async function compactMessagesWithSummary(messages, summarize, options =
|
|
|
205
232
|
throw new Error("compaction failed: model returned an empty summary");
|
|
206
233
|
}
|
|
207
234
|
const head = start === 1 ? [messages[0]] : [];
|
|
208
|
-
|
|
209
|
-
// survives compaction into the model's context.
|
|
210
|
-
const tail = messages.slice(tailStart).map((msg) => {
|
|
211
|
-
if (msg.role === "assistant" && /<think/i.test(msg.content)) {
|
|
212
|
-
return { ...msg, content: stripThinking(msg.content).visible };
|
|
213
|
-
}
|
|
214
|
-
return msg;
|
|
215
|
-
});
|
|
235
|
+
const rawTail = messages.slice(tailStart);
|
|
216
236
|
const memoryPrefix = compactionMemoryPrefixForPurpose(options.purpose);
|
|
217
|
-
const
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
237
|
+
const memoryMsg = {
|
|
238
|
+
role: "system",
|
|
239
|
+
content: `${memoryPrefix}\n\n${summary}`,
|
|
240
|
+
};
|
|
241
|
+
// Prefer ~16–20k: start with a generous lean tail, then progressively
|
|
242
|
+
// soft-trim oversized dumps only while still over the soft upper band.
|
|
243
|
+
// Never drop messages or tool pairs. If still high after last tier, accept.
|
|
244
|
+
let compacted = buildLeanCompact(head, memoryMsg, rawTail, TAIL_SOFT_TIERS[0]);
|
|
245
|
+
for (let i = 1; i < TAIL_SOFT_TIERS.length; i += 1) {
|
|
246
|
+
if (estimateMessagesTokens(compacted) <= POST_COMPACT_SOFT_UPPER_BAND_TOKENS) {
|
|
247
|
+
break;
|
|
248
|
+
}
|
|
249
|
+
compacted = buildLeanCompact(head, memoryMsg, rawTail, TAIL_SOFT_TIERS[i]);
|
|
250
|
+
}
|
|
251
|
+
// Structural safety only — never reject because afterTokens > soft band.
|
|
252
|
+
if (hasOrphanToolMessages(compacted)) {
|
|
253
|
+
throw new Error("compaction failed: would produce orphan tool messages — keeping full history");
|
|
254
|
+
}
|
|
222
255
|
const afterTokens = estimateMessagesTokens(compacted);
|
|
223
256
|
return {
|
|
224
257
|
messages: compacted,
|
|
@@ -229,6 +262,81 @@ export async function compactMessagesWithSummary(messages, summarize, options =
|
|
|
229
262
|
summarized: true,
|
|
230
263
|
};
|
|
231
264
|
}
|
|
265
|
+
function buildLeanCompact(head, memoryMsg, rawTail, preferMax) {
|
|
266
|
+
return [...head, memoryMsg, ...leanTailMessages(rawTail, preferMax)];
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Whether an auto-compact result is safe to apply.
|
|
270
|
+
* Only structural / quality gates — never "afterTokens must be under N".
|
|
271
|
+
*/
|
|
272
|
+
export function shouldApplyAutoCompact(input) {
|
|
273
|
+
if (!input.summarized)
|
|
274
|
+
return false;
|
|
275
|
+
// Must actually shrink (otherwise pointless and can thrash).
|
|
276
|
+
if (input.afterTokens >= input.beforeTokens)
|
|
277
|
+
return false;
|
|
278
|
+
if (hasOrphanToolMessages([...input.afterMessages]))
|
|
279
|
+
return false;
|
|
280
|
+
const body = input.summaryBody.trim();
|
|
281
|
+
if (!body)
|
|
282
|
+
return false;
|
|
283
|
+
// Amnesia stub only — not a target-size check.
|
|
284
|
+
if (input.beforeTokens >= AUTO_COMPACT_STUB_BEFORE_TOKENS &&
|
|
285
|
+
body.length < AUTO_COMPACT_STUB_MIN_CHARS) {
|
|
286
|
+
return false;
|
|
287
|
+
}
|
|
288
|
+
return true;
|
|
289
|
+
}
|
|
290
|
+
function isStaleDurableSystem(content) {
|
|
291
|
+
return (content.startsWith("ACTIVE PLAN") ||
|
|
292
|
+
content.startsWith("SESSION STATE") ||
|
|
293
|
+
content.startsWith("ENGAGEMENT SCOPE") ||
|
|
294
|
+
content.startsWith("TASK ANALYSIS") ||
|
|
295
|
+
content.includes("SESSION STATE / WORKING MEMORY"));
|
|
296
|
+
}
|
|
297
|
+
/** Soft head+tail prefer — only when a single message is huge waste. */
|
|
298
|
+
function preferTrimContent(text, preferMax) {
|
|
299
|
+
if (text.length <= preferMax)
|
|
300
|
+
return text;
|
|
301
|
+
const half = Math.floor((preferMax - 48) / 2);
|
|
302
|
+
if (half < 120)
|
|
303
|
+
return text; // don't mangle medium messages
|
|
304
|
+
return `${text.slice(0, half)}\n…(trimmed oversized dump in compact tail; full may be on disk)…\n${text.slice(-half)}`;
|
|
305
|
+
}
|
|
306
|
+
function leanTailMessages(tail, preferMax) {
|
|
307
|
+
return tail
|
|
308
|
+
.filter((msg) => {
|
|
309
|
+
// Fresh plan/session are re-injected after compact — drop stale copies.
|
|
310
|
+
if (msg.role === "system" && isStaleDurableSystem(msg.content)) {
|
|
311
|
+
return false;
|
|
312
|
+
}
|
|
313
|
+
// Drop prior compaction memory from the tail (new memory is the prefix).
|
|
314
|
+
if (isCompactionMemoryMessage(msg))
|
|
315
|
+
return false;
|
|
316
|
+
return true;
|
|
317
|
+
})
|
|
318
|
+
.map((msg) => {
|
|
319
|
+
if (msg.role === "tool") {
|
|
320
|
+
return { ...msg, content: preferTrimContent(msg.content, preferMax.tool) };
|
|
321
|
+
}
|
|
322
|
+
if (msg.role === "assistant") {
|
|
323
|
+
const visible = /<think/i.test(msg.content)
|
|
324
|
+
? stripThinking(msg.content).visible
|
|
325
|
+
: msg.content;
|
|
326
|
+
return {
|
|
327
|
+
...msg,
|
|
328
|
+
content: preferTrimContent(visible, preferMax.assistant),
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
if (msg.role === "user") {
|
|
332
|
+
return {
|
|
333
|
+
...msg,
|
|
334
|
+
content: preferTrimContent(msg.content, preferMax.user),
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
return msg;
|
|
338
|
+
});
|
|
339
|
+
}
|
|
232
340
|
function oneLine(text, maxChars) {
|
|
233
341
|
const cleaned = text.replace(/\s+/g, " ").trim();
|
|
234
342
|
if (cleaned.length <= maxChars)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-manager.js","sourceRoot":"","sources":["../../src/agent/context-manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"context-manager.js","sourceRoot":"","sources":["../../src/agent/context-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Soft orientation for continue / mid-work recovery after interruptions.
|
|
3
|
+
*
|
|
4
|
+
* Professional agents (Claude Code, Cursor, etc.) re-attach to interrupted
|
|
5
|
+
* work: live jobs, open tasks, last tools — they do not skip ahead and mark
|
|
6
|
+
* plan items done. This is guidance + facts, not a hard gate.
|
|
7
|
+
*/
|
|
8
|
+
import type { SessionPlan } from "../store/plan.js";
|
|
9
|
+
import type { ChatMessage } from "../types.js";
|
|
10
|
+
import type { BackgroundJob } from "../tools/jobs.js";
|
|
11
|
+
export declare const CONTINUE_ORIENT_PREFIX = "CONTINUE / RECOVER MID-WORK";
|
|
12
|
+
/** User is asking to pick up after a pause, error, or short nudge. */
|
|
13
|
+
export declare function looksLikeContinueOrResumePrompt(prompt: string): boolean;
|
|
14
|
+
export interface ContinueOrientInput {
|
|
15
|
+
readonly prompt: string;
|
|
16
|
+
readonly history?: readonly ChatMessage[] | undefined;
|
|
17
|
+
readonly plan?: SessionPlan | undefined;
|
|
18
|
+
readonly runningJobs?: readonly BackgroundJob[] | undefined;
|
|
19
|
+
readonly recentJobs?: readonly BackgroundJob[] | undefined;
|
|
20
|
+
/** Skip for pure Q&A / social — never force re-attach on "what did you find?" */
|
|
21
|
+
readonly informationalQuery?: boolean | undefined;
|
|
22
|
+
readonly idleOrSocial?: boolean | undefined;
|
|
23
|
+
}
|
|
24
|
+
export interface RecentToolHint {
|
|
25
|
+
readonly name: string;
|
|
26
|
+
readonly ok?: boolean | undefined;
|
|
27
|
+
readonly head: string;
|
|
28
|
+
}
|
|
29
|
+
/** Last few tool results from history (newest last), high-signal one-liners. */
|
|
30
|
+
export declare function extractRecentToolHints(history: readonly ChatMessage[] | undefined, limit?: number): RecentToolHint[];
|
|
31
|
+
/**
|
|
32
|
+
* Whether this turn should receive mid-work recovery orientation.
|
|
33
|
+
* Soft: continue phrasing, or open plan work / live jobs with prior history.
|
|
34
|
+
*/
|
|
35
|
+
export declare function shouldInjectContinueOrientation(input: ContinueOrientInput): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Factual briefing + soft procedure. Empty string if nothing useful to say.
|
|
38
|
+
*/
|
|
39
|
+
export declare function buildContinueOrientation(input: ContinueOrientInput): string;
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Soft orientation for continue / mid-work recovery after interruptions.
|
|
3
|
+
*
|
|
4
|
+
* Professional agents (Claude Code, Cursor, etc.) re-attach to interrupted
|
|
5
|
+
* work: live jobs, open tasks, last tools — they do not skip ahead and mark
|
|
6
|
+
* plan items done. This is guidance + facts, not a hard gate.
|
|
7
|
+
*/
|
|
8
|
+
export const CONTINUE_ORIENT_PREFIX = "CONTINUE / RECOVER MID-WORK";
|
|
9
|
+
/** User is asking to pick up after a pause, error, or short nudge. */
|
|
10
|
+
export function looksLikeContinueOrResumePrompt(prompt) {
|
|
11
|
+
const t = prompt.replace(/\s+/g, " ").trim();
|
|
12
|
+
if (!t)
|
|
13
|
+
return false;
|
|
14
|
+
// Bare or short continue-family prompts
|
|
15
|
+
if (/^(?:continue|resume|proceed|keep\s+going|go\s+on|finish(?:\s+it)?|next|try\s+again|retry|pick\s+up)(?:\s+please)?[.!]?$/i.test(t)) {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
// Slightly longer but clearly recovery-oriented
|
|
19
|
+
if (/^(?:continue|resume|proceed|keep\s+going|go\s+on|finish|retry|try\s+again)\b.{0,80}$/i.test(t) &&
|
|
20
|
+
t.length < 100) {
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
if (/\b(?:continue\s+(?:from|where|the)|resume\s+(?:from|where|the)|pick\s+up\s+where|where\s+you\s+left\s+off|after\s+(?:the\s+)?(?:error|failure|timeout|interrupt))\b/i.test(t)) {
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
/** Last few tool results from history (newest last), high-signal one-liners. */
|
|
29
|
+
export function extractRecentToolHints(history, limit = 6) {
|
|
30
|
+
if (!history?.length)
|
|
31
|
+
return [];
|
|
32
|
+
const out = [];
|
|
33
|
+
for (let i = history.length - 1; i >= 0 && out.length < limit; i -= 1) {
|
|
34
|
+
const m = history[i];
|
|
35
|
+
if (m.role !== "tool")
|
|
36
|
+
continue;
|
|
37
|
+
const name = m.name?.trim() || guessToolName(m.content) || "tool";
|
|
38
|
+
const first = m.content
|
|
39
|
+
.split(/\r?\n/)
|
|
40
|
+
.map((l) => l.trim())
|
|
41
|
+
.find((l) => l.length > 0) ?? "";
|
|
42
|
+
out.push({
|
|
43
|
+
name,
|
|
44
|
+
...(typeof m.ok === "boolean" ? { ok: m.ok } : {}),
|
|
45
|
+
head: oneLine(first, 140),
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
return out.reverse();
|
|
49
|
+
}
|
|
50
|
+
function guessToolName(content) {
|
|
51
|
+
const m = content.match(/^Tool\s+(\S+)\s+result/i);
|
|
52
|
+
return m?.[1];
|
|
53
|
+
}
|
|
54
|
+
function oneLine(s, max) {
|
|
55
|
+
const t = s.replace(/\s+/g, " ").trim();
|
|
56
|
+
return t.length <= max ? t : `${t.slice(0, max - 1)}…`;
|
|
57
|
+
}
|
|
58
|
+
function jobLine(job) {
|
|
59
|
+
const cmd = oneLine(job.commandDisplay || job.command, 70);
|
|
60
|
+
const exit = job.exitCode !== undefined && job.exitCode !== null
|
|
61
|
+
? ` exit=${job.exitCode}`
|
|
62
|
+
: "";
|
|
63
|
+
return `[${job.id}] ${job.status}${exit} — ${cmd}`;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Whether this turn should receive mid-work recovery orientation.
|
|
67
|
+
* Soft: continue phrasing, or open plan work / live jobs with prior history.
|
|
68
|
+
*/
|
|
69
|
+
export function shouldInjectContinueOrientation(input) {
|
|
70
|
+
if (input.informationalQuery || input.idleOrSocial)
|
|
71
|
+
return false;
|
|
72
|
+
if (looksLikeContinueOrResumePrompt(input.prompt))
|
|
73
|
+
return true;
|
|
74
|
+
const hasHistory = (input.history?.length ?? 0) >= 2;
|
|
75
|
+
if (!hasHistory)
|
|
76
|
+
return false;
|
|
77
|
+
const openTask = input.plan?.tasks.some((t) => t.state === "in_progress" || t.state === "failed");
|
|
78
|
+
const liveJobs = (input.runningJobs?.length ?? 0) > 0;
|
|
79
|
+
// Recovery after provider/tool failure often looks like a short follow-up
|
|
80
|
+
// while work is still open (not necessarily the word "continue").
|
|
81
|
+
if ((openTask || liveJobs) && input.prompt.trim().length < 160) {
|
|
82
|
+
// Avoid hijacking a brand-new concrete request mid-session.
|
|
83
|
+
if (/\b(?:new\s+(?:task|plan|feature)|start\s+over|from\s+scratch|ignore\s+(?:the\s+)?(?:plan|previous)|different\s+(?:target|project))\b/i.test(input.prompt)) {
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
// Short nudges with open work → re-attach
|
|
87
|
+
if (/^(?:ok|okay|yes|y|go|do\s+it|keep\s+going|and\s+then|what\s+next|now\s+what)[.!]?$/i.test(input.prompt.trim()) ||
|
|
88
|
+
looksLikeContinueOrResumePrompt(input.prompt)) {
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Factual briefing + soft procedure. Empty string if nothing useful to say.
|
|
96
|
+
*/
|
|
97
|
+
export function buildContinueOrientation(input) {
|
|
98
|
+
if (!shouldInjectContinueOrientation(input))
|
|
99
|
+
return "";
|
|
100
|
+
const lines = [
|
|
101
|
+
CONTINUE_ORIENT_PREFIX,
|
|
102
|
+
"The prior turn may have been interrupted (provider error, timeout, user cancel, or a long job still running).",
|
|
103
|
+
"Re-attach to real work before advancing the plan. Do not mark tasks done or skip ahead without fresh evidence from tools this turn.",
|
|
104
|
+
];
|
|
105
|
+
const plan = input.plan;
|
|
106
|
+
if (plan) {
|
|
107
|
+
const open = plan.tasks.filter((t) => t.state === "in_progress");
|
|
108
|
+
const failed = plan.tasks.filter((t) => t.state === "failed");
|
|
109
|
+
const pending = plan.tasks.filter((t) => t.state === "pending");
|
|
110
|
+
lines.push(`Plan goal: ${oneLine(plan.goal, 120)} (status=${plan.status}, kind=${plan.kind ?? "?"})`);
|
|
111
|
+
if (open.length) {
|
|
112
|
+
lines.push(`In progress: ${open.map((t) => `[${t.id}] ${oneLine(t.title, 60)}`).join("; ")}`);
|
|
113
|
+
}
|
|
114
|
+
if (failed.length) {
|
|
115
|
+
lines.push(`Failed (retry with evidence, do not skip): ${failed.map((t) => `[${t.id}] ${oneLine(t.title, 50)}`).join("; ")}`);
|
|
116
|
+
}
|
|
117
|
+
if (pending.length) {
|
|
118
|
+
lines.push(`Pending (only after current open work is honestly finished): ${pending
|
|
119
|
+
.slice(0, 6)
|
|
120
|
+
.map((t) => `[${t.id}] ${oneLine(t.title, 40)}`)
|
|
121
|
+
.join("; ")}`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
const running = input.runningJobs ?? [];
|
|
125
|
+
const recent = input.recentJobs ?? [];
|
|
126
|
+
if (running.length) {
|
|
127
|
+
lines.push("Live background jobs (check before starting the same work again):");
|
|
128
|
+
for (const j of running.slice(0, 8))
|
|
129
|
+
lines.push(` ${jobLine(j)}`);
|
|
130
|
+
}
|
|
131
|
+
else if (recent.length) {
|
|
132
|
+
const interesting = recent
|
|
133
|
+
.filter((j) => /ffuf|nmap|nuclei|gobuster|ferox|masscan|hydra|sqlmap|cargo|npm|vite|next|pytest|jest|docker|make|build/i.test(j.commandDisplay || j.command))
|
|
134
|
+
.slice(0, 6);
|
|
135
|
+
if (interesting.length) {
|
|
136
|
+
lines.push("Recent jobs (may have finished while offline — tail before re-running):");
|
|
137
|
+
for (const j of interesting)
|
|
138
|
+
lines.push(` ${jobLine(j)}`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
const tools = extractRecentToolHints(input.history, 6);
|
|
142
|
+
if (tools.length) {
|
|
143
|
+
lines.push("Last tool results in context (do not invent outcomes):");
|
|
144
|
+
for (const t of tools) {
|
|
145
|
+
const ok = t.ok === true ? "ok" : t.ok === false ? "fail" : "?";
|
|
146
|
+
lines.push(` ${t.name} [${ok}]: ${t.head}`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
lines.push("Suggested order (adapt to evidence):", "1) shell.jobs — see what is still running or just finished.", "2) shell.tail on relevant job ids (or read saved artifacts) — harvest results before new work.", "3) Resume the in_progress / failed task with real tools; only then task.update done with proof.", "4) Start the next pending task only after the current one is honestly complete.", "Avoid busy-wait loops (sleep/poll with no progress). Prefer background long jobs + other useful work, then tail.");
|
|
150
|
+
return lines.join("\n");
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=continue-orient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"continue-orient.js","sourceRoot":"","sources":["../../src/agent/continue-orient.ts"],"names":[],"mappings":"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"}
|