@jinn-network/client 0.1.1 → 0.1.2-canary.6237288d
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 +16 -0
- package/CONTRIBUTING.md +123 -0
- package/README.md +213 -37
- package/deployments/deployment-claim-registry-baseSepolia.json +13 -0
- package/deployments/deployment-jinn-testnet-faucet-baseSepolia-fast.json +15 -0
- package/dist/adapters/adapter.d.ts +7 -0
- package/dist/adapters/claim-registry/abi.d.ts +127 -0
- package/dist/adapters/claim-registry/abi.js +93 -0
- package/dist/adapters/claim-registry/abi.js.map +1 -0
- package/dist/adapters/claim-registry/client.d.ts +89 -0
- package/dist/adapters/claim-registry/client.js +205 -0
- package/dist/adapters/claim-registry/client.js.map +1 -0
- package/dist/adapters/mech/adapter.d.ts +5 -0
- package/dist/adapters/mech/adapter.js +211 -56
- package/dist/adapters/mech/adapter.js.map +1 -1
- package/dist/adapters/mech/contracts.d.ts +19 -1
- package/dist/adapters/mech/contracts.js +112 -8
- package/dist/adapters/mech/contracts.js.map +1 -1
- package/dist/adapters/mech/ipfs.d.ts +38 -5
- package/dist/adapters/mech/ipfs.js +174 -17
- package/dist/adapters/mech/ipfs.js.map +1 -1
- package/dist/adapters/mech/safe.js +8 -6
- package/dist/adapters/mech/safe.js.map +1 -1
- package/dist/adapters/mech/types.d.ts +22 -46
- package/dist/adapters/mech/types.js +16 -35
- package/dist/adapters/mech/types.js.map +1 -1
- package/dist/api/balance-build.js +3 -3
- package/dist/api/balance-build.js.map +1 -1
- package/dist/api/fleet-build.js +35 -40
- package/dist/api/fleet-build.js.map +1 -1
- package/dist/api/gather-status.d.ts +6 -0
- package/dist/api/gather-status.js +187 -4
- package/dist/api/gather-status.js.map +1 -1
- package/dist/api/history-build.d.ts +5 -1
- package/dist/api/history-build.js +51 -26
- package/dist/api/history-build.js.map +1 -1
- package/dist/api/portfolio-v0-build.d.ts +83 -0
- package/dist/api/portfolio-v0-build.js +143 -0
- package/dist/api/portfolio-v0-build.js.map +1 -0
- package/dist/api/portfolio-v0-doctor.d.ts +37 -0
- package/dist/api/portfolio-v0-doctor.js +123 -0
- package/dist/api/portfolio-v0-doctor.js.map +1 -0
- package/dist/api/rewards-build.js +30 -14
- package/dist/api/rewards-build.js.map +1 -1
- package/dist/api/status-build.d.ts +39 -6
- package/dist/api/status-build.js +3 -1
- package/dist/api/status-build.js.map +1 -1
- package/dist/api/status-rollup-build.d.ts +2 -0
- package/dist/api/status-rollup-build.js +30 -3
- package/dist/api/status-rollup-build.js.map +1 -1
- package/dist/bin/jinn-mcp.d.ts +0 -12
- package/dist/bin/jinn-mcp.js +5 -14
- package/dist/bin/jinn-mcp.js.map +1 -1
- package/dist/build-meta.json +1 -1
- package/dist/cli/commands/auth.js +137 -25
- package/dist/cli/commands/auth.js.map +1 -1
- package/dist/cli/commands/balance.js +8 -1
- package/dist/cli/commands/balance.js.map +1 -1
- package/dist/cli/commands/bootstrap.js +23 -0
- package/dist/cli/commands/bootstrap.js.map +1 -1
- package/dist/cli/commands/doctor.js +160 -14
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/fleet-scale.js +1 -0
- package/dist/cli/commands/fleet-scale.js.map +1 -1
- package/dist/cli/commands/fleet.js +10 -1
- package/dist/cli/commands/fleet.js.map +1 -1
- package/dist/cli/commands/fund-requirements.js +2 -0
- package/dist/cli/commands/fund-requirements.js.map +1 -1
- package/dist/cli/commands/history.js +25 -6
- package/dist/cli/commands/history.js.map +1 -1
- package/dist/cli/commands/intents.d.ts +17 -0
- package/dist/cli/commands/intents.js +489 -0
- package/dist/cli/commands/intents.js.map +1 -0
- package/dist/cli/commands/keys-backup.js +13 -11
- package/dist/cli/commands/keys-backup.js.map +1 -1
- package/dist/cli/commands/logs.js +35 -11
- package/dist/cli/commands/logs.js.map +1 -1
- package/dist/cli/commands/mcp.d.ts +3 -0
- package/dist/cli/commands/mcp.js +19 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/plugin-install.js +8 -4
- package/dist/cli/commands/plugin-install.js.map +1 -1
- package/dist/cli/commands/quickstart.js +99 -5
- package/dist/cli/commands/quickstart.js.map +1 -1
- package/dist/cli/commands/rewards.js +27 -1
- package/dist/cli/commands/rewards.js.map +1 -1
- package/dist/cli/commands/run.js +38 -0
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/status.js +11 -1
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/submit-intent.js +110 -44
- package/dist/cli/commands/submit-intent.js.map +1 -1
- package/dist/cli/commands/version.js +1 -0
- package/dist/cli/commands/version.js.map +1 -1
- package/dist/cli/deployment-digest.js +5 -0
- package/dist/cli/deployment-digest.js.map +1 -1
- package/dist/cli/execution-context.js +1 -0
- package/dist/cli/execution-context.js.map +1 -1
- package/dist/cli/index.js +4 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/intent-registry-access.d.ts +62 -0
- package/dist/cli/intent-registry-access.js +165 -0
- package/dist/cli/intent-registry-access.js.map +1 -0
- package/dist/cli/introspection-context.js +12 -8
- package/dist/cli/introspection-context.js.map +1 -1
- package/dist/cli/password.d.ts +21 -9
- package/dist/cli/password.js +45 -24
- package/dist/cli/password.js.map +1 -1
- package/dist/config.d.ts +137 -8
- package/dist/config.js +70 -12
- package/dist/config.js.map +1 -1
- package/dist/daemon/balance-topup-loop.js +32 -4
- package/dist/daemon/balance-topup-loop.js.map +1 -1
- package/dist/daemon/creator.d.ts +7 -4
- package/dist/daemon/creator.js +55 -26
- package/dist/daemon/creator.js.map +1 -1
- package/dist/daemon/daemon.d.ts +35 -3
- package/dist/daemon/daemon.js +99 -7
- package/dist/daemon/daemon.js.map +1 -1
- package/dist/daemon/delivery-watcher.d.ts +3 -1
- package/dist/daemon/delivery-watcher.js +19 -1
- package/dist/daemon/delivery-watcher.js.map +1 -1
- package/dist/daemon/reward-claim-loop.js +38 -1
- package/dist/daemon/reward-claim-loop.js.map +1 -1
- package/dist/dashboard/index.html +71 -496
- package/dist/discovery/registry.d.ts +54 -0
- package/dist/discovery/registry.js +73 -0
- package/dist/discovery/registry.js.map +1 -1
- package/dist/earning/bootstrap.d.ts +2 -1
- package/dist/earning/bootstrap.js +71 -33
- package/dist/earning/bootstrap.js.map +1 -1
- package/dist/earning/contracts.d.ts +10 -0
- package/dist/earning/contracts.js +24 -0
- package/dist/earning/contracts.js.map +1 -1
- package/dist/earning/jinn-rewards.d.ts +9 -0
- package/dist/earning/jinn-rewards.js +7 -0
- package/dist/earning/jinn-rewards.js.map +1 -1
- package/dist/earning/stolas-claim.d.ts +6 -0
- package/dist/earning/stolas-claim.js +7 -0
- package/dist/earning/stolas-claim.js.map +1 -1
- package/dist/intents/kinds/constants.d.ts +5 -0
- package/dist/intents/kinds/constants.js +6 -0
- package/dist/intents/kinds/constants.js.map +1 -0
- package/dist/intents/kinds/index.d.ts +28 -0
- package/dist/intents/kinds/index.js +50 -0
- package/dist/intents/kinds/index.js.map +1 -0
- package/dist/intents/kinds/portfolio-v0.d.ts +2 -0
- package/dist/intents/kinds/portfolio-v0.js +13 -0
- package/dist/intents/kinds/portfolio-v0.js.map +1 -0
- package/dist/intents/kinds/prediction-apy-v0.d.ts +3 -0
- package/dist/intents/kinds/prediction-apy-v0.js +21 -0
- package/dist/intents/kinds/prediction-apy-v0.js.map +1 -0
- package/dist/intents/kinds/prediction-v0.d.ts +3 -0
- package/dist/intents/kinds/prediction-v0.js +32 -0
- package/dist/intents/kinds/prediction-v0.js.map +1 -0
- package/dist/intents/kinds/spec-kind.d.ts +38 -0
- package/dist/intents/kinds/spec-kind.js +6 -0
- package/dist/intents/kinds/spec-kind.js.map +1 -0
- package/dist/intents/posting-service.d.ts +26 -0
- package/dist/intents/posting-service.js +218 -0
- package/dist/intents/posting-service.js.map +1 -0
- package/dist/intents/prediction-apy-v0-auto.d.ts +11 -0
- package/dist/intents/prediction-apy-v0-auto.js +46 -0
- package/dist/intents/prediction-apy-v0-auto.js.map +1 -0
- package/dist/intents/prediction-apy-v0-template.d.ts +8 -0
- package/dist/intents/prediction-apy-v0-template.js +22 -0
- package/dist/intents/prediction-apy-v0-template.js.map +1 -0
- package/dist/intents/prediction-v0-auto.d.ts +53 -0
- package/dist/intents/prediction-v0-auto.js +84 -0
- package/dist/intents/prediction-v0-auto.js.map +1 -0
- package/dist/intents/prediction-v0-template.d.ts +70 -0
- package/dist/intents/prediction-v0-template.js +145 -0
- package/dist/intents/prediction-v0-template.js.map +1 -0
- package/dist/intents/sources.d.ts +39 -0
- package/dist/intents/sources.js +42 -0
- package/dist/intents/sources.js.map +1 -0
- package/dist/main.js +175 -3
- package/dist/main.js.map +1 -1
- package/dist/mcp/operator-server.d.ts +1 -1
- package/dist/mcp/operator-server.js +1 -1
- package/dist/mcp/server.js +8 -4
- package/dist/mcp/server.js.map +1 -1
- package/dist/observability/emit-event.d.ts +12 -0
- package/dist/observability/emit-event.js +27 -0
- package/dist/observability/emit-event.js.map +1 -0
- package/dist/preflight/api-port.d.ts +13 -0
- package/dist/preflight/api-port.js +32 -0
- package/dist/preflight/api-port.js.map +1 -0
- package/dist/preflight/claude-auth.d.ts +12 -1
- package/dist/preflight/claude-auth.js +21 -3
- package/dist/preflight/claude-auth.js.map +1 -1
- package/dist/preflight/rpc-network.d.ts +44 -0
- package/dist/preflight/rpc-network.js +121 -0
- package/dist/preflight/rpc-network.js.map +1 -0
- package/dist/restorer/engine/canonical-json.d.ts +18 -0
- package/dist/restorer/engine/canonical-json.js +59 -0
- package/dist/restorer/engine/canonical-json.js.map +1 -0
- package/dist/restorer/engine/claim.d.ts +69 -0
- package/dist/restorer/engine/claim.js +104 -0
- package/dist/restorer/engine/claim.js.map +1 -0
- package/dist/restorer/engine/delivery.d.ts +52 -0
- package/dist/restorer/engine/delivery.js +63 -0
- package/dist/restorer/engine/delivery.js.map +1 -0
- package/dist/restorer/engine/engine.d.ts +213 -0
- package/dist/restorer/engine/engine.js +769 -0
- package/dist/restorer/engine/engine.js.map +1 -0
- package/dist/restorer/engine/manifest-assembly.d.ts +67 -0
- package/dist/restorer/engine/manifest-assembly.js +79 -0
- package/dist/restorer/engine/manifest-assembly.js.map +1 -0
- package/dist/restorer/engine/packaging.d.ts +87 -0
- package/dist/restorer/engine/packaging.js +350 -0
- package/dist/restorer/engine/packaging.js.map +1 -0
- package/dist/restorer/engine/persistence.d.ts +170 -0
- package/dist/restorer/engine/persistence.js +381 -0
- package/dist/restorer/engine/persistence.js.map +1 -0
- package/dist/restorer/engine/recovery.d.ts +22 -0
- package/dist/restorer/engine/recovery.js +24 -0
- package/dist/restorer/engine/recovery.js.map +1 -0
- package/dist/restorer/engine/registry.d.ts +62 -0
- package/dist/restorer/engine/registry.js +73 -0
- package/dist/restorer/engine/registry.js.map +1 -0
- package/dist/restorer/engine/signing.d.ts +30 -0
- package/dist/restorer/engine/signing.js +39 -0
- package/dist/restorer/engine/signing.js.map +1 -0
- package/dist/restorer/engine/state.d.ts +42 -0
- package/dist/restorer/engine/state.js +87 -0
- package/dist/restorer/engine/state.js.map +1 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/api-wallet.d.ts +64 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/api-wallet.js +96 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/api-wallet.js.map +1 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/index.d.ts +104 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/index.js +721 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/index.js.map +1 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/mcp-tools.d.ts +137 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/mcp-tools.js +865 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/mcp-tools.js.map +1 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/safety-rails.d.ts +74 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/safety-rails.js +74 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/safety-rails.js.map +1 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/session-orchestrator.d.ts +97 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/session-orchestrator.js +226 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/session-orchestrator.js.map +1 -0
- package/dist/restorer/impls/claude-mcp-prediction/index.d.ts +44 -0
- package/dist/restorer/impls/claude-mcp-prediction/index.js +239 -0
- package/dist/restorer/impls/claude-mcp-prediction/index.js.map +1 -0
- package/dist/restorer/impls/claude-mcp-prediction/mcp-tools.d.ts +38 -0
- package/dist/restorer/impls/claude-mcp-prediction/mcp-tools.js +135 -0
- package/dist/restorer/impls/claude-mcp-prediction/mcp-tools.js.map +1 -0
- package/dist/restorer/impls/claude-mcp-prediction/prompt.d.ts +8 -0
- package/dist/restorer/impls/claude-mcp-prediction/prompt.js +54 -0
- package/dist/restorer/impls/claude-mcp-prediction/prompt.js.map +1 -0
- package/dist/restorer/impls/claude-mcp-prediction/session-orchestrator.d.ts +36 -0
- package/dist/restorer/impls/claude-mcp-prediction/session-orchestrator.js +137 -0
- package/dist/restorer/impls/claude-mcp-prediction/session-orchestrator.js.map +1 -0
- package/dist/restorer/impls/claude-mcp-prediction/types.d.ts +84 -0
- package/dist/restorer/impls/claude-mcp-prediction/types.js +6 -0
- package/dist/restorer/impls/claude-mcp-prediction/types.js.map +1 -0
- package/dist/restorer/impls/claude-mcp-prediction-apy/index.d.ts +34 -0
- package/dist/restorer/impls/claude-mcp-prediction-apy/index.js +233 -0
- package/dist/restorer/impls/claude-mcp-prediction-apy/index.js.map +1 -0
- package/dist/restorer/impls/claude-mcp-prediction-apy/mcp-tools.d.ts +18 -0
- package/dist/restorer/impls/claude-mcp-prediction-apy/mcp-tools.js +136 -0
- package/dist/restorer/impls/claude-mcp-prediction-apy/mcp-tools.js.map +1 -0
- package/dist/restorer/impls/claude-mcp-prediction-apy/prompt.d.ts +7 -0
- package/dist/restorer/impls/claude-mcp-prediction-apy/prompt.js +46 -0
- package/dist/restorer/impls/claude-mcp-prediction-apy/prompt.js.map +1 -0
- package/dist/restorer/impls/claude-mcp-prediction-apy/session-orchestrator.d.ts +27 -0
- package/dist/restorer/impls/claude-mcp-prediction-apy/session-orchestrator.js +128 -0
- package/dist/restorer/impls/claude-mcp-prediction-apy/session-orchestrator.js.map +1 -0
- package/dist/restorer/impls/claude-mcp-prediction-apy/types.d.ts +64 -0
- package/dist/restorer/impls/claude-mcp-prediction-apy/types.js +6 -0
- package/dist/restorer/impls/claude-mcp-prediction-apy/types.js.map +1 -0
- package/dist/restorer/impls/evaluation-context.d.ts +16 -0
- package/dist/restorer/impls/evaluation-context.js +18 -0
- package/dist/restorer/impls/evaluation-context.js.map +1 -0
- package/dist/restorer/impls/index.d.ts +46 -0
- package/dist/restorer/impls/index.js +88 -0
- package/dist/restorer/impls/index.js.map +1 -0
- package/dist/restorer/impls/legacy-claude/index.d.ts +52 -0
- package/dist/restorer/impls/legacy-claude/index.js +140 -0
- package/dist/restorer/impls/legacy-claude/index.js.map +1 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/canonical-metrics.d.ts +68 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/canonical-metrics.js +117 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/canonical-metrics.js.map +1 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/availability.d.ts +49 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/availability.js +91 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/availability.js.map +1 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/consistency.d.ts +78 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/consistency.js +274 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/consistency.js.map +1 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/eligibility.d.ts +23 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/eligibility.js +49 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/eligibility.js.map +1 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/integrity.d.ts +25 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/integrity.js +44 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/integrity.js.map +1 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/spec.d.ts +17 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/spec.js +43 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/spec.js.map +1 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/index.d.ts +44 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/index.js +440 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/index.js.map +1 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/score.d.ts +21 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/score.js +32 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/score.js.map +1 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/types.d.ts +34 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/types.js +8 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/types.js.map +1 -0
- package/dist/restorer/impls/prediction-apy-v0-baseline/index.d.ts +40 -0
- package/dist/restorer/impls/prediction-apy-v0-baseline/index.js +107 -0
- package/dist/restorer/impls/prediction-apy-v0-baseline/index.js.map +1 -0
- package/dist/restorer/impls/prediction-apy-v0-baseline/strategy.d.ts +2 -0
- package/dist/restorer/impls/prediction-apy-v0-baseline/strategy.js +7 -0
- package/dist/restorer/impls/prediction-apy-v0-baseline/strategy.js.map +1 -0
- package/dist/restorer/impls/prediction-apy-v0-baseline/types.d.ts +4 -0
- package/dist/restorer/impls/prediction-apy-v0-baseline/types.js +2 -0
- package/dist/restorer/impls/prediction-apy-v0-baseline/types.js.map +1 -0
- package/dist/restorer/impls/prediction-apy-v0-evaluator/canonical-metrics.d.ts +6 -0
- package/dist/restorer/impls/prediction-apy-v0-evaluator/canonical-metrics.js +11 -0
- package/dist/restorer/impls/prediction-apy-v0-evaluator/canonical-metrics.js.map +1 -0
- package/dist/restorer/impls/prediction-apy-v0-evaluator/index.d.ts +42 -0
- package/dist/restorer/impls/prediction-apy-v0-evaluator/index.js +208 -0
- package/dist/restorer/impls/prediction-apy-v0-evaluator/index.js.map +1 -0
- package/dist/restorer/impls/prediction-apy-v0-evaluator/parse-submission.d.ts +7 -0
- package/dist/restorer/impls/prediction-apy-v0-evaluator/parse-submission.js +29 -0
- package/dist/restorer/impls/prediction-apy-v0-evaluator/parse-submission.js.map +1 -0
- package/dist/restorer/impls/prediction-apy-v0-evaluator/score.d.ts +9 -0
- package/dist/restorer/impls/prediction-apy-v0-evaluator/score.js +20 -0
- package/dist/restorer/impls/prediction-apy-v0-evaluator/score.js.map +1 -0
- package/dist/restorer/impls/prediction-apy-v0-evaluator/types.d.ts +7 -0
- package/dist/restorer/impls/prediction-apy-v0-evaluator/types.js +2 -0
- package/dist/restorer/impls/prediction-apy-v0-evaluator/types.js.map +1 -0
- package/dist/restorer/impls/prediction-v0-baseline/index.d.ts +31 -0
- package/dist/restorer/impls/prediction-v0-baseline/index.js +100 -0
- package/dist/restorer/impls/prediction-v0-baseline/index.js.map +1 -0
- package/dist/restorer/impls/prediction-v0-baseline/strategy.d.ts +8 -0
- package/dist/restorer/impls/prediction-v0-baseline/strategy.js +41 -0
- package/dist/restorer/impls/prediction-v0-baseline/strategy.js.map +1 -0
- package/dist/restorer/impls/prediction-v0-baseline/types.d.ts +7 -0
- package/dist/restorer/impls/prediction-v0-baseline/types.js +2 -0
- package/dist/restorer/impls/prediction-v0-baseline/types.js.map +1 -0
- package/dist/restorer/impls/prediction-v0-evaluator/canonical-metrics.d.ts +20 -0
- package/dist/restorer/impls/prediction-v0-evaluator/canonical-metrics.js +66 -0
- package/dist/restorer/impls/prediction-v0-evaluator/canonical-metrics.js.map +1 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/availability.d.ts +9 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/availability.js +23 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/availability.js.map +1 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/eligibility.d.ts +3 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/eligibility.js +13 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/eligibility.js.map +1 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/integrity.d.ts +13 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/integrity.js +111 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/integrity.js.map +1 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/spec.d.ts +5 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/spec.js +20 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/spec.js.map +1 -0
- package/dist/restorer/impls/prediction-v0-evaluator/index.d.ts +36 -0
- package/dist/restorer/impls/prediction-v0-evaluator/index.js +234 -0
- package/dist/restorer/impls/prediction-v0-evaluator/index.js.map +1 -0
- package/dist/restorer/impls/prediction-v0-evaluator/score.d.ts +8 -0
- package/dist/restorer/impls/prediction-v0-evaluator/score.js +15 -0
- package/dist/restorer/impls/prediction-v0-evaluator/score.js.map +1 -0
- package/dist/restorer/impls/prediction-v0-evaluator/types.d.ts +7 -0
- package/dist/restorer/impls/prediction-v0-evaluator/types.js +2 -0
- package/dist/restorer/impls/prediction-v0-evaluator/types.js.map +1 -0
- package/dist/restorer/types.d.ts +194 -0
- package/dist/restorer/types.js +28 -0
- package/dist/restorer/types.js.map +1 -0
- package/dist/rpc-error-context.d.ts +10 -0
- package/dist/rpc-error-context.js +26 -0
- package/dist/rpc-error-context.js.map +1 -0
- package/dist/store/store.d.ts +101 -1
- package/dist/store/store.js +334 -4
- package/dist/store/store.js.map +1 -1
- package/dist/trajectory/schema.d.ts +510 -0
- package/dist/trajectory/schema.js +74 -0
- package/dist/trajectory/schema.js.map +1 -0
- package/dist/types/desired-state.d.ts +53 -0
- package/dist/types/desired-state.js +20 -0
- package/dist/types/desired-state.js.map +1 -1
- package/dist/types/index.d.ts +4 -1
- package/dist/types/index.js +4 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/portfolio.d.ts +1000 -0
- package/dist/types/portfolio.js +168 -0
- package/dist/types/portfolio.js.map +1 -0
- package/dist/types/prediction-apy.d.ts +930 -0
- package/dist/types/prediction-apy.js +133 -0
- package/dist/types/prediction-apy.js.map +1 -0
- package/dist/types/prediction.d.ts +926 -0
- package/dist/types/prediction.js +141 -0
- package/dist/types/prediction.js.map +1 -0
- package/dist/venues/aave-v3/addresses.d.ts +6 -0
- package/dist/venues/aave-v3/addresses.js +19 -0
- package/dist/venues/aave-v3/addresses.js.map +1 -0
- package/dist/venues/aave-v3/client.d.ts +85 -0
- package/dist/venues/aave-v3/client.js +106 -0
- package/dist/venues/aave-v3/client.js.map +1 -0
- package/dist/venues/chainlink/client.d.ts +99 -0
- package/dist/venues/chainlink/client.js +130 -0
- package/dist/venues/chainlink/client.js.map +1 -0
- package/dist/venues/chainlink/feeds.d.ts +8 -0
- package/dist/venues/chainlink/feeds.js +9 -0
- package/dist/venues/chainlink/feeds.js.map +1 -0
- package/dist/venues/hyperliquid/account-value.d.ts +30 -0
- package/dist/venues/hyperliquid/account-value.js +30 -0
- package/dist/venues/hyperliquid/account-value.js.map +1 -0
- package/dist/venues/hyperliquid/client.d.ts +63 -0
- package/dist/venues/hyperliquid/client.js +135 -0
- package/dist/venues/hyperliquid/client.js.map +1 -0
- package/dist/venues/hyperliquid/grid.d.ts +36 -0
- package/dist/venues/hyperliquid/grid.js +61 -0
- package/dist/venues/hyperliquid/grid.js.map +1 -0
- package/dist/venues/hyperliquid/types.d.ts +81 -0
- package/dist/venues/hyperliquid/types.js +8 -0
- package/dist/venues/hyperliquid/types.js.map +1 -0
- package/dist/withdraw/run-withdraw-plan.js +2 -0
- package/dist/withdraw/run-withdraw-plan.js.map +1 -1
- package/docker-compose.yml +44 -0
- package/package.json +15 -3
- package/skills/jinn-operator/SKILL.md +85 -0
- package/dist/daemon/restorer.d.ts +0 -19
- package/dist/daemon/restorer.js +0 -82
- package/dist/daemon/restorer.js.map +0 -1
package/dist/config.js
CHANGED
|
@@ -17,12 +17,8 @@ import { existsSync, readFileSync } from 'node:fs';
|
|
|
17
17
|
import { homedir } from 'node:os';
|
|
18
18
|
import { join } from 'node:path';
|
|
19
19
|
import { z } from 'zod';
|
|
20
|
+
import { DesiredStateSchema, parseDesiredState } from './types/desired-state.js';
|
|
20
21
|
// ── Schema ──────────────────────────────────────────────────────────────────
|
|
21
|
-
const DesiredStateSchema = z.object({
|
|
22
|
-
id: z.string(),
|
|
23
|
-
description: z.string().min(1),
|
|
24
|
-
context: z.record(z.unknown()).optional(),
|
|
25
|
-
});
|
|
26
22
|
export const JinnConfigSchema = z.object({
|
|
27
23
|
/**
|
|
28
24
|
* Network to connect to.
|
|
@@ -38,6 +34,7 @@ export const JinnConfigSchema = z.object({
|
|
|
38
34
|
* https://sepolia.base.org for 'testnet'. Set explicitly to override.
|
|
39
35
|
*/
|
|
40
36
|
rpcUrl: z.string().optional(),
|
|
37
|
+
archiveRpcUrl: z.string().optional(),
|
|
41
38
|
/** Earning state directory */
|
|
42
39
|
earningDir: z.string().default(join(homedir(), '.jinn-client', 'earning')),
|
|
43
40
|
/** SQLite database path */
|
|
@@ -63,6 +60,15 @@ export const JinnConfigSchema = z.object({
|
|
|
63
60
|
claudePath: z.string().default('claude'),
|
|
64
61
|
/** Model for restoration/evaluation agent */
|
|
65
62
|
claudeModel: z.string().default('claude-haiku-4-5-20251001'),
|
|
63
|
+
/**
|
|
64
|
+
* How the operator runs the daemon. Set once at `jinn auth`, read by every
|
|
65
|
+
* command that probes the Claude CLI or spawns a subprocess. Leaving it
|
|
66
|
+
* unset falls back to filesystem-based detection (docker-compose.yml near
|
|
67
|
+
* cwd, /.dockerenv, etc.) which is error-prone inside a checkout of the
|
|
68
|
+
* repo itself.
|
|
69
|
+
* Env override: JINN_RUNTIME_MODE.
|
|
70
|
+
*/
|
|
71
|
+
runtimeMode: z.enum(['bare', 'docker-compose', 'container']).optional(),
|
|
66
72
|
/** Comma-separated or array of peer URLs */
|
|
67
73
|
peers: z.union([
|
|
68
74
|
z.string().transform(s => s.split(',').filter(Boolean)),
|
|
@@ -72,13 +78,8 @@ export const JinnConfigSchema = z.object({
|
|
|
72
78
|
subgraphUrl: z.string().optional(),
|
|
73
79
|
/** This node's public HTTP endpoint (for 8004 registration) */
|
|
74
80
|
nodeEndpoint: z.string().optional(),
|
|
75
|
-
/** Desired states to create and restore */
|
|
76
|
-
desiredStates: z.array(DesiredStateSchema).default([
|
|
77
|
-
{
|
|
78
|
-
id: 'health-check',
|
|
79
|
-
description: 'The service is running and participating in the Jinn protocol loop.',
|
|
80
|
-
},
|
|
81
|
-
]),
|
|
81
|
+
/** Desired states to create and restore. Empty by default; testnet auto-intents fill the loop. */
|
|
82
|
+
desiredStates: z.array(DesiredStateSchema).default([]),
|
|
82
83
|
/** IPFS upload endpoint */
|
|
83
84
|
ipfsRegistryUrl: z.string().default('https://registry.autonolas.tech'),
|
|
84
85
|
/** IPFS read endpoint */
|
|
@@ -91,6 +92,8 @@ export const JinnConfigSchema = z.object({
|
|
|
91
92
|
testnetMechDeploymentPath: z.string().optional(),
|
|
92
93
|
/** Optional Base Sepolia stOLAS deployment artifact path */
|
|
93
94
|
testnetStolasDeploymentPath: z.string().optional(),
|
|
95
|
+
/** Optional Base Sepolia ClaimRegistry deployment artifact path */
|
|
96
|
+
testnetClaimRegistryDeploymentPath: z.string().optional(),
|
|
94
97
|
/** Staking mode: 'standard' uses stOLAS (no OLAS needed), 'self-bond' uses operator-provided OLAS. */
|
|
95
98
|
stakingMode: z.enum(['standard', 'self-bond']).default('standard'),
|
|
96
99
|
/** Number of services to bootstrap and run. */
|
|
@@ -108,7 +111,38 @@ export const JinnConfigSchema = z.object({
|
|
|
108
111
|
.string()
|
|
109
112
|
.regex(/^\d+$/, 'must be a non-negative integer string')
|
|
110
113
|
.optional(),
|
|
114
|
+
/**
|
|
115
|
+
* Operator-controlled impl dispatch for the restorer engine.
|
|
116
|
+
*
|
|
117
|
+
* Wired by daemon (jinn-mono-bv5); engine consumes via RestorerImplRegistry config.
|
|
118
|
+
*
|
|
119
|
+
* byKind: explicit spec.kind → impl name mapping (highest priority)
|
|
120
|
+
* default: fallback impl name when no kind-specific match is found
|
|
121
|
+
* disabled: impl names to exclude from dispatch entirely
|
|
122
|
+
*/
|
|
123
|
+
restorers: z
|
|
124
|
+
.object({
|
|
125
|
+
byKind: z.record(z.string()).optional(),
|
|
126
|
+
default: z.string().optional(),
|
|
127
|
+
disabled: z.array(z.string()).optional(),
|
|
128
|
+
})
|
|
129
|
+
.optional(),
|
|
130
|
+
/**
|
|
131
|
+
* Restoration engine durable directories (per-intent work + impl state).
|
|
132
|
+
* Defaults under ~/.jinn-client/engine/. Env: JINN_ENGINE_WORKING_DIR_ROOT,
|
|
133
|
+
* JINN_ENGINE_IMPL_STATE_DIR_ROOT.
|
|
134
|
+
*/
|
|
135
|
+
engine: z
|
|
136
|
+
.object({
|
|
137
|
+
workingDirRoot: z.string().optional(),
|
|
138
|
+
implStateDirRoot: z.string().optional(),
|
|
139
|
+
})
|
|
140
|
+
.optional(),
|
|
111
141
|
});
|
|
142
|
+
const DEFAULT_ENGINE = {
|
|
143
|
+
workingDirRoot: join(homedir(), '.jinn-client', 'engine', 'work'),
|
|
144
|
+
implStateDirRoot: join(homedir(), '.jinn-client', 'engine', 'impl-state'),
|
|
145
|
+
};
|
|
112
146
|
// ── Defaults ────────────────────────────────────────────────────────────────
|
|
113
147
|
const DEFAULT_DIR = join(homedir(), '.jinn-client');
|
|
114
148
|
const DEFAULT_CONFIG_PATH = join(DEFAULT_DIR, 'config.json');
|
|
@@ -173,6 +207,8 @@ export function loadConfig(configPath) {
|
|
|
173
207
|
merged.claudePath = env['JINN_CLAUDE_PATH'];
|
|
174
208
|
if (env['JINN_CLAUDE_MODEL'])
|
|
175
209
|
merged.claudeModel = env['JINN_CLAUDE_MODEL'];
|
|
210
|
+
if (env['JINN_RUNTIME_MODE'])
|
|
211
|
+
merged.runtimeMode = env['JINN_RUNTIME_MODE'];
|
|
176
212
|
if (env['JINN_PEERS'])
|
|
177
213
|
merged.peers = env['JINN_PEERS'];
|
|
178
214
|
if (env['JINN_SUBGRAPH_URL'])
|
|
@@ -189,6 +225,9 @@ export function loadConfig(configPath) {
|
|
|
189
225
|
merged.testnetL2TokenDeploymentPath = env['JINN_TESTNET_TOKEN_DEPLOYMENT'];
|
|
190
226
|
if (env['JINN_TESTNET_MECH_DEPLOYMENT'])
|
|
191
227
|
merged.testnetMechDeploymentPath = env['JINN_TESTNET_MECH_DEPLOYMENT'];
|
|
228
|
+
if (env['JINN_TESTNET_CLAIM_REGISTRY_DEPLOYMENT']) {
|
|
229
|
+
merged.testnetClaimRegistryDeploymentPath = env['JINN_TESTNET_CLAIM_REGISTRY_DEPLOYMENT'];
|
|
230
|
+
}
|
|
192
231
|
if (env['JINN_STAKING_MODE'])
|
|
193
232
|
merged.stakingMode = env['JINN_STAKING_MODE'];
|
|
194
233
|
if (env['JINN_TARGET_SERVICES'])
|
|
@@ -200,6 +239,16 @@ export function loadConfig(configPath) {
|
|
|
200
239
|
if (env['JINN_MASTER_ETH_DAILY_WEI']) {
|
|
201
240
|
merged.masterEthDailyEstimateWei = env['JINN_MASTER_ETH_DAILY_WEI'].trim();
|
|
202
241
|
}
|
|
242
|
+
if (env['JINN_ENGINE_WORKING_DIR_ROOT'] || env['JINN_ENGINE_IMPL_STATE_DIR_ROOT']) {
|
|
243
|
+
const prev = typeof merged['engine'] === 'object' && merged['engine'] !== null
|
|
244
|
+
? merged['engine']
|
|
245
|
+
: {};
|
|
246
|
+
merged['engine'] = {
|
|
247
|
+
...prev,
|
|
248
|
+
...(env['JINN_ENGINE_WORKING_DIR_ROOT'] ? { workingDirRoot: env['JINN_ENGINE_WORKING_DIR_ROOT'] } : {}),
|
|
249
|
+
...(env['JINN_ENGINE_IMPL_STATE_DIR_ROOT'] ? { implStateDirRoot: env['JINN_ENGINE_IMPL_STATE_DIR_ROOT'] } : {}),
|
|
250
|
+
};
|
|
251
|
+
}
|
|
203
252
|
const resolvedNetwork = merged.network === 'testnet' ? 'testnet' : 'mainnet';
|
|
204
253
|
// Keep the legacy BASE_RPC_URL override for Base mainnet only. Testnet must
|
|
205
254
|
// not silently inherit a mainnet RPC from client/.env during bootstrap.
|
|
@@ -214,6 +263,9 @@ export function loadConfig(configPath) {
|
|
|
214
263
|
else if (env['BASE_RPC_URL']) {
|
|
215
264
|
merged.rpcUrl = env['BASE_RPC_URL'];
|
|
216
265
|
}
|
|
266
|
+
if (env['JINN_ARCHIVE_RPC_URL']) {
|
|
267
|
+
merged.archiveRpcUrl = env['JINN_ARCHIVE_RPC_URL'];
|
|
268
|
+
}
|
|
217
269
|
// desiredStates from env points to a JSON file
|
|
218
270
|
if (env['JINN_DESIRED_STATES']) {
|
|
219
271
|
const statesPath = env['JINN_DESIRED_STATES'];
|
|
@@ -248,6 +300,12 @@ export function loadConfig(configPath) {
|
|
|
248
300
|
return {
|
|
249
301
|
...parsed,
|
|
250
302
|
rpcUrl: parsed.rpcUrl ?? defaultRpcUrl,
|
|
303
|
+
// parseDesiredState assigns a UUID to any entry missing an id
|
|
304
|
+
desiredStates: parsed.desiredStates.map(parseDesiredState),
|
|
305
|
+
engine: {
|
|
306
|
+
workingDirRoot: parsed.engine?.workingDirRoot ?? DEFAULT_ENGINE.workingDirRoot,
|
|
307
|
+
implStateDirRoot: parsed.engine?.implStateDirRoot ?? DEFAULT_ENGINE.implStateDirRoot,
|
|
308
|
+
},
|
|
251
309
|
};
|
|
252
310
|
}
|
|
253
311
|
/**
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import { getAddress, formatEther } from 'viem';
|
|
12
12
|
import { viemSendTransactionWithRetry, waitForTransactionReceiptWithRetry } from '../tx-retry.js';
|
|
13
|
+
import { emitEvent } from '../observability/emit-event.js';
|
|
14
|
+
import { displayFleetServiceIndex } from '../earning/fleet-display-index.js';
|
|
13
15
|
export class BalanceTopupLoop {
|
|
14
16
|
config;
|
|
15
17
|
stopped = false;
|
|
@@ -29,15 +31,22 @@ export class BalanceTopupLoop {
|
|
|
29
31
|
continue;
|
|
30
32
|
if (!svc.agent_address || !svc.safe_address)
|
|
31
33
|
continue;
|
|
34
|
+
const displayIndex = displayFleetServiceIndex(svc);
|
|
32
35
|
try {
|
|
33
|
-
await this.topUpService(svc.index, svc.agent_address, svc.safe_address, masterAccount);
|
|
36
|
+
await this.topUpService(displayIndex, svc.index, svc.agent_address, svc.safe_address, masterAccount);
|
|
34
37
|
}
|
|
35
38
|
catch (err) {
|
|
36
39
|
console.error(`[balance-topup] Service ${svc.index}: unexpected error (non-fatal): ${err instanceof Error ? err.message : err}`);
|
|
40
|
+
this.config.jinnStore && emitEvent(this.config.jinnStore, {
|
|
41
|
+
kind: 'tick_error',
|
|
42
|
+
serviceIndex: displayIndex,
|
|
43
|
+
outcome: 'failed',
|
|
44
|
+
detail: err instanceof Error ? err.message : String(err),
|
|
45
|
+
}, 'balance-topup');
|
|
37
46
|
}
|
|
38
47
|
}
|
|
39
48
|
}
|
|
40
|
-
async topUpService(
|
|
49
|
+
async topUpService(displayIndex, logIndex, agentAddressRaw, safeAddressRaw, masterAccount) {
|
|
41
50
|
const agentAddr = getAddress(agentAddressRaw);
|
|
42
51
|
const safeAddr = getAddress(safeAddressRaw);
|
|
43
52
|
// Check agent EOA balance
|
|
@@ -46,13 +55,20 @@ export class BalanceTopupLoop {
|
|
|
46
55
|
const needed = this.config.eoaTopupTarget - agentBal;
|
|
47
56
|
const masterBal = await this.config.publicClient.getBalance({ address: masterAccount.address });
|
|
48
57
|
if (masterBal > needed) {
|
|
49
|
-
console.error(`[balance-topup] Service ${
|
|
58
|
+
console.error(`[balance-topup] Service ${logIndex}: agent ${agentAddr} balance ${formatEther(agentBal)} ETH below trigger, topping up with ${formatEther(needed)} ETH from master`);
|
|
50
59
|
const hash = await viemSendTransactionWithRetry(this.config.masterWallet, this.config.publicClient, {
|
|
51
60
|
account: masterAccount,
|
|
52
61
|
to: agentAddr,
|
|
53
62
|
value: needed,
|
|
54
63
|
});
|
|
55
64
|
await waitForTransactionReceiptWithRetry(this.config.publicClient, hash);
|
|
65
|
+
this.config.jinnStore && emitEvent(this.config.jinnStore, {
|
|
66
|
+
kind: 'balance_topup',
|
|
67
|
+
serviceIndex: displayIndex,
|
|
68
|
+
txHash: hash,
|
|
69
|
+
outcome: 'ok',
|
|
70
|
+
detail: `Topped up agent to ${formatEther(this.config.eoaTopupTarget)} ETH`,
|
|
71
|
+
}, 'balance-topup');
|
|
56
72
|
}
|
|
57
73
|
else {
|
|
58
74
|
console.error(`[balance-topup] Warning: master balance (${formatEther(masterBal)} ETH) too low to top up agent ${agentAddr} (needs ${formatEther(needed)} ETH)`);
|
|
@@ -64,13 +80,20 @@ export class BalanceTopupLoop {
|
|
|
64
80
|
const safeNeeded = this.config.safeTopupTarget - safeBal;
|
|
65
81
|
const masterBal = await this.config.publicClient.getBalance({ address: masterAccount.address });
|
|
66
82
|
if (masterBal > safeNeeded) {
|
|
67
|
-
console.error(`[balance-topup] Service ${
|
|
83
|
+
console.error(`[balance-topup] Service ${logIndex}: Safe ${safeAddr} balance ${formatEther(safeBal)} ETH below trigger, topping up with ${formatEther(safeNeeded)} ETH from master`);
|
|
68
84
|
const hash = await viemSendTransactionWithRetry(this.config.masterWallet, this.config.publicClient, {
|
|
69
85
|
account: masterAccount,
|
|
70
86
|
to: safeAddr,
|
|
71
87
|
value: safeNeeded,
|
|
72
88
|
});
|
|
73
89
|
await waitForTransactionReceiptWithRetry(this.config.publicClient, hash);
|
|
90
|
+
this.config.jinnStore && emitEvent(this.config.jinnStore, {
|
|
91
|
+
kind: 'balance_topup',
|
|
92
|
+
serviceIndex: displayIndex,
|
|
93
|
+
txHash: hash,
|
|
94
|
+
outcome: 'ok',
|
|
95
|
+
detail: `Topped up safe to ${formatEther(this.config.safeTopupTarget)} ETH`,
|
|
96
|
+
}, 'balance-topup');
|
|
74
97
|
}
|
|
75
98
|
else {
|
|
76
99
|
console.error(`[balance-topup] Warning: master balance (${formatEther(masterBal)} ETH) too low to top up Safe ${safeAddr} (needs ${formatEther(safeNeeded)} ETH)`);
|
|
@@ -87,6 +110,11 @@ export class BalanceTopupLoop {
|
|
|
87
110
|
}
|
|
88
111
|
catch (err) {
|
|
89
112
|
console.error('[balance-topup] Tick failed (non-fatal):', err instanceof Error ? err.message : err);
|
|
113
|
+
this.config.jinnStore && emitEvent(this.config.jinnStore, {
|
|
114
|
+
kind: 'tick_error',
|
|
115
|
+
outcome: 'failed',
|
|
116
|
+
detail: err instanceof Error ? err.message : String(err),
|
|
117
|
+
}, 'balance-topup');
|
|
90
118
|
}
|
|
91
119
|
this.config.jinnStore?.setConfigValue('last_balance_topup_tick_at', new Date().toISOString());
|
|
92
120
|
await new Promise(r => setTimeout(r, this.config.intervalMs));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"balance-topup-loop.js","sourceRoot":"","sources":["../../src/daemon/balance-topup-loop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AAG/C,OAAO,EAAE,4BAA4B,EAAE,kCAAkC,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"balance-topup-loop.js","sourceRoot":"","sources":["../../src/daemon/balance-topup-loop.ts"],"names":[],"mappings":"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"}
|
package/dist/daemon/creator.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ExecutionAdapter } from '../adapters/adapter.js';
|
|
2
2
|
import type { DesiredState, RequestId } from '../types/index.js';
|
|
3
3
|
import type { Store } from '../store/store.js';
|
|
4
|
+
import type { IntentSource } from '../intents/sources.js';
|
|
4
5
|
export interface ActiveAttempt {
|
|
5
6
|
desiredState: DesiredState;
|
|
6
7
|
attemptNumber: number;
|
|
@@ -9,15 +10,17 @@ export interface ActiveAttempt {
|
|
|
9
10
|
}
|
|
10
11
|
export declare class CreatorLoop {
|
|
11
12
|
private readonly adapter;
|
|
12
|
-
private readonly
|
|
13
|
+
private readonly intentSources;
|
|
13
14
|
private readonly store;
|
|
15
|
+
private readonly safeAddress?;
|
|
14
16
|
private stopped;
|
|
15
|
-
private posted;
|
|
16
17
|
private attempts;
|
|
17
18
|
private stopResolve;
|
|
18
19
|
private stopPromise;
|
|
19
|
-
private
|
|
20
|
-
|
|
20
|
+
private readonly postingService;
|
|
21
|
+
private static readonly PERMANENT_FAILURE_BACKOFF_MS;
|
|
22
|
+
private static failureCacheKey;
|
|
23
|
+
constructor(adapter: ExecutionAdapter, intentSources: IntentSource[], store: Store, safeAddress?: string | undefined);
|
|
21
24
|
tick(): Promise<RequestId | null>;
|
|
22
25
|
run(): Promise<void>;
|
|
23
26
|
stop(): void;
|
package/dist/daemon/creator.js
CHANGED
|
@@ -1,56 +1,80 @@
|
|
|
1
|
-
import { TransientError } from '../types/index.js';
|
|
1
|
+
import { PermanentError, TransientError } from '../types/index.js';
|
|
2
2
|
import { isRecoverableTransactionError } from '../tx-retry.js';
|
|
3
|
+
import { emitEvent } from '../observability/emit-event.js';
|
|
4
|
+
import { IntentPostingService } from '../intents/posting-service.js';
|
|
3
5
|
export class CreatorLoop {
|
|
4
6
|
adapter;
|
|
5
|
-
|
|
7
|
+
intentSources;
|
|
6
8
|
store;
|
|
9
|
+
safeAddress;
|
|
7
10
|
stopped = false;
|
|
8
|
-
posted = new Map(); // stateId → timestamp of last post
|
|
9
11
|
attempts = new Map();
|
|
10
12
|
stopResolve = null;
|
|
11
13
|
stopPromise;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
postingService;
|
|
15
|
+
static PERMANENT_FAILURE_BACKOFF_MS = 30 * 60 * 1000;
|
|
16
|
+
static failureCacheKey(state, safeAddress) {
|
|
17
|
+
const prefix = safeAddress ? `create_failed:${safeAddress}` : 'create_failed';
|
|
18
|
+
return `${prefix}:${state.id}`;
|
|
19
|
+
}
|
|
20
|
+
constructor(adapter, intentSources, store, safeAddress) {
|
|
17
21
|
this.adapter = adapter;
|
|
18
|
-
this.
|
|
22
|
+
this.intentSources = intentSources;
|
|
19
23
|
this.store = store;
|
|
24
|
+
this.safeAddress = safeAddress;
|
|
25
|
+
this.postingService = new IntentPostingService(adapter, store);
|
|
20
26
|
this.stopPromise = new Promise(resolve => {
|
|
21
27
|
this.stopResolve = resolve;
|
|
22
28
|
});
|
|
23
29
|
}
|
|
24
30
|
async tick() {
|
|
25
31
|
const now = Date.now();
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
32
|
+
const candidates = [];
|
|
33
|
+
for (const source of this.intentSources) {
|
|
34
|
+
try {
|
|
35
|
+
const result = await source.collect(new Date(now));
|
|
36
|
+
candidates.push(...result);
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
console.error(`[creator] source ${source.sourceKey} error (skipping this tick):`, err);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
for (const candidate of candidates) {
|
|
43
|
+
const state = candidate.desiredState;
|
|
44
|
+
const failureKey = CreatorLoop.failureCacheKey(state, this.safeAddress);
|
|
45
|
+
const failedAt = this.store.getConfigValue(failureKey);
|
|
46
|
+
if (failedAt) {
|
|
47
|
+
const ts = Number(failedAt);
|
|
48
|
+
if (Number.isFinite(ts) && now - ts < CreatorLoop.PERMANENT_FAILURE_BACKOFF_MS) {
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
30
52
|
try {
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
const requestId = await this.adapter.postDesiredState(stateWithAttempt);
|
|
41
|
-
this.posted.set(state.id, now);
|
|
53
|
+
const postResult = await this.postingService.postCandidate(candidate, {
|
|
54
|
+
creatorSafeAddress: this.safeAddress,
|
|
55
|
+
legacyConfigKeys: [
|
|
56
|
+
this.safeAddress ? `created_intent:${this.safeAddress}:${state.id}` : `created_intent:${state.id}`,
|
|
57
|
+
],
|
|
58
|
+
});
|
|
59
|
+
if (postResult.idempotent)
|
|
60
|
+
continue;
|
|
61
|
+
const requestId = postResult.requestId;
|
|
42
62
|
this.attempts.set(state.id, {
|
|
43
63
|
desiredState: state,
|
|
44
|
-
attemptNumber,
|
|
64
|
+
attemptNumber: postResult.attemptNumber,
|
|
45
65
|
restorationRequestId: requestId,
|
|
46
66
|
status: 'pending',
|
|
47
67
|
});
|
|
48
|
-
this.store.recordOwnActivity(requestId, 'created');
|
|
49
68
|
return requestId;
|
|
50
69
|
}
|
|
51
70
|
catch (err) {
|
|
52
71
|
if (err instanceof TransientError)
|
|
53
72
|
continue;
|
|
73
|
+
if (err instanceof PermanentError) {
|
|
74
|
+
this.store.setConfigValue(failureKey, String(now));
|
|
75
|
+
console.error(`[creator] Permanent create failure for ${state.id}; backing off for ` +
|
|
76
|
+
`${Math.round(CreatorLoop.PERMANENT_FAILURE_BACKOFF_MS / 60000)} min: ${err.message}`);
|
|
77
|
+
}
|
|
54
78
|
throw err;
|
|
55
79
|
}
|
|
56
80
|
}
|
|
@@ -64,6 +88,11 @@ export class CreatorLoop {
|
|
|
64
88
|
}
|
|
65
89
|
catch (err) {
|
|
66
90
|
console.error('[creator] Error:', err);
|
|
91
|
+
emitEvent(this.store, {
|
|
92
|
+
kind: 'tick_error',
|
|
93
|
+
outcome: 'failed',
|
|
94
|
+
detail: err instanceof Error ? err.message : String(err),
|
|
95
|
+
}, 'creator');
|
|
67
96
|
delayMs = isRecoverableTransactionError(err) ? 12_000 : 8000;
|
|
68
97
|
}
|
|
69
98
|
await Promise.race([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"creator.js","sourceRoot":"","sources":["../../src/daemon/creator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"creator.js","sourceRoot":"","sources":["../../src/daemon/creator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAUrE,MAAM,OAAO,WAAW;IAeH;IACA;IACA;IACA;IAjBX,OAAO,GAAG,KAAK,CAAC;IAChB,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC5C,WAAW,GAAwB,IAAI,CAAC;IACxC,WAAW,CAAgB;IAClB,cAAc,CAAuB;IAE9C,MAAM,CAAU,4BAA4B,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAE9D,MAAM,CAAC,eAAe,CAAC,KAAmB,EAAE,WAAoB;QACtE,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,iBAAiB,WAAW,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC;QAC9E,OAAO,GAAG,MAAM,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;IACjC,CAAC;IAED,YACmB,OAAyB,EACzB,aAA6B,EAC7B,KAAY,EACZ,WAAoB;QAHpB,YAAO,GAAP,OAAO,CAAkB;QACzB,kBAAa,GAAb,aAAa,CAAgB;QAC7B,UAAK,GAAL,KAAK,CAAO;QACZ,gBAAW,GAAX,WAAW,CAAS;QAErC,IAAI,CAAC,cAAc,GAAG,IAAI,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC/D,IAAI,CAAC,WAAW,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;YACvC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,EAAE,CAAC;QACtB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACxC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBACnD,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;YAC7B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,oBAAoB,MAAM,CAAC,SAAS,8BAA8B,EAAE,GAAG,CAAC,CAAC;YACzF,CAAC;QACH,CAAC;QAED,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,SAAS,CAAC,YAAY,CAAC;YACrC,MAAM,UAAU,GAAG,WAAW,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YACvD,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC5B,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,GAAG,GAAG,EAAE,GAAG,WAAW,CAAC,4BAA4B,EAAE,CAAC;oBAC/E,SAAS;gBACX,CAAC;YACH,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,SAAS,EAAE;oBACpE,kBAAkB,EAAE,IAAI,CAAC,WAAW;oBACpC,gBAAgB,EAAE;wBAChB,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,kBAAkB,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,kBAAkB,KAAK,CAAC,EAAE,EAAE;qBACnG;iBACF,CAAC,CAAC;gBACH,IAAI,UAAU,CAAC,UAAU;oBAAE,SAAS;gBAEpC,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;gBACvC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE;oBAC1B,YAAY,EAAE,KAAK;oBACnB,aAAa,EAAE,UAAU,CAAC,aAAa;oBACvC,oBAAoB,EAAE,SAAS;oBAC/B,MAAM,EAAE,SAAS;iBAClB,CAAC,CAAC;gBACH,OAAO,SAAS,CAAC;YACnB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,cAAc;oBAAE,SAAS;gBAC5C,IAAI,GAAG,YAAY,cAAc,EAAE,CAAC;oBAClC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;oBACnD,OAAO,CAAC,KAAK,CACX,0CAA0C,KAAK,CAAC,EAAE,oBAAoB;wBACtE,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,4BAA4B,GAAG,KAAK,CAAC,SAAS,GAAG,CAAC,OAAO,EAAE,CACtF,CAAC;gBACJ,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,GAAG;QACP,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACrB,IAAI,OAAO,GAAG,IAAI,CAAC;YACnB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YACpB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;gBACvC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE;oBACpB,IAAI,EAAE,YAAY;oBAClB,OAAO,EAAE,QAAQ;oBACjB,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;iBACzD,EAAE,SAAS,CAAC,CAAC;gBACd,OAAO,GAAG,6BAA6B,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;YAC/D,CAAC;YACD,MAAM,OAAO,CAAC,IAAI,CAAC;gBACjB,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBACxC,IAAI,CAAC,WAAW;aACjB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI;QACF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;IACvB,CAAC"}
|
package/dist/daemon/daemon.d.ts
CHANGED
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
import type { ExecutionAdapter } from '../adapters/adapter.js';
|
|
2
2
|
import type { Runner } from '../runner/runner.js';
|
|
3
|
-
import type { DesiredState } from '../types/index.js';
|
|
4
3
|
import type { StatusGatherConfig } from '../api/gather-status.js';
|
|
5
4
|
import type { EthHttpSigner } from '../auth/erc8128.js';
|
|
6
5
|
import { type RegistryConfig } from '../discovery/registry.js';
|
|
7
6
|
import type { X402Config } from '../x402/handler.js';
|
|
8
7
|
import { type RewardClaimLoopConfig } from './reward-claim-loop.js';
|
|
8
|
+
import { type RestorationEngineOptions } from '../restorer/engine/engine.js';
|
|
9
9
|
import { type BalanceTopupLoopConfig } from './balance-topup-loop.js';
|
|
10
|
+
import type { IntentSource } from '../intents/sources.js';
|
|
10
11
|
export interface DaemonConfig {
|
|
11
12
|
adapter: ExecutionAdapter;
|
|
12
13
|
runner: Runner;
|
|
13
|
-
desiredStates: DesiredState[];
|
|
14
14
|
dbPath: string;
|
|
15
15
|
shutdownTimeoutMs?: number;
|
|
16
|
+
/** Engine tick interval (ms) for re-driving in-flight intents. Defaults to 5000. */
|
|
17
|
+
pollIntervalMs?: number;
|
|
16
18
|
apiPort?: number;
|
|
17
19
|
peers?: string[];
|
|
18
20
|
signer?: EthHttpSigner;
|
|
@@ -33,12 +35,28 @@ export interface DaemonConfig {
|
|
|
33
35
|
balanceTopup?: BalanceTopupLoopConfig;
|
|
34
36
|
/** Passed to HTTP API for GET /v1/status (fleet + RPC hints). */
|
|
35
37
|
status?: StatusGatherConfig;
|
|
38
|
+
/** Restoration intent sources polled by CreatorLoop. */
|
|
39
|
+
intentSources?: IntentSource[];
|
|
40
|
+
/**
|
|
41
|
+
* Creator Safe address — used to scope CreatorLoop's SQLite idempotency
|
|
42
|
+
* cache keys per-Safe. Without this, two co-located daemons on the same
|
|
43
|
+
* DB would collide. Optional for backwards compatibility.
|
|
44
|
+
*/
|
|
45
|
+
creatorSafeAddress?: string;
|
|
46
|
+
/**
|
|
47
|
+
* RestorationEngine — sole path for marketplace request → claim → run → deliver.
|
|
48
|
+
* Evaluation intents (`type === 'evaluation'`) dispatch via `supports()` to
|
|
49
|
+
* evaluator impls; health-check intents with no spec use `legacy-claude` via
|
|
50
|
+
* the registry default.
|
|
51
|
+
*/
|
|
52
|
+
restorationEngine: Omit<RestorationEngineOptions, 'store'>;
|
|
36
53
|
}
|
|
37
54
|
export declare class Daemon {
|
|
38
55
|
private readonly config;
|
|
39
56
|
private store;
|
|
40
57
|
private creatorLoop;
|
|
41
|
-
private
|
|
58
|
+
private restorationEngine;
|
|
59
|
+
private engineStopped;
|
|
42
60
|
private deliveryWatcherLoop;
|
|
43
61
|
private adapter;
|
|
44
62
|
private loopPromises;
|
|
@@ -53,6 +71,20 @@ export declare class Daemon {
|
|
|
53
71
|
start(): Promise<void>;
|
|
54
72
|
stop(): Promise<void>;
|
|
55
73
|
getShutdownState(): string | null;
|
|
74
|
+
/**
|
|
75
|
+
* Bridge loop: consumes adapter.watchForRequests() and routes each request to
|
|
76
|
+
* the RestorationEngine via observe() + process().
|
|
77
|
+
*
|
|
78
|
+
* For legacy intents (no spec), the engine dispatches to the legacy-claude impl.
|
|
79
|
+
* For portfolio.v0 intents, the engine dispatches to claude-mcp-hyperliquid.
|
|
80
|
+
* For portfolio.v0.eval intents, the engine dispatches to portfolio-v0-evaluator.
|
|
81
|
+
*
|
|
82
|
+
* On-chain provenance (intentCid, onchainCreationTx, onchainCreationBlock) is
|
|
83
|
+
* populated from the RestorationRequest when available (MechAdapter sets these
|
|
84
|
+
* from the MarketplaceRequest event log). Legacy paths that don't populate them
|
|
85
|
+
* fall back to safe defaults with a warning.
|
|
86
|
+
*/
|
|
87
|
+
private _runEngineWatcherLoop;
|
|
56
88
|
/**
|
|
57
89
|
* Register an artifact on the 8004 registry (fire-and-forget).
|
|
58
90
|
* Called after local artifact publish if registry is configured.
|