@newpeak/barista-cli 0.2.314 → 0.2.325

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 (80) hide show
  1. package/dist/commands/liberica/client-price/create.d.ts.map +1 -1
  2. package/dist/commands/liberica/client-price/create.js +163 -33
  3. package/dist/commands/liberica/client-price/create.js.map +1 -1
  4. package/dist/commands/liberica/client-price/list.d.ts.map +1 -1
  5. package/dist/commands/liberica/client-price/list.js +101 -14
  6. package/dist/commands/liberica/client-price/list.js.map +1 -1
  7. package/dist/commands/liberica/finance/auto-voucher/rule/list.d.ts.map +1 -1
  8. package/dist/commands/liberica/finance/auto-voucher/rule/list.js +19 -4
  9. package/dist/commands/liberica/finance/auto-voucher/rule/list.js.map +1 -1
  10. package/dist/commands/liberica/issue/submit.d.ts.map +1 -1
  11. package/dist/commands/liberica/issue/submit.js +1 -17
  12. package/dist/commands/liberica/issue/submit.js.map +1 -1
  13. package/dist/commands/liberica/materials/create.d.ts.map +1 -1
  14. package/dist/commands/liberica/materials/create.js +18 -9
  15. package/dist/commands/liberica/materials/create.js.map +1 -1
  16. package/dist/commands/liberica/materials/get.d.ts.map +1 -1
  17. package/dist/commands/liberica/materials/get.js +4 -1
  18. package/dist/commands/liberica/materials/get.js.map +1 -1
  19. package/dist/commands/liberica/materials/list.d.ts.map +1 -1
  20. package/dist/commands/liberica/materials/list.js +2 -1
  21. package/dist/commands/liberica/materials/list.js.map +1 -1
  22. package/dist/commands/liberica/runner/__tests__/volumes.test.d.ts +2 -0
  23. package/dist/commands/liberica/runner/__tests__/volumes.test.d.ts.map +1 -0
  24. package/dist/commands/liberica/runner/__tests__/volumes.test.js +83 -0
  25. package/dist/commands/liberica/runner/__tests__/volumes.test.js.map +1 -0
  26. package/dist/commands/liberica/runner/images/add.d.ts.map +1 -1
  27. package/dist/commands/liberica/runner/images/add.js +17 -1
  28. package/dist/commands/liberica/runner/images/add.js.map +1 -1
  29. package/dist/commands/liberica/runner/images/edit.d.ts.map +1 -1
  30. package/dist/commands/liberica/runner/images/edit.js +17 -1
  31. package/dist/commands/liberica/runner/images/edit.js.map +1 -1
  32. package/dist/commands/liberica/runner/jobs/add.d.ts.map +1 -1
  33. package/dist/commands/liberica/runner/jobs/add.js +17 -1
  34. package/dist/commands/liberica/runner/jobs/add.js.map +1 -1
  35. package/dist/commands/liberica/runner/volumes.d.ts +38 -0
  36. package/dist/commands/liberica/runner/volumes.d.ts.map +1 -0
  37. package/dist/commands/liberica/runner/volumes.js +80 -0
  38. package/dist/commands/liberica/runner/volumes.js.map +1 -0
  39. package/dist/commands/liberica/sales-orders/list.d.ts.map +1 -1
  40. package/dist/commands/liberica/sales-orders/list.js +101 -2
  41. package/dist/commands/liberica/sales-orders/list.js.map +1 -1
  42. package/dist/commands/liberica/supplier-contacts/create.js +1 -1
  43. package/dist/commands/liberica/supplier-contacts/create.js.map +1 -1
  44. package/dist/commands/liberica/teams/issues/create.d.ts.map +1 -1
  45. package/dist/commands/liberica/teams/issues/create.js +4 -2
  46. package/dist/commands/liberica/teams/issues/create.js.map +1 -1
  47. package/dist/commands/liberica/teams/tasks/create.d.ts.map +1 -1
  48. package/dist/commands/liberica/teams/tasks/create.js +50 -3
  49. package/dist/commands/liberica/teams/tasks/create.js.map +1 -1
  50. package/dist/commands/liberica/transfer-in-forms/create.d.ts.map +1 -1
  51. package/dist/commands/liberica/transfer-in-forms/create.js +15 -2
  52. package/dist/commands/liberica/transfer-in-forms/create.js.map +1 -1
  53. package/dist/commands/liberica/transfer-in-forms/get.d.ts.map +1 -1
  54. package/dist/commands/liberica/transfer-in-forms/get.js +2 -0
  55. package/dist/commands/liberica/transfer-in-forms/get.js.map +1 -1
  56. package/dist/commands/liberica/transfer-in-forms/list.d.ts.map +1 -1
  57. package/dist/commands/liberica/transfer-in-forms/list.js +3 -1
  58. package/dist/commands/liberica/transfer-in-forms/list.js.map +1 -1
  59. package/dist/core/api/client.d.ts.map +1 -1
  60. package/dist/core/api/client.js +55 -0
  61. package/dist/core/api/client.js.map +1 -1
  62. package/dist/utils/employee-resolve.d.ts +23 -0
  63. package/dist/utils/employee-resolve.d.ts.map +1 -0
  64. package/dist/utils/employee-resolve.js +59 -0
  65. package/dist/utils/employee-resolve.js.map +1 -0
  66. package/dist/utils/material-format.d.ts +8 -0
  67. package/dist/utils/material-format.d.ts.map +1 -0
  68. package/dist/utils/material-format.js +56 -0
  69. package/dist/utils/material-format.js.map +1 -0
  70. package/dist/utils/retry.d.ts +14 -0
  71. package/dist/utils/retry.d.ts.map +1 -0
  72. package/dist/utils/retry.js +20 -0
  73. package/dist/utils/retry.js.map +1 -0
  74. package/dist/utils/scheduled-finish-date.d.ts +7 -0
  75. package/dist/utils/scheduled-finish-date.d.ts.map +1 -0
  76. package/dist/utils/scheduled-finish-date.js +18 -0
  77. package/dist/utils/scheduled-finish-date.js.map +1 -0
  78. package/package.json +1 -1
  79. package/skills/barista-cli/data/commands.json +3 -2
  80. package/skills/barista-cli/data/commands.yaml +2 -1
@@ -0,0 +1,23 @@
1
+ import { Environment } from '../types/index.js';
2
+ export interface EmployeeLookupResponse {
3
+ success: boolean;
4
+ data?: unknown;
5
+ }
6
+ export interface EmployeeResolverClient {
7
+ getEmployee(environment: Environment, tenant: string, employeeId: string): Promise<EmployeeLookupResponse>;
8
+ getEmployeeByCode(environment: Environment, tenant: string, employeeCode: string): Promise<EmployeeLookupResponse>;
9
+ }
10
+ export interface ResolvedEmployee {
11
+ employeeId?: string;
12
+ employeeCode?: string;
13
+ employeeName?: string;
14
+ }
15
+ export interface FollowerNameRecord {
16
+ follower?: string | null;
17
+ followerName?: string | null;
18
+ }
19
+ export declare function isSnowflakeId(reference: string): boolean;
20
+ export declare function needsFollowerNameResolution(follower?: string | null, followerName?: string | null): boolean;
21
+ export declare function resolveEmployeeByReference(client: EmployeeResolverClient, environment: Environment, tenant: string, reference: string): Promise<ResolvedEmployee | undefined>;
22
+ export declare function applyFollowerNames(client: EmployeeResolverClient, environment: Environment, tenant: string, records: FollowerNameRecord[]): Promise<void>;
23
+ //# sourceMappingURL=employee-resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"employee-resolve.d.ts","sourceRoot":"","sources":["../../src/utils/employee-resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAC3G,iBAAiB,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;CACpH;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,EACxB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAC3B,OAAO,CAaT;AAED,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,sBAAsB,EAC9B,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAuBvC;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,sBAAsB,EAC9B,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,kBAAkB,EAAE,GAC5B,OAAO,CAAC,IAAI,CAAC,CAgBf"}
@@ -0,0 +1,59 @@
1
+ export function isSnowflakeId(reference) {
2
+ return /^\d{15,}$/.test(reference.trim());
3
+ }
4
+ export function needsFollowerNameResolution(follower, followerName) {
5
+ if (!follower || follower.trim() === '') {
6
+ return false;
7
+ }
8
+ const reference = follower.trim();
9
+ const name = (followerName || '').trim();
10
+ if (name === '') {
11
+ return true;
12
+ }
13
+ if (name === reference) {
14
+ return true;
15
+ }
16
+ return /^\d{4,}$/.test(name);
17
+ }
18
+ export async function resolveEmployeeByReference(client, environment, tenant, reference) {
19
+ const value = reference.trim();
20
+ if (value === '') {
21
+ return undefined;
22
+ }
23
+ const attempts = isSnowflakeId(value) ? ['id', 'code'] : ['code', 'id'];
24
+ for (const attempt of attempts) {
25
+ try {
26
+ const response = attempt === 'id'
27
+ ? await client.getEmployee(environment, tenant, value)
28
+ : await client.getEmployeeByCode(environment, tenant, value);
29
+ const data = response && response.success && response.data && typeof response.data === 'object'
30
+ ? response.data
31
+ : undefined;
32
+ if (data && typeof data.employeeId === 'string') {
33
+ return data;
34
+ }
35
+ }
36
+ catch {
37
+ // Try the next lookup strategy.
38
+ }
39
+ }
40
+ return undefined;
41
+ }
42
+ export async function applyFollowerNames(client, environment, tenant, records) {
43
+ const cache = new Map();
44
+ for (const record of records) {
45
+ if (!needsFollowerNameResolution(record.follower, record.followerName)) {
46
+ continue;
47
+ }
48
+ const reference = record.follower.trim();
49
+ if (!cache.has(reference)) {
50
+ const employee = await resolveEmployeeByReference(client, environment, tenant, reference);
51
+ cache.set(reference, employee?.employeeName);
52
+ }
53
+ const name = cache.get(reference);
54
+ if (name) {
55
+ record.followerName = name;
56
+ }
57
+ }
58
+ }
59
+ //# sourceMappingURL=employee-resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"employee-resolve.js","sourceRoot":"","sources":["../../src/utils/employee-resolve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface MaterialPriceFields {
2
+ unitPrice?: number | string | null;
3
+ unitPriceWrapper?: string | null;
4
+ currency?: string | null;
5
+ }
6
+ export declare function formatUnitPrice(unitPrice: number, currency?: string | null): string;
7
+ export declare function normalizeUnitPriceWrapper<T extends MaterialPriceFields>(record: T): T;
8
+ //# sourceMappingURL=material-format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"material-format.d.ts","sourceRoot":"","sources":["../../src/utils/material-format.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACnC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAgCD,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CASnF;AAED,wBAAgB,yBAAyB,CAAC,CAAC,SAAS,mBAAmB,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAsBrF"}
@@ -0,0 +1,56 @@
1
+ const CURRENCY_SYMBOLS = {
2
+ USD: '$',
3
+ CNY: '¥',
4
+ JPY: '¥',
5
+ EUR: '€',
6
+ HKD: 'HK$',
7
+ VND: '₫',
8
+ LAK: '₭',
9
+ };
10
+ function parseNumber(value) {
11
+ if (typeof value === 'number') {
12
+ return Number.isFinite(value) ? value : null;
13
+ }
14
+ if (typeof value === 'string' && value.trim() !== '') {
15
+ const parsed = Number(value);
16
+ return Number.isFinite(parsed) ? parsed : null;
17
+ }
18
+ return null;
19
+ }
20
+ function extractFirstNumber(value) {
21
+ const match = value.match(/-?\d[\d,]*(?:\.\d+)?/);
22
+ if (!match) {
23
+ return null;
24
+ }
25
+ const parsed = Number(match[0].replace(/,/g, ''));
26
+ return Number.isFinite(parsed) ? parsed : null;
27
+ }
28
+ export function formatUnitPrice(unitPrice, currency) {
29
+ const rounded = Math.round((unitPrice + Number.EPSILON) * 100) / 100;
30
+ const body = rounded.toFixed(2);
31
+ const code = (currency || '').toUpperCase();
32
+ if (!code) {
33
+ return body;
34
+ }
35
+ const symbol = CURRENCY_SYMBOLS[code];
36
+ return symbol ? `${symbol}${body}` : `${code} ${body}`;
37
+ }
38
+ export function normalizeUnitPriceWrapper(record) {
39
+ const unitPrice = parseNumber(record.unitPrice);
40
+ if (unitPrice === null) {
41
+ return record;
42
+ }
43
+ const currency = typeof record.currency === 'string' && record.currency.trim() !== ''
44
+ ? record.currency
45
+ : undefined;
46
+ if (currency) {
47
+ return { ...record, unitPriceWrapper: formatUnitPrice(unitPrice, currency) };
48
+ }
49
+ const wrapper = typeof record.unitPriceWrapper === 'string' ? record.unitPriceWrapper : '';
50
+ const wrapperNumber = extractFirstNumber(wrapper);
51
+ if (wrapperNumber !== null && Math.abs(wrapperNumber - unitPrice) < 0.005) {
52
+ return record;
53
+ }
54
+ return { ...record, unitPriceWrapper: formatUnitPrice(unitPrice) };
55
+ }
56
+ //# sourceMappingURL=material-format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"material-format.js","sourceRoot":"","sources":["../../src/utils/material-format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export interface RetryableApiResult {
2
+ success: boolean;
3
+ error?: {
4
+ code?: string;
5
+ message?: string;
6
+ };
7
+ }
8
+ export interface RetryOptions {
9
+ maxRetries?: number;
10
+ delaysMs?: number[];
11
+ retryableCodes?: string[];
12
+ }
13
+ export declare function retryOnTransientError<T extends RetryableApiResult>(operation: () => Promise<T>, options?: RetryOptions): Promise<T>;
14
+ //# sourceMappingURL=retry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QACN,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAID,wBAAsB,qBAAqB,CAAC,CAAC,SAAS,kBAAkB,EACtE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,CAAC,CAAC,CAsBZ"}
@@ -0,0 +1,20 @@
1
+ const DEFAULT_RETRYABLE_CODES = ['SERVICE_UNAVAILABLE'];
2
+ export async function retryOnTransientError(operation, options = {}) {
3
+ const maxRetries = options.maxRetries ?? 2;
4
+ const delays = options.delaysMs ?? [1000, 3000];
5
+ const retryableCodes = new Set(options.retryableCodes ?? DEFAULT_RETRYABLE_CODES);
6
+ let result = await operation();
7
+ for (let attempt = 0; attempt < maxRetries; attempt++) {
8
+ const code = result.error?.code;
9
+ if (result.success || !code || !retryableCodes.has(code)) {
10
+ return result;
11
+ }
12
+ const delay = delays[Math.min(attempt, delays.length - 1)] ?? 0;
13
+ if (delay > 0) {
14
+ await new Promise((resolve) => setTimeout(resolve, delay));
15
+ }
16
+ result = await operation();
17
+ }
18
+ return result;
19
+ }
20
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAcA,MAAM,uBAAuB,GAAG,CAAC,qBAAqB,CAAC,CAAC;AAExD,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,SAA2B,EAC3B,UAAwB,EAAE;IAE1B,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAChD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,cAAc,IAAI,uBAAuB,CAAC,CAAC;IAElF,IAAI,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;IAE/B,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;QACtD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC;QAChC,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACzD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAChE,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;IAC7B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { TeamIssuePriority } from '../types/team-issue.js';
2
+ /**
3
+ * Mirror the backend DefaultScheduledFinishDatePolicy: URGENT/HIGH +7 working
4
+ * days, LOW +14, everything else +10 (weekends skipped).
5
+ */
6
+ export declare function calculateDefaultScheduledFinishDate(priority?: TeamIssuePriority | string): string;
7
+ //# sourceMappingURL=scheduled-finish-date.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduled-finish-date.d.ts","sourceRoot":"","sources":["../../src/utils/scheduled-finish-date.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D;;;GAGG;AACH,wBAAgB,mCAAmC,CAAC,QAAQ,CAAC,EAAE,iBAAiB,GAAG,MAAM,GAAG,MAAM,CAWjG"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Mirror the backend DefaultScheduledFinishDatePolicy: URGENT/HIGH +7 working
3
+ * days, LOW +14, everything else +10 (weekends skipped).
4
+ */
5
+ export function calculateDefaultScheduledFinishDate(priority) {
6
+ const normalized = (priority || 'MEDIUM').toUpperCase();
7
+ const workingDays = normalized === 'URGENT' || normalized === 'HIGH' ? 7 : normalized === 'LOW' ? 14 : 10;
8
+ const date = new Date();
9
+ let counted = 0;
10
+ while (counted < workingDays) {
11
+ date.setDate(date.getDate() + 1);
12
+ const day = date.getDay();
13
+ if (day !== 0 && day !== 6)
14
+ counted++;
15
+ }
16
+ return date.toISOString().slice(0, 10);
17
+ }
18
+ //# sourceMappingURL=scheduled-finish-date.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduled-finish-date.js","sourceRoot":"","sources":["../../src/utils/scheduled-finish-date.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,mCAAmC,CAAC,QAAqC;IACvF,MAAM,UAAU,GAAG,CAAC,QAAQ,IAAI,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IACxD,MAAM,WAAW,GAAG,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1G,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;IACxB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,OAAO,OAAO,GAAG,WAAW,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC1B,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;IACxC,CAAC;IACD,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@newpeak/barista-cli",
3
- "version": "0.2.314",
3
+ "version": "0.2.325",
4
4
  "description": "AI Tools CLI for Liberica and Arabica services",
5
5
  "license": "MIT",
6
6
  "keywords": [
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "_metadata": {
3
- "generatedAt": "2026-11-03T08:34:12.173Z",
3
+ "generatedAt": "2026-11-05T03:10:07.891Z",
4
4
  "source": "src/commands/",
5
5
  "generator": "src/skills/barista-cli/scripts/generate.ts"
6
6
  },
@@ -3950,7 +3950,8 @@
3950
3950
  "description": "List runner type candidates, or remove a type from a runner",
3951
3951
  "json": true,
3952
3952
  "dry-run": true
3953
- }
3953
+ },
3954
+ "volumes": {}
3954
3955
  }
3955
3956
  },
3956
3957
  "runner/images": {
@@ -1,5 +1,5 @@
1
1
  # ★ 自动生成。修改源码后重新生成:npm run generate-skills-data
2
- # ★ 生成时间: 2026-11-03T08:34:12.181Z
2
+ # ★ 生成时间: 2026-11-05T03:10:07.900Z
3
3
 
4
4
  global:
5
5
  # ── 全局 ──
@@ -2549,6 +2549,7 @@ liberica:
2549
2549
  runner-types:
2550
2550
  description: "List runner type candidates, or remove a type from a runner"
2551
2551
  options: [--json, --dry-run]
2552
+ volumes:
2552
2553
  runner/images:
2553
2554
  group: "其他"
2554
2555
  description: "Manage agent images"