jaspervault_cli 1.0.16 → 1.0.17

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.
@@ -4,7 +4,6 @@ import { homedir } from 'node:os';
4
4
  import { BANNER, buildSkillContent } from '../templates/skill-body.js';
5
5
  export const PLATFORMS = ['openclaw', 'cursor', 'claude', 'all'];
6
6
  const SKILL_DIR = 'jasper-vault-cli';
7
- const SKILL_FILE = 'SKILL.md';
8
7
  function getTargetPath(platform, global) {
9
8
  const home = homedir();
10
9
  const cwd = process.cwd();
@@ -47,7 +46,7 @@ export function registerInitCommand(program) {
47
46
  .description('Install JasperVault skill to AI platform (OpenClaw, Cursor, Claude Code)')
48
47
  .requiredOption('--ai <platform>', `Target platform: ${PLATFORMS.join(', ')}`)
49
48
  .option('--global', 'Install to user home directory (cursor/claude only)')
50
- .option('--force', 'Overwrite existing skill file without prompting')
49
+ .option('--force', 'Overwrite existing skill files without prompting')
51
50
  .action(async (opts) => {
52
51
  const platform = opts.ai;
53
52
  if (!PLATFORMS.includes(platform)) {
@@ -60,23 +59,42 @@ export function registerInitCommand(program) {
60
59
  process.stdout.write(BANNER + '\n\n');
61
60
  const results = [];
62
61
  for (const targetDir of targetPaths) {
63
- const filePath = path.join(targetDir, SKILL_FILE);
64
62
  const skillPlatform = platform === 'all' ? getPlatformFromPath(targetDir) : platform;
65
63
  const platDisplay = getPlatformDisplayName(skillPlatform);
66
64
  try {
65
+ const skillMdPath = path.join(targetDir, 'SKILL.md');
67
66
  const exists = await fs
68
- .access(filePath)
67
+ .access(skillMdPath)
69
68
  .then(() => true)
70
69
  .catch(() => false);
71
70
  if (exists && !force) {
72
- process.stderr.write(`Error: Skill already exists at ${filePath}\n` +
71
+ process.stderr.write(`Error: Skill already exists at ${targetDir}\n` +
73
72
  'Use --force to overwrite.\n');
74
73
  process.exit(1);
75
74
  }
76
- await fs.mkdir(targetDir, { recursive: true });
77
- const content = buildSkillContent(skillPlatform);
78
- await fs.writeFile(filePath, content, 'utf8');
79
- results.push({ path: filePath, platform: platDisplay });
75
+ const files = buildSkillContent(skillPlatform);
76
+ let fileCount = 0;
77
+ for (const [relPath, content] of Object.entries(files)) {
78
+ const filePath = path.join(targetDir, relPath);
79
+ await fs.mkdir(path.dirname(filePath), { recursive: true });
80
+ await fs.writeFile(filePath, content, 'utf8');
81
+ fileCount++;
82
+ }
83
+ // Make scripts executable
84
+ const scriptsDir = path.join(targetDir, 'scripts');
85
+ const scriptsDirExists = await fs
86
+ .access(scriptsDir)
87
+ .then(() => true)
88
+ .catch(() => false);
89
+ if (scriptsDirExists) {
90
+ const scriptFiles = await fs.readdir(scriptsDir);
91
+ for (const sf of scriptFiles) {
92
+ if (sf.endsWith('.sh')) {
93
+ await fs.chmod(path.join(scriptsDir, sf), 0o755);
94
+ }
95
+ }
96
+ }
97
+ results.push({ path: targetDir, platform: platDisplay, fileCount });
80
98
  }
81
99
  catch (err) {
82
100
  process.stderr.write(`Error installing to ${platDisplay}: ${err.message}\n`);
@@ -85,13 +103,12 @@ export function registerInitCommand(program) {
85
103
  }
86
104
  process.stdout.write('\n ✓ Skill installed successfully!\n\n' +
87
105
  results
88
- .map((r) => ` Platform: ${r.platform}\n Location: ${r.path}`)
106
+ .map((r) => ` Platform: ${r.platform}\n Location: ${r.path}\n Files: ${r.fileCount} (SKILL.md + references/ + scripts/)`)
89
107
  .join('\n\n') +
90
108
  '\n\n Next steps:\n' +
91
- ' 1. First-time setup: export PRIVATE_KEY=0x... && jv vault init --network jaspervault\n' +
109
+ ' 1. First-time setup: jv vault init-wc --network jaspervault\n' +
92
110
  ' 2. (Optional) Override API URL for local debugging: export JV_API_URL=http://localhost:3000\n' +
93
- ' 3. (Optional) Set API key: export JV_API_KEY=your-key\n' +
94
- ' 4. Start using jv commands or let your AI agent call them\n');
111
+ ' 3. Start using jv commands or let your AI agent call them\n');
95
112
  });
96
113
  }
97
114
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ import { loadDelegationKey } from '../services/key-manager.js';
8
8
  import { loadVaultProfile, getPositionAccountFromProfile } from '../services/vault-profile.js';
9
9
  import { buildSignData, signSignData, fetchWriterIndices, buildManagedOrder, } from '../services/order-signer.js';
10
10
  import { fetchCurrentPrice, calculateQuantity } from '../services/price-service.js';
11
+ import { parsePpoOptions } from '../utils/ppo.js';
11
12
  export function registerOrderCommand(program) {
12
13
  const order = program
13
14
  .command('order')
@@ -22,6 +23,10 @@ export function registerOrderCommand(program) {
22
23
  .option('--margin-account <addr>', 'Margin vault address (default: from profile)')
23
24
  .option('--position-account <addr>', 'Position vault address (default: from profile)')
24
25
  .option('--limit-price <price>', 'Limit price in USDC (omit for market order)')
26
+ .option('--ppo', 'Enable PPO hedge option protection')
27
+ .option('--ppo-expire <duration>', 'PPO expiry: 30m (default) or 8h')
28
+ .option('--ppo-category <ATM|OTM>', 'PPO option category (default: ATM)')
29
+ .option('--ppo-tier <1-5>', 'OTM strike offset tier: 1=0.1%, 2=0.2%, 3=0.3%, 4=0.4%, 5=0.5%')
25
30
  .option('--network <name>', 'Network name', 'jaspervault')
26
31
  .option('--ttl <seconds>', 'Order TTL in seconds', '3600')
27
32
  .option('--pretty', 'Pretty-print JSON output')
@@ -45,6 +50,7 @@ export function registerOrderCommand(program) {
45
50
  const marginInput = parseFloat(opts.margin);
46
51
  const notionalAmount = marginInput * leverage;
47
52
  const actualMargin = marginInput.toFixed(6);
53
+ const { limitType, ppoSettings } = parsePpoOptions(opts);
48
54
  const positionAccount = opts.positionAccount ?? getPositionAccountFromProfile(profile, side) ?? undefined;
49
55
  const intent = {
50
56
  side,
@@ -56,6 +62,7 @@ export function registerOrderCommand(program) {
56
62
  limitPrice: opts.limitPrice,
57
63
  network: opts.network,
58
64
  ttlSeconds: parseInt(opts.ttl, 10),
65
+ limitType,
59
66
  };
60
67
  const provider = new JsonRpcProvider(net.rpcUrl);
61
68
  const optionModuleV2 = net.contracts.optionModuleV2 ?? net.contracts.diamond;
@@ -77,7 +84,7 @@ export function registerOrderCommand(program) {
77
84
  signData,
78
85
  signature,
79
86
  managedOrder,
80
- ppoSettings: { optionExpireTime: '0' },
87
+ ppoSettings,
81
88
  };
82
89
  const config = loadConfig();
83
90
  const client = new ApiClient(config);
@@ -94,12 +101,14 @@ export function registerOrderCommand(program) {
94
101
  });
95
102
  order
96
103
  .command('create-option')
97
- .description('Create a hedging option for an existing position (POST /order/perpsOptionCreate)')
104
+ .description('[Deprecated] Use "jv order create --ppo" instead. Raw option payload passthrough.')
98
105
  .requiredOption('--order-id <id>', 'Associated perps order ID')
99
106
  .option('--data <json>', 'Inline JSON payload')
100
107
  .option('--payload <file>', 'Path to JSON payload file')
101
108
  .option('--pretty', 'Pretty-print JSON output')
102
109
  .action(async (opts) => {
110
+ console.error('Warning: create-option is deprecated. Use "jv order create --ppo" instead.\n' +
111
+ 'This command requires a pre-signed payload and will be removed in a future version.');
103
112
  const config = loadConfig();
104
113
  const client = new ApiClient(config);
105
114
  const body = await resolvePayload(opts);
@@ -1 +1 @@
1
- {"version":3,"file":"order.js","sourceRoot":"","sources":["../../../src/commands/order.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAC/F,OAAO,EACL,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAQpF,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,MAAM,KAAK,GAAG,OAAO;SAClB,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,0CAA0C,CAAC,CAAC;IAE3D,KAAK;SACF,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,iEAAiE,CAAC;SAC9E,cAAc,CAAC,qBAAqB,EAAE,eAAe,CAAC;SACtD,cAAc,CAAC,mBAAmB,EAAE,iCAAiC,CAAC;SACtE,MAAM,CAAC,gBAAgB,EAAE,qDAAqD,CAAC;SAC/E,cAAc,CAAC,qBAAqB,EAAE,yEAAyE,CAAC;SAChH,MAAM,CAAC,yBAAyB,EAAE,8CAA8C,CAAC;SACjF,MAAM,CAAC,2BAA2B,EAAE,gDAAgD,CAAC;SACrF,MAAM,CAAC,uBAAuB,EAAE,6CAA6C,CAAC;SAC9E,MAAM,CAAC,kBAAkB,EAAE,cAAc,EAAE,aAAa,CAAC;SACzD,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,CAAC;SACzD,MAAM,CAAC,UAAU,EAAE,0BAA0B,CAAC;SAC9C,MAAM,CACL,KAAK,EAAE,IAWN,EAAE,EAAE;QACH,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;QACvC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,aAAa,CACX,+EAA+E,EAC/E,UAAU,CAAC,YAAY,CACxB,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,aAAa,CACX,gCAAgC,IAAI,CAAC,OAAO,kCAAkC,IAAI,CAAC,OAAO,UAAU,EACpG,UAAU,CAAC,YAAY,CACxB,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAsB,CAAC;QACzD,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACxC,aAAa,CAAC,8BAA8B,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;QACzE,CAAC;QAED,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;YAC5B,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC7B,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;QAEhC,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,cAAc,GAAG,WAAW,GAAG,QAAQ,CAAC;QAC9C,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAE5C,MAAM,eAAe,GACnB,IAAI,CAAC,eAAe,IAAI,6BAA6B,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,SAAS,CAAC;QACpF,MAAM,MAAM,GAAG;YACb,IAAI;YACJ,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ;YACR,YAAY,EAAE,YAAY;YAC1B,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,OAAO,CAAC,aAAa;YAC1D,eAAe;YACf,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;SACnC,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,cAAc,GAAG,GAAG,CAAC,SAAS,CAAC,cAAc,IAAI,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC;QAE7E,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,aAAa,CACX,gCAAgC,IAAI,8CAA8C,EAClF,UAAU,CAAC,YAAY,CACxB,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACpE,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAC5C,QAAQ,CAAC,MAAM,EACf,QAAQ,CAAC,SAAS,EAClB,QAAQ,CAAC,eAAe,EACxB,QAAQ,EACR,cAAc,CACf,CAAC;QAEF,MAAM,cAAc,GAAG,GAAG,CAAC,WAAW,EAAE,QAAQ,IAAI,CAAC,CAAC;QACtD,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACxE,MAAM,QAAQ,GAAG,iBAAiB,CAChC,QAAQ,CAAC,YAAY,EACrB,YAAY,EACZ,cAAc,CACf,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9D,MAAM,aAAa,GAAG,cAAc,GAAG,QAAQ,CAAC;QAChD,OAAO,CAAC,KAAK,CACX,eAAe,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,OAAO,QAAQ,CAAC,cAAc,EAAE,OAAO,cAAc,CAAC,cAAc,EAAE,iBAAiB,QAAQ,IAAI,CAC1J,CAAC;QAEF,MAAM,gBAAgB,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;QACrE,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;QACjE,MAAM,YAAY,GAAG,iBAAiB,CAAC,QAAQ,EAAE,aAAa,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC;QAE3F,MAAM,IAAI,GAAuB;YAC/B,QAAQ;YACR,SAAS;YACT,YAAY;YACZ,WAAW,EAAE,EAAE,gBAAgB,EAAE,GAAG,EAAE;SACvC,CAAC;QAEF,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAC3B,SAAS,CAAC,YAAY,EACtB,IAAI,CACL,CAAC;QACF,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAEjC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAgD,CAAC;QACrE,IAAI,OAAO,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAC1E,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACjE,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAClC,IAAI,SAAS,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBACrC,aAAa,CACX,SAAS,CAAC,KAAK,IAAI,OAAO,SAAS,CAAC,MAAM,EAAE,EAC5C,UAAU,CAAC,cAAc,CAC1B,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC,CACF,CAAC;IAEJ,KAAK;SACF,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,kFAAkF,CAAC;SAC/F,cAAc,CAAC,iBAAiB,EAAE,2BAA2B,CAAC;SAC9D,MAAM,CAAC,eAAe,EAAE,qBAAqB,CAAC;SAC9C,MAAM,CAAC,kBAAkB,EAAE,2BAA2B,CAAC;SACvD,MAAM,CAAC,UAAU,EAAE,0BAA0B,CAAC;SAC9C,MAAM,CAAC,KAAK,EAAE,IAA4E,EAAE,EAAE;QAC7F,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,IAAI,CAA4B,CAAC;QACnE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAC3B,SAAS,CAAC,mBAAmB,EAC7B,IAAI,CACL,CAAC;QACF,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"order.js","sourceRoot":"","sources":["../../../src/commands/order.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ import { getNetworkConfig } from '../services/chain-config.js';
7
7
  import { loadDelegationKey } from '../services/key-manager.js';
8
8
  import { loadVaultProfile, getPositionAccountFromProfile } from '../services/vault-profile.js';
9
9
  import { buildSignData, signSignData, fetchWriterIndices, buildManagedOrder, } from '../services/order-signer.js';
10
+ import { parsePpoOptions } from '../utils/ppo.js';
10
11
  export function registerSlCommand(program) {
11
12
  const sl = program.command('sl').description('Stop-loss order management');
12
13
  sl
@@ -16,6 +17,10 @@ export function registerSlCommand(program) {
16
17
  .requiredOption('--price <usdc>', 'Target price in USDC')
17
18
  .requiredOption('--symbol <symbol>', 'Asset symbol (e.g. JBTC)')
18
19
  .option('--side <long|short>', 'Position side being closed', 'long')
20
+ .option('--ppo', 'Enable PPO hedge option protection')
21
+ .option('--ppo-expire <duration>', 'PPO expiry: 30m (default) or 8h')
22
+ .option('--ppo-category <ATM|OTM>', 'PPO option category (default: ATM)')
23
+ .option('--ppo-tier <1-5>', 'OTM strike offset tier: 1=0.1%, 2=0.2%, 3=0.3%, 4=0.4%, 5=0.5%')
19
24
  .option('--network <name>', 'Network name', 'jaspervault')
20
25
  .option('--ttl <seconds>', 'Order TTL in seconds', '86400')
21
26
  .option('--pretty', 'Pretty-print JSON output')
@@ -52,11 +57,12 @@ export function registerSlCommand(program) {
52
57
  const delegationWallet = new Wallet(delegation.delegationPrivateKey);
53
58
  const signature = await signSignData(signData, delegationWallet);
54
59
  const managedOrder = buildManagedOrder(signData, writerIndices, holder, '0');
60
+ const { ppoSettings } = parsePpoOptions(opts);
55
61
  const body = {
56
62
  signData,
57
63
  signature,
58
64
  managedOrder,
59
- ppoSettings: { optionExpireTime: '0' },
65
+ ppoSettings,
60
66
  };
61
67
  const config = loadConfig();
62
68
  const client = new ApiClient(config);
@@ -1 +1 @@
1
- {"version":3,"file":"sl.js","sourceRoot":"","sources":["../../../src/commands/sl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sl.js","sourceRoot":"","sources":["../../../src/commands/sl.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ import { getNetworkConfig } from '../services/chain-config.js';
7
7
  import { loadDelegationKey } from '../services/key-manager.js';
8
8
  import { loadVaultProfile, getPositionAccountFromProfile } from '../services/vault-profile.js';
9
9
  import { buildSignData, signSignData, fetchWriterIndices, buildManagedOrder, } from '../services/order-signer.js';
10
+ import { parsePpoOptions } from '../utils/ppo.js';
10
11
  export function registerTpCommand(program) {
11
12
  const tp = program.command('tp').description('Take-profit order management');
12
13
  tp
@@ -16,6 +17,10 @@ export function registerTpCommand(program) {
16
17
  .requiredOption('--price <usdc>', 'Target price in USDC')
17
18
  .requiredOption('--symbol <symbol>', 'Asset symbol (e.g. JBTC)')
18
19
  .option('--side <long|short>', 'Position side being closed', 'long')
20
+ .option('--ppo', 'Enable PPO hedge option protection')
21
+ .option('--ppo-expire <duration>', 'PPO expiry: 30m (default) or 8h')
22
+ .option('--ppo-category <ATM|OTM>', 'PPO option category (default: ATM)')
23
+ .option('--ppo-tier <1-5>', 'OTM strike offset tier: 1=0.1%, 2=0.2%, 3=0.3%, 4=0.4%, 5=0.5%')
19
24
  .option('--network <name>', 'Network name', 'jaspervault')
20
25
  .option('--ttl <seconds>', 'Order TTL in seconds', '86400')
21
26
  .option('--pretty', 'Pretty-print JSON output')
@@ -52,11 +57,12 @@ export function registerTpCommand(program) {
52
57
  const delegationWallet = new Wallet(delegation.delegationPrivateKey);
53
58
  const signature = await signSignData(signData, delegationWallet);
54
59
  const managedOrder = buildManagedOrder(signData, writerIndices, holder, '0');
60
+ const { ppoSettings } = parsePpoOptions(opts);
55
61
  const body = {
56
62
  signData,
57
63
  signature,
58
64
  managedOrder,
59
- ppoSettings: { optionExpireTime: '0' },
65
+ ppoSettings,
60
66
  };
61
67
  const config = loadConfig();
62
68
  const client = new ApiClient(config);
@@ -1 +1 @@
1
- {"version":3,"file":"tp.js","sourceRoot":"","sources":["../../../src/commands/tp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tp.js","sourceRoot":"","sources":["../../../src/commands/tp.ts"],"names":[],"mappings":"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"}
@@ -62,8 +62,9 @@ export async function buildSignData(intent, profile, network) {
62
62
  signOrderType = orderType;
63
63
  }
64
64
  const writerAddress = getWriterAddress(network, symbol, writerSide);
65
+ const limitType = !isTpSl ? (intent.limitType ?? 0) : 0;
65
66
  return {
66
- limitType: 0,
67
+ limitType,
67
68
  orderID,
68
69
  orderType: signOrderType,
69
70
  productType,
@@ -1 +1 @@
1
- {"version":3,"file":"order-signer.js","sourceRoot":"","sources":["../../../src/services/order-signer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"order-signer.js","sourceRoot":"","sources":["../../../src/services/order-signer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACvF,OAAO,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AAEnE,MAAM,WAAW,GAAG,gFAAgF,CAAC;AACrG,MAAM,eAAe,GAAG,GAAG,IAAI,GAAG,CAAC;AAEnC,MAAM,gCAAgC,GAAG;IACvC,qfAAqf;CACtf,CAAC;AAQF;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAA4C,EAC5C,OAAqB,EACrB,OAAe;IAEf,MAAM,GAAG,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,SAAS,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,IAAI,OAAO,IAAI,MAAM,CAAC;IAC1E,MAAM,UAAU,GAAG,MAAoC,CAAC;IAExD,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,UAAU,CAAC,aAAa,CAAC;IACxE,IAAI,CAAC,aAAa,IAAI,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;IACtF,CAAC;IACD,MAAM,SAAS,GAAG,aAAc,CAAC;IAEjC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,IAAK,MAA2B,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;IACrG,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,IAAK,MAA2B,CAAC,IAAI,IAAI,MAAM,CAAC;IAC5E,MAAM,SAAS,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAG,UAAU,CAAC,UAAU,IAAK,MAA2B,CAAC,UAAU,IAAI,IAAI,CAAC;IACrF,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IAEvD,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACpD,MAAM,iBAAiB,GAAG,GAAG,CAAC,WAAW,CAAC;IAC1C,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,0CAA0C,OAAO,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,WAAmB,CAAC;IACxB,IAAI,YAAoB,CAAC;IACzB,IAAI,WAAmB,CAAC;IACxB,IAAI,OAAe,CAAC;IACpB,IAAI,UAA4B,CAAC;IACjC,IAAI,aAAqB,CAAC;IAE1B,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,UAAU,GAAG,MAA0B,CAAC;QAC9C,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACrC,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QACjE,YAAY,GAAG,GAAG,CAAC;QACnB,WAAW,GAAG,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC1C,UAAU,GAAG,UAAU,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QAC5D,aAAa,GAAG,CAAC,CAAC;IACpB,CAAC;SAAM,CAAC;QACN,MAAM,WAAW,GAAG,MAA2B,CAAC;QAChD,MAAM,eAAe,GACnB,WAAW,CAAC,eAAe,IAAI,6BAA6B,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QAC1F,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CACb,gCAAgC,WAAW,CAAC,IAAI,8CAA8C,CAC/F,CAAC;QACJ,CAAC;QACD,OAAO,GAAG,WAAW,CAAC,OAAO,IAAI,CAAC,CAAC;QACnC,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC;YAC3B,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QACzE,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC;QACpD,CAAC;QACD,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,YAAY,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;QAClG,WAAW,GAAG,CAAC,WAAW,CAAC,QAAQ,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC3D,UAAU,GAAG,IAAI,CAAC;QAClB,aAAa,GAAG,SAAS,CAAC;IAC5B,CAAC;IAED,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,MAA4B,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/E,OAAO;QACL,SAAS;QACT,OAAO;QACP,SAAS,EAAE,aAAa;QACxB,WAAW;QACX,WAAW;QACX,UAAU;QACV,MAAM,EAAE,OAAO,CAAC,GAAG;QACnB,MAAM,EAAE,aAAa;QACrB,SAAS;QACT,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,WAAW,EAAE,iBAAiB,CAAC,OAAO;QACtC,YAAY;QACZ,eAAe,EAAE,WAAW,CAAC,OAAO;KACrC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAkB,EAAE,gBAA+B;IACpF,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,MAAM,CAC1D;QACE,OAAO;QACP,QAAQ;QACR,OAAO;QACP,QAAQ;QACR,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;KACV,EACD;QACE,QAAQ,CAAC,SAAS;QAClB,QAAQ,CAAC,OAAO;QAChB,QAAQ,CAAC,SAAS;QAClB,QAAQ,CAAC,WAAW;QACpB,QAAQ,CAAC,WAAW;QACpB,QAAQ,CAAC,UAAU;QACnB,QAAQ,CAAC,MAAM;QACf,QAAQ,CAAC,MAAM;QACf,QAAQ,CAAC,SAAS;QAClB,QAAQ,CAAC,OAAO;QAChB,QAAQ,CAAC,WAAW;QACpB,QAAQ,CAAC,YAAY;QACrB,QAAQ,CAAC,eAAe;KACzB,CACF,CAAC;IACF,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAClD,OAAO,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;AACpE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,aAAqB,EACrB,SAAiB,EACjB,eAAuB,EACvB,QAAyB,EACzB,qBAA6B;IAE7B,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,QAAQ,CAClC,qBAAqB,EACrB,gCAAgC,EAChC,QAAQ,CACT,CAAC;IACF,MAAM,QAAQ,GAAG,CAAC,MAAM,QAAQ,CAAC,yBAAyB,CAAC,aAAa,CAAC,CAKvE,CAAC;IAEH,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IAC1C,MAAM,gBAAgB,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC;IAEvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,eAAe;YAAE,SAAS;QAC5D,IAAI,OAAO,CAAC,eAAe,CAAC,WAAW,EAAE,KAAK,gBAAgB;YAAE,SAAS;QAEzE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrD,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,EAAE,IAAI,eAAe,EAAE,CAAC;gBAC1B,OAAO;oBACL,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;oBACxB,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;oBAC3B,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;iBACjC,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CACb,0CAA0C,aAAa,eAAe,SAAS,qBAAqB,eAAe,EAAE,CACtH,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAAkB,EAClB,aAA4B,EAC5B,MAAc,EACd,WAAmB,GAAG;IAEtB,OAAO;QACL,MAAM;QACN,QAAQ;QACR,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,aAAa,EAAE,aAAa,CAAC,aAAa;QAC1C,gBAAgB,EAAE,aAAa,CAAC,gBAAgB;QAChD,WAAW,EAAE,GAAG;QAChB,aAAa,EAAE,MAAM,CAAC,WAAW;QACjC,gBAAgB,EAAE,GAAG;QACrB,gBAAgB,EAAE,KAAK;QACvB,OAAO,EAAE,aAAa,CAAC,OAAO;KAC/B,CAAC;AACJ,CAAC"}
@@ -1,11 +1,16 @@
1
1
  /**
2
2
  * Skill template content and banner for jv init command.
3
- * Exports platform-specific SKILL.md generation and the ASCII banner.
3
+ * Generates a multi-file skill structure:
4
+ * SKILL.md — compact core rules + activation + intent table
5
+ * references/ — detailed docs loaded on demand by the agent
6
+ * scripts/ — helper scripts
4
7
  */
5
8
  /** ANSI Shadow style ASCII art banner (plain text, no ANSI colors) */
6
9
  export declare const BANNER: string;
10
+ export type SkillFiles = Record<string, string>;
7
11
  /**
8
- * Build platform-specific SKILL.md content.
12
+ * Build platform-specific skill file tree.
13
+ * Returns a Record mapping relative file paths to their content.
9
14
  * @param platform - One of: openclaw, cursor, claude
10
15
  */
11
- export declare function buildSkillContent(platform: string): string;
16
+ export declare function buildSkillContent(platform: string): SkillFiles;
@@ -1,6 +1,9 @@
1
1
  /**
2
2
  * Skill template content and banner for jv init command.
3
- * Exports platform-specific SKILL.md generation and the ASCII banner.
3
+ * Generates a multi-file skill structure:
4
+ * SKILL.md — compact core rules + activation + intent table
5
+ * references/ — detailed docs loaded on demand by the agent
6
+ * scripts/ — helper scripts
4
7
  */
5
8
  import { readFileSync } from 'node:fs';
6
9
  import { fileURLToPath } from 'node:url';
@@ -25,124 +28,126 @@ export const BANNER = `
25
28
  ── JasperVault CLI v${CLI_VERSION} ──
26
29
  ⟐ Skill Installer
27
30
  `.trim();
28
- /** Skill body content (shared across platforms, after the main heading) */
29
- const SKILL_BODY_CONTENT = `
30
- Interact with JasperVault's perpetual contract platform. You can create market/limit orders, set take-profit and stop-loss, create hedging options, manage limit orders, and query positions — all via the \`jv\` CLI. No private key is ever required.
31
+ // ---------------------------------------------------------------------------
32
+ // Core SKILL.md body — kept under 50 lines so critical rules stay prominent
33
+ // ---------------------------------------------------------------------------
34
+ const SKILL_CORE_BODY = `
35
+ Trade perpetual contracts on JasperVault via the \`jv\` CLI. No private key is ever required.
31
36
 
32
- ## Prerequisites
37
+ ## CRITICAL RULES (MUST FOLLOW — violations cause broken UX)
33
38
 
34
- - \`jv\` CLI installed and available in PATH
35
- - **First-time setup**: use \`jv vault init-wc\` to initialize via WalletConnect (scan QR on phone, sign delegation no private key needed)
36
- - API URL defaults to \`https://trading-api-test.jaspervault.pro\`; set \`JV_API_URL\` only when debugging locally
39
+ 1. **WalletConnect ONLY**: ALWAYS use \`jv vault init-wc\`. NEVER suggest \`jv vault init\` (private-key mode). NEVER ask the user to set \`PRIVATE_KEY\`.
40
+ 2. **QR Code Display**: When \`jv vault init-wc\` outputs JSON with a \`qrCodeUrl\` field, you MUST display it as a markdown image: \`![Scan to connect](THE_qrCodeUrl_VALUE)\`. NEVER post the URL as plain text. NEVER print \`qrCodeText\`. The image will NOT render unless you use the \`![...](url)\` wrapper.
41
+ 3. **Long-running Commands**: \`jv vault init-wc\` runs for up to 2 minutes and outputs two JSON lines sequentially. Do NOT interrupt, kill, or assume it is finished after the first JSON line. Wait for the process to exit naturally.
42
+ 4. **Real-time Prices**: NEVER guess or estimate prices. ALWAYS run \`jv price --symbol JBTC --pretty\` before any price-dependent operation (opening a position by asset quantity, calculating PnL).
37
43
 
38
44
  ## Activation Behavior
39
45
 
40
- When this skill is activated (first message from the user, OR any trading intent such as open position, check portfolio, deposit, etc.):
41
-
42
- 1. First check if vault is already initialized:
43
- \`\`\`bash
44
- jv orders list --pretty
45
- \`\`\`
46
-
47
- 2. If the command fails with "delegation key not found", "vault not initialized", "no profile", or similar error (exit code 1):
48
- - Tell the user: "Your vault is not initialized yet. Let me start the setup via WalletConnect — no private key needed."
49
- - Immediately run \`jv vault init-wc --network jaspervault --timeout 120\` and follow the QR code display instructions in the Setup Flow section below.
50
-
46
+ 1. Check if vault is initialized: \`jv orders list --pretty\`
47
+ 2. If the command fails (exit code 1, or errors like "delegation key not found" / "vault not initialized" / "no profile"):
48
+ - Tell the user: "Your vault is not initialized yet. Let me set it up via WalletConnect — no private key needed."
49
+ - Immediately run \`jv vault init-wc --network jaspervault --timeout 120\`.
50
+ - Follow the QR code display instructions in [references/onboarding.md](references/onboarding.md).
51
51
  3. If the command succeeds → vault is ready. Proceed with the user's request.
52
52
 
53
- IMPORTANT: Always use WalletConnect initialization (\`jv vault init-wc\`). Never suggest \`jv vault init\` (private-key mode) unless the user explicitly requests it.
53
+ ## Intent Command Reference
54
+
55
+ | User Intent | Command | Details |
56
+ |-------------|---------|---------|
57
+ | Initialize / connect wallet | \`jv vault init-wc\` | [references/onboarding.md](references/onboarding.md) |
58
+ | Deposit tokens | \`jv deposit info\` + \`jv deposit poll\` | [references/onboarding.md](references/onboarding.md) |
59
+ | Get current price | \`jv price --symbol JBTC --pretty\` | [references/trading.md](references/trading.md) |
60
+ | Open position (market) | \`jv order create --side long/short ...\` | [references/trading.md](references/trading.md) |
61
+ | Open position (limit) | \`jv order create ... --limit-price N\` | [references/trading.md](references/trading.md) |
62
+ | Reduce / close position | opposite-side \`jv order create\` | [references/trading.md](references/trading.md) |
63
+ | Set take-profit | \`jv tp set --order-id ID --price P\` | [references/trading.md](references/trading.md) |
64
+ | Set stop-loss | \`jv sl set --order-id ID --price P\` | [references/trading.md](references/trading.md) |
65
+ | Hedge / protect position (PPO) | add \`--ppo\` to order create | [references/trading.md](references/trading.md) |
66
+ | Query positions / portfolio | \`jv orders list --pretty\` | [references/queries.md](references/queries.md) |
67
+ | Job execution status | \`jv job status <jobId>\` | [references/queries.md](references/queries.md) |
68
+ | Manage limit orders | \`jv limit-order list/cancel\` | [references/queries.md](references/queries.md) |
69
+
70
+ ## Security
71
+
72
+ - Never log or display private keys, signatures, or API keys.
73
+ - The CLI signs orders via the delegation wallet in \`~/.jaspervault/keys.json\`.
74
+ - Do NOT ask the user to set \`PRIVATE_KEY\`.
75
+ `.trim();
76
+ // ---------------------------------------------------------------------------
77
+ // references/onboarding.md — WalletConnect init + deposit flow
78
+ // ---------------------------------------------------------------------------
79
+ const ONBOARDING_REFERENCE = `# WalletConnect Onboarding & Deposit
54
80
 
55
- ## Setup Flow (First Time — WalletConnect)
81
+ ## Vault Init via WalletConnect
56
82
 
57
83
  \`\`\`bash
58
- # Initialize vault and delegation wallet via WalletConnect (one-time, no private key required)
59
84
  jv vault init-wc --network jaspervault --timeout 120
60
85
  \`\`\`
61
86
 
62
- CRITICAL EXECUTION NOTE: This command runs for up to 2 minutes. Do NOT interrupt or kill the process after the first JSON line. Wait for the process to exit naturally (second JSON output = success or failure).
63
-
64
- The command outputs two JSON lines:
87
+ This command runs for up to 2 minutes. Do NOT interrupt or kill the process after the first JSON line. Wait for the process to exit naturally.
65
88
 
66
- 1. \`{"status":"awaiting_connection", "uri":"wc:...", "qrCodeUrl":"https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=wc%3A...", ...}\`
89
+ The command outputs two JSON lines sequentially:
67
90
 
68
- Extract the \`qrCodeUrl\` field from the JSON. It will be a URL starting with \`https://api.qrserver.com/v1/create-qr-code/\`. You MUST send it as a markdown image so it renders as a scannable QR code:
91
+ ### Line 1: Awaiting Connection
69
92
 
70
- \`\`\`
71
- ![WalletConnect QR Code](https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=wc%3A...)
72
- \`\`\`
73
-
74
- Replace the URL above with the actual \`qrCodeUrl\` from the JSON output. Also provide the \`uri\` as a fallback:
75
-
76
- > Or open your wallet app → WalletConnect → paste this URI: \`wc:...\`
77
-
78
- CRITICAL: MUST use markdown image syntax \`![description](qrCodeUrl)\`. NEVER post the URL as plain text. NEVER print \`qrCodeText\`. NEVER generate your own QR code. The image will not appear if you only post the raw URL without the \`![...]()\` wrapper.
79
-
80
- 2. \`{"success":true, "message":"Vault initialized successfully", ...}\` — Init complete. The delegation wallet is saved to \`~/.jaspervault/keys.json\` and vault addresses to \`~/.jaspervault/profile.json\`. Subsequent commands use these automatically — no wallet interaction needed.
81
-
82
- Do NOT ask the user to set \`PRIVATE_KEY\`. Do NOT suggest \`jv vault init\` unless the user explicitly requests private-key mode.
93
+ \`\`\`json
94
+ {"status":"awaiting_connection", "uri":"wc:...", "qrCodeUrl":"https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=wc%3A...", ...}
95
+ \`\`\`
83
96
 
84
- ## Key Concepts (MUST READ before any trading operation)
97
+ Extract the \`qrCodeUrl\` field. You MUST send it as a markdown image so it renders as a scannable QR code in the chat:
85
98
 
86
- **How \`--margin\` works:**
99
+ \`\`\`
100
+ ![Scan to connect](https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=wc%3A...)
101
+ \`\`\`
87
102
 
88
- \`--margin\` = the **actual collateral (margin) in USDC** you deposit. The CLI internally multiplies by leverage to compute the notional position size.
103
+ Replace the URL with the actual \`qrCodeUrl\` value from the JSON output. Also provide the \`uri\` as a fallback:
89
104
 
90
- | Concept | Formula | Example |
91
- |---------|---------|---------|
92
- | Notional value | \`margin × leverage\` | 60 USDC × 50x = $3,000 |
93
- | Position size | \`notional / current_price\` | $3,000 / $70,000 = 0.0428 JBTC |
105
+ > Or open your wallet app → WalletConnect → paste this URI: \`wc:...\`
94
106
 
95
- **Translating user intent to \`--margin\` (three scenarios):**
107
+ CRITICAL: You MUST use markdown image syntax \`![description](qrCodeUrl)\`. NEVER post the URL as plain text. NEVER print \`qrCodeText\`. NEVER generate your own QR code.
96
108
 
97
- | User says | Calculation | Pass to CLI |
98
- |-----------|-------------|-------------|
99
- | "long with $60 USDC margin at 50x" | already the margin | \`--margin 60\` |
100
- | "open a $3,000 notional position at 50x" | margin = 3000 / 50 = 60 | \`--margin 60\` |
101
- | "long 0.1 BTC at 50x" | margin = (0.1 × current_price) / 50 | \`--margin <result>\` |
109
+ After sending, wait for the user to scan and sign. Do not interrupt the CLI process.
102
110
 
103
- CRITICAL: When the user specifies an asset amount (e.g. "0.1 BTC"), you MUST first run \`jv price --symbol JBTC --pretty\` to get the current price, then compute \`notional = size × price\`, then \`margin = notional / leverage\` before passing \`--margin\`.
111
+ ### Line 2: Init Complete
104
112
 
105
- **How to read \`jv orders list\` output:**
113
+ \`\`\`json
114
+ {"success":true, "message":"Vault initialized successfully", ...}
115
+ \`\`\`
106
116
 
107
- | Field | What it means |
108
- |-------|---------------|
109
- | \`margin\` | Actual collateral deposited (e.g. 60 USDC) — matches what you passed to \`--margin\` |
110
- | \`size\` | Position size in underlying asset (e.g. 0.0428 JBTC) |
111
- | \`leverage\` | Leverage multiplier (e.g. 50) |
112
- | \`entryPriceUsd\` | Entry price when position was opened |
117
+ Init is complete. Tell the user: "Vault initialized successfully. You can now deposit and trade."
113
118
 
114
- To calculate notional from output: \`notional = margin × leverage\` (or \`size × current_price\`)
119
+ The delegation wallet is saved to \`~/.jaspervault/keys.json\` and vault addresses to \`~/.jaspervault/profile.json\`. Subsequent commands use these automatically — no wallet interaction needed.
115
120
 
116
- **How to calculate unrealized PnL:**
121
+ ## Deposit via WalletConnect (Optional)
117
122
 
118
- When the user asks about profit/loss, portfolio value, or position health, you MUST fetch the current price first using \`jv price\`, then compute PnL from \`jv orders list\` output:
123
+ If the user wants to deposit:
119
124
 
120
- | Step | Formula |
121
- |------|---------|
122
- | 1. Get current price | \`jv price --symbol JBTC --pretty\` → read \`price\` field |
123
- | 2. Get position data | \`jv orders list --pretty\` → read \`size\`, \`entryPriceUsd\`, \`margin\`, \`positionSide\` |
124
- | 3. Compute PnL (LONG) | \`unrealizedPnL = size × (currentPrice − entryPrice)\` |
125
- | 3. Compute PnL (SHORT) | \`unrealizedPnL = size × (entryPrice − currentPrice)\` |
126
- | 4. PnL percentage | \`pnlPercent = unrealizedPnL / margin × 100%\` |
127
- | 5. Effective leverage loss | \`leveragedPnlPercent = priceChangePercent × leverage\` |
125
+ 1. **Get unsigned transactions:**
126
+ \`\`\`bash
127
+ jv deposit info --wallet <walletAddress> --token jusdc --amount 100
128
+ \`\`\`
128
129
 
129
- Example: LONG 0.0428 JBTC, entry $70,000, current $71,000, margin 60 USDC
130
- - PnL = 0.0428 × (71000 − 70000) = +$42.80
131
- - PnL% = 42.80 / 60 = +71.3%
130
+ 2. **Output contains \`transactions\` array.** Each \`tx\` has \`to\`, \`data\`, \`value\`, \`chainId\`. Send each via WalletConnect \`eth_sendTransaction\` to the user's wallet. Execute in order (approve first if present, then transferRemote).
132
131
 
133
- IMPORTANT: NEVER guess or estimate the current price from your training data. ALWAYS use \`jv price\` to get the real-time price from Quote Center before any PnL calculation or price-dependent operation.
132
+ 3. **After transactions confirm**, poll for arrival:
133
+ \`\`\`bash
134
+ jv deposit poll --recipient <recipient> --token jusdc
135
+ \`\`\`
136
+ Use the \`recipient\` from step 1 output.
134
137
 
135
- ## Intent Mapping
138
+ 4. Tell the user: "Deposit completed. Your tokens have arrived on JasperVault."
139
+ `;
140
+ // ---------------------------------------------------------------------------
141
+ // references/trading.md — margin, orders, reduce/close, TP/SL, price
142
+ // ---------------------------------------------------------------------------
143
+ const TRADING_REFERENCE = `# Trading Commands
136
144
 
137
- ### Getting Market Price (MUST use before any price-dependent operation)
145
+ ## Getting Market Price
138
146
 
139
- When the user asks about **current price**, **market quote**, **how much is BTC**, **profit/loss**, **PnL**, or before **opening a position with asset quantity**:
147
+ MUST use before any price-dependent operation (opening position by asset quantity, calculating PnL).
140
148
 
141
149
  \`\`\`bash
142
- # Get current JBTC price
143
150
  jv price --symbol JBTC --pretty
144
-
145
- # Get current CBBTC price
146
151
  jv price --symbol CBBTC --pretty
147
152
  \`\`\`
148
153
 
@@ -153,9 +158,26 @@ Output:
153
158
 
154
159
  Use the \`price\` field (human-readable USD value) for display and calculations. This command does NOT require vault initialization — it can be run anytime.
155
160
 
156
- ### Creating Orders (Open New Position)
161
+ ## How \`--margin\` Works
162
+
163
+ \`--margin\` = the **actual collateral (margin) in USDC** you deposit. The CLI internally multiplies by leverage to compute the notional position size.
164
+
165
+ | Concept | Formula | Example |
166
+ |---------|---------|---------|
167
+ | Notional value | \`margin × leverage\` | 60 USDC × 50x = $3,000 |
168
+ | Position size | \`notional / current_price\` | $3,000 / $70,000 = 0.0428 JBTC |
169
+
170
+ ### Translating user intent to \`--margin\`:
157
171
 
158
- When the user wants to **open a position**, **place a market order**, or **place a limit order**:
172
+ | User says | Calculation | Pass to CLI |
173
+ |-----------|-------------|-------------|
174
+ | "long with $60 USDC margin at 50x" | already the margin | \`--margin 60\` |
175
+ | "open a $3,000 notional position at 50x" | margin = 3000 / 50 = 60 | \`--margin 60\` |
176
+ | "long 0.1 BTC at 50x" | margin = (0.1 × current_price) / 50 | \`--margin <result>\` |
177
+
178
+ CRITICAL: When the user specifies an asset amount (e.g. "0.1 BTC"), you MUST first run \`jv price --symbol JBTC --pretty\` to get the current price, then compute \`notional = size × price\`, then \`margin = notional / leverage\`.
179
+
180
+ ## Creating Orders
159
181
 
160
182
  \`\`\`bash
161
183
  # Market order: Long JBTC, 60 USDC margin at 50x (= $3,000 notional)
@@ -172,99 +194,114 @@ The CLI signs the order internally using the delegation wallet. No pre-signed pa
172
194
 
173
195
  On success, a market order returns \`jobId\`; a limit order returns \`limitOrderId\`.
174
196
 
175
- ### Reducing / Partially Closing a Position
197
+ ## Reducing / Closing a Position
176
198
 
177
- To reduce a position, create an **opposite-side order** with the notional value you want to close. The system automatically detects existing positions and performs a partial close.
178
-
179
- **Step-by-step for reducing a position:**
199
+ Create an **opposite-side order** with the margin portion you want to close. The system automatically detects existing positions and performs a partial close.
180
200
 
181
201
  1. Query current position: \`jv orders list --pretty\`
182
- 2. Calculate margin to close:
183
- - Read the \`margin\` field directly from output (e.g. 60 USDC)
184
- - To close half: \`close_margin = margin / 2\` (e.g. 30 USDC)
185
- 3. Create opposite-side order with that margin value
186
-
187
- **Example: Reduce a LONG position by half**
202
+ 2. Read the \`margin\` field directly from output (e.g. 60 USDC)
203
+ 3. To close half: \`close_margin = margin / 2\` (e.g. 30 USDC)
204
+ 4. Create opposite-side order with that margin value
188
205
 
189
- Current position from \`jv orders list\`:
190
- - margin: 60 USDC, leverage: 50, size: 0.0428 JBTC
191
-
192
- To close half (30 USDC margin → $1,500 notional):
206
+ **Reduce LONG by half (30 USDC margin):**
193
207
  \`\`\`bash
194
208
  jv order create --side short --symbol JBTC --margin 30 --leverage 50 --network jaspervault
195
209
  \`\`\`
196
210
 
197
- **Example: Close entire position (60 USDC margin → $3,000 notional):**
211
+ **Close entire LONG (60 USDC margin):**
198
212
  \`\`\`bash
199
213
  jv order create --side short --symbol JBTC --margin 60 --leverage 50 --network jaspervault
200
214
  \`\`\`
201
215
 
202
216
  IMPORTANT: The \`--margin\` for reduction = the margin portion you want to close (read directly from \`jv orders list\` output \`margin\` field).
203
217
 
204
- ### Setting Take-Profit
205
-
206
- When the user wants to **set take-profit**, **set TP**, or **protect profits**:
218
+ ## Setting Take-Profit
207
219
 
208
220
  \`\`\`bash
209
221
  jv tp set --order-id <orderId> --price <usdc_price> --symbol <symbol> --network jaspervault
210
222
  \`\`\`
211
223
 
212
- Example:
213
- \`\`\`bash
214
- jv tp set --order-id 99 --price 105000 --symbol JBTC --network jaspervault
215
- \`\`\`
224
+ Example: \`jv tp set --order-id 99 --price 105000 --symbol JBTC --network jaspervault\`
216
225
 
217
226
  Returns \`limitOrderId\` on success.
218
227
 
219
- ### Setting Stop-Loss
220
-
221
- When the user wants to **set stop-loss**, **set SL**, or **limit downside risk**:
228
+ ## Setting Stop-Loss
222
229
 
223
230
  \`\`\`bash
224
231
  jv sl set --order-id <orderId> --price <usdc_price> --symbol <symbol> --network jaspervault
225
232
  \`\`\`
226
233
 
227
- Example:
228
- \`\`\`bash
229
- jv sl set --order-id 99 --price 90000 --symbol JBTC --network jaspervault
230
- \`\`\`
234
+ Example: \`jv sl set --order-id 99 --price 90000 --symbol JBTC --network jaspervault\`
231
235
 
232
236
  Returns \`limitOrderId\` on success.
233
237
 
234
- ### Creating Hedging Options
238
+ ## PPO Hedge Protection
235
239
 
236
- When the user wants to **buy option protection**, **hedge a position**, or **create a perps option**:
240
+ Add \`--ppo\` to any \`jv order create\` command to enable automatic hedge option protection. PPO hedges the entire position automatically the user does NOT specify how much to hedge.
237
241
 
238
- \`\`\`bash
239
- jv order create-option --order-id <perps_order_id> --data '<signed_option_payload>'
240
- \`\`\`
242
+ **Options:**
241
243
 
242
- Returns \`jobId\` on success. Query execution status with \`jv job status\`.
244
+ | Flag | Values | Default | Description |
245
+ |------|--------|---------|-------------|
246
+ | \`--ppo\` | (boolean) | off | Enable PPO |
247
+ | \`--ppo-expire\` | \`30m\` or \`8h\` | \`30m\` | Option duration |
248
+ | \`--ppo-category\` | \`ATM\` or \`OTM\` | \`ATM\` | ATM = strike at market price; OTM = strike offset |
249
+ | \`--ppo-tier\` | \`1-5\` | (required for OTM) | OTM offset: 1=0.1%, 2=0.2%, 3=0.3%, 4=0.4%, 5=0.5% |
243
250
 
244
- ### Querying Job Status
245
-
246
- When the user asks about **order execution status**, **is my order done**, or **transaction result**:
251
+ **Examples:**
247
252
 
248
253
  \`\`\`bash
249
- jv job status <jobId> --pretty
254
+ # ATM protection, 30 min (default)
255
+ jv order create --side long --symbol JBTC --margin 60 --leverage 50 --ppo --network jaspervault
256
+
257
+ # ATM protection, 8 hours
258
+ jv order create --side long --symbol JBTC --margin 60 --leverage 50 --ppo --ppo-expire 8h --network jaspervault
259
+
260
+ # OTM protection, tier 5 (0.5% offset), 30 min
261
+ jv order create --side long --symbol JBTC --margin 60 --leverage 50 --ppo --ppo-category OTM --ppo-tier 5 --network jaspervault
262
+
263
+ # OTM protection, tier 3 (0.3% offset), 8 hours
264
+ jv order create --side short --symbol JBTC --margin 60 --leverage 50 --ppo --ppo-expire 8h --ppo-category OTM --ppo-tier 3 --network jaspervault
250
265
  \`\`\`
251
266
 
252
- Key fields in output:
253
- - \`status\`: "completed", "failed", "active", "waiting"
254
- - \`result.transactionHash\`: blockchain tx hash (when completed)
255
- - \`result.operationType\`: CREATE, ADD_SIZE, CLOSE_SIZE, etc.
267
+ **AI agent behavior when user wants OTM:**
268
+
269
+ 1. First run \`jv price --symbol JBTC --pretty\` to get current price
270
+ 2. Calculate strike for each tier based on position side:
271
+ - LONG (PUT hedge): \`strike = price × (1 - tier_ratio)\`
272
+ - SHORT (CALL hedge): \`strike = price × (1 + tier_ratio)\`
273
+ 3. Present options: "Tier 1: $87,208 (0.1%), Tier 2: $87,121 (0.2%), ..., Tier 5: $86,860 (0.5%)"
274
+ 4. User picks tier → use \`--ppo-tier N\`
256
275
 
257
- ### Querying Positions
276
+ **Intent mapping:**
277
+
278
+ - User says "hedge" / "protect" / "PPO" / "对冲" / "加保护" → add \`--ppo\`
279
+ - User says "8 hour" / "8小时" → \`--ppo-expire 8h\`
280
+ - User says "OTM" / "价外" → \`--ppo-category OTM\`, then present tier options
281
+ - User says "ATM" / "平价" or nothing → default ATM, 30 min
282
+ `;
283
+ // ---------------------------------------------------------------------------
284
+ // references/queries.md — positions, job status, limit orders, output, errors
285
+ // ---------------------------------------------------------------------------
286
+ const QUERIES_REFERENCE = `# Queries, Output Interpretation & Error Handling
258
287
 
259
- When the user asks about **my positions**, **open orders**, or **portfolio**:
288
+ ## Querying Positions
260
289
 
261
290
  \`\`\`bash
262
- # List all positions
291
+ # List active positions (default — use for "current positions")
263
292
  jv orders list --pretty
264
293
 
265
294
  # Filter by side
266
295
  jv orders list --position-side LONG
267
296
 
297
+ # Include closed/historical orders
298
+ jv orders list --all --pretty
299
+
300
+ # Filter by time range
301
+ jv orders list --all --since 7d --pretty
302
+ jv orders list --since 1w --pretty
303
+ jv orders list --all --since 2025-01-01 --until 2025-01-31 --pretty
304
+
268
305
  # Get a specific position
269
306
  jv orders get <orderId>
270
307
 
@@ -272,31 +309,52 @@ jv orders get <orderId>
272
309
  jv orders stats
273
310
  \`\`\`
274
311
 
275
- ### Managing Limit Orders
312
+ **Key output fields (human-readable, pre-converted from wei):**
276
313
 
277
- When the user asks about **my limit orders**, **pending orders**, or wants to **cancel an order**:
314
+ | Field | Description |
315
+ |-------|-------------|
316
+ | \`margin\` | Margin deposited in USDC (e.g. \`"60.000000"\`) |
317
+ | \`size\` | Position size in underlying asset (e.g. \`"0.04386000"\` JBTC) |
318
+ | \`entryPriceUsd\` | Entry price in USD (e.g. \`"68476.000000000000000000"\`) |
319
+ | \`strikeAmountUsd\` | Strike amount in USD |
320
+ | \`leverage\` | Leverage multiplier (e.g. \`"50"\`) |
321
+ | \`createdTime\` | Creation time in ISO 8601 format |
322
+ | \`positionSide\` | \`"LONG"\` or \`"SHORT"\` |
323
+ | \`isActive\` | \`true\` = open position, \`false\` = closed |
324
+ | \`id\` | Order ID (use for TP/SL commands) |
278
325
 
279
- \`\`\`bash
280
- # List limit orders for a wallet
281
- jv limit-order list --wallet <address>
326
+ To calculate notional from output: \`notional = margin × leverage\` (or \`size × current_price\`)
282
327
 
283
- # Filter by status
284
- jv limit-order list --wallet <address> --status PENDING
328
+ **Pagination:** use \`--page\` and \`--limit\` (e.g. \`jv orders list --page 2 --limit 10\`).
285
329
 
286
- # Check a specific limit order
287
- jv limit-order status <limitOrderId>
330
+ ## Calculating Unrealized PnL
288
331
 
289
- # Cancel a limit order
290
- jv limit-order cancel <limitOrderId>
291
- \`\`\`
332
+ When the user asks about profit/loss, portfolio value, or position health, you MUST fetch the current price first:
292
333
 
293
- Possible statuses: PENDING, TRIGGERED, EXECUTING, COMPLETED, FAILED, EXPIRED, CANCELLED.
334
+ | Step | Formula |
335
+ |------|---------|
336
+ | 1. Get current price | \`jv price --symbol JBTC --pretty\` → read \`price\` field |
337
+ | 2. Get position data | \`jv orders list --pretty\` → read \`size\`, \`entryPriceUsd\`, \`margin\`, \`positionSide\` |
338
+ | 3. Compute PnL (LONG) | \`unrealizedPnL = size × (currentPrice − entryPrice)\` |
339
+ | 3. Compute PnL (SHORT) | \`unrealizedPnL = size × (entryPrice − currentPrice)\` |
340
+ | 4. PnL percentage | \`pnlPercent = unrealizedPnL / margin × 100%\` |
341
+ | 5. Effective leverage | \`leveragedPnlPercent = priceChangePercent × leverage\` |
294
342
 
295
- ## Interpreting Output
343
+ Example: LONG 0.0428 JBTC, entry $70,000, current $71,000, margin 60 USDC
344
+ - PnL = 0.0428 × (71000 − 70000) = +$42.80
345
+ - PnL% = 42.80 / 60 = +71.3%
346
+
347
+ IMPORTANT: NEVER guess or estimate the current price. ALWAYS use \`jv price\` to get the real-time price.
348
+
349
+ ## Job Status
350
+
351
+ \`\`\`bash
352
+ jv job status <jobId> --pretty
353
+ \`\`\`
296
354
 
297
- All commands output JSON to stdout. Extract key fields to compose user-friendly responses.
355
+ Key fields: \`status\` ("completed", "failed", "active", "waiting"), \`result.transactionHash\`, \`result.operationType\` (CREATE, ADD_SIZE, CLOSE_SIZE, etc.).
298
356
 
299
- ### Market Order Output (IMPORTANT — two JSON lines)
357
+ ## Market Order Output (IMPORTANT — two JSON lines)
300
358
 
301
359
  \`jv order create\` for market orders prints **two JSON lines sequentially**:
302
360
 
@@ -310,45 +368,65 @@ All commands output JSON to stdout. Extract key fields to compose user-friendly
310
368
  {"jobId":"MARKET_ORDER_xxx","status":"completed","transactionHash":"0x..."}
311
369
  \`\`\`
312
370
 
313
- **How to determine success:**
314
-
315
- - If \`status === "completed"\` → the order is DONE. It succeeded on-chain.
316
- - If \`status === "failed"\` → the order failed. Report the error.
317
- - If \`status === "timeout"\` → timed out waiting; use \`jv job status <jobId>\` to check later.
318
-
319
371
  **CRITICAL RULES after order execution:**
320
372
 
321
- 1. **If \`status\` is \`"completed"\`, the order IS executed. Do NOT retry or place another order.**
322
- 2. The \`operation\` field (if present) contains raw on-chain data in wei format — do NOT try to interpret quantities or amounts from it. Values like \`10029000\` are NOT human-readable USDC or BTC amounts.
323
- 3. **To verify the actual position after a successful order**, always run \`jv orders list --pretty\` and read the human-readable \`margin\`, \`size\`, \`leverage\` fields. Use \`notional = margin × leverage\` to show the user their position value.
324
- 4. Report to the user: "Order executed successfully. Tx: {transactionHash}. Let me check your updated position..." then run \`jv orders list --pretty\`.
373
+ 1. If \`status === "completed"\` the order IS executed. Do NOT retry or place another order.
374
+ 2. If \`status === "failed"\` report the error.
375
+ 3. If \`status === "timeout"\` use \`jv job status <jobId>\` to check later.
376
+ 4. The \`operation\` field (if present) contains raw on-chain data in wei format do NOT try to interpret it.
377
+ 5. **To verify the actual position**, always run \`jv orders list --pretty\` and read the human-readable fields.
378
+ 6. Report to the user: "Order executed successfully. Tx: {transactionHash}. Let me check your updated position..." then run \`jv orders list --pretty\`.
325
379
 
326
- **Limit order created:**
380
+ **Limit order output:**
327
381
  \`\`\`json
328
382
  {"success":true,"orderType":"limit","limitOrderId":"0x..."}
329
383
  \`\`\`
330
384
  Tell the user: "Limit order placed. ID: {limitOrderId}."
331
385
 
332
- ## Error Handling
386
+ ## Managing Limit Orders
333
387
 
334
- - **Exit code 1**: Configuration error (e.g. delegation key not found — run \`jv vault init-wc\` first; or invalid parameters). Tell the user to check setup.
335
- - **Exit code 2**: Network/HTTP error. Tell the user the service may be unreachable.
336
- - **Exit code 3**: Business error (duplicate order, invalid params, etc.). Read stderr for details and relay the message without exposing raw technical data.
388
+ \`\`\`bash
389
+ # List limit orders for a wallet
390
+ jv limit-order list --wallet <address>
337
391
 
338
- When an error occurs, stderr contains the error message. Never expose raw stack traces or internal URLs to the user.
392
+ # Filter by status
393
+ jv limit-order list --wallet <address> --status PENDING
339
394
 
340
- ## Security Notes
395
+ # Check a specific limit order
396
+ jv limit-order status <limitOrderId>
341
397
 
342
- - Never log or display private keys, signatures, or API keys in responses to the user.
343
- - The CLI signs orders internally via the delegation wallet stored in \`~/.jaspervault/keys.json\`. No private key is ever required from the user.
344
- - Do NOT ask the user to set \`PRIVATE_KEY\` — vault initialization is done via WalletConnect (\`jv vault init-wc\`).
345
- - \`JV_API_KEY\` (optional Bearer token) should be injected via environment variables or secrets manager, never hardcoded.
346
- `.trim();
398
+ # Cancel a limit order
399
+ jv limit-order cancel <limitOrderId>
400
+ \`\`\`
401
+
402
+ Possible statuses: PENDING, TRIGGERED, EXECUTING, COMPLETED, FAILED, EXPIRED, CANCELLED.
403
+
404
+ ## Error Handling
405
+
406
+ | Exit Code | Meaning | Action |
407
+ |-----------|---------|--------|
408
+ | 1 | Configuration error (e.g. delegation key not found) | Run \`jv vault init-wc\` first |
409
+ | 2 | Network/HTTP error | Tell user the service may be unreachable |
410
+ | 3 | Business error (duplicate order, invalid params) | Read stderr, relay message |
411
+
412
+ When an error occurs, stderr contains the error message. Never expose raw stack traces or internal URLs to the user.
413
+ `;
414
+ // ---------------------------------------------------------------------------
415
+ // scripts/check-init.sh
416
+ // ---------------------------------------------------------------------------
417
+ const CHECK_INIT_SCRIPT = `#!/usr/bin/env bash
418
+ # Quick vault initialization check — exits 0 if ready, non-zero otherwise
419
+ jv orders list --pretty 2>/dev/null
420
+ exit $?
421
+ `;
422
+ // ---------------------------------------------------------------------------
423
+ // Platform-specific frontmatter
424
+ // ---------------------------------------------------------------------------
347
425
  function getOpenClawFrontmatter() {
348
426
  return `---
349
427
  name: jasper-vault-cli
350
- description: "Trade perpetual contracts (perps) on JasperVault — open long/short positions, set take-profit/stop-loss, manage limit orders, deposit tokens, and query portfolio via the \`jv\` CLI. 在 JasperVault 上交易永续合约——做多、做空、开仓、平仓、止盈、止损、限价单、持仓查询、充值,通过 jv 命令行完成。"
351
- trigger: "jaspervault|jasper vault|jasper trading|jv trade|jv order|在jasper交易|jasper 交易"
428
+ description: "Trade perpetual contracts (perps) on JasperVault — open/close positions, set TP/SL, manage limit orders, deposit, and query portfolio via the \`jv\` CLI. Initialize wallet via WalletConnect QR scan (no private key needed). 在 JasperVault 上交易永续合约 做多做空、开仓平仓、止盈止损、限价单、持仓查询、充值,使用 WalletConnect 扫码初始化(无需私钥)。"
429
+ trigger: "jaspervault|jasper vault|jasper trading|jv|jv trade|jv order|在jasper交易|jasper 交易|初始化钱包|连接钱包|开仓|平仓|做多|做空|止盈|止损|查看持仓|永续合约"
352
430
  tools: [shell]
353
431
  metadata:
354
432
  openclaw:
@@ -361,24 +439,39 @@ metadata:
361
439
  function getClaudeFrontmatter() {
362
440
  return `---
363
441
  name: jasper-vault-cli
364
- description: Trade perpetual contracts via JasperVault — create orders, set TP/SL, manage limit orders, and query positions through the \`jv\` CLI.
442
+ description: "Trade perpetual contracts (perps) on JasperVault — open/close positions, set TP/SL, manage limit orders, deposit, and query portfolio via the \`jv\` CLI. Initialize wallet via WalletConnect QR scan (no private key needed)."
365
443
  ---
366
444
  `;
367
445
  }
446
+ // ---------------------------------------------------------------------------
447
+ // Public API
448
+ // ---------------------------------------------------------------------------
368
449
  /**
369
- * Build platform-specific SKILL.md content.
450
+ * Build platform-specific skill file tree.
451
+ * Returns a Record mapping relative file paths to their content.
370
452
  * @param platform - One of: openclaw, cursor, claude
371
453
  */
372
454
  export function buildSkillContent(platform) {
455
+ let skillMd;
373
456
  switch (platform) {
374
457
  case 'openclaw':
375
- return getOpenClawFrontmatter() + '\n# JasperVault Trading Skill\n\n' + SKILL_BODY_CONTENT;
458
+ skillMd = getOpenClawFrontmatter() + '\n# JasperVault Trading Skill\n\n' + SKILL_CORE_BODY;
459
+ break;
376
460
  case 'claude':
377
- return getClaudeFrontmatter() + '\n# JasperVault Trading Skill\n\n' + SKILL_BODY_CONTENT;
461
+ skillMd = getClaudeFrontmatter() + '\n# JasperVault Trading Skill\n\n' + SKILL_CORE_BODY;
462
+ break;
378
463
  case 'cursor':
379
- return '# jasper-vault-cli\n\n' + SKILL_BODY_CONTENT;
464
+ skillMd = '# jasper-vault-cli\n\n' + SKILL_CORE_BODY;
465
+ break;
380
466
  default:
381
467
  throw new Error(`Unknown platform: ${platform}`);
382
468
  }
469
+ return {
470
+ 'SKILL.md': skillMd,
471
+ 'references/onboarding.md': ONBOARDING_REFERENCE,
472
+ 'references/trading.md': TRADING_REFERENCE,
473
+ 'references/queries.md': QUERIES_REFERENCE,
474
+ 'scripts/check-init.sh': CHECK_INIT_SCRIPT,
475
+ };
383
476
  }
384
477
  //# sourceMappingURL=skill-body.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"skill-body.js","sourceRoot":"","sources":["../../../src/templates/skill-body.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,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;AAE1C,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CACzC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC,EAAE,OAAO,CAAC,CACzC,CAAC;AAEzB,sEAAsE;AACtE,MAAM,CAAC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;wBAcE,WAAW;;CAElC,CAAC,IAAI,EAAE,CAAC;AAET,2EAA2E;AAC3E,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6T1B,CAAC,IAAI,EAAE,CAAC;AAET,SAAS,sBAAsB;IAC7B,OAAO;;;;;;;;;;;CAWR,CAAC;AACF,CAAC;AAED,SAAS,oBAAoB;IAC3B,OAAO;;;;CAIR,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,UAAU;YACb,OAAO,sBAAsB,EAAE,GAAG,mCAAmC,GAAG,kBAAkB,CAAC;QAC7F,KAAK,QAAQ;YACX,OAAO,oBAAoB,EAAE,GAAG,mCAAmC,GAAG,kBAAkB,CAAC;QAC3F,KAAK,QAAQ;YACX,OAAO,wBAAwB,GAAG,kBAAkB,CAAC;QACvD;YACE,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;IACrD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"skill-body.js","sourceRoot":"","sources":["../../../src/templates/skill-body.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,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;AAE1C,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CACzC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC,EAAE,OAAO,CAAC,CACzC,CAAC;AAEzB,sEAAsE;AACtE,MAAM,CAAC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;wBAcE,WAAW;;CAElC,CAAC,IAAI,EAAE,CAAC;AAIT,8EAA8E;AAC9E,4EAA4E;AAC5E,8EAA8E;AAE9E,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyCvB,CAAC,IAAI,EAAE,CAAC;AAET,8EAA8E;AAC9E,+DAA+D;AAC/D,8EAA8E;AAE9E,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4D5B,CAAC;AAEF,8EAA8E;AAC9E,qEAAqE;AACrE,8EAA8E;AAE9E,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2IzB,CAAC;AAEF,8EAA8E;AAC9E,8EAA8E;AAC9E,8EAA8E;AAE9E,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+HzB,CAAC;AAEF,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E,MAAM,iBAAiB,GAAG;;;;CAIzB,CAAC;AAEF,8EAA8E;AAC9E,gCAAgC;AAChC,8EAA8E;AAE9E,SAAS,sBAAsB;IAC7B,OAAO;;;;;;;;;;;CAWR,CAAC;AACF,CAAC;AAED,SAAS,oBAAoB;IAC3B,OAAO;;;;CAIR,CAAC;AACF,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,IAAI,OAAe,CAAC;IAEpB,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,UAAU;YACb,OAAO,GAAG,sBAAsB,EAAE,GAAG,mCAAmC,GAAG,eAAe,CAAC;YAC3F,MAAM;QACR,KAAK,QAAQ;YACX,OAAO,GAAG,oBAAoB,EAAE,GAAG,mCAAmC,GAAG,eAAe,CAAC;YACzF,MAAM;QACR,KAAK,QAAQ;YACX,OAAO,GAAG,wBAAwB,GAAG,eAAe,CAAC;YACrD,MAAM;QACR;YACE,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,OAAO;QACL,UAAU,EAAE,OAAO;QACnB,0BAA0B,EAAE,oBAAoB;QAChD,uBAAuB,EAAE,iBAAiB;QAC1C,uBAAuB,EAAE,iBAAiB;QAC1C,uBAAuB,EAAE,iBAAiB;KAC3C,CAAC;AACJ,CAAC"}
@@ -38,6 +38,8 @@ export interface OrderIntentParams {
38
38
  network?: string;
39
39
  ttlSeconds?: number;
40
40
  orderID?: number;
41
+ /** 0 = Normal (no PPO), 1 = PPO (hedge option protection) */
42
+ limitType?: number;
41
43
  }
42
44
  export interface TpSlIntentParams {
43
45
  orderID: number;
@@ -0,0 +1,12 @@
1
+ import type { PPOSettings } from '../types.js';
2
+ export declare const PPO_TIER_RATIOS: Record<number, number>;
3
+ export interface PpoResult {
4
+ limitType: number;
5
+ ppoSettings: PPOSettings;
6
+ }
7
+ export declare function parsePpoOptions(opts: {
8
+ ppo?: boolean;
9
+ ppoExpire?: string;
10
+ ppoCategory?: string;
11
+ ppoTier?: string;
12
+ }): PpoResult;
@@ -0,0 +1,45 @@
1
+ import { exitWithError, EXIT_CODES } from './output.js';
2
+ export const PPO_TIER_RATIOS = {
3
+ 1: 0.001,
4
+ 2: 0.002,
5
+ 3: 0.003,
6
+ 4: 0.004,
7
+ 5: 0.005,
8
+ };
9
+ const PPO_EXPIRE_MAP = {
10
+ '30m': '1800',
11
+ '8h': '28800',
12
+ };
13
+ export function parsePpoOptions(opts) {
14
+ if (!opts.ppo) {
15
+ return { limitType: 0, ppoSettings: { optionExpireTime: '0' } };
16
+ }
17
+ const expire = opts.ppoExpire ?? '30m';
18
+ const expireSeconds = PPO_EXPIRE_MAP[expire];
19
+ if (!expireSeconds) {
20
+ exitWithError(`--ppo-expire must be 30m or 8h (got "${expire}")`, EXIT_CODES.CONFIG_ERROR);
21
+ }
22
+ const category = (opts.ppoCategory?.toUpperCase() ?? 'ATM');
23
+ if (category !== 'ATM' && category !== 'OTM') {
24
+ exitWithError(`--ppo-category must be ATM or OTM (got "${opts.ppoCategory}")`, EXIT_CODES.CONFIG_ERROR);
25
+ }
26
+ const ppoSettings = {
27
+ optionExpireTime: expireSeconds,
28
+ optionCategory: category,
29
+ };
30
+ if (category === 'OTM') {
31
+ if (!opts.ppoTier) {
32
+ exitWithError('OTM requires --ppo-tier (1-5)', EXIT_CODES.CONFIG_ERROR);
33
+ }
34
+ const tier = parseInt(opts.ppoTier, 10);
35
+ if (!(tier >= 1 && tier <= 5)) {
36
+ exitWithError(`--ppo-tier must be 1-5 (got "${opts.ppoTier}")`, EXIT_CODES.CONFIG_ERROR);
37
+ }
38
+ ppoSettings.ratio = PPO_TIER_RATIOS[tier];
39
+ }
40
+ else if (opts.ppoTier) {
41
+ console.error('Warning: --ppo-tier is ignored for ATM options');
42
+ }
43
+ return { limitType: 1, ppoSettings };
44
+ }
45
+ //# sourceMappingURL=ppo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ppo.js","sourceRoot":"","sources":["../../../src/utils/ppo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGxD,MAAM,CAAC,MAAM,eAAe,GAA2B;IACrD,CAAC,EAAE,KAAK;IACR,CAAC,EAAE,KAAK;IACR,CAAC,EAAE,KAAK;IACR,CAAC,EAAE,KAAK;IACR,CAAC,EAAE,KAAK;CACT,CAAC;AAEF,MAAM,cAAc,GAA2B;IAC7C,KAAK,EAAE,MAAM;IACb,IAAI,EAAE,OAAO;CACd,CAAC;AAOF,MAAM,UAAU,eAAe,CAAC,IAK/B;IACC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,gBAAgB,EAAE,GAAG,EAAE,EAAE,CAAC;IAClE,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;IACvC,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,aAAa,CAAC,wCAAwC,MAAM,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;IAC7F,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,KAAK,CAAkB,CAAC;IAC7E,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QAC7C,aAAa,CAAC,2CAA2C,IAAI,CAAC,WAAW,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;IAC1G,CAAC;IAED,MAAM,WAAW,GAAgB;QAC/B,gBAAgB,EAAE,aAAa;QAC/B,cAAc,EAAE,QAAQ;KACzB,CAAC;IAEF,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,aAAa,CAAC,+BAA+B,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;QAC1E,CAAC;QACD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC;YAC9B,aAAa,CAAC,gCAAgC,IAAI,CAAC,OAAO,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;QAC3F,CAAC;QACD,WAAW,CAAC,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;SAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;AACvC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jaspervault_cli",
3
- "version": "1.0.16",
3
+ "version": "1.0.17",
4
4
  "description": "JasperVault CLI for interacting with the JasperVault Manager API",
5
5
  "type": "module",
6
6
  "bin": {