@jacfrost/autopm 0.0.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 (3030) hide show
  1. package/README.md +149 -0
  2. package/bin/autopm +4 -0
  3. package/docs/autopm-bootstrap.md +327 -0
  4. package/docs/autopm-command-surface.md +73 -0
  5. package/docs/autopm-gsd-pi-architecture.md +125 -0
  6. package/docs/autopm-heartbeat.md +94 -0
  7. package/docs/autopm-local-workspace-contract.md +34 -0
  8. package/docs/autopm-memory-operator-guide.md +301 -0
  9. package/docs/autopm-memory-runtime-contract.md +81 -0
  10. package/docs/autopm-memory-tree.md +142 -0
  11. package/docs/autopm-memory-workspace-contract.md +172 -0
  12. package/docs/autopm-package.md +46 -0
  13. package/docs/autopm-pi-upgrade-runbook.md +58 -0
  14. package/docs/autopm-runtime-context.md +125 -0
  15. package/docs/autopm-runtime-dashboard.md +101 -0
  16. package/docs/opportunities-agentic-workflow-requirements.md +255 -0
  17. package/docs/product-setup.md +112 -0
  18. package/docs/venture-signal.md +437 -0
  19. package/extensions/autopm/extension-manifest.json +98 -0
  20. package/extensions/autopm/index.js +2 -0
  21. package/forks/autopm-pi-mono/packages/coding-agent/dist/bun/cli.d.ts +3 -0
  22. package/forks/autopm-pi-mono/packages/coding-agent/dist/bun/cli.d.ts.map +1 -0
  23. package/forks/autopm-pi-mono/packages/coding-agent/dist/bun/cli.js +9 -0
  24. package/forks/autopm-pi-mono/packages/coding-agent/dist/bun/cli.js.map +1 -0
  25. package/forks/autopm-pi-mono/packages/coding-agent/dist/bun/register-bedrock.d.ts +2 -0
  26. package/forks/autopm-pi-mono/packages/coding-agent/dist/bun/register-bedrock.d.ts.map +1 -0
  27. package/forks/autopm-pi-mono/packages/coding-agent/dist/bun/register-bedrock.js +4 -0
  28. package/forks/autopm-pi-mono/packages/coding-agent/dist/bun/register-bedrock.js.map +1 -0
  29. package/forks/autopm-pi-mono/packages/coding-agent/dist/bun/restore-sandbox-env.d.ts +13 -0
  30. package/forks/autopm-pi-mono/packages/coding-agent/dist/bun/restore-sandbox-env.d.ts.map +1 -0
  31. package/forks/autopm-pi-mono/packages/coding-agent/dist/bun/restore-sandbox-env.js +32 -0
  32. package/forks/autopm-pi-mono/packages/coding-agent/dist/bun/restore-sandbox-env.js.map +1 -0
  33. package/forks/autopm-pi-mono/packages/coding-agent/dist/cli/args.d.ts +53 -0
  34. package/forks/autopm-pi-mono/packages/coding-agent/dist/cli/args.d.ts.map +1 -0
  35. package/forks/autopm-pi-mono/packages/coding-agent/dist/cli/args.js +341 -0
  36. package/forks/autopm-pi-mono/packages/coding-agent/dist/cli/args.js.map +1 -0
  37. package/forks/autopm-pi-mono/packages/coding-agent/dist/cli/config-selector.d.ts +14 -0
  38. package/forks/autopm-pi-mono/packages/coding-agent/dist/cli/config-selector.d.ts.map +1 -0
  39. package/forks/autopm-pi-mono/packages/coding-agent/dist/cli/config-selector.js +31 -0
  40. package/forks/autopm-pi-mono/packages/coding-agent/dist/cli/config-selector.js.map +1 -0
  41. package/forks/autopm-pi-mono/packages/coding-agent/dist/cli/file-processor.d.ts +15 -0
  42. package/forks/autopm-pi-mono/packages/coding-agent/dist/cli/file-processor.d.ts.map +1 -0
  43. package/forks/autopm-pi-mono/packages/coding-agent/dist/cli/file-processor.js +83 -0
  44. package/forks/autopm-pi-mono/packages/coding-agent/dist/cli/file-processor.js.map +1 -0
  45. package/forks/autopm-pi-mono/packages/coding-agent/dist/cli/initial-message.d.ts +18 -0
  46. package/forks/autopm-pi-mono/packages/coding-agent/dist/cli/initial-message.d.ts.map +1 -0
  47. package/forks/autopm-pi-mono/packages/coding-agent/dist/cli/initial-message.js +22 -0
  48. package/forks/autopm-pi-mono/packages/coding-agent/dist/cli/initial-message.js.map +1 -0
  49. package/forks/autopm-pi-mono/packages/coding-agent/dist/cli/list-models.d.ts +9 -0
  50. package/forks/autopm-pi-mono/packages/coding-agent/dist/cli/list-models.d.ts.map +1 -0
  51. package/forks/autopm-pi-mono/packages/coding-agent/dist/cli/list-models.js +98 -0
  52. package/forks/autopm-pi-mono/packages/coding-agent/dist/cli/list-models.js.map +1 -0
  53. package/forks/autopm-pi-mono/packages/coding-agent/dist/cli/session-picker.d.ts +9 -0
  54. package/forks/autopm-pi-mono/packages/coding-agent/dist/cli/session-picker.d.ts.map +1 -0
  55. package/forks/autopm-pi-mono/packages/coding-agent/dist/cli/session-picker.js +35 -0
  56. package/forks/autopm-pi-mono/packages/coding-agent/dist/cli/session-picker.js.map +1 -0
  57. package/forks/autopm-pi-mono/packages/coding-agent/dist/cli.d.ts +3 -0
  58. package/forks/autopm-pi-mono/packages/coding-agent/dist/cli.d.ts.map +1 -0
  59. package/forks/autopm-pi-mono/packages/coding-agent/dist/cli.js +24 -0
  60. package/forks/autopm-pi-mono/packages/coding-agent/dist/cli.js.map +1 -0
  61. package/forks/autopm-pi-mono/packages/coding-agent/dist/config.d.ts +95 -0
  62. package/forks/autopm-pi-mono/packages/coding-agent/dist/config.d.ts.map +1 -0
  63. package/forks/autopm-pi-mono/packages/coding-agent/dist/config.js +427 -0
  64. package/forks/autopm-pi-mono/packages/coding-agent/dist/config.js.map +1 -0
  65. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/agent-session-runtime.d.ts +117 -0
  66. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/agent-session-runtime.d.ts.map +1 -0
  67. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/agent-session-runtime.js +300 -0
  68. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/agent-session-runtime.js.map +1 -0
  69. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/agent-session-services.d.ts +86 -0
  70. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/agent-session-services.d.ts.map +1 -0
  71. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/agent-session-services.js +117 -0
  72. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/agent-session-services.js.map +1 -0
  73. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/agent-session.d.ts +596 -0
  74. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/agent-session.d.ts.map +1 -0
  75. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/agent-session.js +2554 -0
  76. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/agent-session.js.map +1 -0
  77. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/auth-guidance.d.ts +5 -0
  78. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/auth-guidance.d.ts.map +1 -0
  79. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/auth-guidance.js +21 -0
  80. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/auth-guidance.js.map +1 -0
  81. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/auth-storage.d.ts +141 -0
  82. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/auth-storage.d.ts.map +1 -0
  83. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/auth-storage.js +441 -0
  84. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/auth-storage.js.map +1 -0
  85. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/bash-executor.d.ts +32 -0
  86. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/bash-executor.d.ts.map +1 -0
  87. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/bash-executor.js +111 -0
  88. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/bash-executor.js.map +1 -0
  89. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/compaction/branch-summarization.d.ts +88 -0
  90. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/compaction/branch-summarization.d.ts.map +1 -0
  91. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/compaction/branch-summarization.js +243 -0
  92. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/compaction/branch-summarization.js.map +1 -0
  93. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/compaction/compaction.d.ts +121 -0
  94. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/compaction/compaction.d.ts.map +1 -0
  95. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/compaction/compaction.js +625 -0
  96. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/compaction/compaction.js.map +1 -0
  97. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/compaction/index.d.ts +7 -0
  98. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/compaction/index.d.ts.map +1 -0
  99. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/compaction/index.js +7 -0
  100. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/compaction/index.js.map +1 -0
  101. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/compaction/utils.d.ts +38 -0
  102. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/compaction/utils.d.ts.map +1 -0
  103. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/compaction/utils.js +153 -0
  104. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/compaction/utils.js.map +1 -0
  105. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/defaults.d.ts +3 -0
  106. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/defaults.d.ts.map +1 -0
  107. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/defaults.js +2 -0
  108. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/defaults.js.map +1 -0
  109. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/diagnostics.d.ts +15 -0
  110. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/diagnostics.d.ts.map +1 -0
  111. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/diagnostics.js +2 -0
  112. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/diagnostics.js.map +1 -0
  113. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/event-bus.d.ts +9 -0
  114. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/event-bus.d.ts.map +1 -0
  115. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/event-bus.js +25 -0
  116. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/event-bus.js.map +1 -0
  117. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/exec.d.ts +29 -0
  118. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/exec.d.ts.map +1 -0
  119. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/exec.js +75 -0
  120. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/exec.js.map +1 -0
  121. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/export-html/ansi-to-html.d.ts +22 -0
  122. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
  123. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/export-html/ansi-to-html.js +249 -0
  124. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/export-html/ansi-to-html.js.map +1 -0
  125. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/export-html/index.d.ts +37 -0
  126. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/export-html/index.d.ts.map +1 -0
  127. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/export-html/index.js +224 -0
  128. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/export-html/index.js.map +1 -0
  129. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/export-html/template.css +1066 -0
  130. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/export-html/template.html +55 -0
  131. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/export-html/template.js +1834 -0
  132. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/export-html/tool-renderer.d.ts +34 -0
  133. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/export-html/tool-renderer.d.ts.map +1 -0
  134. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/export-html/tool-renderer.js +108 -0
  135. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/export-html/tool-renderer.js.map +1 -0
  136. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/export-html/vendor/highlight.min.js +1213 -0
  137. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/export-html/vendor/marked.min.js +6 -0
  138. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/extensions/index.d.ts +12 -0
  139. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/extensions/index.d.ts.map +1 -0
  140. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/extensions/index.js +9 -0
  141. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/extensions/index.js.map +1 -0
  142. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/extensions/loader.d.ts +24 -0
  143. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/extensions/loader.d.ts.map +1 -0
  144. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/extensions/loader.js +498 -0
  145. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/extensions/loader.js.map +1 -0
  146. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/extensions/runner.d.ts +159 -0
  147. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/extensions/runner.d.ts.map +1 -0
  148. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/extensions/runner.js +830 -0
  149. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/extensions/runner.js.map +1 -0
  150. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/extensions/types.d.ts +1176 -0
  151. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/extensions/types.d.ts.map +1 -0
  152. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/extensions/types.js +45 -0
  153. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/extensions/types.js.map +1 -0
  154. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/extensions/wrapper.d.ts +20 -0
  155. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/extensions/wrapper.d.ts.map +1 -0
  156. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/extensions/wrapper.js +22 -0
  157. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/extensions/wrapper.js.map +1 -0
  158. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/footer-data-provider.d.ts +52 -0
  159. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/footer-data-provider.d.ts.map +1 -0
  160. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/footer-data-provider.js +310 -0
  161. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/footer-data-provider.js.map +1 -0
  162. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/index.d.ts +12 -0
  163. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/index.d.ts.map +1 -0
  164. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/index.js +12 -0
  165. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/index.js.map +1 -0
  166. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/keybindings.d.ts +353 -0
  167. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/keybindings.d.ts.map +1 -0
  168. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/keybindings.js +295 -0
  169. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/keybindings.js.map +1 -0
  170. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/messages.d.ts +77 -0
  171. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/messages.d.ts.map +1 -0
  172. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/messages.js +123 -0
  173. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/messages.js.map +1 -0
  174. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/model-registry.d.ts +150 -0
  175. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/model-registry.d.ts.map +1 -0
  176. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/model-registry.js +728 -0
  177. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/model-registry.js.map +1 -0
  178. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/model-resolver.d.ts +110 -0
  179. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/model-resolver.d.ts.map +1 -0
  180. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/model-resolver.js +495 -0
  181. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/model-resolver.js.map +1 -0
  182. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/output-guard.d.ts +6 -0
  183. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/output-guard.d.ts.map +1 -0
  184. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/output-guard.js +59 -0
  185. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/output-guard.js.map +1 -0
  186. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/package-manager.d.ts +203 -0
  187. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/package-manager.d.ts.map +1 -0
  188. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/package-manager.js +2018 -0
  189. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/package-manager.js.map +1 -0
  190. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/prompt-templates.d.ts +52 -0
  191. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/prompt-templates.d.ts.map +1 -0
  192. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/prompt-templates.js +252 -0
  193. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/prompt-templates.js.map +1 -0
  194. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/provider-display-names.d.ts +2 -0
  195. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/provider-display-names.d.ts.map +1 -0
  196. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/provider-display-names.js +33 -0
  197. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/provider-display-names.js.map +1 -0
  198. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/resolve-config-value.d.ts +23 -0
  199. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/resolve-config-value.d.ts.map +1 -0
  200. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/resolve-config-value.js +126 -0
  201. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/resolve-config-value.js.map +1 -0
  202. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/resource-loader.d.ts +194 -0
  203. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/resource-loader.d.ts.map +1 -0
  204. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/resource-loader.js +727 -0
  205. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/resource-loader.js.map +1 -0
  206. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/sdk.d.ts +107 -0
  207. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/sdk.d.ts.map +1 -0
  208. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/sdk.js +282 -0
  209. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/sdk.js.map +1 -0
  210. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/session-cwd.d.ts +19 -0
  211. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/session-cwd.d.ts.map +1 -0
  212. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/session-cwd.js +38 -0
  213. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/session-cwd.js.map +1 -0
  214. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/session-manager.d.ts +333 -0
  215. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/session-manager.d.ts.map +1 -0
  216. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/session-manager.js +1139 -0
  217. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/session-manager.js.map +1 -0
  218. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/settings-manager.d.ts +261 -0
  219. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/settings-manager.d.ts.map +1 -0
  220. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/settings-manager.js +782 -0
  221. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/settings-manager.js.map +1 -0
  222. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/skills.d.ts +60 -0
  223. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/skills.d.ts.map +1 -0
  224. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/skills.js +401 -0
  225. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/skills.js.map +1 -0
  226. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/slash-commands.d.ts +14 -0
  227. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/slash-commands.d.ts.map +1 -0
  228. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/slash-commands.js +25 -0
  229. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/slash-commands.js.map +1 -0
  230. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/source-info.d.ts +18 -0
  231. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/source-info.d.ts.map +1 -0
  232. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/source-info.js +19 -0
  233. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/source-info.js.map +1 -0
  234. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/system-prompt.d.ts +28 -0
  235. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/system-prompt.d.ts.map +1 -0
  236. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/system-prompt.js +121 -0
  237. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/system-prompt.js.map +1 -0
  238. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/telemetry.d.ts +3 -0
  239. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/telemetry.d.ts.map +1 -0
  240. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/telemetry.js +9 -0
  241. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/telemetry.js.map +1 -0
  242. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/timings.d.ts +8 -0
  243. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/timings.d.ts.map +1 -0
  244. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/timings.js +31 -0
  245. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/timings.js.map +1 -0
  246. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/bash.d.ts +68 -0
  247. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/bash.d.ts.map +1 -0
  248. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/bash.js +364 -0
  249. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/bash.js.map +1 -0
  250. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/edit-diff.d.ts +85 -0
  251. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/edit-diff.d.ts.map +1 -0
  252. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/edit-diff.js +338 -0
  253. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/edit-diff.js.map +1 -0
  254. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/edit.d.ts +49 -0
  255. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/edit.d.ts.map +1 -0
  256. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/edit.js +310 -0
  257. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/edit.js.map +1 -0
  258. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/file-mutation-queue.d.ts +6 -0
  259. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/file-mutation-queue.d.ts.map +1 -0
  260. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/file-mutation-queue.js +37 -0
  261. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/file-mutation-queue.js.map +1 -0
  262. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/find.d.ts +35 -0
  263. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/find.d.ts.map +1 -0
  264. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/find.js +298 -0
  265. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/find.js.map +1 -0
  266. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/grep.d.ts +37 -0
  267. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/grep.d.ts.map +1 -0
  268. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/grep.js +304 -0
  269. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/grep.js.map +1 -0
  270. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/index.d.ts +40 -0
  271. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/index.d.ts.map +1 -0
  272. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/index.js +112 -0
  273. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/index.js.map +1 -0
  274. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/ls.d.ts +37 -0
  275. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/ls.d.ts.map +1 -0
  276. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/ls.js +169 -0
  277. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/ls.js.map +1 -0
  278. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/output-accumulator.d.ts +50 -0
  279. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/output-accumulator.d.ts.map +1 -0
  280. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/output-accumulator.js +178 -0
  281. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/output-accumulator.js.map +1 -0
  282. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/path-utils.d.ts +8 -0
  283. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/path-utils.d.ts.map +1 -0
  284. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/path-utils.js +81 -0
  285. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/path-utils.js.map +1 -0
  286. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/read.d.ts +35 -0
  287. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/read.d.ts.map +1 -0
  288. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/read.js +286 -0
  289. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/read.js.map +1 -0
  290. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/render-utils.d.ts +21 -0
  291. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/render-utils.d.ts.map +1 -0
  292. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/render-utils.js +49 -0
  293. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/render-utils.js.map +1 -0
  294. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
  295. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
  296. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/tool-definition-wrapper.js +34 -0
  297. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/tool-definition-wrapper.js.map +1 -0
  298. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/truncate.d.ts +70 -0
  299. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/truncate.d.ts.map +1 -0
  300. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/truncate.js +205 -0
  301. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/truncate.js.map +1 -0
  302. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/write.d.ts +26 -0
  303. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/write.d.ts.map +1 -0
  304. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/write.js +213 -0
  305. package/forks/autopm-pi-mono/packages/coding-agent/dist/core/tools/write.js.map +1 -0
  306. package/forks/autopm-pi-mono/packages/coding-agent/dist/index.d.ts +28 -0
  307. package/forks/autopm-pi-mono/packages/coding-agent/dist/index.d.ts.map +1 -0
  308. package/forks/autopm-pi-mono/packages/coding-agent/dist/index.js +41 -0
  309. package/forks/autopm-pi-mono/packages/coding-agent/dist/index.js.map +1 -0
  310. package/forks/autopm-pi-mono/packages/coding-agent/dist/main.d.ts +12 -0
  311. package/forks/autopm-pi-mono/packages/coding-agent/dist/main.d.ts.map +1 -0
  312. package/forks/autopm-pi-mono/packages/coding-agent/dist/main.js +577 -0
  313. package/forks/autopm-pi-mono/packages/coding-agent/dist/main.js.map +1 -0
  314. package/forks/autopm-pi-mono/packages/coding-agent/dist/migrations.d.ts +33 -0
  315. package/forks/autopm-pi-mono/packages/coding-agent/dist/migrations.d.ts.map +1 -0
  316. package/forks/autopm-pi-mono/packages/coding-agent/dist/migrations.js +281 -0
  317. package/forks/autopm-pi-mono/packages/coding-agent/dist/migrations.js.map +1 -0
  318. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/index.d.ts +9 -0
  319. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/index.d.ts.map +1 -0
  320. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/index.js +8 -0
  321. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/index.js.map +1 -0
  322. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/assets/clankolas.png +0 -0
  323. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/armin.d.ts +34 -0
  324. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/armin.d.ts.map +1 -0
  325. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/armin.js +333 -0
  326. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/armin.js.map +1 -0
  327. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/assistant-message.d.ts +20 -0
  328. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
  329. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/assistant-message.js +121 -0
  330. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/assistant-message.js.map +1 -0
  331. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/bash-execution.d.ts +34 -0
  332. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
  333. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/bash-execution.js +175 -0
  334. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/bash-execution.js.map +1 -0
  335. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
  336. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
  337. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/bordered-loader.js +54 -0
  338. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/bordered-loader.js.map +1 -0
  339. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/bottom-anchor-spacer.js +24 -0
  340. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
  341. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
  342. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/branch-summary-message.js +44 -0
  343. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
  344. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
  345. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
  346. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/compaction-summary-message.js +45 -0
  347. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
  348. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/config-selector.d.ts +71 -0
  349. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
  350. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/config-selector.js +506 -0
  351. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/config-selector.js.map +1 -0
  352. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
  353. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
  354. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/countdown-timer.js +33 -0
  355. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/countdown-timer.js.map +1 -0
  356. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/custom-editor.d.ts +21 -0
  357. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
  358. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/custom-editor.js +70 -0
  359. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/custom-editor.js.map +1 -0
  360. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/custom-message.d.ts +20 -0
  361. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
  362. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/custom-message.js +79 -0
  363. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/custom-message.js.map +1 -0
  364. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/daxnuts.d.ts +23 -0
  365. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/daxnuts.d.ts.map +1 -0
  366. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/daxnuts.js +140 -0
  367. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/daxnuts.js.map +1 -0
  368. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/diff.d.ts +12 -0
  369. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/diff.d.ts.map +1 -0
  370. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/diff.js +133 -0
  371. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/diff.js.map +1 -0
  372. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
  373. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
  374. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/dynamic-border.js +21 -0
  375. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/dynamic-border.js.map +1 -0
  376. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/earendil-announcement.d.ts +5 -0
  377. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -0
  378. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/earendil-announcement.js +40 -0
  379. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/earendil-announcement.js.map +1 -0
  380. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/extension-editor.d.ts +20 -0
  381. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
  382. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/extension-editor.js +119 -0
  383. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/extension-editor.js.map +1 -0
  384. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/extension-input.d.ts +23 -0
  385. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
  386. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/extension-input.js +61 -0
  387. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/extension-input.js.map +1 -0
  388. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/extension-selector.d.ts +26 -0
  389. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
  390. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/extension-selector.js +83 -0
  391. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/extension-selector.js.map +1 -0
  392. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/footer.d.ts +26 -0
  393. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -0
  394. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/footer.js +133 -0
  395. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/footer.js.map +1 -0
  396. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/index.d.ts +32 -0
  397. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/index.d.ts.map +1 -0
  398. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/index.js +33 -0
  399. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/index.js.map +1 -0
  400. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/keybinding-hints.d.ts +13 -0
  401. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
  402. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/keybinding-hints.js +36 -0
  403. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
  404. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/login-dialog.d.ts +46 -0
  405. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
  406. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/login-dialog.js +160 -0
  407. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/login-dialog.js.map +1 -0
  408. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/model-selector.d.ts +47 -0
  409. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
  410. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/model-selector.js +278 -0
  411. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/model-selector.js.map +1 -0
  412. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/oauth-selector.d.ts +31 -0
  413. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
  414. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/oauth-selector.js +165 -0
  415. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/oauth-selector.js.map +1 -0
  416. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/scoped-models-selector.d.ts +42 -0
  417. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
  418. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/scoped-models-selector.js +290 -0
  419. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
  420. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
  421. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
  422. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/session-selector-search.js +155 -0
  423. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/session-selector-search.js.map +1 -0
  424. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/session-selector.d.ts +96 -0
  425. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
  426. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/session-selector.js +861 -0
  427. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/session-selector.js.map +1 -0
  428. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/settings-selector.d.ts +67 -0
  429. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
  430. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/settings-selector.js +375 -0
  431. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -0
  432. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  433. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
  434. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/show-images-selector.js +39 -0
  435. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/show-images-selector.js.map +1 -0
  436. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
  437. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
  438. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/skill-invocation-message.js +47 -0
  439. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
  440. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  441. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
  442. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/theme-selector.js +50 -0
  443. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/theme-selector.js.map +1 -0
  444. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
  445. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
  446. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/thinking-selector.js +51 -0
  447. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/thinking-selector.js.map +1 -0
  448. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/tool-execution.d.ts +63 -0
  449. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
  450. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/tool-execution.js +407 -0
  451. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -0
  452. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/tree-selector.d.ts +89 -0
  453. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
  454. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/tree-selector.js +1093 -0
  455. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/tree-selector.js.map +1 -0
  456. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
  457. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
  458. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/user-message-selector.js +114 -0
  459. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/user-message-selector.js.map +1 -0
  460. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/user-message.d.ts +10 -0
  461. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/user-message.d.ts.map +1 -0
  462. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/user-message.js +29 -0
  463. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/user-message.js.map +1 -0
  464. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
  465. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
  466. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/visual-truncate.js +33 -0
  467. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/components/visual-truncate.js.map +1 -0
  468. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/interactive-mode.d.ts +369 -0
  469. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
  470. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/interactive-mode.js +4662 -0
  471. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -0
  472. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/theme/dark.json +85 -0
  473. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/theme/light.json +84 -0
  474. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/theme/theme-schema.json +335 -0
  475. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/theme/theme.d.ts +81 -0
  476. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -0
  477. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/theme/theme.js +1062 -0
  478. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/interactive/theme/theme.js.map +1 -0
  479. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/print-mode.d.ts +28 -0
  480. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/print-mode.d.ts.map +1 -0
  481. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/print-mode.js +131 -0
  482. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/print-mode.js.map +1 -0
  483. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/rpc/jsonl.d.ts +17 -0
  484. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/rpc/jsonl.d.ts.map +1 -0
  485. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/rpc/jsonl.js +49 -0
  486. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/rpc/jsonl.js.map +1 -0
  487. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/rpc/rpc-client.d.ts +224 -0
  488. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/rpc/rpc-client.d.ts.map +1 -0
  489. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/rpc/rpc-client.js +410 -0
  490. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/rpc/rpc-client.js.map +1 -0
  491. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/rpc/rpc-mode.d.ts +20 -0
  492. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
  493. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/rpc/rpc-mode.js +601 -0
  494. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -0
  495. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/rpc/rpc-types.d.ts +419 -0
  496. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/rpc/rpc-types.d.ts.map +1 -0
  497. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/rpc/rpc-types.js +8 -0
  498. package/forks/autopm-pi-mono/packages/coding-agent/dist/modes/rpc/rpc-types.js.map +1 -0
  499. package/forks/autopm-pi-mono/packages/coding-agent/dist/package-manager-cli.d.ts +4 -0
  500. package/forks/autopm-pi-mono/packages/coding-agent/dist/package-manager-cli.d.ts.map +1 -0
  501. package/forks/autopm-pi-mono/packages/coding-agent/dist/package-manager-cli.js +476 -0
  502. package/forks/autopm-pi-mono/packages/coding-agent/dist/package-manager-cli.js.map +1 -0
  503. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/ansi.d.ts +2 -0
  504. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/ansi.d.ts.map +1 -0
  505. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/ansi.js +52 -0
  506. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/ansi.js.map +1 -0
  507. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/changelog.d.ts +21 -0
  508. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/changelog.d.ts.map +1 -0
  509. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/changelog.js +87 -0
  510. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/changelog.js.map +1 -0
  511. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/child-process.d.ts +15 -0
  512. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/child-process.d.ts.map +1 -0
  513. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/child-process.js +88 -0
  514. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/child-process.js.map +1 -0
  515. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/clipboard-image.d.ts +11 -0
  516. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/clipboard-image.d.ts.map +1 -0
  517. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/clipboard-image.js +245 -0
  518. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/clipboard-image.js.map +1 -0
  519. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/clipboard-native.d.ts +8 -0
  520. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/clipboard-native.d.ts.map +1 -0
  521. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/clipboard-native.js +14 -0
  522. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/clipboard-native.js.map +1 -0
  523. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/clipboard.d.ts +2 -0
  524. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/clipboard.d.ts.map +1 -0
  525. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/clipboard.js +117 -0
  526. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/clipboard.js.map +1 -0
  527. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/exif-orientation.d.ts +5 -0
  528. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/exif-orientation.d.ts.map +1 -0
  529. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/exif-orientation.js +158 -0
  530. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/exif-orientation.js.map +1 -0
  531. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/frontmatter.d.ts +8 -0
  532. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/frontmatter.d.ts.map +1 -0
  533. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/frontmatter.js +26 -0
  534. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/frontmatter.js.map +1 -0
  535. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/fs-watch.d.ts +5 -0
  536. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/fs-watch.d.ts.map +1 -0
  537. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/fs-watch.js +25 -0
  538. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/fs-watch.js.map +1 -0
  539. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/git.d.ts +26 -0
  540. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/git.d.ts.map +1 -0
  541. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/git.js +163 -0
  542. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/git.js.map +1 -0
  543. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/html.d.ts +7 -0
  544. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/html.d.ts.map +1 -0
  545. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/html.js +40 -0
  546. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/html.js.map +1 -0
  547. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/image-convert.d.ts +9 -0
  548. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/image-convert.d.ts.map +1 -0
  549. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/image-convert.js +39 -0
  550. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/image-convert.js.map +1 -0
  551. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/image-resize.d.ts +36 -0
  552. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/image-resize.d.ts.map +1 -0
  553. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/image-resize.js +137 -0
  554. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/image-resize.js.map +1 -0
  555. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/mime.d.ts +3 -0
  556. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/mime.d.ts.map +1 -0
  557. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/mime.js +69 -0
  558. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/mime.js.map +1 -0
  559. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/paths.d.ts +16 -0
  560. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/paths.d.ts.map +1 -0
  561. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/paths.js +50 -0
  562. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/paths.js.map +1 -0
  563. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/photon.d.ts +21 -0
  564. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/photon.d.ts.map +1 -0
  565. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/photon.js +121 -0
  566. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/photon.js.map +1 -0
  567. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/pi-user-agent.d.ts +2 -0
  568. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/pi-user-agent.d.ts.map +1 -0
  569. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/pi-user-agent.js +5 -0
  570. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/pi-user-agent.js.map +1 -0
  571. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/shell.d.ts +30 -0
  572. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/shell.d.ts.map +1 -0
  573. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/shell.js +190 -0
  574. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/shell.js.map +1 -0
  575. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/sleep.d.ts +5 -0
  576. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/sleep.d.ts.map +1 -0
  577. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/sleep.js +17 -0
  578. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/sleep.js.map +1 -0
  579. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/syntax-highlight.d.ts +12 -0
  580. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/syntax-highlight.d.ts.map +1 -0
  581. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/syntax-highlight.js +118 -0
  582. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/syntax-highlight.js.map +1 -0
  583. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/tools-manager.d.ts +3 -0
  584. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/tools-manager.d.ts.map +1 -0
  585. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/tools-manager.js +328 -0
  586. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/tools-manager.js.map +1 -0
  587. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/version-check.d.ts +14 -0
  588. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/version-check.d.ts.map +1 -0
  589. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/version-check.js +77 -0
  590. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/version-check.js.map +1 -0
  591. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/windows-self-update.d.ts +3 -0
  592. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/windows-self-update.d.ts.map +1 -0
  593. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/windows-self-update.js +77 -0
  594. package/forks/autopm-pi-mono/packages/coding-agent/dist/utils/windows-self-update.js.map +1 -0
  595. package/node_modules/@mixmark-io/domino/.gitmodules +6 -0
  596. package/node_modules/@mixmark-io/domino/.mocharc.json +8 -0
  597. package/node_modules/@mixmark-io/domino/.nvmrc +1 -0
  598. package/node_modules/@mixmark-io/domino/.yarn/plugins/@yarnpkg/plugin-version.cjs +550 -0
  599. package/node_modules/@mixmark-io/domino/.yarn/versions/78b6ef77.yml +0 -0
  600. package/node_modules/@mixmark-io/domino/CHANGELOG.md +294 -0
  601. package/node_modules/@mixmark-io/domino/CONTRIBUTING.md +4 -0
  602. package/node_modules/@mixmark-io/domino/LICENSE +25 -0
  603. package/node_modules/@mixmark-io/domino/README.md +141 -0
  604. package/node_modules/@mixmark-io/domino/lib/CSSStyleDeclaration.js +234 -0
  605. package/node_modules/@mixmark-io/domino/lib/CharacterData.js +120 -0
  606. package/node_modules/@mixmark-io/domino/lib/ChildNode.js +119 -0
  607. package/node_modules/@mixmark-io/domino/lib/Comment.js +40 -0
  608. package/node_modules/@mixmark-io/domino/lib/ContainerNode.js +80 -0
  609. package/node_modules/@mixmark-io/domino/lib/CustomEvent.js +12 -0
  610. package/node_modules/@mixmark-io/domino/lib/DOMException.js +134 -0
  611. package/node_modules/@mixmark-io/domino/lib/DOMImplementation.js +94 -0
  612. package/node_modules/@mixmark-io/domino/lib/DOMTokenList.js +186 -0
  613. package/node_modules/@mixmark-io/domino/lib/Document.js +884 -0
  614. package/node_modules/@mixmark-io/domino/lib/DocumentFragment.js +71 -0
  615. package/node_modules/@mixmark-io/domino/lib/DocumentType.js +36 -0
  616. package/node_modules/@mixmark-io/domino/lib/Element.js +1228 -0
  617. package/node_modules/@mixmark-io/domino/lib/Event.js +66 -0
  618. package/node_modules/@mixmark-io/domino/lib/EventTarget.js +298 -0
  619. package/node_modules/@mixmark-io/domino/lib/FilteredElementList.js +92 -0
  620. package/node_modules/@mixmark-io/domino/lib/HTMLParser.js +7254 -0
  621. package/node_modules/@mixmark-io/domino/lib/Leaf.js +37 -0
  622. package/node_modules/@mixmark-io/domino/lib/LinkedList.js +44 -0
  623. package/node_modules/@mixmark-io/domino/lib/Location.js +56 -0
  624. package/node_modules/@mixmark-io/domino/lib/MouseEvent.js +52 -0
  625. package/node_modules/@mixmark-io/domino/lib/MutationConstants.js +9 -0
  626. package/node_modules/@mixmark-io/domino/lib/NamedNodeMap.js +41 -0
  627. package/node_modules/@mixmark-io/domino/lib/NavigatorID.js +17 -0
  628. package/node_modules/@mixmark-io/domino/lib/Node.js +764 -0
  629. package/node_modules/@mixmark-io/domino/lib/NodeFilter.js +24 -0
  630. package/node_modules/@mixmark-io/domino/lib/NodeIterator.js +217 -0
  631. package/node_modules/@mixmark-io/domino/lib/NodeList.es5.js +15 -0
  632. package/node_modules/@mixmark-io/domino/lib/NodeList.es6.js +12 -0
  633. package/node_modules/@mixmark-io/domino/lib/NodeList.js +13 -0
  634. package/node_modules/@mixmark-io/domino/lib/NodeTraversal.js +87 -0
  635. package/node_modules/@mixmark-io/domino/lib/NodeUtils.js +246 -0
  636. package/node_modules/@mixmark-io/domino/lib/NonDocumentTypeChildNode.js +26 -0
  637. package/node_modules/@mixmark-io/domino/lib/ProcessingInstruction.js +44 -0
  638. package/node_modules/@mixmark-io/domino/lib/Text.js +75 -0
  639. package/node_modules/@mixmark-io/domino/lib/TreeWalker.js +336 -0
  640. package/node_modules/@mixmark-io/domino/lib/UIEvent.js +19 -0
  641. package/node_modules/@mixmark-io/domino/lib/URL.js +194 -0
  642. package/node_modules/@mixmark-io/domino/lib/URLUtils.js +270 -0
  643. package/node_modules/@mixmark-io/domino/lib/Window.js +60 -0
  644. package/node_modules/@mixmark-io/domino/lib/WindowTimers.js +11 -0
  645. package/node_modules/@mixmark-io/domino/lib/attributes.js +152 -0
  646. package/node_modules/@mixmark-io/domino/lib/config.js +7 -0
  647. package/node_modules/@mixmark-io/domino/lib/defineElement.js +71 -0
  648. package/node_modules/@mixmark-io/domino/lib/events.js +7 -0
  649. package/node_modules/@mixmark-io/domino/lib/htmlelts.js +1499 -0
  650. package/node_modules/@mixmark-io/domino/lib/impl.js +27 -0
  651. package/node_modules/@mixmark-io/domino/lib/index.d.ts +5 -0
  652. package/node_modules/@mixmark-io/domino/lib/index.js +80 -0
  653. package/node_modules/@mixmark-io/domino/lib/select.js +933 -0
  654. package/node_modules/@mixmark-io/domino/lib/style_parser.js +106 -0
  655. package/node_modules/@mixmark-io/domino/lib/svg.js +59 -0
  656. package/node_modules/@mixmark-io/domino/lib/utils.js +85 -0
  657. package/node_modules/@mixmark-io/domino/lib/xmlnames.js +91 -0
  658. package/node_modules/@mixmark-io/domino/package.json +22 -0
  659. package/node_modules/@mixmark-io/domino/test/domino.js +1500 -0
  660. package/node_modules/@mixmark-io/domino/test/fixture/doc.html +13 -0
  661. package/node_modules/@mixmark-io/domino/test/fixture/jquery-1.9.1.js +9597 -0
  662. package/node_modules/@mixmark-io/domino/test/fixture/jquery-2.2.0.js +9831 -0
  663. package/node_modules/@mixmark-io/domino/test/html5lib-tests.json +80692 -0
  664. package/node_modules/@mixmark-io/domino/test/index.js +2 -0
  665. package/node_modules/@mixmark-io/domino/test/parsing.js +66 -0
  666. package/node_modules/@mixmark-io/domino/test/tools/update-entities.js +90 -0
  667. package/node_modules/@mixmark-io/domino/test/tools/update-html5lib-tests.js +355 -0
  668. package/node_modules/@mixmark-io/domino/test/w3c/README.md +13 -0
  669. package/node_modules/@mixmark-io/domino/test/w3c/harness/DomTestCase.js +438 -0
  670. package/node_modules/@mixmark-io/domino/test/w3c/harness/index.js +95 -0
  671. package/node_modules/@mixmark-io/domino/test/w3c/index.js +12 -0
  672. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/documentgetdoctypenodtd.js +110 -0
  673. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/documentinvalidcharacterexceptioncreatepi.js +143 -0
  674. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/documentinvalidcharacterexceptioncreatepi1.js +140 -0
  675. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/files/.cvsignore +0 -0
  676. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/files/hc_nodtdstaff.html +10 -0
  677. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/files/hc_staff.html +48 -0
  678. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/files/staff.dtd +17 -0
  679. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_characterdataappenddata.js +124 -0
  680. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_characterdataappenddatagetdata.js +123 -0
  681. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_characterdatadeletedatabegining.js +122 -0
  682. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_characterdatadeletedataend.js +123 -0
  683. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_characterdatadeletedataexceedslength.js +125 -0
  684. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_characterdatadeletedatagetlengthanddata.js +132 -0
  685. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_characterdatadeletedatamiddle.js +123 -0
  686. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_characterdatagetdata.js +124 -0
  687. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_characterdatagetlength.js +119 -0
  688. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_characterdataindexsizeerrdeletedatacountnegative.js +131 -0
  689. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_characterdataindexsizeerrdeletedataoffsetgreater.js +131 -0
  690. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_characterdataindexsizeerrdeletedataoffsetnegative.js +130 -0
  691. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_characterdataindexsizeerrinsertdataoffsetgreater.js +130 -0
  692. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_characterdataindexsizeerrinsertdataoffsetnegative.js +129 -0
  693. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_characterdataindexsizeerrreplacedatacountnegative.js +132 -0
  694. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_characterdataindexsizeerrreplacedataoffsetgreater.js +131 -0
  695. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_characterdataindexsizeerrreplacedataoffsetnegative.js +131 -0
  696. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_characterdataindexsizeerrsubstringcountnegative.js +131 -0
  697. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_characterdataindexsizeerrsubstringnegativeoffset.js +130 -0
  698. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_characterdataindexsizeerrsubstringoffsetgreater.js +131 -0
  699. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_characterdatainsertdatabeginning.js +122 -0
  700. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_characterdatainsertdataend.js +123 -0
  701. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_characterdatainsertdatamiddle.js +123 -0
  702. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_characterdatareplacedatabegining.js +122 -0
  703. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_characterdatareplacedataend.js +123 -0
  704. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_characterdatareplacedataexceedslengthofarg.js +124 -0
  705. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_characterdatareplacedataexceedslengthofdata.js +122 -0
  706. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_characterdatareplacedatamiddle.js +123 -0
  707. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_characterdatasetnodevalue.js +122 -0
  708. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_characterdatasubstringexceedsvalue.js +120 -0
  709. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_characterdatasubstringvalue.js +119 -0
  710. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_commentgetcomment.js +144 -0
  711. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_documentcreatecomment.js +120 -0
  712. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_documentcreatedocumentfragment.js +126 -0
  713. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_documentcreateelement.js +121 -0
  714. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_documentcreateelementcasesensitive.js +132 -0
  715. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_documentcreatetextnode.js +120 -0
  716. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_documentgetdoctype.js +149 -0
  717. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_documentgetelementsbytagnamelength.js +110 -0
  718. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_documentgetelementsbytagnametotallength.js +221 -0
  719. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_documentgetelementsbytagnamevalue.js +120 -0
  720. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_documentgetimplementation.js +126 -0
  721. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_documentgetrootnode.js +123 -0
  722. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_documentinvalidcharacterexceptioncreateelement.js +124 -0
  723. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_documentinvalidcharacterexceptioncreateelement1.js +117 -0
  724. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_domimplementationfeaturenoversion.js +126 -0
  725. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_domimplementationfeaturenull.js +129 -0
  726. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_domimplementationfeaturexml.js +125 -0
  727. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_elementaddnewattribute.js +117 -0
  728. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_elementchangeattributevalue.js +119 -0
  729. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_elementgetelementsbytagname.js +112 -0
  730. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_elementgetelementsbytagnameaccessnodelist.js +144 -0
  731. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_elementgetelementsbytagnamenomatch.js +110 -0
  732. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_elementgetelementsbytagnamespecialvalue.js +134 -0
  733. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_elementgettagname.js +123 -0
  734. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_elementinvalidcharacterexception.js +125 -0
  735. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_elementinvalidcharacterexception1.js +119 -0
  736. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_elementnormalize.js +126 -0
  737. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_elementremoveattribute.js +113 -0
  738. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_elementretrieveallattributes.js +144 -0
  739. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_elementretrieveattrvalue.js +113 -0
  740. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_elementretrievetagname.js +118 -0
  741. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_entitiesremovenameditem1.js +133 -0
  742. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_entitiessetnameditem1.js +144 -0
  743. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_namednodemapchildnoderange.js +141 -0
  744. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_namednodemapnumberofnodes.js +127 -0
  745. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodeappendchild.js +123 -0
  746. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodeappendchildchildexists.js +160 -0
  747. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodeappendchilddocfragment.js +158 -0
  748. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodeappendchildgetnodename.js +123 -0
  749. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodeappendchildnewchilddiffdocument.js +145 -0
  750. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodeappendchildnodeancestor.js +132 -0
  751. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodeattributenodeattribute.js +120 -0
  752. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodechildnodes.js +149 -0
  753. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodechildnodesappendchild.js +159 -0
  754. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodechildnodesempty.js +123 -0
  755. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodecloneattributescopied.js +149 -0
  756. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodeclonefalsenocopytext.js +122 -0
  757. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodeclonegetparentnull.js +117 -0
  758. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodeclonenodefalse.js +126 -0
  759. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodeclonenodetrue.js +145 -0
  760. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodeclonetruecopytext.js +121 -0
  761. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodecommentnodeattributes.js +135 -0
  762. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodecommentnodename.js +134 -0
  763. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodecommentnodetype.js +133 -0
  764. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodecommentnodevalue.js +133 -0
  765. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodedocumentfragmentnodename.js +114 -0
  766. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodedocumentfragmentnodetype.js +114 -0
  767. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodedocumentfragmentnodevalue.js +120 -0
  768. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodedocumentnodeattribute.js +111 -0
  769. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodedocumentnodename.js +111 -0
  770. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodedocumentnodetype.js +110 -0
  771. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodedocumentnodevalue.js +112 -0
  772. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodeelementnodeattributes.js +145 -0
  773. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodeelementnodename.js +125 -0
  774. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodeelementnodetype.js +112 -0
  775. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodeelementnodevalue.js +109 -0
  776. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodegetfirstchild.js +130 -0
  777. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodegetfirstchildnull.js +117 -0
  778. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodegetlastchild.js +117 -0
  779. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodegetlastchildnull.js +118 -0
  780. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodegetnextsibling.js +117 -0
  781. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodegetnextsiblingnull.js +124 -0
  782. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodegetownerdocument.js +129 -0
  783. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodegetownerdocumentnull.js +115 -0
  784. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodegetprevioussibling.js +117 -0
  785. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodegetprevioussiblingnull.js +124 -0
  786. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodehaschildnodes.js +113 -0
  787. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodehaschildnodesfalse.js +117 -0
  788. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodeinsertbefore.js +153 -0
  789. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodeinsertbeforedocfragment.js +141 -0
  790. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodeinsertbeforenewchilddiffdocument.js +148 -0
  791. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodeinsertbeforenewchildexists.js +151 -0
  792. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodeinsertbeforenodeancestor.js +135 -0
  793. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodeinsertbeforenodename.js +126 -0
  794. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodeinsertbeforerefchildnonexistent.js +133 -0
  795. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodeinsertbeforerefchildnull.js +131 -0
  796. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodelistindexequalzero.js +135 -0
  797. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodelistindexgetlength.js +129 -0
  798. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodelistindexgetlengthofemptylist.js +122 -0
  799. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodelistindexnotzero.js +133 -0
  800. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodelistreturnfirstitem.js +129 -0
  801. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodelistreturnlastitem.js +133 -0
  802. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodelisttraverselist.js +149 -0
  803. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodeparentnode.js +117 -0
  804. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodeparentnodenull.js +114 -0
  805. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_noderemovechild.js +123 -0
  806. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_noderemovechildgetnodename.js +128 -0
  807. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_noderemovechildnode.js +160 -0
  808. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_noderemovechildoldchildnonexistent.js +129 -0
  809. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodereplacechild.js +127 -0
  810. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodereplacechildnewchilddiffdocument.js +148 -0
  811. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodereplacechildnewchildexists.js +155 -0
  812. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodereplacechildnodeancestor.js +135 -0
  813. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodereplacechildnodename.js +126 -0
  814. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodereplacechildoldchildnonexistent.js +131 -0
  815. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodetextnodeattribute.js +118 -0
  816. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodetextnodename.js +113 -0
  817. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodetextnodetype.js +124 -0
  818. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodetextnodevalue.js +118 -0
  819. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodevalue01.js +114 -0
  820. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodevalue02.js +114 -0
  821. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodevalue04.js +132 -0
  822. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodevalue05.js +114 -0
  823. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodevalue06.js +112 -0
  824. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodevalue07.js +134 -0
  825. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_nodevalue08.js +134 -0
  826. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_notationsremovenameditem1.js +133 -0
  827. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_notationssetnameditem1.js +144 -0
  828. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_textindexsizeerrnegativeoffset.js +130 -0
  829. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_textindexsizeerroffsetoutofbounds.js +131 -0
  830. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_textparseintolistofelements.js +169 -0
  831. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_textsplittextfour.js +122 -0
  832. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_textsplittextone.js +126 -0
  833. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_textsplittextthree.js +124 -0
  834. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_textsplittexttwo.js +123 -0
  835. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/hc_textwithnomarkup.js +122 -0
  836. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/documentinvalidcharacterexceptioncreateentref.js +143 -0
  837. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/documentinvalidcharacterexceptioncreateentref1.js +140 -0
  838. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrappendchild1.js +132 -0
  839. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrappendchild2.js +127 -0
  840. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrappendchild3.js +138 -0
  841. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrappendchild4.js +152 -0
  842. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrappendchild5.js +141 -0
  843. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrappendchild6.js +127 -0
  844. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrchildnodes1.js +124 -0
  845. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrchildnodes2.js +130 -0
  846. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrclonenode1.js +132 -0
  847. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrcreatedocumentfragment.js +138 -0
  848. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrcreatetextnode.js +127 -0
  849. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrcreatetextnode2.js +127 -0
  850. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attreffectivevalue.js +118 -0
  851. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrfirstchild.js +127 -0
  852. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrgetvalue1.js +117 -0
  853. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrgetvalue2.js +146 -0
  854. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrhaschildnodes.js +114 -0
  855. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrinsertbefore1.js +140 -0
  856. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrinsertbefore2.js +141 -0
  857. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrinsertbefore3.js +146 -0
  858. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrinsertbefore4.js +147 -0
  859. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrinsertbefore5.js +153 -0
  860. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrinsertbefore6.js +142 -0
  861. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrinsertbefore7.js +160 -0
  862. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrlastchild.js +127 -0
  863. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrname.js +123 -0
  864. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrnextsiblingnull.js +118 -0
  865. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrnormalize.js +133 -0
  866. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrparentnodenull.js +118 -0
  867. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrprevioussiblingnull.js +118 -0
  868. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrremovechild1.js +131 -0
  869. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrremovechild2.js +126 -0
  870. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrreplacechild1.js +135 -0
  871. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrreplacechild2.js +141 -0
  872. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrsetvalue1.js +135 -0
  873. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrsetvalue2.js +138 -0
  874. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrspecifiedvalue.js +121 -0
  875. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_attrspecifiedvaluechanged.js +123 -0
  876. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_documentcreateattribute.js +122 -0
  877. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_documentinvalidcharacterexceptioncreateattribute.js +124 -0
  878. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_documentinvalidcharacterexceptioncreateattribute1.js +117 -0
  879. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_elementassociatedattribute.js +119 -0
  880. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_elementcreatenewattribute.js +124 -0
  881. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_elementgetattributenode.js +114 -0
  882. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_elementgetattributenodenull.js +115 -0
  883. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_elementgetelementempty.js +123 -0
  884. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_elementinuseattributeerr.js +131 -0
  885. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_elementnormalize2.js +129 -0
  886. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_elementnotfounderr.js +130 -0
  887. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_elementremoveattributeaftercreate.js +124 -0
  888. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_elementremoveattributenode.js +119 -0
  889. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_elementreplaceattributewithself.js +117 -0
  890. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_elementreplaceexistingattribute.js +122 -0
  891. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_elementreplaceexistingattributegevalue.js +123 -0
  892. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_elementsetattributenodenull.js +120 -0
  893. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_elementwrongdocumenterr.js +147 -0
  894. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_namednodemapgetnameditem.js +121 -0
  895. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_namednodemapinuseattributeerr.js +139 -0
  896. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_namednodemapnotfounderr.js +131 -0
  897. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_namednodemapremovenameditem.js +124 -0
  898. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_namednodemapreturnattrnode.js +126 -0
  899. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_namednodemapreturnfirstitem.js +150 -0
  900. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_namednodemapreturnlastitem.js +152 -0
  901. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_namednodemapreturnnull.js +121 -0
  902. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_namednodemapsetnameditem.js +131 -0
  903. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_namednodemapsetnameditemreturnvalue.js +132 -0
  904. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_namednodemapsetnameditemthatexists.js +134 -0
  905. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_namednodemapsetnameditemwithnewvalue.js +126 -0
  906. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_namednodemapwrongdocumenterr.js +149 -0
  907. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_nodeappendchildinvalidnodetype.js +130 -0
  908. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_nodeattributenodename.js +115 -0
  909. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_nodeattributenodetype.js +123 -0
  910. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_nodeattributenodevalue.js +118 -0
  911. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_nodeinsertbeforeinvalidnodetype.js +136 -0
  912. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_nodereplacechildinvalidnodetype.js +136 -0
  913. package/node_modules/@mixmark-io/domino/test/w3c/level1/core/obsolete/hc_nodevalue03.js +138 -0
  914. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLAnchorElement01.js +114 -0
  915. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLAnchorElement04.js +113 -0
  916. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLAnchorElement05.js +113 -0
  917. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLAnchorElement07.js +113 -0
  918. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLAnchorElement10.js +114 -0
  919. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLAnchorElement11.js +113 -0
  920. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLAnchorElement12.js +113 -0
  921. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLAnchorElement13.js +107 -0
  922. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLAnchorElement14.js +107 -0
  923. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLAreaElement01.js +114 -0
  924. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLAreaElement02.js +114 -0
  925. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLAreaElement03.js +114 -0
  926. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLAreaElement04.js +113 -0
  927. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLAreaElement05.js +113 -0
  928. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLAreaElement06.js +113 -0
  929. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLAreaElement07.js +114 -0
  930. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLAreaElement08.js +113 -0
  931. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLButtonElement01.js +116 -0
  932. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLButtonElement02.js +114 -0
  933. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLButtonElement03.js +114 -0
  934. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLButtonElement04.js +114 -0
  935. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLButtonElement05.js +114 -0
  936. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLButtonElement06.js +114 -0
  937. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLButtonElement07.js +113 -0
  938. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLButtonElement08.js +113 -0
  939. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLDocument01.js +109 -0
  940. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLDocument05.js +114 -0
  941. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLDocument15.js +115 -0
  942. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLDocument16.js +114 -0
  943. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLDocument17.js +119 -0
  944. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLDocument18.js +102 -0
  945. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLDocument19.js +129 -0
  946. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLDocument20.js +129 -0
  947. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLDocument21.js +138 -0
  948. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement01.js +113 -0
  949. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement02.js +113 -0
  950. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement03.js +113 -0
  951. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement04.js +113 -0
  952. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement05.js +113 -0
  953. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement06.js +113 -0
  954. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement07.js +113 -0
  955. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement08.js +113 -0
  956. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement09.js +113 -0
  957. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement10.js +113 -0
  958. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement100.js +113 -0
  959. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement101.js +113 -0
  960. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement102.js +113 -0
  961. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement103.js +113 -0
  962. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement104.js +113 -0
  963. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement105.js +113 -0
  964. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement106.js +113 -0
  965. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement107.js +113 -0
  966. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement108.js +113 -0
  967. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement109.js +113 -0
  968. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement11.js +113 -0
  969. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement110.js +113 -0
  970. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement111.js +113 -0
  971. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement112.js +113 -0
  972. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement113.js +113 -0
  973. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement114.js +113 -0
  974. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement115.js +113 -0
  975. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement116.js +113 -0
  976. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement117.js +113 -0
  977. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement118.js +113 -0
  978. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement119.js +113 -0
  979. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement12.js +113 -0
  980. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement120.js +113 -0
  981. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement121.js +113 -0
  982. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement122.js +113 -0
  983. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement123.js +113 -0
  984. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement124.js +113 -0
  985. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement125.js +113 -0
  986. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement126.js +113 -0
  987. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement127.js +113 -0
  988. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement128.js +113 -0
  989. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement129.js +113 -0
  990. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement13.js +113 -0
  991. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement130.js +113 -0
  992. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement131.js +113 -0
  993. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement132.js +113 -0
  994. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement133.js +113 -0
  995. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement134.js +113 -0
  996. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement135.js +113 -0
  997. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement136.js +113 -0
  998. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement137.js +113 -0
  999. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement138.js +113 -0
  1000. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement139.js +113 -0
  1001. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement14.js +113 -0
  1002. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement140.js +113 -0
  1003. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement141.js +113 -0
  1004. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement142.js +113 -0
  1005. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement143.js +113 -0
  1006. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement144.js +113 -0
  1007. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement145.js +113 -0
  1008. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement15.js +113 -0
  1009. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement16.js +113 -0
  1010. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement17.js +113 -0
  1011. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement18.js +113 -0
  1012. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement19.js +113 -0
  1013. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement20.js +113 -0
  1014. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement21.js +113 -0
  1015. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement22.js +113 -0
  1016. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement23.js +113 -0
  1017. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement24.js +113 -0
  1018. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement25.js +113 -0
  1019. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement26.js +113 -0
  1020. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement27.js +113 -0
  1021. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement28.js +113 -0
  1022. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement29.js +113 -0
  1023. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement30.js +113 -0
  1024. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement31.js +113 -0
  1025. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement32.js +113 -0
  1026. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement33.js +113 -0
  1027. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement34.js +113 -0
  1028. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement35.js +113 -0
  1029. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement36.js +113 -0
  1030. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement37.js +113 -0
  1031. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement38.js +113 -0
  1032. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement39.js +113 -0
  1033. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement40.js +113 -0
  1034. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement41.js +113 -0
  1035. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement42.js +113 -0
  1036. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement43.js +113 -0
  1037. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement44.js +113 -0
  1038. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement45.js +113 -0
  1039. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement46.js +113 -0
  1040. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement47.js +113 -0
  1041. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement48.js +113 -0
  1042. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement49.js +113 -0
  1043. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement50.js +113 -0
  1044. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement51.js +113 -0
  1045. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement52.js +113 -0
  1046. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement53.js +113 -0
  1047. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement54.js +113 -0
  1048. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement55.js +113 -0
  1049. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement56.js +113 -0
  1050. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement57.js +113 -0
  1051. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement58.js +113 -0
  1052. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement59.js +113 -0
  1053. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement60.js +113 -0
  1054. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement61.js +113 -0
  1055. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement62.js +113 -0
  1056. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement63.js +113 -0
  1057. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement64.js +113 -0
  1058. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement65.js +113 -0
  1059. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement66.js +113 -0
  1060. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement67.js +113 -0
  1061. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement68.js +113 -0
  1062. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement69.js +113 -0
  1063. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement70.js +113 -0
  1064. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement71.js +113 -0
  1065. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement72.js +113 -0
  1066. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement73.js +113 -0
  1067. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement74.js +113 -0
  1068. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement75.js +113 -0
  1069. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement76.js +113 -0
  1070. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement77.js +113 -0
  1071. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement78.js +113 -0
  1072. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement79.js +113 -0
  1073. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement80.js +113 -0
  1074. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement81.js +113 -0
  1075. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement82.js +113 -0
  1076. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement83.js +113 -0
  1077. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement84.js +113 -0
  1078. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement85.js +113 -0
  1079. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement86.js +113 -0
  1080. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement87.js +113 -0
  1081. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement88.js +113 -0
  1082. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement89.js +113 -0
  1083. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement90.js +113 -0
  1084. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement91.js +113 -0
  1085. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement92.js +113 -0
  1086. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement93.js +113 -0
  1087. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement94.js +113 -0
  1088. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement95.js +113 -0
  1089. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement96.js +113 -0
  1090. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement97.js +113 -0
  1091. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement98.js +113 -0
  1092. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLElement99.js +113 -0
  1093. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLFieldSetElement01.js +116 -0
  1094. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLFieldSetElement02.js +114 -0
  1095. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLFormElement03.js +113 -0
  1096. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLFormElement04.js +114 -0
  1097. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLFormElement05.js +113 -0
  1098. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLFormElement06.js +113 -0
  1099. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLFormElement07.js +113 -0
  1100. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLFormElement08.js +113 -0
  1101. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLIFrameElement03.js +114 -0
  1102. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLIFrameElement07.js +115 -0
  1103. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLIFrameElement09.js +114 -0
  1104. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLIFrameElement10.js +114 -0
  1105. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLImageElement05.js +125 -0
  1106. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLImageElement06.js +128 -0
  1107. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLImageElement07.js +113 -0
  1108. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLImageElement09.js +113 -0
  1109. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLImageElement11.js +128 -0
  1110. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLImageElement12.js +127 -0
  1111. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLInputElement01.js +115 -0
  1112. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLInputElement02.js +115 -0
  1113. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLInputElement03.js +116 -0
  1114. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLInputElement04.js +115 -0
  1115. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLInputElement05.js +115 -0
  1116. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLInputElement07.js +115 -0
  1117. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLInputElement08.js +115 -0
  1118. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLInputElement09.js +114 -0
  1119. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLInputElement10.js +115 -0
  1120. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLInputElement11.js +115 -0
  1121. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLInputElement12.js +115 -0
  1122. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLInputElement13.js +130 -0
  1123. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLInputElement14.js +115 -0
  1124. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLInputElement15.js +115 -0
  1125. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLInputElement16.js +114 -0
  1126. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLInputElement18.js +115 -0
  1127. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLInputElement21.js +114 -0
  1128. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLLIElement02.js +113 -0
  1129. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLLabelElement01.js +109 -0
  1130. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLLabelElement02.js +114 -0
  1131. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLLabelElement03.js +114 -0
  1132. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLLabelElement04.js +115 -0
  1133. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLLinkElement01.js +113 -0
  1134. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLLinkElement03.js +113 -0
  1135. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLLinkElement04.js +113 -0
  1136. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLLinkElement05.js +113 -0
  1137. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLLinkElement06.js +113 -0
  1138. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLLinkElement08.js +113 -0
  1139. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLMapElement02.js +113 -0
  1140. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLMetaElement01.js +113 -0
  1141. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLMetaElement02.js +113 -0
  1142. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLMetaElement03.js +113 -0
  1143. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLMetaElement04.js +113 -0
  1144. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLModElement01.js +114 -0
  1145. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLModElement02.js +113 -0
  1146. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLModElement03.js +114 -0
  1147. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLModElement04.js +113 -0
  1148. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLOListElement02.js +113 -0
  1149. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLOListElement03.js +113 -0
  1150. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLObjectElement01.js +116 -0
  1151. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLObjectElement08.js +114 -0
  1152. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLObjectElement10.js +115 -0
  1153. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLObjectElement11.js +129 -0
  1154. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLObjectElement13.js +115 -0
  1155. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLObjectElement14.js +115 -0
  1156. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLObjectElement15.js +114 -0
  1157. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLObjectElement16.js +129 -0
  1158. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLObjectElement17.js +114 -0
  1159. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLObjectElement18.js +115 -0
  1160. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLObjectElement19.js +114 -0
  1161. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLOptGroupElement01.js +114 -0
  1162. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLOptGroupElement02.js +113 -0
  1163. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLOptionElement01.js +117 -0
  1164. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLOptionElement02.js +115 -0
  1165. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLOptionElement03.js +115 -0
  1166. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLOptionElement06.js +115 -0
  1167. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLOptionElement07.js +115 -0
  1168. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLOptionElement08.js +115 -0
  1169. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLParamElement02.js +113 -0
  1170. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLQuoteElement01.js +114 -0
  1171. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLQuoteElement02.js +115 -0
  1172. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLScriptElement01.js +113 -0
  1173. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLScriptElement02.js +114 -0
  1174. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLScriptElement03.js +114 -0
  1175. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLScriptElement04.js +113 -0
  1176. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLScriptElement05.js +113 -0
  1177. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLScriptElement06.js +109 -0
  1178. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLScriptElement07.js +109 -0
  1179. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLSelectElement03.js +118 -0
  1180. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLSelectElement06.js +117 -0
  1181. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLSelectElement07.js +115 -0
  1182. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLSelectElement08.js +134 -0
  1183. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLSelectElement09.js +115 -0
  1184. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLSelectElement10.js +115 -0
  1185. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLSelectElement11.js +115 -0
  1186. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLSelectElement12.js +114 -0
  1187. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLSelectElement13.js +115 -0
  1188. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLStyleElement01.js +113 -0
  1189. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLStyleElement02.js +113 -0
  1190. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLStyleElement03.js +113 -0
  1191. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLTableCellElement15.js +115 -0
  1192. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLTableCellElement16.js +115 -0
  1193. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLTableCellElement23.js +115 -0
  1194. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLTableCellElement24.js +115 -0
  1195. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLTableCellElement25.js +114 -0
  1196. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLTableColElement07.js +115 -0
  1197. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLTableColElement08.js +115 -0
  1198. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLTableElement02.js +115 -0
  1199. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLTableElement04.js +115 -0
  1200. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLTableElement06.js +115 -0
  1201. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLTableElement07.js +132 -0
  1202. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLTableElement12.js +114 -0
  1203. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLTableRowElement05.js +117 -0
  1204. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLTableSectionElement13.js +117 -0
  1205. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLTableSectionElement14.js +117 -0
  1206. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLTableSectionElement15.js +117 -0
  1207. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLTextAreaElement02.js +117 -0
  1208. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLTextAreaElement03.js +115 -0
  1209. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLTextAreaElement04.js +115 -0
  1210. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLTextAreaElement05.js +114 -0
  1211. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLTextAreaElement06.js +115 -0
  1212. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLTextAreaElement07.js +115 -0
  1213. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLTextAreaElement08.js +114 -0
  1214. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLTextAreaElement09.js +114 -0
  1215. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLTextAreaElement10.js +115 -0
  1216. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/HTMLTitleElement01.js +113 -0
  1217. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/anchor01.js +112 -0
  1218. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/anchor04.js +112 -0
  1219. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/anchor05.js +112 -0
  1220. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/area01.js +111 -0
  1221. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/area02.js +111 -0
  1222. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/area03.js +111 -0
  1223. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/area04.js +111 -0
  1224. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/button01.js +111 -0
  1225. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/button02.js +115 -0
  1226. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/button03.js +115 -0
  1227. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/button04.js +115 -0
  1228. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/button05.js +112 -0
  1229. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/button06.js +112 -0
  1230. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/button07.js +112 -0
  1231. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/button08.js +112 -0
  1232. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/button09.js +112 -0
  1233. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/doc01.js +106 -0
  1234. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/.cvsignore +6 -0
  1235. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/HTMLDocument04.html +36 -0
  1236. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/anchor.html +12 -0
  1237. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/anchor2.html +13 -0
  1238. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/applet.html +12 -0
  1239. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/applet2.html +12 -0
  1240. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/area.html +14 -0
  1241. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/area2.html +15 -0
  1242. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/base.html +11 -0
  1243. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/base2.html +15 -0
  1244. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/basefont.html +12 -0
  1245. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/body.html +10 -0
  1246. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/br.html +12 -0
  1247. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/button.html +21 -0
  1248. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/collection.html +79 -0
  1249. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/directory.html +14 -0
  1250. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/div.html +10 -0
  1251. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/dl.html +15 -0
  1252. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/document.html +36 -0
  1253. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/element.html +81 -0
  1254. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/fieldset.html +23 -0
  1255. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/font.html +10 -0
  1256. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/form.html +17 -0
  1257. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/form2.html +17 -0
  1258. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/form3.html +17 -0
  1259. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/frame.html +14 -0
  1260. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/frameset.html +14 -0
  1261. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/head.html +11 -0
  1262. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/heading.html +16 -0
  1263. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/hr.html +11 -0
  1264. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/html.html +12 -0
  1265. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/iframe.html +10 -0
  1266. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/img.html +13 -0
  1267. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/input.html +60 -0
  1268. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/isindex.html +14 -0
  1269. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/label.html +21 -0
  1270. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/legend.html +22 -0
  1271. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/li.html +23 -0
  1272. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/link.html +15 -0
  1273. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/link2.html +15 -0
  1274. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/map.html +16 -0
  1275. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/menu.html +15 -0
  1276. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/meta.html +13 -0
  1277. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/mod.html +15 -0
  1278. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/object.html +18 -0
  1279. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/object2.html +17 -0
  1280. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/olist.html +32 -0
  1281. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/optgroup.html +25 -0
  1282. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/option.html +36 -0
  1283. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/paragraph.html +13 -0
  1284. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/param.html +14 -0
  1285. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/pre.html +17 -0
  1286. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/quote.html +16 -0
  1287. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/script.html +11 -0
  1288. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/select.html +44 -0
  1289. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/style.html +12 -0
  1290. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/table.html +78 -0
  1291. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/table1.html +12 -0
  1292. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/tablecaption.html +25 -0
  1293. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/tablecell.html +23 -0
  1294. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/tablecol.html +35 -0
  1295. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/tablerow.html +59 -0
  1296. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/tablesection.html +62 -0
  1297. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/textarea.html +26 -0
  1298. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/title.html +13 -0
  1299. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/files/ulist.html +36 -0
  1300. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/hasFeature01.js +96 -0
  1301. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLDocument02.js +111 -0
  1302. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLDocument03.js +111 -0
  1303. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLDocument04.js +110 -0
  1304. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLDocument07.js +113 -0
  1305. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLDocument09.js +114 -0
  1306. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLDocument10.js +113 -0
  1307. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLDocument12.js +109 -0
  1308. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLFormElement01.js +117 -0
  1309. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLFormElement09.js +107 -0
  1310. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLFormElement10.js +107 -0
  1311. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLInputElement19.js +107 -0
  1312. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLInputElement20.js +107 -0
  1313. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLInputElement22.js +108 -0
  1314. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLSelectElement01.js +115 -0
  1315. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLSelectElement02.js +115 -0
  1316. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLSelectElement04.js +114 -0
  1317. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLSelectElement05.js +114 -0
  1318. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLSelectElement14.js +107 -0
  1319. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLSelectElement15.js +107 -0
  1320. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLSelectElement16.js +115 -0
  1321. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLSelectElement17.js +115 -0
  1322. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLSelectElement18.js +133 -0
  1323. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLSelectElement19.js +137 -0
  1324. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLTableElement08.js +129 -0
  1325. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLTableElement09.js +132 -0
  1326. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLTableElement19.js +123 -0
  1327. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLTableElement20.js +122 -0
  1328. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLTableElement21.js +139 -0
  1329. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLTableElement22.js +123 -0
  1330. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLTableElement23.js +122 -0
  1331. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLTableElement24.js +139 -0
  1332. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLTableElement25.js +121 -0
  1333. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLTableElement26.js +125 -0
  1334. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLTableElement27.js +119 -0
  1335. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLTableElement28.js +133 -0
  1336. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLTableElement29.js +137 -0
  1337. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLTableElement30.js +144 -0
  1338. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLTableElement31.js +138 -0
  1339. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLTableElement32.js +125 -0
  1340. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLTableElement33.js +124 -0
  1341. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLTableRowElement01.js +117 -0
  1342. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLTextAreaElement13.js +107 -0
  1343. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLTextAreaElement14.js +107 -0
  1344. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/nyi/HTMLTextAreaElement15.js +107 -0
  1345. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/object01.js +112 -0
  1346. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/object06.js +113 -0
  1347. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/object07.js +111 -0
  1348. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/object08.js +126 -0
  1349. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/object10.js +112 -0
  1350. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/object11.js +112 -0
  1351. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/object12.js +111 -0
  1352. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/object13.js +126 -0
  1353. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/object14.js +111 -0
  1354. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLAnchorElement02.js +114 -0
  1355. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLAnchorElement03.js +114 -0
  1356. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLAnchorElement06.js +113 -0
  1357. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLAnchorElement08.js +113 -0
  1358. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLAnchorElement09.js +113 -0
  1359. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLAppletElement01.js +114 -0
  1360. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLAppletElement02.js +114 -0
  1361. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLAppletElement03.js +113 -0
  1362. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLAppletElement04.js +113 -0
  1363. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLAppletElement05.js +113 -0
  1364. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLAppletElement06.js +113 -0
  1365. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLAppletElement07.js +126 -0
  1366. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLAppletElement08.js +113 -0
  1367. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLAppletElement09.js +127 -0
  1368. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLAppletElement10.js +113 -0
  1369. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLAppletElement11.js +114 -0
  1370. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLBRElement01.js +113 -0
  1371. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLBaseFontElement01.js +113 -0
  1372. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLBaseFontElement02.js +113 -0
  1373. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLBaseFontElement03.js +125 -0
  1374. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLBodyElement01.js +113 -0
  1375. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLBodyElement02.js +114 -0
  1376. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLBodyElement03.js +113 -0
  1377. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLBodyElement04.js +114 -0
  1378. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLBodyElement05.js +113 -0
  1379. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLBodyElement06.js +114 -0
  1380. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLCollection01.js +121 -0
  1381. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLCollection02.js +121 -0
  1382. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLCollection03.js +121 -0
  1383. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLCollection04.js +133 -0
  1384. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLCollection05.js +118 -0
  1385. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLCollection06.js +122 -0
  1386. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLCollection07.js +121 -0
  1387. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLCollection08.js +121 -0
  1388. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLCollection09.js +118 -0
  1389. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLCollection10.js +123 -0
  1390. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLCollection11.js +123 -0
  1391. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLCollection12.js +121 -0
  1392. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLDirectoryElement01.js +114 -0
  1393. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLDivElement01.js +113 -0
  1394. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLDlistElement01.js +114 -0
  1395. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLDocument08.js +114 -0
  1396. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLDocument11.js +114 -0
  1397. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLDocument13.js +109 -0
  1398. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLDocument14.js +110 -0
  1399. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLFontElement01.js +113 -0
  1400. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLFontElement02.js +114 -0
  1401. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLFontElement03.js +113 -0
  1402. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLFormElement02.js +115 -0
  1403. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLFrameElement01.js +116 -0
  1404. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLFrameElement02.js +115 -0
  1405. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLFrameElement03.js +114 -0
  1406. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLFrameElement04.js +114 -0
  1407. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLFrameElement05.js +115 -0
  1408. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLFrameElement06.js +115 -0
  1409. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLFrameElement07.js +115 -0
  1410. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLFrameElement08.js +114 -0
  1411. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLFrameSetElement01.js +115 -0
  1412. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLFrameSetElement02.js +115 -0
  1413. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLHRElement01.js +113 -0
  1414. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLHRElement02.js +114 -0
  1415. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLHRElement03.js +113 -0
  1416. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLHRElement04.js +113 -0
  1417. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLHeadElement01.js +113 -0
  1418. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLHeadingElement01.js +113 -0
  1419. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLHeadingElement02.js +113 -0
  1420. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLHeadingElement03.js +113 -0
  1421. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLHeadingElement04.js +113 -0
  1422. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLHeadingElement05.js +113 -0
  1423. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLHeadingElement06.js +113 -0
  1424. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLHtmlElement01.js +124 -0
  1425. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLIFrameElement01.js +115 -0
  1426. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLIFrameElement02.js +116 -0
  1427. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLIFrameElement04.js +115 -0
  1428. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLIFrameElement05.js +114 -0
  1429. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLIFrameElement06.js +114 -0
  1430. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLIFrameElement08.js +115 -0
  1431. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLImageElement01.js +113 -0
  1432. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLImageElement02.js +114 -0
  1433. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLImageElement03.js +114 -0
  1434. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLImageElement04.js +113 -0
  1435. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLImageElement08.js +114 -0
  1436. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLImageElement10.js +113 -0
  1437. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLImageElement14.js +115 -0
  1438. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLInputElement06.js +115 -0
  1439. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLInputElement17.js +114 -0
  1440. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLIsIndexElement01.js +122 -0
  1441. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLIsIndexElement02.js +119 -0
  1442. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLIsIndexElement03.js +114 -0
  1443. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLLIElement01.js +113 -0
  1444. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLLegendElement01.js +117 -0
  1445. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLLegendElement02.js +114 -0
  1446. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLLegendElement03.js +114 -0
  1447. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLLegendElement04.js +113 -0
  1448. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLLinkElement02.js +114 -0
  1449. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLLinkElement07.js +113 -0
  1450. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLLinkElement09.js +113 -0
  1451. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLMapElement01.js +116 -0
  1452. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLMenuElement01.js +114 -0
  1453. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLOListElement01.js +114 -0
  1454. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLObjectElement02.js +114 -0
  1455. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLObjectElement03.js +115 -0
  1456. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLObjectElement04.js +114 -0
  1457. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLObjectElement05.js +114 -0
  1458. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLObjectElement06.js +115 -0
  1459. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLObjectElement07.js +115 -0
  1460. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLObjectElement09.js +115 -0
  1461. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLObjectElement12.js +115 -0
  1462. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLOptionElement04.js +114 -0
  1463. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLOptionElement05.js +115 -0
  1464. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLOptionElement09.js +114 -0
  1465. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLParagraphElement01.js +113 -0
  1466. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLParamElement01.js +113 -0
  1467. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLParamElement03.js +114 -0
  1468. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLParamElement04.js +114 -0
  1469. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLPreElement01.js +113 -0
  1470. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableCaptionElement01.js +114 -0
  1471. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableCellElement01.js +114 -0
  1472. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableCellElement02.js +114 -0
  1473. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableCellElement03.js +114 -0
  1474. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableCellElement04.js +114 -0
  1475. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableCellElement05.js +115 -0
  1476. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableCellElement06.js +115 -0
  1477. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableCellElement07.js +115 -0
  1478. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableCellElement08.js +115 -0
  1479. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableCellElement09.js +115 -0
  1480. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableCellElement10.js +115 -0
  1481. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableCellElement11.js +115 -0
  1482. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableCellElement12.js +115 -0
  1483. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableCellElement13.js +115 -0
  1484. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableCellElement14.js +115 -0
  1485. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableCellElement17.js +115 -0
  1486. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableCellElement18.js +115 -0
  1487. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableCellElement19.js +114 -0
  1488. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableCellElement20.js +114 -0
  1489. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableCellElement21.js +114 -0
  1490. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableCellElement22.js +114 -0
  1491. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableCellElement26.js +114 -0
  1492. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableCellElement27.js +114 -0
  1493. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableCellElement28.js +114 -0
  1494. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableCellElement29.js +114 -0
  1495. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableCellElement30.js +114 -0
  1496. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableColElement01.js +115 -0
  1497. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableColElement02.js +115 -0
  1498. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableColElement03.js +115 -0
  1499. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableColElement04.js +115 -0
  1500. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableColElement05.js +114 -0
  1501. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableColElement06.js +114 -0
  1502. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableColElement09.js +115 -0
  1503. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableColElement10.js +115 -0
  1504. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableColElement11.js +114 -0
  1505. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableColElement12.js +114 -0
  1506. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableElement01.js +117 -0
  1507. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableElement03.js +117 -0
  1508. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableElement05.js +117 -0
  1509. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableElement10.js +115 -0
  1510. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableElement11.js +114 -0
  1511. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableElement13.js +115 -0
  1512. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableElement14.js +115 -0
  1513. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableElement15.js +114 -0
  1514. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableElement16.js +114 -0
  1515. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableElement17.js +115 -0
  1516. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableElement18.js +114 -0
  1517. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableRowElement02.js +115 -0
  1518. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableRowElement03.js +115 -0
  1519. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableRowElement04.js +115 -0
  1520. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableRowElement06.js +115 -0
  1521. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableRowElement07.js +114 -0
  1522. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableRowElement08.js +114 -0
  1523. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableRowElement09.js +114 -0
  1524. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableRowElement10.js +115 -0
  1525. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableRowElement11.js +144 -0
  1526. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableRowElement12.js +143 -0
  1527. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableRowElement13.js +144 -0
  1528. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableRowElement14.js +144 -0
  1529. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableSectionElement01.js +115 -0
  1530. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableSectionElement02.js +115 -0
  1531. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableSectionElement03.js +115 -0
  1532. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableSectionElement04.js +115 -0
  1533. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableSectionElement05.js +115 -0
  1534. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableSectionElement06.js +115 -0
  1535. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableSectionElement07.js +114 -0
  1536. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableSectionElement08.js +114 -0
  1537. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableSectionElement09.js +114 -0
  1538. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableSectionElement10.js +115 -0
  1539. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableSectionElement11.js +115 -0
  1540. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableSectionElement12.js +115 -0
  1541. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableSectionElement16.js +126 -0
  1542. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableSectionElement17.js +126 -0
  1543. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableSectionElement18.js +126 -0
  1544. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableSectionElement19.js +127 -0
  1545. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableSectionElement20.js +127 -0
  1546. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableSectionElement21.js +128 -0
  1547. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableSectionElement22.js +125 -0
  1548. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableSectionElement23.js +125 -0
  1549. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTableSectionElement24.js +125 -0
  1550. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTextAreaElement01.js +115 -0
  1551. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTextAreaElement11.js +115 -0
  1552. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLTextAreaElement12.js +115 -0
  1553. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLUListElement01.js +114 -0
  1554. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/HTMLUListElement02.js +113 -0
  1555. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/anchor02.js +112 -0
  1556. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/anchor03.js +112 -0
  1557. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/anchor06.js +112 -0
  1558. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/basefont01.js +111 -0
  1559. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/body01.js +112 -0
  1560. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/dlist01.js +111 -0
  1561. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/object02.js +112 -0
  1562. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/object03.js +112 -0
  1563. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/object04.js +112 -0
  1564. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/object05.js +112 -0
  1565. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/object09.js +112 -0
  1566. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/object15.js +112 -0
  1567. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table02.js +115 -0
  1568. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table03.js +115 -0
  1569. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table04.js +115 -0
  1570. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table06.js +115 -0
  1571. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table07.js +118 -0
  1572. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table08.js +115 -0
  1573. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table09.js +115 -0
  1574. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table10.js +115 -0
  1575. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table12.js +115 -0
  1576. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table15.js +118 -0
  1577. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table17.js +115 -0
  1578. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table18.js +112 -0
  1579. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table19.js +113 -0
  1580. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table20.js +112 -0
  1581. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table21.js +112 -0
  1582. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table22.js +112 -0
  1583. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table23.js +112 -0
  1584. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table24.js +112 -0
  1585. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table26.js +111 -0
  1586. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table27.js +112 -0
  1587. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table29.js +112 -0
  1588. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table30.js +112 -0
  1589. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table31.js +112 -0
  1590. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table32.js +112 -0
  1591. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table33.js +112 -0
  1592. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table35.js +112 -0
  1593. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table36.js +112 -0
  1594. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table37.js +111 -0
  1595. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table38.js +112 -0
  1596. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table39.js +112 -0
  1597. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table40.js +112 -0
  1598. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table41.js +112 -0
  1599. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table42.js +112 -0
  1600. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table43.js +112 -0
  1601. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table44.js +112 -0
  1602. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table45.js +112 -0
  1603. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table46.js +112 -0
  1604. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table47.js +112 -0
  1605. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table48.js +112 -0
  1606. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table49.js +112 -0
  1607. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table50.js +112 -0
  1608. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table52.js +112 -0
  1609. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/obsolete/table53.js +112 -0
  1610. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/table01.js +112 -0
  1611. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/table25.js +112 -0
  1612. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/table28.js +112 -0
  1613. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/table34.js +112 -0
  1614. package/node_modules/@mixmark-io/domino/test/w3c/level1/html/table51.js +112 -0
  1615. package/node_modules/@mixmark-io/domino/test/web-platform-blocklist.json +4688 -0
  1616. package/node_modules/@mixmark-io/domino/test/web-platform-tests.js +353 -0
  1617. package/node_modules/@mixmark-io/domino/test/xss.js +361 -0
  1618. package/node_modules/@mozilla/readability/.eslintrc.js +213 -0
  1619. package/node_modules/@mozilla/readability/CHANGELOG.md +79 -0
  1620. package/node_modules/@mozilla/readability/CODE_OF_CONDUCT.md +15 -0
  1621. package/node_modules/@mozilla/readability/CONTRIBUTING.md +74 -0
  1622. package/node_modules/@mozilla/readability/JSDOMParser.js +1197 -0
  1623. package/node_modules/@mozilla/readability/LICENSE.md +13 -0
  1624. package/node_modules/@mozilla/readability/README.md +127 -0
  1625. package/node_modules/@mozilla/readability/Readability-readerable.js +108 -0
  1626. package/node_modules/@mozilla/readability/Readability.js +2314 -0
  1627. package/node_modules/@mozilla/readability/SECURITY.md +8 -0
  1628. package/node_modules/@mozilla/readability/index.d.ts +64 -0
  1629. package/node_modules/@mozilla/readability/index.js +8 -0
  1630. package/node_modules/@mozilla/readability/package.json +37 -0
  1631. package/node_modules/boolbase/README.md +10 -0
  1632. package/node_modules/boolbase/index.js +8 -0
  1633. package/node_modules/boolbase/package.json +23 -0
  1634. package/node_modules/css-select/LICENSE +11 -0
  1635. package/node_modules/css-select/README.md +264 -0
  1636. package/node_modules/css-select/lib/attributes.d.ts +7 -0
  1637. package/node_modules/css-select/lib/attributes.d.ts.map +1 -0
  1638. package/node_modules/css-select/lib/attributes.js +236 -0
  1639. package/node_modules/css-select/lib/attributes.js.map +1 -0
  1640. package/node_modules/css-select/lib/compile.d.ts +13 -0
  1641. package/node_modules/css-select/lib/compile.d.ts.map +1 -0
  1642. package/node_modules/css-select/lib/compile.js +151 -0
  1643. package/node_modules/css-select/lib/compile.js.map +1 -0
  1644. package/node_modules/css-select/lib/esm/attributes.d.ts +7 -0
  1645. package/node_modules/css-select/lib/esm/attributes.d.ts.map +1 -0
  1646. package/node_modules/css-select/lib/esm/attributes.js +222 -0
  1647. package/node_modules/css-select/lib/esm/attributes.js.map +1 -0
  1648. package/node_modules/css-select/lib/esm/compile.d.ts +13 -0
  1649. package/node_modules/css-select/lib/esm/compile.d.ts.map +1 -0
  1650. package/node_modules/css-select/lib/esm/compile.js +115 -0
  1651. package/node_modules/css-select/lib/esm/compile.js.map +1 -0
  1652. package/node_modules/css-select/lib/esm/general.d.ts +3 -0
  1653. package/node_modules/css-select/lib/esm/general.d.ts.map +1 -0
  1654. package/node_modules/css-select/lib/esm/general.js +144 -0
  1655. package/node_modules/css-select/lib/esm/general.js.map +1 -0
  1656. package/node_modules/css-select/lib/esm/helpers/cache.d.ts +12 -0
  1657. package/node_modules/css-select/lib/esm/helpers/cache.d.ts.map +1 -0
  1658. package/node_modules/css-select/lib/esm/helpers/cache.js +41 -0
  1659. package/node_modules/css-select/lib/esm/helpers/cache.js.map +1 -0
  1660. package/node_modules/css-select/lib/esm/helpers/querying.d.ts +24 -0
  1661. package/node_modules/css-select/lib/esm/helpers/querying.d.ts.map +1 -0
  1662. package/node_modules/css-select/lib/esm/helpers/querying.js +105 -0
  1663. package/node_modules/css-select/lib/esm/helpers/querying.js.map +1 -0
  1664. package/node_modules/css-select/lib/esm/helpers/selectors.d.ts +20 -0
  1665. package/node_modules/css-select/lib/esm/helpers/selectors.d.ts.map +1 -0
  1666. package/node_modules/css-select/lib/esm/helpers/selectors.js +103 -0
  1667. package/node_modules/css-select/lib/esm/helpers/selectors.js.map +1 -0
  1668. package/node_modules/css-select/lib/esm/index.d.ts +50 -0
  1669. package/node_modules/css-select/lib/esm/index.d.ts.map +1 -0
  1670. package/node_modules/css-select/lib/esm/index.js +115 -0
  1671. package/node_modules/css-select/lib/esm/index.js.map +1 -0
  1672. package/node_modules/css-select/lib/esm/package.json +1 -0
  1673. package/node_modules/css-select/lib/esm/pseudo-selectors/aliases.d.ts +5 -0
  1674. package/node_modules/css-select/lib/esm/pseudo-selectors/aliases.d.ts.map +1 -0
  1675. package/node_modules/css-select/lib/esm/pseudo-selectors/aliases.js +35 -0
  1676. package/node_modules/css-select/lib/esm/pseudo-selectors/aliases.js.map +1 -0
  1677. package/node_modules/css-select/lib/esm/pseudo-selectors/filters.d.ts +4 -0
  1678. package/node_modules/css-select/lib/esm/pseudo-selectors/filters.d.ts.map +1 -0
  1679. package/node_modules/css-select/lib/esm/pseudo-selectors/filters.js +143 -0
  1680. package/node_modules/css-select/lib/esm/pseudo-selectors/filters.js.map +1 -0
  1681. package/node_modules/css-select/lib/esm/pseudo-selectors/index.d.ts +8 -0
  1682. package/node_modules/css-select/lib/esm/pseudo-selectors/index.d.ts.map +1 -0
  1683. package/node_modules/css-select/lib/esm/pseudo-selectors/index.js +40 -0
  1684. package/node_modules/css-select/lib/esm/pseudo-selectors/index.js.map +1 -0
  1685. package/node_modules/css-select/lib/esm/pseudo-selectors/pseudos.d.ts +6 -0
  1686. package/node_modules/css-select/lib/esm/pseudo-selectors/pseudos.d.ts.map +1 -0
  1687. package/node_modules/css-select/lib/esm/pseudo-selectors/pseudos.js +79 -0
  1688. package/node_modules/css-select/lib/esm/pseudo-selectors/pseudos.js.map +1 -0
  1689. package/node_modules/css-select/lib/esm/pseudo-selectors/subselects.d.ts +9 -0
  1690. package/node_modules/css-select/lib/esm/pseudo-selectors/subselects.d.ts.map +1 -0
  1691. package/node_modules/css-select/lib/esm/pseudo-selectors/subselects.js +94 -0
  1692. package/node_modules/css-select/lib/esm/pseudo-selectors/subselects.js.map +1 -0
  1693. package/node_modules/css-select/lib/esm/sort.d.ts +12 -0
  1694. package/node_modules/css-select/lib/esm/sort.d.ts.map +1 -0
  1695. package/node_modules/css-select/lib/esm/sort.js +79 -0
  1696. package/node_modules/css-select/lib/esm/sort.js.map +1 -0
  1697. package/node_modules/css-select/lib/esm/types.d.ts +167 -0
  1698. package/node_modules/css-select/lib/esm/types.d.ts.map +1 -0
  1699. package/node_modules/css-select/lib/esm/types.js +2 -0
  1700. package/node_modules/css-select/lib/esm/types.js.map +1 -0
  1701. package/node_modules/css-select/lib/general.d.ts +3 -0
  1702. package/node_modules/css-select/lib/general.d.ts.map +1 -0
  1703. package/node_modules/css-select/lib/general.js +148 -0
  1704. package/node_modules/css-select/lib/general.js.map +1 -0
  1705. package/node_modules/css-select/lib/helpers/cache.d.ts +12 -0
  1706. package/node_modules/css-select/lib/helpers/cache.d.ts.map +1 -0
  1707. package/node_modules/css-select/lib/helpers/cache.js +45 -0
  1708. package/node_modules/css-select/lib/helpers/cache.js.map +1 -0
  1709. package/node_modules/css-select/lib/helpers/querying.d.ts +24 -0
  1710. package/node_modules/css-select/lib/helpers/querying.d.ts.map +1 -0
  1711. package/node_modules/css-select/lib/helpers/querying.js +111 -0
  1712. package/node_modules/css-select/lib/helpers/querying.js.map +1 -0
  1713. package/node_modules/css-select/lib/helpers/selectors.d.ts +20 -0
  1714. package/node_modules/css-select/lib/helpers/selectors.d.ts.map +1 -0
  1715. package/node_modules/css-select/lib/helpers/selectors.js +111 -0
  1716. package/node_modules/css-select/lib/helpers/selectors.js.map +1 -0
  1717. package/node_modules/css-select/lib/index.d.ts +50 -0
  1718. package/node_modules/css-select/lib/index.d.ts.map +1 -0
  1719. package/node_modules/css-select/lib/index.js +154 -0
  1720. package/node_modules/css-select/lib/index.js.map +1 -0
  1721. package/node_modules/css-select/lib/pseudo-selectors/aliases.d.ts +5 -0
  1722. package/node_modules/css-select/lib/pseudo-selectors/aliases.d.ts.map +1 -0
  1723. package/node_modules/css-select/lib/pseudo-selectors/aliases.js +34 -0
  1724. package/node_modules/css-select/lib/pseudo-selectors/aliases.js.map +1 -0
  1725. package/node_modules/css-select/lib/pseudo-selectors/filters.d.ts +4 -0
  1726. package/node_modules/css-select/lib/pseudo-selectors/filters.d.ts.map +1 -0
  1727. package/node_modules/css-select/lib/pseudo-selectors/filters.js +157 -0
  1728. package/node_modules/css-select/lib/pseudo-selectors/filters.js.map +1 -0
  1729. package/node_modules/css-select/lib/pseudo-selectors/index.d.ts +8 -0
  1730. package/node_modules/css-select/lib/pseudo-selectors/index.d.ts.map +1 -0
  1731. package/node_modules/css-select/lib/pseudo-selectors/index.js +46 -0
  1732. package/node_modules/css-select/lib/pseudo-selectors/index.js.map +1 -0
  1733. package/node_modules/css-select/lib/pseudo-selectors/pseudos.d.ts +6 -0
  1734. package/node_modules/css-select/lib/pseudo-selectors/pseudos.d.ts.map +1 -0
  1735. package/node_modules/css-select/lib/pseudo-selectors/pseudos.js +93 -0
  1736. package/node_modules/css-select/lib/pseudo-selectors/pseudos.js.map +1 -0
  1737. package/node_modules/css-select/lib/pseudo-selectors/subselects.d.ts +9 -0
  1738. package/node_modules/css-select/lib/pseudo-selectors/subselects.d.ts.map +1 -0
  1739. package/node_modules/css-select/lib/pseudo-selectors/subselects.js +112 -0
  1740. package/node_modules/css-select/lib/pseudo-selectors/subselects.js.map +1 -0
  1741. package/node_modules/css-select/lib/sort.d.ts +12 -0
  1742. package/node_modules/css-select/lib/sort.d.ts.map +1 -0
  1743. package/node_modules/css-select/lib/sort.js +84 -0
  1744. package/node_modules/css-select/lib/sort.js.map +1 -0
  1745. package/node_modules/css-select/lib/types.d.ts +167 -0
  1746. package/node_modules/css-select/lib/types.d.ts.map +1 -0
  1747. package/node_modules/css-select/lib/types.js +3 -0
  1748. package/node_modules/css-select/lib/types.js.map +1 -0
  1749. package/node_modules/css-select/package.json +81 -0
  1750. package/node_modules/css-what/LICENSE +11 -0
  1751. package/node_modules/css-what/lib/commonjs/index.d.ts +4 -0
  1752. package/node_modules/css-what/lib/commonjs/index.d.ts.map +1 -0
  1753. package/node_modules/css-what/lib/commonjs/index.js +23 -0
  1754. package/node_modules/css-what/lib/commonjs/parse.d.ts +20 -0
  1755. package/node_modules/css-what/lib/commonjs/parse.d.ts.map +1 -0
  1756. package/node_modules/css-what/lib/commonjs/parse.js +425 -0
  1757. package/node_modules/css-what/lib/commonjs/stringify.d.ts +8 -0
  1758. package/node_modules/css-what/lib/commonjs/stringify.d.ts.map +1 -0
  1759. package/node_modules/css-what/lib/commonjs/stringify.js +138 -0
  1760. package/node_modules/css-what/lib/commonjs/types.d.ts +70 -0
  1761. package/node_modules/css-what/lib/commonjs/types.d.ts.map +1 -0
  1762. package/node_modules/css-what/lib/commonjs/types.js +42 -0
  1763. package/node_modules/css-what/lib/es/index.d.ts +4 -0
  1764. package/node_modules/css-what/lib/es/index.d.ts.map +1 -0
  1765. package/node_modules/css-what/lib/es/index.js +3 -0
  1766. package/node_modules/css-what/lib/es/parse.d.ts +20 -0
  1767. package/node_modules/css-what/lib/es/parse.d.ts.map +1 -0
  1768. package/node_modules/css-what/lib/es/parse.js +420 -0
  1769. package/node_modules/css-what/lib/es/stringify.d.ts +8 -0
  1770. package/node_modules/css-what/lib/es/stringify.d.ts.map +1 -0
  1771. package/node_modules/css-what/lib/es/stringify.js +126 -0
  1772. package/node_modules/css-what/lib/es/types.d.ts +70 -0
  1773. package/node_modules/css-what/lib/es/types.d.ts.map +1 -0
  1774. package/node_modules/css-what/lib/es/types.js +39 -0
  1775. package/node_modules/css-what/package.json +59 -0
  1776. package/node_modules/css-what/readme.md +69 -0
  1777. package/node_modules/cssom/LICENSE.txt +20 -0
  1778. package/node_modules/cssom/README.mdown +67 -0
  1779. package/node_modules/cssom/lib/CSSConditionRule.js +25 -0
  1780. package/node_modules/cssom/lib/CSSDocumentRule.js +39 -0
  1781. package/node_modules/cssom/lib/CSSFontFaceRule.js +36 -0
  1782. package/node_modules/cssom/lib/CSSGroupingRule.js +68 -0
  1783. package/node_modules/cssom/lib/CSSHostRule.js +37 -0
  1784. package/node_modules/cssom/lib/CSSImportRule.js +132 -0
  1785. package/node_modules/cssom/lib/CSSKeyframeRule.js +37 -0
  1786. package/node_modules/cssom/lib/CSSKeyframesRule.js +39 -0
  1787. package/node_modules/cssom/lib/CSSMediaRule.js +53 -0
  1788. package/node_modules/cssom/lib/CSSOM.js +3 -0
  1789. package/node_modules/cssom/lib/CSSRule.js +43 -0
  1790. package/node_modules/cssom/lib/CSSStyleDeclaration.js +148 -0
  1791. package/node_modules/cssom/lib/CSSStyleRule.js +190 -0
  1792. package/node_modules/cssom/lib/CSSStyleSheet.js +88 -0
  1793. package/node_modules/cssom/lib/CSSSupportsRule.js +36 -0
  1794. package/node_modules/cssom/lib/CSSValue.js +43 -0
  1795. package/node_modules/cssom/lib/CSSValueExpression.js +344 -0
  1796. package/node_modules/cssom/lib/MatcherList.js +62 -0
  1797. package/node_modules/cssom/lib/MediaList.js +61 -0
  1798. package/node_modules/cssom/lib/StyleSheet.js +17 -0
  1799. package/node_modules/cssom/lib/clone.js +74 -0
  1800. package/node_modules/cssom/lib/index.js +23 -0
  1801. package/node_modules/cssom/lib/parse.js +465 -0
  1802. package/node_modules/cssom/package.json +18 -0
  1803. package/node_modules/dom-serializer/LICENSE +11 -0
  1804. package/node_modules/dom-serializer/README.md +109 -0
  1805. package/node_modules/dom-serializer/lib/esm/foreignNames.d.ts +3 -0
  1806. package/node_modules/dom-serializer/lib/esm/foreignNames.d.ts.map +1 -0
  1807. package/node_modules/dom-serializer/lib/esm/foreignNames.js +100 -0
  1808. package/node_modules/dom-serializer/lib/esm/index.d.ts +52 -0
  1809. package/node_modules/dom-serializer/lib/esm/index.d.ts.map +1 -0
  1810. package/node_modules/dom-serializer/lib/esm/index.js +190 -0
  1811. package/node_modules/dom-serializer/lib/esm/package.json +1 -0
  1812. package/node_modules/dom-serializer/lib/foreignNames.d.ts +3 -0
  1813. package/node_modules/dom-serializer/lib/foreignNames.d.ts.map +1 -0
  1814. package/node_modules/dom-serializer/lib/foreignNames.js +103 -0
  1815. package/node_modules/dom-serializer/lib/index.d.ts +52 -0
  1816. package/node_modules/dom-serializer/lib/index.d.ts.map +1 -0
  1817. package/node_modules/dom-serializer/lib/index.js +229 -0
  1818. package/node_modules/dom-serializer/package.json +69 -0
  1819. package/node_modules/domelementtype/LICENSE +11 -0
  1820. package/node_modules/domelementtype/lib/esm/index.d.ts +48 -0
  1821. package/node_modules/domelementtype/lib/esm/index.d.ts.map +1 -0
  1822. package/node_modules/domelementtype/lib/esm/index.js +51 -0
  1823. package/node_modules/domelementtype/lib/esm/package.json +1 -0
  1824. package/node_modules/domelementtype/lib/index.d.ts +48 -0
  1825. package/node_modules/domelementtype/lib/index.d.ts.map +1 -0
  1826. package/node_modules/domelementtype/lib/index.js +55 -0
  1827. package/node_modules/domelementtype/package.json +54 -0
  1828. package/node_modules/domelementtype/readme.md +1 -0
  1829. package/node_modules/domhandler/LICENSE +11 -0
  1830. package/node_modules/domhandler/lib/esm/index.d.ts +76 -0
  1831. package/node_modules/domhandler/lib/esm/index.d.ts.map +1 -0
  1832. package/node_modules/domhandler/lib/esm/index.js +146 -0
  1833. package/node_modules/domhandler/lib/esm/node.d.ts +245 -0
  1834. package/node_modules/domhandler/lib/esm/node.d.ts.map +1 -0
  1835. package/node_modules/domhandler/lib/esm/node.js +338 -0
  1836. package/node_modules/domhandler/lib/esm/package.json +1 -0
  1837. package/node_modules/domhandler/lib/index.d.ts +76 -0
  1838. package/node_modules/domhandler/lib/index.d.ts.map +1 -0
  1839. package/node_modules/domhandler/lib/index.js +165 -0
  1840. package/node_modules/domhandler/lib/node.d.ts +245 -0
  1841. package/node_modules/domhandler/lib/node.d.ts.map +1 -0
  1842. package/node_modules/domhandler/lib/node.js +474 -0
  1843. package/node_modules/domhandler/package.json +73 -0
  1844. package/node_modules/domhandler/readme.md +92 -0
  1845. package/node_modules/domutils/LICENSE +11 -0
  1846. package/node_modules/domutils/lib/esm/feeds.d.ts +71 -0
  1847. package/node_modules/domutils/lib/esm/feeds.d.ts.map +1 -0
  1848. package/node_modules/domutils/lib/esm/feeds.js +183 -0
  1849. package/node_modules/domutils/lib/esm/feeds.js.map +1 -0
  1850. package/node_modules/domutils/lib/esm/helpers.d.ts +59 -0
  1851. package/node_modules/domutils/lib/esm/helpers.d.ts.map +1 -0
  1852. package/node_modules/domutils/lib/esm/helpers.js +136 -0
  1853. package/node_modules/domutils/lib/esm/helpers.js.map +1 -0
  1854. package/node_modules/domutils/lib/esm/index.d.ts +10 -0
  1855. package/node_modules/domutils/lib/esm/index.d.ts.map +1 -0
  1856. package/node_modules/domutils/lib/esm/index.js +10 -0
  1857. package/node_modules/domutils/lib/esm/index.js.map +1 -0
  1858. package/node_modules/domutils/lib/esm/legacy.d.ts +79 -0
  1859. package/node_modules/domutils/lib/esm/legacy.d.ts.map +1 -0
  1860. package/node_modules/domutils/lib/esm/legacy.js +152 -0
  1861. package/node_modules/domutils/lib/esm/legacy.js.map +1 -0
  1862. package/node_modules/domutils/lib/esm/manipulation.d.ts +49 -0
  1863. package/node_modules/domutils/lib/esm/manipulation.d.ts.map +1 -0
  1864. package/node_modules/domutils/lib/esm/manipulation.js +134 -0
  1865. package/node_modules/domutils/lib/esm/manipulation.js.map +1 -0
  1866. package/node_modules/domutils/lib/esm/package.json +1 -0
  1867. package/node_modules/domutils/lib/esm/querying.d.ts +64 -0
  1868. package/node_modules/domutils/lib/esm/querying.d.ts.map +1 -0
  1869. package/node_modules/domutils/lib/esm/querying.js +142 -0
  1870. package/node_modules/domutils/lib/esm/querying.js.map +1 -0
  1871. package/node_modules/domutils/lib/esm/stringify.d.ts +46 -0
  1872. package/node_modules/domutils/lib/esm/stringify.d.ts.map +1 -0
  1873. package/node_modules/domutils/lib/esm/stringify.js +81 -0
  1874. package/node_modules/domutils/lib/esm/stringify.js.map +1 -0
  1875. package/node_modules/domutils/lib/esm/traversal.d.ts +67 -0
  1876. package/node_modules/domutils/lib/esm/traversal.d.ts.map +1 -0
  1877. package/node_modules/domutils/lib/esm/traversal.js +112 -0
  1878. package/node_modules/domutils/lib/esm/traversal.js.map +1 -0
  1879. package/node_modules/domutils/lib/feeds.d.ts +71 -0
  1880. package/node_modules/domutils/lib/feeds.d.ts.map +1 -0
  1881. package/node_modules/domutils/lib/feeds.js +190 -0
  1882. package/node_modules/domutils/lib/feeds.js.map +1 -0
  1883. package/node_modules/domutils/lib/helpers.d.ts +59 -0
  1884. package/node_modules/domutils/lib/helpers.d.ts.map +1 -0
  1885. package/node_modules/domutils/lib/helpers.js +142 -0
  1886. package/node_modules/domutils/lib/helpers.js.map +1 -0
  1887. package/node_modules/domutils/lib/index.d.ts +10 -0
  1888. package/node_modules/domutils/lib/index.d.ts.map +1 -0
  1889. package/node_modules/domutils/lib/index.js +33 -0
  1890. package/node_modules/domutils/lib/index.js.map +1 -0
  1891. package/node_modules/domutils/lib/legacy.d.ts +79 -0
  1892. package/node_modules/domutils/lib/legacy.d.ts.map +1 -0
  1893. package/node_modules/domutils/lib/legacy.js +168 -0
  1894. package/node_modules/domutils/lib/legacy.js.map +1 -0
  1895. package/node_modules/domutils/lib/manipulation.d.ts +49 -0
  1896. package/node_modules/domutils/lib/manipulation.d.ts.map +1 -0
  1897. package/node_modules/domutils/lib/manipulation.js +142 -0
  1898. package/node_modules/domutils/lib/manipulation.js.map +1 -0
  1899. package/node_modules/domutils/lib/querying.d.ts +64 -0
  1900. package/node_modules/domutils/lib/querying.d.ts.map +1 -0
  1901. package/node_modules/domutils/lib/querying.js +155 -0
  1902. package/node_modules/domutils/lib/querying.js.map +1 -0
  1903. package/node_modules/domutils/lib/stringify.d.ts +46 -0
  1904. package/node_modules/domutils/lib/stringify.d.ts.map +1 -0
  1905. package/node_modules/domutils/lib/stringify.js +91 -0
  1906. package/node_modules/domutils/lib/stringify.js.map +1 -0
  1907. package/node_modules/domutils/lib/traversal.d.ts +67 -0
  1908. package/node_modules/domutils/lib/traversal.d.ts.map +1 -0
  1909. package/node_modules/domutils/lib/traversal.js +125 -0
  1910. package/node_modules/domutils/lib/traversal.js.map +1 -0
  1911. package/node_modules/domutils/package.json +79 -0
  1912. package/node_modules/domutils/readme.md +31 -0
  1913. package/node_modules/entities/LICENSE +11 -0
  1914. package/node_modules/entities/lib/decode.d.ts +211 -0
  1915. package/node_modules/entities/lib/decode.d.ts.map +1 -0
  1916. package/node_modules/entities/lib/decode.js +536 -0
  1917. package/node_modules/entities/lib/decode.js.map +1 -0
  1918. package/node_modules/entities/lib/decode_codepoint.d.ts +19 -0
  1919. package/node_modules/entities/lib/decode_codepoint.d.ts.map +1 -0
  1920. package/node_modules/entities/lib/decode_codepoint.js +76 -0
  1921. package/node_modules/entities/lib/decode_codepoint.js.map +1 -0
  1922. package/node_modules/entities/lib/encode.d.ts +22 -0
  1923. package/node_modules/entities/lib/encode.d.ts.map +1 -0
  1924. package/node_modules/entities/lib/encode.js +77 -0
  1925. package/node_modules/entities/lib/encode.js.map +1 -0
  1926. package/node_modules/entities/lib/escape.d.ts +43 -0
  1927. package/node_modules/entities/lib/escape.d.ts.map +1 -0
  1928. package/node_modules/entities/lib/escape.js +122 -0
  1929. package/node_modules/entities/lib/escape.js.map +1 -0
  1930. package/node_modules/entities/lib/esm/decode.d.ts +211 -0
  1931. package/node_modules/entities/lib/esm/decode.d.ts.map +1 -0
  1932. package/node_modules/entities/lib/esm/decode.js +496 -0
  1933. package/node_modules/entities/lib/esm/decode.js.map +1 -0
  1934. package/node_modules/entities/lib/esm/decode_codepoint.d.ts +19 -0
  1935. package/node_modules/entities/lib/esm/decode_codepoint.d.ts.map +1 -0
  1936. package/node_modules/entities/lib/esm/decode_codepoint.js +71 -0
  1937. package/node_modules/entities/lib/esm/decode_codepoint.js.map +1 -0
  1938. package/node_modules/entities/lib/esm/encode.d.ts +22 -0
  1939. package/node_modules/entities/lib/esm/encode.d.ts.map +1 -0
  1940. package/node_modules/entities/lib/esm/encode.js +69 -0
  1941. package/node_modules/entities/lib/esm/encode.js.map +1 -0
  1942. package/node_modules/entities/lib/esm/escape.d.ts +43 -0
  1943. package/node_modules/entities/lib/esm/escape.d.ts.map +1 -0
  1944. package/node_modules/entities/lib/esm/escape.js +116 -0
  1945. package/node_modules/entities/lib/esm/escape.js.map +1 -0
  1946. package/node_modules/entities/lib/esm/generated/decode-data-html.d.ts +3 -0
  1947. package/node_modules/entities/lib/esm/generated/decode-data-html.d.ts.map +1 -0
  1948. package/node_modules/entities/lib/esm/generated/decode-data-html.js +7 -0
  1949. package/node_modules/entities/lib/esm/generated/decode-data-html.js.map +1 -0
  1950. package/node_modules/entities/lib/esm/generated/decode-data-xml.d.ts +3 -0
  1951. package/node_modules/entities/lib/esm/generated/decode-data-xml.d.ts.map +1 -0
  1952. package/node_modules/entities/lib/esm/generated/decode-data-xml.js +7 -0
  1953. package/node_modules/entities/lib/esm/generated/decode-data-xml.js.map +1 -0
  1954. package/node_modules/entities/lib/esm/generated/encode-html.d.ts +8 -0
  1955. package/node_modules/entities/lib/esm/generated/encode-html.d.ts.map +1 -0
  1956. package/node_modules/entities/lib/esm/generated/encode-html.js +10 -0
  1957. package/node_modules/entities/lib/esm/generated/encode-html.js.map +1 -0
  1958. package/node_modules/entities/lib/esm/index.d.ts +96 -0
  1959. package/node_modules/entities/lib/esm/index.d.ts.map +1 -0
  1960. package/node_modules/entities/lib/esm/index.js +99 -0
  1961. package/node_modules/entities/lib/esm/index.js.map +1 -0
  1962. package/node_modules/entities/lib/esm/package.json +1 -0
  1963. package/node_modules/entities/lib/generated/decode-data-html.d.ts +3 -0
  1964. package/node_modules/entities/lib/generated/decode-data-html.d.ts.map +1 -0
  1965. package/node_modules/entities/lib/generated/decode-data-html.js +9 -0
  1966. package/node_modules/entities/lib/generated/decode-data-html.js.map +1 -0
  1967. package/node_modules/entities/lib/generated/decode-data-xml.d.ts +3 -0
  1968. package/node_modules/entities/lib/generated/decode-data-xml.d.ts.map +1 -0
  1969. package/node_modules/entities/lib/generated/decode-data-xml.js +9 -0
  1970. package/node_modules/entities/lib/generated/decode-data-xml.js.map +1 -0
  1971. package/node_modules/entities/lib/generated/encode-html.d.ts +8 -0
  1972. package/node_modules/entities/lib/generated/encode-html.d.ts.map +1 -0
  1973. package/node_modules/entities/lib/generated/encode-html.js +12 -0
  1974. package/node_modules/entities/lib/generated/encode-html.js.map +1 -0
  1975. package/node_modules/entities/lib/index.d.ts +96 -0
  1976. package/node_modules/entities/lib/index.d.ts.map +1 -0
  1977. package/node_modules/entities/lib/index.js +126 -0
  1978. package/node_modules/entities/lib/index.js.map +1 -0
  1979. package/node_modules/entities/package.json +90 -0
  1980. package/node_modules/entities/readme.md +122 -0
  1981. package/node_modules/html-escaper/LICENSE.txt +19 -0
  1982. package/node_modules/html-escaper/README.md +110 -0
  1983. package/node_modules/html-escaper/cjs/index.js +74 -0
  1984. package/node_modules/html-escaper/cjs/package.json +1 -0
  1985. package/node_modules/html-escaper/esm/index.js +71 -0
  1986. package/node_modules/html-escaper/index.js +81 -0
  1987. package/node_modules/html-escaper/min.js +1 -0
  1988. package/node_modules/html-escaper/package.json +47 -0
  1989. package/node_modules/html-escaper/test/index.js +23 -0
  1990. package/node_modules/html-escaper/test/package.json +1 -0
  1991. package/node_modules/htmlparser2/LICENSE +18 -0
  1992. package/node_modules/htmlparser2/README.md +171 -0
  1993. package/node_modules/htmlparser2/lib/Parser.d.ts +198 -0
  1994. package/node_modules/htmlparser2/lib/Parser.d.ts.map +1 -0
  1995. package/node_modules/htmlparser2/lib/Parser.js +519 -0
  1996. package/node_modules/htmlparser2/lib/Parser.js.map +1 -0
  1997. package/node_modules/htmlparser2/lib/Tokenizer.d.ts +126 -0
  1998. package/node_modules/htmlparser2/lib/Tokenizer.d.ts.map +1 -0
  1999. package/node_modules/htmlparser2/lib/Tokenizer.js +791 -0
  2000. package/node_modules/htmlparser2/lib/Tokenizer.js.map +1 -0
  2001. package/node_modules/htmlparser2/lib/WritableStream.d.ts +17 -0
  2002. package/node_modules/htmlparser2/lib/WritableStream.d.ts.map +1 -0
  2003. package/node_modules/htmlparser2/lib/WritableStream.js +54 -0
  2004. package/node_modules/htmlparser2/lib/WritableStream.js.map +1 -0
  2005. package/node_modules/htmlparser2/lib/esm/Parser.d.ts +198 -0
  2006. package/node_modules/htmlparser2/lib/esm/Parser.d.ts.map +1 -0
  2007. package/node_modules/htmlparser2/lib/esm/Parser.js +490 -0
  2008. package/node_modules/htmlparser2/lib/esm/Parser.js.map +1 -0
  2009. package/node_modules/htmlparser2/lib/esm/Tokenizer.d.ts +126 -0
  2010. package/node_modules/htmlparser2/lib/esm/Tokenizer.d.ts.map +1 -0
  2011. package/node_modules/htmlparser2/lib/esm/Tokenizer.js +784 -0
  2012. package/node_modules/htmlparser2/lib/esm/Tokenizer.js.map +1 -0
  2013. package/node_modules/htmlparser2/lib/esm/WritableStream.d.ts +17 -0
  2014. package/node_modules/htmlparser2/lib/esm/WritableStream.d.ts.map +1 -0
  2015. package/node_modules/htmlparser2/lib/esm/WritableStream.js +32 -0
  2016. package/node_modules/htmlparser2/lib/esm/WritableStream.js.map +1 -0
  2017. package/node_modules/htmlparser2/lib/esm/index.d.ts +54 -0
  2018. package/node_modules/htmlparser2/lib/esm/index.d.ts.map +1 -0
  2019. package/node_modules/htmlparser2/lib/esm/index.js +74 -0
  2020. package/node_modules/htmlparser2/lib/esm/index.js.map +1 -0
  2021. package/node_modules/htmlparser2/lib/esm/package.json +1 -0
  2022. package/node_modules/htmlparser2/lib/index.d.ts +54 -0
  2023. package/node_modules/htmlparser2/lib/index.d.ts.map +1 -0
  2024. package/node_modules/htmlparser2/lib/index.js +114 -0
  2025. package/node_modules/htmlparser2/lib/index.js.map +1 -0
  2026. package/node_modules/htmlparser2/package.json +97 -0
  2027. package/node_modules/linkedom/.github/workflows/node.js.yml +31 -0
  2028. package/node_modules/linkedom/LICENSE +15 -0
  2029. package/node_modules/linkedom/README.md +307 -0
  2030. package/node_modules/linkedom/cjs/cached.js +153 -0
  2031. package/node_modules/linkedom/cjs/dom/parser.js +41 -0
  2032. package/node_modules/linkedom/cjs/dom/string-map.js +47 -0
  2033. package/node_modules/linkedom/cjs/dom/token-list.js +103 -0
  2034. package/node_modules/linkedom/cjs/html/anchor-element.js +35 -0
  2035. package/node_modules/linkedom/cjs/html/area-element.js +12 -0
  2036. package/node_modules/linkedom/cjs/html/audio-element.js +12 -0
  2037. package/node_modules/linkedom/cjs/html/base-element.js +12 -0
  2038. package/node_modules/linkedom/cjs/html/body-element.js +12 -0
  2039. package/node_modules/linkedom/cjs/html/br-element.js +12 -0
  2040. package/node_modules/linkedom/cjs/html/button-element.js +31 -0
  2041. package/node_modules/linkedom/cjs/html/canvas-element.js +53 -0
  2042. package/node_modules/linkedom/cjs/html/d-list-element.js +12 -0
  2043. package/node_modules/linkedom/cjs/html/data-element.js +12 -0
  2044. package/node_modules/linkedom/cjs/html/data-list-element.js +12 -0
  2045. package/node_modules/linkedom/cjs/html/details-element.js +12 -0
  2046. package/node_modules/linkedom/cjs/html/directory-element.js +12 -0
  2047. package/node_modules/linkedom/cjs/html/div-element.js +12 -0
  2048. package/node_modules/linkedom/cjs/html/document.js +105 -0
  2049. package/node_modules/linkedom/cjs/html/element.js +321 -0
  2050. package/node_modules/linkedom/cjs/html/embed-element.js +12 -0
  2051. package/node_modules/linkedom/cjs/html/field-set-element.js +12 -0
  2052. package/node_modules/linkedom/cjs/html/font-element.js +12 -0
  2053. package/node_modules/linkedom/cjs/html/form-element.js +12 -0
  2054. package/node_modules/linkedom/cjs/html/frame-element.js +12 -0
  2055. package/node_modules/linkedom/cjs/html/frame-set-element.js +12 -0
  2056. package/node_modules/linkedom/cjs/html/head-element.js +12 -0
  2057. package/node_modules/linkedom/cjs/html/heading-element.js +19 -0
  2058. package/node_modules/linkedom/cjs/html/hr-element.js +12 -0
  2059. package/node_modules/linkedom/cjs/html/html-element.js +12 -0
  2060. package/node_modules/linkedom/cjs/html/i-frame-element.js +43 -0
  2061. package/node_modules/linkedom/cjs/html/image-element.js +43 -0
  2062. package/node_modules/linkedom/cjs/html/input-element.js +40 -0
  2063. package/node_modules/linkedom/cjs/html/label-element.js +12 -0
  2064. package/node_modules/linkedom/cjs/html/legend-element.js +12 -0
  2065. package/node_modules/linkedom/cjs/html/li-element.js +12 -0
  2066. package/node_modules/linkedom/cjs/html/link-element.js +41 -0
  2067. package/node_modules/linkedom/cjs/html/map-element.js +12 -0
  2068. package/node_modules/linkedom/cjs/html/marquee-element.js +12 -0
  2069. package/node_modules/linkedom/cjs/html/media-element.js +12 -0
  2070. package/node_modules/linkedom/cjs/html/menu-element.js +12 -0
  2071. package/node_modules/linkedom/cjs/html/meta-element.js +36 -0
  2072. package/node_modules/linkedom/cjs/html/meter-element.js +12 -0
  2073. package/node_modules/linkedom/cjs/html/mod-element.js +12 -0
  2074. package/node_modules/linkedom/cjs/html/o-list-element.js +12 -0
  2075. package/node_modules/linkedom/cjs/html/object-element.js +12 -0
  2076. package/node_modules/linkedom/cjs/html/opt-group-element.js +12 -0
  2077. package/node_modules/linkedom/cjs/html/option-element.js +32 -0
  2078. package/node_modules/linkedom/cjs/html/output-element.js +12 -0
  2079. package/node_modules/linkedom/cjs/html/paragraph-element.js +12 -0
  2080. package/node_modules/linkedom/cjs/html/param-element.js +12 -0
  2081. package/node_modules/linkedom/cjs/html/picture-element.js +12 -0
  2082. package/node_modules/linkedom/cjs/html/pre-element.js +12 -0
  2083. package/node_modules/linkedom/cjs/html/progress-element.js +12 -0
  2084. package/node_modules/linkedom/cjs/html/quote-element.js +12 -0
  2085. package/node_modules/linkedom/cjs/html/script-element.js +80 -0
  2086. package/node_modules/linkedom/cjs/html/select-element.js +45 -0
  2087. package/node_modules/linkedom/cjs/html/slot-element.js +62 -0
  2088. package/node_modules/linkedom/cjs/html/source-element.js +34 -0
  2089. package/node_modules/linkedom/cjs/html/span-element.js +12 -0
  2090. package/node_modules/linkedom/cjs/html/style-element.js +53 -0
  2091. package/node_modules/linkedom/cjs/html/table-caption-element.js +12 -0
  2092. package/node_modules/linkedom/cjs/html/table-cell-element.js +12 -0
  2093. package/node_modules/linkedom/cjs/html/table-element.js +12 -0
  2094. package/node_modules/linkedom/cjs/html/table-row-element.js +12 -0
  2095. package/node_modules/linkedom/cjs/html/template-element.js +31 -0
  2096. package/node_modules/linkedom/cjs/html/text-area-element.js +37 -0
  2097. package/node_modules/linkedom/cjs/html/text-element.js +16 -0
  2098. package/node_modules/linkedom/cjs/html/time-element.js +12 -0
  2099. package/node_modules/linkedom/cjs/html/title-element.js +19 -0
  2100. package/node_modules/linkedom/cjs/html/track-element.js +12 -0
  2101. package/node_modules/linkedom/cjs/html/u-list-element.js +12 -0
  2102. package/node_modules/linkedom/cjs/html/unknown-element.js +12 -0
  2103. package/node_modules/linkedom/cjs/html/video-element.js +12 -0
  2104. package/node_modules/linkedom/cjs/index.js +48 -0
  2105. package/node_modules/linkedom/cjs/interface/attr.js +59 -0
  2106. package/node_modules/linkedom/cjs/interface/cdata-section.js +22 -0
  2107. package/node_modules/linkedom/cjs/interface/character-data.js +86 -0
  2108. package/node_modules/linkedom/cjs/interface/comment.js +22 -0
  2109. package/node_modules/linkedom/cjs/interface/css-style-declaration.js +130 -0
  2110. package/node_modules/linkedom/cjs/interface/custom-element-registry.js +212 -0
  2111. package/node_modules/linkedom/cjs/interface/custom-event.js +21 -0
  2112. package/node_modules/linkedom/cjs/interface/document-fragment.js +13 -0
  2113. package/node_modules/linkedom/cjs/interface/document-type.js +43 -0
  2114. package/node_modules/linkedom/cjs/interface/document.js +290 -0
  2115. package/node_modules/linkedom/cjs/interface/element.js +513 -0
  2116. package/node_modules/linkedom/cjs/interface/event-target.js +89 -0
  2117. package/node_modules/linkedom/cjs/interface/event.js +65 -0
  2118. package/node_modules/linkedom/cjs/interface/html-collection.js +4 -0
  2119. package/node_modules/linkedom/cjs/interface/image.js +23 -0
  2120. package/node_modules/linkedom/cjs/interface/input-event.js +24 -0
  2121. package/node_modules/linkedom/cjs/interface/mutation-observer.js +176 -0
  2122. package/node_modules/linkedom/cjs/interface/named-node-map.js +44 -0
  2123. package/node_modules/linkedom/cjs/interface/node-filter.js +17 -0
  2124. package/node_modules/linkedom/cjs/interface/node-list.js +10 -0
  2125. package/node_modules/linkedom/cjs/interface/node.js +206 -0
  2126. package/node_modules/linkedom/cjs/interface/range.js +131 -0
  2127. package/node_modules/linkedom/cjs/interface/shadow-root.js +22 -0
  2128. package/node_modules/linkedom/cjs/interface/text.js +44 -0
  2129. package/node_modules/linkedom/cjs/interface/tree-walker.js +60 -0
  2130. package/node_modules/linkedom/cjs/mixin/child-node.js +67 -0
  2131. package/node_modules/linkedom/cjs/mixin/inner-html.js +39 -0
  2132. package/node_modules/linkedom/cjs/mixin/non-document-type-child-node.js +23 -0
  2133. package/node_modules/linkedom/cjs/mixin/non-element-parent-node.js +44 -0
  2134. package/node_modules/linkedom/cjs/mixin/parent-node.js +295 -0
  2135. package/node_modules/linkedom/cjs/package.json +1 -0
  2136. package/node_modules/linkedom/cjs/shared/attributes.js +111 -0
  2137. package/node_modules/linkedom/cjs/shared/cache.js +33 -0
  2138. package/node_modules/linkedom/cjs/shared/constants.js +56 -0
  2139. package/node_modules/linkedom/cjs/shared/facades.js +91 -0
  2140. package/node_modules/linkedom/cjs/shared/html-classes.js +210 -0
  2141. package/node_modules/linkedom/cjs/shared/jsdon.js +79 -0
  2142. package/node_modules/linkedom/cjs/shared/matches.js +121 -0
  2143. package/node_modules/linkedom/cjs/shared/mime.js +33 -0
  2144. package/node_modules/linkedom/cjs/shared/node.js +53 -0
  2145. package/node_modules/linkedom/cjs/shared/object.js +18 -0
  2146. package/node_modules/linkedom/cjs/shared/parse-from-string.js +125 -0
  2147. package/node_modules/linkedom/cjs/shared/parse-json.js +134 -0
  2148. package/node_modules/linkedom/cjs/shared/register-html-class.js +11 -0
  2149. package/node_modules/linkedom/cjs/shared/shadow-roots.js +3 -0
  2150. package/node_modules/linkedom/cjs/shared/symbols.js +88 -0
  2151. package/node_modules/linkedom/cjs/shared/text-escaper.js +24 -0
  2152. package/node_modules/linkedom/cjs/shared/utils.js +49 -0
  2153. package/node_modules/linkedom/cjs/svg/document.js +14 -0
  2154. package/node_modules/linkedom/cjs/svg/element.js +60 -0
  2155. package/node_modules/linkedom/cjs/xml/document.js +14 -0
  2156. package/node_modules/linkedom/commonjs/canvas-shim.cjs +16 -0
  2157. package/node_modules/linkedom/commonjs/canvas.cjs +7 -0
  2158. package/node_modules/linkedom/commonjs/perf_hooks.cjs +9 -0
  2159. package/node_modules/linkedom/esm/cached.js +151 -0
  2160. package/node_modules/linkedom/esm/dom/parser.js +39 -0
  2161. package/node_modules/linkedom/esm/dom/string-map.js +45 -0
  2162. package/node_modules/linkedom/esm/dom/token-list.js +101 -0
  2163. package/node_modules/linkedom/esm/html/anchor-element.js +34 -0
  2164. package/node_modules/linkedom/esm/html/area-element.js +10 -0
  2165. package/node_modules/linkedom/esm/html/audio-element.js +10 -0
  2166. package/node_modules/linkedom/esm/html/base-element.js +10 -0
  2167. package/node_modules/linkedom/esm/html/body-element.js +10 -0
  2168. package/node_modules/linkedom/esm/html/br-element.js +10 -0
  2169. package/node_modules/linkedom/esm/html/button-element.js +30 -0
  2170. package/node_modules/linkedom/esm/html/canvas-element.js +52 -0
  2171. package/node_modules/linkedom/esm/html/d-list-element.js +10 -0
  2172. package/node_modules/linkedom/esm/html/data-element.js +10 -0
  2173. package/node_modules/linkedom/esm/html/data-list-element.js +10 -0
  2174. package/node_modules/linkedom/esm/html/details-element.js +10 -0
  2175. package/node_modules/linkedom/esm/html/directory-element.js +10 -0
  2176. package/node_modules/linkedom/esm/html/div-element.js +10 -0
  2177. package/node_modules/linkedom/esm/html/document.js +103 -0
  2178. package/node_modules/linkedom/esm/html/element.js +319 -0
  2179. package/node_modules/linkedom/esm/html/embed-element.js +10 -0
  2180. package/node_modules/linkedom/esm/html/field-set-element.js +10 -0
  2181. package/node_modules/linkedom/esm/html/font-element.js +10 -0
  2182. package/node_modules/linkedom/esm/html/form-element.js +10 -0
  2183. package/node_modules/linkedom/esm/html/frame-element.js +10 -0
  2184. package/node_modules/linkedom/esm/html/frame-set-element.js +10 -0
  2185. package/node_modules/linkedom/esm/html/head-element.js +10 -0
  2186. package/node_modules/linkedom/esm/html/heading-element.js +18 -0
  2187. package/node_modules/linkedom/esm/html/hr-element.js +10 -0
  2188. package/node_modules/linkedom/esm/html/html-element.js +10 -0
  2189. package/node_modules/linkedom/esm/html/i-frame-element.js +42 -0
  2190. package/node_modules/linkedom/esm/html/image-element.js +42 -0
  2191. package/node_modules/linkedom/esm/html/input-element.js +39 -0
  2192. package/node_modules/linkedom/esm/html/label-element.js +10 -0
  2193. package/node_modules/linkedom/esm/html/legend-element.js +10 -0
  2194. package/node_modules/linkedom/esm/html/li-element.js +10 -0
  2195. package/node_modules/linkedom/esm/html/link-element.js +40 -0
  2196. package/node_modules/linkedom/esm/html/map-element.js +10 -0
  2197. package/node_modules/linkedom/esm/html/marquee-element.js +10 -0
  2198. package/node_modules/linkedom/esm/html/media-element.js +10 -0
  2199. package/node_modules/linkedom/esm/html/menu-element.js +10 -0
  2200. package/node_modules/linkedom/esm/html/meta-element.js +34 -0
  2201. package/node_modules/linkedom/esm/html/meter-element.js +10 -0
  2202. package/node_modules/linkedom/esm/html/mod-element.js +10 -0
  2203. package/node_modules/linkedom/esm/html/o-list-element.js +10 -0
  2204. package/node_modules/linkedom/esm/html/object-element.js +10 -0
  2205. package/node_modules/linkedom/esm/html/opt-group-element.js +10 -0
  2206. package/node_modules/linkedom/esm/html/option-element.js +31 -0
  2207. package/node_modules/linkedom/esm/html/output-element.js +10 -0
  2208. package/node_modules/linkedom/esm/html/paragraph-element.js +10 -0
  2209. package/node_modules/linkedom/esm/html/param-element.js +10 -0
  2210. package/node_modules/linkedom/esm/html/picture-element.js +10 -0
  2211. package/node_modules/linkedom/esm/html/pre-element.js +10 -0
  2212. package/node_modules/linkedom/esm/html/progress-element.js +10 -0
  2213. package/node_modules/linkedom/esm/html/quote-element.js +10 -0
  2214. package/node_modules/linkedom/esm/html/script-element.js +79 -0
  2215. package/node_modules/linkedom/esm/html/select-element.js +44 -0
  2216. package/node_modules/linkedom/esm/html/slot-element.js +61 -0
  2217. package/node_modules/linkedom/esm/html/source-element.js +33 -0
  2218. package/node_modules/linkedom/esm/html/span-element.js +10 -0
  2219. package/node_modules/linkedom/esm/html/style-element.js +52 -0
  2220. package/node_modules/linkedom/esm/html/table-caption-element.js +10 -0
  2221. package/node_modules/linkedom/esm/html/table-cell-element.js +10 -0
  2222. package/node_modules/linkedom/esm/html/table-element.js +10 -0
  2223. package/node_modules/linkedom/esm/html/table-row-element.js +10 -0
  2224. package/node_modules/linkedom/esm/html/template-element.js +30 -0
  2225. package/node_modules/linkedom/esm/html/text-area-element.js +36 -0
  2226. package/node_modules/linkedom/esm/html/text-element.js +14 -0
  2227. package/node_modules/linkedom/esm/html/time-element.js +10 -0
  2228. package/node_modules/linkedom/esm/html/title-element.js +18 -0
  2229. package/node_modules/linkedom/esm/html/track-element.js +10 -0
  2230. package/node_modules/linkedom/esm/html/u-list-element.js +10 -0
  2231. package/node_modules/linkedom/esm/html/unknown-element.js +10 -0
  2232. package/node_modules/linkedom/esm/html/video-element.js +10 -0
  2233. package/node_modules/linkedom/esm/index.js +28 -0
  2234. package/node_modules/linkedom/esm/interface/attr.js +57 -0
  2235. package/node_modules/linkedom/esm/interface/cdata-section.js +20 -0
  2236. package/node_modules/linkedom/esm/interface/character-data.js +84 -0
  2237. package/node_modules/linkedom/esm/interface/comment.js +20 -0
  2238. package/node_modules/linkedom/esm/interface/css-style-declaration.js +128 -0
  2239. package/node_modules/linkedom/esm/interface/custom-element-registry.js +205 -0
  2240. package/node_modules/linkedom/esm/interface/custom-event.js +19 -0
  2241. package/node_modules/linkedom/esm/interface/document-fragment.js +11 -0
  2242. package/node_modules/linkedom/esm/interface/document-type.js +41 -0
  2243. package/node_modules/linkedom/esm/interface/document.js +289 -0
  2244. package/node_modules/linkedom/esm/interface/element.js +514 -0
  2245. package/node_modules/linkedom/esm/interface/event-target.js +88 -0
  2246. package/node_modules/linkedom/esm/interface/event.js +64 -0
  2247. package/node_modules/linkedom/esm/interface/html-collection.js +3 -0
  2248. package/node_modules/linkedom/esm/interface/image.js +21 -0
  2249. package/node_modules/linkedom/esm/interface/input-event.js +22 -0
  2250. package/node_modules/linkedom/esm/interface/mutation-observer.js +172 -0
  2251. package/node_modules/linkedom/esm/interface/named-node-map.js +42 -0
  2252. package/node_modules/linkedom/esm/interface/node-filter.js +15 -0
  2253. package/node_modules/linkedom/esm/interface/node-list.js +8 -0
  2254. package/node_modules/linkedom/esm/interface/node.js +204 -0
  2255. package/node_modules/linkedom/esm/interface/range.js +129 -0
  2256. package/node_modules/linkedom/esm/interface/shadow-root.js +20 -0
  2257. package/node_modules/linkedom/esm/interface/text.js +42 -0
  2258. package/node_modules/linkedom/esm/interface/tree-walker.js +58 -0
  2259. package/node_modules/linkedom/esm/mixin/child-node.js +62 -0
  2260. package/node_modules/linkedom/esm/mixin/inner-html.js +36 -0
  2261. package/node_modules/linkedom/esm/mixin/non-document-type-child-node.js +20 -0
  2262. package/node_modules/linkedom/esm/mixin/non-element-parent-node.js +42 -0
  2263. package/node_modules/linkedom/esm/mixin/parent-node.js +293 -0
  2264. package/node_modules/linkedom/esm/shared/attributes.js +104 -0
  2265. package/node_modules/linkedom/esm/shared/cache.js +26 -0
  2266. package/node_modules/linkedom/esm/shared/constants.js +33 -0
  2267. package/node_modules/linkedom/esm/shared/facades.js +77 -0
  2268. package/node_modules/linkedom/esm/shared/html-classes.js +210 -0
  2269. package/node_modules/linkedom/esm/shared/jsdon.js +73 -0
  2270. package/node_modules/linkedom/esm/shared/matches.js +118 -0
  2271. package/node_modules/linkedom/esm/shared/mime.js +31 -0
  2272. package/node_modules/linkedom/esm/shared/node.js +48 -0
  2273. package/node_modules/linkedom/esm/shared/object.js +19 -0
  2274. package/node_modules/linkedom/esm/shared/parse-from-string.js +122 -0
  2275. package/node_modules/linkedom/esm/shared/parse-json.js +131 -0
  2276. package/node_modules/linkedom/esm/shared/register-html-class.js +8 -0
  2277. package/node_modules/linkedom/esm/shared/shadow-roots.js +1 -0
  2278. package/node_modules/linkedom/esm/shared/symbols.js +65 -0
  2279. package/node_modules/linkedom/esm/shared/text-escaper.js +22 -0
  2280. package/node_modules/linkedom/esm/shared/utils.js +40 -0
  2281. package/node_modules/linkedom/esm/svg/document.js +12 -0
  2282. package/node_modules/linkedom/esm/svg/element.js +58 -0
  2283. package/node_modules/linkedom/esm/xml/document.js +12 -0
  2284. package/node_modules/linkedom/package.json +84 -0
  2285. package/node_modules/linkedom/tsconfig.json +13 -0
  2286. package/node_modules/linkedom/types/commonjs/canvas-shim.d.cts +9 -0
  2287. package/node_modules/linkedom/types/commonjs/canvas.d.cts +2 -0
  2288. package/node_modules/linkedom/types/commonjs/perf_hooks.d.cts +1 -0
  2289. package/node_modules/linkedom/types/dom/parser.d.ts +24 -0
  2290. package/node_modules/linkedom/types/dom/string-map.d.ts +9 -0
  2291. package/node_modules/linkedom/types/dom/token-list.d.ts +32 -0
  2292. package/node_modules/linkedom/types/esm/dom/parser.d.ts +24 -0
  2293. package/node_modules/linkedom/types/esm/dom/string-map.d.ts +9 -0
  2294. package/node_modules/linkedom/types/esm/dom/token-list.d.ts +36 -0
  2295. package/node_modules/linkedom/types/esm/html/anchor-element.d.ts +14 -0
  2296. package/node_modules/linkedom/types/esm/html/area-element.d.ts +6 -0
  2297. package/node_modules/linkedom/types/esm/html/audio-element.d.ts +6 -0
  2298. package/node_modules/linkedom/types/esm/html/base-element.d.ts +6 -0
  2299. package/node_modules/linkedom/types/esm/html/body-element.d.ts +6 -0
  2300. package/node_modules/linkedom/types/esm/html/br-element.d.ts +6 -0
  2301. package/node_modules/linkedom/types/esm/html/button-element.d.ts +12 -0
  2302. package/node_modules/linkedom/types/esm/html/canvas-element.d.ts +14 -0
  2303. package/node_modules/linkedom/types/esm/html/d-list-element.d.ts +6 -0
  2304. package/node_modules/linkedom/types/esm/html/data-element.d.ts +6 -0
  2305. package/node_modules/linkedom/types/esm/html/data-list-element.d.ts +6 -0
  2306. package/node_modules/linkedom/types/esm/html/details-element.d.ts +6 -0
  2307. package/node_modules/linkedom/types/esm/html/directory-element.d.ts +6 -0
  2308. package/node_modules/linkedom/types/esm/html/div-element.d.ts +6 -0
  2309. package/node_modules/linkedom/types/esm/html/document.d.ts +23 -0
  2310. package/node_modules/linkedom/types/esm/html/element.d.ts +168 -0
  2311. package/node_modules/linkedom/types/esm/html/embed-element.d.ts +6 -0
  2312. package/node_modules/linkedom/types/esm/html/field-set-element.d.ts +6 -0
  2313. package/node_modules/linkedom/types/esm/html/font-element.d.ts +6 -0
  2314. package/node_modules/linkedom/types/esm/html/form-element.d.ts +6 -0
  2315. package/node_modules/linkedom/types/esm/html/frame-element.d.ts +6 -0
  2316. package/node_modules/linkedom/types/esm/html/frame-set-element.d.ts +6 -0
  2317. package/node_modules/linkedom/types/esm/html/head-element.d.ts +6 -0
  2318. package/node_modules/linkedom/types/esm/html/heading-element.d.ts +6 -0
  2319. package/node_modules/linkedom/types/esm/html/hr-element.d.ts +6 -0
  2320. package/node_modules/linkedom/types/esm/html/html-element.d.ts +6 -0
  2321. package/node_modules/linkedom/types/esm/html/i-frame-element.d.ts +20 -0
  2322. package/node_modules/linkedom/types/esm/html/image-element.d.ts +18 -0
  2323. package/node_modules/linkedom/types/esm/html/input-element.d.ts +18 -0
  2324. package/node_modules/linkedom/types/esm/html/label-element.d.ts +6 -0
  2325. package/node_modules/linkedom/types/esm/html/legend-element.d.ts +6 -0
  2326. package/node_modules/linkedom/types/esm/html/li-element.d.ts +6 -0
  2327. package/node_modules/linkedom/types/esm/html/link-element.d.ts +18 -0
  2328. package/node_modules/linkedom/types/esm/html/map-element.d.ts +6 -0
  2329. package/node_modules/linkedom/types/esm/html/marquee-element.d.ts +6 -0
  2330. package/node_modules/linkedom/types/esm/html/media-element.d.ts +6 -0
  2331. package/node_modules/linkedom/types/esm/html/menu-element.d.ts +6 -0
  2332. package/node_modules/linkedom/types/esm/html/meta-element.d.ts +16 -0
  2333. package/node_modules/linkedom/types/esm/html/meter-element.d.ts +6 -0
  2334. package/node_modules/linkedom/types/esm/html/mod-element.d.ts +6 -0
  2335. package/node_modules/linkedom/types/esm/html/o-list-element.d.ts +6 -0
  2336. package/node_modules/linkedom/types/esm/html/object-element.d.ts +6 -0
  2337. package/node_modules/linkedom/types/esm/html/opt-group-element.d.ts +6 -0
  2338. package/node_modules/linkedom/types/esm/html/option-element.d.ts +10 -0
  2339. package/node_modules/linkedom/types/esm/html/output-element.d.ts +6 -0
  2340. package/node_modules/linkedom/types/esm/html/paragraph-element.d.ts +6 -0
  2341. package/node_modules/linkedom/types/esm/html/param-element.d.ts +6 -0
  2342. package/node_modules/linkedom/types/esm/html/picture-element.d.ts +6 -0
  2343. package/node_modules/linkedom/types/esm/html/pre-element.d.ts +6 -0
  2344. package/node_modules/linkedom/types/esm/html/progress-element.d.ts +6 -0
  2345. package/node_modules/linkedom/types/esm/html/quote-element.d.ts +6 -0
  2346. package/node_modules/linkedom/types/esm/html/script-element.d.ts +22 -0
  2347. package/node_modules/linkedom/types/esm/html/select-element.d.ts +13 -0
  2348. package/node_modules/linkedom/types/esm/html/slot-element.d.ts +11 -0
  2349. package/node_modules/linkedom/types/esm/html/source-element.d.ts +14 -0
  2350. package/node_modules/linkedom/types/esm/html/span-element.d.ts +6 -0
  2351. package/node_modules/linkedom/types/esm/html/style-element.d.ts +11 -0
  2352. package/node_modules/linkedom/types/esm/html/table-caption-element.d.ts +6 -0
  2353. package/node_modules/linkedom/types/esm/html/table-cell-element.d.ts +6 -0
  2354. package/node_modules/linkedom/types/esm/html/table-element.d.ts +6 -0
  2355. package/node_modules/linkedom/types/esm/html/table-row-element.d.ts +6 -0
  2356. package/node_modules/linkedom/types/esm/html/template-element.d.ts +10 -0
  2357. package/node_modules/linkedom/types/esm/html/text-area-element.d.ts +16 -0
  2358. package/node_modules/linkedom/types/esm/html/text-element.d.ts +4 -0
  2359. package/node_modules/linkedom/types/esm/html/time-element.d.ts +6 -0
  2360. package/node_modules/linkedom/types/esm/html/title-element.d.ts +6 -0
  2361. package/node_modules/linkedom/types/esm/html/track-element.d.ts +6 -0
  2362. package/node_modules/linkedom/types/esm/html/u-list-element.d.ts +6 -0
  2363. package/node_modules/linkedom/types/esm/html/unknown-element.d.ts +6 -0
  2364. package/node_modules/linkedom/types/esm/html/video-element.d.ts +6 -0
  2365. package/node_modules/linkedom/types/esm/index.d.ts +13 -0
  2366. package/node_modules/linkedom/types/esm/interface/attr.d.ts +17 -0
  2367. package/node_modules/linkedom/types/esm/interface/cdata-section.d.ts +8 -0
  2368. package/node_modules/linkedom/types/esm/interface/character-data.d.ts +26 -0
  2369. package/node_modules/linkedom/types/esm/interface/comment.d.ts +8 -0
  2370. package/node_modules/linkedom/types/esm/interface/css-style-declaration.d.ts +19 -0
  2371. package/node_modules/linkedom/types/esm/interface/custom-element-registry.d.ts +54 -0
  2372. package/node_modules/linkedom/types/esm/interface/custom-event.d.ts +7 -0
  2373. package/node_modules/linkedom/types/esm/interface/document-fragment.d.ts +7 -0
  2374. package/node_modules/linkedom/types/esm/interface/document-type.d.ts +12 -0
  2375. package/node_modules/linkedom/types/esm/interface/document.d.ts +71 -0
  2376. package/node_modules/linkedom/types/esm/interface/element.d.ts +81 -0
  2377. package/node_modules/linkedom/types/esm/interface/event-target.d.ts +13 -0
  2378. package/node_modules/linkedom/types/esm/interface/event.d.ts +32 -0
  2379. package/node_modules/linkedom/types/esm/interface/image.d.ts +214 -0
  2380. package/node_modules/linkedom/types/esm/interface/input-event.d.ts +11 -0
  2381. package/node_modules/linkedom/types/esm/interface/mutation-observer.d.ts +40 -0
  2382. package/node_modules/linkedom/types/esm/interface/named-node-map.d.ts +14 -0
  2383. package/node_modules/linkedom/types/esm/interface/node-filter.d.ts +7 -0
  2384. package/node_modules/linkedom/types/esm/interface/node-list.d.ts +9 -0
  2385. package/node_modules/linkedom/types/esm/interface/node.d.ts +86 -0
  2386. package/node_modules/linkedom/types/esm/interface/range.d.ts +23 -0
  2387. package/node_modules/linkedom/types/esm/interface/shadow-root.d.ts +10 -0
  2388. package/node_modules/linkedom/types/esm/interface/text.d.ts +9 -0
  2389. package/node_modules/linkedom/types/esm/interface/tree-walker.d.ts +15 -0
  2390. package/node_modules/linkedom/types/esm/mixin/child-node.d.ts +4 -0
  2391. package/node_modules/linkedom/types/esm/mixin/inner-html.d.ts +2 -0
  2392. package/node_modules/linkedom/types/esm/mixin/non-document-type-child-node.d.ts +2 -0
  2393. package/node_modules/linkedom/types/esm/mixin/non-element-parent-node.d.ts +6 -0
  2394. package/node_modules/linkedom/types/esm/mixin/parent-node.d.ts +57 -0
  2395. package/node_modules/linkedom/types/esm/shared/attributes.d.ts +15 -0
  2396. package/node_modules/linkedom/types/esm/shared/constants.d.ts +22 -0
  2397. package/node_modules/linkedom/types/esm/shared/facades.d.ts +25 -0
  2398. package/node_modules/linkedom/types/esm/shared/html-classes.d.ts +139 -0
  2399. package/node_modules/linkedom/types/esm/shared/jsdon.d.ts +9 -0
  2400. package/node_modules/linkedom/types/esm/shared/matches.d.ts +2 -0
  2401. package/node_modules/linkedom/types/esm/shared/mime.d.ts +35 -0
  2402. package/node_modules/linkedom/types/esm/shared/node.d.ts +12 -0
  2403. package/node_modules/linkedom/types/esm/shared/object.d.ts +25 -0
  2404. package/node_modules/linkedom/types/esm/shared/parse-from-string.d.ts +2 -0
  2405. package/node_modules/linkedom/types/esm/shared/parse-json.d.ts +7 -0
  2406. package/node_modules/linkedom/types/esm/shared/register-html-class.d.ts +2 -0
  2407. package/node_modules/linkedom/types/esm/shared/shadow-roots.d.ts +1 -0
  2408. package/node_modules/linkedom/types/esm/shared/symbols.d.ts +22 -0
  2409. package/node_modules/linkedom/types/esm/shared/text-escaper.d.ts +1 -0
  2410. package/node_modules/linkedom/types/esm/shared/utils.d.ts +15 -0
  2411. package/node_modules/linkedom/types/esm/svg/document.d.ts +7 -0
  2412. package/node_modules/linkedom/types/esm/svg/element.d.ts +8 -0
  2413. package/node_modules/linkedom/types/esm/xml/document.d.ts +7 -0
  2414. package/node_modules/linkedom/types/html/anchor-element.d.ts +14 -0
  2415. package/node_modules/linkedom/types/html/area-element.d.ts +6 -0
  2416. package/node_modules/linkedom/types/html/audio-element.d.ts +6 -0
  2417. package/node_modules/linkedom/types/html/base-element.d.ts +6 -0
  2418. package/node_modules/linkedom/types/html/body-element.d.ts +6 -0
  2419. package/node_modules/linkedom/types/html/br-element.d.ts +6 -0
  2420. package/node_modules/linkedom/types/html/button-element.d.ts +12 -0
  2421. package/node_modules/linkedom/types/html/canvas-element.d.ts +14 -0
  2422. package/node_modules/linkedom/types/html/d-list-element.d.ts +6 -0
  2423. package/node_modules/linkedom/types/html/data-element.d.ts +6 -0
  2424. package/node_modules/linkedom/types/html/data-list-element.d.ts +6 -0
  2425. package/node_modules/linkedom/types/html/details-element.d.ts +6 -0
  2426. package/node_modules/linkedom/types/html/directory-element.d.ts +6 -0
  2427. package/node_modules/linkedom/types/html/div-element.d.ts +6 -0
  2428. package/node_modules/linkedom/types/html/document.d.ts +22 -0
  2429. package/node_modules/linkedom/types/html/element.d.ts +168 -0
  2430. package/node_modules/linkedom/types/html/embed-element.d.ts +6 -0
  2431. package/node_modules/linkedom/types/html/field-set-element.d.ts +6 -0
  2432. package/node_modules/linkedom/types/html/font-element.d.ts +6 -0
  2433. package/node_modules/linkedom/types/html/form-element.d.ts +6 -0
  2434. package/node_modules/linkedom/types/html/frame-element.d.ts +6 -0
  2435. package/node_modules/linkedom/types/html/frame-set-element.d.ts +6 -0
  2436. package/node_modules/linkedom/types/html/head-element.d.ts +6 -0
  2437. package/node_modules/linkedom/types/html/heading-element.d.ts +6 -0
  2438. package/node_modules/linkedom/types/html/hr-element.d.ts +6 -0
  2439. package/node_modules/linkedom/types/html/html-element.d.ts +6 -0
  2440. package/node_modules/linkedom/types/html/i-frame-element.d.ts +6 -0
  2441. package/node_modules/linkedom/types/html/image-element.d.ts +18 -0
  2442. package/node_modules/linkedom/types/html/input-element.d.ts +16 -0
  2443. package/node_modules/linkedom/types/html/label-element.d.ts +6 -0
  2444. package/node_modules/linkedom/types/html/legend-element.d.ts +6 -0
  2445. package/node_modules/linkedom/types/html/li-element.d.ts +6 -0
  2446. package/node_modules/linkedom/types/html/link-element.d.ts +18 -0
  2447. package/node_modules/linkedom/types/html/map-element.d.ts +6 -0
  2448. package/node_modules/linkedom/types/html/marquee-element.d.ts +6 -0
  2449. package/node_modules/linkedom/types/html/media-element.d.ts +6 -0
  2450. package/node_modules/linkedom/types/html/menu-element.d.ts +6 -0
  2451. package/node_modules/linkedom/types/html/meta-element.d.ts +6 -0
  2452. package/node_modules/linkedom/types/html/meter-element.d.ts +6 -0
  2453. package/node_modules/linkedom/types/html/mod-element.d.ts +6 -0
  2454. package/node_modules/linkedom/types/html/o-list-element.d.ts +6 -0
  2455. package/node_modules/linkedom/types/html/object-element.d.ts +6 -0
  2456. package/node_modules/linkedom/types/html/opt-group-element.d.ts +6 -0
  2457. package/node_modules/linkedom/types/html/option-element.d.ts +6 -0
  2458. package/node_modules/linkedom/types/html/output-element.d.ts +6 -0
  2459. package/node_modules/linkedom/types/html/paragraph-element.d.ts +6 -0
  2460. package/node_modules/linkedom/types/html/param-element.d.ts +6 -0
  2461. package/node_modules/linkedom/types/html/picture-element.d.ts +6 -0
  2462. package/node_modules/linkedom/types/html/pre-element.d.ts +6 -0
  2463. package/node_modules/linkedom/types/html/progress-element.d.ts +6 -0
  2464. package/node_modules/linkedom/types/html/quote-element.d.ts +6 -0
  2465. package/node_modules/linkedom/types/html/script-element.d.ts +6 -0
  2466. package/node_modules/linkedom/types/html/select-element.d.ts +12 -0
  2467. package/node_modules/linkedom/types/html/slot-element.d.ts +6 -0
  2468. package/node_modules/linkedom/types/html/source-element.d.ts +14 -0
  2469. package/node_modules/linkedom/types/html/span-element.d.ts +6 -0
  2470. package/node_modules/linkedom/types/html/style-element.d.ts +9 -0
  2471. package/node_modules/linkedom/types/html/table-caption-element.d.ts +6 -0
  2472. package/node_modules/linkedom/types/html/table-cell-element.d.ts +6 -0
  2473. package/node_modules/linkedom/types/html/table-element.d.ts +6 -0
  2474. package/node_modules/linkedom/types/html/table-row-element.d.ts +6 -0
  2475. package/node_modules/linkedom/types/html/template-element.d.ts +10 -0
  2476. package/node_modules/linkedom/types/html/text-area-element.d.ts +16 -0
  2477. package/node_modules/linkedom/types/html/text-element.d.ts +3 -0
  2478. package/node_modules/linkedom/types/html/time-element.d.ts +6 -0
  2479. package/node_modules/linkedom/types/html/title-element.d.ts +6 -0
  2480. package/node_modules/linkedom/types/html/track-element.d.ts +6 -0
  2481. package/node_modules/linkedom/types/html/u-list-element.d.ts +6 -0
  2482. package/node_modules/linkedom/types/html/unknown-element.d.ts +6 -0
  2483. package/node_modules/linkedom/types/html/video-element.d.ts +6 -0
  2484. package/node_modules/linkedom/types/index.d.ts +12 -0
  2485. package/node_modules/linkedom/types/interface/attr.d.ts +16 -0
  2486. package/node_modules/linkedom/types/interface/character-data.d.ts +22 -0
  2487. package/node_modules/linkedom/types/interface/comment.d.ts +7 -0
  2488. package/node_modules/linkedom/types/interface/css-style-declaration.d.ts +10 -0
  2489. package/node_modules/linkedom/types/interface/custom-element-registry.d.ts +54 -0
  2490. package/node_modules/linkedom/types/interface/custom-event.d.ts +37 -0
  2491. package/node_modules/linkedom/types/interface/document-fragment.d.ts +7 -0
  2492. package/node_modules/linkedom/types/interface/document-type.d.ts +11 -0
  2493. package/node_modules/linkedom/types/interface/document.d.ts +60 -0
  2494. package/node_modules/linkedom/types/interface/element.d.ts +72 -0
  2495. package/node_modules/linkedom/types/interface/event-target.d.ts +13 -0
  2496. package/node_modules/linkedom/types/interface/event.d.ts +32 -0
  2497. package/node_modules/linkedom/types/interface/image.d.ts +199 -0
  2498. package/node_modules/linkedom/types/interface/input-event.d.ts +11 -0
  2499. package/node_modules/linkedom/types/interface/mutation-observer.d.ts +40 -0
  2500. package/node_modules/linkedom/types/interface/named-node-map.d.ts +14 -0
  2501. package/node_modules/linkedom/types/interface/node-list.d.ts +9 -0
  2502. package/node_modules/linkedom/types/interface/node.d.ts +78 -0
  2503. package/node_modules/linkedom/types/interface/range.d.ts +22 -0
  2504. package/node_modules/linkedom/types/interface/shadow-root.d.ts +9 -0
  2505. package/node_modules/linkedom/types/interface/text.d.ts +8 -0
  2506. package/node_modules/linkedom/types/interface/tree-walker.d.ts +15 -0
  2507. package/node_modules/linkedom/types/mixin/child-node.d.ts +4 -0
  2508. package/node_modules/linkedom/types/mixin/inner-html.d.ts +2 -0
  2509. package/node_modules/linkedom/types/mixin/non-document-type-child-node.d.ts +2 -0
  2510. package/node_modules/linkedom/types/mixin/non-element-parent-node.d.ts +5 -0
  2511. package/node_modules/linkedom/types/mixin/parent-node.d.ts +47 -0
  2512. package/node_modules/linkedom/types/shared/attributes.d.ts +21 -0
  2513. package/node_modules/linkedom/types/shared/cache.d.ts +7 -0
  2514. package/node_modules/linkedom/types/shared/constants.d.ts +19 -0
  2515. package/node_modules/linkedom/types/shared/facades.d.ts +23 -0
  2516. package/node_modules/linkedom/types/shared/html-classes.d.ts +139 -0
  2517. package/node_modules/linkedom/types/shared/jsdon.d.ts +9 -0
  2518. package/node_modules/linkedom/types/shared/matches.d.ts +2 -0
  2519. package/node_modules/linkedom/types/shared/mime.d.ts +35 -0
  2520. package/node_modules/linkedom/types/shared/node.d.ts +12 -0
  2521. package/node_modules/linkedom/types/shared/object.d.ts +25 -0
  2522. package/node_modules/linkedom/types/shared/parse-from-string.d.ts +2 -0
  2523. package/node_modules/linkedom/types/shared/parse-json.d.ts +7 -0
  2524. package/node_modules/linkedom/types/shared/register-html-class.d.ts +2 -0
  2525. package/node_modules/linkedom/types/shared/symbols.d.ts +20 -0
  2526. package/node_modules/linkedom/types/shared/text-escaper.d.ts +1 -0
  2527. package/node_modules/linkedom/types/shared/utils.d.ts +15 -0
  2528. package/node_modules/linkedom/types/svg/document.d.ts +7 -0
  2529. package/node_modules/linkedom/types/svg/element.d.ts +8 -0
  2530. package/node_modules/linkedom/types/xml/document.d.ts +7 -0
  2531. package/node_modules/linkedom/worker.js +12526 -0
  2532. package/node_modules/nth-check/LICENSE +11 -0
  2533. package/node_modules/nth-check/README.md +136 -0
  2534. package/node_modules/nth-check/lib/compile.d.ts +55 -0
  2535. package/node_modules/nth-check/lib/compile.d.ts.map +1 -0
  2536. package/node_modules/nth-check/lib/compile.js +121 -0
  2537. package/node_modules/nth-check/lib/compile.js.map +1 -0
  2538. package/node_modules/nth-check/lib/esm/compile.d.ts +55 -0
  2539. package/node_modules/nth-check/lib/esm/compile.d.ts.map +1 -0
  2540. package/node_modules/nth-check/lib/esm/compile.js +113 -0
  2541. package/node_modules/nth-check/lib/esm/compile.js.map +1 -0
  2542. package/node_modules/nth-check/lib/esm/index.d.ts +59 -0
  2543. package/node_modules/nth-check/lib/esm/index.d.ts.map +1 -0
  2544. package/node_modules/nth-check/lib/esm/index.js +63 -0
  2545. package/node_modules/nth-check/lib/esm/index.js.map +1 -0
  2546. package/node_modules/nth-check/lib/esm/package.json +1 -0
  2547. package/node_modules/nth-check/lib/esm/parse.d.ts +9 -0
  2548. package/node_modules/nth-check/lib/esm/parse.d.ts.map +1 -0
  2549. package/node_modules/nth-check/lib/esm/parse.js +73 -0
  2550. package/node_modules/nth-check/lib/esm/parse.js.map +1 -0
  2551. package/node_modules/nth-check/lib/index.d.ts +59 -0
  2552. package/node_modules/nth-check/lib/index.d.ts.map +1 -0
  2553. package/node_modules/nth-check/lib/index.js +70 -0
  2554. package/node_modules/nth-check/lib/index.js.map +1 -0
  2555. package/node_modules/nth-check/lib/parse.d.ts +9 -0
  2556. package/node_modules/nth-check/lib/parse.d.ts.map +1 -0
  2557. package/node_modules/nth-check/lib/parse.js +77 -0
  2558. package/node_modules/nth-check/lib/parse.js.map +1 -0
  2559. package/node_modules/nth-check/package.json +78 -0
  2560. package/node_modules/p-limit/index.d.ts +81 -0
  2561. package/node_modules/p-limit/index.js +104 -0
  2562. package/node_modules/p-limit/license +9 -0
  2563. package/node_modules/p-limit/package.json +58 -0
  2564. package/node_modules/p-limit/readme.md +129 -0
  2565. package/node_modules/pi-web-access/CHANGELOG.md +387 -0
  2566. package/node_modules/pi-web-access/LICENSE +21 -0
  2567. package/node_modules/pi-web-access/README.md +352 -0
  2568. package/node_modules/pi-web-access/activity.ts +101 -0
  2569. package/node_modules/pi-web-access/banner.png +0 -0
  2570. package/node_modules/pi-web-access/chrome-cookies.ts +322 -0
  2571. package/node_modules/pi-web-access/code-search.ts +107 -0
  2572. package/node_modules/pi-web-access/curator-page.ts +3359 -0
  2573. package/node_modules/pi-web-access/curator-server.ts +605 -0
  2574. package/node_modules/pi-web-access/exa.ts +520 -0
  2575. package/node_modules/pi-web-access/extract.ts +641 -0
  2576. package/node_modules/pi-web-access/gemini-api.ts +112 -0
  2577. package/node_modules/pi-web-access/gemini-search.ts +361 -0
  2578. package/node_modules/pi-web-access/gemini-url-context.ts +126 -0
  2579. package/node_modules/pi-web-access/gemini-web-config.ts +52 -0
  2580. package/node_modules/pi-web-access/gemini-web.ts +396 -0
  2581. package/node_modules/pi-web-access/github-api.ts +196 -0
  2582. package/node_modules/pi-web-access/github-extract.ts +634 -0
  2583. package/node_modules/pi-web-access/index.ts +2346 -0
  2584. package/node_modules/pi-web-access/package.json +45 -0
  2585. package/node_modules/pi-web-access/pdf-extract.ts +192 -0
  2586. package/node_modules/pi-web-access/perplexity.ts +195 -0
  2587. package/node_modules/pi-web-access/pi-web-fetch-demo.mp4 +0 -0
  2588. package/node_modules/pi-web-access/rsc-extract.ts +338 -0
  2589. package/node_modules/pi-web-access/skills/librarian/SKILL.md +195 -0
  2590. package/node_modules/pi-web-access/storage.ts +72 -0
  2591. package/node_modules/pi-web-access/summary-review.ts +276 -0
  2592. package/node_modules/pi-web-access/test/gemini-web-cookie-opt-in.test.mjs +41 -0
  2593. package/node_modules/pi-web-access/test/pdf-extract.test.mjs +95 -0
  2594. package/node_modules/pi-web-access/utils.ts +44 -0
  2595. package/node_modules/pi-web-access/video-extract.ts +378 -0
  2596. package/node_modules/pi-web-access/youtube-extract.ts +310 -0
  2597. package/node_modules/turndown/LICENSE +21 -0
  2598. package/node_modules/turndown/README.md +234 -0
  2599. package/node_modules/turndown/dist/turndown.js +800 -0
  2600. package/node_modules/turndown/lib/turndown.browser.cjs.js +797 -0
  2601. package/node_modules/turndown/lib/turndown.browser.es.js +795 -0
  2602. package/node_modules/turndown/lib/turndown.browser.umd.js +803 -0
  2603. package/node_modules/turndown/lib/turndown.cjs.js +774 -0
  2604. package/node_modules/turndown/lib/turndown.es.js +772 -0
  2605. package/node_modules/turndown/lib/turndown.umd.js +780 -0
  2606. package/node_modules/turndown/package.json +59 -0
  2607. package/node_modules/uhyphen/LICENSE +15 -0
  2608. package/node_modules/uhyphen/README.md +13 -0
  2609. package/node_modules/uhyphen/cjs/index.js +3 -0
  2610. package/node_modules/uhyphen/cjs/package.json +1 -0
  2611. package/node_modules/uhyphen/es.js +1 -0
  2612. package/node_modules/uhyphen/esm/index.js +2 -0
  2613. package/node_modules/uhyphen/index.js +14 -0
  2614. package/node_modules/uhyphen/min.js +1 -0
  2615. package/node_modules/uhyphen/package.json +52 -0
  2616. package/node_modules/unpdf/LICENSE +21 -0
  2617. package/node_modules/unpdf/README.md +365 -0
  2618. package/node_modules/unpdf/dist/index.cjs +429 -0
  2619. package/node_modules/unpdf/dist/index.d.cts +182 -0
  2620. package/node_modules/unpdf/dist/index.d.mts +182 -0
  2621. package/node_modules/unpdf/dist/index.d.ts +182 -0
  2622. package/node_modules/unpdf/dist/index.mjs +416 -0
  2623. package/node_modules/unpdf/dist/pdfjs.d.mts +1 -0
  2624. package/node_modules/unpdf/dist/pdfjs.d.ts +1 -0
  2625. package/node_modules/unpdf/dist/pdfjs.mjs +107 -0
  2626. package/node_modules/unpdf/dist/types/src/display/annotation_layer.d.ts +274 -0
  2627. package/node_modules/unpdf/dist/types/src/display/annotation_storage.d.ts +94 -0
  2628. package/node_modules/unpdf/dist/types/src/display/api.d.ts +1619 -0
  2629. package/node_modules/unpdf/dist/types/src/display/api_utils.d.ts +13 -0
  2630. package/node_modules/unpdf/dist/types/src/display/binary_data_factory.d.ts +26 -0
  2631. package/node_modules/unpdf/dist/types/src/display/canvas.d.ts +210 -0
  2632. package/node_modules/unpdf/dist/types/src/display/canvas_dependency_tracker.d.ts +216 -0
  2633. package/node_modules/unpdf/dist/types/src/display/canvas_factory.d.ts +29 -0
  2634. package/node_modules/unpdf/dist/types/src/display/content_disposition.d.ts +7 -0
  2635. package/node_modules/unpdf/dist/types/src/display/display_utils.d.ts +281 -0
  2636. package/node_modules/unpdf/dist/types/src/display/draw_layer.d.ts +22 -0
  2637. package/node_modules/unpdf/dist/types/src/display/editor/alt_text.d.ts +34 -0
  2638. package/node_modules/unpdf/dist/types/src/display/editor/annotation_editor_layer.d.ts +227 -0
  2639. package/node_modules/unpdf/dist/types/src/display/editor/color_picker.d.ts +39 -0
  2640. package/node_modules/unpdf/dist/types/src/display/editor/comment.d.ts +59 -0
  2641. package/node_modules/unpdf/dist/types/src/display/editor/draw.d.ts +117 -0
  2642. package/node_modules/unpdf/dist/types/src/display/editor/drawers/contour.d.ts +3 -0
  2643. package/node_modules/unpdf/dist/types/src/display/editor/drawers/freedraw.d.ts +32 -0
  2644. package/node_modules/unpdf/dist/types/src/display/editor/drawers/highlight.d.ts +37 -0
  2645. package/node_modules/unpdf/dist/types/src/display/editor/drawers/inkdraw.d.ts +129 -0
  2646. package/node_modules/unpdf/dist/types/src/display/editor/drawers/outline.d.ts +19 -0
  2647. package/node_modules/unpdf/dist/types/src/display/editor/drawers/signaturedraw.d.ts +79 -0
  2648. package/node_modules/unpdf/dist/types/src/display/editor/editor.d.ts +578 -0
  2649. package/node_modules/unpdf/dist/types/src/display/editor/freetext.d.ts +63 -0
  2650. package/node_modules/unpdf/dist/types/src/display/editor/highlight.d.ts +76 -0
  2651. package/node_modules/unpdf/dist/types/src/display/editor/ink.d.ts +42 -0
  2652. package/node_modules/unpdf/dist/types/src/display/editor/signature.d.ts +77 -0
  2653. package/node_modules/unpdf/dist/types/src/display/editor/stamp.d.ts +49 -0
  2654. package/node_modules/unpdf/dist/types/src/display/editor/toolbar.d.ts +26 -0
  2655. package/node_modules/unpdf/dist/types/src/display/editor/tools.d.ts +484 -0
  2656. package/node_modules/unpdf/dist/types/src/display/fetch_stream.d.ts +7 -0
  2657. package/node_modules/unpdf/dist/types/src/display/filter_factory.d.ts +29 -0
  2658. package/node_modules/unpdf/dist/types/src/display/font_loader.d.ts +66 -0
  2659. package/node_modules/unpdf/dist/types/src/display/metadata.d.ts +10 -0
  2660. package/node_modules/unpdf/dist/types/src/display/network.d.ts +20 -0
  2661. package/node_modules/unpdf/dist/types/src/display/network_stream.d.ts +2 -0
  2662. package/node_modules/unpdf/dist/types/src/display/network_utils.d.ts +15 -0
  2663. package/node_modules/unpdf/dist/types/src/display/node_stream.d.ts +4 -0
  2664. package/node_modules/unpdf/dist/types/src/display/node_utils.d.ts +18 -0
  2665. package/node_modules/unpdf/dist/types/src/display/obj_bin_transform_display.d.ts +67 -0
  2666. package/node_modules/unpdf/dist/types/src/display/optional_content_config.d.ts +18 -0
  2667. package/node_modules/unpdf/dist/types/src/display/pages_mapper.d.ts +72 -0
  2668. package/node_modules/unpdf/dist/types/src/display/pattern_helper.d.ts +80 -0
  2669. package/node_modules/unpdf/dist/types/src/display/pdf_objects.d.ts +40 -0
  2670. package/node_modules/unpdf/dist/types/src/display/svg_factory.d.ts +14 -0
  2671. package/node_modules/unpdf/dist/types/src/display/text_layer.d.ts +91 -0
  2672. package/node_modules/unpdf/dist/types/src/display/text_layer_images.d.ts +10 -0
  2673. package/node_modules/unpdf/dist/types/src/display/touch_manager.d.ts +18 -0
  2674. package/node_modules/unpdf/dist/types/src/display/transport_stream.d.ts +11 -0
  2675. package/node_modules/unpdf/dist/types/src/display/webgpu_mesh.d.ts +3 -0
  2676. package/node_modules/unpdf/dist/types/src/display/worker_options.d.ts +25 -0
  2677. package/node_modules/unpdf/dist/types/src/display/xfa_layer.d.ts +47 -0
  2678. package/node_modules/unpdf/dist/types/src/display/xfa_text.d.ts +21 -0
  2679. package/node_modules/unpdf/dist/types/src/pdf.d.ts +67 -0
  2680. package/node_modules/unpdf/dist/types/src/shared/base_pdf_stream.d.ts +121 -0
  2681. package/node_modules/unpdf/dist/types/src/shared/image_utils.d.ts +17 -0
  2682. package/node_modules/unpdf/dist/types/src/shared/message_handler.d.ts +48 -0
  2683. package/node_modules/unpdf/dist/types/src/shared/murmurhash3.d.ts +7 -0
  2684. package/node_modules/unpdf/dist/types/src/shared/obj_bin_transform_utils.d.ts +26 -0
  2685. package/node_modules/unpdf/dist/types/src/shared/scripting_utils.d.ts +18 -0
  2686. package/node_modules/unpdf/dist/types/src/shared/util.d.ts +424 -0
  2687. package/node_modules/unpdf/dist/types/web/annotation_editor_layer_builder.d.ts +64 -0
  2688. package/node_modules/unpdf/dist/types/web/annotation_layer_builder.d.ts +108 -0
  2689. package/node_modules/unpdf/dist/types/web/app_options.d.ts +16 -0
  2690. package/node_modules/unpdf/dist/types/web/autolinker.d.ts +29 -0
  2691. package/node_modules/unpdf/dist/types/web/base_download_manager.d.ts +24 -0
  2692. package/node_modules/unpdf/dist/types/web/base_pdf_page_view.d.ts +28 -0
  2693. package/node_modules/unpdf/dist/types/web/comment_manager.d.ts +20 -0
  2694. package/node_modules/unpdf/dist/types/web/download_manager.d.ts +4 -0
  2695. package/node_modules/unpdf/dist/types/web/draw_layer_builder.d.ts +22 -0
  2696. package/node_modules/unpdf/dist/types/web/event_utils.d.ts +77 -0
  2697. package/node_modules/unpdf/dist/types/web/generic_scripting.d.ts +8 -0
  2698. package/node_modules/unpdf/dist/types/web/genericl10n.d.ts +18 -0
  2699. package/node_modules/unpdf/dist/types/web/l10n.d.ts +31 -0
  2700. package/node_modules/unpdf/dist/types/web/menu.d.ts +11 -0
  2701. package/node_modules/unpdf/dist/types/web/pdf_find_controller.d.ts +132 -0
  2702. package/node_modules/unpdf/dist/types/web/pdf_find_utils.d.ts +16 -0
  2703. package/node_modules/unpdf/dist/types/web/pdf_history.d.ts +116 -0
  2704. package/node_modules/unpdf/dist/types/web/pdf_link_service.d.ts +142 -0
  2705. package/node_modules/unpdf/dist/types/web/pdf_page_detail_view.d.ts +27 -0
  2706. package/node_modules/unpdf/dist/types/web/pdf_page_view.d.ts +249 -0
  2707. package/node_modules/unpdf/dist/types/web/pdf_rendering_queue.d.ts +50 -0
  2708. package/node_modules/unpdf/dist/types/web/pdf_scripting_manager.component.d.ts +5 -0
  2709. package/node_modules/unpdf/dist/types/web/pdf_scripting_manager.d.ts +57 -0
  2710. package/node_modules/unpdf/dist/types/web/pdf_single_page_viewer.d.ts +7 -0
  2711. package/node_modules/unpdf/dist/types/web/pdf_thumbnail_view.d.ts +108 -0
  2712. package/node_modules/unpdf/dist/types/web/pdf_thumbnail_viewer.d.ts +161 -0
  2713. package/node_modules/unpdf/dist/types/web/pdf_viewer.component.d.ts +23 -0
  2714. package/node_modules/unpdf/dist/types/web/pdf_viewer.d.ts +619 -0
  2715. package/node_modules/unpdf/dist/types/web/renderable_view.d.ts +33 -0
  2716. package/node_modules/unpdf/dist/types/web/sidebar.d.ts +65 -0
  2717. package/node_modules/unpdf/dist/types/web/struct_tree_layer_builder.d.ts +25 -0
  2718. package/node_modules/unpdf/dist/types/web/text_accessibility.d.ts +44 -0
  2719. package/node_modules/unpdf/dist/types/web/text_highlighter.d.ts +63 -0
  2720. package/node_modules/unpdf/dist/types/web/text_layer_builder.d.ts +70 -0
  2721. package/node_modules/unpdf/dist/types/web/ui_utils.d.ts +265 -0
  2722. package/node_modules/unpdf/dist/types/web/xfa_layer_builder.d.ts +50 -0
  2723. package/node_modules/unpdf/package.json +97 -0
  2724. package/node_modules/yocto-queue/index.d.ts +75 -0
  2725. package/node_modules/yocto-queue/index.js +90 -0
  2726. package/node_modules/yocto-queue/license +9 -0
  2727. package/node_modules/yocto-queue/package.json +48 -0
  2728. package/node_modules/yocto-queue/readme.md +80 -0
  2729. package/package.json +103 -0
  2730. package/resources/skills/ab-test-analysis/SKILL.md +82 -0
  2731. package/resources/skills/agent-feed-publish/SKILL.md +63 -0
  2732. package/resources/skills/analyze-feature-requests/SKILL.md +49 -0
  2733. package/resources/skills/ansoff-matrix/SKILL.md +166 -0
  2734. package/resources/skills/awaken/SKILL.md +203 -0
  2735. package/resources/skills/beachhead-segment/SKILL.md +145 -0
  2736. package/resources/skills/brainstorm-experiments-existing/SKILL.md +51 -0
  2737. package/resources/skills/brainstorm-experiments-new/SKILL.md +45 -0
  2738. package/resources/skills/brainstorm-ideas-existing/SKILL.md +54 -0
  2739. package/resources/skills/brainstorm-ideas-new/SKILL.md +46 -0
  2740. package/resources/skills/brainstorm-okrs/SKILL.md +80 -0
  2741. package/resources/skills/brave-search/SKILL.md +85 -0
  2742. package/resources/skills/brave-search/content.js +86 -0
  2743. package/resources/skills/brave-search/package-lock.json +621 -0
  2744. package/resources/skills/brave-search/package.json +14 -0
  2745. package/resources/skills/brave-search/search.js +199 -0
  2746. package/resources/skills/browser-tools/SKILL.md +202 -0
  2747. package/resources/skills/browser-tools/browser-content.js +103 -0
  2748. package/resources/skills/browser-tools/browser-cookies.js +35 -0
  2749. package/resources/skills/browser-tools/browser-eval.js +53 -0
  2750. package/resources/skills/browser-tools/browser-hn-scraper.js +108 -0
  2751. package/resources/skills/browser-tools/browser-nav.js +44 -0
  2752. package/resources/skills/browser-tools/browser-pick.js +162 -0
  2753. package/resources/skills/browser-tools/browser-screenshot.js +34 -0
  2754. package/resources/skills/browser-tools/browser-start.js +86 -0
  2755. package/resources/skills/browser-tools/package-lock.json +2556 -0
  2756. package/resources/skills/browser-tools/package.json +19 -0
  2757. package/resources/skills/business-model/SKILL.md +133 -0
  2758. package/resources/skills/cohort-analysis/SKILL.md +114 -0
  2759. package/resources/skills/competitive-battlecard/SKILL.md +77 -0
  2760. package/resources/skills/competitor-analysis/SKILL.md +110 -0
  2761. package/resources/skills/create-prd/SKILL.md +86 -0
  2762. package/resources/skills/customer-journey-map/SKILL.md +65 -0
  2763. package/resources/skills/daily-brief/SKILL.md +321 -0
  2764. package/resources/skills/daily-brief/assets/rss-feeds.json +652 -0
  2765. package/resources/skills/daily-brief/scripts/rss_digest.py +339 -0
  2766. package/resources/skills/daily-brief/scripts/run_last30days.sh +115 -0
  2767. package/resources/skills/daily-brief/scripts/submit_brief.sh +48 -0
  2768. package/resources/skills/daily-brief/vendor/last30days/SKILL.md +1709 -0
  2769. package/resources/skills/daily-brief/vendor/last30days/agents/openai.yaml +8 -0
  2770. package/resources/skills/daily-brief/vendor/last30days/references/save-html-brief.md +90 -0
  2771. package/resources/skills/daily-brief/vendor/last30days/scripts/briefing.py +264 -0
  2772. package/resources/skills/daily-brief/vendor/last30days/scripts/build-skill.sh +39 -0
  2773. package/resources/skills/daily-brief/vendor/last30days/scripts/compare.sh +61 -0
  2774. package/resources/skills/daily-brief/vendor/last30days/scripts/evaluate_search_quality.py +554 -0
  2775. package/resources/skills/daily-brief/vendor/last30days/scripts/last30days.py +1036 -0
  2776. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/__init__.py +1 -0
  2777. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/bird_x.py +505 -0
  2778. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/bluesky.py +329 -0
  2779. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/categories.py +283 -0
  2780. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/chrome_cookies.py +322 -0
  2781. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/cluster.py +271 -0
  2782. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/competitors.py +199 -0
  2783. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/cookie_extract.py +403 -0
  2784. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/dates.py +120 -0
  2785. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/dedupe.py +130 -0
  2786. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/digg.py +414 -0
  2787. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/entity_extract.py +127 -0
  2788. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/env.py +744 -0
  2789. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/fanout.py +85 -0
  2790. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/fusion.py +207 -0
  2791. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/github.py +921 -0
  2792. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/grounding.py +324 -0
  2793. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/hackernews.py +338 -0
  2794. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/html_render.py +674 -0
  2795. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/http.py +261 -0
  2796. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/instagram.py +543 -0
  2797. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/log.py +28 -0
  2798. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/normalize.py +552 -0
  2799. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/perplexity.py +164 -0
  2800. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/pinterest.py +163 -0
  2801. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/pipeline.py +1132 -0
  2802. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/planner.py +714 -0
  2803. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/polymarket.py +786 -0
  2804. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/preflight.py +119 -0
  2805. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/providers.py +483 -0
  2806. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/quality_nudge.py +333 -0
  2807. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/query.py +117 -0
  2808. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/reddit.py +713 -0
  2809. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/reddit_enrich.py +322 -0
  2810. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/reddit_public.py +388 -0
  2811. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/relevance.py +168 -0
  2812. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/render.py +1779 -0
  2813. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/rerank.py +425 -0
  2814. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/resolve.py +345 -0
  2815. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/safari_cookies.py +193 -0
  2816. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/schema.py +319 -0
  2817. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/setup_wizard.py +536 -0
  2818. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/signals.py +253 -0
  2819. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/skill_meta.py +33 -0
  2820. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/snippet.py +51 -0
  2821. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/subproc.py +94 -0
  2822. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/threads.py +205 -0
  2823. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/tiktok.py +618 -0
  2824. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/truthsocial.py +168 -0
  2825. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/ui.py +616 -0
  2826. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/vendor/bird-search/LICENSE +21 -0
  2827. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/vendor/bird-search/bird-search.mjs +147 -0
  2828. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/vendor/bird-search/lib/cookies.js +220 -0
  2829. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/vendor/bird-search/lib/features.json +17 -0
  2830. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/vendor/bird-search/lib/paginate-cursor.js +37 -0
  2831. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/vendor/bird-search/lib/query-ids.json +20 -0
  2832. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/vendor/bird-search/lib/runtime-features.js +151 -0
  2833. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/vendor/bird-search/lib/runtime-query-ids.js +264 -0
  2834. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/vendor/bird-search/lib/twitter-client-base.js +129 -0
  2835. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/vendor/bird-search/lib/twitter-client-constants.js +50 -0
  2836. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/vendor/bird-search/lib/twitter-client-features.js +347 -0
  2837. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/vendor/bird-search/lib/twitter-client-search.js +157 -0
  2838. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/vendor/bird-search/lib/twitter-client-types.js +2 -0
  2839. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/vendor/bird-search/lib/twitter-client-utils.js +511 -0
  2840. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/vendor/bird-search/package.json +13 -0
  2841. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/xai_x.py +236 -0
  2842. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/xiaohongshu_api.py +162 -0
  2843. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/xquik.py +227 -0
  2844. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/xurl_x.py +172 -0
  2845. package/resources/skills/daily-brief/vendor/last30days/scripts/lib/youtube_yt.py +1035 -0
  2846. package/resources/skills/daily-brief/vendor/last30days/scripts/setup-keychain.sh +122 -0
  2847. package/resources/skills/daily-brief/vendor/last30days/scripts/store.py +991 -0
  2848. package/resources/skills/daily-brief/vendor/last30days/scripts/test-v1-vs-v2.sh +220 -0
  2849. package/resources/skills/daily-brief/vendor/last30days/scripts/test_device_auth.py +128 -0
  2850. package/resources/skills/daily-brief/vendor/last30days/scripts/verify_v3.py +195 -0
  2851. package/resources/skills/daily-brief/vendor/last30days/scripts/watchlist.py +293 -0
  2852. package/resources/skills/draft-nda/SKILL.md +160 -0
  2853. package/resources/skills/dummy-dataset/SKILL.md +114 -0
  2854. package/resources/skills/find-skills/SKILL.md +142 -0
  2855. package/resources/skills/grammar-check/SKILL.md +209 -0
  2856. package/resources/skills/growth-loops/SKILL.md +125 -0
  2857. package/resources/skills/gtm-motions/SKILL.md +155 -0
  2858. package/resources/skills/gtm-strategy/SKILL.md +94 -0
  2859. package/resources/skills/ideal-customer-profile/SKILL.md +164 -0
  2860. package/resources/skills/identify-assumptions-existing/SKILL.md +44 -0
  2861. package/resources/skills/identify-assumptions-new/SKILL.md +52 -0
  2862. package/resources/skills/interview-script/SKILL.md +105 -0
  2863. package/resources/skills/job-stories/SKILL.md +74 -0
  2864. package/resources/skills/lean-canvas/SKILL.md +121 -0
  2865. package/resources/skills/market-segments/SKILL.md +80 -0
  2866. package/resources/skills/market-sizing/SKILL.md +90 -0
  2867. package/resources/skills/marketing-ideas/SKILL.md +44 -0
  2868. package/resources/skills/metrics-dashboard/SKILL.md +94 -0
  2869. package/resources/skills/monetization-strategy/SKILL.md +150 -0
  2870. package/resources/skills/north-star-metric/SKILL.md +74 -0
  2871. package/resources/skills/opportunity-solution-tree/SKILL.md +64 -0
  2872. package/resources/skills/outcome-roadmap/SKILL.md +68 -0
  2873. package/resources/skills/pestle-analysis/SKILL.md +124 -0
  2874. package/resources/skills/pi-skills-source/LICENSE +21 -0
  2875. package/resources/skills/pi-skills-source/README.md +119 -0
  2876. package/resources/skills/pm-skills-source/LICENSE +21 -0
  2877. package/resources/skills/porters-five-forces/SKILL.md +212 -0
  2878. package/resources/skills/positioning-ideas/SKILL.md +61 -0
  2879. package/resources/skills/pre-mortem/SKILL.md +93 -0
  2880. package/resources/skills/pricing-strategy/SKILL.md +85 -0
  2881. package/resources/skills/prioritization-frameworks/SKILL.md +75 -0
  2882. package/resources/skills/prioritize-assumptions/SKILL.md +48 -0
  2883. package/resources/skills/prioritize-features/SKILL.md +52 -0
  2884. package/resources/skills/privacy-policy/SKILL.md +238 -0
  2885. package/resources/skills/product-name/SKILL.md +47 -0
  2886. package/resources/skills/product-setup/SKILL.md +143 -0
  2887. package/resources/skills/product-strategy/SKILL.md +111 -0
  2888. package/resources/skills/product-vision/SKILL.md +52 -0
  2889. package/resources/skills/release-notes/SKILL.md +63 -0
  2890. package/resources/skills/retro/SKILL.md +76 -0
  2891. package/resources/skills/review-resume/SKILL.md +221 -0
  2892. package/resources/skills/sentiment-analysis/SKILL.md +83 -0
  2893. package/resources/skills/skill-creator/LICENSE.txt +202 -0
  2894. package/resources/skills/skill-creator/SKILL.md +485 -0
  2895. package/resources/skills/skill-creator/agents/analyzer.md +274 -0
  2896. package/resources/skills/skill-creator/agents/comparator.md +202 -0
  2897. package/resources/skills/skill-creator/agents/grader.md +223 -0
  2898. package/resources/skills/skill-creator/assets/eval_review.html +146 -0
  2899. package/resources/skills/skill-creator/eval-viewer/generate_review.py +471 -0
  2900. package/resources/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  2901. package/resources/skills/skill-creator/references/schemas.md +430 -0
  2902. package/resources/skills/skill-creator/scripts/__init__.py +0 -0
  2903. package/resources/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  2904. package/resources/skills/skill-creator/scripts/generate_report.py +326 -0
  2905. package/resources/skills/skill-creator/scripts/improve_description.py +247 -0
  2906. package/resources/skills/skill-creator/scripts/package_skill.py +136 -0
  2907. package/resources/skills/skill-creator/scripts/quick_validate.py +103 -0
  2908. package/resources/skills/skill-creator/scripts/run_eval.py +310 -0
  2909. package/resources/skills/skill-creator/scripts/run_loop.py +328 -0
  2910. package/resources/skills/skill-creator/scripts/utils.py +47 -0
  2911. package/resources/skills/sprint-plan/SKILL.md +67 -0
  2912. package/resources/skills/sql-queries/SKILL.md +87 -0
  2913. package/resources/skills/stakeholder-map/SKILL.md +51 -0
  2914. package/resources/skills/startup-canvas/SKILL.md +138 -0
  2915. package/resources/skills/summarize-interview/SKILL.md +53 -0
  2916. package/resources/skills/summarize-meeting/SKILL.md +81 -0
  2917. package/resources/skills/swot-analysis/SKILL.md +96 -0
  2918. package/resources/skills/test-scenarios/SKILL.md +86 -0
  2919. package/resources/skills/user-personas/SKILL.md +69 -0
  2920. package/resources/skills/user-segmentation/SKILL.md +88 -0
  2921. package/resources/skills/user-stories/SKILL.md +74 -0
  2922. package/resources/skills/value-prop-statements/SKILL.md +51 -0
  2923. package/resources/skills/value-proposition/SKILL.md +108 -0
  2924. package/resources/skills/wwas/SKILL.md +69 -0
  2925. package/src/autopm/action-proposals.js +534 -0
  2926. package/src/autopm/bootstrap.js +280 -0
  2927. package/src/autopm/cli.js +93 -0
  2928. package/src/autopm/command-tui.js +293 -0
  2929. package/src/autopm/context-commands.js +813 -0
  2930. package/src/autopm/context-connectors.js +629 -0
  2931. package/src/autopm/dashboard.js +757 -0
  2932. package/src/autopm/extension-runtime/bootstrap-guide.js +107 -0
  2933. package/src/autopm/extension-runtime/command-menus.js +42 -0
  2934. package/src/autopm/extension-runtime/contracts.js +191 -0
  2935. package/src/autopm/extension-runtime/dashboard-ui.js +306 -0
  2936. package/src/autopm/extension-runtime/loop-runtime.js +276 -0
  2937. package/src/autopm/extension-runtime/registry.js +23 -0
  2938. package/src/autopm/extension-runtime/runtime.js +2625 -0
  2939. package/src/autopm/extension.js +76 -0
  2940. package/src/autopm/heartbeat/cadence.js +237 -0
  2941. package/src/autopm/heartbeat/contracts.js +387 -0
  2942. package/src/autopm/heartbeat/file.js +538 -0
  2943. package/src/autopm/heartbeat/runner.js +640 -0
  2944. package/src/autopm/heartbeat/session-transcript.js +282 -0
  2945. package/src/autopm/heartbeat/state.js +514 -0
  2946. package/src/autopm/heartbeat/tasks.js +550 -0
  2947. package/src/autopm/heartbeat-commands.js +712 -0
  2948. package/src/autopm/heartbeat-tui.js +395 -0
  2949. package/src/autopm/loader-env.js +430 -0
  2950. package/src/autopm/loader.js +184 -0
  2951. package/src/autopm/loop-commands.js +924 -0
  2952. package/src/autopm/loop-tui.js +840 -0
  2953. package/src/autopm/memory/accepted-memory.js +715 -0
  2954. package/src/autopm/memory/candidates.js +305 -0
  2955. package/src/autopm/memory/canonicalize.js +697 -0
  2956. package/src/autopm/memory/chunk-store.js +259 -0
  2957. package/src/autopm/memory/chunker.js +464 -0
  2958. package/src/autopm/memory/contracts.js +493 -0
  2959. package/src/autopm/memory/doctor.js +427 -0
  2960. package/src/autopm/memory/entities.js +216 -0
  2961. package/src/autopm/memory/get.js +854 -0
  2962. package/src/autopm/memory/ingest.js +737 -0
  2963. package/src/autopm/memory/jobs.js +791 -0
  2964. package/src/autopm/memory/operations.js +931 -0
  2965. package/src/autopm/memory/paths.js +187 -0
  2966. package/src/autopm/memory/product-context-memory.js +285 -0
  2967. package/src/autopm/memory/projection.js +152 -0
  2968. package/src/autopm/memory/recall.js +678 -0
  2969. package/src/autopm/memory/redaction.js +322 -0
  2970. package/src/autopm/memory/registry.js +419 -0
  2971. package/src/autopm/memory/runtime.js +496 -0
  2972. package/src/autopm/memory/scheduler.js +507 -0
  2973. package/src/autopm/memory/scorer.js +408 -0
  2974. package/src/autopm/memory/search.js +652 -0
  2975. package/src/autopm/memory/source-store.js +270 -0
  2976. package/src/autopm/memory/status.js +334 -0
  2977. package/src/autopm/memory/store.js +675 -0
  2978. package/src/autopm/memory/summary-global.js +1050 -0
  2979. package/src/autopm/memory/summary-source.js +898 -0
  2980. package/src/autopm/memory/summary-topic.js +1087 -0
  2981. package/src/autopm/memory/tools.js +448 -0
  2982. package/src/autopm/memory/tree.js +816 -0
  2983. package/src/autopm/memory/wiki.js +226 -0
  2984. package/src/autopm/memory/worker.js +484 -0
  2985. package/src/autopm/memory-commands.js +1079 -0
  2986. package/src/autopm/modules/bootstrap/register.js +6 -0
  2987. package/src/autopm/modules/context/register.js +6 -0
  2988. package/src/autopm/modules/heartbeat/register.js +6 -0
  2989. package/src/autopm/modules/loop/register.js +6 -0
  2990. package/src/autopm/modules/memory/register.js +6 -0
  2991. package/src/autopm/modules/product-setup/register.js +7 -0
  2992. package/src/autopm/modules/venture/register.js +6 -0
  2993. package/src/autopm/native-commands.js +505 -0
  2994. package/src/autopm/objective-commands.js +372 -0
  2995. package/src/autopm/objective.js +444 -0
  2996. package/src/autopm/opportunities/briefs.js +58 -0
  2997. package/src/autopm/opportunities/contracts.js +20 -0
  2998. package/src/autopm/opportunities/schemas.js +35 -0
  2999. package/src/autopm/opportunities-commands.js +859 -0
  3000. package/src/autopm/plan-commands.js +344 -0
  3001. package/src/autopm/plan-proposals.js +907 -0
  3002. package/src/autopm/pm-skills.js +139 -0
  3003. package/src/autopm/product-context.js +745 -0
  3004. package/src/autopm/product-setup-documents.js +340 -0
  3005. package/src/autopm/resource-ownership.js +507 -0
  3006. package/src/autopm/runtime-context.js +432 -0
  3007. package/src/autopm/scheduler/contracts.js +298 -0
  3008. package/src/autopm/scheduler/runner.js +288 -0
  3009. package/src/autopm/scheduler/schedule.js +746 -0
  3010. package/src/autopm/scheduler/store.js +352 -0
  3011. package/src/autopm/ship-commands.js +413 -0
  3012. package/src/autopm/ship-readiness.js +851 -0
  3013. package/src/autopm/standalone-contract.js +146 -0
  3014. package/src/autopm/system-context.js +379 -0
  3015. package/src/autopm/system-prompt-files.js +382 -0
  3016. package/src/autopm/triage-commands.js +533 -0
  3017. package/src/autopm/venture-commands.js +1707 -0
  3018. package/src/venture-signal/collector.js +718 -0
  3019. package/src/venture-signal/contracts.js +482 -0
  3020. package/src/venture-signal/default-sources.js +316 -0
  3021. package/src/venture-signal/freshness.js +342 -0
  3022. package/src/venture-signal/normalizer.js +1439 -0
  3023. package/src/venture-signal/pm-writer.js +984 -0
  3024. package/src/venture-signal/policy.js +730 -0
  3025. package/src/venture-signal/runner.js +1685 -0
  3026. package/src/venture-signal/schemas.js +2188 -0
  3027. package/src/venture-signal/signal-analyst.js +722 -0
  3028. package/src/venture-signal/skeptic.js +724 -0
  3029. package/src/venture-signal/source-adapters.js +483 -0
  3030. package/src/venture-signal/taxonomy.js +880 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive-mode.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-mode.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,EAGN,KAAK,YAAY,EAKjB,MAAM,uBAAuB,CAAC;AA2C/B,OAAO,EAAE,KAAK,mBAAmB,EAAkC,MAAM,qCAAqC,CAAC;AA+I/G,wBAAgB,qBAAqB,CACpC,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,EACrC,kBAAkB,GAAE,WAAW,CAAC,MAAM,CAA4B,GAChE,OAAO,CAQT;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACtC,gEAAgE;IAChE,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,4DAA4D;IAC5D,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,qEAAqE;IACrE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;IAC/B,4DAA4D;IAC5D,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,6DAA6D;IAC7D,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,eAAe;IA0H1B,OAAO,CAAC,OAAO;IAzHhB,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,EAAE,CAAM;IAChB,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,wBAAwB,CAAY;IAC5C,OAAO,CAAC,eAAe,CAAY;IACnC,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,sBAAsB,CAA4B;IAC1D,OAAO,CAAC,oBAAoB,CAAmC;IAC/D,OAAO,CAAC,4BAA4B,CAAqC;IACzE,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,eAAe,CAAY;IACnC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,kBAAkB,CAAqB;IAE/C,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,eAAe,CAAC,CAAyB;IACjD,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,cAAc,CAAiC;IACvD,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,uBAAuB,CAAiD;IAChF,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAgB;IACtD,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAiB;IAC5D,OAAO,CAAC,mBAAmB,CAAmC;IAE9D,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,iBAAiB,CAAiC;IAC1D,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,iCAAiC,CAAS;IAGlD,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,cAAc,CAA+B;IAGrD,OAAO,CAAC,kBAAkB,CAAoD;IAC9E,OAAO,CAAC,gBAAgB,CAA2C;IAGnE,OAAO,CAAC,YAAY,CAA6C;IAGjE,OAAO,CAAC,kBAAkB,CAAS;IAGnC,OAAO,CAAC,iBAAiB,CAAS;IAGlC,OAAO,CAAC,aAAa,CAA6B;IAGlD,OAAO,CAAC,WAAW,CAAC,CAAa;IACjC,OAAO,CAAC,qBAAqB,CAAyB;IAGtD,OAAO,CAAC,UAAU,CAAS;IAG3B,OAAO,CAAC,aAAa,CAAiD;IAGtE,OAAO,CAAC,qBAAqB,CAAgC;IAG7D,OAAO,CAAC,oBAAoB,CAAiC;IAC7D,OAAO,CAAC,2BAA2B,CAAC,CAAa;IAGjD,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,cAAc,CAAyC;IAC/D,OAAO,CAAC,kBAAkB,CAAC,CAAa;IAGxC,OAAO,CAAC,wBAAwB,CAAiC;IAGjE,OAAO,CAAC,iBAAiB,CAAS;IAGlC,OAAO,CAAC,iBAAiB,CAAqD;IAC9E,OAAO,CAAC,cAAc,CAAkD;IACxE,OAAO,CAAC,eAAe,CAAmD;IAC1E,OAAO,CAAC,mCAAmC,CAAyB;IAGpE,OAAO,CAAC,qBAAqB,CAAuD;IACpF,OAAO,CAAC,qBAAqB,CAAuD;IACpF,OAAO,CAAC,oBAAoB,CAAa;IACzC,OAAO,CAAC,oBAAoB,CAAa;IAGzC,OAAO,CAAC,YAAY,CAA6D;IAGjF,OAAO,CAAC,eAAe,CAAY;IAGnC,OAAO,CAAC,aAAa,CAAoC;IAGzD,OAAO,CAAC,YAAY,CAA6D;IAGjF,OAAO,KAAK,OAAO,GAElB;IACD,OAAO,KAAK,KAAK,GAEhB;IACD,OAAO,KAAK,cAAc,GAEzB;IACD,OAAO,KAAK,eAAe,GAE1B;IAED,YACC,WAAW,EAAE,mBAAmB,EACxB,OAAO,GAAE,sBAA2B,EAuC5C;IAED,OAAO,CAAC,wBAAwB;IAyBhC,OAAO,CAAC,6BAA6B;IAQrC,OAAO,CAAC,oCAAoC;IAe5C,OAAO,CAAC,8BAA8B;IA6EtC,OAAO,CAAC,yBAAyB;IAajC,OAAO,CAAC,0BAA0B;IA8B5B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAiI1B;IAED;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAU3B;;;OAGG;IACG,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CA4EzB;YAEa,sBAAsB;YAkBtB,sBAAsB;IA+CpC;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IA2B9B,OAAO,CAAC,sBAAsB;IAmB9B,OAAO,CAAC,4BAA4B;IAWpC,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,0BAA0B;IAMlC,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,wBAAwB;IAIhC;;OAEG;IACH,OAAO,CAAC,YAAY;IA6BpB,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,4BAA4B;IAcpC,OAAO,CAAC,wBAAwB;IAqBhC,OAAO,CAAC,6BAA6B;IAOrC,OAAO,CAAC,kCAAkC;IA2B1C,OAAO,CAAC,yBAAyB;IA8BjC,OAAO,CAAC,oBAAoB;IA6B5B,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,gBAAgB;IAqCxB,OAAO,CAAC,iBAAiB;IAkCzB,OAAO,CAAC,qBAAqB;IAc7B,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,iBAAiB;IAqDzB,OAAO,CAAC,mBAAmB;YAyMb,4BAA4B;IAmF1C,OAAO,CAAC,oBAAoB;YAiBd,oBAAoB;YAWpB,uBAAuB;IAQrC,OAAO,CAAC,yBAAyB;IAUjC;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAInC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAkD/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,uBAAuB;IAI/B,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,sBAAsB;IAa9B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA0C1B,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,gBAAgB;IAgCxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAM;IAE9C;;OAEG;IACH,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,qBAAqB;IAuB7B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA8B1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAyC1B,OAAO,CAAC,iCAAiC;IAWzC,OAAO,CAAC,oCAAoC;IAO5C;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAyDhC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAwC7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;YAYf,oBAAoB;YASpB,0BAA0B;IAQxC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAwC1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAS1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAwB3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAQ3B;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAkEhC;;OAEG;IACH,OAAO,CAAC,mBAAmB;YAWb,mBAAmB;IA8EjC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAsB1B,OAAO,CAAC,gBAAgB;YAkEV,yBAAyB;IAsBvC,OAAO,CAAC,wBAAwB;IAqLhC,OAAO,CAAC,gBAAgB;YAMV,WAAW;IAkVzB,+CAA+C;IAC/C,OAAO,CAAC,kBAAkB;IAS1B;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAoBlB,OAAO,CAAC,gBAAgB;IA4FxB;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAsE5B,qBAAqB,IAAI,IAAI,CAe5B;IAEK,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAOpC;IAED,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,WAAW;IAKnB;;;;OAIG;IACH,OAAO,CAAC,cAAc,CAAS;YAEjB,QAAQ;IActB,OAAO,CAAC,qBAAqB;IAS7B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,aAAa;YAsBP,sBAAsB;IAKpC,OAAO,CAAC,sBAAsB;IAuC9B,OAAO,CAAC,wBAAwB;IAOhC,OAAO,CAAC,WAAW;YAqCL,cAAc;IAgC5B,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,kBAAkB;YAWZ,UAAU;IAmBxB,OAAO,CAAC,yBAAyB;IAIjC,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,6BAA6B;YAkBvB,kBAAkB;IA4DhC,WAAW,IAAI,IAAI,CAGlB;IAED,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAKpC;IAED,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAIxC;IAED,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAoBnD;IAED,6BAA6B,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAgBtD;IAED;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAa5B;;;OAGG;IACH,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,4BAA4B;IAmBpC,OAAO,CAAC,6BAA6B;IAqBrC,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,kBAAkB;YAUZ,oBAAoB;IA6ElC,6DAA6D;IAC7D,OAAO,CAAC,0BAA0B;IAYlC;;;OAGG;IACH,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,oBAAoB;YA2Jd,kBAAkB;YAwBlB,mBAAmB;YAKnB,kBAAkB;YAclB,4BAA4B;YAM5B,uCAAuC;IAgCrD,OAAO,CAAC,iBAAiB;YAgCX,kBAAkB;IA6EhC,OAAO,CAAC,uBAAuB;YAyCjB,kBAAkB;IAsBhC,OAAO,CAAC,gBAAgB;IAiIxB,OAAO,CAAC,mBAAmB;YAmCb,mBAAmB;IAyCjC,OAAO,CAAC,uBAAuB;IA0B/B,OAAO,CAAC,wBAAwB;IAmBhC,OAAO,CAAC,yBAAyB;IAqBjC,OAAO,CAAC,yBAAyB;YAwCnB,iBAAiB;YAiDjB,8BAA8B;IAqD5C,OAAO,CAAC,sBAAsB;YA4BhB,qBAAqB;IA2CnC,OAAO,CAAC,oBAAoB;YA4Bd,eAAe;YAoGf,mBAAmB;YAgFnB,mBAAmB;IAgBjC,OAAO,CAAC,sBAAsB;YA6BhB,mBAAmB;YAkDnB,kBAAkB;YA8FlB,iBAAiB;IAe/B,OAAO,CAAC,iBAAiB;IAoBzB,OAAO,CAAC,oBAAoB;IAqC5B,OAAO,CAAC,sBAAsB;IAqB9B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,oBAAoB;YAmHd,kBAAkB;IAoBhC,OAAO,CAAC,kBAAkB;IAiC1B,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,qBAAqB;YAMf,iBAAiB;YAuFjB,oBAAoB;IAsBlC,IAAI,IAAI,IAAI,CAmBX;CACD","sourcesContent":["/**\n * Interactive mode for the coding agent.\n * Handles TUI rendering and user interaction, delegating business logic to AgentSession.\n */\n\nimport * as crypto from \"node:crypto\";\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport {\n\ttype AssistantMessage,\n\tgetProviders,\n\ttype ImageContent,\n\ttype Message,\n\ttype Model,\n\ttype OAuthProviderId,\n\ttype OAuthSelectPrompt,\n} from \"@earendil-works/pi-ai\";\nimport type {\n\tAutocompleteItem,\n\tAutocompleteProvider,\n\tEditorComponent,\n\tKeybinding,\n\tKeyId,\n\tMarkdownTheme,\n\tOverlayHandle,\n\tOverlayOptions,\n\tSlashCommand,\n} from \"@earendil-works/pi-tui\";\nimport {\n\tCombinedAutocompleteProvider,\n\ttype Component,\n\tContainer,\n\tfuzzyFilter,\n\tgetCapabilities,\n\thyperlink,\n\tLoader,\n\ttype LoaderIndicatorOptions,\n\tMarkdown,\n\tmatchesKey,\n\tProcessTerminal,\n\tSpacer,\n\tsetKeybindings,\n\tText,\n\tTruncatedText,\n\tTUI,\n\tvisibleWidth,\n} from \"@earendil-works/pi-tui\";\nimport { spawn, spawnSync } from \"child_process\";\nimport {\n\tAPP_NAME,\n\tAPP_TITLE,\n\tgetAgentDir,\n\tgetAuthPath,\n\tgetDebugLogPath,\n\tgetDocsPath,\n\tgetShareViewerUrl,\n\tVERSION,\n} from \"../../config.js\";\nimport { type AgentSession, type AgentSessionEvent, parseSkillBlock } from \"../../core/agent-session.js\";\nimport { type AgentSessionRuntime, SessionImportFileNotFoundError } from \"../../core/agent-session-runtime.js\";\nimport type {\n\tAutocompleteProviderFactory,\n\tEditorFactory,\n\tExtensionCommandContext,\n\tExtensionContext,\n\tExtensionRunner,\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n} from \"../../core/extensions/index.js\";\nimport { FooterDataProvider, type ReadonlyFooterDataProvider } from \"../../core/footer-data-provider.js\";\nimport { type AppKeybinding, KeybindingsManager } from \"../../core/keybindings.js\";\nimport { createCompactionSummaryMessage } from \"../../core/messages.js\";\nimport { defaultModelPerProvider, findExactModelReferenceMatch, resolveModelScope } from \"../../core/model-resolver.js\";\nimport { DefaultPackageManager } from \"../../core/package-manager.js\";\nimport { BUILT_IN_PROVIDER_DISPLAY_NAMES } from \"../../core/provider-display-names.js\";\nimport type { ResourceDiagnostic } from \"../../core/resource-loader.js\";\nimport { formatMissingSessionCwdPrompt, MissingSessionCwdError } from \"../../core/session-cwd.js\";\nimport { type SessionContext, SessionManager } from \"../../core/session-manager.js\";\nimport { BUILTIN_SLASH_COMMANDS } from \"../../core/slash-commands.js\";\nimport type { SourceInfo } from \"../../core/source-info.js\";\nimport { isInstallTelemetryEnabled } from \"../../core/telemetry.js\";\nimport type { TruncationResult } from \"../../core/tools/truncate.js\";\nimport { getChangelogPath, getNewEntries, parseChangelog } from \"../../utils/changelog.js\";\nimport { copyToClipboard } from \"../../utils/clipboard.js\";\nimport { extensionForImageMimeType, readClipboardImage } from \"../../utils/clipboard-image.js\";\nimport { parseGitUrl } from \"../../utils/git.js\";\nimport { getCwdRelativePath } from \"../../utils/paths.js\";\nimport { getPiUserAgent } from \"../../utils/pi-user-agent.js\";\nimport { killTrackedDetachedChildren } from \"../../utils/shell.js\";\nimport { ensureTool } from \"../../utils/tools-manager.js\";\nimport { checkForNewPiVersion } from \"../../utils/version-check.js\";\nimport { ArminComponent } from \"./components/armin.js\";\nimport { AssistantMessageComponent } from \"./components/assistant-message.js\";\nimport { BashExecutionComponent } from \"./components/bash-execution.js\";\nimport { BorderedLoader } from \"./components/bordered-loader.js\";\nimport { BranchSummaryMessageComponent } from \"./components/branch-summary-message.js\";\nimport { CompactionSummaryMessageComponent } from \"./components/compaction-summary-message.js\";\nimport { CountdownTimer } from \"./components/countdown-timer.js\";\nimport { CustomEditor } from \"./components/custom-editor.js\";\nimport { CustomMessageComponent } from \"./components/custom-message.js\";\nimport { DaxnutsComponent } from \"./components/daxnuts.js\";\nimport { DynamicBorder } from \"./components/dynamic-border.js\";\nimport { EarendilAnnouncementComponent } from \"./components/earendil-announcement.js\";\nimport { ExtensionEditorComponent } from \"./components/extension-editor.js\";\nimport { ExtensionInputComponent } from \"./components/extension-input.js\";\nimport { ExtensionSelectorComponent } from \"./components/extension-selector.js\";\nimport { FooterComponent } from \"./components/footer.js\";\nimport { formatKeyText, keyDisplayText, keyHint, keyText, rawKeyHint } from \"./components/keybinding-hints.js\";\nimport { LoginDialogComponent } from \"./components/login-dialog.js\";\nimport { ModelSelectorComponent } from \"./components/model-selector.js\";\nimport { type AuthSelectorProvider, OAuthSelectorComponent } from \"./components/oauth-selector.js\";\nimport { ScopedModelsSelectorComponent } from \"./components/scoped-models-selector.js\";\nimport { SessionSelectorComponent } from \"./components/session-selector.js\";\nimport { SettingsSelectorComponent } from \"./components/settings-selector.js\";\nimport { SkillInvocationMessageComponent } from \"./components/skill-invocation-message.js\";\nimport { ToolExecutionComponent } from \"./components/tool-execution.js\";\nimport { TreeSelectorComponent } from \"./components/tree-selector.js\";\nimport { UserMessageComponent } from \"./components/user-message.js\";\nimport { UserMessageSelectorComponent } from \"./components/user-message-selector.js\";\nimport {\n\tgetAvailableThemes,\n\tgetAvailableThemesWithPaths,\n\tgetEditorTheme,\n\tgetMarkdownTheme,\n\tgetThemeByName,\n\tinitTheme,\n\tonThemeChange,\n\tsetRegisteredThemes,\n\tsetTheme,\n\tsetThemeInstance,\n\tstopThemeWatcher,\n\tTheme,\n\ttype ThemeColor,\n\ttheme,\n} from \"./theme/theme.js\";\n\n/** Interface for components that can be expanded/collapsed */\ninterface Expandable {\n\tsetExpanded(expanded: boolean): void;\n}\n\nfunction isExpandable(obj: unknown): obj is Expandable {\n\treturn typeof obj === \"object\" && obj !== null && \"setExpanded\" in obj && typeof obj.setExpanded === \"function\";\n}\n\nclass ExpandableText extends Text implements Expandable {\n\tconstructor(\n\t\tprivate readonly getCollapsedText: () => string,\n\t\tprivate readonly getExpandedText: () => string,\n\t\texpanded = false,\n\t\tpaddingX = 0,\n\t\tpaddingY = 0,\n\t) {\n\t\tsuper(expanded ? getExpandedText() : getCollapsedText(), paddingX, paddingY);\n\t}\n\n\tsetExpanded(expanded: boolean): void {\n\t\tthis.setText(expanded ? this.getExpandedText() : this.getCollapsedText());\n\t}\n}\n\ntype CompactionQueuedMessage = {\n\ttext: string;\n\tmode: \"steer\" | \"followUp\";\n};\n\nconst DEAD_TERMINAL_ERROR_CODES = new Set([\"EIO\", \"EPIPE\", \"ENOTCONN\"]);\n\nfunction isAutoPmRuntime(): boolean {\n\treturn process.env.AUTOPM_RUNTIME_MODE === \"autopm-launcher\" ||\n\t\tprocess.env.AUTOPM_PACKAGE_NAME === \"autopm-pi\" ||\n\t\tprocess.env.AUTOPM_BIN_NAME === \"autopm\";\n}\n\nfunction isDeadTerminalError(error: unknown): boolean {\n\tif (!error || typeof error !== \"object\" || !(\"code\" in error)) {\n\t\treturn false;\n\t}\n\tconst code = (error as NodeJS.ErrnoException).code;\n\treturn code !== undefined && DEAD_TERMINAL_ERROR_CODES.has(code);\n}\n\nconst ANTHROPIC_SUBSCRIPTION_AUTH_WARNING =\n\t\"Anthropic subscription auth is active. Third-party harness usage draws from extra usage and is billed per token, not your Claude plan limits. Manage extra usage at https://claude.ai/settings/usage.\";\n\nfunction isAnthropicSubscriptionAuthKey(apiKey: string | undefined): boolean {\n\treturn typeof apiKey === \"string\" && apiKey.startsWith(\"sk-ant-oat\");\n}\n\nfunction isUnknownModel(model: Model<any> | undefined): boolean {\n\treturn !!model && model.provider === \"unknown\" && model.id === \"unknown\" && model.api === \"unknown\";\n}\n\nfunction hasDefaultModelProvider(providerId: string): providerId is keyof typeof defaultModelPerProvider {\n\treturn providerId in defaultModelPerProvider;\n}\n\nconst BEDROCK_PROVIDER_ID = \"amazon-bedrock\";\n\nconst BUILT_IN_MODEL_PROVIDERS = new Set<string>(getProviders());\n\nexport function isApiKeyLoginProvider(\n\tproviderId: string,\n\toauthProviderIds: ReadonlySet<string>,\n\tbuiltInProviderIds: ReadonlySet<string> = BUILT_IN_MODEL_PROVIDERS,\n): boolean {\n\tif (BUILT_IN_PROVIDER_DISPLAY_NAMES[providerId]) {\n\t\treturn true;\n\t}\n\tif (builtInProviderIds.has(providerId)) {\n\t\treturn false;\n\t}\n\treturn !oauthProviderIds.has(providerId);\n}\n\n/**\n * Options for InteractiveMode initialization.\n */\nexport interface InteractiveModeOptions {\n\t/** Providers that were migrated to auth.json (shows warning) */\n\tmigratedProviders?: string[];\n\t/** Warning message if session model couldn't be restored */\n\tmodelFallbackMessage?: string;\n\t/** Initial message to send on startup (can include @file content) */\n\tinitialMessage?: string;\n\t/** Images to attach to the initial message */\n\tinitialImages?: ImageContent[];\n\t/** Additional messages to send after the initial message */\n\tinitialMessages?: string[];\n\t/** Force verbose startup (overrides quietStartup setting) */\n\tverbose?: boolean;\n}\n\nexport class InteractiveMode {\n\tprivate runtimeHost: AgentSessionRuntime;\n\tprivate ui: TUI;\n\tprivate chatContainer: Container;\n\tprivate pendingMessagesContainer: Container;\n\tprivate statusContainer: Container;\n\tprivate defaultEditor: CustomEditor;\n\tprivate editor: EditorComponent;\n\tprivate editorComponentFactory: EditorFactory | undefined;\n\tprivate autocompleteProvider: AutocompleteProvider | undefined;\n\tprivate autocompleteProviderWrappers: AutocompleteProviderFactory[] = [];\n\tprivate fdPath: string | undefined;\n\tprivate editorContainer: Container;\n\tprivate footer: FooterComponent;\n\tprivate footerDataProvider: FooterDataProvider;\n\t// Stored so the same manager can be injected into custom editors, selectors, and extension UI.\n\tprivate keybindings: KeybindingsManager;\n\tprivate version: string;\n\tprivate isInitialized = false;\n\tprivate onInputCallback?: (text: string) => void;\n\tprivate loadingAnimation: Loader | undefined = undefined;\n\tprivate workingMessage: string | undefined = undefined;\n\tprivate workingVisible = true;\n\tprivate workingIndicatorOptions: LoaderIndicatorOptions | undefined = undefined;\n\tprivate readonly defaultWorkingMessage = \"Working...\";\n\tprivate readonly defaultHiddenThinkingLabel = \"Thinking...\";\n\tprivate hiddenThinkingLabel = this.defaultHiddenThinkingLabel;\n\n\tprivate lastSigintTime = 0;\n\tprivate lastEscapeTime = 0;\n\tprivate changelogMarkdown: string | undefined = undefined;\n\tprivate startupNoticesShown = false;\n\tprivate anthropicSubscriptionWarningShown = false;\n\n\t// Status line tracking (for mutating immediately-sequential status updates)\n\tprivate lastStatusSpacer: Spacer | undefined = undefined;\n\tprivate lastStatusText: Text | undefined = undefined;\n\n\t// Streaming message tracking\n\tprivate streamingComponent: AssistantMessageComponent | undefined = undefined;\n\tprivate streamingMessage: AssistantMessage | undefined = undefined;\n\n\t// Tool execution tracking: toolCallId -> component\n\tprivate pendingTools = new Map<string, ToolExecutionComponent>();\n\n\t// Tool output expansion state\n\tprivate toolOutputExpanded = false;\n\n\t// Thinking block visibility state\n\tprivate hideThinkingBlock = false;\n\n\t// Skill commands: command name -> skill file path\n\tprivate skillCommands = new Map<string, string>();\n\n\t// Agent subscription unsubscribe function\n\tprivate unsubscribe?: () => void;\n\tprivate signalCleanupHandlers: Array<() => void> = [];\n\n\t// Track if editor is in bash mode (text starts with !)\n\tprivate isBashMode = false;\n\n\t// Track current bash execution component\n\tprivate bashComponent: BashExecutionComponent | undefined = undefined;\n\n\t// Track pending bash components (shown in pending area, moved to chat on submit)\n\tprivate pendingBashComponents: BashExecutionComponent[] = [];\n\n\t// Auto-compaction state\n\tprivate autoCompactionLoader: Loader | undefined = undefined;\n\tprivate autoCompactionEscapeHandler?: () => void;\n\n\t// Auto-retry state\n\tprivate retryLoader: Loader | undefined = undefined;\n\tprivate retryCountdown: CountdownTimer | undefined = undefined;\n\tprivate retryEscapeHandler?: () => void;\n\n\t// Messages queued while compaction is running\n\tprivate compactionQueuedMessages: CompactionQueuedMessage[] = [];\n\n\t// Shutdown state\n\tprivate shutdownRequested = false;\n\n\t// Extension UI state\n\tprivate extensionSelector: ExtensionSelectorComponent | undefined = undefined;\n\tprivate extensionInput: ExtensionInputComponent | undefined = undefined;\n\tprivate extensionEditor: ExtensionEditorComponent | undefined = undefined;\n\tprivate extensionTerminalInputUnsubscribers = new Set<() => void>();\n\n\t// Extension widgets (components rendered above/below the editor)\n\tprivate extensionWidgetsAbove = new Map<string, Component & { dispose?(): void }>();\n\tprivate extensionWidgetsBelow = new Map<string, Component & { dispose?(): void }>();\n\tprivate widgetContainerAbove!: Container;\n\tprivate widgetContainerBelow!: Container;\n\n\t// Custom footer from extension (undefined = use built-in footer)\n\tprivate customFooter: (Component & { dispose?(): void }) | undefined = undefined;\n\n\t// Header container that holds the built-in or custom header\n\tprivate headerContainer: Container;\n\n\t// Built-in header (logo + keybinding hints + changelog)\n\tprivate builtInHeader: Component | undefined = undefined;\n\n\t// Custom header from extension (undefined = use built-in header)\n\tprivate customHeader: (Component & { dispose?(): void }) | undefined = undefined;\n\n\t// Convenience accessors\n\tprivate get session(): AgentSession {\n\t\treturn this.runtimeHost.session;\n\t}\n\tprivate get agent() {\n\t\treturn this.session.agent;\n\t}\n\tprivate get sessionManager() {\n\t\treturn this.session.sessionManager;\n\t}\n\tprivate get settingsManager() {\n\t\treturn this.session.settingsManager;\n\t}\n\n\tconstructor(\n\t\truntimeHost: AgentSessionRuntime,\n\t\tprivate options: InteractiveModeOptions = {},\n\t) {\n\t\tthis.runtimeHost = runtimeHost;\n\t\tthis.runtimeHost.setBeforeSessionInvalidate(() => {\n\t\t\tthis.resetExtensionUI();\n\t\t});\n\t\tthis.runtimeHost.setRebindSession(async () => {\n\t\t\tawait this.rebindCurrentSession();\n\t\t});\n\t\tthis.version = VERSION;\n\t\tthis.ui = new TUI(new ProcessTerminal(), this.settingsManager.getShowHardwareCursor());\n\t\tthis.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());\n\t\tthis.headerContainer = new Container();\n\t\tthis.chatContainer = new Container();\n\t\tthis.pendingMessagesContainer = new Container();\n\t\tthis.statusContainer = new Container();\n\t\tthis.widgetContainerAbove = new Container();\n\t\tthis.widgetContainerBelow = new Container();\n\t\tthis.keybindings = KeybindingsManager.create();\n\t\tsetKeybindings(this.keybindings);\n\t\tconst editorPaddingX = this.settingsManager.getEditorPaddingX();\n\t\tconst autocompleteMaxVisible = this.settingsManager.getAutocompleteMaxVisible();\n\t\tthis.defaultEditor = new CustomEditor(this.ui, getEditorTheme(), this.keybindings, {\n\t\t\tpaddingX: editorPaddingX,\n\t\t\tautocompleteMaxVisible,\n\t\t});\n\t\tthis.editor = this.defaultEditor;\n\t\tthis.editorContainer = new Container();\n\t\tthis.editorContainer.addChild(this.editor as Component);\n\t\tthis.footerDataProvider = new FooterDataProvider(this.sessionManager.getCwd());\n\t\tthis.footer = new FooterComponent(this.session, this.footerDataProvider);\n\t\tthis.footer.setAutoCompactEnabled(this.session.autoCompactionEnabled);\n\n\t\t// Load hide thinking block setting\n\t\tthis.hideThinkingBlock = this.settingsManager.getHideThinkingBlock();\n\n\t\t// Register themes from resource loader and initialize\n\t\tsetRegisteredThemes(this.session.resourceLoader.getThemes().themes);\n\t\tinitTheme(this.settingsManager.getTheme(), true);\n\t}\n\n\tprivate getAutocompleteSourceTag(sourceInfo?: SourceInfo): string | undefined {\n\t\tif (!sourceInfo) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst scopePrefix = sourceInfo.scope === \"user\" ? \"u\" : sourceInfo.scope === \"project\" ? \"p\" : \"t\";\n\t\tconst source = sourceInfo.source.trim();\n\n\t\tif (source === \"auto\" || source === \"local\" || source === \"cli\") {\n\t\t\treturn scopePrefix;\n\t\t}\n\n\t\tif (source.startsWith(\"npm:\")) {\n\t\t\treturn `${scopePrefix}:${source}`;\n\t\t}\n\n\t\tconst gitSource = parseGitUrl(source);\n\t\tif (gitSource) {\n\t\t\tconst ref = gitSource.ref ? `@${gitSource.ref}` : \"\";\n\t\t\treturn `${scopePrefix}:git:${gitSource.host}/${gitSource.path}${ref}`;\n\t\t}\n\n\t\treturn scopePrefix;\n\t}\n\n\tprivate prefixAutocompleteDescription(description: string | undefined, sourceInfo?: SourceInfo): string | undefined {\n\t\tconst sourceTag = this.getAutocompleteSourceTag(sourceInfo);\n\t\tif (!sourceTag) {\n\t\t\treturn description;\n\t\t}\n\t\treturn description ? `[${sourceTag}] ${description}` : `[${sourceTag}]`;\n\t}\n\n\tprivate getBuiltInCommandConflictDiagnostics(extensionRunner: ExtensionRunner): ResourceDiagnostic[] {\n\t\tconst builtinNames = new Set(BUILTIN_SLASH_COMMANDS.map((command) => command.name));\n\t\treturn extensionRunner\n\t\t\t.getRegisteredCommands()\n\t\t\t.filter((command) => builtinNames.has(command.name))\n\t\t\t.map((command) => ({\n\t\t\t\ttype: \"warning\" as const,\n\t\t\t\tmessage:\n\t\t\t\t\tcommand.invocationName === command.name\n\t\t\t\t\t\t? `Extension command '/${command.name}' conflicts with built-in interactive command. Skipping in autocomplete.`\n\t\t\t\t\t\t: `Extension command '/${command.name}' conflicts with built-in interactive command. Available as '/${command.invocationName}'.`,\n\t\t\t\tpath: command.sourceInfo.path,\n\t\t\t}));\n\t}\n\n\tprivate createBaseAutocompleteProvider(): AutocompleteProvider {\n\t\t// Define commands for autocomplete\n\t\tconst slashCommands: SlashCommand[] = BUILTIN_SLASH_COMMANDS.map((command) => ({\n\t\t\tname: command.name,\n\t\t\tdescription: command.description,\n\t\t}));\n\n\t\tconst modelCommand = slashCommands.find((command) => command.name === \"model\");\n\t\tif (modelCommand) {\n\t\t\tmodelCommand.getArgumentCompletions = (prefix: string): AutocompleteItem[] | null => {\n\t\t\t\t// Get available models (scoped or from registry)\n\t\t\t\tconst models =\n\t\t\t\t\tthis.session.scopedModels.length > 0\n\t\t\t\t\t\t? this.session.scopedModels.map((s) => s.model)\n\t\t\t\t\t\t: this.session.modelRegistry.getAvailable();\n\n\t\t\t\tif (models.length === 0) return null;\n\n\t\t\t\t// Create items with provider/id format\n\t\t\t\tconst items = models.map((m) => ({\n\t\t\t\t\tid: m.id,\n\t\t\t\t\tprovider: m.provider,\n\t\t\t\t\tlabel: `${m.provider}/${m.id}`,\n\t\t\t\t}));\n\n\t\t\t\t// Fuzzy filter by model ID + provider (allows \"opus anthropic\" to match)\n\t\t\t\tconst filtered = fuzzyFilter(items, prefix, (item) => `${item.id} ${item.provider}`);\n\n\t\t\t\tif (filtered.length === 0) return null;\n\n\t\t\t\treturn filtered.map((item) => ({\n\t\t\t\t\tvalue: item.label,\n\t\t\t\t\tlabel: item.id,\n\t\t\t\t\tdescription: item.provider,\n\t\t\t\t}));\n\t\t\t};\n\t\t}\n\n\t\t// Convert prompt templates to SlashCommand format for autocomplete\n\t\tconst templateCommands: SlashCommand[] = this.session.promptTemplates.map((cmd) => ({\n\t\t\tname: cmd.name,\n\t\t\tdescription: this.prefixAutocompleteDescription(cmd.description, cmd.sourceInfo),\n\t\t\t...(cmd.argumentHint && { argumentHint: cmd.argumentHint }),\n\t\t}));\n\n\t\t// Convert extension commands to SlashCommand format\n\t\tconst builtinCommandNames = new Set(slashCommands.map((c) => c.name));\n\t\tconst extensionCommands: SlashCommand[] = this.session.extensionRunner\n\t\t\t.getRegisteredCommands()\n\t\t\t.filter((cmd) => !builtinCommandNames.has(cmd.name))\n\t\t\t.map((cmd) => ({\n\t\t\t\tname: cmd.invocationName,\n\t\t\t\tdescription: this.prefixAutocompleteDescription(cmd.description, cmd.sourceInfo),\n\t\t\t\tgetArgumentCompletions: cmd.getArgumentCompletions,\n\t\t\t}));\n\n\t\t// Build skill commands from session.skills (if enabled)\n\t\tthis.skillCommands.clear();\n\t\tconst skillCommandList: SlashCommand[] = [];\n\t\tif (this.settingsManager.getEnableSkillCommands()) {\n\t\t\tfor (const skill of this.session.resourceLoader.getSkills().skills) {\n\t\t\t\tconst commandName = `skill:${skill.name}`;\n\t\t\t\tthis.skillCommands.set(commandName, skill.filePath);\n\t\t\t\tskillCommandList.push({\n\t\t\t\t\tname: commandName,\n\t\t\t\t\tdescription: this.prefixAutocompleteDescription(skill.description, skill.sourceInfo),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn new CombinedAutocompleteProvider(\n\t\t\t[...slashCommands, ...templateCommands, ...extensionCommands, ...skillCommandList],\n\t\t\tthis.sessionManager.getCwd(),\n\t\t\tthis.fdPath,\n\t\t);\n\t}\n\n\tprivate setupAutocompleteProvider(): void {\n\t\tlet provider = this.createBaseAutocompleteProvider();\n\t\tfor (const wrapProvider of this.autocompleteProviderWrappers) {\n\t\t\tprovider = wrapProvider(provider);\n\t\t}\n\n\t\tthis.autocompleteProvider = provider;\n\t\tthis.defaultEditor.setAutocompleteProvider(provider);\n\t\tif (this.editor !== this.defaultEditor) {\n\t\t\tthis.editor.setAutocompleteProvider?.(provider);\n\t\t}\n\t}\n\n\tprivate showStartupNoticesIfNeeded(): void {\n\t\tif (this.startupNoticesShown) {\n\t\t\treturn;\n\t\t}\n\t\tthis.startupNoticesShown = true;\n\n\t\tif (!this.changelogMarkdown) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.chatContainer.children.length > 0) {\n\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t}\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tif (this.settingsManager.getCollapseChangelog()) {\n\t\t\tconst versionMatch = this.changelogMarkdown.match(/##\\s+\\[?(\\d+\\.\\d+\\.\\d+)\\]?/);\n\t\t\tconst latestVersion = versionMatch ? versionMatch[1] : this.version;\n\t\t\tconst condensedText = `Updated to v${latestVersion}. Use ${theme.bold(\"/changelog\")} to view full changelog.`;\n\t\t\tthis.chatContainer.addChild(new Text(condensedText, 1, 0));\n\t\t} else {\n\t\t\tthis.chatContainer.addChild(new Text(theme.bold(theme.fg(\"accent\", \"What's New\")), 1, 0));\n\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\tthis.chatContainer.addChild(\n\t\t\t\tnew Markdown(this.changelogMarkdown.trim(), 1, 0, this.getMarkdownThemeWithSettings()),\n\t\t\t);\n\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t}\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t}\n\n\tasync init(): Promise<void> {\n\t\tif (this.isInitialized) return;\n\n\t\tthis.registerSignalHandlers();\n\n\t\t// Load changelog (only show new entries, skip for resumed sessions)\n\t\tthis.changelogMarkdown = this.getChangelogForDisplay();\n\n\t\t// Ensure fd and rg are available (downloads if missing, adds to PATH via getBinDir)\n\t\t// Both are needed: fd for autocomplete, rg for grep tool and bash commands\n\t\tconst [fdPath] = await Promise.all([ensureTool(\"fd\"), ensureTool(\"rg\")]);\n\t\tthis.fdPath = fdPath;\n\n\t\tif (this.session.scopedModels.length > 0 && (this.options.verbose || !this.settingsManager.getQuietStartup())) {\n\t\t\tconst modelList = this.session.scopedModels\n\t\t\t\t.map((sm) => {\n\t\t\t\t\tconst thinkingStr = sm.thinkingLevel ? `:${sm.thinkingLevel}` : \"\";\n\t\t\t\t\treturn `${sm.model.id}${thinkingStr}`;\n\t\t\t\t})\n\t\t\t\t.join(\", \");\n\t\t\tconst cycleKeys = this.keybindings.getKeys(\"app.model.cycleForward\");\n\t\t\tconst cycleHint =\n\t\t\t\tcycleKeys.length > 0\n\t\t\t\t\t? theme.fg(\"muted\", ` (${formatKeyText(cycleKeys.join(\"/\"), { capitalize: true })} to cycle)`)\n\t\t\t\t\t: \"\";\n\t\t\tconsole.log(theme.fg(\"dim\", `Model scope: ${modelList}${cycleHint}`));\n\t\t}\n\n\t\t// Add header container as first child\n\t\tthis.ui.addChild(this.headerContainer);\n\n\t\t// Add header with keybindings from config (unless silenced)\n\t\tif (this.options.verbose || !this.settingsManager.getQuietStartup()) {\n\t\t\tconst logo = theme.bold(theme.fg(\"accent\", APP_NAME)) + theme.fg(\"dim\", ` v${this.version}`);\n\n\t\t\t// Build startup instructions using keybinding hint helpers\n\t\t\tconst hint = (keybinding: AppKeybinding, description: string) => keyHint(keybinding, description);\n\n\t\t\tconst expandedInstructions = [\n\t\t\t\thint(\"app.interrupt\", \"to interrupt\"),\n\t\t\t\thint(\"app.clear\", \"to clear\"),\n\t\t\t\trawKeyHint(`${keyText(\"app.clear\")} twice`, \"to exit\"),\n\t\t\t\thint(\"app.exit\", \"to exit (empty)\"),\n\t\t\t\thint(\"app.suspend\", \"to suspend\"),\n\t\t\t\tkeyHint(\"tui.editor.deleteToLineEnd\", \"to delete to end\"),\n\t\t\t\thint(\"app.thinking.cycle\", \"to cycle thinking level\"),\n\t\t\t\trawKeyHint(`${keyText(\"app.model.cycleForward\")}/${keyText(\"app.model.cycleBackward\")}`, \"to cycle models\"),\n\t\t\t\thint(\"app.model.select\", \"to select model\"),\n\t\t\t\thint(\"app.tools.expand\", \"to expand tools\"),\n\t\t\t\thint(\"app.thinking.toggle\", \"to expand thinking\"),\n\t\t\t\thint(\"app.editor.external\", \"for external editor\"),\n\t\t\t\trawKeyHint(\"/\", \"for commands\"),\n\t\t\t\trawKeyHint(\"!\", \"to run bash\"),\n\t\t\t\trawKeyHint(\"!!\", \"to run bash (no context)\"),\n\t\t\t\thint(\"app.message.followUp\", \"to queue follow-up\"),\n\t\t\t\thint(\"app.message.dequeue\", \"to edit all queued messages\"),\n\t\t\t\thint(\"app.clipboard.pasteImage\", \"to paste image\"),\n\t\t\t\trawKeyHint(\"drop files\", \"to attach\"),\n\t\t\t].join(\"\\n\");\n\t\t\tconst compactInstructions = [\n\t\t\t\thint(\"app.interrupt\", \"interrupt\"),\n\t\t\t\trawKeyHint(`${keyText(\"app.clear\")}/${keyText(\"app.exit\")}`, \"clear/exit\"),\n\t\t\t\trawKeyHint(\"/\", \"commands\"),\n\t\t\t\trawKeyHint(\"!\", \"bash\"),\n\t\t\t\thint(\"app.tools.expand\", \"more\"),\n\t\t\t].join(theme.fg(\"muted\", \" · \"));\n\t\t\tconst compactOnboarding = theme.fg(\n\t\t\t\t\"dim\",\n\t\t\t\t`Press ${keyText(\"app.tools.expand\")} to show full startup help and loaded resources.`,\n\t\t\t);\n\t\t\tconst onboarding = theme.fg(\n\t\t\t\t\"dim\",\n\t\t\t\t`Pi can explain its own features and look up its docs. Ask it how to use or extend Pi.`,\n\t\t\t);\n\t\t\tthis.builtInHeader = new ExpandableText(\n\t\t\t\t() => `${logo}\\n${compactInstructions}\\n${compactOnboarding}\\n\\n${onboarding}`,\n\t\t\t\t() => `${logo}\\n${expandedInstructions}\\n\\n${onboarding}`,\n\t\t\t\tthis.getStartupExpansionState(),\n\t\t\t\t1,\n\t\t\t\t0,\n\t\t\t);\n\n\t\t\t// Setup UI layout\n\t\t\tthis.headerContainer.addChild(new Spacer(1));\n\t\t\tthis.headerContainer.addChild(this.builtInHeader);\n\t\t\tthis.headerContainer.addChild(new Spacer(1));\n\t\t} else {\n\t\t\t// Minimal header when silenced\n\t\t\tthis.builtInHeader = new Text(\"\", 0, 0);\n\t\t\tthis.headerContainer.addChild(this.builtInHeader);\n\t\t}\n\n\t\tthis.ui.addChild(this.chatContainer);\n\t\tthis.ui.addChild(this.pendingMessagesContainer);\n\t\tthis.ui.addChild(this.statusContainer);\n\t\tthis.renderWidgets(); // Initialize with default spacer\n\t\tthis.ui.addChild(this.widgetContainerAbove);\n\t\tthis.ui.addChild(this.editorContainer);\n\t\tthis.ui.addChild(this.widgetContainerBelow);\n\t\tthis.ui.addChild(this.footer);\n\t\tthis.ui.setFocus(this.editor);\n\n\t\tthis.setupKeyHandlers();\n\t\tthis.setupEditorSubmitHandler();\n\n\t\t// Start the UI before initializing extensions so session_start handlers can use interactive dialogs\n\t\tthis.ui.start();\n\t\tthis.isInitialized = true;\n\n\t\t// Initialize extensions first so resources are shown before messages\n\t\tawait this.rebindCurrentSession();\n\n\t\t// Render initial messages AFTER showing loaded resources\n\t\tthis.renderInitialMessages();\n\n\t\t// Set up theme file watcher\n\t\tonThemeChange(() => {\n\t\t\tthis.ui.invalidate();\n\t\t\tthis.updateEditorBorderColor();\n\t\t\tthis.ui.requestRender();\n\t\t});\n\n\t\t// Set up git branch watcher (uses provider instead of footer)\n\t\tthis.footerDataProvider.onBranchChange(() => {\n\t\t\tthis.ui.requestRender();\n\t\t});\n\n\t\t// Initialize available provider count for footer display\n\t\tawait this.updateAvailableProviderCount();\n\t}\n\n\t/**\n\t * Update terminal title with session name and cwd.\n\t */\n\tprivate updateTerminalTitle(): void {\n\t\tconst cwdBasename = path.basename(this.sessionManager.getCwd());\n\t\tconst sessionName = this.sessionManager.getSessionName();\n\t\tif (sessionName) {\n\t\t\tthis.ui.terminal.setTitle(`${APP_TITLE} - ${sessionName} - ${cwdBasename}`);\n\t\t} else {\n\t\t\tthis.ui.terminal.setTitle(`${APP_TITLE} - ${cwdBasename}`);\n\t\t}\n\t}\n\n\t/**\n\t * Run the interactive mode. This is the main entry point.\n\t * Initializes the UI, shows warnings, processes initial messages, and starts the interactive loop.\n\t */\n\tasync run(): Promise<void> {\n\t\tawait this.init();\n\n\t\t// Start version/package update checks asynchronously. AutoPM's standalone\n\t\t// runtime already reports local-manual release state in its own dashboard;\n\t\t// surfacing Pi package update banners here makes first-run setup look broken.\n\t\tif (!isAutoPmRuntime()) {\n\t\t\tcheckForNewPiVersion(this.version).then((newVersion) => {\n\t\t\t\tif (newVersion) {\n\t\t\t\t\tthis.showNewVersionNotification(newVersion);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.checkForPackageUpdates().then((updates) => {\n\t\t\t\tif (updates.length > 0) {\n\t\t\t\t\tthis.showPackageUpdateNotification(updates);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// Check tmux keyboard setup asynchronously\n\t\tthis.checkTmuxKeyboardSetup().then((warning) => {\n\t\t\tif (warning) {\n\t\t\t\tthis.showWarning(warning);\n\t\t\t}\n\t\t});\n\n\t\t// Show startup warnings\n\t\tconst { migratedProviders, modelFallbackMessage, initialMessage, initialImages, initialMessages } = this.options;\n\n\t\tif (migratedProviders && migratedProviders.length > 0) {\n\t\t\tthis.showWarning(`Migrated credentials to auth.json: ${migratedProviders.join(\", \")}`);\n\t\t}\n\n\t\tconst modelsJsonError = this.session.modelRegistry.getError();\n\t\tif (modelsJsonError) {\n\t\t\tthis.showError(`models.json error: ${modelsJsonError}`);\n\t\t}\n\n\t\tif (modelFallbackMessage) {\n\t\t\tthis.showWarning(modelFallbackMessage);\n\t\t}\n\n\t\tvoid this.maybeWarnAboutAnthropicSubscriptionAuth();\n\n\t\t// Process initial messages\n\t\tif (initialMessage) {\n\t\t\ttry {\n\t\t\t\tawait this.session.prompt(initialMessage, { images: initialImages });\n\t\t\t} catch (error: unknown) {\n\t\t\t\tconst errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\n\t\t\t\tthis.showError(errorMessage);\n\t\t\t}\n\t\t}\n\n\t\tif (initialMessages) {\n\t\t\tfor (const message of initialMessages) {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.session.prompt(message);\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\tconst errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\n\t\t\t\t\tthis.showError(errorMessage);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Main interactive loop\n\t\twhile (true) {\n\t\t\tconst userInput = await this.getUserInput();\n\t\t\ttry {\n\t\t\t\tawait this.session.prompt(userInput);\n\t\t\t} catch (error: unknown) {\n\t\t\t\tconst errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\n\t\t\t\tthis.showError(errorMessage);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async checkForPackageUpdates(): Promise<string[]> {\n\t\tif (process.env.PI_OFFLINE) {\n\t\t\treturn [];\n\t\t}\n\n\t\ttry {\n\t\t\tconst packageManager = new DefaultPackageManager({\n\t\t\t\tcwd: this.sessionManager.getCwd(),\n\t\t\t\tagentDir: getAgentDir(),\n\t\t\t\tsettingsManager: this.settingsManager,\n\t\t\t});\n\t\t\tconst updates = await packageManager.checkForAvailableUpdates();\n\t\t\treturn updates.map((update) => update.displayName);\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\tprivate async checkTmuxKeyboardSetup(): Promise<string | undefined> {\n\t\tif (!process.env.TMUX) return undefined;\n\n\t\tconst runTmuxShow = (option: string): Promise<string | undefined> => {\n\t\t\treturn new Promise((resolve) => {\n\t\t\t\tconst proc = spawn(\"tmux\", [\"show\", \"-gv\", option], {\n\t\t\t\t\tstdio: [\"ignore\", \"pipe\", \"ignore\"],\n\t\t\t\t});\n\t\t\t\tlet stdout = \"\";\n\t\t\t\tconst timer = setTimeout(() => {\n\t\t\t\t\tproc.kill();\n\t\t\t\t\tresolve(undefined);\n\t\t\t\t}, 2000);\n\n\t\t\t\tproc.stdout?.on(\"data\", (data) => {\n\t\t\t\t\tstdout += data.toString();\n\t\t\t\t});\n\t\t\t\tproc.on(\"error\", () => {\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\tresolve(undefined);\n\t\t\t\t});\n\t\t\t\tproc.on(\"close\", (code) => {\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\tresolve(code === 0 ? stdout.trim() : undefined);\n\t\t\t\t});\n\t\t\t});\n\t\t};\n\n\t\tconst [extendedKeys, extendedKeysFormat] = await Promise.all([\n\t\t\trunTmuxShow(\"extended-keys\"),\n\t\t\trunTmuxShow(\"extended-keys-format\"),\n\t\t]);\n\n\t\t// If we couldn't query tmux (timeout, sandbox, etc.), don't warn\n\t\tif (extendedKeys === undefined) return undefined;\n\n\t\tif (extendedKeys !== \"on\" && extendedKeys !== \"always\") {\n\t\t\treturn \"tmux extended-keys is off. Modified Enter keys may not work. Add `set -g extended-keys on` to ~/.tmux.conf and restart tmux.\";\n\t\t}\n\n\t\tif (extendedKeysFormat === \"xterm\") {\n\t\t\treturn \"tmux extended-keys-format is xterm. Pi works best with csi-u. Add `set -g extended-keys-format csi-u` to ~/.tmux.conf and restart tmux.\";\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Get changelog entries to display on startup.\n\t * Only shows new entries since last seen version, skips for resumed sessions.\n\t */\n\tprivate getChangelogForDisplay(): string | undefined {\n\t\t// Skip changelog for resumed/continued sessions (already have messages)\n\t\tif (this.session.state.messages.length > 0) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst lastVersion = this.settingsManager.getLastChangelogVersion();\n\t\tconst changelogPath = getChangelogPath();\n\t\tconst entries = parseChangelog(changelogPath);\n\n\t\tif (!lastVersion) {\n\t\t\t// Fresh install - record the version, send telemetry, don't show changelog\n\t\t\tthis.settingsManager.setLastChangelogVersion(VERSION);\n\t\t\tthis.reportInstallTelemetry(VERSION);\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst newEntries = getNewEntries(entries, lastVersion);\n\t\tif (newEntries.length > 0) {\n\t\t\tthis.settingsManager.setLastChangelogVersion(VERSION);\n\t\t\tthis.reportInstallTelemetry(VERSION);\n\t\t\treturn newEntries.map((e) => e.content).join(\"\\n\\n\");\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tprivate reportInstallTelemetry(version: string): void {\n\t\tif (process.env.PI_OFFLINE) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!isInstallTelemetryEnabled(this.settingsManager)) {\n\t\t\treturn;\n\t\t}\n\n\t\tvoid fetch(`https://pi.dev/api/report-install?version=${encodeURIComponent(version)}`, {\n\t\t\theaders: {\n\t\t\t\t\"User-Agent\": getPiUserAgent(version),\n\t\t\t},\n\t\t\tsignal: AbortSignal.timeout(5000),\n\t\t})\n\t\t\t.then(() => undefined)\n\t\t\t.catch(() => undefined);\n\t}\n\n\tprivate getMarkdownThemeWithSettings(): MarkdownTheme {\n\t\treturn {\n\t\t\t...getMarkdownTheme(),\n\t\t\tcodeBlockIndent: this.settingsManager.getCodeBlockIndent(),\n\t\t};\n\t}\n\n\t// =========================================================================\n\t// Extension System\n\t// =========================================================================\n\n\tprivate formatDisplayPath(p: string): string {\n\t\tconst home = os.homedir();\n\t\tlet result = p;\n\n\t\t// Replace home directory with ~\n\t\tif (result.startsWith(home)) {\n\t\t\tresult = `~${result.slice(home.length)}`;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tprivate formatExtensionDisplayPath(path: string): string {\n\t\tlet result = this.formatDisplayPath(path);\n\t\tresult = result.replace(/\\/index\\.ts$/, \"\").replace(/\\/index\\.js$/, \"\");\n\t\treturn result;\n\t}\n\n\tprivate formatContextPath(p: string): string {\n\t\tconst cwd = path.resolve(this.sessionManager.getCwd());\n\t\tconst absolutePath = path.isAbsolute(p) ? path.resolve(p) : path.resolve(cwd, p);\n\t\tconst relativePath = getCwdRelativePath(absolutePath, cwd);\n\t\tif (relativePath !== undefined) {\n\t\t\treturn relativePath;\n\t\t}\n\n\t\treturn this.formatDisplayPath(absolutePath);\n\t}\n\n\tprivate getStartupExpansionState(): boolean {\n\t\treturn this.options.verbose || this.toolOutputExpanded;\n\t}\n\n\t/**\n\t * Get a short path relative to the package root for display.\n\t */\n\tprivate getShortPath(fullPath: string, sourceInfo?: SourceInfo): string {\n\t\tconst baseDir = sourceInfo?.baseDir;\n\t\tif (baseDir && this.isPackageSource(sourceInfo)) {\n\t\t\tconst relativePath = path.relative(path.resolve(baseDir), path.resolve(fullPath));\n\t\t\tif (\n\t\t\t\trelativePath &&\n\t\t\t\trelativePath !== \".\" &&\n\t\t\t\t!relativePath.startsWith(\"..\") &&\n\t\t\t\t!relativePath.startsWith(`..${path.sep}`) &&\n\t\t\t\t!path.isAbsolute(relativePath)\n\t\t\t) {\n\t\t\t\treturn relativePath.replace(/\\\\/g, \"/\");\n\t\t\t}\n\t\t}\n\n\t\tconst source = sourceInfo?.source ?? \"\";\n\t\tconst npmMatch = fullPath.match(/node_modules\\/(@?[^/]+(?:\\/[^/]+)?)\\/(.*)/);\n\t\tif (npmMatch && source.startsWith(\"npm:\")) {\n\t\t\treturn npmMatch[2];\n\t\t}\n\n\t\tconst gitMatch = fullPath.match(/git\\/[^/]+\\/[^/]+\\/(.*)/);\n\t\tif (gitMatch && source.startsWith(\"git:\")) {\n\t\t\treturn gitMatch[1];\n\t\t}\n\n\t\treturn this.formatDisplayPath(fullPath);\n\t}\n\n\tprivate getCompactPathLabel(resourcePath: string, sourceInfo?: SourceInfo): string {\n\t\tconst shortPath = this.getShortPath(resourcePath, sourceInfo);\n\t\tconst normalizedPath = shortPath.replace(/\\\\/g, \"/\");\n\t\tconst segments = normalizedPath.split(\"/\").filter((segment) => segment.length > 0 && segment !== \"~\");\n\t\tif (segments.length > 0) {\n\t\t\treturn segments[segments.length - 1]!;\n\t\t}\n\t\treturn shortPath;\n\t}\n\n\tprivate getCompactPackageSourceLabel(sourceInfo?: SourceInfo): string {\n\t\tconst source = sourceInfo?.source ?? \"\";\n\t\tif (source.startsWith(\"npm:\")) {\n\t\t\treturn source.slice(\"npm:\".length) || source;\n\t\t}\n\n\t\tconst gitSource = parseGitUrl(source);\n\t\tif (gitSource) {\n\t\t\treturn gitSource.path || source;\n\t\t}\n\n\t\treturn source;\n\t}\n\n\tprivate getCompactExtensionLabel(resourcePath: string, sourceInfo?: SourceInfo): string {\n\t\tif (!this.isPackageSource(sourceInfo)) {\n\t\t\treturn this.getCompactPathLabel(resourcePath, sourceInfo);\n\t\t}\n\n\t\tconst sourceLabel = this.getCompactPackageSourceLabel(sourceInfo);\n\t\tif (!sourceLabel) {\n\t\t\treturn this.getCompactPathLabel(resourcePath, sourceInfo);\n\t\t}\n\n\t\tconst shortPath = this.getShortPath(resourcePath, sourceInfo).replace(/\\\\/g, \"/\");\n\t\tconst packagePath = shortPath.startsWith(\"extensions/\") ? shortPath.slice(\"extensions/\".length) : shortPath;\n\t\tconst parsedPath = path.posix.parse(packagePath);\n\n\t\tif (parsedPath.name === \"index\") {\n\t\t\treturn !parsedPath.dir || parsedPath.dir === \".\" ? sourceLabel : `${sourceLabel}:${parsedPath.dir}`;\n\t\t}\n\n\t\treturn `${sourceLabel}:${packagePath}`;\n\t}\n\n\tprivate getCompactDisplayPathSegments(resourcePath: string): string[] {\n\t\treturn this.formatDisplayPath(resourcePath)\n\t\t\t.replace(/\\\\/g, \"/\")\n\t\t\t.split(\"/\")\n\t\t\t.filter((segment) => segment.length > 0 && segment !== \"~\");\n\t}\n\n\tprivate getCompactNonPackageExtensionLabel(\n\t\tresourcePath: string,\n\t\tindex: number,\n\t\tallPaths: Array<{ path: string; segments: string[] }>,\n\t): string {\n\t\tconst segments = allPaths[index]?.segments;\n\t\tif (!segments || segments.length === 0) {\n\t\t\treturn this.getCompactPathLabel(resourcePath);\n\t\t}\n\n\t\tfor (let segmentCount = 1; segmentCount <= segments.length; segmentCount += 1) {\n\t\t\tconst candidate = segments.slice(-segmentCount).join(\"/\");\n\t\t\tconst isUnique = allPaths.every((item, itemIndex) => {\n\t\t\t\tif (itemIndex === index) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn item.segments.slice(-segmentCount).join(\"/\") !== candidate;\n\t\t\t});\n\n\t\t\tif (isUnique) {\n\t\t\t\treturn candidate;\n\t\t\t}\n\t\t}\n\n\t\treturn segments.join(\"/\");\n\t}\n\n\tprivate getCompactExtensionLabels(extensions: Array<{ path: string; sourceInfo?: SourceInfo }>): string[] {\n\t\tconst nonPackageExtensions = extensions\n\t\t\t.map((extension) => {\n\t\t\t\tconst segments = this.getCompactDisplayPathSegments(extension.path);\n\t\t\t\tconst lastSegment = segments[segments.length - 1];\n\t\t\t\tif (segments.length > 1 && (lastSegment === \"index.ts\" || lastSegment === \"index.js\")) {\n\t\t\t\t\tsegments.pop();\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tpath: extension.path,\n\t\t\t\t\tsourceInfo: extension.sourceInfo,\n\t\t\t\t\tsegments,\n\t\t\t\t};\n\t\t\t})\n\t\t\t.filter((extension) => !this.isPackageSource(extension.sourceInfo));\n\n\t\treturn extensions.map((extension) => {\n\t\t\tif (this.isPackageSource(extension.sourceInfo)) {\n\t\t\t\treturn this.getCompactExtensionLabel(extension.path, extension.sourceInfo);\n\t\t\t}\n\n\t\t\tconst nonPackageIndex = nonPackageExtensions.findIndex((item) => item.path === extension.path);\n\t\t\tif (nonPackageIndex === -1) {\n\t\t\t\treturn this.getCompactPathLabel(extension.path, extension.sourceInfo);\n\t\t\t}\n\n\t\t\treturn this.getCompactNonPackageExtensionLabel(extension.path, nonPackageIndex, nonPackageExtensions);\n\t\t});\n\t}\n\n\tprivate getDisplaySourceInfo(sourceInfo?: SourceInfo): {\n\t\tlabel: string;\n\t\tscopeLabel?: string;\n\t\tcolor: \"accent\" | \"muted\";\n\t} {\n\t\tconst source = sourceInfo?.source ?? \"local\";\n\t\tconst scope = sourceInfo?.scope ?? \"project\";\n\t\tif (source === \"local\") {\n\t\t\tif (scope === \"user\") {\n\t\t\t\treturn { label: \"user\", color: \"muted\" };\n\t\t\t}\n\t\t\tif (scope === \"project\") {\n\t\t\t\treturn { label: \"project\", color: \"muted\" };\n\t\t\t}\n\t\t\tif (scope === \"temporary\") {\n\t\t\t\treturn { label: \"path\", scopeLabel: \"temp\", color: \"muted\" };\n\t\t\t}\n\t\t\treturn { label: \"path\", color: \"muted\" };\n\t\t}\n\n\t\tif (source === \"cli\") {\n\t\t\treturn { label: \"path\", scopeLabel: scope === \"temporary\" ? \"temp\" : undefined, color: \"muted\" };\n\t\t}\n\n\t\tconst scopeLabel =\n\t\t\tscope === \"user\" ? \"user\" : scope === \"project\" ? \"project\" : scope === \"temporary\" ? \"temp\" : undefined;\n\t\treturn { label: source, scopeLabel, color: \"accent\" };\n\t}\n\n\tprivate getScopeGroup(sourceInfo?: SourceInfo): \"user\" | \"project\" | \"path\" {\n\t\tconst source = sourceInfo?.source ?? \"local\";\n\t\tconst scope = sourceInfo?.scope ?? \"project\";\n\t\tif (source === \"cli\" || scope === \"temporary\") return \"path\";\n\t\tif (scope === \"user\") return \"user\";\n\t\tif (scope === \"project\") return \"project\";\n\t\treturn \"path\";\n\t}\n\n\tprivate isPackageSource(sourceInfo?: SourceInfo): boolean {\n\t\tconst source = sourceInfo?.source ?? \"\";\n\t\treturn source.startsWith(\"npm:\") || source.startsWith(\"git:\");\n\t}\n\n\tprivate buildScopeGroups(items: Array<{ path: string; sourceInfo?: SourceInfo }>): Array<{\n\t\tscope: \"user\" | \"project\" | \"path\";\n\t\tpaths: Array<{ path: string; sourceInfo?: SourceInfo }>;\n\t\tpackages: Map<string, Array<{ path: string; sourceInfo?: SourceInfo }>>;\n\t}> {\n\t\tconst groups: Record<\n\t\t\t\"user\" | \"project\" | \"path\",\n\t\t\t{\n\t\t\t\tscope: \"user\" | \"project\" | \"path\";\n\t\t\t\tpaths: Array<{ path: string; sourceInfo?: SourceInfo }>;\n\t\t\t\tpackages: Map<string, Array<{ path: string; sourceInfo?: SourceInfo }>>;\n\t\t\t}\n\t\t> = {\n\t\t\tuser: { scope: \"user\", paths: [], packages: new Map() },\n\t\t\tproject: { scope: \"project\", paths: [], packages: new Map() },\n\t\t\tpath: { scope: \"path\", paths: [], packages: new Map() },\n\t\t};\n\n\t\tfor (const item of items) {\n\t\t\tconst groupKey = this.getScopeGroup(item.sourceInfo);\n\t\t\tconst group = groups[groupKey];\n\t\t\tconst source = item.sourceInfo?.source ?? \"local\";\n\n\t\t\tif (this.isPackageSource(item.sourceInfo)) {\n\t\t\t\tconst list = group.packages.get(source) ?? [];\n\t\t\t\tlist.push(item);\n\t\t\t\tgroup.packages.set(source, list);\n\t\t\t} else {\n\t\t\t\tgroup.paths.push(item);\n\t\t\t}\n\t\t}\n\n\t\treturn [groups.project, groups.user, groups.path].filter(\n\t\t\t(group) => group.paths.length > 0 || group.packages.size > 0,\n\t\t);\n\t}\n\n\tprivate formatScopeGroups(\n\t\tgroups: Array<{\n\t\t\tscope: \"user\" | \"project\" | \"path\";\n\t\t\tpaths: Array<{ path: string; sourceInfo?: SourceInfo }>;\n\t\t\tpackages: Map<string, Array<{ path: string; sourceInfo?: SourceInfo }>>;\n\t\t}>,\n\t\toptions: {\n\t\t\tformatPath: (item: { path: string; sourceInfo?: SourceInfo }) => string;\n\t\t\tformatPackagePath: (item: { path: string; sourceInfo?: SourceInfo }, source: string) => string;\n\t\t},\n\t): string {\n\t\tconst lines: string[] = [];\n\n\t\tfor (const group of groups) {\n\t\t\tlines.push(` ${theme.fg(\"accent\", group.scope)}`);\n\n\t\t\tconst sortedPaths = [...group.paths].sort((a, b) => a.path.localeCompare(b.path));\n\t\t\tfor (const item of sortedPaths) {\n\t\t\t\tlines.push(theme.fg(\"dim\", ` ${options.formatPath(item)}`));\n\t\t\t}\n\n\t\t\tconst sortedPackages = Array.from(group.packages.entries()).sort(([a], [b]) => a.localeCompare(b));\n\t\t\tfor (const [source, items] of sortedPackages) {\n\t\t\t\tlines.push(` ${theme.fg(\"mdLink\", source)}`);\n\t\t\t\tconst sortedPackagePaths = [...items].sort((a, b) => a.path.localeCompare(b.path));\n\t\t\t\tfor (const item of sortedPackagePaths) {\n\t\t\t\t\tlines.push(theme.fg(\"dim\", ` ${options.formatPackagePath(item, source)}`));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn lines.join(\"\\n\");\n\t}\n\n\tprivate findSourceInfoForPath(p: string, sourceInfos: Map<string, SourceInfo>): SourceInfo | undefined {\n\t\tconst exact = sourceInfos.get(p);\n\t\tif (exact) return exact;\n\n\t\tlet current = p;\n\t\twhile (current.includes(\"/\")) {\n\t\t\tcurrent = current.substring(0, current.lastIndexOf(\"/\"));\n\t\t\tconst parent = sourceInfos.get(current);\n\t\t\tif (parent) return parent;\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tprivate formatPathWithSource(p: string, sourceInfo?: SourceInfo): string {\n\t\tif (sourceInfo) {\n\t\t\tconst shortPath = this.getShortPath(p, sourceInfo);\n\t\t\tconst { label, scopeLabel } = this.getDisplaySourceInfo(sourceInfo);\n\t\t\tconst labelText = scopeLabel ? `${label} (${scopeLabel})` : label;\n\t\t\treturn `${labelText} ${shortPath}`;\n\t\t}\n\t\treturn this.formatDisplayPath(p);\n\t}\n\n\tprivate formatDiagnostics(diagnostics: readonly ResourceDiagnostic[], sourceInfos: Map<string, SourceInfo>): string {\n\t\tconst lines: string[] = [];\n\n\t\t// Group collision diagnostics by name\n\t\tconst collisions = new Map<string, ResourceDiagnostic[]>();\n\t\tconst otherDiagnostics: ResourceDiagnostic[] = [];\n\n\t\tfor (const d of diagnostics) {\n\t\t\tif (d.type === \"collision\" && d.collision) {\n\t\t\t\tconst list = collisions.get(d.collision.name) ?? [];\n\t\t\t\tlist.push(d);\n\t\t\t\tcollisions.set(d.collision.name, list);\n\t\t\t} else {\n\t\t\t\totherDiagnostics.push(d);\n\t\t\t}\n\t\t}\n\n\t\t// Format collision diagnostics grouped by name\n\t\tfor (const [name, collisionList] of collisions) {\n\t\t\tconst first = collisionList[0]?.collision;\n\t\t\tif (!first) continue;\n\t\t\tlines.push(theme.fg(\"warning\", ` \"${name}\" collision:`));\n\t\t\tlines.push(\n\t\t\t\ttheme.fg(\n\t\t\t\t\t\"dim\",\n\t\t\t\t\t` ${theme.fg(\"success\", \"✓\")} ${this.formatPathWithSource(first.winnerPath, this.findSourceInfoForPath(first.winnerPath, sourceInfos))}`,\n\t\t\t\t),\n\t\t\t);\n\t\t\tfor (const d of collisionList) {\n\t\t\t\tif (d.collision) {\n\t\t\t\t\tlines.push(\n\t\t\t\t\t\ttheme.fg(\n\t\t\t\t\t\t\t\"dim\",\n\t\t\t\t\t\t\t` ${theme.fg(\"warning\", \"✗\")} ${this.formatPathWithSource(d.collision.loserPath, this.findSourceInfoForPath(d.collision.loserPath, sourceInfos))} (skipped)`,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (const d of otherDiagnostics) {\n\t\t\tif (d.path) {\n\t\t\t\tconst formattedPath = this.formatPathWithSource(d.path, this.findSourceInfoForPath(d.path, sourceInfos));\n\t\t\t\tlines.push(theme.fg(d.type === \"error\" ? \"error\" : \"warning\", ` ${formattedPath}`));\n\t\t\t\tlines.push(theme.fg(d.type === \"error\" ? \"error\" : \"warning\", ` ${d.message}`));\n\t\t\t} else {\n\t\t\t\tlines.push(theme.fg(d.type === \"error\" ? \"error\" : \"warning\", ` ${d.message}`));\n\t\t\t}\n\t\t}\n\n\t\treturn lines.join(\"\\n\");\n\t}\n\n\tprivate showLoadedResources(options?: {\n\t\textensions?: Array<{ path: string; sourceInfo?: SourceInfo }>;\n\t\tforce?: boolean;\n\t\tshowDiagnosticsWhenQuiet?: boolean;\n\t}): void {\n\t\tconst showListing = options?.force || this.options.verbose || (!this.settingsManager.getQuietStartup() && !isAutoPmRuntime());\n\t\tconst showDiagnostics = showListing || options?.showDiagnosticsWhenQuiet === true;\n\t\tif (!showListing && !showDiagnostics) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst sectionHeader = (name: string, color: ThemeColor = \"mdHeading\") => theme.fg(color, `[${name}]`);\n\t\tconst formatCompactList = (items: string[], options?: { sort?: boolean }): string => {\n\t\t\tconst labels = items.map((item) => item.trim()).filter((item) => item.length > 0);\n\t\t\tif (options?.sort !== false) {\n\t\t\t\tlabels.sort((a, b) => a.localeCompare(b));\n\t\t\t}\n\t\t\treturn theme.fg(\"dim\", ` ${labels.join(\", \")}`);\n\t\t};\n\t\tconst addLoadedSection = (\n\t\t\tname: string,\n\t\t\tcollapsedBody: string,\n\t\t\texpandedBody = collapsedBody,\n\t\t\tcolor: ThemeColor = \"mdHeading\",\n\t\t): void => {\n\t\t\tconst section = new ExpandableText(\n\t\t\t\t() => `${sectionHeader(name, color)}\\n${collapsedBody}`,\n\t\t\t\t() => `${sectionHeader(name, color)}\\n${expandedBody}`,\n\t\t\t\tthis.getStartupExpansionState(),\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t);\n\t\t\tthis.chatContainer.addChild(section);\n\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t};\n\n\t\tconst skillsResult = this.session.resourceLoader.getSkills();\n\t\tconst promptsResult = this.session.resourceLoader.getPrompts();\n\t\tconst themesResult = this.session.resourceLoader.getThemes();\n\t\tconst extensions =\n\t\t\toptions?.extensions ??\n\t\t\tthis.session.resourceLoader.getExtensions().extensions.map((extension) => ({\n\t\t\t\tpath: extension.path,\n\t\t\t\tsourceInfo: extension.sourceInfo,\n\t\t\t}));\n\t\tconst sourceInfos = new Map<string, SourceInfo>();\n\t\tfor (const extension of extensions) {\n\t\t\tif (extension.sourceInfo) {\n\t\t\t\tsourceInfos.set(extension.path, extension.sourceInfo);\n\t\t\t}\n\t\t}\n\t\tfor (const skill of skillsResult.skills) {\n\t\t\tif (skill.sourceInfo) {\n\t\t\t\tsourceInfos.set(skill.filePath, skill.sourceInfo);\n\t\t\t}\n\t\t}\n\t\tfor (const prompt of promptsResult.prompts) {\n\t\t\tif (prompt.sourceInfo) {\n\t\t\t\tsourceInfos.set(prompt.filePath, prompt.sourceInfo);\n\t\t\t}\n\t\t}\n\t\tfor (const loadedTheme of themesResult.themes) {\n\t\t\tif (loadedTheme.sourcePath && loadedTheme.sourceInfo) {\n\t\t\t\tsourceInfos.set(loadedTheme.sourcePath, loadedTheme.sourceInfo);\n\t\t\t}\n\t\t}\n\n\t\tif (showListing) {\n\t\t\tconst contextFiles = this.session.resourceLoader.getAgentsFiles().agentsFiles;\n\t\t\tif (contextFiles.length > 0) {\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\tconst contextList = contextFiles\n\t\t\t\t\t.map((f) => theme.fg(\"dim\", ` ${this.formatDisplayPath(f.path)}`))\n\t\t\t\t\t.join(\"\\n\");\n\t\t\t\tconst contextCompactList = formatCompactList(\n\t\t\t\t\tcontextFiles.map((contextFile) => this.formatContextPath(contextFile.path)),\n\t\t\t\t\t{ sort: false },\n\t\t\t\t);\n\t\t\t\taddLoadedSection(\"Context\", contextCompactList, contextList);\n\t\t\t}\n\n\t\t\tconst skills = skillsResult.skills;\n\t\t\tif (skills.length > 0) {\n\t\t\t\tconst groups = this.buildScopeGroups(\n\t\t\t\t\tskills.map((skill) => ({ path: skill.filePath, sourceInfo: skill.sourceInfo })),\n\t\t\t\t);\n\t\t\t\tconst skillList = this.formatScopeGroups(groups, {\n\t\t\t\t\tformatPath: (item) => this.formatDisplayPath(item.path),\n\t\t\t\t\tformatPackagePath: (item) => this.getShortPath(item.path, item.sourceInfo),\n\t\t\t\t});\n\t\t\t\tconst skillCompactList = formatCompactList(skills.map((skill) => skill.name));\n\t\t\t\taddLoadedSection(\"Skills\", skillCompactList, skillList);\n\t\t\t}\n\n\t\t\tconst templates = this.session.promptTemplates;\n\t\t\tif (templates.length > 0) {\n\t\t\t\tconst groups = this.buildScopeGroups(\n\t\t\t\t\ttemplates.map((template) => ({ path: template.filePath, sourceInfo: template.sourceInfo })),\n\t\t\t\t);\n\t\t\t\tconst templateByPath = new Map(templates.map((t) => [t.filePath, t]));\n\t\t\t\tconst templateList = this.formatScopeGroups(groups, {\n\t\t\t\t\tformatPath: (item) => {\n\t\t\t\t\t\tconst template = templateByPath.get(item.path);\n\t\t\t\t\t\treturn template ? `/${template.name}` : this.formatDisplayPath(item.path);\n\t\t\t\t\t},\n\t\t\t\t\tformatPackagePath: (item) => {\n\t\t\t\t\t\tconst template = templateByPath.get(item.path);\n\t\t\t\t\t\treturn template ? `/${template.name}` : this.formatDisplayPath(item.path);\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tconst promptCompactList = formatCompactList(templates.map((template) => `/${template.name}`));\n\t\t\t\taddLoadedSection(\"Prompts\", promptCompactList, templateList);\n\t\t\t}\n\n\t\t\tif (extensions.length > 0) {\n\t\t\t\tconst groups = this.buildScopeGroups(extensions);\n\t\t\t\tconst extList = this.formatScopeGroups(groups, {\n\t\t\t\t\tformatPath: (item) => this.formatExtensionDisplayPath(item.path),\n\t\t\t\t\tformatPackagePath: (item) =>\n\t\t\t\t\t\tthis.formatExtensionDisplayPath(this.getShortPath(item.path, item.sourceInfo)),\n\t\t\t\t});\n\t\t\t\tconst extensionCompactList = formatCompactList(this.getCompactExtensionLabels(extensions));\n\t\t\t\taddLoadedSection(\"Extensions\", extensionCompactList, extList, \"mdHeading\");\n\t\t\t}\n\n\t\t\t// Show loaded themes (excluding built-in)\n\t\t\tconst loadedThemes = themesResult.themes;\n\t\t\tconst customThemes = loadedThemes.filter((t) => t.sourcePath);\n\t\t\tif (customThemes.length > 0) {\n\t\t\t\tconst groups = this.buildScopeGroups(\n\t\t\t\t\tcustomThemes.map((loadedTheme) => ({\n\t\t\t\t\t\tpath: loadedTheme.sourcePath!,\n\t\t\t\t\t\tsourceInfo: loadedTheme.sourceInfo,\n\t\t\t\t\t})),\n\t\t\t\t);\n\t\t\t\tconst themeList = this.formatScopeGroups(groups, {\n\t\t\t\t\tformatPath: (item) => this.formatDisplayPath(item.path),\n\t\t\t\t\tformatPackagePath: (item) => this.getShortPath(item.path, item.sourceInfo),\n\t\t\t\t});\n\t\t\t\tconst themeCompactList = formatCompactList(\n\t\t\t\t\tcustomThemes.map(\n\t\t\t\t\t\t(loadedTheme) =>\n\t\t\t\t\t\t\tloadedTheme.name ?? this.getCompactPathLabel(loadedTheme.sourcePath!, loadedTheme.sourceInfo),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\taddLoadedSection(\"Themes\", themeCompactList, themeList);\n\t\t\t}\n\t\t}\n\n\t\tif (showDiagnostics) {\n\t\t\tconst skillDiagnostics = skillsResult.diagnostics;\n\t\t\tif (skillDiagnostics.length > 0) {\n\t\t\t\tconst warningLines = this.formatDiagnostics(skillDiagnostics, sourceInfos);\n\t\t\t\tthis.chatContainer.addChild(new Text(`${theme.fg(\"warning\", \"[Skill conflicts]\")}\\n${warningLines}`, 0, 0));\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t}\n\n\t\t\tconst promptDiagnostics = promptsResult.diagnostics;\n\t\t\tif (promptDiagnostics.length > 0) {\n\t\t\t\tconst warningLines = this.formatDiagnostics(promptDiagnostics, sourceInfos);\n\t\t\t\tthis.chatContainer.addChild(\n\t\t\t\t\tnew Text(`${theme.fg(\"warning\", \"[Prompt conflicts]\")}\\n${warningLines}`, 0, 0),\n\t\t\t\t);\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t}\n\n\t\t\tconst extensionDiagnostics: ResourceDiagnostic[] = [];\n\t\t\tconst extensionErrors = this.session.resourceLoader.getExtensions().errors;\n\t\t\tif (extensionErrors.length > 0) {\n\t\t\t\tfor (const error of extensionErrors) {\n\t\t\t\t\textensionDiagnostics.push({ type: \"error\", message: error.error, path: error.path });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst commandDiagnostics = this.session.extensionRunner.getCommandDiagnostics();\n\t\t\textensionDiagnostics.push(...commandDiagnostics);\n\t\t\textensionDiagnostics.push(...this.getBuiltInCommandConflictDiagnostics(this.session.extensionRunner));\n\n\t\t\tconst shortcutDiagnostics = this.session.extensionRunner.getShortcutDiagnostics();\n\t\t\textensionDiagnostics.push(...shortcutDiagnostics);\n\n\t\t\tif (extensionDiagnostics.length > 0) {\n\t\t\t\tconst warningLines = this.formatDiagnostics(extensionDiagnostics, sourceInfos);\n\t\t\t\tthis.chatContainer.addChild(\n\t\t\t\t\tnew Text(`${theme.fg(\"warning\", \"[Extension issues]\")}\\n${warningLines}`, 0, 0),\n\t\t\t\t);\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t}\n\n\t\t\tconst themeDiagnostics = themesResult.diagnostics;\n\t\t\tif (themeDiagnostics.length > 0) {\n\t\t\t\tconst warningLines = this.formatDiagnostics(themeDiagnostics, sourceInfos);\n\t\t\t\tthis.chatContainer.addChild(new Text(`${theme.fg(\"warning\", \"[Theme conflicts]\")}\\n${warningLines}`, 0, 0));\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Initialize the extension system with TUI-based UI context.\n\t */\n\tprivate async bindCurrentSessionExtensions(): Promise<void> {\n\t\tconst uiContext = this.createExtensionUIContext();\n\t\tawait this.session.bindExtensions({\n\t\t\tuiContext,\n\t\t\tcommandContextActions: {\n\t\t\t\twaitForIdle: () => this.session.agent.waitForIdle(),\n\t\t\t\tnewSession: async (options) => {\n\t\t\t\t\tif (this.loadingAnimation) {\n\t\t\t\t\t\tthis.loadingAnimation.stop();\n\t\t\t\t\t\tthis.loadingAnimation = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tthis.statusContainer.clear();\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await this.runtimeHost.newSession(options);\n\t\t\t\t\t\tif (!result.cancelled) {\n\t\t\t\t\t\t\tthis.renderCurrentSessionState();\n\t\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\t\treturn this.handleFatalRuntimeError(\"Failed to create session\", error);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tfork: async (entryId, options) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await this.runtimeHost.fork(entryId, options);\n\t\t\t\t\t\tif (!result.cancelled) {\n\t\t\t\t\t\t\tthis.renderCurrentSessionState();\n\t\t\t\t\t\t\tthis.editor.setText(result.selectedText ?? \"\");\n\t\t\t\t\t\t\tthis.showStatus(\"Forked to new session\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn { cancelled: result.cancelled };\n\t\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\t\treturn this.handleFatalRuntimeError(\"Failed to fork session\", error);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tnavigateTree: async (targetId, options) => {\n\t\t\t\t\tconst result = await this.session.navigateTree(targetId, {\n\t\t\t\t\t\tsummarize: options?.summarize,\n\t\t\t\t\t\tcustomInstructions: options?.customInstructions,\n\t\t\t\t\t\treplaceInstructions: options?.replaceInstructions,\n\t\t\t\t\t\tlabel: options?.label,\n\t\t\t\t\t});\n\t\t\t\t\tif (result.cancelled) {\n\t\t\t\t\t\treturn { cancelled: true };\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.chatContainer.clear();\n\t\t\t\t\tthis.renderInitialMessages();\n\t\t\t\t\tif (result.editorText && !this.editor.getText().trim()) {\n\t\t\t\t\t\tthis.editor.setText(result.editorText);\n\t\t\t\t\t}\n\t\t\t\t\tthis.showStatus(\"Navigated to selected point\");\n\t\t\t\t\tvoid this.flushCompactionQueue({ willRetry: false });\n\t\t\t\t\treturn { cancelled: false };\n\t\t\t\t},\n\t\t\t\tswitchSession: async (sessionPath, options) => {\n\t\t\t\t\treturn this.handleResumeSession(sessionPath, options);\n\t\t\t\t},\n\t\t\t\treload: async () => {\n\t\t\t\t\tawait this.handleReloadCommand();\n\t\t\t\t},\n\t\t\t},\n\t\t\tshutdownHandler: () => {\n\t\t\t\tthis.shutdownRequested = true;\n\t\t\t\tif (!this.session.isStreaming) {\n\t\t\t\t\tvoid this.shutdown();\n\t\t\t\t}\n\t\t\t},\n\t\t\tonError: (error) => {\n\t\t\t\tthis.showExtensionError(error.extensionPath, error.error, error.stack);\n\t\t\t},\n\t\t});\n\n\t\tsetRegisteredThemes(this.session.resourceLoader.getThemes().themes);\n\t\tthis.setupAutocompleteProvider();\n\n\t\tconst extensionRunner = this.session.extensionRunner;\n\t\tthis.setupExtensionShortcuts(extensionRunner);\n\t\tthis.showLoadedResources({ force: false, showDiagnosticsWhenQuiet: true });\n\t\tthis.showStartupNoticesIfNeeded();\n\t}\n\n\tprivate applyRuntimeSettings(): void {\n\t\tthis.footer.setSession(this.session);\n\t\tthis.footer.setAutoCompactEnabled(this.session.autoCompactionEnabled);\n\t\tthis.footerDataProvider.setCwd(this.sessionManager.getCwd());\n\t\tthis.hideThinkingBlock = this.settingsManager.getHideThinkingBlock();\n\t\tthis.ui.setShowHardwareCursor(this.settingsManager.getShowHardwareCursor());\n\t\tthis.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());\n\t\tconst editorPaddingX = this.settingsManager.getEditorPaddingX();\n\t\tconst autocompleteMaxVisible = this.settingsManager.getAutocompleteMaxVisible();\n\t\tthis.defaultEditor.setPaddingX(editorPaddingX);\n\t\tthis.defaultEditor.setAutocompleteMaxVisible(autocompleteMaxVisible);\n\t\tif (this.editor !== this.defaultEditor) {\n\t\t\tthis.editor.setPaddingX?.(editorPaddingX);\n\t\t\tthis.editor.setAutocompleteMaxVisible?.(autocompleteMaxVisible);\n\t\t}\n\t}\n\n\tprivate async rebindCurrentSession(): Promise<void> {\n\t\tthis.unsubscribe?.();\n\t\tthis.unsubscribe = undefined;\n\t\tthis.applyRuntimeSettings();\n\t\tawait this.bindCurrentSessionExtensions();\n\t\tthis.subscribeToAgent();\n\t\tawait this.updateAvailableProviderCount();\n\t\tthis.updateEditorBorderColor();\n\t\tthis.updateTerminalTitle();\n\t}\n\n\tprivate async handleFatalRuntimeError(prefix: string, error: unknown): Promise<never> {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tthis.showError(`${prefix}: ${message}`);\n\t\tstopThemeWatcher();\n\t\tthis.stop();\n\t\tprocess.exit(1);\n\t}\n\n\tprivate renderCurrentSessionState(): void {\n\t\tthis.chatContainer.clear();\n\t\tthis.pendingMessagesContainer.clear();\n\t\tthis.compactionQueuedMessages = [];\n\t\tthis.streamingComponent = undefined;\n\t\tthis.streamingMessage = undefined;\n\t\tthis.pendingTools.clear();\n\t\tthis.renderInitialMessages();\n\t}\n\n\t/**\n\t * Get a registered tool definition by name (for custom rendering).\n\t */\n\tprivate getRegisteredToolDefinition(toolName: string) {\n\t\treturn this.session.getToolDefinition(toolName);\n\t}\n\n\t/**\n\t * Set up keyboard shortcuts registered by extensions.\n\t */\n\tprivate setupExtensionShortcuts(extensionRunner: ExtensionRunner): void {\n\t\tconst shortcuts = extensionRunner.getShortcuts(this.keybindings.getEffectiveConfig());\n\t\tif (shortcuts.size === 0) return;\n\n\t\t// Create a context for shortcut handlers\n\t\tconst createContext = (): ExtensionContext => ({\n\t\t\tui: this.createExtensionUIContext(),\n\t\t\thasUI: true,\n\t\t\tcwd: this.sessionManager.getCwd(),\n\t\t\tsessionManager: this.sessionManager,\n\t\t\tmodelRegistry: this.session.modelRegistry,\n\t\t\tmodel: this.session.model,\n\t\t\tisIdle: () => !this.session.isStreaming,\n\t\t\tsignal: this.session.agent.signal,\n\t\t\tabort: () => this.session.abort(),\n\t\t\thasPendingMessages: () => this.session.pendingMessageCount > 0,\n\t\t\tshutdown: () => {\n\t\t\t\tthis.shutdownRequested = true;\n\t\t\t},\n\t\t\tgetContextUsage: () => this.session.getContextUsage(),\n\t\t\tcompact: (options) => {\n\t\t\t\tvoid (async () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await this.session.compact(options?.customInstructions);\n\t\t\t\t\t\toptions?.onComplete?.(result);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst err = error instanceof Error ? error : new Error(String(error));\n\t\t\t\t\t\toptions?.onError?.(err);\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t},\n\t\t\tgetSystemPrompt: () => this.session.systemPrompt,\n\t\t});\n\n\t\t// Set up the extension shortcut handler on the default editor\n\t\tthis.defaultEditor.onExtensionShortcut = (data: string) => {\n\t\t\tfor (const [shortcutStr, shortcut] of shortcuts) {\n\t\t\t\t// Cast to KeyId - extension shortcuts use the same format\n\t\t\t\tif (matchesKey(data, shortcutStr as KeyId)) {\n\t\t\t\t\t// Run handler async, don't block input\n\t\t\t\t\tPromise.resolve(shortcut.handler(createContext())).catch((err) => {\n\t\t\t\t\t\tthis.showError(`Shortcut handler error: ${err instanceof Error ? err.message : String(err)}`);\n\t\t\t\t\t});\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t}\n\n\t/**\n\t * Set extension status text in the footer.\n\t */\n\tprivate setExtensionStatus(key: string, text: string | undefined): void {\n\t\tthis.footerDataProvider.setExtensionStatus(key, text);\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate getWorkingLoaderMessage(): string {\n\t\treturn this.workingMessage ?? this.defaultWorkingMessage;\n\t}\n\n\tprivate createWorkingLoader(): Loader {\n\t\treturn new Loader(\n\t\t\tthis.ui,\n\t\t\t(spinner) => theme.fg(\"accent\", spinner),\n\t\t\t(text) => theme.fg(\"muted\", text),\n\t\t\tthis.getWorkingLoaderMessage(),\n\t\t\tthis.workingIndicatorOptions,\n\t\t);\n\t}\n\n\tprivate stopWorkingLoader(): void {\n\t\tif (this.loadingAnimation) {\n\t\t\tthis.loadingAnimation.stop();\n\t\t\tthis.loadingAnimation = undefined;\n\t\t}\n\t\tthis.statusContainer.clear();\n\t}\n\n\tprivate setWorkingVisible(visible: boolean): void {\n\t\tthis.workingVisible = visible;\n\t\tif (!visible) {\n\t\t\tthis.stopWorkingLoader();\n\t\t\tthis.ui.requestRender();\n\t\t\treturn;\n\t\t}\n\t\tif (this.session.isStreaming && !this.loadingAnimation) {\n\t\t\tthis.statusContainer.clear();\n\t\t\tthis.loadingAnimation = this.createWorkingLoader();\n\t\t\tthis.statusContainer.addChild(this.loadingAnimation);\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate setWorkingIndicator(options?: LoaderIndicatorOptions): void {\n\t\tthis.workingIndicatorOptions = options;\n\t\tthis.loadingAnimation?.setIndicator(options);\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate setHiddenThinkingLabel(label?: string): void {\n\t\tthis.hiddenThinkingLabel = label ?? this.defaultHiddenThinkingLabel;\n\t\tfor (const child of this.chatContainer.children) {\n\t\t\tif (child instanceof AssistantMessageComponent) {\n\t\t\t\tchild.setHiddenThinkingLabel(this.hiddenThinkingLabel);\n\t\t\t}\n\t\t}\n\t\tif (this.streamingComponent) {\n\t\t\tthis.streamingComponent.setHiddenThinkingLabel(this.hiddenThinkingLabel);\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Set an extension widget (string array or custom component).\n\t */\n\tprivate setExtensionWidget(\n\t\tkey: string,\n\t\tcontent: string[] | ((tui: TUI, thm: Theme) => Component & { dispose?(): void }) | undefined,\n\t\toptions?: ExtensionWidgetOptions,\n\t): void {\n\t\tconst placement = options?.placement ?? \"aboveEditor\";\n\t\tconst removeExisting = (map: Map<string, Component & { dispose?(): void }>) => {\n\t\t\tconst existing = map.get(key);\n\t\t\tif (existing?.dispose) existing.dispose();\n\t\t\tmap.delete(key);\n\t\t};\n\n\t\tremoveExisting(this.extensionWidgetsAbove);\n\t\tremoveExisting(this.extensionWidgetsBelow);\n\n\t\tif (content === undefined) {\n\t\t\tthis.renderWidgets();\n\t\t\treturn;\n\t\t}\n\n\t\tlet component: Component & { dispose?(): void };\n\n\t\tif (Array.isArray(content)) {\n\t\t\t// Wrap string array in a Container with Text components\n\t\t\tconst container = new Container();\n\t\t\tfor (const line of content.slice(0, InteractiveMode.MAX_WIDGET_LINES)) {\n\t\t\t\tcontainer.addChild(new Text(line, 1, 0));\n\t\t\t}\n\t\t\tif (content.length > InteractiveMode.MAX_WIDGET_LINES) {\n\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"... (widget truncated)\"), 1, 0));\n\t\t\t}\n\t\t\tcomponent = container;\n\t\t} else {\n\t\t\t// Factory function - create component\n\t\t\tcomponent = content(this.ui, theme);\n\t\t}\n\n\t\tconst targetMap = placement === \"belowEditor\" ? this.extensionWidgetsBelow : this.extensionWidgetsAbove;\n\t\ttargetMap.set(key, component);\n\t\tthis.renderWidgets();\n\t}\n\n\tprivate clearExtensionWidgets(): void {\n\t\tfor (const widget of this.extensionWidgetsAbove.values()) {\n\t\t\twidget.dispose?.();\n\t\t}\n\t\tfor (const widget of this.extensionWidgetsBelow.values()) {\n\t\t\twidget.dispose?.();\n\t\t}\n\t\tthis.extensionWidgetsAbove.clear();\n\t\tthis.extensionWidgetsBelow.clear();\n\t\tthis.renderWidgets();\n\t}\n\n\tprivate resetExtensionUI(): void {\n\t\tif (this.extensionSelector) {\n\t\t\tthis.hideExtensionSelector();\n\t\t}\n\t\tif (this.extensionInput) {\n\t\t\tthis.hideExtensionInput();\n\t\t}\n\t\tif (this.extensionEditor) {\n\t\t\tthis.hideExtensionEditor();\n\t\t}\n\t\tthis.ui.hideOverlay();\n\t\tthis.clearExtensionTerminalInputListeners();\n\t\tthis.setExtensionFooter(undefined);\n\t\tthis.setExtensionHeader(undefined);\n\t\tthis.clearExtensionWidgets();\n\t\tthis.footerDataProvider.clearExtensionStatuses();\n\t\tthis.footer.invalidate();\n\t\tthis.autocompleteProviderWrappers = [];\n\t\tthis.setCustomEditorComponent(undefined);\n\t\tthis.setupAutocompleteProvider();\n\t\tthis.defaultEditor.onExtensionShortcut = undefined;\n\t\tthis.updateTerminalTitle();\n\t\tthis.workingMessage = undefined;\n\t\tthis.workingVisible = true;\n\t\tthis.setWorkingIndicator();\n\t\tif (this.loadingAnimation) {\n\t\t\tthis.loadingAnimation.setMessage(`${this.defaultWorkingMessage} (${keyText(\"app.interrupt\")} to interrupt)`);\n\t\t}\n\t\tthis.setHiddenThinkingLabel();\n\t}\n\n\t// Maximum total widget lines to prevent viewport overflow\n\tprivate static readonly MAX_WIDGET_LINES = 10;\n\n\t/**\n\t * Render all extension widgets to the widget container.\n\t */\n\tprivate renderWidgets(): void {\n\t\tif (!this.widgetContainerAbove || !this.widgetContainerBelow) return;\n\t\tthis.renderWidgetContainer(this.widgetContainerAbove, this.extensionWidgetsAbove, true, true);\n\t\tthis.renderWidgetContainer(this.widgetContainerBelow, this.extensionWidgetsBelow, false, false);\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate renderWidgetContainer(\n\t\tcontainer: Container,\n\t\twidgets: Map<string, Component & { dispose?(): void }>,\n\t\tspacerWhenEmpty: boolean,\n\t\tleadingSpacer: boolean,\n\t): void {\n\t\tcontainer.clear();\n\n\t\tif (widgets.size === 0) {\n\t\t\tif (spacerWhenEmpty) {\n\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (leadingSpacer) {\n\t\t\tcontainer.addChild(new Spacer(1));\n\t\t}\n\t\tfor (const component of widgets.values()) {\n\t\t\tcontainer.addChild(component);\n\t\t}\n\t}\n\n\t/**\n\t * Set a custom footer component, or restore the built-in footer.\n\t */\n\tprivate setExtensionFooter(\n\t\tfactory:\n\t\t\t| ((tui: TUI, thm: Theme, footerData: ReadonlyFooterDataProvider) => Component & { dispose?(): void })\n\t\t\t| undefined,\n\t): void {\n\t\t// Dispose existing custom footer\n\t\tif (this.customFooter?.dispose) {\n\t\t\tthis.customFooter.dispose();\n\t\t}\n\n\t\t// Remove current footer from UI\n\t\tif (this.customFooter) {\n\t\t\tthis.ui.removeChild(this.customFooter);\n\t\t} else {\n\t\t\tthis.ui.removeChild(this.footer);\n\t\t}\n\n\t\tif (factory) {\n\t\t\t// Create and add custom footer, passing the data provider\n\t\t\tthis.customFooter = factory(this.ui, theme, this.footerDataProvider);\n\t\t\tthis.ui.addChild(this.customFooter);\n\t\t} else {\n\t\t\t// Restore built-in footer\n\t\t\tthis.customFooter = undefined;\n\t\t\tthis.ui.addChild(this.footer);\n\t\t}\n\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Set a custom header component, or restore the built-in header.\n\t */\n\tprivate setExtensionHeader(factory: ((tui: TUI, thm: Theme) => Component & { dispose?(): void }) | undefined): void {\n\t\t// Header may not be initialized yet if called during early initialization\n\t\tif (!this.builtInHeader) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Dispose existing custom header\n\t\tif (this.customHeader?.dispose) {\n\t\t\tthis.customHeader.dispose();\n\t\t}\n\n\t\t// Find the index of the current header in the header container\n\t\tconst currentHeader = this.customHeader || this.builtInHeader;\n\t\tconst index = this.headerContainer.children.indexOf(currentHeader);\n\n\t\tif (factory) {\n\t\t\t// Create and add custom header\n\t\t\tthis.customHeader = factory(this.ui, theme);\n\t\t\tif (isExpandable(this.customHeader)) {\n\t\t\t\tthis.customHeader.setExpanded(this.toolOutputExpanded);\n\t\t\t}\n\t\t\tif (index !== -1) {\n\t\t\t\tthis.headerContainer.children[index] = this.customHeader;\n\t\t\t} else {\n\t\t\t\t// If not found (e.g. builtInHeader was never added), add at the top\n\t\t\t\tthis.headerContainer.children.unshift(this.customHeader);\n\t\t\t}\n\t\t} else {\n\t\t\t// Restore built-in header\n\t\t\tthis.customHeader = undefined;\n\t\t\tif (isExpandable(this.builtInHeader)) {\n\t\t\t\tthis.builtInHeader.setExpanded(this.toolOutputExpanded);\n\t\t\t}\n\t\t\tif (index !== -1) {\n\t\t\t\tthis.headerContainer.children[index] = this.builtInHeader;\n\t\t\t}\n\t\t}\n\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate addExtensionTerminalInputListener(\n\t\thandler: (data: string) => { consume?: boolean; data?: string } | undefined,\n\t): () => void {\n\t\tconst unsubscribe = this.ui.addInputListener(handler);\n\t\tthis.extensionTerminalInputUnsubscribers.add(unsubscribe);\n\t\treturn () => {\n\t\t\tunsubscribe();\n\t\t\tthis.extensionTerminalInputUnsubscribers.delete(unsubscribe);\n\t\t};\n\t}\n\n\tprivate clearExtensionTerminalInputListeners(): void {\n\t\tfor (const unsubscribe of this.extensionTerminalInputUnsubscribers) {\n\t\t\tunsubscribe();\n\t\t}\n\t\tthis.extensionTerminalInputUnsubscribers.clear();\n\t}\n\n\t/**\n\t * Create the ExtensionUIContext for extensions.\n\t */\n\tprivate createExtensionUIContext(): ExtensionUIContext {\n\t\treturn {\n\t\t\tselect: (title, options, opts) => this.showExtensionSelector(title, options, opts),\n\t\t\tconfirm: (title, message, opts) => this.showExtensionConfirm(title, message, opts),\n\t\t\tinput: (title, placeholder, opts) => this.showExtensionInput(title, placeholder, opts),\n\t\t\tnotify: (message, type) => this.showExtensionNotify(message, type),\n\t\t\tonTerminalInput: (handler) => this.addExtensionTerminalInputListener(handler),\n\t\t\tsetStatus: (key, text) => this.setExtensionStatus(key, text),\n\t\t\tsetWorkingMessage: (message) => {\n\t\t\t\tthis.workingMessage = message;\n\t\t\t\tif (this.loadingAnimation) {\n\t\t\t\t\tthis.loadingAnimation.setMessage(message ?? this.defaultWorkingMessage);\n\t\t\t\t}\n\t\t\t},\n\t\t\tsetWorkingVisible: (visible) => this.setWorkingVisible(visible),\n\t\t\tsetWorkingIndicator: (options) => this.setWorkingIndicator(options),\n\t\t\tsetHiddenThinkingLabel: (label) => this.setHiddenThinkingLabel(label),\n\t\t\tsetWidget: (key, content, options) => this.setExtensionWidget(key, content, options),\n\t\t\tsetFooter: (factory) => this.setExtensionFooter(factory),\n\t\t\tsetHeader: (factory) => this.setExtensionHeader(factory),\n\t\t\tsetTitle: (title) => this.ui.terminal.setTitle(title),\n\t\t\tcustom: (factory, options) => this.showExtensionCustom(factory, options),\n\t\t\tpasteToEditor: (text) => this.editor.handleInput(`\\x1b[200~${text}\\x1b[201~`),\n\t\t\tsetEditorText: (text) => this.editor.setText(text),\n\t\t\tgetEditorText: () => this.editor.getExpandedText?.() ?? this.editor.getText(),\n\t\t\teditor: (title, prefill) => this.showExtensionEditor(title, prefill),\n\t\t\taddAutocompleteProvider: (factory) => {\n\t\t\t\tthis.autocompleteProviderWrappers.push(factory);\n\t\t\t\tthis.setupAutocompleteProvider();\n\t\t\t},\n\t\t\tsetEditorComponent: (factory) => this.setCustomEditorComponent(factory),\n\t\t\tgetEditorComponent: () => this.editorComponentFactory,\n\t\t\tget theme() {\n\t\t\t\treturn theme;\n\t\t\t},\n\t\t\tgetAllThemes: () => getAvailableThemesWithPaths(),\n\t\t\tgetTheme: (name) => getThemeByName(name),\n\t\t\tsetTheme: (themeOrName) => {\n\t\t\t\tif (themeOrName instanceof Theme) {\n\t\t\t\t\tsetThemeInstance(themeOrName);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\treturn { success: true };\n\t\t\t\t}\n\t\t\t\tconst result = setTheme(themeOrName, true);\n\t\t\t\tif (result.success) {\n\t\t\t\t\tif (this.settingsManager.getTheme() !== themeOrName) {\n\t\t\t\t\t\tthis.settingsManager.setTheme(themeOrName);\n\t\t\t\t\t}\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tgetToolsExpanded: () => this.toolOutputExpanded,\n\t\t\tsetToolsExpanded: (expanded) => this.setToolsExpanded(expanded),\n\t\t};\n\t}\n\n\t/**\n\t * Show a selector for extensions.\n\t */\n\tprivate showExtensionSelector(\n\t\ttitle: string,\n\t\toptions: string[],\n\t\topts?: ExtensionUIDialogOptions,\n\t): Promise<string | undefined> {\n\t\treturn new Promise((resolve) => {\n\t\t\tif (opts?.signal?.aborted) {\n\t\t\t\tresolve(undefined);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst onAbort = () => {\n\t\t\t\tthis.hideExtensionSelector();\n\t\t\t\tresolve(undefined);\n\t\t\t};\n\t\t\topts?.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\n\t\t\tthis.extensionSelector = new ExtensionSelectorComponent(\n\t\t\t\ttitle,\n\t\t\t\toptions,\n\t\t\t\t(option) => {\n\t\t\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\tthis.hideExtensionSelector();\n\t\t\t\t\tresolve(option);\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\tthis.hideExtensionSelector();\n\t\t\t\t\tresolve(undefined);\n\t\t\t\t},\n\t\t\t\t{ tui: this.ui, timeout: opts?.timeout, onToggleToolsExpanded: () => this.toggleToolOutputExpansion() },\n\t\t\t);\n\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(this.extensionSelector);\n\t\t\tthis.ui.setFocus(this.extensionSelector);\n\t\t\tthis.ui.requestRender();\n\t\t});\n\t}\n\n\t/**\n\t * Hide the extension selector.\n\t */\n\tprivate hideExtensionSelector(): void {\n\t\tthis.extensionSelector?.dispose();\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(this.editor);\n\t\tthis.extensionSelector = undefined;\n\t\tthis.ui.setFocus(this.editor);\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Show a confirmation dialog for extensions.\n\t */\n\tprivate async showExtensionConfirm(\n\t\ttitle: string,\n\t\tmessage: string,\n\t\topts?: ExtensionUIDialogOptions,\n\t): Promise<boolean> {\n\t\tconst result = await this.showExtensionSelector(`${title}\\n${message}`, [\"Yes\", \"No\"], opts);\n\t\treturn result === \"Yes\";\n\t}\n\n\tprivate async promptForMissingSessionCwd(error: MissingSessionCwdError): Promise<string | undefined> {\n\t\tconst confirmed = await this.showExtensionConfirm(\n\t\t\t\"Session cwd not found\",\n\t\t\tformatMissingSessionCwdPrompt(error.issue),\n\t\t);\n\t\treturn confirmed ? error.issue.fallbackCwd : undefined;\n\t}\n\n\t/**\n\t * Show a text input for extensions.\n\t */\n\tprivate showExtensionInput(\n\t\ttitle: string,\n\t\tplaceholder?: string,\n\t\topts?: ExtensionUIDialogOptions,\n\t): Promise<string | undefined> {\n\t\treturn new Promise((resolve) => {\n\t\t\tif (opts?.signal?.aborted) {\n\t\t\t\tresolve(undefined);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst onAbort = () => {\n\t\t\t\tthis.hideExtensionInput();\n\t\t\t\tresolve(undefined);\n\t\t\t};\n\t\t\topts?.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\n\t\t\tthis.extensionInput = new ExtensionInputComponent(\n\t\t\t\ttitle,\n\t\t\t\tplaceholder,\n\t\t\t\t(value) => {\n\t\t\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\tthis.hideExtensionInput();\n\t\t\t\t\tresolve(value);\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\tthis.hideExtensionInput();\n\t\t\t\t\tresolve(undefined);\n\t\t\t\t},\n\t\t\t\t{ tui: this.ui, timeout: opts?.timeout },\n\t\t\t);\n\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(this.extensionInput);\n\t\t\tthis.ui.setFocus(this.extensionInput);\n\t\t\tthis.ui.requestRender();\n\t\t});\n\t}\n\n\t/**\n\t * Hide the extension input.\n\t */\n\tprivate hideExtensionInput(): void {\n\t\tthis.extensionInput?.dispose();\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(this.editor);\n\t\tthis.extensionInput = undefined;\n\t\tthis.ui.setFocus(this.editor);\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Show a multi-line editor for extensions (with Ctrl+G support).\n\t */\n\tprivate showExtensionEditor(title: string, prefill?: string): Promise<string | undefined> {\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.extensionEditor = new ExtensionEditorComponent(\n\t\t\t\tthis.ui,\n\t\t\t\tthis.keybindings,\n\t\t\t\ttitle,\n\t\t\t\tprefill,\n\t\t\t\t(value) => {\n\t\t\t\t\tthis.hideExtensionEditor();\n\t\t\t\t\tresolve(value);\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tthis.hideExtensionEditor();\n\t\t\t\t\tresolve(undefined);\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(this.extensionEditor);\n\t\t\tthis.ui.setFocus(this.extensionEditor);\n\t\t\tthis.ui.requestRender();\n\t\t});\n\t}\n\n\t/**\n\t * Hide the extension editor.\n\t */\n\tprivate hideExtensionEditor(): void {\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(this.editor);\n\t\tthis.extensionEditor = undefined;\n\t\tthis.ui.setFocus(this.editor);\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Set a custom editor component from an extension.\n\t * Pass undefined to restore the default editor.\n\t */\n\tprivate setCustomEditorComponent(factory: EditorFactory | undefined): void {\n\t\tthis.editorComponentFactory = factory;\n\n\t\t// Save text from current editor before switching\n\t\tconst currentText = this.editor.getText();\n\n\t\tthis.editorContainer.clear();\n\n\t\tif (factory) {\n\t\t\t// Create the custom editor with tui, theme, and keybindings\n\t\t\tconst newEditor = factory(this.ui, getEditorTheme(), this.keybindings);\n\n\t\t\t// Wire up callbacks from the default editor\n\t\t\tnewEditor.onSubmit = this.defaultEditor.onSubmit;\n\t\t\tnewEditor.onChange = this.defaultEditor.onChange;\n\n\t\t\t// Copy text from previous editor\n\t\t\tnewEditor.setText(currentText);\n\n\t\t\t// Copy appearance settings if supported\n\t\t\tif (newEditor.borderColor !== undefined) {\n\t\t\t\tnewEditor.borderColor = this.defaultEditor.borderColor;\n\t\t\t}\n\t\t\tif (newEditor.setPaddingX !== undefined) {\n\t\t\t\tnewEditor.setPaddingX(this.defaultEditor.getPaddingX());\n\t\t\t}\n\n\t\t\t// Set autocomplete if supported\n\t\t\tif (newEditor.setAutocompleteProvider && this.autocompleteProvider) {\n\t\t\t\tnewEditor.setAutocompleteProvider(this.autocompleteProvider);\n\t\t\t}\n\n\t\t\t// If extending CustomEditor, copy app-level handlers\n\t\t\t// Use duck typing since instanceof fails across jiti module boundaries\n\t\t\tconst customEditor = newEditor as unknown as Record<string, unknown>;\n\t\t\tif (\"actionHandlers\" in customEditor && customEditor.actionHandlers instanceof Map) {\n\t\t\t\tif (!customEditor.onEscape) {\n\t\t\t\t\tcustomEditor.onEscape = () => this.defaultEditor.onEscape?.();\n\t\t\t\t}\n\t\t\t\tif (!customEditor.onCtrlD) {\n\t\t\t\t\tcustomEditor.onCtrlD = () => this.defaultEditor.onCtrlD?.();\n\t\t\t\t}\n\t\t\t\tif (!customEditor.onPasteImage) {\n\t\t\t\t\tcustomEditor.onPasteImage = () => this.defaultEditor.onPasteImage?.();\n\t\t\t\t}\n\t\t\t\tif (!customEditor.onExtensionShortcut) {\n\t\t\t\t\tcustomEditor.onExtensionShortcut = (data: string) => this.defaultEditor.onExtensionShortcut?.(data);\n\t\t\t\t}\n\t\t\t\t// Copy action handlers (clear, suspend, model switching, etc.)\n\t\t\t\tfor (const [action, handler] of this.defaultEditor.actionHandlers) {\n\t\t\t\t\t(customEditor.actionHandlers as Map<string, () => void>).set(action, handler);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.editor = newEditor;\n\t\t} else {\n\t\t\t// Restore default editor with text from custom editor\n\t\t\tthis.defaultEditor.setText(currentText);\n\t\t\tthis.editor = this.defaultEditor;\n\t\t}\n\n\t\tthis.editorContainer.addChild(this.editor as Component);\n\t\tthis.ui.setFocus(this.editor as Component);\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Show a notification for extensions.\n\t */\n\tprivate showExtensionNotify(message: string, type?: \"info\" | \"warning\" | \"error\"): void {\n\t\tif (type === \"error\") {\n\t\t\tthis.showError(message);\n\t\t} else if (type === \"warning\") {\n\t\t\tthis.showWarning(message);\n\t\t} else {\n\t\t\tthis.showStatus(message);\n\t\t}\n\t}\n\n\t/** Show a custom component with keyboard focus. Overlay mode renders on top of existing content. */\n\tprivate async showExtensionCustom<T>(\n\t\tfactory: (\n\t\t\ttui: TUI,\n\t\t\ttheme: Theme,\n\t\t\tkeybindings: KeybindingsManager,\n\t\t\tdone: (result: T) => void,\n\t\t) => (Component & { dispose?(): void }) | Promise<Component & { dispose?(): void }>,\n\t\toptions?: {\n\t\t\toverlay?: boolean;\n\t\t\toverlayOptions?: OverlayOptions | (() => OverlayOptions);\n\t\t\tonHandle?: (handle: OverlayHandle) => void;\n\t\t},\n\t): Promise<T> {\n\t\tconst savedText = this.editor.getText();\n\t\tconst isOverlay = options?.overlay ?? false;\n\n\t\tconst restoreEditor = () => {\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(this.editor);\n\t\t\tthis.editor.setText(savedText);\n\t\t\tthis.ui.setFocus(this.editor);\n\t\t\tthis.ui.requestRender();\n\t\t};\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet component: Component & { dispose?(): void };\n\t\t\tlet closed = false;\n\n\t\t\tconst close = (result: T) => {\n\t\t\t\tif (closed) return;\n\t\t\t\tclosed = true;\n\t\t\t\tif (isOverlay) this.ui.hideOverlay();\n\t\t\t\telse restoreEditor();\n\t\t\t\t// Note: both branches above already call requestRender\n\t\t\t\tresolve(result);\n\t\t\t\ttry {\n\t\t\t\t\tcomponent?.dispose?.();\n\t\t\t\t} catch {\n\t\t\t\t\t/* ignore dispose errors */\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tPromise.resolve(factory(this.ui, theme, this.keybindings, close))\n\t\t\t\t.then((c) => {\n\t\t\t\t\tif (closed) return;\n\t\t\t\t\tcomponent = c;\n\t\t\t\t\tif (isOverlay) {\n\t\t\t\t\t\t// Resolve overlay options - can be static or dynamic function\n\t\t\t\t\t\tconst resolveOptions = (): OverlayOptions | undefined => {\n\t\t\t\t\t\t\tif (options?.overlayOptions) {\n\t\t\t\t\t\t\t\tconst opts =\n\t\t\t\t\t\t\t\t\ttypeof options.overlayOptions === \"function\"\n\t\t\t\t\t\t\t\t\t\t? options.overlayOptions()\n\t\t\t\t\t\t\t\t\t\t: options.overlayOptions;\n\t\t\t\t\t\t\t\treturn opts;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Fallback: use component's width property if available\n\t\t\t\t\t\t\tconst w = (component as { width?: number }).width;\n\t\t\t\t\t\t\treturn w ? { width: w } : undefined;\n\t\t\t\t\t\t};\n\t\t\t\t\t\tconst handle = this.ui.showOverlay(component, resolveOptions());\n\t\t\t\t\t\t// Expose handle to caller for visibility control\n\t\t\t\t\t\toptions?.onHandle?.(handle);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.editorContainer.clear();\n\t\t\t\t\t\tthis.editorContainer.addChild(component);\n\t\t\t\t\t\tthis.ui.setFocus(component);\n\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch((err) => {\n\t\t\t\t\tif (closed) return;\n\t\t\t\t\tif (!isOverlay) restoreEditor();\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Show an extension error in the UI.\n\t */\n\tprivate showExtensionError(extensionPath: string, error: string, stack?: string): void {\n\t\tconst errorMsg = `Extension \"${extensionPath}\" error: ${error}`;\n\t\tconst errorText = new Text(theme.fg(\"error\", errorMsg), 1, 0);\n\t\tthis.chatContainer.addChild(errorText);\n\t\tif (stack) {\n\t\t\t// Show stack trace in dim color, indented\n\t\t\tconst stackLines = stack\n\t\t\t\t.split(\"\\n\")\n\t\t\t\t.slice(1) // Skip first line (duplicates error message)\n\t\t\t\t.map((line) => theme.fg(\"dim\", ` ${line.trim()}`))\n\t\t\t\t.join(\"\\n\");\n\t\t\tif (stackLines) {\n\t\t\t\tthis.chatContainer.addChild(new Text(stackLines, 1, 0));\n\t\t\t}\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\t// =========================================================================\n\t// Key Handlers\n\t// =========================================================================\n\n\tprivate setupKeyHandlers(): void {\n\t\t// Set up handlers on defaultEditor - they use this.editor for text access\n\t\t// so they work correctly regardless of which editor is active\n\t\tthis.defaultEditor.onEscape = () => {\n\t\t\tif (this.session.isStreaming) {\n\t\t\t\tthis.restoreQueuedMessagesToEditor({ abort: true });\n\t\t\t} else if (this.session.isBashRunning) {\n\t\t\t\tthis.session.abortBash();\n\t\t\t} else if (this.isBashMode) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tthis.isBashMode = false;\n\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t} else if (!this.editor.getText().trim()) {\n\t\t\t\t// Double-escape with empty editor triggers /tree, /fork, or nothing based on setting\n\t\t\t\tconst action = this.settingsManager.getDoubleEscapeAction();\n\t\t\t\tif (action !== \"none\") {\n\t\t\t\t\tconst now = Date.now();\n\t\t\t\t\tif (now - this.lastEscapeTime < 500) {\n\t\t\t\t\t\tif (action === \"tree\") {\n\t\t\t\t\t\t\tthis.showTreeSelector();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.showUserMessageSelector();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.lastEscapeTime = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.lastEscapeTime = now;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// Register app action handlers\n\t\tthis.defaultEditor.onAction(\"app.clear\", () => this.handleCtrlC());\n\t\tthis.defaultEditor.onCtrlD = () => this.handleCtrlD();\n\t\tthis.defaultEditor.onAction(\"app.suspend\", () => this.handleCtrlZ());\n\t\tthis.defaultEditor.onAction(\"app.thinking.cycle\", () => this.cycleThinkingLevel());\n\t\tthis.defaultEditor.onAction(\"app.model.cycleForward\", () => this.cycleModel(\"forward\"));\n\t\tthis.defaultEditor.onAction(\"app.model.cycleBackward\", () => this.cycleModel(\"backward\"));\n\n\t\t// Global debug handler on TUI (works regardless of focus)\n\t\tthis.ui.onDebug = () => this.handleDebugCommand();\n\t\tthis.defaultEditor.onAction(\"app.model.select\", () => this.showModelSelector());\n\t\tthis.defaultEditor.onAction(\"app.tools.expand\", () => this.toggleToolOutputExpansion());\n\t\tthis.defaultEditor.onAction(\"app.thinking.toggle\", () => this.toggleThinkingBlockVisibility());\n\t\tthis.defaultEditor.onAction(\"app.editor.external\", () => this.openExternalEditor());\n\t\tthis.defaultEditor.onAction(\"app.message.followUp\", () => this.handleFollowUp());\n\t\tthis.defaultEditor.onAction(\"app.message.dequeue\", () => this.handleDequeue());\n\t\tthis.defaultEditor.onAction(\"app.session.new\", () => this.handleClearCommand());\n\t\tthis.defaultEditor.onAction(\"app.session.tree\", () => this.showTreeSelector());\n\t\tthis.defaultEditor.onAction(\"app.session.fork\", () => this.showUserMessageSelector());\n\t\tthis.defaultEditor.onAction(\"app.session.resume\", () => this.showSessionSelector());\n\n\t\tthis.defaultEditor.onChange = (text: string) => {\n\t\t\tconst wasBashMode = this.isBashMode;\n\t\t\tthis.isBashMode = text.trimStart().startsWith(\"!\");\n\t\t\tif (wasBashMode !== this.isBashMode) {\n\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t}\n\t\t};\n\n\t\t// Handle clipboard image paste (triggered on Ctrl+V)\n\t\tthis.defaultEditor.onPasteImage = () => {\n\t\t\tthis.handleClipboardImagePaste();\n\t\t};\n\t}\n\n\tprivate async handleClipboardImagePaste(): Promise<void> {\n\t\ttry {\n\t\t\tconst image = await readClipboardImage();\n\t\t\tif (!image) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Write to temp file\n\t\t\tconst tmpDir = os.tmpdir();\n\t\t\tconst ext = extensionForImageMimeType(image.mimeType) ?? \"png\";\n\t\t\tconst fileName = `pi-clipboard-${crypto.randomUUID()}.${ext}`;\n\t\t\tconst filePath = path.join(tmpDir, fileName);\n\t\t\tfs.writeFileSync(filePath, Buffer.from(image.bytes));\n\n\t\t\t// Insert file path directly\n\t\t\tthis.editor.insertTextAtCursor?.(filePath);\n\t\t\tthis.ui.requestRender();\n\t\t} catch {\n\t\t\t// Silently ignore clipboard errors (may not have permission, etc.)\n\t\t}\n\t}\n\n\tprivate setupEditorSubmitHandler(): void {\n\t\tthis.defaultEditor.onSubmit = async (text: string) => {\n\t\t\ttext = text.trim();\n\t\t\tif (!text) return;\n\n\t\t\t// Handle commands\n\t\t\tif (text === \"/settings\") {\n\t\t\t\tthis.showSettingsSelector();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/scoped-models\") {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.showModelsSelector();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/model\" || text.startsWith(\"/model \")) {\n\t\t\t\tconst searchTerm = text.startsWith(\"/model \") ? text.slice(7).trim() : undefined;\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleModelCommand(searchTerm);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/export\" || text.startsWith(\"/export \")) {\n\t\t\t\tawait this.handleExportCommand(text);\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/import\" || text.startsWith(\"/import \")) {\n\t\t\t\tawait this.handleImportCommand(text);\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/share\") {\n\t\t\t\tawait this.handleShareCommand();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/copy\") {\n\t\t\t\tawait this.handleCopyCommand();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/name\" || text.startsWith(\"/name \")) {\n\t\t\t\tthis.handleNameCommand(text);\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/session\") {\n\t\t\t\tthis.handleSessionCommand();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/changelog\") {\n\t\t\t\tthis.handleChangelogCommand();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/hotkeys\") {\n\t\t\t\tthis.handleHotkeysCommand();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/fork\") {\n\t\t\t\tthis.showUserMessageSelector();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/clone\") {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleCloneCommand();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/tree\") {\n\t\t\t\tthis.showTreeSelector();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/login\") {\n\t\t\t\tthis.showOAuthSelector(\"login\");\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/logout\") {\n\t\t\t\tthis.showOAuthSelector(\"logout\");\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/new\") {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleClearCommand();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/compact\" || text.startsWith(\"/compact \")) {\n\t\t\t\tconst customInstructions = text.startsWith(\"/compact \") ? text.slice(9).trim() : undefined;\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleCompactCommand(customInstructions);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/reload\") {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleReloadCommand();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/debug\") {\n\t\t\t\tthis.handleDebugCommand();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/arminsayshi\") {\n\t\t\t\tthis.handleArminSaysHi();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/dementedelves\") {\n\t\t\t\tthis.handleDementedDelves();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/resume\") {\n\t\t\t\tthis.showSessionSelector();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/quit\") {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.shutdown();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Handle bash command (! for normal, !! for excluded from context)\n\t\t\tif (text.startsWith(\"!\")) {\n\t\t\t\tconst isExcluded = text.startsWith(\"!!\");\n\t\t\t\tconst command = isExcluded ? text.slice(2).trim() : text.slice(1).trim();\n\t\t\t\tif (command) {\n\t\t\t\t\tif (this.session.isBashRunning) {\n\t\t\t\t\t\tthis.showWarning(\"A bash command is already running. Press Esc to cancel it first.\");\n\t\t\t\t\t\tthis.editor.setText(text);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthis.editor.addToHistory?.(text);\n\t\t\t\t\tawait this.handleBashCommand(command, isExcluded);\n\t\t\t\t\tthis.isBashMode = false;\n\t\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Queue input during compaction (extension commands execute immediately)\n\t\t\tif (this.session.isCompacting) {\n\t\t\t\tif (this.isExtensionCommand(text)) {\n\t\t\t\t\tthis.editor.addToHistory?.(text);\n\t\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\t\tawait this.session.prompt(text);\n\t\t\t\t} else {\n\t\t\t\t\tthis.queueCompactionMessage(text, \"steer\");\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If streaming, use prompt() with steer behavior\n\t\t\t// This handles extension commands (execute immediately), prompt template expansion, and queueing\n\t\t\tif (this.session.isStreaming) {\n\t\t\t\tthis.editor.addToHistory?.(text);\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.session.prompt(text, { streamingBehavior: \"steer\" });\n\t\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Normal message submission\n\t\t\t// First, move any pending bash components to chat\n\t\t\tthis.flushPendingBashComponents();\n\n\t\t\tif (this.onInputCallback) {\n\t\t\t\tthis.onInputCallback(text);\n\t\t\t}\n\t\t\tthis.editor.addToHistory?.(text);\n\t\t};\n\t}\n\n\tprivate subscribeToAgent(): void {\n\t\tthis.unsubscribe = this.session.subscribe(async (event) => {\n\t\t\tawait this.handleEvent(event);\n\t\t});\n\t}\n\n\tprivate async handleEvent(event: AgentSessionEvent): Promise<void> {\n\t\tif (!this.isInitialized) {\n\t\t\tawait this.init();\n\t\t}\n\n\t\tthis.footer.invalidate();\n\n\t\tswitch (event.type) {\n\t\t\tcase \"agent_start\":\n\t\t\t\tthis.pendingTools.clear();\n\t\t\t\tif (this.settingsManager.getShowTerminalProgress()) {\n\t\t\t\t\tthis.ui.terminal.setProgress(true);\n\t\t\t\t}\n\t\t\t\t// Restore main escape handler if retry handler is still active\n\t\t\t\t// (retry success event fires later, but we need main handler now)\n\t\t\t\tif (this.retryEscapeHandler) {\n\t\t\t\t\tthis.defaultEditor.onEscape = this.retryEscapeHandler;\n\t\t\t\t\tthis.retryEscapeHandler = undefined;\n\t\t\t\t}\n\t\t\t\tif (this.retryCountdown) {\n\t\t\t\t\tthis.retryCountdown.dispose();\n\t\t\t\t\tthis.retryCountdown = undefined;\n\t\t\t\t}\n\t\t\t\tif (this.retryLoader) {\n\t\t\t\t\tthis.retryLoader.stop();\n\t\t\t\t\tthis.retryLoader = undefined;\n\t\t\t\t}\n\t\t\t\tthis.stopWorkingLoader();\n\t\t\t\tif (this.workingVisible) {\n\t\t\t\t\tthis.loadingAnimation = this.createWorkingLoader();\n\t\t\t\t\tthis.statusContainer.addChild(this.loadingAnimation);\n\t\t\t\t}\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\n\t\t\tcase \"queue_update\":\n\t\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\n\t\t\tcase \"session_info_changed\":\n\t\t\t\tthis.updateTerminalTitle();\n\t\t\t\tthis.footer.invalidate();\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\n\t\t\tcase \"thinking_level_changed\":\n\t\t\t\tthis.footer.invalidate();\n\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\tbreak;\n\n\t\t\tcase \"message_start\":\n\t\t\t\tif (event.message.role === \"custom\") {\n\t\t\t\t\tthis.addMessageToChat(event.message);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t} else if (event.message.role === \"user\") {\n\t\t\t\t\tthis.addMessageToChat(event.message);\n\t\t\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t} else if (event.message.role === \"assistant\") {\n\t\t\t\t\tthis.streamingComponent = new AssistantMessageComponent(\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\tthis.hideThinkingBlock,\n\t\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t\t\tthis.hiddenThinkingLabel,\n\t\t\t\t\t);\n\t\t\t\t\tthis.streamingMessage = event.message;\n\t\t\t\t\tthis.chatContainer.addChild(this.streamingComponent);\n\t\t\t\t\tthis.streamingComponent.updateContent(this.streamingMessage);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"message_update\":\n\t\t\t\tif (this.streamingComponent && event.message.role === \"assistant\") {\n\t\t\t\t\tthis.streamingMessage = event.message;\n\t\t\t\t\tthis.streamingComponent.updateContent(this.streamingMessage);\n\n\t\t\t\t\tfor (const content of this.streamingMessage.content) {\n\t\t\t\t\t\tif (content.type === \"toolCall\") {\n\t\t\t\t\t\t\tif (!this.pendingTools.has(content.id)) {\n\t\t\t\t\t\t\t\tconst component = new ToolExecutionComponent(\n\t\t\t\t\t\t\t\t\tcontent.name,\n\t\t\t\t\t\t\t\t\tcontent.id,\n\t\t\t\t\t\t\t\t\tcontent.arguments,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tshowImages: this.settingsManager.getShowImages(),\n\t\t\t\t\t\t\t\t\t\timageWidthCells: this.settingsManager.getImageWidthCells(),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tthis.getRegisteredToolDefinition(content.name),\n\t\t\t\t\t\t\t\t\tthis.ui,\n\t\t\t\t\t\t\t\t\tthis.sessionManager.getCwd(),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\t\t\t\t\tthis.pendingTools.set(content.id, component);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconst component = this.pendingTools.get(content.id);\n\t\t\t\t\t\t\t\tif (component) {\n\t\t\t\t\t\t\t\t\tcomponent.updateArgs(content.arguments);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"message_end\":\n\t\t\t\tif (event.message.role === \"user\") break;\n\t\t\t\tif (this.streamingComponent && event.message.role === \"assistant\") {\n\t\t\t\t\tthis.streamingMessage = event.message;\n\t\t\t\t\tlet errorMessage: string | undefined;\n\t\t\t\t\tif (this.streamingMessage.stopReason === \"aborted\") {\n\t\t\t\t\t\tconst retryAttempt = this.session.retryAttempt;\n\t\t\t\t\t\terrorMessage =\n\t\t\t\t\t\t\tretryAttempt > 0\n\t\t\t\t\t\t\t\t? `Aborted after ${retryAttempt} retry attempt${retryAttempt > 1 ? \"s\" : \"\"}`\n\t\t\t\t\t\t\t\t: \"Operation aborted\";\n\t\t\t\t\t\tthis.streamingMessage.errorMessage = errorMessage;\n\t\t\t\t\t}\n\t\t\t\t\tthis.streamingComponent.updateContent(this.streamingMessage);\n\n\t\t\t\t\tif (this.streamingMessage.stopReason === \"aborted\" || this.streamingMessage.stopReason === \"error\") {\n\t\t\t\t\t\tif (!errorMessage) {\n\t\t\t\t\t\t\terrorMessage = this.streamingMessage.errorMessage || \"Error\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (const [, component] of this.pendingTools.entries()) {\n\t\t\t\t\t\t\tcomponent.updateResult({\n\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: errorMessage }],\n\t\t\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.pendingTools.clear();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Args are now complete - trigger diff computation for edit tools\n\t\t\t\t\t\tfor (const [, component] of this.pendingTools.entries()) {\n\t\t\t\t\t\t\tcomponent.setArgsComplete();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.streamingComponent = undefined;\n\t\t\t\t\tthis.streamingMessage = undefined;\n\t\t\t\t\tthis.footer.invalidate();\n\t\t\t\t}\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\n\t\t\tcase \"tool_execution_start\": {\n\t\t\t\tlet component = this.pendingTools.get(event.toolCallId);\n\t\t\t\tif (!component) {\n\t\t\t\t\tcomponent = new ToolExecutionComponent(\n\t\t\t\t\t\tevent.toolName,\n\t\t\t\t\t\tevent.toolCallId,\n\t\t\t\t\t\tevent.args,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tshowImages: this.settingsManager.getShowImages(),\n\t\t\t\t\t\t\timageWidthCells: this.settingsManager.getImageWidthCells(),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tthis.getRegisteredToolDefinition(event.toolName),\n\t\t\t\t\t\tthis.ui,\n\t\t\t\t\t\tthis.sessionManager.getCwd(),\n\t\t\t\t\t);\n\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\t\tthis.pendingTools.set(event.toolCallId, component);\n\t\t\t\t}\n\t\t\t\tcomponent.markExecutionStarted();\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"tool_execution_update\": {\n\t\t\t\tconst component = this.pendingTools.get(event.toolCallId);\n\t\t\t\tif (component) {\n\t\t\t\t\tcomponent.updateResult({ ...event.partialResult, isError: false }, true);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"tool_execution_end\": {\n\t\t\t\tconst component = this.pendingTools.get(event.toolCallId);\n\t\t\t\tif (component) {\n\t\t\t\t\tcomponent.updateResult({ ...event.result, isError: event.isError });\n\t\t\t\t\tthis.pendingTools.delete(event.toolCallId);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"agent_end\":\n\t\t\t\tif (this.settingsManager.getShowTerminalProgress()) {\n\t\t\t\t\tthis.ui.terminal.setProgress(false);\n\t\t\t\t}\n\t\t\t\tif (this.loadingAnimation) {\n\t\t\t\t\tthis.loadingAnimation.stop();\n\t\t\t\t\tthis.loadingAnimation = undefined;\n\t\t\t\t\tthis.statusContainer.clear();\n\t\t\t\t}\n\t\t\t\tif (this.streamingComponent) {\n\t\t\t\t\tthis.chatContainer.removeChild(this.streamingComponent);\n\t\t\t\t\tthis.streamingComponent = undefined;\n\t\t\t\t\tthis.streamingMessage = undefined;\n\t\t\t\t}\n\t\t\t\tthis.pendingTools.clear();\n\n\t\t\t\tawait this.checkShutdownRequested();\n\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\n\t\t\tcase \"compaction_start\": {\n\t\t\t\tif (this.settingsManager.getShowTerminalProgress()) {\n\t\t\t\t\tthis.ui.terminal.setProgress(true);\n\t\t\t\t}\n\t\t\t\t// Keep editor active; submissions are queued during compaction.\n\t\t\t\tthis.autoCompactionEscapeHandler = this.defaultEditor.onEscape;\n\t\t\t\tthis.defaultEditor.onEscape = () => {\n\t\t\t\t\tthis.session.abortCompaction();\n\t\t\t\t};\n\t\t\t\tthis.statusContainer.clear();\n\t\t\t\tconst cancelHint = `(${keyText(\"app.interrupt\")} to cancel)`;\n\t\t\t\tconst label =\n\t\t\t\t\tevent.reason === \"manual\"\n\t\t\t\t\t\t? `Compacting context... ${cancelHint}`\n\t\t\t\t\t\t: `${event.reason === \"overflow\" ? \"Context overflow detected, \" : \"\"}Auto-compacting... ${cancelHint}`;\n\t\t\t\tthis.autoCompactionLoader = new Loader(\n\t\t\t\t\tthis.ui,\n\t\t\t\t\t(spinner) => theme.fg(\"accent\", spinner),\n\t\t\t\t\t(text) => theme.fg(\"muted\", text),\n\t\t\t\t\tlabel,\n\t\t\t\t);\n\t\t\t\tthis.statusContainer.addChild(this.autoCompactionLoader);\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"compaction_end\": {\n\t\t\t\tif (this.settingsManager.getShowTerminalProgress()) {\n\t\t\t\t\tthis.ui.terminal.setProgress(false);\n\t\t\t\t}\n\t\t\t\tif (this.autoCompactionEscapeHandler) {\n\t\t\t\t\tthis.defaultEditor.onEscape = this.autoCompactionEscapeHandler;\n\t\t\t\t\tthis.autoCompactionEscapeHandler = undefined;\n\t\t\t\t}\n\t\t\t\tif (this.autoCompactionLoader) {\n\t\t\t\t\tthis.autoCompactionLoader.stop();\n\t\t\t\t\tthis.autoCompactionLoader = undefined;\n\t\t\t\t\tthis.statusContainer.clear();\n\t\t\t\t}\n\t\t\t\tif (event.aborted) {\n\t\t\t\t\tif (event.reason === \"manual\") {\n\t\t\t\t\t\tthis.showError(\"Compaction cancelled\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.showStatus(\"Auto-compaction cancelled\");\n\t\t\t\t\t}\n\t\t\t\t} else if (event.result) {\n\t\t\t\t\tthis.chatContainer.clear();\n\t\t\t\t\tthis.rebuildChatFromMessages();\n\t\t\t\t\tthis.addMessageToChat(\n\t\t\t\t\t\tcreateCompactionSummaryMessage(\n\t\t\t\t\t\t\tevent.result.summary,\n\t\t\t\t\t\t\tevent.result.tokensBefore,\n\t\t\t\t\t\t\tnew Date().toISOString(),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t\tthis.footer.invalidate();\n\t\t\t\t} else if (event.errorMessage) {\n\t\t\t\t\tif (event.reason === \"manual\") {\n\t\t\t\t\t\tthis.showError(event.errorMessage);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\t\t\tthis.chatContainer.addChild(new Text(theme.fg(\"error\", event.errorMessage), 1, 0));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvoid this.flushCompactionQueue({ willRetry: event.willRetry });\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"auto_retry_start\": {\n\t\t\t\t// Set up escape to abort retry\n\t\t\t\tthis.retryEscapeHandler = this.defaultEditor.onEscape;\n\t\t\t\tthis.defaultEditor.onEscape = () => {\n\t\t\t\t\tthis.session.abortRetry();\n\t\t\t\t};\n\t\t\t\t// Show retry indicator\n\t\t\t\tthis.statusContainer.clear();\n\t\t\t\tthis.retryCountdown?.dispose();\n\t\t\t\tconst retryMessage = (seconds: number) =>\n\t\t\t\t\t`Retrying (${event.attempt}/${event.maxAttempts}) in ${seconds}s... (${keyText(\"app.interrupt\")} to cancel)`;\n\t\t\t\tthis.retryLoader = new Loader(\n\t\t\t\t\tthis.ui,\n\t\t\t\t\t(spinner) => theme.fg(\"warning\", spinner),\n\t\t\t\t\t(text) => theme.fg(\"muted\", text),\n\t\t\t\t\tretryMessage(Math.ceil(event.delayMs / 1000)),\n\t\t\t\t);\n\t\t\t\tthis.retryCountdown = new CountdownTimer(\n\t\t\t\t\tevent.delayMs,\n\t\t\t\t\tthis.ui,\n\t\t\t\t\t(seconds) => {\n\t\t\t\t\t\tthis.retryLoader?.setMessage(retryMessage(seconds));\n\t\t\t\t\t},\n\t\t\t\t\t() => {\n\t\t\t\t\t\tthis.retryCountdown = undefined;\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tthis.statusContainer.addChild(this.retryLoader);\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"auto_retry_end\": {\n\t\t\t\t// Restore escape handler\n\t\t\t\tif (this.retryEscapeHandler) {\n\t\t\t\t\tthis.defaultEditor.onEscape = this.retryEscapeHandler;\n\t\t\t\t\tthis.retryEscapeHandler = undefined;\n\t\t\t\t}\n\t\t\t\tif (this.retryCountdown) {\n\t\t\t\t\tthis.retryCountdown.dispose();\n\t\t\t\t\tthis.retryCountdown = undefined;\n\t\t\t\t}\n\t\t\t\t// Stop loader\n\t\t\t\tif (this.retryLoader) {\n\t\t\t\t\tthis.retryLoader.stop();\n\t\t\t\t\tthis.retryLoader = undefined;\n\t\t\t\t\tthis.statusContainer.clear();\n\t\t\t\t}\n\t\t\t\t// Show error only on final failure (success shows normal response)\n\t\t\t\tif (!event.success) {\n\t\t\t\t\tthis.showError(`Retry failed after ${event.attempt} attempts: ${event.finalError || \"Unknown error\"}`);\n\t\t\t\t}\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Extract text content from a user message */\n\tprivate getUserMessageText(message: Message): string {\n\t\tif (message.role !== \"user\") return \"\";\n\t\tconst textBlocks =\n\t\t\ttypeof message.content === \"string\"\n\t\t\t\t? [{ type: \"text\", text: message.content }]\n\t\t\t\t: message.content.filter((c: { type: string }) => c.type === \"text\");\n\t\treturn textBlocks.map((c) => (c as { text: string }).text).join(\"\");\n\t}\n\n\t/**\n\t * Show a status message in the chat.\n\t *\n\t * If multiple status messages are emitted back-to-back (without anything else being added to the chat),\n\t * we update the previous status line instead of appending new ones to avoid log spam.\n\t */\n\tprivate showStatus(message: string): void {\n\t\tconst children = this.chatContainer.children;\n\t\tconst last = children.length > 0 ? children[children.length - 1] : undefined;\n\t\tconst secondLast = children.length > 1 ? children[children.length - 2] : undefined;\n\n\t\tif (last && secondLast && last === this.lastStatusText && secondLast === this.lastStatusSpacer) {\n\t\t\tthis.lastStatusText.setText(theme.fg(\"dim\", message));\n\t\t\tthis.ui.requestRender();\n\t\t\treturn;\n\t\t}\n\n\t\tconst spacer = new Spacer(1);\n\t\tconst text = new Text(theme.fg(\"dim\", message), 1, 0);\n\t\tthis.chatContainer.addChild(spacer);\n\t\tthis.chatContainer.addChild(text);\n\t\tthis.lastStatusSpacer = spacer;\n\t\tthis.lastStatusText = text;\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate addMessageToChat(message: AgentMessage, options?: { populateHistory?: boolean }): void {\n\t\tswitch (message.role) {\n\t\t\tcase \"bashExecution\": {\n\t\t\t\tconst component = new BashExecutionComponent(message.command, this.ui, message.excludeFromContext);\n\t\t\t\tif (message.output) {\n\t\t\t\t\tcomponent.appendOutput(message.output);\n\t\t\t\t}\n\t\t\t\tcomponent.setComplete(\n\t\t\t\t\tmessage.exitCode,\n\t\t\t\t\tmessage.cancelled,\n\t\t\t\t\tmessage.truncated ? ({ truncated: true } as TruncationResult) : undefined,\n\t\t\t\t\tmessage.fullOutputPath,\n\t\t\t\t);\n\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"custom\": {\n\t\t\t\tif (message.display) {\n\t\t\t\t\tconst renderer = this.session.extensionRunner.getMessageRenderer(message.customType);\n\t\t\t\t\tconst component = new CustomMessageComponent(message, renderer, this.getMarkdownThemeWithSettings());\n\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"compactionSummary\": {\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\tconst component = new CompactionSummaryMessageComponent(message, this.getMarkdownThemeWithSettings());\n\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"branchSummary\": {\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\tconst component = new BranchSummaryMessageComponent(message, this.getMarkdownThemeWithSettings());\n\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"user\": {\n\t\t\t\tconst textContent = this.getUserMessageText(message);\n\t\t\t\tif (textContent) {\n\t\t\t\t\tif (this.chatContainer.children.length > 0) {\n\t\t\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\t\t}\n\t\t\t\t\tconst skillBlock = parseSkillBlock(textContent);\n\t\t\t\t\tif (skillBlock) {\n\t\t\t\t\t\t// Render skill block (collapsible)\n\t\t\t\t\t\tconst component = new SkillInvocationMessageComponent(\n\t\t\t\t\t\t\tskillBlock,\n\t\t\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\t\t\t// Render user message separately if present\n\t\t\t\t\t\tif (skillBlock.userMessage) {\n\t\t\t\t\t\t\tconst userComponent = new UserMessageComponent(\n\t\t\t\t\t\t\t\tskillBlock.userMessage,\n\t\t\t\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tthis.chatContainer.addChild(userComponent);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst userComponent = new UserMessageComponent(textContent, this.getMarkdownThemeWithSettings());\n\t\t\t\t\t\tthis.chatContainer.addChild(userComponent);\n\t\t\t\t\t}\n\t\t\t\t\tif (options?.populateHistory) {\n\t\t\t\t\t\tthis.editor.addToHistory?.(textContent);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"assistant\": {\n\t\t\t\tconst assistantComponent = new AssistantMessageComponent(\n\t\t\t\t\tmessage,\n\t\t\t\t\tthis.hideThinkingBlock,\n\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t\tthis.hiddenThinkingLabel,\n\t\t\t\t);\n\t\t\t\tthis.chatContainer.addChild(assistantComponent);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"toolResult\": {\n\t\t\t\t// Tool results are rendered inline with tool calls, handled separately\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tconst _exhaustive: never = message;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Render session context to chat. Used for initial load and rebuild after compaction.\n\t * @param sessionContext Session context to render\n\t * @param options.updateFooter Update footer state\n\t * @param options.populateHistory Add user messages to editor history\n\t */\n\tprivate renderSessionContext(\n\t\tsessionContext: SessionContext,\n\t\toptions: { updateFooter?: boolean; populateHistory?: boolean } = {},\n\t): void {\n\t\tthis.pendingTools.clear();\n\t\tconst renderedPendingTools = new Map<string, ToolExecutionComponent>();\n\n\t\tif (options.updateFooter) {\n\t\t\tthis.footer.invalidate();\n\t\t\tthis.updateEditorBorderColor();\n\t\t}\n\n\t\tfor (const message of sessionContext.messages) {\n\t\t\t// Assistant messages need special handling for tool calls\n\t\t\tif (message.role === \"assistant\") {\n\t\t\t\tthis.addMessageToChat(message);\n\t\t\t\t// Render tool call components\n\t\t\t\tfor (const content of message.content) {\n\t\t\t\t\tif (content.type === \"toolCall\") {\n\t\t\t\t\t\tconst component = new ToolExecutionComponent(\n\t\t\t\t\t\t\tcontent.name,\n\t\t\t\t\t\t\tcontent.id,\n\t\t\t\t\t\t\tcontent.arguments,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tshowImages: this.settingsManager.getShowImages(),\n\t\t\t\t\t\t\t\timageWidthCells: this.settingsManager.getImageWidthCells(),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tthis.getRegisteredToolDefinition(content.name),\n\t\t\t\t\t\t\tthis.ui,\n\t\t\t\t\t\t\tthis.sessionManager.getCwd(),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\t\tthis.chatContainer.addChild(component);\n\n\t\t\t\t\t\tif (message.stopReason === \"aborted\" || message.stopReason === \"error\") {\n\t\t\t\t\t\t\tlet errorMessage: string;\n\t\t\t\t\t\t\tif (message.stopReason === \"aborted\") {\n\t\t\t\t\t\t\t\tconst retryAttempt = this.session.retryAttempt;\n\t\t\t\t\t\t\t\terrorMessage =\n\t\t\t\t\t\t\t\t\tretryAttempt > 0\n\t\t\t\t\t\t\t\t\t\t? `Aborted after ${retryAttempt} retry attempt${retryAttempt > 1 ? \"s\" : \"\"}`\n\t\t\t\t\t\t\t\t\t\t: \"Operation aborted\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\terrorMessage = message.errorMessage || \"Error\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcomponent.updateResult({ content: [{ type: \"text\", text: errorMessage }], isError: true });\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\trenderedPendingTools.set(content.id, component);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (message.role === \"toolResult\") {\n\t\t\t\t// Match tool results to pending tool components\n\t\t\t\tconst component = renderedPendingTools.get(message.toolCallId);\n\t\t\t\tif (component) {\n\t\t\t\t\tcomponent.updateResult(message);\n\t\t\t\t\trenderedPendingTools.delete(message.toolCallId);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// All other messages use standard rendering\n\t\t\t\tthis.addMessageToChat(message, options);\n\t\t\t}\n\t\t}\n\n\t\tfor (const [toolCallId, component] of renderedPendingTools) {\n\t\t\tthis.pendingTools.set(toolCallId, component);\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\trenderInitialMessages(): void {\n\t\t// Get aligned messages and entries from session context\n\t\tconst context = this.sessionManager.buildSessionContext();\n\t\tthis.renderSessionContext(context, {\n\t\t\tupdateFooter: true,\n\t\t\tpopulateHistory: true,\n\t\t});\n\n\t\t// Show compaction info if session was compacted\n\t\tconst allEntries = this.sessionManager.getEntries();\n\t\tconst compactionCount = allEntries.filter((e) => e.type === \"compaction\").length;\n\t\tif (compactionCount > 0) {\n\t\t\tconst times = compactionCount === 1 ? \"1 time\" : `${compactionCount} times`;\n\t\t\tthis.showStatus(`Session compacted ${times}`);\n\t\t}\n\t}\n\n\tasync getUserInput(): Promise<string> {\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.onInputCallback = (text: string) => {\n\t\t\t\tthis.onInputCallback = undefined;\n\t\t\t\tresolve(text);\n\t\t\t};\n\t\t});\n\t}\n\n\tprivate rebuildChatFromMessages(): void {\n\t\tthis.chatContainer.clear();\n\t\tconst context = this.sessionManager.buildSessionContext();\n\t\tthis.renderSessionContext(context);\n\t}\n\n\t// =========================================================================\n\t// Key handlers\n\t// =========================================================================\n\n\tprivate handleCtrlC(): void {\n\t\tconst now = Date.now();\n\t\tif (now - this.lastSigintTime < 500) {\n\t\t\tvoid this.shutdown();\n\t\t} else {\n\t\t\tthis.clearEditor();\n\t\t\tthis.lastSigintTime = now;\n\t\t}\n\t}\n\n\tprivate handleCtrlD(): void {\n\t\t// Only called when editor is empty (enforced by CustomEditor)\n\t\tvoid this.shutdown();\n\t}\n\n\t/**\n\t * Gracefully shutdown the agent.\n\t * Stops the TUI before emitting shutdown events so extension UI cleanup cannot\n\t * repaint the final frame while the process is exiting.\n\t */\n\tprivate isShuttingDown = false;\n\n\tprivate async shutdown(): Promise<void> {\n\t\tif (this.isShuttingDown) return;\n\t\tthis.isShuttingDown = true;\n\t\tthis.unregisterSignalHandlers();\n\n\t\t// Drain any in-flight Kitty key release events before stopping.\n\t\t// This prevents escape sequences from leaking to the parent shell over slow SSH.\n\t\tawait this.ui.terminal.drainInput(1000);\n\n\t\tthis.stop();\n\t\tawait this.runtimeHost.dispose();\n\t\tprocess.exit(0);\n\t}\n\n\tprivate emergencyTerminalExit(): never {\n\t\tthis.isShuttingDown = true;\n\t\tthis.unregisterSignalHandlers();\n\t\tkillTrackedDetachedChildren();\n\t\t// The terminal is gone. Do not run normal shutdown because TUI and\n\t\t// extension cleanup can write restore sequences and re-trigger EIO.\n\t\tprocess.exit(129);\n\t}\n\n\t/**\n\t * Last-resort handler for uncaught exceptions. The TUI puts stdin into raw\n\t * mode and hides the cursor; without this handler, an uncaught throw from\n\t * anywhere (e.g. an extension's async `ChildProcess.on(\"exit\")` callback)\n\t * tears down the process while leaving the terminal in raw mode with no\n\t * cursor, requiring `stty sane && reset` to recover.\n\t *\n\t * Unlike emergencyTerminalExit, the terminal is still alive here, so we\n\t * call ui.stop() to restore cooked mode, the cursor, and disable bracketed\n\t * paste / Kitty / modifyOtherKeys sequences.\n\t */\n\tprivate uncaughtCrash(error: Error): never {\n\t\tif (this.isShuttingDown) {\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tthis.isShuttingDown = true;\n\t\ttry {\n\t\t\tthis.unregisterSignalHandlers();\n\t\t} catch {}\n\t\ttry {\n\t\t\tkillTrackedDetachedChildren();\n\t\t} catch {}\n\t\ttry {\n\t\t\tthis.ui.stop();\n\t\t} catch {}\n\t\tconsole.error(\"pi exiting due to uncaughtException:\");\n\t\tconsole.error(error);\n\t\tprocess.exit(1);\n\t}\n\n\t/**\n\t * Check if shutdown was requested and perform shutdown if so.\n\t */\n\tprivate async checkShutdownRequested(): Promise<void> {\n\t\tif (!this.shutdownRequested) return;\n\t\tawait this.shutdown();\n\t}\n\n\tprivate registerSignalHandlers(): void {\n\t\tthis.unregisterSignalHandlers();\n\n\t\tconst signals: NodeJS.Signals[] = [\"SIGTERM\"];\n\t\tif (process.platform !== \"win32\") {\n\t\t\tsignals.push(\"SIGHUP\");\n\t\t}\n\n\t\tfor (const signal of signals) {\n\t\t\tconst handler = () => {\n\t\t\t\tif (signal === \"SIGHUP\") {\n\t\t\t\t\tthis.emergencyTerminalExit();\n\t\t\t\t}\n\t\t\t\tkillTrackedDetachedChildren();\n\t\t\t\tvoid this.shutdown();\n\t\t\t};\n\t\t\tprocess.prependListener(signal, handler);\n\t\t\tthis.signalCleanupHandlers.push(() => process.off(signal, handler));\n\t\t}\n\n\t\tconst terminalErrorHandler = (error: Error) => {\n\t\t\tif (isDeadTerminalError(error)) {\n\t\t\t\tthis.emergencyTerminalExit();\n\t\t\t}\n\t\t\tthrow error;\n\t\t};\n\t\tprocess.stdout.on(\"error\", terminalErrorHandler);\n\t\tprocess.stderr.on(\"error\", terminalErrorHandler);\n\t\tthis.signalCleanupHandlers.push(() => process.stdout.off(\"error\", terminalErrorHandler));\n\t\tthis.signalCleanupHandlers.push(() => process.stderr.off(\"error\", terminalErrorHandler));\n\n\t\t// Restore the terminal before the process dies on any uncaught throw.\n\t\t// Without this, an unhandled exception from extension code (or anywhere\n\t\t// in pi) leaves the terminal in raw mode with no cursor.\n\t\tconst uncaughtExceptionHandler = (error: Error) => this.uncaughtCrash(error);\n\t\tprocess.prependListener(\"uncaughtException\", uncaughtExceptionHandler);\n\t\tthis.signalCleanupHandlers.push(() => process.off(\"uncaughtException\", uncaughtExceptionHandler));\n\t}\n\n\tprivate unregisterSignalHandlers(): void {\n\t\tfor (const cleanup of this.signalCleanupHandlers) {\n\t\t\tcleanup();\n\t\t}\n\t\tthis.signalCleanupHandlers = [];\n\t}\n\n\tprivate handleCtrlZ(): void {\n\t\tif (process.platform === \"win32\") {\n\t\t\tthis.showStatus(\"Suspend to background is not supported on Windows\");\n\t\t\treturn;\n\t\t}\n\n\t\t// Keep the event loop alive while suspended. Without this, stopping the TUI\n\t\t// can leave Node with no ref'ed handles, causing the process to exit on fg\n\t\t// before the SIGCONT handler gets a chance to restore the terminal.\n\t\tconst suspendKeepAlive = setInterval(() => {}, 2 ** 30);\n\n\t\t// Ignore SIGINT while suspended so Ctrl+C in the terminal does not\n\t\t// kill the backgrounded process. The handler is removed on resume.\n\t\tconst ignoreSigint = () => {};\n\t\tprocess.on(\"SIGINT\", ignoreSigint);\n\n\t\t// Set up handler to restore TUI when resumed\n\t\tprocess.once(\"SIGCONT\", () => {\n\t\t\tclearInterval(suspendKeepAlive);\n\t\t\tprocess.removeListener(\"SIGINT\", ignoreSigint);\n\t\t\tthis.ui.start();\n\t\t\tthis.ui.requestRender(true);\n\t\t});\n\n\t\ttry {\n\t\t\t// Stop the TUI (restore terminal to normal mode)\n\t\t\tthis.ui.stop();\n\n\t\t\t// Send SIGTSTP to process group (pid=0 means all processes in group)\n\t\t\tprocess.kill(0, \"SIGTSTP\");\n\t\t} catch (error) {\n\t\t\tclearInterval(suspendKeepAlive);\n\t\t\tprocess.removeListener(\"SIGINT\", ignoreSigint);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate async handleFollowUp(): Promise<void> {\n\t\tconst text = (this.editor.getExpandedText?.() ?? this.editor.getText()).trim();\n\t\tif (!text) return;\n\n\t\t// Queue input during compaction (extension commands execute immediately)\n\t\tif (this.session.isCompacting) {\n\t\t\tif (this.isExtensionCommand(text)) {\n\t\t\t\tthis.editor.addToHistory?.(text);\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.session.prompt(text);\n\t\t\t} else {\n\t\t\t\tthis.queueCompactionMessage(text, \"followUp\");\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Alt+Enter queues a follow-up message (waits until agent finishes)\n\t\t// This handles extension commands (execute immediately), prompt template expansion, and queueing\n\t\tif (this.session.isStreaming) {\n\t\t\tthis.editor.addToHistory?.(text);\n\t\t\tthis.editor.setText(\"\");\n\t\t\tawait this.session.prompt(text, { streamingBehavior: \"followUp\" });\n\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\tthis.ui.requestRender();\n\t\t}\n\t\t// If not streaming, Alt+Enter acts like regular Enter (trigger onSubmit)\n\t\telse if (this.editor.onSubmit) {\n\t\t\tthis.editor.setText(\"\");\n\t\t\tthis.editor.onSubmit(text);\n\t\t}\n\t}\n\n\tprivate handleDequeue(): void {\n\t\tconst restored = this.restoreQueuedMessagesToEditor();\n\t\tif (restored === 0) {\n\t\t\tthis.showStatus(\"No queued messages to restore\");\n\t\t} else {\n\t\t\tthis.showStatus(`Restored ${restored} queued message${restored > 1 ? \"s\" : \"\"} to editor`);\n\t\t}\n\t}\n\n\tprivate updateEditorBorderColor(): void {\n\t\tif (this.isBashMode) {\n\t\t\tthis.editor.borderColor = theme.getBashModeBorderColor();\n\t\t} else {\n\t\t\tconst level = this.session.thinkingLevel || \"off\";\n\t\t\tthis.editor.borderColor = theme.getThinkingBorderColor(level);\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate cycleThinkingLevel(): void {\n\t\tconst newLevel = this.session.cycleThinkingLevel();\n\t\tif (newLevel === undefined) {\n\t\t\tthis.showStatus(\"Current model does not support thinking\");\n\t\t} else {\n\t\t\tthis.footer.invalidate();\n\t\t\tthis.updateEditorBorderColor();\n\t\t\tthis.showStatus(`Thinking level: ${newLevel}`);\n\t\t}\n\t}\n\n\tprivate async cycleModel(direction: \"forward\" | \"backward\"): Promise<void> {\n\t\ttry {\n\t\t\tconst result = await this.session.cycleModel(direction);\n\t\t\tif (result === undefined) {\n\t\t\t\tconst msg = this.session.scopedModels.length > 0 ? \"Only one model in scope\" : \"Only one model available\";\n\t\t\t\tthis.showStatus(msg);\n\t\t\t} else {\n\t\t\t\tthis.footer.invalidate();\n\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\tconst thinkingStr =\n\t\t\t\t\tresult.model.reasoning && result.thinkingLevel !== \"off\" ? ` (thinking: ${result.thinkingLevel})` : \"\";\n\t\t\t\tthis.showStatus(`Switched to ${result.model.name || result.model.id}${thinkingStr}`);\n\t\t\t\tvoid this.maybeWarnAboutAnthropicSubscriptionAuth(result.model);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t}\n\t}\n\n\tprivate toggleToolOutputExpansion(): void {\n\t\tthis.setToolsExpanded(!this.toolOutputExpanded);\n\t}\n\n\tprivate setToolsExpanded(expanded: boolean): void {\n\t\tthis.toolOutputExpanded = expanded;\n\t\tconst activeHeader = this.customHeader ?? this.builtInHeader;\n\t\tif (isExpandable(activeHeader)) {\n\t\t\tactiveHeader.setExpanded(expanded);\n\t\t}\n\t\tfor (const child of this.chatContainer.children) {\n\t\t\tif (isExpandable(child)) {\n\t\t\t\tchild.setExpanded(expanded);\n\t\t\t}\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate toggleThinkingBlockVisibility(): void {\n\t\tthis.hideThinkingBlock = !this.hideThinkingBlock;\n\t\tthis.settingsManager.setHideThinkingBlock(this.hideThinkingBlock);\n\n\t\t// Rebuild chat from session messages\n\t\tthis.chatContainer.clear();\n\t\tthis.rebuildChatFromMessages();\n\n\t\t// If streaming, re-add the streaming component with updated visibility and re-render\n\t\tif (this.streamingComponent && this.streamingMessage) {\n\t\t\tthis.streamingComponent.setHideThinkingBlock(this.hideThinkingBlock);\n\t\t\tthis.streamingComponent.updateContent(this.streamingMessage);\n\t\t\tthis.chatContainer.addChild(this.streamingComponent);\n\t\t}\n\n\t\tthis.showStatus(`Thinking blocks: ${this.hideThinkingBlock ? \"hidden\" : \"visible\"}`);\n\t}\n\n\tprivate async openExternalEditor(): Promise<void> {\n\t\t// Determine editor (respect $VISUAL, then $EDITOR)\n\t\tconst editorCmd = process.env.VISUAL || process.env.EDITOR;\n\t\tif (!editorCmd) {\n\t\t\tthis.showWarning(\"No editor configured. Set $VISUAL or $EDITOR environment variable.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentText = this.editor.getExpandedText?.() ?? this.editor.getText();\n\t\tconst tmpFile = path.join(os.tmpdir(), `pi-editor-${Date.now()}.pi.md`);\n\n\t\ttry {\n\t\t\t// Write current content to temp file\n\t\t\tfs.writeFileSync(tmpFile, currentText, \"utf-8\");\n\n\t\t\t// Stop TUI to release terminal\n\t\t\tthis.ui.stop();\n\n\t\t\t// Split by space to support editor arguments (e.g., \"code --wait\")\n\t\t\tconst [editor, ...editorArgs] = editorCmd.split(\" \");\n\n\t\t\tprocess.stdout.write(`Launching external editor: ${editorCmd}\\nPi will resume when the editor exits.\\n`);\n\n\t\t\t// Do not use spawnSync here. On Windows, synchronous child_process calls can keep\n\t\t\t// Node/libuv's console input read active after ui.stop() pauses stdin, racing\n\t\t\t// vim/nvim for the console input buffer until Ctrl+C cancels the pending read.\n\t\t\tconst status = await new Promise<number | null>((resolve) => {\n\t\t\t\tconst child = spawn(editor, [...editorArgs, tmpFile], {\n\t\t\t\t\tstdio: \"inherit\",\n\t\t\t\t\tshell: process.platform === \"win32\",\n\t\t\t\t});\n\t\t\t\tchild.on(\"error\", () => resolve(null));\n\t\t\t\tchild.on(\"close\", (code) => resolve(code));\n\t\t\t});\n\n\t\t\t// On successful exit (status 0), replace editor content\n\t\t\tif (status === 0) {\n\t\t\t\tconst newContent = fs.readFileSync(tmpFile, \"utf-8\").replace(/\\n$/, \"\");\n\t\t\t\tthis.editor.setText(newContent);\n\t\t\t}\n\t\t\t// On non-zero exit, keep original text (no action needed)\n\t\t} finally {\n\t\t\t// Clean up temp file\n\t\t\ttry {\n\t\t\t\tfs.unlinkSync(tmpFile);\n\t\t\t} catch {\n\t\t\t\t// Ignore cleanup errors\n\t\t\t}\n\n\t\t\t// Restart TUI\n\t\t\tthis.ui.start();\n\t\t\t// Force full re-render since external editor uses alternate screen\n\t\t\tthis.ui.requestRender(true);\n\t\t}\n\t}\n\n\t// =========================================================================\n\t// UI helpers\n\t// =========================================================================\n\n\tclearEditor(): void {\n\t\tthis.editor.setText(\"\");\n\t\tthis.ui.requestRender();\n\t}\n\n\tshowError(errorMessage: string): void {\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Text(theme.fg(\"error\", `Error: ${errorMessage}`), 1, 0));\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.ui.requestRender();\n\t}\n\n\tshowWarning(warningMessage: string): void {\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Text(theme.fg(\"warning\", `Warning: ${warningMessage}`), 1, 0));\n\t\tthis.ui.requestRender();\n\t}\n\n\tshowNewVersionNotification(newVersion: string): void {\n\t\tconst action = theme.fg(\"accent\", `${APP_NAME} update`);\n\t\tconst updateInstruction = theme.fg(\"muted\", `New version ${newVersion} is available. Run `) + action;\n\t\tconst changelogUrl = \"https://github.com/earendil-works/pi-mono/blob/main/packages/coding-agent/CHANGELOG.md\";\n\t\tconst changelogLink = getCapabilities().hyperlinks\n\t\t\t? hyperlink(theme.fg(\"accent\", \"open changelog\"), changelogUrl)\n\t\t\t: theme.fg(\"accent\", changelogUrl);\n\t\tconst changelogLine = theme.fg(\"muted\", \"Changelog: \") + changelogLink;\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new DynamicBorder((text) => theme.fg(\"warning\", text)));\n\t\tthis.chatContainer.addChild(\n\t\t\tnew Text(\n\t\t\t\t`${theme.bold(theme.fg(\"warning\", \"Update Available\"))}\\n${updateInstruction}\\n${changelogLine}`,\n\t\t\t\t1,\n\t\t\t\t0,\n\t\t\t),\n\t\t);\n\t\tthis.chatContainer.addChild(new DynamicBorder((text) => theme.fg(\"warning\", text)));\n\t\tthis.ui.requestRender();\n\t}\n\n\tshowPackageUpdateNotification(packages: string[]): void {\n\t\tconst action = theme.fg(\"accent\", `${APP_NAME} update`);\n\t\tconst updateInstruction = theme.fg(\"muted\", \"Package updates are available. Run \") + action;\n\t\tconst packageLines = packages.map((pkg) => `- ${pkg}`).join(\"\\n\");\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new DynamicBorder((text) => theme.fg(\"warning\", text)));\n\t\tthis.chatContainer.addChild(\n\t\t\tnew Text(\n\t\t\t\t`${theme.bold(theme.fg(\"warning\", \"Package Updates Available\"))}\\n${updateInstruction}\\n${theme.fg(\"muted\", \"Packages:\")}\\n${packageLines}`,\n\t\t\t\t1,\n\t\t\t\t0,\n\t\t\t),\n\t\t);\n\t\tthis.chatContainer.addChild(new DynamicBorder((text) => theme.fg(\"warning\", text)));\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Get all queued messages (read-only).\n\t * Combines session queue and compaction queue.\n\t */\n\tprivate getAllQueuedMessages(): { steering: string[]; followUp: string[] } {\n\t\treturn {\n\t\t\tsteering: [\n\t\t\t\t...this.session.getSteeringMessages(),\n\t\t\t\t...this.compactionQueuedMessages.filter((msg) => msg.mode === \"steer\").map((msg) => msg.text),\n\t\t\t],\n\t\t\tfollowUp: [\n\t\t\t\t...this.session.getFollowUpMessages(),\n\t\t\t\t...this.compactionQueuedMessages.filter((msg) => msg.mode === \"followUp\").map((msg) => msg.text),\n\t\t\t],\n\t\t};\n\t}\n\n\t/**\n\t * Clear all queued messages and return their contents.\n\t * Clears both session queue and compaction queue.\n\t */\n\tprivate clearAllQueues(): { steering: string[]; followUp: string[] } {\n\t\tconst { steering, followUp } = this.session.clearQueue();\n\t\tconst compactionSteering = this.compactionQueuedMessages\n\t\t\t.filter((msg) => msg.mode === \"steer\")\n\t\t\t.map((msg) => msg.text);\n\t\tconst compactionFollowUp = this.compactionQueuedMessages\n\t\t\t.filter((msg) => msg.mode === \"followUp\")\n\t\t\t.map((msg) => msg.text);\n\t\tthis.compactionQueuedMessages = [];\n\t\treturn {\n\t\t\tsteering: [...steering, ...compactionSteering],\n\t\t\tfollowUp: [...followUp, ...compactionFollowUp],\n\t\t};\n\t}\n\n\tprivate updatePendingMessagesDisplay(): void {\n\t\tthis.pendingMessagesContainer.clear();\n\t\tconst { steering: steeringMessages, followUp: followUpMessages } = this.getAllQueuedMessages();\n\t\tif (steeringMessages.length > 0 || followUpMessages.length > 0) {\n\t\t\tthis.pendingMessagesContainer.addChild(new Spacer(1));\n\t\t\tfor (const message of steeringMessages) {\n\t\t\t\tconst text = theme.fg(\"dim\", `Steering: ${message}`);\n\t\t\t\tthis.pendingMessagesContainer.addChild(new TruncatedText(text, 1, 0));\n\t\t\t}\n\t\t\tfor (const message of followUpMessages) {\n\t\t\t\tconst text = theme.fg(\"dim\", `Follow-up: ${message}`);\n\t\t\t\tthis.pendingMessagesContainer.addChild(new TruncatedText(text, 1, 0));\n\t\t\t}\n\t\t\tconst dequeueHint = this.getAppKeyDisplay(\"app.message.dequeue\");\n\t\t\tconst hintText = theme.fg(\"dim\", `↳ ${dequeueHint} to edit all queued messages`);\n\t\t\tthis.pendingMessagesContainer.addChild(new TruncatedText(hintText, 1, 0));\n\t\t}\n\t}\n\n\tprivate restoreQueuedMessagesToEditor(options?: { abort?: boolean; currentText?: string }): number {\n\t\tconst { steering, followUp } = this.clearAllQueues();\n\t\tconst allQueued = [...steering, ...followUp];\n\t\tif (allQueued.length === 0) {\n\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\tif (options?.abort) {\n\t\t\t\tthis.agent.abort();\n\t\t\t}\n\t\t\treturn 0;\n\t\t}\n\t\tconst queuedText = allQueued.join(\"\\n\\n\");\n\t\tconst currentText = options?.currentText ?? this.editor.getText();\n\t\tconst combinedText = [queuedText, currentText].filter((t) => t.trim()).join(\"\\n\\n\");\n\t\tthis.editor.setText(combinedText);\n\t\tthis.updatePendingMessagesDisplay();\n\t\tif (options?.abort) {\n\t\t\tthis.agent.abort();\n\t\t}\n\t\treturn allQueued.length;\n\t}\n\n\tprivate queueCompactionMessage(text: string, mode: \"steer\" | \"followUp\"): void {\n\t\tthis.compactionQueuedMessages.push({ text, mode });\n\t\tthis.editor.addToHistory?.(text);\n\t\tthis.editor.setText(\"\");\n\t\tthis.updatePendingMessagesDisplay();\n\t\tthis.showStatus(\"Queued message for after compaction\");\n\t}\n\n\tprivate isExtensionCommand(text: string): boolean {\n\t\tif (!text.startsWith(\"/\")) return false;\n\n\t\tconst extensionRunner = this.session.extensionRunner;\n\n\t\tconst spaceIndex = text.indexOf(\" \");\n\t\tconst commandName = spaceIndex === -1 ? text.slice(1) : text.slice(1, spaceIndex);\n\t\treturn !!extensionRunner.getCommand(commandName);\n\t}\n\n\tprivate async flushCompactionQueue(options?: { willRetry?: boolean }): Promise<void> {\n\t\tif (this.compactionQueuedMessages.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst queuedMessages = [...this.compactionQueuedMessages];\n\t\tthis.compactionQueuedMessages = [];\n\t\tthis.updatePendingMessagesDisplay();\n\n\t\tconst restoreQueue = (error: unknown) => {\n\t\t\tthis.session.clearQueue();\n\t\t\tthis.compactionQueuedMessages = queuedMessages;\n\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\tthis.showError(\n\t\t\t\t`Failed to send queued message${queuedMessages.length > 1 ? \"s\" : \"\"}: ${\n\t\t\t\t\terror instanceof Error ? error.message : String(error)\n\t\t\t\t}`,\n\t\t\t);\n\t\t};\n\n\t\ttry {\n\t\t\tif (options?.willRetry) {\n\t\t\t\t// When retry is pending, queue messages for the retry turn\n\t\t\t\tfor (const message of queuedMessages) {\n\t\t\t\t\tif (this.isExtensionCommand(message.text)) {\n\t\t\t\t\t\tawait this.session.prompt(message.text);\n\t\t\t\t\t} else if (message.mode === \"followUp\") {\n\t\t\t\t\t\tawait this.session.followUp(message.text);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tawait this.session.steer(message.text);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Find first non-extension-command message to use as prompt\n\t\t\tconst firstPromptIndex = queuedMessages.findIndex((message) => !this.isExtensionCommand(message.text));\n\t\t\tif (firstPromptIndex === -1) {\n\t\t\t\t// All extension commands - execute them all\n\t\t\t\tfor (const message of queuedMessages) {\n\t\t\t\t\tawait this.session.prompt(message.text);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Execute any extension commands before the first prompt\n\t\t\tconst preCommands = queuedMessages.slice(0, firstPromptIndex);\n\t\t\tconst firstPrompt = queuedMessages[firstPromptIndex];\n\t\t\tconst rest = queuedMessages.slice(firstPromptIndex + 1);\n\n\t\t\tfor (const message of preCommands) {\n\t\t\t\tawait this.session.prompt(message.text);\n\t\t\t}\n\n\t\t\t// Send first prompt (starts streaming)\n\t\t\tconst promptPromise = this.session.prompt(firstPrompt.text).catch((error) => {\n\t\t\t\trestoreQueue(error);\n\t\t\t});\n\n\t\t\t// Queue remaining messages\n\t\t\tfor (const message of rest) {\n\t\t\t\tif (this.isExtensionCommand(message.text)) {\n\t\t\t\t\tawait this.session.prompt(message.text);\n\t\t\t\t} else if (message.mode === \"followUp\") {\n\t\t\t\t\tawait this.session.followUp(message.text);\n\t\t\t\t} else {\n\t\t\t\t\tawait this.session.steer(message.text);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\tvoid promptPromise;\n\t\t} catch (error) {\n\t\t\trestoreQueue(error);\n\t\t}\n\t}\n\n\t/** Move pending bash components from pending area to chat */\n\tprivate flushPendingBashComponents(): void {\n\t\tfor (const component of this.pendingBashComponents) {\n\t\t\tthis.pendingMessagesContainer.removeChild(component);\n\t\t\tthis.chatContainer.addChild(component);\n\t\t}\n\t\tthis.pendingBashComponents = [];\n\t}\n\n\t// =========================================================================\n\t// Selectors\n\t// =========================================================================\n\n\t/**\n\t * Shows a selector component in place of the editor.\n\t * @param create Factory that receives a `done` callback and returns the component and focus target\n\t */\n\tprivate showSelector(create: (done: () => void) => { component: Component; focus: Component }): void {\n\t\tconst done = () => {\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(this.editor);\n\t\t\tthis.ui.setFocus(this.editor);\n\t\t};\n\t\tconst { component, focus } = create(done);\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(component);\n\t\tthis.ui.setFocus(focus);\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate showSettingsSelector(): void {\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new SettingsSelectorComponent(\n\t\t\t\t{\n\t\t\t\t\tautoCompact: this.session.autoCompactionEnabled,\n\t\t\t\t\tshowImages: this.settingsManager.getShowImages(),\n\t\t\t\t\timageWidthCells: this.settingsManager.getImageWidthCells(),\n\t\t\t\t\tautoResizeImages: this.settingsManager.getImageAutoResize(),\n\t\t\t\t\tblockImages: this.settingsManager.getBlockImages(),\n\t\t\t\t\tenableSkillCommands: this.settingsManager.getEnableSkillCommands(),\n\t\t\t\t\tsteeringMode: this.session.steeringMode,\n\t\t\t\t\tfollowUpMode: this.session.followUpMode,\n\t\t\t\t\ttransport: this.settingsManager.getTransport(),\n\t\t\t\t\tthinkingLevel: this.session.thinkingLevel,\n\t\t\t\t\tavailableThinkingLevels: this.session.getAvailableThinkingLevels(),\n\t\t\t\t\tcurrentTheme: this.settingsManager.getTheme() || \"dark\",\n\t\t\t\t\tavailableThemes: getAvailableThemes(),\n\t\t\t\t\thideThinkingBlock: this.hideThinkingBlock,\n\t\t\t\t\tcollapseChangelog: this.settingsManager.getCollapseChangelog(),\n\t\t\t\t\tenableInstallTelemetry: this.settingsManager.getEnableInstallTelemetry(),\n\t\t\t\t\tdoubleEscapeAction: this.settingsManager.getDoubleEscapeAction(),\n\t\t\t\t\ttreeFilterMode: this.settingsManager.getTreeFilterMode(),\n\t\t\t\t\tshowHardwareCursor: this.settingsManager.getShowHardwareCursor(),\n\t\t\t\t\teditorPaddingX: this.settingsManager.getEditorPaddingX(),\n\t\t\t\t\tautocompleteMaxVisible: this.settingsManager.getAutocompleteMaxVisible(),\n\t\t\t\t\tquietStartup: this.settingsManager.getQuietStartup(),\n\t\t\t\t\tclearOnShrink: this.settingsManager.getClearOnShrink(),\n\t\t\t\t\tshowTerminalProgress: this.settingsManager.getShowTerminalProgress(),\n\t\t\t\t\twarnings: this.settingsManager.getWarnings(),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tonAutoCompactChange: (enabled) => {\n\t\t\t\t\t\tthis.session.setAutoCompactionEnabled(enabled);\n\t\t\t\t\t\tthis.footer.setAutoCompactEnabled(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonShowImagesChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setShowImages(enabled);\n\t\t\t\t\t\tfor (const child of this.chatContainer.children) {\n\t\t\t\t\t\t\tif (child instanceof ToolExecutionComponent) {\n\t\t\t\t\t\t\t\tchild.setShowImages(enabled);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonImageWidthCellsChange: (width) => {\n\t\t\t\t\t\tthis.settingsManager.setImageWidthCells(width);\n\t\t\t\t\t\tfor (const child of this.chatContainer.children) {\n\t\t\t\t\t\t\tif (child instanceof ToolExecutionComponent) {\n\t\t\t\t\t\t\t\tchild.setImageWidthCells(width);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonAutoResizeImagesChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setImageAutoResize(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonBlockImagesChange: (blocked) => {\n\t\t\t\t\t\tthis.settingsManager.setBlockImages(blocked);\n\t\t\t\t\t},\n\t\t\t\t\tonEnableSkillCommandsChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setEnableSkillCommands(enabled);\n\t\t\t\t\t\tthis.setupAutocompleteProvider();\n\t\t\t\t\t},\n\t\t\t\t\tonSteeringModeChange: (mode) => {\n\t\t\t\t\t\tthis.session.setSteeringMode(mode);\n\t\t\t\t\t},\n\t\t\t\t\tonFollowUpModeChange: (mode) => {\n\t\t\t\t\t\tthis.session.setFollowUpMode(mode);\n\t\t\t\t\t},\n\t\t\t\t\tonTransportChange: (transport) => {\n\t\t\t\t\t\tthis.settingsManager.setTransport(transport);\n\t\t\t\t\t\tthis.session.agent.transport = transport;\n\t\t\t\t\t},\n\t\t\t\t\tonThinkingLevelChange: (level) => {\n\t\t\t\t\t\tthis.session.setThinkingLevel(level);\n\t\t\t\t\t\tthis.footer.invalidate();\n\t\t\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\t\t},\n\t\t\t\t\tonThemeChange: (themeName) => {\n\t\t\t\t\t\tconst result = setTheme(themeName, true);\n\t\t\t\t\t\tthis.settingsManager.setTheme(themeName);\n\t\t\t\t\t\tthis.ui.invalidate();\n\t\t\t\t\t\tif (!result.success) {\n\t\t\t\t\t\t\tthis.showError(`Failed to load theme \"${themeName}\": ${result.error}\\nFell back to dark theme.`);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonThemePreview: (themeName) => {\n\t\t\t\t\t\tconst result = setTheme(themeName, true);\n\t\t\t\t\t\tif (result.success) {\n\t\t\t\t\t\t\tthis.ui.invalidate();\n\t\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonHideThinkingBlockChange: (hidden) => {\n\t\t\t\t\t\tthis.hideThinkingBlock = hidden;\n\t\t\t\t\t\tthis.settingsManager.setHideThinkingBlock(hidden);\n\t\t\t\t\t\tfor (const child of this.chatContainer.children) {\n\t\t\t\t\t\t\tif (child instanceof AssistantMessageComponent) {\n\t\t\t\t\t\t\t\tchild.setHideThinkingBlock(hidden);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.chatContainer.clear();\n\t\t\t\t\t\tthis.rebuildChatFromMessages();\n\t\t\t\t\t},\n\t\t\t\t\tonCollapseChangelogChange: (collapsed) => {\n\t\t\t\t\t\tthis.settingsManager.setCollapseChangelog(collapsed);\n\t\t\t\t\t},\n\t\t\t\t\tonEnableInstallTelemetryChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setEnableInstallTelemetry(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonQuietStartupChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setQuietStartup(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonDoubleEscapeActionChange: (action) => {\n\t\t\t\t\t\tthis.settingsManager.setDoubleEscapeAction(action);\n\t\t\t\t\t},\n\t\t\t\t\tonTreeFilterModeChange: (mode) => {\n\t\t\t\t\t\tthis.settingsManager.setTreeFilterMode(mode);\n\t\t\t\t\t},\n\t\t\t\t\tonShowHardwareCursorChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setShowHardwareCursor(enabled);\n\t\t\t\t\t\tthis.ui.setShowHardwareCursor(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonEditorPaddingXChange: (padding) => {\n\t\t\t\t\t\tthis.settingsManager.setEditorPaddingX(padding);\n\t\t\t\t\t\tthis.defaultEditor.setPaddingX(padding);\n\t\t\t\t\t\tif (this.editor !== this.defaultEditor && this.editor.setPaddingX !== undefined) {\n\t\t\t\t\t\t\tthis.editor.setPaddingX(padding);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonAutocompleteMaxVisibleChange: (maxVisible) => {\n\t\t\t\t\t\tthis.settingsManager.setAutocompleteMaxVisible(maxVisible);\n\t\t\t\t\t\tthis.defaultEditor.setAutocompleteMaxVisible(maxVisible);\n\t\t\t\t\t\tif (this.editor !== this.defaultEditor && this.editor.setAutocompleteMaxVisible !== undefined) {\n\t\t\t\t\t\t\tthis.editor.setAutocompleteMaxVisible(maxVisible);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonClearOnShrinkChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setClearOnShrink(enabled);\n\t\t\t\t\t\tthis.ui.setClearOnShrink(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonShowTerminalProgressChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setShowTerminalProgress(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonWarningsChange: (warnings) => {\n\t\t\t\t\t\tthis.settingsManager.setWarnings(warnings);\n\t\t\t\t\t},\n\t\t\t\t\tonCancel: () => {\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector.getSettingsList() };\n\t\t});\n\t}\n\n\tprivate async handleModelCommand(searchTerm?: string): Promise<void> {\n\t\tif (!searchTerm) {\n\t\t\tthis.showModelSelector();\n\t\t\treturn;\n\t\t}\n\n\t\tconst model = await this.findExactModelMatch(searchTerm);\n\t\tif (model) {\n\t\t\ttry {\n\t\t\t\tawait this.session.setModel(model);\n\t\t\t\tthis.footer.invalidate();\n\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\tthis.showStatus(`Model: ${model.id}`);\n\t\t\t\tvoid this.maybeWarnAboutAnthropicSubscriptionAuth(model);\n\t\t\t\tthis.checkDaxnutsEasterEgg(model);\n\t\t\t} catch (error) {\n\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tthis.showModelSelector(searchTerm);\n\t}\n\n\tprivate async findExactModelMatch(searchTerm: string): Promise<Model<any> | undefined> {\n\t\tconst models = await this.getModelCandidates();\n\t\treturn findExactModelReferenceMatch(searchTerm, models);\n\t}\n\n\tprivate async getModelCandidates(): Promise<Model<any>[]> {\n\t\tif (this.session.scopedModels.length > 0) {\n\t\t\treturn this.session.scopedModels.map((scoped) => scoped.model);\n\t\t}\n\n\t\tthis.session.modelRegistry.refresh();\n\t\ttry {\n\t\t\treturn await this.session.modelRegistry.getAvailable();\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\t/** Update the footer's available provider count from current model candidates */\n\tprivate async updateAvailableProviderCount(): Promise<void> {\n\t\tconst models = await this.getModelCandidates();\n\t\tconst uniqueProviders = new Set(models.map((m) => m.provider));\n\t\tthis.footerDataProvider.setAvailableProviderCount(uniqueProviders.size);\n\t}\n\n\tprivate async maybeWarnAboutAnthropicSubscriptionAuth(\n\t\tmodel: Model<any> | undefined = this.session.model,\n\t): Promise<void> {\n\t\tif (this.settingsManager.getWarnings().anthropicExtraUsage === false) {\n\t\t\treturn;\n\t\t}\n\t\tif (this.anthropicSubscriptionWarningShown) {\n\t\t\treturn;\n\t\t}\n\t\tif (!model || model.provider !== \"anthropic\") {\n\t\t\treturn;\n\t\t}\n\n\t\tconst storedCredential = this.session.modelRegistry.authStorage.get(\"anthropic\");\n\t\tif (storedCredential?.type === \"oauth\") {\n\t\t\tthis.anthropicSubscriptionWarningShown = true;\n\t\t\tthis.showWarning(ANTHROPIC_SUBSCRIPTION_AUTH_WARNING);\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst apiKey = await this.session.modelRegistry.getApiKeyForProvider(model.provider);\n\t\t\tif (!isAnthropicSubscriptionAuthKey(apiKey)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.anthropicSubscriptionWarningShown = true;\n\t\t\tthis.showWarning(ANTHROPIC_SUBSCRIPTION_AUTH_WARNING);\n\t\t} catch {\n\t\t\t// Ignore auth lookup failures for warning-only checks.\n\t\t}\n\t}\n\n\tprivate showModelSelector(initialSearchInput?: string): void {\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new ModelSelectorComponent(\n\t\t\t\tthis.ui,\n\t\t\t\tthis.session.model,\n\t\t\t\tthis.settingsManager,\n\t\t\t\tthis.session.modelRegistry,\n\t\t\t\tthis.session.scopedModels,\n\t\t\t\tasync (model) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.session.setModel(model);\n\t\t\t\t\t\tthis.footer.invalidate();\n\t\t\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\tthis.showStatus(`Model: ${model.id}`);\n\t\t\t\t\t\tvoid this.maybeWarnAboutAnthropicSubscriptionAuth(model);\n\t\t\t\t\t\tthis.checkDaxnutsEasterEgg(model);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t\tinitialSearchInput,\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector };\n\t\t});\n\t}\n\n\tprivate async showModelsSelector(): Promise<void> {\n\t\t// Get all available models\n\t\tthis.session.modelRegistry.refresh();\n\t\tconst allModels = this.session.modelRegistry.getAvailable();\n\n\t\tif (allModels.length === 0) {\n\t\t\tthis.showStatus(\"No models available\");\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if session has scoped models (from previous session-only changes or CLI --models)\n\t\tconst sessionScopedModels = this.session.scopedModels;\n\t\tconst hasSessionScope = sessionScopedModels.length > 0;\n\n\t\t// Build enabled model IDs from session state or settings\n\t\tlet currentEnabledIds: string[] | null = null;\n\n\t\tif (hasSessionScope) {\n\t\t\t// Use current session's scoped models\n\t\t\tcurrentEnabledIds = sessionScopedModels.map((scoped) => `${scoped.model.provider}/${scoped.model.id}`);\n\t\t} else {\n\t\t\t// Fall back to settings\n\t\t\tconst patterns = this.settingsManager.getEnabledModels();\n\t\t\tif (patterns !== undefined && patterns.length > 0) {\n\t\t\t\tconst scopedModels = await resolveModelScope(patterns, this.session.modelRegistry);\n\t\t\t\tcurrentEnabledIds = scopedModels.map((scoped) => `${scoped.model.provider}/${scoped.model.id}`);\n\t\t\t}\n\t\t}\n\n\t\t// Helper to update session's scoped models (session-only, no persist)\n\t\tconst updateSessionModels = async (enabledIds: string[] | null) => {\n\t\t\tcurrentEnabledIds = enabledIds === null ? null : [...enabledIds];\n\t\t\tif (enabledIds && enabledIds.length > 0 && enabledIds.length < allModels.length) {\n\t\t\t\tconst newScopedModels = await resolveModelScope(enabledIds, this.session.modelRegistry);\n\t\t\t\tthis.session.setScopedModels(\n\t\t\t\t\tnewScopedModels.map((sm) => ({\n\t\t\t\t\t\tmodel: sm.model,\n\t\t\t\t\t\tthinkingLevel: sm.thinkingLevel,\n\t\t\t\t\t})),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// All enabled or none enabled = no filter\n\t\t\t\tthis.session.setScopedModels([]);\n\t\t\t}\n\t\t\tawait this.updateAvailableProviderCount();\n\t\t\tthis.ui.requestRender();\n\t\t};\n\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new ScopedModelsSelectorComponent(\n\t\t\t\t{\n\t\t\t\t\tallModels,\n\t\t\t\t\tenabledModelIds: currentEnabledIds,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tonChange: async (enabledIds) => {\n\t\t\t\t\t\tawait updateSessionModels(enabledIds);\n\t\t\t\t\t},\n\t\t\t\t\tonPersist: (enabledIds) => {\n\t\t\t\t\t\t// Persist to settings\n\t\t\t\t\t\tconst newPatterns =\n\t\t\t\t\t\t\tenabledIds === null || enabledIds.length === allModels.length\n\t\t\t\t\t\t\t\t? undefined // All enabled = clear filter\n\t\t\t\t\t\t\t\t: enabledIds;\n\t\t\t\t\t\tthis.settingsManager.setEnabledModels(newPatterns ? [...newPatterns] : undefined);\n\t\t\t\t\t\tthis.showStatus(\"Model selection saved to settings\");\n\t\t\t\t\t},\n\t\t\t\t\tonCancel: () => {\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector };\n\t\t});\n\t}\n\n\tprivate showUserMessageSelector(): void {\n\t\tconst userMessages = this.session.getUserMessagesForForking();\n\n\t\tif (userMessages.length === 0) {\n\t\t\tthis.showStatus(\"No messages to fork from\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst initialSelectedId = userMessages[userMessages.length - 1]?.entryId;\n\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new UserMessageSelectorComponent(\n\t\t\t\tuserMessages.map((m) => ({ id: m.entryId, text: m.text })),\n\t\t\t\tasync (entryId) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await this.runtimeHost.fork(entryId);\n\t\t\t\t\t\tif (result.cancelled) {\n\t\t\t\t\t\t\tdone();\n\t\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.renderCurrentSessionState();\n\t\t\t\t\t\tthis.editor.setText(result.selectedText ?? \"\");\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\tthis.showStatus(\"Forked to new session\");\n\t\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t\tinitialSelectedId,\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector.getMessageList() };\n\t\t});\n\t}\n\n\tprivate async handleCloneCommand(): Promise<void> {\n\t\tconst leafId = this.sessionManager.getLeafId();\n\t\tif (!leafId) {\n\t\t\tthis.showStatus(\"Nothing to clone yet\");\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst result = await this.runtimeHost.fork(leafId, { position: \"at\" });\n\t\t\tif (result.cancelled) {\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.renderCurrentSessionState();\n\t\t\tthis.editor.setText(\"\");\n\t\t\tthis.showStatus(\"Cloned to new session\");\n\t\t} catch (error: unknown) {\n\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t}\n\t}\n\n\tprivate showTreeSelector(initialSelectedId?: string): void {\n\t\tconst tree = this.sessionManager.getTree();\n\t\tconst realLeafId = this.sessionManager.getLeafId();\n\t\tconst initialFilterMode = this.settingsManager.getTreeFilterMode();\n\n\t\tif (tree.length === 0) {\n\t\t\tthis.showStatus(\"No entries in session\");\n\t\t\treturn;\n\t\t}\n\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new TreeSelectorComponent(\n\t\t\t\ttree,\n\t\t\t\trealLeafId,\n\t\t\t\tthis.ui.terminal.rows,\n\t\t\t\tasync (entryId) => {\n\t\t\t\t\t// Selecting the current leaf is a no-op (already there)\n\t\t\t\t\tif (entryId === realLeafId) {\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\tthis.showStatus(\"Already at this point\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Ask about summarization\n\t\t\t\t\tdone(); // Close selector first\n\n\t\t\t\t\t// Loop until user makes a complete choice or cancels to tree\n\t\t\t\t\tlet wantsSummary = false;\n\t\t\t\t\tlet customInstructions: string | undefined;\n\n\t\t\t\t\t// Check if we should skip the prompt (user preference to always default to no summary)\n\t\t\t\t\tif (!this.settingsManager.getBranchSummarySkipPrompt()) {\n\t\t\t\t\t\twhile (true) {\n\t\t\t\t\t\t\tconst summaryChoice = await this.showExtensionSelector(\"Summarize branch?\", [\n\t\t\t\t\t\t\t\t\"No summary\",\n\t\t\t\t\t\t\t\t\"Summarize\",\n\t\t\t\t\t\t\t\t\"Summarize with custom prompt\",\n\t\t\t\t\t\t\t]);\n\n\t\t\t\t\t\t\tif (summaryChoice === undefined) {\n\t\t\t\t\t\t\t\t// User pressed escape - re-show tree selector with same selection\n\t\t\t\t\t\t\t\tthis.showTreeSelector(entryId);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\twantsSummary = summaryChoice !== \"No summary\";\n\n\t\t\t\t\t\t\tif (summaryChoice === \"Summarize with custom prompt\") {\n\t\t\t\t\t\t\t\tcustomInstructions = await this.showExtensionEditor(\"Custom summarization instructions\");\n\t\t\t\t\t\t\t\tif (customInstructions === undefined) {\n\t\t\t\t\t\t\t\t\t// User cancelled - loop back to summary selector\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// User made a complete choice\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set up escape handler and loader if summarizing\n\t\t\t\t\tlet summaryLoader: Loader | undefined;\n\t\t\t\t\tconst originalOnEscape = this.defaultEditor.onEscape;\n\n\t\t\t\t\tif (wantsSummary) {\n\t\t\t\t\t\tthis.defaultEditor.onEscape = () => {\n\t\t\t\t\t\t\tthis.session.abortBranchSummary();\n\t\t\t\t\t\t};\n\t\t\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\t\t\tsummaryLoader = new Loader(\n\t\t\t\t\t\t\tthis.ui,\n\t\t\t\t\t\t\t(spinner) => theme.fg(\"accent\", spinner),\n\t\t\t\t\t\t\t(text) => theme.fg(\"muted\", text),\n\t\t\t\t\t\t\t`Summarizing branch... (${keyText(\"app.interrupt\")} to cancel)`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.statusContainer.addChild(summaryLoader);\n\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await this.session.navigateTree(entryId, {\n\t\t\t\t\t\t\tsummarize: wantsSummary,\n\t\t\t\t\t\t\tcustomInstructions,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (result.aborted) {\n\t\t\t\t\t\t\t// Summarization aborted - re-show tree selector with same selection\n\t\t\t\t\t\t\tthis.showStatus(\"Branch summarization cancelled\");\n\t\t\t\t\t\t\tthis.showTreeSelector(entryId);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (result.cancelled) {\n\t\t\t\t\t\t\tthis.showStatus(\"Navigation cancelled\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Update UI\n\t\t\t\t\t\tthis.chatContainer.clear();\n\t\t\t\t\t\tthis.renderInitialMessages();\n\t\t\t\t\t\tif (result.editorText && !this.editor.getText().trim()) {\n\t\t\t\t\t\t\tthis.editor.setText(result.editorText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.showStatus(\"Navigated to selected point\");\n\t\t\t\t\t\tvoid this.flushCompactionQueue({ willRetry: false });\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif (summaryLoader) {\n\t\t\t\t\t\t\tsummaryLoader.stop();\n\t\t\t\t\t\t\tthis.statusContainer.clear();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.defaultEditor.onEscape = originalOnEscape;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t\t(entryId, label) => {\n\t\t\t\t\tthis.sessionManager.appendLabelChange(entryId, label);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t\tinitialSelectedId,\n\t\t\t\tinitialFilterMode,\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector };\n\t\t});\n\t}\n\n\tprivate showSessionSelector(): void {\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new SessionSelectorComponent(\n\t\t\t\t(onProgress) =>\n\t\t\t\t\tSessionManager.list(this.sessionManager.getCwd(), this.sessionManager.getSessionDir(), onProgress),\n\t\t\t\tSessionManager.listAll,\n\t\t\t\tasync (sessionPath) => {\n\t\t\t\t\tdone();\n\t\t\t\t\tawait this.handleResumeSession(sessionPath);\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tvoid this.shutdown();\n\t\t\t\t},\n\t\t\t\t() => this.ui.requestRender(),\n\t\t\t\t{\n\t\t\t\t\trenameSession: async (sessionFilePath: string, nextName: string | undefined) => {\n\t\t\t\t\t\tconst next = (nextName ?? \"\").trim();\n\t\t\t\t\t\tif (!next) return;\n\t\t\t\t\t\tconst mgr = SessionManager.open(sessionFilePath);\n\t\t\t\t\t\tmgr.appendSessionInfo(next);\n\t\t\t\t\t},\n\t\t\t\t\tshowRenameHint: true,\n\t\t\t\t\tkeybindings: this.keybindings,\n\t\t\t\t},\n\n\t\t\t\tthis.sessionManager.getSessionFile(),\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector };\n\t\t});\n\t}\n\n\tprivate async handleResumeSession(\n\t\tsessionPath: string,\n\t\toptions?: Parameters<ExtensionCommandContext[\"switchSession\"]>[1],\n\t): Promise<{ cancelled: boolean }> {\n\t\tif (this.loadingAnimation) {\n\t\t\tthis.loadingAnimation.stop();\n\t\t\tthis.loadingAnimation = undefined;\n\t\t}\n\t\tthis.statusContainer.clear();\n\t\ttry {\n\t\t\tconst result = await this.runtimeHost.switchSession(sessionPath, {\n\t\t\t\twithSession: options?.withSession,\n\t\t\t});\n\t\t\tif (result.cancelled) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tthis.renderCurrentSessionState();\n\t\t\tthis.showStatus(\"Resumed session\");\n\t\t\treturn result;\n\t\t} catch (error: unknown) {\n\t\t\tif (error instanceof MissingSessionCwdError) {\n\t\t\t\tconst selectedCwd = await this.promptForMissingSessionCwd(error);\n\t\t\t\tif (!selectedCwd) {\n\t\t\t\t\tthis.showStatus(\"Resume cancelled\");\n\t\t\t\t\treturn { cancelled: true };\n\t\t\t\t}\n\t\t\t\tconst result = await this.runtimeHost.switchSession(sessionPath, {\n\t\t\t\t\tcwdOverride: selectedCwd,\n\t\t\t\t\twithSession: options?.withSession,\n\t\t\t\t});\n\t\t\t\tif (result.cancelled) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t\tthis.renderCurrentSessionState();\n\t\t\t\tthis.showStatus(\"Resumed session in current cwd\");\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\treturn this.handleFatalRuntimeError(\"Failed to resume session\", error);\n\t\t}\n\t}\n\n\tprivate getLoginProviderOptions(authType?: \"oauth\" | \"api_key\"): AuthSelectorProvider[] {\n\t\tconst authStorage = this.session.modelRegistry.authStorage;\n\t\tconst oauthProviders = authStorage.getOAuthProviders();\n\t\tconst oauthProviderIds = new Set(oauthProviders.map((provider) => provider.id));\n\t\tconst options: AuthSelectorProvider[] = oauthProviders.map((provider) => ({\n\t\t\tid: provider.id,\n\t\t\tname: provider.name,\n\t\t\tauthType: \"oauth\",\n\t\t}));\n\n\t\tconst modelProviders = new Set(this.session.modelRegistry.getAll().map((model) => model.provider));\n\t\tfor (const providerId of modelProviders) {\n\t\t\tif (!isApiKeyLoginProvider(providerId, oauthProviderIds)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\toptions.push({\n\t\t\t\tid: providerId,\n\t\t\t\tname: this.session.modelRegistry.getProviderDisplayName(providerId),\n\t\t\t\tauthType: \"api_key\",\n\t\t\t});\n\t\t}\n\n\t\tconst filteredOptions = authType ? options.filter((option) => option.authType === authType) : options;\n\t\treturn filteredOptions.sort((a, b) => a.name.localeCompare(b.name));\n\t}\n\n\tprivate getLogoutProviderOptions(): AuthSelectorProvider[] {\n\t\tconst authStorage = this.session.modelRegistry.authStorage;\n\t\tconst options: AuthSelectorProvider[] = [];\n\n\t\tfor (const providerId of authStorage.list()) {\n\t\t\tconst credential = authStorage.get(providerId);\n\t\t\tif (!credential) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\toptions.push({\n\t\t\t\tid: providerId,\n\t\t\t\tname: this.session.modelRegistry.getProviderDisplayName(providerId),\n\t\t\t\tauthType: credential.type,\n\t\t\t});\n\t\t}\n\n\t\treturn options.sort((a, b) => a.name.localeCompare(b.name));\n\t}\n\n\tprivate showLoginAuthTypeSelector(): void {\n\t\tconst subscriptionLabel = \"Use a subscription\";\n\t\tconst apiKeyLabel = \"Use an API key\";\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new ExtensionSelectorComponent(\n\t\t\t\t\"Select authentication method:\",\n\t\t\t\t[subscriptionLabel, apiKeyLabel],\n\t\t\t\t(option) => {\n\t\t\t\t\tdone();\n\t\t\t\t\tconst authType = option === subscriptionLabel ? \"oauth\" : \"api_key\";\n\t\t\t\t\tthis.showLoginProviderSelector(authType);\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector };\n\t\t});\n\t}\n\n\tprivate showLoginProviderSelector(authType: \"oauth\" | \"api_key\"): void {\n\t\tconst providerOptions = this.getLoginProviderOptions(authType);\n\t\tif (providerOptions.length === 0) {\n\t\t\tthis.showStatus(\n\t\t\t\tauthType === \"oauth\" ? \"No subscription providers available.\" : \"No API key providers available.\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new OAuthSelectorComponent(\n\t\t\t\t\"login\",\n\t\t\t\tthis.session.modelRegistry.authStorage,\n\t\t\t\tproviderOptions,\n\t\t\t\tasync (providerId: string) => {\n\t\t\t\t\tdone();\n\n\t\t\t\t\tconst providerOption = providerOptions.find((provider) => provider.id === providerId);\n\t\t\t\t\tif (!providerOption) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (providerOption.authType === \"oauth\") {\n\t\t\t\t\t\tawait this.showLoginDialog(providerOption.id, providerOption.name);\n\t\t\t\t\t} else if (providerOption.id === BEDROCK_PROVIDER_ID) {\n\t\t\t\t\t\tthis.showBedrockSetupDialog(providerOption.id, providerOption.name);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tawait this.showApiKeyLoginDialog(providerOption.id, providerOption.name);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.showLoginAuthTypeSelector();\n\t\t\t\t},\n\t\t\t\t(providerId) => this.session.modelRegistry.getProviderAuthStatus(providerId),\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector };\n\t\t});\n\t}\n\n\tprivate async showOAuthSelector(mode: \"login\" | \"logout\"): Promise<void> {\n\t\tif (mode === \"login\") {\n\t\t\tthis.showLoginAuthTypeSelector();\n\t\t\treturn;\n\t\t}\n\n\t\tconst providerOptions = this.getLogoutProviderOptions();\n\t\tif (providerOptions.length === 0) {\n\t\t\tthis.showStatus(\n\t\t\t\t\"No stored credentials to remove. /logout only removes credentials saved by /login; environment variables and models.json config are unchanged.\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new OAuthSelectorComponent(\n\t\t\t\tmode,\n\t\t\t\tthis.session.modelRegistry.authStorage,\n\t\t\t\tproviderOptions,\n\t\t\t\tasync (providerId: string) => {\n\t\t\t\t\tdone();\n\n\t\t\t\t\tconst providerOption = providerOptions.find((provider) => provider.id === providerId);\n\t\t\t\t\tif (!providerOption) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.session.modelRegistry.authStorage.logout(providerOption.id);\n\t\t\t\t\t\tthis.session.modelRegistry.refresh();\n\t\t\t\t\t\tawait this.updateAvailableProviderCount();\n\t\t\t\t\t\tconst message =\n\t\t\t\t\t\t\tproviderOption.authType === \"oauth\"\n\t\t\t\t\t\t\t\t? `Logged out of ${providerOption.name}`\n\t\t\t\t\t\t\t\t: `Removed stored API key for ${providerOption.name}. Environment variables and models.json config are unchanged.`;\n\t\t\t\t\t\tthis.showStatus(message);\n\t\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\t\tthis.showError(`Logout failed: ${error instanceof Error ? error.message : String(error)}`);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector };\n\t\t});\n\t}\n\n\tprivate async completeProviderAuthentication(\n\t\tproviderId: string,\n\t\tproviderName: string,\n\t\tauthType: \"oauth\" | \"api_key\",\n\t\tpreviousModel: Model<any> | undefined,\n\t): Promise<void> {\n\t\tthis.session.modelRegistry.refresh();\n\n\t\tconst actionLabel = authType === \"oauth\" ? `Logged in to ${providerName}` : `Saved API key for ${providerName}`;\n\n\t\tlet selectedModel: Model<any> | undefined;\n\t\tlet selectionError: string | undefined;\n\t\tif (isUnknownModel(previousModel)) {\n\t\t\tconst availableModels = this.session.modelRegistry.getAvailable();\n\t\t\tconst providerModels = availableModels.filter((model) => model.provider === providerId);\n\t\t\tif (!hasDefaultModelProvider(providerId)) {\n\t\t\t\tselectionError = `${actionLabel}, but no default model is configured for provider \"${providerId}\". Use /model to select a model.`;\n\t\t\t} else if (providerModels.length === 0) {\n\t\t\t\tselectionError = `${actionLabel}, but no models are available for that provider. Use /model to select a model.`;\n\t\t\t} else {\n\t\t\t\tconst defaultModelId = defaultModelPerProvider[providerId];\n\t\t\t\tselectedModel = providerModels.find((model) => model.id === defaultModelId);\n\t\t\t\tif (!selectedModel) {\n\t\t\t\t\tselectionError = `${actionLabel}, but its default model \"${defaultModelId}\" is not available. Use /model to select a model.`;\n\t\t\t\t} else {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.session.setModel(selectedModel);\n\t\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\t\tselectedModel = undefined;\n\t\t\t\t\t\tconst errorMessage = error instanceof Error ? error.message : String(error);\n\t\t\t\t\t\tselectionError = `${actionLabel}, but selecting its default model failed: ${errorMessage}. Use /model to select a model.`;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tawait this.updateAvailableProviderCount();\n\t\tthis.footer.invalidate();\n\t\tthis.updateEditorBorderColor();\n\t\tif (selectedModel) {\n\t\t\tthis.showStatus(`${actionLabel}. Selected ${selectedModel.id}. Credentials saved to ${getAuthPath()}`);\n\t\t\tvoid this.maybeWarnAboutAnthropicSubscriptionAuth(selectedModel);\n\t\t\tthis.checkDaxnutsEasterEgg(selectedModel);\n\t\t} else {\n\t\t\tthis.showStatus(`${actionLabel}. Credentials saved to ${getAuthPath()}`);\n\t\t\tif (selectionError) {\n\t\t\t\tthis.showError(selectionError);\n\t\t\t} else {\n\t\t\t\tvoid this.maybeWarnAboutAnthropicSubscriptionAuth();\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate showBedrockSetupDialog(providerId: string, providerName: string): void {\n\t\tconst restoreEditor = () => {\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(this.editor);\n\t\t\tthis.ui.setFocus(this.editor);\n\t\t\tthis.ui.requestRender();\n\t\t};\n\n\t\tconst dialog = new LoginDialogComponent(\n\t\t\tthis.ui,\n\t\t\tproviderId,\n\t\t\t() => restoreEditor(),\n\t\t\tproviderName,\n\t\t\t\"Amazon Bedrock setup\",\n\t\t);\n\t\tdialog.showInfo([\n\t\t\ttheme.fg(\"text\", \"Amazon Bedrock uses AWS credentials instead of a single API key.\"),\n\t\t\ttheme.fg(\"text\", \"Configure an AWS profile, IAM keys, bearer token, or role-based credentials.\"),\n\t\t\ttheme.fg(\"muted\", \"See:\"),\n\t\t\ttheme.fg(\"accent\", ` ${path.join(getDocsPath(), \"providers.md\")}`),\n\t\t]);\n\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(dialog);\n\t\tthis.ui.setFocus(dialog);\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate async showApiKeyLoginDialog(providerId: string, providerName: string): Promise<void> {\n\t\tconst previousModel = this.session.model;\n\n\t\tconst dialog = new LoginDialogComponent(\n\t\t\tthis.ui,\n\t\t\tproviderId,\n\t\t\t(_success, _message) => {\n\t\t\t\t// Completion handled below\n\t\t\t},\n\t\t\tproviderName,\n\t\t);\n\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(dialog);\n\t\tthis.ui.setFocus(dialog);\n\t\tthis.ui.requestRender();\n\n\t\tconst restoreEditor = () => {\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(this.editor);\n\t\t\tthis.ui.setFocus(this.editor);\n\t\t\tthis.ui.requestRender();\n\t\t};\n\n\t\ttry {\n\t\t\tconst apiKey = (await dialog.showPrompt(\"Enter API key:\")).trim();\n\t\t\tif (!apiKey) {\n\t\t\t\tthrow new Error(\"API key cannot be empty.\");\n\t\t\t}\n\n\t\t\tthis.session.modelRegistry.authStorage.set(providerId, { type: \"api_key\", key: apiKey });\n\n\t\t\trestoreEditor();\n\t\t\tawait this.completeProviderAuthentication(providerId, providerName, \"api_key\", previousModel);\n\t\t} catch (error: unknown) {\n\t\t\trestoreEditor();\n\t\t\tconst errorMsg = error instanceof Error ? error.message : String(error);\n\t\t\tif (errorMsg !== \"Login cancelled\") {\n\t\t\t\tthis.showError(`Failed to save API key for ${providerName}: ${errorMsg}`);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate showOAuthLoginSelect(dialog: LoginDialogComponent, prompt: OAuthSelectPrompt): Promise<string | undefined> {\n\t\treturn new Promise((resolve) => {\n\t\t\tconst restoreDialog = () => {\n\t\t\t\tthis.editorContainer.clear();\n\t\t\t\tthis.editorContainer.addChild(dialog);\n\t\t\t\tthis.ui.setFocus(dialog);\n\t\t\t\tthis.ui.requestRender();\n\t\t\t};\n\t\t\tconst labels = prompt.options.map((option) => option.label);\n\t\t\tconst selector = new ExtensionSelectorComponent(\n\t\t\t\tprompt.message,\n\t\t\t\tlabels,\n\t\t\t\t(optionLabel) => {\n\t\t\t\t\trestoreDialog();\n\t\t\t\t\tresolve(prompt.options.find((option) => option.label === optionLabel)?.id);\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\trestoreDialog();\n\t\t\t\t\tresolve(undefined);\n\t\t\t\t},\n\t\t\t);\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(selector);\n\t\t\tthis.ui.setFocus(selector);\n\t\t\tthis.ui.requestRender();\n\t\t});\n\t}\n\n\tprivate async showLoginDialog(providerId: string, providerName: string): Promise<void> {\n\t\tconst providerInfo = this.session.modelRegistry.authStorage\n\t\t\t.getOAuthProviders()\n\t\t\t.find((provider) => provider.id === providerId);\n\t\tconst previousModel = this.session.model;\n\n\t\t// Providers that use callback servers (can paste redirect URL)\n\t\tconst usesCallbackServer = providerInfo?.usesCallbackServer ?? false;\n\n\t\t// Create login dialog component\n\t\tconst dialog = new LoginDialogComponent(\n\t\t\tthis.ui,\n\t\t\tproviderId,\n\t\t\t(_success, _message) => {\n\t\t\t\t// Completion handled below\n\t\t\t},\n\t\t\tproviderName,\n\t\t);\n\n\t\t// Show dialog in editor container\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(dialog);\n\t\tthis.ui.setFocus(dialog);\n\t\tthis.ui.requestRender();\n\n\t\t// Promise for manual code input (racing with callback server)\n\t\tlet manualCodeResolve: ((code: string) => void) | undefined;\n\t\tlet manualCodeReject: ((err: Error) => void) | undefined;\n\t\tconst manualCodePromise = new Promise<string>((resolve, reject) => {\n\t\t\tmanualCodeResolve = resolve;\n\t\t\tmanualCodeReject = reject;\n\t\t});\n\n\t\t// Restore editor helper\n\t\tconst restoreEditor = () => {\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(this.editor);\n\t\t\tthis.ui.setFocus(this.editor);\n\t\t\tthis.ui.requestRender();\n\t\t};\n\n\t\ttry {\n\t\t\tawait this.session.modelRegistry.authStorage.login(providerId as OAuthProviderId, {\n\t\t\t\tonAuth: (info: { url: string; instructions?: string }) => {\n\t\t\t\t\tdialog.showAuth(info.url, info.instructions);\n\n\t\t\t\t\tif (usesCallbackServer) {\n\t\t\t\t\t\t// Show input for manual paste, racing with callback\n\t\t\t\t\t\tdialog\n\t\t\t\t\t\t\t.showManualInput(\"Paste redirect URL below, or complete login in browser:\")\n\t\t\t\t\t\t\t.then((value) => {\n\t\t\t\t\t\t\t\tif (value && manualCodeResolve) {\n\t\t\t\t\t\t\t\t\tmanualCodeResolve(value);\n\t\t\t\t\t\t\t\t\tmanualCodeResolve = undefined;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t\t\tif (manualCodeReject) {\n\t\t\t\t\t\t\t\t\tmanualCodeReject(new Error(\"Login cancelled\"));\n\t\t\t\t\t\t\t\t\tmanualCodeReject = undefined;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t} else if (providerId === \"github-copilot\") {\n\t\t\t\t\t\t// GitHub Copilot polls after onAuth\n\t\t\t\t\t\tdialog.showWaiting(\"Waiting for browser authentication...\");\n\t\t\t\t\t}\n\t\t\t\t\t// For Anthropic: onPrompt is called immediately after\n\t\t\t\t},\n\n\t\t\t\tonPrompt: async (prompt: { message: string; placeholder?: string }) => {\n\t\t\t\t\treturn dialog.showPrompt(prompt.message, prompt.placeholder);\n\t\t\t\t},\n\n\t\t\t\tonProgress: (message: string) => {\n\t\t\t\t\tdialog.showProgress(message);\n\t\t\t\t},\n\n\t\t\t\tonSelect: (prompt: OAuthSelectPrompt) => this.showOAuthLoginSelect(dialog, prompt),\n\n\t\t\t\tonManualCodeInput: () => manualCodePromise,\n\n\t\t\t\tsignal: dialog.signal,\n\t\t\t});\n\n\t\t\t// Success\n\t\t\trestoreEditor();\n\t\t\tawait this.completeProviderAuthentication(providerId, providerName, \"oauth\", previousModel);\n\t\t} catch (error: unknown) {\n\t\t\trestoreEditor();\n\t\t\tconst errorMsg = error instanceof Error ? error.message : String(error);\n\t\t\tif (errorMsg !== \"Login cancelled\") {\n\t\t\t\tthis.showError(`Failed to login to ${providerName}: ${errorMsg}`);\n\t\t\t}\n\t\t}\n\t}\n\n\t// =========================================================================\n\t// Command handlers\n\t// =========================================================================\n\n\tprivate async handleReloadCommand(): Promise<void> {\n\t\tif (this.session.isStreaming) {\n\t\t\tthis.showWarning(\"Wait for the current response to finish before reloading.\");\n\t\t\treturn;\n\t\t}\n\t\tif (this.session.isCompacting) {\n\t\t\tthis.showWarning(\"Wait for compaction to finish before reloading.\");\n\t\t\treturn;\n\t\t}\n\n\t\tthis.resetExtensionUI();\n\n\t\tconst reloadBox = new Container();\n\t\tconst borderColor = (s: string) => theme.fg(\"border\", s);\n\t\treloadBox.addChild(new DynamicBorder(borderColor));\n\t\treloadBox.addChild(new Spacer(1));\n\t\treloadBox.addChild(\n\t\t\tnew Text(theme.fg(\"muted\", \"Reloading keybindings, extensions, skills, prompts, themes...\"), 1, 0),\n\t\t);\n\t\treloadBox.addChild(new Spacer(1));\n\t\treloadBox.addChild(new DynamicBorder(borderColor));\n\n\t\tconst previousEditor = this.editor;\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(reloadBox);\n\t\tthis.ui.setFocus(reloadBox);\n\t\tthis.ui.requestRender(true);\n\t\tawait new Promise((resolve) => process.nextTick(resolve));\n\n\t\tconst dismissReloadBox = (editor: Component) => {\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(editor);\n\t\t\tthis.ui.setFocus(editor);\n\t\t\tthis.ui.requestRender();\n\t\t};\n\n\t\ttry {\n\t\t\tawait this.session.reload();\n\t\t\tthis.keybindings.reload();\n\t\t\tconst activeHeader = this.customHeader ?? this.builtInHeader;\n\t\t\tif (isExpandable(activeHeader)) {\n\t\t\t\tactiveHeader.setExpanded(this.toolOutputExpanded);\n\t\t\t}\n\t\t\tsetRegisteredThemes(this.session.resourceLoader.getThemes().themes);\n\t\t\tthis.hideThinkingBlock = this.settingsManager.getHideThinkingBlock();\n\t\t\tconst themeName = this.settingsManager.getTheme();\n\t\t\tconst themeResult = themeName ? setTheme(themeName, true) : { success: true };\n\t\t\tif (!themeResult.success) {\n\t\t\t\tthis.showError(`Failed to load theme \"${themeName}\": ${themeResult.error}\\nFell back to dark theme.`);\n\t\t\t}\n\t\t\tconst editorPaddingX = this.settingsManager.getEditorPaddingX();\n\t\t\tconst autocompleteMaxVisible = this.settingsManager.getAutocompleteMaxVisible();\n\t\t\tthis.defaultEditor.setPaddingX(editorPaddingX);\n\t\t\tthis.defaultEditor.setAutocompleteMaxVisible(autocompleteMaxVisible);\n\t\t\tif (this.editor !== this.defaultEditor) {\n\t\t\t\tthis.editor.setPaddingX?.(editorPaddingX);\n\t\t\t\tthis.editor.setAutocompleteMaxVisible?.(autocompleteMaxVisible);\n\t\t\t}\n\t\t\tthis.ui.setShowHardwareCursor(this.settingsManager.getShowHardwareCursor());\n\t\t\tthis.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());\n\t\t\tthis.setupAutocompleteProvider();\n\t\t\tconst runner = this.session.extensionRunner;\n\t\t\tthis.setupExtensionShortcuts(runner);\n\t\t\tthis.rebuildChatFromMessages();\n\t\t\tdismissReloadBox(this.editor as Component);\n\t\t\tthis.showLoadedResources({\n\t\t\t\tforce: false,\n\t\t\t\tshowDiagnosticsWhenQuiet: true,\n\t\t\t});\n\t\t\tconst modelsJsonError = this.session.modelRegistry.getError();\n\t\t\tif (modelsJsonError) {\n\t\t\t\tthis.showError(`models.json error: ${modelsJsonError}`);\n\t\t\t}\n\t\t\tthis.showStatus(\"Reloaded keybindings, extensions, skills, prompts, themes\");\n\t\t} catch (error) {\n\t\t\tdismissReloadBox(previousEditor as Component);\n\t\t\tthis.showError(`Reload failed: ${error instanceof Error ? error.message : String(error)}`);\n\t\t}\n\t}\n\n\tprivate async handleExportCommand(text: string): Promise<void> {\n\t\tconst outputPath = this.getPathCommandArgument(text, \"/export\");\n\n\t\ttry {\n\t\t\tif (outputPath?.endsWith(\".jsonl\")) {\n\t\t\t\tconst filePath = this.session.exportToJsonl(outputPath);\n\t\t\t\tthis.showStatus(`Session exported to: ${filePath}`);\n\t\t\t} else {\n\t\t\t\tconst filePath = await this.session.exportToHtml(outputPath);\n\t\t\t\tthis.showStatus(`Session exported to: ${filePath}`);\n\t\t\t}\n\t\t} catch (error: unknown) {\n\t\t\tthis.showError(`Failed to export session: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n\t\t}\n\t}\n\n\tprivate getPathCommandArgument(text: string, command: \"/export\" | \"/import\"): string | undefined {\n\t\tif (text === command) {\n\t\t\treturn undefined;\n\t\t}\n\t\tif (!text.startsWith(`${command} `)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst argsString = text.slice(command.length + 1).trimStart();\n\t\tif (!argsString) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst firstChar = argsString[0];\n\t\tif (firstChar === '\"' || firstChar === \"'\") {\n\t\t\tconst closingQuoteIndex = argsString.indexOf(firstChar, 1);\n\t\t\tif (closingQuoteIndex < 0) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\treturn argsString.slice(1, closingQuoteIndex);\n\t\t}\n\n\t\tconst firstWhitespaceIndex = argsString.search(/\\s/);\n\t\tif (firstWhitespaceIndex < 0) {\n\t\t\treturn argsString;\n\t\t}\n\t\treturn argsString.slice(0, firstWhitespaceIndex);\n\t}\n\n\tprivate async handleImportCommand(text: string): Promise<void> {\n\t\tconst inputPath = this.getPathCommandArgument(text, \"/import\");\n\t\tif (!inputPath) {\n\t\t\tthis.showError(\"Usage: /import <path.jsonl>\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst confirmed = await this.showExtensionConfirm(\"Import session\", `Replace current session with ${inputPath}?`);\n\t\tif (!confirmed) {\n\t\t\tthis.showStatus(\"Import cancelled\");\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tif (this.loadingAnimation) {\n\t\t\t\tthis.loadingAnimation.stop();\n\t\t\t\tthis.loadingAnimation = undefined;\n\t\t\t}\n\t\t\tthis.statusContainer.clear();\n\t\t\tconst result = await this.runtimeHost.importFromJsonl(inputPath);\n\t\t\tif (result.cancelled) {\n\t\t\t\tthis.showStatus(\"Import cancelled\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.renderCurrentSessionState();\n\t\t\tthis.showStatus(`Session imported from: ${inputPath}`);\n\t\t} catch (error: unknown) {\n\t\t\tif (error instanceof MissingSessionCwdError) {\n\t\t\t\tconst selectedCwd = await this.promptForMissingSessionCwd(error);\n\t\t\t\tif (!selectedCwd) {\n\t\t\t\t\tthis.showStatus(\"Import cancelled\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst result = await this.runtimeHost.importFromJsonl(inputPath, selectedCwd);\n\t\t\t\tif (result.cancelled) {\n\t\t\t\t\tthis.showStatus(\"Import cancelled\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.renderCurrentSessionState();\n\t\t\t\tthis.showStatus(`Session imported from: ${inputPath}`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (error instanceof SessionImportFileNotFoundError) {\n\t\t\t\tthis.showError(`Failed to import session: ${error.message}`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait this.handleFatalRuntimeError(\"Failed to import session\", error);\n\t\t}\n\t}\n\n\tprivate async handleShareCommand(): Promise<void> {\n\t\t// Check if gh is available and logged in\n\t\ttry {\n\t\t\tconst authResult = spawnSync(\"gh\", [\"auth\", \"status\"], { encoding: \"utf-8\" });\n\t\t\tif (authResult.status !== 0) {\n\t\t\t\tthis.showError(\"GitHub CLI is not logged in. Run 'gh auth login' first.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t} catch {\n\t\t\tthis.showError(\"GitHub CLI (gh) is not installed. Install it from https://cli.github.com/\");\n\t\t\treturn;\n\t\t}\n\n\t\t// Export to a temp file\n\t\tconst tmpFile = path.join(os.tmpdir(), \"session.html\");\n\t\ttry {\n\t\t\tawait this.session.exportToHtml(tmpFile);\n\t\t} catch (error: unknown) {\n\t\t\tthis.showError(`Failed to export session: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n\t\t\treturn;\n\t\t}\n\n\t\t// Show cancellable loader, replacing the editor\n\t\tconst loader = new BorderedLoader(this.ui, theme, \"Creating gist...\");\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(loader);\n\t\tthis.ui.setFocus(loader);\n\t\tthis.ui.requestRender();\n\n\t\tconst restoreEditor = () => {\n\t\t\tloader.dispose();\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(this.editor);\n\t\t\tthis.ui.setFocus(this.editor);\n\t\t\ttry {\n\t\t\t\tfs.unlinkSync(tmpFile);\n\t\t\t} catch {\n\t\t\t\t// Ignore cleanup errors\n\t\t\t}\n\t\t};\n\n\t\t// Create a secret gist asynchronously\n\t\tlet proc: ReturnType<typeof spawn> | null = null;\n\n\t\tloader.onAbort = () => {\n\t\t\tproc?.kill();\n\t\t\trestoreEditor();\n\t\t\tthis.showStatus(\"Share cancelled\");\n\t\t};\n\n\t\ttry {\n\t\t\tconst result = await new Promise<{ stdout: string; stderr: string; code: number | null }>((resolve) => {\n\t\t\t\tproc = spawn(\"gh\", [\"gist\", \"create\", \"--public=false\", tmpFile]);\n\t\t\t\tlet stdout = \"\";\n\t\t\t\tlet stderr = \"\";\n\t\t\t\tproc.stdout?.on(\"data\", (data) => {\n\t\t\t\t\tstdout += data.toString();\n\t\t\t\t});\n\t\t\t\tproc.stderr?.on(\"data\", (data) => {\n\t\t\t\t\tstderr += data.toString();\n\t\t\t\t});\n\t\t\t\tproc.on(\"close\", (code) => resolve({ stdout, stderr, code }));\n\t\t\t});\n\n\t\t\tif (loader.signal.aborted) return;\n\n\t\t\trestoreEditor();\n\n\t\t\tif (result.code !== 0) {\n\t\t\t\tconst errorMsg = result.stderr?.trim() || \"Unknown error\";\n\t\t\t\tthis.showError(`Failed to create gist: ${errorMsg}`);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Extract gist ID from the URL returned by gh\n\t\t\t// gh returns something like: https://gist.github.com/username/GIST_ID\n\t\t\tconst gistUrl = result.stdout?.trim();\n\t\t\tconst gistId = gistUrl?.split(\"/\").pop();\n\t\t\tif (!gistId) {\n\t\t\t\tthis.showError(\"Failed to parse gist ID from gh output\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Create the preview URL\n\t\t\tconst previewUrl = getShareViewerUrl(gistId);\n\t\t\tthis.showStatus(`Share URL: ${previewUrl}\\nGist: ${gistUrl}`);\n\t\t} catch (error: unknown) {\n\t\t\tif (!loader.signal.aborted) {\n\t\t\t\trestoreEditor();\n\t\t\t\tthis.showError(`Failed to create gist: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async handleCopyCommand(): Promise<void> {\n\t\tconst text = this.session.getLastAssistantText();\n\t\tif (!text) {\n\t\t\tthis.showError(\"No agent messages to copy yet.\");\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tawait copyToClipboard(text);\n\t\t\tthis.showStatus(\"Copied last agent message to clipboard\");\n\t\t} catch (error) {\n\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t}\n\t}\n\n\tprivate handleNameCommand(text: string): void {\n\t\tconst name = text.replace(/^\\/name\\s*/, \"\").trim();\n\t\tif (!name) {\n\t\t\tconst currentName = this.sessionManager.getSessionName();\n\t\t\tif (currentName) {\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\tthis.chatContainer.addChild(new Text(theme.fg(\"dim\", `Session name: ${currentName}`), 1, 0));\n\t\t\t} else {\n\t\t\t\tthis.showWarning(\"Usage: /name <name>\");\n\t\t\t}\n\t\t\tthis.ui.requestRender();\n\t\t\treturn;\n\t\t}\n\n\t\tthis.session.setSessionName(name);\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Text(theme.fg(\"dim\", `Session name set: ${name}`), 1, 0));\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate handleSessionCommand(): void {\n\t\tconst stats = this.session.getSessionStats();\n\t\tconst sessionName = this.sessionManager.getSessionName();\n\n\t\tlet info = `${theme.bold(\"Session Info\")}\\n\\n`;\n\t\tif (sessionName) {\n\t\t\tinfo += `${theme.fg(\"dim\", \"Name:\")} ${sessionName}\\n`;\n\t\t}\n\t\tinfo += `${theme.fg(\"dim\", \"File:\")} ${stats.sessionFile ?? \"In-memory\"}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", \"ID:\")} ${stats.sessionId}\\n\\n`;\n\t\tinfo += `${theme.bold(\"Messages\")}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", \"User:\")} ${stats.userMessages}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", \"Assistant:\")} ${stats.assistantMessages}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", \"Tool Calls:\")} ${stats.toolCalls}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", \"Tool Results:\")} ${stats.toolResults}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", \"Total:\")} ${stats.totalMessages}\\n\\n`;\n\t\tinfo += `${theme.bold(\"Tokens\")}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", \"Input:\")} ${stats.tokens.input.toLocaleString()}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", \"Output:\")} ${stats.tokens.output.toLocaleString()}\\n`;\n\t\tif (stats.tokens.cacheRead > 0) {\n\t\t\tinfo += `${theme.fg(\"dim\", \"Cache Read:\")} ${stats.tokens.cacheRead.toLocaleString()}\\n`;\n\t\t}\n\t\tif (stats.tokens.cacheWrite > 0) {\n\t\t\tinfo += `${theme.fg(\"dim\", \"Cache Write:\")} ${stats.tokens.cacheWrite.toLocaleString()}\\n`;\n\t\t}\n\t\tinfo += `${theme.fg(\"dim\", \"Total:\")} ${stats.tokens.total.toLocaleString()}\\n`;\n\n\t\tif (stats.cost > 0) {\n\t\t\tinfo += `\\n${theme.bold(\"Cost\")}\\n`;\n\t\t\tinfo += `${theme.fg(\"dim\", \"Total:\")} ${stats.cost.toFixed(4)}`;\n\t\t}\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Text(info, 1, 0));\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate handleChangelogCommand(): void {\n\t\tconst changelogPath = getChangelogPath();\n\t\tconst allEntries = parseChangelog(changelogPath);\n\n\t\tconst changelogMarkdown =\n\t\t\tallEntries.length > 0\n\t\t\t\t? allEntries\n\t\t\t\t\t\t.reverse()\n\t\t\t\t\t\t.map((e) => e.content)\n\t\t\t\t\t\t.join(\"\\n\\n\")\n\t\t\t\t: \"No changelog entries found.\";\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.chatContainer.addChild(new Text(theme.bold(theme.fg(\"accent\", \"What's New\")), 1, 0));\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Markdown(changelogMarkdown, 1, 1, this.getMarkdownThemeWithSettings()));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Get capitalized display string for an app keybinding action.\n\t */\n\tprivate getAppKeyDisplay(action: AppKeybinding): string {\n\t\treturn keyDisplayText(action);\n\t}\n\n\t/**\n\t * Get capitalized display string for an editor keybinding action.\n\t */\n\tprivate getEditorKeyDisplay(action: Keybinding): string {\n\t\treturn keyDisplayText(action);\n\t}\n\n\tprivate handleHotkeysCommand(): void {\n\t\t// Navigation keybindings\n\t\tconst cursorUp = this.getEditorKeyDisplay(\"tui.editor.cursorUp\");\n\t\tconst cursorDown = this.getEditorKeyDisplay(\"tui.editor.cursorDown\");\n\t\tconst cursorLeft = this.getEditorKeyDisplay(\"tui.editor.cursorLeft\");\n\t\tconst cursorRight = this.getEditorKeyDisplay(\"tui.editor.cursorRight\");\n\t\tconst cursorWordLeft = this.getEditorKeyDisplay(\"tui.editor.cursorWordLeft\");\n\t\tconst cursorWordRight = this.getEditorKeyDisplay(\"tui.editor.cursorWordRight\");\n\t\tconst cursorLineStart = this.getEditorKeyDisplay(\"tui.editor.cursorLineStart\");\n\t\tconst cursorLineEnd = this.getEditorKeyDisplay(\"tui.editor.cursorLineEnd\");\n\t\tconst jumpForward = this.getEditorKeyDisplay(\"tui.editor.jumpForward\");\n\t\tconst jumpBackward = this.getEditorKeyDisplay(\"tui.editor.jumpBackward\");\n\t\tconst pageUp = this.getEditorKeyDisplay(\"tui.editor.pageUp\");\n\t\tconst pageDown = this.getEditorKeyDisplay(\"tui.editor.pageDown\");\n\n\t\t// Editing keybindings\n\t\tconst submit = this.getEditorKeyDisplay(\"tui.input.submit\");\n\t\tconst newLine = this.getEditorKeyDisplay(\"tui.input.newLine\");\n\t\tconst deleteWordBackward = this.getEditorKeyDisplay(\"tui.editor.deleteWordBackward\");\n\t\tconst deleteWordForward = this.getEditorKeyDisplay(\"tui.editor.deleteWordForward\");\n\t\tconst deleteToLineStart = this.getEditorKeyDisplay(\"tui.editor.deleteToLineStart\");\n\t\tconst deleteToLineEnd = this.getEditorKeyDisplay(\"tui.editor.deleteToLineEnd\");\n\t\tconst yank = this.getEditorKeyDisplay(\"tui.editor.yank\");\n\t\tconst yankPop = this.getEditorKeyDisplay(\"tui.editor.yankPop\");\n\t\tconst undo = this.getEditorKeyDisplay(\"tui.editor.undo\");\n\t\tconst tab = this.getEditorKeyDisplay(\"tui.input.tab\");\n\n\t\t// App keybindings\n\t\tconst interrupt = this.getAppKeyDisplay(\"app.interrupt\");\n\t\tconst clear = this.getAppKeyDisplay(\"app.clear\");\n\t\tconst exit = this.getAppKeyDisplay(\"app.exit\");\n\t\tconst suspend = this.getAppKeyDisplay(\"app.suspend\");\n\t\tconst cycleThinkingLevel = this.getAppKeyDisplay(\"app.thinking.cycle\");\n\t\tconst cycleModelForward = this.getAppKeyDisplay(\"app.model.cycleForward\");\n\t\tconst selectModel = this.getAppKeyDisplay(\"app.model.select\");\n\t\tconst expandTools = this.getAppKeyDisplay(\"app.tools.expand\");\n\t\tconst toggleThinking = this.getAppKeyDisplay(\"app.thinking.toggle\");\n\t\tconst externalEditor = this.getAppKeyDisplay(\"app.editor.external\");\n\t\tconst cycleModelBackward = this.getAppKeyDisplay(\"app.model.cycleBackward\");\n\t\tconst followUp = this.getAppKeyDisplay(\"app.message.followUp\");\n\t\tconst dequeue = this.getAppKeyDisplay(\"app.message.dequeue\");\n\t\tconst pasteImage = this.getAppKeyDisplay(\"app.clipboard.pasteImage\");\n\n\t\tlet hotkeys = `\n**Navigation**\n| Key | Action |\n|-----|--------|\n| \\`${cursorUp}\\` / \\`${cursorDown}\\` / \\`${cursorLeft}\\` / \\`${cursorRight}\\` | Move cursor / browse history (Up when empty) |\n| \\`${cursorWordLeft}\\` / \\`${cursorWordRight}\\` | Move by word |\n| \\`${cursorLineStart}\\` | Start of line |\n| \\`${cursorLineEnd}\\` | End of line |\n| \\`${jumpForward}\\` | Jump forward to character |\n| \\`${jumpBackward}\\` | Jump backward to character |\n| \\`${pageUp}\\` / \\`${pageDown}\\` | Scroll by page |\n\n**Editing**\n| Key | Action |\n|-----|--------|\n| \\`${submit}\\` | Send message |\n| \\`${newLine}\\` | New line${process.platform === \"win32\" ? \" (Ctrl+Enter on Windows Terminal)\" : \"\"} |\n| \\`${deleteWordBackward}\\` | Delete word backwards |\n| \\`${deleteWordForward}\\` | Delete word forwards |\n| \\`${deleteToLineStart}\\` | Delete to start of line |\n| \\`${deleteToLineEnd}\\` | Delete to end of line |\n| \\`${yank}\\` | Paste the most-recently-deleted text |\n| \\`${yankPop}\\` | Cycle through the deleted text after pasting |\n| \\`${undo}\\` | Undo |\n\n**Other**\n| Key | Action |\n|-----|--------|\n| \\`${tab}\\` | Path completion / accept autocomplete |\n| \\`${interrupt}\\` | Cancel autocomplete / abort streaming |\n| \\`${clear}\\` | Clear editor (first) / exit (second) |\n| \\`${exit}\\` | Exit (when editor is empty) |\n| \\`${suspend}\\` | Suspend to background |\n| \\`${cycleThinkingLevel}\\` | Cycle thinking level |\n| \\`${cycleModelForward}\\` / \\`${cycleModelBackward}\\` | Cycle models |\n| \\`${selectModel}\\` | Open model selector |\n| \\`${expandTools}\\` | Toggle tool output expansion |\n| \\`${toggleThinking}\\` | Toggle thinking block visibility |\n| \\`${externalEditor}\\` | Edit message in external editor |\n| \\`${followUp}\\` | Queue follow-up message |\n| \\`${dequeue}\\` | Restore queued messages |\n| \\`${pasteImage}\\` | Paste image from clipboard |\n| \\`/\\` | Slash commands |\n| \\`!\\` | Run bash command |\n| \\`!!\\` | Run bash command (excluded from context) |\n`;\n\n\t\t// Add extension-registered shortcuts\n\t\tconst extensionRunner = this.session.extensionRunner;\n\t\tconst shortcuts = extensionRunner.getShortcuts(this.keybindings.getEffectiveConfig());\n\t\tif (shortcuts.size > 0) {\n\t\t\thotkeys += `\n**Extensions**\n| Key | Action |\n|-----|--------|\n`;\n\t\t\tfor (const [key, shortcut] of shortcuts) {\n\t\t\t\tconst description = shortcut.description ?? shortcut.extensionPath;\n\t\t\t\tconst keyDisplay = formatKeyText(key, { capitalize: true });\n\t\t\t\thotkeys += `| \\`${keyDisplay}\\` | ${description} |\\n`;\n\t\t\t}\n\t\t}\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.chatContainer.addChild(new Text(theme.bold(theme.fg(\"accent\", \"Keyboard Shortcuts\")), 1, 0));\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Markdown(hotkeys.trim(), 1, 1, this.getMarkdownThemeWithSettings()));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate async handleClearCommand(): Promise<void> {\n\t\tif (this.loadingAnimation) {\n\t\t\tthis.loadingAnimation.stop();\n\t\t\tthis.loadingAnimation = undefined;\n\t\t}\n\t\tthis.statusContainer.clear();\n\t\ttry {\n\t\t\tconst result = await this.runtimeHost.newSession();\n\t\t\tif (result.cancelled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.renderCurrentSessionState();\n\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\tthis.chatContainer.addChild(new Text(`${theme.fg(\"accent\", \"✓ New session started\")}`, 1, 1));\n\t\t\tthis.ui.requestRender();\n\t\t} catch (error: unknown) {\n\t\t\tawait this.handleFatalRuntimeError(\"Failed to create session\", error);\n\t\t}\n\t}\n\n\tprivate handleDebugCommand(): void {\n\t\tconst width = this.ui.terminal.columns;\n\t\tconst height = this.ui.terminal.rows;\n\t\tconst allLines = this.ui.render(width);\n\n\t\tconst debugLogPath = getDebugLogPath();\n\t\tconst debugData = [\n\t\t\t`Debug output at ${new Date().toISOString()}`,\n\t\t\t`Terminal: ${width}x${height}`,\n\t\t\t`Total lines: ${allLines.length}`,\n\t\t\t\"\",\n\t\t\t\"=== All rendered lines with visible widths ===\",\n\t\t\t...allLines.map((line, idx) => {\n\t\t\t\tconst vw = visibleWidth(line);\n\t\t\t\tconst escaped = JSON.stringify(line);\n\t\t\t\treturn `[${idx}] (w=${vw}) ${escaped}`;\n\t\t\t}),\n\t\t\t\"\",\n\t\t\t\"=== Agent messages (JSONL) ===\",\n\t\t\t...this.session.messages.map((msg) => JSON.stringify(msg)),\n\t\t\t\"\",\n\t\t].join(\"\\n\");\n\n\t\tfs.mkdirSync(path.dirname(debugLogPath), { recursive: true });\n\t\tfs.writeFileSync(debugLogPath, debugData);\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(\n\t\t\tnew Text(`${theme.fg(\"accent\", \"✓ Debug log written\")}\\n${theme.fg(\"muted\", debugLogPath)}`, 1, 1),\n\t\t);\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate handleArminSaysHi(): void {\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new ArminComponent(this.ui));\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate handleDementedDelves(): void {\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new EarendilAnnouncementComponent());\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate handleDaxnuts(): void {\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new DaxnutsComponent(this.ui));\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate checkDaxnutsEasterEgg(model: { provider: string; id: string }): void {\n\t\tif (model.provider === \"opencode\" && model.id.toLowerCase().includes(\"kimi-k2.5\")) {\n\t\t\tthis.handleDaxnuts();\n\t\t}\n\t}\n\n\tprivate async handleBashCommand(command: string, excludeFromContext = false): Promise<void> {\n\t\tconst extensionRunner = this.session.extensionRunner;\n\n\t\t// Emit user_bash event to let extensions intercept\n\t\tconst eventResult = await extensionRunner.emitUserBash({\n\t\t\ttype: \"user_bash\",\n\t\t\tcommand,\n\t\t\texcludeFromContext,\n\t\t\tcwd: this.sessionManager.getCwd(),\n\t\t});\n\n\t\t// If extension returned a full result, use it directly\n\t\tif (eventResult?.result) {\n\t\t\tconst result = eventResult.result;\n\n\t\t\t// Create UI component for display\n\t\t\tthis.bashComponent = new BashExecutionComponent(command, this.ui, excludeFromContext);\n\t\t\tif (this.session.isStreaming) {\n\t\t\t\tthis.pendingMessagesContainer.addChild(this.bashComponent);\n\t\t\t\tthis.pendingBashComponents.push(this.bashComponent);\n\t\t\t} else {\n\t\t\t\tthis.chatContainer.addChild(this.bashComponent);\n\t\t\t}\n\n\t\t\t// Show output and complete\n\t\t\tif (result.output) {\n\t\t\t\tthis.bashComponent.appendOutput(result.output);\n\t\t\t}\n\t\t\tthis.bashComponent.setComplete(\n\t\t\t\tresult.exitCode,\n\t\t\t\tresult.cancelled,\n\t\t\t\tresult.truncated ? ({ truncated: true, content: result.output } as TruncationResult) : undefined,\n\t\t\t\tresult.fullOutputPath,\n\t\t\t);\n\n\t\t\t// Record the result in session\n\t\t\tthis.session.recordBashResult(command, result, { excludeFromContext });\n\t\t\tthis.bashComponent = undefined;\n\t\t\tthis.ui.requestRender();\n\t\t\treturn;\n\t\t}\n\n\t\t// Normal execution path (possibly with custom operations)\n\t\tconst isDeferred = this.session.isStreaming;\n\t\tthis.bashComponent = new BashExecutionComponent(command, this.ui, excludeFromContext);\n\n\t\tif (isDeferred) {\n\t\t\t// Show in pending area when agent is streaming\n\t\t\tthis.pendingMessagesContainer.addChild(this.bashComponent);\n\t\t\tthis.pendingBashComponents.push(this.bashComponent);\n\t\t} else {\n\t\t\t// Show in chat immediately when agent is idle\n\t\t\tthis.chatContainer.addChild(this.bashComponent);\n\t\t}\n\t\tthis.ui.requestRender();\n\n\t\ttry {\n\t\t\tconst result = await this.session.executeBash(\n\t\t\t\tcommand,\n\t\t\t\t(chunk) => {\n\t\t\t\t\tif (this.bashComponent) {\n\t\t\t\t\t\tthis.bashComponent.appendOutput(chunk);\n\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ excludeFromContext, operations: eventResult?.operations },\n\t\t\t);\n\n\t\t\tif (this.bashComponent) {\n\t\t\t\tthis.bashComponent.setComplete(\n\t\t\t\t\tresult.exitCode,\n\t\t\t\t\tresult.cancelled,\n\t\t\t\t\tresult.truncated ? ({ truncated: true, content: result.output } as TruncationResult) : undefined,\n\t\t\t\t\tresult.fullOutputPath,\n\t\t\t\t);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (this.bashComponent) {\n\t\t\t\tthis.bashComponent.setComplete(undefined, false);\n\t\t\t}\n\t\t\tthis.showError(`Bash command failed: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n\t\t}\n\n\t\tthis.bashComponent = undefined;\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate async handleCompactCommand(customInstructions?: string): Promise<void> {\n\t\tconst entries = this.sessionManager.getEntries();\n\t\tconst messageCount = entries.filter((e) => e.type === \"message\").length;\n\n\t\tif (messageCount < 2) {\n\t\t\tthis.showWarning(\"Nothing to compact (no messages yet)\");\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.loadingAnimation) {\n\t\t\tthis.loadingAnimation.stop();\n\t\t\tthis.loadingAnimation = undefined;\n\t\t}\n\t\tthis.statusContainer.clear();\n\n\t\ttry {\n\t\t\tawait this.session.compact(customInstructions);\n\t\t} catch {\n\t\t\t// Ignore, will be emitted as an event\n\t\t}\n\t}\n\n\tstop(): void {\n\t\tthis.unregisterSignalHandlers();\n\t\tif (this.settingsManager.getShowTerminalProgress()) {\n\t\t\tthis.ui.terminal.setProgress(false);\n\t\t}\n\t\tif (this.loadingAnimation) {\n\t\t\tthis.loadingAnimation.stop();\n\t\t\tthis.loadingAnimation = undefined;\n\t\t}\n\t\tthis.clearExtensionTerminalInputListeners();\n\t\tthis.footer.dispose();\n\t\tthis.footerDataProvider.dispose();\n\t\tif (this.unsubscribe) {\n\t\t\tthis.unsubscribe();\n\t\t}\n\t\tif (this.isInitialized) {\n\t\t\tthis.ui.stop();\n\t\t\tthis.isInitialized = false;\n\t\t}\n\t}\n}\n"]}