@xera-ai/core 0.1.6 → 0.3.0
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/bin/internal.js +2039 -725
- package/dist/{adapter → core/src/adapter}/types.d.ts +1 -1
- package/dist/core/src/adapter/types.d.ts.map +1 -0
- package/dist/core/src/artifact/hash.d.ts.map +1 -0
- package/dist/core/src/artifact/meta.d.ts.map +1 -0
- package/dist/core/src/artifact/paths.d.ts.map +1 -0
- package/dist/core/src/artifact/status.d.ts.map +1 -0
- package/dist/core/src/auth/encrypt.d.ts.map +1 -0
- package/dist/core/src/auth/key.d.ts.map +1 -0
- package/dist/core/src/auth/refresh.d.ts.map +1 -0
- package/dist/core/src/auth/state.d.ts.map +1 -0
- package/dist/core/src/bin-internal/doctor.d.ts +5 -0
- package/dist/core/src/bin-internal/doctor.d.ts.map +1 -0
- package/dist/core/src/bin-internal/eval-deterministic.d.ts +5 -0
- package/dist/core/src/bin-internal/eval-deterministic.d.ts.map +1 -0
- package/dist/core/src/bin-internal/eval-prepare.d.ts +7 -0
- package/dist/core/src/bin-internal/eval-prepare.d.ts.map +1 -0
- package/dist/core/src/bin-internal/eval-report.d.ts +5 -0
- package/dist/core/src/bin-internal/eval-report.d.ts.map +1 -0
- package/dist/core/src/bin-internal/exec.d.ts.map +1 -0
- package/dist/core/src/bin-internal/fetch.d.ts.map +1 -0
- package/dist/core/src/bin-internal/heal-prepare.d.ts +19 -0
- package/dist/core/src/bin-internal/heal-prepare.d.ts.map +1 -0
- package/dist/core/src/bin-internal/index.d.ts.map +1 -0
- package/dist/core/src/bin-internal/lint.d.ts.map +1 -0
- package/dist/core/src/bin-internal/normalize.d.ts.map +1 -0
- package/dist/core/src/bin-internal/post.d.ts.map +1 -0
- package/dist/core/src/bin-internal/promote.d.ts.map +1 -0
- package/dist/core/src/bin-internal/report.d.ts.map +1 -0
- package/dist/core/src/bin-internal/status-cmd.d.ts.map +1 -0
- package/dist/core/src/bin-internal/typecheck.d.ts.map +1 -0
- package/dist/core/src/bin-internal/unlock.d.ts.map +1 -0
- package/dist/core/src/bin-internal/validate-feature.d.ts.map +1 -0
- package/dist/core/src/bin-internal/verify-prompts.d.ts +7 -0
- package/dist/core/src/bin-internal/verify-prompts.d.ts.map +1 -0
- package/dist/core/src/classifier/aggregate.d.ts.map +1 -0
- package/dist/core/src/classifier/history.d.ts.map +1 -0
- package/dist/core/src/classifier/types.d.ts.map +1 -0
- package/dist/core/src/config/define.d.ts.map +1 -0
- package/dist/core/src/config/load.d.ts.map +1 -0
- package/dist/{config → core/src/config}/schema.d.ts.map +1 -1
- package/dist/core/src/eval/paths.d.ts +15 -0
- package/dist/core/src/eval/paths.d.ts.map +1 -0
- package/dist/core/src/eval/run-id.d.ts +6 -0
- package/dist/core/src/eval/run-id.d.ts.map +1 -0
- package/dist/core/src/eval/types.d.ts +551 -0
- package/dist/core/src/eval/types.d.ts.map +1 -0
- package/dist/core/src/index.d.ts.map +1 -0
- package/dist/core/src/jira/client.d.ts.map +1 -0
- package/dist/core/src/jira/fields.d.ts.map +1 -0
- package/dist/core/src/jira/mcp-backend.d.ts.map +1 -0
- package/dist/core/src/jira/rest-backend.d.ts.map +1 -0
- package/dist/core/src/jira/retry.d.ts.map +1 -0
- package/dist/core/src/jira/types.d.ts.map +1 -0
- package/dist/core/src/lock/file-lock.d.ts.map +1 -0
- package/dist/core/src/logging/ndjson-logger.d.ts.map +1 -0
- package/dist/core/src/reporter/jira-comment.d.ts.map +1 -0
- package/dist/core/src/reporter/status-writer.d.ts.map +1 -0
- package/dist/src/index.js +19 -12
- package/dist/web/src/adapter.d.ts +3 -0
- package/dist/web/src/adapter.d.ts.map +1 -0
- package/dist/web/src/auth-setup/define.d.ts +16 -0
- package/dist/web/src/auth-setup/define.d.ts.map +1 -0
- package/dist/web/src/auth-setup/playwright-state.d.ts +2 -0
- package/dist/web/src/auth-setup/playwright-state.d.ts.map +1 -0
- package/dist/web/src/auth-setup/runner.d.ts +12 -0
- package/dist/web/src/auth-setup/runner.d.ts.map +1 -0
- package/dist/web/src/executor/index.d.ts +18 -0
- package/dist/web/src/executor/index.d.ts.map +1 -0
- package/dist/web/src/executor/playwright-args.d.ts +7 -0
- package/dist/web/src/executor/playwright-args.d.ts.map +1 -0
- package/dist/web/src/generator/gherkin-validate.d.ts +9 -0
- package/dist/web/src/generator/gherkin-validate.d.ts.map +1 -0
- package/dist/web/src/generator/lint.d.ts +9 -0
- package/dist/web/src/generator/lint.d.ts.map +1 -0
- package/dist/web/src/generator/pom-scan.d.ts +6 -0
- package/dist/web/src/generator/pom-scan.d.ts.map +1 -0
- package/dist/web/src/generator/promote.d.ts +7 -0
- package/dist/web/src/generator/promote.d.ts.map +1 -0
- package/dist/web/src/generator/selector-rules.d.ts +10 -0
- package/dist/web/src/generator/selector-rules.d.ts.map +1 -0
- package/dist/web/src/generator/typecheck.d.ts +11 -0
- package/dist/web/src/generator/typecheck.d.ts.map +1 -0
- package/dist/web/src/index.d.ts +18 -0
- package/dist/web/src/index.d.ts.map +1 -0
- package/dist/web/src/trace-normalizer/normalize.d.ts +7 -0
- package/dist/web/src/trace-normalizer/normalize.d.ts.map +1 -0
- package/dist/web/src/trace-normalizer/parse.d.ts +37 -0
- package/dist/web/src/trace-normalizer/parse.d.ts.map +1 -0
- package/dist/web/src/trace-normalizer/scrub-rules.d.ts +12 -0
- package/dist/web/src/trace-normalizer/scrub-rules.d.ts.map +1 -0
- package/dist/web/src/trace-normalizer/scrub.d.ts +29 -0
- package/dist/web/src/trace-normalizer/scrub.d.ts.map +1 -0
- package/dist/web/src/trace-normalizer/unzip.d.ts +6 -0
- package/dist/web/src/trace-normalizer/unzip.d.ts.map +1 -0
- package/package.json +3 -2
- package/src/adapter/types.ts +5 -2
- package/src/artifact/meta.ts +1 -1
- package/src/artifact/status.ts +1 -1
- package/src/auth/encrypt.ts +2 -2
- package/src/auth/key.ts +1 -2
- package/src/auth/refresh.ts +4 -1
- package/src/auth/state.ts +2 -2
- package/src/bin-internal/doctor.ts +133 -0
- package/src/bin-internal/eval-deterministic.ts +149 -0
- package/src/bin-internal/eval-prepare.ts +214 -0
- package/src/bin-internal/eval-report.ts +177 -0
- package/src/bin-internal/exec.ts +38 -16
- package/src/bin-internal/fetch.ts +21 -10
- package/src/bin-internal/heal-prepare.ts +230 -0
- package/src/bin-internal/index.ts +25 -11
- package/src/bin-internal/lint.ts +11 -4
- package/src/bin-internal/normalize.ts +23 -9
- package/src/bin-internal/post.ts +10 -4
- package/src/bin-internal/report.ts +3 -3
- package/src/bin-internal/status-cmd.ts +11 -3
- package/src/bin-internal/typecheck.ts +9 -3
- package/src/bin-internal/unlock.ts +12 -4
- package/src/bin-internal/validate-feature.ts +14 -5
- package/src/bin-internal/verify-prompts.ts +59 -0
- package/src/classifier/aggregate.ts +13 -6
- package/src/config/define.ts +3 -1
- package/src/config/load.ts +1 -1
- package/src/config/schema.ts +43 -37
- package/src/eval/paths.ts +32 -0
- package/src/eval/run-id.ts +30 -0
- package/src/eval/types.ts +101 -0
- package/src/jira/client.ts +4 -2
- package/src/jira/fields.ts +4 -2
- package/src/jira/mcp-backend.ts +1 -1
- package/src/jira/rest-backend.ts +17 -5
- package/src/jira/retry.ts +2 -2
- package/src/lock/file-lock.ts +2 -2
- package/src/logging/ndjson-logger.ts +2 -2
- package/src/reporter/jira-comment.ts +13 -7
- package/src/reporter/status-writer.ts +2 -2
- package/dist/adapter/types.d.ts.map +0 -1
- package/dist/artifact/hash.d.ts.map +0 -1
- package/dist/artifact/meta.d.ts.map +0 -1
- package/dist/artifact/paths.d.ts.map +0 -1
- package/dist/artifact/status.d.ts.map +0 -1
- package/dist/auth/encrypt.d.ts.map +0 -1
- package/dist/auth/key.d.ts.map +0 -1
- package/dist/auth/refresh.d.ts.map +0 -1
- package/dist/auth/state.d.ts.map +0 -1
- package/dist/bin-internal/exec.d.ts.map +0 -1
- package/dist/bin-internal/fetch.d.ts.map +0 -1
- package/dist/bin-internal/index.d.ts.map +0 -1
- package/dist/bin-internal/lint.d.ts.map +0 -1
- package/dist/bin-internal/normalize.d.ts.map +0 -1
- package/dist/bin-internal/post.d.ts.map +0 -1
- package/dist/bin-internal/promote.d.ts.map +0 -1
- package/dist/bin-internal/report.d.ts.map +0 -1
- package/dist/bin-internal/status-cmd.d.ts.map +0 -1
- package/dist/bin-internal/typecheck.d.ts.map +0 -1
- package/dist/bin-internal/unlock.d.ts.map +0 -1
- package/dist/bin-internal/validate-feature.d.ts.map +0 -1
- package/dist/classifier/aggregate.d.ts.map +0 -1
- package/dist/classifier/history.d.ts.map +0 -1
- package/dist/classifier/types.d.ts.map +0 -1
- package/dist/config/define.d.ts.map +0 -1
- package/dist/config/load.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/jira/client.d.ts.map +0 -1
- package/dist/jira/fields.d.ts.map +0 -1
- package/dist/jira/mcp-backend.d.ts.map +0 -1
- package/dist/jira/rest-backend.d.ts.map +0 -1
- package/dist/jira/retry.d.ts.map +0 -1
- package/dist/jira/types.d.ts.map +0 -1
- package/dist/lock/file-lock.d.ts.map +0 -1
- package/dist/logging/ndjson-logger.d.ts.map +0 -1
- package/dist/reporter/jira-comment.d.ts.map +0 -1
- package/dist/reporter/status-writer.d.ts.map +0 -1
- /package/dist/{artifact → core/src/artifact}/hash.d.ts +0 -0
- /package/dist/{artifact → core/src/artifact}/meta.d.ts +0 -0
- /package/dist/{artifact → core/src/artifact}/paths.d.ts +0 -0
- /package/dist/{artifact → core/src/artifact}/status.d.ts +0 -0
- /package/dist/{auth → core/src/auth}/encrypt.d.ts +0 -0
- /package/dist/{auth → core/src/auth}/key.d.ts +0 -0
- /package/dist/{auth → core/src/auth}/refresh.d.ts +0 -0
- /package/dist/{auth → core/src/auth}/state.d.ts +0 -0
- /package/dist/{bin-internal → core/src/bin-internal}/exec.d.ts +0 -0
- /package/dist/{bin-internal → core/src/bin-internal}/fetch.d.ts +0 -0
- /package/dist/{bin-internal → core/src/bin-internal}/index.d.ts +0 -0
- /package/dist/{bin-internal → core/src/bin-internal}/lint.d.ts +0 -0
- /package/dist/{bin-internal → core/src/bin-internal}/normalize.d.ts +0 -0
- /package/dist/{bin-internal → core/src/bin-internal}/post.d.ts +0 -0
- /package/dist/{bin-internal → core/src/bin-internal}/promote.d.ts +0 -0
- /package/dist/{bin-internal → core/src/bin-internal}/report.d.ts +0 -0
- /package/dist/{bin-internal → core/src/bin-internal}/status-cmd.d.ts +0 -0
- /package/dist/{bin-internal → core/src/bin-internal}/typecheck.d.ts +0 -0
- /package/dist/{bin-internal → core/src/bin-internal}/unlock.d.ts +0 -0
- /package/dist/{bin-internal → core/src/bin-internal}/validate-feature.d.ts +0 -0
- /package/dist/{classifier → core/src/classifier}/aggregate.d.ts +0 -0
- /package/dist/{classifier → core/src/classifier}/history.d.ts +0 -0
- /package/dist/{classifier → core/src/classifier}/types.d.ts +0 -0
- /package/dist/{config → core/src/config}/define.d.ts +0 -0
- /package/dist/{config → core/src/config}/load.d.ts +0 -0
- /package/dist/{config → core/src/config}/schema.d.ts +0 -0
- /package/dist/{index.d.ts → core/src/index.d.ts} +0 -0
- /package/dist/{jira → core/src/jira}/client.d.ts +0 -0
- /package/dist/{jira → core/src/jira}/fields.d.ts +0 -0
- /package/dist/{jira → core/src/jira}/mcp-backend.d.ts +0 -0
- /package/dist/{jira → core/src/jira}/rest-backend.d.ts +0 -0
- /package/dist/{jira → core/src/jira}/retry.d.ts +0 -0
- /package/dist/{jira → core/src/jira}/types.d.ts +0 -0
- /package/dist/{lock → core/src/lock}/file-lock.d.ts +0 -0
- /package/dist/{logging → core/src/logging}/ndjson-logger.d.ts +0 -0
- /package/dist/{reporter → core/src/reporter}/jira-comment.d.ts +0 -0
- /package/dist/{reporter → core/src/reporter}/status-writer.d.ts +0 -0
|
@@ -1,14 +1,23 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { resolveArtifactPaths } from '../artifact/paths';
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
3
2
|
import { validateGherkin } from '@xera-ai/web';
|
|
3
|
+
import { resolveArtifactPaths } from '../artifact/paths';
|
|
4
4
|
|
|
5
5
|
export async function validateFeatureCmd(argv: string[]): Promise<number> {
|
|
6
6
|
const ticket = argv[0];
|
|
7
|
-
if (!ticket) {
|
|
7
|
+
if (!ticket) {
|
|
8
|
+
console.error('[xera:validate-feature] usage: validate-feature <TICKET>');
|
|
9
|
+
return 1;
|
|
10
|
+
}
|
|
8
11
|
const paths = resolveArtifactPaths(process.cwd(), ticket);
|
|
9
|
-
if (!existsSync(paths.featurePath)) {
|
|
12
|
+
if (!existsSync(paths.featurePath)) {
|
|
13
|
+
console.error(`[xera:validate-feature] missing ${paths.featurePath}`);
|
|
14
|
+
return 1;
|
|
15
|
+
}
|
|
10
16
|
const r = validateGherkin(readFileSync(paths.featurePath, 'utf8'));
|
|
11
|
-
if (r.ok) {
|
|
17
|
+
if (r.ok) {
|
|
18
|
+
console.log('[xera:validate-feature] ok');
|
|
19
|
+
return 0;
|
|
20
|
+
}
|
|
12
21
|
for (const e of r.errors) console.error(`[xera:validate-feature] line ${e.line}: ${e.message}`);
|
|
13
22
|
return 2;
|
|
14
23
|
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
|
|
4
|
+
export interface CheckResult {
|
|
5
|
+
ok: boolean;
|
|
6
|
+
message: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const IN_SCOPE_PROMPTS = [
|
|
10
|
+
'feature-from-story.md',
|
|
11
|
+
'script-from-feature.md',
|
|
12
|
+
'heal-locator.md',
|
|
13
|
+
] as const;
|
|
14
|
+
|
|
15
|
+
const REQUIRED_SECTION_HEADING = '## Handling untrusted input';
|
|
16
|
+
|
|
17
|
+
const REQUIRED_KEYWORDS = ['UNTRUSTED', 'injection-follow', '<XR_'] as const;
|
|
18
|
+
|
|
19
|
+
export function verifyPrompts(repoRoot: string): CheckResult[] {
|
|
20
|
+
const promptsDir = join(repoRoot, 'packages/prompts');
|
|
21
|
+
const results: CheckResult[] = [];
|
|
22
|
+
for (const filename of IN_SCOPE_PROMPTS) {
|
|
23
|
+
const path = join(promptsDir, filename);
|
|
24
|
+
if (!existsSync(path)) {
|
|
25
|
+
results.push({
|
|
26
|
+
ok: false,
|
|
27
|
+
message: `${filename}: file missing at packages/prompts/${filename}`,
|
|
28
|
+
});
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
const text = readFileSync(path, 'utf8');
|
|
32
|
+
if (!text.includes(REQUIRED_SECTION_HEADING)) {
|
|
33
|
+
results.push({
|
|
34
|
+
ok: false,
|
|
35
|
+
message: `${filename}: missing required section "${REQUIRED_SECTION_HEADING}"`,
|
|
36
|
+
});
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
for (const keyword of REQUIRED_KEYWORDS) {
|
|
40
|
+
if (!text.includes(keyword)) {
|
|
41
|
+
results.push({
|
|
42
|
+
ok: false,
|
|
43
|
+
message: `${filename}: missing required keyword "${keyword}" (expected in "${REQUIRED_SECTION_HEADING}" section)`,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return results;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export async function verifyPromptsCmd(_argv: string[]): Promise<number> {
|
|
52
|
+
const results = verifyPrompts(process.cwd());
|
|
53
|
+
if (results.length === 0) {
|
|
54
|
+
console.log('[xera:verify-prompts] ok');
|
|
55
|
+
return 0;
|
|
56
|
+
}
|
|
57
|
+
for (const r of results) console.error(`[xera:verify-prompts] ${r.message}`);
|
|
58
|
+
return 1;
|
|
59
|
+
}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
import type { ClassifyOutput,
|
|
1
|
+
import type { ClassifyOutput, Confidence, ScenarioClassification } from './types';
|
|
2
2
|
|
|
3
3
|
const CLASS_PRIORITY: Array<ClassifyOutput['overall']> = [
|
|
4
|
-
'REAL_BUG',
|
|
4
|
+
'REAL_BUG',
|
|
5
|
+
'TEST_BUG',
|
|
6
|
+
'SELECTOR_DRIFT',
|
|
7
|
+
'FLAKY',
|
|
8
|
+
'PASS',
|
|
5
9
|
];
|
|
6
10
|
|
|
7
11
|
const CONF_RANK: Record<Confidence, number> = { low: 1, medium: 2, high: 3 };
|
|
@@ -10,16 +14,19 @@ export function aggregateScenarios(scenarios: ScenarioClassification[]): Classif
|
|
|
10
14
|
if (scenarios.length === 0) {
|
|
11
15
|
return { overall: 'PASS', overallConfidence: 'low', scenarios: [] };
|
|
12
16
|
}
|
|
13
|
-
if (scenarios.every(s => s.outcome === 'PASS')) {
|
|
17
|
+
if (scenarios.every((s) => s.outcome === 'PASS')) {
|
|
14
18
|
return { overall: 'PASS', overallConfidence: 'high', scenarios };
|
|
15
19
|
}
|
|
16
20
|
let chosen: ClassifyOutput['overall'] = 'PASS';
|
|
17
21
|
for (const cls of CLASS_PRIORITY) {
|
|
18
|
-
if (scenarios.some(s => s.class === cls)) {
|
|
22
|
+
if (scenarios.some((s) => s.class === cls)) {
|
|
23
|
+
chosen = cls;
|
|
24
|
+
break;
|
|
25
|
+
}
|
|
19
26
|
}
|
|
20
|
-
const matching = scenarios.filter(s => s.class === chosen);
|
|
27
|
+
const matching = scenarios.filter((s) => s.class === chosen);
|
|
21
28
|
const minConf = matching.reduce<Confidence>(
|
|
22
|
-
(acc, s) => CONF_RANK[s.confidence] < CONF_RANK[acc] ? s.confidence : acc,
|
|
29
|
+
(acc, s) => (CONF_RANK[s.confidence] < CONF_RANK[acc] ? s.confidence : acc),
|
|
23
30
|
'high',
|
|
24
31
|
);
|
|
25
32
|
return { overall: chosen, overallConfidence: minConf, scenarios };
|
package/src/config/define.ts
CHANGED
package/src/config/load.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { existsSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { pathToFileURL } from 'node:url';
|
|
4
|
-
import {
|
|
4
|
+
import { type XeraConfig, XeraConfigSchema } from './schema';
|
|
5
5
|
|
|
6
6
|
export async function loadConfig(cwd: string): Promise<XeraConfig> {
|
|
7
7
|
const path = join(cwd, 'xera.config.ts');
|
package/src/config/schema.ts
CHANGED
|
@@ -13,21 +13,23 @@ const AuthSchema = z.object({
|
|
|
13
13
|
roles: z.record(z.string(), AuthRoleSchema).default({}),
|
|
14
14
|
});
|
|
15
15
|
|
|
16
|
-
const WebSchema = z
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
16
|
+
const WebSchema = z
|
|
17
|
+
.object({
|
|
18
|
+
baseUrl: z.record(z.string(), z.string().url()).refine((m) => Object.keys(m).length > 0, {
|
|
19
|
+
message: 'baseUrl must have at least one environment',
|
|
20
|
+
}),
|
|
21
|
+
defaultEnv: z.string(),
|
|
22
|
+
auth: AuthSchema.default({}),
|
|
23
|
+
testData: z
|
|
24
|
+
.object({
|
|
25
|
+
users: z.record(z.string(), z.object({ fromAuth: z.string() })).default({}),
|
|
26
|
+
})
|
|
27
|
+
.default({ users: {} }),
|
|
28
|
+
})
|
|
29
|
+
.refine((w) => w.baseUrl[w.defaultEnv] !== undefined, {
|
|
30
|
+
message: 'defaultEnv must exist in baseUrl map',
|
|
31
|
+
path: ['defaultEnv'],
|
|
32
|
+
});
|
|
31
33
|
|
|
32
34
|
const JiraSchema = z.object({
|
|
33
35
|
baseUrl: z.string().url(),
|
|
@@ -39,29 +41,33 @@ const JiraSchema = z.object({
|
|
|
39
41
|
}),
|
|
40
42
|
});
|
|
41
43
|
|
|
42
|
-
const AISchema = z
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
44
|
+
const AISchema = z
|
|
45
|
+
.object({
|
|
46
|
+
livePageSnapshot: z.boolean().default(true),
|
|
47
|
+
confidenceThreshold: z.enum(['low', 'medium', 'high']).default('medium'),
|
|
48
|
+
maxRetries: z
|
|
49
|
+
.object({
|
|
50
|
+
typecheck: z.number().int().min(0).max(5).default(2),
|
|
51
|
+
lint: z.number().int().min(0).max(5).default(2),
|
|
52
|
+
validateFeature: z.number().int().min(0).max(5).default(2),
|
|
53
|
+
})
|
|
54
|
+
.default({}),
|
|
55
|
+
})
|
|
56
|
+
.default({});
|
|
53
57
|
|
|
54
|
-
const ReportingSchema = z
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
58
|
+
const ReportingSchema = z
|
|
59
|
+
.object({
|
|
60
|
+
language: z.enum(['en', 'vi']).default('en'),
|
|
61
|
+
postToJira: z.boolean().default(true),
|
|
62
|
+
transition: z
|
|
63
|
+
.object({
|
|
64
|
+
onPass: z.string().nullable().default(null),
|
|
65
|
+
onFail: z.string().nullable().default(null),
|
|
66
|
+
})
|
|
67
|
+
.default({}),
|
|
68
|
+
artifactLinks: z.enum(['git', 'local']).default('git'),
|
|
69
|
+
})
|
|
70
|
+
.default({});
|
|
65
71
|
|
|
66
72
|
export const XeraConfigSchema = z.object({
|
|
67
73
|
jira: JiraSchema,
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { join } from 'node:path';
|
|
2
|
+
|
|
3
|
+
export interface EvalPaths {
|
|
4
|
+
root: string;
|
|
5
|
+
manifest: string;
|
|
6
|
+
lock: string;
|
|
7
|
+
deterministicScores: string;
|
|
8
|
+
judgeScores: string;
|
|
9
|
+
report: string;
|
|
10
|
+
summary: string;
|
|
11
|
+
inputsDir: string;
|
|
12
|
+
actualDir: string;
|
|
13
|
+
ticketInputsDir(ticket: string): string;
|
|
14
|
+
ticketActualDir(ticket: string): string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function resolveEvalPaths(cwd: string, runId: string): EvalPaths {
|
|
18
|
+
const root = join(cwd, '.xera', 'eval', runId);
|
|
19
|
+
return {
|
|
20
|
+
root,
|
|
21
|
+
manifest: join(root, 'manifest.json'),
|
|
22
|
+
lock: join(root, '.lock'),
|
|
23
|
+
deterministicScores: join(root, 'deterministic-scores.json'),
|
|
24
|
+
judgeScores: join(root, 'judge-scores.json'),
|
|
25
|
+
report: join(root, 'report.md'),
|
|
26
|
+
summary: join(root, 'summary.json'),
|
|
27
|
+
inputsDir: join(root, 'inputs'),
|
|
28
|
+
actualDir: join(root, 'actual'),
|
|
29
|
+
ticketInputsDir: (ticket: string) => join(root, 'inputs', ticket),
|
|
30
|
+
ticketActualDir: (ticket: string) => join(root, 'actual', ticket),
|
|
31
|
+
};
|
|
32
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { execSync } from 'node:child_process';
|
|
2
|
+
|
|
3
|
+
export interface RunIdOpts {
|
|
4
|
+
getGitSha?: () => string | null;
|
|
5
|
+
now?: () => Date;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
function defaultGetGitSha(): string | null {
|
|
9
|
+
try {
|
|
10
|
+
return execSync('git rev-parse HEAD', { stdio: ['ignore', 'pipe', 'ignore'] })
|
|
11
|
+
.toString()
|
|
12
|
+
.trim();
|
|
13
|
+
} catch {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function pad(n: number): string {
|
|
19
|
+
return n.toString().padStart(2, '0');
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function generateRunId(opts: RunIdOpts = {}): string {
|
|
23
|
+
const getGitSha = opts.getGitSha ?? defaultGetGitSha;
|
|
24
|
+
const now = (opts.now ?? (() => new Date()))();
|
|
25
|
+
const date = `${now.getUTCFullYear()}${pad(now.getUTCMonth() + 1)}${pad(now.getUTCDate())}`;
|
|
26
|
+
const time = `${pad(now.getUTCHours())}${pad(now.getUTCMinutes())}${pad(now.getUTCSeconds())}`;
|
|
27
|
+
const sha = getGitSha();
|
|
28
|
+
const short = sha ? sha.slice(0, 7) : 'nogit';
|
|
29
|
+
return `${date}-${time}-${short}`;
|
|
30
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
export const STAGES = ['feature-from-story', 'script-from-feature', 'diagnose-failure'] as const;
|
|
4
|
+
export const StageSchema = z.enum(STAGES);
|
|
5
|
+
export type Stage = z.infer<typeof StageSchema>;
|
|
6
|
+
|
|
7
|
+
export const VerdictSchema = z.enum(['PASS', 'FAIL', 'NA']);
|
|
8
|
+
export type Verdict = z.infer<typeof VerdictSchema>;
|
|
9
|
+
|
|
10
|
+
export const PromptVersionsSchema = z.object({
|
|
11
|
+
'feature-from-story': z.string(),
|
|
12
|
+
'script-from-feature': z.string(),
|
|
13
|
+
'diagnose-failure': z.string(),
|
|
14
|
+
'eval-rubric': z.string(),
|
|
15
|
+
});
|
|
16
|
+
export type PromptVersions = z.infer<typeof PromptVersionsSchema>;
|
|
17
|
+
|
|
18
|
+
export const ManifestSchema = z.object({
|
|
19
|
+
run_id: z.string(),
|
|
20
|
+
started_at: z.string(),
|
|
21
|
+
git_sha: z.string(),
|
|
22
|
+
tickets: z.array(z.string()).min(1),
|
|
23
|
+
stages: z.array(StageSchema).min(1),
|
|
24
|
+
ticket_stages: z.record(z.string(), z.array(StageSchema).min(1)),
|
|
25
|
+
prompt_versions: PromptVersionsSchema,
|
|
26
|
+
flags: z.object({
|
|
27
|
+
force: z.boolean(),
|
|
28
|
+
only_prompt: StageSchema.nullable(),
|
|
29
|
+
only_ticket: z.string().nullable(),
|
|
30
|
+
judge_only: z.boolean(),
|
|
31
|
+
}),
|
|
32
|
+
});
|
|
33
|
+
export type Manifest = z.infer<typeof ManifestSchema>;
|
|
34
|
+
|
|
35
|
+
export const DimensionSchema = z.object({
|
|
36
|
+
name: z.string(),
|
|
37
|
+
verdict: VerdictSchema,
|
|
38
|
+
notes: z.string(),
|
|
39
|
+
});
|
|
40
|
+
export type Dimension = z.infer<typeof DimensionSchema>;
|
|
41
|
+
|
|
42
|
+
export const JudgmentSchema = z.object({
|
|
43
|
+
stage: StageSchema,
|
|
44
|
+
ticket: z.string(),
|
|
45
|
+
dimensions: z.array(DimensionSchema).min(1),
|
|
46
|
+
});
|
|
47
|
+
export type Judgment = z.infer<typeof JudgmentSchema>;
|
|
48
|
+
|
|
49
|
+
export const JudgeScoresSchema = z.object({
|
|
50
|
+
run_id: z.string(),
|
|
51
|
+
judgments: z.array(JudgmentSchema),
|
|
52
|
+
});
|
|
53
|
+
export type JudgeScores = z.infer<typeof JudgeScoresSchema>;
|
|
54
|
+
|
|
55
|
+
export const DeterministicEntrySchema = z.object({
|
|
56
|
+
ticket: z.string(),
|
|
57
|
+
stage: StageSchema,
|
|
58
|
+
passed: z.boolean(),
|
|
59
|
+
checks: z.array(z.string()),
|
|
60
|
+
error: z.string().optional(),
|
|
61
|
+
});
|
|
62
|
+
export type DeterministicEntry = z.infer<typeof DeterministicEntrySchema>;
|
|
63
|
+
|
|
64
|
+
export const DeterministicScoresSchema = z.object({
|
|
65
|
+
run_id: z.string(),
|
|
66
|
+
entries: z.array(DeterministicEntrySchema),
|
|
67
|
+
});
|
|
68
|
+
export type DeterministicScores = z.infer<typeof DeterministicScoresSchema>;
|
|
69
|
+
|
|
70
|
+
export const ResultSchema = z.object({
|
|
71
|
+
ticket: z.string(),
|
|
72
|
+
stage: StageSchema,
|
|
73
|
+
deterministic: z.object({
|
|
74
|
+
passed: z.boolean(),
|
|
75
|
+
checks: z.array(z.string()),
|
|
76
|
+
error: z.string().optional(),
|
|
77
|
+
}),
|
|
78
|
+
judge: z
|
|
79
|
+
.object({
|
|
80
|
+
passed: z.boolean(),
|
|
81
|
+
dimensions: z.array(DimensionSchema),
|
|
82
|
+
score: z.number().min(0).max(1),
|
|
83
|
+
})
|
|
84
|
+
.nullable(),
|
|
85
|
+
skipped: z.boolean().optional(),
|
|
86
|
+
});
|
|
87
|
+
export type Result = z.infer<typeof ResultSchema>;
|
|
88
|
+
|
|
89
|
+
export const SummarySchema = z.object({
|
|
90
|
+
run_id: z.string(),
|
|
91
|
+
git_sha: z.string(),
|
|
92
|
+
prompt_versions: PromptVersionsSchema,
|
|
93
|
+
results: z.array(ResultSchema),
|
|
94
|
+
overall: z.object({
|
|
95
|
+
passed: z.number().int().nonnegative(),
|
|
96
|
+
failed: z.number().int().nonnegative(),
|
|
97
|
+
total: z.number().int().nonnegative(),
|
|
98
|
+
score: z.number().min(0).max(1),
|
|
99
|
+
}),
|
|
100
|
+
});
|
|
101
|
+
export type Summary = z.infer<typeof SummarySchema>;
|
package/src/jira/client.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { JiraClient } from './types';
|
|
2
1
|
import { createMcpBackend } from './mcp-backend';
|
|
3
2
|
import { createRestBackend } from './rest-backend';
|
|
3
|
+
import type { JiraClient } from './types';
|
|
4
4
|
|
|
5
5
|
export interface CreateJiraClientOptions {
|
|
6
6
|
baseUrl: string;
|
|
@@ -14,7 +14,9 @@ export async function createJiraClient(opts: CreateJiraClientOptions): Promise<J
|
|
|
14
14
|
if (mcp) return mcp;
|
|
15
15
|
}
|
|
16
16
|
if (!opts.rest) {
|
|
17
|
-
throw new Error(
|
|
17
|
+
throw new Error(
|
|
18
|
+
'Atlassian MCP not connected and no REST credentials provided (JIRA_EMAIL + JIRA_API_TOKEN).',
|
|
19
|
+
);
|
|
18
20
|
}
|
|
19
21
|
return createRestBackend(opts.baseUrl, opts.rest);
|
|
20
22
|
}
|
package/src/jira/fields.ts
CHANGED
|
@@ -8,8 +8,10 @@ export interface JiraFieldInfo {
|
|
|
8
8
|
|
|
9
9
|
export function rankStoryCandidates(fields: JiraFieldInfo[]): JiraFieldInfo[] {
|
|
10
10
|
return fields
|
|
11
|
-
.filter(f => f.hasContent)
|
|
12
|
-
.filter(
|
|
11
|
+
.filter((f) => f.hasContent)
|
|
12
|
+
.filter(
|
|
13
|
+
(f) => !['attachment', 'comment', 'created', 'updated', 'reporter', 'creator'].includes(f.id),
|
|
14
|
+
)
|
|
13
15
|
.sort((a, b) => {
|
|
14
16
|
const ai = PREFERRED_STORY_IDS.indexOf(a.id);
|
|
15
17
|
const bi = PREFERRED_STORY_IDS.indexOf(b.id);
|
package/src/jira/mcp-backend.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { existsSync, readFileSync, writeFileSync
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
2
|
import { tmpdir } from 'node:os';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
4
|
import type { JiraClient, JiraTicket } from './types';
|
package/src/jira/rest-backend.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import type { JiraClient, JiraFieldMap, JiraTicket } from './types';
|
|
2
2
|
|
|
3
|
-
interface RestCreds {
|
|
3
|
+
interface RestCreds {
|
|
4
|
+
email: string;
|
|
5
|
+
apiToken: string;
|
|
6
|
+
}
|
|
4
7
|
|
|
5
8
|
export function createRestBackend(baseUrl: string, creds: RestCreds): JiraClient {
|
|
6
9
|
const authHeader = `Basic ${Buffer.from(`${creds.email}:${creds.apiToken}`).toString('base64')}`;
|
|
@@ -17,7 +20,9 @@ export function createRestBackend(baseUrl: string, creds: RestCreds): JiraClient
|
|
|
17
20
|
},
|
|
18
21
|
});
|
|
19
22
|
if (!r.ok && r.status !== 201) {
|
|
20
|
-
throw new Error(
|
|
23
|
+
throw new Error(
|
|
24
|
+
`Jira REST ${init?.method ?? 'GET'} ${path} failed: ${r.status} ${await r.text()}`,
|
|
25
|
+
);
|
|
21
26
|
}
|
|
22
27
|
return r;
|
|
23
28
|
}
|
|
@@ -32,7 +37,10 @@ export function createRestBackend(baseUrl: string, creds: RestCreds): JiraClient
|
|
|
32
37
|
const json = (await r.json()) as { key: string; fields: Record<string, unknown> };
|
|
33
38
|
const f = json.fields;
|
|
34
39
|
const attachments = Array.isArray(f.attachment)
|
|
35
|
-
? (f.attachment as Array<{ filename: string; content: string }>).map(a => ({
|
|
40
|
+
? (f.attachment as Array<{ filename: string; content: string }>).map((a) => ({
|
|
41
|
+
filename: a.filename,
|
|
42
|
+
url: a.content,
|
|
43
|
+
}))
|
|
36
44
|
: [];
|
|
37
45
|
const ticket: JiraTicket = {
|
|
38
46
|
key: json.key,
|
|
@@ -50,7 +58,11 @@ export function createRestBackend(baseUrl: string, creds: RestCreds): JiraClient
|
|
|
50
58
|
const r = await req(`/rest/api/3/issue/${encodeURIComponent(key)}/comment`, {
|
|
51
59
|
method: 'POST',
|
|
52
60
|
body: JSON.stringify({
|
|
53
|
-
body: {
|
|
61
|
+
body: {
|
|
62
|
+
type: 'doc',
|
|
63
|
+
version: 1,
|
|
64
|
+
content: [{ type: 'paragraph', content: [{ type: 'text', text: body }] }],
|
|
65
|
+
},
|
|
54
66
|
}),
|
|
55
67
|
});
|
|
56
68
|
const json = (await r.json()) as { id: string };
|
|
@@ -59,7 +71,7 @@ export function createRestBackend(baseUrl: string, creds: RestCreds): JiraClient
|
|
|
59
71
|
async transitionStatus(key, statusName) {
|
|
60
72
|
const tr = await req(`/rest/api/3/issue/${encodeURIComponent(key)}/transitions`);
|
|
61
73
|
const json = (await tr.json()) as { transitions: Array<{ id: string; name: string }> };
|
|
62
|
-
const t = json.transitions.find(x => x.name === statusName);
|
|
74
|
+
const t = json.transitions.find((x) => x.name === statusName);
|
|
63
75
|
if (!t) throw new Error(`No transition named "${statusName}" available for ${key}`);
|
|
64
76
|
await req(`/rest/api/3/issue/${encodeURIComponent(key)}/transitions`, {
|
|
65
77
|
method: 'POST',
|
package/src/jira/retry.ts
CHANGED
|
@@ -16,8 +16,8 @@ export async function withRetry<T>(fn: () => Promise<T>, opts: RetryOptions): Pr
|
|
|
16
16
|
if (opts.shouldRetry && !opts.shouldRetry(err)) throw err;
|
|
17
17
|
attempt++;
|
|
18
18
|
if (attempt >= opts.maxAttempts) break;
|
|
19
|
-
const delay = opts.baseMs *
|
|
20
|
-
await new Promise(r => setTimeout(r, delay));
|
|
19
|
+
const delay = opts.baseMs * opts.factor ** (attempt - 1);
|
|
20
|
+
await new Promise((r) => setTimeout(r, delay));
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
throw lastErr;
|
package/src/lock/file-lock.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { existsSync,
|
|
2
|
-
import { dirname } from 'node:path';
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from 'node:fs';
|
|
3
2
|
import { hostname } from 'node:os';
|
|
3
|
+
import { dirname } from 'node:path';
|
|
4
4
|
|
|
5
5
|
export interface LockData {
|
|
6
6
|
pid: number;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { appendFileSync,
|
|
1
|
+
import { appendFileSync, existsSync, mkdirSync, readFileSync } from 'node:fs';
|
|
2
2
|
import { dirname } from 'node:path';
|
|
3
3
|
|
|
4
4
|
export interface LogEntry {
|
|
@@ -20,6 +20,6 @@ export class NdjsonLogger {
|
|
|
20
20
|
if (!existsSync(path)) return [];
|
|
21
21
|
const txt = readFileSync(path, 'utf8').trim();
|
|
22
22
|
if (!txt) return [];
|
|
23
|
-
return txt.split('\n').map(line => JSON.parse(line) as LogEntry);
|
|
23
|
+
return txt.split('\n').map((line) => JSON.parse(line) as LogEntry);
|
|
24
24
|
}
|
|
25
25
|
}
|
|
@@ -8,24 +8,30 @@ export interface JiraCommentInput extends ClassifyOutput {
|
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
export function buildJiraComment(input: JiraCommentInput): string {
|
|
11
|
-
const passed = input.scenarios.filter(s => s.outcome === 'PASS').length;
|
|
11
|
+
const passed = input.scenarios.filter((s) => s.outcome === 'PASS').length;
|
|
12
12
|
const total = input.scenarios.length;
|
|
13
13
|
const icon = input.overall === 'PASS' ? '🟢' : '🔴';
|
|
14
14
|
const header = `## ${icon} xera test ${input.overall === 'PASS' ? 'PASSED' : 'FAILED'} — ${input.ticket} (run ${input.runId})`;
|
|
15
15
|
const meta = `**Classification:** ${input.overall} (confidence: ${input.overallConfidence})\n**Scenarios:** ${passed} / ${total} passed`;
|
|
16
16
|
|
|
17
17
|
const failingBlocks = input.scenarios
|
|
18
|
-
.filter(s => s.outcome === 'FAIL')
|
|
19
|
-
.map(
|
|
18
|
+
.filter((s) => s.outcome === 'FAIL')
|
|
19
|
+
.map(
|
|
20
|
+
(s) =>
|
|
21
|
+
`### Scenario: ${s.name}\n- **Classification:** ${s.class} (confidence: ${s.confidence})\n- **Diagnosis:** ${s.rationale}`,
|
|
22
|
+
)
|
|
20
23
|
.join('\n\n');
|
|
21
24
|
|
|
22
25
|
const reproduce = `### Reproduce locally\n\n\`\`\`\nbunx xera-internal exec ${input.ticket} --replay=${input.runId}\n\`\`\``;
|
|
23
26
|
|
|
24
|
-
const next =
|
|
25
|
-
|
|
26
|
-
|
|
27
|
+
const next =
|
|
28
|
+
input.overall === 'PASS'
|
|
29
|
+
? ''
|
|
30
|
+
: `### Suggested next action\n- Review the failing scenarios above.\n- Re-run after changes: open Claude Code and run \`/xera-run ${input.ticket}\`.\n\n`;
|
|
27
31
|
|
|
28
32
|
const footer = `---\nxera v${input.xeraVersion} • prompts v${input.promptsVersion}`;
|
|
29
33
|
|
|
30
|
-
return [header, '', meta, '', failingBlocks, '', next, reproduce, '', footer]
|
|
34
|
+
return [header, '', meta, '', failingBlocks, '', next, reproduce, '', footer]
|
|
35
|
+
.filter(Boolean)
|
|
36
|
+
.join('\n');
|
|
31
37
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { ClassifyOutput } from '../classifier/types';
|
|
2
1
|
import { existsSync } from 'node:fs';
|
|
3
|
-
import {
|
|
2
|
+
import { type StatusJson, appendHistory, readStatus, writeStatus } from '../artifact/status';
|
|
3
|
+
import type { ClassifyOutput } from '../classifier/types';
|
|
4
4
|
|
|
5
5
|
export interface StatusWriterInput {
|
|
6
6
|
ticket: string;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/adapter/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACrC,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,gBAAgB,CAAC,EAAE,KAAK,CAAC;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC1E,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,KAAK,EAAE,cAAc,CAAA;KAAE,CAAC,CAAC;IAC/E,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChE;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACxD,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACjD,QAAQ,CAAC,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,cAAc,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvG,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;CACjC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/artifact/hash.ts"],"names":[],"mappings":"AAGA,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG5D"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/artifact/meta.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAazB,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAGtD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CAG5D;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAQ3E"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/artifact/paths.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,QAAQ,CAAC;CACtC;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,CA6BpF;AAED,wBAAgB,aAAa,CAAC,GAAG,GAAE,IAAiB,GAAG,MAAM,CAE5D"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/artifact/status.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,QAAA,MAAM,kBAAkB,wEAAsE,CAAC;AAI/F,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EAI7B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAc3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAIhE,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAG1D;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAGlE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,UAAU,CAQ3E"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"encrypt.d.ts","sourceRoot":"","sources":["../../src/auth/encrypt.ts"],"names":[],"mappings":"AAQA,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAQD,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAOjE;AAED,wBAAgB,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAYlE"}
|
package/dist/auth/key.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"key.d.ts","sourceRoot":"","sources":["../../src/auth/key.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,kBAAkB,CAAC;AAE5C,wBAAgB,cAAc,IAAI,MAAM,CAYvC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../../src/auth/refresh.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9C,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAI9C,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ/C;AAED,MAAM,WAAW,aAAa;IAAG,GAAG,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;CAAE;AAEtE,wBAAgB,YAAY,CAC1B,KAAK,EAAE,cAAc,GAAG,IAAI,EAC5B,MAAM,EAAE,aAAa,EACrB,GAAG,GAAE,IAAiB,GACrB,OAAO,CAST"}
|
package/dist/auth/state.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/auth/state.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;EAM/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAMlE,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,IAAI,CAI3E;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAMlF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../src/bin-internal/exec.ts"],"names":[],"mappings":"AAWA,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA8F7D"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/bin-internal/fetch.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,YAAY;IAAG,GAAG,CAAC,EAAE,MAAM,CAAC;CAAE;AAE/C,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE,YAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CA8CvF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bin-internal/index.ts"],"names":[],"mappings":"AA0BA,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAYzD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../src/bin-internal/lint.ts"],"names":[],"mappings":"AAGA,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ7D"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../src/bin-internal/normalize.ts"],"names":[],"mappings":"AAKA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAclE"}
|