codedeck 0.1.9 → 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 (99) hide show
  1. package/README.md +97 -1
  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 +331 -0
  11. package/dist/cli/commands/open.js.map +1 -0
  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 +68 -30
  17. package/dist/cli/commands/run.js.map +1 -1
  18. package/dist/cli/commands/setup.js +508 -0
  19. package/dist/cli/commands/setup.js.map +1 -0
  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 +37 -21
  25. package/dist/cli/index.js.map +1 -1
  26. package/dist/cli/picker-state.js +168 -0
  27. package/dist/cli/picker-state.js.map +1 -0
  28. package/dist/cli/picker.js +157 -0
  29. package/dist/cli/picker.js.map +1 -0
  30. package/dist/cli/ui.js +233 -0
  31. package/dist/cli/ui.js.map +1 -0
  32. package/dist/config/config.js +47 -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/models.js +23 -4
  39. package/dist/core/models.js.map +1 -1
  40. package/dist/core/pricing.js +65 -0
  41. package/dist/core/pricing.js.map +1 -0
  42. package/dist/core/roles.js +83 -0
  43. package/dist/core/roles.js.map +1 -0
  44. package/dist/core/run-usage.js +46 -0
  45. package/dist/core/run-usage.js.map +1 -0
  46. package/dist/core/session.js +5 -0
  47. package/dist/core/session.js.map +1 -1
  48. package/dist/daemon/daemon.js +90 -3
  49. package/dist/daemon/daemon.js.map +1 -1
  50. package/dist/daemon/ipc.js +10 -3
  51. package/dist/daemon/ipc.js.map +1 -1
  52. package/dist/drivers/opencode/driver.js +1 -114
  53. package/dist/drivers/opencode/driver.js.map +1 -1
  54. package/dist/drivers/opencode/parser.js +86 -0
  55. package/dist/drivers/opencode/parser.js.map +1 -0
  56. package/dist/drivers/session-runtime.js +1 -0
  57. package/dist/drivers/session-runtime.js.map +1 -1
  58. package/dist/git/worktree.js +1 -1
  59. package/dist/git/worktree.js.map +1 -1
  60. package/dist/open/contract.js +104 -0
  61. package/dist/open/contract.js.map +1 -0
  62. package/dist/open/injection.js +59 -0
  63. package/dist/open/injection.js.map +1 -0
  64. package/dist/open/launchers/claude.js +212 -0
  65. package/dist/open/launchers/claude.js.map +1 -0
  66. package/dist/open/launchers/opencode.js +178 -0
  67. package/dist/open/launchers/opencode.js.map +1 -0
  68. package/dist/open/orchestrator-prose.js +12 -0
  69. package/dist/open/orchestrator-prose.js.map +1 -0
  70. package/dist/open/pty.js +281 -0
  71. package/dist/open/pty.js.map +1 -0
  72. package/dist/open/runtime.js +597 -0
  73. package/dist/open/runtime.js.map +1 -0
  74. package/dist/plugin/.claude-plugin/plugin.json +11 -0
  75. package/dist/plugin/agents/auditor.md +36 -0
  76. package/dist/plugin/agents/general.md +35 -0
  77. package/dist/plugin/agents/orchestrator-edit.md +69 -0
  78. package/dist/plugin/agents/orchestrator-read.md +69 -0
  79. package/dist/plugin/agents/orchestrator.md +91 -0
  80. package/dist/plugin/agents/reviewer.md +36 -0
  81. package/dist/plugin/commands/autonomous.md +58 -0
  82. package/dist/plugin/hooks/hooks.json +24 -0
  83. package/dist/plugin/hooks/session-id.sh +23 -0
  84. package/dist/plugin/hooks/session-name-lib.mjs +40 -0
  85. package/dist/plugin/hooks/session-name-worker.mjs +124 -0
  86. package/dist/plugin/hooks/session-name.mjs +66 -0
  87. package/dist/plugin/hooks/session-name.sh +7 -0
  88. package/dist/plugin/pty-shim.mjs +114 -0
  89. package/dist/plugin/statusline.sh +260 -0
  90. package/dist/plugin/themes/codedeck-rage.json +74 -0
  91. package/dist/plugin/themes/codedeck-ultra.json +76 -0
  92. package/dist/plugin/ultra.md +9 -0
  93. package/dist/store/claims.js +152 -0
  94. package/dist/store/claims.js.map +1 -0
  95. package/dist/store/database.js +14 -0
  96. package/dist/store/database.js.map +1 -1
  97. package/dist/store/sessions.js +17 -3
  98. package/dist/store/sessions.js.map +1 -1
  99. package/package.json +6 -4
package/dist/cli/ui.js ADDED
@@ -0,0 +1,233 @@
1
+ /**
2
+ * Shared terminal drawing for the launcher and the first-run wizard, so the
3
+ * two open with the same mark instead of each inventing one.
4
+ */
5
+ import { hitCount, visibleItems } from "./picker-state.js";
6
+ // Box-drawing letters, every row exactly 24 columns wide. Kept as three
7
+ // separate strings rather than one template so an editor cannot reflow it.
8
+ export const LOGO = [
9
+ "╔═╗╔═╗╔╦╗╔═╗╔╦╗╔═╗╔═╗╦╔═",
10
+ "║ ║ ║║║║╠═ ║║║╠═ ║ ╠╩╗",
11
+ "╚═╝╚═╝═╩╝╚═╝═╩╝╚═╝╚═╝╩ ╩",
12
+ ];
13
+ // The sign-off, same alphabet as the logo so the two ends of a session match.
14
+ const FAREWELL = [
15
+ "╔╗ ╦ ╦╔═╗",
16
+ "╠╩╗╚╦╝╠═ ",
17
+ "╚═╝ ╩ ╚═╝",
18
+ ];
19
+ export const INDENT = " ";
20
+ /** The logo with an optional line of context under it. */
21
+ export function renderLogo(subtitle) {
22
+ const lines = LOGO.map((line) => `${INDENT}${line}`);
23
+ if (subtitle)
24
+ lines.push(`${INDENT}${subtitle}`);
25
+ return `\n${lines.join("\n")}\n`;
26
+ }
27
+ /** The same, for the way out. */
28
+ export function renderFarewell(subtitle) {
29
+ const lines = FAREWELL.map((line) => `${INDENT}${line}`);
30
+ if (subtitle)
31
+ lines.push(`${INDENT}${subtitle}`);
32
+ return `\n${lines.join("\n")}\n`;
33
+ }
34
+ const RESET = "\x1b[0m";
35
+ /**
36
+ * Color is a factory rather than an environment read, because the renderer has
37
+ * to stay pure: with color off in tests, visible width is string length.
38
+ */
39
+ export function colors(enabled) {
40
+ const paint = (code) => (s) => (enabled ? `\x1b[${code}m${s}${RESET}` : s);
41
+ return { bold: paint("1"), dim: paint("2"), invert: paint("7") };
42
+ }
43
+ const ANSI = /\x1b\[[0-9;]*m/g;
44
+ /**
45
+ * Code points that take two terminal columns, and the marks that take none.
46
+ *
47
+ * Not a complete wcwidth: model ids are ASCII, and the only text here a user
48
+ * can steer is the filter line, so these cover what a paste realistically
49
+ * carries. Anything outside them counts as one column, which is what the whole
50
+ * function did before.
51
+ */
52
+ const ZERO_WIDTH = [
53
+ [0x0300, 0x036f], // combining diacritics
54
+ [0x200b, 0x200f], // zero-width space through the direction marks
55
+ [0xfe00, 0xfe0f], // variation selectors
56
+ [0xfeff, 0xfeff],
57
+ [0xe0100, 0xe01ef],
58
+ ];
59
+ const WIDE = [
60
+ [0x1100, 0x115f], // Hangul Jamo
61
+ [0x2e80, 0x303e], // CJK radicals through the symbol block
62
+ [0x3041, 0x33ff],
63
+ [0x3400, 0x4dbf],
64
+ [0x4e00, 0x9fff], // unified ideographs
65
+ [0xa000, 0xa4cf], // Yi
66
+ [0xac00, 0xd7a3], // Hangul syllables
67
+ [0xf900, 0xfaff],
68
+ [0xfe30, 0xfe6f],
69
+ [0xff00, 0xff60], // fullwidth forms
70
+ [0xffe0, 0xffe6],
71
+ [0x1f300, 0x1faff], // emoji
72
+ [0x20000, 0x3fffd],
73
+ ];
74
+ function inRanges(cp, ranges) {
75
+ return ranges.some(([lo, hi]) => cp >= lo && cp <= hi);
76
+ }
77
+ function charWidth(cp) {
78
+ if (inRanges(cp, ZERO_WIDTH))
79
+ return 0;
80
+ return inRanges(cp, WIDE) ? 2 : 1;
81
+ }
82
+ /** Terminal columns the text occupies, ignoring the escapes that paint it. */
83
+ export function visibleWidth(text) {
84
+ let width = 0;
85
+ for (const char of text.replace(ANSI, ""))
86
+ width += charWidth(char.codePointAt(0));
87
+ return width;
88
+ }
89
+ /**
90
+ * Cuts by terminal columns and closes any escape it left open, otherwise the
91
+ * color bleeds into the rest of the line.
92
+ *
93
+ * Walking code points rather than UTF-16 units matters twice over. Cutting
94
+ * mid-pair emitted a lone surrogate, which is not valid UTF-8 on the wire. And
95
+ * a two-column character counted as one let the line outgrow the terminal,
96
+ * which wraps it, and then the redraw walks up fewer lines than it printed and
97
+ * leaves the difference on screen.
98
+ */
99
+ export function truncate(text, width) {
100
+ if (width <= 0)
101
+ return "";
102
+ if (visibleWidth(text) <= width)
103
+ return text;
104
+ let out = "";
105
+ let seen = 0;
106
+ let painted = false;
107
+ for (let i = 0; i < text.length;) {
108
+ ANSI.lastIndex = i;
109
+ const match = ANSI.exec(text);
110
+ if (match && match.index === i) {
111
+ out += match[0];
112
+ painted = match[0] !== RESET;
113
+ i += match[0].length;
114
+ continue;
115
+ }
116
+ const char = String.fromCodePoint(text.codePointAt(i));
117
+ const cost = charWidth(char.codePointAt(0));
118
+ // A wide character with one column left is dropped whole. Emitting it is
119
+ // what pushes the line past the edge.
120
+ if (seen + cost > width)
121
+ break;
122
+ out += char;
123
+ seen += cost;
124
+ i += char.length;
125
+ }
126
+ return painted ? `${out}${RESET}` : out;
127
+ }
128
+ const FALLBACK = { rows: 24, columns: 80 };
129
+ /**
130
+ * `0` and `undefined` mean the same thing here: a terminal that did not report
131
+ * its size. `??` would take `0` for an answer and collapse the layout, and
132
+ * `Math.max(3, undefined - 9)` is NaN.
133
+ */
134
+ export function readDimensions(stdout) {
135
+ return {
136
+ rows: stdout.rows || FALLBACK.rows,
137
+ columns: stdout.columns || FALLBACK.columns,
138
+ };
139
+ }
140
+ /** Below this the logo costs more rows than it is worth. */
141
+ const LOGO_MIN_ROWS = 15;
142
+ function drawsLogo(dim) {
143
+ return dim.rows >= LOGO_MIN_ROWS;
144
+ }
145
+ /**
146
+ * Counted, not a constant: error and description lines and the logo only exist
147
+ * sometimes, and a wrong constant here silently cuts items off the list.
148
+ */
149
+ export function chromeHeight(state, dim) {
150
+ const logo = drawsLogo(dim) ? LOGO.length + 1 : 0;
151
+ const header = 1;
152
+ const error = state.screen.error ? 1 : 0;
153
+ const description = state.screen.description?.length ?? 0;
154
+ const filterLine = 1;
155
+ const footer = 1;
156
+ // One: the blank above the filter. The logo brings its own, already counted.
157
+ const blank = 1;
158
+ return logo + header + error + description + filterLine + footer + blank;
159
+ }
160
+ const PLAIN = colors(false);
161
+ /**
162
+ * The item rows and how many items they cover. One walk answers both because
163
+ * the group headers take rows too: budgeting by item alone grew the frame past
164
+ * the terminal, and the redraw then moved the cursor up by fewer lines than it
165
+ * had just printed.
166
+ */
167
+ function itemBlock(state, dim, c) {
168
+ const items = visibleItems(state);
169
+ const filtering = state.filter.trim().length > 0;
170
+ const budget = Math.max(1, dim.rows - chromeHeight(state, dim));
171
+ const lines = [];
172
+ let shown = 0;
173
+ let lastGroup;
174
+ for (let i = state.offset; i < items.length && lines.length < budget; i++) {
175
+ const item = items[i];
176
+ // Headers are dead weight once a filter is on, so the provider moves to the
177
+ // end of each row instead.
178
+ const group = !filtering && item.group && item.group !== lastGroup && !(state.screen.pinned && i === 0)
179
+ ? item.group
180
+ : undefined;
181
+ if (group) {
182
+ lastGroup = group;
183
+ // The header is the first thing to drop on a short terminal: a list with
184
+ // no items reads worse than one with no group labels.
185
+ if (lines.length + 2 <= budget) {
186
+ const count = state.screen.items.filter((candidate) => candidate.group === group).length;
187
+ lines.push(groupHeader(group, count, dim.columns));
188
+ }
189
+ }
190
+ const marker = i === state.cursor ? "› " : " ";
191
+ const trailer = filtering ? item.group : item.note;
192
+ const suffix = trailer ? ` ${c.dim(trailer)}` : "";
193
+ lines.push(`${INDENT}${marker}${item.label}${suffix}`);
194
+ shown += 1;
195
+ }
196
+ return { lines, shown };
197
+ }
198
+ export function viewportHeight(state, dim) {
199
+ return Math.max(1, itemBlock(state, dim, PLAIN).shown);
200
+ }
201
+ function groupHeader(group, count, width) {
202
+ const label = ` ${group} `;
203
+ const tail = ` ${count} `;
204
+ const room = Math.max(0, width - INDENT.length - label.length - tail.length - 4);
205
+ return `${INDENT}--${label}${"-".repeat(room)}${tail}--`;
206
+ }
207
+ export function renderFrame(state, dim, c) {
208
+ const width = dim.columns;
209
+ const lines = [];
210
+ if (drawsLogo(dim)) {
211
+ for (const row of LOGO)
212
+ lines.push(`${INDENT}${row}`);
213
+ lines.push("");
214
+ }
215
+ lines.push(`${INDENT}${c.bold(`${state.screen.title} ~ ${state.screen.counter}`)}`);
216
+ if (state.screen.error)
217
+ lines.push(`${INDENT}${c.dim(state.screen.error)}`);
218
+ for (const line of state.screen.description ?? [])
219
+ lines.push(`${INDENT}${c.dim(line)}`);
220
+ lines.push("");
221
+ lines.push(`${INDENT}filtrar: ${state.filter}`);
222
+ const filtering = state.filter.trim().length > 0;
223
+ for (const line of itemBlock(state, dim, c).lines)
224
+ lines.push(line);
225
+ const footer = state.confirming
226
+ ? `"${state.confirming}" nao esta no catalogo. Enter de novo grava assim mesmo, ^G volta`
227
+ : filtering
228
+ ? `${hitCount(state)} de ${state.screen.items.length} move ^ v Enter escolhe ^G pula ^C sai`
229
+ : `move ^ v Enter escolhe ^G pula ^C sai`;
230
+ lines.push(`${INDENT}${c.dim(footer)}`);
231
+ return lines.map((line) => truncate(line, width));
232
+ }
233
+ //# sourceMappingURL=ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/cli/ui.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,56 @@
1
1
  import fs from "node:fs";
2
2
  import path from "node:path";
3
3
  import { getPaths } from "./paths.js";
4
+ import { isAgentId } from "../core/session.js";
5
+ import { parseSandbox } from "../core/driver.js";
6
+ export { BALANCED_PRESET, DISPATCHER_PRESET, EXPLORER_PRESET, ORCHESTRATOR_PRESETS, isOrchestratorMode, orchestratorModeLabel, resolveOrchestratorMode, } from "./orchestrator-mode.js";
7
+ /**
8
+ * A saved binding is only usable whole. A half-written entry (a harness with
9
+ * no model, or the reverse) resolves to nothing rather than to a guess, so the
10
+ * caller falls back the same way it would for a role nobody configured.
11
+ *
12
+ * The file is JSON someone can edit, and the cast in `loadConfig` believes
13
+ * whatever it finds, so the harness is checked against the four CodeDeck
14
+ * drives. Without that, `{"harness":"wat"}` reached the daemon as an agent id
15
+ * and died there instead of falling back here.
16
+ */
17
+ export function resolveRoleBinding(role, config = {}) {
18
+ if (role === undefined)
19
+ return undefined;
20
+ const binding = config.agents?.[role];
21
+ if (!binding || !isAgentId(binding.harness))
22
+ return undefined;
23
+ if (typeof binding.model !== "string" || binding.model.trim() === "")
24
+ return undefined;
25
+ return { harness: binding.harness, model: binding.model };
26
+ }
27
+ /**
28
+ * Resolve the model passed to a driver without making driver defaults part of
29
+ * CodeDeck's config. An undefined result lets the selected driver choose its
30
+ * own default.
31
+ */
32
+ export function resolveModel(agent, explicit, config = {}) {
33
+ return explicit ?? config.models?.[agent] ?? config.defaultModel;
34
+ }
35
+ /**
36
+ * Resolve a hand-edited sandbox value without allowing an invalid value to
37
+ * reach a driver. An invalid value is treated as absent, so the driver keeps
38
+ * its own fallback.
39
+ */
40
+ export function resolveDefaultSandbox(config = {}) {
41
+ try {
42
+ const value = config?.defaultSandbox;
43
+ return typeof value === "string" ? parseSandbox(value) : undefined;
44
+ }
45
+ catch {
46
+ return undefined;
47
+ }
48
+ }
4
49
  const DEFAULT_CONFIG = {
5
50
  defaultAgent: "claude",
6
51
  worktree: false,
52
+ remoteControl: true,
53
+ pty: true,
7
54
  };
8
55
  export function loadConfig() {
9
56
  const { configFile } = getPaths();
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAStC,MAAM,cAAc,GAAmB;IACrC,YAAY,EAAE,QAAQ;IACtB,QAAQ,EAAE,KAAK;CAChB,CAAC;AAEF,MAAM,UAAU,UAAU;IACxB,MAAM,EAAE,UAAU,EAAE,GAAG,QAAQ,EAAE,CAAC;IAClC,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;QAC7D,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAC;QACjD,OAAO,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAmB;IAC5C,MAAM,EAAE,UAAU,EAAE,GAAG,QAAQ,EAAE,CAAC;IAClC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACtE,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ export const DISPATCHER_PRESET = Object.freeze({
2
+ investigate: "none",
3
+ selfWork: "none",
4
+ tools: "dispatch",
5
+ });
6
+ export const BALANCED_PRESET = Object.freeze({
7
+ investigate: "read",
8
+ selfWork: "trivial",
9
+ tools: "edit",
10
+ });
11
+ export const EXPLORER_PRESET = Object.freeze({
12
+ investigate: "free",
13
+ selfWork: "small",
14
+ tools: "edit",
15
+ });
16
+ export const ORCHESTRATOR_PRESETS = Object.freeze({
17
+ dispatcher: DISPATCHER_PRESET,
18
+ balanced: BALANCED_PRESET,
19
+ explorer: EXPLORER_PRESET,
20
+ });
21
+ const INVESTIGATE_MODES = ["none", "read", "free"];
22
+ const SELF_WORK_MODES = ["none", "trivial", "small"];
23
+ const ORCHESTRATOR_TOOLS = ["dispatch", "read", "edit"];
24
+ function hasOwn(value, property) {
25
+ return Object.prototype.hasOwnProperty.call(value, property);
26
+ }
27
+ export function isOrchestratorMode(value) {
28
+ if (typeof value !== "object" || value === null || Array.isArray(value))
29
+ return false;
30
+ const candidate = value;
31
+ if (!INVESTIGATE_MODES.includes(candidate.investigate))
32
+ return false;
33
+ if (!SELF_WORK_MODES.includes(candidate.selfWork))
34
+ return false;
35
+ if (!ORCHESTRATOR_TOOLS.includes(candidate.tools))
36
+ return false;
37
+ if (!hasOwn(candidate, "parallelism"))
38
+ return true;
39
+ return typeof candidate.parallelism === "number" && Number.isFinite(candidate.parallelism) && candidate.parallelism > 0;
40
+ }
41
+ function copyMode(mode) {
42
+ return {
43
+ investigate: mode.investigate,
44
+ selfWork: mode.selfWork,
45
+ tools: mode.tools,
46
+ ...(hasOwn(mode, "parallelism") ? { parallelism: mode.parallelism } : {}),
47
+ };
48
+ }
49
+ export function resolveOrchestratorMode(config = {}) {
50
+ const configured = config.orchestrator;
51
+ if (!isOrchestratorMode(configured))
52
+ return copyMode(DISPATCHER_PRESET);
53
+ return copyMode(configured);
54
+ }
55
+ function matchesPreset(mode, preset) {
56
+ const sameParallelism = hasOwn(mode, "parallelism") === hasOwn(preset, "parallelism") &&
57
+ (!hasOwn(mode, "parallelism") || mode.parallelism === preset.parallelism);
58
+ return (mode.investigate === preset.investigate &&
59
+ mode.selfWork === preset.selfWork &&
60
+ mode.tools === preset.tools &&
61
+ sameParallelism);
62
+ }
63
+ export function orchestratorModeLabel(mode) {
64
+ if (matchesPreset(mode, DISPATCHER_PRESET))
65
+ return "dispatcher";
66
+ if (matchesPreset(mode, BALANCED_PRESET))
67
+ return "balanced";
68
+ if (matchesPreset(mode, EXPLORER_PRESET))
69
+ return "explorer";
70
+ return "custom";
71
+ }
72
+ //# sourceMappingURL=orchestrator-mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator-mode.js","sourceRoot":"","sources":["../../src/config/orchestrator-mode.ts"],"names":[],"mappings":"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"}
@@ -32,6 +32,11 @@ export function getPaths() {
32
32
  logsDir: path.join(base, "logs"),
33
33
  worktreesDir: path.join(base, "worktrees"),
34
34
  cacheDir: path.join(base, "cache"),
35
+ // Per-session scratch: the session id a hook reports, and the name it
36
+ // derives from the first prompt. It lives here rather than in the shared
37
+ // temp directory because `open` types what it finds there into a live
38
+ // session, and on Linux anyone on the box can write to /tmp.
39
+ sessionsDir: path.join(base, "sessions"),
35
40
  modelsCache: path.join(base, "cache", "models.json"),
36
41
  configFile: path.join(configBase, "config.json"),
37
42
  };
@@ -41,5 +46,8 @@ export function ensureDirs() {
41
46
  for (const dir of [p.base, p.logsDir, p.worktreesDir, p.cacheDir, path.dirname(p.configFile)]) {
42
47
  fs.mkdirSync(dir, { recursive: true });
43
48
  }
49
+ // Narrower than the rest on purpose: what lands here is typed into a
50
+ // session, so only its owner may put anything in it.
51
+ fs.mkdirSync(p.sessionsDir, { recursive: true, mode: 0o700 });
44
52
  }
45
53
  //# sourceMappingURL=paths.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/config/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,MAAM,UAAU,UAAU;IACxB,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,qCAAqC;IACrC,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IAChE,mEAAmE;IACnE,wCAAwC;IACxC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,YAAY,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAC9E,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IACxC,IAAI,GAAG;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;IAC9B,MAAM,UAAU,GAAG,YAAY,EAAE,CAAC;IAClC,OAAO;QACL,IAAI;QACJ,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC;QACnC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC;QAC1C,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC;QACxC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC;QACxC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;QAChC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;QAC1C,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;QAClC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC;QACpD,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC;KACjD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,MAAM,CAAC,GAAG,QAAQ,EAAE,CAAC;IACrB,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QAC9F,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/config/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,MAAM,UAAU,UAAU;IACxB,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,qCAAqC;IACrC,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IAChE,mEAAmE;IACnE,wCAAwC;IACxC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,YAAY,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAC9E,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IACxC,IAAI,GAAG;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;IAC9B,MAAM,UAAU,GAAG,YAAY,EAAE,CAAC;IAClC,OAAO;QACL,IAAI;QACJ,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC;QACnC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC;QAC1C,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC;QACxC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC;QACxC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;QAChC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;QAC1C,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;QAClC,sEAAsE;QACtE,yEAAyE;QACzE,sEAAsE;QACtE,6DAA6D;QAC7D,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC;QACxC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC;QACpD,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC;KACjD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,MAAM,CAAC,GAAG,QAAQ,EAAE,CAAC;IACrB,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QAC9F,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,qEAAqE;IACrE,qDAAqD;IACrD,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAChE,CAAC"}
@@ -135,6 +135,18 @@ export function levenshtein(a, b) {
135
135
  }
136
136
  return matrix[al][bl];
137
137
  }
138
+ /**
139
+ * A harness groups its models by provider, and every caller that wants to look
140
+ * one up has to walk both levels first. `open`, `run` and `setup` each did that
141
+ * walk themselves.
142
+ */
143
+ export function flattenModels(harness) {
144
+ return harness.providers.flatMap((provider) => provider.models);
145
+ }
146
+ /** Every string a user could reasonably type to mean one of these models. */
147
+ export function modelNames(harness) {
148
+ return flattenModels(harness).flatMap((model) => [model.id, ...(model.aliases ?? [])]);
149
+ }
138
150
  export function findClosestModel(query, candidates) {
139
151
  if (!query || candidates.length === 0)
140
152
  return undefined;
@@ -157,9 +169,6 @@ export function findClosestModel(query, candidates) {
157
169
  }
158
170
  }
159
171
  }
160
- if (bestSubMatch !== undefined) {
161
- return bestSubMatch;
162
- }
163
172
  // 3. Fuzzy Levenshtein match
164
173
  let bestFuzzyMatch;
165
174
  let minDistance = Infinity;
@@ -172,6 +181,16 @@ export function findClosestModel(query, candidates) {
172
181
  bestFuzzyMatch = candidate;
173
182
  }
174
183
  }
175
- return bestFuzzyMatch;
184
+ // A substring hit is not automatically the better answer. "claude-opus-4-9"
185
+ // contains "opus", so returning on the substring pass suggested the alias and
186
+ // never even looked at "claude-opus-4-8", one character away. Both passes are
187
+ // kept because each catches what the other misses: the substring pass reaches
188
+ // matches the distance threshold rejects as too long, such as "Sonnet" for
189
+ // "claude-sonnet-5".
190
+ if (bestSubMatch === undefined)
191
+ return bestFuzzyMatch;
192
+ if (bestFuzzyMatch === undefined)
193
+ return bestSubMatch;
194
+ return minDistance < levenshtein(q, bestSubMatch.toLowerCase()) ? bestFuzzyMatch : bestSubMatch;
176
195
  }
177
196
  //# sourceMappingURL=models.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/core/models.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/core/models.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Static prices are USD per 1,000,000 tokens. Keep this table versioned with
3
+ * the code. Models discovered at runtime but absent here deliberately have no
4
+ * fallback price and therefore produce null from computeSessionCost().
5
+ */
6
+ export const MODEL_PRICES = {
7
+ // Codex models currently named by CodeDeck. These ids are specific to the
8
+ // installed Codex catalog, so the values are placeholders. TODO: ajustar preço.
9
+ "gpt-5": { input: 1, output: 5, cached: 0.5 },
10
+ "gpt-5.5": { input: 1, output: 5 },
11
+ "gpt-5.6-luna": { input: 1, output: 5 },
12
+ "gpt-5.7": { input: 1, output: 5 },
13
+ "meta/muse-spark-1.3-contributor": { input: 0.1, output: 0.2, cached: 0.002 },
14
+ "openrouter/z-ai/glm-5.3-flash": { input: 0.075, output: 0.25, cached: 0.015 },
15
+ "openai-codex/gpt-5.6-luna": { input: 1, output: 5 },
16
+ // Claude's current CodeDeck default and model examples. Claude normally
17
+ // reports its own cost, but these entries keep the fallback table complete.
18
+ // TODO: ajustar preço for these model ids if their catalog prices change.
19
+ "claude-opus-4-8": { input: 15, output: 75 },
20
+ "claude-opus-5": { input: 15, output: 75 },
21
+ "claude-sonnet-4-6": { input: 3, output: 15 },
22
+ "claude-sonnet-5": { input: 3, output: 15 },
23
+ "claude-haiku-4-5": { input: 0.8, output: 4 },
24
+ };
25
+ function isFiniteNumber(value) {
26
+ return typeof value === "number" && Number.isFinite(value);
27
+ }
28
+ function isValidTokenCount(value) {
29
+ return value === undefined || (isFiniteNumber(value) && value >= 0);
30
+ }
31
+ function isUsablePrice(price) {
32
+ return (isFiniteNumber(price.input) &&
33
+ price.input >= 0 &&
34
+ isFiniteNumber(price.output) &&
35
+ price.output >= 0 &&
36
+ (price.cached === undefined || (isFiniteNumber(price.cached) && price.cached >= 0)));
37
+ }
38
+ /**
39
+ * Returns a reported cost when one exists, otherwise calculates a static-table
40
+ * estimate. Cached tokens use the input price unless the model declares its
41
+ * own cached price. Invalid or unknown data has no known cost and returns null.
42
+ */
43
+ export function computeSessionCost({ model, usage, reportedCost, }) {
44
+ if (isFiniteNumber(reportedCost) && reportedCost < 0)
45
+ return null;
46
+ // Zero is a valid reported cost and must win over every table entry.
47
+ if (isFiniteNumber(reportedCost) && reportedCost >= 0)
48
+ return reportedCost;
49
+ const price = model === undefined || model === null ? undefined : MODEL_PRICES[model];
50
+ if (!price || !isUsablePrice(price))
51
+ return null;
52
+ const inputTokens = usage?.inputTokens ?? 0;
53
+ const outputTokens = usage?.outputTokens ?? 0;
54
+ const cachedTokens = usage?.cachedTokens ?? 0;
55
+ if (!isValidTokenCount(inputTokens) ||
56
+ !isValidTokenCount(outputTokens) ||
57
+ !isValidTokenCount(cachedTokens)) {
58
+ return null;
59
+ }
60
+ const cachedPrice = price.cached ?? price.input;
61
+ return (inputTokens * price.input +
62
+ outputTokens * price.output +
63
+ cachedTokens * cachedPrice) / 1_000_000;
64
+ }
65
+ //# sourceMappingURL=pricing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/core/pricing.ts"],"names":[],"mappings":"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"}