alchemy 2.0.0-beta.84 → 2.0.0-beta.85
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/THIRD_PARTY_LICENSES.md +2 -2
- package/bin/cli.js +14 -6
- package/bin/register-oxc.js +16 -12
- package/lib/AdoptPolicy.d.ts +73 -0
- package/lib/AdoptPolicy.d.ts.map +1 -1
- package/lib/AdoptPolicy.js +54 -0
- package/lib/AdoptPolicy.js.map +1 -1
- package/lib/Alchemist/AuthRegistry.d.ts +31 -0
- package/lib/Alchemist/AuthRegistry.d.ts.map +1 -0
- package/lib/Alchemist/AuthRegistry.js +95 -0
- package/lib/Alchemist/AuthRegistry.js.map +1 -0
- package/lib/Alchemist/Drift.d.ts +70 -0
- package/lib/Alchemist/Drift.d.ts.map +1 -0
- package/lib/Alchemist/Drift.js +54 -0
- package/lib/Alchemist/Drift.js.map +1 -0
- package/lib/Alchemist/Entrypoint.d.ts +27 -3
- package/lib/Alchemist/Entrypoint.d.ts.map +1 -1
- package/lib/Alchemist/Entrypoint.js +34 -3
- package/lib/Alchemist/Entrypoint.js.map +1 -1
- package/lib/Alchemist/Errors.d.ts +1 -1
- package/lib/Alchemist/Errors.d.ts.map +1 -1
- package/lib/Alchemist/Errors.js +1 -1
- package/lib/Alchemist/Errors.js.map +1 -1
- package/lib/Alchemist/Logs.d.ts +46 -0
- package/lib/Alchemist/Logs.d.ts.map +1 -0
- package/lib/Alchemist/{routes/logs.js → Logs.js} +21 -26
- package/lib/Alchemist/Logs.js.map +1 -0
- package/lib/Alchemist/Nuke.d.ts +69 -0
- package/lib/Alchemist/Nuke.d.ts.map +1 -0
- package/lib/Alchemist/Nuke.js +35 -0
- package/lib/Alchemist/Nuke.js.map +1 -0
- package/lib/Alchemist/Operations.d.ts +168 -0
- package/lib/Alchemist/Operations.d.ts.map +1 -0
- package/lib/Alchemist/Operations.js +165 -0
- package/lib/Alchemist/Operations.js.map +1 -0
- package/lib/Alchemist/Profile.d.ts +132 -0
- package/lib/Alchemist/Profile.d.ts.map +1 -0
- package/lib/Alchemist/{routes/profile.js → Profile.js} +20 -21
- package/lib/Alchemist/Profile.js.map +1 -0
- package/lib/Alchemist/{routes/provider.d.ts → Provider.d.ts} +4 -4
- package/lib/Alchemist/Provider.d.ts.map +1 -0
- package/lib/Alchemist/{routes/provider.js → Provider.js} +7 -6
- package/lib/Alchemist/Provider.js.map +1 -0
- package/lib/Alchemist/Runtime.d.ts +10 -6
- package/lib/Alchemist/Runtime.d.ts.map +1 -1
- package/lib/Alchemist/Runtime.js +38 -2
- package/lib/Alchemist/Runtime.js.map +1 -1
- package/lib/Alchemist/{routes/state.d.ts → State.d.ts} +36 -16
- package/lib/Alchemist/State.d.ts.map +1 -0
- package/lib/Alchemist/{routes/state.js → State.js} +50 -15
- package/lib/Alchemist/State.js.map +1 -0
- package/lib/Alchemist/index.d.ts +11 -10
- package/lib/Alchemist/index.d.ts.map +1 -1
- package/lib/Alchemist/index.js +10 -9
- package/lib/Alchemist/index.js.map +1 -1
- package/lib/Apply.d.ts +2 -8
- package/lib/Apply.d.ts.map +1 -1
- package/lib/Apply.js +364 -184
- package/lib/Apply.js.map +1 -1
- package/lib/Auth/AuthProvider.d.ts +24 -11
- package/lib/Auth/AuthProvider.d.ts.map +1 -1
- package/lib/Auth/AuthProvider.js +28 -12
- package/lib/Auth/AuthProvider.js.map +1 -1
- package/lib/Auth/BrowserOAuth.d.ts +6 -8
- package/lib/Auth/BrowserOAuth.d.ts.map +1 -1
- package/lib/Auth/BrowserOAuth.js +25 -41
- package/lib/Auth/BrowserOAuth.js.map +1 -1
- package/lib/Auth/Credentials.d.ts.map +1 -1
- package/lib/Auth/Credentials.js +2 -2
- package/lib/Auth/Credentials.js.map +1 -1
- package/lib/Auth/Demand.d.ts +4 -4
- package/lib/Auth/Demand.d.ts.map +1 -1
- package/lib/Auth/Demand.js +16 -10
- package/lib/Auth/Demand.js.map +1 -1
- package/lib/Auth/Env.d.ts +2 -1
- package/lib/Auth/Env.d.ts.map +1 -1
- package/lib/Auth/Env.js +4 -2
- package/lib/Auth/Env.js.map +1 -1
- package/lib/Auth/Inspect.d.ts +2 -2
- package/lib/Auth/Inspect.d.ts.map +1 -1
- package/lib/Auth/Inspect.js +3 -1
- package/lib/Auth/Inspect.js.map +1 -1
- package/lib/Auth/Lock.d.ts.map +1 -1
- package/lib/Auth/Lock.js +4 -8
- package/lib/Auth/Lock.js.map +1 -1
- package/lib/Auth/OAuthFlow.d.ts +3 -12
- package/lib/Auth/OAuthFlow.d.ts.map +1 -1
- package/lib/Auth/OAuthFlow.js +7 -17
- package/lib/Auth/OAuthFlow.js.map +1 -1
- package/lib/Auth/Paths.d.ts +2 -1
- package/lib/Auth/Paths.d.ts.map +1 -1
- package/lib/Auth/Paths.js +3 -2
- package/lib/Auth/Paths.js.map +1 -1
- package/lib/Auth/Profile.d.ts +10 -0
- package/lib/Auth/Profile.d.ts.map +1 -1
- package/lib/Auth/Profile.js +19 -2
- package/lib/Auth/Profile.js.map +1 -1
- package/lib/Auth/Registry.d.ts +20 -0
- package/lib/Auth/Registry.d.ts.map +1 -0
- package/lib/Auth/Registry.js +17 -0
- package/lib/Auth/Registry.js.map +1 -0
- package/lib/Auth/Resolve.d.ts +34 -2
- package/lib/Auth/Resolve.d.ts.map +1 -1
- package/lib/Auth/Resolve.js +51 -3
- package/lib/Auth/Resolve.js.map +1 -1
- package/lib/Auth/StoredAuthProvider.d.ts +1 -1
- package/lib/Auth/StoredAuthProvider.d.ts.map +1 -1
- package/lib/Auth/StoredAuthProvider.js +1 -2
- package/lib/Auth/StoredAuthProvider.js.map +1 -1
- package/lib/Binding.d.ts.map +1 -1
- package/lib/Binding.js +3 -1
- package/lib/Binding.js.map +1 -1
- package/lib/Bundle/Bundle.d.ts +5 -0
- package/lib/Bundle/Bundle.d.ts.map +1 -1
- package/lib/Bundle/Bundle.js +36 -6
- package/lib/Bundle/Bundle.js.map +1 -1
- package/lib/Bundle/NamespaceImportPlugin.d.ts +55 -0
- package/lib/Bundle/NamespaceImportPlugin.d.ts.map +1 -0
- package/lib/Bundle/NamespaceImportPlugin.js +226 -0
- package/lib/Bundle/NamespaceImportPlugin.js.map +1 -0
- package/lib/Bundle/index.d.ts +1 -0
- package/lib/Bundle/index.d.ts.map +1 -1
- package/lib/Bundle/index.js +1 -0
- package/lib/Bundle/index.js.map +1 -1
- package/lib/Cli/Format.d.ts.map +1 -1
- package/lib/Cli/Format.js +2 -1
- package/lib/Cli/Format.js.map +1 -1
- package/lib/Cli/GlobalLog.d.ts +72 -26
- package/lib/Cli/GlobalLog.d.ts.map +1 -1
- package/lib/Cli/GlobalLog.js +151 -59
- package/lib/Cli/GlobalLog.js.map +1 -1
- package/lib/Cli/LoggingCli.d.ts.map +1 -1
- package/lib/Cli/LoggingCli.js +24 -18
- package/lib/Cli/LoggingCli.js.map +1 -1
- package/lib/Cli/PlainCliFormatter.d.ts.map +1 -1
- package/lib/Cli/PlainCliFormatter.js +4 -1
- package/lib/Cli/PlainCliFormatter.js.map +1 -1
- package/lib/Cli/Present.d.ts +14 -0
- package/lib/Cli/Present.d.ts.map +1 -0
- package/lib/Cli/Present.js +22 -0
- package/lib/Cli/Present.js.map +1 -0
- package/lib/Cli/SigilRenderer.d.ts +58 -0
- package/lib/Cli/SigilRenderer.d.ts.map +1 -0
- package/lib/Cli/SigilRenderer.js +39 -0
- package/lib/Cli/SigilRenderer.js.map +1 -0
- package/lib/Cli/checkVersion.d.ts +11 -14
- package/lib/Cli/checkVersion.d.ts.map +1 -1
- package/lib/Cli/checkVersion.js +19 -77
- package/lib/Cli/checkVersion.js.map +1 -1
- package/lib/Cli/commands/confirm.d.ts +2 -2
- package/lib/Cli/commands/confirm.d.ts.map +1 -1
- package/lib/Cli/commands/confirm.js +3 -3
- package/lib/Cli/commands/confirm.js.map +1 -1
- package/lib/Cli/commands/deploy.d.ts +4 -4
- package/lib/Cli/commands/deploy.d.ts.map +1 -1
- package/lib/Cli/commands/deploy.js +40 -39
- package/lib/Cli/commands/deploy.js.map +1 -1
- package/lib/Cli/commands/dev.d.ts.map +1 -1
- package/lib/Cli/commands/dev.js +41 -3
- package/lib/Cli/commands/dev.js.map +1 -1
- package/lib/Cli/commands/drift.d.ts +2 -2
- package/lib/Cli/commands/drift.d.ts.map +1 -1
- package/lib/Cli/commands/drift.js +14 -13
- package/lib/Cli/commands/drift.js.map +1 -1
- package/lib/Cli/commands/errors.d.ts.map +1 -1
- package/lib/Cli/commands/errors.js +2 -1
- package/lib/Cli/commands/errors.js.map +1 -1
- package/lib/Cli/commands/instrument.d.ts +15 -5
- package/lib/Cli/commands/instrument.d.ts.map +1 -1
- package/lib/Cli/commands/instrument.js +33 -8
- package/lib/Cli/commands/instrument.js.map +1 -1
- package/lib/Cli/commands/logs.d.ts +1 -1
- package/lib/Cli/commands/logs.d.ts.map +1 -1
- package/lib/Cli/commands/logs.js +22 -22
- package/lib/Cli/commands/logs.js.map +1 -1
- package/lib/Cli/commands/nuke.d.ts +3 -2
- package/lib/Cli/commands/nuke.d.ts.map +1 -1
- package/lib/Cli/commands/nuke.js +19 -17
- package/lib/Cli/commands/nuke.js.map +1 -1
- package/lib/Cli/commands/profile/commands.d.ts +3 -2
- package/lib/Cli/commands/profile/commands.d.ts.map +1 -1
- package/lib/Cli/commands/profile/commands.js +26 -27
- package/lib/Cli/commands/profile/commands.js.map +1 -1
- package/lib/Cli/commands/profile/flows.d.ts +6 -5
- package/lib/Cli/commands/profile/flows.d.ts.map +1 -1
- package/lib/Cli/commands/profile/flows.js +19 -17
- package/lib/Cli/commands/profile/flows.js.map +1 -1
- package/lib/Cli/commands/profile/hub.d.ts +1 -2
- package/lib/Cli/commands/profile/hub.d.ts.map +1 -1
- package/lib/Cli/commands/profile/hub.js +15 -17
- package/lib/Cli/commands/profile/hub.js.map +1 -1
- package/lib/Cli/commands/provider.d.ts +3 -1
- package/lib/Cli/commands/provider.d.ts.map +1 -1
- package/lib/Cli/commands/provider.js +4 -4
- package/lib/Cli/commands/provider.js.map +1 -1
- package/lib/Cli/commands/render.d.ts +2 -4
- package/lib/Cli/commands/render.d.ts.map +1 -1
- package/lib/Cli/commands/render.js +33 -56
- package/lib/Cli/commands/render.js.map +1 -1
- package/lib/Cli/commands/state.d.ts +1 -2
- package/lib/Cli/commands/state.d.ts.map +1 -1
- package/lib/Cli/commands/state.js +74 -27
- package/lib/Cli/commands/state.js.map +1 -1
- package/lib/Cli/components/capabilities.d.ts +4 -0
- package/lib/Cli/components/capabilities.d.ts.map +1 -0
- package/lib/Cli/components/capabilities.js +18 -0
- package/lib/Cli/components/capabilities.js.map +1 -0
- package/lib/Cli/components/types.d.ts +2 -81
- package/lib/Cli/components/types.d.ts.map +1 -1
- package/lib/Cli/components/types.js +1 -3
- package/lib/Cli/components/types.js.map +1 -1
- package/lib/Cli/components/ui/Environment.d.ts +3 -3
- package/lib/Cli/components/ui/Environment.d.ts.map +1 -1
- package/lib/Cli/components/ui/Environment.js.map +1 -1
- package/lib/Cli/components/ui/Interactive.d.ts +17 -4
- package/lib/Cli/components/ui/Interactive.d.ts.map +1 -1
- package/lib/Cli/components/ui/Interactive.js +7 -11
- package/lib/Cli/components/ui/Interactive.js.map +1 -1
- package/lib/Cli/components/ui/Layout.d.ts +1 -1
- package/lib/Cli/components/ui/Layout.d.ts.map +1 -1
- package/lib/Cli/components/ui/Layout.js +1 -1
- package/lib/Cli/components/ui/Layout.js.map +1 -1
- package/lib/Cli/components/ui/Typography.d.ts +1 -1
- package/lib/Cli/components/ui/Typography.d.ts.map +1 -1
- package/lib/Cli/components/ui/Typography.js +1 -1
- package/lib/Cli/components/ui/Typography.js.map +1 -1
- package/lib/Cli/components/ui/index.d.ts +2 -2
- package/lib/Cli/components/ui/index.js +2 -2
- package/lib/Cli/components/view/ApprovePlan.d.ts +1 -1
- package/lib/Cli/components/view/ApprovePlan.d.ts.map +1 -1
- package/lib/Cli/components/view/ApprovePlan.js +2 -1
- package/lib/Cli/components/view/ApprovePlan.js.map +1 -1
- package/lib/Cli/components/view/Format.d.ts +5 -0
- package/lib/Cli/components/view/Format.d.ts.map +1 -0
- package/lib/Cli/components/view/Format.js +39 -0
- package/lib/Cli/components/view/Format.js.map +1 -0
- package/lib/Cli/components/view/Help.d.ts +2 -2
- package/lib/Cli/components/view/Help.d.ts.map +1 -1
- package/lib/Cli/components/view/Help.js +7 -5
- package/lib/Cli/components/view/Help.js.map +1 -1
- package/lib/Cli/components/view/Logo.js +1 -1
- package/lib/Cli/components/view/Logo.js.map +1 -1
- package/lib/Cli/components/view/Nuke.d.ts +8 -9
- package/lib/Cli/components/view/Nuke.d.ts.map +1 -1
- package/lib/Cli/components/view/Nuke.js +49 -52
- package/lib/Cli/components/view/Nuke.js.map +1 -1
- package/lib/Cli/components/view/PlanDecision.d.ts +1 -1
- package/lib/Cli/components/view/PlanDecision.d.ts.map +1 -1
- package/lib/Cli/components/view/PlanDecision.js +1 -1
- package/lib/Cli/components/view/PlanDecision.js.map +1 -1
- package/lib/Cli/components/view/PlanRow.js +1 -1
- package/lib/Cli/components/view/PlanRow.js.map +1 -1
- package/lib/Cli/components/view/PlanTree.d.ts +1 -1
- package/lib/Cli/components/view/PlanTree.d.ts.map +1 -1
- package/lib/Cli/components/view/PlanTree.js +1 -1
- package/lib/Cli/components/view/PlanView.js +1 -1
- package/lib/Cli/components/view/PlanView.js.map +1 -1
- package/lib/Cli/components/view/Profile.d.ts +1 -1
- package/lib/Cli/components/view/Profile.js +2 -2
- package/lib/Cli/components/view/Profile.js.map +1 -1
- package/lib/Cli/components/view/ProfileDashboard.d.ts +4 -4
- package/lib/Cli/components/view/ProfileDashboard.d.ts.map +1 -1
- package/lib/Cli/components/view/ProfileDashboard.js +9 -8
- package/lib/Cli/components/view/ProfileDashboard.js.map +1 -1
- package/lib/Cli/components/view/Prompts.d.ts +3 -3
- package/lib/Cli/components/view/Prompts.d.ts.map +1 -1
- package/lib/Cli/components/view/Prompts.js +11 -18
- package/lib/Cli/components/view/Prompts.js.map +1 -1
- package/lib/Cli/components/view/Runtime.d.ts +5 -5
- package/lib/Cli/components/view/Runtime.d.ts.map +1 -1
- package/lib/Cli/components/view/Runtime.js +136 -219
- package/lib/Cli/components/view/Runtime.js.map +1 -1
- package/lib/Cli/components/view/SigilCli.d.ts +2 -2
- package/lib/Cli/components/view/SigilCli.d.ts.map +1 -1
- package/lib/Cli/components/view/SigilCli.js +7 -7
- package/lib/Cli/components/view/SigilCli.js.map +1 -1
- package/lib/Cli/components/view/StateExplorer.d.ts +1 -1
- package/lib/Cli/components/view/StateExplorer.d.ts.map +1 -1
- package/lib/Cli/components/view/StateExplorer.js +2 -1
- package/lib/Cli/components/view/StateExplorer.js.map +1 -1
- package/lib/Cli/components/view/statusStyle.d.ts +2 -2
- package/lib/Cli/components/view/statusStyle.d.ts.map +1 -1
- package/lib/Cli/components/view/statusStyle.js +1 -1
- package/lib/Cli/components/view/statusStyle.js.map +1 -1
- package/lib/Cli/exec.d.ts +6 -1
- package/lib/Cli/exec.d.ts.map +1 -1
- package/lib/Cli/exec.js +29 -34
- package/lib/Cli/exec.js.map +1 -1
- package/lib/Cli/main.d.ts.map +1 -1
- package/lib/Cli/main.js +35 -26
- package/lib/Cli/main.js.map +1 -1
- package/lib/Cli/selectCli.d.ts +2 -2
- package/lib/Cli/selectCli.d.ts.map +1 -1
- package/lib/Cli/selectCli.js +2 -2
- package/lib/Cli/selectCli.js.map +1 -1
- package/lib/Command/Command.js +1 -1
- package/lib/Command/Command.js.map +1 -1
- package/lib/Command/Dev.d.ts +58 -4
- package/lib/Command/Dev.d.ts.map +1 -1
- package/lib/Command/Dev.js +87 -30
- package/lib/Command/Dev.js.map +1 -1
- package/lib/Command/Local.d.ts +1 -1
- package/lib/Command/Memo.js +1 -1
- package/lib/Command/Memo.js.map +1 -1
- package/lib/Command/Providers.d.ts +1 -1
- package/lib/Command/Providers.d.ts.map +1 -1
- package/lib/Contributions.d.ts +2 -3
- package/lib/Contributions.d.ts.map +1 -1
- package/lib/Contributions.js +38 -6
- package/lib/Contributions.js.map +1 -1
- package/lib/DNS/Adapter.d.ts +204 -0
- package/lib/DNS/Adapter.d.ts.map +1 -0
- package/lib/DNS/Adapter.js +112 -0
- package/lib/DNS/Adapter.js.map +1 -0
- package/lib/DNS/index.d.ts +2 -0
- package/lib/DNS/index.d.ts.map +1 -0
- package/lib/DNS/index.js +2 -0
- package/lib/DNS/index.js.map +1 -0
- package/lib/Deploy.d.ts +7 -2
- package/lib/Deploy.d.ts.map +1 -1
- package/lib/Deploy.js +8 -3
- package/lib/Deploy.js.map +1 -1
- package/lib/Destroy.d.ts +5 -8
- package/lib/Destroy.d.ts.map +1 -1
- package/lib/Destroy.js +10 -7
- package/lib/Destroy.js.map +1 -1
- package/lib/Diff.d.ts.map +1 -1
- package/lib/Diff.js +14 -4
- package/lib/Diff.js.map +1 -1
- package/lib/Drift.d.ts +7 -7
- package/lib/Drift.d.ts.map +1 -1
- package/lib/Drift.js +184 -101
- package/lib/Drift.js.map +1 -1
- package/lib/EvalStack.d.ts +23 -0
- package/lib/EvalStack.d.ts.map +1 -0
- package/lib/EvalStack.js +47 -0
- package/lib/EvalStack.js.map +1 -0
- package/lib/Events.d.ts +210 -0
- package/lib/Events.d.ts.map +1 -0
- package/lib/Events.js +244 -0
- package/lib/Events.js.map +1 -0
- package/lib/Interaction.d.ts +159 -48
- package/lib/Interaction.d.ts.map +1 -1
- package/lib/Interaction.js +139 -58
- package/lib/Interaction.js.map +1 -1
- package/lib/Local/LocalProvider.d.ts.map +1 -1
- package/lib/Local/LocalProvider.js +31 -9
- package/lib/Local/LocalProvider.js.map +1 -1
- package/lib/Local/RpcProvider.d.ts.map +1 -1
- package/lib/Local/RpcProvider.js +10 -1
- package/lib/Local/RpcProvider.js.map +1 -1
- package/lib/Local/RpcProviderProxy.d.ts +16 -0
- package/lib/Local/RpcProviderProxy.d.ts.map +1 -1
- package/lib/Local/RpcProviderProxy.js +19 -10
- package/lib/Local/RpcProviderProxy.js.map +1 -1
- package/lib/Local/RpcSerialization.d.ts +3 -2
- package/lib/Local/RpcSerialization.d.ts.map +1 -1
- package/lib/Local/RpcSerialization.js +13 -10
- package/lib/Local/RpcSerialization.js.map +1 -1
- package/lib/Local/RpcServer.d.ts +2 -1
- package/lib/Local/RpcServer.d.ts.map +1 -1
- package/lib/Local/RpcServer.js +19 -14
- package/lib/Local/RpcServer.js.map +1 -1
- package/lib/Local/RpcServerBun.d.ts.map +1 -1
- package/lib/Local/RpcServerBun.js +8 -4
- package/lib/Local/RpcServerBun.js.map +1 -1
- package/lib/Local/RpcServerEnvironment.d.ts +2 -3
- package/lib/Local/RpcServerEnvironment.d.ts.map +1 -1
- package/lib/Local/RpcServerEnvironment.js +2 -2
- package/lib/Local/RpcServerEnvironment.js.map +1 -1
- package/lib/Local/RpcServerNode.d.ts.map +1 -1
- package/lib/Local/RpcServerNode.js +5 -1
- package/lib/Local/RpcServerNode.js.map +1 -1
- package/lib/Local/RpcServerSession.d.ts +1 -1
- package/lib/Local/RpcServerSession.d.ts.map +1 -1
- package/lib/Local/RpcServerSession.js.map +1 -1
- package/lib/Local/RpcSpawner.d.ts +6 -8
- package/lib/Local/RpcSpawner.d.ts.map +1 -1
- package/lib/Local/RpcSpawner.js +45 -36
- package/lib/Local/RpcSpawner.js.map +1 -1
- package/lib/Local/Sidecar.d.ts +23 -0
- package/lib/Local/Sidecar.d.ts.map +1 -1
- package/lib/Local/Sidecar.js +14 -9
- package/lib/Local/Sidecar.js.map +1 -1
- package/lib/Nuke.d.ts +5 -23
- package/lib/Nuke.d.ts.map +1 -1
- package/lib/Nuke.js +48 -13
- package/lib/Nuke.js.map +1 -1
- package/lib/Output.d.ts +19 -1
- package/lib/Output.d.ts.map +1 -1
- package/lib/Output.js +96 -3
- package/lib/Output.js.map +1 -1
- package/lib/Plan.d.ts +5 -1
- package/lib/Plan.d.ts.map +1 -1
- package/lib/Plan.js +111 -33
- package/lib/Plan.js.map +1 -1
- package/lib/Platform.d.ts.map +1 -1
- package/lib/Platform.js +31 -7
- package/lib/Platform.js.map +1 -1
- package/lib/Provider.d.ts +45 -0
- package/lib/Provider.d.ts.map +1 -1
- package/lib/Provider.js +2 -2
- package/lib/Provider.js.map +1 -1
- package/lib/Report.d.ts +17 -195
- package/lib/Report.d.ts.map +1 -1
- package/lib/Report.js +39 -12
- package/lib/Report.js.map +1 -1
- package/lib/Runtime/ManagedHttpShutdown.d.ts +17 -0
- package/lib/Runtime/ManagedHttpShutdown.d.ts.map +1 -1
- package/lib/Runtime/ManagedHttpShutdown.js +11 -2
- package/lib/Runtime/ManagedHttpShutdown.js.map +1 -1
- package/lib/RuntimeContext.js +1 -1
- package/lib/RuntimeContext.js.map +1 -1
- package/lib/Stack.d.ts +49 -29
- package/lib/Stack.d.ts.map +1 -1
- package/lib/Stack.js +25 -31
- package/lib/Stack.js.map +1 -1
- package/lib/State/BucketState.d.ts.map +1 -1
- package/lib/State/BucketState.js +43 -14
- package/lib/State/BucketState.js.map +1 -1
- package/lib/State/LocalState.d.ts.map +1 -1
- package/lib/State/LocalState.js +3 -3
- package/lib/State/LocalState.js.map +1 -1
- package/lib/State/Provisioning.d.ts +5 -0
- package/lib/State/Provisioning.d.ts.map +1 -1
- package/lib/State/Provisioning.js +3 -1
- package/lib/State/Provisioning.js.map +1 -1
- package/lib/State/ResourceState.d.ts +2 -0
- package/lib/State/ResourceState.d.ts.map +1 -1
- package/lib/State/State.d.ts +26 -0
- package/lib/State/State.d.ts.map +1 -1
- package/lib/State/StateEncoding.d.ts +7 -0
- package/lib/State/StateEncoding.d.ts.map +1 -1
- package/lib/State/StateEncoding.js +19 -0
- package/lib/State/StateEncoding.js.map +1 -1
- package/lib/State/index.js +2 -2
- package/lib/State/index.js.map +1 -1
- package/lib/Telemetry/Layer.d.ts +2 -5
- package/lib/Telemetry/Layer.d.ts.map +1 -1
- package/lib/Telemetry/Layer.js +3 -23
- package/lib/Telemetry/Layer.js.map +1 -1
- package/lib/Telemetry/Metrics.d.ts +1 -1
- package/lib/Telemetry/Metrics.d.ts.map +1 -1
- package/lib/TelemetryRelay.js +1 -1
- package/lib/TelemetryRelay.js.map +1 -1
- package/lib/TelemetryRuntime.d.ts +1 -1
- package/lib/TelemetryRuntime.d.ts.map +1 -1
- package/lib/TelemetryRuntime.js +4 -3
- package/lib/TelemetryRuntime.js.map +1 -1
- package/lib/Util/ConsoleSink.d.ts +23 -2
- package/lib/Util/ConsoleSink.d.ts.map +1 -1
- package/lib/Util/ConsoleSink.js +54 -14
- package/lib/Util/ConsoleSink.js.map +1 -1
- package/lib/Util/LogAnnotation.d.ts +19 -0
- package/lib/Util/LogAnnotation.d.ts.map +1 -0
- package/lib/Util/LogAnnotation.js +19 -0
- package/lib/Util/LogAnnotation.js.map +1 -0
- package/lib/Util/LogRecord.d.ts +281 -0
- package/lib/Util/LogRecord.d.ts.map +1 -0
- package/lib/Util/LogRecord.js +267 -0
- package/lib/Util/LogRecord.js.map +1 -0
- package/lib/Util/Node.d.ts +9 -0
- package/lib/Util/Node.d.ts.map +1 -1
- package/lib/Util/Node.js +10 -6
- package/lib/Util/Node.js.map +1 -1
- package/lib/Util/PlatformServices.d.ts +3 -2
- package/lib/Util/PlatformServices.d.ts.map +1 -1
- package/lib/Util/PlatformServices.js +6 -2
- package/lib/Util/PlatformServices.js.map +1 -1
- package/lib/Util/ResourceOutput.d.ts +18 -10
- package/lib/Util/ResourceOutput.d.ts.map +1 -1
- package/lib/Util/ResourceOutput.js +22 -23
- package/lib/Util/ResourceOutput.js.map +1 -1
- package/lib/Util/Shutdown.d.ts +10 -0
- package/lib/Util/Shutdown.d.ts.map +1 -0
- package/lib/Util/Shutdown.js +32 -0
- package/lib/Util/Shutdown.js.map +1 -0
- package/lib/Util/Terminal.d.ts +2 -4
- package/lib/Util/Terminal.d.ts.map +1 -1
- package/lib/Util/Terminal.js +3 -11
- package/lib/Util/Terminal.js.map +1 -1
- package/lib/Util/TraceParent.d.ts +32 -0
- package/lib/Util/TraceParent.d.ts.map +1 -0
- package/lib/Util/TraceParent.js +42 -0
- package/lib/Util/TraceParent.js.map +1 -0
- package/lib/Util/base64.d.ts +7 -0
- package/lib/Util/base64.d.ts.map +1 -0
- package/lib/Util/base64.js +24 -0
- package/lib/Util/base64.js.map +1 -0
- package/lib/Util/cached-function.d.ts +5 -0
- package/lib/Util/cached-function.d.ts.map +1 -1
- package/lib/Util/cached-function.js +13 -8
- package/lib/Util/cached-function.js.map +1 -1
- package/lib/Util/data.d.ts +1 -1
- package/lib/Util/data.d.ts.map +1 -1
- package/lib/Util/data.js +1 -1
- package/lib/Util/data.js.map +1 -1
- package/lib/Util/equal.d.ts.map +1 -1
- package/lib/Util/equal.js +3 -2
- package/lib/Util/equal.js.map +1 -1
- package/lib/Util/extraFiles.d.ts.map +1 -1
- package/lib/Util/extraFiles.js +5 -5
- package/lib/Util/extraFiles.js.map +1 -1
- package/lib/Util/interactive.js +1 -1
- package/lib/Website/AstroOutput.d.ts +42 -0
- package/lib/Website/AstroOutput.d.ts.map +1 -0
- package/lib/Website/AstroOutput.js +34 -0
- package/lib/Website/AstroOutput.js.map +1 -0
- package/lib/Website/FrontendCore.d.ts +1 -1
- package/lib/Workflows.d.ts +9 -0
- package/lib/Workflows.d.ts.map +1 -1
- package/lib/Workflows.js +8 -0
- package/lib/Workflows.js.map +1 -1
- 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/package.json +21 -28
- package/src/AdoptPolicy.ts +76 -0
- package/src/Alchemist/AuthRegistry.ts +164 -0
- package/src/Alchemist/Drift.ts +103 -0
- package/src/Alchemist/Entrypoint.ts +51 -3
- package/src/Alchemist/Errors.ts +1 -1
- package/src/Alchemist/{routes/logs.ts → Logs.ts} +28 -30
- package/src/Alchemist/Nuke.ts +90 -0
- package/src/Alchemist/Operations.ts +309 -0
- package/src/Alchemist/{routes/profile.ts → Profile.ts} +22 -22
- package/src/Alchemist/{routes/provider.ts → Provider.ts} +7 -6
- package/src/Alchemist/Runtime.ts +46 -12
- package/src/Alchemist/{routes/state.ts → State.ts} +78 -21
- package/src/Alchemist/index.ts +32 -15
- package/src/Apply.ts +513 -274
- package/src/Auth/AuthProvider.ts +76 -23
- package/src/Auth/BrowserOAuth.ts +37 -60
- package/src/Auth/Credentials.ts +2 -4
- package/src/Auth/Demand.ts +27 -18
- package/src/Auth/Env.ts +13 -8
- package/src/Auth/Inspect.ts +5 -2
- package/src/Auth/Lock.ts +4 -8
- package/src/Auth/OAuthFlow.ts +12 -26
- package/src/Auth/Paths.ts +3 -2
- package/src/Auth/Profile.ts +30 -2
- package/src/Auth/Registry.ts +27 -0
- package/src/Auth/Resolve.ts +75 -3
- package/src/Auth/StoredAuthProvider.ts +1 -2
- package/src/Binding.ts +3 -4
- package/src/Bundle/Bundle.ts +58 -7
- package/src/Bundle/NamespaceImportPlugin.ts +259 -0
- package/src/Bundle/index.ts +1 -0
- package/src/Cli/Format.ts +2 -1
- package/src/Cli/GlobalLog.ts +206 -68
- package/src/Cli/LoggingCli.ts +33 -20
- package/src/Cli/PlainCliFormatter.ts +4 -1
- package/src/Cli/Present.ts +34 -0
- package/src/Cli/SigilRenderer.ts +75 -0
- package/src/Cli/checkVersion.ts +25 -78
- package/src/Cli/commands/confirm.ts +3 -3
- package/src/Cli/commands/deploy.ts +53 -44
- package/src/Cli/commands/dev.ts +65 -7
- package/src/Cli/commands/drift.ts +20 -16
- package/src/Cli/commands/errors.ts +2 -3
- package/src/Cli/commands/instrument.ts +39 -8
- package/src/Cli/commands/logs.ts +22 -30
- package/src/Cli/commands/nuke.ts +25 -26
- package/src/Cli/commands/profile/commands.ts +34 -34
- package/src/Cli/commands/profile/flows.ts +26 -20
- package/src/Cli/commands/profile/hub.ts +16 -18
- package/src/Cli/commands/provider.ts +4 -4
- package/src/Cli/commands/render.ts +43 -71
- package/src/Cli/commands/state.ts +113 -33
- package/src/Cli/components/capabilities.ts +20 -0
- package/src/Cli/components/types.ts +13 -99
- package/src/Cli/components/ui/Environment.tsx +5 -5
- package/src/Cli/components/ui/Interactive.tsx +24 -15
- package/src/Cli/components/ui/Layout.tsx +1 -1
- package/src/Cli/components/ui/Typography.tsx +1 -1
- package/src/Cli/components/ui/index.ts +2 -2
- package/src/Cli/components/view/ApprovePlan.tsx +2 -1
- package/src/Cli/components/view/Format.tsx +58 -0
- package/src/Cli/components/view/Help.tsx +14 -17
- package/src/Cli/components/view/Logo.tsx +1 -1
- package/src/Cli/components/view/Nuke.tsx +74 -49
- package/src/Cli/components/view/PlanDecision.tsx +1 -1
- package/src/Cli/components/view/PlanRow.tsx +1 -1
- package/src/Cli/components/view/PlanTree.ts +2 -2
- package/src/Cli/components/view/PlanView.tsx +2 -2
- package/src/Cli/components/view/Profile.tsx +2 -2
- package/src/Cli/components/view/ProfileDashboard.tsx +12 -11
- package/src/Cli/components/view/Prompts.tsx +37 -75
- package/src/Cli/components/view/Runtime.tsx +132 -238
- package/src/Cli/components/view/SigilCli.tsx +12 -12
- package/src/Cli/components/view/StateExplorer.tsx +2 -1
- package/src/Cli/components/view/statusStyle.ts +2 -2
- package/src/Cli/exec.ts +48 -41
- package/src/Cli/main.ts +52 -33
- package/src/Cli/selectCli.ts +3 -3
- package/src/Command/Command.ts +1 -1
- package/src/Command/Dev.ts +129 -36
- package/src/Command/Memo.ts +1 -1
- package/src/Contributions.ts +42 -8
- package/src/DNS/Adapter.ts +289 -0
- package/src/DNS/index.ts +1 -0
- package/src/Deploy.ts +11 -3
- package/src/Destroy.ts +19 -13
- package/src/Diff.ts +17 -4
- package/src/Drift.ts +256 -127
- package/src/EvalStack.ts +97 -0
- package/src/Events.ts +296 -0
- package/src/Interaction.ts +332 -97
- package/src/Local/LocalProvider.ts +40 -9
- package/src/Local/RpcProvider.ts +11 -1
- package/src/Local/RpcProviderProxy.ts +29 -21
- package/src/Local/RpcSerialization.ts +32 -17
- package/src/Local/RpcServer.ts +25 -17
- package/src/Local/RpcServerBun.ts +10 -6
- package/src/Local/RpcServerEnvironment.ts +2 -2
- package/src/Local/RpcServerNode.ts +8 -1
- package/src/Local/RpcServerSession.ts +2 -2
- package/src/Local/RpcSpawner.ts +61 -37
- package/src/Local/Sidecar.ts +10 -1
- package/src/Nuke.ts +66 -43
- package/src/Output.ts +120 -7
- package/src/Plan.ts +140 -52
- package/src/Platform.ts +47 -18
- package/src/Provider.ts +48 -3
- package/src/Report.ts +77 -275
- package/src/Runtime/ManagedHttpShutdown.ts +21 -4
- package/src/RuntimeContext.ts +1 -1
- package/src/Stack.ts +113 -135
- package/src/State/BucketState.ts +53 -21
- package/src/State/LocalState.ts +7 -9
- package/src/State/Provisioning.ts +8 -1
- package/src/State/ResourceState.ts +2 -0
- package/src/State/State.ts +30 -0
- package/src/State/StateEncoding.ts +22 -0
- package/src/State/index.ts +2 -2
- package/src/Telemetry/Layer.ts +3 -24
- package/src/Telemetry/Metrics.ts +1 -1
- package/src/TelemetryRelay.ts +1 -1
- package/src/TelemetryRuntime.ts +8 -8
- package/src/Util/ConsoleSink.ts +76 -13
- package/src/Util/LogAnnotation.ts +18 -0
- package/src/Util/LogRecord.ts +386 -0
- package/src/Util/Node.ts +20 -6
- package/src/Util/PlatformServices.ts +17 -4
- package/src/Util/ResourceOutput.ts +26 -25
- package/src/Util/Shutdown.ts +52 -0
- package/src/Util/Terminal.ts +3 -20
- package/src/Util/TraceParent.ts +70 -0
- package/src/Util/base64.ts +22 -0
- package/src/Util/cached-function.ts +30 -19
- package/src/Util/data.ts +2 -2
- package/src/Util/equal.ts +3 -2
- package/src/Util/extraFiles.ts +9 -8
- package/src/Util/interactive.ts +1 -1
- package/src/Website/AstroOutput.ts +83 -0
- package/src/Workflows.ts +11 -0
- package/src/index.ts +1 -0
- package/lib/Alchemist/Progress.d.ts +0 -16
- package/lib/Alchemist/Progress.d.ts.map +0 -1
- package/lib/Alchemist/Progress.js +0 -123
- package/lib/Alchemist/Progress.js.map +0 -1
- package/lib/Alchemist/Session.d.ts +0 -116
- package/lib/Alchemist/Session.d.ts.map +0 -1
- package/lib/Alchemist/Session.js +0 -212
- package/lib/Alchemist/Session.js.map +0 -1
- package/lib/Alchemist/routes/drift.d.ts +0 -55
- package/lib/Alchemist/routes/drift.d.ts.map +0 -1
- package/lib/Alchemist/routes/drift.js +0 -52
- package/lib/Alchemist/routes/drift.js.map +0 -1
- package/lib/Alchemist/routes/logs.d.ts +0 -41
- package/lib/Alchemist/routes/logs.d.ts.map +0 -1
- package/lib/Alchemist/routes/logs.js.map +0 -1
- package/lib/Alchemist/routes/nuke.d.ts +0 -46
- package/lib/Alchemist/routes/nuke.d.ts.map +0 -1
- package/lib/Alchemist/routes/nuke.js +0 -80
- package/lib/Alchemist/routes/nuke.js.map +0 -1
- package/lib/Alchemist/routes/profile.d.ts +0 -133
- package/lib/Alchemist/routes/profile.d.ts.map +0 -1
- package/lib/Alchemist/routes/profile.js.map +0 -1
- package/lib/Alchemist/routes/provider.d.ts.map +0 -1
- package/lib/Alchemist/routes/provider.js.map +0 -1
- package/lib/Alchemist/routes/stack.d.ts +0 -95
- package/lib/Alchemist/routes/stack.d.ts.map +0 -1
- package/lib/Alchemist/routes/stack.js +0 -73
- package/lib/Alchemist/routes/stack.js.map +0 -1
- package/lib/Alchemist/routes/state.d.ts.map +0 -1
- package/lib/Alchemist/routes/state.js.map +0 -1
- package/lib/Cli/CliKit/CliKit.d.ts +0 -92
- package/lib/Cli/CliKit/CliKit.d.ts.map +0 -1
- package/lib/Cli/CliKit/CliKit.js +0 -27
- package/lib/Cli/CliKit/CliKit.js.map +0 -1
- package/lib/Cli/CliKit/index.d.ts +0 -9
- package/lib/Cli/CliKit/index.d.ts.map +0 -1
- package/lib/Cli/CliKit/index.js +0 -9
- package/lib/Cli/CliKit/index.js.map +0 -1
- package/lib/Cli/CliKit/interaction.d.ts +0 -13
- package/lib/Cli/CliKit/interaction.d.ts.map +0 -1
- package/lib/Cli/CliKit/interaction.js +0 -17
- package/lib/Cli/CliKit/interaction.js.map +0 -1
- package/lib/Cli/CliKit/layer.d.ts +0 -7
- package/lib/Cli/CliKit/layer.d.ts.map +0 -1
- package/lib/Cli/CliKit/layer.js +0 -33
- package/lib/Cli/CliKit/layer.js.map +0 -1
- package/lib/Local/DevLog.d.ts +0 -32
- package/lib/Local/DevLog.d.ts.map +0 -1
- package/lib/Local/DevLog.js +0 -112
- package/lib/Local/DevLog.js.map +0 -1
- package/lib/Test/Alchemy.d.ts +0 -79
- package/lib/Test/Alchemy.d.ts.map +0 -1
- package/lib/Test/Alchemy.js +0 -193
- package/lib/Test/Alchemy.js.map +0 -1
- package/lib/Test/Bun.d.ts +0 -69
- package/lib/Test/Bun.d.ts.map +0 -1
- package/lib/Test/Bun.js +0 -126
- package/lib/Test/Bun.js.map +0 -1
- package/lib/Test/Core.d.ts +0 -277
- package/lib/Test/Core.d.ts.map +0 -1
- package/lib/Test/Core.js +0 -362
- package/lib/Test/Core.js.map +0 -1
- package/lib/Test/Http.d.ts +0 -109
- package/lib/Test/Http.d.ts.map +0 -1
- package/lib/Test/Http.js +0 -123
- package/lib/Test/Http.js.map +0 -1
- package/lib/Test/TestState.d.ts +0 -12
- package/lib/Test/TestState.d.ts.map +0 -1
- package/lib/Test/TestState.js +0 -15
- package/lib/Test/TestState.js.map +0 -1
- package/lib/Test/Vitest.d.ts +0 -60
- package/lib/Test/Vitest.d.ts.map +0 -1
- package/lib/Test/Vitest.js +0 -132
- package/lib/Test/Vitest.js.map +0 -1
- package/lib/Test/index.d.ts +0 -3
- package/lib/Test/index.d.ts.map +0 -1
- package/lib/Test/index.js +0 -3
- package/lib/Test/index.js.map +0 -1
- package/lib/Util/FileLogger.d.ts +0 -7
- package/lib/Util/FileLogger.d.ts.map +0 -1
- package/lib/Util/FileLogger.js +0 -16
- package/lib/Util/FileLogger.js.map +0 -1
- package/src/Alchemist/Progress.ts +0 -167
- package/src/Alchemist/Session.ts +0 -415
- package/src/Alchemist/routes/drift.ts +0 -87
- package/src/Alchemist/routes/nuke.ts +0 -131
- package/src/Alchemist/routes/stack.ts +0 -173
- package/src/Cli/CliKit/CliKit.ts +0 -159
- package/src/Cli/CliKit/index.ts +0 -41
- package/src/Cli/CliKit/interaction.ts +0 -19
- package/src/Cli/CliKit/layer.ts +0 -44
- package/src/Local/DevLog.ts +0 -122
- package/src/Test/Alchemy.ts +0 -334
- package/src/Test/Bun.ts +0 -230
- package/src/Test/Core.ts +0 -785
- package/src/Test/Http.ts +0 -201
- package/src/Test/TestState.ts +0 -35
- package/src/Test/Vitest.ts +0 -239
- package/src/Test/index.ts +0 -2
- package/src/Util/FileLogger.ts +0 -20
|
@@ -1,27 +1,28 @@
|
|
|
1
1
|
/** @jsxRuntime automatic */
|
|
2
2
|
/** @jsxImportSource @alchemy.run/sigil */
|
|
3
|
-
import {
|
|
4
|
-
import { AnsiText, Box, render, renderToString, Static, useTitle } from "@alchemy.run/sigil";
|
|
3
|
+
import { AnsiText, Box, render, Static, useTitle } from "@alchemy.run/sigil";
|
|
5
4
|
import { useSyncExternalStore } from "@alchemy.run/sigil/react";
|
|
6
|
-
import * as Cause from "effect/Cause";
|
|
7
5
|
import * as Context from "effect/Context";
|
|
8
6
|
import * as Effect from "effect/Effect";
|
|
9
|
-
import
|
|
7
|
+
import type { ChildProcessSpawner } from "effect/process/ChildProcessSpawner";
|
|
10
8
|
import type * as Scope from "effect/Scope";
|
|
11
9
|
import * as Semaphore from "effect/Semaphore";
|
|
12
10
|
import type { ReactNode } from "react";
|
|
13
|
-
import {
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
import {
|
|
12
|
+
type BrowserLoginOptions,
|
|
13
|
+
type Interaction,
|
|
14
|
+
type NonInteractiveTerminal,
|
|
15
|
+
openUrl,
|
|
16
|
+
type SessionOptions,
|
|
17
|
+
TerminalCancelled,
|
|
18
|
+
taskFromProgress,
|
|
19
|
+
} from "../../../Interaction.ts";
|
|
16
20
|
import type {
|
|
17
21
|
ProgressHandle,
|
|
18
22
|
ProgressOptions,
|
|
19
|
-
RenderOptions,
|
|
20
23
|
Screen,
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
CliKitOptions,
|
|
24
|
-
InteractionError,
|
|
24
|
+
TerminalCapabilities,
|
|
25
|
+
TerminalOptions,
|
|
25
26
|
LiveViewHandle,
|
|
26
27
|
LiveViewOptions,
|
|
27
28
|
View,
|
|
@@ -31,19 +32,17 @@ import { Spinner, Status } from "../ui/Feedback.tsx";
|
|
|
31
32
|
import { useTerminalInput } from "../ui/Interactive.tsx";
|
|
32
33
|
import { LiveStore, useLiveStore } from "../ui/Live.tsx";
|
|
33
34
|
import { CancelledPrompt } from "../ui/Transcript.tsx";
|
|
34
|
-
import {
|
|
35
|
+
import { formatView, normalizeView } from "./Format.tsx";
|
|
35
36
|
import {
|
|
36
37
|
confirmScreen,
|
|
37
|
-
|
|
38
|
-
awaitExternalScreen,
|
|
39
|
-
menuScreen,
|
|
38
|
+
browserLoginScreen,
|
|
40
39
|
multiSelectScreen,
|
|
41
40
|
passwordScreen,
|
|
42
41
|
selectScreen,
|
|
43
42
|
textScreen,
|
|
44
43
|
} from "./Prompts.tsx";
|
|
45
44
|
|
|
46
|
-
const
|
|
45
|
+
const InSession = Context.Reference<boolean>("Alchemy::Interaction/InSession", {
|
|
47
46
|
defaultValue: () => false,
|
|
48
47
|
});
|
|
49
48
|
|
|
@@ -58,54 +57,6 @@ interface Item {
|
|
|
58
57
|
readonly placement?: LiveViewOptions["placement"];
|
|
59
58
|
}
|
|
60
59
|
|
|
61
|
-
const normalizeView = (view: View): View => {
|
|
62
|
-
if (typeof view === "string" || typeof view === "number" || typeof view === "bigint") {
|
|
63
|
-
return <Text>{String(view)}</Text>;
|
|
64
|
-
}
|
|
65
|
-
// Contract: an array of primitives renders as ONE Text line with the
|
|
66
|
-
// elements concatenated (no separator) — matching how React renders
|
|
67
|
-
// adjacent text children. Callers wanting separators must join themselves.
|
|
68
|
-
if (
|
|
69
|
-
Array.isArray(view) &&
|
|
70
|
-
view.every(
|
|
71
|
-
(item) =>
|
|
72
|
-
item === null ||
|
|
73
|
-
item === undefined ||
|
|
74
|
-
typeof item === "boolean" ||
|
|
75
|
-
typeof item === "string" ||
|
|
76
|
-
typeof item === "number" ||
|
|
77
|
-
typeof item === "bigint",
|
|
78
|
-
)
|
|
79
|
-
) {
|
|
80
|
-
return (
|
|
81
|
-
<Text>
|
|
82
|
-
{view
|
|
83
|
-
.filter((item) => item !== null && item !== undefined && typeof item !== "boolean")
|
|
84
|
-
.map(String)
|
|
85
|
-
.join("")}
|
|
86
|
-
</Text>
|
|
87
|
-
);
|
|
88
|
-
}
|
|
89
|
-
return view;
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
const formatStaticView = (
|
|
93
|
-
view: ReactNode,
|
|
94
|
-
options: RenderOptions,
|
|
95
|
-
capabilities: CliKitCapabilities,
|
|
96
|
-
): string => {
|
|
97
|
-
const colors = options.colors ?? capabilities.colors;
|
|
98
|
-
// The renderer and the components must agree on the width: components size
|
|
99
|
-
// themselves from the environment's `columns`, so an explicit render width
|
|
100
|
-
// has to flow into the capabilities too, not only into renderToString.
|
|
101
|
-
const columns = options.columns ?? capabilities.columns;
|
|
102
|
-
const output = renderToString(
|
|
103
|
-
<CliEnvironment capabilities={{ ...capabilities, colors, columns }}>{view}</CliEnvironment>,
|
|
104
|
-
{ columns, colorProfile: colors ? "truecolor" : "none" },
|
|
105
|
-
).replace(/[\s\n]+$/, "");
|
|
106
|
-
return colors ? output : stripVTControlCharacters(output);
|
|
107
|
-
};
|
|
108
|
-
|
|
109
60
|
interface StoreState {
|
|
110
61
|
readonly staticItems: Item[];
|
|
111
62
|
readonly transcript: ReadonlyArray<Item>;
|
|
@@ -115,7 +66,7 @@ interface StoreState {
|
|
|
115
66
|
|
|
116
67
|
/**
|
|
117
68
|
* The single external store the React root syncs from. It only tracks WHICH
|
|
118
|
-
* blocks are mounted and in what region (static scrollback, in-
|
|
69
|
+
* blocks are mounted and in what region (static scrollback, in-session
|
|
119
70
|
* transcript, live region, active prompt) — block content never changes
|
|
120
71
|
* after mount, so there is no update surface here.
|
|
121
72
|
*/
|
|
@@ -284,15 +235,15 @@ function ProgressView({ store }: ProgressViewProps) {
|
|
|
284
235
|
);
|
|
285
236
|
}
|
|
286
237
|
|
|
287
|
-
export interface
|
|
288
|
-
readonly service:
|
|
238
|
+
export interface SigilRuntime {
|
|
239
|
+
readonly service: Interaction["Service"];
|
|
289
240
|
readonly dispose: () => Promise<void>;
|
|
290
241
|
}
|
|
291
242
|
|
|
292
243
|
export const makeRuntime = (
|
|
293
|
-
options:
|
|
294
|
-
capabilities:
|
|
295
|
-
):
|
|
244
|
+
options: TerminalOptions,
|
|
245
|
+
capabilities: TerminalCapabilities,
|
|
246
|
+
): SigilRuntime => {
|
|
296
247
|
const stdin = options.stdin ?? process.stdin;
|
|
297
248
|
const stdout = options.stdout ?? process.stdout;
|
|
298
249
|
const stderr = options.stderr ?? process.stderr;
|
|
@@ -316,12 +267,12 @@ export const makeRuntime = (
|
|
|
316
267
|
// Lifecycle state. `mounted` and `unmounting` deliberately overlap: during
|
|
317
268
|
// teardown the instance stays in `mounted` until re-validation passes, so
|
|
318
269
|
// prints/live views racing the drain still see a live renderer (and can
|
|
319
|
-
// abort the teardown). `
|
|
320
|
-
// `
|
|
270
|
+
// abort the teardown). `sessionMounted` is an orthogonal axis — an
|
|
271
|
+
// `session()` region pins the renderer regardless of store idleness — and
|
|
321
272
|
// `disposed` is a terminal one-way latch.
|
|
322
273
|
let mounted: Mounted | undefined;
|
|
323
274
|
let unmounting: Promise<void> | undefined;
|
|
324
|
-
let
|
|
275
|
+
let sessionMounted = false;
|
|
325
276
|
let disposed = false;
|
|
326
277
|
/**
|
|
327
278
|
* Fails the active interaction when a screen component throws during
|
|
@@ -337,7 +288,7 @@ export const makeRuntime = (
|
|
|
337
288
|
*/
|
|
338
289
|
const failRenderer = (error: unknown) => {
|
|
339
290
|
if (failActive !== undefined) failActive(error);
|
|
340
|
-
else stderr.write(`
|
|
291
|
+
else stderr.write(`Sigil renderer error: ${String(error)}\n`);
|
|
341
292
|
};
|
|
342
293
|
|
|
343
294
|
const mount = async (alternateScreen = false): Promise<void> => {
|
|
@@ -485,7 +436,7 @@ export const makeRuntime = (
|
|
|
485
436
|
// Re-validate: a prompt or live view may have re-armed the renderer
|
|
486
437
|
// while the frame flushed. Their output would be destroyed by the
|
|
487
438
|
// teardown, so leave the instance mounted for them instead.
|
|
488
|
-
if (!force && (
|
|
439
|
+
if (!force && (sessionMounted || !store.idle)) return;
|
|
489
440
|
// A captured chunk that arrived DURING the drain may have parked a
|
|
490
441
|
// partial line and armed a flush timer. Flush and disarm now —
|
|
491
442
|
// otherwise the timer fires after `clearStatic()` below and the
|
|
@@ -519,30 +470,24 @@ export const makeRuntime = (
|
|
|
519
470
|
|
|
520
471
|
const releaseIfIdle = () =>
|
|
521
472
|
Effect.suspend(() =>
|
|
522
|
-
|
|
473
|
+
sessionMounted || !store.idle ? Effect.void : Effect.promise(() => unmount()),
|
|
523
474
|
);
|
|
524
475
|
|
|
525
|
-
const
|
|
526
|
-
formatStaticView(normalizeView(view), renderOptions, {
|
|
527
|
-
...capabilities,
|
|
528
|
-
// Re-read the width at render time — the boot-time snapshot goes stale
|
|
529
|
-
// the moment the user resizes the terminal.
|
|
530
|
-
columns: stdout.columns ?? capabilities.columns,
|
|
531
|
-
});
|
|
532
|
-
|
|
533
|
-
const renderView = (view: View, renderOptions: RenderOptions = {}) =>
|
|
534
|
-
Effect.sync(() => formatView(view, renderOptions));
|
|
535
|
-
|
|
536
|
-
const print = (view: View, renderOptions: RenderOptions = {}) =>
|
|
476
|
+
const print = (view: View) =>
|
|
537
477
|
Effect.gen(function* () {
|
|
538
|
-
const
|
|
478
|
+
const inSession = yield* InSession;
|
|
539
479
|
view = normalizeView(view);
|
|
540
|
-
if (
|
|
480
|
+
if (inSession) {
|
|
541
481
|
yield* Effect.sync(() => store.append(view));
|
|
542
482
|
} else if (mounted !== undefined) {
|
|
543
483
|
yield* Effect.sync(() => store.appendStatic(view));
|
|
544
484
|
} else {
|
|
545
|
-
const output =
|
|
485
|
+
const output = formatView(view, {
|
|
486
|
+
...capabilities,
|
|
487
|
+
// Re-read the width at render time — the boot-time snapshot goes
|
|
488
|
+
// stale the moment the user resizes the terminal.
|
|
489
|
+
columns: stdout.columns ?? capabilities.columns,
|
|
490
|
+
});
|
|
546
491
|
if (output !== "") yield* Effect.sync(() => stdout.write(`${output}\n`));
|
|
547
492
|
}
|
|
548
493
|
});
|
|
@@ -561,17 +506,9 @@ export const makeRuntime = (
|
|
|
561
506
|
);
|
|
562
507
|
};
|
|
563
508
|
|
|
564
|
-
const run = <Value,>(screen: Screen<Value>) =>
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
new NonInteractiveTerminal({
|
|
568
|
-
operation: screen.name,
|
|
569
|
-
message: `Cannot run ${screen.name} without an interactive terminal. Provide the equivalent command flags instead.`,
|
|
570
|
-
}),
|
|
571
|
-
);
|
|
572
|
-
}
|
|
573
|
-
return Effect.gen(function* () {
|
|
574
|
-
const inApplication = yield* InApplication;
|
|
509
|
+
const run = <Value,>(screen: Screen<Value>) =>
|
|
510
|
+
Effect.gen(function* () {
|
|
511
|
+
const inSession = yield* InSession;
|
|
575
512
|
const interaction = promptGate.withPermits(1)(
|
|
576
513
|
Effect.gen(function* () {
|
|
577
514
|
let completedView: View | undefined;
|
|
@@ -583,7 +520,7 @@ export const makeRuntime = (
|
|
|
583
520
|
failActive = undefined;
|
|
584
521
|
store.deactivate();
|
|
585
522
|
if (resultView !== undefined) {
|
|
586
|
-
if (
|
|
523
|
+
if (inSession) store.append(normalizeView(resultView));
|
|
587
524
|
else completedView = resultView;
|
|
588
525
|
}
|
|
589
526
|
resume(result);
|
|
@@ -623,7 +560,7 @@ export const makeRuntime = (
|
|
|
623
560
|
}).pipe(
|
|
624
561
|
Effect.ensuring(
|
|
625
562
|
Effect.suspend(() =>
|
|
626
|
-
|
|
563
|
+
inSession
|
|
627
564
|
? Effect.void
|
|
628
565
|
: releaseIfIdle().pipe(
|
|
629
566
|
Effect.andThen(
|
|
@@ -635,82 +572,58 @@ export const makeRuntime = (
|
|
|
635
572
|
);
|
|
636
573
|
}),
|
|
637
574
|
);
|
|
638
|
-
return yield*
|
|
639
|
-
});
|
|
640
|
-
};
|
|
641
|
-
|
|
642
|
-
const menu = <Value,>(options: MenuOptions<Value>): Effect.Effect<Value, InteractionError> =>
|
|
643
|
-
Effect.gen(function* () {
|
|
644
|
-
if (yield* InApplication) yield* Effect.sync(() => store.clear());
|
|
645
|
-
return yield* run(menuScreen(options));
|
|
575
|
+
return yield* inSession ? interaction : rendererGate.withPermits(1)(interaction);
|
|
646
576
|
});
|
|
647
577
|
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
new NonInteractiveTerminal({
|
|
654
|
-
operation: "application",
|
|
655
|
-
message:
|
|
656
|
-
"Cannot run a CLI application without terminal input. Provide the equivalent command flags instead.",
|
|
657
|
-
}),
|
|
658
|
-
)
|
|
659
|
-
: Effect.gen(function* () {
|
|
660
|
-
if (yield* InApplication) return yield* effect;
|
|
661
|
-
const presentation = yield* ApplicationPresentation;
|
|
662
|
-
const alternate = presentation === "alternate" && capabilities.alternateScreen;
|
|
663
|
-
return yield* rendererGate.withPermits(1)(
|
|
664
|
-
Effect.acquireUseRelease(
|
|
665
|
-
Effect.promise(async () => {
|
|
666
|
-
applicationMounted = true;
|
|
667
|
-
store.clear();
|
|
668
|
-
// Sigil cannot change `alternateScreen` on a live instance: if
|
|
669
|
-
// an inline renderer (say an earlier progress row) is still
|
|
670
|
-
// mounted with the wrong presentation, remount with the
|
|
671
|
-
// requested one instead of silently ignoring it.
|
|
672
|
-
if (mounted !== undefined && mounted.alternate !== alternate) {
|
|
673
|
-
await unmount(true);
|
|
674
|
-
}
|
|
675
|
-
await mount(alternate);
|
|
676
|
-
}),
|
|
677
|
-
() => effect.pipe(Effect.provideService(InApplication, true)),
|
|
678
|
-
() =>
|
|
679
|
-
Effect.promise(async () => {
|
|
680
|
-
applicationMounted = false;
|
|
681
|
-
store.clear();
|
|
682
|
-
// Let the empty frame replace the application, then erase
|
|
683
|
-
// that frame explicitly. Unmount can now restore terminal
|
|
684
|
-
// modes without leaving the empty frame's newline behind.
|
|
685
|
-
const current = mounted;
|
|
686
|
-
if (current !== undefined) {
|
|
687
|
-
await current.sigil.waitUntilRenderFlush();
|
|
688
|
-
current.sigil.clear();
|
|
689
|
-
}
|
|
690
|
-
await unmount();
|
|
691
|
-
}),
|
|
692
|
-
),
|
|
693
|
-
);
|
|
694
|
-
});
|
|
695
|
-
|
|
696
|
-
// A wizard owns the renderer when invoked standalone and reuses the
|
|
697
|
-
// current application renderer when nested. Prompt serialization remains
|
|
698
|
-
// centralized in `run`, so nested profile/OAuth flows suspend cleanly.
|
|
699
|
-
const wizard = <A, E, R>(
|
|
578
|
+
// A session owns the renderer when invoked standalone. Nested, it reuses
|
|
579
|
+
// the outer renderer and clears the prompts it showed when it settles, so
|
|
580
|
+
// nested profile/OAuth flows suspend cleanly. Prompt serialization remains
|
|
581
|
+
// centralized in `run`.
|
|
582
|
+
const session = <A, E, R>(
|
|
700
583
|
effect: Effect.Effect<A, E, R>,
|
|
584
|
+
sessionOptions: SessionOptions = {},
|
|
701
585
|
): Effect.Effect<A, E | NonInteractiveTerminal, R> =>
|
|
702
586
|
Effect.gen(function* () {
|
|
703
|
-
if (
|
|
704
|
-
|
|
587
|
+
if (yield* InSession) {
|
|
588
|
+
return yield* effect.pipe(Effect.ensuring(Effect.sync(() => store.clearTranscript())));
|
|
589
|
+
}
|
|
590
|
+
const alternate = sessionOptions.alternate === true && capabilities.alternateScreen;
|
|
591
|
+
return yield* rendererGate.withPermits(1)(
|
|
592
|
+
Effect.acquireUseRelease(
|
|
593
|
+
Effect.promise(async () => {
|
|
594
|
+
sessionMounted = true;
|
|
595
|
+
store.clear();
|
|
596
|
+
// Sigil cannot change `alternateScreen` on a live instance: if
|
|
597
|
+
// an inline renderer (say an earlier progress row) is still
|
|
598
|
+
// mounted with the wrong presentation, remount with the
|
|
599
|
+
// requested one instead of silently ignoring it.
|
|
600
|
+
if (mounted !== undefined && mounted.alternate !== alternate) {
|
|
601
|
+
await unmount(true);
|
|
602
|
+
}
|
|
603
|
+
await mount(alternate);
|
|
604
|
+
}),
|
|
605
|
+
() => effect.pipe(Effect.provideService(InSession, true)),
|
|
606
|
+
() =>
|
|
607
|
+
Effect.promise(async () => {
|
|
608
|
+
sessionMounted = false;
|
|
609
|
+
store.clear();
|
|
610
|
+
// Let the empty frame replace the session, then erase
|
|
611
|
+
// that frame explicitly. Unmount can now restore terminal
|
|
612
|
+
// modes without leaving the empty frame's newline behind.
|
|
613
|
+
const current = mounted;
|
|
614
|
+
if (current !== undefined) {
|
|
615
|
+
await current.sigil.waitUntilRenderFlush();
|
|
616
|
+
current.sigil.clear();
|
|
617
|
+
}
|
|
618
|
+
await unmount();
|
|
619
|
+
}),
|
|
620
|
+
),
|
|
621
|
+
);
|
|
705
622
|
});
|
|
706
623
|
|
|
707
624
|
const makeLive = (initial: View, options: LiveViewOptions = {}): Effect.Effect<LiveViewHandle> =>
|
|
708
625
|
Effect.gen(function* () {
|
|
709
|
-
|
|
710
|
-
yield* print(initial);
|
|
711
|
-
return { close: Effect.void };
|
|
712
|
-
}
|
|
713
|
-
const inApplication = yield* InApplication;
|
|
626
|
+
const inSession = yield* InSession;
|
|
714
627
|
const key = store.alloc();
|
|
715
628
|
let closed = false;
|
|
716
629
|
yield* Effect.sync(() => store.addLive(key, normalizeView(initial), options.placement));
|
|
@@ -720,9 +633,9 @@ export const makeRuntime = (
|
|
|
720
633
|
if (closed) return Effect.void;
|
|
721
634
|
closed = true;
|
|
722
635
|
// removeLive/completeLive no-op when the row was already cleared
|
|
723
|
-
// by a
|
|
636
|
+
// by a session boundary.
|
|
724
637
|
if (options.persistOnClose)
|
|
725
|
-
store.completeLive(key,
|
|
638
|
+
store.completeLive(key, inSession ? "transcript" : "staticItems");
|
|
726
639
|
else store.removeLive(key);
|
|
727
640
|
return Effect.promise(waitForRender).pipe(Effect.andThen(releaseIfIdle()));
|
|
728
641
|
}),
|
|
@@ -747,34 +660,7 @@ export const makeRuntime = (
|
|
|
747
660
|
*/
|
|
748
661
|
const makeProgress = (initial: ProgressOptions): Effect.Effect<ProgressHandle> =>
|
|
749
662
|
Effect.gen(function* () {
|
|
750
|
-
const
|
|
751
|
-
if (!dynamic) {
|
|
752
|
-
let current = initial;
|
|
753
|
-
let closed = false;
|
|
754
|
-
yield* print(
|
|
755
|
-
<Status variant="info" detail={initial.detail}>
|
|
756
|
-
{initial.label}
|
|
757
|
-
</Status>,
|
|
758
|
-
);
|
|
759
|
-
const settle = (variant: "success" | "error", message?: string) =>
|
|
760
|
-
Effect.suspend(() => {
|
|
761
|
-
if (closed) return Effect.void;
|
|
762
|
-
closed = true;
|
|
763
|
-
return print(<Status variant={variant}>{message ?? current.label}</Status>);
|
|
764
|
-
});
|
|
765
|
-
return {
|
|
766
|
-
update: (next) =>
|
|
767
|
-
Effect.sync(() => {
|
|
768
|
-
if (!closed) current = next;
|
|
769
|
-
}),
|
|
770
|
-
succeed: (message) => settle("success", message),
|
|
771
|
-
fail: (message) => settle("error", message),
|
|
772
|
-
close: Effect.sync(() => {
|
|
773
|
-
closed = true;
|
|
774
|
-
}),
|
|
775
|
-
} satisfies ProgressHandle;
|
|
776
|
-
}
|
|
777
|
-
const inApplication = yield* InApplication;
|
|
663
|
+
const inSession = yield* InSession;
|
|
778
664
|
const progressStore = new LiveStore<ProgressState>({ options: initial });
|
|
779
665
|
const key = store.alloc();
|
|
780
666
|
yield* Effect.sync(() => store.addLive(key, <ProgressView store={progressStore} />));
|
|
@@ -785,8 +671,8 @@ export const makeRuntime = (
|
|
|
785
671
|
if (settled) return Effect.void;
|
|
786
672
|
settled = true;
|
|
787
673
|
// completeLive/removeLive no-op when the row was already cleared
|
|
788
|
-
// by a
|
|
789
|
-
if (persist) store.completeLive(key,
|
|
674
|
+
// by a session boundary.
|
|
675
|
+
if (persist) store.completeLive(key, inSession ? "transcript" : "staticItems");
|
|
790
676
|
else store.removeLive(key);
|
|
791
677
|
return Effect.promise(waitForRender).pipe(Effect.andThen(releaseIfIdle()));
|
|
792
678
|
});
|
|
@@ -811,19 +697,45 @@ export const makeRuntime = (
|
|
|
811
697
|
const progress = (initial: ProgressOptions): Effect.Effect<ProgressHandle, never, Scope.Scope> =>
|
|
812
698
|
Effect.acquireRelease(makeProgress(initial), (handle) => handle.close);
|
|
813
699
|
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
700
|
+
/**
|
|
701
|
+
* The login screen races `waitFor`: the poll or callback normally wins,
|
|
702
|
+
* the screen only settles first when the user cancels or pastes a code.
|
|
703
|
+
*/
|
|
704
|
+
const browserLogin = <A, E, R, E2 = never, R2 = never>(
|
|
705
|
+
login: BrowserLoginOptions<A, E, R, E2, R2>,
|
|
706
|
+
) =>
|
|
707
|
+
Effect.gen(function* () {
|
|
708
|
+
const services = yield* Effect.context<ChildProcessSpawner>();
|
|
709
|
+
// Invoked later by the screen's keyboard handler, outside this fiber.
|
|
710
|
+
const reopen = () => Effect.runPromiseWith(services)(openUrl(login.url));
|
|
711
|
+
const openFailed = yield* Effect.isFailure(openUrl(login.url));
|
|
712
|
+
const manual = login.manualCode;
|
|
713
|
+
const screen = run(
|
|
714
|
+
browserLoginScreen({
|
|
715
|
+
message: `${login.provider} authorization`,
|
|
716
|
+
waitingLabel:
|
|
717
|
+
login.waitingLabel ?? "waiting for browser authorization (up to 5 minutes)…",
|
|
718
|
+
url: login.url,
|
|
719
|
+
code: login.code,
|
|
720
|
+
openFailed,
|
|
721
|
+
onOpen: reopen,
|
|
722
|
+
allowManualInput: manual !== undefined,
|
|
723
|
+
inputLabel: manual?.label ?? "Paste the authorization code or callback URL",
|
|
724
|
+
placeholder: manual?.placeholder,
|
|
725
|
+
validate: manual?.validate,
|
|
821
726
|
}),
|
|
822
|
-
|
|
727
|
+
).pipe(
|
|
728
|
+
Effect.flatMap((code): Effect.Effect<A, E2, R2> =>
|
|
729
|
+
manual === undefined ? Effect.never : manual.exchange(code),
|
|
730
|
+
),
|
|
731
|
+
);
|
|
732
|
+
return yield* Effect.raceFirst(login.waitFor, screen);
|
|
733
|
+
});
|
|
734
|
+
|
|
735
|
+
const service: Interaction["Service"] = {
|
|
736
|
+
terminal: capabilities,
|
|
823
737
|
output: {
|
|
824
738
|
print,
|
|
825
|
-
format: formatView,
|
|
826
|
-
render: renderView,
|
|
827
739
|
info: log("info"),
|
|
828
740
|
success: log("success"),
|
|
829
741
|
warning: log("warning"),
|
|
@@ -835,31 +747,13 @@ export const makeRuntime = (
|
|
|
835
747
|
confirm: (confirmOptions) => run(confirmScreen(confirmOptions)),
|
|
836
748
|
select: (selectOptions) => run(selectScreen(selectOptions)),
|
|
837
749
|
multiSelect: (selectOptions) => run(multiSelectScreen(selectOptions)),
|
|
838
|
-
|
|
839
|
-
awaitExternal: (externalOptions) => run(awaitExternalScreen(externalOptions)),
|
|
840
|
-
menu,
|
|
841
|
-
custom: run,
|
|
750
|
+
screen: run,
|
|
842
751
|
},
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
task: (
|
|
847
|
-
|
|
848
|
-
Effect.gen(function* () {
|
|
849
|
-
const handle = yield* progress(taskOptions);
|
|
850
|
-
return yield* effect.pipe(
|
|
851
|
-
Effect.onExit((exit) =>
|
|
852
|
-
Exit.isSuccess(exit)
|
|
853
|
-
? handle.succeed()
|
|
854
|
-
: // Interruption (Ctrl+C) is not a failure — remove the row
|
|
855
|
-
// instead of painting a red error status.
|
|
856
|
-
Cause.hasInterruptsOnly(exit.cause)
|
|
857
|
-
? handle.close
|
|
858
|
-
: handle.fail(),
|
|
859
|
-
),
|
|
860
|
-
);
|
|
861
|
-
}),
|
|
862
|
-
),
|
|
752
|
+
browserLogin,
|
|
753
|
+
live,
|
|
754
|
+
progress,
|
|
755
|
+
task: taskFromProgress(progress),
|
|
756
|
+
session,
|
|
863
757
|
};
|
|
864
758
|
|
|
865
759
|
return {
|
|
@@ -5,10 +5,10 @@ import * as Effect from "effect/Effect";
|
|
|
5
5
|
import * as Exit from "effect/Exit";
|
|
6
6
|
import * as Layer from "effect/Layer";
|
|
7
7
|
import * as Scope from "effect/Scope";
|
|
8
|
+
import type { ApplyEvent } from "../../../Events.ts";
|
|
9
|
+
import { Interaction } from "../../../Interaction.ts";
|
|
8
10
|
import type { Plan } from "../../../Plan.ts";
|
|
9
11
|
import { type PlanStatusSession, Cli } from "../../../Report.ts";
|
|
10
|
-
import type { ApplyEvent } from "../../../Report.ts";
|
|
11
|
-
import { CliKit } from "../../CliKit/index.ts";
|
|
12
12
|
import { formatElapsed } from "../../Format.ts";
|
|
13
13
|
import { approvePlanScreen } from "./ApprovePlan.tsx";
|
|
14
14
|
import { Plan as PlanComponent, PlanTree } from "./PlanView.tsx";
|
|
@@ -25,7 +25,7 @@ interface SessionPreferences {
|
|
|
25
25
|
export const sigilCli = () =>
|
|
26
26
|
Layer.effect(
|
|
27
27
|
Cli,
|
|
28
|
-
Effect.map(
|
|
28
|
+
Effect.map(Interaction, (cli) => {
|
|
29
29
|
const preferences: SessionPreferences = { planExpanded: true };
|
|
30
30
|
return Cli.of({
|
|
31
31
|
startPlanningSession: (label, detail, title) =>
|
|
@@ -38,19 +38,19 @@ export const sigilCli = () =>
|
|
|
38
38
|
);
|
|
39
39
|
|
|
40
40
|
const approvePlan = Effect.fn(function* <P extends Plan>(
|
|
41
|
-
cli:
|
|
41
|
+
cli: Interaction["Service"],
|
|
42
42
|
plan: P,
|
|
43
43
|
options?: import("../../../Report.ts").PlanDisplayOptions,
|
|
44
44
|
) {
|
|
45
45
|
// A dismissed screen means "declined"; NonInteractiveTerminal propagates
|
|
46
46
|
// typed to the command-level handlers (a friendly line, not a raw cause).
|
|
47
47
|
return yield* cli.prompt
|
|
48
|
-
.
|
|
48
|
+
.screen(approvePlanScreen(plan, options?.detailed))
|
|
49
49
|
.pipe(Effect.catchTag("TerminalCancelled", () => Effect.succeed(false)));
|
|
50
50
|
});
|
|
51
51
|
|
|
52
52
|
const displayPlan = Effect.fn(function* <P extends Plan>(
|
|
53
|
-
cli:
|
|
53
|
+
cli: Interaction["Service"],
|
|
54
54
|
plan: P,
|
|
55
55
|
options?: import("../../../Report.ts").PlanDisplayOptions,
|
|
56
56
|
) {
|
|
@@ -64,14 +64,14 @@ const displayPlan = Effect.fn(function* <P extends Plan>(
|
|
|
64
64
|
});
|
|
65
65
|
|
|
66
66
|
const startPlanningSession = Effect.fn(function* (
|
|
67
|
-
cli:
|
|
67
|
+
cli: Interaction["Service"],
|
|
68
68
|
label: string,
|
|
69
69
|
detail?: string,
|
|
70
70
|
title?: string,
|
|
71
71
|
) {
|
|
72
72
|
const startedAt = yield* Clock.currentTimeMillis;
|
|
73
73
|
const scope = yield* Scope.make();
|
|
74
|
-
const progress = yield* cli
|
|
74
|
+
const progress = yield* cli
|
|
75
75
|
.progress({
|
|
76
76
|
label,
|
|
77
77
|
detail,
|
|
@@ -90,7 +90,7 @@ const startPlanningSession = Effect.fn(function* (
|
|
|
90
90
|
// renderer's "(1.8s)" suffix.
|
|
91
91
|
const settled = (message: string | undefined) =>
|
|
92
92
|
message === undefined
|
|
93
|
-
? Effect.
|
|
93
|
+
? Effect.undefined
|
|
94
94
|
: Clock.currentTimeMillis.pipe(
|
|
95
95
|
Effect.map((now) => `${message} (${formatElapsed(now - startedAt)})`),
|
|
96
96
|
);
|
|
@@ -109,7 +109,7 @@ const startPlanningSession = Effect.fn(function* (
|
|
|
109
109
|
});
|
|
110
110
|
|
|
111
111
|
const startApplySession = Effect.fn(function* <P extends Plan>(
|
|
112
|
-
cli:
|
|
112
|
+
cli: Interaction["Service"],
|
|
113
113
|
plan: P,
|
|
114
114
|
options: import("../../../Report.ts").PlanDisplayOptions | undefined,
|
|
115
115
|
preferences: SessionPreferences,
|
|
@@ -154,8 +154,8 @@ const startApplySession = Effect.fn(function* <P extends Plan>(
|
|
|
154
154
|
// generation is interrupted (a reload or Ctrl+C), so a replaced
|
|
155
155
|
// generation never leaves its widget behind.
|
|
156
156
|
const scope = yield* Scope.make();
|
|
157
|
-
const live = yield* cli
|
|
158
|
-
.
|
|
157
|
+
const live = yield* cli
|
|
158
|
+
.live(<PlanComponent tree={progress} collapsible={options?.dev} />, {
|
|
159
159
|
persistOnClose: !options?.dev,
|
|
160
160
|
})
|
|
161
161
|
.pipe(Scope.provide(scope));
|
|
@@ -8,8 +8,9 @@ import * as Exit from "effect/Exit";
|
|
|
8
8
|
import type * as Fiber from "effect/Fiber";
|
|
9
9
|
import * as Option from "effect/Option";
|
|
10
10
|
import type { JSX } from "react";
|
|
11
|
+
import { Screen, type ScreenController } from "../../../Interaction.ts";
|
|
11
12
|
import type { InvalidStatePath, StateStoreError } from "../../../State/index.ts";
|
|
12
|
-
import {
|
|
13
|
+
import { theme } from "../../../Util/Theme.ts";
|
|
13
14
|
import { formatYamlLines, matchYamlKey } from "../../PropertyDiff.ts";
|
|
14
15
|
import {
|
|
15
16
|
Box,
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* icons — shared by the plan tree, the live progress view, and the plain
|
|
4
4
|
* logging CLI so an action never renders two different hues.
|
|
5
5
|
*/
|
|
6
|
-
import type { ApplyStatus } from "../../../
|
|
7
|
-
import { theme, type GlyphName } from "
|
|
6
|
+
import type { ApplyStatus } from "../../../Events.ts";
|
|
7
|
+
import { theme, type GlyphName } from "../../../Util/Theme.ts";
|
|
8
8
|
|
|
9
9
|
/** Every verb a plan row can carry (resource CRUD + namespace/action rollups). */
|
|
10
10
|
export type PlanAction =
|