@newpeak/barista-cli 0.1.131 → 0.1.133

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 (34) hide show
  1. package/README.md +78 -63
  2. package/dist/commands/liberica/issue/close.d.ts +3 -0
  3. package/dist/commands/liberica/issue/close.d.ts.map +1 -0
  4. package/dist/commands/liberica/issue/close.js +87 -0
  5. package/dist/commands/liberica/issue/close.js.map +1 -0
  6. package/dist/commands/liberica/issue/index.d.ts.map +1 -1
  7. package/dist/commands/liberica/issue/index.js +4 -0
  8. package/dist/commands/liberica/issue/index.js.map +1 -1
  9. package/dist/commands/liberica/issue/reopen.d.ts +3 -0
  10. package/dist/commands/liberica/issue/reopen.d.ts.map +1 -0
  11. package/dist/commands/liberica/issue/reopen.js +87 -0
  12. package/dist/commands/liberica/issue/reopen.js.map +1 -0
  13. package/dist/commands/skills/index.d.ts +3 -0
  14. package/dist/commands/skills/index.d.ts.map +1 -0
  15. package/dist/commands/skills/index.js +252 -0
  16. package/dist/commands/skills/index.js.map +1 -0
  17. package/dist/core/api/client.d.ts +9 -1
  18. package/dist/core/api/client.d.ts.map +1 -1
  19. package/dist/core/api/client.js +58 -0
  20. package/dist/core/api/client.js.map +1 -1
  21. package/dist/index.js +2 -0
  22. package/dist/index.js.map +1 -1
  23. package/dist/skills/barista-cli/scripts/generate.d.ts +12 -0
  24. package/dist/skills/barista-cli/scripts/generate.d.ts.map +1 -0
  25. package/dist/skills/barista-cli/scripts/generate.js +312 -0
  26. package/dist/skills/barista-cli/scripts/generate.js.map +1 -0
  27. package/dist/types/issue-report.d.ts +74 -0
  28. package/dist/types/issue-report.d.ts.map +1 -1
  29. package/package.json +4 -2
  30. package/skills/barista-cli/SKILL.md +193 -0
  31. package/skills/barista-cli/data/commands.json +2470 -0
  32. package/skills/barista-cli/data/commands.yaml +1593 -0
  33. package/skills/barista-cli/scripts/search.py +194 -0
  34. package/skills/barista-cli/skill.json +17 -0
package/README.md CHANGED
@@ -32,7 +32,7 @@ barista liberica auth login
32
32
 
33
33
  ```typescript
34
34
  // In Claude Code / OpenCode / OpenClaw:
35
- const orders = await $`barista liberica orders list --env prod-cn --tenant your-tenant --json`
35
+ const orders = await $`barista liberica sales-orders list --env prod-cn --tenant your-tenant --json`
36
36
  const { success, data } = JSON.parse(orders.stdout)
37
37
 
38
38
  // AI parses and acts on the data
@@ -51,22 +51,26 @@ Barista CLI is designed for AI coding assistants. Every output is structured, ev
51
51
 
52
52
  ### Supported AI Tools
53
53
 
54
- | AI Tool | Integration Method | Status |
55
- |---------|-------------------|--------|
56
- | **Claude Code** | `$` backticks + `--json` | Verified |
57
- | **OpenCode** | Shell command + JSON parse | Verified |
58
- | **OpenClaw** | Shell command + JSON parse | Verified |
59
- | **Cursor** | Terminal integration | Compatible |
60
- | **Continue** | CLI subprocess | Compatible |
54
+ | AI Tool | Integration | Install Skill |
55
+ |---------|------------|--------------|
56
+ | **Claude Code** | `$` backticks + `--json` | `barista skills install --ai claude` |
57
+ | **Cursor** | Terminal + `--json` | `barista skills install --ai cursor` |
58
+ | **Trae** | SOLO mode + skill | `barista skills install --ai trae` |
59
+ | **OpenCode** | Shell + `--json` | `barista skills install --ai opencode` |
60
+ | **Windsurf** | Terminal + `--json` | `barista skills install --ai windsurf` |
61
+ | **Copilot** | Terminal + `--json` | `barista skills install --ai copilot` |
62
+ | **Roo Code** | Terminal + `--json` | `barista skills install --ai roocode` |
63
+ | **Continue** | Terminal + `--json` | `barista skills install --ai continue` |
64
+ | **Gemini CLI** | Terminal + `--json` | `barista skills install --ai gemini` |
65
+ | _Codex, Kiro, Qoder, Droid_ | Terminal + `--json` | `barista skills install --ai <name>` |
61
66
 
62
67
  ### Integration Pattern
63
68
 
64
69
  ```typescript
65
70
  // 1. Execute command with JSON output
66
- const result = await $`barista liberica orders list \
71
+ const result = await $`barista liberica sales-orders list \
67
72
  --env prod-cn \
68
73
  --tenant your-tenant \
69
- --status pending \
70
74
  --json \
71
75
  --page 1 \
72
76
  --size 50`
@@ -74,18 +78,13 @@ const result = await $`barista liberica orders list \
74
78
  // 2. Parse structured response
75
79
  const { success, data, meta } = JSON.parse(result.stdout)
76
80
 
77
- if (!success) {
78
- throw new Error(`API Error: ${meta.code || meta.error?.code} - ${meta.message || meta.error?.message}`)
79
- }
80
-
81
81
  // 3. Work with data
82
82
  const pendingOrders = data.items
83
- console.log(`Found ${data.pagination.total} pending orders`)
84
83
 
85
84
  // 4. Execute operations safely
86
85
  for (const order of pendingOrders) {
87
86
  // Always dry-run first (AI safety)
88
- const preview = await $`barista liberica orders cancel ${order.id} --dry-run`
87
+ const preview = await $`barista liberica sales-orders delete ${order.id} --dry-run`
89
88
 
90
89
  // Parse preview, verify, then execute with --force
91
90
  // ...
@@ -128,20 +127,32 @@ All JSON responses follow this structure:
128
127
  }
129
128
  ```
130
129
 
131
- ### Skills for Claude Code
130
+ ### AI Skills for Your Assistant
132
131
 
133
- Install reusable skill files:
132
+ Install the barista-cli Skill so your AI assistant knows all available commands, system quirks, and safety rules:
134
133
 
135
134
  ```bash
136
- # Skills are located at ~/.barista/claude/skills/
135
+ # Interactive install (pick your platform)
137
136
  barista skills install
137
+
138
+ # Direct install for specific AI tool
139
+ barista skills install --ai claude # → .claude/skills/barista-cli/SKILL.md
140
+ barista skills install --ai trae # → .trae/skills/barista-cli/SKILL.md
141
+ barista skills install --ai opencode # → .opencode/skills/barista-cli/SKILL.md
142
+ barista skills install --ai cursor # → .cursor/rules/barista-cli.mdc
143
+
144
+ # Global install (all projects)
145
+ barista skills install --ai claude --global
146
+
147
+ # List all supported platforms
148
+ barista skills install --list
149
+
150
+ # Search commands by intent (without the AI skill)
151
+ barista skills query "采购订单" # fuzzy search
152
+ barista skills query "入库单" --domain liberica # filter by service
138
153
  ```
139
154
 
140
- **Available skills:**
141
- - `orders.md` — Order management workflow
142
- - `products.md` — Product search and sync
143
- - `warehouses.md` — Inventory operations
144
- - `subscriptions.md` — Arabica subscription management
155
+ **The Skill covers**: Liberica 76-module production management + Arabica subscription platform, with critical traps (email login, hidden --tenant, epoch timestamps), safety rules (dry-run→force), and auto-generated command data.
145
156
 
146
157
  ---
147
158
 
@@ -159,11 +170,12 @@ barista skills install
159
170
 
160
171
  ### Enterprise Connectivity
161
172
 
162
- | Service | Capabilities |
163
- |---------|-------------|
164
- | ☕ **Liberica** | Orders, products, inventory, warehouses, production planning |
165
- | 🛒 **Arabica** | Subscription plans, billing, invoices, enterprise management |
166
- | 🔗 **Cross-Service** | Quote from order, sync between systems |
173
+ | Service | For | Capabilities |
174
+ |---------|-----|-------------|
175
+ | ☕ **Liberica** | Tenant employees | Production management: supply chain, inventory, BOM/routing, work orders, quality, finance, HR (70+ modules) |
176
+ | 🛒 **Arabica** | Members (membership) | Subscribe to Liberica: plan browsing, order placement, invoice download, enterprise registration |
177
+
178
+ > **Arabica → Liberica flow**: Register as member → register enterprise → subscribe to plan → get Liberica access → log in as employee
167
179
 
168
180
  ### Operational Safety
169
181
 
@@ -199,12 +211,17 @@ barista <service> <resource> <action> [options]
199
211
  |---------|-------------|
200
212
  | `barista context show` | Show current env/tenant context |
201
213
  | `barista context use-env <env>` | Switch environment |
202
- | `barista liberica orders list --json` | List orders (AI format) |
203
- | `barista liberica orders get <id> --json` | Get order detail |
204
- | `barista liberica orders create --dry-run ...` | Preview create |
205
- | `barista liberica products search --keyword <kw> --json` | Search products |
206
- | `barista arabica plans list --json` | List subscription plans |
207
- | `barista arabica invoices list --json` | List invoices |
214
+ | `barista context use-tenant <tenant>` | Switch tenant |
215
+ | `barista liberica auth login <env> <tenant> <user> <pass>` | Liberica login (tenant employee) |
216
+ | `barista arabica auth login <env> <account> <pass>` | Arabica login (member) |
217
+ | `barista liberica sales-orders list --json` | List sales orders |
218
+ | `barista liberica purchase-orders list --json` | List purchase orders |
219
+ | `barista liberica transfer-in-forms create --dry-run ...` | Preview stock-in |
220
+ | `barista liberica materials list --json` | List materials |
221
+ | `barista arabica plans list --json` | Browse subscription plans |
222
+ | `barista arabica subscription current --json` | Check subscription |
223
+ | `barista skills install --ai claude` | Install AI skill |
224
+ | `barista skills query "采购订单"` | Search commands by intent |
208
225
 
209
226
  **[→ Full Command Reference](./docs/commands/REFERENCE.md)**
210
227
 
@@ -216,12 +233,12 @@ barista <service> <resource> <action> [options]
216
233
 
217
234
  ```typescript
218
235
  // ❌ Wrong - executing blindly
219
- await $`barista liberica orders cancel 12345`
236
+ await $`barista liberica sales-orders delete 12345`
220
237
 
221
238
  // ✅ Correct - preview first
222
- const preview = await $`barista liberica orders cancel 12345 --dry-run`
239
+ const preview = await $`barista liberica sales-orders delete 12345 --dry-run`
223
240
  // Parse preview, verify correctness, then:
224
- await $`barista liberica orders cancel 12345 --force`
241
+ await $`barista liberica sales-orders delete 12345 --force`
225
242
  ```
226
243
 
227
244
  ### 2. Check Success Before Proceeding
@@ -276,13 +293,17 @@ environments:
276
293
  ### Authentication
277
294
 
278
295
  ```bash
279
- # Credential login (recommended)
296
+ # Liberica (tenant employee login)
280
297
  barista liberica auth login <env> <tenant> <username> <password>
298
+ barista liberica auth login # interactive prompt
281
299
 
282
- # Check auth status
283
- barista auth status
300
+ # Arabica (member login — no tenant needed)
301
+ barista arabica auth login <env> <account> <password>
302
+ barista arabica auth login # interactive prompt
303
+ barista arabica auth register # register new member account
284
304
 
285
- # Logout
305
+ # Check / logout
306
+ barista auth status
286
307
  barista auth logout --service liberica --env prod-cn
287
308
  ```
288
309
 
@@ -293,34 +314,28 @@ barista auth logout --service liberica --env prod-cn
293
314
  ### Auth Failures
294
315
 
295
316
  ```bash
296
- # Check current status
297
- barista auth status
298
-
299
- # Re-authenticate
300
- barista liberica auth login prod-cn your-tenant your-username your-password
301
-
302
- # Check context
303
- barista context show
317
+ barista auth status # check token status by env
318
+ barista liberica auth login dev tenant user pass # re-authenticate
319
+ barista context show # verify env + tenant
304
320
  ```
305
321
 
322
+ **Common login traps:**
323
+ - Email usernames must use positional args (`barista liberica auth login dev sh my@email.com pass`), not `--username`
324
+ - Liberica = tenant username + password; Arabica = account + password (no tenant)
325
+
306
326
  ### API Errors
307
327
 
308
328
  ```bash
309
- # Always use --json to get error codes
310
- barista liberica orders list --json
311
-
312
- # Error response includes requestId for debugging
313
- # "requestId": "req-abc123"
329
+ barista liberica sales-orders list --json # always --json for error codes
314
330
  ```
315
331
 
316
- ### Timeout Issues
317
-
318
- ```bash
319
- # Switch to closer environment
320
- barista context use-env dev
321
-
322
- # Or adjust timeout in config.yaml
323
- ```
332
+ | Error | Meaning | Fix |
333
+ |-------|---------|-----|
334
+ | `B0301` | Token expired | Re-login |
335
+ | `A958001` | Wrong tenant (teams) | `barista context use-tenant <correct>` then retry |
336
+ | `B0001` | Date format error | Dates must be epoch ms (use `Date.now()`), not `"YYYY-MM-DD"` |
337
+ | `A0900006` | Email username via `--username` | Use positional args instead |
338
+ | `A1506` | teams issue close needs assignee | Use `update --status CLOSED --assign-to <id>` |
324
339
 
325
340
  ---
326
341
 
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createIssueCloseCommand(): Command;
3
+ //# sourceMappingURL=close.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"close.d.ts","sourceRoot":"","sources":["../../../../src/commands/liberica/issue/close.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,wBAAgB,uBAAuB,IAAI,OAAO,CAqFjD"}
@@ -0,0 +1,87 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { apiClient } from '../../../core/api/client.js';
4
+ import { configManager } from '../../../core/config/manager.js';
5
+ export function createIssueCloseCommand() {
6
+ const cmd = new Command('close');
7
+ cmd.description('Close an issue by tracking code');
8
+ cmd
9
+ .argument('<tracking-code>', 'Tracking code (e.g., TYP-xxxxxxxx)')
10
+ .option('--reason <string>', 'Reason for closing')
11
+ .option('--dry-run', 'Preview without executing')
12
+ .option('--json', 'Output as JSON');
13
+ cmd.action(async (trackingCode, options) => {
14
+ const context = configManager.getCurrentContext();
15
+ const env = options.env || context.environment;
16
+ const tenant = options.tenant || context.tenant;
17
+ const jsonOutput = options.json === true;
18
+ const dryRun = options.dryRun === true;
19
+ if (!trackingCode) {
20
+ if (jsonOutput) {
21
+ console.log(JSON.stringify({ success: false, error: { code: 'MISSING_ARGUMENT', message: 'Tracking code is required' } }));
22
+ }
23
+ else {
24
+ console.error(chalk.red('\nError: Tracking code is required\n'));
25
+ }
26
+ process.exit(1);
27
+ }
28
+ const data = {
29
+ trackingCode,
30
+ reason: options.reason,
31
+ };
32
+ if (dryRun) {
33
+ if (jsonOutput) {
34
+ console.log(JSON.stringify({ success: true, dryRun: true, data }));
35
+ }
36
+ else {
37
+ console.log(chalk.bold('\n[DRY-RUN] No changes will be made\n'));
38
+ console.log(` ${chalk.gray('Environment:')} ${chalk.green(env)}`);
39
+ console.log(` ${chalk.gray('Tenant:')} ${chalk.green(tenant)}`);
40
+ console.log(` ${chalk.gray('Tracking Code:')} ${chalk.cyan(trackingCode)}`);
41
+ if (data.reason) {
42
+ console.log(` ${chalk.gray('Reason:')} ${data.reason}`);
43
+ }
44
+ console.log();
45
+ }
46
+ return;
47
+ }
48
+ if (!jsonOutput) {
49
+ console.log(chalk.bold('\nClosing issue...\n'));
50
+ }
51
+ const response = await apiClient.closeIssue(env, tenant, data);
52
+ if (!response.success) {
53
+ const errorMsg = response.error?.message || response.message || 'Failed to close issue';
54
+ const errorCode = response.error?.code || response.code || 'CLOSE_ERROR';
55
+ if (jsonOutput) {
56
+ console.log(JSON.stringify({ success: false, error: { code: errorCode, message: errorMsg } }));
57
+ }
58
+ else {
59
+ console.error(chalk.red(`\nFailed to close issue: ${errorMsg}`));
60
+ if (errorCode) {
61
+ console.error(chalk.gray(` Error code: ${errorCode}`));
62
+ }
63
+ console.error();
64
+ }
65
+ process.exit(1);
66
+ }
67
+ const issue = response.data;
68
+ if (jsonOutput) {
69
+ console.log(JSON.stringify({ success: true, data: issue }));
70
+ }
71
+ else {
72
+ console.log(chalk.green('\nIssue closed successfully!\n'));
73
+ if (issue?.trackingCode) {
74
+ console.log(` ${chalk.gray('Tracking Code:')} ${chalk.bold.green(issue.trackingCode)}`);
75
+ }
76
+ if (issue?.teamIssueCode)
77
+ console.log(` ${chalk.gray('Issue Code:')} ${issue.teamIssueCode}`);
78
+ if (issue?.teamIssueStatus)
79
+ console.log(` ${chalk.gray('Status:')} ${issue.teamIssueStatus}`);
80
+ if (issue?.updatedAt)
81
+ console.log(` ${chalk.gray('Updated At:')} ${issue.updatedAt}`);
82
+ console.log();
83
+ }
84
+ });
85
+ return cmd;
86
+ }
87
+ //# sourceMappingURL=close.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"close.js","sourceRoot":"","sources":["../../../../src/commands/liberica/issue/close.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/liberica/issue/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,kBAAkB,IAAI,OAAO,CAU5C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/liberica/issue/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,kBAAkB,IAAI,OAAO,CAY5C"}
@@ -2,6 +2,8 @@ import { Command } from 'commander';
2
2
  import { createIssueSubmitCommand } from './submit.js';
3
3
  import { createIssueListCommand } from './list.js';
4
4
  import { createIssueTrackCommand } from './track.js';
5
+ import { createIssueCloseCommand } from './close.js';
6
+ import { createIssueReopenCommand } from './reopen.js';
5
7
  import { createIssueValidateProjectCommand } from './validate-project.js';
6
8
  export function createIssueCommand() {
7
9
  const issueCommand = new Command('issue');
@@ -9,6 +11,8 @@ export function createIssueCommand() {
9
11
  issueCommand.addCommand(createIssueSubmitCommand());
10
12
  issueCommand.addCommand(createIssueListCommand());
11
13
  issueCommand.addCommand(createIssueTrackCommand());
14
+ issueCommand.addCommand(createIssueCloseCommand());
15
+ issueCommand.addCommand(createIssueReopenCommand());
12
16
  issueCommand.addCommand(createIssueValidateProjectCommand());
13
17
  return issueCommand;
14
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/liberica/issue/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,iCAAiC,EAAE,MAAM,uBAAuB,CAAC;AAE1E,MAAM,UAAU,kBAAkB;IAChC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1C,YAAY,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAC;IAExD,YAAY,CAAC,UAAU,CAAC,wBAAwB,EAAE,CAAC,CAAC;IACpD,YAAY,CAAC,UAAU,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAClD,YAAY,CAAC,UAAU,CAAC,uBAAuB,EAAE,CAAC,CAAC;IACnD,YAAY,CAAC,UAAU,CAAC,iCAAiC,EAAE,CAAC,CAAC;IAE7D,OAAO,YAAY,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/liberica/issue/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,iCAAiC,EAAE,MAAM,uBAAuB,CAAC;AAE1E,MAAM,UAAU,kBAAkB;IAChC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1C,YAAY,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAC;IAExD,YAAY,CAAC,UAAU,CAAC,wBAAwB,EAAE,CAAC,CAAC;IACpD,YAAY,CAAC,UAAU,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAClD,YAAY,CAAC,UAAU,CAAC,uBAAuB,EAAE,CAAC,CAAC;IACnD,YAAY,CAAC,UAAU,CAAC,uBAAuB,EAAE,CAAC,CAAC;IACnD,YAAY,CAAC,UAAU,CAAC,wBAAwB,EAAE,CAAC,CAAC;IACpD,YAAY,CAAC,UAAU,CAAC,iCAAiC,EAAE,CAAC,CAAC;IAE7D,OAAO,YAAY,CAAC;AACtB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createIssueReopenCommand(): Command;
3
+ //# sourceMappingURL=reopen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reopen.d.ts","sourceRoot":"","sources":["../../../../src/commands/liberica/issue/reopen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,wBAAgB,wBAAwB,IAAI,OAAO,CAqFlD"}
@@ -0,0 +1,87 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { apiClient } from '../../../core/api/client.js';
4
+ import { configManager } from '../../../core/config/manager.js';
5
+ export function createIssueReopenCommand() {
6
+ const cmd = new Command('reopen');
7
+ cmd.description('Reopen an issue by tracking code');
8
+ cmd
9
+ .argument('<tracking-code>', 'Tracking code (e.g., TYP-xxxxxxxx)')
10
+ .option('--reason <string>', 'Reason for reopening')
11
+ .option('--dry-run', 'Preview without executing')
12
+ .option('--json', 'Output as JSON');
13
+ cmd.action(async (trackingCode, options) => {
14
+ const context = configManager.getCurrentContext();
15
+ const env = options.env || context.environment;
16
+ const tenant = options.tenant || context.tenant;
17
+ const jsonOutput = options.json === true;
18
+ const dryRun = options.dryRun === true;
19
+ if (!trackingCode) {
20
+ if (jsonOutput) {
21
+ console.log(JSON.stringify({ success: false, error: { code: 'MISSING_ARGUMENT', message: 'Tracking code is required' } }));
22
+ }
23
+ else {
24
+ console.error(chalk.red('\nError: Tracking code is required\n'));
25
+ }
26
+ process.exit(1);
27
+ }
28
+ const data = {
29
+ trackingCode,
30
+ reason: options.reason,
31
+ };
32
+ if (dryRun) {
33
+ if (jsonOutput) {
34
+ console.log(JSON.stringify({ success: true, dryRun: true, data }));
35
+ }
36
+ else {
37
+ console.log(chalk.bold('\n[DRY-RUN] No changes will be made\n'));
38
+ console.log(` ${chalk.gray('Environment:')} ${chalk.green(env)}`);
39
+ console.log(` ${chalk.gray('Tenant:')} ${chalk.green(tenant)}`);
40
+ console.log(` ${chalk.gray('Tracking Code:')} ${chalk.cyan(trackingCode)}`);
41
+ if (data.reason) {
42
+ console.log(` ${chalk.gray('Reason:')} ${data.reason}`);
43
+ }
44
+ console.log();
45
+ }
46
+ return;
47
+ }
48
+ if (!jsonOutput) {
49
+ console.log(chalk.bold('\nReopening issue...\n'));
50
+ }
51
+ const response = await apiClient.reopenIssue(env, tenant, data);
52
+ if (!response.success) {
53
+ const errorMsg = response.error?.message || response.message || 'Failed to reopen issue';
54
+ const errorCode = response.error?.code || response.code || 'REOPEN_ERROR';
55
+ if (jsonOutput) {
56
+ console.log(JSON.stringify({ success: false, error: { code: errorCode, message: errorMsg } }));
57
+ }
58
+ else {
59
+ console.error(chalk.red(`\nFailed to reopen issue: ${errorMsg}`));
60
+ if (errorCode) {
61
+ console.error(chalk.gray(` Error code: ${errorCode}`));
62
+ }
63
+ console.error();
64
+ }
65
+ process.exit(1);
66
+ }
67
+ const issue = response.data;
68
+ if (jsonOutput) {
69
+ console.log(JSON.stringify({ success: true, data: issue }));
70
+ }
71
+ else {
72
+ console.log(chalk.green('\nIssue reopened successfully!\n'));
73
+ if (issue?.trackingCode) {
74
+ console.log(` ${chalk.gray('Tracking Code:')} ${chalk.bold.green(issue.trackingCode)}`);
75
+ }
76
+ if (issue?.teamIssueCode)
77
+ console.log(` ${chalk.gray('Issue Code:')} ${issue.teamIssueCode}`);
78
+ if (issue?.teamIssueStatus)
79
+ console.log(` ${chalk.gray('Status:')} ${issue.teamIssueStatus}`);
80
+ if (issue?.updatedAt)
81
+ console.log(` ${chalk.gray('Updated At:')} ${issue.updatedAt}`);
82
+ console.log();
83
+ }
84
+ });
85
+ return cmd;
86
+ }
87
+ //# sourceMappingURL=reopen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reopen.js","sourceRoot":"","sources":["../../../../src/commands/liberica/issue/reopen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createSkillsCommand(): Command;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/skills/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+GpC,wBAAgB,mBAAmB,IAAI,OAAO,CAsK7C"}