@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.
- package/README.md +51 -19
- package/build/dist/commands/job-apply-command.d.ts +18 -0
- package/build/dist/commands/job-apply-command.d.ts.map +1 -0
- package/build/dist/commands/job-apply-command.js +103 -0
- package/build/dist/commands/job-apply-command.js.map +1 -0
- package/build/dist/commands/job-command.js +1 -1
- package/build/dist/commands/job-draft-command.d.ts +12 -0
- package/build/dist/commands/job-draft-command.d.ts.map +1 -0
- package/build/dist/commands/job-draft-command.js +205 -0
- package/build/dist/commands/job-draft-command.js.map +1 -0
- package/build/dist/commands/job-plan-command.d.ts +12 -0
- package/build/dist/commands/job-plan-command.d.ts.map +1 -0
- package/build/dist/commands/job-plan-command.js +51 -0
- package/build/dist/commands/job-plan-command.js.map +1 -0
- package/build/dist/grepr.js +7 -0
- package/build/dist/grepr.js.map +1 -1
- package/build/dist/lib/grepr-api-client.d.ts +14 -1
- package/build/dist/lib/grepr-api-client.d.ts.map +1 -1
- package/build/dist/lib/grepr-api-client.js +42 -4
- package/build/dist/lib/grepr-api-client.js.map +1 -1
- package/build/dist/lib/job-graph-log-pipeline-constants.d.ts +12 -0
- package/build/dist/lib/job-graph-log-pipeline-constants.d.ts.map +1 -0
- package/build/dist/lib/job-graph-log-pipeline-constants.js +16 -0
- package/build/dist/lib/job-graph-log-pipeline-constants.js.map +1 -0
- package/build/dist/lib/job-graph-transformer.d.ts +30 -0
- package/build/dist/lib/job-graph-transformer.d.ts.map +1 -1
- package/build/dist/lib/job-graph-transformer.js +271 -5
- package/build/dist/lib/job-graph-transformer.js.map +1 -1
- package/build/dist/lib/job-patch.d.ts +157 -0
- package/build/dist/lib/job-patch.d.ts.map +1 -0
- package/build/dist/lib/job-patch.js +1071 -0
- package/build/dist/lib/job-patch.js.map +1 -0
- package/build/dist/lib/job-plan.d.ts +40 -0
- package/build/dist/lib/job-plan.d.ts.map +1 -0
- package/build/dist/lib/job-plan.js +451 -0
- package/build/dist/lib/job-plan.js.map +1 -0
- package/build/dist/lib/option-parsers.d.ts +5 -0
- package/build/dist/lib/option-parsers.d.ts.map +1 -1
- package/build/dist/lib/option-parsers.js +7 -0
- package/build/dist/lib/option-parsers.js.map +1 -1
- package/build/dist/openapi/openApiTypes.d.ts +10 -0
- package/build/dist/openapi/openApiTypes.d.ts.map +1 -1
- package/build/dist/openapi/openApiTypes.js.map +1 -1
- package/build/dist/types.d.ts +34 -0
- package/build/dist/types.d.ts.map +1 -1
- package/build/dist/types.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# Grepr CLI and
|
|
1
|
+
# Grepr CLI and Agent Plugins
|
|
2
2
|
|
|
3
|
-
The Grepr command-line tool (`@grepr/cli`) and
|
|
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)
|
|
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
|
-
##
|
|
66
|
+
## Agent Skills
|
|
66
67
|
|
|
67
|
-
> **Preview**:
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
**
|
|
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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"}
|
|
@@ -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"}
|
package/build/dist/grepr.js
CHANGED
|
@@ -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());
|
package/build/dist/grepr.js.map
CHANGED
|
@@ -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":"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"}
|