everything-dev 1.53.2 → 2.0.0-rc.1
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/README.md +2 -11
- package/dist/_virtual/_rolldown/runtime.cjs +17 -2
- package/dist/_virtual/_rolldown/runtime.mjs +36 -0
- package/dist/api/auth-middleware.cjs +161 -0
- package/dist/api/auth-middleware.cjs.map +1 -0
- package/dist/api/auth-middleware.d.cts +69 -0
- package/dist/api/auth-middleware.d.mts +69 -0
- package/dist/api/auth-middleware.mjs +160 -0
- package/dist/api/auth-middleware.mjs.map +1 -0
- package/dist/api-contract.cjs +250 -62
- package/dist/api-contract.cjs.map +1 -1
- package/dist/api-contract.mjs +246 -65
- package/dist/api-contract.mjs.map +1 -1
- package/dist/app.cjs +99 -26
- package/dist/app.cjs.map +1 -1
- package/dist/app.d.cts +3 -0
- package/dist/app.d.mts +3 -0
- package/dist/app.mjs +100 -27
- package/dist/app.mjs.map +1 -1
- package/dist/auth-login.cjs +163 -0
- package/dist/auth-login.cjs.map +1 -0
- package/dist/auth-login.mjs +162 -0
- package/dist/auth-login.mjs.map +1 -0
- package/dist/auth-session.cjs +64 -0
- package/dist/auth-session.cjs.map +1 -0
- package/dist/auth-session.mjs +58 -0
- package/dist/auth-session.mjs.map +1 -0
- package/dist/auth-types-gen.cjs +0 -1
- package/dist/auth-types-gen.cjs.map +1 -1
- package/dist/build.cjs +37 -173
- package/dist/build.cjs.map +1 -1
- package/dist/build.mjs +37 -171
- package/dist/build.mjs.map +1 -1
- package/dist/bundle-cache.cjs +74 -0
- package/dist/bundle-cache.cjs.map +1 -0
- package/dist/bundle-cache.d.cts +27 -0
- package/dist/bundle-cache.d.mts +27 -0
- package/dist/bundle-cache.mjs +68 -0
- package/dist/bundle-cache.mjs.map +1 -0
- package/dist/bundle-fs-resolve.cjs +209 -0
- package/dist/bundle-fs-resolve.cjs.map +1 -0
- package/dist/bundle-fs-resolve.d.cts +76 -0
- package/dist/bundle-fs-resolve.d.mts +76 -0
- package/dist/bundle-fs-resolve.mjs +202 -0
- package/dist/bundle-fs-resolve.mjs.map +1 -0
- package/dist/cdn-deploy.cjs +126 -0
- package/dist/cdn-deploy.cjs.map +1 -0
- package/dist/cdn-deploy.mjs +124 -0
- package/dist/cdn-deploy.mjs.map +1 -0
- package/dist/cli/db-doctor.cjs +19 -19
- package/dist/cli/db-doctor.cjs.map +1 -1
- package/dist/cli/db-doctor.mjs +18 -18
- package/dist/cli/db-doctor.mjs.map +1 -1
- package/dist/cli/db-repair.cjs +9 -32
- package/dist/cli/db-repair.cjs.map +1 -1
- package/dist/cli/db-repair.mjs +9 -32
- package/dist/cli/db-repair.mjs.map +1 -1
- package/dist/cli/framework-version.cjs +7 -3
- package/dist/cli/framework-version.cjs.map +1 -1
- package/dist/cli/framework-version.mjs +7 -3
- package/dist/cli/framework-version.mjs.map +1 -1
- package/dist/cli/infra.cjs +159 -251
- package/dist/cli/infra.cjs.map +1 -1
- package/dist/cli/infra.mjs +154 -242
- package/dist/cli/infra.mjs.map +1 -1
- package/dist/cli/init.cjs +627 -199
- package/dist/cli/init.cjs.map +1 -1
- package/dist/cli/init.d.cts +61 -8
- package/dist/cli/init.d.mts +61 -8
- package/dist/cli/init.mjs +616 -197
- package/dist/cli/init.mjs.map +1 -1
- package/dist/cli/parse.cjs +8 -7
- package/dist/cli/parse.cjs.map +1 -1
- package/dist/cli/parse.mjs +9 -7
- package/dist/cli/parse.mjs.map +1 -1
- package/dist/cli/prompts.cjs +14 -1
- package/dist/cli/prompts.cjs.map +1 -1
- package/dist/cli/prompts.mjs +14 -1
- package/dist/cli/prompts.mjs.map +1 -1
- package/dist/cli/prune.cjs +220 -0
- package/dist/cli/prune.cjs.map +1 -0
- package/dist/cli/prune.mjs +220 -0
- package/dist/cli/prune.mjs.map +1 -0
- package/dist/cli/snapshot.cjs +2 -1
- package/dist/cli/snapshot.cjs.map +1 -1
- package/dist/cli/snapshot.mjs +2 -1
- package/dist/cli/snapshot.mjs.map +1 -1
- package/dist/cli/status.cjs +5 -4
- package/dist/cli/status.cjs.map +1 -1
- package/dist/cli/status.mjs +6 -5
- package/dist/cli/status.mjs.map +1 -1
- package/dist/cli/sync.cjs +156 -58
- package/dist/cli/sync.cjs.map +1 -1
- package/dist/cli/sync.mjs +158 -63
- package/dist/cli/sync.mjs.map +1 -1
- package/dist/cli/timing.cjs +0 -1
- package/dist/cli/timing.cjs.map +1 -1
- package/dist/cli/upgrade.cjs +95 -69
- package/dist/cli/upgrade.cjs.map +1 -1
- package/dist/cli/upgrade.mjs +97 -72
- package/dist/cli/upgrade.mjs.map +1 -1
- package/dist/cli/utils/helpers.cjs.map +1 -1
- package/dist/cli.cjs +320 -72
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.mjs +316 -68
- package/dist/cli.mjs.map +1 -1
- package/dist/code-artifacts.cjs +76 -8
- package/dist/code-artifacts.cjs.map +1 -1
- package/dist/code-artifacts.mjs +76 -10
- package/dist/code-artifacts.mjs.map +1 -1
- package/dist/commands/build.cjs +65 -0
- package/dist/commands/build.cjs.map +1 -0
- package/dist/commands/build.mjs +65 -0
- package/dist/commands/build.mjs.map +1 -0
- package/dist/commands/config.cjs +77 -0
- package/dist/commands/config.cjs.map +1 -0
- package/dist/commands/config.d.cts +8 -0
- package/dist/commands/config.d.mts +8 -0
- package/dist/commands/config.mjs +74 -0
- package/dist/commands/config.mjs.map +1 -0
- package/dist/commands/db.cjs +107 -0
- package/dist/commands/db.cjs.map +1 -0
- package/dist/commands/db.mjs +107 -0
- package/dist/commands/db.mjs.map +1 -0
- package/dist/commands/deploy.cjs +336 -0
- package/dist/commands/deploy.cjs.map +1 -0
- package/dist/commands/deploy.mjs +334 -0
- package/dist/commands/deploy.mjs.map +1 -0
- package/dist/commands/dev.cjs +75 -0
- package/dist/commands/dev.cjs.map +1 -0
- package/dist/commands/dev.mjs +73 -0
- package/dist/commands/dev.mjs.map +1 -0
- package/dist/commands/init.cjs +234 -0
- package/dist/commands/init.cjs.map +1 -0
- package/dist/commands/init.mjs +231 -0
- package/dist/commands/init.mjs.map +1 -0
- package/dist/commands/keys.cjs +255 -0
- package/dist/commands/keys.cjs.map +1 -0
- package/dist/commands/keys.mjs +253 -0
- package/dist/commands/keys.mjs.map +1 -0
- package/dist/commands/ops.cjs +199 -0
- package/dist/commands/ops.cjs.map +1 -0
- package/dist/commands/ops.mjs +197 -0
- package/dist/commands/ops.mjs.map +1 -0
- package/dist/commands/plugins.cjs +211 -0
- package/dist/commands/plugins.cjs.map +1 -0
- package/dist/commands/plugins.mjs +211 -0
- package/dist/commands/plugins.mjs.map +1 -0
- package/dist/commands/shared.cjs +8 -0
- package/dist/commands/shared.cjs.map +1 -0
- package/dist/commands/shared.d.cts +6 -0
- package/dist/commands/shared.d.mts +6 -0
- package/dist/commands/shared.mjs +8 -0
- package/dist/commands/shared.mjs.map +1 -0
- package/dist/commands/upgrade.cjs +325 -0
- package/dist/commands/upgrade.cjs.map +1 -0
- package/dist/commands/upgrade.mjs +323 -0
- package/dist/commands/upgrade.mjs.map +1 -0
- package/dist/components/dev-render.cjs +340 -0
- package/dist/components/dev-render.cjs.map +1 -0
- package/dist/components/dev-render.mjs +332 -0
- package/dist/components/dev-render.mjs.map +1 -0
- package/dist/config.cjs +460 -221
- package/dist/config.cjs.map +1 -1
- package/dist/config.d.cts +491 -48
- package/dist/config.d.mts +491 -48
- package/dist/config.mjs +439 -212
- package/dist/config.mjs.map +1 -1
- package/dist/contract.cjs +327 -50
- package/dist/contract.cjs.map +1 -1
- package/dist/contract.d.cts +1951 -1062
- package/dist/contract.d.mts +1951 -1062
- package/dist/contract.meta.cjs +107 -12
- package/dist/contract.meta.cjs.map +1 -1
- package/dist/contract.meta.d.cts +166 -8
- package/dist/contract.meta.d.mts +166 -8
- package/dist/contract.meta.mjs +107 -11
- package/dist/contract.meta.mjs.map +1 -1
- package/dist/contract.mjs +580 -327
- package/dist/contract.mjs.map +1 -1
- package/dist/dag.cjs +5 -3
- package/dist/dag.cjs.map +1 -1
- package/dist/dag.mjs +6 -3
- package/dist/dag.mjs.map +1 -1
- package/dist/db/binding.cjs +80 -0
- package/dist/db/binding.cjs.map +1 -0
- package/dist/db/binding.d.cts +39 -0
- package/dist/db/binding.d.mts +39 -0
- package/dist/db/binding.mjs +78 -0
- package/dist/db/binding.mjs.map +1 -0
- package/dist/db/bindings.cjs +78 -0
- package/dist/db/bindings.cjs.map +1 -0
- package/dist/db/bindings.d.cts +34 -0
- package/dist/db/bindings.d.mts +34 -0
- package/dist/db/bindings.mjs +76 -0
- package/dist/db/bindings.mjs.map +1 -0
- package/dist/db/core.cjs +204 -0
- package/dist/db/core.cjs.map +1 -0
- package/dist/db/core.d.cts +69 -0
- package/dist/db/core.d.mts +69 -0
- package/dist/db/core.mjs +192 -0
- package/dist/db/core.mjs.map +1 -0
- package/dist/db/driver.cjs +167 -0
- package/dist/db/driver.cjs.map +1 -0
- package/dist/db/driver.d.cts +50 -0
- package/dist/db/driver.d.mts +50 -0
- package/dist/db/driver.mjs +165 -0
- package/dist/db/driver.mjs.map +1 -0
- package/dist/db/drizzle-kit.cjs +177 -0
- package/dist/db/drizzle-kit.cjs.map +1 -0
- package/dist/db/drizzle-kit.d.cts +25 -0
- package/dist/db/drizzle-kit.d.mts +25 -0
- package/dist/db/drizzle-kit.mjs +175 -0
- package/dist/db/drizzle-kit.mjs.map +1 -0
- package/dist/db/errors.cjs +27 -0
- package/dist/db/errors.cjs.map +1 -0
- package/dist/db/errors.d.cts +16 -0
- package/dist/db/errors.d.mts +16 -0
- package/dist/db/errors.mjs +26 -0
- package/dist/db/errors.mjs.map +1 -0
- package/dist/db/identity.cjs +55 -0
- package/dist/db/identity.cjs.map +1 -0
- package/dist/db/identity.d.cts +40 -0
- package/dist/db/identity.d.mts +40 -0
- package/dist/db/identity.mjs +53 -0
- package/dist/db/identity.mjs.map +1 -0
- package/dist/db/index.cjs +43 -0
- package/dist/db/index.d.cts +9 -0
- package/dist/db/index.d.mts +9 -0
- package/dist/db/index.mjs +10 -0
- package/dist/db/run-migrations.cjs +343 -0
- package/dist/db/run-migrations.cjs.map +1 -0
- package/dist/db/run-migrations.d.cts +87 -0
- package/dist/db/run-migrations.d.mts +87 -0
- package/dist/db/run-migrations.mjs +341 -0
- package/dist/db/run-migrations.mjs.map +1 -0
- package/dist/delegate-signer.cjs +85 -0
- package/dist/delegate-signer.cjs.map +1 -0
- package/dist/delegate-signer.mjs +84 -0
- package/dist/delegate-signer.mjs.map +1 -0
- package/dist/deploy-diff.cjs +119 -0
- package/dist/deploy-diff.cjs.map +1 -0
- package/dist/deploy-diff.mjs +109 -0
- package/dist/deploy-diff.mjs.map +1 -0
- package/dist/descriptor/constructors.cjs +49 -0
- package/dist/descriptor/constructors.cjs.map +1 -0
- package/dist/descriptor/constructors.d.cts +27 -0
- package/dist/descriptor/constructors.d.mts +27 -0
- package/dist/descriptor/constructors.mjs +45 -0
- package/dist/descriptor/constructors.mjs.map +1 -0
- package/dist/descriptor/index.cjs +24 -0
- package/dist/descriptor/index.d.cts +5 -0
- package/dist/descriptor/index.d.mts +5 -0
- package/dist/descriptor/index.mjs +6 -0
- package/dist/descriptor/resolve.cjs +258 -0
- package/dist/descriptor/resolve.cjs.map +1 -0
- package/dist/descriptor/resolve.d.cts +50 -0
- package/dist/descriptor/resolve.d.mts +50 -0
- package/dist/descriptor/resolve.mjs +252 -0
- package/dist/descriptor/resolve.mjs.map +1 -0
- package/dist/descriptor/schema.cjs +109 -0
- package/dist/descriptor/schema.cjs.map +1 -0
- package/dist/descriptor/schema.d.cts +217 -0
- package/dist/descriptor/schema.d.mts +217 -0
- package/dist/descriptor/schema.mjs +102 -0
- package/dist/descriptor/schema.mjs.map +1 -0
- package/dist/descriptor/serialize.cjs +45 -0
- package/dist/descriptor/serialize.cjs.map +1 -0
- package/dist/descriptor/serialize.d.cts +7 -0
- package/dist/descriptor/serialize.d.mts +7 -0
- package/dist/descriptor/serialize.mjs +45 -0
- package/dist/descriptor/serialize.mjs.map +1 -0
- package/dist/dev-log-pipeline.cjs +273 -0
- package/dist/dev-log-pipeline.cjs.map +1 -0
- package/dist/dev-log-pipeline.mjs +267 -0
- package/dist/dev-log-pipeline.mjs.map +1 -0
- package/dist/dev-logs.cjs +39 -8
- package/dist/dev-logs.cjs.map +1 -1
- package/dist/dev-logs.mjs +37 -9
- package/dist/dev-logs.mjs.map +1 -1
- package/dist/dev-program.cjs +405 -0
- package/dist/dev-program.cjs.map +1 -0
- package/dist/dev-program.d.cts +10 -0
- package/dist/dev-program.d.mts +10 -0
- package/dist/dev-program.mjs +395 -0
- package/dist/dev-program.mjs.map +1 -0
- package/dist/dev-session-data.d.cts +27 -0
- package/dist/dev-session-data.d.mts +27 -0
- package/dist/dev-session.cjs +178 -105
- package/dist/dev-session.cjs.map +1 -1
- package/dist/dev-session.mjs +180 -105
- package/dist/dev-session.mjs.map +1 -1
- package/dist/env/process-env.cjs +16 -0
- package/dist/env/process-env.cjs.map +1 -0
- package/dist/env/process-env.mjs +13 -0
- package/dist/env/process-env.mjs.map +1 -0
- package/dist/env/project-env.cjs +144 -0
- package/dist/env/project-env.cjs.map +1 -0
- package/dist/env/project-env.d.cts +1 -0
- package/dist/env/project-env.d.mts +1 -0
- package/dist/env/project-env.mjs +132 -0
- package/dist/env/project-env.mjs.map +1 -0
- package/dist/fastkv.cjs +59 -12
- package/dist/fastkv.cjs.map +1 -1
- package/dist/fastkv.d.cts +42 -6
- package/dist/fastkv.d.mts +42 -6
- package/dist/fastkv.mjs +58 -13
- package/dist/fastkv.mjs.map +1 -1
- package/dist/fingerprint.cjs +57 -0
- package/dist/fingerprint.cjs.map +1 -0
- package/dist/fingerprint.d.cts +14 -0
- package/dist/fingerprint.d.mts +14 -0
- package/dist/fingerprint.mjs +55 -0
- package/dist/fingerprint.mjs.map +1 -0
- package/dist/http-client.cjs +17 -17
- package/dist/http-client.cjs.map +1 -1
- package/dist/http-client.mjs +17 -17
- package/dist/http-client.mjs.map +1 -1
- package/dist/image-deploy.cjs +186 -0
- package/dist/image-deploy.cjs.map +1 -0
- package/dist/image-deploy.mjs +182 -0
- package/dist/image-deploy.mjs.map +1 -0
- package/dist/index.cjs +66 -18
- package/dist/index.d.cts +8 -7
- package/dist/index.d.mts +8 -7
- package/dist/index.mjs +6 -5
- package/dist/infra/docker.cjs +77 -0
- package/dist/infra/docker.cjs.map +1 -0
- package/dist/infra/docker.d.cts +10 -0
- package/dist/infra/docker.d.mts +10 -0
- package/dist/infra/docker.mjs +69 -0
- package/dist/infra/docker.mjs.map +1 -0
- package/dist/infra/materializer.cjs +74 -0
- package/dist/infra/materializer.cjs.map +1 -0
- package/dist/infra/materializer.mjs +70 -0
- package/dist/infra/materializer.mjs.map +1 -0
- package/dist/infra/planner.cjs +135 -103
- package/dist/infra/planner.cjs.map +1 -1
- package/dist/infra/planner.mjs +137 -104
- package/dist/infra/planner.mjs.map +1 -1
- package/dist/infra/port-ownership.cjs +57 -0
- package/dist/infra/port-ownership.cjs.map +1 -0
- package/dist/infra/port-ownership.mjs +57 -0
- package/dist/infra/port-ownership.mjs.map +1 -0
- package/dist/infra/preflight.cjs +45 -33
- package/dist/infra/preflight.cjs.map +1 -1
- package/dist/infra/preflight.d.cts +1 -0
- package/dist/infra/preflight.d.mts +1 -0
- package/dist/infra/preflight.mjs +46 -34
- package/dist/infra/preflight.mjs.map +1 -1
- package/dist/infra/types.cjs.map +1 -1
- package/dist/infra/types.d.cts +2 -0
- package/dist/infra/types.d.mts +2 -0
- package/dist/infra/types.mjs.map +1 -1
- package/dist/integrity.cjs +50 -61
- package/dist/integrity.cjs.map +1 -1
- package/dist/integrity.d.cts +16 -10
- package/dist/integrity.d.mts +16 -10
- package/dist/integrity.mjs +50 -59
- package/dist/integrity.mjs.map +1 -1
- package/dist/internal/manifest-normalizer.cjs +8 -2
- package/dist/internal/manifest-normalizer.cjs.map +1 -1
- package/dist/internal/manifest-normalizer.mjs +9 -3
- package/dist/internal/manifest-normalizer.mjs.map +1 -1
- package/dist/merge.cjs +19 -1
- package/dist/merge.cjs.map +1 -1
- package/dist/merge.d.cts +1 -1
- package/dist/merge.d.mts +1 -1
- package/dist/merge.mjs +19 -2
- package/dist/merge.mjs.map +1 -1
- package/dist/mf.cjs +190 -3
- package/dist/mf.cjs.map +1 -1
- package/dist/mf.d.cts +24 -2
- package/dist/mf.d.mts +24 -2
- package/dist/mf.mjs +189 -4
- package/dist/mf.mjs.map +1 -1
- package/dist/near-cli.cjs +59 -91
- package/dist/near-cli.cjs.map +1 -1
- package/dist/near-cli.mjs +58 -90
- package/dist/near-cli.mjs.map +1 -1
- package/dist/near-signer.cjs +73 -0
- package/dist/near-signer.cjs.map +1 -0
- package/dist/near-signer.mjs +70 -0
- package/dist/near-signer.mjs.map +1 -0
- package/dist/network.cjs +0 -1
- package/dist/network.cjs.map +1 -1
- package/dist/orchestrator.cjs +256 -87
- package/dist/orchestrator.cjs.map +1 -1
- package/dist/orchestrator.mjs +248 -87
- package/dist/orchestrator.mjs.map +1 -1
- package/dist/platform-deploy.cjs +81 -0
- package/dist/platform-deploy.cjs.map +1 -0
- package/dist/platform-deploy.mjs +80 -0
- package/dist/platform-deploy.mjs.map +1 -0
- package/dist/plugin.cjs +54 -1389
- package/dist/plugin.cjs.map +1 -1
- package/dist/plugin.d.cts +6 -896
- package/dist/plugin.d.mts +6 -896
- package/dist/plugin.mjs +53 -1387
- package/dist/plugin.mjs.map +1 -1
- package/dist/process-kill.cjs +44 -0
- package/dist/process-kill.cjs.map +1 -0
- package/dist/process-kill.mjs +43 -0
- package/dist/process-kill.mjs.map +1 -0
- package/dist/process-registry.cjs +64 -9
- package/dist/process-registry.cjs.map +1 -1
- package/dist/process-registry.mjs +61 -10
- package/dist/process-registry.mjs.map +1 -1
- package/dist/progress.cjs +45 -0
- package/dist/progress.cjs.map +1 -0
- package/dist/progress.d.cts +13 -0
- package/dist/progress.d.mts +13 -0
- package/dist/progress.mjs +42 -0
- package/dist/progress.mjs.map +1 -0
- package/dist/publish.cjs +513 -79
- package/dist/publish.cjs.map +1 -1
- package/dist/publish.mjs +515 -82
- package/dist/publish.mjs.map +1 -1
- package/dist/registry-use.cjs +41 -0
- package/dist/registry-use.cjs.map +1 -0
- package/dist/registry-use.mjs +40 -0
- package/dist/registry-use.mjs.map +1 -0
- package/dist/resolution/session.cjs +335 -0
- package/dist/resolution/session.cjs.map +1 -0
- package/dist/resolution/session.d.cts +105 -0
- package/dist/resolution/session.d.mts +105 -0
- package/dist/resolution/session.mjs +331 -0
- package/dist/resolution/session.mjs.map +1 -0
- package/dist/rollback.cjs +131 -0
- package/dist/rollback.cjs.map +1 -0
- package/dist/rollback.mjs +128 -0
- package/dist/rollback.mjs.map +1 -0
- package/dist/sdk.cjs +7 -7
- package/dist/sdk.d.cts +3 -3
- package/dist/sdk.d.mts +3 -3
- package/dist/sdk.mjs +2 -2
- package/dist/service-descriptor.cjs +67 -34
- package/dist/service-descriptor.cjs.map +1 -1
- package/dist/service-descriptor.d.cts +4 -1
- package/dist/service-descriptor.d.mts +3 -0
- package/dist/service-descriptor.mjs +63 -35
- package/dist/service-descriptor.mjs.map +1 -1
- package/dist/shared-deps.cjs +17 -16
- package/dist/shared-deps.cjs.map +1 -1
- package/dist/shared-deps.mjs +17 -16
- package/dist/shared-deps.mjs.map +1 -1
- package/dist/start-config-source.cjs +24 -0
- package/dist/start-config-source.cjs.map +1 -0
- package/dist/start-config-source.d.cts +29 -0
- package/dist/start-config-source.d.mts +29 -0
- package/dist/start-config-source.mjs +22 -0
- package/dist/start-config-source.mjs.map +1 -0
- package/dist/storage-upload.cjs +145 -0
- package/dist/storage-upload.cjs.map +1 -0
- package/dist/storage-upload.mjs +143 -0
- package/dist/storage-upload.mjs.map +1 -0
- package/dist/types.cjs +126 -20
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +867 -585
- package/dist/types.d.mts +867 -585
- package/dist/types.mjs +307 -208
- package/dist/types.mjs.map +1 -1
- package/dist/ui/api.cjs +105 -0
- package/dist/ui/api.cjs.map +1 -0
- package/dist/ui/api.d.cts +31 -0
- package/dist/ui/api.d.mts +31 -0
- package/dist/ui/api.mjs +99 -0
- package/dist/ui/api.mjs.map +1 -0
- package/dist/ui/auth-guards.cjs +50 -0
- package/dist/ui/auth-guards.cjs.map +1 -0
- package/dist/ui/auth-guards.d.cts +39 -0
- package/dist/ui/auth-guards.d.mts +39 -0
- package/dist/ui/auth-guards.mjs +48 -0
- package/dist/ui/auth-guards.mjs.map +1 -0
- package/dist/ui/auth.cjs +197 -0
- package/dist/ui/auth.cjs.map +1 -0
- package/dist/ui/auth.d.cts +56 -0
- package/dist/ui/auth.d.mts +56 -0
- package/dist/ui/auth.mjs +179 -0
- package/dist/ui/auth.mjs.map +1 -0
- package/dist/ui/entry.cjs +16 -0
- package/dist/ui/entry.cjs.map +1 -0
- package/dist/ui/entry.d.cts +12 -0
- package/dist/ui/entry.d.mts +12 -0
- package/dist/ui/entry.mjs +15 -0
- package/dist/ui/entry.mjs.map +1 -0
- package/dist/ui/head.cjs +14 -7
- package/dist/ui/head.cjs.map +1 -1
- package/dist/ui/head.mjs +15 -7
- package/dist/ui/head.mjs.map +1 -1
- package/dist/ui/hydrate.cjs +265 -0
- package/dist/ui/hydrate.cjs.map +1 -0
- package/dist/ui/hydrate.d.cts +48 -0
- package/dist/ui/hydrate.d.mts +48 -0
- package/dist/ui/hydrate.mjs +263 -0
- package/dist/ui/hydrate.mjs.map +1 -0
- package/dist/ui/i18n.cjs +153 -0
- package/dist/ui/i18n.cjs.map +1 -0
- package/dist/ui/i18n.d.cts +29 -0
- package/dist/ui/i18n.d.mts +29 -0
- package/dist/ui/i18n.mjs +140 -0
- package/dist/ui/i18n.mjs.map +1 -0
- package/dist/ui/index.cjs +19 -1
- package/dist/ui/index.d.cts +6 -3
- package/dist/ui/index.d.mts +6 -3
- package/dist/ui/index.mjs +5 -2
- package/dist/ui/locale.cjs +53 -0
- package/dist/ui/locale.cjs.map +1 -0
- package/dist/ui/locale.d.cts +18 -0
- package/dist/ui/locale.d.mts +18 -0
- package/dist/ui/locale.mjs +49 -0
- package/dist/ui/locale.mjs.map +1 -0
- package/dist/ui/manifest/index.cjs +25 -0
- package/dist/ui/manifest/index.cjs.map +1 -0
- package/dist/ui/manifest/index.d.cts +9 -0
- package/dist/ui/manifest/index.d.mts +9 -0
- package/dist/ui/manifest/index.mjs +13 -0
- package/dist/ui/manifest/index.mjs.map +1 -0
- package/dist/ui/manifest-generator.cjs +8 -0
- package/dist/ui/manifest-generator.d.cts +1 -0
- package/dist/ui/manifest-generator.d.mts +1 -0
- package/dist/ui/manifest-generator.mjs +3 -0
- package/dist/ui/message-catalogs.cjs +8 -0
- package/dist/ui/message-catalogs.cjs.map +1 -0
- package/dist/ui/message-catalogs.d.cts +5 -0
- package/dist/ui/message-catalogs.d.mts +5 -0
- package/dist/ui/message-catalogs.mjs +8 -0
- package/dist/ui/message-catalogs.mjs.map +1 -0
- package/dist/ui/metadata.cjs +0 -1
- package/dist/ui/metadata.cjs.map +1 -1
- package/dist/ui/metadata.d.cts +1 -1
- package/dist/ui/metadata.d.mts +1 -1
- package/dist/ui/plugin-path.cjs +37 -0
- package/dist/ui/plugin-path.cjs.map +1 -0
- package/dist/ui/plugin-path.d.cts +25 -0
- package/dist/ui/plugin-path.d.mts +25 -0
- package/dist/ui/plugin-path.mjs +35 -0
- package/dist/ui/plugin-path.mjs.map +1 -0
- package/dist/ui/router-client.cjs +61 -0
- package/dist/ui/router-client.cjs.map +1 -0
- package/dist/ui/router-client.d.cts +20 -0
- package/dist/ui/router-client.d.mts +20 -0
- package/dist/ui/router-client.mjs +60 -0
- package/dist/ui/router-client.mjs.map +1 -0
- package/dist/ui/router-defaults.cjs +48 -0
- package/dist/ui/router-defaults.cjs.map +1 -0
- package/dist/ui/router-defaults.d.cts +8 -0
- package/dist/ui/router-defaults.d.mts +8 -0
- package/dist/ui/router-defaults.mjs +45 -0
- package/dist/ui/router-defaults.mjs.map +1 -0
- package/dist/ui/router-error.cjs +70 -0
- package/dist/ui/router-error.cjs.map +1 -0
- package/dist/ui/router-error.d.cts +19 -0
- package/dist/ui/router-error.d.mts +19 -0
- package/dist/ui/router-error.mjs +69 -0
- package/dist/ui/router-error.mjs.map +1 -0
- package/dist/ui/router-server.cjs +153 -0
- package/dist/ui/router-server.cjs.map +1 -0
- package/dist/ui/router-server.d.cts +38 -0
- package/dist/ui/router-server.d.mts +38 -0
- package/dist/ui/router-server.mjs +152 -0
- package/dist/ui/router-server.mjs.map +1 -0
- package/dist/ui/router.cjs +4 -16
- package/dist/ui/router.cjs.map +1 -1
- package/dist/ui/router.mjs +4 -15
- package/dist/ui/router.mjs.map +1 -1
- package/dist/ui/runtime.cjs +5 -1
- package/dist/ui/runtime.cjs.map +1 -1
- package/dist/ui/runtime.d.cts +2 -1
- package/dist/ui/runtime.d.mts +2 -1
- package/dist/ui/runtime.mjs +5 -1
- package/dist/ui/runtime.mjs.map +1 -1
- package/dist/ui/slot.cjs +34 -0
- package/dist/ui/slot.cjs.map +1 -0
- package/dist/ui/slot.d.cts +43 -0
- package/dist/ui/slot.d.mts +43 -0
- package/dist/ui/slot.mjs +34 -0
- package/dist/ui/slot.mjs.map +1 -0
- package/dist/ui/tenant.cjs +300 -0
- package/dist/ui/tenant.cjs.map +1 -0
- package/dist/ui/tenant.d.cts +122 -0
- package/dist/ui/tenant.d.mts +122 -0
- package/dist/ui/tenant.mjs +279 -0
- package/dist/ui/tenant.mjs.map +1 -0
- package/dist/ui/types.d.cts +32 -2
- package/dist/ui/types.d.mts +32 -2
- package/dist/ui/version-check.cjs +47 -0
- package/dist/ui/version-check.cjs.map +1 -0
- package/dist/ui/version-check.d.cts +23 -0
- package/dist/ui/version-check.d.mts +23 -0
- package/dist/ui/version-check.mjs +46 -0
- package/dist/ui/version-check.mjs.map +1 -0
- package/dist/utils/banner.cjs +2 -2
- package/dist/utils/banner.cjs.map +1 -1
- package/dist/utils/banner.mjs +2 -2
- package/dist/utils/banner.mjs.map +1 -1
- package/dist/utils/linkify.cjs +1 -1
- package/dist/utils/linkify.cjs.map +1 -1
- package/dist/utils/linkify.mjs +1 -0
- package/dist/utils/linkify.mjs.map +1 -1
- package/dist/utils/run.cjs +6 -6
- package/dist/utils/run.cjs.map +1 -1
- package/dist/utils/run.mjs +6 -6
- package/dist/utils/run.mjs.map +1 -1
- package/dist/utils/save-config.cjs +12 -0
- package/dist/utils/save-config.cjs.map +1 -1
- package/dist/utils/save-config.mjs +12 -0
- package/dist/utils/save-config.mjs.map +1 -1
- package/dist/utils/snapshot-hash.cjs +10 -0
- package/dist/utils/snapshot-hash.cjs.map +1 -0
- package/dist/utils/snapshot-hash.mjs +10 -0
- package/dist/utils/snapshot-hash.mjs.map +1 -0
- package/dist/utils/string.cjs +0 -1
- package/dist/utils/string.cjs.map +1 -1
- package/dist/utils/theme.cjs +30 -12
- package/dist/utils/theme.cjs.map +1 -1
- package/dist/utils/theme.mjs +30 -11
- package/dist/utils/theme.mjs.map +1 -1
- package/dist/version-manifest-deploy.cjs +50 -0
- package/dist/version-manifest-deploy.cjs.map +1 -0
- package/dist/version-manifest-deploy.mjs +49 -0
- package/dist/version-manifest-deploy.mjs.map +1 -0
- package/dist/version-manifest-resolve.cjs +42 -0
- package/dist/version-manifest-resolve.cjs.map +1 -0
- package/dist/version-manifest-resolve.d.cts +38 -0
- package/dist/version-manifest-resolve.d.mts +38 -0
- package/dist/version-manifest-resolve.mjs +40 -0
- package/dist/version-manifest-resolve.mjs.map +1 -0
- package/dist/version-status.cjs +18 -0
- package/dist/version-status.cjs.map +1 -0
- package/dist/version-status.d.cts +22 -0
- package/dist/version-status.d.mts +22 -0
- package/dist/version-status.mjs +17 -0
- package/dist/version-status.mjs.map +1 -0
- package/dist/workspace-catalog.cjs +53 -0
- package/dist/workspace-catalog.cjs.map +1 -0
- package/dist/workspace-catalog.mjs +51 -0
- package/dist/workspace-catalog.mjs.map +1 -0
- package/dist/workspace.cjs +237 -0
- package/dist/workspace.cjs.map +1 -0
- package/dist/workspace.mjs +233 -0
- package/dist/workspace.mjs.map +1 -0
- package/package.json +179 -27
- package/skills/add-a-route/SKILL.md +132 -0
- package/skills/api-and-auth/SKILL.md +87 -21
- package/skills/api-and-auth/references/middleware.md +1 -1
- package/skills/cli-reference/SKILL.md +48 -21
- package/skills/code-style/SKILL.md +8 -0
- package/skills/dev-workflow/SKILL.md +50 -26
- package/skills/extends-config/SKILL.md +31 -19
- package/skills/init-upgrade/SKILL.md +29 -16
- package/skills/plugin-development/SKILL.md +46 -112
- package/skills/plugin-development/references/database.md +82 -0
- package/skills/plugin-development/references/request-context.md +67 -0
- package/skills/publish-sync/SKILL.md +99 -22
- package/skills/registry/SKILL.md +82 -0
- package/skills/super-app/SKILL.md +25 -15
- package/skills/talk-to-the-app/SKILL.md +138 -0
- package/skills/ui-integration/SKILL.md +93 -11
- package/dist/cli/db-studio.cjs +0 -131
- package/dist/cli/db-studio.cjs.map +0 -1
- package/dist/cli/db-studio.mjs +0 -127
- package/dist/cli/db-studio.mjs.map +0 -1
- package/dist/cli/init.d.cts.map +0 -1
- package/dist/cli/init.d.mts.map +0 -1
- package/dist/components/dev-view.cjs +0 -309
- package/dist/components/dev-view.cjs.map +0 -1
- package/dist/components/dev-view.mjs +0 -309
- package/dist/components/dev-view.mjs.map +0 -1
- package/dist/components/streaming-view.cjs +0 -134
- package/dist/components/streaming-view.cjs.map +0 -1
- package/dist/components/streaming-view.mjs +0 -132
- package/dist/components/streaming-view.mjs.map +0 -1
- package/dist/config.d.cts.map +0 -1
- package/dist/config.d.mts.map +0 -1
- package/dist/contract.d.cts.map +0 -1
- package/dist/contract.d.mts.map +0 -1
- package/dist/contract.meta.d.cts.map +0 -1
- package/dist/contract.meta.d.mts.map +0 -1
- package/dist/dag.d.cts.map +0 -1
- package/dist/dag.d.mts.map +0 -1
- package/dist/db.cjs +0 -81
- package/dist/db.cjs.map +0 -1
- package/dist/db.d.cts +0 -30
- package/dist/db.d.cts.map +0 -1
- package/dist/db.d.mts +0 -30
- package/dist/db.d.mts.map +0 -1
- package/dist/db.mjs +0 -75
- package/dist/db.mjs.map +0 -1
- package/dist/fastkv.d.cts.map +0 -1
- package/dist/fastkv.d.mts.map +0 -1
- package/dist/integrity.d.cts.map +0 -1
- package/dist/integrity.d.mts.map +0 -1
- package/dist/merge.d.cts.map +0 -1
- package/dist/merge.d.mts.map +0 -1
- package/dist/mf.d.cts.map +0 -1
- package/dist/mf.d.mts.map +0 -1
- package/dist/plugin.d.cts.map +0 -1
- package/dist/plugin.d.mts.map +0 -1
- package/dist/service-descriptor.d.cts.map +0 -1
- package/dist/service-descriptor.d.mts.map +0 -1
- package/dist/types.d.cts.map +0 -1
- package/dist/types.d.mts.map +0 -1
- package/dist/ui/head.d.cts.map +0 -1
- package/dist/ui/head.d.mts.map +0 -1
- package/dist/ui/metadata.d.cts.map +0 -1
- package/dist/ui/metadata.d.mts.map +0 -1
- package/dist/ui/router.d.cts.map +0 -1
- package/dist/ui/router.d.mts.map +0 -1
- package/dist/ui/runtime.d.cts.map +0 -1
- package/dist/ui/runtime.d.mts.map +0 -1
- package/dist/ui/types.d.cts.map +0 -1
- package/dist/ui/types.d.mts.map +0 -1
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { Effect } from "effect";
|
|
4
|
-
import { access } from "node:fs/promises";
|
|
5
4
|
import { homedir } from "node:os";
|
|
5
|
+
import { access } from "node:fs/promises";
|
|
6
|
+
import { spawnSync } from "node:child_process";
|
|
6
7
|
|
|
7
8
|
//#region src/process-registry.ts
|
|
8
9
|
function getRegistryDir() {
|
|
9
10
|
return join(homedir(), ".cache", "everything-dev");
|
|
10
11
|
}
|
|
11
12
|
function ensureRegistryDir() {
|
|
12
|
-
const
|
|
13
|
+
const path = getRegistryPath();
|
|
14
|
+
const dir = join(path, "..");
|
|
13
15
|
if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
|
|
14
16
|
}
|
|
15
17
|
function readRegistry() {
|
|
@@ -31,8 +33,42 @@ function isPidAlive(pid) {
|
|
|
31
33
|
return err.code !== "ESRCH";
|
|
32
34
|
}
|
|
33
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Identity of a process generation, stable across PID reuse: Linux reads the
|
|
38
|
+
* kernel's starttime tick from /proc, macOS falls back to `ps -o lstart=`.
|
|
39
|
+
* Null when the generation cannot be determined (the caller then treats the
|
|
40
|
+
* claim as unverifiable and keeps legacy behavior).
|
|
41
|
+
*/
|
|
42
|
+
function processStartTime(pid) {
|
|
43
|
+
if (pid <= 1) return null;
|
|
44
|
+
try {
|
|
45
|
+
const stat = readFileSync(`/proc/${pid}/stat`, "utf-8");
|
|
46
|
+
const close = stat.lastIndexOf(")");
|
|
47
|
+
const starttime = stat.slice(close + 2).split(" ")[19];
|
|
48
|
+
return starttime ? `proc:${starttime}` : null;
|
|
49
|
+
} catch {
|
|
50
|
+
try {
|
|
51
|
+
const text = spawnSync("ps", [
|
|
52
|
+
"-o",
|
|
53
|
+
"lstart=",
|
|
54
|
+
"-p",
|
|
55
|
+
String(pid)
|
|
56
|
+
], { timeout: 5e3 }).stdout?.toString().trim();
|
|
57
|
+
return text ? `ps:${text}` : null;
|
|
58
|
+
} catch {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function isEntryLive(entry) {
|
|
64
|
+
if (entry.pid <= 1) return false;
|
|
65
|
+
if (!existsSync(entry.configDir)) return false;
|
|
66
|
+
if (!isPidAlive(entry.pid)) return false;
|
|
67
|
+
if (entry.processStart !== void 0) return processStartTime(entry.pid) === entry.processStart;
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
34
70
|
function pruneDead(entries) {
|
|
35
|
-
return entries.filter(
|
|
71
|
+
return entries.filter(isEntryLive);
|
|
36
72
|
}
|
|
37
73
|
function pruneDeadEffect(entries) {
|
|
38
74
|
return Effect.forEach(entries, (entry) => {
|
|
@@ -40,6 +76,9 @@ function pruneDeadEffect(entries) {
|
|
|
40
76
|
return Effect.gen(function* () {
|
|
41
77
|
if (!(yield* Effect.promise(() => access(entry.configDir).then(() => true).catch(() => false)))) return null;
|
|
42
78
|
if (!isPidAlive(entry.pid)) return null;
|
|
79
|
+
if (entry.processStart !== void 0) {
|
|
80
|
+
if ((yield* Effect.promise(() => Promise.resolve(processStartTime(entry.pid)))) !== entry.processStart) return null;
|
|
81
|
+
}
|
|
43
82
|
return entry;
|
|
44
83
|
});
|
|
45
84
|
}, { concurrency: "unbounded" }).pipe(Effect.map((results) => results.filter((e) => e !== null)));
|
|
@@ -55,29 +94,41 @@ function registerStandalone(entry) {
|
|
|
55
94
|
const live = pruneDead(readRegistry());
|
|
56
95
|
const full = {
|
|
57
96
|
...entry,
|
|
58
|
-
role: "standalone"
|
|
97
|
+
role: "standalone",
|
|
98
|
+
processStart: processStartTime(entry.pid) ?? entry.processStart
|
|
59
99
|
};
|
|
60
100
|
const withoutSelf = live.filter((existing) => existing.pid !== entry.pid);
|
|
61
101
|
withoutSelf.push(full);
|
|
62
102
|
writeRegistry(withoutSelf);
|
|
63
103
|
return full;
|
|
64
104
|
}
|
|
65
|
-
function
|
|
105
|
+
function updateChildPids(pid, childPids) {
|
|
66
106
|
const live = pruneDead(readRegistry());
|
|
67
|
-
const
|
|
68
|
-
if (
|
|
107
|
+
const entry = live.find((existing) => existing.pid === pid);
|
|
108
|
+
if (!entry) return;
|
|
109
|
+
entry.childPids = childPids;
|
|
110
|
+
writeRegistry(live);
|
|
111
|
+
}
|
|
112
|
+
function unregisterPid(pid) {
|
|
113
|
+
const entries = readRegistry();
|
|
114
|
+
const next = pruneDead(entries).filter((entry) => entry.pid !== pid);
|
|
115
|
+
if (next.length === entries.length) return;
|
|
69
116
|
writeRegistry(next);
|
|
70
117
|
}
|
|
71
118
|
function getRegistryPath() {
|
|
72
119
|
return process.env.BO_PID_REGISTRY_PATH ?? join(getRegistryDir(), "pids.json");
|
|
73
120
|
}
|
|
74
121
|
function claimedPorts() {
|
|
122
|
+
return new Set(claimedPortOwners().keys());
|
|
123
|
+
}
|
|
124
|
+
/** Port → the live registry entry claiming it, for occupancy diagnostics. */
|
|
125
|
+
function claimedPortOwners() {
|
|
75
126
|
const live = pruneDead(readRegistry());
|
|
76
|
-
const out = /* @__PURE__ */ new
|
|
77
|
-
for (const entry of live) for (const port of Object.values(entry.ports)) if (typeof port === "number") out.
|
|
127
|
+
const out = /* @__PURE__ */ new Map();
|
|
128
|
+
for (const entry of live) for (const port of Object.values(entry.ports)) if (typeof port === "number") out.set(port, entry);
|
|
78
129
|
return out;
|
|
79
130
|
}
|
|
80
131
|
|
|
81
132
|
//#endregion
|
|
82
|
-
export { claimedPorts, getRegistryPath, isPidAlive, pruneDead, pruneDeadEffect, readRegistry, registerStandalone, unregisterPid, writeRegistry };
|
|
133
|
+
export { claimedPortOwners, claimedPorts, getRegistryPath, isEntryLive, isPidAlive, processStartTime, pruneDead, pruneDeadEffect, readRegistry, registerStandalone, unregisterPid, updateChildPids, writeRegistry };
|
|
83
134
|
//# sourceMappingURL=process-registry.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-registry.mjs","names":[],"sources":["../src/process-registry.ts"],"sourcesContent":["import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from \"node:fs\";\nimport { access } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { Effect } from \"effect\";\n\nexport type ProcessRole = \"standalone\" | \"workspace-parent\" | \"workspace-child\";\n\nexport interface PidEntry {\n pid: number;\n configDir: string;\n parentPid?: number;\n role: ProcessRole;\n ports: Record<string, number>;\n budget?: { min: number; max: number };\n startedAt: number;\n description: string;\n}\n\nfunction getRegistryDir(): string {\n return join(homedir(), \".cache\", \"everything-dev\");\n}\n\nfunction ensureRegistryDir(): void {\n const path = getRegistryPath();\n const dir = join(path, \"..\");\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n}\n\nexport function readRegistry(): PidEntry[] {\n const path = getRegistryPath();\n if (!existsSync(path)) return [];\n try {\n const raw = JSON.parse(readFileSync(path, \"utf-8\"));\n if (!Array.isArray(raw)) return [];\n return raw.filter(\n (entry): entry is PidEntry =>\n entry &&\n typeof entry === \"object\" &&\n typeof entry.pid === \"number\" &&\n typeof entry.configDir === \"string\" &&\n typeof entry.role === \"string\",\n );\n } catch {\n return [];\n }\n}\n\nexport function isPidAlive(pid: number): boolean {\n try {\n process.kill(pid, 0);\n return true;\n } catch (err) {\n return (err as NodeJS.ErrnoException).code !== \"ESRCH\";\n }\n}\n\nexport function
|
|
1
|
+
{"version":3,"file":"process-registry.mjs","names":[],"sources":["../src/process-registry.ts"],"sourcesContent":["import { spawnSync } from \"node:child_process\";\nimport { existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from \"node:fs\";\nimport { access } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { Effect } from \"effect\";\n\nexport type ProcessRole = \"standalone\" | \"workspace-parent\" | \"workspace-child\";\n\nexport interface PidEntry {\n pid: number;\n configDir: string;\n parentPid?: number;\n role: ProcessRole;\n ports: Record<string, number>;\n childPids?: number[];\n budget?: { min: number; max: number };\n // Lease seam (ADR 0012 §6): entries are leases on shared resources, keyed\n // by what they hold; refcount-ready for the shared-plugin broker.\n leaseKey?: string;\n refcount?: number;\n startedAt: number;\n // Identity of the claimed pid captured at registration time (ADR 0012\n // amendment): PIDs are reused across container restarts, so a bare pid\n // cannot prove a claim live. `processStartTime` is stable per process\n // generation — a mismatch proves the recorded session is dead.\n processStart?: string;\n description: string;\n}\n\nfunction getRegistryDir(): string {\n return join(homedir(), \".cache\", \"everything-dev\");\n}\n\nfunction ensureRegistryDir(): void {\n const path = getRegistryPath();\n const dir = join(path, \"..\");\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n}\n\nexport function readRegistry(): PidEntry[] {\n const path = getRegistryPath();\n if (!existsSync(path)) return [];\n try {\n const raw = JSON.parse(readFileSync(path, \"utf-8\"));\n if (!Array.isArray(raw)) return [];\n return raw.filter(\n (entry): entry is PidEntry =>\n entry &&\n typeof entry === \"object\" &&\n typeof entry.pid === \"number\" &&\n typeof entry.configDir === \"string\" &&\n typeof entry.role === \"string\",\n );\n } catch {\n return [];\n }\n}\n\nexport function isPidAlive(pid: number): boolean {\n try {\n process.kill(pid, 0);\n return true;\n } catch (err) {\n return (err as NodeJS.ErrnoException).code !== \"ESRCH\";\n }\n}\n\n/**\n * Identity of a process generation, stable across PID reuse: Linux reads the\n * kernel's starttime tick from /proc, macOS falls back to `ps -o lstart=`.\n * Null when the generation cannot be determined (the caller then treats the\n * claim as unverifiable and keeps legacy behavior).\n */\nexport function processStartTime(pid: number): string | null {\n if (pid <= 1) return null;\n try {\n const stat = readFileSync(`/proc/${pid}/stat`, \"utf-8\");\n const close = stat.lastIndexOf(\")\");\n const fields = stat.slice(close + 2).split(\" \");\n const starttime = fields[19];\n return starttime ? `proc:${starttime}` : null;\n } catch {\n try {\n const out = spawnSync(\"ps\", [\"-o\", \"lstart=\", \"-p\", String(pid)], { timeout: 5000 });\n const text = out.stdout?.toString().trim();\n return text ? `ps:${text}` : null;\n } catch {\n return null;\n }\n }\n}\n\nexport function isEntryLive(entry: PidEntry): boolean {\n if (entry.pid <= 1) return false;\n if (!existsSync(entry.configDir)) return false;\n if (!isPidAlive(entry.pid)) return false;\n if (entry.processStart !== undefined) {\n return processStartTime(entry.pid) === entry.processStart;\n }\n return true;\n}\n\nexport function pruneDead(entries: PidEntry[]): PidEntry[] {\n return entries.filter(isEntryLive);\n}\n\nexport function pruneDeadEffect(entries: PidEntry[]): Effect.Effect<PidEntry[]> {\n return Effect.forEach(\n entries,\n (entry) => {\n if (entry.pid <= 1) return Effect.succeed(null);\n return Effect.gen(function* () {\n const dirExists = yield* Effect.promise(() =>\n access(entry.configDir)\n .then(() => true)\n .catch(() => false),\n );\n if (!dirExists) return null;\n if (!isPidAlive(entry.pid)) return null;\n if (entry.processStart !== undefined) {\n const current = yield* Effect.promise(() => Promise.resolve(processStartTime(entry.pid)));\n if (current !== entry.processStart) return null;\n }\n return entry;\n });\n },\n { concurrency: \"unbounded\" },\n ).pipe(Effect.map((results) => results.filter((e): e is PidEntry => e !== null)));\n}\n\nexport function writeRegistry(entries: PidEntry[]): void {\n ensureRegistryDir();\n const path = getRegistryPath();\n const tmpPath = `${path}.tmp`;\n writeFileSync(tmpPath, `${JSON.stringify(entries, null, 2)}\\n`);\n renameSync(tmpPath, path);\n}\n\nexport function registerStandalone(entry: Omit<PidEntry, \"role\">): PidEntry {\n const live = pruneDead(readRegistry());\n const full: PidEntry = {\n ...entry,\n role: \"standalone\",\n processStart: processStartTime(entry.pid) ?? entry.processStart,\n };\n const withoutSelf = live.filter((existing) => existing.pid !== entry.pid);\n withoutSelf.push(full);\n writeRegistry(withoutSelf);\n return full;\n}\n\nexport function registerEntry(entry: PidEntry): void {\n const live = pruneDead(readRegistry());\n const withoutSelf = live.filter((existing) => existing.pid !== entry.pid);\n withoutSelf.push({\n ...entry,\n processStart: processStartTime(entry.pid) ?? entry.processStart,\n });\n writeRegistry(withoutSelf);\n}\n\nexport function updateChildPids(pid: number, childPids: number[]): void {\n const live = pruneDead(readRegistry());\n const entry = live.find((existing) => existing.pid === pid);\n if (!entry) return;\n entry.childPids = childPids;\n writeRegistry(live);\n}\n\nexport function unregisterPid(pid: number): void {\n const entries = readRegistry();\n const next = pruneDead(entries).filter((entry) => entry.pid !== pid);\n if (next.length === entries.length) return;\n writeRegistry(next);\n}\n\nexport function removeRegistryFile(): void {\n const path = getRegistryPath();\n if (existsSync(path)) {\n rmSync(path, { force: true });\n }\n}\n\nexport function getRegistryPath(): string {\n return process.env.BO_PID_REGISTRY_PATH ?? join(getRegistryDir(), \"pids.json\");\n}\n\nexport function claimedPorts(): Set<number> {\n const out = new Set<number>(claimedPortOwners().keys());\n return out;\n}\n\n/** Port → the live registry entry claiming it, for occupancy diagnostics. */\nexport function claimedPortOwners(): Map<number, PidEntry> {\n const live = pruneDead(readRegistry());\n const out = new Map<number, PidEntry>();\n for (const entry of live) {\n for (const port of Object.values(entry.ports)) {\n if (typeof port === \"number\") out.set(port, entry);\n }\n }\n return out;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
let effect = require("effect");
|
|
2
|
+
let node_events = require("node:events");
|
|
3
|
+
|
|
4
|
+
//#region src/progress.ts
|
|
5
|
+
const pluginEvents = new node_events.EventEmitter();
|
|
6
|
+
const emitProgress = (event) => effect.Effect.sync(() => {
|
|
7
|
+
pluginEvents.emit("progress", event);
|
|
8
|
+
});
|
|
9
|
+
const timedPhase = effect.Effect.fn("timedPhase")(function* (timings, name, effect$1) {
|
|
10
|
+
yield* emitProgress({
|
|
11
|
+
phase: name,
|
|
12
|
+
status: "running"
|
|
13
|
+
});
|
|
14
|
+
const startedAt = yield* effect.Clock.currentTimeMillis;
|
|
15
|
+
const exit = yield* effect.Effect.exit(effect$1);
|
|
16
|
+
const durationMs = (yield* effect.Clock.currentTimeMillis) - startedAt;
|
|
17
|
+
if (effect.Exit.isSuccess(exit)) {
|
|
18
|
+
timings.push({
|
|
19
|
+
name,
|
|
20
|
+
durationMs
|
|
21
|
+
});
|
|
22
|
+
yield* emitProgress({
|
|
23
|
+
phase: name,
|
|
24
|
+
status: "done",
|
|
25
|
+
durationMs
|
|
26
|
+
});
|
|
27
|
+
return exit.value;
|
|
28
|
+
}
|
|
29
|
+
yield* emitProgress({
|
|
30
|
+
phase: name,
|
|
31
|
+
status: "error",
|
|
32
|
+
durationMs
|
|
33
|
+
});
|
|
34
|
+
return yield* effect.Effect.failCause(exit.cause);
|
|
35
|
+
});
|
|
36
|
+
function timePhase(timings, name, fn) {
|
|
37
|
+
return effect.Effect.runPromise(timedPhase(timings, name, effect.Effect.promise(fn)));
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
//#endregion
|
|
41
|
+
exports.emitProgress = emitProgress;
|
|
42
|
+
exports.pluginEvents = pluginEvents;
|
|
43
|
+
exports.timePhase = timePhase;
|
|
44
|
+
exports.timedPhase = timedPhase;
|
|
45
|
+
//# sourceMappingURL=progress.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress.cjs","names":["EventEmitter","Effect","Clock","effect","Exit"],"sources":["../src/progress.ts"],"sourcesContent":["import { EventEmitter } from \"node:events\";\nimport { Clock, Effect, Exit } from \"effect\";\nimport type { PhaseTiming } from \"./contract\";\n\nexport type ProgressEvent = {\n phase: string;\n status: \"running\" | \"done\" | \"error\";\n durationMs?: number;\n};\n\nexport const pluginEvents = new EventEmitter();\n\nexport const emitProgress = (event: ProgressEvent) =>\n Effect.sync(() => {\n pluginEvents.emit(\"progress\", event);\n });\n\nexport const timedPhase = Effect.fn(\"timedPhase\")(function* <A, E, R>(\n timings: PhaseTiming[],\n name: string,\n effect: Effect.Effect<A, E, R>,\n) {\n yield* emitProgress({ phase: name, status: \"running\" });\n const startedAt = yield* Clock.currentTimeMillis;\n const exit = yield* Effect.exit(effect);\n const durationMs = (yield* Clock.currentTimeMillis) - startedAt;\n if (Exit.isSuccess(exit)) {\n timings.push({ name, durationMs });\n yield* emitProgress({ phase: name, status: \"done\", durationMs });\n return exit.value;\n }\n yield* emitProgress({ phase: name, status: \"error\", durationMs });\n return yield* Effect.failCause(exit.cause);\n});\n\nexport function timePhase<T>(\n timings: PhaseTiming[],\n name: string,\n fn: () => Promise<T>,\n): Promise<T> {\n return Effect.runPromise(timedPhase(timings, name, Effect.promise(fn)));\n}\n"],"mappings":";;;;AAUA,MAAa,eAAe,IAAIA,yBAAa;AAE7C,MAAa,gBAAgB,UAC3BC,cAAO,WAAW;CAChB,aAAa,KAAK,YAAY,KAAK;AACrC,CAAC;AAEH,MAAa,aAAaA,cAAO,GAAG,YAAY,CAAC,CAAC,WAChD,SACA,MACA,UACA;CACA,OAAO,aAAa;EAAE,OAAO;EAAM,QAAQ;CAAU,CAAC;CACtD,MAAM,YAAY,OAAOC,aAAM;CAC/B,MAAM,OAAO,OAAOD,cAAO,KAAKE,QAAM;CACtC,MAAM,cAAc,OAAOD,aAAM,qBAAqB;CACtD,IAAIE,YAAK,UAAU,IAAI,GAAG;EACxB,QAAQ,KAAK;GAAE;GAAM;EAAW,CAAC;EACjC,OAAO,aAAa;GAAE,OAAO;GAAM,QAAQ;GAAQ;EAAW,CAAC;EAC/D,OAAO,KAAK;CACd;CACA,OAAO,aAAa;EAAE,OAAO;EAAM,QAAQ;EAAS;CAAW,CAAC;CAChE,OAAO,OAAOH,cAAO,UAAU,KAAK,KAAK;AAC3C,CAAC;AAED,SAAgB,UACd,SACA,MACA,IACY;CACZ,OAAOA,cAAO,WAAW,WAAW,SAAS,MAAMA,cAAO,QAAQ,EAAE,CAAC,CAAC;AACxE"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import "./contract.cjs";
|
|
2
|
+
import { Effect } from "effect";
|
|
3
|
+
import { EventEmitter } from "node:events";
|
|
4
|
+
//#region src/progress.d.ts
|
|
5
|
+
type ProgressEvent = {
|
|
6
|
+
phase: string;
|
|
7
|
+
status: "running" | "done" | "error";
|
|
8
|
+
durationMs?: number;
|
|
9
|
+
};
|
|
10
|
+
declare const pluginEvents: EventEmitter<any>;
|
|
11
|
+
//#endregion
|
|
12
|
+
export { ProgressEvent, pluginEvents };
|
|
13
|
+
//# sourceMappingURL=progress.d.cts.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import "./contract.mjs";
|
|
2
|
+
import { Effect } from "effect";
|
|
3
|
+
import { EventEmitter } from "node:events";
|
|
4
|
+
//#region src/progress.d.ts
|
|
5
|
+
type ProgressEvent = {
|
|
6
|
+
phase: string;
|
|
7
|
+
status: "running" | "done" | "error";
|
|
8
|
+
durationMs?: number;
|
|
9
|
+
};
|
|
10
|
+
declare const pluginEvents: EventEmitter<any>;
|
|
11
|
+
//#endregion
|
|
12
|
+
export { ProgressEvent, pluginEvents };
|
|
13
|
+
//# sourceMappingURL=progress.d.mts.map
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Clock, Effect, Exit } from "effect";
|
|
2
|
+
import { EventEmitter } from "node:events";
|
|
3
|
+
|
|
4
|
+
//#region src/progress.ts
|
|
5
|
+
const pluginEvents = new EventEmitter();
|
|
6
|
+
const emitProgress = (event) => Effect.sync(() => {
|
|
7
|
+
pluginEvents.emit("progress", event);
|
|
8
|
+
});
|
|
9
|
+
const timedPhase = Effect.fn("timedPhase")(function* (timings, name, effect) {
|
|
10
|
+
yield* emitProgress({
|
|
11
|
+
phase: name,
|
|
12
|
+
status: "running"
|
|
13
|
+
});
|
|
14
|
+
const startedAt = yield* Clock.currentTimeMillis;
|
|
15
|
+
const exit = yield* Effect.exit(effect);
|
|
16
|
+
const durationMs = (yield* Clock.currentTimeMillis) - startedAt;
|
|
17
|
+
if (Exit.isSuccess(exit)) {
|
|
18
|
+
timings.push({
|
|
19
|
+
name,
|
|
20
|
+
durationMs
|
|
21
|
+
});
|
|
22
|
+
yield* emitProgress({
|
|
23
|
+
phase: name,
|
|
24
|
+
status: "done",
|
|
25
|
+
durationMs
|
|
26
|
+
});
|
|
27
|
+
return exit.value;
|
|
28
|
+
}
|
|
29
|
+
yield* emitProgress({
|
|
30
|
+
phase: name,
|
|
31
|
+
status: "error",
|
|
32
|
+
durationMs
|
|
33
|
+
});
|
|
34
|
+
return yield* Effect.failCause(exit.cause);
|
|
35
|
+
});
|
|
36
|
+
function timePhase(timings, name, fn) {
|
|
37
|
+
return Effect.runPromise(timedPhase(timings, name, Effect.promise(fn)));
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
//#endregion
|
|
41
|
+
export { emitProgress, pluginEvents, timePhase, timedPhase };
|
|
42
|
+
//# sourceMappingURL=progress.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress.mjs","names":[],"sources":["../src/progress.ts"],"sourcesContent":["import { EventEmitter } from \"node:events\";\nimport { Clock, Effect, Exit } from \"effect\";\nimport type { PhaseTiming } from \"./contract\";\n\nexport type ProgressEvent = {\n phase: string;\n status: \"running\" | \"done\" | \"error\";\n durationMs?: number;\n};\n\nexport const pluginEvents = new EventEmitter();\n\nexport const emitProgress = (event: ProgressEvent) =>\n Effect.sync(() => {\n pluginEvents.emit(\"progress\", event);\n });\n\nexport const timedPhase = Effect.fn(\"timedPhase\")(function* <A, E, R>(\n timings: PhaseTiming[],\n name: string,\n effect: Effect.Effect<A, E, R>,\n) {\n yield* emitProgress({ phase: name, status: \"running\" });\n const startedAt = yield* Clock.currentTimeMillis;\n const exit = yield* Effect.exit(effect);\n const durationMs = (yield* Clock.currentTimeMillis) - startedAt;\n if (Exit.isSuccess(exit)) {\n timings.push({ name, durationMs });\n yield* emitProgress({ phase: name, status: \"done\", durationMs });\n return exit.value;\n }\n yield* emitProgress({ phase: name, status: \"error\", durationMs });\n return yield* Effect.failCause(exit.cause);\n});\n\nexport function timePhase<T>(\n timings: PhaseTiming[],\n name: string,\n fn: () => Promise<T>,\n): Promise<T> {\n return Effect.runPromise(timedPhase(timings, name, Effect.promise(fn)));\n}\n"],"mappings":";;;;AAUA,MAAa,eAAe,IAAI,aAAa;AAE7C,MAAa,gBAAgB,UAC3B,OAAO,WAAW;CAChB,aAAa,KAAK,YAAY,KAAK;AACrC,CAAC;AAEH,MAAa,aAAa,OAAO,GAAG,YAAY,CAAC,CAAC,WAChD,SACA,MACA,QACA;CACA,OAAO,aAAa;EAAE,OAAO;EAAM,QAAQ;CAAU,CAAC;CACtD,MAAM,YAAY,OAAO,MAAM;CAC/B,MAAM,OAAO,OAAO,OAAO,KAAK,MAAM;CACtC,MAAM,cAAc,OAAO,MAAM,qBAAqB;CACtD,IAAI,KAAK,UAAU,IAAI,GAAG;EACxB,QAAQ,KAAK;GAAE;GAAM;EAAW,CAAC;EACjC,OAAO,aAAa;GAAE,OAAO;GAAM,QAAQ;GAAQ;EAAW,CAAC;EAC/D,OAAO,KAAK;CACd;CACA,OAAO,aAAa;EAAE,OAAO;EAAM,QAAQ;EAAS;CAAW,CAAC;CAChE,OAAO,OAAO,OAAO,UAAU,KAAK,KAAK;AAC3C,CAAC;AAED,SAAgB,UACd,SACA,MACA,IACY;CACZ,OAAO,OAAO,WAAW,WAAW,SAAS,MAAM,OAAO,QAAQ,EAAE,CAAC,CAAC;AACxE"}
|