@xera-ai/core 0.1.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.
Files changed (80) hide show
  1. package/bin/internal.ts +4 -0
  2. package/dist/adapter/types.d.ts +70 -0
  3. package/dist/adapter/types.d.ts.map +1 -0
  4. package/dist/artifact/hash.d.ts +4 -0
  5. package/dist/artifact/hash.d.ts.map +1 -0
  6. package/dist/artifact/meta.d.ts +46 -0
  7. package/dist/artifact/meta.d.ts.map +1 -0
  8. package/dist/artifact/paths.d.ts +25 -0
  9. package/dist/artifact/paths.d.ts.map +1 -0
  10. package/dist/artifact/status.d.ts +96 -0
  11. package/dist/artifact/status.d.ts.map +1 -0
  12. package/dist/auth/encrypt.d.ts +4 -0
  13. package/dist/auth/encrypt.d.ts.map +1 -0
  14. package/dist/auth/key.d.ts +3 -0
  15. package/dist/auth/key.d.ts.map +1 -0
  16. package/dist/auth/refresh.d.ts +9 -0
  17. package/dist/auth/refresh.d.ts.map +1 -0
  18. package/dist/auth/state.d.ts +24 -0
  19. package/dist/auth/state.d.ts.map +1 -0
  20. package/dist/bin/internal.js +1013 -0
  21. package/dist/bin-internal/exec.d.ts +2 -0
  22. package/dist/bin-internal/exec.d.ts.map +1 -0
  23. package/dist/bin-internal/fetch.d.ts +5 -0
  24. package/dist/bin-internal/fetch.d.ts.map +1 -0
  25. package/dist/bin-internal/index.d.ts +2 -0
  26. package/dist/bin-internal/index.d.ts.map +1 -0
  27. package/dist/bin-internal/lint.d.ts +2 -0
  28. package/dist/bin-internal/lint.d.ts.map +1 -0
  29. package/dist/bin-internal/normalize.d.ts +2 -0
  30. package/dist/bin-internal/normalize.d.ts.map +1 -0
  31. package/dist/bin-internal/post.d.ts +2 -0
  32. package/dist/bin-internal/post.d.ts.map +1 -0
  33. package/dist/bin-internal/promote.d.ts +2 -0
  34. package/dist/bin-internal/promote.d.ts.map +1 -0
  35. package/dist/bin-internal/report.d.ts +2 -0
  36. package/dist/bin-internal/report.d.ts.map +1 -0
  37. package/dist/bin-internal/status-cmd.d.ts +2 -0
  38. package/dist/bin-internal/status-cmd.d.ts.map +1 -0
  39. package/dist/bin-internal/typecheck.d.ts +2 -0
  40. package/dist/bin-internal/typecheck.d.ts.map +1 -0
  41. package/dist/bin-internal/unlock.d.ts +2 -0
  42. package/dist/bin-internal/unlock.d.ts.map +1 -0
  43. package/dist/bin-internal/validate-feature.d.ts +2 -0
  44. package/dist/bin-internal/validate-feature.d.ts.map +1 -0
  45. package/dist/classifier/aggregate.d.ts +3 -0
  46. package/dist/classifier/aggregate.d.ts.map +1 -0
  47. package/dist/classifier/history.d.ts +13 -0
  48. package/dist/classifier/history.d.ts.map +1 -0
  49. package/dist/classifier/types.d.ts +26 -0
  50. package/dist/classifier/types.d.ts.map +1 -0
  51. package/dist/config/define.d.ts +3 -0
  52. package/dist/config/define.d.ts.map +1 -0
  53. package/dist/config/load.d.ts +3 -0
  54. package/dist/config/load.d.ts.map +1 -0
  55. package/dist/config/schema.d.ts +326 -0
  56. package/dist/config/schema.d.ts.map +1 -0
  57. package/dist/index.d.ts +20 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/jira/client.d.ts +11 -0
  60. package/dist/jira/client.d.ts.map +1 -0
  61. package/dist/jira/fields.d.ts +7 -0
  62. package/dist/jira/fields.d.ts.map +1 -0
  63. package/dist/jira/mcp-backend.d.ts +3 -0
  64. package/dist/jira/mcp-backend.d.ts.map +1 -0
  65. package/dist/jira/rest-backend.d.ts +8 -0
  66. package/dist/jira/rest-backend.d.ts.map +1 -0
  67. package/dist/jira/retry.d.ts +8 -0
  68. package/dist/jira/retry.d.ts.map +1 -0
  69. package/dist/jira/types.d.ts +29 -0
  70. package/dist/jira/types.d.ts.map +1 -0
  71. package/dist/lock/file-lock.d.ts +12 -0
  72. package/dist/lock/file-lock.d.ts.map +1 -0
  73. package/dist/logging/ndjson-logger.d.ts +11 -0
  74. package/dist/logging/ndjson-logger.d.ts.map +1 -0
  75. package/dist/reporter/jira-comment.d.ts +9 -0
  76. package/dist/reporter/jira-comment.d.ts.map +1 -0
  77. package/dist/reporter/status-writer.d.ts +14 -0
  78. package/dist/reporter/status-writer.d.ts.map +1 -0
  79. package/dist/src/index.js +587 -0
  80. package/package.json +30 -0
@@ -0,0 +1,2 @@
1
+ export declare function execCmd(argv: string[]): Promise<number>;
2
+ //# sourceMappingURL=exec.d.ts.map
@@ -0,0 +1 @@
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,CAoF7D"}
@@ -0,0 +1,5 @@
1
+ export interface FetchCmdOpts {
2
+ cwd?: string;
3
+ }
4
+ export declare function fetchCmd(argv: string[], opts?: FetchCmdOpts): Promise<number>;
5
+ //# sourceMappingURL=fetch.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,2 @@
1
+ export declare function run(argv: string[]): Promise<number>;
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,2 @@
1
+ export declare function lintCmd(argv: string[]): Promise<number>;
2
+ //# sourceMappingURL=lint.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,2 @@
1
+ export declare function normalizeCmd(argv: string[]): Promise<number>;
2
+ //# sourceMappingURL=normalize.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,2 @@
1
+ export declare function postCmd(argv: string[]): Promise<number>;
2
+ //# sourceMappingURL=post.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post.d.ts","sourceRoot":"","sources":["../../src/bin-internal/post.ts"],"names":[],"mappings":"AAOA,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA2B7D"}
@@ -0,0 +1,2 @@
1
+ export declare function promoteCmd(argv: string[]): Promise<number>;
2
+ //# sourceMappingURL=promote.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promote.d.ts","sourceRoot":"","sources":["../../src/bin-internal/promote.ts"],"names":[],"mappings":"AAEA,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAShE"}
@@ -0,0 +1,2 @@
1
+ export declare function reportCmd(argv: string[]): Promise<number>;
2
+ //# sourceMappingURL=report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/bin-internal/report.ts"],"names":[],"mappings":"AAcA,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAgC/D"}
@@ -0,0 +1,2 @@
1
+ export declare function statusCmd(argv: string[]): Promise<number>;
2
+ //# sourceMappingURL=status-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-cmd.d.ts","sourceRoot":"","sources":["../../src/bin-internal/status-cmd.ts"],"names":[],"mappings":"AAGA,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAS/D"}
@@ -0,0 +1,2 @@
1
+ export declare function typecheckCmd(argv: string[]): Promise<number>;
2
+ //# sourceMappingURL=typecheck.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typecheck.d.ts","sourceRoot":"","sources":["../../src/bin-internal/typecheck.ts"],"names":[],"mappings":"AAGA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAQlE"}
@@ -0,0 +1,2 @@
1
+ export declare function unlockCmd(argv: string[]): Promise<number>;
2
+ //# sourceMappingURL=unlock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unlock.d.ts","sourceRoot":"","sources":["../../src/bin-internal/unlock.ts"],"names":[],"mappings":"AAGA,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAc/D"}
@@ -0,0 +1,2 @@
1
+ export declare function validateFeatureCmd(argv: string[]): Promise<number>;
2
+ //# sourceMappingURL=validate-feature.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-feature.d.ts","sourceRoot":"","sources":["../../src/bin-internal/validate-feature.ts"],"names":[],"mappings":"AAIA,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CASxE"}
@@ -0,0 +1,3 @@
1
+ import type { ClassifyOutput, ScenarioClassification } from './types';
2
+ export declare function aggregateScenarios(scenarios: ScenarioClassification[]): ClassifyOutput;
3
+ //# sourceMappingURL=aggregate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregate.d.ts","sourceRoot":"","sources":["../../src/classifier/aggregate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAc,MAAM,SAAS,CAAC;AAQlF,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,sBAAsB,EAAE,GAAG,cAAc,CAiBtF"}
@@ -0,0 +1,13 @@
1
+ import type { Classification } from '../artifact/status';
2
+ export interface HistorySummary {
3
+ firstRun: boolean;
4
+ consecutiveFails: number;
5
+ lastResult: 'PASS' | 'FAIL' | null;
6
+ lastClass: Classification | null;
7
+ }
8
+ export declare function summarizeHistory(history: Array<{
9
+ ts: string;
10
+ result: 'PASS' | 'FAIL';
11
+ class: Classification;
12
+ }>): HistorySummary;
13
+ //# sourceMappingURL=history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/classifier/history.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACnC,SAAS,EAAE,cAAc,GAAG,IAAI,CAAC;CAClC;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,KAAK,EAAE,cAAc,CAAA;CAAE,CAAC,GAC7E,cAAc,CAehB"}
@@ -0,0 +1,26 @@
1
+ import type { Classification } from '../artifact/status';
2
+ export type { Classification };
3
+ export type Confidence = 'low' | 'medium' | 'high';
4
+ export interface ScenarioClassification {
5
+ name: string;
6
+ outcome: 'PASS' | 'FAIL' | 'SKIPPED';
7
+ class: Classification;
8
+ confidence: Confidence;
9
+ rationale: string;
10
+ }
11
+ export interface ClassifyOutput {
12
+ overall: Classification;
13
+ overallConfidence: Confidence;
14
+ scenarios: ScenarioClassification[];
15
+ }
16
+ export interface ClassifyContextInput {
17
+ history: Array<{
18
+ ts: string;
19
+ result: 'PASS' | 'FAIL';
20
+ class: Classification;
21
+ }>;
22
+ storyHashChanged: boolean;
23
+ specHashChanged: boolean;
24
+ firstRun: boolean;
25
+ }
26
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/classifier/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,YAAY,EAAE,cAAc,EAAE,CAAC;AAC/B,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEnD,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACrC,KAAK,EAAE,cAAc,CAAC;IACtB,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,cAAc,CAAC;IACxB,iBAAiB,EAAE,UAAU,CAAC;IAC9B,SAAS,EAAE,sBAAsB,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,oBAAoB;IACnC,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;IACzB,QAAQ,EAAE,OAAO,CAAC;CACnB"}
@@ -0,0 +1,3 @@
1
+ import type { XeraConfig } from './schema';
2
+ export declare function defineConfig(config: XeraConfig): XeraConfig;
3
+ //# sourceMappingURL=define.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define.d.ts","sourceRoot":"","sources":["../../src/config/define.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAAmB"}
@@ -0,0 +1,3 @@
1
+ import { type XeraConfig } from './schema';
2
+ export declare function loadConfig(cwd: string): Promise<XeraConfig>;
3
+ //# sourceMappingURL=load.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"AAGA,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAE7D,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAQjE"}
@@ -0,0 +1,326 @@
1
+ import { z } from 'zod';
2
+ export declare const XeraConfigSchema: z.ZodObject<{
3
+ jira: z.ZodObject<{
4
+ baseUrl: z.ZodString;
5
+ projectKeys: z.ZodArray<z.ZodString, "many">;
6
+ fields: z.ZodObject<{
7
+ story: z.ZodString;
8
+ acceptanceCriteria: z.ZodOptional<z.ZodString>;
9
+ attachments: z.ZodDefault<z.ZodString>;
10
+ }, "strip", z.ZodTypeAny, {
11
+ story: string;
12
+ attachments: string;
13
+ acceptanceCriteria?: string | undefined;
14
+ }, {
15
+ story: string;
16
+ acceptanceCriteria?: string | undefined;
17
+ attachments?: string | undefined;
18
+ }>;
19
+ }, "strip", z.ZodTypeAny, {
20
+ baseUrl: string;
21
+ projectKeys: string[];
22
+ fields: {
23
+ story: string;
24
+ attachments: string;
25
+ acceptanceCriteria?: string | undefined;
26
+ };
27
+ }, {
28
+ baseUrl: string;
29
+ projectKeys: string[];
30
+ fields: {
31
+ story: string;
32
+ acceptanceCriteria?: string | undefined;
33
+ attachments?: string | undefined;
34
+ };
35
+ }>;
36
+ web: z.ZodEffects<z.ZodObject<{
37
+ baseUrl: z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodString>, Record<string, string>, Record<string, string>>;
38
+ defaultEnv: z.ZodString;
39
+ auth: z.ZodDefault<z.ZodObject<{
40
+ strategy: z.ZodDefault<z.ZodEnum<["storageState", "apiToken", "none"]>>;
41
+ ttl: z.ZodDefault<z.ZodString>;
42
+ refreshBuffer: z.ZodDefault<z.ZodString>;
43
+ setupScript: z.ZodOptional<z.ZodString>;
44
+ roles: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
45
+ envEmail: z.ZodString;
46
+ envPassword: z.ZodString;
47
+ }, "strip", z.ZodTypeAny, {
48
+ envEmail: string;
49
+ envPassword: string;
50
+ }, {
51
+ envEmail: string;
52
+ envPassword: string;
53
+ }>>>;
54
+ }, "strip", z.ZodTypeAny, {
55
+ strategy: "storageState" | "apiToken" | "none";
56
+ ttl: string;
57
+ refreshBuffer: string;
58
+ roles: Record<string, {
59
+ envEmail: string;
60
+ envPassword: string;
61
+ }>;
62
+ setupScript?: string | undefined;
63
+ }, {
64
+ strategy?: "storageState" | "apiToken" | "none" | undefined;
65
+ ttl?: string | undefined;
66
+ refreshBuffer?: string | undefined;
67
+ setupScript?: string | undefined;
68
+ roles?: Record<string, {
69
+ envEmail: string;
70
+ envPassword: string;
71
+ }> | undefined;
72
+ }>>;
73
+ testData: z.ZodDefault<z.ZodObject<{
74
+ users: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
75
+ fromAuth: z.ZodString;
76
+ }, "strip", z.ZodTypeAny, {
77
+ fromAuth: string;
78
+ }, {
79
+ fromAuth: string;
80
+ }>>>;
81
+ }, "strip", z.ZodTypeAny, {
82
+ users: Record<string, {
83
+ fromAuth: string;
84
+ }>;
85
+ }, {
86
+ users?: Record<string, {
87
+ fromAuth: string;
88
+ }> | undefined;
89
+ }>>;
90
+ }, "strip", z.ZodTypeAny, {
91
+ baseUrl: Record<string, string>;
92
+ defaultEnv: string;
93
+ auth: {
94
+ strategy: "storageState" | "apiToken" | "none";
95
+ ttl: string;
96
+ refreshBuffer: string;
97
+ roles: Record<string, {
98
+ envEmail: string;
99
+ envPassword: string;
100
+ }>;
101
+ setupScript?: string | undefined;
102
+ };
103
+ testData: {
104
+ users: Record<string, {
105
+ fromAuth: string;
106
+ }>;
107
+ };
108
+ }, {
109
+ baseUrl: Record<string, string>;
110
+ defaultEnv: string;
111
+ auth?: {
112
+ strategy?: "storageState" | "apiToken" | "none" | undefined;
113
+ ttl?: string | undefined;
114
+ refreshBuffer?: string | undefined;
115
+ setupScript?: string | undefined;
116
+ roles?: Record<string, {
117
+ envEmail: string;
118
+ envPassword: string;
119
+ }> | undefined;
120
+ } | undefined;
121
+ testData?: {
122
+ users?: Record<string, {
123
+ fromAuth: string;
124
+ }> | undefined;
125
+ } | undefined;
126
+ }>, {
127
+ baseUrl: Record<string, string>;
128
+ defaultEnv: string;
129
+ auth: {
130
+ strategy: "storageState" | "apiToken" | "none";
131
+ ttl: string;
132
+ refreshBuffer: string;
133
+ roles: Record<string, {
134
+ envEmail: string;
135
+ envPassword: string;
136
+ }>;
137
+ setupScript?: string | undefined;
138
+ };
139
+ testData: {
140
+ users: Record<string, {
141
+ fromAuth: string;
142
+ }>;
143
+ };
144
+ }, {
145
+ baseUrl: Record<string, string>;
146
+ defaultEnv: string;
147
+ auth?: {
148
+ strategy?: "storageState" | "apiToken" | "none" | undefined;
149
+ ttl?: string | undefined;
150
+ refreshBuffer?: string | undefined;
151
+ setupScript?: string | undefined;
152
+ roles?: Record<string, {
153
+ envEmail: string;
154
+ envPassword: string;
155
+ }> | undefined;
156
+ } | undefined;
157
+ testData?: {
158
+ users?: Record<string, {
159
+ fromAuth: string;
160
+ }> | undefined;
161
+ } | undefined;
162
+ }>;
163
+ ai: z.ZodDefault<z.ZodObject<{
164
+ livePageSnapshot: z.ZodDefault<z.ZodBoolean>;
165
+ confidenceThreshold: z.ZodDefault<z.ZodEnum<["low", "medium", "high"]>>;
166
+ maxRetries: z.ZodDefault<z.ZodObject<{
167
+ typecheck: z.ZodDefault<z.ZodNumber>;
168
+ lint: z.ZodDefault<z.ZodNumber>;
169
+ validateFeature: z.ZodDefault<z.ZodNumber>;
170
+ }, "strip", z.ZodTypeAny, {
171
+ typecheck: number;
172
+ lint: number;
173
+ validateFeature: number;
174
+ }, {
175
+ typecheck?: number | undefined;
176
+ lint?: number | undefined;
177
+ validateFeature?: number | undefined;
178
+ }>>;
179
+ }, "strip", z.ZodTypeAny, {
180
+ livePageSnapshot: boolean;
181
+ confidenceThreshold: "low" | "medium" | "high";
182
+ maxRetries: {
183
+ typecheck: number;
184
+ lint: number;
185
+ validateFeature: number;
186
+ };
187
+ }, {
188
+ livePageSnapshot?: boolean | undefined;
189
+ confidenceThreshold?: "low" | "medium" | "high" | undefined;
190
+ maxRetries?: {
191
+ typecheck?: number | undefined;
192
+ lint?: number | undefined;
193
+ validateFeature?: number | undefined;
194
+ } | undefined;
195
+ }>>;
196
+ reporting: z.ZodDefault<z.ZodObject<{
197
+ language: z.ZodDefault<z.ZodEnum<["en", "vi"]>>;
198
+ postToJira: z.ZodDefault<z.ZodBoolean>;
199
+ transition: z.ZodDefault<z.ZodObject<{
200
+ onPass: z.ZodDefault<z.ZodNullable<z.ZodString>>;
201
+ onFail: z.ZodDefault<z.ZodNullable<z.ZodString>>;
202
+ }, "strip", z.ZodTypeAny, {
203
+ onPass: string | null;
204
+ onFail: string | null;
205
+ }, {
206
+ onPass?: string | null | undefined;
207
+ onFail?: string | null | undefined;
208
+ }>>;
209
+ artifactLinks: z.ZodDefault<z.ZodEnum<["git", "local"]>>;
210
+ }, "strip", z.ZodTypeAny, {
211
+ language: "en" | "vi";
212
+ postToJira: boolean;
213
+ transition: {
214
+ onPass: string | null;
215
+ onFail: string | null;
216
+ };
217
+ artifactLinks: "git" | "local";
218
+ }, {
219
+ language?: "en" | "vi" | undefined;
220
+ postToJira?: boolean | undefined;
221
+ transition?: {
222
+ onPass?: string | null | undefined;
223
+ onFail?: string | null | undefined;
224
+ } | undefined;
225
+ artifactLinks?: "git" | "local" | undefined;
226
+ }>>;
227
+ adapters: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
228
+ }, "strip", z.ZodTypeAny, {
229
+ jira: {
230
+ baseUrl: string;
231
+ projectKeys: string[];
232
+ fields: {
233
+ story: string;
234
+ attachments: string;
235
+ acceptanceCriteria?: string | undefined;
236
+ };
237
+ };
238
+ web: {
239
+ baseUrl: Record<string, string>;
240
+ defaultEnv: string;
241
+ auth: {
242
+ strategy: "storageState" | "apiToken" | "none";
243
+ ttl: string;
244
+ refreshBuffer: string;
245
+ roles: Record<string, {
246
+ envEmail: string;
247
+ envPassword: string;
248
+ }>;
249
+ setupScript?: string | undefined;
250
+ };
251
+ testData: {
252
+ users: Record<string, {
253
+ fromAuth: string;
254
+ }>;
255
+ };
256
+ };
257
+ ai: {
258
+ livePageSnapshot: boolean;
259
+ confidenceThreshold: "low" | "medium" | "high";
260
+ maxRetries: {
261
+ typecheck: number;
262
+ lint: number;
263
+ validateFeature: number;
264
+ };
265
+ };
266
+ reporting: {
267
+ language: "en" | "vi";
268
+ postToJira: boolean;
269
+ transition: {
270
+ onPass: string | null;
271
+ onFail: string | null;
272
+ };
273
+ artifactLinks: "git" | "local";
274
+ };
275
+ adapters: string[];
276
+ }, {
277
+ jira: {
278
+ baseUrl: string;
279
+ projectKeys: string[];
280
+ fields: {
281
+ story: string;
282
+ acceptanceCriteria?: string | undefined;
283
+ attachments?: string | undefined;
284
+ };
285
+ };
286
+ web: {
287
+ baseUrl: Record<string, string>;
288
+ defaultEnv: string;
289
+ auth?: {
290
+ strategy?: "storageState" | "apiToken" | "none" | undefined;
291
+ ttl?: string | undefined;
292
+ refreshBuffer?: string | undefined;
293
+ setupScript?: string | undefined;
294
+ roles?: Record<string, {
295
+ envEmail: string;
296
+ envPassword: string;
297
+ }> | undefined;
298
+ } | undefined;
299
+ testData?: {
300
+ users?: Record<string, {
301
+ fromAuth: string;
302
+ }> | undefined;
303
+ } | undefined;
304
+ };
305
+ ai?: {
306
+ livePageSnapshot?: boolean | undefined;
307
+ confidenceThreshold?: "low" | "medium" | "high" | undefined;
308
+ maxRetries?: {
309
+ typecheck?: number | undefined;
310
+ lint?: number | undefined;
311
+ validateFeature?: number | undefined;
312
+ } | undefined;
313
+ } | undefined;
314
+ reporting?: {
315
+ language?: "en" | "vi" | undefined;
316
+ postToJira?: boolean | undefined;
317
+ transition?: {
318
+ onPass?: string | null | undefined;
319
+ onFail?: string | null | undefined;
320
+ } | undefined;
321
+ artifactLinks?: "git" | "local" | undefined;
322
+ } | undefined;
323
+ adapters?: string[] | undefined;
324
+ }>;
325
+ export type XeraConfig = z.infer<typeof XeraConfigSchema>;
326
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAiExB,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAM3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ export declare const VERSION = "0.1.0";
2
+ export type * from './adapter/types';
3
+ export * from './config/schema';
4
+ export * from './config/define';
5
+ export * from './config/load';
6
+ export * from './artifact/paths';
7
+ export * from './artifact/hash';
8
+ export * from './artifact/meta';
9
+ export * from './artifact/status';
10
+ export * from './logging/ndjson-logger';
11
+ export * from './lock/file-lock';
12
+ export * from './jira/types';
13
+ export * from './jira/client';
14
+ export * from './jira/fields';
15
+ export * from './jira/retry';
16
+ export * from './auth/encrypt';
17
+ export * from './auth/key';
18
+ export * from './auth/state';
19
+ export * from './auth/refresh';
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UAAU,CAAC;AAC/B,mBAAmB,iBAAiB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { JiraClient } from './types';
2
+ export interface CreateJiraClientOptions {
3
+ baseUrl: string;
4
+ preferMcp?: boolean;
5
+ rest?: {
6
+ email: string;
7
+ apiToken: string;
8
+ };
9
+ }
10
+ export declare function createJiraClient(opts: CreateJiraClientOptions): Promise<JiraClient>;
11
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/jira/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAI1C,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5C;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,UAAU,CAAC,CASzF"}
@@ -0,0 +1,7 @@
1
+ export interface JiraFieldInfo {
2
+ id: string;
3
+ name: string;
4
+ hasContent: boolean;
5
+ }
6
+ export declare function rankStoryCandidates(fields: JiraFieldInfo[]): JiraFieldInfo[];
7
+ //# sourceMappingURL=fields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../src/jira/fields.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAY5E"}
@@ -0,0 +1,3 @@
1
+ import type { JiraClient } from './types';
2
+ export declare function createMcpBackend(_baseUrl: string): Promise<JiraClient | null>;
3
+ //# sourceMappingURL=mcp-backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-backend.d.ts","sourceRoot":"","sources":["../../src/jira/mcp-backend.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,SAAS,CAAC;AAItD,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAgCnF"}
@@ -0,0 +1,8 @@
1
+ import type { JiraClient } from './types';
2
+ interface RestCreds {
3
+ email: string;
4
+ apiToken: string;
5
+ }
6
+ export declare function createRestBackend(baseUrl: string, creds: RestCreds): JiraClient;
7
+ export {};
8
+ //# sourceMappingURL=rest-backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rest-backend.d.ts","sourceRoot":"","sources":["../../src/jira/rest-backend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAA4B,MAAM,SAAS,CAAC;AAEpE,UAAU,SAAS;IAAG,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;CAAE;AAExD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,UAAU,CA0E/E"}
@@ -0,0 +1,8 @@
1
+ export interface RetryOptions {
2
+ maxAttempts: number;
3
+ baseMs: number;
4
+ factor: number;
5
+ shouldRetry?: (err: unknown) => boolean;
6
+ }
7
+ export declare function withRetry<T>(fn: () => Promise<T>, opts: RetryOptions): Promise<T>;
8
+ //# sourceMappingURL=retry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/jira/retry.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC;CACzC;AAED,wBAAsB,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,CAgBvF"}
@@ -0,0 +1,29 @@
1
+ export interface JiraTicket {
2
+ key: string;
3
+ summary: string;
4
+ story: string;
5
+ acceptanceCriteria?: string;
6
+ attachments: Array<{
7
+ filename: string;
8
+ url: string;
9
+ }>;
10
+ raw: Record<string, unknown>;
11
+ }
12
+ export interface JiraFieldMap {
13
+ story: string;
14
+ acceptanceCriteria?: string;
15
+ }
16
+ export interface JiraClient {
17
+ readonly backend: 'mcp' | 'rest';
18
+ fetchTicket(key: string, fields: JiraFieldMap): Promise<JiraTicket>;
19
+ postComment(key: string, body: string): Promise<{
20
+ id: string;
21
+ }>;
22
+ transitionStatus(key: string, statusName: string): Promise<void>;
23
+ listFields(sampleKey: string): Promise<Array<{
24
+ id: string;
25
+ name: string;
26
+ hasContent: boolean;
27
+ }>>;
28
+ }
29
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/jira/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtD,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,KAAK,GAAG,MAAM,CAAC;IACjC,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACpE,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC,CAAC;CAClG"}
@@ -0,0 +1,12 @@
1
+ export interface LockData {
2
+ pid: number;
3
+ hostname: string;
4
+ started_at: string;
5
+ run_id: string;
6
+ }
7
+ export declare function acquireLock(path: string, runId: string): boolean;
8
+ export declare function releaseLock(path: string): void;
9
+ export declare function readLock(path: string): LockData | null;
10
+ export declare function isLockStale(path: string): boolean;
11
+ export declare function forceUnlock(path: string): void;
12
+ //# sourceMappingURL=file-lock.d.ts.map