paean 0.8.21 → 0.8.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/api/credits.d.ts +76 -0
  2. package/dist/api/credits.d.ts.map +1 -0
  3. package/dist/api/credits.js +31 -0
  4. package/dist/api/credits.js.map +1 -0
  5. package/dist/cli.js +2 -0
  6. package/dist/cli.js.map +1 -1
  7. package/dist/commands/credits.d.ts +7 -0
  8. package/dist/commands/credits.d.ts.map +1 -0
  9. package/dist/commands/credits.js +229 -0
  10. package/dist/commands/credits.js.map +1 -0
  11. package/dist/mcp/tools.d.ts.map +1 -1
  12. package/dist/mcp/tools.js +131 -0
  13. package/dist/mcp/tools.js.map +1 -1
  14. package/dist/ui/App.d.ts.map +1 -1
  15. package/dist/ui/App.js +24 -13
  16. package/dist/ui/App.js.map +1 -1
  17. package/dist/ui/components/Header.d.ts +2 -2
  18. package/dist/ui/components/Header.d.ts.map +1 -1
  19. package/dist/ui/components/Header.js +35 -7
  20. package/dist/ui/components/Header.js.map +1 -1
  21. package/dist/ui/hooks/useCommands.d.ts +3 -1
  22. package/dist/ui/hooks/useCommands.d.ts.map +1 -1
  23. package/dist/ui/hooks/useCommands.js +45 -8
  24. package/dist/ui/hooks/useCommands.js.map +1 -1
  25. package/dist/ui/hooks/useWorker.d.ts +1 -0
  26. package/dist/ui/hooks/useWorker.d.ts.map +1 -1
  27. package/dist/ui/hooks/useWorker.js +7 -0
  28. package/dist/ui/hooks/useWorker.js.map +1 -1
  29. package/dist/ui/theme/ink-theme.d.ts +1 -1
  30. package/dist/ui/theme/ink-theme.d.ts.map +1 -1
  31. package/dist/ui/theme/ink-theme.js +8 -19
  32. package/dist/ui/theme/ink-theme.js.map +1 -1
  33. package/dist/worker/service.d.ts +6 -0
  34. package/dist/worker/service.d.ts.map +1 -1
  35. package/dist/worker/service.js +36 -0
  36. package/dist/worker/service.js.map +1 -1
  37. package/dist/worker/types.d.ts +1 -0
  38. package/dist/worker/types.d.ts.map +1 -1
  39. package/package.json +2 -2
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Credits & Crypto Deposit API
3
+ * Communicates with zero-api for credits status and USDC deposit management
4
+ */
5
+ export interface CreditsStatus {
6
+ credits: number;
7
+ totalCredits: number;
8
+ subscriptionTier: string;
9
+ nextRecoveryAt: string | null;
10
+ canRecover: boolean;
11
+ recoveryIntervalHours: number;
12
+ billingPeriod: string | null;
13
+ subscriptionEndDate: string | null;
14
+ paymentSource: string | null;
15
+ }
16
+ export declare function getCreditsStatus(): Promise<{
17
+ success: boolean;
18
+ data: CreditsStatus;
19
+ }>;
20
+ export interface NetworkDepositInfo {
21
+ name: string;
22
+ depositAddress: string;
23
+ explorerTxUrl: string;
24
+ explorerAddrUrl?: string;
25
+ requiredConfirmations: number;
26
+ usdcContract?: string;
27
+ chainId?: number;
28
+ usdcMint?: string;
29
+ }
30
+ export interface DepositInfo {
31
+ networks: Record<string, NetworkDepositInfo>;
32
+ conversionRate: string;
33
+ conversionRateNumeric: number;
34
+ minimumDeposit: number;
35
+ testMinimumDeposit: number;
36
+ }
37
+ export declare function getDepositInfo(): Promise<DepositInfo>;
38
+ export interface DepositRecord {
39
+ id: number;
40
+ network: string;
41
+ txHash: string;
42
+ usdcAmount: number;
43
+ creditsAwarded: number;
44
+ status: string;
45
+ confirmations: number;
46
+ requiredConfirmations: number;
47
+ fromAddress: string;
48
+ blockNumber: number;
49
+ confirmedAt: string | null;
50
+ createdAt: string;
51
+ explorerUrl: string | null;
52
+ }
53
+ export interface PollResult {
54
+ deposits: DepositRecord[];
55
+ credits: number;
56
+ }
57
+ export declare function pollDeposits(): Promise<PollResult>;
58
+ export declare function getDepositHistory(): Promise<{
59
+ deposits: DepositRecord[];
60
+ }>;
61
+ export interface DepositStatusResult {
62
+ found: boolean;
63
+ status: string;
64
+ id?: number;
65
+ network?: string;
66
+ txHash?: string;
67
+ usdcAmount?: number;
68
+ creditsAwarded?: number;
69
+ confirmations?: number;
70
+ requiredConfirmations?: number;
71
+ confirmedAt?: string | null;
72
+ createdAt?: string;
73
+ explorerUrl?: string;
74
+ }
75
+ export declare function getDepositStatus(txHash: string): Promise<DepositStatusResult>;
76
+ //# sourceMappingURL=credits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credits.d.ts","sourceRoot":"","sources":["../../src/api/credits.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,OAAO,CAAC;IACpB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC,CAI3F;AAID,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC7C,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC,CAI3D;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,UAAU,CAAC,CAIxD;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC;IAAE,QAAQ,EAAE,aAAa,EAAE,CAAA;CAAE,CAAC,CAIhF;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAInF"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Credits & Crypto Deposit API
3
+ * Communicates with zero-api for credits status and USDC deposit management
4
+ */
5
+ import { getApiClient } from './client.js';
6
+ export async function getCreditsStatus() {
7
+ const client = getApiClient();
8
+ const { data } = await client.get('/credits/status');
9
+ return data;
10
+ }
11
+ export async function getDepositInfo() {
12
+ const client = getApiClient();
13
+ const { data } = await client.get('/crypto-deposit/info');
14
+ return data;
15
+ }
16
+ export async function pollDeposits() {
17
+ const client = getApiClient();
18
+ const { data } = await client.get('/crypto-deposit/poll');
19
+ return data;
20
+ }
21
+ export async function getDepositHistory() {
22
+ const client = getApiClient();
23
+ const { data } = await client.get('/crypto-deposit/history');
24
+ return data;
25
+ }
26
+ export async function getDepositStatus(txHash) {
27
+ const client = getApiClient();
28
+ const { data } = await client.get(`/crypto-deposit/status/${encodeURIComponent(txHash)}`);
29
+ return data;
30
+ }
31
+ //# sourceMappingURL=credits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credits.js","sourceRoot":"","sources":["../../src/api/credits.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAgB3C,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC;AACd,CAAC;AAuBD,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC;AACd,CAAC;AAuBD,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IAC7D,OAAO,IAAI,CAAC;AACd,CAAC;AAiBD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAc;IACnD,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,0BAA0B,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC1F,OAAO,IAAI,CAAC;AACd,CAAC"}
package/dist/cli.js CHANGED
@@ -22,6 +22,7 @@ import { historyCommand, resumeCommand, showCommand, starCommand, renameCommand,
22
22
  import { devicesCommand } from './commands/devices.js';
23
23
  import { configCommand } from './commands/config.js';
24
24
  import { mcpCommand } from './commands/mcp.js';
25
+ import { creditsCommand } from './commands/credits.js';
25
26
  import { sparkletCommand } from './commands/sparklet.js';
26
27
  import { completionCommand } from './commands/completion.js';
27
28
  import { updateCommand } from './commands/update.js';
@@ -113,6 +114,7 @@ program.addCommand(archiveCommand);
113
114
  program.addCommand(devicesCommand);
114
115
  program.addCommand(configCommand);
115
116
  program.addCommand(mcpCommand);
117
+ program.addCommand(creditsCommand);
116
118
  program.addCommand(sparkletCommand);
117
119
  program.addCommand(completionCommand);
118
120
  program.addCommand(updateCommand);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Credits Command
3
+ * View credits balance and manage USDC deposits
4
+ */
5
+ import { Command } from 'commander';
6
+ export declare const creditsCommand: Command;
7
+ //# sourceMappingURL=credits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credits.d.ts","sourceRoot":"","sources":["../../src/commands/credits.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC,eAAO,MAAM,cAAc,SAoDvB,CAAC"}
@@ -0,0 +1,229 @@
1
+ /**
2
+ * Credits Command
3
+ * View credits balance and manage USDC deposits
4
+ */
5
+ import { Command } from 'commander';
6
+ import { isAuthenticated } from '../utils/config.js';
7
+ import { getCreditsStatus, getDepositInfo, pollDeposits, getDepositHistory, getDepositStatus, } from '../api/credits.js';
8
+ import * as output from '../utils/output.js';
9
+ function requireAuth() {
10
+ if (!isAuthenticated()) {
11
+ output.error('Not logged in. Run `paean login` first.');
12
+ process.exit(1);
13
+ }
14
+ }
15
+ export const creditsCommand = new Command('credits')
16
+ .description('View credits balance and manage USDC deposits')
17
+ .option('--json', 'Output in JSON format')
18
+ .action(async (options) => {
19
+ requireAuth();
20
+ const spin = output.spinner('Fetching credits status...').start();
21
+ try {
22
+ const response = await getCreditsStatus();
23
+ spin.stop();
24
+ if (options.json) {
25
+ output.json(response.data);
26
+ return;
27
+ }
28
+ const d = response.data;
29
+ output.header('Credits Status');
30
+ output.tableRow('Balance', `${d.credits} / ${d.totalCredits} credits`);
31
+ output.tableRow('Tier', d.subscriptionTier);
32
+ if (d.canRecover) {
33
+ output.tableRow('Recovery', output.colors.success('Available now'));
34
+ }
35
+ else if (d.nextRecoveryAt) {
36
+ output.tableRow('Next Recovery', output.formatDate(d.nextRecoveryAt));
37
+ }
38
+ output.tableRow('Recovery Interval', `${d.recoveryIntervalHours}h`);
39
+ if (d.billingPeriod) {
40
+ output.tableRow('Billing Period', d.billingPeriod);
41
+ }
42
+ if (d.subscriptionEndDate) {
43
+ output.tableRow('Subscription Ends', output.formatDate(d.subscriptionEndDate));
44
+ }
45
+ if (d.paymentSource) {
46
+ output.tableRow('Payment Source', d.paymentSource);
47
+ }
48
+ output.newline();
49
+ if (d.credits < 20) {
50
+ output.warning(`Credits are low (${d.credits}). Use \`paean credits deposit-info\` to see USDC top-up addresses.`);
51
+ }
52
+ }
53
+ catch (err) {
54
+ spin.stop();
55
+ output.errorWithHint(err.message || 'Failed to fetch credits status');
56
+ }
57
+ });
58
+ // ── deposit-info ─────────────────────────────────────────────────────────
59
+ creditsCommand
60
+ .command('deposit-info')
61
+ .description('Show unique USDC deposit addresses per chain')
62
+ .option('--json', 'Output in JSON format')
63
+ .action(async (options) => {
64
+ requireAuth();
65
+ const spin = output.spinner('Fetching deposit info...').start();
66
+ try {
67
+ const info = await getDepositInfo();
68
+ spin.stop();
69
+ if (options.json) {
70
+ output.json(info);
71
+ return;
72
+ }
73
+ output.header('USDC Deposit Addresses');
74
+ output.tableRow('Conversion Rate', info.conversionRate);
75
+ output.tableRow('Minimum Deposit', `${info.minimumDeposit} USDC`);
76
+ output.tableRow('Test Minimum', `${info.testMinimumDeposit} USDC`);
77
+ output.newline();
78
+ for (const [network, net] of Object.entries(info.networks)) {
79
+ output.info(`${net.name} (${network})`);
80
+ output.tableRow('Deposit Address', net.depositAddress, 22);
81
+ if (net.usdcContract) {
82
+ output.tableRow('USDC Contract', net.usdcContract, 22);
83
+ }
84
+ if (net.usdcMint) {
85
+ output.tableRow('USDC Mint', net.usdcMint, 22);
86
+ }
87
+ output.tableRow('Confirmations', String(net.requiredConfirmations), 22);
88
+ output.newline();
89
+ }
90
+ output.dim('Send USDC to the address above. Deposits are detected automatically.');
91
+ }
92
+ catch (err) {
93
+ spin.stop();
94
+ output.errorWithHint(err.message || 'Failed to fetch deposit info');
95
+ }
96
+ });
97
+ // ── deposit-poll ─────────────────────────────────────────────────────────
98
+ creditsCommand
99
+ .command('deposit-poll')
100
+ .description('Trigger blockchain scan and show pending/confirmed deposits')
101
+ .option('--json', 'Output in JSON format')
102
+ .action(async (options) => {
103
+ requireAuth();
104
+ const spin = output.spinner('Scanning blockchain for deposits...').start();
105
+ try {
106
+ const result = await pollDeposits();
107
+ spin.stop();
108
+ if (options.json) {
109
+ output.json(result);
110
+ return;
111
+ }
112
+ output.header('Deposit Scan Results');
113
+ output.tableRow('Current Credits', String(result.credits));
114
+ output.newline();
115
+ if (result.deposits.length === 0) {
116
+ output.dim('No deposits found.');
117
+ return;
118
+ }
119
+ for (const dep of result.deposits) {
120
+ printDeposit(dep);
121
+ }
122
+ }
123
+ catch (err) {
124
+ spin.stop();
125
+ output.errorWithHint(err.message || 'Failed to poll deposits');
126
+ }
127
+ });
128
+ // ── deposit-history ──────────────────────────────────────────────────────
129
+ creditsCommand
130
+ .command('deposit-history')
131
+ .description('Show confirmed deposit history')
132
+ .option('--json', 'Output in JSON format')
133
+ .action(async (options) => {
134
+ requireAuth();
135
+ const spin = output.spinner('Fetching deposit history...').start();
136
+ try {
137
+ const result = await getDepositHistory();
138
+ spin.stop();
139
+ if (options.json) {
140
+ output.json(result);
141
+ return;
142
+ }
143
+ output.header('Deposit History');
144
+ const deposits = result.deposits;
145
+ if (!deposits || deposits.length === 0) {
146
+ output.dim('No confirmed deposits yet.');
147
+ return;
148
+ }
149
+ for (const dep of deposits) {
150
+ printDeposit(dep);
151
+ }
152
+ }
153
+ catch (err) {
154
+ spin.stop();
155
+ output.errorWithHint(err.message || 'Failed to fetch deposit history');
156
+ }
157
+ });
158
+ // ── deposit-status ───────────────────────────────────────────────────────
159
+ creditsCommand
160
+ .command('deposit-status <txHash>')
161
+ .description('Check the status of a specific deposit transaction')
162
+ .option('--json', 'Output in JSON format')
163
+ .action(async (txHash, options) => {
164
+ requireAuth();
165
+ const spin = output.spinner('Checking transaction status...').start();
166
+ try {
167
+ const result = await getDepositStatus(txHash);
168
+ spin.stop();
169
+ if (options.json) {
170
+ output.json(result);
171
+ return;
172
+ }
173
+ if (!result.found) {
174
+ output.warning('Transaction not found. It may not have been detected yet.');
175
+ output.dim('Try `paean credits deposit-poll` to trigger a scan.');
176
+ return;
177
+ }
178
+ output.header('Deposit Status');
179
+ output.tableRow('Network', result.network || '—');
180
+ output.tableRow('Tx Hash', result.txHash || txHash);
181
+ output.tableRow('Amount', `${result.usdcAmount} USDC`);
182
+ output.tableRow('Status', formatDepositStatus(result.status));
183
+ output.tableRow('Confirmations', `${result.confirmations} / ${result.requiredConfirmations}`);
184
+ output.tableRow('Credits Awarded', String(result.creditsAwarded || 0));
185
+ if (result.confirmedAt) {
186
+ output.tableRow('Confirmed At', output.formatDate(result.confirmedAt));
187
+ }
188
+ if (result.explorerUrl) {
189
+ output.tableRow('Explorer', result.explorerUrl);
190
+ }
191
+ }
192
+ catch (err) {
193
+ spin.stop();
194
+ if (err.statusCode === 404) {
195
+ output.warning('Transaction not found.');
196
+ output.dim('Try `paean credits deposit-poll` to trigger a scan.');
197
+ }
198
+ else {
199
+ output.errorWithHint(err.message || 'Failed to check deposit status');
200
+ }
201
+ }
202
+ });
203
+ // ── Helpers ──────────────────────────────────────────────────────────────
204
+ function formatDepositStatus(status) {
205
+ switch (status) {
206
+ case 'confirmed':
207
+ return output.colors.success('confirmed');
208
+ case 'pending':
209
+ return output.colors.warning('pending');
210
+ case 'failed':
211
+ return output.colors.error('failed');
212
+ default:
213
+ return status;
214
+ }
215
+ }
216
+ function printDeposit(dep) {
217
+ const statusStr = formatDepositStatus(dep.status);
218
+ const amount = `${dep.usdcAmount} USDC`;
219
+ const credits = dep.creditsAwarded > 0 ? ` → ${dep.creditsAwarded} credits` : '';
220
+ output.listItem(`${output.colors.bold(amount)}${credits} ${statusStr} ${output.colors.dim(dep.network)}`);
221
+ output.dim(` tx: ${output.truncate(dep.txHash, 50)}`);
222
+ if (dep.status === 'pending') {
223
+ output.dim(` confirmations: ${dep.confirmations} / ${dep.requiredConfirmations}`);
224
+ }
225
+ if (dep.explorerUrl) {
226
+ output.dim(` ${dep.explorerUrl}`);
227
+ }
228
+ }
229
+ //# sourceMappingURL=credits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credits.js","sourceRoot":"","sources":["../../src/commands/credits.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,oCAAoC,CAAC;AA+B/D;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,EAAE,CA0TpC;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,OAAO,CAAC,CA+kBlB"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAqC/D;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,EAAE,CA+WpC;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,OAAO,CAAC,CAgqBlB"}
package/dist/mcp/tools.js CHANGED
@@ -6,6 +6,7 @@ import { completeTodoItem, createTodoItem, updateTodoItem, deleteTodoItem, getTo
6
6
  import { detectProject, getProjectId } from '../utils/project.js';
7
7
  import { getSystemTools, executeSystemTool } from './system.js';
8
8
  import { getCliAgentToolDefinitions, executeCliAgentTool } from './cli-agent-tools.js';
9
+ import { getCreditsStatus, getDepositInfo, pollDeposits, getDepositStatus, } from '../api/credits.js';
9
10
  /** System tool names that must be routed to executeSystemTool */
10
11
  const SYSTEM_TOOL_NAMES = new Set([
11
12
  'paean_execute_shell',
@@ -327,6 +328,55 @@ export function getMcpTools() {
327
328
  required: ['taskId', 'subtaskId'],
328
329
  },
329
330
  },
331
+ // Credits & Deposit tools
332
+ {
333
+ name: 'paean_check_credits',
334
+ description: 'Check the current Paean AI credits balance, subscription tier, and recovery status. ' +
335
+ 'Use this to determine if the user needs to top up credits. ' +
336
+ 'Returns credits count, total capacity, tier, and next recovery time. ' +
337
+ 'If lowCredits is true, suggest using paean_get_deposit_info to get USDC deposit addresses.',
338
+ inputSchema: {
339
+ type: 'object',
340
+ properties: {},
341
+ },
342
+ },
343
+ {
344
+ name: 'paean_get_deposit_info',
345
+ description: 'Get the user\'s unique USDC deposit addresses for topping up Paean AI credits. ' +
346
+ 'Returns one address per supported chain (Base, Solana). ' +
347
+ 'Conversion rate: 1 USDC = 100 credits. Minimum deposit: 1 USDC (0.01 USDC for testing). ' +
348
+ 'After getting the address, use an external payment tool (e.g. send_usdc) to send USDC to the deposit address.',
349
+ inputSchema: {
350
+ type: 'object',
351
+ properties: {},
352
+ },
353
+ },
354
+ {
355
+ name: 'paean_poll_deposits',
356
+ description: 'Trigger a blockchain scan for incoming USDC deposits and return current deposit status. ' +
357
+ 'Returns all pending and recently confirmed deposits, plus the current credit balance. ' +
358
+ 'Call this after sending USDC to verify the deposit was detected and credits were awarded.',
359
+ inputSchema: {
360
+ type: 'object',
361
+ properties: {},
362
+ },
363
+ },
364
+ {
365
+ name: 'paean_get_deposit_status',
366
+ description: 'Check the status of a specific USDC deposit by transaction hash. ' +
367
+ 'Returns confirmation count, credits awarded, and explorer URL. ' +
368
+ 'Use this to track a specific transaction after sending USDC.',
369
+ inputSchema: {
370
+ type: 'object',
371
+ properties: {
372
+ txHash: {
373
+ type: 'string',
374
+ description: 'The blockchain transaction hash to look up',
375
+ },
376
+ },
377
+ required: ['txHash'],
378
+ },
379
+ },
330
380
  ];
331
381
  }
332
382
  /**
@@ -857,6 +907,87 @@ export async function executeMcpTool(toolName, args) {
857
907
  };
858
908
  }
859
909
  }
910
+ // Credits & Deposit tools
911
+ case 'paean_check_credits': {
912
+ try {
913
+ const response = await getCreditsStatus();
914
+ const d = response.data;
915
+ const isLow = d.credits < 20;
916
+ const result = {
917
+ success: true,
918
+ credits: d.credits,
919
+ totalCredits: d.totalCredits,
920
+ subscriptionTier: d.subscriptionTier,
921
+ canRecover: d.canRecover,
922
+ nextRecoveryAt: d.nextRecoveryAt,
923
+ recoveryIntervalHours: d.recoveryIntervalHours,
924
+ lowCredits: isLow,
925
+ };
926
+ if (isLow) {
927
+ result.hint = 'Credits are low. Call paean_get_deposit_info to get USDC deposit addresses for top-up (1 USDC = 100 credits).';
928
+ }
929
+ return result;
930
+ }
931
+ catch (error) {
932
+ return {
933
+ success: false,
934
+ error: error instanceof Error ? error.message : 'Failed to check credits',
935
+ };
936
+ }
937
+ }
938
+ case 'paean_get_deposit_info': {
939
+ try {
940
+ const info = await getDepositInfo();
941
+ return {
942
+ success: true,
943
+ networks: info.networks,
944
+ conversionRate: info.conversionRate,
945
+ conversionRateNumeric: info.conversionRateNumeric,
946
+ minimumDeposit: info.minimumDeposit,
947
+ testMinimumDeposit: info.testMinimumDeposit,
948
+ };
949
+ }
950
+ catch (error) {
951
+ return {
952
+ success: false,
953
+ error: error instanceof Error ? error.message : 'Failed to get deposit info',
954
+ };
955
+ }
956
+ }
957
+ case 'paean_poll_deposits': {
958
+ try {
959
+ const result = await pollDeposits();
960
+ return {
961
+ success: true,
962
+ credits: result.credits,
963
+ deposits: result.deposits,
964
+ pendingCount: result.deposits.filter((d) => d.status === 'pending').length,
965
+ confirmedCount: result.deposits.filter((d) => d.status === 'confirmed').length,
966
+ };
967
+ }
968
+ catch (error) {
969
+ return {
970
+ success: false,
971
+ error: error instanceof Error ? error.message : 'Failed to poll deposits',
972
+ };
973
+ }
974
+ }
975
+ case 'paean_get_deposit_status': {
976
+ const txHash = args.txHash;
977
+ if (!txHash) {
978
+ return { success: false, error: 'txHash is required' };
979
+ }
980
+ try {
981
+ const result = await getDepositStatus(txHash);
982
+ return { success: true, ...result };
983
+ }
984
+ catch (error) {
985
+ return {
986
+ success: false,
987
+ error: error instanceof Error ? error.message : 'Failed to get deposit status',
988
+ };
989
+ }
990
+ }
860
991
  default: {
861
992
  // Check if it's a system tool (shell, filesystem, worker)
862
993
  if (SYSTEM_TOOL_NAMES.has(toolName) ||