@jinn-network/client 0.1.7 → 0.1.8
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 +19 -1
- package/dist/adapters/mech/adapter.js +130 -14
- package/dist/adapters/mech/adapter.js.map +1 -1
- package/dist/adapters/mech/contracts.d.ts +22 -1
- package/dist/adapters/mech/contracts.js +34 -24
- package/dist/adapters/mech/contracts.js.map +1 -1
- package/dist/adapters/mech/safe.d.ts +1 -1
- package/dist/adapters/mech/safe.js +5 -3
- 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/gather-status.d.ts +33 -0
- package/dist/api/gather-status.js +211 -26
- 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/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 +0 -9
- package/dist/api/setup-endpoints.js +11 -153
- package/dist/api/setup-endpoints.js.map +1 -1
- package/dist/api/solvernets-endpoints.js +30 -63
- package/dist/api/solvernets-endpoints.js.map +1 -1
- package/dist/api/status-build.d.ts +115 -2
- package/dist/api/status-build.js +47 -11
- 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/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 +249 -0
- package/dist/cli/commands/codedigest-revert-check.js.map +1 -0
- package/dist/cli/commands/solver-nets.d.ts +1 -0
- package/dist/cli/commands/solver-nets.js +177 -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/tasks.js +15 -2
- package/dist/cli/commands/tasks.js.map +1 -1
- package/dist/cli/index.js +2 -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 +183 -232
- package/dist/config.js +232 -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 +82 -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 +203 -30
- package/dist/daemon/daemon.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-CzKxvMcU.css +32 -0
- package/dist/dashboard/assets/index-yVemxHot.js +351 -0
- package/dist/dashboard/index.html +2 -2
- package/dist/discovery/http.js +328 -1
- package/dist/discovery/http.js.map +1 -1
- package/dist/discovery/onchain.js +42 -4
- package/dist/discovery/onchain.js.map +1 -1
- package/dist/discovery/types.d.ts +129 -0
- package/dist/discovery/types.js.map +1 -1
- package/dist/discovery/with-fallback.js +27 -0
- package/dist/discovery/with-fallback.js.map +1 -1
- package/dist/earning/bootstrap.d.ts +8 -3
- package/dist/earning/bootstrap.js +36 -13
- package/dist/earning/bootstrap.js.map +1 -1
- package/dist/earning/safe-adapter.js +23 -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/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/engine.d.ts +28 -4
- package/dist/harnesses/engine/engine.js +103 -17
- package/dist/harnesses/engine/engine.js.map +1 -1
- package/dist/harnesses/engine/persistence.d.ts +21 -4
- package/dist/harnesses/engine/persistence.js +43 -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/bootstrap.js +4 -2
- 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 +14 -0
- package/dist/harnesses/impls/hermes-agent/harness.js +16 -2
- 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/learner/adapters/claude-code.d.ts +17 -0
- package/dist/harnesses/impls/learner/adapters/claude-code.js +113 -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 +24 -0
- package/dist/harnesses/impls/learner/harness.js +27 -3
- package/dist/harnesses/impls/learner/harness.js.map +1 -1
- package/dist/harnesses/impls/learner/harvest.d.ts +1 -1
- package/dist/harnesses/impls/learner/harvest.js +23 -5
- package/dist/harnesses/impls/learner/harvest.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/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/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/learner/revert-decision.d.ts +59 -0
- package/dist/learner/revert-decision.js +53 -0
- package/dist/learner/revert-decision.js.map +1 -0
- package/dist/learner/revert-stats.d.ts +24 -0
- package/dist/learner/revert-stats.js +44 -0
- package/dist/learner/revert-stats.js.map +1 -0
- package/dist/main.js +177 -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/skills/learn/consolidator-prompt.md +18 -1
- package/dist/plugins/learner/skills/learn/promoter-prompt.md +72 -1
- package/dist/preflight/pidfile-liveness.d.ts +44 -0
- package/dist/preflight/pidfile-liveness.js +103 -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 +109 -0
- package/dist/rpc/transport.js +220 -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-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 +15 -0
- package/dist/solver-types/_swe-rebench-v2-state.js +19 -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/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 +8 -2
- package/dist/solver-types/swe-rebench-v2.js +127 -11
- 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 +4 -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 +11 -0
- package/dist/solvernets/registry-client-erc8004.js.map +1 -1
- package/dist/solvernets/store.d.ts +2 -2
- package/dist/spend/ai-units-config.d.ts +39 -0
- package/dist/spend/ai-units-config.js +28 -0
- package/dist/spend/ai-units-config.js.map +1 -0
- package/dist/spend/ai-units.d.ts +89 -0
- package/dist/spend/ai-units.js +156 -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 +36 -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 +101 -0
- package/dist/store/store.js +304 -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/package.json +11 -3
- package/plugins/learner/skills/learn/consolidator-prompt.md +18 -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/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
|
@@ -14,6 +14,10 @@ export interface LaunchedRecordGeneratorStaticConfig {
|
|
|
14
14
|
agentEoa?: `0x${string}`;
|
|
15
15
|
safeAddress?: `0x${string}`;
|
|
16
16
|
agentPrivateKey?: `0x${string}`;
|
|
17
|
+
/** Shared DiscoveryAPI passed through to the swe-rebench-v2 generator so it
|
|
18
|
+
* can reconcile its local `successful` counter against network truth
|
|
19
|
+
* (#669). Omit on test paths where the generator's tick is not exercised. */
|
|
20
|
+
discoveryApi?: import('../discovery/types.js').DiscoveryAPI;
|
|
17
21
|
}
|
|
18
22
|
export interface LaunchedRecordGeneratorFactories {
|
|
19
23
|
predictionV1: (opts: {
|
|
@@ -111,15 +111,13 @@ function projectLauncherGeneratorState(raw) {
|
|
|
111
111
|
const live = finiteNumber(rawSummary['live']);
|
|
112
112
|
const repostable = finiteNumber(rawSummary['repostable']);
|
|
113
113
|
const saturated = finiteNumber(rawSummary['saturated']);
|
|
114
|
-
const abandoned = finiteNumber(rawSummary['abandoned']);
|
|
115
114
|
const posted = finiteNumber(rawSummary['posted']);
|
|
116
115
|
if (poolSize !== undefined &&
|
|
117
116
|
posted !== undefined &&
|
|
118
117
|
unposted !== undefined &&
|
|
119
118
|
live !== undefined &&
|
|
120
119
|
repostable !== undefined &&
|
|
121
|
-
saturated !== undefined
|
|
122
|
-
abandoned !== undefined) {
|
|
120
|
+
saturated !== undefined) {
|
|
123
121
|
projected.lastPollSummary = {
|
|
124
122
|
poolSize,
|
|
125
123
|
posted,
|
|
@@ -127,7 +125,6 @@ function projectLauncherGeneratorState(raw) {
|
|
|
127
125
|
live,
|
|
128
126
|
repostable,
|
|
129
127
|
saturated,
|
|
130
|
-
abandoned,
|
|
131
128
|
};
|
|
132
129
|
}
|
|
133
130
|
else {
|
|
@@ -138,6 +135,15 @@ function projectLauncherGeneratorState(raw) {
|
|
|
138
135
|
}
|
|
139
136
|
}
|
|
140
137
|
}
|
|
138
|
+
const poolPublicationUpdatedAt = optionalString(snapshot['poolPublicationUpdatedAt']);
|
|
139
|
+
if (poolPublicationUpdatedAt)
|
|
140
|
+
projected.poolPublicationUpdatedAt = poolPublicationUpdatedAt;
|
|
141
|
+
const poolPublicationPriorSize = finiteNumber(snapshot['poolPublicationPriorSize']);
|
|
142
|
+
if (poolPublicationPriorSize !== undefined)
|
|
143
|
+
projected.poolPublicationPriorSize = poolPublicationPriorSize;
|
|
144
|
+
const poolPublicationCurrentSize = finiteNumber(snapshot['poolPublicationCurrentSize']);
|
|
145
|
+
if (poolPublicationCurrentSize !== undefined)
|
|
146
|
+
projected.poolPublicationCurrentSize = poolPublicationCurrentSize;
|
|
141
147
|
return projected;
|
|
142
148
|
}
|
|
143
149
|
function launcherStateReaderFor(generator) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launched-record-dispatcher.js","sourceRoot":"","sources":["../../src/solvernets/launched-record-dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"launched-record-dispatcher.js","sourceRoot":"","sources":["../../src/solvernets/launched-record-dispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
import { canonicalJson } from '../harnesses/engine/canonical-json.js';
|
|
22
22
|
import { canonicalManifestJson, manifestHash, } from './manifest.js';
|
|
23
23
|
import { validateSolverNetManifest, } from '../vendor/@jinn-network/sdk/dist/solvernets/index.js';
|
|
24
|
+
import { DiscoveryUnavailableError } from '../discovery/types.js';
|
|
24
25
|
// ── Constants ────────────────────────────────────────────────────────────────
|
|
25
26
|
/**
|
|
26
27
|
* Metadata-key prefix for SolverNet manifest anchors. The full key is
|
|
@@ -28,6 +29,14 @@ import { validateSolverNetManifest, } from '../vendor/@jinn-network/sdk/dist/sol
|
|
|
28
29
|
* subgraph for `LIKE 'solvernet-manifest:%'` filtering.
|
|
29
30
|
*/
|
|
30
31
|
export const SOLVERNET_MANIFEST_KEY_PREFIX = 'solvernet-manifest:';
|
|
32
|
+
function warnAndRethrowDiscoveryUnavailable(manifestCid, err) {
|
|
33
|
+
if (!(err instanceof DiscoveryUnavailableError)) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const codeSuffix = err.code ? ` (${err.code})` : '';
|
|
37
|
+
console.warn(`[solvernet] manifest ${manifestCid}: discoveryApi hash check unavailable${codeSuffix}: ${err.message}`);
|
|
38
|
+
throw err;
|
|
39
|
+
}
|
|
31
40
|
/**
|
|
32
41
|
* Schema version embedded in every lifecycle payload. Keep in sync with
|
|
33
42
|
* spec §6.3.
|
|
@@ -230,6 +239,7 @@ export class IdentityRegistryBackedSolverNetRegistryClient {
|
|
|
230
239
|
}
|
|
231
240
|
}
|
|
232
241
|
catch (err) {
|
|
242
|
+
warnAndRethrowDiscoveryUnavailable(args.manifestCid, err);
|
|
233
243
|
console.error(`[solvernet] manifest ${args.manifestCid}: discoveryApi hash check unavailable; ` +
|
|
234
244
|
`using IPFS CID-bound manifest (${err instanceof Error ? err.message : String(err)})`);
|
|
235
245
|
}
|
|
@@ -297,6 +307,7 @@ export class IdentityRegistryBackedSolverNetRegistryClient {
|
|
|
297
307
|
}
|
|
298
308
|
}
|
|
299
309
|
catch (err) {
|
|
310
|
+
warnAndRethrowDiscoveryUnavailable(manifestCid, err);
|
|
300
311
|
console.error(`[solvernet] manifest ${manifestCid}: discoveryApi hash check unavailable; ` +
|
|
301
312
|
`using IPFS CID-bound manifest (${err instanceof Error ? err.message : String(err)})`);
|
|
302
313
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry-client-erc8004.js","sourceRoot":"","sources":["../../src/solvernets/registry-client-erc8004.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,EACL,qBAAqB,EACrB,YAAY,GACb,MAAM,eAAe,CAAC;AAKvB,OAAO,EACL,yBAAyB,GAE1B,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"registry-client-erc8004.js","sourceRoot":"","sources":["../../src/solvernets/registry-client-erc8004.ts"],"names":[],"mappings":"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"}
|
|
@@ -255,9 +255,9 @@ export declare const DraftSolverNetRecordSchema: z.ZodObject<{
|
|
|
255
255
|
}, "strip", z.ZodTypeAny, {
|
|
256
256
|
schemaVersion: "solvernet.draft.v1";
|
|
257
257
|
createdAt: string;
|
|
258
|
-
updatedAt: string;
|
|
259
258
|
draftId: string;
|
|
260
259
|
completedSteps: ("define" | "reviewContract" | "configureGenerator" | "configurePricing")[];
|
|
260
|
+
updatedAt: string;
|
|
261
261
|
name?: string | undefined;
|
|
262
262
|
description?: string | undefined;
|
|
263
263
|
generatorConfig?: Record<string, unknown> | undefined;
|
|
@@ -269,9 +269,9 @@ export declare const DraftSolverNetRecordSchema: z.ZodObject<{
|
|
|
269
269
|
}, {
|
|
270
270
|
schemaVersion: "solvernet.draft.v1";
|
|
271
271
|
createdAt: string;
|
|
272
|
-
updatedAt: string;
|
|
273
272
|
draftId: string;
|
|
274
273
|
completedSteps: ("define" | "reviewContract" | "configureGenerator" | "configurePricing")[];
|
|
274
|
+
updatedAt: string;
|
|
275
275
|
name?: string | undefined;
|
|
276
276
|
description?: string | undefined;
|
|
277
277
|
generatorConfig?: Record<string, unknown> | undefined;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daemon-side AI-units gate config — issue #815.
|
|
3
|
+
*
|
|
4
|
+
* Resolves, per-manifest:
|
|
5
|
+
* - the credential that manifest's harness bills against
|
|
6
|
+
* - the projected AI-unit cost of one task on that harness/model
|
|
7
|
+
*
|
|
8
|
+
* Plus the active per-block / per-week caps from
|
|
9
|
+
* `resolveReferenceCeiling(env)`.
|
|
10
|
+
*
|
|
11
|
+
* Returns undefined only when no joined SolverNet resolves to a
|
|
12
|
+
* credential the gate could meaningfully meter — at that point the
|
|
13
|
+
* gate stays off entirely so the daemon does not spend a query per
|
|
14
|
+
* task on rows that will never sum.
|
|
15
|
+
*/
|
|
16
|
+
import type { JinnConfig } from '../config.js';
|
|
17
|
+
import { type CredentialId } from './credential.js';
|
|
18
|
+
export interface AiUnitsDaemonConfig {
|
|
19
|
+
capPerBlock: number;
|
|
20
|
+
capPerWeek: number;
|
|
21
|
+
/** manifestCid -> credentialId (set only when the harness has one). */
|
|
22
|
+
manifestCredentials: Record<string, CredentialId>;
|
|
23
|
+
/**
|
|
24
|
+
* manifestCid -> projected AI units per task. `null` means the model
|
|
25
|
+
* is unknown to the cost table and the gate must fail-open with a
|
|
26
|
+
* one-time warn rather than silently halting claims.
|
|
27
|
+
*/
|
|
28
|
+
manifestProjectedAiUnits: Record<string, number | null>;
|
|
29
|
+
/**
|
|
30
|
+
* manifestCid -> the model id from the joined SolverNet config. Threaded
|
|
31
|
+
* onto the per-request activity row at claim time so the row carries
|
|
32
|
+
* provenance of the projection. May be undefined when the operator
|
|
33
|
+
* joined without selecting a model.
|
|
34
|
+
*/
|
|
35
|
+
manifestModels: Record<string, string | undefined>;
|
|
36
|
+
}
|
|
37
|
+
export declare function buildAiUnitsConfig(config: Pick<JinnConfig, 'joinedSolverNets'>, env: NodeJS.ProcessEnv,
|
|
38
|
+
/** Optional home dir override for resolveCredentialId's disk probe — tests only. */
|
|
39
|
+
homeDirOverride?: string): AiUnitsDaemonConfig | undefined;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { resolveCredentialId } from './credential.js';
|
|
2
|
+
import { projectAiUnits, resolveReferenceCeiling } from './ai-units.js';
|
|
3
|
+
export function buildAiUnitsConfig(config, env,
|
|
4
|
+
/** Optional home dir override for resolveCredentialId's disk probe — tests only. */
|
|
5
|
+
homeDirOverride) {
|
|
6
|
+
const { units_per_block, units_per_week } = resolveReferenceCeiling(env);
|
|
7
|
+
const manifestCredentials = {};
|
|
8
|
+
const manifestProjectedAiUnits = {};
|
|
9
|
+
const manifestModels = {};
|
|
10
|
+
for (const [manifestCid, entry] of Object.entries(config.joinedSolverNets ?? {})) {
|
|
11
|
+
const credentialId = resolveCredentialId(entry.harness, env, homeDirOverride);
|
|
12
|
+
if (!credentialId)
|
|
13
|
+
continue;
|
|
14
|
+
manifestCredentials[manifestCid] = credentialId;
|
|
15
|
+
manifestProjectedAiUnits[manifestCid] = projectAiUnits(entry.harness, entry.model, credentialId);
|
|
16
|
+
manifestModels[manifestCid] = entry.model;
|
|
17
|
+
}
|
|
18
|
+
if (Object.keys(manifestCredentials).length === 0)
|
|
19
|
+
return undefined;
|
|
20
|
+
return {
|
|
21
|
+
capPerBlock: units_per_block,
|
|
22
|
+
capPerWeek: units_per_week,
|
|
23
|
+
manifestCredentials,
|
|
24
|
+
manifestProjectedAiUnits,
|
|
25
|
+
manifestModels,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=ai-units-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-units-config.js","sourceRoot":"","sources":["../../src/spend/ai-units-config.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,mBAAmB,EAAqB,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAsBxE,MAAM,UAAU,kBAAkB,CAChC,MAA4C,EAC5C,GAAsB;AACtB,oFAAoF;AACpF,eAAwB;IAExB,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;IAEzE,MAAM,mBAAmB,GAAiC,EAAE,CAAC;IAC7D,MAAM,wBAAwB,GAAkC,EAAE,CAAC;IACnE,MAAM,cAAc,GAAuC,EAAE,CAAC;IAE9D,KAAK,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,IAAI,EAAE,CAAC,EAAE,CAAC;QACjF,MAAM,YAAY,GAAG,mBAAmB,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,eAAe,CAAC,CAAC;QAC9E,IAAI,CAAC,YAAY;YAAE,SAAS;QAC5B,mBAAmB,CAAC,WAAW,CAAC,GAAG,YAAY,CAAC;QAChD,wBAAwB,CAAC,WAAW,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACjG,cAAc,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;IAC5C,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAEpE,OAAO;QACL,WAAW,EAAE,eAAe;QAC5B,UAAU,EAAE,cAAc;QAC1B,mBAAmB;QACnB,wBAAwB;QACxB,cAAc;KACf,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI-units calibration — the universal cost language for the M1
|
|
3
|
+
* cost-protection throttle (issue #815).
|
|
4
|
+
*
|
|
5
|
+
* One "AI unit" is the marginal USD cost of one task on the
|
|
6
|
+
* GPT-5.4-mini Codex-Plus baseline, scaled so that **100 units = 10% of a
|
|
7
|
+
* 6-hour-block-equivalent USD spend on that baseline**. Every other
|
|
8
|
+
* harness/model converts its USD cost-per-task through the same peg
|
|
9
|
+
* (`USD / GPT_5_4_MINI_USD_PER_BLOCK * 100`).
|
|
10
|
+
*
|
|
11
|
+
* Why a unit-of-account rather than raw USD: the ceiling is the same
|
|
12
|
+
* **100 units per 6h block** for every harness/model, so an operator on
|
|
13
|
+
* Haiku 4.5 (~1 unit/task) gets ~100 tasks per block, while an operator
|
|
14
|
+
* on Opus 4.7 (~50 units/task) gets ~2 tasks per block. The peg keeps the
|
|
15
|
+
* ceiling readable and ties it to the milestone framing of "~10% of a
|
|
16
|
+
* baseline AI subscription's weekly cap" (#605).
|
|
17
|
+
*
|
|
18
|
+
* The cap is layered with the existing per-credential USD `spendCaps`
|
|
19
|
+
* spend-cap gate from PR #345/#346 — both gates run; the more
|
|
20
|
+
* conservative one wins. This module owns the AI-units side only.
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Calibration peg: the USD cost of one GPT-5.4-mini Codex-Plus 6h block.
|
|
24
|
+
* Derived from a typical Codex Plus 6h block on GPT-5.4-mini: ~10 tasks at
|
|
25
|
+
* ~$0.0525/task (50k input × $0.00025/1k + 20k output × $0.002/1k) → ~$0.5.
|
|
26
|
+
*
|
|
27
|
+
* Conservative — biases toward over-warning rather than under-warning so
|
|
28
|
+
* the ceiling pauses early rather than late.
|
|
29
|
+
*/
|
|
30
|
+
export declare const GPT_5_4_MINI_USD_PER_BLOCK = 0.5;
|
|
31
|
+
/**
|
|
32
|
+
* The default reference ceiling — 100 AI units per 6h UTC-aligned block,
|
|
33
|
+
* with a weekly safety net at 28 × that (one block × 28 blocks/week).
|
|
34
|
+
*
|
|
35
|
+
* Override at runtime with `JINN_AI_UNITS_CEILING_OVERRIDE` (see
|
|
36
|
+
* `resolveReferenceCeiling`). Set as `<units>` for a per-block override
|
|
37
|
+
* (weekly auto-scales to 28×) or `<block>:<week>` for both explicitly.
|
|
38
|
+
*/
|
|
39
|
+
export declare const REFERENCE_CEILING: {
|
|
40
|
+
readonly units_per_block: number;
|
|
41
|
+
readonly units_per_week: number;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Project the AI-unit cost of one task for a harness/model combination.
|
|
45
|
+
*
|
|
46
|
+
* The AI-units cap meters every paid-LLM harness by model cost,
|
|
47
|
+
* regardless of whether the operator routes through a subscription
|
|
48
|
+
* (`*:subscription`) or a raw API key (`*:api-key`). Subscription
|
|
49
|
+
* quota is finite — the cap exists exactly to bound how much of it a
|
|
50
|
+
* node will burn on Jinn (the spec's "operators commit to a 48h
|
|
51
|
+
* burn-in knowing exactly what their node will consume" — issue #901
|
|
52
|
+
* corrected the #815 implementer's "subscription = 0 units" shortcut).
|
|
53
|
+
*
|
|
54
|
+
* - Returns `0` for harnesses that make no marginal LLM call
|
|
55
|
+
* (prediction harnesses, evaluators, unknown harnesses).
|
|
56
|
+
* - Returns `null` when the harness IS a paid-LLM harness but the
|
|
57
|
+
* model is unknown to the cost table — the caller treats that as
|
|
58
|
+
* "no projection available" and the gate fails *open* with a warn.
|
|
59
|
+
* - Otherwise returns `cost.usd / GPT_5_4_MINI_USD_PER_BLOCK * 100`.
|
|
60
|
+
*
|
|
61
|
+
* `credentialId` is the env-resolved auth path. It does NOT change
|
|
62
|
+
* the projection (the model costs the same regardless of auth path);
|
|
63
|
+
* it only labels the accounting bucket. The parameter remains for
|
|
64
|
+
* call-site clarity and future-proofing.
|
|
65
|
+
*/
|
|
66
|
+
export declare function projectAiUnits(harness: string | undefined, model: string | undefined, _credentialId?: string | null): number | null;
|
|
67
|
+
/**
|
|
68
|
+
* Resolve the active ceiling from env. CI / tests override the baked-in
|
|
69
|
+
* 100 units via `JINN_AI_UNITS_CEILING_OVERRIDE`. Accepts:
|
|
70
|
+
*
|
|
71
|
+
* - `"<n>"` — sets `units_per_block = n`; weekly auto-scales to `n * 28`.
|
|
72
|
+
* - `"<block>:<week>"` — sets both explicitly.
|
|
73
|
+
*
|
|
74
|
+
* Falls back to the baked-in `REFERENCE_CEILING` on a missing or
|
|
75
|
+
* malformed value (env-typo must not silently disable the gate).
|
|
76
|
+
*/
|
|
77
|
+
export declare function resolveReferenceCeiling(env: NodeJS.ProcessEnv): {
|
|
78
|
+
units_per_block: number;
|
|
79
|
+
units_per_week: number;
|
|
80
|
+
};
|
|
81
|
+
/** Start of the next 6h UTC-aligned block after `now`. */
|
|
82
|
+
export declare function blockResetsAtUtc(now: Date): Date;
|
|
83
|
+
/**
|
|
84
|
+
* Stable id for a 6h block — used to dedupe `ai_units_cap_reached`
|
|
85
|
+
* activity events to one-per-(credential, block).
|
|
86
|
+
*/
|
|
87
|
+
export declare function blockIdUtc(now: Date): string;
|
|
88
|
+
/** Reset instant for the 7-day window — `now + (boundary - elapsed)`. We use rolling 7d here. */
|
|
89
|
+
export declare function weekResetsAtUtc(now: Date): Date;
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI-units calibration — the universal cost language for the M1
|
|
3
|
+
* cost-protection throttle (issue #815).
|
|
4
|
+
*
|
|
5
|
+
* One "AI unit" is the marginal USD cost of one task on the
|
|
6
|
+
* GPT-5.4-mini Codex-Plus baseline, scaled so that **100 units = 10% of a
|
|
7
|
+
* 6-hour-block-equivalent USD spend on that baseline**. Every other
|
|
8
|
+
* harness/model converts its USD cost-per-task through the same peg
|
|
9
|
+
* (`USD / GPT_5_4_MINI_USD_PER_BLOCK * 100`).
|
|
10
|
+
*
|
|
11
|
+
* Why a unit-of-account rather than raw USD: the ceiling is the same
|
|
12
|
+
* **100 units per 6h block** for every harness/model, so an operator on
|
|
13
|
+
* Haiku 4.5 (~1 unit/task) gets ~100 tasks per block, while an operator
|
|
14
|
+
* on Opus 4.7 (~50 units/task) gets ~2 tasks per block. The peg keeps the
|
|
15
|
+
* ceiling readable and ties it to the milestone framing of "~10% of a
|
|
16
|
+
* baseline AI subscription's weekly cap" (#605).
|
|
17
|
+
*
|
|
18
|
+
* The cap is layered with the existing per-credential USD `spendCaps`
|
|
19
|
+
* spend-cap gate from PR #345/#346 — both gates run; the more
|
|
20
|
+
* conservative one wins. This module owns the AI-units side only.
|
|
21
|
+
*/
|
|
22
|
+
import { estimateModelCost } from '../harnesses/cost-estimates.js';
|
|
23
|
+
import { CLAUDE_CODE_HARNESS, CODEX_HARNESS, HERMES_AGENT_HARNESS, canonicalHarnessName, } from '../harnesses/names.js';
|
|
24
|
+
/**
|
|
25
|
+
* Calibration peg: the USD cost of one GPT-5.4-mini Codex-Plus 6h block.
|
|
26
|
+
* Derived from a typical Codex Plus 6h block on GPT-5.4-mini: ~10 tasks at
|
|
27
|
+
* ~$0.0525/task (50k input × $0.00025/1k + 20k output × $0.002/1k) → ~$0.5.
|
|
28
|
+
*
|
|
29
|
+
* Conservative — biases toward over-warning rather than under-warning so
|
|
30
|
+
* the ceiling pauses early rather than late.
|
|
31
|
+
*/
|
|
32
|
+
export const GPT_5_4_MINI_USD_PER_BLOCK = 0.5;
|
|
33
|
+
/**
|
|
34
|
+
* The default reference ceiling — 100 AI units per 6h UTC-aligned block,
|
|
35
|
+
* with a weekly safety net at 28 × that (one block × 28 blocks/week).
|
|
36
|
+
*
|
|
37
|
+
* Override at runtime with `JINN_AI_UNITS_CEILING_OVERRIDE` (see
|
|
38
|
+
* `resolveReferenceCeiling`). Set as `<units>` for a per-block override
|
|
39
|
+
* (weekly auto-scales to 28×) or `<block>:<week>` for both explicitly.
|
|
40
|
+
*/
|
|
41
|
+
export const REFERENCE_CEILING = {
|
|
42
|
+
units_per_block: 100,
|
|
43
|
+
units_per_week: 100 * 28,
|
|
44
|
+
};
|
|
45
|
+
/** 6h block in milliseconds — UTC blocks start at 00:00 / 06:00 / 12:00 / 18:00. */
|
|
46
|
+
const SIX_HOUR_BLOCK_MS = 6 * 60 * 60 * 1_000;
|
|
47
|
+
/** 7 days in milliseconds — UTC-aligned. */
|
|
48
|
+
const SEVEN_DAY_MS = 7 * 24 * 60 * 60 * 1_000;
|
|
49
|
+
/**
|
|
50
|
+
* Project the AI-unit cost of one task for a harness/model combination.
|
|
51
|
+
*
|
|
52
|
+
* The AI-units cap meters every paid-LLM harness by model cost,
|
|
53
|
+
* regardless of whether the operator routes through a subscription
|
|
54
|
+
* (`*:subscription`) or a raw API key (`*:api-key`). Subscription
|
|
55
|
+
* quota is finite — the cap exists exactly to bound how much of it a
|
|
56
|
+
* node will burn on Jinn (the spec's "operators commit to a 48h
|
|
57
|
+
* burn-in knowing exactly what their node will consume" — issue #901
|
|
58
|
+
* corrected the #815 implementer's "subscription = 0 units" shortcut).
|
|
59
|
+
*
|
|
60
|
+
* - Returns `0` for harnesses that make no marginal LLM call
|
|
61
|
+
* (prediction harnesses, evaluators, unknown harnesses).
|
|
62
|
+
* - Returns `null` when the harness IS a paid-LLM harness but the
|
|
63
|
+
* model is unknown to the cost table — the caller treats that as
|
|
64
|
+
* "no projection available" and the gate fails *open* with a warn.
|
|
65
|
+
* - Otherwise returns `cost.usd / GPT_5_4_MINI_USD_PER_BLOCK * 100`.
|
|
66
|
+
*
|
|
67
|
+
* `credentialId` is the env-resolved auth path. It does NOT change
|
|
68
|
+
* the projection (the model costs the same regardless of auth path);
|
|
69
|
+
* it only labels the accounting bucket. The parameter remains for
|
|
70
|
+
* call-site clarity and future-proofing.
|
|
71
|
+
*/
|
|
72
|
+
export function projectAiUnits(harness, model, _credentialId) {
|
|
73
|
+
if (!harness)
|
|
74
|
+
return null;
|
|
75
|
+
const canonical = canonicalHarnessName(harness);
|
|
76
|
+
const isPaidLlmHarness = canonical === CLAUDE_CODE_HARNESS ||
|
|
77
|
+
canonical === CODEX_HARNESS ||
|
|
78
|
+
canonical === HERMES_AGENT_HARNESS;
|
|
79
|
+
if (!isPaidLlmHarness)
|
|
80
|
+
return 0;
|
|
81
|
+
if (!model)
|
|
82
|
+
return null;
|
|
83
|
+
const cost = estimateModelCost(model);
|
|
84
|
+
if (!cost)
|
|
85
|
+
return null;
|
|
86
|
+
return (cost.usd / GPT_5_4_MINI_USD_PER_BLOCK) * 100;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Resolve the active ceiling from env. CI / tests override the baked-in
|
|
90
|
+
* 100 units via `JINN_AI_UNITS_CEILING_OVERRIDE`. Accepts:
|
|
91
|
+
*
|
|
92
|
+
* - `"<n>"` — sets `units_per_block = n`; weekly auto-scales to `n * 28`.
|
|
93
|
+
* - `"<block>:<week>"` — sets both explicitly.
|
|
94
|
+
*
|
|
95
|
+
* Falls back to the baked-in `REFERENCE_CEILING` on a missing or
|
|
96
|
+
* malformed value (env-typo must not silently disable the gate).
|
|
97
|
+
*/
|
|
98
|
+
export function resolveReferenceCeiling(env) {
|
|
99
|
+
const raw = env['JINN_AI_UNITS_CEILING_OVERRIDE'];
|
|
100
|
+
if (raw == null || raw.trim() === '') {
|
|
101
|
+
return { units_per_block: REFERENCE_CEILING.units_per_block, units_per_week: REFERENCE_CEILING.units_per_week };
|
|
102
|
+
}
|
|
103
|
+
const trimmed = raw.trim();
|
|
104
|
+
if (trimmed.includes(':')) {
|
|
105
|
+
const [a, b] = trimmed.split(':', 2);
|
|
106
|
+
const block = Number(a);
|
|
107
|
+
const week = Number(b);
|
|
108
|
+
if (Number.isFinite(block) && block > 0 && Number.isFinite(week) && week > 0) {
|
|
109
|
+
return { units_per_block: block, units_per_week: week };
|
|
110
|
+
}
|
|
111
|
+
warnMalformedOverride(raw);
|
|
112
|
+
return { units_per_block: REFERENCE_CEILING.units_per_block, units_per_week: REFERENCE_CEILING.units_per_week };
|
|
113
|
+
}
|
|
114
|
+
const block = Number(trimmed);
|
|
115
|
+
if (Number.isFinite(block) && block > 0) {
|
|
116
|
+
return { units_per_block: block, units_per_week: block * 28 };
|
|
117
|
+
}
|
|
118
|
+
warnMalformedOverride(raw);
|
|
119
|
+
return { units_per_block: REFERENCE_CEILING.units_per_block, units_per_week: REFERENCE_CEILING.units_per_week };
|
|
120
|
+
}
|
|
121
|
+
function warnMalformedOverride(raw) {
|
|
122
|
+
// One-time warn per resolve call — the function is only invoked at
|
|
123
|
+
// startup, so a module-level memo is unnecessary. Surfaces the operator's
|
|
124
|
+
// typo instead of silently falling back to the baked-in default.
|
|
125
|
+
console.warn(`[ai-units] warn: JINN_AI_UNITS_CEILING_OVERRIDE="${raw}" is malformed — ` +
|
|
126
|
+
`using default ${REFERENCE_CEILING.units_per_block}/${REFERENCE_CEILING.units_per_week} per (block, week)`);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Start of the 6h UTC-aligned block containing `now`. Blocks begin at
|
|
130
|
+
* 00:00, 06:00, 12:00, 18:00 UTC; `blockStartUtc(t)` returns the most
|
|
131
|
+
* recent such instant ≤ t. Used to bound the "units this block" sum.
|
|
132
|
+
*/
|
|
133
|
+
function blockStartUtc(now) {
|
|
134
|
+
const startOfDay = Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate());
|
|
135
|
+
const sinceDayStart = now.getTime() - startOfDay;
|
|
136
|
+
// Cap at 3 — 4 blocks per day (indices 0..3); defensive against
|
|
137
|
+
// millisecond rounding pushing the floor over 4 at day boundaries.
|
|
138
|
+
const blocksIn = Math.min(Math.floor(sinceDayStart / SIX_HOUR_BLOCK_MS), 3);
|
|
139
|
+
return new Date(startOfDay + blocksIn * SIX_HOUR_BLOCK_MS);
|
|
140
|
+
}
|
|
141
|
+
/** Start of the next 6h UTC-aligned block after `now`. */
|
|
142
|
+
export function blockResetsAtUtc(now) {
|
|
143
|
+
return new Date(blockStartUtc(now).getTime() + SIX_HOUR_BLOCK_MS);
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Stable id for a 6h block — used to dedupe `ai_units_cap_reached`
|
|
147
|
+
* activity events to one-per-(credential, block).
|
|
148
|
+
*/
|
|
149
|
+
export function blockIdUtc(now) {
|
|
150
|
+
return blockStartUtc(now).toISOString();
|
|
151
|
+
}
|
|
152
|
+
/** Reset instant for the 7-day window — `now + (boundary - elapsed)`. We use rolling 7d here. */
|
|
153
|
+
export function weekResetsAtUtc(now) {
|
|
154
|
+
return new Date(now.getTime() + SEVEN_DAY_MS);
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=ai-units.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-units.js","sourceRoot":"","sources":["../../src/spend/ai-units.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type CredentialId } from './credential.js';
|
|
2
|
+
export interface CostSurfaceHarnessStatus {
|
|
3
|
+
credentialId: CredentialId | null;
|
|
4
|
+
usesPaidApiKey: boolean;
|
|
5
|
+
}
|
|
6
|
+
export interface CostSurfaceStatus {
|
|
7
|
+
harnesses: Record<string, CostSurfaceHarnessStatus>;
|
|
8
|
+
}
|
|
9
|
+
export declare function credentialUsesPaidApiKey(credentialId: CredentialId | null): boolean;
|
|
10
|
+
export declare function buildCostSurfaceStatus(env: NodeJS.ProcessEnv,
|
|
11
|
+
/** Optional home dir override for the disk-OAuth probe — tests only. */
|
|
12
|
+
homeDirOverride?: string): CostSurfaceStatus;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { CLAUDE_CODE_HARNESS, CODEX_HARNESS, HERMES_AGENT_HARNESS, } from '../harnesses/names.js';
|
|
2
|
+
import { resolveCredentialId } from './credential.js';
|
|
3
|
+
const COST_SURFACE_HARNESSES = [
|
|
4
|
+
CLAUDE_CODE_HARNESS,
|
|
5
|
+
CODEX_HARNESS,
|
|
6
|
+
HERMES_AGENT_HARNESS,
|
|
7
|
+
];
|
|
8
|
+
export function credentialUsesPaidApiKey(credentialId) {
|
|
9
|
+
return credentialId !== null && credentialId.endsWith(':api-key');
|
|
10
|
+
}
|
|
11
|
+
export function buildCostSurfaceStatus(env,
|
|
12
|
+
/** Optional home dir override for the disk-OAuth probe — tests only. */
|
|
13
|
+
homeDirOverride) {
|
|
14
|
+
const harnesses = {};
|
|
15
|
+
for (const harness of COST_SURFACE_HARNESSES) {
|
|
16
|
+
const credentialId = resolveCredentialId(harness, env, homeDirOverride);
|
|
17
|
+
harnesses[harness] = {
|
|
18
|
+
credentialId,
|
|
19
|
+
usesPaidApiKey: credentialUsesPaidApiKey(credentialId),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
return { harnesses };
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=cost-surface-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost-surface-status.js","sourceRoot":"","sources":["../../src/spend/cost-surface-status.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,mBAAmB,EAAqB,MAAM,iBAAiB,CAAC;AAEzE,MAAM,sBAAsB,GAAG;IAC7B,mBAAmB;IACnB,aAAa;IACb,oBAAoB;CACZ,CAAC;AAWX,MAAM,UAAU,wBAAwB,CAAC,YAAiC;IACxE,OAAO,YAAY,KAAK,IAAI,IAAI,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,GAAsB;AACtB,wEAAwE;AACxE,eAAwB;IAExB,MAAM,SAAS,GAA6C,EAAE,CAAC;IAC/D,KAAK,MAAM,OAAO,IAAI,sBAAsB,EAAE,CAAC;QAC7C,MAAM,YAAY,GAAG,mBAAmB,CAAC,OAAO,EAAE,GAAG,EAAE,eAAe,CAAC,CAAC;QACxE,SAAS,CAAC,OAAO,CAAC,GAAG;YACnB,YAAY;YACZ,cAAc,EAAE,wBAAwB,CAAC,YAAY,CAAC;SACvD,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/** A credential identity. Format: `{provider}:{authMethod}`, e.g. `anthropic:api-key`. Never empty. */
|
|
2
|
+
export type CredentialId = string;
|
|
3
|
+
/**
|
|
4
|
+
* Does this operator have Claude Code installed and authed via OAuth?
|
|
5
|
+
*
|
|
6
|
+
* The `claude` CLI keeps its OAuth token in the OS keyring on macOS, in
|
|
7
|
+
* platform-equivalent stores elsewhere, and writes per-user state under
|
|
8
|
+
* `~/.claude/`. The cheapest cross-platform "operator has an active
|
|
9
|
+
* Claude Code Pro subscription set up" probe is "does `~/.claude/`
|
|
10
|
+
* exist?" — it's created by `claude` on first run and persists.
|
|
11
|
+
*
|
|
12
|
+
* Injectable for tests via `homeDirOverride`.
|
|
13
|
+
*/
|
|
14
|
+
export declare function hasClaudeCodeOnDisk(homeDirOverride?: string): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Does this operator have Codex CLI installed and authed?
|
|
17
|
+
*
|
|
18
|
+
* Codex CLI writes its OAuth to `~/.codex/auth.json`. Presence is the
|
|
19
|
+
* subscription signal.
|
|
20
|
+
*/
|
|
21
|
+
export declare function hasCodexOnDisk(homeDirOverride?: string): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Resolve which authentication credential a harness will bill against.
|
|
24
|
+
*
|
|
25
|
+
* Precedence per provider (preserved from PR #345 / #474):
|
|
26
|
+
* 1. subscription token env var (`*:subscription`) — most explicit
|
|
27
|
+
* subscription marker; the operator has deliberately set it
|
|
28
|
+
* 2. raw-API-key env var (`*:api-key`) — explicit api-key
|
|
29
|
+
* 3. on-disk OAuth (`*:subscription`) — the typical operator who
|
|
30
|
+
* installed `claude` / `codex` CLI and never set an env var
|
|
31
|
+
* 4. null — no credential resolved
|
|
32
|
+
*
|
|
33
|
+
* Returns null when the harness makes no paid LLM call (e.g. prediction
|
|
34
|
+
* harnesses) or no credential is recognisable. Issue #901: disk
|
|
35
|
+
* detection added so stock subscription installs get a credential and
|
|
36
|
+
* the AI-units gate engages by default; precedence above kept stable so
|
|
37
|
+
* the cost-surface UI from #345 / #474 still reads the same.
|
|
38
|
+
*/
|
|
39
|
+
export declare function resolveCredentialId(harness: string | undefined, env: NodeJS.ProcessEnv, homeDirOverride?: string): CredentialId | null;
|