agentlock-shared 0.1.0 → 0.2.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.
Files changed (42) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/.turbo/turbo-test.log +57 -15
  3. package/dist/__tests__/crypto.test.js +137 -47
  4. package/dist/__tests__/crypto.test.js.map +1 -1
  5. package/dist/__tests__/messaging.test.d.ts +2 -0
  6. package/dist/__tests__/messaging.test.d.ts.map +1 -0
  7. package/dist/__tests__/messaging.test.js +75 -0
  8. package/dist/__tests__/messaging.test.js.map +1 -0
  9. package/dist/__tests__/policy.test.js +124 -7
  10. package/dist/__tests__/policy.test.js.map +1 -1
  11. package/dist/__tests__/signing.test (# Edit conflict 2026-04-01 z3etfmC #).js +51 -0
  12. package/dist/__tests__/signing.test.js (# Edit conflict 2026-04-01 4rndy9C #).map +1 -0
  13. package/dist/crypto.d.ts +36 -0
  14. package/dist/crypto.d.ts.map +1 -1
  15. package/dist/crypto.js +150 -5
  16. package/dist/crypto.js.map +1 -1
  17. package/dist/plans.d.ts +4 -0
  18. package/dist/plans.d.ts.map +1 -1
  19. package/dist/plans.js +16 -0
  20. package/dist/plans.js.map +1 -1
  21. package/dist/policy.d.ts.map +1 -1
  22. package/dist/policy.js +54 -29
  23. package/dist/policy.js.map +1 -1
  24. package/dist/redact.d.ts.map +1 -1
  25. package/dist/redact.js +21 -4
  26. package/dist/redact.js.map +1 -1
  27. package/dist/schemas.d.ts +72 -11
  28. package/dist/schemas.d.ts.map +1 -1
  29. package/dist/schemas.js +62 -10
  30. package/dist/schemas.js.map +1 -1
  31. package/dist/types.d.ts +1 -0
  32. package/dist/types.d.ts.map +1 -1
  33. package/package.json +1 -1
  34. package/src/__tests__/crypto.test.ts +169 -0
  35. package/src/__tests__/messaging.test.ts +83 -0
  36. package/src/__tests__/policy.test.ts +141 -7
  37. package/src/crypto.ts +153 -5
  38. package/src/plans.ts +20 -0
  39. package/src/policy.ts +58 -28
  40. package/src/redact.ts +20 -3
  41. package/src/schemas.ts +121 -53
  42. package/src/types.ts +1 -0
@@ -1,4 +1,4 @@
1
1
 
2
- > @agentlock/shared@0.1.0 build D:\agentlock\packages\shared
2
+ > agentlock-shared@0.1.0 build D:\agentlock\packages\shared
3
3
  > tsc
4
4
 
@@ -1,34 +1,76 @@
1
1
 
2
- > @agentlock/shared@0.1.0 test D:\agentlock\packages\shared
2
+ > agentlock-shared@0.1.0 test D:\agentlock\packages\shared
3
3
  > vitest run
4
4
 
5
5
  ▲ [WARNING] The condition "types" here will never be used as it comes after both "import" and "require" [package.json]
6
6
 
7
- package.json:11:6:
8
- 11 │ "types": "./dist/index.d.ts"
7
+ package.json:10:6:
8
+ 10 │ "types": "./dist/index.d.ts"
9
9
  ╵ ~~~~~~~
10
10
 
11
11
  The "import" condition comes earlier and will be used for all "import" statements:
12
12
 
13
- package.json:9:6:
14
- 9 │ "import": "./dist/index.js",
13
+ package.json:8:6:
14
+ 8 │ "import": "./dist/index.js",
15
15
  ╵ ~~~~~~~~
16
16
 
17
17
  The "require" condition comes earlier and will be used for all "require" calls:
18
18
 
19
- package.json:10:6:
20
- 10 │ "require": "./dist/index.js",
21
- ╵ ~~~~~~~~~
19
+ package.json:9:6:
20
+ 9 │ "require": "./dist/index.js",
21
+ ╵ ~~~~~~~~~
22
22
 
23
23
 
24
24
   RUN  v4.0.18 D:/agentlock/packages/shared
25
25
 
26
- ✓ src/__tests__/redact.test.ts (5 tests) 4ms
27
- ✓ src/__tests__/policy.test.ts (7 tests) 4ms
28
- ✓ src/__tests__/signing.test.ts (7 tests) 68ms
26
+ ❯ src/__tests__/policy.test.ts (21 tests | 1 failed) 12ms
27
+  × should ALLOW read actions by default 7ms
28
+ ✓ should REQUIRE_APPROVAL for write actions 0ms
29
+ ✓ should BLOCK admin actions 0ms
30
+ ✓ should REQUIRE_APPROVAL for financial actions 0ms
31
+ ✓ should BLOCK disallowed HTTP domains 0ms
32
+ ✓ should BLOCK explicitly blocklisted domains 0ms
33
+ ✓ should REQUIRE_APPROVAL for admin actions even when defaultMode is allow 0ms
34
+ ✓ should REQUIRE_APPROVAL for financial actions even when defaultMode is allow 0ms
35
+ ✓ should REQUIRE_APPROVAL for admin action even with explicit ALLOW rule 0ms
36
+ ✓ should REQUIRE_APPROVAL for financial action even with explicit ALLOW rule 0ms
37
+ ✓ should still respect explicit rules for admin even with defaultMode allow 0ms
38
+ ✓ should BLOCK when cost exceeds limit 0ms
39
+ ✓ should enforce HTTP domain allowlist even with mixed-case tool name 0ms
40
+ ✓ should match tool-specific rules case-insensitively 0ms
41
+ ✓ should not match subdomain of blocklisted domain (e.g., notevil.com vs evil.com) 0ms
42
+ ✓ should BLOCK HTTP tool with no URL in payload 0ms
43
+ ✓ should REQUIRE_APPROVAL for browser.open 0ms
44
+ ✓ should BLOCK browser.* actions without a session (reaching policy engine) 0ms
45
+ ✓ should BLOCK unknown action types 0ms
46
+ ✓ should not enforce budget check when cost_estimate is omitted 0ms
47
+ ✓ should REQUIRE_APPROVAL when HTTP allowlist is empty (safe default) 0ms
48
+ ✓ src/__tests__/redact.test.ts (5 tests) 5ms
49
+ ✓ src/__tests__/signing.test.ts (7 tests) 73ms
50
+ ✓ src/__tests__/messaging.test.ts (11 tests) 7ms
51
+
52
+ ⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯
53
+
54
+  FAIL  src/__tests__/policy.test.ts > Policy Engine > should ALLOW read actions by default
55
+ AssertionError: expected 'BLOCK' to be 'ALLOW' // Object.is equality
56
+
57
+ Expected: "ALLOW"
58
+ Received: "BLOCK"
59
+
60
+  ❯ src/__tests__/policy.test.ts:8:67
61
+  6|  it('should ALLOW read actions by default', () => {
62
+  7|  const action: AgentActionRequest = { action_type: 'read', tool: 'h…
63
+  8|  expect(evaluatePolicy(action, DEFAULT_POLICY_RULES).decision).toBe…
64
+  |  ^
65
+  9|  });
66
+  10| 
67
+
68
+ ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯
69
+
29
70
 
30
-  Test Files  3 passed (3)
31
-  Tests  19 passed (19)
32
-  Start at  21:09:06
33
-  Duration  482ms (transform 192ms, setup 0ms, import 287ms, tests 75ms, environment 0ms)
71
+  Test Files  1 failed | 3 passed (4)
72
+  Tests  1 failed | 43 passed (44)
73
+  Start at  00:05:31
74
+  Duration  738ms (transform 982ms, setup 0ms, import 1.39s, tests 96ms, environment 1ms)
34
75
 
76
+  ELIFECYCLE  Test failed. See above for more details.
@@ -1,53 +1,143 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  const vitest_1 = require("vitest");
4
- const crypto_1 = require("../crypto");
5
- (0, vitest_1.describe)('crypto', () => {
6
- (0, vitest_1.describe)('encrypt / decrypt', () => {
7
- (0, vitest_1.it)('roundtrips plaintext', () => {
8
- const key = (0, crypto_1.generateKey)();
9
- const plaintext = 'Hello, world!';
10
- const encrypted = (0, crypto_1.encrypt)(plaintext, key);
11
- (0, vitest_1.expect)((0, crypto_1.decrypt)(encrypted, key)).toBe(plaintext);
12
- });
13
- (0, vitest_1.it)('throws with wrong key', () => {
14
- const key = (0, crypto_1.generateKey)();
15
- const wrongKey = (0, crypto_1.generateKey)();
16
- const encrypted = (0, crypto_1.encrypt)('secret', key);
17
- (0, vitest_1.expect)(() => (0, crypto_1.decrypt)(encrypted, wrongKey)).toThrow('Decryption failed');
18
- });
19
- (0, vitest_1.it)('handles JSON payloads', () => {
20
- const key = (0, crypto_1.generateKey)();
21
- const data = JSON.stringify({ foo: 'bar', num: 42, arr: [1, 2, 3] });
22
- const encrypted = (0, crypto_1.encrypt)(data, key);
23
- (0, vitest_1.expect)(JSON.parse((0, crypto_1.decrypt)(encrypted, key))).toEqual(JSON.parse(data));
24
- });
25
- });
26
- (0, vitest_1.describe)('encryptDEK / decryptDEK', () => {
27
- (0, vitest_1.it)('roundtrips a DEK through master key', () => {
28
- const masterKey = (0, crypto_1.generateKey)();
29
- const dek = (0, crypto_1.generateKey)();
30
- const encrypted = (0, crypto_1.encryptDEK)(dek, masterKey);
31
- const decrypted = (0, crypto_1.decryptDEK)(encrypted, masterKey);
32
- (0, vitest_1.expect)(Buffer.from(decrypted).equals(Buffer.from(dek))).toBe(true);
33
- });
34
- });
35
- (0, vitest_1.describe)('encryptCredential / decryptCredential', () => {
36
- (0, vitest_1.it)('roundtrips a credential payload', () => {
37
- const masterKey = (0, crypto_1.generateKey)();
38
- const payload = { api_key: 'sk-test-123', endpoint: 'https://api.example.com' };
39
- const { encryptedDEK, encryptedPayload } = (0, crypto_1.encryptCredential)(payload, masterKey);
40
- (0, vitest_1.expect)(typeof encryptedDEK).toBe('string');
41
- (0, vitest_1.expect)(typeof encryptedPayload).toBe('string');
42
- const decrypted = (0, crypto_1.decryptCredential)(encryptedDEK, encryptedPayload, masterKey);
43
- (0, vitest_1.expect)(decrypted).toEqual(payload);
44
- });
45
- (0, vitest_1.it)('fails with wrong master key', () => {
46
- const masterKey = (0, crypto_1.generateKey)();
47
- const wrongKey = (0, crypto_1.generateKey)();
48
- const { encryptedDEK, encryptedPayload } = (0, crypto_1.encryptCredential)({ secret: 'value' }, masterKey);
49
- (0, vitest_1.expect)(() => (0, crypto_1.decryptCredential)(encryptedDEK, encryptedPayload, wrongKey)).toThrow();
50
- });
7
+ const tweetnacl_1 = __importDefault(require("tweetnacl"));
8
+ const crypto_js_1 = require("../crypto.js");
9
+ // Deterministic test key (not from env -- tests must not depend on MASTER_KEY)
10
+ const testMasterKey = tweetnacl_1.default.randomBytes(32);
11
+ (0, vitest_1.describe)('encrypt / decrypt (low-level)', () => {
12
+ (0, vitest_1.it)('round-trips a string', () => {
13
+ const data = 'hello world';
14
+ const encrypted = (0, crypto_js_1.encrypt)(data, testMasterKey);
15
+ (0, vitest_1.expect)(encrypted).not.toBe(data);
16
+ (0, vitest_1.expect)((0, crypto_js_1.decrypt)(encrypted, testMasterKey)).toBe(data);
17
+ });
18
+ (0, vitest_1.it)('produces different ciphertext each call (random nonce)', () => {
19
+ const data = 'deterministic?';
20
+ const a = (0, crypto_js_1.encrypt)(data, testMasterKey);
21
+ const b = (0, crypto_js_1.encrypt)(data, testMasterKey);
22
+ (0, vitest_1.expect)(a).not.toBe(b);
23
+ });
24
+ (0, vitest_1.it)('rejects wrong key', () => {
25
+ const data = 'secret';
26
+ const encrypted = (0, crypto_js_1.encrypt)(data, testMasterKey);
27
+ const wrongKey = tweetnacl_1.default.randomBytes(32);
28
+ (0, vitest_1.expect)(() => (0, crypto_js_1.decrypt)(encrypted, wrongKey)).toThrow('Decryption failed');
29
+ });
30
+ (0, vitest_1.it)('handles empty string', () => {
31
+ const encrypted = (0, crypto_js_1.encrypt)('', testMasterKey);
32
+ (0, vitest_1.expect)((0, crypto_js_1.decrypt)(encrypted, testMasterKey)).toBe('');
33
+ });
34
+ (0, vitest_1.it)('handles unicode', () => {
35
+ const data = 'Hello unicode world';
36
+ const encrypted = (0, crypto_js_1.encrypt)(data, testMasterKey);
37
+ (0, vitest_1.expect)((0, crypto_js_1.decrypt)(encrypted, testMasterKey)).toBe(data);
38
+ });
39
+ });
40
+ (0, vitest_1.describe)('envelopeEncrypt / envelopeDecrypt', () => {
41
+ (0, vitest_1.it)('round-trips a string', () => {
42
+ const data = 'envelope test data';
43
+ const encrypted = (0, crypto_js_1.envelopeEncrypt)(data, testMasterKey);
44
+ (0, vitest_1.expect)(encrypted).toMatch(/^env1:/);
45
+ (0, vitest_1.expect)((0, crypto_js_1.envelopeDecrypt)(encrypted, testMasterKey)).toBe(data);
46
+ });
47
+ (0, vitest_1.it)('produces different ciphertext each call (fresh DEK + nonce)', () => {
48
+ const data = 'same data';
49
+ const a = (0, crypto_js_1.envelopeEncrypt)(data, testMasterKey);
50
+ const b = (0, crypto_js_1.envelopeEncrypt)(data, testMasterKey);
51
+ (0, vitest_1.expect)(a).not.toBe(b);
52
+ });
53
+ (0, vitest_1.it)('rejects wrong master key', () => {
54
+ const data = 'secret';
55
+ const encrypted = (0, crypto_js_1.envelopeEncrypt)(data, testMasterKey);
56
+ const wrongKey = tweetnacl_1.default.randomBytes(32);
57
+ (0, vitest_1.expect)(() => (0, crypto_js_1.envelopeDecrypt)(encrypted, wrongKey)).toThrow();
58
+ });
59
+ (0, vitest_1.it)('handles empty string', () => {
60
+ const encrypted = (0, crypto_js_1.envelopeEncrypt)('', testMasterKey);
61
+ (0, vitest_1.expect)((0, crypto_js_1.envelopeDecrypt)(encrypted, testMasterKey)).toBe('');
62
+ });
63
+ (0, vitest_1.it)('handles large data', () => {
64
+ const data = 'x'.repeat(100_000);
65
+ const encrypted = (0, crypto_js_1.envelopeEncrypt)(data, testMasterKey);
66
+ (0, vitest_1.expect)((0, crypto_js_1.envelopeDecrypt)(encrypted, testMasterKey)).toBe(data);
67
+ });
68
+ (0, vitest_1.it)('handles JSON data', () => {
69
+ const obj = { tool: 'http', payload: { url: 'https://example.com' }, nested: [1, 2, 3] };
70
+ const data = JSON.stringify(obj);
71
+ const encrypted = (0, crypto_js_1.envelopeEncrypt)(data, testMasterKey);
72
+ const decrypted = JSON.parse((0, crypto_js_1.envelopeDecrypt)(encrypted, testMasterKey));
73
+ (0, vitest_1.expect)(decrypted).toEqual(obj);
74
+ });
75
+ (0, vitest_1.it)('envelopeDecrypt rejects non-envelope data', () => {
76
+ const legacy = (0, crypto_js_1.encrypt)('legacy data', testMasterKey);
77
+ (0, vitest_1.expect)(() => (0, crypto_js_1.envelopeDecrypt)(legacy, testMasterKey)).toThrow('missing env1: prefix');
78
+ });
79
+ (0, vitest_1.it)('rejects malformed envelope (no separator)', () => {
80
+ (0, vitest_1.expect)(() => (0, crypto_js_1.envelopeDecrypt)('env1:nodatahere', testMasterKey)).toThrow('missing DEK/payload separator');
81
+ });
82
+ (0, vitest_1.it)('rejects malformed envelope (empty parts)', () => {
83
+ // env1:: has withoutPrefix=":" where lastIndexOf(':') returns 0,
84
+ // caught by the separatorIndex <= 0 check
85
+ (0, vitest_1.expect)(() => (0, crypto_js_1.envelopeDecrypt)('env1::', testMasterKey)).toThrow('missing DEK/payload separator');
86
+ // env1:abc: has empty payload after separator
87
+ (0, vitest_1.expect)(() => (0, crypto_js_1.envelopeDecrypt)('env1:abc:', testMasterKey)).toThrow('empty DEK or payload');
88
+ });
89
+ });
90
+ (0, vitest_1.describe)('decrypt() backward compatibility', () => {
91
+ (0, vitest_1.it)('transparently decrypts envelope-encrypted data', () => {
92
+ const data = 'new envelope data';
93
+ const encrypted = (0, crypto_js_1.envelopeEncrypt)(data, testMasterKey);
94
+ // decrypt() should auto-detect the env1: prefix and handle it
95
+ (0, vitest_1.expect)((0, crypto_js_1.decrypt)(encrypted, testMasterKey)).toBe(data);
96
+ });
97
+ (0, vitest_1.it)('still decrypts legacy direct-encrypted data', () => {
98
+ const data = 'legacy direct data';
99
+ const encrypted = (0, crypto_js_1.encrypt)(data, testMasterKey);
100
+ // Legacy data should still work with decrypt()
101
+ (0, vitest_1.expect)((0, crypto_js_1.decrypt)(encrypted, testMasterKey)).toBe(data);
102
+ });
103
+ (0, vitest_1.it)('handles mixed legacy and envelope data in sequence', () => {
104
+ const legacyData = 'old format';
105
+ const envelopeData = 'new format';
106
+ const legacyEncrypted = (0, crypto_js_1.encrypt)(legacyData, testMasterKey);
107
+ const envelopeEncrypted = (0, crypto_js_1.envelopeEncrypt)(envelopeData, testMasterKey);
108
+ // Both should decrypt through the same decrypt() function
109
+ (0, vitest_1.expect)((0, crypto_js_1.decrypt)(legacyEncrypted, testMasterKey)).toBe(legacyData);
110
+ (0, vitest_1.expect)((0, crypto_js_1.decrypt)(envelopeEncrypted, testMasterKey)).toBe(envelopeData);
111
+ });
112
+ });
113
+ (0, vitest_1.describe)('encryptCredential / decryptCredential (existing DEK pattern)', () => {
114
+ (0, vitest_1.it)('still works correctly after envelope changes', () => {
115
+ const payload = { api_key: 'sk-test-12345', name: 'test-cred' };
116
+ const { encryptedDEK, encryptedPayload } = (0, crypto_js_1.encryptCredential)(payload, testMasterKey);
117
+ const decrypted = (0, crypto_js_1.decryptCredential)(encryptedDEK, encryptedPayload, testMasterKey);
118
+ (0, vitest_1.expect)(decrypted).toEqual(payload);
119
+ });
120
+ });
121
+ (0, vitest_1.describe)('envelope format structure', () => {
122
+ (0, vitest_1.it)('has exactly the env1:wrappedDEK:payload format', () => {
123
+ const encrypted = (0, crypto_js_1.envelopeEncrypt)('test', testMasterKey);
124
+ const parts = encrypted.split(':');
125
+ // Should be: "env1", wrappedDEK (base64), payload (base64)
126
+ (0, vitest_1.expect)(parts[0]).toBe('env1');
127
+ (0, vitest_1.expect)(parts.length).toBe(3);
128
+ // Both parts after prefix should be valid base64
129
+ (0, vitest_1.expect)(parts[1].length).toBeGreaterThan(0);
130
+ (0, vitest_1.expect)(parts[2].length).toBeGreaterThan(0);
131
+ });
132
+ (0, vitest_1.it)('base64 parts do not contain colons', () => {
133
+ // Run multiple times to catch edge cases with different random nonces
134
+ for (let i = 0; i < 20; i++) {
135
+ const encrypted = (0, crypto_js_1.envelopeEncrypt)(`test data ${i}`, testMasterKey);
136
+ const withoutPrefix = encrypted.slice(5); // remove "env1:"
137
+ const colonCount = (withoutPrefix.match(/:/g) || []).length;
138
+ // Exactly one colon separating wrappedDEK and payload
139
+ (0, vitest_1.expect)(colonCount).toBe(1);
140
+ }
51
141
  });
52
142
  });
53
143
  //# sourceMappingURL=crypto.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"crypto.test.js","sourceRoot":"","sources":["../../src/__tests__/crypto.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"crypto.test.js","sourceRoot":"","sources":["../../src/__tests__/crypto.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=messaging.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messaging.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/messaging.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const schemas_1 = require("../schemas");
5
+ (0, vitest_1.describe)('SendMessageSchema', () => {
6
+ (0, vitest_1.it)('accepts valid message with content only', () => {
7
+ const result = schemas_1.SendMessageSchema.safeParse({ content: 'Hello agent' });
8
+ (0, vitest_1.expect)(result.success).toBe(true);
9
+ });
10
+ (0, vitest_1.it)('accepts message with thread_id and expires_at', () => {
11
+ const result = schemas_1.SendMessageSchema.safeParse({
12
+ content: 'Do this task',
13
+ thread_id: '550e8400-e29b-41d4-a716-446655440000',
14
+ expires_at: '2026-04-01T12:00:00Z',
15
+ });
16
+ (0, vitest_1.expect)(result.success).toBe(true);
17
+ });
18
+ (0, vitest_1.it)('rejects empty content', () => {
19
+ const result = schemas_1.SendMessageSchema.safeParse({ content: '' });
20
+ (0, vitest_1.expect)(result.success).toBe(false);
21
+ });
22
+ (0, vitest_1.it)('rejects content over 4096 chars', () => {
23
+ const result = schemas_1.SendMessageSchema.safeParse({ content: 'x'.repeat(4097) });
24
+ (0, vitest_1.expect)(result.success).toBe(false);
25
+ });
26
+ (0, vitest_1.it)('rejects invalid thread_id', () => {
27
+ const result = schemas_1.SendMessageSchema.safeParse({ content: 'hi', thread_id: 'not-a-uuid' });
28
+ (0, vitest_1.expect)(result.success).toBe(false);
29
+ });
30
+ });
31
+ (0, vitest_1.describe)('AgentSendMessageSchema', () => {
32
+ (0, vitest_1.it)('requires thread_id', () => {
33
+ const result = schemas_1.AgentSendMessageSchema.safeParse({ content: 'Reply' });
34
+ (0, vitest_1.expect)(result.success).toBe(false);
35
+ });
36
+ (0, vitest_1.it)('accepts valid reply', () => {
37
+ const result = schemas_1.AgentSendMessageSchema.safeParse({
38
+ content: 'I found 3 files',
39
+ thread_id: '550e8400-e29b-41d4-a716-446655440000',
40
+ });
41
+ (0, vitest_1.expect)(result.success).toBe(true);
42
+ });
43
+ });
44
+ (0, vitest_1.describe)('ApproveRequestSchema with reply_message', () => {
45
+ (0, vitest_1.it)('accepts approve without reply', () => {
46
+ const result = schemas_1.ApproveRequestSchema.safeParse({ action: 'approve' });
47
+ (0, vitest_1.expect)(result.success).toBe(true);
48
+ });
49
+ (0, vitest_1.it)('accepts approve with reply_message', () => {
50
+ const result = schemas_1.ApproveRequestSchema.safeParse({
51
+ action: 'approve',
52
+ reply_message: 'Only delete files older than 7 days',
53
+ });
54
+ (0, vitest_1.expect)(result.success).toBe(true);
55
+ if (result.success) {
56
+ (0, vitest_1.expect)(result.data.reply_message).toBe('Only delete files older than 7 days');
57
+ }
58
+ });
59
+ (0, vitest_1.it)('accepts deny with reason and reply_message', () => {
60
+ const result = schemas_1.ApproveRequestSchema.safeParse({
61
+ action: 'deny',
62
+ reason: 'Too risky',
63
+ reply_message: 'Try a safer approach',
64
+ });
65
+ (0, vitest_1.expect)(result.success).toBe(true);
66
+ });
67
+ (0, vitest_1.it)('rejects reply_message over 2000 chars', () => {
68
+ const result = schemas_1.ApproveRequestSchema.safeParse({
69
+ action: 'approve',
70
+ reply_message: 'x'.repeat(2001),
71
+ });
72
+ (0, vitest_1.expect)(result.success).toBe(false);
73
+ });
74
+ });
75
+ //# sourceMappingURL=messaging.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messaging.test.js","sourceRoot":"","sources":["../../src/__tests__/messaging.test.ts"],"names":[],"mappings":";;AAAA,mCAA8C;AAC9C,wCAA6F;AAE7F,IAAA,iBAAQ,EAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAA,WAAE,EAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,MAAM,GAAG,2BAAiB,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;QACvE,IAAA,eAAM,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,MAAM,GAAG,2BAAiB,CAAC,SAAS,CAAC;YACzC,OAAO,EAAE,cAAc;YACvB,SAAS,EAAE,sCAAsC;YACjD,UAAU,EAAE,sBAAsB;SACnC,CAAC,CAAC;QACH,IAAA,eAAM,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/B,MAAM,MAAM,GAAG,2BAAiB,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5D,IAAA,eAAM,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,MAAM,GAAG,2BAAiB,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1E,IAAA,eAAM,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,MAAM,GAAG,2BAAiB,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;QACvF,IAAA,eAAM,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAA,iBAAQ,EAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,IAAA,WAAE,EAAC,oBAAoB,EAAE,GAAG,EAAE;QAC5B,MAAM,MAAM,GAAG,gCAAsB,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QACtE,IAAA,eAAM,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,qBAAqB,EAAE,GAAG,EAAE;QAC7B,MAAM,MAAM,GAAG,gCAAsB,CAAC,SAAS,CAAC;YAC9C,OAAO,EAAE,iBAAiB;YAC1B,SAAS,EAAE,sCAAsC;SAClD,CAAC,CAAC;QACH,IAAA,eAAM,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAA,iBAAQ,EAAC,yCAAyC,EAAE,GAAG,EAAE;IACvD,IAAA,WAAE,EAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,MAAM,GAAG,8BAAoB,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QACrE,IAAA,eAAM,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,MAAM,GAAG,8BAAoB,CAAC,SAAS,CAAC;YAC5C,MAAM,EAAE,SAAS;YACjB,aAAa,EAAE,qCAAqC;SACrD,CAAC,CAAC;QACH,IAAA,eAAM,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,IAAA,eAAM,EAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QAChF,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,MAAM,GAAG,8BAAoB,CAAC,SAAS,CAAC;YAC5C,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,WAAW;YACnB,aAAa,EAAE,sBAAsB;SACtC,CAAC,CAAC;QACH,IAAA,eAAM,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,MAAM,GAAG,8BAAoB,CAAC,SAAS,CAAC;YAC5C,MAAM,EAAE,SAAS;YACjB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;SAChC,CAAC,CAAC;QACH,IAAA,eAAM,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -4,7 +4,8 @@ const vitest_1 = require("vitest");
4
4
  const policy_js_1 = require("../policy.js");
5
5
  (0, vitest_1.describe)('Policy Engine', () => {
6
6
  (0, vitest_1.it)('should ALLOW read actions by default', () => {
7
- const action = { action_type: 'read', tool: 'http', payload: {} };
7
+ // Use a non-http tool to test the default read policy (http without URL is now correctly blocked)
8
+ const action = { action_type: 'read', tool: 'demo.list', payload: {} };
8
9
  (0, vitest_1.expect)((0, policy_js_1.evaluatePolicy)(action, policy_js_1.DEFAULT_POLICY_RULES).decision).toBe('ALLOW');
9
10
  });
10
11
  (0, vitest_1.it)('should REQUIRE_APPROVAL for write actions', () => {
@@ -43,19 +44,37 @@ const policy_js_1 = require("../policy.js");
43
44
  };
44
45
  (0, vitest_1.expect)((0, policy_js_1.evaluatePolicy)(action, rules).decision).toBe('BLOCK');
45
46
  });
46
- (0, vitest_1.it)('should ALLOW admin actions when defaultMode is allow and no matching rule', () => {
47
+ (0, vitest_1.it)('should REQUIRE_APPROVAL for admin actions even when defaultMode is allow', () => {
47
48
  const action = { action_type: 'admin', tool: 'system', payload: {} };
48
49
  const rules = { ...policy_js_1.DEFAULT_POLICY_RULES, defaultMode: 'allow', rules: [] };
49
50
  const result = (0, policy_js_1.evaluatePolicy)(action, rules);
50
- (0, vitest_1.expect)(result.decision).toBe('ALLOW');
51
- (0, vitest_1.expect)(result.reason).toBe('Default policy');
51
+ (0, vitest_1.expect)(result.decision).toBe('REQUIRE_APPROVAL');
52
52
  });
53
- (0, vitest_1.it)('should ALLOW financial actions when defaultMode is allow and no matching rule', () => {
53
+ (0, vitest_1.it)('should REQUIRE_APPROVAL for financial actions even when defaultMode is allow', () => {
54
54
  const action = { action_type: 'financial', tool: 'stripe', payload: {} };
55
55
  const rules = { ...policy_js_1.DEFAULT_POLICY_RULES, defaultMode: 'allow', rules: [] };
56
56
  const result = (0, policy_js_1.evaluatePolicy)(action, rules);
57
- (0, vitest_1.expect)(result.decision).toBe('ALLOW');
58
- (0, vitest_1.expect)(result.reason).toBe('Default policy');
57
+ (0, vitest_1.expect)(result.decision).toBe('REQUIRE_APPROVAL');
58
+ });
59
+ (0, vitest_1.it)('should REQUIRE_APPROVAL for admin action even with explicit ALLOW rule', () => {
60
+ const action = { action_type: 'admin', tool: 'admin.delete_user', payload: {} };
61
+ const rules = {
62
+ ...policy_js_1.DEFAULT_POLICY_RULES,
63
+ defaultMode: 'allow',
64
+ rules: [{ action_type: 'admin', decision: 'ALLOW' }],
65
+ };
66
+ const result = (0, policy_js_1.evaluatePolicy)(action, rules);
67
+ (0, vitest_1.expect)(result.decision).toBe('REQUIRE_APPROVAL');
68
+ });
69
+ (0, vitest_1.it)('should REQUIRE_APPROVAL for financial action even with explicit ALLOW rule', () => {
70
+ const action = { action_type: 'financial', tool: 'stripe.charge', payload: {} };
71
+ const rules = {
72
+ ...policy_js_1.DEFAULT_POLICY_RULES,
73
+ defaultMode: 'allow',
74
+ rules: [{ action_type: 'financial', decision: 'ALLOW' }],
75
+ };
76
+ const result = (0, policy_js_1.evaluatePolicy)(action, rules);
77
+ (0, vitest_1.expect)(result.decision).toBe('REQUIRE_APPROVAL');
59
78
  });
60
79
  (0, vitest_1.it)('should still respect explicit rules for admin even with defaultMode allow', () => {
61
80
  const action = { action_type: 'admin', tool: 'system', payload: {} };
@@ -76,5 +95,103 @@ const policy_js_1 = require("../policy.js");
76
95
  const rules = { ...policy_js_1.DEFAULT_POLICY_RULES, limits: { maxCostPerAction: 100 } };
77
96
  (0, vitest_1.expect)((0, policy_js_1.evaluatePolicy)(action, rules).decision).toBe('BLOCK');
78
97
  });
98
+ // --- Case-sensitivity bypass tests ---
99
+ (0, vitest_1.it)('should enforce HTTP domain allowlist even with mixed-case tool name', () => {
100
+ const action = {
101
+ action_type: 'read',
102
+ tool: 'Http.get',
103
+ payload: { url: 'https://evil.com/data', method: 'GET' },
104
+ };
105
+ const rules = {
106
+ ...policy_js_1.DEFAULT_POLICY_RULES,
107
+ http: { allowedDomains: ['trusted.com'], allowedMethods: ['GET'], blockList: [] },
108
+ };
109
+ (0, vitest_1.expect)((0, policy_js_1.evaluatePolicy)(action, rules).decision).toBe('BLOCK');
110
+ });
111
+ (0, vitest_1.it)('should match tool-specific rules case-insensitively', () => {
112
+ const action = {
113
+ action_type: 'read',
114
+ tool: 'MCP.list_tools',
115
+ payload: {},
116
+ };
117
+ const result = (0, policy_js_1.evaluatePolicy)(action, policy_js_1.DEFAULT_POLICY_RULES);
118
+ (0, vitest_1.expect)(result.decision).toBe('ALLOW');
119
+ });
120
+ // --- URL edge cases ---
121
+ (0, vitest_1.it)('should not match subdomain of blocklisted domain (e.g., notevil.com vs evil.com)', () => {
122
+ const action = {
123
+ action_type: 'read',
124
+ tool: 'http.get',
125
+ payload: { url: 'https://notevil.com/data', method: 'GET' },
126
+ };
127
+ const rules = {
128
+ ...policy_js_1.DEFAULT_POLICY_RULES,
129
+ http: { allowedDomains: ['notevil.com', 'trusted.com'], allowedMethods: ['GET'], blockList: ['evil.com'] },
130
+ };
131
+ (0, vitest_1.expect)((0, policy_js_1.evaluatePolicy)(action, rules).decision).not.toBe('BLOCK');
132
+ });
133
+ (0, vitest_1.it)('should BLOCK HTTP tool with no URL in payload', () => {
134
+ const action = {
135
+ action_type: 'read',
136
+ tool: 'http.get',
137
+ payload: {},
138
+ };
139
+ const rules = {
140
+ ...policy_js_1.DEFAULT_POLICY_RULES,
141
+ http: { allowedDomains: ['trusted.com'], allowedMethods: ['GET'], blockList: [] },
142
+ };
143
+ (0, vitest_1.expect)((0, policy_js_1.evaluatePolicy)(action, rules).decision).toBe('BLOCK');
144
+ });
145
+ // --- Browser tool policy ---
146
+ (0, vitest_1.it)('should REQUIRE_APPROVAL for browser.open', () => {
147
+ const action = {
148
+ action_type: 'write',
149
+ tool: 'browser.open',
150
+ payload: { url: 'https://example.com' },
151
+ };
152
+ const result = (0, policy_js_1.evaluatePolicy)(action, policy_js_1.DEFAULT_POLICY_RULES);
153
+ (0, vitest_1.expect)(result.decision).toBe('REQUIRE_APPROVAL');
154
+ });
155
+ (0, vitest_1.it)('should BLOCK browser.* actions without a session (reaching policy engine)', () => {
156
+ const action = {
157
+ action_type: 'write',
158
+ tool: 'browser.click',
159
+ payload: {},
160
+ };
161
+ const result = (0, policy_js_1.evaluatePolicy)(action, policy_js_1.DEFAULT_POLICY_RULES);
162
+ (0, vitest_1.expect)(result.decision).toBe('BLOCK');
163
+ });
164
+ // --- Unknown action_type ---
165
+ (0, vitest_1.it)('should BLOCK unknown action types', () => {
166
+ const action = {
167
+ action_type: 'delete',
168
+ tool: 'custom.tool',
169
+ payload: {},
170
+ };
171
+ const result = (0, policy_js_1.evaluatePolicy)(action, policy_js_1.DEFAULT_POLICY_RULES);
172
+ (0, vitest_1.expect)(result.decision).toBe('BLOCK');
173
+ });
174
+ // --- cost_estimate omission ---
175
+ (0, vitest_1.it)('should not enforce budget check when cost_estimate is omitted', () => {
176
+ const action = {
177
+ action_type: 'write',
178
+ tool: 'demo',
179
+ payload: {},
180
+ // cost_estimate intentionally omitted
181
+ };
182
+ const rules = { ...policy_js_1.DEFAULT_POLICY_RULES, limits: { maxCostPerAction: 100 } };
183
+ // Should match action_type 'write' rule, not be BLOCK-ed by cost limit
184
+ (0, vitest_1.expect)((0, policy_js_1.evaluatePolicy)(action, rules).decision).toBe('REQUIRE_APPROVAL');
185
+ });
186
+ // --- HTTP allowlist not configured ---
187
+ (0, vitest_1.it)('should REQUIRE_APPROVAL when HTTP allowlist is empty (safe default)', () => {
188
+ const action = {
189
+ action_type: 'read',
190
+ tool: 'http.get',
191
+ payload: { url: 'https://any-site.com/data', method: 'GET' },
192
+ };
193
+ const result = (0, policy_js_1.evaluatePolicy)(action, policy_js_1.DEFAULT_POLICY_RULES);
194
+ (0, vitest_1.expect)(result.decision).toBe('REQUIRE_APPROVAL');
195
+ });
79
196
  });
80
197
  //# sourceMappingURL=policy.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"policy.test.js","sourceRoot":"","sources":["../../src/__tests__/policy.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"policy.test.js","sourceRoot":"","sources":["../../src/__tests__/policy.test.ts"],"names":[],"mappings":"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"}