@grackle-ai/cli 0.14.2 → 0.14.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.test.d.ts +2 -0
- package/dist/cli.test.d.ts.map +1 -0
- package/dist/cli.test.js +8 -0
- package/dist/cli.test.js.map +1 -0
- package/dist/commands/task.d.ts.map +1 -1
- package/dist/commands/task.js +19 -77
- package/dist/commands/task.js.map +1 -1
- package/package.json +6 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.test.d.ts","sourceRoot":"","sources":["../src/cli.test.ts"],"names":[],"mappings":""}
|
package/dist/cli.test.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
describe("cli", () => {
|
|
3
|
+
it("imports task commands", async () => {
|
|
4
|
+
const mod = await import("./commands/task.js");
|
|
5
|
+
expect(typeof mod.registerTaskCommands).toBe("function");
|
|
6
|
+
});
|
|
7
|
+
});
|
|
8
|
+
//# sourceMappingURL=cli.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../src/cli.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE9C,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;IACnB,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;QACrC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAC/C,MAAM,CAAC,OAAO,GAAG,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/commands/task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/commands/task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsI3D"}
|
package/dist/commands/task.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { createGrackleClient } from "../client.js";
|
|
2
|
-
import { taskStatusToString } from "@grackle-ai/common";
|
|
2
|
+
import { taskStatusToString, issueStateToEnum } from "@grackle-ai/common";
|
|
3
3
|
import Table from "cli-table3";
|
|
4
4
|
import chalk from "chalk";
|
|
5
|
-
import { execFileSync } from "node:child_process";
|
|
6
5
|
export function registerTaskCommands(program) {
|
|
7
6
|
const task = program.command("task").description("Manage tasks");
|
|
8
7
|
task
|
|
@@ -109,84 +108,27 @@ export function registerTaskCommands(program) {
|
|
|
109
108
|
.option("--label <label>", "Filter issues by label name")
|
|
110
109
|
.option("--state <state>", "Issue state to fetch", "open")
|
|
111
110
|
.option("--env <env-id>", "Environment ID to assign to created tasks")
|
|
112
|
-
.action(
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
* @param projectId - The Grackle project ID to import tasks into.
|
|
119
|
-
* @param opts - Parsed CLI options (repo, label, state, env).
|
|
120
|
-
*/
|
|
121
|
-
async (projectId, opts) => {
|
|
122
|
-
const MAX_BUFFER_BYTES = 50 * 1024 * 1024;
|
|
123
|
-
// 1. Fetch issues from GitHub CLI
|
|
124
|
-
const ghArgs = [
|
|
125
|
-
"issue",
|
|
126
|
-
"list",
|
|
127
|
-
"--repo",
|
|
128
|
-
opts.repo,
|
|
129
|
-
"--state",
|
|
130
|
-
opts.state,
|
|
131
|
-
"--json",
|
|
132
|
-
"number,title,body,labels",
|
|
133
|
-
"--limit",
|
|
134
|
-
"9999",
|
|
135
|
-
];
|
|
136
|
-
if (opts.label) {
|
|
137
|
-
ghArgs.push("--label", opts.label);
|
|
138
|
-
}
|
|
139
|
-
let ghOutput;
|
|
140
|
-
try {
|
|
141
|
-
ghOutput = execFileSync("gh", ghArgs, {
|
|
142
|
-
encoding: "utf8",
|
|
143
|
-
maxBuffer: MAX_BUFFER_BYTES,
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
|
-
catch (err) {
|
|
147
|
-
console.error(`Failed to run \`gh issue list\` for repo ${opts.repo} (state=${opts.state}).`);
|
|
148
|
-
console.error(err);
|
|
149
|
-
process.exit(1);
|
|
150
|
-
}
|
|
151
|
-
let issues;
|
|
152
|
-
try {
|
|
153
|
-
issues = JSON.parse(ghOutput);
|
|
154
|
-
}
|
|
155
|
-
catch (err) {
|
|
156
|
-
console.error("Failed to parse JSON output from `gh issue list`.");
|
|
157
|
-
console.error("Parse error:", err);
|
|
158
|
-
process.exit(1);
|
|
111
|
+
.action(async (projectId, opts) => {
|
|
112
|
+
const normalizedState = (opts.state ?? "").trim().toLowerCase();
|
|
113
|
+
if (normalizedState !== "open" && normalizedState !== "closed") {
|
|
114
|
+
console.error(chalk.red(`Invalid --state "${opts.state}". Must be "open" or "closed".`));
|
|
115
|
+
process.exitCode = 1;
|
|
116
|
+
return;
|
|
159
117
|
}
|
|
160
|
-
// 2. Fetch existing tasks for deduplication (match by issue number)
|
|
161
118
|
const client = createGrackleClient();
|
|
162
|
-
const res = await client.
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
.
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
})
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
let skipped = 0;
|
|
173
|
-
for (const issue of issues) {
|
|
174
|
-
if (existingIssueNumbers.has(issue.number)) {
|
|
175
|
-
skipped++;
|
|
176
|
-
continue;
|
|
177
|
-
}
|
|
178
|
-
const title = `#${issue.number}: ${issue.title}`;
|
|
179
|
-
await client.createTask({
|
|
180
|
-
projectId,
|
|
181
|
-
title,
|
|
182
|
-
description: issue.body ?? "",
|
|
183
|
-
environmentId: opts.env ?? "",
|
|
184
|
-
dependsOn: [],
|
|
185
|
-
});
|
|
186
|
-
imported++;
|
|
119
|
+
const res = await client.importGitHubIssues({
|
|
120
|
+
projectId,
|
|
121
|
+
repo: opts.repo,
|
|
122
|
+
label: opts.label,
|
|
123
|
+
state: issueStateToEnum(normalizedState),
|
|
124
|
+
environmentId: opts.env,
|
|
125
|
+
});
|
|
126
|
+
const parts = [`Imported ${chalk.green(res.imported)} tasks`];
|
|
127
|
+
if (res.linked > 0) {
|
|
128
|
+
parts.push(`${chalk.cyan(res.linked)} linked to parents`);
|
|
187
129
|
}
|
|
188
|
-
|
|
189
|
-
console.log(
|
|
130
|
+
parts.push(`skipped ${res.skipped} already imported`);
|
|
131
|
+
console.log(parts.join(", "));
|
|
190
132
|
});
|
|
191
133
|
}
|
|
192
134
|
//# sourceMappingURL=task.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/commands/task.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/commands/task.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@grackle-ai/cli",
|
|
3
|
-
"version": "0.14.
|
|
3
|
+
"version": "0.14.3",
|
|
4
4
|
"description": "Command-line interface for managing Grackle environments and agents",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -33,17 +33,19 @@
|
|
|
33
33
|
"cli-table3": "^0.6.0",
|
|
34
34
|
"commander": "^13.0.0",
|
|
35
35
|
"ora": "^8.0.0",
|
|
36
|
-
"@grackle-ai/common": "0.14.
|
|
37
|
-
"@grackle-ai/server": "0.14.
|
|
36
|
+
"@grackle-ai/common": "0.14.3",
|
|
37
|
+
"@grackle-ai/server": "0.14.3"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@rushstack/heft": "1.2.4",
|
|
41
41
|
"@types/node": "^22.0.0",
|
|
42
|
+
"vitest": "^3.1.1",
|
|
42
43
|
"@grackle-ai/heft-rig": "0.0.1"
|
|
43
44
|
},
|
|
44
45
|
"scripts": {
|
|
45
46
|
"build": "heft build --clean",
|
|
46
47
|
"start": "node dist/index.js",
|
|
47
|
-
"clean": "heft clean"
|
|
48
|
+
"clean": "heft clean",
|
|
49
|
+
"test": "vitest run"
|
|
48
50
|
}
|
|
49
51
|
}
|