jaspervault_cli 1.0.24 → 1.0.26

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 CHANGED
@@ -1,4 +1,4 @@
1
- # JasperVault CLI (`jv`)
1
+ # JasperVault CLI
2
2
 
3
3
  Trade perpetuals on JasperVault through AI conversation. Install this CLI and connect your AI assistant (OpenClaw, Cursor, Claude Code) — then just talk to place orders, set take-profits, and manage positions without touching the command line.
4
4
 
@@ -21,14 +21,14 @@ jv --version
21
21
  ### 2. Install JasperVault Skill to OpenClaw
22
22
 
23
23
  ```bash
24
- jv init --ai openclaw
24
+ jv skill install --ai openclaw
25
25
  ```
26
26
 
27
27
  This installs the trading skill to `~/.openclaw/skills/jasper-vault-cli/SKILL.md`. OpenClaw will now know how to trade on your behalf.
28
28
 
29
29
  > If the skill already exists, add `--force` to overwrite:
30
30
  > ```bash
31
- > jv init --ai openclaw --force
31
+ > jv skill install --ai openclaw --force
32
32
  > ```
33
33
 
34
34
  ### 3. Initialize Your Wallet (One-Time Setup)
@@ -58,11 +58,11 @@ Just talk to OpenClaw. Examples:
58
58
  ## Install for Other AI Platforms
59
59
 
60
60
  ```bash
61
- jv init --ai cursor # Cursor (current project)
62
- jv init --ai cursor --global # Cursor (user-level)
63
- jv init --ai claude # Claude Code (current project)
64
- jv init --ai claude --global # Claude Code (user-level)
65
- jv init --ai all # All platforms at once
61
+ jv skill install --ai cursor # Cursor (current project)
62
+ jv skill install --ai cursor --global # Cursor (user-level)
63
+ jv skill install --ai claude # Claude Code (current project)
64
+ jv skill install --ai claude --global # Claude Code (user-level)
65
+ jv skill install --ai all # All platforms at once
66
66
  ```
67
67
 
68
68
  Options:
@@ -85,9 +85,9 @@ All configuration is done via environment variables. For most users, **no config
85
85
  | `JV_JASPERVAULT_RPC_URL` | No | JasperVault chain RPC URL override | built-in |
86
86
  | `JV_SUBGRAPH_URL` | No | Subgraph endpoint override | built-in per network |
87
87
  | `WC_PROJECT_ID` | No | WalletConnect Cloud project ID (get one at [cloud.reown.com](https://cloud.reown.com)) | — |
88
- | `PRIVATE_KEY` | No* | EOA wallet private key; only needed for traditional `vault init` and `deposit` | — |
88
+ | `PRIVATE_KEY` | No* | EOA wallet private key; when set, `deposit` and `vault init` execute directly without WalletConnect | — |
89
89
 
90
- \* Not required when using the WalletConnect flow (`vault setup`, `deposit info`).
90
+ \* Not required when using the WalletConnect flow (`vault setup`, `deposit`).
91
91
 
92
92
  ### Connecting to a Different Environment
93
93
 
@@ -111,7 +111,15 @@ To deposit tokens from Base to JasperVault, tell OpenClaw:
111
111
 
112
112
  > **"Deposit 100 JUSDC into my vault"**
113
113
 
114
- OpenClaw will fetch the transaction data and send it to your phone via WalletConnect for approval.
114
+ Or run it directly:
115
+
116
+ ```bash
117
+ jv deposit --token jusdc --amount 100 --pretty
118
+ ```
119
+
120
+ The CLI auto-detects how to sign:
121
+ - **`PRIVATE_KEY` set** → signs and sends the transaction directly
122
+ - **No `PRIVATE_KEY`** → displays a WalletConnect QR code; scan with your mobile wallet to approve on your phone
115
123
 
116
124
  ---
117
125
 
package/dist/bin/jv.js CHANGED
@@ -11,7 +11,7 @@ import { registerTpCommand } from '../src/commands/tp.js';
11
11
  import { registerSlCommand } from '../src/commands/sl.js';
12
12
  import { registerVaultCommand } from '../src/commands/vault.js';
13
13
  import { registerDepositCommand } from '../src/commands/deposit.js';
14
- import { registerInitCommand } from '../src/commands/init.js';
14
+ import { registerSkillCommand } from '../src/commands/skill.js';
15
15
  import { registerPriceCommand } from '../src/commands/price.js';
16
16
  const __dirname = dirname(fileURLToPath(import.meta.url));
17
17
  const { version } = JSON.parse(readFileSync(join(__dirname, '../../package.json'), 'utf-8'));
@@ -28,7 +28,7 @@ registerLimitOrderCommand(program);
28
28
  registerOrdersCommand(program);
29
29
  registerVaultCommand(program);
30
30
  registerDepositCommand(program);
31
- registerInitCommand(program);
31
+ registerSkillCommand(program);
32
32
  registerPriceCommand(program);
33
33
  program.parse();
34
34
  //# sourceMappingURL=jv.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"jv.js","sourceRoot":"","sources":["../../bin/jv.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,EAAE,OAAO,CAAC,CACtC,CAAC;AAEzB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,IAAI,CAAC;KACV,WAAW,CAAC,6DAA6D,CAAC;KAC1E,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3B,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3B,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,yBAAyB,CAAC,OAAO,CAAC,CAAC;AACnC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAE9B,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"jv.js","sourceRoot":"","sources":["../../bin/jv.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,EAAE,OAAO,CAAC,CACtC,CAAC;AAEzB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,IAAI,CAAC;KACV,WAAW,CAAC,6DAA6D,CAAC;KAC1E,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3B,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3B,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,yBAAyB,CAAC,OAAO,CAAC,CAAC;AACnC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAE9B,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { Command } from 'commander';
2
- import { ethers } from 'ethers';
2
+ import type { Provider } from 'ethers';
3
3
  import type { WarpTokenConfig } from '../services/chain-config.js';
4
4
  export interface UnsignedTx {
5
5
  to: string;
@@ -26,7 +26,7 @@ export interface DepositTxInfo {
26
26
  /**
27
27
  * Compute vault address from vault factory (read-only).
28
28
  */
29
- export declare function computeVaultAddress(provider: ethers.Provider, vaultFactoryAddress: string, ownerAddress: string, vaultIndex: number): Promise<string>;
29
+ export declare function computeVaultAddress(provider: Provider, vaultFactoryAddress: string, ownerAddress: string, vaultIndex: number): Promise<string>;
30
30
  /**
31
31
  * Build approve tx calldata for ERC20.
32
32
  */
@@ -42,7 +42,7 @@ export declare function buildDepositTransactions(warpConfig: WarpTokenConfig, re
42
42
  /**
43
43
  * Check balances and allowance for deposit (read-only).
44
44
  */
45
- export declare function checkDepositBalances(baseProvider: ethers.Provider, walletAddress: string, warpConfig: WarpTokenConfig, amountWei: bigint): Promise<{
45
+ export declare function checkDepositBalances(baseProvider: Provider, walletAddress: string, warpConfig: WarpTokenConfig, amountWei: bigint): Promise<{
46
46
  underlyingBalance: bigint;
47
47
  warpBalance: bigint;
48
48
  allowance: bigint;
@@ -52,7 +52,7 @@ export declare function checkDepositBalances(baseProvider: ethers.Provider, wall
52
52
  /**
53
53
  * Poll for token arrival on JasperVault chain.
54
54
  */
55
- export declare function pollForDepositArrival(jaspervaultProvider: ethers.Provider, destWarpRouterAddress: string, recipient: string, initialBalance: bigint, timeoutMs?: number): Promise<{
55
+ export declare function pollForDepositArrival(jaspervaultProvider: Provider, destWarpRouterAddress: string, recipient: string, initialBalance: bigint, timeoutMs?: number): Promise<{
56
56
  arrived: boolean;
57
57
  arrivalTimeMs?: number;
58
58
  }>;
@@ -1,6 +1,7 @@
1
- import { ethers } from 'ethers';
1
+ import { Contract, Interface, JsonRpcProvider, MaxUint256, Wallet, parseUnits, zeroPadValue, } from 'ethers';
2
2
  import { printJson, exitWithError, EXIT_CODES } from '../utils/output.js';
3
3
  import { getWarpConfig, getBaseRpcUrl, getJaspervaultRpcUrl, getNetworkConfig, } from '../services/chain-config.js';
4
+ import { initWcAndConnect, startHeartbeat } from './connect.js';
4
5
  const ERC20_ABI = [
5
6
  'function balanceOf(address account) external view returns (uint256)',
6
7
  'function allowance(address owner, address spender) external view returns (uint256)',
@@ -22,7 +23,7 @@ const POLL_INTERVAL_MS = 1000;
22
23
  * Compute vault address from vault factory (read-only).
23
24
  */
24
25
  export async function computeVaultAddress(provider, vaultFactoryAddress, ownerAddress, vaultIndex) {
25
- const iface = new ethers.Interface(VAULT_FACTORY_ABI);
26
+ const iface = new Interface(VAULT_FACTORY_ABI);
26
27
  const data = iface.encodeFunctionData('getAddress', [ownerAddress, BigInt(vaultIndex)]);
27
28
  const result = await provider.call({ to: vaultFactoryAddress, data });
28
29
  const decoded = iface.decodeFunctionResult('getAddress', result);
@@ -32,15 +33,15 @@ export async function computeVaultAddress(provider, vaultFactoryAddress, ownerAd
32
33
  * Build approve tx calldata for ERC20.
33
34
  */
34
35
  export function buildApproveCalldata(spender, amountWei) {
35
- const iface = new ethers.Interface(ERC20_ABI);
36
+ const iface = new Interface(ERC20_ABI);
36
37
  return iface.encodeFunctionData('approve', [spender, amountWei]);
37
38
  }
38
39
  /**
39
40
  * Build transferRemote tx calldata for Hyperlane Warp.
40
41
  */
41
42
  export function buildTransferRemoteCalldata(destinationDomain, recipient, amountWei) {
42
- const iface = new ethers.Interface(HYP_ERC20_ABI);
43
- const recipientBytes32 = ethers.zeroPadValue(recipient, 32);
43
+ const iface = new Interface(HYP_ERC20_ABI);
44
+ const recipientBytes32 = zeroPadValue(recipient, 32);
44
45
  return iface.encodeFunctionData('transferRemote', [
45
46
  destinationDomain,
46
47
  recipientBytes32,
@@ -60,7 +61,7 @@ export function buildDepositTransactions(warpConfig, recipient, amountWei, needs
60
61
  required: true,
61
62
  tx: {
62
63
  to: warpConfig.base.underlyingToken,
63
- data: buildApproveCalldata(warpConfig.base.warpRouter, ethers.MaxUint256),
64
+ data: buildApproveCalldata(warpConfig.base.warpRouter, MaxUint256),
64
65
  value: '0x0',
65
66
  chainId: chainIdHex,
66
67
  },
@@ -83,8 +84,8 @@ export function buildDepositTransactions(warpConfig, recipient, amountWei, needs
83
84
  * Check balances and allowance for deposit (read-only).
84
85
  */
85
86
  export async function checkDepositBalances(baseProvider, walletAddress, warpConfig, amountWei) {
86
- const underlyingToken = new ethers.Contract(warpConfig.base.underlyingToken, ERC20_ABI, baseProvider);
87
- const warpRouter = new ethers.Contract(warpConfig.base.warpRouter, HYP_ERC20_ABI, baseProvider);
87
+ const underlyingToken = new Contract(warpConfig.base.underlyingToken, ERC20_ABI, baseProvider);
88
+ const warpRouter = new Contract(warpConfig.base.warpRouter, HYP_ERC20_ABI, baseProvider);
88
89
  const [underlyingBalance, warpBalance, allowance] = await Promise.all([
89
90
  underlyingToken.balanceOf(walletAddress),
90
91
  warpRouter.balanceOf(walletAddress),
@@ -98,7 +99,7 @@ export async function checkDepositBalances(baseProvider, walletAddress, warpConf
98
99
  * Poll for token arrival on JasperVault chain.
99
100
  */
100
101
  export async function pollForDepositArrival(jaspervaultProvider, destWarpRouterAddress, recipient, initialBalance, timeoutMs = POLL_TIMEOUT_MS) {
101
- const destWarpRouter = new ethers.Contract(destWarpRouterAddress, ERC20_ABI, jaspervaultProvider);
102
+ const destWarpRouter = new Contract(destWarpRouterAddress, ERC20_ABI, jaspervaultProvider);
102
103
  const pollStart = Date.now();
103
104
  while (Date.now() - pollStart < timeoutMs) {
104
105
  try {
@@ -114,148 +115,160 @@ export async function pollForDepositArrival(jaspervaultProvider, destWarpRouterA
114
115
  }
115
116
  return { arrived: false };
116
117
  }
118
+ /**
119
+ * Send a transaction via WalletConnect and wait for on-chain confirmation.
120
+ */
121
+ async function sendWcTransaction(client, session, walletAddress, to, data, baseProvider, phase, heartbeatMsg) {
122
+ const heartbeat = startHeartbeat(phase, heartbeatMsg);
123
+ let txHash;
124
+ try {
125
+ txHash = (await client.request({
126
+ topic: session.topic,
127
+ chainId: `eip155:${BASE_CHAIN_ID}`,
128
+ request: {
129
+ method: 'eth_sendTransaction',
130
+ params: [{
131
+ from: walletAddress,
132
+ to,
133
+ data,
134
+ value: '0x0',
135
+ }],
136
+ },
137
+ }));
138
+ }
139
+ catch (err) {
140
+ heartbeat.stop();
141
+ throw new Error(`Transaction rejected or failed: ${err.message}`);
142
+ }
143
+ heartbeat.stop();
144
+ await baseProvider.waitForTransaction(txHash, 1);
145
+ return txHash;
146
+ }
117
147
  export function registerDepositCommand(program) {
118
- const deposit = program
148
+ program
119
149
  .command('deposit')
120
- .description('Deposit tokens via Hyperlane Warp Route (Base -> JasperVault)');
121
- deposit
122
- .command('info')
123
- .description('Output unsigned tx data for WalletConnect (approve + transferRemote)')
124
- .requiredOption('--wallet <address>', 'User EOA wallet address (from WalletConnect)')
150
+ .description('Deposit tokens from Base to JasperVault (auto-detects PRIVATE_KEY or WalletConnect)')
125
151
  .requiredOption('--token <symbol>', 'Token: jbtc | jusdc | cbbtc | usdc')
126
- .requiredOption('--amount <value>', 'Amount in human-readable units, e.g. "100" for USDC')
127
- .option('--network <name>', 'Network for vault address computation', 'jaspervault')
128
- .option('--vault-index <n>', 'Vault index for computing recipient', '1')
129
- .option('--pretty', 'Pretty-print JSON output')
130
- .action(async (opts) => {
131
- const walletAddress = ethers.getAddress(opts.wallet);
132
- const warpConfig = getWarpConfig(opts.token);
133
- const baseRpc = getBaseRpcUrl();
134
- const jaspervaultRpc = getJaspervaultRpcUrl();
135
- const net = getNetworkConfig(opts.network);
136
- const baseProvider = new ethers.JsonRpcProvider(baseRpc);
137
- const jaspervaultProvider = new ethers.JsonRpcProvider(jaspervaultRpc);
138
- const vaultIndex = parseInt(opts.vaultIndex, 10);
139
- const recipient = await computeVaultAddress(jaspervaultProvider, net.contracts.vaultFactory, walletAddress, vaultIndex);
140
- const amountWei = ethers.parseUnits(opts.amount, warpConfig.decimals);
141
- const { hasEnough, needsApprove } = await checkDepositBalances(baseProvider, walletAddress, warpConfig, amountWei);
142
- if (!hasEnough) {
143
- exitWithError(`Insufficient balance. Required: ${opts.amount} ${warpConfig.symbol}`, EXIT_CODES.BUSINESS_ERROR);
144
- }
145
- const transactions = buildDepositTransactions(warpConfig, recipient, amountWei, needsApprove);
146
- const result = {
147
- success: true,
148
- recipient,
149
- token: warpConfig.symbol,
150
- amount: opts.amount,
151
- amountWei: amountWei.toString(),
152
- transactions,
153
- polling: {
154
- description: 'After tx confirms, check arrival on JasperVault',
155
- command: `jv deposit poll --recipient ${recipient} --token ${opts.token} --network ${opts.network}`,
156
- },
157
- };
158
- printJson(result, opts.pretty);
159
- });
160
- deposit
161
- .command('poll')
162
- .description('Poll for token arrival on JasperVault chain')
163
- .requiredOption('--recipient <address>', 'Vault address (recipient)')
164
- .requiredOption('--token <symbol>', 'Token: jbtc | jusdc | cbbtc | usdc')
165
- .option('--timeout <seconds>', 'Poll timeout in seconds', '60')
166
- .option('--network <name>', 'Network (for dest warp router)', 'jaspervault')
167
- .option('--pretty', 'Pretty-print JSON output')
168
- .action(async (opts) => {
169
- const warpConfig = getWarpConfig(opts.token);
170
- const jaspervaultRpc = getJaspervaultRpcUrl();
171
- const jaspervaultProvider = new ethers.JsonRpcProvider(jaspervaultRpc);
172
- const destWarpRouter = new ethers.Contract(warpConfig.jaspervault.warpRouter, ERC20_ABI, jaspervaultProvider);
173
- let initialBalance = 0n;
174
- try {
175
- initialBalance = await destWarpRouter.balanceOf(opts.recipient);
176
- }
177
- catch {
178
- // ignore
179
- }
180
- const timeoutMs = parseInt(opts.timeout, 10) * 1000;
181
- const { arrived, arrivalTimeMs } = await pollForDepositArrival(jaspervaultProvider, warpConfig.jaspervault.warpRouter, opts.recipient, initialBalance, timeoutMs);
182
- const result = {
183
- success: true,
184
- arrived,
185
- arrivalTimeMs: arrived ? arrivalTimeMs : undefined,
186
- message: arrived
187
- ? `Tokens arrived on JasperVault in ${arrivalTimeMs}ms`
188
- : 'Timeout; tokens may still be in transit to JasperVault',
189
- };
190
- printJson(result, opts.pretty);
191
- });
192
- deposit
193
- .command('run', { isDefault: true })
194
- .description('Execute deposit (requires PRIVATE_KEY)')
195
- .requiredOption('--token <symbol>', 'Token: jbtc | jusdc | cbbtc | usdc')
196
- .requiredOption('--amount <value>', 'Amount in human-readable units, e.g. "100" for USDC')
152
+ .requiredOption('--amount <value>', 'Amount in human-readable units, e.g. "1000" for JUSDC')
197
153
  .option('--network <name>', 'Network for vault address computation', 'jaspervault')
198
154
  .option('--vault-index <n>', 'Vault index for computing recipient', '1')
155
+ .option('--timeout <seconds>', 'WalletConnect connection timeout in seconds', '120')
199
156
  .option('--no-wait', 'Skip polling for arrival on JasperVault')
200
157
  .option('--pretty', 'Pretty-print JSON output')
201
158
  .action(async (opts) => {
202
159
  const privateKey = process.env.PRIVATE_KEY;
203
- if (!privateKey) {
204
- exitWithError('PRIVATE_KEY environment variable is not set. Set it to your EOA wallet private key.', EXIT_CODES.CONFIG_ERROR);
160
+ const mode = privateKey ? 'pk' : 'wc';
161
+ let walletAddress;
162
+ let wcClient = null;
163
+ let wcSession = null;
164
+ // Step 1: obtain wallet address + signing capability
165
+ if (mode === 'pk') {
166
+ walletAddress = new Wallet(privateKey).address;
167
+ }
168
+ else {
169
+ const timeoutS = parseInt(opts.timeout, 10) || 120;
170
+ let wcResult;
171
+ try {
172
+ wcResult = await initWcAndConnect({
173
+ timeoutS,
174
+ onAwaiting: (uri, { qrCodeUrl }) => {
175
+ printJson({
176
+ status: 'awaiting_connection',
177
+ qrCodeUrl,
178
+ uri,
179
+ message: 'Scan QR code or paste URI in wallet to connect',
180
+ }, opts.pretty);
181
+ },
182
+ });
183
+ }
184
+ catch (err) {
185
+ printJson({ success: false, message: err.message }, opts.pretty);
186
+ process.exit(EXIT_CODES.BUSINESS_ERROR);
187
+ }
188
+ wcClient = wcResult.client;
189
+ wcSession = wcResult.session;
190
+ walletAddress = wcResult.walletAddress;
205
191
  }
206
- const wallet = new ethers.Wallet(privateKey);
207
192
  const warpConfig = getWarpConfig(opts.token);
208
193
  const baseRpc = getBaseRpcUrl();
209
194
  const jaspervaultRpc = getJaspervaultRpcUrl();
210
195
  const net = getNetworkConfig(opts.network);
211
- const baseProvider = new ethers.JsonRpcProvider(baseRpc);
212
- const jaspervaultProvider = new ethers.JsonRpcProvider(jaspervaultRpc);
196
+ const baseProvider = new JsonRpcProvider(baseRpc);
197
+ const jaspervaultProvider = new JsonRpcProvider(jaspervaultRpc);
198
+ // Step 2: compute vault address + check balance
213
199
  const vaultIndex = parseInt(opts.vaultIndex, 10);
214
- const recipient = await computeVaultAddress(jaspervaultProvider, net.contracts.vaultFactory, wallet.address, vaultIndex);
215
- const amountWei = ethers.parseUnits(opts.amount, warpConfig.decimals);
216
- const { hasEnough, needsApprove } = await checkDepositBalances(baseProvider, wallet.address, warpConfig, amountWei);
200
+ const recipient = await computeVaultAddress(jaspervaultProvider, net.contracts.vaultFactory, walletAddress, vaultIndex);
201
+ const amountWei = parseUnits(opts.amount, warpConfig.decimals);
202
+ const { hasEnough, needsApprove } = await checkDepositBalances(baseProvider, walletAddress, warpConfig, amountWei);
217
203
  if (!hasEnough) {
218
204
  exitWithError(`Insufficient balance. Required: ${opts.amount} ${warpConfig.symbol}`, EXIT_CODES.BUSINESS_ERROR);
219
205
  }
220
- const underlyingToken = new ethers.Contract(warpConfig.base.underlyingToken, ERC20_ABI, wallet.connect(baseProvider));
221
- const warpRouter = new ethers.Contract(warpConfig.base.warpRouter, HYP_ERC20_ABI, wallet.connect(baseProvider));
222
- if (needsApprove) {
223
- const approveTx = await underlyingToken.approve(warpConfig.base.warpRouter, ethers.MaxUint256);
224
- await approveTx.wait(1);
225
- }
206
+ let transferTxHash;
226
207
  const transferStartTime = Date.now();
227
- const recipientBytes32 = ethers.zeroPadValue(recipient, 32);
228
- const tx = await warpRouter.transferRemote(warpConfig.jaspervault.domain, recipientBytes32, amountWei, { value: 0n });
229
- const receipt = await tx.wait(1);
208
+ if (mode === 'pk') {
209
+ // Step 3 & 4 (PK): sign and send directly
210
+ const wallet = new Wallet(privateKey, baseProvider);
211
+ const underlyingToken = new Contract(warpConfig.base.underlyingToken, ERC20_ABI, wallet);
212
+ const warpRouter = new Contract(warpConfig.base.warpRouter, HYP_ERC20_ABI, wallet);
213
+ if (needsApprove) {
214
+ const approveTx = await underlyingToken.approve(warpConfig.base.warpRouter, MaxUint256);
215
+ await approveTx.wait(1);
216
+ }
217
+ const recipientBytes32 = zeroPadValue(recipient, 32);
218
+ const tx = await warpRouter.transferRemote(warpConfig.jaspervault.domain, recipientBytes32, amountWei, { value: 0n });
219
+ const receipt = await tx.wait(1);
220
+ transferTxHash = receipt.hash;
221
+ }
222
+ else {
223
+ // Step 3 & 4 (WC): send via WalletConnect
224
+ if (needsApprove) {
225
+ const approveCalldata = buildApproveCalldata(warpConfig.base.warpRouter, MaxUint256);
226
+ await sendWcTransaction(wcClient, wcSession, walletAddress, warpConfig.base.underlyingToken, approveCalldata, baseProvider, 'approve', 'Waiting for approve confirmation on wallet...');
227
+ }
228
+ const transferCalldata = buildTransferRemoteCalldata(warpConfig.jaspervault.domain, recipient, amountWei);
229
+ transferTxHash = await sendWcTransaction(wcClient, wcSession, walletAddress, warpConfig.base.warpRouter, transferCalldata, baseProvider, 'transfer', 'Waiting for transfer confirmation on wallet...');
230
+ }
230
231
  const baseChainConfirmTimeMs = Date.now() - transferStartTime;
232
+ // Step 5: poll for arrival + output result
231
233
  const result = {
232
234
  success: true,
233
235
  message: 'Deposit transaction confirmed on Base',
234
- transactionHash: receipt.hash,
236
+ transactionHash: transferTxHash,
235
237
  recipient,
236
238
  token: warpConfig.symbol,
237
239
  amount: opts.amount,
238
240
  baseChainConfirmTimeMs,
239
241
  };
240
- if (!opts.wait) {
241
- printJson(result, opts.pretty);
242
- return;
243
- }
244
- let initialBalance = 0n;
245
- try {
246
- const destWarpRouter = new ethers.Contract(warpConfig.jaspervault.warpRouter, ERC20_ABI, jaspervaultProvider);
247
- initialBalance = await destWarpRouter.balanceOf(recipient);
248
- }
249
- catch {
250
- // ignore
251
- }
252
- const { arrived, arrivalTimeMs } = await pollForDepositArrival(jaspervaultProvider, warpConfig.jaspervault.warpRouter, recipient, initialBalance, POLL_TIMEOUT_MS);
253
- result.arrived = arrived;
254
- result.arrivalTimeMs = arrivalTimeMs;
255
- if (!arrived) {
256
- result.message = 'Deposit confirmed on Base; tokens may still be in transit to JasperVault';
242
+ if (opts.wait) {
243
+ let initialBalance = 0n;
244
+ try {
245
+ const destWarpRouter = new Contract(warpConfig.jaspervault.warpRouter, ERC20_ABI, jaspervaultProvider);
246
+ initialBalance = await destWarpRouter.balanceOf(recipient);
247
+ }
248
+ catch {
249
+ // ignore
250
+ }
251
+ const { arrived, arrivalTimeMs } = await pollForDepositArrival(jaspervaultProvider, warpConfig.jaspervault.warpRouter, recipient, initialBalance, POLL_TIMEOUT_MS);
252
+ result.arrived = arrived;
253
+ result.arrivalTimeMs = arrivalTimeMs;
254
+ if (!arrived) {
255
+ result.message =
256
+ 'Deposit confirmed on Base; tokens may still be in transit to JasperVault';
257
+ }
257
258
  }
258
259
  printJson(result, opts.pretty);
260
+ // Step 6: disconnect WC session
261
+ if (wcClient && wcSession) {
262
+ try {
263
+ await wcClient.disconnect({
264
+ topic: wcSession.topic,
265
+ reason: { code: 6000, message: 'Done' },
266
+ });
267
+ }
268
+ catch {
269
+ // ignore disconnect errors
270
+ }
271
+ }
259
272
  });
260
273
  }
261
274
  //# sourceMappingURL=deposit.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"deposit.js","sourceRoot":"","sources":["../../../src/commands/deposit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deposit.js","sourceRoot":"","sources":["../../../src/commands/deposit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Command } from 'commander';
2
+ export declare const PLATFORMS: readonly ["openclaw", "cursor", "claude", "all"];
3
+ export type Platform = (typeof PLATFORMS)[number];
4
+ export declare function registerSkillCommand(program: Command): void;
@@ -0,0 +1,117 @@
1
+ import * as fs from 'node:fs/promises';
2
+ import * as path from 'node:path';
3
+ import { homedir } from 'node:os';
4
+ import { BANNER, buildSkillContent } from '../templates/skill-body.js';
5
+ export const PLATFORMS = ['openclaw', 'cursor', 'claude', 'all'];
6
+ const SKILL_DIR = 'jasper-vault-cli';
7
+ function getTargetPath(platform, global) {
8
+ const home = homedir();
9
+ const cwd = process.cwd();
10
+ switch (platform) {
11
+ case 'openclaw':
12
+ return [path.join(home, '.openclaw', 'skills', SKILL_DIR)];
13
+ case 'cursor':
14
+ return global
15
+ ? [path.join(home, '.cursor', 'skills', SKILL_DIR)]
16
+ : [path.join(cwd, '.cursor', 'skills', SKILL_DIR)];
17
+ case 'claude':
18
+ return global
19
+ ? [path.join(home, '.claude', 'skills', SKILL_DIR)]
20
+ : [path.join(cwd, '.claude', 'skills', SKILL_DIR)];
21
+ case 'all':
22
+ return [
23
+ path.join(home, '.openclaw', 'skills', SKILL_DIR),
24
+ path.join(cwd, '.cursor', 'skills', SKILL_DIR),
25
+ path.join(cwd, '.claude', 'skills', SKILL_DIR),
26
+ ];
27
+ default:
28
+ throw new Error(`Unknown platform: ${platform}`);
29
+ }
30
+ }
31
+ function getPlatformFromPath(pathStr) {
32
+ if (pathStr.includes('.openclaw'))
33
+ return 'openclaw';
34
+ if (pathStr.includes('.cursor'))
35
+ return 'cursor';
36
+ if (pathStr.includes('.claude'))
37
+ return 'claude';
38
+ throw new Error(`Cannot determine platform from path: ${pathStr}`);
39
+ }
40
+ function getPlatformDisplayName(p) {
41
+ return p === 'openclaw' ? 'OpenClaw' : p === 'cursor' ? 'Cursor' : 'Claude Code';
42
+ }
43
+ export function registerSkillCommand(program) {
44
+ const skill = program
45
+ .command('skill')
46
+ .description('Manage JasperVault AI skills');
47
+ skill
48
+ .command('install')
49
+ .description('Install JasperVault skill to AI platform (OpenClaw, Cursor, Claude Code)')
50
+ .requiredOption('--ai <platform>', `Target platform: ${PLATFORMS.join(', ')}`)
51
+ .option('--global', 'Install to user home directory (cursor/claude only)')
52
+ .option('--force', 'Overwrite existing skill files without prompting')
53
+ .action(async (opts) => {
54
+ const platform = opts.ai;
55
+ if (!PLATFORMS.includes(platform)) {
56
+ process.stderr.write(`Error: Invalid platform "${platform}". Use one of: ${PLATFORMS.join(', ')}\n`);
57
+ process.exit(1);
58
+ }
59
+ const globalFlag = opts.global ?? false;
60
+ const force = opts.force ?? false;
61
+ const targetPaths = getTargetPath(platform, globalFlag);
62
+ process.stdout.write(BANNER + '\n\n');
63
+ const results = [];
64
+ for (const targetDir of targetPaths) {
65
+ const skillPlatform = platform === 'all' ? getPlatformFromPath(targetDir) : platform;
66
+ const platDisplay = getPlatformDisplayName(skillPlatform);
67
+ try {
68
+ const skillMdPath = path.join(targetDir, 'SKILL.md');
69
+ const exists = await fs
70
+ .access(skillMdPath)
71
+ .then(() => true)
72
+ .catch(() => false);
73
+ if (exists && !force) {
74
+ process.stderr.write(`Error: Skill already exists at ${targetDir}\n` +
75
+ 'Use --force to overwrite.\n');
76
+ process.exit(1);
77
+ }
78
+ const files = buildSkillContent(skillPlatform);
79
+ let fileCount = 0;
80
+ for (const [relPath, content] of Object.entries(files)) {
81
+ const filePath = path.join(targetDir, relPath);
82
+ await fs.mkdir(path.dirname(filePath), { recursive: true });
83
+ await fs.writeFile(filePath, content, 'utf8');
84
+ fileCount++;
85
+ }
86
+ // Make scripts executable
87
+ const scriptsDir = path.join(targetDir, 'scripts');
88
+ const scriptsDirExists = await fs
89
+ .access(scriptsDir)
90
+ .then(() => true)
91
+ .catch(() => false);
92
+ if (scriptsDirExists) {
93
+ const scriptFiles = await fs.readdir(scriptsDir);
94
+ for (const sf of scriptFiles) {
95
+ if (sf.endsWith('.sh')) {
96
+ await fs.chmod(path.join(scriptsDir, sf), 0o755);
97
+ }
98
+ }
99
+ }
100
+ results.push({ path: targetDir, platform: platDisplay, fileCount });
101
+ }
102
+ catch (err) {
103
+ process.stderr.write(`Error installing to ${platDisplay}: ${err.message}\n`);
104
+ process.exit(1);
105
+ }
106
+ }
107
+ process.stdout.write('\n ✓ Skill installed successfully!\n\n' +
108
+ results
109
+ .map((r) => ` Platform: ${r.platform}\n Location: ${r.path}\n Files: ${r.fileCount} (SKILL.md + references/ + scripts/)`)
110
+ .join('\n\n') +
111
+ '\n\n Next steps:\n' +
112
+ ' 1. First-time setup: jv vault setup --network jaspervault\n' +
113
+ ' 2. (Optional) Override API URL for local debugging: export JV_API_URL=http://localhost:3000\n' +
114
+ ' 3. Start using jv commands or let your AI agent call them\n');
115
+ });
116
+ }
117
+ //# sourceMappingURL=skill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../../src/commands/skill.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEvE,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAU,CAAC;AAG1E,MAAM,SAAS,GAAG,kBAAkB,CAAC;AAErC,SAAS,aAAa,CAAC,QAAkB,EAAE,MAAe;IACxD,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,UAAU;YACb,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;QAC7D,KAAK,QAAQ;YACX,OAAO,MAAM;gBACX,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;gBACnD,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;QACvD,KAAK,QAAQ;YACX,OAAO,MAAM;gBACX,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;gBACnD,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;QACvD,KAAK,KAAK;YACR,OAAO;gBACL,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC;gBACjD,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC;gBAC9C,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC;aAC/C,CAAC;QACJ;YACE,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAe;IAC1C,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,OAAO,UAAU,CAAC;IACrD,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,QAAQ,CAAC;IACjD,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,QAAQ,CAAC;IACjD,MAAM,IAAI,KAAK,CAAC,wCAAwC,OAAO,EAAE,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,sBAAsB,CAAC,CAAmC;IACjE,OAAO,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC;AACnF,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,MAAM,KAAK,GAAG,OAAO;SAClB,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,8BAA8B,CAAC,CAAC;IAE/C,KAAK;SACF,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,0EAA0E,CAAC;SACvF,cAAc,CAAC,iBAAiB,EAAE,oBAAoB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;SAC7E,MAAM,CAAC,UAAU,EAAE,qDAAqD,CAAC;SACzE,MAAM,CAAC,SAAS,EAAE,kDAAkD,CAAC;SACrE,MAAM,CAAC,KAAK,EAAE,IAAuD,EAAE,EAAE;QACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAc,CAAC;QACrC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,QAAQ,kBAAkB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC;QAClC,MAAM,WAAW,GAAG,aAAa,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAExD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;QAEtC,MAAM,OAAO,GAA4D,EAAE,CAAC;QAE5E,KAAK,MAAM,SAAS,IAAI,WAAW,EAAE,CAAC;YACpC,MAAM,aAAa,GACjB,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAE,QAA6C,CAAC;YACvG,MAAM,WAAW,GAAG,sBAAsB,CAAC,aAAa,CAAC,CAAC;YAE1D,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;gBACrD,MAAM,MAAM,GAAG,MAAM,EAAE;qBACpB,MAAM,CAAC,WAAW,CAAC;qBACnB,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;qBAChB,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;gBAEtB,IAAI,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;oBACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,kCAAkC,SAAS,IAAI;wBAC7C,6BAA6B,CAChC,CAAC;oBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBAED,MAAM,KAAK,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC;gBAC/C,IAAI,SAAS,GAAG,CAAC,CAAC;gBAElB,KAAK,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;oBAC/C,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBAC5D,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;oBAC9C,SAAS,EAAE,CAAC;gBACd,CAAC;gBAED,0BAA0B;gBAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;gBACnD,MAAM,gBAAgB,GAAG,MAAM,EAAE;qBAC9B,MAAM,CAAC,UAAU,CAAC;qBAClB,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;qBAChB,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;gBACtB,IAAI,gBAAgB,EAAE,CAAC;oBACrB,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;oBACjD,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;wBAC7B,IAAI,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;4BACvB,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;wBACnD,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;YACtE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,WAAW,KAAM,GAAa,CAAC,OAAO,IAAI,CAAC,CAAC;gBACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,yCAAyC;YACvC,OAAO;iBACJ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,QAAQ,kBAAkB,CAAC,CAAC,IAAI,kBAAkB,CAAC,CAAC,SAAS,sCAAsC,CAAC;iBACjI,IAAI,CAAC,MAAM,CAAC;YACf,qBAAqB;YACrB,kEAAkE;YAClE,oGAAoG;YACpG,iEAAiE,CACpE,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Skill template content and banner for jv init command.
2
+ * Skill template content and banner for jv skill install command.
3
3
  * Generates a multi-file skill structure:
4
4
  * SKILL.md — compact core rules + activation + intent table
5
5
  * references/ — detailed docs loaded on demand by the agent
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Skill template content and banner for jv init command.
2
+ * Skill template content and banner for jv skill install command.
3
3
  * Generates a multi-file skill structure:
4
4
  * SKILL.md — compact core rules + activation + intent table
5
5
  * references/ — detailed docs loaded on demand by the agent
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jaspervault_cli",
3
- "version": "1.0.24",
3
+ "version": "1.0.26",
4
4
  "description": "JasperVault CLI for interacting with the JasperVault Manager API",
5
5
  "type": "module",
6
6
  "bin": {