@grepr/cli 1.4.8-4a11a52 → 1.6.0-a4784d5

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 (47) hide show
  1. package/README.md +51 -19
  2. package/build/dist/commands/job-apply-command.d.ts +18 -0
  3. package/build/dist/commands/job-apply-command.d.ts.map +1 -0
  4. package/build/dist/commands/job-apply-command.js +103 -0
  5. package/build/dist/commands/job-apply-command.js.map +1 -0
  6. package/build/dist/commands/job-command.js +1 -1
  7. package/build/dist/commands/job-draft-command.d.ts +12 -0
  8. package/build/dist/commands/job-draft-command.d.ts.map +1 -0
  9. package/build/dist/commands/job-draft-command.js +205 -0
  10. package/build/dist/commands/job-draft-command.js.map +1 -0
  11. package/build/dist/commands/job-plan-command.d.ts +12 -0
  12. package/build/dist/commands/job-plan-command.d.ts.map +1 -0
  13. package/build/dist/commands/job-plan-command.js +51 -0
  14. package/build/dist/commands/job-plan-command.js.map +1 -0
  15. package/build/dist/grepr.js +7 -0
  16. package/build/dist/grepr.js.map +1 -1
  17. package/build/dist/lib/grepr-api-client.d.ts +14 -1
  18. package/build/dist/lib/grepr-api-client.d.ts.map +1 -1
  19. package/build/dist/lib/grepr-api-client.js +42 -4
  20. package/build/dist/lib/grepr-api-client.js.map +1 -1
  21. package/build/dist/lib/job-graph-log-pipeline-constants.d.ts +12 -0
  22. package/build/dist/lib/job-graph-log-pipeline-constants.d.ts.map +1 -0
  23. package/build/dist/lib/job-graph-log-pipeline-constants.js +16 -0
  24. package/build/dist/lib/job-graph-log-pipeline-constants.js.map +1 -0
  25. package/build/dist/lib/job-graph-transformer.d.ts +30 -0
  26. package/build/dist/lib/job-graph-transformer.d.ts.map +1 -1
  27. package/build/dist/lib/job-graph-transformer.js +271 -5
  28. package/build/dist/lib/job-graph-transformer.js.map +1 -1
  29. package/build/dist/lib/job-patch.d.ts +157 -0
  30. package/build/dist/lib/job-patch.d.ts.map +1 -0
  31. package/build/dist/lib/job-patch.js +1071 -0
  32. package/build/dist/lib/job-patch.js.map +1 -0
  33. package/build/dist/lib/job-plan.d.ts +40 -0
  34. package/build/dist/lib/job-plan.d.ts.map +1 -0
  35. package/build/dist/lib/job-plan.js +451 -0
  36. package/build/dist/lib/job-plan.js.map +1 -0
  37. package/build/dist/lib/option-parsers.d.ts +5 -0
  38. package/build/dist/lib/option-parsers.d.ts.map +1 -1
  39. package/build/dist/lib/option-parsers.js +7 -0
  40. package/build/dist/lib/option-parsers.js.map +1 -1
  41. package/build/dist/openapi/openApiTypes.d.ts +10 -0
  42. package/build/dist/openapi/openApiTypes.d.ts.map +1 -1
  43. package/build/dist/openapi/openApiTypes.js.map +1 -1
  44. package/build/dist/types.d.ts +34 -0
  45. package/build/dist/types.d.ts.map +1 -1
  46. package/build/dist/types.js.map +1 -1
  47. package/package.json +1 -1
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
- # Grepr CLI and Claude Code plugin
1
+ # Grepr CLI and Agent Plugins
2
2
 
3
- The Grepr command-line tool (`@grepr/cli`) and a Claude Code plugin that lets Claude drive it for you.
3
+ The Grepr command-line tool (`@grepr/cli`) and agent plugins that let Claude Code and Codex drive it for you.
4
4
 
5
5
  [![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE)
6
6
 
@@ -8,6 +8,7 @@ The Grepr command-line tool (`@grepr/cli`) and a Claude Code plugin that lets Cl
8
8
 
9
9
  - **Just the CLI** — [jump to CLI section](#cli)
10
10
  - **CLI + Claude Code skills** — [jump to Claude Code plugin section](#claude-code-plugin)
11
+ - **CLI + Codex skills** — [jump to Codex plugin section](#codex-plugin)
11
12
 
12
13
  ---
13
14
 
@@ -62,29 +63,19 @@ Full command reference and advanced usage: [docs.grepr.ai/cli](https://docs.grep
62
63
 
63
64
  ---
64
65
 
65
- ## Claude Code plugin
66
+ ## Agent Skills
66
67
 
67
- > **Preview**: this plugin is in early access. Expect rough edges and please [file issues](https://github.com/grepr/cli/issues).
68
+ > **Preview**: these skills are in early access. Expect rough edges and please [file issues](https://github.com/grepr/cli/issues).
68
69
 
69
- Skills for [Claude Code](https://claude.com/claude-code) that let Claude manage your [Grepr](https://grepr.ai) pipelines, datasets, integrations, and queries — no context-switching to docs, no remembering subcommand syntax.
70
+ Skills for AI coding agents that let them manage your [Grepr](https://grepr.ai) pipelines, datasets, integrations, and queries through the Grepr CLI — no context-switching to docs, no remembering subcommand syntax.
70
71
 
71
72
  ### Requirements
72
73
 
73
- - [Claude Code](https://claude.com/claude-code) — the CLI, IDE extension, or desktop app
74
74
  - Grepr CLI installed and configured (see [CLI section](#cli) above)
75
75
 
76
- ### Install
77
-
78
- In Claude Code:
79
-
80
- ```
81
- /plugin marketplace add grepr/cli
82
- /plugin install grepr@grepr-cli
83
- ```
84
-
85
76
  ### First steps
86
77
 
87
- Try these prompts in Claude Code after install:
78
+ Try these prompts after installing the plugin for your agent:
88
79
 
89
80
  > List my running Grepr pipelines.
90
81
 
@@ -94,7 +85,7 @@ Try these prompts in Claude Code after install:
94
85
 
95
86
  > Query the last hour of error logs from the `production-logs` dataset.
96
87
 
97
- Claude will pick the right skill, run the CLI, and walk you through the result.
88
+ The agent will pick the right skill, run the CLI, and walk you through the result.
98
89
 
99
90
  ### Skills included
100
91
 
@@ -115,7 +106,41 @@ Claude will pick the right skill, run the CLI, and walk you through the result.
115
106
 
116
107
  ### Invocation
117
108
 
118
- Claude Code lists skills by short name (e.g., `/build-grok`) with a `(grepr)` annotation in autocomplete. You can also invoke any skill by its fully-qualified name (e.g., `/grepr:build-grok`) — both forms work. The prefix becomes mandatory only if another installed plugin defines a skill with the same name.
109
+ You can ask for Grepr work in natural language, or reference a skill by name when you want a specific workflow. Claude Code also lists skills by short name (e.g., `/build-grok`) with a `(grepr)` annotation in autocomplete; fully-qualified names such as `/grepr:build-grok` work when disambiguation is needed.
110
+
111
+ ---
112
+
113
+ ## Claude Code plugin
114
+
115
+ ### Requirements
116
+
117
+ - [Claude Code](https://claude.com/claude-code) — the CLI, IDE extension, or desktop app
118
+ - Grepr CLI installed and configured (see [CLI section](#cli) above)
119
+
120
+ ### Install
121
+
122
+ In Claude Code:
123
+
124
+ ```
125
+ /plugin marketplace add grepr/cli
126
+ /plugin install grepr@grepr-cli
127
+ ```
128
+
129
+ ---
130
+
131
+ ## Codex plugin
132
+
133
+ ### Requirements
134
+
135
+ - [Codex](https://openai.com/codex/) CLI, IDE extension, or app
136
+ - Grepr CLI installed and configured (see [CLI section](#cli) above)
137
+
138
+ ### Install
139
+
140
+ ```bash
141
+ codex plugin marketplace add grepr/cli --ref main
142
+ codex plugin add grepr@grepr-cli
143
+ ```
119
144
 
120
145
  ---
121
146
 
@@ -127,13 +152,20 @@ Claude Code lists skills by short name (e.g., `/build-grok`) with a `(grepr)` an
127
152
  npm update -g @grepr/cli
128
153
  ```
129
154
 
130
- **Plugin:**
155
+ **Claude Code plugin:**
131
156
 
132
157
  ```
133
158
  /plugin marketplace update grepr-cli
134
159
  /plugin install grepr@grepr-cli
135
160
  ```
136
161
 
162
+ **Codex plugin:**
163
+
164
+ ```bash
165
+ codex plugin marketplace upgrade grepr-cli
166
+ codex plugin add grepr@grepr-cli
167
+ ```
168
+
137
169
  ---
138
170
 
139
171
  ## Issues and feedback
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Apply a generated plan to a live job.
3
+ *
4
+ * Checks drift locally and through the API's `fromVersion` guard; transient
5
+ * failures are retried with backoff.
6
+ */
7
+ import { Command } from 'commander';
8
+ import { ICommand } from '../lib/command-registry.js';
9
+ import { MergeConfiguration } from '../types.js';
10
+ import { GreprApiClient } from '../lib/grepr-api-client.js';
11
+ import { SchemaUpdateJob } from '../openapi/openApiTypes.js';
12
+ export declare class JobApplyCommand implements ICommand {
13
+ addToProgram(program: Command, mergeConfiguration: MergeConfiguration): void;
14
+ private checkDrift;
15
+ }
16
+ /** PUT the proposed job, retrying transient failures and rechecking drift after conflicts. */
17
+ export declare function apply(apiClient: GreprApiClient, jobId: string, proposed: SchemaUpdateJob): Promise<void>;
18
+ //# sourceMappingURL=job-apply-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job-apply-command.d.ts","sourceRoot":"","sources":["../../../src/main/typescript/commands/job-apply-command.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAA0B,MAAM,SAAS,CAAC;AAErE,OAAO,EAAY,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAErE,OAAO,EAAiB,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAOxE,qBAAa,eAAgB,YAAW,QAAQ;IAC9C,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,GAAG,IAAI;YA0B9D,UAAU;CAezB;AAED,8FAA8F;AAC9F,wBAAsB,KAAK,CACzB,SAAS,EAAE,cAAc,EACzB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,IAAI,CAAC,CA+Cf"}
@@ -0,0 +1,103 @@
1
+ import { createApiClient } from '../lib/api-client-factory.js';
2
+ import { ApiError } from '../lib/grepr-api-client.js';
3
+ import { loadPlanFromFile } from '../lib/job-plan.js';
4
+ const MAX_RETRIES = 3;
5
+ const BASE_BACKOFF_MS = 1000;
6
+ /** Transient HTTP statuses worth retrying (besides 409, handled specially). */
7
+ const RETRYABLE_STATUSES = new Set([408, 429, 500, 502, 503, 504]);
8
+ export class JobApplyCommand {
9
+ addToProgram(program, mergeConfiguration) {
10
+ program
11
+ .command('job:apply <plan-file>')
12
+ .description('Apply a generated plan file to the live pipeline')
13
+ .option('--force', 'Apply even if the live job has changed since the plan was generated')
14
+ .action(async (planFile, options, command) => {
15
+ try {
16
+ const merged = { ...command.parent?.opts(), ...options };
17
+ const cliOptions = await mergeConfiguration(merged);
18
+ const apiClient = createApiClient(cliOptions);
19
+ const plan = await loadPlanFromFile(planFile);
20
+ await this.checkDrift(apiClient, plan, options.force ?? false);
21
+ await apply(apiClient, plan.jobId, plan.proposed);
22
+ if (!cliOptions.quiet) {
23
+ console.log(`Applied ${plan.diff.length} change(s) to job ${plan.jobId}`);
24
+ }
25
+ }
26
+ catch (error) {
27
+ console.error('Error applying pipeline plan:', error.message);
28
+ process.exit(1);
29
+ }
30
+ });
31
+ }
32
+ async checkDrift(apiClient, plan, force) {
33
+ const live = await apiClient.getJob(plan.jobId, undefined, false);
34
+ if (!live) {
35
+ throw new Error(`Job not found: ${plan.jobId}`);
36
+ }
37
+ if (live.version === plan.baseVersion)
38
+ return;
39
+ if (!force) {
40
+ throw new Error(`Drift detected: plan was generated against version ${plan.baseVersion}, live job is at version ${live.version}. ` +
41
+ `Re-run job:plan to regenerate the plan, or pass --force to override.`);
42
+ }
43
+ // --force accepts overwriting the current live version, so update the API guard.
44
+ plan.proposed.fromVersion = live.version;
45
+ }
46
+ }
47
+ /** PUT the proposed job, retrying transient failures and rechecking drift after conflicts. */
48
+ export async function apply(apiClient, jobId, proposed) {
49
+ for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {
50
+ try {
51
+ await apiClient.updateJob(jobId, proposed);
52
+ return;
53
+ }
54
+ catch (error) {
55
+ const status = error instanceof ApiError ? error.status : undefined;
56
+ const isConflict = status === 409;
57
+ if (!isConflict && !(status !== undefined && RETRYABLE_STATUSES.has(status))) {
58
+ throw error;
59
+ }
60
+ if (isConflict) {
61
+ // 409: re-fetch to classify. A deleted job or a moved live version is
62
+ // fatal drift (throw, even on the last attempt); an unchanged version
63
+ // means a deploy is in flight, so fall through and retry.
64
+ let live;
65
+ try {
66
+ live = await apiClient.getJob(jobId, undefined, false);
67
+ }
68
+ catch (recheckError) {
69
+ // The classification fetch itself failed — likely the same mid-deploy
70
+ // turbulence that caused the 409. Don't abort the apply on it; retry
71
+ // until the budget runs out, then surface it.
72
+ if (attempt === MAX_RETRIES)
73
+ throw recheckError;
74
+ await delay(retryDelayMs(attempt, error));
75
+ continue;
76
+ }
77
+ if (!live) {
78
+ throw new Error(`Job ${jobId} not found during apply — it may have been deleted. Re-run job:plan to regenerate the plan.`);
79
+ }
80
+ if (live.version !== proposed.fromVersion) {
81
+ throw new Error(`Server reported drift during apply: expected version ${proposed.fromVersion}, live is ${live.version}. ` +
82
+ `Re-run job:plan to regenerate the plan.`);
83
+ }
84
+ }
85
+ if (attempt === MAX_RETRIES) {
86
+ throw new Error(`Update failed after ${MAX_RETRIES} retries (last error: HTTP ${status}). ` +
87
+ `The pipeline may be mid-deploy or the server unhealthy; check pipeline status manually.`);
88
+ }
89
+ await delay(retryDelayMs(attempt, error));
90
+ }
91
+ }
92
+ }
93
+ /** Honor a server `Retry-After` when present, else exponential backoff (1s, 2s, 4s). */
94
+ function retryDelayMs(attempt, error) {
95
+ if (error instanceof ApiError && error.retryAfterMs !== undefined) {
96
+ return error.retryAfterMs;
97
+ }
98
+ return BASE_BACKOFF_MS * 2 ** attempt;
99
+ }
100
+ function delay(ms) {
101
+ return new Promise(resolve => setTimeout(resolve, ms));
102
+ }
103
+ //# sourceMappingURL=job-apply-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job-apply-command.js","sourceRoot":"","sources":["../../../src/main/typescript/commands/job-apply-command.ts"],"names":[],"mappings":"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"}
@@ -171,7 +171,7 @@ export class JobCrudCommand extends CrudCommand {
171
171
  - ID: ${job.id}
172
172
  - Name: ${job.name}
173
173
  - State: ${job.state}
174
- - Version: ${job.version || 'latest'}`);
174
+ - Version: ${job.version ?? 'latest'}`);
175
175
  }
176
176
  }
177
177
  catch (error) {
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Run a plan, or a live job via `--job-id`, in draft mode and stream NDJSON.
3
+ *
4
+ * Draft runs do not update the production pipeline.
5
+ */
6
+ import { Command } from 'commander';
7
+ import { ICommand } from '../lib/command-registry.js';
8
+ import { MergeConfiguration } from '../types.js';
9
+ export declare class JobDraftCommand implements ICommand {
10
+ addToProgram(program: Command, mergeConfiguration: MergeConfiguration): void;
11
+ }
12
+ //# sourceMappingURL=job-draft-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job-draft-command.d.ts","sourceRoot":"","sources":["../../../src/main/typescript/commands/job-draft-command.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAuD,MAAM,SAAS,CAAC;AAgBlG,qBAAa,eAAgB,YAAW,QAAQ;IAC9C,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,GAAG,IAAI;CAwG7E"}
@@ -0,0 +1,205 @@
1
+ import fs from 'fs-extra';
2
+ import { STREAM_EVENTS } from '../types.js';
3
+ import { NDJsonStreamParser } from '../lib/parser.js';
4
+ import { createApiClient } from '../lib/api-client-factory.js';
5
+ import { generatePlan, loadPlanFromFile } from '../lib/job-plan.js';
6
+ import { draftVerificationLimitations, findTemplateOperation, } from '../lib/job-patch.js';
7
+ import { transformJobGraphToSourcePreservingDraft, } from '../lib/job-graph-transformer.js';
8
+ import { JobExecution, JobProcessing } from '../types.js';
9
+ import { parseFloatArg, parseIntArg } from '../lib/option-parsers.js';
10
+ export class JobDraftCommand {
11
+ addToProgram(program, mergeConfiguration) {
12
+ program
13
+ .command('job:draft [plan-file]')
14
+ .description('Run a plan (or a live pipeline as-is via --job-id) in draft mode and stream NDJSON output')
15
+ .option('--job-id <id>', 'Draft the live pipeline as-is, no edits (instead of a plan file)')
16
+ // Job-graph-only flags tuning the logs-event-sampler inserted after each live
17
+ // source; rejected on template plans (sampling/duration are server-side there).
18
+ .option('--sample-rate <n>', 'Sampler max allowed rate in messages/sec for the live draft (job-graph plans only)', parseFloatArg)
19
+ .option('--sample-burst <n>', 'Sampler max burst limit in messages for the live draft (job-graph plans only)', parseIntArg)
20
+ .option('--max-duration-seconds <n>', 'Stop the live draft after N seconds (job-graph plans only)', parseIntArg)
21
+ .action(async (planFile, options, command) => {
22
+ try {
23
+ const merged = { ...command.parent?.opts(), ...options };
24
+ const cliOptions = await mergeConfiguration(merged);
25
+ if (planFile && options.jobId) {
26
+ throw new Error('Pass either a plan file or --job-id, not both');
27
+ }
28
+ if (!planFile && !options.jobId) {
29
+ throw new Error('Pass a plan file, or --job-id to draft the live pipeline as-is');
30
+ }
31
+ const apiClient = createApiClient(cliOptions);
32
+ const plan = planFile
33
+ ? await loadPlanFromFile(planFile)
34
+ : await generatePlan(apiClient, options.jobId, { operations: [] });
35
+ rejectSamplerFlagsOnTemplate(plan, options);
36
+ const limitations = draftVerificationLimitations(plan.patch);
37
+ // Template drafts use server-side draftMode; raw job graphs are rewritten
38
+ // locally to keep live sources, with a logs-event-sampler per source.
39
+ const draftJob = plan.backend === 'template'
40
+ ? makeTemplateDraftJob(plan.proposed, plan.current.processing)
41
+ : makeJobGraphDraftJob(plan, options);
42
+ if (!cliOptions.quiet) {
43
+ const note = plan.backend === 'job-graph'
44
+ ? ' (job-graph source-preserving live draft — external sink delivery is not verified)'
45
+ : '';
46
+ console.error(`Submitting draft pipeline run (jobId ${plan.jobId}, baseVersion ${plan.baseVersion})${note}…`);
47
+ for (const limitation of limitations) {
48
+ console.error(`Draft verification limitation: ${limitation}`);
49
+ }
50
+ }
51
+ // A live source-preserving draft on a STREAMING pipeline never ends on
52
+ // its own; --max-duration-seconds aborts the stream after the cap.
53
+ const durationCap = resolveMaxDurationSeconds(options);
54
+ const controller = durationCap !== undefined ? new AbortController() : undefined;
55
+ const durationTimer = durationCap !== undefined && controller
56
+ ? setTimeout(() => controller.abort(), durationCap * 1000)
57
+ : undefined;
58
+ durationTimer?.unref?.();
59
+ // The sync endpoint streams HEARTBEAT tokens that the client must echo
60
+ // back to /v1/jobs/sync/heartbeat, or the server's watchdog cancels the
61
+ // job (~20s). Stay alive by replying to each token; a failed reply isn't
62
+ // fatal — the next heartbeat retries and a real stall surfaces as CANCELLED.
63
+ const respondToHeartbeat = (token) => {
64
+ if (!token)
65
+ return;
66
+ void apiClient.sendHeartbeat(token).catch((heartbeatError) => {
67
+ if (!cliOptions.quiet) {
68
+ console.error(`Heartbeat reply failed: ${heartbeatError.message}`);
69
+ }
70
+ });
71
+ };
72
+ let failure;
73
+ try {
74
+ const stream = await apiClient.submitSyncJob(draftJob, controller?.signal);
75
+ // Route high-volume NDJSON to `--output` when provided.
76
+ failure = await streamToDestination(stream, cliOptions.output, respondToHeartbeat);
77
+ }
78
+ finally {
79
+ if (durationTimer)
80
+ clearTimeout(durationTimer);
81
+ }
82
+ if (controller?.signal.aborted && !cliOptions.quiet) {
83
+ console.error(`Draft run stopped after the ${durationCap}s max-duration cap.`);
84
+ }
85
+ if (cliOptions.output && !cliOptions.quiet && !failure) {
86
+ console.error(`Draft output written to ${cliOptions.output}`);
87
+ }
88
+ // The draft run can fail server-side while the stream completes
89
+ // cleanly; surface that as a non-zero exit so scripts keying off the
90
+ // exit code don't read a failed preview as success.
91
+ if (failure) {
92
+ throw new Error(`Draft run ended in terminal state ${failure.state}` +
93
+ (failure.message ? `: ${failure.message}` : ''));
94
+ }
95
+ }
96
+ catch (error) {
97
+ console.error('Error running draft pipeline:', error.message);
98
+ process.exit(1);
99
+ }
100
+ });
101
+ }
102
+ }
103
+ /**
104
+ * Pipe the API's NDJSON response to a file (`--output`) or stdout while scanning
105
+ * it for a terminal non-success jobState. Returns the first such failure if the
106
+ * draft run failed server-side, else null — the caller exits non-zero so a
107
+ * failed preview isn't reported (and read by scripts) as success.
108
+ *
109
+ * `onHeartbeat` is invoked for every HEARTBEAT token in the stream; the caller
110
+ * must echo it back to keep the sync job alive (else the server cancels it).
111
+ */
112
+ async function streamToDestination(source, outputPath, onHeartbeat) {
113
+ const parser = new NDJsonStreamParser();
114
+ let failure = null;
115
+ // Record the first terminal failure; subsequent records don't override it.
116
+ function recordFailure(state, data) {
117
+ if (!failure)
118
+ failure = { state, message: data?.message };
119
+ }
120
+ parser.on(STREAM_EVENTS.HEARTBEAT_REQUEST, (token) => onHeartbeat(token));
121
+ parser.on(STREAM_EVENTS.FAILED, (data) => recordFailure('FAILED', data));
122
+ parser.on(STREAM_EVENTS.CANCELLED, (data) => recordFailure('CANCELLED', data));
123
+ parser.on(STREAM_EVENTS.TIMED_OUT, (data) => recordFailure('TIMED_OUT', data));
124
+ source.on('data', (chunk) => parser.processChunk(chunk));
125
+ await new Promise((resolve, reject) => {
126
+ source.once('error', reject);
127
+ if (outputPath) {
128
+ const fileStream = fs.createWriteStream(outputPath);
129
+ fileStream.once('error', reject);
130
+ fileStream.once('finish', resolve);
131
+ source.pipe(fileStream);
132
+ }
133
+ else {
134
+ source.once('end', resolve);
135
+ source.pipe(process.stdout, { end: false });
136
+ }
137
+ });
138
+ parser.finalize();
139
+ return failure;
140
+ }
141
+ /** Shared draft-submission skeleton: synchronous, one-off name. */
142
+ function makeDraftJobSkeleton(jobGraph, processing) {
143
+ return {
144
+ name: `draft_pipeline_${Date.now()}`,
145
+ execution: JobExecution.SYNCHRONOUS,
146
+ processing,
147
+ jobGraph,
148
+ };
149
+ }
150
+ /** Enable server-side draftMode on a template-backed proposed job. */
151
+ function makeTemplateDraftJob(proposed, processing = JobProcessing.STREAMING) {
152
+ const cloned = structuredClone(proposed);
153
+ const templateOp = findTemplateOperation(cloned);
154
+ templateOp.draftMode = true;
155
+ return makeDraftJobSkeleton(cloned.jobGraph, processing);
156
+ }
157
+ /**
158
+ * Build a job-graph (raw, non-templated) draft: keep the live sources, insert a
159
+ * logs-event-sampler after each, and fan output into a sync sink. This mirrors
160
+ * the UI's template draft mode rather than replaying the raw data lake.
161
+ */
162
+ function makeJobGraphDraftJob(plan, options) {
163
+ const processing = plan.current.processing ?? JobProcessing.STREAMING;
164
+ const sourceJob = makeDraftJobSkeleton(structuredClone(plan.proposed.jobGraph), processing);
165
+ return transformJobGraphToSourcePreservingDraft(sourceJob, {
166
+ processing,
167
+ testName: sourceJob.name,
168
+ testTag: plan.patch.operations.map(op => op.op).join(','),
169
+ sampler: resolveSamplerOptions(options),
170
+ });
171
+ }
172
+ /** Map the `--sample-rate`/`--sample-burst` flags to sampler options; omitted fields keep the UI defaults. */
173
+ function resolveSamplerOptions(options) {
174
+ const sampler = {};
175
+ if (options.sampleRate !== undefined)
176
+ sampler.maxAllowedRate = options.sampleRate;
177
+ if (options.sampleBurst !== undefined)
178
+ sampler.maxBurstLimit = options.sampleBurst;
179
+ return sampler;
180
+ }
181
+ /** Normalize `--max-duration-seconds`: undefined when unset, else a validated positive integer. */
182
+ function resolveMaxDurationSeconds(options) {
183
+ const value = options.maxDurationSeconds;
184
+ if (value === undefined)
185
+ return undefined;
186
+ if (!Number.isFinite(value) || value <= 0) {
187
+ throw new Error('--max-duration-seconds must be a positive number of seconds.');
188
+ }
189
+ return value;
190
+ }
191
+ /** The sampler/duration flags only apply to raw job-graph drafts; reject them on template plans rather than ignoring them. */
192
+ function rejectSamplerFlagsOnTemplate(plan, options) {
193
+ if (plan.backend !== 'template')
194
+ return;
195
+ const jobGraphOnlyFlags = [
196
+ ['--sample-rate', options.sampleRate],
197
+ ['--sample-burst', options.sampleBurst],
198
+ ['--max-duration-seconds', options.maxDurationSeconds],
199
+ ].filter(([, value]) => value !== undefined);
200
+ if (jobGraphOnlyFlags.length > 0) {
201
+ throw new Error(`Template-backed plans manage sampling and duration server-side; ` +
202
+ `do not pass job-graph-only flags (${jobGraphOnlyFlags.map(([flag]) => flag).join(', ')}).`);
203
+ }
204
+ }
205
+ //# sourceMappingURL=job-draft-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job-draft-command.js","sourceRoot":"","sources":["../../../src/main/typescript/commands/job-draft-command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Build a plan for a patch.
3
+ *
4
+ * Writes plan JSON by default; `--dry-run` prints only the human diff.
5
+ */
6
+ import { Command } from 'commander';
7
+ import { ICommand } from '../lib/command-registry.js';
8
+ import { MergeConfiguration } from '../types.js';
9
+ export declare class JobPlanCommand implements ICommand {
10
+ addToProgram(program: Command, mergeConfiguration: MergeConfiguration): void;
11
+ }
12
+ //# sourceMappingURL=job-plan-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job-plan-command.d.ts","sourceRoot":"","sources":["../../../src/main/typescript/commands/job-plan-command.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAyB,MAAM,SAAS,CAAC;AAKpE,qBAAa,cAAe,YAAW,QAAQ;IAC7C,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,GAAG,IAAI;CA8C7E"}
@@ -0,0 +1,51 @@
1
+ import fs from 'fs-extra';
2
+ import { createApiClient } from '../lib/api-client-factory.js';
3
+ import { parsePatch } from '../lib/job-patch.js';
4
+ import { generatePlan, renderDiffHuman } from '../lib/job-plan.js';
5
+ export class JobPlanCommand {
6
+ addToProgram(program, mergeConfiguration) {
7
+ program
8
+ .command('job:plan')
9
+ .description('Build a plan describing pipeline changes (no production write)')
10
+ .requiredOption('--job-id <id>', 'ID of the job to evaluate')
11
+ .requiredOption('--patch <file>', 'Patch file (JSON) describing the changes')
12
+ .option('--dry-run', 'Print a human-readable diff and write nothing')
13
+ .option('--no-color', 'Disable colored output (with --dry-run)')
14
+ .action(async (options, command) => {
15
+ try {
16
+ const merged = { ...command.parent?.opts(), ...options };
17
+ const cliOptions = await mergeConfiguration(merged);
18
+ const jobId = options.jobId;
19
+ const patchFile = options.patch;
20
+ const patchRaw = await fs.readJson(patchFile);
21
+ const patch = parsePatch(patchRaw);
22
+ const apiClient = createApiClient(cliOptions);
23
+ const plan = await generatePlan(apiClient, jobId, patch);
24
+ if (options.dryRun) {
25
+ const useColor = options.color !== false;
26
+ console.log(renderDiffHuman(plan.diff, useColor));
27
+ if (!cliOptions.quiet) {
28
+ console.log(`\n(${plan.diff.length} change(s) against version ${plan.baseVersion})`);
29
+ }
30
+ return;
31
+ }
32
+ const json = JSON.stringify(plan, null, 2);
33
+ const outputPath = cliOptions.output;
34
+ if (outputPath) {
35
+ await fs.writeFile(outputPath, json);
36
+ if (!cliOptions.quiet) {
37
+ console.log(`Plan written to ${outputPath} (${plan.diff.length} change(s))`);
38
+ }
39
+ }
40
+ else {
41
+ console.log(json);
42
+ }
43
+ }
44
+ catch (error) {
45
+ console.error('Error generating pipeline plan:', error.message);
46
+ process.exit(1);
47
+ }
48
+ });
49
+ }
50
+ }
51
+ //# sourceMappingURL=job-plan-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job-plan-command.js","sourceRoot":"","sources":["../../../src/main/typescript/commands/job-plan-command.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,UAAU,CAAC;AAG1B,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAElE,MAAM,OAAO,cAAc;IACzB,YAAY,CAAC,OAAgB,EAAE,kBAAsC;QACnE,OAAO;aACJ,OAAO,CAAC,UAAU,CAAC;aACnB,WAAW,CAAC,gEAAgE,CAAC;aAC7E,cAAc,CAAC,eAAe,EAAE,2BAA2B,CAAC;aAC5D,cAAc,CAAC,gBAAgB,EAAE,0CAA0C,CAAC;aAC5E,MAAM,CAAC,WAAW,EAAE,+CAA+C,CAAC;aACpE,MAAM,CAAC,YAAY,EAAE,yCAAyC,CAAC;aAC/D,MAAM,CAAC,KAAK,EAAE,OAA8B,EAAE,OAAgB,EAAE,EAAE;YACjE,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,OAAO,EAA0D,CAAC;gBACjH,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAC;gBACpD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAe,CAAC;gBACtC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAe,CAAC;gBAE1C,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAC9C,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;gBAEnC,MAAM,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;gBAC9C,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;gBAEzD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;oBACnB,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC;oBACzC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;oBAClD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;wBACtB,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,8BAA8B,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;oBACvF,CAAC;oBACD,OAAO;gBACT,CAAC;gBAED,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC3C,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC;gBACrC,IAAI,UAAU,EAAE,CAAC;oBACf,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;oBACrC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;wBACtB,OAAO,CAAC,GAAG,CAAC,mBAAmB,UAAU,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,aAAa,CAAC,CAAC;oBAC/E,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;gBAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC,CAAC,CAAC;IACP,CAAC;CACF"}
@@ -10,6 +10,9 @@ import { QueryCommand } from './commands/query-command.js';
10
10
  import { ConfigCommand } from './commands/config-command.js';
11
11
  import { JobListCommand, JobCrudCommand } from './commands/job-command.js';
12
12
  import { JobToTestCommand } from './commands/job-to-test-command.js';
13
+ import { JobPlanCommand } from './commands/job-plan-command.js';
14
+ import { JobDraftCommand } from './commands/job-draft-command.js';
15
+ import { JobApplyCommand } from './commands/job-apply-command.js';
13
16
  import { IntegrationListCommand, IntegrationCrudCommand } from './commands/integration-command.js';
14
17
  import { DatasetListCommand, DatasetCrudCommand } from './commands/dataset-command.js';
15
18
  import { GrokParseCommand } from './commands/grok-command.js';
@@ -164,6 +167,10 @@ class GreprQueryCLI {
164
167
  this.commandRegistry.register(new JobListCommand());
165
168
  this.commandRegistry.register(new JobCrudCommand());
166
169
  this.commandRegistry.register(new JobToTestCommand());
170
+ // Register pipeline-editing commands (terraform-style plan / draft / apply)
171
+ this.commandRegistry.register(new JobPlanCommand());
172
+ this.commandRegistry.register(new JobDraftCommand());
173
+ this.commandRegistry.register(new JobApplyCommand());
167
174
  // Register integration commands
168
175
  this.commandRegistry.register(new IntegrationListCommand());
169
176
  this.commandRegistry.register(new IntegrationCrudCommand());
@@ -1 +1 @@
1
- {"version":3,"file":"grepr.js","sourceRoot":"","sources":["../../src/main/typescript/grepr.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"grepr.js","sourceRoot":"","sources":["../../src/main/typescript/grepr.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAGhE;;;;GAIG;AACH,SAAS,oBAAoB,CAAC,OAA4B;IACxD,OAAO,CACL,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ;QACnC,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ;QACvC,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ;QACpC,CAAC,OAAO,CAAC,UAAU,KAAK,OAAO,IAAI,OAAO,CAAC,UAAU,KAAK,oBAAoB,CAAC,CAChF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QAEtC,mDAAmD;QACnD,MAAM,aAAa,GAAG;YACpB,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC,EAAE,4DAA4D;YACtG,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,EAAE,mDAAmD;YAC1F,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,EAAQ,qDAAqD;YAC5F,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAK,qCAAqC;SAC7E,CAAC;QAEF,KAAK,MAAM,eAAe,IAAI,aAAa,EAAE,CAAC;YAC5C,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;gBACtE,OAAO,WAAW,CAAC,OAAO,CAAC;YAC7B,CAAC;YAAC,MAAM,CAAC;gBACP,wBAAwB;YAC1B,CAAC;QACH,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,2CAA2C,EAAE,KAAK,CAAC,CAAC;QACjE,OAAO,OAAO,CAAC,CAAC,mBAAmB;IACrC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,aAAa;IACT,OAAO,CAAU;IACjB,eAAe,CAAkB;IAEzC;QACE,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IAC/C,CAAC;IAED;;OAEG;IACK,QAAQ,CAAC,GAAY;QAC3B,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,GAAG,CAAC;QACb,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5D,OAAO,GAAG,CAAC;QACb,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,uCAAuC,CAAC,CAAC;IACvF,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,kBAAkB,CAAC,OAA4B;QACnD,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;QAE1C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAChE,IAAI,WAAW,EAAE,CAAC;oBAChB,OAAO,GAAG,aAAa,CAAC,sBAAsB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;oBACrE,OAAO,OAAO,CAAC,IAAI,CAAC;gBACtB,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;gBAC9E,OAAO,CAAC,KAAK,CAAC,gCAAgC,OAAO,CAAC,IAAI,MAAM,YAAY,EAAE,CAAC,CAAC;gBAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,gBAAgB,EAAE,CAAC;gBAC7D,IAAI,aAAa,EAAE,CAAC;oBAClB,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,oBAAoB,EAAE,CAAC;oBAC/D,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;wBACnB,OAAO,CAAC,KAAK,CAAC,gCAAgC,WAAW,IAAI,SAAS,EAAE,CAAC,CAAC;oBAC5E,CAAC;oBACD,OAAO,GAAG,aAAa,CAAC,sBAAsB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;gBACzE,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;gBAC9E,OAAO,CAAC,IAAI,CAAC,kDAAkD,YAAY,EAAE,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;QAED,4EAA4E;QAC5E,6EAA6E;QAC7E,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;YACrD,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;QACjD,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC;YAC7D,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QACzD,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC;YAC5D,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QACxD,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,OAAO,CAAC,KAAK,CAAC,kHAAkH,CAAC,CAAC;YAClI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,uBAAuB;QACvB,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YACzB,sEAAsE;YACtE,kEAAkE;YAClE,wEAAwE;YACxE,6DAA6D;YAC7D,OAAO,CAAC,WAAW,GAAG,uBAAuB,CAAC;QAChD,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YACxB,OAAO,CAAC,UAAU,GAAG,WAAW,OAAO,CAAC,OAAO,mBAAmB,CAAC;QACrE,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtB,qBAAqB;YACrB,OAAO,CAAC,QAAQ,GAAG,kCAAkC,CAAC;QACxD,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YACxB,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC;QAC/B,CAAC;QAED,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;QAC3F,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,gBAAgB;QACtB,8BAA8B;QAC9B,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC;QAElD,kCAAkC;QAClC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC;QAEnD,wBAAwB;QACxB,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC;QAEtD,4EAA4E;QAC5E,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC;QAErD,gCAAgC;QAChC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,sBAAsB,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,sBAAsB,EAAE,CAAC,CAAC;QAE5D,4BAA4B;QAC5B,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,kBAAkB,EAAE,CAAC,CAAC;QACxD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,kBAAkB,EAAE,CAAC,CAAC;QAExD,yBAAyB;QACzB,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC;QAEtD,yBAAyB;QACzB,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,IAAI,CAAC,OAAO;aACT,IAAI,CAAC,OAAO,CAAC;aACb,WAAW,CAAC,yCAAyC,CAAC;aACtD,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAEzB,kCAAkC;QAClC,IAAI,CAAC,OAAO;aACT,MAAM,CAAC,eAAe,EAAE,uDAAuD,CAAC;aAChF,MAAM,CAAC,mBAAmB,EAAE,kDAAkD,CAAC;aAC/E,MAAM,CAAC,sBAAsB,EAAE,mEAAmE,EAAE,IAAI,CAAC,QAAQ,CAAC;aAClH,MAAM,CAAC,uBAAuB,EAAE,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC;aAChE,MAAM,CAAC,wBAAwB,EAAE,mDAAmD,EAAE,OAAO,CAAC;aAC9F,MAAM,CAAC,kBAAkB,EAAE,uDAAuD,CAAC;aACnF,MAAM,CAAC,0BAA0B,EAAE,4GAA4G,CAAC;aAChJ,MAAM,CAAC,iBAAiB,EAAE,sDAAsD,EAAE,IAAI,CAAC;aACvF,MAAM,CAAC,cAAc,EAAE,4DAA4D,EAAE,IAAI,CAAC;aAC1F,MAAM,CAAC,iBAAiB,EAAE,iEAAiE,EAAE,QAAQ,CAAC;aACtG,MAAM,CAAC,qBAAqB,EAAE,0CAA0C,CAAC;aACzE,MAAM,CAAC,aAAa,EAAE,qBAAqB,CAAC;aAC5C,MAAM,CAAC,aAAa,EAAE,+BAA+B,CAAC,CAAC;QAE1D,2CAA2C;QAC3C,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEnF,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF;AAED,+DAA+D;AAC/D,MAAM,GAAG,GAAG,IAAI,aAAa,EAAE,CAAC;AAChC,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC"}