@principles/core 1.91.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/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,339 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Runtime Binding Resolution Tests — PRI-306
|
|
3
|
+
*
|
|
4
|
+
* TDD tests for:
|
|
5
|
+
* - resolveAgentRuntimeBinding() — which RuntimeProfile an agent uses
|
|
6
|
+
* - checkAgentRuntimeReadiness() — whether a profile is ready to run
|
|
7
|
+
* - createAdapterConfigFromProfile() — profile → adapter config transform
|
|
8
|
+
*
|
|
9
|
+
* Acceptance criteria coverage:
|
|
10
|
+
* AC1: Diagnostician runtime can be configured to use an OpenClaw model reference
|
|
11
|
+
* AC2: Diagnostician runtime can be configured to use a PD-local profile with apiKeyEnv
|
|
12
|
+
* AC3: Per-agent override beats default runtime
|
|
13
|
+
* AC4: Missing env var for PD-local profile fails loud with reason + nextAction
|
|
14
|
+
* AC5: Existing MVP pipeline still runs with defaults
|
|
15
|
+
* AC6: Tests cover diagnostician + at least one peer runner binding path
|
|
16
|
+
*/
|
|
17
|
+
import { describe, it, expect } from 'vitest';
|
|
18
|
+
import { computeEffectivePdConfig, getDefaultPdConfig, DEFAULT_RUNTIME_PROFILE_ID, } from '../index.js';
|
|
19
|
+
import { resolveAgentRuntimeBinding, checkAgentRuntimeReadiness, createAdapterConfigFromProfile, } from '../pd-config-agent-binding.js';
|
|
20
|
+
// ── Helpers ──────────────────────────────────────────────────────────────────
|
|
21
|
+
function makeConfigWithOverrides(overrides) {
|
|
22
|
+
const base = getDefaultPdConfig();
|
|
23
|
+
return { ...base, ...overrides };
|
|
24
|
+
}
|
|
25
|
+
function makeConfigWithPdLocalProfile() {
|
|
26
|
+
return makeConfigWithOverrides({
|
|
27
|
+
runtimeProfiles: {
|
|
28
|
+
'openclaw.default': { type: 'openclaw', source: 'default' },
|
|
29
|
+
'anthropic-claude': {
|
|
30
|
+
type: 'pi-ai',
|
|
31
|
+
provider: 'anthropic',
|
|
32
|
+
model: 'claude-3-5-sonnet',
|
|
33
|
+
apiKeyEnv: 'ANTHROPIC_API_KEY',
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
internalAgents: {
|
|
37
|
+
defaultRuntime: 'openclaw.default',
|
|
38
|
+
agents: {
|
|
39
|
+
diagnostician: { enabled: true, runtimeProfile: 'anthropic-claude' },
|
|
40
|
+
dreamer: { enabled: true },
|
|
41
|
+
philosopher: { enabled: false },
|
|
42
|
+
scribe: { enabled: true },
|
|
43
|
+
artificer: { enabled: true },
|
|
44
|
+
evaluator: { enabled: false },
|
|
45
|
+
rolloutReviewer: { enabled: false },
|
|
46
|
+
trainer: { enabled: false },
|
|
47
|
+
correctionObserver: { enabled: false },
|
|
48
|
+
empathyObserver: { enabled: false },
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
function makeConfigWithOpenClawProfile() {
|
|
54
|
+
return makeConfigWithOverrides({
|
|
55
|
+
runtimeProfiles: {
|
|
56
|
+
'openclaw.default': { type: 'openclaw', source: 'default' },
|
|
57
|
+
'lmstudio-local': {
|
|
58
|
+
type: 'openclaw',
|
|
59
|
+
provider: 'lmstudio',
|
|
60
|
+
model: 'qwen3.6-27b-mtp',
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
internalAgents: {
|
|
64
|
+
defaultRuntime: 'openclaw.default',
|
|
65
|
+
agents: {
|
|
66
|
+
diagnostician: { enabled: true, runtimeProfile: 'lmstudio-local' },
|
|
67
|
+
dreamer: { enabled: true },
|
|
68
|
+
philosopher: { enabled: false },
|
|
69
|
+
scribe: { enabled: true },
|
|
70
|
+
artificer: { enabled: true },
|
|
71
|
+
evaluator: { enabled: false },
|
|
72
|
+
rolloutReviewer: { enabled: false },
|
|
73
|
+
trainer: { enabled: false },
|
|
74
|
+
correctionObserver: { enabled: false },
|
|
75
|
+
empathyObserver: { enabled: false },
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
// ── resolveAgentRuntimeBinding ───────────────────────────────────────────────
|
|
81
|
+
describe('resolveAgentRuntimeBinding', () => {
|
|
82
|
+
it('AC5: returns default profile when no per-agent override (MVP defaults)', () => {
|
|
83
|
+
const effective = computeEffectivePdConfig(null);
|
|
84
|
+
const result = resolveAgentRuntimeBinding(effective, 'diagnostician');
|
|
85
|
+
expect(result.ok).toBe(true);
|
|
86
|
+
if (!result.ok)
|
|
87
|
+
return;
|
|
88
|
+
expect(result.profileId).toBe(DEFAULT_RUNTIME_PROFILE_ID);
|
|
89
|
+
expect(result.profile.type).toBe('openclaw');
|
|
90
|
+
expect(result.source).toBe('default_runtime');
|
|
91
|
+
});
|
|
92
|
+
it('AC1: diagnostician uses OpenClaw model reference when configured', () => {
|
|
93
|
+
const config = makeConfigWithOpenClawProfile();
|
|
94
|
+
const effective = computeEffectivePdConfig(config);
|
|
95
|
+
const result = resolveAgentRuntimeBinding(effective, 'diagnostician');
|
|
96
|
+
expect(result.ok).toBe(true);
|
|
97
|
+
if (!result.ok)
|
|
98
|
+
return;
|
|
99
|
+
expect(result.profileId).toBe('lmstudio-local');
|
|
100
|
+
expect(result.profile.type).toBe('openclaw');
|
|
101
|
+
if (result.profile.type === 'openclaw') {
|
|
102
|
+
expect(result.profile.provider).toBe('lmstudio');
|
|
103
|
+
expect(result.profile.model).toBe('qwen3.6-27b-mtp');
|
|
104
|
+
}
|
|
105
|
+
expect(result.source).toBe('agent_override');
|
|
106
|
+
});
|
|
107
|
+
it('AC2: diagnostician uses PD-local profile with apiKeyEnv when configured', () => {
|
|
108
|
+
const config = makeConfigWithPdLocalProfile();
|
|
109
|
+
const effective = computeEffectivePdConfig(config);
|
|
110
|
+
const result = resolveAgentRuntimeBinding(effective, 'diagnostician');
|
|
111
|
+
expect(result.ok).toBe(true);
|
|
112
|
+
if (!result.ok)
|
|
113
|
+
return;
|
|
114
|
+
expect(result.profileId).toBe('anthropic-claude');
|
|
115
|
+
expect(result.profile.type).toBe('pi-ai');
|
|
116
|
+
if (result.profile.type === 'pi-ai') {
|
|
117
|
+
expect(result.profile.provider).toBe('anthropic');
|
|
118
|
+
expect(result.profile.model).toBe('claude-3-5-sonnet');
|
|
119
|
+
expect(result.profile.apiKeyEnv).toBe('ANTHROPIC_API_KEY');
|
|
120
|
+
}
|
|
121
|
+
expect(result.source).toBe('agent_override');
|
|
122
|
+
});
|
|
123
|
+
it('AC3: per-agent override beats default runtime', () => {
|
|
124
|
+
const config = makeConfigWithPdLocalProfile();
|
|
125
|
+
const effective = computeEffectivePdConfig(config);
|
|
126
|
+
// diagnostician has explicit override → uses anthropic-claude
|
|
127
|
+
const diagResult = resolveAgentRuntimeBinding(effective, 'diagnostician');
|
|
128
|
+
expect(diagResult.ok).toBe(true);
|
|
129
|
+
if (!diagResult.ok)
|
|
130
|
+
return;
|
|
131
|
+
expect(diagResult.profileId).toBe('anthropic-claude');
|
|
132
|
+
expect(diagResult.source).toBe('agent_override');
|
|
133
|
+
// dreamer has no override → uses defaultRuntime (openclaw.default)
|
|
134
|
+
const dreamerResult = resolveAgentRuntimeBinding(effective, 'dreamer');
|
|
135
|
+
expect(dreamerResult.ok).toBe(true);
|
|
136
|
+
if (!dreamerResult.ok)
|
|
137
|
+
return;
|
|
138
|
+
expect(dreamerResult.profileId).toBe('openclaw.default');
|
|
139
|
+
expect(dreamerResult.source).toBe('default_runtime');
|
|
140
|
+
});
|
|
141
|
+
it('AC6: peer runner (dreamer) binding path works', () => {
|
|
142
|
+
const config = makeConfigWithOverrides({
|
|
143
|
+
runtimeProfiles: {
|
|
144
|
+
'openclaw.default': { type: 'openclaw', source: 'default' },
|
|
145
|
+
'dreamer-profile': {
|
|
146
|
+
type: 'pi-ai',
|
|
147
|
+
provider: 'openrouter',
|
|
148
|
+
model: 'openai/gpt-4o',
|
|
149
|
+
apiKeyEnv: 'OPENROUTER_API_KEY',
|
|
150
|
+
},
|
|
151
|
+
},
|
|
152
|
+
internalAgents: {
|
|
153
|
+
defaultRuntime: 'openclaw.default',
|
|
154
|
+
agents: {
|
|
155
|
+
diagnostician: { enabled: true },
|
|
156
|
+
dreamer: { enabled: true, runtimeProfile: 'dreamer-profile' },
|
|
157
|
+
philosopher: { enabled: false },
|
|
158
|
+
scribe: { enabled: true },
|
|
159
|
+
artificer: { enabled: true },
|
|
160
|
+
evaluator: { enabled: false },
|
|
161
|
+
rolloutReviewer: { enabled: false },
|
|
162
|
+
trainer: { enabled: false },
|
|
163
|
+
correctionObserver: { enabled: false },
|
|
164
|
+
empathyObserver: { enabled: false },
|
|
165
|
+
},
|
|
166
|
+
},
|
|
167
|
+
});
|
|
168
|
+
const effective = computeEffectivePdConfig(config);
|
|
169
|
+
const result = resolveAgentRuntimeBinding(effective, 'dreamer');
|
|
170
|
+
expect(result.ok).toBe(true);
|
|
171
|
+
if (!result.ok)
|
|
172
|
+
return;
|
|
173
|
+
expect(result.profileId).toBe('dreamer-profile');
|
|
174
|
+
expect(result.profile.type).toBe('pi-ai');
|
|
175
|
+
if (result.profile.type === 'pi-ai') {
|
|
176
|
+
expect(result.profile.provider).toBe('openrouter');
|
|
177
|
+
expect(result.profile.apiKeyEnv).toBe('OPENROUTER_API_KEY');
|
|
178
|
+
}
|
|
179
|
+
expect(result.source).toBe('agent_override');
|
|
180
|
+
});
|
|
181
|
+
it('returns error when profile ID references missing profile', () => {
|
|
182
|
+
const config = makeConfigWithOverrides({
|
|
183
|
+
runtimeProfiles: {
|
|
184
|
+
'openclaw.default': { type: 'openclaw', source: 'default' },
|
|
185
|
+
},
|
|
186
|
+
internalAgents: {
|
|
187
|
+
defaultRuntime: 'openclaw.default',
|
|
188
|
+
agents: {
|
|
189
|
+
diagnostician: { enabled: true, runtimeProfile: 'nonexistent-profile' },
|
|
190
|
+
dreamer: { enabled: true },
|
|
191
|
+
philosopher: { enabled: false },
|
|
192
|
+
scribe: { enabled: true },
|
|
193
|
+
artificer: { enabled: true },
|
|
194
|
+
evaluator: { enabled: false },
|
|
195
|
+
rolloutReviewer: { enabled: false },
|
|
196
|
+
trainer: { enabled: false },
|
|
197
|
+
correctionObserver: { enabled: false },
|
|
198
|
+
empathyObserver: { enabled: false },
|
|
199
|
+
},
|
|
200
|
+
},
|
|
201
|
+
});
|
|
202
|
+
const effective = computeEffectivePdConfig(config);
|
|
203
|
+
const result = resolveAgentRuntimeBinding(effective, 'diagnostician');
|
|
204
|
+
expect(result.ok).toBe(false);
|
|
205
|
+
if (result.ok)
|
|
206
|
+
return;
|
|
207
|
+
expect(result.readiness).toBe('needs_setup');
|
|
208
|
+
expect(result.reason).toContain('nonexistent-profile');
|
|
209
|
+
expect(result.nextAction).toBeTruthy();
|
|
210
|
+
});
|
|
211
|
+
it('returns error for disabled agent', () => {
|
|
212
|
+
const effective = computeEffectivePdConfig(null);
|
|
213
|
+
const result = resolveAgentRuntimeBinding(effective, 'philosopher');
|
|
214
|
+
expect(result.ok).toBe(false);
|
|
215
|
+
if (result.ok)
|
|
216
|
+
return;
|
|
217
|
+
expect(result.readiness).toBe('disabled');
|
|
218
|
+
});
|
|
219
|
+
});
|
|
220
|
+
// ── checkAgentRuntimeReadiness ───────────────────────────────────────────────
|
|
221
|
+
describe('checkAgentRuntimeReadiness', () => {
|
|
222
|
+
it('returns ready for openclaw profile with source=default', () => {
|
|
223
|
+
const result = checkAgentRuntimeReadiness({ type: 'openclaw', source: 'default' }, () => undefined);
|
|
224
|
+
expect(result.readiness).toBe('ready');
|
|
225
|
+
});
|
|
226
|
+
it('returns ready for openclaw profile with provider+model', () => {
|
|
227
|
+
const result = checkAgentRuntimeReadiness({ type: 'openclaw', provider: 'lmstudio', model: 'qwen3.6-27b-mtp' }, () => undefined);
|
|
228
|
+
expect(result.readiness).toBe('ready');
|
|
229
|
+
});
|
|
230
|
+
it('returns needs_setup for openclaw profile without provider or model', () => {
|
|
231
|
+
const result = checkAgentRuntimeReadiness({ type: 'openclaw' }, () => undefined);
|
|
232
|
+
expect(result.readiness).toBe('needs_setup');
|
|
233
|
+
expect(result.reason).toBeTruthy();
|
|
234
|
+
expect(result.nextAction).toBeTruthy();
|
|
235
|
+
});
|
|
236
|
+
it('AC4: returns not_ready for pi-ai profile when apiKeyEnv is missing from env', () => {
|
|
237
|
+
const result = checkAgentRuntimeReadiness({
|
|
238
|
+
type: 'pi-ai',
|
|
239
|
+
provider: 'anthropic',
|
|
240
|
+
model: 'claude-3-5-sonnet',
|
|
241
|
+
apiKeyEnv: 'MISSING_API_KEY',
|
|
242
|
+
}, (name) => name === 'MISSING_API_KEY' ? undefined : 'some-value');
|
|
243
|
+
expect(result.readiness).toBe('not_ready');
|
|
244
|
+
expect(result.reason).toContain('MISSING_API_KEY');
|
|
245
|
+
expect(result.nextAction).toBeTruthy();
|
|
246
|
+
});
|
|
247
|
+
it('returns ready for pi-ai profile when apiKeyEnv exists in env', () => {
|
|
248
|
+
const result = checkAgentRuntimeReadiness({
|
|
249
|
+
type: 'pi-ai',
|
|
250
|
+
provider: 'anthropic',
|
|
251
|
+
model: 'claude-3-5-sonnet',
|
|
252
|
+
apiKeyEnv: 'ANTHROPIC_API_KEY',
|
|
253
|
+
}, (name) => name === 'ANTHROPIC_API_KEY' ? 'sk-ant-test-key' : undefined);
|
|
254
|
+
expect(result.readiness).toBe('ready');
|
|
255
|
+
});
|
|
256
|
+
it('returns not_ready for pi-ai profile when apiKeyEnv is set but empty', () => {
|
|
257
|
+
const result = checkAgentRuntimeReadiness({
|
|
258
|
+
type: 'pi-ai',
|
|
259
|
+
provider: 'anthropic',
|
|
260
|
+
model: 'claude-3-5-sonnet',
|
|
261
|
+
apiKeyEnv: 'ANTHROPIC_API_KEY',
|
|
262
|
+
}, (name) => name === 'ANTHROPIC_API_KEY' ? '' : undefined);
|
|
263
|
+
expect(result.readiness).toBe('not_ready');
|
|
264
|
+
expect(result.reason).toContain('empty');
|
|
265
|
+
expect(result.nextAction).toBeTruthy();
|
|
266
|
+
});
|
|
267
|
+
it('returns needs_setup for pi-ai profile with empty provider', () => {
|
|
268
|
+
const result = checkAgentRuntimeReadiness(
|
|
269
|
+
// Empty provider is type-valid string but semantically invalid — tests runtime validation
|
|
270
|
+
{
|
|
271
|
+
type: 'pi-ai',
|
|
272
|
+
provider: '',
|
|
273
|
+
model: 'claude-3-5-sonnet',
|
|
274
|
+
apiKeyEnv: 'ANTHROPIC_API_KEY',
|
|
275
|
+
}, (name) => name === 'ANTHROPIC_API_KEY' ? 'sk-ant-test-key' : undefined);
|
|
276
|
+
expect(result.readiness).toBe('needs_setup');
|
|
277
|
+
expect(result.reason).toContain('provider');
|
|
278
|
+
});
|
|
279
|
+
});
|
|
280
|
+
// ── createAdapterConfigFromProfile ───────────────────────────────────────────
|
|
281
|
+
describe('createAdapterConfigFromProfile', () => {
|
|
282
|
+
it('creates PiAiRuntimeAdapterConfig from pi-ai profile', () => {
|
|
283
|
+
const result = createAdapterConfigFromProfile({
|
|
284
|
+
type: 'pi-ai',
|
|
285
|
+
provider: 'anthropic',
|
|
286
|
+
model: 'claude-3-5-sonnet',
|
|
287
|
+
apiKeyEnv: 'ANTHROPIC_API_KEY',
|
|
288
|
+
baseUrl: 'https://custom-api.example.com',
|
|
289
|
+
timeoutMs: 120_000,
|
|
290
|
+
}, '/workspace/test');
|
|
291
|
+
expect(result.runtimeKind).toBe('pi-ai');
|
|
292
|
+
if (result.runtimeKind !== 'pi-ai')
|
|
293
|
+
return;
|
|
294
|
+
expect(result.provider).toBe('anthropic');
|
|
295
|
+
expect(result.model).toBe('claude-3-5-sonnet');
|
|
296
|
+
expect(result.apiKeyEnv).toBe('ANTHROPIC_API_KEY');
|
|
297
|
+
expect(result.baseUrl).toBe('https://custom-api.example.com');
|
|
298
|
+
expect(result.timeoutMs).toBe(120_000);
|
|
299
|
+
expect(result.workspace).toBe('/workspace/test');
|
|
300
|
+
});
|
|
301
|
+
it('creates OpenClawCliRuntimeAdapter config from openclaw profile', () => {
|
|
302
|
+
const result = createAdapterConfigFromProfile({
|
|
303
|
+
type: 'openclaw',
|
|
304
|
+
provider: 'lmstudio',
|
|
305
|
+
model: 'qwen3.6-27b-mtp',
|
|
306
|
+
}, '/workspace/test');
|
|
307
|
+
expect(result.runtimeKind).toBe('openclaw-cli');
|
|
308
|
+
if (result.runtimeKind !== 'openclaw-cli')
|
|
309
|
+
return;
|
|
310
|
+
expect(result.workspaceDir).toBe('/workspace/test');
|
|
311
|
+
// Explicit provider+model → openclawMode='local' (not delegated)
|
|
312
|
+
expect(result.openclawMode).toBe('local');
|
|
313
|
+
});
|
|
314
|
+
it('creates openclaw config with source=default (delegated mode)', () => {
|
|
315
|
+
const result = createAdapterConfigFromProfile({
|
|
316
|
+
type: 'openclaw',
|
|
317
|
+
source: 'default',
|
|
318
|
+
}, '/workspace/test');
|
|
319
|
+
expect(result.runtimeKind).toBe('openclaw-cli');
|
|
320
|
+
if (result.runtimeKind !== 'openclaw-cli')
|
|
321
|
+
return;
|
|
322
|
+
// source='default' → openclawMode='default' (delegate to OpenClaw's own mode resolution)
|
|
323
|
+
expect(result.openclawMode).toBe('default');
|
|
324
|
+
});
|
|
325
|
+
it('pi-ai profile without baseUrl still produces valid config', () => {
|
|
326
|
+
const result = createAdapterConfigFromProfile({
|
|
327
|
+
type: 'pi-ai',
|
|
328
|
+
provider: 'openrouter',
|
|
329
|
+
model: 'openai/gpt-4o',
|
|
330
|
+
apiKeyEnv: 'OPENROUTER_API_KEY',
|
|
331
|
+
}, '/workspace/test');
|
|
332
|
+
expect(result.runtimeKind).toBe('pi-ai');
|
|
333
|
+
if (result.runtimeKind !== 'pi-ai')
|
|
334
|
+
return;
|
|
335
|
+
expect(result.provider).toBe('openrouter');
|
|
336
|
+
expect(result.baseUrl).toBeUndefined();
|
|
337
|
+
});
|
|
338
|
+
});
|
|
339
|
+
//# sourceMappingURL=pd-config-agent-binding.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pd-config-agent-binding.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/config/__tests__/pd-config-agent-binding.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"}
|