@gajae-code/coding-agent 0.14.2 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (345) hide show
  1. package/CHANGELOG.md +120 -1
  2. package/dist/types/async/job-manager.d.ts +4 -1
  3. package/dist/types/autoresearch/dashboard.d.ts +29 -4
  4. package/dist/types/autoresearch/data-context.d.ts +25 -0
  5. package/dist/types/autoresearch/git.d.ts +65 -7
  6. package/dist/types/autoresearch/harness.d.ts +58 -0
  7. package/dist/types/autoresearch/prompts.d.ts +51 -0
  8. package/dist/types/autoresearch/runs.d.ts +173 -0
  9. package/dist/types/autoresearch/types.d.ts +9 -139
  10. package/dist/types/capability/types.d.ts +20 -0
  11. package/dist/types/cli/accounts-cli.d.ts +1 -0
  12. package/dist/types/commands/{rlm.d.ts → autoresearch.d.ts} +2 -4
  13. package/dist/types/config/autorouting-contract.d.ts +146 -0
  14. package/dist/types/config/autorouting-generator.d.ts +40 -0
  15. package/dist/types/config/autorouting-tier-map.d.ts +16844 -0
  16. package/dist/types/config/autorouting.d.ts +35 -0
  17. package/dist/types/config/model-discovery-manager.d.ts +8 -1
  18. package/dist/types/config/model-registry.d.ts +30 -1
  19. package/dist/types/config/provider-selection-policy.d.ts +23 -0
  20. package/dist/types/config/settings-schema.d.ts +61 -3
  21. package/dist/types/config/settings.d.ts +3 -0
  22. package/dist/types/coordinator/contract.d.ts +1 -1
  23. package/dist/types/coordinator-mcp/durability.d.ts +29 -0
  24. package/dist/types/coordinator-mcp/event-webhook.d.ts +50 -0
  25. package/dist/types/coordinator-mcp/question-state.d.ts +1 -1
  26. package/dist/types/coordinator-mcp/server.d.ts +14 -0
  27. package/dist/types/crash/index-store.d.ts +3 -0
  28. package/dist/types/crash/record-loader.d.ts +2 -0
  29. package/dist/types/crash/upstream/relay.d.ts +5 -3
  30. package/dist/types/cursor.d.ts +12 -0
  31. package/dist/types/defaults/gjc-defaults.d.ts +35 -1
  32. package/dist/types/defaults/gjc-skills.generated.d.ts +1 -1
  33. package/dist/types/discovery/helpers.d.ts +1 -1
  34. package/dist/types/edit/index.d.ts +2 -1
  35. package/dist/types/eval/py/executor.d.ts +2 -0
  36. package/dist/types/extensibility/extensions/loader.d.ts +32 -0
  37. package/dist/types/extensibility/gjc-plugins/types.d.ts +1 -1
  38. package/dist/types/extensibility/skills.d.ts +2 -0
  39. package/dist/types/gjc-runtime/autoresearch-runtime.d.ts +194 -0
  40. package/dist/types/gjc-runtime/gc-runtime.d.ts +1 -1
  41. package/dist/types/gjc-runtime/psmux-detect.d.ts +1 -1
  42. package/dist/types/gjc-runtime/python-transcript.d.ts +19 -0
  43. package/dist/types/gjc-runtime/ralplan-runtime.d.ts +2 -8
  44. package/dist/types/gjc-runtime/session-layout.d.ts +6 -3
  45. package/dist/types/gjc-runtime/state-renderer.d.ts +0 -22
  46. package/dist/types/gjc-runtime/state-schema.d.ts +7 -7
  47. package/dist/types/gjc-runtime/tmux-common.d.ts +2 -2
  48. package/dist/types/gjc-runtime/ultragoal-change-set.d.ts +38 -1
  49. package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +2 -24
  50. package/dist/types/gjc-runtime/ultragoal-validation-policy.d.ts +73 -0
  51. package/dist/types/gjc-runtime/workflow-recovery-projection.d.ts +100 -0
  52. package/dist/types/hooks/skill-keywords.d.ts +1 -1
  53. package/dist/types/main.d.ts +0 -10
  54. package/dist/types/modes/acp/acp-agent.d.ts +13 -6
  55. package/dist/types/modes/components/model-selector.d.ts +14 -0
  56. package/dist/types/modes/components/skill-hud/render.d.ts +6 -1
  57. package/dist/types/modes/components/smart-routing-panel.d.ts +82 -0
  58. package/dist/types/modes/controllers/selector-controller.d.ts +14 -0
  59. package/dist/types/modes/interactive-mode.d.ts +3 -0
  60. package/dist/types/modes/types.d.ts +9 -0
  61. package/dist/types/rlm/artifacts.d.ts +4 -4
  62. package/dist/types/runtime/optional-runtime-services.d.ts +2 -1
  63. package/dist/types/runtime/workspace-tree-service.d.ts +5 -1
  64. package/dist/types/runtime-mcp/config.d.ts +6 -0
  65. package/dist/types/runtime-mcp/manager.d.ts +10 -0
  66. package/dist/types/sdk/acp/adapter.d.ts +0 -4
  67. package/dist/types/sdk/broker/broker.d.ts +1 -1
  68. package/dist/types/sdk/broker/lifecycle.d.ts +57 -2
  69. package/dist/types/sdk/broker/session-index.d.ts +15 -0
  70. package/dist/types/sdk/bus/chat-daemon-control.d.ts +6 -0
  71. package/dist/types/sdk/bus/chat-daemon-runtime.d.ts +4 -0
  72. package/dist/types/sdk/bus/index.d.ts +8 -0
  73. package/dist/types/sdk/bus/kind-aware-reconciliation.d.ts +2 -0
  74. package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +12 -2
  75. package/dist/types/sdk/client/client.d.ts +39 -4
  76. package/dist/types/sdk/host/host.d.ts +1 -0
  77. package/dist/types/sdk/host/internal-autorouting-state.d.ts +3 -0
  78. package/dist/types/sdk/host/model-pin.d.ts +29 -0
  79. package/dist/types/sdk/host/session-runtime.d.ts +2 -1
  80. package/dist/types/sdk/lifecycle-session.d.ts +13 -0
  81. package/dist/types/sdk/router/session-router.d.ts +27 -1
  82. package/dist/types/sdk/session.d.ts +11 -1
  83. package/dist/types/session/agent-session.d.ts +36 -6
  84. package/dist/types/session/artifacts.d.ts +16 -1
  85. package/dist/types/session/internal/managed-session-storage.d.ts +7 -0
  86. package/dist/types/session/session-manager.d.ts +84 -2
  87. package/dist/types/session/session-staging-paths.d.ts +3 -0
  88. package/dist/types/skill-state/canonical-skills.d.ts +1 -1
  89. package/dist/types/skill-state/workflow-hud.d.ts +12 -21
  90. package/dist/types/skill-state/workflow-mutation-guard.d.ts +1 -0
  91. package/dist/types/slash-commands/helpers/autorouting-status.d.ts +8 -0
  92. package/dist/types/system-prompt.d.ts +23 -0
  93. package/dist/types/task/executor.d.ts +35 -4
  94. package/dist/types/task/index.d.ts +17 -3
  95. package/dist/types/task/receipt.d.ts +3 -1
  96. package/dist/types/task/types.d.ts +144 -0
  97. package/dist/types/tools/atomic-file-write.d.ts +72 -0
  98. package/dist/types/tools/descriptors.d.ts +1 -0
  99. package/dist/types/tools/index.d.ts +36 -1
  100. package/dist/types/tools/move-session.d.ts +40 -0
  101. package/dist/types/tools/python.d.ts +12 -0
  102. package/dist/types/tools/resource-gc.d.ts +0 -3
  103. package/dist/types/tools/search.d.ts +8 -1
  104. package/dist/types/tools/skill.d.ts +9 -4
  105. package/dist/types/tools/subagent.d.ts +33 -3
  106. package/dist/types/utils/xml-escape.d.ts +2 -0
  107. package/dist/types/workflow/workflow-intent-diff.d.ts +2 -2
  108. package/dist/types/workflow/workflow-intent-report-consumer.d.ts +1 -1
  109. package/package.json +11 -12
  110. package/scripts/build-sdk-package-smoke.ts +7 -5
  111. package/scripts/check-autorouting-tier-map.ts +183 -0
  112. package/scripts/generate-sdk-operation-inventory.ts +12 -0
  113. package/scripts/generate-tool-catalog.ts +40 -5
  114. package/src/async/job-manager.ts +5 -2
  115. package/src/autoresearch/dashboard.ts +134 -314
  116. package/src/autoresearch/data-context.ts +35 -0
  117. package/src/autoresearch/git.ts +186 -26
  118. package/src/autoresearch/{helpers.ts → harness.ts} +65 -40
  119. package/src/autoresearch/{prompt-setup.md → prompts/prompt-setup.md} +7 -7
  120. package/src/autoresearch/prompts/prompt.md +103 -0
  121. package/src/autoresearch/prompts.ts +126 -0
  122. package/src/autoresearch/runs.ts +708 -0
  123. package/src/autoresearch/types.ts +9 -150
  124. package/src/capability/index.ts +4 -4
  125. package/src/capability/types.ts +20 -0
  126. package/src/cli/accounts-cli.ts +21 -5
  127. package/src/cli/config-cli.ts +25 -1
  128. package/src/cli/fast-help.ts +1 -2
  129. package/src/cli/list-models.ts +5 -8
  130. package/src/cli/setup-cli.ts +8 -0
  131. package/src/cli.ts +2 -21
  132. package/src/commands/autoresearch.ts +33 -0
  133. package/src/commands/coordinator.ts +15 -0
  134. package/src/commands/launch.ts +2 -4
  135. package/src/commands/quick-lane.ts +1 -1
  136. package/src/commands/sdk.ts +24 -0
  137. package/src/commands/state.ts +1 -1
  138. package/src/config/autorouting-contract.ts +474 -0
  139. package/src/config/autorouting-generator.ts +238 -0
  140. package/src/config/autorouting-tier-map.ts +6108 -0
  141. package/src/config/autorouting.ts +120 -0
  142. package/src/config/model-discovery-manager.ts +42 -11
  143. package/src/config/model-registry.ts +348 -68
  144. package/src/config/provider-selection-policy.ts +60 -9
  145. package/src/config/settings-schema.ts +195 -6
  146. package/src/config/settings.ts +62 -1
  147. package/src/config.ts +2 -3
  148. package/src/coordinator/contract.ts +0 -1
  149. package/src/coordinator-mcp/codex-handoff.ts +68 -42
  150. package/src/coordinator-mcp/durability.ts +200 -0
  151. package/src/coordinator-mcp/event-webhook.ts +278 -0
  152. package/src/coordinator-mcp/question-state.ts +109 -46
  153. package/src/coordinator-mcp/server.ts +932 -504
  154. package/src/crash/index-store.ts +126 -22
  155. package/src/crash/record-loader.ts +7 -0
  156. package/src/crash/upstream/relay.ts +82 -34
  157. package/src/cursor.ts +84 -1
  158. package/src/debug/index.ts +26 -0
  159. package/src/defaults/gjc/skills/autoresearch/SKILL.md +116 -0
  160. package/src/defaults/gjc/skills/autoresearch/auto-critic.md +46 -0
  161. package/src/defaults/gjc/skills/autoresearch/auto-iterate.md +42 -0
  162. package/src/defaults/gjc/skills/deep-interview/SKILL.md +17 -37
  163. package/src/defaults/gjc/skills/ralplan/SKILL.md +21 -18
  164. package/src/defaults/gjc/skills/ultragoal/SKILL.md +6 -17
  165. package/src/defaults/gjc/skills/ultragoal/ai-slop-cleaner.md +2 -2
  166. package/src/defaults/gjc-defaults.ts +89 -2
  167. package/src/defaults/gjc-skills.generated.ts +24 -17
  168. package/src/discovery/builtin.ts +18 -5
  169. package/src/discovery/helpers.ts +6 -6
  170. package/src/edit/index.ts +5 -2
  171. package/src/eval/py/executor.ts +8 -0
  172. package/src/extensibility/extensions/loader.ts +135 -13
  173. package/src/extensibility/extensions/wrapper.ts +1 -2
  174. package/src/extensibility/gjc-plugins/schema.ts +1 -1
  175. package/src/extensibility/runtime-skill-discovery.ts +2 -2
  176. package/src/extensibility/skill-management.ts +2 -3
  177. package/src/extensibility/skills.ts +16 -8
  178. package/src/gjc-runtime/autoresearch-runtime.ts +1509 -0
  179. package/src/gjc-runtime/gc-render.ts +0 -1
  180. package/src/gjc-runtime/gc-runtime.ts +1 -11
  181. package/src/gjc-runtime/launch-tmux.ts +3 -3
  182. package/src/gjc-runtime/psmux-detect.ts +2 -2
  183. package/src/gjc-runtime/python-transcript.ts +58 -0
  184. package/src/gjc-runtime/ralplan-runtime.ts +6 -18
  185. package/src/gjc-runtime/session-layout.ts +18 -7
  186. package/src/gjc-runtime/session-state-sidecar.ts +58 -9
  187. package/src/gjc-runtime/state-renderer.ts +0 -38
  188. package/src/gjc-runtime/state-runtime.ts +43 -22
  189. package/src/gjc-runtime/state-schema.ts +1 -1
  190. package/src/gjc-runtime/tmux-common.ts +7 -7
  191. package/src/gjc-runtime/ultragoal-change-set.ts +232 -11
  192. package/src/gjc-runtime/ultragoal-runtime.ts +309 -114
  193. package/src/gjc-runtime/ultragoal-validation-policy.ts +247 -0
  194. package/src/gjc-runtime/workflow-command-ref.ts +15 -11
  195. package/src/gjc-runtime/workflow-manifest.generated.json +413 -532
  196. package/src/gjc-runtime/workflow-manifest.ts +43 -83
  197. package/src/gjc-runtime/workflow-recovery-projection.ts +616 -0
  198. package/src/hooks/skill-keywords.ts +3 -3
  199. package/src/hooks/skill-state.ts +2 -2
  200. package/src/internal-urls/docs-index.generated.ts +26 -24
  201. package/src/lsp/index.ts +25 -5
  202. package/src/main.ts +2 -27
  203. package/src/modes/acp/acp-agent.ts +200 -75
  204. package/src/modes/components/model-selector.ts +216 -13
  205. package/src/modes/components/oauth-selector.ts +5 -5
  206. package/src/modes/components/skill-hud/render.ts +173 -35
  207. package/src/modes/components/smart-routing-panel.ts +531 -0
  208. package/src/modes/components/tool-status-header.ts +6 -3
  209. package/src/modes/controllers/command-controller.ts +17 -7
  210. package/src/modes/controllers/input-controller.ts +44 -9
  211. package/src/modes/controllers/runtime-mcp-command-controller.ts +4 -0
  212. package/src/modes/controllers/selector-controller.ts +298 -65
  213. package/src/modes/interactive-mode.ts +8 -1
  214. package/src/modes/shared/agent-wire/workflow-gate-types.ts +1 -1
  215. package/src/modes/types.ts +9 -1
  216. package/src/prompts/agents/planner.md +1 -1
  217. package/src/prompts/system/system-prompt.md +1 -1
  218. package/src/prompts/system/volatile-project-context.md +2 -1
  219. package/src/prompts/tools/move-session.md +15 -0
  220. package/src/prompts/tools/python.md +12 -0
  221. package/src/prompts/tools/skill-discovery.md +1 -1
  222. package/src/prompts/tools/skill.md +2 -2
  223. package/src/prompts/tools/task-summary.md +1 -0
  224. package/src/prompts/tools/task.md +6 -0
  225. package/src/rlm/artifacts.ts +12 -10
  226. package/src/runtime/optional-runtime-services.ts +3 -2
  227. package/src/runtime/workspace-tree-service.ts +11 -3
  228. package/src/runtime-mcp/config.ts +8 -1
  229. package/src/runtime-mcp/manager.ts +33 -0
  230. package/src/sdk/acp/adapter.ts +48 -1
  231. package/src/sdk/broker/broker.ts +30 -2
  232. package/src/sdk/broker/discovery.ts +217 -2
  233. package/src/sdk/broker/lifecycle.ts +385 -59
  234. package/src/sdk/broker/session-index.ts +243 -48
  235. package/src/sdk/broker/transport.ts +1 -0
  236. package/src/sdk/bus/chat-daemon-control.ts +8 -2
  237. package/src/sdk/bus/chat-daemon-runtime.ts +5 -0
  238. package/src/sdk/bus/index.ts +208 -11
  239. package/src/sdk/bus/kind-aware-reconciliation.ts +16 -0
  240. package/src/sdk/bus/reconciliation-store.ts +27 -5
  241. package/src/sdk/bus/telegram-daemon-contract.ts +12 -2
  242. package/src/sdk/client/client.ts +204 -22
  243. package/src/sdk/host/host.ts +16 -0
  244. package/src/sdk/host/internal-autorouting-state.ts +13 -0
  245. package/src/sdk/host/model-pin.ts +101 -0
  246. package/src/sdk/host/reverse-leases.ts +2 -1
  247. package/src/sdk/host/session-runtime.test.ts +224 -1
  248. package/src/sdk/host/session-runtime.ts +125 -37
  249. package/src/sdk/lifecycle/service.ts +3 -1
  250. package/src/sdk/lifecycle-session.ts +42 -1
  251. package/src/sdk/protocol/operation-inventory.generated.json +66 -0
  252. package/src/sdk/router/session-router.ts +375 -36
  253. package/src/sdk/session.ts +547 -47
  254. package/src/session/account-inventory.ts +1 -1
  255. package/src/session/agent-session.ts +765 -189
  256. package/src/session/artifacts.ts +234 -4
  257. package/src/session/internal/managed-session-storage.ts +91 -4
  258. package/src/session/provider-safety-stop-hint.ts +3 -2
  259. package/src/session/session-manager.ts +775 -16
  260. package/src/session/session-staging-paths.ts +8 -0
  261. package/src/setup/hermes/templates/operator-instructions.v1.md +0 -1
  262. package/src/setup/host-plugin-setup.ts +2 -2
  263. package/src/skill-state/active-state.ts +2 -2
  264. package/src/skill-state/canonical-skills.ts +1 -1
  265. package/src/skill-state/initial-phase.ts +1 -1
  266. package/src/skill-state/workflow-hud.ts +41 -41
  267. package/src/skill-state/workflow-mutation-guard.ts +26 -7
  268. package/src/slash-commands/builtin-registry.ts +77 -0
  269. package/src/slash-commands/helpers/autorouting-status.ts +55 -0
  270. package/src/system-prompt.ts +102 -5
  271. package/src/task/discovery.ts +2 -3
  272. package/src/task/executor.ts +617 -43
  273. package/src/task/index.ts +262 -15
  274. package/src/task/receipt.ts +30 -0
  275. package/src/task/render.ts +11 -1
  276. package/src/task/types.ts +316 -0
  277. package/src/tools/atomic-file-write.ts +594 -0
  278. package/src/tools/bisect.ts +3 -2
  279. package/src/tools/descriptors.test.ts +3 -0
  280. package/src/tools/descriptors.ts +24 -0
  281. package/src/tools/image-gen.ts +5 -1
  282. package/src/tools/index.ts +62 -5
  283. package/src/tools/move-session.ts +107 -0
  284. package/src/tools/python.ts +205 -0
  285. package/src/tools/read.ts +88 -15
  286. package/src/tools/renderers.ts +2 -0
  287. package/src/tools/resource-gc.ts +8 -177
  288. package/src/tools/search.ts +30 -6
  289. package/src/tools/skill-discovery.ts +1 -0
  290. package/src/tools/skill.ts +37 -7
  291. package/src/tools/subagent-render.ts +119 -13
  292. package/src/tools/subagent.ts +91 -74
  293. package/src/tools/tool-catalog.generated.ts +64 -2
  294. package/src/tools/write.ts +16 -12
  295. package/src/utils/xml-escape.ts +14 -0
  296. package/src/web/search/providers/codex.ts +2 -2
  297. package/src/workflow/workflow-intent-diff.ts +13 -12
  298. package/src/workflow/workflow-intent-report-consumer.ts +6 -6
  299. package/dist/types/autoresearch/helpers.d.ts +0 -24
  300. package/dist/types/autoresearch/index.d.ts +0 -2
  301. package/dist/types/autoresearch/state.d.ts +0 -17
  302. package/dist/types/autoresearch/storage.d.ts +0 -142
  303. package/dist/types/autoresearch/tools/init-experiment.d.ts +0 -31
  304. package/dist/types/autoresearch/tools/log-experiment.d.ts +0 -23
  305. package/dist/types/autoresearch/tools/run-experiment.d.ts +0 -8
  306. package/dist/types/autoresearch/tools/update-notes.d.ts +0 -12
  307. package/dist/types/commands/team.d.ts +0 -24
  308. package/dist/types/gjc-runtime/team-gc.d.ts +0 -7
  309. package/dist/types/gjc-runtime/team-launch.d.ts +0 -61
  310. package/dist/types/gjc-runtime/team-notify.d.ts +0 -45
  311. package/dist/types/gjc-runtime/team-runtime.d.ts +0 -336
  312. package/dist/types/gjc-runtime/team-store.d.ts +0 -168
  313. package/dist/types/gjc-runtime/team-worker-heartbeat.d.ts +0 -43
  314. package/dist/types/gjc-runtime/team-worker-memory-guard.d.ts +0 -92
  315. package/dist/types/gjc-runtime/team-workers.d.ts +0 -83
  316. package/dist/types/rlm/index.d.ts +0 -47
  317. package/dist/types/rlm/preset.d.ts +0 -23
  318. package/dist/types/rlm/python-tool.d.ts +0 -16
  319. package/src/autoresearch/command-resume.md +0 -14
  320. package/src/autoresearch/index.ts +0 -536
  321. package/src/autoresearch/prompt.md +0 -103
  322. package/src/autoresearch/resume-message.md +0 -10
  323. package/src/autoresearch/state.ts +0 -273
  324. package/src/autoresearch/storage.ts +0 -699
  325. package/src/autoresearch/tools/init-experiment.ts +0 -272
  326. package/src/autoresearch/tools/log-experiment.ts +0 -524
  327. package/src/autoresearch/tools/run-experiment.ts +0 -475
  328. package/src/autoresearch/tools/update-notes.ts +0 -109
  329. package/src/commands/rlm.ts +0 -19
  330. package/src/commands/team.ts +0 -238
  331. package/src/defaults/gjc/skills/deep-interview/auto-research-greenfield.md +0 -42
  332. package/src/defaults/gjc/skills/team/SKILL.md +0 -467
  333. package/src/gjc-runtime/team-gc.ts +0 -49
  334. package/src/gjc-runtime/team-launch.ts +0 -404
  335. package/src/gjc-runtime/team-notify.ts +0 -326
  336. package/src/gjc-runtime/team-runtime.ts +0 -5923
  337. package/src/gjc-runtime/team-store.ts +0 -878
  338. package/src/gjc-runtime/team-worker-heartbeat.ts +0 -149
  339. package/src/gjc-runtime/team-worker-memory-guard.ts +0 -363
  340. package/src/gjc-runtime/team-workers.ts +0 -1123
  341. package/src/prompts/system/rlm-report-command.md +0 -1
  342. package/src/prompts/system/rlm-research.md +0 -23
  343. package/src/rlm/index.ts +0 -365
  344. package/src/rlm/preset.ts +0 -76
  345. package/src/rlm/python-tool.ts +0 -68
@@ -0,0 +1,247 @@
1
+ /**
2
+ * Deterministic Ultragoal validation applicability policy (#4560).
3
+ *
4
+ * The boundary cohort (`cleaner || architect || QA`) and the terminal critic
5
+ * are expensive LLM lanes. They were introduced as unconditional per-boundary
6
+ * ceremony, which inflates token cost and failure surface on low-risk work and
7
+ * makes compaction more likely during long runs (#3473/#3474 moved review from
8
+ * per-subgoal to per-boundary; this policy makes the boundary lanes
9
+ * risk-proportional without removing them for risky work).
10
+ *
11
+ * Selection is runtime-authoritative and deterministic from durable facts
12
+ * (change set, plan shape, ledger receipts) — never free-form model prose.
13
+ * It fails closed: any condition that cannot be proven cheap is treated as
14
+ * high-risk and keeps the full heavyweight cohort. The precedent is
15
+ * `requiresComputerRedTeamSuite`, whose applicability the runtime derives from
16
+ * the computed change set and refuses to let the model self-exempt.
17
+ */
18
+ import {
19
+ categorizeComputerChangePath,
20
+ normalizeRepoPath,
21
+ type UltragoalChangeSet,
22
+ type UltragoalChangeSetPath,
23
+ } from "./ultragoal-change-set";
24
+
25
+ export type UltragoalValidationLane = "cleaner" | "architect" | "qa" | "terminal-critic";
26
+
27
+ export interface UltragoalValidationApplicabilityInput {
28
+ /** Trusted computed change set for the boundary (checkpoint path). */
29
+ changeSet?: UltragoalChangeSet;
30
+ /**
31
+ * Durable aggregate shape: the number of goals the plan actually requires.
32
+ * This is a property of the plan, not of how far it has progressed, so the
33
+ * multi-goal risk signal cannot evaporate at the final goal of a multi-goal
34
+ * run — which is precisely the aggregate boundary where risk is highest.
35
+ */
36
+ requiredGoals?: number;
37
+ /** Open review blockers exist (review_blocked goals). */
38
+ hasOpenReviewBlockers?: boolean;
39
+ /** Newest joined cohort sourceHash recorded in the ledger. */
40
+ latestCohortSourceHash?: string;
41
+ /** Current frozen source hash the boundary would review. */
42
+ currentSourceHash?: string;
43
+ /** Runtime-computed digest of the authoritative current source basis. */
44
+ authoritativeSourceHash?: string;
45
+ }
46
+
47
+ export interface UltragoalValidationApplicability {
48
+ /** Lane -> applicability decision with the durable facts that forced it. */
49
+ lanes: Record<UltragoalValidationLane, { applicable: boolean; reasons: string[] }>;
50
+ /** True only when every heavyweight lane is applicable (full cohort). */
51
+ heavyweight: boolean;
52
+ /** Risk classification driving the selection. */
53
+ riskClass: "low" | "high";
54
+ /** True when open review blockers make terminal evidence uncertain. */
55
+ hasOpenReviewBlockers: boolean;
56
+ /** True when an unchanged immutable source basis permits evidence reuse. */
57
+ basisUnchanged: boolean;
58
+ /** Human- and machine-inspectable selection basis, recorded in diagnostics. */
59
+ selection: string[];
60
+ }
61
+
62
+ export interface UltragoalValidationLaneSelection {
63
+ riskClass: "low" | "high";
64
+ reasons: string[];
65
+ omittedLanes: UltragoalValidationLane[];
66
+ }
67
+
68
+ /**
69
+ * Substring markers for security-sensitive surfaces. A hand-maintained prefix
70
+ * list cannot be fail-closed: any new credential/auth file added anywhere in
71
+ * the workspace would silently grade as low-risk until someone remembered to
72
+ * extend the list. These markers classify by what a path *is* rather than
73
+ * where it happens to live.
74
+ */
75
+ const SECURITY_SENSITIVE_PATH_MARKERS = [
76
+ "auth-storage",
77
+ "auth-broker",
78
+ "auth-config",
79
+ "oauth",
80
+ "credential",
81
+ "secure-token",
82
+ "api-key",
83
+ "apikey",
84
+ "secret",
85
+ "token-store",
86
+ "keychain",
87
+ "permission",
88
+ ] as const;
89
+
90
+ const GENERIC_SECURITY_PATH_PATTERN =
91
+ /(^|\/)(auth|authentication|authorization|security|permission|permissions)(?:[._-]|\/|$)/i;
92
+
93
+ const HIGH_RISK_PATH_PREFIXES = [
94
+ // Security/auth surfaces
95
+ "packages/coding-agent/src/session/auth-storage.ts",
96
+ "packages/coding-agent/src/session/secure-token-file.ts",
97
+ "packages/coding-agent/src/session/startup-auth-config.ts",
98
+ "packages/coding-agent/src/runtime-api-key.ts",
99
+ "packages/coding-agent/src/runtime-credential-selector.ts",
100
+ "packages/coding-agent/src/secrets",
101
+ "packages/ai/src/auth-storage.ts",
102
+ "packages/natives",
103
+ "packages/coding-agent/src/runtime-mcp/oauth-flow.ts",
104
+ "packages/coding-agent/src/commands/auth-broker.ts",
105
+ "crates/pi-natives/src",
106
+ "crates/git-daemon",
107
+ // Workflow enforcement surfaces must never grade their own weakening as low-risk.
108
+ "packages/coding-agent/src/gjc-runtime",
109
+ "packages/coding-agent/src/session/agent-session.ts",
110
+ // Public contract / SDK surfaces
111
+ "packages/coding-agent/src/sdk",
112
+ "packages/coding-agent/src/extensibility",
113
+ "packages/coding-agent/src/modes/shared/agent-wire",
114
+ // Shared behavior registries (mirrors the computer-suite conservative rule)
115
+ "packages/coding-agent/src/tools/index.ts",
116
+ "packages/coding-agent/src/tools/renderers.ts",
117
+ "packages/coding-agent/src/config/settings-schema.ts",
118
+ ] as const;
119
+
120
+ const MIGRATION_PATH_PREFIXES = [
121
+ "packages/coding-agent/src/gjc-runtime/state-migrations.ts",
122
+ "packages/coding-agent/src/session/session-manager.ts",
123
+ "packages/coding-agent/src/session/session-manager-internal.ts",
124
+ "scripts",
125
+ ] as const;
126
+
127
+ function changePaths(changeSet: UltragoalChangeSet | undefined): UltragoalChangeSetPath[] {
128
+ return changeSet?.trusted ? changeSet.paths : [];
129
+ }
130
+
131
+ export function isHighRiskChangePath(row: UltragoalChangeSetPath): boolean {
132
+ const candidates = [row.path, row.oldPath]
133
+ .filter((value): value is string => typeof value === "string")
134
+ .map(normalizeRepoPath);
135
+ for (const candidate of candidates) {
136
+ if (GENERIC_SECURITY_PATH_PATTERN.test(candidate)) return true;
137
+ if (/^packages\/natives(?:-|\/|$)/.test(candidate)) return true;
138
+ for (const prefix of HIGH_RISK_PATH_PREFIXES) {
139
+ if (candidate === prefix || candidate.startsWith(`${prefix}/`)) return true;
140
+ }
141
+ const fileName = candidate.slice(candidate.lastIndexOf("/") + 1).toLowerCase();
142
+ if (row.category === "generated-binding") return true;
143
+ if (/(auth|oauth|security|credential|token|secret|permission)/i.test(fileName)) return true;
144
+ for (const marker of SECURITY_SENSITIVE_PATH_MARKERS) {
145
+ if (fileName.includes(marker)) return true;
146
+ }
147
+ }
148
+ return false;
149
+ }
150
+
151
+ export function validationLaneSelectionFor(
152
+ applicability: UltragoalValidationApplicability,
153
+ ): UltragoalValidationLaneSelection {
154
+ return {
155
+ riskClass: applicability.riskClass,
156
+ reasons: [...applicability.selection],
157
+ omittedLanes: (Object.keys(applicability.lanes) as UltragoalValidationLane[])
158
+ .filter(lane => !applicability.lanes[lane].applicable)
159
+ .sort(),
160
+ };
161
+ }
162
+
163
+ export function isMigrationChangePath(row: UltragoalChangeSetPath): boolean {
164
+ const candidates = [row.path, row.oldPath]
165
+ .filter((value): value is string => typeof value === "string")
166
+ .map(normalizeRepoPath);
167
+ for (const candidate of candidates) {
168
+ for (const prefix of MIGRATION_PATH_PREFIXES) {
169
+ if (candidate === prefix || candidate.startsWith(`${prefix}/`)) return true;
170
+ }
171
+ }
172
+ return false;
173
+ }
174
+
175
+ function isComputerControlSurfaceChangePath(row: UltragoalChangeSetPath): boolean {
176
+ const candidates = [row.path, row.oldPath].filter((value): value is string => typeof value === "string");
177
+ return candidates.some(candidate => {
178
+ const category = categorizeComputerChangePath(candidate);
179
+ return category === "code" || category === "tool" || category === "settings-registry";
180
+ });
181
+ }
182
+
183
+ /**
184
+ * Compute the deterministic validation applicability for a boundary.
185
+ *
186
+ * Low-risk eligibility (the only case where redundant lanes may be omitted):
187
+ * trusted change set, single outstanding goal, no open review blockers, no
188
+ * high-risk/migration/computer/public-contract path, complete capture.
189
+ * Everything else — including a missing/untrusted change set — keeps the full
190
+ * heavyweight cohort exactly as today.
191
+ */
192
+ export function resolveUltragoalValidationApplicability(
193
+ input: UltragoalValidationApplicabilityInput,
194
+ ): UltragoalValidationApplicability {
195
+ const selection: string[] = [];
196
+ const paths = changePaths(input.changeSet);
197
+ const highRiskPaths = paths.filter(isHighRiskChangePath);
198
+ const migrationPaths = paths.filter(isMigrationChangePath);
199
+ const computerPaths = paths.filter(isComputerControlSurfaceChangePath);
200
+ // Derived from the durable aggregate shape, never from remaining progress:
201
+ // a two-goal plan stays multi-goal on its final goal.
202
+ const multiGoal = (input.requiredGoals ?? 0) > 1;
203
+ const reasons: string[] = [];
204
+ if (!input.changeSet?.trusted) reasons.push("change-set-untrusted-or-missing");
205
+ if (input.changeSet?.captureIncomplete) reasons.push("capture-incomplete");
206
+ if (!input.authoritativeSourceHash) reasons.push("source-basis-unverified");
207
+ if (multiGoal) reasons.push("multiple-outstanding-goals");
208
+ if (input.hasOpenReviewBlockers) reasons.push("open-review-blockers");
209
+ if (highRiskPaths.length > 0) reasons.push("high-risk-paths");
210
+ if (migrationPaths.length > 0) reasons.push("migration-paths");
211
+ if (computerPaths.length > 0) reasons.push("computer-control-surface");
212
+ // Low-risk omission requires proof that the plan is genuinely single-goal.
213
+ if (input.requiredGoals === undefined) reasons.push("progress-unknown");
214
+ const highRisk = reasons.length > 0;
215
+ const heavyweight = highRisk;
216
+ const lane = (applicable: boolean, why: string[]): { applicable: boolean; reasons: string[] } => ({
217
+ applicable,
218
+ reasons: why,
219
+ });
220
+ // Unchanged-basis reuse: only when a prior joined cohort verified the exact
221
+ // frozen source hash this boundary would review, and no blockers reopened.
222
+ const basisUnchanged =
223
+ Boolean(input.latestCohortSourceHash) &&
224
+ Boolean(input.authoritativeSourceHash) &&
225
+ input.currentSourceHash === input.latestCohortSourceHash &&
226
+ input.currentSourceHash === input.authoritativeSourceHash &&
227
+ !input.hasOpenReviewBlockers;
228
+ const lanes: UltragoalValidationApplicability["lanes"] = {
229
+ cleaner: lane(heavyweight, heavyweight ? reasons : ["low-risk-single-goal"]),
230
+ architect: lane(heavyweight, heavyweight ? reasons : ["low-risk-single-goal"]),
231
+ // QA/targeted verification always applies at a boundary; risk selection
232
+ // never removes verification, only redundant review ceremony.
233
+ qa: lane(true, ["mandatory-verification"]),
234
+ "terminal-critic": lane(heavyweight, heavyweight ? reasons : ["low-risk-single-goal"]),
235
+ };
236
+ selection.push(`riskClass=${highRisk ? "high" : "low"}`);
237
+ selection.push(`basisUnchanged=${basisUnchanged}`);
238
+ if (reasons.length > 0) selection.push(`heavyweightReasons=${reasons.join(",")}`);
239
+ return {
240
+ lanes,
241
+ heavyweight,
242
+ riskClass: highRisk ? "high" : "low",
243
+ hasOpenReviewBlockers: Boolean(input.hasOpenReviewBlockers),
244
+ basisUnchanged,
245
+ selection,
246
+ };
247
+ }
@@ -118,7 +118,7 @@ export const WORKFLOW_COMMAND_REF_BLOCKS: readonly CommandRefBlock[] = [
118
118
  },
119
119
  ],
120
120
  notes: [
121
- "Before invoking `/skill:ralplan`, `/skill:team`, or `/skill:ultragoal`, persist the final spec and mark deep-interview ready for handoff.",
121
+ "Before invoking `/skill:ralplan`, `/skill:autoresearch`, or `/skill:ultragoal`, persist the final spec and mark deep-interview ready for handoff.",
122
122
  ],
123
123
  },
124
124
  {
@@ -127,7 +127,7 @@ export const WORKFLOW_COMMAND_REF_BLOCKS: readonly CommandRefBlock[] = [
127
127
  sourcePath: skillPath("ralplan"),
128
128
  renderOrder: 10,
129
129
  markers: { start: "<!-- gjc:cmdref:start state -->", end: "<!-- gjc:cmdref:end state -->" },
130
- commands: [stateWrite("ralplan"), stateHandoff("ralplan", ["team", "ultragoal"])],
130
+ commands: [stateWrite("ralplan"), stateHandoff("ralplan", ["autoresearch", "ultragoal"])],
131
131
  examples: [
132
132
  {
133
133
  label: "handoff state write",
@@ -135,10 +135,14 @@ export const WORKFLOW_COMMAND_REF_BLOCKS: readonly CommandRefBlock[] = [
135
135
  },
136
136
  ],
137
137
  aliasesAndBridges: [
138
- { from: "ralplan", to: "team|ultragoal", rendered: "gjc state ralplan handoff --to <team|ultragoal> --json" },
138
+ {
139
+ from: "ralplan",
140
+ to: "autoresearch|ultragoal",
141
+ rendered: "gjc state ralplan handoff --to <autoresearch|ultragoal> --json",
142
+ },
139
143
  ],
140
144
  notes: [
141
- "Before invoking `/skill:team` or `/skill:ultragoal`, mark ralplan ready for handoff so the skill tool's chain guard permits the transition.",
145
+ "Before invoking `/skill:autoresearch` or `/skill:ultragoal`, mark ralplan ready for handoff so the skill tool's chain guard permits the transition.",
142
146
  ],
143
147
  },
144
148
  {
@@ -166,27 +170,27 @@ export const WORKFLOW_COMMAND_REF_BLOCKS: readonly CommandRefBlock[] = [
166
170
  ],
167
171
  },
168
172
  {
169
- skill: "team",
173
+ skill: "autoresearch",
170
174
  blockId: "state",
171
- sourcePath: skillPath("team"),
175
+ sourcePath: skillPath("autoresearch"),
172
176
  renderOrder: 10,
173
177
  markers: { start: "<!-- gjc:cmdref:start state -->", end: "<!-- gjc:cmdref:end state -->" },
174
- commands: [stateWrite("team"), stateHandoff("team", ["ralplan", "deep-interview", "ultragoal"])],
178
+ commands: [stateWrite("autoresearch"), stateHandoff("autoresearch", ["ralplan", "deep-interview", "ultragoal"])],
175
179
  examples: [
176
180
  {
177
181
  label: "handoff state write",
178
- bytes: '```\ngjc state team write --input \'{"current_phase":"handoff"}\' --json\n```',
182
+ bytes: '```\ngjc state autoresearch write --input \'{"current_phase":"handoff"}\' --json\n```',
179
183
  },
180
184
  ],
181
185
  aliasesAndBridges: [
182
186
  {
183
- from: "team",
187
+ from: "autoresearch",
184
188
  to: "ralplan|deep-interview|ultragoal",
185
- rendered: "gjc state team handoff --to <ralplan|deep-interview|ultragoal> --json",
189
+ rendered: "gjc state autoresearch handoff --to <ralplan|deep-interview|ultragoal> --json",
186
190
  },
187
191
  ],
188
192
  notes: [
189
- "When the team task-set completes OR the user requests return to planning/persistence, mark team ready for handoff.",
193
+ "When the research mission concludes (verdict issued) OR the user requests return to planning/persistence, mark autoresearch ready for handoff.",
190
194
  ],
191
195
  },
192
196
  ] as const;