alchemylab-opencode 1.0.6 → 1.0.8

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 (413) hide show
  1. package/dist/arktype-aI7TBD0R-HX4BR3RX.js +21 -0
  2. package/dist/arktype-aI7TBD0R-HX4BR3RX.js.map +7 -0
  3. package/dist/{chunk-UWZSRZHA.js → chunk-23UYOGZG.js} +817 -315
  4. package/dist/chunk-23UYOGZG.js.map +7 -0
  5. package/dist/chunk-3AF5MXLF.js +49 -0
  6. package/dist/chunk-3AF5MXLF.js.map +7 -0
  7. package/dist/chunk-FMP3YLWX.js +30 -0
  8. package/dist/chunk-FMP3YLWX.js.map +7 -0
  9. package/dist/{chunk-ANDTK76Q.js → chunk-GSE2T5UY.js} +3 -3
  10. package/dist/{chunk-CYXMV3J3.js → chunk-LU5XVQUD.js} +4 -4
  11. package/dist/chunk-O5VWOPCL.js +106 -0
  12. package/dist/chunk-O5VWOPCL.js.map +7 -0
  13. package/dist/chunk-PWFRMDDF.js +12 -0
  14. package/dist/{chunk-DSPC5QIG.js → chunk-SM6WZDN6.js} +9 -9
  15. package/dist/{chunk-MCWTARFP.js → chunk-TASPMBUL.js} +4 -4
  16. package/dist/chunk-VL3RSEZ2.js +160 -0
  17. package/dist/chunk-VL3RSEZ2.js.map +7 -0
  18. package/dist/default-u_dwuiYb-WOFHQQ3K.js +22 -0
  19. package/dist/effect-QlVUlMFu-UERLUUQW.js +29 -0
  20. package/dist/effect-QlVUlMFu-UERLUUQW.js.map +7 -0
  21. package/dist/{mcp-VAU4RMWH.js → mcp-XFGN3FWW.js} +2 -2
  22. package/dist/{registry-PYMN6L3G.js → registry-W4MBVBYD.js} +3 -3
  23. package/dist/{run-YFVCQJQM.js → run-73HUV4H3.js} +9 -6
  24. package/dist/{run-YFVCQJQM.js.map → run-73HUV4H3.js.map} +1 -1
  25. package/dist/run.js +1 -1
  26. package/dist/serve.js +1 -1
  27. package/dist/{server-K3UGWASP.js → server-2CPOG3LS.js} +9 -6
  28. package/dist/{session-HJFWTM7C.js → session-M6HOZ56B.js} +3 -3
  29. package/dist/session-M6HOZ56B.js.map +7 -0
  30. package/dist/{share-next-55VCIMUH.js → share-next-QRBVSD37.js} +4 -4
  31. package/dist/share-next-QRBVSD37.js.map +7 -0
  32. package/dist/sury-CWZTCd75-XC3NCMTP.js +29 -0
  33. package/dist/sury-CWZTCd75-XC3NCMTP.js.map +7 -0
  34. package/dist/typebox-Dei93FPO-QOBKW4L7.js +21 -0
  35. package/dist/typebox-Dei93FPO-QOBKW4L7.js.map +7 -0
  36. package/dist/valibot--1zFm7rT-LHHLSLYY.js +29 -0
  37. package/dist/valibot--1zFm7rT-LHHLSLYY.js.map +7 -0
  38. package/dist/valibot-D_HTw1Gn-UR62BIDY.js +60 -0
  39. package/dist/valibot-D_HTw1Gn-UR62BIDY.js.map +7 -0
  40. package/dist/{worktree-6GGDLADY.js → worktree-3GUHT2P7.js} +5 -5
  41. package/dist/zod-Bwrt9trS-J2GOMA2R.js +43 -0
  42. package/dist/zod-Bwrt9trS-J2GOMA2R.js.map +7 -0
  43. package/dist/zod-DSgpEGAE-VTXQW6SB.js +56 -0
  44. package/dist/zod-DSgpEGAE-VTXQW6SB.js.map +7 -0
  45. package/package.json +2 -15
  46. package/build.mjs +0 -182
  47. package/dist/chunk-UWZSRZHA.js.map +0 -7
  48. package/packages/opencode/package.json +0 -138
  49. package/packages/opencode/src/account/account.sql.ts +0 -39
  50. package/packages/opencode/src/account/index.ts +0 -463
  51. package/packages/opencode/src/account/repo.ts +0 -163
  52. package/packages/opencode/src/account/schema.ts +0 -91
  53. package/packages/opencode/src/acp/README.md +0 -174
  54. package/packages/opencode/src/acp/agent.ts +0 -1847
  55. package/packages/opencode/src/acp/session.ts +0 -116
  56. package/packages/opencode/src/acp/types.ts +0 -24
  57. package/packages/opencode/src/agent/agent.ts +0 -420
  58. package/packages/opencode/src/agent/generate.txt +0 -75
  59. package/packages/opencode/src/agent/prompt/compaction.txt +0 -15
  60. package/packages/opencode/src/agent/prompt/explore.txt +0 -18
  61. package/packages/opencode/src/agent/prompt/summary.txt +0 -11
  62. package/packages/opencode/src/agent/prompt/title.txt +0 -44
  63. package/packages/opencode/src/auth/index.ts +0 -110
  64. package/packages/opencode/src/bus/bus-event.ts +0 -40
  65. package/packages/opencode/src/bus/global.ts +0 -10
  66. package/packages/opencode/src/bus/index.ts +0 -185
  67. package/packages/opencode/src/cli/bootstrap.ts +0 -17
  68. package/packages/opencode/src/cli/cmd/cmd.ts +0 -7
  69. package/packages/opencode/src/cli/cmd/run.ts +0 -689
  70. package/packages/opencode/src/cli/cmd/serve.ts +0 -24
  71. package/packages/opencode/src/cli/cmd/tui/event.ts +0 -49
  72. package/packages/opencode/src/cli/effect/prompt.ts +0 -25
  73. package/packages/opencode/src/cli/error.ts +0 -46
  74. package/packages/opencode/src/cli/heap.ts +0 -59
  75. package/packages/opencode/src/cli/logo.ts +0 -6
  76. package/packages/opencode/src/cli/network.ts +0 -60
  77. package/packages/opencode/src/cli/ui.ts +0 -133
  78. package/packages/opencode/src/cli/upgrade.ts +0 -31
  79. package/packages/opencode/src/command/index.ts +0 -195
  80. package/packages/opencode/src/command/template/initialize.txt +0 -66
  81. package/packages/opencode/src/command/template/review.txt +0 -101
  82. package/packages/opencode/src/config/config.ts +0 -1599
  83. package/packages/opencode/src/config/console-state.ts +0 -15
  84. package/packages/opencode/src/config/markdown.ts +0 -99
  85. package/packages/opencode/src/config/paths.ts +0 -167
  86. package/packages/opencode/src/config/tui-migrate.ts +0 -155
  87. package/packages/opencode/src/config/tui-schema.ts +0 -37
  88. package/packages/opencode/src/config/tui.ts +0 -179
  89. package/packages/opencode/src/control-plane/adaptors/index.ts +0 -20
  90. package/packages/opencode/src/control-plane/adaptors/worktree.ts +0 -42
  91. package/packages/opencode/src/control-plane/schema.ts +0 -17
  92. package/packages/opencode/src/control-plane/sse.ts +0 -66
  93. package/packages/opencode/src/control-plane/types.ts +0 -32
  94. package/packages/opencode/src/control-plane/workspace.sql.ts +0 -17
  95. package/packages/opencode/src/control-plane/workspace.ts +0 -168
  96. package/packages/opencode/src/effect/cross-spawn-spawner.ts +0 -502
  97. package/packages/opencode/src/effect/instance-ref.ts +0 -6
  98. package/packages/opencode/src/effect/instance-registry.ts +0 -12
  99. package/packages/opencode/src/effect/instance-state.ts +0 -82
  100. package/packages/opencode/src/effect/run-service.ts +0 -33
  101. package/packages/opencode/src/effect/runner.ts +0 -216
  102. package/packages/opencode/src/env/index.ts +0 -28
  103. package/packages/opencode/src/file/ignore.ts +0 -82
  104. package/packages/opencode/src/file/index.ts +0 -686
  105. package/packages/opencode/src/file/protected.ts +0 -59
  106. package/packages/opencode/src/file/ripgrep.ts +0 -376
  107. package/packages/opencode/src/file/time.ts +0 -133
  108. package/packages/opencode/src/file/watcher.ts +0 -173
  109. package/packages/opencode/src/filesystem/index.ts +0 -236
  110. package/packages/opencode/src/flag/flag.ts +0 -156
  111. package/packages/opencode/src/format/formatter.ts +0 -413
  112. package/packages/opencode/src/format/index.ts +0 -203
  113. package/packages/opencode/src/git/index.ts +0 -303
  114. package/packages/opencode/src/global/index.ts +0 -56
  115. package/packages/opencode/src/id/id.ts +0 -85
  116. package/packages/opencode/src/ide/index.ts +0 -74
  117. package/packages/opencode/src/installation/index.ts +0 -355
  118. package/packages/opencode/src/installation/meta.ts +0 -7
  119. package/packages/opencode/src/lsp/client.ts +0 -252
  120. package/packages/opencode/src/lsp/index.ts +0 -558
  121. package/packages/opencode/src/lsp/language.ts +0 -120
  122. package/packages/opencode/src/lsp/launch.ts +0 -21
  123. package/packages/opencode/src/lsp/server.ts +0 -1968
  124. package/packages/opencode/src/mcp/auth.ts +0 -173
  125. package/packages/opencode/src/mcp/index.ts +0 -931
  126. package/packages/opencode/src/mcp/oauth-callback.ts +0 -216
  127. package/packages/opencode/src/mcp/oauth-provider.ts +0 -185
  128. package/packages/opencode/src/node-loader.mjs +0 -104
  129. package/packages/opencode/src/node-preload.mjs +0 -39
  130. package/packages/opencode/src/node.ts +0 -1
  131. package/packages/opencode/src/npm/index.ts +0 -188
  132. package/packages/opencode/src/patch/index.ts +0 -680
  133. package/packages/opencode/src/permission/arity.ts +0 -163
  134. package/packages/opencode/src/permission/evaluate.ts +0 -15
  135. package/packages/opencode/src/permission/index.ts +0 -325
  136. package/packages/opencode/src/permission/schema.ts +0 -17
  137. package/packages/opencode/src/plugin/cloudflare.ts +0 -67
  138. package/packages/opencode/src/plugin/codex.ts +0 -608
  139. package/packages/opencode/src/plugin/github-copilot/copilot.ts +0 -361
  140. package/packages/opencode/src/plugin/github-copilot/models.ts +0 -144
  141. package/packages/opencode/src/plugin/index.ts +0 -299
  142. package/packages/opencode/src/plugin/install.ts +0 -439
  143. package/packages/opencode/src/plugin/loader.ts +0 -174
  144. package/packages/opencode/src/plugin/meta.ts +0 -188
  145. package/packages/opencode/src/plugin/shared.ts +0 -323
  146. package/packages/opencode/src/project/bootstrap.ts +0 -31
  147. package/packages/opencode/src/project/instance.ts +0 -175
  148. package/packages/opencode/src/project/project.sql.ts +0 -16
  149. package/packages/opencode/src/project/project.ts +0 -519
  150. package/packages/opencode/src/project/schema.ts +0 -16
  151. package/packages/opencode/src/project/state.ts +0 -70
  152. package/packages/opencode/src/project/vcs.ts +0 -240
  153. package/packages/opencode/src/provider/auth.ts +0 -253
  154. package/packages/opencode/src/provider/error.ts +0 -197
  155. package/packages/opencode/src/provider/models.ts +0 -162
  156. package/packages/opencode/src/provider/provider.ts +0 -1709
  157. package/packages/opencode/src/provider/schema.ts +0 -38
  158. package/packages/opencode/src/provider/sdk/copilot/README.md +0 -5
  159. package/packages/opencode/src/provider/sdk/copilot/chat/convert-to-openai-compatible-chat-messages.ts +0 -170
  160. package/packages/opencode/src/provider/sdk/copilot/chat/get-response-metadata.ts +0 -15
  161. package/packages/opencode/src/provider/sdk/copilot/chat/map-openai-compatible-finish-reason.ts +0 -19
  162. package/packages/opencode/src/provider/sdk/copilot/chat/openai-compatible-api-types.ts +0 -64
  163. package/packages/opencode/src/provider/sdk/copilot/chat/openai-compatible-chat-language-model.ts +0 -815
  164. package/packages/opencode/src/provider/sdk/copilot/chat/openai-compatible-chat-options.ts +0 -28
  165. package/packages/opencode/src/provider/sdk/copilot/chat/openai-compatible-metadata-extractor.ts +0 -44
  166. package/packages/opencode/src/provider/sdk/copilot/chat/openai-compatible-prepare-tools.ts +0 -83
  167. package/packages/opencode/src/provider/sdk/copilot/copilot-provider.ts +0 -100
  168. package/packages/opencode/src/provider/sdk/copilot/index.ts +0 -2
  169. package/packages/opencode/src/provider/sdk/copilot/openai-compatible-error.ts +0 -27
  170. package/packages/opencode/src/provider/sdk/copilot/responses/convert-to-openai-responses-input.ts +0 -335
  171. package/packages/opencode/src/provider/sdk/copilot/responses/map-openai-responses-finish-reason.ts +0 -22
  172. package/packages/opencode/src/provider/sdk/copilot/responses/openai-config.ts +0 -18
  173. package/packages/opencode/src/provider/sdk/copilot/responses/openai-error.ts +0 -22
  174. package/packages/opencode/src/provider/sdk/copilot/responses/openai-responses-api-types.ts +0 -214
  175. package/packages/opencode/src/provider/sdk/copilot/responses/openai-responses-language-model.ts +0 -1769
  176. package/packages/opencode/src/provider/sdk/copilot/responses/openai-responses-prepare-tools.ts +0 -173
  177. package/packages/opencode/src/provider/sdk/copilot/responses/openai-responses-settings.ts +0 -1
  178. package/packages/opencode/src/provider/sdk/copilot/responses/tool/code-interpreter.ts +0 -87
  179. package/packages/opencode/src/provider/sdk/copilot/responses/tool/file-search.ts +0 -127
  180. package/packages/opencode/src/provider/sdk/copilot/responses/tool/image-generation.ts +0 -114
  181. package/packages/opencode/src/provider/sdk/copilot/responses/tool/local-shell.ts +0 -64
  182. package/packages/opencode/src/provider/sdk/copilot/responses/tool/web-search-preview.ts +0 -103
  183. package/packages/opencode/src/provider/sdk/copilot/responses/tool/web-search.ts +0 -102
  184. package/packages/opencode/src/provider/transform.ts +0 -1050
  185. package/packages/opencode/src/pty/index.ts +0 -397
  186. package/packages/opencode/src/pty/pty.node.ts +0 -27
  187. package/packages/opencode/src/pty/pty.ts +0 -25
  188. package/packages/opencode/src/pty/schema.ts +0 -17
  189. package/packages/opencode/src/question/index.ts +0 -224
  190. package/packages/opencode/src/question/schema.ts +0 -17
  191. package/packages/opencode/src/run.ts +0 -28
  192. package/packages/opencode/src/serve.ts +0 -45
  193. package/packages/opencode/src/server/error.ts +0 -36
  194. package/packages/opencode/src/server/event.ts +0 -7
  195. package/packages/opencode/src/server/instance.ts +0 -324
  196. package/packages/opencode/src/server/mdns.ts +0 -60
  197. package/packages/opencode/src/server/middleware.ts +0 -33
  198. package/packages/opencode/src/server/projectors.ts +0 -28
  199. package/packages/opencode/src/server/proxy.ts +0 -131
  200. package/packages/opencode/src/server/router.ts +0 -105
  201. package/packages/opencode/src/server/routes/config.ts +0 -92
  202. package/packages/opencode/src/server/routes/event.ts +0 -83
  203. package/packages/opencode/src/server/routes/experimental.ts +0 -374
  204. package/packages/opencode/src/server/routes/file.ts +0 -197
  205. package/packages/opencode/src/server/routes/global.ts +0 -312
  206. package/packages/opencode/src/server/routes/mcp.ts +0 -225
  207. package/packages/opencode/src/server/routes/permission.ts +0 -69
  208. package/packages/opencode/src/server/routes/project.ts +0 -118
  209. package/packages/opencode/src/server/routes/provider.ts +0 -171
  210. package/packages/opencode/src/server/routes/pty.ts +0 -210
  211. package/packages/opencode/src/server/routes/question.ts +0 -99
  212. package/packages/opencode/src/server/routes/session.ts +0 -1030
  213. package/packages/opencode/src/server/routes/tui.ts +0 -379
  214. package/packages/opencode/src/server/routes/workspace.ts +0 -94
  215. package/packages/opencode/src/server/server.ts +0 -353
  216. package/packages/opencode/src/session/compaction.ts +0 -428
  217. package/packages/opencode/src/session/index.ts +0 -887
  218. package/packages/opencode/src/session/instruction.ts +0 -258
  219. package/packages/opencode/src/session/llm.ts +0 -354
  220. package/packages/opencode/src/session/message-v2.ts +0 -1031
  221. package/packages/opencode/src/session/message.ts +0 -191
  222. package/packages/opencode/src/session/overflow.ts +0 -22
  223. package/packages/opencode/src/session/processor.ts +0 -523
  224. package/packages/opencode/src/session/projectors.ts +0 -135
  225. package/packages/opencode/src/session/prompt/anthropic.txt +0 -105
  226. package/packages/opencode/src/session/prompt/beast.txt +0 -147
  227. package/packages/opencode/src/session/prompt/build-switch.txt +0 -5
  228. package/packages/opencode/src/session/prompt/codex.txt +0 -79
  229. package/packages/opencode/src/session/prompt/copilot-gpt-5.txt +0 -143
  230. package/packages/opencode/src/session/prompt/default.txt +0 -105
  231. package/packages/opencode/src/session/prompt/gemini.txt +0 -155
  232. package/packages/opencode/src/session/prompt/gpt.txt +0 -107
  233. package/packages/opencode/src/session/prompt/kimi.txt +0 -95
  234. package/packages/opencode/src/session/prompt/max-steps.txt +0 -16
  235. package/packages/opencode/src/session/prompt/plan-reminder-anthropic.txt +0 -67
  236. package/packages/opencode/src/session/prompt/plan.txt +0 -26
  237. package/packages/opencode/src/session/prompt/trinity.txt +0 -97
  238. package/packages/opencode/src/session/prompt.ts +0 -1911
  239. package/packages/opencode/src/session/retry.ts +0 -106
  240. package/packages/opencode/src/session/revert.ts +0 -176
  241. package/packages/opencode/src/session/schema.ts +0 -38
  242. package/packages/opencode/src/session/session.sql.ts +0 -103
  243. package/packages/opencode/src/session/status.ts +0 -102
  244. package/packages/opencode/src/session/summary.ts +0 -177
  245. package/packages/opencode/src/session/system.ts +0 -76
  246. package/packages/opencode/src/session/todo.ts +0 -95
  247. package/packages/opencode/src/share/share-next.ts +0 -369
  248. package/packages/opencode/src/share/share.sql.ts +0 -13
  249. package/packages/opencode/src/shell/shell.ts +0 -110
  250. package/packages/opencode/src/skill/discovery.ts +0 -116
  251. package/packages/opencode/src/skill/index.ts +0 -277
  252. package/packages/opencode/src/snapshot/index.ts +0 -726
  253. package/packages/opencode/src/sql.d.ts +0 -4
  254. package/packages/opencode/src/storage/db.node.ts +0 -8
  255. package/packages/opencode/src/storage/db.ts +0 -177
  256. package/packages/opencode/src/storage/json-migration.ts +0 -425
  257. package/packages/opencode/src/storage/schema.sql.ts +0 -10
  258. package/packages/opencode/src/storage/schema.ts +0 -5
  259. package/packages/opencode/src/storage/storage.ts +0 -353
  260. package/packages/opencode/src/sync/README.md +0 -179
  261. package/packages/opencode/src/sync/event.sql.ts +0 -16
  262. package/packages/opencode/src/sync/index.ts +0 -263
  263. package/packages/opencode/src/sync/schema.ts +0 -14
  264. package/packages/opencode/src/tool/apply_patch.ts +0 -281
  265. package/packages/opencode/src/tool/apply_patch.txt +0 -33
  266. package/packages/opencode/src/tool/bash.ts +0 -496
  267. package/packages/opencode/src/tool/bash.txt +0 -117
  268. package/packages/opencode/src/tool/batch.ts +0 -183
  269. package/packages/opencode/src/tool/batch.txt +0 -24
  270. package/packages/opencode/src/tool/codesearch.ts +0 -132
  271. package/packages/opencode/src/tool/codesearch.txt +0 -12
  272. package/packages/opencode/src/tool/edit.ts +0 -667
  273. package/packages/opencode/src/tool/edit.txt +0 -10
  274. package/packages/opencode/src/tool/external-directory.ts +0 -46
  275. package/packages/opencode/src/tool/glob.ts +0 -78
  276. package/packages/opencode/src/tool/glob.txt +0 -6
  277. package/packages/opencode/src/tool/grep.ts +0 -156
  278. package/packages/opencode/src/tool/grep.txt +0 -8
  279. package/packages/opencode/src/tool/invalid.ts +0 -17
  280. package/packages/opencode/src/tool/ls.ts +0 -121
  281. package/packages/opencode/src/tool/ls.txt +0 -1
  282. package/packages/opencode/src/tool/lsp.ts +0 -97
  283. package/packages/opencode/src/tool/lsp.txt +0 -19
  284. package/packages/opencode/src/tool/multiedit.ts +0 -46
  285. package/packages/opencode/src/tool/multiedit.txt +0 -41
  286. package/packages/opencode/src/tool/plan-enter.txt +0 -14
  287. package/packages/opencode/src/tool/plan-exit.txt +0 -13
  288. package/packages/opencode/src/tool/plan.ts +0 -131
  289. package/packages/opencode/src/tool/question.ts +0 -46
  290. package/packages/opencode/src/tool/question.txt +0 -10
  291. package/packages/opencode/src/tool/read.ts +0 -332
  292. package/packages/opencode/src/tool/read.txt +0 -14
  293. package/packages/opencode/src/tool/registry.ts +0 -265
  294. package/packages/opencode/src/tool/schema.ts +0 -17
  295. package/packages/opencode/src/tool/skill.ts +0 -105
  296. package/packages/opencode/src/tool/task.ts +0 -166
  297. package/packages/opencode/src/tool/task.txt +0 -60
  298. package/packages/opencode/src/tool/todo.ts +0 -48
  299. package/packages/opencode/src/tool/todowrite.txt +0 -167
  300. package/packages/opencode/src/tool/tool.ts +0 -112
  301. package/packages/opencode/src/tool/truncate.ts +0 -144
  302. package/packages/opencode/src/tool/truncation-dir.ts +0 -4
  303. package/packages/opencode/src/tool/webfetch.ts +0 -206
  304. package/packages/opencode/src/tool/webfetch.txt +0 -13
  305. package/packages/opencode/src/tool/websearch.ts +0 -150
  306. package/packages/opencode/src/tool/websearch.txt +0 -14
  307. package/packages/opencode/src/tool/write.ts +0 -84
  308. package/packages/opencode/src/tool/write.txt +0 -8
  309. package/packages/opencode/src/util/abort.ts +0 -35
  310. package/packages/opencode/src/util/archive.ts +0 -17
  311. package/packages/opencode/src/util/color.ts +0 -19
  312. package/packages/opencode/src/util/context.ts +0 -25
  313. package/packages/opencode/src/util/data-url.ts +0 -9
  314. package/packages/opencode/src/util/defer.ts +0 -12
  315. package/packages/opencode/src/util/effect-http-client.ts +0 -11
  316. package/packages/opencode/src/util/effect-zod.ts +0 -98
  317. package/packages/opencode/src/util/error.ts +0 -77
  318. package/packages/opencode/src/util/filesystem.ts +0 -245
  319. package/packages/opencode/src/util/flock.ts +0 -333
  320. package/packages/opencode/src/util/fn.ts +0 -21
  321. package/packages/opencode/src/util/format.ts +0 -20
  322. package/packages/opencode/src/util/glob.ts +0 -34
  323. package/packages/opencode/src/util/hash.ts +0 -7
  324. package/packages/opencode/src/util/iife.ts +0 -3
  325. package/packages/opencode/src/util/keybind.ts +0 -103
  326. package/packages/opencode/src/util/lazy.ts +0 -23
  327. package/packages/opencode/src/util/locale.ts +0 -81
  328. package/packages/opencode/src/util/lock.ts +0 -98
  329. package/packages/opencode/src/util/log.ts +0 -182
  330. package/packages/opencode/src/util/network.ts +0 -9
  331. package/packages/opencode/src/util/process.ts +0 -176
  332. package/packages/opencode/src/util/queue.ts +0 -32
  333. package/packages/opencode/src/util/record.ts +0 -3
  334. package/packages/opencode/src/util/rpc.ts +0 -66
  335. package/packages/opencode/src/util/schema.ts +0 -53
  336. package/packages/opencode/src/util/scrap.ts +0 -10
  337. package/packages/opencode/src/util/signal.ts +0 -12
  338. package/packages/opencode/src/util/timeout.ts +0 -14
  339. package/packages/opencode/src/util/token.ts +0 -7
  340. package/packages/opencode/src/util/update-schema.ts +0 -13
  341. package/packages/opencode/src/util/which.ts +0 -14
  342. package/packages/opencode/src/util/wildcard.ts +0 -59
  343. package/packages/opencode/src/worktree/index.ts +0 -612
  344. package/packages/plugin/package.json +0 -38
  345. package/packages/plugin/src/example.ts +0 -18
  346. package/packages/plugin/src/index.ts +0 -282
  347. package/packages/plugin/src/shell.ts +0 -136
  348. package/packages/plugin/src/tool.ts +0 -38
  349. package/packages/plugin/src/tui.ts +0 -508
  350. package/packages/script/package.json +0 -16
  351. package/packages/script/src/index.ts +0 -77
  352. package/packages/sdk/package.json +0 -33
  353. package/packages/sdk/src/client.ts +0 -55
  354. package/packages/sdk/src/gen/client/client.gen.ts +0 -212
  355. package/packages/sdk/src/gen/client/index.ts +0 -25
  356. package/packages/sdk/src/gen/client/types.gen.ts +0 -222
  357. package/packages/sdk/src/gen/client/utils.gen.ts +0 -287
  358. package/packages/sdk/src/gen/client.gen.ts +0 -22
  359. package/packages/sdk/src/gen/core/auth.gen.ts +0 -41
  360. package/packages/sdk/src/gen/core/bodySerializer.gen.ts +0 -74
  361. package/packages/sdk/src/gen/core/params.gen.ts +0 -144
  362. package/packages/sdk/src/gen/core/pathSerializer.gen.ts +0 -167
  363. package/packages/sdk/src/gen/core/queryKeySerializer.gen.ts +0 -111
  364. package/packages/sdk/src/gen/core/serverSentEvents.gen.ts +0 -210
  365. package/packages/sdk/src/gen/core/types.gen.ts +0 -91
  366. package/packages/sdk/src/gen/core/utils.gen.ts +0 -109
  367. package/packages/sdk/src/gen/sdk.gen.ts +0 -1197
  368. package/packages/sdk/src/gen/types.gen.ts +0 -3904
  369. package/packages/sdk/src/index.ts +0 -21
  370. package/packages/sdk/src/process.ts +0 -31
  371. package/packages/sdk/src/server.ts +0 -134
  372. package/packages/sdk/src/v2/client.ts +0 -81
  373. package/packages/sdk/src/v2/gen/client/client.gen.ts +0 -285
  374. package/packages/sdk/src/v2/gen/client/index.ts +0 -25
  375. package/packages/sdk/src/v2/gen/client/types.gen.ts +0 -202
  376. package/packages/sdk/src/v2/gen/client/utils.gen.ts +0 -289
  377. package/packages/sdk/src/v2/gen/client.gen.ts +0 -18
  378. package/packages/sdk/src/v2/gen/core/auth.gen.ts +0 -41
  379. package/packages/sdk/src/v2/gen/core/bodySerializer.gen.ts +0 -82
  380. package/packages/sdk/src/v2/gen/core/params.gen.ts +0 -169
  381. package/packages/sdk/src/v2/gen/core/pathSerializer.gen.ts +0 -167
  382. package/packages/sdk/src/v2/gen/core/queryKeySerializer.gen.ts +0 -111
  383. package/packages/sdk/src/v2/gen/core/serverSentEvents.gen.ts +0 -239
  384. package/packages/sdk/src/v2/gen/core/types.gen.ts +0 -86
  385. package/packages/sdk/src/v2/gen/core/utils.gen.ts +0 -137
  386. package/packages/sdk/src/v2/gen/sdk.gen.ts +0 -4223
  387. package/packages/sdk/src/v2/gen/types.gen.ts +0 -5265
  388. package/packages/sdk/src/v2/index.ts +0 -21
  389. package/packages/sdk/src/v2/server.ts +0 -134
  390. package/packages/util/package.json +0 -20
  391. package/packages/util/src/array.ts +0 -10
  392. package/packages/util/src/binary.ts +0 -41
  393. package/packages/util/src/encode.ts +0 -51
  394. package/packages/util/src/error.ts +0 -54
  395. package/packages/util/src/fn.ts +0 -11
  396. package/packages/util/src/identifier.ts +0 -48
  397. package/packages/util/src/iife.ts +0 -3
  398. package/packages/util/src/lazy.ts +0 -11
  399. package/packages/util/src/module.ts +0 -10
  400. package/packages/util/src/path.ts +0 -37
  401. package/packages/util/src/retry.ts +0 -41
  402. package/packages/util/src/slug.ts +0 -74
  403. package/postinstall.cjs +0 -55
  404. /package/dist/{chunk-ANDTK76Q.js.map → chunk-GSE2T5UY.js.map} +0 -0
  405. /package/dist/{chunk-CYXMV3J3.js.map → chunk-LU5XVQUD.js.map} +0 -0
  406. /package/dist/{mcp-VAU4RMWH.js.map → chunk-PWFRMDDF.js.map} +0 -0
  407. /package/dist/{chunk-DSPC5QIG.js.map → chunk-SM6WZDN6.js.map} +0 -0
  408. /package/dist/{chunk-MCWTARFP.js.map → chunk-TASPMBUL.js.map} +0 -0
  409. /package/dist/{registry-PYMN6L3G.js.map → default-u_dwuiYb-WOFHQQ3K.js.map} +0 -0
  410. /package/dist/{server-K3UGWASP.js.map → mcp-XFGN3FWW.js.map} +0 -0
  411. /package/dist/{session-HJFWTM7C.js.map → registry-W4MBVBYD.js.map} +0 -0
  412. /package/dist/{share-next-55VCIMUH.js.map → server-2CPOG3LS.js.map} +0 -0
  413. /package/dist/{worktree-6GGDLADY.js.map → worktree-3GUHT2P7.js.map} +0 -0
@@ -1,245 +0,0 @@
1
- import { chmod, mkdir, readFile, stat as statFile, writeFile } from "fs/promises"
2
- import { createWriteStream, existsSync, statSync } from "fs"
3
- import { lookup } from "mime-types"
4
- import { realpathSync } from "fs"
5
- import { dirname, join, relative, resolve as pathResolve, win32 } from "path"
6
- import { Readable } from "stream"
7
- import { pipeline } from "stream/promises"
8
- import { Glob } from "./glob"
9
-
10
- export namespace Filesystem {
11
- // Fast sync version for metadata checks
12
- export async function exists(p: string): Promise<boolean> {
13
- return existsSync(p)
14
- }
15
-
16
- export async function isDir(p: string): Promise<boolean> {
17
- try {
18
- return statSync(p).isDirectory()
19
- } catch {
20
- return false
21
- }
22
- }
23
-
24
- export function stat(p: string): ReturnType<typeof statSync> | undefined {
25
- return statSync(p, { throwIfNoEntry: false }) ?? undefined
26
- }
27
-
28
- export async function statAsync(p: string): Promise<ReturnType<typeof statSync> | undefined> {
29
- return statFile(p).catch((e) => {
30
- if (isEnoent(e)) return undefined
31
- throw e
32
- })
33
- }
34
-
35
- export async function size(p: string): Promise<number> {
36
- const s = stat(p)?.size ?? 0
37
- return typeof s === "bigint" ? Number(s) : s
38
- }
39
-
40
- export async function readText(p: string): Promise<string> {
41
- return readFile(p, "utf-8")
42
- }
43
-
44
- export async function readJson<T = any>(p: string): Promise<T> {
45
- return JSON.parse(await readFile(p, "utf-8"))
46
- }
47
-
48
- export async function readBytes(p: string): Promise<Buffer> {
49
- return readFile(p)
50
- }
51
-
52
- export async function readArrayBuffer(p: string): Promise<ArrayBuffer> {
53
- const buf = await readFile(p)
54
- return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength) as ArrayBuffer
55
- }
56
-
57
- function isEnoent(e: unknown): e is { code: "ENOENT" } {
58
- return typeof e === "object" && e !== null && "code" in e && (e as { code: string }).code === "ENOENT"
59
- }
60
-
61
- export async function write(p: string, content: string | Buffer | Uint8Array, mode?: number): Promise<void> {
62
- try {
63
- if (mode) {
64
- await writeFile(p, content, { mode })
65
- } else {
66
- await writeFile(p, content)
67
- }
68
- } catch (e) {
69
- if (isEnoent(e)) {
70
- await mkdir(dirname(p), { recursive: true })
71
- if (mode) {
72
- await writeFile(p, content, { mode })
73
- } else {
74
- await writeFile(p, content)
75
- }
76
- return
77
- }
78
- throw e
79
- }
80
- }
81
-
82
- export async function writeJson(p: string, data: unknown, mode?: number): Promise<void> {
83
- return write(p, JSON.stringify(data, null, 2), mode)
84
- }
85
-
86
- export async function writeStream(
87
- p: string,
88
- stream: ReadableStream<Uint8Array> | Readable,
89
- mode?: number,
90
- ): Promise<void> {
91
- const dir = dirname(p)
92
- if (!existsSync(dir)) {
93
- await mkdir(dir, { recursive: true })
94
- }
95
-
96
- const nodeStream = stream instanceof ReadableStream ? Readable.fromWeb(stream as any) : stream
97
- const writeStream = createWriteStream(p)
98
- await pipeline(nodeStream, writeStream)
99
-
100
- if (mode) {
101
- await chmod(p, mode)
102
- }
103
- }
104
-
105
- export function mimeType(p: string): string {
106
- return lookup(p) || "application/octet-stream"
107
- }
108
-
109
- /**
110
- * On Windows, normalize a path to its canonical casing using the filesystem.
111
- * This is needed because Windows paths are case-insensitive but LSP servers
112
- * may return paths with different casing than what we send them.
113
- */
114
- export function normalizePath(p: string): string {
115
- if (process.platform !== "win32") return p
116
- const resolved = win32.normalize(win32.resolve(windowsPath(p)))
117
- try {
118
- return realpathSync.native(resolved)
119
- } catch {
120
- return resolved
121
- }
122
- }
123
-
124
- export function normalizePathPattern(p: string): string {
125
- if (process.platform !== "win32") return p
126
- if (p === "*") return p
127
- const match = p.match(/^(.*)[\\/]\*$/)
128
- if (!match) return normalizePath(p)
129
- const dir = /^[A-Za-z]:$/.test(match[1]) ? match[1] + "\\" : match[1]
130
- return join(normalizePath(dir), "*")
131
- }
132
-
133
- // We cannot rely on path.resolve() here because git.exe may come from Git Bash, Cygwin, or MSYS2, so we need to translate these paths at the boundary.
134
- // Also resolves symlinks so that callers using the result as a cache key
135
- // always get the same canonical path for a given physical directory.
136
- export function resolve(p: string): string {
137
- const resolved = pathResolve(windowsPath(p))
138
- try {
139
- return normalizePath(realpathSync(resolved))
140
- } catch (e) {
141
- if (isEnoent(e)) return normalizePath(resolved)
142
- throw e
143
- }
144
- }
145
-
146
- export function windowsPath(p: string): string {
147
- if (process.platform !== "win32") return p
148
- return (
149
- p
150
- .replace(/^\/([a-zA-Z]):(?:[\\/]|$)/, (_, drive) => `${drive.toUpperCase()}:/`)
151
- // Git Bash for Windows paths are typically /<drive>/...
152
- .replace(/^\/([a-zA-Z])(?:\/|$)/, (_, drive) => `${drive.toUpperCase()}:/`)
153
- // Cygwin git paths are typically /cygdrive/<drive>/...
154
- .replace(/^\/cygdrive\/([a-zA-Z])(?:\/|$)/, (_, drive) => `${drive.toUpperCase()}:/`)
155
- // WSL paths are typically /mnt/<drive>/...
156
- .replace(/^\/mnt\/([a-zA-Z])(?:\/|$)/, (_, drive) => `${drive.toUpperCase()}:/`)
157
- )
158
- }
159
- export function overlaps(a: string, b: string) {
160
- const relA = relative(a, b)
161
- const relB = relative(b, a)
162
- return !relA || !relA.startsWith("..") || !relB || !relB.startsWith("..")
163
- }
164
-
165
- export function contains(parent: string, child: string) {
166
- return !relative(parent, child).startsWith("..")
167
- }
168
-
169
- export async function findUp(
170
- target: string,
171
- start: string,
172
- stop?: string,
173
- options?: { rootFirst?: boolean },
174
- ): Promise<string[]>
175
- export async function findUp(
176
- target: string[],
177
- start: string,
178
- stop?: string,
179
- options?: { rootFirst?: boolean },
180
- ): Promise<string[]>
181
- export async function findUp(
182
- target: string | string[],
183
- start: string,
184
- stop?: string,
185
- options?: { rootFirst?: boolean },
186
- ) {
187
- const dirs = [start]
188
- let current = start
189
- while (true) {
190
- if (stop === current) break
191
- const parent = dirname(current)
192
- if (parent === current) break
193
- dirs.push(parent)
194
- current = parent
195
- }
196
-
197
- const targets = Array.isArray(target) ? target : [target]
198
- const result = []
199
- for (const dir of options?.rootFirst ? dirs.toReversed() : dirs) {
200
- for (const item of targets) {
201
- const search = join(dir, item)
202
- if (await exists(search)) result.push(search)
203
- }
204
- }
205
- return result
206
- }
207
-
208
- export async function* up(options: { targets: string[]; start: string; stop?: string }) {
209
- const { targets, start, stop } = options
210
- let current = start
211
- while (true) {
212
- for (const target of targets) {
213
- const search = join(current, target)
214
- if (await exists(search)) yield search
215
- }
216
- if (stop === current) break
217
- const parent = dirname(current)
218
- if (parent === current) break
219
- current = parent
220
- }
221
- }
222
-
223
- export async function globUp(pattern: string, start: string, stop?: string) {
224
- let current = start
225
- const result = []
226
- while (true) {
227
- try {
228
- const matches = await Glob.scan(pattern, {
229
- cwd: current,
230
- absolute: true,
231
- include: "file",
232
- dot: true,
233
- })
234
- result.push(...matches)
235
- } catch {
236
- // Skip invalid glob patterns
237
- }
238
- if (stop === current) break
239
- const parent = dirname(current)
240
- if (parent === current) break
241
- current = parent
242
- }
243
- return result
244
- }
245
- }
@@ -1,333 +0,0 @@
1
- import path from "path"
2
- import os from "os"
3
- import { randomBytes, randomUUID } from "crypto"
4
- import { mkdir, readFile, rm, stat, utimes, writeFile } from "fs/promises"
5
- import { Global } from "@/global"
6
- import { Hash } from "@/util/hash"
7
-
8
- export namespace Flock {
9
- const root = path.join(Global.Path.state, "locks")
10
- // Defaults for callers that do not provide timing options.
11
- const defaultOpts = {
12
- staleMs: 60_000,
13
- timeoutMs: 5 * 60_000,
14
- baseDelayMs: 100,
15
- maxDelayMs: 2_000,
16
- }
17
-
18
- export interface WaitEvent {
19
- key: string
20
- attempt: number
21
- delay: number
22
- waited: number
23
- }
24
-
25
- export type Wait = (input: WaitEvent) => void | Promise<void>
26
-
27
- export interface Options {
28
- dir?: string
29
- signal?: AbortSignal
30
- staleMs?: number
31
- timeoutMs?: number
32
- baseDelayMs?: number
33
- maxDelayMs?: number
34
- onWait?: Wait
35
- }
36
-
37
- type Opts = {
38
- staleMs: number
39
- timeoutMs: number
40
- baseDelayMs: number
41
- maxDelayMs: number
42
- }
43
-
44
- type Owned = {
45
- acquired: true
46
- startHeartbeat: (intervalMs?: number) => void
47
- release: () => Promise<void>
48
- }
49
-
50
- export interface Lease {
51
- release: () => Promise<void>
52
- [Symbol.asyncDispose]: () => Promise<void>
53
- }
54
-
55
- function code(err: unknown) {
56
- if (typeof err !== "object" || err === null || !("code" in err)) return
57
- const value = err.code
58
- if (typeof value !== "string") return
59
- return value
60
- }
61
-
62
- function sleep(ms: number, signal?: AbortSignal) {
63
- return new Promise<void>((resolve, reject) => {
64
- if (signal?.aborted) {
65
- reject(signal.reason ?? new Error("Aborted"))
66
- return
67
- }
68
-
69
- let timer: NodeJS.Timeout | undefined
70
-
71
- const done = () => {
72
- signal?.removeEventListener("abort", abort)
73
- resolve()
74
- }
75
-
76
- const abort = () => {
77
- if (timer) {
78
- clearTimeout(timer)
79
- }
80
- signal?.removeEventListener("abort", abort)
81
- reject(signal?.reason ?? new Error("Aborted"))
82
- }
83
-
84
- signal?.addEventListener("abort", abort, { once: true })
85
- timer = setTimeout(done, ms)
86
- })
87
- }
88
-
89
- function jitter(ms: number) {
90
- const j = Math.floor(ms * 0.3)
91
- const d = Math.floor(Math.random() * (2 * j + 1)) - j
92
- return Math.max(0, ms + d)
93
- }
94
-
95
- function mono() {
96
- return performance.now()
97
- }
98
-
99
- function wall() {
100
- return performance.timeOrigin + mono()
101
- }
102
-
103
- async function stats(file: string) {
104
- try {
105
- return await stat(file)
106
- } catch (err) {
107
- const errCode = code(err)
108
- if (errCode === "ENOENT" || errCode === "ENOTDIR") return
109
- throw err
110
- }
111
- }
112
-
113
- async function stale(lockDir: string, heartbeatPath: string, metaPath: string, staleMs: number) {
114
- // Stale detection allows automatic recovery after crashed owners.
115
- const now = wall()
116
- const heartbeat = await stats(heartbeatPath)
117
- if (heartbeat) {
118
- return now - heartbeat.mtimeMs > staleMs
119
- }
120
-
121
- const meta = await stats(metaPath)
122
- if (meta) {
123
- return now - meta.mtimeMs > staleMs
124
- }
125
-
126
- const dir = await stats(lockDir)
127
- if (!dir) {
128
- return false
129
- }
130
-
131
- return now - dir.mtimeMs > staleMs
132
- }
133
-
134
- async function tryAcquireLockDir(lockDir: string, opts: Opts): Promise<Owned | { acquired: false }> {
135
- const token = randomUUID?.() ?? randomBytes(16).toString("hex")
136
- const metaPath = path.join(lockDir, "meta.json")
137
- const heartbeatPath = path.join(lockDir, "heartbeat")
138
-
139
- try {
140
- await mkdir(lockDir, { mode: 0o700 })
141
- } catch (err) {
142
- if (code(err) !== "EEXIST") {
143
- throw err
144
- }
145
-
146
- if (!(await stale(lockDir, heartbeatPath, metaPath, opts.staleMs))) {
147
- return { acquired: false }
148
- }
149
-
150
- const breakerPath = lockDir + ".breaker"
151
- try {
152
- await mkdir(breakerPath, { mode: 0o700 })
153
- } catch (claimErr) {
154
- const errCode = code(claimErr)
155
- if (errCode === "EEXIST") {
156
- const breaker = await stats(breakerPath)
157
- if (breaker && wall() - breaker.mtimeMs > opts.staleMs) {
158
- await rm(breakerPath, { recursive: true, force: true }).catch(() => undefined)
159
- }
160
- return { acquired: false }
161
- }
162
-
163
- if (errCode === "ENOENT" || errCode === "ENOTDIR") {
164
- return { acquired: false }
165
- }
166
-
167
- throw claimErr
168
- }
169
-
170
- try {
171
- // Breaker ownership ensures only one contender performs stale cleanup.
172
- if (!(await stale(lockDir, heartbeatPath, metaPath, opts.staleMs))) {
173
- return { acquired: false }
174
- }
175
-
176
- await rm(lockDir, { recursive: true, force: true })
177
-
178
- try {
179
- await mkdir(lockDir, { mode: 0o700 })
180
- } catch (retryErr) {
181
- const errCode = code(retryErr)
182
- if (errCode === "EEXIST" || errCode === "ENOTEMPTY") {
183
- return { acquired: false }
184
- }
185
- throw retryErr
186
- }
187
- } finally {
188
- await rm(breakerPath, { recursive: true, force: true }).catch(() => undefined)
189
- }
190
- }
191
-
192
- const meta = {
193
- token,
194
- pid: process.pid,
195
- hostname: os.hostname(),
196
- createdAt: new Date().toISOString(),
197
- }
198
-
199
- await writeFile(heartbeatPath, "", { flag: "wx" }).catch(async () => {
200
- await rm(lockDir, { recursive: true, force: true })
201
- throw new Error("Lock acquired but heartbeat already existed (possible compromise).")
202
- })
203
-
204
- await writeFile(metaPath, JSON.stringify(meta, null, 2), { flag: "wx" }).catch(async () => {
205
- await rm(lockDir, { recursive: true, force: true })
206
- throw new Error("Lock acquired but meta.json already existed (possible compromise).")
207
- })
208
-
209
- let timer: NodeJS.Timeout | undefined
210
-
211
- const startHeartbeat = (intervalMs = Math.max(100, Math.floor(opts.staleMs / 3))) => {
212
- if (timer) return
213
- // Heartbeat prevents long critical sections from being evicted as stale.
214
- timer = setInterval(() => {
215
- const t = new Date()
216
- void utimes(heartbeatPath, t, t).catch(() => undefined)
217
- }, intervalMs)
218
- timer.unref?.()
219
- }
220
-
221
- const release = async () => {
222
- if (timer) {
223
- clearInterval(timer)
224
- timer = undefined
225
- }
226
-
227
- const current = await readFile(metaPath, "utf8")
228
- .then((raw) => {
229
- const parsed = JSON.parse(raw)
230
- if (!parsed || typeof parsed !== "object") return {}
231
- return {
232
- token: "token" in parsed && typeof parsed.token === "string" ? parsed.token : undefined,
233
- }
234
- })
235
- .catch((err) => {
236
- const errCode = code(err)
237
- if (errCode === "ENOENT" || errCode === "ENOTDIR") {
238
- throw new Error("Refusing to release: lock is compromised (metadata missing).")
239
- }
240
- if (err instanceof SyntaxError) {
241
- throw new Error("Refusing to release: lock is compromised (metadata invalid).")
242
- }
243
- throw err
244
- })
245
- // Token check prevents deleting a lock that was re-acquired by another process.
246
- if (current.token !== token) {
247
- throw new Error("Refusing to release: lock token mismatch (not the owner).")
248
- }
249
-
250
- await rm(lockDir, { recursive: true, force: true })
251
- }
252
-
253
- return {
254
- acquired: true,
255
- startHeartbeat,
256
- release,
257
- }
258
- }
259
-
260
- async function acquireLockDir(
261
- lockDir: string,
262
- input: { key: string; onWait?: Wait; signal?: AbortSignal },
263
- opts: Opts,
264
- ) {
265
- const stop = mono() + opts.timeoutMs
266
- let attempt = 0
267
- let waited = 0
268
- let delay = opts.baseDelayMs
269
-
270
- while (true) {
271
- input.signal?.throwIfAborted()
272
-
273
- const res = await tryAcquireLockDir(lockDir, opts)
274
- if (res.acquired) {
275
- return res
276
- }
277
-
278
- if (mono() > stop) {
279
- throw new Error(`Timed out waiting for lock: ${input.key}`)
280
- }
281
-
282
- attempt += 1
283
- const ms = jitter(delay)
284
- await input.onWait?.({
285
- key: input.key,
286
- attempt,
287
- delay: ms,
288
- waited,
289
- })
290
- await sleep(ms, input.signal)
291
- waited += ms
292
- delay = Math.min(opts.maxDelayMs, Math.floor(delay * 1.7))
293
- }
294
- }
295
-
296
- export async function acquire(key: string, input: Options = {}): Promise<Lease> {
297
- input.signal?.throwIfAborted()
298
- const cfg: Opts = {
299
- staleMs: input.staleMs ?? defaultOpts.staleMs,
300
- timeoutMs: input.timeoutMs ?? defaultOpts.timeoutMs,
301
- baseDelayMs: input.baseDelayMs ?? defaultOpts.baseDelayMs,
302
- maxDelayMs: input.maxDelayMs ?? defaultOpts.maxDelayMs,
303
- }
304
- const dir = input.dir ?? root
305
-
306
- await mkdir(dir, { recursive: true })
307
- const lockfile = path.join(dir, Hash.fast(key) + ".lock")
308
- const lock = await acquireLockDir(
309
- lockfile,
310
- {
311
- key,
312
- onWait: input.onWait,
313
- signal: input.signal,
314
- },
315
- cfg,
316
- )
317
- lock.startHeartbeat()
318
-
319
- const release = () => lock.release()
320
- return {
321
- release,
322
- [Symbol.asyncDispose]() {
323
- return release()
324
- },
325
- }
326
- }
327
-
328
- export async function withLock<T>(key: string, fn: () => Promise<T>, input: Options = {}) {
329
- await using _ = await acquire(key, input)
330
- input.signal?.throwIfAborted()
331
- return await fn()
332
- }
333
- }
@@ -1,21 +0,0 @@
1
- import { z } from "zod"
2
-
3
- export function fn<T extends z.ZodType, Result>(schema: T, cb: (input: z.infer<T>) => Result) {
4
- const result = (input: z.infer<T>) => {
5
- let parsed
6
- try {
7
- parsed = schema.parse(input)
8
- } catch (e) {
9
- console.trace("schema validation failure stack trace:")
10
- if (e instanceof z.ZodError) {
11
- console.error("schema validation issues:", JSON.stringify(e.issues, null, 2))
12
- }
13
- throw e
14
- }
15
-
16
- return cb(parsed)
17
- }
18
- result.force = (input: z.infer<T>) => cb(input)
19
- result.schema = schema
20
- return result
21
- }
@@ -1,20 +0,0 @@
1
- export function formatDuration(secs: number) {
2
- if (secs <= 0) return ""
3
- if (secs < 60) return `${secs}s`
4
- if (secs < 3600) {
5
- const mins = Math.floor(secs / 60)
6
- const remaining = secs % 60
7
- return remaining > 0 ? `${mins}m ${remaining}s` : `${mins}m`
8
- }
9
- if (secs < 86400) {
10
- const hours = Math.floor(secs / 3600)
11
- const remaining = Math.floor((secs % 3600) / 60)
12
- return remaining > 0 ? `${hours}h ${remaining}m` : `${hours}h`
13
- }
14
- if (secs < 604800) {
15
- const days = Math.floor(secs / 86400)
16
- return days === 1 ? "~1 day" : `~${days} days`
17
- }
18
- const weeks = Math.floor(secs / 604800)
19
- return weeks === 1 ? "~1 week" : `~${weeks} weeks`
20
- }
@@ -1,34 +0,0 @@
1
- import { glob, globSync, type GlobOptions } from "glob"
2
- import { minimatch } from "minimatch"
3
-
4
- export namespace Glob {
5
- export interface Options {
6
- cwd?: string
7
- absolute?: boolean
8
- include?: "file" | "all"
9
- dot?: boolean
10
- symlink?: boolean
11
- }
12
-
13
- function toGlobOptions(options: Options): GlobOptions {
14
- return {
15
- cwd: options.cwd,
16
- absolute: options.absolute,
17
- dot: options.dot,
18
- follow: options.symlink ?? false,
19
- nodir: options.include !== "all",
20
- }
21
- }
22
-
23
- export async function scan(pattern: string, options: Options = {}): Promise<string[]> {
24
- return glob(pattern, toGlobOptions(options)) as Promise<string[]>
25
- }
26
-
27
- export function scanSync(pattern: string, options: Options = {}): string[] {
28
- return globSync(pattern, toGlobOptions(options)) as string[]
29
- }
30
-
31
- export function match(pattern: string, filepath: string): boolean {
32
- return minimatch(filepath, pattern, { dot: true })
33
- }
34
- }
@@ -1,7 +0,0 @@
1
- import { createHash } from "crypto"
2
-
3
- export namespace Hash {
4
- export function fast(input: string | Buffer): string {
5
- return createHash("sha1").update(input).digest("hex")
6
- }
7
- }
@@ -1,3 +0,0 @@
1
- export function iife<T>(fn: () => T) {
2
- return fn()
3
- }