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.
- package/bin/exec.js +488 -69
- package/bin/exec.js.map +1 -1
- package/lib/AWS/AutoScaling/LaunchTemplate.d.ts +1 -1
- package/lib/AWS/CloudWatch/common.d.ts +1 -1
- package/lib/AWS/Credentials.d.ts.map +1 -1
- package/lib/AWS/Credentials.js +1 -2
- package/lib/AWS/Credentials.js.map +1 -1
- package/lib/AWS/DynamoDB/Stream.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/Stream.js +1 -1
- package/lib/AWS/DynamoDB/Stream.js.map +1 -1
- package/lib/AWS/EC2/Instance.d.ts +1 -1
- package/lib/AWS/EC2/hosted.d.ts +1 -1
- package/lib/AWS/EC2/hosted.d.ts.map +1 -1
- package/lib/AWS/EC2/hosted.js +3 -5
- package/lib/AWS/EC2/hosted.js.map +1 -1
- package/lib/AWS/ECS/Task.d.ts +1 -1
- package/lib/AWS/ECS/Task.d.ts.map +1 -1
- package/lib/AWS/ECS/Task.js +3 -5
- package/lib/AWS/ECS/Task.js.map +1 -1
- package/lib/AWS/Endpoint.d.ts.map +1 -1
- package/lib/AWS/Endpoint.js +1 -2
- package/lib/AWS/Endpoint.js.map +1 -1
- package/lib/AWS/Environment.d.ts +2 -2
- package/lib/AWS/EventBridge/EventSource.d.ts.map +1 -1
- package/lib/AWS/EventBridge/EventSource.js +1 -1
- package/lib/AWS/EventBridge/EventSource.js.map +1 -1
- package/lib/AWS/Kinesis/StreamEventSource.d.ts.map +1 -1
- package/lib/AWS/Kinesis/StreamEventSource.js +1 -1
- package/lib/AWS/Kinesis/StreamEventSource.js.map +1 -1
- package/lib/AWS/Lambda/BucketEventSource.d.ts +1 -1
- package/lib/AWS/Lambda/EventBridgeEventSource.d.ts +1 -1
- package/lib/AWS/Lambda/Function.d.ts +1 -1
- package/lib/AWS/Lambda/Function.d.ts.map +1 -1
- package/lib/AWS/Lambda/Function.js +7 -11
- package/lib/AWS/Lambda/Function.js.map +1 -1
- package/lib/AWS/Lambda/QueueEventSource.d.ts +1 -1
- package/lib/AWS/Lambda/StreamEventSource.d.ts +1 -1
- package/lib/AWS/Lambda/TableEventSource.d.ts +1 -1
- package/lib/AWS/Lambda/TopicEventSource.d.ts +1 -1
- package/lib/AWS/Organizations/common.d.ts +1 -1
- package/lib/AWS/Providers.d.ts.map +1 -1
- package/lib/AWS/Providers.js +21 -3
- package/lib/AWS/Providers.js.map +1 -1
- package/lib/AWS/Region.d.ts +1 -1
- package/lib/AWS/Region.d.ts.map +1 -1
- package/lib/AWS/Region.js +2 -3
- package/lib/AWS/Region.js.map +1 -1
- package/lib/AWS/S3/Bucket.d.ts.map +1 -1
- package/lib/AWS/S3/Bucket.js +5 -2
- package/lib/AWS/S3/Bucket.js.map +1 -1
- package/lib/AWS/S3/BucketNotifications.d.ts.map +1 -1
- package/lib/AWS/S3/BucketNotifications.js +1 -1
- package/lib/AWS/S3/BucketNotifications.js.map +1 -1
- package/lib/AWS/SNS/TopicEventSource.d.ts.map +1 -1
- package/lib/AWS/SNS/TopicEventSource.js +1 -1
- package/lib/AWS/SNS/TopicEventSource.js.map +1 -1
- package/lib/AWS/SQS/Queue.d.ts.map +1 -1
- package/lib/AWS/SQS/Queue.js +23 -5
- package/lib/AWS/SQS/Queue.js.map +1 -1
- package/lib/Action.d.ts +77 -0
- package/lib/Action.d.ts.map +1 -0
- package/lib/Action.js +89 -0
- package/lib/Action.js.map +1 -0
- package/lib/AlchemyContext.d.ts +1 -1
- package/lib/Apply.d.ts.map +1 -1
- package/lib/Apply.js +222 -3
- package/lib/Apply.js.map +1 -1
- package/lib/Artifacts.d.ts +1 -1
- package/lib/Artifacts.d.ts.map +1 -1
- package/lib/Artifacts.js +1 -1
- package/lib/Artifacts.js.map +1 -1
- package/lib/Auth/AuthProvider.js +1 -1
- package/lib/Auth/AuthProvider.js.map +1 -1
- package/lib/Auth/Env.d.ts.map +1 -1
- package/lib/Auth/Env.js +4 -12
- package/lib/Auth/Env.js.map +1 -1
- package/lib/Binding.d.ts.map +1 -1
- package/lib/Binding.js +5 -5
- package/lib/Binding.js.map +1 -1
- package/lib/Build/Command.d.ts +1 -1
- package/lib/Build/Memo.d.ts +1 -1
- package/lib/Bundle/Docker.d.ts +3 -3
- package/lib/Bundle/Docker.js +1 -1
- package/lib/Bundle/Docker.js.map +1 -1
- package/lib/Bundle/TempRoot.d.ts +3 -3
- package/lib/Cli/Event.d.ts +1 -1
- package/lib/Cli/Event.d.ts.map +1 -1
- package/lib/Cli/NamespaceTree.d.ts +11 -5
- package/lib/Cli/NamespaceTree.d.ts.map +1 -1
- package/lib/Cli/NamespaceTree.js +28 -1
- package/lib/Cli/NamespaceTree.js.map +1 -1
- package/lib/Cli/commands/_shared.d.ts +1 -1
- package/lib/Cli/commands/_shared.js +2 -2
- package/lib/Cli/commands/_shared.js.map +1 -1
- package/lib/Cli/commands/aws.d.ts +1 -1
- package/lib/Cli/commands/cloudflare.d.ts +2 -2
- package/lib/Cli/commands/cloudflare.d.ts.map +1 -1
- package/lib/Cli/commands/deploy.d.ts +9 -9
- package/lib/Cli/commands/deploy.js +1 -1
- package/lib/Cli/commands/deploy.js.map +1 -1
- package/lib/Cli/commands/login.d.ts +1 -1
- package/lib/Cli/commands/logs.d.ts +1 -1
- package/lib/Cli/commands/logs.js.map +1 -1
- package/lib/Cli/commands/profile.d.ts +1 -3
- package/lib/Cli/commands/profile.d.ts.map +1 -1
- package/lib/Cli/commands/state.d.ts +1 -1
- package/lib/Cli/commands/state.d.ts.map +1 -1
- package/lib/Cli/commands/tail.d.ts +1 -1
- package/lib/Cli/commands/tail.js.map +1 -1
- package/lib/Cli/tui/components/Plan.d.ts.map +1 -1
- package/lib/Cli/tui/components/Plan.js +27 -13
- package/lib/Cli/tui/components/Plan.js.map +1 -1
- package/lib/Cli/tui/components/PlanProgress.d.ts +8 -1
- package/lib/Cli/tui/components/PlanProgress.d.ts.map +1 -1
- package/lib/Cli/tui/components/PlanProgress.js +95 -16
- package/lib/Cli/tui/components/PlanProgress.js.map +1 -1
- package/lib/Cloudflare/Access.js +0 -1
- package/lib/Cloudflare/Access.js.map +1 -1
- package/lib/Cloudflare/AnalyticsEngine/AnalyticsEngineDatasetBinding.js +1 -1
- package/lib/Cloudflare/AnalyticsEngine/AnalyticsEngineDatasetBinding.js.map +1 -1
- package/lib/Cloudflare/Artifacts/ArtifactsBinding.js +1 -1
- package/lib/Cloudflare/Artifacts/ArtifactsBinding.js.map +1 -1
- package/lib/Cloudflare/CloudflareEnvironment.d.ts +1 -1
- package/lib/Cloudflare/Container/Container.js +0 -1
- package/lib/Cloudflare/Container/Container.js.map +1 -1
- package/lib/Cloudflare/Container/ContainerApplication.d.ts +1 -1
- package/lib/Cloudflare/Container/ContainerApplication.d.ts.map +1 -1
- package/lib/Cloudflare/Container/ContainerApplication.js +4 -6
- package/lib/Cloudflare/Container/ContainerApplication.js.map +1 -1
- package/lib/Cloudflare/Container/ContainerBinding.js +2 -2
- package/lib/Cloudflare/Container/ContainerBinding.js.map +1 -1
- package/lib/Cloudflare/D1/D1Database.d.ts +1 -1
- package/lib/Cloudflare/D1/D1SqlFile.d.ts +2 -2
- package/lib/Cloudflare/Email/EmailAddress.d.ts +45 -0
- package/lib/Cloudflare/Email/EmailAddress.d.ts.map +1 -0
- package/lib/Cloudflare/Email/EmailAddress.js +99 -0
- package/lib/Cloudflare/Email/EmailAddress.js.map +1 -0
- package/lib/Cloudflare/Email/EmailRouting.d.ts +42 -0
- package/lib/Cloudflare/Email/EmailRouting.d.ts.map +1 -0
- package/lib/Cloudflare/Email/EmailRouting.js +89 -0
- package/lib/Cloudflare/Email/EmailRouting.js.map +1 -0
- package/lib/Cloudflare/Email/EmailRule.d.ts +80 -0
- package/lib/Cloudflare/Email/EmailRule.d.ts.map +1 -0
- package/lib/Cloudflare/Email/EmailRule.js +110 -0
- package/lib/Cloudflare/Email/EmailRule.js.map +1 -0
- package/lib/Cloudflare/Email/SendEmail.d.ts +74 -0
- package/lib/Cloudflare/Email/SendEmail.d.ts.map +1 -0
- package/lib/Cloudflare/Email/SendEmail.js +19 -0
- package/lib/Cloudflare/Email/SendEmail.js.map +1 -0
- package/lib/Cloudflare/Email/SendEmailBinding.d.ts +64 -0
- package/lib/Cloudflare/Email/SendEmailBinding.d.ts.map +1 -0
- package/lib/Cloudflare/Email/SendEmailBinding.js +54 -0
- package/lib/Cloudflare/Email/SendEmailBinding.js.map +1 -0
- package/lib/Cloudflare/Email/index.d.ts +6 -0
- package/lib/Cloudflare/Email/index.d.ts.map +1 -0
- package/lib/Cloudflare/Email/index.js +6 -0
- package/lib/Cloudflare/Email/index.js.map +1 -0
- package/lib/Cloudflare/Hyperdrive/Hyperdrive.d.ts +1 -1
- package/lib/Cloudflare/Images/ImagesBinding.js +1 -1
- package/lib/Cloudflare/Images/ImagesBinding.js.map +1 -1
- package/lib/Cloudflare/KV/KVNamespaceBinding.js +1 -1
- package/lib/Cloudflare/KV/KVNamespaceBinding.js.map +1 -1
- package/lib/Cloudflare/Local/Sidecar.d.ts +1 -1
- package/lib/Cloudflare/Local/SidecarHandlers.d.ts +1 -1
- package/lib/Cloudflare/Local/SidecarServer.js +1 -1
- package/lib/Cloudflare/Local/SidecarServer.js.map +1 -1
- package/lib/Cloudflare/Providers.d.ts.map +1 -1
- package/lib/Cloudflare/Providers.js +6 -1
- package/lib/Cloudflare/Providers.js.map +1 -1
- package/lib/Cloudflare/Queue/QueueBinding.js +1 -1
- package/lib/Cloudflare/Queue/QueueBinding.js.map +1 -1
- package/lib/Cloudflare/R2/R2BucketBinding.js +1 -1
- package/lib/Cloudflare/R2/R2BucketBinding.js.map +1 -1
- package/lib/Cloudflare/SecretsStore/SecretBinding.js +1 -1
- package/lib/Cloudflare/SecretsStore/SecretBinding.js.map +1 -1
- package/lib/Cloudflare/StateStore/Api.d.ts +1 -1
- package/lib/Cloudflare/StateStore/State.d.ts +2 -2
- package/lib/Cloudflare/Workers/Assets.d.ts +2 -2
- package/lib/Cloudflare/Workers/Assets.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Assets.js +5 -4
- package/lib/Cloudflare/Workers/Assets.js.map +1 -1
- package/lib/Cloudflare/Workers/HttpServer.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/HttpServer.js +25 -3
- package/lib/Cloudflare/Workers/HttpServer.js.map +1 -1
- package/lib/Cloudflare/Workers/InferEnv.d.ts +1 -1
- package/lib/Cloudflare/Workers/InferEnv.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Worker.d.ts +4 -3
- package/lib/Cloudflare/Workers/Worker.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Worker.js +67 -32
- package/lib/Cloudflare/Workers/Worker.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerBundle.d.ts +1 -1
- package/lib/Cloudflare/Workers/WorkerBundle.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkerBundle.js +4 -6
- package/lib/Cloudflare/Workers/WorkerBundle.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerName.d.ts +1 -1
- package/lib/Cloudflare/Workers/Workflow.js +2 -2
- package/lib/Cloudflare/Workers/Workflow.js.map +1 -1
- package/lib/Cloudflare/index.d.ts +1 -0
- package/lib/Cloudflare/index.d.ts.map +1 -1
- package/lib/Cloudflare/index.js +1 -0
- package/lib/Cloudflare/index.js.map +1 -1
- package/lib/Construct.d.ts +3 -3
- package/lib/Construct.d.ts.map +1 -1
- package/lib/Construct.js.map +1 -1
- package/lib/Deploy.d.ts +1 -1
- package/lib/Destroy.d.ts +1 -1
- package/lib/Destroy.d.ts.map +1 -1
- package/lib/Destroy.js +1 -0
- package/lib/Destroy.js.map +1 -1
- package/lib/Drizzle/Providers.d.ts +1 -1
- package/lib/Drizzle/Schema.d.ts +1 -1
- package/lib/GitHub/Providers.d.ts +1 -1
- package/lib/Http.d.ts +1 -1
- package/lib/Http.d.ts.map +1 -1
- package/lib/Http.js +1 -1
- package/lib/Http.js.map +1 -1
- package/lib/Namespace.d.ts.map +1 -1
- package/lib/Namespace.js +3 -4
- package/lib/Namespace.js.map +1 -1
- package/lib/Neon/Branch.d.ts +2 -2
- package/lib/Neon/Branch.d.ts.map +1 -1
- package/lib/Neon/Branch.js +59 -27
- package/lib/Neon/Branch.js.map +1 -1
- package/lib/Neon/Credentials.d.ts +2 -2
- package/lib/Neon/Credentials.d.ts.map +1 -1
- package/lib/Neon/Credentials.js +2 -2
- package/lib/Neon/Credentials.js.map +1 -1
- package/lib/Neon/NeonEnvironment.d.ts +1 -1
- package/lib/Neon/Project.d.ts +25 -1
- package/lib/Neon/Project.d.ts.map +1 -1
- package/lib/Neon/Project.js +121 -42
- package/lib/Neon/Project.js.map +1 -1
- package/lib/Neon/Providers.d.ts +1 -1
- package/lib/Neon/SqlFile.d.ts +2 -2
- package/lib/Output.d.ts +3 -4
- package/lib/Output.d.ts.map +1 -1
- package/lib/Output.js +7 -4
- package/lib/Output.js.map +1 -1
- package/lib/PhysicalName.d.ts +1 -1
- package/lib/Plan.d.ts +36 -1
- package/lib/Plan.d.ts.map +1 -1
- package/lib/Plan.js +197 -31
- package/lib/Plan.js.map +1 -1
- package/lib/Platform.js +6 -6
- package/lib/Platform.js.map +1 -1
- package/lib/Provider.d.ts +1 -1
- package/lib/Provider.d.ts.map +1 -1
- package/lib/Provider.js +1 -1
- package/lib/Provider.js.map +1 -1
- package/lib/Random.d.ts +1 -1
- package/lib/Random.d.ts.map +1 -1
- package/lib/Random.js +1 -1
- package/lib/Random.js.map +1 -1
- package/lib/Resource.d.ts.map +1 -1
- package/lib/Resource.js +2 -25
- package/lib/Resource.js.map +1 -1
- package/lib/Runtime.d.ts +24 -0
- package/lib/Runtime.d.ts.map +1 -0
- package/lib/Runtime.js +31 -0
- package/lib/Runtime.js.map +1 -0
- package/lib/Secret.js +1 -1
- package/lib/Secret.js.map +1 -1
- package/lib/Sidecar/RpcClient.d.ts +1 -1
- package/lib/Sidecar/RpcPaths.d.ts +1 -1
- package/lib/Sidecar/RpcServer.d.ts +1 -1
- package/lib/Sidecar/RpcServices.d.ts +1 -1
- package/lib/Stack.d.ts +7 -2
- package/lib/Stack.d.ts.map +1 -1
- package/lib/Stack.js +4 -4
- package/lib/Stack.js.map +1 -1
- package/lib/State/ActionState.d.ts +48 -0
- package/lib/State/ActionState.d.ts.map +1 -0
- package/lib/State/ActionState.js +1 -0
- package/lib/State/ActionState.js.map +1 -0
- package/lib/State/HttpStateStore.d.ts.map +1 -1
- package/lib/State/HttpStateStore.js +1 -1
- package/lib/State/HttpStateStore.js.map +1 -1
- package/lib/State/InMemoryState.d.ts.map +1 -1
- package/lib/State/InMemoryState.js.map +1 -1
- package/lib/State/LocalState.d.ts +2 -2
- package/lib/State/ResourceState.d.ts +5 -0
- package/lib/State/ResourceState.d.ts.map +1 -1
- package/lib/State/State.d.ts +10 -2
- package/lib/State/State.d.ts.map +1 -1
- package/lib/State/State.js +2 -0
- package/lib/State/State.js.map +1 -1
- package/lib/State/index.d.ts +1 -0
- package/lib/State/index.d.ts.map +1 -1
- package/lib/State/index.js +1 -0
- package/lib/State/index.js.map +1 -1
- package/lib/Test/Core.d.ts +2 -2
- package/lib/Test/Core.d.ts.map +1 -1
- package/lib/Test/Core.js +4 -1
- package/lib/Test/Core.js.map +1 -1
- package/lib/Util/FileLogger.d.ts +1 -1
- package/lib/Util/effect.js +4 -4
- package/lib/Util/effect.js.map +1 -1
- package/lib/Util/exec.d.ts.map +1 -0
- package/lib/Util/exec.js.map +1 -0
- package/lib/Util/hash.d.ts +8 -0
- package/lib/Util/hash.d.ts.map +1 -0
- package/lib/Util/hash.js +11 -0
- package/lib/Util/hash.js.map +1 -0
- package/lib/Util/ignore.d.ts +40 -0
- package/lib/Util/ignore.d.ts.map +1 -0
- package/lib/Util/ignore.js +591 -0
- package/lib/Util/ignore.js.map +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/tsconfig.test.tsbuildinfo +1 -1
- package/package.json +22 -28
- package/src/AWS/Credentials.ts +1 -2
- package/src/AWS/DynamoDB/Stream.ts +1 -4
- package/src/AWS/EC2/hosted.ts +14 -16
- package/src/AWS/ECS/Task.ts +14 -16
- package/src/AWS/Endpoint.ts +2 -5
- package/src/AWS/EventBridge/EventSource.ts +1 -4
- package/src/AWS/Kinesis/StreamEventSource.ts +1 -4
- package/src/AWS/Lambda/Function.ts +31 -35
- package/src/AWS/Providers.ts +22 -3
- package/src/AWS/Region.ts +2 -3
- package/src/AWS/S3/Bucket.ts +7 -2
- package/src/AWS/S3/BucketNotifications.ts +1 -4
- package/src/AWS/SNS/TopicEventSource.ts +1 -4
- package/src/AWS/SQS/Queue.ts +40 -6
- package/src/Action.ts +280 -0
- package/src/Apply.ts +351 -23
- package/src/Artifacts.ts +2 -4
- package/src/Auth/AuthProvider.ts +1 -1
- package/src/Auth/Env.ts +12 -20
- package/src/Binding.ts +5 -9
- package/src/Bundle/Docker.ts +1 -1
- package/src/Cli/Event.ts +4 -0
- package/src/Cli/NamespaceTree.ts +52 -5
- package/src/Cli/commands/_shared.ts +2 -2
- package/src/Cli/commands/deploy.ts +1 -1
- package/src/Cli/commands/logs.ts +4 -4
- package/src/Cli/commands/tail.ts +4 -4
- package/src/Cli/tui/components/Plan.tsx +65 -17
- package/src/Cli/tui/components/PlanProgress.tsx +142 -32
- package/src/Cloudflare/Access.ts +1 -1
- package/src/Cloudflare/AnalyticsEngine/AnalyticsEngineDatasetBinding.ts +1 -1
- package/src/Cloudflare/Artifacts/ArtifactsBinding.ts +1 -1
- package/src/Cloudflare/Container/Container.ts +1 -1
- package/src/Cloudflare/Container/ContainerApplication.ts +4 -6
- package/src/Cloudflare/Container/ContainerBinding.ts +2 -2
- package/src/Cloudflare/Email/EmailAddress.ts +155 -0
- package/src/Cloudflare/Email/EmailRouting.ts +138 -0
- package/src/Cloudflare/Email/EmailRule.ts +210 -0
- package/src/Cloudflare/Email/SendEmail.ts +95 -0
- package/src/Cloudflare/Email/SendEmailBinding.ts +124 -0
- package/src/Cloudflare/Email/index.ts +5 -0
- package/src/Cloudflare/Images/ImagesBinding.ts +1 -1
- package/src/Cloudflare/KV/KVNamespaceBinding.ts +1 -1
- package/src/Cloudflare/Local/SidecarServer.ts +1 -1
- package/src/Cloudflare/Providers.ts +9 -0
- package/src/Cloudflare/Queue/QueueBinding.ts +1 -1
- package/src/Cloudflare/R2/R2BucketBinding.ts +1 -1
- package/src/Cloudflare/SecretsStore/SecretBinding.ts +1 -1
- package/src/Cloudflare/Workers/Assets.ts +5 -6
- package/src/Cloudflare/Workers/HttpServer.ts +37 -5
- package/src/Cloudflare/Workers/InferEnv.ts +15 -11
- package/src/Cloudflare/Workers/Worker.ts +78 -36
- package/src/Cloudflare/Workers/WorkerBundle.ts +4 -6
- package/src/Cloudflare/Workers/Workflow.ts +2 -2
- package/src/Cloudflare/index.ts +1 -0
- package/src/Construct.ts +3 -7
- package/src/Destroy.ts +1 -0
- package/src/Http.ts +1 -1
- package/src/Namespace.ts +4 -4
- package/src/Neon/Branch.ts +93 -59
- package/src/Neon/Credentials.ts +2 -2
- package/src/Neon/Project.ts +193 -64
- package/src/Output.ts +9 -7
- package/src/Plan.ts +303 -53
- package/src/Platform.ts +7 -7
- package/src/Provider.ts +8 -3
- package/src/Random.ts +1 -1
- package/src/Resource.ts +2 -25
- package/src/Runtime.ts +38 -0
- package/src/Secret.ts +1 -1
- package/src/Stack.ts +10 -6
- package/src/State/ActionState.ts +51 -0
- package/src/State/HttpStateStore.ts +6 -2
- package/src/State/InMemoryState.ts +3 -3
- package/src/State/ResourceState.ts +5 -0
- package/src/State/State.ts +17 -2
- package/src/State/index.ts +1 -0
- package/src/Test/Core.ts +4 -3
- package/src/Util/effect.ts +4 -4
- package/src/Util/hash.ts +14 -0
- package/src/Util/ignore.ts +815 -0
- package/src/index.ts +6 -0
- package/lib/Agent/Agent.d.ts +0 -9
- package/lib/Agent/Agent.d.ts.map +0 -1
- package/lib/Agent/Agent.js +0 -10
- package/lib/Agent/Agent.js.map +0 -1
- package/lib/Agent/Aspect.d.ts +0 -51
- package/lib/Agent/Aspect.d.ts.map +0 -1
- package/lib/Agent/Aspect.js +0 -45
- package/lib/Agent/Aspect.js.map +0 -1
- package/lib/Agent/AspectGraph.d.ts +0 -45
- package/lib/Agent/AspectGraph.d.ts.map +0 -1
- package/lib/Agent/AspectGraph.js +0 -39
- package/lib/Agent/AspectGraph.js.map +0 -1
- package/lib/Agent/ContextPlugin.d.ts +0 -8
- package/lib/Agent/ContextPlugin.d.ts.map +0 -1
- package/lib/Agent/ContextPlugin.js +0 -3
- package/lib/Agent/ContextPlugin.js.map +0 -1
- package/lib/Agent/Plugin.d.ts +0 -18
- package/lib/Agent/Plugin.d.ts.map +0 -1
- package/lib/Agent/Plugin.js +0 -8
- package/lib/Agent/Plugin.js.map +0 -1
- package/lib/Agent/chat/channel.d.ts +0 -9
- package/lib/Agent/chat/channel.d.ts.map +0 -1
- package/lib/Agent/chat/channel.js +0 -10
- package/lib/Agent/chat/channel.js.map +0 -1
- package/lib/Agent/chat/event.d.ts +0 -32
- package/lib/Agent/chat/event.d.ts.map +0 -1
- package/lib/Agent/chat/event.js +0 -32
- package/lib/Agent/chat/event.js.map +0 -1
- package/lib/Agent/chat/message.d.ts +0 -22
- package/lib/Agent/chat/message.d.ts.map +0 -1
- package/lib/Agent/chat/message.js +0 -31
- package/lib/Agent/chat/message.js.map +0 -1
- package/lib/Agent/chat/service.d.ts +0 -102
- package/lib/Agent/chat/service.d.ts.map +0 -1
- package/lib/Agent/chat/service.js +0 -79
- package/lib/Agent/chat/service.js.map +0 -1
- package/lib/Agent/chat/thread.d.ts +0 -13
- package/lib/Agent/chat/thread.d.ts.map +0 -1
- package/lib/Agent/chat/thread.js +0 -16
- package/lib/Agent/chat/thread.js.map +0 -1
- package/lib/Agent/coding/bash.d.ts +0 -36
- package/lib/Agent/coding/bash.d.ts.map +0 -1
- package/lib/Agent/coding/bash.js +0 -170
- package/lib/Agent/coding/bash.js.map +0 -1
- package/lib/Agent/coding/edit.d.ts +0 -31
- package/lib/Agent/coding/edit.d.ts.map +0 -1
- package/lib/Agent/coding/edit.js +0 -90
- package/lib/Agent/coding/edit.js.map +0 -1
- package/lib/Agent/coding/glob.d.ts +0 -23
- package/lib/Agent/coding/glob.d.ts.map +0 -1
- package/lib/Agent/coding/glob.js +0 -78
- package/lib/Agent/coding/glob.js.map +0 -1
- package/lib/Agent/coding/grep.d.ts +0 -26
- package/lib/Agent/coding/grep.d.ts.map +0 -1
- package/lib/Agent/coding/grep.js +0 -105
- package/lib/Agent/coding/grep.js.map +0 -1
- package/lib/Agent/coding/index.d.ts +0 -8
- package/lib/Agent/coding/index.d.ts.map +0 -1
- package/lib/Agent/coding/index.js +0 -8
- package/lib/Agent/coding/index.js.map +0 -1
- package/lib/Agent/coding/read.d.ts +0 -27
- package/lib/Agent/coding/read.d.ts.map +0 -1
- package/lib/Agent/coding/read.js +0 -89
- package/lib/Agent/coding/read.js.map +0 -1
- package/lib/Agent/coding/readlints.d.ts +0 -19
- package/lib/Agent/coding/readlints.d.ts.map +0 -1
- package/lib/Agent/coding/readlints.js +0 -53
- package/lib/Agent/coding/readlints.js.map +0 -1
- package/lib/Agent/coding/write.d.ts +0 -22
- package/lib/Agent/coding/write.d.ts.map +0 -1
- package/lib/Agent/coding/write.js +0 -53
- package/lib/Agent/coding/write.js.map +0 -1
- package/lib/Agent/fs/file.d.ts +0 -12
- package/lib/Agent/fs/file.d.ts.map +0 -1
- package/lib/Agent/fs/file.js +0 -8
- package/lib/Agent/fs/file.js.map +0 -1
- package/lib/Agent/fs/folder.d.ts +0 -5
- package/lib/Agent/fs/folder.d.ts.map +0 -1
- package/lib/Agent/fs/folder.js +0 -3
- package/lib/Agent/fs/folder.js.map +0 -1
- package/lib/Agent/index.d.ts +0 -9
- package/lib/Agent/index.d.ts.map +0 -1
- package/lib/Agent/index.js +0 -9
- package/lib/Agent/index.js.map +0 -1
- package/lib/Agent/llm/error.d.ts +0 -208
- package/lib/Agent/llm/error.d.ts.map +0 -1
- package/lib/Agent/llm/error.js +0 -209
- package/lib/Agent/llm/error.js.map +0 -1
- package/lib/Agent/llm/index.d.ts +0 -5
- package/lib/Agent/llm/index.d.ts.map +0 -1
- package/lib/Agent/llm/index.js +0 -5
- package/lib/Agent/llm/index.js.map +0 -1
- package/lib/Agent/llm/llm.d.ts +0 -32
- package/lib/Agent/llm/llm.d.ts.map +0 -1
- package/lib/Agent/llm/llm.js +0 -74
- package/lib/Agent/llm/llm.js.map +0 -1
- package/lib/Agent/llm/stream-collectors.d.ts +0 -46
- package/lib/Agent/llm/stream-collectors.d.ts.map +0 -1
- package/lib/Agent/llm/stream-collectors.js +0 -33
- package/lib/Agent/llm/stream-collectors.js.map +0 -1
- package/lib/Agent/llm/stream-text-part.d.ts +0 -5
- package/lib/Agent/llm/stream-text-part.d.ts.map +0 -1
- package/lib/Agent/llm/stream-text-part.js +0 -4
- package/lib/Agent/llm/stream-text-part.js.map +0 -1
- package/lib/Agent/lsp/client.d.ts +0 -122
- package/lib/Agent/lsp/client.d.ts.map +0 -1
- package/lib/Agent/lsp/client.js +0 -180
- package/lib/Agent/lsp/client.js.map +0 -1
- package/lib/Agent/lsp/diagnostics.d.ts +0 -16
- package/lib/Agent/lsp/diagnostics.d.ts.map +0 -1
- package/lib/Agent/lsp/diagnostics.js +0 -48
- package/lib/Agent/lsp/diagnostics.js.map +0 -1
- package/lib/Agent/lsp/jsonrpc.d.ts +0 -90
- package/lib/Agent/lsp/jsonrpc.d.ts.map +0 -1
- package/lib/Agent/lsp/jsonrpc.js +0 -178
- package/lib/Agent/lsp/jsonrpc.js.map +0 -1
- package/lib/Agent/lsp/manager.d.ts +0 -38
- package/lib/Agent/lsp/manager.d.ts.map +0 -1
- package/lib/Agent/lsp/manager.js +0 -98
- package/lib/Agent/lsp/manager.js.map +0 -1
- package/lib/Agent/lsp/servers.d.ts +0 -28
- package/lib/Agent/lsp/servers.d.ts.map +0 -1
- package/lib/Agent/lsp/servers.js +0 -21
- package/lib/Agent/lsp/servers.js.map +0 -1
- package/lib/Agent/process/driver.d.ts +0 -10
- package/lib/Agent/process/driver.d.ts.map +0 -1
- package/lib/Agent/process/driver.js +0 -153
- package/lib/Agent/process/driver.js.map +0 -1
- package/lib/Agent/process/issue-service.d.ts +0 -44
- package/lib/Agent/process/issue-service.d.ts.map +0 -1
- package/lib/Agent/process/issue-service.js +0 -28
- package/lib/Agent/process/issue-service.js.map +0 -1
- package/lib/Agent/process/issue-tools.d.ts +0 -28
- package/lib/Agent/process/issue-tools.d.ts.map +0 -1
- package/lib/Agent/process/issue-tools.js +0 -28
- package/lib/Agent/process/issue-tools.js.map +0 -1
- package/lib/Agent/process/issue.d.ts +0 -16
- package/lib/Agent/process/issue.d.ts.map +0 -1
- package/lib/Agent/process/issue.js +0 -17
- package/lib/Agent/process/issue.js.map +0 -1
- package/lib/Agent/process/organization.d.ts +0 -4
- package/lib/Agent/process/organization.d.ts.map +0 -1
- package/lib/Agent/process/organization.js +0 -3
- package/lib/Agent/process/organization.js.map +0 -1
- package/lib/Agent/process/process.d.ts +0 -5
- package/lib/Agent/process/process.d.ts.map +0 -1
- package/lib/Agent/process/process.js +0 -3
- package/lib/Agent/process/process.js.map +0 -1
- package/lib/Agent/process/reply.d.ts +0 -16
- package/lib/Agent/process/reply.d.ts.map +0 -1
- package/lib/Agent/process/reply.js +0 -18
- package/lib/Agent/process/reply.js.map +0 -1
- package/lib/Agent/process/task.d.ts +0 -25
- package/lib/Agent/process/task.d.ts.map +0 -1
- package/lib/Agent/process/task.js +0 -26
- package/lib/Agent/process/task.js.map +0 -1
- package/lib/Agent/tool/index.d.ts +0 -4
- package/lib/Agent/tool/index.d.ts.map +0 -1
- package/lib/Agent/tool/index.js +0 -4
- package/lib/Agent/tool/index.js.map +0 -1
- package/lib/Agent/tool/parameter.d.ts +0 -12
- package/lib/Agent/tool/parameter.d.ts.map +0 -1
- package/lib/Agent/tool/parameter.js +0 -6
- package/lib/Agent/tool/parameter.js.map +0 -1
- package/lib/Agent/tool/result.d.ts +0 -17
- package/lib/Agent/tool/result.d.ts.map +0 -1
- package/lib/Agent/tool/result.js +0 -6
- package/lib/Agent/tool/result.js.map +0 -1
- package/lib/Agent/tool/tool.d.ts +0 -32
- package/lib/Agent/tool/tool.d.ts.map +0 -1
- package/lib/Agent/tool/tool.js +0 -16
- package/lib/Agent/tool/tool.js.map +0 -1
- package/lib/Agent/util/command-validator.d.ts +0 -12
- package/lib/Agent/util/command-validator.d.ts.map +0 -1
- package/lib/Agent/util/command-validator.js +0 -74
- package/lib/Agent/util/command-validator.js.map +0 -1
- package/lib/Agent/util/exec.d.ts.map +0 -1
- package/lib/Agent/util/exec.js.map +0 -1
- package/lib/Agent/util/parser.d.ts +0 -5
- package/lib/Agent/util/parser.d.ts.map +0 -1
- package/lib/Agent/util/parser.js +0 -41
- package/lib/Agent/util/parser.js.map +0 -1
- package/lib/Agent/util/replace.d.ts +0 -38
- package/lib/Agent/util/replace.d.ts.map +0 -1
- package/lib/Agent/util/replace.js +0 -458
- package/lib/Agent/util/replace.js.map +0 -1
- package/lib/Agent/util/ripgrep.d.ts +0 -109
- package/lib/Agent/util/ripgrep.d.ts.map +0 -1
- package/lib/Agent/util/ripgrep.js +0 -221
- package/lib/Agent/util/ripgrep.js.map +0 -1
- package/lib/Neon/api.d.ts +0 -258
- package/lib/Neon/api.d.ts.map +0 -1
- package/lib/Neon/api.js +0 -215
- package/lib/Neon/api.js.map +0 -1
- package/src/Agent/Agent.ts +0 -26
- package/src/Agent/Aspect.ts +0 -173
- package/src/Agent/AspectGraph.ts +0 -98
- package/src/Agent/ContextPlugin.ts +0 -18
- package/src/Agent/Plugin.ts +0 -29
- package/src/Agent/chat/channel.ts +0 -26
- package/src/Agent/chat/event.ts +0 -43
- package/src/Agent/chat/message.ts +0 -35
- package/src/Agent/chat/service.ts +0 -133
- package/src/Agent/chat/thread.ts +0 -17
- package/src/Agent/coding/bash.ts +0 -197
- package/src/Agent/coding/edit.ts +0 -152
- package/src/Agent/coding/glob.ts +0 -96
- package/src/Agent/coding/grep.ts +0 -143
- package/src/Agent/coding/index.ts +0 -7
- package/src/Agent/coding/read.ts +0 -119
- package/src/Agent/coding/readlints.ts +0 -78
- package/src/Agent/coding/write.ts +0 -79
- package/src/Agent/fs/file.ts +0 -22
- package/src/Agent/fs/folder.ts +0 -16
- package/src/Agent/index.ts +0 -9
- package/src/Agent/llm/error.ts +0 -330
- package/src/Agent/llm/index.ts +0 -4
- package/src/Agent/llm/llm.ts +0 -131
- package/src/Agent/llm/stream-collectors.ts +0 -58
- package/src/Agent/llm/stream-text-part.ts +0 -7
- package/src/Agent/lsp/client.ts +0 -293
- package/src/Agent/lsp/diagnostics.ts +0 -64
- package/src/Agent/lsp/jsonrpc.ts +0 -317
- package/src/Agent/lsp/manager.ts +0 -213
- package/src/Agent/lsp/servers.ts +0 -37
- package/src/Agent/process/driver.ts +0 -168
- package/src/Agent/process/issue-service.ts +0 -48
- package/src/Agent/process/issue-tools.ts +0 -33
- package/src/Agent/process/issue.ts +0 -22
- package/src/Agent/process/organization.ts +0 -16
- package/src/Agent/process/process.ts +0 -16
- package/src/Agent/process/reply.ts +0 -21
- package/src/Agent/process/task.ts +0 -34
- package/src/Agent/tool/index.ts +0 -3
- package/src/Agent/tool/parameter.ts +0 -35
- package/src/Agent/tool/result.ts +0 -51
- package/src/Agent/tool/tool.ts +0 -74
- package/src/Agent/util/command-validator.ts +0 -98
- package/src/Agent/util/parser.ts +0 -39
- package/src/Agent/util/replace.ts +0 -559
- package/src/Agent/util/ripgrep.ts +0 -256
- package/src/Neon/api.ts +0 -579
- /package/lib/{Agent/util → Util}/exec.d.ts +0 -0
- /package/lib/{Agent/util → Util}/exec.js +0 -0
- /package/src/{Agent/util → Util}/exec.ts +0 -0
package/src/Apply.ts
CHANGED
|
@@ -21,7 +21,13 @@ import { toFqn } from "./FQN.ts";
|
|
|
21
21
|
import type { Input } from "./Input.ts";
|
|
22
22
|
import { generateInstanceId, InstanceId } from "./InstanceId.ts";
|
|
23
23
|
import * as Output from "./Output.ts";
|
|
24
|
-
import {
|
|
24
|
+
import {
|
|
25
|
+
type Apply,
|
|
26
|
+
type Delete,
|
|
27
|
+
type Plan,
|
|
28
|
+
type ActionApply,
|
|
29
|
+
type ActionDelete,
|
|
30
|
+
} from "./Plan.ts";
|
|
25
31
|
import { findProviderByType } from "./Provider.ts";
|
|
26
32
|
import type { ResourceBinding } from "./Resource.ts";
|
|
27
33
|
import { Stack } from "./Stack.ts";
|
|
@@ -31,14 +37,19 @@ import {
|
|
|
31
37
|
type CreatedResourceState,
|
|
32
38
|
type CreatingResourceState,
|
|
33
39
|
type DeletingResourceState,
|
|
40
|
+
type PersistedState,
|
|
41
|
+
type RanActionState,
|
|
34
42
|
type ReplacedResourceState,
|
|
35
43
|
type ReplacingResourceState,
|
|
36
44
|
type ResourceState,
|
|
45
|
+
type RunningActionState,
|
|
46
|
+
type ActionState,
|
|
37
47
|
type UpdatedResourceState,
|
|
38
48
|
type UpdatingReourceState,
|
|
39
49
|
State,
|
|
40
50
|
StateStoreError,
|
|
41
51
|
} from "./State/index.ts";
|
|
52
|
+
import { hashInput } from "./Util/hash.ts";
|
|
42
53
|
|
|
43
54
|
export type ApplyEffect<
|
|
44
55
|
P extends Plan,
|
|
@@ -139,7 +150,7 @@ export const apply = <P extends Plan>(
|
|
|
139
150
|
{
|
|
140
151
|
id: string;
|
|
141
152
|
type: string;
|
|
142
|
-
status: Extract<ApplyStatus, "created" | "updated">;
|
|
153
|
+
status: Extract<ApplyStatus, "created" | "updated" | "ran" | "skipped">;
|
|
143
154
|
}
|
|
144
155
|
>();
|
|
145
156
|
|
|
@@ -218,12 +229,12 @@ const executePlan = Effect.fnUntraced(function* (
|
|
|
218
229
|
{
|
|
219
230
|
id: string;
|
|
220
231
|
type: string;
|
|
221
|
-
status: Extract<ApplyStatus, "created" | "updated">;
|
|
232
|
+
status: Extract<ApplyStatus, "created" | "updated" | "ran" | "skipped">;
|
|
222
233
|
}
|
|
223
234
|
>,
|
|
224
235
|
session: PlanStatusSession,
|
|
225
236
|
state: {
|
|
226
|
-
set: <V extends
|
|
237
|
+
set: <V extends PersistedState>(req: {
|
|
227
238
|
stack: string;
|
|
228
239
|
stage: string;
|
|
229
240
|
fqn: string;
|
|
@@ -233,9 +244,29 @@ const executePlan = Effect.fnUntraced(function* (
|
|
|
233
244
|
stackName: string,
|
|
234
245
|
stage: string,
|
|
235
246
|
) {
|
|
247
|
+
// Resources and tasks share the same FQN namespace and DAG, so the
|
|
248
|
+
// scheduler tracks them together. Each entry gets a single Deferred that
|
|
249
|
+
// signals "my output is available in `tracker`."
|
|
250
|
+
const allNodes: Record<string, Apply | ActionApply> = {
|
|
251
|
+
...plan.resources,
|
|
252
|
+
...plan.actions,
|
|
253
|
+
};
|
|
254
|
+
|
|
236
255
|
const ready = Object.fromEntries(
|
|
237
256
|
yield* Effect.all(
|
|
238
|
-
Object.keys(
|
|
257
|
+
Object.keys(allNodes).map((fqn) =>
|
|
258
|
+
Effect.map(Deferred.make<void>(), (d) => [fqn, d] as const),
|
|
259
|
+
),
|
|
260
|
+
),
|
|
261
|
+
) as Record<string, Deferred.Deferred<void>>;
|
|
262
|
+
|
|
263
|
+
// `readyStable` fires only when a node has reached its TERMINAL output —
|
|
264
|
+
// resources after `reconcile`, tasks after the body completes. Resource
|
|
265
|
+
// precreate stubs do NOT signal `readyStable`, so any consumer that
|
|
266
|
+
// requires stable inputs (e.g. Tasks) waits past the precreate phase.
|
|
267
|
+
const readyStable = Object.fromEntries(
|
|
268
|
+
yield* Effect.all(
|
|
269
|
+
Object.keys(allNodes).map((fqn) =>
|
|
239
270
|
Effect.map(Deferred.make<void>(), (d) => [fqn, d] as const),
|
|
240
271
|
),
|
|
241
272
|
),
|
|
@@ -254,25 +285,50 @@ const executePlan = Effect.fnUntraced(function* (
|
|
|
254
285
|
{ concurrency: "unbounded" },
|
|
255
286
|
);
|
|
256
287
|
|
|
288
|
+
const waitForStableDeps = (fqns: string[]) =>
|
|
289
|
+
Effect.all(
|
|
290
|
+
fqns
|
|
291
|
+
.filter((fqn) => fqn in readyStable)
|
|
292
|
+
.map((fqn) => Deferred.await(readyStable[fqn])),
|
|
293
|
+
{ concurrency: "unbounded" },
|
|
294
|
+
);
|
|
295
|
+
|
|
257
296
|
const failures: LifecycleFailure[] = [];
|
|
258
297
|
|
|
259
298
|
yield* Effect.all(
|
|
260
|
-
Object.entries(
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
299
|
+
Object.entries(allNodes).map(([fqn, node]) =>
|
|
300
|
+
(node as ActionApply).kind === "action"
|
|
301
|
+
? executeActionNode(
|
|
302
|
+
fqn,
|
|
303
|
+
node as ActionApply,
|
|
304
|
+
tracker,
|
|
305
|
+
ready,
|
|
306
|
+
readyStable,
|
|
307
|
+
terminalStatuses,
|
|
308
|
+
session,
|
|
309
|
+
state,
|
|
310
|
+
stackName,
|
|
311
|
+
stage,
|
|
312
|
+
getOutputs,
|
|
313
|
+
waitForStableDeps,
|
|
314
|
+
failures,
|
|
315
|
+
)
|
|
316
|
+
: executeNode(
|
|
317
|
+
fqn,
|
|
318
|
+
node as Apply,
|
|
319
|
+
tracker,
|
|
320
|
+
ready,
|
|
321
|
+
readyStable,
|
|
322
|
+
terminalStatuses as any,
|
|
323
|
+
session,
|
|
324
|
+
state,
|
|
325
|
+
stackName,
|
|
326
|
+
stage,
|
|
327
|
+
getOutputs,
|
|
328
|
+
waitForDeps,
|
|
329
|
+
failures,
|
|
330
|
+
plan.cycleMembers.has(fqn),
|
|
331
|
+
),
|
|
276
332
|
),
|
|
277
333
|
{ concurrency: "unbounded" },
|
|
278
334
|
);
|
|
@@ -297,6 +353,7 @@ const executeNode = (
|
|
|
297
353
|
node: Apply,
|
|
298
354
|
tracker: Record<string, ResourceTracker>,
|
|
299
355
|
ready: Record<string, Deferred.Deferred<void>>,
|
|
356
|
+
readyStable: Record<string, Deferred.Deferred<void>>,
|
|
300
357
|
terminalStatuses: Map<
|
|
301
358
|
string,
|
|
302
359
|
{
|
|
@@ -357,6 +414,10 @@ const executeNode = (
|
|
|
357
414
|
});
|
|
358
415
|
|
|
359
416
|
const signalReady = Deferred.succeed(ready[fqn], void 0);
|
|
417
|
+
// Signal only after reconcile completes — never during precreate. Tasks
|
|
418
|
+
// (and any other consumer that calls `waitForStableDeps`) block on this
|
|
419
|
+
// so they observe the resource's final attrs rather than a stub.
|
|
420
|
+
const signalReadyStable = Deferred.succeed(readyStable[fqn], void 0);
|
|
360
421
|
|
|
361
422
|
const storeAndSignal = (t: ResourceTracker) =>
|
|
362
423
|
Effect.gen(function* () {
|
|
@@ -367,6 +428,8 @@ const executeNode = (
|
|
|
367
428
|
// ── noop ──
|
|
368
429
|
|
|
369
430
|
if (node.action === "noop") {
|
|
431
|
+
// No work to do — the persisted attr is already stable.
|
|
432
|
+
yield* signalReadyStable;
|
|
370
433
|
yield* storeAndSignal({
|
|
371
434
|
output: node.state.attr,
|
|
372
435
|
props: node.state.props,
|
|
@@ -570,6 +633,7 @@ const executeNode = (
|
|
|
570
633
|
instanceId,
|
|
571
634
|
};
|
|
572
635
|
yield* signalReady;
|
|
636
|
+
yield* signalReadyStable;
|
|
573
637
|
|
|
574
638
|
yield* markTerminal("created");
|
|
575
639
|
return;
|
|
@@ -701,6 +765,7 @@ const executeNode = (
|
|
|
701
765
|
// the deferred has already been resolved by the early `storeAndSignal`
|
|
702
766
|
// above and `signalReady` is a no-op the second time.
|
|
703
767
|
yield* signalReady;
|
|
768
|
+
yield* signalReadyStable;
|
|
704
769
|
|
|
705
770
|
yield* markTerminal("updated");
|
|
706
771
|
return;
|
|
@@ -718,6 +783,7 @@ const executeNode = (
|
|
|
718
783
|
instanceId,
|
|
719
784
|
};
|
|
720
785
|
yield* signalReady;
|
|
786
|
+
yield* signalReadyStable;
|
|
721
787
|
yield* markTerminal("created");
|
|
722
788
|
return;
|
|
723
789
|
}
|
|
@@ -864,6 +930,7 @@ const executeNode = (
|
|
|
864
930
|
instanceId,
|
|
865
931
|
};
|
|
866
932
|
yield* signalReady;
|
|
933
|
+
yield* signalReadyStable;
|
|
867
934
|
|
|
868
935
|
// Keep progress anchored to the live replacement while GC drains the
|
|
869
936
|
// previous generation(s) in the background.
|
|
@@ -889,6 +956,10 @@ const executeNode = (
|
|
|
889
956
|
cause,
|
|
890
957
|
});
|
|
891
958
|
yield* Deferred.failCause(ready[fqn], cause as Cause.Cause<never>);
|
|
959
|
+
yield* Deferred.failCause(
|
|
960
|
+
readyStable[fqn],
|
|
961
|
+
cause as Cause.Cause<never>,
|
|
962
|
+
);
|
|
892
963
|
yield* session.emit({
|
|
893
964
|
kind: "status-change",
|
|
894
965
|
id: node.resource.LogicalId,
|
|
@@ -907,6 +978,168 @@ const executeNode = (
|
|
|
907
978
|
}),
|
|
908
979
|
) as Effect.Effect<void, never, never>;
|
|
909
980
|
|
|
981
|
+
// ── Task execution ─────────────────────────────────────────────────────────
|
|
982
|
+
//
|
|
983
|
+
// Tasks slot into the same scheduler as resources. They have no provider
|
|
984
|
+
// lifecycle — just a single Effect that runs when inputs change (or when
|
|
985
|
+
// `--force` is set). The output value is written to `tracker[fqn].output`
|
|
986
|
+
// so downstream Output evaluation works identically to resource attrs.
|
|
987
|
+
|
|
988
|
+
const executeActionNode = (
|
|
989
|
+
fqn: string,
|
|
990
|
+
node: ActionApply,
|
|
991
|
+
tracker: Record<string, ResourceTracker>,
|
|
992
|
+
ready: Record<string, Deferred.Deferred<void>>,
|
|
993
|
+
readyStable: Record<string, Deferred.Deferred<void>>,
|
|
994
|
+
terminalStatuses: Map<
|
|
995
|
+
string,
|
|
996
|
+
{
|
|
997
|
+
id: string;
|
|
998
|
+
type: string;
|
|
999
|
+
status: Extract<ApplyStatus, "created" | "updated" | "ran" | "skipped">;
|
|
1000
|
+
}
|
|
1001
|
+
>,
|
|
1002
|
+
session: PlanStatusSession,
|
|
1003
|
+
state: {
|
|
1004
|
+
set: <V extends PersistedState>(req: {
|
|
1005
|
+
stack: string;
|
|
1006
|
+
stage: string;
|
|
1007
|
+
fqn: string;
|
|
1008
|
+
value: V;
|
|
1009
|
+
}) => Effect.Effect<V, StateStoreError, never>;
|
|
1010
|
+
},
|
|
1011
|
+
stackName: string,
|
|
1012
|
+
stage: string,
|
|
1013
|
+
getOutputs: () => Record<string, any>,
|
|
1014
|
+
waitForDeps: (fqns: string[]) => Effect.Effect<void[], never, never>,
|
|
1015
|
+
failures: LifecycleFailure[],
|
|
1016
|
+
): Effect.Effect<void, never, any> =>
|
|
1017
|
+
Effect.gen(function* () {
|
|
1018
|
+
const task = node.def;
|
|
1019
|
+
const logicalId = task.LogicalId;
|
|
1020
|
+
const namespace = task.Namespace;
|
|
1021
|
+
|
|
1022
|
+
const commit = <S extends ActionState>(value: Omit<S, "namespace">) =>
|
|
1023
|
+
state.set({
|
|
1024
|
+
stack: stackName,
|
|
1025
|
+
stage,
|
|
1026
|
+
fqn,
|
|
1027
|
+
value: { ...value, namespace } as S,
|
|
1028
|
+
});
|
|
1029
|
+
|
|
1030
|
+
const report = (status: ApplyStatus) =>
|
|
1031
|
+
session.emit({
|
|
1032
|
+
kind: "status-change",
|
|
1033
|
+
id: logicalId,
|
|
1034
|
+
type: task.Type,
|
|
1035
|
+
status,
|
|
1036
|
+
});
|
|
1037
|
+
|
|
1038
|
+
const signalReady = Deferred.succeed(ready[fqn], void 0);
|
|
1039
|
+
const signalReadyStable = Deferred.succeed(readyStable[fqn], void 0);
|
|
1040
|
+
|
|
1041
|
+
if (node.action === "noop") {
|
|
1042
|
+
tracker[fqn] = {
|
|
1043
|
+
output: node.state.output,
|
|
1044
|
+
props: { __input: node.state.input },
|
|
1045
|
+
bindings: [],
|
|
1046
|
+
instanceId: fqn,
|
|
1047
|
+
};
|
|
1048
|
+
yield* signalReady;
|
|
1049
|
+
yield* signalReadyStable;
|
|
1050
|
+
terminalStatuses.set(fqn, {
|
|
1051
|
+
id: logicalId,
|
|
1052
|
+
type: task.Type,
|
|
1053
|
+
status: "skipped",
|
|
1054
|
+
});
|
|
1055
|
+
return;
|
|
1056
|
+
}
|
|
1057
|
+
|
|
1058
|
+
// ── run ──
|
|
1059
|
+
// Wait for stable (post-reconcile) upstream attrs — not precreate stubs.
|
|
1060
|
+
// This is `waitForStableDeps` at the call site, passed in as the
|
|
1061
|
+
// `waitForDeps` parameter here.
|
|
1062
|
+
yield* waitForDeps(
|
|
1063
|
+
Object.keys(Output.resolveUpstream(node.input)).filter(
|
|
1064
|
+
(f) => f in readyStable,
|
|
1065
|
+
),
|
|
1066
|
+
);
|
|
1067
|
+
|
|
1068
|
+
const outputs = getOutputs();
|
|
1069
|
+
const resolvedInput = (yield* Output.evaluate(node.input, outputs)) as any;
|
|
1070
|
+
const inputHashValue = yield* hashInput(resolvedInput);
|
|
1071
|
+
|
|
1072
|
+
yield* commit<RunningActionState>({
|
|
1073
|
+
kind: "action",
|
|
1074
|
+
status: "running",
|
|
1075
|
+
fqn,
|
|
1076
|
+
logicalId,
|
|
1077
|
+
actionType: task.Type,
|
|
1078
|
+
inputHash: inputHashValue,
|
|
1079
|
+
input: resolvedInput,
|
|
1080
|
+
downstream: node.downstream,
|
|
1081
|
+
});
|
|
1082
|
+
yield* report("running");
|
|
1083
|
+
|
|
1084
|
+
const result = yield* task.Run(resolvedInput);
|
|
1085
|
+
|
|
1086
|
+
yield* commit<RanActionState>({
|
|
1087
|
+
kind: "action",
|
|
1088
|
+
status: "ran",
|
|
1089
|
+
fqn,
|
|
1090
|
+
logicalId,
|
|
1091
|
+
actionType: task.Type,
|
|
1092
|
+
inputHash: inputHashValue,
|
|
1093
|
+
input: resolvedInput,
|
|
1094
|
+
output: result,
|
|
1095
|
+
downstream: node.downstream,
|
|
1096
|
+
});
|
|
1097
|
+
|
|
1098
|
+
tracker[fqn] = {
|
|
1099
|
+
output: result,
|
|
1100
|
+
props: { __input: resolvedInput },
|
|
1101
|
+
bindings: [],
|
|
1102
|
+
instanceId: fqn,
|
|
1103
|
+
};
|
|
1104
|
+
yield* signalReady;
|
|
1105
|
+
yield* signalReadyStable;
|
|
1106
|
+
terminalStatuses.set(fqn, {
|
|
1107
|
+
id: logicalId,
|
|
1108
|
+
type: task.Type,
|
|
1109
|
+
status: "ran",
|
|
1110
|
+
});
|
|
1111
|
+
}).pipe(
|
|
1112
|
+
Effect.catchCause((cause) =>
|
|
1113
|
+
Effect.gen(function* () {
|
|
1114
|
+
failures.push({
|
|
1115
|
+
fqn,
|
|
1116
|
+
logicalId: node.def.LogicalId,
|
|
1117
|
+
type: node.def.Type,
|
|
1118
|
+
cause,
|
|
1119
|
+
});
|
|
1120
|
+
yield* Deferred.failCause(ready[fqn], cause as Cause.Cause<never>);
|
|
1121
|
+
yield* Deferred.failCause(
|
|
1122
|
+
readyStable[fqn],
|
|
1123
|
+
cause as Cause.Cause<never>,
|
|
1124
|
+
);
|
|
1125
|
+
yield* session.emit({
|
|
1126
|
+
kind: "status-change",
|
|
1127
|
+
id: node.def.LogicalId,
|
|
1128
|
+
type: node.def.Type,
|
|
1129
|
+
status: "fail",
|
|
1130
|
+
});
|
|
1131
|
+
}),
|
|
1132
|
+
),
|
|
1133
|
+
Effect.withSpan("apply.action", {
|
|
1134
|
+
attributes: {
|
|
1135
|
+
"alchemy.action.fqn": fqn,
|
|
1136
|
+
"alchemy.action.type": node.def.Type,
|
|
1137
|
+
"alchemy.action.logical_id": node.def.LogicalId,
|
|
1138
|
+
"alchemy.action.verb": node.action,
|
|
1139
|
+
},
|
|
1140
|
+
}),
|
|
1141
|
+
) as Effect.Effect<void, never, any>;
|
|
1142
|
+
|
|
910
1143
|
// ── Phase 3: imperative convergence loop ───────────────────────────────────
|
|
911
1144
|
//
|
|
912
1145
|
// After the initial concurrent pass, some resources may have been created
|
|
@@ -924,12 +1157,12 @@ const converge = Effect.fnUntraced(function* (
|
|
|
924
1157
|
{
|
|
925
1158
|
id: string;
|
|
926
1159
|
type: string;
|
|
927
|
-
status: Extract<ApplyStatus, "created" | "updated">;
|
|
1160
|
+
status: Extract<ApplyStatus, "created" | "updated" | "ran" | "skipped">;
|
|
928
1161
|
}
|
|
929
1162
|
>,
|
|
930
1163
|
session: PlanStatusSession,
|
|
931
1164
|
state: {
|
|
932
|
-
set: <V extends
|
|
1165
|
+
set: <V extends PersistedState>(req: {
|
|
933
1166
|
stack: string;
|
|
934
1167
|
stage: string;
|
|
935
1168
|
fqn: string;
|
|
@@ -1034,6 +1267,75 @@ const converge = Effect.fnUntraced(function* (
|
|
|
1034
1267
|
});
|
|
1035
1268
|
}
|
|
1036
1269
|
|
|
1270
|
+
// Tasks: re-run when their resolved input drifts vs. the value they
|
|
1271
|
+
// last applied with (e.g. an upstream resource produced new attrs in
|
|
1272
|
+
// this pass). Skipped (noop) tasks are not re-checked here — their
|
|
1273
|
+
// recorded inputHash is authoritative until the next plan.
|
|
1274
|
+
for (const [fqn, node] of Object.entries(plan.actions)) {
|
|
1275
|
+
if (node.action !== "run") continue;
|
|
1276
|
+
if (!tracker[fqn]) continue;
|
|
1277
|
+
|
|
1278
|
+
const outputs = Object.fromEntries(
|
|
1279
|
+
Object.entries(tracker).map(([k, t]) => [k, t.output]),
|
|
1280
|
+
);
|
|
1281
|
+
const newInput = (yield* Output.evaluate(node.input, outputs)) as any;
|
|
1282
|
+
const newHash = yield* hashInput(newInput);
|
|
1283
|
+
const oldInput = tracker[fqn].props?.__input;
|
|
1284
|
+
const oldHash = yield* hashInput(oldInput);
|
|
1285
|
+
if (newHash === oldHash) continue;
|
|
1286
|
+
|
|
1287
|
+
anyUpdated = true;
|
|
1288
|
+
|
|
1289
|
+
yield* state.set({
|
|
1290
|
+
stack: stackName,
|
|
1291
|
+
stage,
|
|
1292
|
+
fqn,
|
|
1293
|
+
value: {
|
|
1294
|
+
kind: "action",
|
|
1295
|
+
status: "running",
|
|
1296
|
+
fqn,
|
|
1297
|
+
logicalId: node.def.LogicalId,
|
|
1298
|
+
namespace: node.def.Namespace,
|
|
1299
|
+
actionType: node.def.Type,
|
|
1300
|
+
inputHash: newHash,
|
|
1301
|
+
input: newInput,
|
|
1302
|
+
downstream: node.downstream,
|
|
1303
|
+
} satisfies RunningActionState,
|
|
1304
|
+
});
|
|
1305
|
+
|
|
1306
|
+
const result = yield* node.def.Run(newInput);
|
|
1307
|
+
|
|
1308
|
+
yield* state.set({
|
|
1309
|
+
stack: stackName,
|
|
1310
|
+
stage,
|
|
1311
|
+
fqn,
|
|
1312
|
+
value: {
|
|
1313
|
+
kind: "action",
|
|
1314
|
+
status: "ran",
|
|
1315
|
+
fqn,
|
|
1316
|
+
logicalId: node.def.LogicalId,
|
|
1317
|
+
namespace: node.def.Namespace,
|
|
1318
|
+
actionType: node.def.Type,
|
|
1319
|
+
inputHash: newHash,
|
|
1320
|
+
input: newInput,
|
|
1321
|
+
output: result,
|
|
1322
|
+
downstream: node.downstream,
|
|
1323
|
+
} satisfies RanActionState,
|
|
1324
|
+
});
|
|
1325
|
+
|
|
1326
|
+
tracker[fqn] = {
|
|
1327
|
+
output: result,
|
|
1328
|
+
props: { __input: newInput },
|
|
1329
|
+
bindings: [],
|
|
1330
|
+
instanceId: fqn,
|
|
1331
|
+
};
|
|
1332
|
+
terminalStatuses.set(fqn, {
|
|
1333
|
+
id: node.def.LogicalId,
|
|
1334
|
+
type: node.def.Type,
|
|
1335
|
+
status: "ran",
|
|
1336
|
+
});
|
|
1337
|
+
}
|
|
1338
|
+
|
|
1037
1339
|
if (!anyUpdated) break;
|
|
1038
1340
|
}
|
|
1039
1341
|
});
|
|
@@ -1049,6 +1351,32 @@ const collectGarbage = Effect.fnUntraced(function* (
|
|
|
1049
1351
|
const stackName = stack.name;
|
|
1050
1352
|
const stage = yield* Stage;
|
|
1051
1353
|
|
|
1354
|
+
// Task deletions are pure state drops — no body is invoked. Run them in
|
|
1355
|
+
// parallel before resource GC; tasks never have provider-side dependencies
|
|
1356
|
+
// to wait on.
|
|
1357
|
+
yield* Effect.all(
|
|
1358
|
+
Object.entries(plan.actionDeletions ?? {}).map(([fqn, node]) =>
|
|
1359
|
+
node === undefined
|
|
1360
|
+
? Effect.void
|
|
1361
|
+
: Effect.gen(function* () {
|
|
1362
|
+
yield* session.emit({
|
|
1363
|
+
kind: "status-change",
|
|
1364
|
+
id: node.def.LogicalId,
|
|
1365
|
+
type: node.def.Type,
|
|
1366
|
+
status: "deleting",
|
|
1367
|
+
});
|
|
1368
|
+
yield* state.delete({ stack: stackName, stage, fqn });
|
|
1369
|
+
yield* session.emit({
|
|
1370
|
+
kind: "status-change",
|
|
1371
|
+
id: node.def.LogicalId,
|
|
1372
|
+
type: node.def.Type,
|
|
1373
|
+
status: "deleted",
|
|
1374
|
+
});
|
|
1375
|
+
}),
|
|
1376
|
+
),
|
|
1377
|
+
{ concurrency: "unbounded" },
|
|
1378
|
+
);
|
|
1379
|
+
|
|
1052
1380
|
const deleteGraph = Effect.fnUntraced(function* (
|
|
1053
1381
|
deletionGraph: Record<string, Delete | ReplacedResourceState | undefined>,
|
|
1054
1382
|
) {
|
package/src/Artifacts.ts
CHANGED
|
@@ -78,7 +78,7 @@ const getOrCreateBag = (
|
|
|
78
78
|
export const makeScopedArtifacts = (
|
|
79
79
|
store: Map<string, ArtifactBag>,
|
|
80
80
|
fqn: string,
|
|
81
|
-
):
|
|
81
|
+
): Artifacts["Service"] => {
|
|
82
82
|
const bag = getOrCreateBag(store, fqn);
|
|
83
83
|
return {
|
|
84
84
|
get: <T>(key: string) => Effect.sync(() => bag.get(key) as T | undefined),
|
|
@@ -98,9 +98,7 @@ export const scopedArtifacts = (
|
|
|
98
98
|
): Layer.Layer<Artifacts, never, ArtifactStore> =>
|
|
99
99
|
Layer.effect(
|
|
100
100
|
Artifacts,
|
|
101
|
-
ArtifactStore.
|
|
102
|
-
Effect.map((store) => makeScopedArtifacts(store, fqn)),
|
|
103
|
-
),
|
|
101
|
+
ArtifactStore.useSync((store) => makeScopedArtifacts(store, fqn)),
|
|
104
102
|
);
|
|
105
103
|
|
|
106
104
|
/**
|
package/src/Auth/AuthProvider.ts
CHANGED
|
@@ -220,7 +220,7 @@ export const getAuthProvider = <
|
|
|
220
220
|
>(
|
|
221
221
|
name: string,
|
|
222
222
|
): Effect.Effect<AuthProvider<Config, Credentials>, AuthError, AuthProviders> =>
|
|
223
|
-
|
|
223
|
+
AuthProviders.use((registry) =>
|
|
224
224
|
registry[name] == null
|
|
225
225
|
? Effect.fail(
|
|
226
226
|
new AuthError({
|
package/src/Auth/Env.ts
CHANGED
|
@@ -4,32 +4,24 @@ import * as Clank from "../Util/Clank.ts";
|
|
|
4
4
|
import { AuthError } from "./AuthProvider.ts";
|
|
5
5
|
|
|
6
6
|
export const getEnv = (key: string) =>
|
|
7
|
-
Config.string(key)
|
|
8
|
-
.asEffect()
|
|
9
|
-
.pipe(Effect.orElseSucceed(() => undefined));
|
|
7
|
+
Config.string(key).pipe(Effect.orElseSucceed(() => undefined));
|
|
10
8
|
|
|
11
9
|
export const getEnvRequired = (key: string) =>
|
|
12
|
-
Config.string(key)
|
|
13
|
-
.
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
),
|
|
18
|
-
);
|
|
10
|
+
Config.string(key).pipe(
|
|
11
|
+
Effect.catch(() =>
|
|
12
|
+
Effect.fail(new AuthError({ message: `Missing required env: ${key}` })),
|
|
13
|
+
),
|
|
14
|
+
);
|
|
19
15
|
|
|
20
16
|
export const getEnvRedacted = (key: string) =>
|
|
21
|
-
Config.redacted(key)
|
|
22
|
-
.asEffect()
|
|
23
|
-
.pipe(Effect.orElseSucceed(() => undefined));
|
|
17
|
+
Config.redacted(key).pipe(Effect.orElseSucceed(() => undefined));
|
|
24
18
|
|
|
25
19
|
export const getEnvRedactedRequired = (key: string) =>
|
|
26
|
-
Config.redacted(key)
|
|
27
|
-
.
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
),
|
|
32
|
-
);
|
|
20
|
+
Config.redacted(key).pipe(
|
|
21
|
+
Effect.catch(() =>
|
|
22
|
+
Effect.fail(new AuthError({ message: `Missing required env: ${key}` })),
|
|
23
|
+
),
|
|
24
|
+
);
|
|
33
25
|
|
|
34
26
|
export const retryOnce = <A, R>(
|
|
35
27
|
self: Effect.Effect<A, Clank.PromptCancelled, R>,
|
package/src/Binding.ts
CHANGED
|
@@ -141,7 +141,7 @@ export const Policy =
|
|
|
141
141
|
Effect.flatMap((service) =>
|
|
142
142
|
service
|
|
143
143
|
? Effect.succeed(service)
|
|
144
|
-
: Effect.all([CurrentStack, ALCHEMY_PHASE
|
|
144
|
+
: Effect.all([CurrentStack, ALCHEMY_PHASE]).pipe(
|
|
145
145
|
Effect.flatMap(([stack, phase]) =>
|
|
146
146
|
stack && phase === "plan"
|
|
147
147
|
? Effect.die(
|
|
@@ -154,7 +154,7 @@ export const Policy =
|
|
|
154
154
|
);
|
|
155
155
|
|
|
156
156
|
const asEffect = () =>
|
|
157
|
-
Effect.all([Self
|
|
157
|
+
Effect.all([Self, Service]).pipe(
|
|
158
158
|
Effect.map(
|
|
159
159
|
([resource, fn]) =>
|
|
160
160
|
(...args: any[]) =>
|
|
@@ -174,7 +174,7 @@ export const Policy =
|
|
|
174
174
|
// @ts-expect-error
|
|
175
175
|
return Object.assign(self, {
|
|
176
176
|
[Symbol.iterator]() {
|
|
177
|
-
return new SingleShotGen(
|
|
177
|
+
return new SingleShotGen(asEffect());
|
|
178
178
|
},
|
|
179
179
|
asEffect,
|
|
180
180
|
bind: (...args: any[]) =>
|
|
@@ -190,9 +190,7 @@ export const Policy =
|
|
|
190
190
|
self,
|
|
191
191
|
// @ts-expect-error
|
|
192
192
|
(...args: Parameters<Shape>) =>
|
|
193
|
-
Self.
|
|
194
|
-
Effect.flatMap((self) => fn(self as ResourceLike, ...args)),
|
|
195
|
-
),
|
|
193
|
+
Self.use((self) => fn(self as ResourceLike, ...args)),
|
|
196
194
|
),
|
|
197
195
|
effect: (
|
|
198
196
|
fn: Effect.Effect<
|
|
@@ -209,9 +207,7 @@ export const Policy =
|
|
|
209
207
|
fn,
|
|
210
208
|
(fn) =>
|
|
211
209
|
(...args: Parameters<Shape>) =>
|
|
212
|
-
|
|
213
|
-
fn(self as ResourceLike, ...args),
|
|
214
|
-
),
|
|
210
|
+
Self.use((self) => fn(self as ResourceLike, ...args)),
|
|
215
211
|
),
|
|
216
212
|
),
|
|
217
213
|
},
|
package/src/Bundle/Docker.ts
CHANGED
|
@@ -3,7 +3,7 @@ import * as Effect from "effect/Effect";
|
|
|
3
3
|
import * as FileSystem from "effect/FileSystem";
|
|
4
4
|
import * as Path from "effect/Path";
|
|
5
5
|
import { ChildProcess } from "effect/unstable/process";
|
|
6
|
-
import { exec } from "../
|
|
6
|
+
import { exec } from "../Util/exec.ts";
|
|
7
7
|
|
|
8
8
|
export class DockerCommandError extends Data.TaggedError("DockerCommandError")<{
|
|
9
9
|
readonly command: string;
|
package/src/Cli/Event.ts
CHANGED