codedeck 0.1.8 → 0.2.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.
@@ -1,10 +1,11 @@
1
1
  import path from "node:path";
2
2
  import { IpcClient } from "../../daemon/ipc.js";
3
- import { loadConfig } from "../../config/config.js";
3
+ import { loadConfig, resolveModel } from "../../config/config.js";
4
4
  import { CODEX_SANDBOXES, parseEffort, parseSandbox, REASONING_EFFORTS } from "../../core/driver.js";
5
5
  import { exitCodeForOutcome } from "../../core/errors.js";
6
6
  import { isTerminalStatus } from "../../core/session.js";
7
- import { findClosestModel, loadDiskModelsCache } from "../../core/models.js";
7
+ import { findClosestModel, loadDiskModelsCache, modelNames } from "../../core/models.js";
8
+ import { resolvePluginDir, resolveRolePrompt, ROLES } from "../../core/roles.js";
8
9
  export function registerRunCommand(program) {
9
10
  program
10
11
  .command("run")
@@ -13,6 +14,7 @@ export function registerRunCommand(program) {
13
14
  .option("--agent <agent>", "agent to use: claude | codex | opencode | omp (default: claude or config.defaultAgent)")
14
15
  .option("--model <model>", "model to use (e.g. claude-opus-5, gpt-5, anthropic/claude-sonnet)")
15
16
  .option("--effort <level>", `reasoning effort: ${REASONING_EFFORTS.join(" | ")}`)
17
+ .option("--role <role>", `prefix the prompt with a CodeDeck role: ${ROLES.join(" | ")}`)
16
18
  .option("--fast", "use the priority service tier (1.5x speed) — codex and omp only")
17
19
  .option("--sandbox <mode>", `codex sandbox: ${CODEX_SANDBOXES.join(" | ")} (default: workspace-write)`)
18
20
  .option("--dangerously-bypass-approvals-and-sandbox", "codex: bypass sandbox and approvals (sets sandbox to danger-full-access)")
@@ -35,7 +37,19 @@ Resume with: codedeck send <id> "continue"
35
37
  .action(async (prompt, opts) => {
36
38
  const cwd = opts.cwd ? path.resolve(opts.cwd) : process.cwd();
37
39
  const cfg = loadConfig();
38
- const agent = opts.agent || cfg.defaultAgent || "claude";
40
+ const agent = (opts.agent || cfg.defaultAgent || "claude");
41
+ const model = resolveModel(agent, opts.model, cfg);
42
+ // `open` hands the role to Claude as `--agent`, which no other harness
43
+ // has. Here it becomes a prompt prefix instead, so a codex or opencode
44
+ // worker gets the same contract through the only channel it shares.
45
+ let rolePrompt;
46
+ try {
47
+ rolePrompt = resolveRolePrompt(resolvePluginDir(), opts.role, prompt);
48
+ }
49
+ catch (e) {
50
+ console.error(e instanceof Error ? e.message : String(e));
51
+ process.exit(3); // usage error — infra class
52
+ }
39
53
  // Validate here so a typo fails before a session row is created; codex
40
54
  // would otherwise reject it at spawn time, leaving a dead session behind.
41
55
  let effort;
@@ -81,26 +95,19 @@ Resume with: codedeck send <id> "continue"
81
95
  if (dangerouslyBypass && agent !== "codex") {
82
96
  console.error(`Warning: --dangerously-bypass-approvals-and-sandbox has no effect on ${agent} (only codex); continuing without it.`);
83
97
  }
84
- if (opts.model) {
98
+ if (model) {
85
99
  const cached = loadDiskModelsCache();
86
100
  if (cached && Array.isArray(cached)) {
87
101
  const harnessData = cached.find((h) => h.agent === agent);
88
102
  if (harnessData && harnessData.providers.length > 0) {
89
- const knownIds = [];
90
- for (const p of harnessData.providers) {
91
- for (const m of p.models) {
92
- knownIds.push(m.id);
93
- if (m.aliases)
94
- knownIds.push(...m.aliases);
95
- }
96
- }
97
- if (!knownIds.includes(opts.model)) {
98
- const suggestion = findClosestModel(opts.model, knownIds);
103
+ const knownIds = modelNames(harnessData);
104
+ if (!knownIds.includes(model)) {
105
+ const suggestion = findClosestModel(model, knownIds);
99
106
  if (suggestion) {
100
- console.error(`Warning: Model "${opts.model}" is not recognized for agent "${agent}". Did you mean "${suggestion}"? Continuing anyway...`);
107
+ console.error(`Warning: Model "${model}" is not recognized for agent "${agent}". Did you mean "${suggestion}"? Continuing anyway...`);
101
108
  }
102
109
  else {
103
- console.error(`Warning: Model "${opts.model}" is not in known catalog for agent "${agent}". Continuing anyway...`);
110
+ console.error(`Warning: Model "${model}" is not in known catalog for agent "${agent}". Continuing anyway...`);
104
111
  }
105
112
  }
106
113
  }
@@ -116,9 +123,9 @@ Resume with: codedeck send <id> "continue"
116
123
  }
117
124
  const background = !!opts.detach;
118
125
  const params = {
119
- prompt,
126
+ prompt: rolePrompt,
120
127
  agent,
121
- model: opts.model,
128
+ model,
122
129
  effort,
123
130
  fast: effectiveFast,
124
131
  sandbox: effectiveSandbox,
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/cli/commands/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/cli/commands/run.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACrG,OAAO,EAAE,kBAAkB,EAAoB,MAAM,sBAAsB,CAAC;AAE5E,OAAO,EAAE,gBAAgB,EAA8B,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACzF,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEjF,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,gFAAgF,CAAC;SAC7F,QAAQ,CAAC,UAAU,EAAE,0DAA0D,CAAC;SAChF,MAAM,CAAC,iBAAiB,EAAE,wFAAwF,CAAC;SACnH,MAAM,CAAC,iBAAiB,EAAE,mEAAmE,CAAC;SAC9F,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;SAChF,MAAM,CAAC,eAAe,EAAE,2CAA2C,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;SACvF,MAAM,CAAC,QAAQ,EAAE,iEAAiE,CAAC;SACnF,MAAM,CAAC,kBAAkB,EAAE,kBAAkB,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC;SACtG,MAAM,CAAC,4CAA4C,EAAE,0EAA0E,CAAC;SAChI,MAAM,CAAC,eAAe,EAAE,+CAA+C,CAAC;SACxE,MAAM,CAAC,aAAa,EAAE,gDAAgD,CAAC;SACvE,MAAM,CAAC,YAAY,EAAE,oEAAoE,CAAC;SAC1F,MAAM,CAAC,eAAe,EAAE,kDAAkD,CAAC;SAC3E,MAAM,CAAC,gBAAgB,EAAE,8CAA8C,CAAC;SACxE,MAAM,CAAC,QAAQ,EAAE,4CAA4C,CAAC;SAC9D,WAAW,CAAC,OAAO,EAAE;;;;;;;;;CASzB,CAAC;SACG,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,IAAS,EAAE,EAAE;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QAC9D,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,YAAY,IAAI,QAAQ,CAAY,CAAC;QACtE,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAEnD,uEAAuE;QACvE,uEAAuE;QACvE,oEAAoE;QACpE,IAAI,UAAkB,CAAC;QACvB,IAAI,CAAC;YACH,UAAU,GAAG,iBAAiB,CAAC,gBAAgB,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACxE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,4BAA4B;QAC/C,CAAC;QAED,uEAAuE;QACvE,0EAA0E;QAC1E,IAAI,MAAM,CAAC;QACX,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACpC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,4BAA4B;YAC/C,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC;QACZ,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC;gBACH,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QACD,0DAA0D;QAC1D,qEAAqE;QACrE,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,oCAAoC,CAAC;QACtE,IAAI,iBAAiB,IAAI,CAAC,OAAO;YAAE,OAAO,GAAG,oBAA6B,CAAC;QAC3E,IAAI,iBAAiB,IAAI,OAAO,IAAI,OAAO,KAAK,oBAAoB,EAAE,CAAC;YACrE,OAAO,CAAC,KAAK,CAAC,qIAAqI,CAAC,CAAC;YACrJ,OAAO,GAAG,oBAA6B,CAAC;QAC1C,CAAC;QAED,2EAA2E;QAC3E,uEAAuE;QACvE,8DAA8D;QAC9D,MAAM,aAAa,GAAG,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACxD,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;YACpC,OAAO,CAAC,KAAK,CAAC,wFAAwF,CAAC,CAAC;QAC1G,CAAC;QAED,MAAM,gBAAgB,GAAG,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QACjE,IAAI,OAAO,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YACjC,OAAO,CAAC,KAAK,CAAC,uCAAuC,KAAK,mDAAmD,CAAC,CAAC;QACjH,CAAC;QACD,IAAI,iBAAiB,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YAC3C,OAAO,CAAC,KAAK,CAAC,wEAAwE,KAAK,uCAAuC,CAAC,CAAC;QACtI,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC;YACrC,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;gBAC1D,IAAI,WAAW,IAAI,WAAW,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACpD,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;oBACzC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC9B,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;wBACrD,IAAI,UAAU,EAAE,CAAC;4BACf,OAAO,CAAC,KAAK,CACX,mBAAmB,KAAK,kCAAkC,KAAK,oBAAoB,UAAU,yBAAyB,CACvH,CAAC;wBACJ,CAAC;6BAAM,CAAC;4BACN,OAAO,CAAC,KAAK,CACX,mBAAmB,KAAK,wCAAwC,KAAK,yBAAyB,CAC/F,CAAC;wBACJ,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,mBAAmB,EAAE,CAAC;QACrC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,4BAA4B;QAC/C,CAAC;QAED,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;QACjC,MAAM,MAAM,GAAQ;YAClB,MAAM,EAAE,UAAU;YAClB,KAAK;YACL,KAAK;YACL,MAAM;YACN,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,gBAAgB;YACzB,oCAAoC,EAAE,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS;YACvF,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,GAAG;YACH,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,MAAM,EAAE,UAAU;SACnB,CAAC;QAEF,IAAI,MAAW,CAAC;QAChB,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACzF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,0CAA0C;QAC7D,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,yEAAyE;YACzE,iEAAiE;YACjE,kEAAkE;YAClE,IAAI,UAAU;gBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,WAAW,OAAO,CAAC,EAAE,aAAa,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;YAChE,IAAI,OAAO,CAAC,QAAQ;gBAAE,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,CAAC,QAAQ,YAAY,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/F,CAAC;QAED,IAAI,UAAU,EAAE,CAAC;YACf,wBAAwB;YACxB,IAAI,CAAC,IAAI,CAAC,IAAI;gBAAE,OAAO,CAAC,GAAG,CAAC,4BAA4B,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC;YAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,wEAAwE;QACxE,yEAAyE;QACzE,uEAAuE;QACvE,sEAAsE;QACtE,uEAAuE;QACvE,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,OAAO,CAAC,EAAE,0BAA0B,CAAC,CAAC;QAE1F,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,IAAI,OAAO,GAAqD,IAAI,CAAC;QAErE,MAAM,OAAO,GAAG,CAAC,EAAc,EAAE,EAAE;YACjC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;YAClC,CAAC;iBAAM,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACjC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,WAAW,KAAK,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YACzE,CAAC;iBAAM,IAAI,EAAE,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC;iBAAM,IAAI,EAAE,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBACtC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/G,CAAC;iBAAM,IAAI,EAAE,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YAC/F,CAAC;iBAAM,IAAI,EAAE,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;gBAC3C,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,CAAC,EAAE,YAAY,CAAC,CAAC;YACrD,CAAC;iBAAM,IAAI,EAAE,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;gBACxC,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnG,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,CAAC,EAAE,UAAU,GAAG,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;YACrE,CAAC;iBAAM,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC/B,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;YACxC,CAAC;YACD,IAAI,EAAE,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;gBACpC,UAAU,GAAG,IAAI,CAAC;gBAClB,OAAO,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;YACpC,CAAC;iBAAM,IAAI,EAAE,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;gBACxC,UAAU,GAAG,IAAI,CAAC;gBAClB,OAAO,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC;YACtD,CAAC;QACH,CAAC,CAAC;QAEF,qEAAqE;QACrE,wEAAwE;QACxE,6DAA6D;QAC7D,MAAM,eAAe,GAAG,KAAK,IAAI,EAAE;YACjC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAuB,aAAa,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC3F,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACnG,CAAC;YAAC,MAAM,CAAC;gBACP,qEAAqE;gBACrE,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;YACpE,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;YAC7D,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI;gBAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;YACrE,KAAK,eAAe,EAAE,CAAC;QACzB,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;YACT,OAAO,CAAC,KAAK,CAAC,oBAAoB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,qEAAqE;QACrE,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAA4B,cAAc,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;YACjG,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE;gBAAE,OAAO,CAAC,EAAE,CAAC,CAAC;YAChD,IAAI,UAAU,EAAE,CAAC;gBACf,WAAW,EAAE,CAAC;gBACd,MAAM,eAAe,EAAE,CAAC;YAC1B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QAEV,iDAAiD;QACjD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YACxB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,mBAAmB,OAAO,CAAC,EAAE,oCAAoC,CAAC,CAAC;gBAC/E,OAAO,CAAC,GAAG,CAAC,0BAA0B,OAAO,CAAC,EAAE,wBAAwB,CAAC,CAAC;gBAC1E,OAAO,CAAC,GAAG,CAAC,0BAA0B,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC;YAClE,CAAC;YACD,WAAW,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,gDAAgD;QAChD,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;YACtB,OAAO,CAAC,UAAU,EAAE,CAAC;gBACnB,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,aAAa,EAAQ,CAAC;gBACvE,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACvB,MAAM,IAAI,CAAC;gBACX,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAuB,aAAa,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC3F,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;oBACnC,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC7B,IAAI,CAAC,IAAI,CAAC,IAAI;4BAAE,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,CAAC,EAAE,OAAO,MAAM,EAAE,CAAC,CAAC;wBACpE,WAAW,EAAE,CAAC;wBACd,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBAC9E,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YACZ,CAAC;QACH,CAAC,CAAC;QACF,IAAI,EAAE,CAAC;IACT,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,182 @@
1
+ import { getCachedOrDiscoverModels, } from "../../core/models.js";
2
+ import { runScreens } from "../picker.js";
3
+ import { colors, readDimensions } from "../ui.js";
4
+ import { getRegistry } from "../../drivers/registry.js";
5
+ import { loadConfig, saveConfig, } from "../../config/config.js";
6
+ /**
7
+ * Both streams have to be a terminal, not just stdout. A piped stdin leaves
8
+ * `question` waiting on input that can never arrive, and `tail -f /dev/null |
9
+ * codedeck open` keeps stdout a TTY while stdin is exactly that pipe.
10
+ */
11
+ export function isInteractiveTerminal() {
12
+ return Boolean(process.stdin.isTTY && process.stdout.isTTY);
13
+ }
14
+ /**
15
+ * The open command uses this decision before creating a readline interface.
16
+ * Keeping the terminal state as an argument makes the first-run policy pure.
17
+ */
18
+ export function needsModelSetup(config, isTTY = isInteractiveTerminal()) {
19
+ if (!isTTY)
20
+ return false;
21
+ return config == null || config.models == null;
22
+ }
23
+ const AGENT_LABELS = { claude: "Claude Code", codex: "Codex", omp: "omp" };
24
+ function agentLabel(agent) {
25
+ return AGENT_LABELS[agent] ?? agent;
26
+ }
27
+ function pinnedFor(harness, ids, configured) {
28
+ if (configured) {
29
+ // A saved id the catalog no longer lists still gets shown. Hiding it is how
30
+ // the wizard used to answer `open`'s own "that model is gone, run setup":
31
+ // the user arrived here and could not see which model it meant. Marking it
32
+ // 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" };
41
+ }
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 = [];
48
+ 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
+ });
67
+ }
68
+ }
69
+ const pinned = pinnedFor(harness, [...seen], configured);
70
+ const items = pinned ? [pinned, ...grouped.filter((item) => item.id !== pinned.id)] : grouped;
71
+ return {
72
+ agent: harness.agent,
73
+ title: agentLabel(harness.agent),
74
+ counter: `agente ${index + 1} de ${total}`,
75
+ error: harness.error,
76
+ items,
77
+ pinned: pinned !== undefined,
78
+ known: seen,
79
+ };
80
+ }
81
+ export function buildScreens(harnesses, configured) {
82
+ const seen = new Set();
83
+ // A merged disk cache can hand back the same agent twice.
84
+ const installed = harnesses.filter((harness) => {
85
+ if (!harness.available || seen.has(harness.agent))
86
+ return false;
87
+ seen.add(harness.agent);
88
+ return true;
89
+ });
90
+ return installed.map((harness, index) => buildAgentScreen(harness, index, installed.length, configured[harness.agent]));
91
+ }
92
+ export function collectSelections(results, existing, shown) {
93
+ // Starts from what was already saved: skipping has to leave it intact, and a
94
+ // brand new map would wipe a choice made on an earlier run.
95
+ const models = { ...(existing ?? {}) };
96
+ for (const result of results) {
97
+ if (result.kind === "picked")
98
+ models[result.agent] = result.id;
99
+ }
100
+ const aborted = results.some((result) => result.kind === "aborted");
101
+ return { models, write: shown > 0 && !aborted };
102
+ }
103
+ /** Below this no list survives once the chrome is placed. */
104
+ const MIN_ROWS = 8;
105
+ function watchResize(listener) {
106
+ process.stdout.on("resize", listener);
107
+ return () => {
108
+ process.stdout.off("resize", listener);
109
+ };
110
+ }
111
+ export async function runModelSetupWizard(options = {}) {
112
+ const config = options.config ?? loadConfig();
113
+ if (!(options.isTTY ?? isInteractiveTerminal()))
114
+ return config;
115
+ const output = options.output ?? process.stdout;
116
+ const input = options.input ?? process.stdin;
117
+ const registry = options.registry ?? getRegistry();
118
+ // Order matters: announce, discover with raw mode still off, and only then
119
+ // measure and draw. Discovery blocks for seconds, and doing it with the
120
+ // terminal already taken over looks like a freeze.
121
+ output.write("\n discovering models...\n");
122
+ let harnesses;
123
+ try {
124
+ const discover = options.discoverModels ??
125
+ ((selected, refresh) => getCachedOrDiscoverModels(selected, { refresh }));
126
+ harnesses = await discover(registry, options.refresh ?? false);
127
+ }
128
+ catch (error) {
129
+ // A catalog that cannot be reached is not an answer from the user. It falls
130
+ // into the guard below, which saves nothing and lets the next run ask.
131
+ console.error(`Warning: Could not discover models: ${error instanceof Error ? error.message : String(error)}`);
132
+ harnesses = [];
133
+ }
134
+ const screens = buildScreens(harnesses, config.models ?? {});
135
+ // Writing `models` is what marks first-run setup as done. Doing that after
136
+ // 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.");
139
+ return config;
140
+ }
141
+ const dim = options.dimensions ?? readDimensions(output);
142
+ if (dim.rows < MIN_ROWS) {
143
+ console.error(`Warning: Terminal is ${dim.rows} rows, model setup needs ${MIN_ROWS}. Nothing was saved.`);
144
+ return config;
145
+ }
146
+ 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);
149
+ if (!write) {
150
+ console.error("Warning: Model setup was interrupted; nothing was saved.");
151
+ return config;
152
+ }
153
+ const updatedConfig = { ...config, models };
154
+ try {
155
+ (options.save ?? saveConfig)(updatedConfig);
156
+ }
157
+ catch (error) {
158
+ console.error(`Warning: Could not save config: ${error instanceof Error ? error.message : String(error)}`);
159
+ }
160
+ const summary = screens
161
+ .map((screen) => `${screen.title} ${models[screen.agent] ?? "unset"}`)
162
+ .join(" · ");
163
+ output.write(`\n saved: ${summary}\n\n`);
164
+ return updatedConfig;
165
+ }
166
+ export function registerSetupCommand(program) {
167
+ program
168
+ .command("setup")
169
+ .description("Choose the model each installed agent should use")
170
+ .option("--refresh", "ignore the cached catalog and rediscover")
171
+ .action(async (opts) => {
172
+ // The message lives here rather than in the wizard, because `open` calls
173
+ // the same function and has to stay quiet when it cannot prompt.
174
+ if (!isInteractiveTerminal()) {
175
+ console.error("codedeck setup needs a terminal on both stdin and stdout.");
176
+ process.exitCode = 1;
177
+ return;
178
+ }
179
+ await runModelSetupWizard({ refresh: opts.refresh });
180
+ });
181
+ }
182
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"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"}
package/dist/cli/index.js CHANGED
@@ -13,6 +13,8 @@ import { registerStopCommand } from "./commands/stop.js";
13
13
  import { registerDiffCommand } from "./commands/diff.js";
14
14
  import { registerDoctorCommand } from "./commands/doctor.js";
15
15
  import { registerModelsCommand } from "./commands/models.js";
16
+ import { registerOpenCommand } from "./commands/open.js";
17
+ import { registerSetupCommand } from "./commands/setup.js";
16
18
  function getVersion() {
17
19
  try {
18
20
  const pkgPath = path.join(path.dirname(fileURLToPath(import.meta.url)), "../../package.json");
@@ -68,6 +70,8 @@ registerStopCommand(program);
68
70
  registerDiffCommand(program);
69
71
  registerDoctorCommand(program);
70
72
  registerModelsCommand(program);
73
+ registerOpenCommand(program);
74
+ registerSetupCommand(program);
71
75
  // Make `codedeck help` behave like `codedeck --help`
72
76
  program.command("help", { hidden: true }).action(() => program.outputHelp());
73
77
  program.parseAsync(process.argv).catch((err) => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC;QAC9F,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QACvD,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,uHAAuH,CAAC;KACpI,OAAO,CAAC,UAAU,EAAE,CAAC;KACrB,UAAU,CAAC,YAAY,EAAE,0BAA0B,CAAC;KACpD,kBAAkB,CAAC,0BAA0B,CAAC;KAC9C,wBAAwB,CAAC,IAAI,CAAC;KAC9B,WAAW,CAAC,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BvB,CAAC,CAAC;AAEH,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAE/B,qDAAqD;AACrD,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;AAE7E,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAC7C,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ export function initialState(screen) {
2
+ return { screen, filter: "", cursor: 0, offset: 0, pasting: false };
3
+ }
4
+ /**
5
+ * Searches everything the catalog knows about a model, not just what fits on
6
+ * the row. The provider is on screen as a group header, so typing it and
7
+ * getting nothing read as a broken filter, and the readable name is the only
8
+ * place a version like "Opus 5" is spelled the way people say it.
9
+ */
10
+ function matches(item, filter) {
11
+ return [item.label, item.id, item.group, item.name].some((field) => field !== undefined && field.toLowerCase().includes(filter));
12
+ }
13
+ /**
14
+ * Real catalog matches, which is not `visibleItems().length`: that one never
15
+ * returns empty, so counting it reported one hit for a filter that matched
16
+ * nothing.
17
+ */
18
+ export function hitCount(state) {
19
+ const filter = state.filter.trim().toLowerCase();
20
+ if (!filter)
21
+ return state.screen.items.length;
22
+ return state.screen.items.filter((item) => matches(item, filter)).length;
23
+ }
24
+ export function visibleItems(state) {
25
+ const filter = state.filter.trim().toLowerCase();
26
+ const hits = filter ? state.screen.items.filter((item) => matches(item, filter)) : state.screen.items;
27
+ if (hits.length > 0)
28
+ return hits;
29
+ // Nothing to list, so the only way forward is writing the raw text. This is
30
+ // also the whole screen for a harness that reported no catalog at all, which
31
+ // would never have a list to filter.
32
+ const raw = state.filter.trim();
33
+ return [{ id: raw, label: raw ? `usar "${raw}" como id` : "digite um id", synthetic: true }];
34
+ }
35
+ function scrolled(state, cursor, viewport) {
36
+ const offset = Math.min(state.offset, cursor);
37
+ return { ...state, cursor, offset: Math.max(offset, cursor - viewport + 1) };
38
+ }
39
+ /**
40
+ * Pulls the cursor back into view without moving it. A resize can shrink the
41
+ * viewport under a cursor that was scrolled into the old one, and the frame
42
+ * then rendered a window the cursor was not in.
43
+ */
44
+ export function reanchor(state, viewport) {
45
+ return scrolled(state, state.cursor, viewport);
46
+ }
47
+ const none = (state) => ({
48
+ state,
49
+ action: { kind: "none" },
50
+ });
51
+ export function applyKey(state, key, viewport) {
52
+ if (key.name === "paste-start")
53
+ return none({ ...state, pasting: true });
54
+ if (key.name === "paste-end")
55
+ return none({ ...state, pasting: false });
56
+ // Inside a paste only text gets through. A `\n` in the middle of pasted text
57
+ // must not choose a model, and a pasted `\x1b[A` must not move the cursor.
58
+ if (state.pasting) {
59
+ if (key.ctrl || key.meta || key.sequence.length !== 1)
60
+ return none(state);
61
+ if (key.sequence < " ")
62
+ return none(state);
63
+ return none({ ...state, filter: state.filter + key.sequence, cursor: 0, offset: 0 });
64
+ }
65
+ if (key.ctrl && key.name === "c")
66
+ return { state, action: { kind: "aborted" } };
67
+ if (key.ctrl && key.name === "g")
68
+ return { state, action: { kind: "skipped" } };
69
+ const items = visibleItems(state);
70
+ const pending = state.confirming;
71
+ const cleared = pending === undefined ? state : { ...state, confirming: undefined };
72
+ if (key.name === "return") {
73
+ const item = items[cleared.cursor];
74
+ if (!item)
75
+ return none(cleared);
76
+ if (item.synthetic && item.id === "")
77
+ return none(cleared);
78
+ if (!item.synthetic || cleared.screen.known.has(item.id)) {
79
+ return { state: cleared, action: { kind: "picked", id: item.id } };
80
+ }
81
+ if (pending === item.id)
82
+ return { state: cleared, action: { kind: "picked", id: item.id } };
83
+ return none({ ...cleared, confirming: item.id });
84
+ }
85
+ if (key.name === "up")
86
+ return none(scrolled(cleared, Math.max(0, cleared.cursor - 1), viewport));
87
+ if (key.name === "down") {
88
+ return none(scrolled(cleared, Math.min(items.length - 1, cleared.cursor + 1), viewport));
89
+ }
90
+ if (key.name === "backspace") {
91
+ return none({ ...cleared, filter: cleared.filter.slice(0, -1), cursor: 0, offset: 0 });
92
+ }
93
+ // Esc never skips: an arrow sequence that arrives fragmented shows up as a
94
+ // lone escape, and skipping on that would throw away the user's answer.
95
+ if (key.ctrl || key.meta || key.sequence.length !== 1)
96
+ return none(cleared);
97
+ if (key.sequence < " ")
98
+ return none(cleared);
99
+ return none({ ...cleared, filter: cleared.filter + key.sequence, cursor: 0, offset: 0 });
100
+ }
101
+ //# sourceMappingURL=picker-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"picker-state.js","sourceRoot":"","sources":["../../src/cli/picker-state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,147 @@
1
+ import { emitKeypressEvents } from "node:readline";
2
+ import { applyKey, initialState, reanchor, } from "./picker-state.js";
3
+ import { readDimensions, renderFrame, viewportHeight } from "./ui.js";
4
+ const PASTE_ON = "\x1b[?2004h";
5
+ const PASTE_OFF = "\x1b[?2004l";
6
+ /**
7
+ * `emitKeypressEvents` attaches a parser to the stream and offers no way to
8
+ * take it back: it adds a `newListener` hook that swaps itself for a `data`
9
+ * handler once something listens for keypresses. Removing our own `keypress`
10
+ * handler leaves that parser turning every later byte into keypress events for
11
+ * a picker that is gone. Both names are watched because which one is left
12
+ * behind depends on whether a screen ever started.
13
+ */
14
+ function detachKeypressParser(input, before) {
15
+ const stream = input;
16
+ for (const event of ["data", "newListener"]) {
17
+ for (const listener of stream.listeners(event)) {
18
+ if (!before[event].includes(listener))
19
+ stream.removeListener(event, listener);
20
+ }
21
+ }
22
+ }
23
+ /**
24
+ * Sole owner of raw mode, the listeners and the cleanup. Acquiring per screen
25
+ * would let one screen's type-ahead leak into the next.
26
+ */
27
+ export async function runScreens(screens, io, c) {
28
+ const { input, output } = io;
29
+ const results = [];
30
+ let restored = false;
31
+ const restore = () => {
32
+ if (restored)
33
+ return;
34
+ restored = true;
35
+ try {
36
+ output.write(`${PASTE_OFF}\n`);
37
+ }
38
+ catch {
39
+ // A dead stdout (EPIPE under `| head`) must not cost the terminal its
40
+ // cooked mode: the write is the disposable half of restoring.
41
+ }
42
+ input.setRawMode?.(false);
43
+ input.pause();
44
+ };
45
+ // SIGTERM does not run the `exit` handler, and counting on Node to restore
46
+ // the TTY by itself is counting on luck.
47
+ const onExit = () => restore();
48
+ const onSigterm = () => {
49
+ restore();
50
+ process.exit(143);
51
+ };
52
+ process.on("exit", onExit);
53
+ process.on("SIGTERM", onSigterm);
54
+ // One frame and one resize listener for the whole run: a listener per screen
55
+ // piled up four of them on a four agent run.
56
+ const frame = { height: 0, repaint: () => { } };
57
+ let stopResize;
58
+ const listeners = input;
59
+ const before = {
60
+ data: [...listeners.listeners("data")],
61
+ newListener: [...listeners.listeners("newListener")],
62
+ };
63
+ // Setup lives inside the try because raw mode is on from its second line: a
64
+ // throw between there and the loop used to skip the finally entirely.
65
+ try {
66
+ emitKeypressEvents(input);
67
+ input.setRawMode?.(true);
68
+ input.resume();
69
+ output.write(PASTE_ON);
70
+ stopResize = io.onResize?.(() => frame.repaint());
71
+ for (const screen of screens) {
72
+ const result = await runScreen(screen, io, c, frame);
73
+ results.push(result);
74
+ if (result.kind === "aborted")
75
+ break;
76
+ }
77
+ }
78
+ finally {
79
+ frame.repaint = () => { };
80
+ stopResize?.();
81
+ detachKeypressParser(input, before);
82
+ process.off("exit", onExit);
83
+ process.off("SIGTERM", onSigterm);
84
+ restore();
85
+ }
86
+ return results;
87
+ }
88
+ function runScreen(screen, io, c, frame) {
89
+ return new Promise((resolve, reject) => {
90
+ const { input, output } = io;
91
+ let state = initialState(screen);
92
+ const paint = () => {
93
+ const dim = readDimensions(output);
94
+ // A resize can shrink the viewport under a cursor that was scrolled into
95
+ // the old one. Reanchoring here covers the repaint the resize triggers,
96
+ // where no key ran to fix the offset.
97
+ state = reanchor(state, viewportHeight(state, dim));
98
+ const lines = renderFrame(state, dim, c);
99
+ // Go up by the previous frame's height and clear from there down, or a
100
+ // smaller frame leaves the bigger one's leftovers on screen.
101
+ const prefix = frame.height > 0 ? `\x1b[${frame.height}A\x1b[0J` : "";
102
+ output.write(`${prefix}${lines.join("\n")}\n`);
103
+ frame.height = lines.length;
104
+ };
105
+ const detach = () => {
106
+ input.off("keypress", onKey);
107
+ frame.repaint = () => { };
108
+ };
109
+ const onKey = (sequence, key) => {
110
+ const pressed = key
111
+ ? { ...key, sequence: key.sequence ?? sequence ?? "" }
112
+ : { sequence: sequence ?? "", ctrl: false, meta: false };
113
+ try {
114
+ const outcome = applyKey(state, pressed, viewportHeight(state, readDimensions(output)));
115
+ state = outcome.state;
116
+ if (outcome.action.kind === "none") {
117
+ paint();
118
+ return;
119
+ }
120
+ detach();
121
+ if (outcome.action.kind === "picked") {
122
+ resolve({ kind: "picked", agent: screen.agent, id: outcome.action.id });
123
+ return;
124
+ }
125
+ if (outcome.action.kind === "skipped") {
126
+ resolve({ kind: "skipped", agent: screen.agent });
127
+ return;
128
+ }
129
+ resolve({ kind: "aborted" });
130
+ }
131
+ catch (error) {
132
+ detach();
133
+ reject(error);
134
+ }
135
+ };
136
+ input.on("keypress", onKey);
137
+ frame.repaint = paint;
138
+ try {
139
+ paint();
140
+ }
141
+ catch (error) {
142
+ detach();
143
+ reject(error);
144
+ }
145
+ });
146
+ }
147
+ //# sourceMappingURL=picker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"picker.js","sourceRoot":"","sources":["../../src/cli/picker.ts"],"names":[],"mappings":"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"}