@entelligentsia/forgecli 0.7.6 → 0.7.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2885) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/README.md +105 -215
  3. package/dist/CHANGELOG-forge-plugin.md +1233 -0
  4. package/dist/CHANGELOG-pi.md +4205 -0
  5. package/dist/bin/forge.js +2 -2
  6. package/dist/extensions/forgecli/approve.d.ts +1 -1
  7. package/dist/extensions/forgecli/ask-user-tool.d.ts +1 -1
  8. package/dist/extensions/forgecli/audience-gate.d.ts +1 -1
  9. package/dist/extensions/forgecli/collate.d.ts +1 -1
  10. package/dist/extensions/forgecli/commit.d.ts +1 -1
  11. package/dist/extensions/forgecli/enhance.d.ts +1 -1
  12. package/dist/extensions/forgecli/fix-bug.d.ts +1 -1
  13. package/dist/extensions/forgecli/forge-commands.d.ts +1 -1
  14. package/dist/extensions/forgecli/forge-header.d.ts +3 -3
  15. package/dist/extensions/forgecli/forge-header.js +12 -6
  16. package/dist/extensions/forgecli/forge-header.js.map +1 -1
  17. package/dist/extensions/forgecli/forge-init.d.ts +1 -1
  18. package/dist/extensions/forgecli/forge-subagent.d.ts +3 -3
  19. package/dist/extensions/forgecli/forge-subagent.js +2 -2
  20. package/dist/extensions/forgecli/forge-tools.d.ts +1 -1
  21. package/dist/extensions/forgecli/forge-update-command.d.ts +1 -1
  22. package/dist/extensions/forgecli/hook-dispatcher.d.ts +1 -1
  23. package/dist/extensions/forgecli/hook-dispatcher.js +1 -1
  24. package/dist/extensions/forgecli/hooks/post-init-hook.d.ts +1 -1
  25. package/dist/extensions/forgecli/hooks/post-sprint-hook.d.ts +1 -1
  26. package/dist/extensions/forgecli/implement.d.ts +1 -1
  27. package/dist/extensions/forgecli/index.d.ts +1 -1
  28. package/dist/extensions/forgecli/index.js +41 -6
  29. package/dist/extensions/forgecli/index.js.map +1 -1
  30. package/dist/extensions/forgecli/kickoff.d.ts +1 -1
  31. package/dist/extensions/forgecli/plan.d.ts +1 -1
  32. package/dist/extensions/forgecli/read-command.d.ts +1 -1
  33. package/dist/extensions/forgecli/regenerate.d.ts +1 -1
  34. package/dist/extensions/forgecli/review-code.d.ts +1 -1
  35. package/dist/extensions/forgecli/review-plan.d.ts +1 -1
  36. package/dist/extensions/forgecli/run-sprint.d.ts +2 -2
  37. package/dist/extensions/forgecli/run-task.d.ts +2 -2
  38. package/dist/extensions/forgecli/sprint-intake.d.ts +1 -1
  39. package/dist/extensions/forgecli/sprint-plan.d.ts +1 -1
  40. package/dist/extensions/forgecli/store-resolver.d.ts +1 -1
  41. package/dist/extensions/forgecli/subagent/agents.js +1 -1
  42. package/dist/extensions/forgecli/subagent/index.d.ts +1 -1
  43. package/dist/extensions/forgecli/subagent/index.js +3 -3
  44. package/dist/extensions/forgecli/test-orchestrate.d.ts +1 -1
  45. package/dist/extensions/forgecli/thread-switcher.d.ts +1 -1
  46. package/dist/extensions/forgecli/thread-switcher.js +1 -1
  47. package/dist/extensions/forgecli/usage-hook.d.ts +1 -1
  48. package/dist/extensions/forgecli/validate.d.ts +1 -1
  49. package/dist/extensions/forgecli/wf-engine/register.d.ts +1 -1
  50. package/dist/extensions/forgecli/wf-engine/worker.d.ts +1 -1
  51. package/dist/extensions/forgecli/wf-engine/worker.js +1 -1
  52. package/dist/extensions/forgecli/whats-new-widget.d.ts +21 -0
  53. package/dist/extensions/forgecli/whats-new-widget.js +303 -0
  54. package/dist/extensions/forgecli/whats-new-widget.js.map +1 -0
  55. package/dist/extensions/forgecli/whats-new.d.ts +120 -0
  56. package/dist/extensions/forgecli/whats-new.js +469 -0
  57. package/dist/extensions/forgecli/whats-new.js.map +1 -0
  58. package/node_modules/@earendil-works/pi-agent-core/README.md +488 -0
  59. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts +24 -0
  60. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -0
  61. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +479 -0
  62. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -0
  63. package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts +118 -0
  64. package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts.map +1 -0
  65. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js +402 -0
  66. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js.map +1 -0
  67. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.d.ts +92 -0
  68. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.d.ts.map +1 -0
  69. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js +900 -0
  70. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js.map +1 -0
  71. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.d.ts +53 -0
  72. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.d.ts.map +1 -0
  73. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.js +174 -0
  74. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.js.map +1 -0
  75. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.d.ts +95 -0
  76. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.d.ts.map +1 -0
  77. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js +533 -0
  78. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js.map +1 -0
  79. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/utils.d.ts +25 -0
  80. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/utils.d.ts.map +1 -0
  81. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/utils.js +131 -0
  82. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/utils.js.map +1 -0
  83. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.d.ts +51 -0
  84. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.d.ts.map +1 -0
  85. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js +481 -0
  86. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js.map +1 -0
  87. package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution-env.d.ts +4 -0
  88. package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution-env.d.ts.map +1 -0
  89. package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution-env.js +3 -0
  90. package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution-env.js.map +1 -0
  91. package/node_modules/@earendil-works/pi-agent-core/dist/harness/messages.d.ts +51 -0
  92. package/node_modules/@earendil-works/pi-agent-core/dist/harness/messages.d.ts.map +1 -0
  93. package/node_modules/@earendil-works/pi-agent-core/dist/harness/messages.js +102 -0
  94. package/node_modules/@earendil-works/pi-agent-core/dist/harness/messages.js.map +1 -0
  95. package/node_modules/@earendil-works/pi-agent-core/dist/harness/prompt-templates.d.ts +48 -0
  96. package/node_modules/@earendil-works/pi-agent-core/dist/harness/prompt-templates.d.ts.map +1 -0
  97. package/node_modules/@earendil-works/pi-agent-core/dist/harness/prompt-templates.js +230 -0
  98. package/node_modules/@earendil-works/pi-agent-core/dist/harness/prompt-templates.js.map +1 -0
  99. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-repo.d.ts +26 -0
  100. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-repo.d.ts.map +1 -0
  101. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-repo.js +101 -0
  102. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-repo.js.map +1 -0
  103. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-storage.d.ts +33 -0
  104. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-storage.d.ts.map +1 -0
  105. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-storage.js +231 -0
  106. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-storage.js.map +1 -0
  107. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-repo.d.ts +18 -0
  108. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-repo.d.ts.map +1 -0
  109. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-repo.js +42 -0
  110. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-repo.js.map +1 -0
  111. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-storage.d.ts +25 -0
  112. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-storage.d.ts.map +1 -0
  113. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-storage.js +114 -0
  114. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-storage.js.map +1 -0
  115. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/jsonl.d.ts +20 -0
  116. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/jsonl.d.ts.map +1 -0
  117. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/jsonl.js +92 -0
  118. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/jsonl.js.map +1 -0
  119. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/memory.d.ts +18 -0
  120. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/memory.d.ts.map +1 -0
  121. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/memory.js +42 -0
  122. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/memory.js.map +1 -0
  123. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/shared.d.ts +10 -0
  124. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/shared.d.ts.map +1 -0
  125. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/shared.js +31 -0
  126. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/shared.js.map +1 -0
  127. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo-utils.d.ts +11 -0
  128. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo-utils.d.ts.map +1 -0
  129. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo-utils.js +39 -0
  130. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo-utils.js.map +1 -0
  131. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.d.ts +32 -0
  132. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.d.ts.map +1 -0
  133. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.js +197 -0
  134. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.js.map +1 -0
  135. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/jsonl.d.ts +30 -0
  136. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/jsonl.d.ts.map +1 -0
  137. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/jsonl.js +170 -0
  138. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/jsonl.js.map +1 -0
  139. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/memory.d.ts +26 -0
  140. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/memory.d.ts.map +1 -0
  141. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/memory.js +90 -0
  142. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/memory.js.map +1 -0
  143. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/uuid.d.ts +2 -0
  144. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/uuid.d.ts.map +1 -0
  145. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/uuid.js +50 -0
  146. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/uuid.js.map +1 -0
  147. package/node_modules/@earendil-works/pi-agent-core/dist/harness/skills.d.ts +44 -0
  148. package/node_modules/@earendil-works/pi-agent-core/dist/harness/skills.d.ts.map +1 -0
  149. package/node_modules/@earendil-works/pi-agent-core/dist/harness/skills.js +311 -0
  150. package/node_modules/@earendil-works/pi-agent-core/dist/harness/skills.js.map +1 -0
  151. package/node_modules/@earendil-works/pi-agent-core/dist/harness/system-prompt.d.ts +3 -0
  152. package/node_modules/@earendil-works/pi-agent-core/dist/harness/system-prompt.d.ts.map +1 -0
  153. package/node_modules/@earendil-works/pi-agent-core/dist/harness/system-prompt.js +30 -0
  154. package/node_modules/@earendil-works/pi-agent-core/dist/harness/system-prompt.js.map +1 -0
  155. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts +613 -0
  156. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts.map +1 -0
  157. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.js +100 -0
  158. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.js.map +1 -0
  159. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.d.ts +14 -0
  160. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.d.ts.map +1 -0
  161. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.js +126 -0
  162. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.js.map +1 -0
  163. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/truncate.d.ts.map +1 -0
  164. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/truncate.js +288 -0
  165. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/truncate.js.map +1 -0
  166. package/node_modules/@earendil-works/pi-agent-core/dist/index.d.ts +20 -0
  167. package/node_modules/@earendil-works/pi-agent-core/dist/index.d.ts.map +1 -0
  168. package/node_modules/@earendil-works/pi-agent-core/dist/index.js +25 -0
  169. package/node_modules/@earendil-works/pi-agent-core/dist/index.js.map +1 -0
  170. package/node_modules/@earendil-works/pi-agent-core/dist/node.d.ts +3 -0
  171. package/node_modules/@earendil-works/pi-agent-core/dist/node.d.ts.map +1 -0
  172. package/node_modules/@earendil-works/pi-agent-core/dist/node.js +3 -0
  173. package/node_modules/@earendil-works/pi-agent-core/dist/node.js.map +1 -0
  174. package/node_modules/@earendil-works/pi-agent-core/dist/proxy.d.ts +69 -0
  175. package/node_modules/@earendil-works/pi-agent-core/dist/proxy.d.ts.map +1 -0
  176. package/node_modules/@earendil-works/pi-agent-core/dist/proxy.js +278 -0
  177. package/node_modules/@earendil-works/pi-agent-core/dist/proxy.js.map +1 -0
  178. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts +393 -0
  179. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts.map +1 -0
  180. package/node_modules/@earendil-works/pi-agent-core/dist/types.js.map +1 -0
  181. package/node_modules/@earendil-works/pi-agent-core/package.json +61 -0
  182. package/node_modules/@earendil-works/pi-ai/README.md +1383 -0
  183. package/node_modules/@earendil-works/pi-ai/dist/cli.d.ts.map +1 -0
  184. package/node_modules/@earendil-works/pi-ai/dist/cli.js +116 -0
  185. package/node_modules/@earendil-works/pi-ai/dist/cli.js.map +1 -0
  186. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.d.ts.map +1 -0
  187. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.js +170 -0
  188. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.js.map +1 -0
  189. package/node_modules/@earendil-works/pi-ai/dist/image-models.d.ts +10 -0
  190. package/node_modules/@earendil-works/pi-ai/dist/image-models.d.ts.map +1 -0
  191. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts +425 -0
  192. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts.map +1 -0
  193. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js +427 -0
  194. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js.map +1 -0
  195. package/node_modules/@earendil-works/pi-ai/dist/image-models.js +23 -0
  196. package/node_modules/@earendil-works/pi-ai/dist/image-models.js.map +1 -0
  197. package/node_modules/@earendil-works/pi-ai/dist/images-api-registry.d.ts +14 -0
  198. package/node_modules/@earendil-works/pi-ai/dist/images-api-registry.d.ts.map +1 -0
  199. package/node_modules/@earendil-works/pi-ai/dist/images-api-registry.js +22 -0
  200. package/node_modules/@earendil-works/pi-ai/dist/images-api-registry.js.map +1 -0
  201. package/node_modules/@earendil-works/pi-ai/dist/images.d.ts +4 -0
  202. package/node_modules/@earendil-works/pi-ai/dist/images.d.ts.map +1 -0
  203. package/node_modules/@earendil-works/pi-ai/dist/images.js +14 -0
  204. package/node_modules/@earendil-works/pi-ai/dist/images.js.map +1 -0
  205. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts +32 -0
  206. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts.map +1 -0
  207. package/node_modules/@earendil-works/pi-ai/dist/index.js +20 -0
  208. package/node_modules/@earendil-works/pi-ai/dist/index.js.map +1 -0
  209. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +17435 -0
  210. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts.map +1 -0
  211. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js +16383 -0
  212. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js.map +1 -0
  213. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.d.ts.map +1 -0
  214. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.js +750 -0
  215. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.js.map +1 -0
  216. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.d.ts.map +1 -0
  217. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js +960 -0
  218. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js.map +1 -0
  219. package/node_modules/@earendil-works/pi-ai/dist/providers/images/openrouter.d.ts +3 -0
  220. package/node_modules/@earendil-works/pi-ai/dist/providers/images/openrouter.d.ts.map +1 -0
  221. package/node_modules/@earendil-works/pi-ai/dist/providers/images/openrouter.js +129 -0
  222. package/node_modules/@earendil-works/pi-ai/dist/providers/images/openrouter.js.map +1 -0
  223. package/node_modules/@earendil-works/pi-ai/dist/providers/images/register-builtins.d.ts +4 -0
  224. package/node_modules/@earendil-works/pi-ai/dist/providers/images/register-builtins.d.ts.map +1 -0
  225. package/node_modules/@earendil-works/pi-ai/dist/providers/images/register-builtins.js +34 -0
  226. package/node_modules/@earendil-works/pi-ai/dist/providers/images/register-builtins.js.map +1 -0
  227. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.d.ts.map +1 -0
  228. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.js +1080 -0
  229. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.js.map +1 -0
  230. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.d.ts.map +1 -0
  231. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.js +943 -0
  232. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.js.map +1 -0
  233. package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.d.ts.map +1 -0
  234. package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.js +39 -0
  235. package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.js.map +1 -0
  236. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +488 -0
  237. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -0
  238. package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -0
  239. package/node_modules/@earendil-works/pi-ai/dist/utils/node-http-proxy.d.ts +10 -0
  240. package/node_modules/@earendil-works/pi-ai/dist/utils/node-http-proxy.d.ts.map +1 -0
  241. package/node_modules/@earendil-works/pi-ai/dist/utils/node-http-proxy.js +97 -0
  242. package/node_modules/@earendil-works/pi-ai/dist/utils/node-http-proxy.js.map +1 -0
  243. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts +56 -0
  244. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts.map +1 -0
  245. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js +151 -0
  246. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js.map +1 -0
  247. package/node_modules/@earendil-works/pi-ai/package.json +107 -0
  248. package/node_modules/@earendil-works/pi-coding-agent/CHANGELOG.md +4205 -0
  249. package/node_modules/@earendil-works/pi-coding-agent/README.md +653 -0
  250. package/node_modules/@earendil-works/pi-coding-agent/dist/bun/register-bedrock.d.ts.map +1 -0
  251. package/node_modules/@earendil-works/pi-coding-agent/dist/bun/register-bedrock.js +4 -0
  252. package/node_modules/@earendil-works/pi-coding-agent/dist/bun/register-bedrock.js.map +1 -0
  253. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/args.d.ts +53 -0
  254. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/args.d.ts.map +1 -0
  255. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/args.js +341 -0
  256. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/args.js.map +1 -0
  257. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/config-selector.d.ts.map +1 -0
  258. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/config-selector.js +31 -0
  259. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/config-selector.js.map +1 -0
  260. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/file-processor.d.ts +15 -0
  261. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/file-processor.d.ts.map +1 -0
  262. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/file-processor.js.map +1 -0
  263. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/initial-message.d.ts +18 -0
  264. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/initial-message.d.ts.map +1 -0
  265. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/initial-message.js.map +1 -0
  266. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/list-models.d.ts.map +1 -0
  267. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/list-models.js +98 -0
  268. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/list-models.js.map +1 -0
  269. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/session-picker.d.ts.map +1 -0
  270. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/session-picker.js +35 -0
  271. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/session-picker.js.map +1 -0
  272. package/node_modules/@earendil-works/pi-coding-agent/dist/cli.d.ts.map +1 -0
  273. package/node_modules/@earendil-works/pi-coding-agent/dist/cli.js +28 -0
  274. package/node_modules/@earendil-works/pi-coding-agent/dist/cli.js.map +1 -0
  275. package/node_modules/@earendil-works/pi-coding-agent/dist/config.d.ts.map +1 -0
  276. package/node_modules/@earendil-works/pi-coding-agent/dist/config.js +399 -0
  277. package/node_modules/@earendil-works/pi-coding-agent/dist/config.js.map +1 -0
  278. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-services.d.ts +86 -0
  279. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-services.d.ts.map +1 -0
  280. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-services.js.map +1 -0
  281. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.d.ts +595 -0
  282. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -0
  283. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.js +2521 -0
  284. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.js.map +1 -0
  285. package/node_modules/@earendil-works/pi-coding-agent/dist/core/auth-storage.d.ts +141 -0
  286. package/node_modules/@earendil-works/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -0
  287. package/node_modules/@earendil-works/pi-coding-agent/dist/core/auth-storage.js +441 -0
  288. package/node_modules/@earendil-works/pi-coding-agent/dist/core/auth-storage.js.map +1 -0
  289. package/node_modules/@earendil-works/pi-coding-agent/dist/core/bash-executor.d.ts.map +1 -0
  290. package/node_modules/@earendil-works/pi-coding-agent/dist/core/bash-executor.js +111 -0
  291. package/node_modules/@earendil-works/pi-coding-agent/dist/core/bash-executor.js.map +1 -0
  292. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/branch-summarization.d.ts +88 -0
  293. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/branch-summarization.d.ts.map +1 -0
  294. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/branch-summarization.js +243 -0
  295. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/branch-summarization.js.map +1 -0
  296. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/compaction.d.ts +121 -0
  297. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -0
  298. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/compaction.js +615 -0
  299. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -0
  300. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/utils.d.ts +38 -0
  301. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/utils.d.ts.map +1 -0
  302. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/utils.js.map +1 -0
  303. package/node_modules/@earendil-works/pi-coding-agent/dist/core/defaults.d.ts +3 -0
  304. package/node_modules/@earendil-works/pi-coding-agent/dist/core/defaults.d.ts.map +1 -0
  305. package/node_modules/@earendil-works/pi-coding-agent/dist/core/defaults.js.map +1 -0
  306. package/node_modules/@earendil-works/pi-coding-agent/dist/core/export-html/index.d.ts +37 -0
  307. package/node_modules/@earendil-works/pi-coding-agent/dist/core/export-html/index.d.ts.map +1 -0
  308. package/node_modules/@earendil-works/pi-coding-agent/dist/core/export-html/index.js.map +1 -0
  309. package/node_modules/@earendil-works/pi-coding-agent/dist/core/export-html/tool-renderer.d.ts.map +1 -0
  310. package/node_modules/@earendil-works/pi-coding-agent/dist/core/export-html/tool-renderer.js.map +1 -0
  311. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -0
  312. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/loader.js +498 -0
  313. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/loader.js.map +1 -0
  314. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.d.ts +159 -0
  315. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -0
  316. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.js +825 -0
  317. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.js.map +1 -0
  318. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/types.d.ts +1187 -0
  319. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -0
  320. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/types.js.map +1 -0
  321. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/wrapper.d.ts +20 -0
  322. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/wrapper.d.ts.map +1 -0
  323. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/wrapper.js.map +1 -0
  324. package/node_modules/@earendil-works/pi-coding-agent/dist/core/keybindings.d.ts +353 -0
  325. package/node_modules/@earendil-works/pi-coding-agent/dist/core/keybindings.d.ts.map +1 -0
  326. package/node_modules/@earendil-works/pi-coding-agent/dist/core/keybindings.js +295 -0
  327. package/node_modules/@earendil-works/pi-coding-agent/dist/core/keybindings.js.map +1 -0
  328. package/node_modules/@earendil-works/pi-coding-agent/dist/core/messages.d.ts +77 -0
  329. package/node_modules/@earendil-works/pi-coding-agent/dist/core/messages.d.ts.map +1 -0
  330. package/node_modules/@earendil-works/pi-coding-agent/dist/core/messages.js.map +1 -0
  331. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-registry.d.ts +150 -0
  332. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -0
  333. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-registry.js +728 -0
  334. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-registry.js.map +1 -0
  335. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-resolver.d.ts +110 -0
  336. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -0
  337. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-resolver.js +495 -0
  338. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-resolver.js.map +1 -0
  339. package/node_modules/@earendil-works/pi-coding-agent/dist/core/package-manager.d.ts +199 -0
  340. package/node_modules/@earendil-works/pi-coding-agent/dist/core/package-manager.d.ts.map +1 -0
  341. package/node_modules/@earendil-works/pi-coding-agent/dist/core/package-manager.js +1996 -0
  342. package/node_modules/@earendil-works/pi-coding-agent/dist/core/package-manager.js.map +1 -0
  343. package/node_modules/@earendil-works/pi-coding-agent/dist/core/prompt-templates.d.ts.map +1 -0
  344. package/node_modules/@earendil-works/pi-coding-agent/dist/core/prompt-templates.js +252 -0
  345. package/node_modules/@earendil-works/pi-coding-agent/dist/core/prompt-templates.js.map +1 -0
  346. package/node_modules/@earendil-works/pi-coding-agent/dist/core/provider-display-names.d.ts.map +1 -0
  347. package/node_modules/@earendil-works/pi-coding-agent/dist/core/provider-display-names.js +33 -0
  348. package/node_modules/@earendil-works/pi-coding-agent/dist/core/provider-display-names.js.map +1 -0
  349. package/node_modules/@earendil-works/pi-coding-agent/dist/core/sdk.d.ts +107 -0
  350. package/node_modules/@earendil-works/pi-coding-agent/dist/core/sdk.d.ts.map +1 -0
  351. package/node_modules/@earendil-works/pi-coding-agent/dist/core/sdk.js +282 -0
  352. package/node_modules/@earendil-works/pi-coding-agent/dist/core/sdk.js.map +1 -0
  353. package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.d.ts +333 -0
  354. package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -0
  355. package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.js +1139 -0
  356. package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.js.map +1 -0
  357. package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.d.ts +261 -0
  358. package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -0
  359. package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.js.map +1 -0
  360. package/node_modules/@earendil-works/pi-coding-agent/dist/core/skills.d.ts.map +1 -0
  361. package/node_modules/@earendil-works/pi-coding-agent/dist/core/skills.js +401 -0
  362. package/node_modules/@earendil-works/pi-coding-agent/dist/core/skills.js.map +1 -0
  363. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/bash.d.ts +68 -0
  364. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/bash.d.ts.map +1 -0
  365. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/bash.js +335 -0
  366. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/bash.js.map +1 -0
  367. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/edit.d.ts +49 -0
  368. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/edit.d.ts.map +1 -0
  369. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/edit.js +324 -0
  370. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/edit.js.map +1 -0
  371. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/find.d.ts +35 -0
  372. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/find.d.ts.map +1 -0
  373. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/find.js +298 -0
  374. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/find.js.map +1 -0
  375. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/grep.d.ts +37 -0
  376. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/grep.d.ts.map +1 -0
  377. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/grep.js +304 -0
  378. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/grep.js.map +1 -0
  379. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/index.d.ts +40 -0
  380. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/index.d.ts.map +1 -0
  381. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/index.js.map +1 -0
  382. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/ls.d.ts +37 -0
  383. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/ls.d.ts.map +1 -0
  384. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/ls.js +169 -0
  385. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/ls.js.map +1 -0
  386. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/read.d.ts +35 -0
  387. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/read.d.ts.map +1 -0
  388. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/read.js +289 -0
  389. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/read.js.map +1 -0
  390. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/render-utils.d.ts +21 -0
  391. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/render-utils.d.ts.map +1 -0
  392. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/render-utils.js +49 -0
  393. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/render-utils.js.map +1 -0
  394. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
  395. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
  396. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/tool-definition-wrapper.js.map +1 -0
  397. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/truncate.d.ts +70 -0
  398. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/write.d.ts +26 -0
  399. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/write.d.ts.map +1 -0
  400. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/write.js +213 -0
  401. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/write.js.map +1 -0
  402. package/node_modules/@earendil-works/pi-coding-agent/dist/main.d.ts.map +1 -0
  403. package/node_modules/@earendil-works/pi-coding-agent/dist/main.js +573 -0
  404. package/node_modules/@earendil-works/pi-coding-agent/dist/main.js.map +1 -0
  405. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/armin.d.ts +34 -0
  406. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/armin.d.ts.map +1 -0
  407. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/armin.js.map +1 -0
  408. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/assistant-message.d.ts +20 -0
  409. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
  410. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/assistant-message.js +121 -0
  411. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/assistant-message.js.map +1 -0
  412. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/bash-execution.d.ts +34 -0
  413. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
  414. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/bash-execution.js +175 -0
  415. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/bash-execution.js.map +1 -0
  416. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
  417. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
  418. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/bordered-loader.js +54 -0
  419. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/bordered-loader.js.map +1 -0
  420. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
  421. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
  422. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/branch-summary-message.js +44 -0
  423. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
  424. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
  425. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
  426. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/compaction-summary-message.js +45 -0
  427. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
  428. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/config-selector.d.ts +71 -0
  429. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
  430. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/config-selector.js +503 -0
  431. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/config-selector.js.map +1 -0
  432. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
  433. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
  434. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/countdown-timer.js.map +1 -0
  435. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/custom-editor.d.ts +21 -0
  436. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
  437. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/custom-editor.js +70 -0
  438. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/custom-editor.js.map +1 -0
  439. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/custom-message.d.ts +20 -0
  440. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
  441. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/custom-message.js +79 -0
  442. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/custom-message.js.map +1 -0
  443. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/daxnuts.d.ts +23 -0
  444. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/daxnuts.d.ts.map +1 -0
  445. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/daxnuts.js.map +1 -0
  446. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
  447. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
  448. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/dynamic-border.js.map +1 -0
  449. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/earendil-announcement.d.ts +5 -0
  450. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -0
  451. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/earendil-announcement.js +40 -0
  452. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/earendil-announcement.js.map +1 -0
  453. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/extension-editor.d.ts +20 -0
  454. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
  455. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/extension-editor.js +111 -0
  456. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/extension-editor.js.map +1 -0
  457. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/extension-input.d.ts +23 -0
  458. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
  459. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/extension-input.js +61 -0
  460. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/extension-input.js.map +1 -0
  461. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/extension-selector.d.ts +26 -0
  462. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
  463. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/extension-selector.js +83 -0
  464. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/extension-selector.js.map +1 -0
  465. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/footer.d.ts +27 -0
  466. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -0
  467. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/footer.js +201 -0
  468. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -0
  469. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/keybinding-hints.d.ts +13 -0
  470. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
  471. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/keybinding-hints.js +36 -0
  472. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
  473. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/login-dialog.d.ts +46 -0
  474. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
  475. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/login-dialog.js +160 -0
  476. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/login-dialog.js.map +1 -0
  477. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/model-selector.d.ts +47 -0
  478. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
  479. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/model-selector.js +278 -0
  480. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/model-selector.js.map +1 -0
  481. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/oauth-selector.d.ts +31 -0
  482. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
  483. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/oauth-selector.js +165 -0
  484. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/oauth-selector.js.map +1 -0
  485. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/scoped-models-selector.d.ts +42 -0
  486. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
  487. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/scoped-models-selector.js +290 -0
  488. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
  489. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
  490. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/session-selector-search.js +155 -0
  491. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/session-selector-search.js.map +1 -0
  492. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/session-selector.d.ts +96 -0
  493. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
  494. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/session-selector.js +861 -0
  495. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/session-selector.js.map +1 -0
  496. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts +67 -0
  497. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
  498. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +375 -0
  499. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -0
  500. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  501. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
  502. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/show-images-selector.js +39 -0
  503. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/show-images-selector.js.map +1 -0
  504. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
  505. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
  506. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.js +47 -0
  507. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
  508. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  509. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
  510. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/theme-selector.js +50 -0
  511. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/theme-selector.js.map +1 -0
  512. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
  513. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
  514. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/thinking-selector.js +51 -0
  515. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/thinking-selector.js.map +1 -0
  516. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +63 -0
  517. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
  518. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +295 -0
  519. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -0
  520. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/tree-selector.d.ts +89 -0
  521. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
  522. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/tree-selector.js +1093 -0
  523. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/tree-selector.js.map +1 -0
  524. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
  525. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
  526. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/user-message-selector.js +114 -0
  527. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/user-message-selector.js.map +1 -0
  528. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts +10 -0
  529. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts.map +1 -0
  530. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/user-message.js +29 -0
  531. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/user-message.js.map +1 -0
  532. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
  533. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/visual-truncate.js +33 -0
  534. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/visual-truncate.js.map +1 -0
  535. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +382 -0
  536. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
  537. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.js +4668 -0
  538. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -0
  539. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/theme/dark.json +85 -0
  540. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/theme/light.json +84 -0
  541. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +81 -0
  542. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -0
  543. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/theme/theme.js +973 -0
  544. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -0
  545. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/print-mode.d.ts +28 -0
  546. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/print-mode.d.ts.map +1 -0
  547. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/print-mode.js.map +1 -0
  548. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts +224 -0
  549. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts.map +1 -0
  550. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.js.map +1 -0
  551. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
  552. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.js +605 -0
  553. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -0
  554. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts +419 -0
  555. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts.map +1 -0
  556. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-types.js.map +1 -0
  557. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/ansi.d.ts +2 -0
  558. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/ansi.d.ts.map +1 -0
  559. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/ansi.js +52 -0
  560. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/ansi.js.map +1 -0
  561. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/html.d.ts +7 -0
  562. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/html.d.ts.map +1 -0
  563. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/html.js +40 -0
  564. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/html.js.map +1 -0
  565. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize.d.ts +36 -0
  566. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize.d.ts.map +1 -0
  567. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize.js.map +1 -0
  568. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/mime.d.ts +3 -0
  569. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/mime.d.ts.map +1 -0
  570. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/mime.js +69 -0
  571. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/mime.js.map +1 -0
  572. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/syntax-highlight.d.ts +12 -0
  573. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/syntax-highlight.d.ts.map +1 -0
  574. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/syntax-highlight.js +118 -0
  575. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/syntax-highlight.js.map +1 -0
  576. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/tools-manager.d.ts.map +1 -0
  577. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/tools-manager.js +328 -0
  578. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/tools-manager.js.map +1 -0
  579. package/node_modules/@earendil-works/pi-coding-agent/docs/compaction.md +394 -0
  580. package/node_modules/@earendil-works/pi-coding-agent/docs/custom-provider.md +701 -0
  581. package/node_modules/@earendil-works/pi-coding-agent/docs/extensions.md +2596 -0
  582. package/node_modules/@earendil-works/pi-coding-agent/docs/index.md +70 -0
  583. package/node_modules/@earendil-works/pi-coding-agent/docs/models.md +474 -0
  584. package/node_modules/@earendil-works/pi-coding-agent/docs/packages.md +223 -0
  585. package/node_modules/@earendil-works/pi-coding-agent/docs/providers.md +243 -0
  586. package/node_modules/@earendil-works/pi-coding-agent/docs/quickstart.md +142 -0
  587. package/node_modules/@earendil-works/pi-coding-agent/docs/rpc.md +1407 -0
  588. package/node_modules/@earendil-works/pi-coding-agent/docs/sdk.md +1129 -0
  589. package/node_modules/@earendil-works/pi-coding-agent/docs/session-format.md +412 -0
  590. package/node_modules/@earendil-works/pi-coding-agent/docs/skills.md +231 -0
  591. package/node_modules/@earendil-works/pi-coding-agent/docs/termux.md +127 -0
  592. package/node_modules/@earendil-works/pi-coding-agent/docs/themes.md +295 -0
  593. package/node_modules/@earendil-works/pi-coding-agent/docs/tui.md +918 -0
  594. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/README.md +208 -0
  595. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/auto-commit-on-exit.ts +49 -0
  596. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/bash-spawn-hook.ts +30 -0
  597. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/bookmark.ts +50 -0
  598. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/border-status-editor.ts +150 -0
  599. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/built-in-tool-renderer.ts +249 -0
  600. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/claude-rules.ts +86 -0
  601. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/commands.ts +72 -0
  602. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/confirm-destructive.ts +59 -0
  603. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-compaction.ts +127 -0
  604. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-footer.ts +64 -0
  605. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-header.ts +73 -0
  606. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-anthropic/index.ts +604 -0
  607. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
  608. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-anthropic/package.json +19 -0
  609. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-gitlab-duo/index.ts +349 -0
  610. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
  611. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -0
  612. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/dirty-repo-guard.ts +56 -0
  613. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/doom-overlay/doom-component.ts +132 -0
  614. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/doom-overlay/doom-keys.ts +104 -0
  615. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/doom-overlay/index.ts +74 -0
  616. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/dynamic-resources/dynamic.json +79 -0
  617. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/dynamic-resources/index.ts +15 -0
  618. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/dynamic-tools.ts +74 -0
  619. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/event-bus.ts +43 -0
  620. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/file-trigger.ts +41 -0
  621. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/git-checkpoint.ts +53 -0
  622. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/github-issue-autocomplete.ts +185 -0
  623. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/handoff.ts +191 -0
  624. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/hello.ts +26 -0
  625. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/hidden-thinking-label.ts +53 -0
  626. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/inline-bash.ts +94 -0
  627. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/input-transform.ts +43 -0
  628. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/interactive-shell.ts +196 -0
  629. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/mac-system-theme.ts +47 -0
  630. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/message-renderer.ts +59 -0
  631. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/minimal-mode.ts +426 -0
  632. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/modal-editor.ts +85 -0
  633. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/model-status.ts +31 -0
  634. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/notify.ts +55 -0
  635. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/overlay-qa-tests.ts +1348 -0
  636. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/overlay-test.ts +150 -0
  637. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/permission-gate.ts +34 -0
  638. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/pirate.ts +47 -0
  639. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/plan-mode/index.ts +340 -0
  640. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/preset.ts +430 -0
  641. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/prompt-customizer.ts +97 -0
  642. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/protected-paths.ts +30 -0
  643. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/provider-payload.ts +18 -0
  644. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/qna.ts +122 -0
  645. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/question.ts +264 -0
  646. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/questionnaire.ts +427 -0
  647. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/rainbow-editor.ts +88 -0
  648. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/reload-runtime.ts +37 -0
  649. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/rpc-demo.ts +118 -0
  650. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/sandbox/index.ts +321 -0
  651. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/sandbox/package-lock.json +92 -0
  652. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/sandbox/package.json +19 -0
  653. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/send-user-message.ts +97 -0
  654. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/session-name.ts +27 -0
  655. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/shutdown-command.ts +63 -0
  656. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/snake.ts +343 -0
  657. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/space-invaders.ts +560 -0
  658. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/ssh.ts +220 -0
  659. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/status-line.ts +32 -0
  660. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/structured-output.ts +65 -0
  661. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/subagent/agents.ts +126 -0
  662. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/subagent/index.ts +987 -0
  663. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/summarize.ts +206 -0
  664. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/system-prompt-header.ts +17 -0
  665. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/tic-tac-toe.ts +1008 -0
  666. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/timed-confirm.ts +70 -0
  667. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/titlebar-spinner.ts +58 -0
  668. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/todo.ts +297 -0
  669. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/tool-override.ts +144 -0
  670. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/tools.ts +141 -0
  671. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/trigger-compact.ts +50 -0
  672. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/truncated-tool.ts +195 -0
  673. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/widget-placement.ts +9 -0
  674. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/with-deps/index.ts +32 -0
  675. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/with-deps/package-lock.json +31 -0
  676. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/with-deps/package.json +22 -0
  677. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/working-indicator.ts +123 -0
  678. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/working-message-test.ts +25 -0
  679. package/node_modules/@earendil-works/pi-coding-agent/examples/rpc-extension-ui.ts +632 -0
  680. package/node_modules/@earendil-works/pi-coding-agent/examples/sdk/01-minimal.ts +26 -0
  681. package/node_modules/@earendil-works/pi-coding-agent/examples/sdk/02-custom-model.ts +53 -0
  682. package/node_modules/@earendil-works/pi-coding-agent/examples/sdk/03-custom-prompt.ts +75 -0
  683. package/node_modules/@earendil-works/pi-coding-agent/examples/sdk/04-skills.ts +55 -0
  684. package/node_modules/@earendil-works/pi-coding-agent/examples/sdk/05-tools.ts +48 -0
  685. package/node_modules/@earendil-works/pi-coding-agent/examples/sdk/06-extensions.ts +99 -0
  686. package/node_modules/@earendil-works/pi-coding-agent/examples/sdk/07-context-files.ts +47 -0
  687. package/node_modules/@earendil-works/pi-coding-agent/examples/sdk/08-prompt-templates.ts +51 -0
  688. package/node_modules/@earendil-works/pi-coding-agent/examples/sdk/09-api-keys-and-oauth.ts +52 -0
  689. package/node_modules/@earendil-works/pi-coding-agent/examples/sdk/10-settings.ts +53 -0
  690. package/node_modules/@earendil-works/pi-coding-agent/examples/sdk/11-sessions.ts +52 -0
  691. package/node_modules/@earendil-works/pi-coding-agent/examples/sdk/12-full-control.ts +77 -0
  692. package/node_modules/@earendil-works/pi-coding-agent/examples/sdk/13-session-runtime.ts +67 -0
  693. package/node_modules/@earendil-works/pi-coding-agent/examples/sdk/README.md +144 -0
  694. package/node_modules/@earendil-works/pi-coding-agent/package.json +95 -0
  695. package/node_modules/@earendil-works/pi-tui/README.md +779 -0
  696. package/node_modules/@earendil-works/pi-tui/dist/components/image.d.ts.map +1 -0
  697. package/node_modules/@earendil-works/pi-tui/dist/components/image.js +89 -0
  698. package/node_modules/@earendil-works/pi-tui/dist/components/image.js.map +1 -0
  699. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.d.ts +90 -0
  700. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.d.ts.map +1 -0
  701. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.js +634 -0
  702. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.js.map +1 -0
  703. package/node_modules/@earendil-works/pi-tui/dist/stdin-buffer.d.ts.map +1 -0
  704. package/node_modules/@earendil-works/pi-tui/dist/stdin-buffer.js +361 -0
  705. package/node_modules/@earendil-works/pi-tui/dist/stdin-buffer.js.map +1 -0
  706. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.d.ts +90 -0
  707. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.d.ts.map +1 -0
  708. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js +337 -0
  709. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js.map +1 -0
  710. package/node_modules/@earendil-works/pi-tui/package.json +50 -0
  711. package/node_modules/@mariozechner/clipboard/.yarnrc.yml +1 -0
  712. package/node_modules/@mariozechner/clipboard/Cargo.toml +45 -0
  713. package/node_modules/@mariozechner/clipboard/README.md +60 -0
  714. package/node_modules/@mariozechner/clipboard/build.rs +5 -0
  715. package/node_modules/@mariozechner/clipboard/exp.ts +12 -0
  716. package/node_modules/@mariozechner/clipboard/index.d.ts +23 -0
  717. package/node_modules/@mariozechner/clipboard/index.js +317 -0
  718. package/node_modules/@mariozechner/clipboard/package.json +47 -0
  719. package/node_modules/@mariozechner/clipboard/package.json.prepack-backup +56 -0
  720. package/node_modules/@mariozechner/clipboard/src/clipboard_rs/common.rs +307 -0
  721. package/node_modules/@mariozechner/clipboard/src/clipboard_rs/mod.rs +93 -0
  722. package/node_modules/@mariozechner/clipboard/src/clipboard_rs/platform/ios.rs +313 -0
  723. package/node_modules/@mariozechner/clipboard/src/clipboard_rs/platform/macos.rs +471 -0
  724. package/node_modules/@mariozechner/clipboard/src/clipboard_rs/platform/mod.rs +252 -0
  725. package/node_modules/@mariozechner/clipboard/src/clipboard_rs/platform/wayland.rs +431 -0
  726. package/node_modules/@mariozechner/clipboard/src/clipboard_rs/platform/win.rs +712 -0
  727. package/node_modules/@mariozechner/clipboard/src/clipboard_rs/platform/x11.rs +916 -0
  728. package/node_modules/@mariozechner/clipboard/src/lib.rs +199 -0
  729. package/node_modules/@mariozechner/clipboard-linux-x64-gnu/README.md +3 -0
  730. package/node_modules/@mariozechner/clipboard-linux-x64-gnu/clipboard.linux-x64-gnu.node +0 -0
  731. package/node_modules/@mariozechner/clipboard-linux-x64-gnu/package.json +25 -0
  732. package/node_modules/koffi/CHANGELOG.md +1093 -0
  733. package/node_modules/koffi/LICENSE.txt +22 -0
  734. package/node_modules/koffi/README.md +43 -0
  735. package/node_modules/koffi/build/koffi/darwin_arm64/koffi.node +0 -0
  736. package/node_modules/koffi/build/koffi/darwin_x64/koffi.node +0 -0
  737. package/node_modules/koffi/build/koffi/freebsd_arm64/koffi.node +0 -0
  738. package/node_modules/koffi/build/koffi/freebsd_ia32/koffi.node +0 -0
  739. package/node_modules/koffi/build/koffi/freebsd_x64/koffi.node +0 -0
  740. package/node_modules/koffi/build/koffi/linux_arm64/koffi.node +0 -0
  741. package/node_modules/koffi/build/koffi/linux_armhf/koffi.node +0 -0
  742. package/node_modules/koffi/build/koffi/linux_ia32/koffi.node +0 -0
  743. package/node_modules/koffi/build/koffi/linux_loong64/koffi.node +0 -0
  744. package/node_modules/koffi/build/koffi/linux_riscv64d/koffi.node +0 -0
  745. package/node_modules/koffi/build/koffi/linux_x64/koffi.node +0 -0
  746. package/node_modules/koffi/build/koffi/musl_arm64/koffi.node +0 -0
  747. package/node_modules/koffi/build/koffi/musl_x64/koffi.node +0 -0
  748. package/node_modules/koffi/build/koffi/openbsd_ia32/koffi.node +0 -0
  749. package/node_modules/koffi/build/koffi/openbsd_x64/koffi.node +0 -0
  750. package/node_modules/koffi/build/koffi/win32_arm64/koffi.exp +0 -0
  751. package/node_modules/koffi/build/koffi/win32_arm64/koffi.lib +0 -0
  752. package/node_modules/koffi/build/koffi/win32_arm64/koffi.node +0 -0
  753. package/node_modules/koffi/build/koffi/win32_ia32/koffi.exp +0 -0
  754. package/node_modules/koffi/build/koffi/win32_ia32/koffi.lib +0 -0
  755. package/node_modules/koffi/build/koffi/win32_ia32/koffi.node +0 -0
  756. package/node_modules/koffi/build/koffi/win32_x64/koffi.exp +0 -0
  757. package/node_modules/koffi/build/koffi/win32_x64/koffi.lib +0 -0
  758. package/node_modules/koffi/build/koffi/win32_x64/koffi.node +0 -0
  759. package/node_modules/koffi/doc/benchmarks.md +126 -0
  760. package/node_modules/koffi/doc/callbacks.md +210 -0
  761. package/node_modules/koffi/doc/contribute.md +148 -0
  762. package/node_modules/koffi/doc/functions.md +250 -0
  763. package/node_modules/koffi/doc/index.md +61 -0
  764. package/node_modules/koffi/doc/input.md +471 -0
  765. package/node_modules/koffi/doc/migration.md +159 -0
  766. package/node_modules/koffi/doc/misc.md +180 -0
  767. package/node_modules/koffi/doc/output.md +305 -0
  768. package/node_modules/koffi/doc/packaging.md +88 -0
  769. package/node_modules/koffi/doc/platforms.md +36 -0
  770. package/node_modules/koffi/doc/pointers.md +328 -0
  771. package/node_modules/koffi/doc/start.md +118 -0
  772. package/node_modules/koffi/doc/unions.md +186 -0
  773. package/node_modules/koffi/doc/variables.md +102 -0
  774. package/node_modules/koffi/index.d.ts +288 -0
  775. package/node_modules/koffi/index.js +634 -0
  776. package/node_modules/koffi/indirect.js +533 -0
  777. package/node_modules/koffi/lib/native/base/base.cc +11015 -0
  778. package/node_modules/koffi/lib/native/base/base.hh +6003 -0
  779. package/node_modules/koffi/lib/native/base/crc.inc +2214 -0
  780. package/node_modules/koffi/lib/native/base/crc_gen.py +72 -0
  781. package/node_modules/koffi/lib/native/base/mimetypes.inc +1248 -0
  782. package/node_modules/koffi/lib/native/base/mimetypes_gen.py +58 -0
  783. package/node_modules/koffi/lib/native/base/tower.cc +821 -0
  784. package/node_modules/koffi/lib/native/base/tower.hh +81 -0
  785. package/node_modules/koffi/lib/native/base/unicode.inc +408 -0
  786. package/node_modules/koffi/lib/native/base/unicode_gen.py +152 -0
  787. package/node_modules/koffi/package.json +38 -0
  788. package/node_modules/koffi/src/cnoke/LICENSE.txt +22 -0
  789. package/node_modules/koffi/src/cnoke/README.md +99 -0
  790. package/node_modules/koffi/src/cnoke/assets/FindCNoke.cmake +127 -0
  791. package/node_modules/koffi/src/cnoke/assets/toolchains.json +126 -0
  792. package/node_modules/koffi/src/cnoke/assets/win_delay_hook.c +36 -0
  793. package/node_modules/koffi/src/cnoke/cnoke.js +170 -0
  794. package/node_modules/koffi/src/cnoke/package.json +24 -0
  795. package/node_modules/koffi/src/cnoke/src/builder.js +511 -0
  796. package/node_modules/koffi/src/cnoke/src/index.js +10 -0
  797. package/node_modules/koffi/src/cnoke/src/tools.js +407 -0
  798. package/node_modules/koffi/src/koffi/CMakeLists.txt +182 -0
  799. package/node_modules/koffi/src/koffi/src/abi_arm32.cc +1018 -0
  800. package/node_modules/koffi/src/koffi/src/abi_arm32_asm.S +169 -0
  801. package/node_modules/koffi/src/koffi/src/abi_arm64.cc +1295 -0
  802. package/node_modules/koffi/src/koffi/src/abi_arm64_asm.S +195 -0
  803. package/node_modules/koffi/src/koffi/src/abi_arm64_asm.asm +174 -0
  804. package/node_modules/koffi/src/koffi/src/abi_loong64.cc +5 -0
  805. package/node_modules/koffi/src/koffi/src/abi_loong64_asm.S +204 -0
  806. package/node_modules/koffi/src/koffi/src/abi_riscv64.cc +915 -0
  807. package/node_modules/koffi/src/koffi/src/abi_riscv64_asm.S +203 -0
  808. package/node_modules/koffi/src/koffi/src/abi_x64_sysv.cc +939 -0
  809. package/node_modules/koffi/src/koffi/src/abi_x64_sysv_asm.S +231 -0
  810. package/node_modules/koffi/src/koffi/src/abi_x64_win.cc +715 -0
  811. package/node_modules/koffi/src/koffi/src/abi_x64_win_asm.S +166 -0
  812. package/node_modules/koffi/src/koffi/src/abi_x64_win_asm.asm +192 -0
  813. package/node_modules/koffi/src/koffi/src/abi_x86.cc +860 -0
  814. package/node_modules/koffi/src/koffi/src/abi_x86_asm.S +193 -0
  815. package/node_modules/koffi/src/koffi/src/abi_x86_asm.asm +177 -0
  816. package/node_modules/koffi/src/koffi/src/call.cc +1326 -0
  817. package/node_modules/koffi/src/koffi/src/call.hh +179 -0
  818. package/node_modules/koffi/src/koffi/src/errno.inc +462 -0
  819. package/node_modules/koffi/src/koffi/src/ffi.cc +2702 -0
  820. package/node_modules/koffi/src/koffi/src/ffi.hh +354 -0
  821. package/node_modules/koffi/src/koffi/src/init.js +105 -0
  822. package/node_modules/koffi/src/koffi/src/parser.cc +220 -0
  823. package/node_modules/koffi/src/koffi/src/parser.hh +54 -0
  824. package/node_modules/koffi/src/koffi/src/util.cc +1807 -0
  825. package/node_modules/koffi/src/koffi/src/util.hh +221 -0
  826. package/node_modules/koffi/src/koffi/src/uv.cc +193 -0
  827. package/node_modules/koffi/src/koffi/src/uv.def +10 -0
  828. package/node_modules/koffi/src/koffi/src/uv.hh +40 -0
  829. package/node_modules/koffi/src/koffi/src/win32.cc +198 -0
  830. package/node_modules/koffi/src/koffi/src/win32.hh +119 -0
  831. package/node_modules/koffi/src/koffi/tools/write_trampolines.js +77 -0
  832. package/node_modules/koffi/vendor/node-addon-api/LICENSE.md +9 -0
  833. package/node_modules/koffi/vendor/node-addon-api/README.md +95 -0
  834. package/node_modules/koffi/vendor/node-addon-api/napi-inl.deprecated.h +186 -0
  835. package/node_modules/koffi/vendor/node-addon-api/napi-inl.h +7033 -0
  836. package/node_modules/koffi/vendor/node-addon-api/napi.h +3309 -0
  837. package/node_modules/koffi/vendor/node-api-headers/LICENSE +21 -0
  838. package/node_modules/koffi/vendor/node-api-headers/README.md +95 -0
  839. package/node_modules/koffi/vendor/node-api-headers/def/js_native_api.def +125 -0
  840. package/node_modules/koffi/vendor/node-api-headers/def/node_api.def +157 -0
  841. package/node_modules/koffi/vendor/node-api-headers/include/js_native_api.h +591 -0
  842. package/node_modules/koffi/vendor/node-api-headers/include/js_native_api_types.h +210 -0
  843. package/node_modules/koffi/vendor/node-api-headers/include/node_api.h +265 -0
  844. package/node_modules/koffi/vendor/node-api-headers/include/node_api_types.h +58 -0
  845. package/node_modules/koffi/vendor/node-api-headers/include/uv/aix.h +32 -0
  846. package/node_modules/koffi/vendor/node-api-headers/include/uv/bsd.h +34 -0
  847. package/node_modules/koffi/vendor/node-api-headers/include/uv/darwin.h +61 -0
  848. package/node_modules/koffi/vendor/node-api-headers/include/uv/errno.h +483 -0
  849. package/node_modules/koffi/vendor/node-api-headers/include/uv/linux.h +34 -0
  850. package/node_modules/koffi/vendor/node-api-headers/include/uv/os390.h +33 -0
  851. package/node_modules/koffi/vendor/node-api-headers/include/uv/posix.h +31 -0
  852. package/node_modules/koffi/vendor/node-api-headers/include/uv/sunos.h +44 -0
  853. package/node_modules/koffi/vendor/node-api-headers/include/uv/threadpool.h +37 -0
  854. package/node_modules/koffi/vendor/node-api-headers/include/uv/tree.h +521 -0
  855. package/node_modules/koffi/vendor/node-api-headers/include/uv/unix.h +512 -0
  856. package/node_modules/koffi/vendor/node-api-headers/include/uv/version.h +43 -0
  857. package/node_modules/koffi/vendor/node-api-headers/include/uv/win.h +698 -0
  858. package/node_modules/koffi/vendor/node-api-headers/include/uv.h +1990 -0
  859. package/package.json +12 -12
  860. package/themes/forge-matrix.json +89 -0
  861. package/themes/forge-mono.json +86 -0
  862. package/node_modules/@borewit/text-codec/LICENSE.txt +0 -9
  863. package/node_modules/@borewit/text-codec/README.md +0 -87
  864. package/node_modules/@borewit/text-codec/lib/index.d.ts +0 -6
  865. package/node_modules/@borewit/text-codec/lib/index.js +0 -380
  866. package/node_modules/@borewit/text-codec/package.json +0 -70
  867. package/node_modules/@entelligentsia/pi-agent-core/README.md +0 -488
  868. package/node_modules/@entelligentsia/pi-agent-core/dist/agent-loop.d.ts +0 -24
  869. package/node_modules/@entelligentsia/pi-agent-core/dist/agent-loop.d.ts.map +0 -1
  870. package/node_modules/@entelligentsia/pi-agent-core/dist/agent-loop.js +0 -458
  871. package/node_modules/@entelligentsia/pi-agent-core/dist/agent-loop.js.map +0 -1
  872. package/node_modules/@entelligentsia/pi-agent-core/dist/agent.d.ts +0 -117
  873. package/node_modules/@entelligentsia/pi-agent-core/dist/agent.d.ts.map +0 -1
  874. package/node_modules/@entelligentsia/pi-agent-core/dist/agent.js +0 -398
  875. package/node_modules/@entelligentsia/pi-agent-core/dist/agent.js.map +0 -1
  876. package/node_modules/@entelligentsia/pi-agent-core/dist/index.d.ts +0 -5
  877. package/node_modules/@entelligentsia/pi-agent-core/dist/index.d.ts.map +0 -1
  878. package/node_modules/@entelligentsia/pi-agent-core/dist/index.js +0 -9
  879. package/node_modules/@entelligentsia/pi-agent-core/dist/index.js.map +0 -1
  880. package/node_modules/@entelligentsia/pi-agent-core/dist/proxy.d.ts +0 -69
  881. package/node_modules/@entelligentsia/pi-agent-core/dist/proxy.d.ts.map +0 -1
  882. package/node_modules/@entelligentsia/pi-agent-core/dist/proxy.js +0 -278
  883. package/node_modules/@entelligentsia/pi-agent-core/dist/proxy.js.map +0 -1
  884. package/node_modules/@entelligentsia/pi-agent-core/dist/types.d.ts +0 -369
  885. package/node_modules/@entelligentsia/pi-agent-core/dist/types.d.ts.map +0 -1
  886. package/node_modules/@entelligentsia/pi-agent-core/dist/types.js.map +0 -1
  887. package/node_modules/@entelligentsia/pi-agent-core/package.json +0 -45
  888. package/node_modules/@entelligentsia/pi-ai/README.md +0 -1313
  889. package/node_modules/@entelligentsia/pi-ai/dist/cli.d.ts.map +0 -1
  890. package/node_modules/@entelligentsia/pi-ai/dist/cli.js +0 -116
  891. package/node_modules/@entelligentsia/pi-ai/dist/cli.js.map +0 -1
  892. package/node_modules/@entelligentsia/pi-ai/dist/env-api-keys.d.ts.map +0 -1
  893. package/node_modules/@entelligentsia/pi-ai/dist/env-api-keys.js +0 -169
  894. package/node_modules/@entelligentsia/pi-ai/dist/env-api-keys.js.map +0 -1
  895. package/node_modules/@entelligentsia/pi-ai/dist/index.d.ts +0 -28
  896. package/node_modules/@entelligentsia/pi-ai/dist/index.d.ts.map +0 -1
  897. package/node_modules/@entelligentsia/pi-ai/dist/index.js +0 -16
  898. package/node_modules/@entelligentsia/pi-ai/dist/index.js.map +0 -1
  899. package/node_modules/@entelligentsia/pi-ai/dist/models.generated.d.ts +0 -17265
  900. package/node_modules/@entelligentsia/pi-ai/dist/models.generated.d.ts.map +0 -1
  901. package/node_modules/@entelligentsia/pi-ai/dist/models.generated.js +0 -16500
  902. package/node_modules/@entelligentsia/pi-ai/dist/models.generated.js.map +0 -1
  903. package/node_modules/@entelligentsia/pi-ai/dist/providers/amazon-bedrock.d.ts.map +0 -1
  904. package/node_modules/@entelligentsia/pi-ai/dist/providers/amazon-bedrock.js +0 -759
  905. package/node_modules/@entelligentsia/pi-ai/dist/providers/amazon-bedrock.js.map +0 -1
  906. package/node_modules/@entelligentsia/pi-ai/dist/providers/anthropic.d.ts.map +0 -1
  907. package/node_modules/@entelligentsia/pi-ai/dist/providers/anthropic.js +0 -951
  908. package/node_modules/@entelligentsia/pi-ai/dist/providers/anthropic.js.map +0 -1
  909. package/node_modules/@entelligentsia/pi-ai/dist/providers/openai-codex-responses.d.ts.map +0 -1
  910. package/node_modules/@entelligentsia/pi-ai/dist/providers/openai-codex-responses.js +0 -1034
  911. package/node_modules/@entelligentsia/pi-ai/dist/providers/openai-codex-responses.js.map +0 -1
  912. package/node_modules/@entelligentsia/pi-ai/dist/providers/openai-completions.d.ts.map +0 -1
  913. package/node_modules/@entelligentsia/pi-ai/dist/providers/openai-completions.js +0 -925
  914. package/node_modules/@entelligentsia/pi-ai/dist/providers/openai-completions.js.map +0 -1
  915. package/node_modules/@entelligentsia/pi-ai/dist/providers/simple-options.d.ts.map +0 -1
  916. package/node_modules/@entelligentsia/pi-ai/dist/providers/simple-options.js +0 -39
  917. package/node_modules/@entelligentsia/pi-ai/dist/providers/simple-options.js.map +0 -1
  918. package/node_modules/@entelligentsia/pi-ai/dist/types.d.ts +0 -405
  919. package/node_modules/@entelligentsia/pi-ai/dist/types.d.ts.map +0 -1
  920. package/node_modules/@entelligentsia/pi-ai/dist/types.js.map +0 -1
  921. package/node_modules/@entelligentsia/pi-ai/dist/utils/overflow.d.ts +0 -55
  922. package/node_modules/@entelligentsia/pi-ai/dist/utils/overflow.d.ts.map +0 -1
  923. package/node_modules/@entelligentsia/pi-ai/dist/utils/overflow.js +0 -146
  924. package/node_modules/@entelligentsia/pi-ai/dist/utils/overflow.js.map +0 -1
  925. package/node_modules/@entelligentsia/pi-ai/package.json +0 -108
  926. package/node_modules/@entelligentsia/pi-coding-agent/CHANGELOG.md +0 -4166
  927. package/node_modules/@entelligentsia/pi-coding-agent/README.md +0 -652
  928. package/node_modules/@entelligentsia/pi-coding-agent/dist/bun/register-bedrock.d.ts.map +0 -1
  929. package/node_modules/@entelligentsia/pi-coding-agent/dist/bun/register-bedrock.js +0 -4
  930. package/node_modules/@entelligentsia/pi-coding-agent/dist/bun/register-bedrock.js.map +0 -1
  931. package/node_modules/@entelligentsia/pi-coding-agent/dist/cli/args.d.ts +0 -53
  932. package/node_modules/@entelligentsia/pi-coding-agent/dist/cli/args.d.ts.map +0 -1
  933. package/node_modules/@entelligentsia/pi-coding-agent/dist/cli/args.js +0 -340
  934. package/node_modules/@entelligentsia/pi-coding-agent/dist/cli/args.js.map +0 -1
  935. package/node_modules/@entelligentsia/pi-coding-agent/dist/cli/config-selector.d.ts.map +0 -1
  936. package/node_modules/@entelligentsia/pi-coding-agent/dist/cli/config-selector.js +0 -31
  937. package/node_modules/@entelligentsia/pi-coding-agent/dist/cli/config-selector.js.map +0 -1
  938. package/node_modules/@entelligentsia/pi-coding-agent/dist/cli/file-processor.d.ts +0 -15
  939. package/node_modules/@entelligentsia/pi-coding-agent/dist/cli/file-processor.d.ts.map +0 -1
  940. package/node_modules/@entelligentsia/pi-coding-agent/dist/cli/file-processor.js.map +0 -1
  941. package/node_modules/@entelligentsia/pi-coding-agent/dist/cli/initial-message.d.ts +0 -18
  942. package/node_modules/@entelligentsia/pi-coding-agent/dist/cli/initial-message.d.ts.map +0 -1
  943. package/node_modules/@entelligentsia/pi-coding-agent/dist/cli/initial-message.js.map +0 -1
  944. package/node_modules/@entelligentsia/pi-coding-agent/dist/cli/list-models.d.ts.map +0 -1
  945. package/node_modules/@entelligentsia/pi-coding-agent/dist/cli/list-models.js +0 -98
  946. package/node_modules/@entelligentsia/pi-coding-agent/dist/cli/list-models.js.map +0 -1
  947. package/node_modules/@entelligentsia/pi-coding-agent/dist/cli/session-picker.d.ts.map +0 -1
  948. package/node_modules/@entelligentsia/pi-coding-agent/dist/cli/session-picker.js +0 -35
  949. package/node_modules/@entelligentsia/pi-coding-agent/dist/cli/session-picker.js.map +0 -1
  950. package/node_modules/@entelligentsia/pi-coding-agent/dist/cli.d.ts.map +0 -1
  951. package/node_modules/@entelligentsia/pi-coding-agent/dist/cli.js +0 -20
  952. package/node_modules/@entelligentsia/pi-coding-agent/dist/cli.js.map +0 -1
  953. package/node_modules/@entelligentsia/pi-coding-agent/dist/config.d.ts.map +0 -1
  954. package/node_modules/@entelligentsia/pi-coding-agent/dist/config.js +0 -399
  955. package/node_modules/@entelligentsia/pi-coding-agent/dist/config.js.map +0 -1
  956. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/agent-session-services.d.ts +0 -86
  957. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/agent-session-services.d.ts.map +0 -1
  958. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/agent-session-services.js.map +0 -1
  959. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/agent-session.d.ts +0 -595
  960. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/agent-session.d.ts.map +0 -1
  961. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/agent-session.js +0 -2521
  962. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/agent-session.js.map +0 -1
  963. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/auth-storage.d.ts +0 -141
  964. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/auth-storage.d.ts.map +0 -1
  965. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/auth-storage.js +0 -441
  966. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/auth-storage.js.map +0 -1
  967. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/bash-executor.d.ts.map +0 -1
  968. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/bash-executor.js +0 -111
  969. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/bash-executor.js.map +0 -1
  970. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/compaction/branch-summarization.d.ts +0 -88
  971. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/compaction/branch-summarization.d.ts.map +0 -1
  972. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/compaction/branch-summarization.js +0 -243
  973. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/compaction/branch-summarization.js.map +0 -1
  974. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/compaction/compaction.d.ts +0 -121
  975. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +0 -1
  976. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/compaction/compaction.js +0 -615
  977. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/compaction/compaction.js.map +0 -1
  978. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/compaction/utils.d.ts +0 -38
  979. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/compaction/utils.d.ts.map +0 -1
  980. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/compaction/utils.js.map +0 -1
  981. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/defaults.d.ts +0 -3
  982. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/defaults.d.ts.map +0 -1
  983. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/defaults.js.map +0 -1
  984. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/export-html/index.d.ts +0 -37
  985. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/export-html/index.d.ts.map +0 -1
  986. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/export-html/index.js.map +0 -1
  987. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/export-html/tool-renderer.d.ts.map +0 -1
  988. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/export-html/tool-renderer.js.map +0 -1
  989. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/extensions/loader.d.ts.map +0 -1
  990. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/extensions/loader.js +0 -498
  991. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/extensions/loader.js.map +0 -1
  992. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/extensions/runner.d.ts +0 -159
  993. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/extensions/runner.d.ts.map +0 -1
  994. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/extensions/runner.js +0 -825
  995. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/extensions/runner.js.map +0 -1
  996. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/extensions/types.d.ts +0 -1187
  997. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/extensions/types.d.ts.map +0 -1
  998. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/extensions/types.js.map +0 -1
  999. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/extensions/wrapper.d.ts +0 -20
  1000. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/extensions/wrapper.d.ts.map +0 -1
  1001. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/extensions/wrapper.js.map +0 -1
  1002. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/keybindings.d.ts +0 -353
  1003. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/keybindings.d.ts.map +0 -1
  1004. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/keybindings.js +0 -295
  1005. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/keybindings.js.map +0 -1
  1006. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/messages.d.ts +0 -77
  1007. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/messages.d.ts.map +0 -1
  1008. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/messages.js.map +0 -1
  1009. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/model-registry.d.ts +0 -150
  1010. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/model-registry.d.ts.map +0 -1
  1011. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/model-registry.js +0 -727
  1012. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/model-registry.js.map +0 -1
  1013. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/model-resolver.d.ts +0 -110
  1014. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/model-resolver.d.ts.map +0 -1
  1015. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/model-resolver.js +0 -494
  1016. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/model-resolver.js.map +0 -1
  1017. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/package-manager.d.ts +0 -198
  1018. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/package-manager.d.ts.map +0 -1
  1019. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/package-manager.js +0 -1958
  1020. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/package-manager.js.map +0 -1
  1021. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/prompt-templates.d.ts.map +0 -1
  1022. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/prompt-templates.js +0 -250
  1023. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/prompt-templates.js.map +0 -1
  1024. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/provider-display-names.d.ts.map +0 -1
  1025. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/provider-display-names.js +0 -32
  1026. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/provider-display-names.js.map +0 -1
  1027. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/sdk.d.ts +0 -107
  1028. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/sdk.d.ts.map +0 -1
  1029. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/sdk.js +0 -282
  1030. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/sdk.js.map +0 -1
  1031. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/session-manager.d.ts +0 -333
  1032. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/session-manager.d.ts.map +0 -1
  1033. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/session-manager.js +0 -1109
  1034. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/session-manager.js.map +0 -1
  1035. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/settings-manager.d.ts +0 -261
  1036. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/settings-manager.d.ts.map +0 -1
  1037. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/settings-manager.js.map +0 -1
  1038. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/skills.d.ts.map +0 -1
  1039. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/skills.js +0 -404
  1040. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/skills.js.map +0 -1
  1041. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/bash.d.ts +0 -68
  1042. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/bash.d.ts.map +0 -1
  1043. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/bash.js +0 -335
  1044. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/bash.js.map +0 -1
  1045. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/edit.d.ts +0 -49
  1046. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/edit.d.ts.map +0 -1
  1047. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/edit.js +0 -324
  1048. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/edit.js.map +0 -1
  1049. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/find.d.ts +0 -35
  1050. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/find.d.ts.map +0 -1
  1051. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/find.js +0 -298
  1052. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/find.js.map +0 -1
  1053. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/grep.d.ts +0 -37
  1054. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/grep.d.ts.map +0 -1
  1055. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/grep.js +0 -304
  1056. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/grep.js.map +0 -1
  1057. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/index.d.ts +0 -40
  1058. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/index.d.ts.map +0 -1
  1059. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/index.js.map +0 -1
  1060. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/ls.d.ts +0 -37
  1061. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/ls.d.ts.map +0 -1
  1062. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/ls.js +0 -169
  1063. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/ls.js.map +0 -1
  1064. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/read.d.ts +0 -35
  1065. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/read.d.ts.map +0 -1
  1066. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/read.js +0 -289
  1067. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/read.js.map +0 -1
  1068. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/render-utils.d.ts +0 -21
  1069. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/render-utils.d.ts.map +0 -1
  1070. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/render-utils.js +0 -49
  1071. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/render-utils.js.map +0 -1
  1072. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/tool-definition-wrapper.d.ts +0 -14
  1073. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/tool-definition-wrapper.d.ts.map +0 -1
  1074. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/tool-definition-wrapper.js.map +0 -1
  1075. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/write.d.ts +0 -26
  1076. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/write.d.ts.map +0 -1
  1077. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/write.js +0 -213
  1078. package/node_modules/@entelligentsia/pi-coding-agent/dist/core/tools/write.js.map +0 -1
  1079. package/node_modules/@entelligentsia/pi-coding-agent/dist/main.d.ts.map +0 -1
  1080. package/node_modules/@entelligentsia/pi-coding-agent/dist/main.js +0 -583
  1081. package/node_modules/@entelligentsia/pi-coding-agent/dist/main.js.map +0 -1
  1082. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/armin.d.ts +0 -34
  1083. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/armin.d.ts.map +0 -1
  1084. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/armin.js.map +0 -1
  1085. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/assistant-message.d.ts +0 -20
  1086. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/assistant-message.d.ts.map +0 -1
  1087. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/assistant-message.js +0 -121
  1088. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/assistant-message.js.map +0 -1
  1089. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/bash-execution.d.ts +0 -34
  1090. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/bash-execution.d.ts.map +0 -1
  1091. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/bash-execution.js +0 -175
  1092. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/bash-execution.js.map +0 -1
  1093. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/bordered-loader.d.ts +0 -16
  1094. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/bordered-loader.d.ts.map +0 -1
  1095. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/bordered-loader.js +0 -54
  1096. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/bordered-loader.js.map +0 -1
  1097. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/branch-summary-message.d.ts +0 -16
  1098. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/branch-summary-message.d.ts.map +0 -1
  1099. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/branch-summary-message.js +0 -44
  1100. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/branch-summary-message.js.map +0 -1
  1101. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/compaction-summary-message.d.ts +0 -16
  1102. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/compaction-summary-message.d.ts.map +0 -1
  1103. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/compaction-summary-message.js +0 -45
  1104. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/compaction-summary-message.js.map +0 -1
  1105. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/config-selector.d.ts +0 -71
  1106. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/config-selector.d.ts.map +0 -1
  1107. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/config-selector.js +0 -481
  1108. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/config-selector.js.map +0 -1
  1109. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/countdown-timer.d.ts +0 -14
  1110. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/countdown-timer.d.ts.map +0 -1
  1111. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/countdown-timer.js.map +0 -1
  1112. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/custom-editor.d.ts +0 -21
  1113. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/custom-editor.d.ts.map +0 -1
  1114. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/custom-editor.js +0 -70
  1115. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/custom-editor.js.map +0 -1
  1116. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/custom-message.d.ts +0 -20
  1117. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/custom-message.d.ts.map +0 -1
  1118. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/custom-message.js +0 -79
  1119. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/custom-message.js.map +0 -1
  1120. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/daxnuts.d.ts +0 -23
  1121. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/daxnuts.d.ts.map +0 -1
  1122. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/daxnuts.js.map +0 -1
  1123. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/dynamic-border.d.ts +0 -15
  1124. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/dynamic-border.d.ts.map +0 -1
  1125. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/dynamic-border.js.map +0 -1
  1126. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/earendil-announcement.d.ts +0 -5
  1127. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/earendil-announcement.d.ts.map +0 -1
  1128. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/earendil-announcement.js +0 -40
  1129. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/earendil-announcement.js.map +0 -1
  1130. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/extension-editor.d.ts +0 -20
  1131. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/extension-editor.d.ts.map +0 -1
  1132. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/extension-editor.js +0 -111
  1133. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/extension-editor.js.map +0 -1
  1134. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/extension-input.d.ts +0 -23
  1135. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/extension-input.d.ts.map +0 -1
  1136. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/extension-input.js +0 -61
  1137. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/extension-input.js.map +0 -1
  1138. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/extension-selector.d.ts +0 -24
  1139. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/extension-selector.d.ts.map +0 -1
  1140. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/extension-selector.js +0 -78
  1141. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/extension-selector.js.map +0 -1
  1142. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/footer.d.ts +0 -27
  1143. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +0 -1
  1144. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/footer.js +0 -201
  1145. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/footer.js.map +0 -1
  1146. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/keybinding-hints.d.ts +0 -8
  1147. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/keybinding-hints.d.ts.map +0 -1
  1148. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/keybinding-hints.js +0 -22
  1149. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/keybinding-hints.js.map +0 -1
  1150. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/login-dialog.d.ts +0 -46
  1151. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/login-dialog.d.ts.map +0 -1
  1152. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/login-dialog.js +0 -160
  1153. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/login-dialog.js.map +0 -1
  1154. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/model-selector.d.ts +0 -47
  1155. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/model-selector.d.ts.map +0 -1
  1156. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/model-selector.js +0 -278
  1157. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/model-selector.js.map +0 -1
  1158. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/oauth-selector.d.ts +0 -31
  1159. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/oauth-selector.d.ts.map +0 -1
  1160. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/oauth-selector.js +0 -165
  1161. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/oauth-selector.js.map +0 -1
  1162. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/scoped-models-selector.d.ts +0 -42
  1163. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/scoped-models-selector.d.ts.map +0 -1
  1164. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/scoped-models-selector.js +0 -290
  1165. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/scoped-models-selector.js.map +0 -1
  1166. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/session-selector-search.d.ts.map +0 -1
  1167. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/session-selector-search.js +0 -155
  1168. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/session-selector-search.js.map +0 -1
  1169. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/session-selector.d.ts +0 -96
  1170. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/session-selector.d.ts.map +0 -1
  1171. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/session-selector.js +0 -861
  1172. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/session-selector.js.map +0 -1
  1173. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts +0 -67
  1174. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +0 -1
  1175. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +0 -373
  1176. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/settings-selector.js.map +0 -1
  1177. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/show-images-selector.d.ts +0 -10
  1178. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/show-images-selector.d.ts.map +0 -1
  1179. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/show-images-selector.js +0 -39
  1180. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/show-images-selector.js.map +0 -1
  1181. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.d.ts +0 -17
  1182. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.d.ts.map +0 -1
  1183. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.js +0 -47
  1184. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.js.map +0 -1
  1185. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/theme-selector.d.ts +0 -11
  1186. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/theme-selector.d.ts.map +0 -1
  1187. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/theme-selector.js +0 -50
  1188. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/theme-selector.js.map +0 -1
  1189. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/thinking-selector.d.ts +0 -11
  1190. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/thinking-selector.d.ts.map +0 -1
  1191. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/thinking-selector.js +0 -51
  1192. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/thinking-selector.js.map +0 -1
  1193. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +0 -63
  1194. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +0 -1
  1195. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +0 -295
  1196. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +0 -1
  1197. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/tree-selector.d.ts +0 -89
  1198. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/tree-selector.d.ts.map +0 -1
  1199. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/tree-selector.js +0 -1092
  1200. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/tree-selector.js.map +0 -1
  1201. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/user-message-selector.d.ts +0 -30
  1202. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/user-message-selector.d.ts.map +0 -1
  1203. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/user-message-selector.js +0 -114
  1204. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/user-message-selector.js.map +0 -1
  1205. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts +0 -10
  1206. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts.map +0 -1
  1207. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/user-message.js +0 -29
  1208. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/user-message.js.map +0 -1
  1209. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/visual-truncate.d.ts.map +0 -1
  1210. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/visual-truncate.js +0 -33
  1211. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/components/visual-truncate.js.map +0 -1
  1212. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +0 -374
  1213. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +0 -1
  1214. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/interactive-mode.js +0 -4625
  1215. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +0 -1
  1216. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/theme/dark.json +0 -85
  1217. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/theme/light.json +0 -84
  1218. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +0 -81
  1219. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +0 -1
  1220. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/theme/theme.js +0 -971
  1221. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +0 -1
  1222. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/print-mode.d.ts +0 -28
  1223. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/print-mode.d.ts.map +0 -1
  1224. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/print-mode.js.map +0 -1
  1225. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts +0 -224
  1226. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts.map +0 -1
  1227. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/rpc/rpc-client.js.map +0 -1
  1228. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts.map +0 -1
  1229. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/rpc/rpc-mode.js +0 -604
  1230. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +0 -1
  1231. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts +0 -419
  1232. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts.map +0 -1
  1233. package/node_modules/@entelligentsia/pi-coding-agent/dist/modes/rpc/rpc-types.js.map +0 -1
  1234. package/node_modules/@entelligentsia/pi-coding-agent/dist/utils/image-resize.d.ts +0 -36
  1235. package/node_modules/@entelligentsia/pi-coding-agent/dist/utils/image-resize.d.ts.map +0 -1
  1236. package/node_modules/@entelligentsia/pi-coding-agent/dist/utils/image-resize.js.map +0 -1
  1237. package/node_modules/@entelligentsia/pi-coding-agent/dist/utils/mime.d.ts +0 -2
  1238. package/node_modules/@entelligentsia/pi-coding-agent/dist/utils/mime.d.ts.map +0 -1
  1239. package/node_modules/@entelligentsia/pi-coding-agent/dist/utils/mime.js +0 -26
  1240. package/node_modules/@entelligentsia/pi-coding-agent/dist/utils/mime.js.map +0 -1
  1241. package/node_modules/@entelligentsia/pi-coding-agent/dist/utils/tools-manager.d.ts.map +0 -1
  1242. package/node_modules/@entelligentsia/pi-coding-agent/dist/utils/tools-manager.js +0 -256
  1243. package/node_modules/@entelligentsia/pi-coding-agent/dist/utils/tools-manager.js.map +0 -1
  1244. package/node_modules/@entelligentsia/pi-coding-agent/docs/compaction.md +0 -394
  1245. package/node_modules/@entelligentsia/pi-coding-agent/docs/custom-provider.md +0 -646
  1246. package/node_modules/@entelligentsia/pi-coding-agent/docs/extensions.md +0 -2596
  1247. package/node_modules/@entelligentsia/pi-coding-agent/docs/index.md +0 -70
  1248. package/node_modules/@entelligentsia/pi-coding-agent/docs/models.md +0 -474
  1249. package/node_modules/@entelligentsia/pi-coding-agent/docs/packages.md +0 -223
  1250. package/node_modules/@entelligentsia/pi-coding-agent/docs/providers.md +0 -241
  1251. package/node_modules/@entelligentsia/pi-coding-agent/docs/quickstart.md +0 -142
  1252. package/node_modules/@entelligentsia/pi-coding-agent/docs/rpc.md +0 -1407
  1253. package/node_modules/@entelligentsia/pi-coding-agent/docs/sdk.md +0 -1149
  1254. package/node_modules/@entelligentsia/pi-coding-agent/docs/session-format.md +0 -412
  1255. package/node_modules/@entelligentsia/pi-coding-agent/docs/skills.md +0 -232
  1256. package/node_modules/@entelligentsia/pi-coding-agent/docs/termux.md +0 -127
  1257. package/node_modules/@entelligentsia/pi-coding-agent/docs/themes.md +0 -295
  1258. package/node_modules/@entelligentsia/pi-coding-agent/docs/tui.md +0 -918
  1259. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/README.md +0 -208
  1260. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/auto-commit-on-exit.ts +0 -49
  1261. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/bash-spawn-hook.ts +0 -30
  1262. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/bookmark.ts +0 -50
  1263. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/border-status-editor.ts +0 -150
  1264. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/built-in-tool-renderer.ts +0 -249
  1265. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/claude-rules.ts +0 -86
  1266. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/commands.ts +0 -72
  1267. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/confirm-destructive.ts +0 -59
  1268. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/custom-compaction.ts +0 -127
  1269. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/custom-footer.ts +0 -64
  1270. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/custom-header.ts +0 -73
  1271. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/custom-provider-anthropic/index.ts +0 -604
  1272. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/custom-provider-anthropic/package-lock.json +0 -24
  1273. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/custom-provider-anthropic/package.json +0 -19
  1274. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/custom-provider-gitlab-duo/index.ts +0 -349
  1275. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/custom-provider-gitlab-duo/package.json +0 -16
  1276. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/custom-provider-gitlab-duo/test.ts +0 -82
  1277. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/dirty-repo-guard.ts +0 -56
  1278. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/doom-overlay/doom-component.ts +0 -132
  1279. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/doom-overlay/doom-keys.ts +0 -104
  1280. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/doom-overlay/index.ts +0 -74
  1281. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/dynamic-resources/dynamic.json +0 -79
  1282. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/dynamic-resources/index.ts +0 -15
  1283. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/dynamic-tools.ts +0 -74
  1284. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/event-bus.ts +0 -43
  1285. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/file-trigger.ts +0 -41
  1286. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/git-checkpoint.ts +0 -53
  1287. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/github-issue-autocomplete.ts +0 -185
  1288. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/handoff.ts +0 -191
  1289. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/hello.ts +0 -26
  1290. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/hidden-thinking-label.ts +0 -53
  1291. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/inline-bash.ts +0 -94
  1292. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/input-transform.ts +0 -43
  1293. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/interactive-shell.ts +0 -196
  1294. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/mac-system-theme.ts +0 -47
  1295. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/message-renderer.ts +0 -59
  1296. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/minimal-mode.ts +0 -426
  1297. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/modal-editor.ts +0 -85
  1298. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/model-status.ts +0 -31
  1299. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/notify.ts +0 -55
  1300. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/overlay-qa-tests.ts +0 -1348
  1301. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/overlay-test.ts +0 -150
  1302. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/permission-gate.ts +0 -34
  1303. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/pirate.ts +0 -47
  1304. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/plan-mode/index.ts +0 -340
  1305. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/preset.ts +0 -430
  1306. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/prompt-customizer.ts +0 -97
  1307. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/protected-paths.ts +0 -30
  1308. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/provider-payload.ts +0 -18
  1309. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/qna.ts +0 -122
  1310. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/question.ts +0 -264
  1311. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/questionnaire.ts +0 -427
  1312. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/rainbow-editor.ts +0 -88
  1313. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/reload-runtime.ts +0 -37
  1314. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/rpc-demo.ts +0 -118
  1315. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/sandbox/index.ts +0 -321
  1316. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/sandbox/package-lock.json +0 -92
  1317. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/sandbox/package.json +0 -19
  1318. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/send-user-message.ts +0 -97
  1319. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/session-name.ts +0 -27
  1320. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/shutdown-command.ts +0 -63
  1321. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/snake.ts +0 -343
  1322. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/space-invaders.ts +0 -560
  1323. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/ssh.ts +0 -220
  1324. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/status-line.ts +0 -32
  1325. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/structured-output.ts +0 -65
  1326. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/subagent/agents.ts +0 -126
  1327. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/subagent/index.ts +0 -987
  1328. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/summarize.ts +0 -206
  1329. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/system-prompt-header.ts +0 -17
  1330. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/tic-tac-toe.ts +0 -1008
  1331. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/timed-confirm.ts +0 -70
  1332. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/titlebar-spinner.ts +0 -58
  1333. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/todo.ts +0 -297
  1334. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/tool-override.ts +0 -144
  1335. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/tools.ts +0 -141
  1336. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/trigger-compact.ts +0 -50
  1337. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/truncated-tool.ts +0 -195
  1338. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/widget-placement.ts +0 -9
  1339. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/with-deps/index.ts +0 -32
  1340. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/with-deps/package-lock.json +0 -31
  1341. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/with-deps/package.json +0 -22
  1342. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/working-indicator.ts +0 -123
  1343. package/node_modules/@entelligentsia/pi-coding-agent/examples/extensions/working-message-test.ts +0 -25
  1344. package/node_modules/@entelligentsia/pi-coding-agent/examples/rpc-extension-ui.ts +0 -632
  1345. package/node_modules/@entelligentsia/pi-coding-agent/examples/sdk/01-minimal.ts +0 -22
  1346. package/node_modules/@entelligentsia/pi-coding-agent/examples/sdk/02-custom-model.ts +0 -49
  1347. package/node_modules/@entelligentsia/pi-coding-agent/examples/sdk/03-custom-prompt.ts +0 -67
  1348. package/node_modules/@entelligentsia/pi-coding-agent/examples/sdk/04-skills.ts +0 -55
  1349. package/node_modules/@entelligentsia/pi-coding-agent/examples/sdk/05-tools.ts +0 -44
  1350. package/node_modules/@entelligentsia/pi-coding-agent/examples/sdk/06-extensions.ts +0 -95
  1351. package/node_modules/@entelligentsia/pi-coding-agent/examples/sdk/07-context-files.ts +0 -47
  1352. package/node_modules/@entelligentsia/pi-coding-agent/examples/sdk/08-prompt-templates.ts +0 -51
  1353. package/node_modules/@entelligentsia/pi-coding-agent/examples/sdk/09-api-keys-and-oauth.ts +0 -48
  1354. package/node_modules/@entelligentsia/pi-coding-agent/examples/sdk/10-settings.ts +0 -53
  1355. package/node_modules/@entelligentsia/pi-coding-agent/examples/sdk/11-sessions.ts +0 -48
  1356. package/node_modules/@entelligentsia/pi-coding-agent/examples/sdk/12-full-control.ts +0 -73
  1357. package/node_modules/@entelligentsia/pi-coding-agent/examples/sdk/13-session-runtime.ts +0 -67
  1358. package/node_modules/@entelligentsia/pi-coding-agent/examples/sdk/README.md +0 -147
  1359. package/node_modules/@entelligentsia/pi-coding-agent/package.json +0 -97
  1360. package/node_modules/@entelligentsia/pi-tui/README.md +0 -779
  1361. package/node_modules/@entelligentsia/pi-tui/dist/components/image.d.ts.map +0 -1
  1362. package/node_modules/@entelligentsia/pi-tui/dist/components/image.js +0 -76
  1363. package/node_modules/@entelligentsia/pi-tui/dist/components/image.js.map +0 -1
  1364. package/node_modules/@entelligentsia/pi-tui/dist/components/markdown.d.ts +0 -95
  1365. package/node_modules/@entelligentsia/pi-tui/dist/components/markdown.d.ts.map +0 -1
  1366. package/node_modules/@entelligentsia/pi-tui/dist/components/markdown.js +0 -688
  1367. package/node_modules/@entelligentsia/pi-tui/dist/components/markdown.js.map +0 -1
  1368. package/node_modules/@entelligentsia/pi-tui/dist/stdin-buffer.d.ts.map +0 -1
  1369. package/node_modules/@entelligentsia/pi-tui/dist/stdin-buffer.js +0 -339
  1370. package/node_modules/@entelligentsia/pi-tui/dist/stdin-buffer.js.map +0 -1
  1371. package/node_modules/@entelligentsia/pi-tui/dist/terminal-image.d.ts +0 -85
  1372. package/node_modules/@entelligentsia/pi-tui/dist/terminal-image.d.ts.map +0 -1
  1373. package/node_modules/@entelligentsia/pi-tui/dist/terminal-image.js +0 -324
  1374. package/node_modules/@entelligentsia/pi-tui/dist/terminal-image.js.map +0 -1
  1375. package/node_modules/@entelligentsia/pi-tui/package.json +0 -49
  1376. package/node_modules/@tokenizer/inflate/LICENSE +0 -15
  1377. package/node_modules/@tokenizer/inflate/README.md +0 -114
  1378. package/node_modules/@tokenizer/inflate/lib/GzipHandler.d.ts +0 -6
  1379. package/node_modules/@tokenizer/inflate/lib/GzipHandler.js +0 -19
  1380. package/node_modules/@tokenizer/inflate/lib/ZipHandler.d.ts +0 -26
  1381. package/node_modules/@tokenizer/inflate/lib/ZipHandler.js +0 -233
  1382. package/node_modules/@tokenizer/inflate/lib/ZipToken.d.ts +0 -94
  1383. package/node_modules/@tokenizer/inflate/lib/ZipToken.js +0 -117
  1384. package/node_modules/@tokenizer/inflate/lib/index.d.ts +0 -3
  1385. package/node_modules/@tokenizer/inflate/lib/index.js +0 -2
  1386. package/node_modules/@tokenizer/inflate/package.json +0 -76
  1387. package/node_modules/@tokenizer/token/README.md +0 -19
  1388. package/node_modules/@tokenizer/token/index.d.ts +0 -30
  1389. package/node_modules/@tokenizer/token/package.json +0 -33
  1390. package/node_modules/@tootallnate/quickjs-emscripten/LICENSE +0 -21
  1391. package/node_modules/@tootallnate/quickjs-emscripten/README.md +0 -597
  1392. package/node_modules/@tootallnate/quickjs-emscripten/c/interface.c +0 -819
  1393. package/node_modules/@tootallnate/quickjs-emscripten/dist/asyncify-helpers.d.ts +0 -24
  1394. package/node_modules/@tootallnate/quickjs-emscripten/dist/asyncify-helpers.js +0 -53
  1395. package/node_modules/@tootallnate/quickjs-emscripten/dist/asyncify-helpers.js.map +0 -1
  1396. package/node_modules/@tootallnate/quickjs-emscripten/dist/context-asyncify.d.ts +0 -48
  1397. package/node_modules/@tootallnate/quickjs-emscripten/dist/context-asyncify.js +0 -58
  1398. package/node_modules/@tootallnate/quickjs-emscripten/dist/context-asyncify.js.map +0 -1
  1399. package/node_modules/@tootallnate/quickjs-emscripten/dist/context.d.ts +0 -371
  1400. package/node_modules/@tootallnate/quickjs-emscripten/dist/context.js +0 -691
  1401. package/node_modules/@tootallnate/quickjs-emscripten/dist/context.js.map +0 -1
  1402. package/node_modules/@tootallnate/quickjs-emscripten/dist/debug.d.ts +0 -5
  1403. package/node_modules/@tootallnate/quickjs-emscripten/dist/debug.js +0 -6
  1404. package/node_modules/@tootallnate/quickjs-emscripten/dist/debug.js.map +0 -1
  1405. package/node_modules/@tootallnate/quickjs-emscripten/dist/deferred-promise.d.ts +0 -75
  1406. package/node_modules/@tootallnate/quickjs-emscripten/dist/deferred-promise.js +0 -96
  1407. package/node_modules/@tootallnate/quickjs-emscripten/dist/deferred-promise.js.map +0 -1
  1408. package/node_modules/@tootallnate/quickjs-emscripten/dist/emscripten-types.d.ts +0 -97
  1409. package/node_modules/@tootallnate/quickjs-emscripten/dist/emscripten-types.js +0 -15
  1410. package/node_modules/@tootallnate/quickjs-emscripten/dist/emscripten-types.js.map +0 -1
  1411. package/node_modules/@tootallnate/quickjs-emscripten/dist/errors.d.ts +0 -28
  1412. package/node_modules/@tootallnate/quickjs-emscripten/dist/errors.js +0 -58
  1413. package/node_modules/@tootallnate/quickjs-emscripten/dist/errors.js.map +0 -1
  1414. package/node_modules/@tootallnate/quickjs-emscripten/dist/esmHelpers.d.ts +0 -9
  1415. package/node_modules/@tootallnate/quickjs-emscripten/dist/esmHelpers.js +0 -19
  1416. package/node_modules/@tootallnate/quickjs-emscripten/dist/esmHelpers.js.map +0 -1
  1417. package/node_modules/@tootallnate/quickjs-emscripten/dist/generated/emscripten-module.WASM_RELEASE_SYNC.d.ts +0 -5
  1418. package/node_modules/@tootallnate/quickjs-emscripten/dist/generated/emscripten-module.WASM_RELEASE_SYNC.js +0 -387
  1419. package/node_modules/@tootallnate/quickjs-emscripten/dist/generated/emscripten-module.WASM_RELEASE_SYNC.js.map +0 -1
  1420. package/node_modules/@tootallnate/quickjs-emscripten/dist/generated/ffi.WASM_RELEASE_SYNC.d.ts +0 -67
  1421. package/node_modules/@tootallnate/quickjs-emscripten/dist/generated/ffi.WASM_RELEASE_SYNC.js +0 -71
  1422. package/node_modules/@tootallnate/quickjs-emscripten/dist/generated/ffi.WASM_RELEASE_SYNC.js.map +0 -1
  1423. package/node_modules/@tootallnate/quickjs-emscripten/dist/index.d.ts +0 -75
  1424. package/node_modules/@tootallnate/quickjs-emscripten/dist/index.js +0 -128
  1425. package/node_modules/@tootallnate/quickjs-emscripten/dist/index.js.map +0 -1
  1426. package/node_modules/@tootallnate/quickjs-emscripten/dist/lifetime.d.ts +0 -115
  1427. package/node_modules/@tootallnate/quickjs-emscripten/dist/lifetime.js +0 -227
  1428. package/node_modules/@tootallnate/quickjs-emscripten/dist/lifetime.js.map +0 -1
  1429. package/node_modules/@tootallnate/quickjs-emscripten/dist/memory.d.ts +0 -18
  1430. package/node_modules/@tootallnate/quickjs-emscripten/dist/memory.js +0 -41
  1431. package/node_modules/@tootallnate/quickjs-emscripten/dist/memory.js.map +0 -1
  1432. package/node_modules/@tootallnate/quickjs-emscripten/dist/module-asyncify.d.ts +0 -53
  1433. package/node_modules/@tootallnate/quickjs-emscripten/dist/module-asyncify.js +0 -97
  1434. package/node_modules/@tootallnate/quickjs-emscripten/dist/module-asyncify.js.map +0 -1
  1435. package/node_modules/@tootallnate/quickjs-emscripten/dist/module-test.d.ts +0 -27
  1436. package/node_modules/@tootallnate/quickjs-emscripten/dist/module-test.js +0 -77
  1437. package/node_modules/@tootallnate/quickjs-emscripten/dist/module-test.js.map +0 -1
  1438. package/node_modules/@tootallnate/quickjs-emscripten/dist/module.d.ts +0 -152
  1439. package/node_modules/@tootallnate/quickjs-emscripten/dist/module.js +0 -302
  1440. package/node_modules/@tootallnate/quickjs-emscripten/dist/module.js.map +0 -1
  1441. package/node_modules/@tootallnate/quickjs-emscripten/dist/runtime-asyncify.d.ts +0 -38
  1442. package/node_modules/@tootallnate/quickjs-emscripten/dist/runtime-asyncify.js +0 -49
  1443. package/node_modules/@tootallnate/quickjs-emscripten/dist/runtime-asyncify.js.map +0 -1
  1444. package/node_modules/@tootallnate/quickjs-emscripten/dist/runtime.d.ts +0 -174
  1445. package/node_modules/@tootallnate/quickjs-emscripten/dist/runtime.js +0 -300
  1446. package/node_modules/@tootallnate/quickjs-emscripten/dist/runtime.js.map +0 -1
  1447. package/node_modules/@tootallnate/quickjs-emscripten/dist/types-ffi.d.ts +0 -114
  1448. package/node_modules/@tootallnate/quickjs-emscripten/dist/types-ffi.js +0 -38
  1449. package/node_modules/@tootallnate/quickjs-emscripten/dist/types-ffi.js.map +0 -1
  1450. package/node_modules/@tootallnate/quickjs-emscripten/dist/types.d.ts +0 -158
  1451. package/node_modules/@tootallnate/quickjs-emscripten/dist/types.js +0 -58
  1452. package/node_modules/@tootallnate/quickjs-emscripten/dist/types.js.map +0 -1
  1453. package/node_modules/@tootallnate/quickjs-emscripten/dist/variants.d.ts +0 -113
  1454. package/node_modules/@tootallnate/quickjs-emscripten/dist/variants.js +0 -169
  1455. package/node_modules/@tootallnate/quickjs-emscripten/dist/variants.js.map +0 -1
  1456. package/node_modules/@tootallnate/quickjs-emscripten/dist/vm-interface.d.ts +0 -68
  1457. package/node_modules/@tootallnate/quickjs-emscripten/dist/vm-interface.js +0 -12
  1458. package/node_modules/@tootallnate/quickjs-emscripten/dist/vm-interface.js.map +0 -1
  1459. package/node_modules/@tootallnate/quickjs-emscripten/package.json +0 -60
  1460. package/node_modules/@types/mime-types/LICENSE +0 -21
  1461. package/node_modules/@types/mime-types/README.md +0 -28
  1462. package/node_modules/@types/mime-types/index.d.ts +0 -9
  1463. package/node_modules/@types/mime-types/package.json +0 -25
  1464. package/node_modules/@types/yauzl/LICENSE +0 -21
  1465. package/node_modules/@types/yauzl/README.md +0 -15
  1466. package/node_modules/@types/yauzl/index.d.ts +0 -110
  1467. package/node_modules/@types/yauzl/package.json +0 -27
  1468. package/node_modules/ansi-regex/index.d.ts +0 -33
  1469. package/node_modules/ansi-regex/index.js +0 -14
  1470. package/node_modules/ansi-regex/license +0 -9
  1471. package/node_modules/ansi-regex/package.json +0 -61
  1472. package/node_modules/ansi-regex/readme.md +0 -66
  1473. package/node_modules/ansi-styles/index.d.ts +0 -345
  1474. package/node_modules/ansi-styles/index.js +0 -163
  1475. package/node_modules/ansi-styles/license +0 -9
  1476. package/node_modules/ansi-styles/package.json +0 -56
  1477. package/node_modules/ansi-styles/readme.md +0 -152
  1478. package/node_modules/any-promise/.jshintrc +0 -4
  1479. package/node_modules/any-promise/.npmignore +0 -7
  1480. package/node_modules/any-promise/LICENSE +0 -19
  1481. package/node_modules/any-promise/README.md +0 -161
  1482. package/node_modules/any-promise/implementation.d.ts +0 -3
  1483. package/node_modules/any-promise/implementation.js +0 -1
  1484. package/node_modules/any-promise/index.d.ts +0 -73
  1485. package/node_modules/any-promise/index.js +0 -1
  1486. package/node_modules/any-promise/loader.js +0 -78
  1487. package/node_modules/any-promise/optional.js +0 -6
  1488. package/node_modules/any-promise/package.json +0 -45
  1489. package/node_modules/any-promise/register/bluebird.d.ts +0 -1
  1490. package/node_modules/any-promise/register/bluebird.js +0 -2
  1491. package/node_modules/any-promise/register/es6-promise.d.ts +0 -1
  1492. package/node_modules/any-promise/register/es6-promise.js +0 -2
  1493. package/node_modules/any-promise/register/lie.d.ts +0 -1
  1494. package/node_modules/any-promise/register/lie.js +0 -2
  1495. package/node_modules/any-promise/register/native-promise-only.d.ts +0 -1
  1496. package/node_modules/any-promise/register/native-promise-only.js +0 -2
  1497. package/node_modules/any-promise/register/pinkie.d.ts +0 -1
  1498. package/node_modules/any-promise/register/pinkie.js +0 -2
  1499. package/node_modules/any-promise/register/promise.d.ts +0 -1
  1500. package/node_modules/any-promise/register/promise.js +0 -2
  1501. package/node_modules/any-promise/register/q.d.ts +0 -1
  1502. package/node_modules/any-promise/register/q.js +0 -2
  1503. package/node_modules/any-promise/register/rsvp.d.ts +0 -1
  1504. package/node_modules/any-promise/register/rsvp.js +0 -2
  1505. package/node_modules/any-promise/register/vow.d.ts +0 -1
  1506. package/node_modules/any-promise/register/vow.js +0 -2
  1507. package/node_modules/any-promise/register/when.d.ts +0 -1
  1508. package/node_modules/any-promise/register/when.js +0 -2
  1509. package/node_modules/any-promise/register-shim.js +0 -18
  1510. package/node_modules/any-promise/register.d.ts +0 -17
  1511. package/node_modules/any-promise/register.js +0 -94
  1512. package/node_modules/argparse/CHANGELOG.md +0 -216
  1513. package/node_modules/ast-types/.github/dependabot.yml +0 -9
  1514. package/node_modules/ast-types/.github/workflows/main.yml +0 -29
  1515. package/node_modules/ast-types/LICENSE +0 -20
  1516. package/node_modules/ast-types/README.md +0 -512
  1517. package/node_modules/ast-types/def/babel-core.d.ts +0 -2
  1518. package/node_modules/ast-types/def/babel-core.js +0 -256
  1519. package/node_modules/ast-types/def/babel.d.ts +0 -2
  1520. package/node_modules/ast-types/def/babel.js +0 -11
  1521. package/node_modules/ast-types/def/core.d.ts +0 -2
  1522. package/node_modules/ast-types/def/core.js +0 -298
  1523. package/node_modules/ast-types/def/es-proposals.d.ts +0 -2
  1524. package/node_modules/ast-types/def/es-proposals.js +0 -33
  1525. package/node_modules/ast-types/def/es2020.d.ts +0 -2
  1526. package/node_modules/ast-types/def/es2020.js +0 -16
  1527. package/node_modules/ast-types/def/es6.d.ts +0 -2
  1528. package/node_modules/ast-types/def/es6.js +0 -210
  1529. package/node_modules/ast-types/def/es7.d.ts +0 -2
  1530. package/node_modules/ast-types/def/es7.js +0 -34
  1531. package/node_modules/ast-types/def/esprima.d.ts +0 -2
  1532. package/node_modules/ast-types/def/esprima.js +0 -49
  1533. package/node_modules/ast-types/def/flow.d.ts +0 -2
  1534. package/node_modules/ast-types/def/flow.js +0 -292
  1535. package/node_modules/ast-types/def/jsx.d.ts +0 -2
  1536. package/node_modules/ast-types/def/jsx.js +0 -103
  1537. package/node_modules/ast-types/def/type-annotations.d.ts +0 -7
  1538. package/node_modules/ast-types/def/type-annotations.js +0 -40
  1539. package/node_modules/ast-types/def/typescript.d.ts +0 -2
  1540. package/node_modules/ast-types/def/typescript.js +0 -344
  1541. package/node_modules/ast-types/fork.d.ts +0 -42
  1542. package/node_modules/ast-types/fork.js +0 -52
  1543. package/node_modules/ast-types/gen/builders.d.ts +0 -2584
  1544. package/node_modules/ast-types/gen/builders.js +0 -2
  1545. package/node_modules/ast-types/gen/kinds.d.ts +0 -264
  1546. package/node_modules/ast-types/gen/kinds.js +0 -2
  1547. package/node_modules/ast-types/gen/namedTypes.d.ts +0 -1809
  1548. package/node_modules/ast-types/gen/namedTypes.js +0 -6
  1549. package/node_modules/ast-types/gen/visitor.d.ts +0 -268
  1550. package/node_modules/ast-types/gen/visitor.js +0 -2
  1551. package/node_modules/ast-types/lib/equiv.d.ts +0 -5
  1552. package/node_modules/ast-types/lib/equiv.js +0 -154
  1553. package/node_modules/ast-types/lib/node-path.d.ts +0 -22
  1554. package/node_modules/ast-types/lib/node-path.js +0 -411
  1555. package/node_modules/ast-types/lib/path-visitor.d.ts +0 -52
  1556. package/node_modules/ast-types/lib/path-visitor.js +0 -343
  1557. package/node_modules/ast-types/lib/path.d.ts +0 -25
  1558. package/node_modules/ast-types/lib/path.js +0 -331
  1559. package/node_modules/ast-types/lib/scope.d.ts +0 -26
  1560. package/node_modules/ast-types/lib/scope.js +0 -318
  1561. package/node_modules/ast-types/lib/shared.d.ts +0 -13
  1562. package/node_modules/ast-types/lib/shared.js +0 -47
  1563. package/node_modules/ast-types/lib/types.d.ts +0 -136
  1564. package/node_modules/ast-types/lib/types.js +0 -780
  1565. package/node_modules/ast-types/main.d.ts +0 -28
  1566. package/node_modules/ast-types/main.js +0 -53
  1567. package/node_modules/ast-types/package.json +0 -65
  1568. package/node_modules/ast-types/tsconfig.json +0 -21
  1569. package/node_modules/ast-types/types.d.ts +0 -6
  1570. package/node_modules/ast-types/types.js +0 -2
  1571. package/node_modules/basic-ftp/LICENSE.txt +0 -19
  1572. package/node_modules/basic-ftp/README.md +0 -244
  1573. package/node_modules/basic-ftp/dist/Client.d.ts +0 -340
  1574. package/node_modules/basic-ftp/dist/Client.js +0 -785
  1575. package/node_modules/basic-ftp/dist/FileInfo.d.ts +0 -80
  1576. package/node_modules/basic-ftp/dist/FileInfo.js +0 -92
  1577. package/node_modules/basic-ftp/dist/FtpContext.d.ts +0 -175
  1578. package/node_modules/basic-ftp/dist/FtpContext.js +0 -375
  1579. package/node_modules/basic-ftp/dist/ProgressTracker.d.ts +0 -45
  1580. package/node_modules/basic-ftp/dist/ProgressTracker.js +0 -72
  1581. package/node_modules/basic-ftp/dist/StringEncoding.d.ts +0 -1
  1582. package/node_modules/basic-ftp/dist/StringEncoding.js +0 -2
  1583. package/node_modules/basic-ftp/dist/StringWriter.d.ts +0 -10
  1584. package/node_modules/basic-ftp/dist/StringWriter.js +0 -29
  1585. package/node_modules/basic-ftp/dist/index.d.ts +0 -9
  1586. package/node_modules/basic-ftp/dist/index.js +0 -28
  1587. package/node_modules/basic-ftp/dist/netUtils.d.ts +0 -21
  1588. package/node_modules/basic-ftp/dist/netUtils.js +0 -66
  1589. package/node_modules/basic-ftp/dist/parseControlResponse.d.ts +0 -22
  1590. package/node_modules/basic-ftp/dist/parseControlResponse.js +0 -66
  1591. package/node_modules/basic-ftp/dist/parseList.d.ts +0 -5
  1592. package/node_modules/basic-ftp/dist/parseList.js +0 -79
  1593. package/node_modules/basic-ftp/dist/parseListDOS.d.ts +0 -12
  1594. package/node_modules/basic-ftp/dist/parseListDOS.js +0 -52
  1595. package/node_modules/basic-ftp/dist/parseListMLSD.d.ts +0 -20
  1596. package/node_modules/basic-ftp/dist/parseListMLSD.js +0 -187
  1597. package/node_modules/basic-ftp/dist/parseListUnix.d.ts +0 -12
  1598. package/node_modules/basic-ftp/dist/parseListUnix.js +0 -155
  1599. package/node_modules/basic-ftp/dist/transfer.d.ts +0 -39
  1600. package/node_modules/basic-ftp/dist/transfer.js +0 -318
  1601. package/node_modules/basic-ftp/package.json +0 -52
  1602. package/node_modules/buffer-crc32/LICENSE +0 -19
  1603. package/node_modules/buffer-crc32/README.md +0 -47
  1604. package/node_modules/buffer-crc32/index.js +0 -111
  1605. package/node_modules/buffer-crc32/package.json +0 -39
  1606. package/node_modules/cli-highlight/LICENSE.txt +0 -15
  1607. package/node_modules/cli-highlight/README.md +0 -88
  1608. package/node_modules/cli-highlight/bin/highlight +0 -2
  1609. package/node_modules/cli-highlight/dist/cli.d.ts +0 -1
  1610. package/node_modules/cli-highlight/dist/cli.js +0 -102
  1611. package/node_modules/cli-highlight/dist/cli.js.map +0 -1
  1612. package/node_modules/cli-highlight/dist/index.d.ts +0 -53
  1613. package/node_modules/cli-highlight/dist/index.js +0 -112
  1614. package/node_modules/cli-highlight/dist/index.js.map +0 -1
  1615. package/node_modules/cli-highlight/dist/test/test.d.ts +0 -1
  1616. package/node_modules/cli-highlight/dist/test/test.js +0 -62
  1617. package/node_modules/cli-highlight/dist/test/test.js.map +0 -1
  1618. package/node_modules/cli-highlight/dist/theme.d.ts +0 -270
  1619. package/node_modules/cli-highlight/dist/theme.js +0 -265
  1620. package/node_modules/cli-highlight/dist/theme.js.map +0 -1
  1621. package/node_modules/cli-highlight/node_modules/chalk/index.d.ts +0 -415
  1622. package/node_modules/cli-highlight/node_modules/chalk/license +0 -9
  1623. package/node_modules/cli-highlight/node_modules/chalk/package.json +0 -68
  1624. package/node_modules/cli-highlight/node_modules/chalk/readme.md +0 -341
  1625. package/node_modules/cli-highlight/node_modules/chalk/source/index.js +0 -229
  1626. package/node_modules/cli-highlight/node_modules/chalk/source/templates.js +0 -134
  1627. package/node_modules/cli-highlight/node_modules/chalk/source/util.js +0 -39
  1628. package/node_modules/cli-highlight/package.json +0 -129
  1629. package/node_modules/cliui/CHANGELOG.md +0 -121
  1630. package/node_modules/cliui/LICENSE.txt +0 -14
  1631. package/node_modules/cliui/README.md +0 -141
  1632. package/node_modules/cliui/build/index.cjs +0 -302
  1633. package/node_modules/cliui/build/lib/index.js +0 -287
  1634. package/node_modules/cliui/build/lib/string-utils.js +0 -27
  1635. package/node_modules/cliui/index.mjs +0 -13
  1636. package/node_modules/cliui/node_modules/ansi-regex/index.d.ts +0 -37
  1637. package/node_modules/cliui/node_modules/ansi-regex/index.js +0 -10
  1638. package/node_modules/cliui/node_modules/ansi-regex/license +0 -9
  1639. package/node_modules/cliui/node_modules/ansi-regex/package.json +0 -55
  1640. package/node_modules/cliui/node_modules/ansi-regex/readme.md +0 -78
  1641. package/node_modules/cliui/node_modules/strip-ansi/index.d.ts +0 -17
  1642. package/node_modules/cliui/node_modules/strip-ansi/index.js +0 -4
  1643. package/node_modules/cliui/node_modules/strip-ansi/license +0 -9
  1644. package/node_modules/cliui/node_modules/strip-ansi/package.json +0 -54
  1645. package/node_modules/cliui/node_modules/strip-ansi/readme.md +0 -46
  1646. package/node_modules/cliui/package.json +0 -83
  1647. package/node_modules/color-convert/CHANGELOG.md +0 -54
  1648. package/node_modules/color-convert/LICENSE +0 -21
  1649. package/node_modules/color-convert/README.md +0 -68
  1650. package/node_modules/color-convert/conversions.js +0 -839
  1651. package/node_modules/color-convert/index.js +0 -81
  1652. package/node_modules/color-convert/package.json +0 -48
  1653. package/node_modules/color-convert/route.js +0 -97
  1654. package/node_modules/color-name/LICENSE +0 -8
  1655. package/node_modules/color-name/README.md +0 -11
  1656. package/node_modules/color-name/index.js +0 -152
  1657. package/node_modules/color-name/package.json +0 -28
  1658. package/node_modules/degenerator/README.md +0 -117
  1659. package/node_modules/degenerator/dist/compile.d.ts +0 -11
  1660. package/node_modules/degenerator/dist/compile.d.ts.map +0 -1
  1661. package/node_modules/degenerator/dist/compile.js +0 -107
  1662. package/node_modules/degenerator/dist/compile.js.map +0 -1
  1663. package/node_modules/degenerator/dist/degenerator.d.ts +0 -12
  1664. package/node_modules/degenerator/dist/degenerator.d.ts.map +0 -1
  1665. package/node_modules/degenerator/dist/degenerator.js +0 -156
  1666. package/node_modules/degenerator/dist/degenerator.js.map +0 -1
  1667. package/node_modules/degenerator/dist/index.d.ts +0 -3
  1668. package/node_modules/degenerator/dist/index.d.ts.map +0 -1
  1669. package/node_modules/degenerator/dist/index.js +0 -19
  1670. package/node_modules/degenerator/dist/index.js.map +0 -1
  1671. package/node_modules/degenerator/package.json +0 -42
  1672. package/node_modules/emoji-regex/LICENSE-MIT.txt +0 -20
  1673. package/node_modules/emoji-regex/README.md +0 -73
  1674. package/node_modules/emoji-regex/es2015/index.js +0 -6
  1675. package/node_modules/emoji-regex/es2015/text.js +0 -6
  1676. package/node_modules/emoji-regex/index.d.ts +0 -23
  1677. package/node_modules/emoji-regex/index.js +0 -6
  1678. package/node_modules/emoji-regex/package.json +0 -50
  1679. package/node_modules/emoji-regex/text.js +0 -6
  1680. package/node_modules/end-of-stream/LICENSE +0 -21
  1681. package/node_modules/end-of-stream/README.md +0 -54
  1682. package/node_modules/end-of-stream/index.js +0 -96
  1683. package/node_modules/end-of-stream/package.json +0 -37
  1684. package/node_modules/escalade/dist/index.js +0 -22
  1685. package/node_modules/escalade/dist/index.mjs +0 -22
  1686. package/node_modules/escalade/index.d.mts +0 -11
  1687. package/node_modules/escalade/index.d.ts +0 -15
  1688. package/node_modules/escalade/license +0 -9
  1689. package/node_modules/escalade/package.json +0 -74
  1690. package/node_modules/escalade/readme.md +0 -211
  1691. package/node_modules/escalade/sync/index.d.mts +0 -9
  1692. package/node_modules/escalade/sync/index.d.ts +0 -13
  1693. package/node_modules/escalade/sync/index.js +0 -18
  1694. package/node_modules/escalade/sync/index.mjs +0 -18
  1695. package/node_modules/escodegen/LICENSE.BSD +0 -21
  1696. package/node_modules/escodegen/README.md +0 -84
  1697. package/node_modules/escodegen/bin/escodegen.js +0 -77
  1698. package/node_modules/escodegen/bin/esgenerate.js +0 -64
  1699. package/node_modules/escodegen/escodegen.js +0 -2667
  1700. package/node_modules/escodegen/package.json +0 -63
  1701. package/node_modules/esprima/ChangeLog +0 -235
  1702. package/node_modules/esprima/LICENSE.BSD +0 -21
  1703. package/node_modules/esprima/README.md +0 -46
  1704. package/node_modules/esprima/bin/esparse.js +0 -139
  1705. package/node_modules/esprima/bin/esvalidate.js +0 -236
  1706. package/node_modules/esprima/dist/esprima.js +0 -6709
  1707. package/node_modules/esprima/package.json +0 -112
  1708. package/node_modules/estraverse/.jshintrc +0 -16
  1709. package/node_modules/estraverse/LICENSE.BSD +0 -19
  1710. package/node_modules/estraverse/README.md +0 -153
  1711. package/node_modules/estraverse/estraverse.js +0 -805
  1712. package/node_modules/estraverse/gulpfile.js +0 -70
  1713. package/node_modules/estraverse/package.json +0 -40
  1714. package/node_modules/esutils/LICENSE.BSD +0 -19
  1715. package/node_modules/esutils/README.md +0 -174
  1716. package/node_modules/esutils/lib/ast.js +0 -144
  1717. package/node_modules/esutils/lib/code.js +0 -135
  1718. package/node_modules/esutils/lib/keyword.js +0 -165
  1719. package/node_modules/esutils/lib/utils.js +0 -33
  1720. package/node_modules/esutils/package.json +0 -44
  1721. package/node_modules/extract-zip/LICENSE +0 -23
  1722. package/node_modules/extract-zip/cli.js +0 -19
  1723. package/node_modules/extract-zip/index.d.ts +0 -21
  1724. package/node_modules/extract-zip/index.js +0 -173
  1725. package/node_modules/extract-zip/package.json +0 -80
  1726. package/node_modules/extract-zip/readme.md +0 -57
  1727. package/node_modules/fd-slicer/.npmignore +0 -2
  1728. package/node_modules/fd-slicer/.travis.yml +0 -7
  1729. package/node_modules/fd-slicer/CHANGELOG.md +0 -49
  1730. package/node_modules/fd-slicer/LICENSE +0 -21
  1731. package/node_modules/fd-slicer/README.md +0 -199
  1732. package/node_modules/fd-slicer/index.js +0 -296
  1733. package/node_modules/fd-slicer/package.json +0 -36
  1734. package/node_modules/fd-slicer/test/test.js +0 -350
  1735. package/node_modules/file-type/core.d.ts +0 -253
  1736. package/node_modules/file-type/core.js +0 -2899
  1737. package/node_modules/file-type/index.d.ts +0 -98
  1738. package/node_modules/file-type/index.js +0 -163
  1739. package/node_modules/file-type/license +0 -9
  1740. package/node_modules/file-type/package.json +0 -290
  1741. package/node_modules/file-type/readme.md +0 -667
  1742. package/node_modules/file-type/supported.js +0 -360
  1743. package/node_modules/file-type/util.js +0 -60
  1744. package/node_modules/get-caller-file/LICENSE.md +0 -6
  1745. package/node_modules/get-caller-file/README.md +0 -41
  1746. package/node_modules/get-caller-file/index.d.ts +0 -2
  1747. package/node_modules/get-caller-file/index.js +0 -22
  1748. package/node_modules/get-caller-file/index.js.map +0 -1
  1749. package/node_modules/get-caller-file/package.json +0 -42
  1750. package/node_modules/get-stream/buffer-stream.js +0 -52
  1751. package/node_modules/get-stream/index.d.ts +0 -108
  1752. package/node_modules/get-stream/index.js +0 -60
  1753. package/node_modules/get-stream/license +0 -9
  1754. package/node_modules/get-stream/package.json +0 -50
  1755. package/node_modules/get-stream/readme.md +0 -124
  1756. package/node_modules/get-uri/LICENSE +0 -22
  1757. package/node_modules/get-uri/README.md +0 -109
  1758. package/node_modules/get-uri/dist/data.d.ts +0 -16
  1759. package/node_modules/get-uri/dist/data.js +0 -43
  1760. package/node_modules/get-uri/dist/data.js.map +0 -1
  1761. package/node_modules/get-uri/dist/file.d.ts +0 -17
  1762. package/node_modules/get-uri/dist/file.js +0 -57
  1763. package/node_modules/get-uri/dist/file.js.map +0 -1
  1764. package/node_modules/get-uri/dist/ftp.d.ts +0 -14
  1765. package/node_modules/get-uri/dist/ftp.js +0 -93
  1766. package/node_modules/get-uri/dist/ftp.js.map +0 -1
  1767. package/node_modules/get-uri/dist/http-error.d.ts +0 -8
  1768. package/node_modules/get-uri/dist/http-error.js +0 -15
  1769. package/node_modules/get-uri/dist/http-error.js.map +0 -1
  1770. package/node_modules/get-uri/dist/http.d.ts +0 -29
  1771. package/node_modules/get-uri/dist/http.js +0 -191
  1772. package/node_modules/get-uri/dist/http.js.map +0 -1
  1773. package/node_modules/get-uri/dist/https.d.ts +0 -6
  1774. package/node_modules/get-uri/dist/https.js +0 -16
  1775. package/node_modules/get-uri/dist/https.js.map +0 -1
  1776. package/node_modules/get-uri/dist/index.d.ts +0 -37
  1777. package/node_modules/get-uri/dist/index.js +0 -57
  1778. package/node_modules/get-uri/dist/index.js.map +0 -1
  1779. package/node_modules/get-uri/dist/notfound.d.ts +0 -10
  1780. package/node_modules/get-uri/dist/notfound.js +0 -16
  1781. package/node_modules/get-uri/dist/notfound.js.map +0 -1
  1782. package/node_modules/get-uri/dist/notmodified.d.ts +0 -10
  1783. package/node_modules/get-uri/dist/notmodified.js +0 -17
  1784. package/node_modules/get-uri/dist/notmodified.js.map +0 -1
  1785. package/node_modules/get-uri/node_modules/data-uri-to-buffer/LICENSE +0 -22
  1786. package/node_modules/get-uri/node_modules/data-uri-to-buffer/README.md +0 -61
  1787. package/node_modules/get-uri/node_modules/data-uri-to-buffer/dist/common.d.ts +0 -17
  1788. package/node_modules/get-uri/node_modules/data-uri-to-buffer/dist/common.d.ts.map +0 -1
  1789. package/node_modules/get-uri/node_modules/data-uri-to-buffer/dist/common.js +0 -54
  1790. package/node_modules/get-uri/node_modules/data-uri-to-buffer/dist/common.js.map +0 -1
  1791. package/node_modules/get-uri/node_modules/data-uri-to-buffer/dist/index.d.ts +0 -8
  1792. package/node_modules/get-uri/node_modules/data-uri-to-buffer/dist/index.d.ts.map +0 -1
  1793. package/node_modules/get-uri/node_modules/data-uri-to-buffer/dist/index.js +0 -48
  1794. package/node_modules/get-uri/node_modules/data-uri-to-buffer/dist/index.js.map +0 -1
  1795. package/node_modules/get-uri/node_modules/data-uri-to-buffer/dist/node.d.ts +0 -8
  1796. package/node_modules/get-uri/node_modules/data-uri-to-buffer/dist/node.d.ts.map +0 -1
  1797. package/node_modules/get-uri/node_modules/data-uri-to-buffer/dist/node.js +0 -26
  1798. package/node_modules/get-uri/node_modules/data-uri-to-buffer/dist/node.js.map +0 -1
  1799. package/node_modules/get-uri/node_modules/data-uri-to-buffer/package.json +0 -48
  1800. package/node_modules/get-uri/package.json +0 -58
  1801. package/node_modules/has-flag/index.d.ts +0 -39
  1802. package/node_modules/has-flag/index.js +0 -8
  1803. package/node_modules/has-flag/license +0 -9
  1804. package/node_modules/has-flag/package.json +0 -46
  1805. package/node_modules/has-flag/readme.md +0 -89
  1806. package/node_modules/ieee754/LICENSE +0 -11
  1807. package/node_modules/ieee754/README.md +0 -51
  1808. package/node_modules/ieee754/index.d.ts +0 -10
  1809. package/node_modules/ieee754/index.js +0 -85
  1810. package/node_modules/ieee754/package.json +0 -52
  1811. package/node_modules/ip-address/LICENSE +0 -19
  1812. package/node_modules/ip-address/README.md +0 -278
  1813. package/node_modules/ip-address/dist/address-error.d.ts +0 -4
  1814. package/node_modules/ip-address/dist/address-error.js +0 -12
  1815. package/node_modules/ip-address/dist/address-error.js.map +0 -1
  1816. package/node_modules/ip-address/dist/common.d.ts +0 -20
  1817. package/node_modules/ip-address/dist/common.js +0 -67
  1818. package/node_modules/ip-address/dist/common.js.map +0 -1
  1819. package/node_modules/ip-address/dist/ip-address.d.ts +0 -7
  1820. package/node_modules/ip-address/dist/ip-address.js +0 -35
  1821. package/node_modules/ip-address/dist/ip-address.js.map +0 -1
  1822. package/node_modules/ip-address/dist/ipv4.d.ts +0 -267
  1823. package/node_modules/ip-address/dist/ipv4.js +0 -485
  1824. package/node_modules/ip-address/dist/ipv4.js.map +0 -1
  1825. package/node_modules/ip-address/dist/ipv6.d.ts +0 -489
  1826. package/node_modules/ip-address/dist/ipv6.js +0 -1217
  1827. package/node_modules/ip-address/dist/ipv6.js.map +0 -1
  1828. package/node_modules/ip-address/dist/v4/constants.d.ts +0 -4
  1829. package/node_modules/ip-address/dist/v4/constants.js +0 -8
  1830. package/node_modules/ip-address/dist/v4/constants.js.map +0 -1
  1831. package/node_modules/ip-address/dist/v6/constants.d.ts +0 -44
  1832. package/node_modules/ip-address/dist/v6/constants.js +0 -81
  1833. package/node_modules/ip-address/dist/v6/constants.js.map +0 -1
  1834. package/node_modules/ip-address/dist/v6/helpers.d.ts +0 -18
  1835. package/node_modules/ip-address/dist/v6/helpers.js +0 -54
  1836. package/node_modules/ip-address/dist/v6/helpers.js.map +0 -1
  1837. package/node_modules/ip-address/dist/v6/regular-expressions.d.ts +0 -5
  1838. package/node_modules/ip-address/dist/v6/regular-expressions.js +0 -95
  1839. package/node_modules/ip-address/dist/v6/regular-expressions.js.map +0 -1
  1840. package/node_modules/ip-address/package.json +0 -88
  1841. package/node_modules/is-fullwidth-code-point/index.d.ts +0 -17
  1842. package/node_modules/is-fullwidth-code-point/index.js +0 -50
  1843. package/node_modules/is-fullwidth-code-point/license +0 -9
  1844. package/node_modules/is-fullwidth-code-point/package.json +0 -42
  1845. package/node_modules/is-fullwidth-code-point/readme.md +0 -39
  1846. package/node_modules/mime-db/HISTORY.md +0 -541
  1847. package/node_modules/mime-db/LICENSE +0 -23
  1848. package/node_modules/mime-db/README.md +0 -109
  1849. package/node_modules/mime-db/db.json +0 -9342
  1850. package/node_modules/mime-db/index.js +0 -12
  1851. package/node_modules/mime-db/package.json +0 -56
  1852. package/node_modules/mime-types/HISTORY.md +0 -428
  1853. package/node_modules/mime-types/LICENSE +0 -23
  1854. package/node_modules/mime-types/README.md +0 -126
  1855. package/node_modules/mime-types/index.js +0 -211
  1856. package/node_modules/mime-types/mimeScore.js +0 -57
  1857. package/node_modules/mime-types/package.json +0 -49
  1858. package/node_modules/mz/HISTORY.md +0 -66
  1859. package/node_modules/mz/LICENSE +0 -22
  1860. package/node_modules/mz/README.md +0 -106
  1861. package/node_modules/mz/child_process.js +0 -8
  1862. package/node_modules/mz/crypto.js +0 -9
  1863. package/node_modules/mz/dns.js +0 -16
  1864. package/node_modules/mz/fs.js +0 -62
  1865. package/node_modules/mz/index.js +0 -8
  1866. package/node_modules/mz/package.json +0 -44
  1867. package/node_modules/mz/readline.js +0 -64
  1868. package/node_modules/mz/zlib.js +0 -13
  1869. package/node_modules/netmask/CHANGELOG.md +0 -66
  1870. package/node_modules/netmask/LICENSE.md +0 -21
  1871. package/node_modules/netmask/README.md +0 -112
  1872. package/node_modules/netmask/dist/netmask.d.ts +0 -21
  1873. package/node_modules/netmask/dist/netmask.js +0 -68
  1874. package/node_modules/netmask/dist/netmask4.d.ts +0 -20
  1875. package/node_modules/netmask/dist/netmask4.js +0 -189
  1876. package/node_modules/netmask/dist/netmask6.d.ts +0 -20
  1877. package/node_modules/netmask/dist/netmask6.js +0 -187
  1878. package/node_modules/netmask/package.json +0 -45
  1879. package/node_modules/object-assign/index.js +0 -90
  1880. package/node_modules/object-assign/license +0 -21
  1881. package/node_modules/object-assign/package.json +0 -42
  1882. package/node_modules/object-assign/readme.md +0 -61
  1883. package/node_modules/once/LICENSE +0 -15
  1884. package/node_modules/once/README.md +0 -79
  1885. package/node_modules/once/once.js +0 -42
  1886. package/node_modules/once/package.json +0 -33
  1887. package/node_modules/pac-proxy-agent/LICENSE +0 -22
  1888. package/node_modules/pac-proxy-agent/README.md +0 -27
  1889. package/node_modules/pac-proxy-agent/dist/index.d.ts +0 -60
  1890. package/node_modules/pac-proxy-agent/dist/index.d.ts.map +0 -1
  1891. package/node_modules/pac-proxy-agent/dist/index.js +0 -238
  1892. package/node_modules/pac-proxy-agent/dist/index.js.map +0 -1
  1893. package/node_modules/pac-proxy-agent/package.json +0 -58
  1894. package/node_modules/pac-resolver/LICENSE +0 -22
  1895. package/node_modules/pac-resolver/README.md +0 -59
  1896. package/node_modules/pac-resolver/dist/dateRange.d.ts +0 -67
  1897. package/node_modules/pac-resolver/dist/dateRange.d.ts.map +0 -1
  1898. package/node_modules/pac-resolver/dist/dateRange.js +0 -73
  1899. package/node_modules/pac-resolver/dist/dateRange.js.map +0 -1
  1900. package/node_modules/pac-resolver/dist/dnsDomainIs.d.ts +0 -23
  1901. package/node_modules/pac-resolver/dist/dnsDomainIs.d.ts.map +0 -1
  1902. package/node_modules/pac-resolver/dist/dnsDomainIs.js +0 -30
  1903. package/node_modules/pac-resolver/dist/dnsDomainIs.js.map +0 -1
  1904. package/node_modules/pac-resolver/dist/dnsDomainLevels.d.ts +0 -18
  1905. package/node_modules/pac-resolver/dist/dnsDomainLevels.d.ts.map +0 -1
  1906. package/node_modules/pac-resolver/dist/dnsDomainLevels.js +0 -28
  1907. package/node_modules/pac-resolver/dist/dnsDomainLevels.js.map +0 -1
  1908. package/node_modules/pac-resolver/dist/dnsResolve.d.ts +0 -16
  1909. package/node_modules/pac-resolver/dist/dnsResolve.d.ts.map +0 -1
  1910. package/node_modules/pac-resolver/dist/dnsResolve.js +0 -32
  1911. package/node_modules/pac-resolver/dist/dnsResolve.js.map +0 -1
  1912. package/node_modules/pac-resolver/dist/index.d.ts +0 -50
  1913. package/node_modules/pac-resolver/dist/index.d.ts.map +0 -1
  1914. package/node_modules/pac-resolver/dist/index.js +0 -87
  1915. package/node_modules/pac-resolver/dist/index.js.map +0 -1
  1916. package/node_modules/pac-resolver/dist/ip.d.ts +0 -8
  1917. package/node_modules/pac-resolver/dist/ip.d.ts.map +0 -1
  1918. package/node_modules/pac-resolver/dist/ip.js +0 -50
  1919. package/node_modules/pac-resolver/dist/ip.js.map +0 -1
  1920. package/node_modules/pac-resolver/dist/isInNet.d.ts +0 -24
  1921. package/node_modules/pac-resolver/dist/isInNet.d.ts.map +0 -1
  1922. package/node_modules/pac-resolver/dist/isInNet.js +0 -42
  1923. package/node_modules/pac-resolver/dist/isInNet.js.map +0 -1
  1924. package/node_modules/pac-resolver/dist/isPlainHostName.d.ts +0 -18
  1925. package/node_modules/pac-resolver/dist/isPlainHostName.d.ts.map +0 -1
  1926. package/node_modules/pac-resolver/dist/isPlainHostName.js +0 -23
  1927. package/node_modules/pac-resolver/dist/isPlainHostName.js.map +0 -1
  1928. package/node_modules/pac-resolver/dist/isResolvable.d.ts +0 -8
  1929. package/node_modules/pac-resolver/dist/isResolvable.d.ts.map +0 -1
  1930. package/node_modules/pac-resolver/dist/isResolvable.js +0 -23
  1931. package/node_modules/pac-resolver/dist/isResolvable.js.map +0 -1
  1932. package/node_modules/pac-resolver/dist/localHostOrDomainIs.d.ts +0 -26
  1933. package/node_modules/pac-resolver/dist/localHostOrDomainIs.d.ts.map +0 -1
  1934. package/node_modules/pac-resolver/dist/localHostOrDomainIs.js +0 -40
  1935. package/node_modules/pac-resolver/dist/localHostOrDomainIs.js.map +0 -1
  1936. package/node_modules/pac-resolver/dist/myIpAddress.d.ts +0 -16
  1937. package/node_modules/pac-resolver/dist/myIpAddress.d.ts.map +0 -1
  1938. package/node_modules/pac-resolver/dist/myIpAddress.js +0 -50
  1939. package/node_modules/pac-resolver/dist/myIpAddress.js.map +0 -1
  1940. package/node_modules/pac-resolver/dist/shExpMatch.d.ts +0 -23
  1941. package/node_modules/pac-resolver/dist/shExpMatch.d.ts.map +0 -1
  1942. package/node_modules/pac-resolver/dist/shExpMatch.js +0 -41
  1943. package/node_modules/pac-resolver/dist/shExpMatch.js.map +0 -1
  1944. package/node_modules/pac-resolver/dist/timeRange.d.ts +0 -43
  1945. package/node_modules/pac-resolver/dist/timeRange.d.ts.map +0 -1
  1946. package/node_modules/pac-resolver/dist/timeRange.js +0 -92
  1947. package/node_modules/pac-resolver/dist/timeRange.js.map +0 -1
  1948. package/node_modules/pac-resolver/dist/util.d.ts +0 -6
  1949. package/node_modules/pac-resolver/dist/util.d.ts.map +0 -1
  1950. package/node_modules/pac-resolver/dist/util.js +0 -22
  1951. package/node_modules/pac-resolver/dist/util.js.map +0 -1
  1952. package/node_modules/pac-resolver/dist/weekdayRange.d.ts +0 -45
  1953. package/node_modules/pac-resolver/dist/weekdayRange.d.ts.map +0 -1
  1954. package/node_modules/pac-resolver/dist/weekdayRange.js +0 -91
  1955. package/node_modules/pac-resolver/dist/weekdayRange.js.map +0 -1
  1956. package/node_modules/pac-resolver/package.json +0 -47
  1957. package/node_modules/parse5/LICENSE +0 -19
  1958. package/node_modules/parse5/README.md +0 -38
  1959. package/node_modules/parse5/lib/common/doctype.js +0 -162
  1960. package/node_modules/parse5/lib/common/error-codes.js +0 -65
  1961. package/node_modules/parse5/lib/common/foreign-content.js +0 -265
  1962. package/node_modules/parse5/lib/common/html.js +0 -272
  1963. package/node_modules/parse5/lib/common/unicode.js +0 -109
  1964. package/node_modules/parse5/lib/extensions/error-reporting/mixin-base.js +0 -43
  1965. package/node_modules/parse5/lib/extensions/error-reporting/parser-mixin.js +0 -52
  1966. package/node_modules/parse5/lib/extensions/error-reporting/preprocessor-mixin.js +0 -24
  1967. package/node_modules/parse5/lib/extensions/error-reporting/tokenizer-mixin.js +0 -17
  1968. package/node_modules/parse5/lib/extensions/location-info/open-element-stack-mixin.js +0 -35
  1969. package/node_modules/parse5/lib/extensions/location-info/parser-mixin.js +0 -222
  1970. package/node_modules/parse5/lib/extensions/location-info/tokenizer-mixin.js +0 -146
  1971. package/node_modules/parse5/lib/extensions/position-tracking/preprocessor-mixin.js +0 -64
  1972. package/node_modules/parse5/lib/index.js +0 -29
  1973. package/node_modules/parse5/lib/parser/formatting-element-list.js +0 -181
  1974. package/node_modules/parse5/lib/parser/index.js +0 -2956
  1975. package/node_modules/parse5/lib/parser/open-element-stack.js +0 -482
  1976. package/node_modules/parse5/lib/serializer/index.js +0 -176
  1977. package/node_modules/parse5/lib/tokenizer/index.js +0 -2196
  1978. package/node_modules/parse5/lib/tokenizer/named-entity-data.js +0 -5
  1979. package/node_modules/parse5/lib/tokenizer/preprocessor.js +0 -159
  1980. package/node_modules/parse5/lib/tree-adapters/default.js +0 -217
  1981. package/node_modules/parse5/lib/utils/merge-options.js +0 -13
  1982. package/node_modules/parse5/lib/utils/mixin.js +0 -39
  1983. package/node_modules/parse5/package.json +0 -35
  1984. package/node_modules/parse5-htmlparser2-tree-adapter/LICENSE +0 -19
  1985. package/node_modules/parse5-htmlparser2-tree-adapter/README.md +0 -34
  1986. package/node_modules/parse5-htmlparser2-tree-adapter/lib/index.js +0 -348
  1987. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/LICENSE +0 -19
  1988. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/README.md +0 -38
  1989. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/common/doctype.js +0 -162
  1990. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/common/error-codes.js +0 -65
  1991. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/common/foreign-content.js +0 -265
  1992. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/common/html.js +0 -272
  1993. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/common/unicode.js +0 -109
  1994. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/extensions/error-reporting/mixin-base.js +0 -43
  1995. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/extensions/error-reporting/parser-mixin.js +0 -52
  1996. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/extensions/error-reporting/preprocessor-mixin.js +0 -24
  1997. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/extensions/error-reporting/tokenizer-mixin.js +0 -17
  1998. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/extensions/location-info/open-element-stack-mixin.js +0 -35
  1999. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/extensions/location-info/parser-mixin.js +0 -223
  2000. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/extensions/location-info/tokenizer-mixin.js +0 -146
  2001. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/extensions/position-tracking/preprocessor-mixin.js +0 -64
  2002. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/index.js +0 -29
  2003. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/parser/formatting-element-list.js +0 -181
  2004. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/parser/index.js +0 -2956
  2005. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/parser/open-element-stack.js +0 -482
  2006. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/serializer/index.js +0 -176
  2007. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/tokenizer/index.js +0 -2196
  2008. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/tokenizer/named-entity-data.js +0 -5
  2009. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/tokenizer/preprocessor.js +0 -159
  2010. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/tree-adapters/default.js +0 -221
  2011. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/utils/merge-options.js +0 -13
  2012. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/lib/utils/mixin.js +0 -39
  2013. package/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/package.json +0 -35
  2014. package/node_modules/parse5-htmlparser2-tree-adapter/package.json +0 -27
  2015. package/node_modules/pend/LICENSE +0 -23
  2016. package/node_modules/pend/README.md +0 -41
  2017. package/node_modules/pend/index.js +0 -55
  2018. package/node_modules/pend/package.json +0 -18
  2019. package/node_modules/pend/test.js +0 -137
  2020. package/node_modules/proper-lockfile/CHANGELOG.md +0 -108
  2021. package/node_modules/proxy-agent/LICENSE +0 -22
  2022. package/node_modules/proxy-agent/README.md +0 -59
  2023. package/node_modules/proxy-agent/dist/index.d.ts +0 -62
  2024. package/node_modules/proxy-agent/dist/index.d.ts.map +0 -1
  2025. package/node_modules/proxy-agent/dist/index.js +0 -138
  2026. package/node_modules/proxy-agent/dist/index.js.map +0 -1
  2027. package/node_modules/proxy-agent/node_modules/lru-cache/LICENSE +0 -15
  2028. package/node_modules/proxy-agent/node_modules/lru-cache/README.md +0 -1117
  2029. package/node_modules/proxy-agent/node_modules/lru-cache/index.d.ts +0 -869
  2030. package/node_modules/proxy-agent/node_modules/lru-cache/index.js +0 -1227
  2031. package/node_modules/proxy-agent/node_modules/lru-cache/index.mjs +0 -1227
  2032. package/node_modules/proxy-agent/node_modules/lru-cache/package.json +0 -96
  2033. package/node_modules/proxy-agent/package.json +0 -60
  2034. package/node_modules/proxy-from-env/.eslintrc +0 -29
  2035. package/node_modules/proxy-from-env/.travis.yml +0 -10
  2036. package/node_modules/proxy-from-env/LICENSE +0 -20
  2037. package/node_modules/proxy-from-env/README.md +0 -131
  2038. package/node_modules/proxy-from-env/index.js +0 -108
  2039. package/node_modules/proxy-from-env/package.json +0 -34
  2040. package/node_modules/proxy-from-env/test.js +0 -483
  2041. package/node_modules/pump/.github/FUNDING.yml +0 -2
  2042. package/node_modules/pump/.travis.yml +0 -5
  2043. package/node_modules/pump/LICENSE +0 -21
  2044. package/node_modules/pump/README.md +0 -74
  2045. package/node_modules/pump/SECURITY.md +0 -5
  2046. package/node_modules/pump/empty.js +0 -1
  2047. package/node_modules/pump/index.js +0 -86
  2048. package/node_modules/pump/package.json +0 -30
  2049. package/node_modules/pump/test-browser.js +0 -66
  2050. package/node_modules/pump/test-node.js +0 -53
  2051. package/node_modules/require-directory/.jshintrc +0 -67
  2052. package/node_modules/require-directory/.npmignore +0 -1
  2053. package/node_modules/require-directory/.travis.yml +0 -3
  2054. package/node_modules/require-directory/LICENSE +0 -22
  2055. package/node_modules/require-directory/README.markdown +0 -184
  2056. package/node_modules/require-directory/index.js +0 -86
  2057. package/node_modules/require-directory/package.json +0 -40
  2058. package/node_modules/smart-buffer/.prettierrc.yaml +0 -5
  2059. package/node_modules/smart-buffer/.travis.yml +0 -13
  2060. package/node_modules/smart-buffer/LICENSE +0 -20
  2061. package/node_modules/smart-buffer/README.md +0 -633
  2062. package/node_modules/smart-buffer/build/smartbuffer.js +0 -1233
  2063. package/node_modules/smart-buffer/build/smartbuffer.js.map +0 -1
  2064. package/node_modules/smart-buffer/build/utils.js +0 -108
  2065. package/node_modules/smart-buffer/build/utils.js.map +0 -1
  2066. package/node_modules/smart-buffer/docs/CHANGELOG.md +0 -70
  2067. package/node_modules/smart-buffer/docs/README_v3.md +0 -367
  2068. package/node_modules/smart-buffer/docs/ROADMAP.md +0 -0
  2069. package/node_modules/smart-buffer/package.json +0 -79
  2070. package/node_modules/smart-buffer/typings/smartbuffer.d.ts +0 -755
  2071. package/node_modules/smart-buffer/typings/utils.d.ts +0 -66
  2072. package/node_modules/socks/.eslintrc.cjs +0 -11
  2073. package/node_modules/socks/.prettierrc.yaml +0 -7
  2074. package/node_modules/socks/LICENSE +0 -20
  2075. package/node_modules/socks/README.md +0 -686
  2076. package/node_modules/socks/build/client/socksclient.js +0 -793
  2077. package/node_modules/socks/build/client/socksclient.js.map +0 -1
  2078. package/node_modules/socks/build/common/constants.js +0 -108
  2079. package/node_modules/socks/build/common/constants.js.map +0 -1
  2080. package/node_modules/socks/build/common/helpers.js +0 -167
  2081. package/node_modules/socks/build/common/helpers.js.map +0 -1
  2082. package/node_modules/socks/build/common/receivebuffer.js +0 -43
  2083. package/node_modules/socks/build/common/receivebuffer.js.map +0 -1
  2084. package/node_modules/socks/build/common/util.js +0 -25
  2085. package/node_modules/socks/build/common/util.js.map +0 -1
  2086. package/node_modules/socks/build/index.js +0 -18
  2087. package/node_modules/socks/build/index.js.map +0 -1
  2088. package/node_modules/socks/docs/examples/index.md +0 -17
  2089. package/node_modules/socks/docs/examples/javascript/associateExample.md +0 -90
  2090. package/node_modules/socks/docs/examples/javascript/bindExample.md +0 -83
  2091. package/node_modules/socks/docs/examples/javascript/connectExample.md +0 -258
  2092. package/node_modules/socks/docs/examples/typescript/associateExample.md +0 -93
  2093. package/node_modules/socks/docs/examples/typescript/bindExample.md +0 -86
  2094. package/node_modules/socks/docs/examples/typescript/connectExample.md +0 -265
  2095. package/node_modules/socks/docs/index.md +0 -5
  2096. package/node_modules/socks/docs/migratingFromV1.md +0 -86
  2097. package/node_modules/socks/package.json +0 -58
  2098. package/node_modules/socks/typings/client/socksclient.d.ts +0 -162
  2099. package/node_modules/socks/typings/common/constants.d.ts +0 -151
  2100. package/node_modules/socks/typings/common/helpers.d.ts +0 -17
  2101. package/node_modules/socks/typings/common/receivebuffer.d.ts +0 -12
  2102. package/node_modules/socks/typings/common/util.d.ts +0 -14
  2103. package/node_modules/socks/typings/index.d.ts +0 -1
  2104. package/node_modules/socks-proxy-agent/LICENSE +0 -22
  2105. package/node_modules/socks-proxy-agent/README.md +0 -50
  2106. package/node_modules/socks-proxy-agent/dist/index.d.ts +0 -27
  2107. package/node_modules/socks-proxy-agent/dist/index.d.ts.map +0 -1
  2108. package/node_modules/socks-proxy-agent/dist/index.js +0 -195
  2109. package/node_modules/socks-proxy-agent/dist/index.js.map +0 -1
  2110. package/node_modules/socks-proxy-agent/package.json +0 -142
  2111. package/node_modules/source-map/CHANGELOG.md +0 -301
  2112. package/node_modules/source-map/LICENSE +0 -28
  2113. package/node_modules/source-map/README.md +0 -742
  2114. package/node_modules/source-map/dist/source-map.debug.js +0 -3234
  2115. package/node_modules/source-map/dist/source-map.js +0 -3233
  2116. package/node_modules/source-map/dist/source-map.min.js +0 -2
  2117. package/node_modules/source-map/dist/source-map.min.js.map +0 -1
  2118. package/node_modules/source-map/lib/array-set.js +0 -121
  2119. package/node_modules/source-map/lib/base64-vlq.js +0 -140
  2120. package/node_modules/source-map/lib/base64.js +0 -67
  2121. package/node_modules/source-map/lib/binary-search.js +0 -111
  2122. package/node_modules/source-map/lib/mapping-list.js +0 -79
  2123. package/node_modules/source-map/lib/quick-sort.js +0 -114
  2124. package/node_modules/source-map/lib/source-map-consumer.js +0 -1145
  2125. package/node_modules/source-map/lib/source-map-generator.js +0 -425
  2126. package/node_modules/source-map/lib/source-node.js +0 -413
  2127. package/node_modules/source-map/lib/util.js +0 -488
  2128. package/node_modules/source-map/package.json +0 -73
  2129. package/node_modules/source-map/source-map.d.ts +0 -98
  2130. package/node_modules/source-map/source-map.js +0 -8
  2131. package/node_modules/string-width/index.d.ts +0 -29
  2132. package/node_modules/string-width/index.js +0 -47
  2133. package/node_modules/string-width/license +0 -9
  2134. package/node_modules/string-width/node_modules/ansi-regex/index.d.ts +0 -37
  2135. package/node_modules/string-width/node_modules/ansi-regex/index.js +0 -10
  2136. package/node_modules/string-width/node_modules/ansi-regex/license +0 -9
  2137. package/node_modules/string-width/node_modules/ansi-regex/package.json +0 -55
  2138. package/node_modules/string-width/node_modules/ansi-regex/readme.md +0 -78
  2139. package/node_modules/string-width/node_modules/strip-ansi/index.d.ts +0 -17
  2140. package/node_modules/string-width/node_modules/strip-ansi/index.js +0 -4
  2141. package/node_modules/string-width/node_modules/strip-ansi/license +0 -9
  2142. package/node_modules/string-width/node_modules/strip-ansi/package.json +0 -54
  2143. package/node_modules/string-width/node_modules/strip-ansi/readme.md +0 -46
  2144. package/node_modules/string-width/package.json +0 -56
  2145. package/node_modules/string-width/readme.md +0 -50
  2146. package/node_modules/strip-ansi/index.d.ts +0 -15
  2147. package/node_modules/strip-ansi/index.js +0 -19
  2148. package/node_modules/strip-ansi/license +0 -9
  2149. package/node_modules/strip-ansi/package.json +0 -59
  2150. package/node_modules/strip-ansi/readme.md +0 -37
  2151. package/node_modules/strtok3/LICENSE.txt +0 -21
  2152. package/node_modules/strtok3/README.md +0 -399
  2153. package/node_modules/strtok3/lib/AbstractTokenizer.d.ts +0 -76
  2154. package/node_modules/strtok3/lib/AbstractTokenizer.js +0 -111
  2155. package/node_modules/strtok3/lib/BlobTokenizer.d.ts +0 -29
  2156. package/node_modules/strtok3/lib/BlobTokenizer.js +0 -53
  2157. package/node_modules/strtok3/lib/BufferTokenizer.d.ts +0 -29
  2158. package/node_modules/strtok3/lib/BufferTokenizer.js +0 -52
  2159. package/node_modules/strtok3/lib/FileTokenizer.d.ts +0 -37
  2160. package/node_modules/strtok3/lib/FileTokenizer.js +0 -61
  2161. package/node_modules/strtok3/lib/ReadStreamTokenizer.d.ts +0 -34
  2162. package/node_modules/strtok3/lib/ReadStreamTokenizer.js +0 -107
  2163. package/node_modules/strtok3/lib/core.d.ts +0 -40
  2164. package/node_modules/strtok3/lib/core.js +0 -62
  2165. package/node_modules/strtok3/lib/index.d.ts +0 -16
  2166. package/node_modules/strtok3/lib/index.js +0 -22
  2167. package/node_modules/strtok3/lib/stream/AbstractStreamReader.d.ts +0 -54
  2168. package/node_modules/strtok3/lib/stream/AbstractStreamReader.js +0 -71
  2169. package/node_modules/strtok3/lib/stream/Deferred.d.ts +0 -6
  2170. package/node_modules/strtok3/lib/stream/Deferred.js +0 -10
  2171. package/node_modules/strtok3/lib/stream/Errors.d.ts +0 -10
  2172. package/node_modules/strtok3/lib/stream/Errors.js +0 -16
  2173. package/node_modules/strtok3/lib/stream/StreamReader.d.ts +0 -29
  2174. package/node_modules/strtok3/lib/stream/StreamReader.js +0 -83
  2175. package/node_modules/strtok3/lib/stream/WebStreamByobReader.d.ts +0 -14
  2176. package/node_modules/strtok3/lib/stream/WebStreamByobReader.js +0 -27
  2177. package/node_modules/strtok3/lib/stream/WebStreamDefaultReader.d.ts +0 -19
  2178. package/node_modules/strtok3/lib/stream/WebStreamDefaultReader.js +0 -62
  2179. package/node_modules/strtok3/lib/stream/WebStreamReader.d.ts +0 -14
  2180. package/node_modules/strtok3/lib/stream/WebStreamReader.js +0 -13
  2181. package/node_modules/strtok3/lib/stream/WebStreamReaderFactory.d.ts +0 -5
  2182. package/node_modules/strtok3/lib/stream/WebStreamReaderFactory.js +0 -19
  2183. package/node_modules/strtok3/lib/stream/index.d.ts +0 -6
  2184. package/node_modules/strtok3/lib/stream/index.js +0 -5
  2185. package/node_modules/strtok3/lib/types.d.ts +0 -139
  2186. package/node_modules/strtok3/lib/types.js +0 -1
  2187. package/node_modules/strtok3/package.json +0 -94
  2188. package/node_modules/supports-color/browser.js +0 -5
  2189. package/node_modules/supports-color/index.js +0 -135
  2190. package/node_modules/supports-color/license +0 -9
  2191. package/node_modules/supports-color/package.json +0 -53
  2192. package/node_modules/supports-color/readme.md +0 -76
  2193. package/node_modules/thenify/History.md +0 -11
  2194. package/node_modules/thenify/LICENSE +0 -22
  2195. package/node_modules/thenify/README.md +0 -120
  2196. package/node_modules/thenify/index.js +0 -77
  2197. package/node_modules/thenify/package.json +0 -31
  2198. package/node_modules/thenify-all/History.md +0 -11
  2199. package/node_modules/thenify-all/LICENSE +0 -22
  2200. package/node_modules/thenify-all/README.md +0 -66
  2201. package/node_modules/thenify-all/index.js +0 -73
  2202. package/node_modules/thenify-all/package.json +0 -34
  2203. package/node_modules/token-types/LICENSE.txt +0 -9
  2204. package/node_modules/token-types/README.md +0 -120
  2205. package/node_modules/token-types/lib/index.d.ts +0 -135
  2206. package/node_modules/token-types/lib/index.js +0 -401
  2207. package/node_modules/token-types/package.json +0 -81
  2208. package/node_modules/uint8array-extras/index.d.ts +0 -331
  2209. package/node_modules/uint8array-extras/index.js +0 -318
  2210. package/node_modules/uint8array-extras/license +0 -9
  2211. package/node_modules/uint8array-extras/package.json +0 -54
  2212. package/node_modules/uint8array-extras/readme.md +0 -318
  2213. package/node_modules/uuid/LICENSE.md +0 -9
  2214. package/node_modules/uuid/README.md +0 -491
  2215. package/node_modules/uuid/dist/index.d.ts +0 -15
  2216. package/node_modules/uuid/dist/index.js +0 -14
  2217. package/node_modules/uuid/dist/max.d.ts +0 -2
  2218. package/node_modules/uuid/dist/max.js +0 -1
  2219. package/node_modules/uuid/dist/md5.d.ts +0 -2
  2220. package/node_modules/uuid/dist/md5.js +0 -135
  2221. package/node_modules/uuid/dist/nil.d.ts +0 -2
  2222. package/node_modules/uuid/dist/nil.js +0 -1
  2223. package/node_modules/uuid/dist/parse.d.ts +0 -3
  2224. package/node_modules/uuid/dist/parse.js +0 -9
  2225. package/node_modules/uuid/dist/regex.d.ts +0 -2
  2226. package/node_modules/uuid/dist/regex.js +0 -1
  2227. package/node_modules/uuid/dist/rng.d.ts +0 -1
  2228. package/node_modules/uuid/dist/rng.js +0 -4
  2229. package/node_modules/uuid/dist/sha1.d.ts +0 -2
  2230. package/node_modules/uuid/dist/sha1.js +0 -70
  2231. package/node_modules/uuid/dist/stringify.d.ts +0 -3
  2232. package/node_modules/uuid/dist/stringify.js +0 -35
  2233. package/node_modules/uuid/dist/types.d.ts +0 -22
  2234. package/node_modules/uuid/dist/types.js +0 -1
  2235. package/node_modules/uuid/dist/uuid-bin.d.ts +0 -1
  2236. package/node_modules/uuid/dist/uuid-bin.js +0 -70
  2237. package/node_modules/uuid/dist/v1.d.ts +0 -11
  2238. package/node_modules/uuid/dist/v1.js +0 -83
  2239. package/node_modules/uuid/dist/v1ToV6.d.ts +0 -3
  2240. package/node_modules/uuid/dist/v1ToV6.js +0 -10
  2241. package/node_modules/uuid/dist/v3.d.ts +0 -9
  2242. package/node_modules/uuid/dist/v3.js +0 -9
  2243. package/node_modules/uuid/dist/v35.d.ts +0 -7
  2244. package/node_modules/uuid/dist/v35.js +0 -39
  2245. package/node_modules/uuid/dist/v4.d.ts +0 -4
  2246. package/node_modules/uuid/dist/v4.js +0 -29
  2247. package/node_modules/uuid/dist/v5.d.ts +0 -9
  2248. package/node_modules/uuid/dist/v5.js +0 -9
  2249. package/node_modules/uuid/dist/v6.d.ts +0 -4
  2250. package/node_modules/uuid/dist/v6.js +0 -20
  2251. package/node_modules/uuid/dist/v6ToV1.d.ts +0 -2
  2252. package/node_modules/uuid/dist/v6ToV1.js +0 -10
  2253. package/node_modules/uuid/dist/v7.d.ts +0 -9
  2254. package/node_modules/uuid/dist/v7.js +0 -65
  2255. package/node_modules/uuid/dist/validate.d.ts +0 -2
  2256. package/node_modules/uuid/dist/validate.js +0 -5
  2257. package/node_modules/uuid/dist/version.d.ts +0 -2
  2258. package/node_modules/uuid/dist/version.js +0 -8
  2259. package/node_modules/uuid/dist-node/bin/uuid +0 -2
  2260. package/node_modules/uuid/dist-node/index.js +0 -14
  2261. package/node_modules/uuid/dist-node/max.js +0 -1
  2262. package/node_modules/uuid/dist-node/md5.js +0 -11
  2263. package/node_modules/uuid/dist-node/nil.js +0 -1
  2264. package/node_modules/uuid/dist-node/parse.js +0 -9
  2265. package/node_modules/uuid/dist-node/regex.js +0 -1
  2266. package/node_modules/uuid/dist-node/rng.js +0 -4
  2267. package/node_modules/uuid/dist-node/sha1.js +0 -11
  2268. package/node_modules/uuid/dist-node/stringify.js +0 -35
  2269. package/node_modules/uuid/dist-node/types.js +0 -1
  2270. package/node_modules/uuid/dist-node/uuid-bin.js +0 -70
  2271. package/node_modules/uuid/dist-node/v1.js +0 -83
  2272. package/node_modules/uuid/dist-node/v1ToV6.js +0 -10
  2273. package/node_modules/uuid/dist-node/v3.js +0 -9
  2274. package/node_modules/uuid/dist-node/v35.js +0 -39
  2275. package/node_modules/uuid/dist-node/v4.js +0 -29
  2276. package/node_modules/uuid/dist-node/v5.js +0 -9
  2277. package/node_modules/uuid/dist-node/v6.js +0 -20
  2278. package/node_modules/uuid/dist-node/v6ToV1.js +0 -10
  2279. package/node_modules/uuid/dist-node/v7.js +0 -65
  2280. package/node_modules/uuid/dist-node/validate.js +0 -5
  2281. package/node_modules/uuid/dist-node/version.js +0 -8
  2282. package/node_modules/uuid/package.json +0 -110
  2283. package/node_modules/wrap-ansi/index.js +0 -216
  2284. package/node_modules/wrap-ansi/license +0 -9
  2285. package/node_modules/wrap-ansi/node_modules/ansi-regex/index.d.ts +0 -37
  2286. package/node_modules/wrap-ansi/node_modules/ansi-regex/index.js +0 -10
  2287. package/node_modules/wrap-ansi/node_modules/ansi-regex/license +0 -9
  2288. package/node_modules/wrap-ansi/node_modules/ansi-regex/package.json +0 -55
  2289. package/node_modules/wrap-ansi/node_modules/ansi-regex/readme.md +0 -78
  2290. package/node_modules/wrap-ansi/node_modules/strip-ansi/index.d.ts +0 -17
  2291. package/node_modules/wrap-ansi/node_modules/strip-ansi/index.js +0 -4
  2292. package/node_modules/wrap-ansi/node_modules/strip-ansi/license +0 -9
  2293. package/node_modules/wrap-ansi/node_modules/strip-ansi/package.json +0 -54
  2294. package/node_modules/wrap-ansi/node_modules/strip-ansi/readme.md +0 -46
  2295. package/node_modules/wrap-ansi/package.json +0 -62
  2296. package/node_modules/wrap-ansi/readme.md +0 -91
  2297. package/node_modules/wrappy/LICENSE +0 -15
  2298. package/node_modules/wrappy/README.md +0 -36
  2299. package/node_modules/wrappy/package.json +0 -29
  2300. package/node_modules/wrappy/wrappy.js +0 -33
  2301. package/node_modules/y18n/CHANGELOG.md +0 -100
  2302. package/node_modules/y18n/LICENSE +0 -13
  2303. package/node_modules/y18n/README.md +0 -127
  2304. package/node_modules/y18n/build/index.cjs +0 -203
  2305. package/node_modules/y18n/build/lib/cjs.js +0 -6
  2306. package/node_modules/y18n/build/lib/index.js +0 -174
  2307. package/node_modules/y18n/build/lib/platform-shims/node.js +0 -19
  2308. package/node_modules/y18n/index.mjs +0 -8
  2309. package/node_modules/y18n/package.json +0 -70
  2310. package/node_modules/yargs/CHANGELOG.md +0 -88
  2311. package/node_modules/yargs/LICENSE +0 -21
  2312. package/node_modules/yargs/README.md +0 -202
  2313. package/node_modules/yargs/browser.mjs +0 -7
  2314. package/node_modules/yargs/build/index.cjs +0 -2920
  2315. package/node_modules/yargs/build/lib/argsert.js +0 -62
  2316. package/node_modules/yargs/build/lib/command.js +0 -382
  2317. package/node_modules/yargs/build/lib/completion-templates.js +0 -47
  2318. package/node_modules/yargs/build/lib/completion.js +0 -128
  2319. package/node_modules/yargs/build/lib/middleware.js +0 -53
  2320. package/node_modules/yargs/build/lib/parse-command.js +0 -32
  2321. package/node_modules/yargs/build/lib/typings/common-types.js +0 -9
  2322. package/node_modules/yargs/build/lib/typings/yargs-parser-types.js +0 -1
  2323. package/node_modules/yargs/build/lib/usage.js +0 -548
  2324. package/node_modules/yargs/build/lib/utils/apply-extends.js +0 -59
  2325. package/node_modules/yargs/build/lib/utils/is-promise.js +0 -5
  2326. package/node_modules/yargs/build/lib/utils/levenshtein.js +0 -26
  2327. package/node_modules/yargs/build/lib/utils/obj-filter.js +0 -10
  2328. package/node_modules/yargs/build/lib/utils/process-argv.js +0 -17
  2329. package/node_modules/yargs/build/lib/utils/set-blocking.js +0 -12
  2330. package/node_modules/yargs/build/lib/utils/which-module.js +0 -10
  2331. package/node_modules/yargs/build/lib/validation.js +0 -308
  2332. package/node_modules/yargs/build/lib/yargs-factory.js +0 -1143
  2333. package/node_modules/yargs/build/lib/yerror.js +0 -7
  2334. package/node_modules/yargs/helpers/helpers.mjs +0 -10
  2335. package/node_modules/yargs/helpers/index.js +0 -14
  2336. package/node_modules/yargs/helpers/package.json +0 -3
  2337. package/node_modules/yargs/index.cjs +0 -39
  2338. package/node_modules/yargs/index.mjs +0 -8
  2339. package/node_modules/yargs/lib/platform-shims/browser.mjs +0 -92
  2340. package/node_modules/yargs/lib/platform-shims/esm.mjs +0 -67
  2341. package/node_modules/yargs/locales/be.json +0 -46
  2342. package/node_modules/yargs/locales/de.json +0 -46
  2343. package/node_modules/yargs/locales/en.json +0 -51
  2344. package/node_modules/yargs/locales/es.json +0 -46
  2345. package/node_modules/yargs/locales/fi.json +0 -49
  2346. package/node_modules/yargs/locales/fr.json +0 -53
  2347. package/node_modules/yargs/locales/hi.json +0 -49
  2348. package/node_modules/yargs/locales/hu.json +0 -46
  2349. package/node_modules/yargs/locales/id.json +0 -50
  2350. package/node_modules/yargs/locales/it.json +0 -46
  2351. package/node_modules/yargs/locales/ja.json +0 -51
  2352. package/node_modules/yargs/locales/ko.json +0 -49
  2353. package/node_modules/yargs/locales/nb.json +0 -44
  2354. package/node_modules/yargs/locales/nl.json +0 -49
  2355. package/node_modules/yargs/locales/nn.json +0 -44
  2356. package/node_modules/yargs/locales/pirate.json +0 -13
  2357. package/node_modules/yargs/locales/pl.json +0 -49
  2358. package/node_modules/yargs/locales/pt.json +0 -45
  2359. package/node_modules/yargs/locales/pt_BR.json +0 -48
  2360. package/node_modules/yargs/locales/ru.json +0 -46
  2361. package/node_modules/yargs/locales/th.json +0 -46
  2362. package/node_modules/yargs/locales/tr.json +0 -48
  2363. package/node_modules/yargs/locales/zh_CN.json +0 -48
  2364. package/node_modules/yargs/locales/zh_TW.json +0 -47
  2365. package/node_modules/yargs/package.json +0 -122
  2366. package/node_modules/yargs/yargs +0 -9
  2367. package/node_modules/yargs-parser/CHANGELOG.md +0 -263
  2368. package/node_modules/yargs-parser/LICENSE.txt +0 -14
  2369. package/node_modules/yargs-parser/README.md +0 -518
  2370. package/node_modules/yargs-parser/browser.js +0 -29
  2371. package/node_modules/yargs-parser/build/index.cjs +0 -1042
  2372. package/node_modules/yargs-parser/build/lib/index.js +0 -59
  2373. package/node_modules/yargs-parser/build/lib/string-utils.js +0 -65
  2374. package/node_modules/yargs-parser/build/lib/tokenize-arg-string.js +0 -40
  2375. package/node_modules/yargs-parser/build/lib/yargs-parser-types.js +0 -12
  2376. package/node_modules/yargs-parser/build/lib/yargs-parser.js +0 -1037
  2377. package/node_modules/yargs-parser/package.json +0 -87
  2378. package/node_modules/yauzl/LICENSE +0 -21
  2379. package/node_modules/yauzl/README.md +0 -658
  2380. package/node_modules/yauzl/index.js +0 -796
  2381. package/node_modules/yauzl/package.json +0 -40
  2382. /package/node_modules/{@entelligentsia/pi-coding-agent/dist/core/tools → @earendil-works/pi-agent-core/dist/harness/utils}/truncate.d.ts +0 -0
  2383. /package/node_modules/{@entelligentsia → @earendil-works}/pi-agent-core/dist/types.js +0 -0
  2384. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/api-registry.d.ts +0 -0
  2385. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/api-registry.d.ts.map +0 -0
  2386. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/api-registry.js +0 -0
  2387. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/api-registry.js.map +0 -0
  2388. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/bedrock-provider.d.ts +0 -0
  2389. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/bedrock-provider.d.ts.map +0 -0
  2390. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/bedrock-provider.js +0 -0
  2391. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/bedrock-provider.js.map +0 -0
  2392. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/cli.d.ts +0 -0
  2393. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/env-api-keys.d.ts +0 -0
  2394. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/models.d.ts +0 -0
  2395. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/models.d.ts.map +0 -0
  2396. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/models.js +0 -0
  2397. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/models.js.map +0 -0
  2398. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/oauth.d.ts +0 -0
  2399. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/oauth.d.ts.map +0 -0
  2400. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/oauth.js +0 -0
  2401. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/oauth.js.map +0 -0
  2402. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/amazon-bedrock.d.ts +0 -0
  2403. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/anthropic.d.ts +0 -0
  2404. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/azure-openai-responses.d.ts +0 -0
  2405. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/azure-openai-responses.d.ts.map +0 -0
  2406. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/azure-openai-responses.js +0 -0
  2407. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/azure-openai-responses.js.map +0 -0
  2408. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/cloudflare.d.ts +0 -0
  2409. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/cloudflare.d.ts.map +0 -0
  2410. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/cloudflare.js +0 -0
  2411. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/cloudflare.js.map +0 -0
  2412. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/faux.d.ts +0 -0
  2413. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/faux.d.ts.map +0 -0
  2414. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/faux.js +0 -0
  2415. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/faux.js.map +0 -0
  2416. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/github-copilot-headers.d.ts +0 -0
  2417. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/github-copilot-headers.d.ts.map +0 -0
  2418. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/github-copilot-headers.js +0 -0
  2419. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/github-copilot-headers.js.map +0 -0
  2420. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/google-shared.d.ts +0 -0
  2421. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/google-shared.d.ts.map +0 -0
  2422. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/google-shared.js +0 -0
  2423. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/google-shared.js.map +0 -0
  2424. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/google-vertex.d.ts +0 -0
  2425. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/google-vertex.d.ts.map +0 -0
  2426. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/google-vertex.js +0 -0
  2427. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/google-vertex.js.map +0 -0
  2428. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/google.d.ts +0 -0
  2429. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/google.d.ts.map +0 -0
  2430. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/google.js +0 -0
  2431. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/google.js.map +0 -0
  2432. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/mistral.d.ts +0 -0
  2433. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/mistral.d.ts.map +0 -0
  2434. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/mistral.js +0 -0
  2435. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/mistral.js.map +0 -0
  2436. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/openai-codex-responses.d.ts +0 -0
  2437. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/openai-completions.d.ts +0 -0
  2438. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/openai-responses-shared.d.ts +0 -0
  2439. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/openai-responses-shared.d.ts.map +0 -0
  2440. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/openai-responses-shared.js +0 -0
  2441. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/openai-responses-shared.js.map +0 -0
  2442. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/openai-responses.d.ts +0 -0
  2443. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/openai-responses.d.ts.map +0 -0
  2444. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/openai-responses.js +0 -0
  2445. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/openai-responses.js.map +0 -0
  2446. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/register-builtins.d.ts +0 -0
  2447. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/register-builtins.d.ts.map +0 -0
  2448. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/register-builtins.js +0 -0
  2449. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/register-builtins.js.map +0 -0
  2450. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/simple-options.d.ts +0 -0
  2451. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/transform-messages.d.ts +0 -0
  2452. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/transform-messages.d.ts.map +0 -0
  2453. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/transform-messages.js +0 -0
  2454. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/providers/transform-messages.js.map +0 -0
  2455. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/session-resources.d.ts +0 -0
  2456. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/session-resources.d.ts.map +0 -0
  2457. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/session-resources.js +0 -0
  2458. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/session-resources.js.map +0 -0
  2459. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/stream.d.ts +0 -0
  2460. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/stream.d.ts.map +0 -0
  2461. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/stream.js +0 -0
  2462. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/stream.js.map +0 -0
  2463. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/types.js +0 -0
  2464. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/diagnostics.d.ts +0 -0
  2465. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/diagnostics.d.ts.map +0 -0
  2466. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/diagnostics.js +0 -0
  2467. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/diagnostics.js.map +0 -0
  2468. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/event-stream.d.ts +0 -0
  2469. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/event-stream.d.ts.map +0 -0
  2470. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/event-stream.js +0 -0
  2471. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/event-stream.js.map +0 -0
  2472. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/hash.d.ts +0 -0
  2473. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/hash.d.ts.map +0 -0
  2474. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/hash.js +0 -0
  2475. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/hash.js.map +0 -0
  2476. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/headers.d.ts +0 -0
  2477. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/headers.d.ts.map +0 -0
  2478. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/headers.js +0 -0
  2479. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/headers.js.map +0 -0
  2480. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/json-parse.d.ts +0 -0
  2481. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/json-parse.d.ts.map +0 -0
  2482. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/json-parse.js +0 -0
  2483. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/json-parse.js.map +0 -0
  2484. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/oauth/anthropic.d.ts +0 -0
  2485. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/oauth/anthropic.d.ts.map +0 -0
  2486. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/oauth/anthropic.js +0 -0
  2487. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/oauth/anthropic.js.map +0 -0
  2488. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/oauth/github-copilot.d.ts +0 -0
  2489. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/oauth/github-copilot.d.ts.map +0 -0
  2490. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/oauth/github-copilot.js +0 -0
  2491. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/oauth/github-copilot.js.map +0 -0
  2492. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/oauth/index.d.ts +0 -0
  2493. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/oauth/index.d.ts.map +0 -0
  2494. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/oauth/index.js +0 -0
  2495. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/oauth/index.js.map +0 -0
  2496. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/oauth/oauth-page.d.ts +0 -0
  2497. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/oauth/oauth-page.d.ts.map +0 -0
  2498. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/oauth/oauth-page.js +0 -0
  2499. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/oauth/oauth-page.js.map +0 -0
  2500. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/oauth/openai-codex.d.ts +0 -0
  2501. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/oauth/openai-codex.d.ts.map +0 -0
  2502. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/oauth/openai-codex.js +0 -0
  2503. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/oauth/openai-codex.js.map +0 -0
  2504. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/oauth/pkce.d.ts +0 -0
  2505. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/oauth/pkce.d.ts.map +0 -0
  2506. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/oauth/pkce.js +0 -0
  2507. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/oauth/pkce.js.map +0 -0
  2508. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/oauth/types.d.ts +0 -0
  2509. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/oauth/types.d.ts.map +0 -0
  2510. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/oauth/types.js +0 -0
  2511. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/oauth/types.js.map +0 -0
  2512. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/sanitize-unicode.d.ts +0 -0
  2513. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/sanitize-unicode.d.ts.map +0 -0
  2514. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/sanitize-unicode.js +0 -0
  2515. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/sanitize-unicode.js.map +0 -0
  2516. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/typebox-helpers.d.ts +0 -0
  2517. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/typebox-helpers.d.ts.map +0 -0
  2518. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/typebox-helpers.js +0 -0
  2519. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/typebox-helpers.js.map +0 -0
  2520. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/validation.d.ts +0 -0
  2521. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/validation.d.ts.map +0 -0
  2522. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/validation.js +0 -0
  2523. /package/node_modules/{@entelligentsia → @earendil-works}/pi-ai/dist/utils/validation.js.map +0 -0
  2524. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/bun/cli.d.ts +0 -0
  2525. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/bun/cli.d.ts.map +0 -0
  2526. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/bun/cli.js +0 -0
  2527. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/bun/cli.js.map +0 -0
  2528. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/bun/register-bedrock.d.ts +0 -0
  2529. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/bun/restore-sandbox-env.d.ts +0 -0
  2530. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/bun/restore-sandbox-env.d.ts.map +0 -0
  2531. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/bun/restore-sandbox-env.js +0 -0
  2532. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/bun/restore-sandbox-env.js.map +0 -0
  2533. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/cli/config-selector.d.ts +0 -0
  2534. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/cli/file-processor.js +0 -0
  2535. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/cli/initial-message.js +0 -0
  2536. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/cli/list-models.d.ts +0 -0
  2537. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/cli/session-picker.d.ts +0 -0
  2538. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/cli.d.ts +0 -0
  2539. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/config.d.ts +0 -0
  2540. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/agent-session-runtime.d.ts +0 -0
  2541. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/agent-session-runtime.d.ts.map +0 -0
  2542. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/agent-session-runtime.js +0 -0
  2543. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/agent-session-runtime.js.map +0 -0
  2544. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/agent-session-services.js +0 -0
  2545. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/auth-guidance.d.ts +0 -0
  2546. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/auth-guidance.d.ts.map +0 -0
  2547. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/auth-guidance.js +0 -0
  2548. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/auth-guidance.js.map +0 -0
  2549. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/bash-executor.d.ts +0 -0
  2550. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/compaction/index.d.ts +0 -0
  2551. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/compaction/index.d.ts.map +0 -0
  2552. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/compaction/index.js +0 -0
  2553. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/compaction/index.js.map +0 -0
  2554. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/compaction/utils.js +0 -0
  2555. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/defaults.js +0 -0
  2556. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/diagnostics.d.ts +0 -0
  2557. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/diagnostics.d.ts.map +0 -0
  2558. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/diagnostics.js +0 -0
  2559. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/diagnostics.js.map +0 -0
  2560. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/event-bus.d.ts +0 -0
  2561. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/event-bus.d.ts.map +0 -0
  2562. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/event-bus.js +0 -0
  2563. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/event-bus.js.map +0 -0
  2564. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/exec.d.ts +0 -0
  2565. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/exec.d.ts.map +0 -0
  2566. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/exec.js +0 -0
  2567. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/exec.js.map +0 -0
  2568. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/export-html/ansi-to-html.d.ts +0 -0
  2569. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/export-html/ansi-to-html.d.ts.map +0 -0
  2570. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/export-html/ansi-to-html.js +0 -0
  2571. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/export-html/ansi-to-html.js.map +0 -0
  2572. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/export-html/index.js +0 -0
  2573. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/export-html/template.css +0 -0
  2574. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/export-html/template.html +0 -0
  2575. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/export-html/template.js +0 -0
  2576. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/export-html/tool-renderer.d.ts +0 -0
  2577. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/export-html/tool-renderer.js +0 -0
  2578. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/export-html/vendor/highlight.min.js +0 -0
  2579. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/export-html/vendor/marked.min.js +0 -0
  2580. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/extensions/index.d.ts +0 -0
  2581. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/extensions/index.d.ts.map +0 -0
  2582. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/extensions/index.js +0 -0
  2583. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/extensions/index.js.map +0 -0
  2584. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/extensions/loader.d.ts +0 -0
  2585. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/extensions/types.js +0 -0
  2586. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/extensions/wrapper.js +0 -0
  2587. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/footer-data-provider.d.ts +0 -0
  2588. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/footer-data-provider.d.ts.map +0 -0
  2589. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/footer-data-provider.js +0 -0
  2590. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/footer-data-provider.js.map +0 -0
  2591. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/index.d.ts +0 -0
  2592. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/index.d.ts.map +0 -0
  2593. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/index.js +0 -0
  2594. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/index.js.map +0 -0
  2595. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/messages.js +0 -0
  2596. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/output-guard.d.ts +0 -0
  2597. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/output-guard.d.ts.map +0 -0
  2598. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/output-guard.js +0 -0
  2599. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/output-guard.js.map +0 -0
  2600. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/prompt-templates.d.ts +0 -0
  2601. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/provider-display-names.d.ts +0 -0
  2602. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/resolve-config-value.d.ts +0 -0
  2603. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/resolve-config-value.d.ts.map +0 -0
  2604. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/resolve-config-value.js +0 -0
  2605. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/resolve-config-value.js.map +0 -0
  2606. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/resource-loader.d.ts +0 -0
  2607. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/resource-loader.d.ts.map +0 -0
  2608. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/resource-loader.js +0 -0
  2609. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/resource-loader.js.map +0 -0
  2610. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/session-cwd.d.ts +0 -0
  2611. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/session-cwd.d.ts.map +0 -0
  2612. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/session-cwd.js +0 -0
  2613. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/session-cwd.js.map +0 -0
  2614. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/settings-manager.js +0 -0
  2615. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/skills.d.ts +0 -0
  2616. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/slash-commands.d.ts +0 -0
  2617. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/slash-commands.d.ts.map +0 -0
  2618. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/slash-commands.js +0 -0
  2619. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/slash-commands.js.map +0 -0
  2620. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/source-info.d.ts +0 -0
  2621. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/source-info.d.ts.map +0 -0
  2622. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/source-info.js +0 -0
  2623. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/source-info.js.map +0 -0
  2624. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/system-prompt.d.ts +0 -0
  2625. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/system-prompt.d.ts.map +0 -0
  2626. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/system-prompt.js +0 -0
  2627. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/system-prompt.js.map +0 -0
  2628. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/telemetry.d.ts +0 -0
  2629. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/telemetry.d.ts.map +0 -0
  2630. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/telemetry.js +0 -0
  2631. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/telemetry.js.map +0 -0
  2632. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/timings.d.ts +0 -0
  2633. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/timings.d.ts.map +0 -0
  2634. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/timings.js +0 -0
  2635. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/timings.js.map +0 -0
  2636. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/tools/edit-diff.d.ts +0 -0
  2637. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/tools/edit-diff.d.ts.map +0 -0
  2638. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/tools/edit-diff.js +0 -0
  2639. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/tools/edit-diff.js.map +0 -0
  2640. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/tools/file-mutation-queue.d.ts +0 -0
  2641. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/tools/file-mutation-queue.d.ts.map +0 -0
  2642. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/tools/file-mutation-queue.js +0 -0
  2643. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/tools/file-mutation-queue.js.map +0 -0
  2644. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/tools/index.js +0 -0
  2645. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/tools/output-accumulator.d.ts +0 -0
  2646. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/tools/output-accumulator.d.ts.map +0 -0
  2647. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/tools/output-accumulator.js +0 -0
  2648. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/tools/output-accumulator.js.map +0 -0
  2649. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/tools/path-utils.d.ts +0 -0
  2650. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/tools/path-utils.d.ts.map +0 -0
  2651. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/tools/path-utils.js +0 -0
  2652. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/tools/path-utils.js.map +0 -0
  2653. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/tools/tool-definition-wrapper.js +0 -0
  2654. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/tools/truncate.d.ts.map +0 -0
  2655. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/tools/truncate.js +0 -0
  2656. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/core/tools/truncate.js.map +0 -0
  2657. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/index.d.ts +0 -0
  2658. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/index.d.ts.map +0 -0
  2659. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/index.js +0 -0
  2660. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/index.js.map +0 -0
  2661. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/main.d.ts +0 -0
  2662. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/migrations.d.ts +0 -0
  2663. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/migrations.d.ts.map +0 -0
  2664. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/migrations.js +0 -0
  2665. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/migrations.js.map +0 -0
  2666. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/modes/index.d.ts +0 -0
  2667. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/modes/index.d.ts.map +0 -0
  2668. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/modes/index.js +0 -0
  2669. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/modes/index.js.map +0 -0
  2670. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/modes/interactive/assets/clankolas.png +0 -0
  2671. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/armin.js +0 -0
  2672. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/countdown-timer.js +0 -0
  2673. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/daxnuts.js +0 -0
  2674. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/diff.d.ts +0 -0
  2675. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/diff.d.ts.map +0 -0
  2676. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/diff.js +0 -0
  2677. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/diff.js.map +0 -0
  2678. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/dynamic-border.js +0 -0
  2679. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/index.d.ts +0 -0
  2680. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/index.d.ts.map +0 -0
  2681. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/index.js +0 -0
  2682. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/index.js.map +0 -0
  2683. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/session-selector-search.d.ts +0 -0
  2684. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/visual-truncate.d.ts +0 -0
  2685. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/modes/interactive/theme/theme-schema.json +0 -0
  2686. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/modes/print-mode.js +0 -0
  2687. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/modes/rpc/jsonl.d.ts +0 -0
  2688. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/modes/rpc/jsonl.d.ts.map +0 -0
  2689. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/modes/rpc/jsonl.js +0 -0
  2690. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/modes/rpc/jsonl.js.map +0 -0
  2691. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/modes/rpc/rpc-client.js +0 -0
  2692. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts +0 -0
  2693. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/modes/rpc/rpc-types.js +0 -0
  2694. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/package-manager-cli.d.ts +0 -0
  2695. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/package-manager-cli.d.ts.map +0 -0
  2696. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/package-manager-cli.js +0 -0
  2697. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/package-manager-cli.js.map +0 -0
  2698. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/changelog.d.ts +0 -0
  2699. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/changelog.d.ts.map +0 -0
  2700. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/changelog.js +0 -0
  2701. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/changelog.js.map +0 -0
  2702. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/child-process.d.ts +0 -0
  2703. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/child-process.d.ts.map +0 -0
  2704. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/child-process.js +0 -0
  2705. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/child-process.js.map +0 -0
  2706. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/clipboard-image.d.ts +0 -0
  2707. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/clipboard-image.d.ts.map +0 -0
  2708. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/clipboard-image.js +0 -0
  2709. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/clipboard-image.js.map +0 -0
  2710. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/clipboard-native.d.ts +0 -0
  2711. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/clipboard-native.d.ts.map +0 -0
  2712. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/clipboard-native.js +0 -0
  2713. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/clipboard-native.js.map +0 -0
  2714. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/clipboard.d.ts +0 -0
  2715. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/clipboard.d.ts.map +0 -0
  2716. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/clipboard.js +0 -0
  2717. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/clipboard.js.map +0 -0
  2718. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/exif-orientation.d.ts +0 -0
  2719. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/exif-orientation.d.ts.map +0 -0
  2720. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/exif-orientation.js +0 -0
  2721. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/exif-orientation.js.map +0 -0
  2722. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/frontmatter.d.ts +0 -0
  2723. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/frontmatter.d.ts.map +0 -0
  2724. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/frontmatter.js +0 -0
  2725. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/frontmatter.js.map +0 -0
  2726. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/fs-watch.d.ts +0 -0
  2727. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/fs-watch.d.ts.map +0 -0
  2728. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/fs-watch.js +0 -0
  2729. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/fs-watch.js.map +0 -0
  2730. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/git.d.ts +0 -0
  2731. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/git.d.ts.map +0 -0
  2732. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/git.js +0 -0
  2733. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/git.js.map +0 -0
  2734. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/image-convert.d.ts +0 -0
  2735. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/image-convert.d.ts.map +0 -0
  2736. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/image-convert.js +0 -0
  2737. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/image-convert.js.map +0 -0
  2738. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/image-resize.js +0 -0
  2739. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/paths.d.ts +0 -0
  2740. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/paths.d.ts.map +0 -0
  2741. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/paths.js +0 -0
  2742. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/paths.js.map +0 -0
  2743. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/photon.d.ts +0 -0
  2744. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/photon.d.ts.map +0 -0
  2745. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/photon.js +0 -0
  2746. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/photon.js.map +0 -0
  2747. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/pi-user-agent.d.ts +0 -0
  2748. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/pi-user-agent.d.ts.map +0 -0
  2749. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/pi-user-agent.js +0 -0
  2750. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/pi-user-agent.js.map +0 -0
  2751. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/shell.d.ts +0 -0
  2752. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/shell.d.ts.map +0 -0
  2753. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/shell.js +0 -0
  2754. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/shell.js.map +0 -0
  2755. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/sleep.d.ts +0 -0
  2756. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/sleep.d.ts.map +0 -0
  2757. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/sleep.js +0 -0
  2758. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/sleep.js.map +0 -0
  2759. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/tools-manager.d.ts +0 -0
  2760. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/version-check.d.ts +0 -0
  2761. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/version-check.d.ts.map +0 -0
  2762. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/version-check.js +0 -0
  2763. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/dist/utils/version-check.js.map +0 -0
  2764. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/docs/development.md +0 -0
  2765. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/docs/docs.json +0 -0
  2766. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/docs/images/doom-extension.png +0 -0
  2767. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/docs/images/exy.png +0 -0
  2768. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/docs/images/interactive-mode.png +0 -0
  2769. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/docs/images/tree-view.png +0 -0
  2770. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/docs/json.md +0 -0
  2771. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/docs/keybindings.md +0 -0
  2772. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/docs/prompt-templates.md +0 -0
  2773. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/docs/sessions.md +0 -0
  2774. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/docs/settings.md +0 -0
  2775. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/docs/shell-aliases.md +0 -0
  2776. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/docs/terminal-setup.md +0 -0
  2777. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/docs/tmux.md +0 -0
  2778. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/docs/usage.md +0 -0
  2779. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/docs/windows.md +0 -0
  2780. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/examples/README.md +0 -0
  2781. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/examples/extensions/doom-overlay/README.md +0 -0
  2782. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/examples/extensions/doom-overlay/doom/build/doom.js +0 -0
  2783. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
  2784. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/examples/extensions/doom-overlay/doom/build.sh +0 -0
  2785. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +0 -0
  2786. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/examples/extensions/doom-overlay/doom-engine.ts +0 -0
  2787. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/examples/extensions/doom-overlay/wad-finder.ts +0 -0
  2788. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/examples/extensions/dynamic-resources/SKILL.md +0 -0
  2789. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/examples/extensions/dynamic-resources/dynamic.md +0 -0
  2790. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/examples/extensions/plan-mode/README.md +0 -0
  2791. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/examples/extensions/plan-mode/utils.ts +0 -0
  2792. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/examples/extensions/subagent/README.md +0 -0
  2793. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/examples/extensions/subagent/agents/planner.md +0 -0
  2794. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/examples/extensions/subagent/agents/reviewer.md +0 -0
  2795. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/examples/extensions/subagent/agents/scout.md +0 -0
  2796. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/examples/extensions/subagent/agents/worker.md +0 -0
  2797. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/examples/extensions/subagent/prompts/implement-and-review.md +0 -0
  2798. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/examples/extensions/subagent/prompts/implement.md +0 -0
  2799. /package/node_modules/{@entelligentsia → @earendil-works}/pi-coding-agent/examples/extensions/subagent/prompts/scout-and-plan.md +0 -0
  2800. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/autocomplete.d.ts +0 -0
  2801. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/autocomplete.d.ts.map +0 -0
  2802. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/autocomplete.js +0 -0
  2803. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/autocomplete.js.map +0 -0
  2804. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/box.d.ts +0 -0
  2805. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/box.d.ts.map +0 -0
  2806. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/box.js +0 -0
  2807. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/box.js.map +0 -0
  2808. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/cancellable-loader.d.ts +0 -0
  2809. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/cancellable-loader.d.ts.map +0 -0
  2810. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/cancellable-loader.js +0 -0
  2811. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/cancellable-loader.js.map +0 -0
  2812. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/editor.d.ts +0 -0
  2813. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/editor.d.ts.map +0 -0
  2814. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/editor.js +0 -0
  2815. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/editor.js.map +0 -0
  2816. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/image.d.ts +0 -0
  2817. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/input.d.ts +0 -0
  2818. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/input.d.ts.map +0 -0
  2819. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/input.js +0 -0
  2820. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/input.js.map +0 -0
  2821. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/loader.d.ts +0 -0
  2822. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/loader.d.ts.map +0 -0
  2823. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/loader.js +0 -0
  2824. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/loader.js.map +0 -0
  2825. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/select-list.d.ts +0 -0
  2826. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/select-list.d.ts.map +0 -0
  2827. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/select-list.js +0 -0
  2828. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/select-list.js.map +0 -0
  2829. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/settings-list.d.ts +0 -0
  2830. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/settings-list.d.ts.map +0 -0
  2831. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/settings-list.js +0 -0
  2832. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/settings-list.js.map +0 -0
  2833. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/spacer.d.ts +0 -0
  2834. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/spacer.d.ts.map +0 -0
  2835. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/spacer.js +0 -0
  2836. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/spacer.js.map +0 -0
  2837. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/text.d.ts +0 -0
  2838. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/text.d.ts.map +0 -0
  2839. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/text.js +0 -0
  2840. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/text.js.map +0 -0
  2841. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/truncated-text.d.ts +0 -0
  2842. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/truncated-text.d.ts.map +0 -0
  2843. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/truncated-text.js +0 -0
  2844. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/components/truncated-text.js.map +0 -0
  2845. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/editor-component.d.ts +0 -0
  2846. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/editor-component.d.ts.map +0 -0
  2847. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/editor-component.js +0 -0
  2848. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/editor-component.js.map +0 -0
  2849. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/fuzzy.d.ts +0 -0
  2850. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/fuzzy.d.ts.map +0 -0
  2851. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/fuzzy.js +0 -0
  2852. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/fuzzy.js.map +0 -0
  2853. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/index.d.ts +0 -0
  2854. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/index.d.ts.map +0 -0
  2855. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/index.js +0 -0
  2856. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/index.js.map +0 -0
  2857. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/keybindings.d.ts +0 -0
  2858. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/keybindings.d.ts.map +0 -0
  2859. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/keybindings.js +0 -0
  2860. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/keybindings.js.map +0 -0
  2861. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/keys.d.ts +0 -0
  2862. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/keys.d.ts.map +0 -0
  2863. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/keys.js +0 -0
  2864. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/keys.js.map +0 -0
  2865. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/kill-ring.d.ts +0 -0
  2866. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/kill-ring.d.ts.map +0 -0
  2867. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/kill-ring.js +0 -0
  2868. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/kill-ring.js.map +0 -0
  2869. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/stdin-buffer.d.ts +0 -0
  2870. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/terminal.d.ts +0 -0
  2871. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/terminal.d.ts.map +0 -0
  2872. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/terminal.js +0 -0
  2873. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/terminal.js.map +0 -0
  2874. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/tui.d.ts +0 -0
  2875. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/tui.d.ts.map +0 -0
  2876. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/tui.js +0 -0
  2877. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/tui.js.map +0 -0
  2878. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/undo-stack.d.ts +0 -0
  2879. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/undo-stack.d.ts.map +0 -0
  2880. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/undo-stack.js +0 -0
  2881. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/undo-stack.js.map +0 -0
  2882. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/utils.d.ts +0 -0
  2883. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/utils.d.ts.map +0 -0
  2884. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/utils.js +0 -0
  2885. /package/node_modules/{@entelligentsia → @earendil-works}/pi-tui/dist/utils.js.map +0 -0
@@ -1 +0,0 @@
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;AAyC/B,OAAO,EAAE,KAAK,mBAAmB,EAAkC,MAAM,qCAAqC,CAAC;AAqK/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,CAA6B;IAClD,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,CAkH1B;IAED;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAU3B;;;OAGG;IACG,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAyEzB;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;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,mBAAmB;IAM3B,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;IA0DhC;;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;YAYf,sBAAsB;IAKpC,OAAO,CAAC,sBAAsB;IAgC9B,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;IAkBrC,OAAO,CAAC,kBAAkB;IAoD1B,WAAW,IAAI,IAAI,CAGlB;IAED,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAIpC;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,aAAa;IAYrB;;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 \"@entelligentsia/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 \"@entelligentsia/pi-ai\";\nimport type {\n\tAutocompleteItem,\n\tAutocompleteProvider,\n\tEditorComponent,\n\tKeybinding,\n\tKeyId,\n\tMarkdownTheme,\n\tOverlayHandle,\n\tOverlayOptions,\n\tSlashCommand,\n} from \"@entelligentsia/pi-tui\";\nimport {\n\tCombinedAutocompleteProvider,\n\ttype Component,\n\tContainer,\n\tfuzzyFilter,\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 \"@entelligentsia/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 { 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\n/**\n * Container that can have its rendered output overridden by a single Component.\n *\n * Used for the chat output viewport. By default it renders its children (the\n * normal message history). When `sourceOverride` is set, it delegates rendering\n * to that component instead, while preserving the original children so the\n * override can be cleared without rebuilding history.\n *\n * Drives the extension-side `ctx.ui.setOutputSource(component)` API — extensions\n * that mount a swap-target (e.g. a thread-switcher viewing a subagent tail) can\n * take over the main chat viewport on user command and restore it on dismiss.\n */\nclass SourceOverridableContainer extends Container {\n\tsourceOverride: Component | null = null;\n\n\toverride render(width: number): string[] {\n\t\tif (this.sourceOverride) {\n\t\t\treturn this.sourceOverride.render(width);\n\t\t}\n\t\treturn super.render(width);\n\t}\n\n\toverride invalidate(): void {\n\t\tthis.sourceOverride?.invalidate?.();\n\t\tsuper.invalidate();\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 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: SourceOverridableContainer;\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 SourceOverridableContainer();\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\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 check asynchronously\n\t\tcheckForNewPiVersion(this.version).then((newVersion) => {\n\t\t\tif (newVersion) {\n\t\t\t\tthis.showNewVersionNotification(newVersion);\n\t\t\t}\n\t\t});\n\n\t\t// Start package update check asynchronously\n\t\tthis.checkForPackageUpdates().then((updates) => {\n\t\t\tif (updates.length > 0) {\n\t\t\t\tthis.showPackageUpdateNotification(updates);\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();\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\t/**\n\t * Implements ctx.ui.setOutputSource — swap the chat viewport's rendering source.\n\t *\n\t * Passing a Component delegates the chat viewport's render() to it; the\n\t * original message-history children are preserved. Passing null restores\n\t * the default child-rendering behaviour.\n\t *\n\t * Extensions that own a tail buffer (e.g. forge-cli's thread-switcher\n\t * targeting a subagent log) supply a Component that yields lines from\n\t * that buffer; the user sees that content in the main viewport until the\n\t * extension calls setOutputSource(null).\n\t */\n\tprivate setChatOutputSource(component: Component | null): void {\n\t\tthis.chatContainer.sourceOverride = component;\n\t\tthis.chatContainer.invalidate();\n\t\tthis.ui.requestRender();\n\t}\n\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\tsetOutputSource: (component) => this.setChatOutputSource(component),\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 },\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 * 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\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 openExternalEditor(): 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\t// Spawn editor synchronously with inherited stdio for interactive editing\n\t\t\tconst result = spawnSync(editor, [...editorArgs, tmpFile], {\n\t\t\t\tstdio: \"inherit\",\n\t\t\t\tshell: process.platform === \"win32\",\n\t\t\t});\n\n\t\t\t// On successful exit (status 0), replace editor content\n\t\t\tif (result.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.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 = theme.fg(\n\t\t\t\"accent\",\n\t\t\t\"https://github.com/earendil-works/pi-mono/blob/main/packages/coding-agent/CHANGELOG.md\",\n\t\t);\n\t\tconst changelogLine = theme.fg(\"muted\", \"Changelog: \") + changelogUrl;\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 * Capitalize keybinding for display (e.g., \"ctrl+c\" -> \"Ctrl+C\").\n\t */\n\tprivate capitalizeKey(key: string): string {\n\t\treturn key\n\t\t\t.split(\"/\")\n\t\t\t.map((k) =>\n\t\t\t\tk\n\t\t\t\t\t.split(\"+\")\n\t\t\t\t\t.map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n\t\t\t\t\t.join(\"+\"),\n\t\t\t)\n\t\t\t.join(\"/\");\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 this.capitalizeKey(keyText(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 this.capitalizeKey(keyText(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 = key.replace(/\\b\\w/g, (c) => c.toUpperCase());\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"]}