@ai-agent-forge/agent-forge 0.88.1 → 0.88.3

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 (518) hide show
  1. package/CHANGELOG.md +71 -0
  2. package/README.md +1 -1
  3. package/bundled-plugins/agent-loop-policy/agent-forge.json +1 -1
  4. package/bundled-plugins/agent-loop-policy/plugin.json +1 -1
  5. package/bundled-plugins/coding-tools/agent-forge.json +1 -1
  6. package/bundled-plugins/coding-tools/plugin.json +1 -1
  7. package/bundled-plugins/compaction-policy/agent-forge.json +1 -1
  8. package/bundled-plugins/compaction-policy/plugin.json +1 -1
  9. package/bundled-plugins/overflow-policy/agent-forge.json +1 -1
  10. package/bundled-plugins/overflow-policy/plugin.json +1 -1
  11. package/bundled-plugins/provider-failover/agent-forge.json +1 -1
  12. package/bundled-plugins/provider-failover/plugin.json +1 -1
  13. package/bundled-plugins/retry-policy/agent-forge.json +1 -1
  14. package/bundled-plugins/retry-policy/plugin.json +1 -1
  15. package/dist/artifacts/paged-read.d.ts +6 -1
  16. package/dist/artifacts/paged-read.d.ts.map +1 -1
  17. package/dist/artifacts/paged-read.js.map +1 -1
  18. package/dist/bundle/.build-manifest.json +283 -263
  19. package/dist/bundle/chunks/{anthropic-messages-PLAKXR73.js → anthropic-messages-3FJHRAJL.js} +2 -2
  20. package/dist/bundle/chunks/anthropic.js +1 -1
  21. package/dist/bundle/chunks/{azure-openai-responses-OUWQ2AZD.js → azure-openai-responses-GCL47IDS.js} +1 -1
  22. package/dist/bundle/chunks/bedrock-converse-stream.js +1 -1
  23. package/dist/bundle/chunks/{chunk-Z72JWUZ4.js → chunk-32YDZI4J.js} +1 -1
  24. package/dist/bundle/chunks/{chunk-AQLNTW2B.js → chunk-755VNWIF.js} +17 -16
  25. package/dist/bundle/chunks/{chunk-LZOEQITZ.js → chunk-B42Y2VME.js} +120 -104
  26. package/dist/bundle/chunks/{chunk-DRQDKNXA.js → chunk-BVVSHK6W.js} +1 -1
  27. package/dist/bundle/chunks/{chunk-6R7UI4IY.js → chunk-QDLOMKF6.js} +1 -1
  28. package/dist/bundle/chunks/{chunk-D3ARGZFR.js → chunk-V3ACW7VD.js} +3 -3
  29. package/dist/bundle/chunks/{google-generative-ai-DLII6DAT.js → google-generative-ai-6BMXWA44.js} +1 -1
  30. package/dist/bundle/chunks/{google-vertex-G7BZL7GM.js → google-vertex-6H7NLRTK.js} +1 -1
  31. package/dist/bundle/chunks/image-resize-worker.js +3 -3
  32. package/dist/bundle/chunks/{mistral-conversations-JXUK24ID.js → mistral-conversations-IXUHSFSJ.js} +1 -1
  33. package/dist/bundle/chunks/{openai-codex-responses-5GSGFIPG.js → openai-codex-responses-YHUAEVCM.js} +1 -1
  34. package/dist/bundle/chunks/openai-codex.js +1 -1
  35. package/dist/bundle/chunks/{openai-completions-EI2I6DTG.js → openai-completions-ULQCFC72.js} +1 -1
  36. package/dist/bundle/chunks/openai-responses-NLLAJDPS.js +2 -0
  37. package/dist/bundle/chunks/{openrouter-images-G4GQRUSG.js → openrouter-images-GZZQZXMS.js} +1 -1
  38. package/dist/bundle/chunks/openrouter.js +1 -1
  39. package/dist/bundle/chunks/{pi-messages-PWU2VJMR.js → pi-messages-EJTI2EJ3.js} +1 -1
  40. package/dist/bundle/chunks/virtual-modules-TQWEGNNZ.js +5 -0
  41. package/dist/bundle/cli.js +1 -1
  42. package/dist/bundle/client.js +1 -1
  43. package/dist/bundle/index.js +1 -1
  44. package/dist/bundle/rpc-entry.js +1 -1
  45. package/dist/cli/args.d.ts +0 -1
  46. package/dist/cli/args.d.ts.map +1 -1
  47. package/dist/cli/args.js +1 -4
  48. package/dist/cli/args.js.map +1 -1
  49. package/dist/cli/config-selector.d.ts.map +1 -1
  50. package/dist/cli/config-selector.js +1 -1
  51. package/dist/cli/config-selector.js.map +1 -1
  52. package/dist/cli/experimental/cli.d.ts +3 -3
  53. package/dist/cli/experimental/cli.d.ts.map +1 -1
  54. package/dist/cli/experimental/cli.js +2 -2
  55. package/dist/cli/experimental/cli.js.map +1 -1
  56. package/dist/cli/experimental/commands/agent-forge.d.ts +15 -0
  57. package/dist/cli/experimental/commands/agent-forge.d.ts.map +1 -0
  58. package/dist/cli/experimental/commands/{pi.js → agent-forge.js} +4 -4
  59. package/dist/cli/experimental/commands/agent-forge.js.map +1 -0
  60. package/dist/cli/plugin-command.d.ts.map +1 -1
  61. package/dist/cli/plugin-command.js +8 -2
  62. package/dist/cli/plugin-command.js.map +1 -1
  63. package/dist/cli/startup-ui.d.ts.map +1 -1
  64. package/dist/cli/startup-ui.js +1 -1
  65. package/dist/cli/startup-ui.js.map +1 -1
  66. package/dist/config.d.ts +4 -4
  67. package/dist/config.d.ts.map +1 -1
  68. package/dist/config.js +7 -7
  69. package/dist/config.js.map +1 -1
  70. package/dist/core/agent-forge-manifest.d.ts +7 -0
  71. package/dist/core/agent-forge-manifest.d.ts.map +1 -0
  72. package/dist/core/{pi-manifest.js → agent-forge-manifest.js} +4 -4
  73. package/dist/core/agent-forge-manifest.js.map +1 -0
  74. package/dist/core/agent-session-compaction.d.ts +1 -1
  75. package/dist/core/agent-session-compaction.d.ts.map +1 -1
  76. package/dist/core/agent-session-compaction.js +3 -3
  77. package/dist/core/agent-session-compaction.js.map +1 -1
  78. package/dist/core/agent-session-internal.d.ts +2 -0
  79. package/dist/core/agent-session-internal.d.ts.map +1 -1
  80. package/dist/core/agent-session-internal.js.map +1 -1
  81. package/dist/core/agent-session-lifecycle.d.ts.map +1 -1
  82. package/dist/core/agent-session-lifecycle.js +12 -1
  83. package/dist/core/agent-session-lifecycle.js.map +1 -1
  84. package/dist/core/agent-session-projection.d.ts.map +1 -1
  85. package/dist/core/agent-session-projection.js +3 -3
  86. package/dist/core/agent-session-projection.js.map +1 -1
  87. package/dist/core/agent-session-services.d.ts +3 -1
  88. package/dist/core/agent-session-services.d.ts.map +1 -1
  89. package/dist/core/agent-session-services.js +2 -1
  90. package/dist/core/agent-session-services.js.map +1 -1
  91. package/dist/core/agent-session-store.d.ts.map +1 -1
  92. package/dist/core/agent-session-store.js +6 -1
  93. package/dist/core/agent-session-store.js.map +1 -1
  94. package/dist/core/agent-session-tools.d.ts.map +1 -1
  95. package/dist/core/agent-session-tools.js +13 -0
  96. package/dist/core/agent-session-tools.js.map +1 -1
  97. package/dist/core/agent-session.d.ts +24 -0
  98. package/dist/core/agent-session.d.ts.map +1 -1
  99. package/dist/core/agent-session.js +58 -4
  100. package/dist/core/agent-session.js.map +1 -1
  101. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  102. package/dist/core/compaction/branch-summarization.js +1 -1
  103. package/dist/core/compaction/branch-summarization.js.map +1 -1
  104. package/dist/core/experimental.d.ts.map +1 -1
  105. package/dist/core/experimental.js +1 -3
  106. package/dist/core/experimental.js.map +1 -1
  107. package/dist/core/extensions/capability-runtime-store.d.ts +20 -1
  108. package/dist/core/extensions/capability-runtime-store.d.ts.map +1 -1
  109. package/dist/core/extensions/capability-runtime-store.js +67 -0
  110. package/dist/core/extensions/capability-runtime-store.js.map +1 -1
  111. package/dist/core/extensions/capability-runtime-types.d.ts +14 -0
  112. package/dist/core/extensions/capability-runtime-types.d.ts.map +1 -1
  113. package/dist/core/extensions/capability-runtime-types.js +7 -1
  114. package/dist/core/extensions/capability-runtime-types.js.map +1 -1
  115. package/dist/core/extensions/capability-runtime.d.ts.map +1 -1
  116. package/dist/core/extensions/capability-runtime.js +144 -42
  117. package/dist/core/extensions/capability-runtime.js.map +1 -1
  118. package/dist/core/extensions/virtual-modules.d.ts.map +1 -1
  119. package/dist/core/extensions/virtual-modules.js +6 -1
  120. package/dist/core/extensions/virtual-modules.js.map +1 -1
  121. package/dist/core/facade/coding-agent-facade.d.ts +1 -1
  122. package/dist/core/facade/coding-agent-facade.d.ts.map +1 -1
  123. package/dist/core/facade/coding-agent-facade.js +1 -1
  124. package/dist/core/facade/coding-agent-facade.js.map +1 -1
  125. package/dist/core/i18n/locales/zh-cn/cli.d.ts.map +1 -1
  126. package/dist/core/i18n/locales/zh-cn/cli.js +2 -0
  127. package/dist/core/i18n/locales/zh-cn/cli.js.map +1 -1
  128. package/dist/core/i18n/locales/zh-cn/core-contract-final.d.ts +1 -1
  129. package/dist/core/i18n/locales/zh-cn/core-contract-final.d.ts.map +1 -1
  130. package/dist/core/i18n/locales/zh-cn/core-contract-final.js +3 -3
  131. package/dist/core/i18n/locales/zh-cn/core-contract-final.js.map +1 -1
  132. package/dist/core/i18n/locales/zh-cn/core-contract-plugins.d.ts.map +1 -1
  133. package/dist/core/i18n/locales/zh-cn/core-contract-plugins.js +1 -1
  134. package/dist/core/i18n/locales/zh-cn/core-contract-plugins.js.map +1 -1
  135. package/dist/core/i18n/locales/zh-cn/core-errors.d.ts.map +1 -1
  136. package/dist/core/i18n/locales/zh-cn/core-errors.js +1 -1
  137. package/dist/core/i18n/locales/zh-cn/core-errors.js.map +1 -1
  138. package/dist/core/i18n/locales/zh-cn/index.d.ts.map +1 -1
  139. package/dist/core/i18n/locales/zh-cn/index.js +2 -0
  140. package/dist/core/i18n/locales/zh-cn/index.js.map +1 -1
  141. package/dist/core/i18n/locales/zh-cn/interactive-mode.d.ts.map +1 -1
  142. package/dist/core/i18n/locales/zh-cn/interactive-mode.js +5 -0
  143. package/dist/core/i18n/locales/zh-cn/interactive-mode.js.map +1 -1
  144. package/dist/core/i18n/locales/zh-cn/session-cleanup.d.ts +7 -0
  145. package/dist/core/i18n/locales/zh-cn/session-cleanup.d.ts.map +1 -0
  146. package/dist/core/i18n/locales/zh-cn/session-cleanup.js +15 -0
  147. package/dist/core/i18n/locales/zh-cn/session-cleanup.js.map +1 -0
  148. package/dist/core/i18n/locales/zh-cn/slash-commands.d.ts.map +1 -1
  149. package/dist/core/i18n/locales/zh-cn/slash-commands.js +1 -0
  150. package/dist/core/i18n/locales/zh-cn/slash-commands.js.map +1 -1
  151. package/dist/core/i18n/locales/zh-cn/tui-components-misc.d.ts.map +1 -1
  152. package/dist/core/i18n/locales/zh-cn/tui-components-misc.js +2 -0
  153. package/dist/core/i18n/locales/zh-cn/tui-components-misc.js.map +1 -1
  154. package/dist/core/model-resolver.d.ts +2 -0
  155. package/dist/core/model-resolver.d.ts.map +1 -1
  156. package/dist/core/model-resolver.js +4 -1
  157. package/dist/core/model-resolver.js.map +1 -1
  158. package/dist/core/package-resource-collection.d.ts.map +1 -1
  159. package/dist/core/package-resource-collection.js +5 -5
  160. package/dist/core/package-resource-collection.js.map +1 -1
  161. package/dist/core/provider-composer.d.ts.map +1 -1
  162. package/dist/core/provider-composer.js +3 -3
  163. package/dist/core/provider-composer.js.map +1 -1
  164. package/dist/core/resource-loader.d.ts.map +1 -1
  165. package/dist/core/resource-loader.js +1 -1
  166. package/dist/core/resource-loader.js.map +1 -1
  167. package/dist/core/sdk.d.ts +1 -1
  168. package/dist/core/sdk.d.ts.map +1 -1
  169. package/dist/core/sdk.js +30 -8
  170. package/dist/core/sdk.js.map +1 -1
  171. package/dist/core/session-cleanup.d.ts +49 -0
  172. package/dist/core/session-cleanup.d.ts.map +1 -0
  173. package/dist/core/session-cleanup.js +159 -0
  174. package/dist/core/session-cleanup.js.map +1 -0
  175. package/dist/core/session-index.d.ts +75 -0
  176. package/dist/core/session-index.d.ts.map +1 -0
  177. package/dist/core/session-index.js +455 -0
  178. package/dist/core/session-index.js.map +1 -0
  179. package/dist/core/session-manager.d.ts +9 -0
  180. package/dist/core/session-manager.d.ts.map +1 -1
  181. package/dist/core/session-manager.js +206 -51
  182. package/dist/core/session-manager.js.map +1 -1
  183. package/dist/core/settings-manager.d.ts.map +1 -1
  184. package/dist/core/settings-manager.js +5 -10
  185. package/dist/core/settings-manager.js.map +1 -1
  186. package/dist/core/slash-commands.d.ts.map +1 -1
  187. package/dist/core/slash-commands.js +5 -0
  188. package/dist/core/slash-commands.js.map +1 -1
  189. package/dist/core/system-prompt.d.ts.map +1 -1
  190. package/dist/core/system-prompt.js +12 -1
  191. package/dist/core/system-prompt.js.map +1 -1
  192. package/dist/core/timings.d.ts.map +1 -1
  193. package/dist/core/timings.js +1 -3
  194. package/dist/core/timings.js.map +1 -1
  195. package/dist/core/tools/capability-mount.d.ts +40 -0
  196. package/dist/core/tools/capability-mount.d.ts.map +1 -0
  197. package/dist/core/tools/capability-mount.js +112 -0
  198. package/dist/core/tools/capability-mount.js.map +1 -0
  199. package/dist/core/tools/render-utils.d.ts +1 -1
  200. package/dist/core/tools/render-utils.d.ts.map +1 -1
  201. package/dist/core/tools/render-utils.js.map +1 -1
  202. package/dist/core/tools/tool-definition.d.ts +1 -1
  203. package/dist/core/tools/tool-definition.d.ts.map +1 -1
  204. package/dist/core/tools/tool-definition.js.map +1 -1
  205. package/dist/core/trace-retention.d.ts +16 -1
  206. package/dist/core/trace-retention.d.ts.map +1 -1
  207. package/dist/core/trace-retention.js +43 -20
  208. package/dist/core/trace-retention.js.map +1 -1
  209. package/dist/export-html/ansi-to-html.d.ts.map +1 -0
  210. package/dist/export-html/ansi-to-html.js.map +1 -0
  211. package/dist/{core/export-html → export-html}/index.d.ts +1 -1
  212. package/dist/export-html/index.d.ts.map +1 -0
  213. package/dist/{core/export-html → export-html}/index.js +5 -5
  214. package/dist/export-html/index.js.map +1 -0
  215. package/dist/{core/export-html → export-html}/tool-renderer.d.ts +2 -2
  216. package/dist/export-html/tool-renderer.d.ts.map +1 -0
  217. package/dist/export-html/tool-renderer.js.map +1 -0
  218. package/dist/{modes/interactive → host}/model-catalog-refresh.d.ts +1 -1
  219. package/dist/host/model-catalog-refresh.d.ts.map +1 -0
  220. package/dist/{modes/interactive → host}/model-catalog-refresh.js +1 -1
  221. package/dist/host/model-catalog-refresh.js.map +1 -0
  222. package/dist/index.d.ts +5 -5
  223. package/dist/index.d.ts.map +1 -1
  224. package/dist/index.js +12 -12
  225. package/dist/index.js.map +1 -1
  226. package/dist/main.d.ts.map +1 -1
  227. package/dist/main.js +26 -14
  228. package/dist/main.js.map +1 -1
  229. package/dist/modes/interactive/components/agents-view.d.ts.map +1 -1
  230. package/dist/modes/interactive/components/agents-view.js +1 -1
  231. package/dist/modes/interactive/components/agents-view.js.map +1 -1
  232. package/dist/modes/interactive/components/armin.d.ts.map +1 -1
  233. package/dist/modes/interactive/components/armin.js +1 -1
  234. package/dist/modes/interactive/components/armin.js.map +1 -1
  235. package/dist/modes/interactive/components/assistant-message.d.ts +6 -0
  236. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  237. package/dist/modes/interactive/components/assistant-message.js +108 -27
  238. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  239. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  240. package/dist/modes/interactive/components/bash-execution.js +1 -1
  241. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  242. package/dist/modes/interactive/components/bordered-loader.d.ts +1 -1
  243. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  244. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  245. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  246. package/dist/modes/interactive/components/branch-summary-message.js +1 -1
  247. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  248. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  249. package/dist/modes/interactive/components/compaction-summary-message.js +1 -1
  250. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  251. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  252. package/dist/modes/interactive/components/config-selector.js +1 -1
  253. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  254. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
  255. package/dist/modes/interactive/components/custom-entry.js +1 -1
  256. package/dist/modes/interactive/components/custom-entry.js.map +1 -1
  257. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  258. package/dist/modes/interactive/components/custom-message.js +1 -1
  259. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  260. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
  261. package/dist/modes/interactive/components/daxnuts.js +1 -1
  262. package/dist/modes/interactive/components/daxnuts.js.map +1 -1
  263. package/dist/modes/interactive/components/dialog-editor.d.ts.map +1 -1
  264. package/dist/modes/interactive/components/dialog-editor.js +1 -1
  265. package/dist/modes/interactive/components/dialog-editor.js.map +1 -1
  266. package/dist/modes/interactive/components/dialog-input.d.ts.map +1 -1
  267. package/dist/modes/interactive/components/dialog-input.js +1 -1
  268. package/dist/modes/interactive/components/dialog-input.js.map +1 -1
  269. package/dist/modes/interactive/components/dialog-selector.d.ts.map +1 -1
  270. package/dist/modes/interactive/components/dialog-selector.js +1 -1
  271. package/dist/modes/interactive/components/dialog-selector.js.map +1 -1
  272. package/dist/modes/interactive/components/diff.d.ts.map +1 -1
  273. package/dist/modes/interactive/components/diff.js +1 -1
  274. package/dist/modes/interactive/components/diff.js.map +1 -1
  275. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
  276. package/dist/modes/interactive/components/dynamic-border.js +1 -1
  277. package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  278. package/dist/modes/interactive/components/first-time-setup.d.ts +1 -1
  279. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
  280. package/dist/modes/interactive/components/first-time-setup.js +1 -1
  281. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  282. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  283. package/dist/modes/interactive/components/footer.js +1 -1
  284. package/dist/modes/interactive/components/footer.js.map +1 -1
  285. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  286. package/dist/modes/interactive/components/keybinding-hints.js +1 -1
  287. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  288. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  289. package/dist/modes/interactive/components/login-dialog.js +1 -1
  290. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  291. package/dist/modes/interactive/components/mermaid.d.ts +1 -1
  292. package/dist/modes/interactive/components/mermaid.d.ts.map +1 -1
  293. package/dist/modes/interactive/components/mermaid.js.map +1 -1
  294. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  295. package/dist/modes/interactive/components/model-selector.js +2 -2
  296. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  297. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  298. package/dist/modes/interactive/components/oauth-selector.js +1 -1
  299. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  300. package/dist/modes/interactive/components/plugin-manager-entry.d.ts.map +1 -1
  301. package/dist/modes/interactive/components/plugin-manager-entry.js +1 -1
  302. package/dist/modes/interactive/components/plugin-manager-entry.js.map +1 -1
  303. package/dist/modes/interactive/components/plugin-selection-entry.d.ts.map +1 -1
  304. package/dist/modes/interactive/components/plugin-selection-entry.js +1 -1
  305. package/dist/modes/interactive/components/plugin-selection-entry.js.map +1 -1
  306. package/dist/modes/interactive/components/queue-manager-selector.d.ts.map +1 -1
  307. package/dist/modes/interactive/components/queue-manager-selector.js +1 -1
  308. package/dist/modes/interactive/components/queue-manager-selector.js.map +1 -1
  309. package/dist/modes/interactive/components/render-types.d.ts +1 -1
  310. package/dist/modes/interactive/components/render-types.d.ts.map +1 -1
  311. package/dist/modes/interactive/components/render-types.js.map +1 -1
  312. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  313. package/dist/modes/interactive/components/scoped-models-selector.js +1 -1
  314. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  315. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  316. package/dist/modes/interactive/components/session-selector-search.js +5 -1
  317. package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  318. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  319. package/dist/modes/interactive/components/session-selector.js +11 -2
  320. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  321. package/dist/modes/interactive/components/settings-selector.d.ts +1 -1
  322. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  323. package/dist/modes/interactive/components/settings-selector.js +1 -1
  324. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  325. package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -1
  326. package/dist/modes/interactive/components/settings-submenu.js +1 -1
  327. package/dist/modes/interactive/components/settings-submenu.js.map +1 -1
  328. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
  329. package/dist/modes/interactive/components/show-images-selector.js +1 -1
  330. package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
  331. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  332. package/dist/modes/interactive/components/skill-invocation-message.js +1 -1
  333. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  334. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
  335. package/dist/modes/interactive/components/status-indicator.js +1 -1
  336. package/dist/modes/interactive/components/status-indicator.js.map +1 -1
  337. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
  338. package/dist/modes/interactive/components/theme-selector.js +1 -1
  339. package/dist/modes/interactive/components/theme-selector.js.map +1 -1
  340. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  341. package/dist/modes/interactive/components/thinking-selector.js +1 -1
  342. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  343. package/dist/modes/interactive/components/tool-execution.d.ts +19 -0
  344. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  345. package/dist/modes/interactive/components/tool-execution.js +139 -4
  346. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  347. package/dist/modes/interactive/components/tool-run-group.d.ts +44 -0
  348. package/dist/modes/interactive/components/tool-run-group.d.ts.map +1 -0
  349. package/dist/modes/interactive/components/tool-run-group.js +121 -0
  350. package/dist/modes/interactive/components/tool-run-group.js.map +1 -0
  351. package/dist/modes/interactive/components/tree-list.d.ts.map +1 -1
  352. package/dist/modes/interactive/components/tree-list.js +1 -1
  353. package/dist/modes/interactive/components/tree-list.js.map +1 -1
  354. package/dist/modes/interactive/components/tree-render.d.ts.map +1 -1
  355. package/dist/modes/interactive/components/tree-render.js +1 -1
  356. package/dist/modes/interactive/components/tree-render.js.map +1 -1
  357. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  358. package/dist/modes/interactive/components/tree-selector.js +1 -1
  359. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  360. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  361. package/dist/modes/interactive/components/user-message-selector.js +1 -1
  362. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  363. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  364. package/dist/modes/interactive/components/user-message.js +1 -1
  365. package/dist/modes/interactive/components/user-message.js.map +1 -1
  366. package/dist/modes/interactive/components/workflow-view.d.ts.map +1 -1
  367. package/dist/modes/interactive/components/workflow-view.js +1 -1
  368. package/dist/modes/interactive/components/workflow-view.js.map +1 -1
  369. package/dist/modes/interactive/interactive-auth.d.ts +1 -1
  370. package/dist/modes/interactive/interactive-auth.d.ts.map +1 -1
  371. package/dist/modes/interactive/interactive-auth.js +1 -1
  372. package/dist/modes/interactive/interactive-auth.js.map +1 -1
  373. package/dist/modes/interactive/interactive-commands.d.ts +125 -6
  374. package/dist/modes/interactive/interactive-commands.d.ts.map +1 -1
  375. package/dist/modes/interactive/interactive-commands.js +698 -4
  376. package/dist/modes/interactive/interactive-commands.js.map +1 -1
  377. package/dist/modes/interactive/interactive-events.d.ts +174 -0
  378. package/dist/modes/interactive/interactive-events.d.ts.map +1 -0
  379. package/dist/modes/interactive/interactive-events.js +704 -0
  380. package/dist/modes/interactive/interactive-events.js.map +1 -0
  381. package/dist/modes/interactive/interactive-format.d.ts.map +1 -1
  382. package/dist/modes/interactive/interactive-format.js +1 -1
  383. package/dist/modes/interactive/interactive-format.js.map +1 -1
  384. package/dist/modes/interactive/interactive-lifecycle.d.ts +94 -0
  385. package/dist/modes/interactive/interactive-lifecycle.d.ts.map +1 -0
  386. package/dist/modes/interactive/interactive-lifecycle.js +177 -0
  387. package/dist/modes/interactive/interactive-lifecycle.js.map +1 -0
  388. package/dist/modes/interactive/interactive-mode.d.ts +254 -129
  389. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  390. package/dist/modes/interactive/interactive-mode.js +275 -2101
  391. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  392. package/dist/modes/interactive/interactive-queues.d.ts +96 -0
  393. package/dist/modes/interactive/interactive-queues.d.ts.map +1 -0
  394. package/dist/modes/interactive/interactive-queues.js +183 -0
  395. package/dist/modes/interactive/interactive-queues.js.map +1 -0
  396. package/dist/modes/interactive/interactive-selectors.d.ts +95 -5
  397. package/dist/modes/interactive/interactive-selectors.d.ts.map +1 -1
  398. package/dist/modes/interactive/interactive-selectors.js +517 -6
  399. package/dist/modes/interactive/interactive-selectors.js.map +1 -1
  400. package/dist/modes/interactive/startup-services.d.ts +31 -0
  401. package/dist/modes/interactive/startup-services.d.ts.map +1 -0
  402. package/dist/modes/interactive/startup-services.js +123 -0
  403. package/dist/modes/interactive/startup-services.js.map +1 -0
  404. package/dist/modes/memory-preheat.d.ts +11 -0
  405. package/dist/modes/memory-preheat.d.ts.map +1 -0
  406. package/dist/modes/memory-preheat.js +20 -0
  407. package/dist/modes/memory-preheat.js.map +1 -0
  408. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  409. package/dist/modes/rpc/rpc-mode.js +3 -1
  410. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  411. package/dist/plugins/ecosystem/cli.d.ts.map +1 -1
  412. package/dist/plugins/ecosystem/cli.js +6 -3
  413. package/dist/plugins/ecosystem/cli.js.map +1 -1
  414. package/dist/plugins/ecosystem/node-plugin-bootstrap.d.ts +7 -1
  415. package/dist/plugins/ecosystem/node-plugin-bootstrap.d.ts.map +1 -1
  416. package/dist/plugins/ecosystem/node-plugin-bootstrap.js +50 -3
  417. package/dist/plugins/ecosystem/node-plugin-bootstrap.js.map +1 -1
  418. package/dist/plugins/ecosystem/plugin-bootstrap.d.ts +28 -16
  419. package/dist/plugins/ecosystem/plugin-bootstrap.d.ts.map +1 -1
  420. package/dist/plugins/ecosystem/plugin-bootstrap.js +35 -33
  421. package/dist/plugins/ecosystem/plugin-bootstrap.js.map +1 -1
  422. package/dist/profile/plugin-profiles.d.ts +1 -1
  423. package/dist/profile/plugin-profiles.d.ts.map +1 -1
  424. package/dist/profile/plugin-profiles.js +18 -0
  425. package/dist/profile/plugin-profiles.js.map +1 -1
  426. package/dist/remote/server-assembly.d.ts.map +1 -1
  427. package/dist/remote/server-assembly.js +7 -2
  428. package/dist/remote/server-assembly.js.map +1 -1
  429. package/dist/{profiles → suites}/builtin-suites.d.ts +14 -4
  430. package/dist/suites/builtin-suites.d.ts.map +1 -0
  431. package/dist/{profiles → suites}/builtin-suites.js +20 -5
  432. package/dist/suites/builtin-suites.js.map +1 -0
  433. package/dist/suites/resolved-agent-profile.d.ts.map +1 -0
  434. package/dist/suites/resolved-agent-profile.js.map +1 -0
  435. package/dist/suites/suite-lifecycle.d.ts.map +1 -0
  436. package/dist/suites/suite-lifecycle.js.map +1 -0
  437. package/dist/suites/suite-loader.d.ts.map +1 -0
  438. package/dist/suites/suite-loader.js.map +1 -0
  439. package/dist/{modes/interactive/theme → theme}/dark.json +1 -1
  440. package/dist/{modes/interactive/theme → theme}/light.json +1 -1
  441. package/dist/{modes/interactive/theme → theme}/theme-controller.d.ts +1 -1
  442. package/dist/theme/theme-controller.d.ts.map +1 -0
  443. package/dist/{modes/interactive/theme → theme}/theme-controller.js +1 -1
  444. package/dist/theme/theme-controller.js.map +1 -0
  445. package/dist/{modes/interactive/theme → theme}/theme.d.ts +1 -1
  446. package/dist/theme/theme.d.ts.map +1 -0
  447. package/dist/{modes/interactive/theme → theme}/theme.js +5 -5
  448. package/dist/theme/theme.js.map +1 -0
  449. package/docs/compaction.md +7 -7
  450. package/docs/environment-variables.md +10 -4
  451. package/docs/keybindings.md +3 -3
  452. package/docs/models.md +17 -17
  453. package/docs/packages.md +1 -1
  454. package/docs/prompt-templates.md +1 -1
  455. package/docs/rpc.md +2 -2
  456. package/docs/sdk.md +5 -5
  457. package/docs/session-format.md +3 -3
  458. package/docs/settings.md +368 -354
  459. package/docs/shell-aliases.md +1 -1
  460. package/docs/skills.md +1 -1
  461. package/docs/terminal-setup.md +17 -17
  462. package/docs/themes.md +5 -5
  463. package/docs/tmux.md +4 -4
  464. package/docs/tui.md +1 -1
  465. package/docs/windows.md +1 -1
  466. package/examples/extensions/bash-spawn-hook/index.ts +1 -1
  467. package/examples/extensions/dynamic-resources/dynamic.json +1 -1
  468. package/examples/extensions/with-deps/package-lock.json +2 -2
  469. package/examples/extensions/with-deps/package.json +1 -6
  470. package/examples/extensions/with-deps/plugin.json +1 -1
  471. package/package.json +2 -2
  472. package/dist/bundle/chunks/openai-responses-AUJQ3NWT.js +0 -2
  473. package/dist/bundle/chunks/virtual-modules-WF6WRHP7.js +0 -5
  474. package/dist/cli/experimental/commands/pi.d.ts +0 -15
  475. package/dist/cli/experimental/commands/pi.d.ts.map +0 -1
  476. package/dist/cli/experimental/commands/pi.js.map +0 -1
  477. package/dist/core/export-html/ansi-to-html.d.ts.map +0 -1
  478. package/dist/core/export-html/ansi-to-html.js.map +0 -1
  479. package/dist/core/export-html/index.d.ts.map +0 -1
  480. package/dist/core/export-html/index.js.map +0 -1
  481. package/dist/core/export-html/tool-renderer.d.ts.map +0 -1
  482. package/dist/core/export-html/tool-renderer.js.map +0 -1
  483. package/dist/core/pi-manifest.d.ts +0 -7
  484. package/dist/core/pi-manifest.d.ts.map +0 -1
  485. package/dist/core/pi-manifest.js.map +0 -1
  486. package/dist/modes/interactive/model-catalog-refresh.d.ts.map +0 -1
  487. package/dist/modes/interactive/model-catalog-refresh.js.map +0 -1
  488. package/dist/modes/interactive/theme/theme-controller.d.ts.map +0 -1
  489. package/dist/modes/interactive/theme/theme-controller.js.map +0 -1
  490. package/dist/modes/interactive/theme/theme.d.ts.map +0 -1
  491. package/dist/modes/interactive/theme/theme.js.map +0 -1
  492. package/dist/profiles/builtin-suites.d.ts.map +0 -1
  493. package/dist/profiles/builtin-suites.js.map +0 -1
  494. package/dist/profiles/resolved-agent-profile.d.ts.map +0 -1
  495. package/dist/profiles/resolved-agent-profile.js.map +0 -1
  496. package/dist/profiles/suite-lifecycle.d.ts.map +0 -1
  497. package/dist/profiles/suite-lifecycle.js.map +0 -1
  498. package/dist/profiles/suite-loader.d.ts.map +0 -1
  499. package/dist/profiles/suite-loader.js.map +0 -1
  500. package/dist/utils/deprecation.d.ts +0 -4
  501. package/dist/utils/deprecation.d.ts.map +0 -1
  502. package/dist/utils/deprecation.js +0 -13
  503. package/dist/utils/deprecation.js.map +0 -1
  504. /package/dist/{core/export-html → export-html}/ansi-to-html.d.ts +0 -0
  505. /package/dist/{core/export-html → export-html}/ansi-to-html.js +0 -0
  506. /package/dist/{core/export-html → export-html}/template.css +0 -0
  507. /package/dist/{core/export-html → export-html}/template.html +0 -0
  508. /package/dist/{core/export-html → export-html}/template.js +0 -0
  509. /package/dist/{core/export-html → export-html}/tool-renderer.js +0 -0
  510. /package/dist/{core/export-html → export-html}/vendor/highlight.min.js +0 -0
  511. /package/dist/{core/export-html → export-html}/vendor/marked.min.js +0 -0
  512. /package/dist/{profiles → suites}/resolved-agent-profile.d.ts +0 -0
  513. /package/dist/{profiles → suites}/resolved-agent-profile.js +0 -0
  514. /package/dist/{profiles → suites}/suite-lifecycle.d.ts +0 -0
  515. /package/dist/{profiles → suites}/suite-lifecycle.js +0 -0
  516. /package/dist/{profiles → suites}/suite-loader.d.ts +0 -0
  517. /package/dist/{profiles → suites}/suite-loader.js +0 -0
  518. /package/dist/{modes/interactive/theme → theme}/theme-schema.json +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session.js","sourceRoot":"","sources":["../../src/core/agent-session.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * AgentSession - Core abstraction for agent lifecycle and session management.\n *\n * This class is shared between all run modes (interactive, print, rpc).\n * It encapsulates:\n * - Agent state access\n * - Event subscription with automatic session persistence\n * - Model and thinking level management\n * - Compaction (manual and auto)\n * - Bash execution\n * - Session switching and branching\n *\n * Modes use this class and add their own I/O layer on top.\n */\n\nimport { readFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport type {\n\tAgent,\n\tAgentContext,\n\tAgentEvent,\n\tAgentLoopTurnUpdate,\n\tAgentMessage,\n\tAgentState,\n\tAgentTool,\n\tPrepareNextTurnContext,\n\tThinkingLevel,\n} from \"@agent-forge/agent-core\";\nimport type { Api, Transport } from \"@agent-forge/ai\";\nimport { contentText } from \"@agent-forge/ai\";\nimport type { AssistantMessage, ImageContent, Model, TextContent, ToolResultMessage } from \"@agent-forge/ai/compat\";\nimport {\n\tclampThinkingLevel,\n\tcleanupSessionResources,\n\tgetSupportedThinkingLevels,\n\tstreamSimple,\n} from \"@agent-forge/ai/compat\";\nimport type { MemoryStorageComponentsV1 } from \"@agent-forge/plugin-sdk\";\nimport type { DurableServiceV1 } from \"../durable/durable-service.ts\";\nimport type { SummaryAttemptRecordV1 } from \"../host/summary-retry.ts\";\nimport type { ObservabilityPlugin } from \"../plugins/observability-types.ts\";\nimport { stripFrontmatter } from \"../utils/frontmatter.ts\";\nimport {\n\tabortBash,\n\tcaptureBashEpoch,\n\temitUserBash,\n\texecuteBash,\n\tflushPendingBashMessages,\n\tisBashEpochCurrent,\n\trecordBashResult,\n} from \"./agent-session-bash.ts\";\nimport {\n\ttype CompactionCancelledResult,\n\tcheckCompaction,\n\tcompactBeforeNextAssistantResponse,\n\tcompactInternal,\n\tenqueueCompaction,\n\tnavigateTree,\n\trunAutoCompaction,\n} from \"./agent-session-compaction.ts\";\nimport {\n\tapplyContextTransition,\n\tassertContextTransitionCurrent,\n\tbeginContextTransitionFence,\n\tcopyContextMessages,\n\tenqueueContextTransition,\n\tisContextTransitionCurrent,\n\treplaceContext,\n\trequireContextStrategy,\n\trequireIdleContextOperation,\n\trestoreContext,\n\trestoreContextTransition,\n\tsnapshotContext,\n} from \"./agent-session-context.ts\";\nimport {\n\tbuildExtensionResourcePaths,\n\tcollectCommandInfos,\n\textendResourcesFromExtensions,\n\tgetExtensionSourceLabel,\n} from \"./agent-session-extensions.ts\";\nimport {\n\ttype AgentSessionInternals,\n\tdetachedSessionSnapshot,\n\ttype ToolDefinitionEntry,\n} from \"./agent-session-internal.ts\";\nimport {\n\tdispatchAgentEndLifecycle,\n\tdispatchAgentSettledLifecycle,\n\tdispatchAgentStartLifecycle,\n\tdispatchAgentTaskSettledLifecycle,\n\tdispatchBeforeAgentStartLifecycle,\n\tdispatchBeforeAgentStartV2Lifecycle,\n\tdispatchContextReplacedLifecycle,\n\tdispatchInputGateBlockedLifecycle,\n\tdispatchInputReceivedLifecycle,\n\tdispatchMessageEndLifecycle,\n\tdispatchMessageStartLifecycle,\n\tdispatchModelResponseLifecycle,\n\tdispatchModelStreamLifecycle,\n\tdispatchSessionEndLifecycle,\n\tdispatchSessionEntryAppendedLifecycle,\n\tdispatchSessionInfoChangedLifecycle,\n\tdispatchSessionReloadLifecycle,\n\tdispatchSessionStartLifecycle,\n\tdispatchThinkingLevelSelectLifecycle,\n\tdispatchToolCommitLifecycle,\n\tdispatchToolExecutionStartLifecycle,\n\tdispatchToolResultLifecycle,\n\tdispatchTurnEndLifecycle,\n\tdispatchTurnStartLifecycle,\n\tobserveLifecycleDeliveryError,\n} from \"./agent-session-lifecycle.ts\";\nimport { createLoopWiring, wireDefaultLoop } from \"./agent-session-loop.ts\";\nimport { type LoopExecutor, postAgentRun, runPromptLoop } from \"./agent-session-loop-runner.ts\";\nimport {\n\taddPersistedDefaultToNonEmptyScope,\n\tcycleAvailableModel,\n\tcycleModel,\n\tcycleScopedModel,\n\temitModelSelect,\n\tgetScopedModels,\n\tgetThinkingLevelForModelSwitch,\n\tmodelFactsView,\n\tsetModel,\n\tsetScopedModels,\n} from \"./agent-session-model.ts\";\nimport {\n\texportToHtml,\n\texportToJsonl,\n\ttype ForkableUserMessage,\n\tgetContextUsage,\n\tgetLastAssistantText,\n\tgetSessionStats,\n\tgetUserMessagesForForking,\n} from \"./agent-session-projection.ts\";\nimport { isRetryableError, prepareRetry, willRetryAfterAgentEnd } from \"./agent-session-retry.ts\";\nimport type { ReplacedSessionContext } from \"./agent-session-runtime.ts\";\nimport {\n\tgetAllTools,\n\tgetCapabilitySkills,\n\tgetToolDefinition,\n\tnormalizePromptGuidelines,\n\tnormalizePromptSnippet,\n\trebuildSystemPrompt,\n\trefreshBootstrapSkills,\n\trefreshToolRegistry,\n\tsetActiveToolsByName,\n\tsyncCapabilityTools,\n\tvalidateCapabilitySkillConflicts,\n} from \"./agent-session-tools.ts\";\nimport { formatNoApiKeyFoundMessage, formatNoModelSelectedMessage } from \"./auth-guidance.ts\";\nimport type { BashResult } from \"./bash-executor.ts\";\nimport type { CompactionResult } from \"./compaction/index.ts\";\nimport { THINKING_LEVEL_OPTIONS } from \"./defaults.ts\";\nimport type { AgentTaskSettledEventDataV1 } from \"./extensions/bootstrap-lifecycle.ts\";\nimport { definitionSnapshot, detachedSnapshot } from \"./extensions/capability-runtime-snapshot.ts\";\nimport type { TraceServiceV1 } from \"./extensions/capability-runtime-types.ts\";\nimport {\n\ttype AgentCompositionAPI,\n\ttype AgentLoopWiringV1,\n\ttype AgentTaskAdapter,\n\ttype AgentTaskSessionSummaryV1,\n\ttype AgentTaskSessionViewV1,\n\tBOOTSTRAP_AGENT_LOOP_PLUGIN_ID,\n\tBOOTSTRAP_LIFECYCLE_PLUGIN_ID,\n\tBOOTSTRAP_SKILLS_PLUGIN_ID,\n\ttype AgentContextCommitRequestV1 as CanonicalAgentContextCommitRequestV1,\n\ttype AgentContextCommitResultV1 as CanonicalAgentContextCommitResultV1,\n\ttype AgentContextSnapshotV1 as CanonicalAgentContextSnapshotV1,\n\ttype CapabilityCommandResult,\n\ttype CapabilityPluginFactory,\n\ttype CapabilityPluginHandle,\n\ttype CapabilityRuntime,\n\ttype ContextOperationOptions,\n\tcreateCapabilityRuntime,\n\tDEFAULT_BRANCH_SUMMARY_POLICY_NAME,\n\tDEFAULT_COMPACTION_POLICY_NAME,\n\tDEFAULT_OVERFLOW_POLICY_NAME,\n\tDEFAULT_RETRY_POLICY_NAME,\n\tDEFAULT_RUN_LOOP_STRATEGY_NAME,\n\tEXPERIMENTAL_PUBLIC_API_VERSION,\n\ttype ExecutionFactsV1,\n\ttype HostMode,\n\ttype InteractionHostV1,\n\tinstallBootstrapAgentLoop,\n\tinstallBootstrapLifecycle,\n\tinstallSessionBootstrapSkills,\n\ttype LoggerRecord,\n\tloadCapabilityPluginFromManifest,\n\tloadCapabilityPlugin as loadCapabilityPluginRuntime,\n\ttype ModelStreamEventDataV1,\n\ttype OutputArtifactRef,\n\ttype PluginManifest,\n\ttype PromptOutcome,\n\ttype SessionAPI,\n\ttype SessionRevisionV1,\n} from \"./extensions/index.ts\";\nimport type { ContextUsage, PluginConfig, SubagentCommunicationWiringV1 } from \"./extensions/public-api.ts\";\nimport { t } from \"./i18n/index.ts\";\nimport type { InputSource } from \"./input-source.ts\";\nimport type { HostLogContext, HostLogger } from \"./logger.ts\";\nimport type { BashExecutionMessage, CustomMessage } from \"./messages.ts\";\nimport type { ModelRuntime } from \"./model-runtime.ts\";\nimport { expandPromptTemplate, type PromptTemplate } from \"./prompt-templates.ts\";\nimport type { ResourceLoader } from \"./resource-loader.ts\";\nimport { createSessionJsonlArtifact } from \"./session-export.ts\";\nimport type { BranchSummaryEntry, SessionEntry, SessionEntryProjection, SessionManager } from \"./session-manager.ts\";\nimport type { SessionStartMetadata } from \"./session-start.ts\";\nimport type { SettingsManager } from \"./settings-manager.ts\";\nimport type { Skill } from \"./skills.ts\";\nimport type { SourceInfo } from \"./source-info.ts\";\nimport type { BuildSystemPromptOptions } from \"./system-prompt.ts\";\nimport type { BashOperations } from \"./tools/bash-operations.ts\";\nimport type { ToolDefinition, ToolInfo } from \"./tools/tool-definition.ts\";\nimport { createToolSearchTool } from \"./tools/tool-search.ts\";\n\n// ============================================================================\n// Skill Block Parsing\n// ============================================================================\n\n/** Parsed skill block from a user message */\nexport interface ParsedSkillBlock {\n\tname: string;\n\tlocation: string;\n\tcontent: string;\n\tuserMessage: string | undefined;\n}\n\n/**\n * Parse a skill block from message text.\n * Returns null if the text doesn't contain a skill block.\n */\nexport function parseSkillBlock(text: string): ParsedSkillBlock | null {\n\tconst match = text.match(/^<skill name=\"([^\"]+)\" location=\"([^\"]+)\">\\n([\\s\\S]*?)\\n<\\/skill>(?:\\n\\n([\\s\\S]+))?$/);\n\tif (!match) return null;\n\treturn {\n\t\tname: match[1],\n\t\tlocation: match[2],\n\t\tcontent: match[3],\n\t\tuserMessage: match[4]?.trim() || undefined,\n\t};\n}\n\n/**\n * Custom entry type marking a cross-suite resume (设计 §10.1 最小可用版): the\n * session was created under one suite but its context was reassembled under\n * another. Entry data: `{ originalSuiteId, currentSuiteId }`.\n */\nexport const SUITE_MISMATCH_SESSION_ENTRY_TYPE = \"suite_mismatch\";\n\n/** Session-specific events that extend the core AgentEvent */\nexport type AgentSessionEvent =\n\t| Exclude<AgentEvent, { type: \"agent_end\" }>\n\t| {\n\t\t\ttype: \"agent_end\";\n\t\t\tmessages: AgentMessage[];\n\t\t\twillRetry: boolean;\n\t }\n\t| { type: \"agent_settled\" }\n\t| {\n\t\t\ttype: \"queue_update\";\n\t\t\tsteering: readonly string[];\n\t\t\tfollowUp: readonly string[];\n\t }\n\t| { type: \"compaction_start\"; reason: \"manual\" | \"threshold\" | \"overflow\" }\n\t| { type: \"entry_appended\"; entry: SessionEntry }\n\t| { type: \"session_info_changed\"; name: string | undefined }\n\t| { type: \"thinking_level_changed\"; level: ThinkingLevel }\n\t| {\n\t\t\ttype: \"compaction_end\";\n\t\t\treason: \"manual\" | \"threshold\" | \"overflow\";\n\t\t\tresult: CompactionResult | undefined;\n\t\t\taborted: boolean;\n\t\t\twillRetry: boolean;\n\t\t\terrorMessage?: string;\n\t }\n\t| { type: \"compaction_skipped\"; reason: \"threshold\" | \"overflow\"; cause: \"nothing_to_compact\" }\n\t| { type: \"auto_retry_start\"; attempt: number; maxAttempts: number; delayMs: number; errorMessage: string }\n\t| { type: \"auto_retry_end\"; success: boolean; attempt: number; finalError?: string }\n\t| {\n\t\t\ttype: \"summarization_retry_scheduled\";\n\t\t\tattempt: number;\n\t\t\tmaxAttempts: number;\n\t\t\tdelayMs: number;\n\t\t\terrorMessage: string;\n\t }\n\t| { type: \"summarization_retry_attempt_start\"; source: \"branchSummary\" }\n\t| {\n\t\t\ttype: \"summarization_retry_attempt_start\";\n\t\t\tsource: \"compaction\";\n\t\t\treason: \"manual\" | \"threshold\" | \"overflow\";\n\t }\n\t| {\n\t\t\ttype: \"summarization_retry_finished\";\n\t\t\tsource: { source: \"branchSummary\" } | { source: \"compaction\"; reason: \"manual\" | \"threshold\" | \"overflow\" };\n\t\t\tattempts: readonly SummaryAttemptRecordV1[];\n\t }\n\t| { type: \"bash_execution_update\"; id?: string; delta: string }\n\t| CapabilityCommandResultEvent;\n\n/** Result returned by a capability command, rendered by each host without TUI coupling. */\nexport type CapabilityCommandResultEvent = {\n\ttype: \"capability_command_result\";\n\tcommand: string;\n\tsource: string;\n\tresult: CapabilityCommandResult;\n};\n\n/** Listener function for agent session events */\nexport type AgentSessionEventListener = (event: AgentSessionEvent) => void;\n\n/**\n * Listener for each output artifact committed through this session's capability\n * runtime. Host adapters mirror the payload into durable storage; the runtime\n * itself stays storage-agnostic. `bytes` is the live buffer shared with the\n * in-memory artifact store: listeners must treat it as read-only.\n */\nexport type OutputArtifactCommitListener = (artifact: {\n\treadonly ref: OutputArtifactRef;\n\treadonly bytes: Uint8Array;\n}) => void;\n\n/**\n * Why a turn was aborted (adapted from codex's TurnAbortReason,\n * protocol.rs:4173): \"interrupted\" is host/user intent, \"replaced\" is session\n * teardown/reload. codex's \"budget_limited\" is deliberately omitted — turn\n * budgets cap what the agent can do, so Agent Forge does not carry the concept.\n */\nexport type TurnAbortReason = \"interrupted\" | \"replaced\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface AgentSessionConfig {\n\tagent: Agent;\n\tsessionManager: SessionManager;\n\tsettingsManager: SettingsManager;\n\tcwd: string;\n\t/** Models to cycle through with Ctrl+P (from --models flag) */\n\tscopedModels?: Array<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>;\n\t/** Resource loader for extensions, skills, prompts, themes, context files, and system prompt */\n\tresourceLoader: ResourceLoader;\n\t/** SDK custom tools registered outside extensions */\n\tcustomTools?: ToolDefinition[];\n\t/** Canonical model/auth runtime used by coding-agent internals. */\n\tmodelRuntime: ModelRuntime;\n\t/** Initial active built-in tool names. Default: [read, bash, edit, write] */\n\tinitialActiveToolNames?: string[];\n\t/** Optional allowlist of tool names. When provided, only these tool names are exposed. */\n\tallowedToolNames?: string[];\n\t/** Optional denylist of tool names. When provided, these tool names are not exposed. */\n\texcludedToolNames?: string[];\n\t/**\n\t * Plugin ids whose tools register normally but stay out of the default\n\t * active (prompt-visible) set; the built-in tool_search tool discovers and\n\t * activates them on demand. Explicit activation (allowlist, SDK, or\n\t * setActiveTools) overrides the deferral.\n\t */\n\tdeferredToolPluginIds?: readonly string[];\n\t/**\n\t * Bootstrap plugin ids to SKIP at session construction (宪法 §1: bootstrap\n\t * 插件可禁用)。Id values are the exported BOOTSTRAP_*_PLUGIN_ID constants\n\t * (\"agent-forge.bootstrap-skills\" etc.). A disabled bootstrap plugin leaves\n\t * its surface absent — visible via plugin rejections/diagnostics, never a\n\t * silent kernel downgrade. The default coding tools are no longer part of\n\t * this family (D-082 批 1): they load through the bundled manifest channel,\n\t * whose disable face is the sdk's `disabledPluginIds`.\n\t */\n\tdisabledBootstrapPlugins?: readonly string[];\n\t/** Session start metadata dispatched to the capability lifecycle on session start. */\n\tsessionStartEvent?: SessionStartMetadata;\n\t/** Core capability mode; defaults to full-control for compatibility. */\n\tcapabilityMode?: HostMode;\n\t/** Optional external context strategy name. Missing registrations fail at request time. */\n\tcontextStrategyName?: string;\n\t/** Optional retry policy supplied by a capability plugin. Missing registrations fail when a retry is evaluated. */\n\tretryPolicyName?: string;\n\t/** Optional automatic compaction policy supplied by a capability plugin. */\n\tcompactionPolicyName?: string;\n\t/** Optional provider overflow policy supplied by a capability plugin. */\n\toverflowPolicyName?: string;\n\t/** Optional branch summary policy supplied by a capability plugin. */\n\tbranchSummaryPolicyName?: string;\n\t/**\n\t * Optional post-run continuation strategy supplied by a capability plugin.\n\t * Missing registrations fall back to the default continuation behavior.\n\t */\n\trunLoopStrategyName?: string;\n\t/** Host adapter for isolated child agent tasks. Omitted hosts do not expose the agents capability. */\n\tagentTaskAdapter?: AgentTaskAdapter;\n\t/**\n\t * Durable replay channel for agent task terminal outcomes (agent-result-replay-v1).\n\t * Only meaningful alongside `agentTaskAdapter` (the replay feature requires the\n\t * agents capability); stored on the instance so runtime rebuilds (reload) keep\n\t * the wiring. The host owns the writer claim lifecycle.\n\t */\n\tagentTaskResults?: {\n\t\treadonly store: DurableServiceV1;\n\t\treadonly writerId: string;\n\t};\n\t/**\n\t * Bounded read-only reader for persisted subagent session transcripts (D-060 S3).\n\t * Only meaningful alongside `agentTaskAdapter`; the host enforces scoping (a\n\t * session may only read transcripts whose parent is itself) by returning\n\t * undefined for anything out of scope.\n\t */\n\tagentSessionReader?: (sessionId: string) => Promise<AgentTaskSessionViewV1 | undefined>;\n\t/**\n\t * Lister for this session's own subagent session summaries, newest first\n\t * (D-060 model-face inventory). Only meaningful alongside `agentTaskAdapter`;\n\t * the host scopes it to this session's children.\n\t */\n\tagentSessionLister?: () => Promise<AgentTaskSessionSummaryV1[]>;\n\t/** Host adapter for the versioned AgentDefinition/AgentInstance facade. */\n\tagentComposition?: AgentCompositionAPI;\n\t/** Host adapter for cancellable interaction tasks. Omitted hosts do not expose the interaction capability. */\n\tinteractionHost?: InteractionHostV1;\n\t/**\n\t * Session-nature orientation text (suite persona, 设计 §6.2). Kept on the\n\t * session so every system prompt rebuild (tool-set changes, extension\n\t * resource refreshes) re-injects it.\n\t */\n\torientationPrompt?: string;\n\t/**\n\t * Optional durable preference card injected right after the persona on\n\t * every system prompt rebuild (kept on the session like\n\t * {@link orientationPrompt}). The first-party memory plugin stopped using\n\t * this channel when it moved into its own package (D-075 S4 fourth batch —\n\t * its assistant card now rides the transformContext loop hook); the field\n\t * stays a generic host-assembly face for embedders with their own card.\n\t */\n\tpreferenceCard?: string;\n\t/**\n\t * Optional filter applied to the legacy capability-plugin skill surface\n\t * (`runtime.listSkills()`) after duplicate-name exclusion. Default:\n\t * identity (no filtering). The suite assembler wires filterSuiteSkills\n\t * here; the session itself stays suite-unaware.\n\t */\n\tcapabilitySkillsFilter?: (skills: Skill[]) => Skill[];\n\t/**\n\t * 宿主进程日志器(设计 §5):注入后插件日志镜像、内建能力装载失败等会话级\n\t * 事实落进程日志;缺省 = 宿主显式关闭进程日志(显式契约,非默认降级),\n\t * 所有依赖它的打点为 no-op。\n\t */\n\thostLogger?: HostLogger;\n\t/**\n\t * 插件日志镜像共享 ref(会话轨迹 plugin.log,设计 §7.2):装配域 observability\n\t * 插件工厂创建时写入镜像门面方法、插件 dispose 时置空;runtime 日志 sink 在\n\t * 每条插件日志上先经它镜像进轨迹,再按级别落 hostLogger。\n\t * 装配域写入、会话生命周期持有的可变共享 ref;空 = 无镜像(no-op)。\n\t */\n\tlogRecordMirrorRef?: { current?: (record: LoggerRecord) => void };\n\t/**\n\t * /metrics 命令的数据源共享 ref(observability 插件工厂创建时写入\n\t * plugin.getMetrics、dispose 时置空;宿主装配完成后读取接进命令 options)。\n\t * 空 = 插件未挂载(/metrics 显示未装配警告)。\n\t */\n\tobservabilityGetMetricsRef?: { current?: ObservabilityPlugin[\"getMetrics\"] };\n\t/**\n\t * Host agent directory (D-075 S4 second batch): surfaced to capability\n\t * plugins as `api.host.agentDir` so disk-state plugins (e.g. the\n\t * session-share config channel) can locate `<agentDir>/capabilities/`\n\t * files. Absent on hosts without an agent dir.\n\t */\n\tagentDir?: string;\n\t/**\n\t * Subagent communication wiring (D-075 S4 third batch): surfaced to\n\t * capability plugins as `api.host.communication`. The parent assembly\n\t * injects `drainEscalations`; child (leaf) assemblies receive the\n\t * post/drainInbox closures with the child identity bound by the parent\n\t * scope. Absent = the delegation plugins stay default-off (D-060 S4).\n\t */\n\tcommunication?: SubagentCommunicationWiringV1;\n\t/**\n\t * Turn-scoped host context (D-075 S4 third batch): surfaced to capability\n\t * plugins as `api.host.turnContext`. `backgroundDigestSink` receives the\n\t * bounded JSON digest line of each settled background delegation;\n\t * `getTurnCorrelationId` returns the parent turn's correlation id at\n\t * submission time. Absent = no push notification or turn-lineage\n\t * attribution for background delegations.\n\t */\n\tturnContext?: {\n\t\tbackgroundDigestSink?: (line: string) => void;\n\t\tgetTurnCorrelationId?: () => string | undefined;\n\t};\n\t/**\n\t * Role ids associated with the active suite (D-075 S4 third batch):\n\t * surfaced to capability plugins as `api.host.roleAssociations`. Role\n\t * definitions are disk-only (`<agentDir>/roles/<id>.json`); only\n\t * associated ids surface in the delegation tool menu. Absent = no roles.\n\t */\n\troleAssociations?: readonly string[];\n\t/**\n\t * Memory storage components (D-075 S4 fourth batch): surfaced to capability\n\t * plugins as `api.host.memoryStorage`. The first-party memory plugin binds\n\t * the injected store/ledger factories and vector components in place of\n\t * its built-in defaults. Absent = the plugin runs its own local\n\t * implementation.\n\t */\n\tmemoryStorage?: MemoryStorageComponentsV1;\n\t/**\n\t * Host trace service (D-075 S4 second batch): injected into the capability\n\t * runtime as `api.trace`/`api.traceSinkOptions` so the installed\n\t * observability package binds its trace sink; absent = plugins stay\n\t * trace-free.\n\t */\n\ttraceService?: TraceServiceV1;\n}\n\n/** How a queued steer/follow_up input was dispatched: \"handled\" (consumed by a handler, not queued) or \"queued\". */\nexport type QueuedInputDisposition = \"handled\" | \"queued\";\n/** How an accepted prompt was dispatched: handled (consumed), queued (during a run), or started (run begins). */\nexport type PromptDisposition = QueuedInputDisposition | \"started\";\n\n/** Options for AgentSession.prompt() */\nexport interface PromptOptions {\n\t/** Whether to dispatch extension commands and expand skill commands and prompt templates (default: true) */\n\texpandPromptTemplates?: boolean;\n\t/** Image attachments */\n\timages?: ImageContent[];\n\t/** When streaming, how to queue the message: \"steer\" (interrupt) or \"followUp\" (wait). Required if streaming. */\n\tstreamingBehavior?: \"steer\" | \"followUp\";\n\t/** Source of the input, reported in the input.received lifecycle facts. Defaults to \"interactive\". */\n\tsource?: InputSource;\n\t/**\n\t * Internal hook used by RPC mode to observe how an accepted prompt was dispatched\n\t * (\"handled\", \"queued\", or \"started\"). Not called if the prompt is rejected.\n\t */\n\tpreflightResult?: (disposition: PromptDisposition) => void;\n}\n\n/** Options for model/thinking mutations. */\nexport interface ModelMutationOptions {\n\t/** Persist the new value to global defaults. Defaults to session-only. */\n\tpersist?: boolean;\n}\n\n/** Result from cycleModel() */\nexport interface ModelCycleResult {\n\tmodel: Model<Api>;\n\tthinkingLevel: ThinkingLevel;\n\t/** Whether cycling through scoped models (--models flag) or all available */\n\tisScoped: boolean;\n}\n\n/** Session statistics for /session command */\nexport interface SessionStats {\n\tsessionFile: string | undefined;\n\tsessionId: string;\n\tuserMessages: number;\n\tassistantMessages: number;\n\ttoolCalls: number;\n\ttoolResults: number;\n\ttotalMessages: number;\n\ttokens: {\n\t\tinput: number;\n\t\toutput: number;\n\t\tcacheRead: number;\n\t\tcacheWrite: number;\n\t\ttotal: number;\n\t};\n\tcost: number;\n\tcontextUsage?: ContextUsage;\n}\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n// ============================================================================\n// AgentSession Class\n// ============================================================================\n\n/**\n * Core session orchestration adapter.\n *\n * The stable facade `CodingAgentFacadeV1` (docs/design/稳定门面统一入口设计.md)\n * is the only supported consumption surface for product hosts. Direct\n * consumption of this class is limited to registered carve-outs\n * (tui-private-path-contract.test.ts allowlists and the §2.7/§2.9 deferred\n * registrations in the design doc).\n *\n * @internal\n */\nexport class AgentSession {\n\treadonly agent: Agent;\n\treadonly sessionManager: SessionManager;\n\treadonly settingsManager: SettingsManager;\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _scopedModels: Array<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>;\n\n\t// Event subscription state\n\tprivate _unsubscribeAgent?: () => void;\n\tprivate _eventListeners: AgentSessionEventListener[] = [];\n\tprivate _isAgentRunActive = false;\n\tprivate _idleWaitPromise: Promise<void> | undefined;\n\tprivate _resolveIdleWait: (() => void) | undefined;\n\n\t/** Tracks pending steering messages for UI display. Removed when delivered. */\n\tprivate _steeringMessages: string[] = [];\n\t/** Tracks pending follow-up messages for UI display. Removed when delivered. */\n\tprivate _followUpMessages: string[] = [];\n\t/** Messages queued to be included with the next user prompt as context (\"asides\"). */\n\tprivate _pendingNextTurnMessages: CustomMessage[] = [];\n\t/** Context-only custom messages queued during a run, flushed once the current turn's tool results are in. */\n\tprivate _pendingCustomMessages: CustomMessage[] = [];\n\n\t// Compaction state\n\t/** Serializes manual and automatic compaction, including their projections. */\n\tprivate _compactionQueue: Promise<void> = Promise.resolve();\n\tprivate _compactionAbortController: AbortController | undefined = undefined;\n\tprivate _autoCompactionAbortController: AbortController | undefined = undefined;\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _overflowRecoveryAttempted = false;\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _overflowTrimStage = 0;\n\n\t// Branch summarization state\n\tprivate _branchSummaryAbortController: AbortController | undefined = undefined;\n\tprivate _branchSummaryPromise: Promise<unknown> | undefined = undefined;\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _resolveBranchSummaryPromise: (() => void) | undefined = undefined;\n\n\t// Retry state\n\tprivate _retryAbortController: AbortController | undefined = undefined;\n\t/** Cancellation boundary for retry/overflow policy decisions in the active agent loop. */\n\tprivate _policyDecisionAbortController: AbortController | undefined = undefined;\n\tprivate _retryAttempt = 0;\n\t/** Cancellation signal for the capability command currently executing through prompt(). */\n\tprivate _commandAbortController: AbortController | undefined = undefined;\n\t/**\n\t * Parent-session cancel fence for agent tasks (D-044 §4.2). Consumed once\n\t * per task creation through the runtime's `parentSignal` getter; replaced\n\t * after every abort/runtime rebuild so later tasks bind to a fresh signal.\n\t */\n\tprivate _agentTaskScopeAbortController = new AbortController();\n\tprivate _activeCapabilityCommand: Promise<void> | undefined;\n\tprivate _activeCompactionPromise: Promise<unknown> | undefined;\n\t/** Prevents new mutable work from entering while the session is being replaced. */\n\tprivate _reloadInProgress = false;\n\t/** Monotonic committed reload generation, distinct from disposal and bash fences. */\n\tprivate _reloadGeneration = 0;\n\t/** Generation fence for context projections that may outlive a runtime replacement. */\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _contextEpoch = 0;\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _contextTransitionAbortController = new AbortController();\n\t/** Serializes context transitions and lets reload/dispose drain them before teardown. */\n\tprivate _activeContextTransition: Promise<unknown> | undefined;\n\t/** Monotonic revision for the public context snapshot/commit facade. */\n\tprivate _contextRevision = 0;\n\t/** Serializes public context commits so expectedRevision is a real CAS fence. */\n\tprivate _contextCommitQueue: Promise<void> = Promise.resolve();\n\n\t// Bash execution state\n\tprivate readonly _bashAbortControllers = new Set<AbortController>();\n\t/** Whole bash operations, including their final session-history write. */\n\tprivate readonly _activeBashPromises = new Set<Promise<unknown>>();\n\t/** Fences mode-level bash results captured before a runtime replacement. */\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _bashEpoch = 0;\n\tprivate _pendingBashMessages: BashExecutionMessage[] = [];\n\n\tprivate _turnIndex = 0;\n\n\tprivate _resourceLoader: ResourceLoader;\n\tprivate _customTools: ToolDefinition[];\n\tprivate _deferredToolPluginIds: ReadonlySet<string>;\n\t/** Abort reason supplied to the in-flight abort(); consumed by the interruption marker. */\n\tprivate _pendingAbortReason: TurnAbortReason | undefined;\n\t/** Set when the in-flight prompt run produced an aborted terminal assistant turn. */\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _currentRunAborted = false;\n\t/** Most recent abort reason; persists after abort() returns so prompt() can report it. */\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _lastAbortReason: TurnAbortReason | undefined;\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _baseToolDefinitions: Map<string, ToolDefinition> = new Map();\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _baseToolSources: Map<string, SourceInfo> = new Map();\n\tprivate _capabilityRuntime?: CapabilityRuntime;\n\t/** Output-artifact commit listeners registered through {@link onOutputArtifactCommit}. */\n\tprivate readonly _outputArtifactCommitListeners = new Set<OutputArtifactCommitListener>();\n\t/**\n\t * Stable commit dispatcher handed to every CapabilityRuntime this session\n\t * builds; listeners registered on the session survive runtime rebuilds.\n\t */\n\tprivate readonly _dispatchOutputArtifactCommit: OutputArtifactCommitListener = (artifact) => {\n\t\tfor (const listener of [...this._outputArtifactCommitListeners]) listener(artifact);\n\t};\n\tprivate _bootstrapSkillsHandle?: CapabilityPluginHandle;\n\tprivate _bootstrapRetryHandle?: CapabilityPluginHandle;\n\tprivate _bootstrapCompactionHandle?: CapabilityPluginHandle;\n\tprivate _bootstrapBranchSummaryHandle?: CapabilityPluginHandle;\n\tprivate _bootstrapOverflowHandle?: CapabilityPluginHandle;\n\tprivate _bootstrapAgentLoopHandle?: CapabilityPluginHandle;\n\tprivate _bootstrapLifecycleHandle?: CapabilityPluginHandle;\n\tprivate _capabilityPlugins = new Map<string, CapabilityPluginHandle>();\n\tprivate _inlineCapabilityPlugins = new Map<string, { manifest: PluginManifest; factory: CapabilityPluginFactory }>();\n\t/**\n\t * 宿主装配链经 loadCapabilityPluginManifest 声明的 configOverride(按解析后\n\t * manifest 路径)。reload 重装载循环据此回放 sdk 注入的会话事实(D-082 批 1:\n\t * coding-tools 的 cwd/read/bash 等),会话生命周期内随同路径显式装载覆盖。\n\t */\n\tprivate _capabilityPluginConfigOverrides = new Map<string, PluginConfig>();\n\tprivate _isDisposingCapabilityPlugins = false;\n\t/**\n\t * 工具表变更钩子的两道门(见 _buildRuntime 的 onToolRegistryChange):\n\t * - `_toolRegistryHookReady`:构造期门。_buildRuntime 求值阶段 bootstrap 插件\n\t * 注册即触发 notify,而此时内部状态未就绪(观察回调会抛),构造完成后既有\n\t * 边界(_buildRuntime 尾部的显式 sync + refresh)已兜底,跳过不丢状态。\n\t * - `_suspendToolRegistryHookRefresh`:插件卸载恢复链的中间态挂起位。恢复过程\n\t * 会先删新注册、后恢复被替换者,中间 notify 的工具表是暂态(活跃名暂时缺\n\t * 席);该窗口内刷新会把缺席名从活动集永久剔除。装卸边界在 dispose 完成后\n\t * 自行兜底刷新。\n\t */\n\tprivate _suspendToolRegistryHookRefresh = false;\n\tprivate _toolRegistryHookReady = false;\n\tprivate _disposePromise?: Promise<void>;\n\tprivate _cwd: string;\n\tprivate _initialActiveToolNames?: string[];\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _allowedToolNames?: Set<string>;\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _excludedToolNames?: Set<string>;\n\tprivate _disabledBootstrapPlugins?: readonly string[];\n\tprivate _sessionStartEvent: SessionStartMetadata;\n\tprivate _capabilityMode: HostMode;\n\tprivate _contextStrategyName?: string;\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _retryPolicyName: string;\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _compactionPolicyName: string;\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _branchSummaryPolicyName: string;\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _overflowPolicyName: string;\n\t/** Post-run continuation strategy name; missing registrations fall back to the host candidate. */\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _runLoopStrategyName: string;\n\t/**\n\t * Internal loop-executor seam (D-043 G3); no public config, distinct from\n\t * runLoopStrategyName (a per-continuation veto policy).\n\t */\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _loopExecutor: LoopExecutor | undefined;\n\t/** The agent's construction-time prepare adapter, captured once by the loop wiring. */\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _initialPrepareNextTurn?:\n\t\t| ((\n\t\t\t\tcontext: PrepareNextTurnContext,\n\t\t\t\tsignal?: AbortSignal,\n\t\t ) => Promise<AgentLoopTurnUpdate | undefined> | AgentLoopTurnUpdate | undefined)\n\t\t| undefined;\n\tprivate _agentTaskAdapter?: AgentTaskAdapter;\n\tprivate _agentTaskResults?: {\n\t\treadonly store: DurableServiceV1;\n\t\treadonly writerId: string;\n\t};\n\tprivate _agentSessionReader?: (sessionId: string) => Promise<AgentTaskSessionViewV1 | undefined>;\n\tprivate _agentSessionLister?: () => Promise<AgentTaskSessionSummaryV1[]>;\n\tprivate _agentComposition?: AgentCompositionAPI;\n\tprivate _interactionHost?: InteractionHostV1;\n\n\tprivate _modelRuntime: ModelRuntime;\n\tprivate _modelStreamCounter = 0;\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _modelStreamState: { streamId: string; sequence: number } | undefined;\n\t/** Correlation id shared by every in-turn lifecycle dispatch of the active prompt run. */\n\tprivate _turnCorrelationId: string | undefined;\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _turnCorrelationCounter = 0;\n\n\t// Tool registry for extension getTools/setTools\n\tprivate _toolRegistry: Map<string, AgentTool> = new Map();\n\tprivate _toolDefinitions: Map<string, ToolDefinitionEntry> = new Map();\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _toolPromptSnippets: Map<string, string> = new Map();\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _toolPromptGuidelines: Map<string, string[]> = new Map();\n\n\t// Base system prompt (without extension appends) - used to apply fresh appends each turn\n\tprivate _baseSystemPrompt = \"\";\n\tprivate _baseSystemPromptOptions!: BuildSystemPromptOptions;\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _systemPromptOverride?: string;\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _orientationPrompt?: string;\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _preferenceCard?: string;\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _capabilitySkillsFilter?: (skills: Skill[]) => Skill[];\n\tprivate _hostLogger?: HostLogger;\n\tprivate _logRecordMirrorRef?: { current?: (record: LoggerRecord) => void };\n\tprivate _observabilityGetMetricsRef?: { current?: ObservabilityPlugin[\"getMetrics\"] };\n\tprivate _agentDir?: string;\n\tprivate _communication?: SubagentCommunicationWiringV1;\n\tprivate _turnContext?: {\n\t\tbackgroundDigestSink?: (line: string) => void;\n\t\tgetTurnCorrelationId?: () => string | undefined;\n\t};\n\tprivate _roleAssociations?: readonly string[];\n\tprivate _memoryStorage?: MemoryStorageComponentsV1;\n\tprivate _traceService?: TraceServiceV1;\n\n\tconstructor(config: AgentSessionConfig) {\n\t\tthis.agent = config.agent;\n\t\tthis.sessionManager = config.sessionManager;\n\t\tthis._contextRevision = this.sessionManager.getRevision().sequence;\n\t\tthis.settingsManager = config.settingsManager;\n\t\tthis._scopedModels = config.scopedModels ?? [];\n\t\tthis._resourceLoader = config.resourceLoader;\n\t\tthis._customTools = config.customTools ?? [];\n\t\tthis._deferredToolPluginIds = new Set(config.deferredToolPluginIds ?? []);\n\t\tif (this._deferredToolPluginIds.size > 0) {\n\t\t\tthis._customTools.push(\n\t\t\t\tcreateToolSearchTool({\n\t\t\t\t\tlistAllToolNames: () => Array.from(this._toolRegistry.keys()),\n\t\t\t\t\tgetToolInfo: (name) => {\n\t\t\t\t\t\tconst definition = this._toolDefinitions.get(name)?.definition;\n\t\t\t\t\t\treturn definition ? { name: definition.name, description: definition.description } : undefined;\n\t\t\t\t\t},\n\t\t\t\t\tgetActiveToolNames: () => this.getActiveToolNames(),\n\t\t\t\t\tsetActiveToolsByName: (toolNames) => this.setActiveToolsByName(toolNames),\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tthis._cwd = config.cwd;\n\t\tthis._modelRuntime = config.modelRuntime;\n\t\tthis._initialActiveToolNames = config.initialActiveToolNames;\n\t\tthis._allowedToolNames = config.allowedToolNames ? new Set(config.allowedToolNames) : undefined;\n\t\tthis._excludedToolNames = config.excludedToolNames ? new Set(config.excludedToolNames) : undefined;\n\t\tthis._disabledBootstrapPlugins = config.disabledBootstrapPlugins;\n\t\tthis._sessionStartEvent = config.sessionStartEvent ?? { reason: \"startup\" };\n\t\tthis._capabilityMode = config.capabilityMode ?? \"full-control\";\n\t\tthis._contextStrategyName = config.contextStrategyName;\n\t\tthis._retryPolicyName = config.retryPolicyName ?? DEFAULT_RETRY_POLICY_NAME;\n\t\tthis._compactionPolicyName = config.compactionPolicyName ?? DEFAULT_COMPACTION_POLICY_NAME;\n\t\tthis._branchSummaryPolicyName = config.branchSummaryPolicyName ?? DEFAULT_BRANCH_SUMMARY_POLICY_NAME;\n\t\tthis._overflowPolicyName = config.overflowPolicyName ?? DEFAULT_OVERFLOW_POLICY_NAME;\n\t\tthis._runLoopStrategyName = config.runLoopStrategyName ?? DEFAULT_RUN_LOOP_STRATEGY_NAME;\n\t\tthis._agentTaskAdapter = config.agentTaskAdapter;\n\t\tthis._agentTaskResults = config.agentTaskResults;\n\t\tthis._agentSessionReader = config.agentSessionReader;\n\t\tthis._agentSessionLister = config.agentSessionLister;\n\t\tthis._agentComposition = config.agentComposition;\n\t\tthis._interactionHost = config.interactionHost;\n\t\tthis._orientationPrompt = config.orientationPrompt;\n\t\tthis._preferenceCard = config.preferenceCard;\n\t\tthis._capabilitySkillsFilter = config.capabilitySkillsFilter;\n\t\tthis._hostLogger = config.hostLogger;\n\t\tthis._logRecordMirrorRef = config.logRecordMirrorRef;\n\t\tthis._observabilityGetMetricsRef = config.observabilityGetMetricsRef;\n\t\tthis._agentDir = config.agentDir;\n\t\tthis._communication = config.communication;\n\t\tthis._turnContext = config.turnContext;\n\t\tthis._roleAssociations = config.roleAssociations;\n\t\tthis._memoryStorage = config.memoryStorage;\n\t\tthis._traceService = config.traceService;\n\n\t\t// Always subscribe to agent events for internal handling\n\t\t// (session persistence, extensions, auto-compaction, retry logic)\n\t\tthis._unsubscribeAgent = this.agent.subscribe(this._handleAgentEvent);\n\n\t\tthis._buildRuntime({\n\t\t\tactiveToolNames: this._initialActiveToolNames,\n\t\t\tincludeAllExtensionTools: true,\n\t\t});\n\t\tthis._wireDefaultLoop();\n\t}\n\n\t/**\n\t * 当前回合的 correlation id(会话轨迹设计 §4.2):活跃 prompt 回合内所有\n\t * lifecycle 信封携带的同一 correlationId(与信封同源:loop-runner 在回合\n\t * 开始写入 `_turnCorrelationId`、回合结束清除);空闲时为 undefined。只读\n\t * 事实,供宿主适配器做回合级关联(如 observability 的 llm.request traceId)。\n\t */\n\tgetTurnCorrelationId(): string | undefined {\n\t\treturn this._turnCorrelationId;\n\t}\n\n\t/**\n\t * 宿主 digest sink 面(第 4 期轨迹闭合):把一条后台委派结算行投递为\n\t * agent.task.settled@1(父会话 sessionId 由派发助手补)。派发是非致命\n\t * fire-and-forget;dispose 后 runtime 已 revoke,助手 no-op。\n\t */\n\tdispatchAgentTaskSettled(facts: {\n\t\ttaskSessionId: string;\n\t\ttaskId: string;\n\t\tstatus: AgentTaskSettledEventDataV1[\"status\"];\n\t\treasonCode?: string;\n\t}): void {\n\t\tvoid dispatchAgentTaskSettledLifecycle(this._internal, facts);\n\t}\n\n\tget modelRuntime(): ModelRuntime {\n\t\treturn this._modelRuntime;\n\t}\n\n\t/** Internal facade passed to the agent-session-* submodule functions. */\n\tprivate get _internal(): AgentSessionInternals {\n\t\treturn this as unknown as AgentSessionInternals;\n\t}\n\n\t/**\n\t * Wire the default main loop onto the Agent instance.\n\t *\n\t * The four hook positions are composed from the runtime's loop-hook chains.\n\t * Chains are read at execution time, so extension reload swaps in the new\n\t * runtime without reinstalling the wiring. The legacy extension gate and the\n\t * agent's construction-time context transform stay as chain heads (host\n\t * wiring, not plugin capabilities); the default links come from the\n\t * bootstrap agent-loop plugin and third-party links chain after them in\n\t * registration order.\n\t */\n\tprivate _wireDefaultLoop(): void {\n\t\twireDefaultLoop(this._internal);\n\t}\n\n\t/** Session-bound host state the default loop links read at execution time. */\n\tprivate _createLoopWiring(): AgentLoopWiringV1 {\n\t\treturn createLoopWiring(this._internal);\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _compactBeforeNextAssistantResponse(context: AgentContext, signal?: AbortSignal): Promise<AgentContext> {\n\t\treturn compactBeforeNextAssistantResponse(this._internal, context, signal);\n\t}\n\n\t// =========================================================================\n\t// Event Subscription\n\t// =========================================================================\n\n\t/** Emit an event to all listeners */\n\tprivate _emit(event: AgentSessionEvent): void {\n\t\tfor (const l of this._eventListeners) {\n\t\t\tl(event);\n\t\t}\n\t}\n\n\tprivate _emitQueueUpdate(): void {\n\t\tthis._emit({\n\t\t\ttype: \"queue_update\",\n\t\t\tsteering: [...this._steeringMessages],\n\t\t\tfollowUp: [...this._followUpMessages],\n\t\t});\n\t}\n\n\tprivate _getIdleWaitPromise(): Promise<void> {\n\t\tif (!this._idleWaitPromise) {\n\t\t\tthis._idleWaitPromise = new Promise((resolve) => {\n\t\t\t\tthis._resolveIdleWait = resolve;\n\t\t\t});\n\t\t}\n\t\treturn this._idleWaitPromise;\n\t}\n\n\tprivate _resolveIdleWaitIfIdle(): void {\n\t\tif (!this.isIdle || !this._resolveIdleWait) {\n\t\t\treturn;\n\t\t}\n\t\tconst resolve = this._resolveIdleWait;\n\t\tthis._idleWaitPromise = undefined;\n\t\tthis._resolveIdleWait = undefined;\n\t\tresolve();\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate async _emitAgentSettled(): Promise<void> {\n\t\tthis._isAgentRunActive = false;\n\t\ttry {\n\t\t\tthis._emit({ type: \"agent_settled\" });\n\t\t\tawait dispatchAgentSettledLifecycle(this._internal);\n\t\t} finally {\n\t\t\tthis._resolveIdleWaitIfIdle();\n\t\t}\n\t}\n\n\t// Track last assistant message for auto-compaction check\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _lastAssistantMessage: AssistantMessage | undefined = undefined;\n\t// The agent_end event and post-run handler both need the retry decision. Cache it\n\t// so policy plugins are evaluated once per assistant turn (and mock queues remain\n\t// strict/deterministic).\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _pendingRetryDecision:\n\t\t| { message: AssistantMessage; decision: Awaited<ReturnType<CapabilityRuntime[\"decideRetry\"]>> }\n\t\t| undefined = undefined;\n\n\t/** Internal handler for agent events - shared by subscribe and reconnect */\n\tprivate _handleAgentEvent = async (event: AgentEvent): Promise<void> => {\n\t\tif (event.type === \"message_start\" && event.message.role === \"assistant\") {\n\t\t\tthis._modelStreamState = {\n\t\t\t\tstreamId: `model-stream:${++this._modelStreamCounter}`,\n\t\t\t\tsequence: 0,\n\t\t\t};\n\t\t\tawait this._dispatchModelStreamLifecycle(event.message, \"start\", \"raw\");\n\t\t}\n\t\t// When a user or custom message starts, check if it's from either queue and\n\t\t// remove it BEFORE emitting. This ensures the UI sees the updated queue state.\n\t\t// Queued custom messages (sendCustomMessage deliverAs steer/followUp) are\n\t\t// registered in the copy arrays under their contentText text and delivered\n\t\t// with role \"custom\", so they must go through the same copy-removal path\n\t\t// (D-078 fix).\n\t\tif (event.type === \"message_start\" && (event.message.role === \"user\" || event.message.role === \"custom\")) {\n\t\t\tif (event.message.role === \"user\") {\n\t\t\t\tthis._overflowRecoveryAttempted = false;\n\t\t\t\tthis._overflowTrimStage = 0;\n\t\t\t}\n\t\t\t// Custom queue entries register their copy text via _queuedCopyText\n\t\t\t// (placeholder for textless content); match removal with the same\n\t\t\t// expression so both sides stay symmetric.\n\t\t\tconst messageText =\n\t\t\t\tevent.message.role === \"custom\"\n\t\t\t\t\t? this._queuedCopyText(event.message.content)\n\t\t\t\t\t: contentText(event.message.content, \"\");\n\t\t\tif (messageText) {\n\t\t\t\t// Check steering queue first\n\t\t\t\tconst steeringIndex = this._steeringMessages.indexOf(messageText);\n\t\t\t\tif (steeringIndex !== -1) {\n\t\t\t\t\tthis._steeringMessages.splice(steeringIndex, 1);\n\t\t\t\t\tthis._emitQueueUpdate();\n\t\t\t\t} else {\n\t\t\t\t\t// Check follow-up queue\n\t\t\t\t\tconst followUpIndex = this._followUpMessages.indexOf(messageText);\n\t\t\t\t\tif (followUpIndex !== -1) {\n\t\t\t\t\t\tthis._followUpMessages.splice(followUpIndex, 1);\n\t\t\t\t\t\tthis._emitQueueUpdate();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tawait this._emitLifecycleEvents(event);\n\t\tif (event.type === \"message_update\" && event.message.role === \"assistant\") {\n\t\t\tawait this._dispatchModelStreamLifecycle(event.message, event.assistantMessageEvent.type, \"candidate\");\n\t\t}\n\n\t\t// Notify all listeners\n\t\tthis._emit(\n\t\t\tevent.type === \"agent_end\"\n\t\t\t\t? {\n\t\t\t\t\t\t...event,\n\t\t\t\t\t\twillRetry: await this._willRetryAfterAgentEnd(event, this._policyDecisionAbortController?.signal),\n\t\t\t\t\t}\n\t\t\t\t: event,\n\t\t);\n\n\t\t// Handle session persistence\n\t\tif (event.type === \"message_end\") {\n\t\t\t// Check if this is a custom message from extensions\n\t\t\tif (event.message.role === \"custom\") {\n\t\t\t\t// Persist as CustomMessageEntry\n\t\t\t\tthis.sessionManager.appendCustomMessageEntry(\n\t\t\t\t\tevent.message.customType,\n\t\t\t\t\tevent.message.content,\n\t\t\t\t\tevent.message.display,\n\t\t\t\t\tevent.message.details,\n\t\t\t\t);\n\t\t\t} else if (\n\t\t\t\tevent.message.role === \"user\" ||\n\t\t\t\tevent.message.role === \"assistant\" ||\n\t\t\t\tevent.message.role === \"toolResult\"\n\t\t\t) {\n\t\t\t\t// Regular LLM message - persist as SessionMessageEntry\n\t\t\t\tconst entryId = this.sessionManager.appendMessage(event.message);\n\t\t\t\tif (event.message.role === \"assistant\") {\n\t\t\t\t\tif (event.message.stopReason === \"aborted\") {\n\t\t\t\t\t\tthis._currentRunAborted = true;\n\t\t\t\t\t}\n\t\t\t\t\tawait this._dispatchModelStreamLifecycle(\n\t\t\t\t\t\tevent.message,\n\t\t\t\t\t\tevent.message.stopReason === \"error\" || event.message.stopReason === \"aborted\" ? \"error\" : \"done\",\n\t\t\t\t\t\t\"committed\",\n\t\t\t\t\t);\n\t\t\t\t\tthis._modelStreamState = undefined;\n\t\t\t\t\tawait this._dispatchModelResponseLifecycle(event.message, entryId);\n\t\t\t\t} else if (event.message.role === \"toolResult\") {\n\t\t\t\t\tawait this._dispatchToolCommitLifecycle(event.message, entryId);\n\t\t\t\t\tawait this._dispatchToolResultLifecycle(event.message, entryId);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Other message types (bashExecution, compactionSummary, branchSummary) are persisted elsewhere\n\n\t\t\t// Track assistant message for auto-compaction (checked on agent_end)\n\t\t\tif (event.message.role === \"assistant\") {\n\t\t\t\tthis._lastAssistantMessage = event.message;\n\n\t\t\t\tconst assistantMsg = event.message as AssistantMessage;\n\t\t\t\tif (assistantMsg.stopReason !== \"error\" && assistantMsg.stopReason !== \"length\") {\n\t\t\t\t\tthis._overflowRecoveryAttempted = false;\n\t\t\t\t\tthis._overflowTrimStage = 0;\n\t\t\t\t}\n\n\t\t\t\t// Reset retry counter immediately on successful assistant response\n\t\t\t\t// This prevents accumulation across multiple LLM calls within a turn\n\t\t\t\tif (assistantMsg.stopReason !== \"error\" && this._retryAttempt > 0) {\n\t\t\t\t\tthis._emit({\n\t\t\t\t\t\ttype: \"auto_retry_end\",\n\t\t\t\t\t\tsuccess: true,\n\t\t\t\t\t\tattempt: this._retryAttempt,\n\t\t\t\t\t});\n\t\t\t\t\tthis._retryAttempt = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// A turn ends after its assistant message and every tool result has been appended,\n\t\t// so this is the first point in the run where a context-only custom message can be\n\t\t// inserted without landing between a tool call and its result. Flushing after the\n\t\t// extension and listener dispatch above also picks up messages that turn_end\n\t\t// handlers queued.\n\t\tif (event.type === \"turn_end\") {\n\t\t\tthis._flushPendingCustomMessages();\n\t\t}\n\t};\n\n\tprivate async _dispatchModelStreamLifecycle(\n\t\tmessage: AgentMessage,\n\t\teventName: ModelStreamEventDataV1[\"event\"],\n\t\tphase: ModelStreamEventDataV1[\"phase\"],\n\t): Promise<void> {\n\t\tawait dispatchModelStreamLifecycle(this._internal, message, eventName, phase);\n\t}\n\n\tprivate _willRetryAfterAgentEnd(\n\t\tevent: Extract<AgentEvent, { type: \"agent_end\" }>,\n\t\tsignal?: AbortSignal,\n\t): Promise<boolean> {\n\t\treturn willRetryAfterAgentEnd(this._internal, event, signal);\n\t}\n\n\t/** Find the last assistant message in agent state (including aborted ones) */\n\tprivate _findLastAssistantMessage(): AssistantMessage | undefined {\n\t\tconst messages = this.agent.state.messages;\n\t\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\t\tconst msg = messages[i];\n\t\t\tif (msg.role === \"assistant\") {\n\t\t\t\treturn msg as AssistantMessage;\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t/** Deliver capability lifecycle events derived from one agent event. */\n\tprivate async _emitLifecycleEvents(event: AgentEvent): Promise<void> {\n\t\tif (event.type === \"agent_start\") {\n\t\t\tthis._turnIndex = 0;\n\t\t\tawait dispatchAgentStartLifecycle(this._internal);\n\t\t} else if (event.type === \"agent_end\") {\n\t\t\tawait dispatchAgentEndLifecycle(this._internal);\n\t\t} else if (event.type === \"turn_start\") {\n\t\t\tawait dispatchTurnStartLifecycle(this._internal, this._turnIndex);\n\t\t} else if (event.type === \"turn_end\") {\n\t\t\tthis._turnIndex++;\n\t\t\t// turn 级 outcome 判定(复审 M2):取 turn_end 事件自带 assistant message\n\t\t\t// 的 stopReason(provider 层 signal.aborted 优先返回 \"aborted\",取值互斥\n\t\t\t// 精确)。禁用 run 级 `_currentRunAborted`——abort 后 drain 排队消息的\n\t\t\t// 正常回合会被误标;completed 回合不传,缺席省键。\n\t\t\tconst turnMessage = event.message;\n\t\t\tconst outcome =\n\t\t\t\tturnMessage.role === \"assistant\" &&\n\t\t\t\t(turnMessage.stopReason === \"aborted\" || turnMessage.stopReason === \"error\")\n\t\t\t\t\t? turnMessage.stopReason\n\t\t\t\t\t: undefined;\n\t\t\tawait dispatchTurnEndLifecycle(this._internal, this._turnIndex, this.agent.state.messages.length, outcome);\n\t\t} else if (event.type === \"message_start\") {\n\t\t\tawait dispatchMessageStartLifecycle(this._internal, event.message.role);\n\t\t} else if (event.type === \"message_end\") {\n\t\t\tawait dispatchMessageEndLifecycle(this._internal, event.message.role);\n\t\t} else if (event.type === \"tool_execution_start\") {\n\t\t\tawait dispatchToolExecutionStartLifecycle(this._internal, event.toolCallId, event.toolName);\n\t\t}\n\t}\n\n\t/**\n\t * Subscribe to agent events.\n\t * Session persistence is handled internally (saves messages on message_end).\n\t * Multiple listeners can be added. Returns unsubscribe function for this listener.\n\t */\n\tsubscribe(listener: AgentSessionEventListener): () => void {\n\t\tthis._eventListeners.push(listener);\n\n\t\t// Return unsubscribe function for this specific listener\n\t\treturn () => {\n\t\t\tconst index = this._eventListeners.indexOf(listener);\n\t\t\tif (index !== -1) {\n\t\t\t\tthis._eventListeners.splice(index, 1);\n\t\t\t}\n\t\t};\n\t}\n\n\t/** Disconnect from agent events during disposal. */\n\tprivate _disconnectFromAgent(): void {\n\t\tif (this._unsubscribeAgent) {\n\t\t\tthis._unsubscribeAgent();\n\t\t\tthis._unsubscribeAgent = undefined;\n\t\t}\n\t}\n\n\t/**\n\t * Remove all listeners and disconnect from agent.\n\t * Call this when completely done with the session.\n\t */\n\tdispose(): Promise<void> {\n\t\tif (this._disposePromise) return this._disposePromise;\n\t\tthis._disposePromise = (async () => {\n\t\t\tconst errors: unknown[] = [];\n\t\t\tthis._beginContextTransitionFence();\n\t\t\t// Fence mode-level and legacy extension bash work before async cleanup.\n\t\t\tthis._bashEpoch += 1;\n\t\t\tfor (const abort of [\n\t\t\t\t() => this._abortActiveCapabilityCommand(\"session disposed\"),\n\t\t\t\t() => this.abortRetry(),\n\t\t\t\t() => this.abortCompaction(),\n\t\t\t\t() => this.abortBranchSummary(),\n\t\t\t\t() => this.abortBash(),\n\t\t\t\t() => this._agentTaskScopeAbortController.abort(\"session disposed\"),\n\t\t\t\t() => this.agent.abort(),\n\t\t\t]) {\n\t\t\t\ttry {\n\t\t\t\t\tawait abort();\n\t\t\t\t} catch (error) {\n\t\t\t\t\terrors.push(error);\n\t\t\t\t}\n\t\t\t}\n\t\t\tawait Promise.allSettled(\n\t\t\t\t[this._activeContextTransition, ...this._activeBashPromises, this.waitForIdle()].filter(\n\t\t\t\t\t(operation): operation is Promise<unknown> => operation !== undefined,\n\t\t\t\t),\n\t\t\t);\n\n\t\t\tthis._disconnectFromAgent();\n\t\t\tthis._eventListeners = [];\n\n\t\t\t// 会话终态(第 4 期轨迹闭合):capability plugins dispose 之前派发\n\t\t\t// session.end@1——runtime 仍存活、observability 插件此时尚未 dispose,\n\t\t\t// 能写入最后一行轨迹。dispose 幂等(_disposePromise 重入即返回同一\n\t\t\t// promise),派发天然只发生一次;reload 不经过 dispose,不派发。\n\t\t\tawait dispatchSessionEndLifecycle(this._internal);\n\n\t\t\tconst disposals: Array<() => void | Promise<void>> = [\n\t\t\t\t() => this._disposeCapabilityPlugins(),\n\t\t\t\t() => this._capabilityRuntime?.disposeAll(),\n\t\t\t\t() => {\n\t\t\t\t\tconst adapter = this._agentTaskAdapter;\n\t\t\t\t\treturn adapter?.dispose?.();\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tconst interactionHost = this._interactionHost;\n\t\t\t\t\treturn interactionHost?.dispose?.();\n\t\t\t\t},\n\t\t\t\t() => this._bootstrapSkillsHandle?.dispose(),\n\t\t\t\t() => this._bootstrapRetryHandle?.dispose(),\n\t\t\t\t() => this._bootstrapCompactionHandle?.dispose(),\n\t\t\t\t() => this._bootstrapOverflowHandle?.dispose(),\n\t\t\t\t() => this._bootstrapBranchSummaryHandle?.dispose(),\n\t\t\t\t() => this._bootstrapAgentLoopHandle?.dispose(),\n\t\t\t\t() => this._bootstrapLifecycleHandle?.dispose(),\n\t\t\t];\n\t\t\tfor (const dispose of disposals) {\n\t\t\t\ttry {\n\t\t\t\t\tawait dispose();\n\t\t\t\t} catch (error) {\n\t\t\t\t\terrors.push(error);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._capabilityRuntime?.revokeAllAPIs();\n\t\t\tthis._capabilityPlugins.clear();\n\t\t\tthis._inlineCapabilityPlugins.clear();\n\t\t\tthis._bootstrapSkillsHandle = undefined;\n\t\t\tthis._bootstrapRetryHandle = undefined;\n\t\t\tthis._bootstrapCompactionHandle = undefined;\n\t\t\tthis._bootstrapOverflowHandle = undefined;\n\t\t\tthis._bootstrapBranchSummaryHandle = undefined;\n\t\t\tthis._bootstrapAgentLoopHandle = undefined;\n\t\t\tthis._bootstrapLifecycleHandle = undefined;\n\t\t\tcleanupSessionResources(this.sessionId);\n\n\t\t\tif (errors.length === 1) throw errors[0];\n\t\t\tif (errors.length > 1) throw new AggregateError(errors, `Agent session disposal failed: ${this.sessionId}`);\n\t\t})();\n\t\treturn this._disposePromise;\n\t}\n\n\t// =========================================================================\n\t// Read-only State Access\n\t// =========================================================================\n\n\t/** Full agent state */\n\tget state(): AgentState {\n\t\treturn this.agent.state;\n\t}\n\n\t/** Current model (may be undefined if not yet selected) */\n\tget model(): Model<Api> | undefined {\n\t\treturn this.agent.state.model;\n\t}\n\n\t/** Current thinking level */\n\tget thinkingLevel(): ThinkingLevel {\n\t\treturn this.agent.state.thinkingLevel;\n\t}\n\n\t/** Whether the session is currently processing an agent run or post-run continuation. */\n\tget isStreaming(): boolean {\n\t\treturn this._isAgentRunActive;\n\t}\n\n\t/** Whether the session has no active agent run, retry, compaction, branch summarization, or queued continuation. */\n\tget isIdle(): boolean {\n\t\treturn !this._isAgentRunActive && !this.isCompacting;\n\t}\n\n\t/** Current effective system prompt (includes any per-turn extension modifications) */\n\tget systemPrompt(): string {\n\t\treturn this.agent.state.systemPrompt;\n\t}\n\n\t/** Current retry attempt (0 if not retrying) */\n\tget retryAttempt(): number {\n\t\treturn this._retryAttempt;\n\t}\n\n\t/**\n\t * Get the names of currently active tools.\n\t * Returns the names of tools currently set on the agent.\n\t */\n\tgetActiveToolNames(): string[] {\n\t\treturn this.agent.state.tools.map((t) => t.name);\n\t}\n\n\t/** Public capability runtime for external orchestration and plugin composition. */\n\tgetCapabilityRuntime(): CapabilityRuntime {\n\t\tif (!this._capabilityRuntime) throw new Error(t(\"Capability runtime is not available\"));\n\t\treturn this._capabilityRuntime;\n\t}\n\n\t/**\n\t * Observes every output artifact committed through this session's capability\n\t * runtime. Host adapters mirror the payload into durable storage; the runtime\n\t * itself carries no durable dependency. The registration survives runtime\n\t * rebuilds (reload) because the session owns the dispatcher. Returns an\n\t * unsubscribe function.\n\t */\n\tonOutputArtifactCommit(listener: OutputArtifactCommitListener): () => void {\n\t\tthis._outputArtifactCommitListeners.add(listener);\n\t\treturn () => {\n\t\t\tthis._outputArtifactCommitListeners.delete(listener);\n\t\t};\n\t}\n\n\tget isDisposed(): boolean {\n\t\treturn this._disposePromise !== undefined;\n\t}\n\n\t/** Public session facade for host adapters. It never exposes SessionManager internals. */\n\tgetSessionAPI(): SessionAPI {\n\t\treturn {\n\t\t\tgetSessionId: () => this.sessionManager.getSessionId(),\n\t\t\tgetRevision: () => this.sessionManager.getRevision(),\n\t\t\tregisterEntryProjection: (projection) =>\n\t\t\t\t// 公共投影契约是松类型(unknown 列表);此处是宿主信任边界,\n\t\t\t\t// 投影实现错误会在上下文投影时显式失败,不在此静默防御。\n\t\t\t\tthis.sessionManager.registerEntryProjection(projection as unknown as SessionEntryProjection),\n\t\t\tgetContextSnapshot: <TValue = unknown>() =>\n\t\t\t\t({\n\t\t\t\t\tversion: 1,\n\t\t\t\t\trevision: this._contextRevision,\n\t\t\t\t\tvalue: detachedSessionSnapshot(this.agent.state.messages) as TValue,\n\t\t\t\t}) as CanonicalAgentContextSnapshotV1<TValue>,\n\t\t\tcommitContext: async <TValue = unknown>(\n\t\t\t\trequest: CanonicalAgentContextCommitRequestV1<TValue>,\n\t\t\t): Promise<CanonicalAgentContextCommitResultV1<TValue>> => {\n\t\t\t\tconst commit = this._contextCommitQueue.then(async () => {\n\t\t\t\t\tif (request.signal?.aborted) throw new Error(t(\"Context commit cancelled\"));\n\t\t\t\t\tconst currentRevision = this._contextRevision;\n\t\t\t\t\tif (request.operationId.trim() === \"\") throw new Error(t(\"Context commit operationId is required\"));\n\t\t\t\t\tif (request.expectedRevision !== currentRevision) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\tt(\"Context revision conflict: expected {expected}, current {current}\", {\n\t\t\t\t\t\t\t\texpected: request.expectedRevision,\n\t\t\t\t\t\t\t\tcurrent: currentRevision,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (!Array.isArray(request.value)) throw new Error(t(\"Session context commit requires a message array\"));\n\t\t\t\t\tawait this.replaceContext(request.value as AgentMessage[]);\n\t\t\t\t\tif (request.signal?.aborted) throw new Error(t(\"Context commit cancelled\"));\n\t\t\t\t\treturn {\n\t\t\t\t\t\tversion: 1 as const,\n\t\t\t\t\t\tstatus: \"committed\" as const,\n\t\t\t\t\t\trevision: this._contextRevision,\n\t\t\t\t\t\tvalue: detachedSessionSnapshot(this.agent.state.messages) as TValue,\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\tthis._contextCommitQueue = commit.then(\n\t\t\t\t\t() => undefined,\n\t\t\t\t\t() => undefined,\n\t\t\t\t);\n\t\t\t\treturn commit;\n\t\t\t},\n\t\t\tgetMessages: () => detachedSessionSnapshot(this.agent.state.messages),\n\t\t\tisIdle: () => this.isIdle,\n\t\t\tprompt: (text) => this.prompt(text),\n\t\t\t// SessionAPI 契约固定 Promise<void>;disposition(\"queued\"/\"handled\")不外泄到该面。\n\t\t\tsteer: (text) => this.steer(text).then(() => undefined),\n\t\t\tqueueFollowUp: (text) => this.sendUserMessage(text, { deliverAs: \"followUp\" }),\n\t\t\tabort: () => this.abort(),\n\t\t\twaitForIdle: () => this.waitForIdle(),\n\t\t\tgetActiveTools: () => this.getActiveToolNames(),\n\t\t\t// readonly 会话不暴露能力面变更口(只读就是只读:能在只读会话上改工具面的\n\t\t\t// 消费方等于拿到了放大权限的口子)。成员缺席即不可用,调用方按可选处理。\n\t\t\t...(this._capabilityMode === \"readonly\"\n\t\t\t\t? {}\n\t\t\t\t: { setActiveTools: (toolNames: string[]) => this.setActiveToolsByName(toolNames) }),\n\t\t\tcompact: (customInstructions) => this.compact(customInstructions),\n\t\t\tnavigateTree: (targetId, options) => this.navigateTree(targetId, options),\n\t\t\tappendEntry: (customType, data) => {\n\t\t\t\tconst entryId = this.sessionManager.appendCustomEntry(\n\t\t\t\t\tcustomType,\n\t\t\t\t\tdata === undefined ? undefined : detachedSessionSnapshot(data),\n\t\t\t\t);\n\t\t\t\tconst entry = this.sessionManager.getEntry(entryId);\n\t\t\t\tif (entry) {\n\t\t\t\t\tthis._emit({ type: \"entry_appended\", entry });\n\t\t\t\t\tvoid dispatchSessionEntryAppendedLifecycle(this._internal, entryId, entry.type);\n\t\t\t\t}\n\t\t\t\treturn entryId;\n\t\t\t},\n\t\t\tsetSessionName: (name) => this.setSessionName(name),\n\t\t\tgetSessionName: () => this.sessionManager.getSessionName(),\n\t\t\tsetLabel: (entryId, label) => this.sessionManager.appendLabelChange(entryId, label),\n\t\t\tgetLabel: (entryId) => this.sessionManager.getLabel(entryId),\n\t\t\tgetAllTools: () => definitionSnapshot(this.getAllTools()),\n\t\t\tgetCommands: () => collectCommandInfos(this._internal),\n\t\t\tgetModel: () => (this.model ? detachedSnapshot(modelFactsView(this.model)) : undefined),\n\t\t\tgetScopedModels: () =>\n\t\t\t\tdetachedSnapshot(\n\t\t\t\t\tthis.scopedModels.map((entry) => ({\n\t\t\t\t\t\tmodel: modelFactsView(entry.model),\n\t\t\t\t\t\t...(entry.thinkingLevel === undefined ? {} : { thinkingLevel: entry.thinkingLevel }),\n\t\t\t\t\t})),\n\t\t\t\t),\n\t\t\tgetThinkingLevel: () => this.thinkingLevel,\n\t\t\t...(this._capabilityMode === \"readonly\" ? {} : { setThinkingLevel: (level) => this.setThinkingLevel(level) }),\n\t\t\t...(this._capabilityMode === \"readonly\"\n\t\t\t\t? {}\n\t\t\t\t: {\n\t\t\t\t\t\tsetModel: async (modelId: string) => {\n\t\t\t\t\t\t\tconst scoped = this.scopedModels.find((entry) => entry.model.id === modelId);\n\t\t\t\t\t\t\tif (!scoped) return false;\n\t\t\t\t\t\t\tif (!this._modelRuntime.hasConfiguredAuth(scoped.model.provider)) return false;\n\t\t\t\t\t\t\tawait this.setModel(scoped.model);\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\tgetSystemPrompt: () => this.systemPrompt,\n\t\t\tgetSystemPromptOptions: () => detachedSnapshot(this._baseSystemPromptOptions),\n\t\t\tgetContextUsage: () => getContextUsage(this._internal),\n\t\t\tsendMessage: (message, options) => this.sendCustomMessage(message, options),\n\t\t\tgetBranchEntries: () =>\n\t\t\t\tdetachedSessionSnapshot(\n\t\t\t\t\tthis.sessionManager.getBranch().map((entry) => ({\n\t\t\t\t\t\tid: entry.id,\n\t\t\t\t\t\tparentId: entry.parentId,\n\t\t\t\t\t\ttimestamp: entry.timestamp,\n\t\t\t\t\t\ttype: entry.type,\n\t\t\t\t\t\t...(entry.type === \"message\"\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\tmessage: {\n\t\t\t\t\t\t\t\t\t\trole: entry.message.role,\n\t\t\t\t\t\t\t\t\t\t...(\"content\" in entry.message ? { content: entry.message.content } : {}),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t...(entry.type === \"custom\" ? { customType: entry.customType, data: entry.data } : {}),\n\t\t\t\t\t})),\n\t\t\t\t),\n\t\t\texportArtifact: (request) => {\n\t\t\t\tif (request.format !== \"jsonl\")\n\t\t\t\t\tthrow new Error(t(\"Unsupported session export format: {format}\", { format: request.format }));\n\t\t\t\treturn createSessionJsonlArtifact(this.sessionManager);\n\t\t\t},\n\t\t};\n\t}\n\n\t/** Return all currently loaded capability plugins without exposing private session state. */\n\tgetCapabilityPlugins(): readonly CapabilityPluginHandle[] {\n\t\tconst handles = Array.from(this._capabilityPlugins.values());\n\t\tfor (const handle of [\n\t\t\tthis._bootstrapSkillsHandle,\n\t\t\tthis._bootstrapRetryHandle,\n\t\t\tthis._bootstrapCompactionHandle,\n\t\t\tthis._bootstrapOverflowHandle,\n\t\t\tthis._bootstrapBranchSummaryHandle,\n\t\t\tthis._bootstrapLifecycleHandle,\n\t\t]) {\n\t\t\tif (handle) handles.push(handle);\n\t\t}\n\t\treturn handles;\n\t}\n\n\t/** Name of the externally selected context strategy, when configured. */\n\tget contextStrategyName(): string | undefined {\n\t\treturn this._contextStrategyName;\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _requireContextStrategy(): { runtime: CapabilityRuntime; name: string } {\n\t\treturn requireContextStrategy(this._internal);\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _requireIdleContextOperation(operation: string): void {\n\t\trequireIdleContextOperation(this._internal, operation);\n\t}\n\n\tprivate _beginContextTransitionFence(): void {\n\t\tbeginContextTransitionFence(this._internal);\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _isContextTransitionCurrent(epoch: number, allowReload: boolean): boolean {\n\t\treturn isContextTransitionCurrent(this._internal, epoch, allowReload);\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _assertContextTransitionCurrent(epoch: number, allowReload: boolean): void {\n\t\tassertContextTransitionCurrent(this._internal, epoch, allowReload);\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _enqueueContextTransition<T>(\n\t\toperation: (epoch: number, signal: AbortSignal) => Promise<T>,\n\t\toptions?: { signal?: AbortSignal; allowReload?: boolean },\n\t): Promise<T> {\n\t\treturn enqueueContextTransition(this._internal, operation, options);\n\t}\n\n\tprivate _copyContextMessages(value: unknown, strategyName: string, direction: \"input\" | \"result\"): AgentMessage[] {\n\t\treturn copyContextMessages(value, strategyName, direction);\n\t}\n\n\t/** Apply a persisted-context transition, including strategy-owned projections. */\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate async _applyContextTransition(\n\t\tmessages: AgentMessage[],\n\t\treason: ContextOperationOptions[\"reason\"] = \"session_replace\",\n\t\tsignal?: AbortSignal,\n\t\toptions?: { allowReload?: boolean },\n\t): Promise<AgentMessage[]> {\n\t\treturn applyContextTransition(this._internal, messages, reason, signal, options);\n\t}\n\n\t/** Notify observers only after the runtime context projection has been committed. */\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate async _dispatchContextReplacedLifecycle(\n\t\treason: NonNullable<ContextOperationOptions[\"reason\"]>,\n\t\tstrategyName?: string,\n\t): Promise<void> {\n\t\tawait dispatchContextReplacedLifecycle(this._internal, reason, strategyName);\n\t}\n\n\t/** Deliver the finalized assistant response only after its session entry is committed. */\n\tprivate async _dispatchModelResponseLifecycle(message: AssistantMessage, entryId: string): Promise<void> {\n\t\tawait dispatchModelResponseLifecycle(this._internal, message, entryId);\n\t}\n\n\t/** Deliver the finalized tool result only after its session entry is committed. */\n\tprivate async _dispatchToolCommitLifecycle(message: ToolResultMessage, entryId: string): Promise<void> {\n\t\tawait dispatchToolCommitLifecycle(this._internal, message, entryId);\n\t}\n\n\t/** Deliver the finalized tool result only after its session entry is committed. */\n\tprivate async _dispatchToolResultLifecycle(message: ToolResultMessage, entryId: string): Promise<void> {\n\t\tawait dispatchToolResultLifecycle(this._internal, message, entryId);\n\t}\n\n\t/** Notify the rebuilt runtime only after all reload work has committed. */\n\tprivate async _dispatchSessionReloadLifecycle(generation: number): Promise<void> {\n\t\tawait dispatchSessionReloadLifecycle(this._internal, generation);\n\t}\n\n\t/** Snapshot the current session messages with the configured context strategy. */\n\tasync snapshotContext(): Promise<unknown> {\n\t\treturn snapshotContext(this._internal);\n\t}\n\n\t/** Restore session messages from a strategy snapshot. */\n\tasync restoreContext(snapshot: unknown): Promise<AgentMessage[]> {\n\t\treturn restoreContext(this._internal, snapshot);\n\t}\n\n\t/** Replace session messages through the configured context strategy. */\n\tasync replaceContext(context: AgentMessage[]): Promise<AgentMessage[]> {\n\t\treturn replaceContext(this._internal, context);\n\t}\n\n\tprivate _restoreContextTransition(\n\t\tsnapshot: unknown,\n\t\treason: NonNullable<ContextOperationOptions[\"reason\"]>,\n\t\toptions?: { allowReload?: boolean },\n\t): Promise<AgentMessage[]> {\n\t\treturn restoreContextTransition(this._internal, snapshot, reason, options);\n\t}\n\n\tprivate async _trackCapabilityPlugin(\n\t\tkey: string,\n\t\tloaded: CapabilityPluginHandle,\n\t\tpreviousToolNames: ReadonlySet<string>,\n\t): Promise<CapabilityPluginHandle> {\n\t\ttry {\n\t\t\tthis._validateCapabilitySkillConflicts();\n\t\t} catch (error) {\n\t\t\tawait loaded.dispose();\n\t\t\tthrow error;\n\t\t}\n\t\tlet disposed = false;\n\t\tconst handle: CapabilityPluginHandle = {\n\t\t\tmanifest: loaded.manifest,\n\t\t\tapi: loaded.api,\n\t\t\tready: loaded.ready,\n\t\t\tdispose: async () => {\n\t\t\t\tif (disposed) return;\n\t\t\t\tdisposed = true;\n\t\t\t\t// 卸载恢复链的中间 notify 是暂态(活跃名暂时缺席),挂起钩子内的可见\n\t\t\t\t// 注册表刷新;恢复完成后在此按装卸边界语义兜底刷新一次。\n\t\t\t\tthis._suspendToolRegistryHookRefresh = true;\n\t\t\t\ttry {\n\t\t\t\t\tawait loaded.dispose();\n\t\t\t\t} finally {\n\t\t\t\t\tthis._suspendToolRegistryHookRefresh = false;\n\t\t\t\t}\n\t\t\t\tthis._capabilityPlugins.delete(key);\n\t\t\t\tthis._inlineCapabilityPlugins.delete(key);\n\t\t\t\tif (!this._isDisposingCapabilityPlugins) {\n\t\t\t\t\tthis._syncCapabilityTools();\n\t\t\t\t\tthis._refreshToolRegistry({ activeToolNames: this.getActiveToolNames() });\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t\tthis._capabilityPlugins.set(key, handle);\n\t\tthis._syncCapabilityTools();\n\t\tconst newToolNames = this._capabilityRuntime!.listTools()\n\t\t\t// First-party domain tools (the S4 split moved every capability to\n\t\t\t// `agent-forge.plugin.*`; `agent-forge.builtin.*` is the retired\n\t\t\t// embedded id era) join the active surface under the same readonly\n\t\t\t// narrowing as runtime-built tools: non-readonlySafe declarations\n\t\t\t// stay off a readonly session (宪法 §6). Third-party plugins decide\n\t\t\t// their own mode semantics.\n\t\t\t.filter(\n\t\t\t\t(tool) =>\n\t\t\t\t\tthis._capabilityMode !== \"readonly\" ||\n\t\t\t\t\t(!tool.source.startsWith(\"agent-forge.builtin.\") && !tool.source.startsWith(\"agent-forge.plugin.\")) ||\n\t\t\t\t\ttool.readonlySafe === true,\n\t\t\t)\n\t\t\t// Deferred plugin tools register but stay out of the active set on\n\t\t\t// this explicit-activation path too, until tool_search or\n\t\t\t// setActiveTools names them (same contract as the default path in\n\t\t\t// agent-session-tools.ts).\n\t\t\t.filter((tool) => !this._deferredToolPluginIds.has(tool.source))\n\t\t\t.map((tool) => tool.name)\n\t\t\t.filter((name) => !previousToolNames.has(name));\n\t\tthis._refreshToolRegistry({\n\t\t\tactiveToolNames: [...this.getActiveToolNames(), ...newToolNames],\n\t\t});\n\t\treturn handle;\n\t}\n\n\t/** Load an external capability manifest through the same runtime as first-party plugins. */\n\tasync loadCapabilityPluginManifest(\n\t\tmanifestPath: string,\n\t\toptions?: { readonly configOverride?: PluginConfig },\n\t): Promise<CapabilityPluginHandle> {\n\t\tconst runtime = this._capabilityRuntime;\n\t\t// v8 ignore next -- capability runtime 恒由 _buildRuntime 创建,dispose 后不再调用,运行期恒存在\n\t\tif (!runtime) throw new Error(t(\"Capability runtime is not available\"));\n\t\tconst resolvedManifestPath = resolve(this._cwd, manifestPath);\n\t\tif (this._capabilityPlugins.has(resolvedManifestPath)) {\n\t\t\tthrow new Error(t(\"Capability plugin manifest is already loaded: {path}\", { path: resolvedManifestPath }));\n\t\t}\n\t\t// 宿主装配声明的 configOverride 按路径记录(D-082 批 1):sdk 装配链注入的\n\t\t// 会话事实(coding-tools 的 cwd/read/bash 等)在 reload 重装载时经此回放,\n\t\t// 否则插件会退回 manifest 缺省值(cwd 缺失即退回 process.cwd())。同路径的\n\t\t// 后续显式装载覆盖旧值。\n\t\tif (options?.configOverride !== undefined) {\n\t\t\tthis._capabilityPluginConfigOverrides.set(resolvedManifestPath, options.configOverride);\n\t\t}\n\n\t\tconst previousToolNames = new Set(runtime.listTools().map((tool) => tool.name));\n\t\tconst loaded = await loadCapabilityPluginFromManifest(runtime, resolvedManifestPath, options);\n\t\treturn this._trackCapabilityPlugin(resolvedManifestPath, loaded, previousToolNames);\n\t}\n\n\t/**\n\t * Load an in-memory capability plugin and attach its handle to this session.\n\t * This is useful for embedders and deterministic fixtures that already own a\n\t * validated manifest/factory pair; reload and dispose will release the handle.\n\t */\n\tasync loadCapabilityPlugin(\n\t\tmanifest: PluginManifest,\n\t\tfactory: CapabilityPluginFactory,\n\t): Promise<CapabilityPluginHandle> {\n\t\tconst runtime = this._capabilityRuntime;\n\t\t// v8 ignore next -- capability runtime 恒由 _buildRuntime 创建,dispose 后不再调用,运行期恒存在\n\t\tif (!runtime) throw new Error(t(\"Capability runtime is not available\"));\n\t\tconst key = `inline:${manifest.id}`;\n\t\tif (this._capabilityPlugins.has(key)) {\n\t\t\tthrow new Error(t(\"Capability plugin is already loaded in this session: {id}\", { id: manifest.id }));\n\t\t}\n\t\tconst previousToolNames = new Set(runtime.listTools().map((tool) => tool.name));\n\t\tconst loaded = await loadCapabilityPluginRuntime(runtime, manifest, factory);\n\t\tthis._inlineCapabilityPlugins.set(key, { manifest, factory });\n\t\ttry {\n\t\t\treturn await this._trackCapabilityPlugin(key, loaded, previousToolNames);\n\t\t} catch (error) {\n\t\t\tthis._inlineCapabilityPlugins.delete(key);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\t/**\n\t * Get all configured tools with name, description, parameter schema, prompt guidelines, and source metadata.\n\t */\n\tgetAllTools(): ToolInfo[] {\n\t\treturn getAllTools(this._internal);\n\t}\n\n\tgetToolDefinition(name: string): ToolDefinition | undefined {\n\t\treturn getToolDefinition(this._internal, name);\n\t}\n\n\t/**\n\t * Set active tools by name.\n\t * Only tools in the registry can be enabled. Unknown tool names are ignored.\n\t * Also rebuilds the system prompt to reflect the new tool set.\n\t * Changes take effect on the next agent turn.\n\t */\n\tsetActiveToolsByName(toolNames: string[]): void {\n\t\tsetActiveToolsByName(this._internal, toolNames);\n\t}\n\n\t/** Whether compaction or branch summarization is currently running */\n\tget isCompacting(): boolean {\n\t\treturn (\n\t\t\tthis._autoCompactionAbortController !== undefined ||\n\t\t\tthis._compactionAbortController !== undefined ||\n\t\t\tthis._branchSummaryAbortController !== undefined\n\t\t);\n\t}\n\n\t/** All messages including custom types like BashExecutionMessage */\n\tget messages(): AgentMessage[] {\n\t\treturn this.agent.state.messages;\n\t}\n\n\t/** Current steering mode */\n\tget steeringMode(): \"all\" | \"one-at-a-time\" {\n\t\treturn this.agent.steeringMode;\n\t}\n\n\t/** Current follow-up mode */\n\tget followUpMode(): \"all\" | \"one-at-a-time\" {\n\t\treturn this.agent.followUpMode;\n\t}\n\n\t/** Current session file path, or undefined if sessions are disabled */\n\tget sessionFile(): string | undefined {\n\t\treturn this.sessionManager.getSessionFile();\n\t}\n\n\t/** Current session ID */\n\tget sessionId(): string {\n\t\treturn this.sessionManager.getSessionId();\n\t}\n\n\t/**\n\t * /metrics 数据源共享 ref(config 原样透出;observability 插件工厂挂载时写入\n\t * plugin.getMetrics、dispose 时置空)。宿主(TUI/RPC)经它惰性解引用接进\n\t * 命令 options——空 = 插件未挂载。\n\t */\n\tget observabilityGetMetricsRef(): { current?: ObservabilityPlugin[\"getMetrics\"] } | undefined {\n\t\treturn this._observabilityGetMetricsRef;\n\t}\n\n\t/** Current session display name, if set */\n\tget sessionName(): string | undefined {\n\t\treturn this.sessionManager.getSessionName();\n\t}\n\n\t/** Durable revision host fact (SessionManager entry sequence) for session boundaries. */\n\tgetRevision(): SessionRevisionV1 {\n\t\treturn this.sessionManager.getRevision();\n\t}\n\n\t/** Scoped models for cycling (from --models flag) */\n\tget scopedModels(): ReadonlyArray<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }> {\n\t\treturn getScopedModels(this._internal);\n\t}\n\n\t/** Update scoped models for cycling */\n\tsetScopedModels(scopedModels: Array<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>): void {\n\t\tsetScopedModels(this._internal, scopedModels);\n\t}\n\n\t/** File-based prompt templates */\n\tget promptTemplates(): ReadonlyArray<PromptTemplate> {\n\t\treturn this._resourceLoader.getPrompts().prompts;\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _normalizePromptSnippet(text: string | undefined): string | undefined {\n\t\treturn normalizePromptSnippet(text);\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _normalizePromptGuidelines(guidelines: string[] | undefined): string[] {\n\t\treturn normalizePromptGuidelines(guidelines);\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _rebuildSystemPrompt(toolNames: string[]): string {\n\t\treturn rebuildSystemPrompt(this._internal, toolNames);\n\t}\n\n\t// =========================================================================\n\t// Prompting\n\t// =========================================================================\n\n\tprivate async _runAgentPrompt(messages: AgentMessage | AgentMessage[]): Promise<PromptOutcome> {\n\t\treturn runPromptLoop(this._internal, messages);\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: called from test/coverage-branch-core3-agent-session-misc.test.ts via the private cast\n\tprivate _handlePostAgentRun(): Promise<boolean> {\n\t\treturn postAgentRun(this._internal);\n\t}\n\n\tprivate async _runInputHandlers(\n\t\ttext: string,\n\t\timages: ImageContent[] | undefined,\n\t\tsource: InputSource,\n\t): Promise<{ text: string; images: ImageContent[] | undefined }> {\n\t\t// 输入门(扩展位盘点 A3,对称于工具门 beforeToolCall):先于\n\t\t// input.received@1——门决定输入是否被接受,received 是\"已接受\"输入的\n\t\t// 观察事实,被拒输入不派发。链序 = 注册序;改写喂给下一环与后续展开;\n\t\t// block 短路:派发 input.gate.blocked@1(facts only,文本不入信封)后\n\t\t// 以 reason 拒绝本次提交。无钩子时零开销直通(默认行为零变化)。\n\t\tconst gateChain = this._capabilityRuntime?.getLoopHookChain(\"beforeInput\") ?? [];\n\t\tlet currentText = text;\n\t\tfor (const link of gateChain) {\n\t\t\tconst result = await link({ text: currentText, source });\n\t\t\tif (!result) continue;\n\t\t\tif (result.block === true) {\n\t\t\t\tconst reason = typeof result.reason === \"string\" && result.reason.trim() !== \"\" ? result.reason : undefined;\n\t\t\t\tawait dispatchInputGateBlockedLifecycle(this._internal, {\n\t\t\t\t\tsource,\n\t\t\t\t\ttextLength: currentText.length,\n\t\t\t\t\treason,\n\t\t\t\t});\n\t\t\t\tthrow new Error(\n\t\t\t\t\treason === undefined\n\t\t\t\t\t\t? t(\"Input rejected by an input gate\")\n\t\t\t\t\t\t: t(\"Input rejected by an input gate: {reason}\", { reason }),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\"text\" in result && typeof result.text === \"string\") {\n\t\t\t\tcurrentText = result.text;\n\t\t\t}\n\t\t}\n\t\t// input.received@1 is an after-commit observe event: the input text and\n\t\t// images never enter the envelope, and no interception result exists.\n\t\tvoid dispatchInputReceivedLifecycle(this._internal, { source, textLength: currentText.length });\n\t\treturn { text: currentText, images };\n\t}\n\n\t/**\n\t * Send a prompt to the agent.\n\t * - Handles legacy and capability plugin commands immediately, even during streaming\n\t * - Expands file-based prompt templates by default\n\t * - During streaming, queues via steer() or followUp() based on streamingBehavior option\n\t * - Validates model and API key before sending (when not streaming)\n\t * @throws Error if streaming and no streamingBehavior specified\n\t * @throws Error if no model selected or no API key available (when not streaming)\n\t */\n\tasync prompt(text: string, options?: PromptOptions): Promise<PromptOutcome> {\n\t\tif (this._reloadInProgress) {\n\t\t\tthrow new Error(t(\"Session reload in progress; prompts are unavailable\"));\n\t\t}\n\t\tconst expandPromptTemplates = options?.expandPromptTemplates ?? true;\n\t\tconst preflightResult = options?.preflightResult;\n\t\tlet messages: AgentMessage[] | undefined;\n\t\t// Handle plugin commands first (execute immediately, even during streaming).\n\t\tif (expandPromptTemplates && text.startsWith(\"/\")) {\n\t\t\tconst handled = await this._tryExecuteExtensionCommand(text);\n\t\t\tif (handled) {\n\t\t\t\t// Extension command executed, no prompt to send\n\t\t\t\tpreflightResult?.(\"handled\");\n\t\t\t\treturn { status: \"done\" };\n\t\t\t}\n\t\t}\n\n\t\tif (this._compactionAbortController !== undefined) {\n\t\t\tthrow new Error(\n\t\t\t\tt(\"Cannot submit a prompt while compaction is in progress. Wait for compaction to finish and retry.\"),\n\t\t\t);\n\t\t}\n\n\t\t// Dispatch the input.gate chain, then the input.received facts (both\n\t\t// before skill/template expansion)\n\t\tconst { text: currentText, images: currentImages } = await this._runInputHandlers(\n\t\t\ttext,\n\t\t\toptions?.images,\n\t\t\toptions?.source ?? \"interactive\",\n\t\t);\n\n\t\t// Expand skill commands (/skill:name args) and prompt templates (/template args)\n\t\tlet expandedText = currentText;\n\t\tif (expandPromptTemplates) {\n\t\t\texpandedText = this._expandSkillCommand(expandedText);\n\t\t\texpandedText = expandPromptTemplate(expandedText, [...this.promptTemplates]);\n\t\t}\n\n\t\t// If streaming, queue via steer() or followUp() based on option\n\t\tif (this.isStreaming) {\n\t\t\tif (!options?.streamingBehavior) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tt(\n\t\t\t\t\t\t\"Agent is already processing. Specify streamingBehavior ('steer' or 'followUp') to queue the message.\",\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (options.streamingBehavior === \"followUp\") {\n\t\t\t\tawait this._queueFollowUp(expandedText, currentImages);\n\t\t\t} else {\n\t\t\t\tawait this._queueSteer(expandedText, currentImages);\n\t\t\t}\n\t\t\tpreflightResult?.(\"queued\");\n\t\t\treturn { status: \"done\" };\n\t\t}\n\n\t\t// Flush any pending bash and custom messages before the new prompt\n\t\tthis._flushPendingBashMessages();\n\t\tthis._flushPendingCustomMessages();\n\n\t\t// Validate model\n\t\tif (!this.model) {\n\t\t\tthrow new Error(formatNoModelSelectedMessage());\n\t\t}\n\n\t\tconst hasConfiguredAuth =\n\t\t\tthis.agent.streamFunction !== streamSimple ||\n\t\t\tthis._modelRuntime.hasConfiguredAuth(this.model.provider) ||\n\t\t\t(await this._modelRuntime.checkAuth(this.model.provider)) !== undefined;\n\t\tif (!hasConfiguredAuth) {\n\t\t\tconst isOAuth = this._modelRuntime.isUsingOAuth(this.model.provider);\n\t\t\tif (isOAuth) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tt(\n\t\t\t\t\t\t\"Authentication failed for \\\"{provider}\\\". Credentials may have expired or network is unavailable. Run '/login {provider}' to re-authenticate.\",\n\t\t\t\t\t\t{ provider: this.model.provider },\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\tthrow new Error(formatNoApiKeyFoundMessage(this.model.provider));\n\t\t}\n\n\t\t// Check if we need to compact before sending (catches aborted responses).\n\t\t// The user's new prompt is sent below, so do not call agent.continue() here.\n\t\tconst lastAssistant = this._findLastAssistantMessage();\n\t\tif (lastAssistant) {\n\t\t\tawait this._checkCompaction(lastAssistant, false);\n\t\t}\n\n\t\t// Build messages array (custom message if any, then user message)\n\t\tmessages = [];\n\n\t\t// Add user message\n\t\tconst userContent: (TextContent | ImageContent)[] = [{ type: \"text\", text: expandedText }];\n\t\tif (currentImages) {\n\t\t\tuserContent.push(...currentImages);\n\t\t}\n\t\tmessages.push({\n\t\t\trole: \"user\",\n\t\t\tcontent: userContent,\n\t\t\ttimestamp: Date.now(),\n\t\t});\n\n\t\t// Inject any pending \"nextTurn\" messages as context alongside the user message\n\t\tfor (const msg of this._pendingNextTurnMessages) {\n\t\t\tmessages.push(msg);\n\t\t}\n\t\tthis._pendingNextTurnMessages = [];\n\n\t\tawait dispatchBeforeAgentStartLifecycle(this._internal, (currentImages?.length ?? 0) > 0);\n\t\t// Reset to the base prompt (in case a previous turn had an override),\n\t\t// then apply the before.agent.start@2 candidate transform (capability\n\t\t// channel). A transform yielding a different systemPrompt is the later\n\t\t// writer and wins; a missing registration, a verbatim result, or a\n\t\t// failed delivery keeps the base prompt.\n\t\tthis._systemPromptOverride = undefined;\n\t\tthis.agent.state.systemPrompt = this._baseSystemPrompt;\n\t\tconst capabilitySystemPrompt = await dispatchBeforeAgentStartV2Lifecycle(\n\t\t\tthis._internal,\n\t\t\tthis._baseSystemPrompt,\n\t\t\tthis._baseSystemPromptOptions,\n\t\t);\n\t\tif (capabilitySystemPrompt !== undefined) {\n\t\t\tthis._systemPromptOverride = capabilitySystemPrompt;\n\t\t\tthis.agent.state.systemPrompt = capabilitySystemPrompt;\n\t\t}\n\n\t\t// v8 ignore next -- try 块内所有不发送路径均已提前 return,messages 必然已赋值\n\t\tif (!messages) {\n\t\t\treturn { status: \"done\" };\n\t\t}\n\n\t\tpreflightResult?.(\"started\");\n\t\treturn this._runAgentPrompt(messages);\n\t}\n\n\t/**\n\t * Try to execute a capability command. A cross-system name collision with a\n\t * prompt template or skill is always an explicit error.\n\t */\n\tprivate async _tryExecuteExtensionCommand(text: string): Promise<boolean> {\n\t\t// Parse command name and args\n\t\tconst spaceIndex = text.indexOf(\" \");\n\t\tconst commandName = spaceIndex === -1 ? text.slice(1) : text.slice(1, spaceIndex);\n\t\tconst args = spaceIndex === -1 ? \"\" : text.slice(spaceIndex + 1);\n\n\t\tconst runtime = this._capabilityRuntime;\n\t\tif (runtime?.hasCommand(commandName)) {\n\t\t\tconst templateConflict = this.promptTemplates.some((template) => template.name === commandName);\n\t\t\tconst skillName = commandName.startsWith(\"skill:\") ? commandName.slice(\"skill:\".length) : undefined;\n\t\t\tconst skillConflict =\n\t\t\t\tskillName !== undefined && this._getAvailableSkills().some((skill) => skill.name === skillName);\n\t\t\tif (templateConflict || skillConflict) {\n\t\t\t\tconst source = templateConflict ? \"prompt template\" : \"skill\";\n\t\t\t\tthrow new Error(\n\t\t\t\t\tt(\"Command is registered by both CapabilityAPI and {source}: {command}\", {\n\t\t\t\t\t\tsource,\n\t\t\t\t\t\tcommand: commandName,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t\tconst source =\n\t\t\truntime.listCommands().find(({ definition }) => definition.name === commandName)?.source ?? \"unknown\";\n\t\tconst abortController = new AbortController();\n\t\tthis._commandAbortController = abortController;\n\t\tconst execute = async (): Promise<void> => {\n\t\t\tconst result = await runtime.invokeCommand(commandName, args, {\n\t\t\t\tsignal: abortController.signal,\n\t\t\t\tcwd: this._cwd,\n\t\t\t});\n\t\t\tif (result !== undefined) {\n\t\t\t\tthis._emit({\n\t\t\t\t\ttype: \"capability_command_result\",\n\t\t\t\t\tcommand: commandName,\n\t\t\t\t\tsource,\n\t\t\t\t\tresult,\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t\tconst commandExecution = execute();\n\t\tthis._activeCapabilityCommand = commandExecution;\n\t\ttry {\n\t\t\tawait commandExecution;\n\t\t} finally {\n\t\t\tif (this._commandAbortController === abortController) this._commandAbortController = undefined;\n\t\t\tif (this._activeCapabilityCommand === commandExecution) this._activeCapabilityCommand = undefined;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Expand skill commands (/skill:name args) to their full content.\n\t * Returns the expanded text, or the original text if not a skill command or skill not found.\n\t * Emits errors via extension runner if file read fails.\n\t */\n\tprivate _expandSkillCommand(text: string): string {\n\t\tif (!text.startsWith(\"/skill:\")) return text;\n\n\t\tconst spaceIndex = text.indexOf(\" \");\n\t\tconst skillName = spaceIndex === -1 ? text.slice(7) : text.slice(7, spaceIndex);\n\t\tconst args = spaceIndex === -1 ? \"\" : text.slice(spaceIndex + 1).trim();\n\n\t\tconst skill = this._getAvailableSkills().find((s) => s.name === skillName);\n\t\tif (!skill) return text; // Unknown skill, pass through\n\n\t\ttry {\n\t\t\tconst content = readFileSync(skill.filePath, \"utf-8\");\n\t\t\tconst body = stripFrontmatter(content).trim();\n\t\t\tconst skillBlock = `<skill name=\"${skill.name}\" location=\"${skill.filePath}\">\\nReferences are relative to ${skill.baseDir}.\\n\\n${body}\\n</skill>`;\n\t\t\treturn args ? `${skillBlock}\\n\\n${args}` : skillBlock;\n\t\t} catch (err) {\n\t\t\t// Report like command errors do: process log, non-fatal, original text kept.\n\t\t\tthis._hostLogger?.error(\"session\", \"skill expansion failed\", {\n\t\t\t\t...(this.sessionId === undefined ? {} : { sessionId: this.sessionId }),\n\t\t\t\tfields: { skill: skill.name, path: skill.filePath },\n\t\t\t\tcause: err,\n\t\t\t});\n\t\t\treturn text; // Return original on error\n\t\t}\n\t}\n\n\tprivate async _queueUserInput(\n\t\ttext: string,\n\t\timages: ImageContent[] | undefined,\n\t\tbehavior: \"steer\" | \"followUp\",\n\t\tsource: InputSource,\n\t): Promise<QueuedInputDisposition> {\n\t\tconst processedInput = await this._runInputHandlers(text, images, source);\n\t\tlet expandedText = this._expandSkillCommand(processedInput.text);\n\t\texpandedText = expandPromptTemplate(expandedText, [...this.promptTemplates]);\n\n\t\tif (behavior === \"steer\") {\n\t\t\tawait this._queueSteer(expandedText, processedInput.images);\n\t\t} else {\n\t\t\tawait this._queueFollowUp(expandedText, processedInput.images);\n\t\t}\n\t\treturn \"queued\";\n\t}\n\n\t/**\n\t * Queue a steering message while the agent is running.\n\t * Delivered after the current assistant turn finishes executing its tool calls,\n\t * before the next LLM call.\n\t * Expands skill commands and prompt templates. Errors on extension commands.\n\t * @param images Optional image attachments to include with the message\n\t * @param options Input source; defaults to interactive\n\t * @returns How the input was dispatched (\"queued\"; \"handled\" if a handler consumed it)\n\t * @throws Error if text is an extension command\n\t */\n\tasync steer(\n\t\ttext: string,\n\t\timages?: ImageContent[],\n\t\toptions?: { source?: InputSource },\n\t): Promise<QueuedInputDisposition> {\n\t\treturn this._queueUserInput(text, images, \"steer\", options?.source ?? \"interactive\");\n\t}\n\n\t/**\n\t * Queue a follow-up message to be processed after the agent finishes.\n\t * Delivered only when agent has no more tool calls or steering messages.\n\t * Expands skill commands and prompt templates. Errors on extension commands.\n\t * @param images Optional image attachments to include with the message\n\t * @param options Input source; defaults to interactive\n\t * @returns How the input was dispatched (\"queued\"; \"handled\" if a handler consumed it)\n\t * @throws Error if text is an extension command\n\t */\n\tasync followUp(\n\t\ttext: string,\n\t\timages?: ImageContent[],\n\t\toptions?: { source?: InputSource },\n\t): Promise<QueuedInputDisposition> {\n\t\treturn this._queueUserInput(text, images, \"followUp\", options?.source ?? \"interactive\");\n\t}\n\n\t/**\n\t * Internal: Queue a steering message (already expanded, no extension command check).\n\t */\n\tprivate async _queueSteer(text: string, images?: ImageContent[]): Promise<void> {\n\t\tthis._steeringMessages.push(text);\n\t\tthis._emitQueueUpdate();\n\t\tconst content: (TextContent | ImageContent)[] = [{ type: \"text\", text }];\n\t\tif (images) {\n\t\t\tcontent.push(...images);\n\t\t}\n\t\tthis.agent.steer({\n\t\t\trole: \"user\",\n\t\t\tcontent,\n\t\t\ttimestamp: Date.now(),\n\t\t});\n\t}\n\n\t/**\n\t * Internal: Queue a follow-up message (already expanded, no extension command check).\n\t */\n\tprivate async _queueFollowUp(text: string, images?: ImageContent[]): Promise<void> {\n\t\tthis._followUpMessages.push(text);\n\t\tthis._emitQueueUpdate();\n\t\tconst content: (TextContent | ImageContent)[] = [{ type: \"text\", text }];\n\t\tif (images) {\n\t\t\tcontent.push(...images);\n\t\t}\n\t\tthis.agent.followUp({\n\t\t\trole: \"user\",\n\t\t\tcontent,\n\t\t\ttimestamp: Date.now(),\n\t\t});\n\t}\n\n\t/**\n\t * Send a custom message to the session. Creates a CustomMessageEntry.\n\t *\n\t * Handles four cases:\n\t * - Streaming: queues message (registered in the queued-message view via its\n\t * text content), processed when loop pulls from queue\n\t * - Streaming + triggerTurn false: appended to state/session once the current turn ends\n\t * - Not streaming + triggerTurn: appends to state/session, starts new turn —\n\t * unless manual compaction is in flight (same guard as prompt()), in which\n\t * case the message degrades to a followUp queue entry instead of a\n\t * concurrent turn (D-060 ruling 12 boundary: the compaction revision\n\t * mutex must not be pierced; the queued message is drained at the next\n\t * driving point after compaction ends)\n\t * - Not streaming + no trigger: appends to state/session, no turn\n\t *\n\t * @param message Custom message with customType, content, display, details\n\t * @param options.triggerTurn If true and not streaming, triggers a new LLM turn\n\t * @param options.deliverAs Delivery mode: \"steer\", \"followUp\", or \"nextTurn\"\n\t */\n\tasync sendCustomMessage<T = unknown>(\n\t\tmessage: Pick<CustomMessage<T>, \"customType\" | \"content\" | \"display\" | \"details\">,\n\t\toptions?: { triggerTurn?: boolean; deliverAs?: \"steer\" | \"followUp\" | \"nextTurn\" },\n\t): Promise<void> {\n\t\tconst appMessage = {\n\t\t\trole: \"custom\" as const,\n\t\t\tcustomType: message.customType,\n\t\t\t// Untyped extensions can pass null/missing content; normalize at ingestion.\n\t\t\tcontent: message.content ?? [],\n\t\t\tdisplay: message.display,\n\t\t\tdetails: message.details,\n\t\t\ttimestamp: Date.now(),\n\t\t} satisfies CustomMessage<T>;\n\t\tif (options?.deliverAs === \"nextTurn\") {\n\t\t\tthis._pendingNextTurnMessages.push(appMessage);\n\t\t} else if (this.isStreaming && options?.triggerTurn !== false) {\n\t\t\t// Register the queued text in the session's queued-message view so the\n\t\t\t// display copy and the agent queue stay isomorphic (D-078 fix). See\n\t\t\t// _queuedCopyText for the placeholder rationale.\n\t\t\tconst queuedText = this._queuedCopyText(appMessage.content);\n\t\t\tif (options?.deliverAs === \"followUp\") {\n\t\t\t\tthis._followUpMessages.push(queuedText);\n\t\t\t\tthis.agent.followUp(appMessage);\n\t\t\t} else {\n\t\t\t\tthis._steeringMessages.push(queuedText);\n\t\t\t\tthis.agent.steer(appMessage);\n\t\t\t}\n\t\t\tthis._emitQueueUpdate();\n\t\t} else if (options?.triggerTurn) {\n\t\t\tif (this._compactionAbortController !== undefined) {\n\t\t\t\t// 压缩互斥窗口(D-060 裁决 12 边界,复审 C-1):手动压缩进行中(与\n\t\t\t\t// prompt() 同判据同字段)时不起并发回合——压缩提交按 revision 互斥,\n\t\t\t\t// 并发验收回合会以 revision conflict 打断用户压缩。回注降级为\n\t\t\t\t// followUp 入队:消息不丢(队列可见),压缩结束后的下一驱动点(用户\n\t\t\t\t// 下一交互或下一结算回注)drain 注入。\n\t\t\t\tthis._followUpMessages.push(this._queuedCopyText(appMessage.content));\n\t\t\t\tthis.agent.followUp(appMessage);\n\t\t\t\tthis._emitQueueUpdate();\n\t\t\t} else {\n\t\t\t\tawait this._runAgentPrompt(appMessage);\n\t\t\t}\n\t\t} else if (this.isStreaming) {\n\t\t\t// Appending now would put the message between an assistant tool call and its\n\t\t\t// result, which providers that validate message order reject on replay. Defer\n\t\t\t// to the end of the turn. Nothing is emitted yet: message events must not\n\t\t\t// describe messages the session tree does not contain.\n\t\t\tthis._pendingCustomMessages.push(appMessage);\n\t\t} else {\n\t\t\tthis._appendCustomMessage(appMessage);\n\t\t}\n\t}\n\n\t/**\n\t * Copy text registered in the queued-message view for a queued custom\n\t * message. The copy holds the message's text content; CustomMessage.display\n\t * is a boolean visibility flag, not display text. Content without text\n\t * (e.g. images only) registers a placeholder: an empty copy entry would\n\t * never be matched for removal on delivery (the drain-side guard skips\n\t * empty text) and would desynchronize both layers (D-078). The placeholder\n\t * is a stable literal, deliberately not localized — both registration and\n\t * removal must derive the same string, even if the UI language changes\n\t * between the two calls.\n\t */\n\tprivate _queuedCopyText(content: CustomMessage[\"content\"]): string {\n\t\treturn contentText(content, \"\") || \"(no text)\";\n\t}\n\n\tprivate _appendCustomMessage(appMessage: CustomMessage): void {\n\t\tthis.agent.state.messages.push(appMessage);\n\t\tthis.sessionManager.appendCustomMessageEntry(\n\t\t\tappMessage.customType,\n\t\t\tappMessage.content,\n\t\t\tappMessage.display,\n\t\t\tappMessage.details,\n\t\t);\n\t\tthis._emit({ type: \"message_start\", message: appMessage });\n\t\tthis._emit({ type: \"message_end\", message: appMessage });\n\t}\n\n\t/**\n\t * Append custom messages queued while the agent was running.\n\t * Called once the current turn's tool results are in agent state and session history.\n\t */\n\tprivate _flushPendingCustomMessages(): void {\n\t\tif (this._pendingCustomMessages.length === 0) return;\n\n\t\tconst pending = this._pendingCustomMessages;\n\t\tthis._pendingCustomMessages = [];\n\t\tfor (const appMessage of pending) {\n\t\t\tthis._appendCustomMessage(appMessage);\n\t\t}\n\t}\n\n\t/**\n\t * Send a user message to the agent. Always triggers a turn.\n\t * When the agent is streaming, use deliverAs to specify how to queue the message.\n\t *\n\t * @param content User message content (string or content array)\n\t * @param options.deliverAs Delivery mode when streaming: \"steer\" or \"followUp\"\n\t * @param options.expandPromptTemplates Whether to dispatch extension commands and expand skill commands and prompt templates. Default: false.\n\t */\n\tasync sendUserMessage(\n\t\tcontent: string | (TextContent | ImageContent)[],\n\t\toptions?: { deliverAs?: \"steer\" | \"followUp\"; expandPromptTemplates?: boolean },\n\t): Promise<void> {\n\t\t// Normalize content to text string + optional images\n\t\tlet text: string;\n\t\tlet images: ImageContent[] | undefined;\n\n\t\tif (typeof content === \"string\") {\n\t\t\ttext = content;\n\t\t} else {\n\t\t\tconst textParts: string[] = [];\n\t\t\timages = [];\n\t\t\tfor (const part of content) {\n\t\t\t\tif (part.type === \"text\") {\n\t\t\t\t\ttextParts.push(part.text);\n\t\t\t\t} else {\n\t\t\t\t\timages.push(part);\n\t\t\t\t}\n\t\t\t}\n\t\t\ttext = textParts.join(\"\\n\");\n\t\t\tif (images.length === 0) images = undefined;\n\t\t}\n\n\t\tawait this.prompt(text, {\n\t\t\texpandPromptTemplates: options?.expandPromptTemplates ?? false,\n\t\t\tstreamingBehavior: options?.deliverAs,\n\t\t\timages,\n\t\t\tsource: \"extension\",\n\t\t});\n\t}\n\n\t/**\n\t * Clear all queued messages and return them.\n\t * Useful for restoring to editor when user aborts.\n\t * @returns Object with steering and followUp arrays\n\t */\n\tclearQueue(): { steering: string[]; followUp: string[] } {\n\t\tconst steering = [...this._steeringMessages];\n\t\tconst followUp = [...this._followUpMessages];\n\t\tthis._steeringMessages = [];\n\t\tthis._followUpMessages = [];\n\t\tthis.agent.clearAllQueues();\n\t\tthis._emitQueueUpdate();\n\t\treturn { steering, followUp };\n\t}\n\n\t/**\n\t * Move a queued message from index `from` to index `to` within the steering\n\t * or follow-up queue. Indices refer to the session's queued-message view\n\t * (getSteeringMessages()/getFollowUpMessages() and queue_update payloads)\n\t * at the moment of the call; the same move is applied to the agent queue.\n\t * During streaming, drain points consume queued messages, so previously\n\t * observed indices can become stale.\n\t * @returns true when the message moved; false for from === to, out-of-bounds\n\t * indices, or an agent-side rejection — both layers stay untouched in every\n\t * false case\n\t */\n\treorderQueuedMessages(queue: \"steer\" | \"followUp\", from: number, to: number): boolean {\n\t\tconst copy = queue === \"steer\" ? this._steeringMessages : this._followUpMessages;\n\t\tif (from === to || from < 0 || to < 0 || from >= copy.length || to >= copy.length) {\n\t\t\treturn false;\n\t\t}\n\t\t// Apply the move on the agent queue first and mirror it on the session copy\n\t\t// only after the agent accepts it. A rejected move (stale index) leaves\n\t\t// both layers untouched instead of widening a copy/queue mismatch.\n\t\tif (!this.agent.reorderQueuedMessages(queue, from, to)) {\n\t\t\treturn false;\n\t\t}\n\t\tconst [moved] = copy.splice(from, 1);\n\t\tcopy.splice(to, 0, moved);\n\t\tthis._emitQueueUpdate();\n\t\treturn true;\n\t}\n\n\t/**\n\t * Remove the queued message at `index` from the steering or follow-up queue.\n\t * Indices refer to the session's queued-message view at the moment of the\n\t * call; the same removal is applied to the agent queue.\n\t * @returns The removed queued text, or null when index is out of bounds or the\n\t * agent-side removal is rejected — both layers stay untouched in every null case\n\t */\n\tremoveQueuedMessageAt(queue: \"steer\" | \"followUp\", index: number): string | null {\n\t\tconst copy = queue === \"steer\" ? this._steeringMessages : this._followUpMessages;\n\t\tif (index < 0 || index >= copy.length) {\n\t\t\treturn null;\n\t\t}\n\t\t// Remove on the agent queue first and mirror it on the session copy only\n\t\t// after the agent accepts it. A rejected removal (stale index) leaves both\n\t\t// layers untouched instead of widening a copy/queue mismatch.\n\t\tif (this.agent.removeQueuedMessage(queue, index) === null) {\n\t\t\treturn null;\n\t\t}\n\t\tconst [removed] = copy.splice(index, 1);\n\t\tthis._emitQueueUpdate();\n\t\treturn removed;\n\t}\n\n\t/** Number of pending messages (includes both steering and follow-up) */\n\tget pendingMessageCount(): number {\n\t\treturn this._steeringMessages.length + this._followUpMessages.length;\n\t}\n\n\t/** Get pending steering messages (read-only) */\n\tgetSteeringMessages(): readonly string[] {\n\t\treturn this._steeringMessages;\n\t}\n\n\t/** Get pending follow-up messages (read-only) */\n\tgetFollowUpMessages(): readonly string[] {\n\t\treturn this._followUpMessages;\n\t}\n\n\tget resourceLoader(): ResourceLoader {\n\t\treturn this._resourceLoader;\n\t}\n\n\t/**\n\t * Why the active turn was aborted, following codex's TurnAbortReason\n\t * (protocol.rs:4173). The interruption marker's visible text stays fixed;\n\t * the reason rides the marker `details` for hosts and plugins.\n\t *\n\t * 中断分级(设计 §4.2,2026-10-02):缺省级联终止全部后台委派(原契约);\n\t * `cancelAgentTasks: false` 只停本回合(模型流/工具/bash),后台 fence 不动\n\t * ——两段式 Esc 的第一次按键走这一档。\n\t */\n\tasync abort(reason?: TurnAbortReason, options?: { cancelAgentTasks?: boolean }): Promise<void> {\n\t\tthis._pendingAbortReason = reason ?? \"interrupted\";\n\t\tthis._lastAbortReason = this._pendingAbortReason;\n\t\t// 级联取消子 agent 任务(D-044 §4.2):fire-and-forget,不阻塞父会话自身的 abort。\n\t\tconst cancelAgentTasks = options?.cancelAgentTasks !== false;\n\t\tif (cancelAgentTasks) {\n\t\t\tthis._agentTaskScopeAbortController.abort(reason ?? \"interrupted\");\n\t\t}\n\t\ttry {\n\t\t\tawait this._abortInternal();\n\t\t\tthis._appendTurnInterruptedMarker();\n\t\t} finally {\n\t\t\tthis._pendingAbortReason = undefined;\n\t\t\t// epoch 刷新只在当前 fence 确已 spent 时发生(复审 2026-10-02:重叠\n\t\t\t// abort 下无条件刷新可能把一个从未 abort 的新 controller 再替换一次,\n\t\t\t// 两次刷新之间创建的任务会静默失联;spended 判定堵住所有交错变体)。\n\t\t\tif (this._agentTaskScopeAbortController.signal.aborted) {\n\t\t\t\tthis._agentTaskScopeAbortController = new AbortController();\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * 只级联终止全部后台委派(设计 §4.2 中断分级):中止 fence 并刷新 epoch,\n\t * 不中止当前回合——`/stop-agents` 命令的唯一执行面。无后台任务时为幂等 no-op。\n\t */\n\tabortAgentTasks(reason?: TurnAbortReason): void {\n\t\tthis._agentTaskScopeAbortController.abort(reason ?? \"interrupted\");\n\t\tthis._agentTaskScopeAbortController = new AbortController();\n\t}\n\n\t/**\n\t * 活跃后台委派数(设计 §4.2 中断分级):capability runtime 活跃任务集合的\n\t * 有界投影——创建即入;终态经投影按状态过滤,成员随 dispose 释放。供宿主做中断分级提示与状态显示。\n\t */\n\tgetActiveAgentTaskCount(): number {\n\t\treturn this._capabilityRuntime?.getActiveAgentTaskCount() ?? 0;\n\t}\n\n\t/**\n\t * Abort without the interruption marker; used by internal flows (compaction,\n\t * teardown) that abort for their own bookkeeping. Takes no reason: the abort\n\t * reason only exists where the marker is written.\n\t */\n\tasync _abortInternal(): Promise<void> {\n\t\tthis.abortRetry();\n\t\tthis._policyDecisionAbortController?.abort(\"session aborted\");\n\t\tthis._commandAbortController?.abort(\"session aborted\");\n\t\tthis.abortCompaction();\n\t\tthis.abortBranchSummary();\n\t\tthis.abortBash();\n\t\tthis.agent.abort();\n\t\tawait this.waitForIdle();\n\t}\n\n\t/**\n\t * Append a model-visible marker after an abort that actually cut a turn\n\t * short. transform-messages drops the aborted assistant message on replay,\n\t * so without this marker the model has no way to learn that the\n\t * interruption happened. Tool calls skipped mid-batch already carry their\n\t * own persisted error results; this covers the streaming-interrupt case.\n\t * The text is intentionally fixed (codex keeps INTERRUPTED_GUIDANCE stable\n\t * across reasons); the abort reason rides `details` for host consumers.\n\t */\n\tprivate _appendTurnInterruptedMarker(): void {\n\t\tconst messages = this.agent.state.messages;\n\t\tconst last = messages[messages.length - 1];\n\t\tif (last?.role === \"custom\" && last.customType === \"turn-interrupted\") {\n\t\t\treturn;\n\t\t}\n\t\tlet lastAssistantAborted = false;\n\t\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\t\tconst message = messages[i];\n\t\t\tif (message.role === \"assistant\") {\n\t\t\t\tlastAssistantAborted = message.stopReason === \"aborted\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (!lastAssistantAborted) {\n\t\t\treturn;\n\t\t}\n\t\tthis._appendCustomMessage({\n\t\t\trole: \"custom\",\n\t\t\tcustomType: \"turn-interrupted\",\n\t\t\tcontent: \"The previous turn was interrupted by the user before it completed.\",\n\t\t\tdisplay: false,\n\t\t\tdetails: this._pendingAbortReason === undefined ? undefined : { reason: this._pendingAbortReason },\n\t\t\ttimestamp: Date.now(),\n\t\t});\n\t}\n\n\tprivate async _abortActiveCapabilityCommand(reason: string): Promise<void> {\n\t\tthis._commandAbortController?.abort(reason);\n\t\tawait this._activeCapabilityCommand;\n\t}\n\n\t/**\n\t * Stop every operation that can still mutate session state before a reload\n\t * replaces the runtime. This deliberately does not call `abort()`: reload\n\t * must also wait for queued compaction and branch-summary work, while a\n\t * compaction itself calls `abort()` as part of its normal entry path.\n\t */\n\tprivate async _cancelAndDrainForReload(): Promise<void> {\n\t\tthis.abortRetry();\n\t\tthis._policyDecisionAbortController?.abort(\"session reloaded\");\n\t\tthis._commandAbortController?.abort(\"session reloaded\");\n\t\tthis.abortCompaction();\n\t\tthis.abortBranchSummary();\n\t\tthis.abortBash();\n\t\tthis.agent.abort();\n\n\t\tawait Promise.allSettled(\n\t\t\t[\n\t\t\t\tthis._activeCapabilityCommand,\n\t\t\t\tthis._activeCompactionPromise,\n\t\t\t\tthis._branchSummaryPromise,\n\t\t\t\tthis._activeContextTransition,\n\t\t\t\t...this._activeBashPromises,\n\t\t\t\tthis.waitForIdle(),\n\t\t\t].filter((operation): operation is Promise<unknown> => operation !== undefined),\n\t\t);\n\t\t// The tail includes compactions that were enqueued just before the reload\n\t\t// barrier. They must settle before the old runtime is revoked.\n\t\tawait this._compactionQueue.catch(() => undefined);\n\t}\n\n\tasync waitForIdle(): Promise<void> {\n\t\tif (this.isIdle) {\n\t\t\treturn;\n\t\t}\n\t\tawait this._getIdleWaitPromise();\n\t}\n\n\t// =========================================================================\n\t// Model Management\n\t// =========================================================================\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate async _emitModelSelect(\n\t\tnextModel: Model<Api>,\n\t\tpreviousModel: Model<Api> | undefined,\n\t\tsource: \"set\" | \"cycle\" | \"restore\",\n\t): Promise<void> {\n\t\treturn emitModelSelect(this._internal, nextModel, previousModel, source);\n\t}\n\n\t/**\n\t * Set model directly.\n\t * Validates that auth is configured and saves to the session transcript.\n\t * Persists to global defaults only when options.persist is true.\n\t * @throws Error if no auth is configured for the model\n\t */\n\tasync setModel(model: Model<Api>, options: ModelMutationOptions = {}): Promise<void> {\n\t\treturn setModel(this._internal, model, options);\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _addPersistedDefaultToNonEmptyScope(model: Model<Api>): void {\n\t\taddPersistedDefaultToNonEmptyScope(this._internal, model);\n\t}\n\n\t/**\n\t * Cycle to next/previous model.\n\t * Uses scoped models (from --models flag) if available, otherwise all available models.\n\t * @param direction - \"forward\" (default) or \"backward\"\n\t * @returns The new model info, or undefined if only one model available\n\t */\n\tasync cycleModel(\n\t\tdirection: \"forward\" | \"backward\" = \"forward\",\n\t\toptions: ModelMutationOptions = {},\n\t): Promise<ModelCycleResult | undefined> {\n\t\treturn cycleModel(this._internal, direction, options);\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate async _cycleScopedModel(\n\t\tdirection: \"forward\" | \"backward\",\n\t\toptions: ModelMutationOptions,\n\t): Promise<ModelCycleResult | undefined> {\n\t\treturn cycleScopedModel(this._internal, direction, options);\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate async _cycleAvailableModel(\n\t\tdirection: \"forward\" | \"backward\",\n\t\toptions: ModelMutationOptions,\n\t): Promise<ModelCycleResult | undefined> {\n\t\treturn cycleAvailableModel(this._internal, direction, options);\n\t}\n\n\t// =========================================================================\n\t// Thinking Level Management\n\t// =========================================================================\n\n\t/**\n\t * Set thinking level.\n\t * Clamps to model capabilities based on available thinking levels.\n\t * Saves the clamped level to the session transcript only if the level actually changes.\n\t * Persists the requested level to global defaults only when options.persist is true.\n\t */\n\tsetThinkingLevel(level: ThinkingLevel, options: ModelMutationOptions = {}): void {\n\t\tconst availableLevels = this.getAvailableThinkingLevels();\n\t\tconst effectiveLevel = availableLevels.includes(level) ? level : this._clampThinkingLevel(level, availableLevels);\n\n\t\t// Only persist if actually changing\n\t\tconst previousLevel = this.agent.state.thinkingLevel;\n\t\tconst isChanging = effectiveLevel !== previousLevel;\n\n\t\tthis.agent.state.thinkingLevel = effectiveLevel;\n\n\t\tif (options.persist) {\n\t\t\tthis.settingsManager.setDefaultThinkingLevel(level);\n\t\t}\n\n\t\tif (isChanging) {\n\t\t\tthis.sessionManager.appendThinkingLevelChange(effectiveLevel);\n\t\t\tthis._emit({ type: \"thinking_level_changed\", level: effectiveLevel });\n\t\t\tvoid dispatchThinkingLevelSelectLifecycle(this._internal, effectiveLevel, previousLevel);\n\t\t}\n\t}\n\n\t/**\n\t * Cycle to next thinking level.\n\t * @returns New level, or undefined if model doesn't support thinking\n\t */\n\tcycleThinkingLevel(options: ModelMutationOptions = {}): ThinkingLevel | undefined {\n\t\tif (!this.supportsThinking()) return undefined;\n\n\t\tconst levels = this.getAvailableThinkingLevels();\n\t\tconst currentIndex = levels.indexOf(this.thinkingLevel);\n\t\tconst nextIndex = (currentIndex + 1) % levels.length;\n\t\tconst nextLevel = levels[nextIndex];\n\n\t\tthis.setThinkingLevel(nextLevel, options);\n\t\treturn nextLevel;\n\t}\n\n\t/**\n\t * Get available thinking levels for current model.\n\t * The provider will clamp to what the specific model supports internally.\n\t */\n\tgetAvailableThinkingLevels(): ThinkingLevel[] {\n\t\tif (!this.model) return [...THINKING_LEVEL_OPTIONS];\n\t\treturn getSupportedThinkingLevels(this.model) as ThinkingLevel[];\n\t}\n\n\t/**\n\t * Check if current model supports thinking/reasoning.\n\t */\n\tsupportsThinking(): boolean {\n\t\treturn !!this.model?.reasoning;\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _getThinkingLevelForModelSwitch(targetModel?: Model<Api>, explicitLevel?: ThinkingLevel): ThinkingLevel {\n\t\treturn getThinkingLevelForModelSwitch(this._internal, targetModel, explicitLevel);\n\t}\n\n\tprivate _clampThinkingLevel(level: ThinkingLevel, _availableLevels: ThinkingLevel[]): ThinkingLevel {\n\t\treturn this.model ? (clampThinkingLevel(this.model, level) as ThinkingLevel) : \"off\";\n\t}\n\n\t// =========================================================================\n\t// Queue Mode Management\n\t// =========================================================================\n\n\tprivate syncQueueModesFromSettings(): void {\n\t\tthis.agent.steeringMode = this.settingsManager.getSteeringMode();\n\t\tthis.agent.followUpMode = this.settingsManager.getFollowUpMode();\n\t}\n\n\t/**\n\t * Set steering message mode.\n\t * Saves to settings.\n\t */\n\tsetSteeringMode(mode: \"all\" | \"one-at-a-time\"): void {\n\t\tthis.agent.steeringMode = mode;\n\t\tthis.settingsManager.setSteeringMode(mode);\n\t}\n\n\t/**\n\t * Set follow-up message mode.\n\t * Saves to settings.\n\t */\n\tsetFollowUpMode(mode: \"all\" | \"one-at-a-time\"): void {\n\t\tthis.agent.followUpMode = mode;\n\t\tthis.settingsManager.setFollowUpMode(mode);\n\t}\n\n\t// =========================================================================\n\t// Compaction\n\t// =========================================================================\n\n\t/** Queue compaction work so canonical commit and runtime projection stay ordered. */\n\tprivate _enqueueCompaction<T>(operation: () => Promise<T>): Promise<T> {\n\t\treturn enqueueCompaction(this._internal, operation);\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _observeLifecycleDeliveryError(error: unknown, extensionPath: string, event: string): void {\n\t\tobserveLifecycleDeliveryError(this._internal, error, extensionPath, event);\n\t}\n\n\t/**\n\t * Manually compact the session context.\n\t *\n\t * This is the manual entry point used by `/compact`, RPC, and extensions. It is\n\t * separate from automatic threshold/overflow compaction, which enters through\n\t * `_checkCompaction()` and `_runAutoCompaction()`. After preparation and the\n\t * `session_before_compact` hook, both paths use the selected compaction policy\n\t * unless the hook cancels or supplies a custom result, then commit the result\n\t * against the revision captured for that branch.\n\t *\n\t * Aborts the current agent operation first. Manual compaction never retries or\n\t * continues the interrupted agent turn.\n\t *\n\t * @param customInstructions Optional instructions for the compaction summary\n\t */\n\tasync compact(customInstructions?: string): Promise<CompactionResult | CompactionCancelledResult> {\n\t\tif (this._reloadInProgress) {\n\t\t\tthrow new Error(t(\"Session reload in progress; compaction is unavailable\"));\n\t\t}\n\t\treturn this._enqueueCompaction(() => this._compactInternal(customInstructions));\n\t}\n\n\tprivate _compactInternal(customInstructions?: string): Promise<CompactionResult | CompactionCancelledResult> {\n\t\treturn compactInternal(this._internal, customInstructions);\n\t}\n\n\t/**\n\t * Cancel in-progress compaction (manual or auto).\n\t */\n\tabortCompaction(): void {\n\t\tthis._compactionAbortController?.abort();\n\t\tthis._autoCompactionAbortController?.abort();\n\t}\n\n\t/**\n\t * Cancel in-progress branch summarization.\n\t */\n\tabortBranchSummary(): void {\n\t\tthis._branchSummaryAbortController?.abort();\n\t}\n\n\t/**\n\t * Dispatch automatic compaction after `agent_end` or before prompt submission.\n\t * Manual compaction does not call this method; it enters through `compact()`.\n\t *\n\t * Automatic cases:\n\t * 1. Overflow with retry: a context-overflow error or recoverable length stop;\n\t * remove the failed assistant message, compact, and retry the turn once.\n\t * 2. Overflow without retry: a successful response exceeded the configured\n\t * context window; compact but preserve the completed response.\n\t * 3. Threshold without retry: valid or estimated context usage crossed the\n\t * configured threshold; compact without retrying the completed response.\n\t *\n\t * Each case calls `_runAutoCompaction()`. After preparation and the\n\t * `session_before_compact` hook, that method calls the lower-level `compact()`\n\t * function imported from `./compaction/index.ts`, unless the hook cancels or\n\t * supplies a custom result.\n\t *\n\t * @param assistantMessage The assistant message to check\n\t * @param skipAbortedCheck If false, include aborted messages (for pre-prompt check). Default: true\n\t * @returns Whether the post-run loop should call `agent.continue()` for overflow recovery or queued messages\n\t */\n\tprivate _checkCompaction(\n\t\tassistantMessage: AssistantMessage,\n\t\tskipAbortedCheck = true,\n\t\tsignal?: AbortSignal,\n\t): Promise<boolean> {\n\t\treturn checkCompaction(this._internal, assistantMessage, skipAbortedCheck, signal);\n\t}\n\n\t/**\n\t * Execute threshold or overflow compaction. Manual compaction uses\n\t * `AgentSession.compact()` instead. Both paths use the selected compaction\n\t * policy after preparation and extension interception, then commit against the\n\t * branch revision captured before asynchronous work.\n\t *\n\t * @param reason Automatic trigger selected by `_checkCompaction()`\n\t * @param willRetry Whether to continue the interrupted turn after overflow compaction\n\t * @returns Whether the post-run loop should call `agent.continue()`\n\t */\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _runAutoCompaction(reason: \"overflow\" | \"threshold\", willRetry: boolean): Promise<boolean> {\n\t\treturn runAutoCompaction(this._internal, reason, willRetry);\n\t}\n\n\t/**\n\t * Run the session-start boundary: dispatch session.start@1 to the capability\n\t * runtime and run the resource discovery pass (contributed skills/prompts/\n\t * themes). Hosts await this once after constructing (or rebinding to) a\n\t * session, before the first prompt.\n\t */\n\tasync startSession(): Promise<void> {\n\t\tawait dispatchSessionStartLifecycle(\n\t\t\tthis._internal,\n\t\t\tthis._sessionStartEvent.reason,\n\t\t\tthis._sessionStartEvent.previousSessionFile,\n\t\t);\n\t\tawait this.extendResourcesFromExtensions(this._sessionStartEvent.reason === \"reload\" ? \"reload\" : \"startup\");\n\t}\n\n\tprivate async extendResourcesFromExtensions(reason: \"startup\" | \"reload\"): Promise<void> {\n\t\treturn extendResourcesFromExtensions(this._internal, reason);\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate buildExtensionResourcePaths(entries: Array<{ path: string; extensionPath: string }>): Array<{\n\t\tpath: string;\n\t\tmetadata: { source: string; scope: \"temporary\"; origin: \"top-level\"; baseDir?: string };\n\t}> {\n\t\treturn buildExtensionResourcePaths(this._internal, entries);\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate getExtensionSourceLabel(extensionPath: string): string {\n\t\treturn getExtensionSourceLabel(extensionPath);\n\t}\n\n\tprivate _refreshToolRegistry(options?: { activeToolNames?: string[]; includeAllExtensionTools?: boolean }): void {\n\t\trefreshToolRegistry(this._internal, options);\n\t}\n\n\tprivate _syncCapabilityTools(): void {\n\t\tsyncCapabilityTools(this._internal);\n\t}\n\n\tprivate _getCapabilitySkills(): Skill[] {\n\t\treturn getCapabilitySkills(this._internal);\n\t}\n\n\tprivate _getAvailableSkills(): Skill[] {\n\t\tconst capabilitySkills = this._getCapabilitySkills();\n\t\treturn capabilitySkills.length > 0 ? capabilitySkills : this._resourceLoader.getSkills().skills;\n\t}\n\n\tprivate _validateCapabilitySkillConflicts(): void {\n\t\tvalidateCapabilitySkillConflicts(this._internal);\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _refreshBootstrapSkills(): Promise<void> {\n\t\treturn refreshBootstrapSkills(this._internal);\n\t}\n\n\tprivate async _disposeCapabilityPlugins(): Promise<void> {\n\t\tconst handles = Array.from(this._capabilityPlugins.values());\n\t\tthis._isDisposingCapabilityPlugins = true;\n\t\tconst errors: unknown[] = [];\n\t\ttry {\n\t\t\tfor (const handle of handles) {\n\t\t\t\ttry {\n\t\t\t\t\tawait handle.dispose();\n\t\t\t\t} catch (error) {\n\t\t\t\t\terrors.push(error);\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tthis._isDisposingCapabilityPlugins = false;\n\t\t}\n\t\tif (errors.length === 1) throw errors[0];\n\t\tif (errors.length > 1) throw new AggregateError(errors, \"Capability plugin disposal failed\");\n\t}\n\n\t/**\n\t * 插件日志记录 → 宿主进程日志(会话轨迹第 2 期,设计 §7.2):HostLogger 是\n\t * debug/info/warn/error 四方法(无泛用 log),按记录级别映射调用;级别门槛由\n\t * logger 自身过滤(\"级别沿用宿主日志级别门槛\")。src 用 pluginId(宿主日志的\n\t * 来源标记位);sessionId 随行。LoggerRecord 当前无已填充的 correlationId\n\t * (recordLog 不写该字段),不编造 traceId。\n\t */\n\tprivate _forwardLogRecordToHost(record: LoggerRecord): void {\n\t\tconst hostLogger = this._hostLogger;\n\t\tif (!hostLogger) return;\n\t\tconst context: HostLogContext = {\n\t\t\t...(record.sessionId === undefined ? {} : { sessionId: record.sessionId }),\n\t\t\t...(record.fields === undefined ? {} : { fields: record.fields as Record<string, unknown> }),\n\t\t\t...(record.cause === undefined ? {} : { cause: record.cause }),\n\t\t};\n\t\tswitch (record.level) {\n\t\t\tcase \"debug\":\n\t\t\t\thostLogger.debug(record.pluginId, record.message, context);\n\t\t\t\tbreak;\n\t\t\tcase \"info\":\n\t\t\t\thostLogger.info(record.pluginId, record.message, context);\n\t\t\t\tbreak;\n\t\t\tcase \"warn\":\n\t\t\t\thostLogger.warn(record.pluginId, record.message, context);\n\t\t\t\tbreak;\n\t\t\tcase \"error\":\n\t\t\t\thostLogger.error(record.pluginId, record.message, context);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tprivate _buildRuntime(options: { activeToolNames?: string[]; includeAllExtensionTools?: boolean }): void {\n\t\t// 对齐 context transition 控制器的替换模式:runtime 重建时刷新 parent\n\t\t// 取消栅栏,防止 reload 后新 runtime 的任务绑到旧 spent 信号被立即取消。\n\t\tthis._agentTaskScopeAbortController = new AbortController();\n\t\tthis._capabilityRuntime = createCapabilityRuntime(\n\t\t\t{\n\t\t\t\tapiVersion: EXPERIMENTAL_PUBLIC_API_VERSION,\n\t\t\t\tmode: this._capabilityMode,\n\t\t\t\t// D-075 S4 second batch: the host agent dir rides the public\n\t\t\t\t// HostCapabilities so disk-state plugins resolve their config files.\n\t\t\t\t...(this._agentDir === undefined ? {} : { agentDir: this._agentDir }),\n\t\t\t\t// D-075 S4 third batch: the subagent delegation host services ride\n\t\t\t\t// the public HostCapabilities (communication wiring, turn-scoped\n\t\t\t\t// digest/correlation context, suite role associations) — the same\n\t\t\t\t// facts the embedded builtin used to receive as constructor options.\n\t\t\t\t...(this._communication === undefined ? {} : { communication: this._communication }),\n\t\t\t\t...(this._turnContext === undefined ? {} : { turnContext: this._turnContext }),\n\t\t\t\t...(this._roleAssociations === undefined ? {} : { roleAssociations: this._roleAssociations }),\n\t\t\t\t// D-075 S4 fourth batch: the memory storage injection face rides\n\t\t\t\t// the public HostCapabilities — the first-party memory plugin\n\t\t\t\t// binds these components in place of its built-in defaults.\n\t\t\t\t...(this._memoryStorage === undefined ? {} : { memoryStorage: this._memoryStorage }),\n\t\t\t\t// The session working directory rides the public HostCapabilities as a host\n\t\t\t\t// service so workspace-bound plugins (LSP real host) resolve their adapters.\n\t\t\t\tworkspaceDirectory: this._cwd,\n\t\t\t\t// 模型目录宿主服务(D-082 批 3b,契约 B):provider-failover 装载预检/\n\t\t\t\t// 目录快照读面(api.host.modelCatalog)。全部是 ModelRuntime 静态目录\n\t\t\t\t// 与凭据条目的即时读投影,零网络、零 OAuth;resolveModel 返回结构视图\n\t\t\t\t// (provider/contextWindow/maxTokens/compat/thinkingLevelMap 五字段),\n\t\t\t\t// 不透出内部 Model 对象,未知 provider/model 对返回 undefined。\n\t\t\t\tmodelCatalog: {\n\t\t\t\t\tresolveModel: (provider, modelId) => {\n\t\t\t\t\t\tconst model = this._modelRuntime.getModel(provider, modelId);\n\t\t\t\t\t\tif (!model) return undefined;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tprovider: model.provider,\n\t\t\t\t\t\t\tcontextWindow: model.contextWindow,\n\t\t\t\t\t\t\tmaxTokens: model.maxTokens,\n\t\t\t\t\t\t\t...(model.compat === undefined ? {} : { compat: model.compat }),\n\t\t\t\t\t\t\t...(model.thinkingLevelMap === undefined ? {} : { thinkingLevelMap: model.thinkingLevelMap }),\n\t\t\t\t\t\t};\n\t\t\t\t\t},\n\t\t\t\t\thasProvider: (providerId) => this._modelRuntime.getProvider(providerId) !== undefined,\n\t\t\t\t\thasConfiguredAuth: (providerId) => this._modelRuntime.hasConfiguredAuth(providerId),\n\t\t\t\t},\n\t\t\t\tfeatures: [\n\t\t\t\t\t\"tools\",\n\t\t\t\t\t\"skills\",\n\t\t\t\t\t\"logger-v1\",\n\t\t\t\t\t\"diagnostics-v1\",\n\t\t\t\t\t\"plugin-state-v1\",\n\t\t\t\t\t\"runtime-inspector-v1\",\n\t\t\t\t\t\"retry-policy\",\n\t\t\t\t\t\"compaction-policy\",\n\t\t\t\t\t\"overflow-policy\",\n\t\t\t\t\t\"events\",\n\t\t\t\t\t\"operations\",\n\t\t\t\t\t\"rpc\",\n\t\t\t\t\t\"context\",\n\t\t\t\t\t\"provider-headers\",\n\t\t\t\t\t\"credentials\",\n\t\t\t\t\t\"commands\",\n\t\t\t\t\t\"session\",\n\t\t\t\t\t\"session-revision-v1\",\n\t\t\t\t\t\"session-export\",\n\t\t\t\t\t\"output-artifacts\",\n\t\t\t\t\t...(this._agentTaskAdapter || this._agentSessionReader || this._agentSessionLister ? [\"agents\"] : []),\n\t\t\t\t\t...(this._agentTaskResults ? [\"agent-result-replay-v1\"] : []),\n\t\t\t\t\t...(this._agentComposition ? [\"agent-composition-v1\"] : []),\n\t\t\t\t\t...(this._interactionHost ? [\"interaction\"] : []),\n\t\t\t\t],\n\t\t\t\ttransports: [\"in-process\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\t...(this._agentTaskAdapter ? { agents: this._agentTaskAdapter } : {}),\n\t\t\t\t...(this._agentTaskResults ? { agentResults: this._agentTaskResults } : {}),\n\t\t\t\t...(this._agentSessionReader ? { agentSessionReader: this._agentSessionReader } : {}),\n\t\t\t\t...(this._agentSessionLister ? { agentSessionLister: this._agentSessionLister } : {}),\n\t\t\t\t...(this._agentComposition ? { composition: this._agentComposition } : {}),\n\t\t\t\t...(this._interactionHost ? { interaction: this._interactionHost } : {}),\n\t\t\t\tparentSignal: () => this._agentTaskScopeAbortController.signal,\n\t\t\t\t...(this._traceService === undefined ? {} : { trace: this._traceService }),\n\t\t\t\t...(this._modelRuntime\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tmodelRuntime: {\n\t\t\t\t\t\t\t\tgetModelFacts: () => {\n\t\t\t\t\t\t\t\t\tconst model = this.agent.state.model;\n\t\t\t\t\t\t\t\t\tif (!model) return undefined;\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\tprovider: model.provider,\n\t\t\t\t\t\t\t\t\t\tid: model.id,\n\t\t\t\t\t\t\t\t\t\tcontextWindow: model.contextWindow ?? 0,\n\t\t\t\t\t\t\t\t\t\tmaxTokens: model.maxTokens ?? 0,\n\t\t\t\t\t\t\t\t\t\treasoning: model.reasoning ?? false,\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tinvoke: async (\n\t\t\t\t\t\t\t\t\tinput: { systemPrompt?: string; prompt: string; maxTokens?: number; thinkingLevel?: string },\n\t\t\t\t\t\t\t\t\toptions?: { signal?: AbortSignal },\n\t\t\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\t\t\tconst model = this.agent.state.model;\n\t\t\t\t\t\t\t\t\tif (!model) throw new Error(t(\"No model is set on this session's agent\"));\n\t\t\t\t\t\t\t\t\tconst authResult = await this._modelRuntime.getAuth(model, {\n\t\t\t\t\t\t\t\t\t\t...(options?.signal === undefined ? {} : { signal: options.signal }),\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tconst requestModel = authResult?.auth.baseUrl\n\t\t\t\t\t\t\t\t\t\t? { ...model, baseUrl: authResult.auth.baseUrl }\n\t\t\t\t\t\t\t\t\t\t: model;\n\t\t\t\t\t\t\t\t\tconst context: Parameters<typeof this.agent.streamFunction>[1] = {\n\t\t\t\t\t\t\t\t\t\t...(input.systemPrompt === undefined ? {} : { systemPrompt: input.systemPrompt }),\n\t\t\t\t\t\t\t\t\t\tmessages: [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\trole: \"user\",\n\t\t\t\t\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: input.prompt }],\n\t\t\t\t\t\t\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\tconst requestOptions: Record<string, unknown> = {\n\t\t\t\t\t\t\t\t\t\t...(input.maxTokens === undefined ? {} : { maxTokens: input.maxTokens }),\n\t\t\t\t\t\t\t\t\t\t...(input.thinkingLevel && input.thinkingLevel !== \"off\" && model.reasoning\n\t\t\t\t\t\t\t\t\t\t\t? { reasoning: input.thinkingLevel }\n\t\t\t\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t\t\t\t...(authResult?.auth.apiKey === undefined ? {} : { apiKey: authResult.auth.apiKey }),\n\t\t\t\t\t\t\t\t\t\t...(authResult?.auth.headers === undefined ? {} : { headers: authResult.auth.headers }),\n\t\t\t\t\t\t\t\t\t\t...(authResult?.env === undefined ? {} : { env: authResult.env }),\n\t\t\t\t\t\t\t\t\t\t...(options?.signal === undefined ? {} : { signal: options.signal }),\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\tconst stream = await this.agent.streamFunction(requestModel, context, requestOptions);\n\t\t\t\t\t\t\t\t\tconst response = await stream.result();\n\t\t\t\t\t\t\t\t\tif (response.stopReason === \"aborted\") return { version: 1, status: \"aborted\" };\n\t\t\t\t\t\t\t\t\tif (response.stopReason === \"error\")\n\t\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\t\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\t\t\t\t\t\tcode: \"summary_provider_error\",\n\t\t\t\t\t\t\t\t\t\t\t\tmessage: response.errorMessage ?? \"Unknown error\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\tif (response.stopReason === \"length\")\n\t\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\t\t\t\t\t\t\terror: { code: \"summary_length_cap\", message: \"generation hit the token cap\" },\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\tconst text = response.content\n\t\t\t\t\t\t\t\t\t\t.filter((block): block is { type: \"text\"; text: string } => block.type === \"text\")\n\t\t\t\t\t\t\t\t\t\t.map((block) => block.text)\n\t\t\t\t\t\t\t\t\t\t.join(\"\");\n\t\t\t\t\t\t\t\t\treturn { version: 1, status: \"completed\", text, usage: response.usage };\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t: {}),\n\t\t\t\tonOutputArtifactCommit: this._dispatchOutputArtifactCommit,\n\t\t\t\t// 工具表变更钩子:runtime 侧任何工具表变更(含同名替换/恢复)后,先重\n\t\t\t\t// 同步会话基础工具定义,再刷新可见注册表——运行期注册/替换/恢复随即\n\t\t\t\t// 对 getToolDefinition 与模型面可见、可被 setActiveToolsByName 激活;\n\t\t\t\t// 不自动加入活动集(激活权留给调用方)。两道门(见\n\t\t\t\t// _suspendToolRegistryHookRefresh/_toolRegistryHookReady 的注释)内\n\t\t\t\t// 整体跳过,由构造尾部与装卸边界兜底。\n\t\t\t\tonToolRegistryChange: () => {\n\t\t\t\t\tif (this._suspendToolRegistryHookRefresh || !this._toolRegistryHookReady) return;\n\t\t\t\t\tthis._syncCapabilityTools();\n\t\t\t\t\tthis._refreshToolRegistry({ activeToolNames: this.getActiveToolNames() });\n\t\t\t\t},\n\t\t\t\t// 运行时 invoke 面传给工具 execute 的第二参上下文(cwd 与命令面同源)。\n\t\t\t\ttoolExecutionContext: { cwd: this._cwd },\n\t\t\t\t// 插件日志宿主 sink(会话轨迹第 2 期,设计 §7.2):先经装配域共享 ref\n\t\t\t\t// 镜像进轨迹(observability 插件工厂写入,空 = 无镜像),再按级别落\n\t\t\t\t// 宿主进程日志(无 hostLogger 时为 no-op)。runtime 侧对回调抛错自吞,\n\t\t\t\t// 这里不再叠加容错。\n\t\t\t\t...(this._hostLogger === undefined && this._logRecordMirrorRef === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tonLogRecord: (record: LoggerRecord) => {\n\t\t\t\t\t\t\t\tthis._logRecordMirrorRef?.current?.(record);\n\t\t\t\t\t\t\t\tthis._forwardLogRecordToHost(record);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}),\n\t\t\t\tcredentials: {\n\t\t\t\t\tresolve: async ({ providerId, minValidityMs, signal }) => {\n\t\t\t\t\t\tconst result = await this._modelRuntime.getAuth(providerId, {\n\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\t...(minValidityMs === undefined ? {} : { minOAuthValidityMs: minValidityMs }),\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (!result) return undefined;\n\t\t\t\t\t\t// auth entries usually carry only the key; for custom\n\t\t\t\t\t\t// gateways the provider catalog (models.json) is the\n\t\t\t\t\t\t// authoritative baseUrl, so plugin credential requests\n\t\t\t\t\t\t// resolve a usable endpoint.\n\t\t\t\t\t\tconst providerBaseUrl = result.auth.baseUrl ?? this._modelRuntime.getProvider(providerId)?.baseUrl;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...(result.auth.apiKey === undefined ? {} : { apiKey: result.auth.apiKey }),\n\t\t\t\t\t\t\theaders: { ...(result.auth.headers ?? {}) },\n\t\t\t\t\t\t\t...(providerBaseUrl === undefined ? {} : { baseUrl: providerBaseUrl }),\n\t\t\t\t\t\t\t...(result.source === undefined ? {} : { source: result.source }),\n\t\t\t\t\t\t};\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsession: this.getSessionAPI(),\n\t\t\t},\n\t\t);\n\t\t// Bootstrap 插件家族(宪法 §1/§7):随产品内嵌、默认安装,但必须可禁用且\n\t\t// 独立失败——任一件装载抛错走 D-028 结构化 rejection + 进程日志,不阻断\n\t\t// 会话构造,也不伪装成内核失败。\n\t\tconst disabledBootstrap = this._disabledBootstrapPlugins;\n\t\tconst capabilityRuntime = this._capabilityRuntime;\n\t\tconst installBootstrap = (pluginId: string, install: () => { manifest: { id: string }; dispose: () => void }) => {\n\t\t\tif (disabledBootstrap?.includes(pluginId)) return;\n\t\t\ttry {\n\t\t\t\tinstall();\n\t\t\t} catch (error) {\n\t\t\t\tthis._hostLogger?.error(\"session\", \"bootstrap plugin load failed\", {\n\t\t\t\t\tfields: { pluginId },\n\t\t\t\t\tcause: error,\n\t\t\t\t});\n\t\t\t\tvoid capabilityRuntime\n\t\t\t\t\t.recordPluginRejection(\n\t\t\t\t\t\tObject.freeze({\n\t\t\t\t\t\t\tcode: \"plugin_load_failed\",\n\t\t\t\t\t\t\tmanifestPath: \"<embedded>\",\n\t\t\t\t\t\t\tpluginId,\n\t\t\t\t\t\t\tmessage: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t// Rejection visibility must never fail the remaining startup path.\n\t\t\t\t\t});\n\t\t\t}\n\t\t};\n\t\tinstallBootstrap(BOOTSTRAP_LIFECYCLE_PLUGIN_ID, () => installBootstrapLifecycle(capabilityRuntime));\n\t\tinstallBootstrap(BOOTSTRAP_AGENT_LOOP_PLUGIN_ID, () =>\n\t\t\tinstallBootstrapAgentLoop(capabilityRuntime, this._createLoopWiring()),\n\t\t);\n\t\t// 默认编码工具不再由内嵌 bootstrap-tools 注册(D-082 批 1,S6 工具批):\n\t\t// 实现体迁出为 plugins/coding-tools 独立包,sdk 装配链经 bundled 分发通道\n\t\t// (manifest/jiti)装载,禁用面平移到 options.disabledPluginIds。\n\t\t// 默认策略家族(retry / overflow / compaction / branch summary)自 D-082\n\t\t// 批 3 起不再内嵌安装:实现体迁出为 plugins/{retry,overflow,compaction}-policy\n\t\t// 独立包(branch summary 随 compaction 包),sdk 装配链经 bundled 分发通道\n\t\t// (manifest/jiti)装载,禁用面平移到 options.disabledPluginIds;四个缺省\n\t\t// 策略名(DEFAULT_*_POLICY_NAME)仍由宿主持有。\n\t\tinstallBootstrap(BOOTSTRAP_SKILLS_PLUGIN_ID, () => {\n\t\t\t// refreshBootstrapSkills keys off this handle to decide refresh vs\n\t\t\t// install; dropping it would double-install on the first refresh.\n\t\t\tthis._bootstrapSkillsHandle = installSessionBootstrapSkills(\n\t\t\t\tcapabilityRuntime,\n\t\t\t\tthis._resourceLoader.getSkills().skills,\n\t\t\t);\n\t\t\treturn this._bootstrapSkillsHandle;\n\t\t});\n\n\t\t// The embedded builtin capability channel (方案系统 M3) is retired: the\n\t\t// last embedded capability (memory) moved to its own package in D-075\n\t\t// S4 fourth batch, so every suite capability now assembles through the\n\t\t// installed-plugin path (session.loadCapabilityPluginManifest) and\n\t\t// nothing loads here.\n\t\tthis._syncCapabilityTools();\n\t\t// First-party capability activation (统一修复轮 B): readonly capabilityMode\n\t\t// narrows the first-party tool face by the OWNING PLUGIN's declaration\n\t\t// (宪法 §6): first-party tools stay on the active surface only when their\n\t\t// definition declares `readonlySafe`. The first-party domain covers both\n\t\t// naming eras — the retired embedded `agent-forge.builtin.*` ids and the\n\t\t// `agent-forge.plugin.*` package ids every capability moved to in the S4\n\t\t// split (D-075). The plugins stay installed — protocol entries, RPC\n\t\t// methods, and events are untouched; only the model tool face is narrowed.\n\t\t// Third-party plugin tools keep their existing semantics: whether they\n\t\t// respect the mode is the plugin's own declaration and the user's choice.\n\t\tconst builtinToolNames = this._capabilityRuntime\n\t\t\t.listTools()\n\t\t\t.filter(\n\t\t\t\t(tool) =>\n\t\t\t\t\tthis._capabilityMode !== \"readonly\" ||\n\t\t\t\t\t!tool.source.startsWith(\"agent-forge.builtin.\") ||\n\t\t\t\t\ttool.readonlySafe === true,\n\t\t\t)\n\t\t\t.filter(\n\t\t\t\t(tool) =>\n\t\t\t\t\tthis._capabilityMode !== \"readonly\" ||\n\t\t\t\t\t!tool.source.startsWith(\"agent-forge.plugin.\") ||\n\t\t\t\t\ttool.readonlySafe === true,\n\t\t\t)\n\t\t\t.map((tool) => tool.name);\n\n\t\tconst defaultActiveToolNames =\n\t\t\tthis._capabilityMode === \"readonly\"\n\t\t\t\t? // Derive from declarations: the readonly install path registers\n\t\t\t\t\t// exactly the declared-safe definitions, so the kernel carries no\n\t\t\t\t\t// per-tool name knowledge for the readonly face.\n\t\t\t\t\tthis._capabilityRuntime\n\t\t\t\t\t\t.listTools()\n\t\t\t\t\t\t.filter((tool) => tool.readonlySafe)\n\t\t\t\t\t\t.map((tool) => tool.name)\n\t\t\t\t: [\"read\", \"bash\", \"edit\", \"write\"];\n\t\t// Builtin capability tools join the active surface like externally\n\t\t// loaded plugin tools do (_trackCapabilityPlugin); the allowlist /\n\t\t// denylist filters below still gate them.\n\t\tconst baseActiveToolNames = [...(options.activeToolNames ?? defaultActiveToolNames), ...builtinToolNames];\n\t\tthis._refreshToolRegistry({\n\t\t\tactiveToolNames: baseActiveToolNames,\n\t\t\tincludeAllExtensionTools: options.includeAllExtensionTools,\n\t\t});\n\t\t// Runtime 装配与首次同步(上方显式 sync + refresh)完成后,工具表变更钩子\n\t\t// 才开始驱动会话侧同步;构造期通知全部跳过(见 _toolRegistryHookReady)。\n\t\tthis._toolRegistryHookReady = true;\n\t}\n\n\tasync reload(options?: { beforeSessionStart?: () => void | Promise<void> }): Promise<void> {\n\t\tif (this._reloadInProgress) throw new Error(t(\"Session reload is already in progress\"));\n\t\tthis._reloadInProgress = true;\n\t\tthis._beginContextTransitionFence();\n\t\tthis._bashEpoch += 1;\n\t\tlet committedGeneration: number | undefined;\n\t\ttry {\n\t\t\tawait this._cancelAndDrainForReload();\n\t\t\tconst oldCapabilityRuntime = this._capabilityRuntime;\n\t\t\tconst contextStrategyName = this._contextStrategyName;\n\t\t\tlet contextSnapshot: unknown;\n\t\t\tlet hasContextSnapshot = false;\n\t\t\tif (contextStrategyName) {\n\t\t\t\tif (!oldCapabilityRuntime?.hasContextStrategy(contextStrategyName)) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\tt(\"Configured context strategy is not registered: {name}\", { name: contextStrategyName }),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tcontextSnapshot = await oldCapabilityRuntime.snapshotContext(\n\t\t\t\t\tcontextStrategyName,\n\t\t\t\t\tthis._copyContextMessages(this.agent.state.messages, contextStrategyName, \"input\"),\n\t\t\t\t\t{ reason: \"reload\", sessionId: this.sessionId },\n\t\t\t\t);\n\t\t\t\thasContextSnapshot = true;\n\t\t\t}\n\t\t\tconst capabilityPluginPaths = Array.from(this._capabilityPlugins.keys()).filter(\n\t\t\t\t(key) => !this._inlineCapabilityPlugins.has(key),\n\t\t\t);\n\t\t\tconst inlineCapabilityPlugins = Array.from(this._inlineCapabilityPlugins.values());\n\t\t\tawait this._disposeCapabilityPlugins();\n\t\t\toldCapabilityRuntime?.revokeAllAPIs();\n\t\t\tawait oldCapabilityRuntime?.disposeAll();\n\t\t\tconst agentTaskAdapter = this._agentTaskAdapter;\n\t\t\tawait agentTaskAdapter?.dispose?.();\n\t\t\tconst interactionHost = this._interactionHost;\n\t\t\tawait interactionHost?.dispose?.();\n\t\t\tawait this._bootstrapSkillsHandle?.dispose();\n\t\t\tthis._bootstrapSkillsHandle = undefined;\n\t\t\tawait this._bootstrapRetryHandle?.dispose();\n\t\t\tthis._bootstrapRetryHandle = undefined;\n\t\t\tawait this._bootstrapOverflowHandle?.dispose();\n\t\t\tthis._bootstrapOverflowHandle = undefined;\n\t\t\tawait this._bootstrapCompactionHandle?.dispose();\n\t\t\tthis._bootstrapCompactionHandle = undefined;\n\t\t\tawait this._bootstrapBranchSummaryHandle?.dispose();\n\t\t\tthis._bootstrapBranchSummaryHandle = undefined;\n\t\t\tawait this._bootstrapAgentLoopHandle?.dispose();\n\t\t\tthis._bootstrapAgentLoopHandle = undefined;\n\t\t\tawait this._bootstrapLifecycleHandle?.dispose();\n\t\t\tthis._bootstrapLifecycleHandle = undefined;\n\t\t\tawait this.settingsManager.reload();\n\t\t\tthis.syncQueueModesFromSettings();\n\t\t\t// NOTE: reload must not call resetApiProviders(). The API provider\n\t\t\t// registry is process-global shared state; one session reloading must\n\t\t\t// never silently unregister providers owned by other sessions or hosts.\n\t\t\tawait this._resourceLoader.reload();\n\t\t\tthis._buildRuntime({\n\t\t\t\tactiveToolNames: this.getActiveToolNames(),\n\t\t\t\tincludeAllExtensionTools: true,\n\t\t\t});\n\t\t\tfor (const manifestPath of capabilityPluginPaths) {\n\t\t\t\t// 宿主装配注入的 configOverride 按路径回放(D-082 批 1),重装载不退\n\t\t\t\t// 回 manifest 缺省值。\n\t\t\t\tconst configOverride = this._capabilityPluginConfigOverrides.get(manifestPath);\n\t\t\t\tawait this.loadCapabilityPluginManifest(\n\t\t\t\t\tmanifestPath,\n\t\t\t\t\t...(configOverride === undefined ? [] : [{ configOverride }]),\n\t\t\t\t);\n\t\t\t}\n\t\t\tfor (const { manifest, factory } of inlineCapabilityPlugins) {\n\t\t\t\tawait this.loadCapabilityPlugin(manifest, factory);\n\t\t\t}\n\t\t\tif (contextStrategyName && hasContextSnapshot) {\n\t\t\t\tconst runtime = this._capabilityRuntime;\n\t\t\t\tif (!runtime?.hasContextStrategy(contextStrategyName)) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\tt(\"Configured context strategy is not registered after reload: {name}\", {\n\t\t\t\t\t\t\tname: contextStrategyName,\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tawait this._restoreContextTransition(contextSnapshot, \"reload\", { allowReload: true });\n\t\t\t}\n\n\t\t\tawait options?.beforeSessionStart?.();\n\t\t\tawait dispatchSessionStartLifecycle(this._internal, \"reload\");\n\t\t\tawait this.extendResourcesFromExtensions(\"reload\");\n\t\t\tcommittedGeneration = this._reloadGeneration + 1;\n\t\t\tthis._reloadGeneration = committedGeneration;\n\t\t} finally {\n\t\t\tthis._reloadInProgress = false;\n\t\t}\n\t\tif (committedGeneration === undefined) throw new Error(t(\"Session reload did not commit a generation\"));\n\t\tawait this._dispatchSessionReloadLifecycle(committedGeneration);\n\t}\n\n\t// =========================================================================\n\t// Auto-Retry\n\t// =========================================================================\n\n\t/**\n\t * Check if an error is retryable (overloaded, rate limit, server errors).\n\t * Context overflow errors are NOT retryable (handled by compaction instead).\n\t */\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _isRetryableError(\n\t\tmessage: AssistantMessage,\n\t\texecution?: ExecutionFactsV1,\n\t\tsignal?: AbortSignal,\n\t): Promise<boolean> {\n\t\treturn isRetryableError(this._internal, message, execution, signal);\n\t}\n\n\t/**\n\t * Prepare a retryable error for continuation with exponential backoff.\n\t * @returns true if the caller should continue the agent, false otherwise\n\t */\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _prepareRetry(\n\t\tmessage: AssistantMessage,\n\t\tprecomputedDecision?: Awaited<ReturnType<CapabilityRuntime[\"decideRetry\"]>>,\n\t): Promise<boolean> {\n\t\treturn prepareRetry(this._internal, message, precomputedDecision);\n\t}\n\n\t/**\n\t * Cancel in-progress retry.\n\t */\n\tabortRetry(): void {\n\t\tthis._retryAbortController?.abort();\n\t}\n\n\t/** Whether auto-retry is currently in progress */\n\tget isRetrying(): boolean {\n\t\treturn this._retryAbortController !== undefined;\n\t}\n\n\t// =========================================================================\n\t// Bash Execution\n\t// =========================================================================\n\n\t/** Capture a mode-level bash epoch for an intercepted user_bash result. */\n\tcaptureBashEpoch(): number {\n\t\treturn captureBashEpoch(this._internal);\n\t}\n\n\t/** Return whether a mode-level bash result still belongs to this runtime epoch. */\n\tisBashEpochCurrent(epoch: number): boolean {\n\t\treturn isBashEpochCurrent(this._internal, epoch);\n\t}\n\n\t/** Dispatch the user.bash lifecycle facts for a `!`/`!!` user bash command. */\n\temitUserBash(excludeFromContext: boolean): void {\n\t\temitUserBash(this._internal, excludeFromContext);\n\t}\n\n\t/**\n\t * Execute a bash command.\n\t * Adds result to agent context and session.\n\t * @param command The bash command to execute\n\t * @param onChunk Optional streaming callback for output\n\t * @param options.excludeFromContext If true, command output won't be sent to LLM (!! prefix)\n\t * @param options.id Optional identifier included in bash execution update events\n\t * @param options.operations Custom BashOperations for remote execution\n\t */\n\tasync executeBash(\n\t\tcommand: string,\n\t\tonChunk?: (chunk: string) => void,\n\t\toptions?: { excludeFromContext?: boolean; id?: string; operations?: BashOperations },\n\t): Promise<BashResult> {\n\t\treturn executeBash(this._internal, command, onChunk, options);\n\t}\n\n\t/**\n\t * Record a bash execution result in session history.\n\t * Used by executeBash and by extensions that handle bash execution themselves.\n\t */\n\trecordBashResult(\n\t\tcommand: string,\n\t\tresult: BashResult,\n\t\toptions?: { excludeFromContext?: boolean; epoch?: number },\n\t): void {\n\t\trecordBashResult(this._internal, command, result, options);\n\t}\n\n\t/**\n\t * Cancel running bash command.\n\t */\n\tabortBash(): void {\n\t\tabortBash(this._internal);\n\t}\n\n\t/** Whether a bash command is currently running */\n\tget isBashRunning(): boolean {\n\t\treturn this._bashAbortControllers.size > 0;\n\t}\n\n\t/** Whether there are pending bash messages waiting to be flushed */\n\tget hasPendingBashMessages(): boolean {\n\t\treturn this._pendingBashMessages.length > 0;\n\t}\n\n\t/**\n\t * Flush pending bash messages to agent state and session.\n\t * Called after agent turn completes to maintain proper message ordering.\n\t */\n\tprivate _flushPendingBashMessages(): void {\n\t\tflushPendingBashMessages(this._internal);\n\t}\n\n\t// =========================================================================\n\t// Session Management\n\t// =========================================================================\n\n\t/**\n\t * Set a display name for the current session.\n\t */\n\tsetSessionName(name: string): void {\n\t\tthis.sessionManager.appendSessionInfo(name);\n\t\tconst event = { type: \"session_info_changed\", name: this.sessionManager.getSessionName() } as const;\n\t\tthis._emit(event);\n\t\tvoid dispatchSessionInfoChangedLifecycle(this._internal, event.name);\n\t}\n\n\t/**\n\t * Record a cross-suite resume (设计 §10.1 最小可用版): the session was created\n\t * under `originalSuiteId` but its context is being reassembled under\n\t * `currentSuiteId` (assembly happens at session creation, so reassembly is\n\t * the existing behavior). Appends a `suite_mismatch` custom entry as session\n\t * protocol data so later debugging can trace the switch; context\n\t * serialization/conversion is explicitly out of scope.\n\t */\n\trecordSuiteMismatch(originalSuiteId: string, currentSuiteId: string): void {\n\t\tthis.sessionManager.appendCustomEntry(SUITE_MISMATCH_SESSION_ENTRY_TYPE, {\n\t\t\toriginalSuiteId,\n\t\t\tcurrentSuiteId,\n\t\t});\n\t}\n\n\t// =========================================================================\n\t// Tree Navigation\n\t// =========================================================================\n\n\t/**\n\t * Navigate to a different node in the session tree.\n\t * Unlike fork() which creates a new session file, this stays in the same file.\n\t *\n\t * @param targetId The entry ID to navigate to\n\t * @param options.summarize Whether user wants to summarize abandoned branch\n\t * @param options.customInstructions Custom instructions for summarizer\n\t * @param options.replaceInstructions If true, customInstructions replaces the default prompt\n\t * @param options.label Label to attach to the branch summary entry\n\t * @returns Result with editorText (if user message) and cancelled status\n\t */\n\tasync navigateTree(\n\t\ttargetId: string,\n\t\toptions: { summarize?: boolean; customInstructions?: string; replaceInstructions?: boolean; label?: string } = {},\n\t): Promise<{ editorText?: string; cancelled: boolean; aborted?: boolean; summaryEntry?: BranchSummaryEntry }> {\n\t\treturn navigateTree(this._internal, targetId, options);\n\t}\n\n\t/**\n\t * Get all user messages from session for fork selector.\n\t */\n\tgetUserMessagesForForking(): ForkableUserMessage[] {\n\t\treturn getUserMessagesForForking(this._internal);\n\t}\n\n\t/**\n\t * Get session statistics. Aggregates over ALL session entries (including\n\t * history that was compacted away), so token/cost totals reflect what was\n\t * actually billed across the session.\n\t */\n\tgetSessionStats(): SessionStats {\n\t\treturn getSessionStats(this._internal);\n\t}\n\n\tgetContextUsage(): ContextUsage | undefined {\n\t\treturn getContextUsage(this._internal);\n\t}\n\n\t/**\n\t * Export session to HTML.\n\t * @param outputPath Optional output path (defaults to session directory)\n\t * @param options Optional export presentation settings\n\t * @returns Path to exported file\n\t */\n\tasync exportToHtml(outputPath?: string, options: { themeName?: string } = {}): Promise<string> {\n\t\treturn await exportToHtml(this._internal, outputPath, options);\n\t}\n\n\t/**\n\t * Export the current session branch to a JSONL file.\n\t * Writes the session header followed by all entries on the current branch path.\n\t * @param outputPath Target file path. If omitted, generates a timestamped file in cwd.\n\t * @returns The resolved output file path.\n\t */\n\texportToJsonl(outputPath?: string): string {\n\t\treturn exportToJsonl(this._internal, outputPath);\n\t}\n\n\t// =========================================================================\n\t// Utilities\n\t// =========================================================================\n\n\t/**\n\t * Get text content of last assistant message.\n\t * Useful for /copy command.\n\t * @returns Text content, or undefined if no assistant message exists\n\t */\n\tgetLastAssistantText(): string | undefined {\n\t\treturn getLastAssistantText(this._internal);\n\t}\n\n\t// =========================================================================\n\t// Extension System\n\t// =========================================================================\n\n\tcreateReplacedSessionContext(): ReplacedSessionContext {\n\t\treturn {\n\t\t\tsendMessage: (message, options) => this.sendCustomMessage(message, options),\n\t\t\tsendUserMessage: (content, options) => this.sendUserMessage(content, options),\n\t\t};\n\t}\n\n\t/** Curated host surface (1B.7c): the only supported raw-integration point for product hosts. */\n\tget host(): AgentSessionHostSurface {\n\t\tconst agent = this.agent;\n\t\tconst sessionManager = this.sessionManager;\n\t\treturn {\n\t\t\tget abortSignal() {\n\t\t\t\treturn agent.signal;\n\t\t\t},\n\t\t\tget cwd() {\n\t\t\t\treturn sessionManager.getCwd();\n\t\t\t},\n\t\t\tget sessionName() {\n\t\t\t\treturn sessionManager.getSessionName();\n\t\t\t},\n\t\t\tget entries() {\n\t\t\t\treturn sessionManager.getEntries();\n\t\t\t},\n\t\t\tsetTransport: (transport) => {\n\t\t\t\tagent.transport = transport;\n\t\t\t},\n\t\t\tabortAgent: () => {\n\t\t\t\tagent.abort();\n\t\t\t},\n\t\t};\n\t}\n}\n\n/** Curated host surface over one AgentSession (1B.7c). Product hosts consume this instead of transitional raw fields. */\nexport interface AgentSessionHostSurface {\n\t/** Abort signal of the active agent run, when one is in flight. */\n\treadonly abortSignal: AbortSignal | undefined;\n\treadonly cwd: string;\n\treadonly sessionName: string | undefined;\n\treadonly entries: readonly SessionEntry[];\n\tsetTransport(transport: Transport): void;\n\t/** Aborts the core agent loop without session-level teardown. */\n\tabortAgent(): void;\n}\n"]}
1
+ {"version":3,"file":"agent-session.js","sourceRoot":"","sources":["../../src/core/agent-session.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * AgentSession - Core abstraction for agent lifecycle and session management.\n *\n * This class is shared between all run modes (interactive, print, rpc).\n * It encapsulates:\n * - Agent state access\n * - Event subscription with automatic session persistence\n * - Model and thinking level management\n * - Compaction (manual and auto)\n * - Bash execution\n * - Session switching and branching\n *\n * Modes use this class and add their own I/O layer on top.\n */\n\nimport { readFileSync } from \"node:fs\";\nimport { readFile as readFileUtf8 } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\nimport type {\n\tAgent,\n\tAgentContext,\n\tAgentEvent,\n\tAgentLoopTurnUpdate,\n\tAgentMessage,\n\tAgentState,\n\tAgentTool,\n\tPrepareNextTurnContext,\n\tThinkingLevel,\n} from \"@agent-forge/agent-core\";\nimport type { Api, Transport } from \"@agent-forge/ai\";\nimport { contentText } from \"@agent-forge/ai\";\nimport type { AssistantMessage, ImageContent, Model, TextContent, ToolResultMessage } from \"@agent-forge/ai/compat\";\nimport {\n\tclampThinkingLevel,\n\tcleanupSessionResources,\n\tgetSupportedThinkingLevels,\n\tstreamSimple,\n} from \"@agent-forge/ai/compat\";\nimport type { MemoryStorageComponentsV1 } from \"@agent-forge/plugin-sdk\";\nimport type { DurableServiceV1 } from \"../durable/durable-service.ts\";\nimport type { SummaryAttemptRecordV1 } from \"../host/summary-retry.ts\";\nimport type { ObservabilityPlugin } from \"../plugins/observability-types.ts\";\nimport { stripFrontmatter } from \"../utils/frontmatter.ts\";\nimport {\n\tabortBash,\n\tcaptureBashEpoch,\n\temitUserBash,\n\texecuteBash,\n\tflushPendingBashMessages,\n\tisBashEpochCurrent,\n\trecordBashResult,\n} from \"./agent-session-bash.ts\";\nimport {\n\ttype CompactionCancelledResult,\n\tcheckCompaction,\n\tcompactBeforeNextAssistantResponse,\n\tcompactInternal,\n\tenqueueCompaction,\n\tnavigateTree,\n\trunAutoCompaction,\n} from \"./agent-session-compaction.ts\";\nimport {\n\tapplyContextTransition,\n\tassertContextTransitionCurrent,\n\tbeginContextTransitionFence,\n\tcopyContextMessages,\n\tenqueueContextTransition,\n\tisContextTransitionCurrent,\n\treplaceContext,\n\trequireContextStrategy,\n\trequireIdleContextOperation,\n\trestoreContext,\n\trestoreContextTransition,\n\tsnapshotContext,\n} from \"./agent-session-context.ts\";\nimport {\n\tbuildExtensionResourcePaths,\n\tcollectCommandInfos,\n\textendResourcesFromExtensions,\n\tgetExtensionSourceLabel,\n} from \"./agent-session-extensions.ts\";\nimport {\n\ttype AgentSessionInternals,\n\tdetachedSessionSnapshot,\n\ttype ToolDefinitionEntry,\n} from \"./agent-session-internal.ts\";\nimport {\n\tdispatchAgentEndLifecycle,\n\tdispatchAgentSettledLifecycle,\n\tdispatchAgentStartLifecycle,\n\tdispatchAgentTaskSettledLifecycle,\n\tdispatchBeforeAgentStartLifecycle,\n\tdispatchBeforeAgentStartV2Lifecycle,\n\tdispatchContextReplacedLifecycle,\n\tdispatchInputGateBlockedLifecycle,\n\tdispatchInputReceivedLifecycle,\n\tdispatchMessageEndLifecycle,\n\tdispatchMessageStartLifecycle,\n\tdispatchModelResponseLifecycle,\n\tdispatchModelStreamLifecycle,\n\tdispatchSessionEndLifecycle,\n\tdispatchSessionEntryAppendedLifecycle,\n\tdispatchSessionInfoChangedLifecycle,\n\tdispatchSessionReloadLifecycle,\n\tdispatchSessionStartLifecycle,\n\tdispatchThinkingLevelSelectLifecycle,\n\tdispatchToolCommitLifecycle,\n\tdispatchToolExecutionStartLifecycle,\n\tdispatchToolResultLifecycle,\n\tdispatchTurnEndLifecycle,\n\tdispatchTurnStartLifecycle,\n\tobserveLifecycleDeliveryError,\n} from \"./agent-session-lifecycle.ts\";\nimport { createLoopWiring, wireDefaultLoop } from \"./agent-session-loop.ts\";\nimport { type LoopExecutor, postAgentRun, runPromptLoop } from \"./agent-session-loop-runner.ts\";\nimport {\n\taddPersistedDefaultToNonEmptyScope,\n\tcycleAvailableModel,\n\tcycleModel,\n\tcycleScopedModel,\n\temitModelSelect,\n\tgetScopedModels,\n\tgetThinkingLevelForModelSwitch,\n\tmodelFactsView,\n\tsetModel,\n\tsetScopedModels,\n} from \"./agent-session-model.ts\";\nimport {\n\texportToHtml,\n\texportToJsonl,\n\ttype ForkableUserMessage,\n\tgetContextUsage,\n\tgetLastAssistantText,\n\tgetSessionStats,\n\tgetUserMessagesForForking,\n} from \"./agent-session-projection.ts\";\nimport { isRetryableError, prepareRetry, willRetryAfterAgentEnd } from \"./agent-session-retry.ts\";\nimport type { ReplacedSessionContext } from \"./agent-session-runtime.ts\";\nimport {\n\tgetAllTools,\n\tgetCapabilitySkills,\n\tgetToolDefinition,\n\tnormalizePromptGuidelines,\n\tnormalizePromptSnippet,\n\trebuildSystemPrompt,\n\trefreshBootstrapSkills,\n\trefreshToolRegistry,\n\tsetActiveToolsByName,\n\tsyncCapabilityTools,\n\tvalidateCapabilitySkillConflicts,\n} from \"./agent-session-tools.ts\";\nimport { formatNoApiKeyFoundMessage, formatNoModelSelectedMessage } from \"./auth-guidance.ts\";\nimport type { BashResult } from \"./bash-executor.ts\";\nimport type { CompactionResult } from \"./compaction/index.ts\";\nimport { THINKING_LEVEL_OPTIONS } from \"./defaults.ts\";\nimport type { AgentTaskSettledEventDataV1 } from \"./extensions/bootstrap-lifecycle.ts\";\nimport { definitionSnapshot, detachedSnapshot } from \"./extensions/capability-runtime-snapshot.ts\";\nimport type { TraceServiceV1 } from \"./extensions/capability-runtime-types.ts\";\nimport {\n\ttype AgentCompositionAPI,\n\ttype AgentLoopWiringV1,\n\ttype AgentTaskAdapter,\n\ttype AgentTaskSessionSummaryV1,\n\ttype AgentTaskSessionViewV1,\n\tBOOTSTRAP_AGENT_LOOP_PLUGIN_ID,\n\tBOOTSTRAP_LIFECYCLE_PLUGIN_ID,\n\tBOOTSTRAP_SKILLS_PLUGIN_ID,\n\ttype AgentContextCommitRequestV1 as CanonicalAgentContextCommitRequestV1,\n\ttype AgentContextCommitResultV1 as CanonicalAgentContextCommitResultV1,\n\ttype AgentContextSnapshotV1 as CanonicalAgentContextSnapshotV1,\n\ttype CapabilityCommandResult,\n\ttype CapabilityPluginFactory,\n\ttype CapabilityPluginHandle,\n\ttype CapabilityRuntime,\n\ttype ContextOperationOptions,\n\tcreateCapabilityRuntime,\n\tDEFAULT_BRANCH_SUMMARY_POLICY_NAME,\n\tDEFAULT_COMPACTION_POLICY_NAME,\n\tDEFAULT_OVERFLOW_POLICY_NAME,\n\tDEFAULT_RETRY_POLICY_NAME,\n\tDEFAULT_RUN_LOOP_STRATEGY_NAME,\n\tEXPERIMENTAL_PUBLIC_API_VERSION,\n\ttype ExecutionFactsV1,\n\ttype HostMode,\n\ttype InteractionHostV1,\n\tinstallBootstrapAgentLoop,\n\tinstallBootstrapLifecycle,\n\tinstallSessionBootstrapSkills,\n\ttype LoggerRecord,\n\tloadCapabilityPluginFromManifest,\n\tloadCapabilityPlugin as loadCapabilityPluginRuntime,\n\ttype ModelStreamEventDataV1,\n\ttype OutputArtifactRef,\n\ttype PluginManifest,\n\ttype PromptOutcome,\n\ttype SessionAPI,\n\ttype SessionRevisionV1,\n} from \"./extensions/index.ts\";\nimport type { ContextUsage, PluginConfig, SubagentCommunicationWiringV1 } from \"./extensions/public-api.ts\";\nimport { t } from \"./i18n/index.ts\";\nimport type { InputSource } from \"./input-source.ts\";\nimport type { HostLogContext, HostLogger } from \"./logger.ts\";\nimport type { BashExecutionMessage, CustomMessage } from \"./messages.ts\";\nimport type { ModelRuntime } from \"./model-runtime.ts\";\nimport { expandPromptTemplate, type PromptTemplate } from \"./prompt-templates.ts\";\nimport type { ResourceLoader } from \"./resource-loader.ts\";\nimport { createSessionJsonlArtifact } from \"./session-export.ts\";\nimport type { BranchSummaryEntry, SessionEntry, SessionEntryProjection, SessionManager } from \"./session-manager.ts\";\nimport type { SessionStartMetadata } from \"./session-start.ts\";\nimport type { SettingsManager } from \"./settings-manager.ts\";\nimport type { Skill } from \"./skills.ts\";\nimport type { SourceInfo } from \"./source-info.ts\";\nimport type { BuildSystemPromptOptions } from \"./system-prompt.ts\";\nimport type { BashOperations } from \"./tools/bash-operations.ts\";\nimport { createCapabilityMountTools, type DeferredCapabilityCardV1 } from \"./tools/capability-mount.ts\";\nimport type { ToolDefinition, ToolInfo } from \"./tools/tool-definition.ts\";\nimport { createToolSearchTool } from \"./tools/tool-search.ts\";\n\n// ============================================================================\n// Skill Block Parsing\n// ============================================================================\n\n/** Parsed skill block from a user message */\nexport interface ParsedSkillBlock {\n\tname: string;\n\tlocation: string;\n\tcontent: string;\n\tuserMessage: string | undefined;\n}\n\n/**\n * Parse a skill block from message text.\n * Returns null if the text doesn't contain a skill block.\n */\nexport function parseSkillBlock(text: string): ParsedSkillBlock | null {\n\tconst match = text.match(/^<skill name=\"([^\"]+)\" location=\"([^\"]+)\">\\n([\\s\\S]*?)\\n<\\/skill>(?:\\n\\n([\\s\\S]+))?$/);\n\tif (!match) return null;\n\treturn {\n\t\tname: match[1],\n\t\tlocation: match[2],\n\t\tcontent: match[3],\n\t\tuserMessage: match[4]?.trim() || undefined,\n\t};\n}\n\n/**\n * Custom entry type marking a cross-suite resume (设计 §10.1 最小可用版): the\n * session was created under one suite but its context was reassembled under\n * another. Entry data: `{ originalSuiteId, currentSuiteId }`.\n */\nexport const SUITE_MISMATCH_SESSION_ENTRY_TYPE = \"suite_mismatch\";\n\n/** Session-specific events that extend the core AgentEvent */\nexport type AgentSessionEvent =\n\t| Exclude<AgentEvent, { type: \"agent_end\" }>\n\t| {\n\t\t\ttype: \"agent_end\";\n\t\t\tmessages: AgentMessage[];\n\t\t\twillRetry: boolean;\n\t }\n\t| { type: \"agent_settled\" }\n\t| {\n\t\t\ttype: \"queue_update\";\n\t\t\tsteering: readonly string[];\n\t\t\tfollowUp: readonly string[];\n\t }\n\t| { type: \"compaction_start\"; reason: \"manual\" | \"threshold\" | \"overflow\" }\n\t| { type: \"entry_appended\"; entry: SessionEntry }\n\t| { type: \"session_info_changed\"; name: string | undefined }\n\t| { type: \"thinking_level_changed\"; level: ThinkingLevel }\n\t| {\n\t\t\ttype: \"compaction_end\";\n\t\t\treason: \"manual\" | \"threshold\" | \"overflow\";\n\t\t\tresult: CompactionResult | undefined;\n\t\t\taborted: boolean;\n\t\t\twillRetry: boolean;\n\t\t\terrorMessage?: string;\n\t }\n\t| { type: \"compaction_skipped\"; reason: \"threshold\" | \"overflow\"; cause: \"nothing_to_compact\" }\n\t| { type: \"auto_retry_start\"; attempt: number; maxAttempts: number; delayMs: number; errorMessage: string }\n\t| { type: \"auto_retry_end\"; success: boolean; attempt: number; finalError?: string }\n\t| {\n\t\t\ttype: \"summarization_retry_scheduled\";\n\t\t\tattempt: number;\n\t\t\tmaxAttempts: number;\n\t\t\tdelayMs: number;\n\t\t\terrorMessage: string;\n\t }\n\t| { type: \"summarization_retry_attempt_start\"; source: \"branchSummary\" }\n\t| {\n\t\t\ttype: \"summarization_retry_attempt_start\";\n\t\t\tsource: \"compaction\";\n\t\t\treason: \"manual\" | \"threshold\" | \"overflow\";\n\t }\n\t| {\n\t\t\ttype: \"summarization_retry_finished\";\n\t\t\tsource: { source: \"branchSummary\" } | { source: \"compaction\"; reason: \"manual\" | \"threshold\" | \"overflow\" };\n\t\t\tattempts: readonly SummaryAttemptRecordV1[];\n\t }\n\t| { type: \"bash_execution_update\"; id?: string; delta: string }\n\t| CapabilityCommandResultEvent;\n\n/** Result returned by a capability command, rendered by each host without TUI coupling. */\nexport type CapabilityCommandResultEvent = {\n\ttype: \"capability_command_result\";\n\tcommand: string;\n\tsource: string;\n\tresult: CapabilityCommandResult;\n};\n\n/** Listener function for agent session events */\nexport type AgentSessionEventListener = (event: AgentSessionEvent) => void;\n\n/**\n * Listener for each output artifact committed through this session's capability\n * runtime. Host adapters mirror the payload into durable storage; the runtime\n * itself stays storage-agnostic. `bytes` is the live buffer shared with the\n * in-memory artifact store: listeners must treat it as read-only.\n */\nexport type OutputArtifactCommitListener = (artifact: {\n\treadonly ref: OutputArtifactRef;\n\treadonly bytes: Uint8Array;\n}) => void;\n\n/**\n * Why a turn was aborted (adapted from codex's TurnAbortReason,\n * protocol.rs:4173): \"interrupted\" is host/user intent, \"replaced\" is session\n * teardown/reload. codex's \"budget_limited\" is deliberately omitted — turn\n * budgets cap what the agent can do, so Agent Forge does not carry the concept.\n */\nexport type TurnAbortReason = \"interrupted\" | \"replaced\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface AgentSessionConfig {\n\tagent: Agent;\n\tsessionManager: SessionManager;\n\tsettingsManager: SettingsManager;\n\tcwd: string;\n\t/** Models to cycle through with Ctrl+P (from --models flag) */\n\tscopedModels?: Array<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>;\n\t/** Resource loader for extensions, skills, prompts, themes, context files, and system prompt */\n\tresourceLoader: ResourceLoader;\n\t/** SDK custom tools registered outside extensions */\n\tcustomTools?: ToolDefinition[];\n\t/** Canonical model/auth runtime used by coding-agent internals. */\n\tmodelRuntime: ModelRuntime;\n\t/** Initial active built-in tool names. Default: [read, bash, edit, write] */\n\tinitialActiveToolNames?: string[];\n\t/** Optional allowlist of tool names. When provided, only these tool names are exposed. */\n\tallowedToolNames?: string[];\n\t/** Optional denylist of tool names. When provided, these tool names are not exposed. */\n\texcludedToolNames?: string[];\n\t/**\n\t * Plugin ids whose tools register normally but stay out of the default\n\t * active (prompt-visible) set; the built-in tool_search tool discovers and\n\t * activates them on demand. Explicit activation (allowlist, SDK, or\n\t * setActiveTools) overrides the deferral.\n\t */\n\tdeferredToolPluginIds?: readonly string[];\n\t/**\n\t * On-demand capability cards (插件按需挂载与能力手册设计 §4/§5): manifests\n\t * declaring `activation: \"on-demand\"` surface here. Registers the\n\t * capability_mount / capability_unmount pair; the system prompt carries a\n\t * one-line card per still-deferred capability, and mounting returns the\n\t * plugin's AI manual. Cards may also arrive after construction through\n\t * {@link registerDeferredCapabilityCards} (the sdk assembly resolves them\n\t * once the plugin pool settles).\n\t */\n\tdeferredCapabilityCards?: readonly DeferredCapabilityCardV1[];\n\t/**\n\t * Bootstrap plugin ids to SKIP at session construction (宪法 §1: bootstrap\n\t * 插件可禁用)。Id values are the exported BOOTSTRAP_*_PLUGIN_ID constants\n\t * (\"agent-forge.bootstrap-skills\" etc.). A disabled bootstrap plugin leaves\n\t * its surface absent — visible via plugin rejections/diagnostics, never a\n\t * silent kernel downgrade. The default coding tools are no longer part of\n\t * this family (D-082 批 1): they load through the bundled manifest channel,\n\t * whose disable face is the sdk's `disabledPluginIds`.\n\t */\n\tdisabledBootstrapPlugins?: readonly string[];\n\t/** Session start metadata dispatched to the capability lifecycle on session start. */\n\tsessionStartEvent?: SessionStartMetadata;\n\t/** Core capability mode; defaults to full-control for compatibility. */\n\tcapabilityMode?: HostMode;\n\t/** Optional external context strategy name. Missing registrations fail at request time. */\n\tcontextStrategyName?: string;\n\t/** Optional retry policy supplied by a capability plugin. Missing registrations fail when a retry is evaluated. */\n\tretryPolicyName?: string;\n\t/** Optional automatic compaction policy supplied by a capability plugin. */\n\tcompactionPolicyName?: string;\n\t/** Optional provider overflow policy supplied by a capability plugin. */\n\toverflowPolicyName?: string;\n\t/** Optional branch summary policy supplied by a capability plugin. */\n\tbranchSummaryPolicyName?: string;\n\t/**\n\t * Optional post-run continuation strategy supplied by a capability plugin.\n\t * Missing registrations fall back to the default continuation behavior.\n\t */\n\trunLoopStrategyName?: string;\n\t/** Host adapter for isolated child agent tasks. Omitted hosts do not expose the agents capability. */\n\tagentTaskAdapter?: AgentTaskAdapter;\n\t/**\n\t * Durable replay channel for agent task terminal outcomes (agent-result-replay-v1).\n\t * Only meaningful alongside `agentTaskAdapter` (the replay feature requires the\n\t * agents capability); stored on the instance so runtime rebuilds (reload) keep\n\t * the wiring. The host owns the writer claim lifecycle.\n\t */\n\tagentTaskResults?: {\n\t\treadonly store: DurableServiceV1;\n\t\treadonly writerId: string;\n\t};\n\t/**\n\t * Bounded read-only reader for persisted subagent session transcripts (D-060 S3).\n\t * Only meaningful alongside `agentTaskAdapter`; the host enforces scoping (a\n\t * session may only read transcripts whose parent is itself) by returning\n\t * undefined for anything out of scope.\n\t */\n\tagentSessionReader?: (sessionId: string) => Promise<AgentTaskSessionViewV1 | undefined>;\n\t/**\n\t * Lister for this session's own subagent session summaries, newest first\n\t * (D-060 model-face inventory). Only meaningful alongside `agentTaskAdapter`;\n\t * the host scopes it to this session's children.\n\t */\n\tagentSessionLister?: () => Promise<AgentTaskSessionSummaryV1[]>;\n\t/** Host adapter for the versioned AgentDefinition/AgentInstance facade. */\n\tagentComposition?: AgentCompositionAPI;\n\t/** Host adapter for cancellable interaction tasks. Omitted hosts do not expose the interaction capability. */\n\tinteractionHost?: InteractionHostV1;\n\t/**\n\t * Session-nature orientation text (suite persona, 设计 §6.2). Kept on the\n\t * session so every system prompt rebuild (tool-set changes, extension\n\t * resource refreshes) re-injects it.\n\t */\n\torientationPrompt?: string;\n\t/**\n\t * Optional durable preference card injected right after the persona on\n\t * every system prompt rebuild (kept on the session like\n\t * {@link orientationPrompt}). The first-party memory plugin stopped using\n\t * this channel when it moved into its own package (D-075 S4 fourth batch —\n\t * its assistant card now rides the transformContext loop hook); the field\n\t * stays a generic host-assembly face for embedders with their own card.\n\t */\n\tpreferenceCard?: string;\n\t/**\n\t * Optional filter applied to the legacy capability-plugin skill surface\n\t * (`runtime.listSkills()`) after duplicate-name exclusion. Default:\n\t * identity (no filtering). The suite assembler wires filterSuiteSkills\n\t * here; the session itself stays suite-unaware.\n\t */\n\tcapabilitySkillsFilter?: (skills: Skill[]) => Skill[];\n\t/**\n\t * 宿主进程日志器(设计 §5):注入后插件日志镜像、内建能力装载失败等会话级\n\t * 事实落进程日志;缺省 = 宿主显式关闭进程日志(显式契约,非默认降级),\n\t * 所有依赖它的打点为 no-op。\n\t */\n\thostLogger?: HostLogger;\n\t/**\n\t * 插件日志镜像共享 ref(会话轨迹 plugin.log,设计 §7.2):装配域 observability\n\t * 插件工厂创建时写入镜像门面方法、插件 dispose 时置空;runtime 日志 sink 在\n\t * 每条插件日志上先经它镜像进轨迹,再按级别落 hostLogger。\n\t * 装配域写入、会话生命周期持有的可变共享 ref;空 = 无镜像(no-op)。\n\t */\n\tlogRecordMirrorRef?: { current?: (record: LoggerRecord) => void };\n\t/**\n\t * /metrics 命令的数据源共享 ref(observability 插件工厂创建时写入\n\t * plugin.getMetrics、dispose 时置空;宿主装配完成后读取接进命令 options)。\n\t * 空 = 插件未挂载(/metrics 显示未装配警告)。\n\t */\n\tobservabilityGetMetricsRef?: { current?: ObservabilityPlugin[\"getMetrics\"] };\n\t/**\n\t * Host agent directory (D-075 S4 second batch): surfaced to capability\n\t * plugins as `api.host.agentDir` so disk-state plugins (e.g. the\n\t * session-share config channel) can locate `<agentDir>/capabilities/`\n\t * files. Absent on hosts without an agent dir.\n\t */\n\tagentDir?: string;\n\t/**\n\t * Subagent communication wiring (D-075 S4 third batch): surfaced to\n\t * capability plugins as `api.host.communication`. The parent assembly\n\t * injects `drainEscalations`; child (leaf) assemblies receive the\n\t * post/drainInbox closures with the child identity bound by the parent\n\t * scope. Absent = the delegation plugins stay default-off (D-060 S4).\n\t */\n\tcommunication?: SubagentCommunicationWiringV1;\n\t/**\n\t * Turn-scoped host context (D-075 S4 third batch): surfaced to capability\n\t * plugins as `api.host.turnContext`. `backgroundDigestSink` receives the\n\t * bounded JSON digest line of each settled background delegation;\n\t * `getTurnCorrelationId` returns the parent turn's correlation id at\n\t * submission time. Absent = no push notification or turn-lineage\n\t * attribution for background delegations.\n\t */\n\tturnContext?: {\n\t\tbackgroundDigestSink?: (line: string) => void;\n\t\tgetTurnCorrelationId?: () => string | undefined;\n\t};\n\t/**\n\t * Role ids associated with the active suite (D-075 S4 third batch):\n\t * surfaced to capability plugins as `api.host.roleAssociations`. Role\n\t * definitions are disk-only (`<agentDir>/roles/<id>.json`); only\n\t * associated ids surface in the delegation tool menu. Absent = no roles.\n\t */\n\troleAssociations?: readonly string[];\n\t/**\n\t * Memory storage components (D-075 S4 fourth batch): surfaced to capability\n\t * plugins as `api.host.memoryStorage`. The first-party memory plugin binds\n\t * the injected store/ledger factories and vector components in place of\n\t * its built-in defaults. Absent = the plugin runs its own local\n\t * implementation.\n\t */\n\tmemoryStorage?: MemoryStorageComponentsV1;\n\t/**\n\t * Host trace service (D-075 S4 second batch): injected into the capability\n\t * runtime as `api.trace`/`api.traceSinkOptions` so the installed\n\t * observability package binds its trace sink; absent = plugins stay\n\t * trace-free.\n\t */\n\ttraceService?: TraceServiceV1;\n}\n\n/** How a queued steer/follow_up input was dispatched: \"handled\" (consumed by a handler, not queued) or \"queued\". */\nexport type QueuedInputDisposition = \"handled\" | \"queued\";\n/** How an accepted prompt was dispatched: handled (consumed), queued (during a run), or started (run begins). */\nexport type PromptDisposition = QueuedInputDisposition | \"started\";\n\n/** Options for AgentSession.prompt() */\nexport interface PromptOptions {\n\t/** Whether to dispatch extension commands and expand skill commands and prompt templates (default: true) */\n\texpandPromptTemplates?: boolean;\n\t/** Image attachments */\n\timages?: ImageContent[];\n\t/** When streaming, how to queue the message: \"steer\" (interrupt) or \"followUp\" (wait). Required if streaming. */\n\tstreamingBehavior?: \"steer\" | \"followUp\";\n\t/** Source of the input, reported in the input.received lifecycle facts. Defaults to \"interactive\". */\n\tsource?: InputSource;\n\t/**\n\t * Internal hook used by RPC mode to observe how an accepted prompt was dispatched\n\t * (\"handled\", \"queued\", or \"started\"). Not called if the prompt is rejected.\n\t */\n\tpreflightResult?: (disposition: PromptDisposition) => void;\n}\n\n/** Options for model/thinking mutations. */\nexport interface ModelMutationOptions {\n\t/** Persist the new value to global defaults. Defaults to session-only. */\n\tpersist?: boolean;\n}\n\n/** Result from cycleModel() */\nexport interface ModelCycleResult {\n\tmodel: Model<Api>;\n\tthinkingLevel: ThinkingLevel;\n\t/** Whether cycling through scoped models (--models flag) or all available */\n\tisScoped: boolean;\n}\n\n/** Session statistics for /session command */\nexport interface SessionStats {\n\tsessionFile: string | undefined;\n\tsessionId: string;\n\tuserMessages: number;\n\tassistantMessages: number;\n\ttoolCalls: number;\n\ttoolResults: number;\n\ttotalMessages: number;\n\ttokens: {\n\t\tinput: number;\n\t\toutput: number;\n\t\tcacheRead: number;\n\t\tcacheWrite: number;\n\t\ttotal: number;\n\t};\n\tcost: number;\n\tcontextUsage?: ContextUsage;\n}\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n// ============================================================================\n// AgentSession Class\n// ============================================================================\n\n/**\n * Core session orchestration adapter.\n *\n * The stable facade `CodingAgentFacadeV1` (docs/design/稳定门面统一入口设计.md)\n * is the only supported consumption surface for product hosts. Direct\n * consumption of this class is limited to registered carve-outs\n * (tui-private-path-contract.test.ts allowlists and the §2.7/§2.9 deferred\n * registrations in the design doc).\n *\n * @internal\n */\nexport class AgentSession {\n\treadonly agent: Agent;\n\treadonly sessionManager: SessionManager;\n\treadonly settingsManager: SettingsManager;\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _scopedModels: Array<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>;\n\n\t// Event subscription state\n\tprivate _unsubscribeAgent?: () => void;\n\tprivate _eventListeners: AgentSessionEventListener[] = [];\n\tprivate _isAgentRunActive = false;\n\tprivate _idleWaitPromise: Promise<void> | undefined;\n\tprivate _resolveIdleWait: (() => void) | undefined;\n\n\t/** Tracks pending steering messages for UI display. Removed when delivered. */\n\tprivate _steeringMessages: string[] = [];\n\t/** Tracks pending follow-up messages for UI display. Removed when delivered. */\n\tprivate _followUpMessages: string[] = [];\n\t/** Messages queued to be included with the next user prompt as context (\"asides\"). */\n\tprivate _pendingNextTurnMessages: CustomMessage[] = [];\n\t/** Context-only custom messages queued during a run, flushed once the current turn's tool results are in. */\n\tprivate _pendingCustomMessages: CustomMessage[] = [];\n\n\t// Compaction state\n\t/** Serializes manual and automatic compaction, including their projections. */\n\tprivate _compactionQueue: Promise<void> = Promise.resolve();\n\tprivate _compactionAbortController: AbortController | undefined = undefined;\n\tprivate _autoCompactionAbortController: AbortController | undefined = undefined;\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _overflowRecoveryAttempted = false;\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _overflowTrimStage = 0;\n\n\t// Branch summarization state\n\tprivate _branchSummaryAbortController: AbortController | undefined = undefined;\n\tprivate _branchSummaryPromise: Promise<unknown> | undefined = undefined;\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _resolveBranchSummaryPromise: (() => void) | undefined = undefined;\n\n\t// Retry state\n\tprivate _retryAbortController: AbortController | undefined = undefined;\n\t/** Cancellation boundary for retry/overflow policy decisions in the active agent loop. */\n\tprivate _policyDecisionAbortController: AbortController | undefined = undefined;\n\tprivate _retryAttempt = 0;\n\t/** Cancellation signal for the capability command currently executing through prompt(). */\n\tprivate _commandAbortController: AbortController | undefined = undefined;\n\t/**\n\t * Parent-session cancel fence for agent tasks (D-044 §4.2). Consumed once\n\t * per task creation through the runtime's `parentSignal` getter; replaced\n\t * after every abort/runtime rebuild so later tasks bind to a fresh signal.\n\t */\n\tprivate _agentTaskScopeAbortController = new AbortController();\n\tprivate _activeCapabilityCommand: Promise<void> | undefined;\n\tprivate _activeCompactionPromise: Promise<unknown> | undefined;\n\t/** Prevents new mutable work from entering while the session is being replaced. */\n\tprivate _reloadInProgress = false;\n\t/** Monotonic committed reload generation, distinct from disposal and bash fences. */\n\tprivate _reloadGeneration = 0;\n\t/** Generation fence for context projections that may outlive a runtime replacement. */\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _contextEpoch = 0;\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _contextTransitionAbortController = new AbortController();\n\t/** Serializes context transitions and lets reload/dispose drain them before teardown. */\n\tprivate _activeContextTransition: Promise<unknown> | undefined;\n\t/** Monotonic revision for the public context snapshot/commit facade. */\n\tprivate _contextRevision = 0;\n\t/** Serializes public context commits so expectedRevision is a real CAS fence. */\n\tprivate _contextCommitQueue: Promise<void> = Promise.resolve();\n\n\t// Bash execution state\n\tprivate readonly _bashAbortControllers = new Set<AbortController>();\n\t/** Whole bash operations, including their final session-history write. */\n\tprivate readonly _activeBashPromises = new Set<Promise<unknown>>();\n\t/** Fences mode-level bash results captured before a runtime replacement. */\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _bashEpoch = 0;\n\tprivate _pendingBashMessages: BashExecutionMessage[] = [];\n\n\tprivate _turnIndex = 0;\n\n\tprivate _resourceLoader: ResourceLoader;\n\tprivate _customTools: ToolDefinition[];\n\tprivate _deferredToolPluginIds: ReadonlySet<string>;\n\tprivate _deferredCapabilityCards: DeferredCapabilityCardV1[] = [];\n\tprivate _capabilityMountToolsRegistered = false;\n\t/** Abort reason supplied to the in-flight abort(); consumed by the interruption marker. */\n\tprivate _pendingAbortReason: TurnAbortReason | undefined;\n\t/** Set when the in-flight prompt run produced an aborted terminal assistant turn. */\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _currentRunAborted = false;\n\t/** Most recent abort reason; persists after abort() returns so prompt() can report it. */\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _lastAbortReason: TurnAbortReason | undefined;\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _baseToolDefinitions: Map<string, ToolDefinition> = new Map();\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _baseToolSources: Map<string, SourceInfo> = new Map();\n\tprivate _capabilityRuntime?: CapabilityRuntime;\n\t/** Output-artifact commit listeners registered through {@link onOutputArtifactCommit}. */\n\tprivate readonly _outputArtifactCommitListeners = new Set<OutputArtifactCommitListener>();\n\t/**\n\t * Stable commit dispatcher handed to every CapabilityRuntime this session\n\t * builds; listeners registered on the session survive runtime rebuilds.\n\t */\n\tprivate readonly _dispatchOutputArtifactCommit: OutputArtifactCommitListener = (artifact) => {\n\t\tfor (const listener of [...this._outputArtifactCommitListeners]) listener(artifact);\n\t};\n\tprivate _bootstrapSkillsHandle?: CapabilityPluginHandle;\n\tprivate _bootstrapRetryHandle?: CapabilityPluginHandle;\n\tprivate _bootstrapCompactionHandle?: CapabilityPluginHandle;\n\tprivate _bootstrapBranchSummaryHandle?: CapabilityPluginHandle;\n\tprivate _bootstrapOverflowHandle?: CapabilityPluginHandle;\n\tprivate _bootstrapAgentLoopHandle?: CapabilityPluginHandle;\n\tprivate _bootstrapLifecycleHandle?: CapabilityPluginHandle;\n\tprivate _capabilityPlugins = new Map<string, CapabilityPluginHandle>();\n\tprivate _inlineCapabilityPlugins = new Map<string, { manifest: PluginManifest; factory: CapabilityPluginFactory }>();\n\t/**\n\t * 宿主装配链经 loadCapabilityPluginManifest 声明的 configOverride(按解析后\n\t * manifest 路径)。reload 重装载循环据此回放 sdk 注入的会话事实(D-082 批 1:\n\t * coding-tools 的 cwd/read/bash 等),会话生命周期内随同路径显式装载覆盖。\n\t */\n\tprivate _capabilityPluginConfigOverrides = new Map<string, PluginConfig>();\n\tprivate _isDisposingCapabilityPlugins = false;\n\t/**\n\t * 工具表变更钩子的两道门(见 _buildRuntime 的 onToolRegistryChange):\n\t * - `_toolRegistryHookReady`:构造期门。_buildRuntime 求值阶段 bootstrap 插件\n\t * 注册即触发 notify,而此时内部状态未就绪(观察回调会抛),构造完成后既有\n\t * 边界(_buildRuntime 尾部的显式 sync + refresh)已兜底,跳过不丢状态。\n\t * - `_suspendToolRegistryHookRefresh`:插件卸载恢复链的中间态挂起位。恢复过程\n\t * 会先删新注册、后恢复被替换者,中间 notify 的工具表是暂态(活跃名暂时缺\n\t * 席);该窗口内刷新会把缺席名从活动集永久剔除。装卸边界在 dispose 完成后\n\t * 自行兜底刷新。\n\t */\n\tprivate _suspendToolRegistryHookRefresh = false;\n\tprivate _toolRegistryHookReady = false;\n\tprivate _disposePromise?: Promise<void>;\n\tprivate _cwd: string;\n\tprivate _initialActiveToolNames?: string[];\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _allowedToolNames?: Set<string>;\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _excludedToolNames?: Set<string>;\n\tprivate _disabledBootstrapPlugins?: readonly string[];\n\tprivate _sessionStartEvent: SessionStartMetadata;\n\tprivate _capabilityMode: HostMode;\n\tprivate _contextStrategyName?: string;\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _retryPolicyName: string;\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _compactionPolicyName: string;\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _branchSummaryPolicyName: string;\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _overflowPolicyName: string;\n\t/** Post-run continuation strategy name; missing registrations fall back to the host candidate. */\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _runLoopStrategyName: string;\n\t/**\n\t * Internal loop-executor seam (D-043 G3); no public config, distinct from\n\t * runLoopStrategyName (a per-continuation veto policy).\n\t */\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _loopExecutor: LoopExecutor | undefined;\n\t/** The agent's construction-time prepare adapter, captured once by the loop wiring. */\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _initialPrepareNextTurn?:\n\t\t| ((\n\t\t\t\tcontext: PrepareNextTurnContext,\n\t\t\t\tsignal?: AbortSignal,\n\t\t ) => Promise<AgentLoopTurnUpdate | undefined> | AgentLoopTurnUpdate | undefined)\n\t\t| undefined;\n\tprivate _agentTaskAdapter?: AgentTaskAdapter;\n\tprivate _agentTaskResults?: {\n\t\treadonly store: DurableServiceV1;\n\t\treadonly writerId: string;\n\t};\n\tprivate _agentSessionReader?: (sessionId: string) => Promise<AgentTaskSessionViewV1 | undefined>;\n\tprivate _agentSessionLister?: () => Promise<AgentTaskSessionSummaryV1[]>;\n\tprivate _agentComposition?: AgentCompositionAPI;\n\tprivate _interactionHost?: InteractionHostV1;\n\n\tprivate _modelRuntime: ModelRuntime;\n\tprivate _modelStreamCounter = 0;\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _modelStreamState: { streamId: string; sequence: number } | undefined;\n\t/** Correlation id shared by every in-turn lifecycle dispatch of the active prompt run. */\n\tprivate _turnCorrelationId: string | undefined;\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _turnCorrelationCounter = 0;\n\n\t// Tool registry for extension getTools/setTools\n\tprivate _toolRegistry: Map<string, AgentTool> = new Map();\n\tprivate _toolDefinitions: Map<string, ToolDefinitionEntry> = new Map();\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _toolPromptSnippets: Map<string, string> = new Map();\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _toolPromptGuidelines: Map<string, string[]> = new Map();\n\n\t// Base system prompt (without extension appends) - used to apply fresh appends each turn\n\tprivate _baseSystemPrompt = \"\";\n\tprivate _baseSystemPromptOptions!: BuildSystemPromptOptions;\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _systemPromptOverride?: string;\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _orientationPrompt?: string;\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _preferenceCard?: string;\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _capabilitySkillsFilter?: (skills: Skill[]) => Skill[];\n\tprivate _hostLogger?: HostLogger;\n\tprivate _logRecordMirrorRef?: { current?: (record: LoggerRecord) => void };\n\tprivate _observabilityGetMetricsRef?: { current?: ObservabilityPlugin[\"getMetrics\"] };\n\tprivate _agentDir?: string;\n\tprivate _communication?: SubagentCommunicationWiringV1;\n\tprivate _turnContext?: {\n\t\tbackgroundDigestSink?: (line: string) => void;\n\t\tgetTurnCorrelationId?: () => string | undefined;\n\t};\n\tprivate _roleAssociations?: readonly string[];\n\tprivate _memoryStorage?: MemoryStorageComponentsV1;\n\tprivate _traceService?: TraceServiceV1;\n\n\tconstructor(config: AgentSessionConfig) {\n\t\tthis.agent = config.agent;\n\t\tthis.sessionManager = config.sessionManager;\n\t\tthis._contextRevision = this.sessionManager.getRevision().sequence;\n\t\tthis.settingsManager = config.settingsManager;\n\t\tthis._scopedModels = config.scopedModels ?? [];\n\t\tthis._resourceLoader = config.resourceLoader;\n\t\tthis._customTools = config.customTools ?? [];\n\t\tthis._deferredToolPluginIds = new Set(config.deferredToolPluginIds ?? []);\n\t\tthis._deferredCapabilityCards = [...(config.deferredCapabilityCards ?? [])];\n\t\tif (this._deferredToolPluginIds.size > 0) {\n\t\t\tthis._customTools.push(\n\t\t\t\tcreateToolSearchTool({\n\t\t\t\t\tlistAllToolNames: () => Array.from(this._toolRegistry.keys()),\n\t\t\t\t\tgetToolInfo: (name) => {\n\t\t\t\t\t\tconst definition = this._toolDefinitions.get(name)?.definition;\n\t\t\t\t\t\treturn definition ? { name: definition.name, description: definition.description } : undefined;\n\t\t\t\t\t},\n\t\t\t\t\tgetActiveToolNames: () => this.getActiveToolNames(),\n\t\t\t\t\tsetActiveToolsByName: (toolNames) => this.setActiveToolsByName(toolNames),\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (this._deferredCapabilityCards.length > 0) {\n\t\t\tthis._capabilityMountToolsRegistered = true;\n\t\t\tthis._customTools.push(...this._createCapabilityMountTools());\n\t\t}\n\t\tthis._cwd = config.cwd;\n\t\tthis._modelRuntime = config.modelRuntime;\n\t\tthis._initialActiveToolNames = config.initialActiveToolNames;\n\t\tthis._allowedToolNames = config.allowedToolNames ? new Set(config.allowedToolNames) : undefined;\n\t\tthis._excludedToolNames = config.excludedToolNames ? new Set(config.excludedToolNames) : undefined;\n\t\tthis._disabledBootstrapPlugins = config.disabledBootstrapPlugins;\n\t\tthis._sessionStartEvent = config.sessionStartEvent ?? { reason: \"startup\" };\n\t\tthis._capabilityMode = config.capabilityMode ?? \"full-control\";\n\t\tthis._contextStrategyName = config.contextStrategyName;\n\t\tthis._retryPolicyName = config.retryPolicyName ?? DEFAULT_RETRY_POLICY_NAME;\n\t\tthis._compactionPolicyName = config.compactionPolicyName ?? DEFAULT_COMPACTION_POLICY_NAME;\n\t\tthis._branchSummaryPolicyName = config.branchSummaryPolicyName ?? DEFAULT_BRANCH_SUMMARY_POLICY_NAME;\n\t\tthis._overflowPolicyName = config.overflowPolicyName ?? DEFAULT_OVERFLOW_POLICY_NAME;\n\t\tthis._runLoopStrategyName = config.runLoopStrategyName ?? DEFAULT_RUN_LOOP_STRATEGY_NAME;\n\t\tthis._agentTaskAdapter = config.agentTaskAdapter;\n\t\tthis._agentTaskResults = config.agentTaskResults;\n\t\tthis._agentSessionReader = config.agentSessionReader;\n\t\tthis._agentSessionLister = config.agentSessionLister;\n\t\tthis._agentComposition = config.agentComposition;\n\t\tthis._interactionHost = config.interactionHost;\n\t\tthis._orientationPrompt = config.orientationPrompt;\n\t\tthis._preferenceCard = config.preferenceCard;\n\t\tthis._capabilitySkillsFilter = config.capabilitySkillsFilter;\n\t\tthis._hostLogger = config.hostLogger;\n\t\tthis._logRecordMirrorRef = config.logRecordMirrorRef;\n\t\tthis._observabilityGetMetricsRef = config.observabilityGetMetricsRef;\n\t\tthis._agentDir = config.agentDir;\n\t\tthis._communication = config.communication;\n\t\tthis._turnContext = config.turnContext;\n\t\tthis._roleAssociations = config.roleAssociations;\n\t\tthis._memoryStorage = config.memoryStorage;\n\t\tthis._traceService = config.traceService;\n\n\t\t// Always subscribe to agent events for internal handling\n\t\t// (session persistence, extensions, auto-compaction, retry logic)\n\t\tthis._unsubscribeAgent = this.agent.subscribe(this._handleAgentEvent);\n\n\t\tthis._buildRuntime({\n\t\t\tactiveToolNames: this._initialActiveToolNames,\n\t\t\tincludeAllExtensionTools: true,\n\t\t});\n\t\tthis._wireDefaultLoop();\n\t}\n\n\t/**\n\t * 当前回合的 correlation id(会话轨迹设计 §4.2):活跃 prompt 回合内所有\n\t * lifecycle 信封携带的同一 correlationId(与信封同源:loop-runner 在回合\n\t * 开始写入 `_turnCorrelationId`、回合结束清除);空闲时为 undefined。只读\n\t * 事实,供宿主适配器做回合级关联(如 observability 的 llm.request traceId)。\n\t */\n\tgetTurnCorrelationId(): string | undefined {\n\t\treturn this._turnCorrelationId;\n\t}\n\n\t/**\n\t * 宿主 digest sink 面(第 4 期轨迹闭合):把一条后台委派结算行投递为\n\t * agent.task.settled@1(父会话 sessionId 由派发助手补)。派发是非致命\n\t * fire-and-forget;dispose 后 runtime 已 revoke,助手 no-op。\n\t */\n\tdispatchAgentTaskSettled(facts: {\n\t\ttaskSessionId: string;\n\t\ttaskId: string;\n\t\tstatus: AgentTaskSettledEventDataV1[\"status\"];\n\t\treasonCode?: string;\n\t}): void {\n\t\tvoid dispatchAgentTaskSettledLifecycle(this._internal, facts);\n\t}\n\n\tget modelRuntime(): ModelRuntime {\n\t\treturn this._modelRuntime;\n\t}\n\n\t/** Internal facade passed to the agent-session-* submodule functions. */\n\tprivate get _internal(): AgentSessionInternals {\n\t\treturn this as unknown as AgentSessionInternals;\n\t}\n\n\t/**\n\t * Wire the default main loop onto the Agent instance.\n\t *\n\t * The four hook positions are composed from the runtime's loop-hook chains.\n\t * Chains are read at execution time, so extension reload swaps in the new\n\t * runtime without reinstalling the wiring. The legacy extension gate and the\n\t * agent's construction-time context transform stay as chain heads (host\n\t * wiring, not plugin capabilities); the default links come from the\n\t * bootstrap agent-loop plugin and third-party links chain after them in\n\t * registration order.\n\t */\n\tprivate _wireDefaultLoop(): void {\n\t\twireDefaultLoop(this._internal);\n\t}\n\n\t/** Session-bound host state the default loop links read at execution time. */\n\tprivate _createLoopWiring(): AgentLoopWiringV1 {\n\t\treturn createLoopWiring(this._internal);\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _compactBeforeNextAssistantResponse(context: AgentContext, signal?: AbortSignal): Promise<AgentContext> {\n\t\treturn compactBeforeNextAssistantResponse(this._internal, context, signal);\n\t}\n\n\t// =========================================================================\n\t// Event Subscription\n\t// =========================================================================\n\n\t/** Emit an event to all listeners */\n\tprivate _emit(event: AgentSessionEvent): void {\n\t\tfor (const l of this._eventListeners) {\n\t\t\tl(event);\n\t\t}\n\t}\n\n\tprivate _emitQueueUpdate(): void {\n\t\tthis._emit({\n\t\t\ttype: \"queue_update\",\n\t\t\tsteering: [...this._steeringMessages],\n\t\t\tfollowUp: [...this._followUpMessages],\n\t\t});\n\t}\n\n\tprivate _getIdleWaitPromise(): Promise<void> {\n\t\tif (!this._idleWaitPromise) {\n\t\t\tthis._idleWaitPromise = new Promise((resolve) => {\n\t\t\t\tthis._resolveIdleWait = resolve;\n\t\t\t});\n\t\t}\n\t\treturn this._idleWaitPromise;\n\t}\n\n\tprivate _resolveIdleWaitIfIdle(): void {\n\t\tif (!this.isIdle || !this._resolveIdleWait) {\n\t\t\treturn;\n\t\t}\n\t\tconst resolve = this._resolveIdleWait;\n\t\tthis._idleWaitPromise = undefined;\n\t\tthis._resolveIdleWait = undefined;\n\t\tresolve();\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate async _emitAgentSettled(): Promise<void> {\n\t\tthis._isAgentRunActive = false;\n\t\ttry {\n\t\t\tthis._emit({ type: \"agent_settled\" });\n\t\t\tawait dispatchAgentSettledLifecycle(this._internal);\n\t\t} finally {\n\t\t\tthis._resolveIdleWaitIfIdle();\n\t\t}\n\t}\n\n\t// Track last assistant message for auto-compaction check\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _lastAssistantMessage: AssistantMessage | undefined = undefined;\n\t// The agent_end event and post-run handler both need the retry decision. Cache it\n\t// so policy plugins are evaluated once per assistant turn (and mock queues remain\n\t// strict/deterministic).\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _pendingRetryDecision:\n\t\t| { message: AssistantMessage; decision: Awaited<ReturnType<CapabilityRuntime[\"decideRetry\"]>> }\n\t\t| undefined = undefined;\n\n\t/** Internal handler for agent events - shared by subscribe and reconnect */\n\tprivate _handleAgentEvent = async (event: AgentEvent): Promise<void> => {\n\t\tif (event.type === \"message_start\" && event.message.role === \"assistant\") {\n\t\t\tthis._modelStreamState = {\n\t\t\t\tstreamId: `model-stream:${++this._modelStreamCounter}`,\n\t\t\t\tsequence: 0,\n\t\t\t};\n\t\t\tawait this._dispatchModelStreamLifecycle(event.message, \"start\", \"raw\");\n\t\t}\n\t\t// When a user or custom message starts, check if it's from either queue and\n\t\t// remove it BEFORE emitting. This ensures the UI sees the updated queue state.\n\t\t// Queued custom messages (sendCustomMessage deliverAs steer/followUp) are\n\t\t// registered in the copy arrays under their contentText text and delivered\n\t\t// with role \"custom\", so they must go through the same copy-removal path\n\t\t// (D-078 fix).\n\t\tif (event.type === \"message_start\" && (event.message.role === \"user\" || event.message.role === \"custom\")) {\n\t\t\tif (event.message.role === \"user\") {\n\t\t\t\tthis._overflowRecoveryAttempted = false;\n\t\t\t\tthis._overflowTrimStage = 0;\n\t\t\t}\n\t\t\t// Custom queue entries register their copy text via _queuedCopyText\n\t\t\t// (placeholder for textless content); match removal with the same\n\t\t\t// expression so both sides stay symmetric.\n\t\t\tconst messageText =\n\t\t\t\tevent.message.role === \"custom\"\n\t\t\t\t\t? this._queuedCopyText(event.message.content)\n\t\t\t\t\t: contentText(event.message.content, \"\");\n\t\t\tif (messageText) {\n\t\t\t\t// Check steering queue first\n\t\t\t\tconst steeringIndex = this._steeringMessages.indexOf(messageText);\n\t\t\t\tif (steeringIndex !== -1) {\n\t\t\t\t\tthis._steeringMessages.splice(steeringIndex, 1);\n\t\t\t\t\tthis._emitQueueUpdate();\n\t\t\t\t} else {\n\t\t\t\t\t// Check follow-up queue\n\t\t\t\t\tconst followUpIndex = this._followUpMessages.indexOf(messageText);\n\t\t\t\t\tif (followUpIndex !== -1) {\n\t\t\t\t\t\tthis._followUpMessages.splice(followUpIndex, 1);\n\t\t\t\t\t\tthis._emitQueueUpdate();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tawait this._emitLifecycleEvents(event);\n\t\tif (event.type === \"message_update\" && event.message.role === \"assistant\") {\n\t\t\tawait this._dispatchModelStreamLifecycle(event.message, event.assistantMessageEvent.type, \"candidate\");\n\t\t}\n\n\t\t// Notify all listeners\n\t\tthis._emit(\n\t\t\tevent.type === \"agent_end\"\n\t\t\t\t? {\n\t\t\t\t\t\t...event,\n\t\t\t\t\t\twillRetry: await this._willRetryAfterAgentEnd(event, this._policyDecisionAbortController?.signal),\n\t\t\t\t\t}\n\t\t\t\t: event,\n\t\t);\n\n\t\t// Handle session persistence\n\t\tif (event.type === \"message_end\") {\n\t\t\t// Check if this is a custom message from extensions\n\t\t\tif (event.message.role === \"custom\") {\n\t\t\t\t// Persist as CustomMessageEntry\n\t\t\t\tthis.sessionManager.appendCustomMessageEntry(\n\t\t\t\t\tevent.message.customType,\n\t\t\t\t\tevent.message.content,\n\t\t\t\t\tevent.message.display,\n\t\t\t\t\tevent.message.details,\n\t\t\t\t);\n\t\t\t} else if (\n\t\t\t\tevent.message.role === \"user\" ||\n\t\t\t\tevent.message.role === \"assistant\" ||\n\t\t\t\tevent.message.role === \"toolResult\"\n\t\t\t) {\n\t\t\t\t// Regular LLM message - persist as SessionMessageEntry\n\t\t\t\tconst entryId = this.sessionManager.appendMessage(event.message);\n\t\t\t\tif (event.message.role === \"assistant\") {\n\t\t\t\t\tif (event.message.stopReason === \"aborted\") {\n\t\t\t\t\t\tthis._currentRunAborted = true;\n\t\t\t\t\t}\n\t\t\t\t\tawait this._dispatchModelStreamLifecycle(\n\t\t\t\t\t\tevent.message,\n\t\t\t\t\t\tevent.message.stopReason === \"error\" || event.message.stopReason === \"aborted\" ? \"error\" : \"done\",\n\t\t\t\t\t\t\"committed\",\n\t\t\t\t\t);\n\t\t\t\t\tthis._modelStreamState = undefined;\n\t\t\t\t\tawait this._dispatchModelResponseLifecycle(event.message, entryId);\n\t\t\t\t} else if (event.message.role === \"toolResult\") {\n\t\t\t\t\tawait this._dispatchToolCommitLifecycle(event.message, entryId);\n\t\t\t\t\tawait this._dispatchToolResultLifecycle(event.message, entryId);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Other message types (bashExecution, compactionSummary, branchSummary) are persisted elsewhere\n\n\t\t\t// Track assistant message for auto-compaction (checked on agent_end)\n\t\t\tif (event.message.role === \"assistant\") {\n\t\t\t\tthis._lastAssistantMessage = event.message;\n\n\t\t\t\tconst assistantMsg = event.message as AssistantMessage;\n\t\t\t\tif (assistantMsg.stopReason !== \"error\" && assistantMsg.stopReason !== \"length\") {\n\t\t\t\t\tthis._overflowRecoveryAttempted = false;\n\t\t\t\t\tthis._overflowTrimStage = 0;\n\t\t\t\t}\n\n\t\t\t\t// Reset retry counter immediately on successful assistant response\n\t\t\t\t// This prevents accumulation across multiple LLM calls within a turn\n\t\t\t\tif (assistantMsg.stopReason !== \"error\" && this._retryAttempt > 0) {\n\t\t\t\t\tthis._emit({\n\t\t\t\t\t\ttype: \"auto_retry_end\",\n\t\t\t\t\t\tsuccess: true,\n\t\t\t\t\t\tattempt: this._retryAttempt,\n\t\t\t\t\t});\n\t\t\t\t\tthis._retryAttempt = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// A turn ends after its assistant message and every tool result has been appended,\n\t\t// so this is the first point in the run where a context-only custom message can be\n\t\t// inserted without landing between a tool call and its result. Flushing after the\n\t\t// extension and listener dispatch above also picks up messages that turn_end\n\t\t// handlers queued.\n\t\tif (event.type === \"turn_end\") {\n\t\t\tthis._flushPendingCustomMessages();\n\t\t}\n\t};\n\n\tprivate async _dispatchModelStreamLifecycle(\n\t\tmessage: AgentMessage,\n\t\teventName: ModelStreamEventDataV1[\"event\"],\n\t\tphase: ModelStreamEventDataV1[\"phase\"],\n\t): Promise<void> {\n\t\tawait dispatchModelStreamLifecycle(this._internal, message, eventName, phase);\n\t}\n\n\tprivate _willRetryAfterAgentEnd(\n\t\tevent: Extract<AgentEvent, { type: \"agent_end\" }>,\n\t\tsignal?: AbortSignal,\n\t): Promise<boolean> {\n\t\treturn willRetryAfterAgentEnd(this._internal, event, signal);\n\t}\n\n\t/** Find the last assistant message in agent state (including aborted ones) */\n\tprivate _findLastAssistantMessage(): AssistantMessage | undefined {\n\t\tconst messages = this.agent.state.messages;\n\t\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\t\tconst msg = messages[i];\n\t\t\tif (msg.role === \"assistant\") {\n\t\t\t\treturn msg as AssistantMessage;\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t/** Deliver capability lifecycle events derived from one agent event. */\n\tprivate async _emitLifecycleEvents(event: AgentEvent): Promise<void> {\n\t\tif (event.type === \"agent_start\") {\n\t\t\tthis._turnIndex = 0;\n\t\t\tawait dispatchAgentStartLifecycle(this._internal);\n\t\t} else if (event.type === \"agent_end\") {\n\t\t\tawait dispatchAgentEndLifecycle(this._internal);\n\t\t} else if (event.type === \"turn_start\") {\n\t\t\tawait dispatchTurnStartLifecycle(this._internal, this._turnIndex);\n\t\t} else if (event.type === \"turn_end\") {\n\t\t\tthis._turnIndex++;\n\t\t\t// turn 级 outcome 判定(复审 M2):取 turn_end 事件自带 assistant message\n\t\t\t// 的 stopReason(provider 层 signal.aborted 优先返回 \"aborted\",取值互斥\n\t\t\t// 精确)。禁用 run 级 `_currentRunAborted`——abort 后 drain 排队消息的\n\t\t\t// 正常回合会被误标;completed 回合不传,缺席省键。\n\t\t\tconst turnMessage = event.message;\n\t\t\tconst outcome =\n\t\t\t\tturnMessage.role === \"assistant\" &&\n\t\t\t\t(turnMessage.stopReason === \"aborted\" || turnMessage.stopReason === \"error\")\n\t\t\t\t\t? turnMessage.stopReason\n\t\t\t\t\t: undefined;\n\t\t\tawait dispatchTurnEndLifecycle(this._internal, this._turnIndex, this.agent.state.messages.length, outcome);\n\t\t} else if (event.type === \"message_start\") {\n\t\t\tawait dispatchMessageStartLifecycle(this._internal, event.message.role);\n\t\t} else if (event.type === \"message_end\") {\n\t\t\tawait dispatchMessageEndLifecycle(this._internal, event.message.role);\n\t\t} else if (event.type === \"tool_execution_start\") {\n\t\t\tawait dispatchToolExecutionStartLifecycle(this._internal, event.toolCallId, event.toolName);\n\t\t}\n\t}\n\n\t/**\n\t * Subscribe to agent events.\n\t * Session persistence is handled internally (saves messages on message_end).\n\t * Multiple listeners can be added. Returns unsubscribe function for this listener.\n\t */\n\tsubscribe(listener: AgentSessionEventListener): () => void {\n\t\tthis._eventListeners.push(listener);\n\n\t\t// Return unsubscribe function for this specific listener\n\t\treturn () => {\n\t\t\tconst index = this._eventListeners.indexOf(listener);\n\t\t\tif (index !== -1) {\n\t\t\t\tthis._eventListeners.splice(index, 1);\n\t\t\t}\n\t\t};\n\t}\n\n\t/** Disconnect from agent events during disposal. */\n\tprivate _disconnectFromAgent(): void {\n\t\tif (this._unsubscribeAgent) {\n\t\t\tthis._unsubscribeAgent();\n\t\t\tthis._unsubscribeAgent = undefined;\n\t\t}\n\t}\n\n\t/**\n\t * Remove all listeners and disconnect from agent.\n\t * Call this when completely done with the session.\n\t */\n\tdispose(): Promise<void> {\n\t\tif (this._disposePromise) return this._disposePromise;\n\t\tthis._disposePromise = (async () => {\n\t\t\tconst errors: unknown[] = [];\n\t\t\tthis._beginContextTransitionFence();\n\t\t\t// Fence mode-level and legacy extension bash work before async cleanup.\n\t\t\tthis._bashEpoch += 1;\n\t\t\tfor (const abort of [\n\t\t\t\t() => this._abortActiveCapabilityCommand(\"session disposed\"),\n\t\t\t\t() => this.abortRetry(),\n\t\t\t\t() => this.abortCompaction(),\n\t\t\t\t() => this.abortBranchSummary(),\n\t\t\t\t() => this.abortBash(),\n\t\t\t\t() => this._agentTaskScopeAbortController.abort(\"session disposed\"),\n\t\t\t\t() => this.agent.abort(),\n\t\t\t]) {\n\t\t\t\ttry {\n\t\t\t\t\tawait abort();\n\t\t\t\t} catch (error) {\n\t\t\t\t\terrors.push(error);\n\t\t\t\t}\n\t\t\t}\n\t\t\tawait Promise.allSettled(\n\t\t\t\t[this._activeContextTransition, ...this._activeBashPromises, this.waitForIdle()].filter(\n\t\t\t\t\t(operation): operation is Promise<unknown> => operation !== undefined,\n\t\t\t\t),\n\t\t\t);\n\n\t\t\tthis._disconnectFromAgent();\n\t\t\tthis._eventListeners = [];\n\n\t\t\t// 会话终态(第 4 期轨迹闭合):capability plugins dispose 之前派发\n\t\t\t// session.end@1——runtime 仍存活、observability 插件此时尚未 dispose,\n\t\t\t// 能写入最后一行轨迹。dispose 幂等(_disposePromise 重入即返回同一\n\t\t\t// promise),派发天然只发生一次;reload 不经过 dispose,不派发。\n\t\t\tawait dispatchSessionEndLifecycle(this._internal);\n\n\t\t\tconst disposals: Array<() => void | Promise<void>> = [\n\t\t\t\t() => this._disposeCapabilityPlugins(),\n\t\t\t\t() => this._capabilityRuntime?.disposeAll(),\n\t\t\t\t() => {\n\t\t\t\t\tconst adapter = this._agentTaskAdapter;\n\t\t\t\t\treturn adapter?.dispose?.();\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tconst interactionHost = this._interactionHost;\n\t\t\t\t\treturn interactionHost?.dispose?.();\n\t\t\t\t},\n\t\t\t\t() => this._bootstrapSkillsHandle?.dispose(),\n\t\t\t\t() => this._bootstrapRetryHandle?.dispose(),\n\t\t\t\t() => this._bootstrapCompactionHandle?.dispose(),\n\t\t\t\t() => this._bootstrapOverflowHandle?.dispose(),\n\t\t\t\t() => this._bootstrapBranchSummaryHandle?.dispose(),\n\t\t\t\t() => this._bootstrapAgentLoopHandle?.dispose(),\n\t\t\t\t() => this._bootstrapLifecycleHandle?.dispose(),\n\t\t\t];\n\t\t\tfor (const dispose of disposals) {\n\t\t\t\ttry {\n\t\t\t\t\tawait dispose();\n\t\t\t\t} catch (error) {\n\t\t\t\t\terrors.push(error);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._capabilityRuntime?.revokeAllAPIs();\n\t\t\tthis._capabilityPlugins.clear();\n\t\t\tthis._inlineCapabilityPlugins.clear();\n\t\t\tthis._bootstrapSkillsHandle = undefined;\n\t\t\tthis._bootstrapRetryHandle = undefined;\n\t\t\tthis._bootstrapCompactionHandle = undefined;\n\t\t\tthis._bootstrapOverflowHandle = undefined;\n\t\t\tthis._bootstrapBranchSummaryHandle = undefined;\n\t\t\tthis._bootstrapAgentLoopHandle = undefined;\n\t\t\tthis._bootstrapLifecycleHandle = undefined;\n\t\t\tcleanupSessionResources(this.sessionId);\n\n\t\t\tif (errors.length === 1) throw errors[0];\n\t\t\tif (errors.length > 1) throw new AggregateError(errors, `Agent session disposal failed: ${this.sessionId}`);\n\t\t})();\n\t\treturn this._disposePromise;\n\t}\n\n\t// =========================================================================\n\t// Read-only State Access\n\t// =========================================================================\n\n\t/** Full agent state */\n\tget state(): AgentState {\n\t\treturn this.agent.state;\n\t}\n\n\t/** Current model (may be undefined if not yet selected) */\n\tget model(): Model<Api> | undefined {\n\t\treturn this.agent.state.model;\n\t}\n\n\t/** Current thinking level */\n\tget thinkingLevel(): ThinkingLevel {\n\t\treturn this.agent.state.thinkingLevel;\n\t}\n\n\t/** Whether the session is currently processing an agent run or post-run continuation. */\n\tget isStreaming(): boolean {\n\t\treturn this._isAgentRunActive;\n\t}\n\n\t/** Whether the session has no active agent run, retry, compaction, branch summarization, or queued continuation. */\n\tget isIdle(): boolean {\n\t\treturn !this._isAgentRunActive && !this.isCompacting;\n\t}\n\n\t/** Current effective system prompt (includes any per-turn extension modifications) */\n\tget systemPrompt(): string {\n\t\treturn this.agent.state.systemPrompt;\n\t}\n\n\t/** Current retry attempt (0 if not retrying) */\n\tget retryAttempt(): number {\n\t\treturn this._retryAttempt;\n\t}\n\n\t/**\n\t * Get the names of currently active tools.\n\t * Returns the names of tools currently set on the agent.\n\t */\n\tgetActiveToolNames(): string[] {\n\t\treturn this.agent.state.tools.map((t) => t.name);\n\t}\n\n\t/** Public capability runtime for external orchestration and plugin composition. */\n\tgetCapabilityRuntime(): CapabilityRuntime {\n\t\tif (!this._capabilityRuntime) throw new Error(t(\"Capability runtime is not available\"));\n\t\treturn this._capabilityRuntime;\n\t}\n\n\t/**\n\t * Observes every output artifact committed through this session's capability\n\t * runtime. Host adapters mirror the payload into durable storage; the runtime\n\t * itself carries no durable dependency. The registration survives runtime\n\t * rebuilds (reload) because the session owns the dispatcher. Returns an\n\t * unsubscribe function.\n\t */\n\tonOutputArtifactCommit(listener: OutputArtifactCommitListener): () => void {\n\t\tthis._outputArtifactCommitListeners.add(listener);\n\t\treturn () => {\n\t\t\tthis._outputArtifactCommitListeners.delete(listener);\n\t\t};\n\t}\n\n\tget isDisposed(): boolean {\n\t\treturn this._disposePromise !== undefined;\n\t}\n\n\t/** Public session facade for host adapters. It never exposes SessionManager internals. */\n\tgetSessionAPI(): SessionAPI {\n\t\treturn {\n\t\t\tgetSessionId: () => this.sessionManager.getSessionId(),\n\t\t\tgetRevision: () => this.sessionManager.getRevision(),\n\t\t\tregisterEntryProjection: (projection) =>\n\t\t\t\t// 公共投影契约是松类型(unknown 列表);此处是宿主信任边界,\n\t\t\t\t// 投影实现错误会在上下文投影时显式失败,不在此静默防御。\n\t\t\t\tthis.sessionManager.registerEntryProjection(projection as unknown as SessionEntryProjection),\n\t\t\tgetContextSnapshot: <TValue = unknown>() =>\n\t\t\t\t({\n\t\t\t\t\tversion: 1,\n\t\t\t\t\trevision: this._contextRevision,\n\t\t\t\t\tvalue: detachedSessionSnapshot(this.agent.state.messages) as TValue,\n\t\t\t\t}) as CanonicalAgentContextSnapshotV1<TValue>,\n\t\t\tcommitContext: async <TValue = unknown>(\n\t\t\t\trequest: CanonicalAgentContextCommitRequestV1<TValue>,\n\t\t\t): Promise<CanonicalAgentContextCommitResultV1<TValue>> => {\n\t\t\t\tconst commit = this._contextCommitQueue.then(async () => {\n\t\t\t\t\tif (request.signal?.aborted) throw new Error(t(\"Context commit cancelled\"));\n\t\t\t\t\tconst currentRevision = this._contextRevision;\n\t\t\t\t\tif (request.operationId.trim() === \"\") throw new Error(t(\"Context commit operationId is required\"));\n\t\t\t\t\tif (request.expectedRevision !== currentRevision) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\tt(\"Context revision conflict: expected {expected}, current {current}\", {\n\t\t\t\t\t\t\t\texpected: request.expectedRevision,\n\t\t\t\t\t\t\t\tcurrent: currentRevision,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (!Array.isArray(request.value)) throw new Error(t(\"Session context commit requires a message array\"));\n\t\t\t\t\tawait this.replaceContext(request.value as AgentMessage[]);\n\t\t\t\t\tif (request.signal?.aborted) throw new Error(t(\"Context commit cancelled\"));\n\t\t\t\t\treturn {\n\t\t\t\t\t\tversion: 1 as const,\n\t\t\t\t\t\tstatus: \"committed\" as const,\n\t\t\t\t\t\trevision: this._contextRevision,\n\t\t\t\t\t\tvalue: detachedSessionSnapshot(this.agent.state.messages) as TValue,\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\tthis._contextCommitQueue = commit.then(\n\t\t\t\t\t() => undefined,\n\t\t\t\t\t() => undefined,\n\t\t\t\t);\n\t\t\t\treturn commit;\n\t\t\t},\n\t\t\tgetMessages: () => detachedSessionSnapshot(this.agent.state.messages),\n\t\t\tisIdle: () => this.isIdle,\n\t\t\tprompt: (text) => this.prompt(text),\n\t\t\t// SessionAPI 契约固定 Promise<void>;disposition(\"queued\"/\"handled\")不外泄到该面。\n\t\t\tsteer: (text) => this.steer(text).then(() => undefined),\n\t\t\tqueueFollowUp: (text) => this.sendUserMessage(text, { deliverAs: \"followUp\" }),\n\t\t\tabort: () => this.abort(),\n\t\t\twaitForIdle: () => this.waitForIdle(),\n\t\t\tgetActiveTools: () => this.getActiveToolNames(),\n\t\t\t// readonly 会话不暴露能力面变更口(只读就是只读:能在只读会话上改工具面的\n\t\t\t// 消费方等于拿到了放大权限的口子)。成员缺席即不可用,调用方按可选处理。\n\t\t\t...(this._capabilityMode === \"readonly\"\n\t\t\t\t? {}\n\t\t\t\t: { setActiveTools: (toolNames: string[]) => this.setActiveToolsByName(toolNames) }),\n\t\t\tcompact: (customInstructions) => this.compact(customInstructions),\n\t\t\tnavigateTree: (targetId, options) => this.navigateTree(targetId, options),\n\t\t\tappendEntry: (customType, data) => {\n\t\t\t\tconst entryId = this.sessionManager.appendCustomEntry(\n\t\t\t\t\tcustomType,\n\t\t\t\t\tdata === undefined ? undefined : detachedSessionSnapshot(data),\n\t\t\t\t);\n\t\t\t\tconst entry = this.sessionManager.getEntry(entryId);\n\t\t\t\tif (entry) {\n\t\t\t\t\tthis._emit({ type: \"entry_appended\", entry });\n\t\t\t\t\tvoid dispatchSessionEntryAppendedLifecycle(this._internal, entryId, entry.type);\n\t\t\t\t}\n\t\t\t\treturn entryId;\n\t\t\t},\n\t\t\tsetSessionName: (name) => this.setSessionName(name),\n\t\t\tgetSessionName: () => this.sessionManager.getSessionName(),\n\t\t\tsetLabel: (entryId, label) => this.sessionManager.appendLabelChange(entryId, label),\n\t\t\tgetLabel: (entryId) => this.sessionManager.getLabel(entryId),\n\t\t\tgetAllTools: () => definitionSnapshot(this.getAllTools()),\n\t\t\tgetCommands: () => collectCommandInfos(this._internal),\n\t\t\tgetModel: () => (this.model ? detachedSnapshot(modelFactsView(this.model)) : undefined),\n\t\t\tgetScopedModels: () =>\n\t\t\t\tdetachedSnapshot(\n\t\t\t\t\tthis.scopedModels.map((entry) => ({\n\t\t\t\t\t\tmodel: modelFactsView(entry.model),\n\t\t\t\t\t\t...(entry.thinkingLevel === undefined ? {} : { thinkingLevel: entry.thinkingLevel }),\n\t\t\t\t\t})),\n\t\t\t\t),\n\t\t\tgetThinkingLevel: () => this.thinkingLevel,\n\t\t\t...(this._capabilityMode === \"readonly\" ? {} : { setThinkingLevel: (level) => this.setThinkingLevel(level) }),\n\t\t\t...(this._capabilityMode === \"readonly\"\n\t\t\t\t? {}\n\t\t\t\t: {\n\t\t\t\t\t\tsetModel: async (modelId: string) => {\n\t\t\t\t\t\t\tconst scoped = this.scopedModels.find((entry) => entry.model.id === modelId);\n\t\t\t\t\t\t\tif (!scoped) return false;\n\t\t\t\t\t\t\tif (!this._modelRuntime.hasConfiguredAuth(scoped.model.provider)) return false;\n\t\t\t\t\t\t\tawait this.setModel(scoped.model);\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\tgetSystemPrompt: () => this.systemPrompt,\n\t\t\tgetSystemPromptOptions: () => detachedSnapshot(this._baseSystemPromptOptions),\n\t\t\tgetContextUsage: () => getContextUsage(this._internal),\n\t\t\tsendMessage: (message, options) => this.sendCustomMessage(message, options),\n\t\t\tgetBranchEntries: () =>\n\t\t\t\tdetachedSessionSnapshot(\n\t\t\t\t\tthis.sessionManager.getBranch().map((entry) => ({\n\t\t\t\t\t\tid: entry.id,\n\t\t\t\t\t\tparentId: entry.parentId,\n\t\t\t\t\t\ttimestamp: entry.timestamp,\n\t\t\t\t\t\ttype: entry.type,\n\t\t\t\t\t\t...(entry.type === \"message\"\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\tmessage: {\n\t\t\t\t\t\t\t\t\t\trole: entry.message.role,\n\t\t\t\t\t\t\t\t\t\t...(\"content\" in entry.message ? { content: entry.message.content } : {}),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t...(entry.type === \"custom\" ? { customType: entry.customType, data: entry.data } : {}),\n\t\t\t\t\t})),\n\t\t\t\t),\n\t\t\texportArtifact: (request) => {\n\t\t\t\tif (request.format !== \"jsonl\")\n\t\t\t\t\tthrow new Error(t(\"Unsupported session export format: {format}\", { format: request.format }));\n\t\t\t\treturn createSessionJsonlArtifact(this.sessionManager);\n\t\t\t},\n\t\t};\n\t}\n\n\t/** Return all currently loaded capability plugins without exposing private session state. */\n\tgetCapabilityPlugins(): readonly CapabilityPluginHandle[] {\n\t\tconst handles = Array.from(this._capabilityPlugins.values());\n\t\tfor (const handle of [\n\t\t\tthis._bootstrapSkillsHandle,\n\t\t\tthis._bootstrapRetryHandle,\n\t\t\tthis._bootstrapCompactionHandle,\n\t\t\tthis._bootstrapOverflowHandle,\n\t\t\tthis._bootstrapBranchSummaryHandle,\n\t\t\tthis._bootstrapLifecycleHandle,\n\t\t]) {\n\t\t\tif (handle) handles.push(handle);\n\t\t}\n\t\treturn handles;\n\t}\n\n\t/** Name of the externally selected context strategy, when configured. */\n\tget contextStrategyName(): string | undefined {\n\t\treturn this._contextStrategyName;\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _requireContextStrategy(): { runtime: CapabilityRuntime; name: string } {\n\t\treturn requireContextStrategy(this._internal);\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _requireIdleContextOperation(operation: string): void {\n\t\trequireIdleContextOperation(this._internal, operation);\n\t}\n\n\tprivate _beginContextTransitionFence(): void {\n\t\tbeginContextTransitionFence(this._internal);\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _isContextTransitionCurrent(epoch: number, allowReload: boolean): boolean {\n\t\treturn isContextTransitionCurrent(this._internal, epoch, allowReload);\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _assertContextTransitionCurrent(epoch: number, allowReload: boolean): void {\n\t\tassertContextTransitionCurrent(this._internal, epoch, allowReload);\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _enqueueContextTransition<T>(\n\t\toperation: (epoch: number, signal: AbortSignal) => Promise<T>,\n\t\toptions?: { signal?: AbortSignal; allowReload?: boolean },\n\t): Promise<T> {\n\t\treturn enqueueContextTransition(this._internal, operation, options);\n\t}\n\n\tprivate _copyContextMessages(value: unknown, strategyName: string, direction: \"input\" | \"result\"): AgentMessage[] {\n\t\treturn copyContextMessages(value, strategyName, direction);\n\t}\n\n\t/** Apply a persisted-context transition, including strategy-owned projections. */\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate async _applyContextTransition(\n\t\tmessages: AgentMessage[],\n\t\treason: ContextOperationOptions[\"reason\"] = \"session_replace\",\n\t\tsignal?: AbortSignal,\n\t\toptions?: { allowReload?: boolean },\n\t): Promise<AgentMessage[]> {\n\t\treturn applyContextTransition(this._internal, messages, reason, signal, options);\n\t}\n\n\t/** Notify observers only after the runtime context projection has been committed. */\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate async _dispatchContextReplacedLifecycle(\n\t\treason: NonNullable<ContextOperationOptions[\"reason\"]>,\n\t\tstrategyName?: string,\n\t): Promise<void> {\n\t\tawait dispatchContextReplacedLifecycle(this._internal, reason, strategyName);\n\t}\n\n\t/** Deliver the finalized assistant response only after its session entry is committed. */\n\tprivate async _dispatchModelResponseLifecycle(message: AssistantMessage, entryId: string): Promise<void> {\n\t\tawait dispatchModelResponseLifecycle(this._internal, message, entryId);\n\t}\n\n\t/** Deliver the finalized tool result only after its session entry is committed. */\n\tprivate async _dispatchToolCommitLifecycle(message: ToolResultMessage, entryId: string): Promise<void> {\n\t\tawait dispatchToolCommitLifecycle(this._internal, message, entryId);\n\t}\n\n\t/** Deliver the finalized tool result only after its session entry is committed. */\n\tprivate async _dispatchToolResultLifecycle(message: ToolResultMessage, entryId: string): Promise<void> {\n\t\tawait dispatchToolResultLifecycle(this._internal, message, entryId);\n\t}\n\n\t/** Notify the rebuilt runtime only after all reload work has committed. */\n\tprivate async _dispatchSessionReloadLifecycle(generation: number): Promise<void> {\n\t\tawait dispatchSessionReloadLifecycle(this._internal, generation);\n\t}\n\n\t/** Snapshot the current session messages with the configured context strategy. */\n\tasync snapshotContext(): Promise<unknown> {\n\t\treturn snapshotContext(this._internal);\n\t}\n\n\t/** Restore session messages from a strategy snapshot. */\n\tasync restoreContext(snapshot: unknown): Promise<AgentMessage[]> {\n\t\treturn restoreContext(this._internal, snapshot);\n\t}\n\n\t/** Replace session messages through the configured context strategy. */\n\tasync replaceContext(context: AgentMessage[]): Promise<AgentMessage[]> {\n\t\treturn replaceContext(this._internal, context);\n\t}\n\n\tprivate _restoreContextTransition(\n\t\tsnapshot: unknown,\n\t\treason: NonNullable<ContextOperationOptions[\"reason\"]>,\n\t\toptions?: { allowReload?: boolean },\n\t): Promise<AgentMessage[]> {\n\t\treturn restoreContextTransition(this._internal, snapshot, reason, options);\n\t}\n\n\tprivate async _trackCapabilityPlugin(\n\t\tkey: string,\n\t\tloaded: CapabilityPluginHandle,\n\t\tpreviousToolNames: ReadonlySet<string>,\n\t): Promise<CapabilityPluginHandle> {\n\t\ttry {\n\t\t\tthis._validateCapabilitySkillConflicts();\n\t\t} catch (error) {\n\t\t\tawait loaded.dispose();\n\t\t\tthrow error;\n\t\t}\n\t\tlet disposed = false;\n\t\tconst handle: CapabilityPluginHandle = {\n\t\t\tmanifest: loaded.manifest,\n\t\t\tapi: loaded.api,\n\t\t\tready: loaded.ready,\n\t\t\tdispose: async () => {\n\t\t\t\tif (disposed) return;\n\t\t\t\tdisposed = true;\n\t\t\t\t// 卸载恢复链的中间 notify 是暂态(活跃名暂时缺席),挂起钩子内的可见\n\t\t\t\t// 注册表刷新;恢复完成后在此按装卸边界语义兜底刷新一次。\n\t\t\t\tthis._suspendToolRegistryHookRefresh = true;\n\t\t\t\ttry {\n\t\t\t\t\tawait loaded.dispose();\n\t\t\t\t} finally {\n\t\t\t\t\tthis._suspendToolRegistryHookRefresh = false;\n\t\t\t\t}\n\t\t\t\tthis._capabilityPlugins.delete(key);\n\t\t\t\tthis._inlineCapabilityPlugins.delete(key);\n\t\t\t\tif (!this._isDisposingCapabilityPlugins) {\n\t\t\t\t\tthis._syncCapabilityTools();\n\t\t\t\t\tthis._refreshToolRegistry({ activeToolNames: this.getActiveToolNames() });\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t\tthis._capabilityPlugins.set(key, handle);\n\t\tthis._syncCapabilityTools();\n\t\tconst newToolNames = this._capabilityRuntime!.listTools()\n\t\t\t// First-party domain tools (the S4 split moved every capability to\n\t\t\t// `agent-forge.plugin.*`; `agent-forge.builtin.*` is the retired\n\t\t\t// embedded id era) join the active surface under the same readonly\n\t\t\t// narrowing as runtime-built tools: non-readonlySafe declarations\n\t\t\t// stay off a readonly session (宪法 §6). Third-party plugins decide\n\t\t\t// their own mode semantics.\n\t\t\t.filter(\n\t\t\t\t(tool) =>\n\t\t\t\t\tthis._capabilityMode !== \"readonly\" ||\n\t\t\t\t\t(!tool.source.startsWith(\"agent-forge.builtin.\") && !tool.source.startsWith(\"agent-forge.plugin.\")) ||\n\t\t\t\t\ttool.readonlySafe === true,\n\t\t\t)\n\t\t\t// Deferred plugin tools register but stay out of the active set on\n\t\t\t// this explicit-activation path too, until tool_search /\n\t\t\t// capability_mount or setActiveTools names them (same contract as the\n\t\t\t// default path in agent-session-tools.ts).\n\t\t\t.filter(\n\t\t\t\t(tool) =>\n\t\t\t\t\t!this._deferredToolPluginIds.has(tool.source) &&\n\t\t\t\t\t!this._deferredCapabilityCards.some((card) => card.pluginId === tool.source),\n\t\t\t)\n\t\t\t.map((tool) => tool.name)\n\t\t\t.filter((name) => !previousToolNames.has(name));\n\t\tthis._refreshToolRegistry({\n\t\t\tactiveToolNames: [...this.getActiveToolNames(), ...newToolNames],\n\t\t});\n\t\treturn handle;\n\t}\n\n\t/** Load an external capability manifest through the same runtime as first-party plugins. */\n\tasync loadCapabilityPluginManifest(\n\t\tmanifestPath: string,\n\t\toptions?: { readonly configOverride?: PluginConfig },\n\t): Promise<CapabilityPluginHandle> {\n\t\tconst runtime = this._capabilityRuntime;\n\t\t// v8 ignore next -- capability runtime 恒由 _buildRuntime 创建,dispose 后不再调用,运行期恒存在\n\t\tif (!runtime) throw new Error(t(\"Capability runtime is not available\"));\n\t\tconst resolvedManifestPath = resolve(this._cwd, manifestPath);\n\t\tif (this._capabilityPlugins.has(resolvedManifestPath)) {\n\t\t\tthrow new Error(t(\"Capability plugin manifest is already loaded: {path}\", { path: resolvedManifestPath }));\n\t\t}\n\t\t// 宿主装配声明的 configOverride 按路径记录(D-082 批 1):sdk 装配链注入的\n\t\t// 会话事实(coding-tools 的 cwd/read/bash 等)在 reload 重装载时经此回放,\n\t\t// 否则插件会退回 manifest 缺省值(cwd 缺失即退回 process.cwd())。同路径的\n\t\t// 后续显式装载覆盖旧值。\n\t\tif (options?.configOverride !== undefined) {\n\t\t\tthis._capabilityPluginConfigOverrides.set(resolvedManifestPath, options.configOverride);\n\t\t}\n\n\t\tconst previousToolNames = new Set(runtime.listTools().map((tool) => tool.name));\n\t\tconst loaded = await loadCapabilityPluginFromManifest(runtime, resolvedManifestPath, options);\n\t\treturn this._trackCapabilityPlugin(resolvedManifestPath, loaded, previousToolNames);\n\t}\n\n\t/**\n\t * Load an in-memory capability plugin and attach its handle to this session.\n\t * This is useful for embedders and deterministic fixtures that already own a\n\t * validated manifest/factory pair; reload and dispose will release the handle.\n\t */\n\tasync loadCapabilityPlugin(\n\t\tmanifest: PluginManifest,\n\t\tfactory: CapabilityPluginFactory,\n\t): Promise<CapabilityPluginHandle> {\n\t\tconst runtime = this._capabilityRuntime;\n\t\t// v8 ignore next -- capability runtime 恒由 _buildRuntime 创建,dispose 后不再调用,运行期恒存在\n\t\tif (!runtime) throw new Error(t(\"Capability runtime is not available\"));\n\t\tconst key = `inline:${manifest.id}`;\n\t\tif (this._capabilityPlugins.has(key)) {\n\t\t\tthrow new Error(t(\"Capability plugin is already loaded in this session: {id}\", { id: manifest.id }));\n\t\t}\n\t\tconst previousToolNames = new Set(runtime.listTools().map((tool) => tool.name));\n\t\tconst loaded = await loadCapabilityPluginRuntime(runtime, manifest, factory);\n\t\tthis._inlineCapabilityPlugins.set(key, { manifest, factory });\n\t\ttry {\n\t\t\treturn await this._trackCapabilityPlugin(key, loaded, previousToolNames);\n\t\t} catch (error) {\n\t\t\tthis._inlineCapabilityPlugins.delete(key);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\t/**\n\t * Get all configured tools with name, description, parameter schema, prompt guidelines, and source metadata.\n\t */\n\tgetAllTools(): ToolInfo[] {\n\t\treturn getAllTools(this._internal);\n\t}\n\n\tgetToolDefinition(name: string): ToolDefinition | undefined {\n\t\treturn getToolDefinition(this._internal, name);\n\t}\n\n\t/**\n\t * Set active tools by name.\n\t * Only tools in the registry can be enabled. Unknown tool names are ignored.\n\t * Also rebuilds the system prompt to reflect the new tool set.\n\t * Changes take effect on the next agent turn.\n\t */\n\tsetActiveToolsByName(toolNames: string[]): void {\n\t\tsetActiveToolsByName(this._internal, toolNames);\n\t}\n\n\t/** Whether compaction or branch summarization is currently running */\n\tget isCompacting(): boolean {\n\t\treturn (\n\t\t\tthis._autoCompactionAbortController !== undefined ||\n\t\t\tthis._compactionAbortController !== undefined ||\n\t\t\tthis._branchSummaryAbortController !== undefined\n\t\t);\n\t}\n\n\t/** All messages including custom types like BashExecutionMessage */\n\tget messages(): AgentMessage[] {\n\t\treturn this.agent.state.messages;\n\t}\n\n\t/** Current steering mode */\n\tget steeringMode(): \"all\" | \"one-at-a-time\" {\n\t\treturn this.agent.steeringMode;\n\t}\n\n\t/** Current follow-up mode */\n\tget followUpMode(): \"all\" | \"one-at-a-time\" {\n\t\treturn this.agent.followUpMode;\n\t}\n\n\t/** Current session file path, or undefined if sessions are disabled */\n\tget sessionFile(): string | undefined {\n\t\treturn this.sessionManager.getSessionFile();\n\t}\n\n\t/** Current session ID */\n\tget sessionId(): string {\n\t\treturn this.sessionManager.getSessionId();\n\t}\n\n\t/**\n\t * /metrics 数据源共享 ref(config 原样透出;observability 插件工厂挂载时写入\n\t * plugin.getMetrics、dispose 时置空)。宿主(TUI/RPC)经它惰性解引用接进\n\t * 命令 options——空 = 插件未挂载。\n\t */\n\tget observabilityGetMetricsRef(): { current?: ObservabilityPlugin[\"getMetrics\"] } | undefined {\n\t\treturn this._observabilityGetMetricsRef;\n\t}\n\n\t/** Current session display name, if set */\n\tget sessionName(): string | undefined {\n\t\treturn this.sessionManager.getSessionName();\n\t}\n\n\t/** Durable revision host fact (SessionManager entry sequence) for session boundaries. */\n\tgetRevision(): SessionRevisionV1 {\n\t\treturn this.sessionManager.getRevision();\n\t}\n\n\t/** Scoped models for cycling (from --models flag) */\n\tget scopedModels(): ReadonlyArray<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }> {\n\t\treturn getScopedModels(this._internal);\n\t}\n\n\t/** Update scoped models for cycling */\n\tsetScopedModels(scopedModels: Array<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>): void {\n\t\tsetScopedModels(this._internal, scopedModels);\n\t}\n\n\t/** File-based prompt templates */\n\tget promptTemplates(): ReadonlyArray<PromptTemplate> {\n\t\treturn this._resourceLoader.getPrompts().prompts;\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _normalizePromptSnippet(text: string | undefined): string | undefined {\n\t\treturn normalizePromptSnippet(text);\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _normalizePromptGuidelines(guidelines: string[] | undefined): string[] {\n\t\treturn normalizePromptGuidelines(guidelines);\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _rebuildSystemPrompt(toolNames: string[]): string {\n\t\treturn rebuildSystemPrompt(this._internal, toolNames);\n\t}\n\n\t// =========================================================================\n\t// Prompting\n\t// =========================================================================\n\n\tprivate async _runAgentPrompt(messages: AgentMessage | AgentMessage[]): Promise<PromptOutcome> {\n\t\treturn runPromptLoop(this._internal, messages);\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: called from test/coverage-branch-core3-agent-session-misc.test.ts via the private cast\n\tprivate _handlePostAgentRun(): Promise<boolean> {\n\t\treturn postAgentRun(this._internal);\n\t}\n\n\tprivate async _runInputHandlers(\n\t\ttext: string,\n\t\timages: ImageContent[] | undefined,\n\t\tsource: InputSource,\n\t): Promise<{ text: string; images: ImageContent[] | undefined }> {\n\t\t// 输入门(扩展位盘点 A3,对称于工具门 beforeToolCall):先于\n\t\t// input.received@1——门决定输入是否被接受,received 是\"已接受\"输入的\n\t\t// 观察事实,被拒输入不派发。链序 = 注册序;改写喂给下一环与后续展开;\n\t\t// block 短路:派发 input.gate.blocked@1(facts only,文本不入信封)后\n\t\t// 以 reason 拒绝本次提交。无钩子时零开销直通(默认行为零变化)。\n\t\tconst gateChain = this._capabilityRuntime?.getLoopHookChain(\"beforeInput\") ?? [];\n\t\tlet currentText = text;\n\t\tfor (const link of gateChain) {\n\t\t\tconst result = await link({ text: currentText, source });\n\t\t\tif (!result) continue;\n\t\t\tif (result.block === true) {\n\t\t\t\tconst reason = typeof result.reason === \"string\" && result.reason.trim() !== \"\" ? result.reason : undefined;\n\t\t\t\tawait dispatchInputGateBlockedLifecycle(this._internal, {\n\t\t\t\t\tsource,\n\t\t\t\t\ttextLength: currentText.length,\n\t\t\t\t\treason,\n\t\t\t\t});\n\t\t\t\tthrow new Error(\n\t\t\t\t\treason === undefined\n\t\t\t\t\t\t? t(\"Input rejected by an input gate\")\n\t\t\t\t\t\t: t(\"Input rejected by an input gate: {reason}\", { reason }),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\"text\" in result && typeof result.text === \"string\") {\n\t\t\t\tcurrentText = result.text;\n\t\t\t}\n\t\t}\n\t\t// input.received@1 is an after-commit observe event: the input text and\n\t\t// images never enter the envelope, and no interception result exists.\n\t\tvoid dispatchInputReceivedLifecycle(this._internal, { source, textLength: currentText.length });\n\t\treturn { text: currentText, images };\n\t}\n\n\t/**\n\t * Send a prompt to the agent.\n\t * - Handles legacy and capability plugin commands immediately, even during streaming\n\t * - Expands file-based prompt templates by default\n\t * - During streaming, queues via steer() or followUp() based on streamingBehavior option\n\t * - Validates model and API key before sending (when not streaming)\n\t * @throws Error if streaming and no streamingBehavior specified\n\t * @throws Error if no model selected or no API key available (when not streaming)\n\t */\n\tasync prompt(text: string, options?: PromptOptions): Promise<PromptOutcome> {\n\t\tif (this._reloadInProgress) {\n\t\t\tthrow new Error(t(\"Session reload in progress; prompts are unavailable\"));\n\t\t}\n\t\tconst expandPromptTemplates = options?.expandPromptTemplates ?? true;\n\t\tconst preflightResult = options?.preflightResult;\n\t\tlet messages: AgentMessage[] | undefined;\n\t\t// Handle plugin commands first (execute immediately, even during streaming).\n\t\tif (expandPromptTemplates && text.startsWith(\"/\")) {\n\t\t\tconst handled = await this._tryExecuteExtensionCommand(text);\n\t\t\tif (handled) {\n\t\t\t\t// Extension command executed, no prompt to send\n\t\t\t\tpreflightResult?.(\"handled\");\n\t\t\t\treturn { status: \"done\" };\n\t\t\t}\n\t\t}\n\n\t\tif (this._compactionAbortController !== undefined) {\n\t\t\tthrow new Error(\n\t\t\t\tt(\"Cannot submit a prompt while compaction is in progress. Wait for compaction to finish and retry.\"),\n\t\t\t);\n\t\t}\n\n\t\t// Dispatch the input.gate chain, then the input.received facts (both\n\t\t// before skill/template expansion)\n\t\tconst { text: currentText, images: currentImages } = await this._runInputHandlers(\n\t\t\ttext,\n\t\t\toptions?.images,\n\t\t\toptions?.source ?? \"interactive\",\n\t\t);\n\n\t\t// Expand skill commands (/skill:name args) and prompt templates (/template args)\n\t\tlet expandedText = currentText;\n\t\tif (expandPromptTemplates) {\n\t\t\texpandedText = this._expandSkillCommand(expandedText);\n\t\t\texpandedText = expandPromptTemplate(expandedText, [...this.promptTemplates]);\n\t\t}\n\n\t\t// If streaming, queue via steer() or followUp() based on option\n\t\tif (this.isStreaming) {\n\t\t\tif (!options?.streamingBehavior) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tt(\n\t\t\t\t\t\t\"Agent is already processing. Specify streamingBehavior ('steer' or 'followUp') to queue the message.\",\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (options.streamingBehavior === \"followUp\") {\n\t\t\t\tawait this._queueFollowUp(expandedText, currentImages);\n\t\t\t} else {\n\t\t\t\tawait this._queueSteer(expandedText, currentImages);\n\t\t\t}\n\t\t\tpreflightResult?.(\"queued\");\n\t\t\treturn { status: \"done\" };\n\t\t}\n\n\t\t// Flush any pending bash and custom messages before the new prompt\n\t\tthis._flushPendingBashMessages();\n\t\tthis._flushPendingCustomMessages();\n\n\t\t// Validate model\n\t\tif (!this.model) {\n\t\t\tthrow new Error(formatNoModelSelectedMessage());\n\t\t}\n\n\t\tconst hasConfiguredAuth =\n\t\t\tthis.agent.streamFunction !== streamSimple ||\n\t\t\tthis._modelRuntime.hasConfiguredAuth(this.model.provider) ||\n\t\t\t(await this._modelRuntime.checkAuth(this.model.provider)) !== undefined;\n\t\tif (!hasConfiguredAuth) {\n\t\t\tconst isOAuth = this._modelRuntime.isUsingOAuth(this.model.provider);\n\t\t\tif (isOAuth) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tt(\n\t\t\t\t\t\t\"Authentication failed for \\\"{provider}\\\". Credentials may have expired or network is unavailable. Run '/login {provider}' to re-authenticate.\",\n\t\t\t\t\t\t{ provider: this.model.provider },\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\tthrow new Error(formatNoApiKeyFoundMessage(this.model.provider));\n\t\t}\n\n\t\t// Check if we need to compact before sending (catches aborted responses).\n\t\t// The user's new prompt is sent below, so do not call agent.continue() here.\n\t\tconst lastAssistant = this._findLastAssistantMessage();\n\t\tif (lastAssistant) {\n\t\t\tawait this._checkCompaction(lastAssistant, false);\n\t\t}\n\n\t\t// Build messages array (custom message if any, then user message)\n\t\tmessages = [];\n\n\t\t// Add user message\n\t\tconst userContent: (TextContent | ImageContent)[] = [{ type: \"text\", text: expandedText }];\n\t\tif (currentImages) {\n\t\t\tuserContent.push(...currentImages);\n\t\t}\n\t\tmessages.push({\n\t\t\trole: \"user\",\n\t\t\tcontent: userContent,\n\t\t\ttimestamp: Date.now(),\n\t\t});\n\n\t\t// Inject any pending \"nextTurn\" messages as context alongside the user message\n\t\tfor (const msg of this._pendingNextTurnMessages) {\n\t\t\tmessages.push(msg);\n\t\t}\n\t\tthis._pendingNextTurnMessages = [];\n\n\t\tawait dispatchBeforeAgentStartLifecycle(this._internal, (currentImages?.length ?? 0) > 0);\n\t\t// Reset to the base prompt (in case a previous turn had an override),\n\t\t// then apply the before.agent.start@2 candidate transform (capability\n\t\t// channel). A transform yielding a different systemPrompt is the later\n\t\t// writer and wins; a missing registration, a verbatim result, or a\n\t\t// failed delivery keeps the base prompt.\n\t\tthis._systemPromptOverride = undefined;\n\t\tthis.agent.state.systemPrompt = this._baseSystemPrompt;\n\t\tconst capabilitySystemPrompt = await dispatchBeforeAgentStartV2Lifecycle(\n\t\t\tthis._internal,\n\t\t\tthis._baseSystemPrompt,\n\t\t\tthis._baseSystemPromptOptions,\n\t\t);\n\t\tif (capabilitySystemPrompt !== undefined) {\n\t\t\tthis._systemPromptOverride = capabilitySystemPrompt;\n\t\t\tthis.agent.state.systemPrompt = capabilitySystemPrompt;\n\t\t}\n\n\t\t// v8 ignore next -- try 块内所有不发送路径均已提前 return,messages 必然已赋值\n\t\tif (!messages) {\n\t\t\treturn { status: \"done\" };\n\t\t}\n\n\t\tpreflightResult?.(\"started\");\n\t\treturn this._runAgentPrompt(messages);\n\t}\n\n\t/**\n\t * Try to execute a capability command. A cross-system name collision with a\n\t * prompt template or skill is always an explicit error.\n\t */\n\tprivate async _tryExecuteExtensionCommand(text: string): Promise<boolean> {\n\t\t// Parse command name and args\n\t\tconst spaceIndex = text.indexOf(\" \");\n\t\tconst commandName = spaceIndex === -1 ? text.slice(1) : text.slice(1, spaceIndex);\n\t\tconst args = spaceIndex === -1 ? \"\" : text.slice(spaceIndex + 1);\n\n\t\tconst runtime = this._capabilityRuntime;\n\t\tif (runtime?.hasCommand(commandName)) {\n\t\t\tconst templateConflict = this.promptTemplates.some((template) => template.name === commandName);\n\t\t\tconst skillName = commandName.startsWith(\"skill:\") ? commandName.slice(\"skill:\".length) : undefined;\n\t\t\tconst skillConflict =\n\t\t\t\tskillName !== undefined && this._getAvailableSkills().some((skill) => skill.name === skillName);\n\t\t\tif (templateConflict || skillConflict) {\n\t\t\t\tconst source = templateConflict ? \"prompt template\" : \"skill\";\n\t\t\t\tthrow new Error(\n\t\t\t\t\tt(\"Command is registered by both CapabilityAPI and {source}: {command}\", {\n\t\t\t\t\t\tsource,\n\t\t\t\t\t\tcommand: commandName,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t\tconst source =\n\t\t\truntime.listCommands().find(({ definition }) => definition.name === commandName)?.source ?? \"unknown\";\n\t\tconst abortController = new AbortController();\n\t\tthis._commandAbortController = abortController;\n\t\tconst execute = async (): Promise<void> => {\n\t\t\tconst result = await runtime.invokeCommand(commandName, args, {\n\t\t\t\tsignal: abortController.signal,\n\t\t\t\tcwd: this._cwd,\n\t\t\t});\n\t\t\tif (result !== undefined) {\n\t\t\t\tthis._emit({\n\t\t\t\t\ttype: \"capability_command_result\",\n\t\t\t\t\tcommand: commandName,\n\t\t\t\t\tsource,\n\t\t\t\t\tresult,\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t\tconst commandExecution = execute();\n\t\tthis._activeCapabilityCommand = commandExecution;\n\t\ttry {\n\t\t\tawait commandExecution;\n\t\t} finally {\n\t\t\tif (this._commandAbortController === abortController) this._commandAbortController = undefined;\n\t\t\tif (this._activeCapabilityCommand === commandExecution) this._activeCapabilityCommand = undefined;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Expand skill commands (/skill:name args) to their full content.\n\t * Returns the expanded text, or the original text if not a skill command or skill not found.\n\t * Emits errors via extension runner if file read fails.\n\t */\n\tprivate _expandSkillCommand(text: string): string {\n\t\tif (!text.startsWith(\"/skill:\")) return text;\n\n\t\tconst spaceIndex = text.indexOf(\" \");\n\t\tconst skillName = spaceIndex === -1 ? text.slice(7) : text.slice(7, spaceIndex);\n\t\tconst args = spaceIndex === -1 ? \"\" : text.slice(spaceIndex + 1).trim();\n\n\t\tconst skill = this._getAvailableSkills().find((s) => s.name === skillName);\n\t\tif (!skill) return text; // Unknown skill, pass through\n\n\t\ttry {\n\t\t\tconst content = readFileSync(skill.filePath, \"utf-8\");\n\t\t\tconst body = stripFrontmatter(content).trim();\n\t\t\tconst skillBlock = `<skill name=\"${skill.name}\" location=\"${skill.filePath}\">\\nReferences are relative to ${skill.baseDir}.\\n\\n${body}\\n</skill>`;\n\t\t\treturn args ? `${skillBlock}\\n\\n${args}` : skillBlock;\n\t\t} catch (err) {\n\t\t\t// Report like command errors do: process log, non-fatal, original text kept.\n\t\t\tthis._hostLogger?.error(\"session\", \"skill expansion failed\", {\n\t\t\t\t...(this.sessionId === undefined ? {} : { sessionId: this.sessionId }),\n\t\t\t\tfields: { skill: skill.name, path: skill.filePath },\n\t\t\t\tcause: err,\n\t\t\t});\n\t\t\treturn text; // Return original on error\n\t\t}\n\t}\n\n\tprivate async _queueUserInput(\n\t\ttext: string,\n\t\timages: ImageContent[] | undefined,\n\t\tbehavior: \"steer\" | \"followUp\",\n\t\tsource: InputSource,\n\t): Promise<QueuedInputDisposition> {\n\t\tconst processedInput = await this._runInputHandlers(text, images, source);\n\t\tlet expandedText = this._expandSkillCommand(processedInput.text);\n\t\texpandedText = expandPromptTemplate(expandedText, [...this.promptTemplates]);\n\n\t\tif (behavior === \"steer\") {\n\t\t\tawait this._queueSteer(expandedText, processedInput.images);\n\t\t} else {\n\t\t\tawait this._queueFollowUp(expandedText, processedInput.images);\n\t\t}\n\t\treturn \"queued\";\n\t}\n\n\t/**\n\t * Queue a steering message while the agent is running.\n\t * Delivered after the current assistant turn finishes executing its tool calls,\n\t * before the next LLM call.\n\t * Expands skill commands and prompt templates. Errors on extension commands.\n\t * @param images Optional image attachments to include with the message\n\t * @param options Input source; defaults to interactive\n\t * @returns How the input was dispatched (\"queued\"; \"handled\" if a handler consumed it)\n\t * @throws Error if text is an extension command\n\t */\n\tasync steer(\n\t\ttext: string,\n\t\timages?: ImageContent[],\n\t\toptions?: { source?: InputSource },\n\t): Promise<QueuedInputDisposition> {\n\t\treturn this._queueUserInput(text, images, \"steer\", options?.source ?? \"interactive\");\n\t}\n\n\t/**\n\t * Queue a follow-up message to be processed after the agent finishes.\n\t * Delivered only when agent has no more tool calls or steering messages.\n\t * Expands skill commands and prompt templates. Errors on extension commands.\n\t * @param images Optional image attachments to include with the message\n\t * @param options Input source; defaults to interactive\n\t * @returns How the input was dispatched (\"queued\"; \"handled\" if a handler consumed it)\n\t * @throws Error if text is an extension command\n\t */\n\tasync followUp(\n\t\ttext: string,\n\t\timages?: ImageContent[],\n\t\toptions?: { source?: InputSource },\n\t): Promise<QueuedInputDisposition> {\n\t\treturn this._queueUserInput(text, images, \"followUp\", options?.source ?? \"interactive\");\n\t}\n\n\t/**\n\t * Internal: Queue a steering message (already expanded, no extension command check).\n\t */\n\tprivate async _queueSteer(text: string, images?: ImageContent[]): Promise<void> {\n\t\tthis._steeringMessages.push(text);\n\t\tthis._emitQueueUpdate();\n\t\tconst content: (TextContent | ImageContent)[] = [{ type: \"text\", text }];\n\t\tif (images) {\n\t\t\tcontent.push(...images);\n\t\t}\n\t\tthis.agent.steer({\n\t\t\trole: \"user\",\n\t\t\tcontent,\n\t\t\ttimestamp: Date.now(),\n\t\t});\n\t}\n\n\t/**\n\t * Internal: Queue a follow-up message (already expanded, no extension command check).\n\t */\n\tprivate async _queueFollowUp(text: string, images?: ImageContent[]): Promise<void> {\n\t\tthis._followUpMessages.push(text);\n\t\tthis._emitQueueUpdate();\n\t\tconst content: (TextContent | ImageContent)[] = [{ type: \"text\", text }];\n\t\tif (images) {\n\t\t\tcontent.push(...images);\n\t\t}\n\t\tthis.agent.followUp({\n\t\t\trole: \"user\",\n\t\t\tcontent,\n\t\t\ttimestamp: Date.now(),\n\t\t});\n\t}\n\n\t/**\n\t * Send a custom message to the session. Creates a CustomMessageEntry.\n\t *\n\t * Handles four cases:\n\t * - Streaming: queues message (registered in the queued-message view via its\n\t * text content), processed when loop pulls from queue\n\t * - Streaming + triggerTurn false: appended to state/session once the current turn ends\n\t * - Not streaming + triggerTurn: appends to state/session, starts new turn —\n\t * unless manual compaction is in flight (same guard as prompt()), in which\n\t * case the message degrades to a followUp queue entry instead of a\n\t * concurrent turn (D-060 ruling 12 boundary: the compaction revision\n\t * mutex must not be pierced; the queued message is drained at the next\n\t * driving point after compaction ends)\n\t * - Not streaming + no trigger: appends to state/session, no turn\n\t *\n\t * @param message Custom message with customType, content, display, details\n\t * @param options.triggerTurn If true and not streaming, triggers a new LLM turn\n\t * @param options.deliverAs Delivery mode: \"steer\", \"followUp\", or \"nextTurn\"\n\t */\n\tasync sendCustomMessage<T = unknown>(\n\t\tmessage: Pick<CustomMessage<T>, \"customType\" | \"content\" | \"display\" | \"details\">,\n\t\toptions?: { triggerTurn?: boolean; deliverAs?: \"steer\" | \"followUp\" | \"nextTurn\" },\n\t): Promise<void> {\n\t\tconst appMessage = {\n\t\t\trole: \"custom\" as const,\n\t\t\tcustomType: message.customType,\n\t\t\t// Untyped extensions can pass null/missing content; normalize at ingestion.\n\t\t\tcontent: message.content ?? [],\n\t\t\tdisplay: message.display,\n\t\t\tdetails: message.details,\n\t\t\ttimestamp: Date.now(),\n\t\t} satisfies CustomMessage<T>;\n\t\tif (options?.deliverAs === \"nextTurn\") {\n\t\t\tthis._pendingNextTurnMessages.push(appMessage);\n\t\t} else if (this.isStreaming && options?.triggerTurn !== false) {\n\t\t\t// Register the queued text in the session's queued-message view so the\n\t\t\t// display copy and the agent queue stay isomorphic (D-078 fix). See\n\t\t\t// _queuedCopyText for the placeholder rationale.\n\t\t\tconst queuedText = this._queuedCopyText(appMessage.content);\n\t\t\tif (options?.deliverAs === \"followUp\") {\n\t\t\t\tthis._followUpMessages.push(queuedText);\n\t\t\t\tthis.agent.followUp(appMessage);\n\t\t\t} else {\n\t\t\t\tthis._steeringMessages.push(queuedText);\n\t\t\t\tthis.agent.steer(appMessage);\n\t\t\t}\n\t\t\tthis._emitQueueUpdate();\n\t\t} else if (options?.triggerTurn) {\n\t\t\tif (this._compactionAbortController !== undefined) {\n\t\t\t\t// 压缩互斥窗口(D-060 裁决 12 边界,复审 C-1):手动压缩进行中(与\n\t\t\t\t// prompt() 同判据同字段)时不起并发回合——压缩提交按 revision 互斥,\n\t\t\t\t// 并发验收回合会以 revision conflict 打断用户压缩。回注降级为\n\t\t\t\t// followUp 入队:消息不丢(队列可见),压缩结束后的下一驱动点(用户\n\t\t\t\t// 下一交互或下一结算回注)drain 注入。\n\t\t\t\tthis._followUpMessages.push(this._queuedCopyText(appMessage.content));\n\t\t\t\tthis.agent.followUp(appMessage);\n\t\t\t\tthis._emitQueueUpdate();\n\t\t\t} else {\n\t\t\t\tawait this._runAgentPrompt(appMessage);\n\t\t\t}\n\t\t} else if (this.isStreaming) {\n\t\t\t// Appending now would put the message between an assistant tool call and its\n\t\t\t// result, which providers that validate message order reject on replay. Defer\n\t\t\t// to the end of the turn. Nothing is emitted yet: message events must not\n\t\t\t// describe messages the session tree does not contain.\n\t\t\tthis._pendingCustomMessages.push(appMessage);\n\t\t} else {\n\t\t\tthis._appendCustomMessage(appMessage);\n\t\t}\n\t}\n\n\t/**\n\t * Copy text registered in the queued-message view for a queued custom\n\t * message. The copy holds the message's text content; CustomMessage.display\n\t * is a boolean visibility flag, not display text. Content without text\n\t * (e.g. images only) registers a placeholder: an empty copy entry would\n\t * never be matched for removal on delivery (the drain-side guard skips\n\t * empty text) and would desynchronize both layers (D-078). The placeholder\n\t * is a stable literal, deliberately not localized — both registration and\n\t * removal must derive the same string, even if the UI language changes\n\t * between the two calls.\n\t */\n\tprivate _queuedCopyText(content: CustomMessage[\"content\"]): string {\n\t\treturn contentText(content, \"\") || \"(no text)\";\n\t}\n\n\tprivate _appendCustomMessage(appMessage: CustomMessage): void {\n\t\tthis.agent.state.messages.push(appMessage);\n\t\tthis.sessionManager.appendCustomMessageEntry(\n\t\t\tappMessage.customType,\n\t\t\tappMessage.content,\n\t\t\tappMessage.display,\n\t\t\tappMessage.details,\n\t\t);\n\t\tthis._emit({ type: \"message_start\", message: appMessage });\n\t\tthis._emit({ type: \"message_end\", message: appMessage });\n\t}\n\n\t/**\n\t * Append custom messages queued while the agent was running.\n\t * Called once the current turn's tool results are in agent state and session history.\n\t */\n\tprivate _flushPendingCustomMessages(): void {\n\t\tif (this._pendingCustomMessages.length === 0) return;\n\n\t\tconst pending = this._pendingCustomMessages;\n\t\tthis._pendingCustomMessages = [];\n\t\tfor (const appMessage of pending) {\n\t\t\tthis._appendCustomMessage(appMessage);\n\t\t}\n\t}\n\n\t/**\n\t * Send a user message to the agent. Always triggers a turn.\n\t * When the agent is streaming, use deliverAs to specify how to queue the message.\n\t *\n\t * @param content User message content (string or content array)\n\t * @param options.deliverAs Delivery mode when streaming: \"steer\" or \"followUp\"\n\t * @param options.expandPromptTemplates Whether to dispatch extension commands and expand skill commands and prompt templates. Default: false.\n\t */\n\tasync sendUserMessage(\n\t\tcontent: string | (TextContent | ImageContent)[],\n\t\toptions?: { deliverAs?: \"steer\" | \"followUp\"; expandPromptTemplates?: boolean },\n\t): Promise<void> {\n\t\t// Normalize content to text string + optional images\n\t\tlet text: string;\n\t\tlet images: ImageContent[] | undefined;\n\n\t\tif (typeof content === \"string\") {\n\t\t\ttext = content;\n\t\t} else {\n\t\t\tconst textParts: string[] = [];\n\t\t\timages = [];\n\t\t\tfor (const part of content) {\n\t\t\t\tif (part.type === \"text\") {\n\t\t\t\t\ttextParts.push(part.text);\n\t\t\t\t} else {\n\t\t\t\t\timages.push(part);\n\t\t\t\t}\n\t\t\t}\n\t\t\ttext = textParts.join(\"\\n\");\n\t\t\tif (images.length === 0) images = undefined;\n\t\t}\n\n\t\tawait this.prompt(text, {\n\t\t\texpandPromptTemplates: options?.expandPromptTemplates ?? false,\n\t\t\tstreamingBehavior: options?.deliverAs,\n\t\t\timages,\n\t\t\tsource: \"extension\",\n\t\t});\n\t}\n\n\t/**\n\t * Clear all queued messages and return them.\n\t * Useful for restoring to editor when user aborts.\n\t * @returns Object with steering and followUp arrays\n\t */\n\tclearQueue(): { steering: string[]; followUp: string[] } {\n\t\tconst steering = [...this._steeringMessages];\n\t\tconst followUp = [...this._followUpMessages];\n\t\tthis._steeringMessages = [];\n\t\tthis._followUpMessages = [];\n\t\tthis.agent.clearAllQueues();\n\t\tthis._emitQueueUpdate();\n\t\treturn { steering, followUp };\n\t}\n\n\t/**\n\t * Move a queued message from index `from` to index `to` within the steering\n\t * or follow-up queue. Indices refer to the session's queued-message view\n\t * (getSteeringMessages()/getFollowUpMessages() and queue_update payloads)\n\t * at the moment of the call; the same move is applied to the agent queue.\n\t * During streaming, drain points consume queued messages, so previously\n\t * observed indices can become stale.\n\t * @returns true when the message moved; false for from === to, out-of-bounds\n\t * indices, or an agent-side rejection — both layers stay untouched in every\n\t * false case\n\t */\n\treorderQueuedMessages(queue: \"steer\" | \"followUp\", from: number, to: number): boolean {\n\t\tconst copy = queue === \"steer\" ? this._steeringMessages : this._followUpMessages;\n\t\tif (from === to || from < 0 || to < 0 || from >= copy.length || to >= copy.length) {\n\t\t\treturn false;\n\t\t}\n\t\t// Apply the move on the agent queue first and mirror it on the session copy\n\t\t// only after the agent accepts it. A rejected move (stale index) leaves\n\t\t// both layers untouched instead of widening a copy/queue mismatch.\n\t\tif (!this.agent.reorderQueuedMessages(queue, from, to)) {\n\t\t\treturn false;\n\t\t}\n\t\tconst [moved] = copy.splice(from, 1);\n\t\tcopy.splice(to, 0, moved);\n\t\tthis._emitQueueUpdate();\n\t\treturn true;\n\t}\n\n\t/**\n\t * Remove the queued message at `index` from the steering or follow-up queue.\n\t * Indices refer to the session's queued-message view at the moment of the\n\t * call; the same removal is applied to the agent queue.\n\t * @returns The removed queued text, or null when index is out of bounds or the\n\t * agent-side removal is rejected — both layers stay untouched in every null case\n\t */\n\tremoveQueuedMessageAt(queue: \"steer\" | \"followUp\", index: number): string | null {\n\t\tconst copy = queue === \"steer\" ? this._steeringMessages : this._followUpMessages;\n\t\tif (index < 0 || index >= copy.length) {\n\t\t\treturn null;\n\t\t}\n\t\t// Remove on the agent queue first and mirror it on the session copy only\n\t\t// after the agent accepts it. A rejected removal (stale index) leaves both\n\t\t// layers untouched instead of widening a copy/queue mismatch.\n\t\tif (this.agent.removeQueuedMessage(queue, index) === null) {\n\t\t\treturn null;\n\t\t}\n\t\tconst [removed] = copy.splice(index, 1);\n\t\tthis._emitQueueUpdate();\n\t\treturn removed;\n\t}\n\n\t/** Number of pending messages (includes both steering and follow-up) */\n\tget pendingMessageCount(): number {\n\t\treturn this._steeringMessages.length + this._followUpMessages.length;\n\t}\n\n\t/** Get pending steering messages (read-only) */\n\tgetSteeringMessages(): readonly string[] {\n\t\treturn this._steeringMessages;\n\t}\n\n\t/** Get pending follow-up messages (read-only) */\n\tgetFollowUpMessages(): readonly string[] {\n\t\treturn this._followUpMessages;\n\t}\n\n\tget resourceLoader(): ResourceLoader {\n\t\treturn this._resourceLoader;\n\t}\n\n\t/**\n\t * Why the active turn was aborted, following codex's TurnAbortReason\n\t * (protocol.rs:4173). The interruption marker's visible text stays fixed;\n\t * the reason rides the marker `details` for hosts and plugins.\n\t *\n\t * 中断分级(设计 §4.2,2026-10-02):缺省级联终止全部后台委派(原契约);\n\t * `cancelAgentTasks: false` 只停本回合(模型流/工具/bash),后台 fence 不动\n\t * ——两段式 Esc 的第一次按键走这一档。\n\t */\n\tasync abort(reason?: TurnAbortReason, options?: { cancelAgentTasks?: boolean }): Promise<void> {\n\t\tthis._pendingAbortReason = reason ?? \"interrupted\";\n\t\tthis._lastAbortReason = this._pendingAbortReason;\n\t\t// 级联取消子 agent 任务(D-044 §4.2):fire-and-forget,不阻塞父会话自身的 abort。\n\t\tconst cancelAgentTasks = options?.cancelAgentTasks !== false;\n\t\tif (cancelAgentTasks) {\n\t\t\tthis._agentTaskScopeAbortController.abort(reason ?? \"interrupted\");\n\t\t}\n\t\ttry {\n\t\t\tawait this._abortInternal();\n\t\t\tthis._appendTurnInterruptedMarker();\n\t\t} finally {\n\t\t\tthis._pendingAbortReason = undefined;\n\t\t\t// epoch 刷新只在当前 fence 确已 spent 时发生(复审 2026-10-02:重叠\n\t\t\t// abort 下无条件刷新可能把一个从未 abort 的新 controller 再替换一次,\n\t\t\t// 两次刷新之间创建的任务会静默失联;spended 判定堵住所有交错变体)。\n\t\t\tif (this._agentTaskScopeAbortController.signal.aborted) {\n\t\t\t\tthis._agentTaskScopeAbortController = new AbortController();\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * 只级联终止全部后台委派(设计 §4.2 中断分级):中止 fence 并刷新 epoch,\n\t * 不中止当前回合——`/stop-agents` 命令的唯一执行面。无后台任务时为幂等 no-op。\n\t */\n\tabortAgentTasks(reason?: TurnAbortReason): void {\n\t\tthis._agentTaskScopeAbortController.abort(reason ?? \"interrupted\");\n\t\tthis._agentTaskScopeAbortController = new AbortController();\n\t}\n\n\t/**\n\t * 活跃后台委派数(设计 §4.2 中断分级):capability runtime 活跃任务集合的\n\t * 有界投影——创建即入;终态经投影按状态过滤,成员随 dispose 释放。供宿主做中断分级提示与状态显示。\n\t */\n\tgetActiveAgentTaskCount(): number {\n\t\treturn this._capabilityRuntime?.getActiveAgentTaskCount() ?? 0;\n\t}\n\n\t/**\n\t * Abort without the interruption marker; used by internal flows (compaction,\n\t * teardown) that abort for their own bookkeeping. Takes no reason: the abort\n\t * reason only exists where the marker is written.\n\t */\n\tasync _abortInternal(): Promise<void> {\n\t\tthis.abortRetry();\n\t\tthis._policyDecisionAbortController?.abort(\"session aborted\");\n\t\tthis._commandAbortController?.abort(\"session aborted\");\n\t\tthis.abortCompaction();\n\t\tthis.abortBranchSummary();\n\t\tthis.abortBash();\n\t\tthis.agent.abort();\n\t\tawait this.waitForIdle();\n\t}\n\n\t/**\n\t * Append a model-visible marker after an abort that actually cut a turn\n\t * short. transform-messages drops the aborted assistant message on replay,\n\t * so without this marker the model has no way to learn that the\n\t * interruption happened. Tool calls skipped mid-batch already carry their\n\t * own persisted error results; this covers the streaming-interrupt case.\n\t * The text is intentionally fixed (codex keeps INTERRUPTED_GUIDANCE stable\n\t * across reasons); the abort reason rides `details` for host consumers.\n\t */\n\tprivate _appendTurnInterruptedMarker(): void {\n\t\tconst messages = this.agent.state.messages;\n\t\tconst last = messages[messages.length - 1];\n\t\tif (last?.role === \"custom\" && last.customType === \"turn-interrupted\") {\n\t\t\treturn;\n\t\t}\n\t\tlet lastAssistantAborted = false;\n\t\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\t\tconst message = messages[i];\n\t\t\tif (message.role === \"assistant\") {\n\t\t\t\tlastAssistantAborted = message.stopReason === \"aborted\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (!lastAssistantAborted) {\n\t\t\treturn;\n\t\t}\n\t\tthis._appendCustomMessage({\n\t\t\trole: \"custom\",\n\t\t\tcustomType: \"turn-interrupted\",\n\t\t\tcontent: \"The previous turn was interrupted by the user before it completed.\",\n\t\t\tdisplay: false,\n\t\t\tdetails: this._pendingAbortReason === undefined ? undefined : { reason: this._pendingAbortReason },\n\t\t\ttimestamp: Date.now(),\n\t\t});\n\t}\n\n\tprivate async _abortActiveCapabilityCommand(reason: string): Promise<void> {\n\t\tthis._commandAbortController?.abort(reason);\n\t\tawait this._activeCapabilityCommand;\n\t}\n\n\t/**\n\t * Stop every operation that can still mutate session state before a reload\n\t * replaces the runtime. This deliberately does not call `abort()`: reload\n\t * must also wait for queued compaction and branch-summary work, while a\n\t * compaction itself calls `abort()` as part of its normal entry path.\n\t */\n\tprivate async _cancelAndDrainForReload(): Promise<void> {\n\t\tthis.abortRetry();\n\t\tthis._policyDecisionAbortController?.abort(\"session reloaded\");\n\t\tthis._commandAbortController?.abort(\"session reloaded\");\n\t\tthis.abortCompaction();\n\t\tthis.abortBranchSummary();\n\t\tthis.abortBash();\n\t\tthis.agent.abort();\n\n\t\tawait Promise.allSettled(\n\t\t\t[\n\t\t\t\tthis._activeCapabilityCommand,\n\t\t\t\tthis._activeCompactionPromise,\n\t\t\t\tthis._branchSummaryPromise,\n\t\t\t\tthis._activeContextTransition,\n\t\t\t\t...this._activeBashPromises,\n\t\t\t\tthis.waitForIdle(),\n\t\t\t].filter((operation): operation is Promise<unknown> => operation !== undefined),\n\t\t);\n\t\t// The tail includes compactions that were enqueued just before the reload\n\t\t// barrier. They must settle before the old runtime is revoked.\n\t\tawait this._compactionQueue.catch(() => undefined);\n\t}\n\n\tasync waitForIdle(): Promise<void> {\n\t\tif (this.isIdle) {\n\t\t\treturn;\n\t\t}\n\t\tawait this._getIdleWaitPromise();\n\t}\n\n\t// =========================================================================\n\t// Model Management\n\t// =========================================================================\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate async _emitModelSelect(\n\t\tnextModel: Model<Api>,\n\t\tpreviousModel: Model<Api> | undefined,\n\t\tsource: \"set\" | \"cycle\" | \"restore\",\n\t): Promise<void> {\n\t\treturn emitModelSelect(this._internal, nextModel, previousModel, source);\n\t}\n\n\t/**\n\t * Set model directly.\n\t * Validates that auth is configured and saves to the session transcript.\n\t * Persists to global defaults only when options.persist is true.\n\t * @throws Error if no auth is configured for the model\n\t */\n\tasync setModel(model: Model<Api>, options: ModelMutationOptions = {}): Promise<void> {\n\t\treturn setModel(this._internal, model, options);\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _addPersistedDefaultToNonEmptyScope(model: Model<Api>): void {\n\t\taddPersistedDefaultToNonEmptyScope(this._internal, model);\n\t}\n\n\t/**\n\t * Cycle to next/previous model.\n\t * Uses scoped models (from --models flag) if available, otherwise all available models.\n\t * @param direction - \"forward\" (default) or \"backward\"\n\t * @returns The new model info, or undefined if only one model available\n\t */\n\tasync cycleModel(\n\t\tdirection: \"forward\" | \"backward\" = \"forward\",\n\t\toptions: ModelMutationOptions = {},\n\t): Promise<ModelCycleResult | undefined> {\n\t\treturn cycleModel(this._internal, direction, options);\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate async _cycleScopedModel(\n\t\tdirection: \"forward\" | \"backward\",\n\t\toptions: ModelMutationOptions,\n\t): Promise<ModelCycleResult | undefined> {\n\t\treturn cycleScopedModel(this._internal, direction, options);\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate async _cycleAvailableModel(\n\t\tdirection: \"forward\" | \"backward\",\n\t\toptions: ModelMutationOptions,\n\t): Promise<ModelCycleResult | undefined> {\n\t\treturn cycleAvailableModel(this._internal, direction, options);\n\t}\n\n\t// =========================================================================\n\t// Thinking Level Management\n\t// =========================================================================\n\n\t/**\n\t * Set thinking level.\n\t * Clamps to model capabilities based on available thinking levels.\n\t * Saves the clamped level to the session transcript only if the level actually changes.\n\t * Persists the requested level to global defaults only when options.persist is true.\n\t */\n\tsetThinkingLevel(level: ThinkingLevel, options: ModelMutationOptions = {}): void {\n\t\tconst availableLevels = this.getAvailableThinkingLevels();\n\t\tconst effectiveLevel = availableLevels.includes(level) ? level : this._clampThinkingLevel(level, availableLevels);\n\n\t\t// Only persist if actually changing\n\t\tconst previousLevel = this.agent.state.thinkingLevel;\n\t\tconst isChanging = effectiveLevel !== previousLevel;\n\n\t\tthis.agent.state.thinkingLevel = effectiveLevel;\n\n\t\tif (options.persist) {\n\t\t\tthis.settingsManager.setDefaultThinkingLevel(level);\n\t\t}\n\n\t\tif (isChanging) {\n\t\t\tthis.sessionManager.appendThinkingLevelChange(effectiveLevel);\n\t\t\tthis._emit({ type: \"thinking_level_changed\", level: effectiveLevel });\n\t\t\tvoid dispatchThinkingLevelSelectLifecycle(this._internal, effectiveLevel, previousLevel);\n\t\t}\n\t}\n\n\t/**\n\t * Cycle to next thinking level.\n\t * @returns New level, or undefined if model doesn't support thinking\n\t */\n\tcycleThinkingLevel(options: ModelMutationOptions = {}): ThinkingLevel | undefined {\n\t\tif (!this.supportsThinking()) return undefined;\n\n\t\tconst levels = this.getAvailableThinkingLevels();\n\t\tconst currentIndex = levels.indexOf(this.thinkingLevel);\n\t\tconst nextIndex = (currentIndex + 1) % levels.length;\n\t\tconst nextLevel = levels[nextIndex];\n\n\t\tthis.setThinkingLevel(nextLevel, options);\n\t\treturn nextLevel;\n\t}\n\n\t/**\n\t * Get available thinking levels for current model.\n\t * The provider will clamp to what the specific model supports internally.\n\t */\n\tgetAvailableThinkingLevels(): ThinkingLevel[] {\n\t\tif (!this.model) return [...THINKING_LEVEL_OPTIONS];\n\t\treturn getSupportedThinkingLevels(this.model) as ThinkingLevel[];\n\t}\n\n\t/**\n\t * Check if current model supports thinking/reasoning.\n\t */\n\tsupportsThinking(): boolean {\n\t\treturn !!this.model?.reasoning;\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _getThinkingLevelForModelSwitch(targetModel?: Model<Api>, explicitLevel?: ThinkingLevel): ThinkingLevel {\n\t\treturn getThinkingLevelForModelSwitch(this._internal, targetModel, explicitLevel);\n\t}\n\n\tprivate _clampThinkingLevel(level: ThinkingLevel, _availableLevels: ThinkingLevel[]): ThinkingLevel {\n\t\treturn this.model ? (clampThinkingLevel(this.model, level) as ThinkingLevel) : \"off\";\n\t}\n\n\t// =========================================================================\n\t// Queue Mode Management\n\t// =========================================================================\n\n\tprivate syncQueueModesFromSettings(): void {\n\t\tthis.agent.steeringMode = this.settingsManager.getSteeringMode();\n\t\tthis.agent.followUpMode = this.settingsManager.getFollowUpMode();\n\t}\n\n\t/**\n\t * Set steering message mode.\n\t * Saves to settings.\n\t */\n\tsetSteeringMode(mode: \"all\" | \"one-at-a-time\"): void {\n\t\tthis.agent.steeringMode = mode;\n\t\tthis.settingsManager.setSteeringMode(mode);\n\t}\n\n\t/**\n\t * Set follow-up message mode.\n\t * Saves to settings.\n\t */\n\tsetFollowUpMode(mode: \"all\" | \"one-at-a-time\"): void {\n\t\tthis.agent.followUpMode = mode;\n\t\tthis.settingsManager.setFollowUpMode(mode);\n\t}\n\n\t// =========================================================================\n\t// Compaction\n\t// =========================================================================\n\n\t/** Queue compaction work so canonical commit and runtime projection stay ordered. */\n\tprivate _enqueueCompaction<T>(operation: () => Promise<T>): Promise<T> {\n\t\treturn enqueueCompaction(this._internal, operation);\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _observeLifecycleDeliveryError(error: unknown, extensionPath: string, event: string): void {\n\t\tobserveLifecycleDeliveryError(this._internal, error, extensionPath, event);\n\t}\n\n\t/**\n\t * Manually compact the session context.\n\t *\n\t * This is the manual entry point used by `/compact`, RPC, and extensions. It is\n\t * separate from automatic threshold/overflow compaction, which enters through\n\t * `_checkCompaction()` and `_runAutoCompaction()`. After preparation and the\n\t * `session_before_compact` hook, both paths use the selected compaction policy\n\t * unless the hook cancels or supplies a custom result, then commit the result\n\t * against the revision captured for that branch.\n\t *\n\t * Aborts the current agent operation first. Manual compaction never retries or\n\t * continues the interrupted agent turn.\n\t *\n\t * @param customInstructions Optional instructions for the compaction summary\n\t */\n\tasync compact(customInstructions?: string): Promise<CompactionResult | CompactionCancelledResult> {\n\t\tif (this._reloadInProgress) {\n\t\t\tthrow new Error(t(\"Session reload in progress; compaction is unavailable\"));\n\t\t}\n\t\treturn this._enqueueCompaction(() => this._compactInternal(customInstructions));\n\t}\n\n\tprivate _compactInternal(customInstructions?: string): Promise<CompactionResult | CompactionCancelledResult> {\n\t\treturn compactInternal(this._internal, customInstructions);\n\t}\n\n\t/**\n\t * Cancel in-progress compaction (manual or auto).\n\t */\n\tabortCompaction(): void {\n\t\tthis._compactionAbortController?.abort();\n\t\tthis._autoCompactionAbortController?.abort();\n\t}\n\n\t/**\n\t * Cancel in-progress branch summarization.\n\t */\n\tabortBranchSummary(): void {\n\t\tthis._branchSummaryAbortController?.abort();\n\t}\n\n\t/**\n\t * Dispatch automatic compaction after `agent_end` or before prompt submission.\n\t * Manual compaction does not call this method; it enters through `compact()`.\n\t *\n\t * Automatic cases:\n\t * 1. Overflow with retry: a context-overflow error or recoverable length stop;\n\t * remove the failed assistant message, compact, and retry the turn once.\n\t * 2. Overflow without retry: a successful response exceeded the configured\n\t * context window; compact but preserve the completed response.\n\t * 3. Threshold without retry: valid or estimated context usage crossed the\n\t * configured threshold; compact without retrying the completed response.\n\t *\n\t * Each case calls `_runAutoCompaction()`. After preparation and the\n\t * `session_before_compact` hook, that method calls the lower-level `compact()`\n\t * function imported from `./compaction/index.ts`, unless the hook cancels or\n\t * supplies a custom result.\n\t *\n\t * @param assistantMessage The assistant message to check\n\t * @param skipAbortedCheck If false, include aborted messages (for pre-prompt check). Default: true\n\t * @returns Whether the post-run loop should call `agent.continue()` for overflow recovery or queued messages\n\t */\n\tprivate _checkCompaction(\n\t\tassistantMessage: AssistantMessage,\n\t\tskipAbortedCheck = true,\n\t\tsignal?: AbortSignal,\n\t): Promise<boolean> {\n\t\treturn checkCompaction(this._internal, assistantMessage, skipAbortedCheck, signal);\n\t}\n\n\t/**\n\t * Execute threshold or overflow compaction. Manual compaction uses\n\t * `AgentSession.compact()` instead. Both paths use the selected compaction\n\t * policy after preparation and extension interception, then commit against the\n\t * branch revision captured before asynchronous work.\n\t *\n\t * @param reason Automatic trigger selected by `_checkCompaction()`\n\t * @param willRetry Whether to continue the interrupted turn after overflow compaction\n\t * @returns Whether the post-run loop should call `agent.continue()`\n\t */\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _runAutoCompaction(reason: \"overflow\" | \"threshold\", willRetry: boolean): Promise<boolean> {\n\t\treturn runAutoCompaction(this._internal, reason, willRetry);\n\t}\n\n\t/**\n\t * Run the session-start boundary: dispatch session.start@1 to the capability\n\t * runtime and run the resource discovery pass (contributed skills/prompts/\n\t * themes). Hosts await this once after constructing (or rebinding to) a\n\t * session, before the first prompt.\n\t */\n\tasync startSession(): Promise<void> {\n\t\tawait dispatchSessionStartLifecycle(\n\t\t\tthis._internal,\n\t\t\tthis._sessionStartEvent.reason,\n\t\t\tthis._sessionStartEvent.previousSessionFile,\n\t\t);\n\t\tawait this.extendResourcesFromExtensions(this._sessionStartEvent.reason === \"reload\" ? \"reload\" : \"startup\");\n\t}\n\n\tprivate async extendResourcesFromExtensions(reason: \"startup\" | \"reload\"): Promise<void> {\n\t\treturn extendResourcesFromExtensions(this._internal, reason);\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate buildExtensionResourcePaths(entries: Array<{ path: string; extensionPath: string }>): Array<{\n\t\tpath: string;\n\t\tmetadata: { source: string; scope: \"temporary\"; origin: \"top-level\"; baseDir?: string };\n\t}> {\n\t\treturn buildExtensionResourcePaths(this._internal, entries);\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate getExtensionSourceLabel(extensionPath: string): string {\n\t\treturn getExtensionSourceLabel(extensionPath);\n\t}\n\n\tprivate _refreshToolRegistry(options?: { activeToolNames?: string[]; includeAllExtensionTools?: boolean }): void {\n\t\trefreshToolRegistry(this._internal, options);\n\t}\n\n\t/** Registry tool names whose owning capability plugin is `pluginId`. */\n\tprivate _toolNamesForPlugin(pluginId: string): string[] {\n\t\treturn Array.from(this._toolDefinitions.entries())\n\t\t\t.filter(([, entry]) => entry.sourceInfo.source === pluginId)\n\t\t\t.map(([name]) => name);\n\t}\n\n\tprivate _readManual(manualPath: string): Promise<string> {\n\t\treturn readFileUtf8(manualPath, \"utf8\");\n\t}\n\n\tprivate _createCapabilityMountTools() {\n\t\treturn createCapabilityMountTools({\n\t\t\tgetCards: () => this._deferredCapabilityCards,\n\t\t\ttoolNamesForPlugin: (pluginId) => {\n\t\t\t\tconst names = this._toolNamesForPlugin(pluginId);\n\t\t\t\t// readonly narrowing (宪法 §6): the registry keeps non-readonlySafe\n\t\t\t\t// tools even in readonly sessions (the normal load path filters them\n\t\t\t\t// at activation); mount must not smuggle them past that gate.\n\t\t\t\tif (this._capabilityMode !== \"readonly\") return names;\n\t\t\t\tconst readonlySafe = new Set(\n\t\t\t\t\t(this._capabilityRuntime?.listTools() ?? [])\n\t\t\t\t\t\t.filter((tool) => tool.source === pluginId)\n\t\t\t\t\t\t.filter((tool) => tool.readonlySafe === true)\n\t\t\t\t\t\t.map((tool) => tool.name),\n\t\t\t\t);\n\t\t\t\treturn names.filter((name) => readonlySafe.has(name));\n\t\t\t},\n\t\t\tgetActiveToolNames: () => this.getActiveToolNames(),\n\t\t\tsetActiveToolsByName: (toolNames) => this.setActiveToolsByName(toolNames),\n\t\t\treadManual: (manualPath) => this._readManual(manualPath),\n\t\t});\n\t}\n\n\t/**\n\t * Register on-demand capability cards after construction (插件按需挂载与能力手册设计 §4).\n\t * The sdk assembly calls this once the plugin pool settles, before loading;\n\t * first call also injects the capability_mount / capability_unmount pair.\n\t * Idempotent: later calls replace the card set.\n\t */\n\tregisterDeferredCapabilityCards(cards: readonly DeferredCapabilityCardV1[]): void {\n\t\tthis._deferredCapabilityCards = [...cards];\n\t\tif (this._deferredCapabilityCards.length === 0 || this._capabilityMountToolsRegistered) return;\n\t\tthis._capabilityMountToolsRegistered = true;\n\t\tthis._customTools.push(...this._createCapabilityMountTools());\n\t\tthis._refreshToolRegistry();\n\t}\n\n\tprivate _syncCapabilityTools(): void {\n\t\tsyncCapabilityTools(this._internal);\n\t}\n\n\tprivate _getCapabilitySkills(): Skill[] {\n\t\treturn getCapabilitySkills(this._internal);\n\t}\n\n\tprivate _getAvailableSkills(): Skill[] {\n\t\tconst capabilitySkills = this._getCapabilitySkills();\n\t\treturn capabilitySkills.length > 0 ? capabilitySkills : this._resourceLoader.getSkills().skills;\n\t}\n\n\tprivate _validateCapabilitySkillConflicts(): void {\n\t\tvalidateCapabilitySkillConflicts(this._internal);\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _refreshBootstrapSkills(): Promise<void> {\n\t\treturn refreshBootstrapSkills(this._internal);\n\t}\n\n\tprivate async _disposeCapabilityPlugins(): Promise<void> {\n\t\tconst handles = Array.from(this._capabilityPlugins.values());\n\t\tthis._isDisposingCapabilityPlugins = true;\n\t\tconst errors: unknown[] = [];\n\t\ttry {\n\t\t\tfor (const handle of handles) {\n\t\t\t\ttry {\n\t\t\t\t\tawait handle.dispose();\n\t\t\t\t} catch (error) {\n\t\t\t\t\terrors.push(error);\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tthis._isDisposingCapabilityPlugins = false;\n\t\t}\n\t\tif (errors.length === 1) throw errors[0];\n\t\tif (errors.length > 1) throw new AggregateError(errors, \"Capability plugin disposal failed\");\n\t}\n\n\t/**\n\t * 插件日志记录 → 宿主进程日志(会话轨迹第 2 期,设计 §7.2):HostLogger 是\n\t * debug/info/warn/error 四方法(无泛用 log),按记录级别映射调用;级别门槛由\n\t * logger 自身过滤(\"级别沿用宿主日志级别门槛\")。src 用 pluginId(宿主日志的\n\t * 来源标记位);sessionId 随行。LoggerRecord 当前无已填充的 correlationId\n\t * (recordLog 不写该字段),不编造 traceId。\n\t */\n\tprivate _forwardLogRecordToHost(record: LoggerRecord): void {\n\t\tconst hostLogger = this._hostLogger;\n\t\tif (!hostLogger) return;\n\t\tconst context: HostLogContext = {\n\t\t\t...(record.sessionId === undefined ? {} : { sessionId: record.sessionId }),\n\t\t\t...(record.fields === undefined ? {} : { fields: record.fields as Record<string, unknown> }),\n\t\t\t...(record.cause === undefined ? {} : { cause: record.cause }),\n\t\t};\n\t\tswitch (record.level) {\n\t\t\tcase \"debug\":\n\t\t\t\thostLogger.debug(record.pluginId, record.message, context);\n\t\t\t\tbreak;\n\t\t\tcase \"info\":\n\t\t\t\thostLogger.info(record.pluginId, record.message, context);\n\t\t\t\tbreak;\n\t\t\tcase \"warn\":\n\t\t\t\thostLogger.warn(record.pluginId, record.message, context);\n\t\t\t\tbreak;\n\t\t\tcase \"error\":\n\t\t\t\thostLogger.error(record.pluginId, record.message, context);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tprivate _buildRuntime(options: { activeToolNames?: string[]; includeAllExtensionTools?: boolean }): void {\n\t\t// 对齐 context transition 控制器的替换模式:runtime 重建时刷新 parent\n\t\t// 取消栅栏,防止 reload 后新 runtime 的任务绑到旧 spent 信号被立即取消。\n\t\tthis._agentTaskScopeAbortController = new AbortController();\n\t\tthis._capabilityRuntime = createCapabilityRuntime(\n\t\t\t{\n\t\t\t\tapiVersion: EXPERIMENTAL_PUBLIC_API_VERSION,\n\t\t\t\tmode: this._capabilityMode,\n\t\t\t\t// D-075 S4 second batch: the host agent dir rides the public\n\t\t\t\t// HostCapabilities so disk-state plugins resolve their config files.\n\t\t\t\t...(this._agentDir === undefined ? {} : { agentDir: this._agentDir }),\n\t\t\t\t// D-075 S4 third batch: the subagent delegation host services ride\n\t\t\t\t// the public HostCapabilities (communication wiring, turn-scoped\n\t\t\t\t// digest/correlation context, suite role associations) — the same\n\t\t\t\t// facts the embedded builtin used to receive as constructor options.\n\t\t\t\t...(this._communication === undefined ? {} : { communication: this._communication }),\n\t\t\t\t...(this._turnContext === undefined ? {} : { turnContext: this._turnContext }),\n\t\t\t\t...(this._roleAssociations === undefined ? {} : { roleAssociations: this._roleAssociations }),\n\t\t\t\t// D-075 S4 fourth batch: the memory storage injection face rides\n\t\t\t\t// the public HostCapabilities — the first-party memory plugin\n\t\t\t\t// binds these components in place of its built-in defaults.\n\t\t\t\t...(this._memoryStorage === undefined ? {} : { memoryStorage: this._memoryStorage }),\n\t\t\t\t// The session working directory rides the public HostCapabilities as a host\n\t\t\t\t// service so workspace-bound plugins (LSP real host) resolve their adapters.\n\t\t\t\tworkspaceDirectory: this._cwd,\n\t\t\t\t// 模型目录宿主服务(D-082 批 3b,契约 B):provider-failover 装载预检/\n\t\t\t\t// 目录快照读面(api.host.modelCatalog)。全部是 ModelRuntime 静态目录\n\t\t\t\t// 与凭据条目的即时读投影,零网络、零 OAuth;resolveModel 返回结构视图\n\t\t\t\t// (provider/contextWindow/maxTokens/compat/thinkingLevelMap 五字段),\n\t\t\t\t// 不透出内部 Model 对象,未知 provider/model 对返回 undefined。\n\t\t\t\tmodelCatalog: {\n\t\t\t\t\tresolveModel: (provider, modelId) => {\n\t\t\t\t\t\tconst model = this._modelRuntime.getModel(provider, modelId);\n\t\t\t\t\t\tif (!model) return undefined;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tprovider: model.provider,\n\t\t\t\t\t\t\tcontextWindow: model.contextWindow,\n\t\t\t\t\t\t\tmaxTokens: model.maxTokens,\n\t\t\t\t\t\t\t...(model.compat === undefined ? {} : { compat: model.compat }),\n\t\t\t\t\t\t\t...(model.thinkingLevelMap === undefined ? {} : { thinkingLevelMap: model.thinkingLevelMap }),\n\t\t\t\t\t\t};\n\t\t\t\t\t},\n\t\t\t\t\thasProvider: (providerId) => this._modelRuntime.getProvider(providerId) !== undefined,\n\t\t\t\t\thasConfiguredAuth: (providerId) => this._modelRuntime.hasConfiguredAuth(providerId),\n\t\t\t\t},\n\t\t\t\tfeatures: [\n\t\t\t\t\t\"tools\",\n\t\t\t\t\t\"skills\",\n\t\t\t\t\t\"logger-v1\",\n\t\t\t\t\t\"diagnostics-v1\",\n\t\t\t\t\t\"plugin-state-v1\",\n\t\t\t\t\t\"runtime-inspector-v1\",\n\t\t\t\t\t\"retry-policy\",\n\t\t\t\t\t\"compaction-policy\",\n\t\t\t\t\t\"overflow-policy\",\n\t\t\t\t\t\"events\",\n\t\t\t\t\t\"operations\",\n\t\t\t\t\t\"rpc\",\n\t\t\t\t\t\"context\",\n\t\t\t\t\t\"provider-headers\",\n\t\t\t\t\t\"credentials\",\n\t\t\t\t\t\"commands\",\n\t\t\t\t\t\"session\",\n\t\t\t\t\t\"session-revision-v1\",\n\t\t\t\t\t\"session-export\",\n\t\t\t\t\t\"output-artifacts\",\n\t\t\t\t\t...(this._agentTaskAdapter || this._agentSessionReader || this._agentSessionLister ? [\"agents\"] : []),\n\t\t\t\t\t...(this._agentTaskResults ? [\"agent-result-replay-v1\"] : []),\n\t\t\t\t\t...(this._agentComposition ? [\"agent-composition-v1\"] : []),\n\t\t\t\t\t...(this._interactionHost ? [\"interaction\"] : []),\n\t\t\t\t],\n\t\t\t\ttransports: [\"in-process\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\t...(this._agentTaskAdapter ? { agents: this._agentTaskAdapter } : {}),\n\t\t\t\t...(this._agentTaskResults ? { agentResults: this._agentTaskResults } : {}),\n\t\t\t\t...(this._agentSessionReader ? { agentSessionReader: this._agentSessionReader } : {}),\n\t\t\t\t...(this._agentSessionLister ? { agentSessionLister: this._agentSessionLister } : {}),\n\t\t\t\t...(this._agentComposition ? { composition: this._agentComposition } : {}),\n\t\t\t\t...(this._interactionHost ? { interaction: this._interactionHost } : {}),\n\t\t\t\tparentSignal: () => this._agentTaskScopeAbortController.signal,\n\t\t\t\t...(this._traceService === undefined ? {} : { trace: this._traceService }),\n\t\t\t\t...(this._modelRuntime\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tmodelRuntime: {\n\t\t\t\t\t\t\t\tgetModelFacts: () => {\n\t\t\t\t\t\t\t\t\tconst model = this.agent.state.model;\n\t\t\t\t\t\t\t\t\tif (!model) return undefined;\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\tprovider: model.provider,\n\t\t\t\t\t\t\t\t\t\tid: model.id,\n\t\t\t\t\t\t\t\t\t\tcontextWindow: model.contextWindow ?? 0,\n\t\t\t\t\t\t\t\t\t\tmaxTokens: model.maxTokens ?? 0,\n\t\t\t\t\t\t\t\t\t\treasoning: model.reasoning ?? false,\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tinvoke: async (\n\t\t\t\t\t\t\t\t\tinput: { systemPrompt?: string; prompt: string; maxTokens?: number; thinkingLevel?: string },\n\t\t\t\t\t\t\t\t\toptions?: { signal?: AbortSignal },\n\t\t\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\t\t\tconst model = this.agent.state.model;\n\t\t\t\t\t\t\t\t\tif (!model) throw new Error(t(\"No model is set on this session's agent\"));\n\t\t\t\t\t\t\t\t\tconst authResult = await this._modelRuntime.getAuth(model, {\n\t\t\t\t\t\t\t\t\t\t...(options?.signal === undefined ? {} : { signal: options.signal }),\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tconst requestModel = authResult?.auth.baseUrl\n\t\t\t\t\t\t\t\t\t\t? { ...model, baseUrl: authResult.auth.baseUrl }\n\t\t\t\t\t\t\t\t\t\t: model;\n\t\t\t\t\t\t\t\t\tconst context: Parameters<typeof this.agent.streamFunction>[1] = {\n\t\t\t\t\t\t\t\t\t\t...(input.systemPrompt === undefined ? {} : { systemPrompt: input.systemPrompt }),\n\t\t\t\t\t\t\t\t\t\tmessages: [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\trole: \"user\",\n\t\t\t\t\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: input.prompt }],\n\t\t\t\t\t\t\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\tconst requestOptions: Record<string, unknown> = {\n\t\t\t\t\t\t\t\t\t\t...(input.maxTokens === undefined ? {} : { maxTokens: input.maxTokens }),\n\t\t\t\t\t\t\t\t\t\t...(input.thinkingLevel && input.thinkingLevel !== \"off\" && model.reasoning\n\t\t\t\t\t\t\t\t\t\t\t? { reasoning: input.thinkingLevel }\n\t\t\t\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t\t\t\t...(authResult?.auth.apiKey === undefined ? {} : { apiKey: authResult.auth.apiKey }),\n\t\t\t\t\t\t\t\t\t\t...(authResult?.auth.headers === undefined ? {} : { headers: authResult.auth.headers }),\n\t\t\t\t\t\t\t\t\t\t...(authResult?.env === undefined ? {} : { env: authResult.env }),\n\t\t\t\t\t\t\t\t\t\t...(options?.signal === undefined ? {} : { signal: options.signal }),\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\tconst stream = await this.agent.streamFunction(requestModel, context, requestOptions);\n\t\t\t\t\t\t\t\t\tconst response = await stream.result();\n\t\t\t\t\t\t\t\t\tif (response.stopReason === \"aborted\") return { version: 1, status: \"aborted\" };\n\t\t\t\t\t\t\t\t\tif (response.stopReason === \"error\")\n\t\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\t\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\t\t\t\t\t\tcode: \"summary_provider_error\",\n\t\t\t\t\t\t\t\t\t\t\t\tmessage: response.errorMessage ?? \"Unknown error\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\tif (response.stopReason === \"length\")\n\t\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\t\t\t\t\t\t\terror: { code: \"summary_length_cap\", message: \"generation hit the token cap\" },\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\tconst text = response.content\n\t\t\t\t\t\t\t\t\t\t.filter((block): block is { type: \"text\"; text: string } => block.type === \"text\")\n\t\t\t\t\t\t\t\t\t\t.map((block) => block.text)\n\t\t\t\t\t\t\t\t\t\t.join(\"\");\n\t\t\t\t\t\t\t\t\treturn { version: 1, status: \"completed\", text, usage: response.usage };\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t: {}),\n\t\t\t\tonOutputArtifactCommit: this._dispatchOutputArtifactCommit,\n\t\t\t\t// 工具表变更钩子:runtime 侧任何工具表变更(含同名替换/恢复)后,先重\n\t\t\t\t// 同步会话基础工具定义,再刷新可见注册表——运行期注册/替换/恢复随即\n\t\t\t\t// 对 getToolDefinition 与模型面可见、可被 setActiveToolsByName 激活;\n\t\t\t\t// 不自动加入活动集(激活权留给调用方)。两道门(见\n\t\t\t\t// _suspendToolRegistryHookRefresh/_toolRegistryHookReady 的注释)内\n\t\t\t\t// 整体跳过,由构造尾部与装卸边界兜底。\n\t\t\t\tonToolRegistryChange: () => {\n\t\t\t\t\tif (this._suspendToolRegistryHookRefresh || !this._toolRegistryHookReady) return;\n\t\t\t\t\tthis._syncCapabilityTools();\n\t\t\t\t\tthis._refreshToolRegistry({ activeToolNames: this.getActiveToolNames() });\n\t\t\t\t},\n\t\t\t\t// 运行时 invoke 面传给工具 execute 的第二参上下文(cwd 与命令面同源)。\n\t\t\t\ttoolExecutionContext: { cwd: this._cwd },\n\t\t\t\t// 插件日志宿主 sink(会话轨迹第 2 期,设计 §7.2):先经装配域共享 ref\n\t\t\t\t// 镜像进轨迹(observability 插件工厂写入,空 = 无镜像),再按级别落\n\t\t\t\t// 宿主进程日志(无 hostLogger 时为 no-op)。runtime 侧对回调抛错自吞,\n\t\t\t\t// 这里不再叠加容错。\n\t\t\t\t...(this._hostLogger === undefined && this._logRecordMirrorRef === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tonLogRecord: (record: LoggerRecord) => {\n\t\t\t\t\t\t\t\tthis._logRecordMirrorRef?.current?.(record);\n\t\t\t\t\t\t\t\tthis._forwardLogRecordToHost(record);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}),\n\t\t\t\tcredentials: {\n\t\t\t\t\tresolve: async ({ providerId, minValidityMs, signal }) => {\n\t\t\t\t\t\tconst result = await this._modelRuntime.getAuth(providerId, {\n\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\t...(minValidityMs === undefined ? {} : { minOAuthValidityMs: minValidityMs }),\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (!result) return undefined;\n\t\t\t\t\t\t// auth entries usually carry only the key; for custom\n\t\t\t\t\t\t// gateways the provider catalog (models.json) is the\n\t\t\t\t\t\t// authoritative baseUrl, so plugin credential requests\n\t\t\t\t\t\t// resolve a usable endpoint.\n\t\t\t\t\t\tconst providerBaseUrl = result.auth.baseUrl ?? this._modelRuntime.getProvider(providerId)?.baseUrl;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...(result.auth.apiKey === undefined ? {} : { apiKey: result.auth.apiKey }),\n\t\t\t\t\t\t\theaders: { ...(result.auth.headers ?? {}) },\n\t\t\t\t\t\t\t...(providerBaseUrl === undefined ? {} : { baseUrl: providerBaseUrl }),\n\t\t\t\t\t\t\t...(result.source === undefined ? {} : { source: result.source }),\n\t\t\t\t\t\t};\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsession: this.getSessionAPI(),\n\t\t\t},\n\t\t);\n\t\t// Bootstrap 插件家族(宪法 §1/§7):随产品内嵌、默认安装,但必须可禁用且\n\t\t// 独立失败——任一件装载抛错走 D-028 结构化 rejection + 进程日志,不阻断\n\t\t// 会话构造,也不伪装成内核失败。\n\t\tconst disabledBootstrap = this._disabledBootstrapPlugins;\n\t\tconst capabilityRuntime = this._capabilityRuntime;\n\t\tconst installBootstrap = (pluginId: string, install: () => { manifest: { id: string }; dispose: () => void }) => {\n\t\t\tif (disabledBootstrap?.includes(pluginId)) return;\n\t\t\ttry {\n\t\t\t\tinstall();\n\t\t\t} catch (error) {\n\t\t\t\tthis._hostLogger?.error(\"session\", \"bootstrap plugin load failed\", {\n\t\t\t\t\tfields: { pluginId },\n\t\t\t\t\tcause: error,\n\t\t\t\t});\n\t\t\t\tvoid capabilityRuntime\n\t\t\t\t\t.recordPluginRejection(\n\t\t\t\t\t\tObject.freeze({\n\t\t\t\t\t\t\tcode: \"plugin_load_failed\",\n\t\t\t\t\t\t\tmanifestPath: \"<embedded>\",\n\t\t\t\t\t\t\tpluginId,\n\t\t\t\t\t\t\tmessage: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t// Rejection visibility must never fail the remaining startup path.\n\t\t\t\t\t});\n\t\t\t}\n\t\t};\n\t\tinstallBootstrap(BOOTSTRAP_LIFECYCLE_PLUGIN_ID, () => installBootstrapLifecycle(capabilityRuntime));\n\t\tinstallBootstrap(BOOTSTRAP_AGENT_LOOP_PLUGIN_ID, () =>\n\t\t\tinstallBootstrapAgentLoop(capabilityRuntime, this._createLoopWiring()),\n\t\t);\n\t\t// 默认编码工具不再由内嵌 bootstrap-tools 注册(D-082 批 1,S6 工具批):\n\t\t// 实现体迁出为 plugins/coding-tools 独立包,sdk 装配链经 bundled 分发通道\n\t\t// (manifest/jiti)装载,禁用面平移到 options.disabledPluginIds。\n\t\t// 默认策略家族(retry / overflow / compaction / branch summary)自 D-082\n\t\t// 批 3 起不再内嵌安装:实现体迁出为 plugins/{retry,overflow,compaction}-policy\n\t\t// 独立包(branch summary 随 compaction 包),sdk 装配链经 bundled 分发通道\n\t\t// (manifest/jiti)装载,禁用面平移到 options.disabledPluginIds;四个缺省\n\t\t// 策略名(DEFAULT_*_POLICY_NAME)仍由宿主持有。\n\t\tinstallBootstrap(BOOTSTRAP_SKILLS_PLUGIN_ID, () => {\n\t\t\t// refreshBootstrapSkills keys off this handle to decide refresh vs\n\t\t\t// install; dropping it would double-install on the first refresh.\n\t\t\tthis._bootstrapSkillsHandle = installSessionBootstrapSkills(\n\t\t\t\tcapabilityRuntime,\n\t\t\t\tthis._resourceLoader.getSkills().skills,\n\t\t\t);\n\t\t\treturn this._bootstrapSkillsHandle;\n\t\t});\n\n\t\t// The embedded builtin capability channel (方案系统 M3) is retired: the\n\t\t// last embedded capability (memory) moved to its own package in D-075\n\t\t// S4 fourth batch, so every suite capability now assembles through the\n\t\t// installed-plugin path (session.loadCapabilityPluginManifest) and\n\t\t// nothing loads here.\n\t\tthis._syncCapabilityTools();\n\t\t// First-party capability activation (统一修复轮 B): readonly capabilityMode\n\t\t// narrows the first-party tool face by the OWNING PLUGIN's declaration\n\t\t// (宪法 §6): first-party tools stay on the active surface only when their\n\t\t// definition declares `readonlySafe`. The first-party domain covers both\n\t\t// naming eras — the retired embedded `agent-forge.builtin.*` ids and the\n\t\t// `agent-forge.plugin.*` package ids every capability moved to in the S4\n\t\t// split (D-075). The plugins stay installed — protocol entries, RPC\n\t\t// methods, and events are untouched; only the model tool face is narrowed.\n\t\t// Third-party plugin tools keep their existing semantics: whether they\n\t\t// respect the mode is the plugin's own declaration and the user's choice.\n\t\tconst builtinToolNames = this._capabilityRuntime\n\t\t\t.listTools()\n\t\t\t.filter(\n\t\t\t\t(tool) =>\n\t\t\t\t\tthis._capabilityMode !== \"readonly\" ||\n\t\t\t\t\t!tool.source.startsWith(\"agent-forge.builtin.\") ||\n\t\t\t\t\ttool.readonlySafe === true,\n\t\t\t)\n\t\t\t.filter(\n\t\t\t\t(tool) =>\n\t\t\t\t\tthis._capabilityMode !== \"readonly\" ||\n\t\t\t\t\t!tool.source.startsWith(\"agent-forge.plugin.\") ||\n\t\t\t\t\ttool.readonlySafe === true,\n\t\t\t)\n\t\t\t.map((tool) => tool.name);\n\n\t\tconst defaultActiveToolNames =\n\t\t\tthis._capabilityMode === \"readonly\"\n\t\t\t\t? // Derive from declarations: the readonly install path registers\n\t\t\t\t\t// exactly the declared-safe definitions, so the kernel carries no\n\t\t\t\t\t// per-tool name knowledge for the readonly face.\n\t\t\t\t\tthis._capabilityRuntime\n\t\t\t\t\t\t.listTools()\n\t\t\t\t\t\t.filter((tool) => tool.readonlySafe)\n\t\t\t\t\t\t.map((tool) => tool.name)\n\t\t\t\t: [\"read\", \"bash\", \"edit\", \"write\"];\n\t\t// Builtin capability tools join the active surface like externally\n\t\t// loaded plugin tools do (_trackCapabilityPlugin); the allowlist /\n\t\t// denylist filters below still gate them.\n\t\tconst baseActiveToolNames = [...(options.activeToolNames ?? defaultActiveToolNames), ...builtinToolNames];\n\t\tthis._refreshToolRegistry({\n\t\t\tactiveToolNames: baseActiveToolNames,\n\t\t\tincludeAllExtensionTools: options.includeAllExtensionTools,\n\t\t});\n\t\t// Runtime 装配与首次同步(上方显式 sync + refresh)完成后,工具表变更钩子\n\t\t// 才开始驱动会话侧同步;构造期通知全部跳过(见 _toolRegistryHookReady)。\n\t\tthis._toolRegistryHookReady = true;\n\t}\n\n\tasync reload(options?: { beforeSessionStart?: () => void | Promise<void> }): Promise<void> {\n\t\tif (this._reloadInProgress) throw new Error(t(\"Session reload is already in progress\"));\n\t\tthis._reloadInProgress = true;\n\t\tthis._beginContextTransitionFence();\n\t\tthis._bashEpoch += 1;\n\t\tlet committedGeneration: number | undefined;\n\t\ttry {\n\t\t\tawait this._cancelAndDrainForReload();\n\t\t\tconst oldCapabilityRuntime = this._capabilityRuntime;\n\t\t\tconst contextStrategyName = this._contextStrategyName;\n\t\t\tlet contextSnapshot: unknown;\n\t\t\tlet hasContextSnapshot = false;\n\t\t\tif (contextStrategyName) {\n\t\t\t\tif (!oldCapabilityRuntime?.hasContextStrategy(contextStrategyName)) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\tt(\"Configured context strategy is not registered: {name}\", { name: contextStrategyName }),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tcontextSnapshot = await oldCapabilityRuntime.snapshotContext(\n\t\t\t\t\tcontextStrategyName,\n\t\t\t\t\tthis._copyContextMessages(this.agent.state.messages, contextStrategyName, \"input\"),\n\t\t\t\t\t{ reason: \"reload\", sessionId: this.sessionId },\n\t\t\t\t);\n\t\t\t\thasContextSnapshot = true;\n\t\t\t}\n\t\t\tconst capabilityPluginPaths = Array.from(this._capabilityPlugins.keys()).filter(\n\t\t\t\t(key) => !this._inlineCapabilityPlugins.has(key),\n\t\t\t);\n\t\t\tconst inlineCapabilityPlugins = Array.from(this._inlineCapabilityPlugins.values());\n\t\t\tawait this._disposeCapabilityPlugins();\n\t\t\toldCapabilityRuntime?.revokeAllAPIs();\n\t\t\tawait oldCapabilityRuntime?.disposeAll();\n\t\t\tconst agentTaskAdapter = this._agentTaskAdapter;\n\t\t\tawait agentTaskAdapter?.dispose?.();\n\t\t\tconst interactionHost = this._interactionHost;\n\t\t\tawait interactionHost?.dispose?.();\n\t\t\tawait this._bootstrapSkillsHandle?.dispose();\n\t\t\tthis._bootstrapSkillsHandle = undefined;\n\t\t\tawait this._bootstrapRetryHandle?.dispose();\n\t\t\tthis._bootstrapRetryHandle = undefined;\n\t\t\tawait this._bootstrapOverflowHandle?.dispose();\n\t\t\tthis._bootstrapOverflowHandle = undefined;\n\t\t\tawait this._bootstrapCompactionHandle?.dispose();\n\t\t\tthis._bootstrapCompactionHandle = undefined;\n\t\t\tawait this._bootstrapBranchSummaryHandle?.dispose();\n\t\t\tthis._bootstrapBranchSummaryHandle = undefined;\n\t\t\tawait this._bootstrapAgentLoopHandle?.dispose();\n\t\t\tthis._bootstrapAgentLoopHandle = undefined;\n\t\t\tawait this._bootstrapLifecycleHandle?.dispose();\n\t\t\tthis._bootstrapLifecycleHandle = undefined;\n\t\t\tawait this.settingsManager.reload();\n\t\t\tthis.syncQueueModesFromSettings();\n\t\t\t// NOTE: reload must not call resetApiProviders(). The API provider\n\t\t\t// registry is process-global shared state; one session reloading must\n\t\t\t// never silently unregister providers owned by other sessions or hosts.\n\t\t\tawait this._resourceLoader.reload();\n\t\t\tthis._buildRuntime({\n\t\t\t\tactiveToolNames: this.getActiveToolNames(),\n\t\t\t\tincludeAllExtensionTools: true,\n\t\t\t});\n\t\t\tfor (const manifestPath of capabilityPluginPaths) {\n\t\t\t\t// 宿主装配注入的 configOverride 按路径回放(D-082 批 1),重装载不退\n\t\t\t\t// 回 manifest 缺省值。\n\t\t\t\tconst configOverride = this._capabilityPluginConfigOverrides.get(manifestPath);\n\t\t\t\tawait this.loadCapabilityPluginManifest(\n\t\t\t\t\tmanifestPath,\n\t\t\t\t\t...(configOverride === undefined ? [] : [{ configOverride }]),\n\t\t\t\t);\n\t\t\t}\n\t\t\tfor (const { manifest, factory } of inlineCapabilityPlugins) {\n\t\t\t\tawait this.loadCapabilityPlugin(manifest, factory);\n\t\t\t}\n\t\t\tif (contextStrategyName && hasContextSnapshot) {\n\t\t\t\tconst runtime = this._capabilityRuntime;\n\t\t\t\tif (!runtime?.hasContextStrategy(contextStrategyName)) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\tt(\"Configured context strategy is not registered after reload: {name}\", {\n\t\t\t\t\t\t\tname: contextStrategyName,\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tawait this._restoreContextTransition(contextSnapshot, \"reload\", { allowReload: true });\n\t\t\t}\n\n\t\t\tawait options?.beforeSessionStart?.();\n\t\t\tawait dispatchSessionStartLifecycle(this._internal, \"reload\");\n\t\t\tawait this.extendResourcesFromExtensions(\"reload\");\n\t\t\tcommittedGeneration = this._reloadGeneration + 1;\n\t\t\tthis._reloadGeneration = committedGeneration;\n\t\t} finally {\n\t\t\tthis._reloadInProgress = false;\n\t\t}\n\t\tif (committedGeneration === undefined) throw new Error(t(\"Session reload did not commit a generation\"));\n\t\tawait this._dispatchSessionReloadLifecycle(committedGeneration);\n\t}\n\n\t// =========================================================================\n\t// Auto-Retry\n\t// =========================================================================\n\n\t/**\n\t * Check if an error is retryable (overloaded, rate limit, server errors).\n\t * Context overflow errors are NOT retryable (handled by compaction instead).\n\t */\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _isRetryableError(\n\t\tmessage: AssistantMessage,\n\t\texecution?: ExecutionFactsV1,\n\t\tsignal?: AbortSignal,\n\t): Promise<boolean> {\n\t\treturn isRetryableError(this._internal, message, execution, signal);\n\t}\n\n\t/**\n\t * Prepare a retryable error for continuation with exponential backoff.\n\t * @returns true if the caller should continue the agent, false otherwise\n\t */\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: read and written via the agent-session-* submodule facade\n\tprivate _prepareRetry(\n\t\tmessage: AssistantMessage,\n\t\tprecomputedDecision?: Awaited<ReturnType<CapabilityRuntime[\"decideRetry\"]>>,\n\t): Promise<boolean> {\n\t\treturn prepareRetry(this._internal, message, precomputedDecision);\n\t}\n\n\t/**\n\t * Cancel in-progress retry.\n\t */\n\tabortRetry(): void {\n\t\tthis._retryAbortController?.abort();\n\t}\n\n\t/** Whether auto-retry is currently in progress */\n\tget isRetrying(): boolean {\n\t\treturn this._retryAbortController !== undefined;\n\t}\n\n\t// =========================================================================\n\t// Bash Execution\n\t// =========================================================================\n\n\t/** Capture a mode-level bash epoch for an intercepted user_bash result. */\n\tcaptureBashEpoch(): number {\n\t\treturn captureBashEpoch(this._internal);\n\t}\n\n\t/** Return whether a mode-level bash result still belongs to this runtime epoch. */\n\tisBashEpochCurrent(epoch: number): boolean {\n\t\treturn isBashEpochCurrent(this._internal, epoch);\n\t}\n\n\t/** Dispatch the user.bash lifecycle facts for a `!`/`!!` user bash command. */\n\temitUserBash(excludeFromContext: boolean): void {\n\t\temitUserBash(this._internal, excludeFromContext);\n\t}\n\n\t/**\n\t * Execute a bash command.\n\t * Adds result to agent context and session.\n\t * @param command The bash command to execute\n\t * @param onChunk Optional streaming callback for output\n\t * @param options.excludeFromContext If true, command output won't be sent to LLM (!! prefix)\n\t * @param options.id Optional identifier included in bash execution update events\n\t * @param options.operations Custom BashOperations for remote execution\n\t */\n\tasync executeBash(\n\t\tcommand: string,\n\t\tonChunk?: (chunk: string) => void,\n\t\toptions?: { excludeFromContext?: boolean; id?: string; operations?: BashOperations },\n\t): Promise<BashResult> {\n\t\treturn executeBash(this._internal, command, onChunk, options);\n\t}\n\n\t/**\n\t * Record a bash execution result in session history.\n\t * Used by executeBash and by extensions that handle bash execution themselves.\n\t */\n\trecordBashResult(\n\t\tcommand: string,\n\t\tresult: BashResult,\n\t\toptions?: { excludeFromContext?: boolean; epoch?: number },\n\t): void {\n\t\trecordBashResult(this._internal, command, result, options);\n\t}\n\n\t/**\n\t * Cancel running bash command.\n\t */\n\tabortBash(): void {\n\t\tabortBash(this._internal);\n\t}\n\n\t/** Whether a bash command is currently running */\n\tget isBashRunning(): boolean {\n\t\treturn this._bashAbortControllers.size > 0;\n\t}\n\n\t/** Whether there are pending bash messages waiting to be flushed */\n\tget hasPendingBashMessages(): boolean {\n\t\treturn this._pendingBashMessages.length > 0;\n\t}\n\n\t/**\n\t * Flush pending bash messages to agent state and session.\n\t * Called after agent turn completes to maintain proper message ordering.\n\t */\n\tprivate _flushPendingBashMessages(): void {\n\t\tflushPendingBashMessages(this._internal);\n\t}\n\n\t// =========================================================================\n\t// Session Management\n\t// =========================================================================\n\n\t/**\n\t * Set a display name for the current session.\n\t */\n\tsetSessionName(name: string): void {\n\t\tthis.sessionManager.appendSessionInfo(name);\n\t\tconst event = { type: \"session_info_changed\", name: this.sessionManager.getSessionName() } as const;\n\t\tthis._emit(event);\n\t\tvoid dispatchSessionInfoChangedLifecycle(this._internal, event.name);\n\t}\n\n\t/**\n\t * Record a cross-suite resume (设计 §10.1 最小可用版): the session was created\n\t * under `originalSuiteId` but its context is being reassembled under\n\t * `currentSuiteId` (assembly happens at session creation, so reassembly is\n\t * the existing behavior). Appends a `suite_mismatch` custom entry as session\n\t * protocol data so later debugging can trace the switch; context\n\t * serialization/conversion is explicitly out of scope.\n\t */\n\trecordSuiteMismatch(originalSuiteId: string, currentSuiteId: string): void {\n\t\tthis.sessionManager.appendCustomEntry(SUITE_MISMATCH_SESSION_ENTRY_TYPE, {\n\t\t\toriginalSuiteId,\n\t\t\tcurrentSuiteId,\n\t\t});\n\t}\n\n\t// =========================================================================\n\t// Tree Navigation\n\t// =========================================================================\n\n\t/**\n\t * Navigate to a different node in the session tree.\n\t * Unlike fork() which creates a new session file, this stays in the same file.\n\t *\n\t * @param targetId The entry ID to navigate to\n\t * @param options.summarize Whether user wants to summarize abandoned branch\n\t * @param options.customInstructions Custom instructions for summarizer\n\t * @param options.replaceInstructions If true, customInstructions replaces the default prompt\n\t * @param options.label Label to attach to the branch summary entry\n\t * @returns Result with editorText (if user message) and cancelled status\n\t */\n\tasync navigateTree(\n\t\ttargetId: string,\n\t\toptions: { summarize?: boolean; customInstructions?: string; replaceInstructions?: boolean; label?: string } = {},\n\t): Promise<{ editorText?: string; cancelled: boolean; aborted?: boolean; summaryEntry?: BranchSummaryEntry }> {\n\t\treturn navigateTree(this._internal, targetId, options);\n\t}\n\n\t/**\n\t * Get all user messages from session for fork selector.\n\t */\n\tgetUserMessagesForForking(): ForkableUserMessage[] {\n\t\treturn getUserMessagesForForking(this._internal);\n\t}\n\n\t/**\n\t * Get session statistics. Aggregates over ALL session entries (including\n\t * history that was compacted away), so token/cost totals reflect what was\n\t * actually billed across the session.\n\t */\n\tgetSessionStats(): SessionStats {\n\t\treturn getSessionStats(this._internal);\n\t}\n\n\tgetContextUsage(): ContextUsage | undefined {\n\t\treturn getContextUsage(this._internal);\n\t}\n\n\t/**\n\t * Export session to HTML.\n\t * @param outputPath Optional output path (defaults to session directory)\n\t * @param options Optional export presentation settings\n\t * @returns Path to exported file\n\t */\n\tasync exportToHtml(outputPath?: string, options: { themeName?: string } = {}): Promise<string> {\n\t\treturn await exportToHtml(this._internal, outputPath, options);\n\t}\n\n\t/**\n\t * Export the current session branch to a JSONL file.\n\t * Writes the session header followed by all entries on the current branch path.\n\t * @param outputPath Target file path. If omitted, generates a timestamped file in cwd.\n\t * @returns The resolved output file path.\n\t */\n\texportToJsonl(outputPath?: string): string {\n\t\treturn exportToJsonl(this._internal, outputPath);\n\t}\n\n\t// =========================================================================\n\t// Utilities\n\t// =========================================================================\n\n\t/**\n\t * Get text content of last assistant message.\n\t * Useful for /copy command.\n\t * @returns Text content, or undefined if no assistant message exists\n\t */\n\tgetLastAssistantText(): string | undefined {\n\t\treturn getLastAssistantText(this._internal);\n\t}\n\n\t// =========================================================================\n\t// Extension System\n\t// =========================================================================\n\n\tcreateReplacedSessionContext(): ReplacedSessionContext {\n\t\treturn {\n\t\t\tsendMessage: (message, options) => this.sendCustomMessage(message, options),\n\t\t\tsendUserMessage: (content, options) => this.sendUserMessage(content, options),\n\t\t};\n\t}\n\n\t/** Curated host surface (1B.7c): the only supported raw-integration point for product hosts. */\n\tget host(): AgentSessionHostSurface {\n\t\tconst agent = this.agent;\n\t\tconst sessionManager = this.sessionManager;\n\t\treturn {\n\t\t\tget abortSignal() {\n\t\t\t\treturn agent.signal;\n\t\t\t},\n\t\t\tget cwd() {\n\t\t\t\treturn sessionManager.getCwd();\n\t\t\t},\n\t\t\tget sessionName() {\n\t\t\t\treturn sessionManager.getSessionName();\n\t\t\t},\n\t\t\tget entries() {\n\t\t\t\treturn sessionManager.getEntries();\n\t\t\t},\n\t\t\tsetTransport: (transport) => {\n\t\t\t\tagent.transport = transport;\n\t\t\t},\n\t\t\tabortAgent: () => {\n\t\t\t\tagent.abort();\n\t\t\t},\n\t\t};\n\t}\n}\n\n/** Curated host surface over one AgentSession (1B.7c). Product hosts consume this instead of transitional raw fields. */\nexport interface AgentSessionHostSurface {\n\t/** Abort signal of the active agent run, when one is in flight. */\n\treadonly abortSignal: AbortSignal | undefined;\n\treadonly cwd: string;\n\treadonly sessionName: string | undefined;\n\treadonly entries: readonly SessionEntry[];\n\tsetTransport(transport: Transport): void;\n\t/** Aborts the core agent loop without session-level teardown. */\n\tabortAgent(): void;\n}\n"]}