@newpeak/barista-cli 0.2.199 → 0.2.200
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/teams/issues/fp-actual.d.ts.map +1 -1
- package/dist/commands/liberica/teams/issues/fp-actual.js +17 -21
- package/dist/commands/liberica/teams/issues/fp-actual.js.map +1 -1
- package/dist/commands/liberica/teams/issues/fp-estimate.d.ts.map +1 -1
- package/dist/commands/liberica/teams/issues/fp-estimate.js +18 -35
- package/dist/commands/liberica/teams/issues/fp-estimate.js.map +1 -1
- package/dist/commands/liberica/teams/issues/fp-review.d.ts.map +1 -1
- package/dist/commands/liberica/teams/issues/fp-review.js +15 -11
- package/dist/commands/liberica/teams/issues/fp-review.js.map +1 -1
- package/dist/commands/liberica/teams/issues/fp-summary.d.ts.map +1 -1
- package/dist/commands/liberica/teams/issues/fp-summary.js +15 -23
- package/dist/commands/liberica/teams/issues/fp-summary.js.map +1 -1
- package/dist/core/api/client.d.ts +6 -6
- package/dist/core/api/client.d.ts.map +1 -1
- package/dist/core/api/client.js +2 -8
- package/dist/core/api/client.js.map +1 -1
- package/dist/types/fp-evaluation.d.ts +20 -127
- package/dist/types/fp-evaluation.d.ts.map +1 -1
- package/package.json +1 -1
- package/skills/barista-cli/data/commands.json +5 -5
- package/skills/barista-cli/data/commands.yaml +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fp-actual.d.ts","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/issues/fp-actual.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,qBAAqB,IAAI,OAAO,
|
|
1
|
+
{"version":3,"file":"fp-actual.d.ts","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/issues/fp-actual.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,qBAAqB,IAAI,OAAO,CA0D/C"}
|
|
@@ -5,41 +5,37 @@ import { apiClient } from '../../../../core/api/client.js';
|
|
|
5
5
|
import { shouldUseJson } from '../../../../utils/output.js';
|
|
6
6
|
export function createFpActualCommand() {
|
|
7
7
|
const cmd = new Command('fp-actual');
|
|
8
|
-
cmd.description('Submit actual FP counts');
|
|
9
|
-
cmd.option('--
|
|
10
|
-
cmd.option('--
|
|
11
|
-
cmd.option('--
|
|
8
|
+
cmd.description('Submit actual FP counts for a team issue');
|
|
9
|
+
cmd.option('--issue-id <id>', 'Team issue ID (required)');
|
|
10
|
+
cmd.option('--post-fp <number>', 'Actual function points');
|
|
11
|
+
cmd.option('--detail-json <json>', 'FP detail JSON');
|
|
12
|
+
cmd.option('--auditor <name>', 'Auditor name');
|
|
12
13
|
cmd.option('--json', 'Output as JSON');
|
|
13
14
|
cmd.action(async (options) => {
|
|
14
15
|
const context = configManager.getCurrentContext();
|
|
15
16
|
const environment = options.env || context.environment;
|
|
16
17
|
const tenant = options.tenant || context.tenant;
|
|
17
18
|
const outputJson = shouldUseJson(options);
|
|
18
|
-
if (!options.
|
|
19
|
+
if (!options.issueId) {
|
|
19
20
|
if (outputJson) {
|
|
20
|
-
console.log(JSON.stringify({ success: false, error: { code: '
|
|
21
|
+
console.log(JSON.stringify({ success: false, error: { code: 'MISSING_ISSUE_ID', message: '--issue-id is required' } }));
|
|
21
22
|
}
|
|
22
23
|
else {
|
|
23
|
-
console.error(chalk.red('\n✗ Error: --
|
|
24
|
-
}
|
|
25
|
-
process.exit(1);
|
|
26
|
-
}
|
|
27
|
-
if (!options.actualFp) {
|
|
28
|
-
if (outputJson) {
|
|
29
|
-
console.log(JSON.stringify({ success: false, error: { code: 'MISSING_ACTUAL_FP', message: '--actual-fp is required' } }));
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
console.error(chalk.red('\n✗ Error: --actual-fp is required\n'));
|
|
24
|
+
console.error(chalk.red('\n✗ Error: --issue-id is required\n'));
|
|
33
25
|
}
|
|
34
26
|
process.exit(1);
|
|
35
27
|
}
|
|
36
28
|
const data = {
|
|
37
|
-
|
|
38
|
-
actualFunctionPoints: parseInt(options.actualFp, 10),
|
|
39
|
-
actualComponents: [],
|
|
29
|
+
teamIssueId: options.issueId,
|
|
40
30
|
};
|
|
41
|
-
if (options.
|
|
42
|
-
data.
|
|
31
|
+
if (options.postFp !== undefined) {
|
|
32
|
+
data.postFpActual = parseInt(options.postFp, 10);
|
|
33
|
+
}
|
|
34
|
+
if (options.detailJson) {
|
|
35
|
+
data.postFpDetailJson = options.detailJson;
|
|
36
|
+
}
|
|
37
|
+
if (options.auditor) {
|
|
38
|
+
data.postFpAuditor = options.auditor;
|
|
43
39
|
}
|
|
44
40
|
const response = await apiClient.fpActual(environment, tenant, data);
|
|
45
41
|
if (!response.success) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fp-actual.js","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/issues/fp-actual.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAG5D,MAAM,UAAU,qBAAqB;IACnC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IACrC,GAAG,CAAC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"fp-actual.js","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/issues/fp-actual.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fp-estimate.d.ts","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/issues/fp-estimate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,uBAAuB,IAAI,OAAO,
|
|
1
|
+
{"version":3,"file":"fp-estimate.d.ts","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/issues/fp-estimate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,uBAAuB,IAAI,OAAO,CA0DjD"}
|
|
@@ -5,49 +5,38 @@ import { apiClient } from '../../../../core/api/client.js';
|
|
|
5
5
|
import { shouldUseJson } from '../../../../utils/output.js';
|
|
6
6
|
export function createFpEstimateCommand() {
|
|
7
7
|
const cmd = new Command('fp-estimate');
|
|
8
|
-
cmd.description('Submit an FP estimate');
|
|
9
|
-
cmd.option('--
|
|
10
|
-
cmd.option('--
|
|
11
|
-
cmd.option('--
|
|
8
|
+
cmd.description('Submit an FP estimate for a team issue');
|
|
9
|
+
cmd.option('--issue-id <id>', 'Team issue ID (required)');
|
|
10
|
+
cmd.option('--pre-fp <number>', 'Estimated function points');
|
|
11
|
+
cmd.option('--detail-json <json>', 'FP detail JSON (e.g. [{"componentType":"EI","count":10,"fp":30}])');
|
|
12
|
+
cmd.option('--estimator <name>', 'Estimator name');
|
|
12
13
|
cmd.option('--json', 'Output as JSON');
|
|
13
14
|
cmd.action(async (options) => {
|
|
14
15
|
const context = configManager.getCurrentContext();
|
|
15
16
|
const environment = options.env || context.environment;
|
|
16
17
|
const tenant = options.tenant || context.tenant;
|
|
17
18
|
const outputJson = shouldUseJson(options);
|
|
18
|
-
if (!options.
|
|
19
|
+
if (!options.issueId) {
|
|
19
20
|
if (outputJson) {
|
|
20
|
-
console.log(JSON.stringify({ success: false, error: { code: '
|
|
21
|
+
console.log(JSON.stringify({ success: false, error: { code: 'MISSING_ISSUE_ID', message: '--issue-id is required' } }));
|
|
21
22
|
}
|
|
22
23
|
else {
|
|
23
|
-
console.error(chalk.red('\n✗ Error: --
|
|
24
|
-
}
|
|
25
|
-
process.exit(1);
|
|
26
|
-
}
|
|
27
|
-
if (!options.estimateName) {
|
|
28
|
-
if (outputJson) {
|
|
29
|
-
console.log(JSON.stringify({ success: false, error: { code: 'MISSING_ESTIMATE_NAME', message: '--estimate-name is required' } }));
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
console.error(chalk.red('\n✗ Error: --estimate-name is required\n'));
|
|
33
|
-
}
|
|
34
|
-
process.exit(1);
|
|
35
|
-
}
|
|
36
|
-
if (!options.methodType) {
|
|
37
|
-
if (outputJson) {
|
|
38
|
-
console.log(JSON.stringify({ success: false, error: { code: 'MISSING_METHOD_TYPE', message: '--method-type is required' } }));
|
|
39
|
-
}
|
|
40
|
-
else {
|
|
41
|
-
console.error(chalk.red('\n✗ Error: --method-type is required\n'));
|
|
24
|
+
console.error(chalk.red('\n✗ Error: --issue-id is required\n'));
|
|
42
25
|
}
|
|
43
26
|
process.exit(1);
|
|
44
27
|
}
|
|
45
28
|
const data = {
|
|
46
|
-
|
|
47
|
-
estimateName: options.estimateName,
|
|
48
|
-
methodType: options.methodType,
|
|
49
|
-
components: [],
|
|
29
|
+
teamIssueId: options.issueId,
|
|
50
30
|
};
|
|
31
|
+
if (options.preFp !== undefined) {
|
|
32
|
+
data.preFpEstimate = parseInt(options.preFp, 10);
|
|
33
|
+
}
|
|
34
|
+
if (options.detailJson) {
|
|
35
|
+
data.preFpDetailJson = options.detailJson;
|
|
36
|
+
}
|
|
37
|
+
if (options.estimator) {
|
|
38
|
+
data.preFpEstimator = options.estimator;
|
|
39
|
+
}
|
|
51
40
|
const response = await apiClient.fpEstimate(environment, tenant, data);
|
|
52
41
|
if (!response.success) {
|
|
53
42
|
if (outputJson) {
|
|
@@ -63,12 +52,6 @@ export function createFpEstimateCommand() {
|
|
|
63
52
|
}
|
|
64
53
|
else {
|
|
65
54
|
console.log(chalk.green('\n✓ FP estimate submitted successfully\n'));
|
|
66
|
-
if (response.data && 'fpEvaluationId' in response.data) {
|
|
67
|
-
console.log(` ID: ${response.data.fpEvaluationId}`);
|
|
68
|
-
if ('totalFunctionPoints' in response.data) {
|
|
69
|
-
console.log(` Total FP: ${response.data.totalFunctionPoints}`);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
55
|
}
|
|
73
56
|
});
|
|
74
57
|
return cmd;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fp-estimate.js","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/issues/fp-estimate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAG5D,MAAM,UAAU,uBAAuB;IACrC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IACvC,GAAG,CAAC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"fp-estimate.js","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/issues/fp-estimate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fp-review.d.ts","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/issues/fp-review.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,qBAAqB,IAAI,OAAO,
|
|
1
|
+
{"version":3,"file":"fp-review.d.ts","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/issues/fp-review.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,qBAAqB,IAAI,OAAO,CA2E/C"}
|
|
@@ -5,22 +5,23 @@ import { apiClient } from '../../../../core/api/client.js';
|
|
|
5
5
|
import { shouldUseJson } from '../../../../utils/output.js';
|
|
6
6
|
export function createFpReviewCommand() {
|
|
7
7
|
const cmd = new Command('fp-review');
|
|
8
|
-
cmd.description('Review an FP estimate');
|
|
9
|
-
cmd.option('--
|
|
8
|
+
cmd.description('Review (approve/reject) an FP estimate for a team issue');
|
|
9
|
+
cmd.option('--issue-id <id>', 'Team issue ID (required)');
|
|
10
10
|
cmd.option('--status <status>', 'Review status: APPROVED | REJECTED');
|
|
11
|
-
cmd.option('--
|
|
11
|
+
cmd.option('--note <text>', 'Review note');
|
|
12
|
+
cmd.option('--reviewer <name>', 'Reviewer name');
|
|
12
13
|
cmd.option('--json', 'Output as JSON');
|
|
13
14
|
cmd.action(async (options) => {
|
|
14
15
|
const context = configManager.getCurrentContext();
|
|
15
16
|
const environment = options.env || context.environment;
|
|
16
17
|
const tenant = options.tenant || context.tenant;
|
|
17
18
|
const outputJson = shouldUseJson(options);
|
|
18
|
-
if (!options.
|
|
19
|
+
if (!options.issueId) {
|
|
19
20
|
if (outputJson) {
|
|
20
|
-
console.log(JSON.stringify({ success: false, error: { code: '
|
|
21
|
+
console.log(JSON.stringify({ success: false, error: { code: 'MISSING_ISSUE_ID', message: '--issue-id is required' } }));
|
|
21
22
|
}
|
|
22
23
|
else {
|
|
23
|
-
console.error(chalk.red('\n✗ Error: --
|
|
24
|
+
console.error(chalk.red('\n✗ Error: --issue-id is required\n'));
|
|
24
25
|
}
|
|
25
26
|
process.exit(1);
|
|
26
27
|
}
|
|
@@ -44,11 +45,14 @@ export function createFpReviewCommand() {
|
|
|
44
45
|
process.exit(1);
|
|
45
46
|
}
|
|
46
47
|
const data = {
|
|
47
|
-
|
|
48
|
-
|
|
48
|
+
teamIssueId: options.issueId,
|
|
49
|
+
fpReviewStatus: options.status,
|
|
49
50
|
};
|
|
50
|
-
if (options.
|
|
51
|
-
data.
|
|
51
|
+
if (options.note) {
|
|
52
|
+
data.fpReviewNote = options.note;
|
|
53
|
+
}
|
|
54
|
+
if (options.reviewer) {
|
|
55
|
+
data.fpReviewer = options.reviewer;
|
|
52
56
|
}
|
|
53
57
|
const response = await apiClient.fpReview(environment, tenant, data);
|
|
54
58
|
if (!response.success) {
|
|
@@ -64,7 +68,7 @@ export function createFpReviewCommand() {
|
|
|
64
68
|
console.log(JSON.stringify(response, null, 2));
|
|
65
69
|
}
|
|
66
70
|
else {
|
|
67
|
-
console.log(chalk.green(`\n✓ FP
|
|
71
|
+
console.log(chalk.green(`\n✓ FP ${options.status === 'APPROVED' ? 'approved' : 'rejected'} successfully\n`));
|
|
68
72
|
}
|
|
69
73
|
});
|
|
70
74
|
return cmd;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fp-review.js","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/issues/fp-review.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAG5D,MAAM,UAAU,qBAAqB;IACnC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IACrC,GAAG,CAAC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"fp-review.js","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/issues/fp-review.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fp-summary.d.ts","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/issues/fp-summary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,sBAAsB,IAAI,OAAO,
|
|
1
|
+
{"version":3,"file":"fp-summary.d.ts","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/issues/fp-summary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,sBAAsB,IAAI,OAAO,CA6ChD"}
|
|
@@ -5,26 +5,26 @@ import { apiClient } from '../../../../core/api/client.js';
|
|
|
5
5
|
import { shouldUseJson } from '../../../../utils/output.js';
|
|
6
6
|
export function createFpSummaryCommand() {
|
|
7
7
|
const cmd = new Command('fp-summary');
|
|
8
|
-
cmd.description('Get FP summary
|
|
9
|
-
cmd.option('--
|
|
10
|
-
cmd.option('--start-date <date>', 'Start date');
|
|
11
|
-
cmd.option('--end-date <date>', 'End date');
|
|
12
|
-
cmd.option('--method-type <type>', 'Filter by method type');
|
|
8
|
+
cmd.description('Get FP summary for a team issue');
|
|
9
|
+
cmd.option('--issue-id <id>', 'Team issue ID (required)');
|
|
13
10
|
cmd.option('--json', 'Output as JSON');
|
|
14
11
|
cmd.action(async (options) => {
|
|
15
12
|
const context = configManager.getCurrentContext();
|
|
16
13
|
const environment = options.env || context.environment;
|
|
17
14
|
const tenant = options.tenant || context.tenant;
|
|
18
15
|
const outputJson = shouldUseJson(options);
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
16
|
+
if (!options.issueId) {
|
|
17
|
+
if (outputJson) {
|
|
18
|
+
console.log(JSON.stringify({ success: false, error: { code: 'MISSING_ISSUE_ID', message: '--issue-id is required' } }));
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
console.error(chalk.red('\n✗ Error: --issue-id is required\n'));
|
|
22
|
+
}
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
const params = {
|
|
26
|
+
teamIssueId: options.issueId,
|
|
27
|
+
};
|
|
28
28
|
const response = await apiClient.fpSummary(environment, tenant, params);
|
|
29
29
|
if (!response.success) {
|
|
30
30
|
if (outputJson) {
|
|
@@ -39,15 +39,7 @@ export function createFpSummaryCommand() {
|
|
|
39
39
|
console.log(JSON.stringify(response, null, 2));
|
|
40
40
|
}
|
|
41
41
|
else {
|
|
42
|
-
|
|
43
|
-
console.log(chalk.bold('\nFP Summary'));
|
|
44
|
-
console.log(` Total Projects: ${response.data.totalProjects}`);
|
|
45
|
-
console.log(` Total Estimates: ${response.data.totalEstimates}`);
|
|
46
|
-
console.log(` Total Function Points: ${response.data.totalFunctionPoints}`);
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
console.log(chalk.green('\n✓ FP summary retrieved\n'));
|
|
50
|
-
}
|
|
42
|
+
console.log(chalk.green('\n✓ FP summary retrieved successfully\n'));
|
|
51
43
|
}
|
|
52
44
|
});
|
|
53
45
|
return cmd;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fp-summary.js","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/issues/fp-summary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAG5D,MAAM,UAAU,sBAAsB;IACpC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;IACtC,GAAG,CAAC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"fp-summary.js","sourceRoot":"","sources":["../../../../../src/commands/liberica/teams/issues/fp-summary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAG5D,MAAM,UAAU,sBAAsB;IACpC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;IACtC,GAAG,CAAC,WAAW,CAAC,iCAAiC,CAAC,CAAC;IAEnD,GAAG,CAAC,MAAM,CAAC,iBAAiB,EAAE,0BAA0B,CAAC,CAAC;IAC1D,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAEvC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QAC3B,MAAM,OAAO,GAAG,aAAa,CAAC,iBAAiB,EAAE,CAAC;QAClD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC;QACvD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;QAChD,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QAE1C,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,wBAAwB,EAAE,EAAE,CAAC,CAAC,CAAC;YAC1H,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC,CAAC;YAClE,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAyB;YACnC,WAAW,EAAE,OAAO,CAAC,OAAO;SAC7B,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAExE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtB,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,QAAQ,CAAC,KAAK,EAAE,OAAO,IAAI,eAAe,IAAI,CAAC,CAAC,CAAC;YACzF,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC,CAAC;QACtE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -66,7 +66,7 @@ import { ShiftQueryParams, ShiftApiResponse, ShiftCreateRequest, ShiftUpdateRequ
|
|
|
66
66
|
import { WorkerGroupQueryParams, WorkerGroupApiResponse, WorkerGroupCreateRequest, WorkerGroupUpdateRequest } from '../../types/worker-group.js';
|
|
67
67
|
import { JobTypeApiResponse } from '../../types/job-type.js';
|
|
68
68
|
import { LeaderboardApiResponse, MappingApiResponse, EntryApiResponse, CalculateApiResponse, LeaderboardQueryParams, MappingQueryParams, CreateLeaderboardRequest, UpdateLeaderboardRequest, AddMappingRequest, ImportEntriesRequest } from '../../types/leaderboard.js';
|
|
69
|
-
import type {
|
|
69
|
+
import type { FpApiResponse, FpEstimateRequest, FpActualRequest, FpReviewRequest, FpSummaryQueryParams, FpStatsQueryParams } from '../../types/fp-evaluation.js';
|
|
70
70
|
export interface LoginResponse {
|
|
71
71
|
token: string;
|
|
72
72
|
expiresAt?: string;
|
|
@@ -960,11 +960,11 @@ export declare const apiClient: {
|
|
|
960
960
|
getDruidDataSourceStat(environment: Environment, tenant: string): Promise<APIResponse<any>>;
|
|
961
961
|
getDruidSqlStat(environment: Environment, tenant: string): Promise<APIResponse<any>>;
|
|
962
962
|
getDruidUriStat(environment: Environment, tenant: string): Promise<APIResponse<any>>;
|
|
963
|
-
fpEstimate(environment: Environment, tenant: string, data:
|
|
964
|
-
fpActual(environment: Environment, tenant: string, data: FpActualRequest): Promise<
|
|
965
|
-
fpReview(environment: Environment, tenant: string, data: FpReviewRequest): Promise<
|
|
966
|
-
fpSummary(environment: Environment, tenant: string, params?: FpSummaryQueryParams): Promise<
|
|
967
|
-
fpStats(environment: Environment, tenant: string, params?: FpStatsQueryParams): Promise<
|
|
963
|
+
fpEstimate(environment: Environment, tenant: string, data: FpEstimateRequest): Promise<FpApiResponse>;
|
|
964
|
+
fpActual(environment: Environment, tenant: string, data: FpActualRequest): Promise<FpApiResponse>;
|
|
965
|
+
fpReview(environment: Environment, tenant: string, data: FpReviewRequest): Promise<FpApiResponse>;
|
|
966
|
+
fpSummary(environment: Environment, tenant: string, params?: FpSummaryQueryParams): Promise<FpApiResponse>;
|
|
967
|
+
fpStats(environment: Environment, tenant: string, params?: FpStatsQueryParams): Promise<FpApiResponse>;
|
|
968
968
|
};
|
|
969
969
|
interface ExtractApiErrorContext {
|
|
970
970
|
tenant?: string;
|