@kici-dev/orchestrator 0.17.0 → 0.19.0
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/dist/agent/agent-version.d.ts +12 -21
- package/dist/agent/dispatcher.d.ts +283 -437
- package/dist/agent/host-roster-reaper.d.ts +8 -10
- package/dist/agent/host-roster.d.ts +77 -100
- package/dist/agent/ownership-refusal.d.ts +3 -5
- package/dist/agent/ownership-tracker.d.ts +42 -76
- package/dist/agent/registry.d.ts +137 -230
- package/dist/agent/token-store.d.ts +34 -77
- package/dist/agent-packaging/availability.d.ts +6 -9
- package/dist/agent-packaging/download.d.ts +6 -9
- package/dist/agent-packaging/install-closure.d.ts +9 -12
- package/dist/agent-packaging/node-binary.d.ts +6 -10
- package/dist/agent-packaging/node-runtime-members.d.ts +3 -5
- package/dist/agent-packaging/refresh.d.ts +12 -16
- package/dist/agent-packaging/store.d.ts +5 -6
- package/dist/agent-packaging/upload.d.ts +3 -4
- package/dist/app.d.ts +0 -3
- package/dist/approvals/apply-decision.d.ts +35 -52
- package/dist/approvals/approval-resolver.d.ts +11 -23
- package/dist/approvals/held-run-release-wiring.d.ts +14 -21
- package/dist/approvals/independent-wiring.d.ts +13 -20
- package/dist/approvals/resume-router.d.ts +1 -1
- package/dist/approvals/step-approval-bridge.d.ts +11 -21
- package/dist/approvals/triggerer-subject.d.ts +8 -10
- package/dist/artifacts/artifact-store.d.ts +55 -95
- package/dist/artifacts/failure-messages.d.ts +15 -20
- package/dist/audit/access-log.d.ts +27 -45
- package/dist/audit/sampling-rate-limiter.d.ts +11 -23
- package/dist/cache/agent-job-failed-error.d.ts +2 -3
- package/dist/cache/build-coordinator.d.ts +5 -28
- package/dist/cache/cache-upload-settle.d.ts +11 -11
- package/dist/cache/dep-cache.d.ts +32 -60
- package/dist/cache/dispatch-cache-ref-tracker.d.ts +15 -23
- package/dist/cache/global-eval-round-cache.d.ts +33 -41
- package/dist/cache/pending-builds.d.ts +2 -6
- package/dist/cache/pending-dynamics.d.ts +2 -7
- package/dist/cache/pending-global-evals.d.ts +9 -12
- package/dist/cache/pending-inits.d.ts +11 -22
- package/dist/cache/pending-precursor-db-watcher.d.ts +24 -32
- package/dist/cache/pending-tracker.d.ts +17 -45
- package/dist/cache/precursor-result.d.ts +17 -30
- package/dist/cache/source-cache.d.ts +36 -65
- package/dist/cache/user-cache.d.ts +21 -25
- package/dist/cancel/cancel-held-run.d.ts +13 -16
- package/dist/cancel/cancel-route-answer.d.ts +1 -2
- package/dist/cancel/cancel-run.d.ts +26 -50
- package/dist/cancel/dashboard-cancel-handler.d.ts +2 -2
- package/dist/cancel/peer-job-cancel.d.ts +11 -14
- package/dist/cancel/sweep-stuck-cancelling.d.ts +9 -13
- package/dist/cli/api-client.d.ts +25 -76
- package/dist/cli/commands/access-log.d.ts +4 -24
- package/dist/cli/commands/agent-package.d.ts +7 -15
- package/dist/cli/commands/agent-service/agent-env.d.ts +3 -6
- package/dist/cli/commands/agent-service/index.d.ts +4 -10
- package/dist/cli/commands/agent-service/install.d.ts +4 -11
- package/dist/cli/commands/agent-service/status.d.ts +4 -9
- package/dist/cli/commands/agent-service/upgrade.d.ts +4 -16
- package/dist/cli/commands/agent.d.ts +12 -25
- package/dist/cli/commands/api-key.d.ts +5 -12
- package/dist/cli/commands/attestations-list.d.ts +7 -17
- package/dist/cli/commands/attestations-retry.d.ts +5 -11
- package/dist/cli/commands/attestations-reverify.d.ts +4 -5
- package/dist/cli/commands/attestations.d.ts +3 -8
- package/dist/cli/commands/audit.d.ts +1 -5
- package/dist/cli/commands/backend.d.ts +2 -11
- package/dist/cli/commands/check-run.d.ts +7 -18
- package/dist/cli/commands/cluster-name.d.ts +5 -12
- package/dist/cli/commands/cluster-settings.d.ts +28 -53
- package/dist/cli/commands/cold-store.d.ts +7 -15
- package/dist/cli/commands/config.d.ts +9 -20
- package/dist/cli/commands/context.d.ts +8 -20
- package/dist/cli/commands/dashboard-encryption-key.d.ts +9 -14
- package/dist/cli/commands/db-backup.d.ts +17 -32
- package/dist/cli/commands/db.d.ts +3 -4
- package/dist/cli/commands/debug-bundle.d.ts +3 -10
- package/dist/cli/commands/diagnose.d.ts +3 -14
- package/dist/cli/commands/event-dlq.d.ts +4 -12
- package/dist/cli/commands/event-log.d.ts +2 -20
- package/dist/cli/commands/execution.d.ts +3 -9
- package/dist/cli/commands/firecracker/index.d.ts +3 -6
- package/dist/cli/commands/held-run.d.ts +23 -37
- package/dist/cli/commands/host.d.ts +4 -11
- package/dist/cli/commands/inspect-bundle.d.ts +3 -11
- package/dist/cli/commands/local-hook.d.ts +2 -10
- package/dist/cli/commands/local-trigger.d.ts +2 -2
- package/dist/cli/commands/orchestrator-service/drain.d.ts +3 -6
- package/dist/cli/commands/orchestrator-service/index.d.ts +6 -14
- package/dist/cli/commands/orchestrator-service/install-env.d.ts +25 -49
- package/dist/cli/commands/orchestrator-service/install.d.ts +2 -5
- package/dist/cli/commands/orchestrator-service/status.d.ts +10 -22
- package/dist/cli/commands/orchestrator-service/upgrade.d.ts +6 -15
- package/dist/cli/commands/org-settings.d.ts +5 -11
- package/dist/cli/commands/peer.d.ts +5 -10
- package/dist/cli/commands/queue.d.ts +3 -9
- package/dist/cli/commands/registration.d.ts +4 -8
- package/dist/cli/commands/remote-source.d.ts +6 -12
- package/dist/cli/commands/rotate.d.ts +1 -5
- package/dist/cli/commands/runs.d.ts +1 -30
- package/dist/cli/commands/scaler.d.ts +5 -12
- package/dist/cli/commands/secret.d.ts +1 -9
- package/dist/cli/commands/service-health.d.ts +5 -10
- package/dist/cli/commands/shared/admin-cli-access-log.d.ts +10 -19
- package/dist/cli/commands/shared/bare-metal-binary-check.d.ts +86 -0
- package/dist/cli/commands/shared/cli-action.d.ts +1 -4
- package/dist/cli/commands/shared/confirm.d.ts +5 -10
- package/dist/cli/commands/shared/db.d.ts +1 -12
- package/dist/cli/commands/shared/env-file-mode.d.ts +6 -9
- package/dist/cli/commands/shared/secret-input.d.ts +7 -21
- package/dist/cli/commands/shared/service-verbs.d.ts +6 -12
- package/dist/cli/commands/shared/unbound-context-warning.d.ts +2 -4
- package/dist/cli/commands/shared/upgrade-hooks.d.ts +7 -16
- package/dist/cli/commands/shared/upgrade-safety.d.ts +20 -31
- package/dist/cli/commands/shared/versioned-upgrade.d.ts +83 -161
- package/dist/cli/commands/signing-key.d.ts +4 -9
- package/dist/cli/commands/source-manifest.d.ts +11 -14
- package/dist/cli/commands/source.d.ts +7 -32
- package/dist/cli/commands/token.d.ts +4 -15
- package/dist/cli/commands/trust-policy.d.ts +35 -88
- package/dist/cli/commands/variable.d.ts +3 -5
- package/dist/cli/commands/workflow.d.ts +3 -24
- package/dist/cli/join.d.ts +3 -6
- package/dist/cli/kici-admin.d.ts +11 -29
- package/dist/cli/lazy-deps/cache.d.ts +1 -14
- package/dist/cli/lazy-deps/downloader.d.ts +4 -27
- package/dist/cli/lazy-deps/registry.d.ts +5 -25
- package/dist/cli/local-github-ingress-url.d.ts +5 -7
- package/dist/cli/loopback-callback.d.ts +6 -7
- package/dist/cli/open-browser.d.ts +4 -8
- package/dist/cli/root-option-routing.d.ts +17 -29
- package/dist/cli/service/backup-timer.d.ts +16 -39
- package/dist/cli/service/compose-path.d.ts +3 -7
- package/dist/cli/service/compose.d.ts +12 -30
- package/dist/cli/service/deploy-env.d.ts +6 -18
- package/dist/cli/service/entrypoint.d.ts +14 -25
- package/dist/cli/service/env-assignment.d.ts +6 -17
- package/dist/cli/service/image-digests.d.ts +6 -15
- package/dist/cli/service/index.d.ts +2 -18
- package/dist/cli/service/instance/index-file.d.ts +9 -16
- package/dist/cli/service/instance/manifest.d.ts +60 -60
- package/dist/cli/service/instance/resolve.d.ts +32 -68
- package/dist/cli/service/instance/types.d.ts +12 -29
- package/dist/cli/service/launchd.d.ts +29 -60
- package/dist/cli/service/platform-detect.d.ts +13 -68
- package/dist/cli/service/privilege.d.ts +12 -25
- package/dist/cli/service/shutdown-grace.d.ts +11 -20
- package/dist/cli/service/systemd.d.ts +7 -20
- package/dist/cli/service/types.d.ts +63 -114
- package/dist/cli/service/windows-acl.d.ts +14 -21
- package/dist/cli/service/windows-env-file.d.ts +10 -28
- package/dist/cli/service/windows.d.ts +15 -31
- package/dist/cli/webhook-url-notes.d.ts +4 -6
- package/dist/cli/wizard/agent-wizard.d.ts +3 -14
- package/dist/cli/wizard/orchestrator-wizard.d.ts +12 -37
- package/dist/cli/wizard/prompts.d.ts +6 -16
- package/dist/cli.js +8207 -10128
- package/dist/cluster/cluster-identity.d.ts +20 -32
- package/dist/cluster/cluster-settings-reader.d.ts +50 -77
- package/dist/cluster/coordinator-credential.d.ts +4 -5
- package/dist/cluster/coordinator.d.ts +76 -148
- package/dist/cluster/health-api.d.ts +2 -10
- package/dist/cluster/index.d.ts +1 -6
- package/dist/cluster/instance-heartbeat.d.ts +26 -42
- package/dist/cluster/join-client.d.ts +4 -7
- package/dist/cluster/join-handler.d.ts +3 -7
- package/dist/cluster/join-token.d.ts +13 -27
- package/dist/cluster/leader-gated-scheduler.d.ts +8 -17
- package/dist/cluster/orphan-recovery.d.ts +13 -35
- package/dist/cluster/peer-auth-coordinator.d.ts +2 -8
- package/dist/cluster/peer-client.d.ts +46 -76
- package/dist/cluster/peer-credentials.d.ts +24 -70
- package/dist/cluster/peer-crypto.d.ts +5 -26
- package/dist/cluster/peer-forget.d.ts +3 -3
- package/dist/cluster/peer-handler.d.ts +47 -71
- package/dist/cluster/peer-registry.d.ts +37 -106
- package/dist/cluster/plan-headroom-store.d.ts +4 -6
- package/dist/cluster/raft-state.d.ts +4 -13
- package/dist/cluster/raft.d.ts +18 -53
- package/dist/cluster/reconcile-identity.d.ts +8 -11
- package/dist/cluster/rerouted-job-guard.d.ts +7 -11
- package/dist/cluster/verified-issuer.d.ts +2 -3
- package/dist/cluster/worker-cluster-settings.d.ts +7 -10
- package/dist/cluster/worker-eviction.d.ts +16 -26
- package/dist/cold-store/load-access-log-range.d.ts +15 -31
- package/dist/cold-store/load-event-log-range.d.ts +13 -27
- package/dist/cold-store/load-secret-audit-log-range.d.ts +8 -12
- package/dist/cold-store/orchestrator-cold-store.d.ts +8 -28
- package/dist/cold-store/tables/access-log.d.ts +12 -14
- package/dist/cold-store/tables/event-log.d.ts +4 -8
- package/dist/cold-store/tables/execution-runs.d.ts +6 -11
- package/dist/cold-store/tables/secret-audit-log.d.ts +5 -12
- package/dist/concurrency/dispatch-next-queued.d.ts +13 -25
- package/dist/concurrency/queue-manager.d.ts +22 -54
- package/dist/concurrency/waiters.d.ts +15 -31
- package/dist/config/encryption.d.ts +0 -2
- package/dist/config/loader.d.ts +0 -1
- package/dist/config/reload.d.ts +0 -6
- package/dist/config/resolver.d.ts +0 -4
- package/dist/config/shared-store.d.ts +0 -2
- package/dist/config/types.d.ts +0 -3
- package/dist/content-requirements-cache.d.ts +0 -1
- package/dist/contexts/context-store.d.ts +0 -2
- package/dist/contexts/held-runs.d.ts +0 -2
- package/dist/contexts/variable-store.d.ts +0 -2
- package/dist/dashboard/attestation-filters.d.ts +13 -18
- package/dist/dashboard/handler.d.ts +145 -307
- package/dist/db/client.d.ts +2 -6
- package/dist/db/deferred-index-build.d.ts +8 -10
- package/dist/db/deferred-indexes.d.ts +15 -22
- package/dist/db/migration-provider.d.ts +2 -4
- package/dist/db/migration-test-harness.d.ts +26 -44
- package/dist/db/migrations/001_initial.d.ts +1 -4
- package/dist/db/migrations/002_config_versions_key_version.d.ts +5 -8
- package/dist/db/migrations/003_access_log.d.ts +10 -15
- package/dist/db/migrations/004_rename_bundle_to_source.d.ts +7 -9
- package/dist/db/migrations/005_cold_store_chunk_counter.d.ts +4 -10
- package/dist/db/migrations/006_runs_jobs_steps_archived_at.d.ts +9 -29
- package/dist/db/migrations/007_audit_logs_archived_at.d.ts +11 -30
- package/dist/db/migrations/008_event_log_archived_at.d.ts +14 -29
- package/dist/db/migrations/009_access_log_trigram.d.ts +4 -8
- package/dist/db/migrations/010_cold_store_chunks.d.ts +16 -26
- package/dist/db/migrations/011_drop_source_secrets_notify.d.ts +6 -14
- package/dist/db/migrations/012_peer_credentials_active_uniq.d.ts +9 -14
- package/dist/db/migrations/013_execution_log_bytes.d.ts +5 -13
- package/dist/db/migrations/014_kici_events_lease_retry.d.ts +14 -27
- package/dist/db/migrations/015_org_settings_customer_scoped.d.ts +12 -17
- package/dist/db/migrations/016_org_settings_allow_http_npm.d.ts +4 -6
- package/dist/db/migrations/019_generic_sources_change_notify.d.ts +13 -17
- package/dist/db/migrations/020_org_settings_dashboard_write_policy.d.ts +5 -8
- package/dist/db/migrations/021_check_run_tracking.d.ts +5 -17
- package/dist/db/migrations/022_scaler_manager_state.d.ts +10 -20
- package/dist/db/migrations/023_dispatch_queue_recovery_deadline.d.ts +7 -18
- package/dist/db/migrations/024_dispatch_queue_provisioning_error.d.ts +5 -11
- package/dist/db/migrations/025_init_failure.d.ts +5 -9
- package/dist/db/migrations/027_workflow_timeout.d.ts +5 -13
- package/dist/db/migrations/029_dispatch_queue_attempts.d.ts +4 -10
- package/dist/db/migrations/030_held_runs_env_set_null.d.ts +5 -6
- package/dist/db/migrations/031_dispatch_queue_ack_deadline.d.ts +6 -12
- package/dist/db/migrations/033_org_settings_approval.d.ts +7 -10
- package/dist/db/migrations/034_held_runs_generalize.d.ts +10 -18
- package/dist/db/migrations/035_pending_workflow_contexts.d.ts +4 -5
- package/dist/db/migrations/037_generic_sources_provider_type_local.d.ts +5 -6
- package/dist/db/migrations/038_remote_sources.d.ts +5 -7
- package/dist/db/migrations/045_host_properties.d.ts +5 -9
- package/dist/db/migrations/046_join_token_consumed_by_instance.d.ts +5 -10
- package/dist/db/migrations/048_host_reboot_pending.d.ts +6 -12
- package/dist/db/migrations/049_held_runs_payload.d.ts +3 -8
- package/dist/db/migrations/050_sources_slug.d.ts +4 -5
- package/dist/db/migrations/051_binding_host_pattern.d.ts +7 -10
- package/dist/db/migrations/052_host_reach_metadata.d.ts +8 -11
- package/dist/db/migrations/053_agent_token_single_use.d.ts +6 -10
- package/dist/db/migrations/054_local_working_tree.d.ts +4 -6
- package/dist/db/migrations/055_agent_token_mandatory_labels.d.ts +6 -11
- package/dist/db/migrations/056_execution_jobs_environments.d.ts +4 -11
- package/dist/db/migrations/064_execution_jobs_skipped_environments.d.ts +6 -9
- package/dist/db/migrations/065_pending_attestations.d.ts +9 -12
- package/dist/db/migrations/066_pending_attestations_rejected.d.ts +4 -7
- package/dist/db/migrations/068_request_idempotency.d.ts +7 -9
- package/dist/db/migrations/069_reroute_tunables.d.ts +6 -14
- package/dist/db/migrations/071_batch_accumulation.d.ts +8 -16
- package/dist/db/migrations/072_dispatch_queue_run_id_index.d.ts +3 -9
- package/dist/db/migrations/074_normalize_zero_concurrency_limit.d.ts +4 -7
- package/dist/db/migrations/076_artifacts.d.ts +7 -8
- package/dist/db/migrations/078_org_settings_backup_staleness.d.ts +3 -6
- package/dist/db/migrations/079_org_settings_scaler_spawn_timeout.d.ts +4 -8
- package/dist/db/migrations/080_cluster_settings.d.ts +6 -10
- package/dist/db/migrations/081_org_settings_queue_timeout.d.ts +7 -11
- package/dist/db/migrations/082_host_s3_reachable.d.ts +5 -10
- package/dist/db/migrations/083_org_settings_artifact_caps.d.ts +6 -8
- package/dist/db/migrations/084_orchestrator_signing_keys.d.ts +8 -13
- package/dist/db/migrations/085_cluster_settings_reroute_flap_grace_ms.d.ts +4 -5
- package/dist/db/migrations/086_cluster_settings_max_fanout_hosts.d.ts +3 -3
- package/dist/db/migrations/087_cluster_settings_event_router_rate_limit.d.ts +5 -3
- package/dist/db/migrations/088_cluster_settings_cache_max_tarball_bytes.d.ts +3 -3
- package/dist/db/migrations/089_cluster_settings_cache_ttl_days.d.ts +3 -5
- package/dist/db/migrations/090_cluster_settings_concurrency_wait_timeout_ms.d.ts +3 -6
- package/dist/db/migrations/091_cluster_settings_agent_token_ttl_ms.d.ts +3 -6
- package/dist/db/migrations/092_cluster_settings_version.d.ts +5 -9
- package/dist/db/migrations/094_dashboard_encryption_keys.d.ts +9 -14
- package/dist/db/migrations/095_dashboard_write_policy_tristate.d.ts +2 -6
- package/dist/db/migrations/099_cluster_settings_dashboard_verified_issuer.d.ts +8 -11
- package/dist/db/migrations/101_contexts_hold_expiry_drop_default.d.ts +9 -15
- package/dist/db/migrations/102_dispatch_queue_agent_id.d.ts +6 -11
- package/dist/db/migrations/103_cluster_settings_ownership_db_check_timeout_ms.d.ts +6 -12
- package/dist/db/migrations/104_check_run_terminal_sent.d.ts +8 -14
- package/dist/db/migrations/105_org_trust_policy.d.ts +5 -7
- package/dist/db/migrations/106_cluster_settings_check_run_tracking_ttl_days.d.ts +4 -12
- package/dist/db/migrations/107_check_run_tracking_updated_at_index.d.ts +8 -14
- package/dist/db/migrations/113_execution_runs_workflow_repo_index.d.ts +10 -19
- package/dist/db/migrations/115_global_workflows_cluster_switch.d.ts +2 -3
- package/dist/db/migrations/121_org_settings_allow_untrusted_dockerfile_builds.d.ts +7 -8
- package/dist/db/migrations/122_host_roster_scaler_managed.d.ts +9 -16
- package/dist/db/migrations/123_workflow_registrations_default_branch.d.ts +8 -16
- package/dist/db/migrations/125_org_trust_directory.d.ts +13 -21
- package/dist/db/migrations/126_held_runs_posted_pending_check.d.ts +10 -16
- package/dist/db/migrations/127_org_trust_policy_approval_expiry_seconds.d.ts +8 -16
- package/dist/db/migrations/128_execution_runs_global_eval_round.d.ts +6 -11
- package/dist/db/migrations/129_execution_runs_dispatch_routing_key.d.ts +8 -11
- package/dist/db/migrations/130_scaler_provision_outcomes.d.ts +13 -20
- package/dist/db/migrations/131_execution_jobs_git_credentials.d.ts +12 -22
- package/dist/db/migrations/132_execution_runs_trigger_event.d.ts +6 -16
- package/dist/db/migrations/133_dispatch_queue_source_tar_digest.d.ts +6 -9
- package/dist/db/migrations/140_dispatch_queue_canonical_labels.d.ts +22 -40
- package/dist/db/migrations/143_execution_jobs_precursor_result.d.ts +9 -18
- package/dist/db/migrations/144_execution_runs_registration_window.d.ts +12 -20
- package/dist/db/migrations/147_sealed_job_secrets.d.ts +5 -9
- package/dist/db/migrations/148_cluster_settings_sealed_secrets_retry_backoff_ms.d.ts +7 -13
- package/dist/db/migrations/150_execution_runs_status_epoch.d.ts +6 -11
- package/dist/db/migrations/152_org_settings_cache_upload_settle_timeout.d.ts +5 -8
- package/dist/db/migrations/157_host_roster_identity_source.d.ts +9 -13
- package/dist/db/migrations/159_org_id_widen_to_source_width.d.ts +5 -0
- package/dist/db/migrator.d.ts +17 -25
- package/dist/db/notify-listener.d.ts +8 -11
- package/dist/db/repos/dashboard-encryption-keys-repo.d.ts +9 -10
- package/dist/db/synthetic-job-ids.d.ts +6 -8
- package/dist/db/types.d.ts +531 -1058
- package/dist/deployment/deployment-identity.d.ts +42 -60
- package/dist/diagnostics/bundle-reader.d.ts +3 -15
- package/dist/diagnostics/bundle-writer.d.ts +5 -12
- package/dist/diagnostics/checks/agents.d.ts +1 -7
- package/dist/diagnostics/checks/backup.d.ts +7 -10
- package/dist/diagnostics/checks/certs.d.ts +1 -6
- package/dist/diagnostics/checks/config.d.ts +2 -5
- package/dist/diagnostics/checks/db.d.ts +1 -1
- package/dist/diagnostics/checks/disk.d.ts +1 -6
- package/dist/diagnostics/checks/firecracker-network.d.ts +3 -3
- package/dist/diagnostics/checks/index.d.ts +0 -6
- package/dist/diagnostics/checks/retention.d.ts +3 -6
- package/dist/diagnostics/checks/scaler.d.ts +3 -7
- package/dist/diagnostics/checks/ws.d.ts +1 -6
- package/dist/diagnostics/fleet-collector.d.ts +11 -14
- package/dist/diagnostics/fleet-constants.d.ts +1 -3
- package/dist/diagnostics/fleet-selection.d.ts +3 -7
- package/dist/diagnostics/fleet-topology.d.ts +2 -6
- package/dist/diagnostics/fleet-wiring.d.ts +6 -12
- package/dist/diagnostics/index.d.ts +0 -5
- package/dist/diagnostics/runner.d.ts +4 -8
- package/dist/diagnostics/types.d.ts +10 -21
- package/dist/drain/drain-controller.d.ts +16 -22
- package/dist/entry-helpers.d.ts +0 -2
- package/dist/events/circuit-breaker.d.ts +0 -3
- package/dist/events/event-router.d.ts +1 -2
- package/dist/events/event-store.d.ts +0 -9
- package/dist/events/trust-store.d.ts +0 -3
- package/dist/events/types.d.ts +0 -9
- package/dist/firecracker/host-network.d.ts +24 -30
- package/dist/firecracker/net-interfaces.d.ts +4 -7
- package/dist/helpers/rate-limiter.d.ts +0 -1
- package/dist/index.js +240 -482
- package/dist/metrics/agent-metrics-aggregator.d.ts +24 -67
- package/dist/metrics/metrics-reporter.d.ts +4 -13
- package/dist/metrics/prometheus.d.ts +47 -81
- package/dist/orchestrator-core.d.ts +3 -7
- package/dist/pipeline/content-filter.d.ts +20 -30
- package/dist/pipeline/cross-source-tally.d.ts +7 -8
- package/dist/pipeline/decorating-secret-resolver.d.ts +4 -8
- package/dist/pipeline/degraded-reason.d.ts +3 -4
- package/dist/pipeline/direct-ingress-deps.d.ts +15 -24
- package/dist/pipeline/dispatch-matched-workflow.d.ts +290 -526
- package/dist/pipeline/flatten-lock-steps.d.ts +4 -6
- package/dist/pipeline/global-dispatch-identity.d.ts +5 -10
- package/dist/pipeline/global-eval-round.d.ts +62 -156
- package/dist/pipeline/global-round-hold.d.ts +5 -7
- package/dist/pipeline/held-context-data.d.ts +5 -8
- package/dist/pipeline/held-round-registrations.d.ts +8 -11
- package/dist/pipeline/install-gate.d.ts +15 -25
- package/dist/pipeline/install-secrets-resolver.d.ts +24 -34
- package/dist/pipeline/internal-event-pipeline.d.ts +45 -62
- package/dist/pipeline/invoke-gate.d.ts +27 -40
- package/dist/pipeline/job-contexts.d.ts +19 -36
- package/dist/pipeline/manual-schedule.d.ts +7 -13
- package/dist/pipeline/needs-scheduler.d.ts +29 -46
- package/dist/pipeline/pending-workflow-context.d.ts +14 -28
- package/dist/pipeline/process-webhook.d.ts +88 -123
- package/dist/pipeline/processor.d.ts +209 -355
- package/dist/pipeline/remote-source-store.d.ts +5 -8
- package/dist/pipeline/request-idempotency.d.ts +10 -13
- package/dist/pipeline/rerun-global.d.ts +6 -7
- package/dist/pipeline/rerun-inputs.d.ts +23 -37
- package/dist/pipeline/rerun.d.ts +34 -57
- package/dist/pipeline/resolve-sandbox-grant.d.ts +5 -10
- package/dist/pipeline/resume-workflow.d.ts +28 -34
- package/dist/pipeline/route-or-dispatch-jobs.d.ts +19 -30
- package/dist/pipeline/run-event-context.d.ts +16 -21
- package/dist/pipeline/sandbox-allowlist-reader.d.ts +7 -11
- package/dist/pipeline/security-hold-check.d.ts +56 -80
- package/dist/pipeline/test-pipeline.d.ts +20 -46
- package/dist/pipeline/unbound-job-context.d.ts +6 -9
- package/dist/pipeline/undispatched-hold-checks.d.ts +4 -6
- package/dist/pipeline/wave-scheduler.d.ts +15 -22
- package/dist/pipeline/webhook-payload-store.d.ts +3 -10
- package/dist/pipeline/workflow-lock-at-sha.d.ts +14 -20
- package/dist/policy/dashboard-write-policy.d.ts +1 -1
- package/dist/provider-registry.d.ts +0 -19
- package/dist/providers/generic/index.d.ts +0 -2
- package/dist/providers/generic/normalizer.d.ts +0 -1
- package/dist/providers/generic/verification.d.ts +0 -8
- package/dist/providers/github/auth.d.ts +0 -1
- package/dist/providers/github/changed-files.d.ts +2 -1
- package/dist/providers/github/file-contents.d.ts +0 -4
- package/dist/providers/github/lock-file.d.ts +0 -4
- package/dist/providers/github/normalizer.d.ts +1 -9
- package/dist/providers/local/index.d.ts +1 -2
- package/dist/providers/local/lock-file-fetcher.d.ts +0 -4
- package/dist/providers/local/normalizer.d.ts +0 -10
- package/dist/providers/local/repo-url-builder.d.ts +0 -2
- package/dist/providers/universal-git/clone-token.d.ts +0 -2
- package/dist/providers/universal-git/lock-file.d.ts +0 -2
- package/dist/providers/universal-git/normalizer.d.ts +0 -2
- package/dist/queue/bootstrap.d.ts +3 -15
- package/dist/queue/cleanup.d.ts +29 -50
- package/dist/queue/depth-refresher.d.ts +21 -39
- package/dist/queue/job-queue.d.ts +112 -163
- package/dist/queue/retention.d.ts +23 -36
- package/dist/queue/scheduled-job.d.ts +17 -39
- package/dist/queue/terminalize-unroutable.d.ts +16 -18
- package/dist/queue/unroutable-probe.d.ts +15 -22
- package/dist/registration/extractor.d.ts +0 -6
- package/dist/registration/registration-index.d.ts +0 -6
- package/dist/registration/registration-store.d.ts +0 -9
- package/dist/reporting/agent-failure-category.d.ts +3 -5
- package/dist/reporting/check-run-reporter.d.ts +142 -316
- package/dist/reporting/check-run-summary.d.ts +16 -35
- package/dist/reporting/check-run-tracking-store.d.ts +54 -107
- package/dist/reporting/execution-tracker.d.ts +356 -526
- package/dist/reporting/fs-log-storage.d.ts +31 -33
- package/dist/reporting/job-check-run-completion.d.ts +14 -22
- package/dist/reporting/log-chunk-sink.d.ts +11 -16
- package/dist/reporting/log-pull-handler.d.ts +4 -13
- package/dist/reporting/log-retention.d.ts +3 -4
- package/dist/reporting/log-storage.d.ts +24 -52
- package/dist/reporting/log-writer.d.ts +28 -56
- package/dist/reporting/peer-log-normalize.d.ts +4 -8
- package/dist/reporting/run-aggregator.d.ts +6 -11
- package/dist/reporting/run-summary-fields.d.ts +5 -8
- package/dist/reporting/s3-log-storage.d.ts +31 -50
- package/dist/reporting/step-display-order.d.ts +11 -21
- package/dist/reporting/step-log-buffer.d.ts +7 -28
- package/dist/reporting/step-log-reader.d.ts +11 -19
- package/dist/routes/admin-access-log.d.ts +4 -6
- package/dist/routes/admin-auth.d.ts +17 -38
- package/dist/routes/admin-backends.d.ts +3 -14
- package/dist/routes/admin-cluster-name.d.ts +13 -21
- package/dist/routes/admin-cluster-settings.d.ts +6 -9
- package/dist/routes/admin-config.d.ts +7 -19
- package/dist/routes/admin-contexts.d.ts +6 -13
- package/dist/routes/admin-db.d.ts +5 -10
- package/dist/routes/admin-event-dlq.d.ts +3 -5
- package/dist/routes/admin-event-inspect.d.ts +3 -4
- package/dist/routes/admin-event-log.d.ts +3 -7
- package/dist/routes/admin-events.d.ts +16 -30
- package/dist/routes/admin-held-runs.d.ts +52 -76
- package/dist/routes/admin-maintenance.d.ts +3 -6
- package/dist/routes/admin-orchestrator-drain.d.ts +0 -2
- package/dist/routes/admin-org-settings.d.ts +8 -14
- package/dist/routes/admin-peer-forget.d.ts +0 -1
- package/dist/routes/admin-queue-execution.d.ts +3 -3
- package/dist/routes/admin-registrations.d.ts +3 -12
- package/dist/routes/admin-runs.d.ts +16 -29
- package/dist/routes/admin-scaler-orphans.d.ts +4 -4
- package/dist/routes/admin-scaler-reload.d.ts +5 -8
- package/dist/routes/admin-scheduled-jobs.d.ts +3 -4
- package/dist/routes/admin-sources.d.ts +20 -29
- package/dist/routes/admin-trust-policy.d.ts +31 -48
- package/dist/routes/admin.d.ts +67 -94
- package/dist/routes/caller-identity.d.ts +5 -12
- package/dist/routes/capabilities.d.ts +8 -13
- package/dist/routes/diagnostics.d.ts +2 -10
- package/dist/routes/fleet.d.ts +1 -2
- package/dist/routes/github-webhook.d.ts +2 -5
- package/dist/routes/health.d.ts +6 -19
- package/dist/routes/provenance-oidc.d.ts +3 -3
- package/dist/routes/uploads.d.ts +5 -11
- package/dist/routes/webhooks.d.ts +2 -24
- package/dist/scaler/agent-binary-location.d.ts +77 -0
- package/dist/scaler/agent-fit.d.ts +2 -2
- package/dist/scaler/backend-factory.d.ts +10 -18
- package/dist/scaler/bare-metal-backend.d.ts +30 -46
- package/dist/scaler/claim-store.d.ts +20 -43
- package/dist/scaler/config.d.ts +10 -37
- package/dist/scaler/container-backend.d.ts +22 -35
- package/dist/scaler/container-hostconfig.d.ts +19 -16
- package/dist/scaler/container-routing.d.ts +10 -13
- package/dist/scaler/disk-guard.d.ts +2 -3
- package/dist/scaler/event-backend.d.ts +33 -58
- package/dist/scaler/event-provision-reaper.d.ts +61 -84
- package/dist/scaler/failure-tracker.d.ts +6 -13
- package/dist/scaler/file-tail.d.ts +6 -19
- package/dist/scaler/firecracker-api.d.ts +19 -63
- package/dist/scaler/firecracker-backend.d.ts +142 -258
- package/dist/scaler/host-access.d.ts +7 -10
- package/dist/scaler/index.d.ts +3 -6
- package/dist/scaler/ip-allocator.d.ts +30 -82
- package/dist/scaler/label-matcher.d.ts +14 -35
- package/dist/scaler/log-forwarder.d.ts +6 -25
- package/dist/scaler/machine-ledger.d.ts +39 -86
- package/dist/scaler/manager.d.ts +517 -787
- package/dist/scaler/pending-scale-sweeper.d.ts +8 -11
- package/dist/scaler/reap-orphans.d.ts +8 -12
- package/dist/scaler/resolve-container-auth.d.ts +12 -21
- package/dist/scaler/scaler-events.d.ts +2 -5
- package/dist/scaler/scaler-state-store.d.ts +127 -189
- package/dist/scaler/spawn-errors.d.ts +1 -4
- package/dist/scaler/startup-orphan-sweep.d.ts +3 -4
- package/dist/scaler/startup-tools-check.d.ts +21 -0
- package/dist/scaler/types.d.ts +142 -255
- package/dist/scaler/vm-job-bindings.d.ts +5 -9
- package/dist/scaler/warm-pool.d.ts +49 -93
- package/dist/secrets/audit-logger.d.ts +0 -3
- package/dist/secrets/backend-health.d.ts +0 -9
- package/dist/secrets/backend-registry.d.ts +0 -9
- package/dist/secrets/cleanup.d.ts +0 -1
- package/dist/secrets/config.d.ts +0 -3
- package/dist/secrets/ephemeral-keys.d.ts +0 -3
- package/dist/secrets/pg-secret-store.d.ts +0 -3
- package/dist/secrets/rbac.d.ts +0 -6
- package/dist/secrets/secret-output-store.d.ts +0 -6
- package/dist/secrets/secret-resolver.d.ts +2 -6
- package/dist/secrets/token-manager.d.ts +0 -4
- package/dist/secrets/vault-secret-store.d.ts +0 -13
- package/dist/security/comment-handler.d.ts +0 -2
- package/dist/security/workflow-diff.d.ts +1 -1
- package/dist/server.js +8628 -13569
- package/dist/sources/source-manager.d.ts +0 -3
- package/dist/sources/source-store.d.ts +0 -9
- package/dist/sources/source-validator.d.ts +0 -3
- package/dist/stale-detector/all-terminal-runs.d.ts +8 -11
- package/dist/stale-detector/gate-deadline-detector.d.ts +14 -19
- package/dist/stale-detector/reboot-deadline-sweep.d.ts +7 -11
- package/dist/stale-detector/stale-dispatch-candidates.d.ts +13 -20
- package/dist/stale-detector/stale-run-detector.d.ts +74 -121
- package/dist/stale-detector/workflow-deadline-detector.d.ts +15 -43
- package/dist/standalone.js +7670 -12402
- package/dist/storage/blob-routes.d.ts +10 -19
- package/dist/storage/filesystem.d.ts +19 -29
- package/dist/storage/index.d.ts +2 -10
- package/dist/storage/key-discriminator.d.ts +8 -10
- package/dist/storage/loopback-guard.d.ts +27 -45
- package/dist/storage/s3.d.ts +25 -52
- package/dist/storage/sign-url.d.ts +7 -22
- package/dist/storage/types.d.ts +44 -70
- package/dist/webhook/event-log.d.ts +0 -2
- package/dist/webhook/generic-sources.d.ts +0 -21
- package/dist/webhook/ingest-admission.d.ts +0 -1
- package/dist/webhook/relay-buffer.d.ts +2 -2
- package/dist/webhook/verify-inbound.d.ts +0 -1
- package/dist/worker/in-memory-execution-tracker.d.ts +9 -31
- package/dist/worker/in-memory-job-queue.d.ts +32 -72
- package/dist/worker/peer-outbox.d.ts +5 -8
- package/dist/worker/reroute-dispatch.d.ts +4 -6
- package/dist/worker/static-agent-token-store.d.ts +6 -27
- package/dist/worker/worker-outbox-relay.d.ts +2 -2
- package/dist/worker/worker-status.d.ts +3 -20
- package/dist/ws/agent-api-registry.d.ts +8 -27
- package/dist/ws/agent-handler.d.ts +63 -110
- package/dist/ws/agent-heartbeat.d.ts +5 -12
- package/dist/ws/bringup-api.d.ts +31 -38
- package/dist/ws/dashboard-backends-handler.d.ts +12 -22
- package/dist/ws/dashboard-context-handler.d.ts +37 -80
- package/dist/ws/dashboard-diagnostics-handler.d.ts +8 -25
- package/dist/ws/dashboard-dispatch-guard.d.ts +3 -4
- package/dist/ws/dashboard-fleet-handler.d.ts +9 -13
- package/dist/ws/dashboard-fleet-write-handler.d.ts +7 -21
- package/dist/ws/dashboard-global-workflows-handler.d.ts +22 -44
- package/dist/ws/dashboard-registrations-handler.d.ts +10 -27
- package/dist/ws/dashboard-run-state-handler.d.ts +10 -13
- package/dist/ws/event-buffer.d.ts +3 -6
- package/dist/ws/execution-status-frame.d.ts +9 -11
- package/dist/ws/failure-messages.d.ts +9 -14
- package/dist/ws/fleet-agent-collector.d.ts +6 -12
- package/dist/ws/fleet-runs-on-all.d.ts +1 -6
- package/dist/ws/git-credential-relay.d.ts +12 -20
- package/dist/ws/inventory-api.d.ts +4 -5
- package/dist/ws/job-status-forward-frame.d.ts +30 -0
- package/dist/ws/observer-registry.d.ts +14 -59
- package/dist/ws/outbound-frame-guard.d.ts +4 -0
- package/dist/ws/ownership-gate.d.ts +1 -1
- package/dist/ws/platform-client.d.ts +32 -31
- package/dist/ws/replay-chunker.d.ts +7 -10
- package/dist/ws/server-options.d.ts +5 -9
- package/dist/ws/test-relay-handlers.d.ts +45 -59
- package/dist/ws/test-run-log-cursor.d.ts +18 -0
- package/installer-image-digests.json +3 -3
- package/package.json +6 -5
- package/sbom.spdx.json +53 -53
- package/dist/__test-helpers__/fake-scaler-state-store.d.ts +0 -24
- package/dist/__test-helpers__/mock-db-query.d.ts +0 -129
- package/dist/__test-helpers__/mock-db.d.ts +0 -134
- package/dist/__test-helpers__/mock-ws.d.ts +0 -13
- package/dist/__test-helpers__/peer-mutual-auth.d.ts +0 -42
- package/dist/__test-helpers__/scratch-db.d.ts +0 -16
- package/dist/__test-helpers__/test-db.d.ts +0 -34
- package/dist/pipeline/dispatch-matched-workflow.test-helpers.d.ts +0 -121
package/dist/agent/registry.d.ts
CHANGED
|
@@ -1,12 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* In-memory agent registry with label-based lookup and capacity tracking
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* - Primary map: agentId -> AgentEntry (direct agent lookup)
|
|
6
|
-
* - Secondary map: label -> Set<agentId> (reverse index for label-based dispatch queries)
|
|
7
|
-
* - WS reverse map: ws -> agentId (fast lookup on WS events)
|
|
8
|
-
*
|
|
9
|
-
* No persistence needed -- agents re-register on reconnect.
|
|
2
|
+
* In-memory agent registry with label-based lookup and capacity tracking, following the
|
|
3
|
+
* Platform ConnectionRegistry dual-map pattern. No persistence needed: agents re-register
|
|
4
|
+
* on reconnect.
|
|
10
5
|
*/
|
|
11
6
|
import { type CanonicalLabel, type LabelMatcher } from '@kici-dev/engine';
|
|
12
7
|
import type { WsLike } from '@kici-dev/engine';
|
|
@@ -32,87 +27,81 @@ export declare enum BusyHoldOutcome {
|
|
|
32
27
|
*/
|
|
33
28
|
export declare function agentHasFreeSlot(entry: AgentEntry, now?: number): boolean;
|
|
34
29
|
export type { WsLike } from '@kici-dev/engine';
|
|
35
|
-
/**
|
|
36
|
-
* A single tracked agent connection.
|
|
37
|
-
*/
|
|
30
|
+
/** A single tracked agent connection. */
|
|
38
31
|
export interface AgentEntry {
|
|
39
|
-
/** Unique agent identifier. */
|
|
40
32
|
agentId: string;
|
|
41
|
-
/** The underlying WebSocket (or mock). */
|
|
42
33
|
ws: WsLike;
|
|
43
34
|
/**
|
|
44
|
-
*
|
|
45
|
-
* to canonical form by `register()`. The label reverse index is keyed the
|
|
35
|
+
* Folded to canonical form by `register()`. The label reverse index is keyed the
|
|
46
36
|
* same way, so a lookup must fold its query before it reaches either.
|
|
47
37
|
*/
|
|
48
38
|
labels: Set<CanonicalLabel>;
|
|
49
39
|
/**
|
|
50
|
-
* Kubernetes-taint-style
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
40
|
+
* Kubernetes-taint-style gate copied from the spawning scaler's `mandatoryLabels`
|
|
41
|
+
* block: a job is dispatched here only when every one of these appears in its
|
|
42
|
+
* `runsOnLabels`, on top of the subset/exclusion checks. Empty for static agents and
|
|
43
|
+
* warm-pool replenishment spawns (no gate).
|
|
54
44
|
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
* not enough — once the agent registers, the queue-drain path
|
|
60
|
-
* (`onAgentAvailable` → `dequeueForLabels`) sees only the agent's labels
|
|
61
|
-
* and would otherwise pull a queued job whose `runsOn` is a subset of the
|
|
62
|
-
* agent's labels but does not satisfy the gate).
|
|
45
|
+
* The scaler-side gate in `findBackendForLabels` is not enough: once the agent
|
|
46
|
+
* registers, the queue-drain path (`onAgentAvailable` → `dequeueForLabels`) sees only
|
|
47
|
+
* the agent's labels and would pull a queued job whose `runsOn` is a subset of them
|
|
48
|
+
* but does not satisfy the gate.
|
|
63
49
|
*
|
|
64
|
-
* Folded to canonical form by `register()`, so a scaler that declared `GPU`
|
|
65
|
-
*
|
|
50
|
+
* Folded to canonical form by `register()`, so a scaler that declared `GPU` gates the
|
|
51
|
+
* same jobs one that declared `gpu` does.
|
|
66
52
|
*/
|
|
67
53
|
mandatoryLabels: Set<CanonicalLabel>;
|
|
68
54
|
/**
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
* recovery window that cannot succeed.
|
|
55
|
+
* Scaler-spawned agents are single-use: the scaler destroys them on disconnect, so
|
|
56
|
+
* they never reconnect to reclaim recovering jobs. The dispatcher triages their
|
|
57
|
+
* disconnects (requeue / fail-fast) instead of starting a recovery window that
|
|
58
|
+
* cannot succeed.
|
|
74
59
|
*/
|
|
75
60
|
scalerManaged: boolean;
|
|
76
61
|
/**
|
|
77
62
|
* True while this agent is being torn down and must receive no new work.
|
|
78
63
|
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
* `
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
64
|
+
* A warm-pool destroy takes seconds (a container `stop({ t: 5 })`, or a Firecracker
|
|
65
|
+
* `SendCtrlAltDel` plus its grace), and the entry survives until the WebSocket closes.
|
|
66
|
+
* Without this flag `findAvailable` keeps returning the agent, and a job arriving in
|
|
67
|
+
* that window lands on an exiting container and fails as a spurious infrastructure
|
|
68
|
+
* error.
|
|
69
|
+
*
|
|
70
|
+
* In memory rather than DB-backed, unlike reboot-pending: the destroy is issued by
|
|
71
|
+
* this process, lasts seconds, and ends with the WebSocket close that removes the
|
|
72
|
+
* entry — there is nothing to outlive.
|
|
86
73
|
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
* WebSocket close that removes the entry — there is nothing to outlive.
|
|
74
|
+
* Also set when the agent itself reports `draining` on `agent.status` (a SIGUSR1
|
|
75
|
+
* drain, or a single-job agent that accepted its job); see {@link drainReported}.
|
|
90
76
|
*/
|
|
91
77
|
draining: boolean;
|
|
78
|
+
/**
|
|
79
|
+
* The agent reported `draining` itself. Its drain is terminal for this connection,
|
|
80
|
+
* so {@link AgentRegistry.clearDraining} (the warm-pool undo) leaves it draining.
|
|
81
|
+
*/
|
|
82
|
+
drainReported?: boolean;
|
|
92
83
|
/**
|
|
93
84
|
* Epoch ms until which the agent is held out of routing after it rejected a
|
|
94
85
|
* dispatch as busy. Unset when no hold is in force. See {@link AgentRegistry.markBusyHeld}.
|
|
95
86
|
*/
|
|
96
87
|
busyHeldUntil?: number;
|
|
97
|
-
/** Number of jobs currently executing on this agent. */
|
|
98
88
|
activeJobs: number;
|
|
99
|
-
/**
|
|
89
|
+
/** Default 1. */
|
|
100
90
|
maxConcurrency: number;
|
|
101
|
-
/** Unix epoch ms
|
|
91
|
+
/** Unix epoch ms. */
|
|
102
92
|
lastHeartbeatAt: number;
|
|
103
|
-
/**
|
|
93
|
+
/** `os.platform()`, e.g. 'linux', 'darwin', 'win32'. */
|
|
104
94
|
platform: string;
|
|
105
|
-
/**
|
|
95
|
+
/** `os.arch()`, e.g. 'x64', 'arm64'. */
|
|
106
96
|
arch: string;
|
|
107
|
-
/** Unix epoch ms
|
|
97
|
+
/** Unix epoch ms. */
|
|
108
98
|
registeredAt: number;
|
|
109
|
-
/** Self-reported
|
|
99
|
+
/** Self-reported; null if not reported. */
|
|
110
100
|
version: string | null;
|
|
111
101
|
/**
|
|
112
|
-
* The `agent_tokens.id`
|
|
113
|
-
* `
|
|
114
|
-
*
|
|
115
|
-
* a given token.
|
|
102
|
+
* The `agent_tokens.id` that authenticated this connection, `null` when auth mode is
|
|
103
|
+
* `none`. Indexed by `tokenIdIndex` so a synchronous revocation kick can enumerate
|
|
104
|
+
* every WS authenticated by a token.
|
|
116
105
|
*/
|
|
117
106
|
tokenId: string | null;
|
|
118
107
|
hostname: string | null;
|
|
@@ -127,10 +116,9 @@ export interface AgentEntry {
|
|
|
127
116
|
memoryAvailableMb: number | null;
|
|
128
117
|
uptimeSeconds: number | null;
|
|
129
118
|
/**
|
|
130
|
-
* The auth token's `agent_type`
|
|
131
|
-
*
|
|
132
|
-
* `
|
|
133
|
-
* rows are GC'd past their ttl.
|
|
119
|
+
* The auth token's `agent_type` snapshot, `null` when auth mode is `none`. Drives the
|
|
120
|
+
* host roster's `lifecycle_class`: `static` rows persist and alarm on absence,
|
|
121
|
+
* `ephemeral` rows are GC'd past their ttl.
|
|
134
122
|
*/
|
|
135
123
|
tokenAgentType: 'static' | 'ephemeral' | null;
|
|
136
124
|
}
|
|
@@ -144,42 +132,30 @@ interface AgentMetadata {
|
|
|
144
132
|
nodeVersion?: string;
|
|
145
133
|
runningAsUser?: string;
|
|
146
134
|
runningAsUid?: number;
|
|
147
|
-
/**
|
|
148
|
-
* The `agent_tokens.id` row used to authenticate this connection.
|
|
149
|
-
* `null` when auth mode is `none` (no token-based auth applied).
|
|
150
|
-
* Indexed for `disconnectByTokenId(...)` revocation kicks.
|
|
151
|
-
*/
|
|
135
|
+
/** `null` when auth mode is `none`. Indexed for `disconnectByTokenId(...)` revocation kicks. */
|
|
152
136
|
tokenId?: string | null;
|
|
153
137
|
/**
|
|
154
|
-
*
|
|
155
|
-
*
|
|
156
|
-
* gate). Populated by `agent-handler.ts` from the scaler manager's
|
|
157
|
-
* `onAgentRegistered(...)` return value.
|
|
138
|
+
* Set by `agent-handler.ts` from the scaler manager's `onAgentRegistered(...)` return
|
|
139
|
+
* value. Empty / undefined for static agents (no gate).
|
|
158
140
|
*/
|
|
159
141
|
mandatoryLabels?: string[];
|
|
160
|
-
/**
|
|
161
|
-
* True when a scaler backend spawned this agent (single-use; destroyed
|
|
162
|
-
* on disconnect). Set by `agent-handler.ts` from the presence of the
|
|
163
|
-
* scaler registration metadata.
|
|
164
|
-
*/
|
|
142
|
+
/** Set by `agent-handler.ts` from the presence of the scaler registration metadata. */
|
|
165
143
|
scalerManaged?: boolean;
|
|
166
144
|
/**
|
|
167
|
-
*
|
|
168
|
-
* `agent-handler.ts` so the host roster can snapshot it as the row's
|
|
145
|
+
* Threaded from `agent-handler.ts` so the host roster can snapshot it as the row's
|
|
169
146
|
* `lifecycle_class`. `null` / undefined when auth mode is `none`.
|
|
170
147
|
*/
|
|
171
148
|
tokenAgentType?: 'static' | 'ephemeral' | null;
|
|
172
149
|
/**
|
|
173
|
-
* Agent-reported typed host-vars (the `KICI_PROPERTIES` bag),
|
|
174
|
-
*
|
|
175
|
-
*
|
|
150
|
+
* Agent-reported typed host-vars (the `KICI_PROPERTIES` bag), passed into the roster
|
|
151
|
+
* upsert (shallow-merged with any operator-declared properties). Undefined ⇒ the
|
|
152
|
+
* agent reported none.
|
|
176
153
|
*/
|
|
177
154
|
properties?: Record<string, string | number | boolean>;
|
|
178
155
|
}
|
|
179
156
|
/**
|
|
180
|
-
* Subset of `HostRosterStore` the registry reconciles into. Optional
|
|
181
|
-
*
|
|
182
|
-
* a no-op and the in-memory registry behaves exactly as before.
|
|
157
|
+
* Subset of `HostRosterStore` the registry reconciles into. Optional: with no store
|
|
158
|
+
* injected (e.g. workers, which have no DB), the reconcile hooks are a no-op.
|
|
183
159
|
*/
|
|
184
160
|
export interface RosterReconciler {
|
|
185
161
|
upsert(input: {
|
|
@@ -204,57 +180,34 @@ export interface AgentRegistryDeps {
|
|
|
204
180
|
instanceId?: string;
|
|
205
181
|
}
|
|
206
182
|
export declare class AgentRegistry {
|
|
207
|
-
/** Primary: agentId -> AgentEntry */
|
|
208
183
|
private readonly agents;
|
|
209
|
-
/**
|
|
184
|
+
/** label -> agentIds, keyed on the canonical label. */
|
|
210
185
|
private readonly labelIndex;
|
|
211
|
-
/** Reverse: ws -> agentId (for fast lookup on WS events) */
|
|
212
186
|
private readonly wsToAgentId;
|
|
213
187
|
/**
|
|
214
|
-
*
|
|
215
|
-
*
|
|
216
|
-
*
|
|
217
|
-
* cleaned up by `removeFromIndexes()` on `unregister()` /
|
|
218
|
-
* re-registration. `disconnectByTokenId(tokenId)` walks the matching
|
|
219
|
-
* set, closes each WS, and unregisters the entry — closing the
|
|
220
|
-
* gap where a revoked token's in-flight WS retained data-plane
|
|
221
|
-
* authority until the agent itself disconnected.
|
|
188
|
+
* tokenId -> agentIds, for synchronous revocation kicks: `disconnectByTokenId` closes
|
|
189
|
+
* each WS so a revoked token's in-flight connection loses data-plane authority at
|
|
190
|
+
* once instead of when the agent disconnects.
|
|
222
191
|
*/
|
|
223
192
|
private readonly tokenIdIndex;
|
|
224
193
|
/**
|
|
225
|
-
* Per-tokenId TTL kick timer,
|
|
226
|
-
* `
|
|
227
|
-
* when
|
|
228
|
-
*
|
|
229
|
-
* is cleared when (a) the timer fires, (b) `disconnectByTokenId` is
|
|
230
|
-
* called explicitly via revocation (no double-kick when revoke
|
|
231
|
-
* races TTL), or (c) the last agent under the tokenId unregisters
|
|
232
|
-
* naturally (avoid timer leaks on long-lived registries).
|
|
233
|
-
*
|
|
234
|
-
* Idempotent: re-scheduling the same tokenId is a no-op as long as
|
|
235
|
-
* a timer is still queued — a token's `expires_at` doesn't shift
|
|
236
|
-
* across reconnects of the same agent. Revocation kicks a token's
|
|
237
|
-
* in-flight WS connections at once; these timers do the same when
|
|
238
|
-
* the token reaches its natural TTL.
|
|
194
|
+
* Per-tokenId TTL kick timer, armed by `scheduleExpiryKick` for a token with a
|
|
195
|
+
* non-null `expires_at`. Cleared when it fires, when a revocation calls
|
|
196
|
+
* `disconnectByTokenId` (no double kick when revoke races TTL), or when the last agent
|
|
197
|
+
* under the token unregisters (no timer leak on long-lived registries).
|
|
239
198
|
*/
|
|
240
199
|
private readonly tokenExpiryTimers;
|
|
241
200
|
/**
|
|
242
|
-
* Per-agent last roster `last_seen` stamp
|
|
243
|
-
*
|
|
244
|
-
*
|
|
245
|
-
* sufficient. Cleaned up alongside the agent in `removeFromIndexes`.
|
|
201
|
+
* Per-agent last roster `last_seen` stamp (epoch ms). Throttles the heartbeat write
|
|
202
|
+
* to one per agent per window: `grace`/`ttl` are minute-scale, so a throttled stamp
|
|
203
|
+
* is sufficient.
|
|
246
204
|
*/
|
|
247
205
|
private readonly lastRosterStampAt;
|
|
248
206
|
/** Minimum interval between coarse roster `last_seen` stamps per agent. */
|
|
249
207
|
private readonly ROSTER_STAMP_THROTTLE_MS;
|
|
250
|
-
/** Optional host-roster reconciler + this instance's id (see AgentRegistryDeps). */
|
|
251
208
|
private readonly rosterStore?;
|
|
252
209
|
private readonly instanceId?;
|
|
253
|
-
/**
|
|
254
|
-
* The roster reconcile seam is optional: when no store is injected (workers
|
|
255
|
-
* with no DB, unit tests), every reconcile hook is a no-op and the in-memory
|
|
256
|
-
* registry behaves exactly as before.
|
|
257
|
-
*/
|
|
210
|
+
/** With no roster store (workers with no DB, unit tests), every reconcile hook is a no-op. */
|
|
258
211
|
constructor(deps?: AgentRegistryDeps);
|
|
259
212
|
/**
|
|
260
213
|
* Triages the in-flight jobs of an agent this registry drops on its own (a
|
|
@@ -266,12 +219,11 @@ export declare class AgentRegistry {
|
|
|
266
219
|
/** Install the job triage {@link disconnectByTokenId} runs for each agent it drops. */
|
|
267
220
|
setDisconnectTriage(triage: (agentId: string) => Promise<unknown>): void;
|
|
268
221
|
/**
|
|
269
|
-
* Sockets whose `agent.register` is in flight (awaiting the scaler lookup),
|
|
270
|
-
*
|
|
271
|
-
*
|
|
272
|
-
* handler
|
|
273
|
-
*
|
|
274
|
-
* token, must see a registration in flight on another connection.
|
|
222
|
+
* Sockets whose `agent.register` is in flight (awaiting the scaler lookup), per agent
|
|
223
|
+
* id, with the agent token id each authenticated with (`null` without token auth).
|
|
224
|
+
* Kept here rather than in the WebSocket handler because the coordinator builds one
|
|
225
|
+
* handler per connection: a socket's close, and a registration's check against
|
|
226
|
+
* another agent token, must see a registration in flight on another connection.
|
|
275
227
|
*/
|
|
276
228
|
private readonly registeringSockets;
|
|
277
229
|
/** Record that `ws`, authenticated with `tokenId`, has started registering `agentId`. */
|
|
@@ -288,8 +240,7 @@ export declare class AgentRegistry {
|
|
|
288
240
|
*/
|
|
289
241
|
isAgentIdHeldByOtherToken(agentId: string, tokenId: string, ws: WsLike): boolean;
|
|
290
242
|
/**
|
|
291
|
-
* Register an agent
|
|
292
|
-
* entry (agent reconnection scenario).
|
|
243
|
+
* Register an agent, replacing an existing entry for the same id (reconnect).
|
|
293
244
|
*
|
|
294
245
|
* @returns the socket the previous entry was bound to, when this register
|
|
295
246
|
* replaced one bound to a *different* socket. The caller owns that socket's
|
|
@@ -300,123 +251,84 @@ export declare class AgentRegistry {
|
|
|
300
251
|
* same socket.
|
|
301
252
|
*/
|
|
302
253
|
register(agentId: string, ws: WsLike, labels: string[], platform?: string, arch?: string, version?: string, maxConcurrency?: number, metadata?: AgentMetadata): WsLike | undefined;
|
|
303
|
-
/**
|
|
304
|
-
* Unregister an agent by ID. Removes from all indexes.
|
|
305
|
-
* @returns The removed AgentEntry, or undefined if not found.
|
|
306
|
-
*/
|
|
254
|
+
/** @returns the removed entry, or undefined if not found. */
|
|
307
255
|
unregister(agentId: string): AgentEntry | undefined;
|
|
308
|
-
/**
|
|
309
|
-
* Unregister an agent by its WebSocket reference (for disconnect handling).
|
|
310
|
-
* @returns The removed AgentEntry, or undefined if not found.
|
|
311
|
-
*/
|
|
256
|
+
/** For disconnect handling. @returns the removed entry, or undefined if not found. */
|
|
312
257
|
unregisterByWs(ws: WsLike): AgentEntry | undefined;
|
|
313
258
|
/**
|
|
314
|
-
*
|
|
315
|
-
*
|
|
316
|
-
* count of kicked agents.
|
|
259
|
+
* Send a final `auth.failure` to every WS authenticated under `tokenId`, close it,
|
|
260
|
+
* and unregister the entry. Returns the count of kicked agents.
|
|
317
261
|
*
|
|
318
|
-
*
|
|
319
|
-
*
|
|
320
|
-
*
|
|
321
|
-
* in-flight WS loses data-plane authority before the handler
|
|
322
|
-
* returns.
|
|
262
|
+
* `DELETE /api/v1/agent-tokens/:id` calls this synchronously after
|
|
263
|
+
* `tokenStore.revoke(id)`, so the in-flight WS loses data-plane authority before the
|
|
264
|
+
* handler returns.
|
|
323
265
|
*
|
|
324
|
-
* The
|
|
325
|
-
*
|
|
326
|
-
* this close code as permanent and stops retrying.
|
|
266
|
+
* The close code is `WS_CLOSE_AGENT_AUTH_FAILED` (4010); the agent's reconnect loop
|
|
267
|
+
* treats both it and the `auth.failure` message as permanent and stops retrying.
|
|
327
268
|
*/
|
|
328
269
|
disconnectByTokenId(tokenId: string): number;
|
|
329
270
|
/**
|
|
330
|
-
* Schedule a one-shot
|
|
331
|
-
*
|
|
332
|
-
* in-flight WS authenticated under the token is closed via
|
|
333
|
-
* `disconnectByTokenId`.
|
|
271
|
+
* Schedule a one-shot `disconnectByTokenId` kick for `tokenId` at `expiresAt`, or at
|
|
272
|
+
* once when it is already past.
|
|
334
273
|
*
|
|
335
|
-
* Idempotent per `tokenId`:
|
|
336
|
-
*
|
|
337
|
-
* change across reconnects, so re-scheduling would just re-arm the
|
|
338
|
-
* same trigger.
|
|
274
|
+
* Idempotent per `tokenId`: a token's `expires_at` doesn't change across reconnects,
|
|
275
|
+
* so re-scheduling would re-arm the same trigger.
|
|
339
276
|
*
|
|
340
|
-
*
|
|
341
|
-
*
|
|
342
|
-
*
|
|
343
|
-
* no TTL by design). Revocation kicks a token's in-flight WS
|
|
344
|
-
* connections at once; this timer does the same at the token's
|
|
345
|
-
* natural TTL.
|
|
277
|
+
* Called by the agent WS handler at register time when `agent_tokens.expires_at` is
|
|
278
|
+
* non-null. Static tokens have `expires_at = null` (no TTL by design) and are skipped
|
|
279
|
+
* at the call site.
|
|
346
280
|
*/
|
|
347
281
|
scheduleExpiryKick(tokenId: string, expiresAt: Date): void;
|
|
348
282
|
/**
|
|
349
|
-
* Find available agents that
|
|
350
|
-
* An agent is available when it has
|
|
351
|
-
*
|
|
352
|
-
* In addition to the subset + exclusion filters, every label declared in
|
|
353
|
-
* the agent's `mandatoryLabels` must appear in `requiredLabels`. This is
|
|
354
|
-
* the agent-side mirror of the scaler-side mandatory-labels gate
|
|
355
|
-
* (`findBackendForLabels`). Without it, a queued job whose `runsOn` is a
|
|
356
|
-
* subset of a gated agent's labels but does not list the gate label
|
|
357
|
-
* would be drained onto that agent the next time `onAgentAvailable`
|
|
358
|
-
* fires — sidestepping the opt-in semantics the gate is meant to enforce.
|
|
283
|
+
* Find available agents that have ALL required labels.
|
|
284
|
+
* An agent is available when it is not draining and has a free slot
|
|
285
|
+
* ({@link agentHasFreeSlot}: activeJobs < maxConcurrency and no busy hold).
|
|
359
286
|
*
|
|
360
|
-
*
|
|
361
|
-
*
|
|
287
|
+
* Every label in the agent's `mandatoryLabels` must also appear in `requiredLabels`:
|
|
288
|
+
* the agent-side mirror of the scaler-side gate (`findBackendForLabels`). Without it,
|
|
289
|
+
* a queued job whose `runsOn` is a subset of a gated agent's labels but omits the
|
|
290
|
+
* gate label would be drained onto that agent the next time `onAgentAvailable` fires.
|
|
362
291
|
*/
|
|
363
292
|
findAvailable(requiredLabels: string[], requiredPatterns?: LabelMatcher[], excludeLabels?: string[], excludePatterns?: LabelMatcher[]): AgentEntry[];
|
|
364
293
|
/**
|
|
365
|
-
*
|
|
366
|
-
*
|
|
367
|
-
*
|
|
368
|
-
* (guards against roster label drift between resolution and dispatch).
|
|
294
|
+
* The per-agent label / exclude / mandatory gate of `findAvailable`, ignoring
|
|
295
|
+
* capacity. The host-fanout pin uses it to guard against roster label drift between
|
|
296
|
+
* resolution and dispatch.
|
|
369
297
|
*/
|
|
370
298
|
agentSatisfies(agent: AgentEntry, requiredLabels: string[], requiredPatterns?: LabelMatcher[], excludeLabels?: string[], excludePatterns?: LabelMatcher[]): boolean;
|
|
371
299
|
/**
|
|
372
|
-
*
|
|
373
|
-
*
|
|
300
|
+
* Whether ANY registered agent matches, regardless of capacity: decides queue (agent
|
|
301
|
+
* exists but busy) vs reject (no agent at all).
|
|
374
302
|
*
|
|
375
|
-
* Applies the
|
|
376
|
-
*
|
|
377
|
-
*
|
|
378
|
-
*
|
|
379
|
-
* an off-gate gated agent as "matching but busy" and skip the peer
|
|
380
|
-
* reroute path even though the local agent can never accept the job.
|
|
303
|
+
* Applies the `mandatoryLabels` gate of `findAvailable`. Without it, the
|
|
304
|
+
* `queued-no-backend` decision in `dispatch()` would treat an off-gate agent as
|
|
305
|
+
* "matching but busy" and skip the peer reroute path, though that agent can never
|
|
306
|
+
* accept the job.
|
|
381
307
|
*/
|
|
382
308
|
hasMatchingAgent(requiredLabels: string[], requiredPatterns?: LabelMatcher[], excludeLabels?: string[], excludePatterns?: LabelMatcher[],
|
|
383
309
|
/**
|
|
384
|
-
*
|
|
385
|
-
*
|
|
386
|
-
*
|
|
310
|
+
* Whether a label-matching agent can run the job at all, which its labels cannot
|
|
311
|
+
* express. An agent that never could is no reason to keep the job here rather
|
|
312
|
+
* than reroute it.
|
|
387
313
|
*/
|
|
388
314
|
canRun?: (entry: AgentEntry) => boolean): boolean;
|
|
389
315
|
/**
|
|
390
|
-
*
|
|
391
|
-
*
|
|
392
|
-
*
|
|
393
|
-
* Set on `requiredLabels.length === 0` since the caller decides the
|
|
394
|
-
* walk strategy in that case.
|
|
316
|
+
* Agent ids that have every required label, or `null` when any label matches zero
|
|
317
|
+
* agents (so callers can short-circuit). An empty Set for no labels: the caller picks
|
|
318
|
+
* the walk strategy then.
|
|
395
319
|
*
|
|
396
|
-
* Takes canonical labels
|
|
397
|
-
* so a caller folds before it gets here.
|
|
320
|
+
* Takes canonical labels, since the index is keyed on the canonical form.
|
|
398
321
|
*/
|
|
399
322
|
private intersectLabelCandidates;
|
|
400
|
-
/**
|
|
401
|
-
* Increment activeJobs for an agent.
|
|
402
|
-
* @returns false if agent not found.
|
|
403
|
-
*/
|
|
323
|
+
/** @returns false if agent not found. */
|
|
404
324
|
incrementActiveJobs(agentId: string): boolean;
|
|
405
|
-
/**
|
|
406
|
-
* Decrement activeJobs for an agent (min 0).
|
|
407
|
-
* @returns false if agent not found.
|
|
408
|
-
*/
|
|
325
|
+
/** Floors at 0. @returns false if agent not found. */
|
|
409
326
|
decrementActiveJobs(agentId: string): boolean;
|
|
410
|
-
/**
|
|
411
|
-
* Update the last heartbeat timestamp for an agent.
|
|
412
|
-
*/
|
|
413
327
|
updateHeartbeat(agentId: string): boolean;
|
|
414
328
|
/**
|
|
415
|
-
*
|
|
416
|
-
*
|
|
417
|
-
*
|
|
418
|
-
* a `queued-no-backend` outcome alone doesn't say whether the label set
|
|
419
|
-
* mismatched, the agent was at capacity, or no agent was connected at all.
|
|
329
|
+
* Cheap snapshot of every agent's routing facts, so the dispatcher can log WHY a job
|
|
330
|
+
* found no backend: `queued-no-backend` alone doesn't say whether the labels
|
|
331
|
+
* mismatched, the agent was at capacity, or no agent was connected.
|
|
420
332
|
*/
|
|
421
333
|
agentSummaries(): Array<{
|
|
422
334
|
agentId: string;
|
|
@@ -427,25 +339,20 @@ export declare class AgentRegistry {
|
|
|
427
339
|
maxConcurrency: number;
|
|
428
340
|
}>;
|
|
429
341
|
/**
|
|
430
|
-
*
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
* Whether one agent id is currently registered.
|
|
434
|
-
*
|
|
435
|
-
* Distinct from `findAvailable`, which answers "which agents could take this
|
|
436
|
-
* job" — the container orphan sweep needs to know only whether a running
|
|
437
|
-
* container's agent is present at all, including one that is busy or gated.
|
|
342
|
+
* Distinct from `findAvailable` ("which agents could take this job"): the container
|
|
343
|
+
* orphan sweep needs only whether a running container's agent is present at all,
|
|
344
|
+
* busy or gated included.
|
|
438
345
|
*/
|
|
439
346
|
isRegistered(agentId: string): boolean;
|
|
440
347
|
/**
|
|
441
348
|
* Condemn an agent: it stays registered and keeps finishing its current work,
|
|
442
349
|
* but takes no new dispatches.
|
|
443
350
|
*
|
|
444
|
-
* Called before a warm-pool destroy is issued.
|
|
445
|
-
*
|
|
446
|
-
* check and this mark, and back out.
|
|
351
|
+
* Called before a warm-pool destroy is issued. An agent that reports its own
|
|
352
|
+
* drain goes through {@link markDrainReported} instead.
|
|
447
353
|
*
|
|
448
|
-
* @returns the agent's
|
|
354
|
+
* @returns the agent's `activeJobs`, so the caller can see a job claimed between its
|
|
355
|
+
* idle check and this mark and back out; `undefined` when not registered
|
|
449
356
|
*/
|
|
450
357
|
markDraining(agentId: string): number | undefined;
|
|
451
358
|
/**
|
|
@@ -486,24 +393,24 @@ export declare class AgentRegistry {
|
|
|
486
393
|
* free slot now.
|
|
487
394
|
*/
|
|
488
395
|
clearExpiredBusyHold(agentId: string, now?: number): void;
|
|
489
|
-
/** Undo {@link markDraining} — a destroy that was rejected leaves the agent alive. */
|
|
490
|
-
clearDraining(agentId: string): void;
|
|
491
|
-
get(agentId: string): AgentEntry | undefined;
|
|
492
396
|
/**
|
|
493
|
-
*
|
|
397
|
+
* The agent reported on `agent.status` that it takes no new job: a drain, or a
|
|
398
|
+
* single-job agent that has accepted its job. Terminal for this connection.
|
|
494
399
|
*/
|
|
495
|
-
|
|
400
|
+
markDrainReported(agentId: string): void;
|
|
496
401
|
/**
|
|
497
|
-
*
|
|
402
|
+
* Undo {@link markDraining} — a destroy that was rejected leaves the agent alive.
|
|
403
|
+
* An agent that reported its own drain stays draining.
|
|
498
404
|
*/
|
|
405
|
+
clearDraining(agentId: string): void;
|
|
406
|
+
get(agentId: string): AgentEntry | undefined;
|
|
407
|
+
getByWs(ws: WsLike): AgentEntry | undefined;
|
|
499
408
|
getActiveCount(): number;
|
|
500
|
-
/**
|
|
501
|
-
* Iterator over all agent entries (for heartbeat checks, etc).
|
|
502
|
-
*/
|
|
503
409
|
getAllEntries(): IterableIterator<AgentEntry>;
|
|
504
410
|
/**
|
|
505
|
-
* Remove an agent from the WS reverse map
|
|
506
|
-
*
|
|
411
|
+
* Remove an agent from the WS reverse map, the label index, the roster-stamp
|
|
412
|
+
* map and the token index (cancelling the token's TTL timer when no agent is
|
|
413
|
+
* left on it). Does NOT remove from the primary agents map.
|
|
507
414
|
*/
|
|
508
415
|
private removeFromIndexes;
|
|
509
416
|
}
|