@kenkaiiii/ggcoder 5.74.3 → 5.75.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 (215) hide show
  1. package/README.md +1 -1
  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/durable/SKILL.md +1 -1
  7. package/assets/skills/evidence-led-ui/SKILL.md +1 -1
  8. package/assets/skills/lean/SKILL.md +1 -1
  9. package/assets/skills/refactoring/SKILL.md +1 -1
  10. package/assets/skills/root-cause/SKILL.md +1 -1
  11. package/assets/skills/shared-language/SKILL.md +1 -1
  12. package/assets/skills/tdd/SKILL.md +1 -1
  13. package/dist/app-sidecar/app-settings.d.ts +65 -0
  14. package/dist/app-sidecar/app-settings.js +147 -0
  15. package/dist/app-sidecar/app-settings.js.map +1 -0
  16. package/dist/app-sidecar/attachments.d.ts +11 -0
  17. package/dist/app-sidecar/attachments.js +47 -0
  18. package/dist/app-sidecar/attachments.js.map +1 -0
  19. package/dist/app-sidecar/auth-routes.d.ts +3 -0
  20. package/dist/app-sidecar/auth-routes.js +290 -0
  21. package/dist/app-sidecar/auth-routes.js.map +1 -0
  22. package/dist/app-sidecar/autopilot-runner.d.ts +61 -0
  23. package/dist/app-sidecar/autopilot-runner.js +367 -0
  24. package/dist/app-sidecar/autopilot-runner.js.map +1 -0
  25. package/dist/app-sidecar/file-search.d.ts +15 -0
  26. package/dist/app-sidecar/file-search.js +103 -0
  27. package/dist/app-sidecar/file-search.js.map +1 -0
  28. package/dist/app-sidecar/hf-pull-manager.d.ts +20 -0
  29. package/dist/app-sidecar/hf-pull-manager.js +224 -0
  30. package/dist/app-sidecar/hf-pull-manager.js.map +1 -0
  31. package/dist/app-sidecar/history-routes.d.ts +3 -0
  32. package/dist/app-sidecar/history-routes.js +375 -0
  33. package/dist/app-sidecar/history-routes.js.map +1 -0
  34. package/dist/app-sidecar/history.d.ts +67 -0
  35. package/dist/app-sidecar/history.js +23 -0
  36. package/dist/app-sidecar/history.js.map +1 -0
  37. package/dist/app-sidecar/http.d.ts +5 -0
  38. package/dist/app-sidecar/http.js +27 -0
  39. package/dist/app-sidecar/http.js.map +1 -0
  40. package/dist/app-sidecar/integration-routes.d.ts +3 -0
  41. package/dist/app-sidecar/integration-routes.js +286 -0
  42. package/dist/app-sidecar/integration-routes.js.map +1 -0
  43. package/dist/app-sidecar/json-mode.d.ts +10 -0
  44. package/dist/app-sidecar/json-mode.js +73 -0
  45. package/dist/app-sidecar/json-mode.js.map +1 -0
  46. package/dist/app-sidecar/keep-awake.d.ts +4 -0
  47. package/dist/app-sidecar/keep-awake.js +5 -0
  48. package/dist/app-sidecar/keep-awake.js.map +1 -0
  49. package/dist/app-sidecar/ken-context.d.ts +20 -0
  50. package/dist/app-sidecar/ken-context.js +55 -0
  51. package/dist/app-sidecar/ken-context.js.map +1 -0
  52. package/dist/app-sidecar/mcp-routes.d.ts +3 -0
  53. package/dist/app-sidecar/mcp-routes.js +185 -0
  54. package/dist/app-sidecar/mcp-routes.js.map +1 -0
  55. package/dist/app-sidecar/mcp-rows.d.ts +31 -0
  56. package/dist/app-sidecar/mcp-rows.js +77 -0
  57. package/dist/app-sidecar/mcp-rows.js.map +1 -0
  58. package/dist/app-sidecar/progress-manager.d.ts +10 -0
  59. package/dist/app-sidecar/progress-manager.js +116 -0
  60. package/dist/app-sidecar/progress-manager.js.map +1 -0
  61. package/dist/app-sidecar/prompt-routes.d.ts +3 -0
  62. package/dist/app-sidecar/prompt-routes.js +354 -0
  63. package/dist/app-sidecar/prompt-routes.js.map +1 -0
  64. package/dist/app-sidecar/repo-polls.d.ts +15 -0
  65. package/dist/app-sidecar/repo-polls.js +25 -0
  66. package/dist/app-sidecar/repo-polls.js.map +1 -0
  67. package/dist/app-sidecar/route-context.d.ts +145 -0
  68. package/dist/app-sidecar/route-context.js +2 -0
  69. package/dist/app-sidecar/route-context.js.map +1 -0
  70. package/dist/app-sidecar/run-control-routes.d.ts +3 -0
  71. package/dist/app-sidecar/run-control-routes.js +430 -0
  72. package/dist/app-sidecar/run-control-routes.js.map +1 -0
  73. package/dist/app-sidecar/session-routes.d.ts +3 -0
  74. package/dist/app-sidecar/session-routes.js +115 -0
  75. package/dist/app-sidecar/session-routes.js.map +1 -0
  76. package/dist/app-sidecar/session-types.d.ts +39 -0
  77. package/dist/app-sidecar/session-types.js +5 -0
  78. package/dist/app-sidecar/session-types.js.map +1 -0
  79. package/dist/app-sidecar/task-routes.d.ts +3 -0
  80. package/dist/app-sidecar/task-routes.js +149 -0
  81. package/dist/app-sidecar/task-routes.js.map +1 -0
  82. package/dist/app-sidecar/usage.d.ts +19 -0
  83. package/dist/app-sidecar/usage.js +153 -0
  84. package/dist/app-sidecar/usage.js.map +1 -0
  85. package/dist/app-sidecar/workspace-routes.d.ts +3 -0
  86. package/dist/app-sidecar/workspace-routes.js +244 -0
  87. package/dist/app-sidecar/workspace-routes.js.map +1 -0
  88. package/dist/app-sidecar.js +467 -3775
  89. package/dist/app-sidecar.js.map +1 -1
  90. package/dist/cli.js +2 -2
  91. package/dist/cli.js.map +1 -1
  92. package/dist/config.js +1 -1
  93. package/dist/core/acceptance-checks.js +3 -9
  94. package/dist/core/acceptance-checks.js.map +1 -1
  95. package/dist/core/agent-session/helpers.d.ts +26 -0
  96. package/dist/core/agent-session/helpers.js +47 -0
  97. package/dist/core/agent-session/helpers.js.map +1 -0
  98. package/dist/core/agent-session/mcp-tools.d.ts +68 -0
  99. package/dist/core/agent-session/mcp-tools.js +195 -0
  100. package/dist/core/agent-session/mcp-tools.js.map +1 -0
  101. package/dist/core/agent-session/run-loop-monitor.d.ts +63 -0
  102. package/dist/core/agent-session/run-loop-monitor.js +164 -0
  103. package/dist/core/agent-session/run-loop-monitor.js.map +1 -0
  104. package/dist/core/agent-session/transcript-markers.d.ts +57 -0
  105. package/dist/core/agent-session/transcript-markers.js +166 -0
  106. package/dist/core/agent-session/transcript-markers.js.map +1 -0
  107. package/dist/core/agent-session/verification-tracker.d.ts +46 -0
  108. package/dist/core/agent-session/verification-tracker.js +246 -0
  109. package/dist/core/agent-session/verification-tracker.js.map +1 -0
  110. package/dist/core/agent-session.d.ts +21 -87
  111. package/dist/core/agent-session.js +141 -712
  112. package/dist/core/agent-session.js.map +1 -1
  113. package/dist/core/auth-providers.js +3 -3
  114. package/dist/core/auth-providers.js.map +1 -1
  115. package/dist/core/bundled-agents.js +6 -6
  116. package/dist/core/bundled-agents.js.map +1 -1
  117. package/dist/core/checklist-git.d.ts +19 -0
  118. package/dist/core/checklist-git.js +54 -0
  119. package/dist/core/checklist-git.js.map +1 -0
  120. package/dist/core/checklist-items.d.ts +10 -1
  121. package/dist/core/checklist-items.js +22 -0
  122. package/dist/core/checklist-items.js.map +1 -1
  123. package/dist/core/checklist-prompt.d.ts +5 -1
  124. package/dist/core/checklist-prompt.js +16 -5
  125. package/dist/core/checklist-prompt.js.map +1 -1
  126. package/dist/core/checklist-snapshot.d.ts +5 -1
  127. package/dist/core/checklist-snapshot.js +19 -2
  128. package/dist/core/checklist-snapshot.js.map +1 -1
  129. package/dist/core/context-limits.js +1 -1
  130. package/dist/core/context-limits.js.map +1 -1
  131. package/dist/core/skills.js +6 -9
  132. package/dist/core/skills.js.map +1 -1
  133. package/dist/core/style-packs/index.js +2 -11
  134. package/dist/core/style-packs/index.js.map +1 -1
  135. package/dist/core/style-packs/packs.d.ts +3 -12
  136. package/dist/core/style-packs/packs.js +132 -173
  137. package/dist/core/style-packs/packs.js.map +1 -1
  138. package/dist/system-prompt.js +55 -78
  139. package/dist/system-prompt.js.map +1 -1
  140. package/dist/tools/ask-user.js +13 -74
  141. package/dist/tools/ask-user.js.map +1 -1
  142. package/dist/tools/bash.js +13 -78
  143. package/dist/tools/bash.js.map +1 -1
  144. package/dist/tools/checklist.d.ts +2 -10
  145. package/dist/tools/checklist.js +7 -39
  146. package/dist/tools/checklist.js.map +1 -1
  147. package/dist/tools/code-nav.js +7 -29
  148. package/dist/tools/code-nav.js.map +1 -1
  149. package/dist/tools/edit.d.ts +3 -9
  150. package/dist/tools/edit.js +92 -65
  151. package/dist/tools/edit.js.map +1 -1
  152. package/dist/tools/enter-plan.js +2 -7
  153. package/dist/tools/enter-plan.js.map +1 -1
  154. package/dist/tools/exit-plan.js +2 -3
  155. package/dist/tools/exit-plan.js.map +1 -1
  156. package/dist/tools/find.js +3 -4
  157. package/dist/tools/find.js.map +1 -1
  158. package/dist/tools/grep.js +6 -18
  159. package/dist/tools/grep.js.map +1 -1
  160. package/dist/tools/ls.js +3 -3
  161. package/dist/tools/ls.js.map +1 -1
  162. package/dist/tools/prompt-hints.js +34 -47
  163. package/dist/tools/prompt-hints.js.map +1 -1
  164. package/dist/tools/read.js +8 -20
  165. package/dist/tools/read.js.map +1 -1
  166. package/dist/tools/search-code.js +4 -12
  167. package/dist/tools/search-code.js.map +1 -1
  168. package/dist/tools/skill.js +13 -7
  169. package/dist/tools/skill.js.map +1 -1
  170. package/dist/tools/subagent-control.js +7 -22
  171. package/dist/tools/subagent-control.js.map +1 -1
  172. package/dist/tools/subagent.js +4 -7
  173. package/dist/tools/subagent.js.map +1 -1
  174. package/dist/tools/task-output.js +4 -15
  175. package/dist/tools/task-output.js.map +1 -1
  176. package/dist/tools/task-send.js +5 -17
  177. package/dist/tools/task-send.js.map +1 -1
  178. package/dist/tools/task-stop.js +2 -2
  179. package/dist/tools/task-stop.js.map +1 -1
  180. package/dist/tools/tool-search.js +2 -7
  181. package/dist/tools/tool-search.js.map +1 -1
  182. package/dist/tools/tool-tiers.d.ts +17 -4
  183. package/dist/tools/tool-tiers.js +38 -15
  184. package/dist/tools/tool-tiers.js.map +1 -1
  185. package/dist/tools/web-fetch.js +7 -33
  186. package/dist/tools/web-fetch.js.map +1 -1
  187. package/dist/tools/write.js +3 -4
  188. package/dist/tools/write.js.map +1 -1
  189. package/dist/ui/components/Footer.js +1 -2
  190. package/dist/ui/components/Footer.js.map +1 -1
  191. package/dist/utils/shared-poll.d.ts +37 -0
  192. package/dist/utils/shared-poll.js +104 -0
  193. package/dist/utils/shared-poll.js.map +1 -0
  194. package/package.json +7 -4
  195. package/dist/core/api-benchmark.d.ts +0 -63
  196. package/dist/core/api-benchmark.js +0 -381
  197. package/dist/core/api-benchmark.js.map +0 -1
  198. package/dist/core/bash-spawn-benchmark.d.ts +0 -1
  199. package/dist/core/bash-spawn-benchmark.js +0 -139
  200. package/dist/core/bash-spawn-benchmark.js.map +0 -1
  201. package/dist/core/cache-warm-benchmark.d.ts +0 -21
  202. package/dist/core/cache-warm-benchmark.js +0 -170
  203. package/dist/core/cache-warm-benchmark.js.map +0 -1
  204. package/dist/core/fast-apply-benchmark.d.ts +0 -25
  205. package/dist/core/fast-apply-benchmark.js +0 -284
  206. package/dist/core/fast-apply-benchmark.js.map +0 -1
  207. package/dist/core/hashline-edit-benchmark.d.ts +0 -88
  208. package/dist/core/hashline-edit-benchmark.js +0 -518
  209. package/dist/core/hashline-edit-benchmark.js.map +0 -1
  210. package/dist/core/semantic-search-benchmark.d.ts +0 -36
  211. package/dist/core/semantic-search-benchmark.js +0 -211
  212. package/dist/core/semantic-search-benchmark.js.map +0 -1
  213. package/dist/core/speed-benchmark.d.ts +0 -132
  214. package/dist/core/speed-benchmark.js +0 -410
  215. 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 "@kenkaiiii/gg-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,246 @@
1
+ import { autoBackgroundedId, REVIEW_REJECTED_BEFORE_START } from "../../tools/bash.js";
2
+ import { editTargetPaths } from "../../tools/edit-targets.js";
3
+ import { isCheckOwnFile, 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);
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);
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 `.gg/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
110
+ // invalidates earlier check results. A multi-file edit records every file.
111
+ for (const filePath of editTargetPaths(args)) {
112
+ if (isCodeFilePath(filePath) || isCheckOwnFile(filePath)) {
113
+ this.gate.recordMutation(filePath);
114
+ verificationChanged = true;
115
+ }
116
+ }
117
+ }
118
+ }
119
+ if (args && call && name === "bash") {
120
+ const command = typeof args.command === "string" ? args.command : "";
121
+ const classification = classifyVerificationCommand(command);
122
+ if (args.review === true && event.result === REVIEW_REJECTED_BEFORE_START) {
123
+ // The core tool rejected its arguments BEFORE spawning. Never mint
124
+ // a pass, or poison the failed-check ledger with an unexecuted check.
125
+ // A child's output cannot match: bash always prefixes it with Exit code.
126
+ this.gate.recordRejectedCheck(command, REVIEW_REJECTED_BEFORE_START);
127
+ delete call.sourceSnapshot;
128
+ verificationChanged = true;
129
+ }
130
+ else if (classification.accepted || classification.snapshotEligible) {
131
+ // A foreground check that outlived the default budget was moved to
132
+ // the background, not failed: track it to its real exit the same way.
133
+ const autoBackgroundId = event.isError ? undefined : autoBackgroundedId(event.result);
134
+ if ((autoBackgroundId !== undefined || args.run_in_background === true) &&
135
+ !event.isError &&
136
+ args.persist !== true) {
137
+ const id = autoBackgroundId ?? /^ID:\s*(\S+)/m.exec(event.result)?.[1];
138
+ // No parseable ID means the check cannot be tracked to a real exit
139
+ // code — no evidence either way. Recording a FAILURE here made
140
+ // every later green run of a different spelling look owed.
141
+ if (id)
142
+ this.backgroundVerification.set(id, {
143
+ revision: call.revision,
144
+ command,
145
+ ...(classification.snapshotEligible
146
+ ? { sourceSnapshot: call.sourceSnapshot ?? null }
147
+ : {}),
148
+ });
149
+ else if (classification.snapshotEligible)
150
+ this.gate.requireFreshVerification(true);
151
+ }
152
+ else if (args.persist === true) {
153
+ // Persistent-shell checks are not bounded evidence (steering can
154
+ // interleave): neither a pass nor a failure. A recorded failure
155
+ // here blocked approval for sessions that prefer the shell.
156
+ }
157
+ else if (classification.snapshotEligible) {
158
+ await this.finishSnapshotVerification({ command, revision: call.revision, sourceSnapshot: call.sourceSnapshot ?? null }, !event.isError && /^Exit code:\s*0(?:\s|$)/i.test(event.result.trim()));
159
+ verificationChanged = true;
160
+ }
161
+ else {
162
+ if (!event.isError && /^Exit code:\s*0(?:\s|$)/i.test(event.result.trim())) {
163
+ this.gate.recordVerification(call.revision, command);
164
+ }
165
+ else {
166
+ this.gate.recordFailedVerification(command, call.revision);
167
+ }
168
+ verificationChanged = true;
169
+ }
170
+ delete call.sourceSnapshot;
171
+ }
172
+ else if (classification.candidate) {
173
+ // Green but untrusted: remember WHY so the demand can tell the
174
+ // agent which command shape actually clears the gate.
175
+ this.gate.recordRejectedCheck(command, classification.reason);
176
+ }
177
+ }
178
+ if (!event.isError && args && name === "task_output" && typeof args.id === "string") {
179
+ verificationChanged =
180
+ (await this.recordFinishedBackgroundVerification(args.id)) || verificationChanged;
181
+ }
182
+ return verificationChanged;
183
+ }
184
+ /** Settle every background check whose process has exited. Resolves true if any changed. */
185
+ async settleFinishedBackground() {
186
+ let backgroundChanged = false;
187
+ for (const id of this.backgroundVerification.keys()) {
188
+ backgroundChanged =
189
+ (await this.recordFinishedBackgroundVerification(id)) || backgroundChanged;
190
+ }
191
+ return backgroundChanged;
192
+ }
193
+ /** In-flight or unconfirmed evidence, else the gate's own problem. */
194
+ verificationProblem() {
195
+ if ([...this.toolCalls.values()].some((call) => call.sourceSnapshot !== undefined)) {
196
+ return "Unverified: a build is still running or its workspace comparison is pending.";
197
+ }
198
+ return (this.gate.verificationProblem() ??
199
+ (this.backgroundVerification.size > 0
200
+ ? "Unverified: a background check is still running or its result has not been confirmed."
201
+ : null));
202
+ }
203
+ async recordFinishedBackgroundVerification(id) {
204
+ const started = this.backgroundVerification.get(id);
205
+ const proc = this.listProcesses().find((entry) => entry.id === id);
206
+ if (!started || !proc || proc.exitCode === null)
207
+ return false;
208
+ if (started.sourceSnapshot !== undefined) {
209
+ await this.finishSnapshotVerification(started, proc.exitCode === 0);
210
+ }
211
+ else if (proc.exitCode === 0) {
212
+ this.gate.recordVerification(started.revision, started.command);
213
+ }
214
+ else {
215
+ this.gate.recordFailedVerification(started.command, started.revision);
216
+ }
217
+ this.backgroundVerification.delete(id);
218
+ return true;
219
+ }
220
+ async finishSnapshotVerification(check, passed) {
221
+ const after = check.sourceSnapshot
222
+ ? await captureVerificationSnapshot(this.cwd, [...this.fileEditCounts.keys()])
223
+ : null;
224
+ if (after === null || after !== check.sourceSnapshot) {
225
+ this.gate.requireFreshVerification(true);
226
+ this.gate.recordRejectedCheck(check.command, after === null
227
+ ? "Workspace inputs could not be compared; run a read-only check after the command"
228
+ : "Command changed workspace inputs; run checks against the changed source");
229
+ if (!passed)
230
+ this.gate.recordFailedVerification(check.command);
231
+ }
232
+ else if (passed) {
233
+ const classification = classifyVerificationCommand(check.command);
234
+ if (classification.snapshotPreserveOnly) {
235
+ this.gate.recordRejectedCheck(check.command, classification.reason);
236
+ }
237
+ else {
238
+ this.gate.recordVerification(check.revision, check.command);
239
+ }
240
+ }
241
+ else {
242
+ this.gate.recordFailedVerification(check.command, check.revision);
243
+ }
244
+ }
245
+ }
246
+ //# 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":"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"}
@@ -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. */
@@ -193,17 +193,7 @@ export interface AgentSessionOptions {
193
193
  * nothing to review. See plan-submission-gate.ts. */
194
194
  planSubmissionGate?: boolean;
195
195
  }
196
- /** Resolve the per-result cap passed to the agent loop for the active transport. */
197
- export declare function resolveSessionToolResultCharLimit(model: string, provider: Provider, accountId?: string): number;
198
- /**
199
- * Aggregate budget for ALL tool results produced in one assistant turn.
200
- * Individual results are already capped, but wide parallel fan-outs (GPT-5.6's
201
- * signature behavior) were observed injecting 100k+ uncached tokens in a single
202
- * turn. ~15% of the context window in chars (1 token ≈ 3.5 chars), floored at
203
- * 100KB so small windows still fit two full-size reads, ceilinged at 240KB so
204
- * 1M-context models don't waive the budget entirely.
205
- */
206
- export declare function resolveSessionTurnToolResultCharLimit(model: string, provider: Provider, accountId?: string): number;
196
+ export { resolveSessionToolResultCharLimit, resolveSessionTurnToolResultCharLimit, } from "./agent-session/helpers.js";
207
197
  export interface AgentSessionState {
208
198
  provider: Provider;
209
199
  model: string;
@@ -225,10 +215,7 @@ export declare class AgentSession {
225
215
  private sessionManager;
226
216
  private extensionLoader;
227
217
  private messages;
228
- private kenTurns;
229
- private autopilotMarkers;
230
- private appMarkers;
231
- private turnMetrics;
218
+ private readonly markers;
232
219
  private readonly cacheDiagnostics;
233
220
  /** Internal-only (GG_INTERNAL): live per-session cost/reliability recorder.
234
221
  * Absent entirely in public builds — see core/internal-diagnostics.ts. */
@@ -244,25 +231,8 @@ export declare class AgentSession {
244
231
  private recordBashReads;
245
232
  private skills;
246
233
  private cacheKeyLogged;
247
- private hookStats;
248
- private hookText;
249
- private hookConsecutiveFailures;
250
- private hookRepeatedNoProgressCalls;
251
- private hookProgressTracker;
252
- private hookCycleDetector;
253
- private hookCyclicPattern;
254
- private hookFileEditCounts;
255
- private hookToolCalls;
256
- private backgroundVerification;
257
- /** 0 = none; 1 = first nudge sent; 2 = final stop-and-report injected. */
258
- private loopBreakInjected;
234
+ private readonly loopMonitor;
259
235
  private regroundingInjected;
260
- /** Recent tool-call digests for the semantic loop judge — bounded ring. */
261
- private hookRecentCalls;
262
- /** LLM-judged loop detection state. `verdict` holds a LOOP verdict awaiting
263
- * injection at the next steering poll; judge failures fail open (no
264
- * injection) and still consume budget + cooldown. */
265
- private semanticLoop;
266
236
  /**
267
237
  * The environment as the cached system prompt currently describes it.
268
238
  * Re-recorded on every prompt build, so a rebuild (e.g. `/add-dir`) needs no
@@ -278,6 +248,8 @@ export declare class AgentSession {
278
248
  /** Verification evidence: code edited this run, and what has proved it since.
279
249
  * Passive tracking only — it feeds run status and autopilot, never a turn. */
280
250
  private readonly verificationGate;
251
+ /** Host-observed evidence (edited files, in-flight and background checks) feeding the gate. */
252
+ private readonly verificationTracker;
281
253
  /** Mirror of the last `hook_armed` value, so the event fires only on an edge. */
282
254
  private preFinalArmed;
283
255
  private compactionOccurred;
@@ -319,9 +291,8 @@ export declare class AgentSession {
319
291
  private readonly notifications;
320
292
  private managerAbortSignal?;
321
293
  private readonly managerAbortHandler;
322
- private mcpManager?;
323
- /** Deferred MCP tools awaiting discovery via tool_search. */
324
- private mcpCatalog?;
294
+ /** MCP client, deferred tool_search catalog and cached-stub reconcile state. */
295
+ private readonly mcp;
325
296
  /** Resolved prompt-injection byte budgets (contextLimits setting). */
326
297
  private contextLimits;
327
298
  /**
@@ -330,11 +301,6 @@ export declare class AgentSession {
330
301
  * can discover and promote them; a promoted name drops out of this list.
331
302
  */
332
303
  private deferredBuiltinToolNames;
333
- /** Live (connected) MCP tools by name — the reconcile target for cached stubs. */
334
- private liveMcpTools;
335
- /** Server name for each cached-only tool, so a stub knows what to wait on. */
336
- private cachedMcpToolServers;
337
- private readonly mcpCatalogCache;
338
304
  private provider;
339
305
  private model;
340
306
  private cwd;
@@ -443,43 +409,27 @@ export declare class AgentSession {
443
409
  * pushed eagerly when the user opted out.
444
410
  * Allow-listed sessions (Ken) always get the eager path — their fixed tool
445
411
  * expectations predate the catalog, and tool_search isn't allow-listed.
446
- * Promotion pushes onto the live `this.tools` array the running agent loop
447
- * re-reads every turn, so promoted tools are callable on the next step.
448
412
  */
449
413
  private addMcpTools;
450
414
  /**
451
- * Register `tool_search` once. Promotion of a cached-only entry waits for its
452
- * server so the model is told immediately when that capability turns out to
453
- * be unreachable, instead of promoting a tool that fails on first call.
454
- *
455
- * The catalog is created on demand rather than required up front: deferred
456
- * built-in tools populate it with zero MCP servers connected, so gating
457
- * registration on an existing catalog would leave those tools unreachable.
458
- */
459
- private ensureToolSearchTool;
460
- /**
461
- * `wait_agent` is deferred, yet nearly every `spawn_agent` is followed by it,
462
- * so the model spent a whole turn on `tool_search` just to load it (bench 41:
463
- * ~6 s per fan-out). Promote it as soon as a spawn succeeds instead: the tool
464
- * list grows exactly as it would after that `tool_search`, one turn earlier,
465
- * and sessions that never spawn keep the smaller prefix.
415
+ * Deferred follow-up tools whose need is certain once a trigger succeeds.
416
+ * `wait_agent` follows nearly every `spawn_agent`, and loading it through
417
+ * `tool_search` cost a whole turn (bench 41: ~6 s per fan-out). Likewise a
418
+ * background `bash` is always followed by `task_output` (and sometimes
419
+ * `task_send`/`task_stop`). Promote them as soon as the trigger succeeds: the
420
+ * tool list grows exactly as it would after that `tool_search`, one turn
421
+ * earlier, and sessions that never trigger keep the smaller prefix.
422
+ * Call before tier partitioning so a deferred trigger is wrapped too.
466
423
  */
467
- private promoteWaitAgentAfterSpawn;
468
- /** Append tools, replacing any same-named entry (cached stub → live tool). */
469
- private replaceOrPushTools;
470
- /** Swap already-promoted cached stubs for their live equivalents, in place. */
471
- private replaceLivePromotedTools;
424
+ private promoteFollowUpTools;
425
+ /** Append a deferred built-in to the live tool list (append-only). */
426
+ private promoteDeferredBuiltin;
427
+ private wrapToPromote;
472
428
  /**
473
429
  * Publish cached tool definitions into the deferred catalog so `tool_search`
474
- * answers correctly on turn 1. A cached stub carries the real name, one-line
475
- * description and input schema; calling it waits for the live connection and
476
- * then dispatches against the real client, or returns a clear error when that
477
- * server ultimately failed. Live tools replace stubs on connect.
430
+ * answers correctly on turn 1 (see {@link McpToolRegistry.seedFromCache}).
478
431
  */
479
432
  private seedMcpCatalogFromCache;
480
- /** Catalog-only registration for cached stubs — never marks them live. */
481
- private addCachedMcpTools;
482
- private buildCachedMcpTool;
483
433
  /**
484
434
  * Resolve a `/name [args]` input to the prompt template it expands into, or
485
435
  * null when it isn't a prompt-template command for THIS session (an ordinary
@@ -832,7 +782,6 @@ export declare class AgentSession {
832
782
  getMessages(): Message[];
833
783
  getTurnMetrics(): TurnMetricPayload[];
834
784
  private persistTurnMetric;
835
- private rePersistTurnMetrics;
836
785
  /** Ken Kai (mentor) turns recorded against this session, in record order. Used
837
786
  * by the host to interleave Ken's advisory exchanges back into the transcript
838
787
  * on resume. Never part of the LLM message history. */
@@ -863,11 +812,6 @@ export declare class AgentSession {
863
812
  * appendEntry's own handling.
864
813
  */
865
814
  persistKenTurn(question: string, reply: string): Promise<void>;
866
- /** Re-append the in-memory Ken turns to the current session file. Called after
867
- * a continuation/compaction file is created so Ken's advisory history isn't
868
- * lost when the session is rewritten (those rewrites only re-persist
869
- * messages). Each turn keeps its original `afterMessageCount` anchor. */
870
- private rePersistKenTurns;
871
815
  /**
872
816
  * Record one autopilot verdict marker (prompted / done / human / capped)
873
817
  * against this build session. Kept in memory for the live transcript and
@@ -876,7 +820,6 @@ export declare class AgentSession {
876
820
  * instead of dropping the marker or falling back to a raw verdict string.
877
821
  * No-op persistence for transient sessions (kept in memory only).
878
822
  */
879
- private recordFinishedBackgroundVerification;
880
823
  getVerificationEvidence(): VerificationEvidence[];
881
824
  /** Current request activity, separate from persistent workspace verification debt. */
882
825
  getRunVerificationActivity(): {
@@ -884,7 +827,6 @@ export declare class AgentSession {
884
827
  checked: boolean;
885
828
  evidence: VerificationEvidence[];
886
829
  };
887
- private finishSnapshotVerification;
888
830
  getVerificationProblem(): string | null;
889
831
  private persistCompletionReviewState;
890
832
  private persistVerificationState;
@@ -892,10 +834,6 @@ export declare class AgentSession {
892
834
  reason?: string;
893
835
  body?: string;
894
836
  }): Promise<void>;
895
- /** Re-append the in-memory autopilot markers to the current session file.
896
- * Mirrors `rePersistKenTurns` — called after a continuation/compaction file
897
- * is created so the auto-review history survives the rewrite. */
898
- private rePersistAutopilotMarkers;
899
837
  /** App transcript markers recorded against this session, in record order.
900
838
  * Used by the host to interleave display-only rows (plan banner, task
901
839
  * header, errors, user-bubble hints) back into the transcript on resume. */
@@ -920,10 +858,6 @@ export declare class AgentSession {
920
858
  persistRunStarted(generation: number): Promise<void>;
921
859
  /** Close the run journal. Its absence is what marks a run as crashed. */
922
860
  persistRunFinished(generation: number, outcome: RunOutcome): Promise<void>;
923
- /** Re-append the in-memory app markers to the current session file. Mirrors
924
- * `rePersistKenTurns` — called after a continuation/compaction file is
925
- * created so display-only rows survive the rewrite. */
926
- private rePersistAppMarkers;
927
861
  /**
928
862
  * Rewrite a draft prompt into a tighter, terminology-correct version using
929
863
  * the ACTIVE provider/model. A stateless one-off LLM call (no agent loop, no