@amaster.ai/pi-shared 0.1.2-beta.8 → 0.1.2-beta.80
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__/network-transport.test.d.ts +2 -0
- package/dist/__tests__/network-transport.test.d.ts.map +1 -0
- package/dist/__tests__/network-transport.test.js +47 -0
- package/dist/__tests__/network-transport.test.js.map +1 -0
- package/dist/__tests__/network.test.d.ts +2 -0
- package/dist/__tests__/network.test.d.ts.map +1 -0
- package/dist/__tests__/network.test.js +157 -0
- package/dist/__tests__/network.test.js.map +1 -0
- package/dist/__tests__/settings.test.js +124 -31
- package/dist/__tests__/settings.test.js.map +1 -1
- package/dist/index.d.ts +10 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/network.d.ts +34 -0
- package/dist/network.d.ts.map +1 -0
- package/dist/network.js +277 -0
- package/dist/network.js.map +1 -0
- package/dist/settings.d.ts +25 -2
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +73 -19
- package/dist/settings.js.map +1 -1
- package/dist/threat-patterns.d.ts +34 -0
- package/dist/threat-patterns.d.ts.map +1 -0
- package/dist/threat-patterns.js +211 -0
- package/dist/threat-patterns.js.map +1 -0
- package/package.json +5 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network-transport.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/network-transport.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { EventEmitter } from 'node:events';
|
|
2
|
+
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
3
|
+
const { requestMock } = vi.hoisted(() => ({ requestMock: vi.fn() }));
|
|
4
|
+
vi.mock('node:https', () => ({ request: requestMock }));
|
|
5
|
+
import { safeFetch } from '../network.js';
|
|
6
|
+
describe('network transport', () => {
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
requestMock.mockReset();
|
|
9
|
+
});
|
|
10
|
+
it('uses the single-address lookup contract when connecting to a pinned address', async () => {
|
|
11
|
+
requestMock.mockImplementation((_url, options, onResponse) => {
|
|
12
|
+
const request = new EventEmitter();
|
|
13
|
+
request.end = () => {
|
|
14
|
+
const all = options.family === undefined;
|
|
15
|
+
options.lookup('cdn.example', { all, family: options.family ?? 0 }, (error, address, family) => {
|
|
16
|
+
if (error) {
|
|
17
|
+
request.emit('error', error);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (all ? !Array.isArray(address) : typeof address !== 'string' || !family) {
|
|
21
|
+
request.emit('error', new TypeError('lookup callback returned the wrong shape'));
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
onResponse({ headers: {}, statusCode: 200, statusMessage: 'OK' });
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
return request;
|
|
28
|
+
});
|
|
29
|
+
await expect(safeFetch('https://cdn.example/image.png', { method: 'HEAD' }, { lookup: async () => [{ address: '93.184.216.34', family: 4 }] })).resolves.toMatchObject({ status: 200 });
|
|
30
|
+
});
|
|
31
|
+
it('revalidates every redirect before following it', async () => {
|
|
32
|
+
requestMock.mockImplementation((_url, _options, onResponse) => {
|
|
33
|
+
const request = new EventEmitter();
|
|
34
|
+
request.end = () => {
|
|
35
|
+
onResponse({
|
|
36
|
+
headers: { location: 'http://169.254.169.254/latest/meta-data' },
|
|
37
|
+
statusCode: 302,
|
|
38
|
+
statusMessage: 'Found',
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
return request;
|
|
42
|
+
});
|
|
43
|
+
await expect(safeFetch('https://cdn.example/start', { method: 'HEAD' }, { lookup: async () => [{ address: '93.184.216.34', family: 4 }] })).rejects.toThrow(/public HTTP/i);
|
|
44
|
+
expect(requestMock).toHaveBeenCalledTimes(1);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
//# sourceMappingURL=network-transport.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network-transport.test.js","sourceRoot":"","sources":["../../src/__tests__/network-transport.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/network.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { assertPublicHttpUrl, hostFromUrl, readResponseBytes, safeFetch, trustedHostsFromUrls, } from '../network.js';
|
|
3
|
+
const publicLookup = async () => [{ address: '93.184.216.34', family: 4 }];
|
|
4
|
+
describe('network', () => {
|
|
5
|
+
it.each([
|
|
6
|
+
'http://127.0.0.1/private',
|
|
7
|
+
'http://0.0.0.0/private',
|
|
8
|
+
'http://169.254.169.254/latest/meta-data',
|
|
9
|
+
'http://10.0.0.1/private',
|
|
10
|
+
'http://192.0.2.1/documentation',
|
|
11
|
+
'http://198.51.100.1/documentation',
|
|
12
|
+
'http://203.0.113.1/documentation',
|
|
13
|
+
'http://[::1]/private',
|
|
14
|
+
'http://[::c0a8:101]/ipv4-compatible-private',
|
|
15
|
+
'http://[100::1]/discard-only',
|
|
16
|
+
'http://[2001:2::1]/benchmarking',
|
|
17
|
+
'http://[2001:db8::1]/documentation',
|
|
18
|
+
'http://[3fff::1]/documentation',
|
|
19
|
+
'http://[5f00::1]/segment-routing',
|
|
20
|
+
'http://[fec0::1]/private',
|
|
21
|
+
'http://[64:ff9b:1::a00:1]/private',
|
|
22
|
+
'http://[64:ff9b::a9fe:a9fe]/latest/meta-data',
|
|
23
|
+
'http://[2002:a9fe:a9fe::]/latest/meta-data',
|
|
24
|
+
'http://[2002:a9fe::]/private',
|
|
25
|
+
'http://[2002:5db8:d822::]/path',
|
|
26
|
+
'http://[::ffff:127.0.0.1]/private',
|
|
27
|
+
'http://[::ffff:169.254.169.254]/latest/meta-data',
|
|
28
|
+
'file:///etc/passwd',
|
|
29
|
+
])('rejects non-public destination %s', async (url) => {
|
|
30
|
+
await expect(assertPublicHttpUrl(url, { lookup: publicLookup })).rejects.toThrow(/public HTTP/i);
|
|
31
|
+
});
|
|
32
|
+
it('rejects a hostname when DNS returns a private address', async () => {
|
|
33
|
+
const privateLookup = async () => [{ address: '192.168.1.20', family: 4 }];
|
|
34
|
+
await expect(assertPublicHttpUrl('https://internal.example/path', { lookup: privateLookup })).rejects.toThrow(/public HTTP/i);
|
|
35
|
+
});
|
|
36
|
+
it('rejects a hostname when DNS64 embeds a private IPv4 address', async () => {
|
|
37
|
+
const privateNat64Lookup = async () => [
|
|
38
|
+
{ address: '64:ff9b::a9fe:a9fe', family: 6 },
|
|
39
|
+
];
|
|
40
|
+
await expect(assertPublicHttpUrl('https://internal.example/path', { lookup: privateNat64Lookup })).rejects.toThrow(/public HTTP/i);
|
|
41
|
+
});
|
|
42
|
+
it('allows a public HTTP URL', async () => {
|
|
43
|
+
await expect(assertPublicHttpUrl('https://example.com/path', { lookup: publicLookup })).resolves.toMatchObject({ hostname: 'example.com', protocol: 'https:' });
|
|
44
|
+
await expect(assertPublicHttpUrl('http://[::ffff:93.184.216.34]/path', { lookup: publicLookup })).resolves.toMatchObject({ hostname: '[::ffff:5db8:d822]' });
|
|
45
|
+
await expect(assertPublicHttpUrl('http://[64:ff9b::5db8:d822]/path', { lookup: publicLookup })).resolves.toMatchObject({ hostname: '[64:ff9b::5db8:d822]' });
|
|
46
|
+
await expect(assertPublicHttpUrl('https://[2606:4700:4700::1111]/path', { lookup: publicLookup })).resolves.toMatchObject({ hostname: '[2606:4700:4700::1111]' });
|
|
47
|
+
await expect(assertPublicHttpUrl('https://[2001:3::1]/path', { lookup: publicLookup })).resolves.toMatchObject({ hostname: '[2001:3::1]' });
|
|
48
|
+
});
|
|
49
|
+
it('does not let a wrapped global fetch bypass DNS validation', async () => {
|
|
50
|
+
const originalFetch = globalThis.fetch;
|
|
51
|
+
const wrappedFetch = vi.fn().mockResolvedValue(new Response('unsafe'));
|
|
52
|
+
globalThis.fetch = wrappedFetch;
|
|
53
|
+
try {
|
|
54
|
+
await expect(safeFetch('https://does-not-resolve.invalid/private')).rejects.toThrow(/public HTTP/i);
|
|
55
|
+
expect(wrappedFetch).not.toHaveBeenCalled();
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
globalThis.fetch = originalFetch;
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
it('reports the host and resolved address when rejecting non-public DNS answers', async () => {
|
|
62
|
+
const fakeIpLookup = async () => [{ address: '198.18.1.86', family: 4 }];
|
|
63
|
+
await expect(assertPublicHttpUrl('https://gateway.internal.example/path', { lookup: fakeIpLookup })).rejects.toThrow(/gateway\.internal\.example.*198\.18\.1\.86/s);
|
|
64
|
+
});
|
|
65
|
+
it('reports an unresolvable host distinctly', async () => {
|
|
66
|
+
const emptyLookup = async () => [];
|
|
67
|
+
await expect(assertPublicHttpUrl('https://gone.example/path', { lookup: emptyLookup })).rejects.toThrow(/could not be resolved/i);
|
|
68
|
+
});
|
|
69
|
+
it.each([
|
|
70
|
+
'gateway.internal.example',
|
|
71
|
+
'*.internal.example',
|
|
72
|
+
'INTERNAL.example',
|
|
73
|
+
' gateway.internal.example ',
|
|
74
|
+
])('trusts %s past the public-IP check', async (trusted) => {
|
|
75
|
+
const fakeIpLookup = async () => [{ address: '198.18.1.86', family: 4 }];
|
|
76
|
+
await expect(assertPublicHttpUrl('https://gateway.internal.example/path', {
|
|
77
|
+
lookup: fakeIpLookup,
|
|
78
|
+
trustedHosts: [trusted],
|
|
79
|
+
})).resolves.toMatchObject({ hostname: 'gateway.internal.example' });
|
|
80
|
+
});
|
|
81
|
+
it('trusts subdomains of a trusted host', async () => {
|
|
82
|
+
const fakeIpLookup = async () => [{ address: '198.18.1.86', family: 4 }];
|
|
83
|
+
await expect(assertPublicHttpUrl('https://cdn.internal.example/path', {
|
|
84
|
+
lookup: fakeIpLookup,
|
|
85
|
+
trustedHosts: ['internal.example'],
|
|
86
|
+
})).resolves.toMatchObject({ hostname: 'cdn.internal.example' });
|
|
87
|
+
});
|
|
88
|
+
it('does not trust a mere suffix match', async () => {
|
|
89
|
+
const fakeIpLookup = async () => [{ address: '198.18.1.86', family: 4 }];
|
|
90
|
+
await expect(assertPublicHttpUrl('https://evil-internal.example/path', {
|
|
91
|
+
lookup: fakeIpLookup,
|
|
92
|
+
trustedHosts: ['internal.example'],
|
|
93
|
+
})).rejects.toThrow(/public HTTP/i);
|
|
94
|
+
});
|
|
95
|
+
it('matches bracketed IPv6-literal trusted hosts', async () => {
|
|
96
|
+
// ULA literals fail the public-IP check unless trusted; hostFromUrl keeps
|
|
97
|
+
// the brackets, so the pattern side must strip them too.
|
|
98
|
+
await expect(assertPublicHttpUrl('http://[fd00::1]/')).rejects.toThrow(/public HTTP/i);
|
|
99
|
+
await expect(assertPublicHttpUrl('http://[fd00::1]/', { trustedHosts: ['[fd00::1]'] })).resolves.toBeDefined();
|
|
100
|
+
});
|
|
101
|
+
it('still applies protocol and localhost rules to trusted hosts', async () => {
|
|
102
|
+
await expect(assertPublicHttpUrl('ftp://internal.example/path', {
|
|
103
|
+
lookup: publicLookup,
|
|
104
|
+
trustedHosts: ['internal.example'],
|
|
105
|
+
})).rejects.toThrow(/public HTTP/i);
|
|
106
|
+
await expect(assertPublicHttpUrl('https://localhost/path', {
|
|
107
|
+
lookup: publicLookup,
|
|
108
|
+
trustedHosts: ['localhost'],
|
|
109
|
+
})).rejects.toThrow(/public HTTP/i);
|
|
110
|
+
await expect(assertPublicHttpUrl('https://user:pass@internal.example/path', {
|
|
111
|
+
lookup: publicLookup,
|
|
112
|
+
trustedHosts: ['internal.example'],
|
|
113
|
+
})).rejects.toThrow(/public HTTP/i);
|
|
114
|
+
});
|
|
115
|
+
it('still rejects a trusted host that cannot be resolved', async () => {
|
|
116
|
+
const emptyLookup = async () => [];
|
|
117
|
+
await expect(assertPublicHttpUrl('https://internal.example/path', {
|
|
118
|
+
lookup: emptyLookup,
|
|
119
|
+
trustedHosts: ['internal.example'],
|
|
120
|
+
})).rejects.toThrow(/could not be resolved/i);
|
|
121
|
+
});
|
|
122
|
+
it('cancels and rejects a response body that exceeds the byte ceiling', async () => {
|
|
123
|
+
let cancelled = false;
|
|
124
|
+
const response = new Response(new ReadableStream({
|
|
125
|
+
start(controller) {
|
|
126
|
+
controller.enqueue(new Uint8Array(6));
|
|
127
|
+
controller.enqueue(new Uint8Array(6));
|
|
128
|
+
},
|
|
129
|
+
cancel() {
|
|
130
|
+
cancelled = true;
|
|
131
|
+
},
|
|
132
|
+
}));
|
|
133
|
+
await expect(readResponseBytes(response, 10)).rejects.toThrow(/size ceiling/i);
|
|
134
|
+
expect(cancelled).toBe(true);
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
describe('hostFromUrl', () => {
|
|
138
|
+
it.each([
|
|
139
|
+
['https://credits.example.com/v1', 'credits.example.com'],
|
|
140
|
+
['http://internal.example:8080/api', 'internal.example'],
|
|
141
|
+
['https://[2001:3::1]/v1', '[2001:3::1]'],
|
|
142
|
+
])('extracts the hostname from %s', (input, expected) => {
|
|
143
|
+
expect(hostFromUrl(input)).toBe(expected);
|
|
144
|
+
});
|
|
145
|
+
it.each([[undefined], [''], ['not a url'], ['http://']])('returns undefined for %j', (input) => {
|
|
146
|
+
expect(hostFromUrl(input)).toBeUndefined();
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
describe('trustedHostsFromUrls', () => {
|
|
150
|
+
it('collects hosts from valid URLs and skips the rest', () => {
|
|
151
|
+
expect(trustedHostsFromUrls('https://credits.example.com/v1', undefined, 'not a url', 'http://internal.example:8080/api')).toEqual(['credits.example.com', 'internal.example']);
|
|
152
|
+
});
|
|
153
|
+
it('returns an empty list when nothing parses', () => {
|
|
154
|
+
expect(trustedHostsFromUrls(undefined, '')).toEqual([]);
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
//# sourceMappingURL=network.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.test.js","sourceRoot":"","sources":["../../src/__tests__/network.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,15 @@ function envRef(expr) {
|
|
|
15
15
|
// biome-ignore lint/style/useTemplate: intentional concatenation to avoid noTemplateCurlyInString
|
|
16
16
|
return '$' + `{${expr}}`;
|
|
17
17
|
}
|
|
18
|
+
describe('isProjectTrusted', () => {
|
|
19
|
+
it('grants project access only for an explicit true result', async () => {
|
|
20
|
+
const { isProjectTrusted } = await import('../../src/settings.js');
|
|
21
|
+
expect(isProjectTrusted({ isProjectTrusted: () => true })).toBe(true);
|
|
22
|
+
expect(isProjectTrusted({ isProjectTrusted: () => false })).toBe(false);
|
|
23
|
+
expect(isProjectTrusted({})).toBe(false);
|
|
24
|
+
expect(isProjectTrusted(undefined)).toBe(false);
|
|
25
|
+
});
|
|
26
|
+
});
|
|
18
27
|
describe('loadPiSettings env var resolution', () => {
|
|
19
28
|
let tempDir;
|
|
20
29
|
let settingsPath;
|
|
@@ -22,8 +31,9 @@ describe('loadPiSettings env var resolution', () => {
|
|
|
22
31
|
let originalEnv;
|
|
23
32
|
beforeEach(() => {
|
|
24
33
|
tempDir = join(tmpdir(), `pi-settings-test-${Date.now()}`);
|
|
25
|
-
mkdirSync(join(tempDir, '.pi'), { recursive: true });
|
|
26
|
-
settingsPath = join(tempDir, '.pi', 'settings.json');
|
|
34
|
+
mkdirSync(join(tempDir, '.pi', 'agent'), { recursive: true });
|
|
35
|
+
settingsPath = join(tempDir, '.pi', 'agent', 'settings.json');
|
|
36
|
+
mockedHome = tempDir;
|
|
27
37
|
originalCwd = process.cwd();
|
|
28
38
|
originalEnv = { ...process.env };
|
|
29
39
|
process.chdir(tempDir);
|
|
@@ -31,6 +41,7 @@ describe('loadPiSettings env var resolution', () => {
|
|
|
31
41
|
afterEach(() => {
|
|
32
42
|
process.chdir(originalCwd);
|
|
33
43
|
process.env = originalEnv;
|
|
44
|
+
mockedHome = undefined;
|
|
34
45
|
rmSync(tempDir, { recursive: true, force: true });
|
|
35
46
|
});
|
|
36
47
|
async function loadSettings(key) {
|
|
@@ -45,6 +56,25 @@ describe('loadPiSettings env var resolution', () => {
|
|
|
45
56
|
const result = await loadSettings('myExt');
|
|
46
57
|
expect(result.name).toBe('claude-opus');
|
|
47
58
|
});
|
|
59
|
+
it('resolves bare env refs by default', async () => {
|
|
60
|
+
process.env.TEST_MODEL = 'claude-opus';
|
|
61
|
+
writeFileSync(settingsPath, JSON.stringify({
|
|
62
|
+
myExt: { name: '$TEST_MODEL' },
|
|
63
|
+
}));
|
|
64
|
+
const result = await loadSettings('myExt');
|
|
65
|
+
expect(result.name).toBe('claude-opus');
|
|
66
|
+
});
|
|
67
|
+
it('keeps bare env refs literal when explicitly disabled', async () => {
|
|
68
|
+
process.env.TEST_MODEL = 'claude-opus';
|
|
69
|
+
writeFileSync(settingsPath, JSON.stringify({
|
|
70
|
+
myExt: { name: '$TEST_MODEL' },
|
|
71
|
+
}));
|
|
72
|
+
const { loadPiSettings } = await import('../../src/settings.js');
|
|
73
|
+
const result = loadPiSettings('myExt', {
|
|
74
|
+
expandBareEnvVars: false,
|
|
75
|
+
});
|
|
76
|
+
expect(result.name).toBe('$TEST_MODEL');
|
|
77
|
+
});
|
|
48
78
|
it('resolves env ref with default to default when env is unset', async () => {
|
|
49
79
|
delete process.env.UNSET_VAR;
|
|
50
80
|
writeFileSync(settingsPath, JSON.stringify({
|
|
@@ -123,15 +153,15 @@ describe('loadPiSettings env var resolution', () => {
|
|
|
123
153
|
describe('3-layer settings resolution', () => {
|
|
124
154
|
let base;
|
|
125
155
|
let globalDir;
|
|
126
|
-
let
|
|
156
|
+
let configDir;
|
|
127
157
|
let projectDir;
|
|
128
158
|
beforeEach(() => {
|
|
129
159
|
base = join(tmpdir(), `pi-3layer-test-${Date.now()}-${Math.random().toString(36).slice(2)}`);
|
|
130
160
|
globalDir = join(base, 'home', '.pi', 'agent');
|
|
131
|
-
|
|
161
|
+
configDir = join(base, 'agent-config');
|
|
132
162
|
projectDir = join(base, 'project');
|
|
133
163
|
mkdirSync(globalDir, { recursive: true });
|
|
134
|
-
mkdirSync(
|
|
164
|
+
mkdirSync(configDir, { recursive: true });
|
|
135
165
|
mkdirSync(join(projectDir, '.pi'), { recursive: true });
|
|
136
166
|
mockedHome = join(base, 'home');
|
|
137
167
|
});
|
|
@@ -139,45 +169,93 @@ describe('3-layer settings resolution', () => {
|
|
|
139
169
|
mockedHome = undefined;
|
|
140
170
|
rmSync(base, { recursive: true, force: true });
|
|
141
171
|
});
|
|
142
|
-
it('
|
|
172
|
+
it('configDir settings override global settings', async () => {
|
|
143
173
|
writeFileSync(join(globalDir, 'settings.json'), JSON.stringify({ ext: { a: 'global', b: 'global' } }));
|
|
144
|
-
writeFileSync(join(
|
|
174
|
+
writeFileSync(join(configDir, 'settings.json'), JSON.stringify({ ext: { a: 'agent' } }));
|
|
145
175
|
const { loadPiSettings } = await import('../../src/settings.js');
|
|
146
176
|
const result = loadPiSettings('ext', {
|
|
147
|
-
|
|
177
|
+
configDir,
|
|
148
178
|
cwd: projectDir,
|
|
149
179
|
});
|
|
150
180
|
expect(result.a).toBe('agent');
|
|
151
181
|
expect(result.b).toBe('global');
|
|
152
182
|
});
|
|
153
|
-
it('project settings
|
|
154
|
-
writeFileSync(join(
|
|
183
|
+
it('ignores project settings when trust is not explicitly granted', async () => {
|
|
184
|
+
writeFileSync(join(configDir, 'settings.json'), JSON.stringify({ ext: { a: 'agent', b: 'agent' } }));
|
|
185
|
+
writeFileSync(join(projectDir, '.pi', 'settings.json'), JSON.stringify({ ext: { a: 'project' } }));
|
|
186
|
+
const { loadPiSettings } = await import('../../src/settings.js');
|
|
187
|
+
const result = loadPiSettings('ext', {
|
|
188
|
+
configDir,
|
|
189
|
+
cwd: projectDir,
|
|
190
|
+
});
|
|
191
|
+
expect(result.a).toBe('agent');
|
|
192
|
+
expect(result.b).toBe('agent');
|
|
193
|
+
});
|
|
194
|
+
it('project settings override configDir settings when project is trusted', async () => {
|
|
195
|
+
writeFileSync(join(configDir, 'settings.json'), JSON.stringify({ ext: { a: 'agent', b: 'agent' } }));
|
|
155
196
|
writeFileSync(join(projectDir, '.pi', 'settings.json'), JSON.stringify({ ext: { a: 'project' } }));
|
|
156
197
|
const { loadPiSettings } = await import('../../src/settings.js');
|
|
157
198
|
const result = loadPiSettings('ext', {
|
|
158
|
-
|
|
199
|
+
configDir,
|
|
159
200
|
cwd: projectDir,
|
|
201
|
+
projectTrusted: true,
|
|
160
202
|
});
|
|
161
203
|
expect(result.a).toBe('project');
|
|
162
204
|
expect(result.b).toBe('agent');
|
|
163
205
|
});
|
|
164
|
-
it('
|
|
206
|
+
it('can fail closed on malformed trusted project settings', async () => {
|
|
207
|
+
writeFileSync(join(projectDir, '.pi', 'settings.json'), '{broken');
|
|
208
|
+
const { loadPiSettings } = await import('../../src/settings.js');
|
|
209
|
+
expect(() => loadPiSettings('ext', {
|
|
210
|
+
configDir,
|
|
211
|
+
cwd: projectDir,
|
|
212
|
+
projectTrusted: true,
|
|
213
|
+
strictProjectSettings: true,
|
|
214
|
+
})).toThrow(/project settings/i);
|
|
215
|
+
});
|
|
216
|
+
it('does not interpolate env vars from trusted project settings', async () => {
|
|
217
|
+
const originalSecret = process.env.PROJECT_SECRET;
|
|
218
|
+
process.env.PROJECT_SECRET = 'must-not-expand';
|
|
219
|
+
writeFileSync(join(projectDir, '.pi', 'settings.json'), JSON.stringify({
|
|
220
|
+
ext: {
|
|
221
|
+
value: envRef('PROJECT_SECRET'),
|
|
222
|
+
bare: '$PROJECT_SECRET',
|
|
223
|
+
},
|
|
224
|
+
}));
|
|
225
|
+
const { loadPiSettings } = await import('../../src/settings.js');
|
|
226
|
+
const result = loadPiSettings('ext', {
|
|
227
|
+
configDir,
|
|
228
|
+
cwd: projectDir,
|
|
229
|
+
projectTrusted: true,
|
|
230
|
+
expandBareEnvVars: true,
|
|
231
|
+
});
|
|
232
|
+
expect(result.value).toBe(envRef('PROJECT_SECRET'));
|
|
233
|
+
expect(result.bare).toBe('$PROJECT_SECRET');
|
|
234
|
+
if (originalSecret === undefined)
|
|
235
|
+
delete process.env.PROJECT_SECRET;
|
|
236
|
+
else
|
|
237
|
+
process.env.PROJECT_SECRET = originalSecret;
|
|
238
|
+
});
|
|
239
|
+
it('env var interpolation works in configDir layer', async () => {
|
|
165
240
|
const origEndpoint = process.env.MY_ENDPOINT;
|
|
166
241
|
process.env.MY_ENDPOINT = 'https://api.example.com';
|
|
167
|
-
writeFileSync(join(
|
|
242
|
+
writeFileSync(join(configDir, 'settings.json'), JSON.stringify({ ext: { url: envRef('MY_ENDPOINT') } }));
|
|
168
243
|
const { loadPiSettings } = await import('../../src/settings.js');
|
|
169
|
-
const result = loadPiSettings('ext', {
|
|
244
|
+
const result = loadPiSettings('ext', { configDir, cwd: projectDir });
|
|
170
245
|
expect(result.url).toBe('https://api.example.com');
|
|
171
246
|
if (origEndpoint === undefined)
|
|
172
247
|
delete process.env.MY_ENDPOINT;
|
|
173
248
|
else
|
|
174
249
|
process.env.MY_ENDPOINT = origEndpoint;
|
|
175
250
|
});
|
|
176
|
-
it('skips
|
|
251
|
+
it('skips configDir layer when it equals global dir', async () => {
|
|
177
252
|
writeFileSync(join(globalDir, 'settings.json'), JSON.stringify({ ext: { a: 'global' } }));
|
|
178
253
|
writeFileSync(join(projectDir, '.pi', 'settings.json'), JSON.stringify({ ext: { b: 'project' } }));
|
|
179
254
|
const { loadPiSettings } = await import('../../src/settings.js');
|
|
180
|
-
const result = loadPiSettings('ext', {
|
|
255
|
+
const result = loadPiSettings('ext', {
|
|
256
|
+
cwd: projectDir,
|
|
257
|
+
projectTrusted: true,
|
|
258
|
+
});
|
|
181
259
|
expect(result.a).toBe('global');
|
|
182
260
|
expect(result.b).toBe('project');
|
|
183
261
|
});
|
|
@@ -185,19 +263,19 @@ describe('3-layer settings resolution', () => {
|
|
|
185
263
|
describe('loadPiPolicyProfiles', () => {
|
|
186
264
|
let base;
|
|
187
265
|
let globalPolicyDir;
|
|
188
|
-
let
|
|
189
|
-
let
|
|
266
|
+
let configDir;
|
|
267
|
+
let configPolicyDir;
|
|
190
268
|
let projectDir;
|
|
191
269
|
let projectPolicyDir;
|
|
192
270
|
beforeEach(() => {
|
|
193
271
|
base = join(tmpdir(), `pi-policy-3layer-${Date.now()}-${Math.random().toString(36).slice(2)}`);
|
|
194
272
|
globalPolicyDir = join(base, 'home', '.pi', 'agent', 'policy');
|
|
195
|
-
|
|
196
|
-
|
|
273
|
+
configDir = join(base, 'agent-config');
|
|
274
|
+
configPolicyDir = join(configDir, 'policy');
|
|
197
275
|
projectDir = join(base, 'project');
|
|
198
276
|
projectPolicyDir = join(projectDir, '.pi', 'policy');
|
|
199
277
|
mkdirSync(globalPolicyDir, { recursive: true });
|
|
200
|
-
mkdirSync(
|
|
278
|
+
mkdirSync(configPolicyDir, { recursive: true });
|
|
201
279
|
mkdirSync(projectPolicyDir, { recursive: true });
|
|
202
280
|
mockedHome = join(base, 'home');
|
|
203
281
|
});
|
|
@@ -205,11 +283,11 @@ describe('loadPiPolicyProfiles', () => {
|
|
|
205
283
|
mockedHome = undefined;
|
|
206
284
|
rmSync(base, { recursive: true, force: true });
|
|
207
285
|
});
|
|
208
|
-
it('
|
|
209
|
-
writeFileSync(join(
|
|
286
|
+
it('configDir policy is readable', async () => {
|
|
287
|
+
writeFileSync(join(configPolicyDir, 'sandbox-exec.json'), JSON.stringify({ extends: 'sandbox-exec', capabilities: { allow: ['browser_*'] } }));
|
|
210
288
|
const { loadPiPolicyProfiles } = await import('../../src/settings.js');
|
|
211
289
|
const result = loadPiPolicyProfiles({
|
|
212
|
-
|
|
290
|
+
configDir,
|
|
213
291
|
cwd: projectDir,
|
|
214
292
|
});
|
|
215
293
|
expect(result['sandbox-exec']).toEqual({
|
|
@@ -217,32 +295,47 @@ describe('loadPiPolicyProfiles', () => {
|
|
|
217
295
|
capabilities: { allow: ['browser_*'] },
|
|
218
296
|
});
|
|
219
297
|
});
|
|
220
|
-
it('project policy overrides
|
|
221
|
-
writeFileSync(join(
|
|
298
|
+
it('project policy overrides configDir policy with same name', async () => {
|
|
299
|
+
writeFileSync(join(configPolicyDir, 'custom.json'), JSON.stringify({ extends: 'chat', capabilities: { allow: ['read_file'] } }));
|
|
222
300
|
writeFileSync(join(projectPolicyDir, 'custom.json'), JSON.stringify({ extends: 'copilot', capabilities: { allow: ['*'] } }));
|
|
223
301
|
const { loadPiPolicyProfiles } = await import('../../src/settings.js');
|
|
224
302
|
const result = loadPiPolicyProfiles({
|
|
225
|
-
|
|
303
|
+
configDir,
|
|
226
304
|
cwd: projectDir,
|
|
305
|
+
projectTrusted: true,
|
|
227
306
|
});
|
|
228
307
|
expect(result.custom).toEqual({ extends: 'copilot', capabilities: { allow: ['*'] } });
|
|
229
308
|
});
|
|
309
|
+
it('ignores project policies when trust is not explicitly granted', async () => {
|
|
310
|
+
writeFileSync(join(configPolicyDir, 'custom.json'), JSON.stringify({ extends: 'chat', capabilities: { allow: ['read_file'] } }));
|
|
311
|
+
writeFileSync(join(projectPolicyDir, 'custom.json'), JSON.stringify({ extends: 'copilot', capabilities: { allow: ['*'] } }));
|
|
312
|
+
const { loadPiPolicyProfiles } = await import('../../src/settings.js');
|
|
313
|
+
const result = loadPiPolicyProfiles({
|
|
314
|
+
configDir,
|
|
315
|
+
cwd: projectDir,
|
|
316
|
+
});
|
|
317
|
+
expect(result.custom).toEqual({ extends: 'chat', capabilities: { allow: ['read_file'] } });
|
|
318
|
+
});
|
|
230
319
|
it('merges profiles from all three directories', async () => {
|
|
231
320
|
writeFileSync(join(globalPolicyDir, 'global-only.json'), JSON.stringify({ extends: 'chat' }));
|
|
232
|
-
writeFileSync(join(
|
|
321
|
+
writeFileSync(join(configPolicyDir, 'agent-only.json'), JSON.stringify({ extends: 'admin' }));
|
|
233
322
|
writeFileSync(join(projectPolicyDir, 'project-only.json'), JSON.stringify({ extends: 'copilot' }));
|
|
234
323
|
const { loadPiPolicyProfiles } = await import('../../src/settings.js');
|
|
235
|
-
const result = loadPiPolicyProfiles({
|
|
324
|
+
const result = loadPiPolicyProfiles({
|
|
325
|
+
configDir,
|
|
326
|
+
cwd: projectDir,
|
|
327
|
+
projectTrusted: true,
|
|
328
|
+
});
|
|
236
329
|
expect(result['global-only']).toEqual({ extends: 'chat' });
|
|
237
330
|
expect(result['agent-only']).toEqual({ extends: 'admin' });
|
|
238
331
|
expect(result['project-only']).toEqual({ extends: 'copilot' });
|
|
239
332
|
});
|
|
240
333
|
it('works when directories do not exist', async () => {
|
|
241
334
|
rmSync(globalPolicyDir, { recursive: true });
|
|
242
|
-
rmSync(
|
|
335
|
+
rmSync(configPolicyDir, { recursive: true });
|
|
243
336
|
rmSync(projectPolicyDir, { recursive: true });
|
|
244
337
|
const { loadPiPolicyProfiles } = await import('../../src/settings.js');
|
|
245
|
-
const result = loadPiPolicyProfiles({
|
|
338
|
+
const result = loadPiPolicyProfiles({ configDir, cwd: projectDir });
|
|
246
339
|
expect(result).toEqual({});
|
|
247
340
|
});
|
|
248
341
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.test.js","sourceRoot":"","sources":["../../src/__tests__/settings.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"settings.test.js","sourceRoot":"","sources":["../../src/__tests__/settings.test.ts"],"names":[],"mappings":"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"}
|