@grackle-ai/cli 0.30.0 → 0.31.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/dist/commands/pair.d.ts +4 -0
- package/dist/commands/pair.d.ts.map +1 -0
- package/dist/commands/pair.js +28 -0
- package/dist/commands/pair.js.map +1 -0
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +11 -20
- package/dist/commands/serve.js.map +1 -1
- package/dist/commands/serve.test.js +20 -13
- package/dist/commands/serve.test.js.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +4 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pair.d.ts","sourceRoot":"","sources":["../../src/commands/pair.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,uFAAuF;AACvF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyB1D"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { createGrackleClient } from "../client.js";
|
|
3
|
+
/** Register the `pair` command that generates a new pairing code for web UI access. */
|
|
4
|
+
export function registerPairCommand(program) {
|
|
5
|
+
program
|
|
6
|
+
.command("pair")
|
|
7
|
+
.description("Generate a new pairing code for the web UI")
|
|
8
|
+
.action(async () => {
|
|
9
|
+
const client = createGrackleClient();
|
|
10
|
+
const response = await client.generatePairingCode({});
|
|
11
|
+
console.log("");
|
|
12
|
+
console.log(chalk.bold(" Pairing code: ") + chalk.cyan(response.code));
|
|
13
|
+
console.log(chalk.bold(" URL: ") + response.url);
|
|
14
|
+
console.log("");
|
|
15
|
+
// Print QR code (best-effort)
|
|
16
|
+
try {
|
|
17
|
+
const qrcode = await import("qrcode");
|
|
18
|
+
const qr = await qrcode.toString(response.url, { type: "terminal", small: true });
|
|
19
|
+
console.log(qr);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
// qrcode not installed — skip QR
|
|
23
|
+
}
|
|
24
|
+
console.log(chalk.dim(" Code expires in 5 minutes."));
|
|
25
|
+
console.log("");
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=pair.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pair.js","sourceRoot":"","sources":["../../src/commands/pair.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD,uFAAuF;AACvF,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,4CAA4C,CAAC;SACzD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;QAEtD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,8BAA8B;QAC9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;YACtC,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAClF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,iCAAiC;QACnC,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,8EAA8E;AAC9E,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4B3D"}
|
package/dist/commands/serve.js
CHANGED
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
/** Loopback addresses accepted by `--host`. Security policy: bind to loopback only. */
|
|
2
|
-
const LOOPBACK_HOSTS = new Set(["127.0.0.1", "::1"]);
|
|
3
|
-
/**
|
|
4
|
-
* Format a bind host for embedding in a URL.
|
|
5
|
-
* IPv6 literals (containing `:`) must be bracketed per RFC 2732.
|
|
6
|
-
*/
|
|
7
|
-
function formatHostForUrl(host) {
|
|
8
|
-
return host.includes(":") ? `[${host}]` : host;
|
|
9
|
-
}
|
|
10
1
|
/** Register the `serve` command that starts the Grackle server and web UI. */
|
|
11
2
|
export function registerServeCommand(program) {
|
|
12
3
|
program
|
|
@@ -14,22 +5,22 @@ export function registerServeCommand(program) {
|
|
|
14
5
|
.description("Start the Grackle server")
|
|
15
6
|
.option("--port <port>", "Server port", "7434")
|
|
16
7
|
.option("--web-port <port>", "Web UI port", "3000")
|
|
17
|
-
.option("--host <address>", "Bind address — must be a loopback address (127.0.0.1 or ::1)", "127.0.0.1")
|
|
18
8
|
.option("--mcp-port <port>", "MCP server port", "7435")
|
|
9
|
+
.option("--allow-network", "Bind to all interfaces (0.0.0.0) for LAN access")
|
|
10
|
+
.option("--no-open", "Do not auto-open the browser on startup")
|
|
19
11
|
.action(async (opts) => {
|
|
20
|
-
if (!LOOPBACK_HOSTS.has(opts.host)) {
|
|
21
|
-
console.error(`Error: --host must be a loopback address (127.0.0.1 or ::1). Got: ${opts.host}`);
|
|
22
|
-
console.error("Binding to non-loopback addresses would expose the API key to the network.");
|
|
23
|
-
process.exit(1);
|
|
24
|
-
}
|
|
25
12
|
process.env.GRACKLE_PORT = opts.port;
|
|
26
13
|
process.env.GRACKLE_WEB_PORT = opts.webPort;
|
|
27
14
|
process.env.GRACKLE_MCP_PORT = opts.mcpPort;
|
|
28
|
-
process.env.GRACKLE_HOST = opts.
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
console.log(`
|
|
15
|
+
process.env.GRACKLE_HOST = opts.allowNetwork ? "0.0.0.0" : "127.0.0.1";
|
|
16
|
+
if (!opts.open) {
|
|
17
|
+
process.env.GRACKLE_NO_OPEN = "1";
|
|
18
|
+
}
|
|
19
|
+
console.log(`Starting Grackle server...`);
|
|
20
|
+
console.log(`gRPC on port ${opts.port}, Web UI on port ${opts.webPort}, MCP on port ${opts.mcpPort}`);
|
|
21
|
+
if (opts.allowNetwork) {
|
|
22
|
+
console.log("Network access enabled — binding to all interfaces");
|
|
23
|
+
}
|
|
33
24
|
// Dynamic import to start the server
|
|
34
25
|
await import("@grackle-ai/server");
|
|
35
26
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAEA,
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAEA,8EAA8E;AAC9E,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,0BAA0B,CAAC;SACvC,MAAM,CAAC,eAAe,EAAE,aAAa,EAAE,MAAM,CAAC;SAC9C,MAAM,CAAC,mBAAmB,EAAE,aAAa,EAAE,MAAM,CAAC;SAClD,MAAM,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,CAAC;SACtD,MAAM,CAAC,iBAAiB,EAAE,iDAAiD,CAAC;SAC5E,MAAM,CAAC,WAAW,EAAE,yCAAyC,CAAC;SAC9D,MAAM,CAAC,KAAK,EAAE,IAA8F,EAAE,EAAE;QAC/G,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;QAEvE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,GAAG,CAAC;QACpC,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,IAAI,oBAAoB,IAAI,CAAC,OAAO,iBAAiB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACtG,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QACpE,CAAC;QAED,qCAAqC;QACrC,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -12,38 +12,45 @@ describe("registerServeCommand", () => {
|
|
|
12
12
|
delete process.env.GRACKLE_PORT;
|
|
13
13
|
delete process.env.GRACKLE_WEB_PORT;
|
|
14
14
|
delete process.env.GRACKLE_HOST;
|
|
15
|
+
delete process.env.GRACKLE_NO_OPEN;
|
|
15
16
|
vi.restoreAllMocks();
|
|
16
17
|
vi.resetModules();
|
|
17
18
|
});
|
|
18
|
-
it("
|
|
19
|
+
it("defaults to 127.0.0.1 bind host", async () => {
|
|
19
20
|
const { registerServeCommand } = await import("./serve.js");
|
|
20
21
|
const program = new Command();
|
|
21
22
|
program.exitOverride();
|
|
22
23
|
registerServeCommand(program);
|
|
23
|
-
await program.parseAsync(["serve"
|
|
24
|
-
expect(process.env.GRACKLE_HOST).toBe("
|
|
24
|
+
await program.parseAsync(["serve"], { from: "user" });
|
|
25
|
+
expect(process.env.GRACKLE_HOST).toBe("127.0.0.1");
|
|
25
26
|
expect(process.env.GRACKLE_PORT).toBe("7434");
|
|
26
27
|
expect(process.env.GRACKLE_WEB_PORT).toBe("3000");
|
|
27
28
|
});
|
|
28
|
-
it("
|
|
29
|
+
it("--allow-network sets GRACKLE_HOST to 0.0.0.0", async () => {
|
|
29
30
|
const { registerServeCommand } = await import("./serve.js");
|
|
30
31
|
const program = new Command();
|
|
31
32
|
program.exitOverride();
|
|
32
33
|
registerServeCommand(program);
|
|
33
|
-
await program.parseAsync(["serve"], { from: "user" });
|
|
34
|
-
expect(process.env.GRACKLE_HOST).toBe("
|
|
34
|
+
await program.parseAsync(["serve", "--allow-network"], { from: "user" });
|
|
35
|
+
expect(process.env.GRACKLE_HOST).toBe("0.0.0.0");
|
|
36
|
+
});
|
|
37
|
+
it("--no-open sets GRACKLE_NO_OPEN=1", async () => {
|
|
38
|
+
const { registerServeCommand } = await import("./serve.js");
|
|
39
|
+
const program = new Command();
|
|
40
|
+
program.exitOverride();
|
|
41
|
+
registerServeCommand(program);
|
|
42
|
+
await program.parseAsync(["serve", "--no-open"], { from: "user" });
|
|
43
|
+
expect(process.env.GRACKLE_NO_OPEN).toBe("1");
|
|
35
44
|
});
|
|
36
|
-
it("
|
|
37
|
-
// Suppress console.error so the expected rejection message does not pollute test output
|
|
38
|
-
const errorSpy = vi.spyOn(console, "error").mockImplementation(() => undefined);
|
|
45
|
+
it("accepts custom port options", async () => {
|
|
39
46
|
const { registerServeCommand } = await import("./serve.js");
|
|
40
47
|
const program = new Command();
|
|
41
48
|
program.exitOverride();
|
|
42
49
|
registerServeCommand(program);
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
expect(process.
|
|
46
|
-
expect(
|
|
50
|
+
await program.parseAsync(["serve", "--port", "8000", "--web-port", "8001", "--mcp-port", "8002"], { from: "user" });
|
|
51
|
+
expect(process.env.GRACKLE_PORT).toBe("8000");
|
|
52
|
+
expect(process.env.GRACKLE_WEB_PORT).toBe("8001");
|
|
53
|
+
expect(process.env.GRACKLE_MCP_PORT).toBe("8002");
|
|
47
54
|
});
|
|
48
55
|
});
|
|
49
56
|
//# sourceMappingURL=serve.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.test.js","sourceRoot":"","sources":["../../src/commands/serve.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,sFAAsF;AACtF,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE1C,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC,GAAG,EAAE;YACjD,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC,CAA6C,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QAChC,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QACpC,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QAChC,EAAE,CAAC,eAAe,EAAE,CAAC;QACrB,EAAE,CAAC,YAAY,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"serve.test.js","sourceRoot":"","sources":["../../src/commands/serve.test.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -12,6 +12,7 @@ import { registerProjectCommands } from "./commands/project.js";
|
|
|
12
12
|
import { registerTaskCommands } from "./commands/task.js";
|
|
13
13
|
import { registerFindingCommands } from "./commands/findings.js";
|
|
14
14
|
import { registerPersonaCommands } from "./commands/persona.js";
|
|
15
|
+
import { registerPairCommand } from "./commands/pair.js";
|
|
15
16
|
import { renderBanner, getHelpFooter } from "./banner.js";
|
|
16
17
|
const esmRequire = createRequire(import.meta.url);
|
|
17
18
|
const { version } = esmRequire("../package.json");
|
|
@@ -45,6 +46,7 @@ registerProjectCommands(program);
|
|
|
45
46
|
registerTaskCommands(program);
|
|
46
47
|
registerFindingCommands(program);
|
|
47
48
|
registerPersonaCommands(program);
|
|
49
|
+
registerPairCommand(program);
|
|
48
50
|
program.parseAsync(process.argv).catch((err) => {
|
|
49
51
|
if (err instanceof ConnectError) {
|
|
50
52
|
console.error(chalk.red(`gRPC error [${Code[err.code]}]: ${err.rawMessage}`));
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE1D,MAAM,UAAU,GAAgB,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/D,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,iBAAiB,CAAwB,CAAC;AAEzE,MAAM,OAAO,GAAY,IAAI,OAAO,EAAE,CAAC;AAEvC,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,8CAA8C,CAAC;KAC3D,MAAM,CAAC,eAAe,EAAE,gCAAgC,CAAC;KACzD,EAAE,CAAC,gBAAgB,EAAE,GAAG,EAAE;IACzB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,EAAE;IAC3C,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE;IACvC,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,aAAa,EAAE,CAAC;AACzB,CAAC,CAAC,CAAC;AAEH,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,uBAAuB,CAAC,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.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.
|
|
3
|
+
"version": "0.31.0",
|
|
4
4
|
"description": "Command-line interface for managing Grackle environments and agents",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -33,8 +33,9 @@
|
|
|
33
33
|
"cli-table3": "^0.6.0",
|
|
34
34
|
"commander": "^13.0.0",
|
|
35
35
|
"ora": "^8.0.0",
|
|
36
|
-
"
|
|
37
|
-
"@grackle-ai/common": "0.
|
|
36
|
+
"qrcode": "^1.5.4",
|
|
37
|
+
"@grackle-ai/common": "0.31.0",
|
|
38
|
+
"@grackle-ai/server": "0.31.0"
|
|
38
39
|
},
|
|
39
40
|
"devDependencies": {
|
|
40
41
|
"@rushstack/heft": "1.2.4",
|