@rubicon-caliga/cli 0.1.0 → 0.1.2

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.
@@ -0,0 +1,48 @@
1
+ export type CircleRunner = (command: string, args: string[]) => Promise<string>;
2
+ export interface CircleErrorInfo {
3
+ code: "network_unavailable" | "otp_expired" | "not_logged_in" | "missing_cli" | "command_failed";
4
+ message: string;
5
+ guidance: string;
6
+ }
7
+ export interface CircleWalletInfo {
8
+ address: `0x${string}`;
9
+ raw?: unknown;
10
+ }
11
+ export interface CircleBalanceInfo {
12
+ balanceAtomic: `${bigint}`;
13
+ backingEOA?: `0x${string}`;
14
+ raw?: unknown;
15
+ }
16
+ export declare function defaultCircleCommand(): string;
17
+ export declare function runCircleCli(command: string, args: string[]): Promise<string>;
18
+ export declare function classifyCircleError(error: unknown): Error & {
19
+ circle?: CircleErrorInfo;
20
+ };
21
+ export declare function circleGuidance(error: unknown): CircleErrorInfo | undefined;
22
+ export declare function circleVersion(input?: {
23
+ command?: string;
24
+ runner?: CircleRunner;
25
+ }): Promise<string>;
26
+ export declare function circleAuthStatus(input?: {
27
+ command?: string;
28
+ runner?: CircleRunner;
29
+ }): Promise<unknown>;
30
+ export declare function circleAgentWallet(input: {
31
+ chain: string;
32
+ configuredAddress?: `0x${string}`;
33
+ command?: string;
34
+ runner?: CircleRunner;
35
+ }): Promise<CircleWalletInfo>;
36
+ export declare function circleGatewayBalance(input: {
37
+ address: `0x${string}`;
38
+ chain: string;
39
+ command?: string;
40
+ runner?: CircleRunner;
41
+ }): Promise<CircleBalanceInfo>;
42
+ export declare function circleGatewayFaucet(input: {
43
+ address: `0x${string}`;
44
+ chain: string;
45
+ command?: string;
46
+ runner?: CircleRunner;
47
+ }): Promise<unknown>;
48
+ //# sourceMappingURL=circle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circle.d.ts","sourceRoot":"","sources":["../src/circle.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAEhF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,qBAAqB,GAAG,aAAa,GAAG,eAAe,GAAG,aAAa,GAAG,gBAAgB,CAAC;IACjG,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,KAAK,MAAM,EAAE,CAAC;IACvB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,GAAG,MAAM,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAC3B,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAOnF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,GAAG;IAAE,MAAM,CAAC,EAAE,eAAe,CAAA;CAAE,CA6CxF;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,GAAG,SAAS,CAK1E;AAED,wBAAsB,aAAa,CAAC,KAAK,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,YAAY,CAAA;CAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAI5G;AAED,wBAAsB,gBAAgB,CAAC,KAAK,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,YAAY,CAAA;CAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAKhH;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAQ5B;AAED,wBAAsB,oBAAoB,CAAC,KAAK,EAAE;IAChD,OAAO,EAAE,KAAK,MAAM,EAAE,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAU7B;AAED,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAC/C,OAAO,EAAE,KAAK,MAAM,EAAE,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB,GAAG,OAAO,CAAC,OAAO,CAAC,CAKnB"}
package/dist/circle.js ADDED
@@ -0,0 +1,198 @@
1
+ import { execFile } from "node:child_process";
2
+ import { promisify } from "node:util";
3
+ const execFileAsync = promisify(execFile);
4
+ export function defaultCircleCommand() {
5
+ return process.env.CIRCLE_CLI_COMMAND ?? "circle";
6
+ }
7
+ export async function runCircleCli(command, args) {
8
+ try {
9
+ const { stdout } = await execFileAsync(command, args, { maxBuffer: 1024 * 1024 });
10
+ return stdout;
11
+ }
12
+ catch (error) {
13
+ throw classifyCircleError(error);
14
+ }
15
+ }
16
+ export function classifyCircleError(error) {
17
+ const message = error instanceof Error ? error.message : String(error);
18
+ const output = [
19
+ message,
20
+ isRecord(error) && typeof error.stdout === "string" ? error.stdout : undefined,
21
+ isRecord(error) && typeof error.stderr === "string" ? error.stderr : undefined,
22
+ ]
23
+ .filter(Boolean)
24
+ .join("\n");
25
+ const lower = output.toLowerCase();
26
+ let info;
27
+ if (lower.includes("fetch failed") || lower.includes("network") || lower.includes("enotfound") || lower.includes("econnrefused")) {
28
+ info = {
29
+ code: "network_unavailable",
30
+ message: "Circle CLI network request failed.",
31
+ guidance: "Retry this command in a network-capable shell or agent context. Restricted sandboxes often block Circle auth and Gateway calls.",
32
+ };
33
+ }
34
+ else if (lower.includes("otp") && (lower.includes("expired") || lower.includes("invalid") || lower.includes("request"))) {
35
+ info = {
36
+ code: "otp_expired",
37
+ message: "Circle OTP request id is invalid or expired.",
38
+ guidance: "Start a fresh Circle auth OTP flow, then rerun the Rubicon command after login completes.",
39
+ };
40
+ }
41
+ else if (lower.includes("login") || lower.includes("logged in") || lower.includes("unauthorized") || lower.includes("auth")) {
42
+ info = {
43
+ code: "not_logged_in",
44
+ message: "Circle CLI is not logged in.",
45
+ guidance: "Run Circle CLI login/auth again, then rerun Rubicon. If an OTP flow was interrupted, start a fresh OTP init.",
46
+ };
47
+ }
48
+ else if (lower.includes("enoent") || lower.includes("not found")) {
49
+ info = {
50
+ code: "missing_cli",
51
+ message: "Circle CLI was not found.",
52
+ guidance: "Install Circle CLI and make sure the `circle` binary is on PATH.",
53
+ };
54
+ }
55
+ else {
56
+ info = {
57
+ code: "command_failed",
58
+ message: "Circle CLI command failed.",
59
+ guidance: "Inspect the Circle CLI output, confirm login, wallet, selected chain, and network access, then retry.",
60
+ };
61
+ }
62
+ const wrapped = new Error(`${info.message} ${output}`.trim());
63
+ wrapped.circle = info;
64
+ return wrapped;
65
+ }
66
+ export function circleGuidance(error) {
67
+ if (isRecord(error) && isRecord(error.circle)) {
68
+ return error.circle;
69
+ }
70
+ return undefined;
71
+ }
72
+ export async function circleVersion(input = {}) {
73
+ const command = input.command ?? defaultCircleCommand();
74
+ const runner = input.runner ?? runCircleCli;
75
+ return (await runner(command, ["--version"])).trim();
76
+ }
77
+ export async function circleAuthStatus(input = {}) {
78
+ const command = input.command ?? defaultCircleCommand();
79
+ const runner = input.runner ?? runCircleCli;
80
+ const output = await runner(command, ["auth", "status", "--output", "json"]);
81
+ return parseMaybeJson(output);
82
+ }
83
+ export async function circleAgentWallet(input) {
84
+ if (input.configuredAddress)
85
+ return { address: input.configuredAddress };
86
+ const command = input.command ?? defaultCircleCommand();
87
+ const runner = input.runner ?? runCircleCli;
88
+ const output = await runner(command, ["wallet", "list", "--chain", input.chain, "--type", "agent", "--output", "json"]);
89
+ const raw = parseMaybeJson(output);
90
+ const address = parseWalletAddress(raw);
91
+ return { address, raw };
92
+ }
93
+ export async function circleGatewayBalance(input) {
94
+ const command = input.command ?? defaultCircleCommand();
95
+ const runner = input.runner ?? runCircleCli;
96
+ const output = await runner(command, ["gateway", "balance", "--address", input.address, "--chain", input.chain, "--output", "json"]);
97
+ const raw = parseMaybeJson(output);
98
+ return {
99
+ balanceAtomic: parseBalanceAtomic(raw),
100
+ backingEOA: parseBackingEOA(raw),
101
+ raw,
102
+ };
103
+ }
104
+ export async function circleGatewayFaucet(input) {
105
+ const command = input.command ?? defaultCircleCommand();
106
+ const runner = input.runner ?? runCircleCli;
107
+ const output = await runner(command, ["gateway", "faucet", "--address", input.address, "--chain", input.chain, "--output", "json"]);
108
+ return parseMaybeJson(output);
109
+ }
110
+ function parseWalletAddress(value) {
111
+ const wallets = collectRecords(value);
112
+ const addresses = wallets
113
+ .map((wallet) => findString(wallet, ["address", "walletAddress", "blockchainAddress"]))
114
+ .filter((address) => Boolean(address && isAddress(address)));
115
+ const unique = [...new Set(addresses.map((address) => address.toLowerCase()))];
116
+ if (unique.length === 1)
117
+ return addresses.find((address) => address.toLowerCase() === unique[0]);
118
+ if (unique.length === 0)
119
+ throw new Error("Circle CLI did not return an Agent Wallet address.");
120
+ throw new Error("Multiple Circle Agent Wallets found; configure agent-wallet-address.");
121
+ }
122
+ function parseBalanceAtomic(value) {
123
+ const direct = findString(value, [
124
+ "data.balanceAtomic",
125
+ "data.availableAtomic",
126
+ "data.usdc.balanceAtomic",
127
+ "balanceAtomic",
128
+ "availableAtomic",
129
+ "usdc.balanceAtomic",
130
+ ]) ?? findNumber(value, ["data.balance", "data.available", "balance", "available"]);
131
+ if (typeof direct === "number")
132
+ return `${BigInt(Math.trunc(direct * 1_000_000))}`;
133
+ if (direct && /^\d+$/.test(direct))
134
+ return direct;
135
+ if (direct && /^\d+(\.\d+)?$/.test(direct))
136
+ return `${decimalUsdcToAtomic(direct)}`;
137
+ return "0";
138
+ }
139
+ function parseBackingEOA(value) {
140
+ const address = findString(value, ["data.backingEOA", "backingEOA", "data.backingEoa", "backingEoa"]);
141
+ return address && isAddress(address) ? address : undefined;
142
+ }
143
+ function parseMaybeJson(output) {
144
+ const trimmed = output.trim();
145
+ if (!trimmed)
146
+ return {};
147
+ try {
148
+ return JSON.parse(trimmed);
149
+ }
150
+ catch {
151
+ return trimmed;
152
+ }
153
+ }
154
+ function decimalUsdcToAtomic(value) {
155
+ const [whole = "0", fraction = ""] = value.split(".");
156
+ const padded = `${fraction}000000`.slice(0, 6);
157
+ return BigInt(whole) * 1000000n + BigInt(padded);
158
+ }
159
+ function collectRecords(value) {
160
+ if (Array.isArray(value))
161
+ return value.filter(isRecord);
162
+ if (!isRecord(value))
163
+ return [];
164
+ const records = [value];
165
+ for (const key of ["wallets", "items", "data"]) {
166
+ const nested = value[key];
167
+ if (Array.isArray(nested))
168
+ records.push(...nested.filter(isRecord));
169
+ if (isRecord(nested))
170
+ records.push(...collectRecords(nested));
171
+ }
172
+ return records;
173
+ }
174
+ function findString(value, paths) {
175
+ for (const path of paths) {
176
+ const found = path.split(".").reduce((current, part) => (isRecord(current) ? current[part] : undefined), value);
177
+ if (typeof found === "string")
178
+ return found;
179
+ }
180
+ return undefined;
181
+ }
182
+ function findNumber(value, paths) {
183
+ for (const path of paths) {
184
+ const found = path.split(".").reduce((current, part) => (isRecord(current) ? current[part] : undefined), value);
185
+ if (typeof found === "number")
186
+ return found;
187
+ if (typeof found === "string" && /^\d+(\.\d+)?$/.test(found))
188
+ return Number(found);
189
+ }
190
+ return undefined;
191
+ }
192
+ function isAddress(value) {
193
+ return /^0x[a-fA-F0-9]{40}$/.test(value);
194
+ }
195
+ function isRecord(value) {
196
+ return typeof value === "object" && value !== null;
197
+ }
198
+ //# sourceMappingURL=circle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circle.js","sourceRoot":"","sources":["../src/circle.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,QAAS,SAAQ,KAAK;aAEf,IAAI,EAAE,MAAM;aAEZ,QAAQ;gBAFR,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE,MAAM,EACC,QAAQ,SAAI;CAI/B;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAInD"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,QAAS,SAAQ,KAAK;aAEf,IAAI,EAAE,MAAM;aAEZ,QAAQ;gBAFR,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE,MAAM,EACC,QAAQ,SAAI;CAI/B;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAmBnD"}
package/dist/errors.js CHANGED
@@ -10,8 +10,16 @@ export class CliError extends Error {
10
10
  export function toCliError(error) {
11
11
  if (error instanceof CliError)
12
12
  return error;
13
- if (error instanceof Error)
13
+ if (error instanceof Error) {
14
+ const lower = error.message.toLowerCase();
15
+ if (lower.includes("fetch failed") || lower.includes("enotfound") || lower.includes("econnrefused")) {
16
+ return new CliError("CIRCLE_NETWORK_UNAVAILABLE", `${error.message} Retry in a network-capable shell or agent context; restricted sandboxes often block Circle auth and Gateway calls.`);
17
+ }
18
+ if (lower.includes("otp") && (lower.includes("expired") || lower.includes("invalid") || lower.includes("request"))) {
19
+ return new CliError("CIRCLE_OTP_EXPIRED", `${error.message} Start a fresh Circle auth OTP flow, then rerun the Rubicon command after login completes.`);
20
+ }
14
21
  return new CliError("COMMAND_FAILED", error.message);
22
+ }
15
23
  return new CliError("COMMAND_FAILED", String(error));
16
24
  }
17
25
  //# sourceMappingURL=errors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,QAAS,SAAQ,KAAK;IAEf;IAEA;IAHlB,YACkB,IAAY,EAC5B,OAAe,EACC,WAAW,CAAC;QAE5B,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,SAAI,GAAJ,IAAI,CAAQ;QAEZ,aAAQ,GAAR,QAAQ,CAAI;IAG9B,CAAC;CACF;AAED,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,IAAI,KAAK,YAAY,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,IAAI,QAAQ,CAAC,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACjF,OAAO,IAAI,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACvD,CAAC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,QAAS,SAAQ,KAAK;IAEf;IAEA;IAHlB,YACkB,IAAY,EAC5B,OAAe,EACC,WAAW,CAAC;QAE5B,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,SAAI,GAAJ,IAAI,CAAQ;QAEZ,aAAQ,GAAR,QAAQ,CAAI;IAG9B,CAAC;CACF;AAED,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,IAAI,KAAK,YAAY,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAC1C,IAAI,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACpG,OAAO,IAAI,QAAQ,CACjB,4BAA4B,EAC5B,GAAG,KAAK,CAAC,OAAO,qHAAqH,CACtI,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;YACnH,OAAO,IAAI,QAAQ,CACjB,oBAAoB,EACpB,GAAG,KAAK,CAAC,OAAO,4FAA4F,CAC7G,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,QAAQ,CAAC,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,IAAI,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACvD,CAAC"}
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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"}