@jinn-network/client 0.1.3-canary.2d6b2676 → 0.1.3-canary.8e61ba74
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/dist/adapters/adapter.d.ts +15 -4
- package/dist/adapters/local/adapter.d.ts +9 -8
- package/dist/adapters/local/adapter.js +47 -74
- package/dist/adapters/local/adapter.js.map +1 -1
- package/dist/adapters/mech/adapter.d.ts +29 -13
- package/dist/adapters/mech/adapter.js +316 -311
- package/dist/adapters/mech/adapter.js.map +1 -1
- package/dist/adapters/mech/contracts.d.ts +62 -16
- package/dist/adapters/mech/contracts.js +226 -92
- package/dist/adapters/mech/contracts.js.map +1 -1
- package/dist/adapters/mech/safe-revert.js +0 -6
- package/dist/adapters/mech/safe-revert.js.map +1 -1
- package/dist/adapters/mech/types.d.ts +237 -84
- package/dist/adapters/mech/types.js +125 -50
- package/dist/adapters/mech/types.js.map +1 -1
- package/dist/agent/agent-ws.d.ts +1 -0
- package/dist/agent/agent-ws.js +13 -1
- package/dist/agent/agent-ws.js.map +1 -1
- package/dist/agent/operator-claude.js +4 -0
- package/dist/agent/operator-claude.js.map +1 -1
- package/dist/api/gather-status.d.ts +0 -1
- package/dist/api/gather-status.js +0 -1
- package/dist/api/gather-status.js.map +1 -1
- package/dist/api/setup-endpoints.d.ts +20 -0
- package/dist/api/setup-endpoints.js +110 -3
- package/dist/api/setup-endpoints.js.map +1 -1
- package/dist/build-info.json +4 -4
- package/dist/build-meta.json +1 -1
- package/dist/cli/commands/auth.js +6 -3
- package/dist/cli/commands/auth.js.map +1 -1
- package/dist/cli/commands/bootstrap.js +0 -1
- package/dist/cli/commands/bootstrap.js.map +1 -1
- package/dist/cli/commands/create.js +3 -3
- package/dist/cli/commands/doctor.js +4 -12
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/fleet-scale.js +0 -1
- package/dist/cli/commands/fleet-scale.js.map +1 -1
- package/dist/cli/commands/fund-requirements.js +0 -1
- package/dist/cli/commands/fund-requirements.js.map +1 -1
- package/dist/cli/commands/migrate-agent-id.js +0 -1
- package/dist/cli/commands/migrate-agent-id.js.map +1 -1
- package/dist/cli/commands/solver-nets.js +1 -1
- package/dist/cli/commands/solver-plugins.js +3 -1
- package/dist/cli/commands/solver-plugins.js.map +1 -1
- package/dist/cli/commands/tasks.js +20 -11
- package/dist/cli/commands/tasks.js.map +1 -1
- package/dist/cli/commands/version.js +0 -1
- package/dist/cli/commands/version.js.map +1 -1
- package/dist/cli/deployment-digest.js +0 -5
- package/dist/cli/deployment-digest.js.map +1 -1
- package/dist/cli/execution-context.js +0 -1
- package/dist/cli/execution-context.js.map +1 -1
- package/dist/cli/introspection-context.js +0 -1
- package/dist/cli/introspection-context.js.map +1 -1
- package/dist/config.d.ts +410 -22
- package/dist/config.js +41 -30
- package/dist/config.js.map +1 -1
- package/dist/daemon/creator.d.ts +3 -3
- package/dist/daemon/creator.js +3 -3
- package/dist/daemon/creator.js.map +1 -1
- package/dist/daemon/daemon.d.ts +3 -6
- package/dist/daemon/daemon.js +30 -9
- package/dist/daemon/daemon.js.map +1 -1
- package/dist/daemon/jinn-claim-loop-canonical.d.ts +11 -11
- package/dist/daemon/jinn-claim-loop-canonical.js +17 -17
- package/dist/daemon/jinn-claim-loop-canonical.js.map +1 -1
- package/dist/daemon/jinn-claim-loop-mock.d.ts +4 -4
- package/dist/daemon/jinn-claim-loop-mock.js +7 -7
- package/dist/daemon/jinn-claim-loop-mock.js.map +1 -1
- package/dist/daemon/jinn-claim-loop.d.ts +4 -4
- package/dist/daemon/jinn-claim-loop.js +3 -3
- package/dist/dashboard/assets/{index-Bxlk5qpa.js → index-CaUOdCs6.js} +6 -6
- package/dist/dashboard/index.html +1 -1
- package/dist/earning/bootstrap.d.ts +0 -1
- package/dist/earning/bootstrap.js +0 -1
- package/dist/earning/bootstrap.js.map +1 -1
- package/dist/earning/contracts.d.ts +18 -20
- package/dist/earning/contracts.js +18 -29
- package/dist/earning/contracts.js.map +1 -1
- package/dist/earning/funding-plan.d.ts +0 -1
- package/dist/earning/funding-plan.js +0 -1
- package/dist/earning/funding-plan.js.map +1 -1
- package/dist/earning/migrate-agent-id.d.ts +0 -1
- package/dist/earning/migrate-agent-id.js +0 -1
- package/dist/earning/migrate-agent-id.js.map +1 -1
- package/dist/erc8004/reputation.d.ts +2 -2
- package/dist/erc8004/reputation.js +2 -2
- package/dist/events/types.d.ts +2 -2
- package/dist/harnesses/engine/delivery.d.ts +10 -6
- package/dist/harnesses/engine/delivery.js +10 -6
- package/dist/harnesses/engine/delivery.js.map +1 -1
- package/dist/harnesses/engine/engine.d.ts +16 -29
- package/dist/harnesses/engine/engine.js +67 -106
- package/dist/harnesses/engine/engine.js.map +1 -1
- package/dist/harnesses/engine/persistence.d.ts +5 -1
- package/dist/harnesses/engine/persistence.js +10 -2
- package/dist/harnesses/engine/persistence.js.map +1 -1
- package/dist/harnesses/external-impls/loader.d.ts +1 -1
- package/dist/harnesses/impls/claude-code-learner/types.d.ts +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction/index.d.ts +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction/index.js +6 -6
- package/dist/harnesses/impls/claude-mcp-prediction/types.d.ts +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction/types.js +1 -1
- package/dist/harnesses/impls/index.js +5 -5
- package/dist/harnesses/impls/portfolio-v0-evaluator/index.js +1 -1
- package/dist/harnesses/impls/portfolio-v0-evaluator/index.js.map +1 -1
- package/dist/harnesses/impls/prediction-v0-baseline/index.d.ts +4 -4
- package/dist/harnesses/impls/prediction-v0-baseline/index.js +10 -10
- package/dist/harnesses/impls/prediction-v0-evaluator/canonical-metrics.d.ts +3 -3
- package/dist/harnesses/impls/prediction-v0-evaluator/checks/availability.d.ts +1 -1
- package/dist/harnesses/impls/prediction-v0-evaluator/index.d.ts +4 -4
- package/dist/harnesses/impls/prediction-v0-evaluator/index.js +11 -11
- package/dist/harnesses/impls/prediction-v1-baseline/index.d.ts +31 -0
- package/dist/harnesses/impls/prediction-v1-baseline/index.js +79 -0
- package/dist/harnesses/impls/prediction-v1-baseline/index.js.map +1 -0
- package/dist/harnesses/impls/prediction-v1-evaluator/index.d.ts +32 -0
- package/dist/harnesses/impls/prediction-v1-evaluator/index.js +198 -0
- package/dist/harnesses/impls/prediction-v1-evaluator/index.js.map +1 -0
- package/dist/harnesses/manifest/types.d.ts +1 -1
- package/dist/harnesses/manifest/types.js +1 -1
- package/dist/harnesses/types.d.ts +2 -1
- package/dist/harnesses/types.js.map +1 -1
- package/dist/main.js +2 -26
- package/dist/main.js.map +1 -1
- package/dist/mcp/operator-server.js +1 -1
- package/dist/mcp/operator-server.js.map +1 -1
- package/dist/mcp/server.js +2 -2
- package/dist/plugins/manifest.d.ts +1 -1
- package/dist/plugins/manifest.js +1 -1
- package/dist/plugins/manifest.js.map +1 -1
- package/dist/plugins/registry.js +1 -1
- package/dist/plugins/registry.js.map +1 -1
- package/dist/plugins/resolvers.js +2 -1
- package/dist/plugins/resolvers.js.map +1 -1
- package/dist/plugins/types.d.ts +4 -8
- package/dist/plugins/validator.js +5 -7
- package/dist/plugins/validator.js.map +1 -1
- package/dist/preflight/claude-auth.d.ts +3 -1
- package/dist/preflight/claude-auth.js +5 -5
- package/dist/preflight/claude-auth.js.map +1 -1
- package/dist/setup/claude-code-install.d.ts +19 -0
- package/dist/setup/claude-code-install.js +51 -0
- package/dist/setup/claude-code-install.js.map +1 -0
- package/dist/solver-nets/contracts.d.ts +2 -0
- package/dist/solver-nets/contracts.js +2 -0
- package/dist/solver-nets/contracts.js.map +1 -0
- package/dist/solver-nets/registry.d.ts +2 -0
- package/dist/solver-nets/registry.js +13 -5
- package/dist/solver-nets/registry.js.map +1 -1
- package/dist/solver-types/constants.d.ts +1 -1
- package/dist/solver-types/constants.js +1 -1
- package/dist/solver-types/index.d.ts +5 -5
- package/dist/solver-types/index.js +5 -5
- package/dist/solver-types/prediction-apy-v0-auto.js +12 -0
- package/dist/solver-types/prediction-apy-v0-auto.js.map +1 -1
- package/dist/solver-types/prediction-v0-auto.d.ts +4 -4
- package/dist/solver-types/prediction-v0-auto.js +22 -10
- package/dist/solver-types/prediction-v0-auto.js.map +1 -1
- package/dist/solver-types/prediction-v0-template.d.ts +10 -10
- package/dist/solver-types/prediction-v0-template.js +16 -16
- package/dist/solver-types/prediction-v0-template.js.map +1 -1
- package/dist/solver-types/prediction-v0.d.ts +2 -2
- package/dist/solver-types/prediction-v0.js +11 -11
- package/dist/solver-types/prediction-v1-auto.d.ts +22 -0
- package/dist/solver-types/prediction-v1-auto.js +211 -0
- package/dist/solver-types/prediction-v1-auto.js.map +1 -0
- package/dist/solver-types/prediction-v1.d.ts +3 -0
- package/dist/solver-types/prediction-v1.js +29 -0
- package/dist/solver-types/prediction-v1.js.map +1 -0
- package/dist/solver-types/solver-type.d.ts +5 -4
- package/dist/store/store.d.ts +4 -0
- package/dist/store/store.js +28 -4
- package/dist/store/store.js.map +1 -1
- package/dist/tasks/posting-service.d.ts +5 -2
- package/dist/tasks/posting-service.js +12 -6
- package/dist/tasks/posting-service.js.map +1 -1
- package/dist/tasks/sources.d.ts +2 -2
- package/dist/tasks/sources.js +10 -7
- package/dist/tasks/sources.js.map +1 -1
- package/dist/templates/harnesses/alternative-harness/package.json.tmpl +1 -1
- package/dist/templates/harnesses/alternative-harness/src/coordinator.ts.tmpl +1 -1
- package/dist/templates/harnesses/alternative-harness/src/index.ts.tmpl +1 -1
- package/dist/templates/harnesses/alternative-harness/src/mock-harness.ts.tmpl +1 -1
- package/dist/templates/harnesses/alternative-harness/src/phases/debrief.ts.tmpl +1 -1
- package/dist/templates/harnesses/alternative-harness/src/phases/execute.ts.tmpl +1 -1
- package/dist/templates/harnesses/alternative-harness/src/phases/improve.ts.tmpl +1 -1
- package/dist/templates/harnesses/alternative-harness/src/phases/memory.ts.tmpl +1 -1
- package/dist/templates/harnesses/alternative-harness/src/phases/orient.ts.tmpl +1 -1
- package/dist/templates/harnesses/alternative-harness/src/phases/plan.ts.tmpl +1 -1
- package/dist/templates/harnesses/alternative-harness/src/phases/strategize.ts.tmpl +1 -1
- package/dist/templates/harnesses/alternative-harness/test/coordinator.test.ts.tmpl +1 -1
- package/dist/templates/harnesses/alternative-harness/test/unit.test.ts.tmpl +1 -1
- package/dist/templates/harnesses/evaluator/package.json.tmpl +1 -1
- package/dist/templates/harnesses/evaluator/src/index.ts.tmpl +1 -1
- package/dist/templates/harnesses/evaluator/test/unit.test.ts.tmpl +1 -1
- package/dist/templates/harnesses/forecaster/package.json.tmpl +1 -1
- package/dist/templates/harnesses/forecaster/src/index.ts.tmpl +1 -1
- package/dist/templates/harnesses/forecaster/test/unit.test.ts.tmpl +1 -1
- package/dist/trajectory/schema.d.ts +10 -10
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.js +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/payloads/index.d.ts +1 -0
- package/dist/types/payloads/index.js +6 -0
- package/dist/types/payloads/index.js.map +1 -1
- package/dist/types/payloads/prediction-v1.d.ts +2 -0
- package/dist/types/payloads/prediction-v1.js +2 -0
- package/dist/types/payloads/prediction-v1.js.map +1 -0
- package/dist/types/prediction-v1.d.ts +2 -0
- package/dist/types/prediction-v1.js +2 -0
- package/dist/types/prediction-v1.js.map +1 -0
- package/dist/types/prediction.d.ts +559 -19
- package/dist/types/prediction.js +12 -9
- package/dist/types/prediction.js.map +1 -1
- package/dist/types/task-document.d.ts +389 -0
- package/dist/types/task-document.js +11 -0
- package/dist/types/task-document.js.map +1 -1
- package/dist/types/task.d.ts +285 -1
- package/dist/types/task.js +6 -1
- package/dist/types/task.js.map +1 -1
- package/dist/vendor/@jinn-network/sdk/README.md +61 -0
- package/dist/vendor/@jinn-network/sdk/dist/capabilities.d.ts +52 -0
- package/dist/vendor/@jinn-network/sdk/dist/capabilities.js +1 -0
- package/dist/vendor/@jinn-network/sdk/dist/contracts.d.ts +105 -0
- package/dist/vendor/@jinn-network/sdk/dist/contracts.js +147 -0
- package/dist/vendor/@jinn-network/sdk/dist/harness.d.ts +69 -0
- package/dist/vendor/@jinn-network/sdk/dist/harness.js +1 -0
- package/dist/vendor/@jinn-network/sdk/dist/index.d.ts +2 -0
- package/dist/vendor/@jinn-network/sdk/dist/index.js +5 -0
- package/dist/vendor/@jinn-network/sdk/dist/manifest.d.ts +69 -0
- package/dist/vendor/@jinn-network/sdk/dist/manifest.js +3 -0
- package/dist/vendor/@jinn-network/sdk/dist/payloads/prediction-v1.d.ts +223 -0
- package/dist/vendor/@jinn-network/sdk/dist/payloads/prediction-v1.js +64 -0
- package/dist/vendor/@jinn-network/sdk/dist/plugins.d.ts +36 -0
- package/dist/vendor/@jinn-network/sdk/dist/plugins.js +54 -0
- package/dist/vendor/@jinn-network/sdk/dist/prediction-v1.d.ts +870 -0
- package/dist/vendor/@jinn-network/sdk/dist/prediction-v1.js +80 -0
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/index.d.ts +2 -0
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/index.js +1 -0
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/prediction-v1.d.ts +6 -0
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/prediction-v1.js +3 -0
- package/dist/vendor/@jinn-network/sdk/dist/types.d.ts +116 -0
- package/dist/vendor/@jinn-network/sdk/dist/types.js +21 -0
- package/dist/vendor/@jinn-network/sdk/package.json +34 -0
- package/dist/venues/polymarket/client.d.ts +77 -0
- package/dist/venues/polymarket/client.js +309 -0
- package/dist/venues/polymarket/client.js.map +1 -0
- package/dist/withdraw/run-withdraw-plan.js +0 -2
- package/dist/withdraw/run-withdraw-plan.js.map +1 -1
- package/package.json +8 -6
- package/plugins/jinn-prediction-plugin/.claude-plugin/plugin.json +13 -86
- package/plugins/jinn-prediction-plugin/.mcp.json +8 -0
- package/plugins/jinn-prediction-plugin/GEMINI.md +3 -0
- package/plugins/jinn-prediction-plugin/gemini-extension.json +13 -0
- package/plugins/jinn-prediction-plugin/jinn.plugin.json +23 -0
- package/plugins/jinn-prediction-plugin/schemas/prediction-v1-solution.schema.json +34 -0
- package/plugins/jinn-prediction-plugin/schemas/prediction-v1-task.schema.json +118 -0
- package/plugins/jinn-prediction-plugin/schemas/prediction-v1-verdict.schema.json +84 -0
- package/templates/harnesses/alternative-harness/package.json.tmpl +1 -1
- package/templates/harnesses/alternative-harness/src/coordinator.ts.tmpl +1 -1
- package/templates/harnesses/alternative-harness/src/index.ts.tmpl +1 -1
- package/templates/harnesses/alternative-harness/src/mock-harness.ts.tmpl +1 -1
- package/templates/harnesses/alternative-harness/src/phases/debrief.ts.tmpl +1 -1
- package/templates/harnesses/alternative-harness/src/phases/execute.ts.tmpl +1 -1
- package/templates/harnesses/alternative-harness/src/phases/improve.ts.tmpl +1 -1
- package/templates/harnesses/alternative-harness/src/phases/memory.ts.tmpl +1 -1
- package/templates/harnesses/alternative-harness/src/phases/orient.ts.tmpl +1 -1
- package/templates/harnesses/alternative-harness/src/phases/plan.ts.tmpl +1 -1
- package/templates/harnesses/alternative-harness/src/phases/strategize.ts.tmpl +1 -1
- package/templates/harnesses/alternative-harness/test/coordinator.test.ts.tmpl +1 -1
- package/templates/harnesses/alternative-harness/test/unit.test.ts.tmpl +1 -1
- package/templates/harnesses/evaluator/package.json.tmpl +1 -1
- package/templates/harnesses/evaluator/src/index.ts.tmpl +1 -1
- package/templates/harnesses/evaluator/test/unit.test.ts.tmpl +1 -1
- package/templates/harnesses/forecaster/package.json.tmpl +1 -1
- package/templates/harnesses/forecaster/src/index.ts.tmpl +1 -1
- package/templates/harnesses/forecaster/test/unit.test.ts.tmpl +1 -1
- package/dist/adapters/claim-registry/abi.d.ts +0 -127
- package/dist/adapters/claim-registry/abi.js +0 -93
- package/dist/adapters/claim-registry/abi.js.map +0 -1
- package/dist/adapters/claim-registry/client.d.ts +0 -98
- package/dist/adapters/claim-registry/client.js +0 -225
- package/dist/adapters/claim-registry/client.js.map +0 -1
- package/dist/adapters/mech/claim-policy.d.ts +0 -40
- package/dist/adapters/mech/claim-policy.js +0 -104
- package/dist/adapters/mech/claim-policy.js.map +0 -1
- package/dist/harnesses/engine/claim.d.ts +0 -69
- package/dist/harnesses/engine/claim.js +0 -111
- package/dist/harnesses/engine/claim.js.map +0 -1
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import type { Address, PublicClient, WalletClient } from 'viem';
|
|
2
|
-
export interface RequestCandidate {
|
|
3
|
-
requestId: string;
|
|
4
|
-
requestDataHex: string;
|
|
5
|
-
priorityMech: string;
|
|
6
|
-
}
|
|
7
|
-
/**
|
|
8
|
-
* ClaimPolicy decides whether an operator should pick up a given request.
|
|
9
|
-
*
|
|
10
|
-
* Two-stage filtering:
|
|
11
|
-
* - shouldAccept(): sync pre-filter on event data (no RPC)
|
|
12
|
-
* - confirmClaim(): async check + claim attempt before runner starts work
|
|
13
|
-
*/
|
|
14
|
-
export interface ClaimPolicy {
|
|
15
|
-
shouldAccept(candidate: RequestCandidate): boolean;
|
|
16
|
-
confirmClaim(requestId: string): Promise<boolean>;
|
|
17
|
-
}
|
|
18
|
-
export declare class AcceptAllPolicy implements ClaimPolicy {
|
|
19
|
-
shouldAccept(_candidate: RequestCandidate): boolean;
|
|
20
|
-
confirmClaim(_requestId: string): Promise<boolean>;
|
|
21
|
-
}
|
|
22
|
-
export declare class PriorityWindowPolicy implements ClaimPolicy {
|
|
23
|
-
private readonly ourMechAddress;
|
|
24
|
-
private readonly publicClient;
|
|
25
|
-
private readonly marketplaceAddress;
|
|
26
|
-
constructor(ourMechAddress: Address, publicClient: PublicClient, marketplaceAddress: Address);
|
|
27
|
-
shouldAccept(candidate: RequestCandidate): boolean;
|
|
28
|
-
confirmClaim(requestId: string): Promise<boolean>;
|
|
29
|
-
}
|
|
30
|
-
export declare class OnChainClaimPolicy implements ClaimPolicy {
|
|
31
|
-
private readonly ourMechAddress;
|
|
32
|
-
private readonly publicClient;
|
|
33
|
-
private readonly walletClient;
|
|
34
|
-
private readonly safeAddress;
|
|
35
|
-
private readonly marketplaceAddress;
|
|
36
|
-
private readonly claimRegistryAddress;
|
|
37
|
-
constructor(ourMechAddress: Address, publicClient: PublicClient, walletClient: WalletClient, safeAddress: Address, marketplaceAddress: Address, claimRegistryAddress: Address);
|
|
38
|
-
shouldAccept(_candidate: RequestCandidate): boolean;
|
|
39
|
-
confirmClaim(requestId: string): Promise<boolean>;
|
|
40
|
-
}
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import { MECH_MARKETPLACE_ABI } from './types.js';
|
|
2
|
-
import { claimJob, getJobClaim } from './contracts.js';
|
|
3
|
-
// ── AcceptAllPolicy ──────────────────────────────────────────────────────────
|
|
4
|
-
export class AcceptAllPolicy {
|
|
5
|
-
shouldAccept(_candidate) {
|
|
6
|
-
return true;
|
|
7
|
-
}
|
|
8
|
-
async confirmClaim(_requestId) {
|
|
9
|
-
return true;
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
// ── PriorityWindowPolicy ─────────────────────────────────────────────────────
|
|
13
|
-
const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';
|
|
14
|
-
export class PriorityWindowPolicy {
|
|
15
|
-
ourMechAddress;
|
|
16
|
-
publicClient;
|
|
17
|
-
marketplaceAddress;
|
|
18
|
-
constructor(ourMechAddress, publicClient, marketplaceAddress) {
|
|
19
|
-
this.ourMechAddress = ourMechAddress;
|
|
20
|
-
this.publicClient = publicClient;
|
|
21
|
-
this.marketplaceAddress = marketplaceAddress;
|
|
22
|
-
}
|
|
23
|
-
shouldAccept(candidate) {
|
|
24
|
-
// Fast accept if we are the priority mech
|
|
25
|
-
if (candidate.priorityMech.toLowerCase() === this.ourMechAddress.toLowerCase()) {
|
|
26
|
-
return true;
|
|
27
|
-
}
|
|
28
|
-
// Let non-priority through — confirmClaim checks the window
|
|
29
|
-
return true;
|
|
30
|
-
}
|
|
31
|
-
async confirmClaim(requestId) {
|
|
32
|
-
const info = await this.publicClient.readContract({
|
|
33
|
-
address: this.marketplaceAddress,
|
|
34
|
-
abi: MECH_MARKETPLACE_ABI,
|
|
35
|
-
functionName: 'mapRequestIdInfos',
|
|
36
|
-
args: [requestId],
|
|
37
|
-
});
|
|
38
|
-
const [priorityMech, deliveryMech, , responseTimeout] = info;
|
|
39
|
-
// Already delivered — skip
|
|
40
|
-
if (deliveryMech !== ZERO_ADDRESS) {
|
|
41
|
-
return false;
|
|
42
|
-
}
|
|
43
|
-
// We are the priority mech — proceed
|
|
44
|
-
if (priorityMech.toLowerCase() === this.ourMechAddress.toLowerCase()) {
|
|
45
|
-
return true;
|
|
46
|
-
}
|
|
47
|
-
// Not our priority — only proceed if window expired
|
|
48
|
-
const block = await this.publicClient.getBlock();
|
|
49
|
-
return block.timestamp >= responseTimeout;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
// ── OnChainClaimPolicy ───────────────────────────────────────────────────────
|
|
53
|
-
export class OnChainClaimPolicy {
|
|
54
|
-
ourMechAddress;
|
|
55
|
-
publicClient;
|
|
56
|
-
walletClient;
|
|
57
|
-
safeAddress;
|
|
58
|
-
marketplaceAddress;
|
|
59
|
-
claimRegistryAddress;
|
|
60
|
-
constructor(ourMechAddress, publicClient, walletClient, safeAddress, marketplaceAddress, claimRegistryAddress) {
|
|
61
|
-
this.ourMechAddress = ourMechAddress;
|
|
62
|
-
this.publicClient = publicClient;
|
|
63
|
-
this.walletClient = walletClient;
|
|
64
|
-
this.safeAddress = safeAddress;
|
|
65
|
-
this.marketplaceAddress = marketplaceAddress;
|
|
66
|
-
this.claimRegistryAddress = claimRegistryAddress;
|
|
67
|
-
}
|
|
68
|
-
shouldAccept(_candidate) {
|
|
69
|
-
return true;
|
|
70
|
-
}
|
|
71
|
-
async confirmClaim(requestId) {
|
|
72
|
-
// 1. Check delivery status
|
|
73
|
-
const info = await this.publicClient.readContract({
|
|
74
|
-
address: this.marketplaceAddress,
|
|
75
|
-
abi: MECH_MARKETPLACE_ABI,
|
|
76
|
-
functionName: 'mapRequestIdInfos',
|
|
77
|
-
args: [requestId],
|
|
78
|
-
});
|
|
79
|
-
const [priorityMech, deliveryMech, , responseTimeout] = info;
|
|
80
|
-
if (deliveryMech !== ZERO_ADDRESS) {
|
|
81
|
-
return false; // Already delivered
|
|
82
|
-
}
|
|
83
|
-
// 2. Check priority window
|
|
84
|
-
const block = await this.publicClient.getBlock();
|
|
85
|
-
if (priorityMech.toLowerCase() !== this.ourMechAddress.toLowerCase()) {
|
|
86
|
-
if (block.timestamp < responseTimeout) {
|
|
87
|
-
return false; // Not our priority window yet
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
// 3. Check existing on-chain claim
|
|
91
|
-
const { claimer, expiresAt } = await getJobClaim(this.publicClient, this.claimRegistryAddress, requestId);
|
|
92
|
-
if (claimer !== ZERO_ADDRESS && expiresAt > 0n) {
|
|
93
|
-
// Active claim exists
|
|
94
|
-
if (claimer.toLowerCase() === this.safeAddress.toLowerCase()) {
|
|
95
|
-
return true; // We already claimed — idempotent
|
|
96
|
-
}
|
|
97
|
-
return false; // Someone else has an active claim
|
|
98
|
-
}
|
|
99
|
-
// 4. Claim on-chain via Safe tx
|
|
100
|
-
const txHash = await claimJob(this.publicClient, this.walletClient, this.safeAddress, this.claimRegistryAddress, requestId);
|
|
101
|
-
return txHash !== ''; // Empty string = claim failed (already claimed or ineligible)
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
//# sourceMappingURL=claim-policy.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"claim-policy.js","sourceRoot":"","sources":["../../../src/adapters/mech/claim-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Two-layer claim orchestration for the harness engine.
|
|
3
|
-
*
|
|
4
|
-
* §6.1, §9.1, §9.2 of spec/2026-04-17-portfolio-v0-design.md
|
|
5
|
-
*
|
|
6
|
-
* Layer 1: ClaimRegistry claim — Jinn's work-coordination contract.
|
|
7
|
-
* Layer 2: Marketplace priority claim — calls MechAdapter.claimRequest() to
|
|
8
|
-
* register the priority-mech exclusivity window (300 s responseTimeout).
|
|
9
|
-
*
|
|
10
|
-
* The ClaimRegistry claimTTL is owner-configured per-deployment and is not
|
|
11
|
-
* passed by the client.
|
|
12
|
-
*
|
|
13
|
-
* Recovery:
|
|
14
|
-
* On resume, ClaimRegistryClient.weAlreadyClaimed() is checked before any
|
|
15
|
-
* on-chain write. If we already hold the claim, the ClaimRegistry step is
|
|
16
|
-
* skipped entirely. The marketplace claim is re-attempted because it is
|
|
17
|
-
* stateless from the engine's perspective (MechAdapter is idempotent there).
|
|
18
|
-
*
|
|
19
|
-
* Failure modes:
|
|
20
|
-
* - ClaimRegistry claim fails → throw, no marketplace call, engine marks FAILED.
|
|
21
|
-
* - Marketplace claim fails → release ClaimRegistry claim, throw.
|
|
22
|
-
*/
|
|
23
|
-
import type { ClaimRegistryClient } from '../../adapters/claim-registry/client.js';
|
|
24
|
-
/**
|
|
25
|
-
* Minimal interface for the marketplace adapter's claim path.
|
|
26
|
-
* The full MechAdapter satisfies this; tests can inject a stub.
|
|
27
|
-
*/
|
|
28
|
-
export interface MarketplaceClaimer {
|
|
29
|
-
claimRequest(requestId: string): Promise<void>;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Parameters describing a single task's timing window.
|
|
33
|
-
* Extracted from PersistedTaskRun for testability (no DB dependency).
|
|
34
|
-
*/
|
|
35
|
-
export interface ClaimWindow {
|
|
36
|
-
requestId: string;
|
|
37
|
-
/** Window start timestamp in ms (epoch). Used for graceful release decision. */
|
|
38
|
-
windowStartTs: number;
|
|
39
|
-
}
|
|
40
|
-
/** Result of a successful two-layer claim. */
|
|
41
|
-
export interface ClaimResult {
|
|
42
|
-
/** True if the ClaimRegistry claim was freshly placed (false = pre-existing). */
|
|
43
|
-
registryClaimWasFresh: boolean;
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Execute the two-layer claim for a single task.
|
|
47
|
-
*
|
|
48
|
-
* // Claim ordering: ClaimRegistry FIRST (cheap coordination lock), marketplace SECOND.
|
|
49
|
-
* // Spec §6.1 lists them in opposite order but doesn't enforce sequencing — registry-first
|
|
50
|
-
* // is preferred because: (a) ClaimRegistry revert is fast and signals "another harness
|
|
51
|
-
* // is on it" cleanly; (b) marketplace claim is more expensive (Safe tx + actual gas);
|
|
52
|
-
* // (c) we release ClaimRegistry on marketplace failure to avoid leaking a stale claim.
|
|
53
|
-
*
|
|
54
|
-
* @param claimWindow - Timing data for the task (requestId, windowStartTs).
|
|
55
|
-
* @param registryClient - ClaimRegistryClient for the deployed ClaimRegistry contract.
|
|
56
|
-
* @param marketplaceClaimer - Adapter whose claimRequest() performs the marketplace claim.
|
|
57
|
-
* @returns ClaimResult on success.
|
|
58
|
-
* @throws If either layer cannot be claimed (after graceful cleanup).
|
|
59
|
-
*/
|
|
60
|
-
export declare function executeTwoLayerClaim(claimWindow: ClaimWindow, registryClient: ClaimRegistryClient, marketplaceClaimer: MarketplaceClaimer): Promise<ClaimResult>;
|
|
61
|
-
/**
|
|
62
|
-
* Release the ClaimRegistry claim for an task that was CLAIMED but whose
|
|
63
|
-
* work window has not yet started (windowStartTs not reached).
|
|
64
|
-
*
|
|
65
|
-
* Used during graceful engine shutdown. No-op if we don't hold the claim.
|
|
66
|
-
*
|
|
67
|
-
* @returns true if the claim was released, false if there was nothing to release.
|
|
68
|
-
*/
|
|
69
|
-
export declare function releaseClaimedNotStarted(claimWindow: ClaimWindow, registryClient: ClaimRegistryClient): Promise<boolean>;
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Two-layer claim orchestration for the harness engine.
|
|
3
|
-
*
|
|
4
|
-
* §6.1, §9.1, §9.2 of spec/2026-04-17-portfolio-v0-design.md
|
|
5
|
-
*
|
|
6
|
-
* Layer 1: ClaimRegistry claim — Jinn's work-coordination contract.
|
|
7
|
-
* Layer 2: Marketplace priority claim — calls MechAdapter.claimRequest() to
|
|
8
|
-
* register the priority-mech exclusivity window (300 s responseTimeout).
|
|
9
|
-
*
|
|
10
|
-
* The ClaimRegistry claimTTL is owner-configured per-deployment and is not
|
|
11
|
-
* passed by the client.
|
|
12
|
-
*
|
|
13
|
-
* Recovery:
|
|
14
|
-
* On resume, ClaimRegistryClient.weAlreadyClaimed() is checked before any
|
|
15
|
-
* on-chain write. If we already hold the claim, the ClaimRegistry step is
|
|
16
|
-
* skipped entirely. The marketplace claim is re-attempted because it is
|
|
17
|
-
* stateless from the engine's perspective (MechAdapter is idempotent there).
|
|
18
|
-
*
|
|
19
|
-
* Failure modes:
|
|
20
|
-
* - ClaimRegistry claim fails → throw, no marketplace call, engine marks FAILED.
|
|
21
|
-
* - Marketplace claim fails → release ClaimRegistry claim, throw.
|
|
22
|
-
*/
|
|
23
|
-
// ── Two-layer claim ───────────────────────────────────────────────────────────
|
|
24
|
-
/**
|
|
25
|
-
* Execute the two-layer claim for a single task.
|
|
26
|
-
*
|
|
27
|
-
* // Claim ordering: ClaimRegistry FIRST (cheap coordination lock), marketplace SECOND.
|
|
28
|
-
* // Spec §6.1 lists them in opposite order but doesn't enforce sequencing — registry-first
|
|
29
|
-
* // is preferred because: (a) ClaimRegistry revert is fast and signals "another harness
|
|
30
|
-
* // is on it" cleanly; (b) marketplace claim is more expensive (Safe tx + actual gas);
|
|
31
|
-
* // (c) we release ClaimRegistry on marketplace failure to avoid leaking a stale claim.
|
|
32
|
-
*
|
|
33
|
-
* @param claimWindow - Timing data for the task (requestId, windowStartTs).
|
|
34
|
-
* @param registryClient - ClaimRegistryClient for the deployed ClaimRegistry contract.
|
|
35
|
-
* @param marketplaceClaimer - Adapter whose claimRequest() performs the marketplace claim.
|
|
36
|
-
* @returns ClaimResult on success.
|
|
37
|
-
* @throws If either layer cannot be claimed (after graceful cleanup).
|
|
38
|
-
*/
|
|
39
|
-
export async function executeTwoLayerClaim(claimWindow, registryClient, marketplaceClaimer) {
|
|
40
|
-
const requestIdHex = claimWindow.requestId;
|
|
41
|
-
// ── Layer 1: ClaimRegistry ────────────────────────────────────────────────
|
|
42
|
-
// Idempotency check: if we already hold the claim, skip the on-chain write.
|
|
43
|
-
const alreadyClaimed = await registryClient.weAlreadyClaimed(requestIdHex);
|
|
44
|
-
let registryClaimWasFresh = false;
|
|
45
|
-
if (!alreadyClaimed) {
|
|
46
|
-
const result = await registryClient.claimJob(requestIdHex);
|
|
47
|
-
if (!result.claimed) {
|
|
48
|
-
const detail = result.reason === 'lost-race' && result.competitor
|
|
49
|
-
? `lost claim race to ${result.competitor}`
|
|
50
|
-
: result.reason === 'lost-race'
|
|
51
|
-
? 'lost claim race to another operator'
|
|
52
|
-
: result.reason === 'ineligible'
|
|
53
|
-
? 'eligibility checker rejected'
|
|
54
|
-
: `tx reverted${result.reason ? ` (${result.reason})` : ''}`;
|
|
55
|
-
throw new Error(`[claim-orchestration] ClaimRegistry claim failed for ${claimWindow.requestId} — ${detail}`);
|
|
56
|
-
}
|
|
57
|
-
registryClaimWasFresh = true;
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
console.log(`[claim-orchestration] ClaimRegistry: pre-existing claim found for ${claimWindow.requestId}, skipping re-claim`);
|
|
61
|
-
}
|
|
62
|
-
// ── Layer 2: Marketplace ──────────────────────────────────────────────────
|
|
63
|
-
try {
|
|
64
|
-
await marketplaceClaimer.claimRequest(claimWindow.requestId);
|
|
65
|
-
}
|
|
66
|
-
catch (marketplaceErr) {
|
|
67
|
-
// Marketplace claim failed — release the ClaimRegistry claim we just placed
|
|
68
|
-
// (only if we placed it fresh; pre-existing claims are not ours to release here)
|
|
69
|
-
// TODO(v0 trade-off): on the resume path (weAlreadyClaimed = true, registryClaimWasFresh = false)
|
|
70
|
-
// we do NOT release the ClaimRegistry claim here. Releasing on a transient marketplace failure
|
|
71
|
-
// would forfeit our coordination lock and let a competing harness take it. The downside is that
|
|
72
|
-
// on a *persistent* failure the claim sits locked until TTL expiry (owner-configured per-deployment).
|
|
73
|
-
// Distinguishing transient vs. permanent failures is non-trivial; for v0 we accept the TTL wait.
|
|
74
|
-
// Future: inspect the marketplace error type and release only on permanent failures.
|
|
75
|
-
if (registryClaimWasFresh) {
|
|
76
|
-
try {
|
|
77
|
-
await registryClient.releaseClaim(requestIdHex);
|
|
78
|
-
console.log(`[claim-orchestration] released ClaimRegistry claim for ${claimWindow.requestId} after marketplace failure`);
|
|
79
|
-
}
|
|
80
|
-
catch (releaseErr) {
|
|
81
|
-
const releaseMsg = releaseErr instanceof Error ? releaseErr.message : String(releaseErr);
|
|
82
|
-
console.error(`[claim-orchestration] failed to release ClaimRegistry claim for ${claimWindow.requestId} after marketplace failure: ${releaseMsg}`);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
throw marketplaceErr;
|
|
86
|
-
}
|
|
87
|
-
return { registryClaimWasFresh };
|
|
88
|
-
}
|
|
89
|
-
// ── Graceful release ──────────────────────────────────────────────────────────
|
|
90
|
-
/**
|
|
91
|
-
* Release the ClaimRegistry claim for an task that was CLAIMED but whose
|
|
92
|
-
* work window has not yet started (windowStartTs not reached).
|
|
93
|
-
*
|
|
94
|
-
* Used during graceful engine shutdown. No-op if we don't hold the claim.
|
|
95
|
-
*
|
|
96
|
-
* @returns true if the claim was released, false if there was nothing to release.
|
|
97
|
-
*/
|
|
98
|
-
export async function releaseClaimedNotStarted(claimWindow, registryClient) {
|
|
99
|
-
const requestIdHex = claimWindow.requestId;
|
|
100
|
-
// Only release if the work window hasn't started yet
|
|
101
|
-
if (Date.now() >= claimWindow.windowStartTs) {
|
|
102
|
-
console.log(`[claim-orchestration] NOT releasing claim for ${claimWindow.requestId} — window already started`);
|
|
103
|
-
return false;
|
|
104
|
-
}
|
|
105
|
-
const released = await registryClient.releaseClaim(requestIdHex);
|
|
106
|
-
if (released) {
|
|
107
|
-
console.log(`[claim-orchestration] released ClaimRegistry claim for ${claimWindow.requestId} (graceful shutdown, before window start)`);
|
|
108
|
-
}
|
|
109
|
-
return released;
|
|
110
|
-
}
|
|
111
|
-
//# sourceMappingURL=claim.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"claim.js","sourceRoot":"","sources":["../../../src/harnesses/engine/claim.ts"],"names":[],"mappings":"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"}
|