@jinn-network/client 0.1.0 → 0.1.1-canary.4a6ed8b2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +98 -11
- package/deployments/deployment-jinn-testnet-faucet-baseSepolia-fast.json +15 -0
- package/dist/adapters/claim-registry/abi.d.ts +127 -0
- package/dist/adapters/claim-registry/abi.js +93 -0
- package/dist/adapters/claim-registry/abi.js.map +1 -0
- package/dist/adapters/claim-registry/client.d.ts +89 -0
- package/dist/adapters/claim-registry/client.js +205 -0
- package/dist/adapters/claim-registry/client.js.map +1 -0
- package/dist/adapters/mech/adapter.d.ts +2 -0
- package/dist/adapters/mech/adapter.js +110 -41
- package/dist/adapters/mech/adapter.js.map +1 -1
- package/dist/adapters/mech/contracts.d.ts +2 -0
- package/dist/adapters/mech/contracts.js +32 -7
- package/dist/adapters/mech/contracts.js.map +1 -1
- package/dist/adapters/mech/ipfs.d.ts +8 -0
- package/dist/adapters/mech/ipfs.js +12 -0
- package/dist/adapters/mech/ipfs.js.map +1 -1
- package/dist/adapters/mech/types.d.ts +20 -46
- package/dist/adapters/mech/types.js +16 -35
- package/dist/adapters/mech/types.js.map +1 -1
- package/dist/api/gather-status.js +11 -0
- package/dist/api/gather-status.js.map +1 -1
- package/dist/api/portfolio-v0-build.d.ts +81 -0
- package/dist/api/portfolio-v0-build.js +141 -0
- package/dist/api/portfolio-v0-build.js.map +1 -0
- package/dist/api/portfolio-v0-doctor.d.ts +37 -0
- package/dist/api/portfolio-v0-doctor.js +123 -0
- package/dist/api/portfolio-v0-doctor.js.map +1 -0
- package/dist/api/server.js +12 -0
- package/dist/api/server.js.map +1 -1
- package/dist/api/status-build.d.ts +6 -0
- package/dist/api/status-build.js +1 -0
- package/dist/api/status-build.js.map +1 -1
- package/dist/api/status-rollup-build.d.ts +4 -0
- package/dist/api/status-rollup-build.js +4 -0
- package/dist/api/status-rollup-build.js.map +1 -1
- package/dist/bin/jinn-mcp.d.ts +14 -0
- package/dist/bin/jinn-mcp.js +19 -0
- package/dist/bin/jinn-mcp.js.map +1 -0
- package/dist/build-meta.json +1 -1
- package/dist/cli/commands/auth.d.ts +3 -0
- package/dist/cli/commands/auth.js +236 -0
- package/dist/cli/commands/auth.js.map +1 -0
- package/dist/cli/commands/bootstrap.js +1 -0
- package/dist/cli/commands/bootstrap.js.map +1 -1
- package/dist/cli/commands/doctor.js +148 -15
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/fund-requirements.js +69 -1
- package/dist/cli/commands/fund-requirements.js.map +1 -1
- package/dist/cli/commands/history.js +1 -0
- package/dist/cli/commands/history.js.map +1 -1
- package/dist/cli/commands/init.js +31 -7
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/keys-backup.js +142 -10
- package/dist/cli/commands/keys-backup.js.map +1 -1
- package/dist/cli/commands/logs.js +28 -13
- package/dist/cli/commands/logs.js.map +1 -1
- package/dist/cli/commands/plugin-install.d.ts +3 -0
- package/dist/cli/commands/plugin-install.js +799 -0
- package/dist/cli/commands/plugin-install.js.map +1 -0
- package/dist/cli/commands/quickstart.d.ts +3 -0
- package/dist/cli/commands/quickstart.js +236 -0
- package/dist/cli/commands/quickstart.js.map +1 -0
- package/dist/cli/commands/run.js +6 -0
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/stop.js +1 -0
- package/dist/cli/commands/stop.js.map +1 -1
- package/dist/cli/commands/submit-intent.js +79 -5
- package/dist/cli/commands/submit-intent.js.map +1 -1
- package/dist/cli/commands/update.d.ts +3 -0
- package/dist/cli/commands/update.js +154 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/commands/version.js +15 -1
- package/dist/cli/commands/version.js.map +1 -1
- package/dist/cli/deployment-digest.js +20 -4
- package/dist/cli/deployment-digest.js.map +1 -1
- package/dist/cli/index.js +8 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/password.d.ts +15 -0
- package/dist/cli/password.js +29 -1
- package/dist/cli/password.js.map +1 -1
- package/dist/config.d.ts +110 -7
- package/dist/config.js +38 -5
- package/dist/config.js.map +1 -1
- package/dist/daemon/balance-topup-loop.d.ts +40 -0
- package/dist/daemon/balance-topup-loop.js +96 -0
- package/dist/daemon/balance-topup-loop.js.map +1 -0
- package/dist/daemon/daemon.d.ts +37 -0
- package/dist/daemon/daemon.js +98 -1
- package/dist/daemon/daemon.js.map +1 -1
- package/dist/dashboard/index.html +500 -0
- package/dist/earning/bootstrap.d.ts +3 -1
- package/dist/earning/bootstrap.js +138 -17
- package/dist/earning/bootstrap.js.map +1 -1
- package/dist/earning/contracts.d.ts +24 -0
- package/dist/earning/contracts.js +20 -1
- package/dist/earning/contracts.js.map +1 -1
- package/dist/earning/faucet.d.ts +15 -0
- package/dist/earning/faucet.js +64 -0
- package/dist/earning/faucet.js.map +1 -0
- package/dist/earning/store.d.ts +5 -0
- package/dist/earning/store.js +7 -3
- package/dist/earning/store.js.map +1 -1
- package/dist/errors/unauthorized-account.d.ts +10 -0
- package/dist/errors/unauthorized-account.js +14 -0
- package/dist/errors/unauthorized-account.js.map +1 -0
- package/dist/main.js +128 -1
- package/dist/main.js.map +1 -1
- package/dist/mcp/operator-server.d.ts +34 -0
- package/dist/mcp/operator-server.js +219 -0
- package/dist/mcp/operator-server.js.map +1 -0
- package/dist/operator-errors.js +11 -0
- package/dist/operator-errors.js.map +1 -1
- package/dist/preflight/claude-auth.d.ts +68 -0
- package/dist/preflight/claude-auth.js +171 -0
- package/dist/preflight/claude-auth.js.map +1 -0
- package/dist/restorer/engine/canonical-json.d.ts +18 -0
- package/dist/restorer/engine/canonical-json.js +59 -0
- package/dist/restorer/engine/canonical-json.js.map +1 -0
- package/dist/restorer/engine/claim.d.ts +69 -0
- package/dist/restorer/engine/claim.js +104 -0
- package/dist/restorer/engine/claim.js.map +1 -0
- package/dist/restorer/engine/delivery.d.ts +52 -0
- package/dist/restorer/engine/delivery.js +63 -0
- package/dist/restorer/engine/delivery.js.map +1 -0
- package/dist/restorer/engine/engine.d.ts +203 -0
- package/dist/restorer/engine/engine.js +658 -0
- package/dist/restorer/engine/engine.js.map +1 -0
- package/dist/restorer/engine/manifest-assembly.d.ts +67 -0
- package/dist/restorer/engine/manifest-assembly.js +79 -0
- package/dist/restorer/engine/manifest-assembly.js.map +1 -0
- package/dist/restorer/engine/packaging.d.ts +87 -0
- package/dist/restorer/engine/packaging.js +350 -0
- package/dist/restorer/engine/packaging.js.map +1 -0
- package/dist/restorer/engine/persistence.d.ts +170 -0
- package/dist/restorer/engine/persistence.js +381 -0
- package/dist/restorer/engine/persistence.js.map +1 -0
- package/dist/restorer/engine/recovery.d.ts +22 -0
- package/dist/restorer/engine/recovery.js +24 -0
- package/dist/restorer/engine/recovery.js.map +1 -0
- package/dist/restorer/engine/registry.d.ts +62 -0
- package/dist/restorer/engine/registry.js +73 -0
- package/dist/restorer/engine/registry.js.map +1 -0
- package/dist/restorer/engine/signing.d.ts +30 -0
- package/dist/restorer/engine/signing.js +39 -0
- package/dist/restorer/engine/signing.js.map +1 -0
- package/dist/restorer/engine/state.d.ts +42 -0
- package/dist/restorer/engine/state.js +87 -0
- package/dist/restorer/engine/state.js.map +1 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/api-wallet.d.ts +64 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/api-wallet.js +96 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/api-wallet.js.map +1 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/index.d.ts +88 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/index.js +560 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/index.js.map +1 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/mcp-tools.d.ts +137 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/mcp-tools.js +865 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/mcp-tools.js.map +1 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/safety-rails.d.ts +74 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/safety-rails.js +74 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/safety-rails.js.map +1 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/session-orchestrator.d.ts +97 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/session-orchestrator.js +226 -0
- package/dist/restorer/impls/claude-mcp-hyperliquid/session-orchestrator.js.map +1 -0
- package/dist/restorer/impls/legacy-claude/index.d.ts +42 -0
- package/dist/restorer/impls/legacy-claude/index.js +60 -0
- package/dist/restorer/impls/legacy-claude/index.js.map +1 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/canonical-metrics.d.ts +68 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/canonical-metrics.js +117 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/canonical-metrics.js.map +1 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/availability.d.ts +49 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/availability.js +91 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/availability.js.map +1 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/consistency.d.ts +78 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/consistency.js +274 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/consistency.js.map +1 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/eligibility.d.ts +23 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/eligibility.js +49 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/eligibility.js.map +1 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/integrity.d.ts +25 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/integrity.js +44 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/integrity.js.map +1 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/spec.d.ts +17 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/spec.js +43 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/checks/spec.js.map +1 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/index.d.ts +43 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/index.js +431 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/index.js.map +1 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/score.d.ts +21 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/score.js +32 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/score.js.map +1 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/types.d.ts +32 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/types.js +8 -0
- package/dist/restorer/impls/portfolio-v0-evaluator/types.js.map +1 -0
- package/dist/restorer/impls/prediction-v0-baseline/index.d.ts +26 -0
- package/dist/restorer/impls/prediction-v0-baseline/index.js +82 -0
- package/dist/restorer/impls/prediction-v0-baseline/index.js.map +1 -0
- package/dist/restorer/impls/prediction-v0-baseline/strategy.d.ts +8 -0
- package/dist/restorer/impls/prediction-v0-baseline/strategy.js +41 -0
- package/dist/restorer/impls/prediction-v0-baseline/strategy.js.map +1 -0
- package/dist/restorer/impls/prediction-v0-baseline/types.d.ts +7 -0
- package/dist/restorer/impls/prediction-v0-baseline/types.js +2 -0
- package/dist/restorer/impls/prediction-v0-baseline/types.js.map +1 -0
- package/dist/restorer/impls/prediction-v0-evaluator/canonical-metrics.d.ts +20 -0
- package/dist/restorer/impls/prediction-v0-evaluator/canonical-metrics.js +66 -0
- package/dist/restorer/impls/prediction-v0-evaluator/canonical-metrics.js.map +1 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/availability.d.ts +9 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/availability.js +23 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/availability.js.map +1 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/eligibility.d.ts +3 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/eligibility.js +13 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/eligibility.js.map +1 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/integrity.d.ts +7 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/integrity.js +74 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/integrity.js.map +1 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/spec.d.ts +5 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/spec.js +20 -0
- package/dist/restorer/impls/prediction-v0-evaluator/checks/spec.js.map +1 -0
- package/dist/restorer/impls/prediction-v0-evaluator/index.d.ts +33 -0
- package/dist/restorer/impls/prediction-v0-evaluator/index.js +179 -0
- package/dist/restorer/impls/prediction-v0-evaluator/index.js.map +1 -0
- package/dist/restorer/impls/prediction-v0-evaluator/score.d.ts +8 -0
- package/dist/restorer/impls/prediction-v0-evaluator/score.js +15 -0
- package/dist/restorer/impls/prediction-v0-evaluator/score.js.map +1 -0
- package/dist/restorer/impls/prediction-v0-evaluator/types.d.ts +7 -0
- package/dist/restorer/impls/prediction-v0-evaluator/types.js +2 -0
- package/dist/restorer/impls/prediction-v0-evaluator/types.js.map +1 -0
- package/dist/restorer/types.d.ts +62 -0
- package/dist/restorer/types.js +7 -0
- package/dist/restorer/types.js.map +1 -0
- package/dist/runner/claude.js +15 -0
- package/dist/runner/claude.js.map +1 -1
- package/dist/store/store.d.ts +3 -1
- package/dist/store/store.js +8 -0
- package/dist/store/store.js.map +1 -1
- package/dist/tx-retry.js +11 -1
- package/dist/tx-retry.js.map +1 -1
- package/dist/types/desired-state.d.ts +53 -0
- package/dist/types/desired-state.js +20 -0
- package/dist/types/desired-state.js.map +1 -1
- package/dist/types/index.d.ts +3 -1
- package/dist/types/index.js +3 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/portfolio.d.ts +1000 -0
- package/dist/types/portfolio.js +168 -0
- package/dist/types/portfolio.js.map +1 -0
- package/dist/types/prediction.d.ts +751 -0
- package/dist/types/prediction.js +128 -0
- package/dist/types/prediction.js.map +1 -0
- package/dist/venues/chainlink/client.d.ts +99 -0
- package/dist/venues/chainlink/client.js +130 -0
- package/dist/venues/chainlink/client.js.map +1 -0
- package/dist/venues/chainlink/feeds.d.ts +8 -0
- package/dist/venues/chainlink/feeds.js +9 -0
- package/dist/venues/chainlink/feeds.js.map +1 -0
- package/dist/venues/hyperliquid/account-value.d.ts +30 -0
- package/dist/venues/hyperliquid/account-value.js +30 -0
- package/dist/venues/hyperliquid/account-value.js.map +1 -0
- package/dist/venues/hyperliquid/client.d.ts +63 -0
- package/dist/venues/hyperliquid/client.js +135 -0
- package/dist/venues/hyperliquid/client.js.map +1 -0
- package/dist/venues/hyperliquid/grid.d.ts +36 -0
- package/dist/venues/hyperliquid/grid.js +61 -0
- package/dist/venues/hyperliquid/grid.js.map +1 -0
- package/dist/venues/hyperliquid/types.d.ts +81 -0
- package/dist/venues/hyperliquid/types.js +8 -0
- package/dist/venues/hyperliquid/types.js.map +1 -0
- package/package.json +18 -3
- package/skills/jinn-operator/SKILL.md +213 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Coinbase CDP faucet integration for automatic Base Sepolia testnet funding.
|
|
3
|
+
*
|
|
4
|
+
* SECURITY: The shipped default API key grants testnet faucet access ONLY.
|
|
5
|
+
* No mainnet access, no wallet control, no financial risk.
|
|
6
|
+
*
|
|
7
|
+
* KEY ROTATION: Change the constants below and publish a new npm version.
|
|
8
|
+
*/
|
|
9
|
+
// Jinn project CDP secret API key pair — testnet faucet access only
|
|
10
|
+
const JINN_DEFAULT_CDP_API_KEY_ID = 'b743bfce-7f46-4e8e-ba04-0993b2c4908e';
|
|
11
|
+
const JINN_DEFAULT_CDP_API_KEY_SECRET = 'lrGwqLwt3tX8/UIPHK4/AlM7TtqyGYXypXs/HqA3ORDCBgjLemJHhA40gmBNj0uK9PCAKaXlbhgFKuxAT/MfVw==';
|
|
12
|
+
const MANUAL_FAUCET_URL = 'https://portal.cdp.coinbase.com/products/faucet';
|
|
13
|
+
export async function requestTestnetFunding(address, network) {
|
|
14
|
+
const envApiKeyId = process.env['CDP_API_KEY_ID'];
|
|
15
|
+
const envApiKeySecret = process.env['CDP_API_KEY_SECRET'];
|
|
16
|
+
const hasEnvPair = Boolean(envApiKeyId && envApiKeySecret);
|
|
17
|
+
// Resolve credential pair: complete env override > shipped default pair
|
|
18
|
+
const apiKeyId = hasEnvPair ? envApiKeyId : JINN_DEFAULT_CDP_API_KEY_ID;
|
|
19
|
+
const apiKeySecret = hasEnvPair ? envApiKeySecret : JINN_DEFAULT_CDP_API_KEY_SECRET;
|
|
20
|
+
// Warn on partial override
|
|
21
|
+
if ((envApiKeyId && !envApiKeySecret) || (!envApiKeyId && envApiKeySecret)) {
|
|
22
|
+
console.error('[faucet] Warning: Only one of CDP_API_KEY_ID/CDP_API_KEY_SECRET is set. Using shipped defaults.');
|
|
23
|
+
}
|
|
24
|
+
// Dynamic import — SDK is optional
|
|
25
|
+
let CdpClient;
|
|
26
|
+
try {
|
|
27
|
+
const mod = await import('@coinbase/cdp-sdk');
|
|
28
|
+
CdpClient = mod.CdpClient;
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return {
|
|
32
|
+
ok: false,
|
|
33
|
+
reason: `Coinbase CDP SDK not installed. Install with: npm install @coinbase/cdp-sdk\nOr fund manually: ${MANUAL_FAUCET_URL}`,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
const clientOpts = { apiKeyId, apiKeySecret };
|
|
38
|
+
const cdp = new CdpClient(clientOpts);
|
|
39
|
+
const result = await cdp.evm.requestFaucet({
|
|
40
|
+
address,
|
|
41
|
+
network,
|
|
42
|
+
token: 'eth',
|
|
43
|
+
});
|
|
44
|
+
return { ok: true, txHash: result.transactionHash ?? String(result) };
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
48
|
+
const isRateLimit = message.toLowerCase().includes('rate limit') ||
|
|
49
|
+
message.toLowerCase().includes('already claimed') ||
|
|
50
|
+
message.includes('429');
|
|
51
|
+
if (isRateLimit) {
|
|
52
|
+
return {
|
|
53
|
+
ok: false,
|
|
54
|
+
rateLimited: true,
|
|
55
|
+
reason: `Faucet rate limited (1 claim per 24 hours per address). Fund manually: ${MANUAL_FAUCET_URL}`,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
ok: false,
|
|
60
|
+
reason: `Faucet error: ${message}. Fund manually: ${MANUAL_FAUCET_URL}`,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=faucet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"faucet.js","sourceRoot":"","sources":["../../src/earning/faucet.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,oEAAoE;AACpE,MAAM,2BAA2B,GAAG,sCAAsC,CAAC;AAC3E,MAAM,+BAA+B,GAAG,0FAA0F,CAAC;AAEnI,MAAM,iBAAiB,GAAG,iDAAiD,CAAC;AAS5E,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAAe,EACf,OAAuB;IAEvB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAClD,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,IAAI,eAAe,CAAC,CAAC;IAE3D,wEAAwE;IACxE,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,WAAY,CAAC,CAAC,CAAC,2BAA2B,CAAC;IACzE,MAAM,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,eAAgB,CAAC,CAAC,CAAC,+BAA+B,CAAC;IAErF,2BAA2B;IAC3B,IAAI,CAAC,WAAW,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,WAAW,IAAI,eAAe,CAAC,EAAE,CAAC;QAC3E,OAAO,CAAC,KAAK,CAAC,iGAAiG,CAAC,CAAC;IACnH,CAAC;IAED,mCAAmC;IACnC,IAAI,SAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAC9C,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,kGAAkG,iBAAiB,EAAE;SAC9H,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,UAAU,GAA2B,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;QACtE,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC;YACzC,OAAO;YACP,OAAO;YACP,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;QACH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IACxE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC5C,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACjD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,WAAW,EAAE,IAAI;gBACjB,MAAM,EAAE,0EAA0E,iBAAiB,EAAE;aACtG,CAAC;QACJ,CAAC;QACD,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,iBAAiB,OAAO,oBAAoB,iBAAiB,EAAE;SACxE,CAAC;IACJ,CAAC;AACH,CAAC"}
|
package/dist/earning/store.d.ts
CHANGED
|
@@ -7,6 +7,11 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { type FleetState, type ServiceState } from './types.js';
|
|
9
9
|
export declare const DEFAULT_EARNING_DIR: string;
|
|
10
|
+
export declare const STATE_FILE = "earning_state.json";
|
|
11
|
+
export declare const MNEMONIC_KEYSTORE_FILE = "master_keystore.json";
|
|
12
|
+
export declare const LEGACY_KEYSTORE_FILE = "agent_keystore.json";
|
|
13
|
+
/** Absolute path to the encrypted mnemonic keystore for a given earning dir. */
|
|
14
|
+
export declare function mnemonicKeystorePath(earningDir: string): string;
|
|
10
15
|
/** Parse fleet JSON without side effects (for status / read-only tools). */
|
|
11
16
|
export declare function parseFleetStateJson(raw: string): FleetState | null;
|
|
12
17
|
export declare class FleetStateStore {
|
package/dist/earning/store.js
CHANGED
|
@@ -11,9 +11,13 @@ import os from 'os';
|
|
|
11
11
|
import path from 'path';
|
|
12
12
|
import { FleetStateSchema, createDefaultFleetState, } from './types.js';
|
|
13
13
|
export const DEFAULT_EARNING_DIR = path.join(os.homedir(), '.jinn-client', 'earning');
|
|
14
|
-
const STATE_FILE = 'earning_state.json';
|
|
15
|
-
const MNEMONIC_KEYSTORE_FILE = 'master_keystore.json';
|
|
16
|
-
const LEGACY_KEYSTORE_FILE = 'agent_keystore.json';
|
|
14
|
+
export const STATE_FILE = 'earning_state.json';
|
|
15
|
+
export const MNEMONIC_KEYSTORE_FILE = 'master_keystore.json';
|
|
16
|
+
export const LEGACY_KEYSTORE_FILE = 'agent_keystore.json';
|
|
17
|
+
/** Absolute path to the encrypted mnemonic keystore for a given earning dir. */
|
|
18
|
+
export function mnemonicKeystorePath(earningDir) {
|
|
19
|
+
return path.join(earningDir, MNEMONIC_KEYSTORE_FILE);
|
|
20
|
+
}
|
|
17
21
|
async function writeJsonAtomic(filePath, data) {
|
|
18
22
|
const dir = path.dirname(filePath);
|
|
19
23
|
await mkdir(dir, { recursive: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/earning/store.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAGL,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,YAAY,CAAC;AAEpB,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;AAEtF,MAAM,UAAU,GAAG,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/earning/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared detector for the stOLAS ExternalStakingDistributor's
|
|
3
|
+
* `UnauthorizedAccount(address)` revert, which `reStake()` throws when the
|
|
4
|
+
* caller is not in `mapCuratingAgents` / `mapManagingAgents` and is not the
|
|
5
|
+
* distributor owner. Both the bootstrap reconcile path and the operator-facing
|
|
6
|
+
* error formatter need to recognise it.
|
|
7
|
+
*/
|
|
8
|
+
/** 4-byte selector of `UnauthorizedAccount(address)`. */
|
|
9
|
+
export declare const UNAUTHORIZED_ACCOUNT_SELECTOR = "0x32b2baa3";
|
|
10
|
+
export declare function isUnauthorizedAccountError(message: string): boolean;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared detector for the stOLAS ExternalStakingDistributor's
|
|
3
|
+
* `UnauthorizedAccount(address)` revert, which `reStake()` throws when the
|
|
4
|
+
* caller is not in `mapCuratingAgents` / `mapManagingAgents` and is not the
|
|
5
|
+
* distributor owner. Both the bootstrap reconcile path and the operator-facing
|
|
6
|
+
* error formatter need to recognise it.
|
|
7
|
+
*/
|
|
8
|
+
/** 4-byte selector of `UnauthorizedAccount(address)`. */
|
|
9
|
+
export const UNAUTHORIZED_ACCOUNT_SELECTOR = '0x32b2baa3';
|
|
10
|
+
export function isUnauthorizedAccountError(message) {
|
|
11
|
+
return (message.includes('UnauthorizedAccount') ||
|
|
12
|
+
message.includes(UNAUTHORIZED_ACCOUNT_SELECTOR));
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=unauthorized-account.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unauthorized-account.js","sourceRoot":"","sources":["../../src/errors/unauthorized-account.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,yDAAyD;AACzD,MAAM,CAAC,MAAM,6BAA6B,GAAG,YAAY,CAAC;AAE1D,MAAM,UAAU,0BAA0B,CAAC,OAAe;IACxD,OAAO,CACL,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QACvC,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CAChD,CAAC;AACJ,CAAC"}
|
package/dist/main.js
CHANGED
|
@@ -22,6 +22,7 @@ import { loadConfig, getConfigPathFromArgs } from './config.js';
|
|
|
22
22
|
import { emitEnvelope } from './errors/envelope.js';
|
|
23
23
|
import { checkClaudeBinary } from './preflight/claude-binary.js';
|
|
24
24
|
import { emitClaudeBinaryPreflightFailure } from './preflight/claude-invocation-envelope.js';
|
|
25
|
+
import { detectAuthContext, probeClaudeAuth } from './preflight/claude-auth.js';
|
|
25
26
|
import { FleetBootstrapper } from './earning/bootstrap.js';
|
|
26
27
|
import { getChainConfig } from './earning/contracts.js';
|
|
27
28
|
import { FleetStateStore } from './earning/store.js';
|
|
@@ -30,6 +31,14 @@ import { MechAdapter } from './adapters/mech/adapter.js';
|
|
|
30
31
|
import { ClaudeRunner } from './runner/claude.js';
|
|
31
32
|
import { Daemon } from './daemon/daemon.js';
|
|
32
33
|
import { createJinnPublicClient, createJinnWalletClient } from './earning/viem-clients.js';
|
|
34
|
+
import { RestorerImplRegistry } from './restorer/engine/registry.js';
|
|
35
|
+
import { LegacyClaudeImpl } from './restorer/impls/legacy-claude/index.js';
|
|
36
|
+
import { ClaudeMcpHyperliquidImpl } from './restorer/impls/claude-mcp-hyperliquid/index.js';
|
|
37
|
+
import { PortfolioV0Evaluator } from './restorer/impls/portfolio-v0-evaluator/index.js';
|
|
38
|
+
import { PredictionV0BaselineImpl } from './restorer/impls/prediction-v0-baseline/index.js';
|
|
39
|
+
import { PredictionV0Evaluator } from './restorer/impls/prediction-v0-evaluator/index.js';
|
|
40
|
+
import { ClaimRegistryClient } from './adapters/claim-registry/client.js';
|
|
41
|
+
import { createClients } from './adapters/mech/safe.js';
|
|
33
42
|
dotenvConfig({ path: join(dirname(fileURLToPath(import.meta.url)), '..', '.env') });
|
|
34
43
|
// ── Password (env-only — never in config files) ────────────────────────────
|
|
35
44
|
const PASSWORD = (() => {
|
|
@@ -198,6 +207,21 @@ export async function main() {
|
|
|
198
207
|
if (!preflight.ok) {
|
|
199
208
|
emitClaudeBinaryPreflightFailure(preflight.detail, config.claudePath);
|
|
200
209
|
}
|
|
210
|
+
const authContext = detectAuthContext({ cwd: process.cwd(), configuredMode: config.runtimeMode });
|
|
211
|
+
const authProbe = probeClaudeAuth({ context: authContext, cwd: process.cwd() });
|
|
212
|
+
if (!authProbe.authenticated) {
|
|
213
|
+
emitEnvelope({
|
|
214
|
+
code: 'invalid_invocation',
|
|
215
|
+
message: 'Claude is not authenticated. Run `jinn auth` in an interactive terminal before starting the daemon.',
|
|
216
|
+
hint: `Detected context: ${authContext}. The daemon cannot function without Claude authentication.`,
|
|
217
|
+
exampleCli: 'jinn auth',
|
|
218
|
+
details: {
|
|
219
|
+
field: 'claude_auth',
|
|
220
|
+
context: authContext,
|
|
221
|
+
authenticated: false,
|
|
222
|
+
},
|
|
223
|
+
});
|
|
224
|
+
}
|
|
201
225
|
const runner = new ClaudeRunner({
|
|
202
226
|
claudePath: config.claudePath,
|
|
203
227
|
model: config.claudeModel,
|
|
@@ -207,11 +231,87 @@ export async function main() {
|
|
|
207
231
|
const masterAccount = deriveMasterSigner(mnemonicForMaster);
|
|
208
232
|
const publicClient = createJinnPublicClient(config.rpcUrl, NETWORK_CHAIN);
|
|
209
233
|
const masterWallet = createJinnWalletClient(config.rpcUrl, NETWORK_CHAIN, masterAccount);
|
|
234
|
+
// ── RestorationEngine wiring ─────────────────────────────────────────────────
|
|
235
|
+
// Build agent viem clients (same creds as MechAdapter uses internally).
|
|
236
|
+
const agentChain = config.network === 'testnet'
|
|
237
|
+
? (await import('viem/chains')).baseSepolia
|
|
238
|
+
: (await import('viem/chains')).base;
|
|
239
|
+
const agentClients = createClients(config.rpcUrl, agentPrivateKey, agentChain);
|
|
240
|
+
// ── Impl registry ────────────────────────────────────────────────────────────
|
|
241
|
+
const implRegistry = new RestorerImplRegistry({
|
|
242
|
+
byKind: {
|
|
243
|
+
'portfolio.v0': 'claude-mcp-hyperliquid',
|
|
244
|
+
'prediction.v0': 'prediction-v0-baseline',
|
|
245
|
+
},
|
|
246
|
+
default: 'legacy-claude',
|
|
247
|
+
...(config.restorers ?? {}),
|
|
248
|
+
});
|
|
249
|
+
// legacy-claude: wraps ClaudeRunner; handles spec=undefined (health-check) intents
|
|
250
|
+
implRegistry.register(new LegacyClaudeImpl({
|
|
251
|
+
runner,
|
|
252
|
+
workingDirectory: '/tmp',
|
|
253
|
+
timeoutMs: 300_000,
|
|
254
|
+
daemonApiUrl: `http://127.0.0.1:${config.apiPort}`,
|
|
255
|
+
}));
|
|
256
|
+
// claude-mcp-hyperliquid: portfolio.v0 trader
|
|
257
|
+
implRegistry.register(new ClaudeMcpHyperliquidImpl({
|
|
258
|
+
claudePath: config.claudePath,
|
|
259
|
+
claudeModel: config.claudeModel,
|
|
260
|
+
}));
|
|
261
|
+
// portfolio-v0-evaluator: deterministic verifier — dispatched via type='evaluation' for portfolio.v0 kind
|
|
262
|
+
implRegistry.register(new PortfolioV0Evaluator());
|
|
263
|
+
// prediction-v0-baseline: reference restorer for prediction.v0 intents
|
|
264
|
+
implRegistry.register(new PredictionV0BaselineImpl({
|
|
265
|
+
rpcUrl: config.rpcUrl,
|
|
266
|
+
}));
|
|
267
|
+
// prediction-v0-evaluator: deterministic verifier for prediction.v0 evaluation jobs
|
|
268
|
+
implRegistry.register(new PredictionV0Evaluator({
|
|
269
|
+
evaluatorPk: agentPrivateKey,
|
|
270
|
+
evaluatorSafeAddress: safeAddress,
|
|
271
|
+
rpcUrl: config.rpcUrl,
|
|
272
|
+
}));
|
|
273
|
+
console.log(`[main] RestorerImplRegistry: ${implRegistry.list().map(i => i.name).join(', ')}`);
|
|
274
|
+
// ── Engine deps ───────────────────────────────────────────────────────────────
|
|
275
|
+
// Packaging deps: IPFS upload + optional artifact registration (wired in daemon via registerArtifact)
|
|
276
|
+
const packagingDeps = {
|
|
277
|
+
ipfsRegistryUrl: config.ipfsRegistryUrl,
|
|
278
|
+
};
|
|
279
|
+
// Manifest assembly deps: sign manifests with agent EOA private key
|
|
280
|
+
const manifestDeps = {
|
|
281
|
+
ipfsRegistryUrl: config.ipfsRegistryUrl,
|
|
282
|
+
agentEoaPrivateKey: agentPrivateKey,
|
|
283
|
+
safeAddress,
|
|
284
|
+
};
|
|
285
|
+
// Delivery deps: deliver to marketplace + claimDelivery via JinnRouter
|
|
286
|
+
const deliveryDeps = {
|
|
287
|
+
publicClient: agentClients.publicClient,
|
|
288
|
+
walletClient: agentClients.walletClient,
|
|
289
|
+
safeAddress,
|
|
290
|
+
mechContractAddress: mechAddress,
|
|
291
|
+
routerAddress: ROUTER_ADDRESS,
|
|
292
|
+
claimDeliveryVariant: CHAIN_CONFIG.routerClaimDeliveryVersion,
|
|
293
|
+
};
|
|
294
|
+
// Claim deps: only available when ClaimRegistry is deployed (optional).
|
|
295
|
+
// Address sourced from env var JINN_CLAIM_REGISTRY_ADDRESS (no chain config entry yet).
|
|
296
|
+
const claimRegistryAddress = (process.env['JINN_CLAIM_REGISTRY_ADDRESS'] ?? '');
|
|
297
|
+
const claimDeps = claimRegistryAddress
|
|
298
|
+
? {
|
|
299
|
+
registryClient: new ClaimRegistryClient(agentClients.publicClient, agentClients.walletClient, claimRegistryAddress, safeAddress),
|
|
300
|
+
marketplaceClaimer: adapter,
|
|
301
|
+
}
|
|
302
|
+
: undefined;
|
|
303
|
+
if (claimRegistryAddress) {
|
|
304
|
+
console.log(`[main] ClaimRegistry: ${claimRegistryAddress}`);
|
|
305
|
+
}
|
|
306
|
+
else {
|
|
307
|
+
console.log('[main] ClaimRegistry: not configured (claim step will use NotImplementedError fallback)');
|
|
308
|
+
}
|
|
210
309
|
const daemon = new Daemon({
|
|
211
310
|
adapter,
|
|
212
311
|
runner,
|
|
213
312
|
desiredStates: config.desiredStates,
|
|
214
313
|
dbPath: config.dbPath,
|
|
314
|
+
pollIntervalMs: config.pollIntervalMs,
|
|
215
315
|
apiPort: config.apiPort,
|
|
216
316
|
peers: config.peers.length > 0 ? config.peers : undefined,
|
|
217
317
|
subgraphUrl: config.subgraphUrl,
|
|
@@ -238,6 +338,33 @@ export async function main() {
|
|
|
238
338
|
distributorAddress: CHAIN_CONFIG.distributorAddress,
|
|
239
339
|
}
|
|
240
340
|
: undefined,
|
|
341
|
+
restorationEngine: {
|
|
342
|
+
// TODO(jinn-mono-cy4): RestorationEngineOptions has redundant registry+implRegistry
|
|
343
|
+
// fields. Engine refactor should consolidate to one. Locked in this PR.
|
|
344
|
+
registry: implRegistry,
|
|
345
|
+
paths: {
|
|
346
|
+
workingDirRoot: '/tmp/jinn-engine-working',
|
|
347
|
+
implStateDirRoot: '/tmp/jinn-engine-impl-state',
|
|
348
|
+
},
|
|
349
|
+
claimDeps,
|
|
350
|
+
packagingDeps,
|
|
351
|
+
manifestDeps,
|
|
352
|
+
deliveryDeps,
|
|
353
|
+
implRegistry,
|
|
354
|
+
},
|
|
355
|
+
balanceTopup: config.balanceTopupIntervalMs > 0
|
|
356
|
+
? {
|
|
357
|
+
intervalMs: config.balanceTopupIntervalMs,
|
|
358
|
+
publicClient,
|
|
359
|
+
masterWallet,
|
|
360
|
+
store: earningStore,
|
|
361
|
+
chain: NETWORK_CHAIN,
|
|
362
|
+
eoaTopupTrigger: CHAIN_CONFIG.eoaTopupTrigger,
|
|
363
|
+
eoaTopupTarget: CHAIN_CONFIG.minEoaGasEth,
|
|
364
|
+
safeTopupTrigger: CHAIN_CONFIG.safeTopupTrigger,
|
|
365
|
+
safeTopupTarget: CHAIN_CONFIG.minSafeEth,
|
|
366
|
+
}
|
|
367
|
+
: undefined,
|
|
241
368
|
});
|
|
242
369
|
// Graceful shutdown
|
|
243
370
|
const shutdown = async (signal) => {
|
|
@@ -262,7 +389,7 @@ export async function main() {
|
|
|
262
389
|
};
|
|
263
390
|
process.on('exit', removePidfile);
|
|
264
391
|
await daemon.start();
|
|
265
|
-
console.log(
|
|
392
|
+
console.log(`[main] Daemon running. Dashboard: http://127.0.0.1:${config.apiPort}`);
|
|
266
393
|
return {
|
|
267
394
|
schemaVersion: 1,
|
|
268
395
|
generatedAt: new Date().toISOString(),
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Operator-level MCP server for jinn-client.
|
|
3
|
+
*
|
|
4
|
+
* Exposes tools that let an external agent (e.g. Claude Desktop) manage a jinn
|
|
5
|
+
* fleet: read status, bootstrap, submit intents, start/stop the daemon.
|
|
6
|
+
*
|
|
7
|
+
* Entry point: client/src/bin/jinn-mcp.ts calls createOperatorServer().
|
|
8
|
+
*
|
|
9
|
+
* Design: wraps CLI command modules directly (Option B from the research doc).
|
|
10
|
+
* Each command already accepts an injectable { writer, exit } context, so we
|
|
11
|
+
* capture stdout into a string buffer and return it as the MCP tool response.
|
|
12
|
+
*/
|
|
13
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
14
|
+
export declare function startDetachedDaemon(env: NodeJS.ProcessEnv): Promise<{
|
|
15
|
+
ok: true;
|
|
16
|
+
payload: {
|
|
17
|
+
pid: number | undefined;
|
|
18
|
+
status: 'already_running' | 'started' | 'starting';
|
|
19
|
+
};
|
|
20
|
+
} | {
|
|
21
|
+
ok: false;
|
|
22
|
+
payload: {
|
|
23
|
+
status: 'failed';
|
|
24
|
+
detail: string;
|
|
25
|
+
};
|
|
26
|
+
}>;
|
|
27
|
+
export declare function stopDetachedDaemon(env: NodeJS.ProcessEnv): Promise<{
|
|
28
|
+
ok: true;
|
|
29
|
+
payload: Record<string, unknown>;
|
|
30
|
+
} | {
|
|
31
|
+
ok: false;
|
|
32
|
+
payload: string;
|
|
33
|
+
}>;
|
|
34
|
+
export declare function createOperatorServer(): McpServer;
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Operator-level MCP server for jinn-client.
|
|
3
|
+
*
|
|
4
|
+
* Exposes tools that let an external agent (e.g. Claude Desktop) manage a jinn
|
|
5
|
+
* fleet: read status, bootstrap, submit intents, start/stop the daemon.
|
|
6
|
+
*
|
|
7
|
+
* Entry point: client/src/bin/jinn-mcp.ts calls createOperatorServer().
|
|
8
|
+
*
|
|
9
|
+
* Design: wraps CLI command modules directly (Option B from the research doc).
|
|
10
|
+
* Each command already accepts an injectable { writer, exit } context, so we
|
|
11
|
+
* capture stdout into a string buffer and return it as the MCP tool response.
|
|
12
|
+
*/
|
|
13
|
+
import { spawn } from 'node:child_process';
|
|
14
|
+
import { existsSync, readFileSync, unlinkSync } from 'node:fs';
|
|
15
|
+
import { join } from 'node:path';
|
|
16
|
+
import { fileURLToPath } from 'node:url';
|
|
17
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
18
|
+
import { z } from 'zod';
|
|
19
|
+
// ── Read-only command imports ───────────────────────────────────────────────
|
|
20
|
+
import initCommand from '../cli/commands/init.js';
|
|
21
|
+
import doctorCommand from '../cli/commands/doctor.js';
|
|
22
|
+
import fundRequirementsCommand from '../cli/commands/fund-requirements.js';
|
|
23
|
+
import statusCommand from '../cli/commands/status.js';
|
|
24
|
+
import fleetCommand from '../cli/commands/fleet.js';
|
|
25
|
+
import balanceCommand from '../cli/commands/balance.js';
|
|
26
|
+
import historyCommand from '../cli/commands/history.js';
|
|
27
|
+
// ── Write (mutating) command imports ────────────────────────────────────────
|
|
28
|
+
import bootstrapCommand from '../cli/commands/bootstrap.js';
|
|
29
|
+
import submitIntentCommand from '../cli/commands/submit-intent.js';
|
|
30
|
+
import stopCommand from '../cli/commands/stop.js';
|
|
31
|
+
/**
|
|
32
|
+
* Run a CLI CommandModule in-process, capturing its stdout output as a string.
|
|
33
|
+
*
|
|
34
|
+
* The CLI commands call `ctx.exit()` on completion or error. We intercept that
|
|
35
|
+
* with a no-op so the MCP server process is not terminated. The captured text
|
|
36
|
+
* is always the JSON envelope the command writes.
|
|
37
|
+
*/
|
|
38
|
+
async function runCommandResult(command, argv, env) {
|
|
39
|
+
const chunks = [];
|
|
40
|
+
let exitCode = null;
|
|
41
|
+
const writer = {
|
|
42
|
+
write(s) {
|
|
43
|
+
chunks.push(s);
|
|
44
|
+
return true;
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
const ctx = {
|
|
48
|
+
argv,
|
|
49
|
+
stdoutIsTty: false,
|
|
50
|
+
writer,
|
|
51
|
+
exit: (code) => { exitCode = code; },
|
|
52
|
+
env,
|
|
53
|
+
};
|
|
54
|
+
await command.run(ctx);
|
|
55
|
+
return { text: chunks.join(''), exitCode };
|
|
56
|
+
}
|
|
57
|
+
async function runToolCommand(command, argv, env) {
|
|
58
|
+
try {
|
|
59
|
+
const result = await runCommandResult(command, argv, env);
|
|
60
|
+
return {
|
|
61
|
+
content: [{ type: 'text', text: result.text }],
|
|
62
|
+
...(result.exitCode !== null && result.exitCode !== 0 ? { isError: true } : {}),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
return {
|
|
67
|
+
content: [{ type: 'text', text: JSON.stringify({ error: String(err) }) }],
|
|
68
|
+
isError: true,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function sleep(ms) {
|
|
73
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
74
|
+
}
|
|
75
|
+
async function waitForPidfile(pidPath, timeoutMs) {
|
|
76
|
+
const startedAt = Date.now();
|
|
77
|
+
while (Date.now() - startedAt < timeoutMs) {
|
|
78
|
+
if (existsSync(pidPath)) {
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
await sleep(200);
|
|
82
|
+
}
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
function parseStopCommandNotRunning(text) {
|
|
86
|
+
try {
|
|
87
|
+
const parsed = JSON.parse(text);
|
|
88
|
+
return parsed.code === 'invalid_invocation' && parsed.details?.field === 'daemon_pidfile';
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
export async function startDetachedDaemon(env) {
|
|
95
|
+
const earningDir = env['JINN_EARNING_DIR'] ??
|
|
96
|
+
join(env['HOME'] ?? '.', '.jinn-client', 'earning');
|
|
97
|
+
const pidPath = join(earningDir, 'daemon.pid');
|
|
98
|
+
if (existsSync(pidPath)) {
|
|
99
|
+
try {
|
|
100
|
+
const existingPid = parseInt(readFileSync(pidPath, 'utf-8').trim(), 10);
|
|
101
|
+
process.kill(existingPid, 0);
|
|
102
|
+
return { ok: true, payload: { pid: existingPid, status: 'already_running' } };
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
try {
|
|
106
|
+
unlinkSync(pidPath);
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
/* ignore stale pidfile cleanup failures */
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
const jinnBinPath = fileURLToPath(new URL('../bin/jinn.js', import.meta.url));
|
|
114
|
+
const child = spawn(process.execPath, [jinnBinPath, 'run'], {
|
|
115
|
+
detached: true,
|
|
116
|
+
stdio: 'ignore',
|
|
117
|
+
env: { ...env },
|
|
118
|
+
});
|
|
119
|
+
const startResult = await Promise.race([
|
|
120
|
+
new Promise((resolve) => {
|
|
121
|
+
child.once('error', (err) => {
|
|
122
|
+
resolve({ status: 'failed', detail: err instanceof Error ? err.message : String(err) });
|
|
123
|
+
});
|
|
124
|
+
child.once('exit', (code, signal) => {
|
|
125
|
+
resolve({ status: 'failed', detail: `daemon exited during startup (code=${code ?? 'null'}, signal=${signal ?? 'null'})` });
|
|
126
|
+
});
|
|
127
|
+
}),
|
|
128
|
+
(async () => {
|
|
129
|
+
const pidfileReady = await waitForPidfile(pidPath, 5000);
|
|
130
|
+
return {
|
|
131
|
+
status: pidfileReady ? 'started' : 'starting',
|
|
132
|
+
pid: child.pid,
|
|
133
|
+
};
|
|
134
|
+
})(),
|
|
135
|
+
]);
|
|
136
|
+
child.unref();
|
|
137
|
+
if (startResult.status === 'failed') {
|
|
138
|
+
return { ok: false, payload: { status: 'failed', detail: startResult.detail } };
|
|
139
|
+
}
|
|
140
|
+
return { ok: true, payload: { pid: startResult.pid, status: startResult.status } };
|
|
141
|
+
}
|
|
142
|
+
export async function stopDetachedDaemon(env) {
|
|
143
|
+
const result = await runCommandResult(stopCommand, ['--json'], env);
|
|
144
|
+
if (result.exitCode === null || result.exitCode === 0) {
|
|
145
|
+
return { ok: true, payload: JSON.parse(result.text) };
|
|
146
|
+
}
|
|
147
|
+
if (parseStopCommandNotRunning(result.text)) {
|
|
148
|
+
return { ok: true, payload: { status: 'not_running' } };
|
|
149
|
+
}
|
|
150
|
+
return { ok: false, payload: result.text };
|
|
151
|
+
}
|
|
152
|
+
// ── Server factory ──────────────────────────────────────────────────────────
|
|
153
|
+
export function createOperatorServer() {
|
|
154
|
+
const server = new McpServer({
|
|
155
|
+
name: 'jinn-operator',
|
|
156
|
+
version: '0.1.0',
|
|
157
|
+
});
|
|
158
|
+
// ━━ Read-only tools ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
159
|
+
server.tool('jinn_init', 'Create the master wallet and write the encrypted keystore. Idempotent.', {}, async () => runToolCommand(initCommand, ['--json'], process.env));
|
|
160
|
+
server.tool('jinn_doctor', 'Preflight checks: node version, claude binary, keystore, deployment config.', {}, async () => runToolCommand(doctorCommand, ['--json'], process.env));
|
|
161
|
+
server.tool('jinn_fund_requirements', 'List addresses that need funding before bootstrap can advance.', {}, async () => runToolCommand(fundRequirementsCommand, ['--json'], process.env));
|
|
162
|
+
server.tool('jinn_status', 'Daemon liveness and fleet health roll-up. Poll this for monitoring.', {}, async () => runToolCommand(statusCommand, ['--json'], process.env));
|
|
163
|
+
server.tool('jinn_fleet', 'Per-service fleet detail: wallets, staking status, activity counts.', {}, async () => runToolCommand(fleetCommand, ['--json'], process.env));
|
|
164
|
+
server.tool('jinn_balance', 'Flat per-wallet balance map across master and service wallets.', {}, async () => runToolCommand(balanceCommand, ['--json'], process.env));
|
|
165
|
+
server.tool('jinn_history', 'Recent protocol activity: intents, claims, deliveries, evaluations, rewards.', {
|
|
166
|
+
limit: z.number().optional().default(50).describe('Max results (default 50)'),
|
|
167
|
+
since: z.string().optional().describe('Only return events after this ISO-8601 timestamp'),
|
|
168
|
+
}, async ({ limit, since }) => {
|
|
169
|
+
const argv = ['--json', '--limit', String(limit)];
|
|
170
|
+
if (since)
|
|
171
|
+
argv.push('--since', since);
|
|
172
|
+
return runToolCommand(historyCommand, argv, process.env);
|
|
173
|
+
});
|
|
174
|
+
// ━━ Write (mutating) tools ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
175
|
+
server.tool('jinn_bootstrap', 'Advance the fleet state machine. Idempotent. May take several minutes. Returns funding_required if wallet needs ETH.', {}, async () => runToolCommand(bootstrapCommand, ['--json'], process.env));
|
|
176
|
+
server.tool('jinn_submit_intent', 'Post a desired state (restoration job) to the protocol. Idempotent by id.', {
|
|
177
|
+
id: z.string().describe('Unique intent identifier'),
|
|
178
|
+
description: z.string().describe('Human-readable description of the desired state'),
|
|
179
|
+
dry_run: z.boolean().optional().default(false).describe('Preview without posting on-chain'),
|
|
180
|
+
}, async ({ id, description, dry_run }) => {
|
|
181
|
+
const argv = ['--id', id, '--description', description, '--json'];
|
|
182
|
+
if (dry_run)
|
|
183
|
+
argv.push('--dry-run');
|
|
184
|
+
else
|
|
185
|
+
argv.push('--yes'); // implicit confirmation in MCP context
|
|
186
|
+
return runToolCommand(submitIntentCommand, argv, process.env);
|
|
187
|
+
});
|
|
188
|
+
server.tool('jinn_start_daemon', 'Start the jinn daemon as a detached background process. Returns the PID.', {}, async () => {
|
|
189
|
+
const result = await startDetachedDaemon(process.env);
|
|
190
|
+
if (!result.ok) {
|
|
191
|
+
return {
|
|
192
|
+
content: [
|
|
193
|
+
{
|
|
194
|
+
type: 'text',
|
|
195
|
+
text: JSON.stringify(result.payload),
|
|
196
|
+
},
|
|
197
|
+
],
|
|
198
|
+
isError: true,
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
return {
|
|
202
|
+
content: [
|
|
203
|
+
{
|
|
204
|
+
type: 'text',
|
|
205
|
+
text: JSON.stringify(result.payload),
|
|
206
|
+
},
|
|
207
|
+
],
|
|
208
|
+
};
|
|
209
|
+
});
|
|
210
|
+
server.tool('jinn_stop_daemon', 'Stop the running jinn daemon. Idempotent: returns success even if already stopped.', {}, async () => {
|
|
211
|
+
const result = await stopDetachedDaemon(process.env);
|
|
212
|
+
if (result.ok) {
|
|
213
|
+
return { content: [{ type: 'text', text: JSON.stringify(result.payload) }] };
|
|
214
|
+
}
|
|
215
|
+
return { content: [{ type: 'text', text: result.payload }], isError: true };
|
|
216
|
+
});
|
|
217
|
+
return server;
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=operator-server.js.map
|