@jinn-network/client 0.1.7 → 0.1.8-canary.09a3b2f6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +67 -1
- package/dist/adapters/mech/adapter.d.ts +39 -2
- package/dist/adapters/mech/adapter.js +178 -20
- package/dist/adapters/mech/adapter.js.map +1 -1
- package/dist/adapters/mech/contracts.d.ts +22 -1
- package/dist/adapters/mech/contracts.js +96 -52
- package/dist/adapters/mech/contracts.js.map +1 -1
- package/dist/adapters/mech/safe-revert.d.ts +4 -0
- package/dist/adapters/mech/safe-revert.js +5 -1
- package/dist/adapters/mech/safe-revert.js.map +1 -1
- package/dist/adapters/mech/safe.d.ts +1 -1
- package/dist/adapters/mech/safe.js +10 -4
- package/dist/adapters/mech/safe.js.map +1 -1
- package/dist/adapters/mech/types.d.ts +6 -1
- package/dist/adapters/mech/types.js.map +1 -1
- package/dist/agent/operator-claude.js +8 -0
- package/dist/agent/operator-claude.js.map +1 -1
- package/dist/api/activity-events-endpoint.d.ts +14 -0
- package/dist/api/activity-events-endpoint.js +59 -0
- package/dist/api/activity-events-endpoint.js.map +1 -0
- package/dist/api/bootstrap-endpoint.d.ts +1 -2
- package/dist/api/bootstrap-endpoint.js +42 -24
- package/dist/api/bootstrap-endpoint.js.map +1 -1
- package/dist/api/codex-doctor-endpoint.d.ts +22 -5
- package/dist/api/codex-doctor-endpoint.js +136 -17
- package/dist/api/codex-doctor-endpoint.js.map +1 -1
- package/dist/api/debug-report-endpoint.d.ts +27 -0
- package/dist/api/debug-report-endpoint.js +157 -0
- package/dist/api/debug-report-endpoint.js.map +1 -0
- package/dist/api/discovery-endpoint.d.ts +1 -0
- package/dist/api/discovery-endpoint.js +24 -0
- package/dist/api/discovery-endpoint.js.map +1 -1
- package/dist/api/fleet-build.d.ts +1 -7
- package/dist/api/fleet-build.js +0 -7
- package/dist/api/fleet-build.js.map +1 -1
- package/dist/api/gather-status.d.ts +39 -0
- package/dist/api/gather-status.js +181 -84
- package/dist/api/gather-status.js.map +1 -1
- package/dist/api/hermes-doctor-endpoint.d.ts +15 -7
- package/dist/api/hermes-doctor-endpoint.js +56 -19
- package/dist/api/hermes-doctor-endpoint.js.map +1 -1
- package/dist/api/launcher-status.d.ts +4 -2
- package/dist/api/launcher-status.js +11 -10
- package/dist/api/launcher-status.js.map +1 -1
- package/dist/api/launcher-tasks.d.ts +1 -1
- package/dist/api/launcher-tasks.js +12 -8
- package/dist/api/launcher-tasks.js.map +1 -1
- package/dist/api/loop-completion-build.d.ts +79 -0
- package/dist/api/loop-completion-build.js +155 -0
- package/dist/api/loop-completion-build.js.map +1 -0
- package/dist/api/operator-artifacts-endpoint.js +73 -6
- package/dist/api/operator-artifacts-endpoint.js.map +1 -1
- package/dist/api/portfolio-v0-build.d.ts +7 -1
- package/dist/api/portfolio-v0-build.js +6 -2
- package/dist/api/portfolio-v0-build.js.map +1 -1
- package/dist/api/prediction-v1-build.d.ts +6 -0
- package/dist/api/prediction-v1-build.js +3 -1
- package/dist/api/prediction-v1-build.js.map +1 -1
- package/dist/api/server.d.ts +17 -0
- package/dist/api/server.js +40 -1
- package/dist/api/server.js.map +1 -1
- package/dist/api/setup-endpoints.d.ts +13 -9
- package/dist/api/setup-endpoints.js +50 -173
- package/dist/api/setup-endpoints.js.map +1 -1
- package/dist/api/solvernets-endpoints.js +33 -63
- package/dist/api/solvernets-endpoints.js.map +1 -1
- package/dist/api/status-build.d.ts +140 -17
- package/dist/api/status-build.js +47 -34
- package/dist/api/status-build.js.map +1 -1
- package/dist/api/status-harness-rollup.d.ts +35 -0
- package/dist/api/status-harness-rollup.js +45 -0
- package/dist/api/status-harness-rollup.js.map +1 -0
- package/dist/api/status-rollup-build.d.ts +0 -4
- package/dist/api/status-rollup-build.js +0 -4
- package/dist/api/status-rollup-build.js.map +1 -1
- package/dist/api/task-runs-build.d.ts +8 -0
- package/dist/api/task-runs-build.js +5 -1
- package/dist/api/task-runs-build.js.map +1 -1
- package/dist/build-info.json +4 -4
- package/dist/build-meta.json +1 -1
- package/dist/captures/live-publisher.js +24 -4
- package/dist/captures/live-publisher.js.map +1 -1
- package/dist/captures/publish.d.ts +1 -1
- package/dist/chain-read-errors.d.ts +12 -0
- package/dist/chain-read-errors.js +26 -1
- package/dist/chain-read-errors.js.map +1 -1
- package/dist/cli/commands/codedigest-revert-check.d.ts +33 -0
- package/dist/cli/commands/codedigest-revert-check.js +253 -0
- package/dist/cli/commands/codedigest-revert-check.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +3 -0
- package/dist/cli/commands/doctor.js +35 -0
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/eval.d.ts +76 -0
- package/dist/cli/commands/eval.js +401 -0
- package/dist/cli/commands/eval.js.map +1 -0
- package/dist/cli/commands/rewards.d.ts +2 -0
- package/dist/cli/commands/rewards.js +27 -0
- package/dist/cli/commands/rewards.js.map +1 -1
- package/dist/cli/commands/solver-nets.d.ts +1 -0
- package/dist/cli/commands/solver-nets.js +245 -22
- package/dist/cli/commands/solver-nets.js.map +1 -1
- package/dist/cli/commands/solver-plugins-block.d.ts +33 -0
- package/dist/cli/commands/solver-plugins-block.js +118 -0
- package/dist/cli/commands/solver-plugins-block.js.map +1 -0
- package/dist/cli/commands/solver-plugins-feedback.d.ts +72 -0
- package/dist/cli/commands/solver-plugins-feedback.js +262 -0
- package/dist/cli/commands/solver-plugins-feedback.js.map +1 -0
- package/dist/cli/commands/solver-plugins-read.d.ts +54 -0
- package/dist/cli/commands/solver-plugins-read.js +259 -0
- package/dist/cli/commands/solver-plugins-read.js.map +1 -0
- package/dist/cli/commands/solver-plugins.d.ts +35 -0
- package/dist/cli/commands/solver-plugins.js +399 -2
- package/dist/cli/commands/solver-plugins.js.map +1 -1
- package/dist/cli/commands/status.js +0 -1
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/tasks.js +15 -2
- package/dist/cli/commands/tasks.js.map +1 -1
- package/dist/cli/index.js +4 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/task-native-readiness.d.ts +7 -0
- package/dist/cli/task-native-readiness.js +7 -5
- package/dist/cli/task-native-readiness.js.map +1 -1
- package/dist/config.d.ts +206 -232
- package/dist/config.js +289 -107
- package/dist/config.js.map +1 -1
- package/dist/daemon/ai-units-gate.d.ts +54 -0
- package/dist/daemon/ai-units-gate.js +83 -0
- package/dist/daemon/ai-units-gate.js.map +1 -0
- package/dist/daemon/creator.js +13 -0
- package/dist/daemon/creator.js.map +1 -1
- package/dist/daemon/daemon.d.ts +10 -0
- package/dist/daemon/daemon.js +205 -30
- package/dist/daemon/daemon.js.map +1 -1
- package/dist/daemon/eviction-loop.d.ts +7 -0
- package/dist/daemon/eviction-loop.js +16 -0
- package/dist/daemon/eviction-loop.js.map +1 -1
- package/dist/daemon/gate-logger.d.ts +9 -0
- package/dist/daemon/gate-logger.js +2 -0
- package/dist/daemon/gate-logger.js.map +1 -0
- package/dist/daemon/jinn-claim-loop.js +22 -4
- package/dist/daemon/jinn-claim-loop.js.map +1 -1
- package/dist/daemon/readiness-gate.d.ts +1 -4
- package/dist/daemon/readiness-gate.js.map +1 -1
- package/dist/daemon/spend-cap-gate.d.ts +40 -0
- package/dist/daemon/spend-cap-gate.js +46 -0
- package/dist/daemon/spend-cap-gate.js.map +1 -0
- package/dist/dashboard/assets/index-3quVQqik.js +167 -0
- package/dist/dashboard/assets/index-BVAWkLwY.css +1 -0
- package/dist/dashboard/index.html +2 -2
- package/dist/discovery/http.d.ts +7 -0
- package/dist/discovery/http.js +567 -24
- package/dist/discovery/http.js.map +1 -1
- package/dist/discovery/onchain.js +197 -5
- package/dist/discovery/onchain.js.map +1 -1
- package/dist/discovery/types.d.ts +235 -0
- package/dist/discovery/types.js +40 -0
- package/dist/discovery/types.js.map +1 -1
- package/dist/discovery/with-fallback.js +41 -0
- package/dist/discovery/with-fallback.js.map +1 -1
- package/dist/earning/bootstrap.d.ts +31 -3
- package/dist/earning/bootstrap.js +94 -22
- package/dist/earning/bootstrap.js.map +1 -1
- package/dist/earning/faucet.d.ts +1 -1
- package/dist/earning/faucet.js +2 -2
- package/dist/earning/faucet.js.map +1 -1
- package/dist/earning/safe-adapter.js +34 -11
- package/dist/earning/safe-adapter.js.map +1 -1
- package/dist/earning/types.d.ts +6 -6
- package/dist/earning/viem-clients.d.ts +11 -4
- package/dist/earning/viem-clients.js +14 -5
- package/dist/earning/viem-clients.js.map +1 -1
- package/dist/erc8004/identity.d.ts +19 -3
- package/dist/erc8004/identity.js +38 -11
- package/dist/erc8004/identity.js.map +1 -1
- package/dist/erc8004/index.d.ts +1 -1
- package/dist/erc8004/index.js.map +1 -1
- package/dist/eval/eval-harness-run.d.ts +63 -0
- package/dist/eval/eval-harness-run.js +123 -0
- package/dist/eval/eval-harness-run.js.map +1 -0
- package/dist/eval/orchestrator.d.ts +163 -0
- package/dist/eval/orchestrator.js +232 -0
- package/dist/eval/orchestrator.js.map +1 -0
- package/dist/eval/paired.d.ts +68 -0
- package/dist/eval/paired.js +93 -0
- package/dist/eval/paired.js.map +1 -0
- package/dist/eval/resolve-slate-tasks.d.ts +35 -0
- package/dist/eval/resolve-slate-tasks.js +56 -0
- package/dist/eval/resolve-slate-tasks.js.map +1 -0
- package/dist/eval/screen-discovery.d.ts +22 -0
- package/dist/eval/screen-discovery.js +71 -0
- package/dist/eval/screen-discovery.js.map +1 -0
- package/dist/eval/screen-progress.d.ts +41 -0
- package/dist/eval/screen-progress.js +60 -0
- package/dist/eval/screen-progress.js.map +1 -0
- package/dist/eval/screen-runner.d.ts +30 -0
- package/dist/eval/screen-runner.js +289 -0
- package/dist/eval/screen-runner.js.map +1 -0
- package/dist/eval/screen.d.ts +107 -0
- package/dist/eval/screen.js +159 -0
- package/dist/eval/screen.js.map +1 -0
- package/dist/eval/slope.d.ts +29 -0
- package/dist/eval/slope.js +46 -0
- package/dist/eval/slope.js.map +1 -0
- package/dist/eval/train-sequence.d.ts +35 -0
- package/dist/eval/train-sequence.js +59 -0
- package/dist/eval/train-sequence.js.map +1 -0
- package/dist/eval/wilson.d.ts +45 -0
- package/dist/eval/wilson.js +48 -0
- package/dist/eval/wilson.js.map +1 -0
- package/dist/events/types.d.ts +2 -2
- package/dist/harnesses/cost-estimates.d.ts +10 -31
- package/dist/harnesses/cost-estimates.js +11 -43
- package/dist/harnesses/cost-estimates.js.map +1 -1
- package/dist/harnesses/engine/canonical-json.js +5 -3
- package/dist/harnesses/engine/canonical-json.js.map +1 -1
- package/dist/harnesses/engine/engine.d.ts +37 -4
- package/dist/harnesses/engine/engine.js +151 -20
- package/dist/harnesses/engine/engine.js.map +1 -1
- package/dist/harnesses/engine/persistence.d.ts +38 -4
- package/dist/harnesses/engine/persistence.js +71 -6
- package/dist/harnesses/engine/persistence.js.map +1 -1
- package/dist/harnesses/engine/state.d.ts +9 -0
- package/dist/harnesses/engine/state.js +23 -10
- package/dist/harnesses/engine/state.js.map +1 -1
- package/dist/harnesses/impls/hermes-agent/adapter.d.ts +2 -0
- package/dist/harnesses/impls/hermes-agent/adapter.js +8 -5
- package/dist/harnesses/impls/hermes-agent/adapter.js.map +1 -1
- package/dist/harnesses/impls/hermes-agent/bootstrap.d.ts +1 -0
- package/dist/harnesses/impls/hermes-agent/bootstrap.js +10 -3
- package/dist/harnesses/impls/hermes-agent/bootstrap.js.map +1 -1
- package/dist/harnesses/impls/hermes-agent/config-builder.d.ts +1 -1
- package/dist/harnesses/impls/hermes-agent/config-builder.js +4 -2
- package/dist/harnesses/impls/hermes-agent/config-builder.js.map +1 -1
- package/dist/harnesses/impls/hermes-agent/harness.d.ts +31 -3
- package/dist/harnesses/impls/hermes-agent/harness.js +84 -7
- package/dist/harnesses/impls/hermes-agent/harness.js.map +1 -1
- package/dist/harnesses/impls/hermes-agent/prompt.d.ts +6 -6
- package/dist/harnesses/impls/hermes-agent/prompt.js +6 -6
- package/dist/harnesses/impls/index.d.ts +2 -0
- package/dist/harnesses/impls/index.js +2 -0
- package/dist/harnesses/impls/index.js.map +1 -1
- package/dist/harnesses/impls/learner/adapters/claude-code.d.ts +17 -0
- package/dist/harnesses/impls/learner/adapters/claude-code.js +118 -14
- package/dist/harnesses/impls/learner/adapters/claude-code.js.map +1 -1
- package/dist/harnesses/impls/learner/adapters/codex-code.d.ts +9 -0
- package/dist/harnesses/impls/learner/adapters/codex-code.js +30 -8
- package/dist/harnesses/impls/learner/adapters/codex-code.js.map +1 -1
- package/dist/harnesses/impls/learner/harness.d.ts +41 -1
- package/dist/harnesses/impls/learner/harness.js +78 -4
- package/dist/harnesses/impls/learner/harness.js.map +1 -1
- package/dist/harnesses/impls/learner/harvest.d.ts +3 -1
- package/dist/harnesses/impls/learner/harvest.js +30 -6
- package/dist/harnesses/impls/learner/harvest.js.map +1 -1
- package/dist/harnesses/impls/learner/plugin-path.js +1 -0
- package/dist/harnesses/impls/learner/plugin-path.js.map +1 -1
- package/dist/harnesses/impls/learner/restoration-patch.d.ts +2 -2
- package/dist/harnesses/impls/learner/restoration-patch.js +25 -6
- package/dist/harnesses/impls/learner/restoration-patch.js.map +1 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js +21 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js.map +1 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js +3 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js.map +1 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.d.ts +74 -5
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js +103 -32
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js.map +1 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.d.ts +2 -2
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.js +3 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.js.map +1 -1
- package/dist/harnesses/readiness-registry.d.ts +7 -0
- package/dist/harnesses/readiness-registry.js +9 -0
- package/dist/harnesses/readiness-registry.js.map +1 -1
- package/dist/harnesses/types.d.ts +14 -0
- package/dist/learner/revert-decision.d.ts +74 -0
- package/dist/learner/revert-decision.js +73 -0
- package/dist/learner/revert-decision.js.map +1 -0
- package/dist/learner/revert-stats.d.ts +38 -0
- package/dist/learner/revert-stats.js +86 -0
- package/dist/learner/revert-stats.js.map +1 -0
- package/dist/local-provider-url.d.ts +3 -0
- package/dist/local-provider-url.js +28 -0
- package/dist/local-provider-url.js.map +1 -0
- package/dist/main.js +199 -104
- package/dist/main.js.map +1 -1
- package/dist/mcp/get-codedigest-reward.d.ts +13 -0
- package/dist/mcp/get-codedigest-reward.js +23 -0
- package/dist/mcp/get-codedigest-reward.js.map +1 -0
- package/dist/mcp/server.js +23 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/observability/debug-report-assemble.d.ts +43 -0
- package/dist/observability/debug-report-assemble.js +80 -0
- package/dist/observability/debug-report-assemble.js.map +1 -0
- package/dist/observability/emit-event.d.ts +9 -2
- package/dist/observability/emit-event.js +36 -2
- package/dist/observability/emit-event.js.map +1 -1
- package/dist/observability/file-logger.d.ts +69 -0
- package/dist/observability/file-logger.js +177 -0
- package/dist/observability/file-logger.js.map +1 -0
- package/dist/observability/redact-secrets.d.ts +65 -0
- package/dist/observability/redact-secrets.js +300 -0
- package/dist/observability/redact-secrets.js.map +1 -0
- package/dist/observability/tar.d.ts +30 -0
- package/dist/observability/tar.js +102 -0
- package/dist/observability/tar.js.map +1 -0
- package/dist/plugins/learner/.claude-plugin/plugin.json +1 -1
- package/dist/plugins/learner/.codex-plugin/plugin.json +1 -1
- package/dist/plugins/learner/hooks/session-start +30 -1
- package/dist/plugins/learner/skills/learn/consolidator-prompt.md +22 -1
- package/dist/plugins/learner/skills/learn/promoter-prompt.md +72 -1
- package/dist/preflight/deployment-readiness.d.ts +147 -0
- package/dist/preflight/deployment-readiness.js +366 -0
- package/dist/preflight/deployment-readiness.js.map +1 -0
- package/dist/preflight/pidfile-liveness.d.ts +50 -0
- package/dist/preflight/pidfile-liveness.js +117 -0
- package/dist/preflight/pidfile-liveness.js.map +1 -0
- package/dist/preflight/rpc-network.d.ts +40 -0
- package/dist/preflight/rpc-network.js +67 -1
- package/dist/preflight/rpc-network.js.map +1 -1
- package/dist/rpc/transport.d.ts +145 -0
- package/dist/rpc/transport.js +319 -0
- package/dist/rpc/transport.js.map +1 -0
- package/dist/scripts/donation-consumption-acceptance.js +7 -28
- package/dist/scripts/donation-consumption-acceptance.js.map +1 -1
- package/dist/scripts/swe-rebench-v2-pytest-missing.json +16 -0
- package/dist/solver-nets/prediction-operator-ux.d.ts +1 -2
- package/dist/solver-nets/prediction-operator-ux.js +56 -53
- package/dist/solver-nets/prediction-operator-ux.js.map +1 -1
- package/dist/solver-nets/registry.d.ts +19 -1
- package/dist/solver-nets/registry.js +37 -24
- package/dist/solver-nets/registry.js.map +1 -1
- package/dist/solver-types/_swe-rebench-v2-held-out-slate.d.ts +76 -0
- package/dist/solver-types/_swe-rebench-v2-held-out-slate.js +156 -0
- package/dist/solver-types/_swe-rebench-v2-held-out-slate.js.map +1 -0
- package/dist/solver-types/_swe-rebench-v2-pool-recovery.d.ts +81 -0
- package/dist/solver-types/_swe-rebench-v2-pool-recovery.js +116 -0
- package/dist/solver-types/_swe-rebench-v2-pool-recovery.js.map +1 -0
- package/dist/solver-types/_swe-rebench-v2-pool.d.ts +9 -2
- package/dist/solver-types/_swe-rebench-v2-pool.js +15 -20
- package/dist/solver-types/_swe-rebench-v2-pool.js.map +1 -1
- package/dist/solver-types/_swe-rebench-v2-state.d.ts +24 -0
- package/dist/solver-types/_swe-rebench-v2-state.js +33 -0
- package/dist/solver-types/_swe-rebench-v2-state.js.map +1 -1
- package/dist/solver-types/_swe-rebench-v2-validated-pool.d.ts +116 -2
- package/dist/solver-types/_swe-rebench-v2-validated-pool.js +296 -21
- package/dist/solver-types/_swe-rebench-v2-validated-pool.js.map +1 -1
- package/dist/solver-types/slates/held-out-slate.swe-rebench-v2.v1.json +20 -0
- package/dist/solver-types/slates/held-out-slate.swe-rebench-v2.v2.json +19 -0
- package/dist/solver-types/slates/held-out-slate.swe-rebench-v2.v2.screening-report.json +628 -0
- package/dist/solver-types/solver-type.d.ts +8 -0
- package/dist/solver-types/swe-rebench-v2-auto.d.ts +20 -11
- package/dist/solver-types/swe-rebench-v2-auto.js +64 -19
- package/dist/solver-types/swe-rebench-v2-auto.js.map +1 -1
- package/dist/solver-types/swe-rebench-v2.d.ts +10 -2
- package/dist/solver-types/swe-rebench-v2.js +233 -13
- package/dist/solver-types/swe-rebench-v2.js.map +1 -1
- package/dist/solvernets/daemon-init.d.ts +1 -1
- package/dist/solvernets/daemon-init.js +19 -4
- package/dist/solvernets/daemon-init.js.map +1 -1
- package/dist/solvernets/launched-record-dispatcher.d.ts +7 -0
- package/dist/solvernets/launched-record-dispatcher.js +10 -4
- package/dist/solvernets/launched-record-dispatcher.js.map +1 -1
- package/dist/solvernets/registry-client-erc8004.js +40 -37
- package/dist/solvernets/registry-client-erc8004.js.map +1 -1
- package/dist/solvernets/registry-client.d.ts +6 -0
- package/dist/solvernets/store.d.ts +2 -2
- package/dist/solvernets/store.js +7 -2
- package/dist/solvernets/store.js.map +1 -1
- package/dist/spend/ai-units-config.d.ts +49 -0
- package/dist/spend/ai-units-config.js +34 -0
- package/dist/spend/ai-units-config.js.map +1 -0
- package/dist/spend/ai-units.d.ts +140 -0
- package/dist/spend/ai-units.js +229 -0
- package/dist/spend/ai-units.js.map +1 -0
- package/dist/spend/cost-surface-status.d.ts +12 -0
- package/dist/spend/cost-surface-status.js +24 -0
- package/dist/spend/cost-surface-status.js.map +1 -0
- package/dist/spend/credential.d.ts +39 -0
- package/dist/spend/credential.js +71 -0
- package/dist/spend/credential.js.map +1 -0
- package/dist/spend/daemon-config.d.ts +13 -0
- package/dist/spend/daemon-config.js +24 -0
- package/dist/spend/daemon-config.js.map +1 -0
- package/dist/spend/pricing.d.ts +16 -0
- package/dist/spend/pricing.js +26 -0
- package/dist/spend/pricing.js.map +1 -0
- package/dist/spend/record.d.ts +13 -0
- package/dist/spend/record.js +43 -0
- package/dist/spend/record.js.map +1 -0
- package/dist/spend/usage.d.ts +27 -0
- package/dist/spend/usage.js +113 -0
- package/dist/spend/usage.js.map +1 -0
- package/dist/store/store.d.ts +187 -0
- package/dist/store/store.js +467 -4
- package/dist/store/store.js.map +1 -1
- package/dist/trajectory/transcript-parsers/codex-session.d.ts +12 -6
- package/dist/trajectory/transcript-parsers/codex-session.js +114 -13
- package/dist/trajectory/transcript-parsers/codex-session.js.map +1 -1
- package/dist/trajectory/transcript-parsers/types.d.ts +8 -8
- package/dist/trajectory/transcript-session-dirs.d.ts +18 -0
- package/dist/trajectory/transcript-session-dirs.js +85 -0
- package/dist/trajectory/transcript-session-dirs.js.map +1 -0
- package/dist/trajectory/transcript-watcher.d.ts +20 -1
- package/dist/trajectory/transcript-watcher.js +108 -32
- package/dist/trajectory/transcript-watcher.js.map +1 -1
- package/dist/tx-retry.d.ts +25 -0
- package/dist/tx-retry.js +95 -7
- package/dist/tx-retry.js.map +1 -1
- package/dist/types/payloads/portfolio-v0.d.ts +3 -3
- package/dist/types/payloads/prediction-apy-v0.d.ts +3 -3
- package/dist/types/payloads/prediction-v0.d.ts +12 -12
- package/dist/vendor/@jinn-network/sdk/dist/payloads/swe-rebench-v2.d.ts +108 -1
- package/dist/vendor/@jinn-network/sdk/dist/payloads/swe-rebench-v2.js +25 -1
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2-held-out-slate.d.ts +65 -0
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2-held-out-slate.js +123 -0
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2.d.ts +2 -2
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2.js +1 -1
- package/dist/vendor/@jinn-network/sdk/package.json +4 -0
- package/docker-compose.yml +3 -2
- package/package.json +30 -18
- package/plugins/learner/.claude-plugin/plugin.json +1 -1
- package/plugins/learner/.codex-plugin/plugin.json +1 -1
- package/plugins/learner/hooks/session-start +30 -1
- package/plugins/learner/skills/learn/consolidator-prompt.md +22 -1
- package/plugins/learner/skills/learn/promoter-prompt.md +72 -1
- package/plugins/swe-rebench-v2-diffmin/README.md +10 -9
- package/plugins/swe-rebench-v2-diffmin/jinn.plugin.json +1 -1
- package/plugins/swe-rebench-v2-diffmin/skills/diffmin/SKILL.md +15 -10
- package/plugins/swe-rebench-v2-diffmin/skills/test-map/SKILL.md +10 -12
- package/plugins/swe-rebench-v2-runtime/.claude-plugin/plugin.json +1 -1
- package/plugins/swe-rebench-v2-runtime/.codex-plugin/plugin.json +3 -3
- package/plugins/swe-rebench-v2-runtime/README.md +6 -6
- package/plugins/swe-rebench-v2-runtime/hooks/hooks.json +16 -0
- package/plugins/swe-rebench-v2-runtime/hooks/session-start +74 -0
- package/plugins/swe-rebench-v2-runtime/jinn.plugin.json +2 -3
- package/plugins/swe-rebench-v2-runtime/skills/task/SKILL.md +81 -0
- package/dist/dashboard/assets/index-BUlE8F3Y.js +0 -330
- package/dist/dashboard/assets/index-blqc7eqq.css +0 -32
- package/plugins/swe-rebench-v2-runtime/skills/orient/SKILL.md +0 -29
- package/plugins/swe-rebench-v2-runtime/skills/plan/SKILL.md +0 -53
|
@@ -1,26 +1,63 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
2
|
+
import { promisify } from 'node:util';
|
|
3
|
+
const execFileAsync = promisify(execFile);
|
|
2
4
|
/**
|
|
3
5
|
* Shared `hermes <args>` spawn scaffolding for both probes: resolves the binary
|
|
4
|
-
* and timeout from config, runs `
|
|
5
|
-
* Each probe applies its own classification/parsing to the returned
|
|
6
|
+
* and timeout from config, runs async `execFile`, and extracts the spawn-error
|
|
7
|
+
* code. Each probe applies its own classification/parsing to the returned
|
|
8
|
+
* result.
|
|
9
|
+
*
|
|
10
|
+
* Async (#778 follow-up): previously `spawnSync` — see file header. A non-zero
|
|
11
|
+
* exit OR a kill-by-timeout surfaces here as a thrown `child_process` error
|
|
12
|
+
* whose payload carries `stdout`, `stderr`, `code`, `signal`, and `killed`. We
|
|
13
|
+
* unwrap that into the same `{status, signal, stdout, stderr}` shape the old
|
|
14
|
+
* sync code returned so callers don't have to special-case throw vs exit.
|
|
6
15
|
*/
|
|
7
|
-
function runHermes(args, config) {
|
|
16
|
+
async function runHermes(args, config) {
|
|
8
17
|
const hermesBin = config.hermesPath ?? 'hermes';
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
18
|
+
// Default 10s here (vs 30s on the sync path) because these probes fire every
|
|
19
|
+
// readiness-registry tick. A truly stuck shell-out must not snowball into a
|
|
20
|
+
// per-tick 30s timer outstanding.
|
|
21
|
+
const timeoutMs = config.hermesDoctorTimeoutMs ?? 10_000;
|
|
22
|
+
try {
|
|
23
|
+
const { stdout, stderr } = await execFileAsync(hermesBin, args, {
|
|
24
|
+
timeout: timeoutMs,
|
|
25
|
+
encoding: 'utf8',
|
|
26
|
+
});
|
|
27
|
+
return {
|
|
28
|
+
result: { status: 0, signal: null, stdout, stderr },
|
|
29
|
+
errorCode: undefined,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
const errno = err;
|
|
34
|
+
// `code` is either a numeric exit code (process ran and exited non-zero)
|
|
35
|
+
// OR a string errno like `ENOENT` (spawn failed entirely). Disambiguate
|
|
36
|
+
// so the classification logic in probeHermesDoctor matches the sync
|
|
37
|
+
// semantics it always had.
|
|
38
|
+
const codeIsString = typeof errno.code === 'string';
|
|
39
|
+
const numericStatus = !codeIsString && typeof errno.code === 'number' ? errno.code : null;
|
|
40
|
+
const errorCode = codeIsString ? errno.code : undefined;
|
|
41
|
+
const stdout = typeof errno.stdout === 'string' ? errno.stdout : errno.stdout?.toString() ?? '';
|
|
42
|
+
const stderr = typeof errno.stderr === 'string' ? errno.stderr : errno.stderr?.toString() ?? '';
|
|
43
|
+
return {
|
|
44
|
+
result: {
|
|
45
|
+
status: numericStatus,
|
|
46
|
+
signal: errno.signal ?? null,
|
|
47
|
+
stdout,
|
|
48
|
+
stderr,
|
|
49
|
+
},
|
|
50
|
+
errorCode,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
16
53
|
}
|
|
17
54
|
/**
|
|
18
|
-
*
|
|
55
|
+
* Asynchronously runs `hermes doctor` and classifies the result. Pure (no
|
|
19
56
|
* Hono dependency) so the harness layer can call it without pulling the API
|
|
20
57
|
* server in.
|
|
21
58
|
*/
|
|
22
|
-
export function probeHermesDoctor(config = {}) {
|
|
23
|
-
const { result, errorCode } = runHermes(['doctor'], config);
|
|
59
|
+
export async function probeHermesDoctor(config = {}) {
|
|
60
|
+
const { result, errorCode } = await runHermes(['doctor'], config);
|
|
24
61
|
// installed=true means we found the binary on disk. ENOENT is the only
|
|
25
62
|
// definitive not-installed signal. Other errors (EACCES = wrong
|
|
26
63
|
// permissions; ETIMEDOUT = ran but didn't finish in time) indicate the
|
|
@@ -62,7 +99,7 @@ function isCredentialLineUnusable(line) {
|
|
|
62
99
|
return /\bauth failed\b|\(re-auth may be required\)|\brate-limited\b|\bexhausted\b/i.test(line);
|
|
63
100
|
}
|
|
64
101
|
/**
|
|
65
|
-
*
|
|
102
|
+
* Asynchronously runs `hermes auth list <provider>` and classifies whether the
|
|
66
103
|
* provider has a usable credential (API-key OR OAuth) in Hermes's credential
|
|
67
104
|
* pool.
|
|
68
105
|
*
|
|
@@ -89,8 +126,8 @@ function isCredentialLineUnusable(line) {
|
|
|
89
126
|
* `hermes doctor` exits 0 even when every provider is logged out (it treats
|
|
90
127
|
* missing providers as warnings), so the harness must probe auth directly.
|
|
91
128
|
*/
|
|
92
|
-
export function probeHermesAuthStatus(provider, config = {}) {
|
|
93
|
-
const { result, errorCode } = runHermes(['auth', 'list', provider], config);
|
|
129
|
+
export async function probeHermesAuthStatus(provider, config = {}) {
|
|
130
|
+
const { result, errorCode } = await runHermes(['auth', 'list', provider], config);
|
|
94
131
|
const raw = (result.stdout ?? '').trim().slice(0, 4000);
|
|
95
132
|
// Binary not found, or any other spawn error, or no output → not authed.
|
|
96
133
|
// Empty stdout means `auth_list_command` skipped the provider section
|
|
@@ -113,8 +150,8 @@ export function probeHermesAuthStatus(provider, config = {}) {
|
|
|
113
150
|
return { provider, authed: hasUsableCredential, raw };
|
|
114
151
|
}
|
|
115
152
|
export function addHermesDoctorRoutes(app, config = {}) {
|
|
116
|
-
app.get('/api/hermes/doctor', (c) => {
|
|
117
|
-
return c.json(probeHermesDoctor(config));
|
|
153
|
+
app.get('/api/hermes/doctor', async (c) => {
|
|
154
|
+
return c.json(await probeHermesDoctor(config));
|
|
118
155
|
});
|
|
119
156
|
}
|
|
120
157
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hermes-doctor-endpoint.js","sourceRoot":"","sources":["../../src/api/hermes-doctor-endpoint.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hermes-doctor-endpoint.js","sourceRoot":"","sources":["../../src/api/hermes-doctor-endpoint.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,7 +42,6 @@ export type LauncherGeneratorPollSummary = {
|
|
|
42
42
|
live: number;
|
|
43
43
|
repostable: number;
|
|
44
44
|
saturated: number;
|
|
45
|
-
abandoned: number;
|
|
46
45
|
};
|
|
47
46
|
export interface LauncherStatusBudgetView {
|
|
48
47
|
safeAddress: string;
|
|
@@ -75,9 +74,12 @@ export interface LauncherGeneratorStateSnapshot {
|
|
|
75
74
|
at: string;
|
|
76
75
|
};
|
|
77
76
|
cadenceMs?: number;
|
|
77
|
+
poolPublicationUpdatedAt?: string;
|
|
78
|
+
poolPublicationPriorSize?: number;
|
|
79
|
+
poolPublicationCurrentSize?: number;
|
|
78
80
|
}
|
|
79
81
|
export interface GatherLauncherStatusDeps {
|
|
80
|
-
config: Pick<JinnConfig, '
|
|
82
|
+
config: Pick<JinnConfig, 'joinedSolverNets'>;
|
|
81
83
|
/** Returns the generator's live state, or `undefined` if the SolverNet has no generator. */
|
|
82
84
|
getGeneratorState: (netName: string) => LauncherGeneratorStateSnapshot | undefined;
|
|
83
85
|
/** Count of Tasks created by the operator that are still in flight for the named SolverNet. */
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { joinedDisplayName, solverTypeFromJoinedContract } from '../solver-nets/registry.js';
|
|
1
2
|
/**
|
|
2
3
|
* Derive the high-level generator state. `errored` wins over `active`/`paused`
|
|
3
4
|
* because the operator wants to see the failure first; `paused` only fires
|
|
@@ -37,17 +38,18 @@ function isStalePoll(snapshot, now) {
|
|
|
37
38
|
export async function gatherLauncherStatus(deps) {
|
|
38
39
|
const now = deps.now?.() ?? Date.now();
|
|
39
40
|
const nets = [];
|
|
40
|
-
for (const [
|
|
41
|
-
//
|
|
42
|
-
//
|
|
43
|
-
//
|
|
44
|
-
|
|
45
|
-
const
|
|
41
|
+
for (const [cid, joined] of Object.entries(deps.config.joinedSolverNets ?? {})) {
|
|
42
|
+
// Issue #421 removed the legacy `solverNets` config block; iterate the
|
|
43
|
+
// operator's joined SolverNets keyed by manifestCid. Launched-record
|
|
44
|
+
// ownership filters happen at the launched-record surface, not here.
|
|
45
|
+
const displayName = joinedDisplayName(cid, joined);
|
|
46
|
+
const solverType = solverTypeFromJoinedContract(joined);
|
|
47
|
+
const snapshot = deps.getGeneratorState(displayName);
|
|
46
48
|
const generatorState = deriveGeneratorState(snapshot);
|
|
47
49
|
const stale = isStalePoll(snapshot, now);
|
|
48
50
|
const [openTasks, reservedBudgetWei, safeBalanceWei] = await Promise.all([
|
|
49
|
-
Promise.resolve(deps.getOpenTaskCount(
|
|
50
|
-
Promise.resolve(deps.getReservedBudgetWei(
|
|
51
|
+
Promise.resolve(deps.getOpenTaskCount(displayName)),
|
|
52
|
+
Promise.resolve(deps.getReservedBudgetWei(displayName)),
|
|
51
53
|
Promise.resolve(deps.getSafeBalanceWei()),
|
|
52
54
|
]);
|
|
53
55
|
const generator = {
|
|
@@ -63,9 +65,8 @@ export async function gatherLauncherStatus(deps) {
|
|
|
63
65
|
if (snapshot?.lastError)
|
|
64
66
|
generator.lastError = { ...snapshot.lastError };
|
|
65
67
|
const safeAddress = typeof deps.safeAddress === 'function' ? deps.safeAddress() : deps.safeAddress;
|
|
66
|
-
const solverType = net?.solverType;
|
|
67
68
|
nets.push({
|
|
68
|
-
name,
|
|
69
|
+
name: displayName,
|
|
69
70
|
...(typeof solverType === 'string' && solverType.length > 0 ? { solverType } : {}),
|
|
70
71
|
generator,
|
|
71
72
|
openTasks,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launcher-status.js","sourceRoot":"","sources":["../../src/api/launcher-status.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"launcher-status.js","sourceRoot":"","sources":["../../src/api/launcher-status.ts"],"names":[],"mappings":"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"}
|
|
@@ -62,7 +62,7 @@ export interface FetchPostedTasksOptions {
|
|
|
62
62
|
before?: string;
|
|
63
63
|
}
|
|
64
64
|
export interface GatherLauncherTasksDeps {
|
|
65
|
-
config: Pick<JinnConfig, '
|
|
65
|
+
config: Pick<JinnConfig, 'joinedSolverNets'>;
|
|
66
66
|
creatorAddress: string;
|
|
67
67
|
fetchPostedTasks: (opts: FetchPostedTasksOptions) => Promise<PostedTaskRecord[]> | PostedTaskRecord[];
|
|
68
68
|
now?: () => number;
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
* Spec: spec/2026-05-05-launcher-role-and-mode.md §5.3.
|
|
28
28
|
*/
|
|
29
29
|
import { getSolverNetContract } from '../vendor/@jinn-network/sdk/dist/solvernets/index.js';
|
|
30
|
+
import { joinedDisplayName, solverTypeFromJoinedContract } from '../solver-nets/registry.js';
|
|
30
31
|
const DEFAULT_LIMIT = 25;
|
|
31
32
|
const MAX_LIMIT = 100;
|
|
32
33
|
const CLAIMS_CURRENT_UNAVAILABLE_FALLBACK = 0;
|
|
@@ -48,16 +49,19 @@ function claimMaxFallbackForSolverType(solverType) {
|
|
|
48
49
|
* Build a solverType → solverNet-name lookup from the live config. The v1
|
|
49
50
|
* mapping is 1:1 (one SolverNet per solver-type), but we index defensively so
|
|
50
51
|
* a future fork-of-prediction config doesn't silently mislabel posted Tasks.
|
|
52
|
+
*
|
|
53
|
+
* Post-issue-#421 the lookup reads `joinedSolverNets` (manifest-CID-keyed)
|
|
54
|
+
* exclusively; solverType is synthesised from `joined.contract`.
|
|
51
55
|
*/
|
|
52
|
-
function buildSolverTypeToNetIndex(
|
|
56
|
+
function buildSolverTypeToNetIndex(joinedSolverNets) {
|
|
53
57
|
const index = new Map();
|
|
54
|
-
if (!
|
|
58
|
+
if (!joinedSolverNets)
|
|
55
59
|
return index;
|
|
56
|
-
for (const [
|
|
57
|
-
const solverType =
|
|
58
|
-
if (
|
|
59
|
-
|
|
60
|
-
|
|
60
|
+
for (const [cid, joined] of Object.entries(joinedSolverNets)) {
|
|
61
|
+
const solverType = solverTypeFromJoinedContract(joined);
|
|
62
|
+
if (!solverType || index.has(solverType))
|
|
63
|
+
continue;
|
|
64
|
+
index.set(solverType, joinedDisplayName(cid, joined));
|
|
61
65
|
}
|
|
62
66
|
return index;
|
|
63
67
|
}
|
|
@@ -109,7 +113,7 @@ export async function gatherLauncherTasks(deps, opts = {}) {
|
|
|
109
113
|
return 1;
|
|
110
114
|
return 0;
|
|
111
115
|
});
|
|
112
|
-
const solverTypeIndex = buildSolverTypeToNetIndex(deps.config.
|
|
116
|
+
const solverTypeIndex = buildSolverTypeToNetIndex(deps.config.joinedSolverNets);
|
|
113
117
|
const tasks = sorted.slice(0, limit).map((record) => mapRecordToEntry(record, solverTypeIndex));
|
|
114
118
|
const cursor = tasks.length === limit && tasks.length > 0
|
|
115
119
|
? { before: tasks[tasks.length - 1].postedAt }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launcher-tasks.js","sourceRoot":"","sources":["../../src/api/launcher-tasks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"launcher-tasks.js","sourceRoot":"","sources":["../../src/api/launcher-tasks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEpE,OAAO,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAoE7F,MAAM,aAAa,GAAG,EAAE,CAAC;AACzB,MAAM,SAAS,GAAG,GAAG,CAAC;AACtB,MAAM,mCAAmC,GAAG,CAAC,CAAC;AAC9C,MAAM,+BAA+B,GAAG,EAAE,CAAC;AAE3C,SAAS,6BAA6B,CAAC,UAA8B;IACnE,IAAI,CAAC,UAAU;QAAE,OAAO,+BAA+B,CAAC;IACxD,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,OAAO,IAAI,CAAC,IAAI,OAAO,KAAK,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,OAAO,+BAA+B,CAAC;IACzC,CAAC;IACD,MAAM,QAAQ,GAAG,oBAAoB,CAAC;QACpC,EAAE,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC;QAChC,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;KACvC,CAAC,CAAC;IACH,OAAO,QAAQ,EAAE,mBAAmB,EAAE,SAAS,IAAI,+BAA+B,CAAC;AACrF,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,yBAAyB,CAChC,gBAA4D;IAE5D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,IAAI,CAAC,gBAAgB;QAAE,OAAO,KAAK,CAAC;IACpC,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC7D,MAAM,UAAU,GAAG,4BAA4B,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;YAAE,SAAS;QACnD,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,gBAAgB,CACvB,MAAwB,EACxB,eAAoC;IAEpC,MAAM,SAAS,GACb,MAAM,CAAC,SAAS;WACb,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;WACxE,SAAS,CAAC;IACf,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,IAAI,mCAAmC,CAAC;IACpF,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,6BAA6B,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACzF,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,IAAI,GAAG,CAAC;IAChD,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,IAAI,QAAQ,CAAC;IAC7D,MAAM,KAAK,GAAsB;QAC/B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS;QACT,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM;QAC7B,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,SAAS,EAAE;QAClD,MAAM,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE;KACnC,CAAC;IACF,IAAI,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC;QACjC,KAAK,CAAC,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;IAC3D,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,KAAK,CAAC,OAAO,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;IACxC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAA6B,EAC7B,OAAmC,EAAE;IAErC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,IAAI,aAAa,CAAC;IAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAEtE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CACnC,IAAI,CAAC,gBAAgB,CAAC;QACpB,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,KAAK;QACL,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC,CACH,CAAC;IAEF,qEAAqE;IACrE,wEAAwE;IACxE,2EAA2E;IAC3E,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACxC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAClC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAE,OAAO,EAAE,GAAG,EAAE,CAAC;QAC/D,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC;QACnC,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAE,OAAO,CAAC,CAAC;QAClC,OAAO,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAChF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;IAEhG,MAAM,MAAM,GACV,KAAK,CAAC,MAAM,KAAK,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QACxC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,QAAQ,EAAE;QAC/C,CAAC,CAAC,SAAS,CAAC;IAEhB,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IACjD,MAAM,QAAQ,GAA0B;QACtC,aAAa,EAAE,CAAC;QAChB,WAAW,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE;QAClD,KAAK;KACN,CAAC;IACF,IAAI,MAAM;QAAE,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;IACrC,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* /v1/status loop-completion + impl-state commit cadence (#959).
|
|
3
|
+
*
|
|
4
|
+
* Two read-only rollups that previously required `railway ssh` + a throwaway
|
|
5
|
+
* SQLite script (`measure-learning.sh`):
|
|
6
|
+
*
|
|
7
|
+
* - `gatherLoopCompletion` aggregates `gating.phasesCompleted` across every
|
|
8
|
+
* `task_runs` row (extracted in SQL, not by parsing the full solution blob) —
|
|
9
|
+
* how far the engine loop got, and how many runs completed the full
|
|
10
|
+
* self-improvement loop.
|
|
11
|
+
* - `gatherImplStateCadence` reports per-repo commit count + last-commit
|
|
12
|
+
* cadence (count + short hash + timestamp) under the impl-state root. The
|
|
13
|
+
* LLM-authored commit subject is deliberately not surfaced on this un-authed
|
|
14
|
+
* endpoint.
|
|
15
|
+
*
|
|
16
|
+
* Both degrade to zeroes / an empty list on malformed / missing inputs — the
|
|
17
|
+
* status endpoint must never throw because of these additions.
|
|
18
|
+
*/
|
|
19
|
+
import type { Store } from '../store/store.js';
|
|
20
|
+
export interface LoopCompletionStatus {
|
|
21
|
+
/** Total task_runs rows scanned. */
|
|
22
|
+
total: number;
|
|
23
|
+
/** Rows with a non-null delivery_tx_hash. */
|
|
24
|
+
delivered: number;
|
|
25
|
+
/** Rows whose parsed gating.phasesCompleted had at least one phase. */
|
|
26
|
+
withGating: number;
|
|
27
|
+
/** Rows whose phases include 'execute'. */
|
|
28
|
+
reachedExecute: number;
|
|
29
|
+
/** Rows whose phases include 'improve'. */
|
|
30
|
+
reachedImprove: number;
|
|
31
|
+
/** Rows whose phases include 'memory-consolidation'. */
|
|
32
|
+
reachedMemoryConsolidation: number;
|
|
33
|
+
/** Rows whose phases include BOTH 'improve' AND 'memory-consolidation'. */
|
|
34
|
+
fullLoop: number;
|
|
35
|
+
/** phase -> count of rows whose phases include it. */
|
|
36
|
+
phaseCounts: Record<string, number>;
|
|
37
|
+
}
|
|
38
|
+
export interface ImplStateRepoCadence {
|
|
39
|
+
/** Directory name of the repo under the impl-state root. */
|
|
40
|
+
name: string;
|
|
41
|
+
/** `git rev-list --count HEAD`. */
|
|
42
|
+
commits: number;
|
|
43
|
+
/**
|
|
44
|
+
* Last commit cadence, or null when the repo has no commits / git failed.
|
|
45
|
+
* Deliberately excludes the commit subject: the impl-state commits are
|
|
46
|
+
* LLM-authored (learner promoter/consolidator messages) and can carry task
|
|
47
|
+
* content / file paths / cross-operator material, and `/v1/status` is
|
|
48
|
+
* un-authed. Count + short hash + timestamp is all the AC asked for.
|
|
49
|
+
*/
|
|
50
|
+
lastCommit: {
|
|
51
|
+
shortHash: string;
|
|
52
|
+
timestamp: number;
|
|
53
|
+
date: string;
|
|
54
|
+
} | null;
|
|
55
|
+
}
|
|
56
|
+
export interface ImplStateCadenceStatus {
|
|
57
|
+
/** One entry per git repo found directly under the impl-state root. */
|
|
58
|
+
repos: ImplStateRepoCadence[];
|
|
59
|
+
/** Present only when the root scan itself failed (degraded read). */
|
|
60
|
+
error?: string;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Aggregate loop-completion across all task_runs. A row's phases come from the
|
|
64
|
+
* `gating.phasesCompleted` array, which `getGatingRows` extracts in SQL via
|
|
65
|
+
* `json_extract` so the fat `solution_outputs_json` blob never leaves SQLite
|
|
66
|
+
* (this endpoint is hard-polled ~1.5s by the SPA). `phasesJson` is the JSON
|
|
67
|
+
* text of that array (absent path / malformed ⇒ `[]`). Never throws — a
|
|
68
|
+
* malformed array yields `[]` for that row, a store read failure yields an
|
|
69
|
+
* all-zero rollup.
|
|
70
|
+
*/
|
|
71
|
+
export declare function gatherLoopCompletion(store: Store): LoopCompletionStatus;
|
|
72
|
+
/**
|
|
73
|
+
* Report per-repo commit cadence under the impl-state root. Each immediate
|
|
74
|
+
* subdirectory containing a `.git` entry is a repo; non-repos are skipped.
|
|
75
|
+
* An absent / empty / unreadable root yields an empty list. A git failure on
|
|
76
|
+
* one repo degrades that repo's `commits` to 0 and `lastCommit` to null
|
|
77
|
+
* without aborting the scan.
|
|
78
|
+
*/
|
|
79
|
+
export declare function gatherImplStateCadence(implStateDirRoot: string | undefined): ImplStateCadenceStatus;
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* /v1/status loop-completion + impl-state commit cadence (#959).
|
|
3
|
+
*
|
|
4
|
+
* Two read-only rollups that previously required `railway ssh` + a throwaway
|
|
5
|
+
* SQLite script (`measure-learning.sh`):
|
|
6
|
+
*
|
|
7
|
+
* - `gatherLoopCompletion` aggregates `gating.phasesCompleted` across every
|
|
8
|
+
* `task_runs` row (extracted in SQL, not by parsing the full solution blob) —
|
|
9
|
+
* how far the engine loop got, and how many runs completed the full
|
|
10
|
+
* self-improvement loop.
|
|
11
|
+
* - `gatherImplStateCadence` reports per-repo commit count + last-commit
|
|
12
|
+
* cadence (count + short hash + timestamp) under the impl-state root. The
|
|
13
|
+
* LLM-authored commit subject is deliberately not surfaced on this un-authed
|
|
14
|
+
* endpoint.
|
|
15
|
+
*
|
|
16
|
+
* Both degrade to zeroes / an empty list on malformed / missing inputs — the
|
|
17
|
+
* status endpoint must never throw because of these additions.
|
|
18
|
+
*/
|
|
19
|
+
import { execFileSync } from 'node:child_process';
|
|
20
|
+
import { existsSync, readdirSync } from 'node:fs';
|
|
21
|
+
import { join } from 'node:path';
|
|
22
|
+
import { TaskRunPersistence } from '../harnesses/engine/persistence.js';
|
|
23
|
+
/** Phases the engine self-improvement loop walks; counted in `phaseCounts`. */
|
|
24
|
+
const FULL_LOOP_PHASES = ['improve', 'memory-consolidation'];
|
|
25
|
+
/**
|
|
26
|
+
* Aggregate loop-completion across all task_runs. A row's phases come from the
|
|
27
|
+
* `gating.phasesCompleted` array, which `getGatingRows` extracts in SQL via
|
|
28
|
+
* `json_extract` so the fat `solution_outputs_json` blob never leaves SQLite
|
|
29
|
+
* (this endpoint is hard-polled ~1.5s by the SPA). `phasesJson` is the JSON
|
|
30
|
+
* text of that array (absent path / malformed ⇒ `[]`). Never throws — a
|
|
31
|
+
* malformed array yields `[]` for that row, a store read failure yields an
|
|
32
|
+
* all-zero rollup.
|
|
33
|
+
*/
|
|
34
|
+
export function gatherLoopCompletion(store) {
|
|
35
|
+
const empty = {
|
|
36
|
+
total: 0,
|
|
37
|
+
delivered: 0,
|
|
38
|
+
withGating: 0,
|
|
39
|
+
reachedExecute: 0,
|
|
40
|
+
reachedImprove: 0,
|
|
41
|
+
reachedMemoryConsolidation: 0,
|
|
42
|
+
fullLoop: 0,
|
|
43
|
+
phaseCounts: {},
|
|
44
|
+
};
|
|
45
|
+
let rows;
|
|
46
|
+
try {
|
|
47
|
+
rows = new TaskRunPersistence(store.db).getGatingRows();
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return empty;
|
|
51
|
+
}
|
|
52
|
+
const phaseCounts = {};
|
|
53
|
+
const acc = { ...empty, phaseCounts };
|
|
54
|
+
for (const row of rows) {
|
|
55
|
+
acc.total += 1;
|
|
56
|
+
if (row.deliveredTxHash)
|
|
57
|
+
acc.delivered += 1;
|
|
58
|
+
const phases = parsePhases(row.phasesJson);
|
|
59
|
+
if (phases.length > 0)
|
|
60
|
+
acc.withGating += 1;
|
|
61
|
+
for (const phase of new Set(phases)) {
|
|
62
|
+
phaseCounts[phase] = (phaseCounts[phase] ?? 0) + 1;
|
|
63
|
+
}
|
|
64
|
+
if (phases.includes('execute'))
|
|
65
|
+
acc.reachedExecute += 1;
|
|
66
|
+
if (phases.includes('improve'))
|
|
67
|
+
acc.reachedImprove += 1;
|
|
68
|
+
if (phases.includes('memory-consolidation'))
|
|
69
|
+
acc.reachedMemoryConsolidation += 1;
|
|
70
|
+
if (FULL_LOOP_PHASES.every((p) => phases.includes(p)))
|
|
71
|
+
acc.fullLoop += 1;
|
|
72
|
+
}
|
|
73
|
+
return acc;
|
|
74
|
+
}
|
|
75
|
+
/** Parse the JSON text of `gating.phasesCompleted` (null/malformed ⇒ `[]`). */
|
|
76
|
+
function parsePhases(phasesJson) {
|
|
77
|
+
if (!phasesJson)
|
|
78
|
+
return [];
|
|
79
|
+
try {
|
|
80
|
+
const phases = JSON.parse(phasesJson);
|
|
81
|
+
return Array.isArray(phases) ? phases.filter((p) => typeof p === 'string') : [];
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return [];
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Report per-repo commit cadence under the impl-state root. Each immediate
|
|
89
|
+
* subdirectory containing a `.git` entry is a repo; non-repos are skipped.
|
|
90
|
+
* An absent / empty / unreadable root yields an empty list. A git failure on
|
|
91
|
+
* one repo degrades that repo's `commits` to 0 and `lastCommit` to null
|
|
92
|
+
* without aborting the scan.
|
|
93
|
+
*/
|
|
94
|
+
export function gatherImplStateCadence(implStateDirRoot) {
|
|
95
|
+
if (!implStateDirRoot || !existsSync(implStateDirRoot)) {
|
|
96
|
+
return { repos: [] };
|
|
97
|
+
}
|
|
98
|
+
let entries;
|
|
99
|
+
try {
|
|
100
|
+
entries = readdirSync(implStateDirRoot, { withFileTypes: true })
|
|
101
|
+
.filter((d) => d.isDirectory())
|
|
102
|
+
.map((d) => d.name)
|
|
103
|
+
.sort();
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
return { repos: [], error: err instanceof Error ? err.message : String(err) };
|
|
107
|
+
}
|
|
108
|
+
const repos = [];
|
|
109
|
+
for (const name of entries) {
|
|
110
|
+
const repoDir = join(implStateDirRoot, name);
|
|
111
|
+
if (!existsSync(join(repoDir, '.git')))
|
|
112
|
+
continue;
|
|
113
|
+
repos.push({ name, ...readRepoCadence(repoDir) });
|
|
114
|
+
}
|
|
115
|
+
return { repos };
|
|
116
|
+
}
|
|
117
|
+
function readRepoCadence(repoDir) {
|
|
118
|
+
let commits = 0;
|
|
119
|
+
let lastCommit = null;
|
|
120
|
+
try {
|
|
121
|
+
const count = git(repoDir, ['rev-list', '--count', 'HEAD']).trim();
|
|
122
|
+
commits = Number.parseInt(count, 10);
|
|
123
|
+
if (!Number.isFinite(commits))
|
|
124
|
+
commits = 0;
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
return { commits: 0, lastCommit: null };
|
|
128
|
+
}
|
|
129
|
+
try {
|
|
130
|
+
// %h short hash, %ct committer unix timestamp, %cI committer ISO date.
|
|
131
|
+
// Subject (%s) is deliberately NOT fetched — see ImplStateRepoCadence.lastCommit.
|
|
132
|
+
const raw = git(repoDir, ['log', '-1', '--format=%h%x1f%ct%x1f%cI', 'HEAD']);
|
|
133
|
+
const [shortHash, ts, iso] = raw.trim().split('\x1f');
|
|
134
|
+
if (shortHash) {
|
|
135
|
+
lastCommit = {
|
|
136
|
+
shortHash: shortHash.trim(),
|
|
137
|
+
timestamp: Number.parseInt(ts ?? '', 10) || 0,
|
|
138
|
+
date: (iso ?? '').trim(),
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
// Keep the commit count we already have; leave lastCommit null.
|
|
144
|
+
}
|
|
145
|
+
return { commits, lastCommit };
|
|
146
|
+
}
|
|
147
|
+
/** Read-only `git -C <repo> …`. Bounded buffer; throws on git failure. */
|
|
148
|
+
function git(repoDir, args) {
|
|
149
|
+
return execFileSync('git', ['-C', repoDir, ...args], {
|
|
150
|
+
encoding: 'utf8',
|
|
151
|
+
maxBuffer: 4 * 1024 * 1024,
|
|
152
|
+
timeout: 10_000,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=loop-completion-build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loop-completion-build.js","sourceRoot":"","sources":["../../src/api/loop-completion-build.ts"],"names":[],"mappings":"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"}
|