@tokenbuddy/tokenbuddy 1.0.5 → 1.0.7

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 (56) hide show
  1. package/dist/src/buyer-store.d.ts +48 -1
  2. package/dist/src/buyer-store.d.ts.map +1 -1
  3. package/dist/src/buyer-store.js +144 -17
  4. package/dist/src/buyer-store.js.map +1 -1
  5. package/dist/src/cli.d.ts +17 -0
  6. package/dist/src/cli.d.ts.map +1 -1
  7. package/dist/src/cli.js +560 -63
  8. package/dist/src/cli.js.map +1 -1
  9. package/dist/src/daemon.d.ts +11 -5
  10. package/dist/src/daemon.d.ts.map +1 -1
  11. package/dist/src/daemon.js +574 -161
  12. package/dist/src/daemon.js.map +1 -1
  13. package/dist/src/doctor-clawtip-wallet.d.ts +14 -0
  14. package/dist/src/doctor-clawtip-wallet.d.ts.map +1 -0
  15. package/dist/src/doctor-clawtip-wallet.js +54 -0
  16. package/dist/src/doctor-clawtip-wallet.js.map +1 -0
  17. package/dist/src/doctor-diagnostics.d.ts +99 -0
  18. package/dist/src/doctor-diagnostics.d.ts.map +1 -0
  19. package/dist/src/doctor-diagnostics.js +552 -0
  20. package/dist/src/doctor-diagnostics.js.map +1 -0
  21. package/dist/src/init-clawtip-activation.d.ts +48 -0
  22. package/dist/src/init-clawtip-activation.d.ts.map +1 -0
  23. package/dist/src/init-clawtip-activation.js +395 -0
  24. package/dist/src/init-clawtip-activation.js.map +1 -0
  25. package/dist/src/init-payment-options.d.ts +56 -0
  26. package/dist/src/init-payment-options.d.ts.map +1 -0
  27. package/dist/src/init-payment-options.js +165 -0
  28. package/dist/src/init-payment-options.js.map +1 -0
  29. package/dist/src/provider-install.d.ts +37 -2
  30. package/dist/src/provider-install.d.ts.map +1 -1
  31. package/dist/src/provider-install.js +317 -67
  32. package/dist/src/provider-install.js.map +1 -1
  33. package/dist/src/seller-catalog.d.ts +79 -0
  34. package/dist/src/seller-catalog.d.ts.map +1 -0
  35. package/dist/src/seller-catalog.js +126 -0
  36. package/dist/src/seller-catalog.js.map +1 -0
  37. package/dist/src/tb-proxyd.js +13 -2
  38. package/dist/src/tb-proxyd.js.map +1 -1
  39. package/dist/src/terminal-image.d.ts +22 -0
  40. package/dist/src/terminal-image.d.ts.map +1 -0
  41. package/dist/src/terminal-image.js +135 -0
  42. package/dist/src/terminal-image.js.map +1 -0
  43. package/package.json +1 -1
  44. package/src/buyer-store.ts +253 -18
  45. package/src/cli.ts +709 -68
  46. package/src/daemon.ts +651 -167
  47. package/src/doctor-clawtip-wallet.ts +70 -0
  48. package/src/doctor-diagnostics.ts +861 -0
  49. package/src/init-clawtip-activation.ts +487 -0
  50. package/src/init-payment-options.ts +249 -0
  51. package/src/provider-install.ts +426 -76
  52. package/src/seller-catalog.ts +222 -0
  53. package/src/tb-proxyd.ts +14 -2
  54. package/src/terminal-image.ts +187 -0
  55. package/tests/e2e.test.ts +88 -5
  56. package/tests/tokenbuddy.test.ts +1362 -27
@@ -0,0 +1,552 @@
1
+ import { BuyerStore } from "./buyer-store.js";
2
+ import Table from "cli-table3";
3
+ import { detectProviders, PROXY_ACCESS_TOKEN_PLACEHOLDER, SUPPORTED_PROVIDER_IDS, } from "./provider-install.js";
4
+ import { discoverSellerBackedModels, } from "./seller-catalog.js";
5
+ import { printDoctorClawtipWallet, readDoctorClawtipWallet, } from "./doctor-clawtip-wallet.js";
6
+ function parseJsonText(text) {
7
+ if (!text.trim()) {
8
+ return undefined;
9
+ }
10
+ return JSON.parse(text);
11
+ }
12
+ function extractRemoteError(payload, fallback) {
13
+ if (payload && typeof payload === "object") {
14
+ if ("error" in payload) {
15
+ const error = payload.error;
16
+ if (typeof error === "string" && error.trim()) {
17
+ return error;
18
+ }
19
+ if (error && typeof error === "object" && "message" in error && typeof error.message === "string" && error.message.trim()) {
20
+ return error.message;
21
+ }
22
+ }
23
+ if ("message" in payload && typeof payload.message === "string" && payload.message.trim()) {
24
+ return payload.message;
25
+ }
26
+ }
27
+ return fallback;
28
+ }
29
+ async function fetchJsonDocument(url) {
30
+ try {
31
+ const response = await fetch(url);
32
+ const text = await response.text();
33
+ const payload = text ? parseJsonText(text) : undefined;
34
+ if (!response.ok) {
35
+ return {
36
+ url,
37
+ available: false,
38
+ statusCode: response.status,
39
+ error: extractRemoteError(payload, `HTTP ${response.status}`),
40
+ };
41
+ }
42
+ return {
43
+ url,
44
+ available: true,
45
+ statusCode: response.status,
46
+ data: payload,
47
+ };
48
+ }
49
+ catch (error) {
50
+ return {
51
+ url,
52
+ available: false,
53
+ error: error instanceof Error ? error.message : String(error),
54
+ };
55
+ }
56
+ }
57
+ function providerRuntimeSummary(runtimeConfig) {
58
+ if (!runtimeConfig) {
59
+ return undefined;
60
+ }
61
+ if (runtimeConfig.selectionKind === "single-model") {
62
+ return [
63
+ runtimeConfig.protocolPreference,
64
+ runtimeConfig.defaultModel,
65
+ runtimeConfig.sellerId ? `seller=${runtimeConfig.sellerId}` : undefined,
66
+ ].filter(Boolean).join(" · ");
67
+ }
68
+ const bindings = [
69
+ runtimeConfig.roles.haiku?.upstreamModel ? `haiku=${runtimeConfig.roles.haiku.upstreamModel}` : undefined,
70
+ runtimeConfig.roles.sonnet?.upstreamModel ? `sonnet=${runtimeConfig.roles.sonnet.upstreamModel}` : undefined,
71
+ runtimeConfig.roles.opus?.upstreamModel ? `opus=${runtimeConfig.roles.opus.upstreamModel}` : undefined,
72
+ runtimeConfig.fallbackModel ? `fallback=${runtimeConfig.fallbackModel}` : undefined,
73
+ ].filter(Boolean);
74
+ return [runtimeConfig.protocolPreference, ...bindings].join(" · ");
75
+ }
76
+ function mergeDoctorSellerEntries(configuredSellers, probedSellers) {
77
+ const configuredById = new Map(configuredSellers.map((seller) => [seller.id, seller]));
78
+ const merged = [];
79
+ for (const seller of probedSellers) {
80
+ const configured = configuredById.get(seller.id);
81
+ merged.push({
82
+ ...configured,
83
+ ...seller,
84
+ discountRatio: seller.discountRatio ?? configured?.discountRatio,
85
+ supportedProtocols: seller.supportedProtocols || configured?.supportedProtocols,
86
+ paymentMethods: seller.paymentMethods || configured?.paymentMethods,
87
+ modelCount: seller.modelCount ?? configured?.modelCount,
88
+ errorMessage: seller.errorMessage || configured?.errorMessage,
89
+ });
90
+ configuredById.delete(seller.id);
91
+ }
92
+ for (const seller of configuredById.values()) {
93
+ merged.push(seller);
94
+ }
95
+ return merged;
96
+ }
97
+ function registrySellersToDoctorEntries(registry) {
98
+ if (!registry?.sellers) {
99
+ return [];
100
+ }
101
+ return registry.sellers.map((seller) => ({
102
+ id: seller.id,
103
+ name: seller.name,
104
+ url: seller.url,
105
+ status: "configured",
106
+ supportedProtocols: seller.supportedProtocols || [],
107
+ paymentMethods: seller.paymentMethods || [],
108
+ }));
109
+ }
110
+ function sellerCatalogEntriesToDoctorEntries(sellers) {
111
+ return sellers.map((seller) => ({
112
+ id: seller.id,
113
+ name: seller.name,
114
+ url: seller.url,
115
+ status: seller.status,
116
+ discountRatio: seller.discountRatio,
117
+ supportedProtocols: seller.supportedProtocols,
118
+ paymentMethods: seller.paymentMethods,
119
+ manifestSellerId: seller.manifestSellerId,
120
+ modelCount: seller.modelCount,
121
+ errorMessage: seller.errorMessage,
122
+ }));
123
+ }
124
+ function discountRatioFromSeller(seller) {
125
+ if (typeof seller.discountRatio === "number") {
126
+ return seller.discountRatio;
127
+ }
128
+ const match = seller.name?.match(/([0-9]+(?:\.[0-9]+)?)\s+discount/i);
129
+ if (!match) {
130
+ return undefined;
131
+ }
132
+ const parsed = Number(match[1]);
133
+ return Number.isFinite(parsed) ? parsed : undefined;
134
+ }
135
+ function formatDiscountRatio(value) {
136
+ return value.toFixed(2).replace(/\.?0+$/, "");
137
+ }
138
+ function formatUsdPer1m(microsPer1m) {
139
+ const usd = microsPer1m / 1_000_000;
140
+ return `$${usd.toFixed(2).replace(/\.?0+$/, "")}`;
141
+ }
142
+ function formatPriceRange(minMicros, maxMicros) {
143
+ if (minMicros == null || maxMicros == null) {
144
+ return "-";
145
+ }
146
+ if (minMicros === maxMicros) {
147
+ return formatUsdPer1m(minMicros);
148
+ }
149
+ return `${formatUsdPer1m(minMicros)}~${formatUsdPer1m(maxMicros)}`;
150
+ }
151
+ function modelsHaveExplicitPriceData(models) {
152
+ return models.some((model) => typeof model.inputPriceMicrosPer1m === "number" ||
153
+ typeof model.outputPriceMicrosPer1m === "number");
154
+ }
155
+ function buildDoctorModelSummaryEntries(models, sellers) {
156
+ const grouped = new Map();
157
+ const discountBySellerId = new Map(sellers
158
+ .map((seller) => [seller.id, discountRatioFromSeller(seller)])
159
+ .filter((entry) => typeof entry[1] === "number"));
160
+ for (const model of models) {
161
+ const entry = grouped.get(model.id) || {
162
+ sellerIds: new Set(),
163
+ discounts: [],
164
+ inputPrices: [],
165
+ outputPrices: [],
166
+ };
167
+ if (!entry.sellerIds.has(model.sellerId)) {
168
+ entry.sellerIds.add(model.sellerId);
169
+ const discount = discountBySellerId.get(model.sellerId);
170
+ if (typeof discount === "number") {
171
+ entry.discounts.push(discount);
172
+ }
173
+ if (typeof model.inputPriceMicrosPer1m === "number") {
174
+ entry.inputPrices.push(model.inputPriceMicrosPer1m);
175
+ }
176
+ if (typeof model.outputPriceMicrosPer1m === "number") {
177
+ entry.outputPrices.push(model.outputPriceMicrosPer1m);
178
+ }
179
+ }
180
+ grouped.set(model.id, entry);
181
+ }
182
+ return Array.from(grouped.entries())
183
+ .map(([id, entry]) => {
184
+ const discountMin = entry.discounts.length > 0 ? Math.min(...entry.discounts) : undefined;
185
+ const discountMax = entry.discounts.length > 0 ? Math.max(...entry.discounts) : undefined;
186
+ const inputPriceMinMicrosPer1m = entry.inputPrices.length > 0 ? Math.min(...entry.inputPrices) : undefined;
187
+ const inputPriceMaxMicrosPer1m = entry.inputPrices.length > 0 ? Math.max(...entry.inputPrices) : undefined;
188
+ const outputPriceMinMicrosPer1m = entry.outputPrices.length > 0 ? Math.min(...entry.outputPrices) : undefined;
189
+ const outputPriceMaxMicrosPer1m = entry.outputPrices.length > 0 ? Math.max(...entry.outputPrices) : undefined;
190
+ const discountRange = discountMin == null || discountMax == null
191
+ ? "-"
192
+ : discountMin === discountMax
193
+ ? formatDiscountRatio(discountMin)
194
+ : `${formatDiscountRatio(discountMin)}~${formatDiscountRatio(discountMax)}`;
195
+ const priceRange = inputPriceMinMicrosPer1m == null || outputPriceMinMicrosPer1m == null
196
+ ? "-"
197
+ : `in ${formatPriceRange(inputPriceMinMicrosPer1m, inputPriceMaxMicrosPer1m)} / out ${formatPriceRange(outputPriceMinMicrosPer1m, outputPriceMaxMicrosPer1m)}`;
198
+ return {
199
+ id,
200
+ sellerCount: entry.sellerIds.size,
201
+ discountMin,
202
+ discountMax,
203
+ discountRange,
204
+ inputPriceMinMicrosPer1m,
205
+ inputPriceMaxMicrosPer1m,
206
+ outputPriceMinMicrosPer1m,
207
+ outputPriceMaxMicrosPer1m,
208
+ priceRange,
209
+ };
210
+ })
211
+ .sort((left, right) => left.id.localeCompare(right.id));
212
+ }
213
+ function startDoctorFetches(controlPort, proxyPort, daemonRunning, daemonError, sellerRegistryUrl) {
214
+ const controlBaseUrl = `http://127.0.0.1:${controlPort}`;
215
+ const openAiBaseUrl = `http://127.0.0.1:${proxyPort}/v1`;
216
+ const unavailableMessage = daemonError || "tb-proxyd is not running";
217
+ if (!daemonRunning) {
218
+ return {
219
+ healthResult: Promise.resolve({ url: `${controlBaseUrl}/health`, available: false, error: unavailableMessage }),
220
+ sellersResult: Promise.resolve({ url: `${controlBaseUrl}/sellers`, available: false, error: unavailableMessage }),
221
+ modelsResult: Promise.resolve({ url: `${controlBaseUrl}/models`, available: false, error: unavailableMessage }),
222
+ proxyModelsResult: Promise.resolve({ url: `${openAiBaseUrl}/models`, available: false, error: unavailableMessage }),
223
+ registryResult: Promise.resolve({ url: sellerRegistryUrl || "", available: false, error: unavailableMessage }),
224
+ };
225
+ }
226
+ return {
227
+ healthResult: fetchJsonDocument(`${controlBaseUrl}/health`),
228
+ sellersResult: fetchJsonDocument(`${controlBaseUrl}/sellers`),
229
+ modelsResult: fetchJsonDocument(`${controlBaseUrl}/models`),
230
+ proxyModelsResult: fetchJsonDocument(`${openAiBaseUrl}/models`),
231
+ registryResult: sellerRegistryUrl
232
+ ? fetchJsonDocument(sellerRegistryUrl)
233
+ : Promise.resolve({ url: "", available: false, error: "registry url unavailable" }),
234
+ };
235
+ }
236
+ async function resolveDoctorFetches(fetches) {
237
+ const [healthResult, sellersResult, modelsResult, proxyModelsResult, registryResult,] = await Promise.all([
238
+ fetches.healthResult,
239
+ fetches.sellersResult,
240
+ fetches.modelsResult,
241
+ fetches.proxyModelsResult,
242
+ fetches.registryResult,
243
+ ]);
244
+ return {
245
+ healthResult,
246
+ sellersResult,
247
+ modelsResult,
248
+ proxyModelsResult,
249
+ registryResult,
250
+ };
251
+ }
252
+ function buildDoctorSellerSummary(sellersResult, registryResult, sellerRegistryUrl, probedSellers = []) {
253
+ const sellersData = sellersResult.data;
254
+ const configuredSellers = mergeDoctorSellerEntries(registrySellersToDoctorEntries(registryResult.data), sellersData?.sellers || []);
255
+ const mergedSellers = probedSellers.length > 0
256
+ ? mergeDoctorSellerEntries(configuredSellers, probedSellers)
257
+ : configuredSellers;
258
+ return {
259
+ available: sellersResult.available || registryResult.available || mergedSellers.length > 0,
260
+ registryUrl: sellersData?.registryUrl || sellerRegistryUrl,
261
+ version: sellersData?.version || registryResult.data?.version,
262
+ defaultSeller: sellersData?.defaultSeller || registryResult.data?.defaultSeller,
263
+ sellers: mergedSellers,
264
+ error: sellersResult.error || registryResult.error,
265
+ };
266
+ }
267
+ function buildDoctorAccessSummary(controlPort, proxyPort, healthResult, proxyModelsResult, availability = {}) {
268
+ const controlBaseUrl = `http://127.0.0.1:${controlPort}`;
269
+ const proxyBaseUrl = `http://127.0.0.1:${proxyPort}`;
270
+ const openAiBaseUrl = `${proxyBaseUrl}/v1`;
271
+ const anthropicBaseUrl = proxyBaseUrl;
272
+ return {
273
+ controlBaseUrl,
274
+ proxyBaseUrl,
275
+ openAiBaseUrl,
276
+ anthropicBaseUrl,
277
+ token: PROXY_ACCESS_TOKEN_PLACEHOLDER,
278
+ endpoints: [
279
+ {
280
+ id: "control.health",
281
+ name: "Control Plane Health",
282
+ url: `${controlBaseUrl}/health`,
283
+ available: healthResult.available,
284
+ requiresToken: false,
285
+ error: healthResult.error,
286
+ },
287
+ {
288
+ id: "control.sellers",
289
+ name: "Seller Registry",
290
+ url: `${controlBaseUrl}/sellers`,
291
+ available: availability.sellersAvailable ?? true,
292
+ requiresToken: false,
293
+ error: availability.sellersError,
294
+ },
295
+ {
296
+ id: "control.models",
297
+ name: "Seller-backed Models",
298
+ url: `${controlBaseUrl}/models`,
299
+ available: availability.modelsAvailable ?? true,
300
+ requiresToken: false,
301
+ error: availability.modelsError,
302
+ },
303
+ {
304
+ id: "proxy.openai",
305
+ name: "OpenAI-compatible Proxy",
306
+ url: openAiBaseUrl,
307
+ probeUrl: `${openAiBaseUrl}/models`,
308
+ available: proxyModelsResult.available,
309
+ requiresToken: true,
310
+ token: PROXY_ACCESS_TOKEN_PLACEHOLDER,
311
+ error: proxyModelsResult.error,
312
+ },
313
+ {
314
+ id: "proxy.anthropic",
315
+ name: "Anthropic-compatible Proxy",
316
+ url: anthropicBaseUrl,
317
+ probeUrl: `${openAiBaseUrl}/models`,
318
+ available: proxyModelsResult.available,
319
+ requiresToken: true,
320
+ token: PROXY_ACCESS_TOKEN_PLACEHOLDER,
321
+ error: proxyModelsResult.error,
322
+ },
323
+ ],
324
+ };
325
+ }
326
+ function buildDoctorModelsSummary(modelsResult, sellers) {
327
+ const modelsData = modelsResult.data;
328
+ const grouped = buildDoctorModelSummaryEntries(modelsData?.data || [], sellers);
329
+ return {
330
+ available: modelsResult.available,
331
+ count: modelsData?.data?.length || 0,
332
+ uniqueCount: grouped.length,
333
+ registryUrl: modelsData?.registryUrl,
334
+ data: modelsData?.data || [],
335
+ grouped,
336
+ sellers,
337
+ error: modelsResult.error,
338
+ };
339
+ }
340
+ function providerStatusIcon(status) {
341
+ if (status === "configured") {
342
+ return "✅";
343
+ }
344
+ if (status === "installed") {
345
+ return "🟡";
346
+ }
347
+ return "🔘";
348
+ }
349
+ function remoteStatusIcon(available) {
350
+ return available ? "✅" : "❌";
351
+ }
352
+ function formatList(values) {
353
+ return values && values.length > 0 ? values.join(", ") : "-";
354
+ }
355
+ function defaultWriter(line) {
356
+ console.log(line);
357
+ }
358
+ function printDoctorAccess(access, writeLine) {
359
+ writeLine("Access check complete.");
360
+ writeLine(`Proxy token: ${access.token}`);
361
+ for (const endpoint of access.endpoints) {
362
+ writeLine(`${remoteStatusIcon(endpoint.available)} ${endpoint.name}`);
363
+ writeLine(` URL: ${endpoint.url}`);
364
+ if (endpoint.probeUrl) {
365
+ writeLine(` Probe: ${endpoint.probeUrl}`);
366
+ }
367
+ if (endpoint.requiresToken && endpoint.token) {
368
+ writeLine(` Token: ${endpoint.token}`);
369
+ }
370
+ if (!endpoint.available && endpoint.error) {
371
+ writeLine(` Error: ${endpoint.error}`);
372
+ }
373
+ }
374
+ }
375
+ function printDoctorSellers(sellers, writeLine) {
376
+ writeLine("Seller registry refresh complete.");
377
+ if (!sellers.available) {
378
+ writeLine(`❌ Seller registry unavailable: ${sellers.error || "unknown error"}`);
379
+ return;
380
+ }
381
+ writeLine(`Registry: ${sellers.registryUrl || "-"}`);
382
+ writeLine(`Default seller: ${sellers.defaultSeller || "-"}`);
383
+ for (const seller of sellers.sellers) {
384
+ const label = seller.name ? `${seller.name} (${seller.id})` : seller.id;
385
+ const icon = seller.status === "ok" || seller.status === "configured"
386
+ ? "✅"
387
+ : seller.status === "failed"
388
+ ? "❌"
389
+ : "🔘";
390
+ writeLine(`${icon} ${label} [${seller.status}]`);
391
+ writeLine(` URL: ${seller.url}`);
392
+ writeLine(` Protocols: ${formatList(seller.supportedProtocols)}`);
393
+ writeLine(` Payments: ${formatList(seller.paymentMethods)}`);
394
+ if (seller.modelCount != null) {
395
+ writeLine(` Models: ${seller.modelCount}`);
396
+ }
397
+ if (seller.errorMessage) {
398
+ writeLine(` Error: ${seller.errorMessage}`);
399
+ }
400
+ }
401
+ }
402
+ export function printDoctorModelsSummary(models, writeLine = defaultWriter) {
403
+ writeLine("Model catalog refresh complete.");
404
+ if (!models.available) {
405
+ writeLine(`❌ Model catalog unavailable: ${models.error || "unknown error"}`);
406
+ return;
407
+ }
408
+ writeLine(`Unique models: ${models.uniqueCount}`);
409
+ writeLine(`Seller offers: ${models.count}`);
410
+ const table = new Table({
411
+ head: ["Model ID", "Seller Count", "Discount Range", "Price Range"],
412
+ style: {
413
+ head: []
414
+ }
415
+ });
416
+ for (const entry of models.grouped) {
417
+ table.push([
418
+ entry.id,
419
+ String(entry.sellerCount),
420
+ entry.discountRange,
421
+ entry.priceRange
422
+ ]);
423
+ }
424
+ writeLine(table.toString());
425
+ }
426
+ export function readDoctorProviders() {
427
+ const store = new BuyerStore();
428
+ try {
429
+ const runtimeConfigByProvider = new Map();
430
+ for (const providerId of SUPPORTED_PROVIDER_IDS) {
431
+ const record = store.getProviderRuntimeConfig(providerId);
432
+ if (record) {
433
+ runtimeConfigByProvider.set(providerId, {
434
+ config: record.config,
435
+ updatedAt: record.updatedAt,
436
+ });
437
+ }
438
+ }
439
+ return detectProviders().map((provider) => {
440
+ const runtime = runtimeConfigByProvider.get(provider.id);
441
+ return {
442
+ ...provider,
443
+ runtimeConfig: runtime?.config,
444
+ runtimeConfigUpdatedAt: runtime?.updatedAt,
445
+ };
446
+ });
447
+ }
448
+ finally {
449
+ store.close();
450
+ }
451
+ }
452
+ export function printDoctorProviders(providers, writeLine = defaultWriter) {
453
+ writeLine("\n--- Programming Terminals ---");
454
+ for (const provider of providers) {
455
+ writeLine(`${providerStatusIcon(provider.status)} ${provider.name} [${provider.status}]`);
456
+ if (provider.commandName) {
457
+ writeLine(` Command: ${provider.commandName}${provider.executablePath ? ` -> ${provider.executablePath}` : " (not found in PATH)"}`);
458
+ }
459
+ writeLine(` Config: ${provider.configPath}`);
460
+ if (provider.observedPaths && provider.observedPaths.length > 0) {
461
+ writeLine(` Native hints: ${provider.observedPaths.join(", ")}`);
462
+ }
463
+ const runtimeSummary = providerRuntimeSummary(provider.runtimeConfig);
464
+ if (runtimeSummary) {
465
+ writeLine(` Runtime: ${runtimeSummary}`);
466
+ }
467
+ writeLine(` Notes: ${provider.reason}`);
468
+ }
469
+ }
470
+ export async function collectDoctorDiagnostics(options) {
471
+ const fetches = startDoctorFetches(options.controlPort, options.proxyPort, options.daemonRunning, options.daemonError, options.sellerRegistryUrl);
472
+ const results = await resolveDoctorFetches(fetches);
473
+ const sellers = buildDoctorSellerSummary(results.sellersResult, results.registryResult, options.sellerRegistryUrl, results.modelsResult.data?.sellers || []);
474
+ const models = buildDoctorModelsSummary(results.modelsResult, sellers.sellers);
475
+ return {
476
+ access: buildDoctorAccessSummary(options.controlPort, options.proxyPort, results.healthResult, results.proxyModelsResult, {
477
+ sellersAvailable: sellers.available,
478
+ sellersError: sellers.error,
479
+ modelsAvailable: models.available,
480
+ modelsError: models.error,
481
+ }),
482
+ clawtipWallet: readDoctorClawtipWallet(),
483
+ models,
484
+ providers: options.providers,
485
+ sellers,
486
+ };
487
+ }
488
+ export async function collectDoctorModelsSummary(options) {
489
+ const diagnostics = await collectDoctorDiagnostics({
490
+ ...options,
491
+ providers: [],
492
+ });
493
+ if (modelsHaveExplicitPriceData(diagnostics.models.data) || !options.sellerRegistryUrl) {
494
+ return diagnostics.models;
495
+ }
496
+ try {
497
+ const catalog = await discoverSellerBackedModels(options.sellerRegistryUrl);
498
+ const sellers = sellerCatalogEntriesToDoctorEntries(catalog.sellers);
499
+ return buildDoctorModelsSummary({
500
+ url: options.sellerRegistryUrl,
501
+ available: true,
502
+ data: {
503
+ object: "list",
504
+ registryUrl: catalog.registryUrl,
505
+ data: catalog.models,
506
+ },
507
+ }, sellers);
508
+ }
509
+ catch {
510
+ return diagnostics.models;
511
+ }
512
+ }
513
+ export async function renderDoctorDiagnosticsProgressively(options) {
514
+ const writeLine = options.writeLine || defaultWriter;
515
+ const clawtipWallet = readDoctorClawtipWallet();
516
+ const fetches = startDoctorFetches(options.controlPort, options.proxyPort, options.daemonRunning, options.daemonError, options.sellerRegistryUrl);
517
+ printDoctorClawtipWallet(clawtipWallet, writeLine);
518
+ writeLine("\n--- Access Interfaces ---");
519
+ writeLine("Checking local control plane and proxy endpoints...");
520
+ const [healthResult, proxyModelsResult] = await Promise.all([
521
+ fetches.healthResult,
522
+ fetches.proxyModelsResult,
523
+ ]);
524
+ const access = buildDoctorAccessSummary(options.controlPort, options.proxyPort, healthResult, proxyModelsResult);
525
+ printDoctorAccess(access, writeLine);
526
+ writeLine("\n--- Sellers ---");
527
+ writeLine("Refreshing seller registry...");
528
+ const [sellersResult, registryResult] = await Promise.all([
529
+ fetches.sellersResult,
530
+ fetches.registryResult,
531
+ ]);
532
+ const partialSellers = buildDoctorSellerSummary(sellersResult, registryResult, options.sellerRegistryUrl);
533
+ printDoctorSellers(partialSellers, writeLine);
534
+ const modelsResult = await fetches.modelsResult;
535
+ const finalSellers = buildDoctorSellerSummary(sellersResult, registryResult, options.sellerRegistryUrl, modelsResult.data?.sellers || []);
536
+ const models = buildDoctorModelsSummary(modelsResult, finalSellers.sellers);
537
+ access.endpoints = buildDoctorAccessSummary(options.controlPort, options.proxyPort, healthResult, proxyModelsResult, {
538
+ sellersAvailable: finalSellers.available,
539
+ sellersError: finalSellers.error,
540
+ modelsAvailable: models.available,
541
+ modelsError: models.error,
542
+ }).endpoints;
543
+ writeLine("\nModel catalog hidden in `tb doctor`. Run `tb models` for the current model summary.");
544
+ return {
545
+ access,
546
+ clawtipWallet,
547
+ models,
548
+ providers: options.providers,
549
+ sellers: finalSellers,
550
+ };
551
+ }
552
+ //# sourceMappingURL=doctor-diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor-diagnostics.js","sourceRoot":"","sources":["../../src/doctor-diagnostics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import { type OpenClawWalletConfigState } from "./init-payment-options.js";
2
+ export interface ClawtipBootstrapPayment {
3
+ orderNo: string;
4
+ amountFen: number;
5
+ payTo?: string;
6
+ encryptedData?: string;
7
+ indicator: string;
8
+ slug?: string;
9
+ skillId?: string;
10
+ description?: string;
11
+ resourceUrl?: string;
12
+ }
13
+ export interface ParsedClawtipOutput {
14
+ authUrl?: string;
15
+ clawtipId?: string;
16
+ mediaPath?: string;
17
+ failureMessage?: string;
18
+ requiresWalletAuth: boolean;
19
+ walletReady: boolean;
20
+ }
21
+ export interface WaitForClawtipActivationOptions {
22
+ inspectWalletConfig?: () => OpenClawWalletConfigState;
23
+ isCancelled?: () => boolean;
24
+ clawtipId?: string;
25
+ checkRegister?: (clawtipId: string) => Promise<void>;
26
+ cancel?: (message?: string) => void;
27
+ pollIntervalMs?: number;
28
+ sleep?: (ms: number) => Promise<void>;
29
+ }
30
+ export interface StartClawtipWalletBootstrapOptions {
31
+ home?: string;
32
+ runClawtipCommand?: (args: string[]) => Promise<string>;
33
+ }
34
+ export interface CheckOpenClawRuntimeOptions {
35
+ runOpenClawCommand?: (args: string[]) => Promise<string>;
36
+ }
37
+ export declare function parseClawtipCliOutput(output: string): ParsedClawtipOutput;
38
+ export declare function resolveClawtipQrMediaPath(parsedOutput: ParsedClawtipOutput, orderFile: string): string;
39
+ export declare function readClawtipPayCredential(orderFile: string): string | undefined;
40
+ export declare function writeClawtipOrderFile(payment: ClawtipBootstrapPayment, home?: string): string;
41
+ export declare function startClawtipWalletBootstrap(payment: ClawtipBootstrapPayment, options?: StartClawtipWalletBootstrapOptions): Promise<{
42
+ orderFile: string;
43
+ parsedOutput: ParsedClawtipOutput;
44
+ payCredential?: string;
45
+ }>;
46
+ export declare function checkOpenClawRuntime(options?: CheckOpenClawRuntimeOptions): Promise<string>;
47
+ export declare function waitForClawtipActivationConfirmation(options?: WaitForClawtipActivationOptions): Promise<boolean>;
48
+ //# sourceMappingURL=init-clawtip-activation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-clawtip-activation.d.ts","sourceRoot":"","sources":["../../src/init-clawtip-activation.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,KAAK,yBAAyB,EAC/B,MAAM,2BAA2B,CAAC;AAOnC,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,+BAA+B;IAC9C,mBAAmB,CAAC,EAAE,MAAM,yBAAyB,CAAC;IACtD,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,kCAAkC;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,2BAA2B;IAC1C,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC1D;AA2OD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,CA0BzE;AAED,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAWtG;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAO9E;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,uBAAuB,EAChC,IAAI,GAAE,MAAyB,GAC9B,MAAM,CAgBR;AAED,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,uBAAuB,EAChC,OAAO,GAAE,kCAAuC,GAC/C,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,mBAAmB,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAgC3F;AAED,wBAAsB,oBAAoB,CACxC,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,MAAM,CAAC,CAUjB;AAiCD,wBAAsB,oCAAoC,CACxD,OAAO,GAAE,+BAAoC,GAC5C,OAAO,CAAC,OAAO,CAAC,CA2ClB"}