@code-yeongyu/senpi 2026.6.4 → 2026.6.10-2

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 (1190) hide show
  1. package/CHANGELOG.md +69 -1
  2. package/README.md +116 -99
  3. package/dist/bun/cli.d.ts.map +1 -1
  4. package/dist/bun/cli.js.map +1 -1
  5. package/dist/bun/register-bedrock.d.ts.map +1 -1
  6. package/dist/bun/restore-sandbox-env.d.ts.map +1 -1
  7. package/dist/bun/restore-sandbox-env.js.map +1 -1
  8. package/dist/cli/args.d.ts +1 -0
  9. package/dist/cli/args.d.ts.map +1 -1
  10. package/dist/cli/args.js +13 -4
  11. package/dist/cli/args.js.map +1 -1
  12. package/dist/cli/config-selector.d.ts.map +1 -1
  13. package/dist/cli/config-selector.js.map +1 -1
  14. package/dist/cli/file-processor.d.ts.map +1 -1
  15. package/dist/cli/file-processor.js.map +1 -1
  16. package/dist/cli/initial-message.d.ts +1 -1
  17. package/dist/cli/initial-message.d.ts.map +1 -1
  18. package/dist/cli/initial-message.js.map +1 -1
  19. package/dist/cli/list-models.d.ts.map +1 -1
  20. package/dist/cli/list-models.js.map +1 -1
  21. package/dist/cli/project-trust.d.ts +10 -0
  22. package/dist/cli/project-trust.d.ts.map +1 -0
  23. package/dist/cli/project-trust.js +48 -0
  24. package/dist/cli/project-trust.js.map +1 -0
  25. package/dist/cli/session-picker.d.ts.map +1 -1
  26. package/dist/cli/session-picker.js.map +1 -1
  27. package/dist/cli/startup-ui.d.ts +7 -0
  28. package/dist/cli/startup-ui.d.ts.map +1 -0
  29. package/dist/cli/startup-ui.js +59 -0
  30. package/dist/cli/startup-ui.js.map +1 -0
  31. package/dist/cli-main.d.ts.map +1 -1
  32. package/dist/cli-main.js.map +1 -1
  33. package/dist/cli.d.ts.map +1 -1
  34. package/dist/cli.js +10 -1
  35. package/dist/cli.js.map +1 -1
  36. package/dist/config.d.ts.map +1 -1
  37. package/dist/config.js.map +1 -1
  38. package/dist/core/agent-session-runtime.d.ts +3 -1
  39. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  40. package/dist/core/agent-session-runtime.js +4 -9
  41. package/dist/core/agent-session-runtime.js.map +1 -1
  42. package/dist/core/agent-session-services.d.ts +2 -1
  43. package/dist/core/agent-session-services.d.ts.map +1 -1
  44. package/dist/core/agent-session-services.js +2 -2
  45. package/dist/core/agent-session-services.js.map +1 -1
  46. package/dist/core/agent-session.d.ts +33 -0
  47. package/dist/core/agent-session.d.ts.map +1 -1
  48. package/dist/core/agent-session.js +57 -79
  49. package/dist/core/agent-session.js.map +1 -1
  50. package/dist/core/auth-guidance.d.ts.map +1 -1
  51. package/dist/core/auth-guidance.js.map +1 -1
  52. package/dist/core/auth-storage.d.ts +4 -0
  53. package/dist/core/auth-storage.d.ts.map +1 -1
  54. package/dist/core/auth-storage.js +4 -8
  55. package/dist/core/auth-storage.js.map +1 -1
  56. package/dist/core/bash-executor.d.ts.map +1 -1
  57. package/dist/core/bash-executor.js.map +1 -1
  58. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  59. package/dist/core/compaction/branch-summarization.js.map +1 -1
  60. package/dist/core/compaction/compaction.d.ts.map +1 -1
  61. package/dist/core/compaction/compaction.js.map +1 -1
  62. package/dist/core/compaction/index.d.ts.map +1 -1
  63. package/dist/core/compaction/utils.d.ts +1 -1
  64. package/dist/core/compaction/utils.d.ts.map +1 -1
  65. package/dist/core/compaction/utils.js +1 -1
  66. package/dist/core/compaction/utils.js.map +1 -1
  67. package/dist/core/defaults.d.ts.map +1 -1
  68. package/dist/core/diagnostics.d.ts.map +1 -1
  69. package/dist/core/dynamic-prompt/build.d.ts.map +1 -1
  70. package/dist/core/dynamic-prompt/build.js.map +1 -1
  71. package/dist/core/dynamic-prompt/exploration.d.ts.map +1 -1
  72. package/dist/core/dynamic-prompt/exploration.js.map +1 -1
  73. package/dist/core/dynamic-prompt/identity.d.ts.map +1 -1
  74. package/dist/core/dynamic-prompt/identity.js.map +1 -1
  75. package/dist/core/dynamic-prompt/index.d.ts.map +1 -1
  76. package/dist/core/dynamic-prompt/intent-gate.d.ts.map +1 -1
  77. package/dist/core/dynamic-prompt/intent-gate.js.map +1 -1
  78. package/dist/core/dynamic-prompt/parallel-tools.d.ts.map +1 -1
  79. package/dist/core/dynamic-prompt/parallel-tools.js.map +1 -1
  80. package/dist/core/dynamic-prompt/policies.d.ts.map +1 -1
  81. package/dist/core/dynamic-prompt/policies.js.map +1 -1
  82. package/dist/core/dynamic-prompt/style.d.ts.map +1 -1
  83. package/dist/core/dynamic-prompt/style.js.map +1 -1
  84. package/dist/core/dynamic-prompt/tool-categorization.d.ts.map +1 -1
  85. package/dist/core/dynamic-prompt/tool-categorization.js.map +1 -1
  86. package/dist/core/dynamic-prompt/tool-section.d.ts.map +1 -1
  87. package/dist/core/dynamic-prompt/tool-section.js.map +1 -1
  88. package/dist/core/dynamic-prompt/types.d.ts.map +1 -1
  89. package/dist/core/dynamic-prompt/verification.d.ts.map +1 -1
  90. package/dist/core/dynamic-prompt/verification.js.map +1 -1
  91. package/dist/core/event-bus.d.ts.map +1 -1
  92. package/dist/core/event-bus.js.map +1 -1
  93. package/dist/core/exec.d.ts.map +1 -1
  94. package/dist/core/exec.js.map +1 -1
  95. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  96. package/dist/core/export-html/ansi-to-html.js.map +1 -1
  97. package/dist/core/export-html/index.d.ts.map +1 -1
  98. package/dist/core/export-html/index.js.map +1 -1
  99. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  100. package/dist/core/export-html/tool-renderer.js.map +1 -1
  101. package/dist/core/extensions/builtin/anthropic-bash/index.d.ts.map +1 -1
  102. package/dist/core/extensions/builtin/anthropic-bash/index.js.map +1 -1
  103. package/dist/core/extensions/builtin/anthropic-web-search/index.d.ts.map +1 -1
  104. package/dist/core/extensions/builtin/anthropic-web-search/index.js.map +1 -1
  105. package/dist/core/extensions/builtin/bash-timeout/index.d.ts.map +1 -1
  106. package/dist/core/extensions/builtin/bash-timeout/index.js.map +1 -1
  107. package/dist/core/extensions/builtin/bash-timeout/timeout.d.ts.map +1 -1
  108. package/dist/core/extensions/builtin/bash-timeout/timeout.js.map +1 -1
  109. package/dist/core/extensions/builtin/compaction/checkpoint-state.d.ts.map +1 -1
  110. package/dist/core/extensions/builtin/compaction/checkpoint-state.js.map +1 -1
  111. package/dist/core/extensions/builtin/compaction/circuit-breaker.d.ts.map +1 -1
  112. package/dist/core/extensions/builtin/compaction/circuit-breaker.js.map +1 -1
  113. package/dist/core/extensions/builtin/compaction/context-reduction.d.ts.map +1 -1
  114. package/dist/core/extensions/builtin/compaction/context-reduction.js +1 -1
  115. package/dist/core/extensions/builtin/compaction/context-reduction.js.map +1 -1
  116. package/dist/core/extensions/builtin/compaction/degradation-monitor.d.ts +0 -1
  117. package/dist/core/extensions/builtin/compaction/degradation-monitor.d.ts.map +1 -1
  118. package/dist/core/extensions/builtin/compaction/degradation-monitor.js +0 -1
  119. package/dist/core/extensions/builtin/compaction/degradation-monitor.js.map +1 -1
  120. package/dist/core/extensions/builtin/compaction/index.d.ts.map +1 -1
  121. package/dist/core/extensions/builtin/compaction/index.js +4 -4
  122. package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
  123. package/dist/core/extensions/builtin/compaction/openai-remote.d.ts.map +1 -1
  124. package/dist/core/extensions/builtin/compaction/openai-remote.js.map +1 -1
  125. package/dist/core/extensions/builtin/compaction/per-turn-cap.d.ts.map +1 -1
  126. package/dist/core/extensions/builtin/compaction/per-turn-cap.js.map +1 -1
  127. package/dist/core/extensions/builtin/compaction/policy.d.ts +0 -5
  128. package/dist/core/extensions/builtin/compaction/policy.d.ts.map +1 -1
  129. package/dist/core/extensions/builtin/compaction/policy.js +0 -4
  130. package/dist/core/extensions/builtin/compaction/policy.js.map +1 -1
  131. package/dist/core/extensions/builtin/compaction/prompts.d.ts.map +1 -1
  132. package/dist/core/extensions/builtin/compaction/prompts.js.map +1 -1
  133. package/dist/core/extensions/builtin/compaction/repair-tool-pairs.d.ts.map +1 -1
  134. package/dist/core/extensions/builtin/compaction/repair-tool-pairs.js.map +1 -1
  135. package/dist/core/extensions/builtin/compaction/restoration-tracker.d.ts.map +1 -1
  136. package/dist/core/extensions/builtin/compaction/restoration-tracker.js.map +1 -1
  137. package/dist/core/extensions/builtin/compaction/speculative.d.ts +0 -6
  138. package/dist/core/extensions/builtin/compaction/speculative.d.ts.map +1 -1
  139. package/dist/core/extensions/builtin/compaction/speculative.js +0 -3
  140. package/dist/core/extensions/builtin/compaction/speculative.js.map +1 -1
  141. package/dist/core/extensions/builtin/compaction/state.d.ts.map +1 -1
  142. package/dist/core/extensions/builtin/compaction/state.js.map +1 -1
  143. package/dist/core/extensions/builtin/compaction/todo-bridge.d.ts.map +1 -1
  144. package/dist/core/extensions/builtin/compaction/todo-bridge.js.map +1 -1
  145. package/dist/core/extensions/builtin/compaction/tool-truncation.d.ts.map +1 -1
  146. package/dist/core/extensions/builtin/compaction/tool-truncation.js.map +1 -1
  147. package/dist/core/extensions/builtin/diff.d.ts.map +1 -1
  148. package/dist/core/extensions/builtin/diff.js.map +1 -1
  149. package/dist/core/extensions/builtin/files.d.ts.map +1 -1
  150. package/dist/core/extensions/builtin/files.js.map +1 -1
  151. package/dist/core/extensions/builtin/gpt-apply-patch/apply.d.ts.map +1 -1
  152. package/dist/core/extensions/builtin/gpt-apply-patch/apply.js.map +1 -1
  153. package/dist/core/extensions/builtin/gpt-apply-patch/constants.d.ts.map +1 -1
  154. package/dist/core/extensions/builtin/gpt-apply-patch/constants.js.map +1 -1
  155. package/dist/core/extensions/builtin/gpt-apply-patch/errors.d.ts.map +1 -1
  156. package/dist/core/extensions/builtin/gpt-apply-patch/errors.js +0 -2
  157. package/dist/core/extensions/builtin/gpt-apply-patch/errors.js.map +1 -1
  158. package/dist/core/extensions/builtin/gpt-apply-patch/extension.d.ts +1 -1
  159. package/dist/core/extensions/builtin/gpt-apply-patch/extension.d.ts.map +1 -1
  160. package/dist/core/extensions/builtin/gpt-apply-patch/extension.js +10 -2
  161. package/dist/core/extensions/builtin/gpt-apply-patch/extension.js.map +1 -1
  162. package/dist/core/extensions/builtin/gpt-apply-patch/index.d.ts.map +1 -1
  163. package/dist/core/extensions/builtin/gpt-apply-patch/params.d.ts.map +1 -1
  164. package/dist/core/extensions/builtin/gpt-apply-patch/params.js.map +1 -1
  165. package/dist/core/extensions/builtin/gpt-apply-patch/parser.d.ts.map +1 -1
  166. package/dist/core/extensions/builtin/gpt-apply-patch/parser.js.map +1 -1
  167. package/dist/core/extensions/builtin/gpt-apply-patch/patch-diff.d.ts.map +1 -1
  168. package/dist/core/extensions/builtin/gpt-apply-patch/patch-diff.js.map +1 -1
  169. package/dist/core/extensions/builtin/gpt-apply-patch/patch-replace.d.ts.map +1 -1
  170. package/dist/core/extensions/builtin/gpt-apply-patch/patch-replace.js.map +1 -1
  171. package/dist/core/extensions/builtin/gpt-apply-patch/preview-format.d.ts.map +1 -1
  172. package/dist/core/extensions/builtin/gpt-apply-patch/preview-format.js.map +1 -1
  173. package/dist/core/extensions/builtin/gpt-apply-patch/preview.d.ts.map +1 -1
  174. package/dist/core/extensions/builtin/gpt-apply-patch/preview.js.map +1 -1
  175. package/dist/core/extensions/builtin/gpt-apply-patch/seek-sequence.d.ts.map +1 -1
  176. package/dist/core/extensions/builtin/gpt-apply-patch/seek-sequence.js.map +1 -1
  177. package/dist/core/extensions/builtin/gpt-apply-patch/streaming-parser.d.ts.map +1 -1
  178. package/dist/core/extensions/builtin/gpt-apply-patch/streaming-parser.js +7 -5
  179. package/dist/core/extensions/builtin/gpt-apply-patch/streaming-parser.js.map +1 -1
  180. package/dist/core/extensions/builtin/gpt-apply-patch/streaming-render.d.ts.map +1 -1
  181. package/dist/core/extensions/builtin/gpt-apply-patch/streaming-render.js.map +1 -1
  182. package/dist/core/extensions/builtin/gpt-apply-patch/text.d.ts.map +1 -1
  183. package/dist/core/extensions/builtin/gpt-apply-patch/text.js.map +1 -1
  184. package/dist/core/extensions/builtin/gpt-apply-patch/tool.d.ts.map +1 -1
  185. package/dist/core/extensions/builtin/gpt-apply-patch/tool.js.map +1 -1
  186. package/dist/core/extensions/builtin/gpt-apply-patch/types.d.ts.map +1 -1
  187. package/dist/core/extensions/builtin/gpt-apply-patch/workspace.d.ts.map +1 -1
  188. package/dist/core/extensions/builtin/gpt-apply-patch/workspace.js.map +1 -1
  189. package/dist/core/extensions/builtin/history-search/filter.d.ts.map +1 -1
  190. package/dist/core/extensions/builtin/history-search/filter.js.map +1 -1
  191. package/dist/core/extensions/builtin/history-search/index.d.ts.map +1 -1
  192. package/dist/core/extensions/builtin/history-search/index.js.map +1 -1
  193. package/dist/core/extensions/builtin/history-search/indexer.d.ts.map +1 -1
  194. package/dist/core/extensions/builtin/history-search/indexer.js.map +1 -1
  195. package/dist/core/extensions/builtin/history-search/overlay.d.ts.map +1 -1
  196. package/dist/core/extensions/builtin/history-search/overlay.js +3 -6
  197. package/dist/core/extensions/builtin/history-search/overlay.js.map +1 -1
  198. package/dist/core/extensions/builtin/history-search/types.d.ts.map +1 -1
  199. package/dist/core/extensions/builtin/index.d.ts.map +1 -1
  200. package/dist/core/extensions/builtin/kimi-web-search/index.d.ts.map +1 -1
  201. package/dist/core/extensions/builtin/kimi-web-search/index.js.map +1 -1
  202. package/dist/core/extensions/builtin/openai-web-search/index.d.ts.map +1 -1
  203. package/dist/core/extensions/builtin/openai-web-search/index.js.map +1 -1
  204. package/dist/core/extensions/builtin/permission-system/arity.d.ts.map +1 -1
  205. package/dist/core/extensions/builtin/permission-system/arity.js.map +1 -1
  206. package/dist/core/extensions/builtin/permission-system/cli.d.ts +0 -3
  207. package/dist/core/extensions/builtin/permission-system/cli.d.ts.map +1 -1
  208. package/dist/core/extensions/builtin/permission-system/cli.js +0 -13
  209. package/dist/core/extensions/builtin/permission-system/cli.js.map +1 -1
  210. package/dist/core/extensions/builtin/permission-system/config.d.ts.map +1 -1
  211. package/dist/core/extensions/builtin/permission-system/config.js.map +1 -1
  212. package/dist/core/extensions/builtin/permission-system/evaluate.d.ts.map +1 -1
  213. package/dist/core/extensions/builtin/permission-system/evaluate.js.map +1 -1
  214. package/dist/core/extensions/builtin/permission-system/events.d.ts.map +1 -1
  215. package/dist/core/extensions/builtin/permission-system/events.js.map +1 -1
  216. package/dist/core/extensions/builtin/permission-system/external-dir.d.ts.map +1 -1
  217. package/dist/core/extensions/builtin/permission-system/external-dir.js.map +1 -1
  218. package/dist/core/extensions/builtin/permission-system/index.d.ts.map +1 -1
  219. package/dist/core/extensions/builtin/permission-system/index.js.map +1 -1
  220. package/dist/core/extensions/builtin/permission-system/non-interactive.d.ts.map +1 -1
  221. package/dist/core/extensions/builtin/permission-system/non-interactive.js.map +1 -1
  222. package/dist/core/extensions/builtin/permission-system/parsers.d.ts.map +1 -1
  223. package/dist/core/extensions/builtin/permission-system/parsers.js +3 -1
  224. package/dist/core/extensions/builtin/permission-system/parsers.js.map +1 -1
  225. package/dist/core/extensions/builtin/permission-system/prompt.d.ts.map +1 -1
  226. package/dist/core/extensions/builtin/permission-system/prompt.js.map +1 -1
  227. package/dist/core/extensions/builtin/permission-system/service.d.ts.map +1 -1
  228. package/dist/core/extensions/builtin/permission-system/service.js +2 -5
  229. package/dist/core/extensions/builtin/permission-system/service.js.map +1 -1
  230. package/dist/core/extensions/builtin/permission-system/settings.d.ts.map +1 -1
  231. package/dist/core/extensions/builtin/permission-system/settings.js.map +1 -1
  232. package/dist/core/extensions/builtin/permission-system/storage.d.ts.map +1 -1
  233. package/dist/core/extensions/builtin/permission-system/storage.js.map +1 -1
  234. package/dist/core/extensions/builtin/permission-system/types.d.ts.map +1 -1
  235. package/dist/core/extensions/builtin/permission-system/types.js +3 -5
  236. package/dist/core/extensions/builtin/permission-system/types.js.map +1 -1
  237. package/dist/core/extensions/builtin/permission-system/wildcard.d.ts.map +1 -1
  238. package/dist/core/extensions/builtin/permission-system/wildcard.js.map +1 -1
  239. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-5.d.ts.map +1 -1
  240. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-5.js.map +1 -1
  241. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-6.d.ts.map +1 -1
  242. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-6.js.map +1 -1
  243. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-7.d.ts.map +1 -1
  244. package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-7.js.map +1 -1
  245. package/dist/core/extensions/builtin/prompt-preset/file-operations.d.ts.map +1 -1
  246. package/dist/core/extensions/builtin/prompt-preset/file-operations.js.map +1 -1
  247. package/dist/core/extensions/builtin/prompt-preset/gpt-5.2.d.ts.map +1 -1
  248. package/dist/core/extensions/builtin/prompt-preset/gpt-5.2.js.map +1 -1
  249. package/dist/core/extensions/builtin/prompt-preset/gpt-5.3-codex.d.ts.map +1 -1
  250. package/dist/core/extensions/builtin/prompt-preset/gpt-5.3-codex.js.map +1 -1
  251. package/dist/core/extensions/builtin/prompt-preset/gpt-5.4.d.ts.map +1 -1
  252. package/dist/core/extensions/builtin/prompt-preset/gpt-5.4.js.map +1 -1
  253. package/dist/core/extensions/builtin/prompt-preset/gpt-5.5.d.ts.map +1 -1
  254. package/dist/core/extensions/builtin/prompt-preset/gpt-5.5.js.map +1 -1
  255. package/dist/core/extensions/builtin/prompt-preset/gpt-5.d.ts.map +1 -1
  256. package/dist/core/extensions/builtin/prompt-preset/gpt-5.js.map +1 -1
  257. package/dist/core/extensions/builtin/prompt-preset/index.d.ts.map +1 -1
  258. package/dist/core/extensions/builtin/prompt-preset/index.js.map +1 -1
  259. package/dist/core/extensions/builtin/prompt-preset/kimi-k2-6.d.ts.map +1 -1
  260. package/dist/core/extensions/builtin/prompt-preset/kimi-k2-6.js.map +1 -1
  261. package/dist/core/extensions/builtin/prompt-preset/presets.d.ts.map +1 -1
  262. package/dist/core/extensions/builtin/prompt-preset/presets.js.map +1 -1
  263. package/dist/core/extensions/builtin/prompt-preset/settings.d.ts.map +1 -1
  264. package/dist/core/extensions/builtin/prompt-preset/settings.js.map +1 -1
  265. package/dist/core/extensions/builtin/prompt-url-widget.d.ts.map +1 -1
  266. package/dist/core/extensions/builtin/prompt-url-widget.js.map +1 -1
  267. package/dist/core/extensions/builtin/redraws.d.ts.map +1 -1
  268. package/dist/core/extensions/builtin/redraws.js.map +1 -1
  269. package/dist/core/extensions/builtin/service-tier.d.ts.map +1 -1
  270. package/dist/core/extensions/builtin/service-tier.js.map +1 -1
  271. package/dist/core/extensions/builtin/session-observer/index.d.ts.map +1 -1
  272. package/dist/core/extensions/builtin/session-observer/index.js.map +1 -1
  273. package/dist/core/extensions/builtin/session-observer/loader.d.ts.map +1 -1
  274. package/dist/core/extensions/builtin/session-observer/loader.js.map +1 -1
  275. package/dist/core/extensions/builtin/session-observer/overlay-format.d.ts.map +1 -1
  276. package/dist/core/extensions/builtin/session-observer/overlay-format.js.map +1 -1
  277. package/dist/core/extensions/builtin/session-observer/overlay.d.ts.map +1 -1
  278. package/dist/core/extensions/builtin/session-observer/overlay.js +13 -18
  279. package/dist/core/extensions/builtin/session-observer/overlay.js.map +1 -1
  280. package/dist/core/extensions/builtin/session-observer/scanner.d.ts.map +1 -1
  281. package/dist/core/extensions/builtin/session-observer/scanner.js.map +1 -1
  282. package/dist/core/extensions/builtin/session-observer/text.d.ts.map +1 -1
  283. package/dist/core/extensions/builtin/session-observer/text.js.map +1 -1
  284. package/dist/core/extensions/builtin/session-observer/transcript-entries.d.ts.map +1 -1
  285. package/dist/core/extensions/builtin/session-observer/transcript-entries.js.map +1 -1
  286. package/dist/core/extensions/builtin/session-observer/transcript-format.d.ts.map +1 -1
  287. package/dist/core/extensions/builtin/session-observer/transcript-format.js.map +1 -1
  288. package/dist/core/extensions/builtin/session-observer/transcript.d.ts.map +1 -1
  289. package/dist/core/extensions/builtin/session-observer/transcript.js.map +1 -1
  290. package/dist/core/extensions/builtin/session-observer/types.d.ts.map +1 -1
  291. package/dist/core/extensions/builtin/todotools/index.d.ts.map +1 -1
  292. package/dist/core/extensions/builtin/todotools/index.js +0 -2
  293. package/dist/core/extensions/builtin/todotools/index.js.map +1 -1
  294. package/dist/core/extensions/builtin/todotools/prompt.d.ts +1 -1
  295. package/dist/core/extensions/builtin/todotools/prompt.d.ts.map +1 -1
  296. package/dist/core/extensions/builtin/todotools/prompt.js +0 -2
  297. package/dist/core/extensions/builtin/todotools/prompt.js.map +1 -1
  298. package/dist/core/extensions/builtin/todotools/state.d.ts.map +1 -1
  299. package/dist/core/extensions/builtin/todotools/state.js.map +1 -1
  300. package/dist/core/extensions/builtin/todotools/tools/todoread.d.ts.map +1 -1
  301. package/dist/core/extensions/builtin/todotools/tools/todoread.js.map +1 -1
  302. package/dist/core/extensions/builtin/todotools/tools/todowrite.d.ts.map +1 -1
  303. package/dist/core/extensions/builtin/todotools/tools/todowrite.js.map +1 -1
  304. package/dist/core/extensions/builtin/tool-pair-guard/index.d.ts.map +1 -1
  305. package/dist/core/extensions/builtin/tool-pair-guard/index.js.map +1 -1
  306. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-anthropic-payload.d.ts.map +1 -1
  307. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-anthropic-payload.js.map +1 -1
  308. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-openai-chat-completions-payload.d.ts.map +1 -1
  309. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-openai-chat-completions-payload.js.map +1 -1
  310. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-openai-responses-payload.d.ts.map +1 -1
  311. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-openai-responses-payload.js.map +1 -1
  312. package/dist/core/extensions/builtin/tps.d.ts.map +1 -1
  313. package/dist/core/extensions/builtin/tps.js.map +1 -1
  314. package/dist/core/extensions/index.d.ts +1 -1
  315. package/dist/core/extensions/index.d.ts.map +1 -1
  316. package/dist/core/extensions/index.js.map +1 -1
  317. package/dist/core/extensions/loader.d.ts +1 -1
  318. package/dist/core/extensions/loader.d.ts.map +1 -1
  319. package/dist/core/extensions/loader.js +4 -4
  320. package/dist/core/extensions/loader.js.map +1 -1
  321. package/dist/core/extensions/runner.d.ts +7 -2
  322. package/dist/core/extensions/runner.d.ts.map +1 -1
  323. package/dist/core/extensions/runner.js +69 -43
  324. package/dist/core/extensions/runner.js.map +1 -1
  325. package/dist/core/extensions/types.d.ts +22 -2
  326. package/dist/core/extensions/types.d.ts.map +1 -1
  327. package/dist/core/extensions/types.js.map +1 -1
  328. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  329. package/dist/core/extensions/wrapper.js.map +1 -1
  330. package/dist/core/footer-data-provider.d.ts.map +1 -1
  331. package/dist/core/footer-data-provider.js +17 -18
  332. package/dist/core/footer-data-provider.js.map +1 -1
  333. package/dist/core/http-dispatcher.d.ts.map +1 -1
  334. package/dist/core/http-dispatcher.js.map +1 -1
  335. package/dist/core/keybindings.d.ts +1 -1
  336. package/dist/core/keybindings.d.ts.map +1 -1
  337. package/dist/core/keybindings.js +0 -1
  338. package/dist/core/keybindings.js.map +1 -1
  339. package/dist/core/messages.d.ts.map +1 -1
  340. package/dist/core/messages.js.map +1 -1
  341. package/dist/core/model-registry.d.ts +3 -4
  342. package/dist/core/model-registry.d.ts.map +1 -1
  343. package/dist/core/model-registry.js +31 -16
  344. package/dist/core/model-registry.js.map +1 -1
  345. package/dist/core/model-resolver.d.ts.map +1 -1
  346. package/dist/core/model-resolver.js.map +1 -1
  347. package/dist/core/output-guard.d.ts.map +1 -1
  348. package/dist/core/output-guard.js.map +1 -1
  349. package/dist/core/package-manager.d.ts +1 -0
  350. package/dist/core/package-manager.d.ts.map +1 -1
  351. package/dist/core/package-manager.js +25 -13
  352. package/dist/core/package-manager.js.map +1 -1
  353. package/dist/core/project-trust.d.ts +15 -0
  354. package/dist/core/project-trust.d.ts.map +1 -0
  355. package/dist/core/project-trust.js +58 -0
  356. package/dist/core/project-trust.js.map +1 -0
  357. package/dist/core/prompt-templates.d.ts +2 -1
  358. package/dist/core/prompt-templates.d.ts.map +1 -1
  359. package/dist/core/prompt-templates.js +24 -26
  360. package/dist/core/prompt-templates.js.map +1 -1
  361. package/dist/core/provider-attribution.d.ts.map +1 -1
  362. package/dist/core/provider-attribution.js.map +1 -1
  363. package/dist/core/provider-display-names.d.ts.map +1 -1
  364. package/dist/core/resolve-config-value.d.ts +0 -4
  365. package/dist/core/resolve-config-value.d.ts.map +1 -1
  366. package/dist/core/resolve-config-value.js +0 -15
  367. package/dist/core/resolve-config-value.js.map +1 -1
  368. package/dist/core/resource-loader.d.ts +14 -2
  369. package/dist/core/resource-loader.d.ts.map +1 -1
  370. package/dist/core/resource-loader.js +117 -74
  371. package/dist/core/resource-loader.js.map +1 -1
  372. package/dist/core/sdk.d.ts.map +1 -1
  373. package/dist/core/sdk.js.map +1 -1
  374. package/dist/core/session-cwd.d.ts.map +1 -1
  375. package/dist/core/session-cwd.js +0 -1
  376. package/dist/core/session-cwd.js.map +1 -1
  377. package/dist/core/session-manager.d.ts +3 -0
  378. package/dist/core/session-manager.d.ts.map +1 -1
  379. package/dist/core/session-manager.js +41 -28
  380. package/dist/core/session-manager.js.map +1 -1
  381. package/dist/core/session-resident-store.d.ts +16 -0
  382. package/dist/core/session-resident-store.d.ts.map +1 -0
  383. package/dist/core/session-resident-store.js +48 -0
  384. package/dist/core/session-resident-store.js.map +1 -0
  385. package/dist/core/session-work-barrier.d.ts.map +1 -1
  386. package/dist/core/session-work-barrier.js +5 -3
  387. package/dist/core/session-work-barrier.js.map +1 -1
  388. package/dist/core/settings-manager.d.ts +14 -2
  389. package/dist/core/settings-manager.d.ts.map +1 -1
  390. package/dist/core/settings-manager.js +86 -46
  391. package/dist/core/settings-manager.js.map +1 -1
  392. package/dist/core/skills.d.ts.map +1 -1
  393. package/dist/core/skills.js.map +1 -1
  394. package/dist/core/slash-commands.d.ts.map +1 -1
  395. package/dist/core/slash-commands.js +1 -0
  396. package/dist/core/slash-commands.js.map +1 -1
  397. package/dist/core/source-info.d.ts.map +1 -1
  398. package/dist/core/source-info.js.map +1 -1
  399. package/dist/core/system-prompt.d.ts.map +1 -1
  400. package/dist/core/system-prompt.js.map +1 -1
  401. package/dist/core/telemetry.d.ts.map +1 -1
  402. package/dist/core/telemetry.js.map +1 -1
  403. package/dist/core/thinking-levels.d.ts.map +1 -1
  404. package/dist/core/thinking-levels.js.map +1 -1
  405. package/dist/core/timings.d.ts.map +1 -1
  406. package/dist/core/timings.js.map +1 -1
  407. package/dist/core/tools/bash.d.ts.map +1 -1
  408. package/dist/core/tools/bash.js +9 -6
  409. package/dist/core/tools/bash.js.map +1 -1
  410. package/dist/core/tools/diff-render.d.ts.map +1 -1
  411. package/dist/core/tools/diff-render.js.map +1 -1
  412. package/dist/core/tools/edit-diff.d.ts +0 -5
  413. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  414. package/dist/core/tools/edit-diff.js +0 -7
  415. package/dist/core/tools/edit-diff.js.map +1 -1
  416. package/dist/core/tools/edit.d.ts.map +1 -1
  417. package/dist/core/tools/edit.js.map +1 -1
  418. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  419. package/dist/core/tools/file-mutation-queue.js.map +1 -1
  420. package/dist/core/tools/find.d.ts.map +1 -1
  421. package/dist/core/tools/find.js +1 -1
  422. package/dist/core/tools/find.js.map +1 -1
  423. package/dist/core/tools/grep.d.ts.map +1 -1
  424. package/dist/core/tools/grep.js +1 -1
  425. package/dist/core/tools/grep.js.map +1 -1
  426. package/dist/core/tools/index.d.ts +0 -5
  427. package/dist/core/tools/index.d.ts.map +1 -1
  428. package/dist/core/tools/index.js +0 -67
  429. package/dist/core/tools/index.js.map +1 -1
  430. package/dist/core/tools/ls.d.ts.map +1 -1
  431. package/dist/core/tools/ls.js +1 -1
  432. package/dist/core/tools/ls.js.map +1 -1
  433. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  434. package/dist/core/tools/output-accumulator.js +12 -18
  435. package/dist/core/tools/output-accumulator.js.map +1 -1
  436. package/dist/core/tools/path-utils.d.ts.map +1 -1
  437. package/dist/core/tools/path-utils.js.map +1 -1
  438. package/dist/core/tools/read.d.ts.map +1 -1
  439. package/dist/core/tools/read.js +1 -1
  440. package/dist/core/tools/read.js.map +1 -1
  441. package/dist/core/tools/render-utils.d.ts.map +1 -1
  442. package/dist/core/tools/render-utils.js.map +1 -1
  443. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  444. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  445. package/dist/core/tools/truncate.d.ts.map +1 -1
  446. package/dist/core/tools/truncate.js.map +1 -1
  447. package/dist/core/tools/write.d.ts.map +1 -1
  448. package/dist/core/tools/write.js +1 -2
  449. package/dist/core/tools/write.js.map +1 -1
  450. package/dist/core/trust-manager.d.ts +31 -0
  451. package/dist/core/trust-manager.d.ts.map +1 -0
  452. package/dist/core/trust-manager.js +186 -0
  453. package/dist/core/trust-manager.js.map +1 -0
  454. package/dist/index.d.ts +5 -4
  455. package/dist/index.d.ts.map +1 -1
  456. package/dist/index.js +2 -1
  457. package/dist/index.js.map +1 -1
  458. package/dist/main.d.ts.map +1 -1
  459. package/dist/main.js +101 -86
  460. package/dist/main.js.map +1 -1
  461. package/dist/migrations.d.ts.map +1 -1
  462. package/dist/migrations.js +39 -34
  463. package/dist/migrations.js.map +1 -1
  464. package/dist/modes/index.d.ts +1 -1
  465. package/dist/modes/index.d.ts.map +1 -1
  466. package/dist/modes/index.js.map +1 -1
  467. package/dist/modes/interactive/components/armin.d.ts.map +1 -1
  468. package/dist/modes/interactive/components/armin.js +6 -10
  469. package/dist/modes/interactive/components/armin.js.map +1 -1
  470. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  471. package/dist/modes/interactive/components/assistant-message.js +2 -11
  472. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  473. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  474. package/dist/modes/interactive/components/bash-execution.js +6 -11
  475. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  476. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  477. package/dist/modes/interactive/components/bordered-loader.js +0 -3
  478. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  479. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  480. package/dist/modes/interactive/components/branch-summary-message.js +1 -3
  481. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  482. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  483. package/dist/modes/interactive/components/compaction-summary-message.js +1 -3
  484. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  485. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  486. package/dist/modes/interactive/components/config-selector.js +5 -15
  487. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  488. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
  489. package/dist/modes/interactive/components/countdown-timer.js +0 -5
  490. package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
  491. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  492. package/dist/modes/interactive/components/custom-editor.js +1 -8
  493. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  494. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  495. package/dist/modes/interactive/components/custom-message.js +1 -6
  496. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  497. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
  498. package/dist/modes/interactive/components/daxnuts.js +6 -8
  499. package/dist/modes/interactive/components/daxnuts.js.map +1 -1
  500. package/dist/modes/interactive/components/diff.d.ts.map +1 -1
  501. package/dist/modes/interactive/components/diff.js +2 -2
  502. package/dist/modes/interactive/components/diff.js.map +1 -1
  503. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
  504. package/dist/modes/interactive/components/dynamic-border.js +0 -1
  505. package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  506. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
  507. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
  508. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  509. package/dist/modes/interactive/components/extension-editor.js +1 -6
  510. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  511. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  512. package/dist/modes/interactive/components/extension-input.js +2 -8
  513. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  514. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  515. package/dist/modes/interactive/components/extension-selector.js +1 -9
  516. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  517. package/dist/modes/interactive/components/favorite-models-selector.d.ts.map +1 -1
  518. package/dist/modes/interactive/components/favorite-models-selector.js +9 -15
  519. package/dist/modes/interactive/components/favorite-models-selector.js.map +1 -1
  520. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  521. package/dist/modes/interactive/components/footer.js +10 -3
  522. package/dist/modes/interactive/components/footer.js.map +1 -1
  523. package/dist/modes/interactive/components/index.d.ts +1 -0
  524. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  525. package/dist/modes/interactive/components/index.js +1 -0
  526. package/dist/modes/interactive/components/index.js.map +1 -1
  527. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  528. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  529. package/dist/modes/interactive/components/login-dialog.d.ts +1 -0
  530. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  531. package/dist/modes/interactive/components/login-dialog.js +10 -10
  532. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  533. package/dist/modes/interactive/components/model-favorites.d.ts.map +1 -1
  534. package/dist/modes/interactive/components/model-favorites.js.map +1 -1
  535. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  536. package/dist/modes/interactive/components/model-selector.js +9 -22
  537. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  538. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  539. package/dist/modes/interactive/components/oauth-selector.js +3 -12
  540. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  541. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  542. package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  543. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  544. package/dist/modes/interactive/components/session-selector.js +33 -58
  545. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  546. package/dist/modes/interactive/components/settings-selector.d.ts +3 -1
  547. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  548. package/dist/modes/interactive/components/settings-selector.js +20 -4
  549. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  550. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
  551. package/dist/modes/interactive/components/show-images-selector.js +0 -1
  552. package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
  553. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  554. package/dist/modes/interactive/components/skill-invocation-message.js +1 -3
  555. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  556. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
  557. package/dist/modes/interactive/components/theme-selector.js +0 -2
  558. package/dist/modes/interactive/components/theme-selector.js.map +1 -1
  559. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  560. package/dist/modes/interactive/components/thinking-selector.js +0 -1
  561. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  562. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  563. package/dist/modes/interactive/components/tool-execution.js +35 -32
  564. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  565. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  566. package/dist/modes/interactive/components/tree-selector.js +18 -32
  567. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  568. package/dist/modes/interactive/components/trust-selector.d.ts +23 -0
  569. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -0
  570. package/dist/modes/interactive/components/trust-selector.js +85 -0
  571. package/dist/modes/interactive/components/trust-selector.js.map +1 -0
  572. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  573. package/dist/modes/interactive/components/user-message-selector.js +3 -6
  574. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  575. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  576. package/dist/modes/interactive/components/user-message.js +0 -1
  577. package/dist/modes/interactive/components/user-message.js.map +1 -1
  578. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
  579. package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
  580. package/dist/modes/interactive/interactive-mode.d.ts +39 -0
  581. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  582. package/dist/modes/interactive/interactive-mode.js +264 -114
  583. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  584. package/dist/modes/interactive/session-info-format.d.ts.map +1 -1
  585. package/dist/modes/interactive/session-info-format.js.map +1 -1
  586. package/dist/modes/interactive/startup-tools.d.ts.map +1 -1
  587. package/dist/modes/interactive/startup-tools.js.map +1 -1
  588. package/dist/modes/interactive/theme/theme.d.ts +0 -4
  589. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  590. package/dist/modes/interactive/theme/theme.js +0 -13
  591. package/dist/modes/interactive/theme/theme.js.map +1 -1
  592. package/dist/modes/interactive/working-status.d.ts +2 -0
  593. package/dist/modes/interactive/working-status.d.ts.map +1 -1
  594. package/dist/modes/interactive/working-status.js +34 -0
  595. package/dist/modes/interactive/working-status.js.map +1 -1
  596. package/dist/modes/print-mode.d.ts.map +1 -1
  597. package/dist/modes/print-mode.js.map +1 -1
  598. package/dist/modes/provider-native-rendering.d.ts.map +1 -1
  599. package/dist/modes/provider-native-rendering.js.map +1 -1
  600. package/dist/modes/rpc/jsonl.d.ts.map +1 -1
  601. package/dist/modes/rpc/jsonl.js.map +1 -1
  602. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  603. package/dist/modes/rpc/rpc-client.js +7 -8
  604. package/dist/modes/rpc/rpc-client.js.map +1 -1
  605. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  606. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  607. package/dist/modes/rpc/rpc-types.d.ts +0 -1
  608. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  609. package/dist/modes/rpc/rpc-types.js.map +1 -1
  610. package/dist/package-manager-cli.d.ts +6 -2
  611. package/dist/package-manager-cli.d.ts.map +1 -1
  612. package/dist/package-manager-cli.js +105 -11
  613. package/dist/package-manager-cli.js.map +1 -1
  614. package/dist/self-update-bootstrap.d.ts.map +1 -1
  615. package/dist/self-update-bootstrap.js.map +1 -1
  616. package/dist/senpi +10 -1
  617. package/dist/utils/ansi.d.ts.map +1 -1
  618. package/dist/utils/ansi.js.map +1 -1
  619. package/dist/utils/changelog.d.ts +1 -0
  620. package/dist/utils/changelog.d.ts.map +1 -1
  621. package/dist/utils/changelog.js +78 -0
  622. package/dist/utils/changelog.js.map +1 -1
  623. package/dist/utils/child-process.d.ts.map +1 -1
  624. package/dist/utils/child-process.js.map +1 -1
  625. package/dist/utils/clipboard-image.d.ts.map +1 -1
  626. package/dist/utils/clipboard-image.js.map +1 -1
  627. package/dist/utils/clipboard-native.d.ts.map +1 -1
  628. package/dist/utils/clipboard-native.js.map +1 -1
  629. package/dist/utils/clipboard.d.ts.map +1 -1
  630. package/dist/utils/clipboard.js.map +1 -1
  631. package/dist/utils/deprecation.d.ts.map +1 -1
  632. package/dist/utils/deprecation.js.map +1 -1
  633. package/dist/utils/exif-orientation.d.ts.map +1 -1
  634. package/dist/utils/exif-orientation.js.map +1 -1
  635. package/dist/utils/frontmatter.d.ts.map +1 -1
  636. package/dist/utils/frontmatter.js.map +1 -1
  637. package/dist/utils/fs-watch.d.ts.map +1 -1
  638. package/dist/utils/fs-watch.js.map +1 -1
  639. package/dist/utils/git.d.ts.map +1 -1
  640. package/dist/utils/git.js.map +1 -1
  641. package/dist/utils/html.d.ts.map +1 -1
  642. package/dist/utils/html.js.map +1 -1
  643. package/dist/utils/image-convert.d.ts.map +1 -1
  644. package/dist/utils/image-convert.js.map +1 -1
  645. package/dist/utils/image-resize-core.d.ts.map +1 -1
  646. package/dist/utils/image-resize-core.js.map +1 -1
  647. package/dist/utils/image-resize-worker.d.ts.map +1 -1
  648. package/dist/utils/image-resize-worker.js.map +1 -1
  649. package/dist/utils/image-resize.d.ts.map +1 -1
  650. package/dist/utils/image-resize.js.map +1 -1
  651. package/dist/utils/json.d.ts.map +1 -1
  652. package/dist/utils/json.js.map +1 -1
  653. package/dist/utils/mime.d.ts.map +1 -1
  654. package/dist/utils/mime.js.map +1 -1
  655. package/dist/utils/open-browser.d.ts.map +1 -1
  656. package/dist/utils/open-browser.js.map +1 -1
  657. package/dist/utils/paths.d.ts.map +1 -1
  658. package/dist/utils/paths.js.map +1 -1
  659. package/dist/utils/photon.d.ts.map +1 -1
  660. package/dist/utils/photon.js.map +1 -1
  661. package/dist/utils/pi-user-agent.d.ts.map +1 -1
  662. package/dist/utils/pi-user-agent.js.map +1 -1
  663. package/dist/utils/shell.d.ts.map +1 -1
  664. package/dist/utils/shell.js.map +1 -1
  665. package/dist/utils/sleep.d.ts.map +1 -1
  666. package/dist/utils/sleep.js.map +1 -1
  667. package/dist/utils/syntax-highlight.d.ts.map +1 -1
  668. package/dist/utils/syntax-highlight.js.map +1 -1
  669. package/dist/utils/tools-manager.d.ts.map +1 -1
  670. package/dist/utils/tools-manager.js.map +1 -1
  671. package/dist/utils/version-check.d.ts.map +1 -1
  672. package/dist/utils/version-check.js.map +1 -1
  673. package/dist/utils/windows-self-update.d.ts.map +1 -1
  674. package/dist/utils/windows-self-update.js.map +1 -1
  675. package/docs/compaction-guide.md +9 -9
  676. package/docs/compaction.md +2 -2
  677. package/docs/containerization.md +22 -22
  678. package/docs/custom-provider.md +13 -13
  679. package/docs/development.md +4 -2
  680. package/docs/docs.json +4 -0
  681. package/docs/extensions.md +46 -18
  682. package/docs/index.md +5 -4
  683. package/docs/json.md +21 -15
  684. package/docs/keybindings.md +6 -3
  685. package/docs/models.md +10 -43
  686. package/docs/packages.md +12 -12
  687. package/docs/prompt-templates.md +11 -4
  688. package/docs/providers.md +9 -9
  689. package/docs/rpc.md +14 -13
  690. package/docs/sdk.md +18 -9
  691. package/docs/security.md +55 -0
  692. package/docs/session-format.md +4 -4
  693. package/docs/sessions.md +14 -14
  694. package/docs/settings.md +20 -7
  695. package/docs/skills.md +11 -11
  696. package/docs/terminal-setup.md +38 -4
  697. package/docs/termux.md +3 -3
  698. package/docs/themes.md +1 -1
  699. package/docs/tmux.md +4 -2
  700. package/docs/tui.md +4 -4
  701. package/docs/usage.md +60 -50
  702. package/examples/extensions/README.md +1 -0
  703. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  704. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  705. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  706. package/examples/extensions/gondolin/package-lock.json +2 -2
  707. package/examples/extensions/gondolin/package.json +1 -1
  708. package/examples/extensions/minimal-mode.ts +6 -6
  709. package/examples/extensions/project-trust.ts +64 -0
  710. package/examples/extensions/sandbox/package-lock.json +2 -2
  711. package/examples/extensions/sandbox/package.json +1 -1
  712. package/examples/extensions/with-deps/package-lock.json +2 -2
  713. package/examples/extensions/with-deps/package.json +1 -1
  714. package/node_modules/@earendil-works/pi-agent-core/README.md +4 -3
  715. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  716. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +125 -77
  717. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
  718. package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts +7 -0
  719. package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts.map +1 -1
  720. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js +2 -27
  721. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js.map +1 -1
  722. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.d.ts.map +1 -1
  723. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js +7 -20
  724. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js.map +1 -1
  725. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.d.ts.map +1 -1
  726. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.js.map +1 -1
  727. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.d.ts +1 -1
  728. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.d.ts.map +1 -1
  729. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js +1 -1
  730. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js.map +1 -1
  731. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/utils.d.ts.map +1 -1
  732. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/utils.js.map +1 -1
  733. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.d.ts.map +1 -1
  734. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js +0 -3
  735. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js.map +1 -1
  736. package/node_modules/@earendil-works/pi-agent-core/dist/harness/messages.d.ts.map +1 -1
  737. package/node_modules/@earendil-works/pi-agent-core/dist/harness/messages.js.map +1 -1
  738. package/node_modules/@earendil-works/pi-agent-core/dist/harness/prompt-templates.d.ts.map +1 -1
  739. package/node_modules/@earendil-works/pi-agent-core/dist/harness/prompt-templates.js.map +1 -1
  740. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-repo.d.ts.map +1 -1
  741. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-repo.js +0 -3
  742. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-repo.js.map +1 -1
  743. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-storage.d.ts.map +1 -1
  744. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-storage.js +0 -7
  745. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-storage.js.map +1 -1
  746. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-repo.d.ts.map +1 -1
  747. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-repo.js +3 -1
  748. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-repo.js.map +1 -1
  749. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-storage.d.ts.map +1 -1
  750. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-storage.js +0 -5
  751. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-storage.js.map +1 -1
  752. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo-utils.d.ts.map +1 -1
  753. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo-utils.js.map +1 -1
  754. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.d.ts.map +1 -1
  755. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.js +0 -1
  756. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.js.map +1 -1
  757. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/uuid.d.ts.map +1 -1
  758. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/uuid.js.map +1 -1
  759. package/node_modules/@earendil-works/pi-agent-core/dist/harness/skills.d.ts.map +1 -1
  760. package/node_modules/@earendil-works/pi-agent-core/dist/harness/skills.js.map +1 -1
  761. package/node_modules/@earendil-works/pi-agent-core/dist/harness/system-prompt.d.ts.map +1 -1
  762. package/node_modules/@earendil-works/pi-agent-core/dist/harness/system-prompt.js.map +1 -1
  763. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts +0 -2
  764. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts.map +1 -1
  765. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.js +0 -20
  766. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.js.map +1 -1
  767. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.d.ts.map +1 -1
  768. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.js.map +1 -1
  769. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/truncate.d.ts.map +1 -1
  770. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/truncate.js.map +1 -1
  771. package/node_modules/@earendil-works/pi-agent-core/dist/index.d.ts.map +1 -1
  772. package/node_modules/@earendil-works/pi-agent-core/dist/node.d.ts.map +1 -1
  773. package/node_modules/@earendil-works/pi-agent-core/dist/proxy.d.ts.map +1 -1
  774. package/node_modules/@earendil-works/pi-agent-core/dist/proxy.js.map +1 -1
  775. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts +7 -4
  776. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts.map +1 -1
  777. package/node_modules/@earendil-works/pi-agent-core/dist/types.js.map +1 -1
  778. package/node_modules/@earendil-works/pi-agent-core/package.json +6 -6
  779. package/node_modules/@earendil-works/pi-ai/README.md +4 -5
  780. package/node_modules/@earendil-works/pi-ai/dist/api-registry.d.ts +0 -1
  781. package/node_modules/@earendil-works/pi-ai/dist/api-registry.d.ts.map +1 -1
  782. package/node_modules/@earendil-works/pi-ai/dist/api-registry.js +0 -3
  783. package/node_modules/@earendil-works/pi-ai/dist/api-registry.js.map +1 -1
  784. package/node_modules/@earendil-works/pi-ai/dist/bedrock-provider.d.ts.map +1 -1
  785. package/node_modules/@earendil-works/pi-ai/dist/cli.d.ts.map +1 -1
  786. package/node_modules/@earendil-works/pi-ai/dist/cli.js.map +1 -1
  787. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.d.ts.map +1 -1
  788. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.js.map +1 -1
  789. package/node_modules/@earendil-works/pi-ai/dist/image-models.d.ts.map +1 -1
  790. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts +30 -0
  791. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts.map +1 -1
  792. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js +30 -0
  793. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js.map +1 -1
  794. package/node_modules/@earendil-works/pi-ai/dist/image-models.js.map +1 -1
  795. package/node_modules/@earendil-works/pi-ai/dist/images-api-registry.d.ts.map +1 -1
  796. package/node_modules/@earendil-works/pi-ai/dist/images-api-registry.js.map +1 -1
  797. package/node_modules/@earendil-works/pi-ai/dist/images.d.ts.map +1 -1
  798. package/node_modules/@earendil-works/pi-ai/dist/images.js.map +1 -1
  799. package/node_modules/@earendil-works/pi-ai/dist/index.d.ts.map +1 -1
  800. package/node_modules/@earendil-works/pi-ai/dist/models.d.ts.map +1 -1
  801. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +584 -397
  802. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts.map +1 -1
  803. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js +578 -509
  804. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js.map +1 -1
  805. package/node_modules/@earendil-works/pi-ai/dist/models.js.map +1 -1
  806. package/node_modules/@earendil-works/pi-ai/dist/oauth.d.ts.map +1 -1
  807. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.d.ts.map +1 -1
  808. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.js +15 -7
  809. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.js.map +1 -1
  810. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.d.ts +1 -1
  811. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  812. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js +17 -7
  813. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js.map +1 -1
  814. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.d.ts.map +1 -1
  815. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.js +1 -0
  816. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.js.map +1 -1
  817. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare.d.ts.map +1 -1
  818. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare.js.map +1 -1
  819. package/node_modules/@earendil-works/pi-ai/dist/providers/faux.d.ts.map +1 -1
  820. package/node_modules/@earendil-works/pi-ai/dist/providers/faux.js.map +1 -1
  821. package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot-headers.d.ts.map +1 -1
  822. package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot-headers.js.map +1 -1
  823. package/node_modules/@earendil-works/pi-ai/dist/providers/google-shared.d.ts +0 -4
  824. package/node_modules/@earendil-works/pi-ai/dist/providers/google-shared.d.ts.map +1 -1
  825. package/node_modules/@earendil-works/pi-ai/dist/providers/google-shared.js +0 -13
  826. package/node_modules/@earendil-works/pi-ai/dist/providers/google-shared.js.map +1 -1
  827. package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.d.ts.map +1 -1
  828. package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.js.map +1 -1
  829. package/node_modules/@earendil-works/pi-ai/dist/providers/google.d.ts.map +1 -1
  830. package/node_modules/@earendil-works/pi-ai/dist/providers/google.js.map +1 -1
  831. package/node_modules/@earendil-works/pi-ai/dist/providers/images/openrouter.d.ts.map +1 -1
  832. package/node_modules/@earendil-works/pi-ai/dist/providers/images/openrouter.js.map +1 -1
  833. package/node_modules/@earendil-works/pi-ai/dist/providers/images/register-builtins.d.ts.map +1 -1
  834. package/node_modules/@earendil-works/pi-ai/dist/providers/images/register-builtins.js.map +1 -1
  835. package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.d.ts.map +1 -1
  836. package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.js +3 -3
  837. package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.js.map +1 -1
  838. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.d.ts.map +1 -1
  839. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.js +0 -7
  840. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.js.map +1 -1
  841. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
  842. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.js +5 -4
  843. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.js.map +1 -1
  844. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-prompt-cache.d.ts.map +1 -1
  845. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-prompt-cache.js.map +1 -1
  846. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses-shared.d.ts.map +1 -1
  847. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses-shared.js +2 -1
  848. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses-shared.js.map +1 -1
  849. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses.d.ts.map +1 -1
  850. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses.js +3 -2
  851. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses.js.map +1 -1
  852. package/node_modules/@earendil-works/pi-ai/dist/providers/register-builtins.d.ts.map +1 -1
  853. package/node_modules/@earendil-works/pi-ai/dist/providers/register-builtins.js.map +1 -1
  854. package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.d.ts +1 -7
  855. package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.d.ts.map +1 -1
  856. package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.js +2 -16
  857. package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.js.map +1 -1
  858. package/node_modules/@earendil-works/pi-ai/dist/providers/transform-messages.d.ts.map +1 -1
  859. package/node_modules/@earendil-works/pi-ai/dist/providers/transform-messages.js.map +1 -1
  860. package/node_modules/@earendil-works/pi-ai/dist/session-resources.d.ts.map +1 -1
  861. package/node_modules/@earendil-works/pi-ai/dist/session-resources.js.map +1 -1
  862. package/node_modules/@earendil-works/pi-ai/dist/stream.d.ts.map +1 -1
  863. package/node_modules/@earendil-works/pi-ai/dist/stream.js.map +1 -1
  864. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/context-transformer.d.ts.map +1 -1
  865. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/context-transformer.js.map +1 -1
  866. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/index.d.ts.map +1 -1
  867. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/index.js.map +1 -1
  868. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/gemma4.d.ts.map +1 -1
  869. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/gemma4.js +10 -8
  870. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/gemma4.js.map +1 -1
  871. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/hermes.d.ts.map +1 -1
  872. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/hermes.js.map +1 -1
  873. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/json-mix.d.ts.map +1 -1
  874. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/json-mix.js.map +1 -1
  875. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/morph-xml.d.ts.map +1 -1
  876. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/morph-xml.js.map +1 -1
  877. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/xml-tool-tag-scanner.d.ts.map +1 -1
  878. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/xml-tool-tag-scanner.js.map +1 -1
  879. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/yaml-xml.d.ts.map +1 -1
  880. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/protocols/yaml-xml.js.map +1 -1
  881. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/stream-wrapper.d.ts.map +1 -1
  882. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/stream-wrapper.js.map +1 -1
  883. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/types.d.ts.map +1 -1
  884. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +6 -2
  885. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
  886. package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
  887. package/node_modules/@earendil-works/pi-ai/dist/utils/abort-signals.d.ts.map +1 -1
  888. package/node_modules/@earendil-works/pi-ai/dist/utils/abort-signals.js.map +1 -1
  889. package/node_modules/@earendil-works/pi-ai/dist/utils/diagnostics.d.ts.map +1 -1
  890. package/node_modules/@earendil-works/pi-ai/dist/utils/diagnostics.js.map +1 -1
  891. package/node_modules/@earendil-works/pi-ai/dist/utils/event-stream.d.ts.map +1 -1
  892. package/node_modules/@earendil-works/pi-ai/dist/utils/event-stream.js +3 -7
  893. package/node_modules/@earendil-works/pi-ai/dist/utils/event-stream.js.map +1 -1
  894. package/node_modules/@earendil-works/pi-ai/dist/utils/hash.d.ts.map +1 -1
  895. package/node_modules/@earendil-works/pi-ai/dist/utils/hash.js.map +1 -1
  896. package/node_modules/@earendil-works/pi-ai/dist/utils/headers.d.ts.map +1 -1
  897. package/node_modules/@earendil-works/pi-ai/dist/utils/headers.js.map +1 -1
  898. package/node_modules/@earendil-works/pi-ai/dist/utils/json-parse.d.ts.map +1 -1
  899. package/node_modules/@earendil-works/pi-ai/dist/utils/json-parse.js.map +1 -1
  900. package/node_modules/@earendil-works/pi-ai/dist/utils/node-http-proxy.d.ts.map +1 -1
  901. package/node_modules/@earendil-works/pi-ai/dist/utils/node-http-proxy.js.map +1 -1
  902. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/anthropic.d.ts.map +1 -1
  903. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/anthropic.js.map +1 -1
  904. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/device-code.d.ts.map +1 -1
  905. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/device-code.js.map +1 -1
  906. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/github-copilot.d.ts.map +1 -1
  907. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/github-copilot.js.map +1 -1
  908. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/index.d.ts.map +1 -1
  909. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/index.js.map +1 -1
  910. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/oauth-page.d.ts.map +1 -1
  911. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/oauth-page.js.map +1 -1
  912. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/openai-codex.d.ts.map +1 -1
  913. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/openai-codex.js.map +1 -1
  914. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/pkce.d.ts.map +1 -1
  915. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/pkce.js.map +1 -1
  916. package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/types.d.ts.map +1 -1
  917. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts +0 -4
  918. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts.map +1 -1
  919. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js +0 -6
  920. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js.map +1 -1
  921. package/node_modules/@earendil-works/pi-ai/dist/utils/sanitize-unicode.d.ts.map +1 -1
  922. package/node_modules/@earendil-works/pi-ai/dist/utils/sanitize-unicode.js.map +1 -1
  923. package/node_modules/@earendil-works/pi-ai/dist/utils/tool-pair-repair.d.ts.map +1 -1
  924. package/node_modules/@earendil-works/pi-ai/dist/utils/tool-pair-repair.js.map +1 -1
  925. package/node_modules/@earendil-works/pi-ai/dist/utils/typebox-helpers.d.ts.map +1 -1
  926. package/node_modules/@earendil-works/pi-ai/dist/utils/typebox-helpers.js.map +1 -1
  927. package/node_modules/@earendil-works/pi-ai/dist/utils/validation.d.ts.map +1 -1
  928. package/node_modules/@earendil-works/pi-ai/dist/utils/validation.js.map +1 -1
  929. package/node_modules/@earendil-works/pi-ai/package.json +5 -5
  930. package/node_modules/@earendil-works/pi-tui/README.md +1 -2
  931. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.d.ts +3 -1
  932. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.d.ts.map +1 -1
  933. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.js +0 -3
  934. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.js.map +1 -1
  935. package/node_modules/@earendil-works/pi-tui/dist/components/box.d.ts.map +1 -1
  936. package/node_modules/@earendil-works/pi-tui/dist/components/box.js +1 -6
  937. package/node_modules/@earendil-works/pi-tui/dist/components/box.js.map +1 -1
  938. package/node_modules/@earendil-works/pi-tui/dist/components/cancellable-loader.d.ts.map +1 -1
  939. package/node_modules/@earendil-works/pi-tui/dist/components/cancellable-loader.js +4 -3
  940. package/node_modules/@earendil-works/pi-tui/dist/components/cancellable-loader.js.map +1 -1
  941. package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts +6 -1
  942. package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts.map +1 -1
  943. package/node_modules/@earendil-works/pi-tui/dist/components/editor.js +132 -93
  944. package/node_modules/@earendil-works/pi-tui/dist/components/editor.js.map +1 -1
  945. package/node_modules/@earendil-works/pi-tui/dist/components/image.d.ts.map +1 -1
  946. package/node_modules/@earendil-works/pi-tui/dist/components/image.js +0 -8
  947. package/node_modules/@earendil-works/pi-tui/dist/components/image.js.map +1 -1
  948. package/node_modules/@earendil-works/pi-tui/dist/components/input.d.ts.map +1 -1
  949. package/node_modules/@earendil-works/pi-tui/dist/components/input.js +14 -14
  950. package/node_modules/@earendil-works/pi-tui/dist/components/input.js.map +1 -1
  951. package/node_modules/@earendil-works/pi-tui/dist/components/loader.d.ts +5 -0
  952. package/node_modules/@earendil-works/pi-tui/dist/components/loader.d.ts.map +1 -1
  953. package/node_modules/@earendil-works/pi-tui/dist/components/loader.js +29 -17
  954. package/node_modules/@earendil-works/pi-tui/dist/components/loader.js.map +1 -1
  955. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.d.ts.map +1 -1
  956. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.js +0 -11
  957. package/node_modules/@earendil-works/pi-tui/dist/components/markdown.js.map +1 -1
  958. package/node_modules/@earendil-works/pi-tui/dist/components/select-list.d.ts.map +1 -1
  959. package/node_modules/@earendil-works/pi-tui/dist/components/select-list.js +4 -9
  960. package/node_modules/@earendil-works/pi-tui/dist/components/select-list.js.map +1 -1
  961. package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.d.ts.map +1 -1
  962. package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.js +4 -12
  963. package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.js.map +1 -1
  964. package/node_modules/@earendil-works/pi-tui/dist/components/spacer.d.ts.map +1 -1
  965. package/node_modules/@earendil-works/pi-tui/dist/components/spacer.js +0 -1
  966. package/node_modules/@earendil-works/pi-tui/dist/components/spacer.js.map +1 -1
  967. package/node_modules/@earendil-works/pi-tui/dist/components/text.d.ts.map +1 -1
  968. package/node_modules/@earendil-works/pi-tui/dist/components/text.js +0 -8
  969. package/node_modules/@earendil-works/pi-tui/dist/components/text.js.map +1 -1
  970. package/node_modules/@earendil-works/pi-tui/dist/components/truncated-text.d.ts.map +1 -1
  971. package/node_modules/@earendil-works/pi-tui/dist/components/truncated-text.js +0 -3
  972. package/node_modules/@earendil-works/pi-tui/dist/components/truncated-text.js.map +1 -1
  973. package/node_modules/@earendil-works/pi-tui/dist/editor-component.d.ts.map +1 -1
  974. package/node_modules/@earendil-works/pi-tui/dist/fuzzy.d.ts.map +1 -1
  975. package/node_modules/@earendil-works/pi-tui/dist/fuzzy.js +131 -61
  976. package/node_modules/@earendil-works/pi-tui/dist/fuzzy.js.map +1 -1
  977. package/node_modules/@earendil-works/pi-tui/dist/index.d.ts +1 -1
  978. package/node_modules/@earendil-works/pi-tui/dist/index.d.ts.map +1 -1
  979. package/node_modules/@earendil-works/pi-tui/dist/index.js +1 -1
  980. package/node_modules/@earendil-works/pi-tui/dist/index.js.map +1 -1
  981. package/node_modules/@earendil-works/pi-tui/dist/keybindings.d.ts.map +1 -1
  982. package/node_modules/@earendil-works/pi-tui/dist/keybindings.js +2 -4
  983. package/node_modules/@earendil-works/pi-tui/dist/keybindings.js.map +1 -1
  984. package/node_modules/@earendil-works/pi-tui/dist/keys.d.ts.map +1 -1
  985. package/node_modules/@earendil-works/pi-tui/dist/keys.js.map +1 -1
  986. package/node_modules/@earendil-works/pi-tui/dist/kill-ring.d.ts.map +1 -1
  987. package/node_modules/@earendil-works/pi-tui/dist/kill-ring.js +3 -1
  988. package/node_modules/@earendil-works/pi-tui/dist/kill-ring.js.map +1 -1
  989. package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.d.ts.map +1 -1
  990. package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.js.map +1 -1
  991. package/node_modules/@earendil-works/pi-tui/dist/slash-command-autocomplete.d.ts.map +1 -1
  992. package/node_modules/@earendil-works/pi-tui/dist/slash-command-autocomplete.js.map +1 -1
  993. package/node_modules/@earendil-works/pi-tui/dist/stdin-buffer.d.ts.map +1 -1
  994. package/node_modules/@earendil-works/pi-tui/dist/stdin-buffer.js +4 -6
  995. package/node_modules/@earendil-works/pi-tui/dist/stdin-buffer.js.map +1 -1
  996. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.d.ts +0 -1
  997. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.d.ts.map +1 -1
  998. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js +4 -7
  999. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js.map +1 -1
  1000. package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts +4 -7
  1001. package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts.map +1 -1
  1002. package/node_modules/@earendil-works/pi-tui/dist/terminal.js +60 -103
  1003. package/node_modules/@earendil-works/pi-tui/dist/terminal.js.map +1 -1
  1004. package/node_modules/@earendil-works/pi-tui/dist/tui.d.ts.map +1 -1
  1005. package/node_modules/@earendil-works/pi-tui/dist/tui.js +39 -31
  1006. package/node_modules/@earendil-works/pi-tui/dist/tui.js.map +1 -1
  1007. package/node_modules/@earendil-works/pi-tui/dist/undo-stack.d.ts.map +1 -1
  1008. package/node_modules/@earendil-works/pi-tui/dist/undo-stack.js +3 -1
  1009. package/node_modules/@earendil-works/pi-tui/dist/undo-stack.js.map +1 -1
  1010. package/node_modules/@earendil-works/pi-tui/dist/utils.d.ts +0 -4
  1011. package/node_modules/@earendil-works/pi-tui/dist/utils.d.ts.map +1 -1
  1012. package/node_modules/@earendil-works/pi-tui/dist/utils.js +57 -33
  1013. package/node_modules/@earendil-works/pi-tui/dist/utils.js.map +1 -1
  1014. package/node_modules/@earendil-works/pi-tui/dist/word-navigation.d.ts.map +1 -1
  1015. package/node_modules/@earendil-works/pi-tui/dist/word-navigation.js.map +1 -1
  1016. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  1017. package/node_modules/@types/node/README.md +3 -3
  1018. package/node_modules/@types/node/assert/strict.d.ts +3 -55
  1019. package/node_modules/@types/node/assert.d.ts +49 -177
  1020. package/node_modules/@types/node/async_hooks.d.ts +151 -43
  1021. package/node_modules/@types/node/buffer.buffer.d.ts +2 -8
  1022. package/node_modules/@types/node/buffer.d.ts +43 -212
  1023. package/node_modules/@types/node/child_process.d.ts +23 -133
  1024. package/node_modules/@types/node/cluster.d.ts +238 -384
  1025. package/node_modules/@types/node/compatibility/iterators.d.ts +1 -0
  1026. package/node_modules/@types/node/console.d.ts +45 -404
  1027. package/node_modules/@types/node/constants.d.ts +3 -10
  1028. package/node_modules/@types/node/crypto.d.ts +640 -1127
  1029. package/node_modules/@types/node/dgram.d.ts +14 -77
  1030. package/node_modules/@types/node/diagnostics_channel.d.ts +3 -29
  1031. package/node_modules/@types/node/dns/promises.d.ts +4 -10
  1032. package/node_modules/@types/node/dns.d.ts +130 -177
  1033. package/node_modules/@types/node/domain.d.ts +12 -32
  1034. package/node_modules/@types/node/events.d.ts +872 -840
  1035. package/node_modules/@types/node/fs/promises.d.ts +193 -20
  1036. package/node_modules/@types/node/fs.d.ts +754 -435
  1037. package/node_modules/@types/node/globals.d.ts +8 -30
  1038. package/node_modules/@types/node/globals.typedarray.d.ts +63 -0
  1039. package/node_modules/@types/node/http.d.ts +363 -305
  1040. package/node_modules/@types/node/http2.d.ts +545 -781
  1041. package/node_modules/@types/node/https.d.ts +64 -243
  1042. package/node_modules/@types/node/index.d.ts +26 -6
  1043. package/node_modules/@types/node/inspector/promises.d.ts +35 -0
  1044. package/node_modules/@types/node/inspector.d.ts +68 -57
  1045. package/node_modules/@types/node/inspector.generated.d.ts +764 -410
  1046. package/node_modules/@types/node/module.d.ts +53 -189
  1047. package/node_modules/@types/node/net.d.ts +101 -207
  1048. package/node_modules/@types/node/os.d.ts +11 -19
  1049. package/node_modules/@types/node/package.json +13 -3
  1050. package/node_modules/@types/node/path/posix.d.ts +8 -0
  1051. package/node_modules/@types/node/path/win32.d.ts +8 -0
  1052. package/node_modules/@types/node/path.d.ts +119 -141
  1053. package/node_modules/@types/node/perf_hooks.d.ts +317 -673
  1054. package/node_modules/@types/node/process.d.ts +277 -157
  1055. package/node_modules/@types/node/punycode.d.ts +3 -31
  1056. package/node_modules/@types/node/querystring.d.ts +3 -16
  1057. package/node_modules/@types/node/quic.d.ts +897 -0
  1058. package/node_modules/@types/node/readline/promises.d.ts +3 -6
  1059. package/node_modules/@types/node/readline.d.ts +65 -152
  1060. package/node_modules/@types/node/repl.d.ts +101 -109
  1061. package/node_modules/@types/node/sea.d.ts +9 -115
  1062. package/node_modules/@types/node/sqlite.d.ts +415 -68
  1063. package/node_modules/@types/node/stream/consumers.d.ts +91 -15
  1064. package/node_modules/@types/node/stream/iter.d.ts +301 -0
  1065. package/node_modules/@types/node/stream/promises.d.ts +136 -15
  1066. package/node_modules/@types/node/stream/web.d.ts +179 -501
  1067. package/node_modules/@types/node/stream.d.ts +577 -490
  1068. package/node_modules/@types/node/string_decoder.d.ts +3 -43
  1069. package/node_modules/@types/node/test/reporters.d.ts +59 -0
  1070. package/node_modules/@types/node/test.d.ts +402 -286
  1071. package/node_modules/@types/node/timers/promises.d.ts +3 -18
  1072. package/node_modules/@types/node/timers.d.ts +3 -141
  1073. package/node_modules/@types/node/tls.d.ts +115 -241
  1074. package/node_modules/@types/node/trace_events.d.ts +3 -97
  1075. package/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +2 -8
  1076. package/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts +71 -0
  1077. package/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +2 -0
  1078. package/node_modules/@types/node/ts5.6/index.d.ts +28 -6
  1079. package/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts +72 -0
  1080. package/node_modules/@types/node/ts5.7/index.d.ts +119 -0
  1081. package/node_modules/@types/node/tty.d.ts +57 -40
  1082. package/node_modules/@types/node/url.d.ts +156 -584
  1083. package/node_modules/@types/node/util/types.d.ts +558 -0
  1084. package/node_modules/@types/node/util.d.ts +167 -1096
  1085. package/node_modules/@types/node/v8.d.ts +75 -15
  1086. package/node_modules/@types/node/vm.d.ts +334 -198
  1087. package/node_modules/@types/node/wasi.d.ts +24 -74
  1088. package/node_modules/@types/node/web-globals/abortcontroller.d.ts +27 -2
  1089. package/node_modules/@types/node/web-globals/blob.d.ts +23 -0
  1090. package/node_modules/@types/node/web-globals/console.d.ts +9 -0
  1091. package/node_modules/@types/node/web-globals/crypto.d.ts +39 -0
  1092. package/node_modules/@types/node/web-globals/encoding.d.ts +11 -0
  1093. package/node_modules/@types/node/web-globals/events.d.ts +9 -0
  1094. package/node_modules/@types/node/web-globals/fetch.d.ts +14 -0
  1095. package/node_modules/@types/node/web-globals/importmeta.d.ts +13 -0
  1096. package/node_modules/@types/node/web-globals/messaging.d.ts +23 -0
  1097. package/node_modules/@types/node/web-globals/navigator.d.ts +3 -0
  1098. package/node_modules/@types/node/web-globals/performance.d.ts +45 -0
  1099. package/node_modules/@types/node/web-globals/streams.d.ts +115 -0
  1100. package/node_modules/@types/node/web-globals/timers.d.ts +44 -0
  1101. package/node_modules/@types/node/web-globals/url.d.ts +24 -0
  1102. package/node_modules/@types/node/worker_threads.d.ts +280 -393
  1103. package/node_modules/@types/node/zlib/iter.d.ts +131 -0
  1104. package/node_modules/@types/node/zlib.d.ts +7 -165
  1105. package/node_modules/undici-types/agent.d.ts +13 -12
  1106. package/node_modules/undici-types/api.d.ts +26 -26
  1107. package/node_modules/undici-types/balanced-pool.d.ts +13 -12
  1108. package/node_modules/undici-types/cache-interceptor.d.ts +179 -0
  1109. package/node_modules/undici-types/client-stats.d.ts +15 -0
  1110. package/node_modules/undici-types/client.d.ts +34 -19
  1111. package/node_modules/undici-types/connector.d.ts +4 -2
  1112. package/node_modules/undici-types/cookies.d.ts +2 -0
  1113. package/node_modules/undici-types/diagnostics-channel.d.ts +18 -10
  1114. package/node_modules/undici-types/dispatcher.d.ts +127 -104
  1115. package/node_modules/undici-types/env-http-proxy-agent.d.ts +4 -3
  1116. package/node_modules/undici-types/errors.d.ts +82 -54
  1117. package/node_modules/undici-types/eventsource.d.ts +9 -4
  1118. package/node_modules/undici-types/fetch.d.ts +22 -20
  1119. package/node_modules/undici-types/formdata.d.ts +7 -7
  1120. package/node_modules/undici-types/global-dispatcher.d.ts +4 -4
  1121. package/node_modules/undici-types/global-origin.d.ts +5 -5
  1122. package/node_modules/undici-types/h2c-client.d.ts +73 -0
  1123. package/node_modules/undici-types/handlers.d.ts +8 -8
  1124. package/node_modules/undici-types/header.d.ts +157 -1
  1125. package/node_modules/undici-types/index.d.ts +67 -47
  1126. package/node_modules/undici-types/interceptors.d.ts +71 -8
  1127. package/node_modules/undici-types/mock-agent.d.ts +36 -18
  1128. package/node_modules/undici-types/mock-call-history.d.ts +111 -0
  1129. package/node_modules/undici-types/mock-client.d.ts +6 -4
  1130. package/node_modules/undici-types/mock-errors.d.ts +3 -3
  1131. package/node_modules/undici-types/mock-interceptor.d.ts +21 -20
  1132. package/node_modules/undici-types/mock-pool.d.ts +6 -4
  1133. package/node_modules/undici-types/package.json +1 -1
  1134. package/node_modules/undici-types/patch.d.ts +0 -4
  1135. package/node_modules/undici-types/pool-stats.d.ts +8 -8
  1136. package/node_modules/undici-types/pool.d.ts +15 -13
  1137. package/node_modules/undici-types/proxy-agent.d.ts +5 -4
  1138. package/node_modules/undici-types/readable.d.ts +19 -16
  1139. package/node_modules/undici-types/retry-agent.d.ts +1 -1
  1140. package/node_modules/undici-types/retry-handler.d.ts +19 -10
  1141. package/node_modules/undici-types/round-robin-pool.d.ts +41 -0
  1142. package/node_modules/undici-types/snapshot-agent.d.ts +109 -0
  1143. package/node_modules/undici-types/socks5-proxy-agent.d.ts +25 -0
  1144. package/node_modules/undici-types/util.d.ts +3 -3
  1145. package/node_modules/undici-types/utility.d.ts +7 -0
  1146. package/node_modules/undici-types/webidl.d.ts +148 -29
  1147. package/node_modules/undici-types/websocket.d.ts +48 -10
  1148. package/npm-shrinkwrap.json +21 -21
  1149. package/package.json +13 -12
  1150. package/dist/core/extensions/builtin/compaction/overflow-detection.d.ts +0 -11
  1151. package/dist/core/extensions/builtin/compaction/overflow-detection.d.ts.map +0 -1
  1152. package/dist/core/extensions/builtin/compaction/overflow-detection.js +0 -40
  1153. package/dist/core/extensions/builtin/compaction/overflow-detection.js.map +0 -1
  1154. package/dist/core/extensions/builtin/system-messages.d.ts +0 -47
  1155. package/dist/core/extensions/builtin/system-messages.d.ts.map +0 -1
  1156. package/dist/core/extensions/builtin/system-messages.js +0 -117
  1157. package/dist/core/extensions/builtin/system-messages.js.map +0 -1
  1158. package/dist/core/extensions/builtin/todotools/continuation/config.d.ts +0 -10
  1159. package/dist/core/extensions/builtin/todotools/continuation/config.d.ts.map +0 -1
  1160. package/dist/core/extensions/builtin/todotools/continuation/config.js +0 -33
  1161. package/dist/core/extensions/builtin/todotools/continuation/config.js.map +0 -1
  1162. package/dist/core/extensions/builtin/todotools/continuation/index.d.ts +0 -2
  1163. package/dist/core/extensions/builtin/todotools/continuation/index.d.ts.map +0 -1
  1164. package/dist/core/extensions/builtin/todotools/continuation/index.js +0 -2
  1165. package/dist/core/extensions/builtin/todotools/continuation/index.js.map +0 -1
  1166. package/dist/core/extensions/builtin/todotools/continuation/prompt.d.ts +0 -5
  1167. package/dist/core/extensions/builtin/todotools/continuation/prompt.d.ts.map +0 -1
  1168. package/dist/core/extensions/builtin/todotools/continuation/prompt.js +0 -34
  1169. package/dist/core/extensions/builtin/todotools/continuation/prompt.js.map +0 -1
  1170. package/dist/core/extensions/builtin/todotools/continuation/runtime.d.ts +0 -11
  1171. package/dist/core/extensions/builtin/todotools/continuation/runtime.d.ts.map +0 -1
  1172. package/dist/core/extensions/builtin/todotools/continuation/runtime.js +0 -201
  1173. package/dist/core/extensions/builtin/todotools/continuation/runtime.js.map +0 -1
  1174. package/dist/core/extensions/builtin/todotools/settings.d.ts +0 -6
  1175. package/dist/core/extensions/builtin/todotools/settings.d.ts.map +0 -1
  1176. package/dist/core/extensions/builtin/todotools/settings.js +0 -58
  1177. package/dist/core/extensions/builtin/todotools/settings.js.map +0 -1
  1178. package/dist/core/extensions/builtin/todotools/system-messages.d.ts +0 -34
  1179. package/dist/core/extensions/builtin/todotools/system-messages.d.ts.map +0 -1
  1180. package/dist/core/extensions/builtin/todotools/system-messages.js +0 -82
  1181. package/dist/core/extensions/builtin/todotools/system-messages.js.map +0 -1
  1182. package/dist/core/index.d.ts +0 -12
  1183. package/dist/core/index.d.ts.map +0 -1
  1184. package/dist/core/index.js +0 -12
  1185. package/dist/core/index.js.map +0 -1
  1186. package/node_modules/@types/node/compatibility/disposable.d.ts +0 -14
  1187. package/node_modules/@types/node/compatibility/index.d.ts +0 -9
  1188. package/node_modules/@types/node/compatibility/indexable.d.ts +0 -20
  1189. package/node_modules/undici-types/file.d.ts +0 -39
  1190. package/node_modules/undici-types/filereader.d.ts +0 -54
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,eAAO,MAAM,kBAAkB;;EAI7B,CAAC;AAEH,eAAO,MAAM,gCAAgC,yGAC0D,CAAC;AACxG,eAAO,MAAM,wBAAwB,onBAmBpC,CAAC;AACF,eAAO,MAAM,6BAA6B,k9FACu2F,CAAC","sourcesContent":["import { Type } from \"typebox\";\n\nexport const APPLY_PATCH_PARAMS = Type.Object({\n\tinput: Type.String({\n\t\tdescription: \"The entire contents of the apply_patch command\",\n\t}),\n});\n\nexport const APPLY_PATCH_FREEFORM_DESCRIPTION =\n\t\"Use the `apply_patch` tool to edit files. This is a FREEFORM tool, so do not wrap the patch in JSON.\";\nexport const APPLY_PATCH_LARK_GRAMMAR = `start: begin_patch hunk+ end_patch\nbegin_patch: \"*** Begin Patch\" LF\nend_patch: \"*** End Patch\" LF?\n\nhunk: add_hunk | delete_hunk | update_hunk\nadd_hunk: \"*** Add File: \" filename LF add_line+\ndelete_hunk: \"*** Delete File: \" filename LF\nupdate_hunk: \"*** Update File: \" filename LF change_move? change?\n\nfilename: /(.+)/\nadd_line: \"+\" /(.*)/ LF -> line\n\nchange_move: \"*** Move to: \" filename LF\nchange: (change_context | change_line)+ eof_line?\nchange_context: (\"@@\" | \"@@ \" /(.+)/) LF\nchange_line: (\"+\" | \"-\" | \" \") /(.*)/ LF\neof_line: \"*** End of File\" LF\n\n%import common.LF\n`;\nexport const CODEX_APPLY_PATCH_DESCRIPTION =\n\t'Use the `apply_patch` tool to edit files.\\nYour patch language is a stripped‑down, file‑oriented diff format designed to be easy to parse and safe to apply. You can think of it as a high‑level envelope:\\n\\n*** Begin Patch\\n[ one or more file sections ]\\n*** End Patch\\n\\nWithin that envelope, you get a sequence of file operations.\\nYou MUST include a header to specify the action you are taking.\\nEach operation starts with one of three headers:\\n\\n*** Add File: <path> - create a new file. Every following line is a + line (the initial contents).\\n*** Delete File: <path> - remove an existing file. Nothing follows.\\n*** Update File: <path> - patch an existing file in place (optionally with a rename).\\n\\nMay be immediately followed by *** Move to: <new path> if you want to rename the file.\\nThen one or more “hunks”, each introduced by @@ (optionally followed by a hunk header).\\nWithin a hunk each line starts with:\\n\\nFor instructions on [context_before] and [context_after]:\\n- By default, show 3 lines of code immediately above and 3 lines immediately below each change. If a change is within 3 lines of a previous change, do NOT duplicate the first change’s [context_after] lines in the second change’s [context_before] lines.\\n- If 3 lines of context is insufficient to uniquely identify the snippet of code within the file, use the @@ operator to indicate the class or function to which the snippet belongs. For instance, we might have:\\n@@ class BaseClass\\n[3 lines of pre-context]\\n- [old_code]\\n+ [new_code]\\n[3 lines of post-context]\\n\\n- If a code block is repeated so many times in a class or function such that even a single `@@` statement and 3 lines of context cannot uniquely identify the snippet of code, you can use multiple `@@` statements to jump to the right context. For instance:\\n\\n@@ class BaseClass\\n@@ \\t def method():\\n[3 lines of pre-context]\\n- [old_code]\\n+ [new_code]\\n[3 lines of post-context]\\n\\nThe full grammar definition is below:\\nPatch := Begin { FileOp } End\\nBegin := \"*** Begin Patch\" NEWLINE\\nEnd := \"*** End Patch\" NEWLINE\\nFileOp := AddFile | DeleteFile | UpdateFile\\nAddFile := \"*** Add File: \" path NEWLINE { \"+\" line NEWLINE }\\nDeleteFile := \"*** Delete File: \" path NEWLINE\\nUpdateFile := \"*** Update File: \" path NEWLINE [ MoveTo ] { Hunk }\\nMoveTo := \"*** Move to: \" newPath NEWLINE\\nHunk := \"@@\" [ header ] NEWLINE { HunkLine } [ \"*** End of File\" NEWLINE ]\\nHunkLine := (\" \" | \"-\" | \"+\") text NEWLINE\\n\\nA full patch can combine several operations:\\n\\n*** Begin Patch\\n*** Add File: hello.txt\\n+Hello world\\n*** Update File: src/app.py\\n*** Move to: src/main.py\\n@@ def greet():\\n-print(\"Hi\")\\n+print(\"Hello, world!\")\\n*** Delete File: obsolete.txt\\n*** End Patch\\n\\nIt is important to remember:\\n\\n- You must include a header with your intended action (Add/Delete/Update)\\n- You must prefix new lines with `+` even when creating a new file\\n- File references can only be relative, NEVER ABSOLUTE.\\n';\n"]}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,eAAO,MAAM,kBAAkB;;EAI7B,CAAC;AAEH,eAAO,MAAM,gCAAgC,yGAC0D,CAAC;AACxG,eAAO,MAAM,wBAAwB,onBAmBpC,CAAC;AACF,eAAO,MAAM,6BAA6B,k9FACu2F,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC;IAC7C,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;QAClB,WAAW,EAAE,gDAAgD;KAC7D,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gCAAgC,GAC5C,sGAAsG,CAAC;AACxG,MAAM,CAAC,MAAM,wBAAwB,GAAG;;;;;;;;;;;;;;;;;;;CAmBvC,CAAC;AACF,MAAM,CAAC,MAAM,6BAA6B,GACzC,85FAAg5F,CAAC","sourcesContent":["import { Type } from \"typebox\";\n\nexport const APPLY_PATCH_PARAMS = Type.Object({\n\tinput: Type.String({\n\t\tdescription: \"The entire contents of the apply_patch command\",\n\t}),\n});\n\nexport const APPLY_PATCH_FREEFORM_DESCRIPTION =\n\t\"Use the `apply_patch` tool to edit files. This is a FREEFORM tool, so do not wrap the patch in JSON.\";\nexport const APPLY_PATCH_LARK_GRAMMAR = `start: begin_patch hunk+ end_patch\nbegin_patch: \"*** Begin Patch\" LF\nend_patch: \"*** End Patch\" LF?\n\nhunk: add_hunk | delete_hunk | update_hunk\nadd_hunk: \"*** Add File: \" filename LF add_line+\ndelete_hunk: \"*** Delete File: \" filename LF\nupdate_hunk: \"*** Update File: \" filename LF change_move? change?\n\nfilename: /(.+)/\nadd_line: \"+\" /(.*)/ LF -> line\n\nchange_move: \"*** Move to: \" filename LF\nchange: (change_context | change_line)+ eof_line?\nchange_context: (\"@@\" | \"@@ \" /(.+)/) LF\nchange_line: (\"+\" | \"-\" | \" \") /(.*)/ LF\neof_line: \"*** End of File\" LF\n\n%import common.LF\n`;\nexport const CODEX_APPLY_PATCH_DESCRIPTION =\n\t'Use the `apply_patch` tool to edit files.\\nYour patch language is a stripped‑down, file‑oriented diff format designed to be easy to parse and safe to apply. You can think of it as a high‑level envelope:\\n\\n*** Begin Patch\\n[ one or more file sections ]\\n*** End Patch\\n\\nWithin that envelope, you get a sequence of file operations.\\nYou MUST include a header to specify the action you are taking.\\nEach operation starts with one of three headers:\\n\\n*** Add File: <path> - create a new file. Every following line is a + line (the initial contents).\\n*** Delete File: <path> - remove an existing file. Nothing follows.\\n*** Update File: <path> - patch an existing file in place (optionally with a rename).\\n\\nMay be immediately followed by *** Move to: <new path> if you want to rename the file.\\nThen one or more “hunks”, each introduced by @@ (optionally followed by a hunk header).\\nWithin a hunk each line starts with:\\n\\nFor instructions on [context_before] and [context_after]:\\n- By default, show 3 lines of code immediately above and 3 lines immediately below each change. If a change is within 3 lines of a previous change, do NOT duplicate the first change’s [context_after] lines in the second change’s [context_before] lines.\\n- If 3 lines of context is insufficient to uniquely identify the snippet of code within the file, use the @@ operator to indicate the class or function to which the snippet belongs. For instance, we might have:\\n@@ class BaseClass\\n[3 lines of pre-context]\\n- [old_code]\\n+ [new_code]\\n[3 lines of post-context]\\n\\n- If a code block is repeated so many times in a class or function such that even a single `@@` statement and 3 lines of context cannot uniquely identify the snippet of code, you can use multiple `@@` statements to jump to the right context. For instance:\\n\\n@@ class BaseClass\\n@@ \\t def method():\\n[3 lines of pre-context]\\n- [old_code]\\n+ [new_code]\\n[3 lines of post-context]\\n\\nThe full grammar definition is below:\\nPatch := Begin { FileOp } End\\nBegin := \"*** Begin Patch\" NEWLINE\\nEnd := \"*** End Patch\" NEWLINE\\nFileOp := AddFile | DeleteFile | UpdateFile\\nAddFile := \"*** Add File: \" path NEWLINE { \"+\" line NEWLINE }\\nDeleteFile := \"*** Delete File: \" path NEWLINE\\nUpdateFile := \"*** Update File: \" path NEWLINE [ MoveTo ] { Hunk }\\nMoveTo := \"*** Move to: \" newPath NEWLINE\\nHunk := \"@@\" [ header ] NEWLINE { HunkLine } [ \"*** End of File\" NEWLINE ]\\nHunkLine := (\" \" | \"-\" | \"+\") text NEWLINE\\n\\nA full patch can combine several operations:\\n\\n*** Begin Patch\\n*** Add File: hello.txt\\n+Hello world\\n*** Update File: src/app.py\\n*** Move to: src/main.py\\n@@ def greet():\\n-print(\"Hi\")\\n+print(\"Hello, world!\")\\n*** Delete File: obsolete.txt\\n*** End Patch\\n\\nIt is important to remember:\\n\\n- You must include a header with your intended action (Add/Delete/Update)\\n- You must prefix new lines with `+` even when creating a new file\\n- File references can only be relative, NEVER ABSOLUTE.\\n';\n"]}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC;IAC7C,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;QAClB,WAAW,EAAE,gDAAgD;KAC7D,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gCAAgC,GAC5C,sGAAsG,CAAC;AACxG,MAAM,CAAC,MAAM,wBAAwB,GAAG;;;;;;;;;;;;;;;;;;;CAmBvC,CAAC;AACF,MAAM,CAAC,MAAM,6BAA6B,GACzC,g5FAAg5F,CAAC","sourcesContent":["import { Type } from \"typebox\";\n\nexport const APPLY_PATCH_PARAMS = Type.Object({\n\tinput: Type.String({\n\t\tdescription: \"The entire contents of the apply_patch command\",\n\t}),\n});\n\nexport const APPLY_PATCH_FREEFORM_DESCRIPTION =\n\t\"Use the `apply_patch` tool to edit files. This is a FREEFORM tool, so do not wrap the patch in JSON.\";\nexport const APPLY_PATCH_LARK_GRAMMAR = `start: begin_patch hunk+ end_patch\nbegin_patch: \"*** Begin Patch\" LF\nend_patch: \"*** End Patch\" LF?\n\nhunk: add_hunk | delete_hunk | update_hunk\nadd_hunk: \"*** Add File: \" filename LF add_line+\ndelete_hunk: \"*** Delete File: \" filename LF\nupdate_hunk: \"*** Update File: \" filename LF change_move? change?\n\nfilename: /(.+)/\nadd_line: \"+\" /(.*)/ LF -> line\n\nchange_move: \"*** Move to: \" filename LF\nchange: (change_context | change_line)+ eof_line?\nchange_context: (\"@@\" | \"@@ \" /(.+)/) LF\nchange_line: (\"+\" | \"-\" | \" \") /(.*)/ LF\neof_line: \"*** End of File\" LF\n\n%import common.LF\n`;\nexport const CODEX_APPLY_PATCH_DESCRIPTION =\n\t'Use the `apply_patch` tool to edit files.\\nYour patch language is a stripped‑down, file‑oriented diff format designed to be easy to parse and safe to apply. You can think of it as a high‑level envelope:\\n\\n*** Begin Patch\\n[ one or more file sections ]\\n*** End Patch\\n\\nWithin that envelope, you get a sequence of file operations.\\nYou MUST include a header to specify the action you are taking.\\nEach operation starts with one of three headers:\\n\\n*** Add File: <path> - create a new file. Every following line is a + line (the initial contents).\\n*** Delete File: <path> - remove an existing file. Nothing follows.\\n*** Update File: <path> - patch an existing file in place (optionally with a rename).\\n\\nMay be immediately followed by *** Move to: <new path> if you want to rename the file.\\nThen one or more “hunks”, each introduced by @@ (optionally followed by a hunk header).\\nWithin a hunk each line starts with:\\n\\nFor instructions on [context_before] and [context_after]:\\n- By default, show 3 lines of code immediately above and 3 lines immediately below each change. If a change is within 3 lines of a previous change, do NOT duplicate the first change’s [context_after] lines in the second change’s [context_before] lines.\\n- If 3 lines of context is insufficient to uniquely identify the snippet of code within the file, use the @@ operator to indicate the class or function to which the snippet belongs. For instance, we might have:\\n@@ class BaseClass\\n[3 lines of pre-context]\\n- [old_code]\\n+ [new_code]\\n[3 lines of post-context]\\n\\n- If a code block is repeated so many times in a class or function such that even a single `@@` statement and 3 lines of context cannot uniquely identify the snippet of code, you can use multiple `@@` statements to jump to the right context. For instance:\\n\\n@@ class BaseClass\\n@@ \\t def method():\\n[3 lines of pre-context]\\n- [old_code]\\n+ [new_code]\\n[3 lines of post-context]\\n\\nThe full grammar definition is below:\\nPatch := Begin { FileOp } End\\nBegin := \"*** Begin Patch\" NEWLINE\\nEnd := \"*** End Patch\" NEWLINE\\nFileOp := AddFile | DeleteFile | UpdateFile\\nAddFile := \"*** Add File: \" path NEWLINE { \"+\" line NEWLINE }\\nDeleteFile := \"*** Delete File: \" path NEWLINE\\nUpdateFile := \"*** Update File: \" path NEWLINE [ MoveTo ] { Hunk }\\nMoveTo := \"*** Move to: \" newPath NEWLINE\\nHunk := \"@@\" [ header ] NEWLINE { HunkLine } [ \"*** End of File\" NEWLINE ]\\nHunkLine := (\" \" | \"-\" | \"+\") text NEWLINE\\n\\nA full patch can combine several operations:\\n\\n*** Begin Patch\\n*** Add File: hello.txt\\n+Hello world\\n*** Update File: src/app.py\\n*** Move to: src/main.py\\n@@ def greet():\\n-print(\"Hi\")\\n+print(\"Hello, world!\")\\n*** Delete File: obsolete.txt\\n*** End Patch\\n\\nIt is important to remember:\\n\\n- You must include a header with your intended action (Add/Delete/Update)\\n- You must prefix new lines with `+` even when creating a new file\\n- File references can only be relative, NEVER ABSOLUTE.\\n';\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEtE,qBAAa,eAAgB,SAAQ,KAAK;IACzC,SAAgB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9C,SAAgB,MAAM,EAAE,gBAAgB,CAAC;IAEzC,YAAY,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAKpD;IAED,iBAAiB,IAAI,OAAO,CAE3B;CACD","sourcesContent":["import type { ApplyPatchFailure, ApplyPatchResult } from \"./types.ts\";\n\nexport class ApplyPatchError extends Error {\n\tpublic readonly failures: ApplyPatchFailure[];\n\tpublic readonly result: ApplyPatchResult;\n\n\tconstructor(message: string, result: ApplyPatchResult) {\n\t\tsuper(message);\n\t\tthis.name = \"ApplyPatchError\";\n\t\tthis.failures = result.failures;\n\t\tthis.result = result;\n\t}\n\n\thasPartialSuccess(): boolean {\n\t\treturn this.result.hasPartialSuccess;\n\t}\n}\n"]}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEtE,qBAAa,eAAgB,SAAQ,KAAK;IACzC,SAAgB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9C,SAAgB,MAAM,EAAE,gBAAgB,CAAC;IAEzC,YAAY,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAKpD;IAED,iBAAiB,IAAI,OAAO,CAE3B;CACD"}
@@ -1,6 +1,4 @@
1
1
  export class ApplyPatchError extends Error {
2
- failures;
3
- result;
4
2
  constructor(message, result) {
5
3
  super(message);
6
4
  this.name = "ApplyPatchError";
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/errors.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACzB,QAAQ,CAAsB;IAC9B,MAAM,CAAmB;IAEzC,YAAY,OAAe,EAAE,MAAwB,EAAE;QACtD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IAAA,CACrB;IAED,iBAAiB,GAAY;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC;IAAA,CACrC;CACD","sourcesContent":["import type { ApplyPatchFailure, ApplyPatchResult } from \"./types.ts\";\n\nexport class ApplyPatchError extends Error {\n\tpublic readonly failures: ApplyPatchFailure[];\n\tpublic readonly result: ApplyPatchResult;\n\n\tconstructor(message: string, result: ApplyPatchResult) {\n\t\tsuper(message);\n\t\tthis.name = \"ApplyPatchError\";\n\t\tthis.failures = result.failures;\n\t\tthis.result = result;\n\t}\n\n\thasPartialSuccess(): boolean {\n\t\treturn this.result.hasPartialSuccess;\n\t}\n}\n"]}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/errors.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAIzC,YAAY,OAAe,EAAE,MAAwB;QACpD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,CAAC;IAED,iBAAiB;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC;IACtC,CAAC;CACD","sourcesContent":["import type { ApplyPatchFailure, ApplyPatchResult } from \"./types.ts\";\n\nexport class ApplyPatchError extends Error {\n\tpublic readonly failures: ApplyPatchFailure[];\n\tpublic readonly result: ApplyPatchResult;\n\n\tconstructor(message: string, result: ApplyPatchResult) {\n\t\tsuper(message);\n\t\tthis.name = \"ApplyPatchError\";\n\t\tthis.failures = result.failures;\n\t\tthis.result = result;\n\t}\n\n\thasPartialSuccess(): boolean {\n\t\treturn this.result.hasPartialSuccess;\n\t}\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import type { Model } from "@earendil-works/pi-ai";
2
2
  import type { ApplyPatchExtensionAPI } from "./types.ts";
3
- export declare function isOpenAIGptModel(model: Pick<Model<string>, "provider" | "id"> | undefined): boolean;
3
+ export declare function isOpenAIGptModel(model: Pick<Model<string>, "api" | "id"> | undefined): boolean;
4
4
  export declare function registerApplyPatchExtension(pi: ApplyPatchExtensionAPI): void;
5
5
  export default registerApplyPatchExtension;
6
6
  //# sourceMappingURL=extension.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/extension.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,KAAK,EAAE,sBAAsB,EAAiB,MAAM,YAAY,CAAC;AAKxE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC,GAAG,SAAS,GAAG,OAAO,CAEnG;AA+CD,wBAAgB,2BAA2B,CAAC,EAAE,EAAE,sBAAsB,GAAG,IAAI,CAS5E;AAED,eAAe,2BAA2B,CAAC","sourcesContent":["import type { Model } from \"@earendil-works/pi-ai\";\nimport { createApplyPatchTool } from \"./tool.ts\";\nimport type { ApplyPatchExtensionAPI, BaselineState } from \"./types.ts\";\n\nconst GPT_APPLY_PATCH_PROVIDERS = new Set([\"openai\", \"azure-openai-responses\", \"github-copilot\"]);\nconst EDIT_TOOL_NAMES = new Set([\"write\", \"edit\"]);\n\nexport function isOpenAIGptModel(model: Pick<Model<string>, \"provider\" | \"id\"> | undefined): boolean {\n\treturn model !== undefined && GPT_APPLY_PATCH_PROVIDERS.has(model.provider) && model.id.startsWith(\"gpt-\");\n}\n\nfunction hasEditTools(toolNames: string[]): boolean {\n\treturn toolNames.some((toolName) => EDIT_TOOL_NAMES.has(toolName));\n}\n\nfunction withoutApplyPatch(toolNames: string[]): string[] {\n\treturn toolNames.filter((toolName) => toolName !== \"apply_patch\");\n}\n\nfunction replaceEditToolsWithApplyPatch(toolNames: string[]): string[] {\n\tconst filteredToolNames = withoutApplyPatch(toolNames).filter((toolName) => !EDIT_TOOL_NAMES.has(toolName));\n\tif (!hasEditTools(toolNames)) return filteredToolNames;\n\treturn [...filteredToolNames, \"apply_patch\"];\n}\n\nfunction restoreEditToolsFromBaseline(currentToolNames: string[], baselineToolNames: string[]): string[] {\n\tconst restoredToolNames = [\n\t\t...withoutApplyPatch(currentToolNames),\n\t\t...baselineToolNames.filter((toolName) => EDIT_TOOL_NAMES.has(toolName)),\n\t];\n\treturn [...new Set(restoredToolNames)];\n}\n\nfunction syncToolset(\n\tpi: Pick<ApplyPatchExtensionAPI, \"getActiveTools\" | \"setActiveTools\">,\n\tmodel: Model<string> | undefined,\n\tstate: BaselineState,\n): void {\n\tconst currentToolNames = pi.getActiveTools();\n\tif (isOpenAIGptModel(model)) {\n\t\tif (hasEditTools(currentToolNames)) state.nonGptToolNames = withoutApplyPatch(currentToolNames);\n\t\tpi.setActiveTools(replaceEditToolsWithApplyPatch(currentToolNames));\n\t\treturn;\n\t}\n\n\tif (state.nonGptToolNames.length > 0) {\n\t\tconst restoredToolNames = restoreEditToolsFromBaseline(currentToolNames, state.nonGptToolNames);\n\t\tstate.nonGptToolNames = restoredToolNames;\n\t\tpi.setActiveTools(restoredToolNames);\n\t\treturn;\n\t}\n\n\tstate.nonGptToolNames = withoutApplyPatch(currentToolNames);\n\tpi.setActiveTools(state.nonGptToolNames);\n}\n\nexport function registerApplyPatchExtension(pi: ApplyPatchExtensionAPI): void {\n\tconst state: BaselineState = { nonGptToolNames: [] };\n\tpi.registerTool(createApplyPatchTool());\n\tpi.on(\"session_start\", async (_event, ctx) => {\n\t\tsyncToolset(pi, ctx.model, state);\n\t});\n\tpi.on(\"model_select\", async (event) => {\n\t\tsyncToolset(pi, event.model, state);\n\t});\n}\n\nexport default registerApplyPatchExtension;\n"]}
1
+ {"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/extension.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,EAAE,sBAAsB,EAAiB,MAAM,YAAY,CAAC;AAaxE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,SAAS,GAAG,OAAO,CAE9F;AA+CD,wBAAgB,2BAA2B,CAAC,EAAE,EAAE,sBAAsB,GAAG,IAAI,CAS5E;eAEc,2BAA2B"}
@@ -1,8 +1,16 @@
1
1
  import { createApplyPatchTool } from "./tool.js";
2
- const GPT_APPLY_PATCH_PROVIDERS = new Set(["openai", "azure-openai-responses", "github-copilot"]);
2
+ // apply_patch ships as a freeform custom tool, which only the OpenAI Responses-family
3
+ // APIs can carry (openai-completions throws on freeform tools). Gate on the model's API
4
+ // rather than a provider allowlist so OpenAI-compatible custom providers (e.g. a proxy
5
+ // exposing gpt-5.5 via openai-responses) also swap edit/write for apply_patch.
6
+ const APPLY_PATCH_FREEFORM_APIS = new Set([
7
+ "openai-responses",
8
+ "azure-openai-responses",
9
+ "openai-codex-responses",
10
+ ]);
3
11
  const EDIT_TOOL_NAMES = new Set(["write", "edit"]);
4
12
  export function isOpenAIGptModel(model) {
5
- return model !== undefined && GPT_APPLY_PATCH_PROVIDERS.has(model.provider) && model.id.startsWith("gpt-");
13
+ return model !== undefined && APPLY_PATCH_FREEFORM_APIS.has(model.api) && model.id.startsWith("gpt-");
6
14
  }
7
15
  function hasEditTools(toolNames) {
8
16
  return toolNames.some((toolName) => EDIT_TOOL_NAMES.has(toolName));
@@ -1 +1 @@
1
- {"version":3,"file":"extension.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/extension.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Model } from \"@earendil-works/pi-ai\";\nimport { createApplyPatchTool } from \"./tool.ts\";\nimport type { ApplyPatchExtensionAPI, BaselineState } from \"./types.ts\";\n\nconst GPT_APPLY_PATCH_PROVIDERS = new Set([\"openai\", \"azure-openai-responses\", \"github-copilot\"]);\nconst EDIT_TOOL_NAMES = new Set([\"write\", \"edit\"]);\n\nexport function isOpenAIGptModel(model: Pick<Model<string>, \"provider\" | \"id\"> | undefined): boolean {\n\treturn model !== undefined && GPT_APPLY_PATCH_PROVIDERS.has(model.provider) && model.id.startsWith(\"gpt-\");\n}\n\nfunction hasEditTools(toolNames: string[]): boolean {\n\treturn toolNames.some((toolName) => EDIT_TOOL_NAMES.has(toolName));\n}\n\nfunction withoutApplyPatch(toolNames: string[]): string[] {\n\treturn toolNames.filter((toolName) => toolName !== \"apply_patch\");\n}\n\nfunction replaceEditToolsWithApplyPatch(toolNames: string[]): string[] {\n\tconst filteredToolNames = withoutApplyPatch(toolNames).filter((toolName) => !EDIT_TOOL_NAMES.has(toolName));\n\tif (!hasEditTools(toolNames)) return filteredToolNames;\n\treturn [...filteredToolNames, \"apply_patch\"];\n}\n\nfunction restoreEditToolsFromBaseline(currentToolNames: string[], baselineToolNames: string[]): string[] {\n\tconst restoredToolNames = [\n\t\t...withoutApplyPatch(currentToolNames),\n\t\t...baselineToolNames.filter((toolName) => EDIT_TOOL_NAMES.has(toolName)),\n\t];\n\treturn [...new Set(restoredToolNames)];\n}\n\nfunction syncToolset(\n\tpi: Pick<ApplyPatchExtensionAPI, \"getActiveTools\" | \"setActiveTools\">,\n\tmodel: Model<string> | undefined,\n\tstate: BaselineState,\n): void {\n\tconst currentToolNames = pi.getActiveTools();\n\tif (isOpenAIGptModel(model)) {\n\t\tif (hasEditTools(currentToolNames)) state.nonGptToolNames = withoutApplyPatch(currentToolNames);\n\t\tpi.setActiveTools(replaceEditToolsWithApplyPatch(currentToolNames));\n\t\treturn;\n\t}\n\n\tif (state.nonGptToolNames.length > 0) {\n\t\tconst restoredToolNames = restoreEditToolsFromBaseline(currentToolNames, state.nonGptToolNames);\n\t\tstate.nonGptToolNames = restoredToolNames;\n\t\tpi.setActiveTools(restoredToolNames);\n\t\treturn;\n\t}\n\n\tstate.nonGptToolNames = withoutApplyPatch(currentToolNames);\n\tpi.setActiveTools(state.nonGptToolNames);\n}\n\nexport function registerApplyPatchExtension(pi: ApplyPatchExtensionAPI): void {\n\tconst state: BaselineState = { nonGptToolNames: [] };\n\tpi.registerTool(createApplyPatchTool());\n\tpi.on(\"session_start\", async (_event, ctx) => {\n\t\tsyncToolset(pi, ctx.model, state);\n\t});\n\tpi.on(\"model_select\", async (event) => {\n\t\tsyncToolset(pi, event.model, state);\n\t});\n}\n\nexport default registerApplyPatchExtension;\n"]}
1
+ {"version":3,"file":"extension.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/extension.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Api, Model } from \"@earendil-works/pi-ai\";\nimport { createApplyPatchTool } from \"./tool.ts\";\nimport type { ApplyPatchExtensionAPI, BaselineState } from \"./types.ts\";\n\n// apply_patch ships as a freeform custom tool, which only the OpenAI Responses-family\n// APIs can carry (openai-completions throws on freeform tools). Gate on the model's API\n// rather than a provider allowlist so OpenAI-compatible custom providers (e.g. a proxy\n// exposing gpt-5.5 via openai-responses) also swap edit/write for apply_patch.\nconst APPLY_PATCH_FREEFORM_APIS = new Set<Api>([\n\t\"openai-responses\",\n\t\"azure-openai-responses\",\n\t\"openai-codex-responses\",\n]);\nconst EDIT_TOOL_NAMES = new Set([\"write\", \"edit\"]);\n\nexport function isOpenAIGptModel(model: Pick<Model<string>, \"api\" | \"id\"> | undefined): boolean {\n\treturn model !== undefined && APPLY_PATCH_FREEFORM_APIS.has(model.api) && model.id.startsWith(\"gpt-\");\n}\n\nfunction hasEditTools(toolNames: string[]): boolean {\n\treturn toolNames.some((toolName) => EDIT_TOOL_NAMES.has(toolName));\n}\n\nfunction withoutApplyPatch(toolNames: string[]): string[] {\n\treturn toolNames.filter((toolName) => toolName !== \"apply_patch\");\n}\n\nfunction replaceEditToolsWithApplyPatch(toolNames: string[]): string[] {\n\tconst filteredToolNames = withoutApplyPatch(toolNames).filter((toolName) => !EDIT_TOOL_NAMES.has(toolName));\n\tif (!hasEditTools(toolNames)) return filteredToolNames;\n\treturn [...filteredToolNames, \"apply_patch\"];\n}\n\nfunction restoreEditToolsFromBaseline(currentToolNames: string[], baselineToolNames: string[]): string[] {\n\tconst restoredToolNames = [\n\t\t...withoutApplyPatch(currentToolNames),\n\t\t...baselineToolNames.filter((toolName) => EDIT_TOOL_NAMES.has(toolName)),\n\t];\n\treturn [...new Set(restoredToolNames)];\n}\n\nfunction syncToolset(\n\tpi: Pick<ApplyPatchExtensionAPI, \"getActiveTools\" | \"setActiveTools\">,\n\tmodel: Model<string> | undefined,\n\tstate: BaselineState,\n): void {\n\tconst currentToolNames = pi.getActiveTools();\n\tif (isOpenAIGptModel(model)) {\n\t\tif (hasEditTools(currentToolNames)) state.nonGptToolNames = withoutApplyPatch(currentToolNames);\n\t\tpi.setActiveTools(replaceEditToolsWithApplyPatch(currentToolNames));\n\t\treturn;\n\t}\n\n\tif (state.nonGptToolNames.length > 0) {\n\t\tconst restoredToolNames = restoreEditToolsFromBaseline(currentToolNames, state.nonGptToolNames);\n\t\tstate.nonGptToolNames = restoredToolNames;\n\t\tpi.setActiveTools(restoredToolNames);\n\t\treturn;\n\t}\n\n\tstate.nonGptToolNames = withoutApplyPatch(currentToolNames);\n\tpi.setActiveTools(state.nonGptToolNames);\n}\n\nexport function registerApplyPatchExtension(pi: ApplyPatchExtensionAPI): void {\n\tconst state: BaselineState = { nonGptToolNames: [] };\n\tpi.registerTool(createApplyPatchTool());\n\tpi.on(\"session_start\", async (_event, ctx) => {\n\t\tsyncToolset(pi, ctx.model, state);\n\t});\n\tpi.on(\"model_select\", async (event) => {\n\t\tsyncToolset(pi, event.model, state);\n\t});\n}\n\nexport default registerApplyPatchExtension;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAC5G,OAAO,EACN,gCAAgC,EAChC,wBAAwB,EACxB,kBAAkB,EAClB,6BAA6B,GAC7B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AACxF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACN,0BAA0B,EAC1B,WAAW,EACX,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EACvB,kBAAkB,EAClB,eAAe,GACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,YAAY,EACX,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,0BAA0B,EAC1B,8BAA8B,EAC9B,qBAAqB,EACrB,gBAAgB,EAChB,wBAAwB,EACxB,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,WAAW,EACX,UAAU,GACV,MAAM,YAAY,CAAC","sourcesContent":["export { __testWriteFileAtomic, applyPatch, applyPatchDetailed, buildPartialFailureText } from \"./apply.ts\";\nexport {\n\tAPPLY_PATCH_FREEFORM_DESCRIPTION,\n\tAPPLY_PATCH_LARK_GRAMMAR,\n\tAPPLY_PATCH_PARAMS,\n\tCODEX_APPLY_PATCH_DESCRIPTION,\n} from \"./constants.ts\";\nexport { ApplyPatchError } from \"./errors.ts\";\nexport { default, isOpenAIGptModel, registerApplyPatchExtension } from \"./extension.ts\";\nexport { parsePatch } from \"./parser.ts\";\nexport {\n\tclearApplyPatchRenderState,\n\tdisplayPath,\n\tformatInFlightCallText,\n\tformatPatchPreview,\n\tgetApplyPatchRenderState,\n\tPATCH_PREVIEW_MAX_CHARS,\n\tPATCH_PREVIEW_MAX_LINES,\n\trenderPatchPreview,\n\ttruncatePreview,\n} from \"./preview-format.ts\";\nexport { seekSequence } from \"./seek-sequence.ts\";\nexport { StreamingPatchParser } from \"./streaming-parser.ts\";\nexport { extractPatchedPaths, normalizePatchText, stripHeredoc } from \"./text.ts\";\nexport { createApplyPatchTool } from \"./tool.ts\";\nexport type {\n\tApplyPatchExtensionAPI,\n\tApplyPatchFailure,\n\tApplyPatchParams,\n\tApplyPatchPreview,\n\tApplyPatchProgress,\n\tApplyPatchProgressCallback,\n\tApplyPatchRecoveryInstructions,\n\tApplyPatchRenderState,\n\tApplyPatchResult,\n\tApplyPatchToolDefinition,\n\tApplyPatchToolDetails,\n\tAtomicWriteOperations,\n\tFreeformToolFormat,\n\tParsedPatch,\n\tPatchChunk,\n} from \"./types.ts\";\n"]}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAC5G,OAAO,EACN,gCAAgC,EAChC,wBAAwB,EACxB,kBAAkB,EAClB,6BAA6B,GAC7B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AACxF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACN,0BAA0B,EAC1B,WAAW,EACX,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EACvB,kBAAkB,EAClB,eAAe,GACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,YAAY,EACX,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,0BAA0B,EAC1B,8BAA8B,EAC9B,qBAAqB,EACrB,gBAAgB,EAChB,wBAAwB,EACxB,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,WAAW,EACX,UAAU,GACV,MAAM,YAAY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/params.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAa5E","sourcesContent":["import type { ApplyPatchParams } from \"./types.ts\";\n\nexport function normalizeApplyPatchArguments(args: unknown): ApplyPatchParams {\n\tif (typeof args === \"string\") {\n\t\treturn { input: args };\n\t}\n\n\tif (args && typeof args === \"object\" && \"input\" in args) {\n\t\tconst input = args.input;\n\t\tif (typeof input === \"string\") {\n\t\t\treturn { input };\n\t\t}\n\t}\n\n\treturn { input: \"\" };\n}\n"]}
1
+ {"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/params.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAa5E"}
@@ -1 +1 @@
1
- {"version":3,"file":"params.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/params.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,4BAA4B,CAAC,IAAa,EAAoB;IAC7E,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACxB,CAAC;IAED,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACzD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC/B,OAAO,EAAE,KAAK,EAAE,CAAC;QAClB,CAAC;IACF,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAAA,CACrB","sourcesContent":["import type { ApplyPatchParams } from \"./types.ts\";\n\nexport function normalizeApplyPatchArguments(args: unknown): ApplyPatchParams {\n\tif (typeof args === \"string\") {\n\t\treturn { input: args };\n\t}\n\n\tif (args && typeof args === \"object\" && \"input\" in args) {\n\t\tconst input = args.input;\n\t\tif (typeof input === \"string\") {\n\t\t\treturn { input };\n\t\t}\n\t}\n\n\treturn { input: \"\" };\n}\n"]}
1
+ {"version":3,"file":"params.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/params.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,4BAA4B,CAAC,IAAa;IACzD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACxB,CAAC;IAED,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACzD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC/B,OAAO,EAAE,KAAK,EAAE,CAAC;QAClB,CAAC;IACF,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACtB,CAAC","sourcesContent":["import type { ApplyPatchParams } from \"./types.ts\";\n\nexport function normalizeApplyPatchArguments(args: unknown): ApplyPatchParams {\n\tif (typeof args === \"string\") {\n\t\treturn { input: args };\n\t}\n\n\tif (args && typeof args === \"object\" && \"input\" in args) {\n\t\tconst input = args.input;\n\t\tif (typeof input === \"string\") {\n\t\t\treturn { input };\n\t\t}\n\t}\n\n\treturn { input: \"\" };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/parser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,YAAY,CAAC;AAwH1D,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,EAAE,CAsC3D","sourcesContent":["import { normalizePatchText, stripHeredoc } from \"./text.ts\";\nimport type { ParsedPatch, PatchChunk } from \"./types.ts\";\n\nconst BEGIN_PATCH_MARKER = \"*** Begin Patch\";\nconst END_PATCH_MARKER = \"*** End Patch\";\nconst ADD_FILE_MARKER = \"*** Add File: \";\nconst DELETE_FILE_MARKER = \"*** Delete File: \";\nconst UPDATE_FILE_MARKER = \"*** Update File: \";\nconst MOVE_TO_MARKER = \"*** Move to: \";\nconst EOF_MARKER = \"*** End of File\";\n\nfunction parseAddHunk(lines: string[], index: number, endIndex: number): [ParsedPatch, number] {\n\tconst filePath = (lines[index] ?? \"\").slice(ADD_FILE_MARKER.length);\n\tconst contentLines: string[] = [];\n\tlet nextIndex = index + 1;\n\twhile (nextIndex < endIndex) {\n\t\tconst nextLine = lines[nextIndex] ?? \"\";\n\t\tif (nextLine.startsWith(\"*** \")) break;\n\t\tif (!nextLine.startsWith(\"+\")) throw new Error(\"Invalid patch format: Add File lines must start with '+'\");\n\t\tcontentLines.push(nextLine.slice(1));\n\t\tnextIndex++;\n\t}\n\tconst content = contentLines.length === 0 ? \"\" : `${contentLines.join(\"\\n\")}\\n`;\n\treturn [{ type: \"add\", filePath, content }, nextIndex];\n}\n\nfunction collectChangeContexts(lines: string[], index: number, endIndex: number): [string[], number] {\n\tconst changeContexts: string[] = [];\n\tlet nextIndex = index;\n\twhile (nextIndex < endIndex) {\n\t\tconst contextLine = lines[nextIndex] ?? \"\";\n\t\tif (contextLine === \"@@\") {\n\t\t\tnextIndex++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (contextLine.startsWith(\"@@ \")) {\n\t\t\tchangeContexts.push(contextLine.slice(\"@@ \".length));\n\t\t\tnextIndex++;\n\t\t\tcontinue;\n\t\t}\n\t\tbreak;\n\t}\n\treturn [changeContexts, nextIndex];\n}\n\nfunction parseChunkLines(\n\tlines: string[],\n\tindex: number,\n\tendIndex: number,\n): [Omit<PatchChunk, \"changeContexts\">, number] {\n\tconst oldLines: string[] = [];\n\tconst newLines: string[] = [];\n\tlet isEndOfFile = false;\n\tlet parsedLines = 0;\n\tlet nextIndex = index;\n\twhile (nextIndex < endIndex) {\n\t\tconst hunkLine = lines[nextIndex] ?? \"\";\n\t\tif (hunkLine === EOF_MARKER) {\n\t\t\tif (parsedLines === 0) throw new Error(\"Update hunk does not contain any lines\");\n\t\t\tisEndOfFile = true;\n\t\t\tnextIndex++;\n\t\t\tbreak;\n\t\t}\n\t\tif (hunkLine.startsWith(\"@@\") || hunkLine.startsWith(\"*** \")) break;\n\t\tconst prefix = hunkLine[0];\n\t\tconst value = hunkLine.slice(1);\n\t\tif (prefix === undefined) {\n\t\t\toldLines.push(\"\");\n\t\t\tnewLines.push(\"\");\n\t\t} else if (prefix === \" \") {\n\t\t\toldLines.push(value);\n\t\t\tnewLines.push(value);\n\t\t} else if (prefix === \"-\") {\n\t\t\toldLines.push(value);\n\t\t} else if (prefix === \"+\") {\n\t\t\tnewLines.push(value);\n\t\t} else if (parsedLines > 0) {\n\t\t\tbreak;\n\t\t} else {\n\t\t\tthrow new Error(\n\t\t\t\t`Unexpected line found in update hunk: '${hunkLine}'. Every line should start with ' ' (context line), '+' (added line), or '-' (removed line)`,\n\t\t\t);\n\t\t}\n\t\tparsedLines++;\n\t\tnextIndex++;\n\t}\n\tif (parsedLines === 0) throw new Error(\"Update hunk does not contain any lines\");\n\treturn [{ oldLines, newLines, isEndOfFile }, nextIndex];\n}\n\nfunction parseUpdateHunk(lines: string[], index: number, endIndex: number): [ParsedPatch, number] {\n\tconst filePath = (lines[index] ?? \"\").slice(UPDATE_FILE_MARKER.length);\n\tlet nextIndex = index + 1;\n\tlet movePath: string | undefined;\n\tif ((lines[nextIndex] ?? \"\").startsWith(MOVE_TO_MARKER)) {\n\t\tmovePath = (lines[nextIndex] ?? \"\").slice(MOVE_TO_MARKER.length);\n\t\tnextIndex++;\n\t}\n\tconst chunks: PatchChunk[] = [];\n\twhile (nextIndex < endIndex) {\n\t\tconst nextLine = lines[nextIndex] ?? \"\";\n\t\tif (nextLine.trim() === \"\") {\n\t\t\tnextIndex++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (nextLine.startsWith(\"*** \")) break;\n\t\tif (!nextLine.startsWith(\"@@\") && chunks.length > 0) {\n\t\t\tthrow new Error(`Expected update hunk to start with a @@ context marker, got: '${nextLine}'`);\n\t\t}\n\t\tconst contextResult = nextLine.startsWith(\"@@\")\n\t\t\t? collectChangeContexts(lines, nextIndex, endIndex)\n\t\t\t: [[], nextIndex];\n\t\tconst [changeContexts, afterContexts] = contextResult as [string[], number];\n\t\tconst [chunk, afterChunk] = parseChunkLines(lines, afterContexts, endIndex);\n\t\tchunks.push({ changeContexts, ...chunk });\n\t\tnextIndex = afterChunk;\n\t}\n\tif (chunks.length === 0 && !movePath) throw new Error(`Update file hunk for path '${filePath}' is empty`);\n\treturn [{ type: \"update\", filePath, movePath, chunks }, nextIndex];\n}\n\nexport function parsePatch(patchText: string): ParsedPatch[] {\n\tconst normalized = stripHeredoc(normalizePatchText(patchText).trim()).trim();\n\tconst lines = normalized.split(\"\\n\");\n\tconst endIndex = lines[lines.length - 1]?.trim() === END_PATCH_MARKER ? lines.length - 1 : -1;\n\tif (lines[0]?.trim() !== BEGIN_PATCH_MARKER || endIndex < 0) {\n\t\tthrow new Error(\"Invalid patch format: expected *** Begin Patch ... *** End Patch envelope\");\n\t}\n\n\tconst hunks: ParsedPatch[] = [];\n\tlet index = 1;\n\twhile (index < endIndex) {\n\t\tconst line = lines[index] ?? \"\";\n\t\tif (!line.startsWith(\"*** \")) {\n\t\t\tindex++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (line.startsWith(ADD_FILE_MARKER)) {\n\t\t\tconst [hunk, nextIndex] = parseAddHunk(lines, index, endIndex);\n\t\t\thunks.push(hunk);\n\t\t\tindex = nextIndex;\n\t\t\tcontinue;\n\t\t}\n\t\tif (line.startsWith(DELETE_FILE_MARKER)) {\n\t\t\thunks.push({ type: \"delete\", filePath: line.slice(DELETE_FILE_MARKER.length) });\n\t\t\tindex++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (line.startsWith(UPDATE_FILE_MARKER)) {\n\t\t\tconst [hunk, nextIndex] = parseUpdateHunk(lines, index, endIndex);\n\t\t\thunks.push(hunk);\n\t\t\tindex = nextIndex;\n\t\t\tcontinue;\n\t\t}\n\t\tthrow new Error(\n\t\t\t`'${line}' is not a valid hunk header. Valid hunk headers: '*** Add File: {path}', '*** Delete File: {path}', '*** Update File: {path}'`,\n\t\t);\n\t}\n\treturn hunks;\n}\n"]}
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/parser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,YAAY,CAAC;AAwH1D,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,EAAE,CAsC3D"}
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/parser.ts"],"names":[],"mappings":"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","sourcesContent":["import { normalizePatchText, stripHeredoc } from \"./text.ts\";\nimport type { ParsedPatch, PatchChunk } from \"./types.ts\";\n\nconst BEGIN_PATCH_MARKER = \"*** Begin Patch\";\nconst END_PATCH_MARKER = \"*** End Patch\";\nconst ADD_FILE_MARKER = \"*** Add File: \";\nconst DELETE_FILE_MARKER = \"*** Delete File: \";\nconst UPDATE_FILE_MARKER = \"*** Update File: \";\nconst MOVE_TO_MARKER = \"*** Move to: \";\nconst EOF_MARKER = \"*** End of File\";\n\nfunction parseAddHunk(lines: string[], index: number, endIndex: number): [ParsedPatch, number] {\n\tconst filePath = (lines[index] ?? \"\").slice(ADD_FILE_MARKER.length);\n\tconst contentLines: string[] = [];\n\tlet nextIndex = index + 1;\n\twhile (nextIndex < endIndex) {\n\t\tconst nextLine = lines[nextIndex] ?? \"\";\n\t\tif (nextLine.startsWith(\"*** \")) break;\n\t\tif (!nextLine.startsWith(\"+\")) throw new Error(\"Invalid patch format: Add File lines must start with '+'\");\n\t\tcontentLines.push(nextLine.slice(1));\n\t\tnextIndex++;\n\t}\n\tconst content = contentLines.length === 0 ? \"\" : `${contentLines.join(\"\\n\")}\\n`;\n\treturn [{ type: \"add\", filePath, content }, nextIndex];\n}\n\nfunction collectChangeContexts(lines: string[], index: number, endIndex: number): [string[], number] {\n\tconst changeContexts: string[] = [];\n\tlet nextIndex = index;\n\twhile (nextIndex < endIndex) {\n\t\tconst contextLine = lines[nextIndex] ?? \"\";\n\t\tif (contextLine === \"@@\") {\n\t\t\tnextIndex++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (contextLine.startsWith(\"@@ \")) {\n\t\t\tchangeContexts.push(contextLine.slice(\"@@ \".length));\n\t\t\tnextIndex++;\n\t\t\tcontinue;\n\t\t}\n\t\tbreak;\n\t}\n\treturn [changeContexts, nextIndex];\n}\n\nfunction parseChunkLines(\n\tlines: string[],\n\tindex: number,\n\tendIndex: number,\n): [Omit<PatchChunk, \"changeContexts\">, number] {\n\tconst oldLines: string[] = [];\n\tconst newLines: string[] = [];\n\tlet isEndOfFile = false;\n\tlet parsedLines = 0;\n\tlet nextIndex = index;\n\twhile (nextIndex < endIndex) {\n\t\tconst hunkLine = lines[nextIndex] ?? \"\";\n\t\tif (hunkLine === EOF_MARKER) {\n\t\t\tif (parsedLines === 0) throw new Error(\"Update hunk does not contain any lines\");\n\t\t\tisEndOfFile = true;\n\t\t\tnextIndex++;\n\t\t\tbreak;\n\t\t}\n\t\tif (hunkLine.startsWith(\"@@\") || hunkLine.startsWith(\"*** \")) break;\n\t\tconst prefix = hunkLine[0];\n\t\tconst value = hunkLine.slice(1);\n\t\tif (prefix === undefined) {\n\t\t\toldLines.push(\"\");\n\t\t\tnewLines.push(\"\");\n\t\t} else if (prefix === \" \") {\n\t\t\toldLines.push(value);\n\t\t\tnewLines.push(value);\n\t\t} else if (prefix === \"-\") {\n\t\t\toldLines.push(value);\n\t\t} else if (prefix === \"+\") {\n\t\t\tnewLines.push(value);\n\t\t} else if (parsedLines > 0) {\n\t\t\tbreak;\n\t\t} else {\n\t\t\tthrow new Error(\n\t\t\t\t`Unexpected line found in update hunk: '${hunkLine}'. Every line should start with ' ' (context line), '+' (added line), or '-' (removed line)`,\n\t\t\t);\n\t\t}\n\t\tparsedLines++;\n\t\tnextIndex++;\n\t}\n\tif (parsedLines === 0) throw new Error(\"Update hunk does not contain any lines\");\n\treturn [{ oldLines, newLines, isEndOfFile }, nextIndex];\n}\n\nfunction parseUpdateHunk(lines: string[], index: number, endIndex: number): [ParsedPatch, number] {\n\tconst filePath = (lines[index] ?? \"\").slice(UPDATE_FILE_MARKER.length);\n\tlet nextIndex = index + 1;\n\tlet movePath: string | undefined;\n\tif ((lines[nextIndex] ?? \"\").startsWith(MOVE_TO_MARKER)) {\n\t\tmovePath = (lines[nextIndex] ?? \"\").slice(MOVE_TO_MARKER.length);\n\t\tnextIndex++;\n\t}\n\tconst chunks: PatchChunk[] = [];\n\twhile (nextIndex < endIndex) {\n\t\tconst nextLine = lines[nextIndex] ?? \"\";\n\t\tif (nextLine.trim() === \"\") {\n\t\t\tnextIndex++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (nextLine.startsWith(\"*** \")) break;\n\t\tif (!nextLine.startsWith(\"@@\") && chunks.length > 0) {\n\t\t\tthrow new Error(`Expected update hunk to start with a @@ context marker, got: '${nextLine}'`);\n\t\t}\n\t\tconst contextResult = nextLine.startsWith(\"@@\")\n\t\t\t? collectChangeContexts(lines, nextIndex, endIndex)\n\t\t\t: [[], nextIndex];\n\t\tconst [changeContexts, afterContexts] = contextResult as [string[], number];\n\t\tconst [chunk, afterChunk] = parseChunkLines(lines, afterContexts, endIndex);\n\t\tchunks.push({ changeContexts, ...chunk });\n\t\tnextIndex = afterChunk;\n\t}\n\tif (chunks.length === 0 && !movePath) throw new Error(`Update file hunk for path '${filePath}' is empty`);\n\treturn [{ type: \"update\", filePath, movePath, chunks }, nextIndex];\n}\n\nexport function parsePatch(patchText: string): ParsedPatch[] {\n\tconst normalized = stripHeredoc(normalizePatchText(patchText).trim()).trim();\n\tconst lines = normalized.split(\"\\n\");\n\tconst endIndex = lines[lines.length - 1]?.trim() === END_PATCH_MARKER ? lines.length - 1 : -1;\n\tif (lines[0]?.trim() !== BEGIN_PATCH_MARKER || endIndex < 0) {\n\t\tthrow new Error(\"Invalid patch format: expected *** Begin Patch ... *** End Patch envelope\");\n\t}\n\n\tconst hunks: ParsedPatch[] = [];\n\tlet index = 1;\n\twhile (index < endIndex) {\n\t\tconst line = lines[index] ?? \"\";\n\t\tif (!line.startsWith(\"*** \")) {\n\t\t\tindex++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (line.startsWith(ADD_FILE_MARKER)) {\n\t\t\tconst [hunk, nextIndex] = parseAddHunk(lines, index, endIndex);\n\t\t\thunks.push(hunk);\n\t\t\tindex = nextIndex;\n\t\t\tcontinue;\n\t\t}\n\t\tif (line.startsWith(DELETE_FILE_MARKER)) {\n\t\t\thunks.push({ type: \"delete\", filePath: line.slice(DELETE_FILE_MARKER.length) });\n\t\t\tindex++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (line.startsWith(UPDATE_FILE_MARKER)) {\n\t\t\tconst [hunk, nextIndex] = parseUpdateHunk(lines, index, endIndex);\n\t\t\thunks.push(hunk);\n\t\t\tindex = nextIndex;\n\t\t\tcontinue;\n\t\t}\n\t\tthrow new Error(\n\t\t\t`'${line}' is not a valid hunk header. Valid hunk headers: '*** Add File: {path}', '*** Delete File: {path}', '*** Update File: {path}'`,\n\t\t);\n\t}\n\treturn hunks;\n}\n"]}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/parser.ts"],"names":[],"mappings":"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","sourcesContent":["import { normalizePatchText, stripHeredoc } from \"./text.ts\";\nimport type { ParsedPatch, PatchChunk } from \"./types.ts\";\n\nconst BEGIN_PATCH_MARKER = \"*** Begin Patch\";\nconst END_PATCH_MARKER = \"*** End Patch\";\nconst ADD_FILE_MARKER = \"*** Add File: \";\nconst DELETE_FILE_MARKER = \"*** Delete File: \";\nconst UPDATE_FILE_MARKER = \"*** Update File: \";\nconst MOVE_TO_MARKER = \"*** Move to: \";\nconst EOF_MARKER = \"*** End of File\";\n\nfunction parseAddHunk(lines: string[], index: number, endIndex: number): [ParsedPatch, number] {\n\tconst filePath = (lines[index] ?? \"\").slice(ADD_FILE_MARKER.length);\n\tconst contentLines: string[] = [];\n\tlet nextIndex = index + 1;\n\twhile (nextIndex < endIndex) {\n\t\tconst nextLine = lines[nextIndex] ?? \"\";\n\t\tif (nextLine.startsWith(\"*** \")) break;\n\t\tif (!nextLine.startsWith(\"+\")) throw new Error(\"Invalid patch format: Add File lines must start with '+'\");\n\t\tcontentLines.push(nextLine.slice(1));\n\t\tnextIndex++;\n\t}\n\tconst content = contentLines.length === 0 ? \"\" : `${contentLines.join(\"\\n\")}\\n`;\n\treturn [{ type: \"add\", filePath, content }, nextIndex];\n}\n\nfunction collectChangeContexts(lines: string[], index: number, endIndex: number): [string[], number] {\n\tconst changeContexts: string[] = [];\n\tlet nextIndex = index;\n\twhile (nextIndex < endIndex) {\n\t\tconst contextLine = lines[nextIndex] ?? \"\";\n\t\tif (contextLine === \"@@\") {\n\t\t\tnextIndex++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (contextLine.startsWith(\"@@ \")) {\n\t\t\tchangeContexts.push(contextLine.slice(\"@@ \".length));\n\t\t\tnextIndex++;\n\t\t\tcontinue;\n\t\t}\n\t\tbreak;\n\t}\n\treturn [changeContexts, nextIndex];\n}\n\nfunction parseChunkLines(\n\tlines: string[],\n\tindex: number,\n\tendIndex: number,\n): [Omit<PatchChunk, \"changeContexts\">, number] {\n\tconst oldLines: string[] = [];\n\tconst newLines: string[] = [];\n\tlet isEndOfFile = false;\n\tlet parsedLines = 0;\n\tlet nextIndex = index;\n\twhile (nextIndex < endIndex) {\n\t\tconst hunkLine = lines[nextIndex] ?? \"\";\n\t\tif (hunkLine === EOF_MARKER) {\n\t\t\tif (parsedLines === 0) throw new Error(\"Update hunk does not contain any lines\");\n\t\t\tisEndOfFile = true;\n\t\t\tnextIndex++;\n\t\t\tbreak;\n\t\t}\n\t\tif (hunkLine.startsWith(\"@@\") || hunkLine.startsWith(\"*** \")) break;\n\t\tconst prefix = hunkLine[0];\n\t\tconst value = hunkLine.slice(1);\n\t\tif (prefix === undefined) {\n\t\t\toldLines.push(\"\");\n\t\t\tnewLines.push(\"\");\n\t\t} else if (prefix === \" \") {\n\t\t\toldLines.push(value);\n\t\t\tnewLines.push(value);\n\t\t} else if (prefix === \"-\") {\n\t\t\toldLines.push(value);\n\t\t} else if (prefix === \"+\") {\n\t\t\tnewLines.push(value);\n\t\t} else if (parsedLines > 0) {\n\t\t\tbreak;\n\t\t} else {\n\t\t\tthrow new Error(\n\t\t\t\t`Unexpected line found in update hunk: '${hunkLine}'. Every line should start with ' ' (context line), '+' (added line), or '-' (removed line)`,\n\t\t\t);\n\t\t}\n\t\tparsedLines++;\n\t\tnextIndex++;\n\t}\n\tif (parsedLines === 0) throw new Error(\"Update hunk does not contain any lines\");\n\treturn [{ oldLines, newLines, isEndOfFile }, nextIndex];\n}\n\nfunction parseUpdateHunk(lines: string[], index: number, endIndex: number): [ParsedPatch, number] {\n\tconst filePath = (lines[index] ?? \"\").slice(UPDATE_FILE_MARKER.length);\n\tlet nextIndex = index + 1;\n\tlet movePath: string | undefined;\n\tif ((lines[nextIndex] ?? \"\").startsWith(MOVE_TO_MARKER)) {\n\t\tmovePath = (lines[nextIndex] ?? \"\").slice(MOVE_TO_MARKER.length);\n\t\tnextIndex++;\n\t}\n\tconst chunks: PatchChunk[] = [];\n\twhile (nextIndex < endIndex) {\n\t\tconst nextLine = lines[nextIndex] ?? \"\";\n\t\tif (nextLine.trim() === \"\") {\n\t\t\tnextIndex++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (nextLine.startsWith(\"*** \")) break;\n\t\tif (!nextLine.startsWith(\"@@\") && chunks.length > 0) {\n\t\t\tthrow new Error(`Expected update hunk to start with a @@ context marker, got: '${nextLine}'`);\n\t\t}\n\t\tconst contextResult = nextLine.startsWith(\"@@\")\n\t\t\t? collectChangeContexts(lines, nextIndex, endIndex)\n\t\t\t: [[], nextIndex];\n\t\tconst [changeContexts, afterContexts] = contextResult as [string[], number];\n\t\tconst [chunk, afterChunk] = parseChunkLines(lines, afterContexts, endIndex);\n\t\tchunks.push({ changeContexts, ...chunk });\n\t\tnextIndex = afterChunk;\n\t}\n\tif (chunks.length === 0 && !movePath) throw new Error(`Update file hunk for path '${filePath}' is empty`);\n\treturn [{ type: \"update\", filePath, movePath, chunks }, nextIndex];\n}\n\nexport function parsePatch(patchText: string): ParsedPatch[] {\n\tconst normalized = stripHeredoc(normalizePatchText(patchText).trim()).trim();\n\tconst lines = normalized.split(\"\\n\");\n\tconst endIndex = lines[lines.length - 1]?.trim() === END_PATCH_MARKER ? lines.length - 1 : -1;\n\tif (lines[0]?.trim() !== BEGIN_PATCH_MARKER || endIndex < 0) {\n\t\tthrow new Error(\"Invalid patch format: expected *** Begin Patch ... *** End Patch envelope\");\n\t}\n\n\tconst hunks: ParsedPatch[] = [];\n\tlet index = 1;\n\twhile (index < endIndex) {\n\t\tconst line = lines[index] ?? \"\";\n\t\tif (!line.startsWith(\"*** \")) {\n\t\t\tindex++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (line.startsWith(ADD_FILE_MARKER)) {\n\t\t\tconst [hunk, nextIndex] = parseAddHunk(lines, index, endIndex);\n\t\t\thunks.push(hunk);\n\t\t\tindex = nextIndex;\n\t\t\tcontinue;\n\t\t}\n\t\tif (line.startsWith(DELETE_FILE_MARKER)) {\n\t\t\thunks.push({ type: \"delete\", filePath: line.slice(DELETE_FILE_MARKER.length) });\n\t\t\tindex++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (line.startsWith(UPDATE_FILE_MARKER)) {\n\t\t\tconst [hunk, nextIndex] = parseUpdateHunk(lines, index, endIndex);\n\t\t\thunks.push(hunk);\n\t\t\tindex = nextIndex;\n\t\t\tcontinue;\n\t\t}\n\t\tthrow new Error(\n\t\t\t`'${line}' is not a valid hunk header. Valid hunk headers: '*** Add File: {path}', '*** Delete File: {path}', '*** Update File: {path}'`,\n\t\t);\n\t}\n\treturn hunks;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"patch-diff.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/patch-diff.ts"],"names":[],"mappings":"AAEA,wBAAgB,eAAe,CAC9B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GAChB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAkClD","sourcesContent":["import * as Diff from \"diff\";\n\nexport function createPatchDiff(\n\toldContent: string,\n\tnewContent: string,\n): { diff: string; added: number; removed: number } {\n\tconst parts = Diff.diffLines(oldContent, newContent);\n\tconst oldLines = oldContent.split(\"\\n\");\n\tconst newLines = newContent.split(\"\\n\");\n\tconst lineNumWidth = String(Math.max(oldLines.length, newLines.length)).length;\n\tconst output: string[] = [];\n\tlet oldLineNum = 1;\n\tlet newLineNum = 1;\n\tlet added = 0;\n\tlet removed = 0;\n\n\tfor (const part of parts) {\n\t\tconst rawLines = part.value.split(\"\\n\");\n\t\tif (rawLines[rawLines.length - 1] === \"\") rawLines.pop();\n\t\tfor (const line of rawLines) {\n\t\t\tif (part.added) {\n\t\t\t\toutput.push(`+${String(newLineNum).padStart(lineNumWidth, \" \")} ${line}`);\n\t\t\t\tnewLineNum++;\n\t\t\t\tadded++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (part.removed) {\n\t\t\t\toutput.push(`-${String(oldLineNum).padStart(lineNumWidth, \" \")} ${line}`);\n\t\t\t\toldLineNum++;\n\t\t\t\tremoved++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\toutput.push(` ${String(oldLineNum).padStart(lineNumWidth, \" \")} ${line}`);\n\t\t\toldLineNum++;\n\t\t\tnewLineNum++;\n\t\t}\n\t}\n\n\treturn { diff: output.join(\"\\n\"), added, removed };\n}\n"]}
1
+ {"version":3,"file":"patch-diff.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/patch-diff.ts"],"names":[],"mappings":"AAEA,wBAAgB,eAAe,CAC9B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GAChB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAkClD"}
@@ -1 +1 @@
1
- {"version":3,"file":"patch-diff.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/patch-diff.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,MAAM,UAAU,eAAe,CAC9B,UAAkB,EAClB,UAAkB,EACiC;IACnD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/E,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE;YAAE,QAAQ,CAAC,GAAG,EAAE,CAAC;QACzD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAChB,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBAC1E,UAAU,EAAE,CAAC;gBACb,KAAK,EAAE,CAAC;gBACR,SAAS;YACV,CAAC;YACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClB,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBAC1E,UAAU,EAAE,CAAC;gBACb,OAAO,EAAE,CAAC;gBACV,SAAS;YACV,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YAC1E,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,CAAC;QACd,CAAC;IACF,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAAA,CACnD","sourcesContent":["import * as Diff from \"diff\";\n\nexport function createPatchDiff(\n\toldContent: string,\n\tnewContent: string,\n): { diff: string; added: number; removed: number } {\n\tconst parts = Diff.diffLines(oldContent, newContent);\n\tconst oldLines = oldContent.split(\"\\n\");\n\tconst newLines = newContent.split(\"\\n\");\n\tconst lineNumWidth = String(Math.max(oldLines.length, newLines.length)).length;\n\tconst output: string[] = [];\n\tlet oldLineNum = 1;\n\tlet newLineNum = 1;\n\tlet added = 0;\n\tlet removed = 0;\n\n\tfor (const part of parts) {\n\t\tconst rawLines = part.value.split(\"\\n\");\n\t\tif (rawLines[rawLines.length - 1] === \"\") rawLines.pop();\n\t\tfor (const line of rawLines) {\n\t\t\tif (part.added) {\n\t\t\t\toutput.push(`+${String(newLineNum).padStart(lineNumWidth, \" \")} ${line}`);\n\t\t\t\tnewLineNum++;\n\t\t\t\tadded++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (part.removed) {\n\t\t\t\toutput.push(`-${String(oldLineNum).padStart(lineNumWidth, \" \")} ${line}`);\n\t\t\t\toldLineNum++;\n\t\t\t\tremoved++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\toutput.push(` ${String(oldLineNum).padStart(lineNumWidth, \" \")} ${line}`);\n\t\t\toldLineNum++;\n\t\t\tnewLineNum++;\n\t\t}\n\t}\n\n\treturn { diff: output.join(\"\\n\"), added, removed };\n}\n"]}
1
+ {"version":3,"file":"patch-diff.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/patch-diff.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,MAAM,UAAU,eAAe,CAC9B,UAAkB,EAClB,UAAkB;IAElB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/E,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE;YAAE,QAAQ,CAAC,GAAG,EAAE,CAAC;QACzD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAChB,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBAC1E,UAAU,EAAE,CAAC;gBACb,KAAK,EAAE,CAAC;gBACR,SAAS;YACV,CAAC;YACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClB,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBAC1E,UAAU,EAAE,CAAC;gBACb,OAAO,EAAE,CAAC;gBACV,SAAS;YACV,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YAC1E,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,CAAC;QACd,CAAC;IACF,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AACpD,CAAC","sourcesContent":["import * as Diff from \"diff\";\n\nexport function createPatchDiff(\n\toldContent: string,\n\tnewContent: string,\n): { diff: string; added: number; removed: number } {\n\tconst parts = Diff.diffLines(oldContent, newContent);\n\tconst oldLines = oldContent.split(\"\\n\");\n\tconst newLines = newContent.split(\"\\n\");\n\tconst lineNumWidth = String(Math.max(oldLines.length, newLines.length)).length;\n\tconst output: string[] = [];\n\tlet oldLineNum = 1;\n\tlet newLineNum = 1;\n\tlet added = 0;\n\tlet removed = 0;\n\n\tfor (const part of parts) {\n\t\tconst rawLines = part.value.split(\"\\n\");\n\t\tif (rawLines[rawLines.length - 1] === \"\") rawLines.pop();\n\t\tfor (const line of rawLines) {\n\t\t\tif (part.added) {\n\t\t\t\toutput.push(`+${String(newLineNum).padStart(lineNumWidth, \" \")} ${line}`);\n\t\t\t\tnewLineNum++;\n\t\t\t\tadded++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (part.removed) {\n\t\t\t\toutput.push(`-${String(oldLineNum).padStart(lineNumWidth, \" \")} ${line}`);\n\t\t\t\toldLineNum++;\n\t\t\t\tremoved++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\toutput.push(` ${String(oldLineNum).padStart(lineNumWidth, \" \")} ${line}`);\n\t\t\toldLineNum++;\n\t\t\tnewLineNum++;\n\t\t}\n\t}\n\n\treturn { diff: output.join(\"\\n\"), added, removed };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"patch-replace.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/patch-replace.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAU7C,wBAAgB,aAAa,CAC5B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,UAAU,EAAE,GAClB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CA2CnC","sourcesContent":["import { seekSequenceWithFuzz } from \"./seek-sequence.ts\";\nimport { normalizePatchText } from \"./text.ts\";\nimport type { PatchChunk } from \"./types.ts\";\n\nfunction splitFileLines(content: string): string[] {\n\tconst lines = normalizePatchText(content).split(\"\\n\");\n\tif (lines[lines.length - 1] === \"\") {\n\t\tlines.pop();\n\t}\n\treturn lines;\n}\n\nexport function replaceChunks(\n\tcontent: string,\n\tfilePath: string,\n\tchunks: PatchChunk[],\n): { content: string; fuzz: number } {\n\tconst originalLines = splitFileLines(content);\n\tconst replacements: { start: number; oldLength: number; newLines: string[] }[] = [];\n\tlet lineIndex = 0;\n\tlet fuzz = 0;\n\n\tfor (const chunk of chunks) {\n\t\tfor (const changeContext of chunk.changeContexts) {\n\t\t\tconst contextIndex = seekSequenceWithFuzz(originalLines, [changeContext], lineIndex, false);\n\t\t\tif (contextIndex === undefined) throw new Error(`Failed to find context '${changeContext}' in ${filePath}`);\n\t\t\tfuzz += contextIndex.fuzz;\n\t\t\tlineIndex = contextIndex.index + 1;\n\t\t}\n\n\t\tif (chunk.oldLines.length === 0) {\n\t\t\tconst insertionIndex =\n\t\t\t\toriginalLines[originalLines.length - 1] === \"\" ? originalLines.length - 1 : originalLines.length;\n\t\t\treplacements.push({ start: insertionIndex, oldLength: 0, newLines: chunk.newLines });\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet pattern = chunk.oldLines;\n\t\tlet newLines = chunk.newLines;\n\t\tlet foundAt = seekSequenceWithFuzz(originalLines, pattern, lineIndex, chunk.isEndOfFile);\n\t\tif (foundAt === undefined && pattern[pattern.length - 1] === \"\") {\n\t\t\tpattern = pattern.slice(0, -1);\n\t\t\tif (newLines[newLines.length - 1] === \"\") newLines = newLines.slice(0, -1);\n\t\t\tfoundAt = seekSequenceWithFuzz(originalLines, pattern, lineIndex, chunk.isEndOfFile);\n\t\t}\n\n\t\tif (foundAt === undefined)\n\t\t\tthrow new Error(`Failed to find expected lines in ${filePath}:\\n${chunk.oldLines.join(\"\\n\")}`);\n\t\tfuzz += foundAt.fuzz;\n\t\treplacements.push({ start: foundAt.index, oldLength: pattern.length, newLines });\n\t\tlineIndex = foundAt.index + pattern.length;\n\t}\n\n\tconst nextLines = [...originalLines];\n\tfor (const replacement of replacements.sort((left, right) => right.start - left.start)) {\n\t\tnextLines.splice(replacement.start, replacement.oldLength, ...replacement.newLines);\n\t}\n\tnextLines.push(\"\");\n\treturn { content: nextLines.join(\"\\n\"), fuzz };\n}\n"]}
1
+ {"version":3,"file":"patch-replace.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/patch-replace.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAU7C,wBAAgB,aAAa,CAC5B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,UAAU,EAAE,GAClB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CA2CnC"}
@@ -1 +1 @@
1
- {"version":3,"file":"patch-replace.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/patch-replace.ts"],"names":[],"mappings":"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","sourcesContent":["import { seekSequenceWithFuzz } from \"./seek-sequence.ts\";\nimport { normalizePatchText } from \"./text.ts\";\nimport type { PatchChunk } from \"./types.ts\";\n\nfunction splitFileLines(content: string): string[] {\n\tconst lines = normalizePatchText(content).split(\"\\n\");\n\tif (lines[lines.length - 1] === \"\") {\n\t\tlines.pop();\n\t}\n\treturn lines;\n}\n\nexport function replaceChunks(\n\tcontent: string,\n\tfilePath: string,\n\tchunks: PatchChunk[],\n): { content: string; fuzz: number } {\n\tconst originalLines = splitFileLines(content);\n\tconst replacements: { start: number; oldLength: number; newLines: string[] }[] = [];\n\tlet lineIndex = 0;\n\tlet fuzz = 0;\n\n\tfor (const chunk of chunks) {\n\t\tfor (const changeContext of chunk.changeContexts) {\n\t\t\tconst contextIndex = seekSequenceWithFuzz(originalLines, [changeContext], lineIndex, false);\n\t\t\tif (contextIndex === undefined) throw new Error(`Failed to find context '${changeContext}' in ${filePath}`);\n\t\t\tfuzz += contextIndex.fuzz;\n\t\t\tlineIndex = contextIndex.index + 1;\n\t\t}\n\n\t\tif (chunk.oldLines.length === 0) {\n\t\t\tconst insertionIndex =\n\t\t\t\toriginalLines[originalLines.length - 1] === \"\" ? originalLines.length - 1 : originalLines.length;\n\t\t\treplacements.push({ start: insertionIndex, oldLength: 0, newLines: chunk.newLines });\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet pattern = chunk.oldLines;\n\t\tlet newLines = chunk.newLines;\n\t\tlet foundAt = seekSequenceWithFuzz(originalLines, pattern, lineIndex, chunk.isEndOfFile);\n\t\tif (foundAt === undefined && pattern[pattern.length - 1] === \"\") {\n\t\t\tpattern = pattern.slice(0, -1);\n\t\t\tif (newLines[newLines.length - 1] === \"\") newLines = newLines.slice(0, -1);\n\t\t\tfoundAt = seekSequenceWithFuzz(originalLines, pattern, lineIndex, chunk.isEndOfFile);\n\t\t}\n\n\t\tif (foundAt === undefined)\n\t\t\tthrow new Error(`Failed to find expected lines in ${filePath}:\\n${chunk.oldLines.join(\"\\n\")}`);\n\t\tfuzz += foundAt.fuzz;\n\t\treplacements.push({ start: foundAt.index, oldLength: pattern.length, newLines });\n\t\tlineIndex = foundAt.index + pattern.length;\n\t}\n\n\tconst nextLines = [...originalLines];\n\tfor (const replacement of replacements.sort((left, right) => right.start - left.start)) {\n\t\tnextLines.splice(replacement.start, replacement.oldLength, ...replacement.newLines);\n\t}\n\tnextLines.push(\"\");\n\treturn { content: nextLines.join(\"\\n\"), fuzz };\n}\n"]}
1
+ {"version":3,"file":"patch-replace.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/patch-replace.ts"],"names":[],"mappings":"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","sourcesContent":["import { seekSequenceWithFuzz } from \"./seek-sequence.ts\";\nimport { normalizePatchText } from \"./text.ts\";\nimport type { PatchChunk } from \"./types.ts\";\n\nfunction splitFileLines(content: string): string[] {\n\tconst lines = normalizePatchText(content).split(\"\\n\");\n\tif (lines[lines.length - 1] === \"\") {\n\t\tlines.pop();\n\t}\n\treturn lines;\n}\n\nexport function replaceChunks(\n\tcontent: string,\n\tfilePath: string,\n\tchunks: PatchChunk[],\n): { content: string; fuzz: number } {\n\tconst originalLines = splitFileLines(content);\n\tconst replacements: { start: number; oldLength: number; newLines: string[] }[] = [];\n\tlet lineIndex = 0;\n\tlet fuzz = 0;\n\n\tfor (const chunk of chunks) {\n\t\tfor (const changeContext of chunk.changeContexts) {\n\t\t\tconst contextIndex = seekSequenceWithFuzz(originalLines, [changeContext], lineIndex, false);\n\t\t\tif (contextIndex === undefined) throw new Error(`Failed to find context '${changeContext}' in ${filePath}`);\n\t\t\tfuzz += contextIndex.fuzz;\n\t\t\tlineIndex = contextIndex.index + 1;\n\t\t}\n\n\t\tif (chunk.oldLines.length === 0) {\n\t\t\tconst insertionIndex =\n\t\t\t\toriginalLines[originalLines.length - 1] === \"\" ? originalLines.length - 1 : originalLines.length;\n\t\t\treplacements.push({ start: insertionIndex, oldLength: 0, newLines: chunk.newLines });\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet pattern = chunk.oldLines;\n\t\tlet newLines = chunk.newLines;\n\t\tlet foundAt = seekSequenceWithFuzz(originalLines, pattern, lineIndex, chunk.isEndOfFile);\n\t\tif (foundAt === undefined && pattern[pattern.length - 1] === \"\") {\n\t\t\tpattern = pattern.slice(0, -1);\n\t\t\tif (newLines[newLines.length - 1] === \"\") newLines = newLines.slice(0, -1);\n\t\t\tfoundAt = seekSequenceWithFuzz(originalLines, pattern, lineIndex, chunk.isEndOfFile);\n\t\t}\n\n\t\tif (foundAt === undefined)\n\t\t\tthrow new Error(`Failed to find expected lines in ${filePath}:\\n${chunk.oldLines.join(\"\\n\")}`);\n\t\tfuzz += foundAt.fuzz;\n\t\treplacements.push({ start: foundAt.index, oldLength: pattern.length, newLines });\n\t\tlineIndex = foundAt.index + pattern.length;\n\t}\n\n\tconst nextLines = [...originalLines];\n\tfor (const replacement of replacements.sort((left, right) => right.start - left.start)) {\n\t\tnextLines.splice(replacement.start, replacement.oldLength, ...replacement.newLines);\n\t}\n\tnextLines.push(\"\");\n\treturn { content: nextLines.join(\"\\n\"), fuzz };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"preview-format.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/preview-format.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEX,iBAAiB,EAEjB,qBAAqB,EACrB,eAAe,EACf,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAuE5C,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQpD;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAWjE;AAcD,wBAAgB,kBAAkB,CACjC,OAAO,EAAE,iBAAiB,EAC1B,GAAG,GAAE,MAAsB,EAC3B,QAAQ,GAAE,OAAc,GACtB,MAAM,CA8BR;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAMhE;AAED,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,qBAAqB,CA6BlH;AAED,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD;AAED,wBAAgB,kBAAkB,CACjC,OAAO,EAAE,iBAAiB,EAC1B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,eAAe,EACtB,QAAQ,EAAE,OAAO,GACf,MAAM,CA4CR;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAIjE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,MAAM,CAO5E","sourcesContent":["import path from \"node:path\";\nimport { renderToolDiff } from \"../../../tools/diff-render.ts\";\nimport { parsePatch } from \"./parser.ts\";\nimport { extractPatchedPaths } from \"./text.ts\";\nimport type {\n\tApplyPatchOperation,\n\tApplyPatchPreview,\n\tApplyPatchPreviewFile,\n\tApplyPatchRenderState,\n\tApplyPatchTheme,\n} from \"./types.ts\";\n\nexport const PATCH_PREVIEW_MAX_LINES = 16;\nexport const PATCH_PREVIEW_MAX_CHARS = 4000;\nconst PATCH_PREVIEW_HEAD_LINES = 8;\nconst PATCH_PREVIEW_TAIL_LINES = PATCH_PREVIEW_MAX_LINES - PATCH_PREVIEW_HEAD_LINES - 1;\nconst PATCH_PREVIEW_TRUNCATION_MARKER = \"…\";\nconst applyPatchRenderStates = new Map<string, ApplyPatchRenderState>();\n\nfunction isChangedPreviewLine(line: string): boolean {\n\treturn /^[+-]\\s*\\d+\\s/.test(line);\n}\n\nfunction countWindowLines(lines: string[], start: number, end: number): number {\n\treturn end - start + (start > 0 ? 1 : 0) + (end < lines.length ? 1 : 0);\n}\n\nfunction formatPreviewWindow(lines: string[], start: number, end: number): string {\n\tconst previewLines = lines.slice(start, end);\n\tif (start > 0) previewLines.unshift(\"…\");\n\tif (end < lines.length) previewLines.push(\"…\");\n\treturn previewLines.join(\"\\n\");\n}\n\nfunction createChangedHunkPreview(lines: string[]): string | undefined {\n\tconst firstChangedLine = lines.findIndex(isChangedPreviewLine);\n\tif (firstChangedLine === -1) return undefined;\n\n\tlet start = firstChangedLine;\n\tlet end = firstChangedLine + 1;\n\twhile (end < lines.length) {\n\t\tconst line = lines[end];\n\t\tif (line === undefined || !isChangedPreviewLine(line)) break;\n\t\tend++;\n\t}\n\n\tconst changedHunkEnd = end;\n\twhile (end > start && countWindowLines(lines, start, end) > PATCH_PREVIEW_MAX_LINES) end--;\n\n\twhile (countWindowLines(lines, start, end) < PATCH_PREVIEW_MAX_LINES) {\n\t\tconst canAddBefore = start > 0;\n\t\tconst canAddAfter = end < lines.length;\n\t\tif (!canAddBefore && !canAddAfter) break;\n\n\t\tconst beforeContextLines = firstChangedLine - start;\n\t\tconst afterContextLines = end - changedHunkEnd;\n\t\tif (canAddBefore && (!canAddAfter || beforeContextLines <= afterContextLines)) {\n\t\t\tstart--;\n\t\t} else {\n\t\t\tend++;\n\t\t}\n\t}\n\n\treturn formatPreviewWindow(lines, start, end);\n}\n\nfunction formatLineCountSummary(added: number, removed: number): string {\n\treturn `(+${added} -${removed})`;\n}\n\nfunction countLines(text: string): number {\n\tif (text.length === 0) return 0;\n\tlet lines = 1;\n\tfor (let index = 0; index < text.length; index++) {\n\t\tif (text.charCodeAt(index) === 10) lines += 1;\n\t}\n\treturn lines;\n}\n\nfunction enforcePreviewCharLimit(preview: string): string {\n\tif (preview.length <= PATCH_PREVIEW_MAX_CHARS) return preview;\n\treturn `${preview.slice(0, PATCH_PREVIEW_MAX_CHARS - PATCH_PREVIEW_TRUNCATION_MARKER.length).trimEnd()}${PATCH_PREVIEW_TRUNCATION_MARKER}`;\n}\n\nexport function truncatePreview(text: string): string {\n\tif (text.length <= PATCH_PREVIEW_MAX_CHARS && countLines(text) <= PATCH_PREVIEW_MAX_LINES) return text;\n\tconst lines = text.split(\"\\n\");\n\tconst changedHunkPreview = createChangedHunkPreview(lines);\n\tconst preview =\n\t\tchangedHunkPreview ??\n\t\t[...lines.slice(0, PATCH_PREVIEW_HEAD_LINES), \"…\", ...lines.slice(-PATCH_PREVIEW_TAIL_LINES)].join(\"\\n\");\n\treturn enforcePreviewCharLimit(preview);\n}\n\nexport function displayPath(filePath: string, cwd: string): string {\n\tif (!path.isAbsolute(filePath)) return filePath;\n\tconst absoluteCwd = path.resolve(cwd);\n\tconst relativePath = path.relative(absoluteCwd, filePath);\n\tif (\n\t\trelativePath === \"\" ||\n\t\t(!relativePath.startsWith(`..${path.sep}`) && relativePath !== \"..\" && !path.isAbsolute(relativePath))\n\t) {\n\t\treturn relativePath || \".\";\n\t}\n\treturn filePath;\n}\n\nfunction formatPatchFilePath(file: ApplyPatchPreviewFile, cwd: string = process.cwd()): string {\n\tconst filePath = displayPath(file.filePath, cwd);\n\tif (!file.movePath) return filePath;\n\treturn `${filePath} → ${displayPath(file.movePath, cwd)}`;\n}\n\nfunction formatPatchOperation(operation: ApplyPatchOperation): string {\n\tif (operation === \"add\") return \"Added\";\n\tif (operation === \"delete\") return \"Deleted\";\n\treturn \"Edited\";\n}\n\nexport function formatPatchPreview(\n\tpreview: ApplyPatchPreview,\n\tcwd: string = process.cwd(),\n\texpanded: boolean = true,\n): string {\n\tconst lines: string[] = [];\n\tif (preview.files.length === 1) {\n\t\tconst file = preview.files[0];\n\t\tif (file) {\n\t\t\tlines.push(\n\t\t\t\t`• ${formatPatchOperation(file.operation)} ${formatPatchFilePath(file, cwd)} ${formatLineCountSummary(file.added, file.removed)}`,\n\t\t\t);\n\t\t\tif (expanded && file.diff)\n\t\t\t\tlines.push(\n\t\t\t\t\t...truncatePreview(file.diff)\n\t\t\t\t\t\t.split(\"\\n\")\n\t\t\t\t\t\t.map((line) => ` ${line}`),\n\t\t\t\t);\n\t\t}\n\t\treturn lines.join(\"\\n\");\n\t}\n\n\tconst noun = preview.files.length === 1 ? \"file\" : \"files\";\n\tlines.push(`• Edited ${preview.files.length} ${noun} ${formatLineCountSummary(preview.added, preview.removed)}`);\n\tfor (const file of preview.files) {\n\t\tlines.push(` └ ${formatPatchFilePath(file, cwd)} ${formatLineCountSummary(file.added, file.removed)}`);\n\t\tif (expanded && file.diff)\n\t\t\tlines.push(\n\t\t\t\t...truncatePreview(file.diff)\n\t\t\t\t\t.split(\"\\n\")\n\t\t\t\t\t.map((line) => ` ${line}`),\n\t\t\t);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nexport function formatInFlightCallText(patchText: string): string {\n\tconst paths = extractPatchedPaths(patchText);\n\tif (paths.length === 0) return \"Patching\";\n\tconst noun = paths.length === 1 ? \"file\" : \"files\";\n\tconst count = paths.length > 1 ? ` (${paths.length} ${noun})` : \"\";\n\treturn `Patching${count}: ${paths.join(\", \")}`;\n}\n\nexport function getApplyPatchRenderState(toolCallId: string, cwd: string, patchText: string): ApplyPatchRenderState {\n\tconst existing = applyPatchRenderStates.get(toolCallId);\n\tif (existing && existing.cwd === cwd && existing.patchText === patchText) return existing;\n\n\tconst callText = formatInFlightCallText(patchText);\n\tlet collapsed = \"\";\n\tlet expanded = \"\";\n\ttry {\n\t\tconst hunks = parsePatch(patchText);\n\t\tif (hunks.length > 0) {\n\t\t\tconst files = hunks.map((hunk) => ({\n\t\t\t\tfilePath: hunk.filePath,\n\t\t\t\tmovePath: hunk.type === \"update\" ? hunk.movePath : undefined,\n\t\t\t\toperation: hunk.type,\n\t\t\t\tdiff: \"\",\n\t\t\t\tadded: 0,\n\t\t\t\tremoved: 0,\n\t\t\t})) satisfies ApplyPatchPreviewFile[];\n\t\t\tconst preview: ApplyPatchPreview = { files, added: 0, removed: 0 };\n\t\t\tcollapsed = formatPatchPreview(preview, cwd, false);\n\t\t\texpanded = formatPatchPreview(preview, cwd, true);\n\t\t}\n\t} catch {\n\t\t// ignore incomplete patch text\n\t}\n\n\tconst nextState: ApplyPatchRenderState = { ...existing, cwd, patchText, callText, collapsed, expanded };\n\tapplyPatchRenderStates.set(toolCallId, nextState);\n\treturn nextState;\n}\n\nexport function clearApplyPatchRenderState(): void {\n\tapplyPatchRenderStates.clear();\n}\n\nexport function renderPatchPreview(\n\tpreview: ApplyPatchPreview,\n\tcwd: string,\n\ttheme: ApplyPatchTheme,\n\texpanded: boolean,\n): string {\n\tif (expanded) {\n\t\ttry {\n\t\t\tconst renderFile = (file: ApplyPatchPreviewFile, headerPrefix: string): string => {\n\t\t\t\tconst header = `• ${formatPatchOperation(file.operation)} ${formatPatchFilePath(file, cwd)} ${formatLineCountSummary(file.added, file.removed)}`;\n\t\t\t\tif (!file.diff) {\n\t\t\t\t\treturn headerPrefix.length > 0\n\t\t\t\t\t\t? `${headerPrefix}${formatPatchFilePath(file, cwd)} ${formatLineCountSummary(file.added, file.removed)}`\n\t\t\t\t\t\t: header;\n\t\t\t\t}\n\n\t\t\t\tconst renderedDiff = renderToolDiff(truncatePreview(file.diff), {\n\t\t\t\t\tfilePath: file.movePath ?? file.filePath,\n\t\t\t\t\ttheme,\n\t\t\t\t});\n\t\t\t\tif (headerPrefix.length > 0) {\n\t\t\t\t\tconst nestedHeader = `${headerPrefix}${formatPatchFilePath(file, cwd)} ${formatLineCountSummary(file.added, file.removed)}`;\n\t\t\t\t\treturn `${nestedHeader}\\n${renderedDiff\n\t\t\t\t\t\t.split(\"\\n\")\n\t\t\t\t\t\t.map((line) => ` ${line}`)\n\t\t\t\t\t\t.join(\"\\n\")}`;\n\t\t\t\t}\n\t\t\t\treturn `${header}\\n${renderedDiff}`;\n\t\t\t};\n\n\t\t\tif (preview.files.length === 1) {\n\t\t\t\tconst file = preview.files[0];\n\t\t\t\treturn file ? renderFile(file, \"\") : \"\";\n\t\t\t}\n\n\t\t\tconst noun = preview.files.length === 1 ? \"file\" : \"files\";\n\t\t\tconst renderedFiles = preview.files.map((file) => renderFile(file, \" └ \")).join(\"\\n\");\n\t\t\tif (renderedFiles.length > 0) {\n\t\t\t\treturn `• Edited ${preview.files.length} ${noun} ${formatLineCountSummary(preview.added, preview.removed)}\\n${renderedFiles}`;\n\t\t\t}\n\t\t} catch {\n\t\t\t// fall back to manual themed line rendering\n\t\t}\n\t}\n\n\treturn formatPatchPreview(preview, cwd, expanded)\n\t\t.split(\"\\n\")\n\t\t.map((line) => renderPatchLine(line, theme))\n\t\t.join(\"\\n\");\n}\n\nexport function formatPendingPatchPaths(patchText: string): string {\n\tconst paths = extractPatchedPaths(patchText);\n\tif (paths.length === 0) return \"Applying patch...\";\n\treturn `Applying patch...\\n${paths.map((filePath) => `• ${filePath}`).join(\"\\n\")}`;\n}\n\nexport function renderPatchLine(line: string, theme: ApplyPatchTheme): string {\n\tconst trimmed = line.trimStart();\n\tif (trimmed.startsWith(\"+\")) return theme.fg(\"toolDiffAdded\", line);\n\tif (trimmed.startsWith(\"-\")) return theme.fg(\"toolDiffRemoved\", line);\n\tif (trimmed.startsWith(\"•\")) return theme.fg(\"toolTitle\", theme.bold(line));\n\tif (trimmed.startsWith(\"└\")) return theme.fg(\"accent\", line);\n\treturn theme.fg(\"toolDiffContext\", line);\n}\n"]}
1
+ {"version":3,"file":"preview-format.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/preview-format.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEX,iBAAiB,EAEjB,qBAAqB,EACrB,eAAe,EACf,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAuE5C,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQpD;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAWjE;AAcD,wBAAgB,kBAAkB,CACjC,OAAO,EAAE,iBAAiB,EAC1B,GAAG,GAAE,MAAsB,EAC3B,QAAQ,GAAE,OAAc,GACtB,MAAM,CA8BR;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAMhE;AAED,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,qBAAqB,CA6BlH;AAED,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD;AAED,wBAAgB,kBAAkB,CACjC,OAAO,EAAE,iBAAiB,EAC1B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,eAAe,EACtB,QAAQ,EAAE,OAAO,GACf,MAAM,CA4CR;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAIjE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,MAAM,CAO5E"}
@@ -1 +1 @@
1
- {"version":3,"file":"preview-format.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/preview-format.ts"],"names":[],"mappings":"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","sourcesContent":["import path from \"node:path\";\nimport { renderToolDiff } from \"../../../tools/diff-render.ts\";\nimport { parsePatch } from \"./parser.ts\";\nimport { extractPatchedPaths } from \"./text.ts\";\nimport type {\n\tApplyPatchOperation,\n\tApplyPatchPreview,\n\tApplyPatchPreviewFile,\n\tApplyPatchRenderState,\n\tApplyPatchTheme,\n} from \"./types.ts\";\n\nexport const PATCH_PREVIEW_MAX_LINES = 16;\nexport const PATCH_PREVIEW_MAX_CHARS = 4000;\nconst PATCH_PREVIEW_HEAD_LINES = 8;\nconst PATCH_PREVIEW_TAIL_LINES = PATCH_PREVIEW_MAX_LINES - PATCH_PREVIEW_HEAD_LINES - 1;\nconst PATCH_PREVIEW_TRUNCATION_MARKER = \"…\";\nconst applyPatchRenderStates = new Map<string, ApplyPatchRenderState>();\n\nfunction isChangedPreviewLine(line: string): boolean {\n\treturn /^[+-]\\s*\\d+\\s/.test(line);\n}\n\nfunction countWindowLines(lines: string[], start: number, end: number): number {\n\treturn end - start + (start > 0 ? 1 : 0) + (end < lines.length ? 1 : 0);\n}\n\nfunction formatPreviewWindow(lines: string[], start: number, end: number): string {\n\tconst previewLines = lines.slice(start, end);\n\tif (start > 0) previewLines.unshift(\"…\");\n\tif (end < lines.length) previewLines.push(\"…\");\n\treturn previewLines.join(\"\\n\");\n}\n\nfunction createChangedHunkPreview(lines: string[]): string | undefined {\n\tconst firstChangedLine = lines.findIndex(isChangedPreviewLine);\n\tif (firstChangedLine === -1) return undefined;\n\n\tlet start = firstChangedLine;\n\tlet end = firstChangedLine + 1;\n\twhile (end < lines.length) {\n\t\tconst line = lines[end];\n\t\tif (line === undefined || !isChangedPreviewLine(line)) break;\n\t\tend++;\n\t}\n\n\tconst changedHunkEnd = end;\n\twhile (end > start && countWindowLines(lines, start, end) > PATCH_PREVIEW_MAX_LINES) end--;\n\n\twhile (countWindowLines(lines, start, end) < PATCH_PREVIEW_MAX_LINES) {\n\t\tconst canAddBefore = start > 0;\n\t\tconst canAddAfter = end < lines.length;\n\t\tif (!canAddBefore && !canAddAfter) break;\n\n\t\tconst beforeContextLines = firstChangedLine - start;\n\t\tconst afterContextLines = end - changedHunkEnd;\n\t\tif (canAddBefore && (!canAddAfter || beforeContextLines <= afterContextLines)) {\n\t\t\tstart--;\n\t\t} else {\n\t\t\tend++;\n\t\t}\n\t}\n\n\treturn formatPreviewWindow(lines, start, end);\n}\n\nfunction formatLineCountSummary(added: number, removed: number): string {\n\treturn `(+${added} -${removed})`;\n}\n\nfunction countLines(text: string): number {\n\tif (text.length === 0) return 0;\n\tlet lines = 1;\n\tfor (let index = 0; index < text.length; index++) {\n\t\tif (text.charCodeAt(index) === 10) lines += 1;\n\t}\n\treturn lines;\n}\n\nfunction enforcePreviewCharLimit(preview: string): string {\n\tif (preview.length <= PATCH_PREVIEW_MAX_CHARS) return preview;\n\treturn `${preview.slice(0, PATCH_PREVIEW_MAX_CHARS - PATCH_PREVIEW_TRUNCATION_MARKER.length).trimEnd()}${PATCH_PREVIEW_TRUNCATION_MARKER}`;\n}\n\nexport function truncatePreview(text: string): string {\n\tif (text.length <= PATCH_PREVIEW_MAX_CHARS && countLines(text) <= PATCH_PREVIEW_MAX_LINES) return text;\n\tconst lines = text.split(\"\\n\");\n\tconst changedHunkPreview = createChangedHunkPreview(lines);\n\tconst preview =\n\t\tchangedHunkPreview ??\n\t\t[...lines.slice(0, PATCH_PREVIEW_HEAD_LINES), \"…\", ...lines.slice(-PATCH_PREVIEW_TAIL_LINES)].join(\"\\n\");\n\treturn enforcePreviewCharLimit(preview);\n}\n\nexport function displayPath(filePath: string, cwd: string): string {\n\tif (!path.isAbsolute(filePath)) return filePath;\n\tconst absoluteCwd = path.resolve(cwd);\n\tconst relativePath = path.relative(absoluteCwd, filePath);\n\tif (\n\t\trelativePath === \"\" ||\n\t\t(!relativePath.startsWith(`..${path.sep}`) && relativePath !== \"..\" && !path.isAbsolute(relativePath))\n\t) {\n\t\treturn relativePath || \".\";\n\t}\n\treturn filePath;\n}\n\nfunction formatPatchFilePath(file: ApplyPatchPreviewFile, cwd: string = process.cwd()): string {\n\tconst filePath = displayPath(file.filePath, cwd);\n\tif (!file.movePath) return filePath;\n\treturn `${filePath} → ${displayPath(file.movePath, cwd)}`;\n}\n\nfunction formatPatchOperation(operation: ApplyPatchOperation): string {\n\tif (operation === \"add\") return \"Added\";\n\tif (operation === \"delete\") return \"Deleted\";\n\treturn \"Edited\";\n}\n\nexport function formatPatchPreview(\n\tpreview: ApplyPatchPreview,\n\tcwd: string = process.cwd(),\n\texpanded: boolean = true,\n): string {\n\tconst lines: string[] = [];\n\tif (preview.files.length === 1) {\n\t\tconst file = preview.files[0];\n\t\tif (file) {\n\t\t\tlines.push(\n\t\t\t\t`• ${formatPatchOperation(file.operation)} ${formatPatchFilePath(file, cwd)} ${formatLineCountSummary(file.added, file.removed)}`,\n\t\t\t);\n\t\t\tif (expanded && file.diff)\n\t\t\t\tlines.push(\n\t\t\t\t\t...truncatePreview(file.diff)\n\t\t\t\t\t\t.split(\"\\n\")\n\t\t\t\t\t\t.map((line) => ` ${line}`),\n\t\t\t\t);\n\t\t}\n\t\treturn lines.join(\"\\n\");\n\t}\n\n\tconst noun = preview.files.length === 1 ? \"file\" : \"files\";\n\tlines.push(`• Edited ${preview.files.length} ${noun} ${formatLineCountSummary(preview.added, preview.removed)}`);\n\tfor (const file of preview.files) {\n\t\tlines.push(` └ ${formatPatchFilePath(file, cwd)} ${formatLineCountSummary(file.added, file.removed)}`);\n\t\tif (expanded && file.diff)\n\t\t\tlines.push(\n\t\t\t\t...truncatePreview(file.diff)\n\t\t\t\t\t.split(\"\\n\")\n\t\t\t\t\t.map((line) => ` ${line}`),\n\t\t\t);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nexport function formatInFlightCallText(patchText: string): string {\n\tconst paths = extractPatchedPaths(patchText);\n\tif (paths.length === 0) return \"Patching\";\n\tconst noun = paths.length === 1 ? \"file\" : \"files\";\n\tconst count = paths.length > 1 ? ` (${paths.length} ${noun})` : \"\";\n\treturn `Patching${count}: ${paths.join(\", \")}`;\n}\n\nexport function getApplyPatchRenderState(toolCallId: string, cwd: string, patchText: string): ApplyPatchRenderState {\n\tconst existing = applyPatchRenderStates.get(toolCallId);\n\tif (existing && existing.cwd === cwd && existing.patchText === patchText) return existing;\n\n\tconst callText = formatInFlightCallText(patchText);\n\tlet collapsed = \"\";\n\tlet expanded = \"\";\n\ttry {\n\t\tconst hunks = parsePatch(patchText);\n\t\tif (hunks.length > 0) {\n\t\t\tconst files = hunks.map((hunk) => ({\n\t\t\t\tfilePath: hunk.filePath,\n\t\t\t\tmovePath: hunk.type === \"update\" ? hunk.movePath : undefined,\n\t\t\t\toperation: hunk.type,\n\t\t\t\tdiff: \"\",\n\t\t\t\tadded: 0,\n\t\t\t\tremoved: 0,\n\t\t\t})) satisfies ApplyPatchPreviewFile[];\n\t\t\tconst preview: ApplyPatchPreview = { files, added: 0, removed: 0 };\n\t\t\tcollapsed = formatPatchPreview(preview, cwd, false);\n\t\t\texpanded = formatPatchPreview(preview, cwd, true);\n\t\t}\n\t} catch {\n\t\t// ignore incomplete patch text\n\t}\n\n\tconst nextState: ApplyPatchRenderState = { ...existing, cwd, patchText, callText, collapsed, expanded };\n\tapplyPatchRenderStates.set(toolCallId, nextState);\n\treturn nextState;\n}\n\nexport function clearApplyPatchRenderState(): void {\n\tapplyPatchRenderStates.clear();\n}\n\nexport function renderPatchPreview(\n\tpreview: ApplyPatchPreview,\n\tcwd: string,\n\ttheme: ApplyPatchTheme,\n\texpanded: boolean,\n): string {\n\tif (expanded) {\n\t\ttry {\n\t\t\tconst renderFile = (file: ApplyPatchPreviewFile, headerPrefix: string): string => {\n\t\t\t\tconst header = `• ${formatPatchOperation(file.operation)} ${formatPatchFilePath(file, cwd)} ${formatLineCountSummary(file.added, file.removed)}`;\n\t\t\t\tif (!file.diff) {\n\t\t\t\t\treturn headerPrefix.length > 0\n\t\t\t\t\t\t? `${headerPrefix}${formatPatchFilePath(file, cwd)} ${formatLineCountSummary(file.added, file.removed)}`\n\t\t\t\t\t\t: header;\n\t\t\t\t}\n\n\t\t\t\tconst renderedDiff = renderToolDiff(truncatePreview(file.diff), {\n\t\t\t\t\tfilePath: file.movePath ?? file.filePath,\n\t\t\t\t\ttheme,\n\t\t\t\t});\n\t\t\t\tif (headerPrefix.length > 0) {\n\t\t\t\t\tconst nestedHeader = `${headerPrefix}${formatPatchFilePath(file, cwd)} ${formatLineCountSummary(file.added, file.removed)}`;\n\t\t\t\t\treturn `${nestedHeader}\\n${renderedDiff\n\t\t\t\t\t\t.split(\"\\n\")\n\t\t\t\t\t\t.map((line) => ` ${line}`)\n\t\t\t\t\t\t.join(\"\\n\")}`;\n\t\t\t\t}\n\t\t\t\treturn `${header}\\n${renderedDiff}`;\n\t\t\t};\n\n\t\t\tif (preview.files.length === 1) {\n\t\t\t\tconst file = preview.files[0];\n\t\t\t\treturn file ? renderFile(file, \"\") : \"\";\n\t\t\t}\n\n\t\t\tconst noun = preview.files.length === 1 ? \"file\" : \"files\";\n\t\t\tconst renderedFiles = preview.files.map((file) => renderFile(file, \" └ \")).join(\"\\n\");\n\t\t\tif (renderedFiles.length > 0) {\n\t\t\t\treturn `• Edited ${preview.files.length} ${noun} ${formatLineCountSummary(preview.added, preview.removed)}\\n${renderedFiles}`;\n\t\t\t}\n\t\t} catch {\n\t\t\t// fall back to manual themed line rendering\n\t\t}\n\t}\n\n\treturn formatPatchPreview(preview, cwd, expanded)\n\t\t.split(\"\\n\")\n\t\t.map((line) => renderPatchLine(line, theme))\n\t\t.join(\"\\n\");\n}\n\nexport function formatPendingPatchPaths(patchText: string): string {\n\tconst paths = extractPatchedPaths(patchText);\n\tif (paths.length === 0) return \"Applying patch...\";\n\treturn `Applying patch...\\n${paths.map((filePath) => `• ${filePath}`).join(\"\\n\")}`;\n}\n\nexport function renderPatchLine(line: string, theme: ApplyPatchTheme): string {\n\tconst trimmed = line.trimStart();\n\tif (trimmed.startsWith(\"+\")) return theme.fg(\"toolDiffAdded\", line);\n\tif (trimmed.startsWith(\"-\")) return theme.fg(\"toolDiffRemoved\", line);\n\tif (trimmed.startsWith(\"•\")) return theme.fg(\"toolTitle\", theme.bold(line));\n\tif (trimmed.startsWith(\"└\")) return theme.fg(\"accent\", line);\n\treturn theme.fg(\"toolDiffContext\", line);\n}\n"]}
1
+ {"version":3,"file":"preview-format.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/preview-format.ts"],"names":[],"mappings":"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","sourcesContent":["import path from \"node:path\";\nimport { renderToolDiff } from \"../../../tools/diff-render.ts\";\nimport { parsePatch } from \"./parser.ts\";\nimport { extractPatchedPaths } from \"./text.ts\";\nimport type {\n\tApplyPatchOperation,\n\tApplyPatchPreview,\n\tApplyPatchPreviewFile,\n\tApplyPatchRenderState,\n\tApplyPatchTheme,\n} from \"./types.ts\";\n\nexport const PATCH_PREVIEW_MAX_LINES = 16;\nexport const PATCH_PREVIEW_MAX_CHARS = 4000;\nconst PATCH_PREVIEW_HEAD_LINES = 8;\nconst PATCH_PREVIEW_TAIL_LINES = PATCH_PREVIEW_MAX_LINES - PATCH_PREVIEW_HEAD_LINES - 1;\nconst PATCH_PREVIEW_TRUNCATION_MARKER = \"…\";\nconst applyPatchRenderStates = new Map<string, ApplyPatchRenderState>();\n\nfunction isChangedPreviewLine(line: string): boolean {\n\treturn /^[+-]\\s*\\d+\\s/.test(line);\n}\n\nfunction countWindowLines(lines: string[], start: number, end: number): number {\n\treturn end - start + (start > 0 ? 1 : 0) + (end < lines.length ? 1 : 0);\n}\n\nfunction formatPreviewWindow(lines: string[], start: number, end: number): string {\n\tconst previewLines = lines.slice(start, end);\n\tif (start > 0) previewLines.unshift(\"…\");\n\tif (end < lines.length) previewLines.push(\"…\");\n\treturn previewLines.join(\"\\n\");\n}\n\nfunction createChangedHunkPreview(lines: string[]): string | undefined {\n\tconst firstChangedLine = lines.findIndex(isChangedPreviewLine);\n\tif (firstChangedLine === -1) return undefined;\n\n\tlet start = firstChangedLine;\n\tlet end = firstChangedLine + 1;\n\twhile (end < lines.length) {\n\t\tconst line = lines[end];\n\t\tif (line === undefined || !isChangedPreviewLine(line)) break;\n\t\tend++;\n\t}\n\n\tconst changedHunkEnd = end;\n\twhile (end > start && countWindowLines(lines, start, end) > PATCH_PREVIEW_MAX_LINES) end--;\n\n\twhile (countWindowLines(lines, start, end) < PATCH_PREVIEW_MAX_LINES) {\n\t\tconst canAddBefore = start > 0;\n\t\tconst canAddAfter = end < lines.length;\n\t\tif (!canAddBefore && !canAddAfter) break;\n\n\t\tconst beforeContextLines = firstChangedLine - start;\n\t\tconst afterContextLines = end - changedHunkEnd;\n\t\tif (canAddBefore && (!canAddAfter || beforeContextLines <= afterContextLines)) {\n\t\t\tstart--;\n\t\t} else {\n\t\t\tend++;\n\t\t}\n\t}\n\n\treturn formatPreviewWindow(lines, start, end);\n}\n\nfunction formatLineCountSummary(added: number, removed: number): string {\n\treturn `(+${added} -${removed})`;\n}\n\nfunction countLines(text: string): number {\n\tif (text.length === 0) return 0;\n\tlet lines = 1;\n\tfor (let index = 0; index < text.length; index++) {\n\t\tif (text.charCodeAt(index) === 10) lines += 1;\n\t}\n\treturn lines;\n}\n\nfunction enforcePreviewCharLimit(preview: string): string {\n\tif (preview.length <= PATCH_PREVIEW_MAX_CHARS) return preview;\n\treturn `${preview.slice(0, PATCH_PREVIEW_MAX_CHARS - PATCH_PREVIEW_TRUNCATION_MARKER.length).trimEnd()}${PATCH_PREVIEW_TRUNCATION_MARKER}`;\n}\n\nexport function truncatePreview(text: string): string {\n\tif (text.length <= PATCH_PREVIEW_MAX_CHARS && countLines(text) <= PATCH_PREVIEW_MAX_LINES) return text;\n\tconst lines = text.split(\"\\n\");\n\tconst changedHunkPreview = createChangedHunkPreview(lines);\n\tconst preview =\n\t\tchangedHunkPreview ??\n\t\t[...lines.slice(0, PATCH_PREVIEW_HEAD_LINES), \"…\", ...lines.slice(-PATCH_PREVIEW_TAIL_LINES)].join(\"\\n\");\n\treturn enforcePreviewCharLimit(preview);\n}\n\nexport function displayPath(filePath: string, cwd: string): string {\n\tif (!path.isAbsolute(filePath)) return filePath;\n\tconst absoluteCwd = path.resolve(cwd);\n\tconst relativePath = path.relative(absoluteCwd, filePath);\n\tif (\n\t\trelativePath === \"\" ||\n\t\t(!relativePath.startsWith(`..${path.sep}`) && relativePath !== \"..\" && !path.isAbsolute(relativePath))\n\t) {\n\t\treturn relativePath || \".\";\n\t}\n\treturn filePath;\n}\n\nfunction formatPatchFilePath(file: ApplyPatchPreviewFile, cwd: string = process.cwd()): string {\n\tconst filePath = displayPath(file.filePath, cwd);\n\tif (!file.movePath) return filePath;\n\treturn `${filePath} → ${displayPath(file.movePath, cwd)}`;\n}\n\nfunction formatPatchOperation(operation: ApplyPatchOperation): string {\n\tif (operation === \"add\") return \"Added\";\n\tif (operation === \"delete\") return \"Deleted\";\n\treturn \"Edited\";\n}\n\nexport function formatPatchPreview(\n\tpreview: ApplyPatchPreview,\n\tcwd: string = process.cwd(),\n\texpanded: boolean = true,\n): string {\n\tconst lines: string[] = [];\n\tif (preview.files.length === 1) {\n\t\tconst file = preview.files[0];\n\t\tif (file) {\n\t\t\tlines.push(\n\t\t\t\t`• ${formatPatchOperation(file.operation)} ${formatPatchFilePath(file, cwd)} ${formatLineCountSummary(file.added, file.removed)}`,\n\t\t\t);\n\t\t\tif (expanded && file.diff)\n\t\t\t\tlines.push(\n\t\t\t\t\t...truncatePreview(file.diff)\n\t\t\t\t\t\t.split(\"\\n\")\n\t\t\t\t\t\t.map((line) => ` ${line}`),\n\t\t\t\t);\n\t\t}\n\t\treturn lines.join(\"\\n\");\n\t}\n\n\tconst noun = preview.files.length === 1 ? \"file\" : \"files\";\n\tlines.push(`• Edited ${preview.files.length} ${noun} ${formatLineCountSummary(preview.added, preview.removed)}`);\n\tfor (const file of preview.files) {\n\t\tlines.push(` └ ${formatPatchFilePath(file, cwd)} ${formatLineCountSummary(file.added, file.removed)}`);\n\t\tif (expanded && file.diff)\n\t\t\tlines.push(\n\t\t\t\t...truncatePreview(file.diff)\n\t\t\t\t\t.split(\"\\n\")\n\t\t\t\t\t.map((line) => ` ${line}`),\n\t\t\t);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nexport function formatInFlightCallText(patchText: string): string {\n\tconst paths = extractPatchedPaths(patchText);\n\tif (paths.length === 0) return \"Patching\";\n\tconst noun = paths.length === 1 ? \"file\" : \"files\";\n\tconst count = paths.length > 1 ? ` (${paths.length} ${noun})` : \"\";\n\treturn `Patching${count}: ${paths.join(\", \")}`;\n}\n\nexport function getApplyPatchRenderState(toolCallId: string, cwd: string, patchText: string): ApplyPatchRenderState {\n\tconst existing = applyPatchRenderStates.get(toolCallId);\n\tif (existing && existing.cwd === cwd && existing.patchText === patchText) return existing;\n\n\tconst callText = formatInFlightCallText(patchText);\n\tlet collapsed = \"\";\n\tlet expanded = \"\";\n\ttry {\n\t\tconst hunks = parsePatch(patchText);\n\t\tif (hunks.length > 0) {\n\t\t\tconst files = hunks.map((hunk) => ({\n\t\t\t\tfilePath: hunk.filePath,\n\t\t\t\tmovePath: hunk.type === \"update\" ? hunk.movePath : undefined,\n\t\t\t\toperation: hunk.type,\n\t\t\t\tdiff: \"\",\n\t\t\t\tadded: 0,\n\t\t\t\tremoved: 0,\n\t\t\t})) satisfies ApplyPatchPreviewFile[];\n\t\t\tconst preview: ApplyPatchPreview = { files, added: 0, removed: 0 };\n\t\t\tcollapsed = formatPatchPreview(preview, cwd, false);\n\t\t\texpanded = formatPatchPreview(preview, cwd, true);\n\t\t}\n\t} catch {\n\t\t// ignore incomplete patch text\n\t}\n\n\tconst nextState: ApplyPatchRenderState = { ...existing, cwd, patchText, callText, collapsed, expanded };\n\tapplyPatchRenderStates.set(toolCallId, nextState);\n\treturn nextState;\n}\n\nexport function clearApplyPatchRenderState(): void {\n\tapplyPatchRenderStates.clear();\n}\n\nexport function renderPatchPreview(\n\tpreview: ApplyPatchPreview,\n\tcwd: string,\n\ttheme: ApplyPatchTheme,\n\texpanded: boolean,\n): string {\n\tif (expanded) {\n\t\ttry {\n\t\t\tconst renderFile = (file: ApplyPatchPreviewFile, headerPrefix: string): string => {\n\t\t\t\tconst header = `• ${formatPatchOperation(file.operation)} ${formatPatchFilePath(file, cwd)} ${formatLineCountSummary(file.added, file.removed)}`;\n\t\t\t\tif (!file.diff) {\n\t\t\t\t\treturn headerPrefix.length > 0\n\t\t\t\t\t\t? `${headerPrefix}${formatPatchFilePath(file, cwd)} ${formatLineCountSummary(file.added, file.removed)}`\n\t\t\t\t\t\t: header;\n\t\t\t\t}\n\n\t\t\t\tconst renderedDiff = renderToolDiff(truncatePreview(file.diff), {\n\t\t\t\t\tfilePath: file.movePath ?? file.filePath,\n\t\t\t\t\ttheme,\n\t\t\t\t});\n\t\t\t\tif (headerPrefix.length > 0) {\n\t\t\t\t\tconst nestedHeader = `${headerPrefix}${formatPatchFilePath(file, cwd)} ${formatLineCountSummary(file.added, file.removed)}`;\n\t\t\t\t\treturn `${nestedHeader}\\n${renderedDiff\n\t\t\t\t\t\t.split(\"\\n\")\n\t\t\t\t\t\t.map((line) => ` ${line}`)\n\t\t\t\t\t\t.join(\"\\n\")}`;\n\t\t\t\t}\n\t\t\t\treturn `${header}\\n${renderedDiff}`;\n\t\t\t};\n\n\t\t\tif (preview.files.length === 1) {\n\t\t\t\tconst file = preview.files[0];\n\t\t\t\treturn file ? renderFile(file, \"\") : \"\";\n\t\t\t}\n\n\t\t\tconst noun = preview.files.length === 1 ? \"file\" : \"files\";\n\t\t\tconst renderedFiles = preview.files.map((file) => renderFile(file, \" └ \")).join(\"\\n\");\n\t\t\tif (renderedFiles.length > 0) {\n\t\t\t\treturn `• Edited ${preview.files.length} ${noun} ${formatLineCountSummary(preview.added, preview.removed)}\\n${renderedFiles}`;\n\t\t\t}\n\t\t} catch {\n\t\t\t// fall back to manual themed line rendering\n\t\t}\n\t}\n\n\treturn formatPatchPreview(preview, cwd, expanded)\n\t\t.split(\"\\n\")\n\t\t.map((line) => renderPatchLine(line, theme))\n\t\t.join(\"\\n\");\n}\n\nexport function formatPendingPatchPaths(patchText: string): string {\n\tconst paths = extractPatchedPaths(patchText);\n\tif (paths.length === 0) return \"Applying patch...\";\n\treturn `Applying patch...\\n${paths.map((filePath) => `• ${filePath}`).join(\"\\n\")}`;\n}\n\nexport function renderPatchLine(line: string, theme: ApplyPatchTheme): string {\n\tconst trimmed = line.trimStart();\n\tif (trimmed.startsWith(\"+\")) return theme.fg(\"toolDiffAdded\", line);\n\tif (trimmed.startsWith(\"-\")) return theme.fg(\"toolDiffRemoved\", line);\n\tif (trimmed.startsWith(\"•\")) return theme.fg(\"toolTitle\", theme.bold(line));\n\tif (trimmed.startsWith(\"└\")) return theme.fg(\"accent\", line);\n\treturn theme.fg(\"toolDiffContext\", line);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/preview.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACX,iBAAiB,EAEjB,kBAAkB,EAClB,qBAAqB,EACrB,WAAW,EACX,MAAM,YAAY,CAAC;AAYpB,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA+BtG;AAED,wBAAsB,wBAAwB,CAC7C,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,kBAAkB,EAC7B,eAAe,CAAC,EAAE,iBAAiB,GACjC,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,qBAAqB,GAAG,SAAS,CAAA;CAAE,CAAC,CAyBvE","sourcesContent":["import { readFile } from \"node:fs/promises\";\nimport { parsePatch } from \"./parser.ts\";\nimport { createPatchDiff } from \"./patch-diff.ts\";\nimport { replaceChunks } from \"./patch-replace.ts\";\nimport { formatPatchPreview, formatPendingPatchPaths } from \"./preview-format.ts\";\nimport type {\n\tApplyPatchPreview,\n\tApplyPatchPreviewFile,\n\tApplyPatchProgress,\n\tApplyPatchToolDetails,\n\tParsedPatch,\n} from \"./types.ts\";\nimport { resolvePatchPath } from \"./workspace.ts\";\n\nasync function readExistingFileForPreview(absolutePath: string): Promise<string> {\n\ttry {\n\t\treturn await readFile(absolutePath, \"utf-8\");\n\t} catch (error) {\n\t\tif (error && typeof error === \"object\" && \"code\" in error && error.code === \"ENOENT\") return \"\";\n\t\tthrow error;\n\t}\n}\n\nexport async function createPatchPreview(cwd: string, hunks: ParsedPatch[]): Promise<ApplyPatchPreview> {\n\tconst files: ApplyPatchPreviewFile[] = [];\n\tfor (const hunk of hunks) {\n\t\tconst absolutePath = resolvePatchPath(cwd, hunk.filePath);\n\t\tif (hunk.type === \"add\") {\n\t\t\tconst oldContent = await readExistingFileForPreview(absolutePath);\n\t\t\tconst diff = createPatchDiff(oldContent, hunk.content);\n\t\t\tfiles.push({ filePath: hunk.filePath, operation: oldContent.length > 0 ? \"update\" : \"add\", ...diff });\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (hunk.type === \"delete\") {\n\t\t\tconst oldContent = await readFile(absolutePath, \"utf-8\");\n\t\t\tconst diff = createPatchDiff(oldContent, \"\");\n\t\t\tfiles.push({ filePath: hunk.filePath, operation: \"delete\", ...diff });\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst oldContent = await readFile(absolutePath, \"utf-8\");\n\t\tconst newContent =\n\t\t\thunk.chunks.length === 0 ? oldContent : replaceChunks(oldContent, hunk.filePath, hunk.chunks).content;\n\t\tif (hunk.movePath) resolvePatchPath(cwd, hunk.movePath);\n\t\tconst diff = createPatchDiff(oldContent, newContent);\n\t\tfiles.push({ filePath: hunk.filePath, movePath: hunk.movePath, operation: \"update\", ...diff });\n\t}\n\n\treturn {\n\t\tfiles,\n\t\tadded: files.reduce((sum, file) => sum + file.added, 0),\n\t\tremoved: files.reduce((sum, file) => sum + file.removed, 0),\n\t};\n}\n\nexport async function createPendingPatchUpdate(\n\tcwd: string,\n\tpatchText: string,\n\tprogress?: ApplyPatchProgress,\n\tpreviewOverride?: ApplyPatchPreview,\n): Promise<{ text: string; details: ApplyPatchToolDetails | undefined }> {\n\tconst title = progress\n\t\t? `Applying patch (${progress.applied + progress.failed}/${progress.total})...`\n\t\t: \"Applying patch...\";\n\tif (previewOverride) {\n\t\treturn {\n\t\t\ttext: `${title}\\n${formatPatchPreview(previewOverride)}`,\n\t\t\tdetails: { preview: previewOverride, progress },\n\t\t};\n\t}\n\n\ttry {\n\t\tconst hunks = parsePatch(patchText);\n\t\tif (hunks.length === 0) return { text: title, details: progress ? { progress } : undefined };\n\t\tconst preview = await createPatchPreview(cwd, hunks);\n\t\tif (preview.files.some((file) => file.diff.trim().length > 0)) {\n\t\t\treturn { text: `${title}\\n${formatPatchPreview(preview)}`, details: { preview, progress } };\n\t\t}\n\t} catch {\n\t\treturn {\n\t\t\ttext: progress ? title : formatPendingPatchPaths(patchText),\n\t\t\tdetails: progress ? { progress } : undefined,\n\t\t};\n\t}\n\treturn { text: progress ? title : formatPendingPatchPaths(patchText), details: progress ? { progress } : undefined };\n}\n"]}
1
+ {"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/preview.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACX,iBAAiB,EAEjB,kBAAkB,EAClB,qBAAqB,EACrB,WAAW,EACX,MAAM,YAAY,CAAC;AAYpB,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA+BtG;AAED,wBAAsB,wBAAwB,CAC7C,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,kBAAkB,EAC7B,eAAe,CAAC,EAAE,iBAAiB,GACjC,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,qBAAqB,GAAG,SAAS,CAAA;CAAE,CAAC,CAyBvE"}
@@ -1 +1 @@
1
- {"version":3,"file":"preview.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/preview.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFile } from \"node:fs/promises\";\nimport { parsePatch } from \"./parser.ts\";\nimport { createPatchDiff } from \"./patch-diff.ts\";\nimport { replaceChunks } from \"./patch-replace.ts\";\nimport { formatPatchPreview, formatPendingPatchPaths } from \"./preview-format.ts\";\nimport type {\n\tApplyPatchPreview,\n\tApplyPatchPreviewFile,\n\tApplyPatchProgress,\n\tApplyPatchToolDetails,\n\tParsedPatch,\n} from \"./types.ts\";\nimport { resolvePatchPath } from \"./workspace.ts\";\n\nasync function readExistingFileForPreview(absolutePath: string): Promise<string> {\n\ttry {\n\t\treturn await readFile(absolutePath, \"utf-8\");\n\t} catch (error) {\n\t\tif (error && typeof error === \"object\" && \"code\" in error && error.code === \"ENOENT\") return \"\";\n\t\tthrow error;\n\t}\n}\n\nexport async function createPatchPreview(cwd: string, hunks: ParsedPatch[]): Promise<ApplyPatchPreview> {\n\tconst files: ApplyPatchPreviewFile[] = [];\n\tfor (const hunk of hunks) {\n\t\tconst absolutePath = resolvePatchPath(cwd, hunk.filePath);\n\t\tif (hunk.type === \"add\") {\n\t\t\tconst oldContent = await readExistingFileForPreview(absolutePath);\n\t\t\tconst diff = createPatchDiff(oldContent, hunk.content);\n\t\t\tfiles.push({ filePath: hunk.filePath, operation: oldContent.length > 0 ? \"update\" : \"add\", ...diff });\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (hunk.type === \"delete\") {\n\t\t\tconst oldContent = await readFile(absolutePath, \"utf-8\");\n\t\t\tconst diff = createPatchDiff(oldContent, \"\");\n\t\t\tfiles.push({ filePath: hunk.filePath, operation: \"delete\", ...diff });\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst oldContent = await readFile(absolutePath, \"utf-8\");\n\t\tconst newContent =\n\t\t\thunk.chunks.length === 0 ? oldContent : replaceChunks(oldContent, hunk.filePath, hunk.chunks).content;\n\t\tif (hunk.movePath) resolvePatchPath(cwd, hunk.movePath);\n\t\tconst diff = createPatchDiff(oldContent, newContent);\n\t\tfiles.push({ filePath: hunk.filePath, movePath: hunk.movePath, operation: \"update\", ...diff });\n\t}\n\n\treturn {\n\t\tfiles,\n\t\tadded: files.reduce((sum, file) => sum + file.added, 0),\n\t\tremoved: files.reduce((sum, file) => sum + file.removed, 0),\n\t};\n}\n\nexport async function createPendingPatchUpdate(\n\tcwd: string,\n\tpatchText: string,\n\tprogress?: ApplyPatchProgress,\n\tpreviewOverride?: ApplyPatchPreview,\n): Promise<{ text: string; details: ApplyPatchToolDetails | undefined }> {\n\tconst title = progress\n\t\t? `Applying patch (${progress.applied + progress.failed}/${progress.total})...`\n\t\t: \"Applying patch...\";\n\tif (previewOverride) {\n\t\treturn {\n\t\t\ttext: `${title}\\n${formatPatchPreview(previewOverride)}`,\n\t\t\tdetails: { preview: previewOverride, progress },\n\t\t};\n\t}\n\n\ttry {\n\t\tconst hunks = parsePatch(patchText);\n\t\tif (hunks.length === 0) return { text: title, details: progress ? { progress } : undefined };\n\t\tconst preview = await createPatchPreview(cwd, hunks);\n\t\tif (preview.files.some((file) => file.diff.trim().length > 0)) {\n\t\t\treturn { text: `${title}\\n${formatPatchPreview(preview)}`, details: { preview, progress } };\n\t\t}\n\t} catch {\n\t\treturn {\n\t\t\ttext: progress ? title : formatPendingPatchPaths(patchText),\n\t\t\tdetails: progress ? { progress } : undefined,\n\t\t};\n\t}\n\treturn { text: progress ? title : formatPendingPatchPaths(patchText), details: progress ? { progress } : undefined };\n}\n"]}
1
+ {"version":3,"file":"preview.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/preview.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFile } from \"node:fs/promises\";\nimport { parsePatch } from \"./parser.ts\";\nimport { createPatchDiff } from \"./patch-diff.ts\";\nimport { replaceChunks } from \"./patch-replace.ts\";\nimport { formatPatchPreview, formatPendingPatchPaths } from \"./preview-format.ts\";\nimport type {\n\tApplyPatchPreview,\n\tApplyPatchPreviewFile,\n\tApplyPatchProgress,\n\tApplyPatchToolDetails,\n\tParsedPatch,\n} from \"./types.ts\";\nimport { resolvePatchPath } from \"./workspace.ts\";\n\nasync function readExistingFileForPreview(absolutePath: string): Promise<string> {\n\ttry {\n\t\treturn await readFile(absolutePath, \"utf-8\");\n\t} catch (error) {\n\t\tif (error && typeof error === \"object\" && \"code\" in error && error.code === \"ENOENT\") return \"\";\n\t\tthrow error;\n\t}\n}\n\nexport async function createPatchPreview(cwd: string, hunks: ParsedPatch[]): Promise<ApplyPatchPreview> {\n\tconst files: ApplyPatchPreviewFile[] = [];\n\tfor (const hunk of hunks) {\n\t\tconst absolutePath = resolvePatchPath(cwd, hunk.filePath);\n\t\tif (hunk.type === \"add\") {\n\t\t\tconst oldContent = await readExistingFileForPreview(absolutePath);\n\t\t\tconst diff = createPatchDiff(oldContent, hunk.content);\n\t\t\tfiles.push({ filePath: hunk.filePath, operation: oldContent.length > 0 ? \"update\" : \"add\", ...diff });\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (hunk.type === \"delete\") {\n\t\t\tconst oldContent = await readFile(absolutePath, \"utf-8\");\n\t\t\tconst diff = createPatchDiff(oldContent, \"\");\n\t\t\tfiles.push({ filePath: hunk.filePath, operation: \"delete\", ...diff });\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst oldContent = await readFile(absolutePath, \"utf-8\");\n\t\tconst newContent =\n\t\t\thunk.chunks.length === 0 ? oldContent : replaceChunks(oldContent, hunk.filePath, hunk.chunks).content;\n\t\tif (hunk.movePath) resolvePatchPath(cwd, hunk.movePath);\n\t\tconst diff = createPatchDiff(oldContent, newContent);\n\t\tfiles.push({ filePath: hunk.filePath, movePath: hunk.movePath, operation: \"update\", ...diff });\n\t}\n\n\treturn {\n\t\tfiles,\n\t\tadded: files.reduce((sum, file) => sum + file.added, 0),\n\t\tremoved: files.reduce((sum, file) => sum + file.removed, 0),\n\t};\n}\n\nexport async function createPendingPatchUpdate(\n\tcwd: string,\n\tpatchText: string,\n\tprogress?: ApplyPatchProgress,\n\tpreviewOverride?: ApplyPatchPreview,\n): Promise<{ text: string; details: ApplyPatchToolDetails | undefined }> {\n\tconst title = progress\n\t\t? `Applying patch (${progress.applied + progress.failed}/${progress.total})...`\n\t\t: \"Applying patch...\";\n\tif (previewOverride) {\n\t\treturn {\n\t\t\ttext: `${title}\\n${formatPatchPreview(previewOverride)}`,\n\t\t\tdetails: { preview: previewOverride, progress },\n\t\t};\n\t}\n\n\ttry {\n\t\tconst hunks = parsePatch(patchText);\n\t\tif (hunks.length === 0) return { text: title, details: progress ? { progress } : undefined };\n\t\tconst preview = await createPatchPreview(cwd, hunks);\n\t\tif (preview.files.some((file) => file.diff.trim().length > 0)) {\n\t\t\treturn { text: `${title}\\n${formatPatchPreview(preview)}`, details: { preview, progress } };\n\t\t}\n\t} catch {\n\t\treturn {\n\t\t\ttext: progress ? title : formatPendingPatchPaths(patchText),\n\t\t\tdetails: progress ? { progress } : undefined,\n\t\t};\n\t}\n\treturn { text: progress ? title : formatPendingPatchPaths(patchText), details: progress ? { progress } : undefined };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"seek-sequence.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/seek-sequence.ts"],"names":[],"mappings":"AASA,wBAAgB,oBAAoB,CACnC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,MAAM,EAAE,EACjB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,OAAO,GACV;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,KAAK,CAAA;CAAE,GAAG,SAAS,CAoC1D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAEhH","sourcesContent":["function normalizeSeekLine(line: string): string {\n\treturn line\n\t\t.trim()\n\t\t.replace(/[‐‑‒–—―−]/g, \"-\")\n\t\t.replace(/[‘’‚‛]/g, \"'\")\n\t\t.replace(/[“”„‟]/g, '\"')\n\t\t.replace(/[\\u00A0\\u2002-\\u200A\\u202F\\u205F\\u3000]/g, \" \");\n}\n\nexport function seekSequenceWithFuzz(\n\tlines: string[],\n\tpattern: string[],\n\tstart: number,\n\teof: boolean,\n): { index: number; fuzz: 0 | 1 | 100 | 10000 } | undefined {\n\tif (pattern.length === 0) {\n\t\treturn { index: start, fuzz: 0 };\n\t}\n\tif (pattern.length > lines.length) {\n\t\treturn undefined;\n\t}\n\n\tconst searchStart = eof && lines.length >= pattern.length ? lines.length - pattern.length : start;\n\tconst lastStart = lines.length - pattern.length;\n\tconst matches = (index: number, compare: (left: string, right: string) => boolean): boolean => {\n\t\tfor (let patternIndex = 0; patternIndex < pattern.length; patternIndex++) {\n\t\t\tconst line = lines[index + patternIndex];\n\t\t\tconst expected = pattern[patternIndex];\n\t\t\tif (line === undefined || expected === undefined || !compare(line, expected)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t};\n\n\tfor (let index = searchStart; index <= lastStart; index++) {\n\t\tif (matches(index, (line, expected) => line === expected)) return { index, fuzz: 0 };\n\t}\n\tfor (let index = searchStart; index <= lastStart; index++) {\n\t\tif (matches(index, (line, expected) => line.trimEnd() === expected.trimEnd())) return { index, fuzz: 1 };\n\t}\n\tfor (let index = searchStart; index <= lastStart; index++) {\n\t\tif (matches(index, (line, expected) => line.trim() === expected.trim())) return { index, fuzz: 100 };\n\t}\n\tfor (let index = searchStart; index <= lastStart; index++) {\n\t\tif (matches(index, (line, expected) => normalizeSeekLine(line) === normalizeSeekLine(expected)))\n\t\t\treturn { index, fuzz: 10000 };\n\t}\n\n\treturn undefined;\n}\n\nexport function seekSequence(lines: string[], pattern: string[], start: number, eof: boolean): number | undefined {\n\treturn seekSequenceWithFuzz(lines, pattern, start, eof)?.index;\n}\n"]}
1
+ {"version":3,"file":"seek-sequence.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/seek-sequence.ts"],"names":[],"mappings":"AASA,wBAAgB,oBAAoB,CACnC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,MAAM,EAAE,EACjB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,OAAO,GACV;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,KAAK,CAAA;CAAE,GAAG,SAAS,CAoC1D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAEhH"}
@@ -1 +1 @@
1
- {"version":3,"file":"seek-sequence.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/seek-sequence.ts"],"names":[],"mappings":"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","sourcesContent":["function normalizeSeekLine(line: string): string {\n\treturn line\n\t\t.trim()\n\t\t.replace(/[‐‑‒–—―−]/g, \"-\")\n\t\t.replace(/[‘’‚‛]/g, \"'\")\n\t\t.replace(/[“”„‟]/g, '\"')\n\t\t.replace(/[\\u00A0\\u2002-\\u200A\\u202F\\u205F\\u3000]/g, \" \");\n}\n\nexport function seekSequenceWithFuzz(\n\tlines: string[],\n\tpattern: string[],\n\tstart: number,\n\teof: boolean,\n): { index: number; fuzz: 0 | 1 | 100 | 10000 } | undefined {\n\tif (pattern.length === 0) {\n\t\treturn { index: start, fuzz: 0 };\n\t}\n\tif (pattern.length > lines.length) {\n\t\treturn undefined;\n\t}\n\n\tconst searchStart = eof && lines.length >= pattern.length ? lines.length - pattern.length : start;\n\tconst lastStart = lines.length - pattern.length;\n\tconst matches = (index: number, compare: (left: string, right: string) => boolean): boolean => {\n\t\tfor (let patternIndex = 0; patternIndex < pattern.length; patternIndex++) {\n\t\t\tconst line = lines[index + patternIndex];\n\t\t\tconst expected = pattern[patternIndex];\n\t\t\tif (line === undefined || expected === undefined || !compare(line, expected)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t};\n\n\tfor (let index = searchStart; index <= lastStart; index++) {\n\t\tif (matches(index, (line, expected) => line === expected)) return { index, fuzz: 0 };\n\t}\n\tfor (let index = searchStart; index <= lastStart; index++) {\n\t\tif (matches(index, (line, expected) => line.trimEnd() === expected.trimEnd())) return { index, fuzz: 1 };\n\t}\n\tfor (let index = searchStart; index <= lastStart; index++) {\n\t\tif (matches(index, (line, expected) => line.trim() === expected.trim())) return { index, fuzz: 100 };\n\t}\n\tfor (let index = searchStart; index <= lastStart; index++) {\n\t\tif (matches(index, (line, expected) => normalizeSeekLine(line) === normalizeSeekLine(expected)))\n\t\t\treturn { index, fuzz: 10000 };\n\t}\n\n\treturn undefined;\n}\n\nexport function seekSequence(lines: string[], pattern: string[], start: number, eof: boolean): number | undefined {\n\treturn seekSequenceWithFuzz(lines, pattern, start, eof)?.index;\n}\n"]}
1
+ {"version":3,"file":"seek-sequence.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/seek-sequence.ts"],"names":[],"mappings":"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","sourcesContent":["function normalizeSeekLine(line: string): string {\n\treturn line\n\t\t.trim()\n\t\t.replace(/[‐‑‒–—―−]/g, \"-\")\n\t\t.replace(/[‘’‚‛]/g, \"'\")\n\t\t.replace(/[“”„‟]/g, '\"')\n\t\t.replace(/[\\u00A0\\u2002-\\u200A\\u202F\\u205F\\u3000]/g, \" \");\n}\n\nexport function seekSequenceWithFuzz(\n\tlines: string[],\n\tpattern: string[],\n\tstart: number,\n\teof: boolean,\n): { index: number; fuzz: 0 | 1 | 100 | 10000 } | undefined {\n\tif (pattern.length === 0) {\n\t\treturn { index: start, fuzz: 0 };\n\t}\n\tif (pattern.length > lines.length) {\n\t\treturn undefined;\n\t}\n\n\tconst searchStart = eof && lines.length >= pattern.length ? lines.length - pattern.length : start;\n\tconst lastStart = lines.length - pattern.length;\n\tconst matches = (index: number, compare: (left: string, right: string) => boolean): boolean => {\n\t\tfor (let patternIndex = 0; patternIndex < pattern.length; patternIndex++) {\n\t\t\tconst line = lines[index + patternIndex];\n\t\t\tconst expected = pattern[patternIndex];\n\t\t\tif (line === undefined || expected === undefined || !compare(line, expected)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t};\n\n\tfor (let index = searchStart; index <= lastStart; index++) {\n\t\tif (matches(index, (line, expected) => line === expected)) return { index, fuzz: 0 };\n\t}\n\tfor (let index = searchStart; index <= lastStart; index++) {\n\t\tif (matches(index, (line, expected) => line.trimEnd() === expected.trimEnd())) return { index, fuzz: 1 };\n\t}\n\tfor (let index = searchStart; index <= lastStart; index++) {\n\t\tif (matches(index, (line, expected) => line.trim() === expected.trim())) return { index, fuzz: 100 };\n\t}\n\tfor (let index = searchStart; index <= lastStart; index++) {\n\t\tif (matches(index, (line, expected) => normalizeSeekLine(line) === normalizeSeekLine(expected)))\n\t\t\treturn { index, fuzz: 10000 };\n\t}\n\n\treturn undefined;\n}\n\nexport function seekSequence(lines: string[], pattern: string[], start: number, eof: boolean): number | undefined {\n\treturn seekSequenceWithFuzz(lines, pattern, start, eof)?.index;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"streaming-parser.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/streaming-parser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,YAAY,CAAC;AAY1D,qBAAa,oBAAoB;IAChC,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,IAAI,CAAuB;IACnC,OAAO,CAAC,KAAK,CAAqB;IAElC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE,CAWtC;IAED,MAAM,IAAI,WAAW,EAAE,CAatB;IAED,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,0BAA0B;IAalC,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,WAAW;IAyBnB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,aAAa;IAuBrB,OAAO,CAAC,cAAc;CAkBtB","sourcesContent":["import { normalizePatchText, stripHeredoc } from \"./text.ts\";\nimport type { ParsedPatch, PatchChunk } from \"./types.ts\";\n\nconst BEGIN = \"*** Begin Patch\";\nconst END = \"*** End Patch\";\nconst ADD = \"*** Add File: \";\nconst DELETE = \"*** Delete File: \";\nconst UPDATE = \"*** Update File: \";\nconst MOVE = \"*** Move to: \";\nconst EOF = \"*** End of File\";\n\ntype Mode = \"not-started\" | \"started\" | \"add\" | \"delete\" | \"update\" | \"ended\";\n\nexport class StreamingPatchParser {\n\tprivate lineBuffer = \"\";\n\tprivate mode: Mode = \"not-started\";\n\tprivate hunks: ParsedPatch[] = [];\n\n\tpushDelta(delta: string): ParsedPatch[] {\n\t\tfor (const character of normalizePatchText(delta)) {\n\t\t\tif (character === \"\\n\") {\n\t\t\t\tconst line = this.lineBuffer;\n\t\t\t\tthis.lineBuffer = \"\";\n\t\t\t\tthis.processLine(line);\n\t\t\t} else {\n\t\t\t\tthis.lineBuffer += character;\n\t\t\t}\n\t\t}\n\t\treturn this.snapshot();\n\t}\n\n\tfinish(): ParsedPatch[] {\n\t\tif (this.lineBuffer.length > 0) {\n\t\t\tconst line = this.lineBuffer;\n\t\t\tthis.lineBuffer = \"\";\n\t\t\tif (line.trim() === END) {\n\t\t\t\tthis.ensureUpdateHunkIsNotEmpty(line.trim());\n\t\t\t\tthis.mode = \"ended\";\n\t\t\t} else {\n\t\t\t\tthis.processLine(line);\n\t\t\t}\n\t\t}\n\t\tif (this.mode !== \"ended\") throw new Error(\"The last line of the patch must be '*** End Patch'\");\n\t\treturn this.snapshot();\n\t}\n\n\tprivate snapshot(): ParsedPatch[] {\n\t\treturn structuredClone(this.hunks);\n\t}\n\n\tprivate ensureUpdateHunkIsNotEmpty(line: string): void {\n\t\tconst hunk = this.hunks[this.hunks.length - 1];\n\t\tif (!hunk || hunk.type !== \"update\") return;\n\t\tif (hunk.chunks.length === 0 && this.mode === \"update\") {\n\t\t\tthrow new Error(`Update file hunk for path '${hunk.filePath}' is empty`);\n\t\t}\n\t\tconst chunk = hunk.chunks[hunk.chunks.length - 1];\n\t\tif (chunk && chunk.oldLines.length === 0 && chunk.newLines.length === 0 && chunk.changeContexts.length === 0) {\n\t\t\tif (line === END) throw new Error(\"Update hunk does not contain any lines\");\n\t\t\tthrow new Error(`Unexpected line found in update hunk: '${line}'`);\n\t\t}\n\t}\n\n\tprivate handleHeader(line: string): boolean {\n\t\tif (line === END) {\n\t\t\tthis.ensureUpdateHunkIsNotEmpty(line);\n\t\t\tthis.mode = \"ended\";\n\t\t\treturn true;\n\t\t}\n\t\tif (line.startsWith(ADD)) return this.startAdd(line.slice(ADD.length));\n\t\tif (line.startsWith(DELETE)) return this.startDelete(line.slice(DELETE.length));\n\t\tif (line.startsWith(UPDATE)) return this.startUpdate(line.slice(UPDATE.length));\n\t\treturn false;\n\t}\n\n\tprivate startAdd(filePath: string): true {\n\t\tthis.ensureUpdateHunkIsNotEmpty(`${ADD}${filePath}`);\n\t\tthis.hunks.push({ type: \"add\", filePath, content: \"\" });\n\t\tthis.mode = \"add\";\n\t\treturn true;\n\t}\n\n\tprivate startDelete(filePath: string): true {\n\t\tthis.ensureUpdateHunkIsNotEmpty(`${DELETE}${filePath}`);\n\t\tthis.hunks.push({ type: \"delete\", filePath });\n\t\tthis.mode = \"delete\";\n\t\treturn true;\n\t}\n\n\tprivate startUpdate(filePath: string): true {\n\t\tthis.ensureUpdateHunkIsNotEmpty(`${UPDATE}${filePath}`);\n\t\tthis.hunks.push({ type: \"update\", filePath, chunks: [] });\n\t\tthis.mode = \"update\";\n\t\treturn true;\n\t}\n\n\tprivate currentUpdate(): Extract<ParsedPatch, { type: \"update\" }> {\n\t\tconst hunk = this.hunks[this.hunks.length - 1];\n\t\tif (!hunk || hunk.type !== \"update\") throw new Error(\"Internal parser state error: expected update hunk\");\n\t\treturn hunk;\n\t}\n\n\tprivate currentChunk(): PatchChunk {\n\t\tconst hunk = this.currentUpdate();\n\t\tlet chunk = hunk.chunks[hunk.chunks.length - 1];\n\t\tif (!chunk || chunk.isEndOfFile) {\n\t\t\tchunk = { changeContexts: [], oldLines: [], newLines: [], isEndOfFile: false };\n\t\t\thunk.chunks.push(chunk);\n\t\t}\n\t\treturn chunk;\n\t}\n\n\tprivate processLine(line: string): void {\n\t\tif (this.mode === \"not-started\") {\n\t\t\tif (stripHeredoc(line).trim() === BEGIN) {\n\t\t\t\tthis.mode = \"started\";\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthrow new Error(\"The first line of the patch must be '*** Begin Patch'\");\n\t\t}\n\t\tif (this.mode === \"started\") {\n\t\t\tthis.processStarted(line.trim());\n\t\t\treturn;\n\t\t}\n\t\tif (this.mode === \"add\") {\n\t\t\tthis.processAdd(line);\n\t\t\treturn;\n\t\t}\n\t\tif (this.mode === \"delete\") {\n\t\t\tthis.processDelete(line.trim());\n\t\t\treturn;\n\t\t}\n\t\tif (this.mode === \"update\") {\n\t\t\tthis.processUpdate(line);\n\t\t}\n\t}\n\n\tprivate processStarted(trimmed: string): void {\n\t\tif (this.handleHeader(trimmed)) return;\n\t\tthrow new Error(`'${trimmed}' is not a valid hunk header`);\n\t}\n\n\tprivate processAdd(line: string): void {\n\t\tif (this.handleHeader(line.trim())) return;\n\t\tconst hunk = this.hunks[this.hunks.length - 1];\n\t\tif (line.startsWith(\"+\") && hunk?.type === \"add\") {\n\t\t\thunk.content += `${line.slice(1)}\\n`;\n\t\t\treturn;\n\t\t}\n\t\tthrow new Error(`'${line.trim()}' is not a valid hunk header`);\n\t}\n\n\tprivate processDelete(trimmed: string): void {\n\t\tif (this.handleHeader(trimmed)) return;\n\t\tthrow new Error(`'${trimmed}' is not a valid hunk header`);\n\t}\n\n\tprivate processUpdate(line: string): void {\n\t\tconst updateLine = line.trimEnd();\n\t\tif (this.handleHeader(updateLine)) return;\n\t\tconst hunk = this.currentUpdate();\n\t\tif (hunk.chunks.length === 0 && !hunk.movePath && updateLine.startsWith(MOVE)) {\n\t\t\thunk.movePath = updateLine.slice(MOVE.length);\n\t\t\treturn;\n\t\t}\n\t\tif (updateLine === \"@@\") return;\n\t\tif (updateLine.startsWith(\"@@ \")) {\n\t\t\tthis.currentChunk().changeContexts.push(updateLine.slice(\"@@ \".length));\n\t\t\treturn;\n\t\t}\n\t\tif (updateLine === EOF) {\n\t\t\tconst chunk = this.currentChunk();\n\t\t\tif (chunk.oldLines.length === 0 && chunk.newLines.length === 0)\n\t\t\t\tthrow new Error(\"Update hunk does not contain any lines\");\n\t\t\tchunk.isEndOfFile = true;\n\t\t\treturn;\n\t\t}\n\t\tthis.pushUpdateLine(line);\n\t}\n\n\tprivate pushUpdateLine(line: string): void {\n\t\tconst prefix = line[0];\n\t\tconst value = line.slice(1);\n\t\tconst chunk = this.currentChunk();\n\t\tif (prefix === \" \") {\n\t\t\tchunk.oldLines.push(value);\n\t\t\tchunk.newLines.push(value);\n\t\t} else if (prefix === \"-\") {\n\t\t\tchunk.oldLines.push(value);\n\t\t} else if (prefix === \"+\") {\n\t\t\tchunk.newLines.push(value);\n\t\t} else if (prefix === undefined) {\n\t\t\tchunk.oldLines.push(\"\");\n\t\t\tchunk.newLines.push(\"\");\n\t\t} else {\n\t\t\tthrow new Error(`Unexpected line found in update hunk: '${line}'`);\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"streaming-parser.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/streaming-parser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,YAAY,CAAC;AAY1D,qBAAa,oBAAoB;IAChC,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,IAAI,CAAuB;IACnC,OAAO,CAAC,KAAK,CAAqB;IAElC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE,CAWtC;IAED,MAAM,IAAI,WAAW,EAAE,CAatB;IAED,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,0BAA0B;IAalC,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,WAAW;IAyBnB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,aAAa;IAuBrB,OAAO,CAAC,cAAc;CAkBtB"}