@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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=network-transport.test.d.ts.map
@@ -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":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9D,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAErE,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;AAExD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,UAAU,CAAC,GAAG,EAAE;QACd,WAAW,CAAC,SAAS,EAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6EAA6E,EAAE,KAAK,IAAI,EAAE;QAC3F,WAAW,CAAC,kBAAkB,CAC5B,CACE,IAAS,EACT,OAOC,EACD,UAIU,EACV,EAAE;YACF,MAAM,OAAO,GAAG,IAAI,YAAY,EAAoC,CAAC;YACrE,OAAO,CAAC,GAAG,GAAG,GAAG,EAAE;gBACjB,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC;gBACzC,OAAO,CAAC,MAAM,CACZ,aAAa,EACb,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,EACpC,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;oBACzB,IAAI,KAAK,EAAE,CAAC;wBACV,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;wBAC7B,OAAO;oBACT,CAAC;oBACD,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;wBAC3E,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,SAAS,CAAC,0CAA0C,CAAC,CAAC,CAAC;wBACjF,OAAO;oBACT,CAAC;oBACD,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;gBACpE,CAAC,CACF,CAAC;YACJ,CAAC,CAAC;YACF,OAAO,OAAO,CAAC;QACjB,CAAC,CACF,CAAC;QAEF,MAAM,MAAM,CACV,SAAS,CACP,+BAA+B,EAC/B,EAAE,MAAM,EAAE,MAAM,EAAE,EAClB,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAClE,CACF,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,WAAW,CAAC,kBAAkB,CAC5B,CACE,IAAS,EACT,QAAiB,EACjB,UAIU,EACV,EAAE;YACF,MAAM,OAAO,GAAG,IAAI,YAAY,EAAoC,CAAC;YACrE,OAAO,CAAC,GAAG,GAAG,GAAG,EAAE;gBACjB,UAAU,CAAC;oBACT,OAAO,EAAE,EAAE,QAAQ,EAAE,yCAAyC,EAAE;oBAChE,UAAU,EAAE,GAAG;oBACf,aAAa,EAAE,OAAO;iBACvB,CAAC,CAAC;YACL,CAAC,CAAC;YACF,OAAO,OAAO,CAAC;QACjB,CAAC,CACF,CAAC;QAEF,MAAM,MAAM,CACV,SAAS,CACP,2BAA2B,EAC3B,EAAE,MAAM,EAAE,MAAM,EAAE,EAClB,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAClE,CACF,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAClC,MAAM,CAAC,WAAW,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=network.test.d.ts.map
@@ -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 agentDir;
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
- agentDir = join(base, 'agent-config');
161
+ configDir = join(base, 'agent-config');
132
162
  projectDir = join(base, 'project');
133
163
  mkdirSync(globalDir, { recursive: true });
134
- mkdirSync(agentDir, { recursive: true });
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('agentDir settings override global settings', async () => {
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(agentDir, 'settings.json'), JSON.stringify({ ext: { a: 'agent' } }));
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
- agentDir,
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 override agentDir settings', async () => {
154
- writeFileSync(join(agentDir, 'settings.json'), JSON.stringify({ ext: { a: 'agent', b: 'agent' } }));
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
- agentDir,
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('env var interpolation works in agentDir layer', async () => {
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(agentDir, 'settings.json'), JSON.stringify({ ext: { url: envRef('MY_ENDPOINT') } }));
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', { agentDir, cwd: projectDir });
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 agentDir layer when it equals global dir', async () => {
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', { cwd: projectDir });
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 agentDir;
189
- let agentPolicyDir;
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
- agentDir = join(base, 'agent-config');
196
- agentPolicyDir = join(agentDir, 'policy');
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(agentPolicyDir, { recursive: true });
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('agentDir policy is readable', async () => {
209
- writeFileSync(join(agentPolicyDir, 'sandbox-exec.json'), JSON.stringify({ extends: 'sandbox-exec', capabilities: { allow: ['browser_*'] } }));
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
- agentDir,
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 agentDir policy with same name', async () => {
221
- writeFileSync(join(agentPolicyDir, 'custom.json'), JSON.stringify({ extends: 'chat', capabilities: { allow: ['read_file'] } }));
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
- agentDir,
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(agentPolicyDir, 'agent-only.json'), JSON.stringify({ extends: 'admin' }));
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({ agentDir, cwd: projectDir });
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(agentPolicyDir, { recursive: true });
335
+ rmSync(configPolicyDir, { recursive: true });
243
336
  rmSync(projectPolicyDir, { recursive: true });
244
337
  const { loadPiPolicyProfiles } = await import('../../src/settings.js');
245
- const result = loadPiPolicyProfiles({ agentDir, cwd: projectDir });
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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"}