codedeck 0.2.0 → 0.3.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.
Files changed (96) hide show
  1. package/README.md +45 -16
  2. package/dist/cli/cli-name.js +20 -0
  3. package/dist/cli/cli-name.js.map +1 -0
  4. package/dist/cli/commands/claims.js +170 -0
  5. package/dist/cli/commands/claims.js.map +1 -0
  6. package/dist/cli/commands/doctor.js +22 -1
  7. package/dist/cli/commands/doctor.js.map +1 -1
  8. package/dist/cli/commands/models.js +3 -3
  9. package/dist/cli/commands/models.js.map +1 -1
  10. package/dist/cli/commands/open.js +148 -315
  11. package/dist/cli/commands/open.js.map +1 -1
  12. package/dist/cli/commands/ps.js +260 -23
  13. package/dist/cli/commands/ps.js.map +1 -1
  14. package/dist/cli/commands/rename.js +29 -0
  15. package/dist/cli/commands/rename.js.map +1 -0
  16. package/dist/cli/commands/run.js +48 -17
  17. package/dist/cli/commands/run.js.map +1 -1
  18. package/dist/cli/commands/setup.js +388 -62
  19. package/dist/cli/commands/setup.js.map +1 -1
  20. package/dist/cli/commands/usage.js +37 -0
  21. package/dist/cli/commands/usage.js.map +1 -0
  22. package/dist/cli/commands/wait.js +3 -2
  23. package/dist/cli/commands/wait.js.map +1 -1
  24. package/dist/cli/index.js +33 -21
  25. package/dist/cli/index.js.map +1 -1
  26. package/dist/cli/picker-state.js +75 -8
  27. package/dist/cli/picker-state.js.map +1 -1
  28. package/dist/cli/picker.js +13 -3
  29. package/dist/cli/picker.js.map +1 -1
  30. package/dist/cli/ui.js +20 -4
  31. package/dist/cli/ui.js.map +1 -1
  32. package/dist/config/config.js +39 -0
  33. package/dist/config/config.js.map +1 -1
  34. package/dist/config/orchestrator-mode.js +72 -0
  35. package/dist/config/orchestrator-mode.js.map +1 -0
  36. package/dist/config/paths.js +8 -0
  37. package/dist/config/paths.js.map +1 -1
  38. package/dist/core/pricing.js +65 -0
  39. package/dist/core/pricing.js.map +1 -0
  40. package/dist/core/roles.js +14 -3
  41. package/dist/core/roles.js.map +1 -1
  42. package/dist/core/run-usage.js +46 -0
  43. package/dist/core/run-usage.js.map +1 -0
  44. package/dist/core/session.js +5 -0
  45. package/dist/core/session.js.map +1 -1
  46. package/dist/daemon/daemon.js +90 -3
  47. package/dist/daemon/daemon.js.map +1 -1
  48. package/dist/daemon/ipc.js +10 -3
  49. package/dist/daemon/ipc.js.map +1 -1
  50. package/dist/drivers/opencode/driver.js +1 -114
  51. package/dist/drivers/opencode/driver.js.map +1 -1
  52. package/dist/drivers/opencode/parser.js +86 -0
  53. package/dist/drivers/opencode/parser.js.map +1 -0
  54. package/dist/drivers/session-runtime.js +1 -0
  55. package/dist/drivers/session-runtime.js.map +1 -1
  56. package/dist/git/worktree.js +1 -1
  57. package/dist/git/worktree.js.map +1 -1
  58. package/dist/open/contract.js +104 -0
  59. package/dist/open/contract.js.map +1 -0
  60. package/dist/open/injection.js +59 -0
  61. package/dist/open/injection.js.map +1 -0
  62. package/dist/open/launchers/claude.js +212 -0
  63. package/dist/open/launchers/claude.js.map +1 -0
  64. package/dist/open/launchers/opencode.js +178 -0
  65. package/dist/open/launchers/opencode.js.map +1 -0
  66. package/dist/open/orchestrator-prose.js +12 -0
  67. package/dist/open/orchestrator-prose.js.map +1 -0
  68. package/dist/open/pty.js +281 -0
  69. package/dist/open/pty.js.map +1 -0
  70. package/dist/open/runtime.js +597 -0
  71. package/dist/open/runtime.js.map +1 -0
  72. package/dist/plugin/agents/auditor.md +7 -1
  73. package/dist/plugin/agents/general.md +12 -1
  74. package/dist/plugin/agents/orchestrator-edit.md +69 -0
  75. package/dist/plugin/agents/orchestrator-read.md +69 -0
  76. package/dist/plugin/agents/orchestrator.md +76 -17
  77. package/dist/plugin/agents/reviewer.md +3 -0
  78. package/dist/plugin/commands/autonomous.md +58 -0
  79. package/dist/plugin/hooks/hooks.json +24 -0
  80. package/dist/plugin/hooks/session-id.sh +23 -0
  81. package/dist/plugin/hooks/session-name-lib.mjs +40 -0
  82. package/dist/plugin/hooks/session-name-worker.mjs +124 -0
  83. package/dist/plugin/hooks/session-name.mjs +66 -0
  84. package/dist/plugin/hooks/session-name.sh +7 -0
  85. package/dist/plugin/pty-shim.mjs +114 -0
  86. package/dist/plugin/statusline.sh +214 -22
  87. package/dist/plugin/themes/codedeck-rage.json +74 -0
  88. package/dist/plugin/themes/codedeck-ultra.json +52 -44
  89. package/dist/store/claims.js +152 -0
  90. package/dist/store/claims.js.map +1 -0
  91. package/dist/store/database.js +14 -0
  92. package/dist/store/database.js.map +1 -1
  93. package/dist/store/sessions.js +17 -3
  94. package/dist/store/sessions.js.map +1 -1
  95. package/package.json +3 -2
  96. package/dist/plugin/settings.json +0 -7
@@ -1,8 +1,233 @@
1
1
  import { getCachedOrDiscoverModels, } from "../../core/models.js";
2
+ import { itemKey } from "../picker-state.js";
2
3
  import { runScreens } from "../picker.js";
3
4
  import { colors, readDimensions } from "../ui.js";
5
+ import { getCliName } from "../cli-name.js";
4
6
  import { getRegistry } from "../../drivers/registry.js";
5
- import { loadConfig, saveConfig, } from "../../config/config.js";
7
+ import { ROLES } from "../../core/roles.js";
8
+ import { BALANCED_PRESET, DISPATCHER_PRESET, EXPLORER_PRESET, ORCHESTRATOR_PRESETS, isOrchestratorMode, loadConfig, orchestratorModeLabel, resolveOrchestratorMode, saveConfig, } from "../../config/config.js";
9
+ const ORCHESTRATOR_SCREEN_ROLE = "orchestrator-mode";
10
+ const ORCHESTRATOR_PICKER_GROUP = "orchestrator";
11
+ const PARALLELISM_NONE = "none";
12
+ const SANDBOX_SCREEN_ROLE = "sandbox";
13
+ const SANDBOX_PICKER_GROUP = "sandbox";
14
+ const SANDBOX_OFF = "workspace-write";
15
+ const SANDBOX_ON = "danger-full-access";
16
+ const ORCHESTRATOR_PARALLELISM_NOTE_LINES = [
17
+ "parallelism is advisory. Version 1 puts the requested cap in the",
18
+ "orchestrator prompt for review verification and does not enforce the",
19
+ "cap in code.",
20
+ ];
21
+ export const ORCHESTRATOR_PARALLELISM_NOTE = ORCHESTRATOR_PARALLELISM_NOTE_LINES.join(" ");
22
+ const ORCHESTRATOR_PARAMETERS = [
23
+ "investigate",
24
+ "selfWork",
25
+ "tools",
26
+ "parallelism",
27
+ ];
28
+ function copyOrchestratorMode(mode) {
29
+ return {
30
+ investigate: mode.investigate,
31
+ selfWork: mode.selfWork,
32
+ tools: mode.tools,
33
+ ...(mode.parallelism === undefined ? {} : { parallelism: mode.parallelism }),
34
+ };
35
+ }
36
+ function selectionId(selection) {
37
+ return typeof selection === "string" ? selection : selection.id;
38
+ }
39
+ /**
40
+ * Turns a preset or a complete custom answer into the config block. The
41
+ * returned object contains parameters only, so labels and preset names cannot
42
+ * leak into the saved JSON.
43
+ */
44
+ export function orchestratorConfigFromSelection(selection, parameters) {
45
+ const id = selectionId(selection);
46
+ if (Object.hasOwn(ORCHESTRATOR_PRESETS, id)) {
47
+ return copyOrchestratorMode(ORCHESTRATOR_PRESETS[id]);
48
+ }
49
+ if (id !== "custom" || parameters === undefined)
50
+ return undefined;
51
+ const mode = {
52
+ investigate: parameters.investigate,
53
+ selfWork: parameters.selfWork,
54
+ tools: parameters.tools,
55
+ ...(parameters.parallelism === undefined ? {} : { parallelism: parameters.parallelism }),
56
+ };
57
+ return isOrchestratorMode(mode) ? mode : undefined;
58
+ }
59
+ export function orchestratorDisplayLabel(config) {
60
+ return orchestratorModeLabel(resolveOrchestratorMode(config));
61
+ }
62
+ function modeValue(mode, parameter) {
63
+ if (parameter === "parallelism")
64
+ return mode.parallelism === undefined ? PARALLELISM_NONE : String(mode.parallelism);
65
+ return mode[parameter];
66
+ }
67
+ function parameterItems(parameter, mode) {
68
+ const choices = parameter === "investigate"
69
+ ? ["none", "read", "free"]
70
+ : parameter === "selfWork"
71
+ ? ["none", "trivial", "small"]
72
+ : parameter === "tools"
73
+ ? ["dispatch", "read", "edit"]
74
+ : [PARALLELISM_NONE, "1", "2", "3", "4", "5", "6", "8", "12"];
75
+ const current = modeValue(mode, parameter);
76
+ const ordered = [current, ...choices.filter((choice) => choice !== current)];
77
+ return ordered.map((choice) => ({
78
+ id: choice,
79
+ label: parameter === "parallelism" && choice === PARALLELISM_NONE ? "sem limite" : choice,
80
+ group: ORCHESTRATOR_PICKER_GROUP,
81
+ harness: ORCHESTRATOR_PICKER_GROUP,
82
+ ...(choice === current ? { note: "atual" } : {}),
83
+ }));
84
+ }
85
+ export function buildOrchestratorScreen(config = {}, index = 0, total = 1) {
86
+ const mode = resolveOrchestratorMode(config);
87
+ const presets = [
88
+ ["dispatcher", DISPATCHER_PRESET],
89
+ ["balanced", BALANCED_PRESET],
90
+ ["explorer", EXPLORER_PRESET],
91
+ ];
92
+ const presetItems = presets.map(([name, preset]) => ({
93
+ id: name,
94
+ label: name,
95
+ group: ORCHESTRATOR_PICKER_GROUP,
96
+ harness: ORCHESTRATOR_PICKER_GROUP,
97
+ note: `${preset.investigate} / ${preset.selfWork} / ${preset.tools}`,
98
+ }));
99
+ return {
100
+ role: ORCHESTRATOR_SCREEN_ROLE,
101
+ title: `orchestrator (${orchestratorModeLabel(mode)})`,
102
+ counter: `agente ${index + 1} de ${total}`,
103
+ description: ORCHESTRATOR_PARALLELISM_NOTE_LINES,
104
+ items: [
105
+ ...presetItems,
106
+ {
107
+ id: "custom",
108
+ label: "custom",
109
+ group: ORCHESTRATOR_PICKER_GROUP,
110
+ harness: ORCHESTRATOR_PICKER_GROUP,
111
+ note: "ajustar os quatro parametros",
112
+ },
113
+ ],
114
+ pinned: false,
115
+ known: new Set([
116
+ ...presetItems.map((item) => itemKey(item.harness, item.id)),
117
+ itemKey(ORCHESTRATOR_PICKER_GROUP, "custom"),
118
+ ]),
119
+ harnesses: new Set([ORCHESTRATOR_PICKER_GROUP]),
120
+ next: (result) => result.kind === "picked" && result.id === "custom"
121
+ ? [buildOrchestratorParameterScreen(ORCHESTRATOR_PARAMETERS[0], mode, 0)]
122
+ : [],
123
+ };
124
+ }
125
+ export function buildSandboxScreen(config = {}, index = 0, total = 1) {
126
+ const selected = config.defaultSandbox === SANDBOX_ON ? SANDBOX_ON : SANDBOX_OFF;
127
+ const values = selected === SANDBOX_ON ? [SANDBOX_ON, SANDBOX_OFF] : [SANDBOX_OFF, SANDBOX_ON];
128
+ const items = values.map((value) => ({
129
+ id: value,
130
+ label: value === SANDBOX_ON ? "ON" : "OFF",
131
+ group: SANDBOX_PICKER_GROUP,
132
+ harness: SANDBOX_PICKER_GROUP,
133
+ ...(value === selected ? { note: "atual" } : {}),
134
+ }));
135
+ return {
136
+ role: SANDBOX_SCREEN_ROLE,
137
+ title: "Danger full access",
138
+ counter: `configuração ${index + 1} de ${total}`,
139
+ description: ["Danger full access applies to new Codex sessions."],
140
+ items,
141
+ pinned: true,
142
+ known: new Set(items.map((item) => itemKey(item.harness, item.id))),
143
+ harnesses: new Set([SANDBOX_PICKER_GROUP]),
144
+ next: () => [],
145
+ };
146
+ }
147
+ function modeAfterParameter(mode, result) {
148
+ const parameters = collectOrchestratorParameters([result], mode);
149
+ return orchestratorConfigFromSelection("custom", parameters) ?? mode;
150
+ }
151
+ function buildOrchestratorParameterScreen(parameter, mode, index, error) {
152
+ const items = parameterItems(parameter, mode);
153
+ const description = parameter === "parallelism"
154
+ ? [...ORCHESTRATOR_PARALLELISM_NOTE_LINES, "Type orchestrator:N for another positive cap."]
155
+ : ORCHESTRATOR_PARALLELISM_NOTE_LINES;
156
+ return {
157
+ role: `${ORCHESTRATOR_SCREEN_ROLE}.${parameter}`,
158
+ title: `orchestrator (${orchestratorModeLabel(mode)}) · ${parameter}`,
159
+ counter: `parametro ${index + 1} de ${ORCHESTRATOR_PARAMETERS.length}`,
160
+ ...(error === undefined ? {} : { error }),
161
+ description,
162
+ items,
163
+ pinned: false,
164
+ known: new Set(items.map((item) => itemKey(item.harness, item.id))),
165
+ harnesses: new Set([ORCHESTRATOR_PICKER_GROUP]),
166
+ next: (result) => {
167
+ if (parameter === "parallelism" &&
168
+ result.kind === "picked" &&
169
+ result.id !== PARALLELISM_NONE &&
170
+ numericParallelism(result.id) === undefined) {
171
+ return [
172
+ buildOrchestratorParameterScreen(parameter, mode, index, "parallelism must be a positive finite number"),
173
+ ];
174
+ }
175
+ if (index + 1 >= ORCHESTRATOR_PARAMETERS.length)
176
+ return [];
177
+ const nextIndex = index + 1;
178
+ return [
179
+ buildOrchestratorParameterScreen(ORCHESTRATOR_PARAMETERS[nextIndex], modeAfterParameter(mode, result), nextIndex),
180
+ ];
181
+ },
182
+ };
183
+ }
184
+ function numericParallelism(value) {
185
+ const parsed = Number(value);
186
+ return Number.isFinite(parsed) && parsed > 0 ? parsed : undefined;
187
+ }
188
+ /** Keeps skipped parameter screens at the mode shown when customization began. */
189
+ export function collectOrchestratorParameters(results, existing) {
190
+ const parameters = {
191
+ investigate: existing.investigate,
192
+ selfWork: existing.selfWork,
193
+ tools: existing.tools,
194
+ ...(existing.parallelism === undefined ? {} : { parallelism: existing.parallelism }),
195
+ };
196
+ for (const result of results) {
197
+ if (result.kind !== "picked")
198
+ continue;
199
+ const parameter = result.role.startsWith(`${ORCHESTRATOR_SCREEN_ROLE}.`)
200
+ ? result.role.slice(`${ORCHESTRATOR_SCREEN_ROLE}.`.length)
201
+ : "";
202
+ if (parameter === "investigate" && ["none", "read", "free"].includes(result.id)) {
203
+ parameters.investigate = result.id;
204
+ }
205
+ else if (parameter === "selfWork" && ["none", "trivial", "small"].includes(result.id)) {
206
+ parameters.selfWork = result.id;
207
+ }
208
+ else if (parameter === "tools" && ["dispatch", "read", "edit"].includes(result.id)) {
209
+ parameters.tools = result.id;
210
+ }
211
+ else if (parameter === "parallelism") {
212
+ if (result.id === PARALLELISM_NONE)
213
+ delete parameters.parallelism;
214
+ else {
215
+ const parsed = numericParallelism(result.id);
216
+ if (parsed !== undefined)
217
+ parameters.parallelism = parsed;
218
+ }
219
+ }
220
+ }
221
+ return parameters;
222
+ }
223
+ export function collectOrchestratorSelection(selection, parameters, existing = {}) {
224
+ if (selection?.kind !== "picked")
225
+ return undefined;
226
+ if (selection.id !== "custom")
227
+ return orchestratorConfigFromSelection(selection);
228
+ const current = resolveOrchestratorMode(existing);
229
+ return orchestratorConfigFromSelection("custom", collectOrchestratorParameters(parameters, current));
230
+ }
6
231
  /**
7
232
  * Both streams have to be a terminal, not just stdout. A piped stdin leaves
8
233
  * `question` waiting on input that can never arrive, and `tail -f /dev/null |
@@ -18,67 +243,122 @@ export function isInteractiveTerminal() {
18
243
  export function needsModelSetup(config, isTTY = isInteractiveTerminal()) {
19
244
  if (!isTTY)
20
245
  return false;
21
- return config == null || config.models == null;
246
+ // `agents` is what setup writes now. A config carrying only the older
247
+ // per-harness `models` has never answered the per-role question, so it still
248
+ // counts as unset.
249
+ return config == null || config.agents == null;
22
250
  }
23
- const AGENT_LABELS = { claude: "Claude Code", codex: "Codex", omp: "omp" };
24
- function agentLabel(agent) {
25
- return AGENT_LABELS[agent] ?? agent;
251
+ /**
252
+ * The catalog of every installed harness, flattened into one list.
253
+ *
254
+ * The group is the bare agent id rather than a prettier label because it is
255
+ * also what free text has to type as a prefix ("codex:gpt-5.7"). A header
256
+ * reading "Codex" over rows you reach by typing "codex" would hide that.
257
+ */
258
+ /** One normalization for every id, so the catalog and the pin agree on a key. */
259
+ function modelId(raw) {
260
+ return typeof raw === "string" ? raw.trim() : "";
26
261
  }
27
- function pinnedFor(harness, ids, configured) {
262
+ function catalogItems(installed) {
263
+ const known = new Set();
264
+ const items = [];
265
+ for (const harness of installed) {
266
+ for (const provider of harness.providers) {
267
+ for (const model of provider.models) {
268
+ // A driver reporting a blank id used to become a selectable blank row
269
+ // that Enter would save as the model. The line wizard guarded this and
270
+ // the port dropped the guard.
271
+ const id = modelId(model.id);
272
+ if (!id)
273
+ continue;
274
+ // Keyed by both halves: two harnesses listing the same id are two real
275
+ // choices, and only a repeat within one harness is a duplicate.
276
+ const key = itemKey(harness.agent, id);
277
+ if (known.has(key))
278
+ continue;
279
+ known.add(key);
280
+ // The name is carried for the filter, not for the row: most of the
281
+ // catalog spells a version readably there ("Claude Opus 5") and only in
282
+ // the id the way it is typed.
283
+ const name = typeof model.name === "string" ? model.name.trim() : "";
284
+ items.push({
285
+ id,
286
+ label: id,
287
+ group: harness.agent,
288
+ harness: harness.agent,
289
+ ...(name && name !== id ? { name } : {}),
290
+ });
291
+ }
292
+ }
293
+ }
294
+ return { items, known };
295
+ }
296
+ function pinnedFor(installed, known, configured, fallbackHarness) {
28
297
  if (configured) {
298
+ const inCatalog = known.has(itemKey(configured.harness, configured.model));
29
299
  // A saved id the catalog no longer lists still gets shown. Hiding it is how
30
300
  // the wizard used to answer `open`'s own "that model is gone, run setup":
31
301
  // the user arrived here and could not see which model it meant. Marking it
32
302
  // synthetic makes keeping it cost the same second Enter as typing it.
33
- return ids.includes(configured)
34
- ? { id: configured, label: configured, note: "atual" }
35
- : { id: configured, label: configured, note: "atual, fora do catalogo", synthetic: true };
36
- }
37
- for (const provider of harness.providers) {
38
- const real = provider.models.find((model) => model.isDefault && ids.includes(model.id));
39
- if (real)
40
- return { id: real.id, label: real.id, note: "padrao" };
303
+ return {
304
+ id: configured.model,
305
+ label: configured.model,
306
+ group: configured.harness,
307
+ harness: configured.harness,
308
+ note: inCatalog ? `atual · ${configured.harness}` : `atual · ${configured.harness}, fora do catalogo`,
309
+ ...(inCatalog ? {} : { synthetic: true }),
310
+ };
41
311
  }
42
- // With no config and no isDefault, ids[0] is just alphabetical order. Hoisting
43
- // that and calling it the default would stamp a coin flip as a recommendation.
44
- }
45
- export function buildAgentScreen(harness, index, total, configured) {
46
- const seen = new Set();
47
- const grouped = [];
312
+ // Nothing saved for this role, so the suggestion comes from the harness that
313
+ // runs everything else by default, and only if that harness names a default.
314
+ const harness = installed.find((candidate) => candidate.agent === fallbackHarness);
315
+ if (!harness)
316
+ return undefined;
48
317
  for (const provider of harness.providers) {
49
- for (const model of provider.models) {
50
- // A driver reporting a blank id used to become a selectable blank row
51
- // that Enter would save as the model. The line wizard guarded this and
52
- // the port dropped the guard.
53
- const id = typeof model.id === "string" ? model.id.trim() : "";
54
- if (!id || seen.has(id))
55
- continue;
56
- seen.add(id);
57
- // The name is carried for the filter, not for the row: most of the
58
- // catalog spells a version readably there ("Claude Opus 5") and only in
59
- // the id the way it is typed.
60
- const name = typeof model.name === "string" ? model.name.trim() : "";
61
- grouped.push({
62
- id,
63
- label: id,
64
- group: provider.provider,
65
- ...(name && name !== id ? { name } : {}),
66
- });
318
+ // Trimmed the same way the catalog trims, or the lookup misses its own row
319
+ // and a harness that pads its ids ends up pinning nothing.
320
+ const real = provider.models
321
+ .map((model) => ({ id: modelId(model.id), isDefault: model.isDefault }))
322
+ .find((model) => model.isDefault && known.has(itemKey(harness.agent, model.id)));
323
+ if (real) {
324
+ return {
325
+ id: real.id,
326
+ label: real.id,
327
+ group: harness.agent,
328
+ harness: harness.agent,
329
+ note: `padrao · ${harness.agent}`,
330
+ };
67
331
  }
68
332
  }
69
- const pinned = pinnedFor(harness, [...seen], configured);
70
- const items = pinned ? [pinned, ...grouped.filter((item) => item.id !== pinned.id)] : grouped;
333
+ // With no config and no isDefault, the first row is just catalog order.
334
+ // Hoisting that and calling it the default would stamp a coin flip as a
335
+ // recommendation.
336
+ }
337
+ export function buildRoleScreen(role, installed, index, total, configured, fallbackHarness = "claude") {
338
+ const { items: catalog, known } = catalogItems(installed);
339
+ const pinned = pinnedFor(installed, known, configured, fallbackHarness);
340
+ const pinnedKey = pinned ? itemKey(pinned.harness, pinned.id) : undefined;
341
+ const items = pinned
342
+ ? [pinned, ...catalog.filter((item) => itemKey(item.harness, item.id) !== pinnedKey)]
343
+ : catalog;
344
+ // One screen now spans every harness, so a harness that answered with an
345
+ // error no longer owns the error line by itself. Naming each one keeps a
346
+ // missing catalog readable as "codex is why codex has no rows".
347
+ const errors = installed
348
+ .filter((harness) => harness.error)
349
+ .map((harness) => `${harness.agent}: ${harness.error}`);
71
350
  return {
72
- agent: harness.agent,
73
- title: agentLabel(harness.agent),
351
+ role,
352
+ title: role,
74
353
  counter: `agente ${index + 1} de ${total}`,
75
- error: harness.error,
354
+ ...(errors.length > 0 ? { error: errors.join(" · ") } : {}),
76
355
  items,
77
356
  pinned: pinned !== undefined,
78
- known: seen,
357
+ known,
358
+ harnesses: new Set(installed.map((harness) => harness.agent)),
79
359
  };
80
360
  }
81
- export function buildScreens(harnesses, configured) {
361
+ export function buildScreens(roles, harnesses, configured, fallbackHarness = "claude") {
82
362
  const seen = new Set();
83
363
  // A merged disk cache can hand back the same agent twice.
84
364
  const installed = harnesses.filter((harness) => {
@@ -87,18 +367,21 @@ export function buildScreens(harnesses, configured) {
87
367
  seen.add(harness.agent);
88
368
  return true;
89
369
  });
90
- return installed.map((harness, index) => buildAgentScreen(harness, index, installed.length, configured[harness.agent]));
370
+ if (installed.length === 0)
371
+ return [];
372
+ return roles.map((role, index) => buildRoleScreen(role, installed, index, roles.length, configured[role], fallbackHarness));
91
373
  }
92
374
  export function collectSelections(results, existing, shown) {
93
375
  // Starts from what was already saved: skipping has to leave it intact, and a
94
376
  // brand new map would wipe a choice made on an earlier run.
95
- const models = { ...(existing ?? {}) };
377
+ const agents = { ...(existing ?? {}) };
96
378
  for (const result of results) {
97
- if (result.kind === "picked")
98
- models[result.agent] = result.id;
379
+ if (result.kind !== "picked")
380
+ continue;
381
+ agents[result.role] = { harness: result.harness, model: result.id };
99
382
  }
100
383
  const aborted = results.some((result) => result.kind === "aborted");
101
- return { models, write: shown > 0 && !aborted };
384
+ return { agents, write: shown > 0 && !aborted };
102
385
  }
103
386
  /** Below this no list survives once the chrome is placed. */
104
387
  const MIN_ROWS = 8;
@@ -131,11 +414,11 @@ export async function runModelSetupWizard(options = {}) {
131
414
  console.error(`Warning: Could not discover models: ${error instanceof Error ? error.message : String(error)}`);
132
415
  harnesses = [];
133
416
  }
134
- const screens = buildScreens(harnesses, config.models ?? {});
135
- // Writing `models` is what marks first-run setup as done. Doing that after
417
+ const roleScreens = buildScreens(ROLES, harnesses, config.agents ?? {}, config.defaultAgent ?? "claude");
418
+ // Writing `agents` is what marks first-run setup as done. Doing that after
136
419
  // showing nothing would spend the single prompt the user ever gets.
137
- if (screens.length === 0) {
138
- console.error("Warning: No installed agent reported any model; skipping model setup.");
420
+ if (roleScreens.length === 0) {
421
+ console.error("Warning: No installed harness reported any model; skipping model setup.");
139
422
  return config;
140
423
  }
141
424
  const dim = options.dimensions ?? readDimensions(output);
@@ -144,35 +427,78 @@ export async function runModelSetupWizard(options = {}) {
144
427
  return config;
145
428
  }
146
429
  const paint = colors(Boolean(output.isTTY) && !process.env.NO_COLOR);
147
- const results = await runScreens(screens, { input, output, onResize: watchResize }, paint);
148
- const { models, write } = collectSelections(results, config.models, screens.length);
430
+ const screens = [
431
+ ...roleScreens,
432
+ buildOrchestratorScreen(config, roleScreens.length, roleScreens.length + 1),
433
+ ];
434
+ const results = await runScreens([...screens, buildSandboxScreen(config, screens.length, screens.length + 1)], { input, output, onResize: watchResize }, paint);
435
+ if (results.some((result) => result.kind === "aborted")) {
436
+ console.error("Warning: Model setup was interrupted; nothing was saved.");
437
+ return config;
438
+ }
439
+ const answeredResults = results.filter((result) => result.kind !== "aborted");
440
+ const agentResults = answeredResults.filter((result) => roleScreens.some((screen) => screen.role === result.role));
441
+ const { agents, write } = collectSelections(agentResults, config.agents, roleScreens.length);
149
442
  if (!write) {
150
443
  console.error("Warning: Model setup was interrupted; nothing was saved.");
151
444
  return config;
152
445
  }
153
- const updatedConfig = { ...config, models };
446
+ const orchestratorSelection = answeredResults.find((result) => result.role === ORCHESTRATOR_SCREEN_ROLE);
447
+ if (orchestratorSelection === undefined) {
448
+ console.error("Warning: Orchestrator setup was interrupted; nothing was saved.");
449
+ return config;
450
+ }
451
+ let orchestrator;
452
+ if (orchestratorSelection.kind === "picked" && orchestratorSelection.id === "custom") {
453
+ const parameterResults = answeredResults.filter((result) => result.role.startsWith(`${ORCHESTRATOR_SCREEN_ROLE}.`));
454
+ orchestrator = collectOrchestratorSelection(orchestratorSelection, parameterResults, config);
455
+ if (orchestrator === undefined) {
456
+ console.error("Warning: Orchestrator setup was invalid; nothing was saved.");
457
+ return config;
458
+ }
459
+ }
460
+ else if (orchestratorSelection.kind === "picked") {
461
+ orchestrator = collectOrchestratorSelection(orchestratorSelection, [], config);
462
+ if (orchestrator === undefined) {
463
+ console.error("Warning: Orchestrator setup was invalid; nothing was saved.");
464
+ return config;
465
+ }
466
+ }
467
+ const updatedConfig = { ...config, agents };
468
+ if (orchestrator !== undefined)
469
+ updatedConfig.orchestrator = orchestrator;
470
+ const sandboxSelection = answeredResults.find((result) => result.role === SANDBOX_SCREEN_ROLE);
471
+ if (sandboxSelection?.kind === "picked") {
472
+ if (sandboxSelection.id === SANDBOX_OFF || sandboxSelection.id === SANDBOX_ON) {
473
+ updatedConfig.defaultSandbox = sandboxSelection.id;
474
+ }
475
+ }
154
476
  try {
155
477
  (options.save ?? saveConfig)(updatedConfig);
156
478
  }
157
479
  catch (error) {
158
480
  console.error(`Warning: Could not save config: ${error instanceof Error ? error.message : String(error)}`);
159
481
  }
160
- const summary = screens
161
- .map((screen) => `${screen.title} ${models[screen.agent] ?? "unset"}`)
482
+ const summary = roleScreens
483
+ .map((screen) => {
484
+ const binding = agents[screen.role];
485
+ return `${screen.role} ${binding ? `${binding.harness}:${binding.model}` : "unset"}`;
486
+ })
162
487
  .join(" · ");
163
- output.write(`\n saved: ${summary}\n\n`);
488
+ const modeSummary = orchestrator === undefined ? "" : ` · orchestrator ${orchestratorModeLabel(orchestrator)}`;
489
+ output.write(`\n saved: ${summary}${modeSummary}\n\n`);
164
490
  return updatedConfig;
165
491
  }
166
492
  export function registerSetupCommand(program) {
167
493
  program
168
494
  .command("setup")
169
- .description("Choose the model each installed agent should use")
495
+ .description("Choose the harness and model each agent should run on")
170
496
  .option("--refresh", "ignore the cached catalog and rediscover")
171
497
  .action(async (opts) => {
172
498
  // The message lives here rather than in the wizard, because `open` calls
173
499
  // the same function and has to stay quiet when it cannot prompt.
174
500
  if (!isInteractiveTerminal()) {
175
- console.error("codedeck setup needs a terminal on both stdin and stdout.");
501
+ console.error(`${getCliName()} setup needs a terminal on both stdin and stdout.`);
176
502
  process.exitCode = 1;
177
503
  return;
178
504
  }
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import { IpcClient } from "../../daemon/ipc.js";
2
+ export function formatUsageSummary(summary) {
3
+ const cost = `$${summary.costUsd.toFixed(2)}${summary.costComplete ? "" : "?"}`;
4
+ return `Run ${summary.runId}: ${summary.sessionCount} sessions, ${summary.inputTokens} input / ${summary.outputTokens} output / ${summary.cachedTokens} cached tokens, cost ${cost}`;
5
+ }
6
+ export function registerUsageCommand(program) {
7
+ program
8
+ .command("usage")
9
+ .description("Show aggregated usage for a run")
10
+ .argument("<run-id>", "run id")
11
+ .option("--json", "output the aggregated usage as JSON")
12
+ .action(async (runId, opts) => {
13
+ const client = new IpcClient();
14
+ try {
15
+ await client.ensureDaemonStarted();
16
+ }
17
+ catch (error) {
18
+ console.error(`Failed to start daemon: ${error instanceof Error ? error.message : String(error)}`);
19
+ process.exitCode = 3;
20
+ return;
21
+ }
22
+ let summary;
23
+ try {
24
+ summary = await client.request("usage.get", { runId });
25
+ }
26
+ catch (error) {
27
+ console.error(error instanceof Error ? error.message : String(error));
28
+ process.exitCode = 3;
29
+ return;
30
+ }
31
+ if (opts.json)
32
+ console.log(JSON.stringify(summary));
33
+ else
34
+ console.log(formatUsageSummary(summary));
35
+ });
36
+ }
37
+ //# sourceMappingURL=usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage.js","sourceRoot":"","sources":["../../../src/cli/commands/usage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAOhD,MAAM,UAAU,kBAAkB,CAAC,OAAwB;IACzD,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IAChF,OAAO,OAAO,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,YAAY,cAAc,OAAO,CAAC,WAAW,YAAY,OAAO,CAAC,YAAY,aAAa,OAAO,CAAC,YAAY,wBAAwB,IAAI,EAAE,CAAC;AACvL,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,iCAAiC,CAAC;SAC9C,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC;SAC9B,MAAM,CAAC,QAAQ,EAAE,qCAAqC,CAAC;SACvD,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,IAAyB,EAAE,EAAE;QACzD,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,mBAAmB,EAAE,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,2BAA2B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACnG,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,IAAI,OAAwB,CAAC;QAC7B,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAkB,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACtE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;;YAC/C,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { IpcClient } from "../../daemon/ipc.js";
2
+ import { getCliInvocation } from "../cli-name.js";
2
3
  import { exitCodeForOutcome } from "../../core/errors.js";
3
4
  import { waitForSession } from "../wait.js";
4
5
  export function formatWaitResult(session) {
@@ -18,8 +19,8 @@ export function registerWaitCommand(program) {
18
19
  .option("--json", "output the final session as JSON")
19
20
  .addHelpText("after", `
20
21
  Examples:
21
- $ npx codedeck wait a83f
22
- $ npx codedeck wait a83f --json
22
+ $ ${getCliInvocation()} wait a83f
23
+ $ ${getCliInvocation()} wait a83f --json
23
24
  `)
24
25
  .action(async (id, opts) => {
25
26
  const client = new IpcClient();