@jinn-network/client 0.1.6 → 0.1.7
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/CHANGELOG.md +33 -0
- package/deployments/deployment-jinn-mvi-l1-sepolia-fast.json +23 -4
- package/deployments/deployment-jinn-mvi-l1-sepolia.json +23 -4
- package/deployments/deployment-jinn-mvi-l2-baseSepolia.json +5 -4
- package/dist/adapters/mech/adapter.d.ts +38 -1
- package/dist/adapters/mech/adapter.js +241 -54
- package/dist/adapters/mech/adapter.js.map +1 -1
- package/dist/adapters/mech/contracts.d.ts +17 -4
- package/dist/adapters/mech/contracts.js +8 -2
- package/dist/adapters/mech/contracts.js.map +1 -1
- package/dist/adapters/mech/safe-revert.d.ts +20 -0
- package/dist/adapters/mech/safe-revert.js +12 -4
- package/dist/adapters/mech/safe-revert.js.map +1 -1
- package/dist/adapters/mech/safe.d.ts +5 -1
- package/dist/adapters/mech/safe.js +27 -8
- package/dist/adapters/mech/safe.js.map +1 -1
- package/dist/adapters/mech/verdict-code.d.ts +1 -0
- package/dist/adapters/mech/verdict-code.js +18 -0
- package/dist/adapters/mech/verdict-code.js.map +1 -1
- package/dist/api/admin-endpoint.d.ts +15 -3
- package/dist/api/admin-endpoint.js +24 -2
- package/dist/api/admin-endpoint.js.map +1 -1
- package/dist/api/bootstrap-endpoint.js +49 -0
- package/dist/api/bootstrap-endpoint.js.map +1 -1
- package/dist/api/codex-doctor-endpoint.d.ts +73 -0
- package/dist/api/codex-doctor-endpoint.js +177 -0
- package/dist/api/codex-doctor-endpoint.js.map +1 -0
- package/dist/api/discovery-endpoint.d.ts +1 -0
- package/dist/api/discovery-endpoint.js +26 -0
- package/dist/api/discovery-endpoint.js.map +1 -1
- package/dist/api/fleet-build.d.ts +1 -0
- package/dist/api/fleet-build.js +2 -1
- package/dist/api/fleet-build.js.map +1 -1
- package/dist/api/gather-status.d.ts +11 -0
- package/dist/api/gather-status.js +400 -4
- package/dist/api/gather-status.js.map +1 -1
- package/dist/api/hermes-doctor-endpoint.d.ts +117 -0
- package/dist/api/hermes-doctor-endpoint.js +229 -23
- package/dist/api/hermes-doctor-endpoint.js.map +1 -1
- package/dist/api/launcher-status.d.ts +21 -16
- package/dist/api/launcher-status.js +2 -1
- package/dist/api/launcher-status.js.map +1 -1
- package/dist/api/portfolio-v0-build.d.ts +10 -0
- package/dist/api/portfolio-v0-build.js +24 -5
- package/dist/api/portfolio-v0-build.js.map +1 -1
- package/dist/api/prediction-v1-build.d.ts +10 -0
- package/dist/api/prediction-v1-build.js +7 -1
- package/dist/api/prediction-v1-build.js.map +1 -1
- package/dist/api/server.d.ts +31 -1
- package/dist/api/server.js +68 -1
- package/dist/api/server.js.map +1 -1
- package/dist/api/setup-endpoints.d.ts +16 -0
- package/dist/api/setup-endpoints.js +78 -4
- package/dist/api/setup-endpoints.js.map +1 -1
- package/dist/api/setup-retry-endpoint.d.ts +19 -0
- package/dist/api/setup-retry-endpoint.js +32 -0
- package/dist/api/setup-retry-endpoint.js.map +1 -0
- package/dist/api/solvernets-endpoints.d.ts +8 -0
- package/dist/api/solvernets-endpoints.js +71 -43
- package/dist/api/solvernets-endpoints.js.map +1 -1
- package/dist/api/status-build.d.ts +72 -0
- package/dist/api/status-build.js +73 -18
- package/dist/api/status-build.js.map +1 -1
- package/dist/api/task-run-routing.d.ts +7 -0
- package/dist/api/task-run-routing.js +12 -0
- package/dist/api/task-run-routing.js.map +1 -0
- package/dist/api/task-runs-build.d.ts +21 -0
- package/dist/api/task-runs-build.js +14 -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/chain-read-errors.d.ts +10 -0
- package/dist/chain-read-errors.js +15 -0
- package/dist/chain-read-errors.js.map +1 -1
- package/dist/cli/commands/auth.js +1 -1
- package/dist/cli/commands/auth.js.map +1 -1
- package/dist/cli/commands/create.js +3 -2
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts +2 -0
- package/dist/cli/commands/doctor.js +2 -0
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/rewards.js +11 -7
- package/dist/cli/commands/rewards.js.map +1 -1
- package/dist/cli/commands/solver-nets.js +24 -9
- package/dist/cli/commands/solver-nets.js.map +1 -1
- package/dist/cli/commands/status.js +1 -1
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/tasks.js +86 -9
- package/dist/cli/commands/tasks.js.map +1 -1
- package/dist/cli/commands/update.d.ts +10 -0
- package/dist/cli/commands/update.js +36 -0
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/introspection-context.js +5 -0
- package/dist/cli/introspection-context.js.map +1 -1
- package/dist/cli/task-native-readiness.d.ts +3 -1
- package/dist/cli/task-native-readiness.js +28 -6
- package/dist/cli/task-native-readiness.js.map +1 -1
- package/dist/config.d.ts +106 -5
- package/dist/config.js +97 -18
- package/dist/config.js.map +1 -1
- package/dist/daemon/checkpoint-loop.d.ts +48 -0
- package/dist/daemon/checkpoint-loop.js +76 -0
- package/dist/daemon/checkpoint-loop.js.map +1 -0
- package/dist/daemon/creator.d.ts +1 -1
- package/dist/daemon/creator.js +7 -3
- package/dist/daemon/creator.js.map +1 -1
- package/dist/daemon/daemon.d.ts +19 -0
- package/dist/daemon/daemon.js +68 -1
- package/dist/daemon/daemon.js.map +1 -1
- package/dist/daemon/eviction-loop.d.ts +40 -0
- package/dist/daemon/eviction-loop.js +67 -0
- package/dist/daemon/eviction-loop.js.map +1 -0
- package/dist/daemon/jinn-claim-loop-wiring.d.ts +33 -0
- package/dist/daemon/jinn-claim-loop-wiring.js +40 -0
- package/dist/daemon/jinn-claim-loop-wiring.js.map +1 -0
- package/dist/daemon/jinn-claim-loop.d.ts +24 -17
- package/dist/daemon/jinn-claim-loop.js +77 -23
- package/dist/daemon/jinn-claim-loop.js.map +1 -1
- package/dist/daemon/skip-log-dedup.d.ts +69 -0
- package/dist/daemon/skip-log-dedup.js +106 -0
- package/dist/daemon/skip-log-dedup.js.map +1 -0
- package/dist/dashboard/assets/index-BUlE8F3Y.js +330 -0
- package/dist/dashboard/assets/index-blqc7eqq.css +32 -0
- package/dist/dashboard/index.html +2 -2
- package/dist/discovery/factory.d.ts +17 -5
- package/dist/discovery/factory.js +46 -18
- package/dist/discovery/factory.js.map +1 -1
- package/dist/discovery/http.js +142 -3
- package/dist/discovery/http.js.map +1 -1
- package/dist/discovery/onchain.d.ts +5 -0
- package/dist/discovery/onchain.js +407 -15
- package/dist/discovery/onchain.js.map +1 -1
- package/dist/discovery/types.d.ts +45 -1
- package/dist/discovery/types.js +8 -10
- package/dist/discovery/types.js.map +1 -1
- package/dist/discovery/with-fallback.d.ts +7 -0
- package/dist/discovery/with-fallback.js +10 -0
- package/dist/discovery/with-fallback.js.map +1 -1
- package/dist/earning/bootstrap.d.ts +92 -1
- package/dist/earning/bootstrap.js +203 -63
- package/dist/earning/bootstrap.js.map +1 -1
- package/dist/earning/contracts.d.ts +14 -0
- package/dist/earning/contracts.js +17 -5
- package/dist/earning/contracts.js.map +1 -1
- package/dist/earning/funding-plan.js +27 -18
- package/dist/earning/funding-plan.js.map +1 -1
- package/dist/earning/jinn-rewards.d.ts +46 -0
- package/dist/earning/jinn-rewards.js +32 -0
- package/dist/earning/jinn-rewards.js.map +1 -1
- package/dist/earning/safe-adapter.d.ts +2 -0
- package/dist/earning/safe-adapter.js +26 -12
- package/dist/earning/safe-adapter.js.map +1 -1
- package/dist/earning/store.d.ts +8 -0
- package/dist/earning/store.js.map +1 -1
- package/dist/earning/testnet-setup-migration.d.ts +12 -0
- package/dist/earning/testnet-setup-migration.js +27 -1
- package/dist/earning/testnet-setup-migration.js.map +1 -1
- package/dist/earning/types.d.ts +15 -0
- package/dist/erc8004/reputation.d.ts +8 -0
- package/dist/erc8004/reputation.js +22 -3
- package/dist/erc8004/reputation.js.map +1 -1
- package/dist/harnesses/cost-estimates.d.ts +145 -0
- package/dist/harnesses/cost-estimates.js +297 -0
- package/dist/harnesses/cost-estimates.js.map +1 -0
- package/dist/harnesses/engine/engine.d.ts +72 -0
- package/dist/harnesses/engine/engine.js +105 -8
- package/dist/harnesses/engine/engine.js.map +1 -1
- package/dist/harnesses/engine/persistence.d.ts +51 -1
- package/dist/harnesses/engine/persistence.js +118 -5
- package/dist/harnesses/engine/persistence.js.map +1 -1
- package/dist/harnesses/engine/work-dir-reaper.d.ts +65 -0
- package/dist/harnesses/engine/work-dir-reaper.js +100 -0
- package/dist/harnesses/engine/work-dir-reaper.js.map +1 -0
- package/dist/harnesses/impls/hermes-agent/adapter.js +40 -0
- package/dist/harnesses/impls/hermes-agent/adapter.js.map +1 -1
- package/dist/harnesses/impls/hermes-agent/bootstrap.d.ts +20 -0
- package/dist/harnesses/impls/hermes-agent/bootstrap.js +40 -6
- package/dist/harnesses/impls/hermes-agent/bootstrap.js.map +1 -1
- package/dist/harnesses/impls/hermes-agent/harness.d.ts +59 -1
- package/dist/harnesses/impls/hermes-agent/harness.js +104 -0
- package/dist/harnesses/impls/hermes-agent/harness.js.map +1 -1
- package/dist/harnesses/impls/index.d.ts +7 -0
- package/dist/harnesses/impls/index.js +16 -1
- package/dist/harnesses/impls/index.js.map +1 -1
- package/dist/harnesses/impls/learner/harness.d.ts +38 -4
- package/dist/harnesses/impls/learner/harness.js +96 -2
- package/dist/harnesses/impls/learner/harness.js.map +1 -1
- package/dist/harnesses/impls/learner/plugin-path.d.ts +0 -13
- package/dist/harnesses/impls/learner/plugin-path.js +35 -15
- package/dist/harnesses/impls/learner/plugin-path.js.map +1 -1
- package/dist/harnesses/impls/learner/types.d.ts +11 -0
- package/dist/harnesses/impls/stub.d.ts +58 -0
- package/dist/harnesses/impls/stub.js +89 -0
- package/dist/harnesses/impls/stub.js.map +1 -0
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.d.ts +69 -50
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js +178 -93
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js.map +1 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.d.ts +12 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js +121 -7
- 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 +15 -0
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/hf-fetcher.js +54 -4
- 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 +6 -0
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.js +1 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.js.map +1 -1
- package/dist/harnesses/readiness-registry.js +9 -1
- package/dist/harnesses/readiness-registry.js.map +1 -1
- package/dist/main.js +371 -82
- package/dist/main.js.map +1 -1
- package/dist/observability/emit-event.d.ts +1 -1
- package/dist/observability/emit-event.js.map +1 -1
- package/dist/operator-errors.d.ts +7 -0
- package/dist/operator-errors.js +13 -1
- package/dist/operator-errors.js.map +1 -1
- package/dist/plugins/learner/.claude-plugin/plugin.json +9 -0
- package/dist/plugins/learner/.codex-plugin/plugin.json +39 -0
- package/dist/plugins/learner/AGENTS.md +40 -0
- package/dist/plugins/learner/CLAUDE.md +33 -0
- package/dist/plugins/learner/README.md +59 -0
- package/dist/plugins/learner/hooks/hooks.json +16 -0
- package/dist/plugins/learner/hooks/session-start +38 -0
- package/dist/plugins/learner/skills/learn/SKILL.md +412 -0
- package/dist/plugins/learner/skills/learn/analyst-prompt.md +68 -0
- package/dist/plugins/learner/skills/learn/consolidator-prompt.md +94 -0
- package/dist/plugins/learner/skills/learn/explorer-prompt.md +53 -0
- package/dist/plugins/learner/skills/learn/planner-prompt.md +87 -0
- package/dist/plugins/learner/skills/learn/promoter-prompt.md +113 -0
- package/dist/plugins/learner/skills/learn/step-worker-prompt.md +47 -0
- package/dist/plugins/learner/skills/learn/strategist-prompt.md +85 -0
- package/dist/restart-daemon.d.ts +90 -0
- package/dist/restart-daemon.js +95 -0
- package/dist/restart-daemon.js.map +1 -0
- package/dist/setup/halt-mode.d.ts +14 -0
- package/dist/setup/halt-mode.js +17 -0
- package/dist/setup/halt-mode.js.map +1 -0
- package/dist/solver-nets/prediction-operator-ux.js +43 -3
- package/dist/solver-nets/prediction-operator-ux.js.map +1 -1
- package/dist/solver-nets/registry.d.ts +1 -0
- package/dist/solver-nets/registry.js +1 -1
- package/dist/solver-nets/registry.js.map +1 -1
- package/dist/solver-types/_swe-rebench-v2-pool-cache.d.ts +58 -0
- package/dist/solver-types/_swe-rebench-v2-pool-cache.js +87 -0
- package/dist/solver-types/_swe-rebench-v2-pool-cache.js.map +1 -0
- package/dist/solver-types/_swe-rebench-v2-substrate.d.ts +1 -0
- package/dist/solver-types/_swe-rebench-v2-substrate.js +10 -0
- package/dist/solver-types/_swe-rebench-v2-substrate.js.map +1 -1
- package/dist/solver-types/_swe-rebench-v2-validated-pool.d.ts +65 -0
- package/dist/solver-types/_swe-rebench-v2-validated-pool.js +243 -26
- package/dist/solver-types/_swe-rebench-v2-validated-pool.js.map +1 -1
- package/dist/solver-types/swe-rebench-v2-auto.d.ts +22 -7
- package/dist/solver-types/swe-rebench-v2-auto.js +45 -20
- package/dist/solver-types/swe-rebench-v2-auto.js.map +1 -1
- package/dist/solver-types/swe-rebench-v2.d.ts +13 -2
- package/dist/solver-types/swe-rebench-v2.js +233 -94
- package/dist/solver-types/swe-rebench-v2.js.map +1 -1
- package/dist/solvernets/daemon-init.d.ts +10 -2
- package/dist/solvernets/daemon-init.js +22 -2
- package/dist/solvernets/daemon-init.js.map +1 -1
- package/dist/solvernets/launched-record-dispatcher.js +35 -7
- package/dist/solvernets/launched-record-dispatcher.js.map +1 -1
- package/dist/solvernets/store.d.ts +5 -0
- package/dist/solvernets/store.js +1 -0
- package/dist/solvernets/store.js.map +1 -1
- package/dist/store/store.d.ts +15 -0
- package/dist/store/store.js +118 -3
- package/dist/store/store.js.map +1 -1
- package/dist/tasks/sources.d.ts +18 -1
- package/dist/tasks/sources.js +33 -5
- package/dist/tasks/sources.js.map +1 -1
- package/dist/tx-retry.d.ts +151 -19
- package/dist/tx-retry.js +286 -32
- package/dist/tx-retry.js.map +1 -1
- package/dist/types/payloads/prediction-apy-v0.d.ts +5 -5
- package/dist/types/payloads/prediction-v0.d.ts +5 -5
- package/dist/types/task-document.d.ts +392 -0
- package/dist/types/task-document.js +10 -0
- package/dist/types/task-document.js.map +1 -1
- package/dist/types/task.d.ts +28 -0
- package/dist/util/extract-tx-hash.d.ts +14 -0
- package/dist/util/extract-tx-hash.js +19 -0
- package/dist/util/extract-tx-hash.js.map +1 -0
- package/dist/vendor/@jinn-network/sdk/dist/contracts.js +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/manifest-schema.d.ts +3 -0
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/manifest-schema.js +1 -0
- package/package.json +29 -12
- package/dist/dashboard/assets/index-DOlzFN8a.css +0 -32
- package/dist/dashboard/assets/index-NkZ7CTAT.js +0 -140
|
@@ -50,6 +50,7 @@ CREATE TABLE IF NOT EXISTS task_runs (
|
|
|
50
50
|
|
|
51
51
|
window_start_ts INTEGER NOT NULL,
|
|
52
52
|
window_end_ts INTEGER NOT NULL,
|
|
53
|
+
run_started_at INTEGER,
|
|
53
54
|
|
|
54
55
|
pre_snapshot_captured_at INTEGER,
|
|
55
56
|
pre_snapshot_payload TEXT,
|
|
@@ -71,6 +72,15 @@ CREATE TABLE IF NOT EXISTS task_runs (
|
|
|
71
72
|
manifest_generated_at INTEGER,
|
|
72
73
|
evidence_hash TEXT,
|
|
73
74
|
|
|
75
|
+
-- Additive column (schema migration 2026-05-23, in-flight gate fix):
|
|
76
|
+
-- solver_net_manifest_cid: the SolverNet manifest CID this task was
|
|
77
|
+
-- posted under (Task.solverNetManifestCid). Distinct from the artifact
|
|
78
|
+
-- manifest_cid above, which is the PACKAGING output CID. Used by
|
|
79
|
+
-- hasInFlightFor so distinct SolverNets that share the same routing key
|
|
80
|
+
-- (e.g. two SWE-rebench-v2 launches at different manifestCids) each hold
|
|
81
|
+
-- their own in-flight slot.
|
|
82
|
+
solver_net_manifest_cid TEXT,
|
|
83
|
+
|
|
74
84
|
-- Additive column (schema migration 2026-04-17, full Task threading):
|
|
75
85
|
-- task_payload: full Task JSON, captured at observe() time.
|
|
76
86
|
-- NULL for pre-migration rows (legacy fallback in engine consumers).
|
|
@@ -121,11 +131,17 @@ function runAdditiveMigrations(db) {
|
|
|
121
131
|
{ column: 'task_role', ddl: 'ALTER TABLE task_runs ADD COLUMN task_role TEXT' },
|
|
122
132
|
{ column: 'task_id', ddl: 'ALTER TABLE task_runs ADD COLUMN task_id TEXT' },
|
|
123
133
|
{ column: 'attempt_index', ddl: 'ALTER TABLE task_runs ADD COLUMN attempt_index INTEGER' },
|
|
134
|
+
{ column: 'run_started_at', ddl: 'ALTER TABLE task_runs ADD COLUMN run_started_at INTEGER' },
|
|
124
135
|
// ERC-8004 payload v2 (jinn-mono-9fe5): persists executor mode + codeDigest
|
|
125
136
|
// from pack() so deliver() can emit a v2 setMetadata payload after the
|
|
126
137
|
// transient maps are cleared.
|
|
127
138
|
{ column: 'executor_mode', ddl: 'ALTER TABLE task_runs ADD COLUMN executor_mode TEXT' },
|
|
128
139
|
{ column: 'executor_code_digest', ddl: 'ALTER TABLE task_runs ADD COLUMN executor_code_digest TEXT' },
|
|
140
|
+
// Per-SolverNet in-flight gate (2026-05-23): distinct SolverNets that
|
|
141
|
+
// share the same `contract.id.version` routing key must each hold their
|
|
142
|
+
// own in-flight slot, otherwise a task in SolverNet B is silently
|
|
143
|
+
// rejected while SolverNet A is busy. See `hasInFlightFor`.
|
|
144
|
+
{ column: 'solver_net_manifest_cid', ddl: 'ALTER TABLE task_runs ADD COLUMN solver_net_manifest_cid TEXT' },
|
|
129
145
|
];
|
|
130
146
|
// Fetch existing column names once so each ALTER is a no-op if the column
|
|
131
147
|
// already exists (avoids duplicate-column-name errors on newer DBs).
|
|
@@ -143,6 +159,28 @@ function runAdditiveMigrations(db) {
|
|
|
143
159
|
throw err;
|
|
144
160
|
}
|
|
145
161
|
}
|
|
162
|
+
// Backfill `solver_net_manifest_cid` from the persisted Task JSON for rows
|
|
163
|
+
// inserted before this column existed. Idempotent: only touches rows where
|
|
164
|
+
// the column is NULL and the JSON path resolves to a string. better-sqlite3
|
|
165
|
+
// ships with the JSON1 extension, so `json_extract` is always available.
|
|
166
|
+
// Failures (e.g. malformed JSON) are non-fatal — the row keeps NULL and
|
|
167
|
+
// legacy behaviour (no per-SolverNet slot) applies for that row.
|
|
168
|
+
try {
|
|
169
|
+
db.exec(`
|
|
170
|
+
UPDATE task_runs
|
|
171
|
+
SET solver_net_manifest_cid = json_extract(task_payload, '$.solverNetManifestCid')
|
|
172
|
+
WHERE solver_net_manifest_cid IS NULL
|
|
173
|
+
AND task_payload IS NOT NULL
|
|
174
|
+
AND json_valid(task_payload) = 1
|
|
175
|
+
AND json_extract(task_payload, '$.solverNetManifestCid') IS NOT NULL
|
|
176
|
+
`);
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
// Best-effort backfill: a database without JSON1 (very unlikely with
|
|
180
|
+
// better-sqlite3's bundled SQLite) just keeps NULL and reverts to legacy
|
|
181
|
+
// behaviour for those rows. The forward-going `insertDiscovered` path
|
|
182
|
+
// populates the column directly.
|
|
183
|
+
}
|
|
146
184
|
}
|
|
147
185
|
// ── Helpers ───────────────────────────────────────────────────────────────────
|
|
148
186
|
function parseJson(raw) {
|
|
@@ -159,6 +197,7 @@ function rowToTaskRun(row) {
|
|
|
159
197
|
onchainCreationTx: row.onchain_creation_tx,
|
|
160
198
|
onchainCreationBlock: row.onchain_creation_block,
|
|
161
199
|
solverType: row.solver_type,
|
|
200
|
+
solverNetManifestCid: row.solver_net_manifest_cid,
|
|
162
201
|
taskRole: (row.task_role ?? null),
|
|
163
202
|
implName: row.impl_name,
|
|
164
203
|
state: row.state,
|
|
@@ -167,6 +206,7 @@ function rowToTaskRun(row) {
|
|
|
167
206
|
implStateDir: row.impl_state_dir,
|
|
168
207
|
windowStartTs: row.window_start_ts,
|
|
169
208
|
windowEndTs: row.window_end_ts,
|
|
209
|
+
runStartedAt: row.run_started_at,
|
|
170
210
|
preSnapshotCapturedAt: row.pre_snapshot_captured_at,
|
|
171
211
|
preSnapshotPayload: parseJson(row.pre_snapshot_payload),
|
|
172
212
|
postSnapshotCapturedAt: row.post_snapshot_captured_at,
|
|
@@ -209,15 +249,16 @@ export class TaskRunPersistence {
|
|
|
209
249
|
* `requestId` already exists, this is a no-op (INSERT OR IGNORE).
|
|
210
250
|
*/
|
|
211
251
|
insertDiscovered(input) {
|
|
252
|
+
const now = Date.now();
|
|
212
253
|
this.db.prepare(`
|
|
213
254
|
INSERT OR IGNORE INTO task_runs (
|
|
214
255
|
request_id, task_id, attempt_index, task_cid, onchain_creation_tx, onchain_creation_block,
|
|
215
|
-
solver_type, task_role, state, state_updated_at, window_start_ts, window_end_ts,
|
|
216
|
-
task_payload
|
|
256
|
+
solver_type, task_role, state, state_updated_at, window_start_ts, window_end_ts, run_started_at,
|
|
257
|
+
task_payload, solver_net_manifest_cid
|
|
217
258
|
) VALUES (
|
|
218
259
|
@requestId, @taskId, @attemptIndex, @taskCid, @onchainCreationTx, @onchainCreationBlock,
|
|
219
|
-
@solverType, @taskRole, 'DISCOVERED', @now, @windowStartTs, @windowEndTs,
|
|
220
|
-
@taskPayload
|
|
260
|
+
@solverType, @taskRole, 'DISCOVERED', @now, @windowStartTs, @windowEndTs, @runStartedAt,
|
|
261
|
+
@taskPayload, @solverNetManifestCid
|
|
221
262
|
)
|
|
222
263
|
`).run({
|
|
223
264
|
requestId: input.requestId,
|
|
@@ -228,10 +269,12 @@ export class TaskRunPersistence {
|
|
|
228
269
|
onchainCreationBlock: input.onchainCreationBlock,
|
|
229
270
|
solverType: input.solverType ?? null,
|
|
230
271
|
taskRole: input.taskRole ?? null,
|
|
231
|
-
now
|
|
272
|
+
now,
|
|
232
273
|
windowStartTs: input.windowStartTs,
|
|
233
274
|
windowEndTs: input.windowEndTs,
|
|
275
|
+
runStartedAt: input.runStartedAt ?? now,
|
|
234
276
|
taskPayload: input.task ? JSON.stringify(input.task) : null,
|
|
277
|
+
solverNetManifestCid: input.task?.solverNetManifestCid ?? null,
|
|
235
278
|
});
|
|
236
279
|
}
|
|
237
280
|
/**
|
|
@@ -376,6 +419,67 @@ export class TaskRunPersistence {
|
|
|
376
419
|
const rows = this.db.prepare(sql).all(...terminalList);
|
|
377
420
|
return rows.map(rowToTaskRun);
|
|
378
421
|
}
|
|
422
|
+
/**
|
|
423
|
+
* Fetch all terminal tasks (COMPLETE or FAILED).
|
|
424
|
+
* Used by the working-dir reaper (issue #320) to decide which on-disk
|
|
425
|
+
* scratch directories are safe to delete.
|
|
426
|
+
*/
|
|
427
|
+
getTerminal() {
|
|
428
|
+
const terminalList = [...TERMINAL_STATES];
|
|
429
|
+
const placeholders = terminalList.map(() => '?').join(', ');
|
|
430
|
+
const sql = `SELECT * FROM task_runs WHERE state IN (${placeholders}) ORDER BY state_updated_at ASC`;
|
|
431
|
+
const rows = this.db.prepare(sql).all(...terminalList);
|
|
432
|
+
return rows.map(rowToTaskRun);
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* Atomic snapshot for the working-dir reaper (issue #320): every task run's
|
|
436
|
+
* request ID partitioned into terminal (COMPLETE / FAILED) vs in-flight.
|
|
437
|
+
*
|
|
438
|
+
* The reaper must NOT read in-flight and terminal sets as two separate
|
|
439
|
+
* queries — a task transitioning DELIVERING → COMPLETE between the two reads
|
|
440
|
+
* could be seen by neither (or, worse, classified terminal) and have its
|
|
441
|
+
* working directory deleted while `deliver()` still references files in it.
|
|
442
|
+
* A single `SELECT` is a single statement, so the snapshot is internally
|
|
443
|
+
* consistent: every row is observed at exactly one state.
|
|
444
|
+
*/
|
|
445
|
+
getReaperPartition() {
|
|
446
|
+
const rows = this.db
|
|
447
|
+
.prepare('SELECT request_id, state FROM task_runs')
|
|
448
|
+
.all();
|
|
449
|
+
const terminal = new Set();
|
|
450
|
+
const inFlight = new Set();
|
|
451
|
+
for (const r of rows) {
|
|
452
|
+
if (TERMINAL_STATES.has(r.state)) {
|
|
453
|
+
terminal.add(r.request_id);
|
|
454
|
+
}
|
|
455
|
+
else {
|
|
456
|
+
inFlight.add(r.request_id);
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
return { terminal, inFlight };
|
|
460
|
+
}
|
|
461
|
+
/**
|
|
462
|
+
* Single-flight gate: is there a non-terminal task_run for the given
|
|
463
|
+
* routing key + role, in the same SolverNet?
|
|
464
|
+
*
|
|
465
|
+
* `manifestCid` scopes the gate to one SolverNet:
|
|
466
|
+
* - When a string is supplied, only rows whose `solver_net_manifest_cid`
|
|
467
|
+
* equals it count. Two distinct SolverNets that happen to share the
|
|
468
|
+
* same `contract.id.version` routing key (e.g. mainline SWE-rebench-v2
|
|
469
|
+
* and an isolated SWE-rebench-v2 launched at a separate manifestCid)
|
|
470
|
+
* each hold their own in-flight slot.
|
|
471
|
+
* - When `null` is supplied, only rows with NULL `solver_net_manifest_cid`
|
|
472
|
+
* count (legacy / health-check tasks form their own bucket).
|
|
473
|
+
* - When omitted (`undefined`), the manifest filter is dropped — the
|
|
474
|
+
* historical routing-key-only behaviour. Production callers always
|
|
475
|
+
* pass an explicit value; this path exists for legacy tests.
|
|
476
|
+
*
|
|
477
|
+
* The bug this fix closes: an operator joined to multiple SolverNets that
|
|
478
|
+
* share the same routing key had ONE in-flight slot across all of them, so
|
|
479
|
+
* a task in SolverNet B was silently rejected with
|
|
480
|
+
* `another <routingKey>/<role> task is already in flight` whenever the
|
|
481
|
+
* operator was busy on SolverNet A.
|
|
482
|
+
*/
|
|
379
483
|
hasInFlightFor(args) {
|
|
380
484
|
const terminalList = [...TERMINAL_STATES];
|
|
381
485
|
const placeholders = terminalList.map((_, i) => `@terminal${i}`).join(', ');
|
|
@@ -387,6 +491,14 @@ export class TaskRunPersistence {
|
|
|
387
491
|
terminalList.forEach((state, i) => {
|
|
388
492
|
params[`terminal${i}`] = state;
|
|
389
493
|
});
|
|
494
|
+
let manifestClause = '';
|
|
495
|
+
if (args.manifestCid === null) {
|
|
496
|
+
manifestClause = 'AND solver_net_manifest_cid IS NULL';
|
|
497
|
+
}
|
|
498
|
+
else if (typeof args.manifestCid === 'string') {
|
|
499
|
+
manifestClause = 'AND solver_net_manifest_cid = @manifestCid';
|
|
500
|
+
params['manifestCid'] = args.manifestCid;
|
|
501
|
+
}
|
|
390
502
|
const row = this.db.prepare(`
|
|
391
503
|
SELECT 1
|
|
392
504
|
FROM task_runs
|
|
@@ -394,6 +506,7 @@ export class TaskRunPersistence {
|
|
|
394
506
|
AND COALESCE(task_role, 'restoration') = @taskRole
|
|
395
507
|
AND state NOT IN (${placeholders})
|
|
396
508
|
AND request_id != @excludeRequestId
|
|
509
|
+
${manifestClause}
|
|
397
510
|
LIMIT 1
|
|
398
511
|
`).get(params);
|
|
399
512
|
return row !== undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../../src/harnesses/engine/persistence.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../../src/harnesses/engine/persistence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Working-directory reaper.
|
|
3
|
+
*
|
|
4
|
+
* The TaskEngine provisions a per-task working directory under
|
|
5
|
+
* `engine.workingDirRoot` (default `~/.jinn-client/engine/work/<requestId>/`).
|
|
6
|
+
* Each one holds heavy scratch — a cloned repo, a per-task plugins copy, a
|
|
7
|
+
* `system_snapshot.tar.gz`, session transcripts and an env directory.
|
|
8
|
+
*
|
|
9
|
+
* Historically nothing ever removed these. A long-lived operator accumulated
|
|
10
|
+
* 412 work dirs / 49 GB with no cleanup (issue #320). The snapshot tarball is
|
|
11
|
+
* uploaded to IPFS at delivery time, so once a task reaches a terminal state
|
|
12
|
+
* (COMPLETE / FAILED) the on-disk working directory is pure dead weight.
|
|
13
|
+
*
|
|
14
|
+
* This module is the single place that decides what may be deleted. It is
|
|
15
|
+
* deliberately conservative:
|
|
16
|
+
*
|
|
17
|
+
* 1. A directory whose requestId is currently in-flight is NEVER removed,
|
|
18
|
+
* regardless of age — the engine still needs it.
|
|
19
|
+
* 2. A directory whose requestId is in a terminal state is removed
|
|
20
|
+
* immediately (its evidence already lives on-chain / on IPFS).
|
|
21
|
+
* 3. A directory with no matching persistence row at all ("orphan" — left
|
|
22
|
+
* by a crash, an older daemon version, or a wiped DB) is removed only
|
|
23
|
+
* once it is older than `orphanMaxAgeMs`, so we never race a task the
|
|
24
|
+
* DB has not observed yet.
|
|
25
|
+
*
|
|
26
|
+
* It is pure I/O over the filesystem plus two caller-supplied id sets, which
|
|
27
|
+
* makes it trivially testable and equally usable from the one-shot cleanup
|
|
28
|
+
* script (`scripts/cleanup-engine-work.ts`).
|
|
29
|
+
*/
|
|
30
|
+
/** Default age before an orphaned (no DB row) work dir is reaped: 24 hours. */
|
|
31
|
+
export declare const DEFAULT_ORPHAN_MAX_AGE_MS: number;
|
|
32
|
+
export interface ReapWorkDirsOptions {
|
|
33
|
+
/** Root that holds per-task working directories (`engine.workingDirRoot`). */
|
|
34
|
+
workingDirRoot: string;
|
|
35
|
+
/** Request IDs whose task run is in a terminal state (COMPLETE / FAILED). */
|
|
36
|
+
terminalRequestIds: ReadonlySet<string>;
|
|
37
|
+
/** Request IDs whose task run is still in-flight — never reaped. */
|
|
38
|
+
inFlightRequestIds: ReadonlySet<string>;
|
|
39
|
+
/**
|
|
40
|
+
* Age above which a directory with no DB row (orphan) is reaped.
|
|
41
|
+
* Defaults to {@link DEFAULT_ORPHAN_MAX_AGE_MS}.
|
|
42
|
+
*/
|
|
43
|
+
orphanMaxAgeMs?: number;
|
|
44
|
+
/** Injectable clock for tests. Defaults to `Date.now`. */
|
|
45
|
+
now?: () => number;
|
|
46
|
+
}
|
|
47
|
+
export interface ReapWorkDirsReport {
|
|
48
|
+
/** Request IDs whose working directory was removed this pass. */
|
|
49
|
+
removed: string[];
|
|
50
|
+
/** Request IDs skipped because the task is still in-flight. */
|
|
51
|
+
protected: string[];
|
|
52
|
+
/** Bytes-freed is not computed (would require a recursive walk); count only. */
|
|
53
|
+
scanned: number;
|
|
54
|
+
/** Non-fatal errors keyed by requestId (e.g. permission denied on rm). */
|
|
55
|
+
errors: Array<{
|
|
56
|
+
requestId: string;
|
|
57
|
+
error: string;
|
|
58
|
+
}>;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Sweep `workingDirRoot` once and remove every working directory that is safe
|
|
62
|
+
* to delete. Never throws for a missing root or an individual failed removal —
|
|
63
|
+
* the daemon must keep running even if the disk is wedged.
|
|
64
|
+
*/
|
|
65
|
+
export declare function reapWorkDirs(opts: ReapWorkDirsOptions): ReapWorkDirsReport;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Working-directory reaper.
|
|
3
|
+
*
|
|
4
|
+
* The TaskEngine provisions a per-task working directory under
|
|
5
|
+
* `engine.workingDirRoot` (default `~/.jinn-client/engine/work/<requestId>/`).
|
|
6
|
+
* Each one holds heavy scratch — a cloned repo, a per-task plugins copy, a
|
|
7
|
+
* `system_snapshot.tar.gz`, session transcripts and an env directory.
|
|
8
|
+
*
|
|
9
|
+
* Historically nothing ever removed these. A long-lived operator accumulated
|
|
10
|
+
* 412 work dirs / 49 GB with no cleanup (issue #320). The snapshot tarball is
|
|
11
|
+
* uploaded to IPFS at delivery time, so once a task reaches a terminal state
|
|
12
|
+
* (COMPLETE / FAILED) the on-disk working directory is pure dead weight.
|
|
13
|
+
*
|
|
14
|
+
* This module is the single place that decides what may be deleted. It is
|
|
15
|
+
* deliberately conservative:
|
|
16
|
+
*
|
|
17
|
+
* 1. A directory whose requestId is currently in-flight is NEVER removed,
|
|
18
|
+
* regardless of age — the engine still needs it.
|
|
19
|
+
* 2. A directory whose requestId is in a terminal state is removed
|
|
20
|
+
* immediately (its evidence already lives on-chain / on IPFS).
|
|
21
|
+
* 3. A directory with no matching persistence row at all ("orphan" — left
|
|
22
|
+
* by a crash, an older daemon version, or a wiped DB) is removed only
|
|
23
|
+
* once it is older than `orphanMaxAgeMs`, so we never race a task the
|
|
24
|
+
* DB has not observed yet.
|
|
25
|
+
*
|
|
26
|
+
* It is pure I/O over the filesystem plus two caller-supplied id sets, which
|
|
27
|
+
* makes it trivially testable and equally usable from the one-shot cleanup
|
|
28
|
+
* script (`scripts/cleanup-engine-work.ts`).
|
|
29
|
+
*/
|
|
30
|
+
import { readdirSync, statSync, rmSync } from 'node:fs';
|
|
31
|
+
import { join } from 'node:path';
|
|
32
|
+
/** Default age before an orphaned (no DB row) work dir is reaped: 24 hours. */
|
|
33
|
+
export const DEFAULT_ORPHAN_MAX_AGE_MS = 24 * 60 * 60 * 1000;
|
|
34
|
+
/**
|
|
35
|
+
* Sweep `workingDirRoot` once and remove every working directory that is safe
|
|
36
|
+
* to delete. Never throws for a missing root or an individual failed removal —
|
|
37
|
+
* the daemon must keep running even if the disk is wedged.
|
|
38
|
+
*/
|
|
39
|
+
export function reapWorkDirs(opts) {
|
|
40
|
+
const now = opts.now ?? Date.now;
|
|
41
|
+
const orphanMaxAgeMs = opts.orphanMaxAgeMs ?? DEFAULT_ORPHAN_MAX_AGE_MS;
|
|
42
|
+
const report = {
|
|
43
|
+
removed: [],
|
|
44
|
+
protected: [],
|
|
45
|
+
scanned: 0,
|
|
46
|
+
errors: [],
|
|
47
|
+
};
|
|
48
|
+
let entries;
|
|
49
|
+
try {
|
|
50
|
+
entries = readdirSync(opts.workingDirRoot);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// Root does not exist yet (no task ever ran) — nothing to do.
|
|
54
|
+
return report;
|
|
55
|
+
}
|
|
56
|
+
for (const requestId of entries) {
|
|
57
|
+
const dir = join(opts.workingDirRoot, requestId);
|
|
58
|
+
let isDir = false;
|
|
59
|
+
// Age orphans off mtime, not birthtime: a dir with a live writer keeps
|
|
60
|
+
// bumping mtime, so it stays "fresh" and is never reaped — which is what
|
|
61
|
+
// we want, since a continuously-written orphan has a running task whose
|
|
62
|
+
// DB row was lost. birthtime would reap it out from under that task.
|
|
63
|
+
let mtimeMs = 0;
|
|
64
|
+
try {
|
|
65
|
+
const st = statSync(dir);
|
|
66
|
+
isDir = st.isDirectory();
|
|
67
|
+
mtimeMs = st.mtimeMs;
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
continue; // vanished between readdir and stat — fine.
|
|
71
|
+
}
|
|
72
|
+
if (!isDir)
|
|
73
|
+
continue;
|
|
74
|
+
report.scanned += 1;
|
|
75
|
+
// (1) Never touch an in-flight task's directory.
|
|
76
|
+
if (opts.inFlightRequestIds.has(requestId)) {
|
|
77
|
+
report.protected.push(requestId);
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
// (2) Terminal task — safe to remove immediately.
|
|
81
|
+
// (3) Orphan (no DB row) — remove only once past the max age.
|
|
82
|
+
const isTerminal = opts.terminalRequestIds.has(requestId);
|
|
83
|
+
const isOrphan = !isTerminal; // not in-flight, not terminal → no row
|
|
84
|
+
if (isOrphan && now() - mtimeMs < orphanMaxAgeMs) {
|
|
85
|
+
continue; // young orphan — give the DB a chance to catch up.
|
|
86
|
+
}
|
|
87
|
+
try {
|
|
88
|
+
rmSync(dir, { recursive: true, force: true });
|
|
89
|
+
report.removed.push(requestId);
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
report.errors.push({
|
|
93
|
+
requestId,
|
|
94
|
+
error: err instanceof Error ? err.message : String(err),
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return report;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=work-dir-reaper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"work-dir-reaper.js","sourceRoot":"","sources":["../../../src/harnesses/engine/work-dir-reaper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,+EAA+E;AAC/E,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AA6B7D;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,IAAyB;IACpD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;IACjC,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,yBAAyB,CAAC;IACxE,MAAM,MAAM,GAAuB;QACjC,OAAO,EAAE,EAAE;QACX,SAAS,EAAE,EAAE;QACb,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,EAAE;KACX,CAAC;IAEF,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,8DAA8D;QAC9D,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;QACjD,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,uEAAuE;QACvE,yEAAyE;QACzE,wEAAwE;QACxE,qEAAqE;QACrE,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;YACzB,KAAK,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;YACzB,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,SAAS,CAAC,4CAA4C;QACxD,CAAC;QACD,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;QAEpB,iDAAiD;QACjD,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3C,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACjC,SAAS;QACX,CAAC;QAED,kDAAkD;QAClD,8DAA8D;QAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,CAAC,UAAU,CAAC,CAAC,uCAAuC;QACrE,IAAI,QAAQ,IAAI,GAAG,EAAE,GAAG,OAAO,GAAG,cAAc,EAAE,CAAC;YACjD,SAAS,CAAC,mDAAmD;QAC/D,CAAC;QAED,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9C,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;gBACjB,SAAS;gBACT,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACxD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -12,6 +12,35 @@ const ENV_ALLOWLIST = [
|
|
|
12
12
|
'XDG_CONFIG_HOME', 'XDG_DATA_HOME', 'XDG_CACHE_HOME',
|
|
13
13
|
'NODE_PATH', 'NODE_OPTIONS', 'NPM_CONFIG_PREFIX',
|
|
14
14
|
];
|
|
15
|
+
/**
|
|
16
|
+
* Pattern allowlist for provider credentials.
|
|
17
|
+
*
|
|
18
|
+
* Without this passthrough, `hermes chat` spawns with a stripped env, hits
|
|
19
|
+
* "Provider resolver returned an empty API key" and exits 1 ~14s after
|
|
20
|
+
* launching (after plugin discovery + MCP registration but before the first
|
|
21
|
+
* model call). The per-Task `.env` merge in `bootstrap.ts` only catches
|
|
22
|
+
* operator API keys that live in `$HERMES_HOME/.env`; daemons launched with
|
|
23
|
+
* `set -a; . <somewhere>/.env; set +a` (the substrate / eng-loop pattern,
|
|
24
|
+
* and any operator who keeps their key in shell env instead of
|
|
25
|
+
* `~/.hermes/.env`) have the key in `process.env` but NOT in the per-Task
|
|
26
|
+
* `.env`. Passing those through is the canonical path for shell-supplied
|
|
27
|
+
* credentials and matches what `hermes doctor` / `hermes auth list` (which
|
|
28
|
+
* the readiness probe shells out to) already see.
|
|
29
|
+
*
|
|
30
|
+
* Pattern is intentionally broad: any env var ending in `_API_KEY`,
|
|
31
|
+
* `_API_TOKEN`, or `_TOKEN` is treated as a provider credential. Hermes
|
|
32
|
+
* itself reads these by name (e.g. `OPENROUTER_API_KEY`, `ANTHROPIC_API_KEY`,
|
|
33
|
+
* `GOOGLE_API_KEY`, `XAI_API_KEY`, `GROQ_API_KEY`, …). Plus an explicit
|
|
34
|
+
* carve-out for `OPENAI_API_KEY` (canonical OpenAI name doesn't end in
|
|
35
|
+
* `_API_KEY` in some lists) and any `HERMES_*` knob the operator may have
|
|
36
|
+
* set (e.g. `HERMES_ACCEPT_HOOKS`).
|
|
37
|
+
*/
|
|
38
|
+
const ENV_PATTERN_ALLOWLIST = [
|
|
39
|
+
/_API_KEY$/,
|
|
40
|
+
/_API_TOKEN$/,
|
|
41
|
+
/_TOKEN$/,
|
|
42
|
+
/^HERMES_/,
|
|
43
|
+
];
|
|
15
44
|
/**
|
|
16
45
|
* Detects OpenRouter-style `<org>/<model>` model ids so the adapter can default
|
|
17
46
|
* `--provider openrouter` for the catalog entries shipped in `HERMES_MODELS`.
|
|
@@ -35,6 +64,17 @@ function buildAgentEnv(extra) {
|
|
|
35
64
|
if (process.env[key])
|
|
36
65
|
env[key] = process.env[key];
|
|
37
66
|
}
|
|
67
|
+
// Pattern passthrough — provider credentials supplied via the operator's
|
|
68
|
+
// shell env (e.g. `set -a; . client/.env; set +a`) must reach `hermes chat`
|
|
69
|
+
// or it dies at first model call with "empty API key" / exit 1. See the
|
|
70
|
+
// ENV_PATTERN_ALLOWLIST docstring above.
|
|
71
|
+
for (const [key, value] of Object.entries(process.env)) {
|
|
72
|
+
if (value == null || key in env)
|
|
73
|
+
continue;
|
|
74
|
+
if (ENV_PATTERN_ALLOWLIST.some((re) => re.test(key))) {
|
|
75
|
+
env[key] = value;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
38
78
|
return { ...env, ...extra };
|
|
39
79
|
}
|
|
40
80
|
export class HermesHarnessAdapter {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/harnesses/impls/hermes-agent/adapter.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,OAAO,EAAE,KAAK,EAAwC,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGjD,MAAM,aAAa,GAAG;IACpB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ;IACzD,iBAAiB,EAAE,eAAe,EAAE,gBAAgB;IACpD,WAAW,EAAE,cAAc,EAAE,mBAAmB;CACjD,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,uBAAuB,GAAG,gCAAgC,CAAC;AACjE,SAAS,wBAAwB,CAAC,OAA2B;IAC3D,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,OAAO,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1E,CAAC;AAoBD,SAAS,aAAa,CAAC,KAA6B;IAClD,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;IACrD,CAAC;IACD,OAAO,EAAE,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,OAAO,oBAAoB;IACtB,IAAI,GAAG,oBAAoB,CAAC;IAEpB,UAAU,CAAS;IACnB,WAAW,CAAqB;IAChC,cAAc,CAAqB;IACnC,YAAY,CAAS;IACrB,cAAc,CAAS;IACvB,SAAS,CAAgC;IACzC,SAAS,CAAqB;IAC9B,kBAAkB,CAAS;IAC3B,OAAO,CAAe;IAEvC,YAAY,MAAkC;QAC5C,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,QAAQ,CAAC;QAChD,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QAC5C,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACxC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QAC5C,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,kBAAkB;YACrB,MAAM,CAAC,kBAAkB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;QAClG,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAyB;QACrC,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC;QACrE,2EAA2E;QAC3E,wEAAwE;QACxE,0BAA0B;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,IAAI,wBAAwB,CAAC,KAAK,CAAC,CAAC;QAExE,oFAAoF;QACpF,EAAE;QACF,yEAAyE;QACzE,6EAA6E;QAC7E,2EAA2E;QAC3E,oEAAoE;QACpE,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE;YAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC;YACzC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAAE,OAAO,EAAE,CAAC;YAC/C,IAAI,CAAC;gBAAC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,OAAO,EAAE,CAAC;YAAC,CAAC;QAC1D,CAAC,CAAC,EAAE,CAAC;QACL,wBAAwB,CAAC;YACvB,UAAU;YACV,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,KAAK;YACL,QAAQ;YACR,iBAAiB,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE;YAC3C,GAAG,EAAE;gBACH,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,IAAI,EAAE;oBACJ,EAAE,EAAE,MAAM,CAAC,MAAM;oBACjB,WAAW,EAAE,OAAO,MAAM,CAAC,QAAQ,EAAE,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;oBAChG,WAAW,EAAE,eAAe;oBAC5B,IAAI,EAAE,OAAO,MAAM,CAAC,QAAQ,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;oBAC3E,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,UAAU,IAAI,MAAM,CAAC,UAAU,IAAI,EAAE;oBAClE,oBAAoB,EAAE,OAAO,MAAM,CAAC,QAAQ,EAAE,oBAAoB,KAAK,QAAQ;wBAC7E,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE;oBAC7C,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,MAAM;oBAC5C,UAAU,EAAE,MAAM,CAAC,UAAU;iBAC9B;aACF;YACD,QAAQ,EAAE,IAAI,CAAC,kBAAkB;SAClC,CAAC,CAAC;QAEH,+BAA+B;QAC/B,EAAE;QACF,uDAAuD;QACvD,oDAAoD;QACpD,+EAA+E;QAC/E,4EAA4E;QAC5E,0EAA0E;QAC1E,uEAAuE;QACvE,uEAAuE;QACvE,uEAAuE;QACvE,sEAAsE;QACtE,0EAA0E;QAC1E,0EAA0E;QAC1E,gEAAgE;QAChE,qEAAqE;QACrE,+DAA+D;QAC/D,sEAAsE;QACtE,yEAAyE;QACzE,qEAAqE;QACrE,yEAAyE;QACzE,sEAAsE;QACtE,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAa,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;QAChF,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QACpC,CAAC;QAED,MAAM,GAAG,GAAG,aAAa,CAAC;YACxB,WAAW,EAAE,UAAU;SACxB,CAAC,CAAC;QAEH,MAAM,SAAS,GAAiB;YAC9B,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;YACjC,GAAG;YACH,GAAG,EAAE,MAAM,CAAC,UAAU;SACvB,CAAC;QAEF,4BAA4B;QAC5B,OAAO,IAAI,OAAO,CAAO,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE;YAClD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;YACxD,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACvC,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YAChF,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YAChF,MAAM,SAAS,GAAG,KAAK,IAAmB,EAAE;gBAC1C,IAAI,CAAC,SAAS,CAAC,aAAa;oBAAE,SAAS,CAAC,GAAG,EAAE,CAAC;gBAC9C,IAAI,CAAC,SAAS,CAAC,aAAa;oBAAE,SAAS,CAAC,GAAG,EAAE,CAAC;gBAC9C,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAChE,CAAC,CAAC;YAEF,MAAM,KAAK,GAAiB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YAE3E,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gBACzB,IAAI,CAAC,KAAK,CAAC,MAAM;oBAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC3C,CAAC;YACD,MAAM,OAAO,GAAG,GAAG,EAAE;gBACnB,IAAI,CAAC,KAAK,CAAC,MAAM;oBAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC3C,CAAC,CAAC;YACF,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAEhD,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE;gBACrC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACnB,MAAM,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;YACzB,CAAC,CAAC,CAAC;YAEH,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,MAAM,MAAM,GAAG,CAAC,EAAc,EAAE,WAA+B,MAAM,EAAE,EAAE;gBACvE,IAAI,OAAO;oBAAE,OAAO;gBACpB,OAAO,GAAG,IAAI,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACnD,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YACjC,CAAC,CAAC;YAEF,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;gBAChC,MAAM,CAAC,GAAG,EAAE;oBACV,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;wBACf,cAAc,EAAE,CAAC;oBACnB,CAAC;yBAAM,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;wBAChC,cAAc,EAAE,CAAC,CAAC,mCAAmC;oBACvD,CAAC;yBAAM,CAAC;wBACN,MAAM,CAAC,IAAI,KAAK,CACd,mCAAmC,IAAI,WAAW,MAAM,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CACpF,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACxB,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/C,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/harnesses/impls/hermes-agent/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,24 @@
|
|
|
1
1
|
import { type ConfigBuilderEnv } from './config-builder.js';
|
|
2
|
+
/**
|
|
3
|
+
* Per-task `max_tokens` cap (Jinn-enforced, OpenRouter-bound).
|
|
4
|
+
*
|
|
5
|
+
* OpenRouter pre-bills on `max_tokens` rather than actual output tokens:
|
|
6
|
+
* the model invocation reserves credit for `max_tokens × output-cost` at
|
|
7
|
+
* request time. An operator who sets `max_tokens=64000` (Hermes's stock
|
|
8
|
+
* default for frontier models) against the priciest models needs ~$0.30+
|
|
9
|
+
* of unspent credit *per request* just to start the call — even if the
|
|
10
|
+
* actual solve uses 6k tokens. Production bug, 2026-05-23: every Hermes
|
|
11
|
+
* solve attempt returned HTTP 402 with "You requested up to 64000 tokens,
|
|
12
|
+
* but can only afford 52975."
|
|
13
|
+
*
|
|
14
|
+
* 32000 is generous for a SWE-rebench patch (whole patches typically come
|
|
15
|
+
* in well under 10k output tokens) and fits under the OpenRouter affordable
|
|
16
|
+
* cap across the model classes used in 2026-05 production. The Jinn-managed
|
|
17
|
+
* value is `min(operator_value, JINN_HERMES_MAX_TOKENS_CAP)` — operators
|
|
18
|
+
* who want a lower cap (e.g. tighter budget) keep their value; operators
|
|
19
|
+
* who set a higher cap get clamped to 32000.
|
|
20
|
+
*/
|
|
21
|
+
export declare const JINN_HERMES_MAX_TOKENS_CAP = 32000;
|
|
2
22
|
export interface WritePerTaskConfigInputs {
|
|
3
23
|
hermesHome: string;
|
|
4
24
|
workingDir: string;
|
|
@@ -27,6 +27,26 @@ const TOOLSET_ALLOWLIST = [
|
|
|
27
27
|
'todo',
|
|
28
28
|
'code_execution',
|
|
29
29
|
];
|
|
30
|
+
/**
|
|
31
|
+
* Per-task `max_tokens` cap (Jinn-enforced, OpenRouter-bound).
|
|
32
|
+
*
|
|
33
|
+
* OpenRouter pre-bills on `max_tokens` rather than actual output tokens:
|
|
34
|
+
* the model invocation reserves credit for `max_tokens × output-cost` at
|
|
35
|
+
* request time. An operator who sets `max_tokens=64000` (Hermes's stock
|
|
36
|
+
* default for frontier models) against the priciest models needs ~$0.30+
|
|
37
|
+
* of unspent credit *per request* just to start the call — even if the
|
|
38
|
+
* actual solve uses 6k tokens. Production bug, 2026-05-23: every Hermes
|
|
39
|
+
* solve attempt returned HTTP 402 with "You requested up to 64000 tokens,
|
|
40
|
+
* but can only afford 52975."
|
|
41
|
+
*
|
|
42
|
+
* 32000 is generous for a SWE-rebench patch (whole patches typically come
|
|
43
|
+
* in well under 10k output tokens) and fits under the OpenRouter affordable
|
|
44
|
+
* cap across the model classes used in 2026-05 production. The Jinn-managed
|
|
45
|
+
* value is `min(operator_value, JINN_HERMES_MAX_TOKENS_CAP)` — operators
|
|
46
|
+
* who want a lower cap (e.g. tighter budget) keep their value; operators
|
|
47
|
+
* who set a higher cap get clamped to 32000.
|
|
48
|
+
*/
|
|
49
|
+
export const JINN_HERMES_MAX_TOKENS_CAP = 32000;
|
|
30
50
|
/**
|
|
31
51
|
* Files copied verbatim from the operator's real Hermes home into the per-Task
|
|
32
52
|
* `$HERMES_HOME`. Hermes resolves OAuth creds from `$HERMES_HOME/auth/...` and
|
|
@@ -78,6 +98,9 @@ function seedOperatorState(hermesHome, seedFrom) {
|
|
|
78
98
|
// Jinn-managed keys (per-Task authoritative; Jinn writes these every Task):
|
|
79
99
|
// - model.default — if a daemon/SolverNet override was provided
|
|
80
100
|
// - model.provider — if a daemon/SolverNet override was provided
|
|
101
|
+
// - model.max_tokens — capped at JINN_HERMES_MAX_TOKENS_CAP (operators
|
|
102
|
+
// may pin lower, never higher — OpenRouter
|
|
103
|
+
// pre-billing footgun, see the constant docstring)
|
|
81
104
|
// - terminal.backend — forced to `local` (the per-Task workingDir is a
|
|
82
105
|
// host filesystem path; remote backends would need
|
|
83
106
|
// additional setup Jinn doesn't yet do)
|
|
@@ -92,8 +115,6 @@ function seedOperatorState(hermesHome, seedFrom) {
|
|
|
92
115
|
// Everything else from the operator's config.yaml passes through unchanged.
|
|
93
116
|
//
|
|
94
117
|
// Operator-set keys that DO inherit and matter for budget-capped providers:
|
|
95
|
-
// - model.max_tokens — OpenRouter pre-bills on max_tokens; operators
|
|
96
|
-
// with low monthly caps must lower this to fit.
|
|
97
118
|
// - model.context_length — total context window cap.
|
|
98
119
|
// - provider_routing — OpenRouter routing knobs (sort by price, etc.).
|
|
99
120
|
// - providers.<name> — per-provider timeout / model-specific overrides.
|
|
@@ -117,9 +138,12 @@ function readOperatorConfigYaml(seedFrom) {
|
|
|
117
138
|
}
|
|
118
139
|
function mergePerTaskConfig(operator, jinn, opts) {
|
|
119
140
|
const out = { ...operator };
|
|
120
|
-
// model: deep-merge — operator's
|
|
121
|
-
//
|
|
122
|
-
//
|
|
141
|
+
// model: deep-merge — operator's context_length/base_url/provider_routing/
|
|
142
|
+
// etc. preserved; Jinn overrides default+provider only if specified by
|
|
143
|
+
// daemon/SolverNet config; Jinn ALWAYS caps `max_tokens` at
|
|
144
|
+
// JINN_HERMES_MAX_TOKENS_CAP (operators may pin lower, never higher).
|
|
145
|
+
// See the JINN_HERMES_MAX_TOKENS_CAP docstring for the OpenRouter
|
|
146
|
+
// pre-billing rationale (production bug, 2026-05-23).
|
|
123
147
|
if (opts.model || opts.provider || isObj(out.model)) {
|
|
124
148
|
const opModel = isObj(out.model) ? out.model : {};
|
|
125
149
|
const jinnModel = {};
|
|
@@ -127,7 +151,17 @@ function mergePerTaskConfig(operator, jinn, opts) {
|
|
|
127
151
|
jinnModel.default = opts.model;
|
|
128
152
|
if (opts.provider)
|
|
129
153
|
jinnModel.provider = opts.provider;
|
|
130
|
-
|
|
154
|
+
const merged = { ...opModel, ...jinnModel };
|
|
155
|
+
const opMaxTokens = typeof opModel.max_tokens === 'number' ? opModel.max_tokens : undefined;
|
|
156
|
+
merged.max_tokens = opMaxTokens != null
|
|
157
|
+
? Math.min(opMaxTokens, JINN_HERMES_MAX_TOKENS_CAP)
|
|
158
|
+
: JINN_HERMES_MAX_TOKENS_CAP;
|
|
159
|
+
out.model = merged;
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
// No model block from either side — still pin the cap so a stock Hermes
|
|
163
|
+
// install (with its 64000 default) cannot ship over-budget requests.
|
|
164
|
+
out.model = { max_tokens: JINN_HERMES_MAX_TOKENS_CAP };
|
|
131
165
|
}
|
|
132
166
|
// terminal: Jinn forces backend + cwd; operator's timeout / lifetime /
|
|
133
167
|
// sudo_password / docker_* fields preserved (the docker_* fields are inert
|