@gajae-code/coding-agent 0.11.11 → 0.12.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 (344) hide show
  1. package/CHANGELOG.md +131 -4
  2. package/dist/types/async/job-manager.d.ts +17 -3
  3. package/dist/types/cli/read-cli.d.ts +1 -0
  4. package/dist/types/commands/deep-interview.d.ts +9 -0
  5. package/dist/types/commands/harness.d.ts +22 -0
  6. package/dist/types/commands/read.d.ts +6 -0
  7. package/dist/types/config/model-registry.d.ts +4 -0
  8. package/dist/types/config/provider-auth-health.d.ts +14 -0
  9. package/dist/types/config/provider-ranking.d.ts +59 -0
  10. package/dist/types/config/settings-schema.d.ts +83 -1
  11. package/dist/types/config/settings.d.ts +2 -0
  12. package/dist/types/exa/mcp-client.d.ts +10 -1
  13. package/dist/types/exec/bash-executor.d.ts +45 -12
  14. package/dist/types/extensibility/extensions/types.d.ts +38 -4
  15. package/dist/types/extensibility/gjc-plugins/index.d.ts +12 -2
  16. package/dist/types/extensibility/gjc-plugins/installer.d.ts +63 -7
  17. package/dist/types/extensibility/gjc-plugins/lifecycle-reconciliation.d.ts +55 -0
  18. package/dist/types/extensibility/gjc-plugins/lifecycle.d.ts +64 -0
  19. package/dist/types/extensibility/gjc-plugins/runtime-quarantine.d.ts +67 -0
  20. package/dist/types/extensibility/gjc-plugins/session-validation.d.ts +3 -1
  21. package/dist/types/extensibility/gjc-plugins/types.d.ts +124 -0
  22. package/dist/types/extensibility/shared-events.d.ts +6 -0
  23. package/dist/types/gjc-runtime/deep-interview-ambiguity.d.ts +5 -12
  24. package/dist/types/gjc-runtime/deep-interview-recorder.d.ts +17 -32
  25. package/dist/types/gjc-runtime/deep-interview-stage.d.ts +37 -0
  26. package/dist/types/gjc-runtime/deep-interview-state.d.ts +4 -135
  27. package/dist/types/gjc-runtime/gc-runtime.d.ts +1 -1
  28. package/dist/types/gjc-runtime/launch-tmux.d.ts +1 -0
  29. package/dist/types/gjc-runtime/memory-guard-owner-claims.d.ts +47 -0
  30. package/dist/types/gjc-runtime/ralplan-runtime.d.ts +70 -1
  31. package/dist/types/gjc-runtime/state-writer.d.ts +5 -46
  32. package/dist/types/gjc-runtime/team-launch.d.ts +1 -1
  33. package/dist/types/gjc-runtime/team-runtime.d.ts +27 -1
  34. package/dist/types/gjc-runtime/team-store.d.ts +12 -0
  35. package/dist/types/gjc-runtime/team-worker-heartbeat.d.ts +43 -0
  36. package/dist/types/gjc-runtime/team-worker-memory-guard.d.ts +92 -0
  37. package/dist/types/gjc-runtime/tmux-owner-isolation.d.ts +17 -0
  38. package/dist/types/gjc-runtime/ultragoal-receipt-freshness.d.ts +8 -0
  39. package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +31 -80
  40. package/dist/types/gjc-runtime/workflow-manifest.d.ts +3 -5
  41. package/dist/types/internal-urls/local-root-gc.d.ts +2 -0
  42. package/dist/types/main.d.ts +1 -1
  43. package/dist/types/memories/index.d.ts +2 -0
  44. package/dist/types/modes/acp/acp-agent.d.ts +10 -19
  45. package/dist/types/modes/components/assistant-message.d.ts +3 -1
  46. package/dist/types/modes/components/gjc-bundle-settings.d.ts +34 -0
  47. package/dist/types/modes/components/irc-sidebar.d.ts +41 -0
  48. package/dist/types/modes/components/notifications-settings-editor.d.ts +1 -0
  49. package/dist/types/modes/components/read-tool-group.d.ts +4 -4
  50. package/dist/types/modes/components/session-observer-overlay.d.ts +22 -0
  51. package/dist/types/modes/components/settings-selector.d.ts +11 -0
  52. package/dist/types/modes/components/status-line/gh.d.ts +5 -0
  53. package/dist/types/modes/components/tool-execution.d.ts +8 -0
  54. package/dist/types/modes/components/transcript-viewer-overlay.d.ts +18 -1
  55. package/dist/types/modes/controllers/event-controller.d.ts +3 -0
  56. package/dist/types/modes/interactive-mode.d.ts +2 -0
  57. package/dist/types/modes/irc-observation-ledger.d.ts +17 -1
  58. package/dist/types/modes/types.d.ts +2 -0
  59. package/dist/types/modes/utils/ui-helpers.d.ts +16 -0
  60. package/dist/types/reminders/star-reminder.d.ts +3 -13
  61. package/dist/types/runtime-mcp/manager.d.ts +1 -0
  62. package/dist/types/runtime-mcp/smithery-auth.d.ts +5 -0
  63. package/dist/types/sdk/acp/adapter.d.ts +3 -1
  64. package/dist/types/sdk/broker/lifecycle.d.ts +5 -0
  65. package/dist/types/sdk/broker/transport.d.ts +2 -0
  66. package/dist/types/sdk/bus/attachment-registry.d.ts +1 -0
  67. package/dist/types/sdk/bus/chat-daemon-control.d.ts +4 -1
  68. package/dist/types/sdk/bus/config.d.ts +6 -2
  69. package/dist/types/sdk/bus/control-drain-lease.d.ts +52 -0
  70. package/dist/types/sdk/bus/index.d.ts +44 -1
  71. package/dist/types/sdk/bus/kind-aware-reconciliation.d.ts +44 -0
  72. package/dist/types/sdk/bus/lifecycle-control-runtime.d.ts +4 -0
  73. package/dist/types/sdk/bus/prompt-reconciliation.d.ts +2 -1
  74. package/dist/types/sdk/bus/reconciliation-store.d.ts +69 -0
  75. package/dist/types/sdk/bus/rich-draft.d.ts +1 -0
  76. package/dist/types/sdk/bus/rich-render.d.ts +2 -0
  77. package/dist/types/sdk/bus/telegram-adoption-intent.d.ts +165 -0
  78. package/dist/types/sdk/bus/telegram-cli.d.ts +12 -0
  79. package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +11 -4
  80. package/dist/types/sdk/bus/telegram-daemon.d.ts +25 -1
  81. package/dist/types/sdk/bus/telegram-reference.d.ts +11 -1
  82. package/dist/types/sdk/bus/threaded-render.d.ts +3 -2
  83. package/dist/types/sdk/bus/topic-registry.d.ts +11 -1
  84. package/dist/types/sdk/host/control/operations.d.ts +1 -1
  85. package/dist/types/sdk/host/host.d.ts +2 -0
  86. package/dist/types/sdk/host/query/handlers.d.ts +5 -0
  87. package/dist/types/sdk/host/query/revision-store.d.ts +2 -0
  88. package/dist/types/sdk/host/reverse-leases.d.ts +1 -1
  89. package/dist/types/sdk/prompt-status.d.ts +23 -3
  90. package/dist/types/sdk/session.d.ts +6 -0
  91. package/dist/types/session/agent-session.d.ts +82 -12
  92. package/dist/types/session/artifacts.d.ts +8 -0
  93. package/dist/types/session/blob-store.d.ts +57 -4
  94. package/dist/types/session/internal/managed-session-storage.d.ts +8 -1
  95. package/dist/types/session/memory-guard-checkpoint-participant.d.ts +69 -0
  96. package/dist/types/session/session-manager.d.ts +48 -19
  97. package/dist/types/session/session-storage.d.ts +4 -0
  98. package/dist/types/session/streaming-output.d.ts +96 -12
  99. package/dist/types/setup/credential-import.d.ts +12 -0
  100. package/dist/types/skill-state/active-state.d.ts +12 -4
  101. package/dist/types/skill-state/workflow-hud.d.ts +9 -0
  102. package/dist/types/task/executor.d.ts +3 -2
  103. package/dist/types/task/index.d.ts +3 -1
  104. package/dist/types/task/provider-retry-status.d.ts +8 -0
  105. package/dist/types/task/receipt.d.ts +7 -1
  106. package/dist/types/task/types.d.ts +23 -0
  107. package/dist/types/tools/ask-answer-registry.d.ts +2 -2
  108. package/dist/types/tools/bash-interactive.d.ts +4 -1
  109. package/dist/types/tools/bash.d.ts +3 -1
  110. package/dist/types/tools/browser/launch.d.ts +7 -0
  111. package/dist/types/tools/fetch.d.ts +17 -1
  112. package/dist/types/tools/image-gen.d.ts +4 -0
  113. package/dist/types/tools/index.d.ts +4 -0
  114. package/dist/types/tools/output-meta.d.ts +44 -3
  115. package/dist/types/tools/path-utils.d.ts +1 -0
  116. package/dist/types/tools/read-internals.d.ts +12 -0
  117. package/dist/types/tools/read.d.ts +45 -7
  118. package/dist/types/tools/resource-gc.d.ts +4 -0
  119. package/dist/types/tools/review.d.ts +5 -7
  120. package/dist/types/tools/subagent.d.ts +2 -0
  121. package/dist/types/tools/tool-result.d.ts +7 -1
  122. package/dist/types/utils/gh.d.ts +13 -0
  123. package/dist/types/utils/image-resize.d.ts +1 -0
  124. package/dist/types/web/search/providers/kimi.d.ts +2 -0
  125. package/dist/types/web/search/providers/searxng.d.ts +7 -0
  126. package/dist/types/web/search/providers/xai.d.ts +2 -0
  127. package/package.json +11 -13
  128. package/scripts/acp-conformance-agent.ts +218 -0
  129. package/scripts/benchmark-sticky-viewport-pr1.ts +239 -0
  130. package/scripts/capture-gjc-bundle-settings.ts +306 -0
  131. package/scripts/capture-sticky-viewport-showcase.ts +292 -0
  132. package/scripts/generate-sdk-operation-inventory.ts +5 -0
  133. package/scripts/resident-memory-bench.ts +1341 -0
  134. package/scripts/run-acp-conformance.ts +285 -0
  135. package/scripts/verify-gjc-sdk-canonicalization.ts +122 -18
  136. package/scripts/verify-sticky-viewport-showcase.ts +611 -0
  137. package/src/async/job-manager.ts +78 -20
  138. package/src/capability/index.ts +8 -0
  139. package/src/cli/fast-help.ts +1 -1
  140. package/src/cli/plugin-cli.ts +176 -18
  141. package/src/cli/read-cli.ts +2 -1
  142. package/src/cli.ts +1 -0
  143. package/src/commands/deep-interview.ts +29 -9
  144. package/src/commands/harness.ts +35 -12
  145. package/src/commands/read.ts +11 -2
  146. package/src/commands/team.ts +20 -2
  147. package/src/config/file-lock.ts +11 -2
  148. package/src/config/model-registry.ts +21 -2
  149. package/src/config/provider-auth-health.ts +42 -0
  150. package/src/config/provider-ranking.ts +119 -0
  151. package/src/config/settings-schema.ts +74 -1
  152. package/src/config/settings.ts +246 -108
  153. package/src/coordinator-mcp/question-gate-codec.ts +1 -1
  154. package/src/coordinator-mcp/server.ts +5 -12
  155. package/src/defaults/gjc/skills/deep-interview/SKILL.md +230 -82
  156. package/src/defaults/gjc/skills/ralplan/SKILL.md +77 -41
  157. package/src/defaults/gjc/skills/team/SKILL.md +3 -1
  158. package/src/defaults/gjc/skills/ultragoal/SKILL.md +62 -39
  159. package/src/defaults/gjc/skills/ultragoal/validation-batch-contracts.md +12 -0
  160. package/src/defaults/gjc-defaults.ts +4 -4
  161. package/src/eval/py/executor.ts +7 -2
  162. package/src/exa/mcp-client.ts +12 -3
  163. package/src/exec/bash-executor.ts +144 -27
  164. package/src/extensibility/extensions/runner.ts +15 -0
  165. package/src/extensibility/extensions/types.ts +46 -5
  166. package/src/extensibility/gjc-plugins/constrained-hooks.ts +8 -2
  167. package/src/extensibility/gjc-plugins/index.ts +19 -2
  168. package/src/extensibility/gjc-plugins/installer.ts +189 -50
  169. package/src/extensibility/gjc-plugins/lifecycle-reconciliation.ts +199 -0
  170. package/src/extensibility/gjc-plugins/lifecycle.ts +626 -0
  171. package/src/extensibility/gjc-plugins/observability.ts +3 -3
  172. package/src/extensibility/gjc-plugins/prompt-appendix.ts +5 -1
  173. package/src/extensibility/gjc-plugins/runtime-adapters.ts +12 -2
  174. package/src/extensibility/gjc-plugins/runtime-quarantine.ts +121 -0
  175. package/src/extensibility/gjc-plugins/schema.ts +84 -12
  176. package/src/extensibility/gjc-plugins/session-validation.ts +9 -3
  177. package/src/extensibility/gjc-plugins/types.ts +141 -0
  178. package/src/extensibility/gjc-plugins/validation.ts +9 -0
  179. package/src/extensibility/shared-events.ts +5 -0
  180. package/src/gjc-runtime/deep-interview-ambiguity.ts +47 -82
  181. package/src/gjc-runtime/deep-interview-recorder.ts +227 -310
  182. package/src/gjc-runtime/deep-interview-runtime.ts +109 -270
  183. package/src/gjc-runtime/deep-interview-stage.ts +1016 -0
  184. package/src/gjc-runtime/deep-interview-state.ts +12 -943
  185. package/src/gjc-runtime/gc-render.ts +1 -0
  186. package/src/gjc-runtime/gc-runtime.ts +11 -1
  187. package/src/gjc-runtime/launch-tmux.ts +25 -6
  188. package/src/gjc-runtime/managed-owner-admission.ts +1 -1
  189. package/src/gjc-runtime/memory-guard-owner-claims.ts +389 -0
  190. package/src/gjc-runtime/ralplan-runtime.ts +1149 -98
  191. package/src/gjc-runtime/state-runtime.ts +2 -1
  192. package/src/gjc-runtime/state-writer.ts +70 -222
  193. package/src/gjc-runtime/team-launch.ts +42 -5
  194. package/src/gjc-runtime/team-runtime.ts +1085 -40
  195. package/src/gjc-runtime/team-store.ts +32 -0
  196. package/src/gjc-runtime/team-worker-heartbeat.ts +149 -0
  197. package/src/gjc-runtime/team-worker-memory-guard.ts +363 -0
  198. package/src/gjc-runtime/team-workers.ts +1 -0
  199. package/src/gjc-runtime/tmux-owner-isolation.ts +28 -0
  200. package/src/gjc-runtime/tmux-sessions.ts +58 -13
  201. package/src/gjc-runtime/ultragoal-receipt-freshness.ts +20 -0
  202. package/src/gjc-runtime/ultragoal-runtime.ts +414 -618
  203. package/src/gjc-runtime/workflow-manifest.generated.json +105 -449
  204. package/src/gjc-runtime/workflow-manifest.ts +38 -247
  205. package/src/hooks/native-skill-hook.ts +17 -4
  206. package/src/hooks/skill-state.ts +1 -23
  207. package/src/internal-urls/docs-index.generated.ts +21 -22
  208. package/src/internal-urls/local-root-gc.ts +127 -0
  209. package/src/main.ts +9 -5
  210. package/src/memories/index.ts +10 -0
  211. package/src/modes/DESIGN.md +98 -0
  212. package/src/modes/acp/acp-agent.ts +339 -191
  213. package/src/modes/acp/acp-event-mapper.ts +14 -7
  214. package/src/modes/acp/acp-mode.ts +39 -3
  215. package/src/modes/components/assistant-message.ts +123 -22
  216. package/src/modes/components/gjc-bundle-settings.ts +508 -0
  217. package/src/modes/components/irc-sidebar.ts +176 -62
  218. package/src/modes/components/model-selector.ts +61 -4
  219. package/src/modes/components/notifications-settings-editor.ts +12 -1
  220. package/src/modes/components/oauth-selector.ts +96 -28
  221. package/src/modes/components/read-tool-group.ts +82 -14
  222. package/src/modes/components/session-observer-overlay.ts +457 -83
  223. package/src/modes/components/settings-selector.ts +116 -23
  224. package/src/modes/components/status-line/gh.ts +16 -0
  225. package/src/modes/components/tool-execution.ts +138 -27
  226. package/src/modes/components/tool-status-header.ts +3 -14
  227. package/src/modes/components/transcript-viewer-overlay.ts +99 -24
  228. package/src/modes/controllers/command-controller.ts +4 -0
  229. package/src/modes/controllers/event-controller.ts +109 -27
  230. package/src/modes/controllers/extension-ui-controller.ts +26 -2
  231. package/src/modes/controllers/input-controller.ts +18 -3
  232. package/src/modes/controllers/selector-controller.ts +127 -36
  233. package/src/modes/interactive-mode.ts +62 -3
  234. package/src/modes/irc-observation-ledger.ts +71 -15
  235. package/src/modes/runtime-init.ts +22 -2
  236. package/src/modes/types.ts +2 -0
  237. package/src/modes/utils/ui-helpers.ts +94 -1
  238. package/src/prompts/agent-fragments/ralplan-persistence.md +4 -3
  239. package/src/prompts/agents/architect.md +9 -1
  240. package/src/prompts/agents/critic.md +9 -0
  241. package/src/prompts/system/eager-todo.md +8 -4
  242. package/src/prompts/system/system-prompt.md +11 -5
  243. package/src/prompts/tools/bash.md +5 -5
  244. package/src/prompts/tools/read.md +4 -2
  245. package/src/prompts/tools/search-tool-bm25.md +5 -0
  246. package/src/prompts/tools/task.md +1 -1
  247. package/src/reminders/star-reminder.ts +4 -42
  248. package/src/runtime-mcp/manager.ts +19 -4
  249. package/src/runtime-mcp/smithery-auth.ts +17 -2
  250. package/src/runtime-mcp/smithery-connect.ts +11 -1
  251. package/src/sdk/acp/adapter.ts +22 -6
  252. package/src/sdk/broker/lifecycle.ts +25 -6
  253. package/src/sdk/broker/transport.ts +35 -3
  254. package/src/sdk/bus/attachment-registry.ts +5 -1
  255. package/src/sdk/bus/chat-daemon-cli.ts +4 -39
  256. package/src/sdk/bus/chat-daemon-control.ts +6 -3
  257. package/src/sdk/bus/config.ts +18 -2
  258. package/src/sdk/bus/control-drain-lease.ts +104 -0
  259. package/src/sdk/bus/index.ts +984 -146
  260. package/src/sdk/bus/kind-aware-reconciliation.ts +317 -0
  261. package/src/sdk/bus/lifecycle-commands.ts +4 -1
  262. package/src/sdk/bus/lifecycle-control-runtime.ts +403 -88
  263. package/src/sdk/bus/prompt-reconciliation.ts +2 -1
  264. package/src/sdk/bus/reconciliation-store.ts +303 -0
  265. package/src/sdk/bus/rich-draft.ts +1 -1
  266. package/src/sdk/bus/rich-render.ts +2 -2
  267. package/src/sdk/bus/telegram-adoption-intent.ts +574 -0
  268. package/src/sdk/bus/telegram-cli.ts +33 -8
  269. package/src/sdk/bus/telegram-daemon-cli.ts +1 -0
  270. package/src/sdk/bus/telegram-daemon-contract.ts +11 -4
  271. package/src/sdk/bus/telegram-daemon.ts +916 -23
  272. package/src/sdk/bus/telegram-reference.ts +40 -3
  273. package/src/sdk/bus/threaded-render.ts +48 -3
  274. package/src/sdk/bus/topic-registry.ts +20 -0
  275. package/src/sdk/host/control/dispatch.ts +5 -1
  276. package/src/sdk/host/control/operations.ts +1 -1
  277. package/src/sdk/host/host.ts +23 -1
  278. package/src/sdk/host/query/handlers.ts +55 -0
  279. package/src/sdk/host/query/revision-store.ts +36 -2
  280. package/src/sdk/host/reverse-leases.ts +44 -7
  281. package/src/sdk/mcp/server.ts +46 -18
  282. package/src/sdk/prompt-status.ts +16 -3
  283. package/src/sdk/protocol/operation-inventory.generated.json +51 -0
  284. package/src/sdk/protocol/operation-registry.ts +7 -2
  285. package/src/sdk/session.ts +101 -10
  286. package/src/session/agent-session.ts +1286 -220
  287. package/src/session/artifacts.ts +22 -0
  288. package/src/session/auth-broker-config.ts +10 -3
  289. package/src/session/blob-store.ts +915 -24
  290. package/src/session/internal/managed-session-scope.ts +44 -6
  291. package/src/session/internal/managed-session-storage.ts +48 -6
  292. package/src/session/memory-guard-checkpoint-participant.ts +131 -0
  293. package/src/session/session-manager.ts +2364 -438
  294. package/src/session/session-storage.ts +9 -1
  295. package/src/session/streaming-output.ts +500 -111
  296. package/src/setup/credential-import.ts +75 -13
  297. package/src/setup/provider-onboarding.ts +19 -4
  298. package/src/skill-state/active-state.ts +32 -10
  299. package/src/skill-state/workflow-hud.ts +42 -2
  300. package/src/skill-state/workflow-mutation-guard.ts +560 -8
  301. package/src/task/executor.ts +122 -39
  302. package/src/task/index.ts +23 -14
  303. package/src/task/provider-retry-status.ts +16 -0
  304. package/src/task/receipt.ts +23 -7
  305. package/src/task/render.ts +6 -2
  306. package/src/task/types.ts +108 -0
  307. package/src/tools/ask-answer-registry.ts +12 -6
  308. package/src/tools/ask.ts +169 -118
  309. package/src/tools/ast-edit.ts +1 -0
  310. package/src/tools/ast-grep.ts +1 -0
  311. package/src/tools/bash-interactive.ts +8 -3
  312. package/src/tools/bash.ts +503 -60
  313. package/src/tools/browser/launch.ts +41 -6
  314. package/src/tools/fetch.ts +114 -23
  315. package/src/tools/find.ts +1 -0
  316. package/src/tools/image-gen.ts +29 -5
  317. package/src/tools/index.ts +4 -0
  318. package/src/tools/output-meta.ts +281 -20
  319. package/src/tools/path-utils.ts +8 -3
  320. package/src/tools/read-internals.ts +44 -0
  321. package/src/tools/read.ts +1560 -310
  322. package/src/tools/resource-gc.ts +182 -18
  323. package/src/tools/review.ts +5 -7
  324. package/src/tools/search.ts +1 -0
  325. package/src/tools/subagent-render.ts +6 -2
  326. package/src/tools/subagent.ts +6 -0
  327. package/src/tools/telegram-send.ts +6 -3
  328. package/src/tools/tool-result.ts +14 -1
  329. package/src/utils/gh.ts +39 -0
  330. package/src/utils/image-resize.ts +3 -0
  331. package/src/web/search/providers/anthropic.ts +4 -4
  332. package/src/web/search/providers/codex.ts +1 -1
  333. package/src/web/search/providers/kimi.ts +15 -5
  334. package/src/web/search/providers/searxng.ts +47 -4
  335. package/src/web/search/providers/xai.ts +7 -2
  336. package/dist/types/gjc-runtime/deep-interview-draft.d.ts +0 -8
  337. package/dist/types/gjc-runtime/deep-interview-payload.d.ts +0 -41
  338. package/dist/types/gjc-runtime/deep-interview-repair.d.ts +0 -17
  339. package/dist/types/gjc-runtime/ultragoal-pipeline.d.ts +0 -23
  340. package/src/defaults/gjc/skills/ultragoal/pipeline-validation-contracts.md +0 -30
  341. package/src/gjc-runtime/deep-interview-draft.ts +0 -843
  342. package/src/gjc-runtime/deep-interview-payload.ts +0 -262
  343. package/src/gjc-runtime/deep-interview-repair.ts +0 -1674
  344. package/src/gjc-runtime/ultragoal-pipeline.ts +0 -306
@@ -31,6 +31,8 @@ export interface SessionBeforeSwitchEvent {
31
31
  /** Session file we're switching to (only for "resume") */
32
32
  targetSessionFile?: string;
33
33
  }
34
+ /** Origin used when an interactive session selector resumes a session. */
35
+ export declare const INTERACTIVE_SELECTOR_RESUME_ORIGIN = "interactive_selector_resume";
34
36
  /** Fired after switching to another session */
35
37
  export interface SessionSwitchEvent {
36
38
  type: "session_switch";
@@ -38,6 +40,10 @@ export interface SessionSwitchEvent {
38
40
  reason: "new" | "resume" | "fork";
39
41
  /** Session file we came from */
40
42
  previousSessionFile: string | undefined;
43
+ /** Optional provenance for this session transition. */
44
+ transition?: {
45
+ origin: string;
46
+ };
41
47
  }
42
48
  /** Fired before branching a session (can be cancelled) */
43
49
  export interface SessionBeforeBranchEvent {
@@ -9,13 +9,15 @@ export interface AmbiguityClampResult {
9
9
  effective: number;
10
10
  clamped: boolean;
11
11
  }
12
- /** Compute the deterministic floor from integer units of persisted evidence. */
12
+ /** Compute the deterministic floor from the inner deep-interview `state` object. */
13
13
  export declare function computeAmbiguityFloor(inner: unknown): AmbiguityFloorBreakdown;
14
14
  /** Clamp an LLM-reported ambiguity to the deterministic floor: `max(reported, floor)`. */
15
15
  export declare function clampReportedAmbiguity(reported: number, floor: number): AmbiguityClampResult;
16
16
  /**
17
- * Legacy pure utility for migrations and explicit repair flows. The recorder does
18
- * not dispute facts when an answer is retracted: scored evidence is immutable.
17
+ * Mark every established fact recorded in `retractedRound` as disputed. This is the
18
+ * mechanical contradiction signal for answer retraction: when the user replaces an
19
+ * already-scored answer (A -> B pivot), the facts that answer established can no
20
+ * longer be trusted, so they raise the floor until re-confirmed or superseded.
19
21
  * Returns new arrays/objects; never mutates the input.
20
22
  */
21
23
  export declare function disputeFactsFromRetractedRound(facts: readonly unknown[], retractedRound: number): {
@@ -35,12 +37,3 @@ export interface AppliedAmbiguityFloor {
35
37
  * (state CLI write/reconcile, recorder) applies this immediately before persisting.
36
38
  */
37
39
  export declare function applyAmbiguityFloorToEnvelope(value: unknown): AppliedAmbiguityFloor;
38
- export type DeepInterviewAmbiguityMilestone = "initial" | "progress" | "refined" | "ready";
39
- export declare function deriveAmbiguityMilestone(effectiveUnits: number, thresholdUnits: number): DeepInterviewAmbiguityMilestone;
40
- export declare function scoreToUnits(score: number): number;
41
- export declare function weightedAmbiguityUnits(scores: {
42
- goal: number;
43
- constraints: number;
44
- criteria: number;
45
- context?: number;
46
- }, type: "greenfield" | "brownfield"): number;
@@ -1,4 +1,4 @@
1
- import { type DeepInterviewEstablishedFact, type DeepInterviewIntentItem, type DeepInterviewIntentSubstitution, type DeepInterviewRoundRecord, type DeepInterviewRoundResultV1, type DeepInterviewStateEnvelope, type DeepInterviewTriggerMetadata } from "./deep-interview-state";
1
+ import { type DeepInterviewEstablishedFact, type DeepInterviewIntentItem, type DeepInterviewIntentSubstitution, type DeepInterviewRoundRecord, type DeepInterviewStateEnvelope, type DeepInterviewTriggerMetadata } from "./deep-interview-state";
2
2
  export * from "./deep-interview-ambiguity";
3
3
  export * from "./deep-interview-state";
4
4
  /**
@@ -40,8 +40,6 @@ export interface DeepInterviewScoringInput {
40
40
  scores: Record<string, number>;
41
41
  ambiguity: number;
42
42
  triggers?: DeepInterviewTriggerMetadata[];
43
- /** Complete native round result for typed callers. */
44
- roundResult?: DeepInterviewRoundResultV1;
45
43
  }
46
44
  export type AppendOrMergeAction = "created" | "noop" | "replaced";
47
45
  export interface AppendOrMergeResult {
@@ -69,9 +67,11 @@ export interface TransitionValidationResult {
69
67
  }
70
68
  export declare function buildAnswerShell(input: DeepInterviewAnswerInput, now?: string): DeepInterviewRoundRecord;
71
69
  /**
72
- * Append-or-merge by `round_key`. An answer is a no-op only when its complete
73
- * canonical shell identity matches; a scored record is immutable evidence and
74
- * cannot be replaced by a late answer.
70
+ * Append-or-merge by `round_key`. Exactly one record per key:
71
+ * - no existing record -> append (`created`);
72
+ * - identical question_hash + answer_hash -> deterministic no-op (`noop`);
73
+ * - same key, different hashes -> deterministic replacement of the prior shell
74
+ * (`replaced`); the prior answer for that key is superseded and lifecycle resets.
75
75
  */
76
76
  export declare function appendOrMergeRound(rounds: readonly DeepInterviewRoundRecord[], shell: DeepInterviewRoundRecord): AppendOrMergeResult;
77
77
  /**
@@ -94,43 +94,28 @@ export declare function ensureDeepInterviewStateShape(value: unknown): DeepInter
94
94
  export declare function projectCompactState(value: unknown, options?: {
95
95
  lastN?: number;
96
96
  }): DeepInterviewCompactState;
97
- interface RecorderMutationOptions {
98
- sessionId?: string;
99
- expectedRevision?: number;
100
- }
101
- export interface DeepInterviewPostCommitWarning {
102
- code: "DI_POST_COMMIT_AUDIT_FAILED" | "DI_POST_COMMIT_ACTIVITY_FAILED" | "DI_POST_COMMIT_HUD_FAILED";
103
- message: string;
104
- }
105
- export declare function runDeepInterviewPostCommitEffects(options: {
106
- cwd: string;
107
- statePath: string;
108
- sessionId: string;
109
- envelope: Record<string, unknown>;
110
- revision: number;
111
- writer: string;
112
- auditWarnings?: readonly {
113
- code: "DI_POST_COMMIT_AUDIT_FAILED";
114
- message: string;
115
- }[];
116
- }): Promise<DeepInterviewPostCommitWarning[]>;
117
97
  /** Refresh the best-effort HUD cache from persisted deep-interview state. */
118
98
  export declare function syncDeepInterviewRecorderHud(cwd: string, statePath: string, sessionId: string | undefined): Promise<void>;
119
99
  /**
120
100
  * Record an `answered` shell for one round (append-or-merge by durable key).
121
101
  *
122
- * Replacing an already-scored answer is rejected with
123
- * `DI_ANSWER_LIFECYCLE_CONFLICT`; scored evidence is immutable.
102
+ * Retraction dynamics: replacing an already-`scored` answer is a mechanical
103
+ * contradiction signal (the user pivoted). The facts that round established are
104
+ * marked disputed, which raises the deterministic ambiguity floor immediately —
105
+ * without waiting for the LLM scorer to self-report a trigger.
124
106
  */
125
- export declare function appendOrMergeDeepInterviewRound(cwd: string, statePath: string, input: DeepInterviewAnswerInput, options?: RecorderMutationOptions): Promise<{
107
+ export declare function appendOrMergeDeepInterviewRound(cwd: string, statePath: string, input: DeepInterviewAnswerInput, options?: {
108
+ sessionId?: string;
109
+ }): Promise<{
126
110
  action: AppendOrMergeAction;
127
111
  record: DeepInterviewRoundRecord;
128
- warnings: DeepInterviewPostCommitWarning[];
112
+ disputedFactIds?: string[];
129
113
  }>;
130
114
  /** Merge scoring output into the same round record, transitioning to `scored`. */
131
- export declare function enrichDeepInterviewRoundScoring(cwd: string, statePath: string, input: DeepInterviewScoringInput, options?: RecorderMutationOptions): Promise<{
115
+ export declare function enrichDeepInterviewRoundScoring(cwd: string, statePath: string, input: DeepInterviewScoringInput, options?: {
116
+ sessionId?: string;
117
+ }): Promise<{
132
118
  record: DeepInterviewRoundRecord;
133
- warnings: DeepInterviewPostCommitWarning[];
134
119
  }>;
135
120
  /** Compact projection so callers read a slice instead of the full transcript. */
136
121
  export declare function readDeepInterviewStateCompact(statePath: string, options?: {
@@ -0,0 +1,37 @@
1
+ import { CommandError } from "./workflow-cli-common";
2
+ export declare const DEEP_INTERVIEW_STAGE_TRANSITIONS: readonly ["initialize-context", "record-round", "update-facts", "merge-state"];
3
+ export type DeepInterviewStageTransition = (typeof DEEP_INTERVIEW_STAGE_TRANSITIONS)[number];
4
+ declare const DRAFT_VERSION = 1;
5
+ export type DeepInterviewStageErrorCode = "DI_STAGE_USAGE" | "DI_STAGE_INPUT_INVALID" | "DI_STAGE_SESSION_REQUIRED" | "DI_STAGE_DRAFT_EXISTS" | "DI_STAGE_NO_DRAFT" | "DI_STAGE_DRAFT_CORRUPT" | "DI_STAGE_STATE_MISSING" | "DI_STAGE_STATE_CORRUPT" | "DI_STAGE_REVISION_CONFLICT" | "DI_STAGE_MERGE_REJECTED";
6
+ export declare class DeepInterviewStageError extends CommandError {
7
+ readonly code: DeepInterviewStageErrorCode;
8
+ readonly recovery?: string | undefined;
9
+ constructor(code: DeepInterviewStageErrorCode, message: string, recovery?: string | undefined);
10
+ }
11
+ export interface DeepInterviewStageDraft {
12
+ version: typeof DRAFT_VERSION;
13
+ draft_id: string;
14
+ session_id: string;
15
+ transition: DeepInterviewStageTransition;
16
+ /** State revision the draft was staged against; `apply` CAS-checks this. */
17
+ staged_against_revision: number;
18
+ /**
19
+ * Canonical content SHA-256 of the state the draft was staged against. Revision
20
+ * alone cannot catch sanctioned writers that do not bump `state_revision`
21
+ * (seed/spec-persistence), so `apply` requires BOTH to match.
22
+ */
23
+ staged_against_sha256: string;
24
+ payload: Record<string, unknown>;
25
+ created_at: string;
26
+ }
27
+ export interface DeepInterviewStageCommandResult {
28
+ status: number;
29
+ stdout?: string;
30
+ stderr?: string;
31
+ }
32
+ export declare function deepInterviewDraftPath(cwd: string, sessionId: string): string;
33
+ export declare const DEEP_INTERVIEW_STAGE_VERBS: readonly ["stage", "check", "apply", "discard", "read", "write", "clear", "handoff"];
34
+ export type DeepInterviewStageVerb = (typeof DEEP_INTERVIEW_STAGE_VERBS)[number];
35
+ export declare function isDeepInterviewStageVerb(value: string | undefined): value is DeepInterviewStageVerb;
36
+ export declare function runDeepInterviewStageCommand(verb: DeepInterviewStageVerb, args: readonly string[], cwd?: string): Promise<DeepInterviewStageCommandResult>;
37
+ export {};
@@ -1,4 +1,3 @@
1
- import { computeAmbiguityFloor, type DeepInterviewAmbiguityMilestone } from "./deep-interview-ambiguity";
2
1
  /**
3
2
  * Pure, dependency-free foundation for deep-interview state shape.
4
3
  *
@@ -36,6 +35,10 @@ export interface DeepInterviewTriggerMetadata {
36
35
  status: DeepInterviewTriggerStatus;
37
36
  component: string;
38
37
  dimension: string;
38
+ priorDimensionScore?: number;
39
+ newDimensionScore?: number;
40
+ priorAmbiguity?: number;
41
+ newAmbiguity?: number;
39
42
  evidence?: string;
40
43
  contradictedFactId?: string;
41
44
  /** Required when status is `disputed` or `unresolved` to exempt the invariant. */
@@ -65,11 +68,9 @@ export interface DeepInterviewRoundRecord {
65
68
  /** Deterministic floor in effect when this round was scored, when it clamped. */
66
69
  ambiguity_floor?: number;
67
70
  triggers?: DeepInterviewTriggerMetadata[];
68
- round_result_digest?: string;
69
71
  }
70
72
  export interface DeepInterviewStateEnvelope {
71
73
  threshold?: number;
72
- threshold_units?: number;
73
74
  threshold_source?: string;
74
75
  state?: Record<string, unknown>;
75
76
  [key: string]: unknown;
@@ -196,135 +197,3 @@ export declare function assertDeepInterviewIntentReview(value: unknown, locked:
196
197
  round: unknown;
197
198
  answer_hash: unknown;
198
199
  }[]): asserts value is DeepInterviewIntentReview;
199
- export type DeepInterviewDimension = "goal" | "constraints" | "criteria" | "context";
200
- export type DeepInterviewResolution = "auto_research_accepted" | "auto_answer" | "direct" | "refined" | "cited_confirmation";
201
- export interface DeepInterviewFactOperation {
202
- op: "add" | "dispute" | "supersede";
203
- id: string;
204
- statement?: string;
205
- component?: string;
206
- dimension?: DeepInterviewDimension;
207
- evidence?: string;
208
- target_id?: string;
209
- }
210
- export interface DeepInterviewOntologyEntity {
211
- id: string;
212
- name: string;
213
- type: string;
214
- fields: string[];
215
- }
216
- export interface DeepInterviewOntologyRelationship {
217
- id: string;
218
- from_entity_id: string;
219
- to_entity_id: string;
220
- type: string;
221
- }
222
- export interface DeepInterviewOntologyReasoning {
223
- statement: string;
224
- evidence?: string;
225
- }
226
- export interface DeepInterviewOntologyInput {
227
- entities: DeepInterviewOntologyEntity[];
228
- relationships: DeepInterviewOntologyRelationship[];
229
- reasoning: DeepInterviewOntologyReasoning[];
230
- }
231
- export interface DeepInterviewComponentUpdate {
232
- component_id: string;
233
- scores: Record<DeepInterviewDimension, number>;
234
- }
235
- /**
236
- * Optional legacy assertions accepted only when they agree with the native
237
- * target. The persisted target is always derived from component scores.
238
- */
239
- export interface DeepInterviewTargetingInput {
240
- target_component_id?: string;
241
- target_dimension?: DeepInterviewDimension;
242
- weakest_component_id?: string;
243
- weakest_dimension?: DeepInterviewDimension;
244
- last_targeted_component_id?: string | null;
245
- }
246
- export interface DeepInterviewRoundBookkeeping {
247
- resolution: DeepInterviewResolution;
248
- round_ids?: string[];
249
- counter_deltas?: Record<string, number>;
250
- }
251
- /**
252
- * Closed evidence submitted for one scoring transaction. All convergence values
253
- * (ambiguity, floor, milestone, ontology counts, rotation, and streak) are
254
- * native-derived and intentionally cannot be supplied here.
255
- */
256
- export interface DeepInterviewRoundResultV1 {
257
- global_scores: Record<DeepInterviewDimension, number>;
258
- component_updates?: DeepInterviewComponentUpdate[];
259
- targeting?: DeepInterviewTargetingInput;
260
- triggers?: DeepInterviewTriggerMetadata[];
261
- fact_ops?: DeepInterviewFactOperation[];
262
- ontology?: DeepInterviewOntologyInput | DeepInterviewOntologyEntity[];
263
- bookkeeping?: DeepInterviewRoundBookkeeping;
264
- /** Compatibility adapter for recorder callers; never persisted as the v1 wire shape. */
265
- component_scores?: Record<string, Record<DeepInterviewDimension, number>>;
266
- auto_answered?: boolean;
267
- }
268
- /**
269
- * Version 1 native projection returned by `apply-round-result` as
270
- * `native_projection`. This is the complete renderable convergence surface;
271
- * callers must not derive or supplement it from candidate scorer input.
272
- */
273
- export interface DeepInterviewRoundResultProjection {
274
- score_units: Partial<Record<DeepInterviewDimension, number>>;
275
- weighted_ambiguity: number;
276
- weighted_ambiguity_units: number;
277
- floor: number;
278
- floor_units: number;
279
- floor_cause: ReturnType<typeof computeAmbiguityFloor>;
280
- effective_ambiguity: number;
281
- effective_ambiguity_units: number;
282
- prior_effective_ambiguity: number | null;
283
- direction: "increased" | "decreased" | "unchanged" | "initial";
284
- ambiguity_milestone: DeepInterviewAmbiguityMilestone;
285
- topology: unknown;
286
- topology_counts: {
287
- active: number;
288
- deferred: number;
289
- total: number;
290
- };
291
- ontology: unknown;
292
- ontology_counts: {
293
- stable: number;
294
- changed: number;
295
- new: number;
296
- basis: string;
297
- };
298
- targeting: {
299
- target_component_id: string | null;
300
- target_dimension: DeepInterviewDimension | null;
301
- last_targeted_component_id: string | null;
302
- };
303
- transition: {
304
- round_key: string;
305
- lifecycle: "scored";
306
- auto_answer_streak: number;
307
- };
308
- }
309
- export type DeepInterviewApplyRoundResult = {
310
- kind: "noop";
311
- envelope: DeepInterviewStateEnvelope;
312
- projection?: DeepInterviewRoundResultProjection;
313
- } | {
314
- kind: "write";
315
- envelope: DeepInterviewStateEnvelope;
316
- projection: DeepInterviewRoundResultProjection;
317
- };
318
- /** Strict UTF-8 JSON serialization used by v1 replay digests. */
319
- export declare function canonicalDeepInterviewJson(value: unknown): string;
320
- export declare function deepInterviewRoundResultDigest(input: {
321
- round: number;
322
- question_id: string;
323
- round_id?: string | null;
324
- result: unknown;
325
- }): string;
326
- /** Complete persisted answer identity; omitted optional values normalize to null. */
327
- export declare function deepInterviewAnswerIdentityEqual(a: Pick<DeepInterviewRoundRecord, "round" | "round_key" | "round_id" | "question_id" | "component" | "dimension" | "question_text" | "question_hash" | "selected_options" | "custom_input">, b: Pick<DeepInterviewRoundRecord, "round" | "round_key" | "round_id" | "question_id" | "component" | "dimension" | "question_text" | "question_hash" | "selected_options" | "custom_input">): boolean;
328
- /** Apply one closed v1 scoring round. The input contains evidence only; all convergence state is derived here. */
329
- export declare function applyDeepInterviewRoundResultV1(envelopeValue: unknown, roundKey: string, result: DeepInterviewRoundResultV1, now: string): DeepInterviewApplyRoundResult;
330
- export declare function validateDeepInterviewV1Envelope(value: Record<string, unknown>): void;
@@ -12,7 +12,7 @@
12
12
  * error all mean KEEP — a live process is never signalled or killed.
13
13
  * - Dry-run by default: nothing is deleted unless `--prune`/`--force`.
14
14
  */
15
- export type GcStore = "harness_leases" | "team_workers" | "file_locks" | "tmux_sessions" | "registry_entries";
15
+ export type GcStore = "harness_leases" | "team_workers" | "file_locks" | "tmux_sessions" | "registry_entries" | "local_roots";
16
16
  export declare const GC_STORES: readonly GcStore[];
17
17
  /** Why a probed pid is kept instead of treated as dead. */
18
18
  export type GcPidKeepReason = "alive" | "eperm" | "unknown";
@@ -87,6 +87,7 @@ export interface TmuxLaunchPlan {
87
87
  createdServerIdentity?: {
88
88
  pid: number;
89
89
  startTime: string;
90
+ pidProven?: boolean;
90
91
  };
91
92
  isPsmux: boolean;
92
93
  platform: NodeJS.Platform;
@@ -0,0 +1,47 @@
1
+ import { type LinuxProcPidProbeResult } from "./linux-proc";
2
+ declare const MEMORY_GUARD_CLAIM_RESOURCES: readonly ["writer", "tty"];
3
+ type MemoryGuardClaimResource = (typeof MEMORY_GUARD_CLAIM_RESOURCES)[number];
4
+ export interface MemoryGuardClaimOwner {
5
+ sessionId: string;
6
+ generation: string;
7
+ runId: string;
8
+ childToken: string;
9
+ pid: number;
10
+ processStartTime: string;
11
+ ttyDevice: string;
12
+ }
13
+ export interface MemoryGuardClaimsLease {
14
+ writerEpoch: number;
15
+ ttyEpoch: number;
16
+ owner: MemoryGuardClaimOwner;
17
+ claimStorePath: string;
18
+ }
19
+ export declare function isMemoryGuardClaimsLease(value: unknown): value is MemoryGuardClaimsLease;
20
+ export declare function isMemoryGuardClaimsLeaseForStateDir(value: unknown, stateDir: string): value is MemoryGuardClaimsLease;
21
+ export type MemoryGuardClaimsReleasedProof = MemoryGuardClaimsLease;
22
+ interface PersistedMemoryGuardClaimRow {
23
+ resource: MemoryGuardClaimResource;
24
+ epoch: number;
25
+ session_id: string;
26
+ generation: string;
27
+ run_id: string;
28
+ child_token: string;
29
+ pid: number;
30
+ process_start_time: string;
31
+ tty_device: string;
32
+ acquired_at: string;
33
+ }
34
+ export interface MemoryGuardOwnerClaimsDeps {
35
+ probePid(pid: number): Promise<LinuxProcPidProbeResult>;
36
+ now(): string;
37
+ }
38
+ export declare function memoryGuardClaimsDatabaseFile(stateDir: string, sessionId: string): string;
39
+ export declare function acquireMemoryGuardClaims(stateDir: string, owner: MemoryGuardClaimOwner, deps?: MemoryGuardOwnerClaimsDeps): Promise<MemoryGuardClaimsLease>;
40
+ export declare function releaseMemoryGuardClaims(stateDir: string, claim: MemoryGuardClaimsLease): Promise<void>;
41
+ export declare function probeMemoryGuardClaimsReleased(stateDir: string, owner: MemoryGuardClaimOwner, deps?: MemoryGuardOwnerClaimsDeps): Promise<MemoryGuardClaimsReleasedProof>;
42
+ export interface PersistedMemoryGuardClaimsSnapshot {
43
+ epoch: number;
44
+ claims: PersistedMemoryGuardClaimRow[];
45
+ }
46
+ export declare function readMemoryGuardClaimsForTest(stateDir: string, sessionId: string): Promise<PersistedMemoryGuardClaimsSnapshot>;
47
+ export {};
@@ -13,7 +13,7 @@ import { type RalplanIndexRow } from "./ledger-event-renderer";
13
13
  *
14
14
  * 2. **Artifact write**: `gjc ralplan --write --stage <type> --stage_n <N>
15
15
  * (--artifact <path-or-string> | --artifact-env GJC_RALPLAN_ARTIFACT)
16
- * [--run-id <id>] [--session-id <id>] [--json]` persists Planner / Architect
16
+ * [--run-id <id>] [--session-id <id>] [--lane-verdict <token>] [--json]` persists Planner / Architect
17
17
  * / Critic / revision / post-interview / ADR / final markdown under `.gjc/plans/ralplan/<run-id>/`, maintains
18
18
  * an `index.jsonl` audit log, copies `final` stages to `pending-approval.md`, and advances
19
19
  * the HUD chip to reflect the latest persisted stage.
@@ -29,6 +29,17 @@ export declare const RALPLAN_DEFAULT_MAX_ITERATIONS = 5;
29
29
  export declare const RALPLAN_MAX_ITERATIONS_LIMIT = 20;
30
30
  /** Operator-visible stuck signal for headless/CI orchestration (#3165). */
31
31
  export declare const PLANNING_STUCK_MARKER = "PLANNING-STUCK";
32
+ /** Default architect/critic review passes per consensus iteration. */
33
+ export declare const RALPLAN_DEFAULT_MAX_REVIEW_PASSES_PER_LANE = 1;
34
+ /** Inclusive upper bound for `gjc.ralplan.maxReviewPassesPerLane` settings overrides. */
35
+ export declare const RALPLAN_MAX_REVIEW_PASSES_PER_LANE_LIMIT = 10;
36
+ export type RalplanAutoHandoffTarget = "off" | "ultragoal" | "team";
37
+ export interface RalplanAutoHandoffResolution {
38
+ configuredTarget: RalplanAutoHandoffTarget;
39
+ effectiveTarget: RalplanAutoHandoffTarget;
40
+ degradationReason: string | null;
41
+ source: string;
42
+ }
32
43
  export type RalplanIterationCapDecision = {
33
44
  allowed: true;
34
45
  currentIterations: number;
@@ -58,11 +69,52 @@ export declare function evaluateRalplanIterationCap(input: {
58
69
  /** Minimum opener count (e.g. on-disk stage-*-{planner,revision}.md). */
59
70
  iterationFloor?: number;
60
71
  }): RalplanIterationCapDecision;
72
+ export type RalplanReviewLane = "architect" | "critic";
73
+ export type RalplanReviewLaneBudgetDecision = {
74
+ allowed: true;
75
+ lane?: RalplanReviewLane;
76
+ currentPasses: number;
77
+ projectedPasses: number;
78
+ maxReviewPassesPerLane: number;
79
+ finalSlot: boolean;
80
+ ledgerNote?: string;
81
+ } | {
82
+ allowed: false;
83
+ lane: RalplanReviewLane;
84
+ currentPasses: number;
85
+ projectedPasses: number;
86
+ maxReviewPassesPerLane: number;
87
+ finalSlot: false;
88
+ ledgerNote?: string;
89
+ reason: string;
90
+ };
91
+ /**
92
+ * Pure per-lane review-pass budget gate. Architect and critic passes are limited
93
+ * within the current consensus iteration; all other stages remain unconditionally
94
+ * available as escalation paths.
95
+ */
96
+ export declare function evaluateRalplanReviewLaneBudget(input: {
97
+ rows: readonly RalplanIndexRow[];
98
+ stage: string;
99
+ maxReviewPassesPerLane?: unknown;
100
+ onDiskLaneCounts?: {
101
+ architect: number;
102
+ critic: number;
103
+ };
104
+ }): RalplanReviewLaneBudgetDecision;
61
105
  /**
62
106
  * Count on-disk planner/revision stage artifacts for a run. Used as a floor when
63
107
  * `index.jsonl` is missing, empty, truncated, or otherwise under-counts openers.
64
108
  */
65
109
  export declare function countRalplanOnDiskOpeners(cwd: string, sessionId: string, runId: string): Promise<number>;
110
+ /**
111
+ * Count on-disk Architect/Critic stage artifacts for a run. This is the
112
+ * fail-closed floor for a missing, truncated, or malformed `index.jsonl`.
113
+ */
114
+ export declare function countRalplanOnDiskLaneArtifacts(cwd: string, sessionId: string, runId: string): Promise<{
115
+ architect: number;
116
+ critic: number;
117
+ }>;
66
118
  /**
67
119
  * Load index rows for cap enforcement. Unlike HUD reads, returns structural
68
120
  * signals so callers can fail closed when the ledger is empty/malformed while
@@ -73,6 +125,7 @@ export declare function loadRalplanIndexForCap(cwd: string, sessionId: string, r
73
125
  indexPresent: boolean;
74
126
  parseableLines: number;
75
127
  rawLineCount: number;
128
+ rawText?: string;
76
129
  }>;
77
130
  /**
78
131
  * Resolve ralplan consensus iteration cap. Project `./.gjc/settings.json` overrides
@@ -82,5 +135,21 @@ export declare function resolveRalplanMaxIterations(cwd: string): Promise<{
82
135
  maxIterations: number;
83
136
  source: string;
84
137
  }>;
138
+ type RalplanAutoHandoffOptions = {
139
+ planningStuck?: boolean;
140
+ teamAvailabilityProbe?: () => {
141
+ available: true;
142
+ } | {
143
+ available: false;
144
+ reason: string;
145
+ };
146
+ };
147
+ export declare function resolveRalplanAutoHandoff(cwd: string, options?: RalplanAutoHandoffOptions): Promise<RalplanAutoHandoffResolution>;
148
+ /** Resolve the per-lane review-pass budget with project-over-user precedence. */
149
+ export declare function resolveRalplanMaxReviewPassesPerLane(cwd: string): Promise<{
150
+ maxReviewPassesPerLane: number;
151
+ source: string;
152
+ }>;
85
153
  export declare function isRalplanArtifactWriteInvocation(args: readonly string[]): boolean;
86
154
  export declare function runNativeRalplanCommand(args: string[], cwd?: string): Promise<RalplanCommandResult>;
155
+ export {};
@@ -46,47 +46,6 @@ export interface WorkflowEnvelopeIntegrityMismatch {
46
46
  expected: string;
47
47
  actual: string;
48
48
  }
49
- export type WorkflowReceiptVerification = "legacy" | "native-valid" | "receipt-malformed" | "receipt-missing" | "checksum-mismatch";
50
- export interface GuardedWorkflowEnvelopeTransformOptions extends StateWriterOptions {
51
- expectedRevision: number;
52
- /** Additional native schema validation applied to both current and candidate envelopes. */
53
- validate?: (value: Record<string, unknown>, legacy: boolean) => void;
54
- transform: (current: Record<string, unknown>, context: {
55
- revision: number;
56
- legacy: boolean;
57
- }) => {
58
- kind: "noop";
59
- } | {
60
- kind: "write";
61
- value: Record<string, unknown>;
62
- } | Promise<{
63
- kind: "noop";
64
- } | {
65
- kind: "write";
66
- value: Record<string, unknown>;
67
- }>;
68
- }
69
- export interface GuardedWorkflowEnvelopeWarning {
70
- code: "DI_POST_COMMIT_AUDIT_FAILED";
71
- message: string;
72
- }
73
- export type GuardedWorkflowEnvelopeTransformResult = {
74
- path: string;
75
- written: false;
76
- reason: "noop";
77
- revision: number;
78
- warnings: [];
79
- } | {
80
- path: string;
81
- written: true;
82
- revision: number;
83
- stamped: Record<string, unknown>;
84
- warnings: GuardedWorkflowEnvelopeWarning[];
85
- };
86
- export declare class GuardedWorkflowEnvelopeError extends Error {
87
- readonly code: string;
88
- constructor(code: string);
89
- }
90
49
  export interface WorkflowTransactionJournal {
91
50
  version: 1;
92
51
  mutation_id: string;
@@ -103,7 +62,6 @@ export interface GuardedStateWriterOptions extends StateWriterOptions {
103
62
  policy: StateWritePolicy;
104
63
  expectedRevision?: number;
105
64
  sourceRevision?: number;
106
- lockHeld?: boolean;
107
65
  }
108
66
  export type GuardedWriteResult = {
109
67
  path: string;
@@ -121,13 +79,17 @@ export interface StateWriterOptions {
121
79
  receipt?: StateWriterReceiptContext;
122
80
  audit?: StateWriterAuditContext;
123
81
  sourceRevision?: number;
124
- orderingRevision?: number;
125
82
  /**
126
83
  * Cross-process lock tuning for read-modify-write paths that route through
127
84
  * `withWorkflowStateLock` / `updateJsonAtomic`. Omit for the hardened
128
85
  * `withFileLock` defaults.
129
86
  */
130
87
  lock?: FileLockOptions;
88
+ /**
89
+ * Caller already holds the workflow state lock for this target path (via
90
+ * `withWorkflowStateLock`). Skip re-acquisition to avoid self-deadlock.
91
+ */
92
+ lockHeld?: boolean;
131
93
  }
132
94
  export declare class StateWriteConflictError extends Error {
133
95
  readonly path: string;
@@ -183,8 +145,6 @@ export type StrictMutationReadResult = {
183
145
  };
184
146
  export declare function readExistingStateForMutation(filePath: string): Promise<StrictMutationReadResult>;
185
147
  export declare function workflowEnvelopeContentSha256(value: unknown): string;
186
- export declare function isNativeDeepInterviewV1(value: Record<string, unknown>): boolean;
187
- export declare function verifyWorkflowEnvelopeReceiptValue(value: unknown, filePath: string): WorkflowReceiptVerification;
188
148
  export declare function stampWorkflowEnvelopeChecksum<T>(value: T, filePath: string, computedAt?: string): T;
189
149
  export declare function detectWorkflowEnvelopeIntegrityMismatch(filePath: string): Promise<WorkflowEnvelopeIntegrityMismatch | undefined>;
190
150
  type ActiveStateCacheInvalidator = (cwd?: string, sessionId?: string) => void;
@@ -192,7 +152,6 @@ export declare function setActiveStateCacheInvalidator(invalidator: ActiveStateC
192
152
  export declare function persistedStateRevision(value: unknown): number;
193
153
  export declare function writeGuardedJsonAtomic(targetPath: string, value: unknown, options: GuardedStateWriterOptions): Promise<GuardedWriteResult>;
194
154
  export declare function writeGuardedWorkflowEnvelopeAtomic(targetPath: string, value: unknown, options: GuardedStateWriterOptions): Promise<GuardedWriteResult>;
195
- export declare function transformGuardedWorkflowEnvelopeAtomic(targetPath: string, options: GuardedWorkflowEnvelopeTransformOptions): Promise<GuardedWorkflowEnvelopeTransformResult>;
196
155
  export declare function writeJsonAtomic(targetPath: string, value: unknown, options?: StateWriterOptions): Promise<string>;
197
156
  export declare function writeWorkflowEnvelopeAtomic(targetPath: string, value: unknown, options?: StateWriterOptions): Promise<string>;
198
157
  export declare function writeTextAtomic(targetPath: string, text: string, options?: StateWriterOptions): Promise<string>;
@@ -2,7 +2,7 @@ import type { GjcTeamConfig, GjcTeamSnapshot, GjcTeamStartOptions, GjcTeamTask,
2
2
  /** Launch-specific option wiring kept separate from runtime dispatch. */
3
3
  export declare function withTeamLaunchTransport(options: GjcTeamStartOptions, mailboxDeliveryTransport: GjcTeamStartOptions["mailboxDeliveryTransport"]): GjcTeamStartOptions;
4
4
  /** @internal Exported for unit tests. */
5
- export declare function buildWorkerCommand(config: GjcTeamConfig, worker: GjcTeamWorker, platform?: NodeJS.Platform): string;
5
+ export declare function buildWorkerCommand(config: GjcTeamConfig, worker: GjcTeamWorker, platform?: NodeJS.Platform, promptOverride?: string, env?: NodeJS.ProcessEnv): string;
6
6
  interface GjcTmuxBinary {
7
7
  command: string;
8
8
  isPsmux: boolean;