r3plica 1.0.2 → 1.2.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/README.md CHANGED
@@ -1,173 +1,188 @@
1
- # r3 — R3PLICA CLI
2
-
3
- Query the R3PLICA digital replicas catalog from your terminal. Search products, brands, collections, and finishes — built for AI agents, developers, and scripts.
4
-
5
- ## Install
6
-
7
- ```bash
8
- npm install -g r3plica
9
- ```
10
-
11
- Requires Node.js 20+.
12
-
13
- ## Quick Start
14
-
15
- ```bash
16
- # Search products
17
- r3 product search "dining table"
18
-
19
- # List brands
20
- r3 brand list
21
-
22
- # Filter by brand and category
23
- r3 product list --brand "Cattelan Italia" --category table
24
-
25
- # Get product details
26
- r3 product get <mongo_id>
27
-
28
- # Pipe to jq
29
- r3 product list --limit 5 --json | jq '.[].name'
30
- ```
31
-
32
- ## Commands
33
-
34
- ### Products
35
-
36
- ```bash
37
- r3 product list [--brand X] [--category X] [--collection X] [--limit N] [--page N]
38
- r3 product search <query> [--brand X] [--category X] [--limit N]
39
- r3 product get <mongo_id>
40
- ```
41
-
42
- ### Brands
43
-
44
- ```bash
45
- r3 brand list [--country X] [--limit N]
46
- r3 brand search <query>
47
- ```
48
-
49
- ### Product Collections
50
-
51
- Product collections are furniture lines from a brand (e.g., "Tudor" by Cattelan Italia).
52
-
53
- ```bash
54
- r3 product-collection list [--brand X] [--limit N] [--page N] [--sort X] [--order asc|desc]
55
- r3 product-collection search <query>
56
- ```
57
-
58
- ### Finish Collections
59
-
60
- Finish collections are sets of material finishes (shaders) — wood types, fabrics, metals, leathers — that can be applied to product parts.
61
-
62
- ```bash
63
- r3 finish-collection list [--brand X] [--category X] [--limit N] [--page N]
64
- r3 finish-collection search <query>
65
- r3 finish-collection get <mongo_id>
66
- ```
67
-
68
- ### Configuration
69
-
70
- ```bash
71
- r3 config show
72
- r3 config set api-url <url>
73
- ```
74
-
75
- Default API URL: `https://api.r3plica.space/api/r3vault`. Override with `R3_API_URL` environment variable or `r3 config set`.
76
-
77
- ## Output
78
-
79
- - **Terminal**: formatted table with headers and result count
80
- - **Piped**: JSON (automatic detection)
81
- - `--json`: force JSON output
82
- - `--pretty`: force table output
83
-
84
- ```bash
85
- # Table output (terminal)
86
- $ r3 brand list --limit 3
87
-
88
- ID Name Country Products
89
- 0a497f00-cc6f-4 Driade Italy 29
90
- 22b4a540-bcf2-4 We Are IB Italy 37
91
- ab368a13-6038-4 Emu Italy 26
92
-
93
- 3 brands found
94
-
95
- # JSON output (piped or --json)
96
- $ r3 brand list --limit 1 --json | jq '.[0].name'
97
- "Driade"
98
- ```
99
-
100
- ## Use with AI Agents
101
-
102
- ### Claude Code / CLAUDE.md
103
-
104
- Add to your project's `CLAUDE.md`:
105
-
106
- ```markdown
107
- ## R3PLICA Catalog
108
-
109
- The `r3` CLI queries the R3PLICA digital replicas catalog. Use it when the user
110
- asks about furniture, finishes, brands, or design products.
111
-
112
- - `r3 product search "query"` search products by text
113
- - `r3 product list --brand X --category X` — filter products
114
- - `r3 product get <id>`product details with finish options
115
- - `r3 brand list` — all available brands
116
- - `r3 finish-collection list --brand X` — available finish collections
117
- - Always use `--json` when processing results programmatically
118
- - Run `r3 --help` for full command reference
119
- ```
120
-
121
- ### MCP Server
122
-
123
- The package also includes an MCP server for auto-discovery in Claude Desktop, Cursor, and similar IDEs.
124
-
125
- Add to your Claude Desktop config (`claude_desktop_config.json`):
126
-
127
- ```json
128
- {
129
- "mcpServers": {
130
- "r3plica": {
131
- "command": "r3-mcp"
132
- }
133
- }
134
- }
135
- ```
136
-
137
- The MCP server exposes the same data through 10 tools: `product_list`, `product_search`, `product_get`, `brand_list`, `brand_search`, `product_collection_list`, `product_collection_search`, `finish_collection_list`, `finish_collection_search`, `finish_collection_get`.
138
-
139
- ## Examples
140
-
141
- ```bash
142
- # Find Italian brands
143
- r3 brand list --country Italy
144
-
145
- # Search chairs, limit to 5 results
146
- r3 product search "chair" --limit 5
147
-
148
- # Get all products from a brand
149
- r3 product list --brand "Driade"
150
-
151
- # Explore a product collection
152
- r3 product-collection search "Tudor"
153
-
154
- # Find wood finishes
155
- r3 finish-collection list --category wood
156
-
157
- # Script: get all brand names
158
- r3 brand list --json | jq -r '.[].name'
159
-
160
- # Script: count products per brand
161
- r3 brand list --json | jq -r '.[].name' | while read brand; do
162
- count=$(r3 product list --brand "$brand" --json 2>/dev/null | jq length)
163
- echo "$brand: $count"
164
- done
165
- ```
166
-
167
- ## About R3PLICA
168
-
169
- [R3PLICA](https://r3plica.space) provides certified digital replicas of branded furniture, finishes, and materials to architects, interior designers, and visualization professionals. The catalog includes 60+ premium partner brands including Cattelan Italia, Driade, Poliform, and more.
170
-
171
- ## License
172
-
173
- Proprietary - R3PLICA S.r.l.
1
+ # r3 — R3PLICA CLI
2
+
3
+ Query the R3PLICA digital replicas catalog from your terminal. Search products, brands, collections, and finishes — built for AI agents, developers, and scripts.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install -g r3plica
9
+ ```
10
+
11
+ Requires Node.js 20+.
12
+
13
+ ## Quick Start
14
+
15
+ ```bash
16
+ # Search products
17
+ r3 product search "dining table"
18
+
19
+ # List brands
20
+ r3 brand list
21
+
22
+ # Filter by brand and category
23
+ r3 product list --brand "Cattelan Italia" --category table
24
+
25
+ # Get product details
26
+ r3 product get <mongo_id>
27
+
28
+ # Pipe to jq
29
+ r3 product list --limit 5 --json | jq '.[].name'
30
+ ```
31
+
32
+ ## Commands
33
+
34
+ ### Products
35
+
36
+ ```bash
37
+ r3 product list [--brand X] [--category X] [--collection X] [--designer X] [--year X] [--limit N] [--page N]
38
+ r3 product search <query> [--brand X] [--category X] [--designer X] [--year X] [--limit N]
39
+ r3 product get <mongo_id>
40
+ r3 product stats [--by category|brand|designer|year] [--brand X]
41
+ r3 product compare <id1> <id2>
42
+ ```
43
+
44
+ ### Brands
45
+
46
+ ```bash
47
+ r3 brand list [--country X] [--limit N]
48
+ r3 brand search <query>
49
+ ```
50
+
51
+ ### Product Collections
52
+
53
+ Product collections are furniture lines from a brand (e.g., "Tudor" by Cattelan Italia).
54
+
55
+ ```bash
56
+ r3 product-collection list [--brand X] [--limit N] [--page N] [--sort X] [--order asc|desc]
57
+ r3 product-collection search <query>
58
+ ```
59
+
60
+ ### Finish Collections
61
+
62
+ Finish collections are sets of material finishes (shaders) — wood types, fabrics, metals, leathers — that can be applied to product parts.
63
+
64
+ ```bash
65
+ r3 finish-collection list [--brand X] [--category X] [--limit N] [--page N]
66
+ r3 finish-collection search <query>
67
+ r3 finish-collection get <mongo_id>
68
+ ```
69
+
70
+ ### Configuration
71
+
72
+ ```bash
73
+ r3 config show
74
+ r3 config set api-url <url>
75
+ ```
76
+
77
+ Default API URL: `https://api.r3plica.space/api/r3vault`. Override with `R3_API_URL` environment variable or `r3 config set`.
78
+
79
+ ## Output
80
+
81
+ - **Terminal**: formatted table with headers and result count
82
+ - **Piped**: JSON (automatic detection)
83
+ - `--json`: force JSON output
84
+ - `--pretty`: force table output
85
+
86
+ ```bash
87
+ # Table output (terminal)
88
+ $ r3 brand list --limit 3
89
+
90
+ ID Name Country Products
91
+ 0a497f00-cc6f-4 Driade Italy 29
92
+ 22b4a540-bcf2-4 We Are IB Italy 37
93
+ ab368a13-6038-4 Emu Italy 26
94
+
95
+ 3 brands found
96
+
97
+ # JSON output (piped or --json)
98
+ $ r3 brand list --limit 1 --json | jq '.[0].name'
99
+ "Driade"
100
+ ```
101
+
102
+ ## Use with AI Agents
103
+
104
+ ### Claude Code / CLAUDE.md
105
+
106
+ Add to your project's `CLAUDE.md`:
107
+
108
+ ```markdown
109
+ ## R3PLICA Catalog
110
+
111
+ The `r3` CLI queries the R3PLICA digital replicas catalog. Use it when the user
112
+ asks about furniture, finishes, brands, or design products.
113
+
114
+ - `r3 product search "query"`search products by text
115
+ - `r3 product list --brand X --category X` — filter products
116
+ - `r3 product list --designer "Name"` — filter by designer
117
+ - `r3 product get <id>` product details with finish options
118
+ - `r3 product stats --by brand` catalog breakdown
119
+ - `r3 product compare <id1> <id2>` — side-by-side comparison
120
+ - `r3 brand list` — all available brands
121
+ - `r3 finish-collection list --brand X` — available finish collections
122
+ - Always use `--json` when processing results programmatically
123
+ - Run `r3 --help` for full command reference
124
+ ```
125
+
126
+ ### MCP Server
127
+
128
+ The package also includes an MCP server for auto-discovery in Claude Desktop, Cursor, and similar IDEs.
129
+
130
+ Add to your Claude Desktop config (`claude_desktop_config.json`):
131
+
132
+ ```json
133
+ {
134
+ "mcpServers": {
135
+ "r3plica": {
136
+ "command": "r3-mcp"
137
+ }
138
+ }
139
+ }
140
+ ```
141
+
142
+ The MCP server exposes the same data through 10 tools: `product_list`, `product_search`, `product_get`, `brand_list`, `brand_search`, `product_collection_list`, `product_collection_search`, `finish_collection_list`, `finish_collection_search`, `finish_collection_get`.
143
+
144
+ ## Examples
145
+
146
+ ```bash
147
+ # Find Italian brands
148
+ r3 brand list --country Italy
149
+
150
+ # Search chairs, limit to 5 results
151
+ r3 product search "chair" --limit 5
152
+
153
+ # Get all products from a brand
154
+ r3 product list --brand "Driade"
155
+
156
+ # Explore a product collection
157
+ r3 product-collection search "Tudor"
158
+
159
+ # Find products by designer
160
+ r3 product list --designer "Philippe Starck"
161
+
162
+ # Catalog stats
163
+ r3 product stats --by brand
164
+ r3 product stats --brand "Driade" --by designer
165
+
166
+ # Compare two products
167
+ r3 product compare <id1> <id2>
168
+
169
+ # Find wood finishes
170
+ r3 finish-collection list --category wood
171
+
172
+ # Script: get all brand names
173
+ r3 brand list --json | jq -r '.[].name'
174
+
175
+ # Script: count products per brand
176
+ r3 brand list --json | jq -r '.[].name' | while read brand; do
177
+ count=$(r3 product list --brand "$brand" --json 2>/dev/null | jq length)
178
+ echo "$brand: $count"
179
+ done
180
+ ```
181
+
182
+ ## About R3PLICA
183
+
184
+ [R3PLICA](https://r3plica.space) provides certified digital replicas of branded furniture, finishes, and materials to architects, interior designers, and visualization professionals. The catalog includes 60+ premium partner brands including Cattelan Italia, Driade, Poliform, and more.
185
+
186
+ ## License
187
+
188
+ Proprietary - R3PLICA S.r.l.
@@ -1,5 +1,5 @@
1
1
  import { listProducts, searchProducts, getProduct } from "../../core/api.js";
2
- import { output, outputDetail } from "../../core/formatter.js";
2
+ import { output, outputDetail, outputStats, outputCompare } from "../../core/formatter.js";
3
3
  import { handleError } from "../../core/errors.js";
4
4
  const PRODUCT_COLUMNS = [
5
5
  { key: "mongo_id", header: "ID", width: 16 },
@@ -15,6 +15,8 @@ export function registerProductCommands(program) {
15
15
  .option("--brand <name>", "Filter by brand name")
16
16
  .option("--category <category>", "Filter by product category")
17
17
  .option("--collection <name>", "Filter by collection name")
18
+ .option("--designer <name>", "Filter by designer name")
19
+ .option("--year <year>", "Filter by year")
18
20
  .option("--limit <n>", "Max results", "20")
19
21
  .option("--page <n>", "Page number", "1")
20
22
  .action(async (opts) => {
@@ -23,6 +25,8 @@ export function registerProductCommands(program) {
23
25
  brand: opts.brand,
24
26
  category: opts.category,
25
27
  collection: opts.collection,
28
+ designer: opts.designer,
29
+ year: opts.year,
26
30
  limit: parseInt(opts.limit),
27
31
  page: parseInt(opts.page),
28
32
  });
@@ -42,12 +46,16 @@ export function registerProductCommands(program) {
42
46
  .description("Search products by text")
43
47
  .option("--brand <name>", "Filter by brand name")
44
48
  .option("--category <category>", "Filter by product category")
49
+ .option("--designer <name>", "Filter by designer name")
50
+ .option("--year <year>", "Filter by year")
45
51
  .option("--limit <n>", "Max results", "20")
46
52
  .action(async (query, opts) => {
47
53
  try {
48
54
  const results = await searchProducts(query, {
49
55
  brand: opts.brand,
50
56
  category: opts.category,
57
+ designer: opts.designer,
58
+ year: opts.year,
51
59
  limit: parseInt(opts.limit),
52
60
  });
53
61
  output(results, {
@@ -77,5 +85,42 @@ export function registerProductCommands(program) {
77
85
  handleError(error);
78
86
  }
79
87
  });
88
+ product
89
+ .command("stats")
90
+ .description("Show catalog statistics (products by category, brand, designer)")
91
+ .option("--brand <name>", "Stats for a specific brand only")
92
+ .option("--by <field>", "Group by: category, brand, designer, year", "category")
93
+ .action(async (opts) => {
94
+ try {
95
+ const results = await listProducts({
96
+ brand: opts.brand,
97
+ limit: 9999,
98
+ });
99
+ outputStats(results, {
100
+ json: program.opts().json,
101
+ pretty: program.opts().pretty,
102
+ groupBy: opts.by,
103
+ brandFilter: opts.brand,
104
+ });
105
+ }
106
+ catch (error) {
107
+ handleError(error);
108
+ }
109
+ });
110
+ product
111
+ .command("compare <id1> <id2>")
112
+ .description("Compare two products side by side")
113
+ .action(async (id1, id2) => {
114
+ try {
115
+ const [p1, p2] = await Promise.all([getProduct(id1), getProduct(id2)]);
116
+ outputCompare(p1, p2, {
117
+ json: program.opts().json,
118
+ pretty: program.opts().pretty,
119
+ });
120
+ }
121
+ catch (error) {
122
+ handleError(error);
123
+ }
124
+ });
80
125
  }
81
126
  //# sourceMappingURL=product.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"product.js","sourceRoot":"","sources":["../../../src/cli/commands/product.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"product.js","sourceRoot":"","sources":["../../../src/cli/commands/product.ts"],"names":[],"mappings":"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"}
@@ -6,12 +6,16 @@ export declare function listProducts(opts: {
6
6
  brand?: string;
7
7
  category?: string;
8
8
  collection?: string;
9
+ designer?: string;
10
+ year?: string;
9
11
  limit?: number;
10
12
  page?: number;
11
13
  }): Promise<any[]>;
12
14
  export declare function searchProducts(query: string, opts: {
13
15
  brand?: string;
14
16
  category?: string;
17
+ designer?: string;
18
+ year?: string;
15
19
  limit?: number;
16
20
  }): Promise<any[]>;
17
21
  export declare function getProduct(mongoId: string): Promise<any>;
package/dist/core/api.js CHANGED
@@ -56,30 +56,68 @@ function buildQuery(filters) {
56
56
  .join(";");
57
57
  }
58
58
  // ── Products ──────────────────────────────────────────────
59
+ // NOTE: The backend /products endpoint only allows mongo_id filtering server-side.
60
+ // All other filters (brand, category, collection, designer, year) are applied client-side.
61
+ // The full product list (~600 items) is fetched once and cached per CLI invocation.
62
+ let _productsCache;
63
+ async function fetchAllProducts() {
64
+ if (_productsCache)
65
+ return _productsCache;
66
+ const data = await request("products", { limit: "9999" });
67
+ const products = data.products || [];
68
+ _productsCache = products;
69
+ return products;
70
+ }
71
+ /** Apply client-side filters */
72
+ function filterProducts(products, opts) {
73
+ let result = products;
74
+ if (opts.brand) {
75
+ const b = opts.brand.toLowerCase();
76
+ result = result.filter((p) => p.brand?.some((br) => br.name?.toLowerCase().includes(b)));
77
+ }
78
+ if (opts.category) {
79
+ const c = opts.category.toLowerCase();
80
+ result = result.filter((p) => p.category?.toLowerCase().includes(c));
81
+ }
82
+ if (opts.collection) {
83
+ const col = opts.collection.toLowerCase();
84
+ result = result.filter((p) => p.collection?.toLowerCase().includes(col));
85
+ }
86
+ if (opts.designer) {
87
+ const d = opts.designer.toLowerCase();
88
+ result = result.filter((p) => p.designed_by?.some((db) => db.name?.toLowerCase().includes(d)));
89
+ }
90
+ if (opts.year) {
91
+ result = result.filter((p) => p.year === opts.year);
92
+ }
93
+ return result;
94
+ }
59
95
  export async function listProducts(opts) {
60
- const q = buildQuery({
61
- brand: opts.brand,
62
- category: opts.category,
63
- collection: opts.collection,
64
- });
65
- const data = await request("products", {
66
- ...(q && { q }),
67
- page: String(opts.page || 1),
68
- limit: String(opts.limit || 20),
69
- });
70
- return data.products || [];
96
+ const hasFilter = !!(opts.brand || opts.category || opts.collection || opts.designer || opts.year);
97
+ if (!hasFilter) {
98
+ // No filters — use server pagination directly
99
+ const data = await request("products", {
100
+ page: String(opts.page || 1),
101
+ limit: String(opts.limit || 20),
102
+ });
103
+ return data.products || [];
104
+ }
105
+ // Filters active — fetch all, filter client-side, paginate
106
+ const all = await fetchAllProducts();
107
+ let products = filterProducts(all, opts);
108
+ const page = opts.page || 1;
109
+ const limit = opts.limit || 20;
110
+ const start = (page - 1) * limit;
111
+ return products.slice(start, start + limit);
71
112
  }
72
113
  export async function searchProducts(query, opts) {
73
- const q = buildQuery({
74
- name: query,
75
- brand: opts.brand,
76
- category: opts.category,
77
- });
78
- const data = await request("products", {
79
- q,
80
- limit: String(opts.limit || 20),
81
- });
82
- return data.products || [];
114
+ const all = await fetchAllProducts();
115
+ const q = query.toLowerCase();
116
+ let products = all.filter((p) => p.name?.toLowerCase().includes(q) ||
117
+ p.asset_name?.toLowerCase().includes(q) ||
118
+ p.description?.toLowerCase().includes(q));
119
+ products = filterProducts(products, opts);
120
+ return products.slice(0, opts.limit || 20);
83
121
  }
84
122
  export async function getProduct(mongoId) {
85
123
  const data = await request("products", {
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/core/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/core/api.ts"],"names":[],"mappings":"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"}
@@ -15,4 +15,16 @@ export declare function outputDetail(data: any, opts: {
15
15
  json?: boolean;
16
16
  pretty?: boolean;
17
17
  }): void;
18
+ /** Output catalog statistics grouped by a field */
19
+ export declare function outputStats(data: any[], opts: {
20
+ json?: boolean;
21
+ pretty?: boolean;
22
+ groupBy: string;
23
+ brandFilter?: string;
24
+ }): void;
25
+ /** Output a side-by-side comparison of two products */
26
+ export declare function outputCompare(p1: any, p2: any, opts: {
27
+ json?: boolean;
28
+ pretty?: boolean;
29
+ }): void;
18
30
  export {};
@@ -67,6 +67,115 @@ export function outputDetail(data, opts) {
67
67
  printObject(data, 0);
68
68
  process.stdout.write("\n");
69
69
  }
70
+ /** Output catalog statistics grouped by a field */
71
+ export function outputStats(data, opts) {
72
+ const items = Array.isArray(data) ? data : [];
73
+ // Build counts grouped by field
74
+ const counts = {};
75
+ for (const item of items) {
76
+ let key;
77
+ switch (opts.groupBy) {
78
+ case "brand":
79
+ key = item.brand?.[0]?.name || "Unknown";
80
+ break;
81
+ case "designer":
82
+ key = item.designed_by?.[0]?.name || "Unknown";
83
+ break;
84
+ case "year":
85
+ key = item.year || "Unknown";
86
+ break;
87
+ case "category":
88
+ default:
89
+ key = item.category || "Unknown";
90
+ break;
91
+ }
92
+ counts[key] = (counts[key] || 0) + 1;
93
+ }
94
+ // Sort descending by count
95
+ const sorted = Object.entries(counts).sort((a, b) => b[1] - a[1]);
96
+ const forceJson = opts.json === true;
97
+ const forcePretty = opts.pretty === true;
98
+ const useTable = forcePretty || (!forceJson && isTTY());
99
+ if (!useTable) {
100
+ const result = {
101
+ total: items.length,
102
+ group_by: opts.groupBy,
103
+ ...(opts.brandFilter && { brand_filter: opts.brandFilter }),
104
+ groups: Object.fromEntries(sorted),
105
+ };
106
+ process.stdout.write(JSON.stringify(result, null, 2) + "\n");
107
+ return;
108
+ }
109
+ const label = opts.groupBy.charAt(0).toUpperCase() + opts.groupBy.slice(1);
110
+ const maxKeyLen = Math.max(label.length, ...sorted.map(([k]) => k.length));
111
+ const colWidth = Math.min(maxKeyLen + 2, 40);
112
+ process.stdout.write("\n");
113
+ if (opts.brandFilter) {
114
+ process.stdout.write(` Stats for brand: ${opts.brandFilter}\n`);
115
+ }
116
+ process.stdout.write(` ${label.padEnd(colWidth)}Count\n`);
117
+ process.stdout.write(` ${"─".repeat(colWidth)}${"─".repeat(8)}\n`);
118
+ for (const [key, count] of sorted) {
119
+ process.stdout.write(` ${key.padEnd(colWidth)}${String(count).padStart(5)}\n`);
120
+ }
121
+ process.stdout.write(` ${"─".repeat(colWidth)}${"─".repeat(8)}\n`);
122
+ process.stdout.write(` ${"Total".padEnd(colWidth)}${String(items.length).padStart(5)}\n\n`);
123
+ }
124
+ /** Output a side-by-side comparison of two products */
125
+ export function outputCompare(p1, p2, opts) {
126
+ const forceJson = opts.json === true;
127
+ const forcePretty = opts.pretty === true;
128
+ const useTable = forcePretty || (!forceJson && isTTY());
129
+ if (!useTable) {
130
+ process.stdout.write(JSON.stringify({ product_1: p1, product_2: p2 }, null, 2) + "\n");
131
+ return;
132
+ }
133
+ const brand1 = p1.brand?.[0]?.name || "?";
134
+ const brand2 = p2.brand?.[0]?.name || "?";
135
+ const designer1 = p1.designed_by?.[0]?.name || "-";
136
+ const designer2 = p2.designed_by?.[0]?.name || "-";
137
+ const dims1 = p1.dimensions || {};
138
+ const dims2 = p2.dimensions || {};
139
+ const parts1 = (p1.parts || []).map((p) => p.name).join(", ");
140
+ const parts2 = (p2.parts || []).map((p) => p.name).join(", ");
141
+ const finishes1 = new Set();
142
+ const finishes2 = new Set();
143
+ for (const pt of p1.parts || []) {
144
+ for (const fc of pt.finish_collections || [])
145
+ finishes1.add(fc);
146
+ }
147
+ for (const pt of p2.parts || []) {
148
+ for (const fc of pt.finish_collections || [])
149
+ finishes2.add(fc);
150
+ }
151
+ const rows = [
152
+ ["Name", p1.name || "?", p2.name || "?"],
153
+ ["Brand", brand1, brand2],
154
+ ["Category", p1.category || "?", p2.category || "?"],
155
+ ["Collection", p1.collection || "-", p2.collection || "-"],
156
+ ["Designer", designer1, designer2],
157
+ ["Year", p1.year || "-", p2.year || "-"],
158
+ ["Width (cm)", dims1.width || "?", dims2.width || "?"],
159
+ ["Length (cm)", dims1.length || "?", dims2.length || "?"],
160
+ ["Height (cm)", dims1.height || "?", dims2.height || "?"],
161
+ ["Parts", parts1 || "-", parts2 || "-"],
162
+ ["Finish options", String(finishes1.size), String(finishes2.size)],
163
+ ["Finishes", [...finishes1].join(", ") || "-", [...finishes2].join(", ") || "-"],
164
+ ["SKU", p1.sku || "-", p2.sku || "-"],
165
+ ["Spec sheet", p1.spec_sheet ? "Yes" : "No", p2.spec_sheet ? "Yes" : "No"],
166
+ ];
167
+ const labelWidth = 16;
168
+ const valWidth = 30;
169
+ process.stdout.write("\n");
170
+ process.stdout.write(` ${"".padEnd(labelWidth)}${(p1.name || "Product 1").substring(0, valWidth - 1).padEnd(valWidth)}${(p2.name || "Product 2").substring(0, valWidth - 1).padEnd(valWidth)}\n`);
171
+ process.stdout.write(` ${"─".repeat(labelWidth)}${"─".repeat(valWidth)}${"─".repeat(valWidth)}\n`);
172
+ for (const [label, v1, v2] of rows) {
173
+ const val1 = v1.substring(0, valWidth - 1).padEnd(valWidth);
174
+ const val2 = v2.substring(0, valWidth - 1).padEnd(valWidth);
175
+ process.stdout.write(` ${label.padEnd(labelWidth)}${val1}${val2}\n`);
176
+ }
177
+ process.stdout.write("\n");
178
+ }
70
179
  function printObject(obj, indent) {
71
180
  const pad = " ".repeat(indent + 1);
72
181
  for (const [key, value] of Object.entries(obj)) {
@@ -1 +1 @@
1
- {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/core/formatter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/core/formatter.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,37 +1,37 @@
1
- {
2
- "name": "r3plica",
3
- "version": "1.0.2",
4
- "description": "R3PLICA CLI — Search products, brands, collections, and finishes from the R3PLICA digital replicas catalog",
5
- "type": "module",
6
- "bin": {
7
- "r3": "dist/cli/index.js",
8
- "r3-mcp": "dist/mcp/server.js"
9
- },
10
- "scripts": {
11
- "build": "tsc",
12
- "dev": "tsc --watch",
13
- "start": "node dist/cli/index.js",
14
- "start:mcp": "node dist/mcp/server.js",
15
- "clean": "rm -rf dist",
16
- "prepublishOnly": "npm run clean && npm run build"
17
- },
18
- "keywords": ["r3plica", "cli", "furniture", "design", "architecture", "digital-replicas", "finishes", "mcp"],
19
- "author": "R3PLICA S.r.l.",
20
- "license": "Proprietary",
21
- "repository": {
22
- "type": "git",
23
- "url": "git+https://github.com/R3PLICAsrl/r3-cli.git"
24
- },
25
- "files": ["dist/**/*", "README.md", "package.json"],
26
- "dependencies": {
27
- "commander": "^13.1.0",
28
- "@modelcontextprotocol/sdk": "^1.12.1"
29
- },
30
- "devDependencies": {
31
- "typescript": "^5.8.3",
32
- "@types/node": "^22.15.24"
33
- },
34
- "engines": {
35
- "node": ">=20.0.0"
36
- }
37
- }
1
+ {
2
+ "name": "r3plica",
3
+ "version": "1.2.1",
4
+ "description": "R3PLICA CLI — Search products, brands, collections, and finishes from the R3PLICA digital replicas catalog",
5
+ "type": "module",
6
+ "bin": {
7
+ "r3": "dist/cli/index.js",
8
+ "r3-mcp": "dist/mcp/server.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "dev": "tsc --watch",
13
+ "start": "node dist/cli/index.js",
14
+ "start:mcp": "node dist/mcp/server.js",
15
+ "clean": "rm -rf dist",
16
+ "prepublishOnly": "npm run clean && npm run build"
17
+ },
18
+ "keywords": ["r3plica", "cli", "furniture", "design", "architecture", "digital-replicas", "finishes", "mcp"],
19
+ "author": "R3PLICA S.r.l.",
20
+ "license": "Proprietary",
21
+ "repository": {
22
+ "type": "git",
23
+ "url": "git+https://github.com/R3PLICAsrl/r3-cli.git"
24
+ },
25
+ "files": ["dist/**/*", "README.md", "package.json"],
26
+ "dependencies": {
27
+ "commander": "^13.1.0",
28
+ "@modelcontextprotocol/sdk": "^1.12.1"
29
+ },
30
+ "devDependencies": {
31
+ "typescript": "^5.8.3",
32
+ "@types/node": "^22.15.24"
33
+ },
34
+ "engines": {
35
+ "node": ">=20.0.0"
36
+ }
37
+ }