@artos-commerce/ucp-cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/README.md +177 -0
  2. package/dist/agent.d.ts +35 -0
  3. package/dist/agent.js +46 -0
  4. package/dist/agent.js.map +1 -0
  5. package/dist/args.d.ts +20 -0
  6. package/dist/args.js +58 -0
  7. package/dist/args.js.map +1 -0
  8. package/dist/cli.d.ts +7 -0
  9. package/dist/cli.js +250 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/commands/account.d.ts +19 -0
  12. package/dist/commands/account.js +31 -0
  13. package/dist/commands/account.js.map +1 -0
  14. package/dist/commands/cart.d.ts +17 -0
  15. package/dist/commands/cart.js +51 -0
  16. package/dist/commands/cart.js.map +1 -0
  17. package/dist/commands/catalog-search.d.ts +22 -0
  18. package/dist/commands/catalog-search.js +27 -0
  19. package/dist/commands/catalog-search.js.map +1 -0
  20. package/dist/commands/checkout.d.ts +20 -0
  21. package/dist/commands/checkout.js +52 -0
  22. package/dist/commands/checkout.js.map +1 -0
  23. package/dist/commands/discover.d.ts +13 -0
  24. package/dist/commands/discover.js +27 -0
  25. package/dist/commands/discover.js.map +1 -0
  26. package/dist/commands/init.d.ts +16 -0
  27. package/dist/commands/init.js +222 -0
  28. package/dist/commands/init.js.map +1 -0
  29. package/dist/commands/profile-init.d.ts +22 -0
  30. package/dist/commands/profile-init.js +34 -0
  31. package/dist/commands/profile-init.js.map +1 -0
  32. package/dist/commands/purchase.d.ts +22 -0
  33. package/dist/commands/purchase.js +29 -0
  34. package/dist/commands/purchase.js.map +1 -0
  35. package/dist/config.d.ts +28 -0
  36. package/dist/config.js +22 -0
  37. package/dist/config.js.map +1 -0
  38. package/dist/conformance.d.ts +35 -0
  39. package/dist/conformance.js +240 -0
  40. package/dist/conformance.js.map +1 -0
  41. package/dist/doctor.d.ts +23 -0
  42. package/dist/doctor.js +123 -0
  43. package/dist/doctor.js.map +1 -0
  44. package/dist/index.d.ts +2 -0
  45. package/dist/index.js +25 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/io.d.ts +24 -0
  48. package/dist/io.js +2 -0
  49. package/dist/io.js.map +1 -0
  50. package/dist/output.d.ts +38 -0
  51. package/dist/output.js +131 -0
  52. package/dist/output.js.map +1 -0
  53. package/dist/profile.d.ts +38 -0
  54. package/dist/profile.js +43 -0
  55. package/dist/profile.js.map +1 -0
  56. package/package.json +63 -0
package/dist/output.js ADDED
@@ -0,0 +1,131 @@
1
+ import { grandTotal, currencyOf, } from '@artos-commerce/ucp-client/checkout';
2
+ /** Currencies whose minor-unit exponent is not 2 (for display only). */
3
+ const MINOR_EXP = {
4
+ JPY: 0,
5
+ KRW: 0,
6
+ VND: 0,
7
+ CLP: 0,
8
+ ISK: 0,
9
+ BHD: 3,
10
+ KWD: 3,
11
+ OMR: 3,
12
+ TND: 3,
13
+ };
14
+ /** Formats integer minor units as a human-readable major-unit amount. */
15
+ export function formatMinor(minor, currency) {
16
+ if (minor == null || Number.isNaN(minor))
17
+ return '—';
18
+ const code = (currency ?? 'USD').toUpperCase();
19
+ const exp = MINOR_EXP[code] ?? 2;
20
+ return `${(minor / 10 ** exp).toFixed(exp)} ${code}`;
21
+ }
22
+ /** Pulls product rows out of a UCP search envelope (REST or MCP-wrapped). */
23
+ export function extractProducts(res) {
24
+ const sc = res.structuredContent ?? res;
25
+ const products = sc.products ?? [];
26
+ return products.map((p) => {
27
+ const variant = p?.variants?.[0];
28
+ // Money is a `{ amount, currency }` object on the variant, falling back to
29
+ // the product's price range when there is no variant.
30
+ const money = variant?.price ?? p?.price_range?.min;
31
+ return {
32
+ title: typeof p?.title === 'string' ? p.title : '(untitled)',
33
+ storeSlug: p?.metadata?.artos_seller?.slug,
34
+ variantId: variant?.id,
35
+ price: money?.amount,
36
+ currency: money?.currency,
37
+ };
38
+ });
39
+ }
40
+ /** Renders catalog search results as text, or raw JSON when `json` is set. */
41
+ export function formatSearchResults(res, opts = {}) {
42
+ if (opts.json)
43
+ return JSON.stringify(res, null, 2);
44
+ const products = extractProducts(res);
45
+ if (products.length === 0)
46
+ return 'No products found.';
47
+ const lines = products.map((p) => {
48
+ const store = p.storeSlug ? ` [store: ${p.storeSlug}]` : '';
49
+ const price = ` — ${formatMinor(p.price, p.currency)}`;
50
+ const variant = p.variantId ? ` (variant ${p.variantId})` : '';
51
+ return `• ${p.title}${store}${price}${variant}`;
52
+ });
53
+ return [`Found ${products.length} product(s):`, ...lines].join('\n');
54
+ }
55
+ /** Renders a store's UCP profile as text, or raw JSON when `json` is set. */
56
+ export function formatStoreProfile(slug, raw, opts = {}) {
57
+ if (opts.json)
58
+ return JSON.stringify(raw, null, 2);
59
+ const ucp = raw.ucp ?? {};
60
+ const version = ucp.version ?? 'unknown';
61
+ const signingKeys = raw.signing_keys ?? [];
62
+ const handlers = Object.keys(ucp.payment_handlers ?? {});
63
+ const capabilities = Object.keys(ucp.capabilities ?? {});
64
+ return [
65
+ `Store: ${slug}`,
66
+ ` UCP version: ${version}`,
67
+ ` Signing keys: ${signingKeys.length}`,
68
+ ` Payment handlers: ${handlers.length ? handlers.join(', ') : '(none)'}`,
69
+ ` Capabilities: ${capabilities.length ? capabilities.join(', ') : '(none)'}`,
70
+ ].join('\n');
71
+ }
72
+ /** Renders a cart/checkout/order UCP body as text, or raw JSON when `json` is set. */
73
+ export function formatEntity(label, body, opts = {}) {
74
+ if (opts.json)
75
+ return JSON.stringify(body, null, 2);
76
+ const id = body.id ?? '(none)';
77
+ const status = body.status ?? 'ok';
78
+ const lineItems = body.line_items ?? [];
79
+ const lines = [
80
+ `${label} ${id}`,
81
+ ` Status: ${status}`,
82
+ ` Total: ${formatMinor(grandTotal(body), currencyOf(body))}`,
83
+ ` Line items: ${lineItems.length}`,
84
+ ];
85
+ const continueUrl = body.continue_url;
86
+ if (continueUrl)
87
+ lines.push(` Continue: ${continueUrl}`);
88
+ return lines.join('\n');
89
+ }
90
+ /**
91
+ * Renders a `confirmPurchase` outcome, including the call-to-action a buyer needs
92
+ * for the non-terminal states (the hosted-pay / escalation URL, or the list of
93
+ * rails to re-run with `--pay`).
94
+ */
95
+ export function formatOutcome(outcome, opts = {}) {
96
+ if (opts.json)
97
+ return JSON.stringify(outcome, null, 2);
98
+ switch (outcome.status) {
99
+ case 'completed':
100
+ return ['✓ Order placed.', formatEntity('Order', outcome.checkout)].join('\n');
101
+ case 'escalation_required':
102
+ return [
103
+ '! Action required to finish paying.',
104
+ ` Open: ${outcome.continueUrl}`,
105
+ ].join('\n');
106
+ case 'payment_selection_required': {
107
+ const rails = outcome.rails
108
+ .map((r) => ` • ${r.handlerId} (${r.kind})`)
109
+ .join('\n');
110
+ return [
111
+ '! Choose a payment rail, then re-run with --pay <handlerId>:',
112
+ rails || ' (none advertised)',
113
+ ].join('\n');
114
+ }
115
+ case 'error':
116
+ return `✗ ${outcome.code}: ${outcome.message}`;
117
+ }
118
+ }
119
+ /** Renders the buyer-account tool list, or raw JSON when `json` is set. */
120
+ export function formatAccountTools(tools, opts = {}) {
121
+ if (opts.json)
122
+ return JSON.stringify(tools, null, 2);
123
+ if (tools.length === 0)
124
+ return 'No account tools available.';
125
+ const lines = tools.map((t) => {
126
+ const desc = t.description ? ` — ${t.description}` : '';
127
+ return `• ${t.name}${desc}`;
128
+ });
129
+ return [`Account tools (${tools.length}):`, ...lines].join('\n');
130
+ }
131
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * UCP spec version the generated profile declares. Kept in lockstep with
3
+ * `@artos-commerce/ucp-client`'s `UCP_VERSION` and the API (the package's root
4
+ * export pulls in the optional `@mysten/sui` peer, which a card-only CLI must
5
+ * not require, so we mirror the constant rather than import the barrel).
6
+ */
7
+ export declare const UCP_VERSION = "2026-04-08";
8
+ /** A JWK with the fields the agent profile sets on its signing key. */
9
+ export type Jwk = Record<string, unknown> & {
10
+ kid?: string;
11
+ };
12
+ export interface GeneratedProfile {
13
+ /** Key id linking the private key to the public key in the profile. */
14
+ kid: string;
15
+ /** The `/.well-known/ucp` document (public — host this). */
16
+ profile: Record<string, unknown>;
17
+ /** The public signing JWK embedded in the profile. */
18
+ publicJwk: Jwk;
19
+ /** The private signing JWK (SECRET — never commit; load as `AGENT_PRIVATE_JWK`). */
20
+ privateJwk: Jwk;
21
+ }
22
+ export interface GenerateProfileOptions {
23
+ /** The public URL the profile will be hosted at (informational, recorded nowhere). */
24
+ url: string;
25
+ /** Override the generated key id. */
26
+ kid?: string;
27
+ /** Injected for tests; defaults to Node's WebCrypto. */
28
+ subtle?: SubtleCrypto;
29
+ /** Injected for tests; defaults to `crypto.randomUUID`. */
30
+ uuid?: () => string;
31
+ }
32
+ /**
33
+ * Generates a fresh EC P-256 agent UCP profile: a keypair, the public profile
34
+ * document (protocol version + capabilities + the public signing key), and the
35
+ * matching private JWK to sign AP2 mandates with. The keypair is generated
36
+ * locally and the private key never leaves the caller.
37
+ */
38
+ export declare function generateAgentProfile(opts: GenerateProfileOptions): Promise<GeneratedProfile>;
@@ -0,0 +1,43 @@
1
+ import { randomUUID, webcrypto } from 'node:crypto';
2
+ /**
3
+ * UCP spec version the generated profile declares. Kept in lockstep with
4
+ * `@artos-commerce/ucp-client`'s `UCP_VERSION` and the API (the package's root
5
+ * export pulls in the optional `@mysten/sui` peer, which a card-only CLI must
6
+ * not require, so we mirror the constant rather than import the barrel).
7
+ */
8
+ export const UCP_VERSION = '2026-04-08';
9
+ /** The shopping capabilities a fresh agent profile declares by default. */
10
+ function defaultCapabilities() {
11
+ const v = [{ version: UCP_VERSION }];
12
+ return {
13
+ 'dev.ucp.shopping.catalog.search': v,
14
+ 'dev.ucp.shopping.catalog.lookup': v,
15
+ 'dev.ucp.shopping.cart': v,
16
+ 'dev.ucp.shopping.checkout': v,
17
+ 'dev.ucp.shopping.order': v,
18
+ };
19
+ }
20
+ /**
21
+ * Generates a fresh EC P-256 agent UCP profile: a keypair, the public profile
22
+ * document (protocol version + capabilities + the public signing key), and the
23
+ * matching private JWK to sign AP2 mandates with. The keypair is generated
24
+ * locally and the private key never leaves the caller.
25
+ */
26
+ export async function generateAgentProfile(opts) {
27
+ const subtle = opts.subtle ?? webcrypto.subtle;
28
+ const kid = opts.kid ?? (opts.uuid ?? randomUUID)();
29
+ const pair = await subtle.generateKey({ name: 'ECDSA', namedCurve: 'P-256' }, true, ['sign', 'verify']);
30
+ const rawPublic = (await subtle.exportKey('jwk', pair.publicKey));
31
+ const rawPrivate = (await subtle.exportKey('jwk', pair.privateKey));
32
+ const publicJwk = { ...rawPublic, kid, use: 'sig', alg: 'ES256' };
33
+ const privateJwk = { ...rawPrivate, kid, use: 'sig', alg: 'ES256' };
34
+ const profile = {
35
+ ucp: {
36
+ version: UCP_VERSION,
37
+ capabilities: defaultCapabilities(),
38
+ },
39
+ signing_keys: [publicJwk],
40
+ };
41
+ return { kid, profile, publicJwk, privateJwk };
42
+ }
43
+ //# sourceMappingURL=profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.js","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEpD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,YAAY,CAAC;AA2BxC,2EAA2E;AAC3E,SAAS,mBAAmB;IAC1B,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;IACrC,OAAO;QACL,iCAAiC,EAAE,CAAC;QACpC,iCAAiC,EAAE,CAAC;QACpC,uBAAuB,EAAE,CAAC;QAC1B,2BAA2B,EAAE,CAAC;QAC9B,wBAAwB,EAAE,CAAC;KAC5B,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAA4B;IAE5B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC;IAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC,EAAE,CAAC;IAEpD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,WAAW,CACnC,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,EACtC,IAAI,EACJ,CAAC,MAAM,EAAE,QAAQ,CAAC,CACnB,CAAC;IACF,MAAM,SAAS,GAAG,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAQ,CAAC;IACzE,MAAM,UAAU,GAAG,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAQ,CAAC;IAE3E,MAAM,SAAS,GAAQ,EAAE,GAAG,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;IACvE,MAAM,UAAU,GAAQ,EAAE,GAAG,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;IAEzE,MAAM,OAAO,GAA4B;QACvC,GAAG,EAAE;YACH,OAAO,EAAE,WAAW;YACpB,YAAY,EAAE,mBAAmB,EAAE;SACpC;QACD,YAAY,EAAE,CAAC,SAAS,CAAC;KAC1B,CAAC;IAEF,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AACjD,CAAC"}
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "@artos-commerce/ucp-cli",
3
+ "version": "0.1.0",
4
+ "description": "Command-line tools for building agents on Artos: scaffold an agent UCP profile, run connectivity diagnostics, inspect a store's UCP profile, and search the cross-store catalog.",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "keywords": [
8
+ "artos",
9
+ "ucp",
10
+ "agent-commerce",
11
+ "cli",
12
+ "mcp",
13
+ "ap2"
14
+ ],
15
+ "homepage": "https://docs.artos.sh/agents",
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "git+https://github.com/artos-commerce/artos-ucp-cli.git"
19
+ },
20
+ "bugs": {
21
+ "url": "https://github.com/artos-commerce/artos-ucp-cli/issues"
22
+ },
23
+ "engines": {
24
+ "node": ">=20"
25
+ },
26
+ "bin": {
27
+ "artos": "./dist/index.js"
28
+ },
29
+ "files": [
30
+ "dist",
31
+ "README.md"
32
+ ],
33
+ "scripts": {
34
+ "build": "tsc -p tsconfig.json",
35
+ "lint": "eslint .",
36
+ "lint:fix": "eslint . --fix",
37
+ "test": "vitest run",
38
+ "test:watch": "vitest",
39
+ "test:coverage": "vitest run --coverage",
40
+ "typecheck": "tsc -p tsconfig.json --noEmit",
41
+ "check": "npm run lint && npm run typecheck && npm run test:coverage && npm run build",
42
+ "prepublishOnly": "npm run check"
43
+ },
44
+ "dependencies": {
45
+ "@artos-commerce/ucp-client": "^0.2.0"
46
+ },
47
+ "devDependencies": {
48
+ "@eslint/js": "^9.39.4",
49
+ "@types/node": "^20.19.42",
50
+ "@vitest/coverage-v8": "^2.1.9",
51
+ "eslint": "^9.39.4",
52
+ "eslint-config-prettier": "^10.1.8",
53
+ "eslint-plugin-prettier": "^5.5.6",
54
+ "globals": "^17.7.0",
55
+ "prettier": "^3.8.3",
56
+ "typescript": "^5.6.0",
57
+ "typescript-eslint": "^8.62.0",
58
+ "vitest": "^2.1.0"
59
+ },
60
+ "publishConfig": {
61
+ "access": "public"
62
+ }
63
+ }