@clampd/sdk 0.13.2 → 0.15.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.
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
export interface SubcategorySpec {
|
|
2
2
|
readonly operations: readonly string[];
|
|
3
|
+
/** Subset of `operations` that mean external-egress (data leaving the org boundary). */
|
|
4
|
+
readonly egress: readonly string[];
|
|
5
|
+
/** Subset of `operations` that ALWAYS produce sensitive data. Sets sticky session-level taint flag. */
|
|
6
|
+
readonly sensitive_source: readonly string[];
|
|
3
7
|
}
|
|
4
8
|
export interface CategorySpec {
|
|
5
9
|
readonly description: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taxonomy-data.d.ts","sourceRoot":"","sources":["../../src/generated/taxonomy-data.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"taxonomy-data.d.ts","sourceRoot":"","sources":["../../src/generated/taxonomy-data.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,wFAAwF;IACxF,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,uGAAuG;IACvG,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9C;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CACzD;AAED,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAiGjD,CAAC"}
|
|
@@ -7,97 +7,97 @@ export const TAXONOMY = {
|
|
|
7
7
|
agent: {
|
|
8
8
|
description: "Agent delegation, A2A handoff, spawn",
|
|
9
9
|
subcategories: {
|
|
10
|
-
a2a: { operations: ["read", "write"] },
|
|
11
|
-
config: { operations: ["read", "write"] },
|
|
12
|
-
delegate: { operations: ["write"] },
|
|
13
|
-
spawn: { operations: ["write"] },
|
|
10
|
+
a2a: { operations: ["read", "write"], egress: [], sensitive_source: [] },
|
|
11
|
+
config: { operations: ["read", "write"], egress: [], sensitive_source: [] },
|
|
12
|
+
delegate: { operations: ["write"], egress: [], sensitive_source: [] },
|
|
13
|
+
spawn: { operations: ["write"], egress: [], sensitive_source: [] },
|
|
14
14
|
},
|
|
15
15
|
},
|
|
16
16
|
auth: {
|
|
17
17
|
description: "Secrets, credentials, tokens, OAuth flows",
|
|
18
18
|
subcategories: {
|
|
19
|
-
credential: { operations: ["read", "write", "delete"] },
|
|
20
|
-
oauth: { operations: ["read", "write"] },
|
|
21
|
-
secret: { operations: ["read", "write", "delete"] },
|
|
22
|
-
token: { operations: ["read", "write", "delete", "refresh"] },
|
|
19
|
+
credential: { operations: ["read", "write", "delete"], egress: [], sensitive_source: ["read"] },
|
|
20
|
+
oauth: { operations: ["read", "write"], egress: [], sensitive_source: ["read"] },
|
|
21
|
+
secret: { operations: ["read", "write", "delete"], egress: [], sensitive_source: ["read"] },
|
|
22
|
+
token: { operations: ["read", "write", "delete", "refresh"], egress: [], sensitive_source: ["read"] },
|
|
23
23
|
},
|
|
24
24
|
},
|
|
25
25
|
browser: {
|
|
26
26
|
description: "Browser automation, page navigation, scraping",
|
|
27
27
|
subcategories: {
|
|
28
|
-
page: { operations: ["read", "write"] },
|
|
29
|
-
screenshot: { operations: ["read"] },
|
|
28
|
+
page: { operations: ["read", "write"], egress: [], sensitive_source: [] },
|
|
29
|
+
screenshot: { operations: ["read"], egress: [], sensitive_source: [] },
|
|
30
30
|
},
|
|
31
31
|
},
|
|
32
32
|
cloud: {
|
|
33
33
|
description: "Cloud infra, deploys, IAM, object storage",
|
|
34
34
|
subcategories: {
|
|
35
|
-
deploy: { operations: ["read", "write", "destructive"] },
|
|
36
|
-
iam: { operations: ["read", "write", "delete"] },
|
|
37
|
-
infra: { operations: ["read", "write", "destructive"] },
|
|
35
|
+
deploy: { operations: ["read", "write", "destructive"], egress: [], sensitive_source: [] },
|
|
36
|
+
iam: { operations: ["read", "write", "delete"], egress: [], sensitive_source: ["read"] },
|
|
37
|
+
infra: { operations: ["read", "write", "destructive"], egress: [], sensitive_source: [] },
|
|
38
38
|
},
|
|
39
39
|
},
|
|
40
40
|
comms: {
|
|
41
41
|
description: "Email, chat, SMS, notifications — anything agent says to humans or other systems",
|
|
42
42
|
subcategories: {
|
|
43
|
-
email: { operations: ["read", "send", "delete"] },
|
|
44
|
-
messaging: { operations: ["read", "send", "delete"] },
|
|
45
|
-
notification: { operations: ["send"] },
|
|
46
|
-
slack: { operations: ["read", "send", "delete"] },
|
|
47
|
-
sms: { operations: ["read", "send"] },
|
|
43
|
+
email: { operations: ["read", "send", "delete"], egress: ["send"], sensitive_source: [] },
|
|
44
|
+
messaging: { operations: ["read", "send", "delete"], egress: ["send"], sensitive_source: [] },
|
|
45
|
+
notification: { operations: ["send"], egress: ["send"], sensitive_source: [] },
|
|
46
|
+
slack: { operations: ["read", "send", "delete"], egress: ["send"], sensitive_source: [] },
|
|
47
|
+
sms: { operations: ["read", "send"], egress: ["send"], sensitive_source: [] },
|
|
48
48
|
},
|
|
49
49
|
},
|
|
50
50
|
db: {
|
|
51
51
|
description: "Database queries, mutations, schema operations",
|
|
52
52
|
subcategories: {
|
|
53
|
-
mutate: { operations: ["write", "delete", "destructive"] },
|
|
54
|
-
query: { operations: ["read"] },
|
|
55
|
-
schema: { operations: ["read", "destructive"] },
|
|
53
|
+
mutate: { operations: ["write", "delete", "destructive"], egress: [], sensitive_source: [] },
|
|
54
|
+
query: { operations: ["read"], egress: [], sensitive_source: [] },
|
|
55
|
+
schema: { operations: ["read", "destructive"], egress: [], sensitive_source: ["read"] },
|
|
56
56
|
},
|
|
57
57
|
},
|
|
58
58
|
exec: {
|
|
59
59
|
description: "Shell commands, code evaluation, function invocation",
|
|
60
60
|
subcategories: {
|
|
61
|
-
code: { operations: ["run"] },
|
|
62
|
-
function: { operations: ["run"] },
|
|
63
|
-
shell: { operations: ["run", "destructive"] },
|
|
61
|
+
code: { operations: ["run"], egress: [], sensitive_source: [] },
|
|
62
|
+
function: { operations: ["run"], egress: [], sensitive_source: [] },
|
|
63
|
+
shell: { operations: ["run", "destructive"], egress: [], sensitive_source: [] },
|
|
64
64
|
},
|
|
65
65
|
},
|
|
66
66
|
fs: {
|
|
67
67
|
description: "Filesystem, blob / object storage",
|
|
68
68
|
subcategories: {
|
|
69
|
-
blob: { operations: ["read", "write", "delete"] },
|
|
70
|
-
file: { operations: ["read", "write", "delete"] },
|
|
69
|
+
blob: { operations: ["read", "write", "delete"], egress: ["write"], sensitive_source: [] },
|
|
70
|
+
file: { operations: ["read", "write", "delete"], egress: [], sensitive_source: [] },
|
|
71
71
|
},
|
|
72
72
|
},
|
|
73
73
|
llm: {
|
|
74
74
|
description: "LLM prompt / completion, embeddings",
|
|
75
75
|
subcategories: {
|
|
76
|
-
embedding: { operations: ["read", "write"] },
|
|
77
|
-
input: { operations: ["write"] },
|
|
78
|
-
output: { operations: ["read"] },
|
|
76
|
+
embedding: { operations: ["read", "write"], egress: [], sensitive_source: [] },
|
|
77
|
+
input: { operations: ["write"], egress: [], sensitive_source: [] },
|
|
78
|
+
output: { operations: ["read"], egress: [], sensitive_source: [] },
|
|
79
79
|
},
|
|
80
80
|
},
|
|
81
81
|
net: {
|
|
82
82
|
description: "HTTP, webhooks, raw-socket, DNS",
|
|
83
83
|
subcategories: {
|
|
84
|
-
dns: { operations: ["read"] },
|
|
85
|
-
http: { operations: ["read", "write"] },
|
|
86
|
-
socket: { operations: ["read", "write"] },
|
|
84
|
+
dns: { operations: ["read"], egress: [], sensitive_source: [] },
|
|
85
|
+
http: { operations: ["read", "write"], egress: ["write"], sensitive_source: [] },
|
|
86
|
+
socket: { operations: ["read", "write"], egress: ["write"], sensitive_source: [] },
|
|
87
87
|
},
|
|
88
88
|
},
|
|
89
89
|
payment: {
|
|
90
90
|
description: "Payments, billing, refunds, financial transactions",
|
|
91
91
|
subcategories: {
|
|
92
|
-
billing: { operations: ["read", "write"] },
|
|
93
|
-
invoice: { operations: ["read", "write"] },
|
|
94
|
-
transaction: { operations: ["read", "write", "destructive"] },
|
|
92
|
+
billing: { operations: ["read", "write"], egress: [], sensitive_source: [] },
|
|
93
|
+
invoice: { operations: ["read", "write"], egress: [], sensitive_source: [] },
|
|
94
|
+
transaction: { operations: ["read", "write", "destructive"], egress: [], sensitive_source: [] },
|
|
95
95
|
},
|
|
96
96
|
},
|
|
97
97
|
scm: {
|
|
98
98
|
description: "Git / VCS — push, commit, branch management",
|
|
99
99
|
subcategories: {
|
|
100
|
-
git: { operations: ["read", "write", "delete"] },
|
|
100
|
+
git: { operations: ["read", "write", "delete"], egress: [], sensitive_source: [] },
|
|
101
101
|
},
|
|
102
102
|
},
|
|
103
103
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taxonomy-data.js","sourceRoot":"","sources":["../../src/generated/taxonomy-data.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,sEAAsE;AACtE,mEAAmE;AACnE,wEAAwE;AACxE,oCAAoC;
|
|
1
|
+
{"version":3,"file":"taxonomy-data.js","sourceRoot":"","sources":["../../src/generated/taxonomy-data.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@clampd/sdk",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Runtime security SDK for AI agents
|
|
3
|
+
"version": "0.15.0",
|
|
4
|
+
"description": "Runtime security SDK for AI agents \u2014 guard tool calls in 1 line",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
package/dist/index.cjs
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
// CJS compatibility wrapper for @clampd/sdk
|
|
2
|
-
// This allows `const clampd = require("@clampd/sdk")` to work
|
|
3
|
-
|
|
4
|
-
let _mod = null;
|
|
5
|
-
const _ready = import("./index.js").then((mod) => {
|
|
6
|
-
_mod = mod;
|
|
7
|
-
// Copy all named exports
|
|
8
|
-
for (const [key, val] of Object.entries(mod)) {
|
|
9
|
-
if (key !== "default") module.exports[key] = val;
|
|
10
|
-
}
|
|
11
|
-
// Copy default export methods (init, openai, anthropic, guard, tools)
|
|
12
|
-
if (mod.default) {
|
|
13
|
-
for (const [key, val] of Object.entries(mod.default)) {
|
|
14
|
-
module.exports[key] = val;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
module.exports.default = mod.default;
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
// Expose a ready promise for users who need to await
|
|
21
|
-
module.exports._ready = _ready;
|