@proxygate/cli 0.1.3 → 0.1.5

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
@@ -5,7 +5,7 @@ Terminal interface for [ProxyGate](https://proxygate.ai) — the Airbnb for AI A
5
5
  ## Install
6
6
 
7
7
  ```bash
8
- npm install -g proxygate
8
+ npm install -g @proxygate/cli
9
9
  ```
10
10
 
11
11
  The installer offers to install Claude Code skills for AI-assisted workflows. If you skip this step, install them later with `proxygate skills install`.
@@ -13,7 +13,7 @@ The installer offers to install Claude Code skills for AI-assisted workflows. If
13
13
  ## Update
14
14
 
15
15
  ```bash
16
- npm update -g proxygate
16
+ npm update -g @proxygate/cli
17
17
  proxygate skills install # update Claude Code skills
18
18
  ```
19
19
 
@@ -2,8 +2,8 @@ import type { Command } from 'commander';
2
2
  /**
3
3
  * Register the `proxygate init` command.
4
4
  *
5
- * Detects wallet from keypair file, tests gateway connection,
6
- * and saves config to ~/.proxygate/config.json.
5
+ * Walks through wallet setup (generate / import), tests gateway,
6
+ * and saves config.
7
7
  */
8
8
  export declare function registerInitCommand(program: Command): void;
9
9
  //# sourceMappingURL=init.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwE1D"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAazC;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwF1D"}
@@ -1,74 +1,170 @@
1
- import { access } from 'node:fs/promises';
1
+ import { readFile, writeFile, access, mkdir } from 'node:fs/promises';
2
2
  import { resolve } from 'node:path';
3
3
  import { homedir } from 'node:os';
4
+ import { randomBytes } from 'node:crypto';
5
+ import nacl from 'tweetnacl';
4
6
  import { ProxyGateClient } from '@proxygate/sdk';
5
- import { saveConfig, CONFIG_PATH } from '../config.js';
7
+ import { saveConfig, CONFIG_DIR, CONFIG_PATH } from '../config.js';
6
8
  import { bold, green, yellow, red, dim, formatCurrency } from '../format.js';
9
+ import { parseKeypair } from '../keypair.js';
10
+ const DEFAULT_KEYPAIR_PATH = `${CONFIG_DIR}/keypair.json`;
7
11
  /**
8
12
  * Register the `proxygate init` command.
9
13
  *
10
- * Detects wallet from keypair file, tests gateway connection,
11
- * and saves config to ~/.proxygate/config.json.
14
+ * Walks through wallet setup (generate / import), tests gateway,
15
+ * and saves config.
12
16
  */
13
17
  export function registerInitCommand(program) {
14
18
  program
15
19
  .command('init')
16
- .description('Save gateway URL + keypair path to ~/.proxygate/config.json')
20
+ .description('Initialize ProxyGate: set up wallet and save config')
17
21
  .option('--gateway <url>', 'Gateway URL', 'https://gateway.proxygate.ai')
18
- .option('--keypair <path>', 'Path to Solana keypair JSON file (64-byte array)', '~/.config/solana/id.json')
19
- .addHelpText('after', '\nExamples:\n' +
20
- ' $ proxygate init\n' +
21
- ' $ proxygate init --keypair ~/.proxygate/keypair.json\n' +
22
- ' $ proxygate init --gateway http://localhost:3001 --keypair ./dev-keypair.json\n\n' +
23
- "Don't have a keypair? Generate one:\n" +
24
- ' $ solana-keygen new --outfile ~/.proxygate/keypair.json --no-bip39-passphrase')
22
+ .option('--keypair <path>', 'Path to existing keypair file (any format)')
23
+ .option('--generate', 'Generate a new keypair')
24
+ .addHelpText('after', '\nSupported keypair formats:\n' +
25
+ ' - JSON array of 64 numbers (Solana CLI / solana-keygen)\n' +
26
+ ' - JSON array of 32 numbers (seed only)\n' +
27
+ ' - Base58 private key (Phantom wallet export)\n' +
28
+ ' - Base64 / Hex encoded keys\n\n' +
29
+ 'Examples:\n' +
30
+ ' $ proxygate init # auto-detect or generate keypair\n' +
31
+ ' $ proxygate init --generate # generate new keypair\n' +
32
+ ' $ proxygate init --keypair ~/phantom.txt # import Phantom base58 key\n' +
33
+ ' $ proxygate init --keypair ~/id.json # import Solana CLI keypair\n')
25
34
  .action(async (opts) => {
26
35
  console.log(bold('ProxyGate Init'));
27
36
  console.log();
28
- // Resolve keypair path (expand ~)
29
- let keypairPath = opts.keypair;
30
- if (keypairPath.startsWith('~')) {
31
- keypairPath = keypairPath.replace(/^~/, homedir());
37
+ if (opts.keypair && opts.generate) {
38
+ console.error(red('Cannot use both --keypair and --generate'));
39
+ process.exit(1);
32
40
  }
33
- keypairPath = resolve(keypairPath);
34
- // Check keypair file exists
35
- try {
36
- await access(keypairPath);
41
+ let keypairPath;
42
+ if (opts.generate) {
43
+ keypairPath = await generateKeypair();
37
44
  }
38
- catch {
39
- console.error(red(`Keypair file not found: ${keypairPath}`));
40
- console.error(dim('Generate one with: solana-keygen new'));
41
- process.exit(1);
45
+ else if (opts.keypair) {
46
+ keypairPath = await importKeypair(resolvePath(opts.keypair));
47
+ }
48
+ else {
49
+ // Auto-detect existing keypair
50
+ const candidates = [DEFAULT_KEYPAIR_PATH, resolvePath('~/.config/solana/id.json')];
51
+ let found = null;
52
+ for (const c of candidates) {
53
+ try {
54
+ await access(c);
55
+ found = c;
56
+ break;
57
+ }
58
+ catch { /* not found */ }
59
+ }
60
+ if (found) {
61
+ keypairPath = found;
62
+ console.log(dim(`Using existing keypair: ${keypairPath}`));
63
+ }
64
+ else {
65
+ console.log('No keypair found. Generating a new one...');
66
+ console.log();
67
+ keypairPath = await generateKeypair();
68
+ }
42
69
  }
43
70
  // Create client from keypair
44
71
  let client;
45
72
  try {
46
- client = await ProxyGateClient.create({
47
- gatewayUrl: opts.gateway,
48
- keypairPath,
49
- });
73
+ client = await ProxyGateClient.create({ gatewayUrl: opts.gateway, keypairPath });
50
74
  }
51
75
  catch (err) {
52
- const message = err instanceof Error ? err.message : String(err);
53
- console.error(red(`Failed to load keypair: ${message}`));
76
+ console.error(red(`Failed to load keypair: ${err instanceof Error ? err.message : String(err)}`));
54
77
  process.exit(1);
55
78
  }
56
79
  console.log(`${green('Wallet:')} ${client.walletAddress}`);
57
80
  console.log(`${dim('Gateway:')} ${opts.gateway}`);
58
81
  console.log();
59
- // Test gateway connection (non-fatal)
82
+ // Test gateway + balance
60
83
  try {
61
84
  const balance = await client.balance();
62
85
  console.log(`${green('Balance:')} ${formatCurrency(balance.balance)}`);
63
86
  }
64
87
  catch {
65
- console.log(yellow('Warning: Could not connect to gateway. Config will still be saved.'));
88
+ console.log(yellow('Could not connect to gateway. Config will still be saved.'));
89
+ console.log();
90
+ console.log(dim('To receive USDC payouts (jobs, seller earnings), your wallet needs'));
91
+ console.log(dim('a USDC token account. Create one at app.proxygate.ai or it will'));
92
+ console.log(dim('be set up automatically with your first deposit.'));
66
93
  }
67
94
  // Save config
68
- await saveConfig({ gatewayUrl: opts.gateway, keypairPath });
69
95
  console.log();
96
+ await saveConfig({ gatewayUrl: opts.gateway, keypairPath });
70
97
  console.log(`${green('Config saved to')} ${CONFIG_PATH}`);
71
- console.log(dim('Run `proxygate balance` to check your balance.'));
98
+ console.log();
99
+ console.log(bold('Next steps:'));
100
+ console.log(dim(' proxygate deposit -a 1000000 # deposit 1 USDC'));
101
+ console.log(dim(' proxygate balance # check balance'));
102
+ console.log(dim(' proxygate apis # browse available APIs'));
72
103
  });
73
104
  }
105
+ function resolvePath(path) {
106
+ if (path.startsWith('~'))
107
+ return resolve(path.replace(/^~/, homedir()));
108
+ return resolve(path);
109
+ }
110
+ /** Import a keypair from any supported format, convert to Solana CLI format. */
111
+ async function importKeypair(sourcePath) {
112
+ try {
113
+ await access(sourcePath);
114
+ }
115
+ catch {
116
+ console.error(red(`File not found: ${sourcePath}`));
117
+ process.exit(1);
118
+ }
119
+ const raw = await readFile(sourcePath, 'utf-8');
120
+ let parsed;
121
+ try {
122
+ parsed = parseKeypair(raw);
123
+ }
124
+ catch (err) {
125
+ console.error(red(`Failed to parse keypair: ${err instanceof Error ? err.message : String(err)}`));
126
+ process.exit(1);
127
+ }
128
+ console.log(dim(`Detected format: ${parsed.format}`));
129
+ // Check if source is already a valid 64-byte JSON array (Solana CLI format)
130
+ const trimmed = raw.trim();
131
+ const isAlreadySolanaFormat = trimmed.startsWith('[') && (() => {
132
+ try {
133
+ const a = JSON.parse(trimmed);
134
+ return Array.isArray(a) && a.length === 64;
135
+ }
136
+ catch {
137
+ return false;
138
+ }
139
+ })();
140
+ if (isAlreadySolanaFormat) {
141
+ // Source file is already in the right format — use it directly
142
+ console.log(green(`Keypair ready: ${sourcePath}`));
143
+ console.log();
144
+ return sourcePath;
145
+ }
146
+ // Convert to Solana CLI format and save to default path
147
+ await mkdir(CONFIG_DIR, { recursive: true });
148
+ const destPath = DEFAULT_KEYPAIR_PATH;
149
+ await writeFile(destPath, JSON.stringify(parsed.secretKey) + '\n', { mode: 0o600 });
150
+ console.log(green(`Converted and saved to: ${destPath}`));
151
+ console.log();
152
+ return destPath;
153
+ }
154
+ /** Generate a fresh ed25519 keypair. */
155
+ async function generateKeypair() {
156
+ const seed = randomBytes(32);
157
+ const keypair = nacl.sign.keyPair.fromSeed(new Uint8Array(seed));
158
+ await mkdir(CONFIG_DIR, { recursive: true });
159
+ const path = DEFAULT_KEYPAIR_PATH;
160
+ await writeFile(path, JSON.stringify(Array.from(keypair.secretKey)) + '\n', { mode: 0o600 });
161
+ // Use the client to derive base58 wallet address
162
+ const tempClient = await ProxyGateClient.create({ gatewayUrl: 'https://gateway.proxygate.ai', keypairPath: path });
163
+ console.log(`${green('Generated keypair:')} ${path}`);
164
+ console.log(`${green('Public key:')} ${tempClient.walletAddress}`);
165
+ console.log();
166
+ console.log(yellow('Important: back up this file! If you lose it, you lose access to your wallet.'));
167
+ console.log();
168
+ return path;
169
+ }
74
170
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE7E;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,6DAA6D,CAAC;SAC1E,MAAM,CAAC,iBAAiB,EAAE,aAAa,EAAE,8BAA8B,CAAC;SACxE,MAAM,CACL,kBAAkB,EAClB,kDAAkD,EAClD,0BAA0B,CAC3B;SACA,WAAW,CACV,OAAO,EACP,eAAe;QACb,sBAAsB;QACtB,0DAA0D;QAC1D,qFAAqF;QACrF,uCAAuC;QACvC,iFAAiF,CACpF;SACA,MAAM,CAAC,KAAK,EAAE,IAA0C,EAAE,EAAE;QAC3D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,kCAAkC;QAClC,IAAI,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC;QAC/B,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;QAEnC,4BAA4B;QAC5B,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,WAAW,EAAE,CAAC,CAAC,CAAC;YAC7D,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,6BAA6B;QAC7B,IAAI,MAAuB,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC;gBACpC,UAAU,EAAE,IAAI,CAAC,OAAO;gBACxB,WAAW;aACZ,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,OAAO,EAAE,CAAC,CAAC,CAAC;YACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,sCAAsC;QACtC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACzE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,GAAG,CACT,MAAM,CAAC,oEAAoE,CAAC,CAC7E,CAAC;QACJ,CAAC;QAED,cAAc;QACd,MAAM,UAAU,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,iBAAiB,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -11,11 +11,25 @@ vi.mock('@proxygate/sdk', () => ({
11
11
  const mockSaveConfig = vi.fn();
12
12
  vi.mock('../config.js', () => ({
13
13
  saveConfig: (...args) => mockSaveConfig(...args),
14
+ CONFIG_DIR: '/home/test/.proxygate',
14
15
  CONFIG_PATH: '/home/test/.proxygate/config.json',
15
16
  }));
16
17
  const mockAccess = vi.fn();
18
+ const mockReadFile = vi.fn();
19
+ const mockWriteFile = vi.fn();
20
+ const mockMkdir = vi.fn();
17
21
  vi.mock('node:fs/promises', () => ({
18
22
  access: (...args) => mockAccess(...args),
23
+ readFile: (...args) => mockReadFile(...args),
24
+ writeFile: (...args) => mockWriteFile(...args),
25
+ mkdir: (...args) => mockMkdir(...args),
26
+ }));
27
+ // Mock parseKeypair to avoid reading actual files
28
+ vi.mock('../keypair.js', () => ({
29
+ parseKeypair: () => ({
30
+ secretKey: Array.from({ length: 64 }, (_, i) => i),
31
+ format: 'Solana CLI keypair (64-byte JSON array)',
32
+ }),
19
33
  }));
20
34
  describe('init command', () => {
21
35
  let logSpy;
@@ -26,6 +40,9 @@ describe('init command', () => {
26
40
  errorSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
27
41
  // Default: file exists, client creation succeeds, balance succeeds
28
42
  mockAccess.mockResolvedValue(undefined);
43
+ mockReadFile.mockResolvedValue(JSON.stringify(Array.from({ length: 64 }, (_, i) => i)));
44
+ mockWriteFile.mockResolvedValue(undefined);
45
+ mockMkdir.mockResolvedValue(undefined);
29
46
  mockBalance.mockResolvedValue({ balance: 5_000_000 });
30
47
  mockCreate.mockResolvedValue({
31
48
  walletAddress: 'TestWallet11111111111111111111111111111111111',
@@ -57,7 +74,7 @@ describe('init command', () => {
57
74
  const errOutput = errorSpy.mock.calls
58
75
  .map((c) => c[0])
59
76
  .join('\n');
60
- expect(errOutput).toContain('Keypair file not found');
77
+ expect(errOutput).toContain('not found');
61
78
  expect(mockSaveConfig).not.toHaveBeenCalled();
62
79
  mockExit.mockRestore();
63
80
  });
@@ -69,33 +86,22 @@ describe('init command', () => {
69
86
  expect(output).toContain('Config saved');
70
87
  expect(mockSaveConfig).toHaveBeenCalledOnce();
71
88
  });
72
- it('saves correct config with gatewayUrl and keypairPath', async () => {
73
- await runInit('--keypair', '/tmp/my-key.json', '--gateway', 'https://gw.example.com');
74
- expect(mockSaveConfig).toHaveBeenCalledWith({
75
- gatewayUrl: 'https://gw.example.com',
76
- keypairPath: '/tmp/my-key.json',
77
- });
78
- });
79
- it('expands tilde in keypair path', async () => {
80
- const { homedir } = await import('node:os');
81
- const home = homedir();
82
- await runInit('--keypair', '~/.config/solana/id.json');
83
- // The resolved path should use the actual home directory
84
- expect(mockAccess).toHaveBeenCalledWith(expect.stringContaining(`${home}/.config/solana/id.json`));
85
- expect(mockCreate).toHaveBeenCalledWith(expect.objectContaining({
86
- keypairPath: expect.stringContaining(`${home}/.config/solana/id.json`),
87
- }));
88
- });
89
89
  it('uses custom --gateway flag value', async () => {
90
90
  await runInit('--keypair', '/tmp/test-key.json', '--gateway', 'https://custom-gw.io');
91
91
  const output = logSpy.mock.calls.map((c) => c[0]).join('\n');
92
92
  expect(output).toContain('https://custom-gw.io');
93
93
  expect(mockSaveConfig).toHaveBeenCalledWith(expect.objectContaining({ gatewayUrl: 'https://custom-gw.io' }));
94
94
  });
95
- it('uses custom --keypair flag value', async () => {
96
- await runInit('--keypair', '/opt/keys/special.json');
97
- expect(mockAccess).toHaveBeenCalledWith('/opt/keys/special.json');
98
- expect(mockCreate).toHaveBeenCalledWith(expect.objectContaining({ keypairPath: '/opt/keys/special.json' }));
95
+ it('exits when both --keypair and --generate provided', async () => {
96
+ const mockExit = vi.spyOn(process, 'exit').mockImplementation(() => {
97
+ throw new Error('process.exit');
98
+ });
99
+ await expect(runInit('--keypair', '/tmp/key.json', '--generate')).rejects.toThrow('process.exit');
100
+ const errOutput = errorSpy.mock.calls
101
+ .map((c) => c[0])
102
+ .join('\n');
103
+ expect(errOutput).toContain('Cannot use both');
104
+ mockExit.mockRestore();
99
105
  });
100
106
  it('exits with error when ProxyGateClient.create fails', async () => {
101
107
  mockCreate.mockRejectedValue(new Error('Invalid keypair format'));
@@ -107,7 +113,6 @@ describe('init command', () => {
107
113
  .map((c) => c[0])
108
114
  .join('\n');
109
115
  expect(errOutput).toContain('Failed to load keypair');
110
- expect(errOutput).toContain('Invalid keypair format');
111
116
  expect(mockSaveConfig).not.toHaveBeenCalled();
112
117
  mockExit.mockRestore();
113
118
  });
@@ -1 +1 @@
1
- {"version":3,"file":"init.test.js","sourceRoot":"","sources":["../../src/commands/init.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.test.js","sourceRoot":"","sources":["../../src/commands/init.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../../src/commands/jobs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+VzC;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8B1D"}
1
+ {"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../../src/commands/jobs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuWzC;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8B1D"}
@@ -32,6 +32,7 @@ function colorStatus(status) {
32
32
  case 'open': return green(status);
33
33
  case 'claimed': return cyan(status);
34
34
  case 'in_review': return yellow(status);
35
+ case 'disputed': return yellow('DISPUTED');
35
36
  case 'completed': return green(status);
36
37
  case 'cancelled':
37
38
  case 'refunded': return dim(status);
@@ -116,6 +117,8 @@ function registerGetSubcommand(jobs, program) {
116
117
  if (job.deadline)
117
118
  console.log(` ${dim('Deadline:')} ${job.deadline}`);
118
119
  console.log(` ${dim('Rejections:')} ${job.rejection_count}`);
120
+ if (job.rejection_reason)
121
+ console.log(` ${dim('Reject reason:')} ${job.rejection_reason}`);
119
122
  console.log(` ${dim('Created:')} ${job.created_at}`);
120
123
  if (job.claimed_at)
121
124
  console.log(` ${dim('Claimed:')} ${job.claimed_at}`);
@@ -300,12 +303,18 @@ function registerAcceptSubcommand(jobs, program) {
300
303
  function registerRejectSubcommand(jobs, program) {
301
304
  jobs
302
305
  .command('reject <id>')
303
- .description('Reject a submission (auto-releases escrow on 2nd rejection)')
304
- .action(async (id) => {
306
+ .description('Reject a submission (2nd rejection triggers admin dispute review)')
307
+ .option('--reason <text>', 'Rejection reason')
308
+ .action(async (id, opts) => {
305
309
  const parentOpts = program.opts();
306
310
  try {
307
311
  const client = await getClient(parentOpts);
308
- const result = await client.jobs.reject(id);
312
+ let reason = opts.reason;
313
+ if (!reason) {
314
+ const { input } = await loadPrompts();
315
+ reason = await input({ message: 'Rejection reason:' });
316
+ }
317
+ const result = await client.jobs.reject(id, { reason });
309
318
  console.log(JSON.stringify(result, null, 2));
310
319
  }
311
320
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../src/commands/jobs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../src/commands/jobs.ts"],"names":[],"mappings":"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"}
@@ -17,7 +17,7 @@ export const SKILLS = {
17
17
  },
18
18
  "pg-update": {
19
19
  "SKILL.md": "---\nname: pg-update\ndescription: Use when updating ProxyGate CLI or SDK to latest version. Also triggers proactively when ~/.claude/cache/proxygate-update-check.json indicates an update is available and the statusline shows the update indicator. Make sure to use this whenever someone says \"update proxygate\", \"upgrade cli\", or when a session starts with an update notification.\n---\n\n# ProxyGate Update\n\nCheck for and install updates to proxygate.\n\n<process>\n\n<step name=\"get_installed_version\">\n```bash\nproxygate --version 2>/dev/null || echo \"NOT_INSTALLED\"\n```\n\nIf not installed, direct user to `/pg-setup`.\n</step>\n\n<step name=\"check_latest_version\">\n```bash\nnpm view @proxygate/cli version 2>/dev/null || echo \"UNAVAILABLE\"\n```\n\nIf npm check fails, suggest manual update: `npm install -g @proxygate/cli@latest`\n</step>\n\n<step name=\"compare_versions\">\n- If installed == latest: \"You're already on the latest version.\"\n- If installed < latest: show both versions and proceed to update\n- If not installed: direct to `/pg-setup`\n</step>\n\n<step name=\"run_update\">\n```bash\nnpm install -g @proxygate/cli@latest\n```\n\nVerify:\n```bash\nproxygate --version\n```\n</step>\n\n<step name=\"update_skills\">\nSkills are bundled in the CLI, so a new version may include updated skills:\n\n```bash\nproxygate skills install\n```\n</step>\n\n<step name=\"clear_cache\">\n```bash\nrm -f ~/.claude/cache/proxygate-update-check.json\n```\n</step>\n\n</process>\n\n## SDK Update\n\nIf `@proxygate/sdk` is in the project's dependencies:\n\n```bash\nnpm install @proxygate/sdk@latest\n# or\npnpm add @proxygate/sdk@latest\n```\n\n<success_criteria>\n- [ ] Installed version detected correctly\n- [ ] Latest version checked via npm\n- [ ] Update skipped if already current\n- [ ] CLI updated successfully\n- [ ] Skills updated via `proxygate skills install`\n- [ ] Update cache cleared\n</success_criteria>\n",
20
- "scripts/check-update.sh": "#!/usr/bin/env bash\n# ProxyGate update checker — runs on Claude Code SessionStart.\n# Writes result to ~/.claude/cache/proxygate-update-check.json.\n# Exits quickly; never blocks session startup.\n\nset -euo pipefail\n\nCACHE_DIR=\"$HOME/.claude/cache\"\nCACHE_FILE=\"$CACHE_DIR/proxygate-update-check.json\"\n\nmkdir -p \"$CACHE_DIR\"\n\n# Skip if checked within last hour\nif [ -f \"$CACHE_FILE\" ]; then\n if [ \"$(uname)\" = \"Darwin\" ]; then\n age=$(( $(date +%s) - $(stat -f %m \"$CACHE_FILE\") ))\n else\n age=$(( $(date +%s) - $(stat -c %Y \"$CACHE_FILE\") ))\n fi\n if [ \"$age\" -lt 3600 ]; then\n exit 0\n fi\nfi\n\ncurrent=$(proxygate --version 2>/dev/null || echo \"0.0.0\")\nlatest=$(npm view @proxygate/cli version 2>/dev/null || echo \"0.0.0\")\n\nif [ \"$current\" = \"$latest\" ] || [ \"$latest\" = \"0.0.0\" ]; then\n cat > \"$CACHE_FILE\" <<JSON\n{\"update_available\":false,\"current\":\"$current\",\"latest\":\"$latest\",\"checked_at\":\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\"}\nJSON\nelse\n cat > \"$CACHE_FILE\" <<JSON\n{\"update_available\":true,\"current\":\"$current\",\"latest\":\"$latest\",\"checked_at\":\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\"}\nJSON\nfi\n"
20
+ "scripts/check-update.sh": "#!/usr/bin/env bash\n# ProxyGate update checker — runs on Claude Code SessionStart.\n# Writes result to ~/.claude/cache/proxygate-update-check.json.\n# Exits quickly; never blocks session startup.\n\nset -euo pipefail\n\nCACHE_DIR=\"$HOME/.claude/cache\"\nCACHE_FILE=\"$CACHE_DIR/proxygate-update-check.json\"\n\nmkdir -p \"$CACHE_DIR\"\n\n# Skip if checked within last hour\nif [ -f \"$CACHE_FILE\" ]; then\n if [ \"$(uname)\" = \"Darwin\" ]; then\n age=$(( $(date +%s) - $(stat -f %m \"$CACHE_FILE\") ))\n else\n age=$(( $(date +%s) - $(stat -c %Y \"$CACHE_FILE\") ))\n fi\n if [ \"$age\" -lt 3600 ]; then\n exit 0\n fi\nfi\n\ncurrent=$(proxygate --version 2>/dev/null || echo \"0.0.0\")\nlatest=$(npm view @proxygate/cli version 2>/dev/null || echo \"0.0.0\")\n\nif [ \"$current\" = \"$latest\" ] || [ \"$latest\" = \"0.0.0\" ]; then\n cat > \"$CACHE_FILE\" <<JSON\n{\"update_available\":false,\"current\":\"$current\",\"latest\":\"$latest\",\"checked_at\":\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\"}\nJSON\nelse\n cat > \"$CACHE_FILE\" <<JSON\n{\"update_available\":true,\"current\":\"$current\",\"latest\":\"$latest\",\"checked_at\":\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\"}\nJSON\n echo \"ProxyGate update available: $current → $latest. Run /pg-update to upgrade.\"\nfi\n"
21
21
  }
22
22
  };
23
23
  //# sourceMappingURL=skills.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/generated/skills.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,MAAM,CAAC,MAAM,MAAM,GAA2C;IAC5D,QAAQ,EAAE;QACR,UAAU,EAAE,8+IAA8+I;QAC1/I,wBAAwB,EAAE,gqGAAgqG;KAC3rG;IACD,SAAS,EAAE;QACT,UAAU,EAAE,soIAAsoI;QAClpI,wBAAwB,EAAE,gqGAAgqG;KAC3rG;IACD,UAAU,EAAE;QACV,UAAU,EAAE,wlHAAwlH;QACpmH,wBAAwB,EAAE,gqGAAgqG;KAC3rG;IACD,WAAW,EAAE;QACX,UAAU,EAAE,gpDAAgpD;KAC7pD;IACD,WAAW,EAAE;QACX,UAAU,EAAE,25DAA25D;QACv6D,yBAAyB,EAAE,2qCAA2qC;KACvsC;CACF,CAAC"}
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/generated/skills.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,MAAM,CAAC,MAAM,MAAM,GAA2C;IAC5D,QAAQ,EAAE;QACR,UAAU,EAAE,8+IAA8+I;QAC1/I,wBAAwB,EAAE,gqGAAgqG;KAC3rG;IACD,SAAS,EAAE;QACT,UAAU,EAAE,soIAAsoI;QAClpI,wBAAwB,EAAE,gqGAAgqG;KAC3rG;IACD,UAAU,EAAE;QACV,UAAU,EAAE,wlHAAwlH;QACpmH,wBAAwB,EAAE,gqGAAgqG;KAC3rG;IACD,WAAW,EAAE;QACX,UAAU,EAAE,gpDAAgpD;KAC7pD;IACD,WAAW,EAAE;QACX,UAAU,EAAE,25DAA25D;QACv6D,yBAAyB,EAAE,kwCAAkwC;KAC9xC;CACF,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Parse and convert Solana keypairs from various formats.
3
+ *
4
+ * Supported input formats:
5
+ * - JSON array of 64 numbers (Solana CLI: solana-keygen)
6
+ * - JSON array of 32 numbers (seed only)
7
+ * - Base58 string, 64 bytes decoded (Phantom private key export)
8
+ * - Base58 string, 32 bytes decoded (seed)
9
+ * - Raw base64 string, 64 bytes decoded
10
+ * - Raw base64 string, 32 bytes decoded
11
+ *
12
+ * Output: Solana-compatible JSON array of 64 numbers [secretKey(32) + publicKey(32)].
13
+ */
14
+ export interface ParseResult {
15
+ secretKey: number[];
16
+ format: string;
17
+ }
18
+ /**
19
+ * Parse raw content (file contents or pasted string) into a 64-byte Solana keypair.
20
+ * Throws descriptive errors for unsupported formats.
21
+ */
22
+ export declare function parseKeypair(raw: string): ParseResult;
23
+ //# sourceMappingURL=keypair.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keypair.d.ts","sourceRoot":"","sources":["../src/keypair.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAwCH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CA6ErD"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Parse and convert Solana keypairs from various formats.
3
+ *
4
+ * Supported input formats:
5
+ * - JSON array of 64 numbers (Solana CLI: solana-keygen)
6
+ * - JSON array of 32 numbers (seed only)
7
+ * - Base58 string, 64 bytes decoded (Phantom private key export)
8
+ * - Base58 string, 32 bytes decoded (seed)
9
+ * - Raw base64 string, 64 bytes decoded
10
+ * - Raw base64 string, 32 bytes decoded
11
+ *
12
+ * Output: Solana-compatible JSON array of 64 numbers [secretKey(32) + publicKey(32)].
13
+ */
14
+ import nacl from 'tweetnacl';
15
+ const BASE58_ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
16
+ const BASE58_SET = new Set(BASE58_ALPHABET);
17
+ const BASE58_MAP = new Map();
18
+ for (let i = 0; i < BASE58_ALPHABET.length; i++) {
19
+ BASE58_MAP.set(BASE58_ALPHABET[i], i);
20
+ }
21
+ function decodeBase58(str) {
22
+ let leadingOnes = 0;
23
+ for (let i = 0; i < str.length && str[i] === '1'; i++)
24
+ leadingOnes++;
25
+ let num = BigInt(0);
26
+ for (let i = 0; i < str.length; i++) {
27
+ const v = BASE58_MAP.get(str[i]);
28
+ if (v === undefined)
29
+ throw new Error(`Invalid base58 character: ${str[i]}`);
30
+ num = num * 58n + BigInt(v);
31
+ }
32
+ const bytes = [];
33
+ while (num > 0n) {
34
+ bytes.unshift(Number(num % 256n));
35
+ num /= 256n;
36
+ }
37
+ for (let i = 0; i < leadingOnes; i++)
38
+ bytes.unshift(0);
39
+ return Uint8Array.from(bytes);
40
+ }
41
+ function isBase58(str) {
42
+ for (const ch of str) {
43
+ if (!BASE58_SET.has(ch))
44
+ return false;
45
+ }
46
+ return str.length > 0;
47
+ }
48
+ function isBase64(str) {
49
+ return /^[A-Za-z0-9+/]+=*$/.test(str) && str.length > 0;
50
+ }
51
+ function keypairFromSeed(seed) {
52
+ const kp = nacl.sign.keyPair.fromSeed(seed);
53
+ return kp.secretKey; // 64 bytes: seed(32) + pubkey(32)
54
+ }
55
+ /**
56
+ * Parse raw content (file contents or pasted string) into a 64-byte Solana keypair.
57
+ * Throws descriptive errors for unsupported formats.
58
+ */
59
+ export function parseKeypair(raw) {
60
+ const trimmed = raw.trim();
61
+ // 1. JSON array
62
+ if (trimmed.startsWith('[')) {
63
+ try {
64
+ const arr = JSON.parse(trimmed);
65
+ if (!Array.isArray(arr) || !arr.every((n) => typeof n === 'number' && n >= 0 && n <= 255)) {
66
+ throw new Error('JSON array must contain numbers 0-255');
67
+ }
68
+ if (arr.length === 64) {
69
+ return { secretKey: arr, format: 'Solana CLI keypair (64-byte JSON array)' };
70
+ }
71
+ if (arr.length === 32) {
72
+ const full = keypairFromSeed(Uint8Array.from(arr));
73
+ return { secretKey: Array.from(full), format: '32-byte seed (JSON array, expanded to keypair)' };
74
+ }
75
+ throw new Error(`Expected 32 or 64 numbers, got ${arr.length}`);
76
+ }
77
+ catch (err) {
78
+ if (err instanceof SyntaxError)
79
+ throw new Error('Invalid JSON in keypair file');
80
+ throw err;
81
+ }
82
+ }
83
+ // 2. Base58 string (Phantom export, etc.)
84
+ if (isBase58(trimmed) && trimmed.length >= 32 && trimmed.length <= 96) {
85
+ const bytes = decodeBase58(trimmed);
86
+ if (bytes.length === 64) {
87
+ return { secretKey: Array.from(bytes), format: 'Base58 private key (64 bytes, e.g. Phantom export)' };
88
+ }
89
+ if (bytes.length === 32) {
90
+ const full = keypairFromSeed(bytes);
91
+ return { secretKey: Array.from(full), format: 'Base58 seed (32 bytes, expanded to keypair)' };
92
+ }
93
+ // Could be a public key (32 bytes are valid base58 at shorter lengths)
94
+ throw new Error(`Base58 decoded to ${bytes.length} bytes. Expected 32 (seed) or 64 (keypair).`);
95
+ }
96
+ // 3. Hex string (check before base64, since hex chars are valid base64)
97
+ if (/^(0x)?[0-9a-fA-F]+$/.test(trimmed)) {
98
+ const hex = trimmed.startsWith('0x') ? trimmed.slice(2) : trimmed;
99
+ if (hex.length === 128 || hex.length === 64) {
100
+ const bytes = Uint8Array.from(Buffer.from(hex, 'hex'));
101
+ if (bytes.length === 64) {
102
+ return { secretKey: Array.from(bytes), format: 'Hex private key (64 bytes)' };
103
+ }
104
+ if (bytes.length === 32) {
105
+ const full = keypairFromSeed(bytes);
106
+ return { secretKey: Array.from(full), format: 'Hex seed (32 bytes, expanded to keypair)' };
107
+ }
108
+ }
109
+ }
110
+ // 4. Base64 string
111
+ if (isBase64(trimmed) && trimmed.length >= 43) {
112
+ const bytes = Uint8Array.from(Buffer.from(trimmed, 'base64'));
113
+ if (bytes.length === 64) {
114
+ return { secretKey: Array.from(bytes), format: 'Base64 private key (64 bytes)' };
115
+ }
116
+ if (bytes.length === 32) {
117
+ const full = keypairFromSeed(bytes);
118
+ return { secretKey: Array.from(full), format: 'Base64 seed (32 bytes, expanded to keypair)' };
119
+ }
120
+ throw new Error(`Base64 decoded to ${bytes.length} bytes. Expected 32 (seed) or 64 (keypair).`);
121
+ }
122
+ throw new Error('Unrecognized keypair format. Supported formats:\n' +
123
+ ' - JSON array of 64 numbers (Solana CLI)\n' +
124
+ ' - JSON array of 32 numbers (seed)\n' +
125
+ ' - Base58 string (Phantom export)\n' +
126
+ ' - Base64 string\n' +
127
+ ' - Hex string');
128
+ }
129
+ //# sourceMappingURL=keypair.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keypair.js","sourceRoot":"","sources":["../src/keypair.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=keypair.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keypair.test.d.ts","sourceRoot":"","sources":["../src/keypair.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,64 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import nacl from 'tweetnacl';
3
+ import { parseKeypair } from './keypair.js';
4
+ const seed = new Uint8Array(32).fill(42);
5
+ const keypair = nacl.sign.keyPair.fromSeed(seed);
6
+ describe('parseKeypair', () => {
7
+ it('parses Solana CLI format (64-byte JSON array)', () => {
8
+ const input = JSON.stringify(Array.from(keypair.secretKey));
9
+ const result = parseKeypair(input);
10
+ expect(result.secretKey).toEqual(Array.from(keypair.secretKey));
11
+ expect(result.format).toContain('64-byte');
12
+ });
13
+ it('parses 32-byte seed JSON array and expands', () => {
14
+ const input = JSON.stringify(Array.from(seed));
15
+ const result = parseKeypair(input);
16
+ expect(result.secretKey.length).toBe(64);
17
+ // Verify it produces the same keypair
18
+ expect(result.secretKey).toEqual(Array.from(keypair.secretKey));
19
+ expect(result.format).toContain('seed');
20
+ });
21
+ it('parses base58 encoded 64-byte key', () => {
22
+ // Encode the 64-byte secret key as base58
23
+ const ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
24
+ function encodeBase58(bytes) {
25
+ let leadingZeros = 0;
26
+ for (let i = 0; i < bytes.length && bytes[i] === 0; i++)
27
+ leadingZeros++;
28
+ let num = BigInt(0);
29
+ for (const b of bytes)
30
+ num = num * 256n + BigInt(b);
31
+ const chars = [];
32
+ while (num > 0n) {
33
+ chars.unshift(ALPHABET[Number(num % 58n)]);
34
+ num /= 58n;
35
+ }
36
+ for (let i = 0; i < leadingZeros; i++)
37
+ chars.unshift('1');
38
+ return chars.join('');
39
+ }
40
+ const b58 = encodeBase58(keypair.secretKey);
41
+ const result = parseKeypair(b58);
42
+ expect(result.secretKey).toEqual(Array.from(keypair.secretKey));
43
+ expect(result.format).toContain('Base58');
44
+ });
45
+ it('parses base64 encoded 64-byte key', () => {
46
+ const b64 = Buffer.from(keypair.secretKey).toString('base64');
47
+ const result = parseKeypair(b64);
48
+ expect(result.secretKey).toEqual(Array.from(keypair.secretKey));
49
+ expect(result.format).toContain('Base64');
50
+ });
51
+ it('parses hex encoded 64-byte key', () => {
52
+ const hex = Buffer.from(keypair.secretKey).toString('hex');
53
+ const result = parseKeypair(hex);
54
+ expect(result.secretKey).toEqual(Array.from(keypair.secretKey));
55
+ expect(result.format).toContain('Hex');
56
+ });
57
+ it('rejects invalid input', () => {
58
+ expect(() => parseKeypair('not a key')).toThrow('Unrecognized keypair format');
59
+ });
60
+ it('rejects JSON array with wrong length', () => {
61
+ expect(() => parseKeypair('[1,2,3]')).toThrow('Expected 32 or 64');
62
+ });
63
+ });
64
+ //# sourceMappingURL=keypair.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keypair.test.js","sourceRoot":"","sources":["../src/keypair.test.ts"],"names":[],"mappings":"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"}
@@ -62,8 +62,89 @@ async function postinstall() {
62
62
  catch {
63
63
  // Non-fatal
64
64
  }
65
+ // Install statusline script
66
+ const hooksDir = join(claudeDir, 'hooks');
67
+ const statuslinePath = join(hooksDir, 'proxygate-statusline.js');
68
+ await mkdir(hooksDir, { recursive: true });
69
+ await writeFile(statuslinePath, STATUSLINE_SCRIPT, 'utf-8');
70
+ // Register statusline in settings (only if not already ours)
71
+ try {
72
+ const raw = await readFile(settingsPath, 'utf-8');
73
+ const settings = JSON.parse(raw);
74
+ const currentStatusline = settings.statusLine;
75
+ if (!currentStatusline?.command?.includes('proxygate-statusline')) {
76
+ settings.statusLine = {
77
+ type: 'command',
78
+ command: `node "${statuslinePath}"`,
79
+ };
80
+ await writeFile(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
81
+ }
82
+ }
83
+ catch {
84
+ // Non-fatal
85
+ }
65
86
  console.log(`\x1b[32m+\x1b[0m Installed ${count} ProxyGate skills to ${baseDir}`);
66
87
  }
88
+ const STATUSLINE_SCRIPT = `#!/usr/bin/env node
89
+ const fs = require('fs');
90
+ const path = require('path');
91
+ const os = require('os');
92
+ let input = '';
93
+ const timeout = setTimeout(() => process.exit(0), 3000);
94
+ process.stdin.setEncoding('utf8');
95
+ process.stdin.on('data', chunk => input += chunk);
96
+ process.stdin.on('end', () => {
97
+ clearTimeout(timeout);
98
+ try {
99
+ const data = JSON.parse(input);
100
+ const model = data.model?.display_name || 'Claude';
101
+ const dir = path.basename(data.workspace?.current_dir || process.cwd());
102
+ const remaining = data.context_window?.remaining_percentage;
103
+ const claudeDir = path.join(os.homedir(), '.claude');
104
+ const AUTO_COMPACT_BUFFER_PCT = 16.5;
105
+ let ctx = '';
106
+ if (remaining != null) {
107
+ const usable = 100 - AUTO_COMPACT_BUFFER_PCT;
108
+ const used = Math.min(100, Math.round(((usable - remaining) / usable) * 100));
109
+ const blocks = 10;
110
+ const filled = Math.round((used / 100) * blocks);
111
+ const bar = String.fromCharCode(9608).repeat(filled) + String.fromCharCode(9617).repeat(blocks - filled);
112
+ const color = used >= 90 ? '\\x1b[31m' : used >= 70 ? '\\x1b[33m' : '\\x1b[32m';
113
+ ctx = \` \${color}\${bar} \${used}%\\x1b[0m\`;
114
+ }
115
+ let task = '';
116
+ try {
117
+ const stateFile = path.join(claudeDir, 'get-shit-done', 'STATE.json');
118
+ if (fs.existsSync(stateFile)) {
119
+ const state = JSON.parse(fs.readFileSync(stateFile, 'utf8'));
120
+ if (state.current_task) task = state.current_task;
121
+ }
122
+ } catch (e) {}
123
+ let gsdUpdate = '';
124
+ const gsdCache = path.join(claudeDir, 'cache', 'gsd-update-check.json');
125
+ if (fs.existsSync(gsdCache)) {
126
+ try {
127
+ const c = JSON.parse(fs.readFileSync(gsdCache, 'utf8'));
128
+ if (c.update_available) gsdUpdate = '\\x1b[33m\\u2B06 /gsd:update\\x1b[0m \\u2502 ';
129
+ } catch (e) {}
130
+ }
131
+ let pgUpdate = '';
132
+ const pgCache = path.join(claudeDir, 'cache', 'proxygate-update-check.json');
133
+ if (fs.existsSync(pgCache)) {
134
+ try {
135
+ const c = JSON.parse(fs.readFileSync(pgCache, 'utf8'));
136
+ if (c.update_available) pgUpdate = '\\x1b[36m\\u2B06 /pg-update\\x1b[0m \\u2502 ';
137
+ } catch (e) {}
138
+ }
139
+ const updates = gsdUpdate + pgUpdate;
140
+ if (task) {
141
+ process.stdout.write(\`\${updates}\\x1b[2m\${model}\\x1b[0m \\u2502 \\x1b[1m\${task}\\x1b[0m \\u2502 \\x1b[2m\${dir}\\x1b[0m\${ctx}\`);
142
+ } else {
143
+ process.stdout.write(\`\${updates}\\x1b[2m\${model}\\x1b[0m \\u2502 \\x1b[2m\${dir}\\x1b[0m\${ctx}\`);
144
+ }
145
+ } catch (e) {}
146
+ });
147
+ `;
67
148
  postinstall().catch(() => {
68
149
  // Silent fail — postinstall should never block npm install
69
150
  });
@@ -1 +1 @@
1
- {"version":3,"file":"postinstall.js","sourceRoot":"","sources":["../src/postinstall.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"postinstall.js","sourceRoot":"","sources":["../src/postinstall.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@proxygate/cli",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "description": "ProxyGate CLI — buy APIs, sell agent capacity, and post jobs on the autonomous agent marketplace. USDC on Solana.",
5
5
  "type": "module",
6
6
  "bin": {