@prestyj/cli 5.29.1 → 5.30.1

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 (284) hide show
  1. package/README.md +11 -12
  2. package/assets/skills/bulletproof/SKILL.md +1 -1
  3. package/assets/skills/clarify/SKILL.md +1 -1
  4. package/assets/skills/code-review/SKILL.md +1 -1
  5. package/assets/skills/compliance-guard/SKILL.md +1 -1
  6. package/assets/skills/compliance-guard/references/us.md +1 -1
  7. package/assets/skills/durable/SKILL.md +1 -1
  8. package/assets/skills/evidence-led-ui/SKILL.md +1 -1
  9. package/assets/skills/lean/SKILL.md +1 -1
  10. package/assets/skills/refactoring/SKILL.md +3 -1
  11. package/assets/skills/root-cause/SKILL.md +1 -1
  12. package/assets/skills/shared-language/SKILL.md +1 -1
  13. package/assets/skills/tdd/SKILL.md +1 -1
  14. package/dist/app-error.d.ts +21 -0
  15. package/dist/app-error.js +39 -0
  16. package/dist/app-error.js.map +1 -0
  17. package/dist/app-sidecar/app-settings.d.ts +63 -0
  18. package/dist/app-sidecar/app-settings.js +147 -0
  19. package/dist/app-sidecar/app-settings.js.map +1 -0
  20. package/dist/app-sidecar/attachments.d.ts +11 -0
  21. package/dist/app-sidecar/attachments.js +47 -0
  22. package/dist/app-sidecar/attachments.js.map +1 -0
  23. package/dist/app-sidecar/auth-routes.d.ts +3 -0
  24. package/dist/app-sidecar/auth-routes.js +290 -0
  25. package/dist/app-sidecar/auth-routes.js.map +1 -0
  26. package/dist/app-sidecar/autopilot-runner.d.ts +62 -0
  27. package/dist/app-sidecar/autopilot-runner.js +376 -0
  28. package/dist/app-sidecar/autopilot-runner.js.map +1 -0
  29. package/dist/app-sidecar/file-search.d.ts +15 -0
  30. package/dist/app-sidecar/file-search.js +103 -0
  31. package/dist/app-sidecar/file-search.js.map +1 -0
  32. package/dist/app-sidecar/hf-pull-manager.d.ts +20 -0
  33. package/dist/app-sidecar/hf-pull-manager.js +224 -0
  34. package/dist/app-sidecar/hf-pull-manager.js.map +1 -0
  35. package/dist/app-sidecar/history-routes.d.ts +3 -0
  36. package/dist/app-sidecar/history-routes.js +375 -0
  37. package/dist/app-sidecar/history-routes.js.map +1 -0
  38. package/dist/app-sidecar/history.d.ts +67 -0
  39. package/dist/app-sidecar/history.js +23 -0
  40. package/dist/app-sidecar/history.js.map +1 -0
  41. package/dist/app-sidecar/http.d.ts +5 -0
  42. package/dist/app-sidecar/http.js +27 -0
  43. package/dist/app-sidecar/http.js.map +1 -0
  44. package/dist/app-sidecar/integration-routes.d.ts +3 -0
  45. package/dist/app-sidecar/integration-routes.js +286 -0
  46. package/dist/app-sidecar/integration-routes.js.map +1 -0
  47. package/dist/app-sidecar/json-mode.d.ts +10 -0
  48. package/dist/app-sidecar/json-mode.js +73 -0
  49. package/dist/app-sidecar/json-mode.js.map +1 -0
  50. package/dist/app-sidecar/keep-awake.d.ts +4 -0
  51. package/dist/app-sidecar/keep-awake.js +5 -0
  52. package/dist/app-sidecar/keep-awake.js.map +1 -0
  53. package/dist/app-sidecar/mcp-routes.d.ts +3 -0
  54. package/dist/app-sidecar/mcp-routes.js +185 -0
  55. package/dist/app-sidecar/mcp-routes.js.map +1 -0
  56. package/dist/app-sidecar/mcp-rows.d.ts +31 -0
  57. package/dist/app-sidecar/mcp-rows.js +77 -0
  58. package/dist/app-sidecar/mcp-rows.js.map +1 -0
  59. package/dist/app-sidecar/nolan-context.d.ts +20 -0
  60. package/dist/app-sidecar/nolan-context.js +55 -0
  61. package/dist/app-sidecar/nolan-context.js.map +1 -0
  62. package/dist/app-sidecar/progress-manager.d.ts +10 -0
  63. package/dist/app-sidecar/progress-manager.js +116 -0
  64. package/dist/app-sidecar/progress-manager.js.map +1 -0
  65. package/dist/app-sidecar/prompt-routes.d.ts +3 -0
  66. package/dist/app-sidecar/prompt-routes.js +355 -0
  67. package/dist/app-sidecar/prompt-routes.js.map +1 -0
  68. package/dist/app-sidecar/repo-polls.d.ts +15 -0
  69. package/dist/app-sidecar/repo-polls.js +25 -0
  70. package/dist/app-sidecar/repo-polls.js.map +1 -0
  71. package/dist/app-sidecar/route-context.d.ts +145 -0
  72. package/dist/app-sidecar/route-context.js +2 -0
  73. package/dist/app-sidecar/route-context.js.map +1 -0
  74. package/dist/app-sidecar/run-control-routes.d.ts +3 -0
  75. package/dist/app-sidecar/run-control-routes.js +437 -0
  76. package/dist/app-sidecar/run-control-routes.js.map +1 -0
  77. package/dist/app-sidecar/session-routes.d.ts +3 -0
  78. package/dist/app-sidecar/session-routes.js +115 -0
  79. package/dist/app-sidecar/session-routes.js.map +1 -0
  80. package/dist/app-sidecar/session-types.d.ts +39 -0
  81. package/dist/app-sidecar/session-types.js +5 -0
  82. package/dist/app-sidecar/session-types.js.map +1 -0
  83. package/dist/app-sidecar/task-routes.d.ts +3 -0
  84. package/dist/app-sidecar/task-routes.js +232 -0
  85. package/dist/app-sidecar/task-routes.js.map +1 -0
  86. package/dist/app-sidecar/usage.d.ts +19 -0
  87. package/dist/app-sidecar/usage.js +153 -0
  88. package/dist/app-sidecar/usage.js.map +1 -0
  89. package/dist/app-sidecar/workspace-routes.d.ts +3 -0
  90. package/dist/app-sidecar/workspace-routes.js +374 -0
  91. package/dist/app-sidecar/workspace-routes.js.map +1 -0
  92. package/dist/app-sidecar.js +518 -3978
  93. package/dist/app-sidecar.js.map +1 -1
  94. package/dist/cli.js +6 -2
  95. package/dist/cli.js.map +1 -1
  96. package/dist/config.js +1 -1
  97. package/dist/core/acceptance-checks.js +3 -9
  98. package/dist/core/acceptance-checks.js.map +1 -1
  99. package/dist/core/agent-session/helpers.d.ts +26 -0
  100. package/dist/core/agent-session/helpers.js +47 -0
  101. package/dist/core/agent-session/helpers.js.map +1 -0
  102. package/dist/core/agent-session/mcp-tools.d.ts +68 -0
  103. package/dist/core/agent-session/mcp-tools.js +195 -0
  104. package/dist/core/agent-session/mcp-tools.js.map +1 -0
  105. package/dist/core/agent-session/run-loop-monitor.d.ts +63 -0
  106. package/dist/core/agent-session/run-loop-monitor.js +164 -0
  107. package/dist/core/agent-session/run-loop-monitor.js.map +1 -0
  108. package/dist/core/agent-session/transcript-markers.d.ts +57 -0
  109. package/dist/core/agent-session/transcript-markers.js +166 -0
  110. package/dist/core/agent-session/transcript-markers.js.map +1 -0
  111. package/dist/core/agent-session/verification-tracker.d.ts +46 -0
  112. package/dist/core/agent-session/verification-tracker.js +250 -0
  113. package/dist/core/agent-session/verification-tracker.js.map +1 -0
  114. package/dist/core/agent-session.d.ts +29 -89
  115. package/dist/core/agent-session.js +167 -705
  116. package/dist/core/agent-session.js.map +1 -1
  117. package/dist/core/auth-providers.js +3 -3
  118. package/dist/core/auth-providers.js.map +1 -1
  119. package/dist/core/autopilot-cycle.d.ts +6 -2
  120. package/dist/core/autopilot-cycle.js +1 -1
  121. package/dist/core/autopilot-cycle.js.map +1 -1
  122. package/dist/core/bundled-agents.js +6 -6
  123. package/dist/core/bundled-agents.js.map +1 -1
  124. package/dist/core/checklist-detection.d.ts +11 -0
  125. package/dist/core/checklist-detection.js +238 -0
  126. package/dist/core/checklist-detection.js.map +1 -0
  127. package/dist/core/checklist-git.d.ts +19 -0
  128. package/dist/core/checklist-git.js +54 -0
  129. package/dist/core/checklist-git.js.map +1 -0
  130. package/dist/core/checklist-items.d.ts +189 -0
  131. package/dist/core/checklist-items.js +226 -0
  132. package/dist/core/checklist-items.js.map +1 -0
  133. package/dist/core/checklist-prompt.d.ts +7 -0
  134. package/dist/core/checklist-prompt.js +45 -0
  135. package/dist/core/checklist-prompt.js.map +1 -0
  136. package/dist/core/checklist-snapshot.d.ts +17 -0
  137. package/dist/core/checklist-snapshot.js +46 -0
  138. package/dist/core/checklist-snapshot.js.map +1 -0
  139. package/dist/core/checklist-store.d.ts +59 -0
  140. package/dist/core/checklist-store.js +242 -0
  141. package/dist/core/checklist-store.js.map +1 -0
  142. package/dist/core/context-limits.js +1 -1
  143. package/dist/core/context-limits.js.map +1 -1
  144. package/dist/core/lsp/client.d.ts +4 -0
  145. package/dist/core/lsp/client.js +71 -3
  146. package/dist/core/lsp/client.js.map +1 -1
  147. package/dist/core/lsp/manager.d.ts +1 -0
  148. package/dist/core/lsp/manager.js +9 -3
  149. package/dist/core/lsp/manager.js.map +1 -1
  150. package/dist/core/lsp/project-root.d.ts +9 -0
  151. package/dist/core/lsp/project-root.js +75 -0
  152. package/dist/core/lsp/project-root.js.map +1 -0
  153. package/dist/core/lsp/reference-project.d.ts +6 -0
  154. package/dist/core/lsp/reference-project.js +110 -0
  155. package/dist/core/lsp/reference-project.js.map +1 -0
  156. package/dist/core/lsp/servers.js +1 -0
  157. package/dist/core/lsp/servers.js.map +1 -1
  158. package/dist/core/plan-handoff.d.ts +30 -0
  159. package/dist/core/plan-handoff.js +10 -0
  160. package/dist/core/plan-handoff.js.map +1 -0
  161. package/dist/core/plan-submission-gate.d.ts +28 -0
  162. package/dist/core/plan-submission-gate.js +27 -0
  163. package/dist/core/plan-submission-gate.js.map +1 -0
  164. package/dist/core/prompt-commands.js +95 -0
  165. package/dist/core/prompt-commands.js.map +1 -1
  166. package/dist/core/skills.js +6 -9
  167. package/dist/core/skills.js.map +1 -1
  168. package/dist/core/style-packs/index.js +2 -11
  169. package/dist/core/style-packs/index.js.map +1 -1
  170. package/dist/core/style-packs/packs.d.ts +3 -12
  171. package/dist/core/style-packs/packs.js +132 -173
  172. package/dist/core/style-packs/packs.js.map +1 -1
  173. package/dist/core/subagent-manager.d.ts +2 -1
  174. package/dist/core/subagent-manager.js +8 -5
  175. package/dist/core/subagent-manager.js.map +1 -1
  176. package/dist/core/verification-evidence.d.ts +8 -0
  177. package/dist/core/verification-evidence.js +27 -5
  178. package/dist/core/verification-evidence.js.map +1 -1
  179. package/dist/modes/acp-mode.d.ts +2 -1
  180. package/dist/modes/acp-mode.js +4 -1
  181. package/dist/modes/acp-mode.js.map +1 -1
  182. package/dist/modes/subagent-worker-mode.d.ts +2 -0
  183. package/dist/modes/subagent-worker-mode.js +1 -3
  184. package/dist/modes/subagent-worker-mode.js.map +1 -1
  185. package/dist/system-prompt.js +52 -78
  186. package/dist/system-prompt.js.map +1 -1
  187. package/dist/tools/ask-user.js +13 -74
  188. package/dist/tools/ask-user.js.map +1 -1
  189. package/dist/tools/bash.d.ts +4 -1
  190. package/dist/tools/bash.js +46 -81
  191. package/dist/tools/bash.js.map +1 -1
  192. package/dist/tools/checklist.d.ts +48 -0
  193. package/dist/tools/checklist.js +146 -0
  194. package/dist/tools/checklist.js.map +1 -0
  195. package/dist/tools/code-nav.d.ts +1 -1
  196. package/dist/tools/code-nav.js +9 -30
  197. package/dist/tools/code-nav.js.map +1 -1
  198. package/dist/tools/edit.d.ts +3 -9
  199. package/dist/tools/edit.js +92 -65
  200. package/dist/tools/edit.js.map +1 -1
  201. package/dist/tools/enter-plan.js +2 -7
  202. package/dist/tools/enter-plan.js.map +1 -1
  203. package/dist/tools/exit-plan.d.ts +2 -2
  204. package/dist/tools/exit-plan.js +9 -4
  205. package/dist/tools/exit-plan.js.map +1 -1
  206. package/dist/tools/find.js +3 -4
  207. package/dist/tools/find.js.map +1 -1
  208. package/dist/tools/grep.js +6 -18
  209. package/dist/tools/grep.js.map +1 -1
  210. package/dist/tools/index.d.ts +5 -3
  211. package/dist/tools/index.js +5 -1
  212. package/dist/tools/index.js.map +1 -1
  213. package/dist/tools/ls.js +3 -3
  214. package/dist/tools/ls.js.map +1 -1
  215. package/dist/tools/prompt-hints.js +35 -46
  216. package/dist/tools/prompt-hints.js.map +1 -1
  217. package/dist/tools/read.js +8 -20
  218. package/dist/tools/read.js.map +1 -1
  219. package/dist/tools/search-code.js +4 -12
  220. package/dist/tools/search-code.js.map +1 -1
  221. package/dist/tools/skill.js +13 -7
  222. package/dist/tools/skill.js.map +1 -1
  223. package/dist/tools/subagent-control.js +7 -22
  224. package/dist/tools/subagent-control.js.map +1 -1
  225. package/dist/tools/subagent-shared.d.ts +6 -8
  226. package/dist/tools/subagent-shared.js +17 -11
  227. package/dist/tools/subagent-shared.js.map +1 -1
  228. package/dist/tools/subagent.d.ts +2 -1
  229. package/dist/tools/subagent.js +7 -7
  230. package/dist/tools/subagent.js.map +1 -1
  231. package/dist/tools/task-output.js +4 -15
  232. package/dist/tools/task-output.js.map +1 -1
  233. package/dist/tools/task-send.js +5 -17
  234. package/dist/tools/task-send.js.map +1 -1
  235. package/dist/tools/task-stop.js +2 -2
  236. package/dist/tools/task-stop.js.map +1 -1
  237. package/dist/tools/tasks.d.ts +1 -1
  238. package/dist/tools/tool-search.js +2 -7
  239. package/dist/tools/tool-search.js.map +1 -1
  240. package/dist/tools/tool-tiers.d.ts +21 -4
  241. package/dist/tools/tool-tiers.js +45 -17
  242. package/dist/tools/tool-tiers.js.map +1 -1
  243. package/dist/tools/verification-review.d.ts +2 -0
  244. package/dist/tools/verification-review.js +41 -0
  245. package/dist/tools/verification-review.js.map +1 -0
  246. package/dist/tools/web-fetch.js +7 -33
  247. package/dist/tools/web-fetch.js.map +1 -1
  248. package/dist/tools/write.js +3 -4
  249. package/dist/tools/write.js.map +1 -1
  250. package/dist/ui/App.js +1 -0
  251. package/dist/ui/App.js.map +1 -1
  252. package/dist/ui/components/Footer.js +1 -2
  253. package/dist/ui/components/Footer.js.map +1 -1
  254. package/dist/ui/hooks/useModeState.js +15 -0
  255. package/dist/ui/hooks/useModeState.js.map +1 -1
  256. package/dist/ui/tool-line-summary.js +11 -1
  257. package/dist/ui/tool-line-summary.js.map +1 -1
  258. package/dist/ui/transcript/tool-presentation.js +1 -1
  259. package/dist/ui/transcript/tool-presentation.js.map +1 -1
  260. package/dist/utils/shared-poll.d.ts +37 -0
  261. package/dist/utils/shared-poll.js +104 -0
  262. package/dist/utils/shared-poll.js.map +1 -0
  263. package/package.json +8 -5
  264. package/dist/core/api-benchmark.d.ts +0 -63
  265. package/dist/core/api-benchmark.js +0 -381
  266. package/dist/core/api-benchmark.js.map +0 -1
  267. package/dist/core/bash-spawn-benchmark.d.ts +0 -1
  268. package/dist/core/bash-spawn-benchmark.js +0 -139
  269. package/dist/core/bash-spawn-benchmark.js.map +0 -1
  270. package/dist/core/cache-warm-benchmark.d.ts +0 -21
  271. package/dist/core/cache-warm-benchmark.js +0 -170
  272. package/dist/core/cache-warm-benchmark.js.map +0 -1
  273. package/dist/core/fast-apply-benchmark.d.ts +0 -25
  274. package/dist/core/fast-apply-benchmark.js +0 -284
  275. package/dist/core/fast-apply-benchmark.js.map +0 -1
  276. package/dist/core/hashline-edit-benchmark.d.ts +0 -88
  277. package/dist/core/hashline-edit-benchmark.js +0 -518
  278. package/dist/core/hashline-edit-benchmark.js.map +0 -1
  279. package/dist/core/semantic-search-benchmark.d.ts +0 -36
  280. package/dist/core/semantic-search-benchmark.js +0 -211
  281. package/dist/core/semantic-search-benchmark.js.map +0 -1
  282. package/dist/core/speed-benchmark.d.ts +0 -132
  283. package/dist/core/speed-benchmark.js +0 -410
  284. package/dist/core/speed-benchmark.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-markers.js","sourceRoot":"","sources":["../../../src/core/agent-session/transcript-markers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import type { AgentToolCallEndEvent, AgentToolCallStartEvent } from "@prestyj/agent";
2
+ import type { BackgroundProcess } from "../process-manager.js";
3
+ import { type VerificationGate } from "../verification-gate.js";
4
+ /** A tool call observed between its start and end events. */
5
+ export interface TrackedToolCall {
6
+ name: string;
7
+ args: Record<string, unknown>;
8
+ revision: number;
9
+ sourceSnapshot?: string | null;
10
+ }
11
+ /**
12
+ * Host-observed verification evidence: which files this run mutated, which
13
+ * tool calls are in flight (with their pre-run workspace snapshot), and which
14
+ * background checks still owe an exit code. Feeds the session's
15
+ * {@link VerificationGate}; persistence stays with the session.
16
+ */
17
+ export declare class VerificationTracker {
18
+ private readonly gate;
19
+ private readonly cwd;
20
+ private readonly listProcesses;
21
+ private readonly fileEditCounts;
22
+ private readonly toolCalls;
23
+ private readonly backgroundVerification;
24
+ constructor(gate: VerificationGate, cwd: string, listProcesses: () => BackgroundProcess[]);
25
+ recordFileMutated(relative: string): void;
26
+ /** Per-run reset of mutated files and in-flight calls. */
27
+ resetRun(): void;
28
+ /** Drop background checks whose process no longer exists. */
29
+ pruneBackground(liveProcessIds: ReadonlySet<string>): void;
30
+ clearBackground(): void;
31
+ getToolCall(toolCallId: string): TrackedToolCall | undefined;
32
+ /** Track a starting call. Resolves true when verification state must be persisted. */
33
+ recordToolCallStart(event: AgentToolCallStartEvent): Promise<boolean>;
34
+ /**
35
+ * Fold a finished call into the gate. Only host-observed successful
36
+ * mutations and trustworthy check results affect approval. The model's text
37
+ * is never evidence. Resolves true when verification state changed.
38
+ */
39
+ recordToolCallEnd(event: AgentToolCallEndEvent, call: TrackedToolCall | undefined, planMode: boolean): Promise<boolean>;
40
+ /** Settle every background check whose process has exited. Resolves true if any changed. */
41
+ settleFinishedBackground(): Promise<boolean>;
42
+ /** In-flight or unconfirmed evidence, else the gate's own problem. */
43
+ verificationProblem(): string | null;
44
+ private recordFinishedBackgroundVerification;
45
+ private finishSnapshotVerification;
46
+ }
@@ -0,0 +1,250 @@
1
+ import { autoBackgroundedId, REVIEW_REJECTED_BEFORE_START } from "../../tools/bash.js";
2
+ import { editTargetPaths } from "../../tools/edit-targets.js";
3
+ import { isCheckOwnFile, extractAddedLines, isCodeFilePath, isVerificationCommand, } from "../verification-gate.js";
4
+ import { classifyVerificationCommand } from "../verification-evidence.js";
5
+ import { captureVerificationSnapshot } from "../verification-snapshot.js";
6
+ /**
7
+ * Host-observed verification evidence: which files this run mutated, which
8
+ * tool calls are in flight (with their pre-run workspace snapshot), and which
9
+ * background checks still owe an exit code. Feeds the session's
10
+ * {@link VerificationGate}; persistence stays with the session.
11
+ */
12
+ export class VerificationTracker {
13
+ gate;
14
+ cwd;
15
+ listProcesses;
16
+ fileEditCounts = new Map();
17
+ toolCalls = new Map();
18
+ backgroundVerification = new Map();
19
+ constructor(gate, cwd, listProcesses) {
20
+ this.gate = gate;
21
+ this.cwd = cwd;
22
+ this.listProcesses = listProcesses;
23
+ }
24
+ recordFileMutated(relative) {
25
+ this.fileEditCounts.set(relative, (this.fileEditCounts.get(relative) ?? 0) + 1);
26
+ }
27
+ /** Per-run reset of mutated files and in-flight calls. */
28
+ resetRun() {
29
+ this.fileEditCounts.clear();
30
+ this.toolCalls.clear();
31
+ }
32
+ /** Drop background checks whose process no longer exists. */
33
+ pruneBackground(liveProcessIds) {
34
+ for (const id of this.backgroundVerification.keys()) {
35
+ if (!liveProcessIds.has(id))
36
+ this.backgroundVerification.delete(id);
37
+ }
38
+ }
39
+ clearBackground() {
40
+ this.backgroundVerification.clear();
41
+ }
42
+ getToolCall(toolCallId) {
43
+ return this.toolCalls.get(toolCallId);
44
+ }
45
+ /** Track a starting call. Resolves true when verification state must be persisted. */
46
+ async recordToolCallStart(event) {
47
+ const tracked = {
48
+ name: event.name,
49
+ args: event.args ?? {},
50
+ revision: this.gate.revision,
51
+ };
52
+ this.toolCalls.set(event.toolCallId, tracked);
53
+ const startClassification = event.name === "bash" && typeof event.args?.command === "string"
54
+ ? classifyVerificationCommand(event.args.command)
55
+ : null;
56
+ if (startClassification &&
57
+ typeof event.args?.command === "string" &&
58
+ (isVerificationCommand(event.args.command) ||
59
+ startClassification.accepted ||
60
+ // Must match the tool_call_end predicate: a snapshot-eligible
61
+ // command that never captured a "before" snapshot is misread at
62
+ // the end as an uncomparable workspace and re-arms the gate.
63
+ startClassification.snapshotEligible === true)) {
64
+ // A check that can rewrite files (--fix, build scripts, emitters)
65
+ // invalidates earlier in-flight evidence AND marks the run as
66
+ // touched. A check that is merely UNRECOGNIZED (`make test`, `deno
67
+ // test`) rewrites nothing we can point to: bumping the revision for
68
+ // it poisoned the gate on green output and re-armed the hook into
69
+ // every later question turn.
70
+ this.gate.recordVerificationAttempt();
71
+ const classification = startClassification;
72
+ if (classification.snapshotEligible && event.args.persist !== true) {
73
+ const call = tracked;
74
+ call.sourceSnapshot = await captureVerificationSnapshot(this.cwd, [
75
+ ...this.fileEditCounts.keys(),
76
+ ]);
77
+ if (call.sourceSnapshot === null)
78
+ this.gate.requireFreshVerification(true, event.args.command);
79
+ }
80
+ else if ((classification.accepted && event.args.persist !== true) ||
81
+ (!classification.accepted && classification.mayMutate)) {
82
+ // Flag the workspace unknown only when tool_call_end can resolve
83
+ // it: a bounded check records pass/fail, a file-rewriting command
84
+ // bumps the revision. An unrecognized read-only check (`biome ci`)
85
+ // or a persistent-shell run records nothing at the end, so
86
+ // flagging it left verified work Unverified forever — and
87
+ // autopilot silently refused every later turn.
88
+ this.gate.requireFreshVerification(!classification.accepted && classification.mayMutate, event.args.command);
89
+ }
90
+ return true;
91
+ }
92
+ return false;
93
+ }
94
+ /**
95
+ * Fold a finished call into the gate. Only host-observed successful
96
+ * mutations and trustworthy check results affect approval. The model's text
97
+ * is never evidence. Resolves true when verification state changed.
98
+ */
99
+ async recordToolCallEnd(event, call, planMode) {
100
+ const name = call?.name ?? "";
101
+ const args = call?.args;
102
+ let verificationChanged = false;
103
+ // In plan mode write/edit can only touch `.ezcoder/plans/*.md`; a code-file
104
+ // write there was refused (refusals return text, not isError). Counting
105
+ // it as a change left "unverified" work that blocked plan approval.
106
+ if (!event.isError && args && !planMode) {
107
+ if (name === "edit" || name === "write") {
108
+ // Check-owning files (tsconfig.json, pytest.ini, vitest.config.ts …)
109
+ // are tracked even when they are not source code: editing one is how
110
+ // a red suite is turned green without fixing anything. A multi-file
111
+ // edit records every file; its combined diff is scanned for each.
112
+ const addedText = name === "write"
113
+ ? String(args.content ?? "")
114
+ : extractAddedLines(event.details?.diff ?? event.result);
115
+ for (const filePath of editTargetPaths(args)) {
116
+ if (isCodeFilePath(filePath) || isCheckOwnFile(filePath)) {
117
+ this.gate.recordMutation(filePath, addedText);
118
+ verificationChanged = true;
119
+ }
120
+ }
121
+ }
122
+ }
123
+ if (args && call && name === "bash") {
124
+ const command = typeof args.command === "string" ? args.command : "";
125
+ const classification = classifyVerificationCommand(command);
126
+ if (args.review === true && event.result === REVIEW_REJECTED_BEFORE_START) {
127
+ // The core tool rejected its arguments BEFORE spawning. Never mint
128
+ // a pass, or poison the failed-check ledger with an unexecuted check.
129
+ // A child's output cannot match: bash always prefixes it with Exit code.
130
+ this.gate.recordRejectedCheck(command, REVIEW_REJECTED_BEFORE_START);
131
+ delete call.sourceSnapshot;
132
+ verificationChanged = true;
133
+ }
134
+ else if (classification.accepted || classification.snapshotEligible) {
135
+ // A foreground check that outlived the default budget was moved to
136
+ // the background, not failed: track it to its real exit the same way.
137
+ const autoBackgroundId = event.isError ? undefined : autoBackgroundedId(event.result);
138
+ if ((autoBackgroundId !== undefined || args.run_in_background === true) &&
139
+ !event.isError &&
140
+ args.persist !== true) {
141
+ const id = autoBackgroundId ?? /^ID:\s*(\S+)/m.exec(event.result)?.[1];
142
+ // No parseable ID means the check cannot be tracked to a real exit
143
+ // code — no evidence either way. Recording a FAILURE here made
144
+ // every later green run of a different spelling look owed.
145
+ if (id)
146
+ this.backgroundVerification.set(id, {
147
+ revision: call.revision,
148
+ command,
149
+ ...(classification.snapshotEligible
150
+ ? { sourceSnapshot: call.sourceSnapshot ?? null }
151
+ : {}),
152
+ });
153
+ else if (classification.snapshotEligible)
154
+ this.gate.requireFreshVerification(true, command);
155
+ }
156
+ else if (args.persist === true) {
157
+ // Persistent-shell checks are not bounded evidence (steering can
158
+ // interleave): neither a pass nor a failure. A recorded failure
159
+ // here blocked approval for sessions that prefer the shell.
160
+ }
161
+ else if (classification.snapshotEligible) {
162
+ await this.finishSnapshotVerification({ command, revision: call.revision, sourceSnapshot: call.sourceSnapshot ?? null }, !event.isError && /^Exit code:\s*0(?:\s|$)/i.test(event.result.trim()));
163
+ verificationChanged = true;
164
+ }
165
+ else {
166
+ if (!event.isError && /^Exit code:\s*0(?:\s|$)/i.test(event.result.trim())) {
167
+ this.gate.recordVerification(call.revision, command);
168
+ }
169
+ else {
170
+ this.gate.recordFailedVerification(command, call.revision);
171
+ }
172
+ verificationChanged = true;
173
+ }
174
+ delete call.sourceSnapshot;
175
+ }
176
+ else if (classification.candidate) {
177
+ // Green but untrusted: remember WHY so the demand can tell the
178
+ // agent which command shape actually clears the gate.
179
+ this.gate.recordRejectedCheck(command, classification.reason);
180
+ }
181
+ }
182
+ if (!event.isError && args && name === "task_output" && typeof args.id === "string") {
183
+ verificationChanged =
184
+ (await this.recordFinishedBackgroundVerification(args.id)) || verificationChanged;
185
+ }
186
+ return verificationChanged;
187
+ }
188
+ /** Settle every background check whose process has exited. Resolves true if any changed. */
189
+ async settleFinishedBackground() {
190
+ let backgroundChanged = false;
191
+ for (const id of this.backgroundVerification.keys()) {
192
+ backgroundChanged =
193
+ (await this.recordFinishedBackgroundVerification(id)) || backgroundChanged;
194
+ }
195
+ return backgroundChanged;
196
+ }
197
+ /** In-flight or unconfirmed evidence, else the gate's own problem. */
198
+ verificationProblem() {
199
+ if ([...this.toolCalls.values()].some((call) => call.sourceSnapshot !== undefined)) {
200
+ return "Unverified: a build is still running or its workspace comparison is pending.";
201
+ }
202
+ return (this.gate.verificationProblem() ??
203
+ (this.backgroundVerification.size > 0
204
+ ? "Unverified: a background check is still running or its result has not been confirmed."
205
+ : null));
206
+ }
207
+ async recordFinishedBackgroundVerification(id) {
208
+ const started = this.backgroundVerification.get(id);
209
+ const proc = this.listProcesses().find((entry) => entry.id === id);
210
+ if (!started || !proc || proc.exitCode === null)
211
+ return false;
212
+ if (started.sourceSnapshot !== undefined) {
213
+ await this.finishSnapshotVerification(started, proc.exitCode === 0);
214
+ }
215
+ else if (proc.exitCode === 0) {
216
+ this.gate.recordVerification(started.revision, started.command);
217
+ }
218
+ else {
219
+ this.gate.recordFailedVerification(started.command, started.revision);
220
+ }
221
+ this.backgroundVerification.delete(id);
222
+ return true;
223
+ }
224
+ async finishSnapshotVerification(check, passed) {
225
+ const after = check.sourceSnapshot
226
+ ? await captureVerificationSnapshot(this.cwd, [...this.fileEditCounts.keys()])
227
+ : null;
228
+ if (after === null || after !== check.sourceSnapshot) {
229
+ this.gate.requireFreshVerification(true, check.command);
230
+ this.gate.recordRejectedCheck(check.command, after === null
231
+ ? "Workspace inputs could not be compared; run a read-only check after the command"
232
+ : "Command changed workspace inputs; run checks against the changed source");
233
+ if (!passed)
234
+ this.gate.recordFailedVerification(check.command);
235
+ }
236
+ else if (passed) {
237
+ const classification = classifyVerificationCommand(check.command);
238
+ if (classification.snapshotPreserveOnly) {
239
+ this.gate.recordRejectedCheck(check.command, classification.reason);
240
+ }
241
+ else {
242
+ this.gate.recordVerification(check.revision, check.command);
243
+ }
244
+ }
245
+ else {
246
+ this.gate.recordFailedVerification(check.command, check.revision);
247
+ }
248
+ }
249
+ }
250
+ //# sourceMappingURL=verification-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verification-tracker.js","sourceRoot":"","sources":["../../../src/core/agent-session/verification-tracker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,qBAAqB,GAEtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAsB1E;;;;;GAKG;AACH,MAAM,OAAO,mBAAmB;IAMX;IACA;IACA;IAPF,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,SAAS,GAAG,IAAI,GAAG,EAA2B,CAAC;IAC/C,sBAAsB,GAAG,IAAI,GAAG,EAA2B,CAAC;IAE7E,YACmB,IAAsB,EACtB,GAAW,EACX,aAAwC;QAFxC,SAAI,GAAJ,IAAI,CAAkB;QACtB,QAAG,GAAH,GAAG,CAAQ;QACX,kBAAa,GAAb,aAAa,CAA2B;IACxD,CAAC;IAEJ,iBAAiB,CAAC,QAAgB;QAChC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAClF,CAAC;IAED,0DAA0D;IAC1D,QAAQ;QACN,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAED,6DAA6D;IAC7D,eAAe,CAAC,cAAmC;QACjD,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,EAAE,CAAC;YACpD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED,eAAe;QACb,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,CAAC;IACtC,CAAC;IAED,WAAW,CAAC,UAAkB;QAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IAED,sFAAsF;IACtF,KAAK,CAAC,mBAAmB,CAAC,KAA8B;QACtD,MAAM,OAAO,GAAoB;YAC/B,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;YACtB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;SAC7B,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC9C,MAAM,mBAAmB,GACvB,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,KAAK,CAAC,IAAI,EAAE,OAAO,KAAK,QAAQ;YAC9D,CAAC,CAAC,2BAA2B,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;YACjD,CAAC,CAAC,IAAI,CAAC;QACX,IACE,mBAAmB;YACnB,OAAO,KAAK,CAAC,IAAI,EAAE,OAAO,KAAK,QAAQ;YACvC,CAAC,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;gBACxC,mBAAmB,CAAC,QAAQ;gBAC5B,8DAA8D;gBAC9D,gEAAgE;gBAChE,6DAA6D;gBAC7D,mBAAmB,CAAC,gBAAgB,KAAK,IAAI,CAAC,EAChD,CAAC;YACD,kEAAkE;YAClE,8DAA8D;YAC9D,mEAAmE;YACnE,oEAAoE;YACpE,kEAAkE;YAClE,6BAA6B;YAC7B,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACtC,MAAM,cAAc,GAAG,mBAAmB,CAAC;YAC3C,IAAI,cAAc,CAAC,gBAAgB,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;gBACnE,MAAM,IAAI,GAAG,OAAO,CAAC;gBACrB,IAAI,CAAC,cAAc,GAAG,MAAM,2BAA2B,CAAC,IAAI,CAAC,GAAG,EAAE;oBAChE,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;iBAC9B,CAAC,CAAC;gBACH,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI;oBAC9B,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACjE,CAAC;iBAAM,IACL,CAAC,cAAc,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC;gBACxD,CAAC,CAAC,cAAc,CAAC,QAAQ,IAAI,cAAc,CAAC,SAAS,CAAC,EACtD,CAAC;gBACD,iEAAiE;gBACjE,kEAAkE;gBAClE,mEAAmE;gBACnE,2DAA2D;gBAC3D,0DAA0D;gBAC1D,+CAA+C;gBAC/C,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAChC,CAAC,cAAc,CAAC,QAAQ,IAAI,cAAc,CAAC,SAAS,EACpD,KAAK,CAAC,IAAI,CAAC,OAAO,CACnB,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,iBAAiB,CACrB,KAA4B,EAC5B,IAAiC,EACjC,QAAiB;QAEjB,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,CAAC;QACxB,IAAI,mBAAmB,GAAG,KAAK,CAAC;QAChC,4EAA4E;QAC5E,wEAAwE;QACxE,oEAAoE;QACpE,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACxC,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;gBACxC,qEAAqE;gBACrE,qEAAqE;gBACrE,oEAAoE;gBACpE,kEAAkE;gBAClE,MAAM,SAAS,GACb,IAAI,KAAK,OAAO;oBACd,CAAC,CAAC,MAAM,CAAE,IAA8B,CAAC,OAAO,IAAI,EAAE,CAAC;oBACvD,CAAC,CAAC,iBAAiB,CACd,KAAK,CAAC,OAAyC,EAAE,IAAI,IAAI,KAAK,CAAC,MAAM,CACvE,CAAC;gBACR,KAAK,MAAM,QAAQ,IAAI,eAAe,CAAC,IAA+B,CAAC,EAAE,CAAC;oBACxE,IAAI,cAAc,CAAC,QAAQ,CAAC,IAAI,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;wBACzD,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;wBAC9C,mBAAmB,GAAG,IAAI,CAAC;oBAC7B,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpC,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACrE,MAAM,cAAc,GAAG,2BAA2B,CAAC,OAAO,CAAC,CAAC;YAC5D,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,4BAA4B,EAAE,CAAC;gBAC1E,mEAAmE;gBACnE,sEAAsE;gBACtE,yEAAyE;gBACzE,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,4BAA4B,CAAC,CAAC;gBACrE,OAAO,IAAI,CAAC,cAAc,CAAC;gBAC3B,mBAAmB,GAAG,IAAI,CAAC;YAC7B,CAAC;iBAAM,IAAI,cAAc,CAAC,QAAQ,IAAI,cAAc,CAAC,gBAAgB,EAAE,CAAC;gBACtE,mEAAmE;gBACnE,sEAAsE;gBACtE,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACtF,IACE,CAAC,gBAAgB,KAAK,SAAS,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI,CAAC;oBACnE,CAAC,KAAK,CAAC,OAAO;oBACd,IAAI,CAAC,OAAO,KAAK,IAAI,EACrB,CAAC;oBACD,MAAM,EAAE,GAAG,gBAAgB,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBACvE,mEAAmE;oBACnE,+DAA+D;oBAC/D,2DAA2D;oBAC3D,IAAI,EAAE;wBACJ,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,EAAE,EAAE;4BAClC,QAAQ,EAAE,IAAI,CAAC,QAAQ;4BACvB,OAAO;4BACP,GAAG,CAAC,cAAc,CAAC,gBAAgB;gCACjC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE;gCACjD,CAAC,CAAC,EAAE,CAAC;yBACR,CAAC,CAAC;yBACA,IAAI,cAAc,CAAC,gBAAgB;wBACtC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBACtD,CAAC;qBAAM,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;oBACjC,iEAAiE;oBACjE,gEAAgE;oBAChE,4DAA4D;gBAC9D,CAAC;qBAAM,IAAI,cAAc,CAAC,gBAAgB,EAAE,CAAC;oBAC3C,MAAM,IAAI,CAAC,0BAA0B,CACnC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE,EACjF,CAAC,KAAK,CAAC,OAAO,IAAI,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CACvE,CAAC;oBACF,mBAAmB,GAAG,IAAI,CAAC;gBAC7B,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;wBAC3E,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;oBACvD,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC7D,CAAC;oBACD,mBAAmB,GAAG,IAAI,CAAC;gBAC7B,CAAC;gBACD,OAAO,IAAI,CAAC,cAAc,CAAC;YAC7B,CAAC;iBAAM,IAAI,cAAc,CAAC,SAAS,EAAE,CAAC;gBACpC,+DAA+D;gBAC/D,sDAAsD;gBACtD,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,IAAI,IAAI,KAAK,aAAa,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;YACpF,mBAAmB;gBACjB,CAAC,MAAM,IAAI,CAAC,oCAAoC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,mBAAmB,CAAC;QACtF,CAAC;QACD,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,4FAA4F;IAC5F,KAAK,CAAC,wBAAwB;QAC5B,IAAI,iBAAiB,GAAG,KAAK,CAAC;QAC9B,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,EAAE,CAAC;YACpD,iBAAiB;gBACf,CAAC,MAAM,IAAI,CAAC,oCAAoC,CAAC,EAAE,CAAC,CAAC,IAAI,iBAAiB,CAAC;QAC/E,CAAC;QACD,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,sEAAsE;IACtE,mBAAmB;QACjB,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,KAAK,SAAS,CAAC,EAAE,CAAC;YACnF,OAAO,8EAA8E,CAAC;QACxF,CAAC;QACD,OAAO,CACL,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;YAC/B,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,GAAG,CAAC;gBACnC,CAAC,CAAC,uFAAuF;gBACzF,CAAC,CAAC,IAAI,CAAC,CACV,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,oCAAoC,CAAC,EAAU;QAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACnE,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAC9D,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YACzC,MAAM,IAAI,CAAC,0BAA0B,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC;QACtE,CAAC;aAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAClE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,0BAA0B,CAAC,KAAoB,EAAE,MAAe;QAC5E,MAAM,KAAK,GAAG,KAAK,CAAC,cAAc;YAChC,CAAC,CAAC,MAAM,2BAA2B,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9E,CAAC,CAAC,IAAI,CAAC;QACT,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC,cAAc,EAAE,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACxD,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAC3B,KAAK,CAAC,OAAO,EACb,KAAK,KAAK,IAAI;gBACZ,CAAC,CAAC,iFAAiF;gBACnF,CAAC,CAAC,yEAAyE,CAC9E,CAAC;YACF,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjE,CAAC;aAAM,IAAI,MAAM,EAAE,CAAC;YAClB,MAAM,cAAc,GAAG,2BAA2B,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAClE,IAAI,cAAc,CAAC,oBAAoB,EAAE,CAAC;gBACxC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;YACtE,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;CACF"}
@@ -1,4 +1,4 @@
1
- import { type AgentTool } from "@prestyj/agent";
1
+ import { type AgentTool, type ToolExecuteResult } from "@prestyj/agent";
2
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";
@@ -11,7 +11,7 @@ import { type ContextLimits } from "./context-limits.js";
11
11
  import { type ImportForeignTranscriptResult } from "./foreign-session-import.js";
12
12
  import { type CacheExpiryStatus } from "./cache-expiry.js";
13
13
  import { type EnhanceResult } from "../utils/prompt-enhancer.js";
14
- import { type VerificationEvidence } from "./verification-evidence.js";
14
+ import type { VerificationEvidence } from "./verification-evidence.js";
15
15
  /** A chat attachment (image / video / other file) prepared for the model. The
16
16
  * raw base64 `data` rides native blocks; `path` (when persisted to disk) lets
17
17
  * the agent's tools open the file directly. */
@@ -127,7 +127,7 @@ export interface AgentSessionOptions {
127
127
  * agent to skip planning and implement directly. Any other return accepts.
128
128
  */
129
129
  onEnterPlan?: (reason?: string) => boolean | void | Promise<boolean | void>;
130
- onExitPlan?: (planPath: string) => Promise<string>;
130
+ onExitPlan?: (planPath: string) => Promise<ToolExecuteResult>;
131
131
  /**
132
132
  * If provided, the session's tool set is filtered to ONLY these tool names
133
133
  * after `createTools()` runs, and the system prompt's Tools section lists only
@@ -193,18 +193,12 @@ export interface AgentSessionOptions {
193
193
  additionalTools?: AgentTool[];
194
194
  /** Mode-owned completion policy; absent in Coder/chat/worker sessions. */
195
195
  completionReview?: CompletionReview;
196
+ /** Remind the agent to submit its plan (exit_plan) when a run is about to
197
+ * stop still in plan mode. Desktop only: an unsubmitted plan there leaves
198
+ * nothing to review. See plan-submission-gate.ts. */
199
+ planSubmissionGate?: boolean;
196
200
  }
197
- /** Resolve the per-result cap passed to the agent loop for the active transport. */
198
- export declare function resolveSessionToolResultCharLimit(model: string, provider: Provider, accountId?: string): number;
199
- /**
200
- * Aggregate budget for ALL tool results produced in one assistant turn.
201
- * Individual results are already capped, but wide parallel fan-outs (GPT-5.6's
202
- * signature behavior) were observed injecting 100k+ uncached tokens in a single
203
- * turn. ~15% of the context window in chars (1 token ≈ 3.5 chars), floored at
204
- * 100KB so small windows still fit two full-size reads, ceilinged at 240KB so
205
- * 1M-context models don't waive the budget entirely.
206
- */
207
- export declare function resolveSessionTurnToolResultCharLimit(model: string, provider: Provider, accountId?: string): number;
201
+ export { resolveSessionToolResultCharLimit, resolveSessionTurnToolResultCharLimit, } from "./agent-session/helpers.js";
208
202
  export interface AgentSessionState {
209
203
  provider: Provider;
210
204
  model: string;
@@ -226,10 +220,7 @@ export declare class AgentSession {
226
220
  private sessionManager;
227
221
  private extensionLoader;
228
222
  private messages;
229
- private nolanTurns;
230
- private autopilotMarkers;
231
- private appMarkers;
232
- private turnMetrics;
223
+ private readonly markers;
233
224
  private readonly cacheDiagnostics;
234
225
  /** Internal-only (EZ_INTERNAL): live per-session cost/reliability recorder.
235
226
  * Absent entirely in public builds — see core/internal-diagnostics.ts. */
@@ -245,25 +236,8 @@ export declare class AgentSession {
245
236
  private recordBashReads;
246
237
  private skills;
247
238
  private cacheKeyLogged;
248
- private hookStats;
249
- private hookText;
250
- private hookConsecutiveFailures;
251
- private hookRepeatedNoProgressCalls;
252
- private hookProgressTracker;
253
- private hookCycleDetector;
254
- private hookCyclicPattern;
255
- private hookFileEditCounts;
256
- private hookToolCalls;
257
- private backgroundVerification;
258
- /** 0 = none; 1 = first nudge sent; 2 = final stop-and-report injected. */
259
- private loopBreakInjected;
239
+ private readonly loopMonitor;
260
240
  private regroundingInjected;
261
- /** Recent tool-call digests for the semantic loop judge — bounded ring. */
262
- private hookRecentCalls;
263
- /** LLM-judged loop detection state. `verdict` holds a LOOP verdict awaiting
264
- * injection at the next steering poll; judge failures fail open (no
265
- * injection) and still consume budget + cooldown. */
266
- private semanticLoop;
267
241
  /**
268
242
  * The environment as the cached system prompt currently describes it.
269
243
  * Re-recorded on every prompt build, so a rebuild (e.g. `/add-dir`) needs no
@@ -274,10 +248,14 @@ export declare class AgentSession {
274
248
  private runStartedAt;
275
249
  /** Gate injections spent this run, capped by MAX_PROCESS_GATE_INJECTIONS. */
276
250
  private processGateInjected;
251
+ /** Plan-submission reminders spent this run (plan-submission-gate.ts). */
252
+ private planSubmissionNudges;
277
253
  /** Verification gate: code edited this run, nothing proved it since. Always
278
254
  * tracks evidence for run status; the `verificationGateEnabled` setting
279
255
  * decides whether an unverified stop is also continued once. */
280
256
  private readonly verificationGate;
257
+ /** Host-observed evidence (edited files, in-flight and background checks) feeding the gate. */
258
+ private readonly verificationTracker;
281
259
  /** Mirror of the last `hook_armed` value, so the event fires only on an edge. */
282
260
  private preFinalArmed;
283
261
  private compactionOccurred;
@@ -320,9 +298,8 @@ export declare class AgentSession {
320
298
  private readonly notifications;
321
299
  private managerAbortSignal?;
322
300
  private readonly managerAbortHandler;
323
- private mcpManager?;
324
- /** Deferred MCP tools awaiting discovery via tool_search. */
325
- private mcpCatalog?;
301
+ /** MCP client, deferred tool_search catalog and cached-stub reconcile state. */
302
+ private readonly mcp;
326
303
  /** Resolved prompt-injection byte budgets (contextLimits setting). */
327
304
  private contextLimits;
328
305
  /**
@@ -331,11 +308,6 @@ export declare class AgentSession {
331
308
  * can discover and promote them; a promoted name drops out of this list.
332
309
  */
333
310
  private deferredBuiltinToolNames;
334
- /** Live (connected) MCP tools by name — the reconcile target for cached stubs. */
335
- private liveMcpTools;
336
- /** Server name for each cached-only tool, so a stub knows what to wait on. */
337
- private cachedMcpToolServers;
338
- private readonly mcpCatalogCache;
339
311
  private provider;
340
312
  private model;
341
313
  private cwd;
@@ -444,43 +416,27 @@ export declare class AgentSession {
444
416
  * pushed eagerly when the user opted out.
445
417
  * Allow-listed sessions (Nolan) always get the eager path — their fixed tool
446
418
  * expectations predate the catalog, and tool_search isn't allow-listed.
447
- * Promotion pushes onto the live `this.tools` array the running agent loop
448
- * re-reads every turn, so promoted tools are callable on the next step.
449
419
  */
450
420
  private addMcpTools;
451
421
  /**
452
- * Register `tool_search` once. Promotion of a cached-only entry waits for its
453
- * server so the model is told immediately when that capability turns out to
454
- * be unreachable, instead of promoting a tool that fails on first call.
455
- *
456
- * The catalog is created on demand rather than required up front: deferred
457
- * built-in tools populate it with zero MCP servers connected, so gating
458
- * registration on an existing catalog would leave those tools unreachable.
459
- */
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.
422
+ * Deferred follow-up tools whose need is certain once a trigger succeeds.
423
+ * `wait_agent` follows nearly every `spawn_agent`, and loading it through
424
+ * `tool_search` cost a whole turn (bench 41: ~6 s per fan-out). Likewise a
425
+ * background `bash` is always followed by `task_output` (and sometimes
426
+ * `task_send`/`task_stop`). Promote them as soon as the trigger succeeds: the
427
+ * tool list grows exactly as it would after that `tool_search`, one turn
428
+ * earlier, and sessions that never trigger keep the smaller prefix.
429
+ * Call before tier partitioning so a deferred trigger is wrapped too.
467
430
  */
468
- private promoteWaitAgentAfterSpawn;
469
- /** Append tools, replacing any same-named entry (cached stub → live tool). */
470
- private replaceOrPushTools;
471
- /** Swap already-promoted cached stubs for their live equivalents, in place. */
472
- private replaceLivePromotedTools;
431
+ private promoteFollowUpTools;
432
+ /** Append a deferred built-in to the live tool list (append-only). */
433
+ private promoteDeferredBuiltin;
434
+ private wrapToPromote;
473
435
  /**
474
436
  * Publish cached tool definitions into the deferred catalog so `tool_search`
475
- * answers correctly on turn 1. A cached stub carries the real name, one-line
476
- * description and input schema; calling it waits for the live connection and
477
- * then dispatches against the real client, or returns a clear error when that
478
- * server ultimately failed. Live tools replace stubs on connect.
437
+ * answers correctly on turn 1 (see {@link McpToolRegistry.seedFromCache}).
479
438
  */
480
439
  private seedMcpCatalogFromCache;
481
- /** Catalog-only registration for cached stubs — never marks them live. */
482
- private addCachedMcpTools;
483
- private buildCachedMcpTool;
484
440
  /**
485
441
  * Resolve a `/name [args]` input to the prompt template it expands into, or
486
442
  * null when it isn't a prompt-template command for THIS session (an ordinary
@@ -839,7 +795,6 @@ export declare class AgentSession {
839
795
  getMessages(): Message[];
840
796
  getTurnMetrics(): TurnMetricPayload[];
841
797
  private persistTurnMetric;
842
- private rePersistTurnMetrics;
843
798
  /** Nolan Grout (mentor) turns recorded against this session, in record order. Used
844
799
  * by the host to interleave Nolan's advisory exchanges back into the transcript
845
800
  * on resume. Never part of the LLM message history. */
@@ -870,11 +825,6 @@ export declare class AgentSession {
870
825
  * appendEntry's own handling.
871
826
  */
872
827
  persistNolanTurn(question: string, reply: string): Promise<void>;
873
- /** Re-append the in-memory Nolan turns to the current session file. Called after
874
- * a continuation/compaction file is created so Nolan's advisory history isn't
875
- * lost when the session is rewritten (those rewrites only re-persist
876
- * messages). Each turn keeps its original `afterMessageCount` anchor. */
877
- private rePersistNolanTurns;
878
828
  /**
879
829
  * Record one autopilot verdict marker (prompted / done / human / capped)
880
830
  * against this build session. Kept in memory for the live transcript and
@@ -883,7 +833,6 @@ export declare class AgentSession {
883
833
  * instead of dropping the marker or falling back to a raw verdict string.
884
834
  * No-op persistence for transient sessions (kept in memory only).
885
835
  */
886
- private recordFinishedBackgroundVerification;
887
836
  getVerificationEvidence(): VerificationEvidence[];
888
837
  /** Current request activity, separate from persistent workspace verification debt. */
889
838
  getRunVerificationActivity(): {
@@ -891,7 +840,6 @@ export declare class AgentSession {
891
840
  checked: boolean;
892
841
  evidence: VerificationEvidence[];
893
842
  };
894
- private finishSnapshotVerification;
895
843
  getVerificationProblem(): string | null;
896
844
  private persistCompletionReviewState;
897
845
  private persistVerificationState;
@@ -899,10 +847,6 @@ export declare class AgentSession {
899
847
  reason?: string;
900
848
  body?: string;
901
849
  }): Promise<void>;
902
- /** Re-append the in-memory autopilot markers to the current session file.
903
- * Mirrors `rePersistNolanTurns` — called after a continuation/compaction file
904
- * is created so the auto-review history survives the rewrite. */
905
- private rePersistAutopilotMarkers;
906
850
  /** App transcript markers recorded against this session, in record order.
907
851
  * Used by the host to interleave display-only rows (plan banner, task
908
852
  * header, errors, user-bubble hints) back into the transcript on resume. */
@@ -927,10 +871,6 @@ export declare class AgentSession {
927
871
  persistRunStarted(generation: number): Promise<void>;
928
872
  /** Close the run journal. Its absence is what marks a run as crashed. */
929
873
  persistRunFinished(generation: number, outcome: RunOutcome): Promise<void>;
930
- /** Re-append the in-memory app markers to the current session file. Mirrors
931
- * `rePersistNolanTurns` — called after a continuation/compaction file is
932
- * created so display-only rows survive the rewrite. */
933
- private rePersistAppMarkers;
934
874
  /**
935
875
  * Rewrite a draft prompt into a tighter, terminology-correct version using
936
876
  * the ACTIVE provider/model. A stateless one-off LLM call (no agent loop, no