@pentoshi/clai 3.8.19 → 3.8.21

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.
Files changed (176) hide show
  1. package/README.md +8 -5
  2. package/dist/agent/compaction-summary.d.ts +1 -1
  3. package/dist/agent/compaction-summary.js +3 -2
  4. package/dist/agent/compaction-summary.js.map +1 -1
  5. package/dist/agent/context-breakdown.d.ts +37 -0
  6. package/dist/agent/context-breakdown.js +145 -0
  7. package/dist/agent/context-breakdown.js.map +1 -0
  8. package/dist/agent/context-manager.d.ts +29 -2
  9. package/dist/agent/context-manager.js +125 -17
  10. package/dist/agent/context-manager.js.map +1 -1
  11. package/dist/agent/continue-orient.d.ts +39 -0
  12. package/dist/agent/continue-orient.js +152 -0
  13. package/dist/agent/continue-orient.js.map +1 -0
  14. package/dist/agent/reliability-policy.d.ts +85 -0
  15. package/dist/agent/reliability-policy.js +158 -0
  16. package/dist/agent/reliability-policy.js.map +1 -0
  17. package/dist/agent/runner.js +280 -141
  18. package/dist/agent/runner.js.map +1 -1
  19. package/dist/agent/session-state.d.ts +13 -1
  20. package/dist/agent/session-state.js +30 -17
  21. package/dist/agent/session-state.js.map +1 -1
  22. package/dist/agent/stop-summary.d.ts +2 -2
  23. package/dist/agent/stop-summary.js +23 -4
  24. package/dist/agent/stop-summary.js.map +1 -1
  25. package/dist/agent/task-evidence.js +13 -0
  26. package/dist/agent/task-evidence.js.map +1 -1
  27. package/dist/agent/tool-history.d.ts +12 -0
  28. package/dist/agent/tool-history.js +159 -0
  29. package/dist/agent/tool-history.js.map +1 -1
  30. package/dist/agent/tool-output-formatting.d.ts +4 -0
  31. package/dist/agent/tool-output-formatting.js +21 -8
  32. package/dist/agent/tool-output-formatting.js.map +1 -1
  33. package/dist/app/controllers/session-compact-helper.d.ts +2 -0
  34. package/dist/app/controllers/session-compact-helper.js +14 -5
  35. package/dist/app/controllers/session-compact-helper.js.map +1 -1
  36. package/dist/app/controllers/session-controller.d.ts +6 -0
  37. package/dist/app/controllers/session-controller.js +27 -2
  38. package/dist/app/controllers/session-controller.js.map +1 -1
  39. package/dist/commands/providers.js +57 -26
  40. package/dist/commands/providers.js.map +1 -1
  41. package/dist/index.js +3 -3
  42. package/dist/index.js.map +1 -1
  43. package/dist/llm/gemini.js +4 -1
  44. package/dist/llm/gemini.js.map +1 -1
  45. package/dist/llm/http.js +22 -12
  46. package/dist/llm/http.js.map +1 -1
  47. package/dist/llm/key-rotation.d.ts +52 -0
  48. package/dist/llm/key-rotation.js +122 -0
  49. package/dist/llm/key-rotation.js.map +1 -0
  50. package/dist/llm/provider.d.ts +2 -0
  51. package/dist/llm/provider.js +8 -0
  52. package/dist/llm/provider.js.map +1 -1
  53. package/dist/llm/router.d.ts +15 -2
  54. package/dist/llm/router.js +318 -125
  55. package/dist/llm/router.js.map +1 -1
  56. package/dist/prompts/embedded.js +1 -1
  57. package/dist/prompts/embedded.js.map +1 -1
  58. package/dist/prompts/index.d.ts +25 -0
  59. package/dist/prompts/index.js +55 -7
  60. package/dist/prompts/index.js.map +1 -1
  61. package/dist/prompts/system.agent.md +4 -3
  62. package/dist/repl/slash-commands.js +14 -8
  63. package/dist/repl/slash-commands.js.map +1 -1
  64. package/dist/repl.d.ts +4 -1
  65. package/dist/repl.js +12 -2
  66. package/dist/repl.js.map +1 -1
  67. package/dist/store/config.d.ts +18 -0
  68. package/dist/store/config.js +9 -0
  69. package/dist/store/config.js.map +1 -1
  70. package/dist/store/history.d.ts +8 -0
  71. package/dist/store/history.js +38 -0
  72. package/dist/store/history.js.map +1 -1
  73. package/dist/store/keys.d.ts +55 -0
  74. package/dist/store/keys.js +226 -21
  75. package/dist/store/keys.js.map +1 -1
  76. package/dist/store/logs.js +35 -12
  77. package/dist/store/logs.js.map +1 -1
  78. package/dist/store/paths.d.ts +13 -0
  79. package/dist/store/paths.js +23 -1
  80. package/dist/store/paths.js.map +1 -1
  81. package/dist/store/session-workspace.d.ts +79 -0
  82. package/dist/store/session-workspace.js +199 -0
  83. package/dist/store/session-workspace.js.map +1 -0
  84. package/dist/tools/definitions.js +17 -2
  85. package/dist/tools/definitions.js.map +1 -1
  86. package/dist/tools/http.d.ts +10 -0
  87. package/dist/tools/http.js +293 -58
  88. package/dist/tools/http.js.map +1 -1
  89. package/dist/tools/pentest-workflows.js +38 -19
  90. package/dist/tools/pentest-workflows.js.map +1 -1
  91. package/dist/tools/registry.js +26 -2
  92. package/dist/tools/registry.js.map +1 -1
  93. package/dist/tools/shell.d.ts +1 -1
  94. package/dist/tui/format-keys.js +29 -6
  95. package/dist/tui/format-keys.js.map +1 -1
  96. package/dist/tui-v2/app/App.js +39 -1
  97. package/dist/tui-v2/app/App.js.map +1 -1
  98. package/dist/tui-v2/app/command-handlers.js +1 -2
  99. package/dist/tui-v2/app/command-handlers.js.map +1 -1
  100. package/dist/tui-v2/app/commands/config-commands.d.ts +1 -2
  101. package/dist/tui-v2/app/commands/config-commands.js +1 -11
  102. package/dist/tui-v2/app/commands/config-commands.js.map +1 -1
  103. package/dist/tui-v2/app/commands/key-commands.d.ts +1 -1
  104. package/dist/tui-v2/app/commands/key-commands.js +148 -63
  105. package/dist/tui-v2/app/commands/key-commands.js.map +1 -1
  106. package/dist/tui-v2/app/commands/picker-commands.js +13 -7
  107. package/dist/tui-v2/app/commands/picker-commands.js.map +1 -1
  108. package/dist/tui-v2/bootstrap/composition-root.js +8 -5
  109. package/dist/tui-v2/bootstrap/composition-root.js.map +1 -1
  110. package/dist/tui-v2/bootstrap/start-tui-v2.js +10 -4
  111. package/dist/tui-v2/bootstrap/start-tui-v2.js.map +1 -1
  112. package/dist/tui-v2/components/modal/keys-modal.d.ts +19 -0
  113. package/dist/tui-v2/components/modal/keys-modal.js +203 -0
  114. package/dist/tui-v2/components/modal/keys-modal.js.map +1 -0
  115. package/dist/tui-v2/components/modal/secret-modal.d.ts +3 -1
  116. package/dist/tui-v2/components/modal/secret-modal.js +110 -18
  117. package/dist/tui-v2/components/modal/secret-modal.js.map +1 -1
  118. package/dist/tui-v2/components/overlay/overlay-host.js +6 -2
  119. package/dist/tui-v2/components/overlay/overlay-host.js.map +1 -1
  120. package/dist/tui-v2/components/pager/pager-line.js +5 -2
  121. package/dist/tui-v2/components/pager/pager-line.js.map +1 -1
  122. package/dist/tui-v2/components/pager/pager.js +6 -3
  123. package/dist/tui-v2/components/pager/pager.js.map +1 -1
  124. package/dist/tui-v2/components/plan/use-pane-presence.d.ts +6 -4
  125. package/dist/tui-v2/components/plan/use-pane-presence.js +8 -45
  126. package/dist/tui-v2/components/plan/use-pane-presence.js.map +1 -1
  127. package/dist/tui-v2/components/toast/toast-anim.d.ts +5 -4
  128. package/dist/tui-v2/components/toast/toast-anim.js +10 -7
  129. package/dist/tui-v2/components/toast/toast-anim.js.map +1 -1
  130. package/dist/tui-v2/components/toast/toast-host.d.ts +9 -3
  131. package/dist/tui-v2/components/toast/toast-host.js +124 -26
  132. package/dist/tui-v2/components/toast/toast-host.js.map +1 -1
  133. package/dist/tui-v2/components/transcript/assistant-message.js +4 -1
  134. package/dist/tui-v2/components/transcript/assistant-message.js.map +1 -1
  135. package/dist/tui-v2/components/transcript/compacted-row.js +1 -1
  136. package/dist/tui-v2/components/transcript/compacted-row.js.map +1 -1
  137. package/dist/tui-v2/components/transcript/file-diff-card.js +3 -23
  138. package/dist/tui-v2/components/transcript/file-diff-card.js.map +1 -1
  139. package/dist/tui-v2/components/transcript/linkable-text.js +9 -2
  140. package/dist/tui-v2/components/transcript/linkable-text.js.map +1 -1
  141. package/dist/tui-v2/components/transcript/selectable-line.d.ts +22 -0
  142. package/dist/tui-v2/components/transcript/selectable-line.js +24 -0
  143. package/dist/tui-v2/components/transcript/selectable-line.js.map +1 -0
  144. package/dist/tui-v2/components/transcript/thinking-block.js +3 -1
  145. package/dist/tui-v2/components/transcript/thinking-block.js.map +1 -1
  146. package/dist/tui-v2/components/transcript/tool-card.d.ts +5 -3
  147. package/dist/tui-v2/components/transcript/tool-card.js +39 -33
  148. package/dist/tui-v2/components/transcript/tool-card.js.map +1 -1
  149. package/dist/tui-v2/components/transcript/use-click-without-drag.js +4 -1
  150. package/dist/tui-v2/components/transcript/use-click-without-drag.js.map +1 -1
  151. package/dist/tui-v2/components/transcript/user-message.js +1 -1
  152. package/dist/tui-v2/components/transcript/user-message.js.map +1 -1
  153. package/dist/tui-v2/controllers/overlay-controller.d.ts +42 -0
  154. package/dist/tui-v2/controllers/overlay-controller.js +53 -0
  155. package/dist/tui-v2/controllers/overlay-controller.js.map +1 -1
  156. package/dist/tui-v2/rendering/batch-sections.d.ts +15 -4
  157. package/dist/tui-v2/rendering/batch-sections.js +157 -64
  158. package/dist/tui-v2/rendering/batch-sections.js.map +1 -1
  159. package/dist/tui-v2/rendering/format-help.js +1 -1
  160. package/dist/tui-v2/rendering/format-help.js.map +1 -1
  161. package/dist/tui-v2/rendering/open-tool-output.js +10 -7
  162. package/dist/tui-v2/rendering/open-tool-output.js.map +1 -1
  163. package/dist/tui-v2/rendering/pager-markdown.d.ts +9 -0
  164. package/dist/tui-v2/rendering/pager-markdown.js +46 -0
  165. package/dist/tui-v2/rendering/pager-markdown.js.map +1 -1
  166. package/dist/tui-v2/rendering/pager-view-policy.d.ts +6 -3
  167. package/dist/tui-v2/rendering/pager-view-policy.js +9 -13
  168. package/dist/tui-v2/rendering/pager-view-policy.js.map +1 -1
  169. package/dist/tui-v2/rendering/sanitize-display.js +3 -1
  170. package/dist/tui-v2/rendering/sanitize-display.js.map +1 -1
  171. package/dist/tui-v2/state/transcript-reducer.js +70 -30
  172. package/dist/tui-v2/state/transcript-reducer.js.map +1 -1
  173. package/dist/types.d.ts +7 -0
  174. package/dist/version.generated.d.ts +2 -2
  175. package/dist/version.generated.js +2 -2
  176. package/package.json +1 -1
package/README.md CHANGED
@@ -220,7 +220,7 @@ Coding and general sysadmin work use the same agent (scaffold, debug, packages)
220
220
  | Provider | Default model | Free tier | Key prefix |
221
221
  |----------|---------------|-----------|------------|
222
222
  | Groq | `llama-3.3-70b-versatile` | ✓ | `gsk_` |
223
- | Gemini | `gemini-2.0-flash` | ✓ | `AIza` |
223
+ | Gemini | `gemini-2.0-flash` | ✓ | `AIza` / `AQ.` |
224
224
  | OpenRouter | `meta-llama/llama-3.3-70b-instruct:free` | ✓ | `sk-or-` |
225
225
  | OpenAI | `gpt-4o-mini` | — | `sk-` |
226
226
  | Anthropic | `claude-3-5-haiku-latest` | — | `sk-ant-` |
@@ -232,16 +232,19 @@ Coding and general sysadmin work use the same agent (scaffold, debug, packages)
232
232
  | Bynara | `mimo-v2.5-free` | ✓ | `sk_nry_` |
233
233
 
234
234
  ```sh
235
- clai set groq gsk_...
235
+ clai set groq gsk_... # store / append an API key (multi-key supported)
236
+ clai set groq gsk_another_... # add a second key for the same provider
236
237
  clai set gemini --from-env GEMINI_API_KEY
237
238
  echo "gsk_..." | clai set groq --stdin
238
239
  clai set ollama --url http://localhost:11434
239
- clai keys
240
+ clai keys # lists each key (masked) + sticky active ★
240
241
  clai use groq
241
- clai provider # picker shows selected model per provider
242
- clai unset groq
242
+ clai provider # picker shows selected model per provider
243
+ clai unset groq # removes ALL keys for that provider
243
244
  ```
244
245
 
246
+ In the TUI, **`/set`** opens a multi-row key editor (like `/scope`): add with `+`, remove rows, **Save**, or **Reset all**. **`/unset`** clears every key for the chosen provider. When several keys are stored, clai **rotates** on rate limits / auth / transient errors (one retry per key, then the next key in a circle) and shows a non-stacking toast (`using groq · …ab12` / `switching …`).
247
+
245
248
  Env overrides: `GROQ_API_KEY`, `GEMINI_API_KEY`, `OPENROUTER_API_KEY`, `OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, `NVIDIA_API_KEY`, `OLLAMA_HOST`, …
246
249
 
247
250
  ---
@@ -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 mostly under plan mode (research/roadmap). The next phase is agent implement — not gather-only.", "", "Organize under these exact section headings (skip a section only if empty):", "## User goals", "## Research evidence (facts from plan-mode tools)", "## Durable engagement rules (still apply in agent mode)", "## Plan-mode-only notes (historical — not current agent gates)", "## Commands/tools and results", "## Current state", "## Remaining work (post-accept tasks)", "## Open risks / failures", "", "CRITICAL separation:", "- Put EVIDENCE in Research evidence: targets, stack, ports, findings, artifact paths, OpenAPI notes, credentials status.", "- Durable engagement rules ONLY if they still bind implement (e.g. stay on remote target/scope, authorized testing, non-destructive default, do not treat clai workspace as the target).", "- Plan-mode-only notes: gather-only, await accept, do not exploit/implement yet, scaffold/write freezes that applied BEFORE accept. Label them explicitly as historical plan-mode — the implementer is past that phase.", "- Do NOT list plan-mode gather-only / read-only / no-mutate gates as if they still block approved task execution.", "- Live ACTIVE PLAN + task states will be re-injected separately; still preserve task progress and what research already covered so work is not repeated blindly.", "", "Preserve: recon evidence, fingerprinted stack, confirmed vs unconfirmed findings,", "targets/hosts in scope, credential/auth status, interesting features still to test,", "artifact paths, and anything the implementer needs that is not already in the live plan document.");
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;;;;;;;;;;;8UAWsS,CAAC;AAc/U,gDAAgD;AAChD,MAAM,UAAU,yBAAyB,CAAC,KAA4B;IACpE,MAAM,MAAM,GAAG,KAAK,CAAC,gBAAgB,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACpD,MAAM,YAAY,GAAG,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;IACpD,MAAM,OAAO,GAAG,KAAK,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACjD,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,KAAK,gBAAgB,CAAC;IAEzD,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,IAAI,MAAM,IAAI,YAAY,EAAE,CAAC;QAC3B,UAAU,GAAG,GAAG,MAAM,oCAAoC,YAAY,EAAE,CAAC;IAC3E,CAAC;SAAM,CAAC;QACN,UAAU,GAAG,MAAM,IAAI,YAAY,CAAC;IACtC,CAAC;IAED,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,IAAI,aAAa,EAAE,CAAC;QAClB,QAAQ,CAAC,IAAI,CACX,6HAA6H,EAC7H,iIAAiI,EACjI,EAAE,EACF,6EAA6E,EAC7E,eAAe,EACf,mDAAmD,EACnD,yDAAyD,EACzD,gEAAgE,EAChE,+BAA+B,EAC/B,kBAAkB,EAClB,uCAAuC,EACvC,0BAA0B,EAC1B,EAAE,EACF,sBAAsB,EACtB,0HAA0H,EAC1H,0LAA0L,EAC1L,yNAAyN,EACzN,mHAAmH,EACnH,kKAAkK,EAClK,EAAE,EACF,mFAAmF,EACnF,qFAAqF,EACrF,mGAAmG,CACpG,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,IAAI,CACX,yEAAyE,EACzE,uEAAuE,EACvE,EAAE,EACF,6EAA6E,EAC7E,eAAe,EACf,8BAA8B,EAC9B,mBAAmB,EACnB,+BAA+B,EAC/B,kBAAkB,EAClB,mBAAmB,EACnB,0BAA0B,EAC1B,EAAE,EACF,kFAAkF,EAClF,2EAA2E,EAC3E,uDAAuD,EACvD,EAAE,EACF,kDAAkD,EAClD,kKAAkK,EAClK,6GAA6G,EAC7G,iIAAiI,CAClI,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;IAE/E,IAAI,OAAO,EAAE,CAAC;QACZ,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,gDAAgD,EAAE,OAAO,CAAC,CAAC;IAC/E,CAAC;IAED,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;IACvD,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,6DAA6D;AAC7D,MAAM,CAAC,MAAM,iCAAiC,GAAG,MAAM,CAAC;AAExD,oEAAoE;AACpE,MAAM,UAAU,2BAA2B,CACzC,UAAkB,EAClB,MAAM,GAAG,iCAAiC;IAE1C,IAAI,UAAU,CAAC,MAAM,IAAI,MAAM;QAAE,OAAO,UAAU,CAAC;IACnD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;IAChC,OAAO,CACL,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;QACzB,wDAAwD;QACxD,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CACxB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"compaction-summary.js","sourceRoot":"","sources":["../../src/agent/compaction-summary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Estimate how a model request's context is composed (system / history / tools).
3
+ * Metadata-only: no prompt text is stored — only role counts and token estimates.
4
+ *
5
+ * Used for reliability ops and regression harnesses. Does not truncate context.
6
+ */
7
+ import type { ChatMessage, ToolDefinition } from "../types.js";
8
+ export interface ContextBreakdown {
9
+ /** Rough total estimated tokens for messages (+ tools if provided). */
10
+ readonly estimatedTotalTokens: number;
11
+ readonly systemTokens: number;
12
+ readonly userTokens: number;
13
+ readonly assistantTokens: number;
14
+ readonly toolResultTokens: number;
15
+ readonly toolSchemaTokens: number;
16
+ readonly messageCount: number;
17
+ readonly systemMessageCount: number;
18
+ readonly userMessageCount: number;
19
+ readonly assistantMessageCount: number;
20
+ readonly toolMessageCount: number;
21
+ /** High-level system subsections when detected by prefix. */
22
+ readonly systemParts: {
23
+ readonly constitutionTokens: number;
24
+ readonly planTokens: number;
25
+ readonly scopeTokens: number;
26
+ readonly sessionStateTokens: number;
27
+ readonly compactionMemoryTokens: number;
28
+ readonly otherSystemTokens: number;
29
+ };
30
+ readonly toolDefinitionCount: number;
31
+ }
32
+ /**
33
+ * Build a metadata-only breakdown of an assembled completion request.
34
+ */
35
+ export declare function buildContextBreakdown(messages: readonly ChatMessage[], tools?: readonly ToolDefinition[] | undefined): ContextBreakdown;
36
+ /** Flatten for audit/diagnostic logs (numeric keys only — no content). */
37
+ export declare function contextBreakdownAuditPayload(breakdown: ContextBreakdown): Record<string, number>;
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Estimate how a model request's context is composed (system / history / tools).
3
+ * Metadata-only: no prompt text is stored — only role counts and token estimates.
4
+ *
5
+ * Used for reliability ops and regression harnesses. Does not truncate context.
6
+ */
7
+ import { estimateMessagesTokens, estimateTokens, isCompactionMemoryMessage, COMPACTION_MEMORY_PREFIX, PLAN_IMPLEMENT_MEMORY_PREFIX, MECHANICAL_MEMORY_PREFIX, } from "./context-manager.js";
8
+ import { SESSION_STATE_PREFIX } from "./session-state.js";
9
+ function isPlanSystem(content) {
10
+ return content.startsWith("ACTIVE PLAN") || content.includes("\nACTIVE PLAN");
11
+ }
12
+ function isScopeSystem(content) {
13
+ return (content.startsWith("ENGAGEMENT SCOPE") ||
14
+ content.includes("\nENGAGEMENT SCOPE"));
15
+ }
16
+ function isSessionStateSystem(content) {
17
+ return (content.startsWith(SESSION_STATE_PREFIX) ||
18
+ content.includes(SESSION_STATE_PREFIX));
19
+ }
20
+ function isCompactionSystem(content) {
21
+ return (content.startsWith(COMPACTION_MEMORY_PREFIX) ||
22
+ content.startsWith(PLAN_IMPLEMENT_MEMORY_PREFIX) ||
23
+ content.startsWith(MECHANICAL_MEMORY_PREFIX) ||
24
+ // Message-shaped helper when role is system.
25
+ isCompactionMemoryMessage({ role: "system", content }));
26
+ }
27
+ /**
28
+ * Build a metadata-only breakdown of an assembled completion request.
29
+ */
30
+ export function buildContextBreakdown(messages, tools) {
31
+ let systemTokens = 0;
32
+ let userTokens = 0;
33
+ let assistantTokens = 0;
34
+ let toolResultTokens = 0;
35
+ let systemMessageCount = 0;
36
+ let userMessageCount = 0;
37
+ let assistantMessageCount = 0;
38
+ let toolMessageCount = 0;
39
+ let constitutionTokens = 0;
40
+ let planTokens = 0;
41
+ let scopeTokens = 0;
42
+ let sessionStateTokens = 0;
43
+ let compactionMemoryTokens = 0;
44
+ let otherSystemTokens = 0;
45
+ for (const message of messages) {
46
+ const tokens = estimateTokens(message.content) + 4;
47
+ switch (message.role) {
48
+ case "system": {
49
+ systemMessageCount += 1;
50
+ systemTokens += tokens;
51
+ if (isCompactionSystem(message.content)) {
52
+ compactionMemoryTokens += tokens;
53
+ }
54
+ else if (isPlanSystem(message.content)) {
55
+ planTokens += tokens;
56
+ }
57
+ else if (isScopeSystem(message.content)) {
58
+ scopeTokens += tokens;
59
+ }
60
+ else if (isSessionStateSystem(message.content)) {
61
+ sessionStateTokens += tokens;
62
+ }
63
+ else if (systemMessageCount === 1 ||
64
+ /CURRENT MODE:|OUTCOME CONTRACT|# ROLE|# HONESTY/i.test(message.content)) {
65
+ // Primary system / composed constitution (often message[0]).
66
+ constitutionTokens += tokens;
67
+ }
68
+ else {
69
+ otherSystemTokens += tokens;
70
+ }
71
+ break;
72
+ }
73
+ case "user":
74
+ userMessageCount += 1;
75
+ userTokens += tokens;
76
+ break;
77
+ case "assistant":
78
+ assistantMessageCount += 1;
79
+ assistantTokens += tokens;
80
+ if (message.toolCalls?.length) {
81
+ assistantTokens += estimateTokens(JSON.stringify(message.toolCalls));
82
+ }
83
+ break;
84
+ case "tool":
85
+ toolMessageCount += 1;
86
+ toolResultTokens += tokens;
87
+ break;
88
+ default:
89
+ otherSystemTokens += tokens;
90
+ break;
91
+ }
92
+ }
93
+ let toolSchemaTokens = 0;
94
+ const toolDefinitionCount = tools?.length ?? 0;
95
+ if (tools?.length) {
96
+ toolSchemaTokens = estimateTokens(JSON.stringify(tools));
97
+ }
98
+ const estimatedTotalTokens = estimateMessagesTokens([...messages]) + toolSchemaTokens;
99
+ return {
100
+ estimatedTotalTokens,
101
+ systemTokens,
102
+ userTokens,
103
+ assistantTokens,
104
+ toolResultTokens,
105
+ toolSchemaTokens,
106
+ messageCount: messages.length,
107
+ systemMessageCount,
108
+ userMessageCount,
109
+ assistantMessageCount,
110
+ toolMessageCount,
111
+ systemParts: {
112
+ constitutionTokens,
113
+ planTokens,
114
+ scopeTokens,
115
+ sessionStateTokens,
116
+ compactionMemoryTokens,
117
+ otherSystemTokens,
118
+ },
119
+ toolDefinitionCount,
120
+ };
121
+ }
122
+ /** Flatten for audit/diagnostic logs (numeric keys only — no content). */
123
+ export function contextBreakdownAuditPayload(breakdown) {
124
+ return {
125
+ estimatedTotalTokens: breakdown.estimatedTotalTokens,
126
+ systemTokens: breakdown.systemTokens,
127
+ userTokens: breakdown.userTokens,
128
+ assistantTokens: breakdown.assistantTokens,
129
+ toolResultTokens: breakdown.toolResultTokens,
130
+ toolSchemaTokens: breakdown.toolSchemaTokens,
131
+ messageCount: breakdown.messageCount,
132
+ systemMessageCount: breakdown.systemMessageCount,
133
+ userMessageCount: breakdown.userMessageCount,
134
+ assistantMessageCount: breakdown.assistantMessageCount,
135
+ toolMessageCount: breakdown.toolMessageCount,
136
+ constitutionTokens: breakdown.systemParts.constitutionTokens,
137
+ planTokens: breakdown.systemParts.planTokens,
138
+ scopeTokens: breakdown.systemParts.scopeTokens,
139
+ sessionStateTokens: breakdown.systemParts.sessionStateTokens,
140
+ compactionMemoryTokens: breakdown.systemParts.compactionMemoryTokens,
141
+ otherSystemTokens: breakdown.systemParts.otherSystemTokens,
142
+ toolDefinitionCount: breakdown.toolDefinitionCount,
143
+ };
144
+ }
145
+ //# sourceMappingURL=context-breakdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-breakdown.js","sourceRoot":"","sources":["../../src/agent/context-breakdown.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 AUTO_COMPACT_TOKEN_BUDGET = 150000;
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 plan-mode research (handoff to agent implement \u2014 gather-only phase is over; execute approved tasks):";
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
- export const AUTO_COMPACT_TOKEN_BUDGET = 150_000;
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
- const DEFAULT_KEEP_RECENT = 6;
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 plan-mode research (handoff to agent implement — gather-only phase is over; execute approved tasks):";
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
- // Strip <think> tags from tail messages so thinking content never
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 compacted = [
218
- ...head,
219
- { role: "system", content: `${memoryPrefix}\n\n${summary}` },
220
- ...tail,
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;