@closedloop-ai/cli 0.2.0 → 0.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.
Files changed (79) hide show
  1. package/CONTRIBUTING.md +437 -0
  2. package/LICENSE +21 -0
  3. package/README.md +265 -0
  4. package/docs/CLI_COMMANDS.md +505 -0
  5. package/package.json +49 -26
  6. package/packages/cli/dist/api/team.js +45 -0
  7. package/packages/cli/dist/api/team.js.map +1 -0
  8. package/{dist → packages/cli/dist}/cli.js +7 -0
  9. package/packages/cli/dist/cli.js.map +1 -0
  10. package/packages/cli/dist/commands/team.js +44 -0
  11. package/packages/cli/dist/commands/team.js.map +1 -0
  12. package/dist/cli.js.map +0 -1
  13. package/jest.config.js +0 -14
  14. package/src/__tests__/cli.test.ts +0 -44
  15. package/src/__tests__/config.test.ts +0 -38
  16. package/src/__tests__/errors.test.ts +0 -132
  17. package/src/__tests__/setup.ts +0 -21
  18. package/src/__tests__/validation.test.ts +0 -156
  19. package/src/api/auth.ts +0 -21
  20. package/src/api/feedback.ts +0 -64
  21. package/src/api/input.ts +0 -55
  22. package/src/api/usage.ts +0 -45
  23. package/src/cli.ts +0 -158
  24. package/src/commands/config.ts +0 -192
  25. package/src/commands/feedback.ts +0 -250
  26. package/src/commands/input.ts +0 -389
  27. package/src/commands/list.ts +0 -84
  28. package/src/commands/status.ts +0 -96
  29. package/src/commands/submit.ts +0 -214
  30. package/src/config/constants.ts +0 -36
  31. package/src/config/index.ts +0 -59
  32. package/src/types/index.ts +0 -119
  33. package/src/utils/errors.ts +0 -98
  34. package/src/utils/validation.ts +0 -166
  35. package/tsconfig.json +0 -25
  36. /package/{dist → packages/cli/dist}/__tests__/cli.test.js +0 -0
  37. /package/{dist → packages/cli/dist}/__tests__/cli.test.js.map +0 -0
  38. /package/{dist → packages/cli/dist}/__tests__/config.test.js +0 -0
  39. /package/{dist → packages/cli/dist}/__tests__/config.test.js.map +0 -0
  40. /package/{dist → packages/cli/dist}/__tests__/errors.test.js +0 -0
  41. /package/{dist → packages/cli/dist}/__tests__/errors.test.js.map +0 -0
  42. /package/{dist → packages/cli/dist}/__tests__/setup.js +0 -0
  43. /package/{dist → packages/cli/dist}/__tests__/setup.js.map +0 -0
  44. /package/{dist → packages/cli/dist}/__tests__/validation.test.js +0 -0
  45. /package/{dist → packages/cli/dist}/__tests__/validation.test.js.map +0 -0
  46. /package/{dist → packages/cli/dist}/api/auth.js +0 -0
  47. /package/{dist → packages/cli/dist}/api/auth.js.map +0 -0
  48. /package/{dist → packages/cli/dist}/api/feedback.js +0 -0
  49. /package/{dist → packages/cli/dist}/api/feedback.js.map +0 -0
  50. /package/{dist → packages/cli/dist}/api/input.js +0 -0
  51. /package/{dist → packages/cli/dist}/api/input.js.map +0 -0
  52. /package/{dist → packages/cli/dist}/api/usage.js +0 -0
  53. /package/{dist → packages/cli/dist}/api/usage.js.map +0 -0
  54. /package/{dist → packages/cli/dist}/commands/config.js +0 -0
  55. /package/{dist → packages/cli/dist}/commands/config.js.map +0 -0
  56. /package/{dist → packages/cli/dist}/commands/feedback.js +0 -0
  57. /package/{dist → packages/cli/dist}/commands/feedback.js.map +0 -0
  58. /package/{dist → packages/cli/dist}/commands/input.js +0 -0
  59. /package/{dist → packages/cli/dist}/commands/input.js.map +0 -0
  60. /package/{dist → packages/cli/dist}/commands/list.js +0 -0
  61. /package/{dist → packages/cli/dist}/commands/list.js.map +0 -0
  62. /package/{dist → packages/cli/dist}/commands/status.js +0 -0
  63. /package/{dist → packages/cli/dist}/commands/status.js.map +0 -0
  64. /package/{dist → packages/cli/dist}/commands/submit.js +0 -0
  65. /package/{dist → packages/cli/dist}/commands/submit.js.map +0 -0
  66. /package/{dist → packages/cli/dist}/commands/usage.js +0 -0
  67. /package/{dist → packages/cli/dist}/commands/usage.js.map +0 -0
  68. /package/{dist → packages/cli/dist}/config/constants.js +0 -0
  69. /package/{dist → packages/cli/dist}/config/constants.js.map +0 -0
  70. /package/{dist → packages/cli/dist}/config/index.js +0 -0
  71. /package/{dist → packages/cli/dist}/config/index.js.map +0 -0
  72. /package/{dist → packages/cli/dist}/types/index.js +0 -0
  73. /package/{dist → packages/cli/dist}/types/index.js.map +0 -0
  74. /package/{dist → packages/cli/dist}/utils/config.js +0 -0
  75. /package/{dist → packages/cli/dist}/utils/config.js.map +0 -0
  76. /package/{dist → packages/cli/dist}/utils/errors.js +0 -0
  77. /package/{dist → packages/cli/dist}/utils/errors.js.map +0 -0
  78. /package/{dist → packages/cli/dist}/utils/validation.js +0 -0
  79. /package/{dist → packages/cli/dist}/utils/validation.js.map +0 -0
@@ -0,0 +1,505 @@
1
+ # ClosedLoop AI CLI Commands Reference
2
+
3
+ Complete reference for all CLI commands, parameters, and user experience.
4
+
5
+ ## Table of Contents
6
+
7
+ - [Installation](#installation)
8
+ - [Configuration](#configuration)
9
+ - [How to Use API Keys](#how-to-use-api-keys)
10
+ - [Input Commands](#input-commands)
11
+ - [Feedback Commands](#feedback-commands)
12
+ - [General Commands](#general-commands)
13
+ - [Error Handling](#error-handling)
14
+ - [Examples](#examples)
15
+
16
+ ## Installation
17
+
18
+ ### Global Installation (Recommended)
19
+ ```bash
20
+ npm install -g @closedloop-ai/cli
21
+ ```
22
+
23
+ ### Local Installation
24
+ ```bash
25
+ npm install @closedloop-ai/cli
26
+ npx cl --help
27
+ ```
28
+
29
+ ### Verify Installation
30
+ ```bash
31
+ cl --version
32
+ # Output: 0.2.0
33
+ ```
34
+
35
+ ## Configuration
36
+
37
+ ### Set API Key
38
+ ```bash
39
+ cl config set --api-key your-api-key-here
40
+ ```
41
+
42
+ ### View Configuration
43
+ ```bash
44
+ cl config
45
+ # Output:
46
+ # ⚙️ Configuration:
47
+ # ────────────────────────────────────────
48
+ # API Key: ✓ Configured
49
+ # Config File: /Users/jirikobelka/.closedloop/config.json
50
+ ```
51
+
52
+ ### JSON Configuration
53
+ ```bash
54
+ cl config --json
55
+ # Output:
56
+ # {
57
+ # "success": true,
58
+ # "data": {
59
+ # "apiKey": "test-key...",
60
+ # "configFile": "/Users/jirikobelka/.closedloop/config.json",
61
+ # "configured": true
62
+ # }
63
+ # }
64
+ ```
65
+
66
+ ### Environment Variable
67
+ ```bash
68
+ export CLOSEDLOOP_API_KEY="your-api-key-here"
69
+ cl config # Will use environment variable
70
+ ```
71
+
72
+ ## Input Commands
73
+
74
+ ### Submit Customer Product Feedback
75
+
76
+ #### Basic Submission
77
+ ```bash
78
+ cl input "Your customer product feedback here"
79
+ ```
80
+
81
+ #### With Metadata
82
+ ```bash
83
+ cl input "The dashboard is confusing and hard to navigate" \
84
+ --title "Dashboard UX Issues" \
85
+ --customer "customer-123" \
86
+ --name "John Doe" \
87
+ --email "john@example.com" \
88
+ --url "https://support.example.com/ticket/456"
89
+ ```
90
+
91
+ #### Wait for Processing
92
+ ```bash
93
+ cl input "Customer complaint about performance" --wait
94
+ # Shows real-time processing status
95
+ ```
96
+
97
+ #### JSON Output
98
+ ```bash
99
+ cl input "Great product, love the new features!" --json
100
+ # Output: {"id":"74e3dd87-878f-41cf-8e5a-87527bbf7770","status":"submitted"}
101
+ ```
102
+
103
+ ### List Customer Inputs
104
+
105
+ #### Basic List
106
+ ```bash
107
+ cl input
108
+ # Shows table of recent inputs
109
+ ```
110
+
111
+ #### With Pagination
112
+ ```bash
113
+ cl input --page 2 --limit 10
114
+ # Shows page 2 with 10 items per page
115
+ ```
116
+
117
+ #### JSON Output
118
+ ```bash
119
+ cl input --json
120
+ # Output: {"data":[...],"pagination":{...}}
121
+ ```
122
+
123
+ ### View Specific Input
124
+
125
+ #### By ID
126
+ ```bash
127
+ cl input 74e3dd87-878f-41cf-8e5a-87527bbf7770
128
+ # Shows detailed input information
129
+ ```
130
+
131
+ #### JSON Output
132
+ ```bash
133
+ cl input 74e3dd87-878f-41cf-8e5a-87527bbf7770 --json
134
+ # Output: {"id":"...","content":"...","status":"..."}
135
+ ```
136
+
137
+ ### Input Parameters
138
+
139
+ | Parameter | Type | Required | Description | Example |
140
+ |-----------|------|----------|-------------|---------|
141
+ | `content` | string | Yes | Customer product feedback content | `"The app crashes when uploading files"` |
142
+ | `--title` | string | No | Title for the feedback | `"File Upload Issue"` |
143
+ | `--customer` | string | No | Customer identifier | `"customer-123"` |
144
+ | `--name` | string | No | Reporter name | `"John Doe"` |
145
+ | `--email` | string | No | Reporter email | `"john@example.com"` |
146
+ | `--url` | string | No | Source URL | `"https://support.example.com/ticket/456"` |
147
+ | `--wait` | flag | No | Wait for processing to complete | `--wait` |
148
+ | `--json` | flag | No | Output in JSON format | `--json` |
149
+ | `--page` | number | No | Page number for listing | `--page 2` |
150
+ | `--limit` | number | No | Items per page (max 100) | `--limit 20` |
151
+
152
+ ## Feedback Commands
153
+
154
+ ### List AI-Generated Insights
155
+
156
+ #### Basic List
157
+ ```bash
158
+ cl feedback
159
+ # Shows table of AI-generated insights
160
+ ```
161
+
162
+ #### With Pagination
163
+ ```bash
164
+ cl feedback --page 2 --limit 5
165
+ # Shows page 2 with 5 items per page
166
+ ```
167
+
168
+ #### JSON Output
169
+ ```bash
170
+ cl feedback --json
171
+ # Output: {"data":[...],"pagination":{...}}
172
+ ```
173
+
174
+ ### View Specific Insight
175
+
176
+ #### By ID
177
+ ```bash
178
+ cl feedback 2ea8f556-052b-4f5c-bf86-833780b3d00d
179
+ # Shows detailed insight information
180
+ ```
181
+
182
+ #### JSON Output
183
+ ```bash
184
+ cl feedback 2ea8f556-052b-4f5c-bf86-833780b3d00d --json
185
+ # Output: {"id":"...","title":"...","content":"..."}
186
+ ```
187
+
188
+ ### Feedback Parameters
189
+
190
+ | Parameter | Type | Required | Description | Example |
191
+ |-----------|------|----------|-------------|---------|
192
+ | `id` | string | Yes* | Insight ID for detailed view | `2ea8f556-052b-4f5c-bf86-833780b3d00d` |
193
+ | `--page` | number | No | Page number for listing | `--page 2` |
194
+ | `--limit` | number | No | Items per page (max 100) | `--limit 20` |
195
+ | `--json` | flag | No | Output in JSON format | `--json` |
196
+
197
+ *Required only for detailed view
198
+
199
+ ## Team Commands
200
+
201
+ ### Update Team Website
202
+
203
+ #### Basic Update
204
+ ```bash
205
+ cl team website update "https://example.com"
206
+ # Output: Team website updated successfully
207
+ # Website: https://example.com
208
+ # Updated: 2024-01-15T10:30:00Z
209
+ ```
210
+
211
+ #### With Validation
212
+ ```bash
213
+ cl team website update "https://mycompany.com"
214
+ # Output: Team website updated successfully
215
+ # Website: https://mycompany.com
216
+ # Updated: 2024-01-15T10:30:00Z
217
+ ```
218
+
219
+ ### Team Management
220
+ ```bash
221
+ cl team
222
+ # Shows available team management commands
223
+ ```
224
+
225
+ ### Team Parameters
226
+
227
+ | Parameter | Type | Required | Description | Example |
228
+ |-----------|------|----------|-------------|---------|
229
+ | `website` | string | Yes | Team website URL (must include http:// or https://) | `"https://example.com"` |
230
+
231
+ ### Team Error Handling
232
+
233
+ #### Invalid Website URL
234
+ ```bash
235
+ cl team website update "invalid-url"
236
+ # Error: Invalid website URL format. Must include protocol (http:// or https://) and domain
237
+ ```
238
+
239
+ #### Missing API Key
240
+ ```bash
241
+ cl team website update "https://example.com"
242
+ # Error: API key not configured. Run: cl config set --api-key <key>
243
+ ```
244
+
245
+ ## General Commands
246
+
247
+ ### Version
248
+ ```bash
249
+ cl --version
250
+ # Output: 0.2.0
251
+
252
+ cl version
253
+ # Output: 0.2.0
254
+ ```
255
+
256
+ ### Help
257
+ ```bash
258
+ cl --help
259
+ # Shows main help
260
+
261
+ cl help
262
+ # Shows main help
263
+
264
+ cl help input
265
+ # Shows input command help
266
+
267
+ cl help feedback
268
+ # Shows feedback command help
269
+ ```
270
+
271
+ ### Help Parameters
272
+
273
+ | Command | Description | Example |
274
+ |---------|-------------|---------|
275
+ | `cl --help` | Main help with all commands | `cl --help` |
276
+ | `cl help <command>` | Specific command help | `cl help input` |
277
+
278
+ ## Error Handling
279
+
280
+ ### Common Error Messages
281
+
282
+ #### No API Key
283
+ ```bash
284
+ cl input "Test feedback"
285
+ # Error: 🔑 No API key configured!
286
+ #
287
+ # To get started:
288
+ # 1. Go to https://closedloop.sh
289
+ # 2. Sign up for a free account
290
+ # 3. Generate your API key
291
+ # 4. Run: cl config --set-api-key <your-key>
292
+ ```
293
+
294
+ #### Invalid API Key
295
+ ```bash
296
+ cl input "Test feedback"
297
+ # Error: ❌ Invalid API key. Get your free API key at https://closedloop.sh
298
+ ```
299
+
300
+ #### Validation Error
301
+ ```bash
302
+ cl input ""
303
+ # Error: ❌ Validation Error: Content cannot be empty
304
+ ```
305
+
306
+ #### API Error
307
+ ```bash
308
+ cl input "Test feedback"
309
+ # Error: ❌ API Error: 500 - Internal server error
310
+ ```
311
+
312
+ ### Error Codes
313
+
314
+ | Code | Description | Solution |
315
+ |------|-------------|----------|
316
+ | `NO_API_KEY` | No API key configured | Run `cl config set --api-key <key>` |
317
+ | `INVALID_API_KEY` | API key is invalid | Get new key from https://closedloop.sh |
318
+ | `VALIDATION_ERROR` | Input validation failed | Check input format and requirements |
319
+ | `API_ERROR` | Server error | Check internet connection, try again later |
320
+ | `RATE_LIMITED` | Too many requests | Wait and retry |
321
+ | `NOT_FOUND` | Resource not found | Check ID is correct |
322
+
323
+ ## Examples
324
+
325
+ ### Basic Workflow
326
+ ```bash
327
+ # 1. Configure API key
328
+ cl config set --api-key your-api-key-here
329
+
330
+ # 2. Submit customer product feedback
331
+ cl input "The new dashboard is confusing and hard to navigate"
332
+
333
+ # 3. Wait for AI analysis
334
+ cl input "Customer complaint about performance" --wait
335
+
336
+ # 4. View AI-generated insights
337
+ cl feedback
338
+
339
+ # 5. Get detailed insight
340
+ cl feedback 2ea8f556-052b-4f5c-bf86-833780b3d00d
341
+ ```
342
+
343
+ ### Advanced Workflow
344
+ ```bash
345
+ # 1. Submit with full metadata
346
+ cl input "Great product, love the new features!" \
347
+ --title "Positive Feedback" \
348
+ --customer "enterprise-123" \
349
+ --name "Jane Smith" \
350
+ --email "jane@example.com" \
351
+ --url "https://support.example.com/ticket/789"
352
+
353
+ # 2. List all inputs with pagination
354
+ cl input --page 1 --limit 20
355
+
356
+ # 3. Get JSON output for scripting
357
+ cl feedback --json | jq '.data[0].title'
358
+
359
+ # 4. View specific input details
360
+ cl input 74e3dd87-878f-41cf-8e5a-87527bbf7770 --json
361
+ ```
362
+
363
+ ### Scripting Examples
364
+ ```bash
365
+ #!/bin/bash
366
+ # submit-feedback.sh
367
+
368
+ # Submit feedback and get ID
369
+ ID=$(cl input "$1" --json | jq -r '.id')
370
+
371
+ # Wait for processing
372
+ cl input "$ID" --wait
373
+
374
+ # Show results
375
+ cl feedback
376
+ ```
377
+
378
+ ```bash
379
+ #!/bin/bash
380
+ # get-insights.sh
381
+
382
+ # Get all insights in JSON format
383
+ cl feedback --json | jq '.data[] | {id: .id, title: .title, status: .status}'
384
+ ```
385
+
386
+ ## Output Formats
387
+
388
+ ### Table Format (Default)
389
+ ```
390
+ ┌─────────────────────────────────────┬─────────────────────────────┬─────────────┬─────────────┐
391
+ │ ID │ Title │ Status │ Created │
392
+ ├─────────────────────────────────────┼─────────────────────────────┼─────────────┼─────────────┤
393
+ │ 74e3dd87-878f-41cf-8e5a-87527bbf7770 │ Dashboard UX Issues │ completed │ 2024-01-15 │
394
+ │ 2ea8f556-052b-4f5c-bf86-833780b3d00d │ Performance Problems │ processing │ 2024-01-15 │
395
+ └─────────────────────────────────────┴─────────────────────────────┴─────────────┴─────────────┘
396
+ ```
397
+
398
+ ### JSON Format
399
+ ```json
400
+ {
401
+ "data": [
402
+ {
403
+ "id": "74e3dd87-878f-41cf-8e5a-87527bbf7770",
404
+ "title": "Dashboard UX Issues",
405
+ "content": "The new dashboard is confusing...",
406
+ "status": "completed",
407
+ "created_at": "2024-01-15T10:30:00Z"
408
+ }
409
+ ],
410
+ "pagination": {
411
+ "page": 1,
412
+ "limit": 20,
413
+ "total": 1,
414
+ "pages": 1
415
+ }
416
+ }
417
+ ```
418
+
419
+ ## Best Practices
420
+
421
+ ### 1. Use Descriptive Titles
422
+ ```bash
423
+ # Good
424
+ cl input "The app crashes when uploading files" --title "File Upload Crash"
425
+
426
+ # Bad
427
+ cl input "App broken" --title "Issue"
428
+ ```
429
+
430
+ ### 2. Include Customer Context
431
+ ```bash
432
+ # Good
433
+ cl input "Feature request" --customer "enterprise-123" --name "John Doe"
434
+
435
+ # Bad
436
+ cl input "Feature request"
437
+ ```
438
+
439
+ ### 3. Use JSON for Scripting
440
+ ```bash
441
+ # Good
442
+ cl feedback --json | jq '.data[0].title'
443
+
444
+ # Bad
445
+ cl feedback | grep "Title"
446
+ ```
447
+
448
+ ### 4. Handle Errors Gracefully
449
+ ```bash
450
+ #!/bin/bash
451
+ if ! cl input "$1" --wait; then
452
+ echo "Failed to submit feedback"
453
+ exit 1
454
+ fi
455
+ ```
456
+
457
+ ### 5. Use Pagination for Large Datasets
458
+ ```bash
459
+ # Good
460
+ cl input --page 1 --limit 50
461
+
462
+ # Bad
463
+ cl input # Might show too much data
464
+ ```
465
+
466
+ ## Troubleshooting
467
+
468
+ ### CLI Not Found
469
+ ```bash
470
+ # Check if installed globally
471
+ npm list -g @closedloop-ai/cli
472
+
473
+ # Reinstall if needed
474
+ npm install -g @closedloop-ai/cli
475
+ ```
476
+
477
+ ### Permission Denied
478
+ ```bash
479
+ # Fix npm permissions
480
+ sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
481
+ ```
482
+
483
+ ### API Key Not Working
484
+ ```bash
485
+ # Check configuration
486
+ cl config
487
+
488
+ # Reset API key
489
+ cl config set --api-key your-new-key-here
490
+ ```
491
+
492
+ ### Slow Performance
493
+ ```bash
494
+ # Check internet connection
495
+ ping mcp.closedloop.sh
496
+
497
+ # Try with smaller batches
498
+ cl input --limit 10
499
+ ```
500
+
501
+ ## Support
502
+
503
+ - **Documentation**: [https://docs.closedloop.sh](https://docs.closedloop.sh)
504
+ - **GitHub Issues**: [https://github.com/closed-loop-ai/closedloop-cli/issues](https://github.com/closed-loop-ai/closedloop-cli/issues)
505
+ - **Email**: support@closedloop.sh
package/package.json CHANGED
@@ -1,42 +1,65 @@
1
1
  {
2
2
  "name": "@closedloop-ai/cli",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "ClosedLoop AI CLI - AI-powered customer product feedback analysis tool",
5
- "main": "dist/cli.js",
6
5
  "bin": {
7
- "cl": "./dist/cli.js"
6
+ "cl": "./packages/cli/dist/cli.js"
8
7
  },
9
8
  "scripts": {
10
- "build": "tsc",
11
- "test": "jest",
12
- "lint": "eslint src/**/*.ts",
13
- "clean": "rm -rf dist"
14
- },
15
- "dependencies": {
16
- "commander": "^11.0.0",
17
- "axios": "^1.6.0",
18
- "chalk": "^4.1.2",
19
- "ora": "^5.4.1",
20
- "inquirer": "^8.2.6",
21
- "table": "^6.8.1"
22
- },
23
- "devDependencies": {
24
- "@types/node": "^20.0.0",
25
- "@types/inquirer": "^8.2.0",
26
- "typescript": "^5.0.0",
27
- "jest": "^29.0.0",
28
- "ts-jest": "^29.0.0"
9
+ "build": "npm run build:cli",
10
+ "build:cli": "cd packages/cli && npm run build",
11
+ "test": "npm run test:cli",
12
+ "test:cli": "cd packages/cli && npm test",
13
+ "lint": "npm run lint:cli",
14
+ "lint:cli": "cd packages/cli && npm run lint",
15
+ "clean": "npm run clean:cli",
16
+ "clean:cli": "cd packages/cli && npm run clean",
17
+ "release": "npm run build && npm run test && npm publish",
18
+ "prepare": "npm run build"
29
19
  },
30
20
  "keywords": [
31
- "closedloop",
32
21
  "cli",
33
22
  "command-line",
34
23
  "ai",
35
24
  "feedback",
36
25
  "analysis",
26
+ "closedloop",
27
+ "typescript",
37
28
  "customer-feedback",
38
- "product-insights"
29
+ "product-insights",
30
+ "ai-analysis"
39
31
  ],
40
- "author": "ClosedLoop AI",
41
- "license": "MIT"
32
+ "author": "ClosedLoop AI <team@closedloop.sh>",
33
+ "license": "MIT",
34
+ "repository": {
35
+ "type": "git",
36
+ "url": "https://github.com/closed-loop-ai/closedloop-cli.git"
37
+ },
38
+ "bugs": {
39
+ "url": "https://github.com/closed-loop-ai/closedloop-cli/issues"
40
+ },
41
+ "homepage": "https://github.com/closed-loop-ai/closedloop-cli#readme",
42
+ "engines": {
43
+ "node": ">=16.0.0"
44
+ },
45
+ "workspaces": [
46
+ "packages/cli"
47
+ ],
48
+ "devDependencies": {
49
+ "@types/node": "^20.0.0",
50
+ "typescript": "^5.0.0",
51
+ "jest": "^29.0.0",
52
+ "@types/jest": "^29.0.0",
53
+ "eslint": "^8.0.0",
54
+ "@typescript-eslint/eslint-plugin": "^6.0.0",
55
+ "@typescript-eslint/parser": "^6.0.0",
56
+ "prettier": "^3.0.0"
57
+ },
58
+ "files": [
59
+ "packages/cli/dist/**/*",
60
+ "README.md",
61
+ "LICENSE",
62
+ "CONTRIBUTING.md",
63
+ "docs/**/*"
64
+ ]
42
65
  }
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.updateTeamWebsite = updateTeamWebsite;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const config_1 = require("../config");
9
+ const constants_1 = require("../config/constants");
10
+ const errors_1 = require("../utils/errors");
11
+ const getClient = () => {
12
+ const apiKey = config_1.config.get('apiKey');
13
+ if (!apiKey) {
14
+ throw new errors_1.CliError('API key not configured. Run: cl config set --api-key <key>', errors_1.ERROR_CODES.NO_API_KEY);
15
+ }
16
+ return axios_1.default.create({
17
+ baseURL: constants_1.CONFIG.API_BASE_URL,
18
+ headers: {
19
+ 'Authorization': `Bearer ${apiKey}`,
20
+ 'Content-Type': 'application/json',
21
+ },
22
+ timeout: 30000,
23
+ });
24
+ };
25
+ async function updateTeamWebsite(website) {
26
+ // Validate website URL format
27
+ const websiteRegex = /^https?:\/\/.+\..+/;
28
+ if (!websiteRegex.test(website)) {
29
+ throw new Error('Invalid website URL format. Must include protocol (http:// or https://) and domain');
30
+ }
31
+ try {
32
+ const client = getClient();
33
+ const response = await client.post('/team/website', {
34
+ website
35
+ });
36
+ if (!response.data.success) {
37
+ throw new Error('Failed to update team website');
38
+ }
39
+ return response.data.data;
40
+ }
41
+ catch (error) {
42
+ throw (0, errors_1.handleApiError)(error);
43
+ }
44
+ }
45
+ //# sourceMappingURL=team.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team.js","sourceRoot":"","sources":["../../src/api/team.ts"],"names":[],"mappings":";;;;;AA4BA,8CAqBC;AAjDD,kDAA0B;AAC1B,sCAAmC;AAEnC,mDAA6C;AAC7C,4CAAwE;AAOxE,MAAM,SAAS,GAAG,GAAG,EAAE;IACrB,MAAM,MAAM,GAAG,eAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAEpC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,iBAAQ,CAAC,4DAA4D,EAAE,oBAAW,CAAC,UAAU,CAAC,CAAC;IAC3G,CAAC;IAED,OAAO,eAAK,CAAC,MAAM,CAAC;QAClB,OAAO,EAAE,kBAAM,CAAC,YAAY;QAC5B,OAAO,EAAE;YACP,eAAe,EAAE,UAAU,MAAM,EAAE;YACnC,cAAc,EAAE,kBAAkB;SACnC;QACD,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;AACL,CAAC,CAAC;AAEK,KAAK,UAAU,iBAAiB,CAAC,OAAe;IACrD,8BAA8B;IAC9B,MAAM,YAAY,GAAG,oBAAoB,CAAC;IAC1C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC,CAAC;IACxG,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAA+B,eAAe,EAAE;YAChF,OAAO;SACR,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,IAAA,uBAAc,EAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC"}
@@ -9,6 +9,7 @@ const chalk_1 = __importDefault(require("chalk"));
9
9
  const input_1 = require("./commands/input");
10
10
  const feedback_1 = require("./commands/feedback");
11
11
  const config_1 = require("./commands/config");
12
+ const team_1 = require("./commands/team");
12
13
  const errors_1 = require("./utils/errors");
13
14
  // Create the main program
14
15
  const program = new commander_1.Command();
@@ -31,6 +32,9 @@ Commands:
31
32
  feedback List AI-generated feedback
32
33
  feedback <id> Show specific feedback details
33
34
 
35
+ team Manage team settings
36
+ team website update <url> Update team website
37
+
34
38
  config Show current configuration
35
39
  config set --api-key <key> Set API key
36
40
 
@@ -43,6 +47,7 @@ Examples:
43
47
  $ cl input 74e3dd87-878f-41cf-8e5a-87527bbf7770
44
48
  $ cl feedback
45
49
  $ cl feedback 2ea8f556-052b-4f5c-bf86-833780b3d00d
50
+ $ cl team website update "https://example.com"
46
51
  $ cl config set --api-key your-api-key-here
47
52
 
48
53
  Pagination:
@@ -93,6 +98,8 @@ program
93
98
  });
94
99
  // Add config command
95
100
  program.addCommand(config_1.configCommand);
101
+ // Add team command
102
+ program.addCommand(team_1.teamCommand);
96
103
  // Add version command
97
104
  program
98
105
  .command('version')
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}