@bastani/atomic 0.9.27-alpha.1 → 0.9.28-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/dist/builtin/intercom/CHANGELOG.md +12 -0
  3. package/dist/builtin/intercom/broker/broker.ts +13 -1
  4. package/dist/builtin/intercom/package.json +2 -2
  5. package/dist/builtin/mcp/CHANGELOG.md +6 -0
  6. package/dist/builtin/mcp/package.json +1 -1
  7. package/dist/builtin/subagents/CHANGELOG.md +8 -0
  8. package/dist/builtin/subagents/package.json +3 -3
  9. package/dist/builtin/web-access/index.bundle.mjs +194 -44
  10. package/dist/builtin/web-access/package.json +3 -3
  11. package/dist/builtin/workflows/CHANGELOG.md +16 -0
  12. package/dist/builtin/workflows/builtin/{chunk-gts8wgjr.js → chunk-f61w0hpm.js} +1 -1
  13. package/dist/builtin/workflows/builtin/{chunk-9bhs02gm.js → chunk-tecnpe8j.js} +1 -1
  14. package/dist/builtin/workflows/builtin/{chunk-gw7rghda.js → chunk-wz8v67bn.js} +1 -1
  15. package/dist/builtin/workflows/builtin/goal.js +2 -2
  16. package/dist/builtin/workflows/builtin/index.js +3 -3
  17. package/dist/builtin/workflows/builtin/ralph.js +2 -2
  18. package/dist/builtin/workflows/package.json +2 -2
  19. package/dist/builtin/workflows/src/extension/index.bundle.mjs +7958 -7904
  20. package/dist/builtin/workflows/src/index.js +11210 -11204
  21. package/dist/cli/args.d.ts +1 -0
  22. package/dist/cli/args.d.ts.map +1 -1
  23. package/dist/cli/args.js +12 -5
  24. package/dist/cli/args.js.map +1 -1
  25. package/dist/codemode-worker.js +99 -3
  26. package/dist/core/agent-session-events.js +1 -1
  27. package/dist/core/agent-session-events.js.map +1 -1
  28. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  29. package/dist/core/agent-session-extension-bindings.js +9 -5
  30. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  31. package/dist/core/agent-session-methods.d.ts +2 -0
  32. package/dist/core/agent-session-methods.d.ts.map +1 -1
  33. package/dist/core/agent-session-methods.js.map +1 -1
  34. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  35. package/dist/core/agent-session-prompt.js +5 -2
  36. package/dist/core/agent-session-prompt.js.map +1 -1
  37. package/dist/core/agent-session-services.d.ts +1 -0
  38. package/dist/core/agent-session-services.d.ts.map +1 -1
  39. package/dist/core/agent-session-services.js +1 -0
  40. package/dist/core/agent-session-services.js.map +1 -1
  41. package/dist/core/agent-session-state.d.ts.map +1 -1
  42. package/dist/core/agent-session-state.js +3 -2
  43. package/dist/core/agent-session-state.js.map +1 -1
  44. package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
  45. package/dist/core/agent-session-tool-registry.js +10 -16
  46. package/dist/core/agent-session-tool-registry.js.map +1 -1
  47. package/dist/core/agent-session.d.ts +2 -0
  48. package/dist/core/agent-session.d.ts.map +1 -1
  49. package/dist/core/agent-session.js +5 -0
  50. package/dist/core/agent-session.js.map +1 -1
  51. package/dist/core/auth-storage-backends.d.ts.map +1 -1
  52. package/dist/core/auth-storage-backends.js +2 -1
  53. package/dist/core/auth-storage-backends.js.map +1 -1
  54. package/dist/core/auth-storage.d.ts +1 -1
  55. package/dist/core/auth-storage.d.ts.map +1 -1
  56. package/dist/core/auth-storage.js +15 -7
  57. package/dist/core/auth-storage.js.map +1 -1
  58. package/dist/core/azure-provider-compat.d.ts +8 -0
  59. package/dist/core/azure-provider-compat.d.ts.map +1 -0
  60. package/dist/core/azure-provider-compat.js +65 -0
  61. package/dist/core/azure-provider-compat.js.map +1 -0
  62. package/dist/core/child-session-options.d.ts +1 -1
  63. package/dist/core/child-session-options.d.ts.map +1 -1
  64. package/dist/core/child-session-options.js +11 -2
  65. package/dist/core/child-session-options.js.map +1 -1
  66. package/dist/core/extensions/api-types.d.ts +1 -0
  67. package/dist/core/extensions/api-types.d.ts.map +1 -1
  68. package/dist/core/extensions/api-types.js.map +1 -1
  69. package/dist/core/extensions/loader-api.d.ts.map +1 -1
  70. package/dist/core/extensions/loader-api.js +5 -0
  71. package/dist/core/extensions/loader-api.js.map +1 -1
  72. package/dist/core/extensions/loader-host-modules.d.ts +1 -0
  73. package/dist/core/extensions/loader-host-modules.d.ts.map +1 -1
  74. package/dist/core/extensions/loader-host-modules.js +12 -0
  75. package/dist/core/extensions/loader-host-modules.js.map +1 -1
  76. package/dist/core/extensions/runner.d.ts +1 -1
  77. package/dist/core/extensions/runner.d.ts.map +1 -1
  78. package/dist/core/extensions/runner.js +7 -2
  79. package/dist/core/extensions/runner.js.map +1 -1
  80. package/dist/core/extensions/tool-types.d.ts +2 -0
  81. package/dist/core/extensions/tool-types.d.ts.map +1 -1
  82. package/dist/core/extensions/tool-types.js.map +1 -1
  83. package/dist/core/fast-model-variants.d.ts +1 -1
  84. package/dist/core/fast-model-variants.js +1 -1
  85. package/dist/core/fast-model-variants.js.map +1 -1
  86. package/dist/core/keybindings.d.ts +4 -4
  87. package/dist/core/model-config.d.ts.map +1 -1
  88. package/dist/core/model-config.js +2 -1
  89. package/dist/core/model-config.js.map +1 -1
  90. package/dist/core/model-fallback-failures.d.ts.map +1 -1
  91. package/dist/core/model-fallback-failures.js +5 -1
  92. package/dist/core/model-fallback-failures.js.map +1 -1
  93. package/dist/core/model-resolver-cli.d.ts.map +1 -1
  94. package/dist/core/model-resolver-cli.js +5 -1
  95. package/dist/core/model-resolver-cli.js.map +1 -1
  96. package/dist/core/model-resolver-defaults.js +1 -1
  97. package/dist/core/model-resolver-defaults.js.map +1 -1
  98. package/dist/core/model-resolver-initial.d.ts.map +1 -1
  99. package/dist/core/model-resolver-initial.js +6 -1
  100. package/dist/core/model-resolver-initial.js.map +1 -1
  101. package/dist/core/model-resolver-patterns.d.ts.map +1 -1
  102. package/dist/core/model-resolver-patterns.js +2 -1
  103. package/dist/core/model-resolver-patterns.js.map +1 -1
  104. package/dist/core/model-resolver-scope.d.ts.map +1 -1
  105. package/dist/core/model-resolver-scope.js +3 -1
  106. package/dist/core/model-resolver-scope.js.map +1 -1
  107. package/dist/core/model-runtime-streaming.d.ts.map +1 -1
  108. package/dist/core/model-runtime-streaming.js +2 -0
  109. package/dist/core/model-runtime-streaming.js.map +1 -1
  110. package/dist/core/model-runtime.d.ts.map +1 -1
  111. package/dist/core/model-runtime.js +48 -22
  112. package/dist/core/model-runtime.js.map +1 -1
  113. package/dist/core/provider-composer-internal.d.ts.map +1 -1
  114. package/dist/core/provider-composer-internal.js +4 -1
  115. package/dist/core/provider-composer-internal.js.map +1 -1
  116. package/dist/core/provider-display-names.js +1 -1
  117. package/dist/core/provider-display-names.js.map +1 -1
  118. package/dist/core/resource-loader-core.d.ts +1 -0
  119. package/dist/core/resource-loader-core.d.ts.map +1 -1
  120. package/dist/core/resource-loader-core.js +4 -0
  121. package/dist/core/resource-loader-core.js.map +1 -1
  122. package/dist/core/resource-loader-internals.d.ts +1 -0
  123. package/dist/core/resource-loader-internals.d.ts.map +1 -1
  124. package/dist/core/resource-loader-internals.js.map +1 -1
  125. package/dist/core/resource-loader-reload.d.ts.map +1 -1
  126. package/dist/core/resource-loader-reload.js +28 -5
  127. package/dist/core/resource-loader-reload.js.map +1 -1
  128. package/dist/core/resource-loader-types.d.ts +2 -0
  129. package/dist/core/resource-loader-types.d.ts.map +1 -1
  130. package/dist/core/resource-loader-types.js.map +1 -1
  131. package/dist/core/sdk-types.d.ts +6 -4
  132. package/dist/core/sdk-types.d.ts.map +1 -1
  133. package/dist/core/sdk-types.js.map +1 -1
  134. package/dist/core/sdk.d.ts.map +1 -1
  135. package/dist/core/sdk.js +5 -3
  136. package/dist/core/sdk.js.map +1 -1
  137. package/dist/core/session-lifecycle-work.d.ts +2 -1
  138. package/dist/core/session-lifecycle-work.d.ts.map +1 -1
  139. package/dist/core/session-lifecycle-work.js +15 -1
  140. package/dist/core/session-lifecycle-work.js.map +1 -1
  141. package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
  142. package/dist/core/settings-manager-basic-accessors.js +4 -4
  143. package/dist/core/settings-manager-basic-accessors.js.map +1 -1
  144. package/dist/core/settings-manager-core.d.ts.map +1 -1
  145. package/dist/core/settings-manager-core.js +2 -0
  146. package/dist/core/settings-manager-core.js.map +1 -1
  147. package/dist/core/settings-storage.d.ts.map +1 -1
  148. package/dist/core/settings-storage.js +2 -1
  149. package/dist/core/settings-storage.js.map +1 -1
  150. package/dist/core/skills.d.ts +1 -1
  151. package/dist/core/skills.d.ts.map +1 -1
  152. package/dist/core/skills.js +3 -1
  153. package/dist/core/skills.js.map +1 -1
  154. package/dist/core/system-prompt.d.ts +3 -0
  155. package/dist/core/system-prompt.d.ts.map +1 -1
  156. package/dist/core/system-prompt.js +7 -3
  157. package/dist/core/system-prompt.js.map +1 -1
  158. package/dist/core/tool-loadout.d.ts.map +1 -1
  159. package/dist/core/tool-loadout.js +8 -1
  160. package/dist/core/tool-loadout.js.map +1 -1
  161. package/dist/core/tool-selection.d.ts +13 -0
  162. package/dist/core/tool-selection.d.ts.map +1 -0
  163. package/dist/core/tool-selection.js +43 -0
  164. package/dist/core/tool-selection.js.map +1 -0
  165. package/dist/core/tools/read.d.ts +7 -0
  166. package/dist/core/tools/read.d.ts.map +1 -1
  167. package/dist/core/tools/read.js +11 -1
  168. package/dist/core/tools/read.js.map +1 -1
  169. package/dist/extensions/codemode/execute.d.ts.map +1 -1
  170. package/dist/extensions/codemode/execute.js +2 -1
  171. package/dist/extensions/codemode/execute.js.map +1 -1
  172. package/dist/extensions/codemode/index.d.ts.map +1 -1
  173. package/dist/extensions/codemode/index.js +1 -0
  174. package/dist/extensions/codemode/index.js.map +1 -1
  175. package/dist/extensions/codemode/tool.d.ts +4 -1
  176. package/dist/extensions/codemode/tool.d.ts.map +1 -1
  177. package/dist/extensions/codemode/tool.js +6 -3
  178. package/dist/extensions/codemode/tool.js.map +1 -1
  179. package/dist/extensions/mcp/client/oauth/flow.d.ts.map +1 -1
  180. package/dist/extensions/mcp/client/oauth/flow.js +14 -1
  181. package/dist/extensions/mcp/client/oauth/flow.js.map +1 -1
  182. package/dist/extensions/mcp/client/oauth/types.d.ts +1 -0
  183. package/dist/extensions/mcp/client/oauth/types.d.ts.map +1 -1
  184. package/dist/extensions/mcp/client/oauth/types.js.map +1 -1
  185. package/dist/extensions/mcp/index.js.map +1 -1
  186. package/dist/extensions/mcp/runtime.d.ts +5 -2
  187. package/dist/extensions/mcp/runtime.d.ts.map +1 -1
  188. package/dist/extensions/mcp/runtime.js +18 -4
  189. package/dist/extensions/mcp/runtime.js.map +1 -1
  190. package/dist/main.d.ts.map +1 -1
  191. package/dist/main.js +2 -0
  192. package/dist/main.js.map +1 -1
  193. package/dist/migrations-azure.d.ts +4 -0
  194. package/dist/migrations-azure.d.ts.map +1 -0
  195. package/dist/migrations-azure.js +41 -0
  196. package/dist/migrations-azure.js.map +1 -0
  197. package/dist/migrations.d.ts.map +1 -1
  198. package/dist/migrations.js +2 -0
  199. package/dist/migrations.js.map +1 -1
  200. package/dist/modes/interactive/components/chat-session-host-state.d.ts.map +1 -1
  201. package/dist/modes/interactive/components/chat-session-host-state.js +2 -1
  202. package/dist/modes/interactive/components/chat-session-host-state.js.map +1 -1
  203. package/dist/modes/interactive/components/chat-transcript.d.ts +2 -0
  204. package/dist/modes/interactive/components/chat-transcript.d.ts.map +1 -1
  205. package/dist/modes/interactive/components/chat-transcript.js +9 -3
  206. package/dist/modes/interactive/components/chat-transcript.js.map +1 -1
  207. package/dist/modes/interactive/theme/tui-theme.d.ts.map +1 -1
  208. package/dist/modes/interactive/theme/tui-theme.js +1 -0
  209. package/dist/modes/interactive/theme/tui-theme.js.map +1 -1
  210. package/dist/modes/interactive-engine/engine-args.d.ts.map +1 -1
  211. package/dist/modes/interactive-engine/engine-args.js +1 -0
  212. package/dist/modes/interactive-engine/engine-args.js.map +1 -1
  213. package/dist/utils/syntax-highlight.d.ts.map +1 -1
  214. package/dist/utils/syntax-highlight.js +6 -1
  215. package/dist/utils/syntax-highlight.js.map +1 -1
  216. package/docs/codemode.md +3 -2
  217. package/docs/extensions/api-reference.md +14 -0
  218. package/docs/extensions/authoring.md +1 -1
  219. package/docs/extensions.md +2 -0
  220. package/docs/keybindings.md +9 -9
  221. package/docs/mcp-servers.md +4 -0
  222. package/docs/providers.md +21 -2
  223. package/docs/reference/cli.md +10 -3
  224. package/docs/workflows/api-reference.md +3 -1
  225. package/docs/workflows/authoring.md +6 -2
  226. package/npm-shrinkwrap.json +78 -74
  227. package/package.json +9 -9
@@ -29,6 +29,7 @@ export interface Args {
29
29
  noBuiltinTools?: boolean;
30
30
  extensions?: string[];
31
31
  noExtensions?: boolean;
32
+ noMcp?: boolean;
32
33
  print?: boolean;
33
34
  export?: string;
34
35
  noSkills?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAYnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEjE,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAE3C,MAAM,WAAW,IAAI;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,8EAA8E;IAC9E,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC;IAC5C,WAAW,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnE;AAID,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,aAAa,CAE1E;AAED;;;;;;GAMG;AACH,wBAAgB,mCAAmC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAI9F;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA6K9C;AAED,wBAAgB,SAAS,CAAC,cAAc,CAAC,EAAE,aAAa,EAAE,GAAG,IAAI,CAwMhE"}
1
+ {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAYnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEjE,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAE3C,MAAM,WAAW,IAAI;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,8EAA8E;IAC9E,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC;IAC5C,WAAW,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnE;AAID,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,aAAa,CAE1E;AAED;;;;;;GAMG;AACH,wBAAgB,mCAAmC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAI9F;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA+K9C;AAED,wBAAgB,SAAS,CAAC,cAAc,CAAC,EAAE,aAAa,EAAE,GAAG,IAAI,CA4MhE"}
package/dist/cli/args.js CHANGED
@@ -153,6 +153,9 @@ export function parseArgs(args) {
153
153
  else if (arg === "--no-extensions" || arg === "-ne") {
154
154
  result.noExtensions = true;
155
155
  }
156
+ else if (arg === "--no-mcp") {
157
+ result.noMcp = true;
158
+ }
156
159
  else if (arg === "--skill" && i + 1 < args.length) {
157
160
  result.skills = result.skills ?? [];
158
161
  result.skills.push(args[++i]);
@@ -281,15 +284,16 @@ ${chalk.bold("Options:")}
281
284
  --name, -n <name> Set session display name
282
285
  --models <patterns> Comma-separated model patterns for ctrl+p cycling
283
286
  Supports globs (anthropic/*, *sonnet*) and fuzzy matching
284
- --no-tools, -nt Disable every tool except mandatory ordinary intercom
287
+ --no-tools, -nt Disable every tool, including Intercom, even with --tools
285
288
  --no-builtin-tools, -nbt Disable built-in tools by default but keep extension/custom tools enabled
286
- --tools, -t <tools> Comma-separated allowlist of non-mandatory tool names
287
- Mandatory ordinary intercom remains available
288
- --exclude-tools, -xt <tools> Comma-separated denylist of non-mandatory tool names
289
- Mandatory ordinary intercom cannot be excluded
289
+ --tools, -t <tools> Comma-separated allowlist of tool names or patterns (*)
290
+ Keeps MCP tools unless an entry starts with mcp__
291
+ --exclude-tools, -xt <tools> Comma-separated denylist of tool names or patterns (*), including MCP tools
292
+ Intercom follows the allowlist and exclusions
290
293
  --thinking <level> Set thinking level: off, minimal, low, medium, high, xhigh, max
291
294
  --extension, -e <path> Load an extension file (can be used multiple times)
292
295
  --no-extensions, -ne Disable optional extension discovery; mandatory bundled Intercom remains loaded
296
+ --no-mcp Disable built-in MCP support for this run
293
297
  --skill <path> Load a skill file or directory (can be used multiple times)
294
298
  --no-skills, -ns Disable skills discovery and loading
295
299
  --prompt-template <path> Load a prompt template file or directory (can be used multiple times)
@@ -368,6 +372,9 @@ ${chalk.bold("Examples:")}
368
372
  # Read-only mode (no file modifications possible)
369
373
  ${APP_NAME} --tools read,search,find,ls -p "Review the code in src/"
370
374
 
375
+ # Codemode with only one MCP server's tools
376
+ ${APP_NAME} --tools read,codemode,'mcp__docs__*'
377
+
371
378
  # Disable one tool while keeping the rest available
372
379
  ${APP_NAME} --exclude-tools ask_user_question
373
380
 
@@ -1 +1 @@
1
- {"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * CLI argument parsing and help display\n */\n\nimport type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport chalk from \"chalk\";\nimport {\n\tAPP_NAME,\n\tCONFIG_DIR_NAME,\n\tENV_AGENT_DIR,\n\tENV_OFFLINE,\n\tENV_PACKAGE_DIR,\n\tENV_SESSION_DIR,\n\tENV_SHARE_VIEWER_URL,\n\tENV_TELEMETRY,\n} from \"../config.js\";\nimport type { ExtensionFlag } from \"../core/extensions/types.ts\";\n\nexport type Mode = \"text\" | \"json\" | \"rpc\";\n\nexport interface Args {\n\tprovider?: string;\n\tmodel?: string;\n\tapiKey?: string;\n\tsystemPrompt?: string;\n\tappendSystemPrompt?: string[];\n\tthinking?: ThinkingLevel;\n\tcontinue?: boolean;\n\tresume?: boolean;\n\thelp?: boolean;\n\tversion?: boolean;\n\tmode?: Mode;\n\tname?: string;\n\tnoSession?: boolean;\n\tsession?: string;\n\tsessionId?: string;\n\tfork?: string;\n\tsessionDir?: string;\n\tmodels?: string[];\n\ttools?: string[];\n\texcludeTools?: string[];\n\tnoTools?: boolean;\n\tnoBuiltinTools?: boolean;\n\textensions?: string[];\n\tnoExtensions?: boolean;\n\tprint?: boolean;\n\texport?: string;\n\tnoSkills?: boolean;\n\tskills?: string[];\n\tpromptTemplates?: string[];\n\tnoPromptTemplates?: boolean;\n\tthemes?: string[];\n\tuseTheme?: string;\n\tnoThemes?: boolean;\n\tnoContextFiles?: boolean;\n\tlistModels?: string | true;\n\toffline?: boolean;\n\tverbose?: boolean;\n\tprojectTrustOverride?: boolean;\n\tmessages: string[];\n\tfileArgs: string[];\n\t/** Unknown flags (potentially extension flags) - map of flag name to value */\n\tunknownFlags: Map<string, boolean | string>;\n\tdiagnostics: Array<{ type: \"warning\" | \"error\"; message: string }>;\n}\n\nconst VALID_THINKING_LEVELS = [\"off\", \"minimal\", \"low\", \"medium\", \"high\", \"xhigh\", \"max\"] as const;\n\nexport function isValidThinkingLevel(level: string): level is ThinkingLevel {\n\treturn VALID_THINKING_LEVELS.includes(level as ThinkingLevel);\n}\n\n/**\n * Insert forced option arguments (e.g. a dedicated entry point's `--mode rpc`)\n * immediately before the first `--` end-of-options terminator, or append them\n * when no terminator is present. Keeps the forced options parsed as options\n * (never literal message text) while preserving last-option-wins semantics,\n * since caller options can only appear before the terminator.\n */\nexport function insertForcedOptionsBeforeTerminator(args: string[], forced: string[]): string[] {\n\tconst terminatorIndex = args.indexOf(\"--\");\n\tconst insertAt = terminatorIndex === -1 ? args.length : terminatorIndex;\n\treturn [...args.slice(0, insertAt), ...forced, ...args.slice(insertAt)];\n}\n\nexport function parseArgs(args: string[]): Args {\n\tconst result: Args = {\n\t\tmessages: [],\n\t\tfileArgs: [],\n\t\tunknownFlags: new Map(),\n\t\tdiagnostics: [],\n\t};\n\n\tfor (let i = 0; i < args.length; i++) {\n\t\tconst arg = args[i];\n\n\t\tif (arg === \"--\") {\n\t\t\tresult.messages.push(...args.slice(i + 1));\n\t\t\tbreak;\n\t\t}\n\n\t\tif (arg === \"--help\" || arg === \"-h\") {\n\t\t\tresult.help = true;\n\t\t} else if (arg === \"--version\" || arg === \"-v\") {\n\t\t\tresult.version = true;\n\t\t} else if (arg === \"--mode\") {\n\t\t\tconst mode = args[i + 1];\n\t\t\tif (mode === undefined || mode.startsWith(\"-\")) {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: \"--mode requires text, json, or rpc\" });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ti++;\n\t\t\tif (mode !== \"text\" && mode !== \"json\" && mode !== \"rpc\") {\n\t\t\t\tresult.diagnostics.push({\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: `Invalid mode \"${mode}\". Valid values: text, json, rpc`,\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tresult.mode = mode;\n\t\t} else if (arg === \"--continue\" || arg === \"-c\") {\n\t\t\tresult.continue = true;\n\t\t} else if (arg === \"--resume\" || arg === \"-r\") {\n\t\t\tresult.resume = true;\n\t\t} else if (arg === \"--provider\" && i + 1 < args.length) {\n\t\t\tresult.provider = args[++i];\n\t\t} else if (arg === \"--model\" && i + 1 < args.length) {\n\t\t\tresult.model = args[++i];\n\t\t} else if (arg === \"--api-key\" && i + 1 < args.length) {\n\t\t\tresult.apiKey = args[++i];\n\t\t} else if (arg === \"--system-prompt\" && i + 1 < args.length) {\n\t\t\tresult.systemPrompt = args[++i];\n\t\t} else if (arg === \"--append-system-prompt\" && i + 1 < args.length) {\n\t\t\tresult.appendSystemPrompt = result.appendSystemPrompt ?? [];\n\t\t\tresult.appendSystemPrompt.push(args[++i]);\n\t\t} else if (arg === \"--name\" || arg === \"-n\") {\n\t\t\tif (i + 1 < args.length) {\n\t\t\t\tresult.name = args[++i];\n\t\t\t} else {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: \"--name requires a value\" });\n\t\t\t}\n\t\t} else if (arg === \"--no-session\") {\n\t\t\tresult.noSession = true;\n\t\t} else if (arg === \"--session\" && i + 1 < args.length) {\n\t\t\tresult.session = args[++i];\n\t\t} else if (arg === \"--session-id\" && i + 1 < args.length) {\n\t\t\tresult.sessionId = args[++i];\n\t\t} else if (arg === \"--fork\" && i + 1 < args.length) {\n\t\t\tresult.fork = args[++i];\n\t\t} else if (arg === \"--session-dir\" && i + 1 < args.length) {\n\t\t\tresult.sessionDir = args[++i];\n\t\t} else if (arg === \"--models\" && i + 1 < args.length) {\n\t\t\tresult.models = args[++i]\n\t\t\t\t.split(\",\")\n\t\t\t\t.map((s) => s.trim())\n\t\t\t\t.filter((pattern) => pattern.length > 0);\n\t\t} else if (arg === \"--no-tools\" || arg === \"-nt\") {\n\t\t\tresult.noTools = true;\n\t\t} else if (arg === \"--no-builtin-tools\" || arg === \"-nbt\") {\n\t\t\tresult.noBuiltinTools = true;\n\t\t} else if ((arg === \"--tools\" || arg === \"-t\") && i + 1 < args.length) {\n\t\t\tresult.tools = args[++i]\n\t\t\t\t.split(\",\")\n\t\t\t\t.map((s) => s.trim())\n\t\t\t\t.filter((name) => name.length > 0);\n\t\t} else if ((arg === \"--exclude-tools\" || arg === \"-xt\") && i + 1 < args.length) {\n\t\t\tresult.excludeTools = args[++i]\n\t\t\t\t.split(\",\")\n\t\t\t\t.map((s) => s.trim())\n\t\t\t\t.filter((name) => name.length > 0);\n\t\t} else if (arg === \"--thinking\" && i + 1 < args.length) {\n\t\t\tconst level = args[++i];\n\t\t\tif (isValidThinkingLevel(level)) {\n\t\t\t\tresult.thinking = level;\n\t\t\t} else {\n\t\t\t\tresult.diagnostics.push({\n\t\t\t\t\ttype: \"warning\",\n\t\t\t\t\tmessage: `Invalid thinking level \"${level}\". Valid values: ${VALID_THINKING_LEVELS.join(\", \")}`,\n\t\t\t\t});\n\t\t\t}\n\t\t} else if (arg === \"--print\" || arg === \"-p\") {\n\t\t\tresult.print = true;\n\t\t\tconst next = args[i + 1];\n\t\t\tif (next !== undefined && !next.startsWith(\"@\") && (!next.startsWith(\"-\") || next.startsWith(\"---\"))) {\n\t\t\t\tresult.messages.push(next);\n\t\t\t\ti++;\n\t\t\t}\n\t\t} else if (arg === \"--export\" && i + 1 < args.length) {\n\t\t\tresult.export = args[++i];\n\t\t} else if ((arg === \"--extension\" || arg === \"-e\") && i + 1 < args.length) {\n\t\t\tresult.extensions = result.extensions ?? [];\n\t\t\tresult.extensions.push(args[++i]);\n\t\t} else if (arg === \"--no-extensions\" || arg === \"-ne\") {\n\t\t\tresult.noExtensions = true;\n\t\t} else if (arg === \"--skill\" && i + 1 < args.length) {\n\t\t\tresult.skills = result.skills ?? [];\n\t\t\tresult.skills.push(args[++i]);\n\t\t} else if (arg === \"--prompt-template\" && i + 1 < args.length) {\n\t\t\tresult.promptTemplates = result.promptTemplates ?? [];\n\t\t\tresult.promptTemplates.push(args[++i]);\n\t\t} else if (arg === \"--theme\" && i + 1 < args.length) {\n\t\t\tresult.themes = result.themes ?? [];\n\t\t\tresult.themes.push(args[++i]);\n\t\t} else if (arg === \"--use-theme\") {\n\t\t\tconst themeName = args[i + 1];\n\t\t\tif (themeName === undefined || themeName.startsWith(\"-\")) {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: \"--use-theme requires a theme name\" });\n\t\t\t} else {\n\t\t\t\tresult.useTheme = themeName;\n\t\t\t\ti++;\n\t\t\t}\n\t\t} else if (arg === \"--no-skills\" || arg === \"-ns\") {\n\t\t\tresult.noSkills = true;\n\t\t} else if (arg === \"--no-prompt-templates\" || arg === \"-np\") {\n\t\t\tresult.noPromptTemplates = true;\n\t\t} else if (arg === \"--no-themes\") {\n\t\t\tresult.noThemes = true;\n\t\t} else if (arg === \"--no-context-files\" || arg === \"-nc\") {\n\t\t\tresult.noContextFiles = true;\n\t\t} else if (arg === \"--list-models\") {\n\t\t\t// Check if next arg is a search pattern (not a flag or file arg)\n\t\t\tif (i + 1 < args.length && !args[i + 1].startsWith(\"-\") && !args[i + 1].startsWith(\"@\")) {\n\t\t\t\tresult.listModels = args[++i];\n\t\t\t} else {\n\t\t\t\tresult.listModels = true;\n\t\t\t}\n\t\t} else if (arg === \"--verbose\") {\n\t\t\tresult.verbose = true;\n\t\t} else if (arg === \"--approve\" || arg === \"-a\") {\n\t\t\tresult.projectTrustOverride = true;\n\t\t} else if (arg === \"--no-approve\" || arg === \"-na\") {\n\t\t\tresult.projectTrustOverride = false;\n\t\t} else if (arg === \"--offline\") {\n\t\t\tresult.offline = true;\n\t\t} else if (arg.startsWith(\"@\")) {\n\t\t\tresult.fileArgs.push(arg.slice(1)); // Remove @ prefix\n\t\t} else if (arg.startsWith(\"--\")) {\n\t\t\tconst eqIndex = arg.indexOf(\"=\");\n\t\t\tif (eqIndex !== -1) {\n\t\t\t\tresult.unknownFlags.set(arg.slice(2, eqIndex), arg.slice(eqIndex + 1));\n\t\t\t} else {\n\t\t\t\tconst flagName = arg.slice(2);\n\t\t\t\tconst next = args[i + 1];\n\t\t\t\tif (next !== undefined && !next.startsWith(\"-\") && !next.startsWith(\"@\")) {\n\t\t\t\t\tresult.unknownFlags.set(flagName, next);\n\t\t\t\t\ti++;\n\t\t\t\t} else {\n\t\t\t\t\tresult.unknownFlags.set(flagName, true);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (arg.startsWith(\"-\") && !arg.startsWith(\"--\")) {\n\t\t\tresult.diagnostics.push({ type: \"error\", message: `Unknown option: ${arg}` });\n\t\t} else if (!arg.startsWith(\"-\")) {\n\t\t\tresult.messages.push(arg);\n\t\t}\n\t}\n\n\treturn result;\n}\n\nexport function printHelp(extensionFlags?: ExtensionFlag[]): void {\n\tconst extensionFlagsText =\n\t\textensionFlags && extensionFlags.length > 0\n\t\t\t? `\\n${chalk.bold(\"Extension CLI Flags:\")}\\n${extensionFlags\n\t\t\t\t\t.map((flag) => {\n\t\t\t\t\t\tconst value = flag.type === \"string\" ? \" <value>\" : \"\";\n\t\t\t\t\t\tconst description = flag.description ?? `Registered by ${flag.extensionPath}`;\n\t\t\t\t\t\treturn ` --${flag.name}${value}`.padEnd(30) + description;\n\t\t\t\t\t})\n\t\t\t\t\t.join(\"\\n\")}\\n`\n\t\t\t: \"\";\n\tconsole.log(`${chalk.bold(APP_NAME)} - AI coding assistant with read, bash, edit, write, find, search, ask_user_question, todo tools\n\n${chalk.bold(\"Usage:\")}\n ${APP_NAME} [options] [--] [@files...] [messages...]\n\n${chalk.bold(\"Commands:\")}\n ${APP_NAME} install <source> [-l] Install extension source and add to settings\n ${APP_NAME} remove <source> [-l] Remove extension source from settings\n ${APP_NAME} uninstall <source> [-l] Alias for remove\n ${APP_NAME} update [source|self|${APP_NAME}] [--all] Update ${APP_NAME} (use --all for ${APP_NAME} and extensions)\n ${APP_NAME} list List installed extensions from settings\n ${APP_NAME} config [-l] Open resource TUI (Tab switches global/project scope)\n ${APP_NAME} auth <command> Print credentials or check provider readiness\n ${APP_NAME} mcp <command> Configure MCP servers, check connections, and sign in\n ${APP_NAME} <command> --help Show help for install/remove/uninstall/update/list/config/auth/mcp\n\n${chalk.bold(\"Options:\")}\n --provider <name> Provider to search for --model (requires --model)\n --model <pattern> Model pattern or ID (supports \"provider/id\" and optional \":<thinking>\")\n --api-key <key> API key (defaults to env vars)\n --system-prompt <text> System prompt (default: coding assistant prompt)\n --append-system-prompt <text> Append text or file contents to the system prompt (can be used multiple times)\n --mode <mode> Output mode: text (default), json, or rpc\n --print, -p Non-interactive mode: process prompt and exit\n --continue, -c Continue previous session\n --resume, -r Select a session to resume\n --session <path|id> Use file, exact ID, or unique 8-hex UUID prefix\n --session-id <id> Use exact project session ID, creating it if missing\n --fork <path|id> Fork file, exact ID, or unique 8-hex UUID prefix into a new session\n --session-dir <dir> Directory for session storage and lookup\n --no-session Don't save session (ephemeral)\n --name, -n <name> Set session display name\n --models <patterns> Comma-separated model patterns for ctrl+p cycling\n Supports globs (anthropic/*, *sonnet*) and fuzzy matching\n --no-tools, -nt Disable every tool except mandatory ordinary intercom\n --no-builtin-tools, -nbt Disable built-in tools by default but keep extension/custom tools enabled\n --tools, -t <tools> Comma-separated allowlist of non-mandatory tool names\n Mandatory ordinary intercom remains available\n --exclude-tools, -xt <tools> Comma-separated denylist of non-mandatory tool names\n Mandatory ordinary intercom cannot be excluded\n --thinking <level> Set thinking level: off, minimal, low, medium, high, xhigh, max\n --extension, -e <path> Load an extension file (can be used multiple times)\n --no-extensions, -ne Disable optional extension discovery; mandatory bundled Intercom remains loaded\n --skill <path> Load a skill file or directory (can be used multiple times)\n --no-skills, -ns Disable skills discovery and loading\n --prompt-template <path> Load a prompt template file or directory (can be used multiple times)\n --no-prompt-templates, -np Disable prompt template discovery and loading\n --theme <path> Load a theme file or directory (can be used multiple times)\n --use-theme <name[/name]> Set the interactive theme for this run without saving it\n --no-themes Disable theme discovery and loading\n --no-context-files, -nc Disable context-file discovery and loading\n --export <file> Export session file to HTML and exit\n --list-models [search] List available models (with optional fuzzy search)\n --verbose Force verbose startup (overrides quietStartup setting)\n --approve, -a Trust project-local files for this run\n --no-approve, -na Ignore project-local files for this run\n --offline Disable startup network operations (same as ${ENV_OFFLINE}=1)\n -- End option parsing; treat remaining arguments as messages/files\n --help, -h Show this help\n --version, -v Show version number\n\nExtensions can register additional flags (e.g., --plan from plan-mode extension).${extensionFlagsText}\n\n${chalk.bold(\"Examples:\")}\n # Print a provider API key for an external client\n ${APP_NAME} auth print-api-key --model gpt-5.5 --provider openai\n\n # Check configured provider readiness before starting a session\n ${APP_NAME} auth check --provider openai\n\n # Print an OAuth bearer token, refreshing it when under the minimum expiry\n ${APP_NAME} auth print-bearer-token --model gpt-5.5 --provider openai-codex --min-expiry 30m\n\n # Interactive mode\n ${APP_NAME}\n\n # Interactive mode with initial prompt\n ${APP_NAME} \"List all .ts files in src/\"\n\n # Include files in initial message\n ${APP_NAME} @prompt.md @image.png \"What color is the sky?\"\n\n # Non-interactive mode (process and exit)\n ${APP_NAME} -p \"List all .ts files in src/\"\n\n # Prompt beginning with a dash\n ${APP_NAME} -p -- \"- Summarize these points\"\n\n # Multiple messages (interactive)\n ${APP_NAME} \"Read package.json\" \"What dependencies do we have?\"\n\n # Continue previous session\n ${APP_NAME} --continue \"What did we discuss?\"\n\n # Start a named session\n ${APP_NAME} --name \"Refactor auth module\"\n\n # Use different model\n ${APP_NAME} --provider openai --model gpt-4o-mini \"Help me refactor this code\"\n\n # Use model with provider prefix (no --provider needed)\n ${APP_NAME} --model openai/gpt-4o \"Help me refactor this code\"\n\n # Use model with thinking level shorthand\n ${APP_NAME} --model sonnet:high \"Solve this complex problem\"\n\n # Limit model cycling to specific models\n ${APP_NAME} --models claude-sonnet,claude-haiku,gpt-4o\n\n # Limit to a specific provider with glob pattern\n ${APP_NAME} --models \"github-copilot/*\"\n\n # Cycle models with fixed thinking levels\n ${APP_NAME} --models sonnet:high,haiku:low\n\n # Start with a specific thinking level\n ${APP_NAME} --thinking high \"Solve this complex problem\"\n\n # Read-only mode (no file modifications possible)\n ${APP_NAME} --tools read,search,find,ls -p \"Review the code in src/\"\n\n # Disable one tool while keeping the rest available\n ${APP_NAME} --exclude-tools ask_user_question\n\n # Export a session file to HTML\n ${APP_NAME} --export ~/${CONFIG_DIR_NAME}/agent/sessions/--path--/session.jsonl\n ${APP_NAME} --export session.jsonl output.html\n\n${chalk.bold(\"Environment Variables:\")}\n ANTHROPIC_AUTH_TOKEN - Anthropic bearer auth token\n ANTHROPIC_API_KEY - Anthropic Claude API key\n ANTHROPIC_OAUTH_TOKEN - Anthropic OAuth token (alternative to API key)\n OPENAI_API_KEY - OpenAI GPT API key\n AZURE_OPENAI_API_KEY - Azure OpenAI API key\n AZURE_OPENAI_BASE_URL - Azure OpenAI/Cognitive Services base URL (e.g. https://{resource}.openai.azure.com)\n AZURE_OPENAI_RESOURCE_NAME - Azure OpenAI resource name (alternative to base URL)\n AZURE_OPENAI_API_VERSION - Azure OpenAI API version (default: v1)\n AZURE_OPENAI_DEPLOYMENT_NAME_MAP - Azure OpenAI model=deployment map (comma-separated)\n DEEPSEEK_API_KEY - DeepSeek API key\n GEMINI_API_KEY - Google Gemini API key\n GROQ_API_KEY - Groq API key\n CEREBRAS_API_KEY - Cerebras API key\n XAI_API_KEY - xAI Grok API key\n FIREWORKS_API_KEY - Fireworks API key\n TOGETHER_API_KEY - Together AI API key\n BASETEN_API_KEY - Baseten API key\n OPENROUTER_API_KEY - OpenRouter API key\n AI_GATEWAY_API_KEY - Vercel AI Gateway API key\n ZAI_API_KEY - ZAI API key\n MISTRAL_API_KEY - Mistral API key\n MINIMAX_API_KEY - MiniMax API key\n MOONSHOT_API_KEY - Moonshot AI API key\n OPENCODE_API_KEY - OpenCode Zen/OpenCode Go API key\n KIMI_API_KEY - Kimi For Coding API key\n META_API_KEY - Meta Model API key\n CLOUDFLARE_API_KEY - Cloudflare API token (Workers AI and AI Gateway)\n CLOUDFLARE_ACCOUNT_ID - Cloudflare account id (required for both)\n CLOUDFLARE_GATEWAY_ID - Cloudflare AI Gateway slug (required for AI Gateway)\n QWEN_TOKEN_PLAN_API_KEY - Qwen Token Plan API key (international region)\n QWEN_TOKEN_PLAN_CN_API_KEY - Qwen Token Plan API key (China region)\n XIAOMI_API_KEY - Xiaomi MiMo API key (api.xiaomimimo.com billing)\n XIAOMI_TOKEN_PLAN_CN_API_KEY - Xiaomi MiMo Token Plan API key (China region)\n XIAOMI_TOKEN_PLAN_AMS_API_KEY - Xiaomi MiMo Token Plan API key (Amsterdam region)\n XIAOMI_TOKEN_PLAN_SGP_API_KEY - Xiaomi MiMo Token Plan API key (Singapore region)\n AWS_PROFILE - AWS profile for Amazon Bedrock\n AWS_ACCESS_KEY_ID - AWS access key for Amazon Bedrock\n AWS_SECRET_ACCESS_KEY - AWS secret key for Amazon Bedrock\n AWS_BEARER_TOKEN_BEDROCK - Bedrock API key (bearer token)\n AWS_REGION - AWS region for Amazon Bedrock (e.g., us-east-1)\n ${ENV_AGENT_DIR.padEnd(32)} - Config directory (default: ~/${CONFIG_DIR_NAME}/agent)\n ${ENV_SESSION_DIR.padEnd(32)} - Session storage directory (overridden by --session-dir)\n ${ENV_PACKAGE_DIR.padEnd(32)} - Override package directory (for Nix/Guix store paths)\n ${ENV_OFFLINE.padEnd(32)} - Disable startup network operations when set to 1/true/yes\n ${ENV_TELEMETRY.padEnd(32)} - Override install telemetry when set to 1/true/yes or 0/false/no\n ${ENV_SHARE_VIEWER_URL.padEnd(32)} - Base URL for /share command (default: https://pi.dev/session/)\n PI_* aliases are also supported for app-specific variables above.\n\n${chalk.bold(\"Built-in Tool Names:\")}\n read - Read path selectors (files, dirs, archives, URLs)\n bash - Execute shell commands\n powershell - Execute PowerShell commands on Windows\n edit - Apply hashline-anchored source edits\n write - Create or overwrite writable path selectors\n find - Find filesystem paths by glob pattern (default)\n search - Search file contents with regex (default)\n ask_user_question - Ask structured questions in the TUI (default)\n todo - Manage file-based todos (default)\n ls - Legacy directory listing helper (read-only, off by default)\n`);\n}\n"]}
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * CLI argument parsing and help display\n */\n\nimport type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport chalk from \"chalk\";\nimport {\n\tAPP_NAME,\n\tCONFIG_DIR_NAME,\n\tENV_AGENT_DIR,\n\tENV_OFFLINE,\n\tENV_PACKAGE_DIR,\n\tENV_SESSION_DIR,\n\tENV_SHARE_VIEWER_URL,\n\tENV_TELEMETRY,\n} from \"../config.js\";\nimport type { ExtensionFlag } from \"../core/extensions/types.ts\";\n\nexport type Mode = \"text\" | \"json\" | \"rpc\";\n\nexport interface Args {\n\tprovider?: string;\n\tmodel?: string;\n\tapiKey?: string;\n\tsystemPrompt?: string;\n\tappendSystemPrompt?: string[];\n\tthinking?: ThinkingLevel;\n\tcontinue?: boolean;\n\tresume?: boolean;\n\thelp?: boolean;\n\tversion?: boolean;\n\tmode?: Mode;\n\tname?: string;\n\tnoSession?: boolean;\n\tsession?: string;\n\tsessionId?: string;\n\tfork?: string;\n\tsessionDir?: string;\n\tmodels?: string[];\n\ttools?: string[];\n\texcludeTools?: string[];\n\tnoTools?: boolean;\n\tnoBuiltinTools?: boolean;\n\textensions?: string[];\n\tnoExtensions?: boolean;\n\tnoMcp?: boolean;\n\tprint?: boolean;\n\texport?: string;\n\tnoSkills?: boolean;\n\tskills?: string[];\n\tpromptTemplates?: string[];\n\tnoPromptTemplates?: boolean;\n\tthemes?: string[];\n\tuseTheme?: string;\n\tnoThemes?: boolean;\n\tnoContextFiles?: boolean;\n\tlistModels?: string | true;\n\toffline?: boolean;\n\tverbose?: boolean;\n\tprojectTrustOverride?: boolean;\n\tmessages: string[];\n\tfileArgs: string[];\n\t/** Unknown flags (potentially extension flags) - map of flag name to value */\n\tunknownFlags: Map<string, boolean | string>;\n\tdiagnostics: Array<{ type: \"warning\" | \"error\"; message: string }>;\n}\n\nconst VALID_THINKING_LEVELS = [\"off\", \"minimal\", \"low\", \"medium\", \"high\", \"xhigh\", \"max\"] as const;\n\nexport function isValidThinkingLevel(level: string): level is ThinkingLevel {\n\treturn VALID_THINKING_LEVELS.includes(level as ThinkingLevel);\n}\n\n/**\n * Insert forced option arguments (e.g. a dedicated entry point's `--mode rpc`)\n * immediately before the first `--` end-of-options terminator, or append them\n * when no terminator is present. Keeps the forced options parsed as options\n * (never literal message text) while preserving last-option-wins semantics,\n * since caller options can only appear before the terminator.\n */\nexport function insertForcedOptionsBeforeTerminator(args: string[], forced: string[]): string[] {\n\tconst terminatorIndex = args.indexOf(\"--\");\n\tconst insertAt = terminatorIndex === -1 ? args.length : terminatorIndex;\n\treturn [...args.slice(0, insertAt), ...forced, ...args.slice(insertAt)];\n}\n\nexport function parseArgs(args: string[]): Args {\n\tconst result: Args = {\n\t\tmessages: [],\n\t\tfileArgs: [],\n\t\tunknownFlags: new Map(),\n\t\tdiagnostics: [],\n\t};\n\n\tfor (let i = 0; i < args.length; i++) {\n\t\tconst arg = args[i];\n\n\t\tif (arg === \"--\") {\n\t\t\tresult.messages.push(...args.slice(i + 1));\n\t\t\tbreak;\n\t\t}\n\n\t\tif (arg === \"--help\" || arg === \"-h\") {\n\t\t\tresult.help = true;\n\t\t} else if (arg === \"--version\" || arg === \"-v\") {\n\t\t\tresult.version = true;\n\t\t} else if (arg === \"--mode\") {\n\t\t\tconst mode = args[i + 1];\n\t\t\tif (mode === undefined || mode.startsWith(\"-\")) {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: \"--mode requires text, json, or rpc\" });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ti++;\n\t\t\tif (mode !== \"text\" && mode !== \"json\" && mode !== \"rpc\") {\n\t\t\t\tresult.diagnostics.push({\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tmessage: `Invalid mode \"${mode}\". Valid values: text, json, rpc`,\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tresult.mode = mode;\n\t\t} else if (arg === \"--continue\" || arg === \"-c\") {\n\t\t\tresult.continue = true;\n\t\t} else if (arg === \"--resume\" || arg === \"-r\") {\n\t\t\tresult.resume = true;\n\t\t} else if (arg === \"--provider\" && i + 1 < args.length) {\n\t\t\tresult.provider = args[++i];\n\t\t} else if (arg === \"--model\" && i + 1 < args.length) {\n\t\t\tresult.model = args[++i];\n\t\t} else if (arg === \"--api-key\" && i + 1 < args.length) {\n\t\t\tresult.apiKey = args[++i];\n\t\t} else if (arg === \"--system-prompt\" && i + 1 < args.length) {\n\t\t\tresult.systemPrompt = args[++i];\n\t\t} else if (arg === \"--append-system-prompt\" && i + 1 < args.length) {\n\t\t\tresult.appendSystemPrompt = result.appendSystemPrompt ?? [];\n\t\t\tresult.appendSystemPrompt.push(args[++i]);\n\t\t} else if (arg === \"--name\" || arg === \"-n\") {\n\t\t\tif (i + 1 < args.length) {\n\t\t\t\tresult.name = args[++i];\n\t\t\t} else {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: \"--name requires a value\" });\n\t\t\t}\n\t\t} else if (arg === \"--no-session\") {\n\t\t\tresult.noSession = true;\n\t\t} else if (arg === \"--session\" && i + 1 < args.length) {\n\t\t\tresult.session = args[++i];\n\t\t} else if (arg === \"--session-id\" && i + 1 < args.length) {\n\t\t\tresult.sessionId = args[++i];\n\t\t} else if (arg === \"--fork\" && i + 1 < args.length) {\n\t\t\tresult.fork = args[++i];\n\t\t} else if (arg === \"--session-dir\" && i + 1 < args.length) {\n\t\t\tresult.sessionDir = args[++i];\n\t\t} else if (arg === \"--models\" && i + 1 < args.length) {\n\t\t\tresult.models = args[++i]\n\t\t\t\t.split(\",\")\n\t\t\t\t.map((s) => s.trim())\n\t\t\t\t.filter((pattern) => pattern.length > 0);\n\t\t} else if (arg === \"--no-tools\" || arg === \"-nt\") {\n\t\t\tresult.noTools = true;\n\t\t} else if (arg === \"--no-builtin-tools\" || arg === \"-nbt\") {\n\t\t\tresult.noBuiltinTools = true;\n\t\t} else if ((arg === \"--tools\" || arg === \"-t\") && i + 1 < args.length) {\n\t\t\tresult.tools = args[++i]\n\t\t\t\t.split(\",\")\n\t\t\t\t.map((s) => s.trim())\n\t\t\t\t.filter((name) => name.length > 0);\n\t\t} else if ((arg === \"--exclude-tools\" || arg === \"-xt\") && i + 1 < args.length) {\n\t\t\tresult.excludeTools = args[++i]\n\t\t\t\t.split(\",\")\n\t\t\t\t.map((s) => s.trim())\n\t\t\t\t.filter((name) => name.length > 0);\n\t\t} else if (arg === \"--thinking\" && i + 1 < args.length) {\n\t\t\tconst level = args[++i];\n\t\t\tif (isValidThinkingLevel(level)) {\n\t\t\t\tresult.thinking = level;\n\t\t\t} else {\n\t\t\t\tresult.diagnostics.push({\n\t\t\t\t\ttype: \"warning\",\n\t\t\t\t\tmessage: `Invalid thinking level \"${level}\". Valid values: ${VALID_THINKING_LEVELS.join(\", \")}`,\n\t\t\t\t});\n\t\t\t}\n\t\t} else if (arg === \"--print\" || arg === \"-p\") {\n\t\t\tresult.print = true;\n\t\t\tconst next = args[i + 1];\n\t\t\tif (next !== undefined && !next.startsWith(\"@\") && (!next.startsWith(\"-\") || next.startsWith(\"---\"))) {\n\t\t\t\tresult.messages.push(next);\n\t\t\t\ti++;\n\t\t\t}\n\t\t} else if (arg === \"--export\" && i + 1 < args.length) {\n\t\t\tresult.export = args[++i];\n\t\t} else if ((arg === \"--extension\" || arg === \"-e\") && i + 1 < args.length) {\n\t\t\tresult.extensions = result.extensions ?? [];\n\t\t\tresult.extensions.push(args[++i]);\n\t\t} else if (arg === \"--no-extensions\" || arg === \"-ne\") {\n\t\t\tresult.noExtensions = true;\n\t\t} else if (arg === \"--no-mcp\") {\n\t\t\tresult.noMcp = true;\n\t\t} else if (arg === \"--skill\" && i + 1 < args.length) {\n\t\t\tresult.skills = result.skills ?? [];\n\t\t\tresult.skills.push(args[++i]);\n\t\t} else if (arg === \"--prompt-template\" && i + 1 < args.length) {\n\t\t\tresult.promptTemplates = result.promptTemplates ?? [];\n\t\t\tresult.promptTemplates.push(args[++i]);\n\t\t} else if (arg === \"--theme\" && i + 1 < args.length) {\n\t\t\tresult.themes = result.themes ?? [];\n\t\t\tresult.themes.push(args[++i]);\n\t\t} else if (arg === \"--use-theme\") {\n\t\t\tconst themeName = args[i + 1];\n\t\t\tif (themeName === undefined || themeName.startsWith(\"-\")) {\n\t\t\t\tresult.diagnostics.push({ type: \"error\", message: \"--use-theme requires a theme name\" });\n\t\t\t} else {\n\t\t\t\tresult.useTheme = themeName;\n\t\t\t\ti++;\n\t\t\t}\n\t\t} else if (arg === \"--no-skills\" || arg === \"-ns\") {\n\t\t\tresult.noSkills = true;\n\t\t} else if (arg === \"--no-prompt-templates\" || arg === \"-np\") {\n\t\t\tresult.noPromptTemplates = true;\n\t\t} else if (arg === \"--no-themes\") {\n\t\t\tresult.noThemes = true;\n\t\t} else if (arg === \"--no-context-files\" || arg === \"-nc\") {\n\t\t\tresult.noContextFiles = true;\n\t\t} else if (arg === \"--list-models\") {\n\t\t\t// Check if next arg is a search pattern (not a flag or file arg)\n\t\t\tif (i + 1 < args.length && !args[i + 1].startsWith(\"-\") && !args[i + 1].startsWith(\"@\")) {\n\t\t\t\tresult.listModels = args[++i];\n\t\t\t} else {\n\t\t\t\tresult.listModels = true;\n\t\t\t}\n\t\t} else if (arg === \"--verbose\") {\n\t\t\tresult.verbose = true;\n\t\t} else if (arg === \"--approve\" || arg === \"-a\") {\n\t\t\tresult.projectTrustOverride = true;\n\t\t} else if (arg === \"--no-approve\" || arg === \"-na\") {\n\t\t\tresult.projectTrustOverride = false;\n\t\t} else if (arg === \"--offline\") {\n\t\t\tresult.offline = true;\n\t\t} else if (arg.startsWith(\"@\")) {\n\t\t\tresult.fileArgs.push(arg.slice(1)); // Remove @ prefix\n\t\t} else if (arg.startsWith(\"--\")) {\n\t\t\tconst eqIndex = arg.indexOf(\"=\");\n\t\t\tif (eqIndex !== -1) {\n\t\t\t\tresult.unknownFlags.set(arg.slice(2, eqIndex), arg.slice(eqIndex + 1));\n\t\t\t} else {\n\t\t\t\tconst flagName = arg.slice(2);\n\t\t\t\tconst next = args[i + 1];\n\t\t\t\tif (next !== undefined && !next.startsWith(\"-\") && !next.startsWith(\"@\")) {\n\t\t\t\t\tresult.unknownFlags.set(flagName, next);\n\t\t\t\t\ti++;\n\t\t\t\t} else {\n\t\t\t\t\tresult.unknownFlags.set(flagName, true);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (arg.startsWith(\"-\") && !arg.startsWith(\"--\")) {\n\t\t\tresult.diagnostics.push({ type: \"error\", message: `Unknown option: ${arg}` });\n\t\t} else if (!arg.startsWith(\"-\")) {\n\t\t\tresult.messages.push(arg);\n\t\t}\n\t}\n\n\treturn result;\n}\n\nexport function printHelp(extensionFlags?: ExtensionFlag[]): void {\n\tconst extensionFlagsText =\n\t\textensionFlags && extensionFlags.length > 0\n\t\t\t? `\\n${chalk.bold(\"Extension CLI Flags:\")}\\n${extensionFlags\n\t\t\t\t\t.map((flag) => {\n\t\t\t\t\t\tconst value = flag.type === \"string\" ? \" <value>\" : \"\";\n\t\t\t\t\t\tconst description = flag.description ?? `Registered by ${flag.extensionPath}`;\n\t\t\t\t\t\treturn ` --${flag.name}${value}`.padEnd(30) + description;\n\t\t\t\t\t})\n\t\t\t\t\t.join(\"\\n\")}\\n`\n\t\t\t: \"\";\n\tconsole.log(`${chalk.bold(APP_NAME)} - AI coding assistant with read, bash, edit, write, find, search, ask_user_question, todo tools\n\n${chalk.bold(\"Usage:\")}\n ${APP_NAME} [options] [--] [@files...] [messages...]\n\n${chalk.bold(\"Commands:\")}\n ${APP_NAME} install <source> [-l] Install extension source and add to settings\n ${APP_NAME} remove <source> [-l] Remove extension source from settings\n ${APP_NAME} uninstall <source> [-l] Alias for remove\n ${APP_NAME} update [source|self|${APP_NAME}] [--all] Update ${APP_NAME} (use --all for ${APP_NAME} and extensions)\n ${APP_NAME} list List installed extensions from settings\n ${APP_NAME} config [-l] Open resource TUI (Tab switches global/project scope)\n ${APP_NAME} auth <command> Print credentials or check provider readiness\n ${APP_NAME} mcp <command> Configure MCP servers, check connections, and sign in\n ${APP_NAME} <command> --help Show help for install/remove/uninstall/update/list/config/auth/mcp\n\n${chalk.bold(\"Options:\")}\n --provider <name> Provider to search for --model (requires --model)\n --model <pattern> Model pattern or ID (supports \"provider/id\" and optional \":<thinking>\")\n --api-key <key> API key (defaults to env vars)\n --system-prompt <text> System prompt (default: coding assistant prompt)\n --append-system-prompt <text> Append text or file contents to the system prompt (can be used multiple times)\n --mode <mode> Output mode: text (default), json, or rpc\n --print, -p Non-interactive mode: process prompt and exit\n --continue, -c Continue previous session\n --resume, -r Select a session to resume\n --session <path|id> Use file, exact ID, or unique 8-hex UUID prefix\n --session-id <id> Use exact project session ID, creating it if missing\n --fork <path|id> Fork file, exact ID, or unique 8-hex UUID prefix into a new session\n --session-dir <dir> Directory for session storage and lookup\n --no-session Don't save session (ephemeral)\n --name, -n <name> Set session display name\n --models <patterns> Comma-separated model patterns for ctrl+p cycling\n Supports globs (anthropic/*, *sonnet*) and fuzzy matching\n --no-tools, -nt Disable every tool, including Intercom, even with --tools\n --no-builtin-tools, -nbt Disable built-in tools by default but keep extension/custom tools enabled\n --tools, -t <tools> Comma-separated allowlist of tool names or patterns (*)\n Keeps MCP tools unless an entry starts with mcp__\n --exclude-tools, -xt <tools> Comma-separated denylist of tool names or patterns (*), including MCP tools\n Intercom follows the allowlist and exclusions\n --thinking <level> Set thinking level: off, minimal, low, medium, high, xhigh, max\n --extension, -e <path> Load an extension file (can be used multiple times)\n --no-extensions, -ne Disable optional extension discovery; mandatory bundled Intercom remains loaded\n --no-mcp Disable built-in MCP support for this run\n --skill <path> Load a skill file or directory (can be used multiple times)\n --no-skills, -ns Disable skills discovery and loading\n --prompt-template <path> Load a prompt template file or directory (can be used multiple times)\n --no-prompt-templates, -np Disable prompt template discovery and loading\n --theme <path> Load a theme file or directory (can be used multiple times)\n --use-theme <name[/name]> Set the interactive theme for this run without saving it\n --no-themes Disable theme discovery and loading\n --no-context-files, -nc Disable context-file discovery and loading\n --export <file> Export session file to HTML and exit\n --list-models [search] List available models (with optional fuzzy search)\n --verbose Force verbose startup (overrides quietStartup setting)\n --approve, -a Trust project-local files for this run\n --no-approve, -na Ignore project-local files for this run\n --offline Disable startup network operations (same as ${ENV_OFFLINE}=1)\n -- End option parsing; treat remaining arguments as messages/files\n --help, -h Show this help\n --version, -v Show version number\n\nExtensions can register additional flags (e.g., --plan from plan-mode extension).${extensionFlagsText}\n\n${chalk.bold(\"Examples:\")}\n # Print a provider API key for an external client\n ${APP_NAME} auth print-api-key --model gpt-5.5 --provider openai\n\n # Check configured provider readiness before starting a session\n ${APP_NAME} auth check --provider openai\n\n # Print an OAuth bearer token, refreshing it when under the minimum expiry\n ${APP_NAME} auth print-bearer-token --model gpt-5.5 --provider openai-codex --min-expiry 30m\n\n # Interactive mode\n ${APP_NAME}\n\n # Interactive mode with initial prompt\n ${APP_NAME} \"List all .ts files in src/\"\n\n # Include files in initial message\n ${APP_NAME} @prompt.md @image.png \"What color is the sky?\"\n\n # Non-interactive mode (process and exit)\n ${APP_NAME} -p \"List all .ts files in src/\"\n\n # Prompt beginning with a dash\n ${APP_NAME} -p -- \"- Summarize these points\"\n\n # Multiple messages (interactive)\n ${APP_NAME} \"Read package.json\" \"What dependencies do we have?\"\n\n # Continue previous session\n ${APP_NAME} --continue \"What did we discuss?\"\n\n # Start a named session\n ${APP_NAME} --name \"Refactor auth module\"\n\n # Use different model\n ${APP_NAME} --provider openai --model gpt-4o-mini \"Help me refactor this code\"\n\n # Use model with provider prefix (no --provider needed)\n ${APP_NAME} --model openai/gpt-4o \"Help me refactor this code\"\n\n # Use model with thinking level shorthand\n ${APP_NAME} --model sonnet:high \"Solve this complex problem\"\n\n # Limit model cycling to specific models\n ${APP_NAME} --models claude-sonnet,claude-haiku,gpt-4o\n\n # Limit to a specific provider with glob pattern\n ${APP_NAME} --models \"github-copilot/*\"\n\n # Cycle models with fixed thinking levels\n ${APP_NAME} --models sonnet:high,haiku:low\n\n # Start with a specific thinking level\n ${APP_NAME} --thinking high \"Solve this complex problem\"\n\n # Read-only mode (no file modifications possible)\n ${APP_NAME} --tools read,search,find,ls -p \"Review the code in src/\"\n\n # Codemode with only one MCP server's tools\n ${APP_NAME} --tools read,codemode,'mcp__docs__*'\n\n # Disable one tool while keeping the rest available\n ${APP_NAME} --exclude-tools ask_user_question\n\n # Export a session file to HTML\n ${APP_NAME} --export ~/${CONFIG_DIR_NAME}/agent/sessions/--path--/session.jsonl\n ${APP_NAME} --export session.jsonl output.html\n\n${chalk.bold(\"Environment Variables:\")}\n ANTHROPIC_AUTH_TOKEN - Anthropic bearer auth token\n ANTHROPIC_API_KEY - Anthropic Claude API key\n ANTHROPIC_OAUTH_TOKEN - Anthropic OAuth token (alternative to API key)\n OPENAI_API_KEY - OpenAI GPT API key\n AZURE_OPENAI_API_KEY - Azure OpenAI API key\n AZURE_OPENAI_BASE_URL - Azure OpenAI/Cognitive Services base URL (e.g. https://{resource}.openai.azure.com)\n AZURE_OPENAI_RESOURCE_NAME - Azure OpenAI resource name (alternative to base URL)\n AZURE_OPENAI_API_VERSION - Azure OpenAI API version (default: v1)\n AZURE_OPENAI_DEPLOYMENT_NAME_MAP - Azure OpenAI model=deployment map (comma-separated)\n DEEPSEEK_API_KEY - DeepSeek API key\n GEMINI_API_KEY - Google Gemini API key\n GROQ_API_KEY - Groq API key\n CEREBRAS_API_KEY - Cerebras API key\n XAI_API_KEY - xAI Grok API key\n FIREWORKS_API_KEY - Fireworks API key\n TOGETHER_API_KEY - Together AI API key\n BASETEN_API_KEY - Baseten API key\n OPENROUTER_API_KEY - OpenRouter API key\n AI_GATEWAY_API_KEY - Vercel AI Gateway API key\n ZAI_API_KEY - ZAI API key\n MISTRAL_API_KEY - Mistral API key\n MINIMAX_API_KEY - MiniMax API key\n MOONSHOT_API_KEY - Moonshot AI API key\n OPENCODE_API_KEY - OpenCode Zen/OpenCode Go API key\n KIMI_API_KEY - Kimi For Coding API key\n META_API_KEY - Meta Model API key\n CLOUDFLARE_API_KEY - Cloudflare API token (Workers AI and AI Gateway)\n CLOUDFLARE_ACCOUNT_ID - Cloudflare account id (required for both)\n CLOUDFLARE_GATEWAY_ID - Cloudflare AI Gateway slug (required for AI Gateway)\n QWEN_TOKEN_PLAN_API_KEY - Qwen Token Plan API key (international region)\n QWEN_TOKEN_PLAN_CN_API_KEY - Qwen Token Plan API key (China region)\n XIAOMI_API_KEY - Xiaomi MiMo API key (api.xiaomimimo.com billing)\n XIAOMI_TOKEN_PLAN_CN_API_KEY - Xiaomi MiMo Token Plan API key (China region)\n XIAOMI_TOKEN_PLAN_AMS_API_KEY - Xiaomi MiMo Token Plan API key (Amsterdam region)\n XIAOMI_TOKEN_PLAN_SGP_API_KEY - Xiaomi MiMo Token Plan API key (Singapore region)\n AWS_PROFILE - AWS profile for Amazon Bedrock\n AWS_ACCESS_KEY_ID - AWS access key for Amazon Bedrock\n AWS_SECRET_ACCESS_KEY - AWS secret key for Amazon Bedrock\n AWS_BEARER_TOKEN_BEDROCK - Bedrock API key (bearer token)\n AWS_REGION - AWS region for Amazon Bedrock (e.g., us-east-1)\n ${ENV_AGENT_DIR.padEnd(32)} - Config directory (default: ~/${CONFIG_DIR_NAME}/agent)\n ${ENV_SESSION_DIR.padEnd(32)} - Session storage directory (overridden by --session-dir)\n ${ENV_PACKAGE_DIR.padEnd(32)} - Override package directory (for Nix/Guix store paths)\n ${ENV_OFFLINE.padEnd(32)} - Disable startup network operations when set to 1/true/yes\n ${ENV_TELEMETRY.padEnd(32)} - Override install telemetry when set to 1/true/yes or 0/false/no\n ${ENV_SHARE_VIEWER_URL.padEnd(32)} - Base URL for /share command (default: https://pi.dev/session/)\n PI_* aliases are also supported for app-specific variables above.\n\n${chalk.bold(\"Built-in Tool Names:\")}\n read - Read path selectors (files, dirs, archives, URLs)\n bash - Execute shell commands\n powershell - Execute PowerShell commands on Windows\n edit - Apply hashline-anchored source edits\n write - Create or overwrite writable path selectors\n find - Find filesystem paths by glob pattern (default)\n search - Search file contents with regex (default)\n ask_user_question - Ask structured questions in the TUI (default)\n todo - Manage file-based todos (default)\n ls - Legacy directory listing helper (read-only, off by default)\n`);\n}\n"]}
@@ -2825,6 +2825,96 @@ var MAX_OUTPUT_ITEMS = 1e5;
2825
2825
  var IMAGE_HELPER_EXPECTS = "image expects a non-empty image URL string, an object with image_url, or a raw MCP image block";
2826
2826
  var PRELUDE_SOURCE = `(function (bridge, toolsJson, globalsJson, storeJson) {
2827
2827
  "use strict";
2828
+
2829
+ // Freeze every object reachable from the built-in globals, plus the intrinsics that are only
2830
+ // reachable from instances (iterator and generator prototypes, %TypedArray%).
2831
+ //
2832
+ // Freezing alone breaks ordinary code through the "override mistake": a data property that is
2833
+ // read-only on a prototype cannot be assigned on an instance either, so
2834
+ // this.name = "MyError" in an Error subclass would throw. Commonly overridden properties
2835
+ // become accessors whose setter defines an own property on the instance instead.
2836
+ (function lockdown() {
2837
+ const OVERRIDABLE = new Set(["constructor", "name", "message", "toString", "toLocaleString", "valueOf", "toJSON"]);
2838
+ const seen = new Set([globalThis]);
2839
+ const queue = [];
2840
+ const add = (value) => {
2841
+ if ((typeof value === "object" && value !== null) || typeof value === "function") {
2842
+ if (!seen.has(value)) {
2843
+ seen.add(value);
2844
+ queue.push(value);
2845
+ }
2846
+ }
2847
+ };
2848
+
2849
+ // Accessors from an object literal have no own prototype object, unlike function expressions,
2850
+ // whose prototype.constructor would be converted again without end.
2851
+ function allowOverride(object, key, value, enumerable) {
2852
+ const { get, set } = Object.getOwnPropertyDescriptor(
2853
+ {
2854
+ get accessor() {
2855
+ return value;
2856
+ },
2857
+ set accessor(next) {
2858
+ if (this === object) {
2859
+ throw new TypeError("Cannot assign to read only property '" + String(key) + "' of a built-in");
2860
+ }
2861
+ if ((typeof this !== "object" || this === null) && typeof this !== "function") return;
2862
+ Object.defineProperty(this, key, { value: next, writable: true, enumerable: true, configurable: true });
2863
+ },
2864
+ },
2865
+ "accessor",
2866
+ );
2867
+ Object.defineProperty(object, key, { get, set, enumerable, configurable: false });
2868
+ add(get);
2869
+ add(set);
2870
+ }
2871
+
2872
+ for (const key of Reflect.ownKeys(globalThis)) {
2873
+ const descriptor = Object.getOwnPropertyDescriptor(globalThis, key);
2874
+ add(descriptor.value);
2875
+ add(descriptor.get);
2876
+ add(descriptor.set);
2877
+ if ("value" in descriptor && descriptor.configurable) {
2878
+ Object.defineProperty(globalThis, key, { writable: false, configurable: false });
2879
+ }
2880
+ }
2881
+ add(Object.getPrototypeOf(function* () {}));
2882
+ add(Object.getPrototypeOf(async function () {}));
2883
+ add(Object.getPrototypeOf(async function* () {}));
2884
+ add(Object.getPrototypeOf(Int8Array));
2885
+ add(Object.getPrototypeOf([][Symbol.iterator]()));
2886
+ add(Object.getPrototypeOf(new Map()[Symbol.iterator]()));
2887
+ add(Object.getPrototypeOf(new Set()[Symbol.iterator]()));
2888
+ add(Object.getPrototypeOf(""[Symbol.iterator]()));
2889
+ add(Object.getPrototypeOf(/a/[Symbol.matchAll]("")));
2890
+ if (typeof Iterator === "function") {
2891
+ if (typeof Iterator.prototype.map === "function") add(Object.getPrototypeOf([].values().map((x) => x)));
2892
+ if (typeof Iterator.from === "function") add(Object.getPrototypeOf(Iterator.from({ next() {} })));
2893
+ }
2894
+
2895
+ while (queue.length > 0) {
2896
+ const object = queue.pop();
2897
+ add(Object.getPrototypeOf(object));
2898
+ const descriptors = Object.getOwnPropertyDescriptors(object);
2899
+ for (const key of Reflect.ownKeys(descriptors)) {
2900
+ const descriptor = descriptors[key];
2901
+ if ("value" in descriptor) {
2902
+ add(descriptor.value);
2903
+ if (
2904
+ descriptor.writable &&
2905
+ descriptor.configurable &&
2906
+ (object === Object.prototype || OVERRIDABLE.has(key))
2907
+ ) {
2908
+ allowOverride(object, key, descriptor.value, descriptor.enumerable);
2909
+ }
2910
+ } else {
2911
+ add(descriptor.get);
2912
+ add(descriptor.set);
2913
+ }
2914
+ }
2915
+ Object.freeze(object);
2916
+ }
2917
+ })();
2828
2918
  const stringify = JSON.stringify;
2829
2919
  const parse = JSON.parse;
2830
2920
  const promiseThen = Promise.prototype.then;
@@ -2869,11 +2959,17 @@ var PRELUDE_SOURCE = `(function (bridge, toolsJson, globalsJson, storeJson) {
2869
2959
  }
2870
2960
  }
2871
2961
 
2962
+ // The host requires string fields. A script can set an error's name or message to anything, so
2963
+ // they are coerced, and a value whose coercion throws gets a placeholder.
2872
2964
  function describeError(error) {
2873
- if (error instanceof ErrorCtor) {
2874
- return stringify({ name: error.name, message: error.message, stack: errorText(error) });
2965
+ try {
2966
+ if (error instanceof ErrorCtor) {
2967
+ return stringify({ name: String(error.name), message: String(error.message), stack: errorText(error) });
2968
+ }
2969
+ return stringify({ message: String(format(error)) });
2970
+ } catch {
2971
+ return stringify({ message: "The script threw a value that cannot be described" });
2875
2972
  }
2876
- return stringify({ message: format(error) });
2877
2973
  }
2878
2974
 
2879
2975
  function caller(kind, name, spread) {
@@ -502,7 +502,7 @@ export function closeAgentSession(session, event = { type: "session_shutdown", r
502
502
  errors.push(new Error(component, { cause }));
503
503
  }
504
504
  };
505
- await attempt("lifetime", () => abortSessionWork(session));
505
+ await attempt("lifetime", () => abortSessionWork(session, event.reason === "quit"));
506
506
  await attempt("shell abort", () => abortBash.call(session));
507
507
  await attempt("abort", () => abortCurrentGeneration.call(session));
508
508
  await attempt("reload rollback", () => drainSessionReload(session));
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-events.js","sourceRoot":"","sources":["../../src/core/agent-session-events.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAC9F,OAAO,EACN,iCAAiC,EACjC,2CAA2C,EAC3C,oDAAoD,EACpD,sCAAsC,EACtC,kDAAkD,EAClD,6CAA6C,GAC7C,MAAM,+CAA+C,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAGN,4BAA4B,EAC5B,+BAA+B,EAC/B,uBAAuB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAU7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,+BAA+B,EAAE,MAAM,+BAA+B,CAAC;AAGhF,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EACN,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,GACrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAE5F,MAAM,UAAU,KAAK,CAAqB,KAAwB;IACjE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;QACtC,CAAC,CAAC,KAAK,CAAC,CAAC;IACV,CAAC;AACF,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC/B,IAAI,CAAC,KAAK,CAAC;QACV,IAAI,EAAE,cAAc;QACpB,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACrC,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC;KACrC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,2BAA2B,GAAG,IAAI,OAAO,EAAU,CAAC;AAE1D,4EAA4E;AAE5E,MAAM,UAAU,iBAAiB,CAAqB,KAAiB;IACtE,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,YAAY;QACxE,qBAAqB,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;SACvC,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;QAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAChE,uEAAuE;IACvE,mFAAmF;IACnF,8EAA8E;IAC9E,gFAAgF;IAChF,mDAAmD;IACnD,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC;IAC3C,4EAA4E;IAC5E,6EAA6E;IAC7E,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACrE,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACrD,IAAI,IAAI,EAAE,CAAC;YACV,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3G,IAAI,KAAK,EAAE,CAAC;gBACX,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBACrC,IAAI,CAAC,mCAAmC,GAAG,IAAI,CAAC;gBAChD,2BAA2B,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACxC,CAAC;QACF,CAAC;IACF,CAAC;IACD,MAAM,yBAAyB,GAC9B,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ;QAC9D,CAAC,CAAC,2CAA2C,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC;QAClE,CAAC,CAAC,KAAK,CAAC;IACV,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa;QAAE,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAEvF,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAC5C,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EACpC,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CACpC,CAAC;IACF,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC;IAEnC,gFAAgF;IAChF,4EAA4E;IAC5E,gFAAgF;IAChF,kFAAkF;IAClF,iFAAiF;IACjF,kFAAkF;IAClF,iDAAiD;IACjD,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1B,mFAAmF;QACnF,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAG,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACvD,QAAQ,CAAC,IAAI,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzE,qBAAqB,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC3C,CAAC;IACF,CAAC,CAAC,CAAC;IACH,IACC,yBAAyB;QACzB,+EAA+E;QAC/E,sDAAsD;QACtD,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,sBAAsB,CAAC,MAAM,GAAG,CAAC,CAAC;QACrE,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,CAAC,CAAC;QAE5G,OAAO,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAqB,KAAiB;IACnF,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;QACtF,OAAO;IACR,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,CAAC;IACzD,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5D,OAAO;IACR,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxE,IAAI,CAAC,aAAa,EAAE,CAAC;QACpB,OAAO;IACR,CAAC;IAED,MAAM,YAAY,GACjB,OAAO,IAAI,CAAC,oBAAoB,KAAK,UAAU;QAC9C,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC;QAC1C,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;IACxD,MAAM,WAAW,GAChB,SAAS,IAAI,YAAY,IAAI,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAC7G,IAAI,CAAC,WAAW,EAAE,CAAC;QAClB,OAAO;IACR,CAAC;IAED,IAAI,CAAC,aAAa,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC5C,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;IAC9B,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAE3C,QAAwB;IAExB,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAClC,OAAO,OAA2B,CAAC;QACpC,CAAC;IACF,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAqB,KAAiB;IAC7E,MAAM,gBAAgB,GACrB,KAAK,CAAC,IAAI,KAAK,aAAa;QAC5B,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ;QAC/B,iCAAiC,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC;QACrD,CAAC,CAAC,KAAK,CAAC,OAAO;QACf,CAAC,CAAC,SAAS,CAAC;IACd,kEAAkE;IAClE,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QAClC,2EAA2E;QAC3E,wEAAwE;QACxE,2EAA2E;QAC3E,IAAI,CAAC,iCAAiC,GAAG,KAAK,CAAC;IAChD,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACrE,IAAI,CAAC,0BAA0B,GAAG,KAAK,CAAC;QACxC,IAAI,CAAC,mCAAmC,GAAG,KAAK,CAAC;QACjD,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,CAAC;QACpC,IAAI,CAAC,sBAAsB,CAAC,MAAM,GAAG,CAAC,CAAC;QACvC,IAAI,2BAA2B,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACxE,CAAC;IAED,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC;IAExC,IAAI,CAAC;QACJ,8DAA8D;QAC9D,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC;YAAS,CAAC;QACV,uEAAuE;QACvE,0EAA0E;QAC1E,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;YACpC,IAAI,CAAC;gBACJ,sCAAsC,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;YAChE,CAAC;YAAC,MAAM,CAAC;gBACR,oDAAoD,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;YAC9E,CAAC;YACD,6CAA6C,CAAC,IAAI,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa;YAAE,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3F,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC,WAAW,CAAC;QACnD,IAAI,CAAC,2BAA2B,EAAE,CAAC;IACpC,CAAC;IAED,6BAA6B;IAC7B,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QAClC,IAAI,OAA2B,CAAC;QAChC,oDAAoD;QACpD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAqC,CAAC;YAC7D,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;gBACpC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,wBAAwB,CACrD,KAAK,CAAC,OAAO,CAAC,UAAU,EACxB,KAAK,CAAC,OAAO,CAAC,OAAO,EACrB,KAAK,CAAC,OAAO,CAAC,OAAO,EACrB,KAAK,CAAC,OAAO,CAAC,OAAO,EACrB,4BAA4B,CAAC,KAAK,CAAC,OAAO,CAAC,EAC3C,SAAS,EACT,QAAQ,CAAC,iBAAiB,CAC1B,CAAC;YACH,CAAC;QACF,CAAC;aAAM,IACN,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ;YAC/B,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM;YAC7B,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW;YAClC,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,YAAY,EAClC,CAAC;YACF,uDAAuD;YACvD,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,OAAO;YAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACjE,6EAA6E;QAE7E,qEAAqE;QACrE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACxC,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC,OAAO,CAAC;YAE3C,MAAM,YAAY,GAAG,KAAK,CAAC,OAA2B,CAAC;YACvD,mEAAmE;YACnE,+DAA+D;YAC/D,MAAM,eAAe,GACpB,YAAY,CAAC,UAAU,KAAK,OAAO;gBACnC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC;gBACrC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;YACrC,IAAI,CAAC,eAAe,IAAI,YAAY,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;gBAC9D,IAAI,CAAC,0BAA0B,GAAG,KAAK,CAAC;gBACxC,IAAI,CAAC,mCAAmC,GAAG,KAAK,CAAC;YAClD,CAAC;YACD,IAAI,CAAC,eAAe,EAAE,CAAC;gBACtB,IAAI,CAAC,0BAA0B,GAAG,KAAK,CAAC;gBACxC,IAAI,CAAC,sCAAsC,GAAG,CAAC,CAAC;YACjD,CAAC;YACD,IAAI,CAAC,eAAe,IAAI,YAAY,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;gBAC5D,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,CAAC;gBACpC,IAAI,CAAC,sBAAsB,CAAC,MAAM,GAAG,CAAC,CAAC;YACxC,CAAC;YAED,wEAAwE;YACxE,sEAAsE;YACtE,mCAAmC;YACnC,IAAI,YAAY,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;gBAC1C,IAAI,CAAC,2BAA2B,GAAG,CAAC,CAAC;YACtC,CAAC;YAED,mEAAmE;YACnE,qEAAqE;YACrE,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;gBAChD,IAAI,CAAC,KAAK,CAAC;oBACV,IAAI,EAAE,gBAAgB;oBACtB,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,IAAI,CAAC,aAAa;iBAC3B,CAAC,CAAC;gBACH,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;YACxB,CAAC;QACF,CAAC;IACF,CAAC;IAED,2EAA2E;IAC3E,8EAA8E;IAC9E,6CAA6C,CAAC,IAAI,CAAC,CAAC;IAEpD,6DAA6D;IAC7D,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC;QACvC,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;QACvC,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAClC,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,OAAO;QACR,CAAC;QACD,MAAM,uBAAuB,GAC5B,IAAI,CAAC,iCAAiC,KAAK,SAAS;YACpD,GAAG,CAAC,YAAY,KAAK,IAAI,CAAC,iCAAiC,CAAC;QAE7D,2EAA2E;QAC3E,2EAA2E;QAC3E,2DAA2D;QAC3D,MAAM,iBAAiB,GACtB,CAAC,uBAAuB;YACxB,CAAC,OAAO,IAAI,CAAC,oBAAoB,KAAK,UAAU;gBAC/C,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC;gBAChC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;QACjC,MAAM,cAAc,GAAG,CAAC,uBAAuB,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAC/E,MAAM,eAAe,GACpB,CAAC,uBAAuB,IAAI,CAAC,cAAc,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACnG,MAAM,aAAa,GAClB,CAAC,uBAAuB;YACxB,CAAC,cAAc;YACf,CAAC,iBAAiB;YAClB,CAAC,eAAe;YAChB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,YAAY,GAAG,cAAc,IAAI,iBAAiB,IAAI,eAAe,IAAI,aAAa,CAAC;QAC7F,IAAI,eAAe,GAAG,CAAC,YAAY,CAAC;QACpC,IAAI,YAAY,EAAE,CAAC;YAClB,IAAI,eAAe,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;gBAC1C,yEAAyE;gBACzE,uCAAuC;gBACvC,GAAG,CAAC,YAAY,GAAG,uCAAuC,CAAC;YAC5D,CAAC;iBAAM,IAAI,aAAa,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;gBAC/C,GAAG,CAAC,YAAY,GAAG,2CAA2C,CAAC;YAChE,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;YACvD,IAAI,QAAQ;gBAAE,OAAO,CAAC,mDAAmD;YACzE,eAAe,GAAG,IAAI,CAAC;QACxB,CAAC;QACD,IAAI,IAAI,CAAC,uBAAuB;YAAE,OAAO;QAEzC,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,0BAA0B,GAAG,KAAK,CAAC;QACxC,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,IAAI,CAAC,uBAAuB;YAAE,OAAO;QAEzC,2EAA2E;QAC3E,0EAA0E;QAC1E,uEAAuE;QACvE,IAAI,IAAI,CAAC,0BAA0B,EAAE,CAAC;YACrC,IAAI,CAAC,0BAA0B,GAAG,KAAK,CAAC;YACxC,IAAI,OAAO,IAAI,CAAC,yBAAyB,KAAK,UAAU,IAAI,CAAC,MAAM,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC;gBACtG,OAAO;YACR,eAAe,GAAG,IAAI,CAAC;QACxB,CAAC;QACD,4EAA4E;QAC5E,+EAA+E;QAC/E,IAAI,eAAe,IAAI,IAAI,CAAC,kCAAkC,KAAK,SAAS,EAAE,CAAC;YAC9E,IAAI,OAAO,IAAI,CAAC,yBAAyB,KAAK,UAAU;gBAAE,MAAM,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAClG,CAAC;QACD,8EAA8E;QAC9E,6EAA6E;QAC7E,8CAA8C;QAC9C,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,IAAI,CAAC,4BAA4B,KAAK,UAAU;YACxF,KAAK,IAAI,CAAC,4BAA4B,EAAE,CAAC;IAC3C,CAAC;AACF,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAqB,KAAiB;IAChF,MAAM,YAAY,GAAG,IAAI,CAAC,4BAA4B,CAAC;IACvD,IAAI,CAAC,YAAY;QAAE,OAAO;IAE1B,IAAI,KAAK,CAAC,IAAI,KAAK,oBAAoB,IAAI,KAAK,CAAC,OAAO,IAAI,+BAA+B,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACnH,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,uBAAuB,CAAC,YAAY,CAAC,CAAC;QAC7D,OAAO;IACR,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa;QAAE,OAAO;IAE3E,IACC,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,YAAY;QACnC,KAAK,CAAC,OAAO,CAAC,OAAO;QACrB,+BAA+B,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EACrD,CAAC;QACF,KAAK,CAAC,OAAO,CAAC,OAAO,GAAG,uBAAuB,CAAC,YAAY,CAAC,CAAC;QAC9D,OAAO;IACR,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QACxC,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAA2B,CAAC;QAC3D,IAAI,gBAAgB,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAC/C,gBAAgB,CAAC,YAAY,GAAG,YAAY,CAAC;QAC9C,CAAC;IACF,CAAC;AACF,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAqB,KAAiB;IAChF,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa;QAAE,OAAO;IAC9G,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO;IAE/C,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAA2B,CAAC;IAC3D,IAAI,gBAAgB,CAAC,UAAU,KAAK,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY;QAAE,OAAO;IAEtF,gBAAgB,CAAC,YAAY,GAAG,wBAAwB,CAAC,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC;AACpH,CAAC;AAED,wCAAwC;AAExC,MAAM,UAAU,aAAa;IAC5B,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACxB,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAC/B,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;IAChC,CAAC;AACF,CAAC;AAED,0CAA0C;AAE1C,MAAM,UAAU,mBAAmB,CAAqB,OAAgB;IACvE,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,EAAE,CAAC;IACvC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAChC,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IAC5D,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAChE,CAAC;AAED,8EAA8E;AAE9E,MAAM,UAAU,yBAAyB;IACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC3C,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC9B,OAAO,GAAuB,CAAC;QAChC,CAAC;IACF,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAqB,MAAoB,EAAE,WAAyB;IACzG,2FAA2F;IAC3F,uFAAuF;IACvF,uFAAuF;IACvF,oFAAoF;IACpF,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;QAC5B,OAAO;IACR,CAAC;IAED,MAAM,YAAY,GAAG,MAA4C,CAAC;IAClE,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7C,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IACD,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;AAC1C,CAAC;AAED,kDAAkD;AAElD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAqB,KAAiB;IAC9E,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QAClC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACpB,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IAC5E,CAAC;SAAM,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QACvC,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IACpG,CAAC;SAAM,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QACxC,MAAM,cAAc,GAAmB;YACtC,IAAI,EAAE,YAAY;YAClB,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACrB,CAAC;QACF,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IACnE,CAAC;SAAM,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACtC,+EAA+E;QAC/E,8EAA8E;QAC9E,+BAA+B;QAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACnG,MAAM,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,CAAC,UAAU,EAAE,CAAC;IACnB,CAAC;SAAM,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;QAC3C,MAAM,cAAc,GAAsB;YACzC,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,KAAK,CAAC,OAAO;SACtB,CAAC;QACF,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IACnE,CAAC;SAAM,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QAC5C,MAAM,cAAc,GAAuB;YAC1C,IAAI,EAAE,gBAAgB;YACtB,qBAAqB,EAAE,KAAK,CAAC,qBAAqB;SAClD,CAAC;QACF,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IACnE,CAAC;SAAM,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACzC,MAAM,cAAc,GAAoB;YACvC,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,KAAK,CAAC,OAAO;SACtB,CAAC;QACF,2FAA2F;QAC3F,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QACrF,IAAI,WAAW,EAAE,CAAC;YACjB,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,OAAO,EAAE,uBAAuB,CAAC,WAAW,CAAC,CAAC,CAAC;QAClF,CAAC;IACF,CAAC;SAAM,IAAI,KAAK,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;QAClD,MAAM,cAAc,GAA4B;YAC/C,IAAI,EAAE,sBAAsB;YAC5B,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,IAAI,EAAE,KAAK,CAAC,IAAI;SAChB,CAAC;QACF,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IACnE,CAAC;SAAM,IAAI,KAAK,CAAC,IAAI,KAAK,uBAAuB,EAAE,CAAC;QACnD,MAAM,cAAc,GAA6B;YAChD,IAAI,EAAE,uBAAuB;YAC7B,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,aAAa,EAAE,KAAK,CAAC,aAAa;SAClC,CAAC;QACF,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IACnE,CAAC;SAAM,IAAI,KAAK,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;QAChD,MAAM,cAAc,GAA0B;YAC7C,IAAI,EAAE,oBAAoB;YAC1B,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO,EAAE,KAAK,CAAC,OAAO;SACtB,CAAC;QACF,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IACnE,CAAC;AACF,CAAC;AAED;;;;GAIG;AAEH,MAAM,UAAU,SAAS,CAAqB,QAAmC;IAChF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAEpC,yDAAyD;IACzD,OAAO,GAAG,EAAE;QACX,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACrD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YAClB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACvC,CAAC;IACF,CAAC,CAAC;AACH,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,oBAAoB;IACnC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC5B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;IACpC,CAAC;AACF,CAAC;AAED;;;GAGG;AAEH,MAAM,qBAAqB,GAAG,IAAI,OAAO,EAAyB,CAAC;AACnE,MAAM,eAAe,GAAG,IAAI,OAAO,EAA+B,CAAC;AACnE,MAAM,kBAAkB,GAAG,IAAI,OAAO,EAA+B,CAAC;AAEtE,gFAAgF;AAChF,MAAM,UAAU,iBAAiB,CAChC,OAAqB,EACrB,KAAK,GAAyB,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,EAAE,EAC1E,gBAA6B;IAE7B,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC1E,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,QAAQ;QAAE,OAAO,CAAC,OAAO,IAAI,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,QAAQ,CAAC;IAC9E,IAAI,cAA2B,CAAC;IAChC,IAAI,aAAsC,CAAC;IAC3C,MAAM,UAAU,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACxD,cAAc,GAAG,OAAO,CAAC;QACzB,aAAa,GAAG,MAAM,CAAC;IACxB,CAAC,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IACxF,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IACzB,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;QACjD,MAAM,MAAM,GAAY,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,KAAK,EAAE,SAAiB,EAAE,OAAmC,EAAE,EAAE;YAChF,IAAI,CAAC;gBACJ,MAAM,OAAO,EAAE,CAAC;YACjB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,IAAI,KAAK,YAAY,cAAc;oBAClC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;;oBAChF,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACnD,CAAC;QACF,CAAC,CAAC;QACF,MAAM,OAAO,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3D,MAAM,OAAO,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5D,MAAM,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACnE,MAAM,OAAO,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;QACpE,MAAM,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAC1D,MAAM,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;QAC9D,IAAI,OAAO,EAAE,CAAC;YACb,MAAM,OAAO,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YACxE,MAAM,OAAO,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,eAAe,EAAE,CAAC,CAAC;YACrF,IAAI,MAAM,CAAC,MAAM;gBAChB,OAAO,CAAC,MAAM,CACb,MAAM,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC,MAAM,EAAE,2BAA2B,CAAC,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAClG,CAAC;;gBACE,OAAO,CAAC,OAAO,EAAE,CAAC;QACxB,CAAC;QACD,MAAM,OAAO,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9D,MAAM,OAAO,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;YAClC,MAAM,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAC/C,MAAM,QAAQ,GAAG,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACpD,IAAI,QAAQ,EAAE,MAAM;gBAAE,MAAM,IAAI,cAAc,CAAC,QAAQ,EAAE,gCAAgC,CAAC,CAAC;QAC5F,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;YACtC,MAAM,wBAAwB,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,kDAAkD,CAAC,OAAO,CAAC,CAAC,CAAC;QAC7F,MAAM,OAAO,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAAC;QAC9E,MAAM,OAAO,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;YACpC,MAAM,OAAO,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;YACtC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC,CAAC;QACpF,IAAI,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,OAAO;YACjE,qBAAqB,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QACvD,MAAM,OAAO,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;QAChE,MAAM,OAAO,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,+BAA+B,CAAC,CAAC,CAAC;QACxG,MAAM,OAAO,CAAC,eAAe,EAAE,GAAG,EAAE;YACnC,OAAO,CAAC,oBAAoB,EAAE,CAAC;YAC/B,OAAO,CAAC,eAAe,GAAG,EAAE,CAAC;QAC9B,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,uBAAuB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QAC5E,MAAM,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE;YAC7B,OAAO,CAAC,iBAAiB,EAAE,OAAO,EAAE,CAAC;YACrC,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACvC,CAAC,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,MAAM;YAChB,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC,MAAM,EAAE,yBAAyB,CAAC,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACzG,CAAC,CAAC,CAAC;IACH,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACtC,IAAI,OAAO,EAAE,CAAC;QACb,kBAAkB,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACjD,KAAK,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC;IACzC,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,OAAO;IACtB,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAED,4EAA4E;AAC5E,yBAAyB;AACzB,4EAA4E;AAE5E,uBAAuB;AAEvB,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACxC,MAAM,CAAqB,KAA2B,EAAE,gBAA6B;QACpF,OAAO,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC;IACzD,CAAC;IACD,KAAK;IACL,gBAAgB;IAChB,iBAAiB;IACjB,8BAA8B;IAC9B,4BAA4B;IAC5B,kBAAkB;IAClB,2BAA2B;IAC3B,2BAA2B;IAC3B,aAAa;IACb,mBAAmB;IACnB,yBAAyB;IACzB,sBAAsB;IACtB,mBAAmB;IACnB,SAAS;IACT,oBAAoB;IACpB,OAAO;CACP,CAAC","sourcesContent":["import type { AssistantMessage, Message, TextContent } from \"@bastani/pi-ai/compat\";\nimport { cleanupSessionResources } from \"@bastani/pi-ai/compat\";\nimport type { AgentEvent, AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport { abortBash } from \"./agent-session-bash.ts\";\nimport type { AgentSessionInternalSurface as AgentSession } from \"./agent-session-methods.ts\";\nimport { clearNestedToolCalls, recordNestedToolCalls } from \"./agent-session-nested-tools.js\";\nimport {\n\tisProtectedStreamingCustomMessage,\n\tmarkProtectedStreamingCustomMessageConsumed,\n\tmarkProtectedStreamingCustomMessagePersistenceFailed,\n\tpersistProtectedStreamingCustomMessage,\n\tprepareProtectedStreamingCustomMessagesForDisposal,\n\tretryConsumedProtectedStreamingCustomMessages,\n} from \"./agent-session-persistent-custom-messages.ts\";\nimport { abortCurrentGeneration } from \"./agent-session-queue-pause.ts\";\nimport {\n\ttype AgentSessionEvent,\n\ttype AgentSessionEventListener,\n\tcustomMessageExcludesContext,\n\tisSingleGenericAbortTextContent,\n\treplacementAbortContent,\n} from \"./agent-session-types.js\";\nimport { formatCodexProviderError } from \"./codex-errors.ts\";\nimport type {\n\tMessageEndEvent,\n\tMessageStartEvent,\n\tMessageUpdateEvent,\n\tToolExecutionEndEvent,\n\tToolExecutionStartEvent,\n\tToolExecutionUpdateEvent,\n\tTurnStartEvent,\n} from \"./extensions/index.js\";\nimport { emitSessionShutdownEvent } from \"./extensions/runner.ts\";\nimport { STALE_EXTENSION_CONTEXT_MESSAGE } from \"./extensions/stale-context.ts\";\nimport type { SessionShutdownEvent } from \"./extensions/types.ts\";\nimport type { StageAdmittedCustomMessage } from \"./messages.ts\";\nimport { normalizeMessageContent } from \"./messages.ts\";\nimport {\n\tabortSessionWork,\n\tdrainSessionReload,\n\tdrainSessionWork,\n\thasCallingSessionWork,\n} from \"./session-lifecycle-work.ts\";\nimport { assertSettingsWrites, ownedSettingsManagers } from \"./settings-write-ownership.ts\";\n\nexport function _emit(this: AgentSession, event: AgentSessionEvent): void {\n\tfor (const l of this._eventListeners) {\n\t\tl(event);\n\t}\n}\n\nexport function _emitQueueUpdate(this: AgentSession): void {\n\tthis._emit({\n\t\ttype: \"queue_update\",\n\t\tsteering: [...this._steeringMessages],\n\t\tfollowUp: [...this._followUpMessages],\n\t});\n}\n\nconst consumedQueuedMessageEvents = new WeakSet<object>();\n\n/** Internal handler for agent events - shared by subscribe and reconnect */\n\nexport function _handleAgentEvent(this: AgentSession, event: AgentEvent): Promise<void> | void {\n\tif (event.type === \"message_start\" && event.message.role === \"toolResult\")\n\t\trecordNestedToolCalls(this, event.message);\n\telse if (event.type === \"agent_end\") clearNestedToolCalls(this);\n\t// Create retry promise synchronously before queueing async processing.\n\t// Agent.emit() calls this handler synchronously, and prompt() calls waitForRetry()\n\t// as soon as agent.prompt() resolves. If _retryPromise is created only inside\n\t// _processAgentEvent, slow earlier queued events can delay agent_end processing\n\t// and waitForRetry() can miss the in-flight retry.\n\tthis._createRetryPromiseForAgentEnd(event);\n\t// Agent-core has already consumed this message. Reflect admission before an\n\t// Escape/abort can restore it from a stale queue while earlier hooks settle.\n\tif (event.type === \"message_start\" && event.message.role === \"user\") {\n\t\tconst text = this._getUserMessageText(event.message);\n\t\tif (text) {\n\t\t\tconst queue = [this._steeringMessages, this._followUpMessages].find((messages) => messages.includes(text));\n\t\t\tif (queue) {\n\t\t\t\tqueue.splice(queue.indexOf(text), 1);\n\t\t\t\tthis._admittedQueuedMessageAwaitingReply = text;\n\t\t\t\tconsumedQueuedMessageEvents.add(event);\n\t\t\t}\n\t\t}\n\t}\n\tconst awaitProtectedPersistence =\n\t\tevent.type === \"message_end\" && event.message.role === \"custom\"\n\t\t\t? markProtectedStreamingCustomMessageConsumed(this, event.message)\n\t\t\t: false;\n\tif (event.type === \"message_end\") this._messagesAwaitingPersistence.add(event.message);\n\n\tconst processing = this._agentEventQueue.then(\n\t\t() => this._processAgentEvent(event),\n\t\t() => this._processAgentEvent(event),\n\t);\n\tthis._agentEventQueue = processing;\n\n\t// Keep queue alive if an event handler fails. Per event, agent-core awaits only\n\t// protected persistence and fallback reconciliation; other listener work is\n\t// nonblocking for that event. The queue as a whole is still drained before each\n\t// provider request (`prepareRequest` in agent-session-boundaries.ts): message_end\n\t// handlers may replace the message that gets persisted, and the request is built\n\t// from the persisted canonical projection, so every queued handler gates the next\n\t// request rather than only the persistence step.\n\tprocessing.catch((error) => {\n\t\t// #3105: callbacks interrupted by terminal disposal remain observable at shutdown.\n\t\tif (this._disposed) {\n\t\t\tconst failures = shutdownEventFailures.get(this) ?? [];\n\t\t\tfailures.push(error instanceof Error ? error : new Error(String(error)));\n\t\t\tshutdownEventFailures.set(this, failures);\n\t\t}\n\t});\n\tif (\n\t\tawaitProtectedPersistence ||\n\t\t// #3105: only queued custom input needs this boundary; ordinary turn listeners\n\t\t// must remain nonblocking during fallback settlement.\n\t\t(event.type === \"turn_end\" && this._pendingCustomMessages.length > 0) ||\n\t\t(event.type === \"agent_end\" && (this._fallbackModels.length > 0 || this._fallbackOriginModel !== undefined))\n\t)\n\t\treturn processing.catch(() => {});\n}\n\nexport function _createRetryPromiseForAgentEnd(this: AgentSession, event: AgentEvent): void {\n\tif (event.type !== \"agent_end\" || this._retryPromise || this._agentRunAbortRequested) {\n\t\treturn;\n\t}\n\n\tconst settings = this.settingsManager.getRetrySettings();\n\tif (!settings.enabled && this._fallbackModels.length === 0) {\n\t\treturn;\n\t}\n\n\tconst lastAssistant = this._findLastAssistantInMessages(event.messages);\n\tif (!lastAssistant) {\n\t\treturn;\n\t}\n\n\tconst fallbackable =\n\t\ttypeof this._isFallbackableError === \"function\"\n\t\t\t? this._isFallbackableError(lastAssistant)\n\t\t\t: this._isRetryableError(lastAssistant);\n\tconst retryable = this._isRetryableError(lastAssistant);\n\tconst shouldRetry =\n\t\tretryable || fallbackable || this._isEmptyCompletion(lastAssistant) || this._isSafetyRefusal(lastAssistant);\n\tif (!shouldRetry) {\n\t\treturn;\n\t}\n\n\tthis._retryPromise = new Promise((resolve) => {\n\t\tthis._retryResolve = resolve;\n\t});\n}\n\nexport function _findLastAssistantInMessages(\n\tthis: AgentSession,\n\tmessages: AgentMessage[],\n): AssistantMessage | undefined {\n\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\tconst message = messages[i];\n\t\tif (message.role === \"assistant\") {\n\t\t\treturn message as AssistantMessage;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nexport async function _processAgentEvent(this: AgentSession, event: AgentEvent): Promise<void> {\n\tconst protectedMessage =\n\t\tevent.type === \"message_end\" &&\n\t\tevent.message.role === \"custom\" &&\n\t\tisProtectedStreamingCustomMessage(this, event.message)\n\t\t\t? event.message\n\t\t\t: undefined;\n\t// Public notifications remain serialized behind extension events.\n\tif (event.type === \"agent_start\") {\n\t\t// A caller replacement prepared for a turn that never reached its provider\n\t\t// request must not leak into this run's first request. `prepareRequest`\n\t\t// awaits this queue, so the reset lands before the run's first projection.\n\t\tthis._callerReplacedNextRequestContext = false;\n\t}\n\tif (event.type === \"message_start\" && event.message.role === \"user\") {\n\t\tthis._overflowRecoveryAttempted = false;\n\t\tthis._recoverableLengthRecoveryAttempted = false;\n\t\tthis._fallbackAttemptedKeys.clear();\n\t\tthis._fallbackBlockedModels.length = 0;\n\t\tif (consumedQueuedMessageEvents.delete(event)) this._emitQueueUpdate();\n\t}\n\n\tthis._applyInterruptAbortMessage(event);\n\tthis._applyProviderErrorGuidance(event);\n\n\ttry {\n\t\t// Emit to extensions first, then notify all public listeners.\n\t\tawait this._emitExtensionEvent(event);\n\t\tthis._emit(event);\n\t} finally {\n\t\t// Agent-core has consumed this protected input already. Its durability\n\t\t// boundary cannot be skipped by a fallible extension or session listener.\n\t\tif (protectedMessage !== undefined) {\n\t\t\ttry {\n\t\t\t\tpersistProtectedStreamingCustomMessage(this, protectedMessage);\n\t\t\t} catch {\n\t\t\t\tmarkProtectedStreamingCustomMessagePersistenceFailed(this, protectedMessage);\n\t\t\t}\n\t\t\tretryConsumedProtectedStreamingCustomMessages(this);\n\t\t}\n\t\tif (event.type === \"message_end\") this._messagesAwaitingPersistence.delete(event.message);\n\t}\n\tif (event.type === \"turn_end\") {\n\t\tthis._lastAssistantToolResults = event.toolResults;\n\t\tthis._flushPendingCustomMessages();\n\t}\n\n\t// Handle session persistence\n\tif (event.type === \"message_end\") {\n\t\tlet entryId: string | undefined;\n\t\t// Check if this is a custom message from extensions\n\t\tif (event.message.role === \"custom\") {\n\t\t\tconst admitted = event.message as StageAdmittedCustomMessage;\n\t\t\tif (protectedMessage === undefined) {\n\t\t\t\tentryId = this.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\tcustomMessageExcludesContext(event.message),\n\t\t\t\t\tundefined,\n\t\t\t\t\tadmitted.stageAdmissionKey,\n\t\t\t\t);\n\t\t\t}\n\t\t} else if (\n\t\t\tevent.message.role === \"system\" ||\n\t\t\tevent.message.role === \"user\" ||\n\t\t\tevent.message.role === \"assistant\" ||\n\t\t\tevent.message.role === \"toolResult\"\n\t\t) {\n\t\t\t// Regular LLM message - persist as SessionMessageEntry\n\t\t\tentryId = this.sessionManager.appendMessage(event.message);\n\t\t}\n\t\tif (entryId) this._entryIdsByMessage.set(event.message, entryId);\n\t\t// Other message types (bashExecution, branchSummary) are persisted elsewhere\n\n\t\t// Track assistant message for auto-compaction (checked on agent_end)\n\t\tif (event.message.role === \"assistant\") {\n\t\t\tthis._lastAssistantMessage = event.message;\n\n\t\t\tconst assistantMsg = event.message as AssistantMessage;\n\t\t\t// A length stop preserves its one-shot recovery budget. Reset both\n\t\t\t// recovery kinds only once a non-truncated response completes.\n\t\t\tconst assistantFailed =\n\t\t\t\tassistantMsg.stopReason === \"error\" ||\n\t\t\t\tthis._isEmptyCompletion(assistantMsg) ||\n\t\t\t\tthis._isSafetyRefusal(assistantMsg);\n\t\t\tif (!assistantFailed && assistantMsg.stopReason !== \"length\") {\n\t\t\t\tthis._overflowRecoveryAttempted = false;\n\t\t\t\tthis._recoverableLengthRecoveryAttempted = false;\n\t\t\t}\n\t\t\tif (!assistantFailed) {\n\t\t\t\tthis._contextOverflowUnresolved = false;\n\t\t\t\tthis._outputBudgetErrorContinuationAttempts = 0;\n\t\t\t}\n\t\t\tif (!assistantFailed && assistantMsg.stopReason === \"stop\") {\n\t\t\t\tthis._fallbackAttemptedKeys.clear();\n\t\t\t\tthis._fallbackBlockedModels.length = 0;\n\t\t\t}\n\n\t\t\t// A non-truncated assistant response means the length-continuation loop\n\t\t\t// made progress (or the turn completed cleanly), so reset the bounded\n\t\t\t// output-cap continuation counter.\n\t\t\tif (assistantMsg.stopReason !== \"length\") {\n\t\t\t\tthis._lengthContinuationAttempts = 0;\n\t\t\t}\n\n\t\t\t// Reset retry counter immediately on successful assistant response\n\t\t\t// This prevents accumulation across multiple LLM calls within a turn\n\t\t\tif (!assistantFailed && this._retryAttempt > 0) {\n\t\t\t\tthis._emit({\n\t\t\t\t\ttype: \"auto_retry_end\",\n\t\t\t\t\tsuccess: true,\n\t\t\t\t\tattempt: this._retryAttempt,\n\t\t\t\t});\n\t\t\t\tthis._retryAttempt = 0;\n\t\t\t}\n\t\t}\n\t}\n\n\t// A transient hidden-reconciliation write failure retries independently of\n\t// provider/card delivery and can never create another visible lifecycle card.\n\tretryConsumedProtectedStreamingCustomMessages(this);\n\n\t// Check auto-retry and auto-compaction after agent completes\n\tif (event.type === \"agent_end\" && this._lastAssistantMessage) {\n\t\tconst msg = this._lastAssistantMessage;\n\t\tthis._lastAssistantMessage = undefined;\n\t\tif (this._agentRunAbortRequested) {\n\t\t\tthis._resolveRetry();\n\t\t\treturn;\n\t\t}\n\t\tconst postToolPreflightFailed =\n\t\t\tthis._postToolCompactionPreflightError !== undefined &&\n\t\t\tmsg.errorMessage === this._postToolCompactionPreflightError;\n\n\t\t// Check provider/model failures before compaction. Fallback eligibility is\n\t\t// broader than same-model retry eligibility: auth and request-incompatible\n\t\t// failures advance without re-requesting the failed model.\n\t\tconst fallbackableError =\n\t\t\t!postToolPreflightFailed &&\n\t\t\t(typeof this._isFallbackableError === \"function\"\n\t\t\t\t? this._isFallbackableError(msg)\n\t\t\t\t: this._isRetryableError(msg));\n\t\tconst retryableError = !postToolPreflightFailed && this._isRetryableError(msg);\n\t\tconst emptyCompletion =\n\t\t\t!postToolPreflightFailed && !retryableError && !fallbackableError && this._isEmptyCompletion(msg);\n\t\tconst safetyRefusal =\n\t\t\t!postToolPreflightFailed &&\n\t\t\t!retryableError &&\n\t\t\t!fallbackableError &&\n\t\t\t!emptyCompletion &&\n\t\t\tthis._isSafetyRefusal(msg);\n\t\tconst modelFailure = retryableError || fallbackableError || emptyCompletion || safetyRefusal;\n\t\tlet settleAfterTurn = !modelFailure;\n\t\tif (modelFailure) {\n\t\t\tif (emptyCompletion && !msg.errorMessage) {\n\t\t\t\t// Surface a clear reason in the retry banner; empty completions carry no\n\t\t\t\t// provider error message of their own.\n\t\t\t\tmsg.errorMessage = \"Provider returned an empty completion\";\n\t\t\t} else if (safetyRefusal && !msg.errorMessage) {\n\t\t\t\tmsg.errorMessage = \"Provider returned a canned safety refusal\";\n\t\t\t}\n\t\t\tconst didRetry = await this._handleRetryableError(msg);\n\t\t\tif (didRetry) return; // Retry was initiated, don't proceed to compaction\n\t\t\tsettleAfterTurn = true;\n\t\t}\n\t\tif (this._agentRunAbortRequested) return;\n\n\t\tthis._resolveRetry();\n\t\tthis._contextOverflowUnresolved = false;\n\t\tawait this._checkCompaction(msg);\n\t\tif (this._agentRunAbortRequested) return;\n\n\t\t// Compaction owns context overflow first. Only once it is disabled, fails,\n\t\t// or reports the overflow unresolved may the chain spend a candidate on a\n\t\t// larger-context model, so a compactable first overflow costs nothing.\n\t\tif (this._contextOverflowUnresolved) {\n\t\t\tthis._contextOverflowUnresolved = false;\n\t\t\tif (typeof this._trySwitchToFallbackModel === \"function\" && (await this._trySwitchToFallbackModel(msg)))\n\t\t\t\treturn;\n\t\t\tsettleAfterTurn = true;\n\t\t}\n\t\t// Keep a fallback lifecycle open across the compact-and-continue probe that\n\t\t// belongs to this user turn, then settle it without changing the active model.\n\t\tif (settleAfterTurn && this._pendingPostCompactionContinuation === undefined) {\n\t\t\tif (typeof this._settleFallbackModelScope === \"function\") await this._settleFallbackModelScope();\n\t\t}\n\t\t// Launched last so the fallback lifecycle wins: a switch above returns before\n\t\t// this line. Guarded like the fallback methods above because fallback suites\n\t\t// drive this function on a synthetic session.\n\t\tif (event.type === \"agent_end\" && typeof this._maybeGenerateSessionSummary === \"function\")\n\t\t\tvoid this._maybeGenerateSessionSummary();\n\t}\n}\n\nexport function _applyInterruptAbortMessage(this: AgentSession, event: AgentEvent): void {\n\tconst abortMessage = this._activeInterruptAbortMessage;\n\tif (!abortMessage) return;\n\n\tif (event.type === \"tool_execution_end\" && event.isError && isSingleGenericAbortTextContent(event.result.content)) {\n\t\tevent.result.content = replacementAbortContent(abortMessage);\n\t\treturn;\n\t}\n\n\tif (event.type !== \"message_start\" && event.type !== \"message_end\") return;\n\n\tif (\n\t\tevent.message.role === \"toolResult\" &&\n\t\tevent.message.isError &&\n\t\tisSingleGenericAbortTextContent(event.message.content)\n\t) {\n\t\tevent.message.content = replacementAbortContent(abortMessage);\n\t\treturn;\n\t}\n\n\tif (event.message.role === \"assistant\") {\n\t\tconst assistantMessage = event.message as AssistantMessage;\n\t\tif (assistantMessage.stopReason === \"aborted\") {\n\t\t\tassistantMessage.errorMessage = abortMessage;\n\t\t}\n\t}\n}\n\nexport function _applyProviderErrorGuidance(this: AgentSession, event: AgentEvent): void {\n\tif (event.type !== \"message_start\" && event.type !== \"message_update\" && event.type !== \"message_end\") return;\n\tif (event.message.role !== \"assistant\") return;\n\n\tconst assistantMessage = event.message as AssistantMessage;\n\tif (assistantMessage.stopReason !== \"error\" || !assistantMessage.errorMessage) return;\n\n\tassistantMessage.errorMessage = formatCodexProviderError(assistantMessage.provider, assistantMessage.errorMessage);\n}\n\n/** Resolve the pending retry promise */\n\nexport function _resolveRetry(this: AgentSession): void {\n\tif (this._retryResolve) {\n\t\tthis._retryResolve();\n\t\tthis._retryResolve = undefined;\n\t\tthis._retryPromise = undefined;\n\t}\n}\n\n/** Extract text content from a message */\n\nexport function _getUserMessageText(this: AgentSession, message: Message): string {\n\tif (message.role !== \"user\") return \"\";\n\tconst content = message.content;\n\tif (typeof content === \"string\") return content;\n\tconst textBlocks = content.filter((c) => c.type === \"text\");\n\treturn textBlocks.map((c) => (c as TextContent).text).join(\"\");\n}\n\n/** Find the last assistant message in agent state (including aborted ones) */\n\nexport function _findLastAssistantMessage(this: AgentSession): AssistantMessage | undefined {\n\tconst messages = this.agent.state.messages;\n\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\tconst msg = messages[i];\n\t\tif (msg.role === \"assistant\") {\n\t\t\treturn msg as AssistantMessage;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nexport function _replaceMessageInPlace(this: AgentSession, target: AgentMessage, replacement: AgentMessage): void {\n\t// Agent-core stores the finalized message object in its state before emitting message_end.\n\t// SessionManager persistence happens later in _processAgentEvent() with event.message.\n\t// Mutating this object in place keeps agent state, later turn/agent events, listeners,\n\t// and the eventual SessionManager.appendMessage(event.message) persistence in sync.\n\tif (target === replacement) {\n\t\treturn;\n\t}\n\n\tconst targetRecord = target as unknown as Record<string, unknown>;\n\tfor (const key of Object.keys(targetRecord)) {\n\t\tdelete targetRecord[key];\n\t}\n\tObject.assign(targetRecord, replacement);\n}\n\n/** Emit extension events based on agent events */\n\nexport async function _emitExtensionEvent(this: AgentSession, event: AgentEvent): Promise<void> {\n\tif (event.type === \"agent_start\") {\n\t\tthis._turnIndex = 0;\n\t\tawait this._extensionRunner.emit({ type: \"agent_start\" }, undefined, true);\n\t} else if (event.type === \"agent_end\") {\n\t\tawait this._extensionRunner.emit({ type: \"agent_end\", messages: event.messages }, undefined, true);\n\t} else if (event.type === \"turn_start\") {\n\t\tconst extensionEvent: TurnStartEvent = {\n\t\t\ttype: \"turn_start\",\n\t\t\tturnIndex: this._turnIndex,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t} else if (event.type === \"turn_end\") {\n\t\t// finishTurn already dispatched the actionable boundary for loop-driven turns.\n\t\t// Synthetic turns (for example a run that fails before the loop's finishTurn)\n\t\t// still reach extensions here.\n\t\tif (event.message.role === \"assistant\" && !this._boundaryDispatchedMessages.delete(event.message)) {\n\t\t\tawait this._dispatchTurnEndBoundary(event.message, event.toolResults);\n\t\t}\n\t\tthis._turnIndex++;\n\t} else if (event.type === \"message_start\") {\n\t\tconst extensionEvent: MessageStartEvent = {\n\t\t\ttype: \"message_start\",\n\t\t\tmessage: event.message,\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t} else if (event.type === \"message_update\") {\n\t\tconst extensionEvent: MessageUpdateEvent = {\n\t\t\ttype: \"message_update\",\n\t\t\tassistantMessageEvent: event.assistantMessageEvent,\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t} else if (event.type === \"message_end\") {\n\t\tconst extensionEvent: MessageEndEvent = {\n\t\t\ttype: \"message_end\",\n\t\t\tmessage: event.message,\n\t\t};\n\t\t// Agent-core already completed this message; closing must drain its hooks and persistence.\n\t\tconst replacement = await this._extensionRunner.emitMessageEnd(extensionEvent, true);\n\t\tif (replacement) {\n\t\t\tthis._replaceMessageInPlace(event.message, normalizeMessageContent(replacement));\n\t\t}\n\t} else if (event.type === \"tool_execution_start\") {\n\t\tconst extensionEvent: ToolExecutionStartEvent = {\n\t\t\ttype: \"tool_execution_start\",\n\t\t\ttoolCallId: event.toolCallId,\n\t\t\ttoolName: event.toolName,\n\t\t\targs: event.args,\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t} else if (event.type === \"tool_execution_update\") {\n\t\tconst extensionEvent: ToolExecutionUpdateEvent = {\n\t\t\ttype: \"tool_execution_update\",\n\t\t\ttoolCallId: event.toolCallId,\n\t\t\ttoolName: event.toolName,\n\t\t\targs: event.args,\n\t\t\tpartialResult: event.partialResult,\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t} else if (event.type === \"tool_execution_end\") {\n\t\tconst extensionEvent: ToolExecutionEndEvent = {\n\t\t\ttype: \"tool_execution_end\",\n\t\t\ttoolCallId: event.toolCallId,\n\t\t\ttoolName: event.toolName,\n\t\t\tresult: event.result,\n\t\t\tisError: event.isError,\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t}\n}\n\n/**\n * Subscribe to agent events.\n * Session persistence is handled internally (saves messages on message_end).\n * Multiple listeners can be added. Returns unsubscribe function for this listener.\n */\n\nexport function subscribe(this: AgentSession, listener: AgentSessionEventListener): () => void {\n\tthis._eventListeners.push(listener);\n\n\t// Return unsubscribe function for this specific listener\n\treturn () => {\n\t\tconst index = this._eventListeners.indexOf(listener);\n\t\tif (index !== -1) {\n\t\t\tthis._eventListeners.splice(index, 1);\n\t\t}\n\t};\n}\n\n/** Disconnect from agent events during disposal. */\nexport function _disconnectFromAgent(this: AgentSession): void {\n\tif (this._unsubscribeAgent) {\n\t\tthis._unsubscribeAgent();\n\t\tthis._unsubscribeAgent = undefined;\n\t}\n}\n\n/**\n * Remove all listeners and disconnect from agent.\n * Call this when completely done with the session.\n */\n\nconst shutdownEventFailures = new WeakMap<AgentSession, Error[]>();\nconst sessionClosures = new WeakMap<AgentSession, Promise<void>>();\nconst sessionRetirements = new WeakMap<AgentSession, Promise<void>>();\n\n/** Shared terminal boundary for direct SDK disposal and runtime replacement. */\nexport function closeAgentSession(\n\tsession: AgentSession,\n\tevent: SessionShutdownEvent = { type: \"session_shutdown\", reason: \"quit\" },\n\tbeforeInvalidate?: () => void,\n): Promise<void> {\n\tconst handoff = event.reason !== \"quit\" && hasCallingSessionWork(session);\n\tconst existing = sessionClosures.get(session);\n\tif (existing) return (handoff && sessionRetirements.get(session)) || existing;\n\tlet resolveRetired!: () => void;\n\tlet rejectRetired!: (error: Error) => void;\n\tconst retirement = new Promise<void>((resolve, reject) => {\n\t\tresolveRetired = resolve;\n\t\trejectRetired = reject;\n\t});\n\tconst retired = { promise: retirement, resolve: resolveRetired, reject: rejectRetired };\n\tsession._disposed = true;\n\tsession._cacheWarmer?.cancel();\n\tconst closing = Promise.resolve().then(async () => {\n\t\tconst errors: Error[] = [];\n\t\tconst attempt = async (component: string, cleanup: () => void | Promise<void>) => {\n\t\t\ttry {\n\t\t\t\tawait cleanup();\n\t\t\t} catch (cause) {\n\t\t\t\tif (cause instanceof AggregateError)\n\t\t\t\t\terrors.push(...cause.errors.map((error) => new Error(component, { cause: error })));\n\t\t\t\telse errors.push(new Error(component, { cause }));\n\t\t\t}\n\t\t};\n\t\tawait attempt(\"lifetime\", () => abortSessionWork(session));\n\t\tawait attempt(\"shell abort\", () => abortBash.call(session));\n\t\tawait attempt(\"abort\", () => abortCurrentGeneration.call(session));\n\t\tawait attempt(\"reload rollback\", () => drainSessionReload(session));\n\t\tawait attempt(\"tasks\", () => session.closeSessionTasks());\n\t\tawait attempt(\"summary\", () => session.abortSessionSummary());\n\t\tif (handoff) {\n\t\t\tawait attempt(\"peer work\", () => drainSessionWork(session, true, true));\n\t\t\tawait attempt(\"retired authority\", () => session._extensionRunner.revokeAuthority());\n\t\t\tif (errors.length)\n\t\t\t\tretired.reject(\n\t\t\t\t\tObject.assign(new AggregateError(errors, \"Session retirement failed\"), { code: \"ShutdownFailed\" }),\n\t\t\t\t);\n\t\t\telse retired.resolve();\n\t\t}\n\t\tawait attempt(\"active work\", () => drainSessionWork(session));\n\t\tawait attempt(\"events\", async () => {\n\t\t\tawait session._agentEventQueue.catch(() => {});\n\t\t\tconst failures = shutdownEventFailures.get(session);\n\t\t\tif (failures?.length) throw new AggregateError(failures, \"Session event callbacks failed\");\n\t\t});\n\t\tawait attempt(\"extensions\", async () => {\n\t\t\tawait emitSessionShutdownEvent(session._extensionRunner, event);\n\t\t});\n\t\tawait attempt(\"messages\", () => prepareProtectedStreamingCustomMessagesForDisposal(session));\n\t\tawait attempt(\"shell persistence\", () => session._flushPendingBashMessages());\n\t\tawait attempt(\"settings\", async () => {\n\t\t\tawait session.settingsManager.flush();\n\t\t\tassertSettingsWrites(session);\n\t\t});\n\t\tawait attempt(\"session persistence\", () => session.sessionManager.flushIfStarted());\n\t\tif (ownedSettingsManagers.get(session.settingsManager) === session)\n\t\t\townedSettingsManagers.delete(session.settingsManager);\n\t\tawait attempt(\"host subscriptions\", () => beforeInvalidate?.());\n\t\tawait attempt(\"generation\", () => session._extensionRunner.invalidate(STALE_EXTENSION_CONTEXT_MESSAGE));\n\t\tawait attempt(\"subscriptions\", () => {\n\t\t\tsession._disconnectFromAgent();\n\t\t\tsession._eventListeners = [];\n\t\t});\n\t\tawait attempt(\"provider\", () => cleanupSessionResources(session.sessionId));\n\t\tawait attempt(\"storage\", () => {\n\t\t\tsession._tempStorageLease?.release();\n\t\t\tsession._tempStorageLease = undefined;\n\t\t});\n\t\tif (errors.length)\n\t\t\tthrow Object.assign(new AggregateError(errors, \"Session shutdown failed\"), { code: \"ShutdownFailed\" });\n\t});\n\tsessionClosures.set(session, closing);\n\tif (handoff) {\n\t\tsessionRetirements.set(session, retired.promise);\n\t\tvoid closing.catch(() => {});\n\t}\n\tsession._extensionRunner.sealHostInput();\n\treturn handoff ? retired.promise : closing;\n}\n\nexport function dispose(this: AgentSession): Promise<void> {\n\treturn closeAgentSession(this);\n}\n\n// =========================================================================\n// Read-only State Access\n// =========================================================================\n\n/** Full agent state */\n\nexport const agentSessionEventsMethods = {\n\t_close(this: AgentSession, event: SessionShutdownEvent, beforeInvalidate?: () => void) {\n\t\treturn closeAgentSession(this, event, beforeInvalidate);\n\t},\n\t_emit,\n\t_emitQueueUpdate,\n\t_handleAgentEvent,\n\t_createRetryPromiseForAgentEnd,\n\t_findLastAssistantInMessages,\n\t_processAgentEvent,\n\t_applyInterruptAbortMessage,\n\t_applyProviderErrorGuidance,\n\t_resolveRetry,\n\t_getUserMessageText,\n\t_findLastAssistantMessage,\n\t_replaceMessageInPlace,\n\t_emitExtensionEvent,\n\tsubscribe,\n\t_disconnectFromAgent,\n\tdispose,\n};\n"]}
1
+ {"version":3,"file":"agent-session-events.js","sourceRoot":"","sources":["../../src/core/agent-session-events.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AssistantMessage, Message, TextContent } from \"@bastani/pi-ai/compat\";\nimport { cleanupSessionResources } from \"@bastani/pi-ai/compat\";\nimport type { AgentEvent, AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport { abortBash } from \"./agent-session-bash.ts\";\nimport type { AgentSessionInternalSurface as AgentSession } from \"./agent-session-methods.ts\";\nimport { clearNestedToolCalls, recordNestedToolCalls } from \"./agent-session-nested-tools.js\";\nimport {\n\tisProtectedStreamingCustomMessage,\n\tmarkProtectedStreamingCustomMessageConsumed,\n\tmarkProtectedStreamingCustomMessagePersistenceFailed,\n\tpersistProtectedStreamingCustomMessage,\n\tprepareProtectedStreamingCustomMessagesForDisposal,\n\tretryConsumedProtectedStreamingCustomMessages,\n} from \"./agent-session-persistent-custom-messages.ts\";\nimport { abortCurrentGeneration } from \"./agent-session-queue-pause.ts\";\nimport {\n\ttype AgentSessionEvent,\n\ttype AgentSessionEventListener,\n\tcustomMessageExcludesContext,\n\tisSingleGenericAbortTextContent,\n\treplacementAbortContent,\n} from \"./agent-session-types.js\";\nimport { formatCodexProviderError } from \"./codex-errors.ts\";\nimport type {\n\tMessageEndEvent,\n\tMessageStartEvent,\n\tMessageUpdateEvent,\n\tToolExecutionEndEvent,\n\tToolExecutionStartEvent,\n\tToolExecutionUpdateEvent,\n\tTurnStartEvent,\n} from \"./extensions/index.js\";\nimport { emitSessionShutdownEvent } from \"./extensions/runner.ts\";\nimport { STALE_EXTENSION_CONTEXT_MESSAGE } from \"./extensions/stale-context.ts\";\nimport type { SessionShutdownEvent } from \"./extensions/types.ts\";\nimport type { StageAdmittedCustomMessage } from \"./messages.ts\";\nimport { normalizeMessageContent } from \"./messages.ts\";\nimport {\n\tabortSessionWork,\n\tdrainSessionReload,\n\tdrainSessionWork,\n\thasCallingSessionWork,\n} from \"./session-lifecycle-work.ts\";\nimport { assertSettingsWrites, ownedSettingsManagers } from \"./settings-write-ownership.ts\";\n\nexport function _emit(this: AgentSession, event: AgentSessionEvent): void {\n\tfor (const l of this._eventListeners) {\n\t\tl(event);\n\t}\n}\n\nexport function _emitQueueUpdate(this: AgentSession): void {\n\tthis._emit({\n\t\ttype: \"queue_update\",\n\t\tsteering: [...this._steeringMessages],\n\t\tfollowUp: [...this._followUpMessages],\n\t});\n}\n\nconst consumedQueuedMessageEvents = new WeakSet<object>();\n\n/** Internal handler for agent events - shared by subscribe and reconnect */\n\nexport function _handleAgentEvent(this: AgentSession, event: AgentEvent): Promise<void> | void {\n\tif (event.type === \"message_start\" && event.message.role === \"toolResult\")\n\t\trecordNestedToolCalls(this, event.message);\n\telse if (event.type === \"agent_end\") clearNestedToolCalls(this);\n\t// Create retry promise synchronously before queueing async processing.\n\t// Agent.emit() calls this handler synchronously, and prompt() calls waitForRetry()\n\t// as soon as agent.prompt() resolves. If _retryPromise is created only inside\n\t// _processAgentEvent, slow earlier queued events can delay agent_end processing\n\t// and waitForRetry() can miss the in-flight retry.\n\tthis._createRetryPromiseForAgentEnd(event);\n\t// Agent-core has already consumed this message. Reflect admission before an\n\t// Escape/abort can restore it from a stale queue while earlier hooks settle.\n\tif (event.type === \"message_start\" && event.message.role === \"user\") {\n\t\tconst text = this._getUserMessageText(event.message);\n\t\tif (text) {\n\t\t\tconst queue = [this._steeringMessages, this._followUpMessages].find((messages) => messages.includes(text));\n\t\t\tif (queue) {\n\t\t\t\tqueue.splice(queue.indexOf(text), 1);\n\t\t\t\tthis._admittedQueuedMessageAwaitingReply = text;\n\t\t\t\tconsumedQueuedMessageEvents.add(event);\n\t\t\t}\n\t\t}\n\t}\n\tconst awaitProtectedPersistence =\n\t\tevent.type === \"message_end\" && event.message.role === \"custom\"\n\t\t\t? markProtectedStreamingCustomMessageConsumed(this, event.message)\n\t\t\t: false;\n\tif (event.type === \"message_end\") this._messagesAwaitingPersistence.add(event.message);\n\n\tconst processing = this._agentEventQueue.then(\n\t\t() => this._processAgentEvent(event),\n\t\t() => this._processAgentEvent(event),\n\t);\n\tthis._agentEventQueue = processing;\n\n\t// Keep queue alive if an event handler fails. Per event, agent-core awaits only\n\t// protected persistence and fallback reconciliation; other listener work is\n\t// nonblocking for that event. The queue as a whole is still drained before each\n\t// provider request (`prepareRequest` in agent-session-boundaries.ts): message_end\n\t// handlers may replace the message that gets persisted, and the request is built\n\t// from the persisted canonical projection, so every queued handler gates the next\n\t// request rather than only the persistence step.\n\tprocessing.catch((error) => {\n\t\t// #3105: callbacks interrupted by terminal disposal remain observable at shutdown.\n\t\tif (this._disposed) {\n\t\t\tconst failures = shutdownEventFailures.get(this) ?? [];\n\t\t\tfailures.push(error instanceof Error ? error : new Error(String(error)));\n\t\t\tshutdownEventFailures.set(this, failures);\n\t\t}\n\t});\n\tif (\n\t\tawaitProtectedPersistence ||\n\t\t// #3105: only queued custom input needs this boundary; ordinary turn listeners\n\t\t// must remain nonblocking during fallback settlement.\n\t\t(event.type === \"turn_end\" && this._pendingCustomMessages.length > 0) ||\n\t\t(event.type === \"agent_end\" && (this._fallbackModels.length > 0 || this._fallbackOriginModel !== undefined))\n\t)\n\t\treturn processing.catch(() => {});\n}\n\nexport function _createRetryPromiseForAgentEnd(this: AgentSession, event: AgentEvent): void {\n\tif (event.type !== \"agent_end\" || this._retryPromise || this._agentRunAbortRequested) {\n\t\treturn;\n\t}\n\n\tconst settings = this.settingsManager.getRetrySettings();\n\tif (!settings.enabled && this._fallbackModels.length === 0) {\n\t\treturn;\n\t}\n\n\tconst lastAssistant = this._findLastAssistantInMessages(event.messages);\n\tif (!lastAssistant) {\n\t\treturn;\n\t}\n\n\tconst fallbackable =\n\t\ttypeof this._isFallbackableError === \"function\"\n\t\t\t? this._isFallbackableError(lastAssistant)\n\t\t\t: this._isRetryableError(lastAssistant);\n\tconst retryable = this._isRetryableError(lastAssistant);\n\tconst shouldRetry =\n\t\tretryable || fallbackable || this._isEmptyCompletion(lastAssistant) || this._isSafetyRefusal(lastAssistant);\n\tif (!shouldRetry) {\n\t\treturn;\n\t}\n\n\tthis._retryPromise = new Promise((resolve) => {\n\t\tthis._retryResolve = resolve;\n\t});\n}\n\nexport function _findLastAssistantInMessages(\n\tthis: AgentSession,\n\tmessages: AgentMessage[],\n): AssistantMessage | undefined {\n\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\tconst message = messages[i];\n\t\tif (message.role === \"assistant\") {\n\t\t\treturn message as AssistantMessage;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nexport async function _processAgentEvent(this: AgentSession, event: AgentEvent): Promise<void> {\n\tconst protectedMessage =\n\t\tevent.type === \"message_end\" &&\n\t\tevent.message.role === \"custom\" &&\n\t\tisProtectedStreamingCustomMessage(this, event.message)\n\t\t\t? event.message\n\t\t\t: undefined;\n\t// Public notifications remain serialized behind extension events.\n\tif (event.type === \"agent_start\") {\n\t\t// A caller replacement prepared for a turn that never reached its provider\n\t\t// request must not leak into this run's first request. `prepareRequest`\n\t\t// awaits this queue, so the reset lands before the run's first projection.\n\t\tthis._callerReplacedNextRequestContext = false;\n\t}\n\tif (event.type === \"message_start\" && event.message.role === \"user\") {\n\t\tthis._overflowRecoveryAttempted = false;\n\t\tthis._recoverableLengthRecoveryAttempted = false;\n\t\tthis._fallbackAttemptedKeys.clear();\n\t\tthis._fallbackBlockedModels.length = 0;\n\t\tif (consumedQueuedMessageEvents.delete(event)) this._emitQueueUpdate();\n\t}\n\n\tthis._applyInterruptAbortMessage(event);\n\tthis._applyProviderErrorGuidance(event);\n\n\ttry {\n\t\t// Emit to extensions first, then notify all public listeners.\n\t\tawait this._emitExtensionEvent(event);\n\t\tthis._emit(event);\n\t} finally {\n\t\t// Agent-core has consumed this protected input already. Its durability\n\t\t// boundary cannot be skipped by a fallible extension or session listener.\n\t\tif (protectedMessage !== undefined) {\n\t\t\ttry {\n\t\t\t\tpersistProtectedStreamingCustomMessage(this, protectedMessage);\n\t\t\t} catch {\n\t\t\t\tmarkProtectedStreamingCustomMessagePersistenceFailed(this, protectedMessage);\n\t\t\t}\n\t\t\tretryConsumedProtectedStreamingCustomMessages(this);\n\t\t}\n\t\tif (event.type === \"message_end\") this._messagesAwaitingPersistence.delete(event.message);\n\t}\n\tif (event.type === \"turn_end\") {\n\t\tthis._lastAssistantToolResults = event.toolResults;\n\t\tthis._flushPendingCustomMessages();\n\t}\n\n\t// Handle session persistence\n\tif (event.type === \"message_end\") {\n\t\tlet entryId: string | undefined;\n\t\t// Check if this is a custom message from extensions\n\t\tif (event.message.role === \"custom\") {\n\t\t\tconst admitted = event.message as StageAdmittedCustomMessage;\n\t\t\tif (protectedMessage === undefined) {\n\t\t\t\tentryId = this.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\tcustomMessageExcludesContext(event.message),\n\t\t\t\t\tundefined,\n\t\t\t\t\tadmitted.stageAdmissionKey,\n\t\t\t\t);\n\t\t\t}\n\t\t} else if (\n\t\t\tevent.message.role === \"system\" ||\n\t\t\tevent.message.role === \"user\" ||\n\t\t\tevent.message.role === \"assistant\" ||\n\t\t\tevent.message.role === \"toolResult\"\n\t\t) {\n\t\t\t// Regular LLM message - persist as SessionMessageEntry\n\t\t\tentryId = this.sessionManager.appendMessage(event.message);\n\t\t}\n\t\tif (entryId) this._entryIdsByMessage.set(event.message, entryId);\n\t\t// Other message types (bashExecution, branchSummary) are persisted elsewhere\n\n\t\t// Track assistant message for auto-compaction (checked on agent_end)\n\t\tif (event.message.role === \"assistant\") {\n\t\t\tthis._lastAssistantMessage = event.message;\n\n\t\t\tconst assistantMsg = event.message as AssistantMessage;\n\t\t\t// A length stop preserves its one-shot recovery budget. Reset both\n\t\t\t// recovery kinds only once a non-truncated response completes.\n\t\t\tconst assistantFailed =\n\t\t\t\tassistantMsg.stopReason === \"error\" ||\n\t\t\t\tthis._isEmptyCompletion(assistantMsg) ||\n\t\t\t\tthis._isSafetyRefusal(assistantMsg);\n\t\t\tif (!assistantFailed && assistantMsg.stopReason !== \"length\") {\n\t\t\t\tthis._overflowRecoveryAttempted = false;\n\t\t\t\tthis._recoverableLengthRecoveryAttempted = false;\n\t\t\t}\n\t\t\tif (!assistantFailed) {\n\t\t\t\tthis._contextOverflowUnresolved = false;\n\t\t\t\tthis._outputBudgetErrorContinuationAttempts = 0;\n\t\t\t}\n\t\t\tif (!assistantFailed && assistantMsg.stopReason === \"stop\") {\n\t\t\t\tthis._fallbackAttemptedKeys.clear();\n\t\t\t\tthis._fallbackBlockedModels.length = 0;\n\t\t\t}\n\n\t\t\t// A non-truncated assistant response means the length-continuation loop\n\t\t\t// made progress (or the turn completed cleanly), so reset the bounded\n\t\t\t// output-cap continuation counter.\n\t\t\tif (assistantMsg.stopReason !== \"length\") {\n\t\t\t\tthis._lengthContinuationAttempts = 0;\n\t\t\t}\n\n\t\t\t// Reset retry counter immediately on successful assistant response\n\t\t\t// This prevents accumulation across multiple LLM calls within a turn\n\t\t\tif (!assistantFailed && this._retryAttempt > 0) {\n\t\t\t\tthis._emit({\n\t\t\t\t\ttype: \"auto_retry_end\",\n\t\t\t\t\tsuccess: true,\n\t\t\t\t\tattempt: this._retryAttempt,\n\t\t\t\t});\n\t\t\t\tthis._retryAttempt = 0;\n\t\t\t}\n\t\t}\n\t}\n\n\t// A transient hidden-reconciliation write failure retries independently of\n\t// provider/card delivery and can never create another visible lifecycle card.\n\tretryConsumedProtectedStreamingCustomMessages(this);\n\n\t// Check auto-retry and auto-compaction after agent completes\n\tif (event.type === \"agent_end\" && this._lastAssistantMessage) {\n\t\tconst msg = this._lastAssistantMessage;\n\t\tthis._lastAssistantMessage = undefined;\n\t\tif (this._agentRunAbortRequested) {\n\t\t\tthis._resolveRetry();\n\t\t\treturn;\n\t\t}\n\t\tconst postToolPreflightFailed =\n\t\t\tthis._postToolCompactionPreflightError !== undefined &&\n\t\t\tmsg.errorMessage === this._postToolCompactionPreflightError;\n\n\t\t// Check provider/model failures before compaction. Fallback eligibility is\n\t\t// broader than same-model retry eligibility: auth and request-incompatible\n\t\t// failures advance without re-requesting the failed model.\n\t\tconst fallbackableError =\n\t\t\t!postToolPreflightFailed &&\n\t\t\t(typeof this._isFallbackableError === \"function\"\n\t\t\t\t? this._isFallbackableError(msg)\n\t\t\t\t: this._isRetryableError(msg));\n\t\tconst retryableError = !postToolPreflightFailed && this._isRetryableError(msg);\n\t\tconst emptyCompletion =\n\t\t\t!postToolPreflightFailed && !retryableError && !fallbackableError && this._isEmptyCompletion(msg);\n\t\tconst safetyRefusal =\n\t\t\t!postToolPreflightFailed &&\n\t\t\t!retryableError &&\n\t\t\t!fallbackableError &&\n\t\t\t!emptyCompletion &&\n\t\t\tthis._isSafetyRefusal(msg);\n\t\tconst modelFailure = retryableError || fallbackableError || emptyCompletion || safetyRefusal;\n\t\tlet settleAfterTurn = !modelFailure;\n\t\tif (modelFailure) {\n\t\t\tif (emptyCompletion && !msg.errorMessage) {\n\t\t\t\t// Surface a clear reason in the retry banner; empty completions carry no\n\t\t\t\t// provider error message of their own.\n\t\t\t\tmsg.errorMessage = \"Provider returned an empty completion\";\n\t\t\t} else if (safetyRefusal && !msg.errorMessage) {\n\t\t\t\tmsg.errorMessage = \"Provider returned a canned safety refusal\";\n\t\t\t}\n\t\t\tconst didRetry = await this._handleRetryableError(msg);\n\t\t\tif (didRetry) return; // Retry was initiated, don't proceed to compaction\n\t\t\tsettleAfterTurn = true;\n\t\t}\n\t\tif (this._agentRunAbortRequested) return;\n\n\t\tthis._resolveRetry();\n\t\tthis._contextOverflowUnresolved = false;\n\t\tawait this._checkCompaction(msg);\n\t\tif (this._agentRunAbortRequested) return;\n\n\t\t// Compaction owns context overflow first. Only once it is disabled, fails,\n\t\t// or reports the overflow unresolved may the chain spend a candidate on a\n\t\t// larger-context model, so a compactable first overflow costs nothing.\n\t\tif (this._contextOverflowUnresolved) {\n\t\t\tthis._contextOverflowUnresolved = false;\n\t\t\tif (typeof this._trySwitchToFallbackModel === \"function\" && (await this._trySwitchToFallbackModel(msg)))\n\t\t\t\treturn;\n\t\t\tsettleAfterTurn = true;\n\t\t}\n\t\t// Keep a fallback lifecycle open across the compact-and-continue probe that\n\t\t// belongs to this user turn, then settle it without changing the active model.\n\t\tif (settleAfterTurn && this._pendingPostCompactionContinuation === undefined) {\n\t\t\tif (typeof this._settleFallbackModelScope === \"function\") await this._settleFallbackModelScope();\n\t\t}\n\t\t// Launched last so the fallback lifecycle wins: a switch above returns before\n\t\t// this line. Guarded like the fallback methods above because fallback suites\n\t\t// drive this function on a synthetic session.\n\t\tif (event.type === \"agent_end\" && typeof this._maybeGenerateSessionSummary === \"function\")\n\t\t\tvoid this._maybeGenerateSessionSummary();\n\t}\n}\n\nexport function _applyInterruptAbortMessage(this: AgentSession, event: AgentEvent): void {\n\tconst abortMessage = this._activeInterruptAbortMessage;\n\tif (!abortMessage) return;\n\n\tif (event.type === \"tool_execution_end\" && event.isError && isSingleGenericAbortTextContent(event.result.content)) {\n\t\tevent.result.content = replacementAbortContent(abortMessage);\n\t\treturn;\n\t}\n\n\tif (event.type !== \"message_start\" && event.type !== \"message_end\") return;\n\n\tif (\n\t\tevent.message.role === \"toolResult\" &&\n\t\tevent.message.isError &&\n\t\tisSingleGenericAbortTextContent(event.message.content)\n\t) {\n\t\tevent.message.content = replacementAbortContent(abortMessage);\n\t\treturn;\n\t}\n\n\tif (event.message.role === \"assistant\") {\n\t\tconst assistantMessage = event.message as AssistantMessage;\n\t\tif (assistantMessage.stopReason === \"aborted\") {\n\t\t\tassistantMessage.errorMessage = abortMessage;\n\t\t}\n\t}\n}\n\nexport function _applyProviderErrorGuidance(this: AgentSession, event: AgentEvent): void {\n\tif (event.type !== \"message_start\" && event.type !== \"message_update\" && event.type !== \"message_end\") return;\n\tif (event.message.role !== \"assistant\") return;\n\n\tconst assistantMessage = event.message as AssistantMessage;\n\tif (assistantMessage.stopReason !== \"error\" || !assistantMessage.errorMessage) return;\n\n\tassistantMessage.errorMessage = formatCodexProviderError(assistantMessage.provider, assistantMessage.errorMessage);\n}\n\n/** Resolve the pending retry promise */\n\nexport function _resolveRetry(this: AgentSession): void {\n\tif (this._retryResolve) {\n\t\tthis._retryResolve();\n\t\tthis._retryResolve = undefined;\n\t\tthis._retryPromise = undefined;\n\t}\n}\n\n/** Extract text content from a message */\n\nexport function _getUserMessageText(this: AgentSession, message: Message): string {\n\tif (message.role !== \"user\") return \"\";\n\tconst content = message.content;\n\tif (typeof content === \"string\") return content;\n\tconst textBlocks = content.filter((c) => c.type === \"text\");\n\treturn textBlocks.map((c) => (c as TextContent).text).join(\"\");\n}\n\n/** Find the last assistant message in agent state (including aborted ones) */\n\nexport function _findLastAssistantMessage(this: AgentSession): AssistantMessage | undefined {\n\tconst messages = this.agent.state.messages;\n\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\tconst msg = messages[i];\n\t\tif (msg.role === \"assistant\") {\n\t\t\treturn msg as AssistantMessage;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nexport function _replaceMessageInPlace(this: AgentSession, target: AgentMessage, replacement: AgentMessage): void {\n\t// Agent-core stores the finalized message object in its state before emitting message_end.\n\t// SessionManager persistence happens later in _processAgentEvent() with event.message.\n\t// Mutating this object in place keeps agent state, later turn/agent events, listeners,\n\t// and the eventual SessionManager.appendMessage(event.message) persistence in sync.\n\tif (target === replacement) {\n\t\treturn;\n\t}\n\n\tconst targetRecord = target as unknown as Record<string, unknown>;\n\tfor (const key of Object.keys(targetRecord)) {\n\t\tdelete targetRecord[key];\n\t}\n\tObject.assign(targetRecord, replacement);\n}\n\n/** Emit extension events based on agent events */\n\nexport async function _emitExtensionEvent(this: AgentSession, event: AgentEvent): Promise<void> {\n\tif (event.type === \"agent_start\") {\n\t\tthis._turnIndex = 0;\n\t\tawait this._extensionRunner.emit({ type: \"agent_start\" }, undefined, true);\n\t} else if (event.type === \"agent_end\") {\n\t\tawait this._extensionRunner.emit({ type: \"agent_end\", messages: event.messages }, undefined, true);\n\t} else if (event.type === \"turn_start\") {\n\t\tconst extensionEvent: TurnStartEvent = {\n\t\t\ttype: \"turn_start\",\n\t\t\tturnIndex: this._turnIndex,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t} else if (event.type === \"turn_end\") {\n\t\t// finishTurn already dispatched the actionable boundary for loop-driven turns.\n\t\t// Synthetic turns (for example a run that fails before the loop's finishTurn)\n\t\t// still reach extensions here.\n\t\tif (event.message.role === \"assistant\" && !this._boundaryDispatchedMessages.delete(event.message)) {\n\t\t\tawait this._dispatchTurnEndBoundary(event.message, event.toolResults);\n\t\t}\n\t\tthis._turnIndex++;\n\t} else if (event.type === \"message_start\") {\n\t\tconst extensionEvent: MessageStartEvent = {\n\t\t\ttype: \"message_start\",\n\t\t\tmessage: event.message,\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t} else if (event.type === \"message_update\") {\n\t\tconst extensionEvent: MessageUpdateEvent = {\n\t\t\ttype: \"message_update\",\n\t\t\tassistantMessageEvent: event.assistantMessageEvent,\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t} else if (event.type === \"message_end\") {\n\t\tconst extensionEvent: MessageEndEvent = {\n\t\t\ttype: \"message_end\",\n\t\t\tmessage: event.message,\n\t\t};\n\t\t// Agent-core already completed this message; closing must drain its hooks and persistence.\n\t\tconst replacement = await this._extensionRunner.emitMessageEnd(extensionEvent, true);\n\t\tif (replacement) {\n\t\t\tthis._replaceMessageInPlace(event.message, normalizeMessageContent(replacement));\n\t\t}\n\t} else if (event.type === \"tool_execution_start\") {\n\t\tconst extensionEvent: ToolExecutionStartEvent = {\n\t\t\ttype: \"tool_execution_start\",\n\t\t\ttoolCallId: event.toolCallId,\n\t\t\ttoolName: event.toolName,\n\t\t\targs: event.args,\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t} else if (event.type === \"tool_execution_update\") {\n\t\tconst extensionEvent: ToolExecutionUpdateEvent = {\n\t\t\ttype: \"tool_execution_update\",\n\t\t\ttoolCallId: event.toolCallId,\n\t\t\ttoolName: event.toolName,\n\t\t\targs: event.args,\n\t\t\tpartialResult: event.partialResult,\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t} else if (event.type === \"tool_execution_end\") {\n\t\tconst extensionEvent: ToolExecutionEndEvent = {\n\t\t\ttype: \"tool_execution_end\",\n\t\t\ttoolCallId: event.toolCallId,\n\t\t\ttoolName: event.toolName,\n\t\t\tresult: event.result,\n\t\t\tisError: event.isError,\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t}\n}\n\n/**\n * Subscribe to agent events.\n * Session persistence is handled internally (saves messages on message_end).\n * Multiple listeners can be added. Returns unsubscribe function for this listener.\n */\n\nexport function subscribe(this: AgentSession, listener: AgentSessionEventListener): () => void {\n\tthis._eventListeners.push(listener);\n\n\t// Return unsubscribe function for this specific listener\n\treturn () => {\n\t\tconst index = this._eventListeners.indexOf(listener);\n\t\tif (index !== -1) {\n\t\t\tthis._eventListeners.splice(index, 1);\n\t\t}\n\t};\n}\n\n/** Disconnect from agent events during disposal. */\nexport function _disconnectFromAgent(this: AgentSession): void {\n\tif (this._unsubscribeAgent) {\n\t\tthis._unsubscribeAgent();\n\t\tthis._unsubscribeAgent = undefined;\n\t}\n}\n\n/**\n * Remove all listeners and disconnect from agent.\n * Call this when completely done with the session.\n */\n\nconst shutdownEventFailures = new WeakMap<AgentSession, Error[]>();\nconst sessionClosures = new WeakMap<AgentSession, Promise<void>>();\nconst sessionRetirements = new WeakMap<AgentSession, Promise<void>>();\n\n/** Shared terminal boundary for direct SDK disposal and runtime replacement. */\nexport function closeAgentSession(\n\tsession: AgentSession,\n\tevent: SessionShutdownEvent = { type: \"session_shutdown\", reason: \"quit\" },\n\tbeforeInvalidate?: () => void,\n): Promise<void> {\n\tconst handoff = event.reason !== \"quit\" && hasCallingSessionWork(session);\n\tconst existing = sessionClosures.get(session);\n\tif (existing) return (handoff && sessionRetirements.get(session)) || existing;\n\tlet resolveRetired!: () => void;\n\tlet rejectRetired!: (error: Error) => void;\n\tconst retirement = new Promise<void>((resolve, reject) => {\n\t\tresolveRetired = resolve;\n\t\trejectRetired = reject;\n\t});\n\tconst retired = { promise: retirement, resolve: resolveRetired, reject: rejectRetired };\n\tsession._disposed = true;\n\tsession._cacheWarmer?.cancel();\n\tconst closing = Promise.resolve().then(async () => {\n\t\tconst errors: Error[] = [];\n\t\tconst attempt = async (component: string, cleanup: () => void | Promise<void>) => {\n\t\t\ttry {\n\t\t\t\tawait cleanup();\n\t\t\t} catch (cause) {\n\t\t\t\tif (cause instanceof AggregateError)\n\t\t\t\t\terrors.push(...cause.errors.map((error) => new Error(component, { cause: error })));\n\t\t\t\telse errors.push(new Error(component, { cause }));\n\t\t\t}\n\t\t};\n\t\tawait attempt(\"lifetime\", () => abortSessionWork(session, event.reason === \"quit\"));\n\t\tawait attempt(\"shell abort\", () => abortBash.call(session));\n\t\tawait attempt(\"abort\", () => abortCurrentGeneration.call(session));\n\t\tawait attempt(\"reload rollback\", () => drainSessionReload(session));\n\t\tawait attempt(\"tasks\", () => session.closeSessionTasks());\n\t\tawait attempt(\"summary\", () => session.abortSessionSummary());\n\t\tif (handoff) {\n\t\t\tawait attempt(\"peer work\", () => drainSessionWork(session, true, true));\n\t\t\tawait attempt(\"retired authority\", () => session._extensionRunner.revokeAuthority());\n\t\t\tif (errors.length)\n\t\t\t\tretired.reject(\n\t\t\t\t\tObject.assign(new AggregateError(errors, \"Session retirement failed\"), { code: \"ShutdownFailed\" }),\n\t\t\t\t);\n\t\t\telse retired.resolve();\n\t\t}\n\t\tawait attempt(\"active work\", () => drainSessionWork(session));\n\t\tawait attempt(\"events\", async () => {\n\t\t\tawait session._agentEventQueue.catch(() => {});\n\t\t\tconst failures = shutdownEventFailures.get(session);\n\t\t\tif (failures?.length) throw new AggregateError(failures, \"Session event callbacks failed\");\n\t\t});\n\t\tawait attempt(\"extensions\", async () => {\n\t\t\tawait emitSessionShutdownEvent(session._extensionRunner, event);\n\t\t});\n\t\tawait attempt(\"messages\", () => prepareProtectedStreamingCustomMessagesForDisposal(session));\n\t\tawait attempt(\"shell persistence\", () => session._flushPendingBashMessages());\n\t\tawait attempt(\"settings\", async () => {\n\t\t\tawait session.settingsManager.flush();\n\t\t\tassertSettingsWrites(session);\n\t\t});\n\t\tawait attempt(\"session persistence\", () => session.sessionManager.flushIfStarted());\n\t\tif (ownedSettingsManagers.get(session.settingsManager) === session)\n\t\t\townedSettingsManagers.delete(session.settingsManager);\n\t\tawait attempt(\"host subscriptions\", () => beforeInvalidate?.());\n\t\tawait attempt(\"generation\", () => session._extensionRunner.invalidate(STALE_EXTENSION_CONTEXT_MESSAGE));\n\t\tawait attempt(\"subscriptions\", () => {\n\t\t\tsession._disconnectFromAgent();\n\t\t\tsession._eventListeners = [];\n\t\t});\n\t\tawait attempt(\"provider\", () => cleanupSessionResources(session.sessionId));\n\t\tawait attempt(\"storage\", () => {\n\t\t\tsession._tempStorageLease?.release();\n\t\t\tsession._tempStorageLease = undefined;\n\t\t});\n\t\tif (errors.length)\n\t\t\tthrow Object.assign(new AggregateError(errors, \"Session shutdown failed\"), { code: \"ShutdownFailed\" });\n\t});\n\tsessionClosures.set(session, closing);\n\tif (handoff) {\n\t\tsessionRetirements.set(session, retired.promise);\n\t\tvoid closing.catch(() => {});\n\t}\n\tsession._extensionRunner.sealHostInput();\n\treturn handoff ? retired.promise : closing;\n}\n\nexport function dispose(this: AgentSession): Promise<void> {\n\treturn closeAgentSession(this);\n}\n\n// =========================================================================\n// Read-only State Access\n// =========================================================================\n\n/** Full agent state */\n\nexport const agentSessionEventsMethods = {\n\t_close(this: AgentSession, event: SessionShutdownEvent, beforeInvalidate?: () => void) {\n\t\treturn closeAgentSession(this, event, beforeInvalidate);\n\t},\n\t_emit,\n\t_emitQueueUpdate,\n\t_handleAgentEvent,\n\t_createRetryPromiseForAgentEnd,\n\t_findLastAssistantInMessages,\n\t_processAgentEvent,\n\t_applyInterruptAbortMessage,\n\t_applyProviderErrorGuidance,\n\t_resolveRetry,\n\t_getUserMessageText,\n\t_findLastAssistantMessage,\n\t_replaceMessageInPlace,\n\t_emitExtensionEvent,\n\tsubscribe,\n\t_disconnectFromAgent,\n\tdispose,\n};\n"]}