@blacklake-systems/sdk 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 ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 BlackLake Systems Ltd.
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,116 @@
1
+ # @blacklake-systems/sdk
2
+
3
+ TypeScript SDK for the [BlackLake Control Plane](https://blacklake.systems/product) — agent governance infrastructure.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install @blacklake-systems/sdk
9
+ ```
10
+
11
+ ## Quick Start
12
+
13
+ ```typescript
14
+ import { BlackLake } from '@blacklake-systems/sdk';
15
+
16
+ const bl = new BlackLake({
17
+ apiKey: process.env.BLACKLAKE_API_KEY!,
18
+ baseUrl: 'https://api.blacklake.systems',
19
+ });
20
+
21
+ // Evaluate governance before executing a tool call
22
+ const result = await bl.govern({
23
+ agent: 'expense-bot',
24
+ tool: 'payments.send',
25
+ action: { amount: 4200, vendor: 'Acme Corp' },
26
+ });
27
+
28
+ if (result.decision === 'allow') {
29
+ // proceed with tool call
30
+ }
31
+ ```
32
+
33
+ ## API Reference
34
+
35
+ ### `new BlackLake(config)`
36
+
37
+ | Option | Type | Default | Description |
38
+ |--------|------|---------|-------------|
39
+ | `apiKey` | `string` | — | Your BlackLake API key (required) |
40
+ | `baseUrl` | `string` | `http://localhost:3100` | API base URL |
41
+
42
+ ### `bl.govern(request)`
43
+
44
+ Evaluate whether an agent is allowed to invoke a tool.
45
+
46
+ ```typescript
47
+ const result = await bl.govern({
48
+ agent: 'expense-bot', // agent name
49
+ tool: 'payments.send', // tool name
50
+ action: { amount: 4200 }, // optional: tool invocation payload
51
+ context: { ip: '10.0.0.1' } // optional: request metadata
52
+ });
53
+
54
+ // result.decision: 'allow' | 'deny' | 'approval_required'
55
+ // result.evaluation_id: string
56
+ // result.policy_id: string | null
57
+ // result.reason: string
58
+ // result.evaluated_at: string (ISO 8601)
59
+ ```
60
+
61
+ ### `bl.agents`
62
+
63
+ ```typescript
64
+ await bl.agents.create({ name, environment, risk_classification, description?, approval_mode? });
65
+ await bl.agents.list({ environment?, status? });
66
+ await bl.agents.get(id);
67
+ await bl.agents.update(id, { name?, environment?, risk_classification?, status?, approval_mode? });
68
+ await bl.agents.suspend(id);
69
+ await bl.agents.activate(id);
70
+ await bl.agents.bindTool(agentId, toolId);
71
+ await bl.agents.listTools(agentId);
72
+ await bl.agents.unbindTool(agentId, toolId);
73
+ ```
74
+
75
+ ### `bl.tools`
76
+
77
+ ```typescript
78
+ await bl.tools.create({ name, risk_classification, description? });
79
+ await bl.tools.list();
80
+ await bl.tools.get(id);
81
+ ```
82
+
83
+ ### `bl.policies`
84
+
85
+ ```typescript
86
+ await bl.policies.create({ name, priority, outcome, agent_selector?, tool_selector?, enabled? });
87
+ await bl.policies.list();
88
+ await bl.policies.get(id);
89
+ await bl.policies.update(id, { name?, priority?, outcome?, agent_selector?, tool_selector?, enabled? });
90
+ await bl.policies.delete(id);
91
+ ```
92
+
93
+ ### `bl.evaluations`
94
+
95
+ ```typescript
96
+ await bl.evaluations.list({ agent_id?, tool_id?, outcome?, limit?, offset? });
97
+ await bl.evaluations.get(id);
98
+ ```
99
+
100
+ ### Error Handling
101
+
102
+ ```typescript
103
+ import { BlackLake, BlackLakeError } from '@blacklake-systems/sdk';
104
+
105
+ try {
106
+ await bl.govern({ agent: 'unknown', tool: 'unknown' });
107
+ } catch (err) {
108
+ if (err instanceof BlackLakeError) {
109
+ console.error(err.status, err.code, err.message);
110
+ }
111
+ }
112
+ ```
113
+
114
+ ## Documentation
115
+
116
+ Full documentation at [blacklake.systems/product](https://blacklake.systems/product).
@@ -0,0 +1,173 @@
1
+ export interface Organisation {
2
+ id: string;
3
+ name: string;
4
+ contact_email: string | null;
5
+ created_at: string;
6
+ }
7
+ export interface Agent {
8
+ id: string;
9
+ organisation_id: string;
10
+ name: string;
11
+ description: string | null;
12
+ environment: 'development' | 'staging' | 'production';
13
+ risk_classification: 'low' | 'medium' | 'high' | 'critical';
14
+ status: 'active' | 'suspended' | 'disabled';
15
+ approval_mode: 'auto_approve' | 'require_approval' | 'block';
16
+ created_at: string;
17
+ updated_at: string;
18
+ }
19
+ export interface Tool {
20
+ id: string;
21
+ organisation_id: string;
22
+ name: string;
23
+ description: string | null;
24
+ risk_classification: 'low' | 'medium' | 'high' | 'critical';
25
+ created_at: string;
26
+ }
27
+ export interface Policy {
28
+ id: string;
29
+ organisation_id: string;
30
+ name: string;
31
+ priority: number;
32
+ agent_selector: Record<string, unknown>;
33
+ tool_selector: Record<string, unknown>;
34
+ outcome: 'allow' | 'deny' | 'approval_required';
35
+ enabled: boolean;
36
+ created_at: string;
37
+ updated_at: string;
38
+ }
39
+ export interface GovernRequest {
40
+ agent: string;
41
+ tool: string;
42
+ action?: Record<string, unknown>;
43
+ context?: Record<string, unknown>;
44
+ }
45
+ export interface GovernResponse {
46
+ decision: 'allow' | 'deny' | 'approval_required';
47
+ evaluation_id: string;
48
+ policy_id: string | null;
49
+ reason: string;
50
+ evaluated_at: string;
51
+ }
52
+ export interface Evaluation {
53
+ id: string;
54
+ organisation_id: string;
55
+ agent_id: string;
56
+ tool_id: string;
57
+ policy_id: string | null;
58
+ action_payload: Record<string, unknown> | null;
59
+ outcome: 'allow' | 'deny' | 'approval_required' | 'default_deny';
60
+ evaluated_at: string;
61
+ request_context: Record<string, unknown> | null;
62
+ }
63
+ export interface PaginatedResponse<T> {
64
+ data: T[];
65
+ total: number;
66
+ }
67
+ export declare class BlackLakeError extends Error {
68
+ readonly status: number;
69
+ readonly code: string;
70
+ constructor(status: number, code: string, message: string);
71
+ }
72
+ export interface BlackLakeConfig {
73
+ apiKey: string;
74
+ baseUrl?: string;
75
+ }
76
+ declare class AgentsResource {
77
+ private client;
78
+ constructor(client: BlackLakeClient);
79
+ create(data: {
80
+ name: string;
81
+ description?: string;
82
+ environment: Agent['environment'];
83
+ risk_classification: Agent['risk_classification'];
84
+ approval_mode?: Agent['approval_mode'];
85
+ }): Promise<Agent>;
86
+ list(params?: {
87
+ environment?: string;
88
+ status?: string;
89
+ }): Promise<Agent[]>;
90
+ get(id: string): Promise<Agent>;
91
+ update(id: string, data: Partial<Pick<Agent, 'name' | 'description' | 'environment' | 'risk_classification' | 'status' | 'approval_mode'>>): Promise<Agent>;
92
+ suspend(id: string): Promise<Agent>;
93
+ activate(id: string): Promise<Agent>;
94
+ bindTool(agentId: string, toolId: string): Promise<{
95
+ id: string;
96
+ agent_id: string;
97
+ tool_id: string;
98
+ created_at: string;
99
+ }>;
100
+ listTools(agentId: string): Promise<Tool[]>;
101
+ unbindTool(agentId: string, toolId: string): Promise<void>;
102
+ }
103
+ declare class ToolsResource {
104
+ private client;
105
+ constructor(client: BlackLakeClient);
106
+ create(data: {
107
+ name: string;
108
+ description?: string;
109
+ risk_classification: Tool['risk_classification'];
110
+ }): Promise<Tool>;
111
+ list(): Promise<Tool[]>;
112
+ get(id: string): Promise<Tool>;
113
+ }
114
+ declare class PoliciesResource {
115
+ private client;
116
+ constructor(client: BlackLakeClient);
117
+ create(data: {
118
+ name: string;
119
+ priority: number;
120
+ agent_selector?: Record<string, unknown>;
121
+ tool_selector?: Record<string, unknown>;
122
+ outcome: Policy['outcome'];
123
+ enabled?: boolean;
124
+ }): Promise<Policy>;
125
+ list(): Promise<Policy[]>;
126
+ get(id: string): Promise<Policy>;
127
+ update(id: string, data: Partial<Pick<Policy, 'name' | 'priority' | 'agent_selector' | 'tool_selector' | 'outcome' | 'enabled'>>): Promise<Policy>;
128
+ delete(id: string): Promise<void>;
129
+ }
130
+ declare class EvaluationsResource {
131
+ private client;
132
+ constructor(client: BlackLakeClient);
133
+ list(params?: {
134
+ agent_id?: string;
135
+ tool_id?: string;
136
+ outcome?: string;
137
+ limit?: number;
138
+ offset?: number;
139
+ }): Promise<PaginatedResponse<Evaluation>>;
140
+ get(id: string): Promise<Evaluation>;
141
+ }
142
+ declare class OrganisationResource {
143
+ private client;
144
+ constructor(client: BlackLakeClient);
145
+ /** Fetch the current organisation (derived from the API key). */
146
+ get(): Promise<Organisation>;
147
+ /**
148
+ * Permanently delete the organisation and all associated data.
149
+ *
150
+ * This deletes agents, tools, policies, bindings, the audit log, and all API keys.
151
+ * The deletion is irreversible. The caller must pass the organisation's exact
152
+ * name as `confirmation` — any other value will be rejected.
153
+ */
154
+ delete(confirmation: string): Promise<void>;
155
+ }
156
+ declare class BlackLakeClient {
157
+ private baseUrl;
158
+ private apiKey;
159
+ constructor(config: BlackLakeConfig);
160
+ request<T>(method: string, path: string, body?: unknown): Promise<T>;
161
+ }
162
+ export declare class BlackLake {
163
+ private client;
164
+ readonly agents: AgentsResource;
165
+ readonly tools: ToolsResource;
166
+ readonly policies: PoliciesResource;
167
+ readonly evaluations: EvaluationsResource;
168
+ readonly organisation: OrganisationResource;
169
+ constructor(config: BlackLakeConfig);
170
+ govern(request: GovernRequest): Promise<GovernResponse>;
171
+ }
172
+ export {};
173
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,183 @@
1
+ // Error types
2
+ export class BlackLakeError extends Error {
3
+ status;
4
+ code;
5
+ constructor(status, code, message) {
6
+ super(message);
7
+ this.status = status;
8
+ this.code = code;
9
+ this.name = 'BlackLakeError';
10
+ }
11
+ }
12
+ // Resource classes for namespaced methods
13
+ class AgentsResource {
14
+ client;
15
+ constructor(client) {
16
+ this.client = client;
17
+ }
18
+ async create(data) {
19
+ return this.client.request('POST', '/v1/agents', data);
20
+ }
21
+ async list(params) {
22
+ const query = new URLSearchParams();
23
+ if (params?.environment)
24
+ query.set('environment', params.environment);
25
+ if (params?.status)
26
+ query.set('status', params.status);
27
+ const qs = query.toString();
28
+ return this.client.request('GET', `/v1/agents${qs ? `?${qs}` : ''}`);
29
+ }
30
+ async get(id) {
31
+ return this.client.request('GET', `/v1/agents/${id}`);
32
+ }
33
+ async update(id, data) {
34
+ return this.client.request('PATCH', `/v1/agents/${id}`, data);
35
+ }
36
+ async suspend(id) {
37
+ return this.client.request('POST', `/v1/agents/${id}/suspend`);
38
+ }
39
+ async activate(id) {
40
+ return this.client.request('POST', `/v1/agents/${id}/activate`);
41
+ }
42
+ async bindTool(agentId, toolId) {
43
+ return this.client.request('POST', `/v1/agents/${agentId}/tools`, { tool_id: toolId });
44
+ }
45
+ async listTools(agentId) {
46
+ return this.client.request('GET', `/v1/agents/${agentId}/tools`);
47
+ }
48
+ async unbindTool(agentId, toolId) {
49
+ await this.client.request('DELETE', `/v1/agents/${agentId}/tools/${toolId}`);
50
+ }
51
+ }
52
+ class ToolsResource {
53
+ client;
54
+ constructor(client) {
55
+ this.client = client;
56
+ }
57
+ async create(data) {
58
+ return this.client.request('POST', '/v1/tools', data);
59
+ }
60
+ async list() {
61
+ return this.client.request('GET', '/v1/tools');
62
+ }
63
+ async get(id) {
64
+ return this.client.request('GET', `/v1/tools/${id}`);
65
+ }
66
+ }
67
+ class PoliciesResource {
68
+ client;
69
+ constructor(client) {
70
+ this.client = client;
71
+ }
72
+ async create(data) {
73
+ return this.client.request('POST', '/v1/policies', data);
74
+ }
75
+ async list() {
76
+ return this.client.request('GET', '/v1/policies');
77
+ }
78
+ async get(id) {
79
+ return this.client.request('GET', `/v1/policies/${id}`);
80
+ }
81
+ async update(id, data) {
82
+ return this.client.request('PATCH', `/v1/policies/${id}`, data);
83
+ }
84
+ async delete(id) {
85
+ await this.client.request('DELETE', `/v1/policies/${id}`);
86
+ }
87
+ }
88
+ class EvaluationsResource {
89
+ client;
90
+ constructor(client) {
91
+ this.client = client;
92
+ }
93
+ async list(params) {
94
+ const query = new URLSearchParams();
95
+ if (params?.agent_id)
96
+ query.set('agent_id', params.agent_id);
97
+ if (params?.tool_id)
98
+ query.set('tool_id', params.tool_id);
99
+ if (params?.outcome)
100
+ query.set('outcome', params.outcome);
101
+ if (params?.limit)
102
+ query.set('limit', String(params.limit));
103
+ if (params?.offset)
104
+ query.set('offset', String(params.offset));
105
+ const qs = query.toString();
106
+ return this.client.request('GET', `/v1/evaluations${qs ? `?${qs}` : ''}`);
107
+ }
108
+ async get(id) {
109
+ return this.client.request('GET', `/v1/evaluations/${id}`);
110
+ }
111
+ }
112
+ class OrganisationResource {
113
+ client;
114
+ constructor(client) {
115
+ this.client = client;
116
+ }
117
+ /** Fetch the current organisation (derived from the API key). */
118
+ async get() {
119
+ return this.client.request('GET', '/v1/organisation');
120
+ }
121
+ /**
122
+ * Permanently delete the organisation and all associated data.
123
+ *
124
+ * This deletes agents, tools, policies, bindings, the audit log, and all API keys.
125
+ * The deletion is irreversible. The caller must pass the organisation's exact
126
+ * name as `confirmation` — any other value will be rejected.
127
+ */
128
+ async delete(confirmation) {
129
+ await this.client.request('POST', '/v1/organisation/delete', { confirmation });
130
+ }
131
+ }
132
+ // Internal HTTP client
133
+ class BlackLakeClient {
134
+ baseUrl;
135
+ apiKey;
136
+ constructor(config) {
137
+ this.apiKey = config.apiKey;
138
+ this.baseUrl = (config.baseUrl ?? 'http://localhost:3100').replace(/\/$/, '');
139
+ }
140
+ async request(method, path, body) {
141
+ const headers = {
142
+ 'x-api-key': this.apiKey,
143
+ };
144
+ if (body !== undefined) {
145
+ headers['Content-Type'] = 'application/json';
146
+ }
147
+ const response = await fetch(`${this.baseUrl}${path}`, {
148
+ method,
149
+ headers,
150
+ body: body !== undefined ? JSON.stringify(body) : undefined,
151
+ });
152
+ if (response.status === 204) {
153
+ return undefined;
154
+ }
155
+ const data = await response.json();
156
+ if (!response.ok) {
157
+ const error = data['error'];
158
+ throw new BlackLakeError(response.status, error?.code ?? 'UNKNOWN_ERROR', error?.message ?? 'An unknown error occurred');
159
+ }
160
+ return data;
161
+ }
162
+ }
163
+ // Main SDK class
164
+ export class BlackLake {
165
+ client;
166
+ agents;
167
+ tools;
168
+ policies;
169
+ evaluations;
170
+ organisation;
171
+ constructor(config) {
172
+ this.client = new BlackLakeClient(config);
173
+ this.agents = new AgentsResource(this.client);
174
+ this.tools = new ToolsResource(this.client);
175
+ this.policies = new PoliciesResource(this.client);
176
+ this.evaluations = new EvaluationsResource(this.client);
177
+ this.organisation = new OrganisationResource(this.client);
178
+ }
179
+ async govern(request) {
180
+ return this.client.request('POST', '/v1/govern', request);
181
+ }
182
+ }
183
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@blacklake-systems/sdk",
3
+ "version": "0.1.0",
4
+ "description": "TypeScript SDK for the BlackLake Control Plane — agent governance infrastructure",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "scripts": {
18
+ "build": "tsc",
19
+ "prepublishOnly": "tsc"
20
+ },
21
+ "license": "MIT",
22
+ "homepage": "https://blacklake.systems/product",
23
+ "bugs": {
24
+ "url": "https://blacklake.systems/support"
25
+ },
26
+ "repository": {
27
+ "type": "git",
28
+ "url": "https://github.com/blacklake-systems/control-plane",
29
+ "directory": "packages/sdk"
30
+ },
31
+ "keywords": [
32
+ "blacklake",
33
+ "agent",
34
+ "governance",
35
+ "control-plane",
36
+ "sdk"
37
+ ],
38
+ "devDependencies": {
39
+ "typescript": "^5.8.3"
40
+ },
41
+ "engines": {
42
+ "node": ">=18"
43
+ }
44
+ }