paytaca-cli 0.6.1 → 0.7.0

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 (130) hide show
  1. package/README.md +153 -37
  2. package/dist/ai/autoRefill.d.ts +27 -0
  3. package/dist/ai/autoRefill.d.ts.map +1 -0
  4. package/dist/ai/autoRefill.js +75 -0
  5. package/dist/ai/autoRefill.js.map +1 -0
  6. package/dist/ai/client.d.ts +73 -0
  7. package/dist/ai/client.d.ts.map +1 -0
  8. package/dist/ai/client.js +90 -0
  9. package/dist/ai/client.js.map +1 -0
  10. package/dist/ai/config.d.ts +7 -0
  11. package/dist/ai/config.d.ts.map +1 -0
  12. package/dist/ai/config.js +16 -0
  13. package/dist/ai/config.js.map +1 -0
  14. package/dist/ai/configure.d.ts +61 -0
  15. package/dist/ai/configure.d.ts.map +1 -0
  16. package/dist/ai/configure.js +452 -0
  17. package/dist/ai/configure.js.map +1 -0
  18. package/dist/ai/credits.d.ts +27 -0
  19. package/dist/ai/credits.d.ts.map +1 -0
  20. package/dist/ai/credits.js +99 -0
  21. package/dist/ai/credits.js.map +1 -0
  22. package/dist/ai/models.d.ts +13 -0
  23. package/dist/ai/models.d.ts.map +1 -0
  24. package/dist/ai/models.js +49 -0
  25. package/dist/ai/models.js.map +1 -0
  26. package/dist/ai/oauth.d.ts +45 -0
  27. package/dist/ai/oauth.d.ts.map +1 -0
  28. package/dist/ai/oauth.js +137 -0
  29. package/dist/ai/oauth.js.map +1 -0
  30. package/dist/ai/purchase.d.ts +30 -0
  31. package/dist/ai/purchase.d.ts.map +1 -0
  32. package/dist/ai/purchase.js +456 -0
  33. package/dist/ai/purchase.js.map +1 -0
  34. package/dist/commands/address.d.ts.map +1 -1
  35. package/dist/commands/address.js +88 -36
  36. package/dist/commands/address.js.map +1 -1
  37. package/dist/commands/ai.d.ts +9 -0
  38. package/dist/commands/ai.d.ts.map +1 -0
  39. package/dist/commands/ai.js +675 -0
  40. package/dist/commands/ai.js.map +1 -0
  41. package/dist/commands/balance.d.ts.map +1 -1
  42. package/dist/commands/balance.js +68 -129
  43. package/dist/commands/balance.js.map +1 -1
  44. package/dist/commands/history.d.ts.map +1 -1
  45. package/dist/commands/history.js +38 -78
  46. package/dist/commands/history.js.map +1 -1
  47. package/dist/commands/mcp.d.ts +14 -0
  48. package/dist/commands/mcp.d.ts.map +1 -0
  49. package/dist/commands/mcp.js +68 -0
  50. package/dist/commands/mcp.js.map +1 -0
  51. package/dist/commands/pay.js +1 -1
  52. package/dist/commands/pay.js.map +1 -1
  53. package/dist/commands/receive.d.ts +1 -8
  54. package/dist/commands/receive.d.ts.map +1 -1
  55. package/dist/commands/receive.js +51 -124
  56. package/dist/commands/receive.js.map +1 -1
  57. package/dist/commands/send.d.ts +0 -10
  58. package/dist/commands/send.d.ts.map +1 -1
  59. package/dist/commands/send.js +40 -50
  60. package/dist/commands/send.js.map +1 -1
  61. package/dist/commands/swap.js +1 -1
  62. package/dist/commands/swap.js.map +1 -1
  63. package/dist/commands/token.d.ts +1 -9
  64. package/dist/commands/token.d.ts.map +1 -1
  65. package/dist/commands/token.js +192 -289
  66. package/dist/commands/token.js.map +1 -1
  67. package/dist/core/context.d.ts +30 -0
  68. package/dist/core/context.d.ts.map +1 -0
  69. package/dist/core/context.js +45 -0
  70. package/dist/core/context.js.map +1 -0
  71. package/dist/core/wallet.d.ts +130 -0
  72. package/dist/core/wallet.d.ts.map +1 -0
  73. package/dist/core/wallet.js +276 -0
  74. package/dist/core/wallet.js.map +1 -0
  75. package/dist/index.js +4 -0
  76. package/dist/index.js.map +1 -1
  77. package/dist/mcp/server.d.ts +8 -0
  78. package/dist/mcp/server.d.ts.map +1 -0
  79. package/dist/mcp/server.js +24 -0
  80. package/dist/mcp/server.js.map +1 -0
  81. package/dist/mcp/tools.d.ts +5 -0
  82. package/dist/mcp/tools.d.ts.map +1 -0
  83. package/dist/mcp/tools.js +473 -0
  84. package/dist/mcp/tools.js.map +1 -0
  85. package/dist/utils/format.d.ts +23 -0
  86. package/dist/utils/format.d.ts.map +1 -0
  87. package/dist/utils/format.js +62 -0
  88. package/dist/utils/format.js.map +1 -0
  89. package/dist/utils/x402.js +1 -1
  90. package/dist/utils/x402.js.map +1 -1
  91. package/dist/wallet/index.d.ts +13 -0
  92. package/dist/wallet/index.d.ts.map +1 -1
  93. package/dist/wallet/index.js +18 -0
  94. package/dist/wallet/index.js.map +1 -1
  95. package/dist/wallet/keys.d.ts.map +1 -1
  96. package/dist/wallet/keys.js +2 -0
  97. package/dist/wallet/keys.js.map +1 -1
  98. package/package.json +7 -3
  99. package/dist/commands/wallet.test.d.ts +0 -2
  100. package/dist/commands/wallet.test.d.ts.map +0 -1
  101. package/dist/commands/wallet.test.js +0 -68
  102. package/dist/commands/wallet.test.js.map +0 -1
  103. package/dist/nostr/chat.test.d.ts +0 -2
  104. package/dist/nostr/chat.test.d.ts.map +0 -1
  105. package/dist/nostr/chat.test.js +0 -121
  106. package/dist/nostr/chat.test.js.map +0 -1
  107. package/dist/nostr/store.test.d.ts +0 -2
  108. package/dist/nostr/store.test.d.ts.map +0 -1
  109. package/dist/nostr/store.test.js +0 -456
  110. package/dist/nostr/store.test.js.map +0 -1
  111. package/dist/utils/prices.test.d.ts +0 -5
  112. package/dist/utils/prices.test.d.ts.map +0 -1
  113. package/dist/utils/prices.test.js +0 -62
  114. package/dist/utils/prices.test.js.map +0 -1
  115. package/dist/utils/x402.test.d.ts +0 -2
  116. package/dist/utils/x402.test.d.ts.map +0 -1
  117. package/dist/utils/x402.test.js +0 -216
  118. package/dist/utils/x402.test.js.map +0 -1
  119. package/dist/wallet/cauldron/pools.test.d.ts +0 -3
  120. package/dist/wallet/cauldron/pools.test.d.ts.map +0 -1
  121. package/dist/wallet/cauldron/pools.test.js +0 -149
  122. package/dist/wallet/cauldron/pools.test.js.map +0 -1
  123. package/dist/wallet/cauldron/swap.test.d.ts +0 -2
  124. package/dist/wallet/cauldron/swap.test.d.ts.map +0 -1
  125. package/dist/wallet/cauldron/swap.test.js +0 -179
  126. package/dist/wallet/cauldron/swap.test.js.map +0 -1
  127. package/skills/README.md +0 -68
  128. package/skills/paytaca-send/SKILL.md +0 -159
  129. package/skills/paytaca-wallet/SKILL.md +0 -164
  130. package/skills/paytaca-x402/SKILL.md +0 -130
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Harness configuration: writes the MCP server entry and the Paytaca AI
3
+ * provider (models + API key) — the opencode provider block or the Pi
4
+ * models.json — so AI models are usable right after `paytaca ai configure`.
5
+ */
6
+ import { type McpClient } from '../commands/mcp.js';
7
+ import { type AiConfig } from './client.js';
8
+ import { type CreditsSummary } from './credits.js';
9
+ export declare const OPENCODE_PROVIDER_ID = "paytaca-ai";
10
+ export declare const PI_PROVIDER_ID = "paytaca-ai";
11
+ export declare const OMP_PROVIDER_ID = "paytaca-ai";
12
+ export declare const OPENCODE_PROVIDER_NPM = "@ai-sdk/openai-compatible";
13
+ export declare const DEFAULT_MODEL_CONTEXT = 128000;
14
+ export declare const DEFAULT_MODEL_OUTPUT = 8192;
15
+ export interface PlanSuggestion {
16
+ modelId: string;
17
+ displayName: string;
18
+ minutes: number;
19
+ priceSats: number;
20
+ priceUsd?: number;
21
+ }
22
+ export interface ConfigureResult {
23
+ harness: McpClient;
24
+ path: string | null;
25
+ format: 'json';
26
+ instructions: string;
27
+ mcpInstalled: boolean;
28
+ providerInstalled: boolean;
29
+ providerError?: string;
30
+ canSign: boolean;
31
+ apiKeyReused: boolean;
32
+ apiKeyProvided: boolean;
33
+ apiKeyPrefix?: string;
34
+ models: {
35
+ id: string;
36
+ name: string;
37
+ }[];
38
+ creditsActive: boolean;
39
+ credits: CreditsSummary[];
40
+ planSuggestion?: PlanSuggestion;
41
+ warnings?: string[];
42
+ }
43
+ export interface ConfigureOptions {
44
+ harness: McpClient;
45
+ chipnet?: boolean;
46
+ backendUrl?: string;
47
+ path?: string;
48
+ apiKey?: string;
49
+ requestApiKey?: () => Promise<string | null>;
50
+ }
51
+ export declare function isValidApiKey(key: string): boolean;
52
+ export declare function deepMerge(target: Record<string, unknown>, patch: Record<string, unknown>): Record<string, unknown>;
53
+ export declare function buildOpencodeProvider(config: AiConfig, backendUrl: string, apiKey: string): Record<string, unknown>;
54
+ export declare function extractExistingApiKey(config: Record<string, unknown>, providerId?: string): string | null;
55
+ export declare function buildPiProvider(config: AiConfig, backendUrl: string, apiKey: string): Record<string, unknown>;
56
+ export declare function extractPiApiKey(config: Record<string, unknown>, providerId?: string): string | null;
57
+ export declare function extractOmpDefaultModel(yaml: string): string | null;
58
+ export declare function replaceOmpDefaultModel(yaml: string, nextModelRef: string): string | null;
59
+ export declare function parseJsonConfig(raw: string): Record<string, unknown>;
60
+ export declare function configureHarness(options: ConfigureOptions): Promise<ConfigureResult>;
61
+ //# sourceMappingURL=configure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure.d.ts","sourceRoot":"","sources":["../../src/ai/configure.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,452 @@
1
+ /**
2
+ * Harness configuration: writes the MCP server entry and the Paytaca AI
3
+ * provider (models + API key) — the opencode provider block or the Pi
4
+ * models.json — so AI models are usable right after `paytaca ai configure`.
5
+ */
6
+ import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
7
+ import { dirname, join } from 'node:path';
8
+ import { CLIENTS, buildTemplate } from '../commands/mcp.js';
9
+ import { WalletNotConfiguredError } from '../core/context.js';
10
+ import { loadWalletRef } from '../wallet/index.js';
11
+ import { getConfig, getWalletStatus } from './client.js';
12
+ import { resolveBackendUrl } from './config.js';
13
+ import { hasActiveCredits, summarizeAllCredits } from './credits.js';
14
+ import { selectModel, selectTier } from './models.js';
15
+ import { provisionApiKey } from './oauth.js';
16
+ export const OPENCODE_PROVIDER_ID = 'paytaca-ai';
17
+ export const PI_PROVIDER_ID = 'paytaca-ai';
18
+ export const OMP_PROVIDER_ID = 'paytaca-ai';
19
+ export const OPENCODE_PROVIDER_NPM = '@ai-sdk/openai-compatible';
20
+ export const DEFAULT_MODEL_CONTEXT = 128000;
21
+ export const DEFAULT_MODEL_OUTPUT = 8192;
22
+ export function isValidApiKey(key) {
23
+ return /^sk-pytc-[A-Za-z0-9]{8,}$/.test(key.trim());
24
+ }
25
+ function isPlainObject(value) {
26
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
27
+ }
28
+ export function deepMerge(target, patch) {
29
+ const out = { ...target };
30
+ for (const [key, value] of Object.entries(patch)) {
31
+ out[key] = isPlainObject(value) && isPlainObject(target[key])
32
+ ? deepMerge(target[key], value)
33
+ : value;
34
+ }
35
+ return out;
36
+ }
37
+ export function buildOpencodeProvider(config, backendUrl, apiKey) {
38
+ const models = {};
39
+ for (const model of config.models || []) {
40
+ if (!model?.id)
41
+ continue;
42
+ models[model.id] = {
43
+ name: model.display_name || model.id,
44
+ limit: { context: DEFAULT_MODEL_CONTEXT, output: DEFAULT_MODEL_OUTPUT },
45
+ };
46
+ }
47
+ return {
48
+ npm: OPENCODE_PROVIDER_NPM,
49
+ name: 'Paytaca AI',
50
+ options: { baseURL: `${backendUrl}/v1`, apiKey },
51
+ models,
52
+ };
53
+ }
54
+ export function extractExistingApiKey(config, providerId = OPENCODE_PROVIDER_ID) {
55
+ const provider = config.provider;
56
+ if (!isPlainObject(provider))
57
+ return null;
58
+ const entry = provider[providerId];
59
+ if (!isPlainObject(entry))
60
+ return null;
61
+ const options = entry.options;
62
+ if (!isPlainObject(options))
63
+ return null;
64
+ const apiKey = options.apiKey;
65
+ return typeof apiKey === 'string' && apiKey.length > 0 ? apiKey : null;
66
+ }
67
+ export function buildPiProvider(config, backendUrl, apiKey) {
68
+ const models = (config.models || [])
69
+ .filter((model) => model?.id)
70
+ .map((model) => ({
71
+ id: model.id,
72
+ name: model.display_name || model.id,
73
+ contextWindow: DEFAULT_MODEL_CONTEXT,
74
+ maxTokens: DEFAULT_MODEL_OUTPUT,
75
+ }));
76
+ return {
77
+ baseUrl: `${backendUrl}/v1`,
78
+ apiKey,
79
+ api: 'openai-completions',
80
+ models,
81
+ };
82
+ }
83
+ export function extractPiApiKey(config, providerId = PI_PROVIDER_ID) {
84
+ const providers = config.providers;
85
+ if (!isPlainObject(providers))
86
+ return null;
87
+ const entry = providers[providerId];
88
+ if (!isPlainObject(entry))
89
+ return null;
90
+ const apiKey = entry.apiKey;
91
+ if (typeof apiKey !== 'string' || apiKey.length === 0)
92
+ return null;
93
+ const envName = apiKey.trim().match(/^\$\{?([A-Za-z_][A-Za-z0-9_]*)\}?$/);
94
+ if (envName) {
95
+ if (process.env[envName[1]])
96
+ return apiKey;
97
+ return null;
98
+ }
99
+ if (apiKey.trim().startsWith('!'))
100
+ return null;
101
+ return apiKey;
102
+ }
103
+ const YAML_KEY_LINE = /^(\s*)([A-Za-z0-9_-]+):\s*(.*)$/;
104
+ function locateModelRolesDefault(lines) {
105
+ let rolesIndent = null;
106
+ for (let i = 0; i < lines.length; i++) {
107
+ const match = lines[i].match(YAML_KEY_LINE);
108
+ if (!match)
109
+ continue;
110
+ const indent = match[1].length;
111
+ const key = match[2];
112
+ const value = match[3].trim();
113
+ if (rolesIndent === null || indent <= rolesIndent) {
114
+ rolesIndent = key === 'modelRoles' && value === '' ? indent : null;
115
+ continue;
116
+ }
117
+ if (key === 'default' && value !== '')
118
+ return { index: i, indent, value };
119
+ }
120
+ return null;
121
+ }
122
+ export function extractOmpDefaultModel(yaml) {
123
+ return locateModelRolesDefault(yaml.split('\n'))?.value ?? null;
124
+ }
125
+ export function replaceOmpDefaultModel(yaml, nextModelRef) {
126
+ const lines = yaml.split('\n');
127
+ const found = locateModelRolesDefault(lines);
128
+ if (!found)
129
+ return null;
130
+ lines[found.index] = `${' '.repeat(found.indent)}default: ${nextModelRef}`;
131
+ return lines.join('\n');
132
+ }
133
+ async function resolveApiKey(existingKey, options, wallet, backendUrl, result) {
134
+ if (existingKey) {
135
+ result.apiKeyReused = true;
136
+ return existingKey;
137
+ }
138
+ if (options.apiKey) {
139
+ if (isValidApiKey(options.apiKey)) {
140
+ result.apiKeyProvided = true;
141
+ return options.apiKey.trim();
142
+ }
143
+ result.providerError = 'Invalid API key: expected a Paytaca key like sk-pytc-…';
144
+ return null;
145
+ }
146
+ if (wallet.canSign && wallet.mnemonic) {
147
+ try {
148
+ const created = await provisionApiKey({
149
+ mnemonic: wallet.mnemonic,
150
+ walletHash: wallet.walletHash,
151
+ backendUrl,
152
+ name: 'paytaca-cli',
153
+ });
154
+ result.apiKeyPrefix = created.keyPrefix;
155
+ return created.key;
156
+ }
157
+ catch (err) {
158
+ result.providerError = err?.message || String(err);
159
+ return null;
160
+ }
161
+ }
162
+ if (options.requestApiKey) {
163
+ const entered = await options.requestApiKey();
164
+ if (entered && isValidApiKey(entered)) {
165
+ result.apiKeyProvided = true;
166
+ return entered.trim();
167
+ }
168
+ result.providerError =
169
+ 'No API key provided. A full wallet is required to create one automatically.';
170
+ return null;
171
+ }
172
+ result.providerError =
173
+ 'This wallet is read-only. Pass --api-key <key> with a key created from your full wallet.';
174
+ return null;
175
+ }
176
+ function stripJsonComments(input) {
177
+ let out = '';
178
+ let inString = false;
179
+ let inLineComment = false;
180
+ let inBlockComment = false;
181
+ for (let i = 0; i < input.length; i++) {
182
+ const char = input[i];
183
+ const next = input[i + 1];
184
+ if (inLineComment) {
185
+ if (char === '\n') {
186
+ inLineComment = false;
187
+ out += char;
188
+ }
189
+ continue;
190
+ }
191
+ if (inBlockComment) {
192
+ if (char === '*' && next === '/') {
193
+ inBlockComment = false;
194
+ i++;
195
+ }
196
+ continue;
197
+ }
198
+ if (inString) {
199
+ out += char;
200
+ if (char === '\\') {
201
+ out += next ?? '';
202
+ i++;
203
+ }
204
+ else if (char === '"') {
205
+ inString = false;
206
+ }
207
+ continue;
208
+ }
209
+ if (char === '"') {
210
+ inString = true;
211
+ out += char;
212
+ continue;
213
+ }
214
+ if (char === '/' && next === '/') {
215
+ inLineComment = true;
216
+ i++;
217
+ continue;
218
+ }
219
+ if (char === '/' && next === '*') {
220
+ inBlockComment = true;
221
+ i++;
222
+ continue;
223
+ }
224
+ out += char;
225
+ }
226
+ return out;
227
+ }
228
+ function stripTrailingCommas(input) {
229
+ let out = '';
230
+ let inString = false;
231
+ for (let i = 0; i < input.length; i++) {
232
+ const char = input[i];
233
+ if (inString) {
234
+ out += char;
235
+ if (char === '\\') {
236
+ out += input[i + 1] ?? '';
237
+ i++;
238
+ }
239
+ else if (char === '"') {
240
+ inString = false;
241
+ }
242
+ continue;
243
+ }
244
+ if (char === '"') {
245
+ inString = true;
246
+ out += char;
247
+ continue;
248
+ }
249
+ if (char === ',') {
250
+ let j = i + 1;
251
+ while (j < input.length && /\s/.test(input[j]))
252
+ j++;
253
+ if (input[j] === '}' || input[j] === ']')
254
+ continue;
255
+ }
256
+ out += char;
257
+ }
258
+ return out;
259
+ }
260
+ export function parseJsonConfig(raw) {
261
+ if (raw.trim() === '')
262
+ return {};
263
+ let parsed;
264
+ try {
265
+ parsed = JSON.parse(raw);
266
+ }
267
+ catch {
268
+ parsed = JSON.parse(stripTrailingCommas(stripJsonComments(raw)));
269
+ }
270
+ return isPlainObject(parsed) ? parsed : {};
271
+ }
272
+ function readJson(path) {
273
+ if (!existsSync(path))
274
+ return {};
275
+ try {
276
+ return parseJsonConfig(readFileSync(path, 'utf-8'));
277
+ }
278
+ catch {
279
+ throw new Error(`Existing config at ${path} could not be parsed; not overwriting.`);
280
+ }
281
+ }
282
+ function writeJsonFile(path, value) {
283
+ mkdirSync(dirname(path), { recursive: true });
284
+ writeFileSync(path, JSON.stringify(value, null, 2) + '\n', { encoding: 'utf-8', mode: 0o600 });
285
+ chmodSync(path, 0o600);
286
+ }
287
+ function buildPlanSuggestion(config) {
288
+ const models = config.models || [];
289
+ const model = selectModel(models, config.default_model || '') || models[0];
290
+ if (!model?.id)
291
+ return undefined;
292
+ const wanted = config.default_duration_minutes;
293
+ const tier = (wanted !== undefined ? selectTier(model, wanted) : null) || model.price_tiers?.[0];
294
+ if (!tier)
295
+ return undefined;
296
+ return {
297
+ modelId: model.id,
298
+ displayName: model.display_name || model.id,
299
+ minutes: tier.minutes,
300
+ priceSats: Number(tier.price_sats) || 0,
301
+ priceUsd: tier.price_usd,
302
+ };
303
+ }
304
+ function syncOmpDefaultModel(agentDir, credits, result) {
305
+ const configPath = join(agentDir, 'config.yml');
306
+ if (!existsSync(configPath))
307
+ return;
308
+ let yaml;
309
+ try {
310
+ yaml = readFileSync(configPath, 'utf-8');
311
+ }
312
+ catch {
313
+ return;
314
+ }
315
+ const current = extractOmpDefaultModel(yaml);
316
+ if (!current || !current.startsWith(`${OMP_PROVIDER_ID}/`))
317
+ return;
318
+ const modelId = current.slice(OMP_PROVIDER_ID.length + 1);
319
+ const session = credits.find((c) => c.modelId === modelId);
320
+ if (session?.active && session.timeRemainingSeconds > 0)
321
+ return;
322
+ const fallback = credits
323
+ .filter((c) => c.modelId && c.active && c.timeRemainingSeconds > 0)
324
+ .sort((a, b) => b.timeRemainingSeconds - a.timeRemainingSeconds)[0];
325
+ if (!fallback?.modelId)
326
+ return;
327
+ const next = `${OMP_PROVIDER_ID}/${fallback.modelId}`;
328
+ const updated = replaceOmpDefaultModel(yaml, next);
329
+ if (updated === null || updated === yaml)
330
+ return;
331
+ writeFileSync(configPath, updated, 'utf-8');
332
+ result.warnings = [
333
+ ...(result.warnings ?? []),
334
+ `Switched ${configPath} modelRoles.default to ${next} — ${modelId} has no active credits.`,
335
+ ];
336
+ }
337
+ export async function configureHarness(options) {
338
+ const { harness } = options;
339
+ if (!CLIENTS.includes(harness)) {
340
+ throw new Error(`Unknown harness "${harness}". Use one of: ${CLIENTS.join(', ')}.`);
341
+ }
342
+ const isChipnet = Boolean(options.chipnet);
343
+ const backendUrl = resolveBackendUrl(options.backendUrl);
344
+ const wallet = loadWalletRef();
345
+ if (!wallet)
346
+ throw new WalletNotConfiguredError();
347
+ const template = buildTemplate(harness, isChipnet);
348
+ const target = options.path || template.path;
349
+ const result = {
350
+ harness,
351
+ path: target,
352
+ format: template.format,
353
+ instructions: template.instructions,
354
+ mcpInstalled: false,
355
+ providerInstalled: false,
356
+ canSign: wallet.canSign,
357
+ apiKeyReused: false,
358
+ apiKeyProvided: false,
359
+ models: [],
360
+ creditsActive: false,
361
+ credits: [],
362
+ };
363
+ let config = null;
364
+ let configError;
365
+ try {
366
+ config = await getConfig({ backendUrl });
367
+ }
368
+ catch (err) {
369
+ configError = err?.message || String(err);
370
+ }
371
+ let apiKeyValue = null;
372
+ let ompAgentDir = null;
373
+ if (harness === 'opencode') {
374
+ if (!target)
375
+ throw new Error('No known config path for opencode. Use --path.');
376
+ const existing = readJson(target);
377
+ const mcpEntry = template.json?.mcp?.paytaca;
378
+ const apiKey = await resolveApiKey(extractExistingApiKey(existing), options, wallet, backendUrl, result);
379
+ let merged = deepMerge(existing, { mcp: { paytaca: mcpEntry } });
380
+ if (config && apiKey) {
381
+ const provider = buildOpencodeProvider(config, backendUrl, apiKey);
382
+ merged = deepMerge(merged, { provider: { [OPENCODE_PROVIDER_ID]: provider } });
383
+ result.models = (config.models || [])
384
+ .filter((m) => m?.id)
385
+ .map((m) => ({ id: m.id, name: m.display_name || m.id }));
386
+ result.providerInstalled = true;
387
+ }
388
+ else if (!result.providerError) {
389
+ result.providerError = configError || 'Unable to load the AI configuration.';
390
+ }
391
+ writeJsonFile(target, merged);
392
+ result.mcpInstalled = true;
393
+ }
394
+ else {
395
+ if (!target)
396
+ throw new Error(`No known config file for harness "${harness}". Use --path.`);
397
+ const existingMcp = readJson(target);
398
+ writeJsonFile(target, deepMerge(existingMcp, template.json));
399
+ result.mcpInstalled = true;
400
+ ompAgentDir = dirname(target);
401
+ const modelsPath = join(ompAgentDir, 'models.json');
402
+ const existingModels = readJson(modelsPath);
403
+ apiKeyValue = await resolveApiKey(extractPiApiKey(existingModels), options, wallet, backendUrl, result);
404
+ const apiKey = apiKeyValue;
405
+ if (harness === 'omp') {
406
+ const yamlPath = ['models.yml', 'models.yaml']
407
+ .map((name) => join(ompAgentDir, name))
408
+ .find((path) => existsSync(path));
409
+ if (yamlPath) {
410
+ result.warnings = [
411
+ `${yamlPath} exists — omp prefers it over models.json, so the Paytaca provider there may be ignored.`,
412
+ ];
413
+ }
414
+ }
415
+ if (config && apiKey) {
416
+ const provider = buildPiProvider(config, backendUrl, apiKey);
417
+ writeJsonFile(modelsPath, deepMerge(existingModels, { providers: { [PI_PROVIDER_ID]: provider } }));
418
+ if (harness === 'pi') {
419
+ const authPath = join(dirname(target), 'auth.json');
420
+ const existingAuth = readJson(authPath);
421
+ const entry = existingAuth[PI_PROVIDER_ID];
422
+ if (!isPlainObject(entry) || entry.key !== apiKey) {
423
+ writeJsonFile(authPath, deepMerge(existingAuth, {
424
+ [PI_PROVIDER_ID]: { type: 'api_key', key: apiKey },
425
+ }));
426
+ }
427
+ }
428
+ result.models = (config.models || [])
429
+ .filter((m) => m?.id)
430
+ .map((m) => ({ id: m.id, name: m.display_name || m.id }));
431
+ result.providerInstalled = true;
432
+ }
433
+ else if (!result.providerError) {
434
+ result.providerError = configError || 'Unable to load the AI configuration.';
435
+ }
436
+ }
437
+ if (config)
438
+ result.planSuggestion = buildPlanSuggestion(config);
439
+ try {
440
+ const status = await getWalletStatus(wallet.walletHash, { backendUrl });
441
+ result.credits = summarizeAllCredits(status);
442
+ result.creditsActive = hasActiveCredits(status);
443
+ }
444
+ catch {
445
+ result.creditsActive = false;
446
+ }
447
+ if (harness === 'omp' && ompAgentDir && config && apiKeyValue) {
448
+ syncOmpDefaultModel(ompAgentDir, result.credits, result);
449
+ }
450
+ return result;
451
+ }
452
+ //# sourceMappingURL=configure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure.js","sourceRoot":"","sources":["../../src/ai/configure.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { getWalletStatus, type AiModelConfig, type WalletStatus, type WalletSession } from './client.js';
2
+ export interface PurchaseHint {
3
+ model: string;
4
+ minutes: number;
5
+ command: string;
6
+ message: string;
7
+ }
8
+ export declare function buildPurchaseHint(model: (Pick<AiModelConfig, 'id' | 'price_tiers'> & {
9
+ display_name?: string | null;
10
+ }) | null | undefined): PurchaseHint | null;
11
+ export interface CreditsSummary {
12
+ modelId: string | null;
13
+ displayName: string | null;
14
+ active: boolean;
15
+ timeRemainingSeconds: number;
16
+ timeCreditsSeconds: number;
17
+ timeUsedSeconds: number;
18
+ tokenLimit: number | null;
19
+ }
20
+ export declare function getSessions(status: WalletStatus): WalletSession[];
21
+ export declare function findSession(status: WalletStatus, modelId?: string): WalletSession | null;
22
+ export declare function hasActiveCredits(status: WalletStatus | null, modelId?: string): boolean;
23
+ export declare function formatRemaining(seconds: number): string;
24
+ export declare function summarizeCredits(status: WalletStatus, modelId?: string): CreditsSummary;
25
+ export declare function summarizeAllCredits(status: WalletStatus): CreditsSummary[];
26
+ export { getWalletStatus };
27
+ //# sourceMappingURL=credits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credits.d.ts","sourceRoot":"","sources":["../../src/ai/credits.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,aAAa,EACnB,MAAM,aAAa,CAAA;AAEpB,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EACD,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,aAAa,CAAC,GAAG;IAC3C,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC7B,CAAC,GACF,IAAI,GACJ,SAAS,GACZ,YAAY,GAAG,IAAI,CAgBrB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,MAAM,EAAE,OAAO,CAAA;IACf,oBAAoB,EAAE,MAAM,CAAA;IAC5B,kBAAkB,EAAE,MAAM,CAAA;IAC1B,eAAe,EAAE,MAAM,CAAA;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,aAAa,EAAE,CAGjE;AASD,wBAAgB,WAAW,CACzB,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,MAAM,GACf,aAAa,GAAG,IAAI,CAmBtB;AAUD,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,GAAG,IAAI,EAC3B,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAOT;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAWvD;AAcD,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,MAAM,GACf,cAAc,CAMhB;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,GAAG,cAAc,EAAE,CAE1E;AAED,OAAO,EAAE,eAAe,EAAE,CAAA"}