alchemy 2.0.0-beta.37 → 2.0.0-beta.39

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 (640) hide show
  1. package/bin/exec.js +488 -69
  2. package/bin/exec.js.map +1 -1
  3. package/lib/AWS/AutoScaling/LaunchTemplate.d.ts +1 -1
  4. package/lib/AWS/CloudWatch/common.d.ts +1 -1
  5. package/lib/AWS/Credentials.d.ts.map +1 -1
  6. package/lib/AWS/Credentials.js +1 -2
  7. package/lib/AWS/Credentials.js.map +1 -1
  8. package/lib/AWS/DynamoDB/Stream.d.ts.map +1 -1
  9. package/lib/AWS/DynamoDB/Stream.js +1 -1
  10. package/lib/AWS/DynamoDB/Stream.js.map +1 -1
  11. package/lib/AWS/EC2/Instance.d.ts +1 -1
  12. package/lib/AWS/EC2/hosted.d.ts +1 -1
  13. package/lib/AWS/EC2/hosted.d.ts.map +1 -1
  14. package/lib/AWS/EC2/hosted.js +3 -5
  15. package/lib/AWS/EC2/hosted.js.map +1 -1
  16. package/lib/AWS/ECS/Task.d.ts +1 -1
  17. package/lib/AWS/ECS/Task.d.ts.map +1 -1
  18. package/lib/AWS/ECS/Task.js +3 -5
  19. package/lib/AWS/ECS/Task.js.map +1 -1
  20. package/lib/AWS/Endpoint.d.ts.map +1 -1
  21. package/lib/AWS/Endpoint.js +1 -2
  22. package/lib/AWS/Endpoint.js.map +1 -1
  23. package/lib/AWS/Environment.d.ts +2 -2
  24. package/lib/AWS/EventBridge/EventSource.d.ts.map +1 -1
  25. package/lib/AWS/EventBridge/EventSource.js +1 -1
  26. package/lib/AWS/EventBridge/EventSource.js.map +1 -1
  27. package/lib/AWS/Kinesis/StreamEventSource.d.ts.map +1 -1
  28. package/lib/AWS/Kinesis/StreamEventSource.js +1 -1
  29. package/lib/AWS/Kinesis/StreamEventSource.js.map +1 -1
  30. package/lib/AWS/Lambda/BucketEventSource.d.ts +1 -1
  31. package/lib/AWS/Lambda/EventBridgeEventSource.d.ts +1 -1
  32. package/lib/AWS/Lambda/Function.d.ts +1 -1
  33. package/lib/AWS/Lambda/Function.d.ts.map +1 -1
  34. package/lib/AWS/Lambda/Function.js +7 -11
  35. package/lib/AWS/Lambda/Function.js.map +1 -1
  36. package/lib/AWS/Lambda/QueueEventSource.d.ts +1 -1
  37. package/lib/AWS/Lambda/StreamEventSource.d.ts +1 -1
  38. package/lib/AWS/Lambda/TableEventSource.d.ts +1 -1
  39. package/lib/AWS/Lambda/TopicEventSource.d.ts +1 -1
  40. package/lib/AWS/Organizations/common.d.ts +1 -1
  41. package/lib/AWS/Providers.d.ts.map +1 -1
  42. package/lib/AWS/Providers.js +21 -3
  43. package/lib/AWS/Providers.js.map +1 -1
  44. package/lib/AWS/Region.d.ts +1 -1
  45. package/lib/AWS/Region.d.ts.map +1 -1
  46. package/lib/AWS/Region.js +2 -3
  47. package/lib/AWS/Region.js.map +1 -1
  48. package/lib/AWS/S3/Bucket.d.ts.map +1 -1
  49. package/lib/AWS/S3/Bucket.js +5 -2
  50. package/lib/AWS/S3/Bucket.js.map +1 -1
  51. package/lib/AWS/S3/BucketNotifications.d.ts.map +1 -1
  52. package/lib/AWS/S3/BucketNotifications.js +1 -1
  53. package/lib/AWS/S3/BucketNotifications.js.map +1 -1
  54. package/lib/AWS/SNS/TopicEventSource.d.ts.map +1 -1
  55. package/lib/AWS/SNS/TopicEventSource.js +1 -1
  56. package/lib/AWS/SNS/TopicEventSource.js.map +1 -1
  57. package/lib/AWS/SQS/Queue.d.ts.map +1 -1
  58. package/lib/AWS/SQS/Queue.js +23 -5
  59. package/lib/AWS/SQS/Queue.js.map +1 -1
  60. package/lib/Action.d.ts +77 -0
  61. package/lib/Action.d.ts.map +1 -0
  62. package/lib/Action.js +89 -0
  63. package/lib/Action.js.map +1 -0
  64. package/lib/AlchemyContext.d.ts +1 -1
  65. package/lib/Apply.d.ts.map +1 -1
  66. package/lib/Apply.js +222 -3
  67. package/lib/Apply.js.map +1 -1
  68. package/lib/Artifacts.d.ts +1 -1
  69. package/lib/Artifacts.d.ts.map +1 -1
  70. package/lib/Artifacts.js +1 -1
  71. package/lib/Artifacts.js.map +1 -1
  72. package/lib/Auth/AuthProvider.js +1 -1
  73. package/lib/Auth/AuthProvider.js.map +1 -1
  74. package/lib/Auth/Env.d.ts.map +1 -1
  75. package/lib/Auth/Env.js +4 -12
  76. package/lib/Auth/Env.js.map +1 -1
  77. package/lib/Binding.d.ts.map +1 -1
  78. package/lib/Binding.js +5 -5
  79. package/lib/Binding.js.map +1 -1
  80. package/lib/Build/Command.d.ts +1 -1
  81. package/lib/Build/Memo.d.ts +1 -1
  82. package/lib/Bundle/Docker.d.ts +3 -3
  83. package/lib/Bundle/Docker.js +1 -1
  84. package/lib/Bundle/Docker.js.map +1 -1
  85. package/lib/Bundle/TempRoot.d.ts +3 -3
  86. package/lib/Cli/Event.d.ts +1 -1
  87. package/lib/Cli/Event.d.ts.map +1 -1
  88. package/lib/Cli/NamespaceTree.d.ts +11 -5
  89. package/lib/Cli/NamespaceTree.d.ts.map +1 -1
  90. package/lib/Cli/NamespaceTree.js +28 -1
  91. package/lib/Cli/NamespaceTree.js.map +1 -1
  92. package/lib/Cli/commands/_shared.d.ts +1 -1
  93. package/lib/Cli/commands/_shared.js +2 -2
  94. package/lib/Cli/commands/_shared.js.map +1 -1
  95. package/lib/Cli/commands/aws.d.ts +1 -1
  96. package/lib/Cli/commands/cloudflare.d.ts +2 -2
  97. package/lib/Cli/commands/cloudflare.d.ts.map +1 -1
  98. package/lib/Cli/commands/deploy.d.ts +9 -9
  99. package/lib/Cli/commands/deploy.js +1 -1
  100. package/lib/Cli/commands/deploy.js.map +1 -1
  101. package/lib/Cli/commands/login.d.ts +1 -1
  102. package/lib/Cli/commands/logs.d.ts +1 -1
  103. package/lib/Cli/commands/logs.js.map +1 -1
  104. package/lib/Cli/commands/profile.d.ts +1 -3
  105. package/lib/Cli/commands/profile.d.ts.map +1 -1
  106. package/lib/Cli/commands/state.d.ts +1 -1
  107. package/lib/Cli/commands/state.d.ts.map +1 -1
  108. package/lib/Cli/commands/tail.d.ts +1 -1
  109. package/lib/Cli/commands/tail.js.map +1 -1
  110. package/lib/Cli/tui/components/Plan.d.ts.map +1 -1
  111. package/lib/Cli/tui/components/Plan.js +27 -13
  112. package/lib/Cli/tui/components/Plan.js.map +1 -1
  113. package/lib/Cli/tui/components/PlanProgress.d.ts +8 -1
  114. package/lib/Cli/tui/components/PlanProgress.d.ts.map +1 -1
  115. package/lib/Cli/tui/components/PlanProgress.js +95 -16
  116. package/lib/Cli/tui/components/PlanProgress.js.map +1 -1
  117. package/lib/Cloudflare/Access.js +0 -1
  118. package/lib/Cloudflare/Access.js.map +1 -1
  119. package/lib/Cloudflare/AnalyticsEngine/AnalyticsEngineDatasetBinding.js +1 -1
  120. package/lib/Cloudflare/AnalyticsEngine/AnalyticsEngineDatasetBinding.js.map +1 -1
  121. package/lib/Cloudflare/Artifacts/ArtifactsBinding.js +1 -1
  122. package/lib/Cloudflare/Artifacts/ArtifactsBinding.js.map +1 -1
  123. package/lib/Cloudflare/CloudflareEnvironment.d.ts +1 -1
  124. package/lib/Cloudflare/Container/Container.js +0 -1
  125. package/lib/Cloudflare/Container/Container.js.map +1 -1
  126. package/lib/Cloudflare/Container/ContainerApplication.d.ts +1 -1
  127. package/lib/Cloudflare/Container/ContainerApplication.d.ts.map +1 -1
  128. package/lib/Cloudflare/Container/ContainerApplication.js +4 -6
  129. package/lib/Cloudflare/Container/ContainerApplication.js.map +1 -1
  130. package/lib/Cloudflare/Container/ContainerBinding.js +2 -2
  131. package/lib/Cloudflare/Container/ContainerBinding.js.map +1 -1
  132. package/lib/Cloudflare/D1/D1Database.d.ts +1 -1
  133. package/lib/Cloudflare/D1/D1SqlFile.d.ts +2 -2
  134. package/lib/Cloudflare/Email/EmailAddress.d.ts +45 -0
  135. package/lib/Cloudflare/Email/EmailAddress.d.ts.map +1 -0
  136. package/lib/Cloudflare/Email/EmailAddress.js +99 -0
  137. package/lib/Cloudflare/Email/EmailAddress.js.map +1 -0
  138. package/lib/Cloudflare/Email/EmailRouting.d.ts +42 -0
  139. package/lib/Cloudflare/Email/EmailRouting.d.ts.map +1 -0
  140. package/lib/Cloudflare/Email/EmailRouting.js +89 -0
  141. package/lib/Cloudflare/Email/EmailRouting.js.map +1 -0
  142. package/lib/Cloudflare/Email/EmailRule.d.ts +80 -0
  143. package/lib/Cloudflare/Email/EmailRule.d.ts.map +1 -0
  144. package/lib/Cloudflare/Email/EmailRule.js +110 -0
  145. package/lib/Cloudflare/Email/EmailRule.js.map +1 -0
  146. package/lib/Cloudflare/Email/SendEmail.d.ts +74 -0
  147. package/lib/Cloudflare/Email/SendEmail.d.ts.map +1 -0
  148. package/lib/Cloudflare/Email/SendEmail.js +19 -0
  149. package/lib/Cloudflare/Email/SendEmail.js.map +1 -0
  150. package/lib/Cloudflare/Email/SendEmailBinding.d.ts +64 -0
  151. package/lib/Cloudflare/Email/SendEmailBinding.d.ts.map +1 -0
  152. package/lib/Cloudflare/Email/SendEmailBinding.js +54 -0
  153. package/lib/Cloudflare/Email/SendEmailBinding.js.map +1 -0
  154. package/lib/Cloudflare/Email/index.d.ts +6 -0
  155. package/lib/Cloudflare/Email/index.d.ts.map +1 -0
  156. package/lib/Cloudflare/Email/index.js +6 -0
  157. package/lib/Cloudflare/Email/index.js.map +1 -0
  158. package/lib/Cloudflare/Hyperdrive/Hyperdrive.d.ts +1 -1
  159. package/lib/Cloudflare/Images/ImagesBinding.js +1 -1
  160. package/lib/Cloudflare/Images/ImagesBinding.js.map +1 -1
  161. package/lib/Cloudflare/KV/KVNamespaceBinding.js +1 -1
  162. package/lib/Cloudflare/KV/KVNamespaceBinding.js.map +1 -1
  163. package/lib/Cloudflare/Local/Sidecar.d.ts +1 -1
  164. package/lib/Cloudflare/Local/SidecarHandlers.d.ts +1 -1
  165. package/lib/Cloudflare/Local/SidecarServer.js +1 -1
  166. package/lib/Cloudflare/Local/SidecarServer.js.map +1 -1
  167. package/lib/Cloudflare/Providers.d.ts.map +1 -1
  168. package/lib/Cloudflare/Providers.js +6 -1
  169. package/lib/Cloudflare/Providers.js.map +1 -1
  170. package/lib/Cloudflare/Queue/QueueBinding.js +1 -1
  171. package/lib/Cloudflare/Queue/QueueBinding.js.map +1 -1
  172. package/lib/Cloudflare/R2/R2BucketBinding.js +1 -1
  173. package/lib/Cloudflare/R2/R2BucketBinding.js.map +1 -1
  174. package/lib/Cloudflare/SecretsStore/SecretBinding.js +1 -1
  175. package/lib/Cloudflare/SecretsStore/SecretBinding.js.map +1 -1
  176. package/lib/Cloudflare/StateStore/Api.d.ts +1 -1
  177. package/lib/Cloudflare/StateStore/State.d.ts +2 -2
  178. package/lib/Cloudflare/Workers/Assets.d.ts +2 -2
  179. package/lib/Cloudflare/Workers/Assets.d.ts.map +1 -1
  180. package/lib/Cloudflare/Workers/Assets.js +5 -4
  181. package/lib/Cloudflare/Workers/Assets.js.map +1 -1
  182. package/lib/Cloudflare/Workers/HttpServer.d.ts.map +1 -1
  183. package/lib/Cloudflare/Workers/HttpServer.js +25 -3
  184. package/lib/Cloudflare/Workers/HttpServer.js.map +1 -1
  185. package/lib/Cloudflare/Workers/InferEnv.d.ts +1 -1
  186. package/lib/Cloudflare/Workers/InferEnv.d.ts.map +1 -1
  187. package/lib/Cloudflare/Workers/Worker.d.ts +4 -3
  188. package/lib/Cloudflare/Workers/Worker.d.ts.map +1 -1
  189. package/lib/Cloudflare/Workers/Worker.js +67 -32
  190. package/lib/Cloudflare/Workers/Worker.js.map +1 -1
  191. package/lib/Cloudflare/Workers/WorkerBundle.d.ts +1 -1
  192. package/lib/Cloudflare/Workers/WorkerBundle.d.ts.map +1 -1
  193. package/lib/Cloudflare/Workers/WorkerBundle.js +4 -6
  194. package/lib/Cloudflare/Workers/WorkerBundle.js.map +1 -1
  195. package/lib/Cloudflare/Workers/WorkerName.d.ts +1 -1
  196. package/lib/Cloudflare/Workers/Workflow.js +2 -2
  197. package/lib/Cloudflare/Workers/Workflow.js.map +1 -1
  198. package/lib/Cloudflare/index.d.ts +1 -0
  199. package/lib/Cloudflare/index.d.ts.map +1 -1
  200. package/lib/Cloudflare/index.js +1 -0
  201. package/lib/Cloudflare/index.js.map +1 -1
  202. package/lib/Construct.d.ts +3 -3
  203. package/lib/Construct.d.ts.map +1 -1
  204. package/lib/Construct.js.map +1 -1
  205. package/lib/Deploy.d.ts +1 -1
  206. package/lib/Destroy.d.ts +1 -1
  207. package/lib/Destroy.d.ts.map +1 -1
  208. package/lib/Destroy.js +1 -0
  209. package/lib/Destroy.js.map +1 -1
  210. package/lib/Drizzle/Providers.d.ts +1 -1
  211. package/lib/Drizzle/Schema.d.ts +1 -1
  212. package/lib/GitHub/Providers.d.ts +1 -1
  213. package/lib/Http.d.ts +1 -1
  214. package/lib/Http.d.ts.map +1 -1
  215. package/lib/Http.js +1 -1
  216. package/lib/Http.js.map +1 -1
  217. package/lib/Namespace.d.ts.map +1 -1
  218. package/lib/Namespace.js +3 -4
  219. package/lib/Namespace.js.map +1 -1
  220. package/lib/Neon/Branch.d.ts +2 -2
  221. package/lib/Neon/Branch.d.ts.map +1 -1
  222. package/lib/Neon/Branch.js +59 -27
  223. package/lib/Neon/Branch.js.map +1 -1
  224. package/lib/Neon/Credentials.d.ts +2 -2
  225. package/lib/Neon/Credentials.d.ts.map +1 -1
  226. package/lib/Neon/Credentials.js +2 -2
  227. package/lib/Neon/Credentials.js.map +1 -1
  228. package/lib/Neon/NeonEnvironment.d.ts +1 -1
  229. package/lib/Neon/Project.d.ts +25 -1
  230. package/lib/Neon/Project.d.ts.map +1 -1
  231. package/lib/Neon/Project.js +121 -42
  232. package/lib/Neon/Project.js.map +1 -1
  233. package/lib/Neon/Providers.d.ts +1 -1
  234. package/lib/Neon/SqlFile.d.ts +2 -2
  235. package/lib/Output.d.ts +3 -4
  236. package/lib/Output.d.ts.map +1 -1
  237. package/lib/Output.js +7 -4
  238. package/lib/Output.js.map +1 -1
  239. package/lib/PhysicalName.d.ts +1 -1
  240. package/lib/Plan.d.ts +36 -1
  241. package/lib/Plan.d.ts.map +1 -1
  242. package/lib/Plan.js +197 -31
  243. package/lib/Plan.js.map +1 -1
  244. package/lib/Platform.js +6 -6
  245. package/lib/Platform.js.map +1 -1
  246. package/lib/Provider.d.ts +1 -1
  247. package/lib/Provider.d.ts.map +1 -1
  248. package/lib/Provider.js +1 -1
  249. package/lib/Provider.js.map +1 -1
  250. package/lib/Random.d.ts +1 -1
  251. package/lib/Random.d.ts.map +1 -1
  252. package/lib/Random.js +1 -1
  253. package/lib/Random.js.map +1 -1
  254. package/lib/Resource.d.ts.map +1 -1
  255. package/lib/Resource.js +2 -25
  256. package/lib/Resource.js.map +1 -1
  257. package/lib/Runtime.d.ts +24 -0
  258. package/lib/Runtime.d.ts.map +1 -0
  259. package/lib/Runtime.js +31 -0
  260. package/lib/Runtime.js.map +1 -0
  261. package/lib/Secret.js +1 -1
  262. package/lib/Secret.js.map +1 -1
  263. package/lib/Sidecar/RpcClient.d.ts +1 -1
  264. package/lib/Sidecar/RpcPaths.d.ts +1 -1
  265. package/lib/Sidecar/RpcServer.d.ts +1 -1
  266. package/lib/Sidecar/RpcServices.d.ts +1 -1
  267. package/lib/Stack.d.ts +7 -2
  268. package/lib/Stack.d.ts.map +1 -1
  269. package/lib/Stack.js +4 -4
  270. package/lib/Stack.js.map +1 -1
  271. package/lib/State/ActionState.d.ts +48 -0
  272. package/lib/State/ActionState.d.ts.map +1 -0
  273. package/lib/State/ActionState.js +1 -0
  274. package/lib/State/ActionState.js.map +1 -0
  275. package/lib/State/HttpStateStore.d.ts.map +1 -1
  276. package/lib/State/HttpStateStore.js +1 -1
  277. package/lib/State/HttpStateStore.js.map +1 -1
  278. package/lib/State/InMemoryState.d.ts.map +1 -1
  279. package/lib/State/InMemoryState.js.map +1 -1
  280. package/lib/State/LocalState.d.ts +2 -2
  281. package/lib/State/ResourceState.d.ts +5 -0
  282. package/lib/State/ResourceState.d.ts.map +1 -1
  283. package/lib/State/State.d.ts +10 -2
  284. package/lib/State/State.d.ts.map +1 -1
  285. package/lib/State/State.js +2 -0
  286. package/lib/State/State.js.map +1 -1
  287. package/lib/State/index.d.ts +1 -0
  288. package/lib/State/index.d.ts.map +1 -1
  289. package/lib/State/index.js +1 -0
  290. package/lib/State/index.js.map +1 -1
  291. package/lib/Test/Core.d.ts +2 -2
  292. package/lib/Test/Core.d.ts.map +1 -1
  293. package/lib/Test/Core.js +4 -1
  294. package/lib/Test/Core.js.map +1 -1
  295. package/lib/Util/FileLogger.d.ts +1 -1
  296. package/lib/Util/effect.js +4 -4
  297. package/lib/Util/effect.js.map +1 -1
  298. package/lib/Util/exec.d.ts.map +1 -0
  299. package/lib/Util/exec.js.map +1 -0
  300. package/lib/Util/hash.d.ts +8 -0
  301. package/lib/Util/hash.d.ts.map +1 -0
  302. package/lib/Util/hash.js +11 -0
  303. package/lib/Util/hash.js.map +1 -0
  304. package/lib/Util/ignore.d.ts +40 -0
  305. package/lib/Util/ignore.d.ts.map +1 -0
  306. package/lib/Util/ignore.js +591 -0
  307. package/lib/Util/ignore.js.map +1 -0
  308. package/lib/index.d.ts +1 -0
  309. package/lib/index.d.ts.map +1 -1
  310. package/lib/index.js +1 -0
  311. package/lib/index.js.map +1 -1
  312. package/lib/tsconfig.test.tsbuildinfo +1 -1
  313. package/package.json +22 -28
  314. package/src/AWS/Credentials.ts +1 -2
  315. package/src/AWS/DynamoDB/Stream.ts +1 -4
  316. package/src/AWS/EC2/hosted.ts +14 -16
  317. package/src/AWS/ECS/Task.ts +14 -16
  318. package/src/AWS/Endpoint.ts +2 -5
  319. package/src/AWS/EventBridge/EventSource.ts +1 -4
  320. package/src/AWS/Kinesis/StreamEventSource.ts +1 -4
  321. package/src/AWS/Lambda/Function.ts +31 -35
  322. package/src/AWS/Providers.ts +22 -3
  323. package/src/AWS/Region.ts +2 -3
  324. package/src/AWS/S3/Bucket.ts +7 -2
  325. package/src/AWS/S3/BucketNotifications.ts +1 -4
  326. package/src/AWS/SNS/TopicEventSource.ts +1 -4
  327. package/src/AWS/SQS/Queue.ts +40 -6
  328. package/src/Action.ts +280 -0
  329. package/src/Apply.ts +351 -23
  330. package/src/Artifacts.ts +2 -4
  331. package/src/Auth/AuthProvider.ts +1 -1
  332. package/src/Auth/Env.ts +12 -20
  333. package/src/Binding.ts +5 -9
  334. package/src/Bundle/Docker.ts +1 -1
  335. package/src/Cli/Event.ts +4 -0
  336. package/src/Cli/NamespaceTree.ts +52 -5
  337. package/src/Cli/commands/_shared.ts +2 -2
  338. package/src/Cli/commands/deploy.ts +1 -1
  339. package/src/Cli/commands/logs.ts +4 -4
  340. package/src/Cli/commands/tail.ts +4 -4
  341. package/src/Cli/tui/components/Plan.tsx +65 -17
  342. package/src/Cli/tui/components/PlanProgress.tsx +142 -32
  343. package/src/Cloudflare/Access.ts +1 -1
  344. package/src/Cloudflare/AnalyticsEngine/AnalyticsEngineDatasetBinding.ts +1 -1
  345. package/src/Cloudflare/Artifacts/ArtifactsBinding.ts +1 -1
  346. package/src/Cloudflare/Container/Container.ts +1 -1
  347. package/src/Cloudflare/Container/ContainerApplication.ts +4 -6
  348. package/src/Cloudflare/Container/ContainerBinding.ts +2 -2
  349. package/src/Cloudflare/Email/EmailAddress.ts +155 -0
  350. package/src/Cloudflare/Email/EmailRouting.ts +138 -0
  351. package/src/Cloudflare/Email/EmailRule.ts +210 -0
  352. package/src/Cloudflare/Email/SendEmail.ts +95 -0
  353. package/src/Cloudflare/Email/SendEmailBinding.ts +124 -0
  354. package/src/Cloudflare/Email/index.ts +5 -0
  355. package/src/Cloudflare/Images/ImagesBinding.ts +1 -1
  356. package/src/Cloudflare/KV/KVNamespaceBinding.ts +1 -1
  357. package/src/Cloudflare/Local/SidecarServer.ts +1 -1
  358. package/src/Cloudflare/Providers.ts +9 -0
  359. package/src/Cloudflare/Queue/QueueBinding.ts +1 -1
  360. package/src/Cloudflare/R2/R2BucketBinding.ts +1 -1
  361. package/src/Cloudflare/SecretsStore/SecretBinding.ts +1 -1
  362. package/src/Cloudflare/Workers/Assets.ts +5 -6
  363. package/src/Cloudflare/Workers/HttpServer.ts +37 -5
  364. package/src/Cloudflare/Workers/InferEnv.ts +15 -11
  365. package/src/Cloudflare/Workers/Worker.ts +78 -36
  366. package/src/Cloudflare/Workers/WorkerBundle.ts +4 -6
  367. package/src/Cloudflare/Workers/Workflow.ts +2 -2
  368. package/src/Cloudflare/index.ts +1 -0
  369. package/src/Construct.ts +3 -7
  370. package/src/Destroy.ts +1 -0
  371. package/src/Http.ts +1 -1
  372. package/src/Namespace.ts +4 -4
  373. package/src/Neon/Branch.ts +93 -59
  374. package/src/Neon/Credentials.ts +2 -2
  375. package/src/Neon/Project.ts +193 -64
  376. package/src/Output.ts +9 -7
  377. package/src/Plan.ts +303 -53
  378. package/src/Platform.ts +7 -7
  379. package/src/Provider.ts +8 -3
  380. package/src/Random.ts +1 -1
  381. package/src/Resource.ts +2 -25
  382. package/src/Runtime.ts +38 -0
  383. package/src/Secret.ts +1 -1
  384. package/src/Stack.ts +10 -6
  385. package/src/State/ActionState.ts +51 -0
  386. package/src/State/HttpStateStore.ts +6 -2
  387. package/src/State/InMemoryState.ts +3 -3
  388. package/src/State/ResourceState.ts +5 -0
  389. package/src/State/State.ts +17 -2
  390. package/src/State/index.ts +1 -0
  391. package/src/Test/Core.ts +4 -3
  392. package/src/Util/effect.ts +4 -4
  393. package/src/Util/hash.ts +14 -0
  394. package/src/Util/ignore.ts +815 -0
  395. package/src/index.ts +6 -0
  396. package/lib/Agent/Agent.d.ts +0 -9
  397. package/lib/Agent/Agent.d.ts.map +0 -1
  398. package/lib/Agent/Agent.js +0 -10
  399. package/lib/Agent/Agent.js.map +0 -1
  400. package/lib/Agent/Aspect.d.ts +0 -51
  401. package/lib/Agent/Aspect.d.ts.map +0 -1
  402. package/lib/Agent/Aspect.js +0 -45
  403. package/lib/Agent/Aspect.js.map +0 -1
  404. package/lib/Agent/AspectGraph.d.ts +0 -45
  405. package/lib/Agent/AspectGraph.d.ts.map +0 -1
  406. package/lib/Agent/AspectGraph.js +0 -39
  407. package/lib/Agent/AspectGraph.js.map +0 -1
  408. package/lib/Agent/ContextPlugin.d.ts +0 -8
  409. package/lib/Agent/ContextPlugin.d.ts.map +0 -1
  410. package/lib/Agent/ContextPlugin.js +0 -3
  411. package/lib/Agent/ContextPlugin.js.map +0 -1
  412. package/lib/Agent/Plugin.d.ts +0 -18
  413. package/lib/Agent/Plugin.d.ts.map +0 -1
  414. package/lib/Agent/Plugin.js +0 -8
  415. package/lib/Agent/Plugin.js.map +0 -1
  416. package/lib/Agent/chat/channel.d.ts +0 -9
  417. package/lib/Agent/chat/channel.d.ts.map +0 -1
  418. package/lib/Agent/chat/channel.js +0 -10
  419. package/lib/Agent/chat/channel.js.map +0 -1
  420. package/lib/Agent/chat/event.d.ts +0 -32
  421. package/lib/Agent/chat/event.d.ts.map +0 -1
  422. package/lib/Agent/chat/event.js +0 -32
  423. package/lib/Agent/chat/event.js.map +0 -1
  424. package/lib/Agent/chat/message.d.ts +0 -22
  425. package/lib/Agent/chat/message.d.ts.map +0 -1
  426. package/lib/Agent/chat/message.js +0 -31
  427. package/lib/Agent/chat/message.js.map +0 -1
  428. package/lib/Agent/chat/service.d.ts +0 -102
  429. package/lib/Agent/chat/service.d.ts.map +0 -1
  430. package/lib/Agent/chat/service.js +0 -79
  431. package/lib/Agent/chat/service.js.map +0 -1
  432. package/lib/Agent/chat/thread.d.ts +0 -13
  433. package/lib/Agent/chat/thread.d.ts.map +0 -1
  434. package/lib/Agent/chat/thread.js +0 -16
  435. package/lib/Agent/chat/thread.js.map +0 -1
  436. package/lib/Agent/coding/bash.d.ts +0 -36
  437. package/lib/Agent/coding/bash.d.ts.map +0 -1
  438. package/lib/Agent/coding/bash.js +0 -170
  439. package/lib/Agent/coding/bash.js.map +0 -1
  440. package/lib/Agent/coding/edit.d.ts +0 -31
  441. package/lib/Agent/coding/edit.d.ts.map +0 -1
  442. package/lib/Agent/coding/edit.js +0 -90
  443. package/lib/Agent/coding/edit.js.map +0 -1
  444. package/lib/Agent/coding/glob.d.ts +0 -23
  445. package/lib/Agent/coding/glob.d.ts.map +0 -1
  446. package/lib/Agent/coding/glob.js +0 -78
  447. package/lib/Agent/coding/glob.js.map +0 -1
  448. package/lib/Agent/coding/grep.d.ts +0 -26
  449. package/lib/Agent/coding/grep.d.ts.map +0 -1
  450. package/lib/Agent/coding/grep.js +0 -105
  451. package/lib/Agent/coding/grep.js.map +0 -1
  452. package/lib/Agent/coding/index.d.ts +0 -8
  453. package/lib/Agent/coding/index.d.ts.map +0 -1
  454. package/lib/Agent/coding/index.js +0 -8
  455. package/lib/Agent/coding/index.js.map +0 -1
  456. package/lib/Agent/coding/read.d.ts +0 -27
  457. package/lib/Agent/coding/read.d.ts.map +0 -1
  458. package/lib/Agent/coding/read.js +0 -89
  459. package/lib/Agent/coding/read.js.map +0 -1
  460. package/lib/Agent/coding/readlints.d.ts +0 -19
  461. package/lib/Agent/coding/readlints.d.ts.map +0 -1
  462. package/lib/Agent/coding/readlints.js +0 -53
  463. package/lib/Agent/coding/readlints.js.map +0 -1
  464. package/lib/Agent/coding/write.d.ts +0 -22
  465. package/lib/Agent/coding/write.d.ts.map +0 -1
  466. package/lib/Agent/coding/write.js +0 -53
  467. package/lib/Agent/coding/write.js.map +0 -1
  468. package/lib/Agent/fs/file.d.ts +0 -12
  469. package/lib/Agent/fs/file.d.ts.map +0 -1
  470. package/lib/Agent/fs/file.js +0 -8
  471. package/lib/Agent/fs/file.js.map +0 -1
  472. package/lib/Agent/fs/folder.d.ts +0 -5
  473. package/lib/Agent/fs/folder.d.ts.map +0 -1
  474. package/lib/Agent/fs/folder.js +0 -3
  475. package/lib/Agent/fs/folder.js.map +0 -1
  476. package/lib/Agent/index.d.ts +0 -9
  477. package/lib/Agent/index.d.ts.map +0 -1
  478. package/lib/Agent/index.js +0 -9
  479. package/lib/Agent/index.js.map +0 -1
  480. package/lib/Agent/llm/error.d.ts +0 -208
  481. package/lib/Agent/llm/error.d.ts.map +0 -1
  482. package/lib/Agent/llm/error.js +0 -209
  483. package/lib/Agent/llm/error.js.map +0 -1
  484. package/lib/Agent/llm/index.d.ts +0 -5
  485. package/lib/Agent/llm/index.d.ts.map +0 -1
  486. package/lib/Agent/llm/index.js +0 -5
  487. package/lib/Agent/llm/index.js.map +0 -1
  488. package/lib/Agent/llm/llm.d.ts +0 -32
  489. package/lib/Agent/llm/llm.d.ts.map +0 -1
  490. package/lib/Agent/llm/llm.js +0 -74
  491. package/lib/Agent/llm/llm.js.map +0 -1
  492. package/lib/Agent/llm/stream-collectors.d.ts +0 -46
  493. package/lib/Agent/llm/stream-collectors.d.ts.map +0 -1
  494. package/lib/Agent/llm/stream-collectors.js +0 -33
  495. package/lib/Agent/llm/stream-collectors.js.map +0 -1
  496. package/lib/Agent/llm/stream-text-part.d.ts +0 -5
  497. package/lib/Agent/llm/stream-text-part.d.ts.map +0 -1
  498. package/lib/Agent/llm/stream-text-part.js +0 -4
  499. package/lib/Agent/llm/stream-text-part.js.map +0 -1
  500. package/lib/Agent/lsp/client.d.ts +0 -122
  501. package/lib/Agent/lsp/client.d.ts.map +0 -1
  502. package/lib/Agent/lsp/client.js +0 -180
  503. package/lib/Agent/lsp/client.js.map +0 -1
  504. package/lib/Agent/lsp/diagnostics.d.ts +0 -16
  505. package/lib/Agent/lsp/diagnostics.d.ts.map +0 -1
  506. package/lib/Agent/lsp/diagnostics.js +0 -48
  507. package/lib/Agent/lsp/diagnostics.js.map +0 -1
  508. package/lib/Agent/lsp/jsonrpc.d.ts +0 -90
  509. package/lib/Agent/lsp/jsonrpc.d.ts.map +0 -1
  510. package/lib/Agent/lsp/jsonrpc.js +0 -178
  511. package/lib/Agent/lsp/jsonrpc.js.map +0 -1
  512. package/lib/Agent/lsp/manager.d.ts +0 -38
  513. package/lib/Agent/lsp/manager.d.ts.map +0 -1
  514. package/lib/Agent/lsp/manager.js +0 -98
  515. package/lib/Agent/lsp/manager.js.map +0 -1
  516. package/lib/Agent/lsp/servers.d.ts +0 -28
  517. package/lib/Agent/lsp/servers.d.ts.map +0 -1
  518. package/lib/Agent/lsp/servers.js +0 -21
  519. package/lib/Agent/lsp/servers.js.map +0 -1
  520. package/lib/Agent/process/driver.d.ts +0 -10
  521. package/lib/Agent/process/driver.d.ts.map +0 -1
  522. package/lib/Agent/process/driver.js +0 -153
  523. package/lib/Agent/process/driver.js.map +0 -1
  524. package/lib/Agent/process/issue-service.d.ts +0 -44
  525. package/lib/Agent/process/issue-service.d.ts.map +0 -1
  526. package/lib/Agent/process/issue-service.js +0 -28
  527. package/lib/Agent/process/issue-service.js.map +0 -1
  528. package/lib/Agent/process/issue-tools.d.ts +0 -28
  529. package/lib/Agent/process/issue-tools.d.ts.map +0 -1
  530. package/lib/Agent/process/issue-tools.js +0 -28
  531. package/lib/Agent/process/issue-tools.js.map +0 -1
  532. package/lib/Agent/process/issue.d.ts +0 -16
  533. package/lib/Agent/process/issue.d.ts.map +0 -1
  534. package/lib/Agent/process/issue.js +0 -17
  535. package/lib/Agent/process/issue.js.map +0 -1
  536. package/lib/Agent/process/organization.d.ts +0 -4
  537. package/lib/Agent/process/organization.d.ts.map +0 -1
  538. package/lib/Agent/process/organization.js +0 -3
  539. package/lib/Agent/process/organization.js.map +0 -1
  540. package/lib/Agent/process/process.d.ts +0 -5
  541. package/lib/Agent/process/process.d.ts.map +0 -1
  542. package/lib/Agent/process/process.js +0 -3
  543. package/lib/Agent/process/process.js.map +0 -1
  544. package/lib/Agent/process/reply.d.ts +0 -16
  545. package/lib/Agent/process/reply.d.ts.map +0 -1
  546. package/lib/Agent/process/reply.js +0 -18
  547. package/lib/Agent/process/reply.js.map +0 -1
  548. package/lib/Agent/process/task.d.ts +0 -25
  549. package/lib/Agent/process/task.d.ts.map +0 -1
  550. package/lib/Agent/process/task.js +0 -26
  551. package/lib/Agent/process/task.js.map +0 -1
  552. package/lib/Agent/tool/index.d.ts +0 -4
  553. package/lib/Agent/tool/index.d.ts.map +0 -1
  554. package/lib/Agent/tool/index.js +0 -4
  555. package/lib/Agent/tool/index.js.map +0 -1
  556. package/lib/Agent/tool/parameter.d.ts +0 -12
  557. package/lib/Agent/tool/parameter.d.ts.map +0 -1
  558. package/lib/Agent/tool/parameter.js +0 -6
  559. package/lib/Agent/tool/parameter.js.map +0 -1
  560. package/lib/Agent/tool/result.d.ts +0 -17
  561. package/lib/Agent/tool/result.d.ts.map +0 -1
  562. package/lib/Agent/tool/result.js +0 -6
  563. package/lib/Agent/tool/result.js.map +0 -1
  564. package/lib/Agent/tool/tool.d.ts +0 -32
  565. package/lib/Agent/tool/tool.d.ts.map +0 -1
  566. package/lib/Agent/tool/tool.js +0 -16
  567. package/lib/Agent/tool/tool.js.map +0 -1
  568. package/lib/Agent/util/command-validator.d.ts +0 -12
  569. package/lib/Agent/util/command-validator.d.ts.map +0 -1
  570. package/lib/Agent/util/command-validator.js +0 -74
  571. package/lib/Agent/util/command-validator.js.map +0 -1
  572. package/lib/Agent/util/exec.d.ts.map +0 -1
  573. package/lib/Agent/util/exec.js.map +0 -1
  574. package/lib/Agent/util/parser.d.ts +0 -5
  575. package/lib/Agent/util/parser.d.ts.map +0 -1
  576. package/lib/Agent/util/parser.js +0 -41
  577. package/lib/Agent/util/parser.js.map +0 -1
  578. package/lib/Agent/util/replace.d.ts +0 -38
  579. package/lib/Agent/util/replace.d.ts.map +0 -1
  580. package/lib/Agent/util/replace.js +0 -458
  581. package/lib/Agent/util/replace.js.map +0 -1
  582. package/lib/Agent/util/ripgrep.d.ts +0 -109
  583. package/lib/Agent/util/ripgrep.d.ts.map +0 -1
  584. package/lib/Agent/util/ripgrep.js +0 -221
  585. package/lib/Agent/util/ripgrep.js.map +0 -1
  586. package/lib/Neon/api.d.ts +0 -258
  587. package/lib/Neon/api.d.ts.map +0 -1
  588. package/lib/Neon/api.js +0 -215
  589. package/lib/Neon/api.js.map +0 -1
  590. package/src/Agent/Agent.ts +0 -26
  591. package/src/Agent/Aspect.ts +0 -173
  592. package/src/Agent/AspectGraph.ts +0 -98
  593. package/src/Agent/ContextPlugin.ts +0 -18
  594. package/src/Agent/Plugin.ts +0 -29
  595. package/src/Agent/chat/channel.ts +0 -26
  596. package/src/Agent/chat/event.ts +0 -43
  597. package/src/Agent/chat/message.ts +0 -35
  598. package/src/Agent/chat/service.ts +0 -133
  599. package/src/Agent/chat/thread.ts +0 -17
  600. package/src/Agent/coding/bash.ts +0 -197
  601. package/src/Agent/coding/edit.ts +0 -152
  602. package/src/Agent/coding/glob.ts +0 -96
  603. package/src/Agent/coding/grep.ts +0 -143
  604. package/src/Agent/coding/index.ts +0 -7
  605. package/src/Agent/coding/read.ts +0 -119
  606. package/src/Agent/coding/readlints.ts +0 -78
  607. package/src/Agent/coding/write.ts +0 -79
  608. package/src/Agent/fs/file.ts +0 -22
  609. package/src/Agent/fs/folder.ts +0 -16
  610. package/src/Agent/index.ts +0 -9
  611. package/src/Agent/llm/error.ts +0 -330
  612. package/src/Agent/llm/index.ts +0 -4
  613. package/src/Agent/llm/llm.ts +0 -131
  614. package/src/Agent/llm/stream-collectors.ts +0 -58
  615. package/src/Agent/llm/stream-text-part.ts +0 -7
  616. package/src/Agent/lsp/client.ts +0 -293
  617. package/src/Agent/lsp/diagnostics.ts +0 -64
  618. package/src/Agent/lsp/jsonrpc.ts +0 -317
  619. package/src/Agent/lsp/manager.ts +0 -213
  620. package/src/Agent/lsp/servers.ts +0 -37
  621. package/src/Agent/process/driver.ts +0 -168
  622. package/src/Agent/process/issue-service.ts +0 -48
  623. package/src/Agent/process/issue-tools.ts +0 -33
  624. package/src/Agent/process/issue.ts +0 -22
  625. package/src/Agent/process/organization.ts +0 -16
  626. package/src/Agent/process/process.ts +0 -16
  627. package/src/Agent/process/reply.ts +0 -21
  628. package/src/Agent/process/task.ts +0 -34
  629. package/src/Agent/tool/index.ts +0 -3
  630. package/src/Agent/tool/parameter.ts +0 -35
  631. package/src/Agent/tool/result.ts +0 -51
  632. package/src/Agent/tool/tool.ts +0 -74
  633. package/src/Agent/util/command-validator.ts +0 -98
  634. package/src/Agent/util/parser.ts +0 -39
  635. package/src/Agent/util/replace.ts +0 -559
  636. package/src/Agent/util/ripgrep.ts +0 -256
  637. package/src/Neon/api.ts +0 -579
  638. /package/lib/{Agent/util → Util}/exec.d.ts +0 -0
  639. /package/lib/{Agent/util → Util}/exec.js +0 -0
  640. /package/src/{Agent/util → Util}/exec.ts +0 -0
@@ -1,293 +0,0 @@
1
- import type { Subprocess } from "bun";
2
- import * as Effect from "effect/Effect";
3
- import * as HashMap from "effect/HashMap";
4
- import * as Option from "effect/Option";
5
- import * as PubSub from "effect/PubSub";
6
- import * as Ref from "effect/Ref";
7
- import * as S from "effect/Schema";
8
- import * as Stream from "effect/Stream";
9
- import { make as makeJsonRpc } from "./jsonrpc.ts";
10
-
11
- /**
12
- * LSP Position (0-indexed line and character)
13
- */
14
- export const Position = S.Struct({
15
- line: S.Number,
16
- character: S.Number,
17
- });
18
- export type Position = S.Schema.Type<typeof Position>;
19
-
20
- /**
21
- * LSP Range (start and end positions)
22
- */
23
- export const Range = S.Struct({
24
- start: Position,
25
- end: Position,
26
- });
27
- export type Range = S.Schema.Type<typeof Range>;
28
-
29
- /**
30
- * LSP Diagnostic severity
31
- */
32
- export const DiagnosticSeverity = {
33
- Error: 1,
34
- Warning: 2,
35
- Information: 3,
36
- Hint: 4,
37
- } as const;
38
-
39
- /**
40
- * LSP Diagnostic
41
- */
42
- export const Diagnostic = S.Struct({
43
- range: Range,
44
- severity: S.optional(S.Number),
45
- message: S.String,
46
- source: S.optional(S.String),
47
- code: S.optional(S.Union([S.String, S.Number])),
48
- });
49
- export type Diagnostic = S.Schema.Type<typeof Diagnostic>;
50
-
51
- /**
52
- * publishDiagnostics notification params
53
- */
54
- const PublishDiagnosticsParams = S.Struct({
55
- uri: S.String,
56
- diagnostics: S.Array(Diagnostic),
57
- });
58
-
59
- /**
60
- * A single LSP client connected to one server.
61
- */
62
- export interface LSPClient {
63
- readonly id: string;
64
-
65
- /**
66
- * Notify the server that a file has changed.
67
- */
68
- readonly notifyFileChanged: (
69
- path: string,
70
- content: string,
71
- ) => Effect.Effect<void>;
72
-
73
- /**
74
- * Wait for diagnostics for a file with debouncing.
75
- */
76
- readonly waitForDiagnostics: (
77
- path: string,
78
- timeout?: number,
79
- ) => Effect.Effect<Diagnostic[]>;
80
-
81
- /**
82
- * Get current diagnostics for a file.
83
- */
84
- readonly getDiagnostics: (path: string) => Effect.Effect<Diagnostic[]>;
85
-
86
- /**
87
- * Register a callback for when diagnostics are received.
88
- */
89
- readonly onDiagnostics: (
90
- callback: (uri: string, diagnostics: Diagnostic[]) => Effect.Effect<void>,
91
- ) => Effect.Effect<void>;
92
-
93
- /**
94
- * Shutdown the client.
95
- */
96
- readonly shutdown: Effect.Effect<void>;
97
- }
98
-
99
- /**
100
- * Create an LSP client from a subprocess.
101
- */
102
- export const makeLSPClient = (id: string, proc: Subprocess, root: string) =>
103
- Effect.gen(function* () {
104
- const rpc = yield* makeJsonRpc(proc);
105
-
106
- // Diagnostics storage: uri -> Diagnostic[]
107
- const diagnosticsMap = yield* Ref.make(
108
- HashMap.empty<string, Diagnostic[]>(),
109
- );
110
-
111
- // PubSub for diagnostic events
112
- const diagnosticsPubSub = yield* PubSub.unbounded<{ uri: string }>();
113
-
114
- // Track open files and their versions
115
- const openFiles = yield* Ref.make(HashMap.empty<string, number>());
116
-
117
- // External diagnostic callbacks
118
- const diagnosticCallbacks = yield* Ref.make<
119
- Array<(uri: string, diagnostics: Diagnostic[]) => Effect.Effect<void>>
120
- >([]);
121
-
122
- // Handle publishDiagnostics notifications
123
- yield* rpc.onNotification(
124
- "textDocument/publishDiagnostics",
125
- (params: unknown) =>
126
- Effect.gen(function* () {
127
- const decoded = yield* S.decodeUnknownEffect(
128
- PublishDiagnosticsParams,
129
- )(params).pipe(Effect.catch(() => Effect.succeed(null)));
130
-
131
- if (!decoded) return;
132
-
133
- // Convert readonly array to mutable for storage
134
- const diagnostics = [...decoded.diagnostics] as Diagnostic[];
135
-
136
- yield* Ref.update(diagnosticsMap, (m) =>
137
- HashMap.set(m, decoded.uri, diagnostics),
138
- );
139
-
140
- yield* PubSub.publish(diagnosticsPubSub, { uri: decoded.uri });
141
-
142
- // Call external callbacks
143
- const callbacks = yield* Ref.get(diagnosticCallbacks);
144
- yield* Effect.forEach(
145
- callbacks,
146
- (cb) => cb(decoded.uri, diagnostics),
147
- { concurrency: "unbounded" },
148
- ).pipe(Effect.catch(() => Effect.void));
149
- }),
150
- );
151
-
152
- // LSP initialize handshake
153
- yield* rpc.request("initialize", {
154
- processId: process.pid,
155
- rootUri: `file://${root}`,
156
- capabilities: {
157
- textDocument: {
158
- synchronization: {
159
- didOpen: true,
160
- didChange: true,
161
- willSave: false,
162
- willSaveWaitUntil: false,
163
- didSave: false,
164
- },
165
- publishDiagnostics: {
166
- relatedInformation: true,
167
- },
168
- },
169
- },
170
- });
171
-
172
- yield* rpc.notify("initialized", {});
173
-
174
- return {
175
- id,
176
-
177
- notifyFileChanged: (path: string, content: string) =>
178
- Effect.gen(function* () {
179
- const uri = `file://${path}`;
180
- const maybeVersion = yield* Ref.get(openFiles).pipe(
181
- Effect.map((m) => HashMap.get(m, path)),
182
- );
183
-
184
- if (Option.isNone(maybeVersion)) {
185
- // File not open yet, send didOpen
186
- yield* rpc.notify("textDocument/didOpen", {
187
- textDocument: {
188
- uri,
189
- languageId: getLanguageId(path),
190
- version: 0,
191
- text: content,
192
- },
193
- });
194
- yield* Ref.update(openFiles, (m) => HashMap.set(m, path, 0));
195
- } else {
196
- // File already open, send didChange with incremented version
197
- const newVersion = maybeVersion.value + 1;
198
- yield* rpc.notify("textDocument/didChange", {
199
- textDocument: { uri, version: newVersion },
200
- contentChanges: [{ text: content }],
201
- });
202
- yield* Ref.update(openFiles, (m) =>
203
- HashMap.set(m, path, newVersion),
204
- );
205
- }
206
- }),
207
-
208
- waitForDiagnostics: (path: string, timeout = 3000) =>
209
- Effect.gen(function* () {
210
- const uri = `file://${path}`;
211
-
212
- // Wait for diagnostics with 150ms debounce, scoped
213
- yield* Effect.scoped(
214
- Effect.gen(function* () {
215
- const subscription = yield* PubSub.subscribe(diagnosticsPubSub);
216
- yield* Stream.fromSubscription(subscription).pipe(
217
- Stream.filter((e) => e.uri === uri),
218
- Stream.debounce(150),
219
- Stream.take(1),
220
- Stream.runDrain,
221
- );
222
- }),
223
- ).pipe(
224
- Effect.timeout(timeout),
225
- Effect.catch(() => Effect.void),
226
- );
227
-
228
- // Return diagnostics for this file
229
- const diags = yield* Ref.get(diagnosticsMap).pipe(
230
- Effect.map((m) => HashMap.get(m, uri)),
231
- );
232
-
233
- return Option.getOrElse(diags, () => [] as Diagnostic[]);
234
- }),
235
-
236
- getDiagnostics: (path: string) =>
237
- Effect.gen(function* () {
238
- const uri = `file://${path}`;
239
- const diags = yield* Ref.get(diagnosticsMap).pipe(
240
- Effect.map((m) => HashMap.get(m, uri)),
241
- );
242
- return Option.getOrElse(diags, () => []);
243
- }),
244
-
245
- onDiagnostics: (
246
- callback: (
247
- uri: string,
248
- diagnostics: Diagnostic[],
249
- ) => Effect.Effect<void>,
250
- ) => Ref.update(diagnosticCallbacks, (cbs) => [...cbs, callback]),
251
-
252
- shutdown: Effect.gen(function* () {
253
- yield* rpc
254
- .request("shutdown", null)
255
- .pipe(Effect.catch(() => Effect.void));
256
- yield* rpc.notify("exit", null);
257
- yield* rpc.shutdown;
258
- }),
259
- };
260
- });
261
-
262
- /**
263
- * Get LSP language ID from file path.
264
- */
265
- const getLanguageId = (path: string): string => {
266
- const ext = path.split(".").pop()?.toLowerCase();
267
- switch (ext) {
268
- case "ts":
269
- case "mts":
270
- case "cts":
271
- return "typescript";
272
- case "tsx":
273
- case "mtsx":
274
- case "ctsx":
275
- return "typescriptreact";
276
- case "js":
277
- case "mjs":
278
- case "cjs":
279
- return "javascript";
280
- case "jsx":
281
- return "javascriptreact";
282
- case "json":
283
- return "json";
284
- case "vue":
285
- return "vue";
286
- case "svelte":
287
- return "svelte";
288
- case "astro":
289
- return "astro";
290
- default:
291
- return "plaintext";
292
- }
293
- };
@@ -1,64 +0,0 @@
1
- import * as Effect from "effect/Effect";
2
- import * as Option from "effect/Option";
3
- import { DiagnosticSeverity, type Diagnostic } from "./client.ts";
4
- import { LSPManager } from "./manager.ts";
5
-
6
- const MAX_DIAGNOSTICS_PER_FILE = 10;
7
-
8
- /**
9
- * Get diagnostics from LSP if available, otherwise return empty array.
10
- */
11
- export const getDiagnosticsIfAvailable = (
12
- filePath: string,
13
- content: string,
14
- ): Effect.Effect<Diagnostic[]> =>
15
- Effect.serviceOption(LSPManager).pipe(
16
- Effect.flatMap((maybeManager) => {
17
- if (Option.isNone(maybeManager)) {
18
- return Effect.succeed([] as Diagnostic[]);
19
- }
20
- const manager = maybeManager.value;
21
- return manager
22
- .notifyFileChanged(filePath, content)
23
- .pipe(Effect.andThen(manager.waitForDiagnostics(filePath)));
24
- }),
25
- Effect.catch(() => Effect.succeed([] as Diagnostic[])),
26
- );
27
-
28
- /**
29
- * Format a single diagnostic for display.
30
- */
31
- export const formatDiagnostic = (d: Diagnostic): string => {
32
- const severityMap: Record<number, string> = {
33
- [DiagnosticSeverity.Error]: "ERROR",
34
- [DiagnosticSeverity.Warning]: "WARN",
35
- [DiagnosticSeverity.Information]: "INFO",
36
- [DiagnosticSeverity.Hint]: "HINT",
37
- };
38
- const severity = severityMap[d.severity ?? DiagnosticSeverity.Error];
39
- const line = d.range.start.line + 1;
40
- const col = d.range.start.character + 1;
41
- return `${severity} [${line}:${col}] ${d.message}`;
42
- };
43
-
44
- /**
45
- * Format diagnostics for display (matching opencode format).
46
- * Only shows errors, limits output, and wraps in XML tags.
47
- */
48
- export const formatDiagnostics = (diagnostics: Diagnostic[]): string => {
49
- const errors = diagnostics.filter(
50
- (d) => d.severity === DiagnosticSeverity.Error,
51
- );
52
-
53
- if (errors.length === 0) {
54
- return "";
55
- }
56
-
57
- const limited = errors.slice(0, MAX_DIAGNOSTICS_PER_FILE);
58
- const suffix =
59
- errors.length > MAX_DIAGNOSTICS_PER_FILE
60
- ? `\n... and ${errors.length - MAX_DIAGNOSTICS_PER_FILE} more`
61
- : "";
62
-
63
- return `This file has errors, please fix\n<file_diagnostics>\n${limited.map(formatDiagnostic).join("\n")}${suffix}\n</file_diagnostics>`;
64
- };
@@ -1,317 +0,0 @@
1
- import type { Subprocess } from "bun";
2
- import * as Data from "effect/Data";
3
- import * as Deferred from "effect/Deferred";
4
- import * as Effect from "effect/Effect";
5
- import * as Fiber from "effect/Fiber";
6
- import * as HashMap from "effect/HashMap";
7
- import * as Option from "effect/Option";
8
- import * as Ref from "effect/Ref";
9
- import * as Stream from "effect/Stream";
10
-
11
- /**
12
- * JSON-RPC 2.0 message types
13
- */
14
- export interface JsonRpcRequest {
15
- jsonrpc: "2.0";
16
- id: number;
17
- method: string;
18
- params?: unknown;
19
- }
20
-
21
- export interface JsonRpcNotification {
22
- jsonrpc: "2.0";
23
- method: string;
24
- params?: unknown;
25
- }
26
-
27
- export interface JsonRpcResponse {
28
- jsonrpc: "2.0";
29
- id: number;
30
- result?: unknown;
31
- error?: {
32
- code: number;
33
- message: string;
34
- data?: unknown;
35
- };
36
- }
37
-
38
- export type JsonRpcMessage =
39
- | JsonRpcRequest
40
- | JsonRpcNotification
41
- | JsonRpcResponse;
42
-
43
- /**
44
- * Error from JSON-RPC protocol.
45
- */
46
- export class JsonRpcProtocolError extends Data.TaggedError(
47
- "JsonRpcProtocolError",
48
- )<{
49
- readonly code: number;
50
- readonly message: string;
51
- readonly data?: unknown;
52
- }> {}
53
-
54
- /**
55
- * Error parsing JSON-RPC messages from stream.
56
- */
57
- export class JsonRpcParseError extends Data.TaggedError("JsonRpcParseError")<{
58
- readonly cause: unknown;
59
- }> {}
60
-
61
- /**
62
- * Encode a JSON-RPC message with LSP wire format headers.
63
- * Format: Content-Length: <length>\r\n\r\n<json>
64
- */
65
- export const encodeMessage = (msg: JsonRpcMessage): Uint8Array => {
66
- const json = JSON.stringify(msg);
67
- const body = new TextEncoder().encode(json);
68
- const header = `Content-Length: ${body.byteLength}\r\n\r\n`;
69
- const headerBytes = new TextEncoder().encode(header);
70
-
71
- const result = new Uint8Array(headerBytes.length + body.length);
72
- result.set(headerBytes);
73
- result.set(body, headerBytes.length);
74
- return result;
75
- };
76
-
77
- /**
78
- * Parse LSP messages from a byte buffer.
79
- * Returns parsed messages and remaining buffer.
80
- * Works with bytes to correctly handle Content-Length (which is in bytes, not characters).
81
- */
82
- export const parseBuffer = (
83
- buffer: Uint8Array,
84
- ): { messages: JsonRpcMessage[]; remaining: Uint8Array<ArrayBuffer> } => {
85
- const messages: JsonRpcMessage[] = [];
86
- let offset = 0;
87
- const decoder = new TextDecoder();
88
-
89
- while (offset < buffer.length) {
90
- // Look for \r\n\r\n header terminator
91
- const headerEnd = findHeaderEnd(buffer, offset);
92
- if (headerEnd === -1) break;
93
-
94
- const headerPart = decoder.decode(buffer.subarray(offset, headerEnd));
95
- const match = /Content-Length:\s*(\d+)/i.exec(headerPart);
96
- if (!match) break;
97
-
98
- const contentLength = parseInt(match[1], 10);
99
- const bodyStart = headerEnd + 4; // Skip \r\n\r\n
100
- const bodyEnd = bodyStart + contentLength;
101
-
102
- // Check if we have the full body (in bytes)
103
- if (buffer.length < bodyEnd) break;
104
-
105
- const body = decoder.decode(buffer.subarray(bodyStart, bodyEnd));
106
- try {
107
- const parsed = JSON.parse(body) as JsonRpcMessage;
108
- messages.push(parsed);
109
- } catch {
110
- // Invalid JSON, skip this message
111
- }
112
-
113
- offset = bodyEnd;
114
- }
115
-
116
- // Create a new array for remaining bytes to ensure ArrayBuffer type
117
- const remainingLength = buffer.length - offset;
118
- const remaining = new Uint8Array(remainingLength);
119
- remaining.set(buffer.subarray(offset));
120
-
121
- return { messages, remaining };
122
- };
123
-
124
- /**
125
- * Find the index of \r\n\r\n in a byte array starting from offset.
126
- */
127
- const findHeaderEnd = (buffer: Uint8Array, offset: number): number => {
128
- const CR = 13; // \r
129
- const LF = 10; // \n
130
- for (let i = offset; i < buffer.length - 3; i++) {
131
- if (
132
- buffer[i] === CR &&
133
- buffer[i + 1] === LF &&
134
- buffer[i + 2] === CR &&
135
- buffer[i + 3] === LF
136
- ) {
137
- return i;
138
- }
139
- }
140
- return -1;
141
- };
142
-
143
- /**
144
- * Concatenate two Uint8Arrays.
145
- */
146
- const concatBytes = (a: Uint8Array, b: Uint8Array): Uint8Array<ArrayBuffer> => {
147
- const result = new Uint8Array(a.length + b.length);
148
- result.set(a);
149
- result.set(b, a.length);
150
- return result;
151
- };
152
-
153
- /**
154
- * Parse LSP messages from a ReadableStream.
155
- * Uses Stream.mapAccum to maintain buffer state across chunks.
156
- */
157
- const parseMessages = (stdout: ReadableStream<Uint8Array>) =>
158
- Stream.fromReadableStream({
159
- evaluate: () => stdout,
160
- onError: (cause) => new JsonRpcParseError({ cause }),
161
- }).pipe(
162
- Stream.mapAccum(
163
- () => new Uint8Array(0) as Uint8Array<ArrayBuffer>,
164
- (buffer, chunk): [Uint8Array<ArrayBuffer>, JsonRpcMessage[]] => {
165
- const combined = concatBytes(buffer, chunk);
166
- const { messages, remaining } = parseBuffer(combined);
167
- return [remaining, messages];
168
- },
169
- ),
170
- );
171
-
172
- /**
173
- * A JSON-RPC connection over stdio.
174
- */
175
- export interface JsonRpcConnection {
176
- /**
177
- * Send a request and wait for a response.
178
- */
179
- readonly request: <A>(
180
- method: string,
181
- params: unknown,
182
- ) => Effect.Effect<A, JsonRpcProtocolError>;
183
-
184
- /**
185
- * Send a notification (no response expected).
186
- */
187
- readonly notify: (method: string, params: unknown) => Effect.Effect<void>;
188
-
189
- /**
190
- * Register a handler for server notifications.
191
- */
192
- readonly onNotification: (
193
- method: string,
194
- handler: (params: unknown) => Effect.Effect<void>,
195
- ) => Effect.Effect<void>;
196
-
197
- /**
198
- * Shutdown the connection.
199
- */
200
- readonly shutdown: Effect.Effect<void>;
201
- }
202
-
203
- /**
204
- * Create a JSON-RPC connection from a subprocess.
205
- */
206
- export const make = (proc: Subprocess) =>
207
- Effect.gen(function* () {
208
- // Pending requests: id -> Deferred<response>
209
- const pending = yield* Ref.make(
210
- HashMap.empty<number, Deferred.Deferred<unknown, JsonRpcProtocolError>>(),
211
- );
212
- const nextId = yield* Ref.make(0);
213
-
214
- // Notification handlers
215
- const notificationHandlers = yield* Ref.make(
216
- HashMap.empty<string, (params: unknown) => Effect.Effect<void>>(),
217
- );
218
-
219
- // Background fiber reading stdout
220
- const reader = yield* parseMessages(
221
- proc.stdout as ReadableStream<Uint8Array>,
222
- ).pipe(
223
- Stream.runForEach((msg) =>
224
- Effect.gen(function* () {
225
- if ("id" in msg && ("result" in msg || "error" in msg)) {
226
- // Response to our request
227
- const response = msg as JsonRpcResponse;
228
- const maybeDeferred = yield* Ref.get(pending).pipe(
229
- Effect.map((m) => HashMap.get(m, response.id)),
230
- );
231
-
232
- if (Option.isSome(maybeDeferred)) {
233
- if (response.error) {
234
- yield* Deferred.fail(
235
- maybeDeferred.value,
236
- new JsonRpcProtocolError({
237
- code: response.error.code,
238
- message: response.error.message,
239
- data: response.error.data,
240
- }),
241
- );
242
- } else {
243
- yield* Deferred.succeed(maybeDeferred.value, response.result);
244
- }
245
- // Clean up the pending request
246
- yield* Ref.update(pending, (m) => HashMap.remove(m, response.id));
247
- }
248
- } else if ("method" in msg && !("id" in msg)) {
249
- // Notification from server
250
- const notification = msg as JsonRpcNotification;
251
- const maybeHandler = yield* Ref.get(notificationHandlers).pipe(
252
- Effect.map((m) => HashMap.get(m, notification.method)),
253
- );
254
-
255
- if (Option.isSome(maybeHandler)) {
256
- yield* maybeHandler.value(notification.params);
257
- }
258
- }
259
- }),
260
- ),
261
- Effect.catch((e) => Effect.logWarning(`JSON-RPC reader error: ${e}`)),
262
- Effect.forkDetach,
263
- );
264
-
265
- const connection: JsonRpcConnection = {
266
- request: <A>(method: string, params: unknown) =>
267
- Effect.gen(function* () {
268
- const id = yield* Ref.getAndUpdate(nextId, (n) => n + 1);
269
- const deferred = yield* Deferred.make<A, JsonRpcProtocolError>();
270
- yield* Ref.update(pending, (m) =>
271
- HashMap.set(
272
- m,
273
- id,
274
- deferred as Deferred.Deferred<unknown, JsonRpcProtocolError>,
275
- ),
276
- );
277
-
278
- yield* Effect.sync(() => {
279
- const msg: JsonRpcRequest = { jsonrpc: "2.0", id, method, params };
280
- const stdin = proc.stdin;
281
- if (stdin && typeof stdin === "object" && "write" in stdin) {
282
- (stdin as { write: (data: Uint8Array) => void }).write(
283
- encodeMessage(msg),
284
- );
285
- }
286
- });
287
-
288
- return yield* Deferred.await(deferred);
289
- }),
290
-
291
- notify: (method: string, params: unknown) =>
292
- Effect.sync(() => {
293
- const msg: JsonRpcNotification = { jsonrpc: "2.0", method, params };
294
- const stdin = proc.stdin;
295
- if (stdin && typeof stdin === "object" && "write" in stdin) {
296
- (stdin as { write: (data: Uint8Array) => void }).write(
297
- encodeMessage(msg),
298
- );
299
- }
300
- }),
301
-
302
- onNotification: (
303
- method: string,
304
- handler: (params: unknown) => Effect.Effect<void>,
305
- ) =>
306
- Ref.update(notificationHandlers, (m) =>
307
- HashMap.set(m, method, handler),
308
- ),
309
-
310
- shutdown: Effect.gen(function* () {
311
- yield* Fiber.interrupt(reader);
312
- yield* Effect.sync(() => proc.kill());
313
- }),
314
- };
315
-
316
- return connection;
317
- });