@rubicon-caliga/cli 0.1.0 → 0.1.1

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/dist/format.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import type { ArticleSummary, ArticleNavigation, SellerPaymentTerms } from "@rubicon-caliga/core";
2
2
  import type { ReadReceipt } from "@rubicon-caliga/agent-sdk";
3
+ import type { StoredReceipt } from "./receipts.js";
3
4
  export declare function printJson(value: unknown): void;
4
5
  export declare function printJsonEvent(type: string, value: unknown): void;
5
6
  export declare function articleJson(article: ArticleSummary): Record<string, unknown>;
@@ -7,5 +8,9 @@ export declare function humanArticle(article: ArticleSummary): string;
7
8
  export declare function humanPaymentTerms(terms: SellerPaymentTerms): string[];
8
9
  export declare function humanNavigation(navigation: ArticleNavigation): string;
9
10
  export declare function humanReceipt(receipt: ReadReceipt): string;
11
+ export declare function receiptSummaryJson(stored: StoredReceipt): Record<string, unknown>;
12
+ export declare function readReceiptSummaryJson(receipt: ReadReceipt): Record<string, unknown>;
13
+ export declare function humanReceiptSummary(receipt: ReadReceipt, receiptId?: string): string;
10
14
  export declare function formatAtomic(value: string | bigint): string;
15
+ export declare function recommendedReadCommandFor(articleId: string, sectionId: string): string;
11
16
  //# sourceMappingURL=format.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAClG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAE9C;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAEjE;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAc5E;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAoB5D;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAQrE;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,iBAAiB,GAAG,MAAM,CAoBrE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAyBzD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAE3D"}
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAClG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAE9C;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAEjE;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAe5E;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAoB5D;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAYrE;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,iBAAiB,GAAG,MAAM,CAsBrE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAgCzD;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMjF;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAmBpF;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAoBpF;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEtF"}
package/dist/format.js CHANGED
@@ -1,4 +1,4 @@
1
- import { formatAtomicUsdc } from "@rubicon-caliga/core";
1
+ import { formatAtomicUsdc, settlementNetworkInfo } from "@rubicon-caliga/core";
2
2
  export function printJson(value) {
3
3
  process.stdout.write(`${JSON.stringify(value)}\n`);
4
4
  }
@@ -6,6 +6,7 @@ export function printJsonEvent(type, value) {
6
6
  printJson({ type, ...asRecord(value) });
7
7
  }
8
8
  export function articleJson(article) {
9
+ const paymentTerms = article.paymentTerms ? enrichedPaymentTerms(article.paymentTerms) : undefined;
9
10
  return {
10
11
  articleId: article.articleId,
11
12
  title: article.title,
@@ -16,7 +17,7 @@ export function articleJson(article) {
16
17
  totalWords: article.totalWords,
17
18
  pricePerWordAtomic: article.pricePerWordAtomic,
18
19
  maxArticlePriceAtomic: article.maxArticlePriceAtomic,
19
- paymentTerms: article.paymentTerms,
20
+ paymentTerms,
20
21
  sections: article.sections,
21
22
  };
22
23
  }
@@ -42,20 +43,26 @@ export function humanArticle(article) {
42
43
  return lines.join("\n");
43
44
  }
44
45
  export function humanPaymentTerms(terms) {
46
+ const enriched = enrichedPaymentTerms(terms);
45
47
  return [
46
48
  "Payment terms:",
47
- `- Asset: ${terms.asset}`,
48
- `- Network: ${terms.networkLabel ?? terms.network}`,
49
+ `- Asset: ${enriched.asset}`,
50
+ `- Network: ${enriched.networkLabel ?? enriched.network}`,
51
+ enriched.circleChain ? `- Circle chain: ${enriched.circleChain}` : undefined,
52
+ enriched.environment ? `- Environment: ${enriched.environment}` : undefined,
53
+ enriched.fundingMethod ? `- Funding: ${enriched.fundingMethod}` : undefined,
49
54
  `- Pay to: ${terms.payTo}`,
50
55
  `- Price/word: ${formatAtomic(terms.pricePerWordAtomic)} USDC`,
51
- ];
56
+ ].filter((line) => line !== undefined);
52
57
  }
53
58
  export function humanNavigation(navigation) {
54
59
  const seller = navigation.sellerAgent;
60
+ const recommendedReadCommand = recommendedReadCommandFor(navigation.articleId, seller.recommendedSectionId);
55
61
  const lines = [
56
62
  `Recommended section: ${seller.recommendedSectionId}`,
57
63
  `Alternatives: ${seller.alternativeSectionIds.length ? seller.alternativeSectionIds.join(", ") : "none"}`,
58
64
  `Rationale: ${seller.rationale}`,
65
+ `Recommended read: ${recommendedReadCommand}`,
59
66
  ];
60
67
  if (seller.safeHints.length > 0) {
61
68
  lines.push("", "Safe hints:", ...seller.safeHints.map((hint) => `- ${hint}`));
@@ -72,6 +79,7 @@ export function humanNavigation(navigation) {
72
79
  return lines.join("\n");
73
80
  }
74
81
  export function humanReceipt(receipt) {
82
+ const networkInfo = settlementNetworkInfo(receipt.network);
75
83
  const lines = [
76
84
  "Receipt:",
77
85
  `- Session: ${receipt.sessionId}`,
@@ -93,13 +101,80 @@ export function humanReceipt(receipt) {
93
101
  lines.push(`- Seller pay to: ${receipt.sellerPayTo}`);
94
102
  }
95
103
  if (receipt.network) {
96
- lines.push(`- Network: ${receipt.network}`);
104
+ lines.push(`- Network: ${networkInfo.networkLabel} (${receipt.network})`);
105
+ }
106
+ if (networkInfo.circleChain) {
107
+ lines.push(`- Circle chain: ${networkInfo.circleChain}`);
108
+ }
109
+ if (receipt.buyerWalletAddress && networkInfo.buyerWalletExplanation) {
110
+ lines.push(`- Buyer wallet note: ${networkInfo.buyerWalletExplanation}`);
97
111
  }
98
112
  return lines.join("\n");
99
113
  }
114
+ export function receiptSummaryJson(stored) {
115
+ return {
116
+ receiptId: stored.receiptId,
117
+ savedAt: stored.savedAt,
118
+ ...readReceiptSummaryJson(stored.receipt),
119
+ };
120
+ }
121
+ export function readReceiptSummaryJson(receipt) {
122
+ const networkInfo = settlementNetworkInfo(receipt.network);
123
+ return {
124
+ articleId: receipt.articleId,
125
+ sessionId: receipt.sessionId,
126
+ wordsRead: receipt.wordsRead,
127
+ amountPaidAtomic: receipt.amountPaidAtomic,
128
+ amountPaidUsdc: formatAtomic(receipt.amountPaidAtomic),
129
+ stopReason: receipt.stopReason,
130
+ completed: receipt.completed,
131
+ buyerWalletAddress: receipt.buyerWalletAddress,
132
+ sellerPayTo: receipt.sellerPayTo,
133
+ network: receipt.network,
134
+ circleChain: networkInfo.circleChain,
135
+ buyerWalletExplanation: receipt.buyerWalletAddress ? networkInfo.buyerWalletExplanation : undefined,
136
+ settlementIds: receipt.settlementIds,
137
+ transactionHashes: receipt.transactionHashes,
138
+ text: receipt.text,
139
+ };
140
+ }
141
+ export function humanReceiptSummary(receipt, receiptId) {
142
+ const networkInfo = settlementNetworkInfo(receipt.network);
143
+ const lines = [
144
+ "Summary:",
145
+ receiptId ? `- Receipt ID: ${receiptId}` : undefined,
146
+ `- Article: ${receipt.articleId}`,
147
+ `- Words read: ${receipt.wordsRead.toLocaleString("en-US")}`,
148
+ `- Amount paid: ${formatAtomic(receipt.amountPaidAtomic)} USDC`,
149
+ `- Stop reason: ${receipt.stopReason}`,
150
+ receipt.buyerWalletAddress ? `- Buyer wallet: ${receipt.buyerWalletAddress}` : undefined,
151
+ receipt.sellerPayTo ? `- Seller pay to: ${receipt.sellerPayTo}` : undefined,
152
+ receipt.network ? `- Network: ${networkInfo.networkLabel} (${receipt.network})` : undefined,
153
+ networkInfo.circleChain ? `- Circle chain: ${networkInfo.circleChain}` : undefined,
154
+ receipt.buyerWalletAddress && networkInfo.buyerWalletExplanation
155
+ ? `- Buyer wallet note: ${networkInfo.buyerWalletExplanation}`
156
+ : undefined,
157
+ "",
158
+ receipt.text,
159
+ ];
160
+ return lines.filter((line) => line !== undefined).join("\n");
161
+ }
100
162
  export function formatAtomic(value) {
101
163
  return formatAtomicUsdc(typeof value === "bigint" ? value : BigInt(value));
102
164
  }
165
+ export function recommendedReadCommandFor(articleId, sectionId) {
166
+ return `rubicon read ${articleId} --section ${sectionId} --stop-after-section --max-usdc <amount>`;
167
+ }
168
+ function enrichedPaymentTerms(terms) {
169
+ const networkInfo = settlementNetworkInfo(terms.network);
170
+ return {
171
+ ...terms,
172
+ networkLabel: terms.networkLabel ?? networkInfo.networkLabel,
173
+ circleChain: terms.circleChain ?? networkInfo.circleChain,
174
+ environment: terms.environment ?? networkInfo.environment,
175
+ fundingMethod: terms.fundingMethod ?? networkInfo.fundingMethod,
176
+ };
177
+ }
103
178
  function asRecord(value) {
104
179
  return typeof value === "object" && value !== null ? value : { value };
105
180
  }
@@ -1 +1 @@
1
- {"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -2,11 +2,11 @@
2
2
  import { mkdir } from "node:fs/promises";
3
3
  import { dirname } from "node:path";
4
4
  import { RubiconClient } from "@rubicon-caliga/agent-sdk";
5
- import { parseUsdcToAtomic } from "@rubicon-caliga/core";
5
+ import { parseUsdcToAtomic, settlementNetworkInfo } from "@rubicon-caliga/core";
6
6
  import { parseArgs, booleanFlag, stringFlag } from "./args.js";
7
7
  import { configPath, HOSTED_GATEWAY_URL, readConfig, writeConfig } from "./config.js";
8
8
  import { CliError, toCliError } from "./errors.js";
9
- import { articleJson, formatAtomic, humanArticle, humanNavigation, humanReceipt, printJson, printJsonEvent, } from "./format.js";
9
+ import { articleJson, formatAtomic, humanArticle, humanNavigation, humanReceipt, humanReceiptSummary, printJson, printJsonEvent, readReceiptSummaryJson, recommendedReadCommandFor, receiptSummaryJson, } from "./format.js";
10
10
  import { selectPaymentEngine } from "./payments.js";
11
11
  import { listReceipts, loadReceipt, saveReceipt } from "./receipts.js";
12
12
  async function main() {
@@ -29,7 +29,7 @@ async function main() {
29
29
  authorization: apiKey ? `Bearer ${apiKey}` : undefined,
30
30
  paymentEngine: payment.engine,
31
31
  });
32
- await dispatch({ parsed, json, config, gatewayUrl, apiKey, paymentMode: payment.mode, client });
32
+ await dispatch({ parsed, json, config, gatewayUrl, apiKey, paymentMode: payment.mode, circleChain: payment.circleChain, client });
33
33
  }
34
34
  catch (error) {
35
35
  const cliError = toCliError(error);
@@ -130,8 +130,9 @@ async function articleNavigation(runtime, articleId) {
130
130
  if (!goal)
131
131
  throw new CliError("MISSING_GOAL", "rubicon article navigation requires --goal.");
132
132
  const response = await runtime.client.getNavigation(articleId, goal);
133
+ const recommendedReadCommand = recommendedReadCommandFor(response.article.articleId, response.navigation.sellerAgent.recommendedSectionId);
133
134
  if (runtime.json) {
134
- printJson({ success: true, article: articleJson(response.article), navigation: response.navigation });
135
+ printJson({ success: true, article: articleJson(response.article), navigation: response.navigation, recommendedReadCommand });
135
136
  return;
136
137
  }
137
138
  process.stdout.write(`${humanArticle(response.article)}\n\n${humanNavigation(response.navigation)}\n`);
@@ -141,72 +142,174 @@ async function readArticle(runtime, articleId) {
141
142
  throw new CliError("MISSING_ARTICLE_ID", "rubicon read requires an article id.");
142
143
  const maxSpendAtomic = parseBudget(runtime.parsed);
143
144
  const goal = stringFlag(runtime.parsed.flags, "goal");
145
+ const sectionId = sectionFlag(runtime.parsed);
146
+ const stopAfterSection = booleanFlag(runtime.parsed.flags, "stop-after-section");
147
+ const summary = booleanFlag(runtime.parsed.flags, "summary") || booleanFlag(runtime.parsed.flags, "receipt-summary");
148
+ const chunkWords = chunkWordsFlag(runtime.parsed);
149
+ const streamMode = streamModeFlag(runtime.parsed);
144
150
  const maxWordsFlag = stringFlag(runtime.parsed.flags, "max-words");
145
151
  const maxWords = maxWordsFlag === undefined ? undefined : Number(maxWordsFlag);
146
152
  if (maxWords !== undefined && (!Number.isInteger(maxWords) || maxWords < 1)) {
147
153
  throw new CliError("INVALID_MAX_WORDS", "--max-words must be a positive integer.");
148
154
  }
155
+ if (stopAfterSection && !sectionId && !goal) {
156
+ throw new CliError("MISSING_SECTION", "--stop-after-section requires --section/--section-id or --goal.");
157
+ }
158
+ if (sectionId) {
159
+ await validateSection(runtime, articleId, sectionId);
160
+ }
149
161
  if (booleanFlag(runtime.parsed.flags, "dry-run")) {
150
- await dryRun(runtime, articleId, maxSpendAtomic, goal, maxWords);
162
+ await dryRun(runtime, articleId, maxSpendAtomic, goal, maxWords, sectionId, stopAfterSection, chunkWords, streamMode);
151
163
  return;
152
164
  }
153
165
  let finalReceipt = undefined;
166
+ let storedReceipt = undefined;
167
+ let currentSessionId;
168
+ let cancelled = false;
169
+ const abortOnSigint = () => {
170
+ cancelled = true;
171
+ process.exitCode = 130;
172
+ if (!runtime.json) {
173
+ process.stderr.write("\nCancelling read and aborting the active session...\n");
174
+ }
175
+ if (currentSessionId) {
176
+ void runtime.client.abort(currentSessionId, "agent_cancelled").catch(() => { });
177
+ }
178
+ };
179
+ process.once("SIGINT", abortOnSigint);
154
180
  const stream = runtime.client.read({
155
181
  articleId,
156
182
  goal,
183
+ sectionId,
157
184
  maxSpendAtomic,
158
185
  maxWords,
186
+ chunkWords,
187
+ streamMode,
188
+ metadata: stopAfterSection ? { stopAfterSection: true } : undefined,
159
189
  });
160
- for await (const event of stream) {
161
- if (runtime.json) {
162
- printJsonEvent("event", { event });
163
- if (event.type === "article.completed") {
164
- finalReceipt = event.receipt;
190
+ try {
191
+ for await (const event of stream) {
192
+ if (event.type === "session.started") {
193
+ currentSessionId = event.session.sessionId;
165
194
  }
166
- continue;
167
- }
168
- switch (event.type) {
169
- case "seller.message":
170
- process.stdout.write(`Seller: ${event.content}\n\n`);
171
- break;
172
- case "session.started":
173
- process.stdout.write(`Session: ${event.session.sessionId}\n\n`);
174
- break;
175
- case "article.word":
176
- process.stdout.write(`${event.word} `);
177
- break;
178
- case "article.error":
179
- process.stderr.write(`\nError: ${event.message}\n`);
180
- break;
181
- case "article.completed":
182
- finalReceipt = event.receipt;
183
- process.stdout.write(`\n\n${humanReceipt(event.receipt)}\n`);
184
- break;
185
- case "article.usage":
195
+ if (runtime.json && !summary) {
196
+ printJsonEvent("event", { event });
197
+ if (event.type === "article.completed") {
198
+ finalReceipt = event.receipt;
199
+ }
200
+ continue;
201
+ }
202
+ if (runtime.json && summary) {
203
+ if (event.type === "article.completed") {
204
+ finalReceipt = event.receipt;
205
+ }
206
+ continue;
207
+ }
208
+ switch (event.type) {
209
+ case "seller.message":
210
+ if (!summary)
211
+ process.stdout.write(`Seller: ${event.content}\n\n`);
212
+ break;
213
+ case "session.started":
214
+ if (!summary)
215
+ process.stdout.write(`Session: ${event.session.sessionId}\n\n`);
216
+ break;
217
+ case "article.word":
218
+ if (!summary)
219
+ process.stdout.write(`${event.word} `);
220
+ break;
221
+ case "article.bundle":
222
+ case "article.chunk":
223
+ if (!summary)
224
+ process.stdout.write(`${event.words.map((entry) => entry.word).join(" ")} `);
225
+ break;
226
+ case "article.error":
227
+ process.stderr.write(`\nError: ${event.message}\n`);
228
+ break;
229
+ case "article.completed":
230
+ finalReceipt = event.receipt;
231
+ if (!summary) {
232
+ process.stdout.write(`\n\n${humanReceipt(event.receipt)}\n`);
233
+ }
234
+ break;
235
+ case "article.usage":
236
+ break;
237
+ }
238
+ if (cancelled) {
186
239
  break;
240
+ }
187
241
  }
188
242
  }
243
+ finally {
244
+ process.removeListener("SIGINT", abortOnSigint);
245
+ }
189
246
  if (finalReceipt) {
190
- const stored = await saveReceipt(finalReceipt);
247
+ storedReceipt = await saveReceipt(finalReceipt);
248
+ if (runtime.json && !summary) {
249
+ printJson({ type: "receipt.saved", success: true, receiptId: storedReceipt.receiptId, savedAt: storedReceipt.savedAt, receipt: storedReceipt.receipt });
250
+ }
251
+ else if (!runtime.json && !summary) {
252
+ process.stdout.write(`Receipt ID: ${storedReceipt.receiptId}\n`);
253
+ }
254
+ }
255
+ if (summary && finalReceipt) {
191
256
  if (runtime.json) {
192
- printJson({ type: "receipt.saved", success: true, receiptId: stored.receiptId, savedAt: stored.savedAt, receipt: stored.receipt });
257
+ printJson({
258
+ success: true,
259
+ receiptId: storedReceipt?.receiptId,
260
+ savedAt: storedReceipt?.savedAt,
261
+ receipt: readReceiptSummaryJson(finalReceipt),
262
+ });
263
+ }
264
+ else {
265
+ process.stdout.write(`${humanReceiptSummary(finalReceipt, storedReceipt?.receiptId)}\n`);
193
266
  }
194
267
  }
195
268
  }
196
- async function dryRun(runtime, articleId, maxSpendAtomic, goal, maxWords) {
269
+ async function dryRun(runtime, articleId, maxSpendAtomic, goal, maxWords, sectionId, stopAfterSection, chunkWords, streamMode) {
197
270
  const article = await findArticle(runtime, articleId);
271
+ const navigation = goal && !sectionId ? await runtime.client.getNavigation(articleId, goal).catch(() => undefined) : undefined;
272
+ const effectiveSectionId = sectionId ?? navigation?.navigation.sellerAgent.recommendedSectionId;
273
+ const effectiveSection = effectiveSectionId ? findSection(article, effectiveSectionId) : undefined;
274
+ const estimatedWords = Math.min(maxWords ?? Number.MAX_SAFE_INTEGER, effectiveSection?.wordCount ?? article.totalWords);
275
+ const estimatedMaxCostAtomic = BigInt(article.pricePerWordAtomic) * BigInt(estimatedWords);
276
+ const budgetAtomic = BigInt(maxSpendAtomic);
277
+ const networkInfo = settlementNetworkInfo(article.paymentTerms?.network);
278
+ const fundingMethod = article.paymentTerms?.fundingMethod ?? networkInfo.fundingMethod;
279
+ const balanceCheck = {
280
+ checked: false,
281
+ sufficient: undefined,
282
+ reason: "Live Circle Gateway balance is not checked during dry-run.",
283
+ };
284
+ const budgetSufficiency = {
285
+ sufficientForEstimatedMax: budgetAtomic >= estimatedMaxCostAtomic,
286
+ estimatedMaxCostAtomic: `${estimatedMaxCostAtomic}`,
287
+ estimatedMaxCostUsdc: formatAtomic(`${estimatedMaxCostAtomic}`),
288
+ estimatedWords,
289
+ };
198
290
  if (runtime.json) {
199
291
  printJson({
200
292
  success: true,
201
293
  dryRun: true,
202
294
  gatewayUrl: runtime.gatewayUrl,
203
295
  paymentMode: runtime.paymentMode,
296
+ circleChain: article.paymentTerms?.circleChain ?? networkInfo.circleChain ?? runtime.circleChain,
204
297
  budget: {
205
298
  maxSpendAtomic,
206
299
  maxSpendUsdc: formatAtomic(maxSpendAtomic),
207
300
  maxWords,
208
301
  },
209
302
  goal,
303
+ sectionId,
304
+ recommendedSectionId: navigation?.navigation.sellerAgent.recommendedSectionId,
305
+ effectiveSectionId,
306
+ readStartsAt: effectiveSectionId ? `section:${effectiveSectionId}` : "full-article",
307
+ stopAfterSection,
308
+ chunkWords,
309
+ streamMode,
310
+ fundingMethod,
311
+ estimatedMax: budgetSufficiency,
312
+ walletBalance: balanceCheck,
210
313
  article: articleJson(article),
211
314
  });
212
315
  return;
@@ -215,9 +318,22 @@ async function dryRun(runtime, articleId, maxSpendAtomic, goal, maxWords) {
215
318
  "Dry run: no paid read started.",
216
319
  `Gateway: ${runtime.gatewayUrl}`,
217
320
  `Payment mode: ${runtime.paymentMode}`,
321
+ article.paymentTerms?.circleChain ?? networkInfo.circleChain ?? runtime.circleChain
322
+ ? `Circle chain: ${article.paymentTerms?.circleChain ?? networkInfo.circleChain ?? runtime.circleChain}`
323
+ : undefined,
218
324
  `Budget: ${formatAtomic(maxSpendAtomic)} USDC (${maxSpendAtomic} atomic)`,
325
+ `Estimated max for ${effectiveSectionId ? effectiveSectionId : "full article"}: ${formatAtomic(`${estimatedMaxCostAtomic}`)} USDC (${estimatedWords.toLocaleString("en-US")} words)`,
326
+ `Budget covers estimate: ${budgetSufficiency.sufficientForEstimatedMax ? "yes" : "no"}`,
327
+ `Wallet balance check: not checked`,
328
+ fundingMethod ? `Funding: ${fundingMethod}` : undefined,
219
329
  maxWords ? `Max words: ${maxWords}` : undefined,
220
330
  goal ? `Goal: ${goal}` : undefined,
331
+ navigation?.navigation.sellerAgent.recommendedSectionId ? `Recommended section: ${navigation.navigation.sellerAgent.recommendedSectionId}` : undefined,
332
+ `Read starts at: ${effectiveSectionId ? `section ${effectiveSectionId}` : "full article"}`,
333
+ sectionId ? `Section: ${sectionId}` : undefined,
334
+ stopAfterSection ? "Stop after section: yes" : undefined,
335
+ `Stream mode: ${streamMode}`,
336
+ streamMode === "bundled" ? `Bundle words: ${chunkWords ?? 32}` : undefined,
221
337
  "",
222
338
  humanArticle(article),
223
339
  "",
@@ -226,9 +342,11 @@ async function dryRun(runtime, articleId, maxSpendAtomic, goal, maxWords) {
226
342
  .join("\n"));
227
343
  }
228
344
  async function receiptsList(runtime) {
229
- const receipts = await listReceipts();
345
+ const limit = limitFlag(runtime.parsed);
346
+ const receipts = (await listReceipts()).slice(0, limit);
347
+ const summary = booleanFlag(runtime.parsed.flags, "summary") || booleanFlag(runtime.parsed.flags, "receipt-summary");
230
348
  if (runtime.json) {
231
- printJson({ success: true, receipts });
349
+ printJson({ success: true, receipts: summary ? receipts.map(receiptSummaryJson) : receipts });
232
350
  return;
233
351
  }
234
352
  if (receipts.length === 0) {
@@ -243,8 +361,13 @@ async function receiptsShow(runtime, receiptId) {
243
361
  if (!receiptId)
244
362
  throw new CliError("MISSING_RECEIPT_ID", "rubicon receipts show requires a receipt id.");
245
363
  const stored = await loadReceipt(receiptId);
364
+ const summary = booleanFlag(runtime.parsed.flags, "summary") || booleanFlag(runtime.parsed.flags, "receipt-summary");
246
365
  if (runtime.json) {
247
- printJson({ success: true, ...stored });
366
+ printJson({ success: true, ...(summary ? receiptSummaryJson(stored) : stored) });
367
+ return;
368
+ }
369
+ if (summary) {
370
+ process.stdout.write(`${humanReceiptSummary(stored.receipt, stored.receiptId)}\n`);
248
371
  return;
249
372
  }
250
373
  process.stdout.write(`Receipt ID: ${stored.receiptId}\nSaved: ${stored.savedAt}\n${humanReceipt(stored.receipt)}\n`);
@@ -261,6 +384,7 @@ async function configShow(runtime) {
261
384
  gatewayUrl: runtime.gatewayUrl,
262
385
  apiKey: runtime.apiKey ? "set" : undefined,
263
386
  paymentMode: runtime.paymentMode,
387
+ circleChain: runtime.circleChain,
264
388
  },
265
389
  };
266
390
  if (runtime.json) {
@@ -335,6 +459,63 @@ function parseBudget(parsed) {
335
459
  throw new CliError("INVALID_BUDGET", "--max-usdc must be a decimal USDC amount.");
336
460
  }
337
461
  }
462
+ function sectionFlag(parsed) {
463
+ const section = stringFlag(parsed.flags, "section");
464
+ const sectionId = stringFlag(parsed.flags, "section-id");
465
+ if (section && sectionId && section !== sectionId) {
466
+ throw new CliError("MULTIPLE_SECTIONS", "Use either --section or --section-id, not both.");
467
+ }
468
+ return section ?? sectionId;
469
+ }
470
+ function limitFlag(parsed) {
471
+ const rawLimit = stringFlag(parsed.flags, "limit");
472
+ if (rawLimit === undefined)
473
+ return undefined;
474
+ const limit = Number(rawLimit);
475
+ if (!Number.isInteger(limit) || limit < 1) {
476
+ throw new CliError("INVALID_LIMIT", "--limit must be a positive integer.");
477
+ }
478
+ return limit;
479
+ }
480
+ function chunkWordsFlag(parsed) {
481
+ const fast = booleanFlag(parsed.flags, "fast");
482
+ const mode = stringFlag(parsed.flags, "mode");
483
+ if (mode !== undefined && mode !== "batch" && mode !== "word") {
484
+ throw new CliError("INVALID_READ_MODE", "--mode must be batch or word.");
485
+ }
486
+ const rawChunkWords = stringFlag(parsed.flags, "chunk-words");
487
+ if (rawChunkWords === undefined)
488
+ return fast || mode === "batch" ? 32 : undefined;
489
+ const chunkWords = Number(rawChunkWords);
490
+ if (!Number.isInteger(chunkWords) || chunkWords < 1) {
491
+ throw new CliError("INVALID_CHUNK_WORDS", "--chunk-words must be a positive integer.");
492
+ }
493
+ return Math.min(chunkWords, 256);
494
+ }
495
+ function streamModeFlag(parsed) {
496
+ const streamMode = stringFlag(parsed.flags, "stream-mode");
497
+ const legacyMode = stringFlag(parsed.flags, "mode");
498
+ const perWord = booleanFlag(parsed.flags, "per-word");
499
+ if (streamMode !== undefined && streamMode !== "bundled" && streamMode !== "word") {
500
+ throw new CliError("INVALID_STREAM_MODE", "--stream-mode must be bundled or word.");
501
+ }
502
+ if (perWord && streamMode === "bundled") {
503
+ throw new CliError("INVALID_STREAM_MODE", "--per-word cannot be combined with --stream-mode bundled.");
504
+ }
505
+ if ((perWord || legacyMode === "word" || streamMode === "word") && stringFlag(parsed.flags, "chunk-words") !== undefined) {
506
+ throw new CliError("INVALID_STREAM_MODE", "Per-word mode cannot be combined with --chunk-words.");
507
+ }
508
+ return perWord || legacyMode === "word" ? "word" : streamMode ?? "bundled";
509
+ }
510
+ function findSection(article, sectionId) {
511
+ return article.sections.find((section) => section.sectionId === sectionId);
512
+ }
513
+ async function validateSection(runtime, articleId, sectionId) {
514
+ const article = await findArticle(runtime, articleId);
515
+ if (!article.sections.some((section) => section.sectionId === sectionId)) {
516
+ throw new CliError("SECTION_NOT_FOUND", `Section not found for ${articleId}: ${sectionId}`);
517
+ }
518
+ }
338
519
  function matchesQuery(article, query) {
339
520
  const haystack = [
340
521
  article.articleId,
@@ -358,9 +539,9 @@ function showHelp(json) {
358
539
  "rubicon search \"<query>\"",
359
540
  "rubicon article show <article-id>",
360
541
  "rubicon article navigation <article-id> --goal \"<goal>\"",
361
- "rubicon read <article-id> --max-usdc 0.10 [--goal \"...\"] [--max-words 50] [--dry-run]",
362
- "rubicon receipts list",
363
- "rubicon receipts show <receipt-id>",
542
+ "rubicon read <article-id> --max-usdc 0.10 [--goal \"...\"] [--section <section-id>] [--stop-after-section] [--stream-mode bundled|word] [--chunk-words 32] [--per-word] [--max-words 50] [--summary] [--dry-run]",
543
+ "rubicon receipts list [--limit 10] [--summary]",
544
+ "rubicon receipts show <receipt-id> [--summary]",
364
545
  "rubicon config show",
365
546
  "rubicon config set gateway-url <url>",
366
547
  "rubicon config set api-key <key>",
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ export type PaymentMode = "static" | "circle-cli";
4
4
  export interface PaymentSelection {
5
5
  mode: PaymentMode;
6
6
  engine: AgentPaymentEngine;
7
+ circleChain?: string;
7
8
  }
8
9
  export declare function selectPaymentEngine(input: {
9
10
  requestedMode?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"payments.d.ts","sourceRoot":"","sources":["../src/payments.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAsB,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGxE,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,YAAY,CAAC;AAElD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,kBAAkB,CAAC;CAC5B;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,gBAAgB,CAAC;CAC1B,GAAG,gBAAgB,CAenB"}
1
+ {"version":3,"file":"payments.d.ts","sourceRoot":"","sources":["../src/payments.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAsB,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGxE,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,YAAY,CAAC;AAElD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,gBAAgB,CAAC;CAC1B,GAAG,gBAAgB,CAiBnB"}
package/dist/payments.js CHANGED
@@ -7,12 +7,14 @@ export function selectPaymentEngine(input) {
7
7
  if (selectedMode === "static") {
8
8
  return { mode: selectedMode, engine: new StaticPaymentEngine() };
9
9
  }
10
+ const circleChain = process.env.CIRCLE_CLI_CHAIN ?? input.config.circleChain ?? "ARC-TESTNET";
10
11
  return {
11
12
  mode: selectedMode,
12
13
  engine: new CircleCliGatewayPaymentEngine({
13
14
  agentWalletAddress: envAddress("CIRCLE_AGENT_WALLET_ADDRESS") ?? input.config.agentWalletAddress,
14
- chain: process.env.CIRCLE_CLI_CHAIN ?? input.config.circleChain ?? "ARC-TESTNET",
15
+ chain: circleChain,
15
16
  }),
17
+ circleChain,
16
18
  };
17
19
  }
18
20
  function normalizeMode(value) {
@@ -1 +1 @@
1
- {"version":3,"file":"payments.js","sourceRoot":"","sources":["../src/payments.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,6BAA6B,EAC7B,mBAAmB,GAEpB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAyB,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AASvC,MAAM,UAAU,mBAAmB,CAAC,KAInC;IACC,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAChH,MAAM,YAAY,GAAG,IAAI,IAAI,kBAAkB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAElE,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,mBAAmB,EAAE,EAAE,CAAC;IACnE,CAAC;IAED,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,IAAI,6BAA6B,CAAC;YACxC,kBAAkB,EAAE,UAAU,CAAC,6BAA6B,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,kBAAkB;YAChG,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,KAAK,CAAC,MAAM,CAAC,WAAW,IAAI,aAAa;SACjF,CAAC;KACH,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,KAAyB;IAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,GAAG;YAAE,OAAO,YAAY,CAAC;QAChE,IAAI,OAAO,CAAC,GAAG,CAAC,2BAA2B;YAAE,OAAO,YAAY,CAAC;QACjE,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,YAAY;QAAE,OAAO,KAAK,CAAC;IAC/D,MAAM,IAAI,QAAQ,CAAC,sBAAsB,EAAE,4CAA4C,CAAC,CAAC;AAC3F,CAAC;AAED,SAAS,kBAAkB,CAAC,UAAkB;IAC5C,IAAI,cAAc,CAAC,UAAU,CAAC;QAAE,OAAO,QAAQ,CAAC;IAChD,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,2BAA2B;QAAE,OAAO,YAAY,CAAC;IAC3G,IAAI,UAAU,KAAK,kBAAkB;QAAE,OAAO,YAAY,CAAC;IAC3D,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,cAAc,CAAC,UAAkB;IACxC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;QAChC,OAAO,GAAG,CAAC,QAAQ,KAAK,WAAW,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW,IAAI,GAAG,CAAC,QAAQ,KAAK,KAAK,CAAC;IAChG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,KAAuB,CAAC,CAAC,CAAC,SAAS,CAAC;AACxE,CAAC"}
1
+ {"version":3,"file":"payments.js","sourceRoot":"","sources":["../src/payments.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,6BAA6B,EAC7B,mBAAmB,GAEpB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAyB,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAUvC,MAAM,UAAU,mBAAmB,CAAC,KAInC;IACC,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAChH,MAAM,YAAY,GAAG,IAAI,IAAI,kBAAkB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAElE,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,mBAAmB,EAAE,EAAE,CAAC;IACnE,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,KAAK,CAAC,MAAM,CAAC,WAAW,IAAI,aAAa,CAAC;IAC9F,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,IAAI,6BAA6B,CAAC;YACxC,kBAAkB,EAAE,UAAU,CAAC,6BAA6B,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,kBAAkB;YAChG,KAAK,EAAE,WAAW;SACnB,CAAC;QACF,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,KAAyB;IAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,GAAG;YAAE,OAAO,YAAY,CAAC;QAChE,IAAI,OAAO,CAAC,GAAG,CAAC,2BAA2B;YAAE,OAAO,YAAY,CAAC;QACjE,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,YAAY;QAAE,OAAO,KAAK,CAAC;IAC/D,MAAM,IAAI,QAAQ,CAAC,sBAAsB,EAAE,4CAA4C,CAAC,CAAC;AAC3F,CAAC;AAED,SAAS,kBAAkB,CAAC,UAAkB;IAC5C,IAAI,cAAc,CAAC,UAAU,CAAC;QAAE,OAAO,QAAQ,CAAC;IAChD,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,2BAA2B;QAAE,OAAO,YAAY,CAAC;IAC3G,IAAI,UAAU,KAAK,kBAAkB;QAAE,OAAO,YAAY,CAAC;IAC3D,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,cAAc,CAAC,UAAkB;IACxC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;QAChC,OAAO,GAAG,CAAC,QAAQ,KAAK,WAAW,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW,IAAI,GAAG,CAAC,QAAQ,KAAK,KAAK,CAAC;IAChG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,KAAuB,CAAC,CAAC,CAAC,SAAS,CAAC;AACxE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rubicon-caliga/cli",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Terminal-native Rubicon CLI for buyer agents consuming pay-per-word articles.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -28,8 +28,8 @@
28
28
  "access": "public"
29
29
  },
30
30
  "dependencies": {
31
- "@rubicon-caliga/agent-sdk": "0.1.2",
32
- "@rubicon-caliga/core": "0.1.0"
31
+ "@rubicon-caliga/agent-sdk": "0.1.4",
32
+ "@rubicon-caliga/core": "0.1.2"
33
33
  },
34
34
  "devDependencies": {
35
35
  "@types/node": "^22.10.2",
package/src/format.ts CHANGED
@@ -1,6 +1,7 @@
1
- import { formatAtomicUsdc } from "@rubicon-caliga/core";
1
+ import { formatAtomicUsdc, settlementNetworkInfo } from "@rubicon-caliga/core";
2
2
  import type { ArticleSummary, ArticleNavigation, SellerPaymentTerms } from "@rubicon-caliga/core";
3
3
  import type { ReadReceipt } from "@rubicon-caliga/agent-sdk";
4
+ import type { StoredReceipt } from "./receipts.js";
4
5
 
5
6
  export function printJson(value: unknown): void {
6
7
  process.stdout.write(`${JSON.stringify(value)}\n`);
@@ -11,6 +12,7 @@ export function printJsonEvent(type: string, value: unknown): void {
11
12
  }
12
13
 
13
14
  export function articleJson(article: ArticleSummary): Record<string, unknown> {
15
+ const paymentTerms = article.paymentTerms ? enrichedPaymentTerms(article.paymentTerms) : undefined;
14
16
  return {
15
17
  articleId: article.articleId,
16
18
  title: article.title,
@@ -21,7 +23,7 @@ export function articleJson(article: ArticleSummary): Record<string, unknown> {
21
23
  totalWords: article.totalWords,
22
24
  pricePerWordAtomic: article.pricePerWordAtomic,
23
25
  maxArticlePriceAtomic: article.maxArticlePriceAtomic,
24
- paymentTerms: article.paymentTerms,
26
+ paymentTerms,
25
27
  sections: article.sections,
26
28
  };
27
29
  }
@@ -49,21 +51,27 @@ export function humanArticle(article: ArticleSummary): string {
49
51
  }
50
52
 
51
53
  export function humanPaymentTerms(terms: SellerPaymentTerms): string[] {
54
+ const enriched = enrichedPaymentTerms(terms);
52
55
  return [
53
56
  "Payment terms:",
54
- `- Asset: ${terms.asset}`,
55
- `- Network: ${terms.networkLabel ?? terms.network}`,
57
+ `- Asset: ${enriched.asset}`,
58
+ `- Network: ${enriched.networkLabel ?? enriched.network}`,
59
+ enriched.circleChain ? `- Circle chain: ${enriched.circleChain}` : undefined,
60
+ enriched.environment ? `- Environment: ${enriched.environment}` : undefined,
61
+ enriched.fundingMethod ? `- Funding: ${enriched.fundingMethod}` : undefined,
56
62
  `- Pay to: ${terms.payTo}`,
57
63
  `- Price/word: ${formatAtomic(terms.pricePerWordAtomic)} USDC`,
58
- ];
64
+ ].filter((line): line is string => line !== undefined);
59
65
  }
60
66
 
61
67
  export function humanNavigation(navigation: ArticleNavigation): string {
62
68
  const seller = navigation.sellerAgent;
69
+ const recommendedReadCommand = recommendedReadCommandFor(navigation.articleId, seller.recommendedSectionId);
63
70
  const lines = [
64
71
  `Recommended section: ${seller.recommendedSectionId}`,
65
72
  `Alternatives: ${seller.alternativeSectionIds.length ? seller.alternativeSectionIds.join(", ") : "none"}`,
66
73
  `Rationale: ${seller.rationale}`,
74
+ `Recommended read: ${recommendedReadCommand}`,
67
75
  ];
68
76
  if (seller.safeHints.length > 0) {
69
77
  lines.push("", "Safe hints:", ...seller.safeHints.map((hint) => `- ${hint}`));
@@ -81,6 +89,7 @@ export function humanNavigation(navigation: ArticleNavigation): string {
81
89
  }
82
90
 
83
91
  export function humanReceipt(receipt: ReadReceipt): string {
92
+ const networkInfo = settlementNetworkInfo(receipt.network);
84
93
  const lines = [
85
94
  "Receipt:",
86
95
  `- Session: ${receipt.sessionId}`,
@@ -102,15 +111,87 @@ export function humanReceipt(receipt: ReadReceipt): string {
102
111
  lines.push(`- Seller pay to: ${receipt.sellerPayTo}`);
103
112
  }
104
113
  if (receipt.network) {
105
- lines.push(`- Network: ${receipt.network}`);
114
+ lines.push(`- Network: ${networkInfo.networkLabel} (${receipt.network})`);
115
+ }
116
+ if (networkInfo.circleChain) {
117
+ lines.push(`- Circle chain: ${networkInfo.circleChain}`);
118
+ }
119
+ if (receipt.buyerWalletAddress && networkInfo.buyerWalletExplanation) {
120
+ lines.push(`- Buyer wallet note: ${networkInfo.buyerWalletExplanation}`);
106
121
  }
107
122
  return lines.join("\n");
108
123
  }
109
124
 
125
+ export function receiptSummaryJson(stored: StoredReceipt): Record<string, unknown> {
126
+ return {
127
+ receiptId: stored.receiptId,
128
+ savedAt: stored.savedAt,
129
+ ...readReceiptSummaryJson(stored.receipt),
130
+ };
131
+ }
132
+
133
+ export function readReceiptSummaryJson(receipt: ReadReceipt): Record<string, unknown> {
134
+ const networkInfo = settlementNetworkInfo(receipt.network);
135
+ return {
136
+ articleId: receipt.articleId,
137
+ sessionId: receipt.sessionId,
138
+ wordsRead: receipt.wordsRead,
139
+ amountPaidAtomic: receipt.amountPaidAtomic,
140
+ amountPaidUsdc: formatAtomic(receipt.amountPaidAtomic),
141
+ stopReason: receipt.stopReason,
142
+ completed: receipt.completed,
143
+ buyerWalletAddress: receipt.buyerWalletAddress,
144
+ sellerPayTo: receipt.sellerPayTo,
145
+ network: receipt.network,
146
+ circleChain: networkInfo.circleChain,
147
+ buyerWalletExplanation: receipt.buyerWalletAddress ? networkInfo.buyerWalletExplanation : undefined,
148
+ settlementIds: receipt.settlementIds,
149
+ transactionHashes: receipt.transactionHashes,
150
+ text: receipt.text,
151
+ };
152
+ }
153
+
154
+ export function humanReceiptSummary(receipt: ReadReceipt, receiptId?: string): string {
155
+ const networkInfo = settlementNetworkInfo(receipt.network);
156
+ const lines = [
157
+ "Summary:",
158
+ receiptId ? `- Receipt ID: ${receiptId}` : undefined,
159
+ `- Article: ${receipt.articleId}`,
160
+ `- Words read: ${receipt.wordsRead.toLocaleString("en-US")}`,
161
+ `- Amount paid: ${formatAtomic(receipt.amountPaidAtomic)} USDC`,
162
+ `- Stop reason: ${receipt.stopReason}`,
163
+ receipt.buyerWalletAddress ? `- Buyer wallet: ${receipt.buyerWalletAddress}` : undefined,
164
+ receipt.sellerPayTo ? `- Seller pay to: ${receipt.sellerPayTo}` : undefined,
165
+ receipt.network ? `- Network: ${networkInfo.networkLabel} (${receipt.network})` : undefined,
166
+ networkInfo.circleChain ? `- Circle chain: ${networkInfo.circleChain}` : undefined,
167
+ receipt.buyerWalletAddress && networkInfo.buyerWalletExplanation
168
+ ? `- Buyer wallet note: ${networkInfo.buyerWalletExplanation}`
169
+ : undefined,
170
+ "",
171
+ receipt.text,
172
+ ];
173
+ return lines.filter((line): line is string => line !== undefined).join("\n");
174
+ }
175
+
110
176
  export function formatAtomic(value: string | bigint): string {
111
177
  return formatAtomicUsdc(typeof value === "bigint" ? value : BigInt(value));
112
178
  }
113
179
 
180
+ export function recommendedReadCommandFor(articleId: string, sectionId: string): string {
181
+ return `rubicon read ${articleId} --section ${sectionId} --stop-after-section --max-usdc <amount>`;
182
+ }
183
+
184
+ function enrichedPaymentTerms(terms: SellerPaymentTerms): SellerPaymentTerms {
185
+ const networkInfo = settlementNetworkInfo(terms.network);
186
+ return {
187
+ ...terms,
188
+ networkLabel: terms.networkLabel ?? networkInfo.networkLabel,
189
+ circleChain: terms.circleChain ?? networkInfo.circleChain,
190
+ environment: terms.environment ?? networkInfo.environment,
191
+ fundingMethod: terms.fundingMethod ?? networkInfo.fundingMethod,
192
+ };
193
+ }
194
+
114
195
  function asRecord(value: unknown): Record<string, unknown> {
115
196
  return typeof value === "object" && value !== null ? (value as Record<string, unknown>) : { value };
116
197
  }
package/src/index.ts CHANGED
@@ -2,7 +2,7 @@
2
2
  import { mkdir } from "node:fs/promises";
3
3
  import { dirname } from "node:path";
4
4
  import { RubiconClient } from "@rubicon-caliga/agent-sdk";
5
- import { parseUsdcToAtomic, type ArticleSummary } from "@rubicon-caliga/core";
5
+ import { parseUsdcToAtomic, settlementNetworkInfo, type ArticleSectionSummary, type ArticleSummary, type StreamMode } from "@rubicon-caliga/core";
6
6
  import { parseArgs, booleanFlag, stringFlag, type ParsedArgs } from "./args.js";
7
7
  import { configPath, HOSTED_GATEWAY_URL, readConfig, writeConfig, type RubiconCliConfig } from "./config.js";
8
8
  import { CliError, toCliError } from "./errors.js";
@@ -12,8 +12,12 @@ import {
12
12
  humanArticle,
13
13
  humanNavigation,
14
14
  humanReceipt,
15
+ humanReceiptSummary,
15
16
  printJson,
16
17
  printJsonEvent,
18
+ readReceiptSummaryJson,
19
+ recommendedReadCommandFor,
20
+ receiptSummaryJson,
17
21
  } from "./format.js";
18
22
  import { selectPaymentEngine, type PaymentMode } from "./payments.js";
19
23
  import { listReceipts, loadReceipt, saveReceipt } from "./receipts.js";
@@ -25,6 +29,7 @@ interface Runtime {
25
29
  gatewayUrl: string;
26
30
  apiKey?: string;
27
31
  paymentMode: PaymentMode;
32
+ circleChain?: string;
28
33
  client: RubiconClient;
29
34
  }
30
35
 
@@ -50,7 +55,7 @@ async function main(): Promise<void> {
50
55
  authorization: apiKey ? `Bearer ${apiKey}` : undefined,
51
56
  paymentEngine: payment.engine,
52
57
  });
53
- await dispatch({ parsed, json, config, gatewayUrl, apiKey, paymentMode: payment.mode, client });
58
+ await dispatch({ parsed, json, config, gatewayUrl, apiKey, paymentMode: payment.mode, circleChain: payment.circleChain, client });
54
59
  } catch (error) {
55
60
  const cliError = toCliError(error);
56
61
  if (json) {
@@ -156,8 +161,12 @@ async function articleNavigation(runtime: Runtime, articleId: string | undefined
156
161
  const goal = stringFlag(runtime.parsed.flags, "goal");
157
162
  if (!goal) throw new CliError("MISSING_GOAL", "rubicon article navigation requires --goal.");
158
163
  const response = await runtime.client.getNavigation(articleId, goal);
164
+ const recommendedReadCommand = recommendedReadCommandFor(
165
+ response.article.articleId,
166
+ response.navigation.sellerAgent.recommendedSectionId,
167
+ );
159
168
  if (runtime.json) {
160
- printJson({ success: true, article: articleJson(response.article), navigation: response.navigation });
169
+ printJson({ success: true, article: articleJson(response.article), navigation: response.navigation, recommendedReadCommand });
161
170
  return;
162
171
  }
163
172
  process.stdout.write(`${humanArticle(response.article)}\n\n${humanNavigation(response.navigation)}\n`);
@@ -167,60 +176,129 @@ async function readArticle(runtime: Runtime, articleId: string | undefined): Pro
167
176
  if (!articleId) throw new CliError("MISSING_ARTICLE_ID", "rubicon read requires an article id.");
168
177
  const maxSpendAtomic = parseBudget(runtime.parsed);
169
178
  const goal = stringFlag(runtime.parsed.flags, "goal");
179
+ const sectionId = sectionFlag(runtime.parsed);
180
+ const stopAfterSection = booleanFlag(runtime.parsed.flags, "stop-after-section");
181
+ const summary = booleanFlag(runtime.parsed.flags, "summary") || booleanFlag(runtime.parsed.flags, "receipt-summary");
182
+ const chunkWords = chunkWordsFlag(runtime.parsed);
183
+ const streamMode = streamModeFlag(runtime.parsed);
170
184
  const maxWordsFlag = stringFlag(runtime.parsed.flags, "max-words");
171
185
  const maxWords = maxWordsFlag === undefined ? undefined : Number(maxWordsFlag);
172
186
  if (maxWords !== undefined && (!Number.isInteger(maxWords) || maxWords < 1)) {
173
187
  throw new CliError("INVALID_MAX_WORDS", "--max-words must be a positive integer.");
174
188
  }
189
+ if (stopAfterSection && !sectionId && !goal) {
190
+ throw new CliError("MISSING_SECTION", "--stop-after-section requires --section/--section-id or --goal.");
191
+ }
192
+ if (sectionId) {
193
+ await validateSection(runtime, articleId, sectionId);
194
+ }
175
195
 
176
196
  if (booleanFlag(runtime.parsed.flags, "dry-run")) {
177
- await dryRun(runtime, articleId, maxSpendAtomic, goal, maxWords);
197
+ await dryRun(runtime, articleId, maxSpendAtomic, goal, maxWords, sectionId, stopAfterSection, chunkWords, streamMode);
178
198
  return;
179
199
  }
180
200
 
181
201
  let finalReceipt = undefined;
202
+ let storedReceipt = undefined;
203
+ let currentSessionId: string | undefined;
204
+ let cancelled = false;
205
+ const abortOnSigint = (): void => {
206
+ cancelled = true;
207
+ process.exitCode = 130;
208
+ if (!runtime.json) {
209
+ process.stderr.write("\nCancelling read and aborting the active session...\n");
210
+ }
211
+ if (currentSessionId) {
212
+ void runtime.client.abort(currentSessionId, "agent_cancelled").catch(() => {});
213
+ }
214
+ };
215
+ process.once("SIGINT", abortOnSigint);
216
+
182
217
  const stream = runtime.client.read({
183
218
  articleId,
184
219
  goal,
220
+ sectionId,
185
221
  maxSpendAtomic,
186
222
  maxWords,
223
+ chunkWords,
224
+ streamMode,
225
+ metadata: stopAfterSection ? { stopAfterSection: true } : undefined,
187
226
  });
188
227
 
189
- for await (const event of stream) {
190
- if (runtime.json) {
191
- printJsonEvent("event", { event });
192
- if (event.type === "article.completed") {
193
- finalReceipt = event.receipt;
228
+ try {
229
+ for await (const event of stream) {
230
+ if (event.type === "session.started") {
231
+ currentSessionId = event.session.sessionId;
232
+ }
233
+ if (runtime.json && !summary) {
234
+ printJsonEvent("event", { event });
235
+ if (event.type === "article.completed") {
236
+ finalReceipt = event.receipt;
237
+ }
238
+ continue;
194
239
  }
195
- continue;
196
- }
197
240
 
198
- switch (event.type) {
199
- case "seller.message":
200
- process.stdout.write(`Seller: ${event.content}\n\n`);
201
- break;
202
- case "session.started":
203
- process.stdout.write(`Session: ${event.session.sessionId}\n\n`);
204
- break;
205
- case "article.word":
206
- process.stdout.write(`${event.word} `);
207
- break;
208
- case "article.error":
209
- process.stderr.write(`\nError: ${event.message}\n`);
210
- break;
211
- case "article.completed":
212
- finalReceipt = event.receipt;
213
- process.stdout.write(`\n\n${humanReceipt(event.receipt)}\n`);
214
- break;
215
- case "article.usage":
241
+ if (runtime.json && summary) {
242
+ if (event.type === "article.completed") {
243
+ finalReceipt = event.receipt;
244
+ }
245
+ continue;
246
+ }
247
+
248
+ switch (event.type) {
249
+ case "seller.message":
250
+ if (!summary) process.stdout.write(`Seller: ${event.content}\n\n`);
251
+ break;
252
+ case "session.started":
253
+ if (!summary) process.stdout.write(`Session: ${event.session.sessionId}\n\n`);
254
+ break;
255
+ case "article.word":
256
+ if (!summary) process.stdout.write(`${event.word} `);
257
+ break;
258
+ case "article.bundle":
259
+ case "article.chunk":
260
+ if (!summary) process.stdout.write(`${event.words.map((entry) => entry.word).join(" ")} `);
261
+ break;
262
+ case "article.error":
263
+ process.stderr.write(`\nError: ${event.message}\n`);
264
+ break;
265
+ case "article.completed":
266
+ finalReceipt = event.receipt;
267
+ if (!summary) {
268
+ process.stdout.write(`\n\n${humanReceipt(event.receipt)}\n`);
269
+ }
270
+ break;
271
+ case "article.usage":
272
+ break;
273
+ }
274
+
275
+ if (cancelled) {
216
276
  break;
277
+ }
217
278
  }
279
+ } finally {
280
+ process.removeListener("SIGINT", abortOnSigint);
218
281
  }
219
282
 
220
283
  if (finalReceipt) {
221
- const stored = await saveReceipt(finalReceipt);
284
+ storedReceipt = await saveReceipt(finalReceipt);
285
+ if (runtime.json && !summary) {
286
+ printJson({ type: "receipt.saved", success: true, receiptId: storedReceipt.receiptId, savedAt: storedReceipt.savedAt, receipt: storedReceipt.receipt });
287
+ } else if (!runtime.json && !summary) {
288
+ process.stdout.write(`Receipt ID: ${storedReceipt.receiptId}\n`);
289
+ }
290
+ }
291
+
292
+ if (summary && finalReceipt) {
222
293
  if (runtime.json) {
223
- printJson({ type: "receipt.saved", success: true, receiptId: stored.receiptId, savedAt: stored.savedAt, receipt: stored.receipt });
294
+ printJson({
295
+ success: true,
296
+ receiptId: storedReceipt?.receiptId,
297
+ savedAt: storedReceipt?.savedAt,
298
+ receipt: readReceiptSummaryJson(finalReceipt),
299
+ });
300
+ } else {
301
+ process.stdout.write(`${humanReceiptSummary(finalReceipt, storedReceipt?.receiptId)}\n`);
224
302
  }
225
303
  }
226
304
  }
@@ -231,20 +309,54 @@ async function dryRun(
231
309
  maxSpendAtomic: `${bigint}`,
232
310
  goal: string | undefined,
233
311
  maxWords: number | undefined,
312
+ sectionId: string | undefined,
313
+ stopAfterSection: boolean,
314
+ chunkWords: number | undefined,
315
+ streamMode: StreamMode,
234
316
  ): Promise<void> {
235
317
  const article = await findArticle(runtime, articleId);
318
+ const navigation = goal && !sectionId ? await runtime.client.getNavigation(articleId, goal).catch(() => undefined) : undefined;
319
+ const effectiveSectionId = sectionId ?? navigation?.navigation.sellerAgent.recommendedSectionId;
320
+ const effectiveSection = effectiveSectionId ? findSection(article, effectiveSectionId) : undefined;
321
+ const estimatedWords = Math.min(maxWords ?? Number.MAX_SAFE_INTEGER, effectiveSection?.wordCount ?? article.totalWords);
322
+ const estimatedMaxCostAtomic = BigInt(article.pricePerWordAtomic) * BigInt(estimatedWords);
323
+ const budgetAtomic = BigInt(maxSpendAtomic);
324
+ const networkInfo = settlementNetworkInfo(article.paymentTerms?.network);
325
+ const fundingMethod = article.paymentTerms?.fundingMethod ?? networkInfo.fundingMethod;
326
+ const balanceCheck = {
327
+ checked: false,
328
+ sufficient: undefined,
329
+ reason: "Live Circle Gateway balance is not checked during dry-run.",
330
+ };
331
+ const budgetSufficiency = {
332
+ sufficientForEstimatedMax: budgetAtomic >= estimatedMaxCostAtomic,
333
+ estimatedMaxCostAtomic: `${estimatedMaxCostAtomic}`,
334
+ estimatedMaxCostUsdc: formatAtomic(`${estimatedMaxCostAtomic}`),
335
+ estimatedWords,
336
+ };
236
337
  if (runtime.json) {
237
338
  printJson({
238
339
  success: true,
239
340
  dryRun: true,
240
341
  gatewayUrl: runtime.gatewayUrl,
241
342
  paymentMode: runtime.paymentMode,
343
+ circleChain: article.paymentTerms?.circleChain ?? networkInfo.circleChain ?? runtime.circleChain,
242
344
  budget: {
243
345
  maxSpendAtomic,
244
346
  maxSpendUsdc: formatAtomic(maxSpendAtomic),
245
347
  maxWords,
246
348
  },
247
349
  goal,
350
+ sectionId,
351
+ recommendedSectionId: navigation?.navigation.sellerAgent.recommendedSectionId,
352
+ effectiveSectionId,
353
+ readStartsAt: effectiveSectionId ? `section:${effectiveSectionId}` : "full-article",
354
+ stopAfterSection,
355
+ chunkWords,
356
+ streamMode,
357
+ fundingMethod,
358
+ estimatedMax: budgetSufficiency,
359
+ walletBalance: balanceCheck,
248
360
  article: articleJson(article),
249
361
  });
250
362
  return;
@@ -255,9 +367,22 @@ async function dryRun(
255
367
  "Dry run: no paid read started.",
256
368
  `Gateway: ${runtime.gatewayUrl}`,
257
369
  `Payment mode: ${runtime.paymentMode}`,
370
+ article.paymentTerms?.circleChain ?? networkInfo.circleChain ?? runtime.circleChain
371
+ ? `Circle chain: ${article.paymentTerms?.circleChain ?? networkInfo.circleChain ?? runtime.circleChain}`
372
+ : undefined,
258
373
  `Budget: ${formatAtomic(maxSpendAtomic)} USDC (${maxSpendAtomic} atomic)`,
374
+ `Estimated max for ${effectiveSectionId ? effectiveSectionId : "full article"}: ${formatAtomic(`${estimatedMaxCostAtomic}`)} USDC (${estimatedWords.toLocaleString("en-US")} words)`,
375
+ `Budget covers estimate: ${budgetSufficiency.sufficientForEstimatedMax ? "yes" : "no"}`,
376
+ `Wallet balance check: not checked`,
377
+ fundingMethod ? `Funding: ${fundingMethod}` : undefined,
259
378
  maxWords ? `Max words: ${maxWords}` : undefined,
260
379
  goal ? `Goal: ${goal}` : undefined,
380
+ navigation?.navigation.sellerAgent.recommendedSectionId ? `Recommended section: ${navigation.navigation.sellerAgent.recommendedSectionId}` : undefined,
381
+ `Read starts at: ${effectiveSectionId ? `section ${effectiveSectionId}` : "full article"}`,
382
+ sectionId ? `Section: ${sectionId}` : undefined,
383
+ stopAfterSection ? "Stop after section: yes" : undefined,
384
+ `Stream mode: ${streamMode}`,
385
+ streamMode === "bundled" ? `Bundle words: ${chunkWords ?? 32}` : undefined,
261
386
  "",
262
387
  humanArticle(article),
263
388
  "",
@@ -268,9 +393,11 @@ async function dryRun(
268
393
  }
269
394
 
270
395
  async function receiptsList(runtime: Runtime): Promise<void> {
271
- const receipts = await listReceipts();
396
+ const limit = limitFlag(runtime.parsed);
397
+ const receipts = (await listReceipts()).slice(0, limit);
398
+ const summary = booleanFlag(runtime.parsed.flags, "summary") || booleanFlag(runtime.parsed.flags, "receipt-summary");
272
399
  if (runtime.json) {
273
- printJson({ success: true, receipts });
400
+ printJson({ success: true, receipts: summary ? receipts.map(receiptSummaryJson) : receipts });
274
401
  return;
275
402
  }
276
403
  if (receipts.length === 0) {
@@ -290,8 +417,13 @@ async function receiptsList(runtime: Runtime): Promise<void> {
290
417
  async function receiptsShow(runtime: Runtime, receiptId: string | undefined): Promise<void> {
291
418
  if (!receiptId) throw new CliError("MISSING_RECEIPT_ID", "rubicon receipts show requires a receipt id.");
292
419
  const stored = await loadReceipt(receiptId);
420
+ const summary = booleanFlag(runtime.parsed.flags, "summary") || booleanFlag(runtime.parsed.flags, "receipt-summary");
293
421
  if (runtime.json) {
294
- printJson({ success: true, ...stored });
422
+ printJson({ success: true, ...(summary ? receiptSummaryJson(stored) : stored) });
423
+ return;
424
+ }
425
+ if (summary) {
426
+ process.stdout.write(`${humanReceiptSummary(stored.receipt, stored.receiptId)}\n`);
295
427
  return;
296
428
  }
297
429
  process.stdout.write(`Receipt ID: ${stored.receiptId}\nSaved: ${stored.savedAt}\n${humanReceipt(stored.receipt)}\n`);
@@ -309,6 +441,7 @@ async function configShow(runtime: Runtime): Promise<void> {
309
441
  gatewayUrl: runtime.gatewayUrl,
310
442
  apiKey: runtime.apiKey ? "set" : undefined,
311
443
  paymentMode: runtime.paymentMode,
444
+ circleChain: runtime.circleChain,
312
445
  },
313
446
  };
314
447
  if (runtime.json) {
@@ -381,6 +514,67 @@ function parseBudget(parsed: ParsedArgs): `${bigint}` {
381
514
  }
382
515
  }
383
516
 
517
+ function sectionFlag(parsed: ParsedArgs): string | undefined {
518
+ const section = stringFlag(parsed.flags, "section");
519
+ const sectionId = stringFlag(parsed.flags, "section-id");
520
+ if (section && sectionId && section !== sectionId) {
521
+ throw new CliError("MULTIPLE_SECTIONS", "Use either --section or --section-id, not both.");
522
+ }
523
+ return section ?? sectionId;
524
+ }
525
+
526
+ function limitFlag(parsed: ParsedArgs): number | undefined {
527
+ const rawLimit = stringFlag(parsed.flags, "limit");
528
+ if (rawLimit === undefined) return undefined;
529
+ const limit = Number(rawLimit);
530
+ if (!Number.isInteger(limit) || limit < 1) {
531
+ throw new CliError("INVALID_LIMIT", "--limit must be a positive integer.");
532
+ }
533
+ return limit;
534
+ }
535
+
536
+ function chunkWordsFlag(parsed: ParsedArgs): number | undefined {
537
+ const fast = booleanFlag(parsed.flags, "fast");
538
+ const mode = stringFlag(parsed.flags, "mode");
539
+ if (mode !== undefined && mode !== "batch" && mode !== "word") {
540
+ throw new CliError("INVALID_READ_MODE", "--mode must be batch or word.");
541
+ }
542
+ const rawChunkWords = stringFlag(parsed.flags, "chunk-words");
543
+ if (rawChunkWords === undefined) return fast || mode === "batch" ? 32 : undefined;
544
+ const chunkWords = Number(rawChunkWords);
545
+ if (!Number.isInteger(chunkWords) || chunkWords < 1) {
546
+ throw new CliError("INVALID_CHUNK_WORDS", "--chunk-words must be a positive integer.");
547
+ }
548
+ return Math.min(chunkWords, 256);
549
+ }
550
+
551
+ function streamModeFlag(parsed: ParsedArgs): StreamMode {
552
+ const streamMode = stringFlag(parsed.flags, "stream-mode");
553
+ const legacyMode = stringFlag(parsed.flags, "mode");
554
+ const perWord = booleanFlag(parsed.flags, "per-word");
555
+ if (streamMode !== undefined && streamMode !== "bundled" && streamMode !== "word") {
556
+ throw new CliError("INVALID_STREAM_MODE", "--stream-mode must be bundled or word.");
557
+ }
558
+ if (perWord && streamMode === "bundled") {
559
+ throw new CliError("INVALID_STREAM_MODE", "--per-word cannot be combined with --stream-mode bundled.");
560
+ }
561
+ if ((perWord || legacyMode === "word" || streamMode === "word") && stringFlag(parsed.flags, "chunk-words") !== undefined) {
562
+ throw new CliError("INVALID_STREAM_MODE", "Per-word mode cannot be combined with --chunk-words.");
563
+ }
564
+ return perWord || legacyMode === "word" ? "word" : streamMode ?? "bundled";
565
+ }
566
+
567
+ function findSection(article: ArticleSummary, sectionId: string): ArticleSectionSummary | undefined {
568
+ return article.sections.find((section) => section.sectionId === sectionId);
569
+ }
570
+
571
+ async function validateSection(runtime: Runtime, articleId: string, sectionId: string): Promise<void> {
572
+ const article = await findArticle(runtime, articleId);
573
+ if (!article.sections.some((section) => section.sectionId === sectionId)) {
574
+ throw new CliError("SECTION_NOT_FOUND", `Section not found for ${articleId}: ${sectionId}`);
575
+ }
576
+ }
577
+
384
578
  function matchesQuery(article: ArticleSummary, query: string): boolean {
385
579
  const haystack = [
386
580
  article.articleId,
@@ -405,9 +599,9 @@ function showHelp(json: boolean): void {
405
599
  "rubicon search \"<query>\"",
406
600
  "rubicon article show <article-id>",
407
601
  "rubicon article navigation <article-id> --goal \"<goal>\"",
408
- "rubicon read <article-id> --max-usdc 0.10 [--goal \"...\"] [--max-words 50] [--dry-run]",
409
- "rubicon receipts list",
410
- "rubicon receipts show <receipt-id>",
602
+ "rubicon read <article-id> --max-usdc 0.10 [--goal \"...\"] [--section <section-id>] [--stop-after-section] [--stream-mode bundled|word] [--chunk-words 32] [--per-word] [--max-words 50] [--summary] [--dry-run]",
603
+ "rubicon receipts list [--limit 10] [--summary]",
604
+ "rubicon receipts show <receipt-id> [--summary]",
411
605
  "rubicon config show",
412
606
  "rubicon config set gateway-url <url>",
413
607
  "rubicon config set api-key <key>",
package/src/payments.ts CHANGED
@@ -11,6 +11,7 @@ export type PaymentMode = "static" | "circle-cli";
11
11
  export interface PaymentSelection {
12
12
  mode: PaymentMode;
13
13
  engine: AgentPaymentEngine;
14
+ circleChain?: string;
14
15
  }
15
16
 
16
17
  export function selectPaymentEngine(input: {
@@ -25,12 +26,14 @@ export function selectPaymentEngine(input: {
25
26
  return { mode: selectedMode, engine: new StaticPaymentEngine() };
26
27
  }
27
28
 
29
+ const circleChain = process.env.CIRCLE_CLI_CHAIN ?? input.config.circleChain ?? "ARC-TESTNET";
28
30
  return {
29
31
  mode: selectedMode,
30
32
  engine: new CircleCliGatewayPaymentEngine({
31
33
  agentWalletAddress: envAddress("CIRCLE_AGENT_WALLET_ADDRESS") ?? input.config.agentWalletAddress,
32
- chain: process.env.CIRCLE_CLI_CHAIN ?? input.config.circleChain ?? "ARC-TESTNET",
34
+ chain: circleChain,
33
35
  }),
36
+ circleChain,
34
37
  };
35
38
  }
36
39