@jinn-network/client 0.1.0 → 0.1.1

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.
Files changed (101) hide show
  1. package/README.md +46 -9
  2. package/dist/adapters/mech/adapter.d.ts +1 -0
  3. package/dist/adapters/mech/adapter.js +35 -0
  4. package/dist/adapters/mech/adapter.js.map +1 -1
  5. package/dist/api/gather-status.js +1 -0
  6. package/dist/api/gather-status.js.map +1 -1
  7. package/dist/api/server.js +12 -0
  8. package/dist/api/server.js.map +1 -1
  9. package/dist/api/status-build.d.ts +1 -0
  10. package/dist/api/status-build.js.map +1 -1
  11. package/dist/api/status-rollup-build.d.ts +4 -0
  12. package/dist/api/status-rollup-build.js +4 -0
  13. package/dist/api/status-rollup-build.js.map +1 -1
  14. package/dist/bin/jinn-mcp.d.ts +14 -0
  15. package/dist/bin/jinn-mcp.js +19 -0
  16. package/dist/bin/jinn-mcp.js.map +1 -0
  17. package/dist/build-meta.json +1 -1
  18. package/dist/cli/commands/auth.d.ts +3 -0
  19. package/dist/cli/commands/auth.js +146 -0
  20. package/dist/cli/commands/auth.js.map +1 -0
  21. package/dist/cli/commands/bootstrap.js +1 -0
  22. package/dist/cli/commands/bootstrap.js.map +1 -1
  23. package/dist/cli/commands/doctor.js +43 -11
  24. package/dist/cli/commands/doctor.js.map +1 -1
  25. package/dist/cli/commands/fund-requirements.js +69 -1
  26. package/dist/cli/commands/fund-requirements.js.map +1 -1
  27. package/dist/cli/commands/history.js +1 -0
  28. package/dist/cli/commands/history.js.map +1 -1
  29. package/dist/cli/commands/init.js +31 -7
  30. package/dist/cli/commands/init.js.map +1 -1
  31. package/dist/cli/commands/keys-backup.js +142 -10
  32. package/dist/cli/commands/keys-backup.js.map +1 -1
  33. package/dist/cli/commands/logs.js +28 -13
  34. package/dist/cli/commands/logs.js.map +1 -1
  35. package/dist/cli/commands/plugin-install.d.ts +3 -0
  36. package/dist/cli/commands/plugin-install.js +799 -0
  37. package/dist/cli/commands/plugin-install.js.map +1 -0
  38. package/dist/cli/commands/quickstart.d.ts +3 -0
  39. package/dist/cli/commands/quickstart.js +236 -0
  40. package/dist/cli/commands/quickstart.js.map +1 -0
  41. package/dist/cli/commands/run.js +6 -0
  42. package/dist/cli/commands/run.js.map +1 -1
  43. package/dist/cli/commands/stop.js +1 -0
  44. package/dist/cli/commands/stop.js.map +1 -1
  45. package/dist/cli/commands/submit-intent.js +11 -1
  46. package/dist/cli/commands/submit-intent.js.map +1 -1
  47. package/dist/cli/commands/update.d.ts +3 -0
  48. package/dist/cli/commands/update.js +154 -0
  49. package/dist/cli/commands/update.js.map +1 -0
  50. package/dist/cli/commands/version.js +15 -1
  51. package/dist/cli/commands/version.js.map +1 -1
  52. package/dist/cli/deployment-digest.js +20 -4
  53. package/dist/cli/deployment-digest.js.map +1 -1
  54. package/dist/cli/index.js +8 -0
  55. package/dist/cli/index.js.map +1 -1
  56. package/dist/cli/password.d.ts +15 -0
  57. package/dist/cli/password.js +29 -1
  58. package/dist/cli/password.js.map +1 -1
  59. package/dist/config.d.ts +8 -0
  60. package/dist/config.js +8 -0
  61. package/dist/config.js.map +1 -1
  62. package/dist/daemon/balance-topup-loop.d.ts +40 -0
  63. package/dist/daemon/balance-topup-loop.js +96 -0
  64. package/dist/daemon/balance-topup-loop.js.map +1 -0
  65. package/dist/daemon/daemon.d.ts +7 -0
  66. package/dist/daemon/daemon.js +12 -0
  67. package/dist/daemon/daemon.js.map +1 -1
  68. package/dist/dashboard/index.html +500 -0
  69. package/dist/earning/bootstrap.d.ts +2 -0
  70. package/dist/earning/bootstrap.js +68 -14
  71. package/dist/earning/bootstrap.js.map +1 -1
  72. package/dist/earning/contracts.d.ts +17 -0
  73. package/dist/earning/contracts.js +7 -1
  74. package/dist/earning/contracts.js.map +1 -1
  75. package/dist/earning/faucet.d.ts +15 -0
  76. package/dist/earning/faucet.js +64 -0
  77. package/dist/earning/faucet.js.map +1 -0
  78. package/dist/earning/store.d.ts +5 -0
  79. package/dist/earning/store.js +7 -3
  80. package/dist/earning/store.js.map +1 -1
  81. package/dist/errors/unauthorized-account.d.ts +10 -0
  82. package/dist/errors/unauthorized-account.js +14 -0
  83. package/dist/errors/unauthorized-account.js.map +1 -0
  84. package/dist/main.js +30 -1
  85. package/dist/main.js.map +1 -1
  86. package/dist/mcp/operator-server.d.ts +34 -0
  87. package/dist/mcp/operator-server.js +219 -0
  88. package/dist/mcp/operator-server.js.map +1 -0
  89. package/dist/operator-errors.js +11 -0
  90. package/dist/operator-errors.js.map +1 -1
  91. package/dist/preflight/claude-auth.d.ts +57 -0
  92. package/dist/preflight/claude-auth.js +153 -0
  93. package/dist/preflight/claude-auth.js.map +1 -0
  94. package/dist/runner/claude.js +15 -0
  95. package/dist/runner/claude.js.map +1 -1
  96. package/dist/store/store.js +5 -0
  97. package/dist/store/store.js.map +1 -1
  98. package/dist/tx-retry.js +11 -1
  99. package/dist/tx-retry.js.map +1 -1
  100. package/package.json +12 -3
  101. package/skills/jinn-operator/SKILL.md +213 -0
@@ -1,12 +1,14 @@
1
1
  import { existsSync } from 'node:fs';
2
- import { isAbsolute, join } from 'node:path';
2
+ import { isAbsolute } from 'node:path';
3
3
  import { parseArgs } from 'node:util';
4
4
  import { COMMON_FLAGS } from '../command.js';
5
5
  import { emitResult } from '../output.js';
6
6
  import { emitEnvelope } from '../../errors/envelope.js';
7
7
  import { checkClaudeBinary } from '../../preflight/claude-binary.js';
8
+ import { detectAuthContext, probeClaudeAuth } from '../../preflight/claude-auth.js';
8
9
  import { getConfigPathFromArgs, loadConfig } from '../../config.js';
9
10
  import { getChainConfig } from '../../earning/contracts.js';
11
+ import { mnemonicKeystorePath } from '../../earning/store.js';
10
12
  async function checkNodeVersion() {
11
13
  const version = process.versions.node;
12
14
  const major = parseInt(version.split('.')[0], 10);
@@ -18,19 +20,19 @@ async function checkNodeVersion() {
18
20
  ...(ok ? {} : { remedy: 'Upgrade to Node.js 20 or newer.' }),
19
21
  };
20
22
  }
21
- async function checkKeystoreReadable(earningDir) {
22
- const keystorePath = join(earningDir, 'mnemonic.keystore.json');
23
+ function checkKeystorePresent(earningDir) {
24
+ const keystorePath = mnemonicKeystorePath(earningDir);
23
25
  if (existsSync(keystorePath)) {
24
26
  return {
25
- name: 'keystore_readable',
27
+ name: 'keystore_present',
26
28
  ok: true,
27
- detail: 'mnemonic keystore present in configured earning directory',
29
+ detail: `mnemonic keystore present at ${keystorePath}`,
28
30
  };
29
31
  }
30
32
  return {
31
- name: 'keystore_readable',
32
- ok: true, // Missing is fine before `jinn init`; not a blocker.
33
- detail: 'no keystore yet (expected on a fresh install)',
33
+ name: 'keystore_present',
34
+ ok: true, // Missing is fine before `jinn init`; `jinn run` / `bootstrap` will create it.
35
+ detail: 'no keystore yet run `jinn init` to create one',
34
36
  };
35
37
  }
36
38
  async function checkDeploymentLoaded(config) {
@@ -83,6 +85,21 @@ function claudeBinaryCheckForDoctor(claudePath, result) {
83
85
  }),
84
86
  };
85
87
  }
88
+ async function checkClaudeAuth() {
89
+ const cwd = process.cwd();
90
+ const context = detectAuthContext({ cwd });
91
+ const probe = probeClaudeAuth({ context, cwd });
92
+ return {
93
+ name: 'claude_auth',
94
+ ok: probe.authenticated,
95
+ detail: probe.authenticated
96
+ ? `${probe.detail} (${context})`
97
+ : `Not authenticated (${context})`,
98
+ ...(probe.authenticated
99
+ ? {}
100
+ : { remedy: 'Run `jinn auth` to authenticate Claude.' }),
101
+ };
102
+ }
86
103
  async function run(ctx) {
87
104
  let parsed;
88
105
  try {
@@ -107,7 +124,8 @@ async function run(ctx) {
107
124
  checks.push(await checkNodeVersion());
108
125
  const claudeResult = await checkClaudeBinary(config.claudePath);
109
126
  checks.push(claudeBinaryCheckForDoctor(config.claudePath, claudeResult));
110
- checks.push(await checkKeystoreReadable(config.earningDir));
127
+ checks.push(await checkClaudeAuth());
128
+ checks.push(checkKeystorePresent(config.earningDir));
111
129
  checks.push(await checkDeploymentLoaded(config));
112
130
  const blockingCount = checks.filter((c) => !c.ok).length;
113
131
  const payload = {
@@ -117,7 +135,7 @@ async function run(ctx) {
117
135
  ok: blockingCount === 0,
118
136
  blockingCount,
119
137
  };
120
- emitResult(payload, (v) => JSON.stringify(v, null, 2), {
138
+ emitResult(payload, (v) => humanDoctor(v), {
121
139
  json: Boolean(parsed.values.json),
122
140
  human: Boolean(parsed.values.human),
123
141
  writer: ctx.writer,
@@ -125,6 +143,19 @@ async function run(ctx) {
125
143
  noColor: Boolean(ctx.env['NO_COLOR']),
126
144
  });
127
145
  }
146
+ function humanDoctor(payload) {
147
+ const lines = [];
148
+ for (const check of payload.checks) {
149
+ const mark = check.ok ? 'ok ' : 'fail';
150
+ lines.push(`[${mark}] ${check.name}: ${check.detail}`);
151
+ if (check.remedy)
152
+ lines.push(` remedy: ${check.remedy}`);
153
+ }
154
+ lines.push(payload.ok
155
+ ? 'Summary: all checks passed.'
156
+ : `Summary: ${payload.blockingCount} blocking check(s) failed.`);
157
+ return lines.join('\n');
158
+ }
128
159
  const command = {
129
160
  name: 'doctor',
130
161
  summary: 'Preflight checks: answers "would jinn run work?" without running it',
@@ -134,7 +165,8 @@ Runs a set of non-mutating checks against the local environment and
134
165
  configuration:
135
166
  - node_version Node.js >= 20
136
167
  - claude_binary claude CLI resolvable on PATH
137
- - keystore_readable mnemonic keystore in configured earning directory (optional)
168
+ - claude_auth Claude CLI authenticated
169
+ - keystore_present mnemonic keystore in configured earning directory (optional)
138
170
  - deployment_loaded testnet/mainnet contract addresses resolved
139
171
 
140
172
  By default, emits a machine-readable JSON object with a checks array,
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,34 @@
1
+ import { createPublicClient, formatUnits, http } from 'viem';
2
+ import { base, baseSepolia } from 'viem/chains';
1
3
  import { COMMON_FLAGS, parseCommandArgs } from '../command.js';
2
4
  import { emitResult } from '../output.js';
3
5
  import { emitEnvelope } from '../../errors/envelope.js';
4
6
  import { loadConfig } from '../../config.js';
5
7
  import { FleetBootstrapper } from '../../earning/bootstrap.js';
8
+ import { getChainConfig } from '../../earning/contracts.js';
6
9
  import { resolveCliPassword } from '../password.js';
7
10
  /** §6.2 — `stack` only when `JINN_DEBUG=1` (exact string). */
8
11
  function envelopeDebug(env) {
9
12
  return env['JINN_DEBUG'] === '1';
10
13
  }
14
+ function formatAmount(wei, symbol) {
15
+ try {
16
+ // All three asset roles (native, bond, reward) use 18 decimals in Phase 1b.
17
+ return `${formatUnits(BigInt(wei), 18)} ${symbol}`;
18
+ }
19
+ catch {
20
+ return `${wei} wei (${symbol})`;
21
+ }
22
+ }
11
23
  function humanFundRequirements(payload) {
12
24
  if (payload.satisfied) {
13
25
  return 'Funding requirements satisfied. Nothing needed right now.';
14
26
  }
15
27
  const lines = ['Funding required before bootstrap can advance:'];
16
28
  for (const r of payload.requirements) {
17
- lines.push(`- ${r.role} @ ${r.address}: asset role ${r.asset}, need ${r.needWei} wei, have ${r.haveWei} wei`);
29
+ const need = formatAmount(r.needWei, r.details.tokenSymbol);
30
+ const have = formatAmount(r.haveWei, r.details.tokenSymbol);
31
+ lines.push(`- ${r.role} @ ${r.address}: need ${need}, have ${have}`);
18
32
  }
19
33
  return lines.join('\n');
20
34
  }
@@ -100,6 +114,60 @@ async function run(ctx) {
100
114
  details: { tokenAddress: null, tokenSymbol: 'ETH' },
101
115
  });
102
116
  }
117
+ else {
118
+ // Bootstrap is satisfied. Still probe per-Safe native ETH: the daemon's
119
+ // balance-topup-loop auto-tops from master at runtime, but operators
120
+ // running in tooling contexts (acceptance gate, CI, bare `submit-intent`)
121
+ // hit the mech-fee path before any topup tick fires. A Safe that holds
122
+ // less than the per-service `minSafeEth` threshold will silently fail on
123
+ // `createEvaluationJob`, wrapped as `GS013` at the Safe layer — surface
124
+ // it here so ops see the gap before running.
125
+ const chainKey = config.network === 'testnet' ? 'base-sepolia' : 'base';
126
+ const chainCfg = getChainConfig(chainKey, {
127
+ testnetL2DeploymentPath: config.testnetL2DeploymentPath,
128
+ testnetL2TokenDeploymentPath: config.testnetL2TokenDeploymentPath,
129
+ testnetMechDeploymentPath: config.testnetMechDeploymentPath,
130
+ testnetStolasDeploymentPath: config.testnetStolasDeploymentPath,
131
+ });
132
+ const viemChain = chainKey === 'base' ? base : baseSepolia;
133
+ const publicClient = createPublicClient({
134
+ chain: viemChain,
135
+ transport: http(config.rpcUrl),
136
+ });
137
+ const probeRows = await Promise.all(result.fleet_state.services
138
+ .filter(svc => svc.step === 'complete' && svc.safe_address)
139
+ .map(async (svc) => {
140
+ const address = svc.safe_address;
141
+ try {
142
+ const bal = await publicClient.getBalance({ address: address });
143
+ if (bal >= chainCfg.minSafeEth)
144
+ return null;
145
+ return {
146
+ role: `service_${svc.index}_safe`,
147
+ address,
148
+ asset: 'native',
149
+ haveWei: bal.toString(),
150
+ needWei: (chainCfg.minSafeEth - bal).toString(),
151
+ reason: `Service ${svc.index} Safe needs native ETH to pay mech fees (each evaluation job sends 99 wei). ` +
152
+ `The daemon's balance-topup-loop auto-refills from master at runtime; funding it manually is ` +
153
+ `required only when running CLI verbs (submit-intent, acceptance gate) outside the daemon.`,
154
+ blocks: 'run',
155
+ details: { tokenAddress: null, tokenSymbol: 'ETH' },
156
+ };
157
+ }
158
+ catch (err) {
159
+ // Probe failures are not a funding gap on their own; emit a warning
160
+ // so operators can distinguish "Safe OK" from "couldn't tell".
161
+ const message = err instanceof Error ? err.message : String(err);
162
+ process.stderr.write(`[warn] fund-requirements: failed to probe Safe ${address} for service ${svc.index}: ${message}\n`);
163
+ return null;
164
+ }
165
+ }));
166
+ for (const row of probeRows) {
167
+ if (row)
168
+ requirements.push(row);
169
+ }
170
+ }
103
171
  const payload = {
104
172
  schemaVersion: 1,
105
173
  generatedAt: new Date().toISOString(),
@@ -1 +1 @@
1
- {"version":3,"file":"fund-requirements.js","sourceRoot":"","sources":["../../../src/cli/commands/fund-requirements.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fund-requirements.js","sourceRoot":"","sources":["../../../src/cli/commands/fund-requirements.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,7 @@ async function run(ctx) {
14
14
  cursor: { type: 'string' },
15
15
  json: { type: 'boolean', default: false },
16
16
  human: { type: 'boolean', default: false },
17
+ config: { type: 'string' },
17
18
  },
18
19
  allowPositionals: false,
19
20
  });
@@ -1 +1 @@
1
- {"version":3,"file":"history.js","sourceRoot":"","sources":["../../../src/cli/commands/history.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,KAAK,UAAU,GAAG,CAAC,GAAmB;IACpC,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,SAAS,CAAC;YACjB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,OAAO,EAAE;gBACP,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE;gBACxC,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC1B,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;gBACzC,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;aAC3C;YACD,gBAAgB,EAAE,KAAK;SACxB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,YAAY,CACV;YACE,IAAI,EAAE,oBAAoB;YAC1B,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YACzD,UAAU,EAAE,yBAAyB;YACrC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;SAC5B,EACD,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CACvC,CAAC;QACF,OAAO;IACT,CAAC;IACD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,KAAe,EAAE,EAAE,CAAC,CAAC;IAC1D,MAAM,GAAG,GAAG,MAAM,sBAAsB,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,EAAE;QACrC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QAC1C,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAA2B;QAChD,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAA4B;KACnD,CAAC,CAAC;IACH,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;QACrD,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;QACjC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QACnC,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;KACtC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,OAAO,GAAkB;IAC7B,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,8EAA8E;IACvF,QAAQ,EAAE;;;;;;;;;CASX;IACC,GAAG;CACJ,CAAC;AAEF,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../../src/cli/commands/history.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,KAAK,UAAU,GAAG,CAAC,GAAmB;IACpC,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,SAAS,CAAC;YACjB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,OAAO,EAAE;gBACP,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE;gBACxC,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC1B,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;gBACzC,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;gBAC1C,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;aAC3B;YACD,gBAAgB,EAAE,KAAK;SACxB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,YAAY,CACV;YACE,IAAI,EAAE,oBAAoB;YAC1B,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YACzD,UAAU,EAAE,yBAAyB;YACrC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;SAC5B,EACD,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CACvC,CAAC;QACF,OAAO;IACT,CAAC;IACD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,KAAe,EAAE,EAAE,CAAC,CAAC;IAC1D,MAAM,GAAG,GAAG,MAAM,sBAAsB,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,EAAE;QACrC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QAC1C,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAA2B;QAChD,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAA4B;KACnD,CAAC,CAAC;IACH,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;QACrD,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;QACjC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QACnC,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;KACtC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,OAAO,GAAkB;IAC7B,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,8EAA8E;IACvF,QAAQ,EAAE;;;;;;;;;CASX;IACC,GAAG;CACJ,CAAC;AAEF,eAAe,OAAO,CAAC"}
@@ -1,7 +1,9 @@
1
1
  import { parseArgs } from 'node:util';
2
2
  import { join } from 'node:path';
3
+ import { COMMON_FLAGS } from '../command.js';
3
4
  import { emitResult } from '../output.js';
4
5
  import { emitEnvelope } from '../../errors/envelope.js';
6
+ import { loadConfig, getConfigPathFromArgs } from '../../config.js';
5
7
  import { FleetStateStore } from '../../earning/store.js';
6
8
  import { generateMnemonic, encryptMnemonic, decryptMnemonic, deriveMasterAddress, } from '../../earning/wallet.js';
7
9
  import { resolveCliPassword } from '../password.js';
@@ -10,11 +12,7 @@ async function run(ctx) {
10
12
  try {
11
13
  parsed = parseArgs({
12
14
  args: ctx.argv,
13
- options: {
14
- json: { type: 'boolean', default: false },
15
- human: { type: 'boolean', default: false },
16
- 'password-fd': { type: 'string' },
17
- },
15
+ options: { ...COMMON_FLAGS },
18
16
  allowPositionals: false,
19
17
  });
20
18
  }
@@ -37,7 +35,20 @@ async function run(ctx) {
37
35
  }, { writer: ctx.writer, exit: ctx.exit });
38
36
  return;
39
37
  }
40
- const earningDir = ctx.env['JINN_EARNING_DIR'] ?? join(process.env['HOME'] ?? '.', '.jinn-client', 'earning');
38
+ const configPath = getConfigPathFromArgs(ctx.argv) ?? getConfigPathFromArgs(process.argv.slice(2));
39
+ let configEarningDir;
40
+ let configNetwork;
41
+ try {
42
+ const cfg = loadConfig(configPath);
43
+ configEarningDir = cfg.earningDir;
44
+ configNetwork = cfg.network;
45
+ }
46
+ catch {
47
+ // Config file is optional; fall back to env var / default below.
48
+ }
49
+ const earningDir = ctx.env['JINN_EARNING_DIR'] ??
50
+ configEarningDir ??
51
+ join(process.env['HOME'] ?? '.', '.jinn-client', 'earning');
41
52
  const store = new FleetStateStore(earningDir);
42
53
  if (!store.hasMnemonicKeystore() && store.hasLegacyKeystore()) {
43
54
  await store.migrateLegacyFiles();
@@ -53,14 +64,27 @@ async function run(ctx) {
53
64
  await store.saveMnemonicKeystore(keystore);
54
65
  masterAddress = deriveMasterAddress(mnemonic);
55
66
  }
67
+ // Persist master_address so downstream verbs (fund-requirements,
68
+ // bootstrap) hydrate from the existing wallet instead of rolling a
69
+ // fresh HD mnemonic.
70
+ const network = ctx.env['JINN_NETWORK'] ?? configNetwork ?? 'testnet';
71
+ const chain = network === 'mainnet' ? 'base' : 'base-sepolia';
72
+ await store.patchFleet({ master_address: masterAddress, chain });
56
73
  emitResult({
57
74
  schemaVersion: 1,
58
75
  generatedAt: new Date().toISOString(),
59
76
  master: masterAddress,
60
77
  keystoreDir: earningDir,
78
+ nextStep: {
79
+ cli: 'jinn fund-requirements',
80
+ purpose: 'List addresses that need funding before bootstrap can advance.',
81
+ },
61
82
  }, (v) => {
62
83
  const value = v;
63
- return `Keystore ready.\nMaster: ${value.master}\nDirectory: ${value.keystoreDir}`;
84
+ return (`Keystore ready.\nMaster: ${value.master}\nDirectory: ${value.keystoreDir}\n` +
85
+ `Next: ${value.nextStep.cli}\n` +
86
+ `Backup: your JINN_PASSWORD and the mnemonic in this keystore are the only way to recover this wallet. ` +
87
+ `Run \`jinn keys backup\` to export the mnemonic.`);
64
88
  }, {
65
89
  json: Boolean(parsed.values.json),
66
90
  human: Boolean(parsed.values.human),
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,13 @@
1
1
  import { parseArgs } from 'node:util';
2
- import { writeFileSync } from 'node:fs';
2
+ import { existsSync, readFileSync, unlinkSync, writeFileSync } from 'node:fs';
3
+ import { homedir } from 'node:os';
3
4
  import { join } from 'node:path';
5
+ import { COMMON_FLAGS } from '../command.js';
4
6
  import { emitResult } from '../output.js';
5
7
  import { emitEnvelope } from '../../errors/envelope.js';
6
8
  import { FleetStateStore } from '../../earning/store.js';
7
- import { decryptMnemonic } from '../../earning/wallet.js';
9
+ import { decryptMnemonic, encryptMnemonic } from '../../earning/wallet.js';
10
+ import { resolveCurrentPassword, resolveNewPassword } from '../password.js';
8
11
  async function runBackup(ctx, rest) {
9
12
  let parsed;
10
13
  try {
@@ -14,6 +17,7 @@ async function runBackup(ctx, rest) {
14
17
  output: { type: 'string' },
15
18
  json: { type: 'boolean', default: false },
16
19
  human: { type: 'boolean', default: false },
20
+ config: { type: 'string' },
17
21
  },
18
22
  allowPositionals: false,
19
23
  });
@@ -52,6 +56,7 @@ async function runBackup(ctx, rest) {
52
56
  const keystore = await store.loadMnemonicKeystore();
53
57
  const mnemonic = await decryptMnemonic(keystore, password);
54
58
  writeFileSync(output, `${mnemonic}\n`, { encoding: 'utf-8', mode: 0o600 });
59
+ process.stderr.write(`[warn] Mnemonic written in plaintext to ${output} (mode 0600). Treat this file as seed material.\n`);
55
60
  emitResult({
56
61
  schemaVersion: 1,
57
62
  generatedAt: new Date().toISOString(),
@@ -69,37 +74,164 @@ async function runBackup(ctx, rest) {
69
74
  noColor: Boolean(ctx.env['NO_COLOR']),
70
75
  });
71
76
  }
77
+ async function runChangePassword(ctx, rest) {
78
+ let parsed;
79
+ try {
80
+ parsed = parseArgs({
81
+ args: rest,
82
+ options: { ...COMMON_FLAGS },
83
+ allowPositionals: false,
84
+ });
85
+ }
86
+ catch (err) {
87
+ emitEnvelope({
88
+ code: 'invalid_invocation',
89
+ message: err instanceof Error ? err.message : String(err),
90
+ exampleCli: 'JINN_PASSWORD=old JINN_NEW_PASSWORD=new jinn keys change-password',
91
+ details: { field: 'flags' },
92
+ }, { writer: ctx.writer, exit: ctx.exit });
93
+ return;
94
+ }
95
+ // 1. Resolve earning dir
96
+ const earningDir = ctx.env['JINN_EARNING_DIR'] ?? join(homedir(), '.jinn-client', 'earning');
97
+ const store = new FleetStateStore(earningDir);
98
+ // 2. Check keystore exists
99
+ if (!store.hasMnemonicKeystore()) {
100
+ emitEnvelope({
101
+ code: 'invalid_invocation',
102
+ message: 'No keystore found. Run `jinn init` first.',
103
+ exampleCli: 'jinn init',
104
+ details: { field: 'keystore' },
105
+ }, { writer: ctx.writer, exit: ctx.exit });
106
+ return;
107
+ }
108
+ // 3. Resolve current password
109
+ const current = resolveCurrentPassword(ctx.argv, ctx.env);
110
+ if (!current.ok) {
111
+ emitEnvelope({
112
+ code: 'invalid_invocation',
113
+ message: current.message,
114
+ exampleCli: 'JINN_PASSWORD=old JINN_NEW_PASSWORD=new jinn keys change-password',
115
+ details: { field: 'JINN_PASSWORD' },
116
+ }, { writer: ctx.writer, exit: ctx.exit });
117
+ return;
118
+ }
119
+ // 4. Decrypt mnemonic
120
+ let mnemonic;
121
+ try {
122
+ mnemonic = await decryptMnemonic(await store.loadMnemonicKeystore(), current.password);
123
+ }
124
+ catch {
125
+ emitEnvelope({
126
+ code: 'invalid_invocation',
127
+ message: 'Failed to decrypt keystore. Wrong password?',
128
+ exampleCli: 'JINN_PASSWORD=correct JINN_NEW_PASSWORD=new jinn keys change-password',
129
+ details: { field: 'JINN_PASSWORD' },
130
+ }, { writer: ctx.writer, exit: ctx.exit });
131
+ return;
132
+ }
133
+ // 5. Resolve new password
134
+ const newPass = resolveNewPassword(ctx.env);
135
+ if (!newPass.ok) {
136
+ emitEnvelope({
137
+ code: 'invalid_invocation',
138
+ message: newPass.message,
139
+ exampleCli: 'JINN_PASSWORD=old JINN_NEW_PASSWORD=new jinn keys change-password',
140
+ details: { field: 'JINN_NEW_PASSWORD' },
141
+ }, { writer: ctx.writer, exit: ctx.exit });
142
+ return;
143
+ }
144
+ // 6. Re-encrypt
145
+ const newKeystore = await encryptMnemonic(mnemonic, newPass.password);
146
+ // 7. Check if daemon is running (read pidfile, process.kill(pid, 0))
147
+ const pidPath = join(earningDir, 'daemon.pid');
148
+ if (existsSync(pidPath)) {
149
+ try {
150
+ const pid = parseInt(readFileSync(pidPath, 'utf-8').trim(), 10);
151
+ process.kill(pid, 0); // Just checks if process exists
152
+ console.error(`[warn] Daemon (pid ${pid}) is running. The new password takes effect on next restart.`);
153
+ }
154
+ catch {
155
+ /* daemon not running, ignore */
156
+ }
157
+ }
158
+ // 8. Save new keystore
159
+ await store.saveMnemonicKeystore(newKeystore);
160
+ // 9. Delete password file if it exists
161
+ const home = ctx.env['HOME'] ?? homedir();
162
+ const passwordFilePath = join(home, '.jinn-client', 'keystore-password');
163
+ let passwordFileDeleted = false;
164
+ if (existsSync(passwordFilePath)) {
165
+ unlinkSync(passwordFilePath);
166
+ passwordFileDeleted = true;
167
+ }
168
+ // 10. Emit result
169
+ emitResult({
170
+ schemaVersion: 1,
171
+ generatedAt: new Date().toISOString(),
172
+ verb: 'keys change-password',
173
+ keystoreDir: earningDir,
174
+ passwordFileDeleted,
175
+ }, (v) => {
176
+ const val = v;
177
+ return (`Password changed.\nKeystore: ${val.keystoreDir}` +
178
+ (val.passwordFileDeleted ? '\nAuto-generated password file deleted.' : '') +
179
+ '\nSet JINN_PASSWORD for future commands.');
180
+ }, {
181
+ json: Boolean(parsed.values.json),
182
+ human: Boolean(parsed.values.human),
183
+ writer: ctx.writer,
184
+ stdoutIsTty: ctx.stdoutIsTty,
185
+ noColor: Boolean(ctx.env['NO_COLOR']),
186
+ });
187
+ }
72
188
  async function run(ctx) {
73
189
  const [subverb, ...rest] = ctx.argv;
74
190
  if (!subverb) {
75
191
  emitEnvelope({
76
192
  code: 'invalid_invocation',
77
- message: 'jinn keys requires a subverb: backup',
193
+ message: 'jinn keys requires a subverb: backup, change-password',
78
194
  exampleCli: 'jinn keys backup --output /tmp/mnemonic.txt',
79
- details: { field: 'subverb', expected: 'backup' },
195
+ details: { field: 'subverb', expected: 'backup | change-password' },
80
196
  }, { writer: ctx.writer, exit: ctx.exit });
81
197
  return;
82
198
  }
83
199
  if (subverb === 'backup')
84
200
  return runBackup(ctx, rest);
201
+ if (subverb === 'change-password')
202
+ return runChangePassword(ctx, rest);
85
203
  emitEnvelope({
86
204
  code: 'invalid_invocation',
87
205
  message: `Unknown keys subverb: ${subverb}`,
88
206
  exampleCli: 'jinn keys backup --output /tmp/mnemonic.txt',
89
- details: { field: 'subverb', expected: 'backup' },
207
+ details: { field: 'subverb', expected: 'backup | change-password' },
90
208
  }, { writer: ctx.writer, exit: ctx.exit });
91
209
  }
92
210
  const command = {
93
211
  name: 'keys',
94
- summary: 'Keystore management: backup',
95
- helpText: `Usage: jinn keys backup --output <path> [--human]
212
+ summary: 'Keystore management: backup, change-password',
213
+ helpText: `Usage:
214
+ jinn keys backup --output <path> [--human]
215
+ jinn keys change-password [--human]
216
+
217
+ Subverbs:
218
+ backup Decrypt the keystore and write the mnemonic to a file.
219
+ change-password Re-encrypt the keystore with a new password.
220
+
221
+ backup:
222
+ Decrypts the local keystore using JINN_PASSWORD and writes the
223
+ mnemonic to <path> with mode 0600. Idempotent: same mnemonic →
224
+ same output. No other side effects.
96
225
 
97
- Decrypts the local keystore using JINN_PASSWORD and writes the
98
- mnemonic to <path> with mode 0600. Idempotent: same mnemonic →
99
- same output. No other side effects.
226
+ change-password:
227
+ Decrypts the keystore with the current password (from
228
+ ~/.jinn-client/keystore-password, JINN_PASSWORD, or --password-fd)
229
+ and re-encrypts it with JINN_NEW_PASSWORD (min 8 characters).
230
+ Deletes the auto-generated password file if present.
100
231
 
101
232
  Examples:
102
233
  JINN_PASSWORD=secret jinn keys backup --output ~/backup/jinn.txt
234
+ JINN_PASSWORD=old JINN_NEW_PASSWORD=mynewpass jinn keys change-password
103
235
  `,
104
236
  run,
105
237
  };
@@ -1 +1 @@
1
- {"version":3,"file":"keys-backup.js","sourceRoot":"","sources":["../../../src/cli/commands/keys-backup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"keys-backup.js","sourceRoot":"","sources":["../../../src/cli/commands/keys-backup.ts"],"names":[],"mappings":"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"}