@newpeak/barista-cli 0.2.315 → 0.2.326
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/dist/commands/liberica/client-price/create.d.ts.map +1 -1
- package/dist/commands/liberica/client-price/create.js +163 -33
- package/dist/commands/liberica/client-price/create.js.map +1 -1
- package/dist/commands/liberica/client-price/list.d.ts.map +1 -1
- package/dist/commands/liberica/client-price/list.js +101 -14
- package/dist/commands/liberica/client-price/list.js.map +1 -1
- package/dist/commands/liberica/finance/auto-voucher/rule/list.d.ts.map +1 -1
- package/dist/commands/liberica/finance/auto-voucher/rule/list.js +19 -4
- package/dist/commands/liberica/finance/auto-voucher/rule/list.js.map +1 -1
- package/dist/commands/liberica/issue/submit.d.ts.map +1 -1
- package/dist/commands/liberica/issue/submit.js +1 -17
- package/dist/commands/liberica/issue/submit.js.map +1 -1
- package/dist/commands/liberica/materials/create.d.ts.map +1 -1
- package/dist/commands/liberica/materials/create.js +18 -9
- package/dist/commands/liberica/materials/create.js.map +1 -1
- package/dist/commands/liberica/materials/get.d.ts.map +1 -1
- package/dist/commands/liberica/materials/get.js +4 -1
- package/dist/commands/liberica/materials/get.js.map +1 -1
- package/dist/commands/liberica/materials/list.d.ts.map +1 -1
- package/dist/commands/liberica/materials/list.js +2 -1
- package/dist/commands/liberica/materials/list.js.map +1 -1
- package/dist/commands/liberica/sales-orders/list.d.ts.map +1 -1
- package/dist/commands/liberica/sales-orders/list.js +101 -2
- package/dist/commands/liberica/sales-orders/list.js.map +1 -1
- package/dist/commands/liberica/supplier-contacts/create.js +1 -1
- package/dist/commands/liberica/supplier-contacts/create.js.map +1 -1
- package/dist/commands/liberica/teams/issues/comment-delete.d.ts +3 -0
- package/dist/commands/liberica/teams/issues/comment-delete.d.ts.map +1 -0
- package/dist/commands/liberica/teams/issues/comment-delete.js +85 -0
- package/dist/commands/liberica/teams/issues/comment-delete.js.map +1 -0
- package/dist/commands/liberica/teams/issues/create.d.ts.map +1 -1
- package/dist/commands/liberica/teams/issues/create.js +4 -2
- package/dist/commands/liberica/teams/issues/create.js.map +1 -1
- package/dist/commands/liberica/teams/issues/index.d.ts.map +1 -1
- package/dist/commands/liberica/teams/issues/index.js +2 -0
- package/dist/commands/liberica/teams/issues/index.js.map +1 -1
- package/dist/commands/liberica/teams/tasks/create.d.ts.map +1 -1
- package/dist/commands/liberica/teams/tasks/create.js +50 -3
- package/dist/commands/liberica/teams/tasks/create.js.map +1 -1
- package/dist/commands/liberica/transfer-in-forms/create.d.ts.map +1 -1
- package/dist/commands/liberica/transfer-in-forms/create.js +15 -2
- package/dist/commands/liberica/transfer-in-forms/create.js.map +1 -1
- package/dist/commands/liberica/transfer-in-forms/get.d.ts.map +1 -1
- package/dist/commands/liberica/transfer-in-forms/get.js +2 -0
- package/dist/commands/liberica/transfer-in-forms/get.js.map +1 -1
- package/dist/commands/liberica/transfer-in-forms/list.d.ts.map +1 -1
- package/dist/commands/liberica/transfer-in-forms/list.js +3 -1
- package/dist/commands/liberica/transfer-in-forms/list.js.map +1 -1
- package/dist/core/api/client.d.ts +1 -0
- package/dist/core/api/client.d.ts.map +1 -1
- package/dist/core/api/client.js +80 -0
- package/dist/core/api/client.js.map +1 -1
- package/dist/utils/employee-resolve.d.ts +23 -0
- package/dist/utils/employee-resolve.d.ts.map +1 -0
- package/dist/utils/employee-resolve.js +59 -0
- package/dist/utils/employee-resolve.js.map +1 -0
- package/dist/utils/material-format.d.ts +8 -0
- package/dist/utils/material-format.d.ts.map +1 -0
- package/dist/utils/material-format.js +56 -0
- package/dist/utils/material-format.js.map +1 -0
- package/dist/utils/retry.d.ts +14 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +20 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/scheduled-finish-date.d.ts +7 -0
- package/dist/utils/scheduled-finish-date.d.ts.map +1 -0
- package/dist/utils/scheduled-finish-date.js +18 -0
- package/dist/utils/scheduled-finish-date.js.map +1 -0
- package/package.json +1 -1
- package/skills/barista-cli/data/commands.json +5 -1
- package/skills/barista-cli/data/commands.yaml +4 -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
|
"_metadata": {
|
|
3
|
-
"generatedAt": "2026-11-
|
|
3
|
+
"generatedAt": "2026-11-09T01:53:06.462Z",
|
|
4
4
|
"source": "src/commands/",
|
|
5
5
|
"generator": "src/skills/barista-cli/scripts/generate.ts"
|
|
6
6
|
},
|
|
@@ -2984,6 +2984,10 @@
|
|
|
2984
2984
|
"description": "Add a comment to a team issue",
|
|
2985
2985
|
"json": true
|
|
2986
2986
|
},
|
|
2987
|
+
"comment-delete": {
|
|
2988
|
+
"description": "Delete comment(s) from a team issue",
|
|
2989
|
+
"json": true
|
|
2990
|
+
},
|
|
2987
2991
|
"comment-list": {
|
|
2988
2992
|
"description": "List comments on a team issue",
|
|
2989
2993
|
"json": true
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# ★ 自动生成。修改源码后重新生成:npm run generate-skills-data
|
|
2
|
-
# ★ 生成时间: 2026-11-
|
|
2
|
+
# ★ 生成时间: 2026-11-09T01:53:06.473Z
|
|
3
3
|
|
|
4
4
|
global:
|
|
5
5
|
# ── 全局 ──
|
|
@@ -1914,6 +1914,9 @@ liberica:
|
|
|
1914
1914
|
comment-add:
|
|
1915
1915
|
description: "Add a comment to a team issue"
|
|
1916
1916
|
options: [--json]
|
|
1917
|
+
comment-delete:
|
|
1918
|
+
description: "Delete comment(s) from a team issue"
|
|
1919
|
+
options: [--json]
|
|
1917
1920
|
comment-list:
|
|
1918
1921
|
description: "List comments on a team issue"
|
|
1919
1922
|
options: [--json]
|