@principles/pd-cli 1.108.0 → 1.108.1
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/commands/__tests__/runtime-probe-config.test.d.ts +20 -0
- package/dist/commands/__tests__/runtime-probe-config.test.d.ts.map +1 -0
- package/dist/commands/__tests__/runtime-probe-config.test.js +388 -0
- package/dist/commands/__tests__/runtime-probe-config.test.js.map +1 -0
- package/dist/commands/runtime.d.ts +6 -0
- package/dist/commands/runtime.d.ts.map +1 -1
- package/dist/commands/runtime.js +139 -13
- package/dist/commands/runtime.js.map +1 -1
- package/dist/index.js +2 -19
- package/dist/index.js.map +1 -1
- package/dist/services/mainline-snapshot-assembler.d.ts.map +1 -1
- package/dist/services/mainline-snapshot-assembler.js +22 -4
- package/dist/services/mainline-snapshot-assembler.js.map +1 -1
- package/dist/services/resolve-runtime-from-pd-config.d.ts +11 -0
- package/dist/services/resolve-runtime-from-pd-config.d.ts.map +1 -1
- package/dist/services/resolve-runtime-from-pd-config.js +31 -1
- package/dist/services/resolve-runtime-from-pd-config.js.map +1 -1
- package/package.json +1 -1
- package/src/commands/__tests__/runtime-probe-config.test.ts +431 -0
- package/src/commands/runtime.ts +133 -13
- package/src/index.ts +2 -19
- package/src/services/mainline-snapshot-assembler.ts +23 -3
- package/src/services/resolve-runtime-from-pd-config.ts +41 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PRI-402: pd runtime probe reads .pd/config.yaml for pi-ai config.
|
|
3
|
+
*
|
|
4
|
+
* Tests cover:
|
|
5
|
+
* - probe reads config from .pd/config.yaml when --workspace is provided
|
|
6
|
+
* - JSON output includes configSource, runtimeProfileId, runtimeProfileLabel
|
|
7
|
+
* - explicit --provider overrides config.yaml
|
|
8
|
+
* - fail-loud JSON when config.yaml is missing or incomplete
|
|
9
|
+
* - program.parseAsync against real Commander registration (EP-04)
|
|
10
|
+
*
|
|
11
|
+
* ERR refs:
|
|
12
|
+
* - EP-04 (CLI gate): --json stdout single object, process.exit(1) + return
|
|
13
|
+
* - EP-03 (fail loud): structured JSON with reason + nextAction on failure
|
|
14
|
+
* - EP-07 (source alignment): probe and doctor read same config source
|
|
15
|
+
* - ERR-004 (source alignment): profileId/label must match doctor output
|
|
16
|
+
* - ERR-021 (handler-only tests): add program.parseAsync tests
|
|
17
|
+
* - ERR-029 (fail-loud JSON): config missing → structured JSON, not bare error
|
|
18
|
+
*/
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=runtime-probe-config.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-probe-config.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/runtime-probe-config.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG"}
|
|
@@ -0,0 +1,388 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PRI-402: pd runtime probe reads .pd/config.yaml for pi-ai config.
|
|
3
|
+
*
|
|
4
|
+
* Tests cover:
|
|
5
|
+
* - probe reads config from .pd/config.yaml when --workspace is provided
|
|
6
|
+
* - JSON output includes configSource, runtimeProfileId, runtimeProfileLabel
|
|
7
|
+
* - explicit --provider overrides config.yaml
|
|
8
|
+
* - fail-loud JSON when config.yaml is missing or incomplete
|
|
9
|
+
* - program.parseAsync against real Commander registration (EP-04)
|
|
10
|
+
*
|
|
11
|
+
* ERR refs:
|
|
12
|
+
* - EP-04 (CLI gate): --json stdout single object, process.exit(1) + return
|
|
13
|
+
* - EP-03 (fail loud): structured JSON with reason + nextAction on failure
|
|
14
|
+
* - EP-07 (source alignment): probe and doctor read same config source
|
|
15
|
+
* - ERR-004 (source alignment): profileId/label must match doctor output
|
|
16
|
+
* - ERR-021 (handler-only tests): add program.parseAsync tests
|
|
17
|
+
* - ERR-029 (fail-loud JSON): config missing → structured JSON, not bare error
|
|
18
|
+
*/
|
|
19
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
20
|
+
import { Command } from 'commander';
|
|
21
|
+
import * as fs from 'fs';
|
|
22
|
+
import * as path from 'path';
|
|
23
|
+
import * as os from 'os';
|
|
24
|
+
// ─── Mocks ─────────────────────────────────────────────────────────────────
|
|
25
|
+
// Mock only probeRuntime so we don't need a real LLM provider.
|
|
26
|
+
// All other core functions (validatePdConfig, computeEffectivePdConfig,
|
|
27
|
+
// resolveAgentRuntimeBinding, etc.) use their real implementations.
|
|
28
|
+
const mockProbeRuntime = vi.fn();
|
|
29
|
+
vi.mock('@principles/core/runtime-v2', async (importOriginal) => {
|
|
30
|
+
const actual = await importOriginal();
|
|
31
|
+
return {
|
|
32
|
+
...actual,
|
|
33
|
+
probeRuntime: mockProbeRuntime,
|
|
34
|
+
};
|
|
35
|
+
});
|
|
36
|
+
const { handleRuntimeProbe } = await import('../runtime.js');
|
|
37
|
+
// ─── Test Setup ─────────────────────────────────────────────────────────────
|
|
38
|
+
const capturedStdout = [];
|
|
39
|
+
const capturedStderr = [];
|
|
40
|
+
let capturedExitCode = null;
|
|
41
|
+
const originalExit = process.exit;
|
|
42
|
+
const originalLog = console.log;
|
|
43
|
+
const originalError = console.error;
|
|
44
|
+
const originalWarn = console.warn;
|
|
45
|
+
const originalEnv = { ...process.env };
|
|
46
|
+
beforeEach(() => {
|
|
47
|
+
capturedExitCode = null;
|
|
48
|
+
capturedStdout.length = 0;
|
|
49
|
+
capturedStderr.length = 0;
|
|
50
|
+
process.exit = vi.fn(((code) => {
|
|
51
|
+
capturedExitCode = code ?? 0;
|
|
52
|
+
}));
|
|
53
|
+
console.log = vi.fn((...args) => { capturedStdout.push(args.join(' ')); });
|
|
54
|
+
console.error = vi.fn((...args) => { capturedStderr.push(args.join(' ')); });
|
|
55
|
+
console.warn = vi.fn(() => { });
|
|
56
|
+
mockProbeRuntime.mockReset();
|
|
57
|
+
process.env = { ...originalEnv, LMSTUDIO_API_KEY: 'test-key-for-pri-402' };
|
|
58
|
+
});
|
|
59
|
+
afterEach(() => {
|
|
60
|
+
process.exit = originalExit;
|
|
61
|
+
console.log = originalLog;
|
|
62
|
+
console.error = originalError;
|
|
63
|
+
console.warn = originalWarn;
|
|
64
|
+
process.env = originalEnv;
|
|
65
|
+
});
|
|
66
|
+
// ─── Helper: create temp workspace with .pd/config.yaml ────────────────────
|
|
67
|
+
function createTempWorkspace(configYaml) {
|
|
68
|
+
const tmpDir = path.join(os.tmpdir(), `pd-probe-test-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`);
|
|
69
|
+
const pdDir = path.join(tmpDir, '.pd');
|
|
70
|
+
fs.mkdirSync(pdDir, { recursive: true });
|
|
71
|
+
// Replace __WORKSPACE_DIR__ placeholder with actual path
|
|
72
|
+
const resolvedYaml = configYaml.replace(/__WORKSPACE_DIR__/g, tmpDir.replace(/\\/g, '/'));
|
|
73
|
+
fs.writeFileSync(path.join(pdDir, 'config.yaml'), resolvedYaml, 'utf-8');
|
|
74
|
+
return tmpDir;
|
|
75
|
+
}
|
|
76
|
+
function cleanupWorkspace(dir) {
|
|
77
|
+
try {
|
|
78
|
+
fs.rmSync(dir, { recursive: true, force: true });
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
// best effort
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
const PI_AI_CONFIG_YAML = `
|
|
85
|
+
version: 1
|
|
86
|
+
features:
|
|
87
|
+
prompt: { category: core, enabled: true }
|
|
88
|
+
code_tool_hook: { category: core, enabled: true }
|
|
89
|
+
defer_archive: { category: core, enabled: true }
|
|
90
|
+
workspace:
|
|
91
|
+
default: __WORKSPACE_DIR__
|
|
92
|
+
internalAgents:
|
|
93
|
+
defaultRuntime: pi-ai.lmstudio
|
|
94
|
+
agents:
|
|
95
|
+
diagnostician:
|
|
96
|
+
enabled: true
|
|
97
|
+
runtimeProfile: pi-ai.lmstudio
|
|
98
|
+
dreamer:
|
|
99
|
+
enabled: true
|
|
100
|
+
philosopher:
|
|
101
|
+
enabled: true
|
|
102
|
+
scribe:
|
|
103
|
+
enabled: true
|
|
104
|
+
artificer:
|
|
105
|
+
enabled: true
|
|
106
|
+
runtimeProfiles:
|
|
107
|
+
pi-ai.lmstudio:
|
|
108
|
+
type: pi-ai
|
|
109
|
+
provider: lmstudio
|
|
110
|
+
model: qwen3.6-27b-mtp
|
|
111
|
+
apiKeyEnv: LMSTUDIO_API_KEY
|
|
112
|
+
baseUrl: http://localhost:1234/v1
|
|
113
|
+
`;
|
|
114
|
+
// ─── Tests: probe reads config from .pd/config.yaml ────────────────────────
|
|
115
|
+
describe('PRI-402: probe reads .pd/config.yaml for pi-ai config', () => {
|
|
116
|
+
it('reads provider/model from config.yaml when --workspace provided without --provider', async () => {
|
|
117
|
+
const workspace = createTempWorkspace(PI_AI_CONFIG_YAML);
|
|
118
|
+
try {
|
|
119
|
+
mockProbeRuntime.mockResolvedValue({
|
|
120
|
+
runtimeKind: 'pi-ai',
|
|
121
|
+
provider: 'lmstudio',
|
|
122
|
+
model: 'qwen3.6-27b-mtp',
|
|
123
|
+
health: { healthy: true, degraded: false, warnings: [], lastCheckedAt: '2026-01-01T00:00:00Z' },
|
|
124
|
+
capabilities: { streaming: true },
|
|
125
|
+
});
|
|
126
|
+
await handleRuntimeProbe({
|
|
127
|
+
runtime: 'pi-ai',
|
|
128
|
+
workspace,
|
|
129
|
+
json: true,
|
|
130
|
+
});
|
|
131
|
+
// probeRuntime should be called with config.yaml values
|
|
132
|
+
expect(mockProbeRuntime).toHaveBeenCalled();
|
|
133
|
+
const callArgs = mockProbeRuntime.mock.calls[0]?.[0];
|
|
134
|
+
expect(callArgs?.provider).toBe('lmstudio');
|
|
135
|
+
expect(callArgs?.model).toBe('qwen3.6-27b-mtp');
|
|
136
|
+
expect(callArgs?.apiKeyEnv).toBe('LMSTUDIO_API_KEY');
|
|
137
|
+
// JSON output should contain configSource, runtimeProfileId, runtimeProfileLabel
|
|
138
|
+
const output = JSON.parse(capturedStdout.join(''));
|
|
139
|
+
expect(output.configSource).toBe('.pd/config.yaml');
|
|
140
|
+
expect(output.runtimeProfileId).toBe('pi-ai.lmstudio');
|
|
141
|
+
expect(output.runtimeProfileLabel).toBe('pi-ai: lmstudio/qwen3.6-27b-mtp');
|
|
142
|
+
expect(output.ok).toBe(true);
|
|
143
|
+
}
|
|
144
|
+
finally {
|
|
145
|
+
cleanupWorkspace(workspace);
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
it('explicit --provider overrides config.yaml value', async () => {
|
|
149
|
+
const workspace = createTempWorkspace(PI_AI_CONFIG_YAML);
|
|
150
|
+
try {
|
|
151
|
+
mockProbeRuntime.mockResolvedValue({
|
|
152
|
+
runtimeKind: 'pi-ai',
|
|
153
|
+
provider: 'openrouter',
|
|
154
|
+
model: 'qwen3.6-27b-mtp',
|
|
155
|
+
health: { healthy: true, degraded: false, warnings: [], lastCheckedAt: '2026-01-01T00:00:00Z' },
|
|
156
|
+
capabilities: { streaming: true },
|
|
157
|
+
});
|
|
158
|
+
await handleRuntimeProbe({
|
|
159
|
+
runtime: 'pi-ai',
|
|
160
|
+
workspace,
|
|
161
|
+
provider: 'openrouter',
|
|
162
|
+
model: 'anthropic/claude-sonnet-4',
|
|
163
|
+
apiKeyEnv: 'OPENROUTER_API_KEY',
|
|
164
|
+
json: true,
|
|
165
|
+
});
|
|
166
|
+
const callArgs = mockProbeRuntime.mock.calls[0]?.[0];
|
|
167
|
+
// CLI flags override config.yaml
|
|
168
|
+
expect(callArgs?.provider).toBe('openrouter');
|
|
169
|
+
expect(callArgs?.model).toBe('anthropic/claude-sonnet-4');
|
|
170
|
+
expect(callArgs?.apiKeyEnv).toBe('OPENROUTER_API_KEY');
|
|
171
|
+
// Profile info still comes from config.yaml (EP-07: source alignment)
|
|
172
|
+
const output = JSON.parse(capturedStdout.join(''));
|
|
173
|
+
expect(output.configSource).toBe('.pd/config.yaml');
|
|
174
|
+
expect(output.runtimeProfileId).toBe('pi-ai.lmstudio');
|
|
175
|
+
}
|
|
176
|
+
finally {
|
|
177
|
+
cleanupWorkspace(workspace);
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
it('fail-loud JSON when config.yaml is missing and no --provider', async () => {
|
|
181
|
+
const workspace = path.join(os.tmpdir(), `pd-probe-test-missing-${Date.now()}`);
|
|
182
|
+
fs.mkdirSync(workspace, { recursive: true });
|
|
183
|
+
// No .pd/config.yaml created
|
|
184
|
+
try {
|
|
185
|
+
await handleRuntimeProbe({
|
|
186
|
+
runtime: 'pi-ai',
|
|
187
|
+
workspace,
|
|
188
|
+
json: true,
|
|
189
|
+
});
|
|
190
|
+
expect(capturedExitCode).toBe(1);
|
|
191
|
+
const output = JSON.parse(capturedStdout.join(''));
|
|
192
|
+
expect(output.ok).toBe(false);
|
|
193
|
+
expect(output.status).toBe('failed');
|
|
194
|
+
expect(typeof output.reason).toBe('string');
|
|
195
|
+
expect(typeof output.nextAction).toBe('string');
|
|
196
|
+
// Single parseable JSON object (EP-04 Rule 1)
|
|
197
|
+
expect(Array.isArray(output)).toBe(false);
|
|
198
|
+
}
|
|
199
|
+
finally {
|
|
200
|
+
cleanupWorkspace(workspace);
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
it('fail-loud JSON when provider missing from config.yaml', async () => {
|
|
204
|
+
const workspace = createTempWorkspace(`
|
|
205
|
+
version: 1
|
|
206
|
+
features:
|
|
207
|
+
prompt: { category: core, enabled: true }
|
|
208
|
+
code_tool_hook: { category: core, enabled: true }
|
|
209
|
+
defer_archive: { category: core, enabled: true }
|
|
210
|
+
workspace:
|
|
211
|
+
default: __WORKSPACE_DIR__
|
|
212
|
+
internalAgents:
|
|
213
|
+
defaultRuntime: pi-ai.broken
|
|
214
|
+
agents:
|
|
215
|
+
diagnostician:
|
|
216
|
+
enabled: true
|
|
217
|
+
runtimeProfile: pi-ai.broken
|
|
218
|
+
runtimeProfiles:
|
|
219
|
+
pi-ai.broken:
|
|
220
|
+
type: pi-ai
|
|
221
|
+
# Missing provider, model, apiKeyEnv
|
|
222
|
+
`);
|
|
223
|
+
try {
|
|
224
|
+
await handleRuntimeProbe({
|
|
225
|
+
runtime: 'pi-ai',
|
|
226
|
+
workspace,
|
|
227
|
+
json: true,
|
|
228
|
+
});
|
|
229
|
+
expect(capturedExitCode).toBe(1);
|
|
230
|
+
const output = JSON.parse(capturedStdout.join(''));
|
|
231
|
+
expect(output.ok).toBe(false);
|
|
232
|
+
expect(output.status).toBe('failed');
|
|
233
|
+
expect(typeof output.reason).toBe('string');
|
|
234
|
+
expect(typeof output.nextAction).toBe('string');
|
|
235
|
+
}
|
|
236
|
+
finally {
|
|
237
|
+
cleanupWorkspace(workspace);
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
it('fail-loud JSON when apiKeyEnv env var is not set', async () => {
|
|
241
|
+
const workspace = createTempWorkspace(PI_AI_CONFIG_YAML);
|
|
242
|
+
try {
|
|
243
|
+
// Remove the API key env var
|
|
244
|
+
delete process.env.LMSTUDIO_API_KEY;
|
|
245
|
+
await handleRuntimeProbe({
|
|
246
|
+
runtime: 'pi-ai',
|
|
247
|
+
workspace,
|
|
248
|
+
json: true,
|
|
249
|
+
});
|
|
250
|
+
expect(capturedExitCode).toBe(1);
|
|
251
|
+
const output = JSON.parse(capturedStdout.join(''));
|
|
252
|
+
expect(output.ok).toBe(false);
|
|
253
|
+
// When apiKeyEnv is not set, resolveRuntimeConfigFromPdConfig returns
|
|
254
|
+
// a config error (not_ready), so the error comes from the config resolution path
|
|
255
|
+
expect(typeof output.reason).toBe('string');
|
|
256
|
+
expect(typeof output.nextAction).toBe('string');
|
|
257
|
+
}
|
|
258
|
+
finally {
|
|
259
|
+
cleanupWorkspace(workspace);
|
|
260
|
+
}
|
|
261
|
+
});
|
|
262
|
+
it('human-readable output includes Profile and Config lines', async () => {
|
|
263
|
+
const workspace = createTempWorkspace(PI_AI_CONFIG_YAML);
|
|
264
|
+
try {
|
|
265
|
+
mockProbeRuntime.mockResolvedValue({
|
|
266
|
+
runtimeKind: 'pi-ai',
|
|
267
|
+
provider: 'lmstudio',
|
|
268
|
+
model: 'qwen3.6-27b-mtp',
|
|
269
|
+
health: { healthy: true, degraded: false, warnings: [], lastCheckedAt: '2026-01-01T00:00:00Z' },
|
|
270
|
+
capabilities: { streaming: true },
|
|
271
|
+
});
|
|
272
|
+
await handleRuntimeProbe({
|
|
273
|
+
runtime: 'pi-ai',
|
|
274
|
+
workspace,
|
|
275
|
+
json: false,
|
|
276
|
+
});
|
|
277
|
+
const output = capturedStdout.join('\n');
|
|
278
|
+
expect(output).toContain('Profile:');
|
|
279
|
+
expect(output).toContain('pi-ai: lmstudio/qwen3.6-27b-mtp');
|
|
280
|
+
expect(output).toContain('Config:');
|
|
281
|
+
expect(output).toContain('.pd/config.yaml');
|
|
282
|
+
}
|
|
283
|
+
finally {
|
|
284
|
+
cleanupWorkspace(workspace);
|
|
285
|
+
}
|
|
286
|
+
});
|
|
287
|
+
});
|
|
288
|
+
// ─── Tests: program.parseAsync against real Commander registration (EP-04) ──
|
|
289
|
+
// Import the real command registration function to test actual production wiring
|
|
290
|
+
const { registerRuntimeProbeCommand } = await import('../runtime.js');
|
|
291
|
+
function attachCapture(cmd, state) {
|
|
292
|
+
// Override the action handler to capture opts without calling the real handler
|
|
293
|
+
cmd.action((...args) => {
|
|
294
|
+
// Find the opts object (last non-Command, non-null object arg)
|
|
295
|
+
let optsArg = null;
|
|
296
|
+
for (let i = args.length - 1; i >= 0; i--) {
|
|
297
|
+
const arg = args[i];
|
|
298
|
+
if (arg !== null && typeof arg === 'object' && !(arg instanceof Command)) {
|
|
299
|
+
optsArg = arg;
|
|
300
|
+
break;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
state.opts = optsArg ?? {};
|
|
304
|
+
// Do NOT call original action (would call handleRuntimeProbe which needs real runtime)
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
function freshProgram() {
|
|
308
|
+
const program = new Command();
|
|
309
|
+
program.name('pd').exitOverride();
|
|
310
|
+
return program;
|
|
311
|
+
}
|
|
312
|
+
describe('PRI-402: probe command flag wiring (EP-04 real registration)', () => {
|
|
313
|
+
it('registers --runtime as required option via real registration', () => {
|
|
314
|
+
const program = freshProgram();
|
|
315
|
+
const runtimeCmd = program.command('runtime');
|
|
316
|
+
const probeCmd = registerRuntimeProbeCommand(runtimeCmd);
|
|
317
|
+
const runtimeOpt = probeCmd.options.find((o) => o.long === '--runtime');
|
|
318
|
+
expect(runtimeOpt).toBeDefined();
|
|
319
|
+
expect(runtimeOpt?.required).toBe(true);
|
|
320
|
+
});
|
|
321
|
+
it('registers --workspace with -w shorthand via real registration', () => {
|
|
322
|
+
const program = freshProgram();
|
|
323
|
+
const runtimeCmd = program.command('runtime');
|
|
324
|
+
const probeCmd = registerRuntimeProbeCommand(runtimeCmd);
|
|
325
|
+
const wsOpt = probeCmd.options.find((o) => o.short === '-w');
|
|
326
|
+
expect(wsOpt).toBeDefined();
|
|
327
|
+
expect(wsOpt?.long).toBe('--workspace');
|
|
328
|
+
});
|
|
329
|
+
it('parses --runtime pi-ai --workspace <dir> --json correctly via real registration', async () => {
|
|
330
|
+
const program = freshProgram();
|
|
331
|
+
const runtimeCmd = program.command('runtime');
|
|
332
|
+
const probeCmd = registerRuntimeProbeCommand(runtimeCmd);
|
|
333
|
+
const captured = { opts: null };
|
|
334
|
+
attachCapture(probeCmd, captured);
|
|
335
|
+
await program.parseAsync(['node', 'pd', 'runtime', 'probe', '--runtime', 'pi-ai', '--workspace', '/tmp/test', '--json']);
|
|
336
|
+
expect(captured.opts).not.toBeNull();
|
|
337
|
+
if (!captured.opts)
|
|
338
|
+
throw new Error('captured.opts is null');
|
|
339
|
+
expect(captured.opts.runtime).toBe('pi-ai');
|
|
340
|
+
expect(captured.opts.workspace).toBe('/tmp/test');
|
|
341
|
+
expect(captured.opts.json).toBe(true);
|
|
342
|
+
});
|
|
343
|
+
it('parses --runtime config --workspace <dir> correctly via real registration', async () => {
|
|
344
|
+
const program = freshProgram();
|
|
345
|
+
const runtimeCmd = program.command('runtime');
|
|
346
|
+
const probeCmd = registerRuntimeProbeCommand(runtimeCmd);
|
|
347
|
+
const captured = { opts: null };
|
|
348
|
+
attachCapture(probeCmd, captured);
|
|
349
|
+
await program.parseAsync(['node', 'pd', 'runtime', 'probe', '--runtime', 'config', '--workspace', '/tmp/test']);
|
|
350
|
+
expect(captured.opts).not.toBeNull();
|
|
351
|
+
if (!captured.opts)
|
|
352
|
+
throw new Error('captured.opts is null');
|
|
353
|
+
expect(captured.opts.runtime).toBe('config');
|
|
354
|
+
expect(captured.opts.workspace).toBe('/tmp/test');
|
|
355
|
+
});
|
|
356
|
+
});
|
|
357
|
+
// ─── Tests: resolve-runtime-from-pd-config profile extraction ───────────────
|
|
358
|
+
describe('PRI-402: resolveRuntimeWithOverrides returns profile info', () => {
|
|
359
|
+
it('returns runtimeProfileId and runtimeProfileLabel from config.yaml', async () => {
|
|
360
|
+
const workspace = createTempWorkspace(PI_AI_CONFIG_YAML);
|
|
361
|
+
try {
|
|
362
|
+
const { resolveRuntimeWithOverrides } = await import('../../services/resolve-runtime-from-pd-config.js');
|
|
363
|
+
const result = resolveRuntimeWithOverrides(workspace, {});
|
|
364
|
+
expect(result.configSource).toBe('.pd/config.yaml');
|
|
365
|
+
expect(result.runtimeProfileId).toBe('pi-ai.lmstudio');
|
|
366
|
+
expect(result.runtimeProfileLabel).toBe('pi-ai: lmstudio/qwen3.6-27b-mtp');
|
|
367
|
+
}
|
|
368
|
+
finally {
|
|
369
|
+
cleanupWorkspace(workspace);
|
|
370
|
+
}
|
|
371
|
+
});
|
|
372
|
+
it('returns default profile when config.yaml is missing', async () => {
|
|
373
|
+
const workspace = path.join(os.tmpdir(), `pd-probe-test-noprofile-${Date.now()}`);
|
|
374
|
+
fs.mkdirSync(workspace, { recursive: true });
|
|
375
|
+
try {
|
|
376
|
+
const { resolveRuntimeWithOverrides } = await import('../../services/resolve-runtime-from-pd-config.js');
|
|
377
|
+
const result = resolveRuntimeWithOverrides(workspace, {});
|
|
378
|
+
// Missing config → defaults, which use openclaw.default as defaultRuntime
|
|
379
|
+
expect(result.configSource).toBe('.pd/config.yaml');
|
|
380
|
+
expect(result.runtimeProfileId).toBe('openclaw.default');
|
|
381
|
+
expect(typeof result.runtimeProfileLabel).toBe('string');
|
|
382
|
+
}
|
|
383
|
+
finally {
|
|
384
|
+
cleanupWorkspace(workspace);
|
|
385
|
+
}
|
|
386
|
+
});
|
|
387
|
+
});
|
|
388
|
+
//# sourceMappingURL=runtime-probe-config.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-probe-config.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/runtime-probe-config.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Command } from 'commander';
|
|
1
2
|
interface RuntimeProbeOptions {
|
|
2
3
|
runtime: string;
|
|
3
4
|
openclawLocal?: boolean;
|
|
@@ -16,5 +17,10 @@ interface RuntimeProbeOptions {
|
|
|
16
17
|
* pd runtime probe — dispatches to openclaw-cli, pi-ai, or config branch.
|
|
17
18
|
*/
|
|
18
19
|
export declare function handleRuntimeProbe(opts: RuntimeProbeOptions): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Register the `pd runtime probe` command on a Commander instance.
|
|
22
|
+
* Used by index.ts and tests to ensure real command wiring is verified (EP-04).
|
|
23
|
+
*/
|
|
24
|
+
export declare function registerRuntimeProbeCommand(runtimeCmd: Command): Command;
|
|
19
25
|
export {};
|
|
20
26
|
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/commands/runtime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/commands/runtime.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,UAAU,mBAAmB;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAiZD;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBjF;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAmBxE"}
|