@cleocode/core 2026.10.1 → 2026.10.2
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/build-provenance.json +2 -2
- package/dist/cloud/journal.d.ts +9 -5
- package/dist/cloud/journal.d.ts.map +1 -1
- package/dist/cloud/journal.js +29 -8
- package/dist/cloud/journal.js.map +1 -1
- package/dist/cloud/manifest-check.d.ts +140 -4
- package/dist/cloud/manifest-check.d.ts.map +1 -1
- package/dist/cloud/manifest-check.js +309 -10
- package/dist/cloud/manifest-check.js.map +1 -1
- package/dist/cloud/nexus-attach.d.ts +25 -0
- package/dist/cloud/nexus-attach.d.ts.map +1 -1
- package/dist/cloud/nexus-attach.js +81 -6
- package/dist/cloud/nexus-attach.js.map +1 -1
- package/dist/cloud/nexus-cloud-activity.d.ts +37 -0
- package/dist/cloud/nexus-cloud-activity.d.ts.map +1 -0
- package/dist/cloud/nexus-cloud-activity.js +79 -0
- package/dist/cloud/nexus-cloud-activity.js.map +1 -0
- package/dist/cloud/nexus-cloud-status.d.ts.map +1 -1
- package/dist/cloud/nexus-cloud-status.js +36 -0
- package/dist/cloud/nexus-cloud-status.js.map +1 -1
- package/dist/cloud/nexus-device.d.ts +1 -1
- package/dist/cloud/nexus-enrol.d.ts.map +1 -1
- package/dist/cloud/nexus-enrol.js +5 -0
- package/dist/cloud/nexus-enrol.js.map +1 -1
- package/dist/cloud/nexus-home.d.ts +74 -0
- package/dist/cloud/nexus-home.d.ts.map +1 -0
- package/dist/cloud/nexus-home.js +97 -0
- package/dist/cloud/nexus-home.js.map +1 -0
- package/dist/cloud/nexus-vault-keys.d.ts +129 -0
- package/dist/cloud/nexus-vault-keys.d.ts.map +1 -0
- package/dist/cloud/nexus-vault-keys.js +277 -0
- package/dist/cloud/nexus-vault-keys.js.map +1 -0
- package/dist/cloud/nexus-vault-state.d.ts +121 -0
- package/dist/cloud/nexus-vault-state.d.ts.map +1 -0
- package/dist/cloud/nexus-vault-state.js +274 -0
- package/dist/cloud/nexus-vault-state.js.map +1 -0
- package/dist/cloud/nexus-vault.d.ts +160 -0
- package/dist/cloud/nexus-vault.d.ts.map +1 -0
- package/dist/cloud/nexus-vault.js +1733 -0
- package/dist/cloud/nexus-vault.js.map +1 -0
- package/dist/cloud/signing.d.ts +24 -8
- package/dist/cloud/signing.d.ts.map +1 -1
- package/dist/cloud/signing.js +61 -15
- package/dist/cloud/signing.js.map +1 -1
- package/dist/docs/export-document.js +8137 -3318
- package/dist/docs/export-document.js.map +3 -3
- package/dist/doctor/migrations.d.ts +75 -0
- package/dist/doctor/migrations.d.ts.map +1 -0
- package/dist/doctor/migrations.js +136 -0
- package/dist/doctor/migrations.js.map +1 -0
- package/dist/doctor/sync-sealer.d.ts +48 -0
- package/dist/doctor/sync-sealer.d.ts.map +1 -0
- package/dist/doctor/sync-sealer.js +109 -0
- package/dist/doctor/sync-sealer.js.map +1 -0
- package/dist/doctor/sync-triggers.d.ts +53 -0
- package/dist/doctor/sync-triggers.d.ts.map +1 -0
- package/dist/doctor/sync-triggers.js +157 -0
- package/dist/doctor/sync-triggers.js.map +1 -0
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +5 -1
- package/dist/init.js.map +1 -1
- package/dist/internal.d.ts +1 -1
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +1 -1
- package/dist/internal.js.map +1 -1
- package/dist/llm/plugin-facade.js +8442 -3623
- package/dist/llm/plugin-facade.js.map +3 -3
- package/dist/nexus/projects-clean.d.ts +3 -0
- package/dist/nexus/projects-clean.d.ts.map +1 -1
- package/dist/nexus/projects-clean.js +9 -3
- package/dist/nexus/projects-clean.js.map +1 -1
- package/dist/nexus/registry-roots.d.ts +3 -1
- package/dist/nexus/registry-roots.d.ts.map +1 -1
- package/dist/nexus/registry-roots.js +5 -2
- package/dist/nexus/registry-roots.js.map +1 -1
- package/dist/nexus/registry.d.ts +8 -1
- package/dist/nexus/registry.d.ts.map +1 -1
- package/dist/nexus/registry.js +24 -10
- package/dist/nexus/registry.js.map +1 -1
- package/dist/nexus/workspace.d.ts +4 -1
- package/dist/nexus/workspace.d.ts.map +1 -1
- package/dist/nexus/workspace.js +10 -4
- package/dist/nexus/workspace.js.map +1 -1
- package/dist/orchestrate/spawn-ops.d.ts.map +1 -1
- package/dist/orchestrate/spawn-ops.js +7 -2
- package/dist/orchestrate/spawn-ops.js.map +1 -1
- package/dist/orchestrate/worker-verify.d.ts +121 -12
- package/dist/orchestrate/worker-verify.d.ts.map +1 -1
- package/dist/orchestrate/worker-verify.js +172 -21
- package/dist/orchestrate/worker-verify.js.map +1 -1
- package/dist/orchestration/spawn-prompt.d.ts.map +1 -1
- package/dist/orchestration/spawn-prompt.js +15 -9
- package/dist/orchestration/spawn-prompt.js.map +1 -1
- package/dist/release/ci-evidence.d.ts +9 -0
- package/dist/release/ci-evidence.d.ts.map +1 -1
- package/dist/release/ci-evidence.js +9 -2
- package/dist/release/ci-evidence.js.map +1 -1
- package/dist/resources/backend.d.ts +15 -3
- package/dist/resources/backend.d.ts.map +1 -1
- package/dist/resources/backend.js +7 -3
- package/dist/resources/backend.js.map +1 -1
- package/dist/resources/darwin-backend.d.ts +142 -0
- package/dist/resources/darwin-backend.d.ts.map +1 -0
- package/dist/resources/darwin-backend.js +288 -0
- package/dist/resources/darwin-backend.js.map +1 -0
- package/dist/resources/governor.d.ts +44 -1
- package/dist/resources/governor.d.ts.map +1 -1
- package/dist/resources/governor.js +100 -36
- package/dist/resources/governor.js.map +1 -1
- package/dist/resources/heavy-command.d.ts +132 -0
- package/dist/resources/heavy-command.d.ts.map +1 -0
- package/dist/resources/heavy-command.js +768 -0
- package/dist/resources/heavy-command.js.map +1 -0
- package/dist/resources/monitor.d.ts +50 -1
- package/dist/resources/monitor.d.ts.map +1 -1
- package/dist/resources/monitor.js +83 -1
- package/dist/resources/monitor.js.map +1 -1
- package/dist/resources/run-admission.d.ts +303 -0
- package/dist/resources/run-admission.d.ts.map +1 -0
- package/dist/resources/run-admission.js +648 -0
- package/dist/resources/run-admission.js.map +1 -0
- package/dist/resources/run-class.d.ts +111 -0
- package/dist/resources/run-class.d.ts.map +1 -0
- package/dist/resources/run-class.js +658 -0
- package/dist/resources/run-class.js.map +1 -0
- package/dist/resources/run-governed.d.ts +158 -0
- package/dist/resources/run-governed.d.ts.map +1 -0
- package/dist/resources/run-governed.js +406 -0
- package/dist/resources/run-governed.js.map +1 -0
- package/dist/resources/slot-holder.d.ts +267 -0
- package/dist/resources/slot-holder.d.ts.map +1 -0
- package/dist/resources/slot-holder.js +505 -0
- package/dist/resources/slot-holder.js.map +1 -0
- package/dist/resources/tool-groups.d.ts +74 -0
- package/dist/resources/tool-groups.d.ts.map +1 -0
- package/dist/resources/tool-groups.js +118 -0
- package/dist/resources/tool-groups.js.map +1 -0
- package/dist/routing/build-command-groups.d.ts.map +1 -1
- package/dist/routing/build-command-groups.js +1 -0
- package/dist/routing/build-command-groups.js.map +1 -1
- package/dist/selfimprove/fix-gen.js +8446 -3627
- package/dist/selfimprove/fix-gen.js.map +3 -3
- package/dist/sentient/cross-project-hygiene.d.ts +3 -2
- package/dist/sentient/cross-project-hygiene.d.ts.map +1 -1
- package/dist/sentient/cross-project-hygiene.js +5 -2
- package/dist/sentient/cross-project-hygiene.js.map +1 -1
- package/dist/sentient/state.d.ts +7 -0
- package/dist/sentient/state.d.ts.map +1 -1
- package/dist/sentient/state.js.map +1 -1
- package/dist/sentient/tick.d.ts +14 -2
- package/dist/sentient/tick.d.ts.map +1 -1
- package/dist/sentient/tick.js +63 -4
- package/dist/sentient/tick.js.map +1 -1
- package/dist/store/backup-recover.d.ts.map +1 -1
- package/dist/store/backup-recover.js +5 -0
- package/dist/store/backup-recover.js.map +1 -1
- package/dist/store/data-accessor.d.ts +1 -0
- package/dist/store/data-accessor.d.ts.map +1 -1
- package/dist/store/data-accessor.js +7 -0
- package/dist/store/data-accessor.js.map +1 -1
- package/dist/store/dual-scope-db.d.ts +23 -1
- package/dist/store/dual-scope-db.d.ts.map +1 -1
- package/dist/store/dual-scope-db.js +126 -36
- package/dist/store/dual-scope-db.js.map +1 -1
- package/dist/store/exodus/recovery.d.ts.map +1 -1
- package/dist/store/exodus/recovery.js +15 -0
- package/dist/store/exodus/recovery.js.map +1 -1
- package/dist/store/legacy-tasks-lineage.d.ts.map +1 -1
- package/dist/store/legacy-tasks-lineage.js +5 -0
- package/dist/store/legacy-tasks-lineage.js.map +1 -1
- package/dist/store/lock.d.ts +8 -1
- package/dist/store/lock.d.ts.map +1 -1
- package/dist/store/lock.js +10 -2
- package/dist/store/lock.js.map +1 -1
- package/dist/store/migration-manager.d.ts +5 -0
- package/dist/store/migration-manager.d.ts.map +1 -1
- package/dist/store/migration-manager.js +11 -0
- package/dist/store/migration-manager.js.map +1 -1
- package/dist/store/migration-runner.d.ts +158 -0
- package/dist/store/migration-runner.d.ts.map +1 -0
- package/dist/store/migration-runner.js +493 -0
- package/dist/store/migration-runner.js.map +1 -0
- package/dist/store/portable-bundle-import.d.ts +15 -1
- package/dist/store/portable-bundle-import.d.ts.map +1 -1
- package/dist/store/portable-bundle-import.js +24 -4
- package/dist/store/portable-bundle-import.js.map +1 -1
- package/dist/store/portable-bundle-relocate.d.ts +43 -0
- package/dist/store/portable-bundle-relocate.d.ts.map +1 -1
- package/dist/store/portable-bundle-relocate.js +79 -5
- package/dist/store/portable-bundle-relocate.js.map +1 -1
- package/dist/store/portable-bundle-scan.d.ts +20 -0
- package/dist/store/portable-bundle-scan.d.ts.map +1 -1
- package/dist/store/portable-bundle-scan.js +38 -3
- package/dist/store/portable-bundle-scan.js.map +1 -1
- package/dist/store/portable-bundle.d.ts +33 -0
- package/dist/store/portable-bundle.d.ts.map +1 -1
- package/dist/store/portable-bundle.js +34 -7
- package/dist/store/portable-bundle.js.map +1 -1
- package/dist/store/row-identity-registry.d.ts +137 -7
- package/dist/store/row-identity-registry.d.ts.map +1 -1
- package/dist/store/row-identity-registry.js +364 -9
- package/dist/store/row-identity-registry.js.map +1 -1
- package/dist/store/row-identity.d.ts.map +1 -1
- package/dist/store/row-identity.js +9 -10
- package/dist/store/row-identity.js.map +1 -1
- package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
- package/dist/store/sqlite-data-accessor.js +10 -0
- package/dist/store/sqlite-data-accessor.js.map +1 -1
- package/dist/store/sqlite.d.ts +31 -0
- package/dist/store/sqlite.d.ts.map +1 -1
- package/dist/store/sqlite.js +5 -1
- package/dist/store/sqlite.js.map +1 -1
- package/dist/store/sync/capture.d.ts +203 -0
- package/dist/store/sync/capture.d.ts.map +1 -0
- package/dist/store/sync/capture.js +562 -0
- package/dist/store/sync/capture.js.map +1 -0
- package/dist/store/sync/clock-store.d.ts.map +1 -1
- package/dist/store/sync/clock-store.js +2 -0
- package/dist/store/sync/clock-store.js.map +1 -1
- package/dist/store/sync/fk-orphans.d.ts +133 -0
- package/dist/store/sync/fk-orphans.d.ts.map +1 -0
- package/dist/store/sync/fk-orphans.js +265 -0
- package/dist/store/sync/fk-orphans.js.map +1 -0
- package/dist/store/sync/flags.d.ts +7 -0
- package/dist/store/sync/flags.d.ts.map +1 -1
- package/dist/store/sync/flags.js +16 -0
- package/dist/store/sync/flags.js.map +1 -1
- package/dist/store/sync/hlc.d.ts.map +1 -1
- package/dist/store/sync/hlc.js +4 -0
- package/dist/store/sync/hlc.js.map +1 -1
- package/dist/store/sync/identity-fill.d.ts +45 -0
- package/dist/store/sync/identity-fill.d.ts.map +1 -0
- package/dist/store/sync/identity-fill.js +85 -0
- package/dist/store/sync/identity-fill.js.map +1 -0
- package/dist/store/sync/machinery.d.ts +27 -0
- package/dist/store/sync/machinery.d.ts.map +1 -0
- package/dist/store/sync/machinery.js +44 -0
- package/dist/store/sync/machinery.js.map +1 -0
- package/dist/store/sync/netting.d.ts +120 -0
- package/dist/store/sync/netting.d.ts.map +1 -0
- package/dist/store/sync/netting.js +336 -0
- package/dist/store/sync/netting.js.map +1 -0
- package/dist/store/sync/replica.d.ts +27 -2
- package/dist/store/sync/replica.d.ts.map +1 -1
- package/dist/store/sync/replica.js +47 -3
- package/dist/store/sync/replica.js.map +1 -1
- package/dist/store/sync/schema.d.ts +12 -0
- package/dist/store/sync/schema.d.ts.map +1 -1
- package/dist/store/sync/schema.js +21 -0
- package/dist/store/sync/schema.js.map +1 -1
- package/dist/store/sync/seal-backlog.d.ts +21 -0
- package/dist/store/sync/seal-backlog.d.ts.map +1 -0
- package/dist/store/sync/seal-backlog.js +24 -0
- package/dist/store/sync/seal-backlog.js.map +1 -0
- package/dist/store/sync/sealer-values.d.ts +34 -0
- package/dist/store/sync/sealer-values.d.ts.map +1 -0
- package/dist/store/sync/sealer-values.js +53 -0
- package/dist/store/sync/sealer-values.js.map +1 -0
- package/dist/store/sync/sealer.d.ts +145 -0
- package/dist/store/sync/sealer.d.ts.map +1 -0
- package/dist/store/sync/sealer.js +906 -0
- package/dist/store/sync/sealer.js.map +1 -0
- package/dist/store/sync/structural.d.ts +63 -0
- package/dist/store/sync/structural.d.ts.map +1 -0
- package/dist/store/sync/structural.js +180 -0
- package/dist/store/sync/structural.js.map +1 -0
- package/dist/store/sync/timestamps.d.ts +92 -0
- package/dist/store/sync/timestamps.d.ts.map +1 -0
- package/dist/store/sync/timestamps.js +228 -0
- package/dist/store/sync/timestamps.js.map +1 -0
- package/dist/store/sync/tombstones.d.ts +75 -0
- package/dist/store/sync/tombstones.d.ts.map +1 -0
- package/dist/store/sync/tombstones.js +103 -0
- package/dist/store/sync/tombstones.js.map +1 -0
- package/dist/store/sync/trigger-classes.d.ts +221 -0
- package/dist/store/sync/trigger-classes.d.ts.map +1 -0
- package/dist/store/sync/trigger-classes.js +441 -0
- package/dist/store/sync/trigger-classes.js.map +1 -0
- package/dist/store/sync/trigger-suspend-at-path.d.ts +23 -0
- package/dist/store/sync/trigger-suspend-at-path.d.ts.map +1 -0
- package/dist/store/sync/trigger-suspend-at-path.js +44 -0
- package/dist/store/sync/trigger-suspend-at-path.js.map +1 -0
- package/dist/store/sync/writer-version.d.ts +43 -0
- package/dist/store/sync/writer-version.d.ts.map +1 -0
- package/dist/store/sync/writer-version.js +90 -0
- package/dist/store/sync/writer-version.js.map +1 -0
- package/dist/store/table-classification.d.ts.map +1 -1
- package/dist/store/table-classification.js +102 -0
- package/dist/store/table-classification.js.map +1 -1
- package/dist/store/trigger-suspend-schema.d.ts +44 -0
- package/dist/store/trigger-suspend-schema.d.ts.map +1 -0
- package/dist/store/trigger-suspend-schema.js +25 -0
- package/dist/store/trigger-suspend-schema.js.map +1 -0
- package/dist/store/vault-manifest.d.ts +365 -0
- package/dist/store/vault-manifest.d.ts.map +1 -0
- package/dist/store/vault-manifest.js +812 -0
- package/dist/store/vault-manifest.js.map +1 -0
- package/dist/store/writer-lease.d.ts +31 -0
- package/dist/store/writer-lease.d.ts.map +1 -1
- package/dist/store/writer-lease.js +65 -2
- package/dist/store/writer-lease.js.map +1 -1
- package/dist/system/health.d.ts.map +1 -1
- package/dist/system/health.js +21 -0
- package/dist/system/health.js.map +1 -1
- package/dist/system/project-health.d.ts.map +1 -1
- package/dist/system/project-health.js +3 -1
- package/dist/system/project-health.js.map +1 -1
- package/dist/tasks/affected-packages.d.ts +58 -0
- package/dist/tasks/affected-packages.d.ts.map +1 -1
- package/dist/tasks/affected-packages.js +75 -6
- package/dist/tasks/affected-packages.js.map +1 -1
- package/dist/tasks/affected-scope.d.ts +150 -23
- package/dist/tasks/affected-scope.d.ts.map +1 -1
- package/dist/tasks/affected-scope.js +320 -32
- package/dist/tasks/affected-scope.js.map +1 -1
- package/dist/tasks/change-set.d.ts +96 -0
- package/dist/tasks/change-set.d.ts.map +1 -1
- package/dist/tasks/change-set.js +169 -4
- package/dist/tasks/change-set.js.map +1 -1
- package/dist/tasks/complete-ci.d.ts +115 -0
- package/dist/tasks/complete-ci.d.ts.map +1 -0
- package/dist/tasks/complete-ci.js +171 -0
- package/dist/tasks/complete-ci.js.map +1 -0
- package/dist/tasks/complete.d.ts.map +1 -1
- package/dist/tasks/complete.js +50 -17
- package/dist/tasks/complete.js.map +1 -1
- package/dist/tasks/compute-task-view.d.ts.map +1 -1
- package/dist/tasks/compute-task-view.js +7 -0
- package/dist/tasks/compute-task-view.js.map +1 -1
- package/dist/tasks/done-plan.d.ts.map +1 -1
- package/dist/tasks/done-plan.js +51 -30
- package/dist/tasks/done-plan.js.map +1 -1
- package/dist/tasks/done-record.d.ts +6 -0
- package/dist/tasks/done-record.d.ts.map +1 -1
- package/dist/tasks/done-record.js +9 -3
- package/dist/tasks/done-record.js.map +1 -1
- package/dist/tasks/evidence.d.ts +3 -2
- package/dist/tasks/evidence.d.ts.map +1 -1
- package/dist/tasks/evidence.js +143 -12
- package/dist/tasks/evidence.js.map +1 -1
- package/dist/tasks/gate-notes.d.ts +22 -0
- package/dist/tasks/gate-notes.d.ts.map +1 -0
- package/dist/tasks/gate-notes.js +33 -0
- package/dist/tasks/gate-notes.js.map +1 -0
- package/dist/tasks/index.d.ts +2 -1
- package/dist/tasks/index.d.ts.map +1 -1
- package/dist/tasks/index.js +2 -1
- package/dist/tasks/index.js.map +1 -1
- package/dist/tasks/test-run-binding.d.ts +117 -0
- package/dist/tasks/test-run-binding.d.ts.map +1 -0
- package/dist/tasks/test-run-binding.js +365 -0
- package/dist/tasks/test-run-binding.js.map +1 -0
- package/dist/tasks/tool-cache-env.d.ts +123 -0
- package/dist/tasks/tool-cache-env.d.ts.map +1 -0
- package/dist/tasks/tool-cache-env.js +287 -0
- package/dist/tasks/tool-cache-env.js.map +1 -0
- package/dist/tasks/tool-cache-failed-first.d.ts +155 -0
- package/dist/tasks/tool-cache-failed-first.d.ts.map +1 -0
- package/dist/tasks/tool-cache-failed-first.js +285 -0
- package/dist/tasks/tool-cache-failed-first.js.map +1 -0
- package/dist/tasks/tool-cache.d.ts +375 -55
- package/dist/tasks/tool-cache.d.ts.map +1 -1
- package/dist/tasks/tool-cache.js +912 -303
- package/dist/tasks/tool-cache.js.map +1 -1
- package/dist/tasks/tool-resolver.d.ts +4 -3
- package/dist/tasks/tool-resolver.d.ts.map +1 -1
- package/dist/tasks/tool-resolver.js +15 -4
- package/dist/tasks/tool-resolver.js.map +1 -1
- package/dist/tasks/tool-semaphore.d.ts +67 -7
- package/dist/tasks/tool-semaphore.d.ts.map +1 -1
- package/dist/tasks/tool-semaphore.js +134 -56
- package/dist/tasks/tool-semaphore.js.map +1 -1
- package/dist/upgrade.d.ts.map +1 -1
- package/dist/upgrade.js +4 -0
- package/dist/upgrade.js.map +1 -1
- package/dist/validation/engine-ops.d.ts +6 -0
- package/dist/validation/engine-ops.d.ts.map +1 -1
- package/dist/validation/engine-ops.js +8 -0
- package/dist/validation/engine-ops.js.map +1 -1
- package/migrations/drizzle-cleo-project/20260930170000_t12819-trigger-suspend-clause/migration.sql +367 -0
- package/migrations/sync-journal/20260930120000_t12343-capture/migration.sql +47 -0
- package/migrations/sync-journal/20261001170000_t12984-sealer/migration.sql +101 -0
- package/package.json +13 -13
- package/templates/CLEO-INJECTION.md +5 -5
- package/templates/CLEO-REFERENCE.md +8 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-class.js","sourceRoot":"","sources":["../../src/resources/run-class.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `runGoverned`: admit a heavy command through the machine-wide governor,
|
|
3
|
+
* run it, and supervise it under pressure. The engine behind `cleo run`,
|
|
4
|
+
* reusable by the supervisor (T12982).
|
|
5
|
+
*
|
|
6
|
+
* Lifecycle:
|
|
7
|
+
*
|
|
8
|
+
* 1. **Admission.** First, orphans of dead runners are reaped. A run nested
|
|
9
|
+
* inside a running job's process group runs on that job's slot. Otherwise
|
|
10
|
+
* admission is non-blocking by default: a denied admission (or anyone
|
|
11
|
+
* already waiting) returns a `deferred` result, with nothing started. With
|
|
12
|
+
* `wait`, the job takes a ticket in the class's FIFO queue before its
|
|
13
|
+
* first try; only the head of the queue tries to acquire, re-sampling
|
|
14
|
+
* pressure each time, until admitted or `timeoutMs`.
|
|
15
|
+
* 2. **Run.** The command is spawned as its own process group (so a pause or
|
|
16
|
+
* a cancel reaches its workers too), niced, with the caller's env. The job
|
|
17
|
+
* is recorded in the registry with its start times and a heartbeat. Its
|
|
18
|
+
* stdout goes to stderr, or with `passthrough` to the caller's stdout. A
|
|
19
|
+
* `foreground` child (a terminal's job) and a nested one stay in their
|
|
20
|
+
* group instead, are signalled by pid and are never paused.
|
|
21
|
+
* 3. **Supervise.** One serialized poll loop (never overlapping) samples
|
|
22
|
+
* pressure and applies {@link decidePause}: SIGSTOP/SIGCONT to the group.
|
|
23
|
+
* Every await is followed by an exit check, so nothing is signalled or
|
|
24
|
+
* written after the child exits.
|
|
25
|
+
* 4. **Exit.** If the job was ever paused, the group gets a SIGCONT (workers
|
|
26
|
+
* of a killed leader must not stay stopped); the record is removed and the
|
|
27
|
+
* slot released. SIGINT, SIGTERM and SIGHUP to the runner are forwarded to
|
|
28
|
+
* the group (after a SIGCONT). A runner killed outright is recovered by the
|
|
29
|
+
* next {@link reapOrphans}, which never acts on an unreadable `ps`.
|
|
30
|
+
*
|
|
31
|
+
* @module resources/run-governed
|
|
32
|
+
* @task T12979
|
|
33
|
+
* @task T12980
|
|
34
|
+
* @task T12981
|
|
35
|
+
* @epic T12978
|
|
36
|
+
*/
|
|
37
|
+
import type { EventEmitter } from 'node:events';
|
|
38
|
+
import { type AdmissionResult, type ResourceClass } from '@cleocode/contracts';
|
|
39
|
+
import type { ResourceSample } from './backend.js';
|
|
40
|
+
import { type GovernorIoError } from './governor.js';
|
|
41
|
+
import { listVerifyHolders, type RunAlternative, type RunDeferralDetails } from './run-admission.js';
|
|
42
|
+
/** Niceness applied to the command (children inherit it). */
|
|
43
|
+
export declare const RUN_NICENESS = 10;
|
|
44
|
+
/** The minimal child-process surface the loop needs (tests fake it). */
|
|
45
|
+
export interface GovernedChild extends EventEmitter {
|
|
46
|
+
readonly pid?: number | undefined;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* How out of the ordinary a notice is. `warn`: the run is ungoverned, or was
|
|
50
|
+
* paused or resumed under pressure (`--passthrough` still prints these).
|
|
51
|
+
* `info`: progress such as a queue admission or a nested run (left out by
|
|
52
|
+
* `--passthrough`).
|
|
53
|
+
*/
|
|
54
|
+
export type RunNoticeLevel = 'info' | 'warn';
|
|
55
|
+
/** Injectable effects. Defaults are the real process, governor and clock. */
|
|
56
|
+
export interface RunGovernedDeps {
|
|
57
|
+
readonly sample: () => Promise<ResourceSample>;
|
|
58
|
+
readonly tryAcquire: (cls: ResourceClass, sample: ResourceSample) => Promise<AdmissionResult>;
|
|
59
|
+
/**
|
|
60
|
+
* Start the child. `passthrough`: it gets the runner's stdin, stdout and
|
|
61
|
+
* stderr; otherwise its stdout goes to stderr. `detached`: its own session
|
|
62
|
+
* and process group.
|
|
63
|
+
*/
|
|
64
|
+
readonly spawn: (file: string, args: readonly string[], opts: {
|
|
65
|
+
cwd: string;
|
|
66
|
+
env: NodeJS.ProcessEnv;
|
|
67
|
+
detached: boolean;
|
|
68
|
+
passthrough: boolean;
|
|
69
|
+
}) => GovernedChild;
|
|
70
|
+
readonly signal: (pid: number, signal: NodeJS.Signals) => boolean;
|
|
71
|
+
/** Signal a single process (a nested job's child shares its parent's group). */
|
|
72
|
+
readonly signalPid: (pid: number, signal: NodeJS.Signals) => boolean;
|
|
73
|
+
readonly start: (pid: number) => string | null;
|
|
74
|
+
readonly renice: (pid: number) => void;
|
|
75
|
+
readonly now: () => number;
|
|
76
|
+
/**
|
|
77
|
+
* Wait `ms`. The timer keeps the process alive (a `--wait` queue has
|
|
78
|
+
* nothing else to); `signal` cancels it early so a finished run exits at once.
|
|
79
|
+
*/
|
|
80
|
+
readonly sleep: (ms: number, signal?: AbortSignal) => Promise<void>;
|
|
81
|
+
/** Install runner signal forwarding; returns an uninstall function. */
|
|
82
|
+
readonly onRunnerSignal: (handler: (signal: NodeJS.Signals) => void) => () => void;
|
|
83
|
+
readonly jobsDir: string;
|
|
84
|
+
readonly queueDir: (cls: ResourceClass) => string;
|
|
85
|
+
readonly verifyHolders: () => ReturnType<typeof listVerifyHolders>;
|
|
86
|
+
readonly pid: number;
|
|
87
|
+
/** Process group of a pid (`ps -o pgid=`), or null when unknown. */
|
|
88
|
+
readonly groupOf: (pid: number) => number | null;
|
|
89
|
+
/** Ancestors of a pid, nearest first (one `ps` of the process table), or null when unknown. */
|
|
90
|
+
readonly ancestorsOf: (pid: number) => readonly number[] | null;
|
|
91
|
+
}
|
|
92
|
+
/** Options for {@link runGoverned}. */
|
|
93
|
+
export interface RunGovernedOptions {
|
|
94
|
+
readonly argv: readonly string[];
|
|
95
|
+
readonly cls: ResourceClass;
|
|
96
|
+
readonly cwd: string;
|
|
97
|
+
/** Child environment (caller applies heavyToolEnv). */
|
|
98
|
+
readonly env: NodeJS.ProcessEnv;
|
|
99
|
+
readonly sessionId: string | null;
|
|
100
|
+
readonly wait?: boolean;
|
|
101
|
+
/** With `wait`: give up after this long. @defaultValue 30 min */
|
|
102
|
+
readonly timeoutMs?: number;
|
|
103
|
+
/** Supervision cadence. @defaultValue 5000 */
|
|
104
|
+
readonly pollMs?: number;
|
|
105
|
+
/** Queue cadence under `wait`. @defaultValue 1000 */
|
|
106
|
+
readonly queuePollMs?: number;
|
|
107
|
+
/**
|
|
108
|
+
* The child gets the runner's stdin, stdout and stderr (`cleo run
|
|
109
|
+
* --passthrough`), so its stdout reaches the caller byte for byte.
|
|
110
|
+
* @defaultValue false (stdout goes to stderr; the caller's stdout is reserved)
|
|
111
|
+
*/
|
|
112
|
+
readonly passthrough?: boolean;
|
|
113
|
+
/**
|
|
114
|
+
* Keep the child in the runner's process group instead of a detached one:
|
|
115
|
+
* a terminal's foreground job, so reading or configuring the terminal never
|
|
116
|
+
* stops it (SIGTTIN/SIGTTOU) and Ctrl-C reaches it. Such a child is never
|
|
117
|
+
* paused. SIGTERM and SIGHUP to the runner are forwarded to it by pid;
|
|
118
|
+
* SIGINT is not, since the terminal already sent it to the whole group.
|
|
119
|
+
* @defaultValue false
|
|
120
|
+
*/
|
|
121
|
+
readonly foreground?: boolean;
|
|
122
|
+
/** One-line notices (stderr in the CLI); see {@link RunNoticeLevel}. */
|
|
123
|
+
readonly notice?: (line: string, level: RunNoticeLevel) => void;
|
|
124
|
+
readonly deps?: Partial<RunGovernedDeps>;
|
|
125
|
+
}
|
|
126
|
+
/** Result of {@link runGoverned}. */
|
|
127
|
+
export type RunGovernedResult = {
|
|
128
|
+
readonly kind: 'deferred';
|
|
129
|
+
readonly reason: string;
|
|
130
|
+
readonly details: RunDeferralDetails;
|
|
131
|
+
readonly alternatives: RunAlternative[];
|
|
132
|
+
readonly fix: string;
|
|
133
|
+
} | {
|
|
134
|
+
readonly kind: 'exited';
|
|
135
|
+
readonly class: ResourceClass;
|
|
136
|
+
readonly command: string;
|
|
137
|
+
readonly exitCode: number | null;
|
|
138
|
+
readonly signal: NodeJS.Signals | null;
|
|
139
|
+
/** Set when the command could not be started at all. */
|
|
140
|
+
readonly spawnError: string | null;
|
|
141
|
+
readonly durationMs: number;
|
|
142
|
+
readonly waitedMs: number;
|
|
143
|
+
readonly pausedMs: number;
|
|
144
|
+
readonly pauses: number;
|
|
145
|
+
readonly slot: number;
|
|
146
|
+
/**
|
|
147
|
+
* Set when the governor's state could not be written (a sandboxed or read-only CLEO home, a
|
|
148
|
+
* full disk): the command ran ungoverned rather than not at all.
|
|
149
|
+
*/
|
|
150
|
+
readonly ungoverned: GovernorIoError | null;
|
|
151
|
+
};
|
|
152
|
+
export { governorIoError } from './governor.js';
|
|
153
|
+
/**
|
|
154
|
+
* Admit, run and supervise one heavy command. Never throws for admission or
|
|
155
|
+
* child failures; those are results.
|
|
156
|
+
*/
|
|
157
|
+
export declare function runGoverned(opts: RunGovernedOptions): Promise<RunGovernedResult>;
|
|
158
|
+
//# sourceMappingURL=run-governed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-governed.d.ts","sourceRoot":"","sources":["../../src/resources/run-governed.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `runGoverned`: admit a heavy command through the machine-wide governor,
|
|
3
|
+
* run it, and supervise it under pressure. The engine behind `cleo run`,
|
|
4
|
+
* reusable by the supervisor (T12982).
|
|
5
|
+
*
|
|
6
|
+
* Lifecycle:
|
|
7
|
+
*
|
|
8
|
+
* 1. **Admission.** First, orphans of dead runners are reaped. A run nested
|
|
9
|
+
* inside a running job's process group runs on that job's slot. Otherwise
|
|
10
|
+
* admission is non-blocking by default: a denied admission (or anyone
|
|
11
|
+
* already waiting) returns a `deferred` result, with nothing started. With
|
|
12
|
+
* `wait`, the job takes a ticket in the class's FIFO queue before its
|
|
13
|
+
* first try; only the head of the queue tries to acquire, re-sampling
|
|
14
|
+
* pressure each time, until admitted or `timeoutMs`.
|
|
15
|
+
* 2. **Run.** The command is spawned as its own process group (so a pause or
|
|
16
|
+
* a cancel reaches its workers too), niced, with the caller's env. The job
|
|
17
|
+
* is recorded in the registry with its start times and a heartbeat. Its
|
|
18
|
+
* stdout goes to stderr, or with `passthrough` to the caller's stdout. A
|
|
19
|
+
* `foreground` child (a terminal's job) and a nested one stay in their
|
|
20
|
+
* group instead, are signalled by pid and are never paused.
|
|
21
|
+
* 3. **Supervise.** One serialized poll loop (never overlapping) samples
|
|
22
|
+
* pressure and applies {@link decidePause}: SIGSTOP/SIGCONT to the group.
|
|
23
|
+
* Every await is followed by an exit check, so nothing is signalled or
|
|
24
|
+
* written after the child exits.
|
|
25
|
+
* 4. **Exit.** If the job was ever paused, the group gets a SIGCONT (workers
|
|
26
|
+
* of a killed leader must not stay stopped); the record is removed and the
|
|
27
|
+
* slot released. SIGINT, SIGTERM and SIGHUP to the runner are forwarded to
|
|
28
|
+
* the group (after a SIGCONT). A runner killed outright is recovered by the
|
|
29
|
+
* next {@link reapOrphans}, which never acts on an unreadable `ps`.
|
|
30
|
+
*
|
|
31
|
+
* @module resources/run-governed
|
|
32
|
+
* @task T12979
|
|
33
|
+
* @task T12980
|
|
34
|
+
* @task T12981
|
|
35
|
+
* @epic T12978
|
|
36
|
+
*/
|
|
37
|
+
import { spawn as nodeSpawn } from 'node:child_process';
|
|
38
|
+
import { setPriority } from 'node:os';
|
|
39
|
+
import { DEFAULT_RESOURCE_RETRY_AFTER_MS, } from '@cleocode/contracts';
|
|
40
|
+
import { admitFailOpen, governor, passThroughGrant } from './governor.js';
|
|
41
|
+
import { classifyPressure, pressureScore, ResourceMonitor } from './monitor.js';
|
|
42
|
+
import { buildRunDeferral, decidePause, isPausable, listQueueTickets, listRunJobs, listVerifyHolders, parentRunJob, processAncestors, processGroupOf, processStart, reapOrphans, redactCommand, removeQueueTicket, removeRunJob, runJobsDir, runningEntries, runQueueDir, signalGroup, signalPid, writeQueueTicket, writeRunJob, } from './run-admission.js';
|
|
43
|
+
import { trackToolGroup } from './tool-groups.js';
|
|
44
|
+
/** Niceness applied to the command (children inherit it). */
|
|
45
|
+
export const RUN_NICENESS = 10;
|
|
46
|
+
// The classifier moved to the governor, which every admission shares (R8-1).
|
|
47
|
+
export { governorIoError } from './governor.js';
|
|
48
|
+
function defaultDeps() {
|
|
49
|
+
const monitor = new ResourceMonitor();
|
|
50
|
+
return {
|
|
51
|
+
sample: () => monitor.sample(),
|
|
52
|
+
tryAcquire: (cls, sample) => governor.tryAcquire(cls, { sample }),
|
|
53
|
+
spawn: (file, args, opts) => nodeSpawn(file, [...args], {
|
|
54
|
+
cwd: opts.cwd,
|
|
55
|
+
env: opts.env,
|
|
56
|
+
// Unless passed through, stdout is reserved for the caller's envelope:
|
|
57
|
+
// output goes to stderr.
|
|
58
|
+
stdio: opts.passthrough ? 'inherit' : ['inherit', 2, 2],
|
|
59
|
+
detached: opts.detached,
|
|
60
|
+
}),
|
|
61
|
+
signal: signalGroup,
|
|
62
|
+
signalPid,
|
|
63
|
+
start: processStart,
|
|
64
|
+
renice: (pid) => {
|
|
65
|
+
try {
|
|
66
|
+
setPriority(pid, RUN_NICENESS);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
// Not permitted here: normal priority.
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
now: Date.now,
|
|
73
|
+
sleep: (ms, signal) => new Promise((resolve) => {
|
|
74
|
+
if (signal?.aborted)
|
|
75
|
+
return resolve();
|
|
76
|
+
const timer = setTimeout(resolve, ms);
|
|
77
|
+
signal?.addEventListener('abort', () => {
|
|
78
|
+
clearTimeout(timer);
|
|
79
|
+
resolve();
|
|
80
|
+
}, { once: true });
|
|
81
|
+
}),
|
|
82
|
+
onRunnerSignal: (handler) => {
|
|
83
|
+
const signals = ['SIGINT', 'SIGTERM', 'SIGHUP'];
|
|
84
|
+
const fns = signals.map((s) => {
|
|
85
|
+
const fn = () => handler(s);
|
|
86
|
+
process.on(s, fn);
|
|
87
|
+
return [s, fn];
|
|
88
|
+
});
|
|
89
|
+
return () => {
|
|
90
|
+
for (const [s, fn] of fns)
|
|
91
|
+
process.off(s, fn);
|
|
92
|
+
};
|
|
93
|
+
},
|
|
94
|
+
jobsDir: runJobsDir(),
|
|
95
|
+
queueDir: (cls) => runQueueDir(cls),
|
|
96
|
+
verifyHolders: () => listVerifyHolders(),
|
|
97
|
+
pid: process.pid,
|
|
98
|
+
groupOf: processGroupOf,
|
|
99
|
+
ancestorsOf: processAncestors,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/** Registry probes bound to the injected clock, start-time probe and signaller. */
|
|
103
|
+
function probesOf(d) {
|
|
104
|
+
return { now: d.now, start: d.start, signal: d.signal, signalPid: d.signalPid };
|
|
105
|
+
}
|
|
106
|
+
async function deferral(opts, d, reason, retryAfterMs, sample, queuePosition) {
|
|
107
|
+
const pressure = classifyPressure(sample);
|
|
108
|
+
const built = buildRunDeferral({
|
|
109
|
+
cls: opts.cls,
|
|
110
|
+
argv: opts.argv,
|
|
111
|
+
reason,
|
|
112
|
+
retryAfterMs,
|
|
113
|
+
queuePosition,
|
|
114
|
+
pressure: {
|
|
115
|
+
state: pressure.state,
|
|
116
|
+
score: Number(pressureScore(sample).toFixed(1)),
|
|
117
|
+
reason: pressure.reason,
|
|
118
|
+
memAvailableBytes: sample.memAvailableBytes,
|
|
119
|
+
},
|
|
120
|
+
running: runningEntries(listRunJobs(d.jobsDir, probesOf(d)), d.verifyHolders()),
|
|
121
|
+
});
|
|
122
|
+
return { kind: 'deferred', reason, ...built };
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Admit, run and supervise one heavy command. Never throws for admission or
|
|
126
|
+
* child failures; those are results.
|
|
127
|
+
*/
|
|
128
|
+
export async function runGoverned(opts) {
|
|
129
|
+
const d = { ...defaultDeps(), ...opts.deps };
|
|
130
|
+
const notice = opts.notice ?? (() => { });
|
|
131
|
+
const command = redactCommand(opts.argv);
|
|
132
|
+
const t0 = d.now();
|
|
133
|
+
// ---- 1. admission -------------------------------------------------------
|
|
134
|
+
// Reap what dead runners left behind (never on an unreadable `ps`).
|
|
135
|
+
reapOrphans(d.jobsDir, probesOf(d));
|
|
136
|
+
let sample = await d.sample();
|
|
137
|
+
// A nested run (a script under `cleo run` that itself calls `cleo run`)
|
|
138
|
+
// runs inside its enclosing job's process tree. Of the SAME class it rides
|
|
139
|
+
// the enclosing job's slot (#1777 round 3, M-2); of another class it takes
|
|
140
|
+
// its own slot (round 4, MED-1). Either way its child stays in the
|
|
141
|
+
// enclosing group, is never paused on its own, and is signalled by pid
|
|
142
|
+
// (round 5, N1). See {@link parentRunJob} for why this can't be forged.
|
|
143
|
+
const enclosing = parentRunJob({
|
|
144
|
+
pid: d.pid,
|
|
145
|
+
jobsDir: d.jobsDir,
|
|
146
|
+
probes: probesOf(d),
|
|
147
|
+
groupOf: d.groupOf,
|
|
148
|
+
ancestorsOf: d.ancestorsOf,
|
|
149
|
+
});
|
|
150
|
+
const nested = enclosing !== null;
|
|
151
|
+
const parent = enclosing !== null && enclosing.class === opts.cls ? enclosing : null;
|
|
152
|
+
if (enclosing && !parent) {
|
|
153
|
+
notice(`nested in a running ${enclosing.class} job (${enclosing.command}): admitted on its own ${opts.cls} slot, inside that job's process group`, 'info');
|
|
154
|
+
}
|
|
155
|
+
// Fail open (#1781 review, HIGH): when the governor cannot write its slot locks (Codex's
|
|
156
|
+
// workspace-write sandbox, Claude Code's sandboxed Bash, a read-only CLEO home), run the command
|
|
157
|
+
// ungoverned instead of failing a test that would have passed. Only filesystem errors; anything
|
|
158
|
+
// else is a bug and propagates. E_RESOURCE_DEFERRED is unchanged.
|
|
159
|
+
let ungoverned = null;
|
|
160
|
+
const tryAcquire = async (s) => {
|
|
161
|
+
const r = await admitFailOpen(opts.cls, () => d.tryAcquire(opts.cls, s));
|
|
162
|
+
if (r.ungoverned !== null) {
|
|
163
|
+
const io = r.ungoverned;
|
|
164
|
+
ungoverned = io;
|
|
165
|
+
notice(`governor state is not writable (${io.code}${io.path ? ` ${io.path}` : ''}): running ungoverned`, 'warn');
|
|
166
|
+
}
|
|
167
|
+
return r.admission;
|
|
168
|
+
};
|
|
169
|
+
let admission;
|
|
170
|
+
if (parent) {
|
|
171
|
+
admission = passThroughGrant(opts.cls);
|
|
172
|
+
notice(`nested in a running ${parent.class} job (${parent.command}): running on its slot`, 'info');
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
const qdir = d.queueDir(opts.cls);
|
|
176
|
+
const ticketId = `${d.pid}-${t0}`;
|
|
177
|
+
const ticket = {
|
|
178
|
+
id: ticketId,
|
|
179
|
+
pid: d.pid,
|
|
180
|
+
runnerStart: d.start(d.pid),
|
|
181
|
+
enqueuedAtMs: t0,
|
|
182
|
+
heartbeatAtMs: t0,
|
|
183
|
+
command,
|
|
184
|
+
};
|
|
185
|
+
// With --wait the ticket goes in BEFORE the first try (L-1): nobody can
|
|
186
|
+
// slip in between a denied try and the enqueue.
|
|
187
|
+
if (opts.wait)
|
|
188
|
+
writeQueueTicket(ticket, qdir);
|
|
189
|
+
/** How many tickets are ahead of this job (all of them without --wait). */
|
|
190
|
+
const ahead = () => {
|
|
191
|
+
const queue = listQueueTickets(qdir, probesOf(d));
|
|
192
|
+
if (!opts.wait)
|
|
193
|
+
return queue.length;
|
|
194
|
+
const at = queue.findIndex((t) => t.id === ticketId);
|
|
195
|
+
if (at >= 0)
|
|
196
|
+
return at;
|
|
197
|
+
writeQueueTicket({ ...ticket, heartbeatAtMs: d.now() }, qdir); // lost: re-enqueue
|
|
198
|
+
return queue.length;
|
|
199
|
+
};
|
|
200
|
+
const queued = (n) => ({
|
|
201
|
+
deferred: true,
|
|
202
|
+
class: opts.cls,
|
|
203
|
+
retryAfterMs: DEFAULT_RESOURCE_RETRY_AFTER_MS,
|
|
204
|
+
reason: `${n} job(s) ahead in the ${opts.cls} queue`,
|
|
205
|
+
});
|
|
206
|
+
try {
|
|
207
|
+
// No barging (M5): while anyone waits ahead, never try first.
|
|
208
|
+
let position = ahead();
|
|
209
|
+
admission = position > 0 ? queued(position) : await tryAcquire(sample);
|
|
210
|
+
if (admission.deferred && opts.wait) {
|
|
211
|
+
const deadline = t0 + (opts.timeoutMs ?? 30 * 60_000);
|
|
212
|
+
while (admission.deferred) {
|
|
213
|
+
if (d.now() >= deadline) {
|
|
214
|
+
return await deferral(opts, d, `timed out after ${Math.round((d.now() - t0) / 1000)}s in the ${opts.cls} queue (position ${position + 1}): ${admission.reason}`, admission.retryAfterMs, sample, position + 1);
|
|
215
|
+
}
|
|
216
|
+
await d.sleep(opts.queuePollMs ?? 1000);
|
|
217
|
+
writeQueueTicket({ ...ticket, heartbeatAtMs: d.now() }, qdir);
|
|
218
|
+
position = ahead();
|
|
219
|
+
if (position !== 0) {
|
|
220
|
+
admission = queued(position);
|
|
221
|
+
continue; // FIFO: only the head tries.
|
|
222
|
+
}
|
|
223
|
+
sample = await d.sample();
|
|
224
|
+
admission = await tryAcquire(sample);
|
|
225
|
+
}
|
|
226
|
+
notice(`admitted after ${Math.round((d.now() - t0) / 1000)}s in the ${opts.cls} queue`, 'info');
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
finally {
|
|
230
|
+
if (opts.wait)
|
|
231
|
+
removeQueueTicket(ticketId, qdir);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
if (admission.deferred) {
|
|
235
|
+
return deferral(opts, d, admission.reason, admission.retryAfterMs, sample, null);
|
|
236
|
+
}
|
|
237
|
+
const grant = admission;
|
|
238
|
+
const waitedMs = d.now() - t0;
|
|
239
|
+
// ---- 2. run -------------------------------------------------------------
|
|
240
|
+
const startedAtMs = d.now();
|
|
241
|
+
// A nested job lives in its enclosing job's group, a foreground job in its
|
|
242
|
+
// terminal's: neither leads a group, so neither is ever paused on its own.
|
|
243
|
+
const leadsGroup = !nested && opts.foreground !== true;
|
|
244
|
+
// Ungoverned, it holds no slot and keeps no reliable record: never paused either.
|
|
245
|
+
const pausable = leadsGroup && ungoverned === null && isPausable(opts.cls, opts.argv);
|
|
246
|
+
const [file, ...args] = opts.argv;
|
|
247
|
+
// No inherited grant marker (#1777 round 2): every nested `cleo run` is
|
|
248
|
+
// admitted on its own; verify joins the same budgets with #1775 (T12963).
|
|
249
|
+
const env = { ...opts.env, CLEO_RUN_CLASS: opts.cls };
|
|
250
|
+
let job = {
|
|
251
|
+
id: `${d.pid}-${startedAtMs}`,
|
|
252
|
+
pid: d.pid,
|
|
253
|
+
runnerStart: d.start(d.pid),
|
|
254
|
+
childPid: null,
|
|
255
|
+
childStart: null,
|
|
256
|
+
class: opts.cls,
|
|
257
|
+
command,
|
|
258
|
+
cwd: opts.cwd,
|
|
259
|
+
startedAtMs,
|
|
260
|
+
sessionId: opts.sessionId,
|
|
261
|
+
pausedAtMs: null,
|
|
262
|
+
pausable,
|
|
263
|
+
heartbeatAtMs: startedAtMs,
|
|
264
|
+
parentJob: enclosing?.id ?? null,
|
|
265
|
+
holdsSlot: parent === null,
|
|
266
|
+
leadsGroup,
|
|
267
|
+
};
|
|
268
|
+
writeRunJob(job, d.jobsDir);
|
|
269
|
+
let exited = false;
|
|
270
|
+
let pausedAtMs = null;
|
|
271
|
+
let capResumedAtMs = null;
|
|
272
|
+
let pausedTotalMs = 0;
|
|
273
|
+
let pauses = 0;
|
|
274
|
+
let child;
|
|
275
|
+
try {
|
|
276
|
+
child = d.spawn(file, args, {
|
|
277
|
+
cwd: opts.cwd,
|
|
278
|
+
env,
|
|
279
|
+
detached: leadsGroup,
|
|
280
|
+
passthrough: opts.passthrough === true,
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
catch (err) {
|
|
284
|
+
removeRunJob(job.id, d.jobsDir);
|
|
285
|
+
await grant.release();
|
|
286
|
+
return exitedResult(err instanceof Error ? err.message : String(err), null, null);
|
|
287
|
+
}
|
|
288
|
+
const exit = new Promise((resolve) => {
|
|
289
|
+
child.once('error', (error) => resolve({ code: null, signal: null, error }));
|
|
290
|
+
child.once('exit', (code, signal) => resolve({ code, signal }));
|
|
291
|
+
});
|
|
292
|
+
void exit.then(() => {
|
|
293
|
+
exited = true;
|
|
294
|
+
});
|
|
295
|
+
const childPid = child.pid;
|
|
296
|
+
if (childPid !== undefined) {
|
|
297
|
+
d.renice(childPid);
|
|
298
|
+
job = { ...job, childPid, childStart: d.start(childPid) };
|
|
299
|
+
if (!exited)
|
|
300
|
+
writeRunJob(job, d.jobsDir);
|
|
301
|
+
}
|
|
302
|
+
// T12963: the slot this runner holds lists the child's group, so a SIGKILLed
|
|
303
|
+
// runner's slot stays held while the child runs. A nested or foreground
|
|
304
|
+
// child leads no group of its own.
|
|
305
|
+
const untrackGroup = leadsGroup ? trackToolGroup(childPid) : () => { };
|
|
306
|
+
// A nested or foreground child is not a group leader (it lives in the
|
|
307
|
+
// enclosing job's or the terminal's group): signal the process itself, or
|
|
308
|
+
// kill(-pid) would hit ESRCH and the child would keep running (#1777 round
|
|
309
|
+
// 4, L-A).
|
|
310
|
+
const forwardTo = leadsGroup ? d.signal : d.signalPid;
|
|
311
|
+
const uninstall = d.onRunnerSignal((signal) => {
|
|
312
|
+
if (childPid === undefined || exited)
|
|
313
|
+
return;
|
|
314
|
+
// A terminal's Ctrl-C already reached its whole foreground group, child
|
|
315
|
+
// included: forwarding it would deliver a second SIGINT, which some
|
|
316
|
+
// runners treat as force-quit (#1777 R8). SIGTERM and SIGHUP still go.
|
|
317
|
+
if (opts.foreground === true && signal === 'SIGINT')
|
|
318
|
+
return;
|
|
319
|
+
forwardTo(childPid, 'SIGCONT');
|
|
320
|
+
forwardTo(childPid, signal);
|
|
321
|
+
});
|
|
322
|
+
// ---- 3. supervise (serialized: one tick at a time) ----------------------
|
|
323
|
+
let state = 'ok';
|
|
324
|
+
const stopTimers = new AbortController();
|
|
325
|
+
void exit.then(() => stopTimers.abort());
|
|
326
|
+
const supervise = async () => {
|
|
327
|
+
while (!exited) {
|
|
328
|
+
const woke = await Promise.race([
|
|
329
|
+
d.sleep(opts.pollMs ?? 5000, stopTimers.signal).then(() => 'tick'),
|
|
330
|
+
exit.then(() => 'exit'),
|
|
331
|
+
]);
|
|
332
|
+
if (woke === 'exit' || exited || childPid === undefined)
|
|
333
|
+
return;
|
|
334
|
+
let s;
|
|
335
|
+
try {
|
|
336
|
+
s = await d.sample();
|
|
337
|
+
}
|
|
338
|
+
catch {
|
|
339
|
+
continue; // A failed sample never pauses anything.
|
|
340
|
+
}
|
|
341
|
+
if (exited)
|
|
342
|
+
return;
|
|
343
|
+
state = classifyPressure(s, state).state;
|
|
344
|
+
const now = d.now();
|
|
345
|
+
const { decision, reason } = decidePause({
|
|
346
|
+
state,
|
|
347
|
+
self: job,
|
|
348
|
+
jobs: listRunJobs(d.jobsDir, probesOf(d)),
|
|
349
|
+
nowMs: now,
|
|
350
|
+
pausedAtMs,
|
|
351
|
+
capResumedAtMs,
|
|
352
|
+
});
|
|
353
|
+
if (exited)
|
|
354
|
+
return;
|
|
355
|
+
if (decision === 'pause' && pausedAtMs === null) {
|
|
356
|
+
if (!d.signal(childPid, 'SIGSTOP'))
|
|
357
|
+
continue;
|
|
358
|
+
pausedAtMs = now;
|
|
359
|
+
pauses++;
|
|
360
|
+
notice(`paused: machine at backoff (${classifyPressure(s).reason}); an older job keeps running. Resumes automatically.`, 'warn');
|
|
361
|
+
}
|
|
362
|
+
else if (decision === 'run' && pausedAtMs !== null) {
|
|
363
|
+
d.signal(childPid, 'SIGCONT');
|
|
364
|
+
pausedTotalMs += now - pausedAtMs;
|
|
365
|
+
pausedAtMs = null;
|
|
366
|
+
if (reason === 'cap')
|
|
367
|
+
capResumedAtMs = now;
|
|
368
|
+
notice(reason === 'cap' ? 'resumed: paused for the maximum time' : 'resumed.', 'warn');
|
|
369
|
+
}
|
|
370
|
+
job = { ...job, pausedAtMs, heartbeatAtMs: now };
|
|
371
|
+
if (!exited)
|
|
372
|
+
writeRunJob(job, d.jobsDir);
|
|
373
|
+
}
|
|
374
|
+
};
|
|
375
|
+
const supervisor = supervise();
|
|
376
|
+
const result = await exit;
|
|
377
|
+
exited = true;
|
|
378
|
+
untrackGroup();
|
|
379
|
+
await supervisor;
|
|
380
|
+
uninstall();
|
|
381
|
+
// Workers of a killed (or paused) leader must never stay stopped.
|
|
382
|
+
if (childPid !== undefined && pauses > 0)
|
|
383
|
+
d.signal(childPid, 'SIGCONT');
|
|
384
|
+
if (pausedAtMs !== null)
|
|
385
|
+
pausedTotalMs += d.now() - pausedAtMs;
|
|
386
|
+
removeRunJob(job.id, d.jobsDir);
|
|
387
|
+
await grant.release();
|
|
388
|
+
return exitedResult(result.error ? result.error.message : null, result.code, result.signal);
|
|
389
|
+
function exitedResult(spawnError, exitCode, signal) {
|
|
390
|
+
return {
|
|
391
|
+
kind: 'exited',
|
|
392
|
+
class: opts.cls,
|
|
393
|
+
command,
|
|
394
|
+
exitCode,
|
|
395
|
+
signal,
|
|
396
|
+
spawnError,
|
|
397
|
+
durationMs: d.now() - startedAtMs,
|
|
398
|
+
waitedMs,
|
|
399
|
+
pausedMs: pausedTotalMs,
|
|
400
|
+
pauses,
|
|
401
|
+
slot: grant.slot,
|
|
402
|
+
ungoverned,
|
|
403
|
+
};
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
//# sourceMappingURL=run-governed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-governed.js","sourceRoot":"","sources":["../../src/resources/run-governed.ts"],"names":[],"mappings":"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"}
|