alchemy 2.0.0-beta.37 → 2.0.0-beta.38

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 (633) 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/Worker.d.ts +2 -2
  183. package/lib/Cloudflare/Workers/Worker.d.ts.map +1 -1
  184. package/lib/Cloudflare/Workers/Worker.js +15 -4
  185. package/lib/Cloudflare/Workers/Worker.js.map +1 -1
  186. package/lib/Cloudflare/Workers/WorkerBundle.d.ts +1 -1
  187. package/lib/Cloudflare/Workers/WorkerBundle.d.ts.map +1 -1
  188. package/lib/Cloudflare/Workers/WorkerBundle.js +4 -6
  189. package/lib/Cloudflare/Workers/WorkerBundle.js.map +1 -1
  190. package/lib/Cloudflare/Workers/WorkerName.d.ts +1 -1
  191. package/lib/Cloudflare/Workers/Workflow.js +2 -2
  192. package/lib/Cloudflare/Workers/Workflow.js.map +1 -1
  193. package/lib/Cloudflare/index.d.ts +1 -0
  194. package/lib/Cloudflare/index.d.ts.map +1 -1
  195. package/lib/Cloudflare/index.js +1 -0
  196. package/lib/Cloudflare/index.js.map +1 -1
  197. package/lib/Construct.d.ts +3 -3
  198. package/lib/Construct.d.ts.map +1 -1
  199. package/lib/Construct.js.map +1 -1
  200. package/lib/Deploy.d.ts +1 -1
  201. package/lib/Destroy.d.ts +1 -1
  202. package/lib/Destroy.d.ts.map +1 -1
  203. package/lib/Destroy.js +1 -0
  204. package/lib/Destroy.js.map +1 -1
  205. package/lib/Drizzle/Providers.d.ts +1 -1
  206. package/lib/Drizzle/Schema.d.ts +1 -1
  207. package/lib/GitHub/Providers.d.ts +1 -1
  208. package/lib/Http.d.ts +1 -1
  209. package/lib/Http.d.ts.map +1 -1
  210. package/lib/Http.js +1 -1
  211. package/lib/Http.js.map +1 -1
  212. package/lib/Namespace.d.ts.map +1 -1
  213. package/lib/Namespace.js +3 -4
  214. package/lib/Namespace.js.map +1 -1
  215. package/lib/Neon/Branch.d.ts +2 -2
  216. package/lib/Neon/Branch.d.ts.map +1 -1
  217. package/lib/Neon/Branch.js +59 -27
  218. package/lib/Neon/Branch.js.map +1 -1
  219. package/lib/Neon/Credentials.d.ts +2 -2
  220. package/lib/Neon/Credentials.d.ts.map +1 -1
  221. package/lib/Neon/Credentials.js +2 -2
  222. package/lib/Neon/Credentials.js.map +1 -1
  223. package/lib/Neon/NeonEnvironment.d.ts +1 -1
  224. package/lib/Neon/Project.d.ts +25 -1
  225. package/lib/Neon/Project.d.ts.map +1 -1
  226. package/lib/Neon/Project.js +121 -42
  227. package/lib/Neon/Project.js.map +1 -1
  228. package/lib/Neon/Providers.d.ts +1 -1
  229. package/lib/Neon/SqlFile.d.ts +2 -2
  230. package/lib/Output.d.ts +3 -4
  231. package/lib/Output.d.ts.map +1 -1
  232. package/lib/Output.js +7 -4
  233. package/lib/Output.js.map +1 -1
  234. package/lib/PhysicalName.d.ts +1 -1
  235. package/lib/Plan.d.ts +36 -1
  236. package/lib/Plan.d.ts.map +1 -1
  237. package/lib/Plan.js +197 -31
  238. package/lib/Plan.js.map +1 -1
  239. package/lib/Platform.js +6 -6
  240. package/lib/Platform.js.map +1 -1
  241. package/lib/Provider.d.ts +1 -1
  242. package/lib/Provider.d.ts.map +1 -1
  243. package/lib/Provider.js +1 -1
  244. package/lib/Provider.js.map +1 -1
  245. package/lib/Random.d.ts +1 -1
  246. package/lib/Random.d.ts.map +1 -1
  247. package/lib/Random.js +1 -1
  248. package/lib/Random.js.map +1 -1
  249. package/lib/Resource.d.ts.map +1 -1
  250. package/lib/Resource.js +2 -25
  251. package/lib/Resource.js.map +1 -1
  252. package/lib/Runtime.d.ts +24 -0
  253. package/lib/Runtime.d.ts.map +1 -0
  254. package/lib/Runtime.js +31 -0
  255. package/lib/Runtime.js.map +1 -0
  256. package/lib/Secret.js +1 -1
  257. package/lib/Secret.js.map +1 -1
  258. package/lib/Sidecar/RpcClient.d.ts +1 -1
  259. package/lib/Sidecar/RpcPaths.d.ts +1 -1
  260. package/lib/Sidecar/RpcServer.d.ts +1 -1
  261. package/lib/Sidecar/RpcServices.d.ts +1 -1
  262. package/lib/Stack.d.ts +7 -2
  263. package/lib/Stack.d.ts.map +1 -1
  264. package/lib/Stack.js +4 -4
  265. package/lib/Stack.js.map +1 -1
  266. package/lib/State/ActionState.d.ts +48 -0
  267. package/lib/State/ActionState.d.ts.map +1 -0
  268. package/lib/State/ActionState.js +1 -0
  269. package/lib/State/ActionState.js.map +1 -0
  270. package/lib/State/HttpStateStore.d.ts.map +1 -1
  271. package/lib/State/HttpStateStore.js +1 -1
  272. package/lib/State/HttpStateStore.js.map +1 -1
  273. package/lib/State/InMemoryState.d.ts.map +1 -1
  274. package/lib/State/InMemoryState.js.map +1 -1
  275. package/lib/State/LocalState.d.ts +2 -2
  276. package/lib/State/ResourceState.d.ts +5 -0
  277. package/lib/State/ResourceState.d.ts.map +1 -1
  278. package/lib/State/State.d.ts +10 -2
  279. package/lib/State/State.d.ts.map +1 -1
  280. package/lib/State/State.js +2 -0
  281. package/lib/State/State.js.map +1 -1
  282. package/lib/State/index.d.ts +1 -0
  283. package/lib/State/index.d.ts.map +1 -1
  284. package/lib/State/index.js +1 -0
  285. package/lib/State/index.js.map +1 -1
  286. package/lib/Test/Core.d.ts +2 -2
  287. package/lib/Test/Core.d.ts.map +1 -1
  288. package/lib/Test/Core.js +4 -1
  289. package/lib/Test/Core.js.map +1 -1
  290. package/lib/Util/FileLogger.d.ts +1 -1
  291. package/lib/Util/effect.js +4 -4
  292. package/lib/Util/effect.js.map +1 -1
  293. package/lib/Util/exec.d.ts.map +1 -0
  294. package/lib/Util/exec.js.map +1 -0
  295. package/lib/Util/hash.d.ts +8 -0
  296. package/lib/Util/hash.d.ts.map +1 -0
  297. package/lib/Util/hash.js +11 -0
  298. package/lib/Util/hash.js.map +1 -0
  299. package/lib/Util/ignore.d.ts +40 -0
  300. package/lib/Util/ignore.d.ts.map +1 -0
  301. package/lib/Util/ignore.js +591 -0
  302. package/lib/Util/ignore.js.map +1 -0
  303. package/lib/index.d.ts +1 -0
  304. package/lib/index.d.ts.map +1 -1
  305. package/lib/index.js +1 -0
  306. package/lib/index.js.map +1 -1
  307. package/lib/tsconfig.test.tsbuildinfo +1 -1
  308. package/package.json +22 -28
  309. package/src/AWS/Credentials.ts +1 -2
  310. package/src/AWS/DynamoDB/Stream.ts +1 -4
  311. package/src/AWS/EC2/hosted.ts +14 -16
  312. package/src/AWS/ECS/Task.ts +14 -16
  313. package/src/AWS/Endpoint.ts +2 -5
  314. package/src/AWS/EventBridge/EventSource.ts +1 -4
  315. package/src/AWS/Kinesis/StreamEventSource.ts +1 -4
  316. package/src/AWS/Lambda/Function.ts +31 -35
  317. package/src/AWS/Providers.ts +22 -3
  318. package/src/AWS/Region.ts +2 -3
  319. package/src/AWS/S3/Bucket.ts +7 -2
  320. package/src/AWS/S3/BucketNotifications.ts +1 -4
  321. package/src/AWS/SNS/TopicEventSource.ts +1 -4
  322. package/src/AWS/SQS/Queue.ts +40 -6
  323. package/src/Action.ts +280 -0
  324. package/src/Apply.ts +351 -23
  325. package/src/Artifacts.ts +2 -4
  326. package/src/Auth/AuthProvider.ts +1 -1
  327. package/src/Auth/Env.ts +12 -20
  328. package/src/Binding.ts +5 -9
  329. package/src/Bundle/Docker.ts +1 -1
  330. package/src/Cli/Event.ts +4 -0
  331. package/src/Cli/NamespaceTree.ts +52 -5
  332. package/src/Cli/commands/_shared.ts +2 -2
  333. package/src/Cli/commands/deploy.ts +1 -1
  334. package/src/Cli/commands/logs.ts +4 -4
  335. package/src/Cli/commands/tail.ts +4 -4
  336. package/src/Cli/tui/components/Plan.tsx +65 -17
  337. package/src/Cli/tui/components/PlanProgress.tsx +142 -32
  338. package/src/Cloudflare/Access.ts +1 -1
  339. package/src/Cloudflare/AnalyticsEngine/AnalyticsEngineDatasetBinding.ts +1 -1
  340. package/src/Cloudflare/Artifacts/ArtifactsBinding.ts +1 -1
  341. package/src/Cloudflare/Container/Container.ts +1 -1
  342. package/src/Cloudflare/Container/ContainerApplication.ts +4 -6
  343. package/src/Cloudflare/Container/ContainerBinding.ts +2 -2
  344. package/src/Cloudflare/Email/EmailAddress.ts +155 -0
  345. package/src/Cloudflare/Email/EmailRouting.ts +138 -0
  346. package/src/Cloudflare/Email/EmailRule.ts +210 -0
  347. package/src/Cloudflare/Email/SendEmail.ts +95 -0
  348. package/src/Cloudflare/Email/SendEmailBinding.ts +124 -0
  349. package/src/Cloudflare/Email/index.ts +5 -0
  350. package/src/Cloudflare/Images/ImagesBinding.ts +1 -1
  351. package/src/Cloudflare/KV/KVNamespaceBinding.ts +1 -1
  352. package/src/Cloudflare/Local/SidecarServer.ts +1 -1
  353. package/src/Cloudflare/Providers.ts +9 -0
  354. package/src/Cloudflare/Queue/QueueBinding.ts +1 -1
  355. package/src/Cloudflare/R2/R2BucketBinding.ts +1 -1
  356. package/src/Cloudflare/SecretsStore/SecretBinding.ts +1 -1
  357. package/src/Cloudflare/Workers/Assets.ts +5 -6
  358. package/src/Cloudflare/Workers/Worker.ts +19 -4
  359. package/src/Cloudflare/Workers/WorkerBundle.ts +4 -6
  360. package/src/Cloudflare/Workers/Workflow.ts +2 -2
  361. package/src/Cloudflare/index.ts +1 -0
  362. package/src/Construct.ts +3 -7
  363. package/src/Destroy.ts +1 -0
  364. package/src/Http.ts +1 -1
  365. package/src/Namespace.ts +4 -4
  366. package/src/Neon/Branch.ts +93 -59
  367. package/src/Neon/Credentials.ts +2 -2
  368. package/src/Neon/Project.ts +193 -64
  369. package/src/Output.ts +9 -7
  370. package/src/Plan.ts +303 -53
  371. package/src/Platform.ts +7 -7
  372. package/src/Provider.ts +8 -3
  373. package/src/Random.ts +1 -1
  374. package/src/Resource.ts +2 -25
  375. package/src/Runtime.ts +38 -0
  376. package/src/Secret.ts +1 -1
  377. package/src/Stack.ts +10 -6
  378. package/src/State/ActionState.ts +51 -0
  379. package/src/State/HttpStateStore.ts +6 -2
  380. package/src/State/InMemoryState.ts +3 -3
  381. package/src/State/ResourceState.ts +5 -0
  382. package/src/State/State.ts +17 -2
  383. package/src/State/index.ts +1 -0
  384. package/src/Test/Core.ts +4 -3
  385. package/src/Util/effect.ts +4 -4
  386. package/src/Util/hash.ts +14 -0
  387. package/src/Util/ignore.ts +815 -0
  388. package/src/index.ts +6 -0
  389. package/lib/Agent/Agent.d.ts +0 -9
  390. package/lib/Agent/Agent.d.ts.map +0 -1
  391. package/lib/Agent/Agent.js +0 -10
  392. package/lib/Agent/Agent.js.map +0 -1
  393. package/lib/Agent/Aspect.d.ts +0 -51
  394. package/lib/Agent/Aspect.d.ts.map +0 -1
  395. package/lib/Agent/Aspect.js +0 -45
  396. package/lib/Agent/Aspect.js.map +0 -1
  397. package/lib/Agent/AspectGraph.d.ts +0 -45
  398. package/lib/Agent/AspectGraph.d.ts.map +0 -1
  399. package/lib/Agent/AspectGraph.js +0 -39
  400. package/lib/Agent/AspectGraph.js.map +0 -1
  401. package/lib/Agent/ContextPlugin.d.ts +0 -8
  402. package/lib/Agent/ContextPlugin.d.ts.map +0 -1
  403. package/lib/Agent/ContextPlugin.js +0 -3
  404. package/lib/Agent/ContextPlugin.js.map +0 -1
  405. package/lib/Agent/Plugin.d.ts +0 -18
  406. package/lib/Agent/Plugin.d.ts.map +0 -1
  407. package/lib/Agent/Plugin.js +0 -8
  408. package/lib/Agent/Plugin.js.map +0 -1
  409. package/lib/Agent/chat/channel.d.ts +0 -9
  410. package/lib/Agent/chat/channel.d.ts.map +0 -1
  411. package/lib/Agent/chat/channel.js +0 -10
  412. package/lib/Agent/chat/channel.js.map +0 -1
  413. package/lib/Agent/chat/event.d.ts +0 -32
  414. package/lib/Agent/chat/event.d.ts.map +0 -1
  415. package/lib/Agent/chat/event.js +0 -32
  416. package/lib/Agent/chat/event.js.map +0 -1
  417. package/lib/Agent/chat/message.d.ts +0 -22
  418. package/lib/Agent/chat/message.d.ts.map +0 -1
  419. package/lib/Agent/chat/message.js +0 -31
  420. package/lib/Agent/chat/message.js.map +0 -1
  421. package/lib/Agent/chat/service.d.ts +0 -102
  422. package/lib/Agent/chat/service.d.ts.map +0 -1
  423. package/lib/Agent/chat/service.js +0 -79
  424. package/lib/Agent/chat/service.js.map +0 -1
  425. package/lib/Agent/chat/thread.d.ts +0 -13
  426. package/lib/Agent/chat/thread.d.ts.map +0 -1
  427. package/lib/Agent/chat/thread.js +0 -16
  428. package/lib/Agent/chat/thread.js.map +0 -1
  429. package/lib/Agent/coding/bash.d.ts +0 -36
  430. package/lib/Agent/coding/bash.d.ts.map +0 -1
  431. package/lib/Agent/coding/bash.js +0 -170
  432. package/lib/Agent/coding/bash.js.map +0 -1
  433. package/lib/Agent/coding/edit.d.ts +0 -31
  434. package/lib/Agent/coding/edit.d.ts.map +0 -1
  435. package/lib/Agent/coding/edit.js +0 -90
  436. package/lib/Agent/coding/edit.js.map +0 -1
  437. package/lib/Agent/coding/glob.d.ts +0 -23
  438. package/lib/Agent/coding/glob.d.ts.map +0 -1
  439. package/lib/Agent/coding/glob.js +0 -78
  440. package/lib/Agent/coding/glob.js.map +0 -1
  441. package/lib/Agent/coding/grep.d.ts +0 -26
  442. package/lib/Agent/coding/grep.d.ts.map +0 -1
  443. package/lib/Agent/coding/grep.js +0 -105
  444. package/lib/Agent/coding/grep.js.map +0 -1
  445. package/lib/Agent/coding/index.d.ts +0 -8
  446. package/lib/Agent/coding/index.d.ts.map +0 -1
  447. package/lib/Agent/coding/index.js +0 -8
  448. package/lib/Agent/coding/index.js.map +0 -1
  449. package/lib/Agent/coding/read.d.ts +0 -27
  450. package/lib/Agent/coding/read.d.ts.map +0 -1
  451. package/lib/Agent/coding/read.js +0 -89
  452. package/lib/Agent/coding/read.js.map +0 -1
  453. package/lib/Agent/coding/readlints.d.ts +0 -19
  454. package/lib/Agent/coding/readlints.d.ts.map +0 -1
  455. package/lib/Agent/coding/readlints.js +0 -53
  456. package/lib/Agent/coding/readlints.js.map +0 -1
  457. package/lib/Agent/coding/write.d.ts +0 -22
  458. package/lib/Agent/coding/write.d.ts.map +0 -1
  459. package/lib/Agent/coding/write.js +0 -53
  460. package/lib/Agent/coding/write.js.map +0 -1
  461. package/lib/Agent/fs/file.d.ts +0 -12
  462. package/lib/Agent/fs/file.d.ts.map +0 -1
  463. package/lib/Agent/fs/file.js +0 -8
  464. package/lib/Agent/fs/file.js.map +0 -1
  465. package/lib/Agent/fs/folder.d.ts +0 -5
  466. package/lib/Agent/fs/folder.d.ts.map +0 -1
  467. package/lib/Agent/fs/folder.js +0 -3
  468. package/lib/Agent/fs/folder.js.map +0 -1
  469. package/lib/Agent/index.d.ts +0 -9
  470. package/lib/Agent/index.d.ts.map +0 -1
  471. package/lib/Agent/index.js +0 -9
  472. package/lib/Agent/index.js.map +0 -1
  473. package/lib/Agent/llm/error.d.ts +0 -208
  474. package/lib/Agent/llm/error.d.ts.map +0 -1
  475. package/lib/Agent/llm/error.js +0 -209
  476. package/lib/Agent/llm/error.js.map +0 -1
  477. package/lib/Agent/llm/index.d.ts +0 -5
  478. package/lib/Agent/llm/index.d.ts.map +0 -1
  479. package/lib/Agent/llm/index.js +0 -5
  480. package/lib/Agent/llm/index.js.map +0 -1
  481. package/lib/Agent/llm/llm.d.ts +0 -32
  482. package/lib/Agent/llm/llm.d.ts.map +0 -1
  483. package/lib/Agent/llm/llm.js +0 -74
  484. package/lib/Agent/llm/llm.js.map +0 -1
  485. package/lib/Agent/llm/stream-collectors.d.ts +0 -46
  486. package/lib/Agent/llm/stream-collectors.d.ts.map +0 -1
  487. package/lib/Agent/llm/stream-collectors.js +0 -33
  488. package/lib/Agent/llm/stream-collectors.js.map +0 -1
  489. package/lib/Agent/llm/stream-text-part.d.ts +0 -5
  490. package/lib/Agent/llm/stream-text-part.d.ts.map +0 -1
  491. package/lib/Agent/llm/stream-text-part.js +0 -4
  492. package/lib/Agent/llm/stream-text-part.js.map +0 -1
  493. package/lib/Agent/lsp/client.d.ts +0 -122
  494. package/lib/Agent/lsp/client.d.ts.map +0 -1
  495. package/lib/Agent/lsp/client.js +0 -180
  496. package/lib/Agent/lsp/client.js.map +0 -1
  497. package/lib/Agent/lsp/diagnostics.d.ts +0 -16
  498. package/lib/Agent/lsp/diagnostics.d.ts.map +0 -1
  499. package/lib/Agent/lsp/diagnostics.js +0 -48
  500. package/lib/Agent/lsp/diagnostics.js.map +0 -1
  501. package/lib/Agent/lsp/jsonrpc.d.ts +0 -90
  502. package/lib/Agent/lsp/jsonrpc.d.ts.map +0 -1
  503. package/lib/Agent/lsp/jsonrpc.js +0 -178
  504. package/lib/Agent/lsp/jsonrpc.js.map +0 -1
  505. package/lib/Agent/lsp/manager.d.ts +0 -38
  506. package/lib/Agent/lsp/manager.d.ts.map +0 -1
  507. package/lib/Agent/lsp/manager.js +0 -98
  508. package/lib/Agent/lsp/manager.js.map +0 -1
  509. package/lib/Agent/lsp/servers.d.ts +0 -28
  510. package/lib/Agent/lsp/servers.d.ts.map +0 -1
  511. package/lib/Agent/lsp/servers.js +0 -21
  512. package/lib/Agent/lsp/servers.js.map +0 -1
  513. package/lib/Agent/process/driver.d.ts +0 -10
  514. package/lib/Agent/process/driver.d.ts.map +0 -1
  515. package/lib/Agent/process/driver.js +0 -153
  516. package/lib/Agent/process/driver.js.map +0 -1
  517. package/lib/Agent/process/issue-service.d.ts +0 -44
  518. package/lib/Agent/process/issue-service.d.ts.map +0 -1
  519. package/lib/Agent/process/issue-service.js +0 -28
  520. package/lib/Agent/process/issue-service.js.map +0 -1
  521. package/lib/Agent/process/issue-tools.d.ts +0 -28
  522. package/lib/Agent/process/issue-tools.d.ts.map +0 -1
  523. package/lib/Agent/process/issue-tools.js +0 -28
  524. package/lib/Agent/process/issue-tools.js.map +0 -1
  525. package/lib/Agent/process/issue.d.ts +0 -16
  526. package/lib/Agent/process/issue.d.ts.map +0 -1
  527. package/lib/Agent/process/issue.js +0 -17
  528. package/lib/Agent/process/issue.js.map +0 -1
  529. package/lib/Agent/process/organization.d.ts +0 -4
  530. package/lib/Agent/process/organization.d.ts.map +0 -1
  531. package/lib/Agent/process/organization.js +0 -3
  532. package/lib/Agent/process/organization.js.map +0 -1
  533. package/lib/Agent/process/process.d.ts +0 -5
  534. package/lib/Agent/process/process.d.ts.map +0 -1
  535. package/lib/Agent/process/process.js +0 -3
  536. package/lib/Agent/process/process.js.map +0 -1
  537. package/lib/Agent/process/reply.d.ts +0 -16
  538. package/lib/Agent/process/reply.d.ts.map +0 -1
  539. package/lib/Agent/process/reply.js +0 -18
  540. package/lib/Agent/process/reply.js.map +0 -1
  541. package/lib/Agent/process/task.d.ts +0 -25
  542. package/lib/Agent/process/task.d.ts.map +0 -1
  543. package/lib/Agent/process/task.js +0 -26
  544. package/lib/Agent/process/task.js.map +0 -1
  545. package/lib/Agent/tool/index.d.ts +0 -4
  546. package/lib/Agent/tool/index.d.ts.map +0 -1
  547. package/lib/Agent/tool/index.js +0 -4
  548. package/lib/Agent/tool/index.js.map +0 -1
  549. package/lib/Agent/tool/parameter.d.ts +0 -12
  550. package/lib/Agent/tool/parameter.d.ts.map +0 -1
  551. package/lib/Agent/tool/parameter.js +0 -6
  552. package/lib/Agent/tool/parameter.js.map +0 -1
  553. package/lib/Agent/tool/result.d.ts +0 -17
  554. package/lib/Agent/tool/result.d.ts.map +0 -1
  555. package/lib/Agent/tool/result.js +0 -6
  556. package/lib/Agent/tool/result.js.map +0 -1
  557. package/lib/Agent/tool/tool.d.ts +0 -32
  558. package/lib/Agent/tool/tool.d.ts.map +0 -1
  559. package/lib/Agent/tool/tool.js +0 -16
  560. package/lib/Agent/tool/tool.js.map +0 -1
  561. package/lib/Agent/util/command-validator.d.ts +0 -12
  562. package/lib/Agent/util/command-validator.d.ts.map +0 -1
  563. package/lib/Agent/util/command-validator.js +0 -74
  564. package/lib/Agent/util/command-validator.js.map +0 -1
  565. package/lib/Agent/util/exec.d.ts.map +0 -1
  566. package/lib/Agent/util/exec.js.map +0 -1
  567. package/lib/Agent/util/parser.d.ts +0 -5
  568. package/lib/Agent/util/parser.d.ts.map +0 -1
  569. package/lib/Agent/util/parser.js +0 -41
  570. package/lib/Agent/util/parser.js.map +0 -1
  571. package/lib/Agent/util/replace.d.ts +0 -38
  572. package/lib/Agent/util/replace.d.ts.map +0 -1
  573. package/lib/Agent/util/replace.js +0 -458
  574. package/lib/Agent/util/replace.js.map +0 -1
  575. package/lib/Agent/util/ripgrep.d.ts +0 -109
  576. package/lib/Agent/util/ripgrep.d.ts.map +0 -1
  577. package/lib/Agent/util/ripgrep.js +0 -221
  578. package/lib/Agent/util/ripgrep.js.map +0 -1
  579. package/lib/Neon/api.d.ts +0 -258
  580. package/lib/Neon/api.d.ts.map +0 -1
  581. package/lib/Neon/api.js +0 -215
  582. package/lib/Neon/api.js.map +0 -1
  583. package/src/Agent/Agent.ts +0 -26
  584. package/src/Agent/Aspect.ts +0 -173
  585. package/src/Agent/AspectGraph.ts +0 -98
  586. package/src/Agent/ContextPlugin.ts +0 -18
  587. package/src/Agent/Plugin.ts +0 -29
  588. package/src/Agent/chat/channel.ts +0 -26
  589. package/src/Agent/chat/event.ts +0 -43
  590. package/src/Agent/chat/message.ts +0 -35
  591. package/src/Agent/chat/service.ts +0 -133
  592. package/src/Agent/chat/thread.ts +0 -17
  593. package/src/Agent/coding/bash.ts +0 -197
  594. package/src/Agent/coding/edit.ts +0 -152
  595. package/src/Agent/coding/glob.ts +0 -96
  596. package/src/Agent/coding/grep.ts +0 -143
  597. package/src/Agent/coding/index.ts +0 -7
  598. package/src/Agent/coding/read.ts +0 -119
  599. package/src/Agent/coding/readlints.ts +0 -78
  600. package/src/Agent/coding/write.ts +0 -79
  601. package/src/Agent/fs/file.ts +0 -22
  602. package/src/Agent/fs/folder.ts +0 -16
  603. package/src/Agent/index.ts +0 -9
  604. package/src/Agent/llm/error.ts +0 -330
  605. package/src/Agent/llm/index.ts +0 -4
  606. package/src/Agent/llm/llm.ts +0 -131
  607. package/src/Agent/llm/stream-collectors.ts +0 -58
  608. package/src/Agent/llm/stream-text-part.ts +0 -7
  609. package/src/Agent/lsp/client.ts +0 -293
  610. package/src/Agent/lsp/diagnostics.ts +0 -64
  611. package/src/Agent/lsp/jsonrpc.ts +0 -317
  612. package/src/Agent/lsp/manager.ts +0 -213
  613. package/src/Agent/lsp/servers.ts +0 -37
  614. package/src/Agent/process/driver.ts +0 -168
  615. package/src/Agent/process/issue-service.ts +0 -48
  616. package/src/Agent/process/issue-tools.ts +0 -33
  617. package/src/Agent/process/issue.ts +0 -22
  618. package/src/Agent/process/organization.ts +0 -16
  619. package/src/Agent/process/process.ts +0 -16
  620. package/src/Agent/process/reply.ts +0 -21
  621. package/src/Agent/process/task.ts +0 -34
  622. package/src/Agent/tool/index.ts +0 -3
  623. package/src/Agent/tool/parameter.ts +0 -35
  624. package/src/Agent/tool/result.ts +0 -51
  625. package/src/Agent/tool/tool.ts +0 -74
  626. package/src/Agent/util/command-validator.ts +0 -98
  627. package/src/Agent/util/parser.ts +0 -39
  628. package/src/Agent/util/replace.ts +0 -559
  629. package/src/Agent/util/ripgrep.ts +0 -256
  630. package/src/Neon/api.ts +0 -579
  631. /package/lib/{Agent/util → Util}/exec.d.ts +0 -0
  632. /package/lib/{Agent/util → Util}/exec.js +0 -0
  633. /package/src/{Agent/util → Util}/exec.ts +0 -0
package/src/Action.ts ADDED
@@ -0,0 +1,280 @@
1
+ import * as Context from "effect/Context";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Layer from "effect/Layer";
4
+ import type { Pipeable } from "effect/Pipeable";
5
+ import { toFqn } from "./FQN.ts";
6
+ import type { Input } from "./Input.ts";
7
+ import { CurrentNamespace, type NamespaceNode } from "./Namespace.ts";
8
+ import * as Output from "./Output.ts";
9
+ import { Stack } from "./Stack.ts";
10
+
11
+ /**
12
+ * An Action is a node in the dependency graph that runs an Effect with its
13
+ * resolved input during {@link plan}/{@link apply}. It is similar to a
14
+ * Resource but without a Provider lifecycle:
15
+ *
16
+ * - It has a LogicalId and typed Input.
17
+ * - The body Effect is called when input changes (diff) or `--force` is set.
18
+ * - There is no replace/precreate/read/delete: removing an Action from the
19
+ * stack simply drops its persisted state without invoking the body.
20
+ * - Dependencies pulled in by the init Effect surface as `Req` on the
21
+ * call site, exactly like a Resource's provider services.
22
+ *
23
+ * Actions are recorded on {@link Stack.actions} and produce a single output
24
+ * value; `yield*` on the constructor returns `Output<Out>` for use as
25
+ * input to downstream Resources / Actions.
26
+ */
27
+ export interface ActionLike<
28
+ Type extends string = string,
29
+ In extends object | undefined = any,
30
+ Out = any,
31
+ > {
32
+ readonly Kind: "action";
33
+ readonly Namespace: NamespaceNode | undefined;
34
+ readonly FQN: string;
35
+ readonly Type: Type;
36
+ readonly LogicalId: string;
37
+ readonly Input: In;
38
+ /** Resolved runner — populated by the init effect (if any). */
39
+ readonly Run: (input: In) => Effect.Effect<Out, any, any>;
40
+ /** @internal phantom */
41
+ Output: Out;
42
+ }
43
+
44
+ export const isAction = (value: any): value is ActionLike =>
45
+ typeof value === "object" && value !== null && value?.Kind === "action";
46
+
47
+ /** Body function — runs each time the resolved input changes. */
48
+ export type ActionRunner<In extends object | undefined, Out, Req = any> = (
49
+ input: In,
50
+ ) => Effect.Effect<Out, any, Req>;
51
+
52
+ /**
53
+ * Init Effect — declares dependencies via `yield*` and returns the runner.
54
+ * Lets multiple Action definitions share resolved services.
55
+ */
56
+ export type ActionInit<In extends object | undefined, Out, Req> = Effect.Effect<
57
+ ActionRunner<In, Out, any>,
58
+ any,
59
+ Req
60
+ >;
61
+
62
+ // ── Public API ─────────────────────────────────────────────────────────────
63
+ //
64
+ // Direct runner:
65
+ //
66
+ // const Sync = Action("Sync", Effect.fn(function* (input: { table: string }) {
67
+ // return { rows: 42 };
68
+ // }));
69
+ //
70
+ // Init constructor — pulls in dependencies, returns the runner. The init
71
+ // Effect's `Req` channel bubbles up to the call site:
72
+ //
73
+ // const Sync = Action("Sync", Effect.gen(function* () {
74
+ // const db = yield* Database;
75
+ // return Effect.fn(function* (input: { table: string }) {
76
+ // return { rows: yield* db.count(input.table) };
77
+ // });
78
+ // }));
79
+ //
80
+ // Either way, call it inside a stack to register an instance — `yield*`
81
+ // returns `Output<Out>` ready to feed into downstream nodes:
82
+ //
83
+ // const rows = yield* Sync({ table: bucket.name });
84
+ // // rows: Output<{ rows: number }, never>
85
+ //
86
+ // Tagged form for split contract/implementation:
87
+ //
88
+ // class Sync extends Action<Sync, { table: string }, { rows: number }>()("Sync") {}
89
+ // const SyncLive = Sync.make(Effect.gen(function* () { /* ... */ }));
90
+
91
+ export function Action<
92
+ Type extends string,
93
+ In extends object | undefined,
94
+ Out,
95
+ Req = never,
96
+ >(
97
+ type: Type,
98
+ initOrRun: ActionRunner<In, Out, Req> | ActionInit<In, Out, Req>,
99
+ ): ActionClass<never, Type, In, Out, Req>;
100
+
101
+ export function Action<Self, In extends object | undefined, Out>(): <
102
+ Type extends string,
103
+ >(
104
+ type: Type,
105
+ ) => ActionClass<Self, Type, In, Out, Self>;
106
+
107
+ export function Action(...args: any[]): any {
108
+ if (args.length === 0) {
109
+ // Tagged form: Action<Self, In, Out>()(type)
110
+ return (type: string) => makeActionClass(type, undefined);
111
+ }
112
+ // Inline form: Action(type, runnerOrInit)
113
+ const [type, initOrRun] = args as [
114
+ string,
115
+ ActionRunner<any, any, any> | ActionInit<any, any, any>,
116
+ ];
117
+ return makeActionClass(type, initOrRun);
118
+ }
119
+
120
+ export interface ActionClass<
121
+ Self,
122
+ Type extends string,
123
+ In extends object | undefined,
124
+ Out,
125
+ Req,
126
+ > {
127
+ readonly Type: Type;
128
+ /**
129
+ * Default form — uses `Type` as the LogicalId. One instance per Action
130
+ * definition (the common case for deploy-time work). Returns the Action's
131
+ * output as `Output<Out>`.
132
+ */
133
+ (input: { [k in keyof In]: Input<In[k]> }): Effect.Effect<
134
+ Output.ToOutput<Out, never>,
135
+ never,
136
+ Req | Stack
137
+ >;
138
+ /**
139
+ * Explicit-id form — register multiple instances of the same Action
140
+ * definition under distinct logical ids.
141
+ */
142
+ (
143
+ id: string,
144
+ input: { [k in keyof In]: Input<In[k]> },
145
+ ): Effect.Effect<Output.ToOutput<Out, never>, never, Req | Stack>;
146
+ /**
147
+ * Tagged-only: bind an init Effect to this Action's Self tag. Add the
148
+ * returned Layer to the stack's `providers`.
149
+ */
150
+ make: [Self] extends [never]
151
+ ? never
152
+ : <R = never>(
153
+ init: ActionRunner<In, Out, R> | ActionInit<In, Out, R>,
154
+ ) => Layer.Layer<Self, never, R>;
155
+ /** Tagged-only: the Context tag holding the resolved runner. */
156
+ readonly Self: [Self] extends [never]
157
+ ? never
158
+ : Context.Service<Self, ActionRunner<In, Out, any>>;
159
+ }
160
+
161
+ const isRunnerEffect = (
162
+ v: ActionRunner<any, any, any> | ActionInit<any, any, any>,
163
+ ): v is ActionInit<any, any, any> => Effect.isEffect(v as any);
164
+
165
+ const makeActionClass = (
166
+ type: string,
167
+ baked: ActionRunner<any, any, any> | ActionInit<any, any, any> | undefined,
168
+ ): any => {
169
+ // Pre-resolve baked init/runner into a single Effect<Runner, _, Req>. Use
170
+ // Effect.cached so the init's body runs at most once per process — every
171
+ // action instance after the first reuses the resolved runner without paying
172
+ // the init cost (or re-yielding its dependencies).
173
+ let resolveRunner:
174
+ | Effect.Effect<ActionRunner<any, any, any>, any, any>
175
+ | undefined;
176
+ if (baked !== undefined) {
177
+ resolveRunner = isRunnerEffect(baked)
178
+ ? Effect.runSync(Effect.cached(baked))
179
+ : Effect.succeed(baked);
180
+ }
181
+
182
+ // Tagged form needs a Context tag so the user can supply the runner
183
+ // through a Layer. Inline form bakes the runner in and skips the tag.
184
+ const SelfTag = baked
185
+ ? undefined
186
+ : Context.Service<any, ActionRunner<any, any, any>>(
187
+ `alchemy/Action<${type}>`,
188
+ );
189
+
190
+ const constructor = (...args: [any] | [string, any]) => {
191
+ const [id, input] =
192
+ args.length === 1 ? [type, args[0]] : (args as [string, any]);
193
+ return Effect.gen(function* () {
194
+ const run = resolveRunner
195
+ ? yield* resolveRunner
196
+ : ((yield* SelfTag!) as ActionRunner<any, any, any>);
197
+ return yield* registerAction(type, id, input, run);
198
+ });
199
+ };
200
+
201
+ const extra: Record<string, any> = { Type: type };
202
+ if (SelfTag) {
203
+ extra.Self = SelfTag;
204
+ // `.make(initOrRun)` — accepts either a direct runner or an init Effect.
205
+ // For init form we use `Layer.effect` so the init's Req surfaces on the
206
+ // Layer; for runners we use `Layer.succeed`.
207
+ extra.make = <R>(
208
+ initOrRun: ActionRunner<any, any, R> | ActionInit<any, any, R>,
209
+ ) =>
210
+ isRunnerEffect(initOrRun)
211
+ ? Layer.effect(SelfTag, initOrRun as any)
212
+ : Layer.succeed(SelfTag, initOrRun as ActionRunner<any, any, any>);
213
+ }
214
+ return Object.assign(constructor, extra);
215
+ };
216
+
217
+ const registerAction = <
218
+ Type extends string,
219
+ In extends object | undefined,
220
+ Out,
221
+ >(
222
+ type: Type,
223
+ id: string,
224
+ input: any,
225
+ run: ActionRunner<In, Out, any>,
226
+ ): Effect.Effect<Output.ToOutput<Out, never>, never, Stack> =>
227
+ Effect.gen(function* () {
228
+ const stack = yield* Stack;
229
+ const namespace = yield* CurrentNamespace;
230
+ const fqn = toFqn(namespace, id);
231
+
232
+ const actions = (stack.actions ??= {});
233
+ const existing = actions[fqn];
234
+ if (existing)
235
+ return Output.of(existing as any) as unknown as Output.ToOutput<
236
+ Out,
237
+ never
238
+ >;
239
+
240
+ // FQN collision check: actions share the same FQN namespace as resources
241
+ // so the dependency graph stays unified. Rejecting overlaps here makes
242
+ // the constraint obvious at registration time.
243
+ if (stack.resources[fqn]) {
244
+ return yield* Effect.die(
245
+ new Error(
246
+ `Action '${fqn}' collides with a Resource of the same logical id`,
247
+ ),
248
+ );
249
+ }
250
+
251
+ const target: ActionLike<Type, In, Out> = {
252
+ Kind: "action" as const,
253
+ Type: type,
254
+ Namespace: namespace,
255
+ FQN: fqn,
256
+ LogicalId: id,
257
+ Input: input,
258
+ Run: run,
259
+ Output: undefined as any,
260
+ };
261
+ (target as any).toString = () => `Action<${type}>(${id})`;
262
+
263
+ actions[fqn] = target as any;
264
+ // `yield* Sync({...})` returns `Output<Out>`. The engine writes the
265
+ // materialized value into `tracker[fqn]` during apply; `Output.of(action)`
266
+ // resolves a ResourceExpr by looking up `outputs[fqn]` — which is
267
+ // precisely that materialized value. Property access into the returned
268
+ // Output chains through the standard PropExpr proxy.
269
+ return Output.of(target as any) as unknown as Output.ToOutput<Out, never>;
270
+ });
271
+
272
+ /**
273
+ * Pipeable Action instance used internally by Plan/Apply. Users get an
274
+ * `Output<Out>` from `yield*` and don't normally see this.
275
+ */
276
+ export type Action<
277
+ Type extends string = string,
278
+ In extends object | undefined = any,
279
+ Out = any,
280
+ > = Pipeable & ActionLike<Type, In, Out>;