@jinn-network/client 0.1.2 → 0.1.3-canary.2d6b2676
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 +20 -0
- package/CONTRIBUTING.md +8 -2
- package/README.md +68 -42
- package/deployments/deployment-jinn-mvi-l1-sepolia-fast.json +36 -0
- package/deployments/deployment-jinn-mvi-l1-sepolia.json +36 -0
- package/deployments/deployment-jinn-mvi-l2-baseSepolia.json +12 -0
- package/deployments/deployment-phase1b-mech-baseSepolia-fast.json +3 -3
- package/deployments/deployment-stolas-l2-baseSepolia-fast.json +1 -1
- package/dist/adapters/adapter.d.ts +7 -7
- package/dist/adapters/claim-registry/client.d.ts +9 -0
- package/dist/adapters/claim-registry/client.js +22 -2
- package/dist/adapters/claim-registry/client.js.map +1 -1
- package/dist/adapters/local/adapter.d.ts +4 -4
- package/dist/adapters/local/adapter.js +10 -10
- package/dist/adapters/local/adapter.js.map +1 -1
- package/dist/adapters/mech/adapter.d.ts +8 -6
- package/dist/adapters/mech/adapter.js +159 -95
- package/dist/adapters/mech/adapter.js.map +1 -1
- package/dist/adapters/mech/contracts.d.ts +8 -6
- package/dist/adapters/mech/contracts.js +119 -15
- package/dist/adapters/mech/contracts.js.map +1 -1
- package/dist/adapters/mech/ipfs.d.ts +66 -12
- package/dist/adapters/mech/ipfs.js +165 -30
- package/dist/adapters/mech/ipfs.js.map +1 -1
- package/dist/adapters/mech/safe-revert.d.ts +39 -0
- package/dist/adapters/mech/safe-revert.js +130 -0
- package/dist/adapters/mech/safe-revert.js.map +1 -0
- package/dist/adapters/mech/safe.js +48 -22
- package/dist/adapters/mech/safe.js.map +1 -1
- package/dist/adapters/mech/types.d.ts +8 -0
- package/dist/adapters/mech/types.js.map +1 -1
- package/dist/agent/agent-ws.d.ts +55 -0
- package/dist/agent/agent-ws.js +288 -0
- package/dist/agent/agent-ws.js.map +1 -0
- package/dist/agent/auto-mode-detect.d.ts +6 -0
- package/dist/agent/auto-mode-detect.js +44 -0
- package/dist/agent/auto-mode-detect.js.map +1 -0
- package/dist/agent/operator-claude.d.ts +22 -0
- package/dist/agent/operator-claude.js +130 -0
- package/dist/agent/operator-claude.js.map +1 -0
- package/dist/api/admin-endpoint.d.ts +12 -0
- package/dist/api/admin-endpoint.js +71 -0
- package/dist/api/admin-endpoint.js.map +1 -0
- package/dist/api/bootstrap-endpoint.d.ts +16 -0
- package/dist/api/bootstrap-endpoint.js +78 -0
- package/dist/api/bootstrap-endpoint.js.map +1 -0
- package/dist/api/events-endpoint.d.ts +9 -0
- package/dist/api/events-endpoint.js +46 -0
- package/dist/api/events-endpoint.js.map +1 -0
- package/dist/api/fleet-build.d.ts +1 -1
- package/dist/api/fleet-build.js +17 -8
- package/dist/api/fleet-build.js.map +1 -1
- package/dist/api/gather-status.js +6 -2
- package/dist/api/gather-status.js.map +1 -1
- package/dist/api/handshake.d.ts +17 -0
- package/dist/api/handshake.js +28 -0
- package/dist/api/handshake.js.map +1 -0
- package/dist/api/history-build.d.ts +2 -2
- package/dist/api/history-build.js +3 -3
- package/dist/api/history-build.js.map +1 -1
- package/dist/api/peers.js +21 -6
- package/dist/api/peers.js.map +1 -1
- package/dist/api/portfolio-v0-build.d.ts +16 -10
- package/dist/api/portfolio-v0-build.js +36 -31
- package/dist/api/portfolio-v0-build.js.map +1 -1
- package/dist/api/portfolio-v0-doctor.js +1 -1
- package/dist/api/portfolio-v0-doctor.js.map +1 -1
- package/dist/api/rewards-build.js +3 -8
- package/dist/api/rewards-build.js.map +1 -1
- package/dist/api/server.d.ts +55 -1
- package/dist/api/server.js +243 -17
- package/dist/api/server.js.map +1 -1
- package/dist/api/setup-endpoints.d.ts +34 -0
- package/dist/api/setup-endpoints.js +188 -0
- package/dist/api/setup-endpoints.js.map +1 -0
- package/dist/api/status-build.d.ts +10 -2
- package/dist/api/status-build.js +44 -9
- package/dist/api/status-build.js.map +1 -1
- package/dist/api/status-rollup-build.d.ts +46 -1
- package/dist/api/status-rollup-build.js +168 -5
- package/dist/api/status-rollup-build.js.map +1 -1
- package/dist/api/ui-token.d.ts +5 -0
- package/dist/api/ui-token.js +36 -0
- package/dist/api/ui-token.js.map +1 -0
- package/dist/build-info.d.ts +32 -0
- package/dist/build-info.js +69 -0
- package/dist/build-info.js.map +1 -0
- package/dist/build-info.json +6 -0
- package/dist/build-meta.json +1 -1
- package/dist/cli/command.d.ts +9 -0
- package/dist/cli/commands/balance.d.ts +7 -0
- package/dist/cli/commands/balance.js +38 -32
- package/dist/cli/commands/balance.js.map +1 -1
- package/dist/cli/commands/bootstrap.d.ts +13 -1
- package/dist/cli/commands/bootstrap.js +150 -132
- package/dist/cli/commands/bootstrap.js.map +1 -1
- package/dist/cli/commands/claim-rewards.js +14 -2
- package/dist/cli/commands/claim-rewards.js.map +1 -1
- package/dist/cli/commands/conformance.d.ts +12 -0
- package/dist/cli/commands/conformance.js +140 -0
- package/dist/cli/commands/conformance.js.map +1 -0
- package/dist/cli/commands/create.d.ts +22 -0
- package/dist/cli/commands/create.js +226 -0
- package/dist/cli/commands/create.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +34 -1
- package/dist/cli/commands/doctor.js +138 -123
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/fleet-scale.d.ts +19 -1
- package/dist/cli/commands/fleet-scale.js +379 -361
- package/dist/cli/commands/fleet-scale.js.map +1 -1
- package/dist/cli/commands/fleet.d.ts +7 -0
- package/dist/cli/commands/fleet.js +39 -33
- package/dist/cli/commands/fleet.js.map +1 -1
- package/dist/cli/commands/fund-requirements.d.ts +14 -1
- package/dist/cli/commands/fund-requirements.js +183 -174
- package/dist/cli/commands/fund-requirements.js.map +1 -1
- package/dist/cli/commands/harnesses.d.ts +18 -0
- package/dist/cli/commands/harnesses.js +208 -0
- package/dist/cli/commands/harnesses.js.map +1 -0
- package/dist/cli/commands/history.d.ts +10 -1
- package/dist/cli/commands/history.js +68 -59
- package/dist/cli/commands/history.js.map +1 -1
- package/dist/cli/commands/init.js +4 -1
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/integrations.d.ts +13 -0
- package/dist/cli/commands/{plugin-install.js → integrations.js} +240 -33
- package/dist/cli/commands/integrations.js.map +1 -0
- package/dist/cli/commands/logs.d.ts +6 -1
- package/dist/cli/commands/logs.js +77 -70
- package/dist/cli/commands/logs.js.map +1 -1
- package/dist/cli/commands/migrate-agent-id.d.ts +26 -0
- package/dist/cli/commands/migrate-agent-id.js +165 -0
- package/dist/cli/commands/migrate-agent-id.js.map +1 -0
- package/dist/cli/commands/quickstart.d.ts +51 -1
- package/dist/cli/commands/quickstart.js +514 -296
- package/dist/cli/commands/quickstart.js.map +1 -1
- package/dist/cli/commands/rewards.d.ts +7 -0
- package/dist/cli/commands/rewards.js +46 -40
- package/dist/cli/commands/rewards.js.map +1 -1
- package/dist/cli/commands/run.d.ts +14 -1
- package/dist/cli/commands/run.js +233 -91
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/solver-nets.js +207 -0
- package/dist/cli/commands/solver-nets.js.map +1 -0
- package/dist/cli/commands/solver-plugins.d.ts +9 -0
- package/dist/cli/commands/solver-plugins.js +184 -0
- package/dist/cli/commands/solver-plugins.js.map +1 -0
- package/dist/cli/commands/status.d.ts +10 -0
- package/dist/cli/commands/status.js +97 -34
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/tasks.js +365 -0
- package/dist/cli/commands/tasks.js.map +1 -0
- package/dist/cli/commands/ui.d.ts +3 -0
- package/dist/cli/commands/ui.js +45 -0
- package/dist/cli/commands/ui.js.map +1 -0
- package/dist/cli/commands/update.d.ts +5 -0
- package/dist/cli/commands/update.js +110 -105
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/commands/version.js +3 -1
- package/dist/cli/commands/version.js.map +1 -1
- package/dist/cli/commands/withdraw.d.ts +21 -1
- package/dist/cli/commands/withdraw.js +175 -159
- package/dist/cli/commands/withdraw.js.map +1 -1
- package/dist/cli/execution-context.d.ts +1 -1
- package/dist/cli/execution-context.js +4 -3
- package/dist/cli/execution-context.js.map +1 -1
- package/dist/cli/help.js +8 -1
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.js +24 -6
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/open-browser.d.ts +1 -0
- package/dist/cli/open-browser.js +18 -0
- package/dist/cli/open-browser.js.map +1 -0
- package/dist/cli/password.d.ts +3 -3
- package/dist/cli/password.js +6 -6
- package/dist/cli/password.js.map +1 -1
- package/dist/config.d.ts +1232 -53
- package/dist/config.js +558 -24
- package/dist/config.js.map +1 -1
- package/dist/conformance/checks/artifacts.d.ts +37 -0
- package/dist/conformance/checks/artifacts.js +110 -0
- package/dist/conformance/checks/artifacts.js.map +1 -0
- package/dist/conformance/checks/envelope-schema.d.ts +17 -0
- package/dist/conformance/checks/envelope-schema.js +36 -0
- package/dist/conformance/checks/envelope-schema.js.map +1 -0
- package/dist/conformance/checks/hash-signature.d.ts +26 -0
- package/dist/conformance/checks/hash-signature.js +70 -0
- package/dist/conformance/checks/hash-signature.js.map +1 -0
- package/dist/conformance/checks/payload.d.ts +19 -0
- package/dist/conformance/checks/payload.js +52 -0
- package/dist/conformance/checks/payload.js.map +1 -0
- package/dist/conformance/checks/secret-scrub.d.ts +33 -0
- package/dist/conformance/checks/secret-scrub.js +118 -0
- package/dist/conformance/checks/secret-scrub.js.map +1 -0
- package/dist/conformance/checks/source-runtime.d.ts +43 -0
- package/dist/conformance/checks/source-runtime.js +68 -0
- package/dist/conformance/checks/source-runtime.js.map +1 -0
- package/dist/conformance/checks/source-static.d.ts +61 -0
- package/dist/conformance/checks/source-static.js +311 -0
- package/dist/conformance/checks/source-static.js.map +1 -0
- package/dist/conformance/checks/trajectory-chain.d.ts +18 -0
- package/dist/conformance/checks/trajectory-chain.js +51 -0
- package/dist/conformance/checks/trajectory-chain.js.map +1 -0
- package/dist/conformance/checks/trajectory-profile.d.ts +17 -0
- package/dist/conformance/checks/trajectory-profile.js +51 -0
- package/dist/conformance/checks/trajectory-profile.js.map +1 -0
- package/dist/conformance/checks/trajectory-schema.d.ts +20 -0
- package/dist/conformance/checks/trajectory-schema.js +40 -0
- package/dist/conformance/checks/trajectory-schema.js.map +1 -0
- package/dist/conformance/checks/verdict.d.ts +44 -0
- package/dist/conformance/checks/verdict.js +122 -0
- package/dist/conformance/checks/verdict.js.map +1 -0
- package/dist/conformance/harness.d.ts +32 -0
- package/dist/conformance/harness.js +227 -0
- package/dist/conformance/harness.js.map +1 -0
- package/dist/conformance/types.d.ts +88 -0
- package/dist/conformance/types.js +31 -0
- package/dist/conformance/types.js.map +1 -0
- package/dist/corpus/acquire.d.ts +37 -0
- package/dist/corpus/acquire.js +155 -0
- package/dist/corpus/acquire.js.map +1 -0
- package/dist/corpus/cache.d.ts +14 -0
- package/dist/corpus/cache.js +18 -0
- package/dist/corpus/cache.js.map +1 -0
- package/dist/corpus/fetch.d.ts +9 -0
- package/dist/corpus/fetch.js +24 -0
- package/dist/corpus/fetch.js.map +1 -0
- package/dist/corpus/index.d.ts +16 -0
- package/dist/corpus/index.js +78 -0
- package/dist/corpus/index.js.map +1 -0
- package/dist/corpus/query.d.ts +17 -0
- package/dist/corpus/query.js +108 -0
- package/dist/corpus/query.js.map +1 -0
- package/dist/corpus/route-resolver.d.ts +16 -0
- package/dist/corpus/route-resolver.js +20 -0
- package/dist/corpus/route-resolver.js.map +1 -0
- package/dist/corpus/types.d.ts +108 -0
- package/dist/corpus/types.js +50 -0
- package/dist/corpus/types.js.map +1 -0
- package/dist/daemon/balance-topup-loop.js +2 -1
- package/dist/daemon/balance-topup-loop.js.map +1 -1
- package/dist/daemon/creator.d.ts +5 -5
- package/dist/daemon/creator.js +8 -11
- package/dist/daemon/creator.js.map +1 -1
- package/dist/daemon/daemon.d.ts +84 -29
- package/dist/daemon/daemon.js +181 -63
- package/dist/daemon/daemon.js.map +1 -1
- package/dist/daemon/delivery-watcher.js +34 -4
- package/dist/daemon/delivery-watcher.js.map +1 -1
- package/dist/daemon/jinn-claim-loop-canonical.d.ts +207 -0
- package/dist/daemon/jinn-claim-loop-canonical.js +296 -0
- package/dist/daemon/jinn-claim-loop-canonical.js.map +1 -0
- package/dist/daemon/jinn-claim-loop-mock.d.ts +61 -0
- package/dist/daemon/jinn-claim-loop-mock.js +122 -0
- package/dist/daemon/jinn-claim-loop-mock.js.map +1 -0
- package/dist/daemon/jinn-claim-loop.d.ts +123 -0
- package/dist/daemon/jinn-claim-loop.js +256 -0
- package/dist/daemon/jinn-claim-loop.js.map +1 -0
- package/dist/daemon/reward-claim-loop.d.ts +2 -0
- package/dist/daemon/reward-claim-loop.js +32 -27
- package/dist/daemon/reward-claim-loop.js.map +1 -1
- package/dist/dashboard/assets/index-Bxlk5qpa.js +68 -0
- package/dist/dashboard/assets/index-DQ3u_vP5.css +32 -0
- package/dist/dashboard/index.html +18 -74
- package/dist/earning/agent-wallet-binding.d.ts +133 -0
- package/dist/earning/agent-wallet-binding.js +202 -0
- package/dist/earning/agent-wallet-binding.js.map +1 -0
- package/dist/earning/bootstrap.d.ts +64 -0
- package/dist/earning/bootstrap.js +325 -32
- package/dist/earning/bootstrap.js.map +1 -1
- package/dist/earning/contracts.d.ts +323 -0
- package/dist/earning/contracts.js +276 -0
- package/dist/earning/contracts.js.map +1 -1
- package/dist/earning/evidence-simhash.d.ts +1 -1
- package/dist/earning/funding-plan.d.ts +90 -0
- package/dist/earning/funding-plan.js +203 -0
- package/dist/earning/funding-plan.js.map +1 -0
- package/dist/earning/migrate-agent-id.d.ts +130 -0
- package/dist/earning/migrate-agent-id.js +257 -0
- package/dist/earning/migrate-agent-id.js.map +1 -0
- package/dist/earning/orphan-sweep.d.ts +14 -0
- package/dist/earning/orphan-sweep.js +63 -2
- package/dist/earning/orphan-sweep.js.map +1 -1
- package/dist/earning/reconcile.d.ts +2 -0
- package/dist/earning/reconcile.js +30 -0
- package/dist/earning/reconcile.js.map +1 -1
- package/dist/earning/stolas-claim.d.ts +86 -6
- package/dist/earning/stolas-claim.js +123 -9
- package/dist/earning/stolas-claim.js.map +1 -1
- package/dist/earning/store.d.ts +39 -0
- package/dist/earning/store.js +72 -1
- package/dist/earning/store.js.map +1 -1
- package/dist/earning/testnet-setup-migration.d.ts +32 -0
- package/dist/earning/testnet-setup-migration.js +214 -0
- package/dist/earning/testnet-setup-migration.js.map +1 -0
- package/dist/earning/types.d.ts +53 -9
- package/dist/earning/types.js +51 -2
- package/dist/earning/types.js.map +1 -1
- package/dist/earning/viem-clients.d.ts +20 -0
- package/dist/earning/viem-clients.js +32 -1
- package/dist/earning/viem-clients.js.map +1 -1
- package/dist/erc8004/abis.d.ts +381 -0
- package/dist/erc8004/abis.js +238 -0
- package/dist/erc8004/abis.js.map +1 -0
- package/dist/erc8004/addresses.d.ts +40 -0
- package/dist/erc8004/addresses.js +64 -0
- package/dist/erc8004/addresses.js.map +1 -0
- package/dist/erc8004/identity.d.ts +202 -0
- package/dist/erc8004/identity.js +305 -0
- package/dist/erc8004/identity.js.map +1 -0
- package/dist/erc8004/index.d.ts +13 -0
- package/dist/erc8004/index.js +20 -0
- package/dist/erc8004/index.js.map +1 -0
- package/dist/erc8004/reputation.d.ts +349 -0
- package/dist/erc8004/reputation.js +464 -0
- package/dist/erc8004/reputation.js.map +1 -0
- package/dist/erc8004/subgraph.d.ts +46 -0
- package/dist/erc8004/subgraph.js +37 -0
- package/dist/erc8004/subgraph.js.map +1 -0
- package/dist/erc8004/validation.d.ts +145 -0
- package/dist/erc8004/validation.js +219 -0
- package/dist/erc8004/validation.js.map +1 -0
- package/dist/errors/persisted-bootstrap-error.d.ts +4 -0
- package/dist/errors/persisted-bootstrap-error.js +50 -0
- package/dist/errors/persisted-bootstrap-error.js.map +1 -0
- package/dist/events/emitter.d.ts +12 -0
- package/dist/events/emitter.js +23 -0
- package/dist/events/emitter.js.map +1 -0
- package/dist/events/ring-buffer.d.ts +25 -0
- package/dist/events/ring-buffer.js +46 -0
- package/dist/events/ring-buffer.js.map +1 -0
- package/dist/events/types.d.ts +42 -0
- package/dist/events/types.js +28 -0
- package/dist/events/types.js.map +1 -0
- package/dist/harnesses/capability/index.d.ts +82 -0
- package/dist/harnesses/capability/index.js +12 -0
- package/dist/harnesses/capability/index.js.map +1 -0
- package/dist/harnesses/capability/scoped-rpc.d.ts +12 -0
- package/dist/harnesses/capability/scoped-rpc.js +34 -0
- package/dist/harnesses/capability/scoped-rpc.js.map +1 -0
- package/dist/harnesses/capability/scoped-secrets.d.ts +8 -0
- package/dist/harnesses/capability/scoped-secrets.js +10 -0
- package/dist/harnesses/capability/scoped-secrets.js.map +1 -0
- package/dist/harnesses/capability/scoped-signer.d.ts +46 -0
- package/dist/harnesses/capability/scoped-signer.js +73 -0
- package/dist/harnesses/capability/scoped-signer.js.map +1 -0
- package/dist/harnesses/engine/canonical-json.d.ts +1 -0
- package/dist/harnesses/engine/canonical-json.js +66 -0
- package/dist/harnesses/engine/canonical-json.js.map +1 -0
- package/dist/{restorer → harnesses}/engine/claim.d.ts +7 -7
- package/dist/{restorer → harnesses}/engine/claim.js +14 -7
- package/dist/harnesses/engine/claim.js.map +1 -0
- package/dist/{restorer → harnesses}/engine/delivery.d.ts +3 -1
- package/dist/{restorer → harnesses}/engine/delivery.js +8 -8
- package/dist/harnesses/engine/delivery.js.map +1 -0
- package/dist/harnesses/engine/engine.d.ts +341 -0
- package/dist/harnesses/engine/engine.js +1203 -0
- package/dist/harnesses/engine/engine.js.map +1 -0
- package/dist/harnesses/engine/envelope-assembly.d.ts +72 -0
- package/dist/harnesses/engine/envelope-assembly.js +60 -0
- package/dist/harnesses/engine/envelope-assembly.js.map +1 -0
- package/dist/harnesses/engine/packaging.d.ts +87 -0
- package/dist/{restorer → harnesses}/engine/packaging.js +83 -57
- package/dist/harnesses/engine/packaging.js.map +1 -0
- package/dist/harnesses/engine/persistence.d.ts +172 -0
- package/dist/{restorer → harnesses}/engine/persistence.js +78 -71
- package/dist/harnesses/engine/persistence.js.map +1 -0
- package/dist/harnesses/engine/recovery.d.ts +22 -0
- package/dist/{restorer → harnesses}/engine/recovery.js +5 -5
- package/dist/harnesses/engine/recovery.js.map +1 -0
- package/dist/harnesses/engine/registry.d.ts +53 -0
- package/dist/harnesses/engine/registry.js +62 -0
- package/dist/harnesses/engine/registry.js.map +1 -0
- package/dist/{restorer → harnesses}/engine/signing.d.ts +1 -1
- package/dist/{restorer → harnesses}/engine/signing.js +1 -1
- package/dist/harnesses/engine/signing.js.map +1 -0
- package/dist/{restorer → harnesses}/engine/state.d.ts +8 -8
- package/dist/{restorer → harnesses}/engine/state.js +23 -23
- package/dist/harnesses/engine/state.js.map +1 -0
- package/dist/harnesses/engine/validate-manifest.d.ts +23 -0
- package/dist/harnesses/engine/validate-manifest.js +49 -0
- package/dist/harnesses/engine/validate-manifest.js.map +1 -0
- package/dist/harnesses/engine/verification-stub.d.ts +18 -0
- package/dist/harnesses/engine/verification-stub.js +18 -0
- package/dist/harnesses/engine/verification-stub.js.map +1 -0
- package/dist/harnesses/external-impls/index.d.ts +3 -0
- package/dist/harnesses/external-impls/index.js +2 -0
- package/dist/harnesses/external-impls/index.js.map +1 -0
- package/dist/harnesses/external-impls/loader.d.ts +50 -0
- package/dist/harnesses/external-impls/loader.js +139 -0
- package/dist/harnesses/external-impls/loader.js.map +1 -0
- package/dist/harnesses/external-impls/package-hash.d.ts +26 -0
- package/dist/harnesses/external-impls/package-hash.js +102 -0
- package/dist/harnesses/external-impls/package-hash.js.map +1 -0
- package/dist/harnesses/external-impls/types.d.ts +42 -0
- package/dist/harnesses/external-impls/types.js +10 -0
- package/dist/harnesses/external-impls/types.js.map +1 -0
- package/dist/harnesses/impls/claude-code-learner/adapters/claude-code.d.ts +38 -0
- package/dist/harnesses/impls/claude-code-learner/adapters/claude-code.js +159 -0
- package/dist/harnesses/impls/claude-code-learner/adapters/claude-code.js.map +1 -0
- package/dist/harnesses/impls/claude-code-learner/harness.d.ts +22 -0
- package/dist/harnesses/impls/claude-code-learner/harness.js +44 -0
- package/dist/harnesses/impls/claude-code-learner/harness.js.map +1 -0
- package/dist/harnesses/impls/claude-code-learner/harvest.d.ts +19 -0
- package/dist/harnesses/impls/claude-code-learner/harvest.js +146 -0
- package/dist/harnesses/impls/claude-code-learner/harvest.js.map +1 -0
- package/dist/harnesses/impls/claude-code-learner/index.d.ts +14 -0
- package/dist/harnesses/impls/claude-code-learner/index.js +13 -0
- package/dist/harnesses/impls/claude-code-learner/index.js.map +1 -0
- package/dist/harnesses/impls/claude-code-learner/plugin-path.d.ts +14 -0
- package/dist/harnesses/impls/claude-code-learner/plugin-path.js +30 -0
- package/dist/harnesses/impls/claude-code-learner/plugin-path.js.map +1 -0
- package/dist/harnesses/impls/claude-code-learner/test-utils/fake-plugin-outputs.d.ts +19 -0
- package/dist/harnesses/impls/claude-code-learner/test-utils/fake-plugin-outputs.js +111 -0
- package/dist/harnesses/impls/claude-code-learner/test-utils/fake-plugin-outputs.js.map +1 -0
- package/dist/harnesses/impls/claude-code-learner/test-utils/noop-adapter.d.ts +22 -0
- package/dist/harnesses/impls/claude-code-learner/test-utils/noop-adapter.js +35 -0
- package/dist/harnesses/impls/claude-code-learner/test-utils/noop-adapter.js.map +1 -0
- package/dist/harnesses/impls/claude-code-learner/types.d.ts +102 -0
- package/dist/harnesses/impls/claude-code-learner/types.js.map +1 -0
- package/dist/{restorer → harnesses}/impls/claude-mcp-hyperliquid/api-wallet.d.ts +1 -1
- package/dist/harnesses/impls/claude-mcp-hyperliquid/api-wallet.js.map +1 -0
- package/dist/{restorer → harnesses}/impls/claude-mcp-hyperliquid/index.d.ts +16 -14
- package/dist/{restorer → harnesses}/impls/claude-mcp-hyperliquid/index.js +62 -61
- package/dist/harnesses/impls/claude-mcp-hyperliquid/index.js.map +1 -0
- package/dist/harnesses/impls/claude-mcp-hyperliquid/mcp-tools.js.map +1 -0
- package/dist/harnesses/impls/claude-mcp-hyperliquid/safety-rails.js.map +1 -0
- package/dist/{restorer → harnesses}/impls/claude-mcp-hyperliquid/session-orchestrator.d.ts +7 -0
- package/dist/{restorer → harnesses}/impls/claude-mcp-hyperliquid/session-orchestrator.js +38 -0
- package/dist/harnesses/impls/claude-mcp-hyperliquid/session-orchestrator.js.map +1 -0
- package/dist/{restorer → harnesses}/impls/claude-mcp-prediction/index.d.ts +11 -11
- package/dist/{restorer → harnesses}/impls/claude-mcp-prediction/index.js +26 -16
- package/dist/harnesses/impls/claude-mcp-prediction/index.js.map +1 -0
- package/dist/{restorer → harnesses}/impls/claude-mcp-prediction/mcp-tools.js +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction/mcp-tools.js.map +1 -0
- package/dist/{restorer → harnesses}/impls/claude-mcp-prediction/prompt.d.ts +2 -2
- package/dist/{restorer → harnesses}/impls/claude-mcp-prediction/prompt.js +5 -5
- package/dist/harnesses/impls/claude-mcp-prediction/prompt.js.map +1 -0
- package/dist/{restorer → harnesses}/impls/claude-mcp-prediction/session-orchestrator.d.ts +9 -2
- package/dist/harnesses/impls/claude-mcp-prediction/session-orchestrator.js +21 -0
- package/dist/harnesses/impls/claude-mcp-prediction/session-orchestrator.js.map +1 -0
- package/dist/{restorer → harnesses}/impls/claude-mcp-prediction/types.d.ts +3 -3
- package/dist/harnesses/impls/claude-mcp-prediction/types.js +6 -0
- package/dist/harnesses/impls/claude-mcp-prediction/types.js.map +1 -0
- package/dist/harnesses/impls/claude-mcp-prediction-apy/index.d.ts +36 -0
- package/dist/{restorer → harnesses}/impls/claude-mcp-prediction-apy/index.js +22 -15
- package/dist/harnesses/impls/claude-mcp-prediction-apy/index.js.map +1 -0
- package/dist/{restorer → harnesses}/impls/claude-mcp-prediction-apy/mcp-tools.js +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction-apy/mcp-tools.js.map +1 -0
- package/dist/harnesses/impls/claude-mcp-prediction-apy/prompt.d.ts +7 -0
- package/dist/{restorer → harnesses}/impls/claude-mcp-prediction-apy/prompt.js +5 -5
- package/dist/harnesses/impls/claude-mcp-prediction-apy/prompt.js.map +1 -0
- package/dist/{restorer → harnesses}/impls/claude-mcp-prediction-apy/session-orchestrator.d.ts +10 -0
- package/dist/harnesses/impls/claude-mcp-prediction-apy/session-orchestrator.js +19 -0
- package/dist/harnesses/impls/claude-mcp-prediction-apy/session-orchestrator.js.map +1 -0
- package/dist/{restorer → harnesses}/impls/claude-mcp-prediction-apy/types.d.ts +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction-apy/types.js +6 -0
- package/dist/harnesses/impls/claude-mcp-prediction-apy/types.js.map +1 -0
- package/dist/harnesses/impls/claude-mcp-shared/single-session-orchestrator.d.ts +84 -0
- package/dist/{restorer/impls/claude-mcp-prediction/session-orchestrator.js → harnesses/impls/claude-mcp-shared/single-session-orchestrator.js} +85 -16
- package/dist/harnesses/impls/claude-mcp-shared/single-session-orchestrator.js.map +1 -0
- package/dist/harnesses/impls/evaluation-context.d.ts +23 -0
- package/dist/harnesses/impls/evaluation-context.js +25 -0
- package/dist/harnesses/impls/evaluation-context.js.map +1 -0
- package/dist/harnesses/impls/index.d.ts +74 -0
- package/dist/{restorer → harnesses}/impls/index.js +32 -7
- package/dist/harnesses/impls/index.js.map +1 -0
- package/dist/harnesses/impls/legacy-claude/index.d.ts +66 -0
- package/dist/{restorer → harnesses}/impls/legacy-claude/index.js +47 -19
- package/dist/harnesses/impls/legacy-claude/index.js.map +1 -0
- package/dist/{restorer → harnesses}/impls/portfolio-v0-evaluator/canonical-metrics.d.ts +2 -2
- package/dist/{restorer → harnesses}/impls/portfolio-v0-evaluator/canonical-metrics.js +2 -2
- package/dist/harnesses/impls/portfolio-v0-evaluator/canonical-metrics.js.map +1 -0
- package/dist/harnesses/impls/portfolio-v0-evaluator/checks/availability.js.map +1 -0
- package/dist/{restorer → harnesses}/impls/portfolio-v0-evaluator/checks/consistency.d.ts +1 -1
- package/dist/{restorer → harnesses}/impls/portfolio-v0-evaluator/checks/consistency.js +1 -1
- package/dist/harnesses/impls/portfolio-v0-evaluator/checks/consistency.js.map +1 -0
- package/dist/{restorer → harnesses}/impls/portfolio-v0-evaluator/checks/eligibility.d.ts +2 -2
- package/dist/{restorer → harnesses}/impls/portfolio-v0-evaluator/checks/eligibility.js +2 -2
- package/dist/harnesses/impls/portfolio-v0-evaluator/checks/eligibility.js.map +1 -0
- package/dist/{restorer → harnesses}/impls/portfolio-v0-evaluator/checks/integrity.d.ts +2 -2
- package/dist/{restorer → harnesses}/impls/portfolio-v0-evaluator/checks/integrity.js +2 -2
- package/dist/harnesses/impls/portfolio-v0-evaluator/checks/integrity.js.map +1 -0
- package/dist/{restorer → harnesses}/impls/portfolio-v0-evaluator/checks/spec.d.ts +2 -2
- package/dist/{restorer → harnesses}/impls/portfolio-v0-evaluator/checks/spec.js +2 -2
- package/dist/harnesses/impls/portfolio-v0-evaluator/checks/spec.js.map +1 -0
- package/dist/harnesses/impls/portfolio-v0-evaluator/index.d.ts +44 -0
- package/dist/{restorer → harnesses}/impls/portfolio-v0-evaluator/index.js +217 -88
- package/dist/harnesses/impls/portfolio-v0-evaluator/index.js.map +1 -0
- package/dist/harnesses/impls/portfolio-v0-evaluator/score.js.map +1 -0
- package/dist/{restorer → harnesses}/impls/portfolio-v0-evaluator/types.d.ts +1 -1
- package/dist/harnesses/impls/portfolio-v0-evaluator/types.js.map +1 -0
- package/dist/{restorer → harnesses}/impls/prediction-apy-v0-baseline/index.d.ts +10 -8
- package/dist/{restorer → harnesses}/impls/prediction-apy-v0-baseline/index.js +15 -8
- package/dist/harnesses/impls/prediction-apy-v0-baseline/index.js.map +1 -0
- package/dist/harnesses/impls/prediction-apy-v0-baseline/strategy.js.map +1 -0
- package/dist/harnesses/impls/prediction-apy-v0-baseline/types.js.map +1 -0
- package/dist/harnesses/impls/prediction-apy-v0-evaluator/canonical-metrics.d.ts +6 -0
- package/dist/harnesses/impls/prediction-apy-v0-evaluator/canonical-metrics.js +11 -0
- package/dist/harnesses/impls/prediction-apy-v0-evaluator/canonical-metrics.js.map +1 -0
- package/dist/{restorer → harnesses}/impls/prediction-apy-v0-evaluator/index.d.ts +9 -9
- package/dist/harnesses/impls/prediction-apy-v0-evaluator/index.js +346 -0
- package/dist/harnesses/impls/prediction-apy-v0-evaluator/index.js.map +1 -0
- package/dist/harnesses/impls/prediction-apy-v0-evaluator/parse-submission.d.ts +16 -0
- package/dist/harnesses/impls/prediction-apy-v0-evaluator/parse-submission.js +22 -0
- package/dist/harnesses/impls/prediction-apy-v0-evaluator/parse-submission.js.map +1 -0
- package/dist/harnesses/impls/prediction-apy-v0-evaluator/score.js.map +1 -0
- package/dist/harnesses/impls/prediction-apy-v0-evaluator/types.js.map +1 -0
- package/dist/harnesses/impls/prediction-v0-baseline/index.d.ts +33 -0
- package/dist/{restorer → harnesses}/impls/prediction-v0-baseline/index.js +25 -16
- package/dist/harnesses/impls/prediction-v0-baseline/index.js.map +1 -0
- package/dist/{restorer → harnesses}/impls/prediction-v0-baseline/strategy.d.ts +2 -2
- package/dist/{restorer → harnesses}/impls/prediction-v0-baseline/strategy.js +2 -2
- package/dist/harnesses/impls/prediction-v0-baseline/strategy.js.map +1 -0
- package/dist/harnesses/impls/prediction-v0-baseline/types.d.ts +7 -0
- package/dist/harnesses/impls/prediction-v0-baseline/types.js.map +1 -0
- package/dist/{restorer → harnesses}/impls/prediction-v0-evaluator/canonical-metrics.d.ts +2 -2
- package/dist/harnesses/impls/prediction-v0-evaluator/canonical-metrics.js.map +1 -0
- package/dist/harnesses/impls/prediction-v0-evaluator/checks/availability.js.map +1 -0
- package/dist/{restorer → harnesses}/impls/prediction-v0-evaluator/checks/eligibility.d.ts +1 -1
- package/dist/harnesses/impls/prediction-v0-evaluator/checks/eligibility.js.map +1 -0
- package/dist/harnesses/impls/prediction-v0-evaluator/checks/integrity.d.ts +15 -0
- package/dist/{restorer → harnesses}/impls/prediction-v0-evaluator/checks/integrity.js +12 -12
- package/dist/harnesses/impls/prediction-v0-evaluator/checks/integrity.js.map +1 -0
- package/dist/{restorer → harnesses}/impls/prediction-v0-evaluator/checks/spec.d.ts +2 -2
- package/dist/harnesses/impls/prediction-v0-evaluator/checks/spec.js.map +1 -0
- package/dist/{restorer → harnesses}/impls/prediction-v0-evaluator/index.d.ts +10 -10
- package/dist/harnesses/impls/prediction-v0-evaluator/index.js +342 -0
- package/dist/harnesses/impls/prediction-v0-evaluator/index.js.map +1 -0
- package/dist/harnesses/impls/prediction-v0-evaluator/score.js.map +1 -0
- package/dist/harnesses/impls/prediction-v0-evaluator/types.js +2 -0
- package/dist/harnesses/impls/prediction-v0-evaluator/types.js.map +1 -0
- package/dist/harnesses/manifest/index.d.ts +3 -0
- package/dist/harnesses/manifest/index.js +3 -0
- package/dist/harnesses/manifest/index.js.map +1 -0
- package/dist/harnesses/manifest/load.d.ts +7 -0
- package/dist/harnesses/manifest/load.js +49 -0
- package/dist/harnesses/manifest/load.js.map +1 -0
- package/dist/harnesses/manifest/types.d.ts +75 -0
- package/dist/harnesses/manifest/types.js +8 -0
- package/dist/harnesses/manifest/types.js.map +1 -0
- package/dist/harnesses/manifest/verify.d.ts +15 -0
- package/dist/harnesses/manifest/verify.js +53 -0
- package/dist/harnesses/manifest/verify.js.map +1 -0
- package/dist/harnesses/types.d.ts +263 -0
- package/dist/{restorer → harnesses}/types.js +3 -3
- package/dist/harnesses/types.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/main.d.ts +5 -2
- package/dist/main.js +793 -96
- package/dist/main.js.map +1 -1
- package/dist/mcp/acquire-artifact.d.ts +39 -0
- package/dist/mcp/acquire-artifact.js +163 -0
- package/dist/mcp/acquire-artifact.js.map +1 -0
- package/dist/mcp/operator-server.d.ts +21 -4
- package/dist/mcp/operator-server.js +505 -30
- package/dist/mcp/operator-server.js.map +1 -1
- package/dist/mcp/search-artifacts.d.ts +31 -0
- package/dist/mcp/search-artifacts.js +40 -0
- package/dist/mcp/search-artifacts.js.map +1 -0
- package/dist/mcp/server.d.ts +4 -4
- package/dist/mcp/server.js +110 -64
- package/dist/mcp/server.js.map +1 -1
- package/dist/observability/emit-event.d.ts +2 -2
- package/dist/observability/emit-event.js +2 -2
- package/dist/observability/emit-event.js.map +1 -1
- package/dist/operator-errors.js +4 -5
- package/dist/operator-errors.js.map +1 -1
- package/dist/plugins/digest.d.ts +1 -0
- package/dist/plugins/digest.js +28 -0
- package/dist/plugins/digest.js.map +1 -0
- package/dist/plugins/index.d.ts +6 -0
- package/dist/plugins/index.js +6 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/manifest.d.ts +7 -0
- package/dist/plugins/manifest.js +22 -0
- package/dist/plugins/manifest.js.map +1 -0
- package/dist/plugins/registry.d.ts +9 -0
- package/dist/plugins/registry.js +24 -0
- package/dist/plugins/registry.js.map +1 -0
- package/dist/plugins/resolvers.d.ts +2 -0
- package/dist/plugins/resolvers.js +87 -0
- package/dist/plugins/resolvers.js.map +1 -0
- package/dist/plugins/types.d.ts +39 -0
- package/dist/plugins/types.js +2 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/plugins/validator.d.ts +3 -0
- package/dist/plugins/validator.js +44 -0
- package/dist/plugins/validator.js.map +1 -0
- package/dist/preflight/claude-auth.d.ts +11 -11
- package/dist/preflight/claude-auth.js +18 -32
- package/dist/preflight/claude-auth.js.map +1 -1
- package/dist/runner/claude.d.ts +3 -3
- package/dist/runner/claude.js +62 -26
- package/dist/runner/claude.js.map +1 -1
- package/dist/runner/runner.d.ts +29 -2
- package/dist/runner/simple.d.ts +2 -2
- package/dist/runner/simple.js +2 -2
- package/dist/runner/simple.js.map +1 -1
- package/dist/scripts/fix-node-pty.mjs +62 -0
- package/dist/setup-mode.d.ts +34 -0
- package/dist/setup-mode.js +49 -0
- package/dist/setup-mode.js.map +1 -0
- package/dist/solver-nets/registry.d.ts +33 -0
- package/dist/solver-nets/registry.js +66 -0
- package/dist/solver-nets/registry.js.map +1 -0
- package/dist/solver-types/constants.js.map +1 -0
- package/dist/solver-types/index.d.ts +38 -0
- package/dist/solver-types/index.js +57 -0
- package/dist/solver-types/index.js.map +1 -0
- package/dist/solver-types/learner-loop-test.d.ts +2 -0
- package/dist/solver-types/learner-loop-test.js +39 -0
- package/dist/solver-types/learner-loop-test.js.map +1 -0
- package/dist/solver-types/portfolio-v0.d.ts +2 -0
- package/dist/solver-types/portfolio-v0.js +13 -0
- package/dist/solver-types/portfolio-v0.js.map +1 -0
- package/dist/solver-types/prediction-apy-v0-auto.d.ts +21 -0
- package/dist/solver-types/prediction-apy-v0-auto.js +80 -0
- package/dist/solver-types/prediction-apy-v0-auto.js.map +1 -0
- package/dist/{intents → solver-types}/prediction-apy-v0-template.d.ts +2 -2
- package/dist/{intents → solver-types}/prediction-apy-v0-template.js +2 -2
- package/dist/solver-types/prediction-apy-v0-template.js.map +1 -0
- package/dist/solver-types/prediction-apy-v0.d.ts +3 -0
- package/dist/solver-types/prediction-apy-v0.js +25 -0
- package/dist/solver-types/prediction-apy-v0.js.map +1 -0
- package/dist/{intents → solver-types}/prediction-v0-auto.d.ts +17 -7
- package/dist/{intents → solver-types}/prediction-v0-auto.js +41 -8
- package/dist/solver-types/prediction-v0-auto.js.map +1 -0
- package/dist/{intents → solver-types}/prediction-v0-template.d.ts +9 -9
- package/dist/{intents → solver-types}/prediction-v0-template.js +10 -10
- package/dist/solver-types/prediction-v0-template.js.map +1 -0
- package/dist/solver-types/prediction-v0.d.ts +3 -0
- package/dist/{intents/kinds → solver-types}/prediction-v0.js +11 -6
- package/dist/solver-types/prediction-v0.js.map +1 -0
- package/dist/solver-types/solver-type.d.ts +55 -0
- package/dist/solver-types/solver-type.js +6 -0
- package/dist/solver-types/solver-type.js.map +1 -0
- package/dist/store/store.d.ts +97 -21
- package/dist/store/store.js +228 -45
- package/dist/store/store.js.map +1 -1
- package/dist/tasks/posting-service.d.ts +22 -0
- package/dist/tasks/posting-service.js +143 -0
- package/dist/tasks/posting-service.js.map +1 -0
- package/dist/tasks/signing.d.ts +4 -0
- package/dist/tasks/signing.js +18 -0
- package/dist/tasks/signing.js.map +1 -0
- package/dist/tasks/sources.d.ts +46 -0
- package/dist/tasks/sources.js +42 -0
- package/dist/tasks/sources.js.map +1 -0
- package/dist/templates/harnesses/alternative-harness/README.md.tmpl +44 -0
- package/dist/templates/harnesses/alternative-harness/gitignore.tmpl +3 -0
- package/dist/templates/harnesses/alternative-harness/jinn.manifest.json.tmpl +22 -0
- package/dist/templates/harnesses/alternative-harness/package.json.tmpl +26 -0
- package/dist/templates/harnesses/alternative-harness/src/coordinator.ts.tmpl +50 -0
- package/dist/templates/harnesses/alternative-harness/src/harness.ts.tmpl +31 -0
- package/dist/templates/harnesses/alternative-harness/src/index.ts.tmpl +44 -0
- package/dist/templates/harnesses/alternative-harness/src/mock-harness.ts.tmpl +41 -0
- package/dist/templates/harnesses/alternative-harness/src/phases/debrief.ts.tmpl +28 -0
- package/dist/templates/harnesses/alternative-harness/src/phases/execute.ts.tmpl +33 -0
- package/dist/templates/harnesses/alternative-harness/src/phases/improve.ts.tmpl +31 -0
- package/dist/templates/harnesses/alternative-harness/src/phases/memory.ts.tmpl +31 -0
- package/dist/templates/harnesses/alternative-harness/src/phases/orient.ts.tmpl +21 -0
- package/dist/templates/harnesses/alternative-harness/src/phases/plan.ts.tmpl +25 -0
- package/dist/templates/harnesses/alternative-harness/src/phases/strategize.ts.tmpl +29 -0
- package/dist/templates/harnesses/alternative-harness/test/coordinator.test.ts.tmpl +53 -0
- package/dist/templates/harnesses/alternative-harness/test/unit.test.ts.tmpl +55 -0
- package/dist/templates/harnesses/alternative-harness/tsconfig.json.tmpl +16 -0
- package/dist/templates/harnesses/evaluator/README.md.tmpl +36 -0
- package/dist/templates/harnesses/evaluator/gitignore.tmpl +3 -0
- package/dist/templates/harnesses/evaluator/jinn.manifest.json.tmpl +22 -0
- package/dist/templates/harnesses/evaluator/package.json.tmpl +26 -0
- package/dist/templates/harnesses/evaluator/src/index.ts.tmpl +35 -0
- package/dist/templates/harnesses/evaluator/test/unit.test.ts.tmpl +49 -0
- package/dist/templates/harnesses/evaluator/tsconfig.json.tmpl +16 -0
- package/dist/templates/harnesses/forecaster/README.md.tmpl +25 -0
- package/dist/templates/harnesses/forecaster/gitignore.tmpl +5 -0
- package/dist/templates/harnesses/forecaster/jinn.manifest.json.tmpl +22 -0
- package/dist/templates/harnesses/forecaster/package.json.tmpl +26 -0
- package/dist/templates/harnesses/forecaster/src/index.ts.tmpl +33 -0
- package/dist/templates/harnesses/forecaster/test/unit.test.ts.tmpl +42 -0
- package/dist/templates/harnesses/forecaster/tsconfig.json.tmpl +16 -0
- package/dist/trajectory/collector.d.ts +49 -0
- package/dist/trajectory/collector.js +86 -0
- package/dist/trajectory/collector.js.map +1 -0
- package/dist/trajectory/emit.d.ts +27 -0
- package/dist/trajectory/emit.js +40 -0
- package/dist/trajectory/emit.js.map +1 -0
- package/dist/trajectory/hash-chain.d.ts +18 -0
- package/dist/trajectory/hash-chain.js +23 -0
- package/dist/trajectory/hash-chain.js.map +1 -0
- package/dist/trajectory/index.d.ts +22 -0
- package/dist/trajectory/index.js +23 -0
- package/dist/trajectory/index.js.map +1 -0
- package/dist/trajectory/schema.d.ts +14 -14
- package/dist/trajectory/secret-scrub.d.ts +32 -0
- package/dist/trajectory/secret-scrub.js +51 -0
- package/dist/trajectory/secret-scrub.js.map +1 -0
- package/dist/trajectory/span-profile.d.ts +27 -0
- package/dist/trajectory/span-profile.js +51 -0
- package/dist/trajectory/span-profile.js.map +1 -0
- package/dist/trajectory/wrappers/http.d.ts +37 -0
- package/dist/trajectory/wrappers/http.js +85 -0
- package/dist/trajectory/wrappers/http.js.map +1 -0
- package/dist/trajectory/wrappers/mcp.d.ts +17 -0
- package/dist/trajectory/wrappers/mcp.js +58 -0
- package/dist/trajectory/wrappers/mcp.js.map +1 -0
- package/dist/trajectory/wrappers/subprocess.d.ts +32 -0
- package/dist/trajectory/wrappers/subprocess.js +70 -0
- package/dist/trajectory/wrappers/subprocess.js.map +1 -0
- package/dist/tx-retry.js +23 -9
- package/dist/tx-retry.js.map +1 -1
- package/dist/types/envelope.d.ts +1619 -0
- package/dist/types/envelope.js +121 -0
- package/dist/types/envelope.js.map +1 -0
- package/dist/types/index.d.ts +4 -4
- package/dist/types/index.js +4 -4
- package/dist/types/index.js.map +1 -1
- package/dist/types/payloads/index.d.ts +11 -0
- package/dist/types/payloads/index.js +46 -0
- package/dist/types/payloads/index.js.map +1 -0
- package/dist/types/payloads/portfolio-v0.d.ts +481 -0
- package/dist/types/payloads/portfolio-v0.js +94 -0
- package/dist/types/payloads/portfolio-v0.js.map +1 -0
- package/dist/types/payloads/prediction-apy-v0.d.ts +231 -0
- package/dist/types/payloads/prediction-apy-v0.js +63 -0
- package/dist/types/payloads/prediction-apy-v0.js.map +1 -0
- package/dist/types/payloads/prediction-v0.d.ts +262 -0
- package/dist/types/payloads/prediction-v0.js +73 -0
- package/dist/types/payloads/prediction-v0.js.map +1 -0
- package/dist/types/portfolio.d.ts +31 -698
- package/dist/types/portfolio.js +20 -110
- package/dist/types/portfolio.js.map +1 -1
- package/dist/types/prediction-apy.d.ts +26 -366
- package/dist/types/prediction-apy.js +12 -68
- package/dist/types/prediction-apy.js.map +1 -1
- package/dist/types/prediction.d.ts +40 -416
- package/dist/types/prediction.js +9 -83
- package/dist/types/prediction.js.map +1 -1
- package/dist/types/task-document.d.ts +498 -0
- package/dist/types/task-document.js +69 -0
- package/dist/types/task-document.js.map +1 -0
- package/dist/types/task.d.ts +455 -0
- package/dist/types/task.js +58 -0
- package/dist/types/task.js.map +1 -0
- package/dist/types/window.d.ts +12 -0
- package/dist/types/window.js +6 -0
- package/dist/types/window.js.map +1 -0
- package/dist/util/path-safety.d.ts +21 -0
- package/dist/util/path-safety.js +28 -0
- package/dist/util/path-safety.js.map +1 -0
- package/dist/util/redact-rpc-urls.d.ts +5 -0
- package/dist/util/redact-rpc-urls.js +9 -0
- package/dist/util/redact-rpc-urls.js.map +1 -0
- package/dist/venues/hyperliquid/account-value.d.ts +1 -1
- package/dist/venues/hyperliquid/account-value.js +1 -1
- package/dist/x402/acquire.d.ts +14 -3
- package/dist/x402/acquire.js +28 -11
- package/dist/x402/acquire.js.map +1 -1
- package/dist/x402/handler.d.ts +15 -3
- package/dist/x402/handler.js +67 -24
- package/dist/x402/handler.js.map +1 -1
- package/package.json +38 -13
- package/plugins/claude-code-learner/.claude-plugin/plugin.json +9 -0
- package/plugins/claude-code-learner/AGENTS.md +30 -0
- package/plugins/claude-code-learner/CLAUDE.md +31 -0
- package/plugins/claude-code-learner/README.md +58 -0
- package/plugins/claude-code-learner/agents/analyst.md +69 -0
- package/plugins/claude-code-learner/agents/consolidator.md +95 -0
- package/plugins/claude-code-learner/agents/explorer.md +54 -0
- package/plugins/claude-code-learner/agents/planner.md +88 -0
- package/plugins/claude-code-learner/agents/promoter.md +114 -0
- package/plugins/claude-code-learner/agents/step-worker.md +48 -0
- package/plugins/claude-code-learner/agents/strategist.md +86 -0
- package/plugins/claude-code-learner/hooks/hooks.json +16 -0
- package/plugins/claude-code-learner/hooks/session-start +38 -0
- package/plugins/claude-code-learner/skills/coordinator/SKILL.md +111 -0
- package/plugins/claude-code-learner/skills/debrief/SKILL.md +63 -0
- package/plugins/claude-code-learner/skills/execute/SKILL.md +87 -0
- package/plugins/claude-code-learner/skills/improve/SKILL.md +53 -0
- package/plugins/claude-code-learner/skills/memory-consolidation/SKILL.md +49 -0
- package/plugins/claude-code-learner/skills/orient/SKILL.md +71 -0
- package/plugins/claude-code-learner/skills/plan/SKILL.md +50 -0
- package/plugins/claude-code-learner/skills/strategize/SKILL.md +53 -0
- package/plugins/jinn-prediction-plugin/.claude-plugin/plugin.json +89 -0
- package/plugins/jinn-prediction-plugin/mcp/polymarket-server.mjs +2 -0
- package/plugins/jinn-prediction-plugin/schemas/prediction-v0-solution.schema.json +12 -0
- package/plugins/jinn-prediction-plugin/schemas/prediction-v0-task.schema.json +25 -0
- package/plugins/jinn-prediction-plugin/schemas/prediction-v0-verdict.schema.json +11 -0
- package/plugins/jinn-prediction-plugin/skills/base-rate-forecasting/SKILL.md +3 -0
- package/plugins/jinn-prediction-plugin/skills/calibration/SKILL.md +3 -0
- package/skills/jinn-operator/SKILL.md +120 -101
- package/templates/harnesses/alternative-harness/README.md.tmpl +44 -0
- package/templates/harnesses/alternative-harness/gitignore.tmpl +3 -0
- package/templates/harnesses/alternative-harness/jinn.manifest.json.tmpl +22 -0
- package/templates/harnesses/alternative-harness/package.json.tmpl +26 -0
- package/templates/harnesses/alternative-harness/src/coordinator.ts.tmpl +50 -0
- package/templates/harnesses/alternative-harness/src/harness.ts.tmpl +31 -0
- package/templates/harnesses/alternative-harness/src/index.ts.tmpl +44 -0
- package/templates/harnesses/alternative-harness/src/mock-harness.ts.tmpl +41 -0
- package/templates/harnesses/alternative-harness/src/phases/debrief.ts.tmpl +28 -0
- package/templates/harnesses/alternative-harness/src/phases/execute.ts.tmpl +33 -0
- package/templates/harnesses/alternative-harness/src/phases/improve.ts.tmpl +31 -0
- package/templates/harnesses/alternative-harness/src/phases/memory.ts.tmpl +31 -0
- package/templates/harnesses/alternative-harness/src/phases/orient.ts.tmpl +21 -0
- package/templates/harnesses/alternative-harness/src/phases/plan.ts.tmpl +25 -0
- package/templates/harnesses/alternative-harness/src/phases/strategize.ts.tmpl +29 -0
- package/templates/harnesses/alternative-harness/test/coordinator.test.ts.tmpl +53 -0
- package/templates/harnesses/alternative-harness/test/unit.test.ts.tmpl +55 -0
- package/templates/harnesses/alternative-harness/tsconfig.json.tmpl +16 -0
- package/templates/harnesses/evaluator/README.md.tmpl +36 -0
- package/templates/harnesses/evaluator/gitignore.tmpl +3 -0
- package/templates/harnesses/evaluator/jinn.manifest.json.tmpl +22 -0
- package/templates/harnesses/evaluator/package.json.tmpl +26 -0
- package/templates/harnesses/evaluator/src/index.ts.tmpl +35 -0
- package/templates/harnesses/evaluator/test/unit.test.ts.tmpl +49 -0
- package/templates/harnesses/evaluator/tsconfig.json.tmpl +16 -0
- package/templates/harnesses/forecaster/README.md.tmpl +25 -0
- package/templates/harnesses/forecaster/gitignore.tmpl +5 -0
- package/templates/harnesses/forecaster/jinn.manifest.json.tmpl +22 -0
- package/templates/harnesses/forecaster/package.json.tmpl +26 -0
- package/templates/harnesses/forecaster/src/index.ts.tmpl +33 -0
- package/templates/harnesses/forecaster/test/unit.test.ts.tmpl +42 -0
- package/templates/harnesses/forecaster/tsconfig.json.tmpl +16 -0
- package/dist/bin/jinn-mcp.d.ts +0 -2
- package/dist/bin/jinn-mcp.js +0 -10
- package/dist/bin/jinn-mcp.js.map +0 -1
- package/dist/cli/commands/intents.d.ts +0 -17
- package/dist/cli/commands/intents.js +0 -489
- package/dist/cli/commands/intents.js.map +0 -1
- package/dist/cli/commands/plugin-install.js.map +0 -1
- package/dist/cli/commands/submit-intent.js +0 -245
- package/dist/cli/commands/submit-intent.js.map +0 -1
- package/dist/cli/intent-registry-access.d.ts +0 -62
- package/dist/cli/intent-registry-access.js +0 -165
- package/dist/cli/intent-registry-access.js.map +0 -1
- package/dist/discovery/registry.d.ts +0 -97
- package/dist/discovery/registry.js +0 -177
- package/dist/discovery/registry.js.map +0 -1
- package/dist/discovery/subgraph.d.ts +0 -37
- package/dist/discovery/subgraph.js +0 -87
- package/dist/discovery/subgraph.js.map +0 -1
- package/dist/intents/kinds/constants.js.map +0 -1
- package/dist/intents/kinds/index.d.ts +0 -28
- package/dist/intents/kinds/index.js +0 -50
- package/dist/intents/kinds/index.js.map +0 -1
- package/dist/intents/kinds/portfolio-v0.d.ts +0 -2
- package/dist/intents/kinds/portfolio-v0.js +0 -13
- package/dist/intents/kinds/portfolio-v0.js.map +0 -1
- package/dist/intents/kinds/prediction-apy-v0.d.ts +0 -3
- package/dist/intents/kinds/prediction-apy-v0.js +0 -21
- package/dist/intents/kinds/prediction-apy-v0.js.map +0 -1
- package/dist/intents/kinds/prediction-v0.d.ts +0 -3
- package/dist/intents/kinds/prediction-v0.js.map +0 -1
- package/dist/intents/kinds/spec-kind.d.ts +0 -38
- package/dist/intents/kinds/spec-kind.js +0 -6
- package/dist/intents/kinds/spec-kind.js.map +0 -1
- package/dist/intents/posting-service.d.ts +0 -26
- package/dist/intents/posting-service.js +0 -218
- package/dist/intents/posting-service.js.map +0 -1
- package/dist/intents/prediction-apy-v0-auto.d.ts +0 -11
- package/dist/intents/prediction-apy-v0-auto.js +0 -46
- package/dist/intents/prediction-apy-v0-auto.js.map +0 -1
- package/dist/intents/prediction-apy-v0-template.js.map +0 -1
- package/dist/intents/prediction-v0-auto.js.map +0 -1
- package/dist/intents/prediction-v0-template.js.map +0 -1
- package/dist/intents/sources.d.ts +0 -39
- package/dist/intents/sources.js +0 -42
- package/dist/intents/sources.js.map +0 -1
- package/dist/restorer/engine/canonical-json.d.ts +0 -18
- package/dist/restorer/engine/canonical-json.js +0 -59
- package/dist/restorer/engine/canonical-json.js.map +0 -1
- package/dist/restorer/engine/claim.js.map +0 -1
- package/dist/restorer/engine/delivery.js.map +0 -1
- package/dist/restorer/engine/engine.d.ts +0 -213
- package/dist/restorer/engine/engine.js +0 -769
- package/dist/restorer/engine/engine.js.map +0 -1
- package/dist/restorer/engine/manifest-assembly.d.ts +0 -67
- package/dist/restorer/engine/manifest-assembly.js +0 -79
- package/dist/restorer/engine/manifest-assembly.js.map +0 -1
- package/dist/restorer/engine/packaging.d.ts +0 -87
- package/dist/restorer/engine/packaging.js.map +0 -1
- package/dist/restorer/engine/persistence.d.ts +0 -170
- package/dist/restorer/engine/persistence.js.map +0 -1
- package/dist/restorer/engine/recovery.d.ts +0 -22
- package/dist/restorer/engine/recovery.js.map +0 -1
- package/dist/restorer/engine/registry.d.ts +0 -62
- package/dist/restorer/engine/registry.js +0 -73
- package/dist/restorer/engine/registry.js.map +0 -1
- package/dist/restorer/engine/signing.js.map +0 -1
- package/dist/restorer/engine/state.js.map +0 -1
- package/dist/restorer/impls/claude-mcp-hyperliquid/api-wallet.js.map +0 -1
- package/dist/restorer/impls/claude-mcp-hyperliquid/index.js.map +0 -1
- package/dist/restorer/impls/claude-mcp-hyperliquid/mcp-tools.js.map +0 -1
- package/dist/restorer/impls/claude-mcp-hyperliquid/safety-rails.js.map +0 -1
- package/dist/restorer/impls/claude-mcp-hyperliquid/session-orchestrator.js.map +0 -1
- package/dist/restorer/impls/claude-mcp-prediction/index.js.map +0 -1
- package/dist/restorer/impls/claude-mcp-prediction/mcp-tools.js.map +0 -1
- package/dist/restorer/impls/claude-mcp-prediction/prompt.js.map +0 -1
- package/dist/restorer/impls/claude-mcp-prediction/session-orchestrator.js.map +0 -1
- package/dist/restorer/impls/claude-mcp-prediction/types.js +0 -6
- package/dist/restorer/impls/claude-mcp-prediction/types.js.map +0 -1
- package/dist/restorer/impls/claude-mcp-prediction-apy/index.d.ts +0 -34
- package/dist/restorer/impls/claude-mcp-prediction-apy/index.js.map +0 -1
- package/dist/restorer/impls/claude-mcp-prediction-apy/mcp-tools.js.map +0 -1
- package/dist/restorer/impls/claude-mcp-prediction-apy/prompt.d.ts +0 -7
- package/dist/restorer/impls/claude-mcp-prediction-apy/prompt.js.map +0 -1
- package/dist/restorer/impls/claude-mcp-prediction-apy/session-orchestrator.js +0 -128
- package/dist/restorer/impls/claude-mcp-prediction-apy/session-orchestrator.js.map +0 -1
- package/dist/restorer/impls/claude-mcp-prediction-apy/types.js +0 -6
- package/dist/restorer/impls/claude-mcp-prediction-apy/types.js.map +0 -1
- package/dist/restorer/impls/evaluation-context.d.ts +0 -16
- package/dist/restorer/impls/evaluation-context.js +0 -18
- package/dist/restorer/impls/evaluation-context.js.map +0 -1
- package/dist/restorer/impls/index.d.ts +0 -46
- package/dist/restorer/impls/index.js.map +0 -1
- package/dist/restorer/impls/legacy-claude/index.d.ts +0 -52
- package/dist/restorer/impls/legacy-claude/index.js.map +0 -1
- package/dist/restorer/impls/portfolio-v0-evaluator/canonical-metrics.js.map +0 -1
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/availability.js.map +0 -1
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/consistency.js.map +0 -1
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/eligibility.js.map +0 -1
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/integrity.js.map +0 -1
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/spec.js.map +0 -1
- package/dist/restorer/impls/portfolio-v0-evaluator/index.d.ts +0 -44
- package/dist/restorer/impls/portfolio-v0-evaluator/index.js.map +0 -1
- package/dist/restorer/impls/portfolio-v0-evaluator/score.js.map +0 -1
- package/dist/restorer/impls/portfolio-v0-evaluator/types.js.map +0 -1
- package/dist/restorer/impls/prediction-apy-v0-baseline/index.js.map +0 -1
- package/dist/restorer/impls/prediction-apy-v0-baseline/strategy.js.map +0 -1
- package/dist/restorer/impls/prediction-apy-v0-baseline/types.js.map +0 -1
- package/dist/restorer/impls/prediction-apy-v0-evaluator/canonical-metrics.d.ts +0 -6
- package/dist/restorer/impls/prediction-apy-v0-evaluator/canonical-metrics.js +0 -11
- package/dist/restorer/impls/prediction-apy-v0-evaluator/canonical-metrics.js.map +0 -1
- package/dist/restorer/impls/prediction-apy-v0-evaluator/index.js +0 -208
- package/dist/restorer/impls/prediction-apy-v0-evaluator/index.js.map +0 -1
- package/dist/restorer/impls/prediction-apy-v0-evaluator/parse-submission.d.ts +0 -7
- package/dist/restorer/impls/prediction-apy-v0-evaluator/parse-submission.js +0 -29
- package/dist/restorer/impls/prediction-apy-v0-evaluator/parse-submission.js.map +0 -1
- package/dist/restorer/impls/prediction-apy-v0-evaluator/score.js.map +0 -1
- package/dist/restorer/impls/prediction-apy-v0-evaluator/types.js.map +0 -1
- package/dist/restorer/impls/prediction-v0-baseline/index.d.ts +0 -31
- package/dist/restorer/impls/prediction-v0-baseline/index.js.map +0 -1
- package/dist/restorer/impls/prediction-v0-baseline/strategy.js.map +0 -1
- package/dist/restorer/impls/prediction-v0-baseline/types.d.ts +0 -7
- package/dist/restorer/impls/prediction-v0-baseline/types.js.map +0 -1
- package/dist/restorer/impls/prediction-v0-evaluator/canonical-metrics.js.map +0 -1
- package/dist/restorer/impls/prediction-v0-evaluator/checks/availability.js.map +0 -1
- package/dist/restorer/impls/prediction-v0-evaluator/checks/eligibility.js.map +0 -1
- package/dist/restorer/impls/prediction-v0-evaluator/checks/integrity.d.ts +0 -13
- package/dist/restorer/impls/prediction-v0-evaluator/checks/integrity.js.map +0 -1
- package/dist/restorer/impls/prediction-v0-evaluator/checks/spec.js.map +0 -1
- package/dist/restorer/impls/prediction-v0-evaluator/index.js +0 -234
- package/dist/restorer/impls/prediction-v0-evaluator/index.js.map +0 -1
- package/dist/restorer/impls/prediction-v0-evaluator/score.js.map +0 -1
- package/dist/restorer/impls/prediction-v0-evaluator/types.js.map +0 -1
- package/dist/restorer/types.d.ts +0 -194
- package/dist/restorer/types.js.map +0 -1
- package/dist/types/desired-state.d.ts +0 -94
- package/dist/types/desired-state.js +0 -36
- package/dist/types/desired-state.js.map +0 -1
- /package/dist/cli/commands/{plugin-install.d.ts → solver-nets.d.ts} +0 -0
- /package/dist/cli/commands/{submit-intent.d.ts → tasks.d.ts} +0 -0
- /package/dist/{restorer/impls/prediction-apy-v0-baseline → harnesses/impls/claude-code-learner}/types.js +0 -0
- /package/dist/{restorer → harnesses}/impls/claude-mcp-hyperliquid/api-wallet.js +0 -0
- /package/dist/{restorer → harnesses}/impls/claude-mcp-hyperliquid/mcp-tools.d.ts +0 -0
- /package/dist/{restorer → harnesses}/impls/claude-mcp-hyperliquid/mcp-tools.js +0 -0
- /package/dist/{restorer → harnesses}/impls/claude-mcp-hyperliquid/safety-rails.d.ts +0 -0
- /package/dist/{restorer → harnesses}/impls/claude-mcp-hyperliquid/safety-rails.js +0 -0
- /package/dist/{restorer → harnesses}/impls/claude-mcp-prediction/mcp-tools.d.ts +0 -0
- /package/dist/{restorer → harnesses}/impls/claude-mcp-prediction-apy/mcp-tools.d.ts +0 -0
- /package/dist/{restorer → harnesses}/impls/portfolio-v0-evaluator/checks/availability.d.ts +0 -0
- /package/dist/{restorer → harnesses}/impls/portfolio-v0-evaluator/checks/availability.js +0 -0
- /package/dist/{restorer → harnesses}/impls/portfolio-v0-evaluator/score.d.ts +0 -0
- /package/dist/{restorer → harnesses}/impls/portfolio-v0-evaluator/score.js +0 -0
- /package/dist/{restorer → harnesses}/impls/portfolio-v0-evaluator/types.js +0 -0
- /package/dist/{restorer → harnesses}/impls/prediction-apy-v0-baseline/strategy.d.ts +0 -0
- /package/dist/{restorer → harnesses}/impls/prediction-apy-v0-baseline/strategy.js +0 -0
- /package/dist/{restorer → harnesses}/impls/prediction-apy-v0-baseline/types.d.ts +0 -0
- /package/dist/{restorer/impls/prediction-apy-v0-evaluator → harnesses/impls/prediction-apy-v0-baseline}/types.js +0 -0
- /package/dist/{restorer → harnesses}/impls/prediction-apy-v0-evaluator/score.d.ts +0 -0
- /package/dist/{restorer → harnesses}/impls/prediction-apy-v0-evaluator/score.js +0 -0
- /package/dist/{restorer → harnesses}/impls/prediction-apy-v0-evaluator/types.d.ts +0 -0
- /package/dist/{restorer/impls/prediction-v0-baseline → harnesses/impls/prediction-apy-v0-evaluator}/types.js +0 -0
- /package/dist/{restorer/impls/prediction-v0-evaluator → harnesses/impls/prediction-v0-baseline}/types.js +0 -0
- /package/dist/{restorer → harnesses}/impls/prediction-v0-evaluator/canonical-metrics.js +0 -0
- /package/dist/{restorer → harnesses}/impls/prediction-v0-evaluator/checks/availability.d.ts +0 -0
- /package/dist/{restorer → harnesses}/impls/prediction-v0-evaluator/checks/availability.js +0 -0
- /package/dist/{restorer → harnesses}/impls/prediction-v0-evaluator/checks/eligibility.js +0 -0
- /package/dist/{restorer → harnesses}/impls/prediction-v0-evaluator/checks/spec.js +0 -0
- /package/dist/{restorer → harnesses}/impls/prediction-v0-evaluator/score.d.ts +0 -0
- /package/dist/{restorer → harnesses}/impls/prediction-v0-evaluator/score.js +0 -0
- /package/dist/{restorer → harnesses}/impls/prediction-v0-evaluator/types.d.ts +0 -0
- /package/dist/{intents/kinds → solver-types}/constants.d.ts +0 -0
- /package/dist/{intents/kinds → solver-types}/constants.js +0 -0
|
@@ -1,330 +1,548 @@
|
|
|
1
|
-
import { randomBytes } from 'node:crypto';
|
|
2
|
-
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
1
|
+
import { randomBytes as defaultRandomBytes } from 'node:crypto';
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from 'node:fs';
|
|
3
3
|
import { homedir } from 'node:os';
|
|
4
4
|
import { join } from 'node:path';
|
|
5
5
|
import { parseArgs } from 'node:util';
|
|
6
6
|
import { COMMON_FLAGS } from '../command.js';
|
|
7
7
|
import { emitEnvelope } from '../../errors/envelope.js';
|
|
8
|
-
import { loadConfig } from '../../config.js';
|
|
8
|
+
import { loadConfig as defaultLoadConfig, getConfigPathFromArgs as defaultGetConfigPathFromArgs, } from '../../config.js';
|
|
9
9
|
import initCommand from './init.js';
|
|
10
10
|
import bootstrapCommand from './bootstrap.js';
|
|
11
11
|
import doctorCommand from './doctor.js';
|
|
12
|
-
import { checkRpcNetwork, rpcNetworkFailureHint } from '../../preflight/rpc-network.js';
|
|
13
|
-
import { apiPortFailureMessage, checkApiPortAvailable } from '../../preflight/api-port.js';
|
|
12
|
+
import { checkRpcNetwork as defaultCheckRpcNetwork, rpcNetworkFailureHint as defaultRpcNetworkFailureHint, } from '../../preflight/rpc-network.js';
|
|
13
|
+
import { apiPortFailureMessage as defaultApiPortFailureMessage, checkApiPortAvailable as defaultCheckApiPortAvailable, } from '../../preflight/api-port.js';
|
|
14
|
+
function emitProgress(writer, envelope) {
|
|
15
|
+
writer.write(JSON.stringify(envelope) + '\n');
|
|
16
|
+
}
|
|
14
17
|
// StringWriter to capture sub-command output
|
|
15
18
|
class StringWriter {
|
|
16
19
|
chunks = [];
|
|
17
20
|
write(s) { this.chunks.push(s); return true; }
|
|
18
21
|
toString() { return this.chunks.join(''); }
|
|
19
22
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
'no-daemon': { type: 'boolean', default: false },
|
|
28
|
-
},
|
|
29
|
-
allowPositionals: false,
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
catch (err) {
|
|
33
|
-
emitEnvelope({
|
|
34
|
-
code: 'invalid_invocation',
|
|
35
|
-
message: err instanceof Error ? err.message : String(err),
|
|
36
|
-
exampleCli: 'jinn quickstart',
|
|
37
|
-
details: { field: 'flags' },
|
|
38
|
-
}, { writer: ctx.writer, exit: ctx.exit });
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
const noDaemon = parsed.values['no-daemon'];
|
|
42
|
-
const configPath = typeof parsed.values.config === 'string' && parsed.values.config.length > 0
|
|
43
|
-
? parsed.values.config
|
|
44
|
-
: undefined;
|
|
45
|
-
const jinnDir = join(ctx.env['HOME'] ?? homedir(), '.jinn-client');
|
|
46
|
-
const passwordFilePath = join(jinnDir, 'keystore-password');
|
|
47
|
-
const bootstrapArgv = ['--json', ...(configPath ? ['--config', configPath] : [])];
|
|
48
|
-
// ── Step 1: Resolve or generate password ──
|
|
49
|
-
let password;
|
|
50
|
-
let passwordGenerated = false;
|
|
51
|
-
if (ctx.env['JINN_PASSWORD']) {
|
|
52
|
-
password = ctx.env['JINN_PASSWORD'];
|
|
53
|
-
console.error('[quickstart] Using password from JINN_PASSWORD environment variable.');
|
|
54
|
-
}
|
|
55
|
-
else if (existsSync(passwordFilePath)) {
|
|
56
|
-
password = readFileSync(passwordFilePath, 'utf-8').trim();
|
|
57
|
-
console.error('[quickstart] Using existing auto-generated password.');
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
password = randomBytes(32).toString('hex');
|
|
61
|
-
mkdirSync(jinnDir, { recursive: true, mode: 0o700 });
|
|
62
|
-
writeFileSync(passwordFilePath, password + '\n', { mode: 0o600 });
|
|
63
|
-
passwordGenerated = true;
|
|
64
|
-
console.error('[quickstart] Generated keystore password.');
|
|
65
|
-
}
|
|
66
|
-
const subEnv = { ...ctx.env, JINN_PASSWORD: password };
|
|
67
|
-
const config = loadConfig(configPath);
|
|
68
|
-
const rpcPreflight = await checkRpcNetwork(config);
|
|
69
|
-
if (!rpcPreflight.ok) {
|
|
70
|
-
emitEnvelope({
|
|
71
|
-
code: 'invalid_invocation',
|
|
72
|
-
message: rpcPreflight.message,
|
|
73
|
-
hint: rpcNetworkFailureHint(rpcPreflight),
|
|
74
|
-
exampleCli: 'jinn doctor --human',
|
|
75
|
-
details: {
|
|
76
|
-
field: 'rpcUrl',
|
|
77
|
-
network: rpcPreflight.network,
|
|
78
|
-
expectedChainId: rpcPreflight.expectedChainId,
|
|
79
|
-
actualChainId: rpcPreflight.actualChainId ?? null,
|
|
80
|
-
rpcHost: rpcPreflight.rpcHost,
|
|
81
|
-
reason: rpcPreflight.reason,
|
|
82
|
-
},
|
|
83
|
-
}, { writer: ctx.writer, exit: ctx.exit });
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
if (!noDaemon) {
|
|
87
|
-
const portPreflight = await checkApiPortAvailable(config.apiPort);
|
|
88
|
-
if (!portPreflight.ok) {
|
|
89
|
-
emitEnvelope({
|
|
90
|
-
code: 'invalid_invocation',
|
|
91
|
-
message: apiPortFailureMessage(portPreflight),
|
|
92
|
-
hint: 'Stop the other daemon or set JINN_API_PORT / apiPort to a free port before running quickstart.',
|
|
93
|
-
exampleCli: 'JINN_API_PORT=7332 jinn quickstart',
|
|
94
|
-
details: {
|
|
95
|
-
field: 'apiPort',
|
|
96
|
-
port: portPreflight.port,
|
|
97
|
-
reason: portPreflight.code ?? 'unavailable',
|
|
98
|
-
},
|
|
99
|
-
}, { writer: ctx.writer, exit: ctx.exit });
|
|
100
|
-
return;
|
|
23
|
+
const DEFAULT_PASSWORD_FILE_IO = {
|
|
24
|
+
exists: (path) => existsSync(path),
|
|
25
|
+
read: (path) => readFileSync(path, 'utf-8'),
|
|
26
|
+
write: (path, content) => writeFileSync(path, content, { mode: 0o600 }),
|
|
27
|
+
remove: (path) => {
|
|
28
|
+
try {
|
|
29
|
+
unlinkSync(path);
|
|
101
30
|
}
|
|
31
|
+
catch { /* best effort — file may not exist */ }
|
|
32
|
+
},
|
|
33
|
+
ensureDir: (path) => mkdirSync(path, { recursive: true, mode: 0o700 }),
|
|
34
|
+
};
|
|
35
|
+
const PRODUCTION_DEPS = {
|
|
36
|
+
loadConfig: defaultLoadConfig,
|
|
37
|
+
getConfigPathFromArgs: defaultGetConfigPathFromArgs,
|
|
38
|
+
checkRpcNetwork: defaultCheckRpcNetwork,
|
|
39
|
+
rpcNetworkFailureHint: defaultRpcNetworkFailureHint,
|
|
40
|
+
checkApiPortAvailable: defaultCheckApiPortAvailable,
|
|
41
|
+
apiPortFailureMessage: defaultApiPortFailureMessage,
|
|
42
|
+
// environment plumbing for the spawned daemon — out of DI scope
|
|
43
|
+
mainFn: async () => {
|
|
44
|
+
const m = await import('../../main.js');
|
|
45
|
+
return m.main();
|
|
46
|
+
},
|
|
47
|
+
initRun: initCommand.run.bind(initCommand),
|
|
48
|
+
bootstrapRun: bootstrapCommand.run.bind(bootstrapCommand),
|
|
49
|
+
doctorRun: doctorCommand.run.bind(doctorCommand),
|
|
50
|
+
passwordFileIO: DEFAULT_PASSWORD_FILE_IO,
|
|
51
|
+
randomBytesFn: defaultRandomBytes,
|
|
52
|
+
};
|
|
53
|
+
export function createQuickstartCommand(deps = PRODUCTION_DEPS) {
|
|
54
|
+
return {
|
|
55
|
+
name: 'quickstart',
|
|
56
|
+
summary: 'Zero-to-running in one command: init, fund, bootstrap, run',
|
|
57
|
+
helpText: `Usage: jinn quickstart [--no-daemon] [--json-progress] [--config <path>]
|
|
58
|
+
|
|
59
|
+
Prerequisite: run \`jinn auth\` once first to set your runtime mode and
|
|
60
|
+
authenticate Claude. quickstart picks up where auth leaves off.
|
|
61
|
+
|
|
62
|
+
One command to go from nothing to a running Jinn daemon:
|
|
63
|
+
1. Generate a keystore password (or use JINN_PASSWORD)
|
|
64
|
+
2. Create the master wallet
|
|
65
|
+
3. Fund via faucet (automatic on testnet if CDP SDK available)
|
|
66
|
+
4. Bootstrap the fleet state machine
|
|
67
|
+
5. Start the daemon (unless --no-daemon is passed)
|
|
68
|
+
|
|
69
|
+
Idempotent. Re-running after partial completion resumes from
|
|
70
|
+
wherever it left off.
|
|
71
|
+
|
|
72
|
+
Flags:
|
|
73
|
+
--no-daemon Stop after bootstrap; do not start the daemon.
|
|
74
|
+
--json-progress Emit NDJSON progress envelopes on stdout during each
|
|
75
|
+
phase. Envelopes have stable fields: type, phase, step,
|
|
76
|
+
attempt, blocking, nextAction, addresses, estimatedWaitMs.
|
|
77
|
+
Automatically enabled in --json mode on non-TTY stdout.
|
|
78
|
+
--config <path> Path to config file.
|
|
79
|
+
|
|
80
|
+
New operator path (recommended):
|
|
81
|
+
jinn auth # check/set runtime mode + Claude auth
|
|
82
|
+
jinn quickstart # zero-to-running
|
|
83
|
+
|
|
84
|
+
Runtime mode:
|
|
85
|
+
Set once by \`jinn auth\` and persisted to ~/.jinn-client/config.json.
|
|
86
|
+
quickstart reads that value; you do not need to pass it again.
|
|
87
|
+
|
|
88
|
+
Password handling:
|
|
89
|
+
If JINN_PASSWORD is set in the environment, that value is used — no file
|
|
90
|
+
is written. This is the recommended approach for CI and advanced use.
|
|
91
|
+
|
|
92
|
+
Otherwise quickstart auto-generates a random password and writes it to
|
|
93
|
+
~/.jinn-client/keystore-password (mode 0600). This file sits next to the
|
|
94
|
+
encrypted keystore, so anyone with shell access to this machine can
|
|
95
|
+
decrypt the wallet. Keep funds to the gas + rewards minimum.
|
|
96
|
+
|
|
97
|
+
To rotate: JINN_NEW_PASSWORD=<new> jinn keys change-password
|
|
98
|
+
|
|
99
|
+
Agent/script mode (--json / --no-daemon / --json-progress):
|
|
100
|
+
jinn quickstart --no-daemon --json
|
|
101
|
+
jinn quickstart --json-progress # polls progress without parsing stderr
|
|
102
|
+
|
|
103
|
+
Pass --no-daemon to skip starting the foreground daemon. quickstart will
|
|
104
|
+
complete all setup steps and then emit a single JSON payload on stdout:
|
|
105
|
+
|
|
106
|
+
{
|
|
107
|
+
"schemaVersion": 1,
|
|
108
|
+
"generatedAt": "<ISO timestamp>",
|
|
109
|
+
"verb": "quickstart",
|
|
110
|
+
"status": "ready",
|
|
111
|
+
"masterAddress": "0x...",
|
|
112
|
+
"dashboardUrl": "http://127.0.0.1:7331",
|
|
113
|
+
"passwordFile": "~/.jinn-client/keystore-password" // omitted if JINN_PASSWORD was used
|
|
102
114
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
const realBlockers = blocking.filter((c) => !c.name.startsWith('portfolio_') && !c.name.startsWith('hl_'));
|
|
126
|
-
if (realBlockers.length > 0) {
|
|
127
|
-
console.error('[quickstart] Preflight failed. Fix the following and re-run:');
|
|
128
|
-
for (const c of realBlockers) {
|
|
129
|
-
console.error(` - ${c.name}: ${c.detail}`);
|
|
130
|
-
if (c.remedy)
|
|
131
|
-
console.error(` remedy: ${c.remedy}`);
|
|
132
|
-
}
|
|
133
|
-
ctx.exit(11);
|
|
134
|
-
return;
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
console.error('[quickstart] Preflight OK.');
|
|
138
|
-
// ── Step 2: Init (idempotent) ──
|
|
139
|
-
console.error('[quickstart] Initializing wallet...');
|
|
140
|
-
const initWriter = new StringWriter();
|
|
141
|
-
let initExitCode = null;
|
|
142
|
-
await initCommand.run({
|
|
143
|
-
argv: ['--json'],
|
|
144
|
-
stdoutIsTty: false,
|
|
145
|
-
writer: initWriter,
|
|
146
|
-
exit: (code) => { initExitCode = code; },
|
|
147
|
-
env: subEnv,
|
|
148
|
-
});
|
|
149
|
-
if (initExitCode !== null && initExitCode !== 0) {
|
|
150
|
-
console.error('[quickstart] Init failed.');
|
|
151
|
-
ctx.writer.write(initWriter.toString());
|
|
152
|
-
ctx.exit(initExitCode);
|
|
153
|
-
return;
|
|
154
|
-
}
|
|
155
|
-
// Parse master address from init output
|
|
156
|
-
let masterAddress = '';
|
|
157
|
-
try {
|
|
158
|
-
const initResult = JSON.parse(initWriter.toString().trim());
|
|
159
|
-
masterAddress = initResult.master ?? '';
|
|
160
|
-
}
|
|
161
|
-
catch { /* non-fatal */ }
|
|
162
|
-
console.error(`[quickstart] Wallet ready. Master: ${masterAddress || '(see init output)'}`);
|
|
163
|
-
// ── Step 3: Bootstrap (with retry for funding gates) ──
|
|
164
|
-
const MAX_BOOTSTRAP_ATTEMPTS = 3;
|
|
165
|
-
let bootstrapSuccess = false;
|
|
166
|
-
for (let attempt = 1; attempt <= MAX_BOOTSTRAP_ATTEMPTS; attempt++) {
|
|
167
|
-
console.error(`[quickstart] Running bootstrap (attempt ${attempt}/${MAX_BOOTSTRAP_ATTEMPTS})...`);
|
|
168
|
-
const bsWriter = new StringWriter();
|
|
169
|
-
let bsExitCode = null;
|
|
170
|
-
await bootstrapCommand.run({
|
|
171
|
-
argv: bootstrapArgv,
|
|
172
|
-
stdoutIsTty: false,
|
|
173
|
-
writer: bsWriter,
|
|
174
|
-
exit: (code) => { bsExitCode = code; },
|
|
175
|
-
env: subEnv,
|
|
176
|
-
});
|
|
177
|
-
if (bsExitCode === null || bsExitCode === 0) {
|
|
178
|
-
bootstrapSuccess = true;
|
|
179
|
-
console.error('[quickstart] Bootstrap complete.');
|
|
180
|
-
break;
|
|
181
|
-
}
|
|
182
|
-
// Exit code 10 = funding_required — the faucet integration in bootstrap.ts
|
|
183
|
-
// will have already attempted auto-funding. If we're here, manual funding is needed.
|
|
184
|
-
if (bsExitCode === 10) {
|
|
185
|
-
const bsOutput = bsWriter.toString().trim();
|
|
186
|
-
console.error('[quickstart] Funding required. Waiting for manual funding...');
|
|
115
|
+
|
|
116
|
+
Operational verbs emit JSON on stdout by default. Use --human for
|
|
117
|
+
terminal-readable output.
|
|
118
|
+
|
|
119
|
+
Examples:
|
|
120
|
+
# Interactive first run (after jinn auth)
|
|
121
|
+
jinn quickstart
|
|
122
|
+
|
|
123
|
+
# Skip the daemon — emit JSON and exit (agent/script mode)
|
|
124
|
+
jinn quickstart --no-daemon
|
|
125
|
+
JINN_PASSWORD=mysecret jinn quickstart
|
|
126
|
+
jinn quickstart --json-progress 2>/dev/null
|
|
127
|
+
|
|
128
|
+
# CI: supply password via env, set mode non-interactively, no daemon
|
|
129
|
+
JINN_PASSWORD=mysecret jinn auth --mode bare && \\
|
|
130
|
+
JINN_PASSWORD=mysecret jinn quickstart --no-daemon
|
|
131
|
+
|
|
132
|
+
# Custom config
|
|
133
|
+
jinn quickstart --config /etc/jinn/config.json
|
|
134
|
+
`,
|
|
135
|
+
async run(ctx) {
|
|
136
|
+
let parsed;
|
|
187
137
|
try {
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
138
|
+
parsed = parseArgs({
|
|
139
|
+
args: ctx.argv,
|
|
140
|
+
options: {
|
|
141
|
+
...COMMON_FLAGS,
|
|
142
|
+
'no-daemon': { type: 'boolean', default: false },
|
|
143
|
+
'json-progress': { type: 'boolean', default: false },
|
|
144
|
+
},
|
|
145
|
+
allowPositionals: false,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
catch (err) {
|
|
149
|
+
emitEnvelope({
|
|
150
|
+
code: 'invalid_invocation',
|
|
151
|
+
message: err instanceof Error ? err.message : String(err),
|
|
152
|
+
exampleCli: 'jinn quickstart',
|
|
153
|
+
details: { field: 'flags' },
|
|
154
|
+
}, { writer: ctx.writer, exit: ctx.exit });
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
const noDaemon = parsed.values['no-daemon'];
|
|
158
|
+
// Emit NDJSON progress envelopes when --json-progress is set or stdout is
|
|
159
|
+
// non-TTY in JSON mode (agent / MCP callers). This lets a polling agent
|
|
160
|
+
// know which step is active without parsing stderr.
|
|
161
|
+
const jsonProgress = parsed.values['json-progress'] ||
|
|
162
|
+
(!ctx.stdoutIsTty && Boolean(parsed.values.json));
|
|
163
|
+
const configPath = typeof parsed.values.config === 'string' && parsed.values.config.length > 0
|
|
164
|
+
? parsed.values.config
|
|
165
|
+
: undefined;
|
|
166
|
+
const jinnDir = join(ctx.env['HOME'] ?? homedir(), '.jinn-client');
|
|
167
|
+
const passwordFilePath = join(jinnDir, 'keystore-password');
|
|
168
|
+
const keystoreFilePath = join(jinnDir, 'earning', 'master_keystore.json');
|
|
169
|
+
const bootstrapArgv = ['--json', ...(configPath ? ['--config', configPath] : [])];
|
|
170
|
+
// ── Preflight (no secret state yet) ──
|
|
171
|
+
// SECURITY (audit W4, jinn-mono-964.6): all non-secret preflight runs
|
|
172
|
+
// BEFORE we generate or write any plaintext password material. If any
|
|
173
|
+
// blocking preflight fails we exit with no orphan secrets on disk.
|
|
174
|
+
const config = deps.loadConfig(configPath);
|
|
175
|
+
// Track whether we touched the password file so error paths can report
|
|
176
|
+
// accurate cleanup state in the structured envelope.
|
|
177
|
+
let passwordGenerated = false;
|
|
178
|
+
// `passwordFilePreexisted` records whether the on-disk password file
|
|
179
|
+
// existed *before* this quickstart invocation. We must never delete a
|
|
180
|
+
// file the user already had — only one we just wrote.
|
|
181
|
+
const passwordFilePreexisted = deps.passwordFileIO.exists(passwordFilePath);
|
|
182
|
+
const cleanupGeneratedPasswordIfOrphaned = () => {
|
|
183
|
+
// Defense in depth: only remove the password file if we generated it
|
|
184
|
+
// AND no keystore exists yet. Keystore presence means a usable wallet
|
|
185
|
+
// was created (the password is needed to decrypt it).
|
|
186
|
+
if (!passwordGenerated)
|
|
187
|
+
return { removed: false, reason: 'not_generated_this_run' };
|
|
188
|
+
if (deps.passwordFileIO.exists(keystoreFilePath)) {
|
|
189
|
+
return { removed: false, reason: 'keystore_exists' };
|
|
190
|
+
}
|
|
191
|
+
deps.passwordFileIO.remove(passwordFilePath);
|
|
192
|
+
return { removed: true, reason: 'orphan_cleanup' };
|
|
193
|
+
};
|
|
194
|
+
const rpcPreflight = await deps.checkRpcNetwork(config);
|
|
195
|
+
if (!rpcPreflight.ok) {
|
|
196
|
+
const cleanup = cleanupGeneratedPasswordIfOrphaned();
|
|
197
|
+
emitEnvelope({
|
|
198
|
+
code: 'invalid_invocation',
|
|
199
|
+
message: rpcPreflight.message,
|
|
200
|
+
hint: deps.rpcNetworkFailureHint(rpcPreflight),
|
|
201
|
+
exampleCli: 'jinn doctor --human',
|
|
202
|
+
details: {
|
|
203
|
+
field: 'rpcUrl',
|
|
204
|
+
network: rpcPreflight.network,
|
|
205
|
+
expectedChainId: rpcPreflight.expectedChainId,
|
|
206
|
+
actualChainId: rpcPreflight.actualChainId ?? null,
|
|
207
|
+
rpcHost: rpcPreflight.rpcHost,
|
|
208
|
+
reason: rpcPreflight.reason,
|
|
209
|
+
passwordGenerated,
|
|
210
|
+
passwordFileCleanup: cleanup,
|
|
211
|
+
},
|
|
212
|
+
}, { writer: ctx.writer, exit: ctx.exit });
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
if (!noDaemon) {
|
|
216
|
+
const portPreflight = await deps.checkApiPortAvailable(config.apiPort);
|
|
217
|
+
if (!portPreflight.ok) {
|
|
218
|
+
const cleanup = cleanupGeneratedPasswordIfOrphaned();
|
|
219
|
+
emitEnvelope({
|
|
220
|
+
code: 'invalid_invocation',
|
|
221
|
+
message: deps.apiPortFailureMessage(portPreflight),
|
|
222
|
+
hint: 'Stop the other daemon or set JINN_API_PORT / apiPort to a free port before running quickstart.',
|
|
223
|
+
exampleCli: 'JINN_API_PORT=7332 jinn quickstart',
|
|
224
|
+
details: {
|
|
225
|
+
field: 'apiPort',
|
|
226
|
+
port: portPreflight.port,
|
|
227
|
+
reason: portPreflight.code ?? 'unavailable',
|
|
228
|
+
passwordGenerated,
|
|
229
|
+
passwordFileCleanup: cleanup,
|
|
230
|
+
},
|
|
231
|
+
}, { writer: ctx.writer, exit: ctx.exit });
|
|
232
|
+
return;
|
|
191
233
|
}
|
|
192
|
-
|
|
193
|
-
|
|
234
|
+
}
|
|
235
|
+
// ── Doctor preflight ──
|
|
236
|
+
// Run doctor before touching any wallet state so blocking problems (missing
|
|
237
|
+
// Claude binary, unreachable RPC, broken deployment) surface as the first
|
|
238
|
+
// error the operator sees — not an opaque bootstrap failure eight steps in.
|
|
239
|
+
// Doctor needs JINN_PASSWORD set to a non-empty value to skip its own
|
|
240
|
+
// password preflight, but this is a transient in-process value only —
|
|
241
|
+
// we still don't write any password material to disk yet.
|
|
242
|
+
if (jsonProgress) {
|
|
243
|
+
emitProgress(ctx.writer, { type: 'progress', phase: 'preflight', step: 'doctor_checks', estimatedWaitMs: 5000 });
|
|
244
|
+
}
|
|
245
|
+
console.error('[quickstart] Running preflight checks...');
|
|
246
|
+
const doctorTransientPassword = ctx.env['JINN_PASSWORD']
|
|
247
|
+
?? (passwordFilePreexisted ? deps.passwordFileIO.read(passwordFilePath).trim() : 'preflight-only');
|
|
248
|
+
const doctorWriter = new StringWriter();
|
|
249
|
+
await deps.doctorRun({
|
|
250
|
+
argv: ['--json', ...(configPath ? ['--config', configPath] : [])],
|
|
251
|
+
stdoutIsTty: false,
|
|
252
|
+
writer: doctorWriter,
|
|
253
|
+
exit: () => { },
|
|
254
|
+
env: { ...ctx.env, JINN_PASSWORD: doctorTransientPassword },
|
|
255
|
+
});
|
|
256
|
+
let doctorPayload = null;
|
|
257
|
+
try {
|
|
258
|
+
doctorPayload = JSON.parse(doctorWriter.toString().trim());
|
|
259
|
+
}
|
|
260
|
+
catch { /* doctor output malformed — proceed and let bootstrap fail loudly */ }
|
|
261
|
+
if (doctorPayload && !doctorPayload.ok) {
|
|
262
|
+
const blocking = doctorPayload.checks.filter((c) => !c.ok);
|
|
263
|
+
// portfolio.v0 impl-state checks are advisory for a fresh operator who
|
|
264
|
+
// hasn't submitted an HL task yet — don't block quickstart on them.
|
|
265
|
+
const realBlockers = blocking.filter((c) => !c.name.startsWith('portfolio_') && !c.name.startsWith('hl_'));
|
|
266
|
+
if (realBlockers.length > 0) {
|
|
267
|
+
// No password file written yet; cleanup is trivially a no-op but we
|
|
268
|
+
// still report status so the envelope contract is uniform.
|
|
269
|
+
const cleanup = cleanupGeneratedPasswordIfOrphaned();
|
|
270
|
+
console.error('[quickstart] Preflight failed. Fix the following and re-run:');
|
|
271
|
+
for (const c of realBlockers) {
|
|
272
|
+
console.error(` - ${c.name}: ${c.detail}`);
|
|
273
|
+
if (c.remedy)
|
|
274
|
+
console.error(` remedy: ${c.remedy}`);
|
|
275
|
+
}
|
|
276
|
+
emitEnvelope({
|
|
277
|
+
code: 'invalid_invocation',
|
|
278
|
+
message: 'Doctor preflight reported blocking issues.',
|
|
279
|
+
hint: 'Run `jinn doctor --human` for full remedies, fix the blockers, and re-run `jinn quickstart`.',
|
|
280
|
+
exampleCli: 'jinn doctor --human',
|
|
281
|
+
details: {
|
|
282
|
+
field: 'doctor',
|
|
283
|
+
blockers: realBlockers.map((c) => ({ name: c.name, detail: c.detail, remedy: c.remedy ?? null })),
|
|
284
|
+
passwordGenerated,
|
|
285
|
+
passwordFileCleanup: cleanup,
|
|
286
|
+
},
|
|
287
|
+
}, { writer: ctx.writer, exit: ctx.exit });
|
|
288
|
+
return;
|
|
194
289
|
}
|
|
195
290
|
}
|
|
291
|
+
console.error('[quickstart] Preflight OK.');
|
|
292
|
+
// ── Resolve or generate password (post-preflight) ──
|
|
293
|
+
// Only now, after every non-secret preflight has passed, do we touch
|
|
294
|
+
// disk for password material. This is the W4 fix from the 2026-04-28
|
|
295
|
+
// operator-experience audit: never leave a plaintext password file
|
|
296
|
+
// behind when no usable wallet was created.
|
|
297
|
+
if (jsonProgress) {
|
|
298
|
+
emitProgress(ctx.writer, { type: 'progress', phase: 'password', step: 'resolving_password', estimatedWaitMs: 100 });
|
|
299
|
+
}
|
|
300
|
+
let password;
|
|
301
|
+
if (ctx.env['JINN_PASSWORD']) {
|
|
302
|
+
password = ctx.env['JINN_PASSWORD'];
|
|
303
|
+
console.error('[quickstart] Using password from JINN_PASSWORD environment variable.');
|
|
304
|
+
}
|
|
305
|
+
else if (passwordFilePreexisted) {
|
|
306
|
+
password = deps.passwordFileIO.read(passwordFilePath).trim();
|
|
307
|
+
console.error('[quickstart] Using existing auto-generated password.');
|
|
308
|
+
}
|
|
309
|
+
else {
|
|
310
|
+
password = deps.randomBytesFn(32).toString('hex');
|
|
311
|
+
deps.passwordFileIO.ensureDir(jinnDir);
|
|
312
|
+
deps.passwordFileIO.write(passwordFilePath, password + '\n');
|
|
313
|
+
passwordGenerated = true;
|
|
314
|
+
console.error('[quickstart] Generated keystore password.');
|
|
315
|
+
}
|
|
316
|
+
const subEnv = { ...ctx.env, JINN_PASSWORD: password };
|
|
317
|
+
// ── Step 2: Init (idempotent) ──
|
|
318
|
+
// From here on, any failure path between password generation and a
|
|
319
|
+
// successful init must call cleanupGeneratedPasswordIfOrphaned() so a
|
|
320
|
+
// failed init never strands a plaintext secret with no matching keystore.
|
|
321
|
+
if (jsonProgress) {
|
|
322
|
+
emitProgress(ctx.writer, { type: 'progress', phase: 'init', step: 'creating_wallet', estimatedWaitMs: 2000 });
|
|
323
|
+
}
|
|
324
|
+
console.error('[quickstart] Initializing wallet...');
|
|
325
|
+
const initWriter = new StringWriter();
|
|
326
|
+
let initExitCode = null;
|
|
327
|
+
try {
|
|
328
|
+
await deps.initRun({
|
|
329
|
+
argv: ['--json'],
|
|
330
|
+
stdoutIsTty: false,
|
|
331
|
+
writer: initWriter,
|
|
332
|
+
exit: (code) => { initExitCode = code; },
|
|
333
|
+
env: subEnv,
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
catch (err) {
|
|
337
|
+
// initRun threw — keystore may or may not exist. Clean up only if it doesn't.
|
|
338
|
+
const cleanup = cleanupGeneratedPasswordIfOrphaned();
|
|
339
|
+
emitEnvelope({
|
|
340
|
+
code: 'fatal',
|
|
341
|
+
message: `init threw: ${err instanceof Error ? err.message : String(err)}`,
|
|
342
|
+
exampleCli: 'jinn quickstart',
|
|
343
|
+
details: { field: 'init', passwordGenerated, passwordFileCleanup: cleanup },
|
|
344
|
+
}, { writer: ctx.writer, exit: ctx.exit });
|
|
345
|
+
return;
|
|
346
|
+
}
|
|
347
|
+
if (initExitCode !== null && initExitCode !== 0) {
|
|
348
|
+
console.error('[quickstart] Init failed.');
|
|
349
|
+
const cleanup = cleanupGeneratedPasswordIfOrphaned();
|
|
350
|
+
ctx.writer.write(initWriter.toString());
|
|
351
|
+
// Emit a follow-up envelope with passwordGenerated/cleanup so callers
|
|
352
|
+
// can correlate. This is appended after init's own envelope intentionally.
|
|
353
|
+
ctx.writer.write(JSON.stringify({
|
|
354
|
+
schemaVersion: 1,
|
|
355
|
+
generatedAt: new Date().toISOString(),
|
|
356
|
+
verb: 'quickstart',
|
|
357
|
+
status: 'init_failed',
|
|
358
|
+
passwordGenerated,
|
|
359
|
+
passwordFileCleanup: cleanup,
|
|
360
|
+
}) + '\n');
|
|
361
|
+
ctx.exit(initExitCode);
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
364
|
+
// Parse master address from init output
|
|
365
|
+
let masterAddress = '';
|
|
366
|
+
try {
|
|
367
|
+
const initResult = JSON.parse(initWriter.toString().trim());
|
|
368
|
+
masterAddress = initResult.master ?? '';
|
|
369
|
+
}
|
|
196
370
|
catch { /* non-fatal */ }
|
|
197
|
-
console.error(
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
371
|
+
console.error(`[quickstart] Wallet ready. Master: ${masterAddress || '(see init output)'}`);
|
|
372
|
+
// ── Step 3: Bootstrap (with retry for funding gates) ──
|
|
373
|
+
const MAX_BOOTSTRAP_ATTEMPTS = 3;
|
|
374
|
+
let bootstrapSuccess = false;
|
|
375
|
+
for (let attempt = 1; attempt <= MAX_BOOTSTRAP_ATTEMPTS; attempt++) {
|
|
376
|
+
if (jsonProgress) {
|
|
377
|
+
emitProgress(ctx.writer, {
|
|
378
|
+
type: 'progress',
|
|
379
|
+
phase: 'bootstrap',
|
|
380
|
+
step: 'advance_state_machine',
|
|
381
|
+
attempt,
|
|
382
|
+
estimatedWaitMs: 60_000,
|
|
383
|
+
});
|
|
384
|
+
}
|
|
385
|
+
console.error(`[quickstart] Running bootstrap (attempt ${attempt}/${MAX_BOOTSTRAP_ATTEMPTS})...`);
|
|
386
|
+
const bsWriter = new StringWriter();
|
|
387
|
+
let bsExitCode = null;
|
|
388
|
+
await deps.bootstrapRun({
|
|
209
389
|
argv: bootstrapArgv,
|
|
210
390
|
stdoutIsTty: false,
|
|
211
|
-
writer:
|
|
212
|
-
exit: (code) => {
|
|
213
|
-
env:
|
|
391
|
+
writer: bsWriter,
|
|
392
|
+
exit: (code) => { bsExitCode = code; },
|
|
393
|
+
env: subEnv,
|
|
214
394
|
});
|
|
215
|
-
if (
|
|
216
|
-
funded = true;
|
|
395
|
+
if (bsExitCode === null || bsExitCode === 0) {
|
|
217
396
|
bootstrapSuccess = true;
|
|
218
|
-
console.error('[quickstart]
|
|
397
|
+
console.error('[quickstart] Bootstrap complete.');
|
|
219
398
|
break;
|
|
220
399
|
}
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
400
|
+
// Exit code 10 = funding_required — the faucet integration in bootstrap.ts
|
|
401
|
+
// will have already attempted auto-funding. If we're here, manual funding is needed.
|
|
402
|
+
if (bsExitCode === 10) {
|
|
403
|
+
const bsOutput = bsWriter.toString().trim();
|
|
404
|
+
console.error('[quickstart] Funding required. Waiting for manual funding...');
|
|
405
|
+
let fundingAddress;
|
|
406
|
+
try {
|
|
407
|
+
const envelope = JSON.parse(bsOutput);
|
|
408
|
+
if (envelope.details?.address) {
|
|
409
|
+
fundingAddress = envelope.details.address;
|
|
410
|
+
console.error(` Address: ${fundingAddress}`);
|
|
411
|
+
}
|
|
412
|
+
if (envelope.hint) {
|
|
413
|
+
console.error(` ${envelope.hint}`);
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
catch { /* non-fatal */ }
|
|
417
|
+
if (jsonProgress) {
|
|
418
|
+
emitProgress(ctx.writer, {
|
|
419
|
+
type: 'progress',
|
|
420
|
+
phase: 'bootstrap',
|
|
421
|
+
step: 'awaiting_funding',
|
|
422
|
+
attempt,
|
|
423
|
+
blocking: true,
|
|
424
|
+
nextAction: 'Fund the address shown in addresses.fundingAddress, then wait for automatic retry.',
|
|
425
|
+
...(fundingAddress ? { addresses: { fundingAddress } } : {}),
|
|
426
|
+
estimatedWaitMs: 1_800_000, // up to 30 min
|
|
427
|
+
});
|
|
428
|
+
}
|
|
429
|
+
console.error(' Faucet: https://portal.cdp.coinbase.com/products/faucet');
|
|
430
|
+
console.error(' Polling every 15s for funding...');
|
|
431
|
+
// Poll until funded or timeout (30 min)
|
|
432
|
+
const pollInterval = 15_000;
|
|
433
|
+
const maxPolls = 120;
|
|
434
|
+
let funded = false;
|
|
435
|
+
for (let i = 0; i < maxPolls; i++) {
|
|
436
|
+
await new Promise(r => setTimeout(r, pollInterval));
|
|
437
|
+
// Re-attempt bootstrap to check if funding arrived
|
|
438
|
+
const checkWriter = new StringWriter();
|
|
439
|
+
let checkExit = null;
|
|
440
|
+
await deps.bootstrapRun({
|
|
441
|
+
argv: bootstrapArgv,
|
|
442
|
+
stdoutIsTty: false,
|
|
443
|
+
writer: checkWriter,
|
|
444
|
+
exit: (code) => { checkExit = code; },
|
|
445
|
+
env: { ...subEnv, JINN_DISABLE_TESTNET_FAUCET: '1' },
|
|
446
|
+
});
|
|
447
|
+
if (checkExit === null || checkExit === 0) {
|
|
448
|
+
funded = true;
|
|
449
|
+
bootstrapSuccess = true;
|
|
450
|
+
console.error('[quickstart] Funding received. Bootstrap complete.');
|
|
451
|
+
break;
|
|
452
|
+
}
|
|
453
|
+
if (checkExit !== 10) {
|
|
454
|
+
// Different error — relay and exit
|
|
455
|
+
console.error('[quickstart] Bootstrap failed with unexpected error.');
|
|
456
|
+
ctx.writer.write(checkWriter.toString());
|
|
457
|
+
ctx.exit(checkExit ?? 50);
|
|
458
|
+
return;
|
|
459
|
+
}
|
|
460
|
+
if ((i + 1) % 4 === 0) {
|
|
461
|
+
console.error(` Still waiting... (${Math.round((i + 1) * pollInterval / 60000)} min elapsed)`);
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
if (funded)
|
|
465
|
+
break;
|
|
466
|
+
console.error('[quickstart] Timeout waiting for funding (30 min). Run `jinn quickstart` again after funding.');
|
|
467
|
+
ctx.exit(10);
|
|
226
468
|
return;
|
|
227
469
|
}
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
470
|
+
// Other exit codes — fatal
|
|
471
|
+
console.error('[quickstart] Bootstrap failed.');
|
|
472
|
+
ctx.writer.write(bsWriter.toString());
|
|
473
|
+
ctx.exit(bsExitCode);
|
|
474
|
+
return;
|
|
231
475
|
}
|
|
232
|
-
if (
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
476
|
+
if (!bootstrapSuccess) {
|
|
477
|
+
console.error('[quickstart] Bootstrap did not complete after retries.');
|
|
478
|
+
ctx.exit(50);
|
|
479
|
+
return;
|
|
480
|
+
}
|
|
481
|
+
// ── Step 4: Print summary ──
|
|
482
|
+
const apiPort = String(config.apiPort);
|
|
483
|
+
const keystoreFile = keystoreFilePath;
|
|
484
|
+
console.error('');
|
|
485
|
+
if (passwordGenerated) {
|
|
486
|
+
const bar = '━'.repeat(64);
|
|
487
|
+
console.error(bar);
|
|
488
|
+
console.error('Your Jinn wallet has been created.');
|
|
489
|
+
console.error('');
|
|
490
|
+
console.error(` Master address: ${masterAddress || '(run `jinn version` to read)'}`);
|
|
491
|
+
console.error(` Keystore: ${keystoreFile}`);
|
|
492
|
+
console.error(` Password: ${passwordFilePath}`);
|
|
493
|
+
console.error(` Dashboard: http://127.0.0.1:${apiPort}`);
|
|
494
|
+
console.error('');
|
|
495
|
+
console.error('Back up your mnemonic NOW to somewhere off this machine:');
|
|
496
|
+
console.error(' jinn keys backup --output /path/to/secure/location.txt');
|
|
497
|
+
console.error('');
|
|
498
|
+
console.error('TESTER TIER — treat this wallet as hot.');
|
|
499
|
+
console.error(' The password file sits next to the encrypted keystore, so anyone');
|
|
500
|
+
console.error(' with shell access to this machine can decrypt it. Keep funds to');
|
|
501
|
+
console.error(' the gas + rewards minimum; use a hardware wallet for anything else.');
|
|
502
|
+
console.error('');
|
|
503
|
+
console.error('To rotate the password: JINN_NEW_PASSWORD=<new> jinn keys change-password');
|
|
504
|
+
console.error(bar);
|
|
505
|
+
}
|
|
506
|
+
else {
|
|
507
|
+
console.error('Quickstart complete!');
|
|
508
|
+
console.error(` Dashboard: http://127.0.0.1:${apiPort}`);
|
|
509
|
+
}
|
|
510
|
+
console.error('');
|
|
511
|
+
if (noDaemon) {
|
|
512
|
+
ctx.writer.write(JSON.stringify({
|
|
513
|
+
schemaVersion: 1,
|
|
514
|
+
generatedAt: new Date().toISOString(),
|
|
515
|
+
verb: 'quickstart',
|
|
516
|
+
status: 'ready',
|
|
517
|
+
masterAddress,
|
|
518
|
+
dashboardUrl: `http://127.0.0.1:${apiPort}`,
|
|
519
|
+
passwordFile: passwordGenerated ? passwordFilePath : undefined,
|
|
520
|
+
passwordGenerated,
|
|
521
|
+
}) + '\n');
|
|
522
|
+
return;
|
|
523
|
+
}
|
|
524
|
+
// ── Step 5: Start daemon (foreground) ──
|
|
525
|
+
if (jsonProgress) {
|
|
526
|
+
emitProgress(ctx.writer, { type: 'progress', phase: 'daemon', step: 'starting', estimatedWaitMs: 5000 });
|
|
527
|
+
}
|
|
528
|
+
console.error('Starting daemon...');
|
|
529
|
+
// Route console to stderr for daemon (same as run command does)
|
|
530
|
+
// environment plumbing for the spawned daemon — out of DI scope
|
|
531
|
+
const stderrWriter = (line) => {
|
|
532
|
+
process.stderr.write(line.endsWith('\n') ? line : `${line}\n`);
|
|
533
|
+
};
|
|
534
|
+
console.log = (...args) => stderrWriter(args.map(String).join(' '));
|
|
535
|
+
console.info = (...args) => stderrWriter(args.map(String).join(' '));
|
|
536
|
+
console.warn = (...args) => stderrWriter(args.map(String).join(' '));
|
|
537
|
+
console.error = (...args) => stderrWriter(args.map(String).join(' '));
|
|
538
|
+
// Set password in process env so main.ts can read it
|
|
539
|
+
// environment plumbing for the spawned daemon — out of DI scope
|
|
540
|
+
process.env['JINN_PASSWORD'] = password;
|
|
541
|
+
const payload = await deps.mainFn();
|
|
542
|
+
ctx.writer.write(JSON.stringify(payload) + '\n');
|
|
543
|
+
},
|
|
296
544
|
};
|
|
297
|
-
console.log = (...args) => stderrWriter(args.map(String).join(' '));
|
|
298
|
-
console.info = (...args) => stderrWriter(args.map(String).join(' '));
|
|
299
|
-
console.warn = (...args) => stderrWriter(args.map(String).join(' '));
|
|
300
|
-
console.error = (...args) => stderrWriter(args.map(String).join(' '));
|
|
301
|
-
// Set password in process env so main.ts can read it
|
|
302
|
-
process.env['JINN_PASSWORD'] = password;
|
|
303
|
-
const { main } = await import('../../main.js');
|
|
304
|
-
const payload = await main();
|
|
305
|
-
ctx.writer.write(JSON.stringify(payload) + '\n');
|
|
306
545
|
}
|
|
307
|
-
const command =
|
|
308
|
-
name: 'quickstart',
|
|
309
|
-
summary: 'Zero-to-running in one command: init, fund, bootstrap, run',
|
|
310
|
-
helpText: `Usage: jinn quickstart [--no-daemon] [--config <path>]
|
|
311
|
-
|
|
312
|
-
One command to go from nothing to a running Jinn daemon:
|
|
313
|
-
1. Generate a keystore password (or use JINN_PASSWORD)
|
|
314
|
-
2. Create the master wallet
|
|
315
|
-
3. Fund via faucet (automatic on testnet if CDP SDK available)
|
|
316
|
-
4. Bootstrap the fleet state machine
|
|
317
|
-
5. Start the daemon
|
|
318
|
-
|
|
319
|
-
Idempotent. Re-running after partial completion resumes from
|
|
320
|
-
wherever it left off.
|
|
321
|
-
|
|
322
|
-
Examples:
|
|
323
|
-
jinn quickstart
|
|
324
|
-
jinn quickstart --no-daemon
|
|
325
|
-
JINN_PASSWORD=mysecret jinn quickstart
|
|
326
|
-
`,
|
|
327
|
-
run,
|
|
328
|
-
};
|
|
546
|
+
const command = createQuickstartCommand();
|
|
329
547
|
export default command;
|
|
330
548
|
//# sourceMappingURL=quickstart.js.map
|