@ottimis/jack-provider-sdk 0.7.0 → 0.9.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/cjs/index.js +1 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/sandbox.js +34 -0
- package/dist/cjs/sandbox.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/provider.d.ts +37 -0
- package/dist/provider.d.ts.map +1 -1
- package/dist/sandbox.d.ts +104 -0
- package/dist/sandbox.d.ts.map +1 -0
- package/dist/sandbox.js +33 -0
- package/dist/sandbox.js.map +1 -0
- package/package.json +1 -1
- package/src/index.ts +1 -0
- package/src/provider.ts +37 -0
- package/src/sandbox.ts +108 -0
package/dist/cjs/index.js
CHANGED
|
@@ -48,4 +48,5 @@ __exportStar(require("./provider"), exports);
|
|
|
48
48
|
__exportStar(require("./usage"), exports);
|
|
49
49
|
__exportStar(require("./host"), exports);
|
|
50
50
|
__exportStar(require("./profiles"), exports);
|
|
51
|
+
__exportStar(require("./sandbox"), exports);
|
|
51
52
|
//# sourceMappingURL=index.js.map
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;;;;;;;;;;;;;;;;AAEH,4CAAyB;AACzB,4CAAyB;AACzB,6CAA0B;AAC1B,0CAAuB;AACvB,yCAAsB;AACtB,6CAA0B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;;;;;;;;;;;;;;;;AAEH,4CAAyB;AACzB,4CAAyB;AACzB,6CAA0B;AAC1B,0CAAuB;AACvB,yCAAsB;AACtB,6CAA0B;AAC1B,4CAAyB"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* SandboxApi — provider-declared Docker sandbox capability.
|
|
4
|
+
*
|
|
5
|
+
* Jack runs sessions in a Docker container ("sandbox mode") to isolate the
|
|
6
|
+
* provider's CLI from the host filesystem and network. The container itself
|
|
7
|
+
* is generic — Jack owns the Docker orchestration, security policy (CapDrop,
|
|
8
|
+
* memory cap, non-privileged), project mount, and user-defined shared
|
|
9
|
+
* volumes. The PROVIDER-SPECIFIC bits live here:
|
|
10
|
+
*
|
|
11
|
+
* - which image to pull (each provider needs its own CLI installed)
|
|
12
|
+
* - which binary name to invoke inside the container (used by the host to
|
|
13
|
+
* rewrite host-resolved absolute paths like
|
|
14
|
+
* `/Users/foo/.local/bin/claude` to a bare command the container's
|
|
15
|
+
* PATH resolves)
|
|
16
|
+
* - which config dir to mount (`~/.claude`, `~/.codex`, `~/.gemini`, …)
|
|
17
|
+
* - optional env extras
|
|
18
|
+
*
|
|
19
|
+
* A provider declaring `sandbox` opts itself into sandbox mode. The
|
|
20
|
+
* matching capability flag {@link CapabilityMatrix.sandbox} MUST be `true`
|
|
21
|
+
* — the host derives it from `provider.sandbox != null` at registration.
|
|
22
|
+
*
|
|
23
|
+
* Providers that don't declare `sandbox` (or set it to `undefined`) are
|
|
24
|
+
* treated as sandbox-incompatible: the host hides the toggle in the UI and
|
|
25
|
+
* blocks spawn-time requests with a clear error.
|
|
26
|
+
*
|
|
27
|
+
* The host's distribution model expects images at
|
|
28
|
+
* `ghcr.io/ottimis/jack-sandbox-<provider-id>:<X.Y.Z>` (monorepo
|
|
29
|
+
* `github.com/ottimis/JACK-sandbox`). Providers can point `defaultImage`
|
|
30
|
+
* elsewhere — third-party plugin authors who maintain their own image are
|
|
31
|
+
* free to host wherever they like.
|
|
32
|
+
*/
|
|
33
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
34
|
+
//# sourceMappingURL=sandbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../src/sandbox.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG"}
|
package/dist/index.d.ts
CHANGED
|
@@ -32,6 +32,7 @@ export * from './provider';
|
|
|
32
32
|
export * from './usage';
|
|
33
33
|
export * from './host';
|
|
34
34
|
export * from './profiles';
|
|
35
|
+
export * from './sandbox';
|
|
35
36
|
/**
|
|
36
37
|
* Re-export of `NormalizedMessage` from chat-core so consumers don't need
|
|
37
38
|
* to depend on it directly when their only entrypoint into the wire shape
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,QAAQ,CAAA;AACtB,cAAc,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,QAAQ,CAAA;AACtB,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AAEzB;;;;;GAKG;AACH,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,QAAQ,CAAA;AACtB,cAAc,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,QAAQ,CAAA;AACtB,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA"}
|
package/dist/provider.d.ts
CHANGED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
import type { AgentBackend, AgentPermissionMode, AgentQueryOptions, McpServerSpec } from './backend';
|
|
19
19
|
import type { HostServices } from './host';
|
|
20
20
|
import type { ProfilesApi } from './profiles';
|
|
21
|
+
import type { SandboxApi } from './sandbox';
|
|
21
22
|
import type { UsageApi } from './usage';
|
|
22
23
|
import type { ZodType } from 'zod';
|
|
23
24
|
import type { ClientToolHandler, NormalizedMessage, NormalizedToolRef, ProviderUserContentPolicy, ToolShape } from '@ottimis/jack-chat-core';
|
|
@@ -270,6 +271,17 @@ export type CapabilityMatrix = {
|
|
|
270
271
|
* config dir; the host hides every profile-related affordance.
|
|
271
272
|
*/
|
|
272
273
|
profiles: boolean;
|
|
274
|
+
/**
|
|
275
|
+
* Provider can run inside Jack's Docker sandbox. When `true`,
|
|
276
|
+
* {@link JackProvider.sandbox} MUST be defined; the host enables the
|
|
277
|
+
* sandbox toggle in the new-session dialog and renders an entry for this
|
|
278
|
+
* provider in `Settings → Sandbox`.
|
|
279
|
+
*
|
|
280
|
+
* When `false` (or omitted), sandbox mode is unavailable for this
|
|
281
|
+
* provider — the toggle is hidden / disabled in the UI, and a spawn-time
|
|
282
|
+
* sandbox request returns a clear error.
|
|
283
|
+
*/
|
|
284
|
+
sandbox: boolean;
|
|
273
285
|
/**
|
|
274
286
|
* Permission modes the provider actually supports. Drives the
|
|
275
287
|
* Shift-Tab cycle in the renderer (`MessageInputBar`) and any
|
|
@@ -288,6 +300,23 @@ export type CapabilityMatrix = {
|
|
|
288
300
|
* or settings); the catalog only governs UI affordances.
|
|
289
301
|
*/
|
|
290
302
|
permissionModes: readonly AgentPermissionMode[];
|
|
303
|
+
/**
|
|
304
|
+
* Suggested prompt-cache TTL in milliseconds — how long the provider's
|
|
305
|
+
* server-side prompt cache stays warm between user turns before a new
|
|
306
|
+
* cache-write is required. Optional: providers without prompt caching
|
|
307
|
+
* (or without a documented TTL) leave it undefined and the host hides
|
|
308
|
+
* the cache-countdown chip entirely for sessions on that provider.
|
|
309
|
+
*
|
|
310
|
+
* This is only the **suggested default**: the user can override per
|
|
311
|
+
* provider in `Settings → Prompt cache` and disable the chip outright.
|
|
312
|
+
* The host treats this as a UI-only countdown hint — never as a
|
|
313
|
+
* contract for actual cache eviction (the provider is the source of
|
|
314
|
+
* truth at request time).
|
|
315
|
+
*
|
|
316
|
+
* Claude declares 300_000 (5 min) per its prompt-caching docs. Codex
|
|
317
|
+
* and Gemini leave it undefined.
|
|
318
|
+
*/
|
|
319
|
+
cacheTtlMs?: number;
|
|
291
320
|
};
|
|
292
321
|
/**
|
|
293
322
|
* Re-exports of canonical wire-shape types from chat-core so consumers of
|
|
@@ -645,6 +674,14 @@ export type JackProvider = {
|
|
|
645
674
|
* Codex `CODEX_HOME`, …).
|
|
646
675
|
*/
|
|
647
676
|
profiles?: ProfilesApi;
|
|
677
|
+
/**
|
|
678
|
+
* Docker sandbox capability — provider declares the image, binary name,
|
|
679
|
+
* and config-dir mount the host needs to spawn a sandboxed session for
|
|
680
|
+
* this provider. See {@link SandboxApi}. Optional; when undefined
|
|
681
|
+
* `capabilities.sandbox` MUST be `false` and the host disables sandbox
|
|
682
|
+
* mode for this provider's sessions.
|
|
683
|
+
*/
|
|
684
|
+
sandbox?: SandboxApi;
|
|
648
685
|
/**
|
|
649
686
|
* Optional one-shot activation hook. Called once by the host during
|
|
650
687
|
* registration with a {@link HostServices} bag scoped to this
|
package/dist/provider.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AACpG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAClC,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,yBAAyB,EACzB,SAAS,EACV,MAAM,yBAAyB,CAAA;AAEhC,MAAM,MAAM,UAAU,GAAG,MAAM,CAAA;AAE/B;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;AAEvF;;;GAGG;AACH,KAAK,mBAAmB,GAAG;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,eAAe,GACvB,CAAC,mBAAmB,GAAG;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,CAAC,GAC5C,CAAC,mBAAmB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,GACzC,CAAC,mBAAmB,GAAG;IAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AAEzF;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,CAAA;AAED;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,yDAAyD;IACzD,QAAQ,EAAE,eAAe,EAAE,CAAA;IAC3B;;;;OAIG;IACH,YAAY,CAAC,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAAA;IAC/D;;;;;OAKG;IACH,aAAa,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAAA;IACxD;;;;;OAKG;IACH,eAAe,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;IACvC;;;;;OAKG;IACH,UAAU,CAAC,CAAC,GAAG,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;IAC1D;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,uBAAuB,CAAC,CACtB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,CAAC,QAAQ,EAAE,eAAe,EAAE,KAAK,IAAI,GAC9C,MAAM,IAAI,CAAA;CACd,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,4BAA4B,GAAG;IACzC,uGAAuG;IACvG,iBAAiB,EAAE,MAAM,CAAA;IACzB,kFAAkF;IAClF,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAChC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,CAAC,EAAE,yBAAyB,CAAA;CACxC,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,kEAAkE;IAClE,eAAe,EAAE,OAAO,CAAA;IACxB,yCAAyC;IACzC,KAAK,EAAE;QACL,UAAU,EAAE,OAAO,CAAA;QACnB,WAAW,EAAE,OAAO,CAAA;KACrB,CAAA;IACD,0DAA0D;IAC1D,QAAQ,EAAE,OAAO,CAAA;IACjB,4DAA4D;IAC5D,eAAe,EAAE,OAAO,CAAA;IACxB,2FAA2F;IAC3F,SAAS,EAAE,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAA;IACzC,mDAAmD;IACnD,GAAG,EAAE,OAAO,CAAA;IACZ,wEAAwE;IACxE,eAAe,EAAE,OAAO,CAAA;IACxB,+EAA+E;IAC/E,aAAa,EAAE,OAAO,CAAA;IACtB,8EAA8E;IAC9E,eAAe,EAAE,OAAO,CAAA;IACxB;;;;;;OAMG;IACH,gBAAgB,EAAE,OAAO,CAAA;IACzB,mDAAmD;IACnD,wBAAwB,EAAE,OAAO,CAAA;IACjC;;;;;;;;;;;;OAYG;IACH,qBAAqB,EAAE,UAAU,GAAG,cAAc,CAAA;IAClD;;;;;OAKG;IACH,KAAK,EAAE,OAAO,CAAA;IACd;;;;;;;;;OASG;IACH,QAAQ,EAAE,OAAO,CAAA;IACjB;;;;;;;;;;;;;;;;OAgBG;IACH,eAAe,EAAE,SAAS,mBAAmB,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SandboxApi — provider-declared Docker sandbox capability.
|
|
3
|
+
*
|
|
4
|
+
* Jack runs sessions in a Docker container ("sandbox mode") to isolate the
|
|
5
|
+
* provider's CLI from the host filesystem and network. The container itself
|
|
6
|
+
* is generic — Jack owns the Docker orchestration, security policy (CapDrop,
|
|
7
|
+
* memory cap, non-privileged), project mount, and user-defined shared
|
|
8
|
+
* volumes. The PROVIDER-SPECIFIC bits live here:
|
|
9
|
+
*
|
|
10
|
+
* - which image to pull (each provider needs its own CLI installed)
|
|
11
|
+
* - which binary name to invoke inside the container (used by the host to
|
|
12
|
+
* rewrite host-resolved absolute paths like
|
|
13
|
+
* `/Users/foo/.local/bin/claude` to a bare command the container's
|
|
14
|
+
* PATH resolves)
|
|
15
|
+
* - which config dir to mount (`~/.claude`, `~/.codex`, `~/.gemini`, …)
|
|
16
|
+
* - optional env extras
|
|
17
|
+
*
|
|
18
|
+
* A provider declaring `sandbox` opts itself into sandbox mode. The
|
|
19
|
+
* matching capability flag {@link CapabilityMatrix.sandbox} MUST be `true`
|
|
20
|
+
* — the host derives it from `provider.sandbox != null` at registration.
|
|
21
|
+
*
|
|
22
|
+
* Providers that don't declare `sandbox` (or set it to `undefined`) are
|
|
23
|
+
* treated as sandbox-incompatible: the host hides the toggle in the UI and
|
|
24
|
+
* blocks spawn-time requests with a clear error.
|
|
25
|
+
*
|
|
26
|
+
* The host's distribution model expects images at
|
|
27
|
+
* `ghcr.io/ottimis/jack-sandbox-<provider-id>:<X.Y.Z>` (monorepo
|
|
28
|
+
* `github.com/ottimis/JACK-sandbox`). Providers can point `defaultImage`
|
|
29
|
+
* elsewhere — third-party plugin authors who maintain their own image are
|
|
30
|
+
* free to host wherever they like.
|
|
31
|
+
*/
|
|
32
|
+
/**
|
|
33
|
+
* Mount the provider's host-side config directory into the container.
|
|
34
|
+
* Most providers persist auth + sessions + per-user settings in a dotfile
|
|
35
|
+
* dir under `$HOME` (Claude `~/.claude`, Codex `~/.codex`, Gemini
|
|
36
|
+
* `~/.gemini`). The host mounts this dir into the container at
|
|
37
|
+
* {@link containerPath} so the CLI inside the container has access to the
|
|
38
|
+
* same auth state as the host.
|
|
39
|
+
*
|
|
40
|
+
* Read-only by default — the container shouldn't be writing back to the
|
|
41
|
+
* user's persistent config from inside the sandbox. Set `readOnly: false`
|
|
42
|
+
* only when the provider's CLI genuinely needs to mutate state inside the
|
|
43
|
+
* config dir (e.g. session JSONL append).
|
|
44
|
+
*/
|
|
45
|
+
export type SandboxConfigMount = {
|
|
46
|
+
/**
|
|
47
|
+
* Absolute host path. Provider implementations resolve this lazily — call
|
|
48
|
+
* `os.homedir()` + `path.join(...)` at the time `configMount` is read,
|
|
49
|
+
* not at module-load time, so test environments and per-process HOME
|
|
50
|
+
* overrides work correctly.
|
|
51
|
+
*/
|
|
52
|
+
hostPath: string;
|
|
53
|
+
/** Absolute container path. */
|
|
54
|
+
containerPath: string;
|
|
55
|
+
/** When `true`, the host adds `:ro` to the bind. Default: `true` recommended. */
|
|
56
|
+
readOnly: boolean;
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Provider-declared Docker sandbox capability. Optional on
|
|
60
|
+
* {@link JackProvider}; when present the matching
|
|
61
|
+
* {@link CapabilityMatrix.sandbox} flag MUST be `true`.
|
|
62
|
+
*/
|
|
63
|
+
export interface SandboxApi {
|
|
64
|
+
/**
|
|
65
|
+
* Default image reference, pinned per provider release. Format:
|
|
66
|
+
* `<registry>/<repo>:<tag>`. Users can override per-provider via the host
|
|
67
|
+
* setting `sandbox.image.<providerId>`.
|
|
68
|
+
*
|
|
69
|
+
* For Jack's first-party providers the recommended location is
|
|
70
|
+
* `ghcr.io/ottimis/jack-sandbox-<providerId>:<X.Y.Z>` (monorepo built
|
|
71
|
+
* from `github.com/ottimis/JACK-sandbox`). Third-party plugins are free
|
|
72
|
+
* to host elsewhere.
|
|
73
|
+
*/
|
|
74
|
+
readonly defaultImage: string;
|
|
75
|
+
/**
|
|
76
|
+
* CLI binary name as it should be invoked inside the container (e.g.
|
|
77
|
+
* `'claude'`, `'codex'`, `'gemini'`). Used by the host's spawner to
|
|
78
|
+
* rewrite host-resolved absolute binary paths to a bare command the
|
|
79
|
+
* container's PATH resolves.
|
|
80
|
+
*
|
|
81
|
+
* The image MUST install this binary at a location reachable from
|
|
82
|
+
* `$PATH` (typically `/usr/local/bin/<binaryName>` via `npm install -g`).
|
|
83
|
+
*/
|
|
84
|
+
readonly binaryName: string;
|
|
85
|
+
/**
|
|
86
|
+
* Mount the provider's host-side config directory into the container.
|
|
87
|
+
* Optional — providers that are stateless on the host (none today)
|
|
88
|
+
* leave this undefined.
|
|
89
|
+
*/
|
|
90
|
+
readonly configMount?: SandboxConfigMount;
|
|
91
|
+
/**
|
|
92
|
+
* Optional environment extras to inject into the container. Layered AFTER
|
|
93
|
+
* the spawn-arg env so provider-specific overrides can win, but BEFORE
|
|
94
|
+
* the user can override (the user-facing override is per-provider via
|
|
95
|
+
* the host setting, not per-env-var).
|
|
96
|
+
*
|
|
97
|
+
* Most provider env is already on `SpawnArgs.env` from the backend's
|
|
98
|
+
* spawn pipeline. Use this only when the SDK contract doesn't expose a
|
|
99
|
+
* cleaner channel — e.g. forcing a CLI to disable telemetry inside the
|
|
100
|
+
* sandbox even when the user has it on globally.
|
|
101
|
+
*/
|
|
102
|
+
envExtras?(): Record<string, string>;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=sandbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../src/sandbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;;;;OAKG;IACH,QAAQ,EAAE,MAAM,CAAA;IAChB,+BAA+B;IAC/B,aAAa,EAAE,MAAM,CAAA;IACrB,iFAAiF;IACjF,QAAQ,EAAE,OAAO,CAAA;CAClB,CAAA;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB;;;;;;;;;OASG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAE7B;;;;;;;;OAQG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAE3B;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAA;IAEzC;;;;;;;;;;OAUG;IACH,SAAS,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACrC"}
|
package/dist/sandbox.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SandboxApi — provider-declared Docker sandbox capability.
|
|
3
|
+
*
|
|
4
|
+
* Jack runs sessions in a Docker container ("sandbox mode") to isolate the
|
|
5
|
+
* provider's CLI from the host filesystem and network. The container itself
|
|
6
|
+
* is generic — Jack owns the Docker orchestration, security policy (CapDrop,
|
|
7
|
+
* memory cap, non-privileged), project mount, and user-defined shared
|
|
8
|
+
* volumes. The PROVIDER-SPECIFIC bits live here:
|
|
9
|
+
*
|
|
10
|
+
* - which image to pull (each provider needs its own CLI installed)
|
|
11
|
+
* - which binary name to invoke inside the container (used by the host to
|
|
12
|
+
* rewrite host-resolved absolute paths like
|
|
13
|
+
* `/Users/foo/.local/bin/claude` to a bare command the container's
|
|
14
|
+
* PATH resolves)
|
|
15
|
+
* - which config dir to mount (`~/.claude`, `~/.codex`, `~/.gemini`, …)
|
|
16
|
+
* - optional env extras
|
|
17
|
+
*
|
|
18
|
+
* A provider declaring `sandbox` opts itself into sandbox mode. The
|
|
19
|
+
* matching capability flag {@link CapabilityMatrix.sandbox} MUST be `true`
|
|
20
|
+
* — the host derives it from `provider.sandbox != null` at registration.
|
|
21
|
+
*
|
|
22
|
+
* Providers that don't declare `sandbox` (or set it to `undefined`) are
|
|
23
|
+
* treated as sandbox-incompatible: the host hides the toggle in the UI and
|
|
24
|
+
* blocks spawn-time requests with a clear error.
|
|
25
|
+
*
|
|
26
|
+
* The host's distribution model expects images at
|
|
27
|
+
* `ghcr.io/ottimis/jack-sandbox-<provider-id>:<X.Y.Z>` (monorepo
|
|
28
|
+
* `github.com/ottimis/JACK-sandbox`). Providers can point `defaultImage`
|
|
29
|
+
* elsewhere — third-party plugin authors who maintain their own image are
|
|
30
|
+
* free to host wherever they like.
|
|
31
|
+
*/
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=sandbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../src/sandbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ottimis/jack-provider-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "Plugin contract for AI provider integrations in Jack — backend interface, capability matrix, spawner primitives, knowledge context. Consumed both by in-tree providers and external packages.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
package/src/index.ts
CHANGED
package/src/provider.ts
CHANGED
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
import type { AgentBackend, AgentPermissionMode, AgentQueryOptions, McpServerSpec } from './backend'
|
|
20
20
|
import type { HostServices } from './host'
|
|
21
21
|
import type { ProfilesApi } from './profiles'
|
|
22
|
+
import type { SandboxApi } from './sandbox'
|
|
22
23
|
import type { UsageApi } from './usage'
|
|
23
24
|
import type { ZodType } from 'zod'
|
|
24
25
|
import type {
|
|
@@ -286,6 +287,17 @@ export type CapabilityMatrix = {
|
|
|
286
287
|
* config dir; the host hides every profile-related affordance.
|
|
287
288
|
*/
|
|
288
289
|
profiles: boolean
|
|
290
|
+
/**
|
|
291
|
+
* Provider can run inside Jack's Docker sandbox. When `true`,
|
|
292
|
+
* {@link JackProvider.sandbox} MUST be defined; the host enables the
|
|
293
|
+
* sandbox toggle in the new-session dialog and renders an entry for this
|
|
294
|
+
* provider in `Settings → Sandbox`.
|
|
295
|
+
*
|
|
296
|
+
* When `false` (or omitted), sandbox mode is unavailable for this
|
|
297
|
+
* provider — the toggle is hidden / disabled in the UI, and a spawn-time
|
|
298
|
+
* sandbox request returns a clear error.
|
|
299
|
+
*/
|
|
300
|
+
sandbox: boolean
|
|
289
301
|
/**
|
|
290
302
|
* Permission modes the provider actually supports. Drives the
|
|
291
303
|
* Shift-Tab cycle in the renderer (`MessageInputBar`) and any
|
|
@@ -304,6 +316,23 @@ export type CapabilityMatrix = {
|
|
|
304
316
|
* or settings); the catalog only governs UI affordances.
|
|
305
317
|
*/
|
|
306
318
|
permissionModes: readonly AgentPermissionMode[]
|
|
319
|
+
/**
|
|
320
|
+
* Suggested prompt-cache TTL in milliseconds — how long the provider's
|
|
321
|
+
* server-side prompt cache stays warm between user turns before a new
|
|
322
|
+
* cache-write is required. Optional: providers without prompt caching
|
|
323
|
+
* (or without a documented TTL) leave it undefined and the host hides
|
|
324
|
+
* the cache-countdown chip entirely for sessions on that provider.
|
|
325
|
+
*
|
|
326
|
+
* This is only the **suggested default**: the user can override per
|
|
327
|
+
* provider in `Settings → Prompt cache` and disable the chip outright.
|
|
328
|
+
* The host treats this as a UI-only countdown hint — never as a
|
|
329
|
+
* contract for actual cache eviction (the provider is the source of
|
|
330
|
+
* truth at request time).
|
|
331
|
+
*
|
|
332
|
+
* Claude declares 300_000 (5 min) per its prompt-caching docs. Codex
|
|
333
|
+
* and Gemini leave it undefined.
|
|
334
|
+
*/
|
|
335
|
+
cacheTtlMs?: number
|
|
307
336
|
}
|
|
308
337
|
|
|
309
338
|
/**
|
|
@@ -699,6 +728,14 @@ export type JackProvider = {
|
|
|
699
728
|
* Codex `CODEX_HOME`, …).
|
|
700
729
|
*/
|
|
701
730
|
profiles?: ProfilesApi
|
|
731
|
+
/**
|
|
732
|
+
* Docker sandbox capability — provider declares the image, binary name,
|
|
733
|
+
* and config-dir mount the host needs to spawn a sandboxed session for
|
|
734
|
+
* this provider. See {@link SandboxApi}. Optional; when undefined
|
|
735
|
+
* `capabilities.sandbox` MUST be `false` and the host disables sandbox
|
|
736
|
+
* mode for this provider's sessions.
|
|
737
|
+
*/
|
|
738
|
+
sandbox?: SandboxApi
|
|
702
739
|
/**
|
|
703
740
|
* Optional one-shot activation hook. Called once by the host during
|
|
704
741
|
* registration with a {@link HostServices} bag scoped to this
|
package/src/sandbox.ts
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SandboxApi — provider-declared Docker sandbox capability.
|
|
3
|
+
*
|
|
4
|
+
* Jack runs sessions in a Docker container ("sandbox mode") to isolate the
|
|
5
|
+
* provider's CLI from the host filesystem and network. The container itself
|
|
6
|
+
* is generic — Jack owns the Docker orchestration, security policy (CapDrop,
|
|
7
|
+
* memory cap, non-privileged), project mount, and user-defined shared
|
|
8
|
+
* volumes. The PROVIDER-SPECIFIC bits live here:
|
|
9
|
+
*
|
|
10
|
+
* - which image to pull (each provider needs its own CLI installed)
|
|
11
|
+
* - which binary name to invoke inside the container (used by the host to
|
|
12
|
+
* rewrite host-resolved absolute paths like
|
|
13
|
+
* `/Users/foo/.local/bin/claude` to a bare command the container's
|
|
14
|
+
* PATH resolves)
|
|
15
|
+
* - which config dir to mount (`~/.claude`, `~/.codex`, `~/.gemini`, …)
|
|
16
|
+
* - optional env extras
|
|
17
|
+
*
|
|
18
|
+
* A provider declaring `sandbox` opts itself into sandbox mode. The
|
|
19
|
+
* matching capability flag {@link CapabilityMatrix.sandbox} MUST be `true`
|
|
20
|
+
* — the host derives it from `provider.sandbox != null` at registration.
|
|
21
|
+
*
|
|
22
|
+
* Providers that don't declare `sandbox` (or set it to `undefined`) are
|
|
23
|
+
* treated as sandbox-incompatible: the host hides the toggle in the UI and
|
|
24
|
+
* blocks spawn-time requests with a clear error.
|
|
25
|
+
*
|
|
26
|
+
* The host's distribution model expects images at
|
|
27
|
+
* `ghcr.io/ottimis/jack-sandbox-<provider-id>:<X.Y.Z>` (monorepo
|
|
28
|
+
* `github.com/ottimis/JACK-sandbox`). Providers can point `defaultImage`
|
|
29
|
+
* elsewhere — third-party plugin authors who maintain their own image are
|
|
30
|
+
* free to host wherever they like.
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Mount the provider's host-side config directory into the container.
|
|
35
|
+
* Most providers persist auth + sessions + per-user settings in a dotfile
|
|
36
|
+
* dir under `$HOME` (Claude `~/.claude`, Codex `~/.codex`, Gemini
|
|
37
|
+
* `~/.gemini`). The host mounts this dir into the container at
|
|
38
|
+
* {@link containerPath} so the CLI inside the container has access to the
|
|
39
|
+
* same auth state as the host.
|
|
40
|
+
*
|
|
41
|
+
* Read-only by default — the container shouldn't be writing back to the
|
|
42
|
+
* user's persistent config from inside the sandbox. Set `readOnly: false`
|
|
43
|
+
* only when the provider's CLI genuinely needs to mutate state inside the
|
|
44
|
+
* config dir (e.g. session JSONL append).
|
|
45
|
+
*/
|
|
46
|
+
export type SandboxConfigMount = {
|
|
47
|
+
/**
|
|
48
|
+
* Absolute host path. Provider implementations resolve this lazily — call
|
|
49
|
+
* `os.homedir()` + `path.join(...)` at the time `configMount` is read,
|
|
50
|
+
* not at module-load time, so test environments and per-process HOME
|
|
51
|
+
* overrides work correctly.
|
|
52
|
+
*/
|
|
53
|
+
hostPath: string
|
|
54
|
+
/** Absolute container path. */
|
|
55
|
+
containerPath: string
|
|
56
|
+
/** When `true`, the host adds `:ro` to the bind. Default: `true` recommended. */
|
|
57
|
+
readOnly: boolean
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Provider-declared Docker sandbox capability. Optional on
|
|
62
|
+
* {@link JackProvider}; when present the matching
|
|
63
|
+
* {@link CapabilityMatrix.sandbox} flag MUST be `true`.
|
|
64
|
+
*/
|
|
65
|
+
export interface SandboxApi {
|
|
66
|
+
/**
|
|
67
|
+
* Default image reference, pinned per provider release. Format:
|
|
68
|
+
* `<registry>/<repo>:<tag>`. Users can override per-provider via the host
|
|
69
|
+
* setting `sandbox.image.<providerId>`.
|
|
70
|
+
*
|
|
71
|
+
* For Jack's first-party providers the recommended location is
|
|
72
|
+
* `ghcr.io/ottimis/jack-sandbox-<providerId>:<X.Y.Z>` (monorepo built
|
|
73
|
+
* from `github.com/ottimis/JACK-sandbox`). Third-party plugins are free
|
|
74
|
+
* to host elsewhere.
|
|
75
|
+
*/
|
|
76
|
+
readonly defaultImage: string
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* CLI binary name as it should be invoked inside the container (e.g.
|
|
80
|
+
* `'claude'`, `'codex'`, `'gemini'`). Used by the host's spawner to
|
|
81
|
+
* rewrite host-resolved absolute binary paths to a bare command the
|
|
82
|
+
* container's PATH resolves.
|
|
83
|
+
*
|
|
84
|
+
* The image MUST install this binary at a location reachable from
|
|
85
|
+
* `$PATH` (typically `/usr/local/bin/<binaryName>` via `npm install -g`).
|
|
86
|
+
*/
|
|
87
|
+
readonly binaryName: string
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Mount the provider's host-side config directory into the container.
|
|
91
|
+
* Optional — providers that are stateless on the host (none today)
|
|
92
|
+
* leave this undefined.
|
|
93
|
+
*/
|
|
94
|
+
readonly configMount?: SandboxConfigMount
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Optional environment extras to inject into the container. Layered AFTER
|
|
98
|
+
* the spawn-arg env so provider-specific overrides can win, but BEFORE
|
|
99
|
+
* the user can override (the user-facing override is per-provider via
|
|
100
|
+
* the host setting, not per-env-var).
|
|
101
|
+
*
|
|
102
|
+
* Most provider env is already on `SpawnArgs.env` from the backend's
|
|
103
|
+
* spawn pipeline. Use this only when the SDK contract doesn't expose a
|
|
104
|
+
* cleaner channel — e.g. forcing a CLI to disable telemetry inside the
|
|
105
|
+
* sandbox even when the user has it on globally.
|
|
106
|
+
*/
|
|
107
|
+
envExtras?(): Record<string, string>
|
|
108
|
+
}
|