@gajae-code/coding-agent 0.18.7 → 0.18.9

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 +377 -1
  2. package/dist/types/async/endpoint-id.d.ts +16 -0
  3. package/dist/types/async/job-manager.d.ts +1 -1
  4. package/dist/types/async/support.d.ts +0 -14
  5. package/dist/types/capability/mcp.d.ts +2 -0
  6. package/dist/types/capability/skill.d.ts +2 -0
  7. package/dist/types/capability/types.d.ts +2 -0
  8. package/dist/types/cli/public-command-errors.d.ts +3 -1
  9. package/dist/types/cli/setup-cli.d.ts +1 -1
  10. package/dist/types/commands/deep-interview.d.ts +3 -0
  11. package/dist/types/commands/mcp-serve.d.ts +4 -0
  12. package/dist/types/config/autorouting-tier-map.d.ts +348 -9
  13. package/dist/types/config/file-lock.d.ts +1 -0
  14. package/dist/types/config/model-bindings-applier.d.ts +2 -0
  15. package/dist/types/config/model-profile-activation.d.ts +11 -3
  16. package/dist/types/config/model-registry.d.ts +4 -9
  17. package/dist/types/config/skill-settings-defaults.d.ts +2 -0
  18. package/dist/types/cursor-delete-path.d.ts +1 -0
  19. package/dist/types/cursor-mcp-name.d.ts +8 -0
  20. package/dist/types/customization/inventory.d.ts +2 -0
  21. package/dist/types/debug/report-bundle-parent.d.ts +2 -0
  22. package/dist/types/defaults/gjc/extensions/grok-cli-vendor/src/provider/stream.d.ts +1 -0
  23. package/dist/types/defaults/gjc/extensions/grok-cli-vendor/src/provider/version-manager.d.ts +31 -0
  24. package/dist/types/defaults/gjc-skills.generated.d.ts +5 -6
  25. package/dist/types/discovery/helpers.d.ts +6 -1
  26. package/dist/types/discovery/mcp-json.d.ts +1 -0
  27. package/dist/types/eval/py/kernel.d.ts +18 -0
  28. package/dist/types/export/html/css-color.d.ts +2 -0
  29. package/dist/types/export/html/html-export-destination.d.ts +2 -0
  30. package/dist/types/export/html/template.generated.d.ts +1 -1
  31. package/dist/types/extensibility/extensions/function-hooks-internal.d.ts +5 -0
  32. package/dist/types/extensibility/extensions/types.d.ts +7 -0
  33. package/dist/types/extensibility/gjc-plugins/runtime-adapters.d.ts +14 -1
  34. package/dist/types/extensibility/plugins/marketplace/cache.d.ts +2 -0
  35. package/dist/types/extensibility/plugins/plugin-link-path.d.ts +2 -0
  36. package/dist/types/extensibility/runtime-skill-discovery.d.ts +3 -1
  37. package/dist/types/extensibility/skill-management.d.ts +4 -1
  38. package/dist/types/extensibility/skills.d.ts +2 -0
  39. package/dist/types/gjc-runtime/deep-interview-crystallize.d.ts +74 -0
  40. package/dist/types/gjc-runtime/deep-interview-runtime.d.ts +11 -0
  41. package/dist/types/gjc-runtime/gc-runtime.d.ts +5 -0
  42. package/dist/types/gjc-runtime/psmux-detect.d.ts +3 -3
  43. package/dist/types/gjc-runtime/ralplan-runtime.d.ts +0 -5
  44. package/dist/types/gjc-runtime/sidecar-bootstrap-env.d.ts +6 -0
  45. package/dist/types/gjc-runtime/state-argv.d.ts +1 -1
  46. package/dist/types/gjc-runtime/state-migrations.d.ts +8 -0
  47. package/dist/types/gjc-runtime/state-runtime.d.ts +95 -0
  48. package/dist/types/gjc-runtime/state-writer.d.ts +14 -1
  49. package/dist/types/gjc-runtime/tmux-common.d.ts +8 -5
  50. package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +8 -0
  51. package/dist/types/internal-urls/skill-path.d.ts +1 -0
  52. package/dist/types/lsp/config.d.ts +8 -5
  53. package/dist/types/lsp/workspace-path.d.ts +1 -0
  54. package/dist/types/modes/acp/acp-agent.d.ts +7 -0
  55. package/dist/types/modes/components/custom-editor.d.ts +6 -0
  56. package/dist/types/modes/components/customization/customization-dashboard.d.ts +1 -0
  57. package/dist/types/modes/components/extensions/state-manager.d.ts +4 -3
  58. package/dist/types/modes/controllers/input-controller.d.ts +9 -0
  59. package/dist/types/modes/interactive-mode.d.ts +1 -0
  60. package/dist/types/modes/utils/interrupt-ownership.d.ts +3 -0
  61. package/dist/types/modes/utils/keybinding-matchers.d.ts +1 -0
  62. package/dist/types/modes/utils/macos-option-forwarding.d.ts +17 -0
  63. package/dist/types/progress/collect-project-progress.d.ts +38 -0
  64. package/dist/types/progress/progress-contract.d.ts +154 -0
  65. package/dist/types/progress/progress-snapshot.d.ts +11 -0
  66. package/dist/types/progress/project-progress.d.ts +141 -0
  67. package/dist/types/progress/render-progress.d.ts +28 -0
  68. package/dist/types/runtime-mcp/manager.d.ts +2 -1
  69. package/dist/types/runtime-mcp/mcp-redirect.d.ts +9 -0
  70. package/dist/types/runtime-mcp/oauth-public-url.d.ts +3 -0
  71. package/dist/types/runtime-mcp/plugin-network-boundary.d.ts +1 -0
  72. package/dist/types/runtime-mcp/project-host-values.d.ts +27 -0
  73. package/dist/types/runtime-mcp/smithery-registry.d.ts +24 -0
  74. package/dist/types/runtime-mcp/types.d.ts +6 -0
  75. package/dist/types/sdk/acp/adapter.d.ts +1 -1
  76. package/dist/types/sdk/broker/broker-exit.d.ts +6 -2
  77. package/dist/types/sdk/broker/broker.d.ts +24 -2
  78. package/dist/types/sdk/broker/doctor-restart.d.ts +5 -0
  79. package/dist/types/sdk/broker/ensure.d.ts +14 -1
  80. package/dist/types/sdk/broker/session-index.d.ts +12 -6
  81. package/dist/types/sdk/bus/index.d.ts +12 -1
  82. package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +6 -1
  83. package/dist/types/sdk/client/client.d.ts +2 -0
  84. package/dist/types/sdk/host/query/handlers.d.ts +3 -0
  85. package/dist/types/sdk/index.d.ts +1 -0
  86. package/dist/types/sdk/router/session-router.d.ts +2 -0
  87. package/dist/types/sdk/session-list.d.ts +1 -1
  88. package/dist/types/sdk/session.d.ts +8 -0
  89. package/dist/types/session/agent-session.d.ts +38 -9
  90. package/dist/types/session/artifacts.d.ts +2 -2
  91. package/dist/types/session/internal/managed-gc-retirement-codec.d.ts +32 -0
  92. package/dist/types/session/internal/managed-session-scope.d.ts +79 -2
  93. package/dist/types/session/internal/managed-session-storage.d.ts +26 -1
  94. package/dist/types/session/internal/managed-task-owner-cleanup.d.ts +62 -0
  95. package/dist/types/session/internal/task-artifact-owner-access.d.ts +2 -0
  96. package/dist/types/session/internal/task-artifact-owner-transcript.d.ts +9 -1
  97. package/dist/types/session/session-manager.d.ts +31 -5
  98. package/dist/types/session/session-retirement.d.ts +31 -7
  99. package/dist/types/session/session-storage.d.ts +69 -2
  100. package/dist/types/session/task-artifact-owner-codec.d.ts +2 -0
  101. package/dist/types/setup/credential-auto-import.d.ts +1 -1
  102. package/dist/types/setup/credential-import.d.ts +6 -4
  103. package/dist/types/skill-state/active-state.d.ts +38 -0
  104. package/dist/types/skill-state/workflow-mutation-guard.d.ts +3 -0
  105. package/dist/types/slash-commands/helpers/progress-report.d.ts +8 -0
  106. package/dist/types/task/executor.d.ts +3 -0
  107. package/dist/types/task/isolation-dir.d.ts +26 -0
  108. package/dist/types/tools/ast-edit-write-path.d.ts +13 -0
  109. package/dist/types/tools/bash-skill-urls.d.ts +1 -1
  110. package/dist/types/tools/browser/cdp-url.d.ts +2 -0
  111. package/dist/types/tools/github-side-effect.d.ts +22 -0
  112. package/dist/types/tools/index.d.ts +3 -0
  113. package/dist/types/tools/monitor-mutation.d.ts +9 -0
  114. package/dist/types/tools/python.d.ts +9 -1
  115. package/dist/types/tools/recipe/recipe-guard.d.ts +7 -0
  116. package/dist/types/tools/restricted-cwd.d.ts +1 -0
  117. package/dist/types/tools/todo-write.d.ts +6 -0
  118. package/dist/types/utils/tools-checksum.d.ts +7 -0
  119. package/package.json +7 -7
  120. package/scripts/generate-sdk-operation-inventory.ts +21 -0
  121. package/scripts/verify-managed-empty-stop.ts +28 -0
  122. package/src/async/endpoint-id.ts +26 -0
  123. package/src/async/job-manager.ts +247 -132
  124. package/src/async/support.ts +0 -25
  125. package/src/capability/index.ts +15 -0
  126. package/src/capability/mcp.ts +2 -0
  127. package/src/capability/skill.ts +2 -0
  128. package/src/capability/types.ts +2 -0
  129. package/src/cli/auth-broker-cli.ts +1 -1
  130. package/src/cli/customize-doctor.ts +15 -2
  131. package/src/cli/doctor/repairs.ts +4 -1
  132. package/src/cli/doctor-supervisor.ts +3 -0
  133. package/src/cli/public-command-errors.ts +21 -1
  134. package/src/cli/public-command-registry.ts +28 -6
  135. package/src/cli/setup-cli.ts +4 -4
  136. package/src/cli/skills-cli.ts +5 -0
  137. package/src/commands/deep-interview.ts +47 -8
  138. package/src/commands/mcp-serve.ts +7 -0
  139. package/src/commands/sdk.ts +455 -397
  140. package/src/config/autorouting-tier-map.ts +117 -7
  141. package/src/config/file-lock.ts +316 -79
  142. package/src/config/mcp-schema.json +4 -0
  143. package/src/config/model-bindings-applier.ts +20 -0
  144. package/src/config/model-profile-activation.ts +240 -46
  145. package/src/config/model-registry.ts +47 -153
  146. package/src/config/skill-settings-defaults.ts +7 -0
  147. package/src/coordinator-mcp/policy.ts +3 -2
  148. package/src/coordinator-mcp/server.ts +2 -0
  149. package/src/cursor-delete-path.ts +10 -0
  150. package/src/cursor-mcp-name.ts +15 -0
  151. package/src/cursor.ts +13 -2
  152. package/src/customization/inventory.ts +4 -13
  153. package/src/dap/config.ts +2 -2
  154. package/src/debug/report-bundle-parent.ts +22 -0
  155. package/src/debug/report-bundle.ts +3 -0
  156. package/src/debug/system-info.ts +13 -1
  157. package/src/defaults/gjc/extensions/grok-cli-vendor/src/provider/register.ts +10 -6
  158. package/src/defaults/gjc/extensions/grok-cli-vendor/src/provider/stream.ts +67 -4
  159. package/src/defaults/gjc/extensions/grok-cli-vendor/src/provider/version-manager.ts +80 -0
  160. package/src/defaults/gjc/skills/deep-interview/SKILL.md +105 -10
  161. package/src/defaults/gjc/skills/ralplan/SKILL.md +6 -4
  162. package/src/defaults/gjc-defaults.test.ts +18 -1
  163. package/src/defaults/gjc-defaults.ts +3 -0
  164. package/src/defaults/gjc-skills.generated.ts +58 -36
  165. package/src/discovery/agents.ts +6 -1
  166. package/src/discovery/builtin.ts +13 -1
  167. package/src/discovery/helpers.ts +171 -29
  168. package/src/discovery/mcp-json.ts +26 -12
  169. package/src/discovery/ssh.ts +1 -1
  170. package/src/discovery/substitute-plugin-root.ts +3 -1
  171. package/src/edit/file-read-cache.ts +1 -1
  172. package/src/eval/py/executor.ts +796 -154
  173. package/src/eval/py/kernel.ts +79 -13
  174. package/src/eval/py/tool-bridge.ts +4 -0
  175. package/src/export/html/css-color.ts +9 -0
  176. package/src/export/html/html-export-destination.ts +16 -0
  177. package/src/export/html/index.ts +7 -10
  178. package/src/export/html/template.generated.ts +1 -1
  179. package/src/extensibility/extensions/function-hooks-internal.ts +27 -0
  180. package/src/extensibility/extensions/runner.ts +15 -1
  181. package/src/extensibility/extensions/types.ts +7 -0
  182. package/src/extensibility/gjc-plugins/mcp-policy.ts +2 -1
  183. package/src/extensibility/gjc-plugins/runtime-adapters.ts +85 -8
  184. package/src/extensibility/plugins/manager.ts +3 -2
  185. package/src/extensibility/plugins/marketplace/cache.ts +15 -0
  186. package/src/extensibility/plugins/marketplace/manager.ts +11 -3
  187. package/src/extensibility/plugins/plugin-link-path.ts +12 -0
  188. package/src/extensibility/runtime-skill-discovery.ts +20 -2
  189. package/src/extensibility/skill-management.ts +9 -2
  190. package/src/extensibility/skills.ts +6 -1
  191. package/src/gjc-runtime/deep-interview-crystallize.ts +1814 -0
  192. package/src/gjc-runtime/deep-interview-recorder.ts +20 -2
  193. package/src/gjc-runtime/deep-interview-runtime.ts +1415 -13
  194. package/src/gjc-runtime/deep-interview-stage.ts +98 -21
  195. package/src/gjc-runtime/gc-runtime.ts +206 -9
  196. package/src/gjc-runtime/launch-worktree.ts +70 -9
  197. package/src/gjc-runtime/psmux-detect.ts +28 -4
  198. package/src/gjc-runtime/ralplan-runtime.ts +447 -52
  199. package/src/gjc-runtime/session-state-sidecar.ts +3 -2
  200. package/src/gjc-runtime/sidecar-bootstrap-env.ts +19 -0
  201. package/src/gjc-runtime/state-argv.ts +2 -0
  202. package/src/gjc-runtime/state-migrations.ts +91 -29
  203. package/src/gjc-runtime/state-runtime.ts +3716 -135
  204. package/src/gjc-runtime/state-writer.ts +105 -16
  205. package/src/gjc-runtime/tmux-common.ts +8 -5
  206. package/src/gjc-runtime/ultragoal-runtime.ts +16 -4
  207. package/src/gjc-runtime/workflow-manifest.generated.json +70 -42
  208. package/src/gjc-runtime/workflow-manifest.ts +54 -21
  209. package/src/harness-control-plane/operate.ts +12 -4
  210. package/src/harness-control-plane/owner.ts +5 -1
  211. package/src/hashline/parser.ts +48 -9
  212. package/src/hashline/recovery.ts +13 -4
  213. package/src/internal-urls/docs-index.generated.ts +20 -19
  214. package/src/internal-urls/skill-path.ts +19 -0
  215. package/src/internal-urls/skill-protocol.ts +2 -0
  216. package/src/lsp/config.ts +12 -63
  217. package/src/lsp/edits.ts +6 -0
  218. package/src/lsp/workspace-path.ts +51 -0
  219. package/src/main.ts +195 -31
  220. package/src/memories/index.ts +88 -7
  221. package/src/modes/acp/acp-agent.ts +88 -4
  222. package/src/modes/components/custom-editor.ts +14 -0
  223. package/src/modes/components/customization/customization-dashboard.ts +12 -0
  224. package/src/modes/components/extensions/extension-dashboard.ts +2 -2
  225. package/src/modes/components/extensions/state-manager.ts +15 -5
  226. package/src/modes/components/hook-editor.ts +1 -1
  227. package/src/modes/components/hook-selector.ts +1 -1
  228. package/src/modes/components/model-selector.ts +1 -4
  229. package/src/modes/components/provider-onboarding-selector.ts +1 -1
  230. package/src/modes/components/status-line/segments.ts +4 -0
  231. package/src/modes/controllers/event-controller.ts +11 -4
  232. package/src/modes/controllers/input-controller.ts +76 -31
  233. package/src/modes/controllers/runtime-mcp-command-controller.ts +29 -16
  234. package/src/modes/controllers/selector-controller.ts +24 -15
  235. package/src/modes/controllers/todo-command-controller.ts +1 -1
  236. package/src/modes/interactive-mode.ts +5 -1
  237. package/src/modes/runtime-init.ts +4 -0
  238. package/src/modes/utils/abort-message.ts +3 -1
  239. package/src/modes/utils/interrupt-ownership.ts +12 -0
  240. package/src/modes/utils/keybinding-matchers.ts +4 -0
  241. package/src/modes/utils/macos-option-forwarding.ts +80 -0
  242. package/src/progress/collect-project-progress.ts +153 -0
  243. package/src/progress/progress-contract.ts +172 -0
  244. package/src/progress/progress-snapshot.ts +140 -0
  245. package/src/progress/project-progress.ts +446 -0
  246. package/src/progress/render-progress.ts +209 -0
  247. package/src/prompts/system/master-mode.md +1 -0
  248. package/src/prompts/tools/skill-discovery.md +1 -1
  249. package/src/runtime-mcp/client.ts +4 -2
  250. package/src/runtime-mcp/config-writer.ts +10 -6
  251. package/src/runtime-mcp/config.ts +1 -0
  252. package/src/runtime-mcp/json-rpc.ts +2 -1
  253. package/src/runtime-mcp/manager.ts +29 -11
  254. package/src/runtime-mcp/mcp-redirect.ts +73 -0
  255. package/src/runtime-mcp/oauth-flow.ts +14 -2
  256. package/src/runtime-mcp/oauth-public-url.ts +14 -0
  257. package/src/runtime-mcp/plugin-network-boundary.ts +4 -0
  258. package/src/runtime-mcp/pool.ts +6 -0
  259. package/src/runtime-mcp/project-host-values.ts +46 -0
  260. package/src/runtime-mcp/smithery-registry.ts +22 -3
  261. package/src/runtime-mcp/transports/http.ts +4 -3
  262. package/src/runtime-mcp/types.ts +6 -0
  263. package/src/sdk/acp/adapter.ts +95 -8
  264. package/src/sdk/broker/broker-exit.ts +52 -23
  265. package/src/sdk/broker/broker.ts +81 -6
  266. package/src/sdk/broker/doctor-restart.ts +4 -0
  267. package/src/sdk/broker/ensure.ts +31 -2
  268. package/src/sdk/broker/lifecycle.ts +711 -66
  269. package/src/sdk/broker/session-index.ts +191 -81
  270. package/src/sdk/bus/chat-daemon-cli.ts +38 -1
  271. package/src/sdk/bus/chat-daemon-control.ts +2 -2
  272. package/src/sdk/bus/index.ts +238 -43
  273. package/src/sdk/bus/telegram-daemon-contract.ts +6 -1
  274. package/src/sdk/cli/session-cli.ts +17 -3
  275. package/src/sdk/client/client.ts +28 -8
  276. package/src/sdk/host/query/handlers.ts +9 -1
  277. package/src/sdk/host/session-runtime.test.ts +2705 -303
  278. package/src/sdk/host/session-runtime.ts +490 -143
  279. package/src/sdk/host/surface-policy.ts +1 -0
  280. package/src/sdk/index.ts +8 -0
  281. package/src/sdk/lifecycle-session.ts +3 -1
  282. package/src/sdk/prompt-deadline-manager.ts +15 -0
  283. package/src/sdk/protocol/operation-inventory.generated.json +146 -0
  284. package/src/sdk/protocol/operation-registry.ts +9 -2
  285. package/src/sdk/router/session-router.ts +82 -18
  286. package/src/sdk/session-list.ts +1 -0
  287. package/src/sdk/session.ts +69 -45
  288. package/src/session/agent-session.ts +679 -238
  289. package/src/session/artifacts.ts +176 -71
  290. package/src/session/internal/managed-gc-retirement-codec.ts +319 -0
  291. package/src/session/internal/managed-session-scope.ts +3779 -462
  292. package/src/session/internal/managed-session-storage.ts +501 -78
  293. package/src/session/internal/managed-task-owner-cleanup.ts +473 -0
  294. package/src/session/internal/task-artifact-owner-access.ts +19 -3
  295. package/src/session/internal/task-artifact-owner-transcript.ts +547 -1
  296. package/src/session/session-manager.ts +951 -133
  297. package/src/session/session-retirement.ts +573 -14
  298. package/src/session/session-storage.ts +447 -15
  299. package/src/session/task-artifact-owner-codec.ts +71 -8
  300. package/src/session/task-artifact-owner-retirement.ts +21 -19
  301. package/src/setup/credential-auto-import.ts +12 -3
  302. package/src/setup/credential-import.ts +176 -5
  303. package/src/setup/paseo/announce.ts +6 -1
  304. package/src/skill-state/active-state.ts +145 -2
  305. package/src/skill-state/workflow-mutation-guard.ts +102 -10
  306. package/src/slash-commands/builtin-registry.ts +39 -9
  307. package/src/slash-commands/helpers/mcp.ts +8 -4
  308. package/src/slash-commands/helpers/progress-report.ts +23 -0
  309. package/src/stt/setup.ts +3 -5
  310. package/src/task/commands.ts +3 -1
  311. package/src/task/executor.ts +4 -0
  312. package/src/task/index.ts +6 -0
  313. package/src/task/isolation-dir.ts +143 -0
  314. package/src/task/worktree.ts +16 -7
  315. package/src/tools/ask.ts +205 -6
  316. package/src/tools/ast-edit-write-path.ts +68 -0
  317. package/src/tools/ast-edit.ts +10 -1
  318. package/src/tools/bash-allowed-prefixes.ts +15 -0
  319. package/src/tools/bash-skill-urls.ts +56 -3
  320. package/src/tools/bash.ts +48 -79
  321. package/src/tools/browser/cdp-url.ts +18 -0
  322. package/src/tools/browser.ts +8 -1
  323. package/src/tools/descriptors.ts +5 -1
  324. package/src/tools/eval.ts +56 -36
  325. package/src/tools/gh.ts +10 -0
  326. package/src/tools/github-side-effect.ts +112 -0
  327. package/src/tools/image-gen.ts +1 -1
  328. package/src/tools/index.ts +3 -0
  329. package/src/tools/monitor-mutation.ts +27 -0
  330. package/src/tools/monitor.ts +7 -0
  331. package/src/tools/python.ts +188 -66
  332. package/src/tools/recipe/index.ts +9 -0
  333. package/src/tools/recipe/recipe-guard.ts +19 -0
  334. package/src/tools/restricted-cwd.ts +10 -0
  335. package/src/tools/skill-discovery.ts +5 -0
  336. package/src/tools/skill.ts +28 -1
  337. package/src/tools/todo-write.ts +10 -1
  338. package/src/tools/tool-catalog.generated.ts +1 -1
  339. package/src/tools/write.ts +1 -0
  340. package/src/utils/external-editor.ts +3 -2
  341. package/src/utils/tools-checksum.ts +34 -0
  342. package/src/utils/tools-manager.ts +24 -6
  343. package/src/web/insane/url-guard.ts +2 -1
  344. package/src/web/search/providers/codex.ts +3 -2
@@ -47,13 +47,8 @@ import {
47
47
  providerSupportsAppendOnlyAuto,
48
48
  resolveAppendOnlyMode,
49
49
  } from "../append-only-mode";
50
- import {
51
- type AsyncJob,
52
- AsyncJobManager,
53
- asyncJobEndpointId as deriveAsyncJobEndpointId,
54
- isBackgroundJobSupportEnabled,
55
- jobElapsedMs,
56
- } from "../async";
50
+ import { type AsyncJob, AsyncJobManager, isBackgroundJobSupportEnabled, jobElapsedMs } from "../async";
51
+ import { asyncJobEndpointId as deriveAsyncJobEndpointId } from "../async/endpoint-id";
57
52
  import { resolveBrowserBackend } from "../browser-backend";
58
53
  import { loadCapability, reset as resetCapabilities } from "../capability";
59
54
  import { type Rule, ruleCapability, setActiveRules } from "../capability/rule";
@@ -65,6 +60,7 @@ import {
65
60
  resolveMissingSessionModelRecovery,
66
61
  } from "../config/model-profile-activation";
67
62
  import { resolveModelProfileName } from "../config/model-profile-contract";
63
+ import type { ModelProfileOwnershipMarker } from "../config/model-profile-ownership";
68
64
  import { resolveProfileBindings } from "../config/model-profiles";
69
65
  import { kNoAuth, ModelRegistry } from "../config/model-registry";
70
66
  import {
@@ -84,12 +80,15 @@ import { Settings, type SkillsSettings } from "../config/settings";
84
80
  import { resolveEagerTaskDelegation } from "../config/task-delegation";
85
81
  import { CursorExecHandlers } from "../cursor";
86
82
  import { EditTool } from "../edit";
83
+ import { disposeVmContextsByOwner } from "../eval/js/context-manager";
84
+ import { disposeKernelSessionsByOwner } from "../eval/py/executor";
87
85
  import type { MasterModeContext } from "../master-mode/context";
88
86
  import { describeFoldReceipt } from "../session/fold-coordinator";
89
87
  import type { BashRestrictionProfile } from "../tools/bash-allowed-prefixes";
90
88
  import { SearchTool } from "../tools/search";
91
89
  import "../discovery";
92
90
  import { resolveConfigValue } from "../config/resolve-config-value";
91
+ import { resolveGlobalUserSkillLinkTrust } from "../config/skill-settings-defaults";
93
92
  import { getEmbeddedDefaultGjcSkills } from "../defaults/gjc-defaults";
94
93
  import { BUNDLED_GROK_BUILD_EXTENSION_ID, getBundledGrokBuildExtensionFactory } from "../defaults/gjc-grok-cli";
95
94
  import { initializeWithSettings, releaseSettingsScope } from "../discovery";
@@ -183,7 +182,7 @@ import { AgentSession, type ForkContextSeed, isSessionDisposalIncompleteError }
183
182
  import { AuthBrokerClient, AuthStorage, RemoteAuthCredentialStore } from "../session/auth-storage";
184
183
  import { type CustomMessage, convertToLlm } from "../session/messages";
185
184
  import { primaryControlSurfaceFor } from "../session/primary-control-surface";
186
- import { createReadonlySessionManager, SessionManager } from "../session/session-manager";
185
+ import { createReadonlySessionManager, SessionManager, sessionArtifactCapability } from "../session/session-manager";
187
186
  import {
188
187
  parsePersistedCredentialSelector,
189
188
  resolveStartupAuthConfig,
@@ -490,6 +489,8 @@ export interface CreateAgentSessionOptions {
490
489
  modelPattern?: string;
491
490
  /** Active profile inherited by a nested SDK/subagent session. */
492
491
  activeModelProfile?: string;
492
+ /** Model profile ownership marker for propagating parent profile ownership to subagent sessions. */
493
+ modelProfileOwnershipMarker?: ModelProfileOwnershipMarker;
493
494
  /** Thinking selector. Default: from settings, else unset */
494
495
  thinkingLevel?: ThinkingLevel;
495
496
  /** Runtime substitution metadata for the initial model_change session event. */
@@ -589,6 +590,12 @@ export interface CreateAgentSessionOptions {
589
590
  */
590
591
  deferOptionalModelRefresh?: boolean;
591
592
 
593
+ /**
594
+ * Defer model profile activation until explicit model pin validation occurs.
595
+ * @internal Lifecycle-only: prevents default profile activation before pin resolution.
596
+ */
597
+ deferModelProfileActivation?: boolean;
598
+
592
599
  /** Enable LSP integration (tool, formatting, diagnostics, warmup). Default: true */
593
600
  enableLsp?: boolean;
594
601
  /** Skip Python kernel availability check and prelude warmup */
@@ -2076,6 +2083,12 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
2076
2083
  const hasThinkingEntry = existingBranch.some(entry => entry.type === "thinking_level_change");
2077
2084
  const hasServiceTierEntry = existingBranch.some(entry => entry.type === "service_tier_change");
2078
2085
 
2086
+ // Apply inherited model profile ownership marker to subagent sessions when a parent provides one.
2087
+ // This must occur after computing hasExistingSession to avoid marking a fresh session as resumed.
2088
+ if (options.modelProfileOwnershipMarker !== undefined) {
2089
+ sessionManager.appendModelProfileOwnershipMarker(options.modelProfileOwnershipMarker);
2090
+ }
2091
+
2079
2092
  for (const entry of existingBranch) {
2080
2093
  if (entry.type !== "custom" || entry.customType !== "auth-credential-pin") continue;
2081
2094
  const data = entry.data;
@@ -2415,6 +2428,10 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
2415
2428
  profileAuthority,
2416
2429
  cwd,
2417
2430
  disabledExtensions: settings.get("disabledExtensions"),
2431
+ allowExternalUserSkillSymlinks: resolveGlobalUserSkillLinkTrust({
2432
+ trustUserSkills: settings.getGlobal("skills.trustUserSkills"),
2433
+ enablePiUser: settings.getGlobal("skills.enablePiUser"),
2434
+ }),
2418
2435
  });
2419
2436
  skills = withEmbeddedDefaultGjcSkills(skillsResult.skills);
2420
2437
  skillWarnings = skillsResult.warnings;
@@ -3193,9 +3210,18 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
3193
3210
  getSessionFile: () => sessionManager.getSessionFile() ?? null,
3194
3211
  getSessionAgentDir: () => session?.getSessionAgentDir() ?? options.agentDir ?? settings.getAgentDir(),
3195
3212
  getEvalKernelOwnerId: () => evalKernelOwnerId,
3196
- assertEvalExecutionAllowed: () => session?.assertEvalExecutionAllowed(),
3197
- trackEvalExecution: (execution, abortController) =>
3198
- session ? session.trackEvalExecution(execution, abortController) : execution,
3213
+ assertEvalExecutionAllowed: () => {
3214
+ if (!session) throw new Error("Eval execution is unavailable until session initialization completes");
3215
+ session.assertEvalExecutionAllowed();
3216
+ },
3217
+ trackEvalExecution: (execution, abortController) => {
3218
+ if (!session) {
3219
+ abortController.abort(new Error("Eval execution is unavailable until session initialization completes"));
3220
+ void execution.catch(() => {});
3221
+ throw new Error("Eval execution is unavailable until session initialization completes");
3222
+ }
3223
+ return session.trackEvalExecution(execution, abortController);
3224
+ },
3199
3225
  getAsyncJobManager: () => asyncJobManager,
3200
3226
  waitForUserSteering: signal => {
3201
3227
  if (agent) return agent.waitForSteeringArrival(signal);
@@ -3278,19 +3304,21 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
3278
3304
  peekQueueInvoker: () => session.peekQueueInvoker(),
3279
3305
  peekStandingResolveHandler: () => session.peekStandingResolveHandler(),
3280
3306
  setStandingResolveHandler: handler => session.setStandingResolveHandler(handler),
3281
- allocateOutputArtifact: async toolType => {
3282
- try {
3283
- return await sessionManager.allocateArtifactPath(toolType);
3284
- } catch {
3285
- return {};
3286
- }
3307
+ allocateOutputArtifact: toolType => sessionManager.allocateArtifactPath(toolType),
3308
+ captureArtifactPublication: () => {
3309
+ const capability = sessionArtifactCapability(sessionManager);
3310
+ if (!capability) throw new Error("Session artifact publication authority is unavailable.");
3311
+ return capability.captureArtifactPublication();
3287
3312
  },
3288
3313
  getArtifactManager: () => sessionManager.getArtifactManager(),
3289
3314
  isArtifactManagerAuthorized: manager => sessionManager.isArtifactManagerAuthorized(manager),
3290
3315
  adoptArtifactManager: manager => sessionManager.adoptArtifactManager(manager),
3291
3316
  releaseArtifactManager: manager => sessionManager.releaseArtifactManager(manager),
3292
3317
  ensureArtifactManager: () => sessionManager.ensureArtifactManager(),
3293
- registerSessionCleanup: cleanup => session?.registerToolSessionTransitionCleanup(cleanup) ?? (() => {}),
3318
+ registerSessionCleanup: cleanup => {
3319
+ if (!session) throw new Error("Cannot register session cleanup before session initialization completes");
3320
+ return session.registerToolSessionTransitionCleanup(cleanup);
3321
+ },
3294
3322
  mcpConfigPath: explicitMcpConfigPath,
3295
3323
  settings,
3296
3324
  authStorage,
@@ -4028,6 +4056,14 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
4028
4056
  // INTERNAL terminal-abort seams, threaded directly from the
4029
4057
  // owning session (NOT on the public extension context).
4030
4058
  terminalAbortSeams: {
4059
+ getTerminalRunOwnerForEvent: event => {
4060
+ if (!session) throw new Error("Terminal owner session is not initialized.");
4061
+ return session.getTerminalRunOwnerForEvent(event);
4062
+ },
4063
+ getRunOwnerDomain: handle => {
4064
+ if (!session) throw new Error("Terminal owner session is not initialized.");
4065
+ return session.getRunOwnerDomain(handle);
4066
+ },
4031
4067
  getTerminalTurnEpoch: () => {
4032
4068
  if (!session) throw new Error("Terminal abort session is not initialized.");
4033
4069
  return session.getTerminalTurnEpoch();
@@ -4444,19 +4480,6 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
4444
4480
  // Re-resolve the allowed set: extension factories above may have
4445
4481
  // registered providers/models that weren't visible at startup.
4446
4482
  const allowedFallbackCandidates = await resolveAllowedModels(modelRegistry, settings, modelMatchPreferences);
4447
- // A fresh provider discovery can disprove a bundled model while the
4448
- // general available catalog retains it for offline/profile compatibility.
4449
- // Exclude only those positively disproved bundled entries from the
4450
- // unconfigured startup path; explicit model/profile resolution above keeps
4451
- // its existing precedence and semantics.
4452
- const profileAvailableKeys = new Set(
4453
- modelRegistry
4454
- .getAvailableForProfileActivation()
4455
- .map(candidate => `${candidate.provider}\u0000${candidate.id}`),
4456
- );
4457
- const fallbackCandidates = allowedFallbackCandidates.filter(candidate =>
4458
- profileAvailableKeys.has(`${candidate.provider}\u0000${candidate.id}`),
4459
- );
4460
4483
  // Candidate order is not a quality signal: catalogs sort retired models
4461
4484
  // ahead of current ones whenever their IDs carry older date suffixes, so
4462
4485
  // an unconfigured install would otherwise start on a model its provider
@@ -4464,7 +4487,7 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
4464
4487
  // first — the same table `findInitialModel` consults — and only then fall
4465
4488
  // back to catalog order.
4466
4489
  for (const candidate of orderByProviderDefaultFirst(
4467
- fallbackCandidates,
4490
+ allowedFallbackCandidates,
4468
4491
  modelRegistry.automaticProviderOrder(credentialSessionId),
4469
4492
  )) {
4470
4493
  if (await hasModelApiKey(candidate)) {
@@ -5386,6 +5409,10 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
5386
5409
  profileAuthority,
5387
5410
  cwd: reloadCwd,
5388
5411
  disabledExtensions: settings.get("disabledExtensions"),
5412
+ allowExternalUserSkillSymlinks: resolveGlobalUserSkillLinkTrust({
5413
+ trustUserSkills: settings.getGlobal("skills.trustUserSkills"),
5414
+ enablePiUser: settings.getGlobal("skills.enablePiUser"),
5415
+ }),
5389
5416
  });
5390
5417
  return { skills: withEmbeddedDefaultGjcSkills(reloaded.skills), warnings: reloaded.warnings };
5391
5418
  }
@@ -5452,7 +5479,10 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
5452
5479
  forkContextSeed: options.forkContextSeed,
5453
5480
  providerSessionState: options.providerSessionState,
5454
5481
  });
5455
- session.setActiveModelProfile(startupActiveModelProfile);
5482
+ // Defer profile activation until explicit model pin validation occurs (#5919).
5483
+ if (!options.deferModelProfileActivation) {
5484
+ session.setActiveModelProfile(startupActiveModelProfile);
5485
+ }
5456
5486
  if (retainedRecoveryBindingsAfterLateRestore) session.markStartupRecoveryBindingsRequired();
5457
5487
  if (recoveredSessionDefault)
5458
5488
  session.installRecoveredDefaultFallbackChain(
@@ -6021,6 +6051,9 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
6021
6051
  gjcRuntimeSnapshot: gjcRuntimeStore,
6022
6052
  };
6023
6053
  } catch (error) {
6054
+ // Capture pending owner work before asynchronous startup teardown can yield.
6055
+ const startupPythonCleanup = disposeKernelSessionsByOwner(evalKernelOwnerId);
6056
+ void startupPythonCleanup.catch(() => {});
6024
6057
  let cleanupDiagnostic: unknown;
6025
6058
  let ownedMcpCleanupFailed = false;
6026
6059
  let ownedMcpCleanupError: unknown;
@@ -6058,6 +6091,7 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
6058
6091
  await session.awaitDisposeCompletion();
6059
6092
  }
6060
6093
  });
6094
+ await attemptCleanup(() => startupPythonCleanup);
6061
6095
  } else {
6062
6096
  if (hasRegistered)
6063
6097
  await attemptCleanup(() => {
@@ -6082,18 +6116,8 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
6082
6116
  ownedMcpCleanupFailed = true;
6083
6117
  ownedMcpCleanupError = cleanupError;
6084
6118
  });
6085
- const evalCleanup = Promise.all([import("../eval/py/executor"), import("../eval/js/context-manager")]);
6086
- let evalCleanupModules: Awaited<typeof evalCleanup> | undefined;
6087
- try {
6088
- evalCleanupModules = await evalCleanup;
6089
- } catch (cleanupError) {
6090
- recordCleanupFailure(cleanupError);
6091
- }
6092
- if (evalCleanupModules) {
6093
- const [kernelExecutor, contextManager] = evalCleanupModules;
6094
- await attemptCleanup(() => kernelExecutor.disposeKernelSessionsByOwner(evalKernelOwnerId));
6095
- await attemptCleanup(() => contextManager.disposeVmContextsByOwner(evalKernelOwnerId));
6096
- }
6119
+ await attemptCleanup(() => startupPythonCleanup);
6120
+ await attemptCleanup(() => disposeVmContextsByOwner(evalKernelOwnerId));
6097
6121
  await attemptCleanup(closeOwnedSettings);
6098
6122
  }
6099
6123
  if (processCwdClaimed)