@glubean/cli 0.2.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/README.md +2 -2
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +267 -60
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/redact.d.ts.map +1 -1
- package/dist/commands/redact.js +32 -8
- package/dist/commands/redact.js.map +1 -1
- package/dist/commands/run.d.ts +110 -2
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +483 -40
- package/dist/commands/run.js.map +1 -1
- package/dist/lib/config.d.ts +267 -43
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +744 -149
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/env.d.ts +29 -0
- package/dist/lib/env.d.ts.map +1 -0
- package/dist/lib/env.js +59 -0
- package/dist/lib/env.js.map +1 -0
- package/dist/lib/print-plan.d.ts +21 -0
- package/dist/lib/print-plan.d.ts.map +1 -0
- package/dist/lib/print-plan.js +108 -0
- package/dist/lib/print-plan.js.map +1 -0
- package/dist/lib/upload.d.ts +36 -1
- package/dist/lib/upload.d.ts.map +1 -1
- package/dist/lib/upload.js +126 -19
- package/dist/lib/upload.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +405 -27
- package/dist/main.js.map +1 -1
- package/package.json +5 -5
- package/templates/README.md +7 -13
- package/templates/demo/.env.example +7 -0
- package/templates/demo/.env.secrets.example +11 -0
- package/templates/demo/README.md +60 -0
- package/templates/demo/config/api.ts +24 -0
- package/templates/demo/gitignore.tpl +13 -0
- package/templates/demo/glubean.yaml +48 -0
- package/templates/demo/tests/api-flaky/search-flaky.test.ts +28 -0
- package/templates/demo/tests/api-stable/get-users.test.ts +30 -0
- package/templates/demo/tests/canary/synthetic-50pct-flaky.test.ts +23 -0
- package/templates/demo/tests/contracts/stable/users-contract.contract.ts +70 -0
- package/templates/demo/tsconfig.json +15 -0
- package/templates/AI-INSTRUCTIONS.md +0 -160
- package/templates/ci-config/ci.yaml +0 -13
- package/templates/ci-config/default.yaml +0 -9
- package/templates/ci-config/explore.yaml +0 -5
- package/templates/ci-config/staging.yaml +0 -9
package/dist/lib/config.d.ts
CHANGED
|
@@ -15,6 +15,269 @@
|
|
|
15
15
|
import type { RedactionConfig } from "@glubean/redaction";
|
|
16
16
|
import type { SharedRunConfig } from "@glubean/runner";
|
|
17
17
|
import type { ThresholdConfig } from "@glubean/sdk";
|
|
18
|
+
/** Suite = where the runner finds runnable items. */
|
|
19
|
+
export interface SuiteConfig {
|
|
20
|
+
/** File path, directory, or glob (e.g. `./tests`, `./contracts/*.contract.ts`). */
|
|
21
|
+
target: string;
|
|
22
|
+
/** Which kinds of items to extract from `target`. */
|
|
23
|
+
kinds: Array<"test" | "contract" | "flow">;
|
|
24
|
+
/** Optional path to fixture/eval data (for demo/eval-style suites). */
|
|
25
|
+
data?: string;
|
|
26
|
+
}
|
|
27
|
+
/** Selection (positive `tags` + filter/pick + always-OR `excludeTags`). */
|
|
28
|
+
export interface SelectionConfig {
|
|
29
|
+
tags?: string[];
|
|
30
|
+
/** Always-OR exclusion — any match drops the case. Independent of `tagMode`. */
|
|
31
|
+
excludeTags?: string[];
|
|
32
|
+
filter?: string;
|
|
33
|
+
pick?: string;
|
|
34
|
+
/** Default "or". Governs `tags` only; never affects `excludeTags`. */
|
|
35
|
+
tagMode?: "or" | "and";
|
|
36
|
+
}
|
|
37
|
+
/** Execution-time runtime settings. */
|
|
38
|
+
export interface ExecutionConfig {
|
|
39
|
+
failFast?: boolean;
|
|
40
|
+
/** Stop after N test failures. null = never stop on count. */
|
|
41
|
+
failAfter?: number | null;
|
|
42
|
+
/** Per-test timeout in ms. */
|
|
43
|
+
timeoutMs?: number;
|
|
44
|
+
concurrency?: number;
|
|
45
|
+
/** When true, skip session/runs-context initialization for tests. */
|
|
46
|
+
noSession?: boolean;
|
|
47
|
+
}
|
|
48
|
+
/** Opt-in capability gates. */
|
|
49
|
+
export interface CapabilitiesConfig {
|
|
50
|
+
browser?: boolean;
|
|
51
|
+
outOfBand?: boolean;
|
|
52
|
+
optIn?: boolean;
|
|
53
|
+
}
|
|
54
|
+
/** Reporter sinks. Each is independently overridable by CLI flag. */
|
|
55
|
+
export interface ReportersConfig {
|
|
56
|
+
console?: "detailed" | "summary";
|
|
57
|
+
/** JUnit XML output path (relative to project root). */
|
|
58
|
+
junit?: string;
|
|
59
|
+
/** Structured JSON results path. */
|
|
60
|
+
resultJson?: string;
|
|
61
|
+
emitFullTrace?: boolean;
|
|
62
|
+
/** Infer JSON Schema from response bodies in traces (CLI: --infer-schema). */
|
|
63
|
+
inferSchema?: boolean;
|
|
64
|
+
/** Always truncate arrays in trace bodies for AI-friendly output (CLI: --truncate-arrays). */
|
|
65
|
+
truncateArrays?: boolean;
|
|
66
|
+
}
|
|
67
|
+
/** Optional cloud upload directive (per-profile). */
|
|
68
|
+
export interface UploadConfig {
|
|
69
|
+
enabled?: boolean;
|
|
70
|
+
/** Project alias on cloud (resolves to projectId via cloud lookup). */
|
|
71
|
+
projectAlias?: string;
|
|
72
|
+
}
|
|
73
|
+
/** Profile = one named run plan. References suites by name. */
|
|
74
|
+
export interface ProfileConfig {
|
|
75
|
+
/** Names of suites (top-level `suites:` block) this profile includes. */
|
|
76
|
+
suites: string[];
|
|
77
|
+
selection?: SelectionConfig;
|
|
78
|
+
execution?: ExecutionConfig;
|
|
79
|
+
capabilities?: CapabilitiesConfig;
|
|
80
|
+
reporters?: ReportersConfig;
|
|
81
|
+
upload?: UploadConfig;
|
|
82
|
+
/** Metric thresholds (e.g. stricter latency gates on `ci` than `local`). */
|
|
83
|
+
thresholds?: ThresholdConfig;
|
|
84
|
+
}
|
|
85
|
+
/** Top-level `defaults:` — merged into every profile before profile-specific values. */
|
|
86
|
+
export interface DefaultsConfig {
|
|
87
|
+
envFile?: string;
|
|
88
|
+
selection?: SelectionConfig;
|
|
89
|
+
execution?: ExecutionConfig;
|
|
90
|
+
capabilities?: CapabilitiesConfig;
|
|
91
|
+
reporters?: ReportersConfig;
|
|
92
|
+
redaction?: GlubeanRedactionConfigInput;
|
|
93
|
+
/** Baseline metric thresholds; per-profile `thresholds` overrides per metric. */
|
|
94
|
+
thresholds?: ThresholdConfig;
|
|
95
|
+
}
|
|
96
|
+
/** MCP trace header allow-lists — which headers the MCP server surfaces to agents. */
|
|
97
|
+
export interface McpTraceConfig {
|
|
98
|
+
keepRequestHeaders?: string[];
|
|
99
|
+
keepResponseHeaders?: string[];
|
|
100
|
+
}
|
|
101
|
+
/** Top-level `mcp:` — config consumed by the @glubean/mcp server (not the run path). */
|
|
102
|
+
export interface McpConfig {
|
|
103
|
+
trace?: McpTraceConfig;
|
|
104
|
+
}
|
|
105
|
+
/** Canonical v1 project config — the entire `glubean.yaml` content. */
|
|
106
|
+
export interface GlubeanProjectConfigV1 {
|
|
107
|
+
version: 1;
|
|
108
|
+
defaults?: DefaultsConfig;
|
|
109
|
+
/** Named suite definitions referenced by profiles. */
|
|
110
|
+
suites: Record<string, SuiteConfig>;
|
|
111
|
+
/** Named profiles. `glubean run --profile <name>` selects one. */
|
|
112
|
+
profiles: Record<string, ProfileConfig>;
|
|
113
|
+
/** MCP-server settings (trace header allow-lists). Read by @glubean/mcp. */
|
|
114
|
+
mcp?: McpConfig;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* ResolvedRunPlan — what a profile resolves to after merging
|
|
118
|
+
* defaults → profile → CLI overrides. All required fields are populated;
|
|
119
|
+
* `runCommand` consumes this (sub-task E) instead of assembling options
|
|
120
|
+
* piecemeal. Selection arrays are always [] rather than undefined.
|
|
121
|
+
*/
|
|
122
|
+
export interface ResolvedRunPlan {
|
|
123
|
+
/** Profile name selected (e.g. "ci"). */
|
|
124
|
+
profile: string;
|
|
125
|
+
/** Absolute path of the loaded `glubean.yaml`. */
|
|
126
|
+
configPath: string;
|
|
127
|
+
/** Suites included in the run, expanded with their definitions. */
|
|
128
|
+
suites: Array<{
|
|
129
|
+
name: string;
|
|
130
|
+
} & SuiteConfig>;
|
|
131
|
+
selection: {
|
|
132
|
+
tags: string[];
|
|
133
|
+
excludeTags: string[];
|
|
134
|
+
filter?: string;
|
|
135
|
+
pick?: string;
|
|
136
|
+
tagMode: "or" | "and";
|
|
137
|
+
};
|
|
138
|
+
execution: {
|
|
139
|
+
failFast: boolean;
|
|
140
|
+
failAfter: number | null;
|
|
141
|
+
timeoutMs: number;
|
|
142
|
+
concurrency: number;
|
|
143
|
+
noSession: boolean;
|
|
144
|
+
};
|
|
145
|
+
capabilities: {
|
|
146
|
+
browser: boolean;
|
|
147
|
+
outOfBand: boolean;
|
|
148
|
+
optIn: boolean;
|
|
149
|
+
};
|
|
150
|
+
reporters: {
|
|
151
|
+
console: "detailed" | "summary";
|
|
152
|
+
junit?: string;
|
|
153
|
+
resultJson?: string;
|
|
154
|
+
emitFullTrace: boolean;
|
|
155
|
+
inferSchema: boolean;
|
|
156
|
+
truncateArrays: boolean;
|
|
157
|
+
};
|
|
158
|
+
upload?: UploadConfig;
|
|
159
|
+
envFile: string;
|
|
160
|
+
redaction: RedactionConfig;
|
|
161
|
+
/**
|
|
162
|
+
* Resolved metric thresholds (defaults.thresholds ∪ profile.thresholds,
|
|
163
|
+
* profile wins per metric key). Always present — `{}` when none declared.
|
|
164
|
+
*/
|
|
165
|
+
thresholds: ThresholdConfig;
|
|
166
|
+
}
|
|
167
|
+
/** Thrown by loadProjectConfigV1 — all hard validation failures use this. */
|
|
168
|
+
export declare class GlubeanConfigError extends Error {
|
|
169
|
+
readonly path?: string | undefined;
|
|
170
|
+
constructor(message: string, path?: string | undefined);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Load + validate v1 project config.
|
|
174
|
+
*
|
|
175
|
+
* - Default path: `rootDir/glubean.yaml`
|
|
176
|
+
* - Override: `options.configPath` (CLI `--config` plumbed here) — resolved
|
|
177
|
+
* against rootDir if relative. Lets users keep multiple variants on disk
|
|
178
|
+
* while still using v1 schema.
|
|
179
|
+
*
|
|
180
|
+
* Hard-errors on:
|
|
181
|
+
* - File missing → `GlubeanConfigError("glubean.yaml not found ...")`
|
|
182
|
+
* - YAML parse failure → wraps underlying error in `GlubeanConfigError`
|
|
183
|
+
* - Missing/wrong `version` (must be `1`)
|
|
184
|
+
* - Any unknown key at any nesting level (drops the warning behavior of the
|
|
185
|
+
* legacy loader)
|
|
186
|
+
* - Missing required fields (`suites`, `profiles`, `suite.target`, `suite.kinds`,
|
|
187
|
+
* `profile.suites`)
|
|
188
|
+
* - Wrong type on any field
|
|
189
|
+
* - Profile that references an undefined suite name
|
|
190
|
+
*
|
|
191
|
+
* Returns the parsed + validated config plus the absolute path it loaded from
|
|
192
|
+
* (used downstream so `ResolvedRunPlan.configPath` can be populated in sub-task D).
|
|
193
|
+
*/
|
|
194
|
+
export declare function loadProjectConfigV1(rootDir: string, options?: {
|
|
195
|
+
configPath?: string;
|
|
196
|
+
}): Promise<{
|
|
197
|
+
config: GlubeanProjectConfigV1;
|
|
198
|
+
configPath: string;
|
|
199
|
+
}>;
|
|
200
|
+
/**
|
|
201
|
+
* CLI-flag-shaped overrides passed to `resolveRunPlan`. A subset of fields —
|
|
202
|
+
* only the ones the CLI can override. CLI flags take precedence over profile
|
|
203
|
+
* and defaults. Arrays REPLACE the underlying values (not concat).
|
|
204
|
+
*/
|
|
205
|
+
export interface CliProfileOverrides {
|
|
206
|
+
/**
|
|
207
|
+
* CLI `--suite <name>` (repeatable). Filters the profile's `suites:` list
|
|
208
|
+
* to only the named subset. Each name MUST appear in `profile.suites`
|
|
209
|
+
* (not just `config.suites`); unknown names raise GlubeanConfigError.
|
|
210
|
+
*/
|
|
211
|
+
suites?: string[];
|
|
212
|
+
tags?: string[];
|
|
213
|
+
excludeTags?: string[];
|
|
214
|
+
tagMode?: "or" | "and";
|
|
215
|
+
filter?: string;
|
|
216
|
+
pick?: string;
|
|
217
|
+
envFile?: string;
|
|
218
|
+
failFast?: boolean;
|
|
219
|
+
failAfter?: number | null;
|
|
220
|
+
timeoutMs?: number;
|
|
221
|
+
concurrency?: number;
|
|
222
|
+
noSession?: boolean;
|
|
223
|
+
includeBrowser?: boolean;
|
|
224
|
+
includeOutOfBand?: boolean;
|
|
225
|
+
includeOptIn?: boolean;
|
|
226
|
+
consoleReporter?: "detailed" | "summary";
|
|
227
|
+
junit?: string;
|
|
228
|
+
resultJson?: string;
|
|
229
|
+
emitFullTrace?: boolean;
|
|
230
|
+
/** CLI --infer-schema */
|
|
231
|
+
inferSchema?: boolean;
|
|
232
|
+
/** CLI --truncate-arrays */
|
|
233
|
+
truncateArrays?: boolean;
|
|
234
|
+
/** CLI --upload: when true, force-enable upload regardless of profile setting. */
|
|
235
|
+
uploadEnabled?: boolean;
|
|
236
|
+
}
|
|
237
|
+
/** Built-in defaults applied when neither config.defaults nor profile sets a value. */
|
|
238
|
+
export declare const RESOLVED_PLAN_BUILTIN_DEFAULTS: {
|
|
239
|
+
envFile: string;
|
|
240
|
+
selection: {
|
|
241
|
+
tags: string[];
|
|
242
|
+
excludeTags: string[];
|
|
243
|
+
tagMode: "or" | "and";
|
|
244
|
+
};
|
|
245
|
+
execution: {
|
|
246
|
+
failFast: boolean;
|
|
247
|
+
failAfter: number | null;
|
|
248
|
+
timeoutMs: number;
|
|
249
|
+
concurrency: number;
|
|
250
|
+
noSession: boolean;
|
|
251
|
+
};
|
|
252
|
+
capabilities: {
|
|
253
|
+
browser: boolean;
|
|
254
|
+
outOfBand: boolean;
|
|
255
|
+
optIn: boolean;
|
|
256
|
+
};
|
|
257
|
+
reporters: {
|
|
258
|
+
console: "detailed" | "summary";
|
|
259
|
+
emitFullTrace: boolean;
|
|
260
|
+
inferSchema: boolean;
|
|
261
|
+
truncateArrays: boolean;
|
|
262
|
+
};
|
|
263
|
+
};
|
|
264
|
+
/**
|
|
265
|
+
* Resolve a profile against a loaded config + optional CLI overrides.
|
|
266
|
+
*
|
|
267
|
+
* Throws `GlubeanConfigError` when `profileName` is not in `config.profiles`
|
|
268
|
+
* (with a list of available profiles, per plan §Phase 1 acceptance).
|
|
269
|
+
*
|
|
270
|
+
* Merge order (later layer wins per-field; arrays REPLACE, never concat):
|
|
271
|
+
* 1. Built-in defaults (RESOLVED_PLAN_BUILTIN_DEFAULTS)
|
|
272
|
+
* 2. config.defaults (user's `defaults:` block)
|
|
273
|
+
* 3. config.profiles[profileName] (profile-specific)
|
|
274
|
+
* 4. cliOverrides (CLI flags)
|
|
275
|
+
*
|
|
276
|
+
* `suites` field on the profile is expanded: each name is looked up in
|
|
277
|
+
* `config.suites` (loader already validated cross-refs) and returned as a
|
|
278
|
+
* `{name, ...SuiteConfig}` array preserving the order from the profile.
|
|
279
|
+
*/
|
|
280
|
+
export declare function resolveRunPlan(config: GlubeanProjectConfigV1, configPath: string, profileName: string, cliOverrides?: CliProfileOverrides): ResolvedRunPlan;
|
|
18
281
|
/** Run-related configuration (resolved — all fields have values). */
|
|
19
282
|
export interface GlubeanRunConfig {
|
|
20
283
|
verbose: boolean;
|
|
@@ -34,22 +297,6 @@ export interface GlubeanRunConfig {
|
|
|
34
297
|
perTestTimeoutMs: number;
|
|
35
298
|
concurrency: number;
|
|
36
299
|
}
|
|
37
|
-
/** Partial run config as read from a file (all fields optional). */
|
|
38
|
-
export interface GlubeanRunConfigInput {
|
|
39
|
-
verbose?: boolean;
|
|
40
|
-
pretty?: boolean;
|
|
41
|
-
logFile?: boolean;
|
|
42
|
-
emitFullTrace?: boolean;
|
|
43
|
-
inferSchema?: boolean;
|
|
44
|
-
truncateArrays?: boolean;
|
|
45
|
-
envFile?: string;
|
|
46
|
-
failFast?: boolean;
|
|
47
|
-
failAfter?: number | null;
|
|
48
|
-
testDir?: string;
|
|
49
|
-
exploreDir?: string;
|
|
50
|
-
perTestTimeoutMs?: number;
|
|
51
|
-
concurrency?: number;
|
|
52
|
-
}
|
|
53
300
|
/** Redaction config input from user files (additive fields only). */
|
|
54
301
|
export interface GlubeanRedactionConfigInput {
|
|
55
302
|
/** Additional global sensitive keys. */
|
|
@@ -75,37 +322,14 @@ export interface GlubeanConfig {
|
|
|
75
322
|
cloud?: GlubeanCloudConfigInput;
|
|
76
323
|
thresholds?: ThresholdConfig;
|
|
77
324
|
}
|
|
78
|
-
/** Partial top-level config as read from a file. */
|
|
79
|
-
export interface GlubeanConfigInput {
|
|
80
|
-
run?: GlubeanRunConfigInput;
|
|
81
|
-
redaction?: GlubeanRedactionConfigInput;
|
|
82
|
-
cloud?: GlubeanCloudConfigInput;
|
|
83
|
-
thresholds?: ThresholdConfig;
|
|
84
|
-
}
|
|
85
325
|
export declare const RUN_DEFAULTS: GlubeanRunConfig;
|
|
86
326
|
export declare const CONFIG_DEFAULTS: GlubeanConfig;
|
|
87
327
|
/**
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
* Otherwise treat the entire file as a glubean config object.
|
|
92
|
-
*/
|
|
93
|
-
export declare function readSingleConfig(filePath: string): Promise<GlubeanConfigInput>;
|
|
94
|
-
/**
|
|
95
|
-
* Merge two config inputs. Later (overlay) values take precedence.
|
|
96
|
-
*
|
|
97
|
-
* - Scalar fields: right wins.
|
|
98
|
-
* - Array fields (sensitiveKeys.additional, sensitiveKeys.excluded,
|
|
99
|
-
* patterns.custom): concatenated (additive by nature).
|
|
100
|
-
*/
|
|
101
|
-
export declare function mergeConfigInputs(base: GlubeanConfigInput, overlay: GlubeanConfigInput): GlubeanConfigInput;
|
|
102
|
-
/**
|
|
103
|
-
* Load the resolved GlubeanConfig.
|
|
104
|
-
*
|
|
105
|
-
* - If `configPaths` is undefined or empty: auto-read package.json in `rootDir`.
|
|
106
|
-
* - If `configPaths` has entries: merge left-to-right, skip auto-read.
|
|
328
|
+
* Apply a `GlubeanRedactionConfigInput` (glubean.yaml `defaults.redaction`)
|
|
329
|
+
* on top of the mandatory DEFAULT_CONFIG baseline to produce a fully
|
|
330
|
+
* resolved RedactionConfig.
|
|
107
331
|
*/
|
|
108
|
-
export declare function
|
|
332
|
+
export declare function resolveRedactionConfig(input?: GlubeanRedactionConfigInput): RedactionConfig;
|
|
109
333
|
/**
|
|
110
334
|
* Merge resolved run config with CLI flags.
|
|
111
335
|
*/
|
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|