@shield-agent/kya 0.1.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/LICENSE +21 -0
- package/README.md +108 -0
- package/dist/cli.d.ts +15 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +207 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +111 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +143 -0
- package/dist/client.js.map +1 -0
- package/dist/commands/eval-tool.d.ts +27 -0
- package/dist/commands/eval-tool.d.ts.map +1 -0
- package/dist/commands/eval-tool.js +87 -0
- package/dist/commands/eval-tool.js.map +1 -0
- package/dist/commands/init.d.ts +19 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +69 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/orr.d.ts +81 -0
- package/dist/commands/orr.d.ts.map +1 -0
- package/dist/commands/orr.js +468 -0
- package/dist/commands/orr.js.map +1 -0
- package/dist/commands/register-agent.d.ts +17 -0
- package/dist/commands/register-agent.d.ts.map +1 -0
- package/dist/commands/register-agent.js +39 -0
- package/dist/commands/register-agent.js.map +1 -0
- package/dist/commands/serve-mcp.d.ts +19 -0
- package/dist/commands/serve-mcp.d.ts.map +1 -0
- package/dist/commands/serve-mcp.js +40 -0
- package/dist/commands/serve-mcp.js.map +1 -0
- package/dist/config.d.ts +45 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +105 -0
- package/dist/config.js.map +1 -0
- package/dist/errors.d.ts +18 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +34 -0
- package/dist/errors.js.map +1 -0
- package/dist/hash.d.ts +5 -0
- package/dist/hash.d.ts.map +1 -0
- package/dist/hash.js +25 -0
- package/dist/hash.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/http.d.ts +26 -0
- package/dist/mcp/http.d.ts.map +1 -0
- package/dist/mcp/http.js +118 -0
- package/dist/mcp/http.js.map +1 -0
- package/dist/mcp/protocol.d.ts +53 -0
- package/dist/mcp/protocol.d.ts.map +1 -0
- package/dist/mcp/protocol.js +282 -0
- package/dist/mcp/protocol.js.map +1 -0
- package/dist/mcp/stdio.d.ts +22 -0
- package/dist/mcp/stdio.d.ts.map +1 -0
- package/dist/mcp/stdio.js +67 -0
- package/dist/mcp/stdio.js.map +1 -0
- package/dist/offline-evaluate.d.ts +23 -0
- package/dist/offline-evaluate.d.ts.map +1 -0
- package/dist/offline-evaluate.js +68 -0
- package/dist/offline-evaluate.js.map +1 -0
- package/dist/parse-args.d.ts +14 -0
- package/dist/parse-args.d.ts.map +1 -0
- package/dist/parse-args.js +86 -0
- package/dist/parse-args.js.map +1 -0
- package/dist/sample-tools.d.ts +19 -0
- package/dist/sample-tools.d.ts.map +1 -0
- package/dist/sample-tools.js +37 -0
- package/dist/sample-tools.js.map +1 -0
- package/package.json +65 -0
- package/server.json +59 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 The Pixel Boys / Shield Agent
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# `@shield-agent/kya`
|
|
2
|
+
|
|
3
|
+
Light install CLI and local MCP gate for **Know Your Agent** (Shield KYA).
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
npx @shield-agent/kya@latest --help
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
- **Provider-agnostic** — no core lock to a single collab host, cloud, or LLM.
|
|
10
|
+
- **Zero vertical packs required** (R8) — disputes is optional.
|
|
11
|
+
- **Sole PEP** — Shield evaluates; this gate never auto-approves irreversible side effects.
|
|
12
|
+
- **Fail-closed** — empty `KYA_API_KEY` against an authenticated plane → non-zero exit.
|
|
13
|
+
- **Offline demo** — `--offline` sample evaluate (DENY → REQUIRE_APPROVE) without paid cloud.
|
|
14
|
+
|
|
15
|
+
## 15-minute path
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
# Offline demo (no account, no monorepo)
|
|
19
|
+
npx @shield-agent/kya eval-tool --offline --tool-id org.sample.never.event --irreversible
|
|
20
|
+
# → verdict: DENY
|
|
21
|
+
npx @shield-agent/kya eval-tool --offline --tool-id org.sample.data.write --irreversible
|
|
22
|
+
# → verdict: REQUIRE_APPROVE
|
|
23
|
+
|
|
24
|
+
# Scaffold + local plane
|
|
25
|
+
npx @shield-agent/kya init
|
|
26
|
+
npx @shield-agent/kya register-agent --name solo-builder --version-hash dev-local
|
|
27
|
+
npx @shield-agent/kya eval-tool --tool-id org.sample.never.event --irreversible
|
|
28
|
+
npx @shield-agent/kya serve-mcp --stdio
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Install hub: [https://shield-agent.com/install](https://shield-agent.com/install)
|
|
32
|
+
|
|
33
|
+
## Dual plane
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
host=ide (authoring) host=runtime (production)
|
|
37
|
+
│ │
|
|
38
|
+
└────────── same agent ────────┘
|
|
39
|
+
identity
|
|
40
|
+
policy evaluate → ALLOW | DENY | REQUIRE_APPROVE
|
|
41
|
+
approval + trail
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Tag sessions with `KYA_HOST=ide` or `KYA_HOST=runtime`. Same sole PEP either way.
|
|
45
|
+
|
|
46
|
+
## Environment
|
|
47
|
+
|
|
48
|
+
| Variable | Required | Meaning |
|
|
49
|
+
|----------|----------|---------|
|
|
50
|
+
| `KYA_BASE_URL` | Yes (network cmds) | Control plane origin |
|
|
51
|
+
| `KYA_API_KEY` | When auth is on | Bearer token |
|
|
52
|
+
| `KYA_HOST` | No (default `ide`) | `ide` \| `runtime` |
|
|
53
|
+
| `KYA_AGENT_ID` | After register | Agent principal id |
|
|
54
|
+
| `KYA_MCP_PORT` | No (default `3920`) | HTTP MCP listen port |
|
|
55
|
+
| `KYA_OFFLINE` | No | `1`/`true` for sample evaluate |
|
|
56
|
+
|
|
57
|
+
## MCP tools
|
|
58
|
+
|
|
59
|
+
| Tool | Role |
|
|
60
|
+
|------|------|
|
|
61
|
+
| `kya.policy_evaluate` | `ALLOW` \| `DENY` \| `REQUIRE_APPROVE` |
|
|
62
|
+
| `kya.session_ingest` | Observe / raise-only risk |
|
|
63
|
+
| `kya.request_approval` | Open human gate — **does not** execute side effect |
|
|
64
|
+
|
|
65
|
+
MCP Registry: `server.json` + package `mcpName` `io.github.the-pixel-boys/shield-kya`.
|
|
66
|
+
|
|
67
|
+
```json
|
|
68
|
+
{
|
|
69
|
+
"mcpServers": {
|
|
70
|
+
"shield-kya": {
|
|
71
|
+
"command": "npx",
|
|
72
|
+
"args": ["-y", "@shield-agent/kya", "serve-mcp", "--stdio"],
|
|
73
|
+
"env": {
|
|
74
|
+
"KYA_BASE_URL": "http://127.0.0.1:8090",
|
|
75
|
+
"KYA_API_KEY": "${KYA_API_KEY}",
|
|
76
|
+
"KYA_HOST": "ide"
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## ORR (reporting only)
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
npx @shield-agent/kya orr run --path . --out ./orr-report --skip-optional-producers
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
ORR is a **reporting orchestrator**. Scanners are evidence. They never ALLOW high-stakes side effects (no dual PEP).
|
|
90
|
+
|
|
91
|
+
## Enterprise (distinct tier)
|
|
92
|
+
|
|
93
|
+
Pin private registry builds, multi-tenant density, ORR board ops, and support — **never** required for the day-1 npx path above.
|
|
94
|
+
|
|
95
|
+
## Develop
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
pnpm install
|
|
99
|
+
pnpm test
|
|
100
|
+
pnpm build
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Docs
|
|
104
|
+
|
|
105
|
+
- [Light install](../../docs/guides/kya-light-install.md)
|
|
106
|
+
- [MCP snippets](../../docs/guides/kya-mcp-snippet.md)
|
|
107
|
+
- [Local free console](../../docs/guides/kya-local-free.md)
|
|
108
|
+
- [Public baseline](../../public/kya-baseline/README.md)
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* @shield-agent/kya — light install CLI
|
|
4
|
+
* Commands: init | register-agent | eval-tool | serve-mcp | orr run
|
|
5
|
+
* Fail-closed: empty KYA_API_KEY against auth plane → non-zero exit.
|
|
6
|
+
* Offline sample: eval-tool --offline (demo only; not production PEP).
|
|
7
|
+
*/
|
|
8
|
+
export interface CliIo {
|
|
9
|
+
readonly log: (msg: string) => void;
|
|
10
|
+
readonly error: (msg: string) => void;
|
|
11
|
+
readonly exit: (code: number) => void;
|
|
12
|
+
}
|
|
13
|
+
/** Testable entry — does not call process.exit when custom io.exit is provided that throws. */
|
|
14
|
+
export declare function runCli(argv: readonly string[], io?: CliIo, env?: NodeJS.ProcessEnv, cwd?: string): Promise<number>;
|
|
15
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AA0DH,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAQD,+FAA+F;AAC/F,wBAAsB,MAAM,CAC1B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,EAAE,GAAE,KAAiB,EACrB,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAqJjB"}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* @shield-agent/kya — light install CLI
|
|
4
|
+
* Commands: init | register-agent | eval-tool | serve-mcp | orr run
|
|
5
|
+
* Fail-closed: empty KYA_API_KEY against auth plane → non-zero exit.
|
|
6
|
+
* Offline sample: eval-tool --offline (demo only; not production PEP).
|
|
7
|
+
*/
|
|
8
|
+
import { realpathSync } from "node:fs";
|
|
9
|
+
import { fileURLToPath } from "node:url";
|
|
10
|
+
import { resolveConfig } from "./config.js";
|
|
11
|
+
import { KyaError } from "./errors.js";
|
|
12
|
+
import { parseArgs } from "./parse-args.js";
|
|
13
|
+
import { initFromArgs } from "./commands/init.js";
|
|
14
|
+
import { registerAgentInputFromArgs, runRegisterAgent, } from "./commands/register-agent.js";
|
|
15
|
+
import { evalToolInputFromArgs, formatEvalHuman, runEvalTool, } from "./commands/eval-tool.js";
|
|
16
|
+
import { runServeMcp, serveMcpOptionsFromArgs, } from "./commands/serve-mcp.js";
|
|
17
|
+
import { orrRunOptionsFromArgs, runOrr, } from "./commands/orr.js";
|
|
18
|
+
const HELP = `Shield KYA light CLI — Know Your Agent (provider-agnostic)
|
|
19
|
+
|
|
20
|
+
Usage:
|
|
21
|
+
kya <command> [options]
|
|
22
|
+
|
|
23
|
+
Commands:
|
|
24
|
+
init Scaffold .kya/ config + sample tools + .env.example
|
|
25
|
+
register-agent POST /api/v1/kya/agents (stores agentId in .kya/config.json)
|
|
26
|
+
eval-tool Policy evaluate (HTTP plane or --offline sample)
|
|
27
|
+
serve-mcp Local MCP gate (HTTP default; --stdio for hosts)
|
|
28
|
+
orr run Read-only ORR board (reporting only — not a second PEP)
|
|
29
|
+
|
|
30
|
+
Options (shared):
|
|
31
|
+
--base-url <url> Control plane origin (or KYA_BASE_URL)
|
|
32
|
+
--api-key <key> API key (or KYA_API_KEY) — required for network commands
|
|
33
|
+
--host <ide|runtime> Dual-plane host (or KYA_HOST, default ide)
|
|
34
|
+
--offline Sample evaluate without network (eval-tool only)
|
|
35
|
+
--json Machine-readable output
|
|
36
|
+
--help, -h Show help
|
|
37
|
+
|
|
38
|
+
Examples:
|
|
39
|
+
npx @shield-agent/kya init --base-url http://127.0.0.1:8090 --host ide
|
|
40
|
+
npx @shield-agent/kya eval-tool --offline --tool-id org.sample.never.event --irreversible
|
|
41
|
+
npx @shield-agent/kya eval-tool --offline --tool-id org.sample.data.write --irreversible
|
|
42
|
+
npx @shield-agent/kya register-agent --name solo-builder --version-hash dev-local
|
|
43
|
+
npx @shield-agent/kya serve-mcp --stdio
|
|
44
|
+
npx @shield-agent/kya orr run --path . --out ./orr-report --skip-optional-producers
|
|
45
|
+
|
|
46
|
+
Docs: https://shield-agent.com/install · docs/guides/kya-light-install.md
|
|
47
|
+
Doctrine: sole PEP is Shield; DENY is hard; missing APPROVED ⇒ no irreversible side effect.
|
|
48
|
+
`;
|
|
49
|
+
const defaultIo = {
|
|
50
|
+
log: (m) => console.log(m),
|
|
51
|
+
error: (m) => console.error(m),
|
|
52
|
+
exit: (c) => process.exit(c),
|
|
53
|
+
};
|
|
54
|
+
/** Testable entry — does not call process.exit when custom io.exit is provided that throws. */
|
|
55
|
+
export async function runCli(argv, io = defaultIo, env = process.env, cwd = process.cwd()) {
|
|
56
|
+
const parsed = parseArgs(argv);
|
|
57
|
+
if (!parsed.command ||
|
|
58
|
+
parsed.command === "help" ||
|
|
59
|
+
parsed.flags["help"] === true ||
|
|
60
|
+
parsed.flags["h"] === true) {
|
|
61
|
+
io.log(HELP);
|
|
62
|
+
return 0;
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
switch (parsed.command) {
|
|
66
|
+
case "init": {
|
|
67
|
+
const result = initFromArgs(parsed, cwd);
|
|
68
|
+
if (parsed.flags["json"] === true || parsed.flags["json"] === "true") {
|
|
69
|
+
io.log(JSON.stringify(result, null, 2));
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
io.log("KYA light scaffold ready (zero vertical packs required)");
|
|
73
|
+
for (const p of result.created)
|
|
74
|
+
io.log(` created: ${p}`);
|
|
75
|
+
for (const p of result.skipped)
|
|
76
|
+
io.log(` exists: ${p}`);
|
|
77
|
+
io.log("Next: offline demo → npx @shield-agent/kya eval-tool --offline --tool-id org.sample.never.event --irreversible");
|
|
78
|
+
io.log("Or: cp .env.example .env && set KYA_API_KEY, then register-agent");
|
|
79
|
+
}
|
|
80
|
+
return 0;
|
|
81
|
+
}
|
|
82
|
+
case "register-agent": {
|
|
83
|
+
const config = resolveConfig({
|
|
84
|
+
cwd,
|
|
85
|
+
env,
|
|
86
|
+
flags: parsed.flags,
|
|
87
|
+
requireApiKey: true,
|
|
88
|
+
});
|
|
89
|
+
const input = registerAgentInputFromArgs(parsed);
|
|
90
|
+
const result = await runRegisterAgent(config, input);
|
|
91
|
+
if (config.json) {
|
|
92
|
+
io.log(JSON.stringify(result, null, 2));
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
io.log(`agentId: ${result.agentId}`);
|
|
96
|
+
io.log(`name: ${result.agent.name}`);
|
|
97
|
+
io.log(`stored: ${result.configPath}`);
|
|
98
|
+
}
|
|
99
|
+
return 0;
|
|
100
|
+
}
|
|
101
|
+
case "eval-tool": {
|
|
102
|
+
const input = evalToolInputFromArgs(parsed);
|
|
103
|
+
const config = resolveConfig({
|
|
104
|
+
cwd,
|
|
105
|
+
env,
|
|
106
|
+
flags: parsed.flags,
|
|
107
|
+
requireApiKey: !input.offline,
|
|
108
|
+
offline: input.offline,
|
|
109
|
+
});
|
|
110
|
+
const result = await runEvalTool(config, input);
|
|
111
|
+
if (config.json) {
|
|
112
|
+
io.log(JSON.stringify({ ...result.response, offline: result.offline }, null, 2));
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
io.log(formatEvalHuman(result));
|
|
116
|
+
}
|
|
117
|
+
return 0;
|
|
118
|
+
}
|
|
119
|
+
case "serve-mcp": {
|
|
120
|
+
const config = resolveConfig({
|
|
121
|
+
cwd,
|
|
122
|
+
env,
|
|
123
|
+
flags: parsed.flags,
|
|
124
|
+
requireApiKey: true,
|
|
125
|
+
});
|
|
126
|
+
const opts = serveMcpOptionsFromArgs(parsed);
|
|
127
|
+
const result = await runServeMcp(config, opts);
|
|
128
|
+
if (result.mode === "http" && result.http) {
|
|
129
|
+
io.log(`KYA MCP gate listening on ${result.http.url} (host=${config.host})`);
|
|
130
|
+
io.log(" GET /health");
|
|
131
|
+
io.log(" GET /connectors/mcp.json");
|
|
132
|
+
io.log(" GET /mcp/tools");
|
|
133
|
+
io.log(" POST /mcp (JSON-RPC)");
|
|
134
|
+
io.log(" tools: kya.policy_evaluate | kya.session_ingest | kya.request_approval");
|
|
135
|
+
io.log(" fail-closed: evaluate/request only — no irreversible side effects without APPROVED");
|
|
136
|
+
await new Promise((resolve) => {
|
|
137
|
+
const stop = () => {
|
|
138
|
+
void result.http?.close().finally(resolve);
|
|
139
|
+
};
|
|
140
|
+
process.once("SIGINT", stop);
|
|
141
|
+
process.once("SIGTERM", stop);
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
else if (result.mode === "stdio" && result.stdio) {
|
|
145
|
+
await result.stdio.done;
|
|
146
|
+
}
|
|
147
|
+
return 0;
|
|
148
|
+
}
|
|
149
|
+
case "orr": {
|
|
150
|
+
const sub = parsed.positionals[0];
|
|
151
|
+
if (sub !== "run") {
|
|
152
|
+
io.error('Usage: kya orr run --path <dir> [options]');
|
|
153
|
+
io.log("ORR is a reporting orchestrator only (not a second PEP). See docs/dev/kya-orr-cli.md");
|
|
154
|
+
return 1;
|
|
155
|
+
}
|
|
156
|
+
// Re-parse with flags after "orr run" — positionals after subcommand already in flags from original parse
|
|
157
|
+
const opts = orrRunOptionsFromArgs(parsed);
|
|
158
|
+
const result = runOrr(opts);
|
|
159
|
+
if (opts.jsonStdout || parsed.flags["json"] === true) {
|
|
160
|
+
io.log(JSON.stringify(result.report, null, 2));
|
|
161
|
+
}
|
|
162
|
+
else if (!opts.quiet) {
|
|
163
|
+
io.log(`ORR ${result.report.overall} / ${result.report.disposition} → ${result.reportJsonPath ?? result.reportMdPath ?? opts.out}`);
|
|
164
|
+
io.log(`(reporting only — sole PEP remains Shield KYA; scanners are evidence)`);
|
|
165
|
+
}
|
|
166
|
+
return result.exitCode;
|
|
167
|
+
}
|
|
168
|
+
default:
|
|
169
|
+
io.error(`Unknown command: ${parsed.command}`);
|
|
170
|
+
io.log(HELP);
|
|
171
|
+
return 2;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
catch (err) {
|
|
175
|
+
if (err instanceof KyaError) {
|
|
176
|
+
io.error(`error: ${err.message} [${err.code}]`);
|
|
177
|
+
return err.exitCode;
|
|
178
|
+
}
|
|
179
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
180
|
+
io.error(`error: ${message}`);
|
|
181
|
+
return 1;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
// Only auto-run when executed as CLI entry (not when imported by tests).
|
|
185
|
+
// Bin links resolve as ".../bin/kya" not ".../cli.js" — compare realpaths.
|
|
186
|
+
function isCliEntry() {
|
|
187
|
+
if (typeof process.argv[1] !== "string")
|
|
188
|
+
return false;
|
|
189
|
+
try {
|
|
190
|
+
return realpathSync(process.argv[1]) === realpathSync(fileURLToPath(import.meta.url));
|
|
191
|
+
}
|
|
192
|
+
catch {
|
|
193
|
+
const a = process.argv[1];
|
|
194
|
+
return (a.endsWith("/cli.js") ||
|
|
195
|
+
a.endsWith("/cli.ts") ||
|
|
196
|
+
a.endsWith("/kya") ||
|
|
197
|
+
a.endsWith("/shield-kya") ||
|
|
198
|
+
a.includes("@shield-agent/kya"));
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
if (isCliEntry()) {
|
|
202
|
+
void runCli(process.argv.slice(2)).then((code) => {
|
|
203
|
+
if (code !== 0)
|
|
204
|
+
process.exit(code);
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import type { Host } from "./config.js";
|
|
2
|
+
export type FetchLike = typeof fetch;
|
|
3
|
+
export interface KyaClientOptions {
|
|
4
|
+
readonly baseUrl: string;
|
|
5
|
+
readonly apiKey: string;
|
|
6
|
+
readonly fetch?: FetchLike;
|
|
7
|
+
readonly host?: Host;
|
|
8
|
+
readonly agentId?: string;
|
|
9
|
+
/** When false, skip auth check (tests only). Default true. */
|
|
10
|
+
readonly requireApiKey?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface PolicyEvaluateRequest {
|
|
13
|
+
readonly toolId: string;
|
|
14
|
+
readonly action?: string;
|
|
15
|
+
readonly argsHash?: string;
|
|
16
|
+
readonly irreversible?: boolean;
|
|
17
|
+
readonly actionClass?: string;
|
|
18
|
+
readonly dataClass?: string;
|
|
19
|
+
readonly sessionRisk?: string;
|
|
20
|
+
readonly approvalStatus?: string;
|
|
21
|
+
readonly packId?: string | null;
|
|
22
|
+
readonly env?: {
|
|
23
|
+
readonly host: Host;
|
|
24
|
+
readonly sessionId?: string;
|
|
25
|
+
readonly agentId?: string;
|
|
26
|
+
readonly correlationId?: string;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export interface PolicyEvaluateResponse {
|
|
30
|
+
readonly verdict: string;
|
|
31
|
+
readonly reasonCode: string;
|
|
32
|
+
readonly toolId?: string;
|
|
33
|
+
readonly argsHash?: string;
|
|
34
|
+
readonly localVerdict?: string;
|
|
35
|
+
readonly sessionRisk?: string;
|
|
36
|
+
readonly host?: string;
|
|
37
|
+
readonly opaAllow?: boolean;
|
|
38
|
+
readonly opaReason?: string;
|
|
39
|
+
}
|
|
40
|
+
export interface RegisterAgentRequest {
|
|
41
|
+
readonly name: string;
|
|
42
|
+
readonly versionHash: string;
|
|
43
|
+
}
|
|
44
|
+
export interface AgentResponse {
|
|
45
|
+
readonly id: string;
|
|
46
|
+
readonly orgId?: string;
|
|
47
|
+
readonly name: string;
|
|
48
|
+
readonly status?: string;
|
|
49
|
+
readonly versionHash?: string;
|
|
50
|
+
readonly createdAt?: string;
|
|
51
|
+
}
|
|
52
|
+
export interface SessionIngestRequest {
|
|
53
|
+
readonly sessionId: string;
|
|
54
|
+
readonly source?: string;
|
|
55
|
+
readonly model?: string;
|
|
56
|
+
readonly hostname?: string;
|
|
57
|
+
readonly projectPath?: string;
|
|
58
|
+
readonly riskLevel?: string;
|
|
59
|
+
readonly hitCodes?: readonly string[];
|
|
60
|
+
readonly payload?: Readonly<Record<string, unknown>>;
|
|
61
|
+
readonly host?: Host;
|
|
62
|
+
}
|
|
63
|
+
export interface SessionIngestResponse {
|
|
64
|
+
readonly id: string;
|
|
65
|
+
readonly riskLevel: string;
|
|
66
|
+
readonly host?: string;
|
|
67
|
+
}
|
|
68
|
+
export interface CreateApprovalRequest {
|
|
69
|
+
readonly agentId: string;
|
|
70
|
+
readonly disputeId: string;
|
|
71
|
+
readonly packVersion?: string;
|
|
72
|
+
readonly action?: string;
|
|
73
|
+
readonly toolId?: string;
|
|
74
|
+
}
|
|
75
|
+
export interface ApprovalResponse {
|
|
76
|
+
readonly id: string;
|
|
77
|
+
readonly status: string;
|
|
78
|
+
readonly [key: string]: unknown;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Minimal HTTP client for light CLI / MCP gate.
|
|
82
|
+
* Base URL is control-plane origin (e.g. http://127.0.0.1:8090).
|
|
83
|
+
* Paths are absolute under /api/v1/kya/*.
|
|
84
|
+
*/
|
|
85
|
+
export declare class KyaHttpClient {
|
|
86
|
+
readonly baseUrl: string;
|
|
87
|
+
readonly host: Host;
|
|
88
|
+
readonly agentId: string | undefined;
|
|
89
|
+
private readonly apiKey;
|
|
90
|
+
private readonly fetchImpl;
|
|
91
|
+
constructor(options: KyaClientOptions);
|
|
92
|
+
registerAgent(body: RegisterAgentRequest): Promise<AgentResponse>;
|
|
93
|
+
evaluatePolicy(req: PolicyEvaluateRequest): Promise<PolicyEvaluateResponse>;
|
|
94
|
+
ingestSession(req: SessionIngestRequest): Promise<SessionIngestResponse>;
|
|
95
|
+
requestApproval(req: CreateApprovalRequest): Promise<ApprovalResponse>;
|
|
96
|
+
request<T>(path: string, options?: {
|
|
97
|
+
method?: "GET" | "POST" | "PUT" | "DELETE";
|
|
98
|
+
body?: unknown;
|
|
99
|
+
headers?: Record<string, string>;
|
|
100
|
+
}): Promise<T>;
|
|
101
|
+
}
|
|
102
|
+
export declare function buildEvaluateFromToolArgs(input: {
|
|
103
|
+
toolId: string;
|
|
104
|
+
args?: unknown;
|
|
105
|
+
irreversible?: boolean;
|
|
106
|
+
host: Host;
|
|
107
|
+
agentId?: string;
|
|
108
|
+
sessionRisk?: string;
|
|
109
|
+
approvalStatus?: string;
|
|
110
|
+
}): PolicyEvaluateRequest;
|
|
111
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { AuthRequiredError, HttpError, KyaError } from "./errors.js";
|
|
2
|
+
import { computeArgsHash } from "./hash.js";
|
|
3
|
+
import { findSampleTool } from "./sample-tools.js";
|
|
4
|
+
/**
|
|
5
|
+
* Minimal HTTP client for light CLI / MCP gate.
|
|
6
|
+
* Base URL is control-plane origin (e.g. http://127.0.0.1:8090).
|
|
7
|
+
* Paths are absolute under /api/v1/kya/*.
|
|
8
|
+
*/
|
|
9
|
+
export class KyaHttpClient {
|
|
10
|
+
baseUrl;
|
|
11
|
+
host;
|
|
12
|
+
agentId;
|
|
13
|
+
apiKey;
|
|
14
|
+
fetchImpl;
|
|
15
|
+
constructor(options) {
|
|
16
|
+
const requireKey = options.requireApiKey !== false;
|
|
17
|
+
if (requireKey && (!options.apiKey || options.apiKey.trim() === "")) {
|
|
18
|
+
throw new AuthRequiredError();
|
|
19
|
+
}
|
|
20
|
+
this.baseUrl = stripTrailingSlash(options.baseUrl);
|
|
21
|
+
this.apiKey = options.apiKey.trim();
|
|
22
|
+
this.host = options.host ?? "ide";
|
|
23
|
+
this.agentId = options.agentId;
|
|
24
|
+
const fetchImpl = options.fetch ?? globalThis.fetch;
|
|
25
|
+
if (typeof fetchImpl !== "function") {
|
|
26
|
+
throw new KyaError("global fetch unavailable; Node 20+ required", "NO_FETCH");
|
|
27
|
+
}
|
|
28
|
+
this.fetchImpl = fetchImpl;
|
|
29
|
+
}
|
|
30
|
+
async registerAgent(body) {
|
|
31
|
+
return this.request("/api/v1/kya/agents", {
|
|
32
|
+
method: "POST",
|
|
33
|
+
body,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
async evaluatePolicy(req) {
|
|
37
|
+
const toolId = req.toolId;
|
|
38
|
+
const sample = findSampleTool(toolId);
|
|
39
|
+
const body = {
|
|
40
|
+
toolId,
|
|
41
|
+
action: req.action ?? toolId,
|
|
42
|
+
argsHash: req.argsHash,
|
|
43
|
+
irreversible: req.irreversible ?? sample?.irreversible ?? false,
|
|
44
|
+
actionClass: req.actionClass ?? sample?.actionClass,
|
|
45
|
+
dataClass: req.dataClass ?? sample?.dataClass,
|
|
46
|
+
sessionRisk: req.sessionRisk ?? "LOW",
|
|
47
|
+
approvalStatus: req.approvalStatus ?? "NONE",
|
|
48
|
+
packId: req.packId === undefined ? "generic" : req.packId,
|
|
49
|
+
env: req.env ?? {
|
|
50
|
+
host: this.host,
|
|
51
|
+
agentId: this.agentId,
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
return this.request("/api/v1/kya/policy/evaluate", {
|
|
55
|
+
method: "POST",
|
|
56
|
+
body,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
async ingestSession(req) {
|
|
60
|
+
return this.request("/api/v1/kya/sessions/ingest", {
|
|
61
|
+
method: "POST",
|
|
62
|
+
body: {
|
|
63
|
+
...req,
|
|
64
|
+
host: req.host ?? this.host,
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
async requestApproval(req) {
|
|
69
|
+
return this.request("/api/v1/kya/approvals", {
|
|
70
|
+
method: "POST",
|
|
71
|
+
body: {
|
|
72
|
+
agentId: req.agentId,
|
|
73
|
+
disputeId: req.disputeId,
|
|
74
|
+
packVersion: req.packVersion ?? "generic",
|
|
75
|
+
action: req.action ?? req.toolId,
|
|
76
|
+
toolId: req.toolId ?? req.action,
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
async request(path, options = {}) {
|
|
81
|
+
const method = options.method ?? "GET";
|
|
82
|
+
const url = `${this.baseUrl}${path.startsWith("/") ? path : `/${path}`}`;
|
|
83
|
+
const headers = {
|
|
84
|
+
Accept: "application/json",
|
|
85
|
+
"User-Agent": "shield-agent-kya-cli/0.1.0",
|
|
86
|
+
...(options.headers ?? {}),
|
|
87
|
+
};
|
|
88
|
+
if (this.apiKey) {
|
|
89
|
+
headers.Authorization = `Bearer ${this.apiKey}`;
|
|
90
|
+
}
|
|
91
|
+
let body;
|
|
92
|
+
if (options.body !== undefined) {
|
|
93
|
+
headers["Content-Type"] = "application/json; charset=utf-8";
|
|
94
|
+
body = JSON.stringify(options.body);
|
|
95
|
+
}
|
|
96
|
+
const response = await this.fetchImpl(url, { method, headers, body });
|
|
97
|
+
const text = await response.text();
|
|
98
|
+
const parsed = parseJsonSafe(text);
|
|
99
|
+
if (!response.ok) {
|
|
100
|
+
if (response.status === 401 || response.status === 403) {
|
|
101
|
+
throw new AuthRequiredError(`control plane rejected credentials (HTTP ${response.status})`);
|
|
102
|
+
}
|
|
103
|
+
let msg = `HTTP ${response.status} ${method} ${path}`;
|
|
104
|
+
if (parsed &&
|
|
105
|
+
typeof parsed === "object" &&
|
|
106
|
+
"message" in parsed &&
|
|
107
|
+
typeof parsed.message === "string") {
|
|
108
|
+
msg = parsed.message;
|
|
109
|
+
}
|
|
110
|
+
throw new HttpError(response.status, msg, parsed);
|
|
111
|
+
}
|
|
112
|
+
return parsed;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
export function buildEvaluateFromToolArgs(input) {
|
|
116
|
+
const args = input.args ?? {};
|
|
117
|
+
return {
|
|
118
|
+
toolId: input.toolId,
|
|
119
|
+
action: input.toolId,
|
|
120
|
+
argsHash: computeArgsHash(args),
|
|
121
|
+
irreversible: input.irreversible,
|
|
122
|
+
sessionRisk: input.sessionRisk ?? "LOW",
|
|
123
|
+
approvalStatus: input.approvalStatus ?? "NONE",
|
|
124
|
+
env: {
|
|
125
|
+
host: input.host,
|
|
126
|
+
agentId: input.agentId,
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
function stripTrailingSlash(url) {
|
|
131
|
+
return url.endsWith("/") ? url.slice(0, -1) : url;
|
|
132
|
+
}
|
|
133
|
+
function parseJsonSafe(text) {
|
|
134
|
+
if (!text || text.length === 0)
|
|
135
|
+
return undefined;
|
|
136
|
+
try {
|
|
137
|
+
return JSON.parse(text);
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
return undefined;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ResolvedConfig } from "../config.js";
|
|
2
|
+
import { KyaHttpClient, type PolicyEvaluateResponse } from "../client.js";
|
|
3
|
+
import type { ParsedArgs } from "../parse-args.js";
|
|
4
|
+
export interface EvalToolResult {
|
|
5
|
+
readonly response: PolicyEvaluateResponse;
|
|
6
|
+
readonly toolId: string;
|
|
7
|
+
readonly argsHash: string | undefined;
|
|
8
|
+
readonly offline: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare function runEvalTool(config: ResolvedConfig, input: {
|
|
11
|
+
toolId: string;
|
|
12
|
+
args?: unknown;
|
|
13
|
+
irreversible?: boolean;
|
|
14
|
+
sessionRisk?: string;
|
|
15
|
+
approvalStatus?: string;
|
|
16
|
+
offline?: boolean;
|
|
17
|
+
}, client?: KyaHttpClient): Promise<EvalToolResult>;
|
|
18
|
+
export declare function evalToolInputFromArgs(parsed: ParsedArgs): {
|
|
19
|
+
toolId: string;
|
|
20
|
+
args: unknown;
|
|
21
|
+
irreversible: boolean;
|
|
22
|
+
sessionRisk?: string;
|
|
23
|
+
approvalStatus?: string;
|
|
24
|
+
offline: boolean;
|
|
25
|
+
};
|
|
26
|
+
export declare function formatEvalHuman(result: EvalToolResult): string;
|
|
27
|
+
//# sourceMappingURL=eval-tool.d.ts.map
|