@grackle-ai/adapter-sdk 0.72.1 → 0.72.2
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 +8 -1
- package/dist/adapter-dependencies.d.ts +20 -0
- package/dist/adapter-dependencies.d.ts.map +1 -0
- package/dist/adapter-dependencies.js +2 -0
- package/dist/adapter-dependencies.js.map +1 -0
- package/dist/exec.d.ts +17 -0
- package/dist/exec.d.ts.map +1 -0
- package/dist/exec.js +21 -0
- package/dist/exec.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -4,7 +4,14 @@ SDK for building [Grackle](https://github.com/nick-pape/grackle) environment ada
|
|
|
4
4
|
|
|
5
5
|
Grackle runs AI coding agents on remote environments — Docker containers, SSH hosts, GitHub Codespaces, and more. Each environment type is backed by an **adapter**: a small module that knows how to provision, connect, health-check, and tear down that particular kind of compute.
|
|
6
6
|
|
|
7
|
-
This package provides the interfaces, base classes, and helpers you need to write a custom adapter. If your infrastructure isn't covered by the built-in adapters
|
|
7
|
+
This package provides the interfaces, base classes, and helpers you need to write a custom adapter. If your infrastructure isn't covered by the built-in adapters, you can implement the `EnvironmentAdapter` interface and plug it into the Grackle server.
|
|
8
|
+
|
|
9
|
+
### Built-in Adapter Packages
|
|
10
|
+
|
|
11
|
+
- [`@grackle-ai/adapter-local`](https://www.npmjs.com/package/@grackle-ai/adapter-local) — local PowerLine
|
|
12
|
+
- [`@grackle-ai/adapter-ssh`](https://www.npmjs.com/package/@grackle-ai/adapter-ssh) — remote hosts via SSH
|
|
13
|
+
- [`@grackle-ai/adapter-codespace`](https://www.npmjs.com/package/@grackle-ai/adapter-codespace) — GitHub Codespaces
|
|
14
|
+
- [`@grackle-ai/adapter-docker`](https://www.npmjs.com/package/@grackle-ai/adapter-docker) — Docker containers
|
|
8
15
|
|
|
9
16
|
## Install
|
|
10
17
|
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { AdapterLogger } from "./logger.js";
|
|
2
|
+
import type { ExecResult } from "./exec.js";
|
|
3
|
+
/** Function signature for executing local commands. */
|
|
4
|
+
export type ExecFunction = (cmd: string, args: string[], opts?: {
|
|
5
|
+
timeout?: number;
|
|
6
|
+
cwd?: string;
|
|
7
|
+
env?: NodeJS.ProcessEnv;
|
|
8
|
+
}) => Promise<ExecResult>;
|
|
9
|
+
/** Injectable dependencies for environment adapters. */
|
|
10
|
+
export interface AdapterDependencies {
|
|
11
|
+
/** Execute a local command (default: child_process.execFile wrapper). */
|
|
12
|
+
exec?: ExecFunction;
|
|
13
|
+
/** Async sleep (default: setTimeout-based). */
|
|
14
|
+
sleep?: (ms: number) => Promise<void>;
|
|
15
|
+
/** Logger (default: adapter-sdk's defaultLogger). */
|
|
16
|
+
logger?: AdapterLogger;
|
|
17
|
+
/** Whether the GitHub credential provider is enabled (default: false). */
|
|
18
|
+
isGitHubProviderEnabled?: () => boolean;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=adapter-dependencies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-dependencies.d.ts","sourceRoot":"","sources":["../src/adapter-dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,uDAAuD;AACvD,MAAM,MAAM,YAAY,GAAG,CACzB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CAAE,KAC/D,OAAO,CAAC,UAAU,CAAC,CAAC;AAEzB,wDAAwD;AACxD,MAAM,WAAW,mBAAmB;IAClC,yEAAyE;IACzE,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,qDAAqD;IACrD,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,0EAA0E;IAC1E,uBAAuB,CAAC,EAAE,MAAM,OAAO,CAAC;CACzC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-dependencies.js","sourceRoot":"","sources":["../src/adapter-dependencies.ts"],"names":[],"mappings":""}
|
package/dist/exec.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** Trimmed stdout/stderr from a child process execution. */
|
|
2
|
+
export interface ExecResult {
|
|
3
|
+
stdout: string;
|
|
4
|
+
stderr: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Execute a command as a child process and return its trimmed output.
|
|
8
|
+
* @param cmd - Executable name or path.
|
|
9
|
+
* @param args - Arguments to pass to the executable.
|
|
10
|
+
* @param opts - Optional timeout, cwd, and env overrides.
|
|
11
|
+
*/
|
|
12
|
+
export declare function exec(cmd: string, args: string[], opts?: {
|
|
13
|
+
timeout?: number;
|
|
14
|
+
cwd?: string;
|
|
15
|
+
env?: NodeJS.ProcessEnv;
|
|
16
|
+
}): Promise<ExecResult>;
|
|
17
|
+
//# sourceMappingURL=exec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../src/exec.ts"],"names":[],"mappings":"AAQA,4DAA4D;AAC5D,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAsB,IAAI,CACxB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CAAE,GACjE,OAAO,CAAC,UAAU,CAAC,CAQrB"}
|
package/dist/exec.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { execFile as _execFile } from "node:child_process";
|
|
2
|
+
import { promisify } from "node:util";
|
|
3
|
+
const execFileAsync = promisify(_execFile);
|
|
4
|
+
const DEFAULT_EXEC_TIMEOUT_MS = 60_000;
|
|
5
|
+
const EXEC_MAX_BUFFER_BYTES = 10 * 1024 * 1024;
|
|
6
|
+
/**
|
|
7
|
+
* Execute a command as a child process and return its trimmed output.
|
|
8
|
+
* @param cmd - Executable name or path.
|
|
9
|
+
* @param args - Arguments to pass to the executable.
|
|
10
|
+
* @param opts - Optional timeout, cwd, and env overrides.
|
|
11
|
+
*/
|
|
12
|
+
export async function exec(cmd, args, opts) {
|
|
13
|
+
const { stdout, stderr } = await execFileAsync(cmd, args, {
|
|
14
|
+
timeout: opts?.timeout ?? DEFAULT_EXEC_TIMEOUT_MS,
|
|
15
|
+
cwd: opts?.cwd,
|
|
16
|
+
env: opts?.env ?? process.env,
|
|
17
|
+
maxBuffer: EXEC_MAX_BUFFER_BYTES,
|
|
18
|
+
});
|
|
19
|
+
return { stdout: stdout.trim(), stderr: stderr.trim() };
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=exec.js.map
|
package/dist/exec.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../src/exec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,aAAa,GAAmC,SAAS,CAAC,SAAS,CAAC,CAAC;AAE3E,MAAM,uBAAuB,GAAW,MAAM,CAAC;AAC/C,MAAM,qBAAqB,GAAW,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAQvD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,GAAW,EACX,IAAc,EACd,IAAkE;IAElE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE;QACxD,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,uBAAuB;QACjD,GAAG,EAAE,IAAI,EAAE,GAAG;QACd,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG;QAC7B,SAAS,EAAE,qBAAqB;KACjC,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;AAC1D,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -13,5 +13,8 @@ export { createPowerLineClient, connectThroughTunnel, waitForLocalPort, TCP_PORT
|
|
|
13
13
|
export type { BootstrapOptions, StartRemotePowerLineOptions } from "./bootstrap.js";
|
|
14
14
|
export { bootstrapPowerLine, buildEnvFileContent, startRemotePowerLine, probeRemotePowerLine, writeRemoteEnvFile, buildRemoteKillCommand, } from "./bootstrap.js";
|
|
15
15
|
export { remoteStop, remoteDestroy, remoteHealthCheck } from "./shared-operations.js";
|
|
16
|
+
export type { ExecResult } from "./exec.js";
|
|
17
|
+
export { exec } from "./exec.js";
|
|
18
|
+
export type { ExecFunction, AdapterDependencies } from "./adapter-dependencies.js";
|
|
16
19
|
export { sleep, findFreePort, isDevMode, getPackageVersion, shellEscape, REMOTE_POWERLINE_DIRECTORY, SSH_CONNECTIVITY_TIMEOUT_MS, REMOTE_EXEC_DEFAULT_TIMEOUT_MS, } from "./utils.js";
|
|
17
20
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,YAAY,EACV,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAGpD,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D,YAAY,EAAE,YAAY,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG/F,YAAY,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAG9G,YAAY,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AACpF,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAGtF,OAAO,EACL,KAAK,EACL,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,WAAW,EACX,0BAA0B,EAC1B,2BAA2B,EAC3B,8BAA8B,GAC/B,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,YAAY,EACV,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAGpD,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D,YAAY,EAAE,YAAY,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG/F,YAAY,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAG9G,YAAY,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AACpF,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAGtF,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAGnF,OAAO,EACL,KAAK,EACL,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,WAAW,EACX,0BAA0B,EAC1B,2BAA2B,EAC3B,8BAA8B,GAC/B,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -8,6 +8,7 @@ export { createPowerLineClient, connectThroughTunnel, waitForLocalPort, TCP_PORT
|
|
|
8
8
|
export { bootstrapPowerLine, buildEnvFileContent, startRemotePowerLine, probeRemotePowerLine, writeRemoteEnvFile, buildRemoteKillCommand, } from "./bootstrap.js";
|
|
9
9
|
// ─── Shared Operations ─────────────────────────────────────
|
|
10
10
|
export { remoteStop, remoteDestroy, remoteHealthCheck } from "./shared-operations.js";
|
|
11
|
+
export { exec } from "./exec.js";
|
|
11
12
|
// ─── Utilities ──────────────────────────────────────────────
|
|
12
13
|
export { sleep, findFreePort, isDevMode, getPackageVersion, shellEscape, REMOTE_POWERLINE_DIRECTORY, SSH_CONNECTIVITY_TIMEOUT_MS, REMOTE_EXEC_DEFAULT_TIMEOUT_MS, } from "./utils.js";
|
|
13
14
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,iEAAiE;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAU/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAOpD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAI/F,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAI9G,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AAExB,8DAA8D;AAC9D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,iEAAiE;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAU/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAOpD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAI/F,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAI9G,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AAExB,8DAA8D;AAC9D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAItF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAKjC,+DAA+D;AAC/D,OAAO,EACL,KAAK,EACL,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,WAAW,EACX,0BAA0B,EAC1B,2BAA2B,EAC3B,8BAA8B,GAC/B,MAAM,YAAY,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@grackle-ai/adapter-sdk",
|
|
3
|
-
"version": "0.72.
|
|
3
|
+
"version": "0.72.2",
|
|
4
4
|
"description": "SDK for building Grackle environment adapters",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"@bufbuild/protobuf": "^2.5.0",
|
|
28
28
|
"@connectrpc/connect": "^2.0.0",
|
|
29
29
|
"@connectrpc/connect-node": "^2.0.0",
|
|
30
|
-
"@grackle-ai/common": "0.72.
|
|
30
|
+
"@grackle-ai/common": "0.72.2"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
33
|
"@rushstack/heft": "1.2.7",
|