@wjarka/cezarion 0.11.2-pr61.94 → 0.11.3
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/contract/index.js +2 -1
- package/dist/contract/workspace.d.ts +14 -0
- package/dist/core/opencode-model-catalog.d.ts +5 -5
- package/dist/core/opencode-model-catalog.js +96 -34
- package/dist/core/opencode-model-catalog.js.map +1 -1
- package/dist/core/pi-model-catalog.d.ts +7 -0
- package/dist/core/pi-model-catalog.js +123 -26
- package/dist/core/pi-model-catalog.js.map +1 -1
- package/dist/core/runner-model-catalog.d.ts +2 -0
- package/dist/core/runner-model-catalog.js.map +1 -1
- package/dist/server/server.d.ts +1 -0
- package/package.json +3 -3
- package/web/dist/assets/{alert-dialog-g-GVThSw.js → alert-dialog-Bib2-aHJ.js} +1 -1
- package/web/dist/assets/arrow-down-DF9UfPoy.js +1 -0
- package/web/dist/assets/arrow-left-BVgebuvi.js +1 -0
- package/web/dist/assets/{centered-state-DdbE_pNl.js → centered-state-TyZe3tga.js} +1 -1
- package/web/dist/assets/chevron-right-W2B4c3Bn.js +1 -0
- package/web/dist/assets/{collapsible-R1r7zUOB.js → collapsible-DTRw1YnV.js} +1 -1
- package/web/dist/assets/{commit-list-Bgb1DHBX.js → commit-list-BKtzO28W.js} +1 -1
- package/web/dist/assets/{compare-variants-DKnJOU1u.js → compare-variants--E1SPJzi.js} +1 -1
- package/web/dist/assets/{diff-Cv3z9esx.js → diff-DtXK3tZy.js} +2 -2
- package/web/dist/assets/{diff-stat-ydfu0_5T.js → diff-stat-CJSJmLcb.js} +1 -1
- package/web/dist/assets/{diff-view-DnPdkmk2.js → diff-view-wZScCPoa.js} +1 -1
- package/web/dist/assets/{dropdown-menu-CPP9gEmn.js → dropdown-menu-CQp168wo.js} +1 -1
- package/web/dist/assets/editable-title-BWosq6YG.js +1 -0
- package/web/dist/assets/{ellipsis-vertical-WNkaehnw.js → ellipsis-vertical-BXllsyll.js} +1 -1
- package/web/dist/assets/{file-RvhJlchx.js → file-BgcgwEU-.js} +1 -1
- package/web/dist/assets/{folder-Dz-weqBo.js → folder-DGrkgLg9.js} +1 -1
- package/web/dist/assets/{git-toolbar-YW5Bv-c1.js → git-toolbar-D9Wu2J60.js} +1 -1
- package/web/dist/assets/{github-YBpFZMf3.js → github-xAF2VFFK.js} +1 -1
- package/web/dist/assets/{image-preview-DYiOSYoY.js → image-preview-Cd7b7Evu.js} +1 -1
- package/web/dist/assets/index-CKWqcYjr.js +7 -0
- package/web/dist/assets/{markdown-DQHRRO9e.js → markdown-Cvzv-jvo.js} +1 -1
- package/web/dist/assets/new-task-form-CZAdHx_5.js +1 -0
- package/web/dist/assets/{pill-FAFXjmY6.js → pill-B9vrSbT6.js} +1 -1
- package/web/dist/assets/{project-router-Dzc0JK2j.js → project-router-CF-1GU39.js} +1 -1
- package/web/dist/assets/{prompt-templates-DmqtzSPL.js → prompt-templates-CSmaXZ5G.js} +1 -1
- package/web/dist/assets/{refresh-cw-BP4TkA4M.js → refresh-cw-D5a-hkgq.js} +1 -1
- package/web/dist/assets/{repo-git-Cwt6VGcW.js → repo-git-BicCjDSy.js} +1 -1
- package/web/dist/assets/{run-diff-CvcsWwew.js → run-diff-DWzdGMTg.js} +1 -1
- package/web/dist/assets/run-header-Cc7KFOMX.js +1 -0
- package/web/dist/assets/{search-x-Drnmsmd0.js → search-x-DJIOs-nB.js} +1 -1
- package/web/dist/assets/{skill-empty-hint-D2l_OqZ5.js → skill-empty-hint-BcecPZ6K.js} +1 -1
- package/web/dist/assets/skills-BKYATWFF.js +1 -0
- package/web/dist/assets/{sparkles-B9ja4FHw.js → sparkles-C-1JzGqe.js} +1 -1
- package/web/dist/assets/{square-terminal-CB2du-YG.js → square-terminal-CnrkOecA.js} +1 -1
- package/web/dist/assets/{tab-link-C5FWJ66Y.js → tab-link-CQgzNUwP.js} +1 -1
- package/web/dist/assets/{task-changes-DicvDkAm.js → task-changes--AyxNXvn.js} +1 -1
- package/web/dist/assets/{task-commits-C6o-VVhC.js → task-commits-DlBBODPF.js} +1 -1
- package/web/dist/assets/{task-files-Jd4n1rYe.js → task-files-DZ49FGVz.js} +1 -1
- package/web/dist/assets/task-thread-D10akRi2.js +9 -0
- package/web/dist/assets/{textarea-Sm6doUPO.js → textarea-BPMIukW0.js} +1 -1
- package/web/dist/assets/{thread-loading-DojNeADh.js → thread-loading-C9cWYGbd.js} +1 -1
- package/web/dist/assets/{trash-2-C_lGBXG2.js → trash-2-CwmIdbv2.js} +1 -1
- package/web/dist/assets/{triangle-alert-Brk_ldFl.js → triangle-alert-BU7Fnc0D.js} +1 -1
- package/web/dist/assets/{upload-Cxs1UROt.js → upload-B54t9i6X.js} +1 -1
- package/web/dist/assets/{use-desktop-CVVHXF_O.js → use-desktop-Co7z3Xov.js} +1 -1
- package/web/dist/assets/{use-submit-shortcut-DzeqN3GK.js → use-submit-shortcut-DfJM2Y1U.js} +1 -1
- package/web/dist/assets/{utils-Unt0mZvU.js → utils-BLZyueuK.js} +1 -1
- package/web/dist/assets/{workflows-Cottripv.js → workflows-CfC6b8y4.js} +1 -1
- package/web/dist/assets/{zoomable-image-ByySCppM.js → zoomable-image-BQMum6hd.js} +1 -1
- package/web/dist/index.html +22 -22
- package/web/dist/assets/arrow-down-BzmL0uj0.js +0 -1
- package/web/dist/assets/arrow-left-DtUM7GFU.js +0 -1
- package/web/dist/assets/chevron-right-DnLh0uM2.js +0 -1
- package/web/dist/assets/editable-title-D_bWdmY0.js +0 -1
- package/web/dist/assets/index-EgV1pTsY.js +0 -7
- package/web/dist/assets/new-task-form-D2KlpqYC.js +0 -1
- package/web/dist/assets/run-header-C3B5P5qD.js +0 -1
- package/web/dist/assets/skills-BWIlWIZB.js +0 -1
- package/web/dist/assets/task-thread-ChnQQtXZ.js +0 -9
package/dist/contract/index.js
CHANGED
|
@@ -1333,7 +1333,8 @@ function runnerDiscoversModels(runner) {
|
|
|
1333
1333
|
var runnerModelOptionSchema = z9.object({
|
|
1334
1334
|
id: z9.string(),
|
|
1335
1335
|
label: z9.string(),
|
|
1336
|
-
description: z9.string()
|
|
1336
|
+
description: z9.string(),
|
|
1337
|
+
effortLevels: z9.array(effortLevelSchema).optional()
|
|
1337
1338
|
});
|
|
1338
1339
|
var runnerModelCatalogResponseSchema = z9.object({
|
|
1339
1340
|
runner: runnerSchema,
|
|
@@ -517,6 +517,13 @@ export declare const runnerModelOptionSchema: z.ZodObject<{
|
|
|
517
517
|
id: z.ZodString;
|
|
518
518
|
label: z.ZodString;
|
|
519
519
|
description: z.ZodString;
|
|
520
|
+
effortLevels: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
521
|
+
high: "high";
|
|
522
|
+
low: "low";
|
|
523
|
+
max: "max";
|
|
524
|
+
medium: "medium";
|
|
525
|
+
xhigh: "xhigh";
|
|
526
|
+
}>>>;
|
|
520
527
|
}, z.core.$strip>;
|
|
521
528
|
export type RunnerModelOption = z.infer<typeof runnerModelOptionSchema>;
|
|
522
529
|
/** `GET /api/v1/models?runner=codex|opencode|pi` — the models discovered from that runner's own
|
|
@@ -533,6 +540,13 @@ export declare const runnerModelCatalogResponseSchema: z.ZodObject<{
|
|
|
533
540
|
id: z.ZodString;
|
|
534
541
|
label: z.ZodString;
|
|
535
542
|
description: z.ZodString;
|
|
543
|
+
effortLevels: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
544
|
+
high: "high";
|
|
545
|
+
low: "low";
|
|
546
|
+
max: "max";
|
|
547
|
+
medium: "medium";
|
|
548
|
+
xhigh: "xhigh";
|
|
549
|
+
}>>>;
|
|
536
550
|
}, z.core.$strip>>;
|
|
537
551
|
source: z.ZodEnum<{
|
|
538
552
|
cache: "cache";
|
|
@@ -22,11 +22,11 @@ export declare function resolveOpencodeExecutable(bin?: string): string;
|
|
|
22
22
|
*/
|
|
23
23
|
export declare function discoverOpencodeModels(options: OpencodeModelDiscoveryOptions): Promise<ModelOption[]>;
|
|
24
24
|
/**
|
|
25
|
-
* Turn `opencode models` output into picker options, preserving OpenCode's own order.
|
|
25
|
+
* Turn `opencode models --verbose` output into picker options, preserving OpenCode's own order.
|
|
26
|
+
* Each model id starts a segment whose remaining lines are its JSON metadata. Invalid metadata is
|
|
27
|
+
* isolated to that model: the id remains usable and the cockpit applies its per-model fallback.
|
|
26
28
|
*
|
|
27
|
-
* Empty output is a legitimate answer (no provider configured yet) and yields no models
|
|
28
|
-
*
|
|
29
|
-
* failure instead: the CLI said something we cannot read, and reporting "unavailable" is more
|
|
30
|
-
* honest than an empty catalog that looks like "you have no models".
|
|
29
|
+
* Empty output is a legitimate answer (no provider configured yet) and yields no models. Output
|
|
30
|
+
* that contains lines but NO recognizable id is treated as a failure instead.
|
|
31
31
|
*/
|
|
32
32
|
export declare function parseOpencodeModels(stdout: string): ModelOption[];
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { spawn as nodeSpawn } from 'node:child_process';
|
|
2
|
+
import { effortLevelSchema } from '../contract/index.js';
|
|
2
3
|
import { trackChildExit } from './agent-runner.js';
|
|
3
4
|
import { buildChildEnv } from './agent-env.js';
|
|
4
5
|
const DEFAULT_DISCOVERY_TIMEOUT_MS = 10_000;
|
|
@@ -32,50 +33,69 @@ export function resolveOpencodeExecutable(bin) {
|
|
|
32
33
|
*/
|
|
33
34
|
export async function discoverOpencodeModels(options) {
|
|
34
35
|
const bin = resolveOpencodeExecutable(options.bin);
|
|
35
|
-
const
|
|
36
|
-
const
|
|
36
|
+
const spawn = options.spawn ?? spawnOpencode;
|
|
37
|
+
const deadline = Date.now() + (options.timeoutMs ?? DEFAULT_DISCOVERY_TIMEOUT_MS);
|
|
38
|
+
try {
|
|
39
|
+
return await runOpencodeProbe(bin, ['models', '--verbose'], options.cwd, spawn, deadline);
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
if (!(error instanceof OpencodeNonzeroExitError) || Date.now() >= deadline)
|
|
43
|
+
throw error;
|
|
44
|
+
// Older OpenCode releases know `models` but not `--verbose`. Preserve their existing model
|
|
45
|
+
// picker and let every model use the cockpit's metadata fallback.
|
|
46
|
+
return runOpencodeProbe(bin, ['models'], options.cwd, spawn, deadline);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
class OpencodeNonzeroExitError extends Error {
|
|
50
|
+
}
|
|
51
|
+
async function runOpencodeProbe(bin, args, cwd, spawn, deadline) {
|
|
52
|
+
const child = spawn(bin, args, cwd);
|
|
37
53
|
const kill = teardown(child);
|
|
38
|
-
const timeoutMs = options.timeoutMs ?? DEFAULT_DISCOVERY_TIMEOUT_MS;
|
|
39
54
|
let timeout;
|
|
40
55
|
try {
|
|
41
|
-
|
|
56
|
+
const result = new Promise((resolve, reject) => {
|
|
42
57
|
let stdout = '';
|
|
43
|
-
let
|
|
44
|
-
const fail = (
|
|
45
|
-
|
|
58
|
+
let settled = false;
|
|
59
|
+
const fail = (error) => {
|
|
60
|
+
if (settled)
|
|
61
|
+
return;
|
|
62
|
+
settled = true;
|
|
63
|
+
reject(error);
|
|
46
64
|
kill();
|
|
47
65
|
};
|
|
48
|
-
timeout = setTimeout(() => fail('OpenCode model discovery timed out'),
|
|
66
|
+
timeout = setTimeout(() => fail(new Error('OpenCode model discovery timed out')), Math.max(1, deadline - Date.now()));
|
|
49
67
|
timeout.unref?.();
|
|
50
68
|
child.stdout.setEncoding('utf8');
|
|
51
69
|
child.stdout.on('data', (chunk) => {
|
|
52
|
-
if (
|
|
70
|
+
if (settled)
|
|
53
71
|
return;
|
|
54
72
|
stdout += chunk;
|
|
55
73
|
if (stdout.length > MAX_OUTPUT_CHARS) {
|
|
56
|
-
|
|
57
|
-
fail('OpenCode model discovery exceeded the output limit');
|
|
74
|
+
fail(new Error('OpenCode model discovery exceeded the output limit'));
|
|
58
75
|
}
|
|
59
76
|
});
|
|
60
|
-
// Drained but ignored: OpenCode prints provider warnings here, and an unread pipe would
|
|
61
|
-
// eventually stall the child.
|
|
62
77
|
child.stderr.resume();
|
|
63
|
-
child.once('error', () => fail('OpenCode model discovery
|
|
78
|
+
child.stdin.once('error', () => fail(new Error('OpenCode model discovery stdin failed')));
|
|
79
|
+
child.once('error', () => fail(new Error('OpenCode model discovery child failed')));
|
|
64
80
|
child.once('close', (code) => {
|
|
65
|
-
if (
|
|
81
|
+
if (settled)
|
|
66
82
|
return;
|
|
67
83
|
if (code !== 0) {
|
|
68
|
-
fail(`OpenCode model discovery child exited (${code ?? 'unknown'})`);
|
|
84
|
+
fail(new OpencodeNonzeroExitError(`OpenCode model discovery child exited (${code ?? 'unknown'})`));
|
|
69
85
|
return;
|
|
70
86
|
}
|
|
71
87
|
try {
|
|
72
|
-
|
|
88
|
+
const models = parseOpencodeModels(stdout);
|
|
89
|
+
settled = true;
|
|
90
|
+
resolve(models);
|
|
73
91
|
}
|
|
74
92
|
catch (error) {
|
|
75
|
-
|
|
93
|
+
fail(error instanceof Error ? error : new Error(String(error)));
|
|
76
94
|
}
|
|
77
95
|
});
|
|
78
96
|
});
|
|
97
|
+
child.stdin.end();
|
|
98
|
+
return await result;
|
|
79
99
|
}
|
|
80
100
|
finally {
|
|
81
101
|
if (timeout)
|
|
@@ -84,12 +104,12 @@ export async function discoverOpencodeModels(options) {
|
|
|
84
104
|
}
|
|
85
105
|
}
|
|
86
106
|
/**
|
|
87
|
-
* Turn `opencode models` output into picker options, preserving OpenCode's own order.
|
|
107
|
+
* Turn `opencode models --verbose` output into picker options, preserving OpenCode's own order.
|
|
108
|
+
* Each model id starts a segment whose remaining lines are its JSON metadata. Invalid metadata is
|
|
109
|
+
* isolated to that model: the id remains usable and the cockpit applies its per-model fallback.
|
|
88
110
|
*
|
|
89
|
-
* Empty output is a legitimate answer (no provider configured yet) and yields no models
|
|
90
|
-
*
|
|
91
|
-
* failure instead: the CLI said something we cannot read, and reporting "unavailable" is more
|
|
92
|
-
* honest than an empty catalog that looks like "you have no models".
|
|
111
|
+
* Empty output is a legitimate answer (no provider configured yet) and yields no models. Output
|
|
112
|
+
* that contains lines but NO recognizable id is treated as a failure instead.
|
|
93
113
|
*/
|
|
94
114
|
export function parseOpencodeModels(stdout) {
|
|
95
115
|
const lines = stdout
|
|
@@ -97,31 +117,73 @@ export function parseOpencodeModels(stdout) {
|
|
|
97
117
|
.split('\n')
|
|
98
118
|
.map((line) => line.trim())
|
|
99
119
|
.filter((line) => line.length > 0);
|
|
100
|
-
const
|
|
101
|
-
|
|
120
|
+
const segments = [];
|
|
121
|
+
let current;
|
|
102
122
|
for (const line of lines) {
|
|
103
|
-
if (
|
|
123
|
+
if (MODEL_LINE_RE.test(line)) {
|
|
124
|
+
current = { id: line, metadata: [] };
|
|
125
|
+
segments.push(current);
|
|
126
|
+
}
|
|
127
|
+
else if (current) {
|
|
128
|
+
current.metadata.push(line);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
const models = [];
|
|
132
|
+
const indexes = new Map();
|
|
133
|
+
for (const segment of segments) {
|
|
134
|
+
const effortLevels = effortLevelsFromMetadata(segment.metadata);
|
|
135
|
+
const existingIndex = indexes.get(segment.id);
|
|
136
|
+
if (existingIndex !== undefined) {
|
|
137
|
+
const existing = models[existingIndex];
|
|
138
|
+
if (!existing.effortLevels && effortLevels) {
|
|
139
|
+
models[existingIndex] = { ...existing, effortLevels };
|
|
140
|
+
}
|
|
104
141
|
continue;
|
|
142
|
+
}
|
|
105
143
|
if (models.length >= MAX_MODELS)
|
|
106
144
|
throw new Error('OpenCode model discovery exceeded the size limit');
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
models.push({
|
|
145
|
+
const provider = segment.id.slice(0, segment.id.indexOf('/'));
|
|
146
|
+
indexes.set(segment.id, models.length);
|
|
147
|
+
models.push({
|
|
148
|
+
id: segment.id,
|
|
149
|
+
label: segment.id,
|
|
150
|
+
description: `via ${provider}`,
|
|
151
|
+
...(effortLevels ? { effortLevels } : {}),
|
|
152
|
+
});
|
|
110
153
|
}
|
|
111
154
|
if (models.length === 0 && lines.length > 0) {
|
|
112
155
|
throw new Error('OpenCode model discovery returned unrecognized output');
|
|
113
156
|
}
|
|
114
157
|
return models;
|
|
115
158
|
}
|
|
159
|
+
function effortLevelsFromMetadata(lines) {
|
|
160
|
+
if (lines.length === 0)
|
|
161
|
+
return undefined;
|
|
162
|
+
let metadata;
|
|
163
|
+
try {
|
|
164
|
+
metadata = JSON.parse(lines.join('\n'));
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
return undefined;
|
|
168
|
+
}
|
|
169
|
+
if (!isRecord(metadata) || !isRecord(metadata.variants))
|
|
170
|
+
return undefined;
|
|
171
|
+
const levels = [];
|
|
172
|
+
for (const name of Object.keys(metadata.variants)) {
|
|
173
|
+
const parsed = effortLevelSchema.safeParse(name);
|
|
174
|
+
if (parsed.success && !levels.includes(parsed.data))
|
|
175
|
+
levels.push(parsed.data);
|
|
176
|
+
}
|
|
177
|
+
return levels.length > 0 ? levels : undefined;
|
|
178
|
+
}
|
|
179
|
+
function isRecord(value) {
|
|
180
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
181
|
+
}
|
|
116
182
|
function spawnOpencode(bin, args, cwd) {
|
|
117
|
-
|
|
183
|
+
return nodeSpawn(bin, [...args], {
|
|
118
184
|
cwd,
|
|
119
185
|
env: buildChildEnv({ backend: 'opencode' }),
|
|
120
186
|
});
|
|
121
|
-
// Nothing is ever written to it, and an open stdin is what makes a CLI that expects a TTY
|
|
122
|
-
// sit and wait instead of printing its list.
|
|
123
|
-
child.stdin.end();
|
|
124
|
-
return child;
|
|
125
187
|
}
|
|
126
188
|
/**
|
|
127
189
|
* Returns the probe's teardown: SIGTERM now, SIGKILL once the grace window elapses.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-model-catalog.js","sourceRoot":"","sources":["../../src/core/opencode-model-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,SAAS,EAAuC,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAU/C,MAAM,4BAA4B,GAAG,MAAM,CAAC;AAC5C,yEAAyE;AACzE,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC;AACnC,MAAM,UAAU,GAAG,GAAG,CAAC;AACvB,uFAAuF;AACvF,MAAM,gBAAgB,GAAG,GAAG,GAAG,KAAK,CAAC;AAErC;;;;;GAKG;AACH,MAAM,aAAa,GAAG,iDAAiD,CAAC;AAExE,6EAA6E;AAC7E,MAAM,OAAO,GAAG,0BAA0B,CAAC;AAE3C,2FAA2F;AAC3F,MAAM,UAAU,yBAAyB,CAAC,GAAY;IACpD,OAAO,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,UAAU,CAAC;AAC3D,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAsC;IAEtC,MAAM,GAAG,GAAG,yBAAyB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnD,MAAM,
|
|
1
|
+
{"version":3,"file":"opencode-model-catalog.js","sourceRoot":"","sources":["../../src/core/opencode-model-catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type ChildProcessWithoutNullStreams } from 'node:child_process';
|
|
2
|
+
import { type EffortLevel } from '../contract/index.js';
|
|
2
3
|
import type { ModelOption } from './runner-model-catalog.ts';
|
|
3
4
|
export interface PiModelDiscoveryOptions {
|
|
4
5
|
cwd: string;
|
|
@@ -29,3 +30,9 @@ export declare function discoverPiModels(options: PiModelDiscoveryOptions): Prom
|
|
|
29
30
|
* like "you have no models".
|
|
30
31
|
*/
|
|
31
32
|
export declare function parsePiModels(stdout: string): ModelOption[];
|
|
33
|
+
/** Parse model-indexed Pi RPC responses without letting a failed model switch reuse prior state. */
|
|
34
|
+
export declare function parsePiEffortLevels(stdout: string, modelCount: number): Map<number, EffortLevel[]>;
|
|
35
|
+
export declare function spawnPi(bin: string, args: readonly string[], cwd: string, spawnImpl?: (bin: string, args: string[], options: {
|
|
36
|
+
cwd: string;
|
|
37
|
+
env: NodeJS.ProcessEnv;
|
|
38
|
+
}) => ChildProcessWithoutNullStreams): ChildProcessWithoutNullStreams;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { spawn as nodeSpawn } from 'node:child_process';
|
|
2
|
+
import { effortLevelSchema } from '../contract/index.js';
|
|
2
3
|
import { trackChildExit } from './agent-runner.js';
|
|
3
4
|
import { buildChildEnv } from './agent-env.js';
|
|
4
5
|
const DEFAULT_DISCOVERY_TIMEOUT_MS = 10_000;
|
|
@@ -7,6 +8,14 @@ export const KILL_GRACE_MS = 2_000;
|
|
|
7
8
|
const MAX_MODELS = 500;
|
|
8
9
|
/** Defensive cap on what we buffer from a misbehaving child (characters of stdout). */
|
|
9
10
|
const MAX_OUTPUT_CHARS = 512 * 1_024;
|
|
11
|
+
const RPC_ARGS = [
|
|
12
|
+
'--mode',
|
|
13
|
+
'rpc',
|
|
14
|
+
'--no-session',
|
|
15
|
+
'--no-tools',
|
|
16
|
+
'--no-skills',
|
|
17
|
+
'--no-prompt-templates',
|
|
18
|
+
];
|
|
10
19
|
/** SGR/CSI sequences — `pi --list-models` colorizes a TTY. */
|
|
11
20
|
const ANSI_RE = /\u001B\[[0-9;]*[A-Za-z]/g;
|
|
12
21
|
/** The host binary, resolved exactly like `PiRunner` and the backend probe. */
|
|
@@ -23,53 +32,93 @@ export function resolvePiExecutable(bin) {
|
|
|
23
32
|
* a model cap.
|
|
24
33
|
*/
|
|
25
34
|
export async function discoverPiModels(options) {
|
|
26
|
-
// `PiRunner` swaps in the bundled mock under CEZ_DRY_RUN=1
|
|
27
|
-
//
|
|
28
|
-
// shells out to a real `pi` (AGENTS.md: dry-run keeps working with no real CLI).
|
|
35
|
+
// `PiRunner` swaps in the bundled mock under CEZ_DRY_RUN=1. Without an explicit binary, skip
|
|
36
|
+
// both host probes so an offline dry-run cockpit never shells out to a real `pi`.
|
|
29
37
|
if (options.bin === undefined && process.env.CEZ_PI_BIN === undefined && process.env.CEZ_DRY_RUN === '1') {
|
|
30
38
|
return [];
|
|
31
39
|
}
|
|
32
40
|
const bin = resolvePiExecutable(options.bin);
|
|
33
|
-
const
|
|
34
|
-
const
|
|
41
|
+
const spawn = options.spawn ?? spawnPi;
|
|
42
|
+
const deadline = Date.now() + (options.timeoutMs ?? DEFAULT_DISCOVERY_TIMEOUT_MS);
|
|
43
|
+
const listChild = spawn(bin, ['--list-models'], options.cwd);
|
|
44
|
+
const listOutputPromise = collectPiOutput(listChild, Math.max(1, deadline - Date.now()), 'Pi model discovery');
|
|
45
|
+
listChild.stdin.end();
|
|
46
|
+
const listOutput = await listOutputPromise;
|
|
47
|
+
const models = parsePiModels(listOutput);
|
|
48
|
+
if (models.length === 0 || Date.now() >= deadline)
|
|
49
|
+
return models;
|
|
50
|
+
try {
|
|
51
|
+
const rpcChild = spawn(bin, RPC_ARGS, options.cwd);
|
|
52
|
+
const outputPromise = collectPiOutput(rpcChild, Math.max(1, deadline - Date.now()), 'Pi effort discovery');
|
|
53
|
+
try {
|
|
54
|
+
models.forEach((model, index) => {
|
|
55
|
+
const slash = model.id.indexOf('/');
|
|
56
|
+
rpcChild.stdin.write(`${JSON.stringify({
|
|
57
|
+
id: `set:${index}`,
|
|
58
|
+
type: 'set_model',
|
|
59
|
+
provider: model.id.slice(0, slash),
|
|
60
|
+
modelId: model.id.slice(slash + 1),
|
|
61
|
+
})}\n`);
|
|
62
|
+
rpcChild.stdin.write(`${JSON.stringify({
|
|
63
|
+
id: `levels:${index}`,
|
|
64
|
+
type: 'get_available_thinking_levels',
|
|
65
|
+
})}\n`);
|
|
66
|
+
});
|
|
67
|
+
rpcChild.stdin.end();
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
rpcChild.stdin.destroy();
|
|
71
|
+
await outputPromise.catch(() => undefined);
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
const output = await outputPromise;
|
|
75
|
+
const levels = parsePiEffortLevels(output, models.length);
|
|
76
|
+
return models.map((model, index) => {
|
|
77
|
+
const effortLevels = levels.get(index);
|
|
78
|
+
return effortLevels ? { ...model, effortLevels } : model;
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
// Effort metadata is enrichment. A missing/older RPC path must not discard a valid model list.
|
|
83
|
+
return models;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
async function collectPiOutput(child, timeoutMs, label) {
|
|
35
87
|
const kill = teardown(child);
|
|
36
|
-
const timeoutMs = options.timeoutMs ?? DEFAULT_DISCOVERY_TIMEOUT_MS;
|
|
37
88
|
let timeout;
|
|
38
89
|
try {
|
|
39
90
|
return await new Promise((resolve, reject) => {
|
|
40
91
|
let stdout = '';
|
|
41
|
-
let
|
|
92
|
+
let settled = false;
|
|
42
93
|
const fail = (message) => {
|
|
94
|
+
if (settled)
|
|
95
|
+
return;
|
|
96
|
+
settled = true;
|
|
43
97
|
reject(new Error(message));
|
|
44
98
|
kill();
|
|
45
99
|
};
|
|
46
|
-
timeout = setTimeout(() => fail(
|
|
100
|
+
timeout = setTimeout(() => fail(`${label} timed out`), timeoutMs);
|
|
47
101
|
timeout.unref?.();
|
|
48
102
|
child.stdout.setEncoding('utf8');
|
|
49
103
|
child.stdout.on('data', (chunk) => {
|
|
50
|
-
if (
|
|
104
|
+
if (settled)
|
|
51
105
|
return;
|
|
52
106
|
stdout += chunk;
|
|
53
|
-
if (stdout.length > MAX_OUTPUT_CHARS)
|
|
54
|
-
|
|
55
|
-
fail('Pi model discovery exceeded the output limit');
|
|
56
|
-
}
|
|
107
|
+
if (stdout.length > MAX_OUTPUT_CHARS)
|
|
108
|
+
fail(`${label} exceeded the output limit`);
|
|
57
109
|
});
|
|
58
110
|
child.stderr.resume();
|
|
59
|
-
child.once('error', () => fail(
|
|
111
|
+
child.stdin.once('error', () => fail(`${label} stdin failed`));
|
|
112
|
+
child.once('error', () => fail(`${label} child failed`));
|
|
60
113
|
child.once('close', (code) => {
|
|
61
|
-
if (
|
|
114
|
+
if (settled)
|
|
62
115
|
return;
|
|
63
116
|
if (code !== 0) {
|
|
64
|
-
fail(
|
|
117
|
+
fail(`${label} child exited (${code ?? 'unknown'})`);
|
|
65
118
|
return;
|
|
66
119
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
catch (error) {
|
|
71
|
-
reject(error instanceof Error ? error : new Error(String(error)));
|
|
72
|
-
}
|
|
120
|
+
settled = true;
|
|
121
|
+
resolve(stdout);
|
|
73
122
|
});
|
|
74
123
|
});
|
|
75
124
|
}
|
|
@@ -118,13 +167,61 @@ export function parsePiModels(stdout) {
|
|
|
118
167
|
}
|
|
119
168
|
return models;
|
|
120
169
|
}
|
|
121
|
-
|
|
122
|
-
|
|
170
|
+
/** Parse model-indexed Pi RPC responses without letting a failed model switch reuse prior state. */
|
|
171
|
+
export function parsePiEffortLevels(stdout, modelCount) {
|
|
172
|
+
const successfulSets = new Set();
|
|
173
|
+
const candidates = new Map();
|
|
174
|
+
for (const line of stdout.split('\n')) {
|
|
175
|
+
if (!line.trim())
|
|
176
|
+
continue;
|
|
177
|
+
let record;
|
|
178
|
+
try {
|
|
179
|
+
record = JSON.parse(line);
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
if (!isRecord(record) || record.type !== 'response' || record.success !== true)
|
|
185
|
+
continue;
|
|
186
|
+
const id = typeof record.id === 'string' ? record.id : '';
|
|
187
|
+
const match = /^(set|levels):(\d+)$/.exec(id);
|
|
188
|
+
if (!match)
|
|
189
|
+
continue;
|
|
190
|
+
const index = Number(match[2]);
|
|
191
|
+
if (!Number.isInteger(index) || index < 0 || index >= modelCount)
|
|
192
|
+
continue;
|
|
193
|
+
if (match[1] === 'set' && record.command === 'set_model') {
|
|
194
|
+
successfulSets.add(index);
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
if (match[1] !== 'levels' || record.command !== 'get_available_thinking_levels')
|
|
198
|
+
continue;
|
|
199
|
+
if (!isRecord(record.data) || !Array.isArray(record.data.levels))
|
|
200
|
+
continue;
|
|
201
|
+
const levels = [];
|
|
202
|
+
for (const value of record.data.levels) {
|
|
203
|
+
const parsed = effortLevelSchema.safeParse(value);
|
|
204
|
+
if (parsed.success && !levels.includes(parsed.data))
|
|
205
|
+
levels.push(parsed.data);
|
|
206
|
+
}
|
|
207
|
+
if (levels.length > 0)
|
|
208
|
+
candidates.set(index, levels);
|
|
209
|
+
}
|
|
210
|
+
const result = new Map();
|
|
211
|
+
for (const [index, levels] of candidates) {
|
|
212
|
+
if (successfulSets.has(index))
|
|
213
|
+
result.set(index, levels);
|
|
214
|
+
}
|
|
215
|
+
return result;
|
|
216
|
+
}
|
|
217
|
+
function isRecord(value) {
|
|
218
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
219
|
+
}
|
|
220
|
+
export function spawnPi(bin, args, cwd, spawnImpl = nodeSpawn) {
|
|
221
|
+
return spawnImpl(bin, [...args], {
|
|
123
222
|
cwd,
|
|
124
223
|
env: buildChildEnv({ backend: 'pi' }),
|
|
125
224
|
});
|
|
126
|
-
child.stdin.end();
|
|
127
|
-
return child;
|
|
128
225
|
}
|
|
129
226
|
/**
|
|
130
227
|
* Returns the probe's teardown: SIGTERM now, SIGKILL once the grace window elapses.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pi-model-catalog.js","sourceRoot":"","sources":["../../src/core/pi-model-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,SAAS,EAAuC,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAU/C,MAAM,4BAA4B,GAAG,MAAM,CAAC;AAC5C,yEAAyE;AACzE,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC;AACnC,MAAM,UAAU,GAAG,GAAG,CAAC;AACvB,uFAAuF;AACvF,MAAM,gBAAgB,GAAG,GAAG,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"pi-model-catalog.js","sourceRoot":"","sources":["../../src/core/pi-model-catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import type { EffortLevel } from '../contract/index.js';
|
|
1
2
|
import type { RunnerId } from './agent-runner.ts';
|
|
2
3
|
export interface ModelOption {
|
|
3
4
|
id: string;
|
|
4
5
|
label: string;
|
|
5
6
|
description: string;
|
|
7
|
+
effortLevels?: EffortLevel[];
|
|
6
8
|
}
|
|
7
9
|
export type ModelCatalogSource = 'live' | 'cache' | 'unavailable';
|
|
8
10
|
export interface RunnerModelCatalogResult {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner-model-catalog.js","sourceRoot":"","sources":["../../src/core/runner-model-catalog.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runner-model-catalog.js","sourceRoot":"","sources":["../../src/core/runner-model-catalog.ts"],"names":[],"mappings":"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"}
|
package/dist/server/server.d.ts
CHANGED
|
@@ -267,6 +267,7 @@ export declare function createApp(deps: ServerDeps): import("hono/hono-base").Ho
|
|
|
267
267
|
id: string;
|
|
268
268
|
label: string;
|
|
269
269
|
description: string;
|
|
270
|
+
effortLevels?: import('../contract/index.js').EffortLevel[];
|
|
270
271
|
}[];
|
|
271
272
|
source: import("../core/runner-model-catalog.ts").ModelCatalogSource;
|
|
272
273
|
stale: boolean;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wjarka/cezarion",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.3",
|
|
4
4
|
"description": "Local cockpit for running and tracking AI agent tasks in your repo. Uses your logged-in `claude` CLI and `gh` — zero config, zero database.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -50,8 +50,8 @@
|
|
|
50
50
|
"zod": "^4.4.3"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
|
-
"@open-mercato/cezar-api-client": "0.11.
|
|
54
|
-
"@open-mercato/cezar-contract": "0.11.
|
|
53
|
+
"@open-mercato/cezar-api-client": "^0.11.3",
|
|
54
|
+
"@open-mercato/cezar-contract": "^0.11.3",
|
|
55
55
|
"@types/node": "^20.14.0",
|
|
56
56
|
"@types/ws": "^8.18.1",
|
|
57
57
|
"esbuild": "^0.28.1",
|