@principles/core 1.90.0 → 1.92.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/runtime-v2/__tests__/architecture-regression.test.js +4 -1
- package/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
- package/dist/runtime-v2/__tests__/pain-to-principle-service.test.js +48 -3
- package/dist/runtime-v2/__tests__/pain-to-principle-service.test.js.map +1 -1
- package/dist/runtime-v2/__tests__/resolve-runtime-config-from-pd-config.test.d.ts +12 -0
- package/dist/runtime-v2/__tests__/resolve-runtime-config-from-pd-config.test.d.ts.map +1 -0
- package/dist/runtime-v2/__tests__/resolve-runtime-config-from-pd-config.test.js +194 -0
- package/dist/runtime-v2/__tests__/resolve-runtime-config-from-pd-config.test.js.map +1 -0
- package/dist/runtime-v2/__tests__/runtime-config-boundary.test.js +5 -3
- package/dist/runtime-v2/__tests__/runtime-config-boundary.test.js.map +1 -1
- package/dist/runtime-v2/adapter/openclaw-cli-runtime-adapter.d.ts +4 -2
- package/dist/runtime-v2/adapter/openclaw-cli-runtime-adapter.d.ts.map +1 -1
- package/dist/runtime-v2/adapter/openclaw-cli-runtime-adapter.js +0 -1
- package/dist/runtime-v2/adapter/openclaw-cli-runtime-adapter.js.map +1 -1
- package/dist/runtime-v2/config/__tests__/pd-config-agent-binding.test.d.ts +18 -0
- package/dist/runtime-v2/config/__tests__/pd-config-agent-binding.test.d.ts.map +1 -0
- package/dist/runtime-v2/config/__tests__/pd-config-agent-binding.test.js +339 -0
- package/dist/runtime-v2/config/__tests__/pd-config-agent-binding.test.js.map +1 -0
- package/dist/runtime-v2/config/__tests__/pd-config-redaction-deep.test.d.ts +13 -0
- package/dist/runtime-v2/config/__tests__/pd-config-redaction-deep.test.d.ts.map +1 -0
- package/dist/runtime-v2/config/__tests__/pd-config-redaction-deep.test.js +447 -0
- package/dist/runtime-v2/config/__tests__/pd-config-redaction-deep.test.js.map +1 -0
- package/dist/runtime-v2/config/__tests__/pd-config-validation-edge-cases.test.d.ts +12 -0
- package/dist/runtime-v2/config/__tests__/pd-config-validation-edge-cases.test.d.ts.map +1 -0
- package/dist/runtime-v2/config/__tests__/pd-config-validation-edge-cases.test.js +433 -0
- package/dist/runtime-v2/config/__tests__/pd-config-validation-edge-cases.test.js.map +1 -0
- package/dist/runtime-v2/config/index.d.ts +2 -0
- package/dist/runtime-v2/config/index.d.ts.map +1 -1
- package/dist/runtime-v2/config/index.js +1 -0
- package/dist/runtime-v2/config/index.js.map +1 -1
- package/dist/runtime-v2/config/pd-config-agent-binding.d.ts +93 -0
- package/dist/runtime-v2/config/pd-config-agent-binding.d.ts.map +1 -0
- package/dist/runtime-v2/config/pd-config-agent-binding.js +184 -0
- package/dist/runtime-v2/config/pd-config-agent-binding.js.map +1 -0
- package/dist/runtime-v2/index.d.ts +3 -1
- package/dist/runtime-v2/index.d.ts.map +1 -1
- package/dist/runtime-v2/index.js +3 -1
- package/dist/runtime-v2/index.js.map +1 -1
- package/dist/runtime-v2/pain-signal-runtime-factory.d.ts +16 -0
- package/dist/runtime-v2/pain-signal-runtime-factory.d.ts.map +1 -1
- package/dist/runtime-v2/pain-signal-runtime-factory.js +76 -6
- package/dist/runtime-v2/pain-signal-runtime-factory.js.map +1 -1
- package/dist/runtime-v2/pain-to-principle-service.d.ts +7 -0
- package/dist/runtime-v2/pain-to-principle-service.d.ts.map +1 -1
- package/dist/runtime-v2/pain-to-principle-service.js +2 -0
- package/dist/runtime-v2/pain-to-principle-service.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,433 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PD Config Validation Edge Cases — PRI-304
|
|
3
|
+
*
|
|
4
|
+
*补充测试覆盖缺口:
|
|
5
|
+
* - 空字符串 provider/model/apiKeyEnv 验证
|
|
6
|
+
* - 特殊字符在 profile ID 中的处理
|
|
7
|
+
* - 多个并发错误同时发生时的错误收集
|
|
8
|
+
* - 超长字符串和边界值处理
|
|
9
|
+
* - 循环引用和不存在的 profile 引用
|
|
10
|
+
*/
|
|
11
|
+
import { describe, it, expect } from 'vitest';
|
|
12
|
+
import { validatePdConfig, computeEffectivePdConfig, } from '../index.js';
|
|
13
|
+
function makeValidConfig() {
|
|
14
|
+
return {
|
|
15
|
+
version: 1,
|
|
16
|
+
features: {
|
|
17
|
+
prompt: { category: 'core', enabled: true },
|
|
18
|
+
code_tool_hook: { category: 'core', enabled: true },
|
|
19
|
+
defer_archive: { category: 'core', enabled: true },
|
|
20
|
+
correction_observer: { category: 'quiet', enabled: true },
|
|
21
|
+
gfi: { category: 'quiet', enabled: false },
|
|
22
|
+
nocturnal: { category: 'gone', enabled: false },
|
|
23
|
+
},
|
|
24
|
+
runtimeProfiles: {
|
|
25
|
+
'openclaw.default': { type: 'openclaw', source: 'default' },
|
|
26
|
+
},
|
|
27
|
+
internalAgents: {
|
|
28
|
+
defaultRuntime: 'openclaw.default',
|
|
29
|
+
agents: {
|
|
30
|
+
diagnostician: { enabled: true },
|
|
31
|
+
dreamer: { enabled: true },
|
|
32
|
+
scribe: { enabled: true },
|
|
33
|
+
artificer: { enabled: true },
|
|
34
|
+
philosopher: { enabled: false },
|
|
35
|
+
evaluator: { enabled: false },
|
|
36
|
+
rolloutReviewer: { enabled: false },
|
|
37
|
+
trainer: { enabled: false },
|
|
38
|
+
correctionObserver: { enabled: false },
|
|
39
|
+
empathyObserver: { enabled: false },
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
ui: { diagnostics: { mode: 'simple' } },
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
// ── Empty String Validation ────────────────────────────────────────────────
|
|
46
|
+
describe('Empty string validation in pi-ai profiles', () => {
|
|
47
|
+
it('rejects empty provider string', () => {
|
|
48
|
+
const raw = makeValidConfig();
|
|
49
|
+
raw.runtimeProfiles['pd.empty-provider'] = {
|
|
50
|
+
type: 'pi-ai',
|
|
51
|
+
provider: '',
|
|
52
|
+
model: 'test-model',
|
|
53
|
+
apiKeyEnv: 'TEST_KEY',
|
|
54
|
+
};
|
|
55
|
+
const result = validatePdConfig(raw);
|
|
56
|
+
expect(result.ok).toBe(false);
|
|
57
|
+
if (result.ok)
|
|
58
|
+
throw new Error('Expected error');
|
|
59
|
+
expect(result.errors.some(e => e.path.includes('provider') &&
|
|
60
|
+
e.reason.includes('non-empty string'))).toBe(true);
|
|
61
|
+
});
|
|
62
|
+
it('rejects empty model string', () => {
|
|
63
|
+
const raw = makeValidConfig();
|
|
64
|
+
raw.runtimeProfiles['pd.empty-model'] = {
|
|
65
|
+
type: 'pi-ai',
|
|
66
|
+
provider: 'test-provider',
|
|
67
|
+
model: '',
|
|
68
|
+
apiKeyEnv: 'TEST_KEY',
|
|
69
|
+
};
|
|
70
|
+
const result = validatePdConfig(raw);
|
|
71
|
+
expect(result.ok).toBe(false);
|
|
72
|
+
if (result.ok)
|
|
73
|
+
throw new Error('Expected error');
|
|
74
|
+
expect(result.errors.some(e => e.path.includes('model') &&
|
|
75
|
+
e.reason.includes('non-empty string'))).toBe(true);
|
|
76
|
+
});
|
|
77
|
+
it('rejects empty apiKeyEnv string', () => {
|
|
78
|
+
const raw = makeValidConfig();
|
|
79
|
+
raw.runtimeProfiles['pd.empty-key'] = {
|
|
80
|
+
type: 'pi-ai',
|
|
81
|
+
provider: 'test-provider',
|
|
82
|
+
model: 'test-model',
|
|
83
|
+
apiKeyEnv: '',
|
|
84
|
+
};
|
|
85
|
+
const result = validatePdConfig(raw);
|
|
86
|
+
expect(result.ok).toBe(false);
|
|
87
|
+
if (result.ok)
|
|
88
|
+
throw new Error('Expected error');
|
|
89
|
+
expect(result.errors.some(e => e.path.includes('apiKeyEnv') &&
|
|
90
|
+
e.reason.includes('non-empty string'))).toBe(true);
|
|
91
|
+
});
|
|
92
|
+
it('accepts whitespace-only provider (current behavior - no trim)', () => {
|
|
93
|
+
const raw = makeValidConfig();
|
|
94
|
+
raw.runtimeProfiles['pd.whitespace-provider'] = {
|
|
95
|
+
type: 'pi-ai',
|
|
96
|
+
provider: ' ',
|
|
97
|
+
model: 'test-model',
|
|
98
|
+
apiKeyEnv: 'TEST_KEY',
|
|
99
|
+
};
|
|
100
|
+
const result = validatePdConfig(raw);
|
|
101
|
+
// Current validation only checks non-empty string, does not trim
|
|
102
|
+
// Whitespace-only strings are technically non-empty
|
|
103
|
+
expect(result.ok).toBe(true);
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
// ── Special Characters in Profile IDs ───────────────────────────────────────
|
|
107
|
+
describe('Special characters in profile IDs', () => {
|
|
108
|
+
it('accepts profile ID with dots', () => {
|
|
109
|
+
const raw = makeValidConfig();
|
|
110
|
+
raw.runtimeProfiles['pd.test.profile'] = {
|
|
111
|
+
type: 'pi-ai',
|
|
112
|
+
provider: 'test',
|
|
113
|
+
model: 'test-model',
|
|
114
|
+
apiKeyEnv: 'TEST_KEY',
|
|
115
|
+
};
|
|
116
|
+
const result = validatePdConfig(raw);
|
|
117
|
+
expect(result.ok).toBe(true);
|
|
118
|
+
});
|
|
119
|
+
it('accepts profile ID with hyphens', () => {
|
|
120
|
+
const raw = makeValidConfig();
|
|
121
|
+
raw.runtimeProfiles['pd-test-profile'] = {
|
|
122
|
+
type: 'pi-ai',
|
|
123
|
+
provider: 'test',
|
|
124
|
+
model: 'test-model',
|
|
125
|
+
apiKeyEnv: 'TEST_KEY',
|
|
126
|
+
};
|
|
127
|
+
const result = validatePdConfig(raw);
|
|
128
|
+
expect(result.ok).toBe(true);
|
|
129
|
+
});
|
|
130
|
+
it('accepts profile ID with underscores', () => {
|
|
131
|
+
const raw = makeValidConfig();
|
|
132
|
+
raw.runtimeProfiles['pd_test_profile'] = {
|
|
133
|
+
type: 'pi-ai',
|
|
134
|
+
provider: 'test',
|
|
135
|
+
model: 'test-model',
|
|
136
|
+
apiKeyEnv: 'TEST_KEY',
|
|
137
|
+
};
|
|
138
|
+
const result = validatePdConfig(raw);
|
|
139
|
+
expect(result.ok).toBe(true);
|
|
140
|
+
});
|
|
141
|
+
it('handles profile ID with Unicode characters', () => {
|
|
142
|
+
const raw = makeValidConfig();
|
|
143
|
+
raw.runtimeProfiles['pd测试profile'] = {
|
|
144
|
+
type: 'pi-ai',
|
|
145
|
+
provider: 'test',
|
|
146
|
+
model: 'test-model',
|
|
147
|
+
apiKeyEnv: 'TEST_KEY',
|
|
148
|
+
};
|
|
149
|
+
const result = validatePdConfig(raw);
|
|
150
|
+
// Unicode should be accepted (no restriction on profile ID charset)
|
|
151
|
+
expect(result.ok).toBe(true);
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
// ── Multiple Concurrent Errors ──────────────────────────────────────────────
|
|
155
|
+
describe('Multiple concurrent errors collection', () => {
|
|
156
|
+
it('collects all errors when multiple fields are invalid', () => {
|
|
157
|
+
const raw = makeValidConfig();
|
|
158
|
+
// Add multiple invalid profiles
|
|
159
|
+
raw.runtimeProfiles['pd.error1'] = {
|
|
160
|
+
type: 'pi-ai',
|
|
161
|
+
provider: '',
|
|
162
|
+
model: '',
|
|
163
|
+
apiKeyEnv: '',
|
|
164
|
+
};
|
|
165
|
+
raw.runtimeProfiles['pd.error2'] = {
|
|
166
|
+
type: 'pi-ai',
|
|
167
|
+
provider: 'valid',
|
|
168
|
+
model: '',
|
|
169
|
+
apiKeyEnv: '',
|
|
170
|
+
};
|
|
171
|
+
const result = validatePdConfig(raw);
|
|
172
|
+
expect(result.ok).toBe(false);
|
|
173
|
+
if (result.ok)
|
|
174
|
+
throw new Error('Expected error');
|
|
175
|
+
// Should have multiple errors, not just the first one
|
|
176
|
+
expect(result.errors.length).toBeGreaterThan(3);
|
|
177
|
+
expect(result.errors.some(e => e.path.includes('error1'))).toBe(true);
|
|
178
|
+
expect(result.errors.some(e => e.path.includes('error2'))).toBe(true);
|
|
179
|
+
});
|
|
180
|
+
it('collects errors from both features and profiles', () => {
|
|
181
|
+
const raw = {
|
|
182
|
+
version: 1,
|
|
183
|
+
features: {
|
|
184
|
+
prompt: { category: 'core', enabled: 'not-boolean' },
|
|
185
|
+
},
|
|
186
|
+
runtimeProfiles: {
|
|
187
|
+
'pd.error': {
|
|
188
|
+
type: 'pi-ai',
|
|
189
|
+
provider: '',
|
|
190
|
+
model: '',
|
|
191
|
+
apiKeyEnv: '',
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
internalAgents: {
|
|
195
|
+
defaultRuntime: 'openclaw.default',
|
|
196
|
+
agents: {},
|
|
197
|
+
},
|
|
198
|
+
ui: { diagnostics: { mode: 'simple' } },
|
|
199
|
+
};
|
|
200
|
+
const result = validatePdConfig(raw);
|
|
201
|
+
expect(result.ok).toBe(false);
|
|
202
|
+
if (result.ok)
|
|
203
|
+
throw new Error('Expected error');
|
|
204
|
+
// Should have errors from both features and profiles
|
|
205
|
+
expect(result.errors.some(e => e.path.includes('features'))).toBe(true);
|
|
206
|
+
expect(result.errors.some(e => e.path.includes('runtimeProfiles'))).toBe(true);
|
|
207
|
+
});
|
|
208
|
+
it('continues validation after first error (does not short-circuit)', () => {
|
|
209
|
+
const raw = makeValidConfig();
|
|
210
|
+
// First error: invalid feature
|
|
211
|
+
raw.features.prompt = { category: 'core', enabled: 'invalid' };
|
|
212
|
+
// Second error: invalid profile
|
|
213
|
+
raw.runtimeProfiles['pd.error'] = {
|
|
214
|
+
type: 'pi-ai',
|
|
215
|
+
provider: '',
|
|
216
|
+
model: 'test',
|
|
217
|
+
apiKeyEnv: 'TEST_KEY',
|
|
218
|
+
};
|
|
219
|
+
// Third error: invalid internalAgents.defaultRuntime (empty string)
|
|
220
|
+
raw.internalAgents.defaultRuntime = '';
|
|
221
|
+
const result = validatePdConfig(raw);
|
|
222
|
+
expect(result.ok).toBe(false);
|
|
223
|
+
if (result.ok)
|
|
224
|
+
throw new Error('Expected error');
|
|
225
|
+
// Should have collected all three error categories
|
|
226
|
+
expect(result.errors.length).toBeGreaterThanOrEqual(3);
|
|
227
|
+
});
|
|
228
|
+
});
|
|
229
|
+
// ── Boundary Values ──────────────────────────────────────────────────────────
|
|
230
|
+
describe('Boundary values and extreme inputs', () => {
|
|
231
|
+
it('handles very long provider strings', () => {
|
|
232
|
+
const raw = makeValidConfig();
|
|
233
|
+
const longProvider = 'a'.repeat(1000);
|
|
234
|
+
raw.runtimeProfiles['pd.long-provider'] = {
|
|
235
|
+
type: 'pi-ai',
|
|
236
|
+
provider: longProvider,
|
|
237
|
+
model: 'test-model',
|
|
238
|
+
apiKeyEnv: 'TEST_KEY',
|
|
239
|
+
};
|
|
240
|
+
const result = validatePdConfig(raw);
|
|
241
|
+
// Long strings should be accepted (no length limit in validation)
|
|
242
|
+
expect(result.ok).toBe(true);
|
|
243
|
+
});
|
|
244
|
+
it('handles very long model strings', () => {
|
|
245
|
+
const raw = makeValidConfig();
|
|
246
|
+
const longModel = 'model-'.repeat(200);
|
|
247
|
+
raw.runtimeProfiles['pd.long-model'] = {
|
|
248
|
+
type: 'pi-ai',
|
|
249
|
+
provider: 'test',
|
|
250
|
+
model: longModel,
|
|
251
|
+
apiKeyEnv: 'TEST_KEY',
|
|
252
|
+
};
|
|
253
|
+
const result = validatePdConfig(raw);
|
|
254
|
+
expect(result.ok).toBe(true);
|
|
255
|
+
});
|
|
256
|
+
it('handles very large timeoutMs values', () => {
|
|
257
|
+
const raw = makeValidConfig();
|
|
258
|
+
raw.runtimeProfiles['pd.large-timeout'] = {
|
|
259
|
+
type: 'pi-ai',
|
|
260
|
+
provider: 'test',
|
|
261
|
+
model: 'test-model',
|
|
262
|
+
apiKeyEnv: 'TEST_KEY',
|
|
263
|
+
timeoutMs: 86400000, // 24 hours in ms
|
|
264
|
+
};
|
|
265
|
+
const result = validatePdConfig(raw);
|
|
266
|
+
expect(result.ok).toBe(true);
|
|
267
|
+
});
|
|
268
|
+
it('rejects extremely large timeoutMs (Infinity)', () => {
|
|
269
|
+
const raw = makeValidConfig();
|
|
270
|
+
raw.runtimeProfiles['pd.infinity-timeout'] = {
|
|
271
|
+
type: 'pi-ai',
|
|
272
|
+
provider: 'test',
|
|
273
|
+
model: 'test-model',
|
|
274
|
+
apiKeyEnv: 'TEST_KEY',
|
|
275
|
+
timeoutMs: Infinity,
|
|
276
|
+
};
|
|
277
|
+
const result = validatePdConfig(raw);
|
|
278
|
+
expect(result.ok).toBe(false);
|
|
279
|
+
if (result.ok)
|
|
280
|
+
throw new Error('Expected error');
|
|
281
|
+
expect(result.errors.some(e => e.path.includes('timeoutMs') &&
|
|
282
|
+
e.reason.includes('finite'))).toBe(true);
|
|
283
|
+
});
|
|
284
|
+
it('handles baseUrl with special characters', () => {
|
|
285
|
+
const raw = makeValidConfig();
|
|
286
|
+
raw.runtimeProfiles['pd.special-url'] = {
|
|
287
|
+
type: 'pi-ai',
|
|
288
|
+
provider: 'test',
|
|
289
|
+
model: 'test-model',
|
|
290
|
+
apiKeyEnv: 'TEST_KEY',
|
|
291
|
+
baseUrl: 'https://api.example.com:8080/v1/path?query=value',
|
|
292
|
+
};
|
|
293
|
+
const result = validatePdConfig(raw);
|
|
294
|
+
expect(result.ok).toBe(true);
|
|
295
|
+
});
|
|
296
|
+
});
|
|
297
|
+
// ── Profile Reference Validation ─────────────────────────────────────────────
|
|
298
|
+
describe('Profile reference validation in agents', () => {
|
|
299
|
+
it('accepts agent referencing valid profile', () => {
|
|
300
|
+
const raw = makeValidConfig();
|
|
301
|
+
raw.runtimeProfiles['pd.custom'] = {
|
|
302
|
+
type: 'pi-ai',
|
|
303
|
+
provider: 'test',
|
|
304
|
+
model: 'test-model',
|
|
305
|
+
apiKeyEnv: 'TEST_KEY',
|
|
306
|
+
};
|
|
307
|
+
raw.internalAgents.agents.diagnostician = {
|
|
308
|
+
enabled: true,
|
|
309
|
+
runtimeProfile: 'pd.custom',
|
|
310
|
+
};
|
|
311
|
+
const result = validatePdConfig(raw);
|
|
312
|
+
expect(result.ok).toBe(true);
|
|
313
|
+
});
|
|
314
|
+
it('accepts agent referencing non-existent profile (warning in effective config)', () => {
|
|
315
|
+
const raw = makeValidConfig();
|
|
316
|
+
raw.internalAgents.agents.diagnostician = {
|
|
317
|
+
enabled: true,
|
|
318
|
+
runtimeProfile: 'pd.nonexistent',
|
|
319
|
+
};
|
|
320
|
+
const result = validatePdConfig(raw);
|
|
321
|
+
// Validation passes (profile existence is checked in effective config)
|
|
322
|
+
expect(result.ok).toBe(true);
|
|
323
|
+
if (!result.ok)
|
|
324
|
+
throw new Error('Expected ok');
|
|
325
|
+
const effective = computeEffectivePdConfig(result.value);
|
|
326
|
+
// Effective config should have a warning about missing profile
|
|
327
|
+
expect(effective.warnings.some(w => w.includes('nonexistent') || w.includes('not found'))).toBe(true);
|
|
328
|
+
});
|
|
329
|
+
it('accepts defaultRuntime referencing non-existent profile (warning)', () => {
|
|
330
|
+
const raw = makeValidConfig();
|
|
331
|
+
raw.internalAgents.defaultRuntime = 'pd.nonexistent-default';
|
|
332
|
+
const result = validatePdConfig(raw);
|
|
333
|
+
expect(result.ok).toBe(true);
|
|
334
|
+
if (!result.ok)
|
|
335
|
+
throw new Error('Expected ok');
|
|
336
|
+
const effective = computeEffectivePdConfig(result.value);
|
|
337
|
+
expect(effective.warnings.length).toBeGreaterThan(0);
|
|
338
|
+
});
|
|
339
|
+
});
|
|
340
|
+
// ── Type Coercion Edge Cases ─────────────────────────────────────────────────
|
|
341
|
+
describe('Type coercion edge cases', () => {
|
|
342
|
+
it('rejects numeric provider (type mismatch)', () => {
|
|
343
|
+
const raw = makeValidConfig();
|
|
344
|
+
raw.runtimeProfiles['pd.numeric-provider'] = {
|
|
345
|
+
type: 'pi-ai',
|
|
346
|
+
provider: 123,
|
|
347
|
+
model: 'test-model',
|
|
348
|
+
apiKeyEnv: 'TEST_KEY',
|
|
349
|
+
};
|
|
350
|
+
const result = validatePdConfig(raw);
|
|
351
|
+
expect(result.ok).toBe(false);
|
|
352
|
+
if (result.ok)
|
|
353
|
+
throw new Error('Expected error');
|
|
354
|
+
expect(result.errors.some(e => e.path.includes('provider') &&
|
|
355
|
+
e.reason.includes('string'))).toBe(true);
|
|
356
|
+
});
|
|
357
|
+
it('rejects boolean apiKeyEnv', () => {
|
|
358
|
+
const raw = makeValidConfig();
|
|
359
|
+
raw.runtimeProfiles['pd.bool-key'] = {
|
|
360
|
+
type: 'pi-ai',
|
|
361
|
+
provider: 'test',
|
|
362
|
+
model: 'test-model',
|
|
363
|
+
apiKeyEnv: true,
|
|
364
|
+
};
|
|
365
|
+
const result = validatePdConfig(raw);
|
|
366
|
+
expect(result.ok).toBe(false);
|
|
367
|
+
if (result.ok)
|
|
368
|
+
throw new Error('Expected error');
|
|
369
|
+
expect(result.errors.some(e => e.path.includes('apiKeyEnv') &&
|
|
370
|
+
e.reason.includes('string'))).toBe(true);
|
|
371
|
+
});
|
|
372
|
+
it('rejects object as enabled value', () => {
|
|
373
|
+
const raw = makeValidConfig();
|
|
374
|
+
raw.features.prompt = {
|
|
375
|
+
category: 'core',
|
|
376
|
+
enabled: { value: true },
|
|
377
|
+
};
|
|
378
|
+
const result = validatePdConfig(raw);
|
|
379
|
+
expect(result.ok).toBe(false);
|
|
380
|
+
if (result.ok)
|
|
381
|
+
throw new Error('Expected error');
|
|
382
|
+
expect(result.errors.some(e => e.path.includes('enabled') &&
|
|
383
|
+
e.reason.includes('boolean'))).toBe(true);
|
|
384
|
+
});
|
|
385
|
+
it('rejects null as category value', () => {
|
|
386
|
+
const raw = makeValidConfig();
|
|
387
|
+
raw.features.prompt = {
|
|
388
|
+
category: null,
|
|
389
|
+
enabled: true,
|
|
390
|
+
};
|
|
391
|
+
const result = validatePdConfig(raw);
|
|
392
|
+
expect(result.ok).toBe(false);
|
|
393
|
+
if (result.ok)
|
|
394
|
+
throw new Error('Expected error');
|
|
395
|
+
expect(result.errors.some(e => e.path.includes('category'))).toBe(true);
|
|
396
|
+
});
|
|
397
|
+
});
|
|
398
|
+
// ── OpenClaw Profile Edge Cases ──────────────────────────────────────────────
|
|
399
|
+
describe('OpenClaw profile edge cases', () => {
|
|
400
|
+
it('accepts OpenClaw profile with only type', () => {
|
|
401
|
+
const raw = makeValidConfig();
|
|
402
|
+
raw.runtimeProfiles['openclaw.minimal'] = {
|
|
403
|
+
type: 'openclaw',
|
|
404
|
+
};
|
|
405
|
+
const result = validatePdConfig(raw);
|
|
406
|
+
expect(result.ok).toBe(true);
|
|
407
|
+
});
|
|
408
|
+
it('accepts OpenClaw profile with all optional fields', () => {
|
|
409
|
+
const raw = makeValidConfig();
|
|
410
|
+
raw.runtimeProfiles['openclaw.full'] = {
|
|
411
|
+
type: 'openclaw',
|
|
412
|
+
provider: 'lmstudio',
|
|
413
|
+
model: 'qwen3',
|
|
414
|
+
source: 'custom',
|
|
415
|
+
};
|
|
416
|
+
const result = validatePdConfig(raw);
|
|
417
|
+
expect(result.ok).toBe(true);
|
|
418
|
+
});
|
|
419
|
+
it('rejects numeric source in OpenClaw profile', () => {
|
|
420
|
+
const raw = makeValidConfig();
|
|
421
|
+
raw.runtimeProfiles['openclaw.bad-source'] = {
|
|
422
|
+
type: 'openclaw',
|
|
423
|
+
source: 123,
|
|
424
|
+
};
|
|
425
|
+
const result = validatePdConfig(raw);
|
|
426
|
+
expect(result.ok).toBe(false);
|
|
427
|
+
if (result.ok)
|
|
428
|
+
throw new Error('Expected error');
|
|
429
|
+
expect(result.errors.some(e => e.path.includes('source') &&
|
|
430
|
+
e.reason.includes('string'))).toBe(true);
|
|
431
|
+
});
|
|
432
|
+
});
|
|
433
|
+
//# sourceMappingURL=pd-config-validation-edge-cases.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pd-config-validation-edge-cases.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/config/__tests__/pd-config-validation-edge-cases.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,4 +11,6 @@ export { computeEffectivePdConfig, } from './pd-config-effective.js';
|
|
|
11
11
|
export { redactPdConfig, redactConfigValue, } from './pd-config-redaction.js';
|
|
12
12
|
export type { EffectiveFeatureFlag, FeatureFlagsResult, } from './pd-config-feature-flags.js';
|
|
13
13
|
export { MVP_CHANNEL_IDS, computeFeatureFlagsFromConfig, isFeatureEnabled, getEnabledFlagIds, } from './pd-config-feature-flags.js';
|
|
14
|
+
export type { AgentRuntimeBindingOk, AgentRuntimeBindingErr, AgentRuntimeBindingResult, AgentRuntimeReadinessResult, PiAiAdapterConfigResult, OpenClawAdapterConfigResult, AdapterConfigResult, } from './pd-config-agent-binding.js';
|
|
15
|
+
export { resolveAgentRuntimeBinding, checkAgentRuntimeReadiness, createAdapterConfigFromProfile, } from './pd-config-agent-binding.js';
|
|
14
16
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/config/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,uBAAuB,EACvB,0BAA0B,EAC1B,2BAA2B,EAC3B,wBAAwB,EACxB,iBAAiB,EACjB,6BAA6B,EAC7B,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,cAAc,GACf,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,gBAAgB,GACjB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC1B,uBAAuB,EACvB,UAAU,EACV,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,wBAAwB,GACzB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,cAAc,EACd,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAGlC,YAAY,EACV,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,eAAe,EACf,6BAA6B,EAC7B,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,8BAA8B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/config/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,uBAAuB,EACvB,0BAA0B,EAC1B,2BAA2B,EAC3B,wBAAwB,EACxB,iBAAiB,EACjB,6BAA6B,EAC7B,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,cAAc,GACf,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,gBAAgB,GACjB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC1B,uBAAuB,EACvB,UAAU,EACV,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,wBAAwB,GACzB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,cAAc,EACd,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAGlC,YAAY,EACV,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,eAAe,EACf,6BAA6B,EAC7B,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,8BAA8B,CAAC;AAGtC,YAAY,EACV,qBAAqB,EACrB,sBAAsB,EACtB,yBAAyB,EACzB,2BAA2B,EAC3B,uBAAuB,EACvB,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,8BAA8B,GAC/B,MAAM,8BAA8B,CAAC"}
|
|
@@ -13,4 +13,5 @@ export { computeEffectivePdConfig, } from './pd-config-effective.js';
|
|
|
13
13
|
// Redaction
|
|
14
14
|
export { redactPdConfig, redactConfigValue, } from './pd-config-redaction.js';
|
|
15
15
|
export { MVP_CHANNEL_IDS, computeFeatureFlagsFromConfig, isFeatureEnabled, getEnabledFlagIds, } from './pd-config-feature-flags.js';
|
|
16
|
+
export { resolveAgentRuntimeBinding, checkAgentRuntimeReadiness, createAdapterConfigFromProfile, } from './pd-config-agent-binding.js';
|
|
16
17
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtime-v2/config/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA4BH,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,cAAc,GACf,MAAM,sBAAsB,CAAC;AAE9B,aAAa;AACb,OAAO,EACL,gBAAgB,GACjB,MAAM,yBAAyB,CAAC;AAEjC,WAAW;AACX,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC1B,uBAAuB,EACvB,UAAU,EACV,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AAEjC,mBAAmB;AACnB,OAAO,EACL,wBAAwB,GACzB,MAAM,0BAA0B,CAAC;AAElC,YAAY;AACZ,OAAO,EACL,cAAc,EACd,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAQlC,OAAO,EACL,eAAe,EACf,6BAA6B,EAC7B,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,8BAA8B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtime-v2/config/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA4BH,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,cAAc,GACf,MAAM,sBAAsB,CAAC;AAE9B,aAAa;AACb,OAAO,EACL,gBAAgB,GACjB,MAAM,yBAAyB,CAAC;AAEjC,WAAW;AACX,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC1B,uBAAuB,EACvB,UAAU,EACV,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AAEjC,mBAAmB;AACnB,OAAO,EACL,wBAAwB,GACzB,MAAM,0BAA0B,CAAC;AAElC,YAAY;AACZ,OAAO,EACL,cAAc,EACd,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAQlC,OAAO,EACL,eAAe,EACf,6BAA6B,EAC7B,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,8BAA8B,CAAC;AAatC,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,8BAA8B,GAC/B,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Runtime Binding Resolution — PRI-306
|
|
3
|
+
*
|
|
4
|
+
* Pure functions that resolve which RuntimeProfile an internal agent uses,
|
|
5
|
+
* check readiness, and produce adapter configuration.
|
|
6
|
+
*
|
|
7
|
+
* No I/O — env var access is injected via getEnvVar callback.
|
|
8
|
+
* No `as` casts on untrusted data (ERR-001).
|
|
9
|
+
* Missing fields fail loud with reason + nextAction (ERR-002, ERR-009).
|
|
10
|
+
* Uses Object.hasOwn() for key checks (ERR-013).
|
|
11
|
+
*/
|
|
12
|
+
import type { EffectivePdConfig, InternalAgentName, RuntimeProfile } from './pd-config-types.js';
|
|
13
|
+
export interface AgentRuntimeBindingOk {
|
|
14
|
+
ok: true;
|
|
15
|
+
/** The resolved runtime profile */
|
|
16
|
+
profile: RuntimeProfile;
|
|
17
|
+
/** The profile ID in the runtimeProfiles map */
|
|
18
|
+
profileId: string;
|
|
19
|
+
/** How this binding was resolved: 'agent_override' = per-agent override, 'default_runtime' = fallback to defaultRuntime */
|
|
20
|
+
source: 'agent_override' | 'default_runtime';
|
|
21
|
+
}
|
|
22
|
+
export interface AgentRuntimeBindingErr {
|
|
23
|
+
ok: false;
|
|
24
|
+
/** Readiness status */
|
|
25
|
+
readiness: 'needs_setup' | 'not_ready' | 'disabled';
|
|
26
|
+
/** Human-readable reason */
|
|
27
|
+
reason: string;
|
|
28
|
+
/** Actionable next step */
|
|
29
|
+
nextAction: string;
|
|
30
|
+
}
|
|
31
|
+
export type AgentRuntimeBindingResult = AgentRuntimeBindingOk | AgentRuntimeBindingErr;
|
|
32
|
+
export interface AgentRuntimeReadinessResult {
|
|
33
|
+
readiness: 'ready' | 'not_ready' | 'needs_setup';
|
|
34
|
+
reason?: string;
|
|
35
|
+
nextAction?: string;
|
|
36
|
+
}
|
|
37
|
+
export interface PiAiAdapterConfigResult {
|
|
38
|
+
runtimeKind: 'pi-ai';
|
|
39
|
+
provider: string;
|
|
40
|
+
model: string;
|
|
41
|
+
apiKeyEnv: string;
|
|
42
|
+
baseUrl?: string;
|
|
43
|
+
timeoutMs?: number;
|
|
44
|
+
workspace: string;
|
|
45
|
+
}
|
|
46
|
+
export interface OpenClawAdapterConfigResult {
|
|
47
|
+
runtimeKind: 'openclaw-cli';
|
|
48
|
+
workspaceDir: string;
|
|
49
|
+
/** 'default' = delegate to OpenClaw's own mode resolution (CLI flags, workflows.yaml).
|
|
50
|
+
* 'local' | 'gateway' = explicit mode from profile config. */
|
|
51
|
+
openclawMode: 'local' | 'gateway' | 'default';
|
|
52
|
+
}
|
|
53
|
+
export type AdapterConfigResult = PiAiAdapterConfigResult | OpenClawAdapterConfigResult;
|
|
54
|
+
/**
|
|
55
|
+
* Resolve which RuntimeProfile an internal agent should use.
|
|
56
|
+
*
|
|
57
|
+
* Resolution order:
|
|
58
|
+
* 1. Per-agent override (agent.runtimeProfile) → source: 'agent_override'
|
|
59
|
+
* 2. defaultRuntime → source: 'default_runtime'
|
|
60
|
+
*
|
|
61
|
+
* If the resolved profile ID doesn't exist in runtimeProfiles, returns an error.
|
|
62
|
+
* If the agent is disabled, returns a disabled result.
|
|
63
|
+
*/
|
|
64
|
+
export declare function resolveAgentRuntimeBinding(effective: EffectivePdConfig, agentName: InternalAgentName): AgentRuntimeBindingResult;
|
|
65
|
+
/**
|
|
66
|
+
* Check whether a RuntimeProfile is ready for use.
|
|
67
|
+
*
|
|
68
|
+
* For openclaw profiles:
|
|
69
|
+
* - source=default → ready (delegated to OpenClaw)
|
|
70
|
+
* - provider+model set → ready
|
|
71
|
+
* - otherwise → needs_setup
|
|
72
|
+
*
|
|
73
|
+
* For pi-ai profiles:
|
|
74
|
+
* - provider, model, apiKeyEnv all set AND apiKeyEnv exists in env → ready
|
|
75
|
+
* - apiKeyEnv missing from env → not_ready (config is correct but env is not set up)
|
|
76
|
+
* - provider or model missing → needs_setup (config is incomplete)
|
|
77
|
+
*
|
|
78
|
+
* The getEnvVar callback is injected to avoid process.env access in core.
|
|
79
|
+
*/
|
|
80
|
+
export declare function checkAgentRuntimeReadiness(profile: RuntimeProfile, getEnvVar: (name: string) => string | undefined): AgentRuntimeReadinessResult;
|
|
81
|
+
/**
|
|
82
|
+
* Transform a RuntimeProfile into adapter configuration.
|
|
83
|
+
*
|
|
84
|
+
* For pi-ai profiles: produces PiAiAdapterConfigResult with all fields needed
|
|
85
|
+
* to construct a PiAiRuntimeAdapter.
|
|
86
|
+
*
|
|
87
|
+
* For openclaw profiles: produces OpenClawAdapterConfigResult.
|
|
88
|
+
* OpenClaw profiles do NOT copy secrets — they only reference provider/model.
|
|
89
|
+
*
|
|
90
|
+
* This is a pure data transform. No I/O, no env access.
|
|
91
|
+
*/
|
|
92
|
+
export declare function createAdapterConfigFromProfile(profile: RuntimeProfile, workspaceDir: string): AdapterConfigResult;
|
|
93
|
+
//# sourceMappingURL=pd-config-agent-binding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pd-config-agent-binding.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/config/pd-config-agent-binding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EAGf,MAAM,sBAAsB,CAAC;AAI9B,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,IAAI,CAAC;IACT,mCAAmC;IACnC,OAAO,EAAE,cAAc,CAAC;IACxB,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,2HAA2H;IAC3H,MAAM,EAAE,gBAAgB,GAAG,iBAAiB,CAAC;CAC9C;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,KAAK,CAAC;IACV,uBAAuB;IACvB,SAAS,EAAE,aAAa,GAAG,WAAW,GAAG,UAAU,CAAC;IACpD,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,2BAA2B;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,yBAAyB,GAAG,qBAAqB,GAAG,sBAAsB,CAAC;AAIvF,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,OAAO,GAAG,WAAW,GAAG,aAAa,CAAC;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAID,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,2BAA2B;IAC1C,WAAW,EAAE,cAAc,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB;mEAC+D;IAC/D,YAAY,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;CAC/C;AAED,MAAM,MAAM,mBAAmB,GAAG,uBAAuB,GAAG,2BAA2B,CAAC;AA0ExF;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,iBAAiB,EAC5B,SAAS,EAAE,iBAAiB,GAC3B,yBAAyB,CAgD3B;AAID;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAC9C,2BAA2B,CAK7B;AAID;;;;;;;;;;GAUG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,cAAc,EACvB,YAAY,EAAE,MAAM,GACnB,mBAAmB,CA4BrB"}
|