anypick 1.0.0 → 1.1.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 +16 -582
- package/bin/anypick.js +249 -0
- package/package.json +14 -106
- package/dist/adapters.d.ts +0 -4
- package/dist/adapters.d.ts.map +0 -1
- package/dist/adapters.js +0 -2
- package/dist/catalog/model-fetch.d.ts +0 -34
- package/dist/catalog/model-fetch.d.ts.map +0 -1
- package/dist/catalog/model-fetch.js +0 -99
- package/dist/catalog/model-fetch.js.map +0 -1
- package/dist/catalog/providers.d.ts +0 -42
- package/dist/catalog/providers.d.ts.map +0 -1
- package/dist/catalog/providers.js +0 -424
- package/dist/catalog/providers.js.map +0 -1
- package/dist/cli/bootstrap.d.ts +0 -3
- package/dist/cli/bootstrap.d.ts.map +0 -1
- package/dist/cli/bootstrap.js +0 -78
- package/dist/cli/bootstrap.js.map +0 -1
- package/dist/cli/commands.d.ts +0 -29
- package/dist/cli/commands.d.ts.map +0 -1
- package/dist/cli/commands.js +0 -1043
- package/dist/cli/commands.js.map +0 -1
- package/dist/cli/completion.d.ts +0 -6
- package/dist/cli/completion.d.ts.map +0 -1
- package/dist/cli/completion.js +0 -202
- package/dist/cli/completion.js.map +0 -1
- package/dist/cli/errors.d.ts +0 -20
- package/dist/cli/errors.d.ts.map +0 -1
- package/dist/cli/errors.js +0 -47
- package/dist/cli/errors.js.map +0 -1
- package/dist/cli/format.d.ts +0 -6
- package/dist/cli/format.d.ts.map +0 -1
- package/dist/cli/format.js +0 -75
- package/dist/cli/format.js.map +0 -1
- package/dist/cli/help.d.ts +0 -6
- package/dist/cli/help.d.ts.map +0 -1
- package/dist/cli/help.js +0 -66
- package/dist/cli/help.js.map +0 -1
- package/dist/cli/interactive-accounts.d.ts +0 -3
- package/dist/cli/interactive-accounts.d.ts.map +0 -1
- package/dist/cli/interactive-accounts.js +0 -86
- package/dist/cli/interactive-accounts.js.map +0 -1
- package/dist/cli/interactive-maintenance.d.ts +0 -4
- package/dist/cli/interactive-maintenance.d.ts.map +0 -1
- package/dist/cli/interactive-maintenance.js +0 -30
- package/dist/cli/interactive-maintenance.js.map +0 -1
- package/dist/cli/interactive.d.ts +0 -14
- package/dist/cli/interactive.d.ts.map +0 -1
- package/dist/cli/interactive.js +0 -242
- package/dist/cli/interactive.js.map +0 -1
- package/dist/cli/launch-client.d.ts +0 -18
- package/dist/cli/launch-client.d.ts.map +0 -1
- package/dist/cli/launch-client.js +0 -117
- package/dist/cli/launch-client.js.map +0 -1
- package/dist/cli/launcher-model.d.ts +0 -64
- package/dist/cli/launcher-model.d.ts.map +0 -1
- package/dist/cli/launcher-model.js +0 -200
- package/dist/cli/launcher-model.js.map +0 -1
- package/dist/cli/launcher-render.d.ts +0 -22
- package/dist/cli/launcher-render.d.ts.map +0 -1
- package/dist/cli/launcher-render.js +0 -113
- package/dist/cli/launcher-render.js.map +0 -1
- package/dist/cli/launcher.d.ts +0 -27
- package/dist/cli/launcher.d.ts.map +0 -1
- package/dist/cli/launcher.js +0 -93
- package/dist/cli/launcher.js.map +0 -1
- package/dist/cli/local-health.d.ts +0 -17
- package/dist/cli/local-health.d.ts.map +0 -1
- package/dist/cli/local-health.js +0 -31
- package/dist/cli/local-health.js.map +0 -1
- package/dist/cli/plugin-commands.d.ts +0 -4
- package/dist/cli/plugin-commands.d.ts.map +0 -1
- package/dist/cli/plugin-commands.js +0 -160
- package/dist/cli/plugin-commands.js.map +0 -1
- package/dist/cli/primary.d.ts +0 -18
- package/dist/cli/primary.d.ts.map +0 -1
- package/dist/cli/primary.js +0 -593
- package/dist/cli/primary.js.map +0 -1
- package/dist/cli/render-util.d.ts +0 -24
- package/dist/cli/render-util.d.ts.map +0 -1
- package/dist/cli/render-util.js +0 -58
- package/dist/cli/render-util.js.map +0 -1
- package/dist/cli/ux.d.ts +0 -43
- package/dist/cli/ux.d.ts.map +0 -1
- package/dist/cli/ux.js +0 -114
- package/dist/cli/ux.js.map +0 -1
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -35
- package/dist/cli.js.map +0 -1
- package/dist/clients/claude-client-apply.d.ts +0 -8
- package/dist/clients/claude-client-apply.d.ts.map +0 -1
- package/dist/clients/claude-client-apply.js +0 -108
- package/dist/clients/claude-client-apply.js.map +0 -1
- package/dist/clients/claude-code.d.ts +0 -5
- package/dist/clients/claude-code.d.ts.map +0 -1
- package/dist/clients/claude-code.js +0 -189
- package/dist/clients/claude-code.js.map +0 -1
- package/dist/clients/claude-settings-guard.d.ts +0 -18
- package/dist/clients/claude-settings-guard.d.ts.map +0 -1
- package/dist/clients/codex-desktop-catalog.d.ts +0 -67
- package/dist/clients/codex-desktop-catalog.d.ts.map +0 -1
- package/dist/clients/codex-desktop-catalog.js +0 -212
- package/dist/clients/codex-desktop-catalog.js.map +0 -1
- package/dist/clients/codex.d.ts +0 -181
- package/dist/clients/codex.d.ts.map +0 -1
- package/dist/clients/codex.js +0 -783
- package/dist/clients/codex.js.map +0 -1
- package/dist/clients/env-files.d.ts +0 -14
- package/dist/clients/env-files.d.ts.map +0 -1
- package/dist/clients/env-files.js +0 -50
- package/dist/clients/env-files.js.map +0 -1
- package/dist/clients/gemini-client-utils.d.ts +0 -4
- package/dist/clients/gemini-client-utils.d.ts.map +0 -1
- package/dist/clients/gemini-client-utils.js +0 -33
- package/dist/clients/gemini-client-utils.js.map +0 -1
- package/dist/clients/gemini.d.ts +0 -16
- package/dist/clients/gemini.d.ts.map +0 -1
- package/dist/clients/gemini.js +0 -233
- package/dist/clients/gemini.js.map +0 -1
- package/dist/clients/index.d.ts +0 -14
- package/dist/clients/index.d.ts.map +0 -1
- package/dist/clients/index.js +0 -18
- package/dist/clients/index.js.map +0 -1
- package/dist/clients/isolation.d.ts +0 -28
- package/dist/clients/isolation.d.ts.map +0 -1
- package/dist/clients/isolation.js +0 -131
- package/dist/clients/isolation.js.map +0 -1
- package/dist/clients/kiro.d.ts +0 -10
- package/dist/clients/kiro.d.ts.map +0 -1
- package/dist/clients/kiro.js +0 -168
- package/dist/clients/kiro.js.map +0 -1
- package/dist/clients/model-roles.d.ts +0 -58
- package/dist/clients/model-roles.d.ts.map +0 -1
- package/dist/clients/model-roles.js +0 -139
- package/dist/clients/model-roles.js.map +0 -1
- package/dist/clients/registry.d.ts +0 -7
- package/dist/clients/registry.d.ts.map +0 -1
- package/dist/clients/registry.js +0 -16
- package/dist/clients/registry.js.map +0 -1
- package/dist/clients/resolve.d.ts +0 -27
- package/dist/clients/resolve.d.ts.map +0 -1
- package/dist/clients/resolve.js +0 -49
- package/dist/clients/resolve.js.map +0 -1
- package/dist/core/account-codec.d.ts +0 -32
- package/dist/core/account-codec.d.ts.map +0 -1
- package/dist/core/account-codec.js +0 -134
- package/dist/core/account-codec.js.map +0 -1
- package/dist/core/account-transfer.d.ts +0 -20
- package/dist/core/account-transfer.d.ts.map +0 -1
- package/dist/core/account-transfer.js +0 -136
- package/dist/core/account-transfer.js.map +0 -1
- package/dist/core/activation-executor.d.ts +0 -72
- package/dist/core/activation-executor.d.ts.map +0 -1
- package/dist/core/activation-executor.js +0 -690
- package/dist/core/activation-executor.js.map +0 -1
- package/dist/core/activation-models.d.ts +0 -6
- package/dist/core/activation-models.d.ts.map +0 -1
- package/dist/core/activation-models.js +0 -33
- package/dist/core/activation-models.js.map +0 -1
- package/dist/core/activation-planner.d.ts +0 -38
- package/dist/core/activation-planner.d.ts.map +0 -1
- package/dist/core/activation-planner.js +0 -248
- package/dist/core/activation-planner.js.map +0 -1
- package/dist/core/activation-protocol.d.ts +0 -3
- package/dist/core/activation-protocol.d.ts.map +0 -1
- package/dist/core/activation-protocol.js +0 -9
- package/dist/core/activation-protocol.js.map +0 -1
- package/dist/core/activation-transport.d.ts +0 -15
- package/dist/core/activation-transport.d.ts.map +0 -1
- package/dist/core/activation-transport.js +0 -23
- package/dist/core/activation-transport.js.map +0 -1
- package/dist/core/app.d.ts +0 -149
- package/dist/core/app.d.ts.map +0 -1
- package/dist/core/app.js +0 -372
- package/dist/core/app.js.map +0 -1
- package/dist/core/binding-service.d.ts +0 -93
- package/dist/core/binding-service.d.ts.map +0 -1
- package/dist/core/binding-service.js +0 -281
- package/dist/core/binding-service.js.map +0 -1
- package/dist/core/binding-store.d.ts +0 -23
- package/dist/core/binding-store.d.ts.map +0 -1
- package/dist/core/binding-store.js +0 -154
- package/dist/core/binding-store.js.map +0 -1
- package/dist/core/brand.d.ts +0 -18
- package/dist/core/brand.d.ts.map +0 -1
- package/dist/core/brand.js +0 -22
- package/dist/core/brand.js.map +0 -1
- package/dist/core/capabilities.d.ts +0 -30
- package/dist/core/capabilities.d.ts.map +0 -1
- package/dist/core/capabilities.js +0 -27
- package/dist/core/capabilities.js.map +0 -1
- package/dist/core/client-state-store.d.ts +0 -17
- package/dist/core/client-state-store.d.ts.map +0 -1
- package/dist/core/client-state-store.js +0 -47
- package/dist/core/client-state-store.js.map +0 -1
- package/dist/core/codec/account.d.ts +0 -52
- package/dist/core/codec/account.d.ts.map +0 -1
- package/dist/core/codec/account.js +0 -69
- package/dist/core/codec/account.js.map +0 -1
- package/dist/core/codec/bindings.d.ts +0 -38
- package/dist/core/codec/bindings.d.ts.map +0 -1
- package/dist/core/codec/bindings.js +0 -79
- package/dist/core/codec/bindings.js.map +0 -1
- package/dist/core/codec/operations.d.ts +0 -36
- package/dist/core/codec/operations.d.ts.map +0 -1
- package/dist/core/codec/operations.js +0 -82
- package/dist/core/codec/operations.js.map +0 -1
- package/dist/core/codec/primitives.d.ts +0 -59
- package/dist/core/codec/primitives.d.ts.map +0 -1
- package/dist/core/codec/primitives.js +0 -123
- package/dist/core/codec/primitives.js.map +0 -1
- package/dist/core/codec/proxy-hub.d.ts +0 -43
- package/dist/core/codec/proxy-hub.d.ts.map +0 -1
- package/dist/core/codec/proxy-hub.js +0 -69
- package/dist/core/codec/proxy-hub.js.map +0 -1
- package/dist/core/codec/runtime.d.ts +0 -41
- package/dist/core/codec/runtime.d.ts.map +0 -1
- package/dist/core/codec/runtime.js +0 -66
- package/dist/core/codec/runtime.js.map +0 -1
- package/dist/core/codec.d.ts +0 -43
- package/dist/core/codec.d.ts.map +0 -1
- package/dist/core/codec.js +0 -69
- package/dist/core/codec.js.map +0 -1
- package/dist/core/codex-live-config.d.ts +0 -92
- package/dist/core/codex-live-config.d.ts.map +0 -1
- package/dist/core/codex-live-config.js +0 -263
- package/dist/core/codex-live-config.js.map +0 -1
- package/dist/core/config-service.d.ts +0 -35
- package/dist/core/config-service.d.ts.map +0 -1
- package/dist/core/config-service.js +0 -87
- package/dist/core/config-service.js.map +0 -1
- package/dist/core/config.d.ts +0 -14
- package/dist/core/config.d.ts.map +0 -1
- package/dist/core/config.js +0 -45
- package/dist/core/config.js.map +0 -1
- package/dist/core/db-schema.d.ts +0 -30
- package/dist/core/db-schema.d.ts.map +0 -1
- package/dist/core/db-schema.js +0 -278
- package/dist/core/db-schema.js.map +0 -1
- package/dist/core/db.d.ts +0 -72
- package/dist/core/db.d.ts.map +0 -1
- package/dist/core/db.js +0 -192
- package/dist/core/db.js.map +0 -1
- package/dist/core/doctor-fixes.d.ts +0 -3
- package/dist/core/doctor-fixes.d.ts.map +0 -1
- package/dist/core/doctor-fixes.js +0 -102
- package/dist/core/doctor-fixes.js.map +0 -1
- package/dist/core/doctor-format.d.ts +0 -10
- package/dist/core/doctor-format.d.ts.map +0 -1
- package/dist/core/doctor-format.js +0 -45
- package/dist/core/doctor-format.js.map +0 -1
- package/dist/core/doctor-report.d.ts +0 -3
- package/dist/core/doctor-report.d.ts.map +0 -1
- package/dist/core/doctor-report.js +0 -174
- package/dist/core/doctor-report.js.map +0 -1
- package/dist/core/doctor-scan.d.ts +0 -7
- package/dist/core/doctor-scan.d.ts.map +0 -1
- package/dist/core/doctor-scan.js +0 -139
- package/dist/core/doctor-scan.js.map +0 -1
- package/dist/core/doctor-types.d.ts +0 -89
- package/dist/core/doctor-types.d.ts.map +0 -1
- package/dist/core/doctor-types.js +0 -14
- package/dist/core/doctor-types.js.map +0 -1
- package/dist/core/doctor-utils.d.ts +0 -3
- package/dist/core/doctor-utils.d.ts.map +0 -1
- package/dist/core/doctor-utils.js +0 -36
- package/dist/core/doctor-utils.js.map +0 -1
- package/dist/core/doctor.d.ts +0 -14
- package/dist/core/doctor.d.ts.map +0 -1
- package/dist/core/doctor.js +0 -127
- package/dist/core/doctor.js.map +0 -1
- package/dist/core/events.d.ts +0 -58
- package/dist/core/events.d.ts.map +0 -1
- package/dist/core/events.js +0 -88
- package/dist/core/events.js.map +0 -1
- package/dist/core/journal.d.ts +0 -23
- package/dist/core/journal.d.ts.map +0 -1
- package/dist/core/journal.js +0 -93
- package/dist/core/journal.js.map +0 -1
- package/dist/core/lease-store.d.ts +0 -22
- package/dist/core/lease-store.d.ts.map +0 -1
- package/dist/core/lease-store.js +0 -81
- package/dist/core/lease-store.js.map +0 -1
- package/dist/core/migrate-bindings.d.ts +0 -10
- package/dist/core/migrate-bindings.d.ts.map +0 -1
- package/dist/core/migrate-bindings.js +0 -98
- package/dist/core/migrate-bindings.js.map +0 -1
- package/dist/core/migrate-fs.d.ts +0 -11
- package/dist/core/migrate-fs.d.ts.map +0 -1
- package/dist/core/migrate-fs.js +0 -184
- package/dist/core/migrate-fs.js.map +0 -1
- package/dist/core/model-cache-store.d.ts +0 -27
- package/dist/core/model-cache-store.d.ts.map +0 -1
- package/dist/core/model-cache-store.js +0 -50
- package/dist/core/model-cache-store.js.map +0 -1
- package/dist/core/model-discovery.d.ts +0 -66
- package/dist/core/model-discovery.d.ts.map +0 -1
- package/dist/core/model-discovery.js +0 -127
- package/dist/core/model-discovery.js.map +0 -1
- package/dist/core/model-policy.d.ts +0 -40
- package/dist/core/model-policy.d.ts.map +0 -1
- package/dist/core/model-policy.js +0 -77
- package/dist/core/model-policy.js.map +0 -1
- package/dist/core/model-roles.d.ts +0 -9
- package/dist/core/model-roles.d.ts.map +0 -1
- package/dist/core/model-roles.js +0 -20
- package/dist/core/model-roles.js.map +0 -1
- package/dist/core/mutation-lock.d.ts +0 -31
- package/dist/core/mutation-lock.d.ts.map +0 -1
- package/dist/core/mutation-lock.js +0 -69
- package/dist/core/mutation-lock.js.map +0 -1
- package/dist/core/paths.d.ts +0 -49
- package/dist/core/paths.d.ts.map +0 -1
- package/dist/core/paths.js +0 -110
- package/dist/core/paths.js.map +0 -1
- package/dist/core/plugin-loader.d.ts +0 -40
- package/dist/core/plugin-loader.d.ts.map +0 -1
- package/dist/core/plugin-loader.js +0 -184
- package/dist/core/plugin-loader.js.map +0 -1
- package/dist/core/plugin-service.d.ts +0 -32
- package/dist/core/plugin-service.d.ts.map +0 -1
- package/dist/core/plugin-service.js +0 -110
- package/dist/core/plugin-service.js.map +0 -1
- package/dist/core/plugin-store.d.ts +0 -18
- package/dist/core/plugin-store.d.ts.map +0 -1
- package/dist/core/plugin-store.js +0 -50
- package/dist/core/plugin-store.js.map +0 -1
- package/dist/core/pool-store.d.ts +0 -44
- package/dist/core/pool-store.d.ts.map +0 -1
- package/dist/core/pool-store.js +0 -198
- package/dist/core/pool-store.js.map +0 -1
- package/dist/core/preset-store.d.ts +0 -29
- package/dist/core/preset-store.d.ts.map +0 -1
- package/dist/core/preset-store.js +0 -105
- package/dist/core/preset-store.js.map +0 -1
- package/dist/core/profile-service.d.ts +0 -50
- package/dist/core/profile-service.d.ts.map +0 -1
- package/dist/core/profile-service.js +0 -149
- package/dist/core/profile-service.js.map +0 -1
- package/dist/core/profile-store.d.ts +0 -20
- package/dist/core/profile-store.d.ts.map +0 -1
- package/dist/core/profile-store.js +0 -92
- package/dist/core/profile-store.js.map +0 -1
- package/dist/core/profile-synth.d.ts +0 -24
- package/dist/core/profile-synth.d.ts.map +0 -1
- package/dist/core/profile-synth.js +0 -30
- package/dist/core/profile-synth.js.map +0 -1
- package/dist/core/project-root.d.ts +0 -7
- package/dist/core/project-root.d.ts.map +0 -1
- package/dist/core/project-root.js +0 -23
- package/dist/core/project-root.js.map +0 -1
- package/dist/core/proxy-hub-cli.d.ts +0 -3
- package/dist/core/proxy-hub-cli.d.ts.map +0 -1
- package/dist/core/proxy-hub-cli.js +0 -80
- package/dist/core/proxy-hub-cli.js.map +0 -1
- package/dist/core/proxy-hub-routes.d.ts +0 -22
- package/dist/core/proxy-hub-routes.d.ts.map +0 -1
- package/dist/core/proxy-hub-routes.js +0 -92
- package/dist/core/proxy-hub-routes.js.map +0 -1
- package/dist/core/proxy-hub-server.d.ts +0 -59
- package/dist/core/proxy-hub-server.d.ts.map +0 -1
- package/dist/core/proxy-hub-server.js +0 -409
- package/dist/core/proxy-hub-server.js.map +0 -1
- package/dist/core/proxy-hub-service.d.ts +0 -97
- package/dist/core/proxy-hub-service.d.ts.map +0 -1
- package/dist/core/proxy-hub-service.js +0 -553
- package/dist/core/proxy-hub-service.js.map +0 -1
- package/dist/core/proxy-hub-store.d.ts +0 -28
- package/dist/core/proxy-hub-store.d.ts.map +0 -1
- package/dist/core/proxy-hub-store.js +0 -152
- package/dist/core/proxy-hub-store.js.map +0 -1
- package/dist/core/proxy-lifecycle.d.ts +0 -26
- package/dist/core/proxy-lifecycle.d.ts.map +0 -1
- package/dist/core/proxy-lifecycle.js +0 -33
- package/dist/core/proxy-lifecycle.js.map +0 -1
- package/dist/core/proxy-ports.d.ts +0 -50
- package/dist/core/proxy-ports.d.ts.map +0 -1
- package/dist/core/proxy-ports.js +0 -86
- package/dist/core/proxy-ports.js.map +0 -1
- package/dist/core/proxy-service.d.ts +0 -184
- package/dist/core/proxy-service.d.ts.map +0 -1
- package/dist/core/proxy-service.js +0 -860
- package/dist/core/proxy-service.js.map +0 -1
- package/dist/core/quota-guard-policy.d.ts +0 -8
- package/dist/core/quota-guard-policy.d.ts.map +0 -1
- package/dist/core/quota-guard-policy.js +0 -21
- package/dist/core/quota-guard-policy.js.map +0 -1
- package/dist/core/realign-proxy-clients.d.ts +0 -19
- package/dist/core/realign-proxy-clients.d.ts.map +0 -1
- package/dist/core/realign-proxy-clients.js +0 -40
- package/dist/core/realign-proxy-clients.js.map +0 -1
- package/dist/core/refs.d.ts +0 -84
- package/dist/core/refs.d.ts.map +0 -1
- package/dist/core/refs.js +0 -250
- package/dist/core/refs.js.map +0 -1
- package/dist/core/registry.d.ts +0 -46
- package/dist/core/registry.d.ts.map +0 -1
- package/dist/core/registry.js +0 -70
- package/dist/core/registry.js.map +0 -1
- package/dist/core/resolve-source.d.ts +0 -54
- package/dist/core/resolve-source.d.ts.map +0 -1
- package/dist/core/resolve-source.js +0 -148
- package/dist/core/resolve-source.js.map +0 -1
- package/dist/core/runtime-service.d.ts +0 -158
- package/dist/core/runtime-service.d.ts.map +0 -1
- package/dist/core/runtime-service.js +0 -422
- package/dist/core/runtime-service.js.map +0 -1
- package/dist/core/service.d.ts +0 -200
- package/dist/core/service.d.ts.map +0 -1
- package/dist/core/service.js +0 -643
- package/dist/core/service.js.map +0 -1
- package/dist/core/store-snapshot.d.ts +0 -10
- package/dist/core/store-snapshot.d.ts.map +0 -1
- package/dist/core/store-snapshot.js +0 -79
- package/dist/core/store-snapshot.js.map +0 -1
- package/dist/core/store.d.ts +0 -68
- package/dist/core/store.d.ts.map +0 -1
- package/dist/core/store.js +0 -159
- package/dist/core/store.js.map +0 -1
- package/dist/core/tray-runtime.d.ts +0 -15
- package/dist/core/tray-runtime.d.ts.map +0 -1
- package/dist/core/tray-runtime.js +0 -33
- package/dist/core/tray-runtime.js.map +0 -1
- package/dist/core/tray-settings-service.d.ts +0 -7
- package/dist/core/tray-settings-service.d.ts.map +0 -1
- package/dist/core/tray-settings-service.js +0 -24
- package/dist/core/tray-settings-service.js.map +0 -1
- package/dist/core/update.d.ts +0 -26
- package/dist/core/update.d.ts.map +0 -1
- package/dist/core/update.js +0 -128
- package/dist/core/update.js.map +0 -1
- package/dist/index.d.ts +0 -12
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -7
- package/dist/network/egress/allowlist.d.ts +0 -2
- package/dist/network/egress/allowlist.d.ts.map +0 -1
- package/dist/network/egress/allowlist.js +0 -14
- package/dist/network/egress/allowlist.js.map +0 -1
- package/dist/network/egress/direct.d.ts +0 -17
- package/dist/network/egress/direct.d.ts.map +0 -1
- package/dist/network/egress/direct.js +0 -28
- package/dist/network/egress/direct.js.map +0 -1
- package/dist/network/egress/errors.d.ts +0 -4
- package/dist/network/egress/errors.d.ts.map +0 -1
- package/dist/network/egress/errors.js +0 -8
- package/dist/network/egress/errors.js.map +0 -1
- package/dist/network/egress/index.d.ts +0 -6
- package/dist/network/egress/index.d.ts.map +0 -1
- package/dist/network/egress/index.js +0 -11
- package/dist/network/egress/index.js.map +0 -1
- package/dist/network/egress/types.d.ts +0 -16
- package/dist/network/egress/types.d.ts.map +0 -1
- package/dist/presentation/client-name.d.ts +0 -14
- package/dist/presentation/client-name.d.ts.map +0 -1
- package/dist/presentation/client-name.js +0 -22
- package/dist/presentation/client-name.js.map +0 -1
- package/dist/presentation/layout.d.ts +0 -7
- package/dist/presentation/layout.d.ts.map +0 -1
- package/dist/presentation/layout.js +0 -10
- package/dist/presentation/layout.js.map +0 -1
- package/dist/providers/auth-fingerprint.d.ts +0 -56
- package/dist/providers/auth-fingerprint.d.ts.map +0 -1
- package/dist/providers/auth-fingerprint.js +0 -163
- package/dist/providers/auth-fingerprint.js.map +0 -1
- package/dist/providers/claude.d.ts +0 -43
- package/dist/providers/claude.d.ts.map +0 -1
- package/dist/providers/claude.js +0 -191
- package/dist/providers/claude.js.map +0 -1
- package/dist/providers/codex-identity.d.ts +0 -13
- package/dist/providers/codex-identity.d.ts.map +0 -1
- package/dist/providers/codex-identity.js +0 -69
- package/dist/providers/codex-identity.js.map +0 -1
- package/dist/providers/codex-refresh.d.ts +0 -30
- package/dist/providers/codex-refresh.d.ts.map +0 -1
- package/dist/providers/codex-refresh.js +0 -64
- package/dist/providers/codex-refresh.js.map +0 -1
- package/dist/providers/codex-usage.d.ts +0 -3
- package/dist/providers/codex-usage.d.ts.map +0 -1
- package/dist/providers/codex-usage.js +0 -42
- package/dist/providers/codex-usage.js.map +0 -1
- package/dist/providers/codex.d.ts +0 -61
- package/dist/providers/codex.d.ts.map +0 -1
- package/dist/providers/codex.js +0 -212
- package/dist/providers/codex.js.map +0 -1
- package/dist/providers/gemini-antigravity-oauth.d.ts +0 -83
- package/dist/providers/gemini-antigravity-oauth.d.ts.map +0 -1
- package/dist/providers/gemini-antigravity-oauth.js +0 -343
- package/dist/providers/gemini-antigravity-oauth.js.map +0 -1
- package/dist/providers/gemini-antigravity-state.d.ts +0 -35
- package/dist/providers/gemini-antigravity-state.d.ts.map +0 -1
- package/dist/providers/gemini-antigravity-state.js +0 -433
- package/dist/providers/gemini-antigravity-state.js.map +0 -1
- package/dist/providers/gemini-env.d.ts +0 -8
- package/dist/providers/gemini-env.d.ts.map +0 -1
- package/dist/providers/gemini-env.js +0 -78
- package/dist/providers/gemini-env.js.map +0 -1
- package/dist/providers/gemini-identity.d.ts +0 -2
- package/dist/providers/gemini-identity.d.ts.map +0 -1
- package/dist/providers/gemini-identity.js +0 -14
- package/dist/providers/gemini-identity.js.map +0 -1
- package/dist/providers/gemini-proxy/main.d.ts +0 -3
- package/dist/providers/gemini-proxy/main.d.ts.map +0 -1
- package/dist/providers/gemini-proxy/main.js +0 -176
- package/dist/providers/gemini-proxy/main.js.map +0 -1
- package/dist/providers/gemini-proxy/server.d.ts +0 -57
- package/dist/providers/gemini-proxy/server.d.ts.map +0 -1
- package/dist/providers/gemini-proxy/server.js +0 -1240
- package/dist/providers/gemini-proxy/server.js.map +0 -1
- package/dist/providers/gemini-proxy-entry.d.ts +0 -2
- package/dist/providers/gemini-proxy-entry.d.ts.map +0 -1
- package/dist/providers/gemini-proxy-entry.js +0 -16
- package/dist/providers/gemini-proxy-entry.js.map +0 -1
- package/dist/providers/gemini-proxy-lifecycle.d.ts +0 -11
- package/dist/providers/gemini-proxy-lifecycle.d.ts.map +0 -1
- package/dist/providers/gemini-proxy-lifecycle.js +0 -131
- package/dist/providers/gemini-proxy-lifecycle.js.map +0 -1
- package/dist/providers/gemini.d.ts +0 -137
- package/dist/providers/gemini.d.ts.map +0 -1
- package/dist/providers/gemini.js +0 -471
- package/dist/providers/gemini.js.map +0 -1
- package/dist/providers/grok-proxy/auth.d.ts +0 -27
- package/dist/providers/grok-proxy/auth.d.ts.map +0 -1
- package/dist/providers/grok-proxy/auth.js +0 -123
- package/dist/providers/grok-proxy/auth.js.map +0 -1
- package/dist/providers/grok-proxy/main.d.ts +0 -3
- package/dist/providers/grok-proxy/main.d.ts.map +0 -1
- package/dist/providers/grok-proxy/main.js +0 -111
- package/dist/providers/grok-proxy/main.js.map +0 -1
- package/dist/providers/grok-proxy/server.d.ts +0 -46
- package/dist/providers/grok-proxy/server.d.ts.map +0 -1
- package/dist/providers/grok-proxy/server.js +0 -595
- package/dist/providers/grok-proxy/server.js.map +0 -1
- package/dist/providers/grok.d.ts +0 -38
- package/dist/providers/grok.d.ts.map +0 -1
- package/dist/providers/grok.js +0 -250
- package/dist/providers/grok.js.map +0 -1
- package/dist/providers/index.d.ts +0 -14
- package/dist/providers/index.d.ts.map +0 -1
- package/dist/providers/index.js +0 -23
- package/dist/providers/index.js.map +0 -1
- package/dist/providers/kiro-secret-store.d.ts +0 -39
- package/dist/providers/kiro-secret-store.d.ts.map +0 -1
- package/dist/providers/kiro-secret-store.js +0 -168
- package/dist/providers/kiro-secret-store.js.map +0 -1
- package/dist/providers/kiro.d.ts +0 -50
- package/dist/providers/kiro.d.ts.map +0 -1
- package/dist/providers/kiro.js +0 -373
- package/dist/providers/kiro.js.map +0 -1
- package/dist/providers/model-policy.d.ts +0 -15
- package/dist/providers/model-policy.d.ts.map +0 -1
- package/dist/providers/model-policy.js +0 -26
- package/dist/providers/model-policy.js.map +0 -1
- package/dist/providers/opencode-auth.d.ts +0 -67
- package/dist/providers/opencode-auth.d.ts.map +0 -1
- package/dist/providers/opencode-auth.js +0 -146
- package/dist/providers/opencode-auth.js.map +0 -1
- package/dist/providers/opencode-cli-entry.d.ts +0 -36
- package/dist/providers/opencode-cli-entry.d.ts.map +0 -1
- package/dist/providers/opencode-cli-entry.js +0 -90
- package/dist/providers/opencode-cli-entry.js.map +0 -1
- package/dist/providers/opencode-proxy/abort.d.ts +0 -8
- package/dist/providers/opencode-proxy/abort.d.ts.map +0 -1
- package/dist/providers/opencode-proxy/abort.js +0 -42
- package/dist/providers/opencode-proxy/abort.js.map +0 -1
- package/dist/providers/opencode-proxy/anthropic-handler.d.ts +0 -4
- package/dist/providers/opencode-proxy/anthropic-handler.d.ts.map +0 -1
- package/dist/providers/opencode-proxy/anthropic-handler.js +0 -108
- package/dist/providers/opencode-proxy/anthropic-handler.js.map +0 -1
- package/dist/providers/opencode-proxy/auth.d.ts +0 -38
- package/dist/providers/opencode-proxy/auth.d.ts.map +0 -1
- package/dist/providers/opencode-proxy/auth.js +0 -128
- package/dist/providers/opencode-proxy/auth.js.map +0 -1
- package/dist/providers/opencode-proxy/body.d.ts +0 -9
- package/dist/providers/opencode-proxy/body.d.ts.map +0 -1
- package/dist/providers/opencode-proxy/body.js +0 -69
- package/dist/providers/opencode-proxy/body.js.map +0 -1
- package/dist/providers/opencode-proxy/catalog-handlers.d.ts +0 -7
- package/dist/providers/opencode-proxy/catalog-handlers.d.ts.map +0 -1
- package/dist/providers/opencode-proxy/catalog-handlers.js +0 -132
- package/dist/providers/opencode-proxy/catalog-handlers.js.map +0 -1
- package/dist/providers/opencode-proxy/catalog.d.ts +0 -41
- package/dist/providers/opencode-proxy/catalog.d.ts.map +0 -1
- package/dist/providers/opencode-proxy/catalog.js +0 -146
- package/dist/providers/opencode-proxy/catalog.js.map +0 -1
- package/dist/providers/opencode-proxy/cli.d.ts +0 -2
- package/dist/providers/opencode-proxy/cli.d.ts.map +0 -1
- package/dist/providers/opencode-proxy/cli.js +0 -162
- package/dist/providers/opencode-proxy/cli.js.map +0 -1
- package/dist/providers/opencode-proxy/constants.d.ts +0 -13
- package/dist/providers/opencode-proxy/constants.d.ts.map +0 -1
- package/dist/providers/opencode-proxy/constants.js +0 -15
- package/dist/providers/opencode-proxy/constants.js.map +0 -1
- package/dist/providers/opencode-proxy/context-budget.d.ts +0 -31
- package/dist/providers/opencode-proxy/context-budget.d.ts.map +0 -1
- package/dist/providers/opencode-proxy/context-budget.js +0 -165
- package/dist/providers/opencode-proxy/context-budget.js.map +0 -1
- package/dist/providers/opencode-proxy/errors.d.ts +0 -5
- package/dist/providers/opencode-proxy/errors.d.ts.map +0 -1
- package/dist/providers/opencode-proxy/errors.js +0 -45
- package/dist/providers/opencode-proxy/errors.js.map +0 -1
- package/dist/providers/opencode-proxy/forwarders.d.ts +0 -7
- package/dist/providers/opencode-proxy/forwarders.d.ts.map +0 -1
- package/dist/providers/opencode-proxy/forwarders.js +0 -214
- package/dist/providers/opencode-proxy/forwarders.js.map +0 -1
- package/dist/providers/opencode-proxy/http.d.ts +0 -11
- package/dist/providers/opencode-proxy/http.d.ts.map +0 -1
- package/dist/providers/opencode-proxy/http.js +0 -97
- package/dist/providers/opencode-proxy/http.js.map +0 -1
- package/dist/providers/opencode-proxy/models.d.ts +0 -42
- package/dist/providers/opencode-proxy/models.d.ts.map +0 -1
- package/dist/providers/opencode-proxy/models.js +0 -148
- package/dist/providers/opencode-proxy/models.js.map +0 -1
- package/dist/providers/opencode-proxy/openai-handler.d.ts +0 -5
- package/dist/providers/opencode-proxy/openai-handler.d.ts.map +0 -1
- package/dist/providers/opencode-proxy/openai-handler.js +0 -115
- package/dist/providers/opencode-proxy/openai-handler.js.map +0 -1
- package/dist/providers/opencode-proxy/router.d.ts +0 -4
- package/dist/providers/opencode-proxy/router.d.ts.map +0 -1
- package/dist/providers/opencode-proxy/router.js +0 -65
- package/dist/providers/opencode-proxy/router.js.map +0 -1
- package/dist/providers/opencode-proxy/runtime.d.ts +0 -23
- package/dist/providers/opencode-proxy/runtime.d.ts.map +0 -1
- package/dist/providers/opencode-proxy/runtime.js +0 -158
- package/dist/providers/opencode-proxy/runtime.js.map +0 -1
- package/dist/providers/opencode-proxy/server.d.ts +0 -13
- package/dist/providers/opencode-proxy/server.d.ts.map +0 -1
- package/dist/providers/opencode-proxy/server.js +0 -52
- package/dist/providers/opencode-proxy/server.js.map +0 -1
- package/dist/providers/opencode-proxy/stream.d.ts +0 -4
- package/dist/providers/opencode-proxy/stream.d.ts.map +0 -1
- package/dist/providers/opencode-proxy/stream.js +0 -71
- package/dist/providers/opencode-proxy/stream.js.map +0 -1
- package/dist/providers/opencode-proxy/translate-stream.d.ts +0 -3
- package/dist/providers/opencode-proxy/translate-stream.d.ts.map +0 -1
- package/dist/providers/opencode-proxy/translate-stream.js +0 -205
- package/dist/providers/opencode-proxy/translate-stream.js.map +0 -1
- package/dist/providers/opencode-proxy/translate.d.ts +0 -11
- package/dist/providers/opencode-proxy/translate.d.ts.map +0 -1
- package/dist/providers/opencode-proxy/translate.js +0 -250
- package/dist/providers/opencode-proxy/translate.js.map +0 -1
- package/dist/providers/opencode-proxy/types.d.ts +0 -110
- package/dist/providers/opencode-proxy/types.d.ts.map +0 -1
- package/dist/providers/opencode-proxy/types.js +0 -38
- package/dist/providers/opencode-proxy/types.js.map +0 -1
- package/dist/providers/opencode-proxy-lifecycle.d.ts +0 -11
- package/dist/providers/opencode-proxy-lifecycle.d.ts.map +0 -1
- package/dist/providers/opencode-proxy-lifecycle.js +0 -144
- package/dist/providers/opencode-proxy-lifecycle.js.map +0 -1
- package/dist/providers/opencode.d.ts +0 -40
- package/dist/providers/opencode.d.ts.map +0 -1
- package/dist/providers/opencode.js +0 -190
- package/dist/providers/opencode.js.map +0 -1
- package/dist/providers/protocol/anthropic-convert.d.ts +0 -12
- package/dist/providers/protocol/anthropic-convert.d.ts.map +0 -1
- package/dist/providers/protocol/anthropic-convert.js +0 -113
- package/dist/providers/protocol/anthropic-convert.js.map +0 -1
- package/dist/providers/protocol/anthropic-helpers.d.ts +0 -13
- package/dist/providers/protocol/anthropic-helpers.d.ts.map +0 -1
- package/dist/providers/protocol/anthropic-helpers.js +0 -179
- package/dist/providers/protocol/anthropic-helpers.js.map +0 -1
- package/dist/providers/protocol/anthropic-stream-reader.d.ts +0 -13
- package/dist/providers/protocol/anthropic-stream-reader.d.ts.map +0 -1
- package/dist/providers/protocol/anthropic-stream-reader.js +0 -46
- package/dist/providers/protocol/anthropic-stream-reader.js.map +0 -1
- package/dist/providers/protocol/anthropic-stream.d.ts +0 -7
- package/dist/providers/protocol/anthropic-stream.d.ts.map +0 -1
- package/dist/providers/protocol/anthropic-stream.js +0 -318
- package/dist/providers/protocol/anthropic-stream.js.map +0 -1
- package/dist/providers/protocol/anthropic-types.d.ts +0 -240
- package/dist/providers/protocol/anthropic-types.d.ts.map +0 -1
- package/dist/providers/protocol/anthropic.d.ts +0 -20
- package/dist/providers/protocol/anthropic.d.ts.map +0 -1
- package/dist/providers/protocol/gemini/translate-anthropic.d.ts +0 -15
- package/dist/providers/protocol/gemini/translate-anthropic.d.ts.map +0 -1
- package/dist/providers/protocol/gemini/translate-anthropic.js +0 -84
- package/dist/providers/protocol/gemini/translate-anthropic.js.map +0 -1
- package/dist/providers/protocol/gemini/translate-chat.d.ts +0 -5
- package/dist/providers/protocol/gemini/translate-chat.d.ts.map +0 -1
- package/dist/providers/protocol/gemini/translate-chat.js +0 -142
- package/dist/providers/protocol/gemini/translate-chat.js.map +0 -1
- package/dist/providers/protocol/gemini/translate-models.d.ts +0 -40
- package/dist/providers/protocol/gemini/translate-models.d.ts.map +0 -1
- package/dist/providers/protocol/gemini/translate-models.js +0 -186
- package/dist/providers/protocol/gemini/translate-models.js.map +0 -1
- package/dist/providers/protocol/gemini/translate-responses.d.ts +0 -6
- package/dist/providers/protocol/gemini/translate-responses.d.ts.map +0 -1
- package/dist/providers/protocol/gemini/translate-responses.js +0 -187
- package/dist/providers/protocol/gemini/translate-responses.js.map +0 -1
- package/dist/providers/protocol/gemini/translate-schema.d.ts +0 -9
- package/dist/providers/protocol/gemini/translate-schema.d.ts.map +0 -1
- package/dist/providers/protocol/gemini/translate-schema.js +0 -48
- package/dist/providers/protocol/gemini/translate-schema.js.map +0 -1
- package/dist/providers/protocol/gemini/translate-shared.d.ts +0 -8
- package/dist/providers/protocol/gemini/translate-shared.d.ts.map +0 -1
- package/dist/providers/protocol/gemini/translate-shared.js +0 -47
- package/dist/providers/protocol/gemini/translate-shared.js.map +0 -1
- package/dist/providers/protocol/gemini/translate-thinking.d.ts +0 -7
- package/dist/providers/protocol/gemini/translate-thinking.d.ts.map +0 -1
- package/dist/providers/protocol/gemini/translate-thinking.js +0 -65
- package/dist/providers/protocol/gemini/translate-thinking.js.map +0 -1
- package/dist/providers/protocol/gemini/translate-types.d.ts +0 -133
- package/dist/providers/protocol/gemini/translate-types.d.ts.map +0 -1
- package/dist/providers/protocol/gemini/translate.d.ts +0 -7
- package/dist/providers/protocol/gemini/translate.d.ts.map +0 -1
- package/dist/providers/protocol/json-schema.d.ts +0 -52
- package/dist/providers/protocol/json-schema.d.ts.map +0 -1
- package/dist/providers/protocol/json-schema.js +0 -189
- package/dist/providers/protocol/json-schema.js.map +0 -1
- package/dist/providers/protocol/token-estimate.d.ts +0 -15
- package/dist/providers/protocol/token-estimate.d.ts.map +0 -1
- package/dist/providers/protocol/token-estimate.js +0 -34
- package/dist/providers/protocol/token-estimate.js.map +0 -1
- package/dist/providers/proxy-hub-backend.d.ts +0 -4
- package/dist/providers/proxy-hub-backend.d.ts.map +0 -1
- package/dist/providers/proxy-hub-backend.js +0 -11
- package/dist/providers/proxy-hub-backend.js.map +0 -1
- package/dist/providers/proxy-process.d.ts +0 -35
- package/dist/providers/proxy-process.d.ts.map +0 -1
- package/dist/providers/proxy-process.js +0 -119
- package/dist/providers/proxy-process.js.map +0 -1
- package/dist/providers/proxy-shared.d.ts +0 -43
- package/dist/providers/proxy-shared.d.ts.map +0 -1
- package/dist/providers/proxy-shared.js +0 -128
- package/dist/providers/proxy-shared.js.map +0 -1
- package/dist/providers/quota-guard.d.ts +0 -49
- package/dist/providers/quota-guard.d.ts.map +0 -1
- package/dist/providers/quota-guard.js +0 -107
- package/dist/providers/quota-guard.js.map +0 -1
- package/dist/providers/reasoning.d.ts +0 -27
- package/dist/providers/reasoning.d.ts.map +0 -1
- package/dist/providers/reasoning.js +0 -61
- package/dist/providers/reasoning.js.map +0 -1
- package/dist/providers/upstream-policy.d.ts +0 -33
- package/dist/providers/upstream-policy.d.ts.map +0 -1
- package/dist/providers/upstream-policy.js +0 -97
- package/dist/providers/upstream-policy.js.map +0 -1
- package/dist/public-types.d.ts +0 -3
- package/dist/public-types.d.ts.map +0 -1
- package/dist/public.d.ts +0 -19
- package/dist/public.d.ts.map +0 -1
- package/dist/public.js +0 -16
- package/dist/public.js.map +0 -1
- package/dist/sources/account-adapters.d.ts +0 -64
- package/dist/sources/account-adapters.d.ts.map +0 -1
- package/dist/sources/account-adapters.js +0 -205
- package/dist/sources/account-adapters.js.map +0 -1
- package/dist/sources/gateway-adapters.d.ts +0 -26
- package/dist/sources/gateway-adapters.d.ts.map +0 -1
- package/dist/sources/gateway-adapters.js +0 -43
- package/dist/sources/gateway-adapters.js.map +0 -1
- package/dist/sources/kiro-proxy-bin.d.ts +0 -41
- package/dist/sources/kiro-proxy-bin.d.ts.map +0 -1
- package/dist/sources/kiro-proxy-bin.js +0 -140
- package/dist/sources/kiro-proxy-bin.js.map +0 -1
- package/dist/sources/proxy-hub-adapters.d.ts +0 -7
- package/dist/sources/proxy-hub-adapters.d.ts.map +0 -1
- package/dist/sources/proxy-hub-adapters.js +0 -26
- package/dist/sources/proxy-hub-adapters.js.map +0 -1
- package/dist/testing.d.ts +0 -9
- package/dist/testing.d.ts.map +0 -1
- package/dist/testing.js +0 -6
- package/dist/tray/AnyPickTray.swift +0 -3
- package/dist/tray/activity.d.ts +0 -18
- package/dist/tray/activity.d.ts.map +0 -1
- package/dist/tray/activity.js +0 -51
- package/dist/tray/activity.js.map +0 -1
- package/dist/tray/app-icons/icon-1024.png +0 -0
- package/dist/tray/app-icons/icon-128.png +0 -0
- package/dist/tray/app-icons/icon-16.png +0 -0
- package/dist/tray/app-icons/icon-256.png +0 -0
- package/dist/tray/app-icons/icon-32.png +0 -0
- package/dist/tray/app-icons/icon-512.png +0 -0
- package/dist/tray/app-icons/icon-64.png +0 -0
- package/dist/tray/icons/claude.svg +0 -1
- package/dist/tray/icons/googlegemini.svg +0 -1
- package/dist/tray/icons/grok.svg +0 -1
- package/dist/tray/icons/kiro.svg +0 -1
- package/dist/tray/icons/openai.svg +0 -1
- package/dist/tray/icons/opencode.svg +0 -1
- package/dist/tray/icons/openrouter.svg +0 -1
- package/dist/tray/model-role-actions.d.ts +0 -15
- package/dist/tray/model-role-actions.d.ts.map +0 -1
- package/dist/tray/model-role-actions.js +0 -41
- package/dist/tray/model-role-actions.js.map +0 -1
- package/dist/tray/native/AccountsPanel.swift +0 -434
- package/dist/tray/native/AppEntry.swift +0 -229
- package/dist/tray/native/MainWindow.swift +0 -300
- package/dist/tray/native/ManageFormChrome.swift +0 -332
- package/dist/tray/native/ManageForms.swift +0 -472
- package/dist/tray/native/ManagePanel.swift +0 -356
- package/dist/tray/native/Models.swift +0 -259
- package/dist/tray/native/ModelsEditor.swift +0 -390
- package/dist/tray/native/ModelsOverview.swift +0 -76
- package/dist/tray/native/ModelsPickers.swift +0 -273
- package/dist/tray/native/ModelsRoutePickers.swift +0 -718
- package/dist/tray/native/MonitorPanel.swift +0 -375
- package/dist/tray/native/ProxyPanel.swift +0 -326
- package/dist/tray/native/QuickActivityRow.swift +0 -40
- package/dist/tray/native/QuickNav.swift +0 -62
- package/dist/tray/native/QuickPanel.swift +0 -447
- package/dist/tray/native/QuickRouteRow.swift +0 -189
- package/dist/tray/native/QuickServiceRows.swift +0 -292
- package/dist/tray/native/RoutingIssues.swift +0 -293
- package/dist/tray/native/SettingsPanel.swift +0 -225
- package/dist/tray/native/SharedUI.swift +0 -681
- package/dist/tray/native/Store.swift +0 -540
- package/dist/tray/native/Theme.swift +0 -139
- package/dist/tray/native/TrayChrome.swift +0 -657
- package/dist/tray/native/TrayControls.swift +0 -475
- package/dist/tray/native/TrayPreferences.swift +0 -46
- package/dist/tray/native/sources.txt +0 -26
- package/dist/tray/native-sources.d.ts +0 -8
- package/dist/tray/native-sources.d.ts.map +0 -1
- package/dist/tray/native-sources.js +0 -19
- package/dist/tray/native-sources.js.map +0 -1
- package/dist/tray/protocol.d.ts +0 -79
- package/dist/tray/protocol.d.ts.map +0 -1
- package/dist/tray/protocol.js +0 -145
- package/dist/tray/protocol.js.map +0 -1
- package/dist/tray/settings.d.ts +0 -15
- package/dist/tray/settings.d.ts.map +0 -1
- package/dist/tray/settings.js +0 -72
- package/dist/tray/settings.js.map +0 -1
- package/dist/tray/snapshot-client-routes.d.ts +0 -11
- package/dist/tray/snapshot-client-routes.d.ts.map +0 -1
- package/dist/tray/snapshot-client-routes.js +0 -305
- package/dist/tray/snapshot-client-routes.js.map +0 -1
- package/dist/tray/snapshot-helpers.d.ts +0 -20
- package/dist/tray/snapshot-helpers.d.ts.map +0 -1
- package/dist/tray/snapshot-helpers.js +0 -74
- package/dist/tray/snapshot-helpers.js.map +0 -1
- package/dist/tray/snapshot-hub.d.ts +0 -7
- package/dist/tray/snapshot-hub.d.ts.map +0 -1
- package/dist/tray/snapshot-hub.js +0 -93
- package/dist/tray/snapshot-hub.js.map +0 -1
- package/dist/tray/snapshot-resources.d.ts +0 -19
- package/dist/tray/snapshot-resources.d.ts.map +0 -1
- package/dist/tray/snapshot-resources.js +0 -216
- package/dist/tray/snapshot-resources.js.map +0 -1
- package/dist/tray/snapshot-types.d.ts +0 -229
- package/dist/tray/snapshot-types.d.ts.map +0 -1
- package/dist/tray/snapshot-usage.d.ts +0 -9
- package/dist/tray/snapshot-usage.d.ts.map +0 -1
- package/dist/tray/snapshot-usage.js +0 -35
- package/dist/tray/snapshot-usage.js.map +0 -1
- package/dist/tray/snapshot.d.ts +0 -7
- package/dist/tray/snapshot.d.ts.map +0 -1
- package/dist/tray/snapshot.js +0 -48
- package/dist/tray/snapshot.js.map +0 -1
- package/dist/tray/supervisor-actions.d.ts +0 -19
- package/dist/tray/supervisor-actions.d.ts.map +0 -1
- package/dist/tray/supervisor-actions.js +0 -224
- package/dist/tray/supervisor-actions.js.map +0 -1
- package/dist/tray/supervisor-activity.d.ts +0 -5
- package/dist/tray/supervisor-activity.d.ts.map +0 -1
- package/dist/tray/supervisor-activity.js +0 -19
- package/dist/tray/supervisor-activity.js.map +0 -1
- package/dist/tray/supervisor-errors.d.ts +0 -9
- package/dist/tray/supervisor-errors.d.ts.map +0 -1
- package/dist/tray/supervisor-errors.js +0 -91
- package/dist/tray/supervisor-errors.js.map +0 -1
- package/dist/tray/supervisor-logs.d.ts +0 -6
- package/dist/tray/supervisor-logs.d.ts.map +0 -1
- package/dist/tray/supervisor-logs.js +0 -52
- package/dist/tray/supervisor-logs.js.map +0 -1
- package/dist/tray/supervisor-mutations.d.ts +0 -14
- package/dist/tray/supervisor-mutations.d.ts.map +0 -1
- package/dist/tray/supervisor-mutations.js +0 -218
- package/dist/tray/supervisor-mutations.js.map +0 -1
- package/dist/tray/supervisor-native.d.ts +0 -22
- package/dist/tray/supervisor-native.d.ts.map +0 -1
- package/dist/tray/supervisor-native.js +0 -227
- package/dist/tray/supervisor-native.js.map +0 -1
- package/dist/tray/supervisor-proxies.d.ts +0 -6
- package/dist/tray/supervisor-proxies.d.ts.map +0 -1
- package/dist/tray/supervisor-proxies.js +0 -37
- package/dist/tray/supervisor-proxies.js.map +0 -1
- package/dist/tray/supervisor-tauri.d.ts +0 -13
- package/dist/tray/supervisor-tauri.d.ts.map +0 -1
- package/dist/tray/supervisor-tauri.js +0 -36
- package/dist/tray/supervisor-tauri.js.map +0 -1
- package/dist/tray/supervisor.d.ts +0 -17
- package/dist/tray/supervisor.d.ts.map +0 -1
- package/dist/tray/supervisor.js +0 -372
- package/dist/tray/supervisor.js.map +0 -1
- package/dist/tray/terminal-launcher.d.ts +0 -12
- package/dist/tray/terminal-launcher.d.ts.map +0 -1
- package/dist/tray/terminal-launcher.js +0 -130
- package/dist/tray/terminal-launcher.js.map +0 -1
- package/dist/tui/actions/ensure-proxy-up.d.ts +0 -15
- package/dist/tui/actions/ensure-proxy-up.d.ts.map +0 -1
- package/dist/tui/actions/ensure-proxy-up.js +0 -41
- package/dist/tui/actions/ensure-proxy-up.js.map +0 -1
- package/dist/tui/actions/use-account-actions.d.ts +0 -35
- package/dist/tui/actions/use-account-actions.d.ts.map +0 -1
- package/dist/tui/actions/use-account-actions.js +0 -527
- package/dist/tui/actions/use-account-actions.js.map +0 -1
- package/dist/tui/actions/use-app-bindings.d.ts +0 -83
- package/dist/tui/actions/use-app-bindings.d.ts.map +0 -1
- package/dist/tui/actions/use-app-bindings.js +0 -472
- package/dist/tui/actions/use-app-bindings.js.map +0 -1
- package/dist/tui/actions/use-gateway-actions.d.ts +0 -45
- package/dist/tui/actions/use-gateway-actions.d.ts.map +0 -1
- package/dist/tui/actions/use-gateway-actions.js +0 -370
- package/dist/tui/actions/use-gateway-actions.js.map +0 -1
- package/dist/tui/actions/use-home-filter.d.ts +0 -24
- package/dist/tui/actions/use-home-filter.d.ts.map +0 -1
- package/dist/tui/actions/use-home-filter.js +0 -48
- package/dist/tui/actions/use-home-filter.js.map +0 -1
- package/dist/tui/actions/use-model-role-editor.d.ts +0 -44
- package/dist/tui/actions/use-model-role-editor.d.ts.map +0 -1
- package/dist/tui/actions/use-model-role-editor.js +0 -68
- package/dist/tui/actions/use-model-role-editor.js.map +0 -1
- package/dist/tui/actions/use-provider-filter.d.ts +0 -10
- package/dist/tui/actions/use-provider-filter.d.ts.map +0 -1
- package/dist/tui/actions/use-provider-filter.js +0 -22
- package/dist/tui/actions/use-provider-filter.js.map +0 -1
- package/dist/tui/actions/use-proxy-actions.d.ts +0 -31
- package/dist/tui/actions/use-proxy-actions.d.ts.map +0 -1
- package/dist/tui/actions/use-proxy-actions.js +0 -474
- package/dist/tui/actions/use-proxy-actions.js.map +0 -1
- package/dist/tui/actions/use-text-input-submit.d.ts +0 -16
- package/dist/tui/actions/use-text-input-submit.d.ts.map +0 -1
- package/dist/tui/actions/use-text-input-submit.js +0 -96
- package/dist/tui/actions/use-text-input-submit.js.map +0 -1
- package/dist/tui/actions/use-tray-runtime-actions.d.ts +0 -18
- package/dist/tui/actions/use-tray-runtime-actions.d.ts.map +0 -1
- package/dist/tui/actions/use-tray-runtime-actions.js +0 -78
- package/dist/tui/actions/use-tray-runtime-actions.js.map +0 -1
- package/dist/tui/app-ui-helpers.d.ts +0 -14
- package/dist/tui/app-ui-helpers.d.ts.map +0 -1
- package/dist/tui/app-ui-helpers.js +0 -48
- package/dist/tui/app-ui-helpers.js.map +0 -1
- package/dist/tui/app-ui.d.ts +0 -19
- package/dist/tui/app-ui.d.ts.map +0 -1
- package/dist/tui/app-ui.js +0 -98
- package/dist/tui/app-ui.js.map +0 -1
- package/dist/tui/components/chrome/header.d.ts +0 -39
- package/dist/tui/components/chrome/header.d.ts.map +0 -1
- package/dist/tui/components/chrome/header.js +0 -161
- package/dist/tui/components/chrome/header.js.map +0 -1
- package/dist/tui/components/chrome/inputs.d.ts +0 -34
- package/dist/tui/components/chrome/inputs.d.ts.map +0 -1
- package/dist/tui/components/chrome/inputs.js +0 -82
- package/dist/tui/components/chrome/inputs.js.map +0 -1
- package/dist/tui/components/chrome/layout.d.ts +0 -61
- package/dist/tui/components/chrome/layout.d.ts.map +0 -1
- package/dist/tui/components/chrome/layout.js +0 -119
- package/dist/tui/components/chrome/layout.js.map +0 -1
- package/dist/tui/components/chrome/legacy.d.ts +0 -84
- package/dist/tui/components/chrome/legacy.d.ts.map +0 -1
- package/dist/tui/components/chrome/legacy.js +0 -6
- package/dist/tui/components/chrome/rows.d.ts +0 -89
- package/dist/tui/components/chrome/rows.d.ts.map +0 -1
- package/dist/tui/components/chrome/rows.js +0 -151
- package/dist/tui/components/chrome/rows.js.map +0 -1
- package/dist/tui/components/chrome/status.d.ts +0 -50
- package/dist/tui/components/chrome/status.d.ts.map +0 -1
- package/dist/tui/components/chrome/status.js +0 -157
- package/dist/tui/components/chrome/status.js.map +0 -1
- package/dist/tui/components/chrome.d.ts +0 -7
- package/dist/tui/components/chrome.d.ts.map +0 -1
- package/dist/tui/components/chrome.js +0 -7
- package/dist/tui/components.d.ts +0 -26
- package/dist/tui/components.d.ts.map +0 -1
- package/dist/tui/components.js +0 -182
- package/dist/tui/components.js.map +0 -1
- package/dist/tui/model/anypick.d.ts +0 -106
- package/dist/tui/model/anypick.d.ts.map +0 -1
- package/dist/tui/model/anypick.js +0 -116
- package/dist/tui/model/anypick.js.map +0 -1
- package/dist/tui/model/bindings.d.ts +0 -39
- package/dist/tui/model/bindings.d.ts.map +0 -1
- package/dist/tui/model/bindings.js +0 -102
- package/dist/tui/model/bindings.js.map +0 -1
- package/dist/tui/model/detail.d.ts +0 -6
- package/dist/tui/model/detail.d.ts.map +0 -1
- package/dist/tui/model/detail.js +0 -85
- package/dist/tui/model/detail.js.map +0 -1
- package/dist/tui/model/gateway.d.ts +0 -46
- package/dist/tui/model/gateway.d.ts.map +0 -1
- package/dist/tui/model/gateway.js +0 -134
- package/dist/tui/model/gateway.js.map +0 -1
- package/dist/tui/model/home-format.d.ts +0 -52
- package/dist/tui/model/home-format.d.ts.map +0 -1
- package/dist/tui/model/home-format.js +0 -64
- package/dist/tui/model/home-format.js.map +0 -1
- package/dist/tui/model/home-load.d.ts +0 -8
- package/dist/tui/model/home-load.d.ts.map +0 -1
- package/dist/tui/model/home-load.js +0 -244
- package/dist/tui/model/home-load.js.map +0 -1
- package/dist/tui/model/identity.d.ts +0 -53
- package/dist/tui/model/identity.d.ts.map +0 -1
- package/dist/tui/model/identity.js +0 -176
- package/dist/tui/model/identity.js.map +0 -1
- package/dist/tui/model/line-editor.d.ts +0 -99
- package/dist/tui/model/line-editor.d.ts.map +0 -1
- package/dist/tui/model/line-editor.js +0 -186
- package/dist/tui/model/line-editor.js.map +0 -1
- package/dist/tui/model/names.d.ts +0 -28
- package/dist/tui/model/names.d.ts.map +0 -1
- package/dist/tui/model/names.js +0 -42
- package/dist/tui/model/names.js.map +0 -1
- package/dist/tui/model/pool.d.ts +0 -11
- package/dist/tui/model/pool.d.ts.map +0 -1
- package/dist/tui/model/pool.js +0 -115
- package/dist/tui/model/pool.js.map +0 -1
- package/dist/tui/model/provider-filter.d.ts +0 -14
- package/dist/tui/model/provider-filter.d.ts.map +0 -1
- package/dist/tui/model/provider-filter.js +0 -46
- package/dist/tui/model/provider-filter.js.map +0 -1
- package/dist/tui/model/proxy-hub.d.ts +0 -23
- package/dist/tui/model/proxy-hub.d.ts.map +0 -1
- package/dist/tui/model/proxy-hub.js +0 -69
- package/dist/tui/model/proxy-hub.js.map +0 -1
- package/dist/tui/model/proxy-labels.d.ts +0 -5
- package/dist/tui/model/proxy-labels.d.ts.map +0 -1
- package/dist/tui/model/proxy-labels.js +0 -18
- package/dist/tui/model/proxy-labels.js.map +0 -1
- package/dist/tui/model/proxy.d.ts +0 -15
- package/dist/tui/model/proxy.d.ts.map +0 -1
- package/dist/tui/model/proxy.js +0 -214
- package/dist/tui/model/proxy.js.map +0 -1
- package/dist/tui/model/root.d.ts +0 -20
- package/dist/tui/model/root.d.ts.map +0 -1
- package/dist/tui/model/root.js +0 -126
- package/dist/tui/model/root.js.map +0 -1
- package/dist/tui/model/route-builder.d.ts +0 -25
- package/dist/tui/model/route-builder.d.ts.map +0 -1
- package/dist/tui/model/route-builder.js +0 -199
- package/dist/tui/model/route-builder.js.map +0 -1
- package/dist/tui/model/screen.d.ts +0 -260
- package/dist/tui/model/screen.d.ts.map +0 -1
- package/dist/tui/model/types.d.ts +0 -179
- package/dist/tui/model/types.d.ts.map +0 -1
- package/dist/tui/model.d.ts +0 -18
- package/dist/tui/model.d.ts.map +0 -1
- package/dist/tui/model.js +0 -17
- package/dist/tui/proxy-models-fetch.d.ts +0 -34
- package/dist/tui/proxy-models-fetch.d.ts.map +0 -1
- package/dist/tui/proxy-models-fetch.js +0 -87
- package/dist/tui/proxy-models-fetch.js.map +0 -1
- package/dist/tui/routes/account.d.ts +0 -4
- package/dist/tui/routes/account.d.ts.map +0 -1
- package/dist/tui/routes/account.js +0 -327
- package/dist/tui/routes/account.js.map +0 -1
- package/dist/tui/routes/apps.d.ts +0 -3
- package/dist/tui/routes/apps.d.ts.map +0 -1
- package/dist/tui/routes/apps.js +0 -296
- package/dist/tui/routes/apps.js.map +0 -1
- package/dist/tui/routes/common.d.ts +0 -4
- package/dist/tui/routes/common.d.ts.map +0 -1
- package/dist/tui/routes/common.js +0 -117
- package/dist/tui/routes/common.js.map +0 -1
- package/dist/tui/routes/context.d.ts +0 -43
- package/dist/tui/routes/context.d.ts.map +0 -1
- package/dist/tui/routes/gateway.d.ts +0 -3
- package/dist/tui/routes/gateway.d.ts.map +0 -1
- package/dist/tui/routes/gateway.js +0 -199
- package/dist/tui/routes/gateway.js.map +0 -1
- package/dist/tui/routes/proxy.d.ts +0 -3
- package/dist/tui/routes/proxy.d.ts.map +0 -1
- package/dist/tui/routes/proxy.js +0 -234
- package/dist/tui/routes/proxy.js.map +0 -1
- package/dist/tui/screens/account-detail.d.ts +0 -14
- package/dist/tui/screens/account-detail.d.ts.map +0 -1
- package/dist/tui/screens/account-detail.js +0 -98
- package/dist/tui/screens/account-detail.js.map +0 -1
- package/dist/tui/screens/accounts-home.d.ts +0 -42
- package/dist/tui/screens/accounts-home.d.ts.map +0 -1
- package/dist/tui/screens/accounts-home.js +0 -321
- package/dist/tui/screens/accounts-home.js.map +0 -1
- package/dist/tui/screens/add-account.d.ts +0 -70
- package/dist/tui/screens/add-account.d.ts.map +0 -1
- package/dist/tui/screens/add-account.js +0 -323
- package/dist/tui/screens/add-account.js.map +0 -1
- package/dist/tui/screens/anypick-home.d.ts +0 -39
- package/dist/tui/screens/anypick-home.d.ts.map +0 -1
- package/dist/tui/screens/anypick-home.js +0 -253
- package/dist/tui/screens/anypick-home.js.map +0 -1
- package/dist/tui/screens/anypick-preview.d.ts +0 -13
- package/dist/tui/screens/anypick-preview.d.ts.map +0 -1
- package/dist/tui/screens/anypick-preview.js +0 -49
- package/dist/tui/screens/anypick-preview.js.map +0 -1
- package/dist/tui/screens/app-route-preview.d.ts +0 -14
- package/dist/tui/screens/app-route-preview.d.ts.map +0 -1
- package/dist/tui/screens/app-route-preview.js +0 -35
- package/dist/tui/screens/app-route-preview.js.map +0 -1
- package/dist/tui/screens/app-route-source.d.ts +0 -15
- package/dist/tui/screens/app-route-source.d.ts.map +0 -1
- package/dist/tui/screens/app-route-source.js +0 -97
- package/dist/tui/screens/app-route-source.js.map +0 -1
- package/dist/tui/screens/apps-home.d.ts +0 -22
- package/dist/tui/screens/apps-home.d.ts.map +0 -1
- package/dist/tui/screens/apps-home.js +0 -111
- package/dist/tui/screens/apps-home.js.map +0 -1
- package/dist/tui/screens/confirm.d.ts +0 -19
- package/dist/tui/screens/confirm.d.ts.map +0 -1
- package/dist/tui/screens/confirm.js +0 -42
- package/dist/tui/screens/confirm.js.map +0 -1
- package/dist/tui/screens/credential-form.d.ts +0 -30
- package/dist/tui/screens/credential-form.d.ts.map +0 -1
- package/dist/tui/screens/credential-form.js +0 -241
- package/dist/tui/screens/credential-form.js.map +0 -1
- package/dist/tui/screens/gateway-connection-form.d.ts +0 -16
- package/dist/tui/screens/gateway-connection-form.d.ts.map +0 -1
- package/dist/tui/screens/gateway-connection-form.js +0 -127
- package/dist/tui/screens/gateway-connection-form.js.map +0 -1
- package/dist/tui/screens/gateway-pick-provider.d.ts +0 -19
- package/dist/tui/screens/gateway-pick-provider.d.ts.map +0 -1
- package/dist/tui/screens/gateway-pick-provider.js +0 -62
- package/dist/tui/screens/gateway-pick-provider.js.map +0 -1
- package/dist/tui/screens/gateways-home.d.ts +0 -38
- package/dist/tui/screens/gateways-home.d.ts.map +0 -1
- package/dist/tui/screens/gateways-home.js +0 -247
- package/dist/tui/screens/gateways-home.js.map +0 -1
- package/dist/tui/screens/health.d.ts +0 -16
- package/dist/tui/screens/health.d.ts.map +0 -1
- package/dist/tui/screens/health.js +0 -109
- package/dist/tui/screens/health.js.map +0 -1
- package/dist/tui/screens/help.d.ts +0 -10
- package/dist/tui/screens/help.d.ts.map +0 -1
- package/dist/tui/screens/help.js +0 -213
- package/dist/tui/screens/help.js.map +0 -1
- package/dist/tui/screens/manage-apps.d.ts +0 -29
- package/dist/tui/screens/manage-apps.d.ts.map +0 -1
- package/dist/tui/screens/manage-apps.js +0 -165
- package/dist/tui/screens/manage-apps.js.map +0 -1
- package/dist/tui/screens/proxy-board-helpers.d.ts +0 -9
- package/dist/tui/screens/proxy-board-helpers.d.ts.map +0 -1
- package/dist/tui/screens/proxy-board-helpers.js +0 -70
- package/dist/tui/screens/proxy-board-helpers.js.map +0 -1
- package/dist/tui/screens/proxy-board.d.ts +0 -43
- package/dist/tui/screens/proxy-board.d.ts.map +0 -1
- package/dist/tui/screens/proxy-board.js +0 -351
- package/dist/tui/screens/proxy-board.js.map +0 -1
- package/dist/tui/screens/proxy-hub.d.ts +0 -21
- package/dist/tui/screens/proxy-hub.d.ts.map +0 -1
- package/dist/tui/screens/proxy-hub.js +0 -150
- package/dist/tui/screens/proxy-hub.js.map +0 -1
- package/dist/tui/screens/proxy-models-utils.d.ts +0 -13
- package/dist/tui/screens/proxy-models-utils.d.ts.map +0 -1
- package/dist/tui/screens/proxy-models-utils.js +0 -53
- package/dist/tui/screens/proxy-models-utils.js.map +0 -1
- package/dist/tui/screens/proxy-models.d.ts +0 -65
- package/dist/tui/screens/proxy-models.d.ts.map +0 -1
- package/dist/tui/screens/proxy-models.js +0 -252
- package/dist/tui/screens/proxy-models.js.map +0 -1
- package/dist/tui/screens/proxy.d.ts +0 -26
- package/dist/tui/screens/proxy.d.ts.map +0 -1
- package/dist/tui/screens/text-input.d.ts +0 -18
- package/dist/tui/screens/text-input.d.ts.map +0 -1
- package/dist/tui/screens/text-input.js +0 -67
- package/dist/tui/screens/text-input.js.map +0 -1
- package/dist/tui/screens/tray-runtime.d.ts +0 -19
- package/dist/tui/screens/tray-runtime.d.ts.map +0 -1
- package/dist/tui/screens/tray-runtime.js +0 -108
- package/dist/tui/screens/tray-runtime.js.map +0 -1
- package/dist/tui/use-tui-nav.d.ts +0 -40
- package/dist/tui/use-tui-nav.d.ts.map +0 -1
- package/dist/tui/use-tui-nav.js +0 -256
- package/dist/tui/use-tui-nav.js.map +0 -1
- package/dist/tui/use-tui-shell.d.ts +0 -46
- package/dist/tui/use-tui-shell.d.ts.map +0 -1
- package/dist/tui/use-tui-shell.js +0 -95
- package/dist/tui/use-tui-shell.js.map +0 -1
- package/dist/types/account.d.ts +0 -410
- package/dist/types/account.d.ts.map +0 -1
- package/dist/types/account.js +0 -7
- package/dist/types/account.js.map +0 -1
- package/dist/types/bindings.d.ts +0 -300
- package/dist/types/bindings.d.ts.map +0 -1
- package/dist/types/catalog.d.ts +0 -165
- package/dist/types/catalog.d.ts.map +0 -1
- package/dist/types/clients.d.ts +0 -174
- package/dist/types/clients.d.ts.map +0 -1
- package/dist/types/clients.js +0 -11
- package/dist/types/clients.js.map +0 -1
- package/dist/types/plugins.d.ts +0 -89
- package/dist/types/plugins.d.ts.map +0 -1
- package/dist/types/plugins.js +0 -14
- package/dist/types/plugins.js.map +0 -1
- package/dist/types/proxy-hub.d.ts +0 -109
- package/dist/types/proxy-hub.d.ts.map +0 -1
- package/dist/types.d.ts +0 -7
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -1
- package/dist/utils/errors.d.ts +0 -61
- package/dist/utils/errors.d.ts.map +0 -1
- package/dist/utils/errors.js +0 -119
- package/dist/utils/errors.js.map +0 -1
- package/dist/utils/fs.d.ts +0 -39
- package/dist/utils/fs.d.ts.map +0 -1
- package/dist/utils/fs.js +0 -126
- package/dist/utils/fs.js.map +0 -1
- package/dist/utils/lock.d.ts +0 -33
- package/dist/utils/lock.d.ts.map +0 -1
- package/dist/utils/lock.js +0 -95
- package/dist/utils/lock.js.map +0 -1
- package/dist/utils/log.d.ts +0 -10
- package/dist/utils/log.d.ts.map +0 -1
- package/dist/utils/log.js +0 -21
- package/dist/utils/log.js.map +0 -1
- package/dist/utils/network.d.ts +0 -3
- package/dist/utils/network.d.ts.map +0 -1
- package/dist/utils/network.js +0 -13
- package/dist/utils/network.js.map +0 -1
- package/dist/utils/process/binary.d.ts +0 -14
- package/dist/utils/process/binary.d.ts.map +0 -1
- package/dist/utils/process/binary.js +0 -29
- package/dist/utils/process/binary.js.map +0 -1
- package/dist/utils/process/follow.d.ts +0 -2
- package/dist/utils/process/follow.d.ts.map +0 -1
- package/dist/utils/process/follow.js +0 -90
- package/dist/utils/process/follow.js.map +0 -1
- package/dist/utils/process/health.d.ts +0 -43
- package/dist/utils/process/health.d.ts.map +0 -1
- package/dist/utils/process/health.js +0 -132
- package/dist/utils/process/health.js.map +0 -1
- package/dist/utils/process/pid.d.ts +0 -95
- package/dist/utils/process/pid.d.ts.map +0 -1
- package/dist/utils/process/pid.js +0 -243
- package/dist/utils/process/pid.js.map +0 -1
- package/dist/utils/process.d.ts +0 -5
- package/dist/utils/process.d.ts.map +0 -1
- package/dist/utils/process.js +0 -5
- package/dist/utils/slug.d.ts +0 -18
- package/dist/utils/slug.d.ts.map +0 -1
- package/dist/utils/slug.js +0 -42
- package/dist/utils/slug.js.map +0 -1
package/dist/utils/fs.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fs.js","names":[],"sources":["../../src/utils/fs.ts"],"sourcesContent":["import { copyFile, mkdir, open, readdir, readFile, rename, rm, stat } from 'node:fs/promises';\nimport { dirname, join } from 'node:path';\nimport { homedir } from 'node:os';\nimport { existsSync } from 'node:fs';\nimport { randomUUID } from 'node:crypto';\nimport { AnyPickError } from './errors';\n\n/** Expand ~ and normalize a path. */\nexport function expandHome(path: string): string {\n if (path === '~') {\n return homedir();\n }\n if (path.startsWith('~/') || path.startsWith('~\\\\')) {\n return join(homedir(), path.slice(2));\n }\n return path;\n}\n\nexport async function pathExists(path: string): Promise<boolean> {\n try {\n await stat(path);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function ensureDir(path: string): Promise<void> {\n // AnyPick stores credentials, snapshots, and proxy logs below this tree.\n // New directories are owner-only even under a permissive umask.\n await mkdir(path, { recursive: true, mode: 0o700 });\n}\n\nexport async function readJsonFile<T>(path: string): Promise<T> {\n const raw = await readFile(path, 'utf8');\n return JSON.parse(raw) as T;\n}\n\n/**\n * Read a JSON file and decode through a versioned record decoder (DATA-02).\n * The decoder validates the shape and rejects corrupt/future-version data\n * with a structured error carrying the file path (no secret values).\n */\nexport async function readAndDecodeJsonFile<T>(\n path: string,\n decoder: (v: unknown, key: string) => { ok: true; value: T } | { ok: false; error: string },\n): Promise<T> {\n const raw = await readFile(path, 'utf8');\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n throw new Error(`Corrupt JSON in ${path}`);\n }\n const result = decoder(parsed, path);\n if (result.ok) {\n return result.value;\n }\n throw new Error(`Corrupt record in ${path}: ${result.error}`);\n}\n\nexport async function writeJsonFile(path: string, data: unknown, mode = 0o600): Promise<void> {\n await writeTextFile(path, `${JSON.stringify(data, null, 2)}\\n`, mode);\n}\n\n/**\n * Copy a single file, creating parent dirs. Preserves mode when possible.\n * Returns false if source is missing.\n */\nexport async function copyFileSafe(src: string, dest: string, mode = 0o600): Promise<boolean> {\n if (!(await pathExists(src))) {\n return false;\n }\n await ensureDir(dirname(dest));\n const tmp = `${dest}.${randomUUID()}.tmp`;\n try {\n await copyFile(src, tmp);\n const { chmod } = await import('node:fs/promises');\n await chmod(tmp, mode);\n const handle = await open(tmp, 'r');\n try {\n await handle.sync();\n } finally {\n await handle.close();\n }\n await rename(tmp, dest);\n } catch (err) {\n await rm(tmp, { force: true }).catch(() => {});\n throw err;\n }\n return true;\n}\n\n/**\n * Write text atomically with restrictive permissions.\n */\nexport async function writeTextFile(path: string, content: string, mode = 0o600): Promise<void> {\n await ensureDir(dirname(path));\n const tmp = `${path}.${randomUUID()}.tmp`;\n let handle: Awaited<ReturnType<typeof open>> | undefined;\n try {\n handle = await open(tmp, 'wx', mode);\n await handle.writeFile(content, { encoding: 'utf8' });\n await handle.sync();\n await handle.close();\n handle = undefined;\n await rename(tmp, path);\n } catch (err) {\n await handle?.close().catch(() => {});\n await rm(tmp, { force: true }).catch(() => {});\n throw err;\n }\n}\n\n/**\n * Copy live file into snapshot, or throw a clear error if missing.\n */\nexport async function backupRequiredFile(\n livePath: string,\n destPath: string,\n label: string,\n): Promise<void> {\n const ok = await copyFileSafe(livePath, destPath);\n if (!ok) {\n throw new AnyPickError(`No live ${label} found at ${livePath}. Log in first, then save.`, {\n code: 'NO_LIVE_AUTH',\n suggestions: [`Sign in with the official tool, then try again.`],\n });\n }\n}\n\n/**\n * Restore a snapshot file to a live path (required).\n */\nexport async function restoreRequiredFile(\n srcPath: string,\n livePath: string,\n label: string,\n): Promise<void> {\n if (!(await pathExists(srcPath))) {\n throw new Error(`Snapshot is missing ${label}: ${srcPath}`);\n }\n await copyFileSafe(srcPath, livePath, 0o600);\n}\n\nexport async function listSubdirs(dir: string): Promise<string[]> {\n if (!(await pathExists(dir))) {\n return [];\n }\n const entries = await readdir(dir, { withFileTypes: true });\n return entries\n .filter((e) => e.isDirectory())\n .map((e) => e.name)\n .toSorted();\n}\n\nexport async function removePath(path: string): Promise<void> {\n if (existsSync(path)) {\n await rm(path, { recursive: true, force: true });\n }\n}\n\nexport async function emptyDir(path: string): Promise<void> {\n await removePath(path);\n await ensureDir(path);\n}\n"],"mappings":";;;;;;;;AAQA,SAAgB,WAAW,MAAsB;CAC/C,IAAI,SAAS,KACX,OAAO,QAAQ;CAEjB,IAAI,KAAK,WAAW,IAAI,KAAK,KAAK,WAAW,KAAK,GAChD,OAAO,KAAK,QAAQ,GAAG,KAAK,MAAM,CAAC,CAAC;CAEtC,OAAO;AACT;AAEA,eAAsB,WAAW,MAAgC;CAC/D,IAAI;EACF,MAAM,KAAK,IAAI;EACf,OAAO;CACT,QAAQ;EACN,OAAO;CACT;AACF;AAEA,eAAsB,UAAU,MAA6B;CAG3D,MAAM,MAAM,MAAM;EAAE,WAAW;EAAM,MAAM;CAAM,CAAC;AACpD;AAEA,eAAsB,aAAgB,MAA0B;CAC9D,MAAM,MAAM,MAAM,SAAS,MAAM,MAAM;CACvC,OAAO,KAAK,MAAM,GAAG;AACvB;;;;;;AAOA,eAAsB,sBACpB,MACA,SACY;CACZ,MAAM,MAAM,MAAM,SAAS,MAAM,MAAM;CACvC,IAAI;CACJ,IAAI;EACF,SAAS,KAAK,MAAM,GAAG;CACzB,QAAQ;EACN,MAAM,IAAI,MAAM,mBAAmB,MAAM;CAC3C;CACA,MAAM,SAAS,QAAQ,QAAQ,IAAI;CACnC,IAAI,OAAO,IACT,OAAO,OAAO;CAEhB,MAAM,IAAI,MAAM,qBAAqB,KAAK,IAAI,OAAO,OAAO;AAC9D;AAEA,eAAsB,cAAc,MAAc,MAAe,OAAO,KAAsB;CAC5F,MAAM,cAAc,MAAM,GAAG,KAAK,UAAU,MAAM,MAAM,CAAC,EAAE,KAAK,IAAI;AACtE;;;;;AAMA,eAAsB,aAAa,KAAa,MAAc,OAAO,KAAyB;CAC5F,IAAI,CAAE,MAAM,WAAW,GAAG,GACxB,OAAO;CAET,MAAM,UAAU,QAAQ,IAAI,CAAC;CAC7B,MAAM,MAAM,GAAG,KAAK,GAAG,WAAW,EAAE;CACpC,IAAI;EACF,MAAM,SAAS,KAAK,GAAG;EACvB,MAAM,EAAE,UAAU,MAAM,OAAO;EAC/B,MAAM,MAAM,KAAK,IAAI;EACrB,MAAM,SAAS,MAAM,KAAK,KAAK,GAAG;EAClC,IAAI;GACF,MAAM,OAAO,KAAK;EACpB,UAAU;GACR,MAAM,OAAO,MAAM;EACrB;EACA,MAAM,OAAO,KAAK,IAAI;CACxB,SAAS,KAAK;EACZ,MAAM,GAAG,KAAK,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;EAC7C,MAAM;CACR;CACA,OAAO;AACT;;;;AAKA,eAAsB,cAAc,MAAc,SAAiB,OAAO,KAAsB;CAC9F,MAAM,UAAU,QAAQ,IAAI,CAAC;CAC7B,MAAM,MAAM,GAAG,KAAK,GAAG,WAAW,EAAE;CACpC,IAAI;CACJ,IAAI;EACF,SAAS,MAAM,KAAK,KAAK,MAAM,IAAI;EACnC,MAAM,OAAO,UAAU,SAAS,EAAE,UAAU,OAAO,CAAC;EACpD,MAAM,OAAO,KAAK;EAClB,MAAM,OAAO,MAAM;EACnB,SAAS,KAAA;EACT,MAAM,OAAO,KAAK,IAAI;CACxB,SAAS,KAAK;EACZ,MAAM,QAAQ,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;EACpC,MAAM,GAAG,KAAK,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;EAC7C,MAAM;CACR;AACF;;;;AAKA,eAAsB,mBACpB,UACA,UACA,OACe;CAEf,IAAI,CAAC,MADY,aAAa,UAAU,QAAQ,GAE9C,MAAM,IAAI,aAAa,WAAW,MAAM,YAAY,SAAS,6BAA6B;EACxF,MAAM;EACN,aAAa,CAAC,iDAAiD;CACjE,CAAC;AAEL;;;;AAKA,eAAsB,oBACpB,SACA,UACA,OACe;CACf,IAAI,CAAE,MAAM,WAAW,OAAO,GAC5B,MAAM,IAAI,MAAM,uBAAuB,MAAM,IAAI,SAAS;CAE5D,MAAM,aAAa,SAAS,UAAU,GAAK;AAC7C;AAEA,eAAsB,YAAY,KAAgC;CAChE,IAAI,CAAE,MAAM,WAAW,GAAG,GACxB,OAAO,CAAC;CAGV,QAAO,MADe,QAAQ,KAAK,EAAE,eAAe,KAAK,CAAC,EAAA,CAEvD,QAAQ,MAAM,EAAE,YAAY,CAAC,CAAC,CAC9B,KAAK,MAAM,EAAE,IAAI,CAAC,CAClB,SAAS;AACd;AAEA,eAAsB,WAAW,MAA6B;CAC5D,IAAI,WAAW,IAAI,GACjB,MAAM,GAAG,MAAM;EAAE,WAAW;EAAM,OAAO;CAAK,CAAC;AAEnD"}
|
package/dist/utils/lock.d.ts
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Scoped file locks for concurrent mutations (spec §23.3).
|
|
3
|
-
*
|
|
4
|
-
* Lock file content: `{ "pid": number, "startedAt": string }`
|
|
5
|
-
* Stale locks (dead owner PID) are stolen after a brief wait.
|
|
6
|
-
*/
|
|
7
|
-
export interface LockInfo {
|
|
8
|
-
pid: number;
|
|
9
|
-
startedAt: string;
|
|
10
|
-
/** Random ownership nonce prevents PID-reuse ABA on release. */
|
|
11
|
-
ownerId?: string;
|
|
12
|
-
}
|
|
13
|
-
export interface WithFileLockOptions {
|
|
14
|
-
/** Max wait for another holder (ms). Default 5000. */
|
|
15
|
-
timeoutMs?: number;
|
|
16
|
-
/** Poll interval while waiting (ms). Default 25. */
|
|
17
|
-
pollMs?: number;
|
|
18
|
-
/** Human label for errors. */
|
|
19
|
-
resource?: string;
|
|
20
|
-
}
|
|
21
|
-
export declare function readLockInfo(lockPath: string): Promise<LockInfo | null>;
|
|
22
|
-
/** True when lock file is absent or owner process is dead. */
|
|
23
|
-
export declare function isLockStale(lockPath: string): Promise<boolean>;
|
|
24
|
-
/**
|
|
25
|
-
* Acquire an exclusive lock via O_EXCL create, run fn, release.
|
|
26
|
-
* Retries while another live process holds the lock.
|
|
27
|
-
*/
|
|
28
|
-
export declare function withFileLock<T>(lockPath: string, fn: () => Promise<T>, opts?: WithFileLockOptions): Promise<T>;
|
|
29
|
-
/**
|
|
30
|
-
* Atomically write a file under an exclusive lock sibling (`path.lock`).
|
|
31
|
-
*/
|
|
32
|
-
export declare function writeFileLocked(path: string, content: string, mode?: number): Promise<void>;
|
|
33
|
-
//# sourceMappingURL=lock.d.ts.map
|
package/dist/utils/lock.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lock.d.ts","sourceRoot":"","sources":["../../src/utils/lock.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAMD,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAe7E;AAED,8DAA8D;AAC9D,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAYpE;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAClC,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,IAAI,GAAE,mBAAwB,GAC7B,OAAO,CAAC,CAAC,CAAC,CAiEZ;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,SAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAYhG"}
|
package/dist/utils/lock.js
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import { ExitCode, anypickError } from "./errors.js";
|
|
2
|
-
import { isProcessRunning } from "./process/pid.js";
|
|
3
|
-
import { dirname } from "node:path";
|
|
4
|
-
import { mkdir, open, readFile, rm } from "node:fs/promises";
|
|
5
|
-
import { randomUUID } from "node:crypto";
|
|
6
|
-
//#region src/utils/lock.ts
|
|
7
|
-
/**
|
|
8
|
-
* Scoped file locks for concurrent mutations (spec §23.3).
|
|
9
|
-
*
|
|
10
|
-
* Lock file content: `{ "pid": number, "startedAt": string }`
|
|
11
|
-
* Stale locks (dead owner PID) are stolen after a brief wait.
|
|
12
|
-
*/
|
|
13
|
-
function sleep(ms) {
|
|
14
|
-
return new Promise((r) => setTimeout(r, ms));
|
|
15
|
-
}
|
|
16
|
-
async function readLockInfo(lockPath) {
|
|
17
|
-
try {
|
|
18
|
-
const raw = await readFile(lockPath, "utf8");
|
|
19
|
-
const data = JSON.parse(raw);
|
|
20
|
-
if (typeof data.pid === "number" && data.pid > 0) return {
|
|
21
|
-
pid: data.pid,
|
|
22
|
-
startedAt: typeof data.startedAt === "string" ? data.startedAt : "",
|
|
23
|
-
ownerId: typeof data.ownerId === "string" ? data.ownerId : void 0
|
|
24
|
-
};
|
|
25
|
-
return null;
|
|
26
|
-
} catch {
|
|
27
|
-
return null;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
/** True when lock file is absent or owner process is dead. */
|
|
31
|
-
async function isLockStale(lockPath) {
|
|
32
|
-
const info = await readLockInfo(lockPath);
|
|
33
|
-
if (!info) try {
|
|
34
|
-
await readFile(lockPath);
|
|
35
|
-
return true;
|
|
36
|
-
} catch {
|
|
37
|
-
return true;
|
|
38
|
-
}
|
|
39
|
-
return !isProcessRunning(info.pid);
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Acquire an exclusive lock via O_EXCL create, run fn, release.
|
|
43
|
-
* Retries while another live process holds the lock.
|
|
44
|
-
*/
|
|
45
|
-
async function withFileLock(lockPath, fn, opts = {}) {
|
|
46
|
-
const timeoutMs = opts.timeoutMs ?? 5e3;
|
|
47
|
-
const pollMs = opts.pollMs ?? 25;
|
|
48
|
-
const resource = opts.resource ?? lockPath;
|
|
49
|
-
const deadline = Date.now() + timeoutMs;
|
|
50
|
-
await mkdir(dirname(lockPath), {
|
|
51
|
-
recursive: true,
|
|
52
|
-
mode: 448
|
|
53
|
-
});
|
|
54
|
-
const ownerId = randomUUID();
|
|
55
|
-
while (true) try {
|
|
56
|
-
const handle = await open(lockPath, "wx", 384);
|
|
57
|
-
const info = {
|
|
58
|
-
pid: process.pid,
|
|
59
|
-
startedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
60
|
-
ownerId
|
|
61
|
-
};
|
|
62
|
-
try {
|
|
63
|
-
await handle.writeFile(JSON.stringify(info) + "\n", { encoding: "utf8" });
|
|
64
|
-
} finally {
|
|
65
|
-
await handle.close();
|
|
66
|
-
}
|
|
67
|
-
break;
|
|
68
|
-
} catch (err) {
|
|
69
|
-
if ((err && typeof err === "object" && "code" in err ? String(err.code) : "") !== "EEXIST") throw err;
|
|
70
|
-
const info = await readLockInfo(lockPath);
|
|
71
|
-
if (info && !isProcessRunning(info.pid)) {
|
|
72
|
-
await rm(lockPath, { force: true });
|
|
73
|
-
continue;
|
|
74
|
-
}
|
|
75
|
-
if (Date.now() >= deadline) throw anypickError(`Resource locked: ${resource}` + (info ? ` (held by pid ${info.pid})` : "") + ". Retry after the other anypick process finishes.", "STATE_CONFLICT", {
|
|
76
|
-
exitCode: ExitCode.CAPABILITY_CONFLICT,
|
|
77
|
-
details: {
|
|
78
|
-
lockPath,
|
|
79
|
-
ownerPid: info?.pid
|
|
80
|
-
}
|
|
81
|
-
});
|
|
82
|
-
await sleep(pollMs);
|
|
83
|
-
}
|
|
84
|
-
try {
|
|
85
|
-
return await fn();
|
|
86
|
-
} finally {
|
|
87
|
-
try {
|
|
88
|
-
if ((await readLockInfo(lockPath))?.ownerId === ownerId) await rm(lockPath, { force: true });
|
|
89
|
-
} catch {}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
//#endregion
|
|
93
|
-
export { isLockStale, readLockInfo, withFileLock };
|
|
94
|
-
|
|
95
|
-
//# sourceMappingURL=lock.js.map
|
package/dist/utils/lock.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lock.js","names":[],"sources":["../../src/utils/lock.ts"],"sourcesContent":["/**\n * Scoped file locks for concurrent mutations (spec §23.3).\n *\n * Lock file content: `{ \"pid\": number, \"startedAt\": string }`\n * Stale locks (dead owner PID) are stolen after a brief wait.\n */\n\nimport { mkdir, open, readFile, rename, rm, writeFile } from 'node:fs/promises';\nimport { dirname } from 'node:path';\nimport { randomUUID } from 'node:crypto';\nimport { isProcessRunning } from './process';\nimport { anypickError, ExitCode } from './errors';\n\nexport interface LockInfo {\n pid: number;\n startedAt: string;\n /** Random ownership nonce prevents PID-reuse ABA on release. */\n ownerId?: string;\n}\n\nexport interface WithFileLockOptions {\n /** Max wait for another holder (ms). Default 5000. */\n timeoutMs?: number;\n /** Poll interval while waiting (ms). Default 25. */\n pollMs?: number;\n /** Human label for errors. */\n resource?: string;\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((r) => setTimeout(r, ms));\n}\n\nexport async function readLockInfo(lockPath: string): Promise<LockInfo | null> {\n try {\n const raw = await readFile(lockPath, 'utf8');\n const data = JSON.parse(raw) as Partial<LockInfo>;\n if (typeof data.pid === 'number' && data.pid > 0) {\n return {\n pid: data.pid,\n startedAt: typeof data.startedAt === 'string' ? data.startedAt : '',\n ownerId: typeof data.ownerId === 'string' ? data.ownerId : undefined,\n };\n }\n return null;\n } catch {\n return null;\n }\n}\n\n/** True when lock file is absent or owner process is dead. */\nexport async function isLockStale(lockPath: string): Promise<boolean> {\n const info = await readLockInfo(lockPath);\n if (!info) {\n // corrupt or unreadable — treat as stale so doctor can delete\n try {\n await readFile(lockPath);\n return true;\n } catch {\n return true; // missing\n }\n }\n return !isProcessRunning(info.pid);\n}\n\n/**\n * Acquire an exclusive lock via O_EXCL create, run fn, release.\n * Retries while another live process holds the lock.\n */\nexport async function withFileLock<T>(\n lockPath: string,\n fn: () => Promise<T>,\n opts: WithFileLockOptions = {},\n): Promise<T> {\n const timeoutMs = opts.timeoutMs ?? 5000;\n const pollMs = opts.pollMs ?? 25;\n const resource = opts.resource ?? lockPath;\n const deadline = Date.now() + timeoutMs;\n\n await mkdir(dirname(lockPath), { recursive: true, mode: 0o700 });\n const ownerId = randomUUID();\n\n while (true) {\n try {\n const handle = await open(lockPath, 'wx', 0o600);\n const info: LockInfo = {\n pid: process.pid,\n startedAt: new Date().toISOString(),\n ownerId,\n };\n try {\n await handle.writeFile(JSON.stringify(info) + '\\n', { encoding: 'utf8' });\n } finally {\n await handle.close();\n }\n break;\n } catch (err) {\n const code = err && typeof err === 'object' && 'code' in err ? String(err.code) : '';\n if (code !== 'EEXIST') {\n throw err;\n }\n\n const info = await readLockInfo(lockPath);\n if (info && !isProcessRunning(info.pid)) {\n // Stale — remove and retry\n await rm(lockPath, { force: true });\n continue;\n }\n\n if (Date.now() >= deadline) {\n throw anypickError(\n `Resource locked: ${resource}` +\n (info ? ` (held by pid ${info.pid})` : '') +\n '. Retry after the other anypick process finishes.',\n 'STATE_CONFLICT',\n {\n exitCode: ExitCode.CAPABILITY_CONFLICT,\n details: { lockPath, ownerPid: info?.pid },\n },\n );\n }\n await sleep(pollMs);\n }\n }\n\n try {\n return await fn();\n } finally {\n try {\n const info = await readLockInfo(lockPath);\n // Only release if we still own it\n if (info?.ownerId === ownerId) {\n await rm(lockPath, { force: true });\n }\n } catch {\n // best-effort\n }\n }\n}\n\n/**\n * Atomically write a file under an exclusive lock sibling (`path.lock`).\n */\nexport async function writeFileLocked(path: string, content: string, mode = 0o600): Promise<void> {\n await withFileLock(`${path}.lock`, async () => {\n await mkdir(dirname(path), { recursive: true, mode: 0o700 });\n const tmp = `${path}.${randomUUID()}.tmp`;\n try {\n await writeFile(tmp, content, { mode, flag: 'wx' });\n await rename(tmp, path);\n } catch (err) {\n await rm(tmp, { force: true }).catch(() => {});\n throw err;\n }\n });\n}\n"],"mappings":";;;;;;;;;;;;AA6BA,SAAS,MAAM,IAA2B;CACxC,OAAO,IAAI,SAAS,MAAM,WAAW,GAAG,EAAE,CAAC;AAC7C;AAEA,eAAsB,aAAa,UAA4C;CAC7E,IAAI;EACF,MAAM,MAAM,MAAM,SAAS,UAAU,MAAM;EAC3C,MAAM,OAAO,KAAK,MAAM,GAAG;EAC3B,IAAI,OAAO,KAAK,QAAQ,YAAY,KAAK,MAAM,GAC7C,OAAO;GACL,KAAK,KAAK;GACV,WAAW,OAAO,KAAK,cAAc,WAAW,KAAK,YAAY;GACjE,SAAS,OAAO,KAAK,YAAY,WAAW,KAAK,UAAU,KAAA;EAC7D;EAEF,OAAO;CACT,QAAQ;EACN,OAAO;CACT;AACF;;AAGA,eAAsB,YAAY,UAAoC;CACpE,MAAM,OAAO,MAAM,aAAa,QAAQ;CACxC,IAAI,CAAC,MAEH,IAAI;EACF,MAAM,SAAS,QAAQ;EACvB,OAAO;CACT,QAAQ;EACN,OAAO;CACT;CAEF,OAAO,CAAC,iBAAiB,KAAK,GAAG;AACnC;;;;;AAMA,eAAsB,aACpB,UACA,IACA,OAA4B,CAAC,GACjB;CACZ,MAAM,YAAY,KAAK,aAAa;CACpC,MAAM,SAAS,KAAK,UAAU;CAC9B,MAAM,WAAW,KAAK,YAAY;CAClC,MAAM,WAAW,KAAK,IAAI,IAAI;CAE9B,MAAM,MAAM,QAAQ,QAAQ,GAAG;EAAE,WAAW;EAAM,MAAM;CAAM,CAAC;CAC/D,MAAM,UAAU,WAAW;CAE3B,OAAO,MACL,IAAI;EACF,MAAM,SAAS,MAAM,KAAK,UAAU,MAAM,GAAK;EAC/C,MAAM,OAAiB;GACrB,KAAK,QAAQ;GACb,4BAAW,IAAI,KAAK,EAAA,CAAE,YAAY;GAClC;EACF;EACA,IAAI;GACF,MAAM,OAAO,UAAU,KAAK,UAAU,IAAI,IAAI,MAAM,EAAE,UAAU,OAAO,CAAC;EAC1E,UAAU;GACR,MAAM,OAAO,MAAM;EACrB;EACA;CACF,SAAS,KAAK;EAEZ,KADa,OAAO,OAAO,QAAQ,YAAY,UAAU,MAAM,OAAO,IAAI,IAAI,IAAI,QACrE,UACX,MAAM;EAGR,MAAM,OAAO,MAAM,aAAa,QAAQ;EACxC,IAAI,QAAQ,CAAC,iBAAiB,KAAK,GAAG,GAAG;GAEvC,MAAM,GAAG,UAAU,EAAE,OAAO,KAAK,CAAC;GAClC;EACF;EAEA,IAAI,KAAK,IAAI,KAAK,UAChB,MAAM,aACJ,oBAAoB,cACjB,OAAO,iBAAiB,KAAK,IAAI,KAAK,MACvC,qDACF,kBACA;GACE,UAAU,SAAS;GACnB,SAAS;IAAE;IAAU,UAAU,MAAM;GAAI;EAC3C,CACF;EAEF,MAAM,MAAM,MAAM;CACpB;CAGF,IAAI;EACF,OAAO,MAAM,GAAG;CAClB,UAAU;EACR,IAAI;GAGF,KAAI,MAFe,aAAa,QAAQ,EAAA,EAE9B,YAAY,SACpB,MAAM,GAAG,UAAU,EAAE,OAAO,KAAK,CAAC;EAEtC,QAAQ,CAER;CACF;AACF"}
|
package/dist/utils/log.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Low-noise diagnostic logging for internal failures that are best-effort
|
|
3
|
-
* (startup recovery, lease reaping, cleanup). These are intentionally not
|
|
4
|
-
* thrown — the operation is optional — but swallowing them silently hides
|
|
5
|
-
* exactly the partial-state conditions this tool exists to catch, so we log
|
|
6
|
-
* them to stderr behind ANYPICK_DEBUG instead of discarding them.
|
|
7
|
-
*/
|
|
8
|
-
/** Log an internal/best-effort failure to stderr (no-op unless ANYPICK_DEBUG). */
|
|
9
|
-
export declare function logInternalError(label: string, err: unknown): void;
|
|
10
|
-
//# sourceMappingURL=log.d.ts.map
|
package/dist/utils/log.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/utils/log.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI,CAMlE"}
|
package/dist/utils/log.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
//#region src/utils/log.ts
|
|
2
|
-
/**
|
|
3
|
-
* Low-noise diagnostic logging for internal failures that are best-effort
|
|
4
|
-
* (startup recovery, lease reaping, cleanup). These are intentionally not
|
|
5
|
-
* thrown — the operation is optional — but swallowing them silently hides
|
|
6
|
-
* exactly the partial-state conditions this tool exists to catch, so we log
|
|
7
|
-
* them to stderr behind ANYPICK_DEBUG instead of discarding them.
|
|
8
|
-
*/
|
|
9
|
-
function debugEnabled() {
|
|
10
|
-
return process.env.ANYPICK_DEBUG === "1" || process.env.ANYPICK_DEBUG === "true";
|
|
11
|
-
}
|
|
12
|
-
/** Log an internal/best-effort failure to stderr (no-op unless ANYPICK_DEBUG). */
|
|
13
|
-
function logInternalError(label, err) {
|
|
14
|
-
if (!debugEnabled()) return;
|
|
15
|
-
const message = err instanceof Error ? err.stack ?? err.message : String(err);
|
|
16
|
-
process.stderr.write(`[anypick:debug] ${label}: ${message}\n`);
|
|
17
|
-
}
|
|
18
|
-
//#endregion
|
|
19
|
-
export { logInternalError };
|
|
20
|
-
|
|
21
|
-
//# sourceMappingURL=log.js.map
|
package/dist/utils/log.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"log.js","names":[],"sources":["../../src/utils/log.ts"],"sourcesContent":["/**\n * Low-noise diagnostic logging for internal failures that are best-effort\n * (startup recovery, lease reaping, cleanup). These are intentionally not\n * thrown — the operation is optional — but swallowing them silently hides\n * exactly the partial-state conditions this tool exists to catch, so we log\n * them to stderr behind ANYPICK_DEBUG instead of discarding them.\n */\n\nfunction debugEnabled(): boolean {\n return process.env.ANYPICK_DEBUG === '1' || process.env.ANYPICK_DEBUG === 'true';\n}\n\n/** Log an internal/best-effort failure to stderr (no-op unless ANYPICK_DEBUG). */\nexport function logInternalError(label: string, err: unknown): void {\n if (!debugEnabled()) {\n return;\n }\n const message = err instanceof Error ? (err.stack ?? err.message) : String(err);\n process.stderr.write(`[anypick:debug] ${label}: ${message}\\n`);\n}\n"],"mappings":";;;;;;;;AAQA,SAAS,eAAwB;CAC/B,OAAO,QAAQ,IAAI,kBAAkB,OAAO,QAAQ,IAAI,kBAAkB;AAC5E;;AAGA,SAAgB,iBAAiB,OAAe,KAAoB;CAClE,IAAI,CAAC,aAAa,GAChB;CAEF,MAAM,UAAU,eAAe,QAAS,IAAI,SAAS,IAAI,UAAW,OAAO,GAAG;CAC9E,QAAQ,OAAO,MAAM,mBAAmB,MAAM,IAAI,QAAQ,GAAG;AAC/D"}
|
package/dist/utils/network.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/utils/network.ts"],"names":[],"mappings":"AAEA,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMpD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAOrD"}
|
package/dist/utils/network.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { AnyPickError } from "./errors.js";
|
|
2
|
-
//#region src/utils/network.ts
|
|
3
|
-
function isLoopbackHost(host) {
|
|
4
|
-
const value = host.trim().toLowerCase().replace(/^\[|\]$/g, "");
|
|
5
|
-
return value === "127.0.0.1" || value === "::1" || value === "localhost";
|
|
6
|
-
}
|
|
7
|
-
function assertLoopbackHost(host) {
|
|
8
|
-
if (!isLoopbackHost(host)) throw new AnyPickError(`Proxy host must be loopback-only (127.0.0.1, ::1, or localhost), got "${host}".`, "PROXY_UNSAFE_HOST");
|
|
9
|
-
}
|
|
10
|
-
//#endregion
|
|
11
|
-
export { assertLoopbackHost, isLoopbackHost };
|
|
12
|
-
|
|
13
|
-
//# sourceMappingURL=network.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"network.js","names":[],"sources":["../../src/utils/network.ts"],"sourcesContent":["import { AnyPickError } from './errors';\n\nexport function isLoopbackHost(host: string): boolean {\n const value = host\n .trim()\n .toLowerCase()\n .replace(/^\\[|\\]$/g, '');\n return value === '127.0.0.1' || value === '::1' || value === 'localhost';\n}\n\nexport function assertLoopbackHost(host: string): void {\n if (!isLoopbackHost(host)) {\n throw new AnyPickError(\n `Proxy host must be loopback-only (127.0.0.1, ::1, or localhost), got \"${host}\".`,\n 'PROXY_UNSAFE_HOST',\n );\n }\n}\n"],"mappings":";;AAEA,SAAgB,eAAe,MAAuB;CACpD,MAAM,QAAQ,KACX,KAAK,CAAC,CACN,YAAY,CAAC,CACb,QAAQ,YAAY,EAAE;CACzB,OAAO,UAAU,eAAe,UAAU,SAAS,UAAU;AAC/D;AAEA,SAAgB,mBAAmB,MAAoB;CACrD,IAAI,CAAC,eAAe,IAAI,GACtB,MAAM,IAAI,aACR,yEAAyE,KAAK,KAC9E,mBACF;AAEJ"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export declare function resolveBinary(names: string[], extraPaths?: string[]): Promise<string | null>;
|
|
2
|
-
/**
|
|
3
|
-
* Locate an executable on PATH (and common locations). No hardcoded developer homes.
|
|
4
|
-
* Returns absolute path or null.
|
|
5
|
-
*/
|
|
6
|
-
export declare function whichExecutable(name: string): string | null;
|
|
7
|
-
/**
|
|
8
|
-
* Tail a file like `tail -f`: emits each new line via onLine.
|
|
9
|
-
* Polls every 200ms (reliable across macOS/Linux/Windows and immune to the
|
|
10
|
-
* missed-event races fs.watchFile can hit when an external process appends
|
|
11
|
-
* rapidly). A read-position cursor ensures we only emit appended content
|
|
12
|
-
* (survives rotation/truncation). Resolves when signal aborts.
|
|
13
|
-
*/
|
|
14
|
-
//# sourceMappingURL=binary.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"binary.d.ts","sourceRoot":"","sources":["../../../src/utils/process/binary.ts"],"names":[],"mappings":"AAEA,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EAAE,EACf,UAAU,GAAE,MAAM,EAAO,GACxB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA+BxB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAqC3D;AASD;;;;;;GAMG"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import "node:fs";
|
|
2
|
-
//#region src/utils/process/binary.ts
|
|
3
|
-
async function resolveBinary(names, extraPaths = []) {
|
|
4
|
-
const { access, constants } = await import("node:fs/promises");
|
|
5
|
-
const dirs = (process.env.PATH ?? "").split(process.platform === "win32" ? ";" : ":");
|
|
6
|
-
const candidates = [...extraPaths];
|
|
7
|
-
for (const name of names) if (name.includes("/") || name.includes("\\")) candidates.push(name);
|
|
8
|
-
else for (const dir of dirs) {
|
|
9
|
-
if (!dir) continue;
|
|
10
|
-
candidates.push(`${dir}/${name}`);
|
|
11
|
-
if (process.platform === "win32") candidates.push(`${dir}\\${name}.cmd`, `${dir}\\${name}.exe`);
|
|
12
|
-
}
|
|
13
|
-
for (const c of candidates) try {
|
|
14
|
-
await access(c, constants.X_OK);
|
|
15
|
-
return c;
|
|
16
|
-
} catch {}
|
|
17
|
-
return null;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Tail a file like `tail -f`: emits each new line via onLine.
|
|
21
|
-
* Polls every 200ms (reliable across macOS/Linux/Windows and immune to the
|
|
22
|
-
* missed-event races fs.watchFile can hit when an external process appends
|
|
23
|
-
* rapidly). A read-position cursor ensures we only emit appended content
|
|
24
|
-
* (survives rotation/truncation). Resolves when signal aborts.
|
|
25
|
-
*/
|
|
26
|
-
//#endregion
|
|
27
|
-
export { resolveBinary };
|
|
28
|
-
|
|
29
|
-
//# sourceMappingURL=binary.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"binary.js","names":[],"sources":["../../../src/utils/process/binary.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\n\nexport async function resolveBinary(\n names: string[],\n extraPaths: string[] = [],\n): Promise<string | null> {\n const { access, constants } = await import('node:fs/promises');\n const pathEnv = process.env.PATH ?? '';\n const dirs = pathEnv.split(process.platform === 'win32' ? ';' : ':');\n\n const candidates: string[] = [...extraPaths];\n for (const name of names) {\n if (name.includes('/') || name.includes('\\\\')) {\n candidates.push(name);\n } else {\n for (const dir of dirs) {\n if (!dir) {\n continue;\n }\n candidates.push(`${dir}/${name}`);\n if (process.platform === 'win32') {\n candidates.push(`${dir}\\\\${name}.cmd`, `${dir}\\\\${name}.exe`);\n }\n }\n }\n }\n\n for (const c of candidates) {\n try {\n await access(c, constants.X_OK);\n return c;\n } catch {\n // try next\n }\n }\n return null;\n}\n\n/**\n * Locate an executable on PATH (and common locations). No hardcoded developer homes.\n * Returns absolute path or null.\n */\nexport function whichExecutable(name: string): string | null {\n if (!name || name.includes('/') || name.includes('\\\\')) {\n // Absolute/relative path — check existence only\n try {\n if (existsSync(name)) {\n return name;\n }\n } catch {\n return null;\n }\n return null;\n }\n const pathEnv = process.env.PATH ?? '';\n const sep = process.platform === 'win32' ? ';' : ':';\n const exts =\n process.platform === 'win32'\n ? (process.env.PATHEXT ?? '.EXE;.CMD;.BAT').split(';').filter(Boolean)\n : [''];\n for (const dir of pathEnv.split(sep)) {\n if (!dir) {\n continue;\n }\n for (const ext of exts) {\n const candidate = joinPath(\n dir,\n name + (ext && !name.toUpperCase().endsWith(ext.toUpperCase()) ? ext : ''),\n );\n try {\n if (existsSync(candidate)) {\n return candidate;\n }\n } catch {\n // continue\n }\n }\n }\n return null;\n}\n\nfunction joinPath(a: string, b: string): string {\n if (a.endsWith('/') || a.endsWith('\\\\')) {\n return a + b;\n }\n return a + (process.platform === 'win32' ? '\\\\' : '/') + b;\n}\n\n/**\n * Tail a file like `tail -f`: emits each new line via onLine.\n * Polls every 200ms (reliable across macOS/Linux/Windows and immune to the\n * missed-event races fs.watchFile can hit when an external process appends\n * rapidly). A read-position cursor ensures we only emit appended content\n * (survives rotation/truncation). Resolves when signal aborts.\n */\n"],"mappings":";;AAEA,eAAsB,cACpB,OACA,aAAuB,CAAC,GACA;CACxB,MAAM,EAAE,QAAQ,cAAc,MAAM,OAAO;CAE3C,MAAM,QADU,QAAQ,IAAI,QAAQ,GAAA,CACf,MAAM,QAAQ,aAAa,UAAU,MAAM,GAAG;CAEnE,MAAM,aAAuB,CAAC,GAAG,UAAU;CAC3C,KAAK,MAAM,QAAQ,OACjB,IAAI,KAAK,SAAS,GAAG,KAAK,KAAK,SAAS,IAAI,GAC1C,WAAW,KAAK,IAAI;MAEpB,KAAK,MAAM,OAAO,MAAM;EACtB,IAAI,CAAC,KACH;EAEF,WAAW,KAAK,GAAG,IAAI,GAAG,MAAM;EAChC,IAAI,QAAQ,aAAa,SACvB,WAAW,KAAK,GAAG,IAAI,IAAI,KAAK,OAAO,GAAG,IAAI,IAAI,KAAK,KAAK;CAEhE;CAIJ,KAAK,MAAM,KAAK,YACd,IAAI;EACF,MAAM,OAAO,GAAG,UAAU,IAAI;EAC9B,OAAO;CACT,QAAQ,CAER;CAEF,OAAO;AACT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"follow.d.ts","sourceRoot":"","sources":["../../../src/utils/process/follow.ts"],"names":[],"mappings":"AAeA,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAC9B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CAmGf"}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import { open, stat } from "node:fs/promises";
|
|
2
|
-
//#region src/utils/process/follow.ts
|
|
3
|
-
function identityOf(file) {
|
|
4
|
-
return {
|
|
5
|
-
dev: file.dev,
|
|
6
|
-
ino: file.ino
|
|
7
|
-
};
|
|
8
|
-
}
|
|
9
|
-
function sameFile(a, b) {
|
|
10
|
-
return a?.dev === b.dev && a.ino === b.ino;
|
|
11
|
-
}
|
|
12
|
-
async function followFile(path, onLine, signal) {
|
|
13
|
-
if (signal?.aborted) return;
|
|
14
|
-
let cursor = 0;
|
|
15
|
-
let buffer = "";
|
|
16
|
-
let stopped = false;
|
|
17
|
-
let decoder = new TextDecoder();
|
|
18
|
-
let identity;
|
|
19
|
-
let reading = false;
|
|
20
|
-
const flush = (text) => {
|
|
21
|
-
buffer += text;
|
|
22
|
-
let idx;
|
|
23
|
-
while ((idx = buffer.indexOf("\n")) >= 0) {
|
|
24
|
-
const line = buffer.slice(0, idx).replace(/\r$/, "");
|
|
25
|
-
buffer = buffer.slice(idx + 1);
|
|
26
|
-
if (line.length > 0) onLine(line);
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
|
-
const readFrom = async () => {
|
|
30
|
-
if (stopped || reading) return;
|
|
31
|
-
reading = true;
|
|
32
|
-
try {
|
|
33
|
-
const current = await stat(path);
|
|
34
|
-
const currentIdentity = identityOf(current);
|
|
35
|
-
if (!sameFile(identity, currentIdentity) || current.size < cursor) {
|
|
36
|
-
cursor = 0;
|
|
37
|
-
buffer = "";
|
|
38
|
-
decoder = new TextDecoder();
|
|
39
|
-
}
|
|
40
|
-
identity = currentIdentity;
|
|
41
|
-
const unread = current.size - cursor;
|
|
42
|
-
if (unread > 0) {
|
|
43
|
-
const handle = await open(path, "r");
|
|
44
|
-
try {
|
|
45
|
-
const appended = Buffer.allocUnsafe(unread);
|
|
46
|
-
const { bytesRead } = await handle.read(appended, 0, unread, cursor);
|
|
47
|
-
cursor += bytesRead;
|
|
48
|
-
flush(decoder.decode(appended.subarray(0, bytesRead), { stream: true }));
|
|
49
|
-
} finally {
|
|
50
|
-
await handle.close();
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
} catch {} finally {
|
|
54
|
-
reading = false;
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
try {
|
|
58
|
-
const s = await stat(path);
|
|
59
|
-
cursor = s.size;
|
|
60
|
-
identity = identityOf(s);
|
|
61
|
-
} catch {
|
|
62
|
-
cursor = 0;
|
|
63
|
-
}
|
|
64
|
-
return new Promise((resolve) => {
|
|
65
|
-
let timer;
|
|
66
|
-
const onAbort = () => {
|
|
67
|
-
if (stopped) return;
|
|
68
|
-
stopped = true;
|
|
69
|
-
if (timer) clearInterval(timer);
|
|
70
|
-
signal?.removeEventListener("abort", onAbort);
|
|
71
|
-
resolve();
|
|
72
|
-
};
|
|
73
|
-
signal?.addEventListener("abort", onAbort);
|
|
74
|
-
if (signal?.aborted) {
|
|
75
|
-
onAbort();
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
timer = setInterval(() => {
|
|
79
|
-
if (stopped) {
|
|
80
|
-
clearInterval(timer);
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
readFrom();
|
|
84
|
-
}, 200);
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
//#endregion
|
|
88
|
-
export { followFile };
|
|
89
|
-
|
|
90
|
-
//# sourceMappingURL=follow.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"follow.js","names":[],"sources":["../../../src/utils/process/follow.ts"],"sourcesContent":["import { open, stat } from 'node:fs/promises';\n\ninterface FileIdentity {\n dev: number;\n ino: number;\n}\n\nfunction identityOf(file: { dev: number; ino: number }): FileIdentity {\n return { dev: file.dev, ino: file.ino };\n}\n\nfunction sameFile(a: FileIdentity | undefined, b: FileIdentity): boolean {\n return a?.dev === b.dev && a.ino === b.ino;\n}\n\nexport async function followFile(\n path: string,\n onLine: (line: string) => void,\n signal?: AbortSignal,\n): Promise<void> {\n if (signal?.aborted) {\n return;\n }\n\n let cursor = 0;\n let buffer = '';\n let stopped = false;\n let decoder = new TextDecoder();\n let identity: FileIdentity | undefined;\n let reading = false;\n\n const flush = (text: string) => {\n buffer += text;\n let idx: number;\n while ((idx = buffer.indexOf('\\n')) >= 0) {\n const line = buffer.slice(0, idx).replace(/\\r$/, '');\n buffer = buffer.slice(idx + 1);\n if (line.length > 0) {\n onLine(line);\n }\n }\n };\n\n const readFrom = async () => {\n if (stopped || reading) {\n return;\n }\n reading = true;\n try {\n const current = await stat(path);\n const currentIdentity = identityOf(current);\n if (!sameFile(identity, currentIdentity) || current.size < cursor) {\n // A renamed replacement can be longer than its predecessor, so size\n // alone is not enough. Reset both byte and UTF-8 decoder state.\n cursor = 0;\n buffer = '';\n decoder = new TextDecoder();\n }\n identity = currentIdentity;\n const unread = current.size - cursor;\n if (unread > 0) {\n // Read only the appended range. A proxy log can run for days; polling\n // must be proportional to new bytes, not the lifetime file size.\n const handle = await open(path, 'r');\n try {\n const appended = Buffer.allocUnsafe(unread);\n const { bytesRead } = await handle.read(appended, 0, unread, cursor);\n cursor += bytesRead;\n flush(decoder.decode(appended.subarray(0, bytesRead), { stream: true }));\n } finally {\n await handle.close();\n }\n }\n } catch {\n // file not present yet — keep cursor, wait for next poll\n } finally {\n reading = false;\n }\n };\n\n // Seed cursor at end of current file so we only emit *new* lines.\n try {\n const s = await stat(path);\n cursor = s.size;\n identity = identityOf(s);\n } catch {\n cursor = 0;\n }\n\n return new Promise<void>((resolve) => {\n let timer: ReturnType<typeof setInterval> | undefined;\n const onAbort = () => {\n if (stopped) {\n return;\n }\n stopped = true;\n if (timer) {\n clearInterval(timer);\n }\n signal?.removeEventListener('abort', onAbort);\n resolve();\n };\n signal?.addEventListener('abort', onAbort);\n if (signal?.aborted) {\n onAbort();\n return;\n }\n // Poll every 200ms — reliable across macOS/Linux and immune to the\n // missed-event races that fs.watchFile can hit when an external process\n // (the proxy) appends rapidly.\n timer = setInterval(() => {\n if (stopped) {\n clearInterval(timer);\n return;\n }\n void readFrom();\n }, 200);\n });\n}\n"],"mappings":";;AAOA,SAAS,WAAW,MAAkD;CACpE,OAAO;EAAE,KAAK,KAAK;EAAK,KAAK,KAAK;CAAI;AACxC;AAEA,SAAS,SAAS,GAA6B,GAA0B;CACvE,OAAO,GAAG,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE;AACzC;AAEA,eAAsB,WACpB,MACA,QACA,QACe;CACf,IAAI,QAAQ,SACV;CAGF,IAAI,SAAS;CACb,IAAI,SAAS;CACb,IAAI,UAAU;CACd,IAAI,UAAU,IAAI,YAAY;CAC9B,IAAI;CACJ,IAAI,UAAU;CAEd,MAAM,SAAS,SAAiB;EAC9B,UAAU;EACV,IAAI;EACJ,QAAQ,MAAM,OAAO,QAAQ,IAAI,MAAM,GAAG;GACxC,MAAM,OAAO,OAAO,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,OAAO,EAAE;GACnD,SAAS,OAAO,MAAM,MAAM,CAAC;GAC7B,IAAI,KAAK,SAAS,GAChB,OAAO,IAAI;EAEf;CACF;CAEA,MAAM,WAAW,YAAY;EAC3B,IAAI,WAAW,SACb;EAEF,UAAU;EACV,IAAI;GACF,MAAM,UAAU,MAAM,KAAK,IAAI;GAC/B,MAAM,kBAAkB,WAAW,OAAO;GAC1C,IAAI,CAAC,SAAS,UAAU,eAAe,KAAK,QAAQ,OAAO,QAAQ;IAGjE,SAAS;IACT,SAAS;IACT,UAAU,IAAI,YAAY;GAC5B;GACA,WAAW;GACX,MAAM,SAAS,QAAQ,OAAO;GAC9B,IAAI,SAAS,GAAG;IAGd,MAAM,SAAS,MAAM,KAAK,MAAM,GAAG;IACnC,IAAI;KACF,MAAM,WAAW,OAAO,YAAY,MAAM;KAC1C,MAAM,EAAE,cAAc,MAAM,OAAO,KAAK,UAAU,GAAG,QAAQ,MAAM;KACnE,UAAU;KACV,MAAM,QAAQ,OAAO,SAAS,SAAS,GAAG,SAAS,GAAG,EAAE,QAAQ,KAAK,CAAC,CAAC;IACzE,UAAU;KACR,MAAM,OAAO,MAAM;IACrB;GACF;EACF,QAAQ,CAER,UAAU;GACR,UAAU;EACZ;CACF;CAGA,IAAI;EACF,MAAM,IAAI,MAAM,KAAK,IAAI;EACzB,SAAS,EAAE;EACX,WAAW,WAAW,CAAC;CACzB,QAAQ;EACN,SAAS;CACX;CAEA,OAAO,IAAI,SAAe,YAAY;EACpC,IAAI;EACJ,MAAM,gBAAgB;GACpB,IAAI,SACF;GAEF,UAAU;GACV,IAAI,OACF,cAAc,KAAK;GAErB,QAAQ,oBAAoB,SAAS,OAAO;GAC5C,QAAQ;EACV;EACA,QAAQ,iBAAiB,SAAS,OAAO;EACzC,IAAI,QAAQ,SAAS;GACnB,QAAQ;GACR;EACF;EAIA,QAAQ,kBAAkB;GACxB,IAAI,SAAS;IACX,cAAc,KAAK;IACnB;GACF;GACA,SAAc;EAChB,GAAG,GAAG;CACR,CAAC;AACH"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
export interface VerifyHealthOptions {
|
|
2
|
-
timeoutMs?: number;
|
|
3
|
-
intervalMs?: number;
|
|
4
|
-
/** Require this exact instance id echoed by the health endpoint (PROC-01). */
|
|
5
|
-
expectInstanceId?: string;
|
|
6
|
-
/** When set, the check fails if this pid is no longer alive. */
|
|
7
|
-
requirePid?: number;
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* Poll a health endpoint and (optionally) verify the child's identity by
|
|
11
|
-
* matching the instance id it echoes. A mismatch means the PID is alive but
|
|
12
|
-
* belongs to a different process — we must NOT treat it as owned (PROC-01).
|
|
13
|
-
*
|
|
14
|
-
* The endpoint should respond with JSON containing `{ instanceId }`. When
|
|
15
|
-
* `expectInstanceId` is set, only a matching echo counts as ready.
|
|
16
|
-
*/
|
|
17
|
-
export declare function verifyProcessHealth(endpoint: string, opts?: VerifyHealthOptions): Promise<boolean>;
|
|
18
|
-
/**
|
|
19
|
-
* True if nothing is currently listening on host:port.
|
|
20
|
-
* Uses a temporary bind probe (same as OS EADDRINUSE check).
|
|
21
|
-
*/
|
|
22
|
-
export declare function isListenPortFree(port: number, host?: string): Promise<boolean>;
|
|
23
|
-
/** Poll until port is free or timeout. */
|
|
24
|
-
export declare function waitForPortFree(port: number, host?: string, timeoutMs?: number): Promise<boolean>;
|
|
25
|
-
export declare function waitForHttp(endpoint: string, opts?: {
|
|
26
|
-
timeoutMs?: number;
|
|
27
|
-
intervalMs?: number;
|
|
28
|
-
/** When set, HTTP ready only counts if this pid is still alive (avoids EADDRINUSE ghost). */
|
|
29
|
-
requirePid?: number;
|
|
30
|
-
/** When set, the endpoint must echo this exact instance id to count as ready. */
|
|
31
|
-
expectInstanceId?: string;
|
|
32
|
-
}): Promise<boolean>;
|
|
33
|
-
export declare function sleep(ms: number): Promise<void>;
|
|
34
|
-
/**
|
|
35
|
-
* Best-effort PIDs listening on host:port (loopback proxies).
|
|
36
|
-
* Used to re-attach a pid record after a stale file left a live hub orphaned.
|
|
37
|
-
* Returns [] when lsof/ss is unavailable or nothing is listening.
|
|
38
|
-
*/
|
|
39
|
-
export declare function listenPidsOnPort(port: number, host?: string): Promise<number[]>;
|
|
40
|
-
/**
|
|
41
|
-
* Resolve a binary from PATH (and optional extra candidates).
|
|
42
|
-
*/
|
|
43
|
-
//# sourceMappingURL=health.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../../src/utils/process/health.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8EAA8E;IAC9E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,mBAAwB,GAC7B,OAAO,CAAC,OAAO,CAAC,CAgClB;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAkBzF;AAED,0CAA0C;AAC1C,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,IAAI,SAAc,EAClB,SAAS,SAAO,GACf,OAAO,CAAC,OAAO,CAAC,CAYlB;AAED,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE;IACJ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6FAA6F;IAC7F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iFAAiF;IACjF,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACtB,GACL,OAAO,CAAC,OAAO,CAAC,CAsClB;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAc,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAwC1F;AAED;;GAEG"}
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import { isProcessRunning } from "./pid.js";
|
|
2
|
-
//#region src/utils/process/health.ts
|
|
3
|
-
/**
|
|
4
|
-
* Poll a health endpoint and (optionally) verify the child's identity by
|
|
5
|
-
* matching the instance id it echoes. A mismatch means the PID is alive but
|
|
6
|
-
* belongs to a different process — we must NOT treat it as owned (PROC-01).
|
|
7
|
-
*
|
|
8
|
-
* The endpoint should respond with JSON containing `{ instanceId }`. When
|
|
9
|
-
* `expectInstanceId` is set, only a matching echo counts as ready.
|
|
10
|
-
*/
|
|
11
|
-
async function verifyProcessHealth(endpoint, opts = {}) {
|
|
12
|
-
const timeoutMs = opts.timeoutMs ?? 5e3;
|
|
13
|
-
const intervalMs = opts.intervalMs ?? 100;
|
|
14
|
-
const start = Date.now();
|
|
15
|
-
while (Date.now() - start < timeoutMs) {
|
|
16
|
-
if (opts.requirePid != null && !isProcessRunning(opts.requirePid)) return false;
|
|
17
|
-
try {
|
|
18
|
-
const res = await fetch(endpoint, {
|
|
19
|
-
method: "GET",
|
|
20
|
-
signal: AbortSignal.timeout(500),
|
|
21
|
-
headers: { accept: "application/json" }
|
|
22
|
-
});
|
|
23
|
-
if (!res.ok) {
|
|
24
|
-
await sleep(intervalMs);
|
|
25
|
-
continue;
|
|
26
|
-
}
|
|
27
|
-
if (opts.expectInstanceId == null) return true;
|
|
28
|
-
if ((await res.json()).instanceId === opts.expectInstanceId) return true;
|
|
29
|
-
return false;
|
|
30
|
-
} catch {
|
|
31
|
-
await sleep(intervalMs);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
return false;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* True if nothing is currently listening on host:port.
|
|
38
|
-
* Uses a temporary bind probe (same as OS EADDRINUSE check).
|
|
39
|
-
*/
|
|
40
|
-
async function isListenPortFree(port, host = "127.0.0.1") {
|
|
41
|
-
if (port === 0) return true;
|
|
42
|
-
const net = await import("node:net");
|
|
43
|
-
return new Promise((resolve) => {
|
|
44
|
-
const server = net.createServer();
|
|
45
|
-
server.unref();
|
|
46
|
-
server.once("error", () => resolve(false));
|
|
47
|
-
server.once("listening", () => {
|
|
48
|
-
server.close(() => resolve(true));
|
|
49
|
-
});
|
|
50
|
-
try {
|
|
51
|
-
server.listen(port, host);
|
|
52
|
-
} catch {
|
|
53
|
-
resolve(false);
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
async function waitForHttp(endpoint, opts = {}) {
|
|
58
|
-
const timeoutMs = opts.timeoutMs ?? 5e3;
|
|
59
|
-
const intervalMs = opts.intervalMs ?? 100;
|
|
60
|
-
const start = Date.now();
|
|
61
|
-
while (Date.now() - start < timeoutMs) {
|
|
62
|
-
if (opts.requirePid != null && !isProcessRunning(opts.requirePid)) return false;
|
|
63
|
-
try {
|
|
64
|
-
const res = await fetch(endpoint, {
|
|
65
|
-
method: "GET",
|
|
66
|
-
signal: AbortSignal.timeout(500),
|
|
67
|
-
headers: { accept: "application/json" }
|
|
68
|
-
});
|
|
69
|
-
if (opts.requirePid != null && !isProcessRunning(opts.requirePid)) return false;
|
|
70
|
-
if (opts.expectInstanceId != null) {
|
|
71
|
-
let echoedId;
|
|
72
|
-
try {
|
|
73
|
-
echoedId = (await res.clone().json()).instanceId;
|
|
74
|
-
} catch {
|
|
75
|
-
echoedId = void 0;
|
|
76
|
-
}
|
|
77
|
-
if (echoedId !== opts.expectInstanceId) return false;
|
|
78
|
-
}
|
|
79
|
-
return true;
|
|
80
|
-
} catch {
|
|
81
|
-
await sleep(intervalMs);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
return false;
|
|
85
|
-
}
|
|
86
|
-
function sleep(ms) {
|
|
87
|
-
return new Promise((r) => setTimeout(r, ms));
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Best-effort PIDs listening on host:port (loopback proxies).
|
|
91
|
-
* Used to re-attach a pid record after a stale file left a live hub orphaned.
|
|
92
|
-
* Returns [] when lsof/ss is unavailable or nothing is listening.
|
|
93
|
-
*/
|
|
94
|
-
async function listenPidsOnPort(port, host = "127.0.0.1") {
|
|
95
|
-
if (!Number.isInteger(port) || port <= 0) return [];
|
|
96
|
-
const { execFile } = await import("node:child_process");
|
|
97
|
-
const { promisify } = await import("node:util");
|
|
98
|
-
const execFileAsync = promisify(execFile);
|
|
99
|
-
try {
|
|
100
|
-
const { stdout } = await execFileAsync("lsof", [
|
|
101
|
-
"-nP",
|
|
102
|
-
`-iTCP@${host}:${port}`,
|
|
103
|
-
"-sTCP:LISTEN",
|
|
104
|
-
"-t"
|
|
105
|
-
], {
|
|
106
|
-
timeout: 2e3,
|
|
107
|
-
encoding: "utf8"
|
|
108
|
-
});
|
|
109
|
-
return [...new Set(stdout.split(/\r?\n/u).map((line) => Number.parseInt(line.trim(), 10)).filter((pid) => Number.isInteger(pid) && pid > 0 && isProcessRunning(pid)))];
|
|
110
|
-
} catch {}
|
|
111
|
-
try {
|
|
112
|
-
const { stdout } = await execFileAsync("ss", ["-lptn", `sport = :${port}`], {
|
|
113
|
-
timeout: 2e3,
|
|
114
|
-
encoding: "utf8"
|
|
115
|
-
});
|
|
116
|
-
const pids = [];
|
|
117
|
-
for (const match of stdout.matchAll(/pid=(\d+)/gu)) {
|
|
118
|
-
const pid = Number.parseInt(match[1] ?? "", 10);
|
|
119
|
-
if (Number.isInteger(pid) && pid > 0 && isProcessRunning(pid)) pids.push(pid);
|
|
120
|
-
}
|
|
121
|
-
return [...new Set(pids)];
|
|
122
|
-
} catch {
|
|
123
|
-
return [];
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* Resolve a binary from PATH (and optional extra candidates).
|
|
128
|
-
*/
|
|
129
|
-
//#endregion
|
|
130
|
-
export { isListenPortFree, listenPidsOnPort, sleep, verifyProcessHealth, waitForHttp };
|
|
131
|
-
|
|
132
|
-
//# sourceMappingURL=health.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"health.js","names":[],"sources":["../../../src/utils/process/health.ts"],"sourcesContent":["import { isProcessRunning } from './pid';\n\nexport interface VerifyHealthOptions {\n timeoutMs?: number;\n intervalMs?: number;\n /** Require this exact instance id echoed by the health endpoint (PROC-01). */\n expectInstanceId?: string;\n /** When set, the check fails if this pid is no longer alive. */\n requirePid?: number;\n}\n\n/**\n * Poll a health endpoint and (optionally) verify the child's identity by\n * matching the instance id it echoes. A mismatch means the PID is alive but\n * belongs to a different process — we must NOT treat it as owned (PROC-01).\n *\n * The endpoint should respond with JSON containing `{ instanceId }`. When\n * `expectInstanceId` is set, only a matching echo counts as ready.\n */\nexport async function verifyProcessHealth(\n endpoint: string,\n opts: VerifyHealthOptions = {},\n): Promise<boolean> {\n const timeoutMs = opts.timeoutMs ?? 5000;\n const intervalMs = opts.intervalMs ?? 100;\n const start = Date.now();\n while (Date.now() - start < timeoutMs) {\n if (opts.requirePid != null && !isProcessRunning(opts.requirePid)) {\n return false;\n }\n try {\n const res = await fetch(endpoint, {\n method: 'GET',\n signal: AbortSignal.timeout(500),\n headers: { accept: 'application/json' },\n });\n if (!res.ok) {\n await sleep(intervalMs);\n continue;\n }\n if (opts.expectInstanceId == null) {\n return true;\n }\n const body = (await res.json()) as { instanceId?: unknown };\n if (body.instanceId === opts.expectInstanceId) {\n return true;\n }\n // Alive but wrong identity → fail closed, do not retry-loop forever.\n return false;\n } catch {\n await sleep(intervalMs);\n }\n }\n return false;\n}\n\n/**\n * True if nothing is currently listening on host:port.\n * Uses a temporary bind probe (same as OS EADDRINUSE check).\n */\nexport async function isListenPortFree(port: number, host = '127.0.0.1'): Promise<boolean> {\n if (port === 0) {\n return true;\n }\n const net = await import('node:net');\n return new Promise((resolve) => {\n const server = net.createServer();\n server.unref();\n server.once('error', () => resolve(false));\n server.once('listening', () => {\n server.close(() => resolve(true));\n });\n try {\n server.listen(port, host);\n } catch {\n resolve(false);\n }\n });\n}\n\n/** Poll until port is free or timeout. */\nexport async function waitForPortFree(\n port: number,\n host = '127.0.0.1',\n timeoutMs = 3000,\n): Promise<boolean> {\n if (port === 0) {\n return true;\n }\n const start = Date.now();\n while (Date.now() - start < timeoutMs) {\n if (await isListenPortFree(port, host)) {\n return true;\n }\n await sleep(50);\n }\n return isListenPortFree(port, host);\n}\n\nexport async function waitForHttp(\n endpoint: string,\n opts: {\n timeoutMs?: number;\n intervalMs?: number;\n /** When set, HTTP ready only counts if this pid is still alive (avoids EADDRINUSE ghost). */\n requirePid?: number;\n /** When set, the endpoint must echo this exact instance id to count as ready. */\n expectInstanceId?: string;\n } = {},\n): Promise<boolean> {\n const timeoutMs = opts.timeoutMs ?? 5000;\n const intervalMs = opts.intervalMs ?? 100;\n const start = Date.now();\n while (Date.now() - start < timeoutMs) {\n if (opts.requirePid != null && !isProcessRunning(opts.requirePid)) {\n return false;\n }\n try {\n const res = await fetch(endpoint, {\n method: 'GET',\n signal: AbortSignal.timeout(500),\n headers: { accept: 'application/json' },\n });\n // Any HTTP response means the server is up (even 404).\n void res;\n if (opts.requirePid != null && !isProcessRunning(opts.requirePid)) {\n return false;\n }\n // Identity gate (PROC-01): a live but wrong-identity process is not ours.\n if (opts.expectInstanceId != null) {\n let echoedId: unknown;\n try {\n const body = (await res.clone().json()) as { instanceId?: unknown };\n echoedId = body.instanceId;\n } catch {\n echoedId = undefined;\n }\n if (echoedId !== opts.expectInstanceId) {\n return false;\n }\n }\n return true;\n } catch {\n await sleep(intervalMs);\n }\n }\n return false;\n}\n\nexport function sleep(ms: number): Promise<void> {\n return new Promise((r) => setTimeout(r, ms));\n}\n\n/**\n * Best-effort PIDs listening on host:port (loopback proxies).\n * Used to re-attach a pid record after a stale file left a live hub orphaned.\n * Returns [] when lsof/ss is unavailable or nothing is listening.\n */\nexport async function listenPidsOnPort(port: number, host = '127.0.0.1'): Promise<number[]> {\n if (!Number.isInteger(port) || port <= 0) {\n return [];\n }\n const { execFile } = await import('node:child_process');\n const { promisify } = await import('node:util');\n const execFileAsync = promisify(execFile);\n try {\n const { stdout } = await execFileAsync(\n 'lsof',\n ['-nP', `-iTCP@${host}:${port}`, '-sTCP:LISTEN', '-t'],\n { timeout: 2000, encoding: 'utf8' },\n );\n return [\n ...new Set(\n stdout\n .split(/\\r?\\n/u)\n .map((line) => Number.parseInt(line.trim(), 10))\n .filter((pid) => Number.isInteger(pid) && pid > 0 && isProcessRunning(pid)),\n ),\n ];\n } catch {\n // Fall through — try ss on Linux if lsof is missing.\n }\n try {\n const { stdout } = await execFileAsync('ss', ['-lptn', `sport = :${port}`], {\n timeout: 2000,\n encoding: 'utf8',\n });\n const pids: number[] = [];\n for (const match of stdout.matchAll(/pid=(\\d+)/gu)) {\n const pid = Number.parseInt(match[1] ?? '', 10);\n if (Number.isInteger(pid) && pid > 0 && isProcessRunning(pid)) {\n pids.push(pid);\n }\n }\n return [...new Set(pids)];\n } catch {\n return [];\n }\n}\n\n/**\n * Resolve a binary from PATH (and optional extra candidates).\n */\n"],"mappings":"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"}
|