@shield-agent/kya 0.1.18 → 0.1.20

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.
Files changed (67) hide show
  1. package/.mcp.json +1 -1
  2. package/LIMITATIONS.md +1 -0
  3. package/README.md +15 -3
  4. package/claude/claude_desktop_config.example.json +1 -1
  5. package/dist/cli.d.ts.map +1 -1
  6. package/dist/cli.js +6 -0
  7. package/dist/cli.js.map +1 -1
  8. package/dist/client.d.ts +2 -0
  9. package/dist/client.d.ts.map +1 -1
  10. package/dist/client.js +1 -0
  11. package/dist/client.js.map +1 -1
  12. package/dist/commands/eval-tool.d.ts +2 -0
  13. package/dist/commands/eval-tool.d.ts.map +1 -1
  14. package/dist/commands/eval-tool.js +12 -2
  15. package/dist/commands/eval-tool.js.map +1 -1
  16. package/dist/commands/orr.d.ts +3 -0
  17. package/dist/commands/orr.d.ts.map +1 -1
  18. package/dist/commands/orr.js +23 -51
  19. package/dist/commands/orr.js.map +1 -1
  20. package/dist/commands/sandbox.d.ts +3 -0
  21. package/dist/commands/sandbox.d.ts.map +1 -0
  22. package/dist/commands/sandbox.js +82 -0
  23. package/dist/commands/sandbox.js.map +1 -0
  24. package/dist/commands/wrap.d.ts +1 -0
  25. package/dist/commands/wrap.d.ts.map +1 -1
  26. package/dist/offline-evaluate.d.ts.map +1 -1
  27. package/dist/offline-evaluate.js +15 -0
  28. package/dist/offline-evaluate.js.map +1 -1
  29. package/dist/orr/scorecard.d.ts +30 -0
  30. package/dist/orr/scorecard.d.ts.map +1 -0
  31. package/dist/orr/scorecard.js +107 -0
  32. package/dist/orr/scorecard.js.map +1 -0
  33. package/dist/sample-tools.d.ts +2 -0
  34. package/dist/sample-tools.d.ts.map +1 -1
  35. package/dist/sample-tools.js +38 -0
  36. package/dist/sample-tools.js.map +1 -1
  37. package/dist/sandbox/firecracker-driver.d.ts +7 -0
  38. package/dist/sandbox/firecracker-driver.d.ts.map +1 -0
  39. package/dist/sandbox/firecracker-driver.js +99 -0
  40. package/dist/sandbox/firecracker-driver.js.map +1 -0
  41. package/dist/sandbox/id.d.ts +4 -0
  42. package/dist/sandbox/id.d.ts.map +1 -0
  43. package/dist/sandbox/id.js +11 -0
  44. package/dist/sandbox/id.js.map +1 -0
  45. package/dist/sandbox/mock-driver.d.ts +6 -0
  46. package/dist/sandbox/mock-driver.d.ts.map +1 -0
  47. package/dist/sandbox/mock-driver.js +25 -0
  48. package/dist/sandbox/mock-driver.js.map +1 -0
  49. package/dist/sandbox/path-jail.d.ts +4 -0
  50. package/dist/sandbox/path-jail.d.ts.map +1 -0
  51. package/dist/sandbox/path-jail.js +22 -0
  52. package/dist/sandbox/path-jail.js.map +1 -0
  53. package/dist/sandbox/runtime.d.ts +18 -0
  54. package/dist/sandbox/runtime.d.ts.map +1 -0
  55. package/dist/sandbox/runtime.js +71 -0
  56. package/dist/sandbox/runtime.js.map +1 -0
  57. package/dist/sandbox/types.d.ts +26 -0
  58. package/dist/sandbox/types.d.ts.map +1 -0
  59. package/dist/sandbox/types.js +2 -0
  60. package/dist/sandbox/types.js.map +1 -0
  61. package/gemini/settings.example.json +1 -1
  62. package/grok/README.md +1 -1
  63. package/manifest.json +1 -1
  64. package/mcp.json +1 -1
  65. package/openai/codex.config.example.toml +1 -1
  66. package/package.json +1 -1
  67. package/server.json +2 -2
@@ -0,0 +1,71 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { mkdirSync, readFileSync, writeFileSync, existsSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import { UsageError } from "../errors.js";
5
+ import { createFirecrackerDriver } from "./firecracker-driver.js";
6
+ import { createMockDriver } from "./mock-driver.js";
7
+ import { assertSandboxId } from "./id.js";
8
+ import { assertInsideRoot, jailRoot } from "./path-jail.js";
9
+ export function resolveSandboxDriver(backend) {
10
+ const b = (backend ?? process.env.KYA_SANDBOX ?? "").trim().toLowerCase();
11
+ if (!b) {
12
+ throw new UsageError("sandbox is opt-in: set KYA_SANDBOX=firecracker or KYA_SANDBOX=mock");
13
+ }
14
+ if (b === "mock")
15
+ return createMockDriver();
16
+ if (b === "firecracker")
17
+ return createFirecrackerDriver();
18
+ throw new UsageError(`unknown sandbox backend: ${b}`);
19
+ }
20
+ export function sandboxStatePath(root) {
21
+ return join(root, ".kya", "sandboxes.json");
22
+ }
23
+ export function loadSandboxState(root) {
24
+ const jailed = jailRoot(root);
25
+ const path = sandboxStatePath(jailed);
26
+ assertInsideRoot(path, jailed, "sandbox state");
27
+ if (!existsSync(path))
28
+ return [];
29
+ try {
30
+ const raw = JSON.parse(readFileSync(path, "utf8"));
31
+ return Array.isArray(raw) ? raw : [];
32
+ }
33
+ catch {
34
+ return [];
35
+ }
36
+ }
37
+ export function saveSandboxState(root, rows) {
38
+ const jailed = jailRoot(root);
39
+ const dir = join(jailed, ".kya");
40
+ mkdirSync(dir, { recursive: true });
41
+ const path = sandboxStatePath(jailed);
42
+ assertInsideRoot(path, jailed, "sandbox state");
43
+ writeFileSync(path, JSON.stringify(rows, null, 2) + "\n");
44
+ }
45
+ export async function spawnSandbox(input) {
46
+ const sandboxId = `sbx-${randomUUID()}`;
47
+ assertSandboxId(sandboxId);
48
+ await input.driver.spawn({
49
+ sandboxId,
50
+ kernelPath: input.kernelPath ?? process.env.KYA_SANDBOX_KERNEL ?? "",
51
+ rootfsPath: input.rootfsPath ?? process.env.KYA_SANDBOX_ROOTFS ?? "",
52
+ });
53
+ const row = {
54
+ sandboxId,
55
+ backend: input.driver.backend,
56
+ createdAt: new Date().toISOString(),
57
+ status: "running",
58
+ agentId: input.agentId,
59
+ };
60
+ const rows = loadSandboxState(input.root).filter((r) => r.status === "running");
61
+ rows.push(row);
62
+ saveSandboxState(input.root, rows);
63
+ return row;
64
+ }
65
+ export async function killSandbox(input) {
66
+ const id = assertSandboxId(input.sandboxId);
67
+ await input.driver.kill(id);
68
+ const rows = loadSandboxState(input.root).map((r) => r.sandboxId === id ? { ...r, status: "killed" } : r);
69
+ saveSandboxState(input.root, rows);
70
+ }
71
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/sandbox/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG5D,MAAM,UAAU,oBAAoB,CAClC,OAA2B;IAE3B,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC1E,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,IAAI,UAAU,CAClB,oEAAoE,CACrE,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,KAAK,MAAM;QAAE,OAAO,gBAAgB,EAAE,CAAC;IAC5C,IAAI,CAAC,KAAK,aAAa;QAAE,OAAO,uBAAuB,EAAE,CAAC;IAC1D,MAAM,IAAI,UAAU,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACtC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;IAChD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAoB,CAAC;QACtE,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,IAAqB;IAClE,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACtC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;IAChD,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAMlC;IACC,MAAM,SAAS,GAAG,OAAO,UAAU,EAAE,EAAE,CAAC;IACxC,eAAe,CAAC,SAAS,CAAC,CAAC;IAC3B,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;QACvB,SAAS;QACT,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE;QACpE,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE;KACrE,CAAC,CAAC;IACH,MAAM,GAAG,GAAkB;QACzB,SAAS;QACT,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;QAC7B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC;IACF,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IAChF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACf,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACnC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAIjC;IACC,MAAM,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC5C,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5B,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAClD,CAAC,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,QAAiB,EAAE,CAAC,CAAC,CAAC,CAAC,CAC7D,CAAC;IACF,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC"}
@@ -0,0 +1,26 @@
1
+ export type SandboxBackend = "firecracker";
2
+ export interface SandboxRecord {
3
+ readonly sandboxId: string;
4
+ readonly backend: SandboxBackend;
5
+ readonly createdAt: string;
6
+ readonly status: "running" | "killed";
7
+ readonly agentId?: string;
8
+ }
9
+ export interface SandboxDriver {
10
+ readonly backend: SandboxBackend;
11
+ spawn(input: {
12
+ sandboxId: string;
13
+ kernelPath: string;
14
+ rootfsPath: string;
15
+ }): Promise<void>;
16
+ exec(input: {
17
+ sandboxId: string;
18
+ command: string[];
19
+ }): Promise<{
20
+ exitCode: number;
21
+ stdout: string;
22
+ stderr: string;
23
+ }>;
24
+ kill(sandboxId: string): Promise<void>;
25
+ }
26
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sandbox/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,aAAa,CAAC;AAE3C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAC;IACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,KAAK,CAAC,KAAK,EAAE;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClB,IAAI,CAAC,KAAK,EAAE;QACV,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClE,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sandbox/types.ts"],"names":[],"mappings":""}
@@ -2,7 +2,7 @@
2
2
  "mcpServers": {
3
3
  "shield-kya": {
4
4
  "command": "npx",
5
- "args": ["--no-install", "@shield-agent/kya@0.1.18", "serve-mcp", "--stdio"],
5
+ "args": ["--no-install", "@shield-agent/kya@0.1.20", "serve-mcp", "--stdio"],
6
6
  "env": {
7
7
  "KYA_BASE_URL": "https://shield-agent.com",
8
8
  "KYA_API_KEY": "${KYA_API_KEY}",
package/grok/README.md CHANGED
@@ -40,7 +40,7 @@ chat = client.chat.create(
40
40
  There is no grok.com stdio path. For a local agent host use the same stdio launch as Claude:
41
41
 
42
42
  ```bash
43
- npx --no-install @shield-agent/kya@0.1.18 serve-mcp --stdio
43
+ npx --no-install @shield-agent/kya@0.1.20 serve-mcp --stdio
44
44
  ```
45
45
 
46
46
  Env: `KYA_BASE_URL`, `KYA_API_KEY`, `KYA_HOST`. Codex and Gemini example configs in this package show the full snippets.
package/manifest.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "manifest_version": "0.3",
3
3
  "name": "shield-kya",
4
4
  "display_name": "Shield KYA",
5
- "version": "0.1.18",
5
+ "version": "0.1.20",
6
6
  "description": "Know Your Agent MCP gate: ALLOW / DENY / REQUIRE_APPROVE. Sole PEP is Shield.",
7
7
  "long_description": "Local Claude Desktop extension that runs the packaged `dist/cli.js serve-mcp --stdio` against your Shield control plane (local or https://shield-agent.com). Tools evaluate policy, ingest session risk, and open Hold tickets. They never execute irreversible side effects.",
8
8
  "author": {
package/mcp.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "shield-kya": {
4
4
  "description": "Know Your Agent local MCP gate: wrap-before-write, named-agent registry, Hold/Clear.",
5
5
  "command": "npx",
6
- "args": ["--no-install", "@shield-agent/kya@0.1.18", "serve-mcp", "--stdio"],
6
+ "args": ["--no-install", "@shield-agent/kya@0.1.20", "serve-mcp", "--stdio"],
7
7
  "env": {
8
8
  "KYA_BASE_URL": "${KYA_BASE_URL}",
9
9
  "KYA_API_KEY": "${KYA_API_KEY}",
@@ -11,7 +11,7 @@
11
11
  # --- Local stdio (OSS) ---
12
12
  [mcp_servers.shield-kya]
13
13
  command = "npx"
14
- args = ["--no-install", "@shield-agent/kya@0.1.18", "serve-mcp", "--stdio"]
14
+ args = ["--no-install", "@shield-agent/kya@0.1.20", "serve-mcp", "--stdio"]
15
15
  startup_timeout_sec = 20
16
16
  env_vars = ["KYA_BASE_URL", "KYA_API_KEY", "KYA_HOST", "KYA_AGENT_ID"]
17
17
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shield-agent/kya",
3
- "version": "0.1.18",
3
+ "version": "0.1.20",
4
4
  "description": "Know Your Agent light CLI + local MCP gate (provider-agnostic, zero vertical packs required).",
5
5
  "license": "MIT",
6
6
  "type": "module",
package/server.json CHANGED
@@ -7,12 +7,12 @@
7
7
  "url": "https://github.com/The-Pixel-Boys/shield-kya",
8
8
  "source": "github"
9
9
  },
10
- "version": "0.1.18",
10
+ "version": "0.1.20",
11
11
  "packages": [
12
12
  {
13
13
  "registryType": "npm",
14
14
  "identifier": "@shield-agent/kya",
15
- "version": "0.1.18",
15
+ "version": "0.1.20",
16
16
  "transport": {
17
17
  "type": "stdio"
18
18
  },