alchemylab-opencode 1.0.7 → 1.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (391) hide show
  1. package/dist/{chunk-B3FN2B2N.js → chunk-3PZZ2D23.js} +7 -3
  2. package/dist/chunk-3PZZ2D23.js.map +7 -0
  3. package/dist/{chunk-LU5XVQUD.js → chunk-EGZMJTLE.js} +7 -7
  4. package/dist/{chunk-LU5XVQUD.js.map → chunk-EGZMJTLE.js.map} +2 -2
  5. package/dist/{chunk-23UYOGZG.js → chunk-ORHZOVWK.js} +6 -6
  6. package/dist/{chunk-TASPMBUL.js → chunk-SV5NEV33.js} +5 -5
  7. package/dist/{chunk-SM6WZDN6.js → chunk-UKQIL5XA.js} +18 -12
  8. package/dist/chunk-UKQIL5XA.js.map +7 -0
  9. package/dist/{chunk-GSE2T5UY.js → chunk-ZFHDPNFZ.js} +4 -4
  10. package/dist/{mcp-XFGN3FWW.js → mcp-66BBNSWA.js} +3 -3
  11. package/dist/{registry-W4MBVBYD.js → registry-YVL3V6Z6.js} +4 -4
  12. package/dist/{run-73HUV4H3.js → run-65PIGE2A.js} +7 -7
  13. package/dist/{run-service-LHEVFBIU.js → run-service-AYATGPA6.js} +2 -2
  14. package/dist/run.js +1 -1
  15. package/dist/serve.js +1 -1
  16. package/dist/{server-2CPOG3LS.js → server-KCG3B4WQ.js} +7 -7
  17. package/dist/{session-M6HOZ56B.js → session-BR5MTI3X.js} +4 -4
  18. package/dist/{share-next-QRBVSD37.js → share-next-EPYQDJ32.js} +5 -5
  19. package/dist/{worktree-3GUHT2P7.js → worktree-PIVTZBUE.js} +6 -6
  20. package/package.json +2 -15
  21. package/packages/opencode/migration/20260409000000_add_session_metadata/migration.sql +1 -0
  22. package/build.mjs +0 -192
  23. package/dist/chunk-B3FN2B2N.js.map +0 -7
  24. package/dist/chunk-SM6WZDN6.js.map +0 -7
  25. package/packages/opencode/package.json +0 -138
  26. package/packages/opencode/src/account/account.sql.ts +0 -39
  27. package/packages/opencode/src/account/index.ts +0 -463
  28. package/packages/opencode/src/account/repo.ts +0 -163
  29. package/packages/opencode/src/account/schema.ts +0 -91
  30. package/packages/opencode/src/acp/README.md +0 -174
  31. package/packages/opencode/src/acp/agent.ts +0 -1847
  32. package/packages/opencode/src/acp/session.ts +0 -116
  33. package/packages/opencode/src/acp/types.ts +0 -24
  34. package/packages/opencode/src/agent/agent.ts +0 -420
  35. package/packages/opencode/src/agent/generate.txt +0 -75
  36. package/packages/opencode/src/agent/prompt/compaction.txt +0 -15
  37. package/packages/opencode/src/agent/prompt/explore.txt +0 -18
  38. package/packages/opencode/src/agent/prompt/summary.txt +0 -11
  39. package/packages/opencode/src/agent/prompt/title.txt +0 -44
  40. package/packages/opencode/src/auth/index.ts +0 -110
  41. package/packages/opencode/src/bus/bus-event.ts +0 -40
  42. package/packages/opencode/src/bus/global.ts +0 -10
  43. package/packages/opencode/src/bus/index.ts +0 -185
  44. package/packages/opencode/src/cli/bootstrap.ts +0 -17
  45. package/packages/opencode/src/cli/cmd/cmd.ts +0 -7
  46. package/packages/opencode/src/cli/cmd/run.ts +0 -689
  47. package/packages/opencode/src/cli/cmd/serve.ts +0 -24
  48. package/packages/opencode/src/cli/cmd/tui/event.ts +0 -49
  49. package/packages/opencode/src/cli/effect/prompt.ts +0 -25
  50. package/packages/opencode/src/cli/error.ts +0 -46
  51. package/packages/opencode/src/cli/heap.ts +0 -59
  52. package/packages/opencode/src/cli/logo.ts +0 -6
  53. package/packages/opencode/src/cli/network.ts +0 -60
  54. package/packages/opencode/src/cli/ui.ts +0 -133
  55. package/packages/opencode/src/cli/upgrade.ts +0 -31
  56. package/packages/opencode/src/command/index.ts +0 -195
  57. package/packages/opencode/src/command/template/initialize.txt +0 -66
  58. package/packages/opencode/src/command/template/review.txt +0 -101
  59. package/packages/opencode/src/config/config.ts +0 -1599
  60. package/packages/opencode/src/config/console-state.ts +0 -15
  61. package/packages/opencode/src/config/markdown.ts +0 -99
  62. package/packages/opencode/src/config/paths.ts +0 -167
  63. package/packages/opencode/src/config/tui-migrate.ts +0 -155
  64. package/packages/opencode/src/config/tui-schema.ts +0 -37
  65. package/packages/opencode/src/config/tui.ts +0 -179
  66. package/packages/opencode/src/control-plane/adaptors/index.ts +0 -20
  67. package/packages/opencode/src/control-plane/adaptors/worktree.ts +0 -42
  68. package/packages/opencode/src/control-plane/schema.ts +0 -17
  69. package/packages/opencode/src/control-plane/sse.ts +0 -66
  70. package/packages/opencode/src/control-plane/types.ts +0 -32
  71. package/packages/opencode/src/control-plane/workspace.sql.ts +0 -17
  72. package/packages/opencode/src/control-plane/workspace.ts +0 -168
  73. package/packages/opencode/src/effect/cross-spawn-spawner.ts +0 -502
  74. package/packages/opencode/src/effect/instance-ref.ts +0 -6
  75. package/packages/opencode/src/effect/instance-registry.ts +0 -12
  76. package/packages/opencode/src/effect/instance-state.ts +0 -82
  77. package/packages/opencode/src/effect/run-service.ts +0 -33
  78. package/packages/opencode/src/effect/runner.ts +0 -216
  79. package/packages/opencode/src/env/index.ts +0 -28
  80. package/packages/opencode/src/file/ignore.ts +0 -82
  81. package/packages/opencode/src/file/index.ts +0 -686
  82. package/packages/opencode/src/file/protected.ts +0 -59
  83. package/packages/opencode/src/file/ripgrep.ts +0 -376
  84. package/packages/opencode/src/file/time.ts +0 -133
  85. package/packages/opencode/src/file/watcher.ts +0 -173
  86. package/packages/opencode/src/filesystem/index.ts +0 -236
  87. package/packages/opencode/src/flag/flag.ts +0 -156
  88. package/packages/opencode/src/format/formatter.ts +0 -413
  89. package/packages/opencode/src/format/index.ts +0 -203
  90. package/packages/opencode/src/git/index.ts +0 -303
  91. package/packages/opencode/src/global/index.ts +0 -56
  92. package/packages/opencode/src/id/id.ts +0 -85
  93. package/packages/opencode/src/ide/index.ts +0 -74
  94. package/packages/opencode/src/installation/index.ts +0 -355
  95. package/packages/opencode/src/installation/meta.ts +0 -7
  96. package/packages/opencode/src/lsp/client.ts +0 -252
  97. package/packages/opencode/src/lsp/index.ts +0 -558
  98. package/packages/opencode/src/lsp/language.ts +0 -120
  99. package/packages/opencode/src/lsp/launch.ts +0 -21
  100. package/packages/opencode/src/lsp/server.ts +0 -1968
  101. package/packages/opencode/src/mcp/auth.ts +0 -173
  102. package/packages/opencode/src/mcp/index.ts +0 -931
  103. package/packages/opencode/src/mcp/oauth-callback.ts +0 -216
  104. package/packages/opencode/src/mcp/oauth-provider.ts +0 -185
  105. package/packages/opencode/src/node-loader.mjs +0 -104
  106. package/packages/opencode/src/node-preload.mjs +0 -39
  107. package/packages/opencode/src/node.ts +0 -1
  108. package/packages/opencode/src/npm/index.ts +0 -188
  109. package/packages/opencode/src/patch/index.ts +0 -680
  110. package/packages/opencode/src/permission/arity.ts +0 -163
  111. package/packages/opencode/src/permission/evaluate.ts +0 -15
  112. package/packages/opencode/src/permission/index.ts +0 -325
  113. package/packages/opencode/src/permission/schema.ts +0 -17
  114. package/packages/opencode/src/plugin/cloudflare.ts +0 -67
  115. package/packages/opencode/src/plugin/codex.ts +0 -608
  116. package/packages/opencode/src/plugin/github-copilot/copilot.ts +0 -361
  117. package/packages/opencode/src/plugin/github-copilot/models.ts +0 -144
  118. package/packages/opencode/src/plugin/index.ts +0 -299
  119. package/packages/opencode/src/plugin/install.ts +0 -439
  120. package/packages/opencode/src/plugin/loader.ts +0 -174
  121. package/packages/opencode/src/plugin/meta.ts +0 -188
  122. package/packages/opencode/src/plugin/shared.ts +0 -323
  123. package/packages/opencode/src/project/bootstrap.ts +0 -31
  124. package/packages/opencode/src/project/instance.ts +0 -175
  125. package/packages/opencode/src/project/project.sql.ts +0 -16
  126. package/packages/opencode/src/project/project.ts +0 -519
  127. package/packages/opencode/src/project/schema.ts +0 -16
  128. package/packages/opencode/src/project/state.ts +0 -70
  129. package/packages/opencode/src/project/vcs.ts +0 -240
  130. package/packages/opencode/src/provider/auth.ts +0 -253
  131. package/packages/opencode/src/provider/error.ts +0 -197
  132. package/packages/opencode/src/provider/models.ts +0 -162
  133. package/packages/opencode/src/provider/provider.ts +0 -1709
  134. package/packages/opencode/src/provider/schema.ts +0 -38
  135. package/packages/opencode/src/provider/sdk/copilot/README.md +0 -5
  136. package/packages/opencode/src/provider/sdk/copilot/chat/convert-to-openai-compatible-chat-messages.ts +0 -170
  137. package/packages/opencode/src/provider/sdk/copilot/chat/get-response-metadata.ts +0 -15
  138. package/packages/opencode/src/provider/sdk/copilot/chat/map-openai-compatible-finish-reason.ts +0 -19
  139. package/packages/opencode/src/provider/sdk/copilot/chat/openai-compatible-api-types.ts +0 -64
  140. package/packages/opencode/src/provider/sdk/copilot/chat/openai-compatible-chat-language-model.ts +0 -815
  141. package/packages/opencode/src/provider/sdk/copilot/chat/openai-compatible-chat-options.ts +0 -28
  142. package/packages/opencode/src/provider/sdk/copilot/chat/openai-compatible-metadata-extractor.ts +0 -44
  143. package/packages/opencode/src/provider/sdk/copilot/chat/openai-compatible-prepare-tools.ts +0 -83
  144. package/packages/opencode/src/provider/sdk/copilot/copilot-provider.ts +0 -100
  145. package/packages/opencode/src/provider/sdk/copilot/index.ts +0 -2
  146. package/packages/opencode/src/provider/sdk/copilot/openai-compatible-error.ts +0 -27
  147. package/packages/opencode/src/provider/sdk/copilot/responses/convert-to-openai-responses-input.ts +0 -335
  148. package/packages/opencode/src/provider/sdk/copilot/responses/map-openai-responses-finish-reason.ts +0 -22
  149. package/packages/opencode/src/provider/sdk/copilot/responses/openai-config.ts +0 -18
  150. package/packages/opencode/src/provider/sdk/copilot/responses/openai-error.ts +0 -22
  151. package/packages/opencode/src/provider/sdk/copilot/responses/openai-responses-api-types.ts +0 -214
  152. package/packages/opencode/src/provider/sdk/copilot/responses/openai-responses-language-model.ts +0 -1769
  153. package/packages/opencode/src/provider/sdk/copilot/responses/openai-responses-prepare-tools.ts +0 -173
  154. package/packages/opencode/src/provider/sdk/copilot/responses/openai-responses-settings.ts +0 -1
  155. package/packages/opencode/src/provider/sdk/copilot/responses/tool/code-interpreter.ts +0 -87
  156. package/packages/opencode/src/provider/sdk/copilot/responses/tool/file-search.ts +0 -127
  157. package/packages/opencode/src/provider/sdk/copilot/responses/tool/image-generation.ts +0 -114
  158. package/packages/opencode/src/provider/sdk/copilot/responses/tool/local-shell.ts +0 -64
  159. package/packages/opencode/src/provider/sdk/copilot/responses/tool/web-search-preview.ts +0 -103
  160. package/packages/opencode/src/provider/sdk/copilot/responses/tool/web-search.ts +0 -102
  161. package/packages/opencode/src/provider/transform.ts +0 -1050
  162. package/packages/opencode/src/pty/index.ts +0 -397
  163. package/packages/opencode/src/pty/pty.node.ts +0 -27
  164. package/packages/opencode/src/pty/pty.ts +0 -25
  165. package/packages/opencode/src/pty/schema.ts +0 -17
  166. package/packages/opencode/src/question/index.ts +0 -224
  167. package/packages/opencode/src/question/schema.ts +0 -17
  168. package/packages/opencode/src/run.ts +0 -28
  169. package/packages/opencode/src/serve.ts +0 -45
  170. package/packages/opencode/src/server/error.ts +0 -36
  171. package/packages/opencode/src/server/event.ts +0 -7
  172. package/packages/opencode/src/server/instance.ts +0 -324
  173. package/packages/opencode/src/server/mdns.ts +0 -60
  174. package/packages/opencode/src/server/middleware.ts +0 -33
  175. package/packages/opencode/src/server/projectors.ts +0 -28
  176. package/packages/opencode/src/server/proxy.ts +0 -131
  177. package/packages/opencode/src/server/router.ts +0 -105
  178. package/packages/opencode/src/server/routes/config.ts +0 -92
  179. package/packages/opencode/src/server/routes/event.ts +0 -83
  180. package/packages/opencode/src/server/routes/experimental.ts +0 -374
  181. package/packages/opencode/src/server/routes/file.ts +0 -197
  182. package/packages/opencode/src/server/routes/global.ts +0 -312
  183. package/packages/opencode/src/server/routes/mcp.ts +0 -225
  184. package/packages/opencode/src/server/routes/permission.ts +0 -69
  185. package/packages/opencode/src/server/routes/project.ts +0 -118
  186. package/packages/opencode/src/server/routes/provider.ts +0 -171
  187. package/packages/opencode/src/server/routes/pty.ts +0 -210
  188. package/packages/opencode/src/server/routes/question.ts +0 -99
  189. package/packages/opencode/src/server/routes/session.ts +0 -1030
  190. package/packages/opencode/src/server/routes/tui.ts +0 -379
  191. package/packages/opencode/src/server/routes/workspace.ts +0 -94
  192. package/packages/opencode/src/server/server.ts +0 -353
  193. package/packages/opencode/src/session/compaction.ts +0 -428
  194. package/packages/opencode/src/session/index.ts +0 -887
  195. package/packages/opencode/src/session/instruction.ts +0 -258
  196. package/packages/opencode/src/session/llm.ts +0 -354
  197. package/packages/opencode/src/session/message-v2.ts +0 -1031
  198. package/packages/opencode/src/session/message.ts +0 -191
  199. package/packages/opencode/src/session/overflow.ts +0 -22
  200. package/packages/opencode/src/session/processor.ts +0 -523
  201. package/packages/opencode/src/session/projectors.ts +0 -135
  202. package/packages/opencode/src/session/prompt/anthropic.txt +0 -105
  203. package/packages/opencode/src/session/prompt/beast.txt +0 -147
  204. package/packages/opencode/src/session/prompt/build-switch.txt +0 -5
  205. package/packages/opencode/src/session/prompt/codex.txt +0 -79
  206. package/packages/opencode/src/session/prompt/copilot-gpt-5.txt +0 -143
  207. package/packages/opencode/src/session/prompt/default.txt +0 -105
  208. package/packages/opencode/src/session/prompt/gemini.txt +0 -155
  209. package/packages/opencode/src/session/prompt/gpt.txt +0 -107
  210. package/packages/opencode/src/session/prompt/kimi.txt +0 -95
  211. package/packages/opencode/src/session/prompt/max-steps.txt +0 -16
  212. package/packages/opencode/src/session/prompt/plan-reminder-anthropic.txt +0 -67
  213. package/packages/opencode/src/session/prompt/plan.txt +0 -26
  214. package/packages/opencode/src/session/prompt/trinity.txt +0 -97
  215. package/packages/opencode/src/session/prompt.ts +0 -1911
  216. package/packages/opencode/src/session/retry.ts +0 -106
  217. package/packages/opencode/src/session/revert.ts +0 -176
  218. package/packages/opencode/src/session/schema.ts +0 -38
  219. package/packages/opencode/src/session/session.sql.ts +0 -103
  220. package/packages/opencode/src/session/status.ts +0 -102
  221. package/packages/opencode/src/session/summary.ts +0 -177
  222. package/packages/opencode/src/session/system.ts +0 -76
  223. package/packages/opencode/src/session/todo.ts +0 -95
  224. package/packages/opencode/src/share/share-next.ts +0 -369
  225. package/packages/opencode/src/share/share.sql.ts +0 -13
  226. package/packages/opencode/src/shell/shell.ts +0 -110
  227. package/packages/opencode/src/skill/discovery.ts +0 -116
  228. package/packages/opencode/src/skill/index.ts +0 -277
  229. package/packages/opencode/src/snapshot/index.ts +0 -726
  230. package/packages/opencode/src/sql.d.ts +0 -4
  231. package/packages/opencode/src/storage/db.node.ts +0 -8
  232. package/packages/opencode/src/storage/db.ts +0 -177
  233. package/packages/opencode/src/storage/json-migration.ts +0 -425
  234. package/packages/opencode/src/storage/schema.sql.ts +0 -10
  235. package/packages/opencode/src/storage/schema.ts +0 -5
  236. package/packages/opencode/src/storage/storage.ts +0 -353
  237. package/packages/opencode/src/sync/README.md +0 -179
  238. package/packages/opencode/src/sync/event.sql.ts +0 -16
  239. package/packages/opencode/src/sync/index.ts +0 -263
  240. package/packages/opencode/src/sync/schema.ts +0 -14
  241. package/packages/opencode/src/tool/apply_patch.ts +0 -281
  242. package/packages/opencode/src/tool/apply_patch.txt +0 -33
  243. package/packages/opencode/src/tool/bash.ts +0 -496
  244. package/packages/opencode/src/tool/bash.txt +0 -117
  245. package/packages/opencode/src/tool/batch.ts +0 -183
  246. package/packages/opencode/src/tool/batch.txt +0 -24
  247. package/packages/opencode/src/tool/codesearch.ts +0 -132
  248. package/packages/opencode/src/tool/codesearch.txt +0 -12
  249. package/packages/opencode/src/tool/edit.ts +0 -667
  250. package/packages/opencode/src/tool/edit.txt +0 -10
  251. package/packages/opencode/src/tool/external-directory.ts +0 -46
  252. package/packages/opencode/src/tool/glob.ts +0 -78
  253. package/packages/opencode/src/tool/glob.txt +0 -6
  254. package/packages/opencode/src/tool/grep.ts +0 -156
  255. package/packages/opencode/src/tool/grep.txt +0 -8
  256. package/packages/opencode/src/tool/invalid.ts +0 -17
  257. package/packages/opencode/src/tool/ls.ts +0 -121
  258. package/packages/opencode/src/tool/ls.txt +0 -1
  259. package/packages/opencode/src/tool/lsp.ts +0 -97
  260. package/packages/opencode/src/tool/lsp.txt +0 -19
  261. package/packages/opencode/src/tool/multiedit.ts +0 -46
  262. package/packages/opencode/src/tool/multiedit.txt +0 -41
  263. package/packages/opencode/src/tool/plan-enter.txt +0 -14
  264. package/packages/opencode/src/tool/plan-exit.txt +0 -13
  265. package/packages/opencode/src/tool/plan.ts +0 -131
  266. package/packages/opencode/src/tool/question.ts +0 -46
  267. package/packages/opencode/src/tool/question.txt +0 -10
  268. package/packages/opencode/src/tool/read.ts +0 -332
  269. package/packages/opencode/src/tool/read.txt +0 -14
  270. package/packages/opencode/src/tool/registry.ts +0 -265
  271. package/packages/opencode/src/tool/schema.ts +0 -17
  272. package/packages/opencode/src/tool/skill.ts +0 -105
  273. package/packages/opencode/src/tool/task.ts +0 -166
  274. package/packages/opencode/src/tool/task.txt +0 -60
  275. package/packages/opencode/src/tool/todo.ts +0 -48
  276. package/packages/opencode/src/tool/todowrite.txt +0 -167
  277. package/packages/opencode/src/tool/tool.ts +0 -112
  278. package/packages/opencode/src/tool/truncate.ts +0 -144
  279. package/packages/opencode/src/tool/truncation-dir.ts +0 -4
  280. package/packages/opencode/src/tool/webfetch.ts +0 -206
  281. package/packages/opencode/src/tool/webfetch.txt +0 -13
  282. package/packages/opencode/src/tool/websearch.ts +0 -150
  283. package/packages/opencode/src/tool/websearch.txt +0 -14
  284. package/packages/opencode/src/tool/write.ts +0 -84
  285. package/packages/opencode/src/tool/write.txt +0 -8
  286. package/packages/opencode/src/util/abort.ts +0 -35
  287. package/packages/opencode/src/util/archive.ts +0 -17
  288. package/packages/opencode/src/util/color.ts +0 -19
  289. package/packages/opencode/src/util/context.ts +0 -25
  290. package/packages/opencode/src/util/data-url.ts +0 -9
  291. package/packages/opencode/src/util/defer.ts +0 -12
  292. package/packages/opencode/src/util/effect-http-client.ts +0 -11
  293. package/packages/opencode/src/util/effect-zod.ts +0 -98
  294. package/packages/opencode/src/util/error.ts +0 -77
  295. package/packages/opencode/src/util/filesystem.ts +0 -245
  296. package/packages/opencode/src/util/flock.ts +0 -333
  297. package/packages/opencode/src/util/fn.ts +0 -21
  298. package/packages/opencode/src/util/format.ts +0 -20
  299. package/packages/opencode/src/util/glob.ts +0 -34
  300. package/packages/opencode/src/util/hash.ts +0 -7
  301. package/packages/opencode/src/util/iife.ts +0 -3
  302. package/packages/opencode/src/util/keybind.ts +0 -103
  303. package/packages/opencode/src/util/lazy.ts +0 -23
  304. package/packages/opencode/src/util/locale.ts +0 -81
  305. package/packages/opencode/src/util/lock.ts +0 -98
  306. package/packages/opencode/src/util/log.ts +0 -182
  307. package/packages/opencode/src/util/network.ts +0 -9
  308. package/packages/opencode/src/util/process.ts +0 -176
  309. package/packages/opencode/src/util/queue.ts +0 -32
  310. package/packages/opencode/src/util/record.ts +0 -3
  311. package/packages/opencode/src/util/rpc.ts +0 -66
  312. package/packages/opencode/src/util/schema.ts +0 -53
  313. package/packages/opencode/src/util/scrap.ts +0 -10
  314. package/packages/opencode/src/util/signal.ts +0 -12
  315. package/packages/opencode/src/util/timeout.ts +0 -14
  316. package/packages/opencode/src/util/token.ts +0 -7
  317. package/packages/opencode/src/util/update-schema.ts +0 -13
  318. package/packages/opencode/src/util/which.ts +0 -14
  319. package/packages/opencode/src/util/wildcard.ts +0 -59
  320. package/packages/opencode/src/worktree/index.ts +0 -612
  321. package/packages/plugin/package.json +0 -38
  322. package/packages/plugin/src/example.ts +0 -18
  323. package/packages/plugin/src/index.ts +0 -282
  324. package/packages/plugin/src/shell.ts +0 -136
  325. package/packages/plugin/src/tool.ts +0 -38
  326. package/packages/plugin/src/tui.ts +0 -508
  327. package/packages/script/package.json +0 -16
  328. package/packages/script/src/index.ts +0 -77
  329. package/packages/sdk/package.json +0 -33
  330. package/packages/sdk/src/client.ts +0 -55
  331. package/packages/sdk/src/gen/client/client.gen.ts +0 -212
  332. package/packages/sdk/src/gen/client/index.ts +0 -25
  333. package/packages/sdk/src/gen/client/types.gen.ts +0 -222
  334. package/packages/sdk/src/gen/client/utils.gen.ts +0 -287
  335. package/packages/sdk/src/gen/client.gen.ts +0 -22
  336. package/packages/sdk/src/gen/core/auth.gen.ts +0 -41
  337. package/packages/sdk/src/gen/core/bodySerializer.gen.ts +0 -74
  338. package/packages/sdk/src/gen/core/params.gen.ts +0 -144
  339. package/packages/sdk/src/gen/core/pathSerializer.gen.ts +0 -167
  340. package/packages/sdk/src/gen/core/queryKeySerializer.gen.ts +0 -111
  341. package/packages/sdk/src/gen/core/serverSentEvents.gen.ts +0 -210
  342. package/packages/sdk/src/gen/core/types.gen.ts +0 -91
  343. package/packages/sdk/src/gen/core/utils.gen.ts +0 -109
  344. package/packages/sdk/src/gen/sdk.gen.ts +0 -1197
  345. package/packages/sdk/src/gen/types.gen.ts +0 -3904
  346. package/packages/sdk/src/index.ts +0 -21
  347. package/packages/sdk/src/process.ts +0 -31
  348. package/packages/sdk/src/server.ts +0 -134
  349. package/packages/sdk/src/v2/client.ts +0 -81
  350. package/packages/sdk/src/v2/gen/client/client.gen.ts +0 -285
  351. package/packages/sdk/src/v2/gen/client/index.ts +0 -25
  352. package/packages/sdk/src/v2/gen/client/types.gen.ts +0 -202
  353. package/packages/sdk/src/v2/gen/client/utils.gen.ts +0 -289
  354. package/packages/sdk/src/v2/gen/client.gen.ts +0 -18
  355. package/packages/sdk/src/v2/gen/core/auth.gen.ts +0 -41
  356. package/packages/sdk/src/v2/gen/core/bodySerializer.gen.ts +0 -82
  357. package/packages/sdk/src/v2/gen/core/params.gen.ts +0 -169
  358. package/packages/sdk/src/v2/gen/core/pathSerializer.gen.ts +0 -167
  359. package/packages/sdk/src/v2/gen/core/queryKeySerializer.gen.ts +0 -111
  360. package/packages/sdk/src/v2/gen/core/serverSentEvents.gen.ts +0 -239
  361. package/packages/sdk/src/v2/gen/core/types.gen.ts +0 -86
  362. package/packages/sdk/src/v2/gen/core/utils.gen.ts +0 -137
  363. package/packages/sdk/src/v2/gen/sdk.gen.ts +0 -4223
  364. package/packages/sdk/src/v2/gen/types.gen.ts +0 -5265
  365. package/packages/sdk/src/v2/index.ts +0 -21
  366. package/packages/sdk/src/v2/server.ts +0 -134
  367. package/packages/util/package.json +0 -20
  368. package/packages/util/src/array.ts +0 -10
  369. package/packages/util/src/binary.ts +0 -41
  370. package/packages/util/src/encode.ts +0 -51
  371. package/packages/util/src/error.ts +0 -54
  372. package/packages/util/src/fn.ts +0 -11
  373. package/packages/util/src/identifier.ts +0 -48
  374. package/packages/util/src/iife.ts +0 -3
  375. package/packages/util/src/lazy.ts +0 -11
  376. package/packages/util/src/module.ts +0 -10
  377. package/packages/util/src/path.ts +0 -37
  378. package/packages/util/src/retry.ts +0 -41
  379. package/packages/util/src/slug.ts +0 -74
  380. package/postinstall.cjs +0 -55
  381. /package/dist/{chunk-23UYOGZG.js.map → chunk-ORHZOVWK.js.map} +0 -0
  382. /package/dist/{chunk-TASPMBUL.js.map → chunk-SV5NEV33.js.map} +0 -0
  383. /package/dist/{chunk-GSE2T5UY.js.map → chunk-ZFHDPNFZ.js.map} +0 -0
  384. /package/dist/{mcp-XFGN3FWW.js.map → mcp-66BBNSWA.js.map} +0 -0
  385. /package/dist/{registry-W4MBVBYD.js.map → registry-YVL3V6Z6.js.map} +0 -0
  386. /package/dist/{run-73HUV4H3.js.map → run-65PIGE2A.js.map} +0 -0
  387. /package/dist/{run-service-LHEVFBIU.js.map → run-service-AYATGPA6.js.map} +0 -0
  388. /package/dist/{server-2CPOG3LS.js.map → server-KCG3B4WQ.js.map} +0 -0
  389. /package/dist/{session-M6HOZ56B.js.map → session-BR5MTI3X.js.map} +0 -0
  390. /package/dist/{share-next-QRBVSD37.js.map → share-next-EPYQDJ32.js.map} +0 -0
  391. /package/dist/{worktree-3GUHT2P7.js.map → worktree-PIVTZBUE.js.map} +0 -0
@@ -1,263 +0,0 @@
1
- import z from "zod"
2
- import type { ZodObject } from "zod"
3
- import { EventEmitter } from "events"
4
- import { Database, eq } from "@/storage/db"
5
- import { Bus as ProjectBus } from "@/bus"
6
- import { BusEvent } from "@/bus/bus-event"
7
- import { EventSequenceTable, EventTable } from "./event.sql"
8
- import { EventID } from "./schema"
9
- import { Flag } from "@/flag/flag"
10
-
11
- export namespace SyncEvent {
12
- export type Definition = {
13
- type: string
14
- version: number
15
- aggregate: string
16
- schema: z.ZodObject
17
-
18
- // This is temporary and only exists for compatibility with bus
19
- // event definitions
20
- properties: z.ZodObject
21
- }
22
-
23
- export type Event<Def extends Definition = Definition> = {
24
- id: string
25
- seq: number
26
- aggregateID: string
27
- data: z.infer<Def["schema"]>
28
- }
29
-
30
- export type SerializedEvent<Def extends Definition = Definition> = Event<Def> & { type: string }
31
-
32
- type ProjectorFunc = (db: Database.TxOrDb, data: unknown) => void
33
-
34
- export const registry = new Map<string, Definition>()
35
- let projectors: Map<Definition, ProjectorFunc> | undefined
36
- const versions = new Map<string, number>()
37
- let frozen = false
38
- let convertEvent: (type: string, event: Event["data"]) => Promise<Record<string, unknown>> | Record<string, unknown>
39
-
40
- const Bus = new EventEmitter<{ event: [{ def: Definition; event: Event }] }>()
41
-
42
- export function reset() {
43
- frozen = false
44
- projectors = undefined
45
- convertEvent = (_, data) => data
46
- }
47
-
48
- export function init(input: { projectors: Array<[Definition, ProjectorFunc]>; convertEvent?: typeof convertEvent }) {
49
- projectors = new Map(input.projectors)
50
-
51
- // Install all the latest event defs to the bus. We only ever emit
52
- // latest versions from code, and keep around old versions for
53
- // replaying. Replaying does not go through the bus, and it
54
- // simplifies the bus to only use unversioned latest events
55
- for (let [type, version] of versions.entries()) {
56
- let def = registry.get(versionedType(type, version))!
57
-
58
- BusEvent.define(def.type, def.properties || def.schema)
59
- }
60
-
61
- // Freeze the system so it clearly errors if events are defined
62
- // after `init` which would cause bugs
63
- frozen = true
64
- convertEvent = input.convertEvent || ((_, data) => data)
65
- }
66
-
67
- export function versionedType<A extends string>(type: A): A
68
- export function versionedType<A extends string, B extends number>(type: A, version: B): `${A}/${B}`
69
- export function versionedType(type: string, version?: number) {
70
- return version ? `${type}.${version}` : type
71
- }
72
-
73
- export function define<
74
- Type extends string,
75
- Agg extends string,
76
- Schema extends ZodObject<Record<Agg, z.ZodType<string>>>,
77
- BusSchema extends ZodObject = Schema,
78
- >(input: { type: Type; version: number; aggregate: Agg; schema: Schema; busSchema?: BusSchema }) {
79
- if (frozen) {
80
- throw new Error("Error defining sync event: sync system has been frozen")
81
- }
82
-
83
- const def = {
84
- type: input.type,
85
- version: input.version,
86
- aggregate: input.aggregate,
87
- schema: input.schema,
88
- properties: input.busSchema ? input.busSchema : input.schema,
89
- }
90
-
91
- versions.set(def.type, Math.max(def.version, versions.get(def.type) || 0))
92
-
93
- registry.set(versionedType(def.type, def.version), def)
94
-
95
- return def
96
- }
97
-
98
- export function project<Def extends Definition>(
99
- def: Def,
100
- func: (db: Database.TxOrDb, data: Event<Def>["data"]) => void,
101
- ): [Definition, ProjectorFunc] {
102
- return [def, func as ProjectorFunc]
103
- }
104
-
105
- function process<Def extends Definition>(def: Def, event: Event<Def>, options: { publish: boolean }) {
106
- if (projectors == null) {
107
- throw new Error("No projectors available. Call `SyncEvent.init` to install projectors")
108
- }
109
-
110
- const projector = projectors.get(def)
111
- if (!projector) {
112
- throw new Error(`Projector not found for event: ${def.type}`)
113
- }
114
-
115
- // idempotent: need to ignore any events already logged
116
-
117
- Database.transaction((tx) => {
118
- projector(tx, event.data)
119
-
120
- if (Flag.OPENCODE_EXPERIMENTAL_WORKSPACES) {
121
- tx.insert(EventSequenceTable)
122
- .values({
123
- aggregate_id: event.aggregateID,
124
- seq: event.seq,
125
- })
126
- .onConflictDoUpdate({
127
- target: EventSequenceTable.aggregate_id,
128
- set: { seq: event.seq },
129
- })
130
- .run()
131
- tx.insert(EventTable)
132
- .values({
133
- id: event.id,
134
- seq: event.seq,
135
- aggregate_id: event.aggregateID,
136
- type: versionedType(def.type, def.version),
137
- data: event.data as Record<string, unknown>,
138
- })
139
- .run()
140
- }
141
-
142
- Database.effect(() => {
143
- Bus.emit("event", {
144
- def,
145
- event,
146
- })
147
-
148
- if (options?.publish) {
149
- const result = convertEvent(def.type, event.data)
150
- if (result instanceof Promise) {
151
- result.then((data) => {
152
- ProjectBus.publish({ type: def.type, properties: def.schema }, data)
153
- })
154
- } else {
155
- ProjectBus.publish({ type: def.type, properties: def.schema }, result)
156
- }
157
- }
158
- })
159
- })
160
- }
161
-
162
- // TODO:
163
- //
164
- // * Support applying multiple events at one time. One transaction,
165
- // and it validets all the sequence ids
166
- // * when loading events from db, apply zod validation to ensure shape
167
-
168
- export function replay(event: SerializedEvent, options?: { republish: boolean }) {
169
- const def = registry.get(event.type)
170
- if (!def) {
171
- throw new Error(`Unknown event type: ${event.type}`)
172
- }
173
-
174
- const row = Database.use((db) =>
175
- db
176
- .select({ seq: EventSequenceTable.seq })
177
- .from(EventSequenceTable)
178
- .where(eq(EventSequenceTable.aggregate_id, event.aggregateID))
179
- .get(),
180
- )
181
-
182
- const latest = row?.seq ?? -1
183
- if (event.seq <= latest) {
184
- return
185
- }
186
-
187
- const expected = latest + 1
188
- if (event.seq !== expected) {
189
- throw new Error(`Sequence mismatch for aggregate "${event.aggregateID}": expected ${expected}, got ${event.seq}`)
190
- }
191
-
192
- process(def, event, { publish: !!options?.republish })
193
- }
194
-
195
- export function run<Def extends Definition>(def: Def, data: Event<Def>["data"]) {
196
- const agg = (data as Record<string, string>)[def.aggregate]
197
- // This should never happen: we've enforced it via typescript in
198
- // the definition
199
- if (agg == null) {
200
- throw new Error(`SyncEvent.run: "${def.aggregate}" required but not found: ${JSON.stringify(data)}`)
201
- }
202
-
203
- if (def.version !== versions.get(def.type)) {
204
- throw new Error(`SyncEvent.run: running old versions of events is not allowed: ${def.type}`)
205
- }
206
-
207
- // Note that this is an "immediate" transaction which is critical.
208
- // We need to make sure we can safely read and write with nothing
209
- // else changing the data from under us
210
- Database.transaction(
211
- (tx) => {
212
- const id = EventID.ascending()
213
- const row = tx
214
- .select({ seq: EventSequenceTable.seq })
215
- .from(EventSequenceTable)
216
- .where(eq(EventSequenceTable.aggregate_id, agg))
217
- .get()
218
- const seq = row?.seq != null ? row.seq + 1 : 0
219
-
220
- const event = { id, seq, aggregateID: agg, data }
221
- process(def, event, { publish: true })
222
- },
223
- {
224
- behavior: "immediate",
225
- },
226
- )
227
- }
228
-
229
- export function remove(aggregateID: string) {
230
- Database.transaction((tx) => {
231
- tx.delete(EventSequenceTable).where(eq(EventSequenceTable.aggregate_id, aggregateID)).run()
232
- tx.delete(EventTable).where(eq(EventTable.aggregate_id, aggregateID)).run()
233
- })
234
- }
235
-
236
- export function subscribeAll(handler: (event: { def: Definition; event: Event }) => void) {
237
- Bus.on("event", handler)
238
- return () => Bus.off("event", handler)
239
- }
240
-
241
- export function payloads() {
242
- return z
243
- .union(
244
- registry
245
- .entries()
246
- .map(([type, def]) => {
247
- return z
248
- .object({
249
- type: z.literal(type),
250
- aggregate: z.literal(def.aggregate),
251
- data: def.schema,
252
- })
253
- .meta({
254
- ref: "SyncEvent" + "." + def.type,
255
- })
256
- })
257
- .toArray() as any,
258
- )
259
- .meta({
260
- ref: "SyncEvent",
261
- })
262
- }
263
- }
@@ -1,14 +0,0 @@
1
- import { Schema } from "effect"
2
- import z from "zod"
3
-
4
- import { Identifier } from "@/id/id"
5
- import { withStatics } from "@/util/schema"
6
-
7
- export const EventID = Schema.String.pipe(
8
- Schema.brand("EventID"),
9
- withStatics((s) => ({
10
- make: (id: string) => s.makeUnsafe(id),
11
- ascending: (id?: string) => s.makeUnsafe(Identifier.ascending("event", id)),
12
- zod: Identifier.schema("event").pipe(z.custom<Schema.Schema.Type<typeof s>>()),
13
- })),
14
- )
@@ -1,281 +0,0 @@
1
- import z from "zod"
2
- import * as path from "path"
3
- import * as fs from "fs/promises"
4
- import { Tool } from "./tool"
5
- import { Bus } from "../bus"
6
- import { FileWatcher } from "../file/watcher"
7
- import { Instance } from "../project/instance"
8
- import { Patch } from "../patch"
9
- import { createTwoFilesPatch, diffLines } from "diff"
10
- import { assertExternalDirectory } from "./external-directory"
11
- import { trimDiff } from "./edit"
12
- import { LSP } from "../lsp"
13
- import { Filesystem } from "../util/filesystem"
14
- import DESCRIPTION from "./apply_patch.txt"
15
- import { File } from "../file"
16
- import { Format } from "../format"
17
-
18
- const PatchParams = z.object({
19
- patchText: z.string().describe("The full patch text that describes all changes to be made"),
20
- })
21
-
22
- export const ApplyPatchTool = Tool.define("apply_patch", {
23
- description: DESCRIPTION,
24
- parameters: PatchParams,
25
- async execute(params, ctx) {
26
- if (!params.patchText) {
27
- throw new Error("patchText is required")
28
- }
29
-
30
- // Parse the patch to get hunks
31
- let hunks: Patch.Hunk[]
32
- try {
33
- const parseResult = Patch.parsePatch(params.patchText)
34
- hunks = parseResult.hunks
35
- } catch (error) {
36
- throw new Error(`apply_patch verification failed: ${error}`)
37
- }
38
-
39
- if (hunks.length === 0) {
40
- const normalized = params.patchText.replace(/\r\n/g, "\n").replace(/\r/g, "\n").trim()
41
- if (normalized === "*** Begin Patch\n*** End Patch") {
42
- throw new Error("patch rejected: empty patch")
43
- }
44
- throw new Error("apply_patch verification failed: no hunks found")
45
- }
46
-
47
- // Validate file paths and check permissions
48
- const fileChanges: Array<{
49
- filePath: string
50
- oldContent: string
51
- newContent: string
52
- type: "add" | "update" | "delete" | "move"
53
- movePath?: string
54
- diff: string
55
- additions: number
56
- deletions: number
57
- }> = []
58
-
59
- let totalDiff = ""
60
-
61
- for (const hunk of hunks) {
62
- const filePath = path.resolve(Instance.directory, hunk.path)
63
- await assertExternalDirectory(ctx, filePath)
64
-
65
- switch (hunk.type) {
66
- case "add": {
67
- const oldContent = ""
68
- const newContent =
69
- hunk.contents.length === 0 || hunk.contents.endsWith("\n") ? hunk.contents : `${hunk.contents}\n`
70
- const diff = trimDiff(createTwoFilesPatch(filePath, filePath, oldContent, newContent))
71
-
72
- let additions = 0
73
- let deletions = 0
74
- for (const change of diffLines(oldContent, newContent)) {
75
- if (change.added) additions += change.count || 0
76
- if (change.removed) deletions += change.count || 0
77
- }
78
-
79
- fileChanges.push({
80
- filePath,
81
- oldContent,
82
- newContent,
83
- type: "add",
84
- diff,
85
- additions,
86
- deletions,
87
- })
88
-
89
- totalDiff += diff + "\n"
90
- break
91
- }
92
-
93
- case "update": {
94
- // Check if file exists for update
95
- const stats = await fs.stat(filePath).catch(() => null)
96
- if (!stats || stats.isDirectory()) {
97
- throw new Error(`apply_patch verification failed: Failed to read file to update: ${filePath}`)
98
- }
99
-
100
- const oldContent = await fs.readFile(filePath, "utf-8")
101
- let newContent = oldContent
102
-
103
- // Apply the update chunks to get new content
104
- try {
105
- const fileUpdate = Patch.deriveNewContentsFromChunks(filePath, hunk.chunks)
106
- newContent = fileUpdate.content
107
- } catch (error) {
108
- throw new Error(`apply_patch verification failed: ${error}`)
109
- }
110
-
111
- const diff = trimDiff(createTwoFilesPatch(filePath, filePath, oldContent, newContent))
112
-
113
- let additions = 0
114
- let deletions = 0
115
- for (const change of diffLines(oldContent, newContent)) {
116
- if (change.added) additions += change.count || 0
117
- if (change.removed) deletions += change.count || 0
118
- }
119
-
120
- const movePath = hunk.move_path ? path.resolve(Instance.directory, hunk.move_path) : undefined
121
- await assertExternalDirectory(ctx, movePath)
122
-
123
- fileChanges.push({
124
- filePath,
125
- oldContent,
126
- newContent,
127
- type: hunk.move_path ? "move" : "update",
128
- movePath,
129
- diff,
130
- additions,
131
- deletions,
132
- })
133
-
134
- totalDiff += diff + "\n"
135
- break
136
- }
137
-
138
- case "delete": {
139
- const contentToDelete = await fs.readFile(filePath, "utf-8").catch((error) => {
140
- throw new Error(`apply_patch verification failed: ${error}`)
141
- })
142
- const deleteDiff = trimDiff(createTwoFilesPatch(filePath, filePath, contentToDelete, ""))
143
-
144
- const deletions = contentToDelete.split("\n").length
145
-
146
- fileChanges.push({
147
- filePath,
148
- oldContent: contentToDelete,
149
- newContent: "",
150
- type: "delete",
151
- diff: deleteDiff,
152
- additions: 0,
153
- deletions,
154
- })
155
-
156
- totalDiff += deleteDiff + "\n"
157
- break
158
- }
159
- }
160
- }
161
-
162
- // Build per-file metadata for UI rendering (used for both permission and result)
163
- const files = fileChanges.map((change) => ({
164
- filePath: change.filePath,
165
- relativePath: path.relative(Instance.worktree, change.movePath ?? change.filePath).replaceAll("\\", "/"),
166
- type: change.type,
167
- diff: change.diff,
168
- before: change.oldContent,
169
- after: change.newContent,
170
- additions: change.additions,
171
- deletions: change.deletions,
172
- movePath: change.movePath,
173
- }))
174
-
175
- // Check permissions if needed
176
- const relativePaths = fileChanges.map((c) => path.relative(Instance.worktree, c.filePath).replaceAll("\\", "/"))
177
- await ctx.ask({
178
- permission: "edit",
179
- patterns: relativePaths,
180
- always: ["*"],
181
- metadata: {
182
- filepath: relativePaths.join(", "),
183
- diff: totalDiff,
184
- files,
185
- },
186
- })
187
-
188
- // Apply the changes
189
- const updates: Array<{ file: string; event: "add" | "change" | "unlink" }> = []
190
-
191
- for (const change of fileChanges) {
192
- const edited = change.type === "delete" ? undefined : (change.movePath ?? change.filePath)
193
- switch (change.type) {
194
- case "add":
195
- // Create parent directories (recursive: true is safe on existing/root dirs)
196
- await fs.mkdir(path.dirname(change.filePath), { recursive: true })
197
- await fs.writeFile(change.filePath, change.newContent, "utf-8")
198
- updates.push({ file: change.filePath, event: "add" })
199
- break
200
-
201
- case "update":
202
- await fs.writeFile(change.filePath, change.newContent, "utf-8")
203
- updates.push({ file: change.filePath, event: "change" })
204
- break
205
-
206
- case "move":
207
- if (change.movePath) {
208
- // Create parent directories (recursive: true is safe on existing/root dirs)
209
- await fs.mkdir(path.dirname(change.movePath), { recursive: true })
210
- await fs.writeFile(change.movePath, change.newContent, "utf-8")
211
- await fs.unlink(change.filePath)
212
- updates.push({ file: change.filePath, event: "unlink" })
213
- updates.push({ file: change.movePath, event: "add" })
214
- }
215
- break
216
-
217
- case "delete":
218
- await fs.unlink(change.filePath)
219
- updates.push({ file: change.filePath, event: "unlink" })
220
- break
221
- }
222
-
223
- if (edited) {
224
- await Format.file(edited)
225
- Bus.publish(File.Event.Edited, { file: edited })
226
- }
227
- }
228
-
229
- // Publish file change events
230
- for (const update of updates) {
231
- await Bus.publish(FileWatcher.Event.Updated, update)
232
- }
233
-
234
- // Notify LSP of file changes and collect diagnostics
235
- for (const change of fileChanges) {
236
- if (change.type === "delete") continue
237
- const target = change.movePath ?? change.filePath
238
- await LSP.touchFile(target, true)
239
- }
240
- const diagnostics = await LSP.diagnostics()
241
-
242
- // Generate output summary
243
- const summaryLines = fileChanges.map((change) => {
244
- if (change.type === "add") {
245
- return `A ${path.relative(Instance.worktree, change.filePath).replaceAll("\\", "/")}`
246
- }
247
- if (change.type === "delete") {
248
- return `D ${path.relative(Instance.worktree, change.filePath).replaceAll("\\", "/")}`
249
- }
250
- const target = change.movePath ?? change.filePath
251
- return `M ${path.relative(Instance.worktree, target).replaceAll("\\", "/")}`
252
- })
253
- let output = `Success. Updated the following files:\n${summaryLines.join("\n")}`
254
-
255
- // Report LSP errors for changed files
256
- const MAX_DIAGNOSTICS_PER_FILE = 20
257
- for (const change of fileChanges) {
258
- if (change.type === "delete") continue
259
- const target = change.movePath ?? change.filePath
260
- const normalized = Filesystem.normalizePath(target)
261
- const issues = diagnostics[normalized] ?? []
262
- const errors = issues.filter((item) => item.severity === 1)
263
- if (errors.length > 0) {
264
- const limited = errors.slice(0, MAX_DIAGNOSTICS_PER_FILE)
265
- const suffix =
266
- errors.length > MAX_DIAGNOSTICS_PER_FILE ? `\n... and ${errors.length - MAX_DIAGNOSTICS_PER_FILE} more` : ""
267
- output += `\n\nLSP errors detected in ${path.relative(Instance.worktree, target).replaceAll("\\", "/")}, please fix:\n<diagnostics file="${target}">\n${limited.map(LSP.Diagnostic.pretty).join("\n")}${suffix}\n</diagnostics>`
268
- }
269
- }
270
-
271
- return {
272
- title: output,
273
- metadata: {
274
- diff: totalDiff,
275
- files,
276
- diagnostics,
277
- },
278
- output,
279
- }
280
- },
281
- })
@@ -1,33 +0,0 @@
1
- Use the `apply_patch` tool to edit files. Your 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:
2
-
3
- *** Begin Patch
4
- [ one or more file sections ]
5
- *** End Patch
6
-
7
- Within that envelope, you get a sequence of file operations.
8
- You MUST include a header to specify the action you are taking.
9
- Each operation starts with one of three headers:
10
-
11
- *** Add File: <path> - create a new file. Every following line is a + line (the initial contents).
12
- *** Delete File: <path> - remove an existing file. Nothing follows.
13
- *** Update File: <path> - patch an existing file in place (optionally with a rename).
14
-
15
- Example patch:
16
-
17
- ```
18
- *** Begin Patch
19
- *** Add File: hello.txt
20
- +Hello world
21
- *** Update File: src/app.py
22
- *** Move to: src/main.py
23
- @@ def greet():
24
- -print("Hi")
25
- +print("Hello, world!")
26
- *** Delete File: obsolete.txt
27
- *** End Patch
28
- ```
29
-
30
- It is important to remember:
31
-
32
- - You must include a header with your intended action (Add/Delete/Update)
33
- - You must prefix new lines with `+` even when creating a new file