@vorionsys/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/dist/__tests__/sdk.test.d.ts +5 -0
- package/dist/__tests__/sdk.test.d.ts.map +1 -0
- package/dist/__tests__/sdk.test.js +164 -0
- package/dist/__tests__/sdk.test.js.map +1 -0
- package/dist/index.d.ts +282 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +380 -0
- package/dist/index.js.map +1 -0
- package/package.json +57 -0
- package/src/__tests__/sdk.test.ts +201 -0
- package/src/index.ts +559 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/sdk.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vorion SDK Tests
|
|
3
|
+
*/
|
|
4
|
+
import { describe, it, expect, beforeEach } from 'vitest';
|
|
5
|
+
import { Vorion, createVorion, Agent } from '../index.js';
|
|
6
|
+
describe('Vorion SDK', () => {
|
|
7
|
+
let vorion;
|
|
8
|
+
beforeEach(() => {
|
|
9
|
+
vorion = createVorion({ localMode: true });
|
|
10
|
+
});
|
|
11
|
+
describe('Vorion', () => {
|
|
12
|
+
it('should create SDK instance', () => {
|
|
13
|
+
expect(vorion).toBeInstanceOf(Vorion);
|
|
14
|
+
});
|
|
15
|
+
it('should register agents', async () => {
|
|
16
|
+
const agent = await vorion.registerAgent({
|
|
17
|
+
agentId: 'test-agent',
|
|
18
|
+
name: 'Test Agent',
|
|
19
|
+
capabilities: ['read', 'write'],
|
|
20
|
+
});
|
|
21
|
+
expect(agent).toBeInstanceOf(Agent);
|
|
22
|
+
expect(agent.getId()).toBe('test-agent');
|
|
23
|
+
expect(agent.getName()).toBe('Test Agent');
|
|
24
|
+
});
|
|
25
|
+
it('should retrieve registered agents', async () => {
|
|
26
|
+
await vorion.registerAgent({
|
|
27
|
+
agentId: 'agent-1',
|
|
28
|
+
name: 'Agent 1',
|
|
29
|
+
});
|
|
30
|
+
const retrieved = vorion.getAgent('agent-1');
|
|
31
|
+
expect(retrieved).toBeDefined();
|
|
32
|
+
expect(retrieved?.getId()).toBe('agent-1');
|
|
33
|
+
});
|
|
34
|
+
it('should list all agents', async () => {
|
|
35
|
+
await vorion.registerAgent({ agentId: 'agent-1', name: 'Agent 1' });
|
|
36
|
+
await vorion.registerAgent({ agentId: 'agent-2', name: 'Agent 2' });
|
|
37
|
+
const agents = vorion.getAllAgents();
|
|
38
|
+
expect(agents.length).toBe(2);
|
|
39
|
+
});
|
|
40
|
+
it('should return config', () => {
|
|
41
|
+
const config = vorion.getConfig();
|
|
42
|
+
expect(config.localMode).toBe(true);
|
|
43
|
+
expect(config.defaultObservationTier).toBe('GRAY_BOX');
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
describe('Agent', () => {
|
|
47
|
+
let agent;
|
|
48
|
+
beforeEach(async () => {
|
|
49
|
+
agent = await vorion.registerAgent({
|
|
50
|
+
agentId: 'test-agent',
|
|
51
|
+
name: 'Test Agent',
|
|
52
|
+
capabilities: ['read', 'write'],
|
|
53
|
+
observationTier: 'GRAY_BOX',
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
it('should request actions with capability', async () => {
|
|
57
|
+
const result = await agent.requestAction({
|
|
58
|
+
type: 'read',
|
|
59
|
+
resource: 'documents/test.pdf',
|
|
60
|
+
});
|
|
61
|
+
expect(result.allowed).toBe(true);
|
|
62
|
+
expect(result.tier).toBe('GREEN');
|
|
63
|
+
expect(result.proofId).toBeDefined();
|
|
64
|
+
});
|
|
65
|
+
it('should deny actions without capability', async () => {
|
|
66
|
+
const result = await agent.requestAction({
|
|
67
|
+
type: 'delete', // Not in capabilities
|
|
68
|
+
resource: 'documents/test.pdf',
|
|
69
|
+
});
|
|
70
|
+
expect(result.allowed).toBe(false);
|
|
71
|
+
expect(result.reason).toContain('Missing capability');
|
|
72
|
+
});
|
|
73
|
+
it('should track action history', async () => {
|
|
74
|
+
await agent.requestAction({ type: 'read', resource: 'file1.txt' });
|
|
75
|
+
await agent.requestAction({ type: 'write', resource: 'file2.txt' });
|
|
76
|
+
const history = agent.getActionHistory();
|
|
77
|
+
expect(history.length).toBe(2);
|
|
78
|
+
expect(history[0].action).toBe('read');
|
|
79
|
+
expect(history[1].action).toBe('write');
|
|
80
|
+
});
|
|
81
|
+
it('should provide trust info', async () => {
|
|
82
|
+
const trustInfo = await agent.getTrustInfo();
|
|
83
|
+
expect(trustInfo.score).toBe(500); // Default start
|
|
84
|
+
expect(trustInfo.tierName).toBe('Monitored'); // T3
|
|
85
|
+
expect(trustInfo.tierNumber).toBe(3);
|
|
86
|
+
expect(trustInfo.observationTier).toBe('GRAY_BOX');
|
|
87
|
+
});
|
|
88
|
+
it('should increase trust on success', async () => {
|
|
89
|
+
const initialTrustInfo = await agent.getTrustInfo();
|
|
90
|
+
const initialScore = initialTrustInfo.score;
|
|
91
|
+
await agent.reportSuccess('read');
|
|
92
|
+
const newTrustInfo = await agent.getTrustInfo();
|
|
93
|
+
expect(newTrustInfo.score).toBeGreaterThan(initialScore);
|
|
94
|
+
});
|
|
95
|
+
it('should decrease trust on failure (asymmetric)', async () => {
|
|
96
|
+
const initialTrustInfo = await agent.getTrustInfo();
|
|
97
|
+
const initialScore = initialTrustInfo.score;
|
|
98
|
+
await agent.reportFailure('write', 'Permission denied');
|
|
99
|
+
const newTrustInfo = await agent.getTrustInfo();
|
|
100
|
+
expect(newTrustInfo.score).toBeLessThan(initialScore);
|
|
101
|
+
// Asymmetric: failure should decrease more than success increases
|
|
102
|
+
expect(initialScore - newTrustInfo.score).toBeGreaterThan(10);
|
|
103
|
+
});
|
|
104
|
+
it('should apply constraints based on tier', async () => {
|
|
105
|
+
const result = await agent.requestAction({
|
|
106
|
+
type: 'read',
|
|
107
|
+
resource: 'documents/test.pdf',
|
|
108
|
+
});
|
|
109
|
+
expect(result.constraints).toBeDefined();
|
|
110
|
+
expect(result.constraints?.some((c) => c.includes('rate_limit'))).toBe(true);
|
|
111
|
+
});
|
|
112
|
+
it('should return capabilities', () => {
|
|
113
|
+
const caps = agent.getCapabilities();
|
|
114
|
+
expect(caps).toContain('read');
|
|
115
|
+
expect(caps).toContain('write');
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
describe('Trust Tiers', () => {
|
|
119
|
+
it('should correctly identify tier from score', async () => {
|
|
120
|
+
const agent = await vorion.registerAgent({
|
|
121
|
+
agentId: 'tier-test',
|
|
122
|
+
name: 'Tier Test',
|
|
123
|
+
capabilities: ['read'],
|
|
124
|
+
});
|
|
125
|
+
// Default is 500 = T3 Monitored
|
|
126
|
+
const initialTrustInfo = await agent.getTrustInfo();
|
|
127
|
+
expect(initialTrustInfo.tierName).toBe('Monitored');
|
|
128
|
+
// Decrease trust significantly
|
|
129
|
+
for (let i = 0; i < 20; i++) {
|
|
130
|
+
await agent.reportFailure('read');
|
|
131
|
+
}
|
|
132
|
+
// Should be at lower tier now
|
|
133
|
+
const newTrustInfo = await agent.getTrustInfo();
|
|
134
|
+
expect(newTrustInfo.tierNumber).toBeLessThan(3);
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
describe('Remote mode configuration', () => {
|
|
138
|
+
it('should require apiKey for remote mode', () => {
|
|
139
|
+
expect(() => {
|
|
140
|
+
new Vorion({
|
|
141
|
+
apiEndpoint: 'http://localhost:3000',
|
|
142
|
+
// No apiKey provided
|
|
143
|
+
});
|
|
144
|
+
}).toThrow('apiKey is required for remote mode');
|
|
145
|
+
});
|
|
146
|
+
it('should default to local mode without apiEndpoint', () => {
|
|
147
|
+
const v = new Vorion({});
|
|
148
|
+
expect(v.isLocalMode()).toBe(true);
|
|
149
|
+
});
|
|
150
|
+
it('should enable remote mode with apiEndpoint and apiKey', () => {
|
|
151
|
+
const v = new Vorion({
|
|
152
|
+
apiEndpoint: 'http://localhost:3000',
|
|
153
|
+
apiKey: 'test-key',
|
|
154
|
+
});
|
|
155
|
+
expect(v.isLocalMode()).toBe(false);
|
|
156
|
+
});
|
|
157
|
+
it('should return local health check in local mode', async () => {
|
|
158
|
+
const health = await vorion.healthCheck();
|
|
159
|
+
expect(health.status).toBe('healthy');
|
|
160
|
+
expect(health.version).toBe('local');
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
//# sourceMappingURL=sdk.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk.test.js","sourceRoot":"","sources":["../../src/__tests__/sdk.test.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @vorionsys/sdk - Vorion SDK
|
|
3
|
+
*
|
|
4
|
+
* Simple, developer-friendly interface for AI agent governance.
|
|
5
|
+
* Supports both local mode (in-memory) and remote mode (cognigate-api).
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
export type { TrustTier, DecisionTier, AgentCredentials, Action, TrustSignal, } from '@vorionsys/runtime';
|
|
10
|
+
/**
|
|
11
|
+
* SDK Configuration
|
|
12
|
+
*/
|
|
13
|
+
export interface VorionConfig {
|
|
14
|
+
/** API endpoint for hosted Cognigate */
|
|
15
|
+
apiEndpoint?: string;
|
|
16
|
+
/** API key for authentication */
|
|
17
|
+
apiKey?: string;
|
|
18
|
+
/** Default observation tier for agents */
|
|
19
|
+
defaultObservationTier?: 'BLACK_BOX' | 'GRAY_BOX' | 'WHITE_BOX';
|
|
20
|
+
/** Enable local mode (no API calls). If false and apiEndpoint is provided, uses remote mode. */
|
|
21
|
+
localMode?: boolean;
|
|
22
|
+
/** Request timeout in ms (default: 30000) */
|
|
23
|
+
timeout?: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Agent registration options
|
|
27
|
+
*/
|
|
28
|
+
export interface AgentOptions {
|
|
29
|
+
/** Unique agent identifier */
|
|
30
|
+
agentId: string;
|
|
31
|
+
/** Human-readable name */
|
|
32
|
+
name: string;
|
|
33
|
+
/** Agent capabilities/permissions */
|
|
34
|
+
capabilities?: string[];
|
|
35
|
+
/** Observation tier */
|
|
36
|
+
observationTier?: 'BLACK_BOX' | 'GRAY_BOX' | 'WHITE_BOX';
|
|
37
|
+
/** Additional metadata */
|
|
38
|
+
metadata?: Record<string, unknown>;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Result of an action request
|
|
42
|
+
*/
|
|
43
|
+
export interface ActionResult {
|
|
44
|
+
/** Whether the action was allowed */
|
|
45
|
+
allowed: boolean;
|
|
46
|
+
/** Decision tier (GREEN/YELLOW/RED) */
|
|
47
|
+
tier: 'GREEN' | 'YELLOW' | 'RED';
|
|
48
|
+
/** Human-readable reason */
|
|
49
|
+
reason: string;
|
|
50
|
+
/** Proof commitment ID for audit */
|
|
51
|
+
proofId: string;
|
|
52
|
+
/** Any constraints applied */
|
|
53
|
+
constraints?: string[];
|
|
54
|
+
/** Processing time in ms (remote mode only) */
|
|
55
|
+
processingTimeMs?: number;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Trust score information
|
|
59
|
+
*/
|
|
60
|
+
export interface TrustInfo {
|
|
61
|
+
/** Current trust score (0-1000) */
|
|
62
|
+
score: number;
|
|
63
|
+
/** Trust tier name */
|
|
64
|
+
tierName: string;
|
|
65
|
+
/** Trust tier number (0-7) */
|
|
66
|
+
tierNumber: number;
|
|
67
|
+
/** Observation tier */
|
|
68
|
+
observationTier: string;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* API Client for cognigate-api
|
|
72
|
+
*/
|
|
73
|
+
declare class ApiClient {
|
|
74
|
+
private baseUrl;
|
|
75
|
+
private apiKey;
|
|
76
|
+
private timeout;
|
|
77
|
+
constructor(baseUrl: string, apiKey: string, timeout?: number);
|
|
78
|
+
request<T>(method: string, path: string, body?: unknown): Promise<T>;
|
|
79
|
+
submitIntent(payload: {
|
|
80
|
+
agentId: string;
|
|
81
|
+
agentName?: string;
|
|
82
|
+
capabilities?: string[];
|
|
83
|
+
observationTier?: string;
|
|
84
|
+
action: {
|
|
85
|
+
type: string;
|
|
86
|
+
resource: string;
|
|
87
|
+
parameters?: Record<string, unknown>;
|
|
88
|
+
};
|
|
89
|
+
}): Promise<{
|
|
90
|
+
intentId: string;
|
|
91
|
+
allowed: boolean;
|
|
92
|
+
tier: string;
|
|
93
|
+
reason: string;
|
|
94
|
+
proofId: string;
|
|
95
|
+
constraints?: string[] | undefined;
|
|
96
|
+
processingTimeMs: number;
|
|
97
|
+
}>;
|
|
98
|
+
checkIntent(payload: {
|
|
99
|
+
agentId: string;
|
|
100
|
+
agentName?: string;
|
|
101
|
+
capabilities?: string[];
|
|
102
|
+
observationTier?: string;
|
|
103
|
+
action: {
|
|
104
|
+
type: string;
|
|
105
|
+
resource: string;
|
|
106
|
+
};
|
|
107
|
+
}): Promise<{
|
|
108
|
+
wouldAllow: boolean;
|
|
109
|
+
tier: string;
|
|
110
|
+
reason: string;
|
|
111
|
+
}>;
|
|
112
|
+
admitAgent(payload: {
|
|
113
|
+
agentId: string;
|
|
114
|
+
name: string;
|
|
115
|
+
capabilities: string[];
|
|
116
|
+
observationTier: string;
|
|
117
|
+
}): Promise<{
|
|
118
|
+
admitted: boolean;
|
|
119
|
+
initialTier: number;
|
|
120
|
+
initialScore: number;
|
|
121
|
+
observationCeiling: number;
|
|
122
|
+
capabilities: string[];
|
|
123
|
+
expiresAt: string;
|
|
124
|
+
reason?: string | undefined;
|
|
125
|
+
}>;
|
|
126
|
+
getTrustInfo(agentId: string): Promise<{
|
|
127
|
+
agentId: string;
|
|
128
|
+
score: number | null;
|
|
129
|
+
tier: number | null;
|
|
130
|
+
tierName: string | null;
|
|
131
|
+
observationCeiling?: number | undefined;
|
|
132
|
+
message?: string | undefined;
|
|
133
|
+
}>;
|
|
134
|
+
recordSignal(agentId: string, payload: {
|
|
135
|
+
type: 'success' | 'failure' | 'violation' | 'neutral';
|
|
136
|
+
source: string;
|
|
137
|
+
weight?: number;
|
|
138
|
+
context?: Record<string, unknown>;
|
|
139
|
+
}): Promise<{
|
|
140
|
+
accepted: boolean;
|
|
141
|
+
scoreBefore: number;
|
|
142
|
+
scoreAfter: number;
|
|
143
|
+
change: number;
|
|
144
|
+
newTier: number | null;
|
|
145
|
+
newTierName: string | null;
|
|
146
|
+
}>;
|
|
147
|
+
health(): Promise<{
|
|
148
|
+
status: string;
|
|
149
|
+
version: string;
|
|
150
|
+
}>;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Vorion SDK Client
|
|
154
|
+
*
|
|
155
|
+
* Simple interface for agent governance.
|
|
156
|
+
*
|
|
157
|
+
* @example
|
|
158
|
+
* ```typescript
|
|
159
|
+
* // Local mode (in-memory, for testing)
|
|
160
|
+
* const vorion = new Vorion({ localMode: true });
|
|
161
|
+
*
|
|
162
|
+
* // Remote mode (cognigate-api)
|
|
163
|
+
* const vorion = new Vorion({
|
|
164
|
+
* apiEndpoint: 'http://localhost:3000',
|
|
165
|
+
* apiKey: 'vorion-dev-key-12345',
|
|
166
|
+
* });
|
|
167
|
+
*
|
|
168
|
+
* const agent = vorion.registerAgent({
|
|
169
|
+
* agentId: 'my-agent',
|
|
170
|
+
* name: 'My AI Agent',
|
|
171
|
+
* capabilities: ['read:*', 'write:*'],
|
|
172
|
+
* });
|
|
173
|
+
*
|
|
174
|
+
* const result = await agent.requestAction({
|
|
175
|
+
* type: 'read',
|
|
176
|
+
* resource: 'documents/report.pdf',
|
|
177
|
+
* });
|
|
178
|
+
*
|
|
179
|
+
* if (result.allowed) {
|
|
180
|
+
* // Perform the action
|
|
181
|
+
* await agent.reportSuccess('read');
|
|
182
|
+
* } else {
|
|
183
|
+
* console.log('Denied:', result.reason);
|
|
184
|
+
* }
|
|
185
|
+
* ```
|
|
186
|
+
*/
|
|
187
|
+
export declare class Vorion {
|
|
188
|
+
private config;
|
|
189
|
+
private agents;
|
|
190
|
+
private apiClient;
|
|
191
|
+
constructor(config?: VorionConfig);
|
|
192
|
+
/**
|
|
193
|
+
* Register an agent with the governance system
|
|
194
|
+
*/
|
|
195
|
+
registerAgent(options: AgentOptions): Promise<Agent>;
|
|
196
|
+
/**
|
|
197
|
+
* Get a registered agent by ID
|
|
198
|
+
*/
|
|
199
|
+
getAgent(agentId: string): Agent | undefined;
|
|
200
|
+
/**
|
|
201
|
+
* Get all registered agents
|
|
202
|
+
*/
|
|
203
|
+
getAllAgents(): Agent[];
|
|
204
|
+
/**
|
|
205
|
+
* Get SDK configuration
|
|
206
|
+
*/
|
|
207
|
+
getConfig(): VorionConfig;
|
|
208
|
+
/**
|
|
209
|
+
* Get the API client (for advanced use)
|
|
210
|
+
*/
|
|
211
|
+
getApiClient(): ApiClient | null;
|
|
212
|
+
/**
|
|
213
|
+
* Check if running in local mode
|
|
214
|
+
*/
|
|
215
|
+
isLocalMode(): boolean;
|
|
216
|
+
/**
|
|
217
|
+
* Health check (remote mode only)
|
|
218
|
+
*/
|
|
219
|
+
healthCheck(): Promise<{
|
|
220
|
+
status: string;
|
|
221
|
+
version: string;
|
|
222
|
+
}>;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Agent wrapper for simplified governance interactions
|
|
226
|
+
*/
|
|
227
|
+
export declare class Agent {
|
|
228
|
+
private sdk;
|
|
229
|
+
private options;
|
|
230
|
+
private localTrustScore;
|
|
231
|
+
private actionHistory;
|
|
232
|
+
constructor(sdk: Vorion, options: AgentOptions);
|
|
233
|
+
/**
|
|
234
|
+
* Request permission to perform an action
|
|
235
|
+
*/
|
|
236
|
+
requestAction(action: {
|
|
237
|
+
type: string;
|
|
238
|
+
resource: string;
|
|
239
|
+
parameters?: Record<string, unknown>;
|
|
240
|
+
}): Promise<ActionResult>;
|
|
241
|
+
/**
|
|
242
|
+
* Report action completion (positive signal)
|
|
243
|
+
*/
|
|
244
|
+
reportSuccess(actionType: string): Promise<void>;
|
|
245
|
+
/**
|
|
246
|
+
* Report action failure (negative signal)
|
|
247
|
+
*/
|
|
248
|
+
reportFailure(actionType: string, reason?: string): Promise<void>;
|
|
249
|
+
/**
|
|
250
|
+
* Get current trust information
|
|
251
|
+
*/
|
|
252
|
+
getTrustInfo(): Promise<TrustInfo>;
|
|
253
|
+
/**
|
|
254
|
+
* Get agent ID
|
|
255
|
+
*/
|
|
256
|
+
getId(): string;
|
|
257
|
+
/**
|
|
258
|
+
* Get agent name
|
|
259
|
+
*/
|
|
260
|
+
getName(): string;
|
|
261
|
+
/**
|
|
262
|
+
* Get agent capabilities
|
|
263
|
+
*/
|
|
264
|
+
getCapabilities(): string[];
|
|
265
|
+
/**
|
|
266
|
+
* Get action history
|
|
267
|
+
*/
|
|
268
|
+
getActionHistory(): Array<{
|
|
269
|
+
action: string;
|
|
270
|
+
allowed: boolean;
|
|
271
|
+
timestamp: number;
|
|
272
|
+
}>;
|
|
273
|
+
private getTierNumber;
|
|
274
|
+
private getTierName;
|
|
275
|
+
private getConstraintsForTier;
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Create a new Vorion SDK instance
|
|
279
|
+
*/
|
|
280
|
+
export declare function createVorion(config?: VorionConfig): Vorion;
|
|
281
|
+
export default Vorion;
|
|
282
|
+
//# 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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"}
|