@prestyj/cli 5.28.1 → 5.29.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.
Files changed (316) hide show
  1. package/assets/motion/bin/contact-sheet.mjs +9 -3
  2. package/assets/motion/bin/cues.mjs +337 -0
  3. package/assets/motion/bin/library.mjs +53 -10
  4. package/assets/motion/bin/motion-blur.mjs +943 -0
  5. package/assets/motion/bin/motion-check.mjs +354 -3
  6. package/assets/motion/bin/music-fit.mjs +436 -0
  7. package/assets/motion/bin/pdf-extract.mjs +22 -10
  8. package/assets/motion/bin/reference-study.mjs +346 -0
  9. package/assets/motion/bin/score-synth.mjs +1052 -93
  10. package/assets/motion/library/README.md +50 -14
  11. package/assets/motion/library/kit/moves.js +1981 -0
  12. package/assets/motion/library/library.json +232 -0
  13. package/assets/motion/library/pieces/camera-rig/meta.json +13 -0
  14. package/assets/motion/library/pieces/camera-rig/piece.html +153 -0
  15. package/assets/motion/library/pieces/camera-rig/preview.jpg +0 -0
  16. package/assets/motion/library/pieces/chain-knock/meta.json +13 -0
  17. package/assets/motion/library/pieces/chain-knock/piece.html +195 -0
  18. package/assets/motion/library/pieces/chain-knock/preview.jpg +0 -0
  19. package/assets/motion/library/pieces/gather-to-logo/meta.json +13 -0
  20. package/assets/motion/library/pieces/gather-to-logo/piece.html +159 -0
  21. package/assets/motion/library/pieces/gather-to-logo/preview.jpg +0 -0
  22. package/assets/motion/library/pieces/morph-carry/meta.json +13 -0
  23. package/assets/motion/library/pieces/morph-carry/piece.html +173 -0
  24. package/assets/motion/library/pieces/morph-carry/preview.jpg +0 -0
  25. package/assets/motion/library/pieces/one-shape-journey/meta.json +13 -0
  26. package/assets/motion/library/pieces/one-shape-journey/piece.html +195 -0
  27. package/assets/motion/library/pieces/one-shape-journey/preview.jpg +0 -0
  28. package/assets/motion/library/pieces/open-from-subject/meta.json +13 -0
  29. package/assets/motion/library/pieces/open-from-subject/piece.html +168 -0
  30. package/assets/motion/library/pieces/open-from-subject/preview.jpg +0 -0
  31. package/assets/motion/library/pieces/request-to-result/meta.json +13 -0
  32. package/assets/motion/library/pieces/request-to-result/piece.html +212 -0
  33. package/assets/motion/library/pieces/request-to-result/preview.jpg +0 -0
  34. package/assets/motion/library/pieces/scale-dive/meta.json +13 -0
  35. package/assets/motion/library/pieces/scale-dive/piece.html +321 -0
  36. package/assets/motion/library/pieces/scale-dive/preview.jpg +0 -0
  37. package/assets/motion/library/pieces/screen-replica-steps/meta.json +13 -0
  38. package/assets/motion/library/pieces/screen-replica-steps/piece.html +366 -0
  39. package/assets/motion/library/pieces/screen-replica-steps/preview.jpg +0 -0
  40. package/assets/motion/library/pieces/zoom-into-card/meta.json +13 -0
  41. package/assets/motion/library/pieces/zoom-into-card/piece.html +179 -0
  42. package/assets/motion/library/pieces/zoom-into-card/preview.jpg +0 -0
  43. package/assets/motion/library/sheets/diagram.jpg +0 -0
  44. package/assets/motion/library/sheets/frame.jpg +0 -0
  45. package/assets/motion/library/sheets/transition.jpg +0 -0
  46. package/assets/motion/library/sheets/ui.jpg +0 -0
  47. package/assets/motion/references/build-sheet.md +206 -0
  48. package/assets/motion/references/runtime/determinism-rules.md +1 -1
  49. package/assets/motion/references/runtime/gsap-easing-and-stagger.md +29 -29
  50. package/assets/motion/references/runtime/inputs-and-assets.md +7 -12
  51. package/assets/motion/references/runtime/lint-validate-inspect.md +3 -3
  52. package/assets/motion/references/runtime/minimal-composition.md +1 -1
  53. package/assets/motion/references/runtime/preview-render.md +3 -3
  54. package/assets/motion/skills/app-walkthrough/SKILL.md +66 -0
  55. package/assets/motion/skills/before-after/SKILL.md +53 -0
  56. package/assets/motion/skills/brand-kit/SKILL.md +3 -3
  57. package/assets/motion/skills/dev-tool-video/SKILL.md +57 -0
  58. package/assets/motion/skills/launch-video/SKILL.md +62 -0
  59. package/assets/motion/skills/match-reference/SKILL.md +58 -0
  60. package/assets/motion/skills/motion/SKILL.md +78 -85
  61. package/assets/motion/skills/source-ingest/SKILL.md +17 -6
  62. package/assets/motion/skills/website-video/SKILL.md +59 -0
  63. package/assets/skills/bulletproof/SKILL.md +36 -11
  64. package/assets/skills/bulletproof/references/agent-surface.md +19 -9
  65. package/assets/skills/bulletproof/references/audit-protocol.md +20 -5
  66. package/assets/skills/bulletproof/references/platform-playbooks.md +5 -4
  67. package/assets/skills/bulletproof/references/provenance.md +26 -1
  68. package/assets/skills/bulletproof/references/secure-defaults.md +6 -5
  69. package/assets/skills/bulletproof/references/supply-chain.md +21 -17
  70. package/assets/skills/bulletproof/references/threat-landscape.md +28 -26
  71. package/assets/skills/bulletproof/references/verification.md +2 -0
  72. package/assets/skills/clarify/SKILL.md +25 -16
  73. package/assets/skills/code-review/SKILL.md +71 -13
  74. package/assets/skills/code-review/references/agent-diffs.md +27 -0
  75. package/assets/skills/code-review/references/tests.md +19 -0
  76. package/assets/skills/compliance-guard/SKILL.md +20 -5
  77. package/assets/skills/compliance-guard/references/artifacts.md +1 -1
  78. package/assets/skills/compliance-guard/references/eu-uk.md +16 -16
  79. package/assets/skills/compliance-guard/references/lawsuit-vectors.md +5 -5
  80. package/assets/skills/compliance-guard/references/provenance.md +41 -2
  81. package/assets/skills/compliance-guard/references/sector-gates.md +3 -3
  82. package/assets/skills/compliance-guard/references/security-baseline.md +2 -2
  83. package/assets/skills/compliance-guard/references/trigger-map.md +5 -5
  84. package/assets/skills/compliance-guard/references/us.md +27 -21
  85. package/assets/skills/durable/SKILL.md +87 -79
  86. package/assets/skills/durable/references/agent-db-safety.md +69 -0
  87. package/assets/skills/durable/references/backups-and-runtime.md +19 -12
  88. package/assets/skills/durable/references/migrations-and-schema.md +13 -6
  89. package/assets/skills/evidence-led-ui/SKILL.md +69 -127
  90. package/assets/skills/evidence-led-ui/references/anti-defaults.md +107 -208
  91. package/assets/skills/evidence-led-ui/references/direction.md +124 -0
  92. package/assets/skills/evidence-led-ui/references/production-contract.md +8 -0
  93. package/assets/skills/evidence-led-ui/references/provenance.md +24 -1
  94. package/assets/skills/lean/SKILL.md +90 -71
  95. package/assets/skills/lean/references/memory-and-processes.md +3 -2
  96. package/assets/skills/lean/references/playbooks.md +37 -12
  97. package/assets/skills/refactoring/SKILL.md +24 -3
  98. package/assets/skills/refactoring/references/agent-pitfalls.md +4 -1
  99. package/assets/skills/refactoring/references/legacy.md +21 -0
  100. package/assets/skills/root-cause/SKILL.md +20 -10
  101. package/assets/skills/shared-language/SKILL.md +16 -14
  102. package/assets/skills/tdd/SKILL.md +27 -15
  103. package/dist/app-sidecar.js +203 -47
  104. package/dist/app-sidecar.js.map +1 -1
  105. package/dist/cli.js +17 -26
  106. package/dist/cli.js.map +1 -1
  107. package/dist/core/acceptance-checks.d.ts +48 -0
  108. package/dist/core/acceptance-checks.js +144 -0
  109. package/dist/core/acceptance-checks.js.map +1 -0
  110. package/dist/core/agent-session.d.ts +106 -72
  111. package/dist/core/agent-session.js +539 -399
  112. package/dist/core/agent-session.js.map +1 -1
  113. package/dist/core/agents.d.ts +6 -5
  114. package/dist/core/agents.js.map +1 -1
  115. package/dist/core/ask-user.d.ts +90 -8
  116. package/dist/core/ask-user.js +124 -13
  117. package/dist/core/ask-user.js.map +1 -1
  118. package/dist/core/bundled-agents.js +1 -3
  119. package/dist/core/bundled-agents.js.map +1 -1
  120. package/dist/core/cache-diagnostics.d.ts +68 -0
  121. package/dist/core/cache-diagnostics.js +196 -0
  122. package/dist/core/cache-diagnostics.js.map +1 -0
  123. package/dist/core/cache-expiry.d.ts +87 -0
  124. package/dist/core/cache-expiry.js +111 -0
  125. package/dist/core/cache-expiry.js.map +1 -0
  126. package/dist/core/compaction/compactor.js +78 -48
  127. package/dist/core/compaction/compactor.js.map +1 -1
  128. package/dist/core/compaction/plan-step-policy.d.ts +46 -0
  129. package/dist/core/compaction/plan-step-policy.js +57 -0
  130. package/dist/core/compaction/plan-step-policy.js.map +1 -0
  131. package/dist/core/destructive-git-guard.d.ts +90 -0
  132. package/dist/core/destructive-git-guard.js +871 -0
  133. package/dist/core/destructive-git-guard.js.map +1 -0
  134. package/dist/core/event-bus.d.ts +3 -0
  135. package/dist/core/event-bus.js +5 -0
  136. package/dist/core/event-bus.js.map +1 -1
  137. package/dist/core/injection-detect.d.ts +38 -0
  138. package/dist/core/injection-detect.js +232 -0
  139. package/dist/core/injection-detect.js.map +1 -0
  140. package/dist/core/keep-awake.d.ts +88 -0
  141. package/dist/core/keep-awake.js +251 -0
  142. package/dist/core/keep-awake.js.map +1 -0
  143. package/dist/core/mcp/client.d.ts +72 -0
  144. package/dist/core/mcp/client.js +264 -41
  145. package/dist/core/mcp/client.js.map +1 -1
  146. package/dist/core/mcp/content.js +6 -2
  147. package/dist/core/mcp/content.js.map +1 -1
  148. package/dist/core/mcp/store.d.ts +6 -1
  149. package/dist/core/mcp/store.js +12 -1
  150. package/dist/core/mcp/store.js.map +1 -1
  151. package/dist/core/mcp/types.d.ts +18 -0
  152. package/dist/core/model-unavailable.d.ts +14 -0
  153. package/dist/core/model-unavailable.js +23 -0
  154. package/dist/core/model-unavailable.js.map +1 -0
  155. package/dist/core/node-debugger.d.ts +148 -0
  156. package/dist/core/node-debugger.js +642 -0
  157. package/dist/core/node-debugger.js.map +1 -0
  158. package/dist/core/package-threats.d.ts +18 -0
  159. package/dist/core/package-threats.js +168 -0
  160. package/dist/core/package-threats.js.map +1 -0
  161. package/dist/core/persistent-shell.d.ts +58 -6
  162. package/dist/core/persistent-shell.js +331 -49
  163. package/dist/core/persistent-shell.js.map +1 -1
  164. package/dist/core/process-manager.d.ts +14 -0
  165. package/dist/core/process-manager.js +61 -0
  166. package/dist/core/process-manager.js.map +1 -1
  167. package/dist/core/progress/git-xp.js +8 -14
  168. package/dist/core/progress/git-xp.js.map +1 -1
  169. package/dist/core/session-history.d.ts +12 -0
  170. package/dist/core/session-history.js +27 -0
  171. package/dist/core/session-history.js.map +1 -1
  172. package/dist/core/session-manager.d.ts +13 -1
  173. package/dist/core/session-manager.js +38 -18
  174. package/dist/core/session-manager.js.map +1 -1
  175. package/dist/core/session-summary-index.d.ts +37 -0
  176. package/dist/core/session-summary-index.js +172 -0
  177. package/dist/core/session-summary-index.js.map +1 -0
  178. package/dist/core/settings-manager.d.ts +2 -0
  179. package/dist/core/settings-manager.js +10 -0
  180. package/dist/core/settings-manager.js.map +1 -1
  181. package/dist/core/shell-threats-popular-packages.d.ts +11 -0
  182. package/dist/core/shell-threats-popular-packages.js +675 -0
  183. package/dist/core/shell-threats-popular-packages.js.map +1 -0
  184. package/dist/core/shell-threats.d.ts +8 -0
  185. package/dist/core/shell-threats.js +186 -0
  186. package/dist/core/shell-threats.js.map +1 -0
  187. package/dist/core/skills.js +3 -1
  188. package/dist/core/skills.js.map +1 -1
  189. package/dist/core/stream-rules.d.ts +30 -0
  190. package/dist/core/stream-rules.js +151 -0
  191. package/dist/core/stream-rules.js.map +1 -0
  192. package/dist/core/subagent-manager.d.ts +20 -5
  193. package/dist/core/subagent-manager.js +22 -8
  194. package/dist/core/subagent-manager.js.map +1 -1
  195. package/dist/core/subagent-receipt.d.ts +54 -0
  196. package/dist/core/subagent-receipt.js +276 -0
  197. package/dist/core/subagent-receipt.js.map +1 -0
  198. package/dist/core/subagent-turn-record.d.ts +2 -0
  199. package/dist/core/subagent-turn-record.js.map +1 -1
  200. package/dist/core/test-impact.d.ts +73 -0
  201. package/dist/core/test-impact.js +467 -0
  202. package/dist/core/test-impact.js.map +1 -0
  203. package/dist/core/thinking-level.d.ts +1 -1
  204. package/dist/core/thinking-level.js +1 -1
  205. package/dist/core/thinking-level.js.map +1 -1
  206. package/dist/core/verification-gate.d.ts +2 -0
  207. package/dist/core/verification-gate.js +4 -0
  208. package/dist/core/verification-gate.js.map +1 -1
  209. package/dist/core/verification-snapshot.js +3 -5
  210. package/dist/core/verification-snapshot.js.map +1 -1
  211. package/dist/core/workspace-guard.d.ts +18 -7
  212. package/dist/core/workspace-guard.js +227 -60
  213. package/dist/core/workspace-guard.js.map +1 -1
  214. package/dist/interactive.js +2 -1
  215. package/dist/interactive.js.map +1 -1
  216. package/dist/modes/subagent-worker-mode.js +34 -6
  217. package/dist/modes/subagent-worker-mode.js.map +1 -1
  218. package/dist/motion-agent/motion-agent.d.ts +6 -2
  219. package/dist/motion-agent/motion-agent.js +5 -7
  220. package/dist/motion-agent/motion-agent.js.map +1 -1
  221. package/dist/motion-agent/motion-prompt.d.ts +1 -1
  222. package/dist/motion-agent/motion-prompt.js +14 -19
  223. package/dist/motion-agent/motion-prompt.js.map +1 -1
  224. package/dist/motion-agent/motion-review.d.ts +10 -3
  225. package/dist/motion-agent/motion-review.js +15 -7
  226. package/dist/motion-agent/motion-review.js.map +1 -1
  227. package/dist/motion-agent/motion-studio-context.js +1 -1
  228. package/dist/motion-agent/motion-studio-context.js.map +1 -1
  229. package/dist/system-prompt.js +3 -1
  230. package/dist/system-prompt.js.map +1 -1
  231. package/dist/test-support/keep-alive.d.ts +14 -0
  232. package/dist/test-support/keep-alive.js +17 -0
  233. package/dist/test-support/keep-alive.js.map +1 -0
  234. package/dist/tools/ask-user.js +3 -3
  235. package/dist/tools/ask-user.js.map +1 -1
  236. package/dist/tools/bash-read-evidence.d.ts +10 -0
  237. package/dist/tools/bash-read-evidence.js +133 -0
  238. package/dist/tools/bash-read-evidence.js.map +1 -0
  239. package/dist/tools/bash.d.ts +10 -1
  240. package/dist/tools/bash.js +115 -7
  241. package/dist/tools/bash.js.map +1 -1
  242. package/dist/tools/debug.d.ts +54 -0
  243. package/dist/tools/debug.js +233 -0
  244. package/dist/tools/debug.js.map +1 -0
  245. package/dist/tools/edit.js +12 -4
  246. package/dist/tools/edit.js.map +1 -1
  247. package/dist/tools/goals.d.ts +1 -1
  248. package/dist/tools/index.d.ts +19 -2
  249. package/dist/tools/index.js +47 -7
  250. package/dist/tools/index.js.map +1 -1
  251. package/dist/tools/prompt-hints.js +2 -0
  252. package/dist/tools/prompt-hints.js.map +1 -1
  253. package/dist/tools/read-tracker.d.ts +5 -0
  254. package/dist/tools/read-tracker.js +19 -9
  255. package/dist/tools/read-tracker.js.map +1 -1
  256. package/dist/tools/read.js +3 -2
  257. package/dist/tools/read.js.map +1 -1
  258. package/dist/tools/skill.js +5 -0
  259. package/dist/tools/skill.js.map +1 -1
  260. package/dist/tools/subagent-control.js +44 -8
  261. package/dist/tools/subagent-control.js.map +1 -1
  262. package/dist/tools/subagent-shared.d.ts +29 -8
  263. package/dist/tools/subagent-shared.js +45 -14
  264. package/dist/tools/subagent-shared.js.map +1 -1
  265. package/dist/tools/subagent.d.ts +8 -2
  266. package/dist/tools/subagent.js +28 -10
  267. package/dist/tools/subagent.js.map +1 -1
  268. package/dist/tools/task-output.js +3 -2
  269. package/dist/tools/task-output.js.map +1 -1
  270. package/dist/tools/task-send.d.ts +1 -1
  271. package/dist/tools/task-send.js +15 -1
  272. package/dist/tools/task-send.js.map +1 -1
  273. package/dist/tools/tool-tiers.d.ts +2 -2
  274. package/dist/tools/tool-tiers.js +3 -2
  275. package/dist/tools/tool-tiers.js.map +1 -1
  276. package/dist/tools/truncate.d.ts +21 -0
  277. package/dist/tools/truncate.js +187 -0
  278. package/dist/tools/truncate.js.map +1 -1
  279. package/dist/tools/ui-adopt.js +2 -0
  280. package/dist/tools/ui-adopt.js.map +1 -1
  281. package/dist/ui/App.d.ts +0 -4
  282. package/dist/ui/App.js +5 -28
  283. package/dist/ui/App.js.map +1 -1
  284. package/dist/ui/components/ActivityIndicator.js +1 -0
  285. package/dist/ui/components/ActivityIndicator.js.map +1 -1
  286. package/dist/ui/hooks/useAgentLoop.d.ts +1 -8
  287. package/dist/ui/hooks/useAgentLoop.js +1 -119
  288. package/dist/ui/hooks/useAgentLoop.js.map +1 -1
  289. package/dist/ui/render.d.ts +0 -4
  290. package/dist/ui/render.js +0 -2
  291. package/dist/ui/render.js.map +1 -1
  292. package/dist/utils/git.d.ts +77 -0
  293. package/dist/utils/git.js +285 -21
  294. package/dist/utils/git.js.map +1 -1
  295. package/dist/utils/github-ci.js +2 -1
  296. package/dist/utils/github-ci.js.map +1 -1
  297. package/dist/utils/github.js +11 -9
  298. package/dist/utils/github.js.map +1 -1
  299. package/dist/utils/image.d.ts +14 -0
  300. package/dist/utils/image.js +16 -0
  301. package/dist/utils/image.js.map +1 -1
  302. package/dist/utils/process.d.ts +20 -0
  303. package/dist/utils/process.js +98 -0
  304. package/dist/utils/process.js.map +1 -1
  305. package/package.json +5 -5
  306. package/assets/motion/references/motion-language.md +0 -128
  307. package/assets/motion/skills/video-qa/SKILL.md +0 -89
  308. package/dist/core/ideal-review-subagent.d.ts +0 -56
  309. package/dist/core/ideal-review-subagent.js +0 -112
  310. package/dist/core/ideal-review-subagent.js.map +0 -1
  311. package/dist/core/ideal-review.d.ts +0 -82
  312. package/dist/core/ideal-review.js +0 -242
  313. package/dist/core/ideal-review.js.map +0 -1
  314. package/dist/motion-agent/motion-check-tool.d.ts +0 -35
  315. package/dist/motion-agent/motion-check-tool.js +0 -514
  316. package/dist/motion-agent/motion-check-tool.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import { type AgentTool } from "@prestyj/agent";
2
- import { type Message, type MessageProvenance, type Provider, type ThinkingLevel } from "@prestyj/ai";
2
+ import { type Message, type MessageProvenance, type Provider, type Usage, type ThinkingLevel } from "@prestyj/ai";
3
3
  import { EventBus } from "./event-bus.js";
4
4
  import { type CompletionReview } from "./completion-review.js";
5
5
  import { SlashCommandRegistry } from "./slash-commands.js";
@@ -9,6 +9,7 @@ import type { BackgroundProcess } from "./process-manager.js";
9
9
  import type { MCPElicitHandler } from "./mcp/index.js";
10
10
  import { type ContextLimits } from "./context-limits.js";
11
11
  import { type ImportForeignTranscriptResult } from "./foreign-session-import.js";
12
+ import { type CacheExpiryStatus } from "./cache-expiry.js";
12
13
  import { type EnhanceResult } from "../utils/prompt-enhancer.js";
13
14
  import { type VerificationEvidence } from "./verification-evidence.js";
14
15
  /** A chat attachment (image / video / other file) prepared for the model. The
@@ -162,7 +163,7 @@ export interface AgentSessionOptions {
162
163
  sessionRootDir?: string;
163
164
  /** Register EZ Coder built-in/prompt/custom slash commands. Defaults to true. */
164
165
  coderSlashCommands?: boolean;
165
- /** Enable loop-break, re-grounding, and Ideal review hooks. Defaults to true. */
166
+ /** Enable loop-break and re-grounding hooks. Defaults to true. */
166
167
  selfCorrectionHooks?: boolean;
167
168
  /** Override the semantic-loop judge LLM call (tests). Receives the finished
168
169
  * prompt, returns the model's raw reply. Default: one-shot `stream()` call
@@ -229,6 +230,7 @@ export declare class AgentSession {
229
230
  private autopilotMarkers;
230
231
  private appMarkers;
231
232
  private turnMetrics;
233
+ private readonly cacheDiagnostics;
232
234
  /** Internal-only (EZ_INTERNAL): live per-session cost/reliability recorder.
233
235
  * Absent entirely in public builds — see core/internal-diagnostics.ts. */
234
236
  private diagnosticsRecorder?;
@@ -240,6 +242,7 @@ export declare class AgentSession {
240
242
  /** Forgets every file read; called whenever the conversation is replaced or
241
243
  * rewound, so the model must re-read a file before changing it. */
242
244
  private clearReadTracker;
245
+ private recordBashReads;
243
246
  private skills;
244
247
  private cacheKeyLogged;
245
248
  private hookStats;
@@ -252,20 +255,6 @@ export declare class AgentSession {
252
255
  private hookFileEditCounts;
253
256
  private hookToolCalls;
254
257
  private backgroundVerification;
255
- private idealReviewPhase;
256
- /** Runtime-only suppression while Nolan owns verification in autopilot mode. */
257
- private idealReviewSuppressed;
258
- /** Mirror of the last `hook_armed` value broadcast this run, so the event
259
- * fires only on a real edge. */
260
- private idealReviewArmed;
261
- /** Cached test-drift probe, keyed by the size of the edited-file set. Drift
262
- * depends only on WHICH files were edited and that set only grows, so this
263
- * keeps the arming check off the filesystem on most tool results — the probe
264
- * is several sync existsSync calls per edited file. */
265
- private idealDriftProbe;
266
- private readonly reviewCoverage;
267
- /** Coverage follow-ups spent this run, capped by MAX_REVIEW_COVERAGE_INJECTIONS. */
268
- private reviewCoverageInjected;
269
258
  /** 0 = none; 1 = first nudge sent; 2 = final stop-and-report injected. */
270
259
  private loopBreakInjected;
271
260
  private regroundingInjected;
@@ -275,8 +264,6 @@ export declare class AgentSession {
275
264
  * injection at the next steering poll; judge failures fail open (no
276
265
  * injection) and still consume budget + cooldown. */
277
266
  private semanticLoop;
278
- /** Independent Ideal reviewer spawned once per run (score-gated). */
279
- private independentReviewStarted;
280
267
  /**
281
268
  * The environment as the cached system prompt currently describes it.
282
269
  * Re-recorded on every prompt build, so a rebuild (e.g. `/add-dir`) needs no
@@ -287,11 +274,12 @@ export declare class AgentSession {
287
274
  private runStartedAt;
288
275
  /** Gate injections spent this run, capped by MAX_PROCESS_GATE_INJECTIONS. */
289
276
  private processGateInjected;
290
- /** Verification gate: code edited this run, nothing proved it since. */
277
+ /** Verification gate: code edited this run, nothing proved it since. Always
278
+ * tracks evidence for run status; the `verificationGateEnabled` setting
279
+ * decides whether an unverified stop is also continued once. */
291
280
  private readonly verificationGate;
292
- /** Mirror of the last verification `hook_armed` value, so the event fires
293
- * only on a real edge. */
294
- private verificationArmed;
281
+ /** Mirror of the last `hook_armed` value, so the event fires only on an edge. */
282
+ private preFinalArmed;
295
283
  private compactionOccurred;
296
284
  /**
297
285
  * Re-grounding carry-over for post-turn compaction. `resetHookState` clears
@@ -304,6 +292,12 @@ export declare class AgentSession {
304
292
  private postTurnCompaction?;
305
293
  private lastCompactionCompacted;
306
294
  private compactionRetryAfter;
295
+ /**
296
+ * SoL-Pi plan-step compaction bookkeeping (see compaction/plan-step-policy.ts).
297
+ * Step progress comes from `[DONE:n]` markers in assistant text — the same
298
+ * contract the approved-plan UI tracks.
299
+ */
300
+ private planStepState;
307
301
  /** A restored oversized checkpoint must be canonicalized before its first prompt is persisted. */
308
302
  private deferredCompactionPending;
309
303
  /** Latest provider count, anchored to the assistant response it measured. */
@@ -311,8 +305,12 @@ export declare class AgentSession {
311
305
  private originalRequest;
312
306
  private userQueue;
313
307
  private queueSeq;
308
+ /** Instant interrupt: the running loop's preempt listeners, fired on queueMessage. */
309
+ private steeringListeners;
314
310
  private processManager?;
315
311
  private lspManager?;
312
+ private testImpact?;
313
+ private debugManager?;
316
314
  private subAgentManager?;
317
315
  /**
318
316
  * Out-of-band push notifications (finished children, background-process
@@ -460,6 +458,14 @@ export declare class AgentSession {
460
458
  * registration on an existing catalog would leave those tools unreachable.
461
459
  */
462
460
  private ensureToolSearchTool;
461
+ /**
462
+ * `wait_agent` is deferred, yet nearly every `spawn_agent` is followed by it,
463
+ * so the model spent a whole turn on `tool_search` just to load it (bench 41:
464
+ * ~6 s per fan-out). Promote it as soon as a spawn succeeds instead: the tool
465
+ * list grows exactly as it would after that `tool_search`, one turn earlier,
466
+ * and sessions that never spawn keep the smaller prefix.
467
+ */
468
+ private promoteWaitAgentAfterSpawn;
463
469
  /** Append tools, replacing any same-named entry (cached stub → live tool). */
464
470
  private replaceOrPushTools;
465
471
  /** Swap already-promoted cached stubs for their live equivalents, in place. */
@@ -518,10 +524,17 @@ export declare class AgentSession {
518
524
  private resetHookState;
519
525
  /**
520
526
  * Fold one agent event into the hook stat accumulators. Pure bookkeeping —
521
- * the same signals the TUI's useAgentLoop collects, so the loop-break and
522
- * ideal-review decisions match across the CLI and the app.
527
+ * the same signals the TUI's useAgentLoop collects, so loop-break decisions
528
+ * match across the CLI and the app.
523
529
  */
524
530
  private trackHookEvent;
531
+ /**
532
+ * Count full-file `cat` output from the step that just finished as reads, so
533
+ * an edit after `cat` does not cost a second read. Uses the step's results as
534
+ * stored in the transcript (after per-turn trimming): only bytes the model
535
+ * actually received count.
536
+ */
537
+ private creditBashReads;
525
538
  /**
526
539
  * Append every message added since the last flush to the session file.
527
540
  *
@@ -553,15 +566,6 @@ export declare class AgentSession {
553
566
  * cheaper routing: judging a model's own failure patterns with a weaker
554
567
  * model swaps false negatives for false positives. */
555
568
  private callSemanticLoopJudge;
556
- /** Independent fresh-context review of the finished work (Codex Guardian
557
- * pattern). Spawns a READ-ONLY child on the ACTIVE model, waits bounded,
558
- * and returns findings for the acting agent to address — or nothing when
559
- * the review passes, is unavailable, or fails (in-thread review remains the
560
- * fallback; the feature degrades, never blocks).
561
- *
562
- * Runs inside the pre-stop poll, so the candidate final answer is already
563
- * held by arming and this wait cannot race a streamed answer. */
564
- private runIndependentReview;
565
569
  /**
566
570
  * Turn-budget extension gate. The loop consults this instead of stopping
567
571
  * mid-task when it exhausts `maxTurns`. Grant ONLY on evidence of progress —
@@ -569,45 +573,31 @@ export declare class AgentSession {
569
573
  * with — so reuse the same stuck signals that drive the loop-breaker.
570
574
  */
571
575
  private shouldExtendTurnBudget;
572
- /**
573
- * Would the stop AFTER the current turn inject the Ideal review? Same inputs
574
- * as the pre-stop gate below, evaluated early so clients know a candidate
575
- * final answer is a review draft BEFORE it streams.
576
- *
577
- * The turn count is looked ahead by one on purpose. `hookStats.turns` only
578
- * advances at `turn_end`, so while the model is writing the draft the counter
579
- * still reads the PREVIOUS turn; the real gate sees one more. Without the
580
- * lookahead a run sitting on score 3 crosses to 4 on the draft's own
581
- * `turn_end` — after the text already streamed — which is precisely the
582
- * appear-then-vanish flash. Over-arming by one turn point costs only live
583
- * token streaming on a final answer that then shows whole; under-arming costs
584
- * the flash, so this errs toward arming.
585
- */
586
- private wouldInjectIdealReview;
587
- /** Would a stop right now inject the verification gate? Same conditions as
588
- * the pre-stop branch below, so arming and injection cannot disagree. */
589
- private wouldInjectVerification;
576
+ /** Is the pre-stop verification gate active for this session? Off by the
577
+ * `verificationGateEnabled` setting, by `selfCorrectionHooks: false`, and for
578
+ * allow-listed sessions that cannot run commands at all. */
579
+ private verificationGateActive;
580
+ /** Would a stop right now inject a pre-final follow-up? Queued LSP
581
+ * diagnostics (real errors injected below), a mode-owned completion review,
582
+ * or the verification gate can, so clients hold the candidate answer only
583
+ * then. Same conditions as the pre-stop branch, so arming and injection
584
+ * cannot disagree. */
585
+ private wouldInjectBeforeFinal;
590
586
  /** Broadcast pre-final hook arming on change. Both edges matter: armed=false
591
- * after the hook fires is what lets a client stream the REVIEWED final
592
- * answer live again.
593
- *
594
- * Callable before `initialize()`: the sidecar sets Nolan's review suppression
595
- * on a freshly constructed session, and every arming predicate below reads
596
- * settings that `initialize()` has not loaded yet. Nothing can be armed
597
- * before the session can run a turn, and the first `tool_result`/`turn_end`
598
- * recomputes both edges — so skipping is the correct answer, not a patch. */
587
+ * after the hook fires is what lets a client stream the final answer live
588
+ * again. Callable before `initialize()`, when no manager exists yet. */
599
589
  private refreshHookArming;
600
- private refreshVerificationArmed;
601
- private refreshIdealReviewArmed;
602
590
  /**
603
- * Pre-stop Ideal review phase machine. Once review starts, completion is
604
- * blocked until harness-owned post-injection reads cover every changed file.
591
+ * Pre-stop follow-ups: LSP errors, unread child agents and background
592
+ * processes, the verification gate (when `verificationGateEnabled`), and a
593
+ * mode-owned completion review.
605
594
  */
606
595
  private getHookFollowUpMessages;
607
- private reviewLspEvidence;
608
- private withReviewLspEvidence;
609
- /** Auto-compact if needed, run agent loop with auth retry, and persist messages. */
596
+ /** Wraps the real run: cancels an in-flight cache prewarm and tracks run
597
+ * activity / last real request time for {@link prewarm}. */
610
598
  private runLoop;
599
+ /** Auto-compact if needed, run agent loop with auth retry, and persist messages. */
600
+ private runLoopInner;
611
601
  switchModel(provider: string, model: string): Promise<void>;
612
602
  /**
613
603
  * Record the switch as its own trailing message at the point it happened,
@@ -634,6 +624,20 @@ export declare class AgentSession {
634
624
  * protect it.
635
625
  */
636
626
  private settlePostTurnCompaction;
627
+ /**
628
+ * Advance plan-step bookkeeping over the messages added since the last
629
+ * observation and, when a plan step was newly completed (`[DONE:n]`), run
630
+ * the SoL-Pi cost rule. Called between model steps (in-flight) and once
631
+ * after the run; `scanIndex` and `doneSteps` make each message and each
632
+ * step count once across both paths. Returns undefined when no step
633
+ * completed since the last observation.
634
+ */
635
+ private observePlanStepProgress;
636
+ /**
637
+ * Plan-step bookkeeping after ANY successful compaction (as in the bench:
638
+ * every compaction leaves a cache-write cost to be repaid by later savings).
639
+ */
640
+ private recordPlanStepCompaction;
637
641
  /**
638
642
  * Post-turn compaction: once the final response has been delivered, compact
639
643
  * in the background while the user reads the answer, instead of making the
@@ -642,7 +646,9 @@ export declare class AgentSession {
642
646
  * Codex `model_post_turn_compact_threshold_percent` guards: skip when user
643
647
  * input is already queued (it would race the next turn), when the run was
644
648
  * aborted, or during the failure cooldown — and never let a compaction
645
- * error surface in the completed turn.
649
+ * error surface in the completed turn. Besides the size trigger, a newly
650
+ * completed approved-plan step may compact when the cache-cost rule in
651
+ * compaction/plan-step-policy.ts says the shrink pays for itself.
646
652
  */
647
653
  private maybeCompactPostTurn;
648
654
  compact(existingCredentials?: {
@@ -688,13 +694,13 @@ export declare class AgentSession {
688
694
  size: number;
689
695
  costUsd?: number;
690
696
  };
691
- getPlanMode(): boolean;
692
697
  /**
693
- * Suppress only the pre-final Ideal self-review for this live session.
694
- * Autopilot uses this while Nolan independently owns verification; loop-break
695
- * and post-compaction re-grounding remain active.
698
+ * Whether the provider's prompt cache has likely lapsed since the last
699
+ * successful request, and how many tokens the next message would re-read at
700
+ * full price. Null when the route has no known TTL or the chat is empty.
696
701
  */
697
- setIdealReviewSuppressed(suppressed: boolean): void;
702
+ getCacheExpiryStatus(now?: number): CacheExpiryStatus | null;
703
+ getPlanMode(): boolean;
698
704
  /** Queue a user message (optionally with attachments) to be injected mid-run
699
705
  * as steering. Returns the new queue length. No-op semantics are the caller's
700
706
  * concern. */
@@ -726,6 +732,13 @@ export declare class AgentSession {
726
732
  listBackgroundProcesses(): BackgroundProcess[];
727
733
  /** Stop a background process by id. Returns a human-readable status string. */
728
734
  killBackgroundProcess(id: string): Promise<string>;
735
+ /**
736
+ * Force-stop every background process tree, synchronously. Background
737
+ * commands run in their own process group, so the daemon's group kill on
738
+ * quit never reaches them: this is the only thing that does. Callers on a
739
+ * shutdown deadline run it before awaiting anything that can hang.
740
+ */
741
+ stopBackgroundProcesses(): void;
729
742
  /** Replace a host-owned system prompt in place without resetting conversation history. */
730
743
  setCustomSystemPrompt(systemPrompt: string, promptCacheKeyPrefix?: string): void;
731
744
  /**
@@ -794,6 +807,11 @@ export declare class AgentSession {
794
807
  * the standard prompt therefore needs a rebuild. Custom and sub-agent
795
808
  * prompts never render packs, so detection is skipped for them.
796
809
  */
810
+ /**
811
+ * Bring the system prompt to the exact state the next provider request will
812
+ * send. Shared by real runs and {@link prewarm} so both see one prefix.
813
+ */
814
+ private prepareSystemPromptForRequest;
797
815
  private refreshActiveLanguages;
798
816
  /** Rebuild messages[0] from current plan-mode + approved-plan state. */
799
817
  private rebuildSystemPromptInPlace;
@@ -929,6 +947,22 @@ export declare class AgentSession {
929
947
  /** Replace the abort signal (e.g. after cancellation). */
930
948
  setSignal(signal: AbortSignal): void;
931
949
  private bindManagerCancellation;
950
+ private runLoopDepth;
951
+ private lastRealRequestAt;
952
+ private lastPrewarmAt;
953
+ private prewarmController;
954
+ /**
955
+ * Best-effort Anthropic prompt-cache prewarm before the user's next turn
956
+ * (desktop app calls this on the first keystroke after opening a chat or an
957
+ * idle pause). Sends the exact request prefix the next real turn will use —
958
+ * same system/tools/thinking/cache options — with `max_tokens: 1`, so the
959
+ * first real reply is a cache read instead of a cold write.
960
+ */
961
+ prewarm(signal?: AbortSignal): Promise<{
962
+ ok: boolean;
963
+ reason: string;
964
+ usage?: Usage;
965
+ }>;
932
966
  /** True when speedProfile is "optimized" (1-h cache TTL + pre-warm), or the
933
967
  * session was constructed with `forceLongCacheRetention` (Nolan sessions). */
934
968
  private isSpeedOptimized;