@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.
Files changed (71) hide show
  1. package/dist/contract/index.js +2 -1
  2. package/dist/contract/workspace.d.ts +14 -0
  3. package/dist/core/opencode-model-catalog.d.ts +5 -5
  4. package/dist/core/opencode-model-catalog.js +96 -34
  5. package/dist/core/opencode-model-catalog.js.map +1 -1
  6. package/dist/core/pi-model-catalog.d.ts +7 -0
  7. package/dist/core/pi-model-catalog.js +123 -26
  8. package/dist/core/pi-model-catalog.js.map +1 -1
  9. package/dist/core/runner-model-catalog.d.ts +2 -0
  10. package/dist/core/runner-model-catalog.js.map +1 -1
  11. package/dist/server/server.d.ts +1 -0
  12. package/package.json +3 -3
  13. package/web/dist/assets/{alert-dialog-g-GVThSw.js → alert-dialog-Bib2-aHJ.js} +1 -1
  14. package/web/dist/assets/arrow-down-DF9UfPoy.js +1 -0
  15. package/web/dist/assets/arrow-left-BVgebuvi.js +1 -0
  16. package/web/dist/assets/{centered-state-DdbE_pNl.js → centered-state-TyZe3tga.js} +1 -1
  17. package/web/dist/assets/chevron-right-W2B4c3Bn.js +1 -0
  18. package/web/dist/assets/{collapsible-R1r7zUOB.js → collapsible-DTRw1YnV.js} +1 -1
  19. package/web/dist/assets/{commit-list-Bgb1DHBX.js → commit-list-BKtzO28W.js} +1 -1
  20. package/web/dist/assets/{compare-variants-DKnJOU1u.js → compare-variants--E1SPJzi.js} +1 -1
  21. package/web/dist/assets/{diff-Cv3z9esx.js → diff-DtXK3tZy.js} +2 -2
  22. package/web/dist/assets/{diff-stat-ydfu0_5T.js → diff-stat-CJSJmLcb.js} +1 -1
  23. package/web/dist/assets/{diff-view-DnPdkmk2.js → diff-view-wZScCPoa.js} +1 -1
  24. package/web/dist/assets/{dropdown-menu-CPP9gEmn.js → dropdown-menu-CQp168wo.js} +1 -1
  25. package/web/dist/assets/editable-title-BWosq6YG.js +1 -0
  26. package/web/dist/assets/{ellipsis-vertical-WNkaehnw.js → ellipsis-vertical-BXllsyll.js} +1 -1
  27. package/web/dist/assets/{file-RvhJlchx.js → file-BgcgwEU-.js} +1 -1
  28. package/web/dist/assets/{folder-Dz-weqBo.js → folder-DGrkgLg9.js} +1 -1
  29. package/web/dist/assets/{git-toolbar-YW5Bv-c1.js → git-toolbar-D9Wu2J60.js} +1 -1
  30. package/web/dist/assets/{github-YBpFZMf3.js → github-xAF2VFFK.js} +1 -1
  31. package/web/dist/assets/{image-preview-DYiOSYoY.js → image-preview-Cd7b7Evu.js} +1 -1
  32. package/web/dist/assets/index-CKWqcYjr.js +7 -0
  33. package/web/dist/assets/{markdown-DQHRRO9e.js → markdown-Cvzv-jvo.js} +1 -1
  34. package/web/dist/assets/new-task-form-CZAdHx_5.js +1 -0
  35. package/web/dist/assets/{pill-FAFXjmY6.js → pill-B9vrSbT6.js} +1 -1
  36. package/web/dist/assets/{project-router-Dzc0JK2j.js → project-router-CF-1GU39.js} +1 -1
  37. package/web/dist/assets/{prompt-templates-DmqtzSPL.js → prompt-templates-CSmaXZ5G.js} +1 -1
  38. package/web/dist/assets/{refresh-cw-BP4TkA4M.js → refresh-cw-D5a-hkgq.js} +1 -1
  39. package/web/dist/assets/{repo-git-Cwt6VGcW.js → repo-git-BicCjDSy.js} +1 -1
  40. package/web/dist/assets/{run-diff-CvcsWwew.js → run-diff-DWzdGMTg.js} +1 -1
  41. package/web/dist/assets/run-header-Cc7KFOMX.js +1 -0
  42. package/web/dist/assets/{search-x-Drnmsmd0.js → search-x-DJIOs-nB.js} +1 -1
  43. package/web/dist/assets/{skill-empty-hint-D2l_OqZ5.js → skill-empty-hint-BcecPZ6K.js} +1 -1
  44. package/web/dist/assets/skills-BKYATWFF.js +1 -0
  45. package/web/dist/assets/{sparkles-B9ja4FHw.js → sparkles-C-1JzGqe.js} +1 -1
  46. package/web/dist/assets/{square-terminal-CB2du-YG.js → square-terminal-CnrkOecA.js} +1 -1
  47. package/web/dist/assets/{tab-link-C5FWJ66Y.js → tab-link-CQgzNUwP.js} +1 -1
  48. package/web/dist/assets/{task-changes-DicvDkAm.js → task-changes--AyxNXvn.js} +1 -1
  49. package/web/dist/assets/{task-commits-C6o-VVhC.js → task-commits-DlBBODPF.js} +1 -1
  50. package/web/dist/assets/{task-files-Jd4n1rYe.js → task-files-DZ49FGVz.js} +1 -1
  51. package/web/dist/assets/task-thread-D10akRi2.js +9 -0
  52. package/web/dist/assets/{textarea-Sm6doUPO.js → textarea-BPMIukW0.js} +1 -1
  53. package/web/dist/assets/{thread-loading-DojNeADh.js → thread-loading-C9cWYGbd.js} +1 -1
  54. package/web/dist/assets/{trash-2-C_lGBXG2.js → trash-2-CwmIdbv2.js} +1 -1
  55. package/web/dist/assets/{triangle-alert-Brk_ldFl.js → triangle-alert-BU7Fnc0D.js} +1 -1
  56. package/web/dist/assets/{upload-Cxs1UROt.js → upload-B54t9i6X.js} +1 -1
  57. package/web/dist/assets/{use-desktop-CVVHXF_O.js → use-desktop-Co7z3Xov.js} +1 -1
  58. package/web/dist/assets/{use-submit-shortcut-DzeqN3GK.js → use-submit-shortcut-DfJM2Y1U.js} +1 -1
  59. package/web/dist/assets/{utils-Unt0mZvU.js → utils-BLZyueuK.js} +1 -1
  60. package/web/dist/assets/{workflows-Cottripv.js → workflows-CfC6b8y4.js} +1 -1
  61. package/web/dist/assets/{zoomable-image-ByySCppM.js → zoomable-image-BQMum6hd.js} +1 -1
  62. package/web/dist/index.html +22 -22
  63. package/web/dist/assets/arrow-down-BzmL0uj0.js +0 -1
  64. package/web/dist/assets/arrow-left-DtUM7GFU.js +0 -1
  65. package/web/dist/assets/chevron-right-DnLh0uM2.js +0 -1
  66. package/web/dist/assets/editable-title-D_bWdmY0.js +0 -1
  67. package/web/dist/assets/index-EgV1pTsY.js +0 -7
  68. package/web/dist/assets/new-task-form-D2KlpqYC.js +0 -1
  69. package/web/dist/assets/run-header-C3B5P5qD.js +0 -1
  70. package/web/dist/assets/skills-BWIlWIZB.js +0 -1
  71. package/web/dist/assets/task-thread-ChnQQtXZ.js +0 -9
@@ -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, so the
28
- * picker shows `auto` alone. Output that contains lines but NO recognizable id is treated as a
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 args = ['models'];
36
- const child = (options.spawn ?? spawnOpencode)(bin, args, options.cwd);
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
- return await new Promise((resolve, reject) => {
56
+ const result = new Promise((resolve, reject) => {
42
57
  let stdout = '';
43
- let overflowed = false;
44
- const fail = (message) => {
45
- reject(new Error(message));
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'), timeoutMs);
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 (overflowed)
70
+ if (settled)
53
71
  return;
54
72
  stdout += chunk;
55
73
  if (stdout.length > MAX_OUTPUT_CHARS) {
56
- overflowed = true;
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 child failed'));
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 (overflowed)
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
- resolve(parseOpencodeModels(stdout));
88
+ const models = parseOpencodeModels(stdout);
89
+ settled = true;
90
+ resolve(models);
73
91
  }
74
92
  catch (error) {
75
- reject(error instanceof Error ? error : new Error(String(error)));
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, so the
90
- * picker shows `auto` alone. Output that contains lines but NO recognizable id is treated as a
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 models = [];
101
- const ids = new Set();
120
+ const segments = [];
121
+ let current;
102
122
  for (const line of lines) {
103
- if (!MODEL_LINE_RE.test(line) || ids.has(line))
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
- ids.add(line);
108
- const provider = line.slice(0, line.indexOf('/'));
109
- models.push({ id: line, label: line, description: `via ${provider}` });
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
- const child = nodeSpawn(bin, [...args], {
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":"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"}
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; that mock speaks RPC, not
27
- // `--list-models`. Without an explicit binary, skip the spawn so a dry-run cockpit never
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 args = ['--list-models'];
34
- const child = (options.spawn ?? spawnPi)(bin, args, options.cwd);
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 overflowed = false;
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('Pi model discovery timed out'), timeoutMs);
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 (overflowed)
104
+ if (settled)
51
105
  return;
52
106
  stdout += chunk;
53
- if (stdout.length > MAX_OUTPUT_CHARS) {
54
- overflowed = true;
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('Pi model discovery child failed'));
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 (overflowed)
114
+ if (settled)
62
115
  return;
63
116
  if (code !== 0) {
64
- fail(`Pi model discovery child exited (${code ?? 'unknown'})`);
117
+ fail(`${label} child exited (${code ?? 'unknown'})`);
65
118
  return;
66
119
  }
67
- try {
68
- resolve(parsePiModels(stdout));
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
- function spawnPi(bin, args, cwd) {
122
- const child = nodeSpawn(bin, [...args], {
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":"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"}
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":"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"}
1
+ {"version":3,"file":"runner-model-catalog.js","sourceRoot":"","sources":["../../src/core/runner-model-catalog.ts"],"names":[],"mappings":"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"}
@@ -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.2-pr61.94",
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.2-pr61.94",
54
- "@open-mercato/cezar-contract": "0.11.2-pr61.94",
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",