niceeval 0.13.3 → 0.13.4-canary.39
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/INDEX.md +5 -5
- package/dist/agents/index.cjs +2 -2
- package/dist/agents/index.cjs.map +1 -1
- package/dist/agents/project.json +6 -0
- package/dist/agents/streaming.cjs.map +1 -1
- package/dist/agents/types.cjs.map +1 -1
- package/dist/agents/types.d.cts +1 -1
- package/dist/agents/types.d.mts +1 -1
- package/dist/agents/types.d.ts +1 -1
- package/dist/analysis/bindings.d.cts +8 -8
- package/dist/analysis/bindings.d.mts +8 -8
- package/dist/analysis/bindings.d.ts +8 -8
- package/dist/analysis/contracts.cjs.map +1 -1
- package/dist/analysis/contracts.d.cts +8 -19
- package/dist/analysis/contracts.d.mts +8 -19
- package/dist/analysis/contracts.d.ts +8 -19
- package/dist/analysis/experiment-groups.cjs +7 -14
- package/dist/analysis/experiment-groups.cjs.map +1 -1
- package/dist/analysis/index.cjs.map +1 -1
- package/dist/analysis/index.d.cts +1 -1
- package/dist/analysis/index.d.mts +1 -1
- package/dist/analysis/index.d.ts +1 -1
- package/dist/cli/application.cjs +4 -13
- package/dist/cli/application.cjs.map +1 -1
- package/dist/cli/application.d.cts +62 -59
- package/dist/cli/application.d.mts +62 -59
- package/dist/cli/application.d.ts +62 -59
- package/dist/cli/application.js +6 -12
- package/dist/cli/bootstrap.cjs +28 -2
- package/dist/cli/bootstrap.cjs.map +1 -1
- package/dist/cli/contribution.cjs +185 -0
- package/dist/cli/contribution.cjs.map +1 -0
- package/dist/cli/contribution.d.cts +55 -0
- package/dist/cli/contribution.d.mts +55 -0
- package/dist/cli/contribution.d.ts +55 -0
- package/dist/cli/contribution.js +20 -0
- package/dist/cli/contribution.js.map +1 -0
- package/dist/cli/node-application.cjs +119 -87
- package/dist/cli/node-application.cjs.map +1 -1
- package/dist/cli/node-application.d.cts +2 -8
- package/dist/cli/node-application.d.mts +2 -8
- package/dist/cli/node-application.d.ts +2 -8
- package/dist/cli/node-application.js +12 -22
- package/dist/cli/program.cjs +87 -2756
- package/dist/cli/program.cjs.map +1 -1
- package/dist/cli/program.d.cts +11 -332
- package/dist/cli/program.d.mts +11 -332
- package/dist/cli/program.d.ts +11 -332
- package/dist/cli/program.js +4 -28
- package/dist/cli.cjs +0 -3
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.d.cts +0 -1
- package/dist/cli.d.mts +0 -1
- package/dist/cli.d.ts +0 -1
- package/dist/cli.js +6 -14
- package/dist/define.cjs +1 -1
- package/dist/define.cjs.map +1 -1
- package/dist/docker/cache-administration.cjs +8 -0
- package/dist/docker/cache-administration.cjs.map +1 -0
- package/dist/docker/cache-administration.d.cts +33 -0
- package/dist/docker/cache-administration.d.mts +33 -0
- package/dist/docker/cache-administration.d.ts +33 -0
- package/dist/docker/cache-administration.js +6 -0
- package/dist/docker/cache-administration.js.map +1 -0
- package/dist/docker/cache-live.cjs +27 -0
- package/dist/docker/cache-live.cjs.map +1 -0
- package/dist/docker/cache-live.d.cts +3 -0
- package/dist/docker/cache-live.d.mts +3 -0
- package/dist/docker/cache-live.d.ts +3 -0
- package/dist/docker/cache-live.js +6 -0
- package/dist/docker/cache-live.js.map +1 -0
- package/dist/docker/cli/contribution.cjs +223 -0
- package/dist/docker/cli/contribution.cjs.map +1 -0
- package/dist/docker/cli/contribution.d.cts +48 -0
- package/dist/docker/cli/contribution.d.mts +48 -0
- package/dist/docker/cli/contribution.d.ts +48 -0
- package/dist/docker/cli/contribution.js +8 -0
- package/dist/docker/cli/contribution.js.map +1 -0
- package/dist/eval/cli/contribution.cjs +62 -0
- package/dist/eval/cli/contribution.cjs.map +1 -0
- package/dist/eval/cli/contribution.d.cts +21 -0
- package/dist/eval/cli/contribution.d.mts +21 -0
- package/dist/eval/cli/contribution.d.ts +21 -0
- package/dist/eval/cli/contribution.js +8 -0
- package/dist/eval/cli/contribution.js.map +1 -0
- package/dist/eval/host/index.cjs +23 -0
- package/dist/eval/host/index.cjs.map +1 -0
- package/dist/eval/host/index.d.cts +27 -0
- package/dist/eval/host/index.d.mts +27 -0
- package/dist/eval/host/index.d.ts +27 -0
- package/dist/eval/host/index.js +8 -0
- package/dist/eval/host/index.js.map +1 -0
- package/dist/eval/host/index.mjs +8 -0
- package/dist/eval/host/index.mjs.map +1 -0
- package/dist/experiment/host/cli/contribution.cjs +835 -0
- package/dist/experiment/host/cli/contribution.cjs.map +1 -0
- package/dist/experiment/host/cli/contribution.d.cts +329 -0
- package/dist/experiment/host/cli/contribution.d.mts +329 -0
- package/dist/experiment/host/cli/contribution.d.ts +329 -0
- package/dist/experiment/host/cli/contribution.js +22 -0
- package/dist/experiment/host/cli/contribution.js.map +1 -0
- package/dist/experiment/host/cli/index.cjs +9 -0
- package/dist/experiment/host/cli/index.cjs.map +1 -0
- package/dist/experiment/host/cli/index.d.cts +2 -0
- package/dist/experiment/host/cli/index.d.mts +2 -0
- package/dist/experiment/host/cli/index.d.ts +2 -0
- package/dist/experiment/host/cli/index.js +10 -0
- package/dist/experiment/host/cli/index.js.map +1 -0
- package/dist/experiment/host/cli/terminal.cjs +15 -0
- package/dist/experiment/host/cli/terminal.cjs.map +1 -0
- package/dist/experiment/host/cli/terminal.d.cts +14 -0
- package/dist/experiment/host/cli/terminal.d.mts +14 -0
- package/dist/experiment/host/cli/terminal.d.ts +14 -0
- package/dist/experiment/host/cli/terminal.js +8 -0
- package/dist/experiment/host/cli/terminal.js.map +1 -0
- package/dist/experiment/host/index.cjs +35 -58
- package/dist/experiment/host/index.cjs.map +1 -1
- package/dist/experiment/host/index.d.cts +5 -79
- package/dist/experiment/host/index.d.mts +5 -79
- package/dist/experiment/host/index.d.ts +5 -79
- package/dist/experiment/host/index.js +4 -2
- package/dist/experiment/host/index.mjs +4 -2
- package/dist/experiment/host/operations.cjs +678 -0
- package/dist/experiment/host/operations.cjs.map +1 -0
- package/dist/experiment/host/operations.d.cts +19 -0
- package/dist/experiment/host/operations.d.mts +19 -0
- package/dist/experiment/host/operations.d.ts +19 -0
- package/dist/experiment/host/operations.js +24 -0
- package/dist/experiment/host/operations.js.map +1 -0
- package/dist/experiment/host/presentation.cjs +81 -0
- package/dist/experiment/host/presentation.cjs.map +1 -0
- package/dist/experiment/host/presentation.d.cts +9 -0
- package/dist/experiment/host/presentation.d.mts +9 -0
- package/dist/experiment/host/presentation.d.ts +9 -0
- package/dist/experiment/host/presentation.js +8 -0
- package/dist/experiment/host/presentation.js.map +1 -0
- package/dist/experiment/host/teardown.cjs +394 -0
- package/dist/experiment/host/teardown.cjs.map +1 -0
- package/dist/experiment/host/teardown.d.cts +5 -0
- package/dist/experiment/host/teardown.d.mts +5 -0
- package/dist/experiment/host/teardown.d.ts +5 -0
- package/dist/experiment/host/teardown.js +8 -0
- package/dist/experiment/host/teardown.js.map +1 -0
- package/dist/experiment/host/types.cjs +9 -0
- package/dist/experiment/host/types.cjs.map +1 -0
- package/dist/experiment/host/types.d.cts +423 -0
- package/dist/experiment/host/types.d.mts +423 -0
- package/dist/experiment/host/types.d.ts +423 -0
- package/dist/experiment/host/types.js +6 -0
- package/dist/experiment/host/types.js.map +1 -0
- package/dist/i18n/en.cjs +8 -50
- package/dist/i18n/en.cjs.map +1 -1
- package/dist/i18n/en.d.cts +2 -6
- package/dist/i18n/en.d.mts +2 -6
- package/dist/i18n/en.d.ts +2 -6
- package/dist/o11y/project.json +6 -0
- package/dist/project/cli/contribution.cjs +66 -0
- package/dist/project/cli/contribution.cjs.map +1 -0
- package/dist/project/cli/contribution.d.cts +17 -0
- package/dist/project/cli/contribution.d.mts +17 -0
- package/dist/project/cli/contribution.d.ts +17 -0
- package/dist/project/cli/contribution.js +8 -0
- package/dist/project/cli/contribution.js.map +1 -0
- package/dist/project/cli/index.cjs +7 -0
- package/dist/project/cli/index.cjs.map +1 -0
- package/dist/project/cli/index.d.cts +1 -0
- package/dist/project/cli/index.d.mts +1 -0
- package/dist/project/cli/index.d.ts +1 -0
- package/dist/project/cli/index.js +8 -0
- package/dist/project/cli/index.js.map +1 -0
- package/dist/project/host/index.cjs +11 -0
- package/dist/project/host/index.cjs.map +1 -0
- package/dist/project/host/index.d.cts +4 -0
- package/dist/project/host/index.d.mts +4 -0
- package/dist/project/host/index.d.ts +4 -0
- package/dist/project/host/index.js +14 -0
- package/dist/project/host/index.js.map +1 -0
- package/dist/project/host/index.mjs +14 -0
- package/dist/project/host/index.mjs.map +1 -0
- package/dist/project/host.cjs +59 -0
- package/dist/project/host.cjs.map +1 -0
- package/dist/project/host.d.cts +17 -0
- package/dist/project/host.d.mts +17 -0
- package/dist/project/host.d.ts +17 -0
- package/dist/project/host.js +6 -0
- package/dist/project/host.js.map +1 -0
- package/dist/project/index.cjs +11 -0
- package/dist/project/index.cjs.map +1 -0
- package/dist/project/index.d.cts +4 -0
- package/dist/project/index.d.mts +4 -0
- package/dist/project/index.d.ts +4 -0
- package/dist/project/index.js +14 -0
- package/dist/project/index.js.map +1 -0
- package/dist/project/node.cjs +91 -0
- package/dist/project/node.cjs.map +1 -0
- package/dist/project/node.d.cts +6 -0
- package/dist/project/node.d.mts +6 -0
- package/dist/project/node.d.ts +6 -0
- package/dist/project/node.js +12 -0
- package/dist/project/node.js.map +1 -0
- package/dist/project/services.cjs +17 -0
- package/dist/project/services.cjs.map +1 -0
- package/dist/project/services.d.cts +47 -0
- package/dist/project/services.d.mts +47 -0
- package/dist/project/services.d.ts +47 -0
- package/dist/project/services.js +12 -0
- package/dist/project/services.js.map +1 -0
- package/dist/project/templates.cjs +28 -0
- package/dist/project/templates.cjs.map +1 -0
- package/dist/project/templates.d.cts +4 -0
- package/dist/project/templates.d.mts +4 -0
- package/dist/project/templates.d.ts +4 -0
- package/dist/project/templates.js +12 -0
- package/dist/project/templates.js.map +1 -0
- package/dist/project.json +6 -0
- package/dist/record/family/catalog.d.cts +10 -10
- package/dist/record/family/catalog.d.mts +10 -10
- package/dist/record/family/catalog.d.ts +10 -10
- package/dist/record/family/file-changes.d.cts +8 -8
- package/dist/record/family/file-changes.d.mts +8 -8
- package/dist/record/family/file-changes.d.ts +8 -8
- package/dist/record/host/cli/contribution.cjs +206 -0
- package/dist/record/host/cli/contribution.cjs.map +1 -0
- package/dist/record/host/cli/contribution.d.cts +32 -0
- package/dist/record/host/cli/contribution.d.mts +32 -0
- package/dist/record/host/cli/contribution.d.ts +32 -0
- package/dist/record/host/cli/contribution.js +10 -0
- package/dist/record/host/cli/contribution.js.map +1 -0
- package/dist/record/host/cli/index.cjs +8 -0
- package/dist/record/host/cli/index.cjs.map +1 -0
- package/dist/record/host/cli/index.d.cts +1 -0
- package/dist/record/host/cli/index.d.mts +1 -0
- package/dist/record/host/cli/index.d.ts +1 -0
- package/dist/record/host/cli/index.js +10 -0
- package/dist/record/host/cli/index.js.map +1 -0
- package/dist/record/host/cli/presentation.cjs +122 -0
- package/dist/record/host/cli/presentation.cjs.map +1 -0
- package/dist/record/host/cli/presentation.d.cts +7 -0
- package/dist/record/host/cli/presentation.d.mts +7 -0
- package/dist/record/host/cli/presentation.d.ts +7 -0
- package/dist/record/host/cli/presentation.js +12 -0
- package/dist/record/host/cli/presentation.js.map +1 -0
- package/dist/record/host/index.cjs.map +1 -1
- package/dist/record/host/index.d.cts +1 -1
- package/dist/record/host/index.d.mts +1 -1
- package/dist/record/host/index.d.ts +1 -1
- package/dist/record/host/runtime.cjs +184 -1
- package/dist/record/host/runtime.cjs.map +1 -1
- package/dist/record/host/types.cjs.map +1 -1
- package/dist/record/host/types.d.cts +120 -0
- package/dist/record/host/types.d.mts +120 -0
- package/dist/record/host/types.d.ts +120 -0
- package/dist/record/project.json +6 -0
- package/dist/report/assets/styles.css +80 -0
- package/dist/report/cli/contribution.cjs +325 -0
- package/dist/report/cli/contribution.cjs.map +1 -0
- package/dist/report/cli/contribution.d.cts +143 -0
- package/dist/report/cli/contribution.d.mts +143 -0
- package/dist/report/cli/contribution.d.ts +143 -0
- package/dist/report/cli/contribution.js +12 -0
- package/dist/report/cli/contribution.js.map +1 -0
- package/dist/report/client-dist/app.js +9 -9
- package/dist/report/components/attempt-detail/content.cjs +1 -1
- package/dist/report/components/attempt-detail/content.cjs.map +1 -1
- package/dist/report/components/entity-lists/compute.cjs +5 -0
- package/dist/report/components/entity-lists/compute.cjs.map +1 -1
- package/dist/report/components/entity-lists/compute.d.cts +2 -0
- package/dist/report/components/entity-lists/compute.d.mts +2 -0
- package/dist/report/components/entity-lists/compute.d.ts +2 -0
- package/dist/report/components/entity-lists/content.cjs +35 -12
- package/dist/report/components/entity-lists/content.cjs.map +1 -1
- package/dist/report/components/entity-lists/index.cjs +0 -3
- package/dist/report/components/entity-lists/index.cjs.map +1 -1
- package/dist/report/components/summaries/index.cjs +2 -4
- package/dist/report/components/summaries/index.cjs.map +1 -1
- package/dist/report/definition/cell.cjs +7 -2
- package/dist/report/definition/cell.cjs.map +1 -1
- package/dist/report/definition/cell.d.cts +2 -0
- package/dist/report/definition/cell.d.mts +2 -0
- package/dist/report/definition/cell.d.ts +2 -0
- package/dist/report/definition/primitives/assertion-evidence.cjs +190 -4
- package/dist/report/definition/primitives/assertion-evidence.cjs.map +1 -1
- package/dist/report/definition/primitives/assertion-evidence.d.cts +4 -0
- package/dist/report/definition/primitives/assertion-evidence.d.mts +4 -0
- package/dist/report/definition/primitives/assertion-evidence.d.ts +4 -0
- package/dist/report/execution/machine.cjs +2 -3
- package/dist/report/execution/machine.cjs.map +1 -1
- package/dist/report/execution/machine.d.cts +11 -8
- package/dist/report/execution/machine.d.mts +11 -8
- package/dist/report/execution/machine.d.ts +11 -8
- package/dist/report/host/from-record.cjs +13 -8
- package/dist/report/host/from-record.cjs.map +1 -1
- package/dist/report/host/index.cjs +5 -1
- package/dist/report/host/index.cjs.map +1 -1
- package/dist/report/host/index.d.cts +1 -0
- package/dist/report/host/index.d.mts +1 -0
- package/dist/report/host/index.d.ts +1 -0
- package/dist/report/host/index.js +8 -2
- package/dist/report/host/index.mjs +8 -2
- package/dist/report/host/machine.cjs +23 -22
- package/dist/report/host/machine.cjs.map +1 -1
- package/dist/report/host/machine.d.cts +1 -1
- package/dist/report/host/machine.d.mts +1 -1
- package/dist/report/host/machine.d.ts +1 -1
- package/dist/report/host/node/loader.cjs +4 -2
- package/dist/report/host/node/loader.cjs.map +1 -1
- package/dist/report/host/node/loader.d.cts +3 -1
- package/dist/report/host/node/loader.d.mts +3 -1
- package/dist/report/host/node/loader.d.ts +3 -1
- package/dist/report/host/node.cjs +44 -9
- package/dist/report/host/node.cjs.map +1 -1
- package/dist/report/host/node.d.cts +13 -3
- package/dist/report/host/node.d.mts +13 -3
- package/dist/report/host/node.d.ts +13 -3
- package/dist/report/host/node.js +44 -32
- package/dist/report/host/operations.cjs +14 -0
- package/dist/report/host/operations.cjs.map +1 -0
- package/dist/report/host/operations.d.cts +39 -0
- package/dist/report/host/operations.d.mts +39 -0
- package/dist/report/host/operations.d.ts +39 -0
- package/dist/report/host/operations.js +10 -0
- package/dist/report/host/operations.js.map +1 -0
- package/dist/report/model/chart/plot.cjs +1 -1
- package/dist/report/model/chart/plot.cjs.map +1 -1
- package/dist/report/model/locale.cjs +4 -0
- package/dist/report/model/locale.cjs.map +1 -1
- package/dist/report/model/locale.d.cts +3 -1
- package/dist/report/model/locale.d.mts +3 -1
- package/dist/report/model/locale.d.ts +3 -1
- package/dist/report/react/styles.css +80 -0
- package/dist/runner/build-preparation.cjs +5 -5
- package/dist/runner/build-preparation.cjs.map +1 -1
- package/dist/runner/build-preparation.d.cts +2 -3
- package/dist/runner/build-preparation.d.mts +2 -3
- package/dist/runner/build-preparation.d.ts +2 -3
- package/dist/runner/feedback/coordinator.cjs +18 -15
- package/dist/runner/feedback/coordinator.cjs.map +1 -1
- package/dist/runner/feedback/coordinator.d.cts +6 -0
- package/dist/runner/feedback/coordinator.d.mts +6 -0
- package/dist/runner/feedback/coordinator.d.ts +6 -0
- package/dist/runner/ledger.cjs +3 -13
- package/dist/runner/ledger.cjs.map +1 -1
- package/dist/runner/ledger.d.cts +1 -3
- package/dist/runner/ledger.d.mts +1 -3
- package/dist/runner/ledger.d.ts +1 -3
- package/dist/runner/run.cjs +63 -18
- package/dist/runner/run.cjs.map +1 -1
- package/dist/runner/session.cjs +10 -0
- package/dist/runner/session.cjs.map +1 -1
- package/dist/runner/session.d.cts +25 -0
- package/dist/runner/session.d.mts +25 -0
- package/dist/runner/session.d.ts +25 -0
- package/dist/runner/types.cjs.map +1 -1
- package/dist/runner/types.d.cts +1 -2
- package/dist/runner/types.d.mts +1 -2
- package/dist/runner/types.d.ts +1 -2
- package/dist/sandbox/build-coordinator.cjs +38 -19
- package/dist/sandbox/build-coordinator.cjs.map +1 -1
- package/dist/sandbox/build-coordinator.d.cts +47 -7
- package/dist/sandbox/build-coordinator.d.mts +47 -7
- package/dist/sandbox/build-coordinator.d.ts +47 -7
- package/dist/sandbox/build-coordinator.js +8 -4
- package/dist/sandbox/cli/contribution.cjs +128 -0
- package/dist/sandbox/cli/contribution.cjs.map +1 -0
- package/dist/sandbox/cli/contribution.d.cts +71 -0
- package/dist/sandbox/cli/contribution.d.mts +71 -0
- package/dist/sandbox/cli/contribution.d.ts +71 -0
- package/dist/sandbox/cli/contribution.js +8 -0
- package/dist/sandbox/cli/contribution.js.map +1 -0
- package/dist/sandbox/cli-commands.cjs +14 -21
- package/dist/sandbox/cli-commands.cjs.map +1 -1
- package/dist/sandbox/cli-commands.d.cts +12 -8
- package/dist/sandbox/cli-commands.d.mts +12 -8
- package/dist/sandbox/cli-commands.d.ts +12 -8
- package/dist/sandbox/compose.cjs +22 -2
- package/dist/sandbox/compose.cjs.map +1 -1
- package/dist/sandbox/compose.d.cts +1 -1
- package/dist/sandbox/compose.d.mts +1 -1
- package/dist/sandbox/compose.d.ts +1 -1
- package/dist/sandbox/docker-profile/cli.cjs +13 -9
- package/dist/sandbox/docker-profile/cli.cjs.map +1 -1
- package/dist/sandbox/docker-profile/cli.d.cts +2 -0
- package/dist/sandbox/docker-profile/cli.d.mts +2 -0
- package/dist/sandbox/docker-profile/cli.d.ts +2 -0
- package/dist/sandbox/docker-profile/runtime.cjs +68 -7
- package/dist/sandbox/docker-profile/runtime.cjs.map +1 -1
- package/dist/sandbox/docker-profile/runtime.d.cts +19 -1
- package/dist/sandbox/docker-profile/runtime.d.mts +19 -1
- package/dist/sandbox/docker-profile/runtime.d.ts +19 -1
- package/dist/sandbox/docker-profile/runtime.js +10 -8
- package/dist/sandbox/docker-profile/schema.cjs +68 -19
- package/dist/sandbox/docker-profile/schema.cjs.map +1 -1
- package/dist/sandbox/docker-profile/schema.d.cts +23 -9
- package/dist/sandbox/docker-profile/schema.d.mts +23 -9
- package/dist/sandbox/docker-profile/schema.d.ts +23 -9
- package/dist/sandbox/docker-task-build-cache.cjs +532 -0
- package/dist/sandbox/docker-task-build-cache.cjs.map +1 -0
- package/dist/sandbox/docker-task-build-cache.d.cts +68 -0
- package/dist/sandbox/docker-task-build-cache.d.mts +68 -0
- package/dist/sandbox/docker-task-build-cache.d.ts +68 -0
- package/dist/sandbox/docker-task-build-cache.js +20 -0
- package/dist/sandbox/docker-task-build-cache.js.map +1 -0
- package/dist/sandbox/docker.cjs +50 -0
- package/dist/sandbox/docker.cjs.map +1 -1
- package/dist/sandbox/docker.d.cts +15 -0
- package/dist/sandbox/docker.d.mts +15 -0
- package/dist/sandbox/docker.d.ts +15 -0
- package/dist/sandbox/dockerfile-build.cjs +55 -5
- package/dist/sandbox/dockerfile-build.cjs.map +1 -1
- package/dist/sandbox/dockerfile-build.d.cts +2 -2
- package/dist/sandbox/dockerfile-build.d.mts +2 -2
- package/dist/sandbox/dockerfile-build.d.ts +2 -2
- package/dist/sandbox/index.cjs +5 -3
- package/dist/sandbox/index.cjs.map +1 -1
- package/dist/sandbox/index.d.cts +4 -3
- package/dist/sandbox/index.d.mts +4 -3
- package/dist/sandbox/index.d.ts +4 -3
- package/dist/sandbox/index.js +16 -14
- package/dist/sandbox/index.mjs +16 -14
- package/dist/sandbox/keep.cjs +1 -3
- package/dist/sandbox/keep.cjs.map +1 -1
- package/dist/sandbox/layer.cjs +70 -79
- package/dist/sandbox/layer.cjs.map +1 -1
- package/dist/sandbox/layer.d.cts +6 -12
- package/dist/sandbox/layer.d.mts +6 -12
- package/dist/sandbox/layer.d.ts +6 -12
- package/dist/sandbox/layer.js +16 -18
- package/dist/sandbox/ledger-paths.cjs +4 -18
- package/dist/sandbox/ledger-paths.cjs.map +1 -1
- package/dist/sandbox/ledger-paths.d.cts +3 -13
- package/dist/sandbox/ledger-paths.d.mts +3 -13
- package/dist/sandbox/ledger-paths.d.ts +3 -13
- package/dist/sandbox/ledger-paths.js +4 -8
- package/dist/sandbox/registry.cjs +1 -1
- package/dist/sandbox/registry.cjs.map +1 -1
- package/dist/sandbox/runtime.cjs +27 -37
- package/dist/sandbox/runtime.cjs.map +1 -1
- package/dist/sandbox/runtime.d.cts +1 -2
- package/dist/sandbox/runtime.d.mts +1 -2
- package/dist/sandbox/runtime.d.ts +1 -2
- package/dist/sandbox/runtime.js +6 -8
- package/dist/sandbox/types.cjs.map +1 -1
- package/dist/sandbox/types.d.cts +3 -3
- package/dist/sandbox/types.d.mts +3 -3
- package/dist/sandbox/types.d.ts +3 -3
- package/dist/sources/project.json +6 -0
- package/dist/vendor/remark/remark-gfm.cjs +72 -72
- package/dist/vendor/remark/remark-gfm.cjs.map +1 -1
- package/dist/vendor/remark/remark-parse.cjs +54 -54
- package/dist/vendor/remark/remark-parse.cjs.map +1 -1
- package/dist/vendor/remark/remark.cjs +125 -125
- package/dist/vendor/remark/remark.cjs.map +2 -2
- package/docs-site/zh/README.md +1 -1
- package/docs-site/zh/explanation/assert.mdx +4 -0
- package/docs-site/zh/explanation/judge.mdx +40 -9
- package/docs-site/zh/reference/cli.mdx +67 -43
- package/docs-site/zh/reference/define-agent.mdx +2 -2
- package/docs-site/zh/reference/report-components.mdx +4 -3
- package/docs-site/zh/troubleshooting/debug-sandbox.mdx +6 -0
- package/docs-site/zh/troubleshooting/debugging.mdx +28 -1
- package/docs-site/zh/tutorials/agent-feedback-loop.mdx +4 -2
- package/docs-site/zh/tutorials/concurrency.mdx +2 -2
- package/docs-site/zh/tutorials/custom-reports.mdx +175 -9
- package/docs-site/zh/tutorials/docker-in-docker.mdx +52 -7
- package/docs-site/zh/tutorials/eval-groups.mdx +1 -2
- package/docs-site/zh/tutorials/evaluation-kinds.mdx +39 -6
- package/docs-site/zh/tutorials/nixos-managed-dind.mdx +14 -5
- package/docs-site/zh/tutorials/sandbox-providers.mdx +1 -28
- package/docs-site/zh/tutorials/sandbox-reuse.mdx +1 -1
- package/docs-site/zh/tutorials/viewing-results.mdx +2 -0
- package/package.json +24 -19
- package/README.md +0 -176
- package/README.zh.md +0 -176
- package/dist/cli/record.cjs +0 -246
- package/dist/cli/record.cjs.map +0 -1
- package/dist/cli/record.d.cts +0 -40
- package/dist/cli/record.d.mts +0 -40
- package/dist/cli/record.d.ts +0 -40
- package/dist/cli/record.js +0 -10
- package/dist/cli/record.js.map +0 -1
- package/dist/sandbox/local.cjs +0 -361
- package/dist/sandbox/local.cjs.map +0 -1
- package/dist/sandbox/local.d.cts +0 -80
- package/dist/sandbox/local.d.mts +0 -80
- package/dist/sandbox/local.d.ts +0 -80
- package/dist/sandbox/local.js +0 -6
- package/dist/sandbox/local.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-commands.js","sourceRoot":"","sources":["cli-commands.ts"],"names":[],"mappings":"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","sourcesContent":["// `niceeval sandbox` 命令组:查看与销毁留存的沙箱(见 docs/feature/sandbox/cli.md)。\n// 不读 niceeval.config.ts、不发现 eval,只操作留存注册表(.niceeval/sandboxes/ 逐条目文件)\n// 与内置 provider 的 detached 能力;provider 名的路由发生在 CLI / 注册表边界(sandbox/ 域内)。\nimport { hostname } from \"node:os\";\nimport { resolve } from \"node:path\";\nimport { Cause, Data, Effect } from \"effect\";\nimport { destroyDetached, detachedCapabilityGap, execInDetached, inspectDetached, openInteractiveShell, suspendDetached, wakeDetached, } from \"./keep.ts\";\nimport { acquireKeptLeaseEffect, findNiceevalRootEffect, keptEntryId, readKeptEntriesEffect, readKeptLeaseEffect, releaseKeptLeaseEffect, removeKeptEntryEffect, updateKeptEntryEffect, KeptSandboxRegistryError, type KeptSandboxEntry, } from \"./keep-registry.ts\";\nimport { dockerOrphanCount, listOrphanCandidates, pruneOrphans, type OrphanCandidate } from \"./orphans.ts\";\nimport { panelCapabilityOf, renderPanel, type PanelMode, type PanelRow } from \"../report/model/panel.ts\";\nimport { computeExpiresAt } from \"./keep.ts\";\nexport interface SandboxCommandFlags {\n all?: boolean;\n window?: string;\n path?: string;\n leaveRunning?: boolean;\n /** 仓库外执行时显式指定结果根(.niceeval 或其父目录)。 */\n run?: string;\n /** `sandbox list` 专用:核对强杀路径留下的无主实例(见「孤儿核对」)。 */\n orphans?: boolean;\n /** `sandbox prune` 专用:连 unverified 一起销毁。 */\n force?: boolean;\n}\ninterface Io {\n out(text: string): void;\n err(text: string): void;\n /** stdout 的 TTY 探测(面板 `mode` 的传输能力信号);省略时按 `process.stdout` 探测——\n * 测试注入固定值,不依赖真实终端设备。 */\n isTTY?: boolean;\n /** stdout 的显示列数;省略时按 `process.stdout.columns` 探测,取不到时兜底 80。 */\n columns?: number;\n}\nconst LEASE_TTL_MS = 60 * 60 * 1000;\n/** detached provider / command 边界的可恢复失败;注册表 I/O 错误保留自己的领域类型。 */\nexport class SandboxCommandOperationError extends Data.TaggedError(\"SandboxCommandOperationError\")<{\n readonly operation: string;\n readonly cause: unknown;\n}> {\n}\ntype SandboxCommandFailure = KeptSandboxRegistryError | SandboxCommandOperationError;\nexport type SandboxCommandEffect<A> = Effect.Effect<A, SandboxCommandFailure>;\n/** 所有 provider Promise 都只在此处进入 Effect;信号由 runtime 接管,interruption 不会变成普通失败。 */\nfunction providerEffect<A>(operation: string, run: (signal: AbortSignal) => Promise<A>): SandboxCommandEffect<A> {\n return Effect.tryPromise({\n try: run,\n catch: (cause) => new SandboxCommandOperationError({ operation, cause }),\n });\n}\nfunction errorText(error: SandboxCommandFailure): string {\n const cause = error.cause;\n return cause instanceof Error ? cause.message : String(cause);\n}\n/**\n * Effect 的标准 finalizer 不能走 typed error channel。本命令域需要把 lease / suspend 的失败\n * 和 body 的失败一起保留,因此在 uninterruptible cleanup 段显式拼接 Cause;body 仍可被中断。\n */\nfunction ensuringWithTypedFinalizer<A, E, R, E2>(body: Effect.Effect<A, E, R>, finalizer: Effect.Effect<void, E2>) {\n return Effect.uninterruptibleMask((restore) => restore(body).pipe(Effect.matchCauseEffect({\n onFailure: (bodyCause) => finalizer.pipe(Effect.matchCauseEffect({\n onFailure: (finalizerCause) => Effect.failCause(Cause.sequential(bodyCause, finalizerCause)),\n onSuccess: () => Effect.failCause(bodyCause),\n })),\n onSuccess: (value) => finalizer.pipe(Effect.as(value)),\n })));\n}\n/**\n * 刷新 provider 的留存期限。没有期限的 provider 必须省略字段,而不是把\n * `expiresAt: undefined` 带进逐条目 JSON;后者既不是 JSON 值,也会被共享持久层拒绝。\n */\nfunction refreshedEntryState(entry: KeptSandboxEntry, state: KeptSandboxEntry[\"state\"], now: string): KeptSandboxEntry {\n const { expiresAt: _previousExpiresAt, ...withoutExpiresAt } = entry;\n const expiresAt = computeExpiresAt(entry.provider, now);\n return expiresAt === undefined\n ? { ...withoutExpiresAt, state }\n : { ...withoutExpiresAt, state, expiresAt };\n}\n/** `list`/`history` 一次性面板的传输能力:是 TTY 且没有要求朴素输出时才画框\n * (docs/feature/sandbox/cli.md「输出体裁」)——`sandbox` 命令组只在启动时探测一次,\n * 不像 `exp` 的 live 面板那样需要随 resize 重新判断。 */\nfunction panelCapabilityForIo(io: Io): {\n mode: PanelMode;\n width: number;\n} {\n return panelCapabilityOf({\n isTTY: io.isTTY ?? process.stdout.isTTY,\n noColor: process.env.NO_COLOR,\n width: io.columns ?? process.stdout.columns,\n });\n}\n/** Effect 主入口:CLI 可将它接进自己的唯一 runtime,不启动嵌套 Promise runtime。 */\nexport function runSandboxCommandEffect(cwd: string, positionals: string[], flags: SandboxCommandFlags, io: Io = { out: (s) => process.stdout.write(s), err: (s) => process.stderr.write(s) }): SandboxCommandEffect<number> {\n return Effect.gen(function* () {\n const sub = positionals[0];\n const root = yield* resolveRegistryRootEffect(cwd, flags.run);\n if (root === undefined) {\n io.err(`No .niceeval directory found from ${cwd} upward. Run this inside the project, or pass --record <record-root> to point at it.\\n`);\n return 1;\n }\n switch (sub) {\n case \"list\":\n return yield* (flags.orphans\n ? listOrphansCommandEffect(root, io)\n : listCommandEffect(root, io, panelCapabilityForIo(io)));\n case \"stop\":\n return yield* stopCommandEffect(root, positionals.slice(1), flags, io);\n case \"enter\":\n return yield* enterCommandEffect(root, positionals.slice(1), flags, io);\n case \"history\":\n return yield* historyCommandEffect(root, positionals.slice(1), flags, io, panelCapabilityForIo(io));\n case \"diff\":\n return yield* diffCommandEffect(root, positionals.slice(1), flags, io);\n case \"prune\":\n return yield* pruneCommandEffect(root, flags, io);\n default:\n io.err(`usage: niceeval sandbox <list|enter|history|diff|stop|prune> …\\n`);\n return 1;\n }\n });\n}\n/** 留存注册表条目的 sandboxId 集合——孤儿核对与 prune 都要排除它们(被管理的现场不是孤儿)。 */\nfunction keptSandboxIdsEffect(root: string): SandboxCommandEffect<Set<string>> {\n return readKeptEntriesEffect(root).pipe(Effect.map(({ entries }) => new Set(entries.map(({ entry }) => entry.sandboxId))));\n}\nfunction listOrphansCommandEffect(root: string, io: Io): SandboxCommandEffect<number> {\n return keptSandboxIdsEffect(root).pipe(Effect.flatMap((keptIds) => providerEffect(\"list orphan sandboxes\", () => listOrphanCandidates(keptIds))), Effect.map((candidates) => {\n if (candidates.length === 0) {\n io.out(\"No orphan sandboxes.\\n\");\n return 0;\n }\n io.out(`ID PROVIDER OWNER STARTED STATE\\n`);\n for (const c of candidates) {\n io.out(`${c.sandboxId.padEnd(10)}${c.provider.padEnd(10)}${ownerLabel(c).padEnd(19)}${formatWhen(c.identity.startedAt).padEnd(19)}${c.state}\\n`);\n const group = groupLabel(c);\n if (group)\n io.out(` ${group}\\n`);\n }\n io.out(`Remove orphans with: niceeval sandbox prune\\n`);\n return 0;\n }));\n}\nfunction pruneCommandEffect(root: string, flags: SandboxCommandFlags, io: Io): SandboxCommandEffect<number> {\n return keptSandboxIdsEffect(root).pipe(Effect.flatMap((keptIds) => providerEffect(\"prune orphan sandboxes\", () => pruneOrphans(keptIds, flags.force === true))), Effect.map((outcome) => {\n if (outcome.pruned.length === 0 && outcome.failed.length === 0) {\n io.out(\"No orphan sandboxes.\\n\");\n }\n else {\n if (outcome.pruned.length > 0) {\n io.out(`pruned ${outcome.pruned.length} orphan sandbox${outcome.pruned.length === 1 ? \"\" : \"es\"}\\n`);\n for (const c of outcome.pruned) {\n const group = groupLabel(c);\n io.out(` ${c.sandboxId} ${c.provider} ${ownerLabel(c)} · started ${formatWhen(c.identity.startedAt)}${group ? ` · ${group}` : \"\"}\\n`);\n }\n }\n for (const f of outcome.failed) {\n io.err(`failed to prune ${f.candidate.sandboxId} (${f.candidate.provider}): ${f.message}\\n`);\n }\n }\n if (outcome.unverifiedRemaining > 0) {\n io.out(`${outcome.unverifiedRemaining} unverified left — inspect: niceeval sandbox list --orphans · force: niceeval sandbox prune --force\\n`);\n }\n return outcome.failed.length > 0 ? 1 : 0;\n }));\n}\n/** Compose 资源组的组成一行带过:伴随容器与网络跟随主实例整组出现,不逐容器单列。 */\nfunction groupLabel(c: OrphanCandidate): string | undefined {\n const g = c.resources;\n if (!g)\n return undefined;\n const containers = `${g.containerIds.length} container${g.containerIds.length === 1 ? \"\" : \"s\"}`;\n const networks = `${g.networkIds.length} network${g.networkIds.length === 1 ? \"\" : \"s\"}`;\n return `compose ${g.projectName} · ${containers} · ${networks}`;\n}\n/** `pid <pid>@<host>`,同宿主确认死亡时追加 ` dead`——unverified(异宿主)不冒充已核实。 */\nfunction ownerLabel(c: OrphanCandidate): string {\n return `pid ${c.identity.pid}@${c.identity.host}${c.state === \"orphan\" ? \" dead\" : \"\"}`;\n}\n/** 留存注册表里还有条目时,`niceeval exp` 启动打的一行提醒(不阻塞、不清理)。 */\nexport function orphanReminderEffect(cwd: string): SandboxCommandEffect<string | undefined> {\n return Effect.gen(function* () {\n const root = yield* findNiceevalRootEffect(cwd);\n const keptIds = root === undefined ? new Set<string>() : yield* keptSandboxIdsEffect(root);\n const count = yield* providerEffect(\"count orphan sandboxes\", () => dockerOrphanCount(keptIds));\n return count === 0\n ? undefined\n : `${count} orphan docker sandbox${count === 1 ? \"\" : \"es\"} from a killed run — niceeval sandbox prune\\n`;\n });\n}\nfunction resolveRegistryRootEffect(cwd: string, runFlag: string | undefined): SandboxCommandEffect<string | undefined> {\n if (runFlag !== undefined) {\n const base = resolve(cwd, runFlag);\n // --record 可以指 .niceeval 本身或它的父目录。\n return Effect.succeed(base.endsWith(\".niceeval\") ? base : `${base}/.niceeval`);\n }\n return findNiceevalRootEffect(cwd);\n}\n/** 留存注册表里还有条目时,`niceeval exp` 启动打的一行提醒(不阻塞、不清理)。 */\nexport function keptSandboxReminderEffect(cwd: string): SandboxCommandEffect<string | undefined> {\n return findNiceevalRootEffect(cwd).pipe(Effect.flatMap((root) => root === undefined\n ? Effect.succeed(undefined)\n : readKeptEntriesEffect(root).pipe(Effect.map(({ entries }) => entries.length === 0\n ? undefined\n : `${entries.length} kept sandbox${entries.length === 1 ? \"\" : \"es\"} from earlier runs — niceeval sandbox list\\n`))));\n}\n/** 每个留存条目在 `SANDBOXES` 面板里占两行:身份行(ID/PROVIDER/STATE/FROM)紧跟一条\n * 缩进到 ID 列宽的提示行(下一步动作各不相同,批量 stop --all 不能当默认下一步,所以下边框\n * 不嵌命令——见 docs/feature/sandbox/cli.md「sandbox list」)。 */\nconst LIST_ID_COL = 10;\nconst LIST_PROVIDER_COL = 10;\nconst LIST_STATE_COL = 10;\nfunction listCommandEffect(root: string, io: Io, panel: {\n mode: PanelMode;\n width: number;\n}): SandboxCommandEffect<number> {\n return Effect.gen(function* () {\n const { entries } = yield* readKeptEntriesEffect(root);\n if (entries.length === 0) {\n io.out(\"No kept sandboxes.\\n\");\n return 0;\n }\n const rows: PanelRow[] = [\n { kind: \"line\", text: `${\"ID\".padEnd(LIST_ID_COL)}${\"PROVIDER\".padEnd(LIST_PROVIDER_COL)}${\"STATE\".padEnd(LIST_STATE_COL)}FROM` },\n ];\n for (const { id, entry } of entries) {\n // STATE 是当下核对的现场状态,不是登记时的旧值。\n const state = yield* providerEffect(\"inspect kept sandbox\", () => inspectDetached(entry.provider, entry.sandboxId));\n // unknown 是探测失败,不是可持久化的现场事实;保留上次已知状态供下次核对。\n if (state !== \"unknown\" && state !== entry.state) {\n yield* updateKeptEntryEffect(root, id, { state }).pipe(Effect.catchAll(() => Effect.succeed(false)));\n }\n const from = `${entry.evalId} #${entry.attempt} · ${entry.verdict} · ${entry.locator}`;\n rows.push({\n kind: \"line\",\n text: `${id.padEnd(LIST_ID_COL)}${entry.provider.padEnd(LIST_PROVIDER_COL)}${state.padEnd(LIST_STATE_COL)}${from}`,\n });\n const indent = \" \".repeat(LIST_ID_COL);\n if (state === \"expired\") {\n const when = entry.expiresAt !== undefined ? `expired ${formatWhen(entry.expiresAt)} — ` : \"\";\n rows.push({ kind: \"line\", text: `${indent}${when}remove: niceeval sandbox stop ${id}` });\n }\n else if (state === \"unknown\") {\n rows.push({ kind: \"line\", text: `${indent}status unknown — check credentials or retry later` });\n }\n else {\n rows.push({ kind: \"line\", text: `${indent}${formatWhen(entry.keptAt)} · enter: niceeval sandbox enter ${id}` });\n }\n }\n const lines = renderPanel({\n title: \"SANDBOXES\",\n meta: `${entries.length} kept`,\n rows,\n width: panel.width,\n mode: panel.mode,\n });\n io.out(`${lines.join(\"\\n\")}\\n`);\n return 0;\n });\n}\n/** id 接受 entry id / 实例 id 的唯一前缀;有歧义或不在注册表里时报错并列出候选。 */\nfunction resolveEntriesEffect(root: string, ids: string[], io: Io): SandboxCommandEffect<{\n id: string;\n entry: KeptSandboxEntry;\n}[] | undefined> {\n return readKeptEntriesEffect(root).pipe(Effect.map(({ entries }) => {\n const resolved: {\n id: string;\n entry: KeptSandboxEntry;\n }[] = [];\n for (const raw of ids) {\n const hits = entries.filter(({ id, entry }) => id === raw || id.startsWith(raw) || entry.sandboxId === raw || entry.sandboxId.startsWith(raw));\n if (hits.length === 1) {\n resolved.push(hits[0]!);\n continue;\n }\n if (hits.length === 0) {\n io.err(`\"${raw}\" is not in the kept-sandbox registry. Known: ${entries.map((e) => e.id).join(\", \") || \"(none)\"}\\n`);\n }\n else {\n io.err(`\"${raw}\" is ambiguous; candidates: ${hits.map((h) => `${h.id} (${h.entry.sandboxId})`).join(\", \")}\\n`);\n }\n return undefined;\n }\n return resolved;\n }));\n}\nfunction leaseHolder(): string {\n return `${process.pid}@${hostname()}`;\n}\nfunction stopCommandEffect(root: string, ids: string[], flags: SandboxCommandFlags, io: Io): SandboxCommandEffect<number> {\n return Effect.gen(function* () {\n let targets: {\n id: string;\n entry: KeptSandboxEntry;\n }[];\n if (flags.all) {\n targets = (yield* readKeptEntriesEffect(root)).entries;\n }\n else if (ids.length === 0) {\n io.err(\"specify sandbox ids or --all\\n\");\n return 1;\n }\n else {\n const resolved = yield* resolveEntriesEffect(root, ids, io);\n if (!resolved)\n return 1;\n targets = resolved;\n }\n let code = 0;\n for (const { id, entry } of targets) {\n const lease = yield* readKeptLeaseEffect(root, id);\n if (lease && Date.now() - Date.parse(lease.acquiredAt) < lease.ttlMs) {\n io.err(`${entry.sandboxId} (${entry.provider}) is in use by ${lease.holder} since ${lease.acquiredAt}; not stopping.\\n`);\n code = 1;\n continue;\n }\n yield* providerEffect(\"destroy kept sandbox\", () => destroyDetached(entry.provider, entry.sandboxId)).pipe(Effect.flatMap((outcome) => removeKeptEntryEffect(root, id).pipe(Effect.tap(() => Effect.sync(() => {\n if (outcome === \"stopped\")\n io.out(`stopped ${entry.sandboxId} (${entry.provider})\\n`);\n else\n io.out(`${entry.sandboxId} (${entry.provider}) already gone — removed from registry\\n`);\n })))), Effect.catchAll((error) => Effect.sync(() => {\n // 只有实例成功销毁或确认已不存在时才移除登记项;其它错误保留条目并退出 1,\n // 不能把仍活着的资源从管理面隐藏掉。\n io.err(`failed to stop ${entry.sandboxId} (${entry.provider}): ${errorText(error)}\\n`);\n code = 1;\n })));\n }\n return code;\n });\n}\nfunction withLeaseEffect<T>(root: string, id: string, entry: KeptSandboxEntry, op: string, io: Io, fn: () => SandboxCommandEffect<T>): SandboxCommandEffect<T | undefined> {\n const lease = { holder: leaseHolder(), op, acquiredAt: new Date().toISOString(), ttlMs: LEASE_TTL_MS };\n return acquireKeptLeaseEffect(root, id, lease).pipe(Effect.flatMap((acquired) => {\n if (!acquired.acquired) {\n io.err(`${entry.sandboxId} is in use by ${acquired.lease.holder} since ${acquired.lease.acquiredAt}\\n`);\n return Effect.succeed(undefined);\n }\n return ensuringWithTypedFinalizer(fn(), releaseKeptLeaseEffect(root, id, acquired.token));\n }));\n}\nfunction enterCommandEffect(root: string, ids: string[], flags: SandboxCommandFlags, io: Io): SandboxCommandEffect<number> {\n return resolveEntriesEffect(root, ids.slice(0, 1), io).pipe(Effect.flatMap((resolved) => {\n if (!resolved || resolved.length === 0) {\n if (ids.length === 0)\n io.err(\"usage: niceeval sandbox enter <id> [--leave-running]\\n\");\n return Effect.succeed(1);\n }\n const { id, entry } = resolved[0]!;\n const gap = detachedCapabilityGap(entry.provider);\n if (gap) {\n io.err(`${entry.sandboxId}: ${gap}\\n`);\n return Effect.succeed(1);\n }\n return providerEffect(\"inspect kept sandbox\", () => inspectDetached(entry.provider, entry.sandboxId)).pipe(Effect.flatMap((state) => {\n if (state === \"expired\") {\n io.err(`${entry.sandboxId} (${entry.provider}) is gone — the instance no longer exists. Clean up with: niceeval sandbox stop ${id}\\n`);\n return Effect.succeed(1);\n }\n if (state === \"unknown\") {\n io.err(`${entry.sandboxId} (${entry.provider}) could not be inspected — check credentials or retry later.\\n`);\n return Effect.succeed(1);\n }\n return withLeaseEffect(root, id, entry, \"enter\", io, () => Effect.gen(function* () {\n yield* providerEffect(\"wake kept sandbox\", () => wakeDetached(entry.provider, entry.sandboxId));\n yield* updateKeptEntryEffect(root, id, (current) => refreshedEntryState(current, \"alive\", new Date().toISOString()));\n const code = yield* providerEffect(\"open kept sandbox shell\", () => openInteractiveShell(entry.provider, entry.sandboxId, entry.workdir)).pipe(Effect.catchAll((error) => Effect.sync(() => {\n // 原生命令本身起不来(如未装对应 CLI):现场保持 alive,提示改用注册表里的原生命令直连。\n io.err(`failed to open an interactive shell for ${entry.sandboxId} (${entry.provider}): ${errorText(error)}${entry.enter ? `\\nconnect directly instead: ${entry.enter}` : \"\"}\\n`);\n return 1;\n })));\n if (flags.leaveRunning) {\n yield* updateKeptEntryEffect(root, id, { state: \"alive\" });\n io.out(`left running: ${entry.sandboxId} (re-suspend with another enter, or destroy with niceeval sandbox stop ${id})\\n`);\n return code;\n }\n // shell 退出(含 Ctrl+C)后自动送回休眠——「休眠不烧资源」不因进去看过一眼失效。\n yield* providerEffect(\"re-suspend kept sandbox\", () => suspendDetached(entry.provider, entry.sandboxId)).pipe(Effect.zipRight(updateKeptEntryEffect(root, id, (current) => refreshedEntryState(current, \"dormant\", new Date().toISOString()))), Effect.catchAll((error) => Effect.sync(() => {\n io.err(`failed to re-suspend ${entry.sandboxId}: ${errorText(error)}\\n`);\n }).pipe(Effect.zipRight(updateKeptEntryEffect(root, id, { state: \"alive\" })))));\n return code;\n })).pipe(Effect.map((result) => result ?? 1));\n }));\n }));\n}\n/** 在留存现场里跑一条命令(非交互;history/diff 用)——按 provider 能力路由到 `execInDetached`。 */\nfunction execInKeptEffect(entry: KeptSandboxEntry, script: string): SandboxCommandEffect<string> {\n const gap = detachedCapabilityGap(entry.provider);\n if (gap)\n return Effect.fail(new SandboxCommandOperationError({ operation: \"execute in kept sandbox\", cause: new Error(gap) }));\n return providerEffect(\"execute in kept sandbox\", () => execInDetached(entry.provider, entry.sandboxId, entry.workdir, script));\n}\n/** 唤醒 → 读 → 送回休眠(现场休眠中同样可用;读完不留 alive)。 */\nfunction withWokenSandboxEffect<T>(_root: string, id: string, entry: KeptSandboxEntry, fn: () => SandboxCommandEffect<T>): SandboxCommandEffect<T> {\n const gap = detachedCapabilityGap(entry.provider);\n if (gap)\n return Effect.fail(new SandboxCommandOperationError({\n operation: \"access kept sandbox\",\n cause: new Error(`${entry.sandboxId}: ${gap}`),\n }));\n return providerEffect(\"inspect kept sandbox\", () => inspectDetached(entry.provider, entry.sandboxId)).pipe(Effect.flatMap((state) => {\n if (state === \"expired\") {\n return Effect.fail(new SandboxCommandOperationError({\n operation: \"access kept sandbox\",\n cause: new Error(`${entry.sandboxId} (${entry.provider}) is gone; the in-sandbox ledger died with it (artifacts are unaffected). Clean up with: niceeval sandbox stop ${id}`),\n }));\n }\n if (state === \"unknown\") {\n return Effect.fail(new SandboxCommandOperationError({\n operation: \"inspect kept sandbox\",\n cause: new Error(`${entry.sandboxId} (${entry.provider}) could not be inspected — check credentials or retry later.`),\n }));\n }\n const wasDormant = state === \"dormant\";\n const use = fn();\n return wasDormant\n ? ensuringWithTypedFinalizer(providerEffect(\"wake kept sandbox\", () => wakeDetached(entry.provider, entry.sandboxId)).pipe(Effect.zipRight(use)), providerEffect(\"re-suspend kept sandbox\", () => suspendDetached(entry.provider, entry.sandboxId)))\n : use;\n }));\n}\ntype CommitFileChange = {\n status: string;\n path: string;\n};\nfunction parseCommitFileChanges(out: string): CommitFileChange[] {\n return out\n .trim()\n .split(\"\\n\")\n .filter(Boolean)\n .map((line) => {\n const tab = line.indexOf(\"\\t\");\n return tab === -1 ? { status: line, path: \"\" } : { status: line.slice(0, tab), path: line.slice(tab + 1) };\n });\n}\n/** 一次 provider exec 导出日志与每笔提交的改动。RS 分段使无父提交的 diff 失败自然成为零改动。 */\nconst HISTORY_EXPORT_SCRIPT = [\n \"git log --reverse --format='%H %at %s' 2>/dev/null\",\n \"git rev-list --reverse HEAD 2>/dev/null | while IFS= read -r hash; do\",\n \" printf '\\\\036%s\\\\n' \\\"$hash\\\"\",\n \" git diff --name-status \\\"$hash^\\\" \\\"$hash\\\" 2>/dev/null || true\",\n \"done\",\n].join(\"\\n\");\nfunction parseHistoryExport(out: string): {\n commits: {\n hash: string;\n at: number;\n subject: string;\n }[];\n changesByHash: Map<string, CommitFileChange[]>;\n} {\n const [log, ...sections] = out.split(\"\\x1e\");\n const commits = log!.trim().split(\"\\n\").filter(Boolean).map((line) => {\n const [hash, atRaw, ...rest] = line.split(\" \");\n return { hash: hash!, at: Number(atRaw), subject: rest.join(\" \") };\n });\n const changesByHash = new Map<string, CommitFileChange[]>();\n for (const section of sections) {\n const newline = section.indexOf(\"\\n\");\n const hash = (newline === -1 ? section : section.slice(0, newline)).trim();\n if (hash)\n changesByHash.set(hash, parseCommitFileChanges(newline === -1 ? \"\" : section.slice(newline + 1)));\n }\n return { commits, changesByHash };\n}\n/** 窗口 / eval 阶段标签列宽(与 \"agent\"/\"eval\" 关键词列共用同一份对齐规则,见\n * docs/feature/sandbox/cli.md「sandbox history / diff」的示例输出)。 */\nconst HISTORY_LABEL_COL = 8;\nconst HISTORY_EVAL_COUNT_COL = 20;\nfunction historyCommandEffect(root: string, ids: string[], _flags: SandboxCommandFlags, io: Io, panel: {\n mode: PanelMode;\n width: number;\n}): SandboxCommandEffect<number> {\n return resolveEntriesEffect(root, ids.slice(0, 1), io).pipe(Effect.flatMap((resolved) => {\n if (!resolved || resolved.length === 0) {\n if (ids.length === 0)\n io.err(\"usage: niceeval sandbox history <id>\\n\");\n return Effect.succeed(1);\n }\n const { id, entry } = resolved[0]!;\n return withWokenSandboxEffect(root, id, entry, () => execInKeptEffect(entry, HISTORY_EXPORT_SCRIPT)).pipe(Effect.map((out) => {\n const { commits, changesByHash } = parseHistoryExport(out);\n if (commits.length === 0) {\n io.out(\"(no ledger found in this sandbox)\\n\");\n return 0;\n }\n const anchor = commits.find((c) => c.subject === \"anchor\");\n const meta = anchor ? `anchor ${formatWhen(new Date(anchor.at * 1000).toISOString())}` : undefined;\n const rows: PanelRow[] = [];\n let sawEvalCommit = false;\n let lastWindow: string | undefined;\n for (const c of commits) {\n if (c.subject === \"anchor\")\n continue;\n if (c.subject.startsWith(\"eval \")) {\n // 第一次出现的 eval 提交是运行前的 fixture / setup;之后每次都是某轮 send 之后的\n // 校验写入——两者用同一份改动计数,只是阶段标签不同(见 docs 示例)。\n const label = sawEvalCommit ? \"post-send validation\" : \"fixture / setup\";\n sawEvalCommit = true;\n const changes = changesByHash.get(c.hash) ?? [];\n const count = `+${changes.length} file${changes.length === 1 ? \"\" : \"s\"}`;\n rows.push({\n kind: \"line\",\n text: `${\"eval\".padEnd(HISTORY_LABEL_COL)}${count.padEnd(HISTORY_EVAL_COUNT_COL)}(${label})`,\n });\n }\n else if (c.subject.startsWith(\"agent \")) {\n const window = c.subject.slice(6);\n lastWindow = window;\n const changes = changesByHash.get(c.hash) ?? [];\n const changeText = changes.map((fc) => `${fc.status} ${fc.path}`).join(\" · \");\n rows.push({\n kind: \"line\",\n text: `${window.padEnd(HISTORY_LABEL_COL)}${\"agent\".padEnd(HISTORY_LABEL_COL)}${changeText}`,\n });\n }\n else {\n rows.push({ kind: \"line\", text: c.subject });\n }\n }\n const footerCommand = lastWindow !== undefined\n ? `niceeval sandbox diff ${entry.sandboxId} --window ${lastWindow}`\n : `niceeval sandbox diff ${entry.sandboxId}`;\n const lines = renderPanel({\n title: `HISTORY · ${entry.sandboxId}`,\n meta,\n footerCommand,\n rows,\n width: panel.width,\n mode: panel.mode,\n });\n io.out(`${lines.join(\"\\n\")}\\n`);\n return 0;\n }), Effect.catchAll((error) => Effect.sync(() => {\n io.err(`${errorText(error)}\\n`);\n return 1;\n })));\n }));\n}\nfunction diffCommandEffect(root: string, ids: string[], flags: SandboxCommandFlags, io: Io): SandboxCommandEffect<number> {\n return resolveEntriesEffect(root, ids.slice(0, 1), io).pipe(Effect.flatMap((resolved) => {\n if (!resolved || resolved.length === 0) {\n if (ids.length === 0)\n io.err(\"usage: niceeval sandbox diff <id> [--window turn2] [--path <file>]\\n\");\n return Effect.succeed(1);\n }\n const { id, entry } = resolved[0]!;\n return withWokenSandboxEffect(root, id, entry, () => Effect.gen(function* () {\n const log = yield* execInKeptEffect(entry, `git log --reverse --format='%H %s' 2>/dev/null`);\n const commits = log\n .trim()\n .split(\"\\n\")\n .filter(Boolean)\n .map((line) => {\n const space = line.indexOf(\" \");\n return { hash: line.slice(0, space), subject: line.slice(space + 1) };\n })\n .filter((c) => c.subject.startsWith(\"agent \"));\n const wanted = flags.window !== undefined ? commits.filter((c) => c.subject === `agent ${flags.window}`) : commits;\n if (wanted.length === 0) {\n return flags.window !== undefined\n ? `window \"${flags.window}\" not found; windows: ${commits.map((c) => c.subject.slice(6)).join(\", \") || \"(none)\"}\\n`\n : \"(no agent windows in this ledger)\\n\";\n }\n const pathArg = flags.path !== undefined ? ` -- '${flags.path.replaceAll(\"'\", `'\\\\''`)}'` : \"\";\n const sections: string[] = [];\n for (const c of wanted) {\n const patch = yield* execInKeptEffect(entry, `git diff ${c.hash}^ ${c.hash}${pathArg}`);\n sections.push(`── window ${c.subject.slice(6)}\\n${patch.trimEnd()}`);\n }\n return sections.join(\"\\n\\n\") + \"\\n\";\n })).pipe(Effect.tap((out) => Effect.sync(() => io.out(out))), Effect.as(0), Effect.catchAll((error) => Effect.sync(() => {\n io.err(`${errorText(error)}\\n`);\n return 1;\n })));\n }));\n}\nfunction formatWhen(iso: string): string {\n const d = new Date(iso);\n if (Number.isNaN(d.getTime()))\n return iso;\n const pad = (n: number) => String(n).padStart(2, \"0\");\n return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}`;\n}\nexport { keptEntryId };\n"]}
|
|
1
|
+
{"version":3,"file":"cli-commands.js","sourceRoot":"","sources":["cli-commands.ts"],"names":[],"mappings":"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","sourcesContent":["// `niceeval sandbox` 命令组:查看与销毁留存的沙箱(见 docs/feature/sandbox/cli.md)。\n// 不读 niceeval.config.ts、不发现 eval,只操作留存注册表(.niceeval/sandboxes/ 逐条目文件)\n// 与内置 provider 的 detached 能力;provider 名的路由发生在 CLI / 注册表边界(sandbox/ 域内)。\nimport { Cause, Data, Effect } from \"effect\";\nimport { destroyDetached, detachedCapabilityGap, execInDetached, inspectDetached, openInteractiveShell, suspendDetached, wakeDetached, } from \"./keep.ts\";\nimport { acquireKeptLeaseEffect, findNiceevalRootEffect, keptEntryId, readKeptEntriesEffect, readKeptLeaseEffect, releaseKeptLeaseEffect, removeKeptEntryEffect, updateKeptEntryEffect, KeptSandboxRegistryError, type KeptSandboxEntry, } from \"./keep-registry.ts\";\nimport { dockerOrphanCount, listOrphanCandidates, pruneOrphans, type OrphanCandidate } from \"./orphans.ts\";\nimport { panelCapabilityOf, renderPanel, type PanelMode, type PanelRow } from \"../report/model/panel.ts\";\nimport { computeExpiresAt } from \"./keep.ts\";\nexport interface SandboxCommandFlags {\n all?: boolean;\n window?: string;\n path?: string;\n leaveRunning?: boolean;\n /** 仓库外执行时显式指定结果根(.niceeval 或其父目录)。 */\n record?: string;\n /** `sandbox list` 专用:核对强杀路径留下的无主实例(见「孤儿核对」)。 */\n orphans?: boolean;\n /** `sandbox prune` 专用:连 unverified 一起销毁。 */\n force?: boolean;\n}\nexport interface SandboxCommandIo {\n out(text: string): void;\n err(text: string): void;\n}\n/** Host-owned terminal and process facts. The command operation never reads process globals. */\nexport interface SandboxCommandFacts {\n readonly leaseHolder: string;\n readonly noColor?: string;\n readonly stdout: {\n readonly isTTY: boolean;\n readonly columns?: number;\n };\n}\nconst LEASE_TTL_MS = 60 * 60 * 1000;\n/** detached provider / command 边界的可恢复失败;注册表 I/O 错误保留自己的领域类型。 */\nexport class SandboxCommandOperationError extends Data.TaggedError(\"SandboxCommandOperationError\")<{\n readonly operation: string;\n readonly cause: unknown;\n}> {\n}\ntype SandboxCommandFailure = KeptSandboxRegistryError | SandboxCommandOperationError;\nexport type SandboxCommandEffect<A> = Effect.Effect<A, SandboxCommandFailure>;\n/** 所有 provider Promise 都只在此处进入 Effect;信号由 runtime 接管,interruption 不会变成普通失败。 */\nfunction providerEffect<A>(operation: string, run: (signal: AbortSignal) => Promise<A>): SandboxCommandEffect<A> {\n return Effect.tryPromise({\n try: run,\n catch: (cause) => new SandboxCommandOperationError({ operation, cause }),\n });\n}\nfunction errorText(error: SandboxCommandFailure): string {\n const cause = error.cause;\n return cause instanceof Error ? cause.message : String(cause);\n}\n/**\n * Effect 的标准 finalizer 不能走 typed error channel。本命令域需要把 lease / suspend 的失败\n * 和 body 的失败一起保留,因此在 uninterruptible cleanup 段显式拼接 Cause;body 仍可被中断。\n */\nfunction ensuringWithTypedFinalizer<A, E, R, E2>(body: Effect.Effect<A, E, R>, finalizer: Effect.Effect<void, E2>) {\n return Effect.uninterruptibleMask((restore) => restore(body).pipe(Effect.matchCauseEffect({\n onFailure: (bodyCause) => finalizer.pipe(Effect.matchCauseEffect({\n onFailure: (finalizerCause) => Effect.failCause(Cause.sequential(bodyCause, finalizerCause)),\n onSuccess: () => Effect.failCause(bodyCause),\n })),\n onSuccess: (value) => finalizer.pipe(Effect.as(value)),\n })));\n}\n/**\n * 刷新 provider 的留存期限。没有期限的 provider 必须省略字段,而不是把\n * `expiresAt: undefined` 带进逐条目 JSON;后者既不是 JSON 值,也会被共享持久层拒绝。\n */\nfunction refreshedEntryState(entry: KeptSandboxEntry, state: KeptSandboxEntry[\"state\"], now: string): KeptSandboxEntry {\n const { expiresAt: _previousExpiresAt, ...withoutExpiresAt } = entry;\n const expiresAt = computeExpiresAt(entry.provider, now);\n return expiresAt === undefined\n ? { ...withoutExpiresAt, state }\n : { ...withoutExpiresAt, state, expiresAt };\n}\n/** `list`/`history` 一次性面板的传输能力:是 TTY 且没有要求朴素输出时才画框\n * (docs/feature/sandbox/cli.md「输出体裁」)——`sandbox` 命令组只在启动时探测一次,\n * 不像 `exp` 的 live 面板那样需要随 resize 重新判断。 */\nfunction panelCapabilityForFacts(facts: SandboxCommandFacts): {\n mode: PanelMode;\n width: number;\n} {\n return panelCapabilityOf({\n isTTY: facts.stdout.isTTY,\n noColor: facts.noColor,\n width: facts.stdout.columns,\n });\n}\n/** Effect 主入口:CLI 可将它接进自己的唯一 runtime,不启动嵌套 Promise runtime。 */\nexport function runSandboxCommandEffect(cwd: string, positionals: string[], flags: SandboxCommandFlags, io: SandboxCommandIo, facts: SandboxCommandFacts): SandboxCommandEffect<number>;\nexport function runSandboxCommandEffect(cwd: string, positionals: string[], flags: SandboxCommandFlags, io: SandboxCommandIo, facts: SandboxCommandFacts): SandboxCommandEffect<number> {\n return Effect.gen(function* () {\n const sub = positionals[0];\n const root = yield* resolveRegistryRootEffect(cwd, flags.record);\n if (root === undefined) {\n io.err(`No .niceeval directory found from ${cwd} upward. Run this inside the project, or pass --record <record-root> to point at it.\\n`);\n return 1;\n }\n switch (sub) {\n case \"list\":\n return yield* (flags.orphans\n ? listOrphansCommandEffect(root, io)\n : listCommandEffect(root, io, panelCapabilityForFacts(facts)));\n case \"stop\":\n return yield* stopCommandEffect(root, positionals.slice(1), flags, io);\n case \"enter\":\n return yield* enterCommandEffect(root, positionals.slice(1), flags, io, facts);\n case \"history\":\n return yield* historyCommandEffect(root, positionals.slice(1), flags, io, panelCapabilityForFacts(facts));\n case \"diff\":\n return yield* diffCommandEffect(root, positionals.slice(1), flags, io);\n case \"prune\":\n return yield* pruneCommandEffect(root, flags, io);\n default:\n io.err(`usage: niceeval sandbox <list|enter|history|diff|stop|prune> …\\n`);\n return 1;\n }\n });\n}\n/** 留存注册表条目的 sandboxId 集合——孤儿核对与 prune 都要排除它们(被管理的现场不是孤儿)。 */\nfunction keptSandboxIdsEffect(root: string): SandboxCommandEffect<Set<string>> {\n return readKeptEntriesEffect(root).pipe(Effect.map(({ entries }) => new Set(entries.map(({ entry }) => entry.sandboxId))));\n}\nfunction listOrphansCommandEffect(root: string, io: SandboxCommandIo): SandboxCommandEffect<number> {\n return keptSandboxIdsEffect(root).pipe(Effect.flatMap((keptIds) => providerEffect(\"list orphan sandboxes\", () => listOrphanCandidates(keptIds))), Effect.map((candidates) => {\n if (candidates.length === 0) {\n io.out(\"No orphan sandboxes.\\n\");\n return 0;\n }\n io.out(`ID PROVIDER OWNER STARTED STATE\\n`);\n for (const c of candidates) {\n io.out(`${c.sandboxId.padEnd(10)}${c.provider.padEnd(10)}${ownerLabel(c).padEnd(19)}${formatWhen(c.identity.startedAt).padEnd(19)}${c.state}\\n`);\n const group = groupLabel(c);\n if (group)\n io.out(` ${group}\\n`);\n }\n io.out(`Remove orphans with: niceeval sandbox prune\\n`);\n return 0;\n }));\n}\nfunction pruneCommandEffect(root: string, flags: SandboxCommandFlags, io: SandboxCommandIo): SandboxCommandEffect<number> {\n return keptSandboxIdsEffect(root).pipe(Effect.flatMap((keptIds) => providerEffect(\"prune orphan sandboxes\", () => pruneOrphans(keptIds, flags.force === true))), Effect.map((outcome) => {\n if (outcome.pruned.length === 0 && outcome.failed.length === 0) {\n io.out(\"No orphan sandboxes.\\n\");\n }\n else {\n if (outcome.pruned.length > 0) {\n io.out(`pruned ${outcome.pruned.length} orphan sandbox${outcome.pruned.length === 1 ? \"\" : \"es\"}\\n`);\n for (const c of outcome.pruned) {\n const group = groupLabel(c);\n io.out(` ${c.sandboxId} ${c.provider} ${ownerLabel(c)} · started ${formatWhen(c.identity.startedAt)}${group ? ` · ${group}` : \"\"}\\n`);\n }\n }\n for (const f of outcome.failed) {\n io.err(`failed to prune ${f.candidate.sandboxId} (${f.candidate.provider}): ${f.message}\\n`);\n }\n }\n if (outcome.unverifiedRemaining > 0) {\n io.out(`${outcome.unverifiedRemaining} unverified left — inspect: niceeval sandbox list --orphans · force: niceeval sandbox prune --force\\n`);\n }\n return outcome.failed.length > 0 ? 1 : 0;\n }));\n}\n/** Compose 资源组的组成一行带过:伴随容器与网络跟随主实例整组出现,不逐容器单列。 */\nfunction groupLabel(c: OrphanCandidate): string | undefined {\n const g = c.resources;\n if (!g)\n return undefined;\n const containers = `${g.containerIds.length} container${g.containerIds.length === 1 ? \"\" : \"s\"}`;\n const networks = `${g.networkIds.length} network${g.networkIds.length === 1 ? \"\" : \"s\"}`;\n return `compose ${g.projectName} · ${containers} · ${networks}`;\n}\n/** `pid <pid>@<host>`,同宿主确认死亡时追加 ` dead`——unverified(异宿主)不冒充已核实。 */\nfunction ownerLabel(c: OrphanCandidate): string {\n return `pid ${c.identity.pid}@${c.identity.host}${c.state === \"orphan\" ? \" dead\" : \"\"}`;\n}\n/** 留存注册表里还有条目时,`niceeval exp` 启动打的一行提醒(不阻塞、不清理)。 */\nexport function orphanReminderEffect(cwd: string): SandboxCommandEffect<string | undefined> {\n return Effect.gen(function* () {\n const root = yield* findNiceevalRootEffect(cwd);\n const keptIds = root === undefined ? new Set<string>() : yield* keptSandboxIdsEffect(root);\n const count = yield* providerEffect(\"count orphan sandboxes\", () => dockerOrphanCount(keptIds));\n return count === 0\n ? undefined\n : `${count} orphan docker sandbox${count === 1 ? \"\" : \"es\"} from a killed run — niceeval sandbox prune\\n`;\n });\n}\nfunction resolveRegistryRootEffect(cwd: string, runFlag: string | undefined): SandboxCommandEffect<string | undefined> {\n if (runFlag !== undefined) {\n // --record 可以指 .niceeval 本身或它的父目录。\n return Effect.succeed(runFlag.endsWith(\".niceeval\") ? runFlag : `${runFlag}/.niceeval`);\n }\n return findNiceevalRootEffect(cwd);\n}\n/** 留存注册表里还有条目时,`niceeval exp` 启动打的一行提醒(不阻塞、不清理)。 */\nexport function keptSandboxReminderEffect(cwd: string): SandboxCommandEffect<string | undefined> {\n return findNiceevalRootEffect(cwd).pipe(Effect.flatMap((root) => root === undefined\n ? Effect.succeed(undefined)\n : readKeptEntriesEffect(root).pipe(Effect.map(({ entries }) => entries.length === 0\n ? undefined\n : `${entries.length} kept sandbox${entries.length === 1 ? \"\" : \"es\"} from earlier runs — niceeval sandbox list\\n`))));\n}\n/** 每个留存条目在 `SANDBOXES` 面板里占两行:身份行(ID/PROVIDER/STATE/FROM)紧跟一条\n * 缩进到 ID 列宽的提示行(下一步动作各不相同,批量 stop --all 不能当默认下一步,所以下边框\n * 不嵌命令——见 docs/feature/sandbox/cli.md「sandbox list」)。 */\nconst LIST_ID_COL = 10;\nconst LIST_PROVIDER_COL = 10;\nconst LIST_STATE_COL = 10;\nfunction listCommandEffect(root: string, io: SandboxCommandIo, panel: {\n mode: PanelMode;\n width: number;\n}): SandboxCommandEffect<number> {\n return Effect.gen(function* () {\n const { entries } = yield* readKeptEntriesEffect(root);\n if (entries.length === 0) {\n io.out(\"No kept sandboxes.\\n\");\n return 0;\n }\n const rows: PanelRow[] = [\n { kind: \"line\", text: `${\"ID\".padEnd(LIST_ID_COL)}${\"PROVIDER\".padEnd(LIST_PROVIDER_COL)}${\"STATE\".padEnd(LIST_STATE_COL)}FROM` },\n ];\n for (const { id, entry } of entries) {\n // STATE 是当下核对的现场状态,不是登记时的旧值。\n const state = yield* providerEffect(\"inspect kept sandbox\", () => inspectDetached(entry.provider, entry.sandboxId));\n // unknown 是探测失败,不是可持久化的现场事实;保留上次已知状态供下次核对。\n if (state !== \"unknown\" && state !== entry.state) {\n yield* updateKeptEntryEffect(root, id, { state }).pipe(Effect.catchAll(() => Effect.succeed(false)));\n }\n const from = `${entry.evalId} #${entry.attempt} · ${entry.verdict} · ${entry.locator}`;\n rows.push({\n kind: \"line\",\n text: `${id.padEnd(LIST_ID_COL)}${entry.provider.padEnd(LIST_PROVIDER_COL)}${state.padEnd(LIST_STATE_COL)}${from}`,\n });\n const indent = \" \".repeat(LIST_ID_COL);\n if (state === \"expired\") {\n const when = entry.expiresAt !== undefined ? `expired ${formatWhen(entry.expiresAt)} — ` : \"\";\n rows.push({ kind: \"line\", text: `${indent}${when}remove: niceeval sandbox stop ${id}` });\n }\n else if (state === \"unknown\") {\n rows.push({ kind: \"line\", text: `${indent}status unknown — check credentials or retry later` });\n }\n else {\n rows.push({ kind: \"line\", text: `${indent}${formatWhen(entry.keptAt)} · enter: niceeval sandbox enter ${id}` });\n }\n }\n const lines = renderPanel({\n title: \"SANDBOXES\",\n meta: `${entries.length} kept`,\n rows,\n width: panel.width,\n mode: panel.mode,\n });\n io.out(`${lines.join(\"\\n\")}\\n`);\n return 0;\n });\n}\n/** id 接受 entry id / 实例 id 的唯一前缀;有歧义或不在注册表里时报错并列出候选。 */\nfunction resolveEntriesEffect(root: string, ids: string[], io: SandboxCommandIo): SandboxCommandEffect<{\n id: string;\n entry: KeptSandboxEntry;\n}[] | undefined> {\n return readKeptEntriesEffect(root).pipe(Effect.map(({ entries }) => {\n const resolved: {\n id: string;\n entry: KeptSandboxEntry;\n }[] = [];\n for (const raw of ids) {\n const hits = entries.filter(({ id, entry }) => id === raw || id.startsWith(raw) || entry.sandboxId === raw || entry.sandboxId.startsWith(raw));\n if (hits.length === 1) {\n resolved.push(hits[0]!);\n continue;\n }\n if (hits.length === 0) {\n io.err(`\"${raw}\" is not in the kept-sandbox registry. Known: ${entries.map((e) => e.id).join(\", \") || \"(none)\"}\\n`);\n }\n else {\n io.err(`\"${raw}\" is ambiguous; candidates: ${hits.map((h) => `${h.id} (${h.entry.sandboxId})`).join(\", \")}\\n`);\n }\n return undefined;\n }\n return resolved;\n }));\n}\nfunction stopCommandEffect(root: string, ids: string[], flags: SandboxCommandFlags, io: SandboxCommandIo): SandboxCommandEffect<number> {\n return Effect.gen(function* () {\n let targets: {\n id: string;\n entry: KeptSandboxEntry;\n }[];\n if (flags.all) {\n targets = (yield* readKeptEntriesEffect(root)).entries;\n }\n else if (ids.length === 0) {\n io.err(\"specify sandbox ids or --all\\n\");\n return 1;\n }\n else {\n const resolved = yield* resolveEntriesEffect(root, ids, io);\n if (!resolved)\n return 1;\n targets = resolved;\n }\n let code = 0;\n for (const { id, entry } of targets) {\n const lease = yield* readKeptLeaseEffect(root, id);\n if (lease && Date.now() - Date.parse(lease.acquiredAt) < lease.ttlMs) {\n io.err(`${entry.sandboxId} (${entry.provider}) is in use by ${lease.holder} since ${lease.acquiredAt}; not stopping.\\n`);\n code = 1;\n continue;\n }\n yield* providerEffect(\"destroy kept sandbox\", () => destroyDetached(entry.provider, entry.sandboxId)).pipe(Effect.flatMap((outcome) => removeKeptEntryEffect(root, id).pipe(Effect.tap(() => Effect.sync(() => {\n if (outcome === \"stopped\")\n io.out(`stopped ${entry.sandboxId} (${entry.provider})\\n`);\n else\n io.out(`${entry.sandboxId} (${entry.provider}) already gone — removed from registry\\n`);\n })))), Effect.catchAll((error) => Effect.sync(() => {\n // 只有实例成功销毁或确认已不存在时才移除登记项;其它错误保留条目并退出 1,\n // 不能把仍活着的资源从管理面隐藏掉。\n io.err(`failed to stop ${entry.sandboxId} (${entry.provider}): ${errorText(error)}\\n`);\n code = 1;\n })));\n }\n return code;\n });\n}\nfunction withLeaseEffect<T>(root: string, id: string, entry: KeptSandboxEntry, op: string, io: SandboxCommandIo, facts: SandboxCommandFacts, fn: () => SandboxCommandEffect<T>): SandboxCommandEffect<T | undefined> {\n const lease = { holder: facts.leaseHolder, op, acquiredAt: new Date().toISOString(), ttlMs: LEASE_TTL_MS };\n return acquireKeptLeaseEffect(root, id, lease).pipe(Effect.flatMap((acquired) => {\n if (!acquired.acquired) {\n io.err(`${entry.sandboxId} is in use by ${acquired.lease.holder} since ${acquired.lease.acquiredAt}\\n`);\n return Effect.succeed(undefined);\n }\n return ensuringWithTypedFinalizer(fn(), releaseKeptLeaseEffect(root, id, acquired.token));\n }));\n}\nfunction enterCommandEffect(root: string, ids: string[], flags: SandboxCommandFlags, io: SandboxCommandIo, facts: SandboxCommandFacts): SandboxCommandEffect<number> {\n return resolveEntriesEffect(root, ids.slice(0, 1), io).pipe(Effect.flatMap((resolved) => {\n if (!resolved || resolved.length === 0) {\n if (ids.length === 0)\n io.err(\"usage: niceeval sandbox enter <id> [--leave-running]\\n\");\n return Effect.succeed(1);\n }\n const { id, entry } = resolved[0]!;\n const gap = detachedCapabilityGap(entry.provider);\n if (gap) {\n io.err(`${entry.sandboxId}: ${gap}\\n`);\n return Effect.succeed(1);\n }\n return providerEffect(\"inspect kept sandbox\", () => inspectDetached(entry.provider, entry.sandboxId)).pipe(Effect.flatMap((state) => {\n if (state === \"expired\") {\n io.err(`${entry.sandboxId} (${entry.provider}) is gone — the instance no longer exists. Clean up with: niceeval sandbox stop ${id}\\n`);\n return Effect.succeed(1);\n }\n if (state === \"unknown\") {\n io.err(`${entry.sandboxId} (${entry.provider}) could not be inspected — check credentials or retry later.\\n`);\n return Effect.succeed(1);\n }\n return withLeaseEffect(root, id, entry, \"enter\", io, facts, () => Effect.gen(function* () {\n yield* providerEffect(\"wake kept sandbox\", () => wakeDetached(entry.provider, entry.sandboxId));\n yield* updateKeptEntryEffect(root, id, (current) => refreshedEntryState(current, \"alive\", new Date().toISOString()));\n const code = yield* providerEffect(\"open kept sandbox shell\", () => openInteractiveShell(entry.provider, entry.sandboxId, entry.workdir)).pipe(Effect.catchAll((error) => Effect.sync(() => {\n // 原生命令本身起不来(如未装对应 CLI):现场保持 alive,提示改用注册表里的原生命令直连。\n io.err(`failed to open an interactive shell for ${entry.sandboxId} (${entry.provider}): ${errorText(error)}${entry.enter ? `\\nconnect directly instead: ${entry.enter}` : \"\"}\\n`);\n return 1;\n })));\n if (flags.leaveRunning) {\n yield* updateKeptEntryEffect(root, id, { state: \"alive\" });\n io.out(`left running: ${entry.sandboxId} (re-suspend with another enter, or destroy with niceeval sandbox stop ${id})\\n`);\n return code;\n }\n // shell 退出(含 Ctrl+C)后自动送回休眠——「休眠不烧资源」不因进去看过一眼失效。\n yield* providerEffect(\"re-suspend kept sandbox\", () => suspendDetached(entry.provider, entry.sandboxId)).pipe(Effect.zipRight(updateKeptEntryEffect(root, id, (current) => refreshedEntryState(current, \"dormant\", new Date().toISOString()))), Effect.catchAll((error) => Effect.sync(() => {\n io.err(`failed to re-suspend ${entry.sandboxId}: ${errorText(error)}\\n`);\n }).pipe(Effect.zipRight(updateKeptEntryEffect(root, id, { state: \"alive\" })))));\n return code;\n })).pipe(Effect.map((result) => result ?? 1));\n }));\n }));\n}\n/** 在留存现场里跑一条命令(非交互;history/diff 用)——按 provider 能力路由到 `execInDetached`。 */\nfunction execInKeptEffect(entry: KeptSandboxEntry, script: string): SandboxCommandEffect<string> {\n const gap = detachedCapabilityGap(entry.provider);\n if (gap)\n return Effect.fail(new SandboxCommandOperationError({ operation: \"execute in kept sandbox\", cause: new Error(gap) }));\n return providerEffect(\"execute in kept sandbox\", () => execInDetached(entry.provider, entry.sandboxId, entry.workdir, script));\n}\n/** 唤醒 → 读 → 送回休眠(现场休眠中同样可用;读完不留 alive)。 */\nfunction withWokenSandboxEffect<T>(_root: string, id: string, entry: KeptSandboxEntry, fn: () => SandboxCommandEffect<T>): SandboxCommandEffect<T> {\n const gap = detachedCapabilityGap(entry.provider);\n if (gap)\n return Effect.fail(new SandboxCommandOperationError({\n operation: \"access kept sandbox\",\n cause: new Error(`${entry.sandboxId}: ${gap}`),\n }));\n return providerEffect(\"inspect kept sandbox\", () => inspectDetached(entry.provider, entry.sandboxId)).pipe(Effect.flatMap((state) => {\n if (state === \"expired\") {\n return Effect.fail(new SandboxCommandOperationError({\n operation: \"access kept sandbox\",\n cause: new Error(`${entry.sandboxId} (${entry.provider}) is gone; the in-sandbox ledger died with it (artifacts are unaffected). Clean up with: niceeval sandbox stop ${id}`),\n }));\n }\n if (state === \"unknown\") {\n return Effect.fail(new SandboxCommandOperationError({\n operation: \"inspect kept sandbox\",\n cause: new Error(`${entry.sandboxId} (${entry.provider}) could not be inspected — check credentials or retry later.`),\n }));\n }\n const wasDormant = state === \"dormant\";\n const use = fn();\n return wasDormant\n ? ensuringWithTypedFinalizer(providerEffect(\"wake kept sandbox\", () => wakeDetached(entry.provider, entry.sandboxId)).pipe(Effect.zipRight(use)), providerEffect(\"re-suspend kept sandbox\", () => suspendDetached(entry.provider, entry.sandboxId)))\n : use;\n }));\n}\ntype CommitFileChange = {\n status: string;\n path: string;\n};\nfunction parseCommitFileChanges(out: string): CommitFileChange[] {\n return out\n .trim()\n .split(\"\\n\")\n .filter(Boolean)\n .map((line) => {\n const tab = line.indexOf(\"\\t\");\n return tab === -1 ? { status: line, path: \"\" } : { status: line.slice(0, tab), path: line.slice(tab + 1) };\n });\n}\n/** 一次 provider exec 导出日志与每笔提交的改动。RS 分段使无父提交的 diff 失败自然成为零改动。 */\nconst HISTORY_EXPORT_SCRIPT = [\n \"git log --reverse --format='%H %at %s' 2>/dev/null\",\n \"git rev-list --reverse HEAD 2>/dev/null | while IFS= read -r hash; do\",\n \" printf '\\\\036%s\\\\n' \\\"$hash\\\"\",\n \" git diff --name-status \\\"$hash^\\\" \\\"$hash\\\" 2>/dev/null || true\",\n \"done\",\n].join(\"\\n\");\nfunction parseHistoryExport(out: string): {\n commits: {\n hash: string;\n at: number;\n subject: string;\n }[];\n changesByHash: Map<string, CommitFileChange[]>;\n} {\n const [log, ...sections] = out.split(\"\\x1e\");\n const commits = log!.trim().split(\"\\n\").filter(Boolean).map((line) => {\n const [hash, atRaw, ...rest] = line.split(\" \");\n return { hash: hash!, at: Number(atRaw), subject: rest.join(\" \") };\n });\n const changesByHash = new Map<string, CommitFileChange[]>();\n for (const section of sections) {\n const newline = section.indexOf(\"\\n\");\n const hash = (newline === -1 ? section : section.slice(0, newline)).trim();\n if (hash)\n changesByHash.set(hash, parseCommitFileChanges(newline === -1 ? \"\" : section.slice(newline + 1)));\n }\n return { commits, changesByHash };\n}\n/** 窗口 / eval 阶段标签列宽(与 \"agent\"/\"eval\" 关键词列共用同一份对齐规则,见\n * docs/feature/sandbox/cli.md「sandbox history / diff」的示例输出)。 */\nconst HISTORY_LABEL_COL = 8;\nconst HISTORY_EVAL_COUNT_COL = 20;\nfunction historyCommandEffect(root: string, ids: string[], _flags: SandboxCommandFlags, io: SandboxCommandIo, panel: {\n mode: PanelMode;\n width: number;\n}): SandboxCommandEffect<number> {\n return resolveEntriesEffect(root, ids.slice(0, 1), io).pipe(Effect.flatMap((resolved) => {\n if (!resolved || resolved.length === 0) {\n if (ids.length === 0)\n io.err(\"usage: niceeval sandbox history <id>\\n\");\n return Effect.succeed(1);\n }\n const { id, entry } = resolved[0]!;\n return withWokenSandboxEffect(root, id, entry, () => execInKeptEffect(entry, HISTORY_EXPORT_SCRIPT)).pipe(Effect.map((out) => {\n const { commits, changesByHash } = parseHistoryExport(out);\n if (commits.length === 0) {\n io.out(\"(no ledger found in this sandbox)\\n\");\n return 0;\n }\n const anchor = commits.find((c) => c.subject === \"anchor\");\n const meta = anchor ? `anchor ${formatWhen(new Date(anchor.at * 1000).toISOString())}` : undefined;\n const rows: PanelRow[] = [];\n let sawEvalCommit = false;\n let lastWindow: string | undefined;\n for (const c of commits) {\n if (c.subject === \"anchor\")\n continue;\n if (c.subject.startsWith(\"eval \")) {\n // 第一次出现的 eval 提交是运行前的 fixture / setup;之后每次都是某轮 send 之后的\n // 校验写入——两者用同一份改动计数,只是阶段标签不同(见 docs 示例)。\n const label = sawEvalCommit ? \"post-send validation\" : \"fixture / setup\";\n sawEvalCommit = true;\n const changes = changesByHash.get(c.hash) ?? [];\n const count = `+${changes.length} file${changes.length === 1 ? \"\" : \"s\"}`;\n rows.push({\n kind: \"line\",\n text: `${\"eval\".padEnd(HISTORY_LABEL_COL)}${count.padEnd(HISTORY_EVAL_COUNT_COL)}(${label})`,\n });\n }\n else if (c.subject.startsWith(\"agent \")) {\n const window = c.subject.slice(6);\n lastWindow = window;\n const changes = changesByHash.get(c.hash) ?? [];\n const changeText = changes.map((fc) => `${fc.status} ${fc.path}`).join(\" · \");\n rows.push({\n kind: \"line\",\n text: `${window.padEnd(HISTORY_LABEL_COL)}${\"agent\".padEnd(HISTORY_LABEL_COL)}${changeText}`,\n });\n }\n else {\n rows.push({ kind: \"line\", text: c.subject });\n }\n }\n const footerCommand = lastWindow !== undefined\n ? `niceeval sandbox diff ${entry.sandboxId} --window ${lastWindow}`\n : `niceeval sandbox diff ${entry.sandboxId}`;\n const lines = renderPanel({\n title: `HISTORY · ${entry.sandboxId}`,\n meta,\n footerCommand,\n rows,\n width: panel.width,\n mode: panel.mode,\n });\n io.out(`${lines.join(\"\\n\")}\\n`);\n return 0;\n }), Effect.catchAll((error) => Effect.sync(() => {\n io.err(`${errorText(error)}\\n`);\n return 1;\n })));\n }));\n}\nfunction diffCommandEffect(root: string, ids: string[], flags: SandboxCommandFlags, io: SandboxCommandIo): SandboxCommandEffect<number> {\n return resolveEntriesEffect(root, ids.slice(0, 1), io).pipe(Effect.flatMap((resolved) => {\n if (!resolved || resolved.length === 0) {\n if (ids.length === 0)\n io.err(\"usage: niceeval sandbox diff <id> [--window turn2] [--path <file>]\\n\");\n return Effect.succeed(1);\n }\n const { id, entry } = resolved[0]!;\n return withWokenSandboxEffect(root, id, entry, () => Effect.gen(function* () {\n const log = yield* execInKeptEffect(entry, `git log --reverse --format='%H %s' 2>/dev/null`);\n const commits = log\n .trim()\n .split(\"\\n\")\n .filter(Boolean)\n .map((line) => {\n const space = line.indexOf(\" \");\n return { hash: line.slice(0, space), subject: line.slice(space + 1) };\n })\n .filter((c) => c.subject.startsWith(\"agent \"));\n const wanted = flags.window !== undefined ? commits.filter((c) => c.subject === `agent ${flags.window}`) : commits;\n if (wanted.length === 0) {\n return flags.window !== undefined\n ? `window \"${flags.window}\" not found; windows: ${commits.map((c) => c.subject.slice(6)).join(\", \") || \"(none)\"}\\n`\n : \"(no agent windows in this ledger)\\n\";\n }\n const pathArg = flags.path !== undefined ? ` -- '${flags.path.replaceAll(\"'\", `'\\\\''`)}'` : \"\";\n const sections: string[] = [];\n for (const c of wanted) {\n const patch = yield* execInKeptEffect(entry, `git diff ${c.hash}^ ${c.hash}${pathArg}`);\n sections.push(`── window ${c.subject.slice(6)}\\n${patch.trimEnd()}`);\n }\n return sections.join(\"\\n\\n\") + \"\\n\";\n })).pipe(Effect.tap((out) => Effect.sync(() => io.out(out))), Effect.as(0), Effect.catchAll((error) => Effect.sync(() => {\n io.err(`${errorText(error)}\\n`);\n return 1;\n })));\n }));\n}\nfunction formatWhen(iso: string): string {\n const d = new Date(iso);\n if (Number.isNaN(d.getTime()))\n return iso;\n const pad = (n: number) => String(n).padStart(2, \"0\");\n return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}`;\n}\nexport { keptEntryId };\n"]}
|
|
@@ -6,20 +6,24 @@ export interface SandboxCommandFlags {
|
|
|
6
6
|
path?: string;
|
|
7
7
|
leaveRunning?: boolean;
|
|
8
8
|
/** 仓库外执行时显式指定结果根(.niceeval 或其父目录)。 */
|
|
9
|
-
|
|
9
|
+
record?: string;
|
|
10
10
|
/** `sandbox list` 专用:核对强杀路径留下的无主实例(见「孤儿核对」)。 */
|
|
11
11
|
orphans?: boolean;
|
|
12
12
|
/** `sandbox prune` 专用:连 unverified 一起销毁。 */
|
|
13
13
|
force?: boolean;
|
|
14
14
|
}
|
|
15
|
-
interface
|
|
15
|
+
export interface SandboxCommandIo {
|
|
16
16
|
out(text: string): void;
|
|
17
17
|
err(text: string): void;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
}
|
|
19
|
+
/** Host-owned terminal and process facts. The command operation never reads process globals. */
|
|
20
|
+
export interface SandboxCommandFacts {
|
|
21
|
+
readonly leaseHolder: string;
|
|
22
|
+
readonly noColor?: string;
|
|
23
|
+
readonly stdout: {
|
|
24
|
+
readonly isTTY: boolean;
|
|
25
|
+
readonly columns?: number;
|
|
26
|
+
};
|
|
23
27
|
}
|
|
24
28
|
declare const SandboxCommandOperationError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => Cause.YieldableError & {
|
|
25
29
|
readonly _tag: "SandboxCommandOperationError";
|
|
@@ -33,7 +37,7 @@ export declare class SandboxCommandOperationError extends SandboxCommandOperatio
|
|
|
33
37
|
type SandboxCommandFailure = KeptSandboxRegistryError | SandboxCommandOperationError;
|
|
34
38
|
export type SandboxCommandEffect<A> = Effect.Effect<A, SandboxCommandFailure>;
|
|
35
39
|
/** Effect 主入口:CLI 可将它接进自己的唯一 runtime,不启动嵌套 Promise runtime。 */
|
|
36
|
-
export declare function runSandboxCommandEffect(cwd: string, positionals: string[], flags: SandboxCommandFlags, io
|
|
40
|
+
export declare function runSandboxCommandEffect(cwd: string, positionals: string[], flags: SandboxCommandFlags, io: SandboxCommandIo, facts: SandboxCommandFacts): SandboxCommandEffect<number>;
|
|
37
41
|
/** 留存注册表里还有条目时,`niceeval exp` 启动打的一行提醒(不阻塞、不清理)。 */
|
|
38
42
|
export declare function orphanReminderEffect(cwd: string): SandboxCommandEffect<string | undefined>;
|
|
39
43
|
/** 留存注册表里还有条目时,`niceeval exp` 启动打的一行提醒(不阻塞、不清理)。 */
|
|
@@ -6,20 +6,24 @@ export interface SandboxCommandFlags {
|
|
|
6
6
|
path?: string;
|
|
7
7
|
leaveRunning?: boolean;
|
|
8
8
|
/** 仓库外执行时显式指定结果根(.niceeval 或其父目录)。 */
|
|
9
|
-
|
|
9
|
+
record?: string;
|
|
10
10
|
/** `sandbox list` 专用:核对强杀路径留下的无主实例(见「孤儿核对」)。 */
|
|
11
11
|
orphans?: boolean;
|
|
12
12
|
/** `sandbox prune` 专用:连 unverified 一起销毁。 */
|
|
13
13
|
force?: boolean;
|
|
14
14
|
}
|
|
15
|
-
interface
|
|
15
|
+
export interface SandboxCommandIo {
|
|
16
16
|
out(text: string): void;
|
|
17
17
|
err(text: string): void;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
}
|
|
19
|
+
/** Host-owned terminal and process facts. The command operation never reads process globals. */
|
|
20
|
+
export interface SandboxCommandFacts {
|
|
21
|
+
readonly leaseHolder: string;
|
|
22
|
+
readonly noColor?: string;
|
|
23
|
+
readonly stdout: {
|
|
24
|
+
readonly isTTY: boolean;
|
|
25
|
+
readonly columns?: number;
|
|
26
|
+
};
|
|
23
27
|
}
|
|
24
28
|
declare const SandboxCommandOperationError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => Cause.YieldableError & {
|
|
25
29
|
readonly _tag: "SandboxCommandOperationError";
|
|
@@ -33,7 +37,7 @@ export declare class SandboxCommandOperationError extends SandboxCommandOperatio
|
|
|
33
37
|
type SandboxCommandFailure = KeptSandboxRegistryError | SandboxCommandOperationError;
|
|
34
38
|
export type SandboxCommandEffect<A> = Effect.Effect<A, SandboxCommandFailure>;
|
|
35
39
|
/** Effect 主入口:CLI 可将它接进自己的唯一 runtime,不启动嵌套 Promise runtime。 */
|
|
36
|
-
export declare function runSandboxCommandEffect(cwd: string, positionals: string[], flags: SandboxCommandFlags, io
|
|
40
|
+
export declare function runSandboxCommandEffect(cwd: string, positionals: string[], flags: SandboxCommandFlags, io: SandboxCommandIo, facts: SandboxCommandFacts): SandboxCommandEffect<number>;
|
|
37
41
|
/** 留存注册表里还有条目时,`niceeval exp` 启动打的一行提醒(不阻塞、不清理)。 */
|
|
38
42
|
export declare function orphanReminderEffect(cwd: string): SandboxCommandEffect<string | undefined>;
|
|
39
43
|
/** 留存注册表里还有条目时,`niceeval exp` 启动打的一行提醒(不阻塞、不清理)。 */
|
|
@@ -6,20 +6,24 @@ export interface SandboxCommandFlags {
|
|
|
6
6
|
path?: string;
|
|
7
7
|
leaveRunning?: boolean;
|
|
8
8
|
/** 仓库外执行时显式指定结果根(.niceeval 或其父目录)。 */
|
|
9
|
-
|
|
9
|
+
record?: string;
|
|
10
10
|
/** `sandbox list` 专用:核对强杀路径留下的无主实例(见「孤儿核对」)。 */
|
|
11
11
|
orphans?: boolean;
|
|
12
12
|
/** `sandbox prune` 专用:连 unverified 一起销毁。 */
|
|
13
13
|
force?: boolean;
|
|
14
14
|
}
|
|
15
|
-
interface
|
|
15
|
+
export interface SandboxCommandIo {
|
|
16
16
|
out(text: string): void;
|
|
17
17
|
err(text: string): void;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
}
|
|
19
|
+
/** Host-owned terminal and process facts. The command operation never reads process globals. */
|
|
20
|
+
export interface SandboxCommandFacts {
|
|
21
|
+
readonly leaseHolder: string;
|
|
22
|
+
readonly noColor?: string;
|
|
23
|
+
readonly stdout: {
|
|
24
|
+
readonly isTTY: boolean;
|
|
25
|
+
readonly columns?: number;
|
|
26
|
+
};
|
|
23
27
|
}
|
|
24
28
|
declare const SandboxCommandOperationError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => Cause.YieldableError & {
|
|
25
29
|
readonly _tag: "SandboxCommandOperationError";
|
|
@@ -33,7 +37,7 @@ export declare class SandboxCommandOperationError extends SandboxCommandOperatio
|
|
|
33
37
|
type SandboxCommandFailure = KeptSandboxRegistryError | SandboxCommandOperationError;
|
|
34
38
|
export type SandboxCommandEffect<A> = Effect.Effect<A, SandboxCommandFailure>;
|
|
35
39
|
/** Effect 主入口:CLI 可将它接进自己的唯一 runtime,不启动嵌套 Promise runtime。 */
|
|
36
|
-
export declare function runSandboxCommandEffect(cwd: string, positionals: string[], flags: SandboxCommandFlags, io
|
|
40
|
+
export declare function runSandboxCommandEffect(cwd: string, positionals: string[], flags: SandboxCommandFlags, io: SandboxCommandIo, facts: SandboxCommandFacts): SandboxCommandEffect<number>;
|
|
37
41
|
/** 留存注册表里还有条目时,`niceeval exp` 启动打的一行提醒(不阻塞、不清理)。 */
|
|
38
42
|
export declare function orphanReminderEffect(cwd: string): SandboxCommandEffect<string | undefined>;
|
|
39
43
|
/** 留存注册表里还有条目时,`niceeval exp` 启动打的一行提醒(不阻塞、不清理)。 */
|
package/dist/sandbox/compose.cjs
CHANGED
|
@@ -30,6 +30,7 @@ const node_url_1 = require("node:url");
|
|
|
30
30
|
const effect_1 = require("effect");
|
|
31
31
|
const yaml_1 = require("yaml");
|
|
32
32
|
const leak_gate_ts_1 = require("../runner/leak-gate.cjs");
|
|
33
|
+
const build_coordinator_ts_1 = require("./build-coordinator.cjs");
|
|
33
34
|
const identity_ts_1 = require("./identity.cjs");
|
|
34
35
|
const run_identity_ts_1 = require("./run-identity.cjs");
|
|
35
36
|
const retry_ts_1 = require("./retry.cjs");
|
|
@@ -699,7 +700,14 @@ function collectComposeBuildsInternal(opts, runComposeConfig) {
|
|
|
699
700
|
providerIdentityMarker = (0, identity_ts_1.unresolvedProviderFingerprintMarker)("sandbox.image-unresolved", "Compose references an image or FROM base that is not pinned to a sha256 digest.");
|
|
700
701
|
}
|
|
701
702
|
buildKeys.push(collected.buildKey);
|
|
703
|
+
const scopeId = (0, build_coordinator_ts_1.materializationScopeId)({
|
|
704
|
+
providerFamily: "docker",
|
|
705
|
+
authorityFingerprint: JSON.stringify(providerIdentityMarker ?? ["docker", "default"]),
|
|
706
|
+
materializationProtocolVersion: 1,
|
|
707
|
+
});
|
|
702
708
|
works.push({
|
|
709
|
+
ref: (0, build_coordinator_ts_1.sandboxBuildRef)(scopeId, collected.buildKey),
|
|
710
|
+
scopeId,
|
|
703
711
|
buildKey: collected.buildKey,
|
|
704
712
|
provider: "docker",
|
|
705
713
|
label: `compose:${service.name}`,
|
|
@@ -750,7 +758,14 @@ function dockerComposeBuildProvider(opts) {
|
|
|
750
758
|
async lookup(work) {
|
|
751
759
|
const tag = composeBuildTag(work.buildKey);
|
|
752
760
|
const hit = await dockerImageExists(tag);
|
|
753
|
-
return hit
|
|
761
|
+
return hit
|
|
762
|
+
? { _tag: "Hit", source: {
|
|
763
|
+
locator: tag,
|
|
764
|
+
source: "cache",
|
|
765
|
+
acquireUse: async () => ({ locator: tag, release() { } }),
|
|
766
|
+
release() { },
|
|
767
|
+
} }
|
|
768
|
+
: { _tag: "Miss" };
|
|
754
769
|
},
|
|
755
770
|
async build(work, ctx) {
|
|
756
771
|
const inputs = work.inputs;
|
|
@@ -781,7 +796,12 @@ function dockerComposeBuildProvider(opts) {
|
|
|
781
796
|
const imageId = await composeServiceImageId(composeFile, service, cwd, composeEnv, runCompose);
|
|
782
797
|
if (imageId)
|
|
783
798
|
await dockerTag(imageId, tag);
|
|
784
|
-
return
|
|
799
|
+
return {
|
|
800
|
+
locator: tag,
|
|
801
|
+
source: "build",
|
|
802
|
+
acquireUse: async () => ({ locator: tag, release() { } }),
|
|
803
|
+
release() { },
|
|
804
|
+
};
|
|
785
805
|
},
|
|
786
806
|
};
|
|
787
807
|
}
|